1 #ifndef _OPPLIST_H 2 #define _OPPLIST_H 3 4 #include "Overhead_Types.h" 5 6 7 // For RadioSightings() parameter about 8 #define EVERYBODY NULL 9 10 #define MAX_MISC_NOISE_DURATION 12 // max dur for VERY loud NOBODY noises 11 12 #define DOOR_NOISE_VOLUME 2 13 #define WINDOW_CRACK_VOLUME 4 14 #define WINDOW_SMASH_VOLUME 8 15 #define MACHETE_VOLUME 9 16 #define TRIMMER_VOLUME 18 17 #define CHAINSAW_VOLUME 30 18 #define SMASHING_DOOR_VOLUME 6 19 #define CROWBAR_DOOR_VOLUME 4 20 #define ITEM_THROWN_VOLUME 2 21 22 #define TIME_BETWEEN_RT_OPPLIST_DECAYS 20 23 24 // this is a fake "level" value (0 on ground, 1 on roof) for 25 // HearNoise to ignore the effects of lighting(?) 26 #define LIGHT_IRRELEVANT 127 27 28 #define AUTOMATIC_INTERRUPT 100 29 #define NO_INTERRUPT 127 30 31 #define MOVEINTERRUPT 0 32 #define SIGHTINTERRUPT 1 33 #define NOISEINTERRUPT 2 34 35 36 // noise type constants 37 enum NoiseKind 38 { 39 NOISE_UNKNOWN = 0, 40 NOISE_MOVEMENT, 41 NOISE_CREAKING, 42 NOISE_SPLASHING, 43 NOISE_BULLET_IMPACT, 44 NOISE_GUNFIRE, 45 NOISE_EXPLOSION, 46 NOISE_SCREAM, 47 NOISE_ROCK_IMPACT, 48 NOISE_GRENADE_IMPACT, 49 NOISE_WINDOW_SMASHING, 50 NOISE_DOOR_SMASHING, 51 NOISE_SILENT_ALARM, // only heard by enemies 52 MAX_NOISES 53 }; 54 55 56 #define NUM_WATCHED_LOCS 3 57 58 extern INT8 gbPublicOpplist[MAXTEAMS][ TOTAL_SOLDIERS ]; 59 extern INT8 gbSeenOpponents[TOTAL_SOLDIERS][TOTAL_SOLDIERS]; 60 extern INT16 gsLastKnownOppLoc[TOTAL_SOLDIERS][TOTAL_SOLDIERS]; // merc vs. merc 61 extern INT8 gbLastKnownOppLevel[TOTAL_SOLDIERS][TOTAL_SOLDIERS]; 62 extern INT16 gsPublicLastKnownOppLoc[MAXTEAMS][TOTAL_SOLDIERS]; // team vs. merc 63 extern INT8 gbPublicLastKnownOppLevel[MAXTEAMS][TOTAL_SOLDIERS]; 64 extern UINT8 gubPublicNoiseVolume[MAXTEAMS]; 65 extern INT16 gsPublicNoiseGridno[MAXTEAMS]; 66 extern INT8 gbPublicNoiseLevel[MAXTEAMS]; 67 extern UINT8 gubKnowledgeValue[10][10]; 68 extern INT8 gfKnowAboutOpponents; 69 70 extern BOOLEAN gfPlayerTeamSawJoey; 71 extern BOOLEAN gfMikeShouldSayHi; 72 73 74 extern INT16 gsWatchedLoc[ TOTAL_SOLDIERS ][ NUM_WATCHED_LOCS ]; 75 extern INT8 gbWatchedLocLevel[ TOTAL_SOLDIERS ][ NUM_WATCHED_LOCS ]; 76 extern UINT8 gubWatchedLocPoints[ TOTAL_SOLDIERS ][ NUM_WATCHED_LOCS ]; 77 extern BOOLEAN gfWatchedLocReset[ TOTAL_SOLDIERS ][ NUM_WATCHED_LOCS ]; 78 79 #define BEST_SIGHTING_ARRAY_SIZE 6 80 #define BEST_SIGHTING_ARRAY_SIZE_ALL_TEAMS_LOOK_FOR_ALL 6 81 #define BEST_SIGHTING_ARRAY_SIZE_NONCOMBAT 3 82 #define BEST_SIGHTING_ARRAY_SIZE_INCOMBAT 0 83 extern UINT8 gubBestToMakeSightingSize; 84 85 INT16 AdjustMaxSightRangeForEnvEffects(INT8 bLightLevel, INT16 sDistVisible); 86 void HandleSight(SOLDIERTYPE&, SightFlags); 87 void AllTeamsLookForAll(UINT8 ubAllowInterrupts); 88 void GloballyDecideWhoSeesWho(void); 89 UINT16 GetClosestMerc( UINT16 usSoldierIndex ); 90 INT16 MaxDistanceVisible( void ); 91 INT16 DistanceVisible(const SOLDIERTYPE* pSoldier, INT8 bFacingDir, INT8 bSubjectDir, INT16 sSubjectGridNo, INT8 bLevel); 92 void RecalculateOppCntsDueToNoLongerNeutral( SOLDIERTYPE * pSoldier ); 93 94 95 void InitOpponentKnowledgeSystem(void); 96 void InitSoldierOppList(SOLDIERTYPE&); 97 void BetweenTurnsVisibilityAdjustments(); 98 void RemoveManAsTarget(SOLDIERTYPE *pSoldier); 99 void RadioSightings(SOLDIERTYPE* pSoldier, SOLDIERTYPE* about, UINT8 ubTeamToRadioTo); 100 void DebugSoldierPage1(void); 101 void DebugSoldierPage2(void); 102 void DebugSoldierPage3(void); 103 void DebugSoldierPage4(void); 104 105 UINT8 MovementNoise( SOLDIERTYPE const *pSoldier ); 106 UINT8 DoorOpeningNoise( SOLDIERTYPE *pSoldier ); 107 void MakeNoise(SOLDIERTYPE* noise_maker, INT16 sGridNo, INT8 bLevel, UINT8 ubVolume, NoiseKind); 108 void OurNoise(SOLDIERTYPE* noise_maker, INT16 sGridNo, INT8 bLevel, UINT8 ubVolume, NoiseKind); 109 110 void ResolveInterruptsVs( SOLDIERTYPE * pSoldier, UINT8 ubInterruptType); 111 112 void VerifyAndDecayOpplist(SOLDIERTYPE *pSoldier); 113 void DecayIndividualOpplist(SOLDIERTYPE *pSoldier); 114 void VerifyPublicOpplistDueToDeath( SOLDIERTYPE * pSoldier ); 115 void NoticeUnseenAttacker( SOLDIERTYPE * pAttacker, SOLDIERTYPE * pDefender, INT8 bReason ); 116 117 bool MercSeesCreature(SOLDIERTYPE const&); 118 119 INT8 GetWatchedLocPoints( UINT8 ubID, INT16 sGridNo, INT8 bLevel ); 120 INT8 GetHighestVisibleWatchedLoc(const SOLDIERTYPE* s); 121 INT8 GetHighestWatchedLocPoints(const SOLDIERTYPE* s); 122 123 void TurnOffEveryonesMuzzleFlashes( void ); 124 void TurnOffTeamsMuzzleFlashes( UINT8 ubTeam ); 125 void EndMuzzleFlash( SOLDIERTYPE * pSoldier ); 126 void NonCombatDecayPublicOpplist( UINT32 uiTime ); 127 128 void CheckHostileOrSayQuoteList( void ); 129 void InitOpplistForDoorOpening( void ); 130 131 void AddToShouldBecomeHostileOrSayQuoteList(SOLDIERTYPE* s); 132 133 extern INT8 gbLightSighting[1][16]; 134 135 void CheckForAlertWhenEnemyDies(SOLDIERTYPE* pDyingSoldier); 136 137 extern SOLDIERTYPE* gInterruptProvoker; 138 139 extern const SOLDIERTYPE* gWhoThrewRock; 140 141 void DecayPublicOpplist(INT8 bTeam); 142 143 void RecalculateOppCntsDueToBecomingNeutral(SOLDIERTYPE* pSoldier); 144 145 #endif 146