⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gl.h

📁 仿游戏 Diablo 的源代码
💻 H
📖 第 1 页 / 共 2 页
字号:
	
	inline virtual int  MakeColor( RGB color ){
		return color & 0xffffff;
	};		

	inline virtual int  GetR( int pixel ){
		return (( pixel >> 16 ) & 0xff );
	};

	inline virtual int  GetG( int pixel ){
		return (( pixel >> 8 ) & 0xff );
	};

	inline virtual int  GetB( int pixel ){
		return ( pixel & 0xff );
	};
	virtual void SetColor( int color );
	virtual void SetColorKey( int color );
};

/////////////////////////////////////////////////////////////////////
// 简单精灵显示例程
typedef void (*SpriteBlitAlphaFunc)( Bitmap*, int, int, Bitmap* );
typedef void (*SpriteBlitBetaFunc)( Bitmap*, int, int, Bitmap* );

extern SpriteBlitAlphaFunc SpriteBlitAlpha;
extern SpriteBlitBetaFunc SpriteBlitBeta;

int InitSprite( void );
void SpriteSetDrawMode( int mode, DWORD degree );

/*class Sprite;


class Sprite : public BitmapHi{
public:
	static SpriteBlitAlphaFunc BlitAlpha;
	static SpriteBlitBetaFunc BlitBeta;

	void SetDrawMode( int mode, int degree );
};
*/
extern SpriteBlitAlphaFunc spriteBlitAlpha[9];
extern SpriteBlitBetaFunc spriteBlitBeta[9];

// 带有Alpha混合的精灵拷贝函数
void SpriteBlitAlpha0MMX( Bitmap* dest, int x, int y, Bitmap* src );
void SpriteBlitAlpha1MMX( Bitmap* dest, int x, int y, Bitmap* src );
void SpriteBlitAlpha2MMX( Bitmap* dest, int x, int y, Bitmap* src );
void SpriteBlitAlpha3MMX( Bitmap* dest, int x, int y, Bitmap* src );
void SpriteBlitAlpha4MMX( Bitmap* dest, int x, int y, Bitmap* src );
void SpriteBlitAlpha5MMX( Bitmap* dest, int x, int y, Bitmap* src );
void SpriteBlitAlpha6MMX( Bitmap* dest, int x, int y, Bitmap* src );
void SpriteBlitAlpha7MMX( Bitmap* dest, int x, int y, Bitmap* src );
void SpriteBlitAlpha8MMX( Bitmap* dest, int x, int y, Bitmap* src );

// 带有明暗处理的精灵拷贝函数
void SpriteBlitBeta0MMX( Bitmap* dest, int x, int y, Bitmap* src );
void SpriteBlitBeta1MMX( Bitmap* dest, int x, int y, Bitmap* src );
void SpriteBlitBeta2MMX( Bitmap* dest, int x, int y, Bitmap* src );
void SpriteBlitBeta3MMX( Bitmap* dest, int x, int y, Bitmap* src );
void SpriteBlitBeta4MMX( Bitmap* dest, int x, int y, Bitmap* src );
void SpriteBlitBeta5MMX( Bitmap* dest, int x, int y, Bitmap* src );
void SpriteBlitBeta6MMX( Bitmap* dest, int x, int y, Bitmap* src );
void SpriteBlitBeta7MMX( Bitmap* dest, int x, int y, Bitmap* src );
void SpriteBlitBeta8MMX( Bitmap* dest, int x, int y, Bitmap* src );
void SpriteBlitBeta9MMX( Bitmap* dest, int x, int y, Bitmap* src, int brightness );
void SpriteBlitBeta10MMX( Bitmap* dest, int x, int y, Bitmap* src, int b1, int b2, short* buf );

int testSprite( void );

/////////////////////////////////////////////////////////////////////
// 文本显示例程,使用前先调用InitHanzi(int)


class Hanzi{
public:
	static short *hzk12, *hzk16;
	static char* asc12, *asc16;
	
	static char hzk12name[9], hzk16name[9], asc12name[9], asc16name[9];
	static int count;

	static int capabilities;
	enum{
		SmallFont = 0x1,
		MiddleFont = 0x2,
		AllFont = 0x3
	};
	
	static int size;	// 12 or 16 
	enum{
		Small = 12,
		Middle = 16
	};
	
	static short* hzAddr; // current hzk dots data area
	static char* ascAddr; // current ascii dots data area
	
public:
	Hanzi();
	~Hanzi();
	
	static int SetFontSize( int fsize );
	
	void TextOut( Bitmap* bmp, int x, int y, char* str, 
						int color );
	void PutHanzi( Bitmap* bmp, int x, int y, char hz[2] );
	void PutAscii( Bitmap* bmp, int x, int y, char *asc );
	void Printf( Bitmap* bmp, int x, int y, int color, char *format, ... );
};
extern Hanzi hz;
extern int hanziInstalled;

// initialize hanzi display class
int InitHanzi( int fonts );

/////////////////////////////////////////////////////////////////////
// see what type the CPU is 

typedef struct CPUInfo {
	char vendor[16];
	int family;
	int model;
	int fpu; 
	int mmx; 
	int _3dnow;
	int cpuid; 
} CPUInfo;
extern CPUInfo cpu;

void CheckCPU( void );


/////////////////////////////////////////////////////////////////////
// package file 

#define MAX_PATH_LEN 	80
#define MAX_CFILE_NUM	15

#define CFILE_APPEND	0
#define CFILE_DELETE	1

struct File{
	DWORD address;
	DWORD length;
	DWORD count;
	FILE *fp;
	
	File();
	~File();
	
	int Close( void );
	
	inline int Getc( void )
	{
		if( length - count - 1 < 0 )
			return EOF;
		count ++;
		return fgetc( fp );
	};

	char *Gets( char* buf, int size );
	int Getw( void );
	int Getdw( void );
	int Read( void* buffer, DWORD size );
	int Seek( DWORD d, int mode );
};

typedef struct DirItem{
	BYTE type;
	char filename[13];
	DWORD address;
	DWORD length;
} DirItem;

typedef struct Directory{
	long cur;
	long num;
	DirItem *items;

	Directory(){
		items = NULL;
	};	
	~Directory();	
	int ReadDisk( FILE *fp );
	int SearchDir( char dname[13], int type );
	
} Directory;

struct PackageFile{
	char fname[MAX_PATH_LEN];
	Directory *root;
	Directory *currentDir;
	char currentPath[MAX_PATH_LEN];
//	FILE *fp;
};

struct PackFile{
	PackageFile file[MAX_CFILE_NUM];
//	int count[MAX_CFILE_NUM];
	
	PackFile();
	~PackFile();
	
	File* Open( char *fname ); // open file as read-only
	int Close( char *fname ); 
	int Close( int id );
	int OpenCfile( int id, char *filename );
	File* OpenSubfile( int id, char *subname );
	File* OpenNormalFile( char *filename );
	
	void FixFname( char *newfname, char *fname );
};
extern PackFile cfile;

/////////////////////////////////////////////////////////////////////
// 配置文件操作函数

int InitConfig( void );
void ConfigExit( void );
int ConfigSetFile( char *filename );
char* ConfigGetString( char *section, char *name, char *deft );
int ConfigGetInt( char *section, char *name, int deft );
float ConfigGetFloat( char *section, char *name, float deft );
void ConfigSetString( char *section, char *name, char *value );
void ConfigSetInt( char *section, char *name, int value );
void ConfigSetFloat( char *section, char *name, float value );


/////////////////////////////////////////////////////////////////////
//行压缩位图
class RleBitmap{
public:
	int colorDepth;
	int x, y;		//位置矫正
	int width, height;		//压缩后的大小
	DWORD size;			//像素数据量
	char **line;

	RleBitmap();
	~RleBitmap();

	void ConvertFormat( int format );
};
RleBitmap* CreateRleBitmap( Bitmap* src, int genOl ); // genOl是否产生轮廓
int SaveRleBitmap( char* filename, RleBitmap* src );
RleBitmap* LoadRleBitmap( char *fname );

void RleBitmapBlit( Bitmap* dest, int x, int y, RleBitmap* src );

void initRleBitmap( void );
void testRleBitmap( void );

/////////////////////////////////////////////////////////////////////
//行压缩位图序列
class Animate{
public:
	RleBitmap** pic;
	int totalFrames, currentFrame;
	int x, y;		//坐标矫正
	DWORD size;		//数据长度
	void* data;		//数据
	int dir;		//播放的方向0:正向
	int autoReverse;

	Animate();
	~Animate();

	int Draw( Bitmap* dest, int x, int y );
	int DrawCurrentFrame( Bitmap* dest, int x, int y );
	int GetNextFrame( RleBitmap** rbm );
	void Restart( void );
	void SetXY( int x, int y );
};

int SaveAnimate( char* filename );
Animate* LoadAnimate( char* filename );
int MakeAnimateFile( char* filename, RleBitmap** src, int num );

int InitAni( void );
void testAni( void );

#endif		// GRAPHIC_LIB

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -