game-source/klik/weapons/w_axe.qc

127 lines
2.6 KiB
C++
Raw Normal View History

#include "common.qh"
2003-10-27 22:27:29 +00:00
#include "misc.qh"
#include "weapon.qh"
#include "damage.qh"
#include "effect.qh"
void ()
_w_axe_deathmsg =
{
local float r;
local string att_nname, def_nname;
r = random ();
def_nname = name (self);
att_nname = name (self.dmg_attacker);
if (r < 0.25)
bprint (PRINT_DEATH, def_nname, " gets chopped down to size by ",
att_nname, ".\n");
else if (r < 0.5)
bprint (PRINT_DEATH, att_nname, " mames ", def_nname,
" with a rusty axe.\n");
else if (r < 0.75)
bprint (PRINT_DEATH, def_nname, " loses his scalp to ", att_nname,
".\n");
else
bprint (PRINT_DEATH, att_nname, "'s axe penetrates ", def_nname,
" straight to the bone.\n");
};
void ()
_w_axe_fire =
{
local vector source;
source = shootorigin (self);
makevectors (self.v_angle);
traceline (source, source + v_forward * 64, FALSE, self);
if (trace_fraction == 1.0)
return;
ghost_inflictor.classname = "AXE";
ghost_inflictor.dmg = 20;
ghost_inflictor.mass = ghost_inflictor.mass * 8;
ghost_inflictor.velocity = v_forward * 1000;
damage_attack (ghost_inflictor);
if (!damage (trace_ent, self, ghost_inflictor, ghost_inflictor.dmg,
_w_axe_deathmsg)) {
/* We hit the world. */
sound (self, CHAN_WEAPON, "player/axhit2.wav", 1, ATTN_NORM);
effect_gun_spark (trace_endpos, v_forward * 250, 3);
}
};
void ()
_w_axe_think_1 =
{
self.weaponframe++;
if (self.weaponframe == 3)
_w_axe_fire();
if (self.weaponframe <= 1 || self.weaponframe > 4) {
self.weaponframe = 0;
self.w_think = NOTHING_function;
}
};
void ()
_w_axe_think_2 =
{
self.weaponframe++;
if (self.weaponframe == 7)
_w_axe_fire();
if (self.weaponframe <= 5 || self.weaponframe > 8) {
self.weaponframe = 0;
self.w_think = NOTHING_function;
}
};
/* WEAPON 1 axe */
float (float action)
w_axe =
{
switch (action) {
case WEAPON_AMMO:
return 0;
case WEAPON_WEIGHT:
return 1;
case WEAPON_SELECTABLE:
return TRUE;
case WEAPON_FIRE:
self.attack_finished = time + 0.5;
sound (self, CHAN_WEAPON, "weapons/ax1.wav", 1, ATTN_NORM);
if (random() < 0.5) {
self.weaponframe = 1;
self.w_think = _w_axe_think_1;
} else {
self.weaponframe = 5;
self.w_think = _w_axe_think_2;
}
self.w_thought = TRUE;
self.mdl_func (MDL_FUNC_FIRE, 0);
break;
case WEAPON_SELECT:
self.weaponmodel = "progs/v_axe.mdl";
self.weaponframe = 0;
self.mdl_mod = (self.mdl_mod & ~MDL_MOD_WEP_MASK) | MDL_MOD_WEP_AXE;
weaponprint ("Axe");
break;
case WEAPON_INIT:
precache_model ("progs/v_axe.mdl");
precache_sound ("player/axhit1.wav");
precache_sound ("player/axhit2.wav");
precache_sound ("weapons/ax1.wav");
break;
}
return 0;
};