|
Страница 1 из 1
|
[ Сообщений: 14 ] |
|
[NES] New Ghostbusters 2. Бонусы
Автор |
Сообщение |
30 май 2011, 17:27 |
|
|
В игре в некоторых комнатах за определённые действия можно получить бонусы - мешки с деньгами. Например, в первой комнате нужно поймать бегающего пацана первым или вторым. В третьей комнате - в японской версии нужно ловить всех призраков в том порядке, в котором они появляются (бегающий пацан, 3 призрака с бензопилой, 2 лизуна, сначала быстрый, потом медленный). В европейской получить мешок не удалось Еще в первом уровне точно есть мешок в комнате с лизунами-метателями и в одной из центральных комнат, но за что игра их выдаёт - неясно. У меня есть список всех комнат с записями о врагах и о том, в каких есть бонусные мешки, но не могу понять, что делать, чтобы их получать. Кто-то знает еще способы добывания заветных мешочков?
|
|
30 май 2011, 17:51 |
|
Основатель сайта
Зарегистрирован: 21 июл 2007, 15:40 Сообщения: 2234 Откуда: Москва
|
Я думаю, Санчо со своим всемогущим отладчиком может это легко прояснить.
|
|
30 май 2011, 18:08 |
|
|
Вечером выпишу полезные адреса тогда. Но всё равно полезно было бы и знание о том, как эти мешки проявить чисто из игры. Там просто условия какие-то такие, что случайно можно за 2-3 прохождения один мешок только обнаружить, может кто-то эти секреты знает и хранит
|
|
30 май 2011, 19:12 |
|
Зарегистрирован: 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 |
|
Зарегистрирован: 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 |
|
Основатель сайта
Зарегистрирован: 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 [ 7.26 КБ | Просмотров: 12750 ]
|
|
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 |
|
Зарегистрирован: 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
|
|
|
|
Страница 1 из 1
|
[ Сообщений: 14 ] |
|
Кто сейчас на конференции |
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1 |
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения
|
|