/* * Seven Kingdoms: Ancient Adversaries * * Copyright 1997,1998 Enlight Software Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ //Filename : VGABUF.H //Description : Header file for class VgaBuffer, Direct Draw Buffer. #ifndef __VGABUF_H #define __VGABUF_H #ifndef __WINDOWS_ #include #endif #ifndef __IMGFUN_H #include #endif #include //-------- Define class VgaBuf ----------------// class File; class VgaBuf { public: LPDIRECTDRAWSURFACE2 dd_buf; DDSURFACEDESC buf_des; BOOL buf_locked; // whether the and back buffers have been locked or not. char* cur_buf_ptr; char is_front; // whether it's the front buffer or not char save_locked_flag; //--------- back buffer ----------// char* buf_ptr() { return cur_buf_ptr; } char* buf_ptr(int x, int y) { return cur_buf_ptr + buf_des.lPitch*y + x; } int buf_pitch() { return buf_des.lPitch; } int buf_size() { return buf_des.dwWidth * buf_des.dwHeight; } int buf_width() { return buf_des.dwWidth; } int buf_height() { return buf_des.dwHeight; } //---- GUI colors -----// static char color_light; // color of the light panel side static char color_dark; // color of the dark panel side static char color_up; // color of up_panel surface static char color_down; // color of down_panel surface static char color_push; // color of pushed button surface static char color_border; // color of color public: VgaBuf(); ~VgaBuf(); //---------- system functions ----------// void init_front(LPDIRECTDRAW2 ddPtr); void init_back(LPDIRECTDRAW2 ddPtr, DWORD =0, DWORD =0); void deinit(); BOOL is_buf_lost(); BOOL restore_buf(); void activate_pal(LPDIRECTDRAWPALETTE ddPalPtr); DWORD color_match(COLORREF rgb); void lock_buf(); void unlock_buf(); void temp_unlock(); void temp_restore_lock(); void set_buf_ptr(char* bufPtr) { cur_buf_ptr = bufPtr; } void set_default_buf_ptr() { cur_buf_ptr = (char*)buf_des.lpSurface; } int write_bmp_file(char* fileName); int write_bmp_file(char* fileName, int offset_x, int offset_y, int width, int height); //---------- painting functions ----------// void bar(int x1,int y1,int x2,int y2,int colorCode); void bar_up(int x1,int y1,int x2,int y2) { bar( x1, y1, x2, y2, color_up ); } void bar_down(int x1,int y1,int x2,int y2) { bar( x1, y1, x2, y2, color_down ); } void pixelize(int x1,int y1,int x2,int y2,int colorCode); // ####### begin Gilbert 7/7 ##########// void draw_pixel(int x1,int y1,int colorCode) { *(buf_ptr()+buf_pitch()*y1+x1) = colorCode; } // ####### end Gilbert 7/7 ##########// void separator(int,int,int,int); void line(int x1,int y1,int x2,int y2,int colorCode); void thick_line(int x1,int y1,int x2,int y2,int colorCode); void indicator(int,int,int,int,float,float,int,int= -1); void indicator(int barType, int x,int y,float,float,int colorScheme); void v_indicator(int,int,int,int,float,float,int,int= -1); void rect(int,int,int,int,int,int); void d3_rect(int,int,int,int); void d3_panel_up(int,int,int,int,int=2,int=1); void d3_panel_down(int,int,int,int,int=2,int=1); void d3_panel_up_clear(int,int,int,int,int=2); void d3_panel_down_clear(int,int,int,int,int=2); void tile(int,int,int,int,char*); void adjust_brightness(int x1,int y1,int x2,int y2,int adjustDegree); void draw_d3_up_border(int x1,int y1,int x2,int y2); void draw_d3_down_border(int x1,int y1,int x2,int y2); void convert_gray(int x1, int y1, int x2, int y2); //-------- buffer saving functions --------// char* save_area(int,int,int,int,char* =0L); void rest_area(char*,int=1 ); void save_area_common_buf(int,int,int,int); void rest_area_common_buf(); //------- bitmap displaying functions -------// void put_bitmap_trans(int x,int y,char* bitmapPtr); void put_bitmap_remap(int desX, int desY, char* bitmapPtr, char *colorTable); void put_large_bitmap(int x1, int y1, File* filePtr); void put_bitmap(int x,int y,char* bitmapPtr); //---------- assembly bitmap manipulation functions ----------// void fast_put_bitmap(int x, int y, char* bitmapPtr) { IMGblt(buf_ptr(), buf_pitch(), x, y, bitmapPtr); } void put_bitmap2(int x,int y,int bitmapWidth, int bitmapHeight, char* bitmapPtr) { IMGblt2(buf_ptr(), buf_pitch(), x, y, bitmapWidth, bitmapHeight, bitmapPtr); } void put_bitmap_32x32(int x,int y,char* bitmapPtr) { IMGblt32x32(buf_ptr(), buf_pitch(), x, y, bitmapPtr); } void put_bitmap_dw(int x,int y,char* bitmapPtr) { IMGbltDW(buf_ptr(), buf_pitch(), x, y, bitmapPtr); } void xor_buf(int x1,int y1,int x2,int y2) { IMGxor(buf_ptr(), buf_pitch(), x1, y1, x2, y2); } void put_bitmap_area(int desX,int desY,char* bitmapPtr,int srcX1, int srcY1, int srcX2, int srcY2) { IMGbltArea(buf_ptr(), buf_pitch(), desX, desY, bitmapPtr, srcX1, srcY1, srcX2, srcY2); } void put_bitmap_area_trans(int desX,int desY,char* bitmapPtr,int srcX1, int srcY1, int srcX2, int srcY2) { IMGbltAreaTrans(buf_ptr(), buf_pitch(), desX, desY, bitmapPtr, srcX1, srcY1, srcX2, srcY2); } void put_bitmap_trans_hmirror(int x,int y,char* bitmapPtr) { IMGbltTransHMirror(buf_ptr(), buf_pitch(), x, y, bitmapPtr); } void put_bitmap_trans_vmirror(int x,int y,char* bitmapPtr) { IMGbltTransVMirror(buf_ptr(), buf_pitch(), x, y, bitmapPtr); } void put_bitmap_trans_hvmirror(int x,int y,char* bitmapPtr) { IMGbltTransHVMirror(buf_ptr(), buf_pitch(), x, y, bitmapPtr); } void put_bitmap_area_trans_hmirror(int desX,int desY,char* bitmapPtr,int srcX1, int srcY1, int srcX2, int srcY2) { IMGbltAreaTransHMirror(buf_ptr(), buf_pitch(), desX, desY, bitmapPtr, srcX1, srcY1, srcX2, srcY2); } void put_bitmap_trans_remap(int x,int y,char* bitmapPtr,char* colorTable) { IMGbltTransRemap(buf_ptr(), buf_pitch(), x, y, bitmapPtr, colorTable); } void put_bitmap_area_remap(int desX,int desY,char* bitmapPtr,int srcX1, int srcY1, int srcX2, int srcY2, char *colorTable) { IMGbltAreaRemap(buf_ptr(), buf_pitch(), desX, desY, bitmapPtr, srcX1, srcY1, srcX2, srcY2, colorTable); } void put_bitmap_area_trans_remap(int desX,int desY,char* bitmapPtr,int srcX1, int srcY1, int srcX2, int srcY2, char *colorTable) { IMGbltAreaTransRemap(buf_ptr(), buf_pitch(), desX, desY, bitmapPtr, srcX1, srcY1, srcX2, srcY2, colorTable); } //-------- functions with compression ---------// void remap_decompress(char* desPtr, char* srcPtr, char* colorTable) { IMGremapDecompress(desPtr, srcPtr, colorTable); } void put_bitmap_trans_decompress(int x,int y,char* bitmapPtr) { IMGbltTransDecompress(buf_ptr(), buf_pitch(), x, y, bitmapPtr); } void put_bitmap_area_trans_decompress(int x,int y,char* bitmapPtr,int srcX1,int srcY1,int srcX2,int srcY2) { IMGbltAreaTransDecompress(buf_ptr(), buf_pitch(), x, y, bitmapPtr, srcX1, srcY1, srcX2, srcY2); } void put_bitmap_trans_decompress_hmirror(int x,int y,char* bitmapPtr) { IMGbltTransDecompressHMirror(buf_ptr(), buf_pitch(), x, y, bitmapPtr); } void put_bitmap_area_trans_decompress_hmirror(int x,int y,char* bitmapPtr, int srcX1, int srcY1, int srcX2, int srcY2) { IMGbltAreaTransDecompressHMirror(buf_ptr(), buf_pitch(), x, y, bitmapPtr, srcX1, srcY1, srcX2, srcY2); } //-------- functions with compression & color remapping ---------// void put_bitmap_trans_remap_decompress(int x,int y,char* bitmapPtr,char* colorTable) { IMGbltTransRemapDecompress(buf_ptr(), buf_pitch(), x, y, bitmapPtr, colorTable); } void put_bitmap_trans_remap_decompress_hmirror(int x,int y,char* bitmapPtr,char* colorTable) { IMGbltTransRemapDecompressHMirror(buf_ptr(), buf_pitch(), x, y, bitmapPtr, colorTable); } void put_bitmap_area_trans_remap_decompress(int x,int y,char* bitmapPtr, int srcX1, int srcY1, int srcX2, int srcY2, char* colorTable) { IMGbltAreaTransRemapDecompress(buf_ptr(), buf_pitch(), x, y, bitmapPtr, srcX1, srcY1, srcX2, srcY2, colorTable); } void put_bitmap_area_trans_remap_decompress_hmirror(int x,int y,char* bitmapPtr, int srcX1, int srcY1, int srcX2, int srcY2, char* colorTable) { IMGbltAreaTransRemapDecompressHMirror(buf_ptr(), buf_pitch(), x, y, bitmapPtr, srcX1, srcY1, srcX2, srcY2, colorTable); } //---------- read bitmap from buffer ----------// void read_bitmap(int x1,int y1,int x2,int y2,char* bitmapPtr) { IMGread(buf_ptr(), buf_pitch(), x1, y1, x2, y2, bitmapPtr); } //---------- other assembly functions ---------// void black_32x32(int x, int y) { IMGblack32x32(buf_ptr(), buf_pitch(), x, y); } void pixelize_32x32(int x, int y, int color) { IMGpixel32x32(buf_ptr(), buf_pitch(), x, y, color); } void snow_32x32(int x, int y, int randomSeed, int baseLevel) { IMGsnow32x32(buf_ptr(), buf_pitch(), x, y, randomSeed, baseLevel); } void explore_mask(int x, int y, char *maskBitmap, int northRow, int thisRow, int southRow) { IMGexploreMask32x32(buf_ptr(), buf_pitch(), x, y, maskBitmap, northRow, thisRow, southRow); } void explore_remap(int x, int y, char *remapBitmap, char **colorTableArray, int northRow, int thisRow, int southRow) { IMGexploreRemap32x32(buf_ptr(), buf_pitch(), x, y, remapBitmap, colorTableArray, northRow, thisRow, southRow); } void fog_remap(int x, int y, char **colorTableArray, unsigned char *northRow, unsigned char *thisRow, unsigned char *southRow) { IMGfogRemap32x32( buf_ptr(), buf_pitch(), x, y, colorTableArray, northRow, thisRow, southRow); } // ----- color remapping functions ------// void remap_bar(int x1, int y1, int x2, int y2, unsigned char *colorTable) { IMGremapBar(buf_ptr(), buf_pitch(), x1, y1, x2, y2, colorTable); } void remap_bitmap(int x, int y, char *bitmapPtr, unsigned char **colorTableArray) { IMGremap(buf_ptr(), buf_pitch(), x, y, bitmapPtr, colorTableArray);} void remap_bitmap_hmirror(int x, int y, char *bitmapPtr, unsigned char **colorTableArray) { IMGremapHMirror(buf_ptr(), buf_pitch(), x, y, bitmapPtr, colorTableArray);} void remap_bitmap_area(int x, int y, char *bitmapPtr, unsigned char **colorTableArray, int srcX1, int srcY1, int srcX2, int srcY2) { IMGremapArea(buf_ptr(), buf_pitch(), x, y, bitmapPtr, colorTableArray, srcX1, srcY1, srcX2, srcY2); } void remap_bitmap_area_hmirror(int x, int y, char *bitmapPtr, unsigned char **colorTableArray, int srcX1, int srcY1, int srcX2, int srcY2) { IMGremapAreaHMirror(buf_ptr(), buf_pitch(), x, y, bitmapPtr, colorTableArray, srcX1, srcY1, srcX2, srcY2); } // --------- VgaBuf to VgaBuf copy ------------ // void blt_buf( VgaBuf *srcBuf, int x1, int y1 ); }; extern VgaBuf vga_front, vga_back, vga_true_front; //--------------------------------------------// #endif