Wizard mode в Nethack
© zHz, Источник: http://zhz00.diary.ru/p194493970.htm
Рано или поздно игроки в NetHack сталкиваются с трудностями при прохождении. При этом трудности бывают связаны с отсутствием глубокого понимания игровой механики и невозможностью повторно обыграть одну и ту же ситуацию (причём последнее мешает накоплению опыта). Более того, ситуации зачастую повторяются, но в несколько иных обстоятельствах. Вспомните, сколько раз вы умирали от укуса гигантских муравьёв (giant ants). С целью предоставления игрокам возможности ускоренного накопления опыта игры, самой игрой предлагается документированный режим исследования (explore mode). Однако есть другой, более мощный механизм взаимодействия с миром NetHack, открывающий практически безграничные возможности по экспериментированию. Это режим «волшебника» (wizard mode), предназначенный для отладки игры.
Несмотря на то, что статья посвящена не этому режиму, обходить стороной его не следует. Режим исследования предоставляет игроку несколько функций, дающих ему возможность практически гарантированно пройти игру (кроме случаев игровой непроходимости).
Войти в этот режим можно двумя способами:
Выход из режима исследования невозможен. Результаты, полученные в режиме исследования, не учитываются в таблице рекордов (хранится в файле nhrecord), но учитываются в таблице сыгранных игр (хранится в файле logfile).
Перечислим их:
Все функции, имеющиеся в режиме исследования, присутствуют и в режиме волшебника. Но собственных функций гораздо больше.
Для входа в режим волшебника, необходимо вызвать игру со следующими параметрами:
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
Перечислим возможности режима волшебника. Все функции доступны в любой момент независимо от обстоятельств. То есть, к примеру, загадывание желания возможно даже при отсутствии палочки желаний, когда вы стоите один посреди комнаты и у вас в руках ничего нет.
Также есть ряд возможностей, которые могут пригодиться только при отладке:
Ниже в виде таблицы представлены команды, которые можно подавать игре.
Таблица 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 | просмотр режима стен |
Работает точно так же, как и wand of secret door detection/заклинание detect unseen. Хода не забирает.
Работает точно так же, как и scroll of magic mapping/заклинание magic mapping. Работает даже на тех уровнях, которые обычные средства не показывают. Хода не забирает.
Вам задаётся вопрос, какого монстра вы хотите создать. Можно задать любого монстра, в т.ч. уникального (например, Death). Монстр появится рядом с вами. Если рядом с вами места нет, он появится в ближайшем доступном для вас месте. Ход на это не расходуется. Можно последовательным вызовом создать несколько уникальных монстров. Для монстров можно явно задавать статус враждебности — tame (ручной), peaceful (мирный) или hostile (враждебный). Другие способы создания монстра (волшебная палочка, свиток, заклинание) также выдают вопросы о типе монстра. Чтобы сделать случайного монстра, надо нажать Escape. Кот в мешке (bag of tricks) создаёт случайного монстра не задавая вопросов. Ответьте «]», чтобы созданный монстр был случайным, но типичным для данного уровня.
Работает как scroll of identify, когда он опознаёт весь инвентарь. Хода не тратит.
На экране появляется список всех специальных уровней и места, где происходит соединение ветвей. Чем объяснять, как это себя ведёт, проще показать пример (с комментариями):
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) соответственно.
Работает, как cursed scroll of teleportation или аналоги. Спрашивает, на какой уровень телепортироваться, как всегда бывает при контролируемой телепортации. В качестве ответа можно ввести «?» и нажать Enter. Тогда появится раскладка игры, как по Ctrl+O, где можно будет выбрать, куда переместиться. Хода не забирает. Иногда не работает – почему, не выяснил. Требуется дальнейшее изучение.
Нельзя телепортироваться ниже Долины Мёртвых (Valley of the dead) путём ввода уровня. Но через меню — можно. Нельзя телепортироваться, когда вы уже в Endgame.
Загадать желание можно в любой момент, не расходуя ход. При этом увеличивается время до следующей молитвы. Загадывать можно любые объекты с заданными характеристиками в относительно неограниченном количестве.
Какие характеристики вещи можно задать?
Это как обычно. Кроме того, можно указать:
Какие вещи можно загадать, кроме тех, что обычно?
Всё.
Что по-прежнему заказать нельзя?
Что можно заказать, кроме предметов? Различные элементы ландшафта. Элемент появится на той клетке, где вы стоите. Это включает в себя:
Что нельзя пожелать из ландшафта:
Чего не следует желать в режиме волшебника?
Нет, вы можете это пожелать, но оно будет лишь засорять инвентарь. Если эксперименты касаются именно следующих объектов, то всё нормально.
Излишне указывать, что все команды не имеют параметров и работают в диалоговом режиме. Ввели команду, нажали Enter, ответили на вопрос (если надо). Команды, помеченные звёздочкой, имеют сугубо отладочное значение. Если вы не разработчик и не тестировщик модификаций NetHack, можете эти разделы пропустить.
Команда вызывает немедленное изменение уровня персонажей до нужного. Нельзя задать уровень меньше 1 и больше 30. Хода не расходует.
Выдаёт список динамических источников света. Хода не расходует. Например:
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.
Пятая колонка – адрес источника света в памяти.
Эта команда переключает режим контроля полиморфа окружающих вас монстров. Если опция выключена, всё работает как обычно. Если включена, то когда монстр пытается превратиться во что-нибудь, вас спросят, во что ему следует превратиться. Имя монстра следует писать целиком, допустим, вместо «mimic» надо писать «large mimic». Если вы работаете с doppelganger или другим монстром, эта опция может вам надоесть, т.к. превращаться он будет чуть ли не каждый ход. Хода не расходует.
Эта команда вызывает немедленное падение программы. Для теста. Правда перед падением вас спросят подтверждения.
Работает так же, как и wand of polymorph совмещённое с ring of polymorph control. После вызова вас спросят, в кого вы хотите превратиться. Надо написать имя монстра целиком. Действуют обычные правила и ограничения.
Показ карты уровня (вектора «увидено»): что вы видели, а что вы не видели и с какой стороны. Тяжело объяснить это своими словами, поэтому приведу перевод объяснения из исходного текста:
«Значения вектора «увидено». Вектор «увидено» – массив из восьми бит, каждый из которых характеризует одно из восьми направлений с центром в точке 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.
Отображает таблицу статистики расхода динамической памяти. Например:
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 и ниже.
Отображение списка объектов с ограниченным временем существования. Чаще всего – трупов. Пример:
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), но только проклятые и только в инвентаре. |
Если в списке нет ни одного объекта, будет написано <empty>.
Показывает, что видно из текущей точки. Текущая точка обозначена символом @.
Каждая клетка поля представлена числом от 0 до 7 (0 отображается как пусткая клетка).
Для формирования значения используются следующий значения:
Таблица 5. Биты, формирующие значение видимости клетки.
Номер бита | Значение бита | Режим видимости |
---|---|---|
0 | 1 | Потенциальная видимость (клетка может быть увидена, если будет освещена, либо если персонаж перестанет быть слепым) |
1 | 2 | Реальная видимость (персонаж видит клетку) |
2 | 4 | Наличие освещения (клетка освещена лампой либо иным предметом; постоянное освещение комнат не считается) |
Значения в каждой клетке складываются. Если вы видите клетку, она в тёмном коридоре, но освещена свечой, то в клетке будет значение 1+2+4=7.
Для того, чтобы определить режим видимости, число необходимо перевести в двоичную систему счисления и посмотреть, какие биты установлены. Перевести число можно при помощи калькулятора в Windows.
Показывает режимы стен. Очень замутная штука.
Ниже приведена таблица, показывающая, какой символ что обозначает.
Таблица 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
Следующие команды могут быть включены, если перекомпилировать NetHack с правильными опциями. Ручаться за правильность понимания, что они делают, я не могу.
Макроопределения из первой колонки должны быть определены в файле ntconf.h. Допустим, чтобы включить макроопределение ABCTEST, надо написать в файле где-нибудь (если не понимаете, как это работает, напишите после строки #define NTCONF_H) следующую строчку:
#define ABCTEST
и пересобрать игру.
Таблица 8. Утерянные команды режима волшебника.
Макроопределение | Команда | Что делает |
---|---|---|
DEBUG_MIGRATING_MONS | #migratemons | Приводит на уровень заданное число случайных монстров. Число монстров задаётся с клавиатуры. |
PORT_DEBUG | #portdebug | Отладка примочек, специфичных для реализации. Под каждую ОС/версию (текстовая, графическая) тут будет что-то своё. |
DEBUG | #wizdebug | Закапывает все объекты на клетке игрока и вокруг (итого 9 клеток). По-видимому, может быть несколько функций под этим именем, и каждый раз надо при компиляции выбирать, какая нужна. Однако в исходниках есть только одна функция. Эта. |
Особенности, касающиеся тех функций геймплея, для которых есть специальные команды в режиме волшебника, описаны в разделе 3.4.
Как и в режиме исследования (см. п. 2.1) смерть невозможна без согласия игрока. Вас спросят в любом случае, хотите ли вы умереть. И вы умрёте, только если согласитесь. При этом амулет спасения жизни работает обычным образом – если смерть возможно предотвратить при помощи него, он израсходуется. Отказаться можно даже от смерти в результате геноцида себя самого (@).
Вы можете сохранить файл с сохранением после загрузки (на вопрос «Do you want to keep the save file? [yn](n)» надо ответить «y»). При этом, если вы с существующим файлом сохранения решите сохраниться ещё раз, получите дополнительный запрос о перезаписи – в смысле, вас спросят, перезаписать файл или нет («Overwrite the old file? [yn](n)»; «y» – перезаписать). Если вы откажетесь от перезаписи («n»), игра продолжится в обычном режиме.
Работает точно так же, как и в режиме исследования (см. п. 2.2, 2-й пункт в списке)
Кроме возможности посмотреть все атрибуты, вам будет выведено численное значение:
Кроме того, выводится состояние раненности ног (wounded legs) питомца, на котором вы едете.
Работает всегда (но ограничение, связанное с ношением настоящего Амулета Йендора всё-таки накладывается), причём телепортация всегда контролируемая (можно выбрать место, куда телепортироваться). Единственный способ произвести неконтролируемую телепортацию – выбрать место, куда телепортироваться заведомо нельзя, например, левый верхний угол карты. За телепортацию снимают 20 очков маны, как обычно при вызове телепортации через это сочетание клавиш (если маны осталось меньше, забирается вся). Отличие в том, что эта телепортация работает всегда, даже если способности к телепортации нет, даже если уровень запрещён для телепортации, даже если маны не осталось совсем. Голод возникает точно так же, как и при обычной телепортации по Ctrl+T.
В отличие от обычной игры, тут всегда можно успешно помолиться (но, как выяснилось, в Геенне молиться нельзя всё равно!). Когда вы собираетесь молиться, вас спросят, заставить ли бога быть довольным («Force the gods to be pleased? [yn](n)»)? Если вы ответите «y», молитва будет успешной. Если ответить «n», молитва пройдёт в обычном режиме.
Принудительно успешная молитва, кроме того:
В отличие от обычной игры, навыки можно прокачивать произвольным образом, даже если вы его не применили успешно необходимое число раз. Когда вы задействуете команду #enchance, вас спросят, хотите ли вы прокачать навыки без их развития («Advance skills without practice?[yn](n)»). Если вы ответите «y»;, то сможете прокачать навык до максимума. Ограничения, присущие роли/текущему положению, остаются. Кроме того, в этом меню отображается справа для каждого навыка два числа. Первое – число успешных применений, второе (в скобках) – сколько применений надо до следующего уровня.
Если вы выбрали не развивать навыки без практики, то в заголовке меню будет выведено число слотов для расширения навыков, которое у вас осталось.
Геноцид работает как обычно за одним исключением: если вы прочли святой свиток геноцида и в качестве ответа на вопрос, что вы хотите геноцидить (What class of monsters do you wish to genocide?), ответите «*», на уровне пропадут все монстры, кроме вас (включая вашего котёнка… постойте, он ещё с вами?!). Трупы и инвентарь монстры не оставляют.
Отличие костей в режиме волшебника:
В отличие от обычной игры, следующие уровни появляются с вероятностью 100%:
Кроме обычного списка всё ещё выполненных ограничений, а также числа загаданных желаний и числа сгеноциденных монстров, также выводится:
Если единственная причина недопуска к квесту – недостаточный уровень веры, вам будет предложено временно повысить его. Однако если он будет превышать максимальный уровень, возможный на данный момент времени, после любого действия, его изменяющего, он уменьшится до максимально возможного значения.
Если выходит, что фонтан должен высохнуть (The fountain dries up!), то вместо высыхания вам выводится предупреждение (Dry up the fountain?[yn](n)). Если ответить «n», фонтан сохранится.
Вы всегда можете успешно залезть на лошадь, если ответите "y" в ответ на вопрос «Force the mount to succeed?[yn](n)». Но седло всё-таки понадобится.
Пункты 3.6.1-3.6.3 касаются в том числе «переменных окружения». Если вы не знаете, что это такое, но хотите использовать описанные возможности, добавьте в скрипт/командный файл, через который вы вызываете режим волшебника, строки вида:
set ИМЯ_ПЕРЕМЕННОЙ=ЗНАЧЕНИЕ Это будет работать в Windows.
В Linux/Mac OS X (последнее – предположительно) следует написать:
export ИМЯ_ПЕРЕМЕННОЙ=ЗНАЧЕНИЕ
При игре в режиме волшебника есть возможность при старте игры заказать весь необходимый инвентарь. Для этого необходимо задать значение переменной окружения WIZKIT – в неё необходимо поместить имя текстового файла. Также можно указать это имя в файле опций defaults.nh (с тем же именем; например, дописать в конец: WIZKIT=wizkit.txt). При этом значение переменной окружения «перебивает» файл настроек.
В этом файле необходимо указать всё то, что вы хотите получить в инвентарь, кроме того, что ваша роль получает по умолчанию. В файле может быть максимум 128 строк. Каждая строка должна выглядеть так, будто вы загадываете ей желание (на самом деле эти строчки и обрабатываются функцией исполнения желаний).
При начале новой игры (и только в этом случае) всё из этого файла окажется у вас в инвентаре.
Значение переменной окружения SPLEVTYPE определяет, которая из нескольких вариаций уровня будет находиться в игре. Если уровень чисто случайный или у него только один вариант, переменная не работает. Формат: «имя_уровня1-число,имя_уровня2-число,..» (пример: «bigrm-1,medusa-2,soko4-1». В таблице ниже приведены уровни, которые можно изменять.
Примечание. Нумерация уровней Сокобана в Википедии и внутри игры не совпадает. Этим вызвано то, что внутриигровой уровень soko4-1 соответствует в википедии уровню 1b. Ссылки приведены правильные. На них и следует ориентироваться.
Таблица 9. Возможные вариации уровней.
Задав значение переменной окружения 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 |
} | Болото | - | 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) | -″- |
Ниже приведена таблица: что желать, чтобы максимально эффективно получить то или иное внутреннее свойство.
Таблица 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 |
Остальные свойства зависят не от съеденного/применённого, а от используемых предметов. Их я здесь не перечисляю.
В случае, если когда-либо nethackwiki перестанет работать, её материалы можно найти в Архиве Интернета: web.archive.org
Связаться с автором можно по адресу zhz00@rambler.ru.