]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Properly fix monsters thinking they're fish
authorMario <mario.mario@y7mail.com>
Wed, 28 Aug 2013 17:33:47 +0000 (03:33 +1000)
committerMario <mario.mario@y7mail.com>
Wed, 28 Aug 2013 17:33:47 +0000 (03:33 +1000)
18 files changed:
qcsrc/client/monsters.qc
qcsrc/common/monsters/lib/monsters.qc
qcsrc/common/monsters/lib/monsters_early.qh
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/mage.qc
qcsrc/common/monsters/monster/shambler.qc
qcsrc/common/monsters/monster/slime.qc
qcsrc/common/monsters/monster/spider.qc
qcsrc/common/monsters/monster/stingray.qc
qcsrc/common/monsters/monster/wyvern.qc
qcsrc/common/monsters/monster/zombie.qc
qcsrc/common/monsters/monsters.qc
qcsrc/common/monsters/monsters.qh
qcsrc/server/mutators/gamemode_invasion.qc

index e0fa128505ed7efcea2e5b65dd6d443bad5dfffa..0dfbcf4c07b8c12f9369c83ac1527a6b94aee000 100644 (file)
@@ -40,6 +40,9 @@ void monster_construct()
        min_s = mon.mins;
        max_s = mon.maxs;
        
+       if(mon.spawnflags & MONSTER_SIZE_BROKEN)
+               self.scale = 1.3;
+       
        self.netname = M_NAME(self.monsterid);
 
        setorigin(self, self.origin);
@@ -76,7 +79,6 @@ void ent_monster()
                
                self.skin = ReadByte();
                self.team = ReadByte();
-               self.scale = ReadByte();
                
                monster_construct();
                monster_changeteam();
index 6691b9e485db13e497becd2ed965f20b68961413..3bd5a46f663913102e7621a3768e8e417a0bec70 100644 (file)
@@ -757,7 +757,6 @@ float monster_send(entity to, float sf)
                
                WriteByte(MSG_ENTITY, self.skin);
                WriteByte(MSG_ENTITY, self.team);
-               WriteByte(MSG_ENTITY, self.scale);
     }
     
     if(sf & MSF_ANG)
@@ -998,7 +997,7 @@ void monster_spawn()
        self.SendFlags = MSF_SETUP;
 }
 
-float monster_initialize(float mon_id, float nodrop, float sflags)
+float monster_initialize(float mon_id, float nodrop)
 {
        if not(autocvar_g_monsters)
                return FALSE;
@@ -1059,10 +1058,10 @@ float monster_initialize(float mon_id, float nodrop, float sflags)
        self.gravity                    = 1;
        self.dphitcontentsmask  = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_BOTCLIP | DPCONTENTS_MONSTERCLIP;
        
-       if(sflags & MONSTER_TYPE_SWIM)
+       if(mon.spawnflags & MONSTER_TYPE_SWIM)
                self.flags |= FL_SWIM;
                
-       if(sflags & MONSTER_TYPE_FLY)
+       if(mon.spawnflags & MONSTER_TYPE_FLY)
        {
                self.flags |= FL_FLY;
                self.movetype = MOVETYPE_FLY;
@@ -1071,7 +1070,7 @@ float monster_initialize(float mon_id, float nodrop, float sflags)
        if not(self.scale)
                self.scale = 1;
                
-       if(sflags & MONSTER_SIZE_BROKEN)
+       if(mon.spawnflags & MONSTER_SIZE_BROKEN)
                self.scale = 1.3;
        
        if not(self.attack_range)
index 7a378cce19eb1c718d5bdb5a42318a76d879f145..f690cdc5953941e28cda0cf084cd8b933075703a 100644 (file)
@@ -17,12 +17,6 @@ float monsters_killed;
 void monsters_setstatus(); // monsters.qc
 .float monster_moveflags; // checks where to move when not attacking
 
-// special spawn flags
-const float MONSTER_RESPAWN_DEATHPOINT = 128; // re-spawn where we died
-const float MONSTER_TYPE_FLY = 256;
-const float MONSTER_TYPE_SWIM = 512;
-const float MONSTER_SIZE_BROKEN = 1024; // TODO: remove when bad models are replaced
-
 #endif // SVQC
 
 #ifndef MENUQC
index 9589b3fe87dda1d0f14c7a3800245c6716c3f7ba..bd7639c0966479ba84d70078ba6d881a8fae49b6 100644 (file)
@@ -2,6 +2,7 @@
 REGISTER_MONSTER(
 /* MON_##id   */ ANIMUS,
 /* function   */ m_animus,
+/* spawnflags */ MONSTER_SIZE_BROKEN,
 /* mins,maxs  */ '-41 -41 -31', '41 41 31',
 /* model      */ "demon.mdl",
 /* netname    */ "animus",
@@ -77,7 +78,7 @@ void spawnfunc_monster_animus()
        if(Monster_CheckAppearFlags(self))
                return;
        
-       if not(monster_initialize(MON_ANIMUS, FALSE, MONSTER_SIZE_BROKEN)) { remove(self); return; }
+       if not(monster_initialize(MON_ANIMUS, FALSE)) { remove(self); return; }
 }
 
 // compatibility with old spawns
index 46ee0c12f59e422788526215206e2c57b98cdc49..fe16f9216597b5a3c84646248e7ce01283c15a79 100644 (file)
@@ -2,6 +2,7 @@
 REGISTER_MONSTER(
 /* MON_##id   */ BRUISER,
 /* function   */ m_bruiser,
+/* spawnflags */ MONSTER_SIZE_BROKEN,
 /* mins,maxs  */ '-20 -20 -31', '20 20 53',
 /* model      */ "knight.mdl",
 /* netname    */ "bruiser",
@@ -63,7 +64,7 @@ void spawnfunc_monster_bruiser()
        if(Monster_CheckAppearFlags(self))
                return;
        
-       if not(monster_initialize(MON_BRUISER, FALSE, MONSTER_SIZE_BROKEN)) { remove(self); return; }
+       if not(monster_initialize(MON_BRUISER, FALSE)) { remove(self); return; }
 }
 
 float m_bruiser(float req)
index 08ebfbc0e7d296b1ffa95c526a809fab8d987f9d..226e0d5885fb335896f6aa56b8270da1cd9cd15f 100644 (file)
@@ -2,6 +2,7 @@
 REGISTER_MONSTER(
 /* MON_##id   */ BRUTE,
 /* function   */ m_brute,
+/* spawnflags */ 0,
 /* mins,maxs  */ '-36 -36 -20', '36 36 50',
 /* model      */ "ogre.dpm",
 /* netname    */ "brute",
@@ -192,7 +193,7 @@ void spawnfunc_monster_brute()
        if(Monster_CheckAppearFlags(self))
                return;
        
-       if not(monster_initialize(MON_BRUTE, FALSE, 0)) { remove(self); return; }
+       if not(monster_initialize(MON_BRUTE, FALSE)) { remove(self); return; }
 }
 
 float m_brute(float req)
index 6c0e6023ff48747a350da9a2a609043f51a37b29..907c07ffbe6699c987c4631cfc5a03ac045135c2 100644 (file)
@@ -2,6 +2,7 @@
 REGISTER_MONSTER(
 /* MON_##id   */ CERBERUS,
 /* function   */ m_cerberus,
+/* spawnflags */ 0,
 /* mins,maxs  */ '-16 -16 -24', '16 16 12',
 /* model      */ "dog.dpm",
 /* netname    */ "cerberus",
@@ -71,7 +72,7 @@ void spawnfunc_monster_cerberus()
        if(Monster_CheckAppearFlags(self))
                return;
        
-       if not(monster_initialize(MON_CERBERUS, FALSE, 0)) { remove(self); return; }
+       if not(monster_initialize(MON_CERBERUS, FALSE)) { remove(self); return; }
 }
 
 // compatibility with old spawns
index cb7491cef2dc064d7fc330cc95b073cc0a9a6d40..bc2a0e950d7d2aa72c9670e45c0a5e7ca27f73fb 100644 (file)
@@ -2,6 +2,7 @@
 REGISTER_MONSTER(
 /* MON_##id   */ KNIGHT,
 /* function   */ m_knight,
+/* spawnflags */ MONSTER_SIZE_BROKEN,
 /* mins,maxs  */ '-20 -20 -32', '20 20 41',
 /* model      */ "hknight.mdl",
 /* netname    */ "knight",
@@ -262,7 +263,7 @@ void spawnfunc_monster_knight()
        if(Monster_CheckAppearFlags(self))
                return;
        
-       if not(monster_initialize(MON_KNIGHT, FALSE, MONSTER_SIZE_BROKEN)) { remove(self); return; }
+       if not(monster_initialize(MON_KNIGHT, FALSE)) { remove(self); return; }
 }
 
 // compatibility with old spawns
index ab2f4e32dc69ede9db1fe6056c5c329ec2d7556e..f62892f8d0120549a13ad94afbd64c33c234c343 100644 (file)
@@ -2,6 +2,7 @@
 REGISTER_MONSTER(
 /* MON_##id   */ MAGE,
 /* function   */ m_mage,
+/* spawnflags */ 0,
 /* mins,maxs  */ '-36 -36 -24', '36 36 50',
 /* model      */ "mage.dpm",
 /* netname    */ "mage",
@@ -351,7 +352,7 @@ void spawnfunc_monster_mage()
        if(Monster_CheckAppearFlags(self))
                return;
        
-       if not(monster_initialize(MON_MAGE, FALSE, 0)) { remove(self); return; }
+       if not(monster_initialize(MON_MAGE, FALSE)) { remove(self); return; }
 }
 
 // compatibility with old spawns
index 56bca63dac97cc60d0d6275c05471c95267b628d..54a6ec0c3411f19f12fed033098cc27290adc2c9 100644 (file)
@@ -2,6 +2,7 @@
 REGISTER_MONSTER(
 /* MON_##id   */ SHAMBLER,
 /* function   */ m_shambler,
+/* spawnflags */ MONSTER_SIZE_BROKEN,
 /* mins,maxs  */ '-41 -41 -31', '41 41 65',
 /* model      */ "shambler.mdl",
 /* netname    */ "shambler",
@@ -112,7 +113,7 @@ void spawnfunc_monster_shambler()
        if(Monster_CheckAppearFlags(self))
                return;
        
-       if not(monster_initialize(MON_SHAMBLER, FALSE, MONSTER_SIZE_BROKEN)) { remove(self); return; }
+       if not(monster_initialize(MON_SHAMBLER, FALSE)) { remove(self); return; }
 }
 
 float m_shambler(float req)
index e9f95f04ef59fa49208642274cac133e1d8acca3..5e206f227551ed6d9883a9808c6a3abf26236337 100644 (file)
@@ -2,6 +2,7 @@
 REGISTER_MONSTER(
 /* MON_##id   */ SLIME,
 /* function   */ m_slime,
+/* spawnflags */ 0,
 /* mins,maxs  */ '-16 -16 -24', '16 16 16',
 /* model      */ "slime.dpm",
 /* netname    */ "slime",
@@ -89,7 +90,7 @@ void spawnfunc_monster_slime()
        if(Monster_CheckAppearFlags(self))
                return;
        
-       if not(monster_initialize(MON_SLIME, FALSE, 0)) { remove(self); return; }
+       if not(monster_initialize(MON_SLIME, FALSE)) { remove(self); return; }
 }
 
 // compatibility with old spawns
index 429c5640796ccdca94665036fffe1f4fe3da3f02..cd0e903760f7ca8a03e978a16531dcccc8849df1 100644 (file)
@@ -2,6 +2,7 @@
 REGISTER_MONSTER(
 /* MON_##id   */ SPIDER,
 /* function   */ m_spider,
+/* spawnflags */ 0,
 /* mins,maxs  */ '-18 -18 -25', '18 18 30',
 /* model      */ "spider.dpm",
 /* netname    */ "spider",
@@ -170,7 +171,7 @@ void spawnfunc_monster_spider()
        if(Monster_CheckAppearFlags(self))
                return;
        
-       if not(monster_initialize(MON_SPIDER, FALSE, 0)) { remove(self); return; }
+       if not(monster_initialize(MON_SPIDER, FALSE)) { remove(self); return; }
 }
 
 float m_spider(float req)
index 3c12e684e3cacd2ddccb480d3e251da2d5bdd73a..d17d3713714f1cb61bea2dba96099d2038ba960e 100644 (file)
@@ -2,6 +2,7 @@
 REGISTER_MONSTER(
 /* MON_##id   */ STINGRAY,
 /* function   */ m_stingray,
+/* spawnflags */ MONSTER_TYPE_SWIM | MONSTER_SIZE_BROKEN,
 /* mins,maxs  */ '-20 -20 -31', '20 20 20',
 /* model      */ "fish.mdl",
 /* netname    */ "stingray",
@@ -50,7 +51,7 @@ void spawnfunc_monster_stingray()
        if(Monster_CheckAppearFlags(self))
                return;
        
-       if not(monster_initialize(MON_STINGRAY, TRUE, MONSTER_TYPE_SWIM | MONSTER_SIZE_BROKEN)) { remove(self); return; }
+       if not(monster_initialize(MON_STINGRAY, TRUE)) { remove(self); return; }
 }
 
 float m_stingray(float req)
index 1d184ce55ca6400becac27d8464aa0c834c7d333..4087bacca1696d9690124013c6fdbef044893c51 100644 (file)
@@ -2,6 +2,7 @@
 REGISTER_MONSTER(
 /* MON_##id   */ WYVERN,
 /* function   */ m_wyvern,
+/* spawnflags */ MONSTER_TYPE_FLY | MONSTER_SIZE_BROKEN,
 /* mins,maxs  */ '-20 -20 -58', '20 20 20',
 /* model      */ "wizard.mdl",
 /* netname    */ "wyvern",
@@ -102,7 +103,7 @@ void spawnfunc_monster_wyvern()
        if(Monster_CheckAppearFlags(self))
                return;
        
-       if not(monster_initialize(MON_WYVERN, TRUE, MONSTER_TYPE_FLY | MONSTER_SIZE_BROKEN)) { remove(self); return; }
+       if not(monster_initialize(MON_WYVERN, TRUE)) { remove(self); return; }
 }
 
 // compatibility with old spawns
index 7331a5d1a2cfce3746551867e2f32139cd79b452..24ecd296c6bb9054e4e83328ddf6282370697c3c 100644 (file)
@@ -2,6 +2,7 @@
 REGISTER_MONSTER(
 /* MON_##id   */ ZOMBIE,
 /* function   */ m_zombie,
+/* spawnflags */ 0,
 /* mins,maxs  */ '-18 -18 -25', '18 18 47',
 /* model      */ "zombie.dpm",
 /* netname    */ "zombie",
@@ -115,10 +116,12 @@ void spawnfunc_monster_zombie()
        
        self.monster_spawnfunc = spawnfunc_monster_zombie;
        
+       self.spawnflags |= MONSTER_RESPAWN_DEATHPOINT;
+       
        if(Monster_CheckAppearFlags(self))
                return;
        
-       if not(monster_initialize(MON_ZOMBIE, FALSE, MONSTER_RESPAWN_DEATHPOINT)) { remove(self); return; }
+       if not(monster_initialize(MON_ZOMBIE, FALSE)) { remove(self); return; }
 }
 
 float m_zombie(float req)
index 91ae416a4a68bd3894b6aab588d84bc7f2f40c08..4320f62e89a1a8efb0f4535f05912680cf5fe4e2 100644 (file)
@@ -10,7 +10,7 @@
 entity monster_info[MON_MAXCOUNT];
 entity dummy_monster_info;
 
-void register_monster(float id, float(float) func, vector min_s, vector max_s, string modelname, string shortname, string mname)
+void register_monster(float id, float(float) func, float monsterflags, vector min_s, vector max_s, string modelname, string shortname, string mname)
 {
        entity e;
        monster_info[id - 1] = e = spawn();
@@ -20,6 +20,7 @@ void register_monster(float id, float(float) func, vector min_s, vector max_s, s
        e.monster_name = mname;
        e.monster_func = func;
        e.mdl = modelname;
+       e.spawnflags = monsterflags;
        e.mins = min_s;
        e.maxs = max_s;
        e.model = strzone(strcat("models/monsters/", modelname));
index 1652436fa5a3f0e4f6b6198e392a8be610b58213..8b5320336fdc710784022fc3c27f197ae1a4d03d 100644 (file)
@@ -8,6 +8,12 @@
 // functions:
 entity get_monsterinfo(float id);
 
+// special spawn flags
+const float MONSTER_RESPAWN_DEATHPOINT = 128; // re-spawn where we died
+const float MONSTER_TYPE_FLY = 256;
+const float MONSTER_TYPE_SWIM = 512;
+const float MONSTER_SIZE_BROKEN = 1024; // TODO: remove when bad models are replaced
+
 // entity properties of monsterinfo:
 .float monsterid; // MON_...
 .string netname; // short name
@@ -26,7 +32,7 @@ entity get_monsterinfo(float id);
 // =====================
 
 float m_null(float dummy);
-void register_monster(float id, float(float) func, vector min_s, vector max_s, string modelname, string shortname, string mname);
+void register_monster(float id, float(float) func, float monsterflags, vector min_s, vector max_s, string modelname, string shortname, string mname);
 void register_monsters_done();
 
 const float MON_MAXCOUNT = 24;
@@ -34,18 +40,18 @@ const float MON_MAXCOUNT = 24;
 float MON_COUNT;
 float MON_LAST;
 
-#define REGISTER_MONSTER_2(id,func,min_s,max_s,modelname,shortname,mname) \
+#define REGISTER_MONSTER_2(id,func,monsterflags,min_s,max_s,modelname,shortname,mname) \
        float id; \
        float func(float); \
        void RegisterMonsters_##id() \
        { \
                MON_LAST = (id = MON_FIRST + MON_COUNT); \
                ++MON_COUNT; \
-               register_monster(id,func,min_s,max_s,modelname,shortname,mname); \
+               register_monster(id,func,monsterflags,min_s,max_s,modelname,shortname,mname); \
        } \
        ACCUMULATE_FUNCTION(RegisterMonsters, RegisterMonsters_##id)
-#define REGISTER_MONSTER(id,func,min_s,max_s,modelname,shortname,mname) \
-       REGISTER_MONSTER_2(MON_##id,func,min_s,max_s,modelname,shortname,mname)
+#define REGISTER_MONSTER(id,func,monsterflags,min_s,max_s,modelname,shortname,mname) \
+       REGISTER_MONSTER_2(MON_##id,func,monsterflags,min_s,max_s,modelname,shortname,mname)
 
 #define MON_DUPECHECK(dupecheck,cvar) \
        #ifndef dupecheck \
index 47af8e78d78ab609a0e976cdbca6b0564674b871..af5b5e70736edd619bfe09c77b1b739c8578a426 100644 (file)
@@ -11,12 +11,14 @@ float invasion_PickMonster(float have_shamblers)
                return MON_ZOMBIE;
 
        float i;
+       entity mon;
        
        RandomSelection_Init();
        
        for(i = MON_FIRST; i <= MON_LAST; ++i)
        {
-               if(i == MON_STINGRAY || i == MON_WYVERN || (i == MON_SHAMBLER && have_shamblers >= 1))
+               mon = get_monsterinfo(i);
+               if((mon.spawnflags & MONSTER_TYPE_FLY) || (mon.spawnflags & MONSTER_TYPE_SWIM) || (i == MON_SHAMBLER && have_shamblers >= 1))
                        continue; // flying/swimming monsters not yet supported
                
                RandomSelection_Add(world, i, "", 1, 1);