]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Make monster appear flag work properly with re-spawning
authorMario <mario@smbclan.net>
Wed, 19 Oct 2016 20:27:42 +0000 (06:27 +1000)
committerMario <mario@smbclan.net>
Wed, 19 Oct 2016 20:27:42 +0000 (06:27 +1000)
qcsrc/common/monsters/monster/mage.qc
qcsrc/common/monsters/monster/shambler.qc
qcsrc/common/monsters/monster/spider.qc
qcsrc/common/monsters/monster/wyvern.qc
qcsrc/common/monsters/monster/zombie.qc
qcsrc/common/monsters/sv_monsters.qc
qcsrc/common/monsters/sv_monsters.qh
qcsrc/common/monsters/sv_spawn.qc

index 30d09807f2f9faf9c4462c30b07c36bb117983e9..2015bcc475363a907449e40c2fbb2887ff68a79a 100644 (file)
@@ -371,7 +371,7 @@ bool M_Mage_Attack(int attack_type, entity actor, entity targ)
        return false;
 }
 
-spawnfunc(monster_mage) { Monster_Spawn(this, MON_MAGE.monsterid); }
+spawnfunc(monster_mage) { Monster_Spawn(this, true, MON_MAGE.monsterid); }
 
 #endif // SVQC
 
index 8f84bdce31d70778f2989c696a14198f7aa29ac5..bbaf2e4696cf85949282cad609ee7e0f24a47b95 100644 (file)
@@ -200,7 +200,7 @@ bool M_Shambler_Attack(int attack_type, entity actor, entity targ)
        return false;
 }
 
-spawnfunc(monster_shambler) { Monster_Spawn(this, MON_SHAMBLER.monsterid); }
+spawnfunc(monster_shambler) { Monster_Spawn(this, true, MON_SHAMBLER.monsterid); }
 #endif // SVQC
 
 #ifdef SVQC
index d2cb8313e3f022402353736f94ac839da415114b..51122dfcf57d73a5575aff79dab4e8f25b31fdef 100644 (file)
@@ -190,7 +190,7 @@ bool M_Spider_Attack(int attack_type, entity actor, entity targ)
        return false;
 }
 
-spawnfunc(monster_spider) { Monster_Spawn(this, MON_SPIDER.monsterid); }
+spawnfunc(monster_spider) { Monster_Spawn(this, true, MON_SPIDER.monsterid); }
 #endif // SVQC
 
 #ifdef SVQC
index 3fd7ec967679e05b750349427f0b2b68d6bf1a32..cd53ff26f75aa2d483de2e55730fd56cce824962 100644 (file)
@@ -106,7 +106,7 @@ bool M_Wyvern_Attack(int attack_type, entity actor, entity targ)
        return false;
 }
 
-spawnfunc(monster_wyvern) { Monster_Spawn(this, MON_WYVERN.monsterid); }
+spawnfunc(monster_wyvern) { Monster_Spawn(this, true, MON_WYVERN.monsterid); }
 #endif // SVQC
 
 #ifdef SVQC
index c48c2108fa2299b80eee1aebdccf5a7da5f4d21b..8bbb300c76b6fc12cfae5ee55309c242d75a8115 100644 (file)
@@ -125,7 +125,7 @@ bool M_Zombie_Attack(int attack_type, entity actor, entity targ)
        return false;
 }
 
-spawnfunc(monster_zombie) { Monster_Spawn(this, MON_ZOMBIE.monsterid); }
+spawnfunc(monster_zombie) { Monster_Spawn(this, true, MON_ZOMBIE.monsterid); }
 #endif // SVQC
 
 #ifdef SVQC
@@ -188,6 +188,8 @@ METHOD(Zombie, mr_setup, bool(Zombie this, entity actor))
     if(actor.spawnflags & MONSTERFLAG_NORESPAWN)
         actor.spawnflags &= ~MONSTERFLAG_NORESPAWN; // zombies always respawn
 
+    actor.spawnflags &= ~MONSTERFLAG_APPEAR; // once it's appeared, it will respawn quickly, we don't want it to appear
+
     actor.spawnflags |= MONSTER_RESPAWN_DEATHPOINT;
 
     actor.monster_loot = spawnfunc_item_health_medium;
index 8fe84a3b62a268529fe46eb4fd8ae8dc7c55db1d..3de0ad8d49308bf5e0c53196276e1a1b8c64be83 100644 (file)
@@ -505,7 +505,7 @@ bool Monster_Respawn_Check(entity this)
        return true;
 }
 
-void Monster_Respawn(entity this) { Monster_Spawn(this, this.monsterid); }
+void Monster_Respawn(entity this) { Monster_Spawn(this, true, this.monsterid); }
 
 .vector        pos1, pos2;
 
@@ -934,8 +934,7 @@ void Monster_Dead_Think(entity this)
 void Monster_Appear(entity this, entity actor, entity trigger)
 {
        this.enemy = actor;
-       this.spawnflags &= ~MONSTERFLAG_APPEAR; // otherwise, we get an endless loop
-       Monster_Spawn(this, this.monsterid);
+       Monster_Spawn(this, false, this.monsterid);
 }
 
 bool Monster_Appear_Check(entity this, int monster_id)
@@ -1292,7 +1291,7 @@ bool Monster_Spawn_Setup(entity this)
        return true;
 }
 
-bool Monster_Spawn(entity this, int mon_id)
+bool Monster_Spawn(entity this, bool check_appear, int mon_id)
 {
        // setup the basic required properties for a monster
        entity mon = Monsters_from(mon_id);
@@ -1303,7 +1302,7 @@ bool Monster_Spawn(entity this, int mon_id)
        if(!(this.spawnflags & MONSTERFLAG_RESPAWNED))
                IL_PUSH(g_monsters, this);
 
-       if(Monster_Appear_Check(this, mon_id)) { return true; } // return true so the monster isn't removed
+       if(check_appear && Monster_Appear_Check(this, mon_id)) { return true; } // return true so the monster isn't removed
 
        if(!this.monster_skill)
                this.monster_skill = cvar("g_monsters_skill");
index 56509cf66130287530503eed396bd3a32fc2d35b..b667373a0f7926496b4633dc16dbc29e69d2b167 100644 (file)
@@ -72,7 +72,7 @@ void Monster_Remove(entity this);
 
 void monsters_setstatus(entity this);
 
-bool Monster_Spawn(entity this, int mon_id);
+bool Monster_Spawn(entity this, bool check_appear, int mon_id);
 
 void monster_setupcolors(entity this);
 
index 8c658252071977f014458e29dff9d1f71c54205e..6b9d4ea05f4066e3f9f188fcff0c7fdd97fbcbd8 100644 (file)
@@ -62,7 +62,7 @@ entity spawnmonster (string monster, int monster_id, entity spawnedby, entity ow
        }
 
        // Monster_Spawn checks if monster is valid
-       Monster_Spawn(e, monster_id);
+       Monster_Spawn(e, false, monster_id);
 
        return e;
 }