📄 cbgame.cpp
字号:
#define GAME_SOUND_STEP0 1
#define GAME_SOUND_STEP1 -2500
#define GAME_SOUND_STEP2 -1500
#define GAME_SOUND_STEP3 -800
#define GAME_SOUND_STEP4 -300
#define GAME_SOUND_STEP5 0
// defined in CBMain.cpp
BOOL GAME_ReadOptionFile( HWND hwnd, LPCTSTR filename, LPCTSTR path )
{
char fname[65];
FILE *fp;
if( path != 0 )
{
strcpy( fname, path );
strcat( fname, filename );
}
else strcpy( fname, filename );
fp = fopen( fname, "rt" );
if( !fp )
{
ErrorMessage( hwnd, GAME_ERROR_ID+10,"Cannot open Option file: ", fname );
return FALSE;
}
// 读
fscanf( fp, "%d %d %d %d %d\n",
&GAME.nSpeed, // 运行速度,每秒帧数由1000除得
&GAME.nSpeedScroll, // 滚屏速度
&GAME.nVolume, // 音效的音量大小,range from 0 to -5000,1时关闭
&GAME.nVolumeCD, // 音乐的音量大小,range from 0 to -5000,1时关闭
&GAME.bFightEnabled ); // AVI的开关
//&GAME.bFogOfWar ); // 开关阴影
// 直接设置音效大小
int nVolume;
switch( GAME.nVolume )
{
case 0:
nVolume = GAME_SOUND_STEP0; break;
case 1:
nVolume = GAME_SOUND_STEP1; break;
case 2:
nVolume = GAME_SOUND_STEP2; break;
case 3:
nVolume = GAME_SOUND_STEP3; break;
case 4:
nVolume = GAME_SOUND_STEP4; break;
case 5:
nVolume = GAME_SOUND_STEP5; break;
default:
nVolume = 0;
}
DS_VolumeSound( nVolume );
if( nVolume > 0 )
{
EFFECT_bEnable = FALSE;
DS_EnableSound( FALSE );
}
else if( DS_IfSoundEnable() == FALSE )
{
EFFECT_bEnable = TRUE;
DS_EnableSound( TRUE );
//-------------
// DATA_WAVE_MusicPlay( GAME.nMusicID );
//-------------
}
if( GAME_nDisk == 0 )
{// 标准版和增强版
GAME.nVolumeCD = GAME.nVolume; // 目前,音乐和音效是一回事
}
// 设置音效和音乐大小
//MCI_DGV_SETAUDIO_VOLUME
// 直接设置CD音乐大小
switch( GAME.nVolumeCD )
{
case 0:
if( MUSIC_bEnable == TRUE )
{
DATA_WAVE_MusicStop();
MUSIC_bEnable = FALSE;
}
break;
case 1:
case 2:
case 3:
case 4:
case 5:
if( MUSIC_bEnable == FALSE )
{
MUSIC_bEnable = TRUE;
DATA_WAVE_MusicReplay();
}
break;
}
fclose( fp );
return TRUE;
}
// 写游戏设置文件
BOOL GAME_WriteOptionFile( HWND hwnd, LPCTSTR filename, LPCTSTR path )
{
char fname[65];
FILE *fp;
if( path != 0 )
{
strcpy( fname, path );
strcat( fname, filename );
}
else strcpy( fname, filename );
fp = fopen( fname, "wt" );
if( !fp )
{
ErrorMessage( hwnd, GAME_ERROR_ID+11,"Cannot open Option file: ", fname );
return FALSE;
}
// 写
fprintf( fp, "%d %d %d %d %d\n",
GAME.nSpeed, // 运行速度
GAME.nSpeedScroll, // 滚屏速度
GAME.nVolume, // 音效的音量大小,range from 0 to -5000,1时关闭
GAME.nVolumeCD, // 音乐的音量大小,range from 0 to -5000,1时关闭
GAME.bFightEnabled ); // AVI的开关
//GAME.bFogOfWar ); // 开关阴影
// 直接设置音效大小
int nVolume;
switch( GAME.nVolume )
{
case 0:
nVolume = GAME_SOUND_STEP0; break;
case 1:
nVolume = GAME_SOUND_STEP1; break;
case 2:
nVolume = GAME_SOUND_STEP2; break;
case 3:
nVolume = GAME_SOUND_STEP3; break;
case 4:
nVolume = GAME_SOUND_STEP4; break;
case 5:
nVolume = GAME_SOUND_STEP5; break;
default:
nVolume = 0;
}
DS_VolumeSound( nVolume );
if( nVolume > 0 )
{
EFFECT_bEnable = FALSE;
DS_EnableSound( FALSE );
}
else if( DS_IfSoundEnable() == FALSE )
{
EFFECT_bEnable = TRUE;
DS_EnableSound( TRUE );
//-------------
// DATA_WAVE_MusicPlay( GAME.nMusicID );
//-------------
}
if( GAME_nDisk == 0 )
{// 标准版和增强版
GAME.nVolumeCD = GAME.nVolume; // 目前,音乐和音效是一回事
}
// 设置音效和音乐大小
//MCI_DGV_SETAUDIO_VOLUME
// 直接设置CD音乐大小
switch( GAME.nVolumeCD )
{
case 0:
if( MUSIC_bEnable == TRUE )
{
DATA_WAVE_MusicStop();
MUSIC_bEnable = FALSE;
}
break;
case 1:
case 2:
case 3:
case 4:
case 5:
if( MUSIC_bEnable == FALSE )
{
MUSIC_bEnable = TRUE;
DATA_WAVE_MusicReplay();
}
break;
}
fclose( fp );
return TRUE;
}
///////////
///////////
// 存盘
// Oct.6.1997
// defined in CBEvent.cpp, 保存事件数据
extern WORD EventPos[34][5];
// defined in CBDraw.cpp
// 被选中为目的地的单元,要闪烁显示它的边界
extern int DRAW_BLINK_nCounter;
extern int DRAW_BLINK_nDelay;
extern BOOL DRAW_BLINK_bDraw;
extern WORD DRAW_BLINK_nID;
extern int DRAW_BLINK_nSave;
// 存盘
// nSlot : 存盘文件号
//#define _L_DEBUG
#ifdef _L_DEBUG
char *game_lwc;
char * map_lib_lwc;
char * data_lib_lwc;
char * other_ncounter_lwc ;
char * other_lwc;
char * ctrl_tasklist_lwc;
char * ctrl_nhitcounter_lwc;
char * ctrl_hitsrc_lwc;
char * byte_lwc;
char * strnamemed_lwc;
char * map_wregiondata_lwc;
char * cmap_shadowex_lwc;
char * map_wunitdata_lwc;
char * map_wgrounddata_lwc;
char * savearr_lwc;
char * noffx_lwc;
char * noffy_lwc;
char * face_current_prompt_block_lwc;
char * face_currentcommandunitid_lwc;
char * face_currentcommandunitflag_lwc;
char * ctrl_task_savecmdunit_lwc;
#endif
BOOL GAME_Save( int nSlot )
{
char name[32];
GAME_MakeSaveName( nSlot, ".SAV", name );
FILE *fp;
fp = fopen( name, "wb" );
if( !fp )
{
OutputDebugString( "GAME_Save Error: Cannot open file!\n" );
return FALSE;
}
// 写存盘头信息
char strInfo[64];
GAME_CalcSaveInfo( strInfo );
BYTE nLen = strlen( strInfo );
fwrite( &nLen, sizeof(BYTE), 1, fp );
fwrite( strInfo, nLen, 1, fp );
//lwc1
// 保存GAME结构(char *)&
Lgame_save ( fp ,sizeof ( GAME ) ,(char *)&GAME );
#ifdef _L_DEBUG
//fwrite( &GAME, sizeof( GAME ), 1, fp );
if ((game_lwc=new char [sizeof(GAME)]) == NULL )
{
return ( 0 );
}
test (game_lwc ,sizeof ( GAME ) , (char *)&GAME );
#endif
// 保存MAP_Lib结构
Lgame_save ( fp ,sizeof ( MAP_Lib ) ,(char *)&MAP_Lib );
#ifdef _L_DEBUG
if ((map_lib_lwc=new char [sizeof (MAP_Lib)]) == NULL )
{
return ( 0 );
}
test ( map_lib_lwc ,sizeof ( MAP_Lib ) ,(char *)&MAP_Lib );
//fwrite( &MAP_Lib, sizeof( MAP_Lib ), 1, fp );
#endif
// 保存DATA结构
Lgame_save ( fp ,sizeof ( DATA_Lib ) ,(char *)&DATA_Lib );
#ifdef _L_DEBUG
if (( data_lib_lwc=new char [ sizeof(DATA_Lib)]) == NULL )
{
return ( 0 );
}
test ( data_lib_lwc,sizeof ( DATA_Lib ) ,(char *)&DATA_Lib );
//fwrite( &DATA_Lib, sizeof( DATA_Lib ), 1, fp );
#endif
// 保存OTHER结构
Lgame_save ( fp ,sizeof ( OTHER_nCounter ) ,(char *)&OTHER_nCounter );
#ifdef _L_DEBUG
if (( other_ncounter_lwc=new char [sizeof ( OTHER_nCounter) ]) == NULL )
{
return ( 0 );
}
test ( other_ncounter_lwc ,sizeof ( OTHER_nCounter ) ,(char *)&OTHER_nCounter );
#endif
Lgame_save ( fp ,sizeof ( OTHER ) ,(char *)&OTHER );
#ifdef _L_DEBUG
if ((other_lwc =new char [sizeof (OTHER) ]) == NULL )
{
return ( 0 );
}
test ( other_lwc ,sizeof ( OTHER ) ,(char *)&OTHER );
//fwrite( &OTHER_nCounter, sizeof( int ), 1, fp );
//fwrite( &OTHER, sizeof( OTHER ), 1, fp );
#endif
// 保存命令队列
Lgame_save ( fp ,sizeof ( CTRL_TaskList ) ,(char *)&CTRL_TaskList );
#ifdef _L_DEBUG
if (( ctrl_tasklist_lwc=new char [sizeof (CTRL_TaskList ) ]) == NULL )
{
return ( 0 );
}
test ( ctrl_tasklist_lwc ,sizeof ( CTRL_TaskList ) ,(char *)&CTRL_TaskList );
//fwrite( &CTRL_TaskList, sizeof( CTRL_TaskList ), 1, fp );
#endif
// 保存焦点
Lgame_save ( fp ,sizeof ( CTRL_nHitCounter ) ,(char *)&CTRL_nHitCounter );
#ifdef _L_DEBUG
if ((ctrl_nhitcounter_lwc =new char [sizeof (CTRL_nHitCounter) ]) == NULL )
{
return ( 0 );
}
test ( ctrl_nhitcounter_lwc ,sizeof ( CTRL_nHitCounter ) ,(char *)&CTRL_nHitCounter );
#endif
Lgame_save ( fp ,sizeof ( CTRL_hitSrc ) ,(char *)&CTRL_hitSrc );
#ifdef _L_DEBUG
if (( ctrl_hitsrc_lwc=new char [sizeof (CTRL_hitSrc ) ]) == NULL )
{
return ( 0 );
}
test( ctrl_hitsrc_lwc ,sizeof ( CTRL_hitSrc ) ,(char *)&CTRL_hitSrc );
//fwrite( &CTRL_nHitCounter, sizeof( CTRL_nHitCounter ), 1, fp );
//fwrite( &CTRL_hitSrc, sizeof( CTRL_hitSrc ), 1, fp );
#endif
// 保存战场图文件名
nLen = strlen( GAME.strNameMED );
Lgame_save ( fp ,sizeof ( BYTE ) ,(char *)&nLen );
#ifdef _L_DEBUG
if ((byte_lwc =new char [sizeof (BYTE ) ]) == NULL )
{
return ( 0 );
}
test ( byte_lwc ,sizeof ( BYTE ) ,(char *)&nLen );
#endif
Lgame_save ( fp ,sizeof ( nLen ) ,GAME.strNameMED );
#ifdef _L_DEBUG
if (( strnamemed_lwc=new char [sizeof (nLen ) ]) == NULL )
{
return ( 0 );
}
test ( strnamemed_lwc ,sizeof ( nLen ) ,GAME.strNameMED );
//fwrite( &nLen, sizeof( BYTE ), 1, fp );
//fwrite( GAME.strNameMED, nLen, 1, fp );
#endif
// 保存阴影数组
Lgame_save ( fp ,sizeof ( MAP_wRegionData ) ,(char *)MAP_wRegionData );
#ifdef _L_DEBUG
if (( map_wregiondata_lwc=new char [sizeof ( MAP_wRegionData) ]) == NULL )
{
return ( 0 );
}
test ( map_wregiondata_lwc,sizeof ( MAP_wRegionData ) ,(char *)MAP_wRegionData );
#endif
Lgame_save ( fp ,sizeof (cMap_shadowEx ) ,(char *)cMap_shadowEx );
#ifdef _L_DEBUG
if (( cmap_shadowex_lwc=new char [sizeof (cMap_shadowEx ) ]) == NULL )
{
return ( 0 );
}
test ( cmap_shadowex_lwc ,sizeof (cMap_shadowEx ) ,(char *)cMap_shadowEx );
//fwrite( MAP_wRegionData, sizeof( MAP_wRegionData ), 1, fp );
//fwrite( cMap_shadowEx, sizeof( cMap_shadowEx ), 1, fp );
#endif
// 保存UNIT数组
Lgame_save ( fp ,sizeof (MAP_wUnitData ) ,(char *)MAP_wUnitData );
#ifdef _L_DEBUG
if ((map_wunitdata_lwc =new char [sizeof (MAP_wUnitData ) ]) == NULL )
{
return ( 0 );
}
test ( map_wunitdata_lwc ,sizeof (MAP_wUnitData ) ,(char *)MAP_wUnitData );
//fwrite( MAP_wUnitData, sizeof( MAP_wUnitData ), 1, fp );
#endif
// 保存地形数组(第一层即可)
Lgame_save ( fp ,sizeof ( MAP_wGroundData ) ,(char *)MAP_wGroundData );
#ifdef _L_DEBUG
if ((map_wgrounddata_lwc =new char [sizeof (MAP_wGroundData ) ]) == NULL )
{
return ( 0 );
}
test ( map_wgrounddata_lwc ,sizeof ( MAP_wGroundData ) ,(char *)MAP_wGroundData );
//fwrite( MAP_wGroundData, sizeof( MAP_wGroundData ), 1, fp );
#endif
// 保存计算机策略
SaveAIPos();
Lgame_save ( fp ,sizeof ( SaveArr ) ,(char *)SaveArr );
#ifdef _L_DEBUG
if (( savearr_lwc=new char [sizeof (SaveArr ) ]) == NULL )
{
return ( 0 );
}
test ( savearr_lwc ,sizeof ( SaveArr ) ,(char *)SaveArr );
//fwrite( SaveArr, sizeof( SaveArr ), 1, fp );
#endif
// 保存当前屏幕位置
int width = DRAW_rcScreen.right - DRAW_rcScreen.left;
int height = DRAW_rcScreen.bottom - DRAW_rcScreen.top;
int nOffX = DRAW_rcScreen.left + (width>>1);
int nOffY = DRAW_rcScreen.top + (height>>2)+12;
Lgame_save ( fp ,sizeof ( int ) ,(char *)&nOffX );
#ifdef _L_DEBUG
if ((noffx_lwc =new char [sizeof (int ) ]) == NULL )
{
return ( 0 );
}
test( noffx_lwc ,sizeof ( int ) ,(char *)&nOffX );
#endif
Lgame_save ( fp ,sizeof ( int ) ,(char *)&nOffY );
#ifdef _L_DEBUG
if ((noffy_lwc =new char [sizeof ( int ) ]) == NULL )
{
return ( 0 );
}
test ( noffy_lwc ,sizeof ( int ) ,(char *)&nOffY );
//fwrite( &nOffX, sizeof( int ), 1, fp );
//fwrite( &nOffY, sizeof( int ), 1, fp );
#endif
// 保存信息显示栏
Lgame_save ( fp, sizeof ( FACE_CURRENT_PROMPT_BLOCK ), (char *)&FACE_CURRENT_PROMPT_BLOCK);
#ifdef _L_DEBUG
if ((face_current_prompt_block_lwc =new char [sizeof ( FACE_CURRENT_PROMPT_BLOCK) ]) == NULL )
{
return ( 0 );
}
test ( face_current_prompt_block_lwc ,sizeof ( FACE_CURRENT_PROMPT_BLOCK ), (char *)&FACE_CURRENT_PROMPT_BLOCK);
//fwrite( &FACE_CURRENT_PROMPT_BLOCK, sizeof( PROMPT_BLOCK ), 1, fp );
#endif
// 保存命令组
Lgame_save ( fp ,sizeof ( int ) ,(char *)&FACE_CurrentCommandUnitID );
#ifdef _L_DEBUG
if ((face_currentcommandunitid_lwc =new char [sizeof ( int ) ]) == NULL )
{
return ( 0 );
}
test ( face_currentcommandunitid_lwc ,sizeof ( int ) ,(char *)&FACE_CurrentCommandUnitID );
#endif
Lgame_save ( fp ,sizeof ( DWORD ) ,(char *)&FACE_CurrentCommandUnitFlag );
#ifdef _L_DEBUG
if (( face_currentcommandunitflag_lwc=new char [sizeof ( DWORD ) ]) == NULL )
{
return ( 0 );
}
test ( face_currentcommandunitflag_lwc ,sizeof ( DWORD ) ,(char *)&FACE_CurrentCommandUnitFlag );
//fwrite( &FACE_CurrentCommandUnitID, sizeof( int ), 1, fp );
//fwrite( &FACE_CurrentCommandUnitFlag, sizeof( DWORD ), 1, fp );
#endif
// 用来保存当前的命令组
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -