1 /*----------------Patrick 15/11/96-------------------
2  Header for NPC generators
3  ----------------------------------------------------*/
4 
5 #ifndef _bhgenerator_h_
6 	#define _bhgenerator_h_ 1
7 
8 	#ifdef __cplusplus
9 	extern "C" {
10 	#endif
11 
12 
13 	/*----------------Patrick 15/11/96-------------------
14  	Generator behaviour data block. NB generators
15 	have their own module ptr, as they are not included
16 	in the visibility system.
17  	----------------------------------------------------*/
18 	typedef struct generatorblock
19 	{
20 		int PulseMarine_Wt;
21 		int FlameMarine_Wt;
22 		int SmartMarine_Wt;
23 		int SadarMarine_Wt;
24 		int GrenadeMarine_Wt;
25 		int MinigunMarine_Wt;
26 		int ShotgunCiv_Wt;
27 		int PistolCiv_Wt;
28 		int FlameCiv_Wt;
29 		int UnarmedCiv_Wt;
30 		int MolotovCiv_Wt;
31 
32 		int Alien_Wt;
33 		int PredAlien_Wt;
34 		int Praetorian_Wt;
35 
36 		int PistolMarine_Wt;
37 
38 		int WeightingTotal;
39 
40 		/* Pathfinder parameters */
41 		/* If these values aren't -1 , then the generator produces path following creatures*/
42 		int path;
43 		int stepnumber;
44 
45 
46 		struct vectorch Position;
47 		int Timer;
48 		/* generator can be switched on and off via the request state function */
49 		int Active;
50 
51 		int GenerationRate;		//scaled up by 100
52 		int GenerationRateIncrease;  //scaled up by 100
53 		int RateIncreaseTimer;
54 		int MaxGenNPCs;//limit for this generator
55 
56 		/*if use_own_rate_values is false then the generator will use the global
57 		generation rates*/
58 		unsigned int use_own_rate_values :1;
59 		unsigned int use_own_max_npc :1;
60 	} GENERATOR_BLOCK;
61 
62 
63 	/*----------------Patrick 22/1/97-------------------
64 	Hive enums and data structure.
65 	Note that only one hive exists in the game.
66  	----------------------------------------------------*/
67 	typedef enum hive_state
68 	{
69 		HS_Attack,
70 		HS_Regroup,
71 
72 	}HIVE_STATE;
73 
74 	typedef struct hive_data
75 	{
76 		HIVE_STATE currentState;
77 		int numGenerators;
78 		int hiveStateTimer;
79 		int genRateTimer;
80 		int maxGeneratorNPCs;
81 		int generatorNPCsPerMinute;
82 		int deltaGeneratorNPCsPerMinute;
83 
84 		BOOL AliensCanBeGenerated;
85 		BOOL PredAliensCanBeGenerated;
86 		BOOL PraetoriansCanBeGenerated;
87 
88 	} HIVE_DATA;
89 
90 	typedef struct hivelevelparams
91 	{
92 		int maxGeneratorNPCs;
93 		int generatorNPCsPerMinute;
94 		int deltaGeneratorNPCsPerMinute;
95 		int hiveStateBaseTime;
96 	} HIVELEVELPARAMS;
97 
98 	extern int ShowSlack;
99 	/* prototypes */
100 	extern void InitGenerator(void *posn, STRATEGYBLOCK *sbPtr);
101 	extern void GeneratorBehaviour(STRATEGYBLOCK *sbPtr);
102 	extern void InitHive(void);
103 	extern void DoHive(void);
104 	extern int NumGeneratorNPCsInEnv(void);
105 	extern int NumGeneratorNPCsVisible(void);
106 	extern void ForceAGenerator(void);
107 	extern void ActivateHive(void);
108 
109 	/* defines */
110 	#define DEFAULTHIVESTATETIME		(60*ONE_FIXED)
111 
112 	#define MAXGENNPCS_MAX				(255)
113 	#define MAXGENNPCS_MIN				(0)
114 	#define GENSPERMINUTE_MAX			(255)
115 	#define GENSPERMINUTE_MIN			(0)
116 	#define INCREASEGENSPERMINUTE_MAX	(255)
117 	#define INCREASEGENSPERMINUTE_MIN	(0)
118 
119 	#define GENERATORTIME_MAX			(120*ONE_FIXED)
120 	#define GENERATORTIME_MIN			(3*ONE_FIXED)
121 
122 	/* globals */
123 	extern HIVE_DATA NPCHive;
124 
125 	#ifdef __cplusplus
126 	}
127 	#endif
128 
129 extern void GeneratorBalance_NoteAIDeath();
130 extern void GeneratorBalance_NotePlayerDeath();
131 #endif
132