Найти - Пользователи
Полная версия: Адаптация скрипта для Windows
Начало » Python для экспертов » Адаптация скрипта для Windows
1 2
Chesnok
(если не туда написал, перенаправьте)


Есть маленький скрипт Питона, который превращает старые квесты 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 году.

Я всё перепробывал. Скрипт запускается, но явно гонит.
Александр Кошелев
Chesnok
Скрипт запускается, но явно гонит.
Что это значит?
Chesnok
Выдает очень маленький файл на выходе
Ferroman
Я не совсем понимаю - от форумчан вы чего хотите?
Chesnok
Разобраться в этом скрипте


- Какие действия он конкретно выполняет
- Что выполняет функция “struct.pack(”>L“, …)”

- Почему он может не до конца обрабатывать список файлов.
- Есть ли способ перевести этот скрипт на язык Delphi, к примеру.
Ed
Скрипт выдает что-нибудь типа “WARNING: Skipping …” ?
Код ужасный, кстати.
Ferroman
- Какие действия он конкретно выполняет
Вообще-то скрипт простой. Хотите узнать что к чему он делает? Воспользуйтесь pdb.
- Что выполняет функция “struct.pack(”>L“, …)”
Что выполняет функция struct.pack написано в 4-м абзаце документации для модуля struct.
- Почему он может не до конца обрабатывать список файлов.
Из-за неверно подсчёта места, к примеру.
- Есть ли способ перевести этот скрипт на язык Delphi, к примеру.
Есть. Переписать скрипт на языке Delphi. Так-то!

А если серьёзно - вы же не ждёте что кто-то будет это всё делать вместо вас? Попытайтесь разобраться самостоятельно, а как наткнётесь на конкретные проблемы - обращайтесь.
PS: строка
of.write(struct.pack(“>L”, 0x12344321)) # magic
позабавила.
Chesnok
//Скрипт выдает что-нибудь типа “WARNING: Skipping …” ?

Вообще ничего не выдаёт. В смысле, файл генерирует, но никаких сообщений при этом не вылезает. Пробовал и через python.exe и через py2exe, везде один результат.


// Воспользуйтесь pdb.
PDB - это что?
Ed
Хм, странно. По идее должен был бы.
Вставьте после строчки # Create the tables такую строчку:
print ‘>>>’, all_files.keys()
и покажите чего выведет.
Chesnok
Выводит это:

>>> ['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, т.е. один файл из списка… Может, дальше по списку процесс и не идёт?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB