📄 cbfile.cpp
字号:
/////////////////
// CBFile.cpp : 《赤壁》地图图素全局数据结构
// CBFile.cpp : << chibi >> global map data structure
//
// 版本0010 : 1996年9月18日
// v0012 : Nov.7.1996
// v0013 : Feb.5.1997
// v0020 : Feb.28.1997,add function named DATA_ReadDATAFile()
//
// 编写 : 刘刚
// written by : Liu Gang
//
// 编译器 : Visual C++ 4.2
// Compiler : Visual C++ 4.2
//
// 版权 : 北京前导软件有限公司 1996-1997
// Copyright : WayAhead Software Co.Ltd. 1996-1997
/////////////////
// 此文件包所有对地形和单元图素的读取
#include "stdafx.h"
#include <stdio.h> // for FILE
#include "Assert.h" // Error message
#include "CBMap.h"
#include "CBGame.h"
#include "L_Scan.h" //lwc
#ifdef _GAME_
#include "CBDraw.h"
#include "CBData.h"
#include "CBMini.h"
#endif
///////////
// 从文件读取数据
// 读取地形数据
BOOL MAP_ReadGroundFile( HWND hwnd, LPCTSTR filename , LPCTSTR pathDAT, LPCTSTR pathBMP )
{
char fname[_MAX_FNAME];
if( pathDAT != 0 )
{
strcpy( fname, pathDAT );
strcat( fname, filename );
}
else strcpy( fname, filename );
CScan_read FSCAN;
FSCAN.scan_open (fname);//lwc ground.dat
//FILE * fp=fopen(fname,"rt");
/*if(!fp)
{
ErrorMessage( hwnd, MAP_ERROR_ID+0,"Cannot open ground map data file: ",fname );
return FALSE;
}
*/
// reset value to zero
memset( MAP_Lib.Ground, MAP_DATA_NONE, sizeof(struct MAP_GROUND_LIB_STRUCT)*MAP_GROUND_LIB_NUM );
// read number of graphic files
FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d\n", &MAP_Lib.nGLibNum ) );
//fscanf( fp, "%d\n", &MAP_Lib.nGLibNum );
for( int i=0; i< MAP_Lib.nGLibNum; i++ )
{
// read file, layer and type attributes
/* FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d,%d,%d,%d\n",
&MAP_Lib.Other[i].nMaxFrame,
&MAP_Lib.Other[i].szItem.cx, &MAP_Lib.Other[i].szItem.cy,
&MAP_Lib.Other[i].nID );
*/
FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d,%d,%d\n",
&MAP_Lib.Ground[i].nFile,
&MAP_Lib.Ground[i].nLayer,
&MAP_Lib.Ground[i].nType) );
/*fscanf(fp,"%d,%d,%d\n",
&MAP_Lib.Ground[i].nFile,&MAP_Lib.Ground[i].nLayer,&MAP_Lib.Ground[i].nType);*/
// read graphic file names
//char strFile1[33], strFile2[33], strFile[_MAX_FNAME];
FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d\n",&MAP_Lib.Ground[i].nID));
//fscanf( fp, "%s %s\n", strFile1, strFile2 );
/*strcpy( strFile, pathBMP );
strcat( strFile, strFile1 );
strcat( strFile, ".bmp");
strcpy( MAP_Lib.Ground[i].strMaskFile, strFile );
strcpy( strFile, pathBMP );
strcat( strFile, strFile2 );
strcat( strFile, ".bmp");
strcpy( MAP_Lib.Ground[i].strFile, strFile );*/
// read window name
/*fscanf( fp,"%s\n", strFile1 );
strcpy( fname, pathBMP ); strcat( fname, strFile1 );
strcpy( MAP_Lib.Ground[i].strWnd, fname );*/
// read window rectangle
FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d,%d,%d,%d\n",
&MAP_Lib.Ground[i].rcWnd.left,
&MAP_Lib.Ground[i].rcWnd.top,
&MAP_Lib.Ground[i].rcWnd.right,
&MAP_Lib.Ground[i].rcWnd.bottom) );
//fscanf(fp,"%d,%d,%d,%d\n",&MAP_Lib.Ground[i].rcWnd.left,&MAP_Lib.Ground[i].rcWnd.top,&MAP_Lib.Ground[i].rcWnd.right,&MAP_Lib.Ground[i].rcWnd.bottom);
// read item size and height
FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d,%d,%d\n",
&MAP_Lib.Ground[i].szItem.cx,
&MAP_Lib.Ground[i].szItem.cy,
&MAP_Lib.Ground[i].nHeight) );
//fscanf(fp,"%d,%d,%d\n",
// &MAP_Lib.Ground[i].szItem.cx,&MAP_Lib.Ground[i].szItem.cy,&MAP_Lib.Ground[i].nHeight);
// read data arrage style, column and row numbers
FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d,%d\n",&MAP_Lib.Ground[i].szNum.cx,&MAP_Lib.Ground[i].szNum.cy));
//fscanf(fp,"%d,%d\n",&MAP_Lib.Ground[i].szNum.cx,&MAP_Lib.Ground[i].szNum.cy);
//ASSERT(MAP_Lib.Ground[i].szNum.cx<=GROUND_ITEM_COL);
//ASSERT(MAP_Lib.Ground[i].szNum.cy<=GROUND_ITEM_ROW);
// read data for each column and encode
for(int j=0; j<MAP_Lib.Ground[i].szNum.cx; j++)
{
FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d,",&MAP_Lib.Ground[i].nItemHeights[j]));
//fscanf(fp,"%d,",&MAP_Lib.Ground[i].nItemHeights[j]);
for( int s=0; s<MAP_GROUND_ITEM_ROW; s++)
MAP_Lib.Ground[i].nItems[j][s] = MAP_DATA_NONE;
for(int k=0; k<MAP_Lib.Ground[i].nItemHeights[j]; k++)
{
struct MAP_GROUND_CODE_STRUCT code_struct;
code_struct.nFile=MAP_Lib.Ground[i].nFile;
code_struct.nAttr = MAP_SPECIAL_NONE;
//code_struct.nLayer=MAP_Lib.Ground[i].nLayer;
//code_struct.nType=MAP_Lib.Ground[i].nType;
code_struct.nCol=j;
code_struct.nRow=k;
MAP_Lib.Ground[i].nItems[j][k]=MAP_GroundEnCode(code_struct);
}
}
}
FSCAN.scan_close ();
//fclose(fp);
return TRUE;
}// end of MAP_ReadGroundFile()
//////////////////////
//////////////////////
// 读取单元数据
BOOL MAP_ReadUnitFile( HWND hwnd, LPCTSTR filename , LPCTSTR pathDAT, LPCTSTR pathBMP )
{
char fname[_MAX_FNAME];
CScan_read FSCAN;
if( pathDAT != 0 )
{
strcpy( fname, pathDAT );
strcat( fname, filename );
}
else strcpy( fname, filename );
FSCAN.scan_open (fname);
/*
FILE * fp = fopen( fname, "rt" );//unit.dat
if( !fp )
{
ErrorMessage( hwnd, MAP_ERROR_ID+1, "Cannot open unit map data file: ", fname );
return FALSE;
}
*/
// reset value to zero
memset( MAP_Lib.Unit, MAP_DATA_NONE, sizeof(struct MAP_UNIT_LIB_STRUCT)*MAP_UNIT_LIB_NUM );
// read number of graphic files
FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d\n", &MAP_Lib.nULibNum ));
//fscanf( fp, "%d\n", &MAP_Lib.nULibNum );
for( int i=0; i< MAP_Lib.nULibNum ; i++ )
{
// read file number
FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d\n", &MAP_Lib.Unit[i].nFile ));
//fscanf( fp, "%d\n", &MAP_Lib.Unit[i].nFile );
// read graphic file names
// read graphic file names
char strFile1[33], strFile2[33], strFile[_MAX_FNAME];
FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%s %s\n", strFile1, strFile2 ));
//fscanf( fp, "%s %s\n", strFile1, strFile2 );
strcpy( strFile, pathBMP );
strcat( strFile, strFile1 );
strcat( strFile, ".bmp");
strcpy( MAP_Lib.Unit[i].strMaskFile, strFile );
strcpy( strFile, pathBMP );
strcat( strFile, strFile2 );
strcat( strFile, ".bmp");
strcpy( MAP_Lib.Unit[i].strFile, strFile );
// read item size and type
FSCAN.l_scan (sscanf (FSCAN.expand_buf,
"%d,%d,%d,%d\n",
&MAP_Lib.Unit[i].szItem.cx, &MAP_Lib.Unit[i].szItem.cy,
&MAP_Lib.Unit[i].nType, &MAP_Lib.Unit[i].nLocationSize ));
/*
fscanf( fp, "%d,%d,%d,%d\n",
&MAP_Lib.Unit[i].szItem.cx, &MAP_Lib.Unit[i].szItem.cy,
&MAP_Lib.Unit[i].nType, &MAP_Lib.Unit[i].nLocationSize );
*/
// read data column and row numbers
FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d,%d\n", &MAP_Lib.Unit[i].szNum.cx, &MAP_Lib.Unit[i].szNum.cy ));
//fscanf( fp, "%d,%d\n", &MAP_Lib.Unit[i].szNum.cx, &MAP_Lib.Unit[i].szNum.cy );
// encode
for( int j=0; j< MAP_Lib.Unit[i].szNum.cy; j++ )
{
struct MAP_UNIT_CODE_STRUCT code_struct;
code_struct.nPlayer = 0;
code_struct.nFile = MAP_Lib.Unit[i].nFile;
code_struct.nCol = 0;
code_struct.nRow = j;
code_struct.nLayer = 0;
code_struct.nFrame = 0;
MAP_Lib.Unit[i].nItems[j] = MAP_UnitEnCode( code_struct );
}
}
FSCAN.scan_close ();
//fclose( fp );
return TRUE;
}// end of MAP_ReadUnitFile()
//////////////////////
//////////////////////
// 读取特殊数据
BOOL MAP_ReadSpecFile( HWND hwnd, LPCTSTR filename , LPCTSTR path )
{
char fname[_MAX_FNAME];
CScan_read FSCAN;
if( path != 0 )
{
strcpy( fname, path );
strcat( fname, filename );
}
else strcpy( fname, filename );
FSCAN.scan_open (fname);//lwc
/* FILE * fp = fopen( fname, "rt" ); //data\spec.dat
if( !fp )
{
ErrorMessage( hwnd, MAP_ERROR_ID+2, "Cannot open special unit map data file: ", fname );
return FALSE;
}
*/
// reset
memset( MAP_Lib.Special, 0, sizeof(DWORD)*MAP_SPECIAL_MAX );
int num=0, i=0;
FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d\n", &num ));
//fscanf( fp, "%d\n", &num );
while( num != -1 )
{
struct MAP_UNIT_CODE_STRUCT code_s;
code_s.nPlayer=0;
code_s.nCol=0;
FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d,%d \n", &code_s.nFile, &code_s.nRow ));
//fscanf( fp, "%d,%d\n", &code_s.nFile, &code_s.nRow );
MAP_Lib.Special[i]=MAP_UnitEnCode( code_s );
i++;
FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d", &num ));
//fscanf( fp, "%d", &num );
}
FSCAN.scan_close ();
//fclose( fp );
return TRUE;
}// end of MAP_ReadSpecFile()
//////////////////////
//////////////////////
// 读取探测数据
// read senser file, declared in CBMap.h
BOOL MAP_ReadSenserFile( HWND hwnd, LPCTSTR filename, LPCTSTR path )
{
char fname[_MAX_FNAME];
CScan_read FSCAN;
if( path != 0 )
{
strcpy( fname, path );
strcat( fname, filename );
}
else strcpy( fname, filename );
FSCAN.scan_open (fname);//lwc senser.dat
/*
FILE * fp = fopen( fname, "rb" );
if( !fp )
{
ErrorMessage( hwnd, MAP_ERROR_ID+3, "Cannot open senser data file: ", fname );
return FALSE;
}
*/
// initialize
memset( MAP_ptSenser, 0, sizeof(POINT)*2*MAP_SENSER_MAX*MAP_SENSER_MAX*8 );
// y为偶数时
for( int i=0; i<MAP_SENSER_MAX; i++ )
{
int num=0;
FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d\n", &num ));
//fscanf( fp, "%d\n", &num );
for( int j=0; j<num; j++ )
{
FSCAN.l_scan (sscanf (FSCAN.expand_buf,
"%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",
&MAP_ptSenser[0][i][j*8+0].x,&MAP_ptSenser[0][i][j*8+0].y,
&MAP_ptSenser[0][i][j*8+1].x,&MAP_ptSenser[0][i][j*8+1].y,
&MAP_ptSenser[0][i][j*8+2].x,&MAP_ptSenser[0][i][j*8+2].y,
&MAP_ptSenser[0][i][j*8+3].x,&MAP_ptSenser[0][i][j*8+3].y,
&MAP_ptSenser[0][i][j*8+4].x,&MAP_ptSenser[0][i][j*8+4].y,
&MAP_ptSenser[0][i][j*8+5].x,&MAP_ptSenser[0][i][j*8+5].y,
&MAP_ptSenser[0][i][j*8+6].x,&MAP_ptSenser[0][i][j*8+6].y,
&MAP_ptSenser[0][i][j*8+7].x,&MAP_ptSenser[0][i][j*8+7].y
));
/*
fscanf(fp, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",
&MAP_ptSenser[0][i][j*8+0].x,&MAP_ptSenser[0][i][j*8+0].y,
&MAP_ptSenser[0][i][j*8+1].x,&MAP_ptSenser[0][i][j*8+1].y,
&MAP_ptSenser[0][i][j*8+2].x,&MAP_ptSenser[0][i][j*8+2].y,
&MAP_ptSenser[0][i][j*8+3].x,&MAP_ptSenser[0][i][j*8+3].y,
&MAP_ptSenser[0][i][j*8+4].x,&MAP_ptSenser[0][i][j*8+4].y,
&MAP_ptSenser[0][i][j*8+5].x,&MAP_ptSenser[0][i][j*8+5].y,
&MAP_ptSenser[0][i][j*8+6].x,&MAP_ptSenser[0][i][j*8+6].y,
&MAP_ptSenser[0][i][j*8+7].x,&MAP_ptSenser[0][i][j*8+7].y
);
*/
}
}
// y为奇数时
for( i=0; i<MAP_SENSER_MAX; i++ )
{
int num=0;
FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d\n", &num ));
//fscanf( fp, "%d\n", &num );
for( int j=0; j<num; j++ )
{
FSCAN.l_scan (sscanf (FSCAN.expand_buf,
"%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",
&MAP_ptSenser[1][i][j*8+0].x,&MAP_ptSenser[1][i][j*8+0].y,
&MAP_ptSenser[1][i][j*8+1].x,&MAP_ptSenser[1][i][j*8+1].y,
&MAP_ptSenser[1][i][j*8+2].x,&MAP_ptSenser[1][i][j*8+2].y,
&MAP_ptSenser[1][i][j*8+3].x,&MAP_ptSenser[1][i][j*8+3].y,
&MAP_ptSenser[1][i][j*8+4].x,&MAP_ptSenser[1][i][j*8+4].y,
&MAP_ptSenser[1][i][j*8+5].x,&MAP_ptSenser[1][i][j*8+5].y,
&MAP_ptSenser[1][i][j*8+6].x,&MAP_ptSenser[1][i][j*8+6].y,
&MAP_ptSenser[1][i][j*8+7].x,&MAP_ptSenser[1][i][j*8+7].y
));
/*
fscanf(fp, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",
&MAP_ptSenser[1][i][j*8+0].x,&MAP_ptSenser[1][i][j*8+0].y,
&MAP_ptSenser[1][i][j*8+1].x,&MAP_ptSenser[1][i][j*8+1].y,
&MAP_ptSenser[1][i][j*8+2].x,&MAP_ptSenser[1][i][j*8+2].y,
&MAP_ptSenser[1][i][j*8+3].x,&MAP_ptSenser[1][i][j*8+3].y,
&MAP_ptSenser[1][i][j*8+4].x,&MAP_ptSenser[1][i][j*8+4].y,
&MAP_ptSenser[1][i][j*8+5].x,&MAP_ptSenser[1][i][j*8+5].y,
&MAP_ptSenser[1][i][j*8+6].x,&MAP_ptSenser[1][i][j*8+6].y,
&MAP_ptSenser[1][i][j*8+7].x,&MAP_ptSenser[1][i][j*8+7].y
);
*/
}
}
// fclose( fp );
FSCAN.scan_close ();
// initialize Location data
{
}
return TRUE;
}// end of ReadSenserFile()
//////////////////////
//////////////////////
// 读单元图素动画数据定义文件
// declared in file CBMAP.h
// hwnd : 错误处理时窗口句柄
// filename : 单元图素数据文件名
// path : 文件路径
// reutrn value : TRUE if succeeded
#ifdef _MAP_COMPRESS_
BOOL MAP_ReadAniSeqFile( HWND hwnd, LPCTSTR filename, LPCTSTR path )
{
char fname[_MAX_FNAME];
CScan_read FSCAN;
if( path != 0 )
{
strcpy( fname, path );
strcat( fname, filename );
}
else strcpy( fname, filename );
FSCAN.scan_open (fname);//lwc
/*FILE * fp = fopen( fname, "rb" );//aniseq01.dat
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -