From 50f6bb35ed8f6427f75b3c587feeb5244ec6bd79 Mon Sep 17 00:00:00 2001 From: AcyForsythe Date: Sun, 8 Oct 2006 05:31:39 +0000 Subject: [PATCH] - Added options for delaying veteran militia training and mobile militia training. - Added cost modifiers to promoting green militia to regular and promoting regular to veteran. git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@595 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- GameSettings.cpp | 4 + GameSettings.h | 4 + JA2.opt | Bin 113664 -> 169472 bytes JA2.plg | 84 ++++++++------- Strategic/Assignments.cpp | 41 ++++---- Strategic/Assignments.h | 2 +- Strategic/MilitiaSquads.cpp | 13 ++- Strategic/Town Militia.cpp | 203 ++++++++++++++++++++++++++++-------- Strategic/Town Militia.h | 4 +- builddefines.h | 4 +- jascreens.cpp | 4 +- 11 files changed, 246 insertions(+), 117 deletions(-) diff --git a/GameSettings.cpp b/GameSettings.cpp index 50a25cd60..7d9474c37 100644 --- a/GameSettings.cpp +++ b/GameSettings.cpp @@ -485,6 +485,8 @@ void LoadGameExternalOptions() //gGameExternalOptions.gfUseAutoSave = iniReader.ReadBoolean("JA2 Gameplay Settings","USE_AUTO_SAVE",FALSE); // Militia settings + gGameExternalOptions.guiAllowMilitiaGroupsDelay = iniReader.ReadInteger("JA2 Gameplay Settings","ALLOW_MILITIA_MOBILE_DELAY",1); + gGameExternalOptions.guiTrainVeteranMilitiaDelay = iniReader.ReadInteger("JA2 Gameplay Settings","TRAIN_VETERAN_MILITIA_DELAY",1); gGameExternalOptions.gfTrainVeteranMilitia = iniReader.ReadBoolean("JA2 Gameplay Settings","TRAIN_VETERAN_MILITIA",FALSE); gGameExternalOptions.gfAllowMilitiaGroups = iniReader.ReadBoolean("JA2 Gameplay Settings","ALLOW_MILITIA_MOBILE_GROUPS",FALSE); gGameExternalOptions.gfmusttrainroaming = iniReader.ReadBoolean("JA2 Gameplay Settings","MUST_TRAIN_MOBILE_MILITIA",FALSE); @@ -502,6 +504,8 @@ void LoadGameExternalOptions() gGameExternalOptions.iTrainingSquadSize = iniReader.ReadInteger("JA2 Gameplay Settings","MAX_TRAINING_SQUAD_SIZE",10); gGameExternalOptions.iMilitiaTrainingCost = iniReader.ReadInteger("JA2 Gameplay Settings","MILITIA_TRAINING_COST",750); gGameExternalOptions.iMilitiaCostModifier = iniReader.ReadInteger("JA2 Gameplay Settings","MILITIA_COST_MODIFIER",3); + gGameExternalOptions.iRegularCostModifier = iniReader.ReadInteger("JA2 Gameplay Settings","REGULAR_COST_MODIFIER",1); + gGameExternalOptions.iVeteranCostModifier = iniReader.ReadInteger("JA2 Gameplay Settings","VETERAN_COST_MODIFIER",2); gGameExternalOptions.iMinLoyaltyToTrain = iniReader.ReadInteger("JA2 Gameplay Settings","MIN_LOYALTY_TO_TRAIN",20); //Assignment Settings (training, repairing, doctoring, etc) diff --git a/GameSettings.h b/GameSettings.h index 1f5a6be14..b17dc3ac2 100644 --- a/GameSettings.h +++ b/GameSettings.h @@ -156,6 +156,8 @@ typedef struct INT32 iTrainingSquadSize; INT32 iMilitiaTrainingCost; INT32 iMilitiaCostModifier; + INT32 iRegularCostModifier; + INT32 iVeteranCostModifier; INT32 iMinLoyaltyToTrain; INT32 iMaxEnemyGroupSize; @@ -221,6 +223,8 @@ typedef struct BOOLEAN gfAllowReinforcementsOnlyInCity; UINT32 guiBaseQueenPoolIncrement; + UINT32 guiAllowMilitiaGroupsDelay; + UINT32 guiTrainVeteranMilitiaDelay; UINT32 guiCreateEachNHours; UINT32 guiDivOfOriginalMilitia; UINT32 guiMinMilitiaSquadSize; diff --git a/JA2.opt b/JA2.opt index a359a007f007b556eda78c3e59675fa0e318702e..0c6beb525d72b8b2de66d44ed911e6ee85d7f05d 100644 GIT binary patch literal 169472 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 KVEzR(rTsq!gT-|K literal 113664 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 diff --git a/JA2.plg b/JA2.plg index 371566d38..b944aee5b 100644 --- a/JA2.plg +++ b/JA2.plg @@ -6,7 +6,7 @@ --------------------Configuration: TileEngine - Win32 Release--------------------

Command Lines

-Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP63.tmp" with contents +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPD0.tmp" with contents [ /nologo /MT /W3 /GX /O2 /I "..\Standard Gaming Platform" /I "..\\" /I "..\Tactical" /I "..\Utils" /I "..\tacticalai" /I "..\Editor" /I "..\strategic" /I "..\Laptop" /I ".\\" /D "CALLBACKTIMER" /D "PRECOMPILEDHEADERS" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "JA2" /D "XML_STATIC" /D "CINTERFACE" /FR"Release/" /Fp"Release/TileEngine.pch" /YX"TileEngine All.h" /Fo"Release/" /Fd"Release/" /FD /O2b2 /c "C:\JA2\Build\TileEngine\Ambient Control.cpp" @@ -46,8 +46,8 @@ Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP63.tmp" with content "C:\JA2\Build\TileEngine\worldman.cpp" "C:\JA2\Build\TileEngine\XML_ExplosionData.cpp" ] -Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP63.tmp" -Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP64.tmp" with contents +Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPD0.tmp" +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPD1.tmp" with contents [ /nologo /out:"Release\TileEngine.lib" ".\Release\Ambient Control.obj" @@ -87,7 +87,7 @@ Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP64.tmp" with content .\Release\worldman.obj .\Release\XML_ExplosionData.obj ] -Creating command line "link.exe -lib @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP64.tmp" +Creating command line "link.exe -lib @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPD1.tmp"

Output Window

Compiling... Ambient Control.cpp @@ -132,7 +132,7 @@ Creating library... --------------------Configuration: Standard Gaming Platform - Win32 Release--------------------

Command Lines

-Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP65.tmp" with contents +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPD2.tmp" with contents [ /nologo /MT /W3 /GX /O2 /I "..\\" /I "..\TileEngine" /I "..\Tactical" /I "..\Utils" /I "..\strategic" /I ".\\" /D "NO_ZLIB" /D "JA2_PRECOMPILED_HEADERS" /D "NO_ZLIB_COMPRESSION" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "JA2" /D "XML_STATIC" /D "CINTERFACE" /FR".\Release/" /Fp".\Release/Standard Gaming Platform.pch" /YX"JA2 SGP ALL.H" /Fo".\Release/" /Fd".\Release/" /FD /c "C:\JA2\Build\Standard Gaming Platform\Button Sound Control.cpp" @@ -172,14 +172,14 @@ Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP65.tmp" with content "C:\JA2\Build\Standard Gaming Platform\vsurface.cpp" "C:\JA2\Build\Standard Gaming Platform\WinFont.cpp" ] -Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP65.tmp" -Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP66.tmp" with contents +Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPD2.tmp" +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPD3.tmp" with contents [ /nologo /MT /W3 /GX /O2 /I "..\\" /I "..\TileEngine" /I "..\Tactical" /I "..\Utils" /I "..\strategic" /I ".\\" /D "NO_ZLIB" /D "JA2_PRECOMPILED_HEADERS" /D "NO_ZLIB_COMPRESSION" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "JA2" /D "XML_STATIC" /D "CINTERFACE" /D "_DEBUG" /FR".\Release/" /Fp".\Release/Standard Gaming Platform.pch" /YX"JA2 SGP ALL.H" /Fo".\Release/" /Fd".\Release/" /FD /c "C:\JA2\Build\Standard Gaming Platform\DEBUG.cpp" ] -Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP66.tmp" -Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP67.tmp" with contents +Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPD3.tmp" +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPD4.tmp" with contents [ /nologo /out:".\Release\Standard Gaming Platform.lib" ".\Release\Button Sound Control.obj" @@ -221,7 +221,7 @@ Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP67.tmp" with content ".\Release\WinFont.obj" ".\ddraw.lib" ] -Creating command line "link.exe -lib @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP67.tmp" +Creating command line "link.exe -lib @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPD4.tmp"

Output Window

Compiling... Button Sound Control.cpp @@ -275,7 +275,7 @@ Creating library... --------------------Configuration: Tactical - Win32 Release--------------------

Command Lines

-Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP68.tmp" with contents +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPD5.tmp" with contents [ /nologo /MT /W3 /GX /O2 /I "..\Standard Gaming Platform" /I "..\TileEngine" /I "..\\" /I "..\Utils" /I "..\tacticalai" /I "..\Editor" /I "..\strategic" /I "..\Laptop" /I ".\\" /D "CALLBACKTIMER" /D "PRECOMPILEDHEADERS" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "JA2" /D "XML_STATIC" /FR"Release/" /Fp"Release/Tactical.pch" /YX"Tactical All.h" /Fo"Release/" /Fd"Release/" /FD /c "C:\JA2\Build\Tactical\Air Raid.cpp" @@ -372,14 +372,14 @@ Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP68.tmp" with content "C:\JA2\Build\Tactical\XML_Sounds.cpp" "C:\JA2\Build\Tactical\XML_TonyInventory.cpp" ] -Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP68.tmp" -Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP69.tmp" with contents +Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPD5.tmp" +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPD6.tmp" with contents [ /nologo /MT /W3 /GX /Od /I "..\Standard Gaming Platform" /I "..\TileEngine" /I "..\\" /I "..\Utils" /I "..\tacticalai" /I "..\Editor" /I "..\strategic" /I "..\Laptop" /I ".\\" /D "CALLBACKTIMER" /D "PRECOMPILEDHEADERS" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "JA2" /D "XML_STATIC" /FR"Release/" /Fp"Release/Tactical.pch" /YX"Tactical All.h" /Fo"Release/" /Fd"Release/" /FD /c "C:\JA2\Build\Tactical\LOS.cpp" ] -Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP69.tmp" -Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP6A.tmp" with contents +Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPD6.tmp" +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPD7.tmp" with contents [ /nologo /out:"Release\Tactical.lib" ".\Release\Air Raid.obj" @@ -477,7 +477,7 @@ Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP6A.tmp" with content .\Release\XML_Sounds.obj .\Release\XML_TonyInventory.obj ] -Creating command line "link.exe -lib @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP6A.tmp" +Creating command line "link.exe -lib @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPD7.tmp"

Output Window

Compiling... Air Raid.cpp @@ -586,7 +586,7 @@ Creating library... --------------------Configuration: Utils - Win32 Release--------------------

Command Lines

-Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP6B.tmp" with contents +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPD8.tmp" with contents [ /nologo /MT /W3 /GX /O2 /I "..\Standard Gaming Platform" /I "..\TileEngine" /I "..\\" /I "..\Tactical" /I "..\tacticalai" /I "..\Editor" /I "..\strategic" /I "..\Laptop" /I ".\\" /D "CALLBACKTIMER" /D "PRECOMPILEDHEADERS" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "JA2" /D "XML_STATIC" /D "CINTERFACE" /FR"Release/" /Fp"Release/Utils.pch" /YX"Utils All.h" /Fo"Release/" /Fd"Release/" /FD /c "C:\JA2\Build\Utils\_DutchText.cpp" @@ -629,8 +629,8 @@ Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP6B.tmp" with content "C:\JA2\Build\Utils\XML_Strings.cpp" "C:\JA2\Build\Utils\XML_Strings2.cpp" ] -Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP6B.tmp" -Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP6C.tmp" with contents +Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPD8.tmp" +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPD9.tmp" with contents [ /nologo /out:"Release\Utils.lib" .\Release\_DutchText.obj @@ -673,7 +673,7 @@ Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP6C.tmp" with content .\Release\XML_Strings.obj .\Release\XML_Strings2.obj ] -Creating command line "link.exe -lib @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP6C.tmp" +Creating command line "link.exe -lib @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPD9.tmp"

Output Window

Compiling... _DutchText.cpp @@ -732,7 +732,7 @@ Creating library... --------------------Configuration: TacticalAI - Win32 Release--------------------

Command Lines

-Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP6D.tmp" with contents +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPDA.tmp" with contents [ /nologo /MT /W3 /GX /O2 /I "..\Standard Gaming Platform" /I "..\TileEngine" /I "..\\" /I "..\Tactical" /I "..\Utils" /I "..\Editor" /I "..\strategic" /I "..\Laptop" /I ".\\" /D "PRECOMPILEDHEADERS" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "JA2" /D "XML_STATIC" /D "CINTERFACE" /FR"Release/" /Fp"Release/TacticalAI.pch" /YX"AI All.h" /Fo"Release/" /Fd"Release/" /FD /c "C:\JA2\Build\TacticalAI\AIList.cpp" @@ -750,8 +750,8 @@ Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP6D.tmp" with content "C:\JA2\Build\TacticalAI\QuestDebug.cpp" "C:\JA2\Build\TacticalAI\Realtime.cpp" ] -Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP6D.tmp" -Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP6E.tmp" with contents +Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPDA.tmp" +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPDB.tmp" with contents [ /nologo /out:"Release\TacticalAI.lib" .\Release\AIList.obj @@ -769,7 +769,7 @@ Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP6E.tmp" with content .\Release\QuestDebug.obj .\Release\Realtime.obj ] -Creating command line "link.exe -lib @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP6E.tmp" +Creating command line "link.exe -lib @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPDB.tmp"

Output Window

Compiling... AIList.cpp @@ -792,7 +792,7 @@ Creating library... --------------------Configuration: Editor - Win32 Release--------------------

Command Lines

-Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP6F.tmp" with contents +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPDC.tmp" with contents [ /nologo /MT /W3 /GX /O2 /Ob2 /I "..\Standard Gaming Platform" /I "..\TileEngine" /I "..\\" /I "..\Tactical" /I "..\Utils" /I "..\tacticalai" /I "..\strategic" /I "..\Laptop" /I ".\\" /D "PRECOMPILEDHEADERS" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "JA2" /D "XML_STATIC" /D "CINTERFACE" /FR"Release/" /Fp"Release/Editor.pch" /YX"Editor All.h" /Fo"Release/" /Fd"Release/" /FD /c "C:\JA2\Build\Editor\Cursor Modes.cpp" @@ -820,8 +820,8 @@ Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP6F.tmp" with content "C:\JA2\Build\Editor\smooth.cpp" "C:\JA2\Build\Editor\Smoothing Utils.cpp" ] -Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP6F.tmp" -Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP70.tmp" with contents +Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPDC.tmp" +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPDD.tmp" with contents [ /nologo /out:"Release\Editor.lib" ".\Release\Cursor Modes.obj" @@ -849,11 +849,10 @@ Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP70.tmp" with content .\Release\smooth.obj ".\Release\Smoothing Utils.obj" ] -Creating command line "link.exe -lib @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP70.tmp" +Creating command line "link.exe -lib @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPDD.tmp"

Output Window

Compiling... Cursor Modes.cpp -GENERATED PCH FOR EDITOR PROJECT. edit_sys.cpp Editor Callbacks.cpp Editor Modes.cpp @@ -882,7 +881,7 @@ Creating library... --------------------Configuration: Laptop - Win32 Release--------------------

Command Lines

-Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP71.tmp" with contents +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPDE.tmp" with contents [ /nologo /MT /W3 /GX /O2 /I "..\Standard Gaming Platform" /I "..\TileEngine" /I "..\\" /I "..\Tactical" /I "..\Utils" /I "..\tacticalai" /I "..\Editor" /I "..\strategic" /I ".\\" /D "PRECOMPILEDHEADERS" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "JA2" /D "XML_STATIC" /D "CINTERFACE" /FR"Release/" /Fp"Release/Laptop.pch" /YX"Laptop All.h" /Fo"Release/" /Fd"Release/" /FD /c "C:\JA2\Build\Laptop\aim.cpp" @@ -943,8 +942,8 @@ Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP71.tmp" with content "C:\JA2\Build\Laptop\sirtech.cpp" "C:\JA2\Build\Laptop\Store Inventory.cpp" ] -Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP71.tmp" -Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP72.tmp" with contents +Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPDE.tmp" +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPDF.tmp" with contents [ /nologo /out:"Release\Laptop.lib" .\Release\aim.obj @@ -1005,7 +1004,7 @@ Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP72.tmp" with content .\Release\sirtech.obj ".\Release\Store Inventory.obj" ] -Creating command line "link.exe -lib @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP72.tmp" +Creating command line "link.exe -lib @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPDF.tmp"

Output Window

Compiling... aim.cpp @@ -1071,7 +1070,7 @@ Creating library... --------------------Configuration: Strategic - Win32 Release--------------------

Command Lines

-Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP73.tmp" with contents +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPE0.tmp" with contents [ /nologo /MT /W3 /GX /O2 /I "..\Standard Gaming Platform" /I "..\TileEngine" /I "..\\" /I "..\Tactical" /I "..\Utils" /I "..\tacticalai" /I "..\Editor" /I "..\Laptop" /I ".\\" /D "PRECOMPILEDHEADERS" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "JA2" /D "XML_STATIC" /D "CINTERFACE" /FR"Release/" /Fp"Release/Strategic.pch" /YX"Strategic All.h" /Fo"Release/" /Fd"Release/" /FD /c "C:\JA2\Build\Strategic\AI Viewer.cpp" @@ -1118,8 +1117,8 @@ Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP73.tmp" with content "C:\JA2\Build\Strategic\strategicmap.cpp" "C:\JA2\Build\Strategic\Town Militia.cpp" ] -Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP73.tmp" -Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP74.tmp" with contents +Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPE0.tmp" +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPE1.tmp" with contents [ /nologo /out:"Release\Strategic.lib" ".\Release\AI Viewer.obj" @@ -1166,7 +1165,7 @@ Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP74.tmp" with content .\Release\strategicmap.obj ".\Release\Town Militia.obj" ] -Creating command line "link.exe -lib @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP74.tmp" +Creating command line "link.exe -lib @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPE1.tmp"

Output Window

Compiling... AI Viewer.cpp @@ -1219,7 +1218,7 @@ Creating library...

Command Lines

Creating command line "rc.exe /l 0x409 /fo"Release/ja2.res" /i "Res" /i ".\Res" /d "NDEBUG" "C:\JA2\Build\Res\ja2.rc"" -Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP75.tmp" with contents +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPE2.tmp" with contents [ /nologo /G5 /MT /W3 /GX /Zi /O2 /Ob2 /I ".\Standard Gaming Platform" /I ".\TileEngine" /I ".\Tactical" /I ".\Utils" /I ".\TacticalAI" /I ".\Editor" /I ".\Strategic" /I ".\laptop" /I ".\\" /D "CALLBACKTIMER" /D "PRECOMPILEDHEADERS" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "JA2" /D "XML_STATIC" /D "CINTERFACE" /FR"Release/" /Fp"Release/JA2.pch" /YX"JA2 All.h" /Fo"Release/" /Fd"Release/" /FD /O2b2 /c "C:\JA2\Build\Utils\_Ja25GermanText.cpp" @@ -1246,8 +1245,8 @@ Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP75.tmp" with content "C:\JA2\Build\SCREENS.cpp" "C:\JA2\Build\Sys Globals.cpp" ] -Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP75.tmp" -Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP76.tmp" with contents +Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPE2.tmp" +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPE3.tmp" with contents [ libexpatMT.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib winmm.lib smackw32.lib mss32.lib /nologo /subsystem:windows /profile /map:"Release/ja2_cvs.map" /machine:I386 /out:"..\ja2_cvs.exe" .\Release\_Ja25GermanText.obj @@ -1284,7 +1283,7 @@ libexpatMT.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advap .\Laptop\Release\Laptop.lib .\Strategic\Release\Strategic.lib ] -Creating command line "link.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP76.tmp" +Creating command line "link.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSPE3.tmp"

Output Window

Compiling resources... Compiling... @@ -1307,7 +1306,6 @@ Init.cpp Intro.cpp JA2 Splash.cpp jascreens.cpp -C:\JA2\Build\jascreens.cpp(269) : warning C4101: 'str' : unreferenced local variable Loading Screen.cpp MainMenuScreen.cpp MessageBoxScreen.cpp @@ -1322,7 +1320,7 @@ LINK : warning LNK4089: all references to "ADVAPI32.dll" discarded by /OPT:REF

Results

-ja2_cvs.exe - 0 error(s), 2 warning(s) +ja2_cvs.exe - 0 error(s), 1 warning(s) diff --git a/Strategic/Assignments.cpp b/Strategic/Assignments.cpp index 2bf0d88b8..41b4f5c68 100644 --- a/Strategic/Assignments.cpp +++ b/Strategic/Assignments.cpp @@ -1100,7 +1100,9 @@ BOOLEAN BasicCanCharacterTrainMilitia( SOLDIERTYPE *pSoldier ) BOOLEAN CanCharacterTrainMilitia( SOLDIERTYPE *pSoldier ) { - if (gGameExternalOptions.gfmusttrainroaming) + if (gGameExternalOptions.gfmusttrainroaming + && (GetWorldDay( ) >= gGameExternalOptions.guiAllowMilitiaGroupsDelay) + && (!IsThisSectorASAMSector(pSoldier->sSectorX,pSoldier->sSectorY,0 ))) { if( BasicCanCharacterTrainMilitia( pSoldier ) && MilitiaTrainingAllowedInSector( pSoldier->sSectorX, pSoldier->sSectorY, pSoldier->bSectorZ ) && @@ -1120,7 +1122,7 @@ BOOLEAN CanCharacterTrainMilitia( SOLDIERTYPE *pSoldier ) if( BasicCanCharacterTrainMilitia( pSoldier ) && MilitiaTrainingAllowedInSector( pSoldier->sSectorX, pSoldier->sSectorY, pSoldier->bSectorZ ) && DoesSectorMercIsInHaveSufficientLoyaltyToTrainMilitia( pSoldier ) && - ( IsMilitiaTrainableFromSoldiersSectorMaxed( pSoldier ) == FALSE ) && + ( IsMilitiaTrainableFromSoldiersSectorMaxed( pSoldier,ELITE_MILITIA ) == FALSE ) && ( CountMilitiaTrainersInSoldiersSector( pSoldier ) < gGameExternalOptions.ubMaxMilitiaTrainersPerSector ) ) { return( TRUE ); @@ -1211,7 +1213,7 @@ INT8 CountMilitiaTrainersInSoldiersSector( SOLDIERTYPE * pSoldier ) -BOOLEAN IsMilitiaTrainableFromSoldiersSectorMaxed( SOLDIERTYPE *pSoldier ) +BOOLEAN IsMilitiaTrainableFromSoldiersSectorMaxed( SOLDIERTYPE *pSoldier, INT8 iMilitiaType ) { INT8 bTownId = 0; BOOLEAN fSamSitePresent = FALSE; @@ -1232,18 +1234,17 @@ BOOLEAN IsMilitiaTrainableFromSoldiersSectorMaxed( SOLDIERTYPE *pSoldier ) // if there is a sam site here if( fSamSitePresent ) { - if( IsSAMSiteFullOfMilitia( pSoldier->sSectorX, pSoldier->sSectorY ) ) - { - return( TRUE ); - } - return( FALSE ); + if( IsSAMSiteFullOfMilitia( pSoldier->sSectorX, pSoldier->sSectorY,iMilitiaType ) ) + { + return( TRUE ); + } + return( FALSE ); } - return( FALSE ); } // this considers *ALL* safe sectors of the town, not just the one soldier is in - if( IsTownFullMilitia( bTownId ) ) + if( IsTownFullMilitia( bTownId, iMilitiaType ) ) { // town is full of militia return( TRUE ); @@ -7332,6 +7333,7 @@ void TrainingMenuBtnCallback( MOUSE_REGION * pRegion, INT32 iReason ) INT8 bTownId; CHAR16 sString[ 128 ]; CHAR16 sStringA[ 128 ]; + BOOLEAN fCanTrainMilitia = TRUE; pSoldier = GetSelectedAssignSoldier( FALSE ); @@ -7396,10 +7398,18 @@ void TrainingMenuBtnCallback( MOUSE_REGION * pRegion, INT32 iReason ) // Kaiden: Roaming Militia Training: - // Added to the if test here: - // && (!gGameExternalOptions.gfmusttrainroaming) + if(IsMilitiaTrainableFromSoldiersSectorMaxed( pSoldier, ELITE_MILITIA )) + if (!gGameExternalOptions.gfmusttrainroaming) + fCanTrainMilitia = FALSE; + else if (GetWorldDay( ) < gGameExternalOptions.guiAllowMilitiaGroupsDelay) + fCanTrainMilitia = FALSE; + else if (IsThisSectorASAMSector(pSoldier->sSectorX,pSoldier->sSectorY,0 )) + fCanTrainMilitia = FALSE; + else + fCanTrainMilitia = TRUE; - if( IsMilitiaTrainableFromSoldiersSectorMaxed( pSoldier ) && (!gGameExternalOptions.gfmusttrainroaming)) + + if(!fCanTrainMilitia) { if( bTownId == BLANK_SECTOR ) { @@ -7417,11 +7427,6 @@ void TrainingMenuBtnCallback( MOUSE_REGION * pRegion, INT32 iReason ) break; } - - - - - if ( CountMilitiaTrainersInSoldiersSector( pSoldier ) >= gGameExternalOptions.ubMaxMilitiaTrainersPerSector ) { swprintf( sString, gzLateLocalizedString[ 47 ], gGameExternalOptions.ubMaxMilitiaTrainersPerSector ); diff --git a/Strategic/Assignments.h b/Strategic/Assignments.h index 765f64153..7006e6910 100644 --- a/Strategic/Assignments.h +++ b/Strategic/Assignments.h @@ -315,7 +315,7 @@ void ReEvaluateEveryonesNothingToDo(); void SetAssignmentForList( INT8 bAssignment, INT8 bParam ); // is this area maxed out on militia? -BOOLEAN IsMilitiaTrainableFromSoldiersSectorMaxed( SOLDIERTYPE *pSoldier ); +BOOLEAN IsMilitiaTrainableFromSoldiersSectorMaxed( SOLDIERTYPE *pSoldier, INT8 iMilitiaType ); // function where we actually set someone's assignment so we can trap certain situations void ChangeSoldiersAssignment( SOLDIERTYPE *pSoldier, INT8 bAssignment ); diff --git a/Strategic/MilitiaSquads.cpp b/Strategic/MilitiaSquads.cpp index e462ef9e3..a81c7449b 100644 --- a/Strategic/MilitiaSquads.cpp +++ b/Strategic/MilitiaSquads.cpp @@ -462,10 +462,16 @@ void UpdateMilitiaSquads(INT16 sMapX, INT16 sMapY ) // Kaiden: Moved Create Militia code into CreateMilitiaSquads // Removed the code from here and added the procedure call // If it's time, and this is a city sector create a new group. - // But only if we're not training our own. + // But only if we're not training our own. + if( (!gGameExternalOptions.gfmusttrainroaming) && ( GetTownIdForSector( sMapX, sMapY ) != BLANK_SECTOR ) ) { - if( GetWorldHour() % gGameExternalOptions.guiCreateEachNHours )return; + if (GetWorldDay( ) < gGameExternalOptions.guiAllowMilitiaGroupsDelay) + return; + + if( GetWorldHour() % gGameExternalOptions.guiCreateEachNHours ) + return; + CreateMilitiaSquads( sMapX, sMapY ); } @@ -545,7 +551,8 @@ void UpdateMilitiaSquads(INT16 sMapX, INT16 sMapY ) // Kaiden: Roaming Militia Training: // If we're training roaming militia, // we'll get our squad from here: - + // Don't need to check for delay, as this function won't be + // called if there is a delay set. void CreateMilitiaSquads(INT16 sMapX, INT16 sMapY ) { UINT16 pMoveDir[4][3]; diff --git a/Strategic/Town Militia.cpp b/Strategic/Town Militia.cpp index 6c407103f..37a1e47f7 100644 --- a/Strategic/Town Militia.cpp +++ b/Strategic/Town Militia.cpp @@ -35,6 +35,8 @@ UINT8 gubTownSectorServerIndex = 0; BOOLEAN gfYesNoPromptIsForContinue = FALSE; // this flag remembers whether we're starting new training, or continuing INT32 giTotalCostOfTraining = 0; BOOLEAN gfAreWeTrainingMobile = FALSE; +BOOLEAN gfAreWePromotingGreen = FALSE; +BOOLEAN gfAreWePromotingRegular = FALSE; //the completed list of sector soldiers for training militia @@ -108,7 +110,9 @@ void TownMilitiaTrainingCompleted( SOLDIERTYPE *pTrainer, INT16 sMapX, INT16 sMa // If we're not training roaming militia, // then we will handle everything as normal. - if( (IsMilitiaTrainableFromSoldiersSectorMaxed( pTrainer )) && (gGameExternalOptions.gfmusttrainroaming)) + if( (IsMilitiaTrainableFromSoldiersSectorMaxed( pTrainer, ELITE_MILITIA )) + && (gGameExternalOptions.gfmusttrainroaming) + &&(GetWorldDay( ) >= gGameExternalOptions.guiAllowMilitiaGroupsDelay)) { CreateMilitiaSquads(sMapX, sMapY ); } @@ -182,7 +186,8 @@ void TownMilitiaTrainingCompleted( SOLDIERTYPE *pTrainer, INT16 sMapX, INT16 sMa // Kaiden: Veteran militia training // This is essentially copy/pasted from above // But the names have been changed to protect the innocent - if ((!fFoundOne) && (gGameExternalOptions.gfTrainVeteranMilitia)) + if ((!fFoundOne) && (gGameExternalOptions.gfTrainVeteranMilitia) + && (GetWorldDay( ) >= gGameExternalOptions.guiTrainVeteranMilitiaDelay)) { // are there any REGULAR militia men in the training sector itself? if (MilitiaInSectorOfRank(sMapX, sMapY, REGULAR_MILITIA) > 0) @@ -573,18 +578,35 @@ DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"Militia2"); // We want to charge more for Roaming // get total cost - if( IsMilitiaTrainableFromSoldiersSectorMaxed( pSoldier ) && (gGameExternalOptions.gfmusttrainroaming)) + if( IsMilitiaTrainableFromSoldiersSectorMaxed( pSoldier, ELITE_MILITIA ) + && (gGameExternalOptions.gfmusttrainroaming) + && (GetWorldDay( ) >= gGameExternalOptions.guiAllowMilitiaGroupsDelay)) { giTotalCostOfTraining = (iMilitiaTrainingCost*gGameExternalOptions.iMilitiaCostModifier) * iNumberOfSectors; Assert( giTotalCostOfTraining > 0 ); gfAreWeTrainingMobile = TRUE; } + else if (IsMilitiaTrainableFromSoldiersSectorMaxed( pSoldier, REGULAR_MILITIA ) + && (gGameExternalOptions.gfTrainVeteranMilitia) + && (GetWorldDay( ) >= gGameExternalOptions.guiTrainVeteranMilitiaDelay)) + { + giTotalCostOfTraining = (iMilitiaTrainingCost*gGameExternalOptions.iVeteranCostModifier) * iNumberOfSectors; + Assert( giTotalCostOfTraining > 0 ); + gfAreWePromotingRegular = TRUE; + } + else if (IsMilitiaTrainableFromSoldiersSectorMaxed( pSoldier, GREEN_MILITIA )) + { + giTotalCostOfTraining = (iMilitiaTrainingCost*gGameExternalOptions.iRegularCostModifier) * iNumberOfSectors; + Assert( giTotalCostOfTraining > 0 ); + gfAreWePromotingGreen = TRUE; + } else { giTotalCostOfTraining = iMilitiaTrainingCost * iNumberOfSectors; Assert( giTotalCostOfTraining > 0 ); } + gfYesNoPromptIsForContinue = FALSE; if( LaptopSaveInfo.iCurrentBalance < giTotalCostOfTraining ) @@ -637,6 +659,7 @@ void HandleInterfaceMessageForContinuingTrainingMilitia( SOLDIERTYPE *pSoldier ) INT16 sSectorX = 0, sSectorY = 0; CHAR16 sStringB[ 128 ]; INT8 bTownId; + BOOLEAN fIsFull = FALSE; INT32 iMinLoyaltyToTrain = gGameExternalOptions.iMinLoyaltyToTrain; @@ -667,9 +690,17 @@ DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"Militia3"); // if ( IsMilitiaTrainableFromSoldiersSectorMaxed( pSoldier ) ) // And we're not training mobile militia from a SAM Site - if ((IsMilitiaTrainableFromSoldiersSectorMaxed( pSoldier )) - && ((!gGameExternalOptions.gfmusttrainroaming) - || (IsThisSectorASAMSector(sSectorX,sSectorY,0 ))) ) + if (IsMilitiaTrainableFromSoldiersSectorMaxed( pSoldier, ELITE_MILITIA )) + if (!gGameExternalOptions.gfmusttrainroaming) + fIsFull = TRUE; + else if (GetWorldDay( ) < gGameExternalOptions.guiAllowMilitiaGroupsDelay) + fIsFull = TRUE; + else if (IsThisSectorASAMSector(sSectorX,sSectorY,0 )) + fIsFull = TRUE; + else + fIsFull = FALSE; + + if (fIsFull) { // we're full!!! go home! bTownId = GetTownIdForSector( sSectorX, sSectorY ); @@ -688,47 +719,35 @@ DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"Militia3"); DoContinueMilitiaTrainingMessageBox( sSectorX, sSectorY, sString, MSG_BOX_FLAG_OK, CantTrainMilitiaOkBoxCallback ); return; } -/* else - { - if (( IsMilitiaTrainableFromSoldiersSectorMaxed( pSoldier )) && (!gGameExternalOptions.gfmusttrainroaming)) - { - // we're full!!! go home! - bTownId = GetTownIdForSector( sSectorX, sSectorY ); - if ( bTownId == BLANK_SECTOR ) - { - // wilderness SAM site - GetSectorIDString( sSectorX, sSectorY, 0, sStringB, TRUE ); - void (*tempFptr)(INT16 , INT16 , INT8 , CHAR16 *, BOOLEAN) = GetSectorIDString; - swprintf( (wchar_t *)sString, (wchar_t *)pMilitiaConfirmStrings[ 10 ], sStringB, tempFptr, iMinLoyaltyToTrain ); - } - else - { - // town - swprintf( (wchar_t *)sString, (wchar_t *)pMilitiaConfirmStrings[ 10 ], pTownNames[ bTownId ], iMinLoyaltyToTrain ); - } - DoContinueMilitiaTrainingMessageBox( sSectorX, sSectorY, sString, MSG_BOX_FLAG_OK, CantTrainMilitiaOkBoxCallback ); - return; - } - }*/ - - - - - - // Kaiden: Roaming Militia Training: // Charging more to train Roaming Militia - if ( IsMilitiaTrainableFromSoldiersSectorMaxed( pSoldier ) && (gGameExternalOptions.gfmusttrainroaming)) + // Also Charging more for promotions over Training + + if( IsMilitiaTrainableFromSoldiersSectorMaxed( pSoldier, ELITE_MILITIA ) + && (gGameExternalOptions.gfmusttrainroaming) + &&(GetWorldDay( ) >= gGameExternalOptions.guiAllowMilitiaGroupsDelay)) { giTotalCostOfTraining = (iMilitiaTrainingCost*gGameExternalOptions.iMilitiaCostModifier); gfAreWeTrainingMobile = TRUE; } + else if (IsMilitiaTrainableFromSoldiersSectorMaxed( pSoldier, REGULAR_MILITIA ) + && (gGameExternalOptions.gfTrainVeteranMilitia) + && (GetWorldDay( ) >= gGameExternalOptions.guiTrainVeteranMilitiaDelay)) + { + giTotalCostOfTraining = (iMilitiaTrainingCost*gGameExternalOptions.iVeteranCostModifier); + gfAreWePromotingRegular = TRUE; + } + else if (IsMilitiaTrainableFromSoldiersSectorMaxed( pSoldier, GREEN_MILITIA )) + { + giTotalCostOfTraining = (iMilitiaTrainingCost*gGameExternalOptions.iRegularCostModifier); + gfAreWePromotingGreen = TRUE; + } else { - // continue training always handles just one sector at a time - giTotalCostOfTraining = iMilitiaTrainingCost; + giTotalCostOfTraining = (iMilitiaTrainingCost); } + // can player afford to continue training? if( LaptopSaveInfo.iCurrentBalance < giTotalCostOfTraining ) { @@ -889,15 +908,15 @@ BOOLEAN CanNearbyMilitiaScoutThisSector( INT16 sSectorX, INT16 sSectorY ) return( FALSE ); } -BOOLEAN IsTownFullMilitia( INT8 bTownId ) +BOOLEAN IsTownFullMilitia( INT8 bTownId, INT8 iMilitiaType ) { INT32 iMaxMilitiaPerSector = gGameExternalOptions.iMaxMilitiaPerSector; -DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"Militia4"); INT32 iCounter = 0; INT16 sSectorX = 0, sSectorY = 0; INT32 iNumberOfMilitia = 0; INT32 iMaxNumber = 0; + BOOLEAN fIncreaseCost = FALSE; while( pTownNamesList[ iCounter ] != 0 ) { @@ -910,15 +929,42 @@ DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"Militia4"); // if sector is ours get number of militia here if( SectorOursAndPeaceful( sSectorX, sSectorY, 0 ) ) { + + //Kaiden: Checking for Price Hikes. + if (iMilitiaType == GREEN_MILITIA) + { + iNumberOfMilitia += MilitiaInSectorOfRank( sSectorX, sSectorY, GREEN_MILITIA ); + iNumberOfMilitia += MilitiaInSectorOfRank( sSectorX, sSectorY, REGULAR_MILITIA ); + iNumberOfMilitia += MilitiaInSectorOfRank( sSectorX, sSectorY, ELITE_MILITIA ); + iMaxNumber += iMaxMilitiaPerSector; + + if (MilitiaInSectorOfRank( sSectorX, sSectorY, GREEN_MILITIA ) > 0) + fIncreaseCost = TRUE; + } + else if (iMilitiaType == REGULAR_MILITIA) + { + iNumberOfMilitia += MilitiaInSectorOfRank( sSectorX, sSectorY, REGULAR_MILITIA ); + iNumberOfMilitia += MilitiaInSectorOfRank( sSectorX, sSectorY, ELITE_MILITIA ); + iMaxNumber += iMaxMilitiaPerSector; + + if (MilitiaInSectorOfRank( sSectorX, sSectorY, REGULAR_MILITIA ) > 0) + fIncreaseCost = TRUE; + } + + //Kaiden: OK So iMilitiaType should be ELITE_MILITIA + // and we're just checking sectors for purposes + // of training mobile militia or ending training + // don't count GREEN militia, they can be trained into regulars first // Kaiden: Veteran Militia Training: // And we don't count regulars either if we're training veterans - if (gGameExternalOptions.gfTrainVeteranMilitia) + if (gGameExternalOptions.gfTrainVeteranMilitia && (iMilitiaType == ELITE_MILITIA) + && (GetWorldDay( ) >= gGameExternalOptions.guiTrainVeteranMilitiaDelay)) { iNumberOfMilitia += MilitiaInSectorOfRank( sSectorX, sSectorY, ELITE_MILITIA ); iMaxNumber += iMaxMilitiaPerSector; } - else + else if (iMilitiaType == ELITE_MILITIA) { iNumberOfMilitia += MilitiaInSectorOfRank( sSectorX, sSectorY, REGULAR_MILITIA ); iNumberOfMilitia += MilitiaInSectorOfRank( sSectorX, sSectorY, ELITE_MILITIA ); @@ -930,6 +976,24 @@ DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"Militia4"); iCounter++; } + if (iMilitiaType == GREEN_MILITIA) + { + if (( iNumberOfMilitia == iMaxNumber ) && (fIncreaseCost)) + return( TRUE ); + else + return( FALSE ); + + } + else if (iMilitiaType == REGULAR_MILITIA) + { + if (( iNumberOfMilitia == iMaxNumber ) && (fIncreaseCost)) + return( TRUE ); + else + return( FALSE ); + } + + + // now check the number of militia if ( iMaxNumber > iNumberOfMilitia ) { @@ -939,7 +1003,7 @@ DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"Militia4"); return( TRUE ); } -BOOLEAN IsSAMSiteFullOfMilitia( INT16 sSectorX, INT16 sSectorY ) +BOOLEAN IsSAMSiteFullOfMilitia( INT16 sSectorX, INT16 sSectorY, INT8 iMilitiaType ) { BOOLEAN fSamSitePresent = FALSE; INT32 iNumberOfMilitia = 0; @@ -956,16 +1020,47 @@ DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"Militia5"); if( SectorOursAndPeaceful( sSectorX, sSectorY, 0 ) ) { + + //Kaiden: If we're checking for specific Militia for Price Hikes: + if (iMilitiaType == GREEN_MILITIA) + { + iNumberOfMilitia += MilitiaInSectorOfRank( sSectorX, sSectorY, GREEN_MILITIA ); + iNumberOfMilitia += MilitiaInSectorOfRank( sSectorX, sSectorY, REGULAR_MILITIA ); + iNumberOfMilitia += MilitiaInSectorOfRank( sSectorX, sSectorY, ELITE_MILITIA ); + + if (( iNumberOfMilitia == iMaxMilitiaPerSector) && + (MilitiaInSectorOfRank( sSectorX, sSectorY, GREEN_MILITIA ) > 0)) + return( TRUE ); + else + return( FALSE ); + + } + else if (iMilitiaType == REGULAR_MILITIA) + { + iNumberOfMilitia += MilitiaInSectorOfRank( sSectorX, sSectorY, REGULAR_MILITIA ); + iNumberOfMilitia += MilitiaInSectorOfRank( sSectorX, sSectorY, ELITE_MILITIA ); + + if (( iNumberOfMilitia == iMaxMilitiaPerSector) && + (MilitiaInSectorOfRank( sSectorX, sSectorY, REGULAR_MILITIA ) > 0)) + return( TRUE ); + else + return( FALSE ); + } + // Kaiden: Ok we're not checking for militia promotions now, + // so MilitiaType should be ELITE_MILITIA for purposes + // of training Roaming or not. + // don't count GREEN militia, they can be trained into regulars first // Kaiden: Veteran Militia Training: // And we don't count regulars either if we're training veterans - if (gGameExternalOptions.gfTrainVeteranMilitia) + if (gGameExternalOptions.gfTrainVeteranMilitia && (iMilitiaType == ELITE_MILITIA) + && (GetWorldDay( ) >= gGameExternalOptions.guiTrainVeteranMilitiaDelay)) { iNumberOfMilitia += MilitiaInSectorOfRank( sSectorX, sSectorY, ELITE_MILITIA ); iMaxNumber += iMaxMilitiaPerSector; } - else + else if (iMilitiaType == ELITE_MILITIA) { iNumberOfMilitia += MilitiaInSectorOfRank( sSectorX, sSectorY, REGULAR_MILITIA ); iNumberOfMilitia += MilitiaInSectorOfRank( sSectorX, sSectorY, ELITE_MILITIA ); @@ -1250,19 +1345,35 @@ void PayForTrainingInSector( UINT8 ubSector ) INT32 iMilitiaTrainingCost = gGameExternalOptions.iMilitiaTrainingCost; DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"Militia6"); Assert( SectorInfo[ ubSector ].fMilitiaTrainingPaid == FALSE ); + INT32 CostMultiplyer = 0; // spend the money // Kaiden: Roaming Militia Training: // Charging more to train Roaming Militia + // Or for promotions. + if ( gfAreWeTrainingMobile) { - AddTransactionToPlayersBook( TRAIN_TOWN_MILITIA, ubSector, GetWorldTotalMin(), -( iMilitiaTrainingCost*gGameExternalOptions.iMilitiaCostModifier ) ); + CostMultiplyer = gGameExternalOptions.iMilitiaCostModifier; gfAreWeTrainingMobile = FALSE; } + else if ( gfAreWePromotingGreen) + { + CostMultiplyer = gGameExternalOptions.iRegularCostModifier; + gfAreWePromotingGreen = FALSE; + } + else if ( gfAreWePromotingRegular) + { + CostMultiplyer = gGameExternalOptions.iVeteranCostModifier; + gfAreWePromotingRegular = FALSE; + } else { - AddTransactionToPlayersBook( TRAIN_TOWN_MILITIA, ubSector, GetWorldTotalMin(), -( iMilitiaTrainingCost ) ); + CostMultiplyer = 1; } + + AddTransactionToPlayersBook( TRAIN_TOWN_MILITIA, ubSector, GetWorldTotalMin(), -( iMilitiaTrainingCost*CostMultiplyer ) ); + // mark this sector sectors as being paid up SectorInfo[ ubSector ].fMilitiaTrainingPaid = TRUE; diff --git a/Strategic/Town Militia.h b/Strategic/Town Militia.h index 94ba8abef..9735ca00c 100644 --- a/Strategic/Town Militia.h +++ b/Strategic/Town Militia.h @@ -61,9 +61,9 @@ void HandleMilitiaStatusInCurrentMapBeforeLoadingNewMap( void ); BOOLEAN CanNearbyMilitiaScoutThisSector( INT16 sSectorX, INT16 sSectorY ); // is the town militia full? -BOOLEAN IsTownFullMilitia( INT8 bTownId ); +BOOLEAN IsTownFullMilitia( INT8 bTownId, INT8 iMilitiaType ); // is the SAM site full of militia? -BOOLEAN IsSAMSiteFullOfMilitia( INT16 sSectorX, INT16 sSectorY ); +BOOLEAN IsSAMSiteFullOfMilitia( INT16 sSectorX, INT16 sSectorY, INT8 iMilitiaType ); // now that town training is complete, handle the continue boxes diff --git a/builddefines.h b/builddefines.h index 5cd0d5fd3..aebb259d7 100644 --- a/builddefines.h +++ b/builddefines.h @@ -4,13 +4,13 @@ #include "Language Defines.h" // Beta version -#define JA2BETAVERSION +//#define JA2BETAVERSION // Normal test version // #define JA2TESTVERSION // If we want to include the editor -#define JA2EDITOR +//#define JA2EDITOR #ifdef _DEBUG #ifndef JA2TESTVERSION diff --git a/jascreens.cpp b/jascreens.cpp index 9400ac81a..f367bef69 100644 --- a/jascreens.cpp +++ b/jascreens.cpp @@ -286,7 +286,7 @@ UINT32 ErrorScreenHandle(void) mprintf( 50, 255, L"%S", gubErrorText ); SetFontForeground( FONT_LTRED ); -/* + #ifdef JA2BETAVERSION if( gubAssertString[0] ) @@ -295,7 +295,7 @@ UINT32 ErrorScreenHandle(void) DisplayWrappedString( 50, 270, 560, 2, FONT12ARIAL, FONT_RED, str, FONT_BLACK, TRUE, LEFT_JUSTIFIED ); } #endif -*/ + if ( !fFirstTime ) { DebugMsg(TOPIC_JA2, DBG_LEVEL_0, String( "Runtime Error: %s ", gubErrorText ) );