📄 cbgame.cpp
字号:
Lgame_save ( fp ,sizeof ( CTRL_TASK_saveCmdUnit ) ,(char *)&CTRL_TASK_saveCmdUnit );
#ifdef _L_DEBUG
if ((ctrl_task_savecmdunit_lwc =new char [sizeof (CTRL_TASK_saveCmdUnit ) ]) == NULL )
{
return ( 0 );
}
test ( ctrl_task_savecmdunit_lwc ,sizeof ( CTRL_TASK_saveCmdUnit ) ,(char *)&CTRL_TASK_saveCmdUnit );
#endif
//fwrite( &CTRL_TASK_saveCmdUnit, sizeof( CTRL_TASK_saveCmdUnit ), 1, fp );
// 保存是否执行所有君主的AI,测试版有效
Lgame_save ( fp, sizeof( RUN_bAUTO ), (char *)&RUN_bAUTO );
// 保存时间数据
GetSystemTime( &GAME_Time.Now );
GAME_Time.Sub = TimeSub( GAME_Time.Now, GAME_Time.Start );
Lgame_save( fp, sizeof( GAME_Time ), (char*)&GAME_Time );
// 保存事件数据,Oct.6.1997
fwrite( EventPos, sizeof( EventPos ), 1, fp );
// 保存闪烁数据
fwrite( &DRAW_BLINK_nCounter, sizeof( DRAW_BLINK_nCounter ), 1, fp );
fwrite( &DRAW_BLINK_nDelay, sizeof( DRAW_BLINK_nDelay ), 1, fp );
fwrite( &DRAW_BLINK_bDraw, sizeof( DRAW_BLINK_bDraw ), 1, fp );
fwrite( &DRAW_BLINK_nID, sizeof( DRAW_BLINK_nID ), 1, fp );
fwrite( &DRAW_BLINK_nSave, sizeof( DRAW_BLINK_nSave ), 1, fp );
fclose( fp );
#ifdef _L_DEBUG
GAME_Load( nSlot );
#endif
return TRUE;
}
// 取盘
// nSlot : 存盘文件号
BOOL GAME_Load( int nSlot )
{
char name[32];
GAME_MakeSaveName( nSlot, ".SAV", name );
FILE *fp;
// 结束游戏
if( GAME_bBegin == TRUE )
GAME_End( -1 );
Assert( GAME_bBegin == FALSE );
// 读取文件
fp = fopen( name, "rb" );
if( !fp )
{
OutputDebugString( "GAME_Load Error: Cannot open file!\n" );
return FALSE;
}
// 清除单元内容
//FACE_ShowCommandUnit( COMMANDUNIT_NONE, 0xFFFF );
// GAME_ReleaseAllUnits();
// 读存盘头信息
char strInfo[64];
BYTE nLen;
fread( &nLen, sizeof(BYTE), 1, fp );
fread( strInfo, nLen, 1, fp );
// 读取GAME结构
Lgame_load ( fp, sizeof ( GAME ), (char *)&GAME );
#ifdef _L_DEBUG
short ijk ;
ijk=testcmp (game_lwc ,sizeof ( GAME ), (char *)&GAME );
delete (game_lwc);
//fread( &GAME, sizeof( GAME ), 1, fp );
#endif
// set allies
// Aug. 28. 1997
GAME_SetAlly( 0, 1 );
GAME_SetAlly( 0, 2 );
GAME_SetAlly( 0, 3 );
GAME_SetAlly( 0, 4 );
// 读取MAP_Lib结构
Lgame_load ( fp, sizeof ( MAP_Lib ), (char *)&MAP_Lib );
#ifdef _L_DEBUG
ijk=testcmp (map_lib_lwc,sizeof ( MAP_Lib ), (char *)&MAP_Lib );
delete (map_lib_lwc);
#endif
//fread( &MAP_Lib, sizeof( MAP_Lib ), 1, fp );
// 读取DATA结构
Lgame_load ( fp, sizeof ( DATA_Lib ), (char *)&DATA_Lib );
#ifdef _L_DEBUG
ijk=testcmp (data_lib_lwc,sizeof ( DATA_Lib ), (char *)&DATA_Lib );
delete (data_lib_lwc);
//fread( &DATA_Lib, sizeof( DATA_Lib ), 1, fp );
#endif
// 读取OTHER结构
Lgame_load ( fp, sizeof ( int ), (char *)&OTHER_nCounter );
#ifdef _L_DEBUG
ijk=testcmp (other_ncounter_lwc,sizeof ( int ), (char *)&OTHER_nCounter );
delete (other_ncounter_lwc);
#endif
Lgame_load ( fp, sizeof ( OTHER ), (char *)&OTHER );
#ifdef _L_DEBUG
ijk=testcmp (other_lwc,sizeof ( OTHER ), (char *)&OTHER );
delete (other_lwc);
//fread( &OTHER_nCounter, sizeof( int ), 1, fp );
//fread( &OTHER, sizeof( OTHER ), 1, fp );
#endif
// 读取命令队列
Lgame_load ( fp, sizeof ( CTRL_TaskList ), (char *)&CTRL_TaskList );
#ifdef _L_DEBUG
ijk=testcmp (ctrl_tasklist_lwc,sizeof ( CTRL_TaskList ), (char *)&CTRL_TaskList );
delete (ctrl_tasklist_lwc);
//fread( &CTRL_TaskList, sizeof( CTRL_TaskList ), 1, fp );
#endif
// Nov.9.1997
// 为保持存盘的兼容性,需要清除任务队列头指针和尾指针
for( int i=0; i<GAME_PLAYER_MAX; i++ )
{
CTRL_nTaskHead[i] = 0;
CTRL_nTaskTail[i] = 0;
}
// 读取焦点
Lgame_load ( fp, sizeof ( CTRL_nHitCounter ), (char *)&CTRL_nHitCounter );
#ifdef _L_DEBUG
ijk=testcmp (ctrl_nhitcounter_lwc,sizeof ( CTRL_nHitCounter ), (char *)&CTRL_nHitCounter );
delete (ctrl_nhitcounter_lwc);
#endif
Lgame_load ( fp, sizeof ( CTRL_hitSrc ), (char *)&CTRL_hitSrc );
#ifdef _L_DEBUG
ijk=testcmp (ctrl_hitsrc_lwc,sizeof ( CTRL_hitSrc ), (char *)&CTRL_hitSrc );
delete (ctrl_hitsrc_lwc);
//fread( &CTRL_nHitCounter, sizeof( CTRL_nHitCounter ), 1, fp );
//fread( &CTRL_hitSrc, sizeof( CTRL_hitSrc ), 1, fp );
#endif
CTRL_TASK_Clear( &CTRL_hitDest );
// 读取战场图文件名
Lgame_load ( fp, sizeof ( BYTE ), (char *)&nLen );
#ifdef _L_DEBUG
ijk=testcmp (byte_lwc,sizeof ( BYTE ), (char *)&nLen );
delete (byte_lwc);
#endif
Lgame_load ( fp, sizeof ( nLen ), GAME.strNameMED );
#ifdef _L_DEBUG
ijk=testcmp (strnamemed_lwc,sizeof ( nLen ), GAME.strNameMED );
delete (strnamemed_lwc);
//fread( &nLen, sizeof( BYTE ), 1, fp );
//fread( GAME.strNameMED, nLen, 1, fp );
#endif
// 读取阴影数组
Lgame_load ( fp, sizeof ( MAP_wRegionData ), (char *)MAP_wRegionData );
#ifdef _L_DEBUG
ijk=testcmp (map_wregiondata_lwc,sizeof ( MAP_wRegionData ), (char *)MAP_wRegionData );
delete (map_wregiondata_lwc);
#endif
Lgame_load ( fp, sizeof ( cMap_shadowEx ), (char *)cMap_shadowEx );
#ifdef _L_DEBUG
ijk=testcmp (cmap_shadowex_lwc,sizeof ( cMap_shadowEx ), (char *)cMap_shadowEx );
delete (cmap_shadowex_lwc);
//fread( MAP_wRegionData, sizeof( MAP_wRegionData ), 1, fp );
//fread( cMap_shadowEx, sizeof( cMap_shadowEx ), 1, fp );
#endif
// 读取UNIT数组
Lgame_load ( fp, sizeof ( MAP_wUnitData ), (char *)MAP_wUnitData );
#ifdef _L_DEBUG
ijk=testcmp (map_wunitdata_lwc,sizeof ( MAP_wUnitData ), (char *)MAP_wUnitData );
delete (map_wunitdata_lwc);
//fread( MAP_wUnitData, sizeof( MAP_wUnitData ), 1, fp );
#endif
// 读取地形数组(第一层即可)
Lgame_load ( fp, sizeof ( MAP_wGroundData ), (char *)MAP_wGroundData);
#ifdef _L_DEBUG
ijk=testcmp (map_wgrounddata_lwc,sizeof ( MAP_wGroundData ), (char *)MAP_wGroundData);
delete (map_wgrounddata_lwc);
//fread( MAP_wGroundData, sizeof( MAP_wGroundData ), 1, fp );
#endif
// 读取计算机策略
Lgame_load ( fp, sizeof ( SaveArr ), (char *)SaveArr );
#ifdef _L_DEBUG
ijk=testcmp (savearr_lwc,sizeof ( SaveArr ), (char *)SaveArr );
delete (savearr_lwc);
#endif
//fread( SaveArr, sizeof( SaveArr ), 1, fp );
LoadAIPos();
// 重新读取缩略图
MINI_Load();
MINI_DrawAll( TRUE );
// 读取当前屏幕位置
POINT ptStart;
Lgame_load ( fp, sizeof ( int ), (char *)&ptStart.x );
#ifdef _L_DEBUG
ijk=testcmp (noffx_lwc,sizeof ( int ), (char *)&ptStart.x );
delete (noffx_lwc);
#endif
Lgame_load ( fp, sizeof ( int ), (char *)&ptStart.y );
#ifdef _L_DEBUG
ijk=testcmp (noffy_lwc,sizeof ( int ), (char *)&ptStart.y );
delete (noffy_lwc);
//fread( &ptStart.x, sizeof( int ), 1, fp );
//fread( &ptStart.y, sizeof( int ), 1, fp );
#endif
DRAW_JumpScreen( ptStart );
// 设置屏幕左边部队按钮
for( i=0; i<PLAYER_GROUP_MAX-1; i++ )
{
if( GAME.Players[GAME.nMe].wGroup[i] != MAP_DATA_NONE )
FACE_SetNumberButtonState( i, BUTTON_UP, FALSE );
else
FACE_SetNumberButtonState( i, BUTTON_DISABLE, FALSE );
}
if( GAME.Players[GAME.nMe].wGroup[i] != MAP_DATA_NONE )
FACE_SetNumberButtonState( i, BUTTON_UP, TRUE );
else
FACE_SetNumberButtonState( i, BUTTON_DISABLE, TRUE );
// 读取信息显示栏
struct PROMPT_BLOCK temp;
Lgame_load ( fp, sizeof ( PROMPT_BLOCK ), (char *)&temp );
#ifdef _L_DEBUG
ijk=testcmp (face_current_prompt_block_lwc,sizeof ( PROMPT_BLOCK ), (char *)&temp );
delete (face_current_prompt_block_lwc);
//fread( &temp, sizeof( PROMPT_BLOCK ), 1, fp );
#endif
// 读取信息显示栏
FACE_SetCurrentPromptBlock( temp );
// 读取命令组
int nUnitID;
DWORD dwFlag;
Lgame_load ( fp, sizeof ( int ), (char *)&nUnitID );
#ifdef _L_DEBUG
ijk=testcmp (face_currentcommandunitid_lwc,sizeof ( int ), (char *)&nUnitID );
delete (face_currentcommandunitid_lwc);
#endif
Lgame_load ( fp, sizeof ( DWORD ), (char *)&dwFlag );
#ifdef _L_DEBUG
ijk=testcmp (face_currentcommandunitflag_lwc ,sizeof ( DWORD ), (char *)&dwFlag );
delete (face_currentcommandunitflag_lwc );
//fread( &nUnitID, sizeof( int ), 1, fp );
//fread( &dwFlag, sizeof( DWORD ), 1, fp );
#endif
FACE_ShowCommandUnit( nUnitID, dwFlag );
// 读取当前的命令组
Lgame_load ( fp, sizeof ( CTRL_TASK_saveCmdUnit ), (char *)&CTRL_TASK_saveCmdUnit );
// fread( &CTRL_TASK_saveCmdUnit, sizeof( CTRL_TASK_saveCmdUnit ), 1, fp );
// 读取是否执行所有君主的AI,测试版有效
Lgame_load ( fp, sizeof( RUN_bAUTO ), (char *)&RUN_bAUTO );
// 读取时间数据
Lgame_load ( fp, sizeof( GAME_Time ), (char*)&GAME_Time );
GetSystemTime( &GAME_Time.Now );
GAME_Time.Start = TimeSub( GAME_Time.Now, GAME_Time.Sub );
// 读取事件数据,Oct.6.1997
fread( EventPos, sizeof( EventPos ), 1, fp );
// 读取闪烁数据
fread( &DRAW_BLINK_nCounter, sizeof( DRAW_BLINK_nCounter ), 1, fp );
fread( &DRAW_BLINK_nDelay, sizeof( DRAW_BLINK_nDelay ), 1, fp );
fread( &DRAW_BLINK_bDraw, sizeof( DRAW_BLINK_bDraw ), 1, fp );
fread( &DRAW_BLINK_nID, sizeof( DRAW_BLINK_nID ), 1, fp );
fread( &DRAW_BLINK_nSave, sizeof( DRAW_BLINK_nSave ), 1, fp );
fclose( fp );
// read general information
// 设置当前将领数据号
GAME_nSlot = nSlot;
// 背景音乐
DATA_WAVE_MusicPlay( GAME.nMusicID );
GAME_bBegin = TRUE; // set flag
return TRUE;
}
///////////
///////////
// 得到存盘信息
// nSlot : 存盘文件号
// strInfo : 从存盘文件里得到的存盘信息
BOOL GAME_GetSaveInfo( int nSlot, LPSTR strInfo )
{
char name[32];
GAME_MakeSaveName( nSlot, ".SAV", name );
FILE *fp;
fp = fopen( name, "rb" );
if( !fp )
{
OutputDebugString( "GAME_GetSaveInfo Error: Cannot open file!\n" );
return FALSE;
}
BYTE nLen;
fread( &nLen, sizeof(BYTE), 1, fp );
fread( strInfo, nLen, 1, fp );
strInfo[nLen] = 0;
fclose( fp );
return TRUE;
}
// 设置存盘信息
// strInfo : 计算出来的存盘信息,此信息用将被存储到存盘文件上
BOOL GAME_CalcSaveInfo( LPSTR strInfo )
{
//strcpy( strInfo, "This is a Save file test!" );
strcpy( strInfo, " " );
if( GAME_nDisk == 1 )
{
strcat( strInfo, "A " );
}
else if( GAME_nDisk == 2 )
{
strcat( strInfo, "B " );
}
else
{
strcat( strInfo, " " );
}
strcat( strInfo, GAME.strName );
strcat( strInfo, " " );
GetSystemTime( &GAME_Time.Now );
GAME_Time.Sub = TimeSub( GAME_Time.Now, GAME_Time.Start );
if( GAME_Time.Sub.wHour >= 24 )
{
OutputDebugString( "GAME Calc save info error, Hour!\n" );
}
else if( GAME_Time.Sub.wHour > 0 )
{
char tmp[4];
wsprintf( tmp, "%02d", GAME_Time.Sub.wHour );
strcat( strInfo, tmp );
strcat( strInfo, ":" );
}
if( GAME_Time.Sub.wMinute >= 60 )
{
OutputDebugString( "GAME Calc save info error, Minute\n" );
}
else if( GAME_Time.Sub.wMinute >= 0 )
{
char tmp[4];
//itoa( GAME_Time.Sub.wMinute, tmp, 10 );
wsprintf( tmp, "%02d", GAME_Time.Sub.wMinute );
strcat( strInfo, tmp );
strcat( strInfo, ":" );
}
if( GAME_Time.Sub.wSecond >= 60 )
{
OutputDebugString( "GAME Calc save info error, Second\n" );
}
else if( GAME_Time.Sub.wSecond >= 0 )
{
char tmp[4];
//itoa( GAME_Time.Sub.wSecond, tmp, 10 );
wsprintf( tmp, "%02d", GAME_Time.Sub.wSecond );
strcat( strInfo, tmp );
}
return TRUE;
}
///////////
///////////
// 游戏开始
BOOL GAME_Begin( int nGameID )
{
if( GAME_bBegin == TRUE )
{
GAME_End( nGameID );
}
Assert( GAME_bBegin == FALSE );
// 初始化数据
// initialize game players data
GAME_InitGamePlayers();
// initialize battle map data, ground, unit, region
MAP_InitGUR();
SHADOW_Clear();
// reset mouse state
MOUSE_SetState( MOUSE_STATE_NONE, TRUE );
// reset control
CTRL_InitCtrl();
// reset other
OTHER_InitOther();
// 初始化事件,Oct.7.1997
void EVENT_Init();
// -- TY
//君主AI初始化函数。
TY_EmprerorAIPosClear();
// -- TY
// 清除命令组
FACE_ShowCommandUnit( COMMANDUNIT_NONE, 0xFFFF );
// initialize command units
CTRL_TASK_saveCmdUnit.Cmd = COMMANDUNIT_NONE;
CTRL_TASK_saveCmdUnit.Ex = 0xFFFFFFFF;
CTRL_TASK_saveCmdUnit.Busy = 0;
CTRL_TASK_ClearAssembleSrc( TRUE );
CTRL_TASK_ClearAssembleDest();
// 清除信息栏
struct PROMPT_BLOCK temp;
temp.PromptBlockId = PROMPT_NONE;
FACE_ShowPromptBlock( temp );
// 初始化战斗记分,Nov.6.1997
memset( &RUN_CountDown, 0, sizeof( RUN_CountDown ) );
// read files
// 读取战场文件
if( GAME_bDebugStage == TRUE )
{
FILE *fp = fopen( "stage.set", "rt" );
if( fp )
{
fscanf( fp, "%d", &GAME.nID );
fclose( fp );
}
GAME_bDebugStage = FALSE;
}
else
{
GAME.nID = nGameID;
}
// 重新读取将领固定数据
DATA_ReloadDATAFile( hwndGame );
if( nGameID != 0 && nGameID != 17 ) // 不是第一关则不读原来的将领设置。
{ // 更新将领的改变数据,级别和经验
GAME_GetGenInfo( GAME_nSlot );
}
else
{
GAME_nSlot = 99;
}
// load Game data, must after load shadow surfaces
if( ! ::GAME_ReadBTLFile( hwndGame, GAME.nID, GAME.strNameBTL, GAME.strPathDAT ) )
{
OutputDebugString( "DRAW_LoadMaps Error(8): Read Battle data file error!\n" );
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -