Сообщения без ответов | Активные темы Текущее время: 25 апр 2024, 11:54



Ответить на тему  [ Сообщений: 14 ] 
 [NES] New Ghostbusters 2. Бонусы 
Автор Сообщение
Сообщение 30 май 2011, 17:27
В игре в некоторых комнатах за определённые действия можно получить бонусы - мешки с деньгами. Например, в первой комнате нужно поймать бегающего пацана первым или вторым. В третьей комнате - в японской версии нужно ловить всех призраков в том порядке, в котором они появляются (бегающий пацан, 3 призрака с бензопилой, 2 лизуна, сначала быстрый, потом медленный). В европейской получить мешок не удалось :( Еще в первом уровне точно есть мешок в комнате с лизунами-метателями и в одной из центральных комнат, но за что игра их выдаёт - неясно.

У меня есть список всех комнат с записями о врагах и о том, в каких есть бонусные мешки, но не могу понять, что делать, чтобы их получать.
Кто-то знает еще способы добывания заветных мешочков?


Сообщение 30 май 2011, 17:51
Профиль WWW
Основатель сайта
Аватара пользователя

Зарегистрирован:
21 июл 2007, 15:40
Сообщения: 2234
Откуда: Москва
Я думаю, Санчо со своим всемогущим отладчиком может это легко прояснить.


Сообщение 30 май 2011, 18:08
Вечером выпишу полезные адреса тогда. Но всё равно полезно было бы и знание о том, как эти мешки проявить чисто из игры. Там просто условия какие-то такие, что случайно можно за 2-3 прохождения один мешок только обнаружить, может кто-то эти секреты знает и хранит :)


Сообщение 30 май 2011, 19:12
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
22 июл 2007, 11:16
Сообщения: 787
там все на скриптах сидит, весь движок практически, так что потребуется все внутренние команды скрипта разобрать и скрипт декомпилировать, чтобы понять что откуда берется. это почти нереально.

_________________
1. Модератор всегда прав.
2. Если модератор не прав, см. п. 1.


Сообщение 30 май 2011, 21:36
Ну да, мозгоразрывающие переходы получаются при отслеживании. Ну я для разбора данных о комнатах уже с небольшой частью разобрался.
Я даже знаю, где лежит запись об одном из мешков (отследил, откуда читаются очки за него). Я ставлю брейк на адреса от заданного и выше где-то на 10-40 байт, чтобы найти начало записи. Если бы удалось обнаружить 3-4 таких записи, можно было бы дальше с их форматом разбираться. Но я вижу только один байт и не знаю границы (и то может это само описание объекта мешка, а не конкретный индекс), да и эта запись лежит в адресном пространстве процессора по адресу $A963, это видно через пару ячеек памяти, в которые я не могу отследить запись, так как в тех же ячейках этот же адрес проскакивает в этих ячейках при загрузке данных о бегуне из другого банка памяти, а отслеживать номер банка я не умею :(

Проще говоря - чтобы таким способом дальше разбираться, надо сначала часть этих мешков в игре найти. Пока просто знаю, в каких комнатах они есть :
Уровень 1 - Комнаты 1, 3, 7
Уровень 2 - Комнаты 5,6,7,8,9
Уровень 3 - Комнаты 3,6,9,12,15
Уровень 4 - Комнаты 6,9,10,11
Уровень 5 - Комнаты 11,12
Может в каких-нибудь из них просто обнаружится, как добыть мешок.
Разбираю европейскую версию, она вроде позже вышла, может из-за изменений набора призраков мешки в ней вообще не добываются..


Сообщение 30 май 2011, 23:09
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
22 июл 2007, 11:16
Сообщения: 787
осталось самое главное лол, определить какие номера комнат каким комнатам соответтвуют

_________________
1. Модератор всегда прав.
2. Если модератор не прав, см. п. 1.


Сообщение 30 май 2011, 23:37
Не, комнаты по порядку прохождения описываются :)
Вот, к примеру, описание комнаты 7 уровня 1:

.BYTE $FF, 2 ; команда FF 2 - чекпоинт
ROM:AA55 .BYTE $15, 8, 1,$80, 3; 0 ; 15-лизун, катающий тележки (далее координаты появления в комнате XX-YY)
ROM:AA5A .BYTE $16,$B8, 0,$A0, 3; 0 ;3 лизуна метателя
ROM:AA5F .BYTE $16,$80, 0,$50, 3; 0
ROM:AA64 .BYTE $16,$60, 0,$B0, 3; 0
ROM:AA69 .BYTE $14,$48, 1,$40, 3; 0 ; быстрый лизун
ROM:AA6E .BYTE $14,$40, 1,$B8, 3; 0 ; быстрый лизун
ROM:AA73 .BYTE $13,$B8, 1,$40, 3; 0 ; медленный лизун
ROM:AA78 .BYTE $14,$A0, 1,$B8, 3; 0 ; быстрый лизун
ROM:AA7D .BYTE $D,$B0, 0,$60, 3, 1; 0 ;мешок с координатами появления и доп. байтом (у всех мешков - 1)
ROM:AA83 .BYTE $12, 0, 0, 0, 0,$AD, 0 (стрелка, AD - направление вправо, 0), далее байт с индексом след. комнаты
ROM:AA8A .BYTE $FF, 1, 0 ; 0 ; команда FF 1 x - переход в комнату с индексом X

Я описал комнаты не по индексам, а по порядку, в котором их игрок должен проходить


Сообщение 31 май 2011, 12:39
Профиль WWW
Основатель сайта
Аватара пользователя

Зарегистрирован:
21 июл 2007, 15:40
Сообщения: 2234
Откуда: Москва
Ну так всё равно запутаться можно. Лучший вариант - карта уровня с пронумерованными комнатами.


Сообщение 31 май 2011, 22:20
Профиль

Зарегистрирован:
30 май 2011, 23:41
Сообщения: 3
Имхо, проще отсчитать комнаты, через в хитросплетениях карт разбираться.
Попутно сделал микрохак, чтобы снять ограничение на одновременно появляющихся призраков. Правда, усложнение игры заметно только в местах, где в одном месте могут много врагов появиться, в 5-м уровне несколько таких комнат есть, так что тотальный кримсонленд устроить не получится.

-- 31 May 2011, 21:22 --

New Ghostbusters II (E) [T+Rus]_HACK_8_ghosts.nes.html

-- 01 Jun 2011, 19:20 --

CaH4e3, напугал ты меня своим "почти нереально".
Ничего особенно сложного, зная адреса начала записей о призраках, поставить брейк на чтение и отследить место интерпретации команд. Всего есть 50 команд, "в лоб" интерпретируя запись о лизуне я расшифровал 13, справедливо предположив, что после этого запись о мешке можно будет просто "прочитать", без раскодирования. Не совсем понятно, зачем разработчикам свой интерпретатор команд, среди которых есть аналоги CALL, JMP, переход по условию, повтор n раз, которые можно выполнить в одну инструкцию, а не в 8-9 (наконец-то понял, почему скриптовые языки оказываются по результатам тестов во столько раз медленнее ^_^). То есть, у разработчиков был свой язык, из которого получался этот код? Или зачем делать реализацию примитивного ассемблера поверх уже существующего?

Ну и собственно, расшифровав запись о мешке, понял, как определяется активация или неактивация бонуса. В описании комнат задаётся цепочка из типов призраков, которых надо убить. В конце этой цепочки стоит 0. Если игрок "дошёл" до него, мешок появится :)
В третьей комнате первого уровня, которую я пытался расшифровать брутфорсом, оказалось, что надо ловить сначала бегуна, затем быстрого лизуна, затем тень и только потом медленного лизуна. Непонятно вообще, как без подсказок ловить их именно так.
Следующим заходом расшифрую все оставшиеся комнаты и посмотрю, что еще можно интересного сделать.


Вложения:
Комментарий к файлу: Схемка уровня 1
level1.png
level1.png [ 7.26 КБ | Просмотров: 12689 ]
Сообщение 02 июн 2011, 17:52
Профиль

Зарегистрирован:
04 ноя 2010, 18:55
Сообщения: 29
В батлтоадсах лучше все варпзоны найдите. А то слухи ходили что в "трубах" есть ещё один варп.


Сообщение 03 июн 2011, 20:51
Профиль

Зарегистрирован:
30 май 2011, 23:41
Сообщения: 3
Записал видео со сбором всех мешков.

http://youtu.be/L90WP3TiEhI

Вот полный список:
Stage 1-1. Running Ghost, Slimer, Slimer.
Stage 1-3. Running Ghost, Fast slimer, Invisible Chainsaw Ghost, Slimer.
Stage 1-7. Slimmer with carts, Debris-throwing Slimer, Fast slimer x 3, Debris-throwing Slimer x 2.
Stage 2-5. Jackhammer worker x 2, Mine Car worker, Jackhammer worker x 2, Hammer worker.
Stage 2-6. Mine Car worker, Jackhammer worker, Hammer worker, Mine Car worker, Jackhammer worker, Hammer worker.
Stage 2-7. Mine Car worker x 2, Pick workers
Stage 2-8. Hammer worker, Pick workers, Hammer worker, Mine Car worker.
Stage 2-9. Hammer worker, Pick workers, Jackhammer worker, Mine Car worker.
Stage 3-3. Imp x 3, Blob x 2.
Stage 3-6. Blob x 2, Ninja with sword..
Stage 3-9. Ninja with shureken x 2, Blob.
Stage 3-13. Blob, Fly imp x 3, Blob.
Stage 3-15. Blob, Fly imp x 6, Imp.
Stage 4-6. Fast Debris-throwing Slimer x 3, River Creature x 2, Fast Debris-throwing Slimer.
Stage 4-9. Stand Debris-throwing Slimer x 4, Rotating Creature x 4.
Stage 4-10. River Creature, Rotating Creature, River Creature, Rotating Creature, River Creature x 2, Rotating Creature x 2.
Stage 4-11. River Creature, Rotating Creature x 2, Fast Debris-throwing Slimer, River Creature, Rotating Creature, Fast Debris-throwing Slimer, Rotating Creature.
Stage 5-11. Wall Slime, Chainsaw Ghost, Wall Slime x 3, Chainsaw Ghost x 2.
Stage 5-12. Slimer x 2, Wall Slime x 4, Running Ghost x 2.

-- 03 Jun 2011, 19:57 --

organic писал(а):
В батлтоадсах лучше все варпзоны найдите. А то слухи ходили что в "трубах" есть ещё один варп.

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

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


Сообщение 06 июн 2011, 14:46
Профиль

Зарегистрирован:
04 ноя 2010, 18:55
Сообщения: 29
Цитата:
Только вот с переносом данных в свободное место так легко разобраться не удастся, видимо.
Дизассемблируешь РОМ через IDA и потом собираешь PRG назад ассемблером DASM.


Сообщение 07 июн 2011, 13:04
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
22 июл 2007, 11:16
Сообщения: 787
это было бы легко, не будь вся игра написана на скриптовом языке, за исключением некоторого набора внешних функций, которые делают какую-то нестандартную работу. программный движок только парсит скрипты и исполняет два десятка команд, дальше декомпилятор придется писать самому или ручками. ;)

Код:
BANK0:8000 07 5D E8+                cmd_ofs7_arg1_arg1 <7, sub_6285D, 0, $FF> ; exec external func
BANK0:8005 11                       .BYTE $11               ; conditional switch case
BANK0:8006 0C                       .BYTE  $C               ; switch case array size
BANK0:8007 35 86                    .WORD unk_8635
BANK0:8009 6A 86                    .WORD unk_866A
BANK0:800B 46 87                    .WORD unk_8746
BANK0:800D 12 88                    .WORD unk_8812
BANK0:800F DE 88                    .WORD unk_88DE
BANK0:8011 C9 8C                    .WORD unk_8CC9
BANK0:8013 09 8E                    .WORD unk_8E09
BANK0:8015 14 8E                    .WORD unk_8E14
BANK0:8017 1F 8E                    .WORD unk_8E1F
BANK0:8019 2A 8E                    .WORD unk_8E2A
BANK0:801B AC 89                    .WORD unk_89AC
BANK0:801D 5D 8A                    .WORD unk_8A5D
BANK0:801F 07 7E EB+                cmd_ofs7_ofs0_arg1 <7, _compare_var_value, byte_7DE, 1>
BANK0:8025 0C 5E 80                 cmd_ofs0 <$C, unk_805E> ; if carry not set
BANK0:8028 13 DE 07+                cmd_ofs0_arg1 <$13, byte_7DE, 0> ; write var value
BANK0:802C 07 83 E6+                cmd_ofs7_arg1 <7, _init_counters, $FC> ; arg1
BANK0:8030 07 75 E7+                cmd_ofs7_arg1 <7, sub_62775, 0> ; arg1
BANK0:8034 07 5B E7+                cmd_ofs7_arg1 <7, _packed_tilemap, 8> ; arg1
BANK0:8038 07 8D E7+                cmd_ofs7_arg1 <7, _write_var26, $1B> ; arg1
BANK0:803C 07 CD E6+                cmd_ofs7_ofs0 <7, _read_data_16_B5, _pal0> ; arg2
BANK0:8041 04 93 ED                 cmd_ofs7 <4, stru_62D93> ; subroutine

_________________
1. Модератор всегда прав.
2. Если модератор не прав, см. п. 1.


Сообщение 25 июн 2011, 19:57
Профиль

Зарегистрирован:
30 май 2011, 23:41
Сообщения: 3
Написал на lua скрипт, который при запуске с игрой подменяет данные о призраках на первом уровне.
http://dl.dropbox.com/u/852723/NewGhostBusters_hard.zip

видео:
http://www.youtube.com/watch?v=aSGLA1R96Gc


Показать сообщения за:  Поле сортировки  
Ответить на тему   [ Сообщений: 14 ] 

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by STSoftware for PTF (mod by Zeru-j).
Русская поддержка phpBB