X-Git-Url: https://deadsoftware.ru/gitweb?p=flatwaifu.git;a=blobdiff_plain;f=src%2Fvga.h;h=44f1d485b0b749cc3bc09206b84f0eb1970277c3;hp=48392c20ce7c3c0b1f59fd4bd7fd455c1ccfe6f2;hb=2bb81ea2565c3627c954b5c37326db89b0048472;hpb=3d2215798aaab87db7ae5265d21e359864e1f1c2 diff --git a/src/vga.h b/src/vga.h index 48392c2..44f1d48 100644 --- a/src/vga.h +++ b/src/vga.h @@ -24,219 +24,95 @@ 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#ifdef __cplusplus -extern "C" { -#endif +#ifndef VGA_H_INCLUDED +#define VGA_H_INCLUDED + +#include "glob.h" -// заголовок изображения #pragma pack(1) -typedef struct{ - unsigned short w,h; // W-ширина,H-высота - short sx,sy; // сдвиг центра изображения -}vgaimg; - -// R-красный,G-зеленый,B-синий -typedef struct{ - unsigned char r,g,b; -}rgb_t; +typedef struct { + unsigned short w, h; // W-ширина,H-высота + short sx, sy; // сдвиг центра изображения +} vgaimg; #pragma pack() -// 256-и цветовая палитра VGA -typedef rgb_t vgapal[256]; - // карта цветов typedef unsigned char colormap[256]; -// тип функции перерисовки экрана -typedef void redraw_f(void); +typedef void spr_f(int, int, unsigned char); + +extern int SCRW; +extern int SCRH; +extern char fullscreen; -typedef void spr_f(int, int, unsigned char);//typedef void spr_f(void); +extern byte bright[256]; +extern byte mixmap[256][256]; +extern byte clrmap[256*12]; vgaimg *V_getvgaimg (int id); vgaimg *V_loadvgaimg (char *name); // переключение в режим VGA 320x200,256 цветов // возвращает 0, если все о'кей -short V_init(void); +short V_init (void); // переключение в текстовый режим -void V_done(void); +void V_done (void); // ждать обратного хода луча развертки -void V_wait(void); +void V_wait (void); // вывести картинку i в координатах (x,y) -void V_pic(short x,short y,vgaimg *i); +void V_pic (short x, short y, vgaimg *i); // вывести спрайт i в координатах (x,y) при помощи функции f // параметры: AL=цвет_точки_спрайта EDI=>экран // !!! сохраняйте все регистры, кроме EAX // !!! EDI должен быть переведен на точку вправо (INC EDI или STOSB) -void V_sprf(short x,short y,vgaimg *i,spr_f *f); +void V_sprf (short x, short y, vgaimg *i, spr_f *f); -void smoke_sprf(int x, int y, unsigned char c); -void flame_sprf(int x, int y, unsigned char c); +void smoke_sprf (int x, int y, unsigned char c); +void flame_sprf (int x, int y, unsigned char c); // вывести спрайт i в координатах (x,y) -void V_spr(short x,short y,vgaimg *i); +void V_spr (short x, short y, vgaimg *i); // вывести зеркально перевернутый спрайт i в координатах (x,y) -void V_spr2(short x,short y,vgaimg *i); - -// вывести форму спрайта i в координатах (x,y) одним цветом c -// (подходит для рисования теней) -void V_spr1color(short x,short y,vgaimg *i,unsigned char c); +void V_spr2 (short x, short y, vgaimg *i); // вывести точку цвета c в координатах (x,y) -void V_dot(short x,short y,unsigned char c); - - -void V_manspr(int x,int y,void *p,unsigned char c); - -void V_manspr2(int x,int y,void *p,unsigned char c); +void V_dot (short x, short y, unsigned char c); +void V_manspr (int x, int y, void *p, unsigned char c); +void V_manspr2 (int x, int y, void *p, unsigned char c); // очистить прямоугольник цветом c // x-левая сторона,w-ширина,y-верх,h-высота -void V_clr(short x,short w,short y,short h,unsigned char c); - -// получить текущую палитру в массив p -void VP_getall(void *p); +void V_clr (short x, short w, short y, short h, unsigned char c); // установить палитру из массива p -void VP_setall(void *p); - -// установить n цветов, начиная с f, из массива p -void VP_set(void *p,short f,short n); - -// заполнить палитру одним цветом (r,g,b) -void VP_fill(char r,char g,char b); - -// приблизить палитру p к цвету (r,g,b) на s/n -// полученная палитра находится в pal_tmp -void VP_tocolor(void *p,char r,char g,char b,char n,char s); - -// приблизить палитру p к палитре p2 на s/n -// полученная палитра находится в pal_tmp -void VP_topal(void *p,void *p2,char n,char s); - -// вывести перемасштабированный к размерам (sx,sy) спрайт i в координатах (x,y) -void VM_spr(short x,short y,short sx,short sy,vgaimg *i); +void VP_setall (void *p); // установить область вывода -void V_setrect(short x,short w,short y,short h); +void V_setrect (short x, short w, short y, short h); // установить адрес экранного буфера // NULL - реальный экран -void V_setscr(void *); +void V_setscr (void *); // скопировать прямоугольник на экран -void V_copytoscr(short x,short w,short y,short h); - -void V_maptoscr(int,int,int,int,void *); - -// вывести символ c -void V_putch(short c); - -// вывести строку s -void V_puts(char *s); - -// вычислить длину строки s (в точках) -short V_strlen(char *s); - -// вычислить ширину символа c (в точках) -short V_chrlen(char c); - -// начать анимацию a -void V_start_anim(void *a); - -// нарисовать кадр анимации -// возвращает номер кадра или 0, если конец -short V_draw_anim(void); - - -// полное описание функций RD_* см. в файле REDRAW.DOC +void V_copytoscr (short x, short w, short y, short h); -// инициализация экрана -void *RD_init(short x,short w,short y,short h); - -// начать перерисовку экрана s при помощи функции f -void RD_start(void *s,redraw_f *f); - -// перерисовать прямоугольник -void RD_rect(short x,short w,short y,short h); - -// перерисовать спрайт -void RD_spr(short x,short y,vgaimg *s); -void RD_spr2(short x,short y,vgaimg *s); - -// окончание перерисовки -void RD_end(void); - - -// возвращает яркость цвета (r,g,b) -short VP_brightness(char r,char g,char b); - -// начать поиск по палитре p, состоящей из n цветов, первый - f -void VP_start_search(rgb_t *p,short n,short f); - -// найти подходящий цвет -short VP_findcolor(short r,short g,short b); +void V_maptoscr (int, int, int, int, void *); // переделать изображение i по карте цветов m -void V_remap(vgaimg *i,colormap m); - - -// загружает палитру p из файла f (VGAED 2.0) -// возвращает 0 при ошибке -short load_pal(char *f,void *p); - -// загружает изображение i из файла f (VGAED 2.0) -// возвращает NULL при ошибке -vgaimg *load_vga(char *f,char *i); - -// загружает анимацию из файла f -// возвращает NULL при ошибке -void *load_anim(char *f); +void V_remap (vgaimg *i, colormap m); -// область вывода -extern short scrw,scrh,scrx,scry; +void V_remap_rect (int x, int y, int w, int h, byte *cmap); -// адрес экранного буфера -extern unsigned char *scra; - -// временная палитра -extern vgapal pal_tmp; - -// ждать ли обратного хода луча при установке палитры -// 0-нет, иначе-да -extern char vp_waitrr; - -// координаты для вывода следующего символа -extern short vf_x,vf_y; - -// расстояние между символами -extern short vf_step; - -// цвет символов -// если 0 - не используется -extern unsigned char vf_color; - -// шрифт -extern void *vf_font; - -// виртуальный экран -extern unsigned char scrbuf[64000]; - -void V_remap_rect(int x,int y,int w,int h,byte *cmap); - -void V_toggle(); +void V_toggle (void); void V_rotspr (int x, int y, vgaimg* i, int d); -void V_center(int f); -void V_offset(int ox, int oy); -extern char fullscreen; - +void V_center (int f); +void V_offset (int ox, int oy); -#ifdef __cplusplus -} -#endif +#endif /* VGA_H_INCLUDED */