From 7f8fc44a7d15beac17f44d5b71b5c4e743e6cc7b Mon Sep 17 00:00:00 2001 From: Sevenfm Date: Thu, 30 Apr 2020 00:48:52 +0000 Subject: [PATCH] Improved code to update scope mode when changing stance. ChangeScopeMode: use NOWHERE instead of 0 as incorrect target gridno. git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@8796 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- Tactical/Handle UI.cpp | 18 +++++++++++++++--- Tactical/Interface Items.cpp | 2 +- Tactical/Turn Based Input.cpp | 2 +- Tactical/Weapons.cpp | 2 +- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/Tactical/Handle UI.cpp b/Tactical/Handle UI.cpp index 581d8fca..5e2a0cf8 100644 --- a/Tactical/Handle UI.cpp +++ b/Tactical/Handle UI.cpp @@ -3828,14 +3828,21 @@ void UIHandleSoldierStanceChange( UINT8 ubSoldierID, INT8 bNewStance ) pSoldier->bGoodContPath = FALSE; //dnl ch71 180913 when we go to crouch or prone for now there is no alternative fire mode option - if(pSoldier->bScopeMode == USE_ALT_WEAPON_HOLD && bNewStance != ANIM_STAND) + if (pSoldier->bScopeMode == USE_ALT_WEAPON_HOLD && bNewStance != ANIM_STAND || + gGameExternalOptions.ubAllowAlternativeWeaponHolding && + pSoldier->inv[HANDPOS].exists() && + Weapon[pSoldier->inv[HANDPOS].usItem].HeavyGun && + Item[pSoldier->inv[HANDPOS].usItem].twohanded && + bNewStance == ANIM_STAND) { - ChangeScopeMode(pSoldier, 0); + ChangeScopeMode(pSoldier, NOWHERE); ManLooksForOtherTeams(pSoldier); } } else + { return; + } } // If realtime- change walking animation! @@ -3872,7 +3879,12 @@ void UIHandleSoldierStanceChange( UINT8 ubSoldierID, INT8 bNewStance ) } // sevenfm: switch from alt weapon holding when changing stance in realtime - if (pSoldier->bScopeMode == USE_ALT_WEAPON_HOLD && bNewStance != ANIM_STAND) + if (pSoldier->bScopeMode == USE_ALT_WEAPON_HOLD && bNewStance != ANIM_STAND || + gGameExternalOptions.ubAllowAlternativeWeaponHolding && + pSoldier->inv[HANDPOS].exists() && + Weapon[pSoldier->inv[HANDPOS].usItem].HeavyGun && + Item[pSoldier->inv[HANDPOS].usItem].twohanded && + bNewStance == ANIM_STAND) { ChangeScopeMode(pSoldier, NOWHERE); ManLooksForOtherTeams(pSoldier); diff --git a/Tactical/Interface Items.cpp b/Tactical/Interface Items.cpp index d6cbff68..3b2ac9fb 100644 --- a/Tactical/Interface Items.cpp +++ b/Tactical/Interface Items.cpp @@ -6519,7 +6519,7 @@ void ItemDescAttachmentsCallback( MOUSE_REGION * pRegion, INT32 iReason ) // Flugente: if we altered a gun's attachments, re-evaluate the scope mode and sight if ( gGameExternalOptions.fScopeModes && gpItemPointerSoldier && Item[gpItemDescObject->usItem].usItemClass == IC_GUN ) { - ChangeScopeMode( gpItemPointerSoldier, 0 ); + ChangeScopeMode(gpItemPointerSoldier, NOWHERE); // reevaluate sight ManLooksForOtherTeams( gpItemPointerSoldier ); diff --git a/Tactical/Turn Based Input.cpp b/Tactical/Turn Based Input.cpp index c4cf3028..b5f8ec8a 100644 --- a/Tactical/Turn Based Input.cpp +++ b/Tactical/Turn Based Input.cpp @@ -5160,7 +5160,7 @@ void SetScopeMode( INT32 usMapPos ) if ( GetMouseMapPos( &usMapPos )) ChangeScopeMode( MercPtrs[ gusSelectedSoldier ], usMapPos ); else - ChangeScopeMode( MercPtrs[ gusSelectedSoldier ], 0 ); + ChangeScopeMode( MercPtrs[ gusSelectedSoldier ], NOWHERE ); // reevaluate sight ManLooksForOtherTeams( MercPtrs[ gusSelectedSoldier ] ); diff --git a/Tactical/Weapons.cpp b/Tactical/Weapons.cpp index 4bdc75c2..27a4caf2 100644 --- a/Tactical/Weapons.cpp +++ b/Tactical/Weapons.cpp @@ -10269,7 +10269,7 @@ void ChangeScopeMode( SOLDIERTYPE * pSoldier, INT32 iTrgGridNo ) // changing scope mode can change number of aiming levels, we should reset the aiming variable here // for the luxury of the payer, I've made it so if he had aiming set to a higher value, we give him the maximum value for the new scope mode, // assuming he wants to go for the most accurate shot - if ( iTrgGridNo != 0 ) + if ( iTrgGridNo != NOWHERE ) { if ( bOldAimTime > AllowedAimingLevels(pSoldier, iTrgGridNo) ) {