Kyrandia 1/2 DIALOGS, формат .EMC |
Добро пожаловать, гость ( Вход | Регистрация )
Kyrandia 1/2 DIALOGS, формат .EMC |
-=CHE@TER=- |
Jul 24 2006, 18:21
Сообщение
#1
|
Walter Sullivan Группа: Root Admin Сообщений: 1,355 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 311 раз(а) |
Я когда-то написал к нему редактор, но тех полей, которые я редактировал, было явно мало, как оказалось в последствии работы над переводом, для нормальной работы игры.
Вот, что я когда-то писал товарищу Siberian GRemlin, когда он просил меня разобраться с этим форматом (это мои соображения по формату - могут быть ошибки): QUOTE .EMC формат - сообщения в игре "Kyrandia I" (может в каких других играх Westwood) * Причечание: ВСЕ ЗНАЧЕНИЯ записаны в Motorola формате, т.е. если у тебя есть long значение: C: a = 0x12ABCDEF; Pascal: a:=$12ABCDEF; То при записе в файл оно ОБЫЧНО (Intel Byte Order) записывается так: EFCDAB12 т.е. задом наперёд. Motorola же пишет прямо: 12ABCDEF так что приходится их потом вручную "разворачивать". (не уверен, что не перепутал названия Intel и Motorola, но это не важно - главное понять суть этой записи) Итак, формат: 'FORM' (4 байта) - заголовок файла FSize (DWORD) - размер файла (здесь и далее в этом "развёрнутом" формате) 'EMC2ORDR' (8 байт) - EMC To Order - секция команд (order) (что внутри этой секции - я не знаю, скорее всего там и содержится эти самые координаты шрифта, его цвет, задержка на экране и прочее... я же её просто пропускаю, когда читаю, а когда пишу - тупо и мрачно переписываю из оригинального файла) OSize (DWORD) - её размер 'TEXT' (4 байта) - начало секции с текстом TSize (DWORD) - её размер (WORD) (2 байта) - далее идут 2-х байтовые слова содержащие смещение от начала секции 'TEXT' до каждого сообщения. >>> Небольшое отступление о том, как я считаю сколько строк в секции. >>> Дело в том, что я так и не нашёл ни одного поля, в котором прямо было бы >>> сказано, сколько строк-сообщений в файле. Так что я делаю так: >>> 1) Секция 'TEXT' состоит из слов (WORD - 2 байта), которые содержат >>> смещения каждого сообщения ОТ НАЧАЛА этой секции. >>> 2) Таким образом, нужно взять первое слово - узнаем сколько вообще занимают >>> ВСЕ двойные слова вообще (т.к. первое сообщение начинается СРАЗУ ЗА НИМИ). >>> 3) Теперь, если мы поделим это слово (которое, как стало видно, указывает >>> на количество ВСЕХ двойных слов) на 2, то получим количество ВСЕХ >>> СООБЩЕНИЙ в ней (и, естесственно, всех двойных слов, но тут нужно помнить >>> такую тонкость, что ПЕРВОЕ слово мы уже прочитали, так что неплохо было бы >>> для начала сделать Seek по файлу назад на 2 байта от текущей позиции). ASCIIZ - затем идут ASCIIZ строки (строки с завершающим нулём). --- Не забывай, что в ХВОСТЕ файла идёт секция 'DATA' (похоже она тоже несёт часть нагрузки секции 'EMC2ORDR'), так что НЕ ЗАБЫВАЙ добавить её в конец файла, который записываешь (сколько взял, столько и положи обратно). Секция 'DATA' в таком же формате - строка ('DATA') + размер секции (DWORD), но я предпочитаю не заморачиваться, а просто смотреть - есть у файла хвост (хвост - всё, что идёт после секции 'TEXT') или нету, и если есть - то неважно что там лежит - просто копирую в конец выходного файла --- ЕЩЁ ОДНО ВАЖНОЕ ЗАМЕЧАНИЕ: кое-каких секций в файле может не быть. Например, 'TEXT' - тогда в файле редактировать нечего. The End. -=CHE@TER=- 27.07.2005 Вот оригинальные английские тексты в формате .EMC вметсе с .EXE файлом игры от первой части (тоже мне когда-то выслал Siberian GRemlin): kyr1eng.zip (198.291 байт) Если хоть чем-то сможете помочь - будет очень здорово! P.S. Прошу не обращать особого внимания на слова в описании записанные ЗАГЛАВНЫМИ буквами - у меня привычка так выделять важные места. (*улыбается*) |
Упрощённая версия | Сейчас: 27th April 2024 - 16:44 |