diff --git a/GameSettings.cpp b/GameSettings.cpp index d7ece1a8..00b528bd 100644 --- a/GameSettings.cpp +++ b/GameSettings.cpp @@ -62,7 +62,10 @@ #define CTH_COEFFICIENTS_FILE "CTHConstants.ini" //DBrot: Settings for a mod that don't really fit in the Options file. This means GridNos for now. -#define MOD_SETTINGS_FILE "Mod_Settings.ini" +#define MOD_SETTINGS_FILE "Mod_Settings.ini" + +// silversurfer: Modifiers for item properties ( thresholds, range, damage, armor etc.) +#define ITEM_SETTINGS_FILE "Item_Settings.ini" #define CD_ROOT_DIR "DATA\\" @@ -74,6 +77,7 @@ SKILL_TRAIT_VALUES gSkillTraitValues; // SANDRO - added this one CTH_CONSTANTS gGameCTHConstants; // HEADROCK HAM 4: CTH constants MOD_SETTINGS gModSettings; //DBrot: mod specific settings +ITEM_SETTINGS gItemSettings; // silversurfer: item property modifiers extern SGPFILENAME gCheckFilenames[]; extern CHAR8 gzErrorMsg[256]; @@ -2395,6 +2399,55 @@ void LoadModSettings(){ gModSettings.ubHospitalSectorY = iniReader.ReadInteger("Cambria", "HOSPITAL_SECTOR_Y", 6); gModSettings.ubHospitalSectorZ = iniReader.ReadInteger("Cambria", "HOSPITAL_SECTOR_Z", 0); } + +// silversurfer: load item property modifiers +void LoadItemSettings() +{ + CIniReader iniReader(ITEM_SETTINGS_FILE); + + // silversurfer: New values to fine-tune weapon overheating for different gun classes + // --------- PISTOLS ---------- + gItemSettings.fOverheatJamThresholdModifier[GUN_PISTOL] = iniReader.ReadFloat ("Weapon Settings","OVERHEATING_JAM_THRESHOLD_PISTOL_MODIFIER", 1.0f, 0.1f, 10.0f); + gItemSettings.fOverheatDamageThresholdModifier[GUN_PISTOL] = iniReader.ReadFloat ("Weapon Settings","OVERHEATING_DAMAGE_THRESHOLD_PISTOL_MODIFIER", 1.0f, 0.1f, 10.0f); + gItemSettings.fOverheatTemperatureModifier[GUN_PISTOL] = iniReader.ReadFloat ("Weapon Settings","OVERHEATING_TEMPERATURE_PISTOL_MODIFIER", 1.0f, 0.1f, 10.0f); + gItemSettings.fOverheatCooldownModifier[GUN_PISTOL] = iniReader.ReadFloat ("Weapon Settings","OVERHEATING_COOLDOWN_PISTOL_MODIFIER", 1.0f, 0.1f, 10.0f); + // ----- MACHINE PISTOLS ------ + gItemSettings.fOverheatJamThresholdModifier[GUN_M_PISTOL] = iniReader.ReadFloat ("Weapon Settings","OVERHEATING_JAM_THRESHOLD_MP_MODIFIER", 1.0f, 0.1f, 10.0f); + gItemSettings.fOverheatDamageThresholdModifier[GUN_M_PISTOL] = iniReader.ReadFloat ("Weapon Settings","OVERHEATING_DAMAGE_THRESHOLD_MP_MODIFIER", 1.0f, 0.1f, 10.0f); + gItemSettings.fOverheatTemperatureModifier[GUN_M_PISTOL] = iniReader.ReadFloat ("Weapon Settings","OVERHEATING_TEMPERATURE_MP_MODIFIER", 1.0f, 0.1f, 10.0f); + gItemSettings.fOverheatCooldownModifier[GUN_M_PISTOL] = iniReader.ReadFloat ("Weapon Settings","OVERHEATING_COOLDOWN_MP_MODIFIER", 1.0f, 0.1f, 10.0f); + // ---------- SMGS ------------ + gItemSettings.fOverheatJamThresholdModifier[GUN_SMG] = iniReader.ReadFloat ("Weapon Settings","OVERHEATING_JAM_THRESHOLD_SMG_MODIFIER", 1.0f, 0.1f, 10.0f); + gItemSettings.fOverheatDamageThresholdModifier[GUN_SMG] = iniReader.ReadFloat ("Weapon Settings","OVERHEATING_DAMAGE_THRESHOLD_SMG_MODIFIER", 1.0f, 0.1f, 10.0f); + gItemSettings.fOverheatTemperatureModifier[GUN_SMG] = iniReader.ReadFloat ("Weapon Settings","OVERHEATING_TEMPERATURE_SMG_MODIFIER", 1.0f, 0.1f, 10.0f); + gItemSettings.fOverheatCooldownModifier[GUN_SMG] = iniReader.ReadFloat ("Weapon Settings","OVERHEATING_COOLDOWN_SMG_MODIFIER", 1.0f, 0.1f, 10.0f); + // --------- RIFLES ----------- + gItemSettings.fOverheatJamThresholdModifier[GUN_RIFLE] = iniReader.ReadFloat ("Weapon Settings","OVERHEATING_JAM_THRESHOLD_RIFLE_MODIFIER", 1.0f, 0.1f, 10.0f); + gItemSettings.fOverheatDamageThresholdModifier[GUN_RIFLE] = iniReader.ReadFloat ("Weapon Settings","OVERHEATING_DAMAGE_THRESHOLD_RIFLE_MODIFIER", 1.0f, 0.1f, 10.0f); + gItemSettings.fOverheatTemperatureModifier[GUN_RIFLE] = iniReader.ReadFloat ("Weapon Settings","OVERHEATING_TEMPERATURE_RIFLE_MODIFIER", 1.0f, 0.1f, 10.0f); + gItemSettings.fOverheatCooldownModifier[GUN_RIFLE] = iniReader.ReadFloat ("Weapon Settings","OVERHEATING_COOLDOWN_RIFLE_MODIFIER", 1.0f, 0.1f, 10.0f); + // ------ SNIPER RIFLES ------- + gItemSettings.fOverheatJamThresholdModifier[GUN_SN_RIFLE] = iniReader.ReadFloat ("Weapon Settings","OVERHEATING_JAM_THRESHOLD_SNIPER_MODIFIER", 1.0f, 0.1f, 10.0f); + gItemSettings.fOverheatDamageThresholdModifier[GUN_SN_RIFLE] = iniReader.ReadFloat ("Weapon Settings","OVERHEATING_DAMAGE_THRESHOLD_SNIPER_MODIFIER", 1.0f, 0.1f, 10.0f); + gItemSettings.fOverheatTemperatureModifier[GUN_SN_RIFLE] = iniReader.ReadFloat ("Weapon Settings","OVERHEATING_TEMPERATURE_SNIPER_MODIFIER", 1.0f, 0.1f, 10.0f); + gItemSettings.fOverheatCooldownModifier[GUN_SN_RIFLE] = iniReader.ReadFloat ("Weapon Settings","OVERHEATING_COOLDOWN_SNIPER_MODIFIER", 1.0f, 0.1f, 10.0f); + // ------ ASSAULT RIFLES ------ + gItemSettings.fOverheatJamThresholdModifier[GUN_AS_RIFLE] = iniReader.ReadFloat ("Weapon Settings","OVERHEATING_JAM_THRESHOLD_AR_MODIFIER", 1.0f, 0.1f, 10.0f); + gItemSettings.fOverheatDamageThresholdModifier[GUN_AS_RIFLE] = iniReader.ReadFloat ("Weapon Settings","OVERHEATING_DAMAGE_THRESHOLD_AR_MODIFIER", 1.0f, 0.1f, 10.0f); + gItemSettings.fOverheatTemperatureModifier[GUN_AS_RIFLE] = iniReader.ReadFloat ("Weapon Settings","OVERHEATING_TEMPERATURE_AR_MODIFIER", 1.0f, 0.1f, 10.0f); + gItemSettings.fOverheatCooldownModifier[GUN_AS_RIFLE] = iniReader.ReadFloat ("Weapon Settings","OVERHEATING_COOLDOWN_AR_MODIFIER", 1.0f, 0.1f, 10.0f); + // ---------- LMGS ------------ + gItemSettings.fOverheatJamThresholdModifier[GUN_LMG] = iniReader.ReadFloat ("Weapon Settings","OVERHEATING_JAM_THRESHOLD_LMG_MODIFIER", 1.0f, 0.1f, 10.0f); + gItemSettings.fOverheatDamageThresholdModifier[GUN_LMG] = iniReader.ReadFloat ("Weapon Settings","OVERHEATING_DAMAGE_THRESHOLD_LMG_MODIFIER", 1.0f, 0.1f, 10.0f); + gItemSettings.fOverheatTemperatureModifier[GUN_LMG] = iniReader.ReadFloat ("Weapon Settings","OVERHEATING_TEMPERATURE_LMG_MODIFIER", 1.0f, 0.1f, 10.0f); + gItemSettings.fOverheatCooldownModifier[GUN_LMG] = iniReader.ReadFloat ("Weapon Settings","OVERHEATING_COOLDOWN_LMG_MODIFIER", 1.0f, 0.1f, 10.0f); + // -------- SHOTGUNS ---------- + gItemSettings.fOverheatJamThresholdModifier[GUN_SHOTGUN] = iniReader.ReadFloat ("Weapon Settings","OVERHEATING_JAM_THRESHOLD_SHOTGUN_MODIFIER", 1.0f, 0.1f, 10.0f); + gItemSettings.fOverheatDamageThresholdModifier[GUN_SHOTGUN] = iniReader.ReadFloat ("Weapon Settings","OVERHEATING_DAMAGE_THRESHOLD_SHOTGUN_MODIFIER", 1.0f, 0.1f, 10.0f); + gItemSettings.fOverheatTemperatureModifier[GUN_SHOTGUN] = iniReader.ReadFloat ("Weapon Settings","OVERHEATING_TEMPERATURE_SHOTGUN_MODIFIER", 1.0f, 0.1f, 10.0f); + gItemSettings.fOverheatCooldownModifier[GUN_SHOTGUN] = iniReader.ReadFloat ("Weapon Settings","OVERHEATING_COOLDOWN_SHOTGUN_MODIFIER", 1.0f, 0.1f, 10.0f); +} + INT16 DynamicAdjustAPConstants(INT16 iniReadValue, INT16 iniDefaultValue, BOOLEAN reverse) { //CHRISL: This function will dynamically adjust all the APBPConstant values based on the AP_MAXIMUM value. This way diff --git a/GameSettings.h b/GameSettings.h index 9be468b2..47144db2 100644 --- a/GameSettings.h +++ b/GameSettings.h @@ -1739,8 +1739,21 @@ typedef struct }MOD_SETTINGS; +// silversurfer: item property modifiers +typedef struct +{ + // weapon overheating modifiers for the different gun classes + FLOAT fOverheatJamThresholdModifier[9]; + FLOAT fOverheatDamageThresholdModifier[9]; + FLOAT fOverheatTemperatureModifier[9]; + FLOAT fOverheatCooldownModifier[9]; + +}ITEM_SETTINGS; + extern MOD_SETTINGS gModSettings; +extern ITEM_SETTINGS gItemSettings; + //This structure will contain general Ja2 settings NOT individual game settings. extern GAME_SETTINGS gGameSettings; @@ -1764,6 +1777,7 @@ BOOLEAN LoadGameSettings(); void LoadGameExternalOptions(); void LoadSkillTraitsExternalSettings(); // SANDRO - added this one void LoadModSettings(); +void LoadItemSettings(); // silversurfer: reads item property modifiers void LoadGameAPBPConstants(); // HEADROCK HAM 4: Read CTH/Shooting coefficients from file void LoadCTHConstants(); diff --git a/Tactical/Interface Enhanced.cpp b/Tactical/Interface Enhanced.cpp index c021d28d..01a99a8c 100644 --- a/Tactical/Interface Enhanced.cpp +++ b/Tactical/Interface Enhanced.cpp @@ -11557,6 +11557,8 @@ void DrawAdvancedValues( OBJECTTYPE *gpItemDescObject ) sHeight = gItemDescAdvRegions[cnt-sFirstLine][1].sBottom - sTop; iFloatModifier[0] = Weapon[ gpItemDescObject->usItem ].usOverheatingSingleShotTemperature * gGameExternalOptions.iOverheatTemperatureGlobalModfier; + if ( Item[gpItemDescObject->usItem].usItemClass & IC_GUN ) + iFloatModifier[0] *= gItemSettings.fOverheatTemperatureModifier[ Weapon[ gpItemDescObject->usItem ].ubWeaponType ]; iFloatModifier[1] = GetSingleShotTemperature( gpItemDescObject ) - iFloatModifier[0]; iFloatModifier[2] = GetSingleShotTemperature( gpItemDescObject ); @@ -11611,6 +11613,8 @@ void DrawAdvancedValues( OBJECTTYPE *gpItemDescObject ) sHeight = gItemDescAdvRegions[cnt-sFirstLine][1].sBottom - sTop; iFloatModifier[0] = Item[gpItemDescObject->usItem].usOverheatingCooldownFactor; + if ( Item[gpItemDescObject->usItem].usItemClass & IC_GUN ) + iFloatModifier[0] *= gItemSettings.fOverheatCooldownModifier[ Weapon[gpItemDescObject->usItem].ubWeaponType ]; iFloatModifier[1] = GetItemCooldownFactor(gpItemDescObject) - iFloatModifier[0]; iFloatModifier[2] = GetItemCooldownFactor(gpItemDescObject); @@ -11664,6 +11668,8 @@ void DrawAdvancedValues( OBJECTTYPE *gpItemDescObject ) sHeight = gItemDescAdvRegions[cnt-sFirstLine][1].sBottom - sTop; iFloatModifier[0] = Weapon[ gpItemDescObject->usItem ].usOverheatingJamThreshold; + if ( Item[gpItemDescObject->usItem].usItemClass & IC_GUN ) + iFloatModifier[0] *= gItemSettings.fOverheatJamThresholdModifier[ Weapon[gpItemDescObject->usItem].ubWeaponType ]; iFloatModifier[1] = GetOverheatJamThreshold(gpItemDescObject) - iFloatModifier[0]; iFloatModifier[2] = GetOverheatJamThreshold(gpItemDescObject); @@ -11717,6 +11723,8 @@ void DrawAdvancedValues( OBJECTTYPE *gpItemDescObject ) sHeight = gItemDescAdvRegions[cnt-sFirstLine][1].sBottom - sTop; iFloatModifier[0] = Weapon[ gpItemDescObject->usItem ].usOverheatingDamageThreshold; + if ( Item[gpItemDescObject->usItem].usItemClass & IC_GUN ) + iFloatModifier[0] *= gItemSettings.fOverheatDamageThresholdModifier[ Weapon[gpItemDescObject->usItem].ubWeaponType ]; iFloatModifier[1] = GetOverheatDamageThreshold(gpItemDescObject) - iFloatModifier[0]; iFloatModifier[2] = GetOverheatDamageThreshold(gpItemDescObject); diff --git a/Tactical/Items.cpp b/Tactical/Items.cpp index 22f86ff8..e4b6ae7e 100644 --- a/Tactical/Items.cpp +++ b/Tactical/Items.cpp @@ -14097,6 +14097,8 @@ FLOAT GetItemCooldownModificator( OBJECTTYPE * pObj ) FLOAT GetItemCooldownFactor( OBJECTTYPE * pObj ) { FLOAT cooldownfactor = Item[pObj->usItem].usOverheatingCooldownFactor; // ... get item-specific cooldown factor ... + if ( Item[pObj->usItem].usItemClass & IC_GUN ) + cooldownfactor *= gItemSettings.fOverheatCooldownModifier[ Weapon[ pObj->usItem ].ubWeaponType ]; FLOAT modificator = 1.0f + GetItemCooldownModificator( pObj ); diff --git a/Tactical/Weapons.cpp b/Tactical/Weapons.cpp index 7212538d..5f995445 100644 --- a/Tactical/Weapons.cpp +++ b/Tactical/Weapons.cpp @@ -1457,6 +1457,9 @@ FLOAT GetGunOverheatDamagePercentage( FLOAT usTemperature, UINT16 usIndx ) { FLOAT damagethreshold = Weapon[Item[ usIndx ].ubClassIndex].usOverheatingDamageThreshold; + if ( Item[usIndx].usItemClass & IC_GUN ) + damagethreshold *= gItemSettings.fOverheatDamageThresholdModifier[Weapon[Item[ usIndx ].uiIndex].ubWeaponType]; + return usTemperature/ damagethreshold ; } @@ -1465,6 +1468,9 @@ FLOAT GetGunOverheatJamPercentage( FLOAT usTemperature, UINT16 usIndx ) { FLOAT jamthreshold = Weapon[Item[ usIndx ].ubClassIndex].usOverheatingJamThreshold; + if ( Item[usIndx].usItemClass & IC_GUN ) + jamthreshold *= gItemSettings.fOverheatJamThresholdModifier[Weapon[Item[ usIndx ].uiIndex].ubWeaponType]; + return usTemperature/ jamthreshold ; } @@ -12071,6 +12077,9 @@ FLOAT GetSingleShotTemperature( OBJECTTYPE *pObj ) { singleshottemperature = Weapon[ pObj->usItem ].usOverheatingSingleShotTemperature; + if ( Item[pObj->usItem].usItemClass & IC_GUN ) + singleshottemperature *= gItemSettings.fOverheatTemperatureModifier[ Weapon[ pObj->usItem ].ubWeaponType ]; + // determine modificator according to attachments FLOAT modificator = 1.0f + GetTemperatureModifier(pObj); @@ -12137,6 +12146,9 @@ FLOAT GetOverheatJamThreshold( OBJECTTYPE *pObj ) { jamthreshold = Weapon[ pObj->usItem ].usOverheatingJamThreshold; + if ( Item[pObj->usItem].usItemClass & IC_GUN ) + jamthreshold *= gItemSettings.fOverheatJamThresholdModifier[ Weapon[ pObj->usItem ].ubWeaponType ]; + // determine modificator according to attachments FLOAT modificator = 1.0f + GetOverheatJamThresholdModifier(pObj); @@ -12171,6 +12183,9 @@ FLOAT GetOverheatDamageThreshold( OBJECTTYPE *pObj ) { damagethreshold = Weapon[ pObj->usItem ].usOverheatingDamageThreshold; + if ( Item[pObj->usItem].usItemClass & IC_GUN ) + damagethreshold *= gItemSettings.fOverheatDamageThresholdModifier[ Weapon[ pObj->usItem ].ubWeaponType ]; + // determine modificator according to attachments FLOAT modificator = 1.0f + GetOverheatDamageThresholdModifier(pObj); diff --git a/gameloop.cpp b/gameloop.cpp index 8fee341b..492df2a4 100644 --- a/gameloop.cpp +++ b/gameloop.cpp @@ -134,6 +134,8 @@ BOOLEAN InitializeGame(void) LoadCTHConstants(); //DBrot: load mod settings LoadModSettings(); + // silversurfer: load item settings modifiers + LoadItemSettings(); #ifdef JA2UB LoadGameUBOptions(); // JA25 UB