]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Attempt to fix monster vehicle support
authorMario <mario.mario@y7mail.com>
Sat, 31 Aug 2013 17:01:51 +0000 (03:01 +1000)
committerMario <mario.mario@y7mail.com>
Sat, 31 Aug 2013 17:01:51 +0000 (03:01 +1000)
13 files changed:
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/spider.qc
qcsrc/common/monsters/monster/stingray.qc
qcsrc/common/monsters/monster/wyvern.qc
qcsrc/common/monsters/monster/zombie.qc
qcsrc/common/monsters/monsters.qh
qcsrc/common/monsters/sv_monsters.qc

index 88d50e61b85c843046f36bec3d8f4cbfd7be9b6b..1d68dc41596abbb81c67f203100426757cbf5fc6 100644 (file)
@@ -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",
index c1b8018af706660303db12364aeb795a2f914c52..fb9c06618fceafdd5211190e8cd23a947d0cf9f2 100644 (file)
@@ -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",
index 42e189f75a80ca05c28678970ce867493438f89b..95189b8e687b40095bcf8ee162771114e66dd593 100644 (file)
@@ -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",
index 15d3d8c4a9e38f994e5d4bdceda9317b22b3952a..951aae796ae649357db002608e6af5913f322a8b 100644 (file)
@@ -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",
index f0aaf466665257bda141a085b88a9d3b10600e46..1e86618cb72e268504e19bc1ad37e608e0c44087 100644 (file)
@@ -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",
index f6140c66148c7c9982c2a8cbabc42ebbc5e6ce2a..f674f79580b4a9c5f2d2ef88cf0ead7086138d4d 100644 (file)
@@ -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",
index 0933e7ede4427f487cbbb4e23726fb420237272c..91d1e66f27087c513e2af60abeb543424c640521 100644 (file)
@@ -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",
index c06a38d3b0fef70b1ce81046b6e4c7a9244849c8..9d7e33f1e9de9903f30c5220e010d7b67e825c4f 100644 (file)
@@ -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",
index 6335536c67bb49faf0e02f4aeccf6fd67e8c7bd7..c6d02fb5d26ac922d70299d16efb44e2d0470d43 100644 (file)
@@ -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",
index 9b0c0281c623d862d0debe0c6b1bff9a038f033c..0afc5f9281d89af88539d45587804523b2a5da30 100644 (file)
@@ -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",
index 7b04cfcd2936754e040afdc6f17a39caf7ecc543..69deac51acec6748231356d5b70bb9e4f638e6a6 100644 (file)
@@ -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",
index b070a181ccde5de2443ca3dc9b8bdb898e8a2dfe..59ed8f2f097f3828ea7ad75a88219a0b658464c7 100644 (file)
@@ -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_...
index f8858cd4eb7e428130e4cff4eb14d3bd5df40bae..1de75199e1041e18b5edc3d6310d45cbef3ea90b 100644 (file)
@@ -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;