]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/common/monsters/spawn.qc
Merge remote-tracking branch 'origin/Mario/train_fix'
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / monsters / spawn.qc
1 entity spawnmonster (string monster, float monster_id, entity spawnedby, entity own, vector orig, float respwn, float moveflag)
2 {
3         // ensure spawnfunc database is initialized
4         initialize_field_db();
5
6         entity e = spawn();
7         float i;
8
9         e.spawnflags = MONSTERFLAG_SPAWNED;
10
11         if(!respwn)
12                 e.spawnflags |= MONSTERFLAG_NORESPAWN;
13
14         setorigin(e, orig);
15
16         if(monster == "random")
17         {
18                 RandomSelection_Init();
19                 for(i = MON_FIRST; i <= MON_LAST; ++i)
20                         RandomSelection_Add(world, 0, (get_monsterinfo(i)).netname, 1, 1);
21
22                 monster = RandomSelection_chosen_string;
23         }
24
25         if(monster != "")
26         {
27                 float found = 0;
28                 entity mon;
29                 for(i = MON_FIRST; i <= MON_LAST; ++i)
30                 {
31                         mon = get_monsterinfo(i);
32                         if(mon.netname == monster)
33                         {
34                                 found = TRUE;
35                                 break;
36                         }
37                 }
38                 if(!found)
39                         monster = (get_monsterinfo(MON_FIRST)).netname;
40         }
41
42         if(monster == "")
43         if(monster_id)
44                 monster = (get_monsterinfo(monster_id)).netname;
45
46         e.realowner = spawnedby;
47
48         if(moveflag)
49                 e.monster_moveflags = moveflag;
50
51         if(IS_PLAYER(spawnedby))
52         {
53                 if(teamplay && autocvar_g_monsters_teams)
54                         e.team = spawnedby.team; // colors handled in spawn code
55
56                 if(autocvar_g_monsters_owners)
57                         e.monster_owner = own; // using .owner makes the monster non-solid for its master
58
59                 e.angles = spawnedby.angles;
60         }
61
62         monster = strcat("$ spawnfunc_monster_", monster);
63
64         target_spawn_edit_entity(e, monster, world, world, world, world, world);
65
66         return e;
67 }