Sycorax
Interesting glitch...
Using the Community Symbols Map, I think I can see exactly where it’s happening--but I don’t know enough about the hard-working blrl @ 80390dfc of “wP_RunObjectFrameFunctions” to know
why it’s happening.
The culprit appears to be “8006a360 ac_PlayerThinkAgain” -- which gets called (as part of a loop involving the blrl instruction at the above address) each frame for each player entity. It does a whole slew of things both known and unknown--including handling animation interrupts, updating hitstun/damage, and updating action state frames.
It updates action state frames with a call to “8006eba4 ac_AS_AnimationFrameUpdate&More” which is simply a collection of calls to the following 4 functions:
- 8006e9b4 $?_relatedTo_AS_Frames <-- Action State frame count updates here
- 80073240 $!_SAevent_Parse_Player <-- Subaction Event frame count updates here
- 800707b0 $?_relatedTo_AS_Frames_2 (unknown function)
- 800db500 $?_relatedTo_AS_Frames_3 (unknown function)
By following the action state transition (via breakpoint at 800693ac ActionStateChange) we can see the P2 transition into
frame 0 of DamageFlyTop as a part of the damage/hitstun update (@ 8008e25c)
This update is a part of the normal playerThinkAgain routine, so further along it hits the frame update and increments to
frame 1, like normal. The playerThinkAgain function finishes and returns to the objectFrameFunctions loop, where it should (to my knowledge) proceed to the next frame before running playerThinkAgain another time for this player.
Instead--for player 2/2--the loop seems to iterate with playerThinkAgain and call it 2 times in a row. This is what appears to be causing the frame to increment up to
frame 2.
---
Without knowing more about why this happens, I’m not sure how to safely go about changing this behavior. The only idea I have would possibly have unknown effects on frame updates by conditionally skipping the first call in that AnimationFrameUpdate function with an "update flag" somehow fashioned for each player.
Anyone familiar with any of these functions, or got any ideas/insights?