zHz00
Статья описывает так называемый wizard mode в NetHack. Указаны основные функции, особенности, области применения. Проведёно сравнение с режимом исследования (explore mode).


1 Введение
Рано или поздно игроки в NetHack сталкиваются с трудностями при прохождении. При этом трудности бывают связаны с отсутствием глубокого понимания игровой механики и невозможностью повторно обыграть одну и ту же ситуацию (причём последнее мешает накоплению опыта). Более того, ситуации зачастую повторяются, но в несколько иных обстоятельствах. Вспомните, сколько раз вы умирали от укуса гигантских муравьёв (giant ants). С целью предоставления игрокам возможности ускоренного накопления опыта игры, самой игрой предлагается документированный режим исследования (explore mode). Однако есть другой, более мощный механизм взаимодействия с миром NetHack, открывающий практически безграничные возможности по экспериментированию. Это режим "волшебника" (wizard mode), предназначенный для отладки игры.

2 Режим исследования (explore mode)
Несмотря на то, что статья посвящена не этому режиму, обходить стороной его не следует. Режим исследования предоставляет игроку несколько функций, дающих ему возможность практически гарантированно пройти игру (кроме случаев игровой непроходимости, см. nethackwiki.com/wiki/Unwinnable).

2.1 Вход в режим исследования
Войти в этот режим можно двумя способами:
  • В любой момент во время игры надо нажать Shift+X. После ответа "y" на запрос
    Do you want to enter explore mode? [yn] (n);
  • Задание входа в режим ещё до начала игры. Для этого надо запустить игру с параметром -X. Например:
    nethackw.exe -X
    При этом вы получите палочку исполнения желаний.

Выход из режима исследования невозможен. Результаты, полученные в режиме исследования, не учитываются в таблице рекордов (хранится в файле nhrecord), но учитываются в таблице сыгранных игр (хранится в файле logfile).

2.2 Возможности, предоставляемые режимом исследования
Перечислим их:
  • Невозможность смерти без согласия игрока. Каждый раз, когда игрок умирает, он получает запрос "Die?[yn](n)" Только если он ответит "y", он умрёт -- это является основной функцией данного режима, т.к. случайная смерть -- самое распространённое препятствие прохождению игры;
  • Возможность получить весь список текущих атрибутов. Когда игрок в обычном режиме нажимает Ctrl+X, он получает только "открытые" атрибуты, которые ему известны всегда: имя, раса, роль, пол, направление веры (alignment) и список божеств пантеона (с указанием того, в кого игрок верит в текущий момент и того, в кого он верил изначально). Однако есть ещё и другие атрибуты, такие как сопротивления (огню, холоду и т.д.), уровень и характер удачи, взаимоотношения с богом и т.д. Вот в режиме исследования их можно посмотреть в любой момент по нажатию того же сочетания клавиш. В нормальной игре для этого нужно получить "просветление" (enlightenment) тем или иным способом;
  • Возможность оставить файл сохранения даже после загрузки. При старте сохранённой игры будет выдан запрос:
    Do you want to keep the save file? [yn] (n)
    Если ответить "y", то файл сохранится. Это позволяет (сохранившись в нужном месте) разыгрывать одну и ту же ситуацию неограниченное число раз;
  • Палочка исполнения желаний (wand of wishing). Если вы начнёте игру изначально в режиме исследования, в довесок к основному инвентарю вы получите wand of wishing (0:3), что даст вам возможность загадать 7 желаний (включая свитки зарядки -- scroll of charging).


3 Режим волшебника (wizard mode)
Все функции, имеющиеся в режиме исследования, присутствуют и в режиме волшебника. Но собственных функций гораздо больше.

3.1 Вход в режим волшебника
Для входа в режим волшебника, необходимо вызвать игру со следующими параметрами:
nethack -u wizard -D
Где:
-D -- режим отладки
-u -- задание имени пользователя

Если вы будете часто использовать этот режим, создайте текстовый файл и запишите в него эту команду. Когда запишете, переименуйте его в nhwizard.cmd (для Windows) nhwizard.sh (для Linux -- там ещё придётся первой строкой написать #!/bin/sh -- но линуксоиды про это знают). После этого при двойном щелчке по скрипту/командному файлу будет происходить запуск игры сразу в режиме волшебника.

В сборке по умолчанию пользователь должен иметь имя wizard.
В UNIX-like системах игроку может быть не позволено выбрать имя произвольно -- вместо этого будет будет подставлено имя текущего пользователя. И если пользователя зовут не "wizard", произойдёт запуск в режиме explore mode. В некоторых сборках вместо имени wizard может быть подставлено другое имя, как правило -- root. Т.е. чтобы играть в режиме волшебника на таких системах придётся иметь доступ к root. Имя пользователя, необходимое для игры в режиме волшебника, задаётся в исходном коде игры (файл config.h, строки 146 и 149 -- надо заменить то, что в двойных кавычках на то, что надо и пересобрать игру; описание процесса пересборки выходит за рамки статьи).
Сохранённую игру в обычном режиме можно перевести в режим волшебника, если в имени файла сохранения игры заменить текущее имя на имя wizard (или что там вместо него).
Например, изменить имя:
Administrator-zHz.NetHack-saved-game
На имя:
Administrator-wizard.NetHack-saved-game

3.2 Функции, специфичные для режима волшебника
Перечислим возможности режима волшебника. Все функции доступны в любой момент независимо от обстоятельств. То есть, к примеру, загадывание желания возможно даже при отсутствии палочки желаний, когда вы стоите один посреди комнаты и у вас в руках ничего нет.

  • Контролируемая внутриуровневая и межуровневая телепортация;
  • Получение карты уровня;
  • Получение раскладки уровней по игре (номера уровней, где начинается Сокобан, Геенна (Gehennom) и т.д.);
  • Полиморф себя и окружающих мобов (т.е. монстров);
  • Создание моба (можно задать тип);
  • Загадывание желания (можно желать даже те предметы, которые обычно желать нельзя, например... фонтан, подробнее см. ниже);
  • Поиск дверей и ловушек;
  • Идентификация всего инвентаря;
  • Смена уровня опыта персонажа (Experience level) в любую сторону до любого значения;
  • Заведомо успешная молитва;
  • Отказ от загрузки костей (bones) на уровне, куда вы зашли, вопрос о сохранении их в конце игры и вопрос о том, сохранять ли кости на уровне, после того, как вы туда зашли;
  • Дополнительный заведомо заданный инвентарь;
  • Геноцид всех мобов на уровне, кроме вас (но включая котёнка).

Также есть ряд возможностей, которые могут пригодиться только при отладке:
  • Показ источников света
  • Показ режима стен;
  • Принудительное падение программы (паника);
  • Показ областей, которые вам видны из текущей точки;
  • Показ векторов "осмотрено";
  • Показ очереди ждущих объектов (гниющие трупы и т.д.);
  • Показ статистики расходования памяти.


3.3 Вызов различных команд режима волшебника
Ниже в виде таблицы представлены команды, которые можно подавать игре.

Таблица 1. Команды режима волшебника, вызываемые клавишами.
Сочетание клавишФункция
Ctrl+Eпоказать ловушки и скрытые двери
Ctrl+Fпоказать карту уровня
Ctrl+Gсоздать монстра
Ctrl+Iидентификация всего инвентаря
Ctrl+Oпоказать раскладку игры по уровням
(на каком уровне Сокобан и т.д.)
Ctrl+Vмежуровневая телепортация
Ctrl+Wзагадать желание

Часть команд вызывается через режим расширенных команд (#).

Таблица 2. Расширенные команды режима волшебника.
#levelchangeсмена уровня с текущего до заданного
(в любую сторону)
#lightsourceпоказ плавающих источников света
#monpolycontrolконтроль превращений монстров
#panicпроверка функции паники
#polyselfпревращение (полиморф) себя самого
#seenvпросмотр вектора осмотренного
#statsстатистика расхода памяти
#timeoutсписок объектов, для которых идёт
отсчёт времени (тухнущие трупы и т.п.)
#visionпросмотр области, видимой из текущей точки
#wmodeпросмотр режима стен


3.4 Подробное описание различных команд режима волшебника

3.4.1 Команды, вызываемые через сочетания клавиш

3.4.1.1 Ctrl+E: Показать ловушки и скрытые двери
Работает точно так же, как и wand of secret door detection/заклинание detect unseen. Хода не забирает.

3.4.1.2 Ctrl+F: Показать карту уровня
Работает точно так же, как и scroll of magic mapping/заклинание magic mapping. Работает даже на тех уровнях, которые обычные средства не показывают. Хода не забирает.

3.4.1.3 Ctrl+G: Создать монстра
Вам задаётся вопрос, какого монстра вы хотите создать. Можно задать любого монстра, в т.ч. уникального (например, Death). Монстр появится рядом с вами. Если рядом с вами места нет, он появится в ближайшем доступном для вас месте. Ход на это не расходуется. Можно последовательным вызовом создать несколько уникальных монстров. Для монстров можно явно задавать статус враждебности -- tame (ручной), peaceful (мирный) или hostile (враждебный). Другие способы создания монстра (волшебная палочка, свиток, заклинание) также выдают вопросы о типе монстра. Чтобы сделать случайного монстра, надо нажать Escape. Кот в мешке (bag of tricks) создаёт случайного монстра не задавая вопросов. Ответьте "]", чтобы созданный монстр был случайным, но типичным для данного уровня.

3.4.1.4 Ctrl+I: Идентификация всего инвентаря
Работает как scroll of identify, когда он опознаёт весь инвентарь. Хода не тратит.

3.4.1.5 Ctrl+O: Показать раскладку игры по уровням
На экране появляется список всех специальных уровней и места, где происходит соединение ветвей. Чем объяснять, как это себя ведёт, проще показать пример (с комментариями):
The Dungeons of Doom: levels 1 to 28
One way stair to The Elemental Planes: 1
Stair to The Gnomish Mines: 3 // лестница в Гномьи Шахты
oracle: 5 // Оракул
Stair to Sokoban: 6 // Лестница в Сокобан
Portal to The Quest: 12 // Портал в Квест
bigrm: 12 // Big Room -- Большая Комната
rogue: 15 // Rogue-level -- Rogue-уровень
medusa: 26 // Медуза
Connection to Gehennom: 28 // Выход в Геенну
castle: 28 (tune FCBEB) // Уровень, где замок -- заметьте, дополнительно указывается мелодия открытия
Gehennom: levels 29 to 50
valley: 29 // Valley of the Dead -- долина мёртвых
juiblex: 32 // болото Джуиблекса
asmodeus: 34 // Асмодей
baalz: 36 // Вельзевул
Stair to Vlad's Tower: 37 // Выход в башню Влада (растёт вверх)
orcus: 38 // Город Оркуса
wizard1: 44 // три уровня башни волшебника
wizard2: 45 // то же
wizard3: 46 // то же
fakewiz1: 47 // фальшивая башня 1
fakewiz2: 48 // фальшивая башня 2 (в одной из них вход в настоящую)
sanctum: 50 // Санктум -- там амулет
The Gnomish Mines: levels 4 to 11 // Гномьи шахты
minetn: 6 // Город Шахт
minend: 11 // Конец Шахт
The Quest: levels 12 to 17 // Квест
Wiz-strt: 12 // Начало
Wiz-loca: 14 // Середина
Wiz-goal: 17 // Конец
Sokoban: levels 2 to 5, entrance from below // Сокобан
soko1: 2
soko2: 3
soko3: 4
soko4: 5
Fort Ludios: level 19 // Форт Луидос
knox: 19
Vlad's Tower: levels 34 to 36, entrance from below // Башня Влада
tower1: 34
The Elemental Planes: levels -5 to 0, entrance on -1 // Элементальные планы
astral: -5
water: -4
fire: -3
air: -2
earth: -1
dummy: 0

Floating branches
Portal to Fort Ludios

Список позволяет легко ориентироваться в игре. Если вы находитесь на элементальных планах (Endgame) или на дне Геенны, вам будут дополнительно сообщены координаты портала на следующий план либо Вибрирующего Квадрата (vibrating square) соответственно.

3.4.1.6 Ctrl+V: Межуровневая телепортация.
Работает, как cursed scroll of teleportation или аналоги. Спрашивает, на какой уровень телепортироваться, как всегда бывает при контролируемой телепортации. В качестве ответа можно ввести "?" и нажать Enter. Тогда появится раскладка игры, как по Ctrl+O, где можно будет выбрать, куда переместиться. Хода не забирает. Иногда не работает -- почему, не выяснил. Требуется дальнейшее изучение.

Нельзя телепортироваться ниже Долины Мёртвых (Valley of the dead) путём ввода уровня. Но через меню -- можно. Нельзя телепортироваться, когда вы уже в Endgame.

3.4.1.7 Ctrl+W: Загадать желание
Загадать желание можно в любой момент, не расходуя ход. При этом увеличивается время до следующей молитвы. Загадывать можно любые объекты с заданными характеристиками в относительно неограниченном количестве.

Какие характеристики вещи можно задать?
  • Святость вещи
  • Загрязнённость вещи;
  • Защищённость вещи от внешних воздействий;
  • Испорченность вещи
Это как обычно. Кроме того, можно указать:
  • количество вещей (любое, хоть 100; шанс выпадения 100%);
  • Зачарованность вещи (до +127; для оружия более примерно +50 при общем уроне монстру более 127 возможны проблемы из-за переполнения внутренних представлений чисел)
  • Число зарядов заряжаемых вещей (тоже можно задавать любое, до 127, например, wand of death (0:127));
  • Наличие ловушки в контейнере (например, trapped large box)
Какие вещи можно загадать, кроме тех, что обычно?
  • Любой артефакт с шансом получения 100%;
  • Предметы, необходимые для Вызова (Invocation);
  • Venom. Это капля яда плюющейся змеи. Эту штуку можно заказать только в режиме волшебника. Её можно выбросить из инвентаря, но нельзя подобрать. Как её использовать? Кидаете через команду throw и она ослепляет того, в кого попала (если заказана blinding venom). Или наносит ему урон (acid venom). Ещё этой штукой можно писать на полу.
Всё.
Что по-прежнему заказать нельзя?
  • Дубли артефактов (кроме предметов для призыва -- их можно тиражировать в неограниченном количестве; предметы для призыва (Invocation: nethackwiki.com/wiki/Invocation) это Bell of Opening, Candelabrum if Invocation и Book of the Dead). Вы получите "базовый" предмет типа артефакта. Допустим, вместо второго Magicbane вы получите athame.


Что можно заказать, кроме предметов? Различные элементы ландшафта. Элемент появится на той клетке, где вы стоите. Это включает в себя:
  • Алтари (можно задать вероисповедание, например, "chaotic altar": chaotic, neutral, lawful, unaligned)
  • Фонтаны (fountain, в том числе magic fountain);
  • Бассейны (pool);
  • Троны (throne);
  • Раковины (sink);
  • Деревья (tree);
  • Могильные камни (grave, содержимое в наличие);
  • Ловушки (если на уровне нельзя копать вниз, то вместо ловушки "дыра" (hole), и "дверь-ловушка" (trap door) будет сгенерирована ловушка "камень с потолка";
  • Лава (lava);
  • Iron bars -- такие штуки, через которых летят копья и стрелы, а остальное нет (и пройти нельзя). Решётка железная, короче.

Что нельзя пожелать из ландшафта:
  • Стены
  • Двери;
  • Перекидные мосты (drawbridge);
  • Всё остальное
Чего не следует желать в режиме волшебника?
Нет, вы можете это пожелать, но оно будет лишь засорять инвентарь. Если эксперименты касаются именно следующих объектов, то всё нормально.
  • Potion of gain level. Для изменения уровня есть #levelchange (см. 3.4.2.1), для телепортации -- Ctrl+V.
  • Любую еду. В wizard mode можно всегда успешно молиться, а также не умереть от голода путём отказа от смерти. Если вы много телепортируетесь, то еду всё же лучше заказать;
  • Eye of Aethiopica ради телепортации. Вы можете телепортироваться сразу в нужную ветвь при помощи Ctrl+V. Ради регенерации маны его, так и быть, пожелать можно;
  • Оружие, зачарованное более, чем на +50. Им никого не убьёшь из-за переполнения внутренних представлений чисел;
  • Любые другие предметы, которые дублируют возможности wizard mode
3.4.2 Команды, вызываемые через расширенное меню (#)
Излишне указывать, что все команды не имеют параметров и работают в диалоговом режиме. Ввели команду, нажали Enter, ответили на вопрос (если надо). Команды, помеченные звёздочкой, имеют сугубо отладочное значение. Если вы не разработчик и не тестировщик модификаций NetHack, можете эти разделы пропустить.

3.4.2.1 #levelchange
Команда вызывает немедленное изменение уровня персонажей до нужного. Нельзя задать уровень меньше 1 и больше 30. Хода не расходует.

3.4.2.2 * #lightsource
Выдаёт список динамических источников света. Хода не рсаходует. Например:
Mobile light sources: hero @ ( 8,17)

location range flags type id
-------- ----- ------ ---- -------
8,15 1 0x0001 obj 00C95A38
8,16 1 0x0001 mon 00C95978

Первый источник света -- сам персонаж -- это указано. Второй -- зажжённый potion of oil (первая строка таблицы). Третий -- монстр yellow light.
Первая колонка указывает место расположения источника (координаты x, y отсчитываются от левого верхнего края экрана из координаты (0,0))
Вторая колонка указывает на радиус источника света (в клетках).
Третья колонка -- флаги. Что точно значат -- не выяснил.
Четвёртая колонка -- obj для объектов и mon для монстров. Если светящийся монстр вы сами, то будет указано you.
Пятая колонка -- адрес источника света в памяти.

3.4.2.3 #monpolycontrol
Эта команда переключает режим контроля полиморфа окружающих вас монстров. Если опция выключена, всё работает как обычно. Если включена, то когда монстр пытается превратиться во что-нибудь, вас спросят, во что ему следует превратиться. Имя монстра следует писать целиком, допустим, вместо "mimic" надо писать "large mimic". Если вы работаете с doppelganger или другим монстром, эта опция может вам надоесть, т.к. превращаться он будет чуть ли не каждый ход. Хода не расходует.

3.4.2.4 * #panic
Эта команда вызывает немедленное падение программы. Для теста. Правда перед падением вас спросят подтверждения.

3.4.2.5 #polyself
Работает так же, как и wand of polymorph совмещённое с ring of polymorph control. После вызова вас спросят, в кого вы хотите превратиться. Надо написать имя монстра целиком. Действуют обычные правила и ограничения.

3.4.2.6 * #seenv
Показ карты уровня (вектора "увидено"): что вы видели, а что вы не видели и с какой стороны. Тяжело объяснить это своими словами, поэтому приведу перевод объяснения из исходного текста:
"Значения вектора "увидено". Вектор "увидено" -- массив из восьми бит, каждый из которых характеризует одно из восьми направлений с центром в точке x:

0 1 2

7 x 3

6 5 4



[младший бит -- 0, старший -- 7 -- прим. zHz]
В случае со стенами, одна клетка со стеной может быть осмотрена с восьми возможных направлений. Если мы знаем тип стены и направления, с которых она уже была увидена, мы можем определить, как она выглядит с точки зрения персонажа."

Таким образом, значение вектора "осмотрено" в каждой точке -- две шестнадцатеричные цифры (и, таким образом, они занимают два символа на экране). Сам персонаж отображается как "@@". Вокруг него режимы всех клеток, который он видел хотя бы с одной стороны. Для всех остальных клеток отображается пустой символ.
Шестнадцатеричные значения, соответствующие каждой стороне:

Таблица 3. Соответствие значений битов направлениям вектора "осмотрено".
Направление (номер бита) Значение бита
0 0x01
1 0x02
2 0x04
3 0x08
4 0x10
5 0x20
6 0x40
7 0x80

Значения складываются. Допустим, если клетка была видена персонажем со сторон 2 и 3, то в ней будет значение 0x08+0x04=0x0C (шестнадцатеричная арифметика)

Если вы сделали magic mapping, то все клетки устанавливаются в 0xFF.

3.4.2.7 * #stats
Отображает таблицу статистики расхода динамической памяти. Например:
Current memory statistics:

Objects, size 64

count bytes
invent 48 3082
fobj 62 3968
buried 6 384
migrating obj 0 0
minvent 9 576
migrating minvent 0 0
contained 1 64
------------------ ----- ------
Total 126 8074


Monsters, size 100

fmon 12 4508
migrating 0 0
------------------ ----- ------
Total 12 4508


Первая колонка -- тип сущности, вторая -- число сущностей, третья -- число байт. Первый раздел посвящён объектам, второй -- монстрам. О типах сущностей писать не буду, подробнее с ними можно ознакомиться в файле cmd.c, строчка 1704 и ниже.

3.4.2.8 #timeout
Отображение списка объектов с ограниченным временем существования. Чаще всего -- трупов. Пример:

Current time = 2063.

Active timeout queue:

timeout id kind call
2066 68 object revive_mon(00C9BDE0)
2167 64 object burn_object(00AEF018)
2202 65 object hatch_egg(00AE9678)
2209 66 object hatch_egg(00C9BD28)
2288 63 object rot_corpse(00AEEFA8)
2406 69 object rot_organic(00C9BE50)
10399 70 object fig_transform(00C9BF38)


В первой строке выводится текущее время (для ориентировки). Далее -- список объектов.
Первая колонка обозначает момент, в который произойдёт событие с объектом.
Вторая -- идентификационный номер объекта.
Третья -- с чем имеем дело. По-видимому, тут всегда object, т.к. в списке возможных функций все функции работают с объектами, а не с монстрами. Этот вопрос требует дальнейшего изучения.
Четвёртая -- ЧТО произойдёт (и в скобках адрес объекта).

Что может произойти с объектом? Об этом можно понять по колонке call. Далее приведена таблица: что и с чем происходит:

Таблица 4. Действия, происходящие по таймауту.
Функция Что происходит С чем
revive_mon Возрождение трупа Возрождающиеся монстры
(например, тролли)
burn_object Догорание Объекты, которые пропадают,
когда догорят (например, свечи)
hatch_egg Вылупление Яйца (если яйцо принадлежит какому-либо монстру)
rot_corpse Протухание Трупы (кроме возрождающихся)
rot_organic Протухание Закопанные вещи из органических
материалов (например, мешки (sack))
fig_transform Оживление Фигурки (figurine), но только
проклятые и только в инвентаре.

Если в списке нет ни одного объекта, будет написано .

3.4.2.9 * #vision
Показывает, что видно из текущей точки. Текущая точка обозначена символом @.
Каждая клетка поля представлена числом от 0 до 7 (0 отображается как пусткая клетка).
Для формирования значения используются следующий значения:

Таблица 5. Биты, формирующие значение видимости клетки.
Номер бита Значение бита Режим видимости
0 1 Потенциальная видимость
(клетка может быть увидена,
если будет освещена, либо если
персонаж перестанет быть слепым)
1 2 Реальная видимость
(персонаж видит клетку)
2 4 Наличие освещения
(клетка освещена лампой либо
иным предметом; постоянное освещение
комнат не считается)

Значения в каждой клетке складываются. Если вы видите клетку, она в тёмном коридоре, но освещена свечой, то в клетке будет значение 1+2+4=7.
Для того, чтобы определить режим видимости, число необходимо перевести в двоичную систему счисления и посмотреть, какие биты установлены. Перевести число можно при помощи калькулятора в Windows.

3.4.2.10 * #wmode
Показывает режимы стен. Очень замутная штука.
Ниже приведена таблица, показывающая, какой символ что обозначает.

Таблица 6. Значение символов при отображении режима стен.
Символ Значение
@ Персонаж (текущая клетка)
x Пусто (глухая стена в середине карты)
. Пол в зале (отсутствие стены посреди комнаты)
# Коридор
Число См. ниже

Число в клетке на поле обозначает собственно режим стены. Что такое режим стены? Это указание на то, с какой стороны стена "отделана", а с какой -- нет. Допустим, стена в зале размером 3 на 6 со стороны внутренностей зала отделана, а со стороны внешнего камня -- нет.
Ниже приводится таблица с обозначением того, что значит то или иное число для разных компоновок стен.
Указывается область, которая заполнена камнем (т.е. "Ничего" указывает, что ничего не заполнено камнем, т.е. стена со всех сторон "отделана", "облицована").
Стены бывают четырёх типов: прямая, угловая, буквой Т и крестовая. Примеры различных стен в разных режимах приведены под таблицей (примеры взяты из исходного текста игры, файл rm.h, строка 345 и далее).

Таблица 7. Значения режима стен для различных типов стен.
Число режима Прямая стена Угловая стена Стена буквой Т* Крестовая стена
0 Ничего Ничего Ничего Ничего
1 Слева/Сверху Снаружи угла Сверху Сверху слева
2 Справа/Снизу Внутри угла Снизу слева Сверху Справа
3 - - Снизу справа Снизу слева
4 - - - Снизу слева
5 - - - Сверху слева и
снизу справа
6 - - - Снизу слева и
сверху справа

* Заполненность приведена для стены в виде прямой буквы Т. Если стена повёрнута, то заполненную область следует повернуть вокруг центра буквы Т на столько же, насколько следует повернуть саму букву Т, чтобы получить стену в нужном виде (см. пример ниже).

Если у крестовой стены занято камнем и слева снизу и справа снизу -- это уже просто не крестовая стена.

Примеры:
F -- облицованная стена, R -- порода.
Прямая стена, режим 1:
RRR
---
FFF


Угловая стена, режим 2:
FFF
F+-
F|R


Стена буквой Т, режим 3:
F|F
-+F
R|F


Крестовая стена, режим 5:
R|F
-+-
F|R


3.4.3 Утерянные команды режима волшебника
Следующие команды могут быть включены, если перекомпилировать NetHack с правильными опциями. Ручаться за правильность понимания, что они делают, я не могу.
Макроопределения из первой колонки должны быть определены в файле ntconf.h. Допустим, чтобы включить макроопределение ABCTEST, надо написать в файле где-нибудь (если не понимаете, как это работает, напишите после строки #define NTCONF_H) следующую строчку:
#define ABCTEST

и пересобрать игру.
Таблица 8. Утерянные команды режима волшебника.
Макроопределение Команда Что делает
DEBUG_MIGRATING_MONS #migratemons Приводит на уровень заданное число случайных монстров. Число монстров задаётся с клавиатуры.
PORT_DEBUG #portdebug Отладка примочек, специфичных для реализации. Под каждую ОС/версию (текстовая, графическая) тут будет что-то своё.
DEBUG #wizdebug Закапывает все объекты на клетке игрока и вокруг (итого 9 клеток). По-видимому, может быть несколько функций под этим именем, и каждый раз надо при компиляции выбирать, какая нужна. Однако в исходниках есть только одна функция. Эта.

3.5 Элементы геймплея, присутствующие в обычной игре, но имеющие особенности в режиме волшебника
Особенности, касающиеся тех функций геймплея, для которых есть специальные команды в режиме волшебника, описаны в разделе 3.4.

3.5.1 Смерть
Как и в режиме исследования (см. п. 2.1) смерть невозможна без согласия игрока. Вас спросят в любом случае, хотите ли вы умереть. И вы умрёте, только если согласитесь. При этом амулет спасения жизни работает обычным образом -- если смерть возможно предотвратить при помощи него, он израсходуется. Отказаться можно даже от смерти в результате геноцида себя самого (@).

3.5.2 Файл с сохранением
Вы можете сохранить файл с сохранением после загрузки (на вопрос "Do you want to keep the save file? [yn](n)" надо ответить "y"). При этом, если вы с существующим файлом сохранения решите сохраниться ещё раз, получите дополнительный запрос о перезаписи -- в смысле, вас спросят, перезаписать файл или нет ("Overwrite the old file? [yn](n)"; "y" -- перезаписать). Если вы откажетесь от перезаписи ("n"), игра продолжится в обычном режиме.

3.5.3 Показ атрибутов
Работает точно так же, как и в режиме исследования (см. п. 2.2, 2-й пункт в списке)
Кроме возможности посмотреть все атрибуты, вам будет выведено численное значение:
  • Удачи;
  • Уровня веры (alignment record);
  • Времени до следующей молитвы (если сейчас молиться нельзя;
  • Гнева бога (если есть);
  • Числа ходов до возврата в основную форму/выплёвывания монстром, который вас поглотил.

Кроме того, выводится состояние раненности ног (wounded legs) питомца, на котором вы едете.

3.5.4 Телепортация
Работает всегда (но ограничение, связанное с ношением настоящего Амулета Йендора всё-таки накладывается), причём телепортация всегда контролируемая (можно выбрать место, куда телепортироваться). Единственный способ произвести неконтролируемую телепортацию -- выбрать место, куда телепортироваться заведомо нельзя, например, левый верхний угол карты. За телепортацию снимают 20 очков маны, как обычно при вызове телепортации через это сочетание клавиш (если маны осталось меньше, забирается вся). Отличие в том, что эта телепортация работает всегда, даже если способности к телепортации нет, даже если уровень запрещён для телепортации, даже если маны не осталось сосвсем. Голод возникает точно так же, как и при обычной телепортации по Ctrl+T.

3.5.5 Молитва
В отличие от обычной игры, тут всегда можно успешно помолиться (но, как выяснилось, в Геенне молиться нельзя всё равно!). Когда вы собираетесь молиться, вас спросят, заставить ли бога быть довольным ("Force the gods to be pleased? [yn](n)")? Если вы ответите "y", молитва будет успешной. Если ответить "n", молитва пройдёт в обычном режиме.
Принудительно успешная молитва, кроме того:
  • Зануляет время до следующей молитвы (ПЕРЕД молитвой; после молитвы время снова ненулевое);
  • Отрицательную удачу доводит до нуля;
  • Если ваш уровень веры меньше, либо равен нулю, он становится равен единице;
  • Уровень гнева бога становится равен нулю;
  • Закрывает глаза бога на остальные ваши недочёты.


3.5.6 Навыки
В отличие от обычной игры, навыки можно прокачивать произвольным образом, даже если вы его не применили успешно необходимое число раз. Когда вы задействуете команду #enchance, вас спросят, хотите ли вы прокачать навыки без их развития ("Advance skills without practice?[yn](n)"). Если вы ответите "y", то сможете прокачать навык до максимума. Ограничения, присущие роли/текущему положению, остаются. Кроме того, в этом меню отображается справа для каждого навыка два числа. Первое -- число успешных применений, второе (в скобках) -- сколько применений надо до следующего уровня.

Если вы выбрали не развивать навыки без практики, то в заголовке меню будет выведено число слотов для расширения навыков, которое у вас осталось.

3.5.7 Геноцид
Геноцид работает как обычно за одним исключением: если вы прочли святой свиток геноцида и в качестве ответа на вопрос, что вы хотите геноцидить (What class of monsters do you wish to genocide?), ответите "*", на уровне пропадут все монстры, кроме вас (включая вашего котёнка... постойте, он ещё с вами?!). Трупы и инвентарь монстры не оставляют.

3.5.7 Кости (bones)
Отличие костей в режиме волшебника:
  • Когда вы умираете, вас спрашивают, сохранить кости или нет ("Save bones?[yn](n)"; "y" -- сохранить, "n" -- нет). Это относится только к смерти, если вы нажмёте "выход" (#quit), кости не сохранятся;
  • Когда вы заходите на уровень с костями, вас спрашивают, загружать кости или играть как обычно? ("Get bones?[yn](n)"). Можно отказаться от костей -- "n";
  • Если вы всё же захотели воспользоваться костями, то у вас будет выбор, оставить файл с костями ("n") или удалить ("y") (вопрос "Unlink bones?[yn](n)");
  • Можно сохранить кости на уровнях 1-3.


3.5.8 Наличие/отсутствие различных уровней
В отличие от обычной игры, следующие уровни появляются с вероятностью 100%:
  • Большая комната (big room) -- в обычной игре вероятность появления 40%;
  • Форт Луидос (Ford Luidos) -- вход расположен в первой возможной сокровищнице, а не в случайной.


3.5.9 Дополнительные ограничения (conduct, voluntary challange)
Кроме обычного списка всё ещё выполненных ограничений, а также числа загаданных желаний и числа сгеноциденных монстров, также выводится:
  • Сколько раз вы воспользовались оружием;
  • Сколько раз вы писали и читали;
  • Сколько раз вы превращались;
  • Сколько раз вы превращали объекты (превращения монстров не учитываются).


3.5.10 Допуск к квесту
Если единственная причина недопуска к квесту -- недостаточный уровень веры, вам будет предложено временно повысить его. Однако если он будет превышать максимальный уровень, возможный на данный момент времени, после любого действия, его изменяющего, он уменьшится до максимально возможного значения.

3.5.11 Фонтаны
Если выходит, что фонтан должен высохнуть (The fountain dries up!), то вместо высыхания вам выводится предупреждение (Dry up the fountain?[yn](n)). Если ответить "n", фонтан сохранится.
3.5.12 Езда верхом
Вы всегда можете успешно залезть на лошадь, если ответите "y" в ответ на вопрос "Force the mount to succeed?[yn](n)". Но седло всё-таки понадобится.

3.6 Элементы геймплея, отсутствующие в обычной игре (кроме специальных команд; команды описаны в п. 3.4)
Пункты 3.6.1-3.6.3 касаются в том числе "переменных окружения". Если вы не знаете, что это такое, но хотите использовать описанные возможности, добавьте в скрипт/командный файл, через который вы вызываете режим волшебника, строки вида:
set ИМЯ_ПЕРЕМЕННОЙ=ЗНАЧЕНИЕ
Это будет работать в Windows.
В Linux/Mac OS X (последнее -- предположительно) следует написать
export ИМЯ_ПЕРЕМЕННОЙ=ЗНАЧЕНИЕ

3.6.1 Wizard kit -- набор волшебника
При игре в режиме волшебника есть возможность при старте игры заказать весь необходимый инвентарь. Для этого необходимо задать значение переменной окружения WIZKIT -- в неё необходимо поместить имя текстового файла. Также можно указать это имя в файле опций defaults.nh (с тем же именем; например, дописать в конец: WIZKIT=wizkit.txt). При этом значение переменной окружения "перебивает" файл настроек.
В этом файле необходимо указать всё то, что вы хотите получить в инвентарь, кроме того, что ваша роль получает по умолчанию. В файле может быть максимум 128 строк. Каждая строка должна выглядеть так, будто вы загадываете ей желание (на самом деле эти строчки и обрабатываются функцией исполнения желаний).
При начале новой игры (и только в этом случае) всё из этого файла окажется у вас в инвентаре.

3.6.2 Заказ нужных вариаций уровней
Значение переменной окружения SPLEVTYPE определяет, которая из нескольких вариаций уровня будет находиться в игре. Если уровень чисто случайный или у него только один вариант, переменная не работает. Формат: "имя_уровня1-число,имя_уровня2-число,.." (пример: "bigrm-1,medusa-2,soko4-1". В таблице ниже приведены уровни, которые можно изменять.
Примечание. Нумерация уровней Сокобана в Википедии и внутри игры не совпадает. Этим вызвано то, что внутриигровой уровень soko4-1 соответствует в википедии уровню 1b. Ссылки приведены правильные. На них и следует ориентироваться.

Таблица 9. Возможные вариации уровней.
Имя уровня Описание Номер вариации Соответствие (ссылка)
bigrm Большая комната 1 Простая квадратная
(nethackwiki.com/Big_Room#Big_Room_.231)
bigrm Большая комната 2 Наполовину тёмная
(nethackwiki.com/Big_Room#Big_Room_.232)
bigrm Большая комната 3 С колоннами
(nethackwiki.com/Big_Room#Big_Room_.233)
bigrm Большая комната 4 С фонтанами
(nethackwiki.com/Big_Room#Big_Room_.234)
bigrm Большая комната 5 Круглая
(nethackwiki.com/Big_Room#Big_Room_.235)
medusa Медуза 1 С одной постройкой
(nethackwiki.com/wiki/Medusa%27s_Island#First_ve...)
medusa Медуза 2 С несколькими постройками
(nethackwiki.com/wiki/Medusa%27s_Island#Second_v...)
minetn Город в шахтах 1 Крепость
(nethackwiki.com/wiki/Minetown#Frontier_Town)
minetn Город в шахтах 2 Площадь
(nethackwiki.com/wiki/Minetown#Town_Square)
minetn Город в шахтах 3 Переулки
(nethackwiki.com/wiki/Minetown#Alley_Town)
minetn Город в шахтах 4 Колледж
(nethackwiki.com/wiki/Minetown#College_Town)
minetn Город в шахтах 5 Грот
(nethackwiki.com/wiki/Minetown#Grotto_Town)
minetn Город в шахтах 6 С деревьями
(nethackwiki.com/wiki/Minetown#Bustling_Town)
minetn Город в шахтах 7 Базар
(nethackwiki.com/wiki/Minetown#Bazaar_Town)
minend Конец шахт 1 Мимики
(nethackwiki.com/wiki/Mine%27s_End#The_Mimic_of_...)
minend Конец шахт 2 Винный погреб
(nethackwiki.com/wiki/Mine%27s_End#The_Gnome_Kin...)
minend Конец шахт 3 Катакомбы
(nethackwiki.com/wiki/Mine%27s_End#The_Catacombs)
soko1 Сокобан-4
(высший)
1 С сумкой для переноски (bag of holding)
(nethackwiki.com/wiki/Sokoban_Level_4a)
soko1 Сокобан-4
(высший)
2 С амулетом отражения (amulet of reflection)
(nethackwiki.com/wiki/Sokoban_Level_4b)
soko2 Сокобан-3 1 nethackwiki.com/wiki/Sokoban_Level_3b
soko2 Сокобан-3 2 nethackwiki.com/wiki/Sokoban_Level_3a
soko3 Сокобан-2 1 nethackwiki.com/wiki/Sokoban_Level_2b
soko3 Сокобан-2 2 nethackwiki.com/wiki/Sokoban_Level_2a
soko4 Сокобан-1
(низший)
1 nethackwiki.com/wiki/Sokoban_Level_1b
soko4 Сокобан-1
(низший)
2 nethackwiki.com/wiki/Sokoban_Level_1a

3.6.3 Заказ нужных специальных комнат.
Задав значение переменной окружения SHOPTYPE, можно добиться генерации комнаты заданного специального типа на каждом случайно генерируемом уровне подземелья. Это не относится к Геенне. Это не относится и к случайным уровням в Квесте и в шахтах.
В переменной окружения проверяется только первый символ. Чтобы задать значение переменной, нужно открыть окно командной строки в той папке, где у вас NetHack, после чего написать set SHOPTYPE=A (и нажать Enter). Вместо "A" нужно подставить нужное значение из таблицы, приведённой ниже.
Примечание 1. Генерация комнаты происходит только на ещё не сгенерированных уровнях. Если вы уже были на уровне, он не изменится.
Примечание 2. По ходу игры можно менять значение переменной, тогда тип специальной комнаты будет меняться. К примеру, заказали храм, спустились ниже -- вот он, храм. Сохранились, сменили значение переменной на "обычный магазин", зашли, спустились ещё ниже -- вот вам обычный магазин.
Примечание 3. Заглавные и строчные буквы не различаются.
Примечание 4. Сгенерировать магазин со свечками таким образом нельзя. Сокровищницу (vault), кажется, тоже (данный вопрос требует дальнейшего изучения).
Примечание 5. Если игра не смогла по вашей переменной определить тип магазина, будет создан случайный магазин.

Таблица 10. Значение переменной SHOPTYPE для различных типов специальных комнат
Значение
переменной
Тип комнаты Тип магазина Ссылка на описание
ZЗоопарк-nethackwiki.com/Special_room#Treasure_zoo
MКладбище-nethackwiki.com/Special_room#Graveyard
BПчелиный улей-nethackwiki.com/Special_room#Beehive
T (\)Тронный зал-nethackwiki.com/Special_room#Throne_rooms
SБараки-nethackwiki.com/Special_room#Barracks
AМуравьиное гнездо-nethackwiki.com/Special_room#Anthole
CГнездо василисков-nethackwiki.com/Special_room#Cockatrice_Nest
LЗал лепреконов-nethackwiki.com/Special_room#Leprechaun_hall
_Храм-nethackwiki.com/Special_room#Temples
}Болото-nethackwiki.com/Special_room#Swamp
GМагазинОбычный (general store)nethackwiki.com/Shop#Table_of_shops
(далее то же самое)
[МагазинБроня (used armor dealership)-"-
?МагазинКниги, свитки
(second-hand
bookstore)
-"-
!МагазинЗелья (liquor emporium)-"-
)МагазинОружие (antique
weapons outlet)
-"-
%МагазинЕда (delicatessen)-"-
=МагазинКольца (jewelers)-"-
/МагазинВолшебные палочки
(quality apparel
and accessories)
-"-
(МагазинИнструменты (hardware store)-"-
+МагазинКниги (rare books)-"-


4 Советы по манипуляциям с персонажем в режиме волшебника

4.1 Общие советы
1. К сожалению, напрямую задать значения атрибутов нельзя. Но можно комбинировать potion of sickness/potion of gain ability до тех пор, пока соотношение атрибутов не станет приемлемым.
2. Чтобы всегда иметь достаточно маны, закажите себе Eye of Aethiopica. Однако, при серьёзных магических экспериментах, он может не успевать за вами. Тогда вам помогут 100 blessed scrolls of charging, если читать их растерянным (confused). Простейший способ получить растерянность в один ход -- potion of confusion. Не забудьте потом применить unicorn horn
3. Получить нужное число маны/здоровья можно при помощи potions of gain energy/potions of full healing соответственно.
4. Манипуляция удачей. Пожелайте себе luckstone. Пожелайте алтарь и 10 трупов Xan, к примеру. После жертвы каждого из них, нажимайте Ctrl+X и смотрите на втором экране удачу. Если стало слишком много, пожелайте себе зеркало и разбейте его (-2). В принципе, так можно получить любую удачу от -13 до +13.
5. Волшебные палочки всегда желайте (0:127). Не заряжайте израсходованные -- заказывайте новые!
6. Поскольку вы находитесь в тестовом режиме, ваш уровень веры (alignment record) может принимать странные значения (в том числе, отрицательные). На практике это значит, что крайне не рекомендуется приносить жертвы на чужих алтарях, чтобы их переделать в свои. Вы сами можете случайно сменить вероисповедание. А даже в режиме волшебника поменять вероисповедание больше одного раза нельзя. Это, в принципе, не проблема, т.к. вы всё равно можете телепортироваться в нужный уровень квеста и никакой квест-лидер вам не указ (в обычной игре квест-лидер не даёт выполнять квест, если вы сменили вероисповедание). Более того, артефакты призыва (и даже сам амулет Йендора) может быть заказан через желание. Но всё равно неприятно. Лучше пожелайте себе алтарь своего вероисповедания и развлекайтесь с ним. Или перед жертвой проверьте свой уровень веры (Ctrl+X, Enter).
7. Если ваши эксперименты связаны с телепортацией, вы станете очень голодным. Можно конечно раз за разом умирать и воскресать, но это приведёт к выводу целого ряда ненужных сообщений. Лучше заранее пожелать себе 50 lembas wafer или 50 K-rations. И есть по мере необходимости.

4.2 Как получить внутренние свойства (intrisic)
Ниже приведена таблица: что желать, чтобы максимально эффективно получить то или иное внутреннее свойство.

Таблица 11. Типичные желания для приобретения внутренних свойства (intrisic)
Свойство Что желать
Телепатия (telepathy) blessed tin of floating eye meat
Видеть невидимое (see invisible) blessed potion of see invisible
Защита от ядов (poison resistance) blessed tin of green dragon meat
Защита от дезинтеграции (disintegration resistance) blessed tin of black dragon meat
Защита от молнии (shock resistance) blessed tin of blue dragon meat
Защита от огня (fire resistance) blessed tin of red dragon meat
Защита от холода (cold resistance) blessed tin of white dragon meat
Защита от сонливости (sleep resistance) blessed tin of organge dragon meat
Болезнь телепортации (could teleport),
контроль телепорта (teleport control)
не требуется; это и так есть -- всегда
Разборчивость в еде (could recognize detrimental food) blessed scroll of food detection
Невидимость (invisible to others) wand of make invisible
Скорость (fast) wand of speed monster

Остальные свойства зависят не от съеденного/применённого, а от используемых предметов. Их я здесь не перечисляю.

5 Использованные источники

В случае, если когда-либо nethackwiki перестанет работать, её материалы можно найти в Архиве Интернета: web.archive.org/
Связаться с автором можно по адресу mailto:zhz00@rambler.ru .

@темы: Статьи, Игры, NetHack