In a previous edition, I went over how NiGHTS Into Dreams and Burning Rangers treat non-playable characters. Understanding that let us make those characters playable with the second controller. That was possible in those games because of their existing multiplayer functionality (NiGHTS has a “versus Reala” mode, and BR has an unused two player mode).
Sonic Jam and Sonic 3D Blast don’t have any multiplayer capabilities, so the same trick doesn’t work in those games. But they treat NPCs the same way NiGHTS and BR do, so we can at least have player 1 controlling more than one character.
In this edition, we’ll make Sonic 3D Blast’s special stages even more like Sonic 2’s: we’ll have Tails follow behind Sonic. Here’s a video!
The basics of what we need to do are:
Patch out the 3D model changes that crash for non-Sonic characters
Swap the handler function that Tails (or Knuckles) uses for the one that Sonic uses
We handled the first task in a previous edition. To recap: Sonic has a “spinball” model and a “running fast” model. Tails and Knuckles only have their standard models, so when they jump or hit a speed bumper, the game crashes. We just need to keep the game from switching models in those situations:
0604C302 E000
06048BF4 E0FF
For the second task, we’ll look at Sonic’s function chain item. His handler is highlighted:
Here is the one for Tails:
We need to replace the Tails handler function with another instance of the Sonic handler function. The patch is:
060D048C 06048BD4
That almost works, but not quite… Tails/Knuckles do start responding to button inputs, but they fall straight through the half-pipe and into the void. Here’s how it would look if you could see it:
The problem is that Tails and Knuckles don’t know where the pipe surface is located. We can fix it by consulting Sonic’s state - he’s got an entry for 06048A4C
where Tails and Knuckles have nothing. The patch is:
0604E5A0 06048A4C
Now they can land on solid ground!
There’s a little bit more tweaking to be done. You can adjust the second character’s speed to be lower temporarily such that they hang back a bit and don’t overlap with Sonic (set 060d04b0
to 00000000
a few times).
We’ve done it! However… this isn’t really playable long-term: if the two characters lose each other (e.g. by hitting a speed bumper), the game gets confused. You can easily get stuck and be unable to finish the stage.
There’s an even less functional version of this hack that puts all three characters in at once. This involves loading the Sonic handler twice, which causes slowdown. I may write more about this in a future edition:
Maybe I can call this a beta of Sonic Heroes?
This hack goes into the “cooler to look at than to play” category. But it is educational: we’ll use these same tricks in an upcoming edition. In that one we’ll apply similar methods to Sonic Jam.