Gandhi, the Destroyer of worlds
В пору, когда Юлия Латынина еще не заделалась стрингершей скромных достоинств и не подурнела лицом, а слыла одной из самых красивых и перспективных молодых писательниц Рунета, на страницах ее романа Инсайдер проскочило упоминание, что самое страшное оружие обычно изобретают самые мирные народы. Это эмпирическое наблюдение подтверждается не только поведением Федерации Девятнадцати из Вейского цикла, чьи боевые корабли, по мнению Теренса Бемиша, способны были загасить обогревавшее Вею солнце, точно курильщик — догоревшую сигарету или (по мнению экспертов iXBT) Йеллоустоунская суперкальдера — космический рассвет человеческой цивилизации.
И не только примером Соединенных Штатов Америки, которые, как известно, ни разу после Войны за независимость не подвергались массированному вторжению вражеской армии, но притом числятся единственной в истории человечества нацией, применившей на войне ядерное оружие против представителей своего же биологического вида.
Более интересный пример может быть найден в игре Цивилизация. Строго говоря, это баг, причем воспроизводится он из версии в версию, восходя еще ко временам DOS и первых книг Юлии Латыниной о Вейской империи. В игре Индию представляет Ганди, которому, как и его историческому прототипу, присуще крайнее миролюбие сатьяграхи. Однако, стоит виртуальным индийцам развить у себя демократию, как Ганди становится нечеловечески агрессивен и атакует игрока любыми доступными средствами, вплоть до атомной бомбы.
Изначальная причина этого “эффекта Оппенгеймера” кроется в гиперплоскости говнокода. Исходный уровень агрессивности Ганди установлен в 1, но примитивный искусственный интеллект игры при переходе к демократии понижает этот параметр еще на 2 единицы. Как можно догадаться, в силу специфики операций программистов Цивилизации с целочисленными переменными агрессивность Ганди после этого испытывает unsigned integer underflow и становится равна не -2, а 255. Последствия немного предсказуемы.
Сам я с подобным поведением индийца не сталкивался, поскольку последняя испытанная мной (в 1996 г.) версия игры была еще более древней. С Цивилизацией я познакомился почти в то же время, что и Йен Бэнкс, которого игра вдохновила на девятиуровневый ранговый классификатор цивилизаций вселенной Культуры, но ее фанатом не стал, как и поклонником компьютерных игр вообще (за исключением клеточных автоматов).
В современных версиях баг играет роль пасхального яйца. На практике это значит, что Ганди в обычных условиях будет вести себя примерно идентично реальному образу, воздерживаясь от агрессии или объявления войн, однако при серьезном оскорблении начнет гоняться за обидчиком по всей карте и не отстанет, пока не прокачается до уровня, позволяющего применять ядерное оружие, или не будет разбит (отметим показатель в графе накопленной статистики Nuke для этого персонажа).
Довольно свежее, но уже укоренившееся предание приписывает аналогичные мотивы смене номера версии Window$ с 8 на 10: якобы ленивые программисты проверяли его по условию равенства первой цифры девятке. На самом деле проверяется, конечно, номер версии ядра, но мы-то знаем, что власти скрывают. Иначе зачем было бы так его наращивать, заметая следы?
LoadedDice