while pruning down coolstation's materials code, cause as it turns out having a big system whereby the materials that objects are optionally made out of are not sharing the same material but separately mutable instances that need to be deep copied across objects all the time for the benefit of about half a dozen uncommon traits that are unfortunate to be lost but ultimately can't justify the amounts of wasted time that supports the materials infrastructure isn't the best idea on an engine that is for most purposes single threaded,
anyway
while pruning down coolstation's materials code, I found out that the function a material to change the value of one of its properties loops through all its properties and looks for a matching ID which it tells to update the value. That property then loops through the material's properties to find itself by ID, then uses itself as an index on the material's list of properties to set the actual value. This seems to be because material properties are actually singletons that many materials share.
(there's only 2-6 properties on any particular material, so it's not a huge loss but it is funny)