In battles, the state of heroes, enemies, attack graphics and the weapon are 
stored in the bslot() array, which is an array of BattleSprites. bslot 0-3 are 
heroes, 4-11 enemies, 12-23 attack sprites (just 12 is used for most attacks), 
and bslot(24) is the weapon. (BattleSprite has a huge amount of state including 
a lot of data copied from EnemyDef, but only the graphical stuff is relevant to 
attacks and weapons).

`anim_hero` animates and positions the hero and the weapon during an attack. 
Specifically, the second weapon frame:
```
   hand = gam.hero(who).hand_pos(1)
   wep = bslot(24).hand(1)
   wepoff = hand - wep

   anim_align2 24, who, 0, 0, wepoff.x, 16  # Sets weapon X and Y relative to 
the attacker, 'who'
   anim_setz 24, 16 - wepoff.y
   anim_setframe 24, 1
```
(`anim_*` functions queue up animation commands at the beginning of an attack, 
and then they are executed by `battle_attack_anim_playback`.)
Note it doesn't depend on the attack animation, suggesting the weapon position 
is getting overwritten afterwards.

The attack animations are implemented in `generate_atkscript`, which call 
`anim_hero`. Looking at the implementation of Sequential Projectile for places 
it affects BattleSprite 24, there is one such obvious line. However I also 
noticed the line
``   anim_setz 12 + i, projectile_start.z``
where `i` is used uninitialised! It turns out the previous use was in a `FOR i 
= 0 to 11` loop, so `12 + i = 24` and that's the cause of the bug.






-- 
Reply to this email directly or view it on GitHub:
https://github.com/ohrrpgce/ohrrpgce/issues/1210#issuecomment-1131640913
You are receiving this because you are subscribed to this thread.

Message ID: <ohrrpgce/ohrrpgce/issues/1210/1131640...@github.com>
_______________________________________________
Ohrrpgce mailing list
ohrrpgce@lists.motherhamster.org
http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org

Reply via email to