But how would that work, exactly? I figured for when people used two elements, I'd just average their stats out to create a new element.
This sounds interesting, especially if effects can be added, averaged, or multiplied depending on the combination used. IE: Say you have a very strong attack that just hits the target, and another that is pretty weak but has some sort of area of effect. Combining the two could come out with a still strong attack with a minor AOE component.
I'm not sure how I'd do that for objects. Maybe have an ItemDef remember which of it's stats are it's good stats, and have combo Items just take all the good stats to make a new kind of item? Hmm. Right now, I think I need to have items remember their Definitions and mods, and then maybe also have them store all their local Data? Or I could have them calculate it on the spot each time. And maybe I should also make an interface and some classes for stat, cause some stats work different from others - mass, for example, is a product of volume and density.
I'm not sure if it would fit here, but you might be able to work from components instead of objects. Your Items could have the following components: Stats, Materials{Density, Deformation statistics, ...}, Physics{Position, Dimensions, ...}, and probably way more to go with these.
You'd then have various ways to combine the information to make it more meaningful: Mass takes information from MaterialDensity and Volume (which could be calculated from PhysicsDimensions if a solid item). The Component model is decent at allowing mix-and-match things, and gives some implicit information about what the capabilities of an object/entity has. Not all of these components would be necessary for all objects, though the Position/Dimension component is most likely to exist on all objects/entities.
If this sounds like it might fit I'll do some research to get you some stuff to read, and will make a more thorough explanation of what you can do with it
Sorry if that sounded in any way confusing and will be happy to answer any questions. Good luck on the project!