mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
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:
+54
-1
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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 );
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -134,6 +134,8 @@ BOOLEAN InitializeGame(void)
|
||||
LoadCTHConstants();
|
||||
//DBrot: load mod settings
|
||||
LoadModSettings();
|
||||
// silversurfer: load item settings modifiers
|
||||
LoadItemSettings();
|
||||
|
||||
#ifdef JA2UB
|
||||
LoadGameUBOptions(); // JA25 UB
|
||||
|
||||
Reference in New Issue
Block a user