From 4b40212ebddf851cce2f6adb3fdb145d25101d00 Mon Sep 17 00:00:00 2001 From: rftr Date: Sat, 28 May 2022 21:09:02 +0000 Subject: [PATCH] added new options to limit merc salary increases on level up: MERC_LEVEL_UP_MAXIMUM_SALARY_INCREASE_DAILY MERC_LEVEL_UP_MAXIMUM_SALARY_INCREASE_WEEKLY MERC_LEVEL_UP_MAXIMUM_SALARY_INCREASE_BIWEEKLY git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@9387 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- GameSettings.cpp | 3 +++ GameSettings.h | 3 +++ Tactical/Campaign.cpp | 18 ++++++++++-------- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/GameSettings.cpp b/GameSettings.cpp index 0b28796a..49ec4290 100644 --- a/GameSettings.cpp +++ b/GameSettings.cpp @@ -1117,6 +1117,9 @@ void LoadGameExternalOptions() //tais: percentage that the merc's salary rises when he/she levels up gGameExternalOptions.gMercLevelUpSalaryIncreasePercentage = (FLOAT)iniReader.ReadInteger("Financial Settings","MERC_LEVEL_UP_SALARY_INCREASE_PERCENTAGE",25, 0, 1000); + gGameExternalOptions.uMaxMercSalaryIncreaseDaily = (UINT32)iniReader.ReadUINT32("Financial Settings","MERC_LEVEL_UP_MAXIMUM_SALARY_INCREASE_DAILY", 100000, 0, 100000); + gGameExternalOptions.uMaxMercSalaryIncreaseWeekly = (UINT32)iniReader.ReadUINT32("Financial Settings","MERC_LEVEL_UP_MAXIMUM_SALARY_INCREASE_WEEKLY", 100000, 0, 100000); + gGameExternalOptions.uMaxMercSalaryIncreaseBiweekly = (UINT32)iniReader.ReadUINT32("Financial Settings","MERC_LEVEL_UP_MAXIMUM_SALARY_INCREASE_BIWEEKLY", 100000, 0, 100000); // Flugente: mine income can depend on the number or workers we have gGameExternalOptions.fMineRequiresWorkers = iniReader.ReadBoolean( "Financial Settings", "MINE_REQUIRES_WORKERS", FALSE ); diff --git a/GameSettings.h b/GameSettings.h index 1a4c0b09..8ed96c48 100644 --- a/GameSettings.h +++ b/GameSettings.h @@ -1409,6 +1409,9 @@ typedef struct BOOLEAN ubShowSuppressionScaleAsterisk; FLOAT gMercLevelUpSalaryIncreasePercentage; + UINT32 uMaxMercSalaryIncreaseDaily; + UINT32 uMaxMercSalaryIncreaseWeekly; + UINT32 uMaxMercSalaryIncreaseBiweekly; // Flugente: mine income can depend on the number or workers we have BOOLEAN fMineRequiresWorkers; diff --git a/Tactical/Campaign.cpp b/Tactical/Campaign.cpp index 273d7b4a..770ebc64 100644 --- a/Tactical/Campaign.cpp +++ b/Tactical/Campaign.cpp @@ -836,11 +836,11 @@ void ChangeStat( MERCPROFILESTRUCT *pProfile, SOLDIERTYPE *pSoldier, UINT8 ubSta // increase all salaries and medical deposits, once for each level gained for (uiLevelCnt = 0; uiLevelCnt < (UINT32) sPtsChanged; ++uiLevelCnt) { - pProfile->sSalary = (INT16) CalcNewSalary(pProfile->sSalary, fChangeTypeIncrease, MAX_DAILY_SALARY); - pProfile->uiWeeklySalary = CalcNewSalary(pProfile->uiWeeklySalary, fChangeTypeIncrease, MAX_LARGE_SALARY); - pProfile->uiBiWeeklySalary = CalcNewSalary(pProfile->uiBiWeeklySalary, fChangeTypeIncrease, MAX_LARGE_SALARY); - pProfile->sTrueSalary = (INT16) CalcNewSalary(pProfile->sTrueSalary, fChangeTypeIncrease, MAX_DAILY_SALARY); - pProfile->sMedicalDepositAmount = (INT16) CalcNewSalary(pProfile->sMedicalDepositAmount, fChangeTypeIncrease, MAX_DAILY_SALARY); + pProfile->sSalary = (INT16) CalcNewSalary(pProfile->sSalary, fChangeTypeIncrease, MAX_DAILY_SALARY, gGameExternalOptions.uMaxMercSalaryIncreaseDaily); + pProfile->uiWeeklySalary = CalcNewSalary(pProfile->uiWeeklySalary, fChangeTypeIncrease, MAX_LARGE_SALARY, gGameExternalOptions.uMaxMercSalaryIncreaseWeekly); + pProfile->uiBiWeeklySalary = CalcNewSalary(pProfile->uiBiWeeklySalary, fChangeTypeIncrease, MAX_LARGE_SALARY, gGameExternalOptions.uMaxMercSalaryIncreaseBiweekly); + pProfile->sTrueSalary = (INT16) CalcNewSalary(pProfile->sTrueSalary, fChangeTypeIncrease, MAX_DAILY_SALARY, gGameExternalOptions.uMaxMercSalaryIncreaseDaily); + pProfile->sMedicalDepositAmount = (INT16) CalcNewSalary(pProfile->sMedicalDepositAmount, fChangeTypeIncrease, MAX_DAILY_SALARY, gGameExternalOptions.uMaxMercSalaryIncreaseDaily); //if (pSoldier != NULL) // DON'T increase the *effective* medical deposit, it's already been paid out @@ -1094,10 +1094,10 @@ void HandleAnyStatChangesAfterAttack( void ) } -UINT32 CalcNewSalary(UINT32 uiOldSalary, BOOLEAN fIncrease, UINT32 uiMaxLimit) +UINT32 CalcNewSalary(UINT32 uiOldSalary, BOOLEAN fIncrease, UINT32 uiMaxLimit, UINT32 uiIncreaseCap) { - UINT32 uiNewSalary; - FLOAT SalaryMultiplier = (FLOAT) ((gGameExternalOptions.gMercLevelUpSalaryIncreasePercentage / 100) + 1); + UINT32 uiNewSalary = 0; + const FLOAT SalaryMultiplier = (FLOAT) ((gGameExternalOptions.gMercLevelUpSalaryIncreasePercentage / 100) + 1); // if he was working for free, it's still free! if (uiOldSalary == 0) @@ -1117,6 +1117,8 @@ UINT32 CalcNewSalary(UINT32 uiOldSalary, BOOLEAN fIncrease, UINT32 uiMaxLimit) // round it off to a reasonable multiple uiNewSalary = RoundOffSalary(uiNewSalary); + uiNewSalary = min(uiNewSalary, uiOldSalary + uiIncreaseCap); + // let's set some reasonable limits here, lest it get silly one day if (uiNewSalary > uiMaxLimit) uiNewSalary = uiMaxLimit;