форум группы Chief-Net » » Экстрим хакинг » Resident Evil (NDS)

Страниц (1): [1]
 

1. lupus - 26 Февраля, 2016 - 15:01:56 - перейти к сообщению
lupus
Поинтеры:
0x03B0 - первый поинтер 4 байта, указывают на адрес 0x3290, сперва идут 3 служебных байта, сама строка начинается с 0x3293
0x03B4 - второй поинтер 4 байта, указывают на адрес 0x32A9, тоже 3 служебных байта, а строка начинается с 0x32AC

0x3280 - последний поинтер 4 байта, указывают на адрес 0x016447

КОнец блока поинтеров, последние 4 байта - 0x328c непосредственно перед началом текста, который находится по адресу 0x3290

Иногда между поинтерами встречается последовательность в 4 байта 0x00730000 - её нужно игнорировать, это какие-то служебные данные, которые должны остаться без изменения на своих местах.
Кроме того, встречаются ситуации, когда несколько поинтеров указывают на одну и ту же строку, это надо как-то проследить и пометить на стадии выемки текста, чтобы потом была возможность вставить всё на свои места обратно. В идеале такую строку вынимать один раз, с пометкой всех поинтеров на неё иначе, подозреваю, в итоге при вставке можем получить глюки.

Теперь по самому тексту:
Кодировка win-1251.
Разрыв строки - 0x01
Конец строки - 0x00
НО!
В скрипте есть управляющие байты, которые тоже содержат 0x00
В начале строки, предположительно выравнивание текста:
0300
0301
0302

В середине строки:
060002 - ожидание нажатия кнопки
0600 - конец строки, в которой встречался код 060002, после 0600 всегда стоит 00, указывающий на конец данной строки

Коды указывающие на то, что в этом месте будет выводится текст переменной:
040105000400
040105000400
Пример: "Would you take %item%?" выглядит как "Would you take 040105000400?"

Вообщем реквестую помощь в разборе лангпака.
Таблица и сам файл во вложении. В идеале можно или запилить проект к крупычу, если он пережуёт все эти сложности, или совместными усилиями описать формат, чтобы можно было накодить редактор/конвертер в текст и обратно.

Ссылка:
https://dl.dropboxusercontent.co...75554/DS/REDS.7z
2. lupus - 26 Февраля, 2016 - 15:02:18 - перейти к сообщению
lupus
Глядел кто-нибудь?
3. alex_231 - 26 Февраля, 2016 - 15:02:55 - перейти к сообщению
alex_231
Чего-то я не понял, а в чем собственно проблема? Пускай Круптар вытаскивает эти коды вместе с текстом, а потом обратно вставляет, ты их просто при переводе не трогай и всё.
4. lupus - 26 Февраля, 2016 - 15:03:20 - перейти к сообщению
lupus
Вся беда в том, что в этих кодах есть байт 0x00, который в других местах означает конец строки :/
5. alex_231 - 26 Февраля, 2016 - 15:03:49 - перейти к сообщению
alex_231
А если его впаять с каким(и)-нибудь кодом (кодами) в таблицу в виде двухбайтовых значений, не?
Типа h0300=[0300] и т.п.
6. Anton299 - 26 Февраля, 2016 - 15:04:39 - перейти к сообщению
Anton299
lupus, тут без спец-плагина никак, ты ж знаешь...
7. Mefistotel - 26 Февраля, 2016 - 15:05:04 - перейти к сообщению
Mefistotel
Или если Алекс не адаптирует свою прогу под эту игру)
8. lupus - 26 Февраля, 2016 - 15:05:37 - перейти к сообщению
lupus
В хексе забил вместо данных команд другие последовательности, чтобы не воспринимало, как стоп-байт, думал потом обратно вернуть старые, но напоролся на Ещё один подводный камень - встречаются повторения поинтеров, т.е. несколько поинтеров указывают на одну и ту же строку.
Круптар справится или всё же проще софтину написать?
9. Mefistotel - 26 Февраля, 2016 - 15:05:54 - перейти к сообщению
Mefistotel
Может, dnd1 и здесь с плагином поможет? Без него, намучаешься только.
10. lupus - 26 Февраля, 2016 - 15:06:23 - перейти к сообщению
lupus
Модет, но я не совсем уверен, что такой плагин возможен %)
Нужно учесть все системные последовательности, то, что по не колько поинтеров ссылаются на одну и ту же строку, а так же в блоке поинтеров встречаются последовательности 0x00730000, которые нужно игнорировать.
Но я был бы рад любой помощи. Более детально изучил лангпак, надо бы поправить первый пост, как с ноута вылезу в инет.
11. Anton299 - 26 Февраля, 2016 - 15:06:46 - перейти к сообщению
Anton299
Цитата:


несколько поинтеров указывают на одну и ту же строку.
Круптар справится или всё же проще софтину написать?



Если не ошибаюсь, надо в круптаре поставить PtSeekSame=TRUE.
12. lupus - 26 Февраля, 2016 - 15:07:07 - перейти к сообщению
lupus


Цитата:

несколько поинтеров указывают на одну и ту же строку.
Круптар справится или всё же проще софтину написать?


Если не ошибаюсь, надо в круптаре поставить PtSeekSame=TRUE.


Хм, не знал...
Спасибо, попробую.
13. lupus - 26 Февраля, 2016 - 15:07:28 - перейти к сообщению
lupus
Собрал рабочий проект, вынимается и вставляется назад, правда пришлось немного схитрить и кое-что в хексе поправить перед этим. Теперь проблема с тем, что некоторые поинтеры указывают на одно и то же место, метод предложенный Антоном не сработал Недовольство, огорчение
Есть ли ещё варианты?
14. Anton299 - 26 Февраля, 2016 - 15:07:43 - перейти к сообщению
Anton299
реведи это "одно и то же место" одинаково.
В круптаре это повторяющаяся строка, что ли?
15. lupus - 26 Февраля, 2016 - 15:08:02 - перейти к сообщению
lupus
Да, несколько раз выводится одно и то же. Если экспорт текста сделать, то он в 2 раза больше чем оригинал получается :/
И, да, чего-то не хватает в моём проекте, т.к. даже после простой пересборки файла, без изменений лангпаки до и после сильно отличаются ((
16. Mefistotel - 26 Февраля, 2016 - 15:08:31 - перейти к сообщению
Mefistotel
Выложи нынешний проект и файлы к нему. Seek Same не может не сработать. Кстати говоря, я им обычно не пользуюсь, чтобы разнообразить текст, то есть одно и тоже предложение переводится по разному. Но не во всех играх так можно делать.
17. lupus - 26 Февраля, 2016 - 15:08:47 - перейти к сообщению
lupus
Пока бьюсь ещё над вычислением управляющих байт. Поскольку некоторые из них содержат 0x00, который круптар считает концом строки, текст вынимается не полностью. Как с этим разберусь - выложу проект, чтобы глянули.
18. Mefistotel - 26 Февраля, 2016 - 15:09:03 - перейти к сообщению
Mefistotel
Ты отдельно этот список управляющих кодов сделай. Дальше будем смотреть.
19. Guyver - 26 Февраля, 2016 - 15:09:22 - перейти к сообщению
Guyver
Когда у меня текст вынимается не полностью из-за 00 к примеру, я делаю так.

Текст в игре.
Фраза 1-1
Фраза 1-2
Фраза 1-3 00
Фраза 2-1
Фраза 2-2 00730000
Фраза 2-3 00

Текст вынется до фразы 2-2 и закончится, после неё не будет информации

И я делаю так:

Надо поставить концом строки 10 символов после самого последнего предложения, тогда текст вынется так:

1 поинтер:

Фраза 1-1
Фраза 1-2
Фраза 1-3 00
Фраза 2-1
Фраза 2-2 00730000
Фраза 2-3 00 (10 символов после предложения, стопбайт 10значный)

2 поинтер:

Фраза 2-1
Фраза 2-2 00730000
Фраза 2-3 00 (10 символов после предложения, стопбайт 10значный)

А потом при вставке я просто стираю лишние предложения, и вставляю только то, что нужно... И диапазон вставки текста я делаю на 10 символов меньше, т.е. сами символы эти не трогаю и не затираю... Вот...
20. lupus - 26 Февраля, 2016 - 15:10:06 - перейти к сообщению
lupus
Я немного иначе делаю, в хексе меняю данные коды так, чтобы убрать в них 0х00, но чтобы других таких совпадений не было, а потом в самом проекте забиваю их как положено при помощи автозомены. Например у меня управляющий байт 00х0300, я их все перебиваю на 00х0309, а в крупыче меняю последовательность /03/09 на /03/00. Прокатывает. Ищу остальные, т.к. не все эти коды двухбайтовые.
Пока основная задача - выковырять управляющие байты в конце строк, которые заканчиваются переменной.
21. lupus - 26 Февраля, 2016 - 15:10:24 - перейти к сообщению
lupus
Обновил первый пост, пока накопал это. Путём хитрых манипуляций, описанных выше получилось обойти одни глюки, но дальше вылезли другие Недовольство, огорчение
Пытаюсь выяснить закономерность.
22. lupus - 26 Февраля, 2016 - 15:10:44 - перейти к сообщению
lupus
Ребята, среди вас есть программисты, поэтому снова решил поднять тему.
Недавно решил попытать счастья и спросить совета на форуме гбатемп и мне подсказали, как вынуть текст и вставить обратно.
Если с выемкой проблем не возникает, то вот со вставкой я никак не разберусь Недовольство, огорчение
В целом, программисту всё должно быть понятно, если проанализировать таблицу и файл с командами для программы Cartographer, взять можно здесь:
https://dl.dropboxusercontent.co....grapher_reds.7z
Таблицу, желательно оставить внешней, можно потом софтом поделиться на том же romhacking.net
Ноги у эксперимента с картографером растут из этой темы:
http://gbatemp.net/threads/need-....evil-ds.369787/
Буду премного благодарен, за любую.
23. Mefistotel - 26 Февраля, 2016 - 15:11:10 - перейти к сообщению
Mefistotel
У нас програмеров два, Марат и Алекс.
М. б. посмотрят.
24. lupus - 26 Февраля, 2016 - 15:11:28 - перейти к сообщению
lupus
Надеюсь, получится оказать посильную помощь ))
25. lupus - 26 Февраля, 2016 - 15:11:48 - перейти к сообщению
lupus
С софтиной помог MetLob, за что ему огромная благодарность. Есть ещё нюансы, но они, думаю, будут устранены.
26. Mefistotel - 26 Февраля, 2016 - 15:15:01 - перейти к сообщению
Перевод можно скачать по ссылке:
Resident Evil: Deadly Silence - Русская версия

Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®