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" #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. //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\\" #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 CTH_CONSTANTS gGameCTHConstants; // HEADROCK HAM 4: CTH constants
MOD_SETTINGS gModSettings; //DBrot: mod specific settings MOD_SETTINGS gModSettings; //DBrot: mod specific settings
ITEM_SETTINGS gItemSettings; // silversurfer: item property modifiers
extern SGPFILENAME gCheckFilenames[]; extern SGPFILENAME gCheckFilenames[];
extern CHAR8 gzErrorMsg[256]; extern CHAR8 gzErrorMsg[256];
@@ -2395,6 +2399,55 @@ void LoadModSettings(){
gModSettings.ubHospitalSectorY = iniReader.ReadInteger("Cambria", "HOSPITAL_SECTOR_Y", 6); gModSettings.ubHospitalSectorY = iniReader.ReadInteger("Cambria", "HOSPITAL_SECTOR_Y", 6);
gModSettings.ubHospitalSectorZ = iniReader.ReadInteger("Cambria", "HOSPITAL_SECTOR_Z", 0); 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) 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 //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; }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 MOD_SETTINGS gModSettings;
extern ITEM_SETTINGS gItemSettings;
//This structure will contain general Ja2 settings NOT individual game settings. //This structure will contain general Ja2 settings NOT individual game settings.
extern GAME_SETTINGS gGameSettings; extern GAME_SETTINGS gGameSettings;
@@ -1764,6 +1777,7 @@ BOOLEAN LoadGameSettings();
void LoadGameExternalOptions(); void LoadGameExternalOptions();
void LoadSkillTraitsExternalSettings(); // SANDRO - added this one void LoadSkillTraitsExternalSettings(); // SANDRO - added this one
void LoadModSettings(); void LoadModSettings();
void LoadItemSettings(); // silversurfer: reads item property modifiers
void LoadGameAPBPConstants(); void LoadGameAPBPConstants();
// HEADROCK HAM 4: Read CTH/Shooting coefficients from file // HEADROCK HAM 4: Read CTH/Shooting coefficients from file
void LoadCTHConstants(); void LoadCTHConstants();
+8
View File
@@ -11557,6 +11557,8 @@ void DrawAdvancedValues( OBJECTTYPE *gpItemDescObject )
sHeight = gItemDescAdvRegions[cnt-sFirstLine][1].sBottom - sTop; sHeight = gItemDescAdvRegions[cnt-sFirstLine][1].sBottom - sTop;
iFloatModifier[0] = Weapon[ gpItemDescObject->usItem ].usOverheatingSingleShotTemperature * gGameExternalOptions.iOverheatTemperatureGlobalModfier; 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[1] = GetSingleShotTemperature( gpItemDescObject ) - iFloatModifier[0];
iFloatModifier[2] = GetSingleShotTemperature( gpItemDescObject ); iFloatModifier[2] = GetSingleShotTemperature( gpItemDescObject );
@@ -11611,6 +11613,8 @@ void DrawAdvancedValues( OBJECTTYPE *gpItemDescObject )
sHeight = gItemDescAdvRegions[cnt-sFirstLine][1].sBottom - sTop; sHeight = gItemDescAdvRegions[cnt-sFirstLine][1].sBottom - sTop;
iFloatModifier[0] = Item[gpItemDescObject->usItem].usOverheatingCooldownFactor; 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[1] = GetItemCooldownFactor(gpItemDescObject) - iFloatModifier[0];
iFloatModifier[2] = GetItemCooldownFactor(gpItemDescObject); iFloatModifier[2] = GetItemCooldownFactor(gpItemDescObject);
@@ -11664,6 +11668,8 @@ void DrawAdvancedValues( OBJECTTYPE *gpItemDescObject )
sHeight = gItemDescAdvRegions[cnt-sFirstLine][1].sBottom - sTop; sHeight = gItemDescAdvRegions[cnt-sFirstLine][1].sBottom - sTop;
iFloatModifier[0] = Weapon[ gpItemDescObject->usItem ].usOverheatingJamThreshold; 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[1] = GetOverheatJamThreshold(gpItemDescObject) - iFloatModifier[0];
iFloatModifier[2] = GetOverheatJamThreshold(gpItemDescObject); iFloatModifier[2] = GetOverheatJamThreshold(gpItemDescObject);
@@ -11717,6 +11723,8 @@ void DrawAdvancedValues( OBJECTTYPE *gpItemDescObject )
sHeight = gItemDescAdvRegions[cnt-sFirstLine][1].sBottom - sTop; sHeight = gItemDescAdvRegions[cnt-sFirstLine][1].sBottom - sTop;
iFloatModifier[0] = Weapon[ gpItemDescObject->usItem ].usOverheatingDamageThreshold; 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[1] = GetOverheatDamageThreshold(gpItemDescObject) - iFloatModifier[0];
iFloatModifier[2] = GetOverheatDamageThreshold(gpItemDescObject); iFloatModifier[2] = GetOverheatDamageThreshold(gpItemDescObject);
+2
View File
@@ -14097,6 +14097,8 @@ FLOAT GetItemCooldownModificator( OBJECTTYPE * pObj )
FLOAT GetItemCooldownFactor( OBJECTTYPE * pObj ) FLOAT GetItemCooldownFactor( OBJECTTYPE * pObj )
{ {
FLOAT cooldownfactor = Item[pObj->usItem].usOverheatingCooldownFactor; // ... get item-specific cooldown factor ... 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 ); 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; FLOAT damagethreshold = Weapon[Item[ usIndx ].ubClassIndex].usOverheatingDamageThreshold;
if ( Item[usIndx].usItemClass & IC_GUN )
damagethreshold *= gItemSettings.fOverheatDamageThresholdModifier[Weapon[Item[ usIndx ].uiIndex].ubWeaponType];
return usTemperature/ damagethreshold ; return usTemperature/ damagethreshold ;
} }
@@ -1465,6 +1468,9 @@ FLOAT GetGunOverheatJamPercentage( FLOAT usTemperature, UINT16 usIndx )
{ {
FLOAT jamthreshold = Weapon[Item[ usIndx ].ubClassIndex].usOverheatingJamThreshold; FLOAT jamthreshold = Weapon[Item[ usIndx ].ubClassIndex].usOverheatingJamThreshold;
if ( Item[usIndx].usItemClass & IC_GUN )
jamthreshold *= gItemSettings.fOverheatJamThresholdModifier[Weapon[Item[ usIndx ].uiIndex].ubWeaponType];
return usTemperature/ jamthreshold ; return usTemperature/ jamthreshold ;
} }
@@ -12071,6 +12077,9 @@ FLOAT GetSingleShotTemperature( OBJECTTYPE *pObj )
{ {
singleshottemperature = Weapon[ pObj->usItem ].usOverheatingSingleShotTemperature; singleshottemperature = Weapon[ pObj->usItem ].usOverheatingSingleShotTemperature;
if ( Item[pObj->usItem].usItemClass & IC_GUN )
singleshottemperature *= gItemSettings.fOverheatTemperatureModifier[ Weapon[ pObj->usItem ].ubWeaponType ];
// determine modificator according to attachments // determine modificator according to attachments
FLOAT modificator = 1.0f + GetTemperatureModifier(pObj); FLOAT modificator = 1.0f + GetTemperatureModifier(pObj);
@@ -12137,6 +12146,9 @@ FLOAT GetOverheatJamThreshold( OBJECTTYPE *pObj )
{ {
jamthreshold = Weapon[ pObj->usItem ].usOverheatingJamThreshold; jamthreshold = Weapon[ pObj->usItem ].usOverheatingJamThreshold;
if ( Item[pObj->usItem].usItemClass & IC_GUN )
jamthreshold *= gItemSettings.fOverheatJamThresholdModifier[ Weapon[ pObj->usItem ].ubWeaponType ];
// determine modificator according to attachments // determine modificator according to attachments
FLOAT modificator = 1.0f + GetOverheatJamThresholdModifier(pObj); FLOAT modificator = 1.0f + GetOverheatJamThresholdModifier(pObj);
@@ -12171,6 +12183,9 @@ FLOAT GetOverheatDamageThreshold( OBJECTTYPE *pObj )
{ {
damagethreshold = Weapon[ pObj->usItem ].usOverheatingDamageThreshold; damagethreshold = Weapon[ pObj->usItem ].usOverheatingDamageThreshold;
if ( Item[pObj->usItem].usItemClass & IC_GUN )
damagethreshold *= gItemSettings.fOverheatDamageThresholdModifier[ Weapon[ pObj->usItem ].ubWeaponType ];
// determine modificator according to attachments // determine modificator according to attachments
FLOAT modificator = 1.0f + GetOverheatDamageThresholdModifier(pObj); FLOAT modificator = 1.0f + GetOverheatDamageThresholdModifier(pObj);
+2
View File
@@ -134,6 +134,8 @@ BOOLEAN InitializeGame(void)
LoadCTHConstants(); LoadCTHConstants();
//DBrot: load mod settings //DBrot: load mod settings
LoadModSettings(); LoadModSettings();
// silversurfer: load item settings modifiers
LoadItemSettings();
#ifdef JA2UB #ifdef JA2UB
LoadGameUBOptions(); // JA25 UB LoadGameUBOptions(); // JA25 UB