Feel free to add small modding-related ideas to this thread.
Original concept:
1.) Customized tokens. custom_token.txt is created in the raw/objects folder.
custom_token
[OBJECT:CUSTOM_TOKEN]
[TOKEN:TOADY] this is an example of a custom token
[TYPE:ITEM] arguments are: ITEM ENTITY MATERIAL PLANT CREATURE BODY
Tokens defined in this file can be added to any of the things that correspond to the argument used in their type. Each token must be unique in name.
Can be used in reactions in 2 ways:
As a reagent, two modifiers exist: HAS_TOKEN and NOT_TOKEN
For instance:
[REACTION:SMELT_METAL_ITEM_AVE]
[NAME:Melt metal item]
[REAGENT:A:1:NONE:NONE:NONE:NONE][REACTION_CLASS:METAL][NOT_TOKEN:INGOT]
[REAGENT:D:1:TOOL:ITEM_TOOL_SMELTER_AVE:NONE:NONE][PRESERVE_REAGENT]
[PRODUCT:100:1:TOOL:ITEM_TOOL_INGOT_AVE:GET_MATERIAL_FROM_REAGENT:A:NONE]
[PRODUCT:100:1:TOOL:ITEM_TOOL_INGOT_AVE:GET_MATERIAL_FROM_REAGENT:A:NONE]
[SKILL:SMELT]
[ADVENTURE_MODE_ENABLED]
This takes any metal item and converts it into a (metal type) ingot, which will have the TOKEN:INGOT token included in its definition, so the reaction WILL NOT accept the ingot itself. If it did, then you would be duplicating the ingot endlessly.
In a broader sense, what this would do is allow modders to group items together. As more options become available to players, these custom tokens would ease some areas of implementation on the design side as well as allowing user content to define tool knives and daggers as being in the same category, lets a player modify building reactions so dwarves will use certain groups of items, etc.
Tokens could even be used for civilization factioning (a separate implementation/idea in and of itself that I won't get into too deeply) by defining tendencies with tokens that would make some civilizations more prone to treating others in a particular way. In a basic sense, civilizations that share tokens will have more tolerance for one another. If a feature like this were to be implemented it would be a simple enough matter to add another definition to tokens such as alignment that you can optionally define under the token.
Refined concept:
1.) Simply put, the addition of ITEM_REACTION_CLASS with companion modifiers HAS_ITEM_CLASS and HAS_NOT_ITEM_CLASS.
[ITEM_REACTION_CLASS:X] is added to any object of type item (everything you can put into your inventory) and can be defined as anything. In reactions, the two modifiers can be used to include or disallow items sharing a reaction class. As an example:
[REACTION:SMELT_METAL_ITEM_AVE]
[NAME:Melt metal item]
[REAGENT:A:1:NONE:NONE:NONE:NONE][REACTION_CLASS:METAL][HAS_NOT_ITEM_CLASS:INGOT]
[REAGENT:D:1:TOOL:ITEM_TOOL_SMELTER_AVE:NONE:NONE][PRESERVE_REAGENT]
[PRODUCT:100:1:TOOL:ITEM_TOOL_INGOT_AVE:GET_MATERIAL_FROM_REAGENT:A:NONE]
[PRODUCT:100:1:TOOL:ITEM_TOOL_INGOT_AVE:GET_MATERIAL_FROM_REAGENT:A:NONE]
[SKILL:SMELT]
[ADVENTURE_MODE_ENABLED]
The item entry:
[ITEM_TOOL:ITEM_TOOL_INGOT_AVE]
[NAME:ingot:ingots]
[VALUE:10]
[SIZE:200]
[TILE:'=']
[MATERIAL_SIZE:1]
[HARD_MAT]
[ITEM_REACTION_CLASS:INGOT]
This reaction will not show ingots in the crafting menu when melting down metal items although they ARE metal items. This allows 1 reaction to do what normally would take 13 (12 if you don't include the item type that INGOT belongs to, in this case tools) reactions.
------------------
2.) Expand 'DIMENSION' to encompass all items, taking over SIZE/WEIGHT where applicable (these could be analogous terms as they already are for one another). Reactions can interact with DIMENSION but not SIZE/WEIGHT as things currently are. Going again by the above example of my own script (yes I have an ulterior motive here), were it possible to endow, say, tools with DIMENSION:50 or something, that script could then demand a reagent have MIN_DIMENSION:100 and disallow the ingot from melting into 2 of itself that way.
------------------
3.) Variable output for PRODUCTs: MATERIAL_SIZE of reagent or DIMENSION (if above is implemented) can affect PRODUCTs like so:
[PRODUCT:100:1:TOOL:ITEM_TOOL_INGOT_AVE:INORGANIC:STEEL][INPUT_REAGENT_SIZE:A:50]
INPUT_MAT_SIZE means that for each time REAGENT:A matches the input size of '50' it produces 1. So if you use, say, a war hammer (SIZE of 400), you would get 8 steel ingots. Or if you use material size (3), the output could look like this:
[PRODUCT:100:1:TOOL:ITEM_TOOL_INGOT_AVE:INORGANIC:STEEL][USE_MATERIAL_SIZE:1]
That is, use material size / 1, in this case giving you 3. USE_MATERIAL_SIZE:2 would give you just 1, but if you were using a Battle Axe (MS 4), USE_MATERIAL_SIZE:2 would give you 2.