Files
healer-man/docs/ROM_STATS_AND_GEARING.md
T

8.2 KiB
Raw Blame History

RoM stat weights and gearing audit

Status: source model identified; runtime conversion and equipment import pending. This audit covers the Priest/Knight healer, Knight/Scout tank, Scout/Rogue DPS, Rogue/Warrior DPS, and Mage/Warlock DPS. It does not assign balance weights to unimplemented RoM gear.

Current runtime

  • src/game/romStats.ts reads primary-class level growth from romPlayerCatalog.generated.json and gives the secondary class 10% of its base stats at the same level as the primary. This shared level is the game's progression rule, even though the historical source allowed separate class levels. The runtime also omits source race and sex additions.
  • src/game/wotlkStats.ts maps RoM Wisdom into WoW Spirit, then derives HP, Mana, attack power, spell power, avoidance, and ratings with WoW rules. This is a compatibility adapter, not RoM stat conversion. In particular, the global Mana multiplier, Stamina-to-HP rule, and 0.35 * Intellect + 0.15 * Spirit spell-power rule are not source RoM formulas.
  • src/game/specializationCatalog.ts selects one of the WoW gear archetype weight tables for RoM. src/game/heirloomEquipment.ts uses WoW budgets and compares against WoW boss gear to create RoM heirlooms. The Scout currently receives a two-hand mace alongside a bow, although source Scout equipment allows one-hand swords, daggers, bows, and crossbows. src/game/equipment.ts also lacks the source Priest shield permission.
  • src/game/runewakerLootCatalog.ts keeps imported RoM drops as non-equippable misc items with zero stats. The loot importer preserves names and probabilities but does not decode native equipment slots, base stats, or enhancements. src/game/lootPolicy.ts suppresses all boss item drops during leveling; boss cards are awarded through a separate path. At level 80, imported RoM boss items still lack usable equipment data.

Source stat model

The historical RuneWaker source is under ../rom-pvt-server-backups/Runewaker/. SourceCodeVS2019/Libraries/Union/RoleData/RoleAttr.cpp builds each conversion argument from race + vocation + sex. Resource/data/voctable.db, racetable.db, and sextable.db hold those terms; ObjectStruct.h defines the argument layout. The player vocation record is the second record of each class pair, as already used by scripts/runewaker-pipeline/vocation-growth.mjs.

After base growth and equipment attribute bonuses, source RoleAttr.cpp computes:

Native result Source dependency before rate modifiers
Max HP base HP + Strength × HpStrArg + Stamina × HpStaArg + flat equipment HP
Max MP base MP + Intelligence × MPIntArg + Wisdom × MpMndArg + flat equipment MP
Physical ATK Strength × AtkStrArg + Intelligence × AtkIntArg + Agility × AtkAgiArg + flat equipment ATK
DEF / MDEF Stamina × DefArg + armor/flat DEF; Wisdom × MDefArg + flat MDEF
Magical ATK Intelligence × MAtkArg + flat equipment MATK
HP / MP regeneration base rate + Stamina × ReHpArg; base rate + Wisdom × ReMpArg
Physical hit / dodge Agility plus corresponding equipment values and fixed arguments
Magical hit / dodge Wisdom, with Agility also contributing to magical dodge

The table below shows vocation terms only from the player records of voctable.db. Race and sex terms are additive, so these are not final character coefficients and must not be pasted into a gear-score formula as complete weights.

Primary role Relevant source vocation terms Gear consequence to validate
Knight tank Stamina → HP 5, DEF 1.5; Wisdom → MP 5, MDEF 3.2 Value shield/armor DEF, Stamina, MDEF, and survival against actual encounter damage. A WoW defense-rating budget is not a substitute.
Priest healer Intelligence → MATK 2, MP 1; Wisdom → MP 5, MDEF 3, MP regeneration 0.3 Keep healing effect power, Mana sustain, and Wisdom distinct from WoW Spirit and generic spell power.
Scout DPS Strength → physical ATK 2; Agility contributes to hit/dodge through fixed arguments Bow damage and physical ATK need source conversion before a Strength/Agility score can be trusted.
Rogue DPS Strength → physical ATK 1; Agility → physical ATK 1 and hit/dodge Evaluate both attributes and equipped dagger damage, including the off hand.
Mage DPS Intelligence → MATK 2; Wisdom → MP 5 and MDEF 2.3 MATK, magical weapon damage, and sustain need separate scoring.

Priest healing cannot be scored by MATK alone: the source healing path also uses magic-power rate and heal-point inputs. Critical chance, weapon damage, resistance, and encounter mix further change the value of a stat. These conversion coefficients are mechanics, not final DPS/HPS weights.

Equipment model to implement

RoM equipment has base item properties plus additional attribute sources. Gameforge's class guide lists native class weapon/armor permissions. Its rune guide describes socketed runes and up to four rune slots; its Arcane Transmutor guide describes transferring attributes through Fusion and Mana Stones. These changes must be represented as item-instance bonuses rather than a WoW item-level budget. Source RoleAttr.cpp already distinguishes flat equipment contributions, attribute contributions, and multiplicative rates.

  1. Decode armorobject.db and weaponobject.db into native slot, armor/weapon type, base defense/damage, attribute, and level fields. Preserve source object IDs and validate the binary layout against source structures and known items before allowing package equipment to equip.
  2. Add a RoM item-instance bonus layer for native flat stats, transferred attributes, rune sockets, and later enhancement/tier data. Sum those bonuses into a native stat block. Keep WoW ItemStats and heirloom scoring unchanged for WoW characters.
  3. Extend the generated class data with race and sex arguments and the vocation conversion coefficients. Keep secondary growth tied to the primary's level, including after the level-10 secondary unlock. Convert the complete RoM stat block to combat inputs through a RoM-specific adapter, including ATK, MATK, DEF, MDEF, and separate healing inputs.
  4. Use legal starter equipment as a temporary bridge, then source-backed quest or item-shop equipment packages for leveling. The client snapshot confirms four armor-choice quest reward families at levels 50, 55, 60, and 65, a three-choice quest at level 5, and a battlefield reward at level 30; see docs/ROM_LEVELING_GEAR_PACKAGES.md. Resolve the package expansion data and missing general-route tiers before granting source items. Dungeon bosses award cards during leveling, not equipment or miscellaneous items. Do not tune a RoM heirloom to a WoW drop score or apply WoW rating conversions to it.
  5. Derive role-specific upgrade scores from the marginal combat effect of each native stat at the current level and gear state. Measure Knight survival/threat, Priest effective HPS and sustain, and each DPS build's damage on the same targeted encounter set. Source coefficients seed that model; targeted combat measurements establish practical weights and catch caps or nonlinear effects.

Online and validation boundary

server/database.mjs rejects a RoM/WoW source mixture when a grouped player selects a character and checks again when an activity starts. Until RoM AI companions are separately ready, online RoM groups launch players-only; the WoW-only randomized Bite-Sized Stockades activity is unavailable to them. This does not change local manual RoM party diagnostics. The five RoM profiles remain Needs Testing and elite skills remain deferred.

Validate each import with source-record fixture tests, legal slot/equip tests for all five builds, direct native-stat conversion cases, then npm run test:rom-five and targeted level/encounter diagnostics. Compare package upgrades by native stat deltas and combat outcomes before changing dungeon tuning. Keep a common encounter definition with source-specific stat translation and measured balance coefficients; no duplicate WoW/RoM dungeon catalogs are required by this audit.