1996’s NiGHTS Into Dreams was Sonic Team’s first foray into 3D gaming, so it’s no surprise that the game has a wonky camera. For most of the game you’re controlling NiGHTS on rails, so the fact that the camera for Elliot and Claris is limited to 90 degree turns is not too burdensome.
You can see that things progressed. In 1997’s Sonic Jam, the 3D world has a camera that can move smoothly all the way around Sonic. It’s not great by modern standards, but it’s much nicer! The player can pick from a couple different angles, too.
1998’s Burning Rangers is thus kind of a step back: it’s using the 90 degree turns like NiGHTS. BR is a closer cousin to NiGHTS than to Sonic Jam in a lot of ways, but it’s odd that they didn’t bring their 1997 idea into their 1998 game.
But… wait a minute. Are the NiGHTS and Burning Rangers cameras actually even limited technically? It turns out not! We can upgrade them…
The video shows the before and after for both games. Below are details on how to do the upgrade, and more gameplay videos showing the smooth cameras in action.
The function that handles camera controls in NiGHTS is at 0603098C
. Here’s an annotated decompilation of the relevant section, adapted from Ghidra:
That is, the camera moves in fixed increments of C000
units left (negative) or right (positive) when the triggers are pressed.
A key word there was pressed. All of the Sonic Team Saturn games handle controller inputs the same way. There’s a two byte word that stores flags for each button that’s being held down. And there’s another two byte word that stores the same flags for each button that’s just been pressed.
If we switch the “pressed” check to a “held” check, we should get continuous movement. And if we reduce the increment the camera moves from C000
to, say, 0001
, we should get smoother rotation. The patches are:
06030A78 C44C
06030AA0 0100
06030AA2 FFFF
That does it! Playing as Elliot and Claris is much nicer with these patches.
The Burning Rangers camera code is a lot more elaborate than the NiGHTS camera code. It’s got lots of different modes (including a cool unused first person one), and in addition to the 90 degree turns it also has a “free movement” mode that works when you’re standing still.
There’s some code that looks a lot like the fragment from NiGHTS above, but BR handles things a bit differently. If you switch from “pressed” to “held,” the game “saves up” the rotation and applies it all at once when you release the triggers. So we’ll need to do something else to enable smooth rotation.
That “free movement” camera will do nicely. Normally it’s active when you’re holding the Y button, and it takes over the D-pad / analog stick. Here’s a simplified bit of code showing the logic:
We’ll do the following:
Disable the normal left trigger / right trigger controls
Make the game think we’re constantly holding Y
Ignore the analog stick, so we get clean rotation left and right
Remap the “holding Y” controls for left / right to left trigger / right trigger
Tweak the rotation speed
Burning Rangers has a couple of different “ignore input” flags, e.g. for cut scenes. One of them is at 060FFC43
. The game’s camera control function checks for it at 06024A4A
. Rather than read the actual value, we’ll just read a 01
for “ignore left trigger and right trigger.”
06024A4A E001
The check for “holding Y” is at 06024BC8
. From the table above, the Y button corresponds to a 02
on the high byte for buttons. We’ll replace the real read with a constant 02
:
06024BC8 E002
The check for whether the controller is in analog mode is at 06024BD6
. Analog mode is 07
. We’ll replace the real read with a constant 03
, which corresponds to digital mode.
06024BD4 E003
The D-pad checks read the whole “held button” word. We’ll change that to use only the high byte, so we can easily compare the input to the left trigger and right trigger flags.
06024C82 C45C
06024C84 C810
Almost done! The movement is a little sluggish, but we can double the rotation speed to make it feel snappier:
06024CB0 4000
06024C90 C000
Now it works nicely! The only caveat is that if you’re playing with a digital controller, the inputs here are going to interfere with pressing up and down to move your character. We can neutralize this by disabling the checks for the up and down camera controls, but this does prevent you from completing the training mission.
Last note: these memory patches can be expressed as Action Replay codes. The NiGHTS ones are:
06030a78 c44c
06030aa0 0100
06030aa2 ffff
The Burning Rangers ones are:
06024a4a e001
06024bc8 e002
06024bd4 e003
06024c82 c45c
06024c84 c810
06024cb0 4000
06024c90 c000
Thanks to privateye for testing these out! They are included in Pseudo Saturn Kai.