The first thing I wanted to do when I got Christmas NiGHTS was unlock the Sonic present. It was… fine, I guess? OK, it’s actually not all that fun. Sonic’s running is weird, and Spring Valley just isn’t really suited to be a Sonic stage. Maybe it would have been better to just have Sonic fly like NiGHTS?
We have the technology, so let’s make it do that!
This hack can be implemented with Action Replay codes. If you want to try it out, here are the ones to enter:
16055674 E028
16026128 0009
16026452 0041
1602AE10 0040
16043FDE E080
16043FE0 C020
Christmas NiGHTS re-works a few things from NiGHTS. It’s surprising to me how much effort was put into it, given that it was a free demo disc. One of the things that was added was a “game mode.” This variable acts as a set of flags, and lives at 060FFB20
:
01 = Time Attack mode (one of the presents)
02 = Link Attack mode (ditto)
04 = Mirrored course (use for Elliot’s Spring Valley)
08 = An unused fly together mode (more on this below)
10 = Play as Elliot
20 = Play as Claris
40 = Unused
80 = Sonic mode (one of the presents, of course)
When you select the Sonic present, the second thing it does (after setting the round to Spring Valley) is set 060FFB20
to 0x80
:
We can change that call on line 10 of the Ghidra decompilation to load Claris-style gameplay with fly-along instead (we’ll go over why in a moment) by setting 060FFB20
to 0x28
. This works because the 0x20
flag (Claris) stacks with the 0x08
flag (fly-along):
06055674 E028
Or we can choose Elliot with 0x18
:
06055674 E018
Christmas NiGHTS loads Sonic’s model instead of NiGHTS’s, so if we try to play with just this change, it will crash because it wants to put NiGHTS in the Ideya Palace. We can stop this by making two changes:
06026128 0009
06026452 0041
That will make Sonic show up when we approach the Ideya Palace. However, the game crashes if we step in. What’s going on? It’s the NiGHTS model again - the game wants to switch to NiGHTS when you dualize. We can patch it:
0602AE10 0040
Now we can play! You can see the “fly along” mode in action now. Instead of controlling one character, you’re controlling two: Sonic and Claris (or Elliot). It’s cool! I wonder what they had in mind for it?
The reason we used fly-along mode is to prevent crashes when completing mares. Normally when you return to the Ideya Palace, you see NiGHTS spin around with Claris or Elliot. But NiGHTS still isn’t loaded, so it won’t work. Fly-along mode doesn’t use this sequence, so we avoid the crash.
If we play through all four mares, we’ll encounter another crash when the dream ends. The problem is still with loading NiGHTS. We can sidestep this by setting the Sonic gameplay type, if we don’t mind playing the nightmare as Sonic alone:
06043FDE E080
06043FE0 C020
We’re cheating a bit here. The game tries to set your Elliot’s/Claris’s orientation to upright when you get transported into the nightmare. Instead of doing that, we’re using the instruction slots to write the gameplay style. As a result, Elliot/Claris will probably look like this as the dream ends:
There’s one more bug, which is that the game will have us fight Gillwing instead of Eggman-Puffy. Maybe you consider that a feature? If not, we can restore Eggman:
06044FAC E003
Now we’ve got a much better Sonic present experience! We get the normal NiGHTS-style gameplay for the dream, and a new Sonic-style fight with Eggman for the nightmare.
Future work: when we return to Christmas NiGHTS, we’ll see how to make Sonic fly by himself.