From b23be615b96c4c0d89bf7569ddd549abdf4d84f8 Mon Sep 17 00:00:00 2001 From: Flugente Date: Fri, 25 Oct 2013 19:23:55 +0000 Subject: [PATCH] - Tank have superior surrender strength, making it much harder to get the enemy to surrender when he has tanks Overheating: - OVERHEATING_DISPLAY_JAMPERCENTAGE controls wether the temperature bar shows temperature/jam threshold(true) or temperature/damage threshold (false) - OVERHEATING_TEMPERATURE_GLOBAL_MODIFIER is obsolete and this removed, as the same effect can be achieved by OVERHEATING_TEMPERATURE_PISTOL_gunclass git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@6531 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- GameSettings.cpp | 2 +- GameSettings.h | 2 +- Tactical/Interface Enhanced.cpp | 2 +- Tactical/Interface Items.cpp | 11 ++++++----- Tactical/Soldier Control.cpp | 4 ++++ Tactical/Weapons.cpp | 16 +++++++++++----- Tactical/Weapons.h | 5 +++-- 7 files changed, 27 insertions(+), 15 deletions(-) diff --git a/GameSettings.cpp b/GameSettings.cpp index dcf6726b0..55214e7cb 100644 --- a/GameSettings.cpp +++ b/GameSettings.cpp @@ -1487,9 +1487,9 @@ void LoadGameExternalOptions() // Flugente: These settings control the behavior of Weapon Overheating, its severity, and its display. gGameExternalOptions.fWeaponOverheating = iniReader.ReadBoolean("Tactical Weapon Overheating Settings","OVERHEATING",FALSE); gGameExternalOptions.fDisplayOverheatThermometer = iniReader.ReadBoolean("Tactical Weapon Overheating Settings","OVERHEATING_DISPLAY_THERMOMETER",TRUE); + gGameExternalOptions.fDisplayOverheatJamPercentage = iniReader.ReadBoolean("Tactical Weapon Overheating Settings","OVERHEATING_DISPLAY_JAMPERCENTAGE",TRUE); gGameExternalOptions.ubOverheatThermometerRedOffset = iniReader.ReadInteger("Tactical Weapon Overheating Settings","OVERHEATING_DISPLAY_THERMOMETER_RED_OFFSET", 100, 0, 255); gGameExternalOptions.iCooldownModificatorLonelyBarrel = iniReader.ReadFloat ("Tactical Weapon Overheating Settings","OVERHEATING_COOLDOWN_MODIFICATOR_LONELYBARREL", 1.15f, 1.0f, 10.0f); - gGameExternalOptions.iOverheatTemperatureGlobalModfier = iniReader.ReadFloat ("Tactical Weapon Overheating Settings","OVERHEATING_TEMPERATURE_GLOBAL_MODIFIER", 1.0f, 0.1f, 10.0f); #ifdef ENABLE_ZOMBIES //################# Tactical Zombie Settings ################## diff --git a/GameSettings.h b/GameSettings.h index 495688dda..eb5e553cb 100644 --- a/GameSettings.h +++ b/GameSettings.h @@ -1215,9 +1215,9 @@ typedef struct // Flugente: Weapon Overheating BOOLEAN fWeaponOverheating; // Should weapons overheat, thus increasing the chance of malfunction? BOOLEAN fDisplayOverheatThermometer; // Should a 'thermometer' for guns and replacable barrels be displayed? + BOOLEAN fDisplayOverheatJamPercentage; // Should we display temperature/jam threshold (true) or temperature/damage threshold (false)? UINT8 ubOverheatThermometerRedOffset; // amount of red colour while temperature is below threshold FLOAT iCooldownModificatorLonelyBarrel; // Cooldown modificator for barrels left alone in the landscape ;-) - FLOAT iOverheatTemperatureGlobalModfier; // a global modifier to the single shot temperature value, if one feels that all values should be lower/higher // Flugente: Weapon Mounting BOOLEAN fWeaponResting; // Should it be possible to rest your weapon on structures in crouched position? diff --git a/Tactical/Interface Enhanced.cpp b/Tactical/Interface Enhanced.cpp index a7aac6308..42a73c7f0 100644 --- a/Tactical/Interface Enhanced.cpp +++ b/Tactical/Interface Enhanced.cpp @@ -11577,7 +11577,7 @@ void DrawAdvancedValues( OBJECTTYPE *gpItemDescObject ) sTop = gItemDescAdvRegions[cnt-sFirstLine][1].sTop; sHeight = gItemDescAdvRegions[cnt-sFirstLine][1].sBottom - sTop; - iFloatModifier[0] = Weapon[ gpItemDescObject->usItem ].usOverheatingSingleShotTemperature * gGameExternalOptions.iOverheatTemperatureGlobalModfier; + iFloatModifier[0] = Weapon[ gpItemDescObject->usItem ].usOverheatingSingleShotTemperature; if ( Item[gpItemDescObject->usItem].usItemClass & IC_GUN ) iFloatModifier[0] *= gItemSettings.fOverheatTemperatureModifierGun[ Weapon[ gpItemDescObject->usItem ].ubWeaponType ]; else if ( Item[gpItemDescObject->usItem].usItemClass & IC_LAUNCHER ) diff --git a/Tactical/Interface Items.cpp b/Tactical/Interface Items.cpp index 65b9664b6..d4ab5b079 100644 --- a/Tactical/Interface Items.cpp +++ b/Tactical/Interface Items.cpp @@ -3918,7 +3918,7 @@ void INVRenderItem( UINT32 uiBuffer, SOLDIERTYPE * pSoldier, OBJECTTYPE *pObjec if ( pSoldier ) pObjShown = pSoldier->GetUsedWeapon(pObject); - FLOAT overheatjampercentage = GetGunOverheatJamPercentage( pObjShown ); + FLOAT overheatjampercentage = GetGunOverheatDisplayPercentage( pObjShown ); UINT32 red, green, blue; UINT8 TemperatureStringNum = GetTemperatureString( overheatjampercentage, &red, &green, &blue ); @@ -6750,7 +6750,8 @@ void RenderItemDescriptionBox( ) iter != (*gpItemDescObject)[gubItemDescStatusIndex]->attachments.end(); ++iter, ++cnt) { //Madd: again, only do this if the slot isn't hidden - if( iter->exists() && gItemDescAttachmentsXY[cnt].sHeight > 0 && gItemDescAttachmentsXY[cnt].sWidth > 0 ){ + if( iter->exists() && gItemDescAttachmentsXY[cnt].sHeight > 0 && gItemDescAttachmentsXY[cnt].sWidth > 0 ) + { sCenX = gsInvDescX + gItemDescAttachmentsXY[cnt].sX; sCenY = gsInvDescY + gItemDescAttachmentsXY[cnt].sY; INVRenderItem( guiSAVEBUFFER, NULL, gpItemDescObject, sCenX, sCenY, gItemDescAttachmentsXY[cnt].sWidth, gItemDescAttachmentsXY[cnt].sHeight, DIRTYLEVEL2, NULL, (UINT8)(RENDER_ITEM_ATTACHMENT1 + cnt), FALSE, 0, gubItemDescStatusIndex ); @@ -6759,9 +6760,9 @@ void RenderItemDescriptionBox( ) DrawItemUIBarEx( gpItemDescObject, (UINT8)(DRAW_ITEM_STATUS_ATTACHMENT1 + cnt), sCenX, sCenY, ITEM_BAR_WIDTH, ITEM_BAR_HEIGHT, Get16BPPColor( STATUS_BAR ), Get16BPPColor( STATUS_BAR_SHADOW ), TRUE , guiSAVEBUFFER, gubItemDescStatusIndex ); // Flugente: overheating - if ( gGameExternalOptions.fWeaponOverheating && ( Item[ (iter)->usItem ].usItemClass & (IC_GUN|IC_LAUNCHER) || Item[ (iter)->usItem ].barrel == TRUE) ) // Flugente FTW 1.1 + if ( gGameExternalOptions.fWeaponOverheating && ( Item[ (iter)->usItem ].usItemClass & (IC_GUN|IC_LAUNCHER) || Item[ (iter)->usItem ].barrel == TRUE) ) // Flugente { - FLOAT overheatjampercentage = GetGunOverheatJamPercentage( &(*iter)); + FLOAT overheatjampercentage = GetGunOverheatDisplayPercentage( &(*iter)); UINT32 red, green, blue; UINT8 TemperatureStringNum = GetTemperatureString( overheatjampercentage, &red, &green, &blue ); @@ -6940,7 +6941,7 @@ void RenderItemDescriptionBox( ) // Record length INT16 indent = StringPixLength( gTemperatureDesc[0], ITEMDESC_FONT ); - FLOAT overheatjampercentage = GetGunOverheatJamPercentage( gpItemDescObject); + FLOAT overheatjampercentage = GetGunOverheatDisplayPercentage( gpItemDescObject); UINT32 red, green, blue; UINT8 TemperatureStringNum = GetTemperatureString( overheatjampercentage, &red, &green, &blue ); diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index 5e96ecd4d..9c78f795e 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -15749,6 +15749,10 @@ UINT32 SOLDIERTYPE::GetSurrenderStrength() else if ( this->ubSoldierClass == SOLDIER_CLASS_ADMINISTRATOR || this->ubSoldierClass == SOLDIER_CLASS_GREEN_MILITIA ) value *= 0.75f; + // tanks won't surrender that easy + if ( TANK(this) ) + value *= 10; + return value; } diff --git a/Tactical/Weapons.cpp b/Tactical/Weapons.cpp index 0b4cd4862..1e426f8d0 100644 --- a/Tactical/Weapons.cpp +++ b/Tactical/Weapons.cpp @@ -1452,7 +1452,7 @@ BOOLEAN OKFireWeapon( SOLDIERTYPE *pSoldier ) } -// Flugente FTW 1: Get percentage: temperature/damagethreshold +// Flugente: Get percentage: temperature/damagethreshold FLOAT GetGunOverheatDamagePercentage( FLOAT usTemperature, UINT16 usIndx ) { FLOAT damagethreshold = Weapon[Item[ usIndx ].ubClassIndex].usOverheatingDamageThreshold; @@ -1465,7 +1465,7 @@ FLOAT GetGunOverheatDamagePercentage( FLOAT usTemperature, UINT16 usIndx ) return usTemperature/ damagethreshold ; } -// Flugente FTW 1: Get percentage: temperature/jamthreshold +// Flugente: Get percentage: temperature/jamthreshold FLOAT GetGunOverheatJamPercentage( FLOAT usTemperature, UINT16 usIndx ) { FLOAT jamthreshold = Weapon[Item[ usIndx ].ubClassIndex].usOverheatingJamThreshold; @@ -12159,9 +12159,6 @@ FLOAT GetSingleShotTemperature( OBJECTTYPE *pObj ) modificator += AmmoTypes[(*pObj)[0]->data.gun.ubGunAmmoType].temperatureModificator; singleshottemperature *= modificator; - - // multiply again for global modifer - singleshottemperature *= gGameExternalOptions.iOverheatTemperatureGlobalModfier; } return singleshottemperature; @@ -12193,6 +12190,15 @@ FLOAT GetGunOverheatJamPercentage( OBJECTTYPE * pObj ) return temperature/ jamthreshold ; } +// Flugente: Get displyed overheat percentage - either GetGunOverheatDamagePercentage or GetGunOverheatJamPercentage +FLOAT GetGunOverheatDisplayPercentage( OBJECTTYPE * pObj ) +{ + if ( !gGameExternalOptions.fDisplayOverheatJamPercentage ) + return GetGunOverheatDamagePercentage(pObj); + + return GetGunOverheatJamPercentage(pObj); +} + FLOAT GetOverheatJamThresholdModifier( OBJECTTYPE *pObj ) { // determine modificator according to attachments diff --git a/Tactical/Weapons.h b/Tactical/Weapons.h index 0bbc5d2cc..a57dd0346 100644 --- a/Tactical/Weapons.h +++ b/Tactical/Weapons.h @@ -486,8 +486,8 @@ extern void GetTargetWorldPositions( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo, extern BOOLEAN OKFireWeapon( SOLDIERTYPE *pSoldier ); extern BOOLEAN CheckForGunJam( SOLDIERTYPE * pSoldier ); -extern FLOAT GetGunOverheatDamagePercentage( FLOAT usTemperature, UINT16 usIndx ); // Flugente FTW 1: Get percentage: temperature/damagethreshold -extern FLOAT GetGunOverheatJamPercentage( FLOAT usTemperature, UINT16 usIndx ); // Flugente FTW 1: Get percentage: temperature/jamthreshold +extern FLOAT GetGunOverheatDamagePercentage( FLOAT usTemperature, UINT16 usIndx ); // Flugente: Get percentage: temperature/damagethreshold +extern FLOAT GetGunOverheatJamPercentage( FLOAT usTemperature, UINT16 usIndx ); // Flugente: Get percentage: temperature/jamthreshold extern INT32 CalcMaxTossRange( SOLDIERTYPE * pSoldier, UINT16 usItem, BOOLEAN fArmed ); extern UINT32 CalcThrownChanceToHit(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime, UINT8 ubAimPos ); @@ -533,6 +533,7 @@ FLOAT GetTemperatureModifier( OBJECTTYPE *pObj ); FLOAT GetSingleShotTemperature( OBJECTTYPE *pObj ); FLOAT GetGunOverheatDamagePercentage( OBJECTTYPE * pObj ); // Flugente: Get percentage: temperature/damagethreshold FLOAT GetGunOverheatJamPercentage( OBJECTTYPE * pObj ); // Flugente: Get percentage: temperature/jamthreshold +FLOAT GetGunOverheatDisplayPercentage( OBJECTTYPE * pObj ); // Flugente: Get displyed overheat percentage - either GetGunOverheatDamagePercentage or GetGunOverheatJamPercentage FLOAT GetOverheatJamThresholdModifier( OBJECTTYPE *pObj ); FLOAT GetOverheatJamThreshold( OBJECTTYPE *pObj ); FLOAT GetOverheatDamageThresholdModifier( OBJECTTYPE *pObj );