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