Entry 197
"The party's weapon trails and element particles: ccSpcChar::ArmsEffect on ccLattice"
Filescrates/piney-world/src/arms.rscrates/piney-world/src/lattice.rscrates/piney-world/src/combat/mod.rscrates/piney-world/src/combat/cast.rscrates/piney-world/src/combat/stage.rscrates/piney-world/src/field_world.rscrates/piney-battle/src/skill.rscrates/piney-battle/src/kite.rscrates/piney-effect/src/lib.rscrates/piney-effect/examples/boss_probe.rscrates/piney-game/src/fx.rscrates/piney-game/src/session.rscrates/piney-game/src/session/tests/weapon.rstools/test_boss_effect_rs.pydocs/engine/battle.mddocs/engine/boss.mddocs/engine/field-game.md
0195 left one gap: the party's weapon trails. Kite's and the members' frames already emitted four outputs, and nothing consumed them:
ArmsEffectandClearArmsEffect;SetArmsEffectColor;StartArmsEffect(Kite's asArmsParticles).
So no one in the party left a ribbon behind a swing, and a fire art did not light the blades.
What the game does
battle.md, "The party's weapon trails", has the tables. In short:
EquipWeapon(0x0059d650) reads the weapon file'sDMY_xdummy_w01-w04besides its models.Decode_DummyPos(0x0014d4d0) gives each a place with w 1.0. It also makes the job's lattices: twoccLattice(2, 0)for the twin blades, one for most jobs, and a 3-column one for job 4.ArmsEffect(0x0059ddd0), every drawn frame, runsClearCntfirst. It puts the weapon pointsweaponEffPosat the hands' matrices times the dummies. It lays a row only while swinging (trajectorySW) or when the weapon has an aura (ccEquipmentParam+8). The aura is the colour, outside a swing or on the normal attack. ThenDisp.StartArmsEffect(0x0059e530) starts, for an art with an element,particleEffectTbl[40 + element]between two weapon points whilearmsEffectSWholds.
The lattice
piney_world::lattice held 2 columns only. It now holds up to 3, as
job 4 needs. ccLattice::Disp then sends two strips in one packet
(columns 0-1, then 1-2), each starting with ADC. The z sum counts a
middle vertex once (MakePacket's made flags), and the key is the sum over
twice the pairs. The lattice also has:
ClearCnt(0x00579c50) with its +0x72c flag;- the colour type as the i32
_SetArmsEffectColorwrites.MakePacketreads +4 each time, so a change shows at once.
test_boss_effect_rs.py's test_weapon_trails drives the game's own
ccLattice(2, 0) and (3, 0) in eemu as ArmsEffect does:
ClearCntevery frame;ClearArmsEffect's flag and colour types set at random between frames.
Against the probe: 0 mismatches over 600 frames each, in every row, life, flag, type, strip vertex and sort key. The cross's check still passes.
The port
piney_world::arms::Armsis the state: the dummies, the lattices, the points and the frame's strips. EachActorkeeps one asweapon. It is made at the actor's first call, from the file hung on its hands, and re-read bychange_equip.Combat::arms_shownruns the frame's calls in order, beforeccThEffect. It poses the hands as the actor stands.field_worlddraws the strips as it draws the cross's (trail_packet).piney_battle::skill::start_arms_effectisStartArmsEffect. Kite'sAnimCtrlnow calls it (test_battle_kite_rs.pyanim_ctrlandsmallstill pass). The combat runs it for a member'sfellow::Out::StartArmsEffect, which was dropped before.Effects::arms_particlesstarts the particles. The battle host answersweaponEffPosfrom the actor'sArms(char_vec+0x160) andarmsEffectSWfrom the character (char_int+0xe4).
Tests:
kites_blades_leave_trails: all four dummies on Kite's blades; the trails after 16 rows; the aura's colour; the clear. Every weapon's aura is -1 or 0-7.orcas_swings_leave_trails: Orca's heavy blade leaves a white trail on 30 frames against event 3's goblin, and Kite, standing, none.party_trail_shotsshows the ribbon following the blade.flame_dance_lights_his_blades: Kite's Flame Dance (art 9) turnsarmsEffectSWon and starts row 42's generators on both blades. Their particles follow the weapon points, and both trails turn red.flame_dance_shotsshows the fire on his blades.
The trails and the particles were not compared with the game's pictures. The shots of the Flame Dance also show a few orange specks far off. They come from none of the weapon generators, which were traced, so they are some other effect of the art; which one is not known. A member's StartArmsEffect was not seen in play. The hands' matrices are the port's pose, not the game's ccObj matrices.