📄 cbgame.h
字号:
/////////////////
// CBGame.h : 《赤壁》全局数据结构
// CBGame.h : << chibi >> global data structure
//
// v0011 : Oct.18.1996
// v0012 : Nov.28.1996
// v0013 : Feb.5.1997, changed setunitdata() part in GAME_ReadMedFile()
// add function GAME_ReadMedHeader()
// v0020 : Feb.28.1997, add function named DATA_ReadDATAFile()
//
// v0030 : May.2.1997, add save&load file, read&write option file functions
// v0031 : May.14.1997, add some values in main structure: nBuildType, nMusicID
//
// 编写 : 刘刚
// written by : Liu Gang
//
// 编译器 : Visual C++ 4.2
// Compiler : Visual C++ 4.2
//
// 版权 : 北京前导软件有限公司 1996-1997
// Copyright : WayAhead Co.Ltd. 1996-1997
/////////////////
// 此文件用来读取游戏设置,地图数据,包含所有对单元(将领、士兵、建筑)
// 的操作。
#ifndef __CBGAME_H__
#define __CBGAME_H__
#include "CBCtrl.h"
//#include "CBData.h"
#define GAME_ERROR_ID 800
// 游戏者的最大数
#define GAME_PLAYER_MAX 5
/////////
// 将领General
// 并且带有部队的属性
#define GENERAL_TROOP_MAX 15
#define GENERAL_SHIQI_MAX 200
struct GENERAL_STRUCT
{
// 基本属性
WORD nID; // 将领的编号
BYTE nType; // 部队的类型(MAP_UNIT_TYPE_GEN or MAP_UNIT_TYPE_WGEN)
// 个人属性
// BYTE nHealth; // 将领的体力
// BYTE nTactic; // 谋略
// BYTE nLevel; // 将领的级别
// WORD nExperience; // 将领的经验
// 部队属性
//WORD wTroopNum; // 所带士兵的个数
WORD wTroop[GENERAL_TROOP_MAX]; // 所带士兵的ID数组
BYTE nLineUp; // 阵型
BYTE nMorale; // 部队的士气
// struct CTRL_TASK_STRUCT Task; // 部队的任务
// struct CTRL_TASK_STRUCT Status; // 部队的状态
};
/////////
/////////
// 建筑Building
struct BUILDING_STRUCT
{
// 基本属性
DWORD dwUpgrade[3]; // 升级
int nResource; // 资源储量
int nFireLvl; // 火的级别
int nFireID[3]; // 所拥有的火的ID
};
/////////
/////////
// 士兵Soldier
#define SOLDIER_ONBOARD_MAX 16
struct SOLDIER_STRUCT
{
// 基本属性
WORD nGenID; // 将领ID
BYTE nHealth; // 士兵的体力
BYTE nMorale; // 士兵的士气
BYTE nThinkModal; // 士兵的思考模型
DWORD dwBuild; // 建造
// 只有工人有效
int nResType; // 资源类型,0树木,1麦田,2,铁矿,3钱
int nResource; // 已采集的资源的数量
// 只有运输船有效
BOOL bOnBoard; // 为真时,有部队在船上
int nOnBoard; // 在船上的部队数
int nOnBoardSoldier;// 在船上的部队人数
};
/////////
/////////
// 运输船Ship
/////////
struct SHIP_STRUCT
{
int nNum; // 在运输船上的士兵的个数
int nSoldier; // 在运输船上的士兵的人数
};
/////////
/////////
// 单元结构
#define GAME_MARCH_MAX 128
struct UNIT_STRUCT
{
// basic attributes 基本属性
BYTE nType; // 单元的类型,见宏定义MAP_UNIT_TYPE_
WORD nID; // 本单元的ID
WORD nIDAttackMe; // 被我攻击的单元ID
int nLife; // 生命值
// 帧,每帧在图素库中的位置(行,列)
struct CTRL_FRAME_STRUCT Draw;
int nCounter; // 用来进行建造或死亡后的记数
// 状态
struct CTRL_TASK_STRUCT Status;
// 任务
struct CTRL_TASK_STRUCT Task;
// 行军路线
BYTE MarchTrack[GAME_MARCH_MAX];
int StepNum;
// 阵型
POINT ptZhenFa; // 在阵型中的相对位置
int nZhenFa; // 阵型编号,见CBCtrl.h中的enum CTRL_ZHENXING
int bPause; // 暂停,只暂停一轮
// 攻击力和防御力
BYTE nFarAttack;
BYTE nNearAttack;
BYTE nFarDefend;
BYTE nNearDefend;
// test only
int nHasShadow;
// 只有投石车和弓箭手有效, not used now
// BOOL bHasStone; // 为真时,投出一块石头
//ADDED BY TIAN YUE.
WORD nPos; //记录物体在逃避过程中的标志。
WORD nBloodPos; //记录物体在受到火烧时减血的标志。
union
{
struct GENERAL_STRUCT Gen;
struct BUILDING_STRUCT Build;
struct SOLDIER_STRUCT Soldier;
struct SHIP_STRUCT Ship;
};
};
/////////
/////////
// 君主(游戏者)Player
#define PLAYER_UNIT_MAX 200
#define PLAYER_NONE 0
#define PLAYER_1 1
#define PLAYER_2 2
#define PLAYER_3 3
#define PLAYER_4 4
#define PLAYER_TYPE_NONE 0
#define PLAYER_TYPE_HUMAN 1
#define PLAYER_TYPE_COMPUTER 2
#define PLAYER_TYPE_REMOTE 3
#define PLAYER_RELATION_ME 0
#define PLAYER_RELATION_ALLY 1
#define PLAYER_RELATION_ENEMY 2
#define PLAYER_GROUP_MAX 20
#define PLAYER_GRADE_MAIN 0
#define PLAYER_GRADE_GONGJIAN 1
#define PLAYER_GRADE_BINGQI 2
#define PLAYER_GRADE_HUJIA 3
#define PLAYER_GRADE_TOUSHICHE 4
#define PLAYER_GRADE_CHUAN1 5
#define PLAYER_GRADE_CHUAN2 6
#define PLAYER_GRADE_CHUAN3 7
struct PLAYER_STRUCT
{
// 基本属性
BYTE nID; // 游戏者ID
int nType; // 游戏者类型
int nBuildType; // 建筑的类型,0为城内建筑,1为城外建筑
int nThink; // 本关计算机君主的思考模型,0为陆战,1为水战,2为无基地
int nTechLvl; // 本游戏者可以达到的技术级别,1-4
//int nRelation; // 游戏者和我自己的关系
char strName[34]; // 游戏者名称
// 同盟控制
int nAllies[GAME_PLAYER_MAX];// 存放同盟游戏者的编号,没有自己的
// 资源
//DWORD dwSoldier; // 预备队
int nFood; // 已采集的粮食
int nWood; // 已采集的木材
int nIron; // 已采集的铁
int nGold; // 现金
// 内部计算用数据
DWORD dwLifeUp; // 生命值增加的数量
char nAddNearAttack[4]; // 近程攻击力变化,可为负,分别对应于100,200,500,1000人部队
char nAddFarAttack[4]; // 远程攻击力变化,可为负
char nAddNearDefend[4]; // 近程防御力变化,可为负
char nAddFarDefend[4]; // 远程防御力变化,可为负
char nAddSFarAttack; // 车兵攻击力变化
char nAddWaterAttack[2]; // 水兵的攻击力变化
char nAddWaterDefend[2]; // 水兵的防御力变化
char nAddViewRange; // 视野变化,可为负
char nAddFightRange; // 射程变化,可为负
char nAddMoveSpeed; // 移动速度变化,可为负
char nAddFightSpeed; // 攻击速度变化,可为负
BYTE nGrade[8]; // 主建筑级别,
// 木材场弓箭级别,
// 武器场兵器级别,
// 武器场护甲级别,
// 车兵级别
// 船坞级别
int nFoodStore; // 粮仓和主帅帐的数量
// 士兵和建筑的控制
WORD wUnitCounter; // 添加单元时记数
WORD wLastUnit; // 最后一个单元的序号
struct UNIT_STRUCT Unit[PLAYER_UNIT_MAX];
// 部队的控制
WORD wGroupCounter;
WORD wGroup[PLAYER_GROUP_MAX];
};
/////////
/////////
// 全局Game
struct GAME_STRUCT
{
// 基本程序属性
long lVersion; // 存放程序的版本号
long lVerMED; // 存放MED文件的版本号
char strPath[_MAX_PATH]; // 存放程序的路径
char strPathMED[_MAX_PATH]; // 存放MED文件的路径,加载于程序路径之上
char strPathDAT[_MAX_PATH]; // 存放DAT文件的路径,加载于程序路径之上
char strPathBMP[_MAX_PATH]; // 存放BMP文件的路径,加载于程序路径之上
char strPathAVI[_MAX_PATH]; // 存放AVI文件的路径,加载于程序路径之上
char strPathWAV[_MAX_PATH]; // 存放WAV文件的路径,加载于程序路径之上
char strNameMED[_MAX_FNAME]; // MED的名称
char strNameBTL[_MAX_FNAME]; // 战场初始数据文件的名称
char strNameAVI[_MAX_FNAME]; // 本关结束应该播放的AVI文件的名称
char strNameOPT[_MAX_FNAME]; // 游戏设置文件名
char strStartAVI[_MAX_FNAME];// 游戏开始片头动画名称
char strStartWAV[_MAX_FNAME];// 游戏开始主界面背景音乐
// game control
BOOL bNetwork; // 为真时,程序为网络模式, 现在无效,Nov.4.1997
int nProgramState; // 程序运行状态,见宏定义PROGRAM_STATUS_
int nProgramStateLast; // 上一个程序运行状态,见宏定义PROGRAM_STATUS_
int nCommandState; // 程序命令状态,见宏定义COMMAND_STATUS_
int nCommandStateLast; // 上一个程序命令状态,见宏定义COMMAND_STATUS_
// game options
UINT nSpeed; // 运行速度
UINT nSpeedScroll; // 滚屏速度
int nVolume; // 音效的音量大小,range from 0 to -5000,1时关闭
int nVolumeCD; // 音乐的音量大小,range from 0 to -5000,1时关闭
BOOL bFightEnabled; // AVI的开关
BOOL bFogOfWar; // 开关阴影
// 本关属性
int nID; // 本关的ID
char strName[_MAX_PATH]; // 本关的名称
POINT ptStart[GAME_PLAYER_MAX]; // 游戏者开始的位置
int nMusicID; // 本关背景音乐的ID
WORD wWeather; // 天气:晴,阴,雨,雪
WORD wTime; // 时间,高8位为日期,低8位为小时
WORD wWind; // 风,高8位为风向,低8位为风力
// 内部计算用数据
BYTE nRatioSoldier; // 士兵攻击系数
BYTE nRatioBuilding; // 建筑攻击系数
BYTE nRatioGeneral; // 将领攻击系数
// 所辖君主Player
int nMe; // 我是第几号游戏者
struct PLAYER_STRUCT Players[GAME_PLAYER_MAX];
};
/////////
struct GAME_TIME_STRUCT
{
SYSTEMTIME Start;
SYSTEMTIME Now;
SYSTEMTIME Sub;
};
////////////
// 全局量
extern struct GAME_STRUCT GAME;
// 游戏安装路径
extern char GAME_strSetupDirectory[_MAX_PATH];
extern int GAME_nSlot;
// 游戏是豪华版时用来区分A盘和B盘
// 是0则不区分,是1为A盘,是2为B盘
extern int GAME_nDisk;
// 网络,Nov.4.1997, LG & LHJ
extern BOOL GAME_bNetwork;
extern BOOL GAME_bNetPlayerOK[GAME_PLAYER_MAX];// 确认连接完成
// 战斗记分
extern struct RUN_COUNTDOWN RUN_CountDown[GAME_PLAYER_MAX];
////////////
// 函数
// 初始化
void GAME_InitGame();
void GAME_InitGamePlayers();
//- Tian Yue
#ifndef TNEBUG
// 读取各种设置数据文件
// hwnd : window to receive error message
// return : TRUE if successful
BOOL GAME_ReadCBSetFile( HWND hwnd );
// 读取战场数据文件
// hwnd : window to receive error message
// filename : battle field data file name
// path : battle field data file path
// return : TRUE if successful
BOOL GAME_ReadMEDFile( HWND hwnd, LPCTSTR filename, LPCTSTR path );
// Nov.6.1997, Liu Gang
// 读取网络战场数据文件
// hwnd : window to receive error message
// filename : battle field data file name
// path : battle field data file path
// return : TRUE if successful
BOOL GAME_ReadMEDFileNet( HWND hwnd, LPCTSTR filename, LPCTSTR path );
// 读取战场数据文件头,仅供MINI_Load()缩略图使用
// hwnd : window to receive error message
// filename : battle field data file name
// path : battle field data file path
// return : TRUE if successful
BOOL GAME_ReadMEDHeader( HWND hwnd, LPCTSTR filename, LPCTSTR path );
// 读取战场初始化数据文件
// hwnd : window to receive error message
// nBattle : battle number
// filename : battle field data file name
// path : battle field data file path
// return : TRUE if successful
BOOL GAME_ReadBTLFile( HWND hwnd, int nBattle, LPCTSTR filename, LPCTSTR path );
// 释放所有游戏中产生出来的单元和其它个体
void GAME_ReleaseAllUnits();
////////////
////////////
// 游戏开始
BOOL GAME_Begin( int nGameID );
// 游戏结束
void GAME_End( int nGameID );
// 存盘
// nSlot : 存盘文件号
BOOL GAME_Save( int nSlot );
// 取盘
// nSlot : 存盘文件号
BOOL GAME_Load( int nSlot );
// 得到存盘信息
// nSlot : 存盘文件号
// strInfo : 从存盘文件里得到的存盘信息
BOOL GAME_GetSaveInfo( int nSlot, LPSTR strInfo );
// 设置存盘信息
// strInfo : 计算出来的存盘信息,此信息用将被存储到存盘文件上
BOOL GAME_CalcSaveInfo( LPSTR strInfo );
// 从文件里得到将领信息,经验,升级,并设置到全局结构DATA_Lib.Gen中
// nSlot : 存盘文件号
BOOL GAME_GetGenInfo( int nSlot );
// 把将领信息,经验,升级,从全局结构DATA_Lib.Gen中写到文件里
// nSlot : 存盘文件号
void GAME_SetGenInfo( int nSlot );
////////////
////////////
// 读游戏设置文件
BOOL GAME_ReadOptionFile( HWND hwnd, LPCTSTR filename, LPCTSTR path );
// 写游戏设置文件
BOOL GAME_WriteOptionFile( HWND hwnd, LPCTSTR filename, LPCTSTR path );
////////////
////////////
// 得到安装路径
// filename : 存放安装路径的文件名
// strSrcPath : 返回的安装路径
// nSize : 路径字符串的大小
BOOL GAME_GetSrcPath( LPCTSTR filename, LPSTR strSrcPath, int nSize );
////////////
////////////
// 游戏结束播放结尾动画和制作群
// nType : 结束类型
void GAME_Ending( int nType );
// nType : -1, continue the end procedure
// 0-3, begin some kind of ending, must used in the frist call
// -2, jump to the last procedure
BOOL GAME_EndingEx( int nType=-1 );
////////////
////////////
// 设置同盟,用于网络版
// Aug. 20. 1997
// nPlayer1, nPlayer2 : 两个游戏者
// bSet : TRUE时为设置同盟,否则为解除同盟
void GAME_SetAlly( int nPlayer1, int nPlayer2, BOOL bSet=TRUE );
////////////
// Nov.7.1997
// 得到豪华版的AB盘信息
// nSlot : 存盘文件号
// 返回0为无磁盘是AB盘的信息,1为A盘,2为B盘
int GAME_GetSaveInfoAB( int nSlot );
//- Tian Yue
#endif // TNEBUG
#endif // __CBGAME_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -