Поинтеры:
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)