mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
o Speck can be hired by M.E.R.C o From now on, as long as Speck is hired (or dead, or POW, or travelling), he won't be sitting on Speck Com nor sending you emails. However, is he's able to, he'll comment on current situation from battlefield: player owing money, Flo getting married, MERC merc dying, etc., so keeping him alive might be a good idea o GameDir data revision >= 1701 git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@6215 3b4a5df2-a311-0410-b5c6-a8a6f20db521
138 lines
3.5 KiB
C++
138 lines
3.5 KiB
C++
#ifdef PRECOMPILEDHEADERS
|
|
#include "Strategic All.h"
|
|
#else
|
|
#include "Strategic.h"
|
|
#include "Types.h"
|
|
#include "Squads.h"
|
|
#include "jascreens.h"
|
|
#include "Assignments.h"
|
|
#include "Interface Control.h"
|
|
#include "Overhead.h"
|
|
#include "Soldier Profile.h"
|
|
#include "Dialogue Control.h"
|
|
#include "personnel.h"
|
|
#include "Tactical Save.h"
|
|
#include "Isometric Utils.h"
|
|
#include "Vehicles.h"
|
|
#include "Game Clock.h"
|
|
#endif
|
|
|
|
// anv: for playable Speck
|
|
#include "mercs.h"
|
|
|
|
StrategicMapElement StrategicMap[MAP_WORLD_X*MAP_WORLD_Y];
|
|
|
|
extern BOOLEAN fReDrawFace;
|
|
|
|
|
|
|
|
BOOLEAN HandleStrategicDeath( SOLDIERTYPE *pSoldier )
|
|
{
|
|
// add the guy to the dead list
|
|
//AddCharacterToDeadList( pSoldier );
|
|
|
|
// If in a vehicle, remove them!
|
|
if( ( pSoldier->bAssignment == VEHICLE ) && ( pSoldier->iVehicleId != -1 ) )
|
|
{
|
|
// remove from vehicle
|
|
TakeSoldierOutOfVehicle( pSoldier );
|
|
}
|
|
|
|
// if not in mapscreen
|
|
if ( !(guiTacticalInterfaceFlags & INTERFACE_MAPSCREEN ) )
|
|
{
|
|
// ATE; At least make them dead!
|
|
if( ( pSoldier->bAssignment != ASSIGNMENT_DEAD ) )
|
|
{
|
|
SetTimeOfAssignmentChangeForMerc( pSoldier );
|
|
}
|
|
|
|
ChangeSoldiersAssignment( pSoldier, ASSIGNMENT_DEAD );
|
|
}
|
|
else if( ( pSoldier->stats.bLife == 0 )&&( pSoldier->bAssignment != ASSIGNMENT_DEAD ) )
|
|
{
|
|
// died in mapscreen
|
|
|
|
fReDrawFace = TRUE;
|
|
|
|
// dead
|
|
if( ( pSoldier->bAssignment != ASSIGNMENT_DEAD ) )
|
|
{
|
|
SetTimeOfAssignmentChangeForMerc( pSoldier );
|
|
}
|
|
|
|
ChangeSoldiersAssignment( pSoldier, ASSIGNMENT_DEAD );
|
|
|
|
//s et breath and breath max to 0
|
|
pSoldier->bBreath = pSoldier->bBreathMax = 0;
|
|
|
|
// rebuild list
|
|
ReBuildCharactersList( );
|
|
|
|
// ste merc as dead
|
|
// pSoldier->flags.fUIdeadMerc = TRUE;
|
|
|
|
// attempt to remove character from squad
|
|
RemoveCharacterFromSquads( pSoldier );
|
|
|
|
// handle any passign comments by grunts
|
|
HandleSoldierDeadComments( pSoldier );
|
|
|
|
// put the dead guys down
|
|
AddDeadSoldierToUnLoadedSector( ( UINT8 ) ( pSoldier->sSectorX ), ( UINT8 )( pSoldier->sSectorY ), pSoldier->bSectorZ, pSoldier, RandomGridNo(), ADD_DEAD_SOLDIER_TO_SWEETSPOT );
|
|
|
|
fTeamPanelDirty = TRUE;
|
|
fMapPanelDirty = TRUE;
|
|
fCharacterInfoPanelDirty = TRUE;
|
|
|
|
StopTimeCompression();
|
|
}
|
|
|
|
return( TRUE );
|
|
}
|
|
|
|
|
|
void HandleSoldierDeadComments( SOLDIERTYPE *pSoldier )
|
|
{
|
|
INT32 cnt = 0;
|
|
SOLDIERTYPE *pTeamSoldier;
|
|
INT8 bBuddyIndex;
|
|
|
|
// IF IT'S THE SELECTED GUY, MAKE ANOTHER SELECTED!
|
|
cnt = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID;
|
|
|
|
|
|
// see if this was the friend of a living merc
|
|
for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID; cnt++,pTeamSoldier++)
|
|
{
|
|
if ( pTeamSoldier->stats.bLife >= OKLIFE && pTeamSoldier->bActive )
|
|
{
|
|
bBuddyIndex = WhichBuddy( pTeamSoldier->ubProfile, pSoldier->ubProfile );
|
|
switch( bBuddyIndex )
|
|
{
|
|
case 0:
|
|
// buddy #1 died!
|
|
TacticalCharacterDialogue( pTeamSoldier, QUOTE_BUDDY_ONE_KILLED );
|
|
break;
|
|
case 1:
|
|
// buddy #2 died!
|
|
TacticalCharacterDialogue( pTeamSoldier, QUOTE_BUDDY_TWO_KILLED );
|
|
break;
|
|
case 2:
|
|
// learn to like buddy died!
|
|
TacticalCharacterDialogue( pTeamSoldier, QUOTE_LEARNED_TO_LIKE_MERC_KILLED );
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
// anv: handle Speck witnessing his employee death
|
|
if( pTeamSoldier->ubProfile == SPECK_PLAYABLE && pSoldier->ubWhatKindOfMercAmI == MERC_TYPE__MERC )
|
|
HandleSpeckWitnessingEmployeeDeath( pSoldier );
|
|
|
|
}
|
|
|
|
|
|
return;
|
|
}
|