/*------------------------------------------------------------ * Map 奶矛件玄及 pre post毛质 允月 * 娄醒 * index int 昙欠丹午仄化中月平乓仿及奶件犯永弁旦 * mode BOOL TRUE及凛反}in FALSE及凛反 out 卞覆杀 * 忒曰袄卅仄 ------------------------------------------------------------*/ static void MAP_dealprepostevent( int index, BOOL mode ) { int map[2]; int i; int damaged=FALSE; if( CHAR_getFlg(index,CHAR_ISFLYING) ) /* 氏匹月支勾卞反窒手仄卅中 */ return; if( !MAP_getMapDataFromCharIndex( index , map ) ) return; for( i = 0 ; i < 2 ; i ++ ){ /* damage */ int damage; damage = MAP_getImageInt(map[i], mode ? MAP_INTODAMAGE : MAP_OUTOFDAMAGE); if( damage != 0 ){ /* 母丢□斥汹毛恳匹 蜇允月及匹 寞 木赘尹 */ int opt[2]={SPR_kmydamY,-damage}; damaged=TRUE; CHAR_setInt(index, CHAR_HP, CHAR_getInt(index,CHAR_HP) + damage ); CHAR_complianceParameter(index); /* 母丢□斥熬仃凶巨白尼弁玄请允 */ CHAR_sendWatchEvent(CHAR_getWorkInt(index,CHAR_WORKOBJINDEX), CHAR_ACTDAMAGE,opt,2,TRUE); } } if( damaged ) CHAR_sendStatusString(index,"M"); }
/*------------------------------------------------------------ * 甄 毛隙爛仄化}公仇及左皮斥尼弁玄卞嫖今互丐月井升丹井 * 婁醒 * fl int 白夫失 * x int x 甄 * y int y 甄 * 忒曰襖 * 嫖今互丐月 TRUE * 嫖今互卅中 FALSE ------------------------------------------------------------*/ BOOL MAP_haveHeight( int fl, int x, int y ) { int map[2]; /* 穴永皿犯□正毛 化仁月 */ if( !MAP_getTileAndObjData( fl,x,y, &map[0], &map[1] ) ) return FALSE; return MAP_getImageInt( map[1], MAP_HAVEHEIGHT ); }
/*------------------------------------------------------------ * 洶仃月井升丹井 蠅允月〔平乓仿互 氏匹中月井升丹井婁醒互丐月〔 * 婁醒 * ff int floor * fx int x甄 * fy int y甄 * isfly int 氏匹中月井升丹井 * 忒曰襖 * 洶仃月 TRUE(1) * 洶仃卅中 FALSE(0) ------------------------------------------------------------*/ BOOL MAP_walkAbleFromPoint( int ff, int fx, int fy, BOOL isfly ) { int map[2]; if( !MAP_getTileAndObjData( ff,fx,fy, &map[0], &map[1] ) ){ return FALSE; } if( isfly ){ int i; for( i = 0 ; i < 2 ; i ++ ) if( MAP_getImageInt( map[i], MAP_HAVEHEIGHT ) == TRUE ){ return FALSE; } return TRUE; }else{ switch( MAP_getImageInt( map[1], MAP_WALKABLE ) ){ case 0: return FALSE; break; case 1: if( MAP_getImageInt( map[0], MAP_WALKABLE ) == 1 ){ return TRUE; }else{ return FALSE; } break; case 2: return TRUE; break; default: return FALSE; break; } } return FALSE; }
/*---------------------------------------- * 旦 □正旦 祭煙及 凳毛允月 * 婁醒 * index int 平乓仿及奶件犯永弁旦 * map int 穴永皿犯□正 * outof BOOL 褡戈凜}轉仁凜井 TRUE 卅日壬 褡戈凜匹丐月〔 * 忒曰襖 * 由仿丟□正 祭毛仄凶 TRUE * 由仿丟□正 祭毛仄卅井勻凶 FALSE ----------------------------------------*/ static BOOL MAP_changeCharStatusFromMapDataAndTime( int index, int map, BOOL outof) { #if 0 // 旦玄□件巨奶斥匹反銀歹卅中 int i; int offset; BOOL change=FALSE; static struct tagStatusInteractionOfBitAndDefine{ int mapdataindex; int charadataindex; }statusInteraction[]={ {MAP_INTOPOISON, CHAR_POISON}, {MAP_INTOPARALYSIS, CHAR_PARALYSIS}, {MAP_INTOSILENCE, CHAR_SLEEP}, {MAP_INTOSTONE, CHAR_STONE}, {MAP_INTODARKNESS, CHAR_DRUNK}, {MAP_INTOCONFUSION, CHAR_CONFUSION}, {MAP_OUTOFPOISON, CHAR_POISON}, {MAP_OUTOFPARALYSIS, CHAR_PARALYSIS}, {MAP_OUTOFSILENCE, CHAR_SLEEP}, {MAP_OUTOFSTONE, CHAR_STONE}, {MAP_OUTOFDARKNESS, CHAR_DRUNK}, {MAP_OUTOFCONFUSION, CHAR_CONFUSION}, }; if( outof == FALSE )offset = 6; else offset= 0; int newdata; for( i = 0 ; i < 6 ; i ++ ){ newdata = MAP_getImageInt(map,statusInteraction[i+offset]. mapdataindex); if( newdata > 0 ){ change=TRUE; /* 旦 □正旦及澀爛 */ CHAR_setInt( index, statusInteraction[i+offset].charadataindex, CHAR_getInt(index, statusInteraction[i+offset]. charadataindex ) + newdata ); } } return change; #else return FALSE; #endif }
/*------------------------------------------------------------ * Map 奶矛件玄及 pre post毛質 允月 * 婁醒 * index int 曇欠丹午仄化中月平乓仿及奶件犯永弁旦 * mode BOOL TRUE及凜反}in FALSE及凜反 out 卞覆殺 * 忒曰襖卅仄 ------------------------------------------------------------*/ static void MAP_dealprepostevent( int index, BOOL mode ) { int map[2]; int i; int damaged=FALSE,statuschange=FALSE; if( CHAR_getFlg(index,CHAR_ISFLYING) ) /* 氏匹月支勾卞反窒手仄卅中 */ return; if( !MAP_getMapDataFromCharIndex( index , map ) ) return; /* damage */ int damage; for( i = 0 ; i < 2 ; i ++ ){ damage = MAP_getImageInt(map[i], mode ? MAP_INTODAMAGE : MAP_OUTOFDAMAGE); if( damage != 0 ){ /* 母丟□斥洶毛懇匹 蜇允月及匹 寞 木贅尹 */ int opt[2]={SPR_kmydamY,-damage}; damaged=TRUE; CHAR_setInt(index, CHAR_HP, CHAR_getInt(index,CHAR_HP) + damage ); CHAR_complianceParameter(index); /* 母丟□斥熬仃凶巨白尼弁玄請允 */ CHAR_sendWatchEvent(CHAR_getWorkInt(index,CHAR_WORKOBJINDEX), CHAR_ACTDAMAGE,opt,2,TRUE); } if( MAP_changeCharStatusFromMapDataAndTime( index,map[i], mode ? TRUE : FALSE ) ) statuschange=TRUE; } if( damaged ) CHAR_sendStatusString(index,"M"); if( statuschange ){ CHAR_sendCToArroundCharacter(index); CHAR_sendStatusString(index,"P"); } }
int MAP_readBattleMapConfFile(char *filename) { FILE *file; char line[512]; int i, j; int linenum = 0; int BattleMapNo[3], iRet, iWork, iPre[3], iFirst, iLast; file = fopen(filename, "r"); if(file == NULL) { fprint("无法打开 %s\n", filename); return FALSE; } BattleMapNo[0] = 0; BattleMapNo[1] = 0; BattleMapNo[2] = 0; while(fgets(line, sizeof(line), file)) { char *p; linenum++; pohcd(line, " \t"); dchop(line, " \t"); if(line[0] == '#')continue; if(line[0] == '\n')continue; chomp(line); if(line[0] == '$') { iRet = sscanf(line + 1, "%d %d %d", &iPre[0], &iPre[1], &iPre[2]); BattleMapNo[0] = BattleMapNo[1] = BattleMapNo[2] = iPre[0]; if(iRet < 1) { print("!!!!!错误 无法读取战斗地图(%s)( line %d )\n", filename, linenum); } for(i = 0; i < iRet; i++) { BattleMapNo[i] = iPre[i]; if(BattleMapNo[i] < 0) { print("!!!!!错误 战斗地图号码为负值 (%s)( line %d )\n", filename, linenum); } } continue; } if(sscanf(line, "%d", &iWork) != 1) { continue; } if(iWork < 0) { print("!!!!!错误 金钱号码为负值 (%s)( line %d )\n", filename, linenum); continue; } iFirst = iWork; p = strstr(line, "to"); if(p != NULL) { if(sscanf(p + 2, "%d", &iWork) != 1) { iLast = iFirst; } else { iLast = iWork; } if(iWork < 0) { print("!!!!!错误 金钱号码为负值 (%s)( line %d )\n", filename, linenum); continue; } } else { iLast = iFirst; } for(i = iFirst; i <= iLast; i++) { if(MAP_getImageInt(i, MAP_SETED_BATTLEMAP) > 0) { print("!!!!!错误 相同金钱重复设定了两次(%s)( line %d )(%d)(%d & %d)\n", filename, linenum, i, MAP_getImageInt(i, MAP_BATTLEMAP), BattleMapNo[0]); } if(IsValidImagenumber(i) == FALSE) { continue; } MAP_setImageInt(i, MAP_BATTLEMAP, BattleMapNo[0]); MAP_setImageInt(i, MAP_BATTLEMAP2, BattleMapNo[1]); MAP_setImageInt(i, MAP_BATTLEMAP3, BattleMapNo[2]); MAP_setImageInt(i, MAP_SETED_BATTLEMAP, 1); } } fclose(file); for(j = 0; j < arraysizeof(MAP_imgfilt); j++) { if(MAP_imgfilt[j] == -1)continue; if(MAP_getImageInt(j, MAP_SETED_BATTLEMAP) == 0) { print("!!!!!错误 金钱(%d)尚未设定 (%s)\n", j, filename); } } return TRUE; }
BOOL MAP_readBattleMapConfFile( char* filename ) { FILE* file; char line[512]; int i, j; int linenum=0; int BattleMapNo[3], iRet, iWork, iPre[3],iFirst, iLast; file = fopen( filename , "r" ); if( file == NULL ){ fprint( "Can't open %s\n", filename ); return FALSE; } BattleMapNo[0] = 0; BattleMapNo[1] = 0; BattleMapNo[2] = 0; while( fgets( line , sizeof( line ) , file ) ){ char *p; linenum++; pohcd( line, " \t" ); dchop(line, " \t"); if( line[0] == '#' )continue; if( line[0] == '\n' )continue; chomp( line ); if( line[0] == '$' ){ iRet = sscanf( line+1, "%d %d %d", &iPre[0], &iPre[1], &iPre[2] ); BattleMapNo[0] = BattleMapNo[1] = BattleMapNo[2] = iPre[0]; if( iRet < 1 ){ print( "!!!!!ERROR µLªkŪ¨ú¾Ô°«¦a¹Ï(%s)( line %d )\n", filename, linenum ); } for( i = 0; i < iRet; i ++ ){ BattleMapNo[i] = iPre[i]; if( BattleMapNo[i] < 0 ){ print( "!!!!!ERROR ¾Ô°«¦a¹Ï¸¹½X¬°tÈ (%s)( line %d )\n", filename, linenum ); } } continue; } if( sscanf( line, "%d", &iWork ) != 1 ){ continue; } if( iWork < 0 ){ print( "!!!!!ERROR ª÷¿ú¸¹½X¬°tÈ (%s)( line %d )\n", filename, linenum ); continue; } iFirst = iWork; p = strstr( line, "to" ); if( p != NULL ){ if( sscanf( p+2, "%d", &iWork ) != 1 ){ iLast = iFirst; }else{ iLast = iWork; } if( iWork < 0 ){ print( "!!!!!ERROR ª÷¿ú¸¹½X¬°tÈ (%s)( line %d )\n", filename, linenum ); continue; } }else{ iLast = iFirst; } for( i = iFirst; i <= iLast; i ++ ){ if( MAP_getImageInt( i, MAP_SETED_BATTLEMAP ) > 0 ){ print( "!!!!!Warning ¬Û¦Pª÷¿ú«½Æ³]©w¤F¨â¦¸(%s)( line %d )(%d)(%d & %d)\n", filename, linenum, i, MAP_getImageInt( i, MAP_BATTLEMAP ), BattleMapNo[0] ); } // Áü ¹æÀµ¤·¤¤¤«¡ª if( IsValidImagenumber( i ) == FALSE ){ continue; } MAP_setImageInt( i, MAP_BATTLEMAP, BattleMapNo[0] ); MAP_setImageInt( i, MAP_BATTLEMAP2, BattleMapNo[1] ); MAP_setImageInt( i, MAP_BATTLEMAP3, BattleMapNo[2] ); MAP_setImageInt( i, MAP_SETED_BATTLEMAP, 1 ); } } fclose( file ); for( j = 0; j < arraysizeof( MAP_imgfilt ); j ++ ){ if( MAP_imgfilt[j] == -1 )continue; if( MAP_getImageInt( j, MAP_SETED_BATTLEMAP ) == 0 ){ print( "!!!!!Error ª÷¿ú(%d)©|¥¼³]©w (%s)\n", j, filename ); } } return TRUE; }