icculus quake2 doxygen  1.0 dev
g_spawn.c
Go to the documentation of this file.
1 /*
2 Copyright (C) 1997-2001 Id Software, Inc.
3 
4 This program is free software; you can redistribute it and/or
5 modify it under the terms of the GNU General Public License
6 as published by the Free Software Foundation; either version 2
7 of the License, or (at your option) any later version.
8 
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12 
13 See the GNU General Public License for more details.
14 
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 
19 */
20 
21 #include "g_local.h"
22 
23 typedef struct
24 {
25  char *name;
26  void (*spawn)(edict_t *ent);
27 } spawn_t;
28 
29 
30 void SP_item_health (edict_t *self);
31 void SP_item_health_small (edict_t *self);
32 void SP_item_health_large (edict_t *self);
33 void SP_item_health_mega (edict_t *self);
34 
35 void SP_info_player_start (edict_t *ent);
37 void SP_info_player_coop (edict_t *ent);
39 
40 void SP_func_plat (edict_t *ent);
41 void SP_func_rotating (edict_t *ent);
42 void SP_func_button (edict_t *ent);
43 void SP_func_door (edict_t *ent);
44 void SP_func_door_secret (edict_t *ent);
45 void SP_func_door_rotating (edict_t *ent);
46 void SP_func_water (edict_t *ent);
47 void SP_func_train (edict_t *ent);
48 void SP_func_conveyor (edict_t *self);
49 void SP_func_wall (edict_t *self);
50 void SP_func_object (edict_t *self);
51 void SP_func_explosive (edict_t *self);
52 void SP_func_timer (edict_t *self);
53 void SP_func_areaportal (edict_t *ent);
54 void SP_func_clock (edict_t *ent);
55 void SP_func_killbox (edict_t *ent);
56 
57 void SP_trigger_always (edict_t *ent);
58 void SP_trigger_once (edict_t *ent);
59 void SP_trigger_multiple (edict_t *ent);
60 void SP_trigger_relay (edict_t *ent);
61 void SP_trigger_push (edict_t *ent);
62 void SP_trigger_hurt (edict_t *ent);
63 void SP_trigger_key (edict_t *ent);
64 void SP_trigger_counter (edict_t *ent);
65 void SP_trigger_elevator (edict_t *ent);
66 void SP_trigger_gravity (edict_t *ent);
68 
69 void SP_target_temp_entity (edict_t *ent);
70 void SP_target_speaker (edict_t *ent);
71 void SP_target_explosion (edict_t *ent);
72 void SP_target_changelevel (edict_t *ent);
73 void SP_target_secret (edict_t *ent);
74 void SP_target_goal (edict_t *ent);
75 void SP_target_splash (edict_t *ent);
76 void SP_target_spawner (edict_t *ent);
77 void SP_target_blaster (edict_t *ent);
80 void SP_target_laser (edict_t *self);
81 void SP_target_help (edict_t *ent);
82 void SP_target_actor (edict_t *ent);
83 void SP_target_lightramp (edict_t *self);
84 void SP_target_earthquake (edict_t *ent);
85 void SP_target_character (edict_t *ent);
86 void SP_target_string (edict_t *ent);
87 
88 void SP_worldspawn (edict_t *ent);
89 void SP_viewthing (edict_t *ent);
90 
91 void SP_light (edict_t *self);
92 void SP_light_mine1 (edict_t *ent);
93 void SP_light_mine2 (edict_t *ent);
94 void SP_info_null (edict_t *self);
95 void SP_info_notnull (edict_t *self);
96 void SP_path_corner (edict_t *self);
97 void SP_point_combat (edict_t *self);
98 
99 void SP_misc_explobox (edict_t *self);
100 void SP_misc_banner (edict_t *self);
101 void SP_misc_satellite_dish (edict_t *self);
102 void SP_misc_actor (edict_t *self);
103 void SP_misc_gib_arm (edict_t *self);
104 void SP_misc_gib_leg (edict_t *self);
105 void SP_misc_gib_head (edict_t *self);
106 void SP_misc_insane (edict_t *self);
107 void SP_misc_deadsoldier (edict_t *self);
108 void SP_misc_viper (edict_t *self);
109 void SP_misc_viper_bomb (edict_t *self);
110 void SP_misc_bigviper (edict_t *self);
111 void SP_misc_strogg_ship (edict_t *self);
112 void SP_misc_teleporter (edict_t *self);
113 void SP_misc_teleporter_dest (edict_t *self);
114 void SP_misc_blackhole (edict_t *self);
115 void SP_misc_eastertank (edict_t *self);
116 void SP_misc_easterchick (edict_t *self);
117 void SP_misc_easterchick2 (edict_t *self);
118 
119 void SP_monster_berserk (edict_t *self);
120 void SP_monster_gladiator (edict_t *self);
121 void SP_monster_gunner (edict_t *self);
122 void SP_monster_infantry (edict_t *self);
123 void SP_monster_soldier_light (edict_t *self);
124 void SP_monster_soldier (edict_t *self);
125 void SP_monster_soldier_ss (edict_t *self);
126 void SP_monster_tank (edict_t *self);
127 void SP_monster_medic (edict_t *self);
128 void SP_monster_flipper (edict_t *self);
129 void SP_monster_chick (edict_t *self);
130 void SP_monster_parasite (edict_t *self);
131 void SP_monster_flyer (edict_t *self);
132 void SP_monster_brain (edict_t *self);
133 void SP_monster_floater (edict_t *self);
134 void SP_monster_hover (edict_t *self);
135 void SP_monster_mutant (edict_t *self);
136 void SP_monster_supertank (edict_t *self);
137 void SP_monster_boss2 (edict_t *self);
138 void SP_monster_jorg (edict_t *self);
139 void SP_monster_boss3_stand (edict_t *self);
140 
142 
143 void SP_turret_breach (edict_t *self);
144 void SP_turret_base (edict_t *self);
145 void SP_turret_driver (edict_t *self);
146 
147 
149  {"item_health", SP_item_health},
150  {"item_health_small", SP_item_health_small},
151  {"item_health_large", SP_item_health_large},
152  {"item_health_mega", SP_item_health_mega},
153 
154  {"info_player_start", SP_info_player_start},
155  {"info_player_deathmatch", SP_info_player_deathmatch},
156  {"info_player_coop", SP_info_player_coop},
157  {"info_player_intermission", SP_info_player_intermission},
158 
159  {"func_plat", SP_func_plat},
160  {"func_button", SP_func_button},
161  {"func_door", SP_func_door},
162  {"func_door_secret", SP_func_door_secret},
163  {"func_door_rotating", SP_func_door_rotating},
164  {"func_rotating", SP_func_rotating},
165  {"func_train", SP_func_train},
166  {"func_water", SP_func_water},
167  {"func_conveyor", SP_func_conveyor},
168  {"func_areaportal", SP_func_areaportal},
169  {"func_clock", SP_func_clock},
170  {"func_wall", SP_func_wall},
171  {"func_object", SP_func_object},
172  {"func_timer", SP_func_timer},
173  {"func_explosive", SP_func_explosive},
174  {"func_killbox", SP_func_killbox},
175 
176  {"trigger_always", SP_trigger_always},
177  {"trigger_once", SP_trigger_once},
178  {"trigger_multiple", SP_trigger_multiple},
179  {"trigger_relay", SP_trigger_relay},
180  {"trigger_push", SP_trigger_push},
181  {"trigger_hurt", SP_trigger_hurt},
182  {"trigger_key", SP_trigger_key},
183  {"trigger_counter", SP_trigger_counter},
184  {"trigger_elevator", SP_trigger_elevator},
185  {"trigger_gravity", SP_trigger_gravity},
186  {"trigger_monsterjump", SP_trigger_monsterjump},
187 
188  {"target_temp_entity", SP_target_temp_entity},
189  {"target_speaker", SP_target_speaker},
190  {"target_explosion", SP_target_explosion},
191  {"target_changelevel", SP_target_changelevel},
192  {"target_secret", SP_target_secret},
193  {"target_goal", SP_target_goal},
194  {"target_splash", SP_target_splash},
195  {"target_spawner", SP_target_spawner},
196  {"target_blaster", SP_target_blaster},
197  {"target_crosslevel_trigger", SP_target_crosslevel_trigger},
198  {"target_crosslevel_target", SP_target_crosslevel_target},
199  {"target_laser", SP_target_laser},
200  {"target_help", SP_target_help},
201  {"target_actor", SP_target_actor},
202  {"target_lightramp", SP_target_lightramp},
203  {"target_earthquake", SP_target_earthquake},
204  {"target_character", SP_target_character},
205  {"target_string", SP_target_string},
206 
207  {"worldspawn", SP_worldspawn},
208  {"viewthing", SP_viewthing},
209 
210  {"light", SP_light},
211  {"light_mine1", SP_light_mine1},
212  {"light_mine2", SP_light_mine2},
213  {"info_null", SP_info_null},
214  {"func_group", SP_info_null},
215  {"info_notnull", SP_info_notnull},
216  {"path_corner", SP_path_corner},
217  {"point_combat", SP_point_combat},
218 
219  {"misc_explobox", SP_misc_explobox},
220  {"misc_banner", SP_misc_banner},
221  {"misc_satellite_dish", SP_misc_satellite_dish},
222  {"misc_actor", SP_misc_actor},
223  {"misc_gib_arm", SP_misc_gib_arm},
224  {"misc_gib_leg", SP_misc_gib_leg},
225  {"misc_gib_head", SP_misc_gib_head},
226  {"misc_insane", SP_misc_insane},
227  {"misc_deadsoldier", SP_misc_deadsoldier},
228  {"misc_viper", SP_misc_viper},
229  {"misc_viper_bomb", SP_misc_viper_bomb},
230  {"misc_bigviper", SP_misc_bigviper},
231  {"misc_strogg_ship", SP_misc_strogg_ship},
232  {"misc_teleporter", SP_misc_teleporter},
233  {"misc_teleporter_dest", SP_misc_teleporter_dest},
234  {"misc_blackhole", SP_misc_blackhole},
235  {"misc_eastertank", SP_misc_eastertank},
236  {"misc_easterchick", SP_misc_easterchick},
237  {"misc_easterchick2", SP_misc_easterchick2},
238 
239  {"monster_berserk", SP_monster_berserk},
240  {"monster_gladiator", SP_monster_gladiator},
241  {"monster_gunner", SP_monster_gunner},
242  {"monster_infantry", SP_monster_infantry},
243  {"monster_soldier_light", SP_monster_soldier_light},
244  {"monster_soldier", SP_monster_soldier},
245  {"monster_soldier_ss", SP_monster_soldier_ss},
246  {"monster_tank", SP_monster_tank},
247  {"monster_tank_commander", SP_monster_tank},
248  {"monster_medic", SP_monster_medic},
249  {"monster_flipper", SP_monster_flipper},
250  {"monster_chick", SP_monster_chick},
251  {"monster_parasite", SP_monster_parasite},
252  {"monster_flyer", SP_monster_flyer},
253  {"monster_brain", SP_monster_brain},
254  {"monster_floater", SP_monster_floater},
255  {"monster_hover", SP_monster_hover},
256  {"monster_mutant", SP_monster_mutant},
257  {"monster_supertank", SP_monster_supertank},
258  {"monster_boss2", SP_monster_boss2},
259  {"monster_boss3_stand", SP_monster_boss3_stand},
260  {"monster_jorg", SP_monster_jorg},
261 
262  {"monster_commander_body", SP_monster_commander_body},
263 
264  {"turret_breach", SP_turret_breach},
265  {"turret_base", SP_turret_base},
266  {"turret_driver", SP_turret_driver},
267 
268  {NULL, NULL}
269 };
270 
271 /*
272 ===============
273 ED_CallSpawn
274 
275 Finds the spawn function for the entity and calls it
276 ===============
277 */
279 {
280  spawn_t *s;
281  gitem_t *item;
282  int i;
283 
284  if (!ent->classname)
285  {
286  gi.dprintf ("ED_CallSpawn: NULL classname\n");
287  return;
288  }
289 
290  // check item spawn functions
291  for (i=0,item=itemlist ; i<game.num_items ; i++,item++)
292  {
293  if (!item->classname)
294  continue;
295  if (!strcmp(item->classname, ent->classname))
296  { // found it
297  SpawnItem (ent, item);
298  return;
299  }
300  }
301 
302  // check normal spawn functions
303  for (s=spawns ; s->name ; s++)
304  {
305  if (!strcmp(s->name, ent->classname))
306  { // found it
307  s->spawn (ent);
308  return;
309  }
310  }
311  gi.dprintf ("%s doesn't have a spawn function\n", ent->classname);
312 }
313 
314 /*
315 =============
316 ED_NewString
317 =============
318 */
319 char *ED_NewString (char *string)
320 {
321  char *newb, *new_p;
322  int i,l;
323 
324  l = strlen(string) + 1;
325 
326  newb = gi.TagMalloc (l, TAG_LEVEL);
327 
328  new_p = newb;
329 
330  for (i=0 ; i< l ; i++)
331  {
332  if (string[i] == '\\' && i < l-1)
333  {
334  i++;
335  if (string[i] == 'n')
336  *new_p++ = '\n';
337  else
338  *new_p++ = '\\';
339  }
340  else
341  *new_p++ = string[i];
342  }
343 
344  return newb;
345 }
346 
347 
348 
349 
350 /*
351 ===============
352 ED_ParseField
353 
354 Takes a key/value pair and sets the binary values
355 in an edict
356 ===============
357 */
358 void ED_ParseField (char *key, char *value, edict_t *ent)
359 {
360  field_t *f;
361  byte *b;
362  float v;
363  vec3_t vec;
364 
365  for (f=fields ; f->name ; f++)
366  {
367  if (!(f->flags & FFL_NOSPAWN) && !Q_stricmp(f->name, key))
368  { // found it
369  if (f->flags & FFL_SPAWNTEMP)
370  b = (byte *)&st;
371  else
372  b = (byte *)ent;
373 
374  switch (f->type)
375  {
376  case F_LSTRING:
377  *(char **)(b+f->ofs) = ED_NewString (value);
378  break;
379  case F_VECTOR:
380  sscanf (value, "%f %f %f", &vec[0], &vec[1], &vec[2]);
381  ((float *)(b+f->ofs))[0] = vec[0];
382  ((float *)(b+f->ofs))[1] = vec[1];
383  ((float *)(b+f->ofs))[2] = vec[2];
384  break;
385  case F_INT:
386  *(int *)(b+f->ofs) = atoi(value);
387  break;
388  case F_FLOAT:
389  *(float *)(b+f->ofs) = atof(value);
390  break;
391  case F_ANGLEHACK:
392  v = atof(value);
393  ((float *)(b+f->ofs))[0] = 0;
394  ((float *)(b+f->ofs))[1] = v;
395  ((float *)(b+f->ofs))[2] = 0;
396  break;
397  case F_IGNORE:
398  break;
399  default:
400  break;
401  }
402  return;
403  }
404  }
405  gi.dprintf ("%s is not a field\n", key);
406 }
407 
408 /*
409 ====================
410 ED_ParseEdict
411 
412 Parses an edict out of the given string, returning the new position
413 ed should be a properly initialized empty edict.
414 ====================
415 */
416 char *ED_ParseEdict (char *data, edict_t *ent)
417 {
418  qboolean init;
419  char keyname[256];
420  char *com_token;
421 
422  init = false;
423  memset (&st, 0, sizeof(st));
424 
425 // go through all the dictionary pairs
426  while (1)
427  {
428  // parse key
429  com_token = COM_Parse (&data);
430  if (com_token[0] == '}')
431  break;
432  if (!data)
433  gi.error ("ED_ParseEntity: EOF without closing brace");
434 
435  strncpy (keyname, com_token, sizeof(keyname)-1);
436 
437  // parse value
438  com_token = COM_Parse (&data);
439  if (!data)
440  gi.error ("ED_ParseEntity: EOF without closing brace");
441 
442  if (com_token[0] == '}')
443  gi.error ("ED_ParseEntity: closing brace without data");
444 
445  init = true;
446 
447  // keynames with a leading underscore are used for utility comments,
448  // and are immediately discarded by quake
449  if (keyname[0] == '_')
450  continue;
451 
452  ED_ParseField (keyname, com_token, ent);
453  }
454 
455  if (!init)
456  memset (ent, 0, sizeof(*ent));
457 
458  return data;
459 }
460 
461 
462 /*
463 ================
464 G_FindTeams
465 
466 Chain together all entities with a matching team field.
467 
468 All but the first will have the FL_TEAMSLAVE flag set.
469 All but the last will have the teamchain field set to the next one
470 ================
471 */
472 void G_FindTeams (void)
473 {
474  edict_t *e, *e2, *chain;
475  int i, j;
476  int c, c2;
477 
478  c = 0;
479  c2 = 0;
480  for (i=1, e=g_edicts+i ; i < globals.num_edicts ; i++,e++)
481  {
482  if (!e->inuse)
483  continue;
484  if (!e->team)
485  continue;
486  if (e->flags & FL_TEAMSLAVE)
487  continue;
488  chain = e;
489  e->teammaster = e;
490  c++;
491  c2++;
492  for (j=i+1, e2=e+1 ; j < globals.num_edicts ; j++,e2++)
493  {
494  if (!e2->inuse)
495  continue;
496  if (!e2->team)
497  continue;
498  if (e2->flags & FL_TEAMSLAVE)
499  continue;
500  if (!strcmp(e->team, e2->team))
501  {
502  c2++;
503  chain->teamchain = e2;
504  e2->teammaster = e;
505  chain = e2;
506  e2->flags |= FL_TEAMSLAVE;
507  }
508  }
509  }
510 
511  gi.dprintf ("%i teams with %i entities\n", c, c2);
512 }
513 
514 /*
515 ==============
516 SpawnEntities
517 
518 Creates a server's entity / program execution context by
519 parsing textual entity definitions out of an ent file.
520 ==============
521 */
522 void SpawnEntities (char *mapname, char *entities, char *spawnpoint)
523 {
524  edict_t *ent;
525  int inhibit;
526  char *com_token;
527  int i;
528  float skill_level;
529 
530  skill_level = floor (skill->value);
531  if (skill_level < 0)
532  skill_level = 0;
533  if (skill_level > 3)
534  skill_level = 3;
535  if (skill->value != skill_level)
536  gi.cvar_forceset("skill", va("%f", skill_level));
537 
538  SaveClientData ();
539 
541 
542  memset (&level, 0, sizeof(level));
543  memset (g_edicts, 0, game.maxentities * sizeof (g_edicts[0]));
544 
545  strncpy (level.mapname, mapname, sizeof(level.mapname)-1);
546  strncpy (game.spawnpoint, spawnpoint, sizeof(game.spawnpoint)-1);
547 
548  // set client fields on player ents
549  for (i=0 ; i<game.maxclients ; i++)
550  g_edicts[i+1].client = game.clients + i;
551 
552  ent = NULL;
553  inhibit = 0;
554 
555 // parse ents
556  while (1)
557  {
558  // parse the opening brace
559  com_token = COM_Parse (&entities);
560  if (!entities)
561  break;
562  if (com_token[0] != '{')
563  gi.error ("ED_LoadFromFile: found %s when expecting {",com_token);
564 
565  if (!ent)
566  ent = g_edicts;
567  else
568  ent = G_Spawn ();
569  entities = ED_ParseEdict (entities, ent);
570 
571  // yet another map hack
572  if (!Q_stricmp(level.mapname, "command") && !Q_stricmp(ent->classname, "trigger_once") && !Q_stricmp(ent->model, "*27"))
574 
575  // remove things (except the world) from different skill levels or deathmatch
576  if (ent != g_edicts)
577  {
578  if (deathmatch->value)
579  {
581  {
582  G_FreeEdict (ent);
583  inhibit++;
584  continue;
585  }
586  }
587  else
588  {
589  if ( /* ((coop->value) && (ent->spawnflags & SPAWNFLAG_NOT_COOP)) || */
590  ((skill->value == 0) && (ent->spawnflags & SPAWNFLAG_NOT_EASY)) ||
591  ((skill->value == 1) && (ent->spawnflags & SPAWNFLAG_NOT_MEDIUM)) ||
592  (((skill->value == 2) || (skill->value == 3)) && (ent->spawnflags & SPAWNFLAG_NOT_HARD))
593  )
594  {
595  G_FreeEdict (ent);
596  inhibit++;
597  continue;
598  }
599  }
600 
602  }
603 
604  ED_CallSpawn (ent);
605  }
606 
607  gi.dprintf ("%i entities inhibited\n", inhibit);
608 
609 #ifdef DEBUG
610  i = 1;
611  ent = EDICT_NUM(i);
612  while (i < globals.num_edicts) {
613  if (ent->inuse != 0 || ent->inuse != 1)
614  Com_DPrintf("Invalid entity %d\n", i);
615  i++, ent++;
616  }
617 #endif
618 
619  G_FindTeams ();
620 
621  PlayerTrail_Init ();
622 }
623 
624 
625 //===================================================================
626 
627 #if 0
628  // cursor positioning
629  xl <value>
630  xr <value>
631  yb <value>
632  yt <value>
633  xv <value>
634  yv <value>
635 
636  // drawing
637  statpic <name>
638  pic <stat>
639  num <fieldwidth> <stat>
640  string <stat>
641 
642  // control
643  if <stat>
644  ifeq <stat> <value>
645  ifbit <stat> <value>
646  endif
647 
648 #endif
649 
651 "yb -24 "
652 
653 // health
654 "xv 0 "
655 "hnum "
656 "xv 50 "
657 "pic 0 "
658 
659 // ammo
660 "if 2 "
661 " xv 100 "
662 " anum "
663 " xv 150 "
664 " pic 2 "
665 "endif "
666 
667 // armor
668 "if 4 "
669 " xv 200 "
670 " rnum "
671 " xv 250 "
672 " pic 4 "
673 "endif "
674 
675 // selected item
676 "if 6 "
677 " xv 296 "
678 " pic 6 "
679 "endif "
680 
681 "yb -50 "
682 
683 // picked up item
684 "if 7 "
685 " xv 0 "
686 " pic 7 "
687 " xv 26 "
688 " yb -42 "
689 " stat_string 8 "
690 " yb -50 "
691 "endif "
692 
693 // timer
694 "if 9 "
695 " xv 262 "
696 " num 2 10 "
697 " xv 296 "
698 " pic 9 "
699 "endif "
700 
701 // help / weapon icon
702 "if 11 "
703 " xv 148 "
704 " pic 11 "
705 "endif "
706 ;
707 
709 "yb -24 "
710 
711 // health
712 "xv 0 "
713 "hnum "
714 "xv 50 "
715 "pic 0 "
716 
717 // ammo
718 "if 2 "
719 " xv 100 "
720 " anum "
721 " xv 150 "
722 " pic 2 "
723 "endif "
724 
725 // armor
726 "if 4 "
727 " xv 200 "
728 " rnum "
729 " xv 250 "
730 " pic 4 "
731 "endif "
732 
733 // selected item
734 "if 6 "
735 " xv 296 "
736 " pic 6 "
737 "endif "
738 
739 "yb -50 "
740 
741 // picked up item
742 "if 7 "
743 " xv 0 "
744 " pic 7 "
745 " xv 26 "
746 " yb -42 "
747 " stat_string 8 "
748 " yb -50 "
749 "endif "
750 
751 // timer
752 "if 9 "
753 " xv 246 "
754 " num 2 10 "
755 " xv 296 "
756 " pic 9 "
757 "endif "
758 
759 // help / weapon icon
760 "if 11 "
761 " xv 148 "
762 " pic 11 "
763 "endif "
764 
765 // frags
766 "xr -50 "
767 "yt 2 "
768 "num 3 14 "
769 
770 // spectator
771 "if 17 "
772  "xv 0 "
773  "yb -58 "
774  "string2 \"SPECTATOR MODE\" "
775 "endif "
776 
777 // chase camera
778 "if 16 "
779  "xv 0 "
780  "yb -68 "
781  "string \"Chasing\" "
782  "xv 64 "
783  "stat_string 16 "
784 "endif "
785 ;
786 
787 
788 /*QUAKED worldspawn (0 0 0) ?
789 
790 Only used for the world.
791 "sky" environment map name
792 "skyaxis" vector axis for rotating sky
793 "skyrotate" speed of rotation in degrees/second
794 "sounds" music cd track number
795 "gravity" 800 is default gravity
796 "message" text to print at user logon
797 */
799 {
800  ent->movetype = MOVETYPE_PUSH;
801  ent->solid = SOLID_BSP;
802  ent->inuse = true; // since the world doesn't use G_Spawn()
803  ent->s.modelindex = 1; // world model is always index 1
804 
805  //---------------
806 
807  // reserve some spots for dead player bodies for coop / deathmatch
808  InitBodyQue ();
809 
810  // set configstrings for items
811  SetItemNames ();
812 
813  if (st.nextmap)
814  strcpy (level.nextmap, st.nextmap);
815 
816  // make some data visible to the server
817 
818  if (ent->message && ent->message[0])
819  {
820  gi.configstring (CS_NAME, ent->message);
821  strncpy (level.level_name, ent->message, sizeof(level.level_name));
822  }
823  else
824  strncpy (level.level_name, level.mapname, sizeof(level.level_name));
825 
826  if (st.sky && st.sky[0])
828  else
829  gi.configstring (CS_SKY, "unit1_");
830 
832 
833  gi.configstring (CS_SKYAXIS, va("%f %f %f",
834  st.skyaxis[0], st.skyaxis[1], st.skyaxis[2]) );
835 
836  gi.configstring (CS_CDTRACK, va("%i", ent->sounds) );
837 
838  gi.configstring (CS_MAXCLIENTS, va("%i", (int)(maxclients->value) ) );
839 
840  // status bar program
841  if (deathmatch->value)
843  else
845 
846  //---------------
847 
848 
849  // help icon for statusbar
850  gi.imageindex ("i_help");
851  level.pic_health = gi.imageindex ("i_health");
852  gi.imageindex ("help");
853  gi.imageindex ("field_3");
854 
855  if (!st.gravity)
856  gi.cvar_set("sv_gravity", "800");
857  else
858  gi.cvar_set("sv_gravity", st.gravity);
859 
860  snd_fry = gi.soundindex ("player/fry.wav"); // standing in lava / slime
861 
862  PrecacheItem (FindItem ("Blaster"));
863 
864  gi.soundindex ("player/lava1.wav");
865  gi.soundindex ("player/lava2.wav");
866 
867  gi.soundindex ("misc/pc_up.wav");
868  gi.soundindex ("misc/talk1.wav");
869 
870  gi.soundindex ("misc/udeath.wav");
871 
872  // gibs
873  gi.soundindex ("items/respawn1.wav");
874 
875  // sexed sounds
876  gi.soundindex ("*death1.wav");
877  gi.soundindex ("*death2.wav");
878  gi.soundindex ("*death3.wav");
879  gi.soundindex ("*death4.wav");
880  gi.soundindex ("*fall1.wav");
881  gi.soundindex ("*fall2.wav");
882  gi.soundindex ("*gurp1.wav"); // drowning damage
883  gi.soundindex ("*gurp2.wav");
884  gi.soundindex ("*jump1.wav"); // player jump
885  gi.soundindex ("*pain25_1.wav");
886  gi.soundindex ("*pain25_2.wav");
887  gi.soundindex ("*pain50_1.wav");
888  gi.soundindex ("*pain50_2.wav");
889  gi.soundindex ("*pain75_1.wav");
890  gi.soundindex ("*pain75_2.wav");
891  gi.soundindex ("*pain100_1.wav");
892  gi.soundindex ("*pain100_2.wav");
893 
894  // sexed models
895  // THIS ORDER MUST MATCH THE DEFINES IN g_local.h
896  // you can add more, max 15
897  gi.modelindex ("#w_blaster.md2");
898  gi.modelindex ("#w_shotgun.md2");
899  gi.modelindex ("#w_sshotgun.md2");
900  gi.modelindex ("#w_machinegun.md2");
901  gi.modelindex ("#w_chaingun.md2");
902  gi.modelindex ("#a_grenades.md2");
903  gi.modelindex ("#w_glauncher.md2");
904  gi.modelindex ("#w_rlauncher.md2");
905  gi.modelindex ("#w_hyperblaster.md2");
906  gi.modelindex ("#w_railgun.md2");
907  gi.modelindex ("#w_bfg.md2");
908 
909  //-------------------
910 
911  gi.soundindex ("player/gasp1.wav"); // gasping for air
912  gi.soundindex ("player/gasp2.wav"); // head breaking surface, not gasping
913 
914  gi.soundindex ("player/watr_in.wav"); // feet hitting water
915  gi.soundindex ("player/watr_out.wav"); // feet leaving water
916 
917  gi.soundindex ("player/watr_un.wav"); // head going underwater
918 
919  gi.soundindex ("player/u_breath1.wav");
920  gi.soundindex ("player/u_breath2.wav");
921 
922  gi.soundindex ("items/pkup.wav"); // bonus item pickup
923  gi.soundindex ("world/land.wav"); // landing thud
924  gi.soundindex ("misc/h2ohit1.wav"); // landing splash
925 
926  gi.soundindex ("items/damage.wav");
927  gi.soundindex ("items/protect.wav");
928  gi.soundindex ("items/protect4.wav");
929  gi.soundindex ("weapons/noammo.wav");
930 
931  gi.soundindex ("infantry/inflies1.wav");
932 
933  sm_meat_index = gi.modelindex ("models/objects/gibs/sm_meat/tris.md2");
934  gi.modelindex ("models/objects/gibs/arm/tris.md2");
935  gi.modelindex ("models/objects/gibs/bone/tris.md2");
936  gi.modelindex ("models/objects/gibs/bone2/tris.md2");
937  gi.modelindex ("models/objects/gibs/chest/tris.md2");
938  gi.modelindex ("models/objects/gibs/skull/tris.md2");
939  gi.modelindex ("models/objects/gibs/head2/tris.md2");
940 
941 //
942 // Setup light animation tables. 'a' is total darkness, 'z' is doublebright.
943 //
944 
945  // 0 normal
946  gi.configstring(CS_LIGHTS+0, "m");
947 
948  // 1 FLICKER (first variety)
949  gi.configstring(CS_LIGHTS+1, "mmnmmommommnonmmonqnmmo");
950 
951  // 2 SLOW STRONG PULSE
952  gi.configstring(CS_LIGHTS+2, "abcdefghijklmnopqrstuvwxyzyxwvutsrqponmlkjihgfedcba");
953 
954  // 3 CANDLE (first variety)
955  gi.configstring(CS_LIGHTS+3, "mmmmmaaaaammmmmaaaaaabcdefgabcdefg");
956 
957  // 4 FAST STROBE
958  gi.configstring(CS_LIGHTS+4, "mamamamamama");
959 
960  // 5 GENTLE PULSE 1
961  gi.configstring(CS_LIGHTS+5,"jklmnopqrstuvwxyzyxwvutsrqponmlkj");
962 
963  // 6 FLICKER (second variety)
964  gi.configstring(CS_LIGHTS+6, "nmonqnmomnmomomno");
965 
966  // 7 CANDLE (second variety)
967  gi.configstring(CS_LIGHTS+7, "mmmaaaabcdefgmmmmaaaammmaamm");
968 
969  // 8 CANDLE (third variety)
970  gi.configstring(CS_LIGHTS+8, "mmmaaammmaaammmabcdefaaaammmmabcdefmmmaaaa");
971 
972  // 9 SLOW STROBE (fourth variety)
973  gi.configstring(CS_LIGHTS+9, "aaaaaaaazzzzzzzz");
974 
975  // 10 FLUORESCENT FLICKER
976  gi.configstring(CS_LIGHTS+10, "mmamammmmammamamaaamammma");
977 
978  // 11 SLOW PULSE NOT FADE TO BLACK
979  gi.configstring(CS_LIGHTS+11, "abcdefghijklmnopqrrqponmlkjihgfedcba");
980 
981  // styles 32-62 are assigned by the light program for switchable lights
982 
983  // 63 testing
984  gi.configstring(CS_LIGHTS+63, "a");
985 }
986 
FindItem
gitem_t * FindItem(char *pickup_name)
Definition: g_items.c:100
SP_func_plat
void SP_func_plat(edict_t *ent)
Definition: g_func.c:513
gi
game_import_t gi
Definition: g_main.c:25
CS_MAXCLIENTS
#define CS_MAXCLIENTS
Definition: q_shared.h:1133
game_import_t::dprintf
void(* dprintf)(char *fmt,...)
Definition: game.h:106
edict_s::s
entity_state_t s
Definition: g_local.h:964
deathmatch
cvar_t * deathmatch
Definition: g_main.c:35
PlayerTrail_Init
void PlayerTrail_Init(void)
Definition: p_trail.c:49
value
GLfloat value
Definition: qgl_win.c:63
SP_monster_parasite
void SP_monster_parasite(edict_t *self)
Definition: m_parasite.c:506
SP_target_blaster
void SP_target_blaster(edict_t *ent)
Definition: g_target.c:431
CS_SKY
#define CS_SKY
Definition: q_shared.h:1127
SP_trigger_once
void SP_trigger_once(edict_t *ent)
Definition: g_trigger.c:168
SP_misc_bigviper
void SP_misc_bigviper(edict_t *self)
Definition: g_misc.c:1316
SP_func_rotating
void SP_func_rotating(edict_t *ent)
Definition: g_func.c:623
SP_target_explosion
void SP_target_explosion(edict_t *ent)
Definition: g_target.c:258
edict_s::model
char * model
Definition: g_local.h:998
G_Spawn
edict_t * G_Spawn(void)
Definition: g_utils.c:420
SP_monster_infantry
void SP_monster_infantry(edict_t *self)
Definition: m_infantry.c:556
SP_monster_chick
void SP_monster_chick(edict_t *self)
Definition: m_chick.c:628
field_t
Definition: g_local.h:583
SP_target_earthquake
void SP_target_earthquake(edict_t *ent)
Definition: g_target.c:793
SP_misc_eastertank
void SP_misc_eastertank(edict_t *self)
Definition: g_misc.c:1071
F_IGNORE
@ F_IGNORE
Definition: g_local.h:580
SP_func_killbox
void SP_func_killbox(edict_t *ent)
Definition: g_func.c:2042
maxclients
cvar_t * maxclients
Definition: g_main.c:44
spawn_t::spawn
void(* spawn)(edict_t *ent)
Definition: g_spawn.c:26
SP_trigger_key
void SP_trigger_key(edict_t *ent)
Definition: g_trigger.c:282
SP_monster_soldier_light
void SP_monster_soldier_light(edict_t *self)
Definition: m_soldier.c:1238
SP_target_crosslevel_target
void SP_target_crosslevel_target(edict_t *ent)
Definition: g_target.c:478
SP_func_explosive
void SP_func_explosive(edict_t *self)
Definition: g_misc.c:823
InitBodyQue
void InitBodyQue(void)
Definition: p_client.c:918
spawn_temp_t::gravity
char * gravity
Definition: g_local.h:361
snd_fry
int snd_fry
Definition: g_main.c:30
SP_func_object
void SP_func_object(edict_t *self)
Definition: g_misc.c:692
v
GLdouble v
Definition: qgl_win.c:143
SP_monster_gladiator
void SP_monster_gladiator(edict_t *self)
Definition: m_gladiator.c:339
F_VECTOR
@ F_VECTOR
Definition: g_local.h:573
st
spawn_temp_t st
Definition: g_main.c:27
SP_monster_boss2
void SP_monster_boss2(edict_t *self)
Definition: m_boss2.c:636
SP_func_train
void SP_func_train(edict_t *ent)
Definition: g_func.c:1654
CS_SKYROTATE
#define CS_SKYROTATE
Definition: q_shared.h:1129
SPAWNFLAG_NOT_EASY
#define SPAWNFLAG_NOT_EASY
Definition: g_local.h:50
CS_CDTRACK
#define CS_CDTRACK
Definition: q_shared.h:1126
SP_misc_easterchick
void SP_misc_easterchick(edict_t *self)
Definition: g_misc.c:1099
ED_NewString
char * ED_NewString(char *string)
Definition: g_spawn.c:319
com_token
char com_token[MAX_TOKEN_CHARS]
Definition: q_shared.c:1063
SP_target_speaker
void SP_target_speaker(edict_t *ent)
Definition: g_target.c:81
SP_info_null
void SP_info_null(edict_t *self)
Definition: g_misc.c:519
qboolean
qboolean
Definition: q_shared.h:56
edict_s::inuse
qboolean inuse
Definition: g_local.h:970
SP_misc_blackhole
void SP_misc_blackhole(edict_t *self)
Definition: g_misc.c:1043
SpawnItem
void SpawnItem(edict_t *ent, gitem_t *item)
Definition: g_items.c:1061
SP_target_temp_entity
void SP_target_temp_entity(edict_t *ent)
Definition: g_target.c:34
SP_trigger_hurt
void SP_trigger_hurt(edict_t *ent)
Definition: g_trigger.c:496
SP_monster_commander_body
void SP_monster_commander_body(edict_t *self)
Definition: g_misc.c:1170
i
int i
Definition: q_shared.c:305
MOVETYPE_PUSH
@ MOVETYPE_PUSH
Definition: g_local.h:190
SP_light_mine2
void SP_light_mine2(edict_t *ent)
Definition: g_misc.c:1484
SP_turret_base
void SP_turret_base(edict_t *self)
Definition: g_turret.c:259
SP_misc_gib_arm
void SP_misc_gib_arm(edict_t *self)
Definition: g_misc.c:1496
SP_monster_jorg
void SP_monster_jorg(edict_t *self)
Definition: m_boss31.c:696
SP_target_splash
void SP_target_splash(edict_t *ent)
Definition: g_target.c:352
SP_misc_banner
void SP_misc_banner(edict_t *self)
Definition: g_misc.c:1202
TAG_LEVEL
#define TAG_LEVEL
Definition: g_local.h:77
dm_statusbar
char * dm_statusbar
Definition: g_spawn.c:708
CS_NAME
#define CS_NAME
Definition: q_shared.h:1125
SP_turret_driver
void SP_turret_driver(edict_t *self)
Definition: g_turret.c:387
SP_monster_flipper
void SP_monster_flipper(edict_t *self)
Definition: m_flipper.c:361
SP_info_player_deathmatch
void SP_info_player_deathmatch(edict_t *ent)
Definition: p_client.c:123
SPAWNFLAG_NOT_MEDIUM
#define SPAWNFLAG_NOT_MEDIUM
Definition: g_local.h:51
game_locals_t::spawnpoint
char spawnpoint[512]
Definition: g_local.h:281
g_edicts
edict_t * g_edicts
Definition: g_main.c:33
itemlist
gitem_t itemlist[]
Definition: g_items.c:1134
PrecacheItem
void PrecacheItem(gitem_t *it)
Definition: g_items.c:993
SP_monster_floater
void SP_monster_floater(edict_t *self)
Definition: m_float.c:611
edict_s::movetype
int movetype
Definition: g_local.h:995
game_import_t::imageindex
int(* imageindex)(char *name)
Definition: game.h:123
SP_func_areaportal
void SP_func_areaportal(edict_t *ent)
Definition: g_misc.c:44
j
GLint j
Definition: qgl_win.c:150
F_FLOAT
@ F_FLOAT
Definition: g_local.h:570
va
char * va(char *format,...)
Definition: q_shared.c:1050
SetItemNames
void SetItemNames(void)
Definition: g_items.c:2200
FFL_NOSPAWN
#define FFL_NOSPAWN
Definition: g_local.h:566
edict_s::message
char * message
Definition: g_local.h:1004
SP_func_button
void SP_func_button(edict_t *ent)
Definition: g_func.c:763
game_import_t::cvar_set
cvar_t *(* cvar_set)(char *var_name, char *value)
Definition: game.h:163
SP_misc_actor
void SP_misc_actor(edict_t *self)
Definition: m_actor.c:425
field_t::name
char * name
Definition: g_local.h:585
edict_s::classname
char * classname
Definition: g_local.h:1005
ED_CallSpawn
void ED_CallSpawn(edict_t *ent)
Definition: g_spawn.c:278
edict_s
Definition: g_local.h:962
ED_ParseField
void ED_ParseField(char *key, char *value, edict_t *ent)
Definition: g_spawn.c:358
G_FreeEdict
void G_FreeEdict(edict_t *e)
Definition: g_utils.c:452
SP_info_player_intermission
void SP_info_player_intermission(edict_t *ent)
SP_misc_teleporter
void SP_misc_teleporter(edict_t *self)
Definition: g_misc.c:1832
SP_target_laser
void SP_target_laser(edict_t *self)
Definition: g_target.c:642
SP_misc_strogg_ship
void SP_misc_strogg_ship(edict_t *self)
Definition: g_misc.c:1415
SP_light
void SP_light(edict_t *self)
Definition: g_misc.c:559
game_locals_t::num_items
int num_items
Definition: g_local.h:291
SP_target_goal
void SP_target_goal(edict_t *ent)
Definition: g_target.c:202
SP_path_corner
void SP_path_corner(edict_t *self)
Definition: g_misc.c:399
game_import_t::cvar_forceset
cvar_t *(* cvar_forceset)(char *var_name, char *value)
Definition: game.h:164
SP_target_spawner
void SP_target_spawner(edict_t *ent)
Definition: g_target.c:396
game_import_t::configstring
void(* configstring)(int num, char *string)
Definition: game.h:116
game_import_t::soundindex
int(* soundindex)(char *name)
Definition: game.h:122
SP_trigger_push
void SP_trigger_push(edict_t *ent)
Definition: g_trigger.c:424
edict_s::spawnflags
int spawnflags
Definition: g_local.h:1006
edict_s::sounds
int sounds
Definition: g_local.h:1066
spawn_temp_t::nextmap
char * nextmap
Definition: g_local.h:353
SP_light_mine1
void SP_light_mine1(edict_t *ent)
Definition: g_misc.c:1473
SP_target_character
void SP_target_character(edict_t *ent)
Definition: g_misc.c:1563
field_t::type
fieldtype_t type
Definition: g_local.h:587
game_import_t::modelindex
int(* modelindex)(char *name)
Definition: game.h:121
SP_item_health
void SP_item_health(edict_t *self)
Definition: g_items.c:2121
SP_monster_flyer
void SP_monster_flyer(edict_t *self)
Definition: m_flyer.c:573
SP_misc_insane
void SP_misc_insane(edict_t *self)
Definition: m_insane.c:623
SP_func_door_rotating
void SP_func_door_rotating(edict_t *ent)
Definition: g_func.c:1261
game_locals_t::clients
gclient_t * clients
Definition: g_local.h:277
SP_misc_teleporter_dest
void SP_misc_teleporter_dest(edict_t *self)
Definition: g_misc.c:1868
cvar_s::value
float value
Definition: q_shared.h:324
ED_ParseEdict
char * ED_ParseEdict(char *data, edict_t *ent)
Definition: g_spawn.c:416
spawn_t::name
char * name
Definition: g_spawn.c:25
game
game_locals_t game
Definition: g_main.c:23
SpawnEntities
void SpawnEntities(char *mapname, char *entities, char *spawnpoint)
Definition: g_spawn.c:522
SP_target_secret
void SP_target_secret(edict_t *ent)
Definition: g_target.c:164
SP_func_conveyor
void SP_func_conveyor(edict_t *self)
Definition: g_func.c:1842
field_t::ofs
int ofs
Definition: g_local.h:586
NULL
#define NULL
Definition: q_shared.h:60
globals
game_export_t globals
Definition: g_main.c:26
edict_s::solid
solid_t solid
Definition: g_local.h:986
game_import_t::TagMalloc
void *(* TagMalloc)(int size, int tag)
Definition: game.h:157
spawn_t
Definition: g_spawn.c:23
SP_func_door_secret
void SP_func_door_secret(edict_t *ent)
Definition: g_func.c:1966
FFL_SPAWNTEMP
#define FFL_SPAWNTEMP
Definition: g_local.h:565
SP_misc_gib_leg
void SP_misc_gib_leg(edict_t *self)
Definition: g_misc.c:1517
sm_meat_index
int sm_meat_index
Definition: g_main.c:29
SP_monster_soldier_ss
void SP_monster_soldier_ss(edict_t *self)
Definition: m_soldier.c:1282
SP_misc_satellite_dish
void SP_misc_satellite_dish(edict_t *self)
Definition: g_misc.c:1459
field_t::flags
int flags
Definition: g_local.h:588
CS_SKYAXIS
#define CS_SKYAXIS
Definition: q_shared.h:1128
Q_stricmp
int Q_stricmp(char *s1, char *s2)
Definition: q_shared.c:1192
SP_monster_hover
void SP_monster_hover(edict_t *self)
Definition: m_hover.c:573
SP_misc_explobox
void SP_misc_explobox(edict_t *self)
Definition: g_misc.c:974
edict_s::team
char * team
Definition: g_local.h:1014
skill
cvar_t * skill
Definition: g_main.c:38
SP_monster_medic
void SP_monster_medic(edict_t *self)
Definition: m_medic.c:718
SP_worldspawn
void SP_worldspawn(edict_t *ent)
Definition: g_spawn.c:798
SP_info_player_start
void SP_info_player_start(edict_t *ent)
Definition: p_client.c:108
SP_monster_berserk
void SP_monster_berserk(edict_t *self)
Definition: m_berserk.c:413
SP_misc_gib_head
void SP_misc_gib_head(edict_t *self)
Definition: g_misc.c:1538
SP_item_health_large
void SP_item_health_large(edict_t *self)
Definition: g_items.c:2154
CS_STATUSBAR
#define CS_STATUSBAR
Definition: q_shared.h:1130
game_import_t::error
void(* error)(char *fmt,...)
Definition: game.h:118
SP_turret_breach
void SP_turret_breach(edict_t *self)
Definition: g_turret.c:220
SP_target_string
void SP_target_string(edict_t *ent)
Definition: g_misc.c:1607
SP_target_actor
void SP_target_actor(edict_t *ent)
Definition: m_actor.c:585
SPAWNFLAG_NOT_DEATHMATCH
#define SPAWNFLAG_NOT_DEATHMATCH
Definition: g_local.h:53
SPAWNFLAG_NOT_HARD
#define SPAWNFLAG_NOT_HARD
Definition: g_local.h:52
SP_trigger_monsterjump
void SP_trigger_monsterjump(edict_t *ent)
Definition: g_trigger.c:586
SP_func_water
void SP_func_water(edict_t *ent)
Definition: g_func.c:1378
SP_monster_tank
void SP_monster_tank(edict_t *self)
Definition: m_tank.c:792
SP_func_clock
void SP_func_clock(edict_t *ent)
Definition: g_misc.c:1750
level
GLint level
Definition: qgl_win.c:116
edict_s::flags
int flags
Definition: g_local.h:996
FL_TEAMSLAVE
#define FL_TEAMSLAVE
Definition: g_local.h:67
SP_target_crosslevel_trigger
void SP_target_crosslevel_trigger(edict_t *ent)
Definition: g_target.c:457
SP_target_help
void SP_target_help(edict_t *ent)
Definition: g_target.c:131
SOLID_BSP
@ SOLID_BSP
Definition: game.h:38
SP_monster_gunner
void SP_monster_gunner(edict_t *self)
Definition: m_gunner.c:581
COM_Parse
char * COM_Parse(char **data_p)
Definition: q_shared.c:1072
SPAWNFLAG_NOT_COOP
#define SPAWNFLAG_NOT_COOP
Definition: g_local.h:54
edict_s::teammaster
edict_t * teammaster
Definition: g_local.h:1076
game_import_t::FreeTags
void(* FreeTags)(int tag)
Definition: game.h:159
entity_state_s::modelindex
int modelindex
Definition: q_shared.h:1176
spawns
spawn_t spawns[]
Definition: g_spawn.c:148
SP_trigger_multiple
void SP_trigger_multiple(edict_t *ent)
Definition: g_trigger.c:118
Com_DPrintf
void Com_DPrintf(char *fmt,...)
Definition: common.c:155
SP_info_notnull
void SP_info_notnull(edict_t *self)
Definition: g_misc.c:528
SP_trigger_always
void SP_trigger_always(edict_t *ent)
Definition: g_trigger.c:373
spawn_temp_t::skyaxis
vec3_t skyaxis
Definition: g_local.h:352
spawn_temp_t::sky
char * sky
Definition: g_local.h:350
SP_point_combat
void SP_point_combat(edict_t *self)
Definition: g_misc.c:474
SP_item_health_small
void SP_item_health_small(edict_t *self)
Definition: g_items.c:2137
EDICT_NUM
#define EDICT_NUM(n)
Definition: server.h:69
G_FindTeams
void G_FindTeams(void)
Definition: g_spawn.c:472
SP_trigger_gravity
void SP_trigger_gravity(edict_t *ent)
Definition: g_trigger.c:537
CS_LIGHTS
#define CS_LIGHTS
Definition: q_shared.h:1139
F_LSTRING
@ F_LSTRING
Definition: g_local.h:571
SP_info_player_coop
void SP_info_player_coop(edict_t *ent)
Definition: p_client.c:137
SaveClientData
void SaveClientData(void)
Definition: p_client.c:650
SP_func_door
void SP_func_door(edict_t *ent)
Definition: g_func.c:1138
game_locals_t::maxentities
int maxentities
Definition: g_local.h:285
SP_trigger_elevator
void SP_trigger_elevator(edict_t *ent)
Definition: g_func.c:1750
fields
field_t fields[]
Definition: g_save.c:27
SP_monster_brain
void SP_monster_brain(edict_t *self)
Definition: m_brain.c:621
edict_s::teamchain
edict_t * teamchain
Definition: g_local.h:1075
SP_misc_viper_bomb
void SP_misc_viper_bomb(edict_t *self)
Definition: g_misc.c:1378
spawn_temp_t::skyrotate
float skyrotate
Definition: g_local.h:351
single_statusbar
char * single_statusbar
Definition: g_spawn.c:650
F_INT
@ F_INT
Definition: g_local.h:569
SP_misc_easterchick2
void SP_misc_easterchick2(edict_t *self)
Definition: g_misc.c:1127
SP_monster_supertank
void SP_monster_supertank(edict_t *self)
Definition: m_supertank.c:672
SP_trigger_counter
void SP_trigger_counter(edict_t *ent)
Definition: g_trigger.c:352
F_ANGLEHACK
@ F_ANGLEHACK
Definition: g_local.h:574
vec3_t
vec_t vec3_t[3]
Definition: q_shared.h:127
SP_func_wall
void SP_func_wall(edict_t *self)
Definition: g_misc.c:612
SP_viewthing
void SP_viewthing(edict_t *ent)
Definition: g_misc.c:499
SP_func_timer
void SP_func_timer(edict_t *self)
Definition: g_func.c:1795
game_export_t::num_edicts
int num_edicts
Definition: game.h:231
SP_trigger_relay
void SP_trigger_relay(edict_t *ent)
Definition: g_trigger.c:194
SP_item_health_mega
void SP_item_health_mega(edict_t *self)
Definition: g_items.c:2170
void
void(APIENTRY *qglAccum)(GLenum op
SP_target_lightramp
void SP_target_lightramp(edict_t *self)
Definition: g_target.c:715
SP_monster_boss3_stand
void SP_monster_boss3_stand(edict_t *self)
Definition: m_boss3.c:53
SP_misc_deadsoldier
void SP_misc_deadsoldier(edict_t *self)
Definition: g_misc.c:1230
SP_misc_viper
void SP_misc_viper(edict_t *self)
Definition: g_misc.c:1285
SP_monster_soldier
void SP_monster_soldier(edict_t *self)
Definition: m_soldier.c:1261
SP_monster_mutant
void SP_monster_mutant(edict_t *self)
Definition: m_mutant.c:611
g_local.h
SP_target_changelevel
void SP_target_changelevel(edict_t *ent)
Definition: g_target.c:302
gitem_s::classname
char * classname
Definition: g_local.h:236
gitem_s
Definition: g_local.h:234
game_locals_t::maxclients
int maxclients
Definition: g_local.h:284