Entry 83
The skills' other effects: skill starts, rings, the shock wave, heals, cures, stat changes and the resistant shield
Filescrates/piney-effect/src/skillstart.rscrates/piney-effect/src/shockwave.rscrates/piney-effect/src/heal.rscrates/piney-effect/src/ability.rscrates/piney-effect/src/shield.rscrates/piney-effect/src/effect.rscrates/piney-effect/src/element.rscrates/piney-effect/src/spell.rstools/test_effect_skill_rs.pydocs/engine/effects.md
79 ported the attack spells, the hits and the portals, but not what the game shows around every other skill. A second effects agent has added those to piney-effect.
What is ported
- A skill's start.
effSkillStart: both forms, 0x001d35f0 by skill id and 0x001d3650 byccSkillParam.effSkillStartEffect(0x001d39d0).- The start's controller, which at count 7 calls the summons circle for a spell or the circle for a physical skill.
- The exec and force rings (82-84), coloured by element.
- The circles (85, 86).
- The physical skills' shock wave.
effPhysicalSkillHitShockWave(0x001d2790): the element's smoke and debris, the waves 79-81, the camera shake and sound 35. - Heals and cures.
effHealandeffHealSkill;effCure,effSanityandeffResurrect, with their generator tables;effOpenBoxandeffRemoveTrap.
- Stat changes.
effAbilityUpandeffAbilityDownwithcheckEffAbilityColorand their seven textures;setConditionEffectuses them. - The resistant shield.
effResistantShield(gcmn 0x00501ab0, 0x00501cb0) and its element on the ported element manager.
The API only grows: new starters, a new element, and two host methods with defaults. effects.md lists which piney-battle outputs call which starter, and when in the frame.
Checked
-
Against the game.
tools/test_effect_skill_rs.pycompares, every frame:- each start's result;
- the slots, elements and draws;
- the events;
- both generators' states.
Each group first sweeps every relevant value once:
- all 304 skills;
- every element;
- heal levels -8 to 16;
- conditions 0-40;
- every shield case.
Then come random cases. The final run covered 36,605 frames with 0 mismatches.
-
Mutation check. Eighteen single-constant changes to the port were made deliberately; the harness caught all 18.
-
The shield's animations. They were added to the draw harness: 690 animation draws, 0 mismatches.
-
Re-run in a clean worktree. All seven effect suites pass, with the workspace's tests, clippy, fmt and the docs check.
-
Shots. The rings and circle at Kite's feet, the fire blow's burst, the cure's glow, the blue shield.
- Not in the runtime yet. The combat agent is wiring the new starters into piney-game's fx.rs. - Not ported: the breakable objects' crush and fragment effects, and the bosses' own deaths. - A null pointer. With no
affectPerson,effResistantShieldreads through a null pointer at 0x50. eemu has zero there; a real PS2 has kernel memory. -effHeal's return. The game always returns 0; the port returns its controller's slot, which the harness does not compare. - Not yet seen in a fight. The new particle generator rows have been seen only in the shots.