Разработка и ромхакинг > Ромхакинг и программирование
Чит-коды в эмуляторах
(1/2) > >>
iddqd:
Создание Pro Action Replay кодов в эмуляторе Super Nintendo– часть 1.
В первой статье будет показан самый простой приём – элементарный поиск точного значения. Используется эмулятор ZSNES 1.51 и ром Lethal Enforcers (U).
Поиском точного значения найдём адрес здоровья первого игрока. На экране вверху слева пять блоков со звёздами – ищем в памяти значение 5:
Ставим паузу, делаем быстрое сохранение в любой слот. В меню эмулятора Cheat – Search:
Далее выберем тип переменной целое 1 байт,в  десятичном виде (Decimal) и условие – поиск точного значения (Exact value search):
Нажали старт. Вводим значение 5 и жмём кнопку Search:
Нас просят вернуться в игру, чтобы дождаться изменения значения в игре (в этом случае получить ранение) и тогда можно будет отсеять:
Закрываем окно (X вверху справа – как любое окно в windows). Переходим в игру, снимаем паузу. В нас дважды попадают и здоровья становится 3 блока:
Отсеяли на 3, получаем один результат:
Нажали View:
Теперь жмём Add, в поле Enter new value вводим значение 5 (больше не надо – чтобы глюков не было), в поле Ener Cheat description вводим описание по-английски (бесконечное здоровье первого игрока) и снова жмём Add :
Получаем это:
Смотрим вверху слева направо:
Adress: 7E00B2 – адрес параметра; CV (Current Value) -Текущее значение – равно 5 в десятичном виде; PV (Previous Value) – предыдущее значение было равно 3; TGL – ON – включено, можно нажать кнопку Toggle и тогда сменится на OFF (выключено); Description – описание чита. Код выделен красным, жмём Save, в выбранной в настройках эмулятора директории появится файл .cht:
Теперь всё – можно возвращаться в игру и здоровье не будет уменьшаться=) Можно точно так же найти адрес патронов первого игрока точным значением (при полном магазине в памяти значение 6) – будет так:

Ожидаем - Nes, Genesis/SMD.
iddqd:
Создание RAW кодов в эмуляторе Nes – часть 1.
Воспользуемся эмулятором Nestopia 1.40. Запускаем в нём ром Moon Crystal (J) [T+Rus] – русский перевод от Шедевра:) Можно любой другой ром этой игры.
На экране две жизни:
Идём в Nestopia – Options – Cheats – Add:
A=0 B=0 то есть пока эти поля не трогаем, ниже оставляем отметку на «None» - получается что мы выполняем просто поиск неизвестного значения.
Далее возвращаемся в игру (кнопку Cancel не нажимаем!). В игре теряем одну жизнь. На экране стало 1. Возвращаемся в меню читов, в поле B впечатываем значение 1 и после этого выбираем условие поиска (фильтр) R0-R1=B:
Поясню – это означает, что значение уменьшилось на единицу. То есть R0 – первое состояние, R1 – второе, B – разница между ними.
Далее слева смотрим – из найденных нам подходят два адреса – 05ED и 0799. Проверяем первый из них (смотрим сверху вниз):
В разделе Raw: Adress 05ED
Value = 7 (можно другое)
Далее жмём кнопку Validate (обязательно!) – слева появится надпись Valid; Description – описание адреса, я вписал Inf. Lifes. Дальше жмём Submit – появится меню, как на скрине внизу. Выделяем чит мышью и жмём OK.
В игре проверяем код – умираем один раз и жизней стало 6:
Значит в памяти значение количества жизней отличается от экранного на единицу больше. Это очень распространённый вариант – жизни кончаются, если умереть когда на экране осталось 0 жизней. Но с этим всё. Теперь можем этот код сохранить – код выделен, жмём кнопку Export:
И сохраняем в файл .xml:
[
Добавлено позже:
Найдём некоторые параметры с помощью VirtuaNes 0.97e в игре Super Contra (ром Super C (U) [T+Rus].
На экране количество жизней 2. Делаем быстрое сохранение и далее Tool – Cheat Support:
Количество жизней хранится как 1 байт целое, поэтому оставляем Length – 1 byte. Жмём кнопку Start для начала поиска:
Теряем одну жизнь, отсеиваем на «уменьшилось» - нажимаем кнопку  Old>Now:
Без изменения счётчика жизней продвигаемся в игре, отсеиваем на «не изменилось» - Old=Now. Вот и нашли :
Далее Tool – Cheat Code:
Input – вводим код на адрес 0053. Пишется так: Адрес-тип переменной (в байтах – 1, 2 или 4) и значение. Ниже пишем комментарий к чит-коду:
Жмём OK:
В игре стало 4 жизни, которые не уменьшаются при умирании:
Сохраняем код:
Так как жизни хранятся точным значением, можно жизни второго игрока найти элементарно. Нажимаем Start в меню поисковика читов, дальше вводим Data = 2 и жмём Search:
Есть смысл проверить адрес 0054, так как он идёт сразу за адресом жизней первого игрока. Так и есть – это адрес жизней второго игрока:

Идём дальше. Найдём адрес здоровья в игре Moon Crystal. Сохраняемся при начальном уровне здоровья и начинаем поиск с нажатия кнопки Start:
Ранение – отсеиваем кнопкой Old>Now:
Грузим сохранение с полным здоровьем – Old<Now:
В игре без ранений проводим какое-то время – Old=Now:
Адрес 05F0 очень похож на адрес здоровья – так и есть, вот код на него:
Почему я поставил значение больше 3 поймут те кто в эту игру играл – там в дальнейшем добавляется уровень специальным призом.


_____________
Добавлено позже:
Поиск PAR кодов средствами эмулятора SMD – часть 1.
Fusion 3.63 – в  этом замечательном эмуляторе очень неудобный поисковик кодов, и это серьёзный недостаток. Но некоторые приёмы можно применять без проблем. Рассмотрим пока что два из них.
Запускаем игру Caliber Fifty.
Найдём количество жизней (попыток). На экране 2 жизни. Делаем сохранение и идём в меню GameGenie/PAR:
Далее жмём кнопку CodeFinder:
Жмём кнопку Count. Она предназначена для поиска точного значения:
Жмём Find. У меня нашлось 97 результатов. Жмём OK, в открывшемся новом (старом) окне также OK и возвращаемся в игру. Там теряем одну жизнь, то есть становится 01 на экране – возвращаемся в окно поиска и отсеиваем на значение 1:
Остаётся 7 адресов. Грузим сохранение с 02 жизнями и отсеиваем на 2:
Не теряя и не приобретая новых жизней продвигаемся в игре и снова отсеиваем на 2. Количество результатов не изменилось? Тогда определим нужный адрес перебором.
Пробуем код со значением на адрес FF9968. Вводим адрес:значение, жмём Add code, выделяем код в списке мышью (обязательно!) и жмём OK:
результате получаем  бесконечные жизни:)
Примечание: эмулятор Kega Fusion использует для хранения данных перевёрнутый порядок байтов (спасибо разработчикам ArtMoney)у . Поэтому адреса Fusion, в первую очередь те, которые 1 байт целое, могут различаться на 1 байт. То есть в  Fusion код на адрес FF9968 – в других эмуляторах (Gens всех видов) надо использовать код на адрес FF9969.
Теперь найдём код на гранаты. На экране 39 гранат. Идём в CodeFinder и в этот раз жмём кнопку Difference («Разница»). Этот вариант подходит для поиска разницы значений или интервала в таймерах – на сколько уменьшилось/увеличилось значение, столько и надо писать в поле Find.
Нас просят запомнить изначальное значение.
Возвращаемся в  игру. Бросаем, скажем, две гранаты, стало 37. Вводим разницу 2 и жмём Lower (если бы значение увеличилось – нажали бы Higher):
Получили результаты:
Ну тут уже всё понятно. Добавляем код, не забываем выделить его в списке – иначе он не будет работать:
В результате имеем это:
iddqd:
Сделаем неуязвимость в игре Axelay на эмуляторе SNES9X fix 4.
Invincibility – мой любимый приём. Во многих играх существует неуязвимость при мигании, которая появляется после пропущенного удара,  респауна или начала уровня. В памяти по адресу неуязвимости отсчитывается время до её окончания. Этот адрес можно просто найти – по сути это тот же таймер, только скрытый (без экранных значений). Но есть ещё одна фишка – адресов неуязвимости обычно несколько, все они идут друг за другом без всяких смещений и значение предыдущего равно x256 следующего – проверено на практике.
В самом начале игры при мигании ставим паузу, сохраняемся и идём в Cheat – Search for new cheats:
В открывшемся окне поиска задаём нужные условия поиска – Значение больше нуля, тип переменной 4 байта целое, беззнаковое: Greater than – Entered value – 0 – Unsigned – Integer 4 bytes:
Жмём OK, в игре дожидаемся окончания мигания, снова пауза и отсеиваем на «уменьшилось»: Less than – Previous value:
Далее возвращаемся в игру, без мигания проводим какое-то время и отсеиваем на «не изменилось»:
Далее всё сначала – мигание и «увеличилось»: Greater than – Previous value:
Снова «уменьшилось» и т.д. Смотрим те значения что «по нулям» - таких значений 4, и предыдущие значения были как раз x256. Остальные все не подходят – я делаю код на адрес7E0324. Фактически это адрес 1 байт целое, работать с ним проще, так как меньше значение, которое нужно вписать:
Получаем готовый PAR код. Не забудьте проверить что отмечено Apply cheats:
Также смотрим в окне Cheats – GameGenie, Pro Action Replay codes:
Примечание – значение 14 по адресу неуязвимости в этой игре заморозило мигание спрайта в неподходящий момент (когда корабль не видно вообще), поэтому надо поставить другое значение – для начала можно попробовать на единицу больше или меньше, или любое нечётное число:
Вот и всё – враги и их выстрелы проходят сквозь игрока (который не мигает), можно записывать TAS-видео=)
Phil:
iddqd, а можно ли зная чит-код пофиксить сам ром?
(к примеру Balloon Fight (U).nes: SUNNIZVI - Infinite lives или AENYPPZE - Start with 9 lives; Ice Climber (U).nes: OKEIPGVS - Infinite lives, AEXKTGLE - Start with 9 lives)

А с помощью каких прог, вообще, удобнее менять количество жизней в самих ромах?
(Прост охота в трёх версиях Ice Climber-а (Ice Climber (VS).nes, Ice Climber (U).nes, Ice Climber (VS).fds) сделать по 9 жизней)
iddqd:
Phil, ром фиксят коды GameGenie.  Я работаю только с RAM, к сожалению.. Но здесь есть спецы.
Марат:

--- Цитата: Phil от 27 Январь 2010, 01:00:08 ---iddqd, а можно ли зная чит-код пофиксить сам ром?
(к примеру Balloon Fight (U).nes: SUNNIZVI - Infinite lives или AENYPPZE - Start with 9 lives; Ice Climber (U).nes: OKEIPGVS - Infinite lives, AEXKTGLE - Start with 9 lives)

А с помощью каких прог, вообще, удобнее менять количество жизней в самих ромах?


--- Конец цитаты ---
С помощью hex редактора, зная место, где находятся жизни.
r57shell:
Это не развёрнутый ответ!) Правильный ответ то что в самом чите к примеру SUNNIZVI есть информация где, и как менять ром.

Первый же гугл поиск по фразе "Game-Genie to PAR" привёл к http://www.videogamesource.com/genie/create.html

Если ещё получше порыться, то можно и найти как из SUNNIZVI понять что в роме менять(хотя вот в той ссылке вроде это есть). Вот например если пароль Game-Genie в сеге при раскодировке выдаст чото на подобии 0000CDEF:0412 - то первое это оффсет в роме где надо патчить, а второе - чем заменить.
Марат:
Ты сначала вопрос прочитай нормально. Вопрос был "
А с помощью каких прог, вообще, удобнее менять количество жизней в самих ромах?

"
r57shell:

--- Цитата: Phil от 27 Январь 2010, 01:00:08 ---iddqd, а можно ли зная чит-код пофиксить сам ром?

--- Конец цитаты ---
я на эту часть отвечал, фак... этож не меня спрашивали  :ohmy:

--- Цитата: Phil от 27 Январь 2010, 01:00:08 ---А с помощью каких прог, вообще, удобнее менять количество жизней в самих ромах?

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

--- Цитата: Марат от 27 Январь 2010, 10:32:03 ---С помощью hex редактора, зная место, где находятся жизни.

--- Конец цитаты ---
вот это пояснил )

Добавлено позже:
можно и на примерах только лень :crazy:. Ладно сча сделаю :]
И кстати необязательно спомощью хекс редактора... нелюблю в них копаться... можно любым хекс патчером.
Марат:
А, ну, тогда я извиняюсь.
r57shell:
Впринципе всё подробно описано в http://www.videogamesource.com/genie/gg/create/nes_6_to_8.html
(ссылка несовсем по теме - она о том как перевести код из 6 букв в 8-сми буквенный) Хотя нет... погорячился ))) Описано всё не по этой теме но зато оттуда можно понять как чо делать :) ну я понял покрайней мере...

но для тех кто инглишь невоспринимает вот какой пример там даётся :)
Megaman 3: NXTKGE  start with infinite energy
tanks.

Это 6-ти буквенный пароль. Вводят в http://www.angelfire.com/games2/codehut/ggconvc.zip Получают 40EC?  :AF и вот эти 2 символа хотят найти в роме, а ищат их так:
Для любых целых i смотрят адресс 40EC+10+i*8000 в роме (все числа шестнадцатиричные - и только 40EC нам надо знать из 6-ти значного пароля), после чего записывают байт который по этому адрессу - все различные записывают. У них полчилось "48,05,00,21,E0,84,90,FF,FC" После чего в эту прогу (ggconvc), в пустое отведённое место, вводят все эти варьянты ("48,05,00,21,E0,84,90,FF,FC") и проверяют каждый код который выдаёт этот конвертер. Если код работает - значит он искомый 8-ми буквенный. Ссылаются ещё на прогу http://www.angelfire.com/games2/codehut/GameGenieDecoder.zip, которую если затестить то видно [картинка прикрепленная], что то что после вопроса(в ggconvc) это compare (с английского сравнить), а после двоеточия это value (с английского значение - логично предположить что это означает чем заменить).

Теперь вывод. Это значит что чтобы 8-ми буквенный применить, нужно взять ввести его (SANNIZVI) в ggconvc и получим 727D?D6:85 после чего найти все D6 по адресам для всех целых i:  727D+10+i*8000 и заменить их на 85.

Сейчас попробую ^^. Только надо ром сначала скачать.

Эмм ошибочка пароль то SUNNIZVI... а я то думаю чоза хрень )).

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

А те которые в ром можно изменить они должны изменять ром, а не рам.
Вот к примеру проканал код VXVKGAEO для Megaman 3 - удалось пропатчить ром.
Делал как: ввёл VXVKGAEO в ggconvc и получил 40EC?90:AE пробежался по адресам 40FC,C0FC,140FC,1C0FC... до конца рома, по адрессу 3C0FC нашел 90 которое надо заменить на AE.

Заменял http://www.emu-land.net/forum/index.php/topic,2076.msg488086.html#msg488086 а именно вот из этого архива http://www.emu-land.net/forum/index.php?action=dlattach;topic=2076.0;attach=22964 hexpatcher-ом написал "3C0FC,AE" и готово :]

пробегался по адресам вручную в Total Commander жмём F3,3

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


Добавлено позже:
А если хочешь аналогичные коды в других ромах то надо самому искать.
pro709:
Чит-коды в эмуляторе nestopia для battle city например для жизней танка ? 
iddqd:
pro709, всё расписано подробно, со скринами: http://www.emu-land.net/forum/index.php/topic,37168.msg509943.html#msg509943
Тебе даже значения искать не нужно - возьми коды с GameHacking.org Те, что без пометки GG введи в Raw - Adress/Value/etc. Коды, помеченные GG вводи в поле GameGenie.
pro709:
 В Nestopia 1.40 не могу сделать код на бесконечные жизни и здоровье  для игры Kyatto Ninden Teyandee ?
iddqd:
pro709, что значит сделать? Используете готовые коды или ищете значение самостоятельно? Какая версия рома?
pro709:
Nestopia 1.40
iddqd:
Нужна версия не эмулятора, а рома, т.е. игры. Вот коды: http://gamehacking.org/?s=v2&admin=search&searchinput=Kyatto+Ninden+Teyandee&hackers=on&cx=partner-pub-3413463488890851%3Ahxz5bp-zamb&cof=FORID%3A11&ie=ISO-8859-1&sa=Search&games=on&filter=0

Код Game Genie на бесконечное здоровье
Открой в эмуляторе Options - Cheats, далее в Temporary Cheats нажми Add
В новом окне поставь отметку на GameGenie, введи код в поле ввода кода, далее введи описание в поле Description, нажми кнопку Validate, затем Submit
Во вновь открывшемся окне нажми OK
Я проверил этот код на версии рома Kyatto Ninja Teyandee (J) [T+Eng.10_Vertigo], можно проверить на других версиях:
Kyatto Ninja Teyandee (J) [T+Eng4.5_Shadow], Kyatto Ninja Teyandee (J) [T-Rus(B)] и т.п. Думаю, код будет работать на всех ромах на основе оргинального (J) рома.
pro709:
Зачем мне готовые коды я ищу значения самостоятельно?
 В virtuanes093e   все нашел что хотел а в Nestopia никак
iddqd:
Ты нашел код в RAM Nes (Raw код)? Тогда зачем тебе заново искать? Просто введи тот же код в Nestopia, у него отличный от VirtuaNes формат кода, введи в формате для Nestopia и всё.
pro709:
1 байт это жизни а что 2,3,4 байта
Навигация
Главная страница сообщений
Следующая страница

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