]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Disable extra monsters
authorMario <mario.mario@y7mail.com>
Sat, 12 Oct 2013 16:09:49 +0000 (03:09 +1100)
committerMario <mario.mario@y7mail.com>
Sat, 12 Oct 2013 16:09:49 +0000 (03:09 +1100)
15 files changed:
qcsrc/common/monsters/monster/animus.qc
qcsrc/common/monsters/monster/bruiser.qc
qcsrc/common/monsters/monster/brute.qc
qcsrc/common/monsters/monster/cerberus.qc
qcsrc/common/monsters/monster/knight.qc
qcsrc/common/monsters/monster/slime.qc
qcsrc/common/monsters/monster/stingray.qc
qcsrc/common/monsters/monsters.qh
qcsrc/common/monsters/spawn.qc
qcsrc/common/monsters/spawn.qh
qcsrc/common/monsters/sv_monsters.qc
qcsrc/common/monsters/sv_monsters.qh
qcsrc/server/command/sv_cmd.qc
qcsrc/server/mutators/gamemode_invasion.qc
qcsrc/server/mutators/mutator_new_toys.qc

index f56bdbefbcbfedb87708b23d3822830e6708d8d2..aa3dba2a837157b701df065d291e6e2fcbbd6e38 100644 (file)
@@ -2,7 +2,7 @@
 REGISTER_MONSTER(
 /* MON_##id   */ ANIMUS,
 /* function   */ m_animus,
-/* spawnflags */ MONSTER_SIZE_BROKEN | MON_FLAG_MELEE,
+/* spawnflags */ MONSTER_SIZE_BROKEN | MON_FLAG_MELEE | MON_FLAG_MUTATORBLOCKED,
 /* mins,maxs  */ '-41 -41 -31', '41 41 31',
 /* model      */ "demon.mdl",
 /* netname    */ "animus",
index 81602ad1097bdf4b4de1b9c165b21d9574367525..dfb6d0787b56c5ca767e66a3b1b5aec561921a06 100644 (file)
@@ -2,7 +2,7 @@
 REGISTER_MONSTER(
 /* MON_##id   */ BRUISER,
 /* function   */ m_bruiser,
-/* spawnflags */ MONSTER_SIZE_BROKEN | MON_FLAG_MELEE,
+/* spawnflags */ MONSTER_SIZE_BROKEN | MON_FLAG_MELEE | MON_FLAG_MUTATORBLOCKED,
 /* mins,maxs  */ '-20 -20 -31', '20 20 53',
 /* model      */ "knight.mdl",
 /* netname    */ "bruiser",
index 9442c174fcc3f4f17154b86f415bef79ef7e4142..4b7fa561294ce4f484416a668ab0b070bd91c918 100644 (file)
@@ -2,7 +2,7 @@
 REGISTER_MONSTER(
 /* MON_##id   */ BRUTE,
 /* function   */ m_brute,
-/* spawnflags */ MON_FLAG_MELEE | MON_FLAG_RANGED,
+/* spawnflags */ MON_FLAG_MELEE | MON_FLAG_RANGED | MON_FLAG_MUTATORBLOCKED,
 /* mins,maxs  */ '-36 -36 -20', '36 36 50',
 /* model      */ "ogre.dpm",
 /* netname    */ "brute",
index a91f1ddd95f071e42d8243bcca7abc1ea2dc2cc5..b3964103e36ff408d4ea231f76d83fb6fef51812 100644 (file)
@@ -2,7 +2,7 @@
 REGISTER_MONSTER(
 /* MON_##id   */ CERBERUS,
 /* function   */ m_cerberus,
-/* spawnflags */ MON_FLAG_MELEE,
+/* spawnflags */ MON_FLAG_MELEE | MON_FLAG_MUTATORBLOCKED,
 /* mins,maxs  */ '-16 -16 -24', '16 16 12',
 /* model      */ "dog.dpm",
 /* netname    */ "cerberus",
index d4c743fca9d2ccc02645671e8e7e67f8dc8e2c41..1189d93de7b70d445f45dbce91af7e9e912560f5 100644 (file)
@@ -2,7 +2,7 @@
 REGISTER_MONSTER(
 /* MON_##id   */ KNIGHT,
 /* function   */ m_knight,
-/* spawnflags */ MONSTER_SIZE_BROKEN | MON_FLAG_MELEE | MON_FLAG_RANGED,
+/* spawnflags */ MONSTER_SIZE_BROKEN | MON_FLAG_MELEE | MON_FLAG_RANGED | MON_FLAG_MUTATORBLOCKED,
 /* mins,maxs  */ '-20 -20 -32', '20 20 41',
 /* model      */ "hknight.mdl",
 /* netname    */ "knight",
index cebaf340acf866a9a61e630fc4ed6ce35ab253e4..d5f2bd9d0c1f7881f69f67b6ff01e75e83676e95 100644 (file)
@@ -2,7 +2,7 @@
 REGISTER_MONSTER(
 /* MON_##id   */ SLIME,
 /* function   */ m_slime,
-/* spawnflags */ 0,
+/* spawnflags */ MON_FLAG_MUTATORBLOCKED,
 /* mins,maxs  */ '-16 -16 -24', '16 16 16',
 /* model      */ "slime.dpm",
 /* netname    */ "slime",
index a4c80122c959b1e95d754240c3c34fd06ac306b6..e6b47aa441f3592a2d87bfd8d414e4eef51bbb28 100644 (file)
@@ -2,7 +2,7 @@
 REGISTER_MONSTER(
 /* MON_##id   */ STINGRAY,
 /* function   */ m_stingray,
-/* spawnflags */ MONSTER_TYPE_SWIM | MONSTER_SIZE_BROKEN | MON_FLAG_MELEE,
+/* spawnflags */ MONSTER_TYPE_SWIM | MONSTER_SIZE_BROKEN | MON_FLAG_MELEE | MON_FLAG_MUTATORBLOCKED,
 /* mins,maxs  */ '-20 -20 -31', '20 20 20',
 /* model      */ "fish.mdl",
 /* netname    */ "stingray",
index e9a942b45790470f67dc690dd2e48e90d25c1950..0245d4401bf0f2f3990e802341edd92350572513 100644 (file)
@@ -16,6 +16,7 @@ const float MONSTER_SIZE_BROKEN = 128; // TODO: remove when bad models are repla
 const float MON_FLAG_SUPERMONSTER = 256; // incredibly powerful monster
 const float MON_FLAG_RANGED = 512; // monster shoots projectiles
 const float MON_FLAG_MELEE = 1024;
+const float MON_FLAG_MUTATORBLOCKED = 2048;
 
 // entity properties of monsterinfo:
 .float monsterid; // MON_...
index e8dfdd58f951c85af22751e00cbd8361e25e5778..ebe8ba8e085349db82a39094816cff9130480b95 100644 (file)
@@ -1,4 +1,4 @@
-entity spawnmonster (string monster, float mnster, entity spawnedby, entity own, vector orig, float respwn, float moveflag)
+entity spawnmonster (string monster, float monster_id, entity spawnedby, entity own, vector orig, float respwn, float moveflag)
 {
        // ensure spawnfunc database is initialized
        initialize_field_db();
@@ -30,24 +30,24 @@ entity spawnmonster (string monster, float mnster, entity spawnedby, entity own,
        }
                
        if(monster == "")
-       if(mnster)
-               monster = (get_monsterinfo(mnster)).netname;
+       if(monster_id)
+               monster = (get_monsterinfo(monster_id)).netname;
        
        e.realowner = spawnedby;
        
        if(moveflag)
                e.monster_moveflags = moveflag;
+               
+       if(e.team || !IS_PLAYER(spawnedby))
+               e.colormap = 1024;
+       else
+               e.colormap = spawnedby.colormap;
        
        if(IS_PLAYER(spawnedby))
        {
                if(teamplay && autocvar_g_monsters_teams)
                        e.team = spawnedby.team; // colors handled in spawn code
                        
-               if(e.team)
-                       e.colormap = 1024;
-               else
-                       e.colormap = spawnedby.colormap;
-                       
                if(autocvar_g_monsters_owners)
                        e.monster_owner = own; // using .owner makes the monster non-solid for its master
                        
index 7d84103680477a25b8d29d60f97f2d4bbd084919..d3d3fcb34dd79414079bac6646813ed036b27c38 100644 (file)
@@ -1 +1 @@
-entity spawnmonster (string monster, float mnster, entity spawnedby, entity own, vector orig, float respwn, float moveflag);
+entity spawnmonster (string monster, float monster_id, entity spawnedby, entity own, vector orig, float respwn, float moveflag);
index 12f9acb4f8524181764c39a5639807265ff11621..bf56a6245db58b405eebea1c40fba63c068826cb 100644 (file)
@@ -703,6 +703,24 @@ void monster_move(float runspeed, float walkspeed, float stopspeed, float manim_
        monster_checkattack(self, self.enemy);
 }
 
+void monster_remove(entity mon)
+{
+       if not(mon)
+               return; // nothing to remove
+               
+       pointparticles(particleeffectnum("item_pickup"), mon.origin, '0 0 0', 1);
+               
+       if(mon.weaponentity)
+               remove(mon.weaponentity);
+                                       
+       if(mon.iceblock)
+               remove(mon.iceblock);
+                                       
+       WaypointSprite_Kill(mon.sprite);
+                                       
+       remove(mon);
+}
+
 void monster_dead_think()
 {
        self.nextthink = time + self.ticrate;
@@ -961,6 +979,12 @@ float monster_initialize(float mon_id, float nodrop)
                return FALSE;
 
        entity mon = get_monsterinfo(mon_id);
+       
+       if(mon.spawnflags & MON_FLAG_MUTATORBLOCKED)
+       {
+               dprint("Attempted to spawn a mutator-blocked monster rejected");
+               return FALSE;
+       }
 
        // support for quake style removing monsters based on skill
        if(monster_skill <= 1) if(self.spawnflags & MONSTERSKILL_NOTEASY) { return FALSE; }
index 2327887cce5e018506c9c18933ede02fb5970f41..851dacd745c77fa208d59c062a1e51fc98fc4ca9 100644 (file)
@@ -13,6 +13,8 @@ float monsters_killed;
 void monsters_setstatus(); // monsters.qc
 .float monster_moveflags; // checks where to move when not attacking
 
+void monster_remove(entity mon); // removes a monster
+
 .float(float attack_type) monster_attackfunc;
 const float MONSTER_ATTACK_MELEE       = 1;
 const float MONSTER_ATTACK_RANGED      = 2;
index 337138bd01a03cc2615029e589ad1d4f6408ee7e..2791f8bcf18bb892496e7f9de14e0060b01015bb 100644 (file)
@@ -153,15 +153,7 @@ void GameCommand_butcher(float request)
                        
                        FOR_EACH_MONSTER(head)
                        {
-                               if(head.weaponentity)
-                                       remove(head.weaponentity);
-                                       
-                               if(head.iceblock)
-                                       remove(head.iceblock);
-                                       
-                               WaypointSprite_Kill(head.sprite);
-                                       
-                               remove(head);
+                               monster_remove(head);
                                ++removed_count;
                        }
                        
index ca47363753e152f74e092eb37d9712722e11e0aa..1f55f776ad43c3010cb424dda0fe9f87b897a29e 100644 (file)
@@ -70,12 +70,7 @@ float Invasion_CheckWinner()
        if(round_handler_GetEndTime() > 0 && round_handler_GetEndTime() - time <= 0)
        {
                FOR_EACH_MONSTER(head)
-               {
-                       if(head.weaponentity) remove(head.weaponentity);
-                       if(head.iceblock) remove(head.iceblock);
-                       WaypointSprite_Kill(head.sprite);
-                       remove(head);
-               }
+                       monster_remove(head);
                
                if(roundcnt >= maxrounds)
                {
@@ -201,10 +196,7 @@ MUTATOR_HOOKFUNCTION(invasion_MonsterSpawn)
 {
        if not(self.spawnflags & MONSTERFLAG_SPAWNED)
        {
-               if(self.weaponentity) remove(self.weaponentity);
-               if(self.iceblock) remove(self.iceblock);
-               WaypointSprite_Kill(self.sprite);
-               remove(self);
+               monster_remove(self);
                return FALSE;
        }
        
index 873e1632c7a2b6f2c270be0f5b933cb969f79074..25c89cee56e2037fdf8d5066a1c2ef3c55e55544 100644 (file)
@@ -81,16 +81,33 @@ MUTATOR_HOOKFUNCTION(nt_SetModname)
 
 float nt_IsNewToy(float w)
 {
-       switch(w)
+       if((get_weaponinfo(w)).weapon)
        {
-               case WEP_SEEKER:
-               case WEP_MINE_LAYER:
-               case WEP_HLAC:
-               case WEP_RIFLE:
-                       return TRUE;
-               default:
-                       return FALSE;
+               switch(w)
+               {
+                       case WEP_SEEKER:
+                       case WEP_MINE_LAYER:
+                       case WEP_HLAC:
+                       case WEP_RIFLE:
+                               return TRUE;
+               }
        }
+       else
+       {
+               switch(w)
+               {
+                       case MON_ANIMUS:
+                       case MON_BRUISER:
+                       case MON_BRUTE:
+                       case MON_CERBERUS:
+                       case MON_KNIGHT:
+                       case MON_SLIME:
+                       case MON_STINGRAY:
+                               return TRUE;
+               }
+       }
+       
+       return FALSE;
 }
 
 string nt_GetFullReplacement(string w)
@@ -207,6 +224,10 @@ MUTATOR_DEFINITION(mutator_new_toys)
                for(i = WEP_FIRST; i <= WEP_LAST; ++i)
                        if(nt_IsNewToy(i))
                                get_weaponinfo(i).spawnflags &= ~WEP_FLAG_MUTATORBLOCKED;
+                               
+               for(i = MON_FIRST; i <= MON_LAST; ++i)
+               if(nt_IsNewToy(i))
+                       get_monsterinfo(i).spawnflags &= ~MON_FLAG_MUTATORBLOCKED;
        }
 
        MUTATOR_ONROLLBACK_OR_REMOVE
@@ -215,6 +236,10 @@ MUTATOR_DEFINITION(mutator_new_toys)
                for(i = WEP_FIRST; i <= WEP_LAST; ++i)
                        if(nt_IsNewToy(i))
                                get_weaponinfo(i).spawnflags |= WEP_FLAG_MUTATORBLOCKED;
+                               
+               for(i = MON_FIRST; i <= MON_LAST; ++i)
+               if(nt_IsNewToy(i))
+                       get_monsterinfo(i).spawnflags |= MON_FLAG_MUTATORBLOCKED;
        }
 
        MUTATOR_ONREMOVE