From 1b67716eed834408b9567567ed8397889ebc683a Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 29 Aug 2013 03:07:33 +1000 Subject: [PATCH] Partially fix all monsters thinking they're fish --- qcsrc/client/monsters.qc | 4 +--- qcsrc/common/monsters/lib/monsters.qc | 10 +++++++--- 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 | 6 +++--- qcsrc/common/monsters/monster/stingray.qc | 7 +++---- qcsrc/common/monsters/monster/wyvern.qc | 5 ++--- qcsrc/common/monsters/monster/zombie.qc | 3 +-- qcsrc/common/monsters/monsters.qc | 4 +--- qcsrc/common/monsters/monsters.qh | 16 +++++----------- 17 files changed, 37 insertions(+), 48 deletions(-) diff --git a/qcsrc/client/monsters.qc b/qcsrc/client/monsters.qc index 0dfbcf4c0..e0fa12850 100644 --- a/qcsrc/client/monsters.qc +++ b/qcsrc/client/monsters.qc @@ -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(); diff --git a/qcsrc/common/monsters/lib/monsters.qc b/qcsrc/common/monsters/lib/monsters.qc index 4850dc1e1..6691b9e48 100644 --- a/qcsrc/common/monsters/lib/monsters.qc +++ b/qcsrc/common/monsters/lib/monsters.qc @@ -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; diff --git a/qcsrc/common/monsters/lib/monsters_early.qh b/qcsrc/common/monsters/lib/monsters_early.qh index f690cdc59..7a378cce1 100644 --- a/qcsrc/common/monsters/lib/monsters_early.qh +++ b/qcsrc/common/monsters/lib/monsters_early.qh @@ -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 diff --git a/qcsrc/common/monsters/monster/animus.qc b/qcsrc/common/monsters/monster/animus.qc index bd7639c09..9589b3fe8 100644 --- a/qcsrc/common/monsters/monster/animus.qc +++ b/qcsrc/common/monsters/monster/animus.qc @@ -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 diff --git a/qcsrc/common/monsters/monster/bruiser.qc b/qcsrc/common/monsters/monster/bruiser.qc index fe16f9216..46ee0c12f 100644 --- a/qcsrc/common/monsters/monster/bruiser.qc +++ b/qcsrc/common/monsters/monster/bruiser.qc @@ -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) diff --git a/qcsrc/common/monsters/monster/brute.qc b/qcsrc/common/monsters/monster/brute.qc index 226e0d588..08ebfbc0e 100644 --- a/qcsrc/common/monsters/monster/brute.qc +++ b/qcsrc/common/monsters/monster/brute.qc @@ -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) diff --git a/qcsrc/common/monsters/monster/cerberus.qc b/qcsrc/common/monsters/monster/cerberus.qc index 907c07ffb..6c0e6023f 100644 --- a/qcsrc/common/monsters/monster/cerberus.qc +++ b/qcsrc/common/monsters/monster/cerberus.qc @@ -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 diff --git a/qcsrc/common/monsters/monster/knight.qc b/qcsrc/common/monsters/monster/knight.qc index bc2a0e950..cb7491cef 100644 --- a/qcsrc/common/monsters/monster/knight.qc +++ b/qcsrc/common/monsters/monster/knight.qc @@ -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 diff --git a/qcsrc/common/monsters/monster/mage.qc b/qcsrc/common/monsters/monster/mage.qc index f62892f8d..ab2f4e32d 100644 --- a/qcsrc/common/monsters/monster/mage.qc +++ b/qcsrc/common/monsters/monster/mage.qc @@ -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 diff --git a/qcsrc/common/monsters/monster/shambler.qc b/qcsrc/common/monsters/monster/shambler.qc index 54a6ec0c3..56bca63da 100644 --- a/qcsrc/common/monsters/monster/shambler.qc +++ b/qcsrc/common/monsters/monster/shambler.qc @@ -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) diff --git a/qcsrc/common/monsters/monster/slime.qc b/qcsrc/common/monsters/monster/slime.qc index 5e206f227..e9f95f04e 100644 --- a/qcsrc/common/monsters/monster/slime.qc +++ b/qcsrc/common/monsters/monster/slime.qc @@ -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 diff --git a/qcsrc/common/monsters/monster/spider.qc b/qcsrc/common/monsters/monster/spider.qc index f98ee8f94..429c56407 100644 --- a/qcsrc/common/monsters/monster/spider.qc +++ b/qcsrc/common/monsters/monster/spider.qc @@ -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: diff --git a/qcsrc/common/monsters/monster/stingray.qc b/qcsrc/common/monsters/monster/stingray.qc index 08c7635c3..3c12e684e 100644 --- a/qcsrc/common/monsters/monster/stingray.qc +++ b/qcsrc/common/monsters/monster/stingray.qc @@ -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; } diff --git a/qcsrc/common/monsters/monster/wyvern.qc b/qcsrc/common/monsters/monster/wyvern.qc index 71e1236f4..1d184ce55 100644 --- a/qcsrc/common/monsters/monster/wyvern.qc +++ b/qcsrc/common/monsters/monster/wyvern.qc @@ -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; } } diff --git a/qcsrc/common/monsters/monster/zombie.qc b/qcsrc/common/monsters/monster/zombie.qc index 9ddfbde58..7331a5d1a 100644 --- a/qcsrc/common/monsters/monster/zombie.qc +++ b/qcsrc/common/monsters/monster/zombie.qc @@ -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) diff --git a/qcsrc/common/monsters/monsters.qc b/qcsrc/common/monsters/monsters.qc index 706bf5526..91ae416a4 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, 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) { diff --git a/qcsrc/common/monsters/monsters.qh b/qcsrc/common/monsters/monsters.qh index 5124e4528..1652436fa 100644 --- a/qcsrc/common/monsters/monsters.qh +++ b/qcsrc/common/monsters/monsters.qh @@ -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 \ -- 2.39.2