From 1e94aea625e28798dba2001eefbfce29b584e393 Mon Sep 17 00:00:00 2001 From: Sevenfm Date: Tue, 1 Mar 2022 18:20:46 +0000 Subject: [PATCH] Don't apply mortar/GL default penalty for enemy/militia is they cannot have trait skills, improved code to support old skill system. git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@9313 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- Tactical/Weapons.cpp | 57 +++++++++++++++++++++++++------------------- 1 file changed, 32 insertions(+), 25 deletions(-) diff --git a/Tactical/Weapons.cpp b/Tactical/Weapons.cpp index cee13707..5b4112c8 100644 --- a/Tactical/Weapons.cpp +++ b/Tactical/Weapons.cpp @@ -10133,38 +10133,45 @@ UINT32 CalcThrownChanceToHit(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTi iChance = ( EffectiveDexterity( pSoldier, FALSE ) + EffectiveMarksmanship( pSoldier ) + EffectiveWisdom( pSoldier ) + (pSoldier->stats.bExpLevel * 10) ) / 4; //////////////////////////////////////////////////////////////////////////////////////////////// - // SANDRO - old/new traits - if (gGameOptions.fNewTraitSystem && (pSoldier->bTeam == OUR_TEAM || (pSoldier->bTeam == ENEMY_TEAM && gGameExternalOptions.fAssignTraitsToEnemy) || (pSoldier->bTeam == MILITIA_TEAM && gGameExternalOptions.fAssignTraitsToMilitia))) + // sevenfm: apply penalty to enemy/militia only if traits can be assigned to compensate + // otherwise AI will not be able to shoot because of extremely low CTH + if (pSoldier->bTeam == OUR_TEAM || + pSoldier->bTeam == ENEMY_TEAM && gGameExternalOptions.fAssignTraitsToEnemy || + pSoldier->bTeam == MILITIA_TEAM && gGameExternalOptions.fAssignTraitsToMilitia) { - if ( Item[ usHandItem ].mortar ) + // SANDRO - old/new traits + if (gGameOptions.fNewTraitSystem) { - if (HAS_SKILL_TRAIT( pSoldier, HEAVY_WEAPONS_NT )) - iChance += gSkillTraitValues.sCtHModifierMortar * max( 0, 100 - gSkillTraitValues.ubHWMortarCtHPenaltyReduction * NUM_SKILL_TRAITS( pSoldier, HEAVY_WEAPONS_NT )) / 100; + if (Item[usHandItem].mortar) + { + if (HAS_SKILL_TRAIT(pSoldier, HEAVY_WEAPONS_NT)) + iChance += gSkillTraitValues.sCtHModifierMortar * max(0, 100 - gSkillTraitValues.ubHWMortarCtHPenaltyReduction * NUM_SKILL_TRAITS(pSoldier, HEAVY_WEAPONS_NT)) / 100; + else + iChance += gSkillTraitValues.sCtHModifierMortar; // -60% for untrained mercs + } else - iChance += gSkillTraitValues.sCtHModifierMortar; // -60% for untrained mercs + { + iChance += gSkillTraitValues.bCtHModifierGrenadeLaunchers; // -25% for untrained mercs + + if (HAS_SKILL_TRAIT(pSoldier, HEAVY_WEAPONS_NT)) + iChance += gSkillTraitValues.ubHWBonusCtHGrenadeLaunchers * NUM_SKILL_TRAITS(pSoldier, HEAVY_WEAPONS_NT); // +25% per trait - SANDRO + } } else { - iChance += gSkillTraitValues.bCtHModifierGrenadeLaunchers; // -25% for untrained mercs + // This feature is available only if not having new traits on - SANDRO + // Also.. this was moved here before the Heavy Weapons bonus + // HEADROCK HAM 3.2: External divisor for CTH with mortars, now that they are more prevalent in the battlefield. + if (Item[usHandItem].mortar) + { + iChance = iChance / gGameExternalOptions.ubMortarCTHDivisor; + } - if (HAS_SKILL_TRAIT( pSoldier, HEAVY_WEAPONS_NT )) - iChance += gSkillTraitValues.ubHWBonusCtHGrenadeLaunchers * NUM_SKILL_TRAITS( pSoldier, HEAVY_WEAPONS_NT ); // +25% per trait - SANDRO - } - } - else - { - // This feature is available only if not having new traits on - SANDRO - // Also.. this was moved here before the Heavy Weapons bonus - // HEADROCK HAM 3.2: External divisor for CTH with mortars, now that they are more prevalent in the battlefield. - if ( Item[ usHandItem ].mortar ) - { - iChance = iChance / gGameExternalOptions.ubMortarCTHDivisor; - } - - // heavy weapons trait helps out - if (HAS_SKILL_TRAIT( pSoldier, HEAVY_WEAPS_OT )) - { - iChance += gbSkillTraitBonus[HEAVY_WEAPS_OT] * NUM_SKILL_TRAITS( pSoldier, HEAVY_WEAPS_OT ); + // heavy weapons trait helps out + if (HAS_SKILL_TRAIT(pSoldier, HEAVY_WEAPS_OT)) + { + iChance += gbSkillTraitBonus[HEAVY_WEAPS_OT] * NUM_SKILL_TRAITS(pSoldier, HEAVY_WEAPS_OT); + } } } ////////////////////////////////////////////////////////////////////////////////////////////////