-snip-
How would you include an animal in a reaction though? I know the farmer's workshop does it but I think that's hardcoded, I'm not seeing anything in the wiki.
-snip-
You can't put a specific animal in the reaction. However, there is an alternative method. You make the syndrome only effect a specific pokemon. Then you make sure that pokemon is present at the workshop when doing the reaction (either by use of burrows, military commands, or through the use of the manager workshop screen). Then when you do the reaction, pokemon who are affected by the syndrome evolve and those who aren't affected don't do anything.
Oh, like this? I'm not sure if this is right but I think this is what you mean.
inorganic_pokemon_stones
[INORGANIC:MOON_STONE]
[USE_MATERIAL_TEMPLATE:STONE_TEMPLATE]
[TILE:172][IS_GEM:moon stone:moon stones:OVERWRITE_SOLID][DISPLAY_COLOR:0:0:1][MATERIAL_VALUE:40]
[ENVIRONMENT_SPEC:BAUXITE:CLUSTER_ONE:1]
[SOLID_DENSITY:4005]
[STATE_COLOR:ALL_SOLID:DARK_CHESTNUT]
[INORGANIC:MOON_EVOLVE_MAT]
[USE_MATERIAL_TEMPLATE:METAL_TEMPLATE]
[STATE_NAME_ADJ:ALL_SOLID:moon evolve energy]
[STATE_NAME_ADJ:LIQUID:moon evolve energy]
[STATE_NAME_ADJ:GAS:moon evolve energy]
[DISPLAY_COLOR:0:0:1]
[BUILD_COLOR:0:0:1]
[MATERIAL_VALUE:1]
[SPEC_HEAT:500]
[MELTING_POINT:9950]
[BOILING_POINT:9855]
[WAFERS]
[SOLID_DENSITY:1000]
[LIQUID_DENSITY:2600]
[MOLAR_MASS:55845]
[IMPACT_YIELD:5000000]
[IMPACT_FRACTURE:5000000]
[IMPACT_STRAIN_AT_YIELD:0]
[COMPRESSIVE_YIELD:5000000]
[COMPRESSIVE_FRACTURE:5000000]
[COMPRESSIVE_STRAIN_AT_YIELD:0]
[TENSILE_YIELD:5000000]
[TENSILE_FRACTURE:5000000]
[TENSILE_STRAIN_AT_YIELD:0]
[TORSION_YIELD:5000000]
[TORSION_FRACTURE:5000000]
[TORSION_STRAIN_AT_YIELD:0]
[SHEAR_YIELD:5000000]
[SHEAR_FRACTURE:5000000]
[SHEAR_STRAIN_AT_YIELD:0]
[BENDING_YIELD:5000000]
[BENDING_FRACTURE:5000000]
[BENDING_STRAIN_AT_YIELD:0]
[MAX_EDGE:100000]
[SYN_NAME:EVOLVE_NIDORINA]
[SYN_INHALED]
[SYN_AFFECTED_CREATURE:NIDORAN_FAMILY:NIDORINA_FEMALE]
[CE_BODY_TRANSFORMATION:START:1000]
[CE:CREATURE:NIDORAN_FAMILY:NIDOQUEEN_FEMALE]
[BUILDING_WORKSHOP:EVOLUTION_STATION]
[NAME:Evolution Station]
[NAME_COLOR:7:0:1]
[DIM:1:1]
[WORK_LOCATION:1:1]
[BUILD_LABOR:MECHANIC]
[BUILD_KEY:CUSTOM_P]
[BLOCK:1:0]
[TILE:0:1:207]
[COLOR:0:1:0:7:0]
[TILE:1:1:207]
[COLOR:1:1:MAT]
[BUILD_ITEM:2:NONE:NONE:NONE:NONE][BUILDMAT][WORTHLESS_STONE_ONLY][CAN_USE_ARTIFACT]
reaction_evolution_stones
[REACTION:USE_MOON_STONE]
[NAME:use moon stone]
[BUILDING:EVOLUTION_STATION:CUSTOM_M]
[REAGENT:A:1:GEM:NONE:MOON_STONE:NONE]
[PRODUCT:100:1:BAR:NONE:MOON_EVOLVE_MAT:NONE][PRODUCT_DIMENSION:150]
[SKILL:ANIMALTRAIN]
and of course:
[PERMITTED_REACTION:USE_MOON_STONE]
I was never stellar at workshops, but I don't see anything wrong with it. It seemed like everything is there. Have you tried it in game to see if it works?
I feel that many people might not be able to notice fine differences between carefully plotted out physical strength, endurance, toughness etc. scales. In the interest of efficiency, it might be better to use one or two scales for any pokemon that don't have scales, one for powerful pokemon and one for weak pokemon. You would give powerful pokemon the high scales and weak pokemon the low scales; even a pokemon normally thought of as having high special would be given high scales for physical traits to simulate power. There is precedent for this: many spinoff games ignore how stats are distributed in the main games. This would allow more rapid testing/development for now and allow faster creation of new pokemon without relying on a python script being developed.
Alternatively, if we are going for a python script, the goal might be to take as much information about a given pokemon as possible and output a creature: maybe things like size, gender, etc. could be inputs to a hypothetical script. A python script would only require a properly formatted input source like a csv of pokemon names and traits, and it would ideally be able to output basic pokemon creature entries that could be customized later (with name, castes, and a basic body).
For gaits, I would recommend using perhaps three sets of gaits: one for fast pokemon, one for normal pokemon, and one for fliers (essentially legendary climber because flight is broken on anything in a civ). This would be easy to implement without relying on a script to convert speed/typing/ability into gait.
I think I prefer the difference between pokemon approach. Doing sets may save time, but also it would make the pokemon interchangable and there wouldn't be a point to getting variety. The thing about pokemon is that they are all different, and I think making them into sets runs counter to that idea. While spin-offs may ignore stats, DF has the potential to really simulate their stats and make each pokemon have unique strengths and weaknesses. I think, more than anything, it will add a feeling to the game that each pokemon is worth having.
The same can be said for gaits. Using sets is a way to crank out fast cookie-cutter raws, but that makes for a cookie cutter game. Furthermore, some pokemon have unique walks and others slither or crawl. Using a set for fast, normal, and fliers would lead to some very incorrect gaits.