Fix: scope modes take Aimlevel modifiers on scopes/sights into account

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@6095 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
Flugente
2013-05-24 15:52:05 +00:00
parent 45659c18a3
commit 10a0c07822
3 changed files with 43 additions and 18 deletions
+10 -10
View File
@@ -2691,9 +2691,9 @@ void InternalInitEDBTooltipRegion( OBJECTTYPE * gpItemDescObject, UINT32 guiCurr
}
///////////////////// AIMING LEVELS MODIFIER
if (GetAimLevelsModifier( gpItemDescObject, ANIM_STAND ) != 0
|| GetAimLevelsModifier( gpItemDescObject, ANIM_CROUCH ) != 0
|| GetAimLevelsModifier( gpItemDescObject, ANIM_PRONE ) != 0 )
if (GetAimLevelsModifier( gpItemDescSoldier, gpItemDescObject, ANIM_STAND ) != 0
|| GetAimLevelsModifier( gpItemDescSoldier, gpItemDescObject, ANIM_CROUCH ) != 0
|| GetAimLevelsModifier( gpItemDescSoldier, gpItemDescObject, ANIM_PRONE ) != 0 )
{
if (cnt >= sFirstLine && cnt < sLastLine)
{
@@ -4625,9 +4625,9 @@ void DrawAdvancedStats( OBJECTTYPE * gpItemDescObject )
}
///////////////////// AIMING LEVELS MODIFIER
if (GetAimLevelsModifier( gpItemDescObject, ANIM_STAND ) != 0
|| GetAimLevelsModifier( gpItemDescObject, ANIM_CROUCH ) != 0
|| GetAimLevelsModifier( gpItemDescObject, ANIM_PRONE ) != 0 )
if (GetAimLevelsModifier( gpItemDescSoldier, gpItemDescObject, ANIM_STAND ) != 0
|| GetAimLevelsModifier( gpItemDescSoldier, gpItemDescObject, ANIM_CROUCH ) != 0
|| GetAimLevelsModifier( gpItemDescSoldier, gpItemDescObject, ANIM_PRONE ) != 0 )
{
if (cnt >= sFirstLine && cnt < sLastLine)
{
@@ -5907,7 +5907,7 @@ void DrawWeaponValues( OBJECTTYPE * gpItemDescObject )
UINT16 iFinalAimLevelsValue = GetAllowedAimingLevelsForItem( gpItemDescSoldier, gpItemDescObject, ANIM_STAND );
// Get modifier
INT16 iAimLevelsModifier = GetAimLevelsModifier( gpItemDescObject, ANIM_STAND );
INT16 iAimLevelsModifier = GetAimLevelsModifier( gpItemDescSoldier, gpItemDescObject, ANIM_STAND );
iAimLevelsModifier += GetAimLevelsTraitModifier( gpItemDescSoldier, gpItemDescObject );
// Get Base Value
@@ -8820,9 +8820,9 @@ void DrawAdvancedValues( OBJECTTYPE *gpItemDescObject )
}
///////////////////// AIMING LEVELS MODIFIER
iModifier[0] = GetAimLevelsModifier( gpItemDescObject, ANIM_STAND );
iModifier[1] = GetAimLevelsModifier( gpItemDescObject, ANIM_CROUCH );
iModifier[2] = GetAimLevelsModifier( gpItemDescObject, ANIM_PRONE );
iModifier[0] = GetAimLevelsModifier( gpItemDescSoldier, gpItemDescObject, ANIM_STAND );
iModifier[1] = GetAimLevelsModifier( gpItemDescSoldier, gpItemDescObject, ANIM_CROUCH );
iModifier[2] = GetAimLevelsModifier( gpItemDescSoldier, gpItemDescObject, ANIM_PRONE );
if (iModifier[0] != 0 || iModifier[1] != 0 || iModifier[2] != 0 )
{
if (cnt >= sFirstLine && cnt < sLastLine)
+32 -7
View File
@@ -10213,7 +10213,7 @@ INT32 GetTargetTrackingModifier( OBJECTTYPE *pObj, UINT8 ubStance )
return (iModifier);
}
INT32 GetAimLevelsModifier( OBJECTTYPE *pObj, UINT8 ubStance )
INT32 GetAimLevelsModifier( SOLDIERTYPE* pSoldier, OBJECTTYPE *pObj, UINT8 ubStance )
{
INT32 iModifier=0;
@@ -10222,11 +10222,36 @@ INT32 GetAimLevelsModifier( OBJECTTYPE *pObj, UINT8 ubStance )
if (pObj->exists() == true && UsingNewCTHSystem() == true)
{
iModifier += Item[pObj->usItem].aimlevelsmodifier[ubRef];
for (attachmentList::iterator iter = (*pObj)[0]->attachments.begin(); iter != (*pObj)[0]->attachments.end(); ++iter)
if ( gGameExternalOptions.fScopeModes && pSoldier )
{
if (iter->exists())
for (attachmentList::iterator iter = (*pObj)[0]->attachments.begin(); iter != (*pObj)[0]->attachments.end(); ++iter)
{
iModifier += Item[iter->usItem].aimlevelsmodifier[ubRef];
if( iter->exists() && !IsAttachmentClass(iter->usItem, AC_SCOPE|AC_SIGHT|AC_IRONSIGHT ) )
{
iModifier += Item[iter->usItem].aimlevelsmodifier[ubRef];
}
}
// Flugente: check for scope mode
if ( Item[pObj->usItem].usItemClass == IC_GUN )
{
std::map<INT8, OBJECTTYPE*> ObjList;
GetScopeLists(pObj, ObjList);
// only use scope mode if gun is in hand, otherwise an error might occur!
if ( (&pSoldier->inv[HANDPOS]) == pObj && ObjList[pSoldier->bScopeMode] != NULL && pSoldier->bScopeMode != USE_ALT_WEAPON_HOLD )
iModifier += Item[ObjList[pSoldier->bScopeMode]->usItem].aimlevelsmodifier[ubRef];
}
}
else
{
for (attachmentList::iterator iter = (*pObj)[0]->attachments.begin(); iter != (*pObj)[0]->attachments.end(); ++iter)
{
if (iter->exists())
{
iModifier += Item[iter->usItem].aimlevelsmodifier[ubRef];
}
}
}
}
@@ -12871,8 +12896,8 @@ UINT8 AllowedAimingLevelsNCTH( SOLDIERTYPE *pSoldier, INT32 sGridNo )
if ( gGameExternalOptions.fWeaponResting && pSoldier->IsWeaponMounted() )
stance = ANIM_PRONE;
INT32 moda = GetAimLevelsModifier( &pSoldier->inv[pSoldier->ubAttackingHand], stance );
INT32 modb = GetAimLevelsModifier( &pSoldier->inv[pSoldier->ubAttackingHand], gAnimControl[ pSoldier->usAnimState ].ubEndHeight );
INT32 moda = GetAimLevelsModifier( pSoldier, &pSoldier->inv[pSoldier->ubAttackingHand], stance );
INT32 modb = GetAimLevelsModifier( pSoldier, &pSoldier->inv[pSoldier->ubAttackingHand], gAnimControl[ pSoldier->usAnimState ].ubEndHeight );
aimLevels += (INT32) ((gGameExternalOptions.ubProneModifierPercentage * moda + (100 - gGameExternalOptions.ubProneModifierPercentage) * modb)/100);
}
@@ -13230,7 +13255,7 @@ UINT8 GetAllowedAimingLevelsForItem( SOLDIERTYPE *pSoldier, OBJECTTYPE *pObj, UI
}
// HEADROCK HAM 4: This modifier from the weapon and its attachments replaces the generic bipod bonus.
aimLevels += GetAimLevelsModifier( pObj, ubStance );
aimLevels += GetAimLevelsModifier( pSoldier, pObj, ubStance );
aimLevels += GetAimLevelsTraitModifier( pSoldier, pObj );
+1 -1
View File
@@ -283,7 +283,7 @@ INT32 GetCounterForceMaxModifier( OBJECTTYPE *pObj, UINT8 ubStance );
INT32 GetCounterForceAccuracyModifier( OBJECTTYPE *pObj, UINT8 ubStance );
INT32 GetCounterForceFrequencyModifier( OBJECTTYPE *pObj, UINT8 ubStance );
INT32 GetTargetTrackingModifier( OBJECTTYPE *pObj, UINT8 ubStance );
INT32 GetAimLevelsModifier( OBJECTTYPE *pObj, UINT8 ubStance );
INT32 GetAimLevelsModifier( SOLDIERTYPE* pSoldier, OBJECTTYPE *pObj, UINT8 ubStance ); // Flugente: added SOLDIERTYPE* argument
INT32 GetAimLevelsTraitModifier( SOLDIERTYPE *pSoldier, OBJECTTYPE *pObj );
// Returns the character's stance as 0/1/2.