mirror of
https://github.com/1dot13/source.git
synced 2026-09-09 14:46:05 +02:00
Fix possible signed/unsigned type inconsistency problems in auto resolve code, fix max limit for tries in auto bandage code.
git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@9209 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
+63
-57
@@ -1634,7 +1634,9 @@ UINT32 AutoBandageMercs()
|
|||||||
|
|
||||||
// SANDRO - added safety check
|
// SANDRO - added safety check
|
||||||
cnt++;
|
cnt++;
|
||||||
if( cnt > 500 )
|
// sevenfm: INT8 cannot be larger than 127, should be 50 probably as in other check here
|
||||||
|
//if( cnt > 500 )
|
||||||
|
if (cnt > 50)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4376,11 +4378,11 @@ BOOLEAN TargetHasLoadedGun( SOLDIERTYPE *pSoldier )
|
|||||||
|
|
||||||
void AttackTarget( SOLDIERCELL *pAttacker, SOLDIERCELL *pTarget )
|
void AttackTarget( SOLDIERCELL *pAttacker, SOLDIERCELL *pTarget )
|
||||||
{
|
{
|
||||||
UINT16 usAttack;
|
INT16 sAttack;
|
||||||
UINT16 usDefence;
|
UINT16 sDefence;
|
||||||
UINT8 ubImpact;
|
UINT8 ubImpact;
|
||||||
UINT8 ubLocation;
|
UINT8 ubLocation;
|
||||||
UINT8 ubAccuracy;
|
INT16 sAccuracy;
|
||||||
INT32 iRandom;
|
INT32 iRandom;
|
||||||
INT32 iImpact;
|
INT32 iImpact;
|
||||||
INT32 iNewLife;
|
INT32 iNewLife;
|
||||||
@@ -4393,69 +4395,69 @@ void AttackTarget( SOLDIERCELL *pAttacker, SOLDIERCELL *pTarget )
|
|||||||
|
|
||||||
pAttacker->uiFlags |= CELL_FIREDATTARGET | CELL_DIRTY;
|
pAttacker->uiFlags |= CELL_FIREDATTARGET | CELL_DIRTY;
|
||||||
if( pAttacker->usAttack < 950 )
|
if( pAttacker->usAttack < 950 )
|
||||||
usAttack = (UINT16)(pAttacker->usAttack + PreRandom((INT16)(gGameExternalOptions.iAutoResolveLuckFactor*1000.0) - pAttacker->usAttack ));
|
sAttack = (INT16)(pAttacker->usAttack + PreRandom(max(0, (INT16)(gGameExternalOptions.iAutoResolveLuckFactor*1000.0) - (INT16)pAttacker->usAttack)));
|
||||||
else
|
else
|
||||||
usAttack = (UINT16)(950 + PreRandom( 50 ));
|
sAttack = 950 + PreRandom(50);
|
||||||
|
|
||||||
if( pTarget->uiFlags & CELL_RETREATING && !(pAttacker->uiFlags & CELL_FEMALECREATURE) )
|
if( pTarget->uiFlags & CELL_RETREATING && !(pAttacker->uiFlags & CELL_FEMALECREATURE) )
|
||||||
{
|
{
|
||||||
//Attacking a retreating merc is harder. Modify the attack value to 70% of it's value.
|
//Attacking a retreating merc is harder. Modify the attack value to 70% of it's value.
|
||||||
//This allows retreaters to have a better chance of escaping.
|
//This allows retreaters to have a better chance of escaping.
|
||||||
usAttack = usAttack * 7 / 10;
|
sAttack = sAttack * 7 / 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( pTarget->usDefence < 950 )
|
if( pTarget->usDefence < 950 )
|
||||||
usDefence = (UINT16)(pTarget->usDefence + PreRandom((INT16)(gGameExternalOptions.iAutoResolveLuckFactor*1000.0) - pTarget->usDefence ));
|
sDefence = (INT16)(pTarget->usDefence + PreRandom(max(0, (INT16)(gGameExternalOptions.iAutoResolveLuckFactor*1000.0) - (INT16)pTarget->usDefence)));
|
||||||
else
|
else
|
||||||
usDefence = (UINT16)(950 + PreRandom( 50 ));
|
sDefence = 950 + PreRandom(50);
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// SANDRO - Iincrease Militia Strength in autoresolve battles
|
// SANDRO - Increase Militia Strength in autoresolve battles
|
||||||
// because the attack and defense is limited to max 1000, rather than only increasing the attack of milita,
|
// because the attack and defense is limited to max 1000, rather than only increasing the attack of militia,
|
||||||
// decrease the defense of target - so +100% bonus means +50% attack of attacker and -50% defense of target
|
// decrease the defense of target - so +100% bonus means +50% attack of attacker and -50% defense of target
|
||||||
|
|
||||||
//if militita is attacking increase attack by half and decrease the defense of enemy
|
//if militia is attacking increase attack by half and decrease the defense of enemy
|
||||||
if (pAttacker->pSoldier->ubSoldierClass == SOLDIER_CLASS_GREEN_MILITIA && gGameExternalOptions.sGreenMilitiaAutoresolveStrength != 0)
|
if (pAttacker->pSoldier->ubSoldierClass == SOLDIER_CLASS_GREEN_MILITIA && gGameExternalOptions.sGreenMilitiaAutoresolveStrength != 0)
|
||||||
{
|
{
|
||||||
usAttack += (usAttack * gGameExternalOptions.sGreenMilitiaAutoresolveStrength /200);
|
sAttack += (sAttack * gGameExternalOptions.sGreenMilitiaAutoresolveStrength /200);
|
||||||
usDefence -= (usDefence * gGameExternalOptions.sGreenMilitiaAutoresolveStrength /200);
|
sDefence -= (sDefence * gGameExternalOptions.sGreenMilitiaAutoresolveStrength /200);
|
||||||
}
|
}
|
||||||
else if (pAttacker->pSoldier->ubSoldierClass == SOLDIER_CLASS_REG_MILITIA && gGameExternalOptions.sRegularMilitiaAutoresolveStrength != 0)
|
else if (pAttacker->pSoldier->ubSoldierClass == SOLDIER_CLASS_REG_MILITIA && gGameExternalOptions.sRegularMilitiaAutoresolveStrength != 0)
|
||||||
{
|
{
|
||||||
usAttack += (usAttack * gGameExternalOptions.sRegularMilitiaAutoresolveStrength /200);
|
sAttack += (sAttack * gGameExternalOptions.sRegularMilitiaAutoresolveStrength /200);
|
||||||
usDefence -= (usDefence * gGameExternalOptions.sRegularMilitiaAutoresolveStrength /200);
|
sDefence -= (sDefence * gGameExternalOptions.sRegularMilitiaAutoresolveStrength /200);
|
||||||
}
|
}
|
||||||
else if (pAttacker->pSoldier->ubSoldierClass == SOLDIER_CLASS_ELITE_MILITIA && gGameExternalOptions.sVeteranMilitiaAutoresolveStrength != 0)
|
else if (pAttacker->pSoldier->ubSoldierClass == SOLDIER_CLASS_ELITE_MILITIA && gGameExternalOptions.sVeteranMilitiaAutoresolveStrength != 0)
|
||||||
{
|
{
|
||||||
usAttack += (usAttack * gGameExternalOptions.sVeteranMilitiaAutoresolveStrength /200);
|
sAttack += (sAttack * gGameExternalOptions.sVeteranMilitiaAutoresolveStrength /200);
|
||||||
usDefence -= (usDefence * gGameExternalOptions.sVeteranMilitiaAutoresolveStrength /200);
|
sDefence -= (sDefence * gGameExternalOptions.sVeteranMilitiaAutoresolveStrength /200);
|
||||||
}
|
}
|
||||||
else if (pAttacker->uiFlags & CELL_MERC && gGameExternalOptions.sMercsAutoresolveOffenseBonus != 0)
|
else if (pAttacker->uiFlags & CELL_MERC && gGameExternalOptions.sMercsAutoresolveOffenseBonus != 0)
|
||||||
{
|
{
|
||||||
usAttack += (usAttack * gGameExternalOptions.sMercsAutoresolveOffenseBonus /200);
|
sAttack += (sAttack * gGameExternalOptions.sMercsAutoresolveOffenseBonus /200);
|
||||||
usDefence -= (usDefence * gGameExternalOptions.sMercsAutoresolveOffenseBonus /200);
|
sDefence -= (sDefence * gGameExternalOptions.sMercsAutoresolveOffenseBonus /200);
|
||||||
}
|
}
|
||||||
|
|
||||||
//if enemy is attacking decrease his attack by half and increase the defense of militia by half
|
//if enemy is attacking decrease his attack by half and increase the defense of militia by half
|
||||||
if (pTarget->pSoldier->ubSoldierClass == SOLDIER_CLASS_GREEN_MILITIA && gGameExternalOptions.sGreenMilitiaAutoresolveStrength != 0)
|
if (pTarget->pSoldier->ubSoldierClass == SOLDIER_CLASS_GREEN_MILITIA && gGameExternalOptions.sGreenMilitiaAutoresolveStrength != 0)
|
||||||
{
|
{
|
||||||
usDefence += (usDefence * gGameExternalOptions.sGreenMilitiaAutoresolveStrength /200);
|
sDefence += (sDefence * gGameExternalOptions.sGreenMilitiaAutoresolveStrength /200);
|
||||||
usAttack -= (usAttack * gGameExternalOptions.sGreenMilitiaAutoresolveStrength /200);
|
sAttack -= (sAttack * gGameExternalOptions.sGreenMilitiaAutoresolveStrength /200);
|
||||||
}
|
}
|
||||||
else if (pTarget->pSoldier->ubSoldierClass == SOLDIER_CLASS_REG_MILITIA && gGameExternalOptions.sRegularMilitiaAutoresolveStrength != 0)
|
else if (pTarget->pSoldier->ubSoldierClass == SOLDIER_CLASS_REG_MILITIA && gGameExternalOptions.sRegularMilitiaAutoresolveStrength != 0)
|
||||||
{
|
{
|
||||||
usDefence += (usDefence * gGameExternalOptions.sRegularMilitiaAutoresolveStrength /200);
|
sDefence += (sDefence * gGameExternalOptions.sRegularMilitiaAutoresolveStrength /200);
|
||||||
usAttack -= (usAttack * gGameExternalOptions.sRegularMilitiaAutoresolveStrength /200);
|
sAttack -= (sAttack * gGameExternalOptions.sRegularMilitiaAutoresolveStrength /200);
|
||||||
}
|
}
|
||||||
else if (pTarget->pSoldier->ubSoldierClass == SOLDIER_CLASS_ELITE_MILITIA && gGameExternalOptions.sVeteranMilitiaAutoresolveStrength != 0)
|
else if (pTarget->pSoldier->ubSoldierClass == SOLDIER_CLASS_ELITE_MILITIA && gGameExternalOptions.sVeteranMilitiaAutoresolveStrength != 0)
|
||||||
{
|
{
|
||||||
usDefence += (usDefence * gGameExternalOptions.sVeteranMilitiaAutoresolveStrength /200);
|
sDefence += (sDefence * gGameExternalOptions.sVeteranMilitiaAutoresolveStrength /200);
|
||||||
usAttack -= (usAttack * gGameExternalOptions.sVeteranMilitiaAutoresolveStrength /200);
|
sAttack -= (sAttack * gGameExternalOptions.sVeteranMilitiaAutoresolveStrength /200);
|
||||||
}
|
}
|
||||||
else if (pTarget->uiFlags & CELL_MERC && gGameExternalOptions.sMercsAutoresolveDeffenseBonus != 0)
|
else if (pTarget->uiFlags & CELL_MERC && gGameExternalOptions.sMercsAutoresolveDeffenseBonus != 0)
|
||||||
{
|
{
|
||||||
usDefence += (usDefence * gGameExternalOptions.sMercsAutoresolveDeffenseBonus /200);
|
sDefence += (sDefence * gGameExternalOptions.sMercsAutoresolveDeffenseBonus /200);
|
||||||
usAttack -= (usAttack * gGameExternalOptions.sMercsAutoresolveDeffenseBonus /200);
|
sAttack -= (sAttack * gGameExternalOptions.sMercsAutoresolveDeffenseBonus /200);
|
||||||
}
|
}
|
||||||
|
|
||||||
// check fortifications bonus
|
// check fortifications bonus
|
||||||
@@ -4464,13 +4466,13 @@ void AttackTarget( SOLDIERCELL *pAttacker, SOLDIERCELL *pTarget )
|
|||||||
|| pTarget->pSoldier->ubSoldierClass == SOLDIER_CLASS_ELITE_MILITIA
|
|| pTarget->pSoldier->ubSoldierClass == SOLDIER_CLASS_ELITE_MILITIA
|
||||||
|| (pTarget->uiFlags & CELL_MERC))
|
|| (pTarget->uiFlags & CELL_MERC))
|
||||||
{
|
{
|
||||||
usDefence += (usDefence * RebelCommand::GetFortificationsBonus(GetAutoResolveSectorID()) / 200);
|
sDefence += (sDefence * RebelCommand::GetFortificationsBonus(GetAutoResolveSectorID()) / 200);
|
||||||
usAttack -= (usAttack * RebelCommand::GetFortificationsBonus(GetAutoResolveSectorID()) / 200);
|
sAttack -= (sAttack * RebelCommand::GetFortificationsBonus(GetAutoResolveSectorID()) / 200);
|
||||||
}
|
}
|
||||||
|
|
||||||
// reapair values
|
// repair values
|
||||||
usAttack = max(0, min(1000, usAttack ));
|
sAttack = max(0, min(1000, sAttack ));
|
||||||
usDefence = max(0, min(1000, usDefence ));
|
sDefence = max(0, min(1000, sDefence ));
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
if( pAttacker->uiFlags & (CELL_FEMALECREATURE | CELL_BLOODCAT | CELL_ZOMBIE) )
|
if( pAttacker->uiFlags & (CELL_FEMALECREATURE | CELL_BLOODCAT | CELL_ZOMBIE) )
|
||||||
@@ -4487,7 +4489,7 @@ void AttackTarget( SOLDIERCELL *pAttacker, SOLDIERCELL *pTarget )
|
|||||||
fCannon = TRUE;
|
fCannon = TRUE;
|
||||||
|
|
||||||
// cannons have a huge splash zone, so they are much more likely to hit
|
// cannons have a huge splash zone, so they are much more likely to hit
|
||||||
usAttack *= 1.5;
|
sAttack *= 1.5;
|
||||||
}
|
}
|
||||||
// if our target is a tank, we use heavy weapons if we have any
|
// if our target is a tank, we use heavy weapons if we have any
|
||||||
else if ( (ARMED_VEHICLE( pTarget->pSoldier ) || ENEMYROBOT( pTarget->pSoldier )) && FireAntiTankWeapon( pAttacker ) )
|
else if ( (ARMED_VEHICLE( pTarget->pSoldier ) || ENEMYROBOT( pTarget->pSoldier )) && FireAntiTankWeapon( pAttacker ) )
|
||||||
@@ -4495,7 +4497,7 @@ void AttackTarget( SOLDIERCELL *pAttacker, SOLDIERCELL *pTarget )
|
|||||||
fAntiTank = TRUE;
|
fAntiTank = TRUE;
|
||||||
|
|
||||||
// hitting a tank with an rpg isn't easy
|
// hitting a tank with an rpg isn't easy
|
||||||
usAttack *= 0.8;
|
sAttack *= 0.8;
|
||||||
}
|
}
|
||||||
else if( !FireAShot( pAttacker ) )
|
else if( !FireAShot( pAttacker ) )
|
||||||
{
|
{
|
||||||
@@ -4509,9 +4511,9 @@ void AttackTarget( SOLDIERCELL *pAttacker, SOLDIERCELL *pTarget )
|
|||||||
{
|
{
|
||||||
//except for creatures
|
//except for creatures
|
||||||
if( fKnife )
|
if( fKnife )
|
||||||
usAttack = usAttack * 6 / 10;
|
sAttack = sAttack * 6 / 10;
|
||||||
else
|
else
|
||||||
usAttack = usAttack * 4 / 10;
|
sAttack = sAttack * 4 / 10;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4543,11 +4545,11 @@ void AttackTarget( SOLDIERCELL *pAttacker, SOLDIERCELL *pTarget )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( usAttack < usDefence )
|
if( sAttack < sDefence )
|
||||||
{
|
{
|
||||||
if( pTarget->pSoldier->stats.bLife >= OKLIFE || !PreRandom( 5 ) )
|
if( pTarget->pSoldier->stats.bLife >= OKLIFE || !PreRandom( 5 ) )
|
||||||
{
|
{
|
||||||
//Attacker misses -- use up a round of ammo. If target is unconcious, then 80% chance of hitting.
|
//Attacker misses -- use up a round of ammo. If target is unconscious, then 80% chance of hitting.
|
||||||
pTarget->uiFlags |= CELL_DODGEDATTACK | CELL_DIRTY;
|
pTarget->uiFlags |= CELL_DODGEDATTACK | CELL_DIRTY;
|
||||||
|
|
||||||
if( fMelee )
|
if( fMelee )
|
||||||
@@ -4601,7 +4603,7 @@ void AttackTarget( SOLDIERCELL *pAttacker, SOLDIERCELL *pTarget )
|
|||||||
//ubAccuracy = (UINT8)((usAttack - usDefence + PreRandom( usDefence - pTarget->usDefence )) / 10);
|
//ubAccuracy = (UINT8)((usAttack - usDefence + PreRandom( usDefence - pTarget->usDefence )) / 10);
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// SANDRO - increased mercs' offense/deffense rating
|
// SANDRO - increased mercs' offense/defense rating
|
||||||
if ( pAttacker->uiFlags & CELL_MERC && gGameExternalOptions.sMercsAutoresolveOffenseBonus != 0 )
|
if ( pAttacker->uiFlags & CELL_MERC && gGameExternalOptions.sMercsAutoresolveOffenseBonus != 0 )
|
||||||
{
|
{
|
||||||
ubImpact += (ubImpact * gGameExternalOptions.sMercsAutoresolveOffenseBonus / 150);
|
ubImpact += (ubImpact * gGameExternalOptions.sMercsAutoresolveOffenseBonus / 150);
|
||||||
@@ -4675,7 +4677,7 @@ void AttackTarget( SOLDIERCELL *pAttacker, SOLDIERCELL *pTarget )
|
|||||||
//ubAccuracy = (UINT8)((usAttack - usDefence + PreRandom( usDefence - pTarget->usDefence )) / 10);
|
//ubAccuracy = (UINT8)((usAttack - usDefence + PreRandom( usDefence - pTarget->usDefence )) / 10);
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// SANDRO - increased mercs' offense/deffense rating
|
// SANDRO - increased mercs' offense/defense rating
|
||||||
if ( pAttacker->uiFlags & CELL_MERC && gGameExternalOptions.sMercsAutoresolveOffenseBonus != 0 )
|
if ( pAttacker->uiFlags & CELL_MERC && gGameExternalOptions.sMercsAutoresolveOffenseBonus != 0 )
|
||||||
{
|
{
|
||||||
ubImpact += (ubImpact * gGameExternalOptions.sMercsAutoresolveOffenseBonus / 150);
|
ubImpact += (ubImpact * gGameExternalOptions.sMercsAutoresolveOffenseBonus / 150);
|
||||||
@@ -4710,16 +4712,17 @@ void AttackTarget( SOLDIERCELL *pAttacker, SOLDIERCELL *pTarget )
|
|||||||
else
|
else
|
||||||
ubLocation = AIM_SHOT_TORSO;
|
ubLocation = AIM_SHOT_TORSO;
|
||||||
|
|
||||||
if (usDefence >= pTarget->usDefence)
|
if (sDefence >= pTarget->usDefence)
|
||||||
iRandom = PreRandom(usDefence - pTarget->usDefence);
|
iRandom = PreRandom(sDefence - pTarget->usDefence);
|
||||||
else
|
else
|
||||||
iRandom = -PreRandom(pTarget->usDefence - usDefence);
|
iRandom = -PreRandom(pTarget->usDefence - sDefence);
|
||||||
|
|
||||||
|
sAccuracy = (sAttack - sDefence + iRandom) / 10;
|
||||||
|
|
||||||
ubAccuracy = (UINT8)((usAttack - usDefence + iRandom)/10);
|
|
||||||
// HEADROCK HAM 5: Added argument
|
// HEADROCK HAM 5: Added argument
|
||||||
iImpact = BulletImpact( pAttacker->pSoldier, NULL, pTarget->pSoldier, ubLocation, ubImpact, ubAccuracy, NULL );
|
iImpact = BulletImpact( pAttacker->pSoldier, NULL, pTarget->pSoldier, ubLocation, ubImpact, sAccuracy, NULL );
|
||||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// SANDRO - increased mercs' offense/deffense rating
|
// SANDRO - increased mercs' offense/defense rating
|
||||||
if (pAttacker->uiFlags & CELL_MERC && gGameExternalOptions.sMercsAutoresolveOffenseBonus != 0)
|
if (pAttacker->uiFlags & CELL_MERC && gGameExternalOptions.sMercsAutoresolveOffenseBonus != 0)
|
||||||
{
|
{
|
||||||
iImpact += (iImpact * gGameExternalOptions.sMercsAutoresolveOffenseBonus /150);
|
iImpact += (iImpact * gGameExternalOptions.sMercsAutoresolveOffenseBonus /150);
|
||||||
@@ -4751,12 +4754,12 @@ void AttackTarget( SOLDIERCELL *pAttacker, SOLDIERCELL *pTarget )
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (usDefence >= pTarget->usDefence)
|
if (sDefence >= pTarget->usDefence)
|
||||||
iRandom = PreRandom(usDefence - pTarget->usDefence);
|
iRandom = PreRandom(sDefence - pTarget->usDefence);
|
||||||
else
|
else
|
||||||
iRandom = -PreRandom(pTarget->usDefence - usDefence);
|
iRandom = -PreRandom(pTarget->usDefence - sDefence);
|
||||||
|
|
||||||
ubAccuracy = (UINT8)((usAttack - usDefence + iRandom)/10);
|
sAccuracy = (sAttack - sDefence + iRandom) / 10;
|
||||||
|
|
||||||
//Determine attacking weapon.
|
//Determine attacking weapon.
|
||||||
pAttacker->pSoldier->usAttackingWeapon = 0;
|
pAttacker->pSoldier->usAttackingWeapon = 0;
|
||||||
@@ -4774,13 +4777,13 @@ void AttackTarget( SOLDIERCELL *pAttacker, SOLDIERCELL *pTarget )
|
|||||||
//switch items
|
//switch items
|
||||||
tempItem = pAttacker->pSoldier->inv[ HANDPOS ];
|
tempItem = pAttacker->pSoldier->inv[ HANDPOS ];
|
||||||
pAttacker->pSoldier->inv[ HANDPOS ] = pAttacker->pSoldier->inv[ pAttacker->bWeaponSlot ]; //CTD
|
pAttacker->pSoldier->inv[ HANDPOS ] = pAttacker->pSoldier->inv[ pAttacker->bWeaponSlot ]; //CTD
|
||||||
iImpact = HTHImpact( pAttacker->pSoldier, pTarget->pSoldier, ubAccuracy, (BOOLEAN)(fKnife || fClaw) );
|
iImpact = HTHImpact( pAttacker->pSoldier, pTarget->pSoldier, sAccuracy, (BOOLEAN)(fKnife || fClaw) );
|
||||||
pAttacker->pSoldier->inv[ pAttacker->bWeaponSlot ] = pAttacker->pSoldier->inv[ HANDPOS ];
|
pAttacker->pSoldier->inv[ pAttacker->bWeaponSlot ] = pAttacker->pSoldier->inv[ HANDPOS ];
|
||||||
pAttacker->pSoldier->inv[ HANDPOS ] = tempItem;
|
pAttacker->pSoldier->inv[ HANDPOS ] = tempItem;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
iImpact = HTHImpact( pAttacker->pSoldier, pTarget->pSoldier, ubAccuracy, (BOOLEAN)(fKnife || fClaw) );
|
iImpact = HTHImpact( pAttacker->pSoldier, pTarget->pSoldier, sAccuracy, (BOOLEAN)(fKnife || fClaw) );
|
||||||
}
|
}
|
||||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// SANDRO - increased mercs' offense/deffense rating
|
// SANDRO - increased mercs' offense/deffense rating
|
||||||
@@ -4801,20 +4804,22 @@ void AttackTarget( SOLDIERCELL *pAttacker, SOLDIERCELL *pTarget )
|
|||||||
iImpact = 0;
|
iImpact = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// WANNE: Just for safty.
|
// WANNE: Just for safety.
|
||||||
if (iImpact < 0)
|
if (iImpact < 0)
|
||||||
iImpact = 0;
|
iImpact = 0;
|
||||||
|
|
||||||
iNewLife = pTarget->pSoldier->stats.bLife - iImpact;
|
iNewLife = pTarget->pSoldier->stats.bLife - iImpact;
|
||||||
|
|
||||||
if( pAttacker->uiFlags & CELL_MERC )
|
if( pAttacker->uiFlags & CELL_MERC )
|
||||||
{ //Attacker is a player, so increment the number of shots that hit.
|
{
|
||||||
|
//Attacker is a player, so increment the number of shots that hit.
|
||||||
gMercProfiles[ pAttacker->pSoldier->ubProfile ].records.usShotsHit++;
|
gMercProfiles[ pAttacker->pSoldier->ubProfile ].records.usShotsHit++;
|
||||||
// MARKSMANSHIP GAIN: Attacker's shot hits
|
// MARKSMANSHIP GAIN: Attacker's shot hits
|
||||||
StatChange( pAttacker->pSoldier, MARKAMT, 6, FALSE ); // in addition to 3 for taking a shot
|
StatChange( pAttacker->pSoldier, MARKAMT, 6, FALSE ); // in addition to 3 for taking a shot
|
||||||
}
|
}
|
||||||
if( pTarget->uiFlags & CELL_MERC )
|
if( pTarget->uiFlags & CELL_MERC )
|
||||||
{ //Target is a player, so increment the times he has been wounded.
|
{
|
||||||
|
//Target is a player, so increment the times he has been wounded.
|
||||||
if( iImpact > 1 )
|
if( iImpact > 1 )
|
||||||
gMercProfiles[ pTarget->pSoldier->ubProfile ].records.usTimesWoundedStabbed++;
|
gMercProfiles[ pTarget->pSoldier->ubProfile ].records.usTimesWoundedStabbed++;
|
||||||
// EXPERIENCE GAIN: Took some damage
|
// EXPERIENCE GAIN: Took some damage
|
||||||
@@ -4867,7 +4872,8 @@ void AttackTarget( SOLDIERCELL *pAttacker, SOLDIERCELL *pTarget )
|
|||||||
}
|
}
|
||||||
|
|
||||||
if( pAttacker->uiFlags & CELL_MERC )
|
if( pAttacker->uiFlags & CELL_MERC )
|
||||||
{ //Player killed the enemy soldier -- update his stats as well as any assisters.
|
{
|
||||||
|
//Player killed the enemy soldier -- update his stats as well as any assisters.
|
||||||
/////////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////////
|
||||||
// SANDRO - experimental - more specific statistics of mercs
|
// SANDRO - experimental - more specific statistics of mercs
|
||||||
switch(pTarget->pSoldier->ubSoldierClass)
|
switch(pTarget->pSoldier->ubSoldierClass)
|
||||||
|
|||||||
Reference in New Issue
Block a user