diff --git a/src/network/commands.cpp b/src/network/commands.cpp index 668bc5a3e..4c15c5d4f 100644 --- a/src/network/commands.cpp +++ b/src/network/commands.cpp @@ -48,6 +48,7 @@ #include "commands.h" #include "interface.h" #include "iocompat.h" +#include "settings.h" //---------------------------------------------------------------------------- // Declaration @@ -59,6 +60,7 @@ global int CommandLogDisabled; /// True if command log is off local int DisabledLog; /// Disabled log for replay +local int DisabledShowTips; /// Disabled show tips local SCM ReplayLog; /// Replay log local FILE* LogFile; /// Replay log file local int NextLogCycle; /// Next log cycle number @@ -126,7 +128,6 @@ local void CommandLog(const char* name,const Unit* unit,int flag, // // Parseable header - // TODO: add custom start options (eg high resources, game type, etc) // fprintf(LogFile,"(replay-log\n"); fprintf(LogFile," 'comment\t\"Generated by FreeCraft Version " VERSION "\"\n"); @@ -137,6 +138,12 @@ local void CommandLog(const char* name,const Unit* unit,int flag, fprintf(LogFile," 'map\t\"%s\"\n",TheMap.Description); fprintf(LogFile," 'map-id\t%u\n",TheMap.Info->MapUID); fprintf(LogFile," 'map-path\t\"%s\"\n",CurrentMapPath); + fprintf(LogFile," 'race\t%d\n",GameSettings.Presets[0].Race); + fprintf(LogFile," 'resources\t%d\n",GameSettings.Resources); + fprintf(LogFile," 'num-units\t%d\n",GameSettings.NumUnits); + fprintf(LogFile," 'tileset\t%d\n",GameSettings.Terrain); + fprintf(LogFile," 'game-type\t%d\n",GameSettings.GameType); + fprintf(LogFile," 'opponents\t%d\n",GameSettings.Opponents); fprintf(LogFile," 'engine\t'(%d %d %d)\n", FreeCraftMajorVersion,FreeCraftMinorVersion,FreeCraftPatchLevel); fprintf(LogFile," 'network\t'(%d %d %d)\n", @@ -258,6 +265,24 @@ local SCM CclReplayLog(SCM list) mappath=get_c_string(gh_car(list)); strcpy(CurrentMapPath,mappath); list=gh_cdr(list); + } else if( gh_eq_p(value,gh_symbol2scm("race")) ) { + GameSettings.Presets[0].Race=gh_scm2int(gh_car(list)); + list=gh_cdr(list); + } else if( gh_eq_p(value,gh_symbol2scm("resources")) ) { + GameSettings.Resources=gh_scm2int(gh_car(list)); + list=gh_cdr(list); + } else if( gh_eq_p(value,gh_symbol2scm("num-units")) ) { + GameSettings.NumUnits=gh_scm2int(gh_car(list)); + list=gh_cdr(list); + } else if( gh_eq_p(value,gh_symbol2scm("tileset")) ) { + GameSettings.Terrain=gh_scm2int(gh_car(list)); + list=gh_cdr(list); + } else if( gh_eq_p(value,gh_symbol2scm("game-type")) ) { + GameSettings.GameType=gh_scm2int(gh_car(list)); + list=gh_cdr(list); + } else if( gh_eq_p(value,gh_symbol2scm("opponents")) ) { + GameSettings.Opponents=gh_scm2int(gh_car(list)); + list=gh_cdr(list); } else if( gh_eq_p(value,gh_symbol2scm("engine")) ) { sublist=gh_car(list); ever1=gh_scm2int(gh_car(sublist)); @@ -298,6 +323,12 @@ global int LoadReplay(char* name) CommandLogDisabled=1; DisabledLog=1; } + if( ShowTips ) { + ShowTips=0; + DisabledShowTips=1; + } else { + DisabledShowTips=0; + } return 0; } @@ -315,6 +346,10 @@ global void EndReplayLog(void) CommandLogDisabled=0; DisabledLog=0; } + if( DisabledShowTips ) { + ShowTips=1; + DisabledShowTips=0; + } } /** @@ -392,53 +427,53 @@ local void DoNextReplay(void) } if( !strcmp(name,"stop") ) { - SendCommandStopUnit(Units[unit]); + SendCommandStopUnit(UnitSlots[unit]); } else if( !strcmp(name,"stand-ground") ) { - SendCommandStandGround(Units[unit],flags); + SendCommandStandGround(UnitSlots[unit],flags); } else if( !strcmp(name,"follow") ) { - SendCommandFollow(Units[unit],Units[dest],flags); + SendCommandFollow(UnitSlots[unit],UnitSlots[dest],flags); } else if( !strcmp(name,"move") ) { - SendCommandMove(Units[unit],posx,posy,flags); + SendCommandMove(UnitSlots[unit],posx,posy,flags); } else if( !strcmp(name,"repair") ) { - SendCommandRepair(Units[unit],posx,posy,Units[dest],flags); + SendCommandRepair(UnitSlots[unit],posx,posy,UnitSlots[dest],flags); } else if( !strcmp(name,"attack") ) { - SendCommandAttack(Units[unit],posx,posy,Units[dest],flags); + SendCommandAttack(UnitSlots[unit],posx,posy,UnitSlots[dest],flags); } else if( !strcmp(name,"attack-ground") ) { - SendCommandAttackGround(Units[unit],posx,posy,flags); + SendCommandAttackGround(UnitSlots[unit],posx,posy,flags); } else if( !strcmp(name,"patrol") ) { - SendCommandPatrol(Units[unit],posx,posy,flags); + SendCommandPatrol(UnitSlots[unit],posx,posy,flags); } else if( !strcmp(name,"board") ) { - SendCommandBoard(Units[unit],posx,posy,Units[dest],flags); + SendCommandBoard(UnitSlots[unit],posx,posy,UnitSlots[dest],flags); } else if( !strcmp(name,"unload") ) { - SendCommandUnload(Units[unit],posx,posy,dest!=-1?Units[dest]:NoUnitP,flags); + SendCommandUnload(UnitSlots[unit],posx,posy,dest!=-1?UnitSlots[dest]:NoUnitP,flags); } else if( !strcmp(name,"build") ) { - SendCommandBuildBuilding(Units[unit],posx,posy,UnitTypeByIdent(val),flags); + SendCommandBuildBuilding(UnitSlots[unit],posx,posy,UnitTypeByIdent(val),flags); } else if( !strcmp(name,"cancel-build") ) { - SendCommandCancelBuilding(Units[unit],Units[dest]); + SendCommandCancelBuilding(UnitSlots[unit],UnitSlots[dest]); } else if( !strcmp(name,"harvest") ) { - SendCommandHarvest(Units[unit],posx,posy,flags); + SendCommandHarvest(UnitSlots[unit],posx,posy,flags); } else if( !strcmp(name,"mine") ) { - SendCommandMineGold(Units[unit],Units[dest],flags); + SendCommandMineGold(UnitSlots[unit],UnitSlots[dest],flags); } else if( !strcmp(name,"haul") ) { - SendCommandHaulOil(Units[unit],Units[dest],flags); + SendCommandHaulOil(UnitSlots[unit],UnitSlots[dest],flags); } else if( !strcmp(name,"return") ) { - SendCommandReturnGoods(Units[unit],Units[dest],flags); + SendCommandReturnGoods(UnitSlots[unit],UnitSlots[dest],flags); } else if( !strcmp(name,"train") ) { - SendCommandTrainUnit(Units[unit],UnitTypeByIdent(val),flags); + SendCommandTrainUnit(UnitSlots[unit],UnitTypeByIdent(val),flags); } else if( !strcmp(name,"cancel-train") ) { - SendCommandCancelTraining(Units[unit],num,UnitTypeByIdent(val)); + SendCommandCancelTraining(UnitSlots[unit],num,UnitTypeByIdent(val)); } else if( !strcmp(name,"upgrade-to") ) { - SendCommandUpgradeTo(Units[unit],UnitTypeByIdent(val),flags); + SendCommandUpgradeTo(UnitSlots[unit],UnitTypeByIdent(val),flags); } else if( !strcmp(name,"cancel-upgrade-to") ) { - SendCommandCancelUpgradeTo(Units[unit]); + SendCommandCancelUpgradeTo(UnitSlots[unit]); } else if( !strcmp(name,"research") ) { - SendCommandResearch(Units[unit],UpgradeByIdent(val),flags); + SendCommandResearch(UnitSlots[unit],UpgradeByIdent(val),flags); } else if( !strcmp(name,"cancel-research") ) { - SendCommandCancelResearch(Units[unit]); + SendCommandCancelResearch(UnitSlots[unit]); } else if( !strcmp(name,"demolish") ) { - SendCommandDemolish(Units[unit],posx,posy,Units[dest],flags); + SendCommandDemolish(UnitSlots[unit],posx,posy,UnitSlots[dest],flags); } else if( !strcmp(name,"spell-cast") ) { - SendCommandSpellCast(Units[unit],posx,posy,Units[dest],num,flags); + SendCommandSpellCast(UnitSlots[unit],posx,posy,UnitSlots[dest],num,flags); } else if( !strcmp(name,"diplomacy") ) { int state; if( !strcmp(val,"neutral") ) { diff --git a/src/stratagus/mainloop.cpp b/src/stratagus/mainloop.cpp index 5b3ece5c1..d1ed77cd3 100644 --- a/src/stratagus/mainloop.cpp +++ b/src/stratagus/mainloop.cpp @@ -733,6 +733,7 @@ global void GameMainLoop(void) // Game logic part // if (!GamePaused && NetworkInSync && !SkipGameCycle) { + ReplayEachCycle(); if( !++GameCycle ) { // FIXME: tests with game cycle counter now fails :( // FIXME: Should happen in 68 years :) @@ -741,7 +742,6 @@ global void GameMainLoop(void) fprintf(stderr,"FIXME: *** round robin ***\n"); fprintf(stderr,"FIXME: *** round robin ***\n"); } - ReplayEachCycle(); NetworkCommands(); // Get network commands UnitActions(); // handle units MissileActions(); // handle missiles