Put on the Eternal Suggestions Voting as "Alchemical Material Property Tokens" if you wish to vote for this.One thing that makes Dwarf Fortress somewhat unique is in the way that objects are handled by the game - objects are not just one thing as they are in most games (a steel longsword is just one item, as completely distinct from an orihalcum longsword as it is from any other weapon in the game), but rather the combination of a "material" (what defines the physical and chemical properties of that item), a "shape" (the specific type of tool or item class it belongs to, and what defines how the item is used), and possibly "improvements" (which are mostly cosmetic descriptors like hanging rings that exist for the purposes of the player's entertainment or increasing value, but without much gameplay effect at the moment).
"Alchemy" in most games is like how most of the reactions that already exist in DF work right now - a set, specific list of items producing a set, specific product with set, specific properties. Dwarf Fortress, however, really needs to make much more use of its category-based reactions system, as DF is flooded with different material types that come from the various different types of barely-distinguished stones, and hundreds of different creature types.
This is
especially problematic now that we are going into having to use specific materials against specific night creatures. As someone said in another thread, we may be called upon to kill a beast that is only vulnerable to weapons carved from frozen sperm whale ambergris, nevermind the fact that sperm whales may be extinct in this world, and it will be impossible to create such a weapon.
It also provides a use for the several currently "useless" materials, like ores that cannot be smelted into useful types of metal (such as cinnibar or cobaltite).
By adding either raw-defined or procedural material properties (at the player's choice) onto materials, the tremendous number of different materials can be given a meaning in their differences. This was always intended, but never actually implemented, as, I believe, Toady never really figured out how, and that is why I suggest transferable "alchemical material property" tokens as a solution.
I have been musing over the idea for over a year, now, and I believe that the best way to incorporate a truly innovative alchemy system for Dwarf Fortress is to embrace the rather loosely-defined rules that govern the game, and allow players to create a radically wide array of effects from the materials that they have on hand.
On the games that helped inspire this idea (skippable):The game series that inspired me most on this front were the Gust Corporation games, especially Mana Khemia and Atelier Rorona. Gust Corporation makes games that specifically revolve around an alchemist main character, building the game around its crafting system, and expecting you to survive combat through the use of the weapons, armor, and expendable items you craft.
Mana Khemia refined upon the previous games of the series, and essentially would start you out as an apprentice alchemist that learns to perform his first alchemy making a basic healing potion using, essentially, a weed and some water.
However, instead of being a static formula, you could substitute ingredients to make improved potions with improved effects. Water from a pure spring in a difficult-to-reach area and a magical herb found later in the game could be used in the formula instead to make a much-improved basic healing potion with a greater effect.
Further, when you make your equipment, you can pass on the properties of the raw materials, meaning that re-making equipment when you get access to higher-quality materials can give you new properties in your equipment, such as access to new spells or a bonus to the stats of the equipment.
Atelier Rorona goes even further, and has a multi-tiered list of procedurally generated effects on every single item, and almost all of the crafting is done by category. Hence, you can make a healing salve with any material item that has a "plant" token and any "oil" token material, but since every item has different alchemical properties, even if they are the same type of mushroom, one mushroom might have a (useless) "stinky" effect or "small" effect, or it might have a "quality +1" effect that improves the quality of any item made from it, or a "satisfying" effect that gives it a 20% chance to have double the normal effect.
See:
http://www.youtube.com/watch?v=4siJ0NoS0Cs&feature=relatedThe "Trait Choices" in the bottom right? That's the part I'm leaning towards learning from.
That recepie, by the way, takes "anything with the [PLANT] category" and a "Pure Oil" specific item to make a "Healing Scent" (a bar of soap that exists only to be used as another intermediary product for further synthesis).
Outline of what will need to be implemented:Currently, materials are raw-defined as being a single object. That is, when you see a reference to "Iron", that creates a reference to the single raw-defined "Iron" material type. (Exceptions existing for special hardcoded materials, which still are defined, but not raw-defined.)
What this proposes to do is replace the single raw definition with a "material type" that is determined from multiple tokens.
This requires a new "layer" of raws that stands between the materials_template_default, and the inorganic_whatever or plant_whatever, which would be a master sheet of alchemical_property_tokens, from which all materials draw their alchemical property tokens. The inorganic raws would no longer define material properties like boiling point, but define their properties through the alchemical property tokens that they possess, along with the rest of the tokens that define distribution in the game world.
(Another new layer of raws would also need to be built to define how alchemical property tokens interact with one another as compared to the more general reaction raws, which define what materials can be used in those reactions.)
Specifically, instead of having a single "Iron" type, what this will do is force iron to have a base type token ("metal") which has a basic (possibly hard-coded) set of properties, and then add on tokens that modify this basic set of properties until it becomes the types of material properties that Iron should possess.
This would mean, for example, that you would split iron into several different tokens that are "+___ amount of density" tokens and "+____ amount of melting point" tokens. This would also, however, include all of the special material properties, like the "always stays at 0 Centigrade" property of a void cap, as well as procedurally generated "useless" properties (such as, for example, "chalky" or "crumbles easily") that can be given to different types of stones or animal body part materials.
The purpose behind this is so that, when reactions take place, rather than taking the properties of only one single material, the properties of multiple materials used in the manufacture of an item can be combined. This would mean that if, for example, a steel bar were made of nethercap charcoal, it could pass along the property of always being 0 Centigrade to the sword that the steel later becomes forged into. This means that materials with special properties can pass their special properties onto many new and different kinds of tools.
These different tokens can react to one another when in a reaction that combines their materials and create new tokens from the fusion, and new material properties can be passed along to the product. A sword made of iron, for example, if it is forged with a type of flux that contains a specific token that reacts with a specific iron token, it will change the physical properties of the resulting weapon. For example, if dolomite has a specific, normally useless property that only affects descriptions, like "polished", it may react with one of the property tokens of iron that govern the max edge to change that token to another form of property-changing token. For example, the "polished" token might slightly increase the overall MAX_EDGE property of the finished "steel", meaning that there would be a slight advantage in using dolomite in the production of "steel".
I throw quotes around the "steel" here, because a part of what I am proposing is that "steel" as a single item will no longer exist. Instead, a specific type of material will be replaced with simply having a specific pattern of tokens. That is, not only is Iron differentiated from "Metal" material class in general by the material property tokens, but that the specific list of tokens iron has will be the definition of iron. Any material that has those specific tokens will be considered iron. As such, you could hypothetically derive iron as a product if you had a specific set of alchemical material property token reactions that would result in the exact same set of tokens that defines iron. "Steel", then, would simply be the name given to the specific set of material tokens that are derived from the combination of pig iron, charcoal/coal (carbon), and a material property token for flux. If there were a special reaction that added a new material property, it would instead become something not-quite-steel, at least as traditionally defined.
Because of this, if you think of this in strictly real-world scientific terms, an alchemical material property token would basically be an "element" and the whole list of alchemical material property tokens would be the "compound". In fact, for those who prefer such a game, this could be reduced to strictly real-world reactions with absolutely no magical property tokens existing at all, and all material property tokens representing strict elements.
Currently, many reactions defined in the raws are, essentially, "alloy" reactions. You take two different kinds of metals, typically in bar form, and combine them into another new set of bars with a different material. What this proposal would do is replace the strict set of reactions that are given to a player, and replace them with an "Alchemical Reaction Web". Alloys are made by simply mixing and matching specific metal properties.
On a more basic level, our current small list of dyes could be allowed to create more possible colors - the blue dye and red dye we already have can be combined to create some purple colored clothing, for example, by using an alchemical reaction that combines a "blue dye" and "red dye" token when they are present together.
Because uses of items are based upon the "shape" of an item (that is, the object type, such as the "door" part of a wooden door), this means that we can then create very general types of items, and simply allow the material property tokens to make items with wildly different actual uses.
For example, in many "Alchemy" mods or systems in other games, you create a "healing potion" or a "strength potion" that temporarily alters some property of your character when you drink it. With transferable material properties, however, you can create the very broad definition of an "imbibable fluid" or "potion" type that can accept a very wide range of materials (although it might require some sort of sufficient solvent, it could potentially take many forms of powder), which might have any range of effects from just plain poisoning and killing the imbiber on the spot to super strength to healing to spontaniously combusting (with or without killing the imbiber). Any effect that can be a material property token passed into the potion type object would be the potential effect of these "potions" that activate upon use.
This can also allow for a streamlining between interactions, syndromes, and material properties, creating a far more fluid system, and helping to pave the way for future magic systems.
As for how reactions work, what you would actually see is something more like the following, if you made the raw format a little more legible:
Workshop Reaction: Smelt with carbon and flux:
Building: any smelter
Requirement: Dwarven smelting techniques enabled
Reagent 1: any metal
Reagent 2: bar with "carbonized" token
Reagent 3: any stone
Reagent 4: Heat source (although the carbonized bar counts)
Product: metal type
Then, you might see something like this in the property reaction raws:
Property Token Reaction: Becomes Steel
Catalyst: Smelter
Token 1: token(s) that characterize pig iron (may just be "carbonized" and "iron")
Token 2: Flux token
Token 3: Carbonized token
Product Token: token(s) that define steel
You can put in any metal, any sort of carbon-rich bar, and anything that counts as flux, and you'll get something in return.
If you put in pig iron, coke, and a basic flux like chalk, you'll get Steel. If you meddle with the inputs, you'll get something different.
Since you can keep feeding a metal into the reaction, however, you can keep adding strange properties to the same metal and keep feeding it through the reaction to give it odd tokens before finally doing a "steel-like" reaction, which can give you steel, but maybe with something extra on top.
The point is that your reactions don't have defined outcomes, the game just checks for token reactions at the time that you have a workshop reaction. Nothing stops you from making reactions that do little but stack property tokens on or cancel tokens out while spitting out the same "shape" of item you put in, plus or minus some property tokens.
So, instead of just trying to make a specific type of item straight away, what a player might do is constantly loop a single item that is a bar of metal through various smeltings to add all sorts of crazy properties before finally sending it off to become made into a final product.
Likewise, with the medical/potion/cooking/organic stuff, you might just constantly fiddle with the properties of some basic "plant" item or "meat" item or whatever, and try to pass around and collect on a single item all the properties you want before passing it into the finished product reaction to become made into a potion or a finished dish.
That way, you could, say, have the ability to use an edible plant and some water to make some sort of drinkable potion. The basic plants and water you have won't actually give you any beneficial effects, however. If you prepare the plants by stewing them with another plant, however, it might result in a plant with new properties thanks to a property token reaction. Then, if the water is altered with some bone powder being dissolved in, its properties might change, as well. So then, when you finally make the potion, the properties might have some completely different effect than when you just made a potion of the basic crop plant and basic well water.
Hence, you don't need that many actual workshop reactions. You can pretty much cover everything with "plant + liquid + container for liquid = potion + container for potion" and then maybe some for "powder + liquid + container for liquid = liquid + container for liquid" or some similar things that are all very vague classes of reactions.
What gets complicated, and where all the "magic takes place" is in the property token reactions, which combine to form the Alchemical Reaction Web.
Click here for a post with pretty pictures detailing the simplified view of this!Alchemical Reaction WebsThe alchemical reaction web is the term I am giving to the grand list of different reactions between property tokens that can produce new property tokens, and the catalysts for those reactions. (Catalysts being defined in more depth below, but basically meaning what sort of workshop allows that reaction.)
Alchemical reaction webs can and should be created in two ways:
One, it is raw-defined. This lets players mod the game to have a reaction web of their personal choosing, but also allows for a "Vanilla" web so that new players can get used to a static set of reactions without having to worry about the trial-and-error experimentation.
Two, it can be procedurally generated on worldgen. This would let players experience a truly wild and unpredictable venture into the world of Dwarf Fortress by leaving them unsure of how to make many items, and unable to rely upon a wiki for easy answers to create powerful items.
Also raw-definable could be the material property tokens themselves.
In much the same way that we are offered the promise through interactions to create a very wide range of effects on the game world, and how we can raw-define our own material properties, we can be given the chance to create our own material property tokens that would be taking the place of material properties, attach them to specific raw materials, and place them in the reaction web so as to create new potential combinations of material properties in the game.
Besides simply having property tokens that can combine to create new property tokens, however, some property tokens should be capable of cancelling out other property tokens. This can be useful in the sense that you can remove dangerous negative (or positive if you are creating a weapon) tokens, or it can make specific goal tokens more difficult to reach, because it limits the amount of tokens that can be on any given material before they start conflicting and canceling one another out. An "always on fire" token, for example, might be canceled by a "always cold as ice" token, like the one that a nethercap already possesses. Or, more mundanely, a token that reduces material density and a token that adds material density might conflict, and either nullify, or if one token is much more powerful than the other, produce a material token of greatly reduced power.
Creating nullifying combinations of tokens also helps to keep the overall complexity of the potential reactions from getting too out of hand while at the same time preventing those contradictory "fire and ice" types of properties.
In general, some things that might be worth borrowing from Atelier Rorona in the generation of these webs, however, is a notion of "property tiers".
Everything in Atelier Rorona had at least 3 tiers of effect - even if the property was a cosmetic "stinky" effect, it had the more powerful "super stinky" and third-tier "giga stink" effect. Likewise, each property that affected how the item was actually used, like "Limited Range +1" (which makes area-effect explosive items affect a smaller area but deal more damage) could go up to three levels (and had the special form "Restricted Range" that limited area of effect to one but increased power by 50% that was only achievable by a specific, hard-to-get combination of properties). It was possible to make token reactions that combined tier 1 properties into a tier 2 property, but they were generally hard to find, and made items with pre-existing tier 3 properties (which were only found in the more dangerous late-game areas) more valuable, even if they were generally the same types of items. (A fabric material like feathers from the start of the game would only give tier-1 "Defense +1" to clothing, but late-game verions of the same item could give "Defense +3" or "All Attributes +2".)
The "useless" properties, like "stinky" and the upgraded for "giga stink", however, could have useful effects in the reactions, however. A "unique" (tier-2 "cool") item property could react with "Quality +1" to create "Quality +2" properties that further improved the power and usefulness of an item, and as such, these properties still mattered for the reactions they could provide.
Material property tokens, when they are created, need to be aware of how valuable and magical a property they are, so that when they are procedurally generated, they can be placed along the web in positions that reflect their value and rarity. These tokens can then be procedurally assigned to the materials, like the layer stones, according to how valuable they are supposed to be. Most stones, of course, should probably not have immediately powerful abilities (like a stone that is always on fire), but could have "descriptive" property tokens (like a "shiny" or "super shiny" or "polished") that can react to create much more powerful material property tokens, like making an always-on-fire material.
Beyond that, it may be possible to allow for even procedurally generated material property tokens, and then procedurally placing those material property tokens into the overall web, and procedurally attaching some of those material property tokens to make procedurally generated stone and mineral types, creating that "procedurally generated metals" design goal that has so far proved elusive.
It also gives different creature body parts more meaning - now a fire imp bone can be more significantly different than a cow bone. You can use fire imp bones as the base for fire-related tokens, while cows might have more mundane material properties.
Earlier, I mentioned that a steel material that had new material properties couldn't actually be called steel anymore. This means we need a way of giving it a new name, and as part of that, the best solution may be the procedural name-generation system.
For example, you can give a specific set of material properties the name "steel", but if it's steel plus a few other things that don't have pre-defined names, it can start to use the naming system to create a new name for the specific type of steel. For example, you might have "Blue Steel", or "White Steel", or "Tiger Fang Steel", or "The Steels of Carppicks" if we are feeling particularly silly with the grammar system, depending on what sort of tokens are modifying what the game recognizes as a basic steel list of tokens.
Data storageOne of the problems I spent much of my time mulling over was how to properly store this data.
In Atelier Rorona, you were given a hard limit of four passable properties per item (plus some innate properties of a given type of item) and a functional hard limit on the number of items that could exist in the game (you could carry 100 items in your basket, 500 items in your storage site, 50 items with your helper, and register up to 50 more items with shopkeepers), and any other item not in those held inventories was deleted, with all new items having their properties procedurally generated on the spot when you were given the choice to pick them up.
This is because each and every item had to be tracked separately because of the individual properties of every item could be different, even if they were the same type of item. (A bucketful of water, for example, had its own quality rating defining how pure the water was, and alchemically transferable properties like being "stinky" water or "quality +2" water.)
The problem this system opens up is that, potentially, a single material might have an obscene amount of tokens attached to it giving it an absurd number of properties like being on fire and frozen and shooting out lightning bolts and shrinking everything around it all the time unless there is either some sort of property cancellation system that would prevent all but a select number of combinations from ever forming, or there was a hard limit on the number of properties that a given item could have.
In Rorona, when you tried to make an item where you passed more than 4 properties into the product, then the game would automatically prioritize which properties were kept. It favored keeping the "useless" ones, forcing you to try to cancel out the properties you don't like so that there would be room for the properties you do like (for example, you might have to cancel out "stinky" by adding a "floral scent").
Dwarf Fortress should probably have some sort of sanity check of its own, preventing more than a given amount of property tokens from existing on a material at once, and forcing more care to be given to property token choice. A similar priority system for the properties should probably be used, so that a given item will try to take on useless properties, and leave the more unique and useful properties behind. Alternately, it may be more dwarfy to just make a material overloaded with property tokens simply explode from the amount of alchemical energy contained within it.
Some of these tokens, however, are more necessary than others. A material property token that alters density and impact yield is more mundane and necessary than a material that simply causes an effect like glowing in the dark. The priority system, if it exists, would need to reflect this.
On the other front, what this alchemical property system would do is create an arbitrarily large number of possible combinations of material tokens that define the material properties of every item. Since, given our current system of having every item just reference a single instance of a set of material properties (as in, all items made of limestone simply reference limestone), what this would do is create a potential flood of new material property references for every combination of material properties.
A static table probably would not be advisable, and would have to be a dynamic definition of material properties that comes into and leaves existence as materials of that type are added or removed from the game's awareness area. This means a sort of garbage-collecting step might become necessary to remove unused sets of final material properties derived from property tokens periodically.
InterfaceI want to start this one off with a question way back when I was trying to get a feel for how to approach this problem:
Toady, where do you see the ability of players to affect AI behavior? Will we see something that goes more towards having the ability to directly script dwarven AI to use certain items or take certain actions using some logic operations or a rudimentary scripting ability? Or do you see this as being more a matter of dwarves having to somehow learn how and when to properly perform actions or use items from the properties they have in the raws alone? While I'm obviously interested in the effects this can have, I'm also interested in what sort of game design philosophy you have about what level of control you want players to be exerting over their dwarves.
At the extreme end of the potion/material discussion, out beyond what maybe anybody was asking for, I'm absolutely against having to master some sort of scripting language just to get dwarves to poison their weapons. At the same time, it'll be difficult to get dwarves to use certain exotic syndrome-causing materials in a reasonable way that satisfies a player, especially one using potion mods. Maybe it'll end up being usage hints in the raws and classifications in-play for use in the military etc. with some sensible defaults. Ideally they'd be able to handle it like food, water and alcohol (to the extent those aren't broken), and perhaps those would be brought into the same system. For more exotic actions and random weirdness, maybe there are cases in the mods where you'd really want to write some kind of script down, especially for a non-dwarven mod race that does something or other, but that level of support is pretty hard to prioritize when I don't really need or want it for dwarves.
On the other hand, writing from the perspective that every command the player gives will be credited to fortress position holders, if an appropriate official were to order that a liquid, with usage hints/whatever in the raws, will now be used for something entirely outside those bounds (like coating a weapon with syrup), that action might be anything from brilliant to quirky to wasteful to tyrannical to suicidal, depending on the situation. The dwarves aren't currently capable of judging their officials and it's a very difficult problem most of the time. If a randomly-generated creature has a weakness to syrup, maybe coating the weapons with syrup is simply a practical strategy, and in that case syrup wouldn't have the "weapon coating" usage hint in the raws. That coating action is entirely up to player ingenuity, much like ordering the creation of a complicated machine, and it's a reasonable thing to allow.
Manually ordering a dwarf to perform a specific series of actions that can't be presaged in the raws/code might be the only way to save your fort and might be a reasonably orderable action made by some official, but that kind of power can degrade the atmosphere we want to build. It's going to depend on the specific cases, but for the sake of guiding discussion on a wide range of future topics, I think it's best that the player feels that a dwarf's autonomy is being respected. The thing that makes dwarf mode not strictly a hands-off simulation is that you are allowed to compromise dwarves' autonomy if they hold fortress positions, to the extent that you are selecting actions that fall within their position's purview. If an order typically makes it feel like the dwarves are being controlled like marionettes, forced to do things against their will, etc., the order should probably be altered or removed. Presently, there are a ton of things that dwarves don't care about that they should care about, but this is the overall idea.
While it is possible to add usage hints into property tokens regarding things like, say "fire - hot", and as such, "don't pick up the always-on-fire items, stupid!", the major problem with creating a general "potion" type of item which can potentially have a positive effect (makes you stronger!...) and a negative effect at the same time (but also makes your eyeballs explode and poison you to death). Something like this is difficult to make easily raw-define in any given token the proper "usage hints" for using a given material. (The overlap here between interactions and material properties should be obvious.)
Beyond this, there is the more general problem of having to give dwarves the ability to understand how to treat a syndrome using an antidote to a specific poisonous bite if and only if they are suffering from a syndrome, and to tell dwarves to prefer to use the medicines that are easier to obtain than the ones that are rare or have dangerous side-effects. (I'm thinking of adamantine sutures, here.)
While an out-and-out scripting language in the game is obviously off-limits, we need to have a way to tell our dwarves that "you are forbidden from using this medicine except for in this one specific instance". Having to go through and forbid or unforbid the entire list of a specific type of potions would be too cumbersome, and unwieldy - you have no idea if re-allowing the item will allow the doctor to use this one particular type of medicine for one particular type of disease, or if it will let any dwarf in the fortress start taking a medicine with dangerous side-effects as if it were candy.
Because of this, and the fact that such incredible micromanaged control over material use (such as having to build airlocks to prevent specific material types from being used to construct specific items without letting it be used in unnecessary items, like how bauxite had to be safeguarded before 0.31.01) is already a problem, having an interface that allows for a more nuanced command on how to use a material should be built.
For example, a "use syrup on your weapons when you see the waffle trolls" standing order makes the most sense from a commander-issuing-orders-to-his/her-soldiers standpoint. You could then have orders that say, for example, each soldier must carry a bottle of syrup with them at all times, but that nobody else should eat our preciously low syrup supply.
Likewise, "use the rare and precious antidote only when you have this forgotten beast poison" would be a useful command, especially if that precious antidote might have uses for something else. (Like with how bauxite was precious for making magma-proof mechanisms, but could wind up being consumed in any other reaction that took general stone.)
At the very minimum, some sort of "restrict to military" or "restrict to doctors" or "restrict to doctors and military" should be enabled.
However, what we really need is the "(Use) your (fireproofing potions) on (your armor) when (you see a) (dragon)" type of interface, where parenthesis indicate a variable. A strictly verbal interface that isn't complicated for people to understand, but with some elements of control. Especially if you are giving this order to your soldiers in combat, this should be the sort of thing that a dwarven commander should be fully capable of directly ordering his/her soldiers to do.
There is also the interface problem that comes up when you are now making the material properties of every individual item you use in a reaction become much more important, and something you want to have much more control over. For example, you might not just want a floodgate, you want a floodgate made of a very specific material for the purpose of having one very specific effect.
Somewhat similar to how stone walls are built, any given reaction to create a new item will need to give players the option to choose the specific types of materials they are using.
Further, as a general user-friendliness feature, players are going to want to make a large number of items using specific reactions. For example, if you find some specific version of steel made from a specific combination of materials used to make the flux and charcoal, you will want to keep making more and more of that specific formula.
The ability to have a saved list of "use this specific set of materials in this reaction" so that players can "favorite" them and easily order the same thing without a scroll through the list of every single stone in your fortress again just to find the limestone that you have built the whole rest of your wall with every single time you add a new set of tiles to your wall.
As an additional help, having a graph showing the reactions that the player has discovered would be of great use. A sort of "alchemy journal".
Actually making a full graphic user interface might not be strictly necessary, but having a list of known types of reactions that have occurred that are somehow exportable to a third-party program (even as little as exporting a .txt with a list of known reactions), so that players don't have to chart out procedurally built alchemy webs purely with pen and paper would be of help.
Also, players will need to know what effects any given property token will have in-game for procedural tokens. This means some sort of description page for the tokens must be viewable, and, while exact numbers aren't necessary, there should be clear hints as to what properties are actually affected.
An interface feature that would allow you to rename your custom-built materials from the procedurally generated names would also make a good degree of sense. (So that if the name of your fireproofing potion is "the picks of fire the bottle of glory", you can rename it to something you can more easily remember.)
Reaction CatalystsThis restricts specific types of reactions to specific procedures in order to make sure that certain material types can still be made unavailable to different kinds of creatures or in different situations.
Basically, catalysts would have to exist as a replacement for the "Permitted Reaction" system for entities, as the whole point of this system is to allow a huge number of potential reactions to be capable of taking place, and specifically enumerating them all would be a huge problem. Instead, catalysts would be a way of ensuring that certain material property tokens would only be achievable through specific means.
This can work in two ways - it can stop a reaction from taking place altogether, such as making it impossible to create a specific type of item (like a stone door) unless under a specific set of circumstances or at a specific location (like a stonemason's workshop). It can also simply stop specific property token reactions (the combination of two particular tokens to create a new token) from happening except in certain types of reactions. (For example, the reaction to make steel from iron, carbon, and flux can only happen in a smelter, even if all the relevant material property tokens are together on a single material.)
For example, some material tokens can only react or be formed when going through a special magical ritual performed by a divine figure, creating a "blessed" or "cursed" item.
More specifically, however, this could be used to make a dwarven smelter different from a human-built smelter, so that dwarven smelters count as the catalyst that would allow a reaction to generate steel (or steel-like materials).
Catalysts can also be used as the means by which the currently existing workshops can put into the raws - wood-based reactions, for example, would require a carpentry shop as its catalyst.
Catalysts could finally be used to create sets of material property tokens that react differently in different circumstances. For example, an "always on fire", and "always the temperature of ice" property may cancel each other out normally, but under a specific condition (such as a specific ritual for divine intervention), you might be able to create a special type of material property token that does really spectacular or strange things.