jmtd → log → Deterministic Doom
What happens if you remove randomness from Doom?
For some reason, recently I have been thinking about Doom. This evening I was wanting to explore some behaviour in an old version of Doom and to do so, I hex-edited the binary and replaced the random number lookup table with static values.
Rather than consume system randomness, Doom has a fixed 256-value random number table from which numbers are pulled by aspects of the game logic. By replacing the whole table with a constant value, you essentially make the game entirely deterministic.
What does it play like? I tried two values,
either value, the screen "melt" effect that is used at the end of
levels is replaced with a level vertical wipe: the randomness was
used to offset each column. Monsters do not make different death
noises at different times; only one is played for each category of
monster. The bullet-based (hitscan) weapons have no spread at all:
the shotgun becomes like a sniper rifle, and the chain-gun is
likewise always true. You'd think this would make the super-shotgun
a pretty lethal weapon, but it seems to have been nerfed: the
spread pattern is integral to its function.
0x00, monsters never make their idle noises (breathing etc.)
On the other hand, with
0xFF, they always do: so often, that each
sample collides with the previous one, and you just get a sort-of
monster drone. This is quite overwhelming with even a small pack of
0xFF, any strobing sectors (flickering lights etc.), are
static. However, with
0x00, they strobe like crazy.
0x00, monsters seem to choose to attack much more frequently than
usual. Damage seems to be worst-case. The most damaging floor type
("super hellslime"/20%) can hurt you even if you are wearing a radiation
suit: There was a very low chance of it hurting whilst wearing the
each time the game checked; this is rounded up to 100%.
Various other aspects of the game become weird. A monster may always choose to use a ranged attack, regardless of how close you are. They might give up pursuing you. I've seen them walk aimlessly in circles if they are obstructed by another thing. The chance of monster in-fighting is never, or a certainty. The player is either mute, or cries in pain whenever he's hurt.
If you want to try this yourself, the easiest way is to hack the
file in the source, but you can hex-edit a binary. Look for a 256-byte sequence
['0x0', '0x8', '0x6d', '0xdc', '0xde', '0xf1'] and ending
['0x78', '0xa3', '0xec', '0xf9'].