Files
2025-08-08 16:39:52 +03:00

199 lines
5.7 KiB
C

#ifndef _SQUADS_H
#define _SQUADS_H
#include "Soldier Control.h"
#include "FileMan.h"
#include "Overhead Types.h"
// header for squad management system
#define NUMBER_OF_SOLDIERS_PER_SQUAD 10
// enums for squads
enum{
FIRST_SQUAD=0,
SECOND_SQUAD,
THIRD_SQUAD,
FOURTH_SQUAD,
FIFTH_SQUAD,
SIXTH_SQUAD,
SEVENTH_SQUAD,
EIGTH_SQUAD,
NINTH_SQUAD,
TENTH_SQUAD,
ELEVENTH_SQUAD,
TWELTH_SQUAD,
THIRTEENTH_SQUAD,
FOURTEENTH_SQUAD,
FIFTHTEEN_SQUAD,
SIXTEENTH_SQUAD,
SEVENTEENTH_SQUAD,
EIGTHTEENTH_SQUAD,
NINTEENTH_SQUAD,
TWENTYTH_SQUAD,
SQUAD_TWENTYONE,
SQUAD_TWENTYTWO,
SQUAD_TWENTYTHREE,
SQUAD_TWENTYFOUR,
SQUAD_TWENTYFIVE,
SQUAD_TWENTYSIX,
SQUAD_TWENTYSEVEN,
SQUAD_TWENTYEIGHT,
SQUAD_TWENTYNINE,
SQUAD_THIRTY,
SQUAD_THIRTYONE,
SQUAD_THIRTYTWO,
SQUAD_THIRTYTHREE,
SQUAD_THIRTYFOUR,
SQUAD_THIRTYFIVE,
SQUAD_THIRTYSIX,
SQUAD_THIRTYSEVEN,
SQUAD_THIRTYEIGHT,
SQUAD_THIRTYNINE,
SQUAD_FOURTY,
NUMBER_OF_SQUADS,
};
// ATE: Added so we can have no current squad
// happens in we move off sector via tactical, but nobody is left!
#define NO_CURRENT_SQUAD NUMBER_OF_SQUADS
// ptrs to soldier types of squads and their members
// squads
extern SOLDIERTYPE *Squad[ NUMBER_OF_SQUADS ][ NUMBER_OF_SOLDIERS_PER_SQUAD ];
extern INT32 iCurrentTacticalSquad;
// will initialize the squad lists for game initalization
void InitSquads( void );
// add character to squad
BOOLEAN AddCharacterToSquad( SOLDIERTYPE *pCharacter, INT8 bSquadValue );
// find the first slot the guy will fit in, return true if he is in a squad or has been put in one
BOOLEAN AddCharacterToAnySquad( SOLDIERTYPE *pCharacter );
// remove character from squads
BOOLEAN RemoveCharacterFromSquads( SOLDIERTYPE *pCharacter );
// remove character from a squad
BOOLEAN RemoveCharacterFromASquad( SOLDIERTYPE *pCharacter, INT8 bSquadValue );
// check if character is in this squad
BOOLEAN IsCharacterInSquad( SOLDIERTYPE *pCharacter, INT8 bSquadValue );
// return which squad character is in, -1 if none found
INT8 SquadCharacterIsIn( SOLDIERTYPE *pCharacter );
// what slot is character in in this squad?..-1 if not found in squad
INT8 SlotCharacterIsInSquad( SOLDIERTYPE *pCharacter, INT8 bSquadValue );
// return number of people in this squad
INT8 NumberOfPeopleInSquad( INT8 bSquadValue );
INT8 NumberOfNonEPCsInSquad( INT8 bSquadValue );
BOOLEAN IsRobotControllerInSquad( INT8 bSquadValue );
INT8 NumberOfPlayerControllableMercsInSquad( INT8 bSquadValue );
// what sector is the squad currently in?..return if anyone in squad
BOOLEAN SectorSquadIsIn(INT8 bSquadValue, INT16 *sMapX, INT16 *sMapY, INT16 *sMapZ );
// rebuild current squad list
void RebuildCurrentSquad( void );
// copy path of squad to character
BOOLEAN CopyPathOfSquadToCharacter( SOLDIERTYPE *pCharacter, INT8 bSquadValue );
// copy path from character back to squad
BOOLEAN CopyPathOfCharacterToSquad( SOLDIERTYPE *pCharacter, INT8 bSquadValue );
// what is the id of the current squad?
INT32 CurrentSquad( void );
// add character to unique squad (returns the squad #, -1 if failed)
INT8 AddCharacterToUniqueSquad( SOLDIERTYPE *pCharacter );
// resort the squad by ubID
void SortSquadByID( INT8 bSquadValue );
// is this squad empty?
BOOLEAN SquadIsEmpty( INT8 bSquadValue );
// is this squad in the current tactical sector?
BOOLEAN IsSquadOnCurrentTacticalMap( INT32 iCurrentSquad );
// set this squad as the current tatcical squad
BOOLEAN SetCurrentSquad( INT32 iCurrentSquad, BOOLEAN fForce );
// set default squad in sector
void SetDefaultSquadOnSectorEntry( BOOLEAN fForce );
// get last squad that has active mercs
INT32 GetLastSquadActive( void );
// set squads between sector position
void SetSquadPositionBetweenSectors( UINT8 ubNextX, UINT8 ubNextY, UINT8 ubPrevX, UINT8 ubPrevY, UINT32 uiTraverseTime, UINT32 uiArriveTime, UINT8 ubSquadValue );
// get squads between sector positions and times
void GetSquadPosition( UINT8 *ubNextX, UINT8 *ubNextY, UINT8 *ubPrevX, UINT8 *ubPrevY, UINT32 *uiTraverseTime, UINT32 *uiArriveTime, UINT8 ubSquadValue );
void ExamineCurrentSquadLights( void );
// get location of this squad
void GetLocationOfSquad( INT16 *sX, INT16 *sY, INT8 *bZ, INT8 bSquadValue );
//Save the squad information to the saved game file
BOOLEAN SaveSquadInfoToSavedGameFile( HWFILE hFile );
//Load all the squad info from the saved game file
BOOLEAN LoadSquadInfoFromSavedGameFile( HWFILE hFile );
// get squad id of first free squad
INT8 GetFirstEmptySquad( void );
// is this squad in the same sector as soldier?
BOOLEAN IsSquadInSector( SOLDIERTYPE *pSoldier, UINT8 ubSquad );
// is any merc on squad asleep?
BOOLEAN IsAnyMercOnSquadAsleep( UINT8 ubSquadValue );
// is therea dead guy here
BOOLEAN IsDeadGuyInThisSquadSlot( INT8 bSlotId, INT8 bSquadValue , INT8 *bNumberOfDeadGuysSoFar );
// dead soldier was on squad
BOOLEAN SoldierIsDeadAndWasOnSquad( SOLDIERTYPE *pSoldier, INT8 bSquadValue );
// now reset the table for these mercs
BOOLEAN ResetDeadSquadMemberList( INT32 iSquadValue );
// this passed soldier on the current squad int he tactical map
BOOLEAN IsMercOnCurrentSquad( SOLDIERTYPE *pSoldier );
// is this squad filled up?
BOOLEAN IsThisSquadFull( INT8 bSquadValue );
// is this squad moving?
BOOLEAN IsThisSquadOnTheMove( INT8 bSquadValue );
// is there a vehicle in this squad?
BOOLEAN DoesVehicleExistInSquad( INT8 bSquadValue );
// re-create any trashed squad movement groups
void CheckSquadMovementGroups( void );
//SQUAD10: Check for squads that are oversized at current resolution and move them to another squad
void FixOversizedSquadsInSector( void );
#endif