Разработка и ромхакинг > Ромхакинг
Вопросы новичков
Беларус учит русский:
Ну, DrMefistO, как обычно уж, посылает к своим видео :)
По первой ссылке видео посмотрел - про таблицу тайлов ничего, только поиск пожатой графики (как и называется видео).
Другие видео вообще про реверс, не увидел ничего про графику.
Может, я по незнанию объяснился не так, термины попутал?
У меня уже есть разжатая графика в видеопамяти, мне надо подловить момент, когда игра копирует с видеопамяти на экран. Т.е. из этой каши тайлов собирает конечную картинку.
По первому видео поставил бряк на копирование (Read) из видеопамяти - не срабатывает.
Ещё не понял пока - искать по смещению или же по ID тайла.
Главную доку по приставке почитал - нужное не нашёл, слишком сложно для новичка. Вроде как есть копирование с видеопамяти. Тайл может иметь разные размеры, отзеркаливание, номер... :neznayu: Нужное где-то здесь ведь?
Марат:
--- Цитата: perfect_genius от 30 Январь 2021, 10:52:25 ---По первому видео поставил бряк на копирование (Read) из видеопамяти - не срабатывает.
--- Конец цитаты ---
Ты или путаешь или что?
Из видеопамяти ничего никуда не копируется - это конечная точка. Если у тебя в видеопамяти уже есть карта, то ставь бряк на запись в это место. Таким образом узнаешь откуда в видеопамять пересылаются данные.
Беларус учит русский:
Марат, как из тайловой каши справа собирается полная картинка слева?
Причём, часть идёт на Plain A, и часть на Plain B:
Должна же быть карта тайлов (или как это называется?), по которой и собирается, так? Так вот как эту карту найти в роме? VDP как-то может помочь в этом?
Марат:
Ну, вот у тебя есть Plane explorer. На котором можно увидеть адреса этих самых планов. Карта тайлов запиывается либо в область плана А, либо плана Б.
Это адреса $E000 и $C000. По этим адресам и находится твоя карта тайлов. Надо ставить бряк на запись в эту область. В ида это адрес 0xD0C000,
0xD0E000. Алгоритм такой. Идешь на экран выбора пероснажей, открываешь Plane Explorer. Смотришь адрес 1 тайла у рептилии. Прибавляешь к этому адресу 0xD00000. И ставишь бряк в иде на запись по этому адресу. Когда бряк сработает, там уже анализируешь код.
DrMefistO:
В моих видео есть как раз про установку бряков на запись в конкретное место экрана: как тайлов, так и маппинга.
Беларус учит русский:
Спасибо большое, очередной раз выручили :thumbup: До видео DrMefistO не знал, что в Иде можно ставить бряки в видеопамять (вообще не думал, что она там есть), искал такое в эмуляторе. А Марат открыл глаза на то, что план А и план Б тоже находятся в видеопамяти вместе с тайлами, а я думал, что это что-то отдельное типа буфера кадра и в них нужно копировать с видеопамяти :blush:
Nik Pi:
--- Цитата: perfect_genius от 01 Февраль 2021, 22:29:26 ---Nik Pi, попробуй спроси в Извлечение мультимедиа.
--- Конец цитаты ---
Ок
Svyat:
SMD
Есть ли какие-нибудь общие признаки, по которым можно определить, имеется ли в игре звуковой драйвер SEGA Sound Source(pre-SMPS по классификации ValleyBell)? Недавняя Mad Stalker: Full Metal Forth изначально была портирована аутсорсинговой компанией Opera House, в продуктах которой, насколько я понимаю, использовался именно такой тип драйвера. Я собираюсь портировать музыку оттуда в формат SMPS Z80 DAC (S3K/S3DB mod.), поэтому меня этот момент очень интересует, так как формат записи нот в обоих драйверах почти одинаков, а значит, это упрощает портирование. На руках крайняя сборка SMPS Research Pack с pre-SMPS Rent-a-Hero (та же версия движка использована в прототипах Street Fighter 2' CE всё от той же Opera House). С какой конкретной рутины лучше начинать поиск? Заранее спасибо.
DrMefistO:
Ну, я бы начал со вытаскивания драйвера и побайтового сравнения. Список игр с тем же драйвером можно найти здесь: http://gdri.smspower.org/wiki/index.php/Mega_Drive/Genesis_Sound_Engine_List
Беларус учит русский:
Есть ли программы автоматического поиска структур в файле? Внутри рома UMK3 легко просматриваются всякие массивы:
000AA732 C186E186
000AAB56 C190E190
000AAF78 C19AE19A
000AB390 C1A4E1A4
000AB82E C1AEE1AE
000ABCC0 C1B8E1B8
000ABFA0 C1C2E1C2
000AC4AC C486E486
000ACDB4 C49AE49A
000AD6D4 C4AEE4AE
000ADBB0 C4B8E4B8
000ADFD4 C4C2E4C2
000AE474 C790E790
000AE93C C79AE79A
000AD182 C7A4E7A4
000AF1FA C7B8E7B8
000AF654 CA90EA90
000AFB1E CA9AEA9A
000B0080 CAA4EAA4
000B0922 CAB8EAB8
000B0538 CAAEEAAE
000AC94E C490E490
000AED54 C7AEE7AE
000B19B8 C4A4E4A4
0000 D506
0000 D546
0000 D586
0026 002C
004E 002C
0076 002C
009E 002C
00C6 002C
00EE 002C
0116 002C
0026 005C
004E 005C
0076 005C
009E 005C
00C6 005C
00EE 005C
0116 005C
004E 008C
0076 008C
009E 008C
00C6 008C
00EE 008C
004E 00BC
0076 00BC
009E 00BC
00C6 00BC
00EE 00BC
0018
0013
0005
0002
0003
0010
0017
0001
0000
0011
001A
0004
0015
0009
0007
000F
0014
0012
0008
000A
0006
000E
000D
000C
0000E018
0000E030
0000E048
0000E060
0000E078
0000E090
0000E0A8
0000E0C0Это особенность ромов старых игр или структуры часто так легко находятся в несжатых файлах?
Знаю про Kaitai Struct, но у него ведь нет автопоиска?
Guyver(X.B.M.):
С большой натяжкой можно использовать это: http://chief-net.ru/index.php?option=com_content&task=view&id=466&Itemid=55
Беларус учит русский:
Действительно близко. Забавно, какие жёсткие требования к вводу информации, будто поленился или не хотел делать защиты от ошибки.
Не возникало мысли сделать поиск одинаковых отрезков байтов по всему файлу?
Guyver(X.B.M.):
Я эту поделку делал для перевода одной из игр (легко составить список поинтеров с её помощью из-за особенностей их хранения в роме). А разделение файла на куски попросили добавить. При этом я не программист (поэтому всё работает жутко медленно, нелогично и т.д.). И поэтому защит от ошибок почти не делал, так как знал что и для чего мне нужно. Таким образом я наклонировал примерно 5-6 подобных программ в своё время, каждая со своими функциями, нужными только для одной-двух игр... :neznayu:
firefly23412:
Вот у меня какая загвоздка. Пойнтеры, игра Suikoden 2 и программа Kruptar (6ая версия). Я делал всё по этому гайду - https://magicteam.net/index.php?page=documents&show=Kruptar%20для%20чайников Круптар для чайников от мэджик тим.
Текст у меня программа отображает. Значит разницу смещения я правильно высчитал, так? Или нет?
Но при пересчёте пойнтеров программа выдаёт ошибку (я ничего не менял в тексте). Стало быть я неправильно указал начало-конец блока пойнтеров? (скорее всего) Но в том самом гайде не уточняется ничего про блоки пойнтеров или их местонахождение - и как мне быть? Каким образом их искать? Где они могут быть в файле этой игры?
Можно ли как-нибудь найти пойнтер по offset'у предложения(ий), может быть? Я не знаю...
Беларус учит русский:
Не пользовался программой, поэтому зачем пересчитывать пойнтеры/указатели? Не вмещается текст, который не менялся, скорее всего из-за неправильно указанного размера указателей, первого байта/двух байтов (где указана длина строки) или спецсимволов, что видны в тексте на скриншотах. Попробуй для эксперимента поставить у всего что можешь длину в 1 байт. Ну, кроме указателей на начало строк, наверно.
Потом методом половинного деления найдёшь в каком из них была ошибка :)
Guyver(X.B.M.):
По скринам вообще не видно, что подключено место, куда будет вставляться перевод.
Лучше юзать версию круптара 7.1.1.8
firefly23412:
perfect_genius, Guyver(X.B.M.), Ура! Я вычислил указатели. По формуле оффсет предложения полученный через дебаггер - оффсет того же предложения из рома. Универсальная цифра 10DC50. Прибавляется к оффсету предложения из рома и последние два байта перевернуть. Хекс-адрес указателей таким образом получается.
Как оказалось в Suikoden 2 четырёх-байтные указатели(длина) и идут они сразу после текста. Я читал итальянский мануал ромхакера Паблито, он пишет, что в первой игре тоже четырёх байтные указатели. (как и в фэнтези стар 4 на мегадрайв, упомянута им также)
Но вопрос. Подскажите пожалуйста. Если указатели идут СРАЗУ после текста и их длина 4 байта, какие параметры надо ставить в Круптаре? Конкретно. Разница смещений - автостарт? Так получается или нет?
Беларус учит русский:
Тут что-то странное. Какая логика в указателе в конце этого самого текста, на начало которого он и указывает? Обычно, есть массив из указателей на текстовые строки. Они могут указывать либо на первый символ текста, либо длину этого текста, после чего и идёт текст. Также сам текст часто кончается на какой-нибудь стоп-символ - обычно 0 или -1.
Ты либо вычислил адрес конца текстовой строки, либо указатель на длину последующей текстовой строки.
--- Цитата ---Универсальная цифра 10DC50
--- Конец цитаты ---
По этому адресу есть что-то? Это может быть адресом начала блока текстовых строк или массива указателей на эти строки.
firefly23412:
perfect_genius,
То число это разница из формулы вычисления из документа "Pointers in Playstation Games".
--- Цитата ---Next, we will find the text as it appears in the running game. Open the disc image using pSX. Navigate ingame to a place where text appears. Go Debug -> Monitor. View the memory. Go to File -> Save binary. Start address is 0 and size, in bytes, depends on the game. A value of 1000000 bytes is sufficent for Gundam GCentury. Open this created file in MadEdit. Search for the same text as in the PS-EXE. ?????? now appears at 000C1BC4. The difference in memory must be found to calculate pointers in the future: C1BC4-B23C4=F800. Pointers may now be found and created using this information.
--- Конец цитаты ---
Тут всё правильно. Всё верно массив из указателей после текста. Надо было мне уточнить.
Указатели указывают на первый символ предложений в тексте, на кавычки, все предложения начинаются с них.
... вообщем я прикрепил скриншот. И байты 10 80 это похоже байты "пустышки". Они просто стоят между указателями и ни к чему не привязаны. То есть длина указателя в игре получается не 4 байта, а два.
У меня всё равно Круптар с ошибкой загружает текст и я не могу понять, что я в настройках выставил или наоборот не выставил. Разницу смещений по формуле высчитал, интервал в 2 выставлял. Короче, пробовал разные настройки и во-первых, у меня текст очень долго грузится из рома и сам текст не разбит на отдельные предложения как должно быть.
В чём может быть ошибка?
firefly23412:
Странно, а в седьмом Круптаре всё нормально выводит. Почему так?
Почему в шестом у меня не получалось вывести по-нормальному. Может быть это связано с кодами разрыва строк/окончания строк??? Кто-нибудь знает где в шестой версии Круптар опции с ними. Просто сама то шестая версия программы не просит вводить их.
Навигация
Перейти к полной версии