mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@365 3b4a5df2-a311-0410-b5c6-a8a6f20db521
1211 lines
42 KiB
C
1211 lines
42 KiB
C
#ifndef __SOLDER_CONTROL_H
|
|
#define __SOLDER_CONTROL_H
|
|
|
|
|
|
//Kris: November 10, 1997
|
|
//Please don't change this value from 10. It will invalidate all of the maps and soldiers.
|
|
#define MAXPATROLGRIDS 10 // *** THIS IS A DUPLICATION - MUST BE MOVED !
|
|
|
|
#include "Animation Cache.h"
|
|
#include "Timer Control.h"
|
|
#include "vobject.h"
|
|
#include "Overhead Types.h"
|
|
#include "Item Types.h"
|
|
|
|
|
|
// TEMP VALUES FOR NAMES
|
|
#define MAXCIVLASTNAMES 30
|
|
extern UINT16 CivLastNames[MAXCIVLASTNAMES][10];
|
|
|
|
|
|
// ANDREW: these are defines for OKDestanation usage - please move to approprite file
|
|
#define IGNOREPEOPLE 0
|
|
#define PEOPLETOO 1
|
|
#define ALLPEOPLE 2
|
|
#define FALLINGTEST 3
|
|
|
|
#define LOCKED_NO_NEWGRIDNO 2
|
|
|
|
#define NO_PROFILE 200
|
|
|
|
#define BATTLE_SND_LOWER_VOLUME 1
|
|
|
|
#define TAKE_DAMAGE_GUNFIRE 1
|
|
#define TAKE_DAMAGE_BLADE 2
|
|
#define TAKE_DAMAGE_HANDTOHAND 3
|
|
#define TAKE_DAMAGE_FALLROOF 4
|
|
#define TAKE_DAMAGE_BLOODLOSS 5
|
|
#define TAKE_DAMAGE_EXPLOSION 6
|
|
#define TAKE_DAMAGE_ELECTRICITY 7
|
|
#define TAKE_DAMAGE_GAS 8
|
|
#define TAKE_DAMAGE_TENTACLES 9
|
|
#define TAKE_DAMAGE_STRUCTURE_EXPLOSION 10
|
|
#define TAKE_DAMAGE_OBJECT 11
|
|
|
|
|
|
#define SOLDIER_UNBLIT_SIZE (75*75*2)
|
|
|
|
#define SOLDIER_IS_TACTICALLY_VALID 0x00000001
|
|
#define SOLDIER_SHOULD_BE_TACTICALLY_VALID 0x00000002
|
|
#define SOLDIER_MULTI_SELECTED 0x00000004
|
|
#define SOLDIER_PC 0x00000008
|
|
#define SOLDIER_ATTACK_NOTICED 0x00000010
|
|
#define SOLDIER_PCUNDERAICONTROL 0x00000020
|
|
#define SOLDIER_UNDERAICONTROL 0x00000040
|
|
#define SOLDIER_DEAD 0x00000080
|
|
#define SOLDIER_GREEN_RAY 0x00000100
|
|
#define SOLDIER_LOOKFOR_ITEMS 0x00000200
|
|
#define SOLDIER_ENEMY 0x00000400
|
|
#define SOLDIER_ENGAGEDINACTION 0x00000800
|
|
#define SOLDIER_ROBOT 0x00001000
|
|
#define SOLDIER_MONSTER 0x00002000
|
|
#define SOLDIER_ANIMAL 0x00004000
|
|
#define SOLDIER_VEHICLE 0x00008000
|
|
#define SOLDIER_MULTITILE_NZ 0x00010000
|
|
#define SOLDIER_Z 0x00010000
|
|
#define SOLDIER_MULTITILE_Z 0x00020000
|
|
#define SOLDIER_MULTITILE ( SOLDIER_MULTITILE_Z | SOLDIER_MULTITILE_NZ )
|
|
#define SOLDIER_RECHECKLIGHT 0x00040000
|
|
#define SOLDIER_TURNINGFROMHIT 0x00080000
|
|
#define SOLDIER_BOXER 0x00100000
|
|
#define SOLDIER_LOCKPENDINGACTIONCOUNTER 0x00200000
|
|
#define SOLDIER_COWERING 0x00400000
|
|
#define SOLDIER_MUTE 0x00800000
|
|
#define SOLDIER_GASSED 0x01000000
|
|
#define SOLDIER_OFF_MAP 0x02000000
|
|
#define SOLDIER_PAUSEANIMOVE 0x04000000
|
|
#define SOLDIER_DRIVER 0x08000000
|
|
#define SOLDIER_PASSENGER 0x10000000
|
|
#define SOLDIER_NPC_DOING_PUNCH 0x20000000
|
|
#define SOLDIER_NPC_SHOOTING 0x40000000
|
|
#define SOLDIER_LOOK_NEXT_TURNSOLDIER 0x80000000
|
|
|
|
|
|
/*
|
|
#define SOLDIER_TRAIT_LOCKPICKING 0x0001
|
|
#define SOLDIER_TRAIT_HANDTOHAND 0x0002
|
|
#define SOLDIER_TRAIT_ELECTRONICS 0x0004
|
|
#define SOLDIER_TRAIT_NIGHTOPS 0x0008
|
|
#define SOLDIER_TRAIT_THROWING 0x0010
|
|
#define SOLDIER_TRAIT_TEACHING 0x0020
|
|
#define SOLDIER_TRAIT_HEAVY_WEAPS 0x0040
|
|
#define SOLDIER_TRAIT_AUTO_WEAPS 0x0080
|
|
#define SOLDIER_TRAIT_STEALTHY 0x0100
|
|
#define SOLDIER_TRAIT_AMBIDEXT 0x0200
|
|
#define SOLDIER_TRAIT_THIEF 0x0400
|
|
#define SOLDIER_TRAIT_MARTIALARTS 0x0800
|
|
#define SOLDIER_TRAIT_KNIFING 0x1000
|
|
*/
|
|
#define HAS_SKILL_TRAIT( s, t ) (s->ubSkillTrait1 == t || s->ubSkillTrait2 == t)
|
|
#define NUM_SKILL_TRAITS( s, t ) ( (s->ubSkillTrait1 == t) ? ( (s->ubSkillTrait2 == t) ? 2 : 1 ) : ( (s->ubSkillTrait2 == t) ? 1 : 0 ) )
|
|
|
|
#define SOLDIER_QUOTE_SAID_IN_SHIT 0x0001
|
|
#define SOLDIER_QUOTE_SAID_LOW_BREATH 0x0002
|
|
#define SOLDIER_QUOTE_SAID_BEING_PUMMELED 0x0004
|
|
#define SOLDIER_QUOTE_SAID_NEED_SLEEP 0x0008
|
|
#define SOLDIER_QUOTE_SAID_LOW_MORAL 0x0010
|
|
#define SOLDIER_QUOTE_SAID_MULTIPLE_CREATURES 0x0020
|
|
#define SOLDIER_QUOTE_SAID_ANNOYING_MERC 0x0040
|
|
#define SOLDIER_QUOTE_SAID_LIKESGUN 0x0080
|
|
#define SOLDIER_QUOTE_SAID_DROWNING 0x0100
|
|
#define SOLDIER_QUOTE_SAID_ROTTINGCORPSE 0x0200
|
|
#define SOLDIER_QUOTE_SAID_SPOTTING_CREATURE_ATTACK 0x0400
|
|
#define SOLDIER_QUOTE_SAID_SMELLED_CREATURE 0x0800
|
|
#define SOLDIER_QUOTE_SAID_ANTICIPATING_DANGER 0x1000
|
|
#define SOLDIER_QUOTE_SAID_WORRIED_ABOUT_CREATURES 0x2000
|
|
#define SOLDIER_QUOTE_SAID_PERSONALITY 0x4000
|
|
#define SOLDIER_QUOTE_SAID_FOUND_SOMETHING_NICE 0x8000
|
|
|
|
#define SOLDIER_QUOTE_SAID_EXT_HEARD_SOMETHING 0x0001
|
|
#define SOLDIER_QUOTE_SAID_EXT_SEEN_CREATURE_ATTACK 0x0002
|
|
#define SOLDIER_QUOTE_SAID_EXT_USED_BATTLESOUND_HIT 0x0004
|
|
#define SOLDIER_QUOTE_SAID_EXT_CLOSE_CALL 0x0008
|
|
#define SOLDIER_QUOTE_SAID_EXT_MIKE 0x0010
|
|
#define SOLDIER_QUOTE_SAID_DONE_ASSIGNMENT 0x0020
|
|
#define SOLDIER_QUOTE_SAID_BUDDY_1_WITNESSED 0x0040
|
|
#define SOLDIER_QUOTE_SAID_BUDDY_2_WITNESSED 0x0080
|
|
#define SOLDIER_QUOTE_SAID_BUDDY_3_WITNESSED 0x0100
|
|
|
|
|
|
#define SOLDIER_CONTRACT_RENEW_QUOTE_NOT_USED 0
|
|
#define SOLDIER_CONTRACT_RENEW_QUOTE_89_USED 1
|
|
#define SOLDIER_CONTRACT_RENEW_QUOTE_115_USED 2
|
|
|
|
|
|
#define SOLDIER_MISC_HEARD_GUNSHOT 0x01
|
|
// make sure soldiers (esp tanks) are not hurt multiple times by explosions
|
|
#define SOLDIER_MISC_HURT_BY_EXPLOSION 0x02
|
|
// should be revealed due to xrays
|
|
#define SOLDIER_MISC_XRAYED 0x04
|
|
|
|
#define MAXBLOOD 40
|
|
#define NOBLOOD MAXBLOOD
|
|
#define BLOODTIME 5
|
|
#define FOOTPRINTTIME 2
|
|
#define MIN_BLEEDING_THRESHOLD 12 // you're OK while <4 Yellow life bars
|
|
|
|
#define BANDAGED( s ) (s->bLifeMax - s->bLife - s->bBleeding)
|
|
|
|
// amount of time a stats is to be displayed differently, due to change
|
|
#define CHANGE_STAT_RECENTLY_DURATION 60000
|
|
|
|
// MACROS
|
|
// #######################################################
|
|
|
|
#define NO_PENDING_ACTION 255
|
|
#define NO_PENDING_ANIMATION 32001
|
|
#define NO_PENDING_DIRECTION 253
|
|
#define NO_PENDING_STANCE 254
|
|
#define NO_DESIRED_HEIGHT 255
|
|
|
|
#define MAX_FULLTILE_DIRECTIONS 3
|
|
|
|
//DIGICRAB: Burst UnCap
|
|
//move the size of the spread target buffer to a define
|
|
//so that we can increase it if we can stand breaking the saves
|
|
#define MAX_BURST_SPREAD_TARGETS 6
|
|
|
|
//ENUMERATIONS FOR ACTIONS
|
|
enum
|
|
{
|
|
MERC_OPENDOOR,
|
|
MERC_OPENSTRUCT,
|
|
MERC_PICKUPITEM,
|
|
MERC_PUNCH,
|
|
MERC_KNIFEATTACK,
|
|
MERC_GIVEAID,
|
|
MERC_GIVEITEM,
|
|
MERC_WAITFOROTHERSTOTRIGGER,
|
|
MERC_CUTFFENCE,
|
|
MERC_DROPBOMB,
|
|
MERC_STEAL,
|
|
MERC_TALK,
|
|
MERC_ENTER_VEHICLE,
|
|
MERC_REPAIR,
|
|
MERC_RELOADROBOT,
|
|
MERC_TAKEBLOOD,
|
|
MERC_ATTACH_CAN,
|
|
MERC_FUEL_VEHICLE,
|
|
};
|
|
|
|
// ENUMERATIONS FOR THROW ACTIONS
|
|
enum
|
|
{
|
|
NO_THROW_ACTION,
|
|
THROW_ARM_ITEM,
|
|
THROW_TARGET_MERC_CATCH,
|
|
};
|
|
|
|
// An enumeration for playing battle sounds
|
|
enum
|
|
{
|
|
BATTLE_SOUND_OK1,
|
|
BATTLE_SOUND_OK2,
|
|
BATTLE_SOUND_COOL1,
|
|
BATTLE_SOUND_CURSE1,
|
|
BATTLE_SOUND_HIT1,
|
|
BATTLE_SOUND_HIT2,
|
|
BATTLE_SOUND_LAUGH1,
|
|
BATTLE_SOUND_ATTN1,
|
|
BATTLE_SOUND_DIE1,
|
|
BATTLE_SOUND_HUMM,
|
|
BATTLE_SOUND_NOTHING,
|
|
BATTLE_SOUND_GOTIT,
|
|
BATTLE_SOUND_LOWMARALE_OK1,
|
|
BATTLE_SOUND_LOWMARALE_OK2,
|
|
BATTLE_SOUND_LOWMARALE_ATTN1,
|
|
BATTLE_SOUND_LOCKED,
|
|
BATTLE_SOUND_ENEMY,
|
|
NUM_MERC_BATTLE_SOUNDS
|
|
};
|
|
|
|
|
|
//different kinds of merc
|
|
enum
|
|
{
|
|
MERC_TYPE__PLAYER_CHARACTER,
|
|
MERC_TYPE__AIM_MERC,
|
|
MERC_TYPE__MERC,
|
|
MERC_TYPE__NPC,
|
|
MERC_TYPE__EPC,
|
|
MERC_TYPE__NPC_WITH_UNEXTENDABLE_CONTRACT,
|
|
MERC_TYPE__VEHICLE,
|
|
};
|
|
|
|
// I don't care if this isn't intuitive! The hand positions go right
|
|
// before the big pockets so we can loop through them that way. --CJC
|
|
#define NO_SLOT -1
|
|
|
|
// vehicle/human path structure
|
|
struct path
|
|
{
|
|
UINT32 uiSectorId;
|
|
UINT32 uiEta;
|
|
BOOLEAN fSpeed;
|
|
struct path *pNext;
|
|
struct path *pPrev;
|
|
};
|
|
|
|
|
|
|
|
typedef struct path PathSt;
|
|
typedef PathSt *PathStPtr;
|
|
enum {
|
|
HELMETPOS = 0,
|
|
VESTPOS,
|
|
LEGPOS,
|
|
HEAD1POS,
|
|
HEAD2POS,
|
|
HANDPOS,
|
|
SECONDHANDPOS,
|
|
BIGPOCK1POS,
|
|
BIGPOCK2POS,
|
|
BIGPOCK3POS,
|
|
BIGPOCK4POS,
|
|
SMALLPOCK1POS,
|
|
SMALLPOCK2POS,
|
|
SMALLPOCK3POS,
|
|
SMALLPOCK4POS,
|
|
SMALLPOCK5POS,
|
|
SMALLPOCK6POS,
|
|
SMALLPOCK7POS,
|
|
SMALLPOCK8POS, // = 18, so 19 pockets needed
|
|
|
|
NUM_INV_SLOTS,
|
|
};
|
|
|
|
//used for color codes, but also shows the enemy type for debugging purposes
|
|
enum
|
|
{
|
|
SOLDIER_CLASS_NONE,
|
|
SOLDIER_CLASS_ADMINISTRATOR,
|
|
SOLDIER_CLASS_ELITE,
|
|
SOLDIER_CLASS_ARMY,
|
|
SOLDIER_CLASS_GREEN_MILITIA,
|
|
SOLDIER_CLASS_REG_MILITIA,
|
|
SOLDIER_CLASS_ELITE_MILITIA,
|
|
SOLDIER_CLASS_CREATURE,
|
|
SOLDIER_CLASS_MINER,
|
|
};
|
|
|
|
#define SOLDIER_CLASS_ENEMY( bSoldierClass ) ( ( bSoldierClass >= SOLDIER_CLASS_ADMINISTRATOR ) && ( bSoldierClass <= SOLDIER_CLASS_ARMY ) )
|
|
#define SOLDIER_CLASS_MILITIA( bSoldierClass ) ( ( bSoldierClass >= SOLDIER_CLASS_GREEN_MILITIA ) && ( bSoldierClass <= SOLDIER_CLASS_ELITE_MILITIA ) )
|
|
|
|
// This macro should be used whenever we want to see if someone is neutral
|
|
// IF WE ARE CONSIDERING ATTACKING THEM. Creatures & bloodcats will attack neutrals
|
|
// but they can't attack empty vehicles!!
|
|
#define CONSIDERED_NEUTRAL( me, them ) ( (them->bNeutral) && ( me->bTeam != CREATURE_TEAM || (them->uiStatusFlags & SOLDIER_VEHICLE) ) )
|
|
|
|
typedef struct
|
|
{
|
|
UINT8 ubKeyID;
|
|
UINT8 ubNumber;
|
|
} KEY_ON_RING;
|
|
|
|
typedef struct
|
|
{
|
|
float dX;
|
|
float dY;
|
|
float dZ;
|
|
float dForceX;
|
|
float dForceY;
|
|
float dForceZ;
|
|
float dLifeSpan;
|
|
UINT8 ubActionCode;
|
|
UINT32 uiActionData;
|
|
|
|
} THROW_PARAMS;
|
|
|
|
#define DELAYED_MOVEMENT_FLAG_PATH_THROUGH_PEOPLE 0x01
|
|
|
|
// reasons for being unable to continue movement
|
|
enum
|
|
{
|
|
REASON_STOPPED_NO_APS,
|
|
REASON_STOPPED_SIGHT,
|
|
};
|
|
|
|
|
|
enum
|
|
{
|
|
HIT_BY_TEARGAS = 0x01,
|
|
HIT_BY_MUSTARDGAS = 0x02,
|
|
HIT_BY_CREATUREGAS = 0x04,
|
|
HIT_BY_BURNABLEGAS = 0x08,
|
|
};
|
|
|
|
|
|
typedef struct
|
|
{
|
|
// ID
|
|
UINT8 ubID;
|
|
UINT8 bReserved1;
|
|
|
|
// DESCRIPTION / STATS, ETC
|
|
UINT8 ubBodyType;
|
|
INT8 bActionPoints;
|
|
INT8 bInitialActionPoints;
|
|
|
|
UINT32 uiStatusFlags;
|
|
|
|
OBJECTTYPE inv[ NUM_INV_SLOTS ];
|
|
OBJECTTYPE *pTempObject;
|
|
KEY_ON_RING *pKeyRing;
|
|
|
|
INT8 bOldLife; // life at end of last turn, recorded for monster AI
|
|
// attributes
|
|
UINT8 bInSector;
|
|
INT8 bFlashPortraitFrame;
|
|
INT16 sFractLife; // fraction of life pts (in hundreths)
|
|
INT8 bBleeding; // blood loss control variable
|
|
INT8 bBreath; // current breath value
|
|
INT8 bBreathMax; // max breath, affected by fatigue/sleep
|
|
INT8 bStealthMode;
|
|
|
|
INT16 sBreathRed; // current breath value
|
|
BOOLEAN fDelayedMovement;
|
|
|
|
BOOLEAN fReloading;
|
|
UINT8 ubWaitActionToDo;
|
|
BOOLEAN fPauseAim;
|
|
INT8 ubInsertionDirection;
|
|
INT8 bGunType;
|
|
// skills
|
|
UINT8 ubOppNum;
|
|
INT8 bLastRenderVisibleValue;
|
|
BOOLEAN fInMissionExitNode;
|
|
UINT8 ubAttackingHand;
|
|
INT8 bScientific;
|
|
// traits
|
|
INT16 sWeightCarriedAtTurnStart;
|
|
UINT16 name[ 10 ];
|
|
|
|
INT8 bVisible; // to render or not to render...
|
|
|
|
|
|
INT8 bActive;
|
|
|
|
INT8 bTeam; // Team identifier
|
|
|
|
//NEW MOVEMENT INFORMATION for Strategic Movement
|
|
UINT8 ubGroupID; //the movement group the merc is currently part of.
|
|
BOOLEAN fBetweenSectors; //set when the group isn't actually in a sector.
|
|
//sSectorX and sSectorY will reflect the sector the
|
|
//merc was at last.
|
|
|
|
UINT8 ubMovementNoiseHeard;// 8 flags by direction
|
|
|
|
// 23 bytes so far
|
|
|
|
// WORLD POSITION STUFF
|
|
FLOAT dXPos;
|
|
FLOAT dYPos;
|
|
FLOAT dOldXPos;
|
|
FLOAT dOldYPos;
|
|
INT16 sInitialGridNo;
|
|
INT16 sGridNo;
|
|
INT8 bDirection;
|
|
INT16 sHeightAdjustment;
|
|
INT16 sDesiredHeight;
|
|
INT16 sTempNewGridNo; // New grid no for advanced animations
|
|
INT16 sRoomNo;
|
|
INT8 bOverTerrainType;
|
|
INT8 bOldOverTerrainType;
|
|
|
|
INT8 bCollapsed; // collapsed due to being out of APs
|
|
INT8 bBreathCollapsed; // collapsed due to being out of APs
|
|
// 50 bytes so far
|
|
|
|
|
|
UINT8 ubDesiredHeight;
|
|
UINT16 usPendingAnimation;
|
|
UINT8 ubPendingStanceChange;
|
|
UINT16 usAnimState;
|
|
BOOLEAN fNoAPToFinishMove;
|
|
BOOLEAN fPausedMove;
|
|
BOOLEAN fUIdeadMerc; // UI Flags for removing a newly dead merc
|
|
BOOLEAN fUInewMerc; // UI Flags for adding newly created merc ( panels, etc )
|
|
BOOLEAN fUICloseMerc; // UI Flags for closing panels
|
|
BOOLEAN fUIFirstTimeNOAP; // UI Flag for diming guys when no APs ( dirty flags )
|
|
BOOLEAN fUIFirstTimeUNCON; // UI FLAG For unconscious dirty
|
|
|
|
|
|
|
|
TIMECOUNTER UpdateCounter;
|
|
TIMECOUNTER DamageCounter;
|
|
TIMECOUNTER ReloadCounter;
|
|
TIMECOUNTER FlashSelCounter;
|
|
TIMECOUNTER AICounter;
|
|
TIMECOUNTER FadeCounter;
|
|
|
|
UINT8 ubSkillTrait1;
|
|
UINT8 ubSkillTrait2;
|
|
|
|
UINT32 uiAIDelay;
|
|
INT8 bDexterity; // dexterity (hand coord) value
|
|
INT8 bWisdom;
|
|
INT16 sReloadDelay;
|
|
UINT8 ubAttackerID;
|
|
UINT8 ubPreviousAttackerID;
|
|
BOOLEAN fTurnInProgress;
|
|
|
|
BOOLEAN fIntendedTarget; // intentionally shot?
|
|
BOOLEAN fPauseAllAnimation;
|
|
|
|
INT8 bExpLevel; // general experience level
|
|
INT16 sInsertionGridNo;
|
|
|
|
BOOLEAN fContinueMoveAfterStanceChange;
|
|
|
|
// 60
|
|
AnimationSurfaceCacheType AnimCache; // will be 9 bytes once changed to pointers
|
|
|
|
INT8 bLife; // current life (hit points or health)
|
|
UINT8 bSide;
|
|
UINT8 bViewRange;
|
|
INT8 bNewOppCnt;
|
|
INT8 bService; // first aid, or other time consuming process
|
|
|
|
UINT16 usAniCode;
|
|
UINT16 usAniFrame;
|
|
INT16 sAniDelay;
|
|
|
|
// MOVEMENT TO NEXT TILE HANDLING STUFF
|
|
INT8 bAgility; // agility (speed) value
|
|
UINT8 ubDelayedMovementCauseMerc;
|
|
INT16 sDelayedMovementCauseGridNo;
|
|
INT16 sReservedMovementGridNo;
|
|
|
|
INT8 bStrength;
|
|
|
|
// Weapon Stuff
|
|
BOOLEAN fHoldAttackerUntilDone;
|
|
INT16 sTargetGridNo;
|
|
INT8 bTargetLevel;
|
|
INT8 bTargetCubeLevel;
|
|
INT16 sLastTarget;
|
|
INT8 bTilesMoved;
|
|
INT8 bLeadership;
|
|
FLOAT dNextBleed;
|
|
BOOLEAN fWarnedAboutBleeding;
|
|
BOOLEAN fDyingComment;
|
|
|
|
UINT8 ubTilesMovedPerRTBreathUpdate;
|
|
UINT16 usLastMovementAnimPerRTBreathUpdate;
|
|
|
|
BOOLEAN fTurningToShoot;
|
|
BOOLEAN fTurningToFall;
|
|
BOOLEAN fTurningUntilDone;
|
|
BOOLEAN fGettingHit;
|
|
BOOLEAN fInNonintAnim;
|
|
BOOLEAN fFlashLocator;
|
|
INT16 sLocatorFrame;
|
|
BOOLEAN fShowLocator;
|
|
BOOLEAN fFlashPortrait;
|
|
INT8 bMechanical;
|
|
INT8 bLifeMax; // maximum life for this merc
|
|
|
|
INT32 iFaceIndex;
|
|
|
|
|
|
// PALETTE MANAGEMENT STUFF
|
|
PaletteRepID HeadPal; // 30
|
|
PaletteRepID PantsPal; // 30
|
|
PaletteRepID VestPal; // 30
|
|
PaletteRepID SkinPal; // 30
|
|
PaletteRepID MiscPal; // 30
|
|
|
|
|
|
// FULL 3-d TILE STUFF ( keep records of three tiles infront )
|
|
UINT16 usFrontArcFullTileList[ MAX_FULLTILE_DIRECTIONS ];
|
|
INT16 usFrontArcFullTileGridNos[ MAX_FULLTILE_DIRECTIONS ];
|
|
|
|
|
|
SGPPaletteEntry *p8BPPPalette; // 4
|
|
UINT16 *p16BPPPalette;
|
|
UINT16 *pShades[ NUM_SOLDIER_SHADES ]; // Shading tables
|
|
UINT16 *pGlowShades[ 20 ]; //
|
|
UINT16 *pCurrentShade;
|
|
INT8 bMedical;
|
|
BOOLEAN fBeginFade;
|
|
UINT8 ubFadeLevel;
|
|
UINT8 ubServiceCount;
|
|
UINT8 ubServicePartner;
|
|
INT8 bMarksmanship;
|
|
INT8 bExplosive;
|
|
THROW_PARAMS *pThrowParams;
|
|
BOOLEAN fTurningFromPronePosition;
|
|
INT8 bReverse;
|
|
struct TAG_level_node *pLevelNode;
|
|
struct TAG_level_node *pExternShadowLevelNode;
|
|
struct TAG_level_node *pRoofUILevelNode;
|
|
|
|
// WALKING STUFF
|
|
INT8 bDesiredDirection;
|
|
INT16 sDestXPos;
|
|
INT16 sDestYPos;
|
|
INT16 sDesiredDest;
|
|
INT16 sDestination;
|
|
INT16 sFinalDestination;
|
|
INT8 bLevel;
|
|
INT8 bStopped;
|
|
INT8 bNeedToLook;
|
|
|
|
|
|
|
|
|
|
// PATH STUFF
|
|
UINT16 usPathingData[ MAX_PATH_LIST_SIZE ];
|
|
UINT16 usPathDataSize;
|
|
UINT16 usPathIndex;
|
|
INT16 sBlackList;
|
|
INT8 bAimTime;
|
|
INT8 bShownAimTime;
|
|
INT8 bPathStored; // good for AI to reduct redundancy
|
|
INT8 bHasKeys; // allows AI controlled dudes to open locked doors
|
|
|
|
|
|
// UNBLIT BACKGROUND
|
|
UINT16 *pBackGround;
|
|
UINT16 *pZBackground;
|
|
UINT16 usUnblitX, usUnblitY;
|
|
UINT16 usUnblitWidth, usUnblitHeight;
|
|
|
|
UINT8 ubStrategicInsertionCode;
|
|
UINT16 usStrategicInsertionData;
|
|
|
|
|
|
INT32 iLight;
|
|
INT32 iMuzFlash;
|
|
INT8 bMuzFlashCount;
|
|
|
|
|
|
INT16 sX;
|
|
INT16 sY;
|
|
|
|
UINT16 usOldAniState;
|
|
INT16 sOldAniCode;
|
|
|
|
INT8 bBulletsLeft;
|
|
UINT8 ubSuppressionPoints;
|
|
|
|
// STUFF FOR RANDOM ANIMATIONS
|
|
UINT32 uiTimeOfLastRandomAction;
|
|
INT16 usLastRandomAnim;
|
|
|
|
|
|
// AI STUFF
|
|
INT8 bOppList[MAX_NUM_SOLDIERS]; // AI knowledge database
|
|
INT8 bLastAction;
|
|
INT8 bAction;
|
|
UINT16 usActionData;
|
|
INT8 bNextAction;
|
|
UINT16 usNextActionData;
|
|
INT8 bActionInProgress;
|
|
INT8 bAlertStatus;
|
|
INT8 bOppCnt;
|
|
INT8 bNeutral;
|
|
INT8 bNewSituation;
|
|
INT8 bNextTargetLevel;
|
|
INT8 bOrders;
|
|
INT8 bAttitude;
|
|
INT8 bUnderFire;
|
|
INT8 bShock;
|
|
INT8 bUnderEscort;
|
|
INT8 bBypassToGreen;
|
|
UINT8 ubLastMercToRadio;
|
|
INT8 bDominantDir; // AI main direction to face...
|
|
INT8 bPatrolCnt; // number of patrol gridnos
|
|
INT8 bNextPatrolPnt; // index to next patrol gridno
|
|
INT16 usPatrolGrid[MAXPATROLGRIDS];// AI list for ptr->orders==PATROL
|
|
INT16 sNoiseGridno;
|
|
UINT8 ubNoiseVolume;
|
|
INT8 bLastAttackHit;
|
|
UINT8 ubXRayedBy;
|
|
FLOAT dHeightAdjustment;
|
|
INT8 bMorale;
|
|
INT8 bTeamMoraleMod;
|
|
INT8 bTacticalMoraleMod;
|
|
INT8 bStrategicMoraleMod;
|
|
INT8 bAIMorale;
|
|
UINT8 ubPendingAction;
|
|
UINT8 ubPendingActionAnimCount;
|
|
UINT32 uiPendingActionData1;
|
|
INT16 sPendingActionData2;
|
|
INT8 bPendingActionData3;
|
|
INT8 ubDoorHandleCode;
|
|
UINT32 uiPendingActionData4;
|
|
INT8 bInterruptDuelPts;
|
|
INT8 bPassedLastInterrupt;
|
|
INT8 bIntStartAPs;
|
|
INT8 bMoved;
|
|
INT8 bHunting;
|
|
UINT8 ubLastCall;
|
|
UINT8 ubCaller;
|
|
INT16 sCallerGridNo;
|
|
UINT8 bCallPriority;
|
|
INT8 bCallActedUpon;
|
|
INT8 bFrenzied;
|
|
INT8 bNormalSmell;
|
|
INT8 bMonsterSmell;
|
|
INT8 bMobility;
|
|
INT8 bRTPCombat;
|
|
INT8 fAIFlags;
|
|
|
|
BOOLEAN fDontChargeReadyAPs;
|
|
UINT16 usAnimSurface;
|
|
UINT16 sZLevel;
|
|
BOOLEAN fPrevInWater;
|
|
BOOLEAN fGoBackToAimAfterHit;
|
|
|
|
INT16 sWalkToAttackGridNo;
|
|
INT16 sWalkToAttackWalkToCost;
|
|
|
|
BOOLEAN fForceRenderColor;
|
|
BOOLEAN fForceNoRenderPaletteCycle;
|
|
|
|
INT16 sLocatorOffX;
|
|
INT16 sLocatorOffY;
|
|
BOOLEAN fStopPendingNextTile;
|
|
|
|
BOOLEAN fForceShade;
|
|
UINT16 *pForcedShade;
|
|
|
|
INT8 bDisplayDamageCount;
|
|
INT8 fDisplayDamage;
|
|
INT16 sDamage;
|
|
INT16 sDamageX;
|
|
INT16 sDamageY;
|
|
INT8 bDamageDir;
|
|
INT8 bDoBurst;
|
|
INT16 usUIMovementMode;
|
|
INT8 bUIInterfaceLevel;
|
|
BOOLEAN fUIMovementFast;
|
|
|
|
TIMECOUNTER BlinkSelCounter;
|
|
TIMECOUNTER PortraitFlashCounter;
|
|
BOOLEAN fDeadSoundPlayed;
|
|
UINT8 ubProfile;
|
|
UINT8 ubQuoteRecord;
|
|
UINT8 ubQuoteActionID;
|
|
UINT8 ubBattleSoundID;
|
|
|
|
BOOLEAN fClosePanel;
|
|
BOOLEAN fClosePanelToDie;
|
|
UINT8 ubClosePanelFrame;
|
|
BOOLEAN fDeadPanel;
|
|
UINT8 ubDeadPanelFrame;
|
|
BOOLEAN fOpenPanel;
|
|
INT8 bOpenPanelFrame;
|
|
|
|
INT16 sPanelFaceX;
|
|
INT16 sPanelFaceY;
|
|
|
|
// QUOTE STUFF
|
|
INT8 bNumHitsThisTurn;
|
|
UINT16 usQuoteSaidFlags;
|
|
INT8 fCloseCall;
|
|
INT8 bLastSkillCheck;
|
|
INT8 ubSkillCheckAttempts;
|
|
|
|
INT8 bVocalVolume; // verbal sounds need to differ in volume
|
|
|
|
INT8 bStartFallDir;
|
|
INT8 fTryingToFall;
|
|
|
|
UINT8 ubPendingDirection;
|
|
UINT32 uiAnimSubFlags;
|
|
|
|
UINT8 bAimShotLocation;
|
|
UINT8 ubHitLocation;
|
|
|
|
UINT16 *pEffectShades[ NUM_SOLDIER_EFFECTSHADES ]; // Shading tables for effects
|
|
|
|
UINT8 ubPlannedUIAPCost;
|
|
INT16 sPlannedTargetX;
|
|
INT16 sPlannedTargetY;
|
|
|
|
INT16 sSpreadLocations[ MAX_BURST_SPREAD_TARGETS ];
|
|
BOOLEAN fDoSpread;
|
|
INT16 sStartGridNo;
|
|
INT16 sEndGridNo;
|
|
INT16 sForcastGridno;
|
|
INT16 sZLevelOverride;
|
|
INT8 bMovedPriorToInterrupt;
|
|
INT32 iEndofContractTime; // time, in global time(resolution, minutes) that merc will leave, or if its a M.E.R.C. merc it will be set to -1. -2 for NPC and player generated
|
|
INT32 iStartContractTime;
|
|
INT32 iTotalContractLength; // total time of AIM mercs contract or the time since last paid for a M.E.R.C. merc
|
|
INT32 iNextActionSpecialData; // AI special action data record for the next action
|
|
UINT8 ubWhatKindOfMercAmI; //Set to the type of character it is
|
|
INT8 bAssignment; // soldiers current assignment
|
|
INT8 bOldAssignment; // old assignment, for autosleep purposes
|
|
BOOLEAN fForcedToStayAwake; // forced by player to stay awake, reset to false, the moment they are set to rest or sleep
|
|
INT8 bTrainStat; // current stat soldier is training
|
|
INT16 sSectorX; // X position on the Stategic Map
|
|
INT16 sSectorY; // Y position on the Stategic Map
|
|
INT8 bSectorZ; // Z sector location
|
|
INT32 iVehicleId; // the id of the vehicle the char is in
|
|
PathStPtr pMercPath; //Path Structure
|
|
UINT8 fHitByGasFlags; // flags
|
|
UINT16 usMedicalDeposit; // is there a medical deposit on merc
|
|
UINT16 usLifeInsurance; // is there life insurance taken out on merc
|
|
|
|
|
|
//DEF: Used for the communications
|
|
UINT32 uiStartMovementTime; // the time since the merc first started moving
|
|
UINT32 uiOptimumMovementTime; // everytime in ececute overhead the time for the current ani will be added to this total
|
|
UINT32 usLastUpdateTime ; // The last time the soldier was in ExecuteOverhead
|
|
|
|
BOOLEAN fIsSoldierMoving; // ie. Record time is on
|
|
BOOLEAN fIsSoldierDelayed; //Is the soldier delayed Soldier
|
|
BOOLEAN fSoldierUpdatedFromNetwork;
|
|
UINT32 uiSoldierUpdateNumber;
|
|
BYTE ubSoldierUpdateType;
|
|
//END
|
|
|
|
INT32 iStartOfInsuranceContract;
|
|
UINT32 uiLastAssignmentChangeMin; // timestamp of last assignment change in minutes
|
|
INT32 iTotalLengthOfInsuranceContract;
|
|
|
|
UINT8 ubSoldierClass; //admin, elite, troop (creature types?)
|
|
UINT8 ubAPsLostToSuppression;
|
|
BOOLEAN fChangingStanceDueToSuppression;
|
|
UINT8 ubSuppressorID;
|
|
|
|
//Squad merging vars
|
|
UINT8 ubDesiredSquadAssignment;
|
|
UINT8 ubNumTraversalsAllowedToMerge;
|
|
|
|
UINT16 usPendingAnimation2;
|
|
UINT8 ubCivilianGroup;
|
|
|
|
// time changes...when a stat was changed according to GetJA2Clock();
|
|
UINT32 uiChangeLevelTime;
|
|
UINT32 uiChangeHealthTime;
|
|
UINT32 uiChangeStrengthTime;
|
|
UINT32 uiChangeDexterityTime;
|
|
UINT32 uiChangeAgilityTime;
|
|
UINT32 uiChangeWisdomTime;
|
|
UINT32 uiChangeLeadershipTime;
|
|
UINT32 uiChangeMarksmanshipTime;
|
|
UINT32 uiChangeExplosivesTime;
|
|
UINT32 uiChangeMedicalTime;
|
|
UINT32 uiChangeMechanicalTime;
|
|
|
|
UINT32 uiUniqueSoldierIdValue; // the unique value every instance of a soldier gets - 1 is the first valid value
|
|
INT8 bBeingAttackedCount; // Being attacked counter
|
|
|
|
INT8 bNewItemCount[ NUM_INV_SLOTS ];
|
|
INT8 bNewItemCycleCount[ NUM_INV_SLOTS ];
|
|
BOOLEAN fCheckForNewlyAddedItems;
|
|
INT8 bEndDoorOpenCode;
|
|
|
|
UINT8 ubScheduleID;
|
|
INT16 sEndDoorOpenCodeData;
|
|
TIMECOUNTER NextTileCounter;
|
|
BOOLEAN fBlockedByAnotherMerc;
|
|
INT8 bBlockedByAnotherMercDirection;
|
|
UINT16 usAttackingWeapon;
|
|
INT8 bWeaponMode;
|
|
UINT8 ubTargetID;
|
|
INT8 bAIScheduleProgress;
|
|
INT16 sOffWorldGridNo;
|
|
struct TAG_anitile *pAniTile;
|
|
INT8 bCamo;
|
|
INT16 sAbsoluteFinalDestination;
|
|
UINT8 ubHiResDirection;
|
|
UINT8 ubHiResDesiredDirection;
|
|
UINT8 ubLastFootPrintSound;
|
|
INT8 bVehicleID;
|
|
INT8 fPastXDest;
|
|
INT8 fPastYDest;
|
|
INT8 bMovementDirection;
|
|
INT16 sOldGridNo;
|
|
UINT16 usDontUpdateNewGridNoOnMoveAnimChange;
|
|
INT16 sBoundingBoxWidth;
|
|
INT16 sBoundingBoxHeight;
|
|
INT16 sBoundingBoxOffsetX;
|
|
INT16 sBoundingBoxOffsetY;
|
|
UINT32 uiTimeSameBattleSndDone;
|
|
INT8 bOldBattleSnd;
|
|
BOOLEAN fReactingFromBeingShot;
|
|
BOOLEAN fContractPriceHasIncreased;
|
|
INT32 iBurstSoundID;
|
|
BOOLEAN fFixingSAMSite;
|
|
BOOLEAN fFixingRobot;
|
|
INT8 bSlotItemTakenFrom;
|
|
BOOLEAN fSignedAnotherContract;
|
|
UINT8 ubAutoBandagingMedic;
|
|
BOOLEAN fDontChargeTurningAPs;
|
|
UINT8 ubRobotRemoteHolderID;
|
|
UINT32 uiTimeOfLastContractUpdate;
|
|
INT8 bTypeOfLastContract;
|
|
INT8 bTurnsCollapsed;
|
|
INT8 bSleepDrugCounter;
|
|
UINT8 ubMilitiaKills;
|
|
|
|
INT8 bFutureDrugEffect[2]; // value to represent effect of a needle
|
|
INT8 bDrugEffectRate[2]; // represents rate of increase and decrease of effect
|
|
INT8 bDrugEffect[2]; // value that affects AP & morale calc ( -ve is poorly )
|
|
INT8 bDrugSideEffectRate[2]; // duration of negative AP and morale effect
|
|
INT8 bDrugSideEffect[2]; // duration of negative AP and morale effect
|
|
INT8 bTimesDrugUsedSinceSleep[2];
|
|
|
|
INT8 bBlindedCounter;
|
|
BOOLEAN fMercCollapsedFlag;
|
|
BOOLEAN fDoneAssignmentAndNothingToDoFlag;
|
|
BOOLEAN fMercAsleep;
|
|
BOOLEAN fDontChargeAPsForStanceChange;
|
|
|
|
UINT8 ubHoursOnAssignment; // used for assignments handled only every X hours
|
|
|
|
UINT8 ubMercJustFired; // the merc was just fired..there may be dialogue events occuring, this flag will prevent any interaction with contracts
|
|
// until after the merc leaves
|
|
UINT8 ubTurnsUntilCanSayHeardNoise;
|
|
UINT16 usQuoteSaidExtFlags;
|
|
|
|
UINT16 sContPathLocation;
|
|
INT8 bGoodContPath;
|
|
UINT8 ubPendingActionInterrupted;
|
|
INT8 bNoiseLevel;
|
|
INT8 bRegenerationCounter;
|
|
INT8 bRegenBoostersUsedToday;
|
|
INT8 bNumPelletsHitBy;
|
|
INT16 sSkillCheckGridNo;
|
|
UINT8 ubLastEnemyCycledID;
|
|
|
|
UINT8 ubPrevSectorID;
|
|
UINT8 ubNumTilesMovesSinceLastForget;
|
|
INT8 bTurningIncrement;
|
|
UINT32 uiBattleSoundID;
|
|
|
|
BOOLEAN fSoldierWasMoving;
|
|
BOOLEAN fSayAmmoQuotePending;
|
|
UINT16 usValueGoneUp;
|
|
|
|
UINT8 ubNumLocateCycles;
|
|
UINT8 ubDelayedMovementFlags;
|
|
BOOLEAN fMuzzleFlash;
|
|
UINT8 ubCTGTTargetID;
|
|
|
|
TIMECOUNTER PanelAnimateCounter;
|
|
UINT32 uiMercChecksum;
|
|
|
|
INT8 bCurrentCivQuote;
|
|
INT8 bCurrentCivQuoteDelta;
|
|
UINT8 ubMiscSoldierFlags;
|
|
UINT8 ubReasonCantFinishMove;
|
|
|
|
INT16 sLocationOfFadeStart;
|
|
UINT8 bUseExitGridForReentryDirection;
|
|
|
|
UINT32 uiTimeSinceLastSpoke;
|
|
UINT8 ubContractRenewalQuoteCode;
|
|
INT16 sPreTraversalGridNo;
|
|
UINT32 uiXRayActivatedTime;
|
|
INT8 bTurningFromUI;
|
|
INT8 bPendingActionData5;
|
|
|
|
INT8 bDelayedStrategicMoraleMod;
|
|
UINT8 ubDoorOpeningNoise;
|
|
|
|
struct GROUP *pGroup;
|
|
UINT8 ubLeaveHistoryCode;
|
|
BOOLEAN fDontUnsetLastTargetFromTurn;
|
|
INT8 bOverrideMoveSpeed;
|
|
BOOLEAN fUseMoverrideMoveSpeed;
|
|
|
|
UINT32 uiTimeSoldierWillArrive;
|
|
BOOLEAN fDieSoundUsed;
|
|
BOOLEAN fUseLandingZoneForArrival;
|
|
BOOLEAN fFallClockwise;
|
|
INT8 bVehicleUnderRepairID;
|
|
INT32 iTimeCanSignElsewhere;
|
|
INT8 bHospitalPriceModifier;
|
|
INT8 bFillerBytes[3];
|
|
UINT32 uiStartTimeOfInsuranceContract;
|
|
BOOLEAN fRTInNonintAnim;
|
|
BOOLEAN fDoingExternalDeath;
|
|
INT8 bCorpseQuoteTolerance;
|
|
INT8 bYetAnotherPaddingSpace;
|
|
INT32 iPositionSndID;
|
|
INT32 iTuringSoundID;
|
|
UINT8 ubLastDamageReason;
|
|
BOOLEAN fComplainedThatTired;
|
|
INT16 sLastTwoLocations[2];
|
|
INT16 bFillerDude;
|
|
INT32 uiTimeSinceLastBleedGrunt;
|
|
UINT8 ubNextToPreviousAttackerID;
|
|
UINT8 bDoAutofire;
|
|
BOOLEAN autofireLastStep;
|
|
INT8 numFlanks;
|
|
INT16 lastFlankSpot;
|
|
BOOLEAN lastFlankLeft;
|
|
INT8 sniper;
|
|
INT16 origDir;
|
|
INT16 wornCamo;
|
|
UINT8 bFiller[ 41 ];
|
|
|
|
} SOLDIERTYPE;
|
|
|
|
#define HEALTH_INCREASE 0x0001
|
|
#define STRENGTH_INCREASE 0x0002
|
|
#define DEX_INCREASE 0x0004
|
|
#define AGIL_INCREASE 0x0008
|
|
#define WIS_INCREASE 0x0010
|
|
#define LDR_INCREASE 0x0020
|
|
|
|
#define MRK_INCREASE 0x0040
|
|
#define MED_INCREASE 0x0080
|
|
#define EXP_INCREASE 0x0100
|
|
#define MECH_INCREASE 0x0200
|
|
|
|
#define LVL_INCREASE 0x0400
|
|
|
|
|
|
enum WeaponModes
|
|
{
|
|
WM_NORMAL = 0,
|
|
WM_BURST,
|
|
WM_AUTOFIRE,
|
|
WM_ATTACHED_GL,
|
|
WM_ATTACHED_GL_BURST,
|
|
WM_ATTACHED_GL_AUTO,
|
|
NUM_WEAPON_MODES
|
|
} ;
|
|
|
|
// TYPEDEFS FOR ANIMATION PROFILES
|
|
typedef struct
|
|
{
|
|
UINT16 usTileFlags;
|
|
INT8 bTileX;
|
|
INT8 bTileY;
|
|
|
|
} ANIM_PROF_TILE;
|
|
|
|
typedef struct
|
|
{
|
|
UINT8 ubNumTiles;
|
|
ANIM_PROF_TILE *pTiles;
|
|
|
|
} ANIM_PROF_DIR;
|
|
|
|
typedef struct ANIM_PROF
|
|
{
|
|
|
|
ANIM_PROF_DIR Dirs[8];
|
|
|
|
} ANIM_PROF;
|
|
|
|
|
|
|
|
// Globals
|
|
//////////
|
|
|
|
// VARIABLES FOR PALETTE REPLACEMENTS FOR HAIR, ETC
|
|
extern UINT32 guiNumPaletteSubRanges;
|
|
extern UINT8 *gubpNumReplacementsPerRange;
|
|
extern PaletteSubRangeType *gpPaletteSubRanges;
|
|
extern UINT32 guiNumReplacements;
|
|
extern PaletteReplacementType *gpPalRep;
|
|
|
|
extern UINT8 bHealthStrRanges[];
|
|
|
|
|
|
// Functions
|
|
////////////
|
|
|
|
// CREATION FUNCTIONS
|
|
BOOLEAN DeleteSoldier( SOLDIERTYPE *pSoldier );
|
|
BOOLEAN CreateSoldierLight( SOLDIERTYPE *pSoldier );
|
|
BOOLEAN DeleteSoldierLight( SOLDIERTYPE *pSoldier );
|
|
|
|
BOOLEAN CreateSoldierCommon( UINT8 ubBodyType, SOLDIERTYPE *pSoldier, UINT16 usSoldierID, UINT16 usState );
|
|
|
|
|
|
// Soldier Management functions, called by Event Pump.c
|
|
BOOLEAN EVENT_InitNewSoldierAnim( SOLDIERTYPE *pSoldier, UINT16 usNewState, UINT16 usStartingAniCode, BOOLEAN fForce );
|
|
|
|
BOOLEAN ChangeSoldierState( SOLDIERTYPE *pSoldier, UINT16 usNewState, UINT16 usStartingAniCode, BOOLEAN fForce );
|
|
void EVENT_SetSoldierPosition( SOLDIERTYPE *pSoldier, FLOAT dNewXPos, FLOAT dNewYPos );
|
|
void EVENT_SetSoldierDestination( SOLDIERTYPE *pSoldier, UINT16 usNewDirection );
|
|
void EVENT_GetNewSoldierPath( SOLDIERTYPE *pSoldier, UINT16 sDestGridNo, UINT16 usMovementAnim );
|
|
BOOLEAN EVENT_InternalGetNewSoldierPath( SOLDIERTYPE *pSoldier, UINT16 sDestGridNo, UINT16 usMovementAnim, BOOLEAN fFromUI, BOOLEAN fForceRestart );
|
|
|
|
void EVENT_SetSoldierDirection( SOLDIERTYPE *pSoldier, UINT16 usNewDirection );
|
|
void EVENT_SetSoldierDesiredDirection( SOLDIERTYPE *pSoldier, UINT16 usNewDirection );
|
|
void EVENT_FireSoldierWeapon( SOLDIERTYPE *pSoldier, INT16 sTargetGridNo );
|
|
void EVENT_SoldierGotHit( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 ubDamage, INT16 sBreathLoss, UINT16 bDirection , UINT16 sRange, UINT8 ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation, INT16 sSubsequent, INT16 sLocationGridNo );
|
|
void EVENT_SoldierBeginBladeAttack( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubDirection );
|
|
void EVENT_SoldierBeginPunchAttack( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubDirection );
|
|
void EVENT_SoldierBeginFirstAid( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubDirection );
|
|
void EVENT_StopMerc( SOLDIERTYPE *pSoldier, INT16 sGridNo, INT8 bDirection );
|
|
void EVENT_SoldierBeginCutFence( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubDirection );
|
|
void EVENT_SoldierBeginRepair( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubDirection );
|
|
void EVENT_SoldierBeginRefuel( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubDirection );
|
|
|
|
|
|
|
|
BOOLEAN SoldierReadyWeapon( SOLDIERTYPE *pSoldier, INT16 sTargetXPos, INT16 sTargetYPos, BOOLEAN fEndReady );
|
|
void SetSoldierHeight( SOLDIERTYPE *pSoldier, FLOAT dNewHeight );
|
|
void BeginSoldierClimbUpRoof( SOLDIERTYPE *pSoldier );
|
|
void BeginSoldierClimbDownRoof( SOLDIERTYPE *pSoldier );
|
|
void BeginSoldierClimbFence( SOLDIERTYPE *pSoldier );
|
|
void SetSoldierGridNo( SOLDIERTYPE *pSoldier, INT16 sNewGridNo, BOOLEAN fForceRemove );
|
|
|
|
BOOLEAN CheckSoldierHitRoof( SOLDIERTYPE *pSoldier );
|
|
void BeginSoldierGetup( SOLDIERTYPE *pSoldier );
|
|
BOOLEAN ReCreateSelectedSoldierLight( );
|
|
|
|
// Soldier Management functions called by Overhead.c
|
|
BOOLEAN ConvertAniCodeToAniFrame( SOLDIERTYPE *pSoldier, UINT16 usAniFrame );
|
|
void TurnSoldier( SOLDIERTYPE *pSold);
|
|
void EVENT_BeginMercTurn( SOLDIERTYPE *pSoldier, BOOLEAN fFromRealTime, INT32 iRealTimeCounter );
|
|
void ChangeSoldierStance( SOLDIERTYPE *pSoldier, UINT8 ubDesiredStance );
|
|
void ModifySoldierAniSpeed( SOLDIERTYPE *pSoldier );
|
|
void StopSoldier( SOLDIERTYPE *pSoldier );
|
|
UINT8 SoldierTakeDamage( SOLDIERTYPE *pSoldier, INT8 bHeight, INT16 sLifeDeduct, INT16 sBreathDeduct, UINT8 ubReason, UINT8 ubAttacker, INT16 sSourceGrid, INT16 sSubsequent, BOOLEAN fShowDamage );
|
|
void RevivePlayerTeam( );
|
|
void ReviveSoldier( SOLDIERTYPE *pSoldier );
|
|
|
|
|
|
// Palette functions for soldiers
|
|
BOOLEAN CreateSoldierPalettes( SOLDIERTYPE *pSoldier );
|
|
BOOLEAN GetPaletteRepIndexFromID( PaletteRepID aPalRep, UINT8 *pubPalIndex );
|
|
BOOLEAN SetPaletteReplacement( SGPPaletteEntry *p8BPPPalette, PaletteRepID aPalRep );
|
|
BOOLEAN LoadPaletteData( );
|
|
BOOLEAN DeletePaletteData( );
|
|
|
|
// UTILITY FUNCTUIONS
|
|
void MoveMerc( SOLDIERTYPE *pSoldier, FLOAT dMovementChange, FLOAT dAngle, BOOLEAN fCheckRange );
|
|
void MoveMercFacingDirection( SOLDIERTYPE *pSoldier, BOOLEAN fReverse, FLOAT dMovementDist );
|
|
INT16 GetDirectionFromXY( INT16 sXPos, INT16 sYPos, SOLDIERTYPE *pSoldier );
|
|
INT16 GetDirectionFromGridNo( INT16 sGridNo, SOLDIERTYPE *pSoldier );
|
|
UINT8 atan8( INT16 sXPos, INT16 sYPos, INT16 sXPos2, INT16 sYPos2 );
|
|
UINT8 atan8FromAngle( DOUBLE dAngle );
|
|
INT8 CalcActionPoints(SOLDIERTYPE *pSold );
|
|
BOOLEAN IsActionInterruptable( SOLDIERTYPE *pSoldier );
|
|
INT16 GetDirectionToGridNoFromGridNo( INT16 sGridNoDest, INT16 sGridNoSrc );
|
|
void ReleaseSoldiersAttacker( SOLDIERTYPE *pSoldier );
|
|
BOOLEAN MercInWater( SOLDIERTYPE *pSoldier );
|
|
UINT16 GetNewSoldierStateFromNewStance( SOLDIERTYPE *pSoldier, UINT8 ubDesiredStance );
|
|
UINT16 GetMoveStateBasedOnStance( SOLDIERTYPE *pSoldier, UINT8 ubStanceHeight );
|
|
void SoldierGotoStationaryStance( SOLDIERTYPE *pSoldier );
|
|
BOOLEAN ReCreateSoldierLight( SOLDIERTYPE *pSoldier );
|
|
|
|
|
|
BOOLEAN DoMercBattleSound( SOLDIERTYPE *pSoldier, UINT8 ubBattleSoundID );
|
|
BOOLEAN InternalDoMercBattleSound( SOLDIERTYPE *pSoldier, UINT8 ubBattleSoundID, INT8 bSpecialCode );
|
|
|
|
|
|
UINT32 SoldierDressWound( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pVictim, INT16 sKitPts, INT16 sStatus );
|
|
void ReceivingSoldierCancelServices( SOLDIERTYPE *pSoldier );
|
|
void GivingSoldierCancelServices( SOLDIERTYPE *pSoldier );
|
|
void InternalReceivingSoldierCancelServices( SOLDIERTYPE *pSoldier, BOOLEAN fPlayEndAnim );
|
|
void InternalGivingSoldierCancelServices( SOLDIERTYPE *pSoldier, BOOLEAN fPlayEndAnim );
|
|
|
|
|
|
|
|
// WRAPPERS FOR SOLDIER EVENTS
|
|
void SendSoldierPositionEvent( SOLDIERTYPE *pSoldier, FLOAT dNewXPos, FLOAT dNewYPos );
|
|
void SendSoldierDestinationEvent( SOLDIERTYPE *pSoldier, UINT16 usNewDestination );
|
|
void SendGetNewSoldierPathEvent( SOLDIERTYPE *pSoldier, UINT16 sDestGridNo, UINT16 usMovementAnim );
|
|
void SendSoldierSetDirectionEvent( SOLDIERTYPE *pSoldier, UINT16 usNewDirection );
|
|
void SendSoldierSetDesiredDirectionEvent( SOLDIERTYPE *pSoldier, UINT16 usDesiredDirection );
|
|
void SendChangeSoldierStanceEvent( SOLDIERTYPE *pSoldier, UINT8 ubNewStance );
|
|
void SendBeginFireWeaponEvent( SOLDIERTYPE *pSoldier, INT16 sTargetGridNo );
|
|
|
|
void HandleAnimationProfile( SOLDIERTYPE *pSoldier, UINT16 usAnimState, BOOLEAN fRemove );
|
|
BOOLEAN GetProfileFlagsFromGridno( SOLDIERTYPE *pSoldier, UINT16 usAnimState, UINT16 sTestGridNo, UINT16 *usFlags );
|
|
|
|
void HaultSoldierFromSighting( SOLDIERTYPE *pSoldier, BOOLEAN fFromSightingEnemy );
|
|
void ReLoadSoldierAnimationDueToHandItemChange( SOLDIERTYPE *pSoldier, UINT16 usOldItem, UINT16 usNewItem );
|
|
|
|
BOOLEAN CheckForBreathCollapse( SOLDIERTYPE *pSoldier );
|
|
|
|
BOOLEAN PreloadSoldierBattleSounds( SOLDIERTYPE *pSoldier, BOOLEAN fRemove );
|
|
|
|
#define PTR_CIVILIAN (pSoldier->bTeam == CIV_TEAM)
|
|
#define PTR_CROUCHED (gAnimControl[ pSoldier->usAnimState ].ubHeight == ANIM_CROUCH)
|
|
#define PTR_STANDING (gAnimControl[ pSoldier->usAnimState ].ubHeight == ANIM_STAND)
|
|
#define PTR_PRONE (gAnimControl[ pSoldier->usAnimState ].ubHeight == ANIM_PRONE)
|
|
|
|
|
|
void EVENT_SoldierBeginGiveItem( SOLDIERTYPE *pSoldier );
|
|
|
|
void DoNinjaAttack( SOLDIERTYPE *pSoldier );
|
|
|
|
BOOLEAN SoldierCarriesTwoHandedWeapon( SOLDIERTYPE *pSoldier );
|
|
BOOLEAN InternalSoldierReadyWeapon( SOLDIERTYPE *pSoldier, UINT8 sFacingDir, BOOLEAN fEndReady );
|
|
|
|
void RemoveSoldierFromGridNo( SOLDIERTYPE *pSoldier );
|
|
|
|
void PositionSoldierLight( SOLDIERTYPE *pSoldier );
|
|
|
|
void SetCheckSoldierLightFlag( SOLDIERTYPE *pSoldier );
|
|
|
|
void EVENT_InternalSetSoldierDestination( SOLDIERTYPE *pSoldier, UINT16 usNewDirection, BOOLEAN fFromMove, UINT16 usAnimState );
|
|
|
|
void ChangeToFlybackAnimation( SOLDIERTYPE *pSoldier, INT8 bDirection );
|
|
void ChangeToFallbackAnimation( SOLDIERTYPE *pSoldier, INT8 bDirection );
|
|
|
|
//reset soldier timers
|
|
void ResetSoldierChangeStatTimer( SOLDIERTYPE *pSoldier );
|
|
|
|
void EVENT_SoldierBeginKnifeThrowAttack( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubDirection );
|
|
void EVENT_SoldierBeginUseDetonator( SOLDIERTYPE *pSoldier );
|
|
void EVENT_SoldierBeginDropBomb( SOLDIERTYPE *pSoldier );
|
|
void EVENT_SoldierEnterVehicle( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubDirection );
|
|
|
|
|
|
void SetSoldierCowerState( SOLDIERTYPE *pSoldier, BOOLEAN fOn );
|
|
|
|
BOOLEAN PlayerSoldierStartTalking( SOLDIERTYPE *pSoldier, UINT8 ubTargetID, BOOLEAN fValidate );
|
|
|
|
void EVENT_InternalSetSoldierPosition( SOLDIERTYPE *pSoldier, FLOAT dNewXPos, FLOAT dNewYPos ,BOOLEAN fUpdateDest, BOOLEAN fUpdateFinalDest, BOOLEAN fForceDelete );
|
|
|
|
void InternalRemoveSoldierFromGridNo( SOLDIERTYPE *pSoldier, BOOLEAN fForce );
|
|
|
|
void EVENT_SetSoldierPositionAndMaybeFinalDest( SOLDIERTYPE *pSoldier, FLOAT dNewXPos, FLOAT dNewYPos, BOOLEAN fUpdateFinalDest );
|
|
|
|
void EVENT_SetSoldierPositionForceDelete( SOLDIERTYPE *pSoldier, FLOAT dNewXPos, FLOAT dNewYPos );
|
|
|
|
void CalcNewActionPoints( SOLDIERTYPE *pSoldier );
|
|
|
|
BOOLEAN InternalIsValidStance( SOLDIERTYPE *pSoldier, INT8 bDirection, INT8 bNewStance );
|
|
|
|
void AdjustNoAPToFinishMove( SOLDIERTYPE *pSoldier, BOOLEAN fSet );
|
|
|
|
|
|
void UpdateRobotControllerGivenController( SOLDIERTYPE *pSoldier );
|
|
void UpdateRobotControllerGivenRobot( SOLDIERTYPE *pSoldier );
|
|
SOLDIERTYPE *GetRobotController( SOLDIERTYPE *pSoldier );
|
|
BOOLEAN CanRobotBeControlled( SOLDIERTYPE *pSoldier );
|
|
BOOLEAN ControllingRobot( SOLDIERTYPE *pSoldier );
|
|
|
|
void EVENT_SoldierBeginReloadRobot( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubDirection, UINT8 ubMercSlot );
|
|
|
|
void EVENT_SoldierBeginTakeBlood( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubDirection );
|
|
|
|
void EVENT_SoldierBeginAttachCan( SOLDIERTYPE *pSoldier, INT16 sGridNo, UINT8 ubDirection );
|
|
|
|
void HandleSoldierTakeDamageFeedback( SOLDIERTYPE *pSoldier );
|
|
|
|
void PickDropItemAnimation( SOLDIERTYPE *pSoldier );
|
|
|
|
BOOLEAN IsValidSecondHandShot( SOLDIERTYPE *pSoldier );
|
|
BOOLEAN IsValidSecondHandShotForReloadingPurposes( SOLDIERTYPE *pSoldier );
|
|
|
|
void CrowsFlyAway( UINT8 ubTeam );
|
|
|
|
void DebugValidateSoldierData( );
|
|
|
|
void BeginTyingToFall( SOLDIERTYPE *pSoldier );
|
|
|
|
void SetSoldierAsUnderAiControl( SOLDIERTYPE *pSoldier );
|
|
void HandlePlayerTogglingLightEffects( BOOLEAN fToggleValue );
|
|
BOOLEAN SoldierReadyWeapon( SOLDIERTYPE *pSoldier );
|
|
|
|
#endif
|
|
|