forked from phenom/healer-man
58 lines
9.1 KiB
Markdown
58 lines
9.1 KiB
Markdown
# RoM Champion Remaining Mechanics Audit
|
|
|
|
**Audited:** 2026-10-02
|
|
|
|
**Source:** the local RuneWaker `Resource` snapshot used by the generated player catalog.
|
|
|
|
This audit separates source-backed facts from fields still missing for runtime work. The local `learnmagic.db`, `magiccollectobject.db`, `magicobject.db`, and `string_enus.db` hashes match the corresponding source hashes recorded in `src/game/romPlayerCatalog.generated.json`. A missing generated-catalog entry therefore does not establish that a skill is absent from the source.
|
|
|
|
> **Later source/runtime update:** The [Champion source follow-up](ROM_CHAMPION_SOURCE_FOLLOWUP_2026-10-02.md) closes the RuneWaker conditions previously listed as absent for rank-2 Forge/Chain Drive and Dark Energy Strike, and records Rune Pulse's one-second cast-start damage window. Those mechanics are implemented. Rank-1 Forge companion auto-attacks now have owner/expiry-qualified event eligibility; a fully absorbed hit does not proc, and a landed hit grants its own stack and Rage. Focused Forge, Champion, and party-runtime tests passed 74 tests across three files. The Curse transform, full Shield Form payload, and Rune Overload target execution remain open; the older sections below retain their first-pass evidence.
|
|
|
|
## Shield Form (498562): learnability verified; execution remains open
|
|
|
|
**Outcome: source learnability is verified.** The local `learnmagic.db` contains Champion primary skill 498562 at level 16 with key item/flag 546211 and no listed prerequisite. The catalog exporter at `scripts/runewaker-pipeline/export-player-catalog.mjs` filters ordinary skill rows to `keyItemId === 0`; the separate elite-pair mapping does not include this flag-gated acquisition. That explains the generated omission. It is not evidence that Shield Form lacks a player-learnable source row.
|
|
|
|
The acquisition script `F:/Projects/Runewaker/Resource/luascript/02584.lua` offers flag 546211 through NPC organization 120245 when the player's race is Dwarf (`DrawfRace == 2`), vocation is Champion (`job == 10`), quest 425071 is complete, and the flag is not already set; selecting the option sets the flag. `02641.lua` blocks Champion skill training when flag 546211 is absent. The current character catalog in `src/app/characterCatalog.ts` also permits Champion only for Dwarves. The source condition is therefore consistent with current race/class eligibility, but additionally contains quest and learned-flag state that the simulator does not model.
|
|
|
|
The acquisition system in this simulator is level-derived and has no quest/skill-flag state. If the project later represents the skill as level-unlocked, it must explicitly treat the quest and flag grant as abstracted acquisition; it must still require the existing Dwarf/Champion eligibility and level 16. Do not make it available to other races/classes or claim the exact quest grant is simulated.
|
|
|
|
**Runtime remains unimplemented.** The local tooltip describes a toggle that increases accuracy and converts Strength to Stamina. `02550.lua` confirms the toggle-on/off path through buff 621218 and updates related conversion buffs. It computes a conversion amount as `floor(base equipment Strength * (0.1 + skill rank * 0.014))`, reads additional rank values at `MagicPowerLv_SP+5` and `+11`, and adds/cancels several persistent buffs. The source links children 498517, 498540, 498714, 498753, and 850048 through buffs 621218, 621288, and 621426, but the child payloads do not fully describe their effects. The simulator also has no separate per-skill rank or acquisition state corresponding to these `MagicPowerLv_SP` values.
|
|
|
|
Before implementing the toggle, source work must resolve the hidden child payloads and the intended relationship between Champion skill rank and the three `MagicPowerLv_SP` lookups. If implementing within the current level-only acquisition abstraction, document that quest state is abstracted. The old backlog statement that no player-learnable source skill exists should be corrected to say that source learnability is verified while runtime semantics remain open.
|
|
|
|
## Forge rank 2 (498604): proc payload is partial
|
|
|
|
**Outcome: do not implement the secondary proc yet.** The learn row identifies Champion primary skill 498604 at level 22, with prerequisite 498535. Its source components install a five-minute normal-attack trigger through buff 621251, which invokes 498590 at `onAttackTrigger rate=100`. The local description says normal-attack hits can trigger the eight-second Forge effect 621252. That effect's chance is not present in the child payload; the parent's `rate=100` describes the 498590 trigger and cannot establish a 100% chance for 621252.
|
|
|
|
Component 621253 supplies modifier values 20 (modifier types 204 and 205), and the description associates the effect with increased Rune Pulse (498529) damage and making the next Curse instant. The source does not establish the 621252 proc probability, the precise Rune Pulse modifier interpretation, or which Curse spell/event receives the instant-cast change.
|
|
|
|
**Needed to close:** a source field or handler that specifies 621252's roll chance and qualifying attack event; authoritative interpretation of 621253's modifier types; and the exact Curse spell and instant-cast application/consumption behavior.
|
|
|
|
## Chain Drive (498535): source row exists, but its payload is empty
|
|
|
|
**Outcome: source confirms the skill and qualitative behavior only.** The local Champion primary learn row exists at level 22 with key item 0 and no listed prerequisites. Its `MagicCollect` row has no components. The description says that while Forge Effect is active, normal-attack hits have a chance to reset Rune Pulse (498529)'s cooldown and increase its damage; it also says the next Curse becomes instant.
|
|
|
|
The source does not give the reset chance, precise qualifying hit/event boundary, Rune Pulse damage amount/duration/scope, or the Curse spell and instant-cast payload. Do not reuse Forge rank-2 component 621253 as the Chain Drive payload without a source link establishing that relationship.
|
|
|
|
**Needed to close:** the missing source components, an authoritative server/script handler, or a corrected source definition that supplies the probability, trigger boundary, Rune Pulse damage parameters, and Curse mapping/consumption behavior.
|
|
|
|
## Dark Energy Strike (498599): direct hit is described; Rune Siphon proc chance is absent
|
|
|
|
**Outcome: keep the unsupported cooldown proc suppressed.** The local learn row is a Champion/Warlock elite skill at level 30, keyed by 545955 and requiring 497958. Its direct hostile strike has a 20 Rage cost and source damage components 621305 and 621306. Component 621307 is a MagicFunc 7 action associated with resetting Rune Siphon, but neither it nor the related source fields specify a proc probability or a qualifying event. The tooltip only says there is a chance to reset Rune Siphon.
|
|
|
|
**Needed to close:** the chance value and whether the roll occurs on cast, landed hit, or another event, plus any target/success conditions for the reset. Do not infer a guaranteed reset from the presence of action 621307.
|
|
|
|
## Rune Overload (498572): child timing and drain are known; target selection is not
|
|
|
|
**Outcome: retain the verified RuneWaker identity and do not schedule the autonomous child yet.** In the local source, 498572 is Rune Overload and 498571 is Remodeled Body. This audit does not revisit the completed identity/catalog correction and does not import the conflicting current CoA reused-ID mapping.
|
|
|
|
Component 621241 links hidden child 498574 as an `onTimeMagicId` with a one-second interval (`dotTime=1`) and a 15-Rage-per-second drain (`dotBase=-15`). Component 621243 supplies the source damage field `damagePower=-0.6`, and the tooltip describes main-hand physical DPS damage to multiple targets in the immediate vicinity. The catalog now resolves the hidden child's 0.6 physical-damage coefficient from that component. The runtime has no autonomous timer consumer for this on-time child.
|
|
|
|
Neither the parent nor the hidden child's available target/effect fields specify a numeric radius, target-count cap, target-selection center/geometry, facing or line-of-sight rules, or whether each child tick applies once per eligible target. The source description “immediate vicinity” is insufficient to choose these values. Since the target set for each autonomous tick is unknown, the one-second proc path cannot be safely completed by supplying timing alone.
|
|
|
|
**Needed to close:** RuneWaker-version source that defines the radius and cap (including whether uncapped), target center and geometry, relevant eligibility/line-of-sight rules, and per-tick hit behavior. Do not fill these from the later CoA skill rework or a heuristic.
|
|
|
|
## Scope and implementation decision
|
|
|
|
No runtime change is made by this audit. Shield Form's source learnability question is resolved, but its toggle and child effects remain incomplete. Forge rank 2, Chain Drive, and Dark Energy Strike each lack distinct proc semantics. Rune Overload has a verified one-second child link but still lacks the target-selection semantics required for player and companion execution. None of these remaining runtime gaps meets the source-completeness bar for a safe implementation from the currently available RuneWaker fields.
|