DEADSOFTWARE

132af8cbd210247ef2c16757c030d0edd0f10755
[flatwaifu.git] / src / vga.h
1 /*
2 Управление графикой VGA для DOS4GW
3 Модуль версии 1.0
4 Copyright (C) Алексей Волынсков, 1996
6 Copyright (C) Prikol Software 1996-1997
7 Copyright (C) Aleksey Volynskov 1996-1997
8 Copyright (C) <ARembo@gmail.com> 2011
10 This file is part of the Doom2D:Rembo project.
12 Doom2D:Rembo is free software; you can redistribute it and/or modify
13 it under the terms of the GNU General Public License version 2 as
14 published by the Free Software Foundation.
16 Doom2D:Rembo is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License for more details.
21 You should have received a copy of the GNU General Public License
22 along with this program; if not, see <http://www.gnu.org/licenses/> or
23 write to the Free Software Foundation, Inc.,
24 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
25 */
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
31 // заголовок изображения
32 #pragma pack(1)
33 typedef struct{
34 unsigned short w,h; // W-ширина,H-высота
35 short sx,sy; // сдвиг центра изображения
36 }vgaimg;
38 // R-красный,G-зеленый,B-синий
39 typedef struct{
40 unsigned char r,g,b;
41 }rgb_t;
42 #pragma pack()
44 // 256-и цветовая палитра VGA
45 typedef rgb_t vgapal[256];
47 // карта цветов
48 typedef unsigned char colormap[256];
50 // тип функции перерисовки экрана
51 typedef void redraw_f(void);
53 typedef void spr_f(int, int, unsigned char);//typedef void spr_f(void);
55 // переключение в режим VGA 320x200,256 цветов
56 // возвращает 0, если все о'кей
57 short V_init(void);
59 // переключение в текстовый режим
60 void V_done(void);
62 // ждать обратного хода луча развертки
63 void V_wait(void);
65 // вывести картинку i в координатах (x,y)
66 void V_pic(short x,short y,vgaimg *i);
68 // вывести спрайт i в координатах (x,y) при помощи функции f
69 // параметры: AL=цвет_точки_спрайта EDI=>экран
70 // !!! сохраняйте все регистры, кроме EAX
71 // !!! EDI должен быть переведен на точку вправо (INC EDI или STOSB)
72 void V_sprf(short x,short y,vgaimg *i,spr_f *f);
74 void smoke_sprf(int x, int y, unsigned char c);
75 void flame_sprf(int x, int y, unsigned char c);
77 // вывести спрайт i в координатах (x,y)
78 void V_spr(short x,short y,vgaimg *i);
80 // вывести зеркально перевернутый спрайт i в координатах (x,y)
81 void V_spr2(short x,short y,vgaimg *i);
83 // вывести форму спрайта i в координатах (x,y) одним цветом c
84 // (подходит для рисования теней)
85 void V_spr1color(short x,short y,vgaimg *i,unsigned char c);
87 // вывести точку цвета c в координатах (x,y)
88 void V_dot(short x,short y,unsigned char c);
91 void V_manspr(int x,int y,void *p,unsigned char c);
93 void V_manspr2(int x,int y,void *p,unsigned char c);
96 // очистить прямоугольник цветом c
97 // x-левая сторона,w-ширина,y-верх,h-высота
98 void V_clr(short x,short w,short y,short h,unsigned char c);
100 // получить текущую палитру в массив p
101 void VP_getall(void *p);
103 // установить палитру из массива p
104 void VP_setall(void *p);
106 // установить n цветов, начиная с f, из массива p
107 void VP_set(void *p,short f,short n);
109 // заполнить палитру одним цветом (r,g,b)
110 void VP_fill(char r,char g,char b);
112 // приблизить палитру p к цвету (r,g,b) на s/n
113 // полученная палитра находится в pal_tmp
114 void VP_tocolor(void *p,char r,char g,char b,char n,char s);
116 // приблизить палитру p к палитре p2 на s/n
117 // полученная палитра находится в pal_tmp
118 void VP_topal(void *p,void *p2,char n,char s);
120 // вывести перемасштабированный к размерам (sx,sy) спрайт i в координатах (x,y)
121 void VM_spr(short x,short y,short sx,short sy,vgaimg *i);
123 // установить область вывода
124 void V_setrect(short x,short w,short y,short h);
126 // установить адрес экранного буфера
127 // NULL - реальный экран
128 void V_setscr(void *);
130 // скопировать прямоугольник на экран
131 void V_copytoscr(short x,short w,short y,short h);
133 void V_maptoscr(int,int,int,int,void *);
135 // вывести символ c
136 void V_putch(short c);
138 // вывести строку s
139 void V_puts(char *s);
141 // вычислить длину строки s (в точках)
142 short V_strlen(char *s);
144 // вычислить ширину символа c (в точках)
145 short V_chrlen(char c);
147 // начать анимацию a
148 void V_start_anim(void *a);
150 // нарисовать кадр анимации
151 // возвращает номер кадра или 0, если конец
152 short V_draw_anim(void);
155 // полное описание функций RD_* см. в файле REDRAW.DOC
157 // инициализация экрана
158 void *RD_init(short x,short w,short y,short h);
160 // начать перерисовку экрана s при помощи функции f
161 void RD_start(void *s,redraw_f *f);
163 // перерисовать прямоугольник
164 void RD_rect(short x,short w,short y,short h);
166 // перерисовать спрайт
167 void RD_spr(short x,short y,vgaimg *s);
168 void RD_spr2(short x,short y,vgaimg *s);
170 // окончание перерисовки
171 void RD_end(void);
174 // возвращает яркость цвета (r,g,b)
175 short VP_brightness(char r,char g,char b);
177 // начать поиск по палитре p, состоящей из n цветов, первый - f
178 void VP_start_search(rgb_t *p,short n,short f);
180 // найти подходящий цвет
181 short VP_findcolor(short r,short g,short b);
183 // переделать изображение i по карте цветов m
184 void V_remap(vgaimg *i,colormap m);
187 // загружает палитру p из файла f (VGAED 2.0)
188 // возвращает 0 при ошибке
189 short load_pal(char *f,void *p);
191 // загружает изображение i из файла f (VGAED 2.0)
192 // возвращает NULL при ошибке
193 vgaimg *load_vga(char *f,char *i);
195 // загружает анимацию из файла f
196 // возвращает NULL при ошибке
197 void *load_anim(char *f);
199 // область вывода
200 extern short scrw,scrh,scrx,scry;
202 // адрес экранного буфера
203 extern unsigned char *scra;
205 // временная палитра
206 extern vgapal pal_tmp;
208 // ждать ли обратного хода луча при установке палитры
209 // 0-нет, иначе-да
210 extern char vp_waitrr;
212 // координаты для вывода следующего символа
213 extern short vf_x,vf_y;
215 // расстояние между символами
216 extern short vf_step;
218 // цвет символов
219 // если 0 - не используется
220 extern unsigned char vf_color;
222 // шрифт
223 extern void *vf_font;
225 // виртуальный экран
226 extern unsigned char scrbuf[64000];
229 void V_toggle();
230 void V_rotspr (int x, int y, vgaimg* i, int d);
231 void V_center(int f);
232 void V_offset(int ox, int oy);
233 extern char fullscreen;
236 #ifdef __cplusplus
238 #endif