Список форумов shedevr.org.ru shedevr.org.ru
Группа перевода приставочных игр "ШЕДЕВР"
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Разговор про поинтеры на GBA

 
Начать новую тему   Ответить на тему    Список форумов shedevr.org.ru -> Базовый ромхакинг
Предыдущая тема :: Следующая тема  
Автор Сообщение
АнС
RRC2008
RRC2008


Зарегистрирован: 08.11.2003
Сообщения: 2818

СообщениеДобавлено: Пт Авг 22, 2008 5:24 pm    Заголовок сообщения: Разговор про поинтеры на GBA Ответить с цитатой

По согласию собеседника выкладываю лог старого разговора про поинтеры в GBA-играх.
Может быть, кому-то из новичков пригодится. ;)

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

Сам РОМ я не видел, анализировал ситуацию умозрительно.
Но если кому-то не хватит воображения, вот название: "1380 - Bruce Lee - Return of the Legend (U).gba"

Суть разговора: мы с Lord_ForZeRock давно общались по Аське, и тут он решил перевести игру. Базовые знания о системах счисления и внутренностях ГБА у него были, но сначала он попробовал переводить с помощью ПокеПеревода. Но что-то там у него не вышло...

Цитата:
Lord_ForZeRock (21:36:45 4/06/2008)
привет

Lord_ForZeRock (21:39:13 4/06/2008)
слушай, помоги

Lord_ForZeRock (21:41:55 4/06/2008)
расскажи как удлинить слово erase например если выглядит это так:
153864 + @@SELECT @TO WAKE@NEW GAME@@@@ACT @@@@RESUME@@OPTIONS@QUIT@@@@CLEAR ALL@@@ERASE@@@LOAD@@@@RETURN@@SELECT A SLOT@@@ERASE A SLOT@@@@GAME PAUSED@NORMAL@@EASY@@@@DIRECTOR'S CUT@@TIME CHALLENGE@@SELECT MODE@SELECT OUTFIT@@@CLASSIC@FURY@@@@BRUCE '73@@@DRAGON@@GOLD@@@@CONTROLS@@@@SELECT CONTROLS@

Lord_ForZeRock (21:43:07 4/06/2008)
где @=00

Lord_ForZeRock (21:43:18 4/06/2008)
тьфу 00=@

АнС (21:46:08 4/06/2008)
поинтеры надо искать

АнС (21:46:29 4/06/2008)
хотя в данном случае ещё можно на две буквы увеличить за счёт двух нулей

АнС (21:46:49 4/06/2008)
заметил, там идёт выравнивание на чётность четвёрке?

Lord_ForZeRock (21:46:54 4/06/2008)
смотри что у меня есть:
00=@
02=`
03=%
04=$
0C=~
0A={

@ - пробелы для выравнивания?
` - начало текста-подсказок
% - выделение текста жёлтым(имена в диалоге, выделяется слово до пробела 20)
$ - начало теста-истории
~ - конец текста
{ - начало?

АнС (21:47:29 4/06/2008)
@ - это, как я поня, конец фразы

Lord_ForZeRock (21:47:58 4/06/2008)
154170 @@@KICK@@@@PUNCH@@@BLOCK@@@JUMP@@@@SAVE@@@@DEFAULT@DONE@@

АнС (21:48:09 4/06/2008)
вообще, сначала ром был забит нулями - т.е. в представлении твоей таблицы это было @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

АнС (21:48:30 4/06/2008)
потом в РОМ вставили эти фразы

АнС (21:48:48 4/06/2008)
где символ с нулевым значением означал конец фразы

АнС (21:48:53 4/06/2008)
ERASE A SLOT@

АнС (21:49:14 4/06/2008)
игра вставляет текст в диалоговое окно, пока не всттретит @
на NES было бы так: ERASE A SLOT@GAME PAUSED@...
А на GBA часто после символа конца мессаги есть пустое место: ERASE A SLOT@@@@GAME PAUSED@

Lord_ForZeRock (21:49:31 4/06/2008)
хм... понятно...

АнС (21:50:05 4/06/2008)
но на ГБА процессору легче читать данные с адреса, кратного четырём

АнС (21:50:27 4/06/2008)
т.е. с адресов типа 100, 104, 108, 10C, 110, 114 и т.д.

АнС (21:50:49 4/06/2008)
это в хекс-системе

Lord_ForZeRock (21:51:09 4/06/2008)
гм..... про хекс я понял но всё-равно в замешательстве....

АнС (21:51:17 4/06/2008)
поэтому следующая за ERASE A SLOT строка начинается не сразу же за @

АнС (21:51:40 4/06/2008)
не сразу а так, чтоб начинаться с адреса, кратного 4

Lord_ForZeRock (21:51:55 4/06/2008)
вроде понял

АнС (21:51:56 4/06/2008)
т.е., к примеру ERASE A SLOT начинается с адреса 100

Lord_ForZeRock (21:52:46 4/06/2008)
просто сейчас ром выглядит как транслитерированный на русский %)

АнС (21:52:46 4/06/2008)
в "ERASE A SLOT@" всего 13 символов (0Dh символов)

Lord_ForZeRock (21:52:57 4/06/2008)
ага

АнС (21:53:12 4/06/2008)
т.е. следующая фраза будет начинаться с адрсеа 110h

АнС (21:53:24 4/06/2008)
а вовсе не с адреса 10Eh

АнС (21:53:57 4/06/2008)
т.е. между фразами осталось пустое место

АнС (21:54:01 4/06/2008)
оно забито нулями

АнС (21:54:19 4/06/2008)
так случилось, что ноль в твоеё игре является одновременно и символом конца строки!

Lord_ForZeRock (21:54:42 4/06/2008)
круто однако

АнС (21:54:42 4/06/2008)
т.е. можно написать ERASE A SLOTTTT@

АнС (21:54:54 4/06/2008)
и игра корректно всё покажет

АнС (21:55:09 4/06/2008)
...но это всё тупо, по-нормальному надо поинтеры пересчитывать

АнС (21:55:19 4/06/2008)
ПП2 ведь умеет, вроде бы

Lord_ForZeRock (21:55:48 4/06/2008)
да ну его, он у меня не работает второй, я через winhex

АнС (21:56:16 4/06/2008)
ну какую тебе фразу надо удлинить?

Lord_ForZeRock (21:56:40 4/06/2008)
да сам попробую :)

АнС (21:57:12 4/06/2008)
?

АнС (21:57:37 4/06/2008)
я хотел показать на примере, а потом всё сам, конечно

Lord_ForZeRock (21:57:45 4/06/2008)
ну давай

Lord_ForZeRock (21:58:21 4/06/2008)
как тебе пример дать?

АнС (21:58:35 4/06/2008)
всё на словах

АнС (21:59:04 4/06/2008)
Как ты перевёл DEFAULT?

АнС (21:59:10 4/06/2008)
Как Сброс?

Lord_ForZeRock (21:59:11 4/06/2008)
@SELECT OUTFIT@@@CLASSIC@FURY@@@@BRUCE '73@@@DRAGON@@GOLD@@@@CONTROLS@@@@SELECT CONTROLS@
например CONTROLS, сейчас поищу адрес...

АнС (22:00:31 4/06/2008)
Ну УПРАВЛЕНИЕ@@ и так влезает в 12 символов

АнС (22:00:39 4/06/2008)
даже один символ остаётся

АнС (22:00:46 4/06/2008)
т.е. один байт пустой

Lord_ForZeRock (22:01:03 4/06/2008)
короче я пробую

АнС (22:01:22 4/06/2008)
что именно сейчас пробуешь?

Lord_ForZeRock (22:01:57 4/06/2008)
ради интереса УПРАВЛЕНИЕ

АнС (22:02:42 4/06/2008)
ну я ж говорю, неудачный пример

АнС (22:02:51 4/06/2008)
найди фразу, которая при переводе никак не влезает, где даже пустые промежутки не помогают

АнС (22:03:12 4/06/2008)
где либо после неё вообще нет пустого места до следующей фразы, либо этого места недостаточно

Lord_ForZeRock (22:04:27 4/06/2008)
@@SELECT @TO WAKE@NEW GAME@@@@ACT @@@@RESUME@
вроде TO WAKE

Lord_ForZeRock (22:05:06 4/06/2008)
УПРАВЛЕНИЕ работает кстати %)

АнС (22:05:20 4/06/2008)
ну там и без поинтеров ясно, что будет работать

АнС (22:05:33 4/06/2008)
как переводится TO WAKE?

Lord_ForZeRock (22:05:40 4/06/2008)
ПРОСНУТЬСЯ

АнС (22:05:40 4/06/2008)
что-то я вообще не понял фразу

АнС (22:05:56 4/06/2008)
а, спящий режим в ГБА...

Lord_ForZeRock (22:06:04 4/06/2008)
да, он самый

АнС (22:06:35 4/06/2008)
TO WAKE@ - 8 символов

АнС (22:06:47 4/06/2008)
ПРОСНУТЬСЯ@ - 11

АнС (22:06:52 4/06/2008)
ПРОСНУТЬСЯ@@ - 12, вот и кратно четырём. Значит, вместо 8 байт нужно 12, на 4 больше

АнС (22:07:39 4/06/2008)
занчит, потом в РОМе будет примерно так
@@SELECT @ПРОСНУТЬСЯ@@NEW GAME@@@@ACT @@@@RESUME@

АнС (22:08:02 4/06/2008)
т.е. после ПРОСНУТЬСЯ все фразы будут сдвинуты на 4 байта вперёд

Lord_ForZeRock (22:08:02 4/06/2008)
угу... но это же сдвинет....

Lord_ForZeRock (22:08:15 4/06/2008)
вот и я об этом...

АнС (22:08:15 4/06/2008)
т.е. адреса всех последующих фраз увеличатся на 4

АнС (22:08:32 4/06/2008)
а много там фраз после этой?

АнС (22:08:48 4/06/2008)
лично я давно уже вручную поинтеры не считаю

АнС (22:08:57 4/06/2008)
написал прогу ещё в 2003 году

АнС (22:09:07 4/06/2008)
Но в 2002 честно отсчитал кучу поинтеров в Rockin' Kats :)

Lord_ForZeRock (22:09:22 4/06/2008)
@@SELECT @TO WAKE@NEW GAME@@@@ACT @@@@RESUME@@OPTIONS@QUIT@@@@CLEAR ALL@@@ERASE@@@LOAD@@@@RETURN@@SELECT A SLOT@@@ERASE A SLOT@@@@GAME PAUSED@NORMAL@@EASY@@@@DIRECTOR'S CUT@@TIME CHALLENGE@@SELECT MODE@SELECT OUTFIT@@@CLASSIC@FURY@@@@BRUCE '73@@@DRAGON@@GOLD@@@@CONTROLS@@@@SELECT CONTROLS@

Lord_ForZeRock (22:09:56 4/06/2008)
хорошая игра, на новый год мне её как-то на двух игровке подарили...

АнС (22:10:48 4/06/2008)
Кстати, пункт RESUME тоже ведь не влезет после перевода?

Lord_ForZeRock (22:10:57 4/06/2008)
продолжить

Lord_ForZeRock (22:11:03 4/06/2008)
вернуться

АнС (22:11:10 4/06/2008)
поинтеры!

АнС (22:11:37 4/06/2008)
т.е. после RESUME все фразы ЕЩЁ на 4 байта сдвинутся

АнС (22:11:50 4/06/2008)
т.е. их адрес уже будет на 8 отличаться от оригинала

Lord_ForZeRock (22:11:51 4/06/2008)
*пошёл RTFM*

АнС (22:12:32 4/06/2008)
погоди

АнС (22:12:56 4/06/2008)
посмотри в РОМе - после GOLD@@@@CONTROLS@@@@SELECT CONTROLS@
что идёт? куча нулей?

АнС (22:13:01 4/06/2008)
пустое место?

Lord_ForZeRock (22:14:20 4/06/2008)
нет

АнС (22:14:32 4/06/2008)
у, а что там?

Lord_ForZeRock (22:16:25 4/06/2008)
00 41 00 00 00 42 ну то есть пиктограммы кнопок, потом ещё части меню типа SLOW MOTION и так до начала текста истории вставок

Lord_ForZeRock (22:16:35 4/06/2008)
ищу

АнС (22:16:44 4/06/2008)
что ищешь?

Lord_ForZeRock (22:17:08 4/06/2008)
в роме, у меня ж не англицкая таблица там сейчас работает

Lord_ForZeRock (22:17:48 4/06/2008)
вот

АнС (22:17:58 4/06/2008)
вопрос был не ГДЕ, а ЧТО

АнС (22:18:08 4/06/2008)
поинтер ищешь?

АнС (22:18:32 4/06/2008)
если поинтер, то поинтер на какую фразу?

Lord_ForZeRock (22:18:36 4/06/2008)
ну то что после "посмотри в РОМе - после GOLD@@@@CONTROLS@@@@SELECT CONTROLS@
что идёт? куча нулей?"

Lord_ForZeRock (22:18:44 4/06/2008)
я же из дампа брал

АнС (22:19:04 4/06/2008)
так ты это не нашёл в РОМе??

АнС (22:19:17 4/06/2008)
я думал, ты мне из винхекса и скопировал

Lord_ForZeRock (22:19:24 4/06/2008)
уже нашёл и сказал тебе что после этого

АнС (22:20:22 4/06/2008)
дальше текст, значит....ё

АнС (22:20:35 4/06/2008)
слушай, а вообще в РОМе есть пустое место где-то?

Lord_ForZeRock (22:20:45 4/06/2008)
в самом конце

АнС (22:20:50 4/06/2008)
много там?

АнС (22:21:40 4/06/2008)
есть предложение - если поинтеры "абсолютные", то можно не пересчитывать весь текстовый блок фраз, а перенести часть фраз из общего скопления в пустое место

Lord_ForZeRock (22:21:45 4/06/2008)
7С36С0-7FFFF0

АнС (22:21:51 4/06/2008)
о, это много, хватит на всё

АнС (22:22:01 4/06/2008)
короче, смотри, что делаем

Lord_ForZeRock (22:22:32 4/06/2008)
ищем указатели начала блока меню и тащим их в конец рома?

АнС (22:22:58 4/06/2008)
@@SELECT @ПРОСНУТЬСЯ@ффффф@@@@ACT @@@@RESUME@

АнС (22:23:03 4/06/2008)
нет

АнС (22:23:11 4/06/2008)
не надо весь блок переносить!

АнС (22:23:32 4/06/2008)
тогда пришлось бы всё равно пересчитывать все фразы после ПРОСНУТЬСЯ

Lord_ForZeRock (22:23:59 4/06/2008)
"Нео, проснись..."

АнС (22:24:02 4/06/2008)
короче, давай ты щас по инструкции всё сделаешь, а потом я объясню, если что не понятно

АнС (22:24:07 4/06/2008)
ок?

Lord_ForZeRock (22:24:10 4/06/2008)
давай

АнС (22:24:26 4/06/2008)
закрой ПП и работай только в винхексе

Lord_ForZeRock (22:24:44 4/06/2008)
давно, мне только таблицу генерить он помогал %)

АнС (22:24:57 4/06/2008)
найди место с этим текстом @@SELECT @TO WAKE@NEW GAME@@@@ACT @@@@RESUME@@OPTIONS@

АнС (22:25:14 4/06/2008)
и встань курсором на букву N в фразе NEW GAME

АнС (22:25:30 4/06/2008)
какой адрес буквы? (а значит и адрес начала фразы NEW GAME)

Lord_ForZeRock (22:25:37 4/06/2008)
2591С

АнС (22:25:57 4/06/2008)
т.е. игра это представляет как 0802591C

Lord_ForZeRock (22:26:27 4/06/2008)
скорее 0002591С

АнС (22:26:42 4/06/2008)
08 - это префикс

АнС (22:26:49 4/06/2008)
это в ГБА такие префиксы есть

Lord_ForZeRock (22:27:01 4/06/2008)
понятно

АнС (22:27:17 4/06/2008)
03 - ОЗУ, 05 - палитра, 06 - тайлы, 08 - РОМ

Lord_ForZeRock (22:27:34 4/06/2008)
про палитру знал %)

АнС (22:27:45 4/06/2008)
теперь встань курсором в начало рома и запусти функцию find hex

АнС (22:27:55 4/06/2008)
не помню, где она там в винхексе

АнС (22:28:06 4/06/2008)
но поиск шестнадцатиричной последовательности долженбыть

Lord_ForZeRock (22:28:09 4/06/2008)
ну есть

АнС (22:28:47 4/06/2008)
ищем поинтер на 0802591C

АнС (22:29:04 4/06/2008)
теория: поинтеры в ГБА пишутся задом наперёд

Lord_ForZeRock (22:29:18 4/06/2008)
то есть?

АнС (22:29:20 4/06/2008)
т.е. не 08 02 59 1С, а 1C 59 02 08

АнС (22:29:38 4/06/2008)
ну четыре байта идёт справа налево

АнС (22:29:46 4/06/2008)
а не слева направо, как обычно принято

Lord_ForZeRock (22:29:48 4/06/2008)
да это я понял

АнС (22:30:05 4/06/2008)
вот и вводи в find hex строку 1C 59 02 08

Lord_ForZeRock (22:30:21 4/06/2008)
есть

АнС (22:30:21 4/06/2008)
и запускай поиск

АнС (22:30:26 4/06/2008)
нашёл уже?

Lord_ForZeRock (22:30:31 4/06/2008)
да

АнС (22:30:36 4/06/2008)
а нажми find next - может, ещё есть поинтер дальше в РОМе

Lord_ForZeRock (22:31:01 4/06/2008)
неа, говорит нету больше

АнС (22:31:13 4/06/2008)
ну и слава богу :)

АнС (22:31:22 4/06/2008)
и какой адрес у поинтера?

АнС (22:31:29 4/06/2008)
адрес байта со значением 1C

Lord_ForZeRock (22:31:37 4/06/2008)
28980

АнС (22:31:47 4/06/2008)
а рядом там тоже поинтеры лежат?

АнС (22:31:59 4/06/2008)
Там похоже, что это скопление поинтеров в РОМе?

АнС (22:32:17 4/06/2008)
поинтеры легко опознать по 08 в каждом четвёртом байте

Lord_ForZeRock (22:32:28 4/06/2008)
тогда это они

АнС (22:32:30 4/06/2008)
обычно там целые столбцы

АнС (22:32:39 4/06/2008)
друг за другом идут

Lord_ForZeRock (22:32:45 4/06/2008)
угу, туча

АнС (22:32:56 4/06/2008)
какой поинтер идёт за нашим?

АнС (22:33:12 4/06/2008)
т.е. какой поинтер лежит по адрсеу 28984 ?

Lord_ForZeRock (22:33:20 4/06/2008)
28

АнС (22:33:32 4/06/2008)
что 28?

Lord_ForZeRock (22:33:44 4/06/2008)
просто так %)

АнС (22:33:52 4/06/2008)
приборы Ж)

Lord_ForZeRock (22:33:57 4/06/2008)
нужно глянуть

АнС (22:34:29 4/06/2008)
ты просто скопируй мне хекс-значения с адреса 28984 по 28987

АнС (22:34:43 4/06/2008)
должно быть 4 байта

Lord_ForZeRock (22:34:46 4/06/2008)
28590208

АнС (22:35:59 4/06/2008)
так, 28 59 02 08 - это ж поинтер на 08025928

АнС (22:36:12 4/06/2008)
а что у нас в РОМе по адресу 025928 ?

Lord_ForZeRock (22:36:52 4/06/2008)
ACT @@@@RESUME@@

АнС (22:37:03 4/06/2008)
т.е. там фраза ACT @

Lord_ForZeRock (22:37:12 4/06/2008)
да

АнС (22:37:32 4/06/2008)
значит это мы и нашли таблицу поинтеров - т.е. когда один за другим идут поинтеры на каждую последующую фразу

Lord_ForZeRock (22:38:10 4/06/2008)
круто, думаю повезло что тут практически всё в роме не пожато никак %)

АнС (22:38:35 4/06/2008)
да поинтеры редко когда жмут

АнС (22:38:43 4/06/2008)
поинтеры мало места занимают

АнС (22:38:55 4/06/2008)
чаще сами ресурсы жмут - текст, графику

АнС (22:39:08 4/06/2008)
в общем, смотри, что дальше делаем

АнС (22:39:59 4/06/2008)
по адресу 25914 напиши PROSNUTYSA@

АнС (22:40:29 4/06/2008)
потом составишь русскую таблицу и напишешь по-русски, сейчас главное с поинтерами разобраться

АнС (22:40:44 4/06/2008)
щас нужно просто написать фразу той же длины

АнС (22:41:14 4/06/2008)
PROSNUTYSA@ - столько же букв, сколько в ПРОСНУТЬСЯ@

АнС (22:41:27 4/06/2008)
написал?

Lord_ForZeRock (22:41:50 4/06/2008)
нет, погоди, это вместо вэйк ап, да?

АнС (22:41:55 4/06/2008)
да

АнС (22:42:17 4/06/2008)
по адресу 25914 лежал WAKE UP@

АнС (22:42:38 4/06/2008)
написал?

Lord_ForZeRock (22:43:06 4/06/2008)
NEW GAME при этом затереть?

АнС (22:43:16 4/06/2008)
ну фиг с ней

АнС (22:43:29 4/06/2008)
часть затрётся, остальное не трогай

Lord_ForZeRock (22:43:57 4/06/2008)
есть

АнС (22:44:02 4/06/2008)
сохрани

Lord_ForZeRock (22:44:13 4/06/2008)
есть

АнС (22:44:17 4/06/2008)
теперь предугадай, что будет в игре на месте фразы NEW GAME

АнС (22:44:24 4/06/2008)
не смотри в эмуль пока!

АнС (22:44:42 4/06/2008)
ну ясно, что на месте WAKE UP в игре теперь будет выведено PROSNUTYSA...

Lord_ForZeRock (22:44:48 4/06/2008)
обрезанный нью гейм %)

АнС (22:44:58 4/06/2008)
обломись :)

АнС (22:45:14 4/06/2008)
ты же поставил символ конца строки после PROSNUTYSA?

Lord_ForZeRock (22:45:21 4/06/2008)
да

АнС (22:45:35 4/06/2008)
какая часть влезла на территорию NEW GAME?

Lord_ForZeRock (22:45:53 4/06/2008)
ну осталось GAME

АнС (22:46:01 4/06/2008)
не важно, что осталось

АнС (22:46:22 4/06/2008)
что от PROSNUTYSA@ попало на место NEW?

АнС (22:46:34 4/06/2008)
* на место NEW GAME@

Lord_ForZeRock (22:46:48 4/06/2008)
YSA@

АнС (22:47:04 4/06/2008)
чёт ты считаешь неправильно

АнС (22:47:26 4/06/2008)
что начинается с адреса, с которого раньше начиналась NEW GAME@?

АнС (22:47:40 4/06/2008)
что начинается с адреса 2591C ?

АнС (22:50:42 4/06/2008)
какая часть фразы вылезла на 2591С?

АнС (22:51:07 4/06/2008)
я так понимаю, первые восемь букв не вылезли, всё остальное вылезло

АнС (22:51:39 4/06/2008)
так?

Lord_ForZeRock (22:51:55 4/06/2008)
в самой игре?

АнС (22:52:01 4/06/2008)
в хекс-редакторе

Lord_ForZeRock (22:52:13 4/06/2008)
угу

АнС (22:52:17 4/06/2008)
в игре всё будет нормально (кроме фразы NEW GAME)

Lord_ForZeRock (22:52:31 4/06/2008)
там YA

АнС (22:52:40 4/06/2008)
вместо фразы NEW GAME должно быть SA

Lord_ForZeRock (22:53:12 4/06/2008)
а, точно, я написал PROSNUTSYA

АнС (22:53:45 4/06/2008)
в общем, ты понял, почему так?

Lord_ForZeRock (22:54:01 4/06/2008)
не оч

АнС (22:54:38 4/06/2008)
когда игра хочет показать фразу NEW GAME, она читает из большой таблицы поинтер по адресу 28980

Lord_ForZeRock (22:54:48 4/06/2008)
да

Lord_ForZeRock (22:55:20 4/06/2008)
и берёт кусок до @?

АнС (22:55:39 4/06/2008)
тогда она, соглано указаниям поинтера, начинает всё подряд писать из РОМа (по адресу, 2591С) на экран, пока не встретит 00

Lord_ForZeRock (22:56:00 4/06/2008)
угу, я так и понял

АнС (22:56:34 4/06/2008)
так что с остатком " GAME@@@@" как с пустым местом - игра его не увидит

АнС (22:57:17 4/06/2008)
так, что ж делать с NEW GAME...

АнС (22:57:32 4/06/2008)
надо перенести эту фразу на 4 байта вперёд

Lord_ForZeRock (22:57:58 4/06/2008)
угу, передвинуть поинтер и т.д. и т.д.?

АнС (22:57:58 4/06/2008)
т.е. пусть нью гейм теперь начинается с адреса 25920

АнС (22:58:30 4/06/2008)
ну да, только поинтер надо не двигать, а менять

АнС (22:58:39 4/06/2008)
там 1C переправить на 20

Lord_ForZeRock (22:58:54 4/06/2008)
угууу

АнС (22:59:02 4/06/2008)
запарно каждую фразу менять?

Lord_ForZeRock (22:59:15 4/06/2008)
а может просто перетащить в конец уже?

АнС (22:59:26 4/06/2008)
вот о чём я и говорил :)

АнС (23:01:01 4/06/2008)
забей на остаток " GAME@@@@" и по адресу, например, 7С3700 пиши NOVAY IGRA@

АнС (23:01:48 4/06/2008)
(чтоб длина фразы была как в НОВАЯ ИГРА - 10 символов + символ конца строки)

Lord_ForZeRock (23:01:56 4/06/2008)
попробуем-с

АнС (23:02:20 4/06/2008)
как напишешь и сохранишь - сообщи

Lord_ForZeRock (23:03:44 4/06/2008)
ога

АнС (23:04:32 4/06/2008)
теперь меняй поинтер, лежащий по адресу 28980 с 1C 59 02 08 на 00 37 7C 08

АнС (23:04:50 4/06/2008)
Понятно, откуда взялось 00 37 7C 08 ?

Lord_ForZeRock (23:05:37 4/06/2008)
реверс

АнС (23:06:02 4/06/2008)
byteswap

Lord_ForZeRock (23:06:13 4/06/2008)
не выговорю

АнС (23:06:33 4/06/2008)
ну как в игре, работает?

АнС (23:06:45 4/06/2008)
видно NOVAY IGRA?

Lord_ForZeRock (23:07:05 4/06/2008)
погоди, не то меняем...

АнС (23:07:14 4/06/2008)
как не то?

Lord_ForZeRock (23:07:25 4/06/2008)
кажется, 1C 59 02 08 было вэйк ап

АнС (23:07:41 4/06/2008)
не

АнС (23:07:51 4/06/2008)
вейк ап было 14 59 02 08

АнС (23:08:05 4/06/2008)
смотри по адресу WAKE UP

Lord_ForZeRock (23:08:16 4/06/2008)
точно, я с тобой запутываюсь...

АнС (23:08:40 4/06/2008)
ну как, работает?

Lord_ForZeRock (23:09:34 4/06/2008)
ога! :)

Lord_ForZeRock (23:10:08 4/06/2008)
метод работает :)

АнС (23:10:28 4/06/2008)
ну тогда фразу после RESUME тоже перенесёшь на адрес 7C3710

АнС (23:10:47 4/06/2008)
раз места полно, не обязательно лепить их друг к другу

АнС (23:10:59 4/06/2008)
А вот начинаться с адреса, кратного 4 они обязаны

Lord_ForZeRock (23:11:38 4/06/2008)
понятно, думаю теперь я смогу это безобразие разобрать :)

АнС (23:11:53 4/06/2008)
это тебе повезло, что поинтеры абсолютные

Lord_ForZeRock (23:12:03 4/06/2008)
угу

АнС (23:12:05 4/06/2008)
на ГБА так часто бывает

АнС (23:12:13 4/06/2008)
а вот на НЕС и СНЕС никогда :(

АнС (23:12:22 4/06/2008)
там все поинтеры относительные

АнС (23:12:36 4/06/2008)
представляют собой смещение от начала текстового блока

АнС (23:12:52 4/06/2008)
поинтер на самую первую фразу игры равен 00 00

АнС (23:13:12 4/06/2008)
на вторую - уже, скажем, 00 0С и т.д.

АнС (23:13:28 4/06/2008)
там двухбайтные поинтеры, а не четырёхбайтные

АнС (23:13:46 4/06/2008)
в общем, с Брюсом Ли, думаю, ты справишься Smile


Последний раз редактировалось: АнС (Пн Авг 25, 2008 3:45 pm), всего редактировалось 2 раз(а)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Пт Авг 22, 2008 7:01 pm    Заголовок сообщения: Ответить с цитатой

Замечание по поиску в WinHex: не 'переворачивая' поинтер кликаем Search>Integer Value и пишем $08хххххх Razz
З.Ы. Круптар рулит Razz
_________________
Работаю за деньги
KILL ALL HUMANS!!!!!111
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
LarryDC



Зарегистрирован: 16.04.2009
Сообщения: 3

СообщениеДобавлено: Чт Апр 16, 2009 9:37 am    Заголовок сообщения: Ответить с цитатой

Вот решил игру первести Tactic Ogre, все готово к переводу:
таблица сделана, шрифт перерисован, текст извлечён.
Но вот проблема с поинтерами, все делал как автор темы описывал, допустим у меня адресс 0878823B, переворачиваю и в поиске хекс значений 3B827808, но пишет что нет такой строки.
Что я неправильно сделал?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
LarryDC



Зарегистрирован: 16.04.2009
Сообщения: 3

СообщениеДобавлено: Чт Апр 16, 2009 1:05 pm    Заголовок сообщения: Ответить с цитатой

Теперь понял в чем проблема!!!
Решил попробовать с именами героев, нашел адрес перевернул его ввел в поиске и бах наткнулся на поинтер на целую таблицу! Где в другой поинтер указывает на следующее имя героя и т.д.
Но вот с диалогами игры все куда сложнее, делаю тоже самое но поинтеры ненаходит!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
gegmopo3



Зарегистрирован: 21.08.2006
Сообщения: 233
Откуда: Красноярск

СообщениеДобавлено: Чт Апр 16, 2009 1:13 pm    Заголовок сообщения: Ответить с цитатой

Может там на определенный блок текста показывает
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
LarryDC



Зарегистрирован: 16.04.2009
Сообщения: 3

СообщениеДобавлено: Чт Апр 16, 2009 10:21 pm    Заголовок сообщения: Ответить с цитатой

Уже все перепробовал, что знаю PokePerevod тоже не помог, пацаны подскажите плиз. А то уже нашел двух пацаненков и дал им текст для перевода, а вот с поинтерами проблема.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Михалыч



Зарегистрирован: 14.06.2009
Сообщения: 5

СообщениеДобавлено: Вс Июн 14, 2009 9:49 pm    Заголовок сообщения: Ответить с цитатой

Вообще, очень полезная беседа по аське, но я почему-то не могу найти поинтеры по такой схеме, что я неправильно делаю не могу понять. Опишу все по порядку может кто и подскажет мне что не так:
Работаю в Tranlhexion'e
1. Вычисляю поинтер для строки где находится текст, у меня выходила например такая строка 415B60, откуда вычислял значение 60 5B 41 08.
2. Полученное значение вбивал в поиск и не находил ничего Sad
Возможно у меня неправильный алгоритм поиска поинтеров на GBA или я не очень разбираюсь в Хекс адресах...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
АнС
RRC2008
RRC2008


Зарегистрирован: 08.11.2003
Сообщения: 2818

СообщениеДобавлено: Вс Июн 14, 2009 10:48 pm    Заголовок сообщения: Ответить с цитатой

Иногда даже на GBA по-старинке вместо абсолютных поинтеров используются относительные смещения.
Попробуй найти указатель на начало блока текста (уж он-то должен быть абсолютным), а дальше надо смотреть и экспериментировать. Либо в дебаггере отловить код обращения к текстовым ресурсам, но это уже не базовый ромхакинг.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Вс Июн 14, 2009 11:07 pm    Заголовок сообщения: Ответить с цитатой

Почему же по-старинке? Наоборот, это может быть признаком наличия хоть какой-то организации данных, а не целиком скомпилированного РОМа. Такой блок можно вырезать, засунуть в другое место и перебить лишь один указатель на его начало Smile
_________________
Работаю за деньги
KILL ALL HUMANS!!!!!111
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Михалыч



Зарегистрирован: 14.06.2009
Сообщения: 5

СообщениеДобавлено: Вс Июн 14, 2009 11:26 pm    Заголовок сообщения: Ответить с цитатой

А у меня по прежнему подозрения на то что я просто неправильно вычисляю поинтеры Smile Раз уж такое дело, АнС можно тебя попросить проверить это? Ниже приложу более детальный пример как я это делаю, а ты в свою очередь подтвердишь правильно ли это или нет.
Пример не из диалогов игры, а просто текст менюшек различных. В общем к примеру я пытаюсь найти поинтер для вот такой вот строки текста в роме GBA:
=====+===================
415B78| ########| # NEXT| # NE
415B90| XT ##BACK| ##PICK # NEX
415BA8| T ##CANCEL| ##PICK # ##C
415BC0| ANCEL| # EXIT|BOY|GIRL|
Символ # - неизвестный символ, | - символ конца строки, стоп-байт как его еще не помню где называют Smile
Короче искал поинтер для выделенных 2 слов BOY, GIRL. Они находятся в одной строке с номером 415BC0 и я делал как написано было в твоем разговоре по аське, а именно:
415BC0 = 08415BC0 = 08 41 5B C0 = C0 5B 41 08
Выделенные строки вводил в поиск в надежде найти таблицу поинтеров, но безрезультатно Sad
Надеюсь ты подскажешь что-нибудь.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
АнС
RRC2008
RRC2008


Зарегистрирован: 08.11.2003
Сообщения: 2818

СообщениеДобавлено: Пн Июн 15, 2009 9:16 am    Заголовок сообщения: Ответить с цитатой

Михалыч писал(а):
Короче искал поинтер для выделенных 2 слов BOY, GIRL. Они находятся в одной строке с номером 415BC0 и я делал как написано было в твоем разговоре по аське


Что за бред? Где в том разговоре было написано, что нужно брать адрес начала абзаца? Адрес начала строки "BOY" - 415BCC, а "GIRL" - 415BD0.

Как вообще может быть одинаковый поинтер на две разных строки? Между BOY и GIRL стоит символ конца строки, значит это не одна строка, а две разных, и у каждой свой поинтер.

Похоже, ты ещё даже не освоил суть работы с хекс-редактором.

Кстати, судя по 415B78, 415B90, 415BA8, 415BC0, у тебя вид редактора настроен на отображение 24 символов в строчке, лучше переставь на 16 символов, чтобы было 415B70, 415B80, 415B90, 415BA0, 415BB0, 415BC0.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Михалыч



Зарегистрирован: 14.06.2009
Сообщения: 5

СообщениеДобавлено: Пн Июн 15, 2009 1:07 pm    Заголовок сообщения: Ответить с цитатой

Спасибо, я ж говорил что путаюсь в этих адресах, в редакторе действительно нельзя определить адрес начала строки, т.к. при дампе выбивает именно это 415BC0. Попробую сделать как ты сказал.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Пн Июн 15, 2009 1:19 pm    Заголовок сообщения: Ответить с цитатой

Цитата:
в редакторе действительно нельзя определить адрес начала строки

Вот это уж точно бред.
_________________
Работаю за деньги
KILL ALL HUMANS!!!!!111
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Михалыч



Зарегистрирован: 14.06.2009
Сообщения: 5

СообщениеДобавлено: Пн Июн 15, 2009 2:14 pm    Заголовок сообщения: Ответить с цитатой

Цитата:
Вот это уж точно бред.

Согласен, действительно туплю Smile
В общем нашел поинтеры для BOY и GIRL, но не уверен что я напоролся на таблицу поинтеров, т.к. значения рядом с моими поинтерами не слишком напоминают ее, т.е. у меня получились 2 поинтера CF5B4108 и D35B4108, далее идут строки 7DFF1208, вроде как поинтер на следующее слово, но потом уже идет совсем не то 105B0006, 040EDFF7, 2BFD0006 и т.д. Боюсь придется искать поинтер для каждой части текста где будет нужно удлинить его, может и напорюсь где-то на табличку.
АнС, спасибо тебе большое, очень помог Very Happy
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Пн Июн 15, 2009 3:35 pm    Заголовок сообщения: Ответить с цитатой

Таблицы может и не быть, бывает и такое. В таком случае могу посоветовать лишь PointerSearcher...
_________________
Работаю за деньги
KILL ALL HUMANS!!!!!111
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Михалыч



Зарегистрирован: 14.06.2009
Сообщения: 5

СообщениеДобавлено: Пн Июн 15, 2009 4:50 pm    Заголовок сообщения: Ответить с цитатой

Да, действительно таблицы со всеми поинтерами нет, но все-таки одну закономерность нашел - над каждым блоком текста в РОМе находятся его поинтеры. Короче, наконец-то я решил с вашей помощью эту проблему, когда у меня не умещались русские слова в английские строки, спасибо всем большущее.

P.S. А что за PointerSearcher, он вычисляет и находит поинтеры автоматом? Я просто слышал что есть еще какой-то Круптар, вроде даже как твоя прога HoRRoR, что посоветуешь?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Пн Июн 15, 2009 5:13 pm    Заголовок сообщения: Ответить с цитатой

Круптар - прога Джинна, очень хороший инструмент для работы с текстами и поинтерами. Я бы даже сказал, лучший в своём роде, хотя и он далёк от идеала.
А PointerSearcher - да, моя прога, ищет указатели по тексту - надо лишь правильно настроить и он найдёт все указатели. Затем их можно будет скормить Круптару и получишь полноценный блок текста.
_________________
Работаю за деньги
KILL ALL HUMANS!!!!!111
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов shedevr.org.ru -> Базовый ромхакинг Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group