Наконец-то свершилось!!!
Выкладываю в свет свою программу для перевода игр серии Сайлент Хилл.
И называется она Ultimate SH-MES Recompilator by WarMaker.
Данная прога была специально разработана для тех истинных фанатов серии игр Сайлент Хилл, которые занимаются настоящими фанпереводами их текстов и стремятся сделать самый лучший перевод для души!!!
Эта программа понимает формат текстовых файлов всех трёх игр серии Silent Hill, вышедших на PC:
- Silent Hill 2: Director's Cut (далее по тексту SH2)
- Silent Hill 3 (SH3)
- Silent Hill 4: The Room (SH4)
Сам игровой текст игр особым образом записан в файлы [*.mes] в SH2/SH3 и в файлы [message_*.bin] в SH4.
В SH2 файлы лежат в папке [\data\etc\message\]
В SH3 файлы запакованы в файл [msg.arc] в папке [\data\]
В SH4 файлы лежат в папке [\data\]
Если с SH2/SH4 всё понятно, то для работы с файлами SH3 пришлось ещё делать утилиты распаковки и запаковки текстовых файлов.
Работать напрямую с игровыми текстовыми файлами невозможно, т.к. сами файлы придерживаются определённого формата и кодировка символов абсолютно другая.
Собственно для максимального облегчения работы с текстом и была сроблена сия утилита.
Расписываю формат скриптов.
Для перевода всей служебной информации в текстовый вид и её обязательного сохранения в неизменном виде была придумана особая система тэгов, которая в свою очередь давала некоторое представление о том, что к чему относится. Буду называть файлы, получаемые после преобразования, скриптами.
Тэги могут быть как парные, так и непарные. Если тег имеет пару, то второй тег будет закрывающим (в нём есть символ '/'). Всё очень похоже на HTML программирование, но проще. Теги могут содержать в себе числовые данные, могут быть и без них. Если в теге присутствует двоеточие, то после него обязательно стоит число. Все числа, используемые в скриптах, имеют шестнадцатеричный вид.
При декодировании MES файлов скрипт содержит ОДНУ пару тегов {MES:0001}{/MES:0001}.
В первом записано количество кодируемых сообщений, во втором - своего рода CRC MES файла.
BIN файл представляет собой несколько объединённых MES файлов в один готовый, поэтому скрипт от BIN файла содержит ОДНУ пару тегов {BIN:0001}{/BIN} и то количество пар MES тегов, сколько используется в BIN файле.
Сообщения в общем виде заключены в пару тегов {STR}{/STR}. Между ними может быть текстовая и служебная информация. Есть некоторые разновидности:
- после открывающего тега {STR:EXT} идёт текст в двухбайтовой кодировке. Эта фишка используется в азиатских текстах (Япония, Корея, Китай). Данная прога не декодирует их, поэтому вся инфа здесь представлена числами.
- закрывающие теги могут быть и такими: {/STR:NEXT} и {/STR:END}. Первый из них означает, что это ещё не конец сообщения, и надо показать следующий за ним блок. Как правило, на экране это выглядит как несколько чередующихся сообщений, которые меняются, когда жмёшь на клавишу ДАЛЕЕ. {/STR:END} означает, что теперь уже точно конец сообщения.
Для разграничения сообщений используется тег {@:0001}. В нём указывается номер отграниченного им сообщения.
В однобайтовой кодировке частенько встречаются символы из двухбайтовой кодировки, причём текст из них может быть перемешан. Для разграничения этого безобразия весь двухбайтовый текст заключается в пару {JAP}{/JAP}. Такой двухбайтовый текст практически весь поддаётся дешифровке. Им, например, закодированы заголовки меню опций и видео в SH2.
Текст в игре довольно часто меняет свой цвет. Для этого есть теги: {WHITE}, {BLUE}, {RED}, {GREEN}, {YELLOW}, {GRAY}, {BROWN}.
Иногда игра (а в SH4 почаще) выдаёт запрос "Yes - No". Это тег {YES/NO}.
{AL:VERT} служит для выравнивания текста по центру по вертикали, и {AL:HORZ} по горизонтали.
{POSY1:00} и {POSY2:00} используются для смещения текста по вертикали.
{#} - это довольно интересная штука. Часто используется в SH2. Приведу пример:
Этот текст я вижу {#}а этот текст я не вижу{#}! Тег всегда должен быть парным, причём открывающий и завершающий одинаковы. Тект между ними в игре скрывается, вместо него рисуется прямоугольник того же цвета, что и текст.
В тексте часто используются переменные - {VAR:E0}. Именно ими закодированы коды к сейфу и на копирке в SH2. Именно их теряют корявые проги для переводов!!!
{LNX1:10}{LNX2:20} используются в паре в SH2. Ими рисуется горизонтальная двойная линия.
В SH4 используются в тексте иконки - {ICO:01}.
Для получения меню в SH2 используется непарный тег {OPT} (загадка с дощечками). После него идёт очередной пункт меню.
В SH4 используется парный тег {OPT}{/OPT}. Между ними записывается пункт меню. Опция по умолчанию отмечается тегом {DEF}.
Вот, вроде все основные теги, которые используются в получаемых при декомпиляции скриптах.
Так как исходные игровые текстовые файлы декомпилятся в скрипты, то теперь появляется некоторая свобода действий в кодинге. То есть, если всё же у кого-нибудь загорелись глаза, впринципе можно добавлять/убавлять некоторые теги.
К тегам, которыми можно свободно оперировать, относятся:
{JAP}{/JAP} - причём воспринимается латиница и остальные печатные значки клавы, НО кроме кириллицы (в японских шрифтах её нету).
{WHITE}{BLUE}{RED}{GREEN}{YELLOW}{GRAY}{BROWN} - разукрашивайте на здоровье, но желательно после раскрашенного текста добавлять тег {WHITE}.
{AL:VERT}{AL:HORZ} - по умолчанию текст форматируется по низу и по левому краю.
{POSY1:00}{POSY2:00}
{#}
{LNX1:10}{LNX2:20}
{ICO:01}
Некоторые теги правильно могут работать только в определённой части игры, а не во всех. Экперимент всё победит!
Теги, которые желательно не трогать:
{BIN:0001}{/BIN}
{MES:0001}{/MES:0001}
{STR}{/STR}
{STR:EXT}{/STR:NEXT}{/STR:END}
{@:0001}
{YES/NO}
{VAR:E0}
{OPT}{DEF}{/OPT}
При их удалении/добавлении/модификации компилятор будет матюкаться и/или игра будет повисать.
Вообще при добавлении/удалении тегов компилятор будет матюкаться насчёт CRC. Не страшно, если знаешь, что творишь.
Указываю как работать с прогой.
Впринципе особых трудностей тут нету.
Есть три папки:
- src - сюда надо копировать файлы для декомпиляции
- txt - здесь получаются файлы при декомпиляции
- dst - а здесь получаются новые игровые файлы при компиляции
Есть три кнопки:
- Деомпиль - декомпиль MES/BIN в TXT
- Компиль - компиль TXT в новый MES/BIN
- Закрыть/Отмена - закрывает прогу или отменяет операцию
Есть одна галка:
- "Конверт ASCII/ANSI" - специально требуется для переводов SH2. Там обычно текст кодируется в другой кодировке. Нажимать на неё нужно только при работе с русскими текстами SH2. В других случаях это не требуется (также и с иностранными текстами SH2).
Внизу место для логов при работе проги. Когда там чё-то мельтешит - прога надрываясь работат!
Прога работает в пакетном режиме, т.е. сколько будет в [src] файлов, столько она и обработает.
Если с SH2 и SH4 всё понятно:
- берёш и просто копируеш исходные файлы в [src], декомпилиш
- работаш с полученными скриптами в [txt]
- компилиш и забираш новые текстовые файлы из [dst]
То с SH3 так не прокатит! Надо сначала распаковать архив [msg.arc]. Для этого распаковываем архив [SH3_MSG.zip] в папку с игрой и заходим там же в папку [data]. Для распаковки пользуем прогу [sh3_unpk.exe], для запаковки пользуем [sh3_pack.exe]. Распакованные текстовые файлы будут лежать в [\data\msg\]. Новый запакованный архив будет в папке [\data\arc\]. До запаковки изменённые текстовые файлы записать поверх в ту же [\data\msg\].
Надеюсь мой труд не напрасен. Думаю эта прога намного облегчит работу с игровыми текстами Сайлент Хиллов.
C уважением ко всем присутствующим, тов. WarMaker.
Прогу брать в подписи. (т.е. тут)