diff --git a/GameSettings.cpp b/GameSettings.cpp index 5d429fe1..bb6e4815 100644 --- a/GameSettings.cpp +++ b/GameSettings.cpp @@ -465,11 +465,19 @@ void LoadGameExternalOptions() //################# Gameplay Settings ################## + //################# Settings valid on game start only ################## //Money settings gGameExternalOptions.iStartingCashNovice = iniReader.ReadInteger("JA2 Gameplay Settings", "NOVICE_CASH",45000); gGameExternalOptions.iStartingCashExperienced = iniReader.ReadInteger("JA2 Gameplay Settings", "EXPERIENCED_CASH",35000); gGameExternalOptions.iStartingCashExpert = iniReader.ReadInteger("JA2 Gameplay Settings", "EXPERT_CASH",30000); gGameExternalOptions.iStartingCashInsane = iniReader.ReadInteger("JA2 Gameplay Settings", "INSANE_CASH",15000); + + //Lalien: Game starting time + gGameExternalOptions.iGameStartingTime = iniReader.ReadInteger("JA2 Gameplay Settings", "GAME_STARTING_TIME", 3600); + gGameExternalOptions.iFirstArrivalDelay = iniReader.ReadInteger("JA2 Gameplay Settings", "FIRST_ARRIVAL_DELAY", 21600); + + //################# Settings valid on game start only end ################## + gGameExternalOptions.fSellAll = iniReader.ReadBoolean("JA2 Gameplay Settings","CAN_SELL_ALT_LMB",FALSE); gGameExternalOptions.iPriceModifier = iniReader.ReadInteger("JA2 Gameplay Settings","PRICE_MODIFIER",10); diff --git a/GameSettings.h b/GameSettings.h index 3f462bca..2c760eeb 100644 --- a/GameSettings.h +++ b/GameSettings.h @@ -143,6 +143,9 @@ typedef struct INT32 iStartingCashExpert; INT32 iStartingCashInsane; + UINT32 iGameStartingTime; //Lalien: game starting time + UINT32 iFirstArrivalDelay; + BOOLEAN fSellAll; INT16 iPriceModifier; diff --git a/SaveLoadScreen.cpp b/SaveLoadScreen.cpp index 8b328fe4..9ad3c723 100644 --- a/SaveLoadScreen.cpp +++ b/SaveLoadScreen.cpp @@ -1360,7 +1360,7 @@ BOOLEAN DisplaySaveGameEntry( INT8 bEntryID )//, UINT16 usPosY ) //Create the string for the current location if( SaveGameHeader.sSectorX == -1 && SaveGameHeader.sSectorY == -1 || SaveGameHeader.bSectorZ < 0 ) { - if( ( SaveGameHeader.uiDay * NUM_SEC_IN_DAY + SaveGameHeader.ubHour * NUM_SEC_IN_HOUR + SaveGameHeader.ubMin * NUM_SEC_IN_MIN ) <= STARTING_TIME ) + if( ( SaveGameHeader.uiDay * NUM_SEC_IN_DAY + SaveGameHeader.ubHour * NUM_SEC_IN_HOUR + SaveGameHeader.ubMin * NUM_SEC_IN_MIN ) <= gGameExternalOptions.iGameStartingTime ) swprintf( zLocationString, gpStrategicString[ STR_PB_NOTAPPLICABLE_ABBREVIATION ] ); else swprintf( zLocationString, gzLateLocalizedString[14] ); diff --git a/Strategic/Game Clock.cpp b/Strategic/Game Clock.cpp index 4d05981d..face2b1f 100644 --- a/Strategic/Game Clock.cpp +++ b/Strategic/Game Clock.cpp @@ -68,23 +68,23 @@ extern BOOLEAN fMapScreenBottomDirty; //These contain all of the information about the game time, rate of time, etc. //All of these get saved and loaded. -INT32 giTimeCompressMode = TIME_COMPRESS_X0; -UINT8 gubClockResolution = 1; -BOOLEAN gfGamePaused = TRUE; -BOOLEAN gfTimeInterrupt = FALSE; -BOOLEAN gfTimeInterruptPause = FALSE; -BOOLEAN fSuperCompression = FALSE; -UINT32 guiGameClock = STARTING_TIME; +INT32 giTimeCompressMode = TIME_COMPRESS_X0; +UINT8 gubClockResolution = 1; +BOOLEAN gfGamePaused = TRUE; +BOOLEAN gfTimeInterrupt = FALSE; +BOOLEAN gfTimeInterruptPause = FALSE; +BOOLEAN fSuperCompression = FALSE; +UINT32 guiGameClock = gGameExternalOptions.iGameStartingTime; UINT32 guiPreviousGameClock = 0; // used only for error-checking purposes UINT32 guiGameSecondsPerRealSecond; UINT32 guiTimesThisSecondProcessed = 0; -INT32 iPausedPopUpBox = -1; +INT32 iPausedPopUpBox = -1; UINT32 guiDay; UINT32 guiHour; UINT32 guiMin; CHAR16 gswzWorldTimeStr[20]; -INT32 giTimeCompressSpeeds[ NUM_TIME_COMPRESS_SPEEDS ] = { 0, 1, 5 * 60, 30 * 60, 60 * 60 }; -UINT16 usPausedActualWidth; +INT32 giTimeCompressSpeeds[ NUM_TIME_COMPRESS_SPEEDS ] = { 0, 1, 5 * 60, 30 * 60, 60 * 60 }; +UINT16 usPausedActualWidth; UINT16 usPausedActualHeight; UINT32 guiTimeOfLastEventQuery = 0; BOOLEAN gfLockPauseState = FALSE; @@ -95,7 +95,7 @@ UINT32 guiLockPauseStateLastReasonId = 0; //***When adding new saved time variables, make sure you remove the appropriate amount from the paddingbytes and // more IMPORTANTLY, add appropriate code in Save/LoadGameClock()! #define TIME_PADDINGBYTES 20 -UINT8 gubUnusedTimePadding[TIME_PADDINGBYTES]; +UINT8 gubUnusedTimePadding[TIME_PADDINGBYTES]; @@ -106,8 +106,8 @@ extern UINT32 guiEnvDay; void InitNewGameClock( ) { - guiGameClock = STARTING_TIME; - guiPreviousGameClock = STARTING_TIME; + guiGameClock = gGameExternalOptions.iGameStartingTime; + guiPreviousGameClock = gGameExternalOptions.iGameStartingTime; guiDay = ( guiGameClock / NUM_SEC_IN_DAY ); guiHour = ( guiGameClock - ( guiDay * NUM_SEC_IN_DAY ) ) / NUM_SEC_IN_HOUR; guiMin = ( guiGameClock - ( ( guiDay * NUM_SEC_IN_DAY ) + ( guiHour * NUM_SEC_IN_HOUR ) ) ) / NUM_SEC_IN_MIN; diff --git a/Strategic/Game Clock.h b/Strategic/Game Clock.h index 749ba22a..d26c1c62 100644 --- a/Strategic/Game Clock.h +++ b/Strategic/Game Clock.h @@ -95,9 +95,9 @@ enum //dereferenced with the above enumerations to provide the actual time compression rate. extern INT32 giTimeCompressSpeeds[ NUM_TIME_COMPRESS_SPEEDS ]; - -#define STARTING_TIME ( ( 1 * NUM_SEC_IN_HOUR ) + ( 0 * NUM_SEC_IN_MIN ) + NUM_SEC_IN_DAY ) // 1am -#define FIRST_ARRIVAL_DELAY ( ( 6 * NUM_SEC_IN_HOUR ) + ( 0 * NUM_SEC_IN_MIN ) ) // 7am ( 6hours later) +//Lalien: externalized game starting time +//#define STARTING_TIME ( ( 1 * NUM_SEC_IN_HOUR ) + ( 0 * NUM_SEC_IN_MIN ) + NUM_SEC_IN_DAY ) // 1am +//#define FIRST_ARRIVAL_DELAY ( ( 6 * NUM_SEC_IN_HOUR ) + ( 0 * NUM_SEC_IN_MIN ) ) // 7am ( 6hours later) #define WORLDTIMESTR gswzWorldTimeStr diff --git a/Tactical/Merc Hiring.cpp b/Tactical/Merc Hiring.cpp index 5c8b0882..46306be2 100644 --- a/Tactical/Merc Hiring.cpp +++ b/Tactical/Merc Hiring.cpp @@ -183,7 +183,7 @@ INT8 HireMerc( MERC_HIRE_STRUCT *pHireMerc) if( DidGameJustStart() ) { // Set time of initial merc arrival in minutes - pHireMerc->uiTimeTillMercArrives = ( STARTING_TIME + FIRST_ARRIVAL_DELAY ) / NUM_SEC_IN_MIN; + pHireMerc->uiTimeTillMercArrives = ( gGameExternalOptions.iGameStartingTime + gGameExternalOptions.iFirstArrivalDelay ) / NUM_SEC_IN_MIN; // Set insertion for first time in chopper pHireMerc->ubInsertionCode = INSERTION_CODE_CHOPPER; diff --git a/gamescreen.cpp b/gamescreen.cpp index c3681fca..18575636 100644 --- a/gamescreen.cpp +++ b/gamescreen.cpp @@ -1096,7 +1096,7 @@ void InitHelicopterEntranceByMercs( void ) AIR_RAID_DEFINITION AirRaidDef; // Update clock ahead from STARTING_TIME to make mercs arrive! - WarpGameTime( FIRST_ARRIVAL_DELAY, WARPTIME_PROCESS_EVENTS_NORMALLY ); + WarpGameTime( gGameExternalOptions.iFirstArrivalDelay, WARPTIME_PROCESS_EVENTS_NORMALLY ); AirRaidDef.sSectorX = 9; AirRaidDef.sSectorY = 1;