mirror of
https://github.com/1dot13/source.git
synced 2026-07-29 13:52:17 +02:00
Morale changes for AI soldiers:
- GetMoraleModifier: use bMorale for both player and AI. - CalcSuppressionTolerance: use morale as a base for tolerance for AI soldiers. - HandleSuppressionFire: morale loss for AI soldiers. - EVENT_BeginMercTurn: increase morale for AI soldiers. - TacticalCreateSoldier: Set morale = 60 + 2 * bExpLevel + Random(20) when creating AI soldier. NEW_SUPPRESSION_CODE: UseGun, UseGunNCTH: reduce shock when firing gun. AI_NEW_MORALE: limit AI morale depending on morale and shock level. git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@9181 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
@@ -2460,6 +2460,30 @@ BOOLEAN UseGunNCTH( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo )
|
||||
OBJECTTYPE* pObjAttHand = pSoldier->GetUsedWeapon( &pSoldier->inv[ pSoldier->ubAttackingHand ] );
|
||||
UINT16 usUBItem = pSoldier->GetUsedWeaponNumber( &pSoldier->inv[ pSoldier->ubAttackingHand ] );
|
||||
|
||||
// sevenfm: reduce shock when firing gun, for autofire shots - apply once
|
||||
SOLDIERTYPE* pTarget = SimpleFindSoldier(sTargetGridNo, pSoldier->bTargetLevel);
|
||||
if (gGameExternalOptions.fNewSuppressionCode &&
|
||||
Item[usUBItem].usItemClass == IC_GUN &&
|
||||
pTarget &&
|
||||
(pSoldier->bDoBurst == 1 || pSoldier->bDoBurst == 0))
|
||||
{
|
||||
UINT16 noisefactor = GetPercentNoiseVolume(pObjHand);
|
||||
UINT8 ubDamage = Weapon[usUBItem].ubImpact;
|
||||
|
||||
INT8 bShotsToFire = 1;
|
||||
if (pSoldier->bDoBurst)
|
||||
{
|
||||
bShotsToFire = pSoldier->bDoAutofire ? pSoldier->bDoAutofire : GetShotsPerBurst(pObjHand);
|
||||
}
|
||||
// calculate shock reduction value 0-50%
|
||||
UINT8 ubShockReductPercent = (50 - 400 / (bShotsToFire + 8)) * noisefactor * Weapon[usUBItem].ubAttackVolume / (50 * 100);
|
||||
if (pSoldier->IsValidSecondHandShot())
|
||||
ubShockReductPercent = ubShockReductPercent * 3 / 2;
|
||||
ubShockReductPercent = __min(50, ubShockReductPercent);
|
||||
|
||||
pSoldier->aiData.bShock -= pSoldier->aiData.bShock * ubShockReductPercent / 100;
|
||||
}
|
||||
|
||||
// CALC MUZZLE SWAY
|
||||
if ( Item[ usUBItem ].usItemClass == IC_THROWING_KNIFE )
|
||||
{
|
||||
@@ -3201,6 +3225,30 @@ BOOLEAN UseGun( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo )
|
||||
|
||||
usItemNum = pSoldier->usAttackingWeapon;
|
||||
|
||||
// sevenfm: reduce shock when firing gun, for autofire shots - apply once
|
||||
SOLDIERTYPE* pTarget = SimpleFindSoldier(sTargetGridNo, pSoldier->bTargetLevel);
|
||||
if (gGameExternalOptions.fNewSuppressionCode &&
|
||||
Item[usUBItem].usItemClass == IC_GUN &&
|
||||
pTarget &&
|
||||
(pSoldier->bDoBurst == 1 || pSoldier->bDoBurst == 0))
|
||||
{
|
||||
UINT16 noisefactor = GetPercentNoiseVolume(pObjUsed);
|
||||
UINT8 ubDamage = Weapon[usUBItem].ubImpact;
|
||||
|
||||
INT8 bShotsToFire = 1;
|
||||
if (pSoldier->bDoBurst)
|
||||
{
|
||||
bShotsToFire = pSoldier->bDoAutofire ? pSoldier->bDoAutofire : GetShotsPerBurst(pObjUsed);
|
||||
}
|
||||
// calculate shock reduction value 0-50%
|
||||
UINT8 ubShockReductPercent = (50 - 400 / (bShotsToFire + 8)) * noisefactor * Weapon[usUBItem].ubAttackVolume / (50 * 100);
|
||||
if (pSoldier->IsValidSecondHandShot())
|
||||
ubShockReductPercent = ubShockReductPercent * 3 / 2;
|
||||
ubShockReductPercent = __min(50, ubShockReductPercent);
|
||||
|
||||
pSoldier->aiData.bShock -= pSoldier->aiData.bShock * ubShockReductPercent / 100;
|
||||
}
|
||||
|
||||
// DEDUCT APs
|
||||
if (pSoldier->bDoBurst)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user