Brandon's Blog

8/6/2008

Sigma Combat Implementation Details

This article makes more sense if the one below is read first!

How Will Character Classes Be Managed?

Character classes will be (surprise!) modular, (surprise!) automatically detected and loaded from a subdirectory of the main source.  The system will expect to see a base.py character class module (name will be configurable), which will be used as the class of default for things like workaday denizens that don’t have special attributes (the goombas of Ravren, I suppose).

All class modules are required to implement functions returning results of the asymptotic “phi” function from the combat system specification.  The base phi function will be provided in libsigma, so no need to sling exponentials in designer code.  This is the major statistical control and generation step in class definition.  The two adjustable parameters for each class statistic are phi0 and L95, meaning the initial value of the statistic and the level at which the statistic hits 95%.

Classes must specify if members are dominant-handed or ambidextrous.  I’m sure there will be universal agreement around monks being ambidextrous.  I get shivers just thinking about the possibilities!

Handedness (i.e., right or left) is rolled 5050 at character creation.  I think I prefer ambidexterity as a class characteristic, rather than assuming a swordsman suddenly levels and gains the ability to swing his weak hand on an equal basis with the practiced hand.

Duple statistics — meaning (integer) \ (percentage variability range) — will be set up using a class-based initial value (rolled to determine initial statistics such as health and power) and an incremental value for level up evaluation.  Duple statistics will follow a linear-biased random walk due to this organization.

This keeps health from getting inflated to Final Fantasy proportions.

Finally, classes will hold dictionaries of lists, indexed to level number, containing all the weapon skills and abilities (separate dictionaries) to be attained at each level.  I anticipate libsigma having a convenience function for managing what otherwise would be a soup of curly braces and brackets to make that structure work syntactically.