From 7f1405e8afa01ed55634fa70c20b7416f4c277aa Mon Sep 17 00:00:00 2001 From: Mario Date: Sun, 1 Sep 2013 03:01:51 +1000 Subject: [PATCH] Attempt to fix monster vehicle support --- qcsrc/common/monsters/monster/animus.qc | 2 +- qcsrc/common/monsters/monster/bruiser.qc | 2 +- qcsrc/common/monsters/monster/brute.qc | 2 +- qcsrc/common/monsters/monster/cerberus.qc | 2 +- qcsrc/common/monsters/monster/knight.qc | 2 +- qcsrc/common/monsters/monster/mage.qc | 2 +- qcsrc/common/monsters/monster/shambler.qc | 2 +- qcsrc/common/monsters/monster/spider.qc | 2 +- qcsrc/common/monsters/monster/stingray.qc | 2 +- qcsrc/common/monsters/monster/wyvern.qc | 2 +- qcsrc/common/monsters/monster/zombie.qc | 2 +- qcsrc/common/monsters/monsters.qh | 12 ++++++---- qcsrc/common/monsters/sv_monsters.qc | 29 ++++++++++++++++------- 13 files changed, 39 insertions(+), 24 deletions(-) diff --git a/qcsrc/common/monsters/monster/animus.qc b/qcsrc/common/monsters/monster/animus.qc index 88d50e61b..1d68dc415 100644 --- a/qcsrc/common/monsters/monster/animus.qc +++ b/qcsrc/common/monsters/monster/animus.qc @@ -2,7 +2,7 @@ REGISTER_MONSTER( /* MON_##id */ ANIMUS, /* function */ m_animus, -/* spawnflags */ MONSTER_SIZE_BROKEN, +/* spawnflags */ MONSTER_SIZE_BROKEN | MON_FLAG_MELEE, /* mins,maxs */ '-41 -41 -31', '41 41 31', /* model */ "demon.mdl", /* netname */ "animus", diff --git a/qcsrc/common/monsters/monster/bruiser.qc b/qcsrc/common/monsters/monster/bruiser.qc index c1b8018af..fb9c06618 100644 --- a/qcsrc/common/monsters/monster/bruiser.qc +++ b/qcsrc/common/monsters/monster/bruiser.qc @@ -2,7 +2,7 @@ REGISTER_MONSTER( /* MON_##id */ BRUISER, /* function */ m_bruiser, -/* spawnflags */ MONSTER_SIZE_BROKEN, +/* spawnflags */ MONSTER_SIZE_BROKEN | MON_FLAG_MELEE, /* mins,maxs */ '-20 -20 -31', '20 20 53', /* model */ "knight.mdl", /* netname */ "bruiser", diff --git a/qcsrc/common/monsters/monster/brute.qc b/qcsrc/common/monsters/monster/brute.qc index 42e189f75..95189b8e6 100644 --- a/qcsrc/common/monsters/monster/brute.qc +++ b/qcsrc/common/monsters/monster/brute.qc @@ -2,7 +2,7 @@ REGISTER_MONSTER( /* MON_##id */ BRUTE, /* function */ m_brute, -/* spawnflags */ 0, +/* spawnflags */ MON_FLAG_MELEE | MON_FLAG_RANGED, /* mins,maxs */ '-36 -36 -20', '36 36 50', /* model */ "ogre.dpm", /* netname */ "brute", diff --git a/qcsrc/common/monsters/monster/cerberus.qc b/qcsrc/common/monsters/monster/cerberus.qc index 15d3d8c4a..951aae796 100644 --- a/qcsrc/common/monsters/monster/cerberus.qc +++ b/qcsrc/common/monsters/monster/cerberus.qc @@ -2,7 +2,7 @@ REGISTER_MONSTER( /* MON_##id */ CERBERUS, /* function */ m_cerberus, -/* spawnflags */ 0, +/* spawnflags */ MON_FLAG_MELEE, /* mins,maxs */ '-16 -16 -24', '16 16 12', /* model */ "dog.dpm", /* netname */ "cerberus", diff --git a/qcsrc/common/monsters/monster/knight.qc b/qcsrc/common/monsters/monster/knight.qc index f0aaf4666..1e86618cb 100644 --- a/qcsrc/common/monsters/monster/knight.qc +++ b/qcsrc/common/monsters/monster/knight.qc @@ -2,7 +2,7 @@ REGISTER_MONSTER( /* MON_##id */ KNIGHT, /* function */ m_knight, -/* spawnflags */ MONSTER_SIZE_BROKEN, +/* spawnflags */ MONSTER_SIZE_BROKEN | MON_FLAG_MELEE | MON_FLAG_RANGED, /* mins,maxs */ '-20 -20 -32', '20 20 41', /* model */ "hknight.mdl", /* netname */ "knight", diff --git a/qcsrc/common/monsters/monster/mage.qc b/qcsrc/common/monsters/monster/mage.qc index f6140c661..f674f7958 100644 --- a/qcsrc/common/monsters/monster/mage.qc +++ b/qcsrc/common/monsters/monster/mage.qc @@ -2,7 +2,7 @@ REGISTER_MONSTER( /* MON_##id */ MAGE, /* function */ m_mage, -/* spawnflags */ 0, +/* spawnflags */ MON_FLAG_MELEE | MON_FLAG_RANGED, /* mins,maxs */ '-36 -36 -24', '36 36 50', /* model */ "mage.dpm", /* netname */ "mage", diff --git a/qcsrc/common/monsters/monster/shambler.qc b/qcsrc/common/monsters/monster/shambler.qc index 0933e7ede..91d1e66f2 100644 --- a/qcsrc/common/monsters/monster/shambler.qc +++ b/qcsrc/common/monsters/monster/shambler.qc @@ -2,7 +2,7 @@ REGISTER_MONSTER( /* MON_##id */ SHAMBLER, /* function */ m_shambler, -/* spawnflags */ MONSTER_SIZE_BROKEN | MON_FLAG_SUPERMONSTER, +/* spawnflags */ MONSTER_SIZE_BROKEN | MON_FLAG_SUPERMONSTER | MON_FLAG_MELEE | MON_FLAG_RANGED, /* mins,maxs */ '-41 -41 -31', '41 41 65', /* model */ "shambler.mdl", /* netname */ "shambler", diff --git a/qcsrc/common/monsters/monster/spider.qc b/qcsrc/common/monsters/monster/spider.qc index c06a38d3b..9d7e33f1e 100644 --- a/qcsrc/common/monsters/monster/spider.qc +++ b/qcsrc/common/monsters/monster/spider.qc @@ -2,7 +2,7 @@ REGISTER_MONSTER( /* MON_##id */ SPIDER, /* function */ m_spider, -/* spawnflags */ 0, +/* spawnflags */ MON_FLAG_MELEE | MON_FLAG_RANGED, /* mins,maxs */ '-18 -18 -25', '18 18 30', /* model */ "spider.dpm", /* netname */ "spider", diff --git a/qcsrc/common/monsters/monster/stingray.qc b/qcsrc/common/monsters/monster/stingray.qc index 6335536c6..c6d02fb5d 100644 --- a/qcsrc/common/monsters/monster/stingray.qc +++ b/qcsrc/common/monsters/monster/stingray.qc @@ -2,7 +2,7 @@ REGISTER_MONSTER( /* MON_##id */ STINGRAY, /* function */ m_stingray, -/* spawnflags */ MONSTER_TYPE_SWIM | MONSTER_SIZE_BROKEN, +/* spawnflags */ MONSTER_TYPE_SWIM | MONSTER_SIZE_BROKEN | MON_FLAG_MELEE, /* mins,maxs */ '-20 -20 -31', '20 20 20', /* model */ "fish.mdl", /* netname */ "stingray", diff --git a/qcsrc/common/monsters/monster/wyvern.qc b/qcsrc/common/monsters/monster/wyvern.qc index 9b0c0281c..0afc5f928 100644 --- a/qcsrc/common/monsters/monster/wyvern.qc +++ b/qcsrc/common/monsters/monster/wyvern.qc @@ -2,7 +2,7 @@ REGISTER_MONSTER( /* MON_##id */ WYVERN, /* function */ m_wyvern, -/* spawnflags */ MONSTER_TYPE_FLY | MONSTER_SIZE_BROKEN, +/* spawnflags */ MONSTER_TYPE_FLY | MONSTER_SIZE_BROKEN | MON_FLAG_RANGED, /* mins,maxs */ '-20 -20 -58', '20 20 20', /* model */ "wizard.mdl", /* netname */ "wyvern", diff --git a/qcsrc/common/monsters/monster/zombie.qc b/qcsrc/common/monsters/monster/zombie.qc index 7b04cfcd2..69deac51a 100644 --- a/qcsrc/common/monsters/monster/zombie.qc +++ b/qcsrc/common/monsters/monster/zombie.qc @@ -2,7 +2,7 @@ REGISTER_MONSTER( /* MON_##id */ ZOMBIE, /* function */ m_zombie, -/* spawnflags */ 0, +/* spawnflags */ MON_FLAG_MELEE, /* mins,maxs */ '-18 -18 -25', '18 18 47', /* model */ "zombie.dpm", /* netname */ "zombie", diff --git a/qcsrc/common/monsters/monsters.qh b/qcsrc/common/monsters/monsters.qh index b070a181c..59ed8f2f0 100644 --- a/qcsrc/common/monsters/monsters.qh +++ b/qcsrc/common/monsters/monsters.qh @@ -9,11 +9,13 @@ 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 -const float MON_FLAG_SUPERMONSTER = 2048; // incredibly powerful monster +const float MONSTER_RESPAWN_DEATHPOINT = 2; // re-spawn where we died +const float MONSTER_TYPE_FLY = 4; +const float MONSTER_TYPE_SWIM = 8; +const float MONSTER_SIZE_BROKEN = 16; // TODO: remove when bad models are replaced +const float MON_FLAG_SUPERMONSTER = 32; // incredibly powerful monster +const float MON_FLAG_RANGED = 64; // monster shoots projectiles +const float MON_FLAG_MELEE = 128; // entity properties of monsterinfo: .float monsterid; // MON_... diff --git a/qcsrc/common/monsters/sv_monsters.qc b/qcsrc/common/monsters/sv_monsters.qc index f8858cd4e..1de75199e 100644 --- a/qcsrc/common/monsters/sv_monsters.qc +++ b/qcsrc/common/monsters/sv_monsters.qc @@ -63,16 +63,25 @@ float monster_isvalidtarget (entity targ, entity ent) if(targ == ent) return FALSE; // don't attack ourselves + traceline(ent.origin, targ.origin, MOVE_NORMAL, ent); + + if(trace_ent != targ) + { + if(trace_ent != world) + targ = trace_ent; + else + return FALSE; + } + + if(targ.vehicle_flags & VHF_ISVEHICLE) + if not((get_monsterinfo(ent.monsterid)).spawnflags & MON_FLAG_RANGED) + return FALSE; // melee attacks are useless against vehicles + if(time < game_starttime) return FALSE; // monsters do nothing before the match has started - - WarpZone_TraceLine(ent.origin, targ.origin, MOVE_NORMAL, ent); if(vlen(targ.origin - ent.origin) >= ent.target_range) return FALSE; // enemy is too far away - - if(trace_ent != targ) - return FALSE; // we can't see the enemy if(targ.takedamage == DAMAGE_NO) return FALSE; // enemy can't be damaged @@ -86,6 +95,7 @@ float monster_isvalidtarget (entity targ, entity ent) if(IS_SPEC(targ) || IS_OBSERVER(targ)) return FALSE; // enemy is a spectator + if not(targ.vehicle_flags & VHF_ISVEHICLE) if(targ.deadflag != DEAD_NO || ent.deadflag != DEAD_NO || targ.health <= 0 || ent.health <= 0) return FALSE; // enemy/self is dead @@ -95,6 +105,7 @@ float monster_isvalidtarget (entity targ, entity ent) if(targ.monster_owner == ent) return FALSE; // don't attack our pet + if not(targ.vehicle_flags & VHF_ISVEHICLE) if(targ.flags & FL_NOTARGET) return FALSE; // enemy can't be targeted @@ -380,9 +391,10 @@ vector monster_pickmovetarget(entity targ) // enemy is always preferred target if(self.enemy) { + makevectors(self.angles); self.monster_movestate = MONSTER_MOVE_ENEMY; self.last_trace = time + 1.2; - return self.enemy.origin; + return self.enemy.origin * 0.9 + ((self.origin + v_forward * 500) + randomvec() * 400) * 0.1; } switch(self.monster_moveflags) @@ -589,8 +601,9 @@ void monster_move(float runspeed, float walkspeed, float stopspeed, float manim_ if(self.state == MONSTER_STATE_ATTACK_MELEE) self.moveto = self.origin; - else if(self.enemy) - self.moveto = self.moveto * 0.9 + ((self.origin + v_forward * 500) + randomvec() * 400) * 0.1; + + if(self.enemy && self.enemy.vehicle) + runspeed = 0; if not(self.flags & FL_FLY || self.flags & FL_SWIM) self.moveto_z = self.origin_z; -- 2.39.2