New: if REDUCED_INSTANT_DEATH is TRUE, damage from guns/knives that would normally instantly kill non-comatose player-controlled mercs is lowered so that they instead fall into a coma (and can be saved by other mercs) (by sevenfm)

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@8485 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
Flugente
2017-09-29 19:48:32 +00:00
parent 2c84cbe48d
commit 8de2a8601e
3 changed files with 16 additions and 1 deletions
+3
View File
@@ -1423,6 +1423,9 @@ void LoadGameExternalOptions()
gGameExternalOptions.fNoEnemyAutoReadyWeapon = iniReader.ReadInteger("Tactical Gameplay Settings", "NO_ENEMY_AUTOMATIC_WEAPON_READYING", 1, 0, 2);
// Flugente/sevenfm: player-controlled mercs won't die instantly from most damage, instead they fall into a coma
gGameExternalOptions.fReducedInstantDeath = iniReader.ReadBoolean("Tactical Gameplay Settings", "REDUCED_INSTANT_DEATH", FALSE);
// enable schedules and decision making for any named npc regardless of their team
gGameExternalOptions.fAllNamedNpcsDecideAction = iniReader.ReadBoolean("Tactical Gameplay Settings", "ALL_NAMED_NPCS_DECIDE_ACTION", FALSE);
+1
View File
@@ -363,6 +363,7 @@ typedef struct
BOOLEAN fAllowInstantInterruptsOnSight;
BOOLEAN fNoEnemyAutoReadyWeapon;
BOOLEAN fReducedInstantDeath;
BOOLEAN fAllNamedNpcsDecideAction;
UINT16 usAwardSpecialExpForQuests;
+12 -1
View File
@@ -6046,7 +6046,18 @@ void SOLDIERTYPE::EVENT_SoldierGotHit( UINT16 usWeaponIndex, INT16 sDamage, INT1
return;
}
// DEDUCT LIFE
// sevenfm: player mercs should not die instantly
if (gGameExternalOptions.fReducedInstantDeath &&
this->flags.uiStatusFlags & SOLDIER_PC &&
this->stats.bLife >= OKLIFE &&
ubSpecial != FIRE_WEAPON_HEAD_EXPLODE_SPECIAL &&
ubSpecial != FIRE_WEAPON_CHEST_EXPLODE_SPECIAL &&
Item[usWeaponIndex].usItemClass & (IC_GUN | IC_THROWING_KNIFE | IC_BLADE))
{
sDamage = __min(sDamage, this->stats.bLife - OKLIFE + 1 + sDamage / 10);
}
// DEDUCT LIFE
ubCombinedLoss = this->SoldierTakeDamage( ANIM_CROUCH, sDamage, sBreathLoss, ubReason, this->ubAttackerID, NOWHERE, FALSE, TRUE );
// ATE: OK, Let's check our ASSIGNMENT state,