ZX animation packer v3.00 Special edition for Scenergy #2 disk magazine (c) 1999 by Flying/Digital Reality Special thanks to Dmitry Pjankov 1. Несколько общих слов Поскольку эта версия упаковщика поставляется в составе Scenergy#2, то нет смысла подробно описывать все еще раз здесь. Поэтому данное описание содержит только описание параметров командной строки и кое-каких тонкостей в работе с упаковщиком. Но если, вдруг, кто-то не читал описания в Scenergy#2, то скажу, что данная программа является упаковщиком анимаций в формат ZXA, разработанный для применения в демах, играх и других программах на Speccy, для чего в Scenergy#2 опубликована также ZXA library и подробное описание к ней. 2. Условия распространения Все copyrights на программу, ее исходные тексты и документацию принадлежат Scenergy Team, Digital Reality и конкретно мне - Flying/Digital Reality. Программа, а также ее исходные тексты распространяются свободно при условии, что распространение любой части программы (исполняемых файлов, ее исходных текстов или документации) не влечет за собой получение материальной выгоды. Все части программы поставляются AS IS, владельцы авторских и прочих прав не несут никаких обязательств за любой явный или косвенный ущерб. Разрешается использование любой части предоставляемых исходных текстов в других программах при условии упоминания об использовании и указании (c). Разрешается изучение, исправление и распространение исправленных версий программы, а также любой другой ее части, если при этом соблюдаются следующие условия: - сохранение всех copyrights - сохранение исходной функциональности программы - свободное распространение исправленной версии программы 3. Основные характеристики Упаковщик позволяет паковать анимации, хранящиеся как набор кадров (каждый кадр в отдельном файле) в анимацию, пригодную для проигрывания на Speccy через ZXA library. Упаковщиком поддерживаются 3 формата исходных файлов: - Стандартные PCX файлы (256 цветов) - Стандартные Спектрумовские экраны. Файл считается Спектрумовским экраном, если он имеет расширение .scr или если его размер равен 6144 или 6912 байт. - Стандартные Спектрумовские экраны в формате Hobeta. Кадры могут находиться в любом из поддерживаемых форматов, при этом не накладывается никаких ограничений на то, чтобы все кадры были представлены в одинаковом формате. Поскольку формат упаковки ZXA был разработан исходя из специфики силуетных изображений, то, несмотря на то, что поддерживается формат PCX, изображение в нем должно быть двуцветным. Однако упаковщик имеет встроенные средства для преобразования PCX изображения в двуцветные, поэтому, теоретически, можно паковать любое изображение. Выходными файлами упаковщика могут быть либо файл ZXA анимации, либо набор упакованных кадров в формате ZXF. Однако упаковщик имеет также возможность выгрузки переданных ему файлов в любом поддерживаемом формате. Кстати, эту его возможность можно использовать для конвертации кадров из PCX в SCR, особенно в сочетании с преобразованем PCX в двуцветные изображения, т.к. это преобразование занимает довольно много времени, да и сама загрузка PCX по скорости далека от идеала. Упаковщик поддерживает создание анимаций, упакованных 3 различными методами: - Обычные анимации. - Черезстрочные анимации. - C64 like анимации. Для всех этих типов анимаций поддерживается 2 типа кодирования: по строкам и по столбцам, а также 2 способа упаковки: как анимация и как набор независимо упакованных кадров. Кроме того, при упаковке кадров как анимации можно задать начальное содержимое экранного буфера. Более подробно обо всех этих возможностях будет сказано далее, в разделе описания параметров командной строки. 4. Принципы управления Если вы уже успели запустить файл zxa_pack.exe, то, наверняка, были несколько удивлены обилием ключей командной строки... Не беда, в других упаковщиках их еще больше :) Поскольку командная строка - единственный из имеющихся в этой программе интерфейсов (т.к. по моему личному мнению это лучший из возможных интерфейсов для подобного рода программ), то вам поневоле придется разобраться с тем, что значат хотя бы основные параметры. Итак, формат запуска программы: ZXA_PACK [Output Filename] [Parameters] Как вам, наверняка, известно - в квадратных скобках указаны необязательные параметры. Т.о. как минимум вам необходимо задать только имя файла-описателя, а как максимум - еще имя выходного файла и кучу параметров упаковки. Теперь о каждой части параметров командной строки подробнее. - имя файла-описателя. Поскольку анимация состоит из кадров, а каждый кадр на начальном этапе хранится в отдельном файле, то поначалу вы должны иметь на диске кучу файлов с кадрами анимации, которые вы хотите упаковать. Передать имена всех файлов в командной строке просто невозможно, а wildcards мне во-первых делать неохота, а во-вторых они могут помочь далеко не во всех случаях. Поэтому я использовал следующий способ задания имен файлов: вам необходимо подготовить текстовый файл, каждая строчка которого будет содержать имя файла с кадром анимации. Порядок задания имен файлов в этом файле должен соответствовать тому, как эти кадры будут стоять в анимации. Замечу, что на каждой строке должно быть ровно по одному имени файла и никакой другой информации в этом файле быть не должно. Естественно, можно задавать не только имя файла, но и путь к нему, но я бы не советовал вам этого делать, чтобы не привязываться к конкретному каталогу на диске. Пример подобного файла: frame001.pcx frame002.pcx frame003.pcx frame004.pcx frame005.pcx Если вы являетесь счастливым пользователем программы Dos Navigator (или одного из ее продолжений), то наверняка знаете о существовании замечательной кнопочки Alt+L, которая как раз и создает такой файл. Очень рекомендую! Кроме того упаковщик поддерживает задание в качестве этого параметра непосредственно имени экранного файла в любом поддерживаемом формате. В этом случае файл будет воспринят как анимация из одного кадра, запакован и выгружен в формате zxf. Использование этого способа бывает полезно, чтобы быстро оценить качество упаковки того или иного кадра. [Output Filename] - Здесь все просто, это имя файла вашей ZXA анимации. По умолчанию, если этот параметр не задан, имя выходного файла будет таким же, как имя файла-описателя, но с расширением zxa. Проверок на существование файла не производится, существующий файл будет безжалостно переписан. Третьей, и самой важной частью параметров командной строки являются ключи, с помощью которых можно настроить параметры упаковщика. Поднобнее о каждом из них - в следующем разделе. 5. Параметры командной строки Параметры (или ключи) командной строки позволяют задать режимы работы упаковщика. Все параметры являются необязательными, если параметр не задан, то используется заданное в программе значение по умолчанию. Формат задания параметров командной строки: /|-[:] Если вдруг кто-то незнаком с подобной нотацией, поясню, что вы можете задавать параметры следующего вида: /h -h /H -H, все это будет одним и тем же ключем. Если параметр требует задания дополнительного значения, то оно задается после двоеточия и БЕЗ пробелов, т.е. например: /x:5 Первые 6 параметров (объединенные в пары, т.к. все они задают координаты) используются для задания окна анимации. Здесь все-таки придется сделать небольшое отступление и описать, как, собственно упаковщик обрабатывает кадры анимации. Работа упаковщика производится в два этапа: - вычисление окна анимации - непосредственно упаковка кадров Под окном анимации здесь подразумевается прямоугольный участок экрана, содержимое которого будет упаковываться. По умолчанию упаковщик ищет такой прямоугольник, который имеет наименьшие возможные размеры и в который помещаются все включенные пикселы всех кадров анимации. Кстати, это может привести к довольно неожиданным результатам в случае, если хотя бы на одном из кадров у вас будет стоять хотя бы один включенный пиксел далеко отстоящий от основного изображения. Упаковщик учтет его появление и соответствующим образом изменит окно анимации. В результате вы получите неоправданно большое окно анимации и, соответственно, низкое качество упаковки. В некоторых случаях (например при упаковке большой анимации, состоящей из нескольких кусков) необходимо жестко задать окно анимации. Вот здесь и нужно будет использовать параметры задания окна анимации. Кстати, никто не мешает вам переопределять только часть параметров. К примеру можно задать жестко только размер окна анимации по X, в этом случае все остальные параметры будут оставлены в соответствии с вычисленным окном анимации. И еще один момент. Из-за специфики Спектрумовского экрана все значения координат по оси X (как положение, так и размер) задаются в знакоместах (!), тогда как соответствующие параметры для оси Y задаются в пикселях. На это стоит обратить особое внимание, т.к. здесь может возникнуть путаница. А теперь непосредственно описание параметров. Параметры: /X, /Y Значение : Задания соответственно X и Y координат окна анимации. X координата измеряется в знакоместах, Y координата - в пикселях. Параметры: /XS, /YS Значение : Размеры окна анимации соответственно по X и Y. Размер по X задается в знакоместах, по Y - в пикселях. Параметры: /OX, /OY Значение : Смещения координат окна анимации по X и Y соответственно. Здесь опять необходимо дать пояснения. Поскольку упаковщик рассматривает кадры анимации как Спектрумовские экраны, то, соответственно, при проигрывании анимации она будет расположена там же, где она была расположена на исходном экране. Но если ваша анимация подготовлена в меньшем разрешении (например 64x64), то упаковщик будет воспринимать ее как расположенную в левом верхнем углу экрана. Если же вам нужно, чтобы на Speccy она проигрывалась в другом месте экрана - вы можете "сдвинуть" координаты расположения анимации при помощи этих ключей. Следующие два ключа позволяют вам выбрать метод упаковки анимации. По умолчанию анимация пакуется "обычным" методом, т.е. распакованные кадры будут выглядеть так же, какими они были до упаковки. Поскольку ничто не может вас остановить от того, чтобы задать сразу оба ключа в командной строке, то я вам сразу скажу, что в таком случае будет работать C64 like метод. Параметр: /L Значение: Паковать анимацию как черезстрочную. Параметр: /C Значение: Паковать анимацию как C64 like анимацию. Объяснить "на пальцах" что же я подразумеваю под этим названием довольно сложно, просто запакуйте что-нибудь и посмотрите, что получится. Название же этот метод получил за то, что впервые подобный способ вывода изображения я увидел именно на C64. Следующие ключи также используются для задания параметров упаковщика Параметр: /A Значение: Паковать анимацию с учетом того, что анимация представляет собой жестко заданную последовательность кадров. Т.е. при этом методе реально пакуются не сами кадры, а различия между ними. Практического применения этот ключ на данный момент не имеет, т.к. ни ZXA library ни даже zxa_view.exe не поддерживают проигрывание анимаций, упакованных этим методом. Хотя это, отнюдь, не значит, что вы не можете написать свой плеер для этого метода. По умолчанию (если этот ключ отсутствует) анимация пакуется как набор независимо упакованных кадров. Параметр: /H Значение: Паковать анимацию с кодировкой кадров по строкам. Реальной пользы этот ключ также не имеет, т.к. в силу специфики Спектрумовского экрана анимации, упакованные данным методом, имеют намного меньшую степень упаковки. ZXA library может быть легко переделана для проигрывания анимаций упакованных этим способом, а zxa_view.exe не поддерживает проигрывание таких анимаций. Параметр: /S Значение: Этот ключ имеет смысл только в комбинации с ключем /A, а так как ключ /A не имеет практического использования, то этот ключ также вам вряд ли когда-нибудь пригодится. Однако я объясню его суть. Поскольку при упаковке анимации с использованием ключа /A реально пакуются только различия между кадрами, то возникает проблема с тем, что анимация должна будет начинать проигрываться с пустого экрана, что не всегда удобно. Этот ключ позволит вам задать "содержимое" экрана в тот момент, когда анимация начнет проигрываться. Имя файла с соответствующим изображением должно быть записано первым в файле-описателе. Оно не будет упаковано, а будет только использовано для того чтобы получить "различия" для первого кадра анимации. Параметр: /E Значение: Если этот параметр присутствует - анимация будет упакована как обычно, но каждый кадр будет выгружен в виде отдельного файла в формате zxf. Т.к. ZXA library не поддерживает этот формат (хотя и может быть легко доработана для этого), то реальная польза от использования этого ключа может быть только в том, что он позволит оценить качество упаковки каждого кадра, а также позволит просмотреть, как будет выглядеть каждый кадр после распаковки. Параметр: /I Значение: Этот параметр включает дополнительное инвертирование загруженных кадров. Иногда бывает полезно... Параметр: /R Значение: Этот параметр имеет смысл только в случае, когда вам необходимо сжимать еще необработанные PCX кадры. По умолчанию кадры в PCX формате должны иметь всего 2 цвета, но это не всегда удобно, т.к. требует дополнительной обработки. Использовние этого ключа даст вам возможность предоставить упаковщику самому заниматься этим преобразованием, с тем, чтобы получить кадры в нужном ему формате. Особенно эффективно использование этого ключа вместе с ключем /SV (о котором ниже), поскольку преобразование палитры - дело довольно долгое. Параметр: /SC Значение: Использование этого ключа имеет смысл только в случае, если анимация пакуется с использованием C64 like метода. Особенность этого метода состоит в том, что при выводе он удваивает размеры исходного изображения. Поэтому запаковав обычные кадры этим методом вы рискуете получить в результате не совсем то, что хотели. Этот ключ позволит вам не прибегать к дополнительной обработке кадров анимации для того, чтобы при использовании C64 like метода получить в результате именно то, что нужно. Параметр: /ST Значение: Если этот ключ присутствует, то после упаковки анимации, на диске также будет создан log-файл, содержащий статистическую информацию о только что упакованной анимации. Имя файла будет таким же как имя выходного .zxa файла, но с расширением log. В этот файл записывается информация о положении и размерах окна анимации (что необходимо знать для того, чтобы упаковать анимацию, состоящую из нескольких кусков или для того, чтобы использовать на Speccy анимацию, упакованную C64 like методом), а также: - количество кадров в анимации - общий размер неупакованных данных - общий размер упакованных данных - процент сжатия - наибольший размер сжатого кадра (эта цифра может быть нужна в качестве значения параметра ZXA_FRAME_BUFFER_SIZE в ZXA library) Параметр: /SV Значение: Запись неупакованных файлов анимации в любом из поддерживаемых упаковщиком форматов. Формат выбирается путем задания его имени в качестве значения ключа: /SV:PCX, /SV:SCR, /SV:Hobeta Однако вам необязательно писать название формата полностью, можно указать только первую букву: /SV:P, /SV:S, /SV:H Использование этого ключа особенно полезно в случаях, когда кадры анимации хранятся в PCX, загрузка которых (особенно если включено преобразование палитры ключем /R) занимает большую часть всего времени упаковки. 6. Упаковка анимаций, состоящих из нескольких кусков Есть небольшая тонкость в том случае, когда вам необходимо упаковать анимацию, состоящую из нескольких кусков. Дело в том, что положение и размеры окна анимации для всех этих кусков обязаны быть одинаковыми. Однако, если предоставить упаковщику возможность самому вычислять это окно для каждого куска, то результаты этих вычислений для разных кусков у подавляющего большинства анимаций будут разными. Единственный выход здесь - задавать положение и размеры окна жестко для всех кусков через параметры командной строки /X, /Y, /XS, /YS. Но положение и размеры этого окна должны быть таковы, чтобы туда помещалось изображение из всех кадров анимации, находящихся во всех кусках. Поэтому алгоритм работы здесь таков: 1) Сначала пакуются все кадры анимации одним куском. При этом надо либо сохранить статистические данные, использовав ключ /SV, либо после того, как анимация будет упакована, записать данные о положении и размере окна анимации, выданные упаковщиком. 2) Теперь можно паковать все куски анимации отдельно, но при этом необходимо жестко задавать положение и размеры анимации в соответствии с теми данными, что были выданы упаковщиком. Как уже было сказано выше - положение и размеры окна анимации задаются через параметры /X, /Y, /XS, /YS. Например: zxa_pack.exe part_1.dat /x:0 /y:10 /xs:12 /ys:64 7. Заключение Вроде все рассказал... Если есть какие-то вопросы и/или пожелания - можно связаться со мной: e-mail: flying_dr@mail.ru IRC : #z80, nick Flying^DR or Flying phone : (8162) 610-930, Александр почта : 173025, Россия, г.Великий Новгород, ул, Зелинского, 19-1-36 Грималовский А.В. Keep the Speccy alive!