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

Хотелось бы услышать ваше мнение...

 
Начать новую тему   Ответить на тему    Список форумов shedevr.org.ru -> Утилита PokePerevod
Предыдущая тема :: Следующая тема  
Автор Сообщение
CaH4e3



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

СообщениеДобавлено: Ср Янв 21, 2004 10:58 pm    Заголовок сообщения: Хотелось бы услышать ваше мнение... Ответить с цитатой

Немного не в тему, но предлагаю заценить утилиту для перевода:

http://CaH4e3.emu-russia.net/misc/tscript.rar

Внутри есть описание задач и методов решения и некоторые результаты.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Chaos
Смотрящий в ночи


Зарегистрирован: 08.11.2003
Сообщения: 587
Откуда: Первозданный Хаос

СообщениеДобавлено: Чт Янв 22, 2004 4:47 am    Заголовок сообщения: Ответить с цитатой

Санчез, привет! Cool
_________________
Homo sum; humani nibil a me alienum puto.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
АнС
RRC2008
RRC2008


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

СообщениеДобавлено: Чт Янв 22, 2004 3:57 pm    Заголовок сообщения: Ответить с цитатой

Насколько я понял, это интересная попытка объединить рекалькулятор и скрипт-дампер/inserter.
Я-то сам против таких гибридов, скрывающих от человека промежуточные версии РОМа - потому что всего не учтёшь! Обязательно найдётся игра, в которой при таком методе от ромхакера ускользнёт какой-то нюанс, а сама прога не справится.
Но это всё-таки не такая губительная весч, как ПокеПеревод. Smile Тут хотя бы прога не перепутает поинтеры с кодом (как было у ПП), так как сама их не ищет.
Короче, это метод. Но не наш. Wink
А вот скриптовый язык - это зря. Одна мысль о том, что придётся запоминать или хотя бы осмысливать все ключевые слова, сразу напоминает о том, как хорошо можно обойтись родным Хекспозой (или тем же TranslHex) и самописным рекалькулятором (который, к тому же, можно настроить под разные типы поинтеров)!
Так что вывод - новичкам такой метод было бы легче освоить, чем стандартный, ЕСЛИ БЫ не выбранный интерфейс (скриптовый). Вот если сделать всё в виде диалогов - можно будет позиционировать прогу как хороший вариант для новичков.
Однако, всё равно этот метод не универсален по определению.
А какую задачу он призван решить? Если изменение длин строк, то эту задачу лучше решать отдельным рекалькулятором поинтеров, причём более продвинутым, чем в программе (т.е. чем есть на данном этапе).
А если объединить вставку скрипта и пересчёт поинтеров для ускорения (автоматизации) процесса вставки текста - мне кажется, что ускорения нет, всё и так очень быстро делается вручную (запустил TranslHex, загрузил таблу, вставил скрипт, сохранил, запустил рекалькулятор и пересчитал, запустил эмулятор).

Ну, вот такая рецензия. Very Happy
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
CaH4e3



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

СообщениеДобавлено: Чт Янв 22, 2004 4:36 pm    Заголовок сообщения: Ответить с цитатой

АнС писал(а):
Насколько я понял, это интересная попытка объединить рекалькулятор и скрипт-дампер/inserter.

Это вобщем не дампер. это именно Инсертер-рекалькулятор.

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

Смысл именно в том, что все пойнтеры и строки ищет сам человек, а программа просто корректирует то, что скажет переводчик. Перепутать может только сам человек и не больше...

АнС писал(а):

Так что вывод - новичкам такой метод было бы легче освоить, чем стандартный, ЕСЛИ БЫ не выбранный интерфейс (скриптовый). Вот если сделать всё в виде диалогов - можно будет позиционировать прогу как хороший вариант для новичков.

В общем я не собирался облегчать жизнь новичкам ж)... Просто изначально была задумка в виде интерфейса сделать генератор таких скриптов. Потому что руками их набивать в общем тоже немного проблематично, дело даже не в запоминании инструкци - там их всего основных - четыре. Дело в том что человек может опечататься, набирая адрес строки и весь пересчет пойдет не туда...

АнС писал(а):
А если объединить вставку скрипта и пересчёт поинтеров для ускорения (автоматизации) процесса вставки текста - мне кажется, что ускорения нет, всё и так очень быстро делается вручную (запустил TranslHex, загрузил таблу, вставил скрипт, сохранил, запустил рекалькулятор и пересчитал, запустил эмулятор).


Хех, я бы не согласился с легкостью процесса. Сделано было именно для ускорения оного. По сути это и есть рекалькулятор, только еще и руками вставлять ничего не надо... ;)

В архиве два примера скриптов. RI довольно простой с точки зрения расположения пойнтеров. В JP пойнтеры перепутаны, но и тогда скрипт из запросто перееставляет... Тут на форуме Marvel_m писал, что он начал делать перевод JP... Скачай его версию - там переисована графика. Возьми мой скрипт и переведи его как пожелаешь. А потом запусти транслятор с именем скрипта в командной строке. Получишь полностью переведенный Журасик Парк... ж)) Кроме заставочных текстов, которые рисуются и выводярся отдельно, через кариинки..
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
АнС
RRC2008
RRC2008


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

СообщениеДобавлено: Чт Янв 22, 2004 5:02 pm    Заголовок сообщения: Ответить с цитатой

CaH4e3 писал(а):
АнС писал(а):
Я-то сам против таких гибридов, скрывающих от человека промежуточные версии РОМа - потому что всего не учтёшь! Обязательно найдётся игра, в которой при таком методе от ромхакера ускользнёт какой-то нюанс, а сама прога не справится.
Но это всё-таки не такая губительная весч, как ПокеПеревод. Smile Тут хотя бы прога не перепутает поинтеры с кодом (как было у ПП), так как сама их не ищет.

Смысл именно в том, что все пойнтеры и строки ищет сам человек, а программа просто корректирует то, что скажет переводчик. Перепутать может только сам человек и не больше...


Не, там другая история была, вообще смешная. :)


CaH4e3 писал(а):

АнС писал(а):

Так что вывод - новичкам такой метод было бы легче освоить, чем стандартный, ЕСЛИ БЫ не выбранный интерфейс (скриптовый). Вот если сделать всё в виде диалогов - можно будет позиционировать прогу как хороший вариант для новичков.

В общем я не собирался облегчать жизнь новичкам ж)... Просто изначально была задумка в виде интерфейса сделать генератор таких скриптов. Потому что руками их набивать в общем тоже немного проблематично, дело даже не в запоминании инструкци - там их всего основных - четыре. Дело в том что человек может опечататься, набирая адрес строки и весь пересчет пойдет не туда...


Вот-вот, это портит всю задумку.


CaH4e3 писал(а):
АнС писал(а):
А если объединить вставку скрипта и пересчёт поинтеров для ускорения (автоматизации) процесса вставки текста - мне кажется, что ускорения нет, всё и так очень быстро делается вручную (запустил TranslHex, загрузил таблу, вставил скрипт, сохранил, запустил рекалькулятор и пересчитал, запустил эмулятор).


Хех, я бы не согласился с легкостью процесса. Сделано было именно для ускорения оного. По сути это и есть рекалькулятор, только еще и руками вставлять ничего не надо... Wink


Так есть же рекалькуляторы, (но всегда лучше написать свой, родной и адаптированный под конкретную платформу/игру), причём МОЩНЫЕ (хотя на Зофаре я таких не видел), пересчитывают любые таблицы, пусть хоть как поинтеры перемешаны или повторяются - рекалк всё возьмёт, если надо - пересчитает таблицу для перенесённого в другую часть РОМа скрипта, короче, специализация позволяет не отвлекаться на лишнее и решать конкретную задачу, а инсертят пусть другие проги, те же Hex-редакторы.

CaH4e3 писал(а):
В архиве два примера скриптов. RI довольно простой с точки зрения расположения пойнтеров. В JP пойнтеры перепутаны, но и тогда скрипт из запросто перееставляет... Тут на форуме Marvel_m писал, что он начал делать перевод JP... Скачай его версию - там переисована графика. Возьми мой скрипт и переведи его как пожелаешь. А потом запусти транслятор с именем скрипта в командной строке. Получишь полностью переведенный Журасик Парк... ж)) Кроме заставочных текстов, которые рисуются и выводярся отдельно, через кариинки..


Ну вот сам бы и сделал всё это, и доперевёл полностью, мне-то совершенно не до этого, да и вряд ли кто из наших соберётся.
Ауууу!!! Twisted Evil
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
CaH4e3



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

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

АнС писал(а):
Не, там другая история была, вообще смешная. :)


"Расскажите, очень интересно" ж)))

АнС писал(а):
Ну вот сам бы и сделал всё это, и доперевёл полностью, мне-то совершенно не до этого, да и вряд ли кто из наших соберётся.
Ауууу!!! :twisted:


Уже почти готово... ж))) Сам не сделаешь - никто не сделает... ;]
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
АнС
RRC2008
RRC2008


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

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

CaH4e3 писал(а):
АнС писал(а):
Не, там другая история была, вообще смешная. Smile


"Расскажите, очень интересно" ж)))


Ну, раз это раздел о ПП, расскажу. У Акселя же, вообще, задумка - сделать всё за человека, чтобы он только перевёл текстовый файл и всё. Вот сделал он поиск и пересчёт поинтеров, не показывая юзеру самих адресов поинтеров, для GBA это возможно (но только для GBA).
И вот, при переводе LV.gba прога дала сбой (посчитала за поинтер похожий на него кусок кода), но что самое интересное - игра нормально работала, только в одном из уровней исчезла замочная скважина, короче, повезло, так повезло. Ну, это исправили, но ведь можно было просто не заметить, или вообще испохабить весь код игры! Вот ещё одно доказательство, что такие проги-автоматизаторы неприемлемы для ромхакинга.

CaH4e3 писал(а):

АнС писал(а):
Ну вот сам бы и сделал всё это, и доперевёл полностью, мне-то совершенно не до этого, да и вряд ли кто из наших соберётся.
Ауууу!!! Twisted Evil


Уже почти готово... ж))) Сам не сделаешь - никто не сделает... ;]


Вот и хорошо, будет ещё один хороший перевод, пусть даже мелкомасштабный.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Гость






СообщениеДобавлено: Пт Янв 23, 2004 7:41 pm    Заголовок сообщения: Re: Хотелось бы услышать ваше мнение... Ответить с цитатой

CaH4e3 писал(а):
Немного не в тему, но предлагаю заценить утилиту для перевода.
Внутри есть описание задач и методов решения и некоторые результаты.


еще как в тему Wink (следующую версию свой тулзы вполе можешь назвать покепереводом Wink я имею ввиду идею)

теперь немножко критики:
(прошу не понять меня превратно, я не пытаюсь сказать, что
мой приклад лучше, я просто советы даю... Wink )

критика(предложения по улучшению) в порядке придумавания Smile...

1. поправь в пояснилке в строке 235 "SRT" думаю должно быть "STR", если не смотреть примеры то можно не суметь воспользоваться программой.

2. думаю "DTE" лучше переименовать, чтобы не вводить новичков в "непонятки", обычно под термином DTE понимают другое... (dual tile encoding)

3. из описания не очень понятно, ты САМ вставляешь скрипт
(перекодируя по таблице) и пересчитываешь указатели или это просто "надстройка" над Translhextion ?

4.
Цитата:
Каждая директива может иметь от одного и до четырех параметров.
Каждый параметр имеет свое имя, необходимое для его
идентификации, если не указано отдельно, они могут находиться в
произвольном порядке после основной директивы, но, в случае
наличия более чем одного параметра, обязательно должны иметь
значение, которое записывается после имени параметра и отделяется
от него знаком "=".
Разделяются параметры знаком "/".
В случае только лишь одного параметра, его имя принимается за его
значение. В этом случае, наличие знака "=" не требуется.

по моему слишком сложно особенно для "новичка"
(блин, даже понимая идею, мне сложно сразу понять, что к чему...)

5. не очень понятно я должен вынуть текст из ROM'a чем ?

6. ты используешь соглашения "Thingy" о символах "конца строки"
в таблице или нет, это стоит это написать(пояснить) или у тебя только "символ конца диалога" ? (или это crlf ?)

7. что случится если в ТЕКСТЕ игры встретится строка "STR=" ?
(или любая, из той же серии, думаю ты понимаешь о чем я...)

8. что будет если у меня в таблице описаны (и используются) символы "{" и "}" ? думаю одного байта для признака hex'a мало,
я использовал нотацию "<$" как признак начала, что это hex и
ТОЛЬКО если ровно через два байта от него есть ">", только тогда я
считаю, что это укодированный hex (хотя легко могу придумать строку перевода, когда покеперевод проглючит... Smile точнее он раскодирует, то, что раскодировать ему не положено... соответственно он сунет в ром, 0x00 в неподходящее место...)

9. для какой приставки ты пересчитываешь "указатели" ?
сюдя по примеру это NES (стоит это специально отметить в пояснилке...)

10. [quote]MAX - Максимально допустимый размер блока строк, который нельзя превышать в силу опасности потери других важных данных ROM'а[quote]
нихрена не понятно, что имеется в виду...
ты говоришь о длинне "банка" за который нельзя вылезать (для NES, думаю он равен 16 кило) или про длинну "диалога" (нечто оканчивающееся признаком конца диалога) или просто размер рома ?

11. ЕСЛИ ты сам перекодируешь, можно ли в таблице после знака "равно" писать БОЛЕЕ одного байта ? Wink (вопрос с подвохом Wink )

12. если ответ на предыдущий положительный, то как укодировать
писюковый crlf для лучшей читаемости такого скрипта ?
это я про длинну строки скрипта (в моей тулзе версии 1.х это тоже проблема, хотя для новой я придумал решенине...рассказать ?)

13.
Цитата:
В случае несортированной таблицы, необходим
для указания для каждой новой строки абсолютного смещения
указателя на нее в ROM'е.

это ты про что ? про длинну указателя (в смысле если умножить то число на 2, то получим "адрес указателя" относительно того, что указано в параметре DTE ?) или про что-то еще...
думаю, что если человек сам не писал пересчитывалку указателей, то нифига не понятно...(а может наоборот Smile )

14. "служебные слова" должны быть в ВЕРХНЕМ РЕГИСТРЕ или без разницы ? (наверно все таки в любом)

15. хорошо бы прибавить писульку типа "делай раз, делай два"

...а вообще радует, что еще кто-то решил написать утилиту не только "для себя"... вобщем КРУТО!
Вернуться к началу
Гость






СообщениеДобавлено: Пт Янв 23, 2004 7:50 pm    Заголовок сообщения: Ответить с цитатой

АнС писал(а):
Ну, раз это раздел о ПП, расскажу. У Акселя же, вообще, задумка - сделать всё за человека, чтобы он только перевёл текстовый файл и всё. Вот сделал он поиск и пересчёт поинтеров, не показывая юзеру самих адресов поинтеров.

дело было не совсем так :)

я сделал ИСКАЛКУ поинтеров, брал адрес начала строки "переводил"
его в "байты" Wink и печатал лог...

но тут Хаос просек, что можно вставлять текст в другое место рома,
и нужно было ему срочно с этим помочь (чтобы не пропал интерес к
переводу), поэтому я это и сделал в "полуавтоматическом" режиме,
выдавая кучу предупреждений в проге и форуме об опасности такого
алгоритма (найти 4 байта и заменить на другие 4 Smile )...
Вернуться к началу
Axel
Советник


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

СообщениеДобавлено: Пт Янв 23, 2004 7:52 pm    Заголовок сообщения: Ответить с цитатой

блин, не обратил внимания, что все таймауты вышли...

вобщем предыдущие два поста от меня... Smile
_________________
Всех их вместе переведём!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
АнС
RRC2008
RRC2008


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

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

Аксель, ты не понял. Это не прога для новичков, это совсем не то же самое, что ПП, это попытка объединить 2 процесса (вставка и пересчёт) в один для ускорения работы. Только нафига такое ускорение, если приходится писать скрипты и т.д.
А прога, как я понял, может пересчитать не только для NES, просто надо сначала самому найти таблицу поинтеров и потом думать - вставить ВЕСЬ скрипт Hex-редактором и пересчитать рекалькулятором, или вставить по строчке, и для каждой запускать TScript.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Axel
Советник


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

СообщениеДобавлено: Сб Янв 24, 2004 12:10 am    Заголовок сообщения: Ответить с цитатой

АнС писал(а):
Аксель, ты не понял. Это не прога для новичков...

это я понял :)

я не понял как она может пересчитывать поинтеры для РАЗНЫХ
приставок, если скажем у NES они 2 байта, а скажем у GBA 4 (в большинстве случаев)? или Tscript "пересчитывает" поинтеры исправляя тот файл скрипта, который ему дают ?

P.S.
я тут поразмыслил и в принципе часть моих вопросов можно было бы убрать из предыдущего поста...
но думаю для остальных будут интересны ответы на них автора,
а не мои догадки...
_________________
Всех их вместе переведём!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
АнС
RRC2008
RRC2008


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

СообщениеДобавлено: Сб Янв 24, 2004 5:48 pm    Заголовок сообщения: Ответить с цитатой

Ну а как обычный рекалькулятор пересчитывает поинтеры ля РАЗНЫХ платформ?! Да как повезёт! Универсального всё равно не создать, поэтому, думаю, TScript пересчитывает только 2-байтные и только объединённые в упорядоченную таблицу поинтеры. Но в 90% игр на НЕС и 80% на СНЕС именно такие поинтеры, так что вполне можно сказать, что прога подходит для нескольких платформ. На GBA таких игр около 10%.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Axel
Советник


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

СообщениеДобавлено: Сб Янв 24, 2004 11:39 pm    Заголовок сообщения: Ответить с цитатой

АнС писал(а):
Универсального всё равно не создать

совсем универсального (автоматического) видимо написать нельзя,
а вот сильно резиновый можно... ;)

просто поинтеры нужно пересчитывать В СКРИПТЕ... а уж как их
поменять в роме это отдельная песня... (т.е. нужно просто хранить не только откуда вынули, и куда вставляем, но и какой БЫЛ поинтер и каким он СТАНЕТ... и в принципе не мешало бы, списка адресов где старый поинтер для этого диалога лежит...(чтобы не тупить как ПП вызывающий просто функцию replace Wink ))
_________________
Всех их вместе переведём!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
CaH4e3



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

СообщениеДобавлено: Вс Янв 25, 2004 9:47 pm    Заголовок сообщения: Re: Хотелось бы услышать ваше мнение... Ответить с цитатой

Хех, долго я сюда не заглядывал, сорри... Сейчас попробую ответить или "отмазаться" ;) Хотел расписать по пунктам, но тут больно много их и они пересекаются, так что буду писать подробно и по порядку ;) Все нижесказанное пойдет в доку...

Прежде всего, по поводу доки: Писалась она минут за 25, чтобы дать хоть какое-то представление тем, кто не сможет разобраться в формате скрипта. К тому же большая часть дефектов уже исправлена. Но так или иначе не судите строго - там много чего перелопачивать и дополнять...

На счет самой программы: Так как она писалась также под конкретный случай, а потом по мере надобности расширялась, она многое не умеет. В общем, чего я хотел, выкладывая программу "для всех", так это собрать информацию о таких вариантах РОМов и переводов, которые программа не охватывает. Расширить же на ряд каких-то случаев - 32битные указатели, двухбайтовые строки и прочее - можно. Только пока я не столкнулся с такой необходимостью. Если кому-то это будет нужно, или вообще что-то будет нужно, я могу просто по желанию добавть необходимую функцию...

О поддерживаемых платформах: любые, с двубайтовыми указателями и однобайтовыми символами в строках. Так как изначально писалось для облегчения работы с переводом NES'а.

О соглашениях:
Формат таблицы перекодировки - простой набор строк формата <char>=<cahr>. Слева - восьмибитное шестнадцатиричное значение кода символа в РОМ'е, справа - допустимый одиночный символ таблицы ASCII или Русской кодировки. Сочетания, когда одному коду символа соответствует целая строка, воспринимаются, но обрабатываться просто не будут.
В названиях директив и их параметров допукается любой регистр символов. Просто для красоты я сделал все параметры большими буквами.
Про числа написано в доке...
про "{}": такой вид хексовой вставки выбран только потому, что тот же самый Translhextion использует его по умолчанию для импортирования символов, в таблице перекодировки не представленных. Заменить его на нечто иное не составляет никакого труда. Но по большому счету, как те старайся, а все равно вариант, когда может случиться прокол, можно подобрать. Его лучше физически исключить, применением вместо реальной "{" для игровой строки, ее кода в виде: {XX}.
Игровая строка не должна содержать символа "/", так как это будет считаться ее концом и приведет к ее обрезанию. Данный символ так же заменять практически бесполезно, в дальнейшем, я думаю, это будет выглядеть несколько иначе. Пока что используется самый простой вариант для разделения параметров и определения строк.

О идеологии:
Что называется строкой в РОМ'е. Строкой называется последовательность символов, заканчивающаяся неким однобайтовым кодом, после достижения которого, строка прекращает вывод на экран. Одна строка может содержать как внутриигровые символы перевода каретки, возврата, так другие спец символы, влияющие на выводт текста на экран. В скрипте одна строка не может содержать символ возврата каретки или начала новой строки, а вместо него содержит его оригинальный внутриигровой код. Никаких заменителей управляющих символов не предусмотрено. Тоесть, если в игре одной строкой описывается целый диалог с переводами каретки и сменами экранов, в скрипте - это одна неразрывная строка. Все управляющие символы в ней заменены на их коды ("{XX}").

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

Таблица указателей называется некая область памяти (совсем не обязательно неразрывная), в которой содержатся двухбайтовые указатели на игровые строки, относящиеся к одному конкретному блоку строк. Для каждого нового блока подразумевается своя таблица. Указатели могут располагаться в последовательности, в какой расположены и указываемые ими строки, и идти так же подряд, без разрывов. Если же указатели на строки приходится вылавливать по одному (указатели на строки ТОЛЬКО ОДНОГО КОНКРЕТНОГО БЛОКА), то и описываются они индивидуально.

Как это все работает: на примере игры "Final Mission (J)". Допустим, что таблицы перекодировки заданы, и все приготовения закончены.
Допустим, я нашел в файле такой блок строк, и сдампил его TranslHextion (отсутствующие в таблице перекодировки символы даны в хексовом формате). Блок расположено по смещению 0x1C459 и имеет длину 243 байта:

Код:

1VASTAGE 1{FF}1VASTAGE 2{FF}1VASTAGE 3{FF}1VASTAGE 4{FF}1VASTAGE 5{FF}W{89}{F9}{FE}W{C9} {FF}W{89} {FE}W{C9}{F9}{FF}VAGAME OVER{FF}1U{86}HI-SCORE{FE}U{99}0{FF}V5   SCORE{FE}VN0{FE}V{4A}LIFE{FF}V51P-SCORE{FE}V{C6}2P-SCORE{FE}VN0{FE}V{D9}0{FE}V{4A}LIFE{FE}W9LIFE{FF}V5   SCORE{FE}VN0{FF}W{4C}ONTINUE{FE}W{8C}END{FF}V51P-SCORE{FE}V{C6}2P-SCORE{FE}VN0{FE}V{D9}0{FF}W{4A}{B4}{FE}W{8A} {FF}W{4A} {FE}W{8A}{B4}{FF}


Символ конца строки - {FF}, символ CLRF - {FE}

Все указатели на строки этого блока расположены выше его, но разбросаны по некоторому пространству. Для указания в директиве "блок"? нам нужен тот указатель, который ссылется на начало первой строки блока текста, тоесть на адрес (считая от начала РОМ-файла) 0x1C459. В пересчете на внутриигровые пойнтеры, получим 0xС449. Такой указатель нашелся по трем адресам: 0x1C435, 0x1C437, 0x1C439. Опытным путем установили, что пойнтером является последний. Теперь можно ввести заголовок блока в скрипт:

Код:
startblock PTR=1C439h/ STR=1C459h/ MAX=243


Все найденные начальные параметры перечислены здесь.
Затем идет массив строк. Как они перечислены внутри блока, так они и будут записаны в РОМ. Указатели на следующие семь строк располагаются непосредственно за самым первым указателем, тоесть по адресам 0x1C441, 1C443, 1C445, 1C447 и тд... Для таких адрес пойнтера будет вычислен автоматически.

Код:
string TEXT={02}{21}{0C}STAGE 1{FF}
string TEXT={02}{21}{0C}STAGE 2{FF}
string TEXT={02}{21}{0C}STAGE 3{FF}
string TEXT={02}{21}{0C}STAGE 4{FF}
string TEXT={02}{21}{0C}STAGE 5{FF}
string TEXT={22}{89}{F9}{FE}{22}{C9}{00}{FF}
string TEXT={22}{89}{00}{FE}{22}{C9}{F9}{FF}


Каждая строка последовательно перекодируется в буффер в памяти одна за другой, причем длины всех предыдущих суммируются. Эта сумма является новым смещением строки относительно начала нашего блока. Так как нам известен внутриигровой указатель на начало блока (расположен по адресу в параметре PTR), то, просто прибавляя вычисленную сумму длин строк к самому первому указателю, получаем новый, уже пересчитанный пойнтер на строку. Этот пойнтер сразу записывается в таблицу. Строки же будут записаны в РОМ только после того, как весь блок подойдет к концу и все строки будут перекодированы, тоесть будет известен их общий размер.

Если в таблице указатель на следующую строку расположен не в последующей за предыдущей ячейке, адрес этой новой ячейки записывается в параметре string, новый указатель записывается именно по этому адресу, а дальнейшие указатели будут последователньо отсчитываться уже от него.

Три сбоя подряд, потом три рядом, опять два сбоя и еще три рядом:

Код:
string PTR=1C433h/ TEXT={21}{0C}GAME OVER{FF}
string PTR=1C447h/ TEXT={02}{20}{86}HI-SCORE{FE}{20}{99}{01}{FF}
string PTR=1C44Bh/ TEXT={21}{06}   SCORE{FE}VN0{FE}V{4A}LIFE{FF}
string TEXT=V51P-SCORE{FE}V{C6}2P-SCORE{FE}VN0{FE}V{D9}0{FE}V{4A}LIFE{FE}W9LIFE{FF}
string TEXT=V5   SCORE{FE}VN0{FF}
string PTR=1C457h/ TEXT=W{4C}CONTINUE{FE}W{8C}END{FF}
string PTR=1C451h/ TEXT=V51P-SCORE{FE}V{C6}2P-SCORE{FE}VN0{FE}V{D9}0{FF}
string TEXT=W{4A}{B4}{FE}W{8A} {FF}
string TEXT=W{4A} {FE}W{8A}{B4}{FF}


И, наконец, конец строки:

Код:
endblock


Таких блоков в игре может быть куча, все они записываютсяв в скрипт, и обрабатываются все сразу за один запуск программы. Все пойнтеры и все блоки пересчитываются и переПОКиваются в РОМ ;)

Хочу уточнить, как делается пересчет пойнтера: для его пересчета не нужно знать ровным счетом ничего. Все для этого необходиомое уже имеется в самом роме: у нас есть смещение пойнтера какой-то строки относительно начала РОМ файла. Число по этому смещению (двубайтовое) и есть реальный пойнтер. Все, что мне надо с ним сделать, это увеличить или уменьшить на число, на которое сдвинулась строка, на которую он указывает. Известный нам указатель на начало всего блока в целом не подлежит пересчету в том случае, если не требуется переносить весь блок в другое место файла. Все остальные пойнтеры являются суммой этого первого пойнтера и накопленной суммой длин строк до текущей обрабатываемой. Если же необходимо перенести начало блока данных (таблица пойнтеров остается на месте), то вместе с адресом начала блока пойнтеров в параметре BASE директивы startblock указывается реальный игровой указатель на нужное вам место.

Уфф... Это все, конечно, нужно было вписать в доку. Надеюсь, я ответил на все вопросы, но не сомневаюсь, что породил кучу новых... Когда пытаешься систематизировать на "бумаге" то, что болтается в голове - не всегда получается связно и логично с самого анчала. ;)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
CaH4e3



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

СообщениеДобавлено: Вс Янв 25, 2004 11:02 pm    Заголовок сообщения: Ответить с цитатой

По старой ссылке в первом посте валяется обновленный вариант проги, и немного подправленный док - ключая предыдущий опус с форума ;)

В архиве целиком переведенный, но не до конца проверенный Rainbow Island, переведенный по большей части Jurassic Park - никак не могу отловить карты тайлов на заставке и в прочих местах, такое ощущение, что они просто пожаты. Весь остальной текст переведен, но до конца не тестирован.
В архиве же валяются английские скрипты для всего вышеперечисленного и дополнительно скрипт для Final Mission (J). К ним прилагаются таблицы символов. Я все это дело использовал для проверки правильности работы скрипта. После патча, готовй ром не должен отличаться от исходного ;)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
АнС
RRC2008
RRC2008


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

СообщениеДобавлено: Пн Янв 26, 2004 1:27 pm    Заголовок сообщения: Re: Хотелось бы услышать ваше мнение... Ответить с цитатой

CaH4e3 писал(а):
Три сбоя подряд, потом три рядом, опять два сбоя и еще три рядом...


... и у меня начинает болеть башка... Shocked Rolling Eyes


CaH4e3 писал(а):
Хочу уточнить, как делается пересчет пойнтера: для его пересчета не нужно знать ровным счетом ничего. Все для этого необходиомое уже имеется в самом роме: у нас есть смещение пойнтера какой-то строки относительно начала РОМ файла. Число по этому смещению (двубайтовое) и есть реальный пойнтер. Все, что мне надо с ним сделать, это увеличить или уменьшить на число, на которое сдвинулась строка, на которую он указывает. Известный нам указатель на начало всего блока в целом не подлежит пересчету в том случае, если не требуется переносить весь блок в другое место файла. Все остальные пойнтеры являются суммой этого первого пойнтера и накопленной суммой длин строк до текущей обрабатываемой. Если же необходимо перенести начало блока данных (таблица пойнтеров остается на месте), то вместе с адресом начала блока пойнтеров в параметре BASE директивы startblock указывается реальный игровой указатель на нужное вам место.


Ну да, нормальный рекалькулятор.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
CaH4e3



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

СообщениеДобавлено: Пн Янв 26, 2004 8:10 pm    Заголовок сообщения: Re: Хотелось бы услышать ваше мнение... Ответить с цитатой

АнС писал(а):
Ну да, нормальный рекалькулятор.


А зачем больше? ;)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
АнС
RRC2008
RRC2008


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

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

CaH4e3 писал(а):
переведенный по большей части Jurassic Park - никак не могу отловить карты тайлов на заставке и в прочих местах, такое ощущение, что они просто пожаты


Точно, пожаты, надо над этим посидеть поосновательнее, чтобы можно было добавить ещё один хороший перевод для этой платформы.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
АнС
RRC2008
RRC2008


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

СообщениеДобавлено: Пн Янв 26, 2004 9:13 pm    Заголовок сообщения: Re: Хотелось бы услышать ваше мнение... Ответить с цитатой

CaH4e3 писал(а):
АнС писал(а):
Ну да, нормальный рекалькулятор.


А зачем больше? Wink


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



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

СообщениеДобавлено: Вт Янв 27, 2004 12:12 am    Заголовок сообщения: Re: Хотелось бы услышать ваше мнение... Ответить с цитатой

АнС писал(а):
Ну, вообще-то, если бы кто-нибудь написал программу, пересчитывающую поинтеры, не собранные в таблицу, а раскиданные по всему РОМу, вот это была бы действительно полезная прога, прямо прорыв в ромхакинге. Вот это единственное направление, по которому стоит написать программу типа ПП, а в остальном программерам делать нечего, уже всё давным-давно написано.


Может я опять что-то плохо объяснил? Выстраивание пойнтеров в последовательные таблицы - лишь удобный частный слчай, который позволяет задавать минимум данных в срипте. Но совершенно не важно, как они выстроены по большому счету - нужно просто для каждой строки показать, где ее пойнтер. Еединственное в этом случае неудобство - больше писанины и смещений. На работу и пересчет это никак не сказывается, а сами пойнтеры могут быть в любом месте рома.

У тебя есть какая-нибудь уже переведенная игра с однобайтовыми символами в строках? Я попробую составить для ее непереведенной версии скрипт - посмотришь, сравнишь... Можно с любой длины пойнтерами...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Axel
Советник


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

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

Код:
startblock PTR=1C439h/ STR=1C459h/ MAX=243

я наконец пропетрил, что означает параметер MAX в tscript Idea :)

это в покепереводе называется "длинна строки перевода" а
в редакторе перевода есть галочка "Ограничивать длинну строки перевода"... т.е я не храню(не хранил) длинны оригинальной строки,
а ее вычислял(вычисляю), до первого crlf и есть длинна строки.
т.е. если не снимать эту галочку, редактор не даст вылезти за границы
дозволенного в оригинале...
_________________
Всех их вместе переведём!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Amorpho[US]
БесФорменный


Зарегистрирован: 16.12.2003
Сообщения: 161
Откуда: Воронеж

СообщениеДобавлено: Вт Янв 27, 2004 12:13 pm    Заголовок сообщения: Re: Хотелось бы услышать ваше мнение... Ответить с цитатой

АнС писал(а):
Ну, вообще-то, если бы кто-нибудь написал программу, пересчитывающую поинтеры, не собранные в таблицу, а раскиданные по всему РОМу, вот это была бы действительно полезная прога, прямо прорыв в ромхакинге. Вот это единственное направление, по которому стоит написать программу типа ПП, а в остальном программерам делать нечего, уже всё давным-давно написано.


Написать-то такое можно, но... если поинтер такой - 0x0001F3D9, то все нормально, а если, например, 0x00002000, то таких "поинтеров" в РОМе будет тыЩа и рекалькулятор просто убьет игру.
_________________
Я вернулся!!! ...ну почти. Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Axel
Советник


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

СообщениеДобавлено: Вт Янв 27, 2004 12:30 pm    Заголовок сообщения: Re: Хотелось бы услышать ваше мнение... Ответить с цитатой

Amorpho[US] писал(а):
...если поинтер такой - 0x0001F3D9, то все нормально, а если, например, 0x00002000, то таких "поинтеров" в РОМе будет тыЩа и рекалькулятор просто убьет игру.

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

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


Powered by phpBB © 2001, 2005 phpBB Group