#Sonic 3 and knuckles apk ios code#
What baffles me is, why include that code path at all? If you just remove the Super_Sonic_Knux_flag check, then the invincibility check in Sonic_FireShield will also catch Super Sonic and bail without setting the double_jump_flag. Move.b #0,double_jump_flag(a0) move.b #0,double_jump_flag(a0) Tst.b double_jump_flag(a0) tst.b double_jump_flag(a0)ītst #Status_BublShield,$2B(a0) btst #Status_BublShield,$2B(a0)īsr.s BubbleShield_Bounce bsr.s BubbleShield_Bounce S&K adds a check for Super_Sonic_Knux_flag to this code, as well as a clumsy character ID check since characters other than Sonic sometimes run through this code too I guess: If Sonic happens to have a bubble shield, that will cause the Player_TouchFloor routine to trigger a bubble bounce, despite the initial downward plunge bit never actually taking place. Note how in the above bit of code, Sonic's double_jump_flag is still set upon a successful double jump, even when the Super_Sonic_Knux_flag is on. Now, what probably wasn't intentional is how Super Sonic can trigger the bubble shield's bounce effect upon touching the ground in S3A! ītst #Status_Invincible,$2B(a0) btst #Status_Invincible,$2B(a0)ītst #Status_FireShield,$2B(a0) btst #Status_FireShield,$2B(a0)īeq.s Sonic_LightningShield beq.s Sonic_LightningShield Move.b #1,double_jump_flag(a0) move.b #1,double_jump_flag(a0) Tst.b (Super_Sonic_Knux_flag).w tst.b (Super_Sonic_Knux_flag).wīeq.s Sonic_FireShield beq.s Sonic_FireShield That much is intentional:īclr #Status_RollJump,status(a0) bclr #Status_RollJump,status(a0) Anyway, it was probably too much trouble to mediate VRAM usage between the insta-shield and the sparks, so Super Sonic specifically has no jump moves. That would probably work, if not for another VRAM conflict: similar to the insta-shield, the large sparks that trail behind Super characters at high speeds load their art to the same VRAM slot as shields and invincibility stars.Īctually, this is probably why they fixed that Sonic 2 bug where invincibility and Super would stack! It wasn't a problem in Sonic 2 because shields and invincibility used separate VRAM slots, since players could potentially have both at the same time in a 2P game. After all, it's what Hyper Sonic's jump dash does. Of course, you could reasonably argue that since Sonic's shield is hidden, the insta-shield should just override all other shield moves for the duration of the Super form. As such, all shield moves are disabled while Sonic's shield is hidden, and this includes Super Sonic. Since shields and invincibility share a single VRAM slot, they can't be displayed at the same time (thank goodness), and it would be pretty bad design to let players use shield moves without knowing ahead of time which move Sonic would actually perform. This is probably why Sonic can't use any shield moves while invincible. This is because unlike other characters' special moves, the insta-shield must animate independently from Sonic, and it loads its art to the same VRAM slot reserved for shields and invincibility stars. I'm not sure if that's a bug but it feels odd since the rest still can use their special moves as super but sonic can'tįirst off, the insta-shield is implemented as regular power-up - it is actually a separate object which spawns into the player 1 shield shot when playing as Sonic, and Sonic is also awarded one whenever he loses any other shield. Why SS can't use the insta shield? Or why you can't use the insta shield with normal invicibility. There's something that always bothered me in sonic 3 with super sonic