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

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



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

СообщениеДобавлено: Пн Янв 29, 2007 1:58 am    Заголовок сообщения: Пойнтеры - великие и ужасные Ответить с цитатой

Перевожу игру на SNESе (вернее практически перевел Very Happy ), да вот только меню вызывает много нехороших чувств и слов Twisted Evil . Некоторые пункты меню получаются больше оригинала, что есть очень плохо, думал пойнтеры помогут начитался доков и полез вычислять их, вычислил но в итоге бред какой-то получается Sad .
И кто-нить может нормально объяснить как потом после вычисления эти указатели использовать, куда их вставлять и т.д. Приведу конкретный пример моего меню:
    03big08mountain04....

и т.д., т.е. 03h и 08h обозначают кол-во символов которые могут быть в слове. Перед этим текстом идут такие пары ...5x 5x 6x 6x 7x 7x... если их изменить то меняются строки меню, может енто и есть эти самые ужасные пойнтеры Question . Опять же назад к примеру при переводе получится ...03большая08гора... , т.е. в первом слове места не хватает, а во втором оно есть так вот как его использовать что-бы первое слово нормально написать?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
gottax



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

СообщениеДобавлено: Пн Янв 29, 2007 8:12 am    Заголовок сообщения: Ответить с цитатой

Во-первых, напиши название игры. Тогда можно будет сказать точно, что и как.
Во-вторых, ты же сам пишешь:
Цитата:
т.е. 03h и 08h обозначают кол-во символов которые могут быть в слове

Тогда просто напиши: 07большая04гора.

В-третьих,
Цитата:
Перед этим текстом идут такие пары ...5x 5x 6x 6x 7x 7x... если их изменить то меняются строки меню

Это, вероятно, младшие байты поинтеров. Правда, из твоих объяснений сложно сделать однозначный вывод. Так что см. п.1.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Overlord



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

СообщениеДобавлено: Пн Янв 29, 2007 2:37 pm    Заголовок сообщения: Ответить с цитатой

Игра под названием "Demon's Crest".
Цитата:
Тогда просто напиши: 07большая04гора.

Если бы все было так просто я бы так и написал Very Happy , но если написать 07....04... то получим в р-те что-то очень страшное Twisted Evil
    большая
    ьшая*гора + (куча разных строк)
    *-козебряка соответствующая 04h

Т.е. первое слово я могу так написать а второе все-равно начинается с того места где начиналось в английском варианте Exclamation , да и еще добавляется куча ненужного мусора.

Надеюсь написал понятно Wink
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
gottax



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

СообщениеДобавлено: Пн Янв 29, 2007 6:02 pm    Заголовок сообщения: Ответить с цитатой

Эй, а версия игры какая?

Тебе точно нужно вычислять указатели? Может ты имеешь в виду находить (т.е. найти адрес, по которому указатель на нужную строку находится в роме)? На SNES указатели относительные. Это значит, что реальный адрес строки состоит из базового адреса + значение указателя.
После того как увеличил длину строки, изменяешь значение найденного указателя по нужному адресу. В итоге игра начинает считывать изменённую тобой строку относительно того значения, которое ты записал в указателе на эту строку.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Overlord



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

СообщениеДобавлено: Пн Янв 29, 2007 9:26 pm    Заголовок сообщения: Ответить с цитатой

Demon's Crest (U) [!]

Короче раньше я пойнтерами НИКОГДА не пользовался (не доводилось Smile ), поэтому мне просто надо найти место для написания слова, как енто сделать я НЕ ЗНАЮ Embarassed (вернее знаю но не получается) . В доках написано много всего, но когда переходишь к практике то ничего не выходит. Т.е. в моем примере меню состоит из слов Attack Jump и т.д. Смещение у буквы "A" 96DBh (т.е. пойнтер будет 94DB Question ) у буквы "J" 96E2h (пойнтер 94E2), потом пытаюсь найти таблицу пойнтеров и .... все процесс нахождения закончен из-за невозможности нахождения таких пар байтов Rolling Eyes
ЗЫ. Может я их не так высчитываю Sad
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
АнС
RRC2008
RRC2008


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

СообщениеДобавлено: Пн Янв 29, 2007 11:28 pm    Заголовок сообщения: Ответить с цитатой

Помнится, на одном из сайтов magicteam долгое время висел проект перевода этой игры, но потом куда-то исчез. Может быть, Джину есть что сказать по теме. Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
gottax



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

СообщениеДобавлено: Вт Янв 30, 2007 8:52 am    Заголовок сообщения: Ответить с цитатой

У менюшных строк отсутствует стоп-байт, так что поинтер должен указывать на байт перед ним, чтобы игра могла знать, сколько байт ей считывать в строку. Но относительный поиск ничего не дал. Sad Возможно, указатели разбросаны, а возможно тут более трудный случай. Надо копать глубже.

Кстати, твой способ вычиления указателей (простым отниманием хедера от адреса строки) очень сомнителен. Мне, например, не встречались игры на SNES, в которых значения указателей соответствовали бы этой формуле. Кроме заголовка всегда присутствует ещё какое-то дополнительное смещение относительно реального адреса строки.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
АнС
RRC2008
RRC2008


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

СообщениеДобавлено: Вт Янв 30, 2007 9:17 am    Заголовок сообщения: Ответить с цитатой

Да это всё старые доки дезориентируют народ. Sad
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Гость






СообщениеДобавлено: Вт Янв 30, 2007 11:08 am    Заголовок сообщения: Ответить с цитатой

АнС писал(а):
Помнится, на одном из сайтов magicteam долгое время висел проект перевода этой игры, но потом куда-то исчез. Может быть, Джину есть что сказать по теме. Smile

Он и сейчас там висит.
Пойнтеры на текст диалогов находятся по адресу 8C49.
Пойнтеры на текст интро находятся по адресу 1E0200.
Пойнтеры на фразы босса и ещё кого-то мне найти не удалось.
Это было 2 года назад. Думаю, они находятся прямо в программном коде. Чтобы найти их, нужен debug.
Вернуться к началу
Djinn
RRC2008
RRC2008


Зарегистрирован: 16.03.2004
Сообщения: 633
Откуда: Москва

СообщениеДобавлено: Вт Янв 30, 2007 11:10 am    Заголовок сообщения: Ответить с цитатой

Что-то форум меня не признал.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
HoRRoR
RRC2008
RRC2008


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

СообщениеДобавлено: Вт Янв 30, 2007 2:06 pm    Заголовок сообщения: Ответить с цитатой

Djinn писал(а):
Чтобы найти их, нужен debug.

Совсем необязательно. Четыре раза(Crimsonland, DSA(посвящённые знают Smile ), Pac-Man 2 и Toejam & Earl 2) с таким сталкивался и обходился без дебага. В случае с Кримсой и DSA искал вручную - на поиск одного поинтера уходило ~5 сек(больше на запись Smile ), а в остальных писал прогу для поиска - очень мала вероятность, что сеговский абсолютный четырёхбайтный поинтер(вернее, адрес в команде) будет равен набору каких-нить левых четырёх байт.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
gottax



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

СообщениеДобавлено: Вт Янв 30, 2007 2:27 pm    Заголовок сообщения: Ответить с цитатой

HoRRoR, раскрой глаза пошире - это снесовская игра, абсолютных указателей тут и в помине нет.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Overlord



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

СообщениеДобавлено: Вт Янв 30, 2007 3:10 pm    Заголовок сообщения: Ответить с цитатой

Цитата:
Да это всё старые доки дезориентируют народ

удалить надо эту дезу Very Happy

Цитата:
Пойнтеры на текст интро находятся по адресу 1E0200.

Пойнтеров там быть не может, т.к. там сам текст интро идет! Да и при переводе интро пойнтеры не нужны там места хватит на 2 таких интро :D

Цитата:
Кстати, твой способ вычиления указателей (простым отниманием хедера от адреса строки) очень сомнителен.

Тогда объясните нормальным языком как их вычислять Sad
Читал доки про пойнтеры на инглише, там тоже через отнимание хедера и т.д., правда пару раз встречал что там надо было еще что-то добавлять, считать... короче что-то непонятное Embarassed
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
HoRRoR
RRC2008
RRC2008


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

СообщениеДобавлено: Вт Янв 30, 2007 3:15 pm    Заголовок сообщения: Ответить с цитатой

gottax писал(а):
HoRRoR, раскрой глаза пошире - это снесовская игра, абсолютных указателей тут и в помине нет.

А почему они должны быть абсолютные? С относительными это тоже спокойно проходит(DSA - относительные двухбайтовые, Crimsonland - размер не помню, но относительные).
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Djinn
RRC2008
RRC2008


Зарегистрирован: 16.03.2004
Сообщения: 633
Откуда: Москва

СообщениеДобавлено: Вт Янв 30, 2007 5:14 pm    Заголовок сообщения: Ответить с цитатой

Overlord писал(а):
Пойнтеров там быть не может, т.к. там сам текст интро идет! Да и при переводе интро пойнтеры не нужны там места хватит на 2 таких интро Very Happy

Нужны там пойнтери или нет, но в моём роме они именно там. Возможно у тебя ром без заголовка. У меня текст интро начинается с адреса 1E0284 - как раз после таблицы пойнтеров.

HoRRoR писал(а):
Совсем необязательно. Четыре раза(Crimsonland, DSA(посвящённые знают ), Pac-Man 2 и Toejam & Earl 2) с таким сталкивался и обходился без дебага. В случае с Кримсой и DSA искал вручную - на поиск одного поинтера уходило ~5 сек(больше на запись ), а в остальных писал прогу для поиска - очень мала вероятность, что сеговский абсолютный четырёхбайтный поинтер(вернее, адрес в команде) будет равен набору каких-нить левых четырёх байт.

Я разбираюсь в пойнтерах, и знаю как их искать. На тот момент найти их мне не удалось. Сейчас может и удастся, если время на эту игрушку найдётся. Мне кажется, без дебага там не обойтись. Попробуй, если хочешь. Кстати, в этой игре они двухбайтовые.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
gottax



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

СообщениеДобавлено: Вт Янв 30, 2007 5:44 pm    Заголовок сообщения: Ответить с цитатой

Overlord писал(а):
Тогда объясните нормальным языком как их вычислять Sad
Читал доки про пойнтеры на инглише, там тоже через отнимание хедера и т.д., правда пару раз встречал что там надо было еще что-то добавлять, считать... короче что-то непонятное Embarassed


Суть одна: простого и общего для всех случаев способа поиска указателей нет. Но в большинстве случаев значение поинтера будет содержать в себе как минимум младший адрес строки. Этим и можно воспользоваться.
В общем случае (не прибегая к дебагу) алгоритм поиска указателей следующий:
Например, если у тебя строка начинается с адреса 14638Ah, то двухбайтный указатель будет иметь вид 8Aххh. То есть тебе будет известен первый байт каждого поинтера в таблице поинтеров. (Например, цепочка вида 8A*9D*A3*C7*E9*FC, где * - неизвестный байт). Теперь с помощью любой программы, умеющей выполнять относительный поиск по цепочке байтов с неизвестными байтами, найди все встречающиеся комбинации. Обычно, если ты ищешь по четырём-пяти байтам, то найдётся всего одна такая цепочка, она и будет искомой.
Всё это справедливо лишь для случая, когда указатели сведены в таблицу и идут друг за другом в порядке следования строк. Т. е. не для твоего случая.

HoRRoR писал(а):
А почему они должны быть абсолютные? С относительными это тоже спокойно проходит(DSA - относительные двухбайтовые, Crimsonland - размер не помню, но относительные).

Ой ли? Может, и пройдёт, но времени на это ты угрохаешь предостаточно. Если быстрый поиск по ближайшим соседним адресам ничего не дал, то все остальные попытки найти методом тыка бессмыслены. Или как минимум нерациональны. Конечно, фактор везения нельзя исключать. Но тогда нужно быть очень везучим.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
HoRRoR
RRC2008
RRC2008


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

СообщениеДобавлено: Вт Янв 30, 2007 5:57 pm    Заголовок сообщения: Ответить с цитатой

Djinn писал(а):
Я разбираюсь в пойнтерах, и знаю как их искать. На тот момент найти их мне не удалось. Сейчас может и удастся, если время на эту игрушку найдётся. Мне кажется, без дебага там не обойтись. Попробуй, если хочешь. Кстати, в этой игре они двухбайтовые.

Всегда обходился без дебагга, т.к. не знаю асма Smile
Поищу, но не сегодня.

gottax писал(а):
Ой ли? Может, и пройдёт, но времени на это ты угрохаешь предостаточно. Если быстрый поиск по ближайшим соседним адресам ничего не дал, то все остальные попытки найти методом тыка бессмыслены. Или как минимум нерациональны. Конечно, фактор везения нельзя исключать. Но тогда нужно быть очень везучим.

Всегда проходило(кста, вспомнил, в EarthBound тоже такая фигня была с указателями на строки тайлов), и времени не так уж и много надо(уж точно меньше, чем на дебаггинг), и почему это методом тыка? Узнаёшь разницу смещений и порядок. Обычно есть от одного до трёх мест концентрации кодов с указателями, в них и надо искать. Уделил полчаса на прогу и готово. Можно и вручную(по лени своей так частенько делаю), если текста не так много.
Выходит, я сверхвезучий.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Overlord



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

СообщениеДобавлено: Вт Янв 30, 2007 8:54 pm    Заголовок сообщения: Ответить с цитатой

Всем пасиб за ответы пошел я мучаться может что-нибудь получится Exclamation
Если на работу раньше времени не вызовут может попробую дебаггер поюзать Very Happy
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Overlord



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

СообщениеДобавлено: Ср Янв 31, 2007 11:51 pm    Заголовок сообщения: Ответить с цитатой

Посмотрел переводы игры на другие языки (немецкий, испанский и т.д.), и те же проблемы Very Happy никто не смог увеличить длину строк меню и названий предметов в магазинах, или оставлены английские названия или же сделаны сокращения Sad
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
evgeny
RRC2008
RRC2008


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

СообщениеДобавлено: Чт Фев 01, 2007 2:46 pm    Заголовок сообщения: Ответить с цитатой

Не надо на других ориентироваться. Например, в "Утиных Историях" на Денди в главном меню тоже ни в одном из переводов длинна стороки и(/либо) координаты курсора не изменены, а я заменил, и еще много чего по-своему сделал.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Overlord



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

СообщениеДобавлено: Чт Фев 01, 2007 6:05 pm    Заголовок сообщения: Ответить с цитатой

evgeny писал(а):
Не надо на других ориентироваться ... и еще много чего по-своему сделал.

Понимаешь я на других не ориентируюсь, я лишь констатирую факты. А вообще попробой измени меню настроек в данной игре. Если сможешь скажу тебе "большое спасибо" Very Happy.


Последний раз редактировалось: Overlord (Чт Фев 01, 2007 11:43 pm), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
gottax



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

СообщениеДобавлено: Чт Фев 01, 2007 7:53 pm    Заголовок сообщения: Ответить с цитатой

Поинтеры на меню в магазинах есть. Названия предметов в этих меню можно увеличить, просто надо сдвигать и все управляющие байты в этих пунктах. Например: на меню по адресу 28A42h указывает поинтер (8842h), находящийся по адресу 8C6Eh. Следующее за ним меню лежит по адресу 28AA0h, поинтер (88A0h) - 8C70h. Ты можешь увеличивать длину названий предметов в каждом меню, только не забывай сдвигать управляющие байты, и после того как переведёшь первое меню, не забудь поменять поинтер для следующего.
Гораздо проще будет это делать не вручную, а прогой, вытаскивающей/записывающей текст по поинтерам. Например, прогой от Джина или моейSmile. Тогда будет достаточно указать границы для таблицы поинтеров и текста, не заморачиваясь с перестановками кусков текста и кода.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Overlord



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

СообщениеДобавлено: Чт Фев 01, 2007 10:10 pm    Заголовок сообщения: Ответить с цитатой

Ок, пасиб сейчас гляну :wink:


Глянул, всё гуд. Только вот придется мне перерисовать часть букв алфавита Sad т.к. раньше я предметы в магазинах не трогал, а переводил только тексты диалогов неписей и все было хорошо, а вот сейчас попробовал и оказалось что коды некоторых моих руских букв соответствуют спец. кодам меню (перенос строк и т.д.).
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Stealth



Зарегистрирован: 21.11.2008
Сообщения: 135
Откуда: Петербург

СообщениеДобавлено: Вт Янв 20, 2009 1:35 am    Заголовок сообщения: Ответить с цитатой

Кто-нибудь вычислял пойнтеры для Pokemon Sapphire? Я уже себе мозг сломал; подозреваю, что в них 4 байта:

Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Djinn
RRC2008
RRC2008


Зарегистрирован: 16.03.2004
Сообщения: 633
Откуда: Москва

СообщениеДобавлено: Вт Янв 20, 2009 8:18 am    Заголовок сообщения: Ответить с цитатой

Stealth писал(а):
Кто-нибудь вычислял пойнтеры для Pokemon Sapphire? Я уже себе мозг сломал; подозреваю, что в них 4 байта:


Ну и чего тут вычислять? Стандартные гбашные пойнтеры. Вычислять их вообще не надо - они абсолютные.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов shedevr.org.ru -> Базовый ромхакинг Часовой пояс: GMT + 3
На страницу 1, 2  След.
Страница 1 из 2

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


Powered by phpBB © 2001, 2005 phpBB Group