Chief-NET

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Chief-NET » Экстрим хакинг » Resident Evil (NDS)


Resident Evil (NDS)

Сообщений 1 страница 20 из 27

1

Поинтеры:
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.com/u/57975554/DS/REDS.7z

Отредактировано lupus (2013-07-26 14:51:49)

2

Глядел кто-нибудь?

3

Чего-то я не понял, а в чем собственно проблема? Пускай Круптар вытаскивает эти коды вместе с текстом, а потом обратно вставляет, ты их просто при переводе не трогай и всё.

4

Вся беда в том, что в этих кодах есть байт 0x00, который в других местах означает конец строки :/

5

А если его впаять с каким(и)-нибудь кодом (кодами) в таблицу в виде двухбайтовых значений, не?
Типа h0300=[0300] и т.п.

6

lupus, тут без спец-плагина никак, ты ж знаешь...

7

Или если Алекс не адаптирует свою прогу под эту игру)

8

В хексе забил вместо данных команд другие последовательности, чтобы не воспринимало, как стоп-байт, думал потом обратно вернуть старые, но напоролся на Ещё один подводный камень - встречаются повторения поинтеров, т.е. несколько поинтеров указывают на одну и ту же строку.
Круптар справится или всё же проще софтину написать?

9

Может, dnd1 и здесь с плагином поможет? Без него, намучаешься только.

10

Модет, но я не совсем уверен, что такой плагин возможен %)
Нужно учесть все системные последовательности, то, что по не колько поинтеров ссылаются на одну и ту же строку, а так же в блоке поинтеров  встречаются последовательности 0x00730000, которые нужно игнорировать.
Но я был бы рад любой помощи. Более детально изучил лангпак, надо бы поправить первый пост, как с ноута вылезу в инет.

11

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

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

12

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

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

Хм, не знал...
Спасибо, попробую.

13

Собрал рабочий проект, вынимается и вставляется назад, правда пришлось немного схитрить и кое-что в хексе поправить перед этим. Теперь проблема с тем, что некоторые поинтеры указывают на одно и то же место, метод предложенный Антоном не сработал :(
Есть ли ещё варианты?

14

Переведи это "одно и то же место" одинаково.
В круптаре это повторяющаяся строка, что ли?

15

Да, несколько раз выводится одно и то же. Если экспорт текста сделать, то он в 2 раза больше чем оригинал получается :/
И, да, чего-то не хватает в моём проекте, т.к. даже после простой пересборки файла, без изменений лангпаки до и после сильно отличаются ((

Отредактировано lupus (2013-07-25 20:10:06)

16

Выложи нынешний проект и файлы к нему. Seek Same не может не сработать. Кстати говоря, я им обычно не пользуюсь, чтобы разнообразить текст, то есть одно и тоже предложение переводится по разному.  Но не во всех играх так можно делать.

17

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

18

Ты отдельно этот список управляющих кодов сделай. Дальше будем смотреть.

19

Когда у меня текст вынимается не полностью из-за 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 символов меньше, т.е. сами символы эти не трогаю и не затираю... Вот...

Отредактировано Guyver (2013-07-26 06:59:15)

20

Я немного иначе делаю, в хексе меняю данные коды так, чтобы убрать в них 0х00, но чтобы других таких совпадений не было, а потом в самом проекте забиваю их как положено при помощи автозомены. Например у меня управляющий байт 00х0300, я их все перебиваю на 00х0309, а в крупыче меняю последовательность /03/09 на /03/00. Прокатывает. Ищу остальные, т.к. не все эти коды двухбайтовые.
Пока основная задача - выковырять управляющие байты в конце строк, которые заканчиваются переменной.

Отредактировано lupus (2013-07-26 08:16:00)


Вы здесь » Chief-NET » Экстрим хакинг » Resident Evil (NDS)