One row of a hero or monster "file" - a core.parseCSV result, typically - turned into a
fully wired entity: a StatBlock of base stats, an optional Progression against a named
growth curve, an optional starting item carrying a named starting affix, and a
ReactionTable already holding a low-HP rule if the row names one. The single call a game
makes once per row, in place of the per-field glue code every one of those systems would
otherwise need written out by hand.
A handful of column names are reserved (id, growth, level, startingAffix,
startingItem, lowHpReaction); every other column in the row becomes a base stat, so a
game's own stat names (attack, speed, armor, whatever it calls them) need no
declaring here. What each named growth curve, affix, and item actually is stays the
game's own EntityTemplateCatalog - mwg resolves the reference, never invents the
content behind it, the same boundary AffixDef.id already draws.
Deliberately narrow: one low-HP threshold per row, not an arbitrary list of reactions -
add a second column and a second ReactionRule in a game's own code the moment a second
one is actually needed, rather than a general reaction-list column format speculatively
built ahead of that need.
One row of a hero or monster "file" - a
core.parseCSVresult, typically - turned into a fully wired entity: aStatBlockof base stats, an optionalProgressionagainst a named growth curve, an optional starting item carrying a named starting affix, and aReactionTablealready holding a low-HP rule if the row names one. The single call a game makes once per row, in place of the per-field glue code every one of those systems would otherwise need written out by hand.A handful of column names are reserved (
id,growth,level,startingAffix,startingItem,lowHpReaction); every other column in the row becomes a base stat, so a game's own stat names (attack,speed,armor, whatever it calls them) need no declaring here. What each named growth curve, affix, and item actually is stays the game's ownEntityTemplateCatalog-mwgresolves the reference, never invents the content behind it, the same boundaryAffixDef.idalready draws.Deliberately narrow: one low-HP threshold per row, not an arbitrary list of reactions - add a second column and a second
ReactionRulein a game's own code the moment a second one is actually needed, rather than a general reaction-list column format speculatively built ahead of that need.Example