Added basic WEAPON_SNARK functionality
This commit is contained in:
parent
02e708ad90
commit
ce19b6995d
1 changed files with 138 additions and 3 deletions
|
@ -16,6 +16,14 @@ enum
|
|||
SNARK_THROW
|
||||
};
|
||||
|
||||
void w_snark_pickup(void)
|
||||
{
|
||||
#ifdef SSQC
|
||||
player pl = (player)self;
|
||||
pl.ammo_snark = bound(0, pl.ammo_snark + 1, 10);
|
||||
#endif
|
||||
}
|
||||
|
||||
void w_snark_draw(void)
|
||||
{
|
||||
#ifdef CSQC
|
||||
|
@ -30,9 +38,124 @@ void w_snark_holster(void)
|
|||
{
|
||||
|
||||
}
|
||||
|
||||
#ifdef SSQC
|
||||
void w_snark_deploy(void)
|
||||
{
|
||||
static void snark_ai(void)
|
||||
{
|
||||
input_movevalues = [250,0,0];
|
||||
input_buttons = 0;
|
||||
input_impulse = 0;
|
||||
input_angles = self.angles;
|
||||
input_timelength = frametime;
|
||||
|
||||
if (self.health <= 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (self.weapon <= 0.0 && self.aiment == __NULL__) {
|
||||
float shortest = 999999;
|
||||
for (entity ef = world; (ef = find(ef, classname, "player"));) {
|
||||
float len = vlen(ef.origin - self.origin);
|
||||
if (len < shortest && ef.health > 0) {
|
||||
self.owner = __NULL__;
|
||||
self.aiment = ef;
|
||||
shortest = len;
|
||||
setsize(self, [-16,-16,0],[16,16,32]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (self.aiment) {
|
||||
self.angles = input_angles = vectoangles(self.aiment.origin - self.origin);
|
||||
}
|
||||
|
||||
if (self.aiment && self.weapon <= 0.0) {
|
||||
self.weapon = 0.5f + random();
|
||||
sound(self, CHAN_VOICE, sprintf("squeek/sqk_hunt%d.wav",floor(random(1,4))), 1.0, ATTN_NORM);
|
||||
input_buttons = 2;
|
||||
Damage_Apply(self, world, 1, self.origin, TRUE);
|
||||
|
||||
makevectors(self.angles);
|
||||
traceline(self.origin, self.origin + (v_forward * 128), 0, self);
|
||||
|
||||
if (trace_ent.classname == "player") {
|
||||
float pit = 100 + random(0,10);
|
||||
sound(self, CHAN_BODY, "squeek/sqk_deploy1.wav", 1.0, ATTN_NORM, pit);
|
||||
Damage_Apply(trace_ent, self, 5, trace_endpos, FALSE);
|
||||
}
|
||||
|
||||
if (self.aiment.health <= 0) {
|
||||
self.aiment = __NULL__;
|
||||
}
|
||||
}
|
||||
self.weapon -= frametime;
|
||||
runstandardplayerphysics(self);
|
||||
}
|
||||
static void snark_die(int i) {
|
||||
sound(self, CHAN_VOICE, "squeek/sqk_die1.wav", 1.0, ATTN_NORM);
|
||||
sound(self, CHAN_BODY, "squeek/sqk_blast1.wav", 1.0, ATTN_NORM);
|
||||
self.customphysics = __NULL__;
|
||||
remove(self);
|
||||
}
|
||||
static void snark_pain(int i) { }
|
||||
entity snark = spawn();
|
||||
snark.owner = self;
|
||||
setmodel(snark, "models/w_squeak.mdl");
|
||||
makevectors(self.v_angle);
|
||||
setorigin(snark, self.origin + v_forward * 32);
|
||||
snark.solid = SOLID_BBOX;
|
||||
snark.movetype = MOVETYPE_WALK;
|
||||
snark.frame = 3; /* running like crazy. */
|
||||
snark.customphysics = snark_ai;
|
||||
snark.angles = self.angles;
|
||||
snark.health = 30;
|
||||
snark.vPain = snark_pain;
|
||||
snark.takedamage = DAMAGE_YES;
|
||||
snark.aiment = __NULL__;
|
||||
snark.vDeath = snark_die;
|
||||
snark.weapon = 3.0f;
|
||||
}
|
||||
#endif
|
||||
|
||||
void w_snark_primary(void)
|
||||
{
|
||||
player pl = (player)self;
|
||||
if (pl.w_attack_next > 0.0) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* Ammo check */
|
||||
#ifdef CSQC
|
||||
if (pl.a_ammo2 <= 0) {
|
||||
return;
|
||||
}
|
||||
#else
|
||||
if (pl.ammo_snark <= 0) {
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/* Audio-Visual Bit */
|
||||
#ifdef CSQC
|
||||
Weapons_ViewAnimation(SNARK_THROW);
|
||||
pl.a_ammo2--;
|
||||
#else
|
||||
w_snark_deploy();
|
||||
pl.ammo_snark--;
|
||||
Weapons_UpdateAmmo(pl, __NULL__, pl.ammo_snark, __NULL__);
|
||||
|
||||
if (pl.a_ammo2 <= 0) {
|
||||
Weapons_RemoveItem(pl, WEAPON_SNARK);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
pl.w_idle_next = 1.0f;
|
||||
pl.w_attack_next = 0.25f;
|
||||
|
||||
}
|
||||
void w_snark_secondary(void)
|
||||
{
|
||||
|
@ -51,7 +174,6 @@ void w_snark_release(void)
|
|||
}
|
||||
|
||||
r = floor(random(0,3));
|
||||
|
||||
switch (r) {
|
||||
case 0:
|
||||
Weapons_ViewAnimation(SNARK_IDLE);
|
||||
|
@ -72,6 +194,12 @@ void w_snark_precache(void)
|
|||
precache_model("models/w_squeak.mdl");
|
||||
precache_model("models/p_squeak.mdl");
|
||||
precache_model("models/v_squeak.mdl");
|
||||
precache_sound("squeek/sqk_deploy1.wav");
|
||||
precache_sound("squeek/sqk_die1.wav");
|
||||
precache_sound("squeek/sqk_blast1.wav");
|
||||
precache_sound("squeek/sqk_hunt1.wav");
|
||||
precache_sound("squeek/sqk_hunt2.wav");
|
||||
precache_sound("squeek/sqk_hunt3.wav");
|
||||
}
|
||||
string w_snark_vmodel(void)
|
||||
{
|
||||
|
@ -96,6 +224,13 @@ float w_snark_aimanim(void)
|
|||
return self.flags & FL_CROUCHING ? ANIM_CR_AIMSQUEAK : ANIM_AIMSQUEAK;
|
||||
}
|
||||
|
||||
void w_snark_hud(void)
|
||||
{
|
||||
#ifdef CSQC
|
||||
HUD_DrawAmmo2();
|
||||
#endif
|
||||
}
|
||||
|
||||
void w_snark_hudpic(int s, vector pos)
|
||||
{
|
||||
#ifdef CSQC
|
||||
|
@ -118,9 +253,9 @@ weapon_t w_snark =
|
|||
w_snark_secondary,
|
||||
w_snark_reload,
|
||||
w_snark_release,
|
||||
__NULL__,
|
||||
w_snark_hud,
|
||||
w_snark_precache,
|
||||
__NULL__,
|
||||
w_snark_pickup,
|
||||
w_snark_vmodel,
|
||||
w_snark_wmodel,
|
||||
w_snark_pmodel,
|
||||
|
|
Loading…
Reference in a new issue