IPB

Добро пожаловать, гость ( Вход | Регистрация )

> 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. Прошу не обращать особого внимания на слова в описании записанные ЗАГЛАВНЫМИ буквами - у меня привычка так выделять важные места. (*улыбается*)
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

Сообщения в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0 -

 



Упрощённая версия Сейчас: 27th April 2024 - 16:44