From 587b7e28749e664e435029ae9191202ea229ce42 Mon Sep 17 00:00:00 2001 From: Flugente Date: Mon, 28 Jun 2021 14:39:45 +0000 Subject: [PATCH] Fix: reverted revert of 9115 and fixed the issue of guns always deteriorating in NCTH git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@9119 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- Tactical/Weapons.cpp | 48 ++++++++++++++++++++++++++------------------ 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/Tactical/Weapons.cpp b/Tactical/Weapons.cpp index 82edd885..e5b91fde 100644 --- a/Tactical/Weapons.cpp +++ b/Tactical/Weapons.cpp @@ -2536,17 +2536,20 @@ BOOLEAN UseGunNCTH( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo ) { INT16 ammoReliability = Item[(*pObjAttHand)[0]->data.gun.usGunAmmoItem].bReliability; // HEADROCK HAM 5: Variable base chance - if ( UsingNewCTHSystem() == true) - { + INT32 depreciatetest = 0; + if ( UsingNewCTHSystem() == true ) + { UINT16 usBaseChance = gGameCTHConstants.BASIC_RELIABILITY_ODDS; - FLOAT dReliabilityRatio = 3.0f * ((FLOAT)usBaseChance / (FLOAT)gItemSettings.usBasicDeprecateChance); // Compare original odds to new odds. - uiDepreciateTest = usBaseChance + (INT16)( dReliabilityRatio * (Item[ iter->usItem ].bReliability + ammoReliability) ); - uiDepreciateTest = max(0, uiDepreciateTest); + FLOAT dReliabilityRatio = 3.0f * ( (FLOAT)usBaseChance / (FLOAT)gItemSettings.usBasicDeprecateChance ); // Compare original odds to new odds. + depreciatetest = usBaseChance + (INT16)( dReliabilityRatio * ( Item[iter->usItem].bReliability + ammoReliability ) ); } else { - uiDepreciateTest = max( 0, gItemSettings.usBasicDeprecateChance + 3 * (Item[iter->usItem].bReliability + ammoReliability) ); + depreciatetest = gItemSettings.usBasicDeprecateChance + 3 * ( Item[iter->usItem].bReliability + ammoReliability ); } + + uiDepreciateTest = min( 100, max( 0, depreciatetest ) ); + if ( !PreRandom( uiDepreciateTest ) && ( (*pObjAttHand)[0]->data.objectStatus > 1) ) { (*pA)[0]->data.objectStatus--; @@ -3039,18 +3042,20 @@ BOOLEAN UseGunNCTH( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo ) // Flugente: Added a malus to reliability for overheated guns // HEADROCK HAM 5: Variable NCTH base change - if ( UsingNewCTHSystem() == true) + INT32 depreciatetest = 0; + if ( UsingNewCTHSystem() == true ) { UINT16 usBaseChance = gGameCTHConstants.BASIC_RELIABILITY_ODDS; - FLOAT dReliabilityRatio = 3.0f * ((FLOAT)usBaseChance / (FLOAT)gItemSettings.usBasicDeprecateChance); // Compare original odds to new odds. - uiDepreciateTest = (UINT32)((usBaseChance + (INT16)( dReliabilityRatio * GetReliability( &(pSoldier->inv[pSoldier->ubAttackingHand]) ) - iOverheatReliabilityMalus)) / dirtincreasefactor); - uiDepreciateTest = max(0, uiDepreciateTest); + FLOAT dReliabilityRatio = 3.0f * ( (FLOAT)usBaseChance / (FLOAT)gItemSettings.usBasicDeprecateChance ); // Compare original odds to new odds. + depreciatetest = ( usBaseChance + (INT16)( dReliabilityRatio * GetReliability( &( pSoldier->inv[pSoldier->ubAttackingHand] ) ) - iOverheatReliabilityMalus ) ) / dirtincreasefactor; } else { - uiDepreciateTest = max( (UINT32)((gItemSettings.usBasicDeprecateChance + 3 * GetReliability( pObjAttHand ) - iOverheatReliabilityMalus) / dirtincreasefactor), 0 ); + depreciatetest = ( gItemSettings.usBasicDeprecateChance + 3 * GetReliability( pObjAttHand ) - iOverheatReliabilityMalus ) / dirtincreasefactor; } + uiDepreciateTest = min( 100, max( 0, depreciatetest ) ); + if ( !PreRandom( uiDepreciateTest ) && ( (*pObjAttHand)[0]->data.objectStatus > 1) ) { (*pObjAttHand)[0]->data.objectStatus--; @@ -3266,17 +3271,20 @@ BOOLEAN UseGun( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo ) { INT16 ammoReliability = Item[(*pObjUsed)[0]->data.gun.usGunAmmoItem].bReliability; // HEADROCK HAM 5: Variable base chance + INT32 depreciatetest = 0; if ( UsingNewCTHSystem() == true ) { UINT16 usBaseChance = gGameCTHConstants.BASIC_RELIABILITY_ODDS; - FLOAT dReliabilityRatio = 3.0f * ((FLOAT)usBaseChance / (FLOAT)gItemSettings.usBasicDeprecateChance); // Compare original odds to new odds. - uiDepreciateTest = usBaseChance + (INT16)( dReliabilityRatio * (Item[ iter->usItem ].bReliability + ammoReliability) ); - uiDepreciateTest = __max(0, uiDepreciateTest); + FLOAT dReliabilityRatio = 3.0f * ( (FLOAT)usBaseChance / (FLOAT)gItemSettings.usBasicDeprecateChance ); // Compare original odds to new odds. + depreciatetest = usBaseChance + (INT16)( dReliabilityRatio * ( Item[iter->usItem].bReliability + ammoReliability ) ); } else { - uiDepreciateTest = __max( 0, gItemSettings.usBasicDeprecateChance + 3 * (Item[iter->usItem].bReliability + ammoReliability) ); + depreciatetest = gItemSettings.usBasicDeprecateChance + 3 * ( Item[iter->usItem].bReliability + ammoReliability ); } + + uiDepreciateTest = min( 100, max( 0, depreciatetest ) ); + if ( !PreRandom( uiDepreciateTest ) && ( (*pObjUsed)[0]->data.objectStatus > 1) ) { (*pA)[0]->data.objectStatus--; @@ -3803,18 +3811,20 @@ BOOLEAN UseGun( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo ) } // Flugente: Added a malus to reliability for overheated guns + INT32 depreciatetest = 0; if ( UsingNewCTHSystem() == true ) { UINT16 usBaseChance = gGameCTHConstants.BASIC_RELIABILITY_ODDS; - FLOAT dReliabilityRatio = 3.0f * ((FLOAT)usBaseChance / (FLOAT)gItemSettings.usBasicDeprecateChance); // Compare original odds to new odds. - uiDepreciateTest = (UINT32)(usBaseChance + (INT16)( dReliabilityRatio * GetReliability( &(pSoldier->inv[ pSoldier->ubAttackingHand ])) - iOverheatReliabilityMalus) / dirtincreasefactor); - uiDepreciateTest = max(0, uiDepreciateTest); + FLOAT dReliabilityRatio = 3.0f * ( (FLOAT)usBaseChance / (FLOAT)gItemSettings.usBasicDeprecateChance ); // Compare original odds to new odds. + depreciatetest = usBaseChance + (INT16)( dReliabilityRatio * GetReliability( &( pSoldier->inv[pSoldier->ubAttackingHand] ) ) - iOverheatReliabilityMalus ) / dirtincreasefactor; } else { - uiDepreciateTest = max( (UINT32)((gItemSettings.usBasicDeprecateChance + 3 * (GetReliability( pObjUsed )) - iOverheatReliabilityMalus) / dirtincreasefactor), 0 ); + depreciatetest = ( gItemSettings.usBasicDeprecateChance + 3 * ( GetReliability( pObjUsed ) ) - iOverheatReliabilityMalus ) / dirtincreasefactor; } + uiDepreciateTest = min( 100, max( 0, depreciatetest ) ); + if ( !PreRandom( uiDepreciateTest ) && ( (*pObjUsed)[0]->data.objectStatus > 1) ) { (*pObjUsed)[0]->data.objectStatus--;