Важная информация

User Tag List

Показано с 1 по 1 из 1

Тема: Скрипт PBM - СПРАЙТ

  1. #1
    Master
    Регистрация
    27.01.2005
    Сообщений
    888
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    163
    Поблагодарили
    131 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Скрипт PBM - СПРАЙТ

    Написал скрипт для преобразования PBM в спрайт в формате C-файлов. Скрипт не быстрый, но рабочий.

    https://github.com/salextpuru/sdcc-n...ts/pbm2sprmov0

    Как работает? Очень просто.

    Например, есть файл moln.pbm.

    Если нам нужен монохромный спрайт - то пишем:

    Код:
    ./pbm2sprmov0 moln.pbm 4
    Если нам нужен спрайт желтый INK черный PAPER - то пишем:

    Код:
    ./pbm2sprmov0 moln.pbm 4 6
    Теперь о параметрах:
    moln.pbm - это имя входного файла. Тут всё ясно.

    4 - количество фаз движения спрайта, содержащихся в файле. Предполагается, что все фазы движения - одинаковы по размеру.

    6 - цвет. В нашем примере - желтый. Если он не задан, то спрайты будут создаваться без атрибутов. Если задан - то будут добавлены атрибуты.

    После того, как скрипт отработает, появятся два файла: moln.c и moln.h.
    В них будет информация о спрайте, его размеры, цвет (или его отсутсвие). Отдельно - каждая фаза спрайта и массив указателей на фазы.

    Как все это работает смотрим тут: https://github.com/salextpuru/sdcc-n.../apps/demo17_1

    Файл moln.pbm выглядит так: Название: moln.png
Просмотров: 173

Размер: 306 байт

    В нем 4 фазы (то есть 4 одинаковых картинки расположенных ВЕРТИКАЛЬНО).

    Размеры одной фазы скрипт вычисляет сам исходя из размеров, заданных в PBM-файле и количества фаз.

    В итоге получаем файл moln.h:

    Код:
    /**
    	@file moln.h
    
    	Spite name: moln*
    
    	W(chars): 3     H(CHARS):2
    	PHASES: 4
    	Phase's size:  bytes
    	Sprite size:   bytes
    	Color: 06
    
    */
    #ifndef moln_H_DEFINED
    #define moln_H_DEFINED
    #include <stdint.h>
    #include <spr0.h>
    
    extern const Sprite0* const moln[4];	// Sprite phases
    extern const Sprite0 moln_0;	// Sprite phase 0
    extern const Sprite0 moln_1;	// Sprite phase 1
    extern const Sprite0 moln_2;	// Sprite phase 2
    extern const Sprite0 moln_3;	// Sprite phase 3
    
    #endif /* moln_H_DEFINED */
    и файл moln.c

    /**
    @file moln.c

    Spite name: moln*

    W(chars): 3 H(CHARS):2
    PHASES: 4
    Phase's size: bytes
    Sprite size: bytes
    Color: 06

    */
    #include "moln.h"


    // Phase 0
    const Sprite0 moln_0 = {
    .sz = 54 + sizeof(Sprite0),
    .w = 3,
    .h = 2,
    .datap ={
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x40,0xc0,0x00,0xa1,0xe3,0x00,
    0x13,0x77,0x00,0x0e,0x3e,0x00,0x04,0x1c,
    0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    06,06,06,06,06,06,}
    };

    // Phase 1
    const Sprite0 moln_1 = {
    .sz = 54 + sizeof(Sprite0),
    .w = 3,
    .h = 2,
    .datap ={
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x80,0x00,0x41,0xc0,0x20,0xe3,0xc0,
    0x11,0x37,0x00,0x0a,0x1e,0x00,0x04,0x0c,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    06,06,06,06,06,06,}
    };

    // Phase 2
    const Sprite0 moln_2 = {
    .sz = 54 + sizeof(Sprite0),
    .w = 3,
    .h = 2,
    .datap ={
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x80,0x00,0x41,0xc0,0x00,0xe3,0xe0,
    0x01,0x37,0x70,0x0a,0x1e,0x30,0x04,0x0c,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    06,06,06,06,06,06,}
    };

    // Phase 3
    const Sprite0 moln_3 = {
    .sz = 54 + sizeof(Sprite0),
    .w = 3,
    .h = 2,
    .datap ={
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x40,0xc0,0x00,0xa1,0xe0,
    0x01,0x13,0x70,0x02,0x0e,0x3c,0x00,0x04,
    0x1c,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    06,06,06,06,06,06,}
    };

    // Sprite phases
    const Sprite0* const moln[4]={&moln_0,&moln_1,&moln_2,&moln_3,};
    Дальше просто подключаем к С-программе и используем как хотим. Пример процедуры вывода спрайтов тут: https://github.com/salextpuru/sdcc-n...emo17_1/main.c


    Ну и простой и в общем-то бесполезный демчик того, что получилось: demo17_1spr-basic.tap.7z
    Последний раз редактировалось SfS; 28.04.2018 в 04:39.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. [GreaseMonkey] Скрипт для ZX.PK.RU
    от breeze в разделе Форум
    Ответов: 8
    Последнее: 20.07.2014, 22:59
  2. Выводим спрайт, с проверкой границ экрана
    от drbars в разделе Программирование
    Ответов: 30
    Последнее: 06.01.2013, 14:00
  3. простой скрипт для написания хелпов
    от jim в разделе Программирование
    Ответов: 2
    Последнее: 09.04.2007, 14:33
  4. посоветуйте спрайт-едитор
    от boo_boo в разделе Софт
    Ответов: 11
    Последнее: 15.03.2007, 10:43
  5. Самый большой спрайт игрока
    от goodboy в разделе Игры
    Ответов: 17
    Последнее: 21.08.2006, 07:52

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •