Автор статьи: Джонатан Дауленд (Jonathan Dowland), ведущий программист в одной из Open Source компаний, разработчик Debian и большой фанат Doom.

Что будет, если убрать случайность из Doom?
Недавно я почему-то подумал про Doom. В тот вечер мне захотелось изучить некоторые варианты поведения старой версии Doom. Для этого я открыл бинарник в hex-редакторе и заменил обращения к генератору случайных чисел на статические значения.
Вместо того, чтобы использовать системный ГСЧ, в Doom есть фиксированная таблица с 256 случайными числами, откуда извлекаются значения в соответствии с игровой логикой. Заменив всю таблицу фиксированным значением, вы в реальности делаете игру полностью детерминированной.
Как это выглядит? Я попробовал два значения:
При значении
При
При
Становятся странными и другие аспекты игры. Монстры могут всегда применять дистанционную атаку, независимо от расстояния до вас. Или неожиданно прекратить преследование. Я видел, как они бессмысленно ходят кругами, если встречают препятствие. Вероятность вступления в бой для монстра или нулевая, или стопроцентная. Игрок или молчит, или кричит от боли при получении ранения.
Если вы хотите сами попробовать, то проще всего отредактировать файл

Что будет, если убрать случайность из Doom?
Недавно я почему-то подумал про Doom. В тот вечер мне захотелось изучить некоторые варианты поведения старой версии Doom. Для этого я открыл бинарник в hex-редакторе и заменил обращения к генератору случайных чисел на статические значения.
Вместо того, чтобы использовать системный ГСЧ, в Doom есть фиксированная таблица с 256 случайными числами, откуда извлекаются значения в соответствии с игровой логикой. Заменив всю таблицу фиксированным значением, вы в реальности делаете игру полностью детерминированной.
Как это выглядит? Я попробовал два значения:
0x00
и 0xFF
. С каждым из них вместо эффекта «тающего» экрана в конце уровней картинка стиралась строго вертикально: ГСЧ использовался для сдвига каждого столбца. Монстры умирают не с разными криками, а с одним и тем же для каждой категории монстров. Огнестрельное оружие (hitscan) вообще не даёт разброса. Дробовик стреляет как снайперская винтовка, и пулемёт тоже. Можно подумать, что такой «супер-дробовик» обладает большой убойной силой, но есть нюанс: разброс пуль был его преимуществом.При значении
0x00
монстры никогда не издают тихих звуков (дыхание и т.д.). С другой стороны, при 0xFF
они делают это постоянно: так часто, что каждый звук накладывается на предыдущий, так что перед вами эдакое монстроподобное гудение. Это весьма подавляет даже при небольшом количестве монстров.При
0xFF
все участки с мигающим светом становятся статичными. А при 0x00
они мигают как сумасшедшие.При
0x00
монстры вроде бы начинают атаковать чаще, чем обычно. Ущерб для здоровья, похоже, идёт по максимуму. Самый вредоносный пол («super hellslime»/20%) может нанести ущерб, даже на вас надет костюм радиационной защиты. В нормальной игре шанс получить повреждения в таком костюме очень низкий: около 2,6% для каждого раза; здесь же он повышается до 100%.Становятся странными и другие аспекты игры. Монстры могут всегда применять дистанционную атаку, независимо от расстояния до вас. Или неожиданно прекратить преследование. Я видел, как они бессмысленно ходят кругами, если встречают препятствие. Вероятность вступления в бой для монстра или нулевая, или стопроцентная. Игрок или молчит, или кричит от боли при получении ранения.
Если вы хотите сами попробовать, то проще всего отредактировать файл
m_random.c
из исходников, хотя можно и изменить бинарник в hex-редакторе. Ищите 256-байтную последовательность, которая начинается с ['0x0', '0x8', '0x6d', '0xdc', '0xde', '0xf1'
] и заканчивается ['0x78', '0xa3', '0xec', '0xf9'
].