GAE/Enhancements

From MegaGlest
Revision as of 14:02, 27 June 2011 by Silnarm (talk) (moved GAE/XML/Enhancement XML to GAE/Enhancement XML: proper path)
Jump to: navigation, search

EnhancementType

static-modifiers

static modifiers
max-hp Add or subtract from the unit type's max-hp.
hp-regeneration Add or subtract from the unit type's hp-regeneration.
max-ep Add or subtract from the unit type's max-ep.
ep-regeneration Add or subtract from the unit type's ep-regeneration.
sight Add or subtract from the unit type's sight.
armor Add or subtract from the unit type's armor.
attack-strength Modify the strength of all attack skills by this amount.
effect-strength Modify the strength of all effects on this unit by this amount.
attack-percent-stolen Modify the attack-percent-stolen of all attack skills by this much.
attack-range Add or subtract from all attack skill ranges.
move-speed Add or subtract from move skill speed.
attack-speed Add or subtract from attack skill speed.
production-speed Add or subtract from produce & upgrade skill speed.
repair-speed Add or subtract from repair and build skill speed.
harvest-speed Add or subtract from harvest skill speed.

multipliers

multipliers
max-hp Multiply the unit type's max-hp by this factor.
hp-regeneration Multiply the unit type's hp-regeneration by this factor.
max-ep Multiply the unit type's max-ep by this factor.
ep-regeneration Multiply the unit type's ep-regeneration by this factor.
sight Multiply the unit type's sight by this factor.
armor Multiply the unit type's armor by this factor.
attack-strength Multiply strength of all attack skills by this factor.
effect-strength Multiply the strength of all effects on this unit by this factor.
attack-percent-stolen Multiply the attack-percent-stolen of all attack skills by this factor.
attack-range Multiply all attack skill ranges by this factor.
move-speed Multiply move skill speed by this factor.
attack-speed Multiply attack skill speed by this factor.
production-speed Multiply produce & upgrade skill speed by this factor.
repair-speed Multiply repair and build skill speed by this factor.
harvest-speed Multiply harvest skill speed by this factor.

point-boosts

Point boosts
hp-boost Applies a one time hp boost.
ep-boost Applies a one time ep boost.


EnhancementType Evaluation (or, 'How they work')

These tags represent very core data structures that drive many aspects of GAE's design. They are used for levels, upgrades, effects and emanations. On the implementation level, static modifiers are implemented in the C++ UnitStats class and multipliers are implemented in the EnhancementType class (a subclass of UnitStats). Because multiples of these may be applied to a unit, it's important to understand how they are evaluated. Put briefly, multipliers are not applied (i.e., multiplied) against any other bonus, static modifier or multiplier, only against the base stat.

For the long explanation, the static modifiers and multipliers for every unit's level-ups, upgrades, effects and emanations are evaluated in the C++ member function Unit::recalculateStats(). All multipliers for a given stat are [b]added[/b] together, rather than multiplied, and then the count minus one is subtracted.

totalMultiplier = multiplier1 + multiplier2 - (multiplier_count - 1);

Example. A unit with max-hp 1000 is affected by two enhancements, the first has a max-hp multiplier of 1.5 and the second has a max-hp multiplier of 1.5, with these enhancements the unit's current max-hp is,

totalMultiplier = 1.5 + 1.3 - (2 - 1) = 1.8
max-hp = 1000 * 1.8 = 1800

If multipliers were multiplied by each other, the total multiplier would be 1.95 (1.3 x 1.5) and successive multiplier bonuses or penalties would have an exponential effect, the 'multiplier adding' strategy outlined above avoids this problem.

Don't use negative values for multipliers, to apply a penalty set the multiplier to a number less than one, but still positive. eg. <sight value="0.5" /> halves a units sight.

The final multiplier is applied to the base stat only, and then static modifiers are added to that result.

newStatValue = oldStatValue * totalMultiplier + totalStaticModifier

Example. If you have a unit with 500 max-hp (base stat), and it gets a static-modifier bonus of +50 and a multiplier bonus of * 1.5, its hp-max is,

max-hp = 500 * 1.5 + 50 = 800

If static modifier were added to the base stat for the multipler was applied this would have been "(500 + 50) * 1.5 = 825". This behavior is important to keep in mind when designing mods where very low stats have multipliers applied against them, because the effect will be nominal, despite any static modifier bonuses.

Example. A unit with an attack skill of strength 125 has two levels, each providing a 1.2 multiplier to attack-strength, one upgrade affecting the unit provides a static-modifier of +25 to attack-strength. Using this attack skill the strength of an attack will be,

totalMultiplier = 1.2 + 1.2 - (2 - 1) = 1.4
totalStaticModifier = +25
attack-strength = 125 * 1.4 + 25 = 200

Now, suppose this unit gets struck by a special attack that leaves a detretimental Effect on the unit which causes a 0.4 multiplier to attack-strength. The units current attack-strength with this skill is now,

totalMultiplier = 1.2 + 1.2 + 0.4 - (3 - 1) = 0.8
totalStaticModifier = +25
attack-strength = 125 * 0.8 + 25 = 125

Note: The above example assumes the Effect was applied with 1.0 strength, this strength factor may have been modified by distance from the centre of a splash attack (with the 'scale-splash-strength' flag set) or may be modified by the time since it was created (with the 'i-dont-exist-yet' flag). See EffectType for more information on Effects.