The Saturn Sonic Team games - NiGHTS, Christmas NiGHTS, Sonic 3D Blast’s special stages, and Sonic Jam’s 3D world - all treat non-playable characters in approximately the same way. They handle them as if they’re playable characters, but instead of having them use the functions that listen for player inputs, they have them use AI inputs.
Similarly, the games that support multiplayer - NiGHTS, Christmas NiGHTS, and Burning Rangers - handle player 2’s inputs just like player 1’s. There’s a parameter that determines whether a particular character should listen to controller 1 or controller 2.
A cool consequence of these two facts is that it’s easy to (a) change non-playable characters into playable ones, and (b) change which controller a playable character responds to. That is, we can make NPCs controllable by player 2!
The first NPC you encounter in NiGHTS is… NiGHTS. When you approach the Ideya Palace as Elliot or Claris, you’ll see NiGHTS inside, trying to get your attention.
NiGHTS is responding to AI inputs via function 060222A0. Your character is responding to controller inputs via function 060225E0 (I call this one “normal control”). If you swap in the latter function for the former, NiGHTS will start reacting to controller inputs instead.
The game uses a different control scheme for flying and walking. If you follow the first pointer after the one for the input handler, you’ll arrive at the control scheme selector address. Set it from 00 (flying) to 04 (walking), and NiGHTS will drop down. You can now use controller 2 for NiGHTS!
Grab a friend and have the two characters run around Nightopia. It’s… sort of fun? Until the camera loses track of the second player and you can’t find them again, that is.
Why does this work? It’s because: (a) NiGHTS knows how to use the second controller for the “Versus Reala Mode,” and (b) the game conflates “ignore input from controller 1” with “ignore input entirely” when you’re not in Versus mode. So in order to make the NPCs ignore input, they assign the “read from controller 2” flag. So once you assign the “normal control” function handler, inputs from controller 2 start being processed.
You can do this trick any time there’s an extra character - NiGHTS, Claris, Elliot, Reala - on screen. If you want to take over Reala during the boss fight, it’s more or less the same procedure. Reala uses the same 060225E0 function as NiGHTS, but the values at the next pointer just need to change from 24 00 (Reala AI, ignore the controller) to 00 00 (flying controls, process inputs normally).
The Wizeman boss fight works the same way. The second instance of NiGHTS uses the 060225E0 function. Change the values at the next pointer from 20 20 (follow-along AI, ignore the controller) to 00 00 (flying controls, process inputs normally) and now player 2 can help out. Sort of - you can’t actually hit Wizeman like this.
You can also have the same controller be responsible for both characters: the first 01 you see after the pointer to the control function is what does the controller assignment. Set it to 00 for NiGHTS+controller 1, 10 for Elliot+controller 1, 20 for Claris+controller 1, and 30 for Reala+controller 1 (this only works in Reala’s boss arena).
It works with three characters, too. At the end of Twin Seeds, you have Elliot, Claris, and NiGHTS all onscreen at once!
This is very persnickety to make work, because the game keeps wanting to end the dream.
Does this work in the other Sonic Team Saturn games? The answer is yes for Christmas NiGHTS and Burning Rangers, but no for Sonic 3D Blast and Sonic Jam. The two Sonic games don’t have any means of acting on input from controller 2, alas. There is a different hack related to NPCs that we’ll look at in a future edition.
In Burning Rangers, you can grab control any time there’s another ranger on screen. The function for normal control is 0602A288. If you follow the second pointer after that, the second word is for determining which controller to use. Here it’s the high bit that matters rather than the low one.
I used that technique for this video, which has me controlling four characters at once in the training space. There’s more work involved to cut out the scripted parts, which I may discuss in a future edition. In the meantime, enjoy this multi-Ranger training exercise.
We will have much more to say about multiplayer features in Burning Rangers; stay tuned!