Код:
Sprite Converter
Menue:
1. encoder
2. sprite viewer
3. load screen 1
4. load screen 2
5. save sprites
6. save sprites with tabl
7. save sprites tabl
8. Clear sprite buffer
9. Setup
***
encoder - перекодировка спрайтов с одного из загруженных экра-
нов в спрайт буфер, размер которого должен быть не менее 20кб.
Перемещение по экрану осуществляется клавишами: O, P, Q, A,
Space. Для изменения некоторых редактируемых параметров и вызова
различных функций используются горячие клавиши. В низу экрана
распологается служебная строка отображающая текущие режимы:
078 Msk 02x064 Mono Col+m scr1 000000 addr:23EB free:03E4
\ / \ / \ / \ / \ / \ / \ / \ / \ /
| | | | | | | | |
1 2 3 4 5 6 7 8 9
1 - номер текущего спрайта в наборе. Максимальное количество -
256 включая нулевой (пустой) спрайт.
2 - может иметь вид: Msk - задание маски текущего спрайта, Spr -
задание самого спрайта.
3 - размер спрайта XXxYYY, где X - ширина (в знакоместах), Y -
высота (в пикселах).
4 - вид спрайта: Colr - спрайт с атрибутами, Mono - без атрибу-
тов.
5 - структура спрайта:
Col+m - спрайт с маской кодирующийся по столбикам и хранящи-
йся в сл. виде: byte1 - mask, byte2 - spr, byte3 -
Mask, Byte4 - spr и т. д.
Colmn - спрайт без маски хранящийся постолбиково
Lin+m - спрайт с маской хранящийся построчно. Чередование
этого спрайта с его маской аналогично Col+m.
Lin+M - спрайт с маской хранящийся построчно. Спрайт череду-
ется с маской сл. образом: line1 - mask
line2 - sprite
line3 - mask
line4 - sprite...
Line - спрайт без маски хранящийся построчно.
Har+m - спрайт с чередующейся маской (чередование аналогично
Col+m) хранящийся гармошкой.
Harмо - спрайт без маски хранящийся "гармошкой".
!!! Впринципе, пока-что нужны только первые два формата хране-
ние. На-счет остальных подумаю :)
6 - номер экрана
7 - служебные флаги текущего спрайта (см. структуру хранения
спрайтов)
8 - смещение адреса от начала набора для текущего спрайта.
9 - кол-во свободной памяти в спрайт буфере.
Горячие клавиши:
W/S - преведущий/следующий спрайт в наборе.
R/F - уменьшить/увеличить размер "перемещаемой рамочки" (окна
копирования) по X.
T/G - уменьшить увеличить резмер "перемещаемой рамочки" по Y.
1/2/3/4/5/6/7/8/9/0 - size points. Переключение фиксированных
размеров "рамочки". Например: по 1 будет
включаться размер 2x16, 2 - 2x20, 3 - 3x24
и т. д.
Если будешь делать произвольное задание окна копирования как в
BGE (что очень даже желательно), то кнопици R/F, T/G, 1...0 на-
фиг не нужны! :)
C - включение/выключение "цветности" спрайта.
К - переключение режимов кодировки. Сделай переключения на все
написанные мной режимы (по крайней мере, пусть это хотя бы
только отображается).
D - удаление текущего спрайта из набора. После удаления спрайт
набор уплотняется.
!!! Обязательно сканируй клавишу D на отпускание (впринципе, все
остальные лучше тоже). Делается это так:
LOOP XOR A
IN A,(#FE)
CPL
AND #1F
JR NZ,LOOP
Z/X - переключение scr1/scr2
SS + 1/2/3/4/5/6 - включение/выключение служебных флагов текуще-
го спрайта.
CS + 1 - выход в главное меню
***
sprie viwer - просмоторщик спрайтов. Внизу так же как и в
encoder'е распологается служебная строка. В самом просмоторщике
действуют следующие клавиши: W/S, D, SS + 1/2/3/4/5/6 и K. Их
предназначение аналогично encoder'у. По нажатию клавиши K проис-
ходит перекодировка (если она возможна).
!!! Перекодировку делай только если будет более 2 форматов коди-
ровки, что на данный момент, как мне думается, ненужно. :)
***
load screen 1 / load screen 2 - загрузки экранов в экранный бу-
фер. (Два экрана должно быть на тот случай, когда группа файлов
раскидана по экранам, а расположить надо попорядку) Должно заг-
ружать как стандартные экраны, так и экраны без атрибутов. Так
что на всякий случай нужно прочищать атрибуты в буфере и устана-
вливать их в default screen attr (смотри Setup).
***
save sprites - сохранение перекодированного набора спрайтов в
файл без теблицы адресов адресов этих спрайтов.
***
save sprites with tabl - сохранение перекодированного набора
спрайтов в файл с таблицей адресов (см. структуру спрайтов)
***
save sprites tabl - сохранение таблицы асресов спрайтов
!!! Последние двe опции сохранения можно не делать.
***
clear sprite buffer - очистка всего набора спрайтов. Предвари-
тельно должно подтверждаться: "Sure? (y/n)".
***
Setup - он и в африке сетуп :) Здесь можно сделать установку
size points (1/2/3/4/5/6/7/8/9/0 в encoder'e), установку атрибу-
тов и прочую...
Формат хранения спрайтов.
Максимальное кол-во спрайтов - 255 включая нулевой. Нулевой
спрайт - пустой спрайт, создается автоматически и не удаляется.
Кроме того в памяти создается таблица адресов этих спрайтов, или
точнее, смещений от начала набора. Предположим, спрайт буфер на-
чинается с адреса #B100, a таблица хранится в #AE00.
#AD00...#ADFF - младший байт смещения для спрайтов #00...#FF, а
#AE00...#AEFF - соответственно старший байт.
Таким образом, такое расположение таблицы ускоряет процесс изв-
лечения смещения с програмной точки зрения. Само извлечение ад-
реса спрайта NN может иметь сл. вид:
LD L,NN
CALL COUNT
...
COUNT LD H,#AE
LD L,(HL)
INC H
LD D,(HL)
LD HL,#B100
ADD HL,DE
RET
Кроме того, с адреса #B000...#B0FF можно расположить таблицу
служебных параметров для спрайтов #00...#FF, которая приймет
следующий вид:
bit0 - при =1 спрайт с атрибутами
bit1 - при =1 спрайт с маской
bit2...bit7 - какие-нибудь служебные фаги
Если мне понадобится какой-то другой (кроме постолбикового хра-
нения как с маской, так и без) формат хранения спрайтов, то при-
йдется пожертвовать некоторыми служебными флагами.
С адреса #B000 располагаются сами спрайты в следующем формате:
addr=адрес нулевого спрайта, т. е. начала всей "спрайтовой обла-
сти"
addr+1 - ширина спрайта
addr+2 - высота спрайта (в пикселах). Возможно мне понадобятся
извраты типа: высота/2 или высота/4.
addr+3...addr+n - собственно, сам спрайт.
В принципе саму подпрограмму перекодировки можешь пока не пи-
сать, т. к. я тут могу еще кое-что надумать. Пока я не напишу
подпрограммы вывода перекодировку не пиши :)
Собственно, это все.