| Before I get to the subject I'd like to give my thanks to Oddworld Inhabitants for amazing job at making the game rearrange and manage its data on |
| the fly. There's some hardcore oldschool coding involved you won't come across these days. |
Last month I was messing around with ol' good Exoddus' memory table on emulator, and the goal was to grant Abe access to his fart tool from the start of a new run. Any time and for an infinite amount. Using CEP, I've started my research at FeeCo. Depot and eventually found the right address to freeze. Next time I loaded my file, the cheat weren't working. Turns out game chooses a new address in 4 bytes offset randomly, left or right, of a certain region with every file load from Main Menu.
But it just didn't end there! Abe keeps running out of gas on most screens. I realised that game uses pair of independent counters for each utility - one is generic "ammo" and other kind of "physically stored" in inventory.⁽ᶠⁱᵍ∙¹⁾
From the very start Abe has access to a generic "ammo" counter generated within current level data, and that data changes its location in memory upon loading next level (map). It means that without some complex hacking tools, IT'S IMPOSSIBLE TO HACK COUNTERS SINCE THEY'RE THE PART OF A LEVEL ITSELF
, with an exception of farts' global counter - which sometimes remains active even if affected memory region is completely blank. But it would eventually crash the game when new level data gets loaded in there.
"So where does Abe gets "physical" ammo then?" - you ask. For that our blue Mudokon has to:
Step 1. Load the "dispenser" on screen (Meat sack, bone sack, grenades vendor, brew vendor). It writes some disposable data for further use.
Step 2. When Abe interacts with dispenser, said data recieves this string, rendering consumables usable, or "equipping":
B00B D00D 0009
Active Type? Counter
For the brew vendor, player equips ammo automatically upon object load.
Step 3. Pick up given tool (rock,bone,meat,grenade) off the floor. Doing that gives player's generic "digital" counter matching number of "physical" (Same function upon using brew vendor).⁽ᶠⁱᵍ∙²⁾
From now on, game will subtract from BOTH
of the counters evenly. Once Phys. ammunition gets depleted, "Equip" gets deactivated:
0FAC D00D 0000
Inactive Type? Counter
A few moments later data related to utility in steps 1 and 2 gets wiped, forcing player to repeat whole process. Interestingly, screens adjacent to source keep used up data static until Abe moves to the other screen. Let's talk about them.
AND THE VENDOR OF SECRETS™
The following info was discovered using frozen generic counters, memory monitoring and some very lucky glitches. There's total of four properties of screens on example of FeeCo. Depot Main Lobby and its brew vendor. See image below for visual presentation of their distribution⁽ᶠⁱᵍ∙³⁾:
Credits to SUPERFLOMM from Spriters Resource and Brecht Lecluyse for map rip and HD Mudokon emotes
[Normal] The screen where's vendor object is placed. Provides player with physical ammunition.
[Hacked Digi-counter] Farts/missile ammo won't deplete if exceeded physical limit.
[Normal] Ammunition is limited.
[Hacked Digi] Farts/missile ammo won't deplete if exceeded physical limit, either.
[Normal] Depletes ammo normally.
[Hacked Digi] Depletes ammo normally. In case of farts their supply is unlimited as long as SECRET COUNTER THAT KEEPS TRACK OF FARTS AMOUNT ON SCREEN (BOTH EQUIPPED AND PRIMED) is above 0. Once empty, doesn't render ordinary fart green until "Digi" set back to 0. Exceeding missile limits results in graphical glitches, tele-glitching to another screen, freezes and crash.
[Normal] Strips the player off farts and missiles data they get prior reaching that screen.fig.3
[Hacked Digi] Unable to use any weapon, empty. Glitches and crashes similar to DEPLETE screen.
Brew vendor's secret
So I wondered, "What NO FUN screens are there for?". "To prevent players from cheesing the challenge, obviously" - you say. But what if tell you there's more to it than meets the eye? That these vendors unlike other dispensers are able to TURN ALL DEPLETE SCREENS ON A MAP INTO FUN ONES!
Through some experiments with hacked Digi-counter I found out that loading the file saved in DEPLETE zone, heading to the brew machine and back granted Abe with infinite gas-bombs, it even prevents THE SECRET COUNTER THAT KEEPS TRACK OF FARTS AMOUNT ON SCREEN (AND EQUIPPED)
from hitting zero.
I tried many times to carry the effect through NO FUN zone, and with no success. But just once I've managed to glitch it the way I could use gas-bombs infinitely at Terminal 3 (to Slig Barracks) as if it was still under effect of the vendor.
So there you have it! I hope you enjoyed reading my research as much me sharing it.
And again, Credits to SUPERFLOMM from Spriters Resource and Brecht Lecluyse for map rip and HD Mudokon emotes