Разработка и ромхакинг > Ромхакинг и программирование
[SMD] Wiz'n'Liz читы
(1/1)
ByteFun:
Платформа: Sega MD
Картридж: Wiz'n'Liz
Софт: IDA Pro 6.8.150 + SMD Loader + GensIDA Debugger
Начинающий в ROM хакинге.
При старте игры "ONE PLAYER START", настройки LEVEL - SORCERER; SKILL - TAXING, при входе в уровень появляется моргающий кролик, иконка над игроком сигнализирует о его наличии на карте. Чем чаще моргает иконка, тем меньше времени остается на поимку кролика. По истечении времени кролик лопается, обнуляя прогресс сбора букв на уровне.
Цель: найти счетчик времени до разрыва этого кролика в RAM, за"NOP"ить участок отсчета счетчика.
Не лезет в голову как отловить это значение. Прошу помощи реверсеров в идеях по достижению этой цели.
Любые предложения и мысли?
PS: offset 0xC874, декремент глобального таймера, для отключения отсчета времени.
DrMefistO:
Можно отталкиваться от того, что происходит, если не поймать, или если поймать: либо графика там какая-то выводится, либо бонус какой-то конкретный дают (например, увеличивается число жизней на 2). И, потом смотреть, откуда вызывается это изменение и при каких условиях.
ByteFun:
Выводится текст о потере кролика. Строки без ссылок на место в коде. Скорее всего таблица строк. Пока не разобрался с ними.
Думал решить проблему легче, чем перелопачивание кучи кода между счетчиком и выводом строки.
Как вариант опереться на моргание спрайтом, но я даже не представляю как VDP работает =(
krocki:
002840: 536E - код вычитания времени мигания...меняем на 6002 время не уменьшается, но так вроде не пойдёт при старте... <_<
лучше сделать так 002844: 6A04 меняем на 6004 - индикатор иконки направления на зайца, всегда будет показывать на него. ;)
DrMefistO:
У меня в видосах есть как раз инструкции о том, как ставить бряки на вывод текста. Советую ознакомиться: http://www.emu-land.net/forum/index.php/topic,81112.msg1377638.html

Добавлено позже:
Либо тут: http://www.emu-land.net/forum/index.php/topic,74518.msg1173101.html

Добавлено позже:
Если вкратце, то через Tools->Plane Explorer ищешь точку, где нужный текст уже выведен ставишь игру на паузу, затем ставишь бряк на [базовый адрес VDP_RAM + адрес тайла], и ждёшь пока сработает.
krocki:
Спрайт мигания вроде здесь 002DA4: 302C
ps - адрес на зайца у всех разный...
ByteFun:

--- Цитата: krocki от 25 Июнь 2020, 02:17:39 ---2840
--- Конец цитаты ---
Как?? Да, я ступил, искал инструкции декремента по первым двум байтам 53 79, проверяя каждую. А тут со смещением относительно адреса...
krocki:
в отладчике перейди по этому смещению 002840 это и есть инструкция кода вычитания времени мигания.
вначале даётся значения = 10 для одного зайца и уменьшается до нуля, после становится значение 65535 так сказать улетает в трубу.
ByteFun:
Как обычно, затер это дело двумя заглушками и моргающего зайца вообще не стало  :lol:
ОГРОМНОЕ спасибо krocki за прямое решение!
DrMefistO обязательно ознакомлюсь с материалом, есть желание учиться ковырять MD  :)
krocki:

--- Цитата: ByteFun от 25 Июнь 2020, 02:46:33 ---Как обычно, затер это дело двумя заглушками и моргающего зайца вообще не стало  :lol:
--- Конец цитаты ---
инструкция правильная она отвечает за время, но просто нопить\затирать её не канает.
я же небе написал юзай только 2й код...так у тебя не будет пропадать индикатор по истечении времени.
ByteFun:

--- Цитата: krocki от 25 Июнь 2020, 02:49:39 ---инструкция правильная она отвечает за время, но просто нопить\затирать её не канает.
я же небе написал юзай только 2й код...так у тебя не будет пропадать индикатор по истечении времени.

--- Конец цитаты ---

Чекнул различия. Ну изначально задача была убрать его присутствие и его (зайца) негативные эффекты.
Бонусов он не дает, только отнимает буквы. На высоких уровнях время на поимку уменьшается до безумия и его почти не реально догнать на более запутанных локациях.
krocki:
буквы с 2й кодом не пропадают, если время зайца кончается...
отключение таймера зайцев (мигающие зайцы не появляются) - 002690: 000A заменяем на FFFF
Навигация
Главная страница сообщений

Перейти к полной версии