DEADSOFTWARE

48392c20ce7c3c0b1f59fd4bd7fd455c1ccfe6f2
[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 vgaimg *V_getvgaimg (int id);
56 vgaimg *V_loadvgaimg (char *name);
58 // переключение в режим VGA 320x200,256 цветов
59 // возвращает 0, если все о'кей
60 short V_init(void);
62 // переключение в текстовый режим
63 void V_done(void);
65 // ждать обратного хода луча развертки
66 void V_wait(void);
68 // вывести картинку i в координатах (x,y)
69 void V_pic(short x,short y,vgaimg *i);
71 // вывести спрайт i в координатах (x,y) при помощи функции f
72 // параметры: AL=цвет_точки_спрайта EDI=>экран
73 // !!! сохраняйте все регистры, кроме EAX
74 // !!! EDI должен быть переведен на точку вправо (INC EDI или STOSB)
75 void V_sprf(short x,short y,vgaimg *i,spr_f *f);
77 void smoke_sprf(int x, int y, unsigned char c);
78 void flame_sprf(int x, int y, unsigned char c);
80 // вывести спрайт i в координатах (x,y)
81 void V_spr(short x,short y,vgaimg *i);
83 // вывести зеркально перевернутый спрайт i в координатах (x,y)
84 void V_spr2(short x,short y,vgaimg *i);
86 // вывести форму спрайта i в координатах (x,y) одним цветом c
87 // (подходит для рисования теней)
88 void V_spr1color(short x,short y,vgaimg *i,unsigned char c);
90 // вывести точку цвета c в координатах (x,y)
91 void V_dot(short x,short y,unsigned char c);
94 void V_manspr(int x,int y,void *p,unsigned char c);
96 void V_manspr2(int x,int y,void *p,unsigned char c);
99 // очистить прямоугольник цветом c
100 // x-левая сторона,w-ширина,y-верх,h-высота
101 void V_clr(short x,short w,short y,short h,unsigned char c);
103 // получить текущую палитру в массив p
104 void VP_getall(void *p);
106 // установить палитру из массива p
107 void VP_setall(void *p);
109 // установить n цветов, начиная с f, из массива p
110 void VP_set(void *p,short f,short n);
112 // заполнить палитру одним цветом (r,g,b)
113 void VP_fill(char r,char g,char b);
115 // приблизить палитру p к цвету (r,g,b) на s/n
116 // полученная палитра находится в pal_tmp
117 void VP_tocolor(void *p,char r,char g,char b,char n,char s);
119 // приблизить палитру p к палитре p2 на s/n
120 // полученная палитра находится в pal_tmp
121 void VP_topal(void *p,void *p2,char n,char s);
123 // вывести перемасштабированный к размерам (sx,sy) спрайт i в координатах (x,y)
124 void VM_spr(short x,short y,short sx,short sy,vgaimg *i);
126 // установить область вывода
127 void V_setrect(short x,short w,short y,short h);
129 // установить адрес экранного буфера
130 // NULL - реальный экран
131 void V_setscr(void *);
133 // скопировать прямоугольник на экран
134 void V_copytoscr(short x,short w,short y,short h);
136 void V_maptoscr(int,int,int,int,void *);
138 // вывести символ c
139 void V_putch(short c);
141 // вывести строку s
142 void V_puts(char *s);
144 // вычислить длину строки s (в точках)
145 short V_strlen(char *s);
147 // вычислить ширину символа c (в точках)
148 short V_chrlen(char c);
150 // начать анимацию a
151 void V_start_anim(void *a);
153 // нарисовать кадр анимации
154 // возвращает номер кадра или 0, если конец
155 short V_draw_anim(void);
158 // полное описание функций RD_* см. в файле REDRAW.DOC
160 // инициализация экрана
161 void *RD_init(short x,short w,short y,short h);
163 // начать перерисовку экрана s при помощи функции f
164 void RD_start(void *s,redraw_f *f);
166 // перерисовать прямоугольник
167 void RD_rect(short x,short w,short y,short h);
169 // перерисовать спрайт
170 void RD_spr(short x,short y,vgaimg *s);
171 void RD_spr2(short x,short y,vgaimg *s);
173 // окончание перерисовки
174 void RD_end(void);
177 // возвращает яркость цвета (r,g,b)
178 short VP_brightness(char r,char g,char b);
180 // начать поиск по палитре p, состоящей из n цветов, первый - f
181 void VP_start_search(rgb_t *p,short n,short f);
183 // найти подходящий цвет
184 short VP_findcolor(short r,short g,short b);
186 // переделать изображение i по карте цветов m
187 void V_remap(vgaimg *i,colormap m);
190 // загружает палитру p из файла f (VGAED 2.0)
191 // возвращает 0 при ошибке
192 short load_pal(char *f,void *p);
194 // загружает изображение i из файла f (VGAED 2.0)
195 // возвращает NULL при ошибке
196 vgaimg *load_vga(char *f,char *i);
198 // загружает анимацию из файла f
199 // возвращает NULL при ошибке
200 void *load_anim(char *f);
202 // область вывода
203 extern short scrw,scrh,scrx,scry;
205 // адрес экранного буфера
206 extern unsigned char *scra;
208 // временная палитра
209 extern vgapal pal_tmp;
211 // ждать ли обратного хода луча при установке палитры
212 // 0-нет, иначе-да
213 extern char vp_waitrr;
215 // координаты для вывода следующего символа
216 extern short vf_x,vf_y;
218 // расстояние между символами
219 extern short vf_step;
221 // цвет символов
222 // если 0 - не используется
223 extern unsigned char vf_color;
225 // шрифт
226 extern void *vf_font;
228 // виртуальный экран
229 extern unsigned char scrbuf[64000];
231 void V_remap_rect(int x,int y,int w,int h,byte *cmap);
233 void V_toggle();
234 void V_rotspr (int x, int y, vgaimg* i, int d);
235 void V_center(int f);
236 void V_offset(int ox, int oy);
237 extern char fullscreen;
240 #ifdef __cplusplus
242 #endif