This page lists a number of bugs in the game engine for Sonic Adventure 2, Sonic Adventure 2: Battle, and Sonic Adventure 2 (2012). One-off bugs that stem from the geometry of a single level are a better fit on that level's page, if anywhere at all.
Each character has a normal base running speed, and there are three ways to adjust this speed:
If the game thinks one of these temporary modifiers is in effect (collecting Speed Shoes in the last 15 seconds, Speed Up in the last 10 seconds, or having an unused light attack in storage) and the player dies or restarts the level, it will also automatically perform the appropriate reversion, which is supposed to prevent the player from accruing abnormal amounts of speed. Or so they thought.
The reason it's able to revert the speed at the end of the duration at all is because there's a memory address that serves as "former speed", and when one of these adjustments takes place, the character's previous speed is stored in that address; reversion consists of simply loading that address into the current base speed address.
However, if a player obtains a second speed adjustment while the previous one hasn't yet reverted, the speed that gets stored will be the one that reflects the first speed adjustment. When one of the adjustments wears off, the speed will be "reverted" into having that first adjustment, and (since the "former speed" is never cleared out during a level, only overwritten) when the second one wears off, it will restore the same speed that you already have. (Essentially, this is a stack overflow where the stack size is one element.) Character base speed is persistent across lives, so you can die or restart at this point and you're start out the next life
Putting this into practical terms:
In a Knuckles or Rouge level, if one of the hunting items (emeralds, pieces or keys) is chosen to be inside an enemy, and you destroy that enemy without making physical contact with it, the item will be floating at the spot of its destruction. What's more, if you proceed to die, on the next life that item will still appear at the same spot you destroyed the enemy before! All 3 items will still be reshuffled and put in new locations, so in that case the remnant item is an illusion: collecting it doesn't count for one of the 3 you need to find, and it doesn't even give any points.
You can destroy enemies at a distance by having another one shoot it with bullets (but not lasers), letting it get caught in the explosion of a thrown or dropped bomb, digging up a bomb panel from the ground yourself, or most straightforwardly, throwing Omochao or another projectile at it.
In the level select screen, move to Chao World. Select it with A, but then press B to go back rather than proceeding into the world. This is relevant because it causes your most recent menu to be a character-select menu with 6 options, instead of a mission-select menu with 5.
Next, go to any level where you've completed all 5 missions. Hold A+B at the same time to select it, and instead of seeing the mission-select menu, the screen will turn black (and since it doesn't draw the menu, menu properties will fall back on the most recent visible menu, which was character select). You can still press Left and Right to move through missions and hear a sound when doing so, and if you press Right 5 times, you can select the 6th option: the so-called "Mission 6".
Mission 6 plays the same way as mission 1, except:
When you complete a level (by touching the goal ring, lost Chao, or 100th ring), the timer will actually count off 2 more frames before proceeding to the level complete screen. If you can pause the game during this 2-frame window, it's possible to reset or quit out of the level, and cancel the completion. Mission 2 is unique in that if you restart out of it, it won't cancel the completion: instead of going back to start, you'll restart into the level complete screen, with the timer starting from 0 and counting up on the screen itself. When the "NOW SAVING" message appears, the time that will be saved this way is predictable, and will always be 00:08:25 and an A rank.
There's also another method for restarting the timer after completing a level, which works in other missions. It relies on the fact that after triggering a character's death, there is a 175-frame delay before the screen fades out and the next life starts. The objective is to find a place to die (probably by way of a kill plane, since dying that way doesn't cause you to lose control of the character) such that it's still possible to complete the level in a window of time between 121 and 172 frames afterwards (roughly 2 to 2.9 seconds--any sooner than 2 just causes the level to complete normally). If you do that, the fade out to the level completion screen will be preempted by the fade out to the next life, and you'll go back to either the starting point or the last checkpoint. However, the normal level completion data will appear on the screen, and it's possible to control the character and even pause the game. If you choose Restart from the menu, the next life still counts as the level completion screen, and the timer resets to 0 and starts counting up from there. After a combined total of about 9 seconds across any number of lives, the "NOW SAVING" message will pop up, and the current time at that moment will be the time that gets saved to memory. Levels where this is possible include Crazy Gadget, Security Hall hard mode, Pumpkin Hill hard mode, and several 1st missions of hunting stages (but those require significant luck in rolling a specific piece placement to end the level on). It's also possible in mission 2 of Route 280, because the completion screen there is simply a continuation of the level, and you can aim such that the 100th ring is directly between the car and a gap in the road, and launch a boost to collect the ring and fall down the gap toward the water.
Like the above, this trick relies on the 175-frame window between death and screen fade. Instead of hitting a goal ring, though, if you can touch the Back ring, there are a different set of quirks that come into play.
If you die and then touch the Back ring before the screen fades, the effect depends on what point in the 175-frame window you actually touched it.
The window from 67 to 120 (roughly 1.1 to 2 seconds) provides the most desirable effects, because that code path can be executed even when you have 0 lives. The fade to white, even though it results in loss of a life in this case, doesn't go through the check for a "game over" at 0 lives, like the fade to black does. As such, it can reduce you to "-1" lives, and the effects that follow are the result of internal confusion over some functions treating that value in signed context (-1) and other functions treating it in unsigned context (255).
The HUD displays a -1 life total as 99 (from counting it as unsigned and reducing it to a 2-digit display). However, if you pause the game, the "Restart" option is unavailable: it's looking at a signed life total in this case, and -1 is less than 1, so don't allow a restart. Likewise, attempting to Quit from the level and take the "99" lives into a new level will only result in disappointment (-1 is less than the default starting life total of 4, so the game will "helpfully" bring you up to 4 lives), as will believing you actually have all those expendable lives (any death that results in a fade to black will see that -2 is less than 0, and count it as a game over and kick you back out to level select). They're not good for much...yet.
In order to obtain any useful effects, you need to die again, and hit the back ring in the same window of 67-120 frames after death that you did before. The white-screen-only death is still safe, and reduces the life total to -2 (signed) or 254 (not). It still displays as 99, and still has all those undesirable side effects that prevent it from actually being as useful as it looks on the HUD. There is one thing that becomes possible at -2 lives but not -1, though: the ability to gain a life and still have your total be negative afterwards.
Lives are normally constrained to the 0-99 range, and the game tries to enforce it at both ends: after losing a life (at least when it fades to black, as you've just seen), if the life total is less than 0 then count it as a game over. Obviously here, the life total has to be used in signed context. At the other end, after gaining a life, if the life total is greater than 99, reduce it to 99. Notably, this uses the life total in unsigned context, so from 254, gaining 1 puts it to 255, and that's greater than 99 so "reduce" the life total to that level. (If you started from -1/255 lives, then gaining a life just puts you up to 0 and defeats the whole purpose.) Now the 99 lives claimed by the HUD are real for all purposes: you can choose Restart from the pause menu again (and doing so will go to 98), and you can go to another level and still have 99 lives. Any method for gaining the life will do: the standalone 1-up item, 100 rings, or even collecting small animals. This trick is almost always done in mission 2, so 100 rings is the most convenient way because it also results in completion of the level, which causes the life total to save to the memory card for future playing sessions.
Now, it's one thing to say "find a place to die that allows you to touch the back ring in a precise window of 67 to 120 frames after that, then do it again." It's another thing to actually make good on those instructions without a personal timer that's constantly aware of each passing frame. The easiest way, by far, to die in that manner can be found in mission 2 of Security Hall. There are two Spark Beetles in the "C" block of the yellow (second) floor, which will move toward you (albeit slowly) and put up an intermittent damaging electric field, and the second floor is at just the right height that falling in the helpless death animation will land on the back ring at the right time. After getting hit, characters will always be knocked backward from the way they're facing, so get up to the edge of the second floor to your right, stand in the middle of the first two columns of safes, and turn to face away from the starting point, then wait for the beetle to move toward you and hit you into the back ring, and you should be one step closer to the game's fastest method of filling up the life total. It's also possible to perform the steps (albeit with varying degrees of difficulty) in Meteor Herd, Pumpkin Hill, and even Crazy Gadget, but for all practical purposes, Security Hall is the only one worth considering.
The European version of Sonic Adventure 2 Battle on the GameCube introduced a bug that's not in the US and Japanese versions when playing in 50Hz. Occasionally, the game may register two presses of the button in one frame, causing characters to act strangely. Sonic and Shadow will spontaneously do a Homing Attack from the ground, Tails and Eggman will instantly hover off the ground, and Knuckles and Rouge will cling to walls and floors instead of jumping.
The cause for this bug is the way the game handles 50Hz; frames are dropped so that the game runs at the same speed as in 60Hz when playing in 50Hz, and pressing during a frame that's being skipped causes the game to register the input on the next frame also. To address this bug, play the game in 60Hz mode by holding down when booting the game, providing the TV supports it.
Shiny two tone Chao colors are off from what they should be. Possibly due to the rushed condition of the port. For example a Shiny two tone run/run/dark Chao will be red with light yellow stripes rather than Black with red stripes.
|Sonic Adventure 2|