Начну издалека
Жил да был хороший человек, скрывающийся под ником Zeno. Готов предположить, что в интернете и помимо него существует непустое множество хороших людей, носящих этот ник, однако едва ли кто-то из них совершил такое количество славных деяний. А надо сказать, что этот Zeno — тот ещё затейник. То он напишет игру про человечка, странствующего по плоскости Лобачевского. То возьмётся за странноватый, но амбициозный проект Necklace of the Eye, позволяющий, в теории, относительно малой кровью прикрутить графику к любому рогалику — а рогалики (roguelike), напомню вам, это сорт игр, где «графика» традиционно выглядит как-то так:
Также в текущий момент он участвует в проекте ADoM Resurrection, призванном, как можно догадаться по названию, вдохнуть новую жизнь в культовую в определённых кругах игру Ancient Domains of Mystery. Слыхали? Как нет? Ладно, забудьте. Причина, по которой я питаю к этому человеку столь нежную симпатию, ещё не была перечислена. Собственно, мы как раз к ней переходим.
Hydra Slayer: что это такое и как этим наслаждаться
Искусство умерщвления гидр имеет долгую историю. Первые путешественники, имевшие несчастье повстречаться с этими тварями, были попросту неспособны причинить им какой-либо вред. Стоило им отрубить гидре голову, как на её месте вырастали две новые, или даже больше. Затем появились волшебные мечи, позволяющие отрубить несколько голов за раз так, что на их месте вырастало лишь константное (не зависящее от количества отрубленных голов) число новых. Если же одним метким ударом удавалось отрубить все головы сразу, гидра немедленно издыхала. Была у этих мечей, однако, неприятная особенность: меч, зачарованный, например, на срубание пяти голов, не мог нанести ни малейшего вреда гидре с четырьмя головами и менее. Меч же, предназначенный для отрубания ровно одной головы, не всегда мог перебороть регенеративные способности гидры — это зависело от типа зачарования и от разновидности и силы монстра. Удар меча, покрытого волшебным пламенем, не давал морозным гидрам севера отрастить ни одной новой головы, однако обычные болотные гидры вполне могли вырастить одну-две, а у огненных гидр, благодаря сродству с элементом меча, каждая срубленная голова превращалась в две новых.
Вот вам совершенно бытовой пример. Предположим, выходя утром из дома, вы внезапно столкнулись с девятиголовой болотной гидрой.
К сожалению, собираясь на работу, вы не предусмотрели такую ситуацию, и у вас при себе лишь огненный короткий меч и серебряная коса. Меч срубает четыре головы (и, соответственно, способен убить четырёхголовую гидру одним махом), однако у болотной гидры большего размера после такого удара две головы отрастут обратно. Косой можно скосить семь голов, но обитатели болот невосприимчивы к серебру, и после удара серебряным оружием у этой гидры вырастут сразу десять новых голов. Как победить в этом бою с наименьшими потерями и не опоздать на работу?
А теперь перейдём к сути
Hydra Slayer — это симулятор пошаговой зачистки логова гидр от его склизких обитателей. Формально можно причислить его к жанру roguelike — в нём присутствуют аскетичная графика, блуждания по процедурно-генерируемым подземельям, перманентная смерть и прочие радости. Когда-то он выглядел примерно так:
— но после интеграции с вышеупомянутым Necklace of the Eye появилось множество других графических режимов (хотя, необходимо признать, по своим красотам они по-прежнему слегка не дотягивают до Crysis).
Однако не будем говорить «фу», ибо не в графике заключается вся мякотка этой игры, а в беспощадном геноциде обитателей логова с помощью широчайшего арсенала матемагического оружия, оставленного нашими менее удачливыми предшественниками. На холодном каменном полу пещер ждут, пока мы их подберём:
- Клинки, о которых мы говорили ранее.
- Булавы, которыми можно оглушать определённое количество голов. Оглушённые головы очнутся через какое-то время, но в ближайшие несколько ходов после удара они не смогут кусать игрока.
- Топоры, которые отрубают головы подобно клинкам, но после удара которых вновь выросшие головы (если таковые будут) оказываются оглушёнными.
- Щиты — по своим ударным свойствам аналогичны очень слабой булаве, однако их носят не для того, чтобы бить. При расчёте повреждений, наносимых гидрой персонажу игрока, щит силы 2 заставляет каждую пару голов гидры считаться за одну. Если нести с собой два щита с силой 2 и 3 сответственно, они будут работать параллельно: головы гидры будут разбиты на пары и тройки оптимальным для игрока образом.
- Делители, без которых проблематично убийство по-настоящему большой гидры. За один удар они способны сократить количество голов в два или более раз, в зависимости от силы делителя, но бессильны, если количество голов не делится нацело на эту силу.
- Извлекатели, с помощью которых можно извлечь из гидры
потрохаквадратный корень. Или даже более чем квадратный. - Разложители, логарифматоры, клинки Времени, Стрижающие мечи и другая экзотика ожидают самых упорных на глубинных ярусах логова.
Сжимая в двух (спойлер: или более) руках все эти замечательные вещи, из которых я перечислил меньше трети, наш персонаж будет спускаться всё ниже и ниже, где средь подземного мрака его будут поджидать:
- Огненные, ледяные, золотые, серебряные, хаотические и так далее гидры. Всего в игре есть десять основных элементов, каждому из которых соответствуют как оружие, так и враги. Гидры каждого типа практически неуязвимы для оружия того же элемента, но слабы против некоторого другого.
- Гидры зловредные, умеющие по собственному желанию отращивать дополнительную голову, или же наоборот — волевым усилием терять несколько голов. Причём теряют они головы с умом (чудесный оксюморон, не правда ли?). Если у героя в руках биссектор, такая гидра в схватке с ним будет поддерживать количество своих голов нечётным. Если извлекатель — даже не надейтесь, что сможете поймать момент, когда количество её голов будет точным квадратом.
- Гидры кровавые, покрытые запекшейся кровью своих несостоявшихся убийц, из-за чего не виден их тип и сколько голов они отрастят при ударе определённым элементом. Всё это придётся определять опытным путём.
- Гидры древние, местные боссы. Их всего две, но они отличаются особой свирепостью и шестизначным количеством голов. Удачи с вашим мечом -5.
- Драконы — разновидность гидр, умеющая наносить повреждения издалека своим ядовитым/холодным/огненным/ещё каким-нибудь дыханием. Одна из древних гидр является по совместительству драконом.
- Пятидесятиголовые титаны — Гекатонхейры, а также их двухголовые младшие братья — эттины. Они не родичи гидрам и не умеют отращивать новые головы взамен утерянных, зато с удовольствием огреют вас найденным где-то в логове оружием. Это больно. Очень.
Я мог бы упомянуть ещё про свитки, порошки и зелья, которые способны помочь игроку, улучшить его оружие, превращать гидр в грибы, а грибы — в зомби… Про пять играбельных рас, каждая из которых требует радикально иной стратегии, нежели другая. Про топологию уровней — некоторые из них замкнуты в цилиндры, листы Мёбиуса и бутылки Клейна. Про возможность выбора геометрии — фигурка вашего героя может бегать по квадратикам или шестиугольникам, ходить или не ходить по диагонали, а также есть ещё один секретный режим, который я нашёл, глядя в исходный код (кстати, он распространяется вместе с игрой). Мог бы, но не стану :) Скажу лишь одно: при попытке представить всё многообразие ситуаций, с которыми можно столкнуться в этой игре, в голове происходит комбинаторный взрыв.
И всё-таки, зачем это на Хабре?
Задачка с девятиголовой гидрой, приведённая выше, способна поставить в тупик разве что первоклассника. Однако в игре есть множество вещей, которые покажутся интересными даже прожжённому любителю математики вроде меня или многих моих читателей. Например, Золотой секач. Он делит количество голов гидры приблизительно в пропорции золотого сечения. Как конкретно это происходит? Число голов разлагается в сумму различных чисел из последовательности Фибоначчи. Затем для каждого из этих чисел берётся предшествующее ему в последовательности. После этого сумма складывается обратно. Работает он, однако, только в том случае, если существует разложение, в котором нет единиц. Если в каждом возможном разложении присутствует единица, Золотой секач не окажет на гидру ни малейшего воздействия.
Если прочесть над этим оружием свиток Трансмутации, Золотой секач превратится в Серебряный. Принцип его действия основан на том же разложении в сумму, но в отличие от Золотого секача, он для каждого слагаемого берёт не предшествующее, а пред-предшествующее, и работает только если в разложении единица есть.
Если вы, мой дорогой читатель, человек с широкой математической эрудицией, вы наверняка уже вспомнили про Фибоначчиеву систему счисления. В ней каждое натуральное число представляется конечной последовательностью нулей и единиц, в которой не встречаются две единицы подряд, а позиции, на которых стоят единицы, соответствуют позициям тех членов последовательности Фибоначчи, которые нужно сложить, чтобы получить представляемое число. Доказано, что такое представление единственно, как и в «нормальных» позиционных системах счисления.
В Фибоначчиевой системе счисления становится гораздо понятнее, что делают секачи. Если запись числа заканчивается на нуль, то Золотой секач «отсекает» этот нуль. Если запись заканчивается на «01», то Серебряный секач «отсекает» эти две цифры. Можно подсчитать, что Золотой секач сработает примерно для 61,8% гидр, уменьшая количество их голов приблизительно в 1,6 раз. Серебряный секач работает для оставшихся 38,2%, но прореживает их головы уже где-то в 2,6 раза. Если зачаровать секачи с помощью свитка Большой Дубины, они начнут действовать итерированно, нанося несколько ударов за один взмах. Соответственно, Золотой секач сможет отрезать несколько нулей, а Серебряный — несколько повторений последовательности «01». Таким образом, хорошо зачарованный Серебряный секач сможет одним ударом убивать гидр с количествами голов 1, 4, 12, 33, 88... — т. е. 1, 101, 10101, 1010101 и так далее в Фибоначчиевой системе счисления. Это делает Серебряный секач весьма эффективным оружием в определённых стратегиях.
Здесь, однако, я вынужден прерваться. Я мог бы побеседовать с вами ещё о многих увлекательных вещах, вроде того, например, как эффективно лечиться с помощью трезубца и Стрижающего меча, или как воскреснуть из мёртвых, играя за Титана и неся с собой два одинаковых щита… Однако буду честен с собой: такую статью вряд ли кто-то осилил бы до конца.
Кстати, уже почти конец
Напоследок хочу сказать то, с чего, возможно, следовало бы начать. Несмотря на то, что игра недавно вышла в Steam, её бесплатная версия по-прежнему доступна для скачивания здесь. В ней чуть больше ошибок и не хватает малой толики контента, но в целом user experience примерно тот же. Это очень специфичная, полная непуганных багов, обладающая своеобразной графикой и кривоватым интерфейсом игра. Я надеюсь, вы её полюбите.
Комментарии (12)
eps
26.04.2016 05:03О, игроманы на Хабре!
Посоветуете ещё что-нибудь на Стиме из математических / программерских забав?eps
26.04.2016 05:06+2LoadRunner
26.04.2016 08:10+1SpaceChem (тоже от Зактроников, с этой игры с ними и познакомился, у них на сайте есть и браузерные игры на похожую тематику) — суть игры в составлении алгоритмов для ядерного реактора. Не симулятор.
Human Resource Machine (Разработчики World of Goo и Little Inferno) — ассемблерный геймплей как и в TIS-100, но более детский и интерактивный.
Great Permutator — разработчики вроде русские, графика может показаться отталкивающей, но суть игры не в этом, а в том, чтобы составить алгоритм перемещения цветных блоков в нужной последовательности (не играл в Infinifactory, но когда-нибудь её куплю, давно в желаемом, но этим они должны быть похожи).
До Factorio тоже мечтаю как-нибудь добраться.
Кстати, статья по TIS-100 — https://habrahabr.ru/post/263445/
Sirion
26.04.2016 08:23В этой серии необходимо вспомнить Spacechem.
Ещё есть игры, в которых можно поиграть с кодом самой игры: Hack'n'Slash и некоммерческая Untrusted.
В плане математики могу посоветовать ещё забавную, но откровенно детскую The Counting Kingdom.
Sirion
26.04.2016 09:05Ещё из школьных лет вспомнилась вот такая штука. То ли это эффект утёнка, то ли из множества игр на несложный устный счёт она сделана наиболее… душевно, что ли.
LoadRunner
26.04.2016 10:36Раз уж перешли к голым цифрам, то упомяну Hexcells (сапёр на шестигранниках) и Two Digits (есть вторая часть, усложнённая — Three Digits).
Sirion
26.04.2016 08:35Возможно, я случайно отклонил чей-то комментарий. Если это так, прошу прощения, повторите, пожалуйста.
Sirion
26.04.2016 14:00+2Признаться честно, я думал, тема заинтересует большее количество людей. Ну, что выросло, то выросло. Надеюсь, русскоязычная аудитория игры увеличится хоть чуть-чуть, чтоб было с кем поговорить)
LoadRunner
Прочитал на одном дыхании, пусть и со второй попытки ;)
И такую математику действительно интересно было бы почитать. Ведь Хабр читают не только из IT-сообщества, но и те, кто в гугле наткнулись на статью.
А ещё, есть что рассказать про «человечка, странствующего по плоскости Лобачевского»? Видел в стиме и какое-то время думал купить, но передумал.
Sirion
Я пока ещё сам в него особо не играл. Когда руки дойдут и если будет что написать, напишу обязательно.