From 0c562010bbefe3d00a24e9e5df442a1de1bde9f1 Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 29 Aug 2013 03:33:47 +1000 Subject: [PATCH] Properly fix monsters thinking they're fish --- qcsrc/client/monsters.qc | 4 +++- qcsrc/common/monsters/lib/monsters.qc | 9 ++++----- qcsrc/common/monsters/lib/monsters_early.qh | 6 ------ qcsrc/common/monsters/monster/animus.qc | 3 ++- qcsrc/common/monsters/monster/bruiser.qc | 3 ++- qcsrc/common/monsters/monster/brute.qc | 3 ++- qcsrc/common/monsters/monster/cerberus.qc | 3 ++- qcsrc/common/monsters/monster/knight.qc | 3 ++- qcsrc/common/monsters/monster/mage.qc | 3 ++- qcsrc/common/monsters/monster/shambler.qc | 3 ++- qcsrc/common/monsters/monster/slime.qc | 3 ++- qcsrc/common/monsters/monster/spider.qc | 3 ++- qcsrc/common/monsters/monster/stingray.qc | 3 ++- qcsrc/common/monsters/monster/wyvern.qc | 3 ++- qcsrc/common/monsters/monster/zombie.qc | 5 ++++- qcsrc/common/monsters/monsters.qc | 3 ++- qcsrc/common/monsters/monsters.qh | 16 +++++++++++----- qcsrc/server/mutators/gamemode_invasion.qc | 4 +++- 18 files changed, 49 insertions(+), 31 deletions(-) diff --git a/qcsrc/client/monsters.qc b/qcsrc/client/monsters.qc index e0fa12850..0dfbcf4c0 100644 --- a/qcsrc/client/monsters.qc +++ b/qcsrc/client/monsters.qc @@ -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(); diff --git a/qcsrc/common/monsters/lib/monsters.qc b/qcsrc/common/monsters/lib/monsters.qc index 6691b9e48..3bd5a46f6 100644 --- a/qcsrc/common/monsters/lib/monsters.qc +++ b/qcsrc/common/monsters/lib/monsters.qc @@ -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) diff --git a/qcsrc/common/monsters/lib/monsters_early.qh b/qcsrc/common/monsters/lib/monsters_early.qh index 7a378cce1..f690cdc59 100644 --- a/qcsrc/common/monsters/lib/monsters_early.qh +++ b/qcsrc/common/monsters/lib/monsters_early.qh @@ -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 diff --git a/qcsrc/common/monsters/monster/animus.qc b/qcsrc/common/monsters/monster/animus.qc index 9589b3fe8..bd7639c09 100644 --- a/qcsrc/common/monsters/monster/animus.qc +++ b/qcsrc/common/monsters/monster/animus.qc @@ -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 diff --git a/qcsrc/common/monsters/monster/bruiser.qc b/qcsrc/common/monsters/monster/bruiser.qc index 46ee0c12f..fe16f9216 100644 --- a/qcsrc/common/monsters/monster/bruiser.qc +++ b/qcsrc/common/monsters/monster/bruiser.qc @@ -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) diff --git a/qcsrc/common/monsters/monster/brute.qc b/qcsrc/common/monsters/monster/brute.qc index 08ebfbc0e..226e0d588 100644 --- a/qcsrc/common/monsters/monster/brute.qc +++ b/qcsrc/common/monsters/monster/brute.qc @@ -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) diff --git a/qcsrc/common/monsters/monster/cerberus.qc b/qcsrc/common/monsters/monster/cerberus.qc index 6c0e6023f..907c07ffb 100644 --- a/qcsrc/common/monsters/monster/cerberus.qc +++ b/qcsrc/common/monsters/monster/cerberus.qc @@ -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 diff --git a/qcsrc/common/monsters/monster/knight.qc b/qcsrc/common/monsters/monster/knight.qc index cb7491cef..bc2a0e950 100644 --- a/qcsrc/common/monsters/monster/knight.qc +++ b/qcsrc/common/monsters/monster/knight.qc @@ -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 diff --git a/qcsrc/common/monsters/monster/mage.qc b/qcsrc/common/monsters/monster/mage.qc index ab2f4e32d..f62892f8d 100644 --- a/qcsrc/common/monsters/monster/mage.qc +++ b/qcsrc/common/monsters/monster/mage.qc @@ -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 diff --git a/qcsrc/common/monsters/monster/shambler.qc b/qcsrc/common/monsters/monster/shambler.qc index 56bca63da..54a6ec0c3 100644 --- a/qcsrc/common/monsters/monster/shambler.qc +++ b/qcsrc/common/monsters/monster/shambler.qc @@ -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) diff --git a/qcsrc/common/monsters/monster/slime.qc b/qcsrc/common/monsters/monster/slime.qc index e9f95f04e..5e206f227 100644 --- a/qcsrc/common/monsters/monster/slime.qc +++ b/qcsrc/common/monsters/monster/slime.qc @@ -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 diff --git a/qcsrc/common/monsters/monster/spider.qc b/qcsrc/common/monsters/monster/spider.qc index 429c56407..cd0e90376 100644 --- a/qcsrc/common/monsters/monster/spider.qc +++ b/qcsrc/common/monsters/monster/spider.qc @@ -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) diff --git a/qcsrc/common/monsters/monster/stingray.qc b/qcsrc/common/monsters/monster/stingray.qc index 3c12e684e..d17d37137 100644 --- a/qcsrc/common/monsters/monster/stingray.qc +++ b/qcsrc/common/monsters/monster/stingray.qc @@ -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) diff --git a/qcsrc/common/monsters/monster/wyvern.qc b/qcsrc/common/monsters/monster/wyvern.qc index 1d184ce55..4087bacca 100644 --- a/qcsrc/common/monsters/monster/wyvern.qc +++ b/qcsrc/common/monsters/monster/wyvern.qc @@ -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 diff --git a/qcsrc/common/monsters/monster/zombie.qc b/qcsrc/common/monsters/monster/zombie.qc index 7331a5d1a..24ecd296c 100644 --- a/qcsrc/common/monsters/monster/zombie.qc +++ b/qcsrc/common/monsters/monster/zombie.qc @@ -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) diff --git a/qcsrc/common/monsters/monsters.qc b/qcsrc/common/monsters/monsters.qc index 91ae416a4..4320f62e8 100644 --- a/qcsrc/common/monsters/monsters.qc +++ b/qcsrc/common/monsters/monsters.qc @@ -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)); diff --git a/qcsrc/common/monsters/monsters.qh b/qcsrc/common/monsters/monsters.qh index 1652436fa..8b5320336 100644 --- a/qcsrc/common/monsters/monsters.qh +++ b/qcsrc/common/monsters/monsters.qh @@ -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 \ diff --git a/qcsrc/server/mutators/gamemode_invasion.qc b/qcsrc/server/mutators/gamemode_invasion.qc index 47af8e78d..af5b5e707 100644 --- a/qcsrc/server/mutators/gamemode_invasion.qc +++ b/qcsrc/server/mutators/gamemode_invasion.qc @@ -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); -- 2.39.2