ЧАСТЬ 6 - РУКОВОДСТВО ПО ВЗЛОМУ
DOOMDARKS REVENGE
Игры Lords of Midnight и её сиквел Doomdark's Revenge были в моём списке лучших игр с тех самых пор, как я впервые сыграл в них на своём старом добром 48к Spectrum с резиновыми клавишами. Даже по сегодняшним меркам они остаются одними из самых захватывающих компьютерных игр из когда-либо созданных — по крайней мере, для людей со стратегическим складом ума.
Сыграв и пройдя обе части несколько раз, я никак не мог понять, как Майку удалось запихнуть столько всего всего лишь в 41 килобайт. Поэтому я погрузился в код DR... У меня до сих пор сохранилось множество оригинальных (написанных от руки) листов, где я расшифровал большую часть Z80-кода этой игры. И что более важно (и, вероятно, полезно) — полный формат файла сохранения DR, а также несколько таблиц, необходимых для его понимания. Некоторое время назад я опубликовал это в comp.sys.sinclair, и множество людей заинтересовалось. По крайней мере, редактор карт (автор — Ян Капала [Jan Kapala], email KAPALA@ichn.ch.pwr.wroc.pl) основан на этой информации, и вы можете найти его на ftp.nvg.unit.no.
Даже сейчас я получаю запросы на эти таблицы, так что вот они... это оригинальная версия, которую я тогда опубликовал (с небольшими исправлениями, в основном орфографических ошибок), и я думаю, что в ней нет ошибок. Надеюсь, вы сочтёте это полезным.
КАРТА И ТАБЛИЦЫ DOOMDARK'S REVENGE
ПОСЕЛЕНИЯ И ПЕРСОНАЖИ
Пример: G Imgarorn: Крепость/Цитадель Имгарornа Великанского. Исключения указаны ниже.
I= Ледяной лорд (Icelord)G= Великан (Giant)D= Гном (Dwarf)B= Варвар (Barbarian)F= Фей (Fey)S= Особый (Special)
Все названия поселений создаются алгоритмически на основе карты. В верхнем левом углу карты зафиксировано зерно (seed), и игра рекурсивно отслеживает вашу позицию до этой точки, создавая уникальные имена (таблицы имён будут показаны позже) для каждой зоны (равнины, лес и т.д.). Цитадель или крепость выступают в качестве зоны, и название получают тем же способом. Существуют 128 таких поселений и 124 владельца. Первые 5 поселений являются особыми; их владелец — не тот персонаж, чьим именем называется поселение (как у всех остальных). Есть 5 персон, к которым применяется особый подход: Луксор Лунный Принц (Luxor the Moonprince), Моркин Свободный (Morkin the Free), Таритель Фейская (Tarithel the Fey), Рортрон Мудрый (Rorthron the Wise) и Шарет Похитительница Сердец (Shareth the Heartstealer). Шарет владеет городом Имириэль (City of Imiriel). Остальные четверо — чужеземцы.
Вот полная таблица персонажей:
0 S Luxor 32 I Berudrarg 64 D Torormarg 96 B Thorthak
1 S Morkin 33 I Imgudrur 65 I Ushangrane 97 F Thormand
2 S Tarithel 34 I Talorthane 66 I Fangrorn 98 B Anvorthun
3 S Rorthron 35 I Morangrim 67 I Carangresh 99 F Imgormand
4 S Shareth 36 G Obortharg 68 G Anvildrak 100 F Carorthorn
5 G Imgarorn 37 G Glortheon 69 I Anvarorn 101 B Imgorad
6 G Ingormad 38 I Ulfangruk 70 D Hagudril 102 F Tororthane
7 I Malisane 39 I Malarorn 71 G Ganigrorn 103 F Imorthorn
8 I Anvireon 40 I Ganormarg 72 D Berangrorn 104 F Berormorn
9 I Talormane 41 G Berorthim 73 G Fenorn 105 B Firak
10 I Imildrorn 42 I Firim 74 G Sildrorn 106 F Morildrane
11 I Carorthad 43 I Glireon 75 D Carorthay 107 F Thigrand
12 I Ushudrarg 44 I Kahangriel 76 B Glortharg 108 B Kahudrarg
13 G Glormeon 45 I Kahudruk 77 B Thortheon 109 F Lorangriel
14 G Thormuk 46 I Lororthane 78 D Glormane 110 F Carorthane
15 I Imgaril 47 I Malirane 79 D Gloruk 111 F Thorthand
16 G Obularg 48 I Kahudrun 80 D Gludreon 112 F Berormane
17 I Thigrim 49 G Ulformane 81 D Thudrun 113 F Ingormiel
18 I Lorelorn 50 D Hagildrorn 82 D Torelorn 114 B Careneon
19 I Kagangrorn 51 I Thildresh 83 D Thatruk 115 B Varangrand
20 I Malirarg 52 I Glormarg 84 B Carormand 116 F Imgorthand
21 G Imatrorn 53 I Carorand 85 D Lorangrarg 117 F Lorangrim
22 G Asorthane 54 G Carangrane 86 D Thelak 118 F Tharand
23 I Imasharg 55 G Thangrorn 87 D Imangruk 119 B Torinarg
24 I Torangrorn 56 I Malormun 88 D Glidril 120 F Imorthesh
25 I Sortharg 57 I Varormane 89 B Thangrad 121 B Anvortheon
26 I Zarashand 58 G Imgenarg 90 D Imulorn 122 F Obireon
27 I Glororn 59 G Thorarg 91 D Thigrak 123 G Obigrorn
28 I Malorthand 60 I Thirium 92 B Lorangrorn 124 I Imgasharg
29 G Varangrim 61 I Fenarg 93 B Varatrarg 125 I Thangrarg
30 I Sigrorn 62 D Imgorarg 94 D Imelorn 126 B Kahudrak
31 I Hagudrak 63 H Torelak 95 D Ulfangrak 127 F Carorthand
Поселения расположены в порядке с севера на юг. Это также может служить ключом к распределению рас.
ФОРМАТ СОХРАНЕНИЯ ИГРЫ
Все адреса, указанные далее, даны в десятичной системе. Сохранённые данные начинаются с адреса Spectrum 39933 и имеют длину 9219 байт. Это включает в себя:
- Индекс персонажа: 1
- Счётчик дней: 2
- 24 таблицы (по 128 байт каждая): 3072
- Карта (64*96): 6144
- Итого: 9219
Адрес 39933 содержит номер персонажа, которым вы играете. Адреса 39934-5 содержат количество дней «с тех пор, как Лунный Принц отправился в Икмарк».
Карта и несколько таблиц включены сюда. Именно поэтому, когда вас убивают, вы должны загрузить сохранённую игру для перезапуска (не было места для двух копий всех этих данных). Теперь я перечислю всё это. Таблицы имеют длину 128 байт и индексируются по номеру поселения или персонажа, как в таблице выше.
ТАБЛИЦЫ 0/1 (39936/40064): Координаты поселений
Таблица 0 содержит координаты X (на карте) для 128 поселений, а таблица 1 — координаты Y. Я не буду перечислять их, так как у всех вас есть карта или вы можете легко получить её с помощью одного из редакторов PD.
Каждое поселение принадлежит персонажу с таким же именем. Исключения:
- 0 Крепость Варенанд -> Лorimgrim Фей (117)
- 1 Город Карудриум -> Карортай Гном (75)
- 2 Крепость Тейгрorn -> Lorangriel Фей (109)
- 3 Крепость Финорн -> Карангрань Великан (54)
- 4 Город Имириэль -> Шарет Похитительница Сердец
ТАБЛИЦЫ 2/3 (40192/40320): Координаты предметов
Как таблицы 0/1, для предметов. В отличие от таблиц 0/1, они не фиксированы и устанавливаются случайным образом в начале игры. Каждый предмет имеет владельца, который может использовать его один раз. Любой, у кого есть предмет, но кто не является его владельцем, не сможет использовать его, но получит некоторые незначительные преимущества. Их также можно использовать для сближения с новыми людьми (отдав какой-то предмет его истинному владельцу, вы можете склонить его присоединиться к вашей стороне).
Предметы 5-128 — это оружие, их сила проявляется в битве, и они принадлежат персонажу с тем же номером. Это Копья (для варваров), Луки (для феев), Топоры (для гномов), Молотá (для великанóв) и Мечи (для ледяных лордов). Все они дают преимущества в бою.
Предметы 0-4 являются особыми. Вот их основные свойства:
- 0 Корона Варенанда: Использование Луксором приводит с ним всех его людей.
- 1 Корона Карудриума: Использование Моркином приводит Луксора и его людей.
- 2 Заклинание Тейгрornа: Использование Таритель переносит всех в город Имириэль.
- 3 Руны Финорнá: Использование Рортроном... я не помню!!!
- 4 Корона Имириэля: Использование Шарет приводит Луксора и его людей.
Короны обладают второстепенной силой Убеждения. С ними проще сближаться с другими миром.
Заклинания обладают второстепенной силой Резвости (больше ходов за дневное время).
Руны обладают второстепенной силой Защиты в бою. Вас реже убьют.
Когда предмет переносится персонажем, его номер записывается в таблицу 3, а таблица 2 содержит 255.
- ТАБЛИЦА 4 (40448): Врагов убито в последней битве.
- ТАБЛИЦА 5 (40576): Людей потеряно в последней битве.
- ТАБЛИЦА 6 (40704): Размер армии в походе.
- ТАБЛИЦА 7 (40832): Размер домашней армии (в городе или крепости).
Во всех этих таблицах количество хранится разделённым на 5. Таким образом, 15 означает 75 человек, а 255 (максимум) означает 1275 человек.
ТАБЛИЦА 8 (40960): Тип воина (на основе таблицы 13)
- 0-5: Лунная гвардия (Moonguard)
- 6-7: Фей (Fey)
- 8-9: Варвар (Barbarian)
- 10, 11, 14: Ледяная гвардия (Iceguard)
- 13: Великан (Giant)
- 15: Гном (Dwarf)
Остальные значения не используются.
ТАБЛИЦА 9 (41088): Владелец каждого поселения
Первоначальные владельцы описаны где-то выше. Эта таблица содержит актуальных владельцев на каждый момент времени.
ТАБЛИЦЫ 10/11 (41216/41344): Координаты персонажей
X и Y соответственно. Первоначально каждый находится в своём родном поселении. Исключения:
- Луксор: Ворота Варенornа (Gate of Varenorn).
- Моркин: Город Имириэль.
- Таритель: Лес Фангрим (Forest of Fangrim).
- Рортрон: Ворота Варенornа.
- Шарет: Город Имгарil.
ТАБЛИЦА 12 (41472): Разное I
a) 5 старших бит содержат оставшееся дневное время:
- 0: Ночь
- 1: Один час
- 2-9: Два часа
- 10-12: Три часа
- 13-16: Четыре часа
- 17-20: Пять часов
- 21-24: Шесть часов
- 25-27: Семь часов
- 28-30: Восемь часов
- 31: Рассвет
(эти дни коротки!)
b) 3 младших бита содержат направление взгляда:
- 0: Север
- 1: Северо-Восток
- 2: Восток
- 3: Юго-Восток
- 4: Юг
- 5: Юго-Запад
- 6: Запад
- 7: Северо-Запад
ТАБЛИЦА 13 (41600): Типы персонажей
Эта таблица используется главным образом для выбора графического представления:
- 0: Луксор (верхом)
- 1: Луксор (пешком)
- 2: Моркин (на коне)
- 3: Моркин (пешком)
- 4: Рортрон (на коне)
- 5: Рортрон (пешком)
- 6: Фей (на коне)
- 7: Фей (пешком)
- 8: Варвар (на коне)
- 9: Варвар (пешком)
- 10: Ледяной в. (на коне)
- 11: Ледяной в. (пешком)
- 12: Таритель (всегда на коне)
- 13: Гигант (всегда пешком)
- 14: Шарет (всегда на коне)
- 15: Гном (всегда пешком)
В этой таблице есть и другие коды, не использующиеся здесь, но я включаю их для полноты картины. Коды событий см. ниже.
- 16: Дракон
- 17: Волк
- 18: Тролль
- 19: Скулкрин
- 20: Конь
ТАБЛИЦА 14 (41728): Разное II
- Биты 0-2: Принадлежность
- 0 = Люксор
- 1 = Шарет
- 2 = Фей
- 3 = Варвары
- 4 = Гиганты
- 5 = Гномы
- (6, 7 не сущ.)
- Бит 3: Убил врага в последней битве.
- Бит 4: Участвовал в битве (биты 3 и 5 не имеют смысла, если бит 4 не установлен).
- Бит 5: Одержал победу в последней битве.
- Бит 6: В туннеле.
- Бит 7: Использовал свой предмет (разрешено только один раз).
ТАБЛИЦА 15 (41856): Степень усталости
- Совсем выбился из сил: 000-031
- Крайне устал: 032-062
- Очень устал: 064-095
- Довольно устал: 096-127
- Слегка устал: 128-159
- Чуть-чуть: 160-191
- Бодр: 192-223
- Совсем не устал: 224-255
ТАБЛИЦА 16 (41984): Последняя битва
В своей последней битве этот персонаж сражался с тем, чей номер указан здесь.
ТАБЛИЦА 17 (42112): Враг
Враг этого персонажа. Если бит 7 установлен, врагов нет.
ТАБЛИЦА 18 (42240): Сюзерен
Сюзерен этого персонажа. Если бит 7 установлен, сюзерена нет.
ТАБЛИЦА 19 (42368): Безрассудство
См. таблицу 15. 0 означает МЕРТВ.
ТАБЛИЦА 20 (42496): Предмет / Убийца
Эта таблица имеет два значения:
- а) Если персонаж жив, она содержит номер переносимого предмета или 255, если предмета нет.
- б) Если персонаж мертв, она содержит номер персонажа, убившего его. Если убийцы нет (например, драконы, тролли...), то бит 7 установлен, а младшие биты содержат код события. Коды событий см. ниже.
ТАБЛИЦА 21 (42624): Положительные черты
| Бит | Значение |
|---|---|
| 7 | Верный |
| 6 | Быстрый |
| 5 | Храбрый |
| 4 | Упрямый |
| 3 | Щедрый |
| 2 | Властный |
| 1 | Сильный |
| 0 | Добрый |
ТАБЛИЦА 22 (42752): Отрицательные черты
| Бит | Значение |
|---|---|
| 7 | Вероломный |
| 6 | Медлительный |
| 5 | Трусливый |
| 4 | Угодливый |
| 3 | Жадный |
| 2 | Немногословный |
| 1 | Слабый |
| 0 | Злой |
(...заметьте, что можно быть добрым и злым одновременно!)
ТАБЛИЦА 23 (42880): Уныние
См. таблицу 15.
ТАБЛИЦА 24 (43008): КАРТА (её длина — не 128 байт!)
Карта имеет размер 64 квадрата в ширину и 96 в высоту. Позиция (X,Y) находится по адресу 43008 + 64 * Y + X. Каждый байт имеет следующее значение:
Биты 0-3: Атрибуты поверхности
- 0: Равнины
- 1: Горы
- 2: Лес
- 3: Холмы
- 4: Ворота
- 5: Храм
- 6: Яма
- 7: Дворец
- 8: Форпост
- 9: Зал
- 10: Хижина
- 11: Башня
- 12: Город
- 13: Фонтан
- 14: Камни
- 15: Ледяные пустоши
Биты 4-7: Флаги
- Бит 4: Инцидент (событие)
- Бит 5: Армия (только графическая информация: вы можете увидеть армию, которой на самом деле нет, или наоборот, изменив этот бит!).
- Бит 6: Туман.
- Бит 7: Внизу находится туннель. Если тип поверхности 4-7, там есть вход в туннель.
На этом сохраненная информация заканчивается. Другие таблицы:
Таблица 29508: как местность (таблица 24) влияет на время (таблица 12a)
- Равнины: 1
- Горы: 8
- Лес: 4
- Холмы: 3
- (Все остальные): 2
Таблица 29540: как тип персонажа (таблица 13) влияет на время (таблица 12a)
(на коне / пешком)
- Люксор: 3/6
- Моркин: 3/6
- Рортрон: 2/4
- Фей: 3/6
- Варвары: 5/8
- Ледяные в.: 3/5
- Таритель: 2/-
- Гиганты: -/5
- Шарет: 2/-
- Гномы: -/5
Таблица 29317: как тип персонажа (таблица 13) влияет на усталость (таблица 15)
(на коне / пешком)
- Люксор: 1/2
- Моркин: 2/4
- Рортрон: 0/1
- Фей: 2/3
- Варвары: 2/4
- Ледяные в.: 1/2
- Таритель: 1/0
- Гиганты: -/2
- Шарет: 0/-
- Гномы: -/3
Таблица 29009: Четыре типа событий для каждого возможного типа местности
(только на пустых клетках; повторы значений увеличивают вероятность)
Равнины: 0,3,1,4 Форпост: 0,1,6,6
Горы: 0,0,2,1 Зал: 2,6,6,10
Лес: 0,3,1,1 Хижина: 3,1,6,6
Холмы: 0,2,1,1 Башня: 5,5,5,5
Ворота: 0,7,8,10 Город: 0,6,6,12
Храм: 8,9,10,11 Фонтан: 3,12,12,12
Яма: 2,1,9,12 Камни: 0,8,8,11
Дворец: 0,4,7,10 Лед. пуст: 0,3,3,2
Типы событий:
- 0: Драконы
- 1: Волки
- 2: Тролли
- 3: Скулкрины
- 4: Кони
- 5: Руководство
- 6: Убежище
- 7: Когти Ночи (осталось времени = 0)
- 8: Пламя Рассвета (осталось времени = 31)
- 9: Шипы Отчаяния (уныние = 0)
- 10: Кровь Мужества (уныние = 255)
- 11: Тоска Смерти (усталость = 0)
- 12: Источники Жизни (усталость = 255)
ТАБЛИЦЫ ИМЕН (24839)
Все имена (кроме первых пяти, которые зашиты жестко) состоят из трех частей, которые генератор имен извлекает более или менее случайным образом (используя карту в качестве зерна псевдослучайных чисел) из трех таблиц. Вот они:
Приставки (25):
Img Dol Lor Ush Mor Tal Car Ulf As Tor Ob F Gl S Th Gan Mal Im Var Hag Zar Anv Ber Kah Ash
Средние части (16):
ar or ir en orth angr igr ash el in ul atr orm udr is ildr
Окончания (16):
orn il im uk ium ia eon ay ak arg and ane esh ad un
Генератор имен имеет фиксированное начальное значение (зерно) в позиции (0,0) карты. В этой позиции находится крепость Имгаррона Гиганта (Imgarorn the Giant). Как видите, Img-ar-orn — это (0,0,0) в таблицах выше. Любая другая позиция рекурсивно прослеживается до (0,0), генерируя псевдослучайное зерно для трех таблиц. Алгоритм заботится о том, чтобы любые соседние квадраты одного типа местности имели одинаковое имя.
Заметьте, что на карте 6144 позиций. 6144 = 24 * 16 * 16, поэтому возможных имен больше, чем квадратов на карте. Таким образом, алгоритм также гарантирует, что не будет разных мест с одинаковым именем.
На этом пока всё! Приятной игры!
Рубен Мартинес (Ruben Martinez)
Email: Ruben.Martinez@rediris.es
Поделитесь вашим мнением о статье