From e5421a344984a9119145162a8036da867248cab0 Mon Sep 17 00:00:00 2001 From: Mario Date: Sat, 31 Aug 2013 15:05:05 +1000 Subject: [PATCH] Change monster_melee to work more like monster_leap --- qcsrc/common/monsters/cl_monsters.qc | 36 ++++++++++------------- qcsrc/common/monsters/monster/animus.qc | 9 +++--- qcsrc/common/monsters/monster/bruiser.qc | 7 ++--- qcsrc/common/monsters/monster/brute.qc | 3 +- qcsrc/common/monsters/monster/cerberus.qc | 11 +++---- qcsrc/common/monsters/monster/knight.qc | 13 ++++---- qcsrc/common/monsters/monster/mage.qc | 2 +- qcsrc/common/monsters/monster/shambler.qc | 6 ++-- qcsrc/common/monsters/monster/spider.qc | 9 +++--- qcsrc/common/monsters/monster/stingray.qc | 13 ++++---- qcsrc/common/monsters/monster/zombie.qc | 13 ++++---- qcsrc/common/monsters/sv_monsters.qc | 7 ++++- 12 files changed, 65 insertions(+), 64 deletions(-) diff --git a/qcsrc/common/monsters/cl_monsters.qc b/qcsrc/common/monsters/cl_monsters.qc index 869842c8a..bc02a37a5 100644 --- a/qcsrc/common/monsters/cl_monsters.qc +++ b/qcsrc/common/monsters/cl_monsters.qc @@ -18,14 +18,14 @@ void monster_changeteam() void monster_die() { MON_ACTION(self.monsterid, MR_DEATH); - + self.solid = SOLID_CORPSE; } void monster_draw() -{ +{ float dt; - + dt = time - self.move_time; self.move_time = time; if(dt <= 0) @@ -39,28 +39,24 @@ void monster_draw() void monster_construct() { - vector min_s, max_s; entity mon = get_monsterinfo(self.monsterid); - min_s = mon.mins; - max_s = mon.maxs; - if(mon.spawnflags & MONSTER_SIZE_BROKEN) self.scale = 1.3; self.netname = M_NAME(self.monsterid); - + setorigin(self, self.origin); setmodel(self, mon.model); - setsize(self, min_s, max_s); + setsize(self, mon.mins, mon.maxs); self.move_movetype = MOVETYPE_BOUNCE; self.health = 255; self.solid = SOLID_BBOX; - self.movetype = MOVETYPE_BOUNCE; + self.movetype = MOVETYPE_BOUNCE; self.move_origin = self.origin; self.move_time = time; - self.drawmask = MASK_NORMAL; + self.drawmask = MASK_NORMAL; self.alpha = 1; self.draw = monster_draw; } @@ -69,11 +65,11 @@ void ent_monster() { float sf; sf = ReadByte(); - + if(sf & MSF_SETUP) { self.monsterid = ReadByte(); - + self.origin_x = ReadCoord(); self.origin_y = ReadCoord(); self.origin_z = ReadCoord(); @@ -108,18 +104,18 @@ void ent_monster() self.velocity_z = ReadShort(); self.move_angles_y = ReadShort(); - - self.move_time = time; + + self.move_time = time; self.move_velocity = self.velocity; - self.move_origin = self.origin; + self.move_origin = self.origin; } if(sf & MSF_ANIM) { self.frame1time = ReadCoord(); - self.frame = ReadByte(); + self.frame = ReadByte(); } - + if(sf & MSF_STATUS) { self.skin = ReadByte(); @@ -127,8 +123,8 @@ void ent_monster() float _tmp; _tmp = ReadByte(); if(_tmp != self.team) - { - self.team = _tmp; + { + self.team = _tmp; monster_changeteam(); } diff --git a/qcsrc/common/monsters/monster/animus.qc b/qcsrc/common/monsters/monster/animus.qc index 8c5d074a5..88d50e61b 100644 --- a/qcsrc/common/monsters/monster/animus.qc +++ b/qcsrc/common/monsters/monster/animus.qc @@ -54,17 +54,18 @@ float animus_attack(float attack_type) { case MONSTER_ATTACK_MELEE: { - monsters_setframe(animus_anim_attack); - self.attack_finished_single = time + 1; - monster_melee(self.enemy, MON_CVAR(animus, attack_melee_damage), self.attack_range, DEATH_MONSTER_ANIMUS, TRUE); + if(monster_melee(self.enemy, MON_CVAR(animus, attack_melee_damage), animus_anim_attack, self.attack_range, 1, DEATH_MONSTER_ANIMUS, TRUE)) + return TRUE; - return TRUE; + return FALSE; } case MONSTER_ATTACK_RANGED: { makevectors(self.angles); if(monster_leap(animus_anim_leap, animus_touch_jump, v_forward * 700 + '0 0 300', 0.8)) return TRUE; + + return FALSE; } } diff --git a/qcsrc/common/monsters/monster/bruiser.qc b/qcsrc/common/monsters/monster/bruiser.qc index f6b8146d6..c1b8018af 100644 --- a/qcsrc/common/monsters/monster/bruiser.qc +++ b/qcsrc/common/monsters/monster/bruiser.qc @@ -40,12 +40,11 @@ float bruiser_attack(float attack_type) case MONSTER_ATTACK_MELEE: { float len = vlen(self.velocity); - monsters_setframe((len < 50) ? bruiser_anim_attack : bruiser_anim_runattack); - self.attack_finished_single = time + 1.25; - monster_melee(self.enemy, MON_CVAR(bruiser, attack_melee_damage), self.attack_range, DEATH_MONSTER_BRUISER, FALSE); + if(monster_melee(self.enemy, MON_CVAR(bruiser, attack_melee_damage), ((len < 50) ? bruiser_anim_attack : bruiser_anim_runattack), self.attack_range, 1.25, DEATH_MONSTER_BRUISER, FALSE)) + return TRUE; - return TRUE; + return FALSE; } case MONSTER_ATTACK_RANGED: { diff --git a/qcsrc/common/monsters/monster/brute.qc b/qcsrc/common/monsters/monster/brute.qc index a78813bee..42e189f75 100644 --- a/qcsrc/common/monsters/monster/brute.qc +++ b/qcsrc/common/monsters/monster/brute.qc @@ -45,7 +45,7 @@ void brute_blade() self.brute_cycles += 1; self.angles_y = self.angles_y + random()* 25; - monster_melee(self.enemy, MON_CVAR(brute, attack_chainsaw_damage), self.attack_range, DEATH_MONSTER_BRUTE_BLADE, TRUE); + monster_melee(self.enemy, MON_CVAR(brute, attack_chainsaw_damage), brute_anim_swing, self.attack_range, 0, DEATH_MONSTER_BRUTE_BLADE, TRUE); if(self.brute_cycles <= 4) defer(0.2, brute_blade); @@ -159,7 +159,6 @@ float brute_attack(float attack_type) case MONSTER_ATTACK_MELEE: { self.brute_cycles = 0; - monsters_setframe(brute_anim_swing); self.attack_finished_single = time + 1.3; brute_blade(); diff --git a/qcsrc/common/monsters/monster/cerberus.qc b/qcsrc/common/monsters/monster/cerberus.qc index 0f3163fad..15d3d8c4a 100644 --- a/qcsrc/common/monsters/monster/cerberus.qc +++ b/qcsrc/common/monsters/monster/cerberus.qc @@ -89,17 +89,18 @@ float cerberus_attack(float attack_type) { case MONSTER_ATTACK_MELEE: { - monsters_setframe(cerberus_anim_attack); - self.attack_finished_single = time + 0.7; - monster_melee(self.enemy, MON_CVAR(cerberus, attack_bite_damage), self.attack_range, DEATH_MONSTER_CERBERUS_BITE, TRUE); - - return TRUE; + if(monster_melee(self.enemy, MON_CVAR(cerberus, attack_bite_damage), cerberus_anim_attack, self.attack_range, 0.7, DEATH_MONSTER_CERBERUS_BITE, TRUE)) + return TRUE; + + return FALSE; } case MONSTER_ATTACK_RANGED: { makevectors(self.angles); if(monster_leap(cerberus_anim_attack, cerberus_touch_jump, v_forward * 300 + '0 0 200', 0.8)) return TRUE; + + return FALSE; } } diff --git a/qcsrc/common/monsters/monster/knight.qc b/qcsrc/common/monsters/monster/knight.qc index ca74c3c69..f0aaf4666 100644 --- a/qcsrc/common/monsters/monster/knight.qc +++ b/qcsrc/common/monsters/monster/knight.qc @@ -240,17 +240,18 @@ float knight_attack(float attack_type) anim = knight_anim_smash; else anim = knight_anim_wattack; - - monsters_setframe(anim); - self.attack_finished_single = time + 0.7; - monster_melee(self.enemy, MON_CVAR(knight, attack_melee_damage), self.attack_range, DEATH_MONSTER_KNIGHT_MELEE, TRUE); - - return TRUE; + + if(monster_melee(self.enemy, MON_CVAR(knight, attack_melee_damage), anim, self.attack_range, 0.7, DEATH_MONSTER_KNIGHT_MELEE, TRUE)) + return TRUE; + + return FALSE; } case MONSTER_ATTACK_RANGED: { if(knight_attack_ranged()) return TRUE; + + return FALSE; } } diff --git a/qcsrc/common/monsters/monster/mage.qc b/qcsrc/common/monsters/monster/mage.qc index 67dba01ef..8bb3da3d2 100644 --- a/qcsrc/common/monsters/monster/mage.qc +++ b/qcsrc/common/monsters/monster/mage.qc @@ -90,7 +90,7 @@ float friend_needshelp(entity e) void mageattack_melee() { - monster_melee(self.enemy, MON_CVAR(mage, attack_melee_damage), self.attack_range, DEATH_MONSTER_MAGE, TRUE); + monster_melee(self.enemy, MON_CVAR(mage, attack_melee_damage), mage_anim_attack, self.attack_range, MON_CVAR(mage, attack_melee_delay) - 0.2, DEATH_MONSTER_MAGE, TRUE); } void mage_grenade_explode() diff --git a/qcsrc/common/monsters/monster/shambler.qc b/qcsrc/common/monsters/monster/shambler.qc index 729d72843..0933e7ede 100644 --- a/qcsrc/common/monsters/monster/shambler.qc +++ b/qcsrc/common/monsters/monster/shambler.qc @@ -35,7 +35,7 @@ const float shambler_anim_death = 8; void shambler_smash() { - monster_melee(self.enemy, MON_CVAR(shambler, attack_smash_damage), self.attack_range, DEATH_MONSTER_SHAMBLER_SMASH, TRUE); + monster_melee(self.enemy, MON_CVAR(shambler, attack_smash_damage), shambler_anim_smash, self.attack_range, 0.4, DEATH_MONSTER_SHAMBLER_SMASH, TRUE); } void shambler_delayedsmash() @@ -48,9 +48,7 @@ void shambler_delayedsmash() void shambler_swing() { float r = (random() < 0.5); - monsters_setframe((r) ? shambler_anim_swingr : shambler_anim_swingl); - monster_melee(self.enemy, MON_CVAR(shambler, attack_claw_damage), self.attack_range, DEATH_MONSTER_SHAMBLER_CLAW, TRUE); - self.attack_finished_single = time + 0.8; + monster_melee(self.enemy, MON_CVAR(shambler, attack_claw_damage), ((r) ? shambler_anim_swingr : shambler_anim_swingl), self.attack_range, 0.8, DEATH_MONSTER_SHAMBLER_CLAW, TRUE); if(r) defer(0.5, shambler_swing); } diff --git a/qcsrc/common/monsters/monster/spider.qc b/qcsrc/common/monsters/monster/spider.qc index 42de2aca4..c06a38d3b 100644 --- a/qcsrc/common/monsters/monster/spider.qc +++ b/qcsrc/common/monsters/monster/spider.qc @@ -142,11 +142,10 @@ float spider_attack(float attack_type) { case MONSTER_ATTACK_MELEE: { - monster_melee(self.enemy, MON_CVAR(spider, attack_bite_damage), self.attack_range, DEATH_MONSTER_SPIDER, TRUE); - monsters_setframe((random() > 0.5) ? spider_anim_attack : spider_anim_attack2); - self.attack_finished_single = time + MON_CVAR(spider, attack_bite_delay); - - return TRUE; + if(monster_melee(self.enemy, MON_CVAR(spider, attack_bite_damage), ((random() > 0.5) ? spider_anim_attack : spider_anim_attack2), self.attack_range, MON_CVAR(spider, attack_bite_delay), DEATH_MONSTER_SPIDER, TRUE)) + return TRUE; + + return FALSE; } case MONSTER_ATTACK_RANGED: { diff --git a/qcsrc/common/monsters/monster/stingray.qc b/qcsrc/common/monsters/monster/stingray.qc index 41e866ca5..6335536c6 100644 --- a/qcsrc/common/monsters/monster/stingray.qc +++ b/qcsrc/common/monsters/monster/stingray.qc @@ -33,13 +33,16 @@ float stingray_attack(float attack_type) { case MONSTER_ATTACK_MELEE: { - monsters_setframe(stingray_anim_attack); - self.attack_finished_single = time + MON_CVAR(stingray, attack_bite_delay); - monster_melee(self.enemy, MON_CVAR(stingray, attack_bite_damage), self.attack_range, DEATH_MONSTER_STINGRAY, FALSE); - - return TRUE; + if(monster_melee(self.enemy, MON_CVAR(stingray, attack_bite_damage), stingray_anim_attack, self.attack_range, MON_CVAR(stingray, attack_bite_delay), DEATH_MONSTER_STINGRAY, FALSE)) + return TRUE; + + return FALSE; } case MONSTER_ATTACK_RANGED: + { + // no ranged attack for stingray (yet?) + return FALSE; + } } return FALSE; diff --git a/qcsrc/common/monsters/monster/zombie.qc b/qcsrc/common/monsters/monster/zombie.qc index 34586bd24..7b04cfcd2 100644 --- a/qcsrc/common/monsters/monster/zombie.qc +++ b/qcsrc/common/monsters/monster/zombie.qc @@ -91,20 +91,19 @@ float zombie_attack(float attack_type) chosen_anim = zombie_anim_attackstanding2; else chosen_anim = zombie_anim_attackstanding3; - - monsters_setframe(chosen_anim); - - self.attack_finished_single = time + MON_CVAR(zombie, attack_melee_delay); - monster_melee(self.enemy, MON_CVAR(zombie, attack_melee_damage), self.attack_range, DEATH_MONSTER_ZOMBIE_MELEE, TRUE); - - return TRUE; + if(monster_melee(self.enemy, MON_CVAR(zombie, attack_melee_damage), chosen_anim, self.attack_range, MON_CVAR(zombie, attack_melee_delay), DEATH_MONSTER_ZOMBIE_MELEE, TRUE)) + return TRUE; + + return FALSE; } case MONSTER_ATTACK_RANGED: { makevectors(self.angles); if(monster_leap(zombie_anim_attackleap, zombie_attack_leap_touch, v_forward * MON_CVAR(zombie, attack_leap_speed) + '0 0 200', MON_CVAR(zombie, attack_leap_delay))) return TRUE; + + return FALSE; } } diff --git a/qcsrc/common/monsters/sv_monsters.qc b/qcsrc/common/monsters/sv_monsters.qc index 4183fe1dd..0f7999702 100644 --- a/qcsrc/common/monsters/sv_monsters.qc +++ b/qcsrc/common/monsters/sv_monsters.qc @@ -206,7 +206,7 @@ void monster_makevectors(entity e) makevectors(self.v_angle); } -float monster_melee(entity targ, float damg, float er, float deathtype, float dostop) +float monster_melee(entity targ, float damg, float anim, float er, float anim_finished, float deathtype, float dostop) { float rdmg = damg * random(); @@ -222,6 +222,11 @@ float monster_melee(entity targ, float damg, float er, float deathtype, float do self.state = MONSTER_STATE_ATTACK_MELEE; self.SendFlags |= MSF_MOVE; } + + monsters_setframe(anim); + + if(anim_finished != 0) + self.attack_finished_single = time + anim_finished; monster_makevectors(targ); -- 2.39.2