If you appreciate the work done within the wiki, please consider supporting The Cutting Room Floor on Patreon. Thanks for all your support!

Notes:Spy Fox in Dry Cereal

From The Cutting Room Floor
Jump to navigation Jump to search

This page contains notes for the game Spy Fox in Dry Cereal.

Unused Dialogue

This gives a brief technical rundown of the programming issues that prevent some of the game's dialogue from playing, as well as whatever hacks people have managed to cobble together to fix them.

All offsets apply to the original U.S. release and some are in the U.K. release of the game (MD5 hash e01f959bdd49d5b0c8660fd8a14d4799). All changes are pre-encrypted (Humongous games xor the main data file by 69).

Hmmm...
To do:
make these not completely half-assed

Cantina

Beet Bliss

Cause unknown; changing offset 24D1C6 (or 24D05B in the UK version) from 6A to 68 appears to fix (changes pushWordVar() to pushWord(), definitely not correct!).

Chicken Knuckles Re-Buy

The game runs code equivalent to the following when the drachmas are used on the Chicken Knuckles sign:

if (var155 == 1003) {
	if (var252 == 0 && script231 is not running) {
		run script231
	}
}

Script 231 handles the logic for buying the Chicken Knuckles (and trying to buy them again afterwards). The problem is that the part of the script that handles the initial purchase also sets var252 to 1, meaning that the script will never get called again after it's already run.

To fix, change offset 242BD2 from 71 to 70, changing the condition from (var252 == 0 && script231 is not running) to (var252 == 0 || script231 is not running).

Dock

Drydock Leaving

The first time Fox boards the ship, the game runs script 223 to handle the change to the ocean room. Subsequent exits use a different script, but script 223 contains the logic and dialogue to handle them itself. Possibly someone just put the lines in the wrong script, thinking it was the one that was used, and the problem was never noticed.

Changing B3FF60 from 8E to B6 will run script 223 every time Fox boards.

Drydock Map

Don't know what happened here. The logic is in script 225, which is only called when Drydock sticks up the map. Change B3FF60 from 8E to 88 to put it in place of the boarding animation (which it handles perfectly).

N.O.G. Factory

Lever

Seems to have been a simple design error. Changing offset E7DD28 from 34 A3 to 35 05 negates the check for whether Fox is standing by the lever and changes the jump offset so that the move-to-lever animation will play immediately afterward. This will cause Fox's move-to-lever animation to always play when the lever is clicked (as long as the piranha pool isn't already frozen). Of course, this looks silly if he's already standing by the lever.

Go Fish

Cock-a-Doodle Fu

The incorrect line of dialogue is actually duplicated and the original isn't in the game at all, so fixing that is out of the question. Dunno what makes the script bug out at the end, but changing 12F1B76 (or 130CAF7 in the UK version) from 34 to 35 (ifNot() -> if()) will force the lines to play when they're supposed to, although the game won't proceed to random dialogue afterwards.

In-Match Dialogue

Who knows why this wasn't used. To replace the regular dialogue with this set, change offset 12E9F5A from 9E to 9F, which calls script 246 in place of 247.

Mobile Command Center

Monkey Penny

A simple error. The game generates a random number from 1-6 and writes the result to memory. It's supposed to push it onto the stack and then go through a series of "if (number == 1) { playline1 } else if (number == 2) { playline2 }..." statements, but instead it pushes a constant 0x01, meaning the first line plays every time.

The remaining five can be heard by changing the data at offset 18ACFFD (or 187C756 in the UK version) from

68 69 6B 69 6A 69 6D 69 6C 69 6F 69 6F 8A 69 E9 2A 69 29 69 68

to

6B 69 6A 69 6D 69 6C 69 6F 68 6C 69 8A 69 E9 2A 69 29 6A 69 29

The fix is so long because the script pushes a byte and pushing the correct memory location requires pushing a word, so this hack removes 1 as a possible outcome of the random number selection in order to get the needed extra byte. This obviously means the first line won't play.

Tuna Guards

Guard

Some issue with actor numbers or something. Can be more or less restored by changing offset 365FC66 (or 3676519 in the UK version) from 6A 69 29 to 68 68 69 (although this causes the line to get attributed to the wrong actor, so the subtitles will be white instead of the correct blue color). Like the Beet Bliss hack, this changes a pushWordVar() to a pushWord(), so it's not a proper fix.

Missile Fuse Box

Missile Fire

Seems to be a simple case of checking the wrong element of an array. Element 9 is set when the missile button is pressed, but the game checks element 2. Fix by changing 40953E9 (or 40BF72C in the UK version) from 6B to 60.