Spiiin's blog

Исследование Addams Family(E) [NES]

"Семья Аддамсов" - одна из самых запутанных игр на NES.

Практически все зоны доступны сразу, но чтобы пройти их, надо знать правильный порядок. Но даже после полного прохождения у каждого из игроков остаётся несколько вопросов. Никому неизвестно, куда ведёт закрытая дверь в холле и зачем нужны третьи ноты в библиотеке. Но вооружившись дизассемблером и монитором памяти, можно это узнать.

Сначала с помощью поиска читов необходимо отсеять ячейки памяти, которые изменяются вместе с игровой зоной. Чтобы это сделать в эмуляторе fceuxd sp надо много раз, меняя комнату, в меню Tools->Cheats просеивать ячейки кнопками Equal и Not Equal. Когда останется примерно тридцать ячеек можно с помощью монитора памяти (Tools->Hex editor), следить за ними в реальном времени. При этом опытному ромхакеру в глаза сразу должна броситься ячейка $613, которая со всех сторон окружена нулями, а сама меняется с номером комнаты или при сборе предметов. В игре есть только один параметр, который меняется при таких условиях - подсказка с названием комнаты внизу экрана.

Сюда ставится точка остановки на запись и при следующей смене комнаты находится код, который пишет в эту ячейку.

lda x, $71 ;переносим в x значение из ячейки $71  
lda c7d2,x ;загружаем номер строки с названием
sta $613 ;записываем номер строки в ячейку $613

Проверка подтверждает, что номер комнаты сохраняется в ячейке $71. Теперь можно создать мобильный телепорт - переставить точку остановки на запись на ячейку $71, и после срабатывания, вручную подменять её на любое число, чтобы получить таблицу игровых комнат.

#	ROOM	ПОЯСНЕНИЕ
00 THE GARDEN Сад
01 THE TREE Дерево в саду
02 THE CRYPT Склеп в саду
03 THE HALLWAY Холл
04 THE DINING ROOM Столовая снизу справа от входа
05 THE GALLERY Галерея снизу слева от холла
06 THE LANDING Коридок сверху слева, в сторону чердака
07 THE LANDING Коридор сверху справа, в сторону балкона
08 THE FESTER'S ROOM Комната Фестера
09 THE PUGSLEY'S ROOM Комната Пагсли
0A THE TOY ROOM Комната игрушек
0B THE WEDNESDAY'S ROOM Комната Венсдей
0C THE ATTIC Чердак
0D THE ROOF Крыша
0E THE POND Пруд в лесу
0F THE SECRET ROOM Тайник в комнате MASTER'S BEDROOM
10 THE SECRET ROOM Тайник в шкафу на чердаке
11 THE SECRET ROOM Тайник справа в пруду
12 THE CHIMNEY Камин. Вход в трубе на крыше
13 THE BATHROOM Ванная
14 THE BALLROOM Зал с привидениями, центральная дверь в холле
15 THE WOOD Лес за залом
16 THE KITCHEN Кухня, дверь справа в холле
17 THE LIBRARY Библиотека
18 THE CHAIN ROOM Комната с цепями. Выходы в комнаты 19,02,16,23,09
19 THE SECRET RIVER Секретная река
1A THE TREASURY Сокровищница
1B THE SECRET ROOM Тайник в камине с огнем в столовой
1C THE PIT Яма-ловушка с шипами. Тупик снизу-справа в склепе
1D THE BONE ROOM Дверь сверху-слева в склепе
1E THE BONE ROOM Дверь снизу-слева в склепе
1F THE BONE ROOM Дверь сверху-слева в склепе
20 THE GOMEZ'S ROOM Последняя комната
21 THE FREEZER Холодильник в кухне
22 THE FURNACE Печка, вход справа в кухне
23 THE PIT Яма-ловушка в комнате с ценями
24 THE STUDY Вход в библиотеку

Аналогичным отсевом можно найти в памяти место хранения полученных предметов. Если в ячейке по адресу записан 0 - предмет отсутствует, если 1 - предмет уже найден. Другие числа означают разновидность предмета. Таблица предметов (собрана для проверки существования тайного ключа от двери в холле):

ADDRESS	ITEM	ПОЯСНЕНИЕ
630 SNORREL Маска для плавания в пруду
631 UMBRELLA Зонт для спуска в вертикальных комнатах
632 BUCKET Ведро. 1 - пустое ведро, 2 - с водой
633 HOUSE Ключ от входа в дом
634 TREE Ключ от двери в дереве
635 ATTIC Ключ от чердака
636 MUSIC SCORE Ноты. 1,2,3 - тип нот
637 FOG Туман из трубы
638 BONE Туман из трубы
639 BLUE EGG Туман из трубы
63A MORTICIA Спасенные члены семьи
63B PUGSLEY ~
63C GRANNY ~
63D WEDNESDAY ~
63E LURCH ~
63F THING ~
640 SPANNER Гаечный ключ

Никаких секретов =\

Еще для надежности можно провести исследование кода вывода надписи Locked Door, которая появляется, если нету при попытке зайти в закрытую дверь. Для этого точка остановки снова перемещается на ячейку $613, игра стопится на попытке зайти в любую закрытую дверь, память дампится в файл и загружается в дизассемблер. Анализ процедуры, на которой остановилось выполнение, показывает 5 переходов на вывод сообщения о закрытой двери. По таблице номеров комнат и предметов легко расшифровываются условия.

ADDRESS	Условие
E76D Секретная река. Закрыто, если не спасен PUGSLEY
E78E Комната в холле. Код ниже
E781 Нужен ключ от входа на чердак
E7A2 Нужен ключ от двери в дереве
xxxx Нужен ключ от входа в дом

Проверка условия на двери в холле

E74C: LDA byte\_71 ;загрузка номера текущей комнаты  
...
E784: CMP #3 ; если в холле
E786: BNE loc\_E793
E788: LDY #0
E78A: LDA ($A),Y
E78C: CMP #7 ; если вход в дверь номер 7 (та самая загадочная дверь)
E78E: BEQ $E7AC
E7AC: LDA #$32 ; показать строку номер 32 "locked door"
E7AE: STA byte\_613 ; дверь закрыта всегда =\

С нотами такая же штука. В момент, когда Гомез передаёт дворецкому манускрипт, единственное, что происходит в коде - выставляется значение номера мелодии в ячейку $623. Если записать в эту ячейку другие числа, можно послушать все 5 музыкальных тем игры или заставить дворецкого играть нойз из кода игры. Ячейка с номером мелодии постоянно считывается только в комнатах Library(открывается секретный проход в комнату цепей нотами 1) и Ballroom (призраки начинают танцевать и открывается вход в лес, если были выбраны ноты 3). Ноты номер 2 не используются нигде =\

Секретов нет, но теперь это хотя бы проверено.

update Ненужная нота в библиотеке - это отсылка к старому черному белому сериалу