self.monster_loot();
self.gravity = 1;
+ self.reset = SUB_Remove;
+ self.noalign = TRUE;
self.velocity = randomvec() * 175 + '0 0 325';
self.classname = "droppedweapon"; // hax
- self.wait = time + 0.7;
+ self.item_spawnshieldtime = time + 0.7;
SUB_SetFade(self, time + autocvar_g_monsters_drop_time, 1);
}
float Monster_CanRespawn(entity ent)
{
other = ent;
+ if(ent.deadflag == DEAD_DEAD) // don't call when monster isn't dead
if(MUTATOR_CALLHOOK(MonsterRespawn))
return TRUE; // enabled by a mutator
setmodel(self, "null");
}
else
- {
- if(IS_CLIENT(self.realowner))
- if not(self.monster_respawned)
- self.realowner.monstercount -= 1;
-
SUB_SetFade(self, time + 3, 1);
- }
}
float Monster_CanJump (vector vel)
void monster_dead_think()
{
- self.think = monster_dead_think;
self.nextthink = time + self.ticrate;
-
- self.deadflag = DEAD_DEAD;
+
+ CSQCMODEL_AUTOUPDATE();
if(self.ltime != 0)
if(time >= self.ltime)
Monster_Fade();
return;
}
-
- CSQCMODEL_AUTOUPDATE();
}
void monsters_setstatus()
}
}
-void monster_die(entity attacker)
+void monster_die(entity attacker, float gibbed)
{
self.think = monster_dead_think;
- self.nextthink = self.ticrate;
+ self.nextthink = time;
self.ltime = time + 5;
- Unfreeze(self); // remove any icy remains
- self.health = 0; // reset by Unfreeze
-
+ if ( self.frozen )
+ {
+ Unfreeze(self); // remove any icy remains
+ self.health = 0; // reset by Unfreeze
+ }
+
monster_dropitem();
MonsterSound(monstersound_death, 0, FALSE, CH_VOICE);
( !(self.spawnflags & MONSTERFLAG_SPAWNED) && !self.monster_respawned) )
PlayerScore_Add(attacker, SP_SCORE, +autocvar_g_monsters_score_kill);
+ if(!Monster_CanRespawn(self) || gibbed)
+ {
+ // number of monsters spawned with mobspawn command
+ totalspawned -= 1;
+
+ if(IS_CLIENT(self.realowner))
+ if not(self.monster_respawned)
+ self.realowner.monstercount -= 1;
+ }
if(self.candrop && self.weapon)
W_ThrowNewWeapon(self, self.weapon, 0, self.origin, randomvec() * 150 + '0 0 325');
self.event_damage = monsters_corpse_damage;
self.solid = SOLID_CORPSE;
self.takedamage = DAMAGE_AIM;
+ self.deadflag = DEAD_DEAD;
self.enemy = world;
self.movetype = MOVETYPE_TOSS;
self.moveto = self.origin;
if not(self.flags & FL_FLY)
self.velocity = '0 0 0';
- // number of monsters spawned with mobspawn command
- totalspawned -= 1;
-
MON_ACTION(self.monsterid, MR_DEATH);
}
void monsters_damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
{
+
if(self.frozen && deathtype != DEATH_KILL)
return;
SUB_UseTargets();
self.target2 = self.oldtarget2; // reset to original target on death, incase we respawn
- monster_die(attacker);
+ monster_die(attacker, (self.health <= -100 || deathtype == DEATH_KILL));
WaypointSprite_Kill(self.sprite);
if(self.health <= -100 || deathtype == DEATH_KILL) // check if we're already gibbed
{
Violence_GibSplash(self, 1, 0.5, attacker);
-
- if(IS_CLIENT(self.realowner))
- if not(self.monster_respawned)
- self.realowner.monstercount -= 1;
self.think = SUB_Remove;
self.nextthink = time + 0.1;