6 float monster_precached[MONSTER_LAST];
7 void monster_mid2info(float _mid);
9 void monster_precache(float _mid)
11 monster_mid2info(_mid);
12 if(turret_is_precache[_mid])
19 precache_model(ZOMBIE_MODEL);
24 precache_model(OGRE_MODEL);
29 precache_model(DEMON_MODEL);
32 case MONSTER_SHAMBLER:
34 precache_model(SHAMBLER_MODEL);
39 precache_model(KNIGHT_MODEL);
44 precache_model(SOLDIER_MODEL);
49 precache_model(WIZARD_MODEL);
54 precache_model(DOG_MODEL);
59 precache_model(TARBABY_MODEL);
62 case MONSTER_HELLKNIGHT:
64 precache_model(HELLKNIGHT_MODEL);
69 precache_model(FISH_MODEL);
74 precache_model(SHALRATH_MODEL);
77 case MONSTER_ENFORCER:
79 precache_model(ENFORCER_MODEL);
84 precache_model(SPIDER_MODEL);
89 monster_precached[_mid] = TRUE;
92 void monster_mid2info(float _mid)
98 mid2info_model = ZOMBIE_MODEL;
99 mid2info_name = "Zombie";
100 mid2info_min = ZOMBIE_MIN;
101 mid2info_max = ZOMBIE_MAX;
106 mid2info_model = OGRE_MODEL;
107 mid2info_name = "Ogre";
108 mid2info_min = OGRE_MIN;
109 mid2info_max = OGRE_MAX;
114 mid2info_model = DEMON_MODEL;
115 mid2info_name = "Fiend";
116 mid2info_min = DEMON_MIN;
117 mid2info_max = DEMON_MAX;
120 case MONSTER_SHAMBLER:
122 mid2info_model = SHAMBLER_MODEL;
123 mid2info_name = "Shambler";
124 mid2info_min = SHAMBLER_MIN;
125 mid2info_max = SHAMBLER_MAX;
130 mid2info_model = KNIGHT_MODEL;
131 mid2info_name = "Knight";
132 mid2info_min = KNIGHT_MIN;
133 mid2info_max = KNIGHT_MAX;
138 mid2info_model = SOLDIER_MODEL;
139 mid2info_name = "Marine";
140 mid2info_min = SOLDIER_MIN;
141 mid2info_max = SOLDIER_MAX;
146 mid2info_model = WIZARD_MODEL;
147 mid2info_name = "Scrag";
148 mid2info_min = WIZARD_MIN;
149 mid2info_max = WIZARD_MAX;
154 mid2info_model = DOG_MODEL;
155 mid2info_name = "Cerberus";
156 mid2info_min = DOG_MIN;
157 mid2info_max = DOG_MAX;
160 case MONSTER_TARBABY:
162 mid2info_model = TARBABY_MODEL;
163 mid2info_name = "Spawn";
164 mid2info_min = TARBABY_MIN;
165 mid2info_max = TARBABY_MAX;
168 case MONSTER_HELLKNIGHT:
170 mid2info_model = HELLKNIGHT_MODEL;
171 mid2info_name = "Hell-Knight";
172 mid2info_min = HELLKNIGHT_MIN;
173 mid2info_max = HELLKNIGHT_MAX;
178 mid2info_model = FISH_MODEL;
179 mid2info_name = "Rotfish";
180 mid2info_min = FISH_MIN;
181 mid2info_max = FISH_MAX;
186 mid2info_model = SHALRATH_MODEL;
187 mid2info_name = "Mage";
188 mid2info_min = SHALRATH_MIN;
189 mid2info_max = SHALRATH_MAX;
192 case MONSTER_ENFORCER:
194 mid2info_model = ENFORCER_MODEL;
195 mid2info_name = "Enforcer";
196 mid2info_min = ENFORCER_MIN;
197 mid2info_max = ENFORCER_MAX;
202 mid2info_model = SPIDER_MODEL;
203 mid2info_name = "Spider";
204 mid2info_min = SPIDER_MIN;
205 mid2info_max = SPIDER_MAX;
210 dprint("WARNING: Unknown monster in CSQC\n");
217 void monster_changeteam()
219 switch(self.team - 1)
221 case NUM_TEAM_1: // Red
223 self.glowmod = '2 0 0';
224 self.teamradar_color = '1 0 0';
227 case NUM_TEAM_2: // Blue
229 self.glowmod = '0 0 2';
230 self.teamradar_color = '0 0 1';
233 case NUM_TEAM_3: // Yellow
235 self.glowmod = '1 1 0';
236 self.teamradar_color = '1 1 0';
239 case NUM_TEAM_4: // Pink
241 self.glowmod = '1 0 1';
242 self.teamradar_color = '1 0 1';
248 self.colormap = 1024 + (self.team - 1) * 17;
252 void monster_construct()
254 monster_mid2info(self.monsterid);
255 self.netname = mid2info_name;
257 setorigin(self, self.origin);
258 setmodel(self, mid2info_model);
259 setsize(self, mid2info_min, mid2info_max);
261 self.move_movetype = MOVETYPE_BOUNCE;
263 self.solid = SOLID_BBOX;
264 self.movetype = MOVETYPE_BOUNCE;
265 self.move_origin = self.origin;
266 self.move_time = time;
267 self.drawmask = MASK_NORMAL;
278 self.monsterid = ReadByte();
280 self.origin_x = ReadCoord();
281 self.origin_y = ReadCoord();
282 self.origin_z = ReadCoord();
283 setorigin(self, self.origin);
285 self.angles_x = ReadAngle();
286 self.angles_y = ReadAngle();
288 self.scale = ReadByte();
289 self.skin = ReadByte();
291 monster_precache(self.monsterid);
293 self.colormap = 1024;
294 self.glowmod = '0 1 1';
299 self.scale = ReadByte();
300 self.mins_x = ReadCoord();
301 self.mins_y = ReadCoord();
302 self.mins_z = ReadCoord();
304 self.maxs_x = ReadCoord();
305 self.maxs_y = ReadCoord();
306 self.maxs_z = ReadCoord();
308 setsize(self, self.mins, self.maxs);
313 self.move_angles_x = ReadShort();
314 self.move_angles_y = ReadShort();
315 self.angles = self.move_angles;
320 self.origin_x = ReadShort();
321 self.origin_y = ReadShort();
322 self.origin_z = ReadShort();
323 setorigin(self, self.origin);
325 self.velocity_x = ReadShort();
326 self.velocity_y = ReadShort();
327 self.velocity_z = ReadShort();
329 self.move_angles_y = ReadShort();
331 self.move_time = time;
332 self.move_velocity = self.velocity;
333 self.move_origin = self.origin;
338 self.frame1time = ReadCoord();
339 self.frame = ReadByte();
344 self.skin = ReadByte();
348 if(_tmp != self.team)
351 monster_changeteam();
356 if(_tmp == 0 && self.health != 0)
357 if(self.monsterid == MONSTER_SPIDER)
358 self.angles += '180 0 0';