Вложений: 4
Sprite graber - проба пера
Ударила меня ностальгия по Спектруму в новогодние праздники, решил вспомнить старый опыт. Почитал любимый самоучитель - "Как написать игру на ассемблере", увидел там бейсиковскую программу (с ассемблерными рутинами) для захвата спрайтов из экранного файла в формат, который автор пропагандировал. Для разминки переписал его на ассемблере (творил в SjAsm Plus + Unreal), кое-что дописал от себя. Можно смотреть как устроено (ибо не сложно), можно даже использовать, коли кому сгодится. Если случится вдруг чудо и кому-то это станет надо по жизни, готов даже поддерживать.
upd: SpriteGraber.zip - последняя актуальная версия. Также приложена инструкция.
Вложений: 2
Sprite Grabber AER edition
Сделал как просил AER.
В программе добавился пункт меню "Save Module", который выгружает набор спрайтов вместе с кодом отрисовки. Формат спрайта теперь другой: 2 байта - ширина, высота, потом байты атрибутов, потом растр. Соответственно, спрайты теперь всегда прямоугольные. Переписаны процедуры захвата и вывода под формат - сначала забираются/рисуются атрибуты, потом растр забирается/отрисовывается сверху вниз по линиям. Выгруженный модуль кода вместе со спрайтами релоцируем. Он имеет три точки входа со следующими смещениями от адреса загрузки:
-- +00 - координаты спрайта и его номер в наборе берутся по смещению +06..+08 от адреса загрузки в порядке x, y, n (подходит для вызова из BASIC'а);
-- +02 - координаты и номер передаются на регистрах (C = x, B = y, A = n);
-- +04 - координаты передаются в BC (C = x, B = y), адрес начала спрайта в памяти в HL.
Sprite graber - good feedback!
Цитата:
Сообщение от
AER
хорошо. все хорошо.
Спасибо. Будет лучше.
Цитата:
Сообщение от
AER
Цитата:
в режиме выделения спрайта на экране желтый BORDER означает задание координат, зеленый - задание размера;
а зачем это? я прочитал и уже забыл,какой цвет что означает.
Потому что раньше при нажатии на "огонь" после задания левого верхнего угла ничего визуально не происходило. Теперь хоть BORDER реагирует.
Цитата:
Сообщение от
AER
Цитата:
в режиме удаления спрайта наконец-то для первых 0Fh спрайтов можно вводить их номер одной цифрой (да, 16-ричной)
опять 16чные...
А у меня уже версия с десятичными :-P. Но я ее не отдам. Сделаю еще несколько косметических правок, тогда только. Приоткрою немного завесу тайны - специально для AER я придумал как сделать так, чтобы рамка не исчезала в знакоместах, где INK == PAPER. Только тсс...
Цитата:
Сообщение от
AER
Цитата:
а выгруженный модуль рисования считает их с 0.
ну напиши в коде INC n, делов-то.
Не, тут вопрос филосовский... Меня самого корябить будет (если вдруг стану своим пользователем) при нумерации спрайтов с 1, когда из машкода звать. Подумаю.
Вложений: 2
SpriteGraber: next update
Сделал еще несколько косметических правок для трудящихся. Пока изменений немного и они не превращают пробу пера в подобие чего-то серьезного, но грабер меняется (надеюсь, к лучшему), что и мне в радость, и другим в нее же. Итак:
- обещанные десятичные числа везде;
- из кодового блока выкинуто 6912 байт нулей (сам смеялся когда нашел);
- запись и загрузка с любого дисковода (перед именем файла сказать 2:, B: или b: для дисковода B, например);
- хитрорежим выделения спрайта без исчезания рамки (см. ниже)
- фикс мелкого бага с одъеданием стека при нажатии BREAK;
Как же удалось уважить AER'а с его чудо-рисовалкой, делающей знакоместа с атрибутами #00 там, где нет изображения? Пока криво, но как-то. Сам признаю, каюсь, знаю как лучше, но это тоже потом. Суть лекарства: при выделении спрайта теперь можно жать кнопку "B" - при этом настоящие атрибуты экрана сгинут, а картинка станет "черно-белой" (чтобы не выбиваться из общего вида интерфейса, она станет все-таки черно-ярко-голубой). Если станет страшно, еще раз нажатие "B" вернет все на место. Не зависимо от того, "черно-белая" картинка рисуется, или как родилась, спрайты захватятся с правильными атрибутами.
Собсна, как всегда, результат плюс сорцы прикладываются.