X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fmonsters%2Fsv_monsters.qc;h=75837cf1a0a06309a96fdd85ea998c8f635af08e;hb=dd3c7bd110ff27b62d6c8ee82cd25f51fc4b5a49;hp=9b06f509ed709cb7af821f5b99a6b54a9a493a64;hpb=e175584f9680a06bb6f22e7e3a94ad98b094d394;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/monsters/sv_monsters.qc b/qcsrc/common/monsters/sv_monsters.qc index 9b06f509e..75837cf1a 100644 --- a/qcsrc/common/monsters/sv_monsters.qc +++ b/qcsrc/common/monsters/sv_monsters.qc @@ -14,7 +14,6 @@ #include "../../server/defs.qh" #include "../deathtypes.qh" #include "../../server/mutators/mutators_include.qh" - #include "../../server/steerlib.qh" #include "../turrets/sv_turrets.qh" #include "../turrets/util.qh" #include "../vehicles/all.qh" @@ -39,6 +38,7 @@ void monster_dropitem() vector org = self.origin + ((self.mins + self.maxs) * 0.5); entity e = spawn(); + e.spawnfunc_checked = true; e.monster_loot = self.monster_loot; @@ -49,7 +49,7 @@ void monster_dropitem() { setself(e); e.noalign = true; - e.monster_loot(); + e.monster_loot(e); e.gravity = 1; e.movetype = MOVETYPE_TOSS; e.reset = SUB_Remove; @@ -118,7 +118,7 @@ bool Monster_ValidTarget(entity mon, entity player) makevectors (mon.angles); dot = normalize (player.origin - mon.origin) * v_forward; - if(dot <= 0.3) { return false; } + if(dot <= autocvar_g_monsters_target_infront_range) { return false; } } return true; // this target is valid! @@ -434,7 +434,7 @@ void Monster_Attack_Check(entity e, entity targ) if(targ_vlen <= e.attack_range) { - float attack_success = e.monster_attackfunc(MONSTER_ATTACK_MELEE); + float attack_success = e.monster_attackfunc(MONSTER_ATTACK_MELEE, targ); if(attack_success == 1) Monster_Sound(monstersound_melee, 0, false, CH_VOICE); else if(attack_success > 0) @@ -443,7 +443,7 @@ void Monster_Attack_Check(entity e, entity targ) if(targ_vlen > e.attack_range) { - float attack_success = e.monster_attackfunc(MONSTER_ATTACK_RANGED); + float attack_success = e.monster_attackfunc(MONSTER_ATTACK_RANGED, targ); if(attack_success == 1) Monster_Sound(monstersound_melee, 0, false, CH_VOICE); else if(attack_success > 0) @@ -471,7 +471,8 @@ void Monster_UpdateModel() self.anim_die2 = animfixfps(self, '9 1 0.01', '0 0 0');*/ // then get the real values - _MON_ACTION(self.monsterid, MR_ANIM); + Monster mon = get_monsterinfo(self.monsterid); + mon.mr_anim(mon); } void Monster_Touch() @@ -1035,9 +1036,10 @@ void Monster_Dead(entity attacker, float gibbed) if(!((self.flags & FL_FLY) || (self.flags & FL_SWIM))) self.velocity = '0 0 0'; - CSQCModel_UnlinkEntity(); + CSQCModel_UnlinkEntity(self); - _MON_ACTION(self.monsterid, MR_DEATH); + Monster mon = get_monsterinfo(self.monsterid); + mon.mr_death(mon); if(self.candrop && self.weapon) W_ThrowNewWeapon(self, self.weapon, 0, self.origin, randomvec() * 150 + '0 0 325'); @@ -1045,7 +1047,7 @@ void Monster_Dead(entity attacker, float gibbed) void Monster_Damage(entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force) {SELFPARAM(); - if((self.spawnflags & MONSTERFLAG_INVINCIBLE) && deathtype != DEATH_KILL) + if((self.spawnflags & MONSTERFLAG_INVINCIBLE) && deathtype != DEATH_KILL && !ITEM_DAMAGE_NEEDKILL(deathtype)) return; if(self.frozen && deathtype != DEATH_KILL && deathtype != DEATH_NADE_ICE_FREEZE) @@ -1070,7 +1072,8 @@ void Monster_Damage(entity inflictor, entity attacker, float damage, int deathty damage_take = take; frag_attacker = attacker; frag_deathtype = deathtype; - _MON_ACTION(self.monsterid, MR_PAIN); + Monster mon = get_monsterinfo(self.monsterid); + mon.mr_pain(mon); take = damage_take; if(take) @@ -1231,7 +1234,8 @@ void Monster_Think() return; } - if(_MON_ACTION(self.monsterid, MR_THINK)) + Monster mon = get_monsterinfo(self.monsterid); + if(mon.mr_think(mon)) Monster_Move(self.speed2, self.speed, self.stopspeed); Monster_Anim(); @@ -1241,7 +1245,8 @@ void Monster_Think() float Monster_Spawn_Setup() {SELFPARAM(); - _MON_ACTION(self.monsterid, MR_SETUP); + Monster mon = get_monsterinfo(self.monsterid); + mon.mr_setup(mon); // ensure some basic needs are met if(!self.health) { self.health = 100; }