There’s a series of “playerThink” update functions that run every frame for every player. They each rely on a blrl link to a special function referenced via stored pointers in the player data. These pointers are variably assigned by action state changes, I think.
playerThink_Physics
has a blrl at 8006b8ac, which uses a pointer stored at
internal data offset 0x21A4 in order to link to one of many functions that handle things like velocity changes specific to a character action state.
I tested the roster and found that the physics action function pointer is common between characters while progressing through the actions necessary to do a DJC. There are only a few deviations, and they occur in the double jump action of DJC characters (as well as kirby/JP -- presumably for the multi-jumps.)
Note that these functions linked from the blrl are only used to append other instructions that might be common between states:
The blrl for
common double jumps simply updates for fastfalling.
The blrl for
Peach/Yoshi/Mewtwo double jumps have a common means of handling X velocity differently than other characters do. It also makes a call to another function that handles Y velocity based on whether or not the bunny hood is equipped.
Ness double jumps have a different means of calculating X velocity from the other DJC characters, but the Y velocity is common with Peach/Yoshi/Mewtwo.
The common "
call ? (something with Y velocity)" function between the DJC characters seems to rely on a calculation made earlier in the frame that’s had its result stored in
internal player data 0x6A8.
The internal player data offset 0x6A8 is interesting. If you place a breakpoint in the playerthink_physics function, and modify the value; it will directly translate into vertical velocity for certain actions. Again, I think it’s just used to finalize the player’s vertical velocity when using the bunny hood.
All doublejumps for DJC characters use it, but the address is also shared by up-b recoveries in Mario(s)/Luigi, Peach, Cfalcon, Kirby, GAW, and Marth/Roy. The values don't zero out once invalidated.