redhotsonic, on 20 September 2012 - 03:46 PM, said:
There seems to be a bug with following this guide with the SVN disassembly. If you're a XenoWhirl's user, you're safe and can ignore this post and go on with your day. SVN user? Read on.
Seems that if you follow this guide as an SVN user, there may be a glitch with the Special Stages. Sonic and Tails act like they're being hit by the bombs object over and over, making it impossible to get any emeralds in the special stages. The reason? inertia is being used for something else in the special stages. This doesn't seem to be the case in Xenowhirl's dis.
So, in your SST table, you're better off switching inertia with something else. invulnerable_time seems to be the best to swap it with. So change them so you end up with this:
invulnerable_time = $20 ; and $21 ; time remaining until you stop blinking
inertia = $30 ; and $31 ; directionless representation of speed... not updated in the air
Any more problems, with either disassembly, give me a shout.
My SST guide has been updated as well to provide this bit of information
Sorry to bump this topic after two years, but hey, hacking information is always worth a bump, right?
I was puzzling for a bit over why this would create a problem on the newer disassembly, but not the old Xenowhirl one. After all, everything's equated, so changing the SSTs shouldn't do anything, right? Well, it's actually a problem with the disassembly, rather than the SST. $20 is a perfectly acceptable spot for inertia. Here's what's wrong: In the old Xenowhirl disassembly, at several points in the special stage's code, objoff_14 is used, whereas in the newer disassembly, this was changed to inertia for some reason. As far as I can tell, this change was completely needless. objoff_14 is still a valid equate.
So basically, if you want an alternative (and in my opinion, preferable) fix to changing the SST, fix what the SVN disassembly changed for no apparent reason instead. To do this, go to the following labels, and everywhere you see "inertia", change it back to "objoff_14".
SSPlayer_DoLevelCollision: (toward the end of the label) SSPlayer_Collision: SSPlayer_Move: SSPlayer_MoveLeft: (a few lines above this label) SSPlayer_MoveRight: (after the plus) SSPlayer_Traction: (one before the plus, and another after it) SSObjectMove:
Technically in the vanilla game, they both use $14, which is why inertia didn't create any problems before you changed its value to $20. But the code is looking specifically for $14, not necessarily for inertia. So changing the SST to $20 made it go haywire, because it was messing with something else that was probably using $20. Really, either fix works just as well. Yours works because it sets inertia to a value that's never called in the special stage's code, so it doesn't interfere with anything else. Mine works because it fixes a misused equate so that it's using the offset it should have been using all along. It's a matter of preference. Yours is simpler, but I personally wouldn't feel comfortable with it.
EDIT: Also, I'd like to point out that you never updated the first post of this thread when you came up with that fix, just your SST thread.

01