New modifiers for Item Properties

The new Item_Settings.ini is there to host modifiers for item properties in the different XML files. For now it is only used for the Weapon Overheating feature to adjust parameters based on gun class.
It uses the new struct gItemSettings which is populated in function void LoadItemSettings() on game start.

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@6463 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
silversurfer
2013-10-02 12:40:08 +00:00
parent bc7b3e2d62
commit cc51c13529
6 changed files with 95 additions and 1 deletions
+54 -1
View File
@@ -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
+14
View File
@@ -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();
+8
View File
@@ -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);
+2
View File
@@ -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 );
+15
View File
@@ -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);
+2
View File
@@ -134,6 +134,8 @@ BOOLEAN InitializeGame(void)
LoadCTHConstants();
//DBrot: load mod settings
LoadModSettings();
// silversurfer: load item settings modifiers
LoadItemSettings();
#ifdef JA2UB
LoadGameUBOptions(); // JA25 UB