Форум сайта python.su
(если не туда написал, перенаправьте)
Есть маленький скрипт Питона, который превращает старые квесты Sierra (AGI-движок) в формат *.cibar для работы на мобильных телефонах (через Sarien.jar)
Собственно, проблема в этом скрипте.
http://cibyl.googlecode.com/svn/trunk/tools/cibyl-generate-cibar
Он должен превращать файлы игры в один файл примерно ТАКОГО ЖЕ размера (например 200 кб), а получаемый cibar-файл всегда напорядок меньше (например 9 кб), как будто скрипт где-то стопорится и не доделывает процесс…
***
ФАЙЛЫ
Вот пример игры
http://jift.narod.ru/invis/time_quest_game_only.rar
И пример нормального, рабочего cibar-архива
http://jift.narod.ru/invis/cibar_Time_Quest.rar
А вот пример неправильного сибара
http://jift.narod.ru/invis/tq_wrong.rar
***
Я в Питоне вообще ламак, знаю только Delphi, Basic и то на любительском уровне. Я бы сделал delphi-версию конвертера (AGI-игра 2 cibar), но не могу понять питон-скрипт.
****
СТРОЕНИЕ cibar'а (нормального)
В начале cibar'а какой-то заголовок делается со списком файлов. Затем вроде как содержимое файлов без всяких изменений. Но список файлов для каждой игры будет разным, т.к. где-то файлов больше, где-то меньше; поэтому я не могу его (header) тупо скопировать и прилепить содержимое этих файлов.
В конце сибара непонятно откуда взятое содержимое, возможно “финальный заголовок”.
***
Автор скрипта говорит, что должно работать. Он сидит на Линуксе, но говорит и на Windows работало. Создал он скрипт еще в 2004 году.
Я всё перепробывал. Скрипт запускается, но явно гонит.
Отредактировано (Март 22, 2010 18:30:01)
Офлайн
ChesnokЧто это значит?
Скрипт запускается, но явно гонит.
Офлайн
Выдает очень маленький файл на выходе
Офлайн
Я не совсем понимаю - от форумчан вы чего хотите?
Офлайн
Разобраться в этом скрипте
- Какие действия он конкретно выполняет
- Что выполняет функция “struct.pack(”>L“, …)”
- Почему он может не до конца обрабатывать список файлов.
- Есть ли способ перевести этот скрипт на язык Delphi, к примеру.
Отредактировано (Март 22, 2010 21:17:13)
Офлайн
Скрипт выдает что-нибудь типа “WARNING: Skipping …” ?
Код ужасный, кстати.
Офлайн
- Какие действия он конкретно выполняетВообще-то скрипт простой. Хотите узнать что к чему он делает? Воспользуйтесь pdb.
- Что выполняет функция “struct.pack(”>L“, …)”Что выполняет функция struct.pack написано в 4-м абзаце документации для модуля struct.
- Почему он может не до конца обрабатывать список файлов.Из-за неверно подсчёта места, к примеру.
- Есть ли способ перевести этот скрипт на язык Delphi, к примеру.Есть. Переписать скрипт на языке Delphi. Так-то!
of.write(struct.pack(“>L”, 0x12344321)) # magicпозабавила.
Офлайн
//Скрипт выдает что-нибудь типа “WARNING: Skipping …” ?
Вообще ничего не выдаёт. В смысле, файл генерирует, но никаких сообщений при этом не вылезает. Пробовал и через python.exe и через py2exe, везде один результат.
// Воспользуйтесь pdb.
PDB - это что?
Офлайн
Хм, странно. По идее должен был бы.
Вставьте после строчки # Create the tables такую строчку:
print ‘>>>’, all_files.keys()
и покажите чего выведет.
Офлайн
Выводит это:
>>> ['HGC_GRAF.OVL', ‘JR_GRAF.OVL’, ‘PICDIR’, ‘AGI’, ‘AGIDATA.OVL’, ‘VIEWDIR’, ‘
OBJECT’, ‘EGA_GRAF.OVL’, ‘CGA_GRAF.OVL’, ‘HGC_OBJS.OVL’, ‘LOGDIR’, ‘WORDS.TOK’,
'SG.1', ‘vol.0’, ‘IBM_OBJS.OVL’, ‘SNDDIR’]
Перечисляет список файлов игры для конвертации.
***************************************************************
Через print вывел значения других переменных
//? - т.е. непонятно, что за переменная
// - название переменной
//надписи - описание переменных от меня
= Длина имени файла: 6
= Размер файла (в байтах): 198
= Имя файла: SNDDIR
= Содержимое: #Б E Ы - !!tE Ь =!!t Ф!!u2 ' ) У Б\$a5 !!xq!! 0!! !!zT$a !!z $b
e\$e $eк$h hq k !!{ $l3$l $m%$mA$mЫ$n $n oН$p pЧ$pЮ$q $ql!!|P r5 sй
$z6 A $tq !!|Г$u
= ?: 165
= ?: 9212
= ?: 9617 (по размеру похоже на 9671 байт, сколько будет весить получаемый неправильный файл)
= ?: 12
= Кол-во файлов: 18
= ?: 158
= ?: 9014
***
И показывается только SNDDIR, т.е. один файл из списка… Может, дальше по списку процесс и не идёт?
Отредактировано (Март 22, 2010 22:37:41)
Офлайн