]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Partially fix all monsters thinking they're fish
authorMario <mario.mario@y7mail.com>
Wed, 28 Aug 2013 17:07:33 +0000 (03:07 +1000)
committerMario <mario.mario@y7mail.com>
Wed, 28 Aug 2013 17:07:33 +0000 (03:07 +1000)
17 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

index 0dfbcf4c07b8c12f9369c83ac1527a6b94aee000..e0fa128505ed7efcea2e5b65dd6d443bad5dfffa 100644 (file)
@@ -40,9 +40,6 @@ 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);
@@ -79,6 +76,7 @@ void ent_monster()
                
                self.skin = ReadByte();
                self.team = ReadByte();
+               self.scale = ReadByte();
                
                monster_construct();
                monster_changeteam();
index 4850dc1e1a01be5bf80f8e129f821d3654ecf32a..6691b9e485db13e497becd2ed965f20b68961413 100644 (file)
@@ -757,6 +757,7 @@ 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)
@@ -997,7 +998,7 @@ void monster_spawn()
        self.SendFlags = MSF_SETUP;
 }
 
-float monster_initialize(float mon_id, float nodrop)
+float monster_initialize(float mon_id, float nodrop, float sflags)
 {
        if not(autocvar_g_monsters)
                return FALSE;
@@ -1058,10 +1059,10 @@ float monster_initialize(float mon_id, float nodrop)
        self.gravity                    = 1;
        self.dphitcontentsmask  = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_BOTCLIP | DPCONTENTS_MONSTERCLIP;
        
-       if(mon.spawnflags & MONSTER_TYPE_SWIM)
+       if(sflags & MONSTER_TYPE_SWIM)
                self.flags |= FL_SWIM;
                
-       if(mon.spawnflags & MONSTER_TYPE_FLY)
+       if(sflags & MONSTER_TYPE_FLY)
        {
                self.flags |= FL_FLY;
                self.movetype = MOVETYPE_FLY;
@@ -1069,6 +1070,9 @@ float monster_initialize(float mon_id, float nodrop)
        
        if not(self.scale)
                self.scale = 1;
+               
+       if(sflags & MONSTER_SIZE_BROKEN)
+               self.scale = 1.3;
        
        if not(self.attack_range)
                self.attack_range = 120;
index f690cdc5953941e28cda0cf084cd8b933075703a..7a378cce19eb1c718d5bdb5a42318a76d879f145 100644 (file)
@@ -17,6 +17,12 @@ 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 bd7639c0966479ba84d70078ba6d881a8fae49b6..9589b3fe87dda1d0f14c7a3800245c6716c3f7ba 100644 (file)
@@ -2,7 +2,6 @@
 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",
@@ -78,7 +77,7 @@ void spawnfunc_monster_animus()
        if(Monster_CheckAppearFlags(self))
                return;
        
-       if not(monster_initialize(MON_ANIMUS, FALSE)) { remove(self); return; }
+       if not(monster_initialize(MON_ANIMUS, FALSE, MONSTER_SIZE_BROKEN)) { remove(self); return; }
 }
 
 // compatibility with old spawns
index fe16f9216597b5a3c84646248e7ce01283c15a79..46ee0c12f59e422788526215206e2c57b98cdc49 100644 (file)
@@ -2,7 +2,6 @@
 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",
@@ -64,7 +63,7 @@ void spawnfunc_monster_bruiser()
        if(Monster_CheckAppearFlags(self))
                return;
        
-       if not(monster_initialize(MON_BRUISER, FALSE)) { remove(self); return; }
+       if not(monster_initialize(MON_BRUISER, FALSE, MONSTER_SIZE_BROKEN)) { remove(self); return; }
 }
 
 float m_bruiser(float req)
index 226e0d5885fb335896f6aa56b8270da1cd9cd15f..08ebfbc0e7d296b1ffa95c526a809fab8d987f9d 100644 (file)
@@ -2,7 +2,6 @@
 REGISTER_MONSTER(
 /* MON_##id   */ BRUTE,
 /* function   */ m_brute,
-/* spawnflags */ 0,
 /* mins,maxs  */ '-36 -36 -20', '36 36 50',
 /* model      */ "ogre.dpm",
 /* netname    */ "brute",
@@ -193,7 +192,7 @@ void spawnfunc_monster_brute()
        if(Monster_CheckAppearFlags(self))
                return;
        
-       if not(monster_initialize(MON_BRUTE, FALSE)) { remove(self); return; }
+       if not(monster_initialize(MON_BRUTE, FALSE, 0)) { remove(self); return; }
 }
 
 float m_brute(float req)
index 907c07ffbe6699c987c4631cfc5a03ac045135c2..6c0e6023ff48747a350da9a2a609043f51a37b29 100644 (file)
@@ -2,7 +2,6 @@
 REGISTER_MONSTER(
 /* MON_##id   */ CERBERUS,
 /* function   */ m_cerberus,
-/* spawnflags */ 0,
 /* mins,maxs  */ '-16 -16 -24', '16 16 12',
 /* model      */ "dog.dpm",
 /* netname    */ "cerberus",
@@ -72,7 +71,7 @@ void spawnfunc_monster_cerberus()
        if(Monster_CheckAppearFlags(self))
                return;
        
-       if not(monster_initialize(MON_CERBERUS, FALSE)) { remove(self); return; }
+       if not(monster_initialize(MON_CERBERUS, FALSE, 0)) { remove(self); return; }
 }
 
 // compatibility with old spawns
index bc2a0e950d7d2aa72c9670e45c0a5e7ca27f73fb..cb7491cef2dc064d7fc330cc95b073cc0a9a6d40 100644 (file)
@@ -2,7 +2,6 @@
 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",
@@ -263,7 +262,7 @@ void spawnfunc_monster_knight()
        if(Monster_CheckAppearFlags(self))
                return;
        
-       if not(monster_initialize(MON_KNIGHT, FALSE)) { remove(self); return; }
+       if not(monster_initialize(MON_KNIGHT, FALSE, MONSTER_SIZE_BROKEN)) { remove(self); return; }
 }
 
 // compatibility with old spawns
index f62892f8d0120549a13ad94afbd64c33c234c343..ab2f4e32dc69ede9db1fe6056c5c329ec2d7556e 100644 (file)
@@ -2,7 +2,6 @@
 REGISTER_MONSTER(
 /* MON_##id   */ MAGE,
 /* function   */ m_mage,
-/* spawnflags */ 0,
 /* mins,maxs  */ '-36 -36 -24', '36 36 50',
 /* model      */ "mage.dpm",
 /* netname    */ "mage",
@@ -352,7 +351,7 @@ void spawnfunc_monster_mage()
        if(Monster_CheckAppearFlags(self))
                return;
        
-       if not(monster_initialize(MON_MAGE, FALSE)) { remove(self); return; }
+       if not(monster_initialize(MON_MAGE, FALSE, 0)) { remove(self); return; }
 }
 
 // compatibility with old spawns
index 54a6ec0c3411f19f12fed033098cc27290adc2c9..56bca63dac97cc60d0d6275c05471c95267b628d 100644 (file)
@@ -2,7 +2,6 @@
 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",
@@ -113,7 +112,7 @@ void spawnfunc_monster_shambler()
        if(Monster_CheckAppearFlags(self))
                return;
        
-       if not(monster_initialize(MON_SHAMBLER, FALSE)) { remove(self); return; }
+       if not(monster_initialize(MON_SHAMBLER, FALSE, MONSTER_SIZE_BROKEN)) { remove(self); return; }
 }
 
 float m_shambler(float req)
index 5e206f227551ed6d9883a9808c6a3abf26236337..e9f95f04ef59fa49208642274cac133e1d8acca3 100644 (file)
@@ -2,7 +2,6 @@
 REGISTER_MONSTER(
 /* MON_##id   */ SLIME,
 /* function   */ m_slime,
-/* spawnflags */ 0,
 /* mins,maxs  */ '-16 -16 -24', '16 16 16',
 /* model      */ "slime.dpm",
 /* netname    */ "slime",
@@ -90,7 +89,7 @@ void spawnfunc_monster_slime()
        if(Monster_CheckAppearFlags(self))
                return;
        
-       if not(monster_initialize(MON_SLIME, FALSE)) { remove(self); return; }
+       if not(monster_initialize(MON_SLIME, FALSE, 0)) { remove(self); return; }
 }
 
 // compatibility with old spawns
index f98ee8f94d7b68bea995398ce0b6e063743b626a..429c5640796ccdca94665036fffe1f4fe3da3f02 100644 (file)
@@ -2,7 +2,6 @@
 REGISTER_MONSTER(
 /* MON_##id   */ SPIDER,
 /* function   */ m_spider,
-/* spawnflags */ 0,
 /* mins,maxs  */ '-18 -18 -25', '18 18 30',
 /* model      */ "spider.dpm",
 /* netname    */ "spider",
@@ -171,7 +170,7 @@ void spawnfunc_monster_spider()
        if(Monster_CheckAppearFlags(self))
                return;
        
-       if not(monster_initialize(MON_SPIDER, FALSE)) { remove(self); return; }
+       if not(monster_initialize(MON_SPIDER, FALSE, 0)) { remove(self); return; }
 }
 
 float m_spider(float req)
@@ -187,6 +186,7 @@ float m_spider(float req)
                {
                        monsters_setframe(spider_anim_attack);
                        self.angles += '180 0 0';
+                       self.SendFlags |= MSF_ANG;
                        return TRUE;
                }
                case MR_SETUP:
@@ -217,7 +217,7 @@ float m_spider(float req)
        {
                case MR_DEATH:
                {
-                       self.angles += '180 0 0'; // TODO: use the server side angles instead?
+                       // nothing
                        return TRUE;
                }
                case MR_INIT:
index 08c7635c328cc6f39c5bb7d71f97f34983bb0d1f..3c12e684e3cacd2ddccb480d3e251da2d5bdd73a 100644 (file)
@@ -2,7 +2,6 @@
 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",
@@ -51,7 +50,7 @@ void spawnfunc_monster_stingray()
        if(Monster_CheckAppearFlags(self))
                return;
        
-       if not(monster_initialize(MON_STINGRAY, TRUE)) { remove(self); return; }
+       if not(monster_initialize(MON_STINGRAY, TRUE, MONSTER_TYPE_SWIM | MONSTER_SIZE_BROKEN)) { remove(self); return; }
 }
 
 float m_stingray(float req)
@@ -65,7 +64,7 @@ float m_stingray(float req)
                }
                case MR_DEATH:
                {
-                       monsters_setframe(stingray_anim_swim);
+                       monsters_setframe(stingray_anim_death);
                        return TRUE;
                }
                case MR_SETUP:
@@ -73,7 +72,7 @@ float m_stingray(float req)
                        if not(self.health) self.health = autocvar_g_monster_stingray_health;
                                
                        self.monster_attackfunc = stingray_attack;
-                       monsters_setframe(stingray_anim_death);
+                       monsters_setframe(stingray_anim_swim);
                        
                        return TRUE;
                }
index 71e1236f46b9973bb5f7455242e07deba33163d3..1d184ce55ca6400becac27d8464aa0c834c7d333 100644 (file)
@@ -2,7 +2,6 @@
 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",
@@ -103,7 +102,7 @@ void spawnfunc_monster_wyvern()
        if(Monster_CheckAppearFlags(self))
                return;
        
-       if not(monster_initialize(MON_WYVERN, TRUE)) { remove(self); return; }
+       if not(monster_initialize(MON_WYVERN, TRUE, MONSTER_TYPE_FLY | MONSTER_SIZE_BROKEN)) { remove(self); return; }
 }
 
 // compatibility with old spawns
@@ -158,7 +157,7 @@ float m_wyvern(float req)
                }
                case MR_INIT:
                {
-                       precache_model ("models/monsters/knight.mdl");
+                       precache_model ("models/monsters/wizard.mdl");
                        return TRUE;
                }
        }
index 9ddfbde586a5e7c63283445c0fd232a3ad881cbc..7331a5d1a2cfce3746551867e2f32139cd79b452 100644 (file)
@@ -2,7 +2,6 @@
 REGISTER_MONSTER(
 /* MON_##id   */ ZOMBIE,
 /* function   */ m_zombie,
-/* spawnflags */ MONSTER_RESPAWN_DEATHPOINT,
 /* mins,maxs  */ '-18 -18 -25', '18 18 47',
 /* model      */ "zombie.dpm",
 /* netname    */ "zombie",
@@ -119,7 +118,7 @@ void spawnfunc_monster_zombie()
        if(Monster_CheckAppearFlags(self))
                return;
        
-       if not(monster_initialize(MON_ZOMBIE, FALSE)) { remove(self); return; }
+       if not(monster_initialize(MON_ZOMBIE, FALSE, MONSTER_RESPAWN_DEATHPOINT)) { remove(self); return; }
 }
 
 float m_zombie(float req)
index 706bf552651e97cf71286f1162c78ffe830c0406..91ae416a4a68bd3894b6aab588d84bc7f2f40c08 100644 (file)
@@ -10,7 +10,7 @@
 entity monster_info[MON_MAXCOUNT];
 entity dummy_monster_info;
 
-void register_monster(float id, float(float) func, float monstertype, vector min_s, vector max_s, string modelname, string shortname, string mname)
+void register_monster(float id, float(float) func, vector min_s, vector max_s, string modelname, string shortname, string mname)
 {
        entity e;
        monster_info[id - 1] = e = spawn();
@@ -23,7 +23,6 @@ void register_monster(float id, float(float) func, float monstertype, vector min
        e.mins = min_s;
        e.maxs = max_s;
        e.model = strzone(strcat("models/monsters/", modelname));
-       e.spawnflags = monstertype;
        
        func(MR_INIT);
 }
@@ -40,7 +39,6 @@ void register_monsters_done()
        dummy_monster_info.mins = '-0 -0 -0';
        dummy_monster_info.maxs = '0 0 0';
        dummy_monster_info.model = "";
-       dummy_monster_info.spawnflags = 0;
 }
 entity get_monsterinfo(float id)
 {
index 5124e4528e3c9066f7fa5bdb7a6851ba1ed5f1ef..1652436fa5a3f0e4f6b6198e392a8be610b58213 100644 (file)
@@ -26,32 +26,26 @@ entity get_monsterinfo(float id);
 // =====================
 
 float m_null(float dummy);
-void register_monster(float id, float(float) func, float monstertype, vector min_s, vector max_s, string modelname, string shortname, string mname);
+void register_monster(float id, float(float) func, vector min_s, vector max_s, string modelname, string shortname, string mname);
 void register_monsters_done();
 
-// special spawn flags
-const float MONSTER_RESPAWN_DEATHPOINT = 699; // re-spawn where we died
-const float MONSTER_TYPE_FLY = 700;
-const float MONSTER_TYPE_SWIM = 701;
-const float MONSTER_SIZE_BROKEN = 702; // TODO: remove when bad models are replaced
-
 const float MON_MAXCOUNT = 24;
 #define MON_FIRST 1
 float MON_COUNT;
 float MON_LAST;
 
-#define REGISTER_MONSTER_2(id,func,monstertype,min_s,max_s,modelname,shortname,mname) \
+#define REGISTER_MONSTER_2(id,func,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,monstertype,min_s,max_s,modelname,shortname,mname); \
+               register_monster(id,func,min_s,max_s,modelname,shortname,mname); \
        } \
        ACCUMULATE_FUNCTION(RegisterMonsters, RegisterMonsters_##id)
-#define REGISTER_MONSTER(id,func,monstertype,min_s,max_s,modelname,shortname,mname) \
-       REGISTER_MONSTER_2(MON_##id,func,monstertype,min_s,max_s,modelname,shortname,mname)
+#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 MON_DUPECHECK(dupecheck,cvar) \
        #ifndef dupecheck \