fix various weapon and item functions

master
an 2019-09-19 11:40:41 -04:00
parent 661307339e
commit 6857946b1a
4 changed files with 57 additions and 65 deletions

View File

@ -22,7 +22,7 @@ void() SetChangeParms = {
}
// remove items
self.items = self.items - (self.items & (IT_KEY1 | IT_KEY2 | IT_INVISIBILITY | IT_INVULNERABILITY | IT_SUIT | IT_QUAD));
self.items &= ~(IT_KEY1 | IT_KEY2 | IT_INVISIBILITY | IT_INVULNERABILITY | IT_SUIT | IT_QUAD);
// cap super health
if(self.health > 100) {
@ -55,7 +55,7 @@ void() SetNewParms = {
parm5 = 0;
parm6 = 0;
parm7 = 0;
parm8 = 1;
parm8 = IT_SHOTGUN;
parm9 = 0;
};
@ -93,13 +93,11 @@ entity() FindIntermission = {
spot = find(world, classname, "info_intermission");
if(spot) {
// pick a random one
cyc = random() * 4;
while(cyc > 1) {
for(cyc = random() * 4; cyc > 1; cyc--) {
spot = find(spot, classname, "info_intermission");
if(!spot) {
spot = find(spot, classname, "info_intermission");
}
cyc = cyc - 1;
}
return spot;
}
@ -283,7 +281,7 @@ void() changelevel_touch = {
};
/*QUAKED trigger_changelevel(0.5 0.5 0.5) ? NO_INTERMISSION
When the player touches this, he gets sent to the map listed in the "map" variable. Unless the NO_INTERMISSION flag is set, the view will go to the info_intermission spot and display stats.
When the player touches this, they get sent to the map listed in the "map" variable. Unless the NO_INTERMISSION flag is set, the view will go to the info_intermission spot and display stats.
*/
void() trigger_changelevel = {
if(!self.map) {

View File

@ -357,7 +357,7 @@ void() teleport_touch = {
spawn_tfog(org);
spawn_tdeath(t.origin, other);
// move the player and lock him down for a little while
// move the player and lock them down for a little while
if(!other.health) {
other.origin = t.origin;
other.velocity = (v_forward * other.velocity_x) + (v_forward * other.velocity_y);

View File

@ -760,23 +760,6 @@ float() W_BestWeapon = {
return IT_AXE;
};
float() W_CheckNoAmmo = {
if(self.currentammo > 0) {
return TRUE;
}
if(self.weapon == IT_AXE) {
return TRUE;
}
self.weapon = W_BestWeapon();
W_SetCurrentAmmo();
// drop the weapon down
return FALSE;
};
/*
============
W_Attack
@ -787,50 +770,59 @@ An attack impulse can be triggered now
void() W_Attack = {
float r;
if(!W_CheckNoAmmo()) {
if(self.currentammo <= 0 && self.weapon != IT_AXE) {
self.weapon = W_BestWeapon();
W_SetCurrentAmmo();
return;
}
makevectors(self.v_angle); // calculate forward angle for velocity
self.show_hostile = time + 1; // wake monsters up
if(self.weapon == IT_AXE) {
sound(self, CHAN_WEAPON, "weapons/ax1.wav", 1, ATTN_NORM);
r = random();
if(r < 0.25) {
player_axe1();
} else if(r < 0.5) {
player_axeb1();
} else if(r < 0.75) {
player_axec1();
} else {
player_axed1();
}
self.attack_finished = time + 0.5;
} else if(self.weapon == IT_SHOTGUN) {
player_shot1();
W_FireShotgun();
self.attack_finished = time + 0.5;
} else if(self.weapon == IT_SUPER_SHOTGUN) {
player_shot1();
W_FireSuperShotgun();
self.attack_finished = time + 0.7;
} else if(self.weapon == IT_NAILGUN) {
player_nail1();
} else if(self.weapon == IT_SUPER_NAILGUN) {
player_nail1();
} else if(self.weapon == IT_GRENADE_LAUNCHER) {
player_rocket1();
W_FireGrenade();
self.attack_finished = time + 0.6;
} else if(self.weapon == IT_ROCKET_LAUNCHER) {
player_rocket1();
W_FireRocket();
self.attack_finished = time + 0.8;
} else if(self.weapon == IT_LIGHTNING) {
player_light1();
self.attack_finished = time + 0.1;
sound(self, CHAN_AUTO, "weapons/lstart.wav", 1, ATTN_NORM);
switch(self.weapon) {
case IT_AXE:
sound(self, CHAN_WEAPON, "weapons/ax1.wav", 1, ATTN_NORM);
r = random();
if(r < 0.25) {
player_axe1();
} else if(r < 0.5) {
player_axeb1();
} else if(r < 0.75) {
player_axec1();
} else {
player_axed1();
}
self.attack_finished = time + 0.5;
break;
case IT_SHOTGUN:
player_shot1();
W_FireShotgun();
self.attack_finished = time + 0.5;
break;
case IT_SUPER_SHOTGUN:
player_shot1();
W_FireSuperShotgun();
self.attack_finished = time + 0.7;
break;
case IT_NAILGUN:
case IT_SUPER_NAILGUN:
player_nail1();
break;
case IT_GRENADE_LAUNCHER:
player_rocket1();
W_FireGrenade();
self.attack_finished = time + 0.6;
break;
case IT_ROCKET_LAUNCHER:
player_rocket1();
W_FireRocket();
self.attack_finished = time + 0.8;
break;
case IT_LIGHTNING:
player_light1();
self.attack_finished = time + 0.1;
sound(self, CHAN_AUTO, "weapons/lstart.wav", 1, ATTN_NORM);
break;
}
};
@ -971,13 +963,14 @@ void() W_CycleWeapon = {
am = 1;
}
break;
default:
return;
}
if((it & self.weapon) && am == 0) {
W_SetCurrentAmmo();
return;
}
}
};
/*
@ -1040,13 +1033,14 @@ void() W_CycleWeaponReverse = {
am = 1;
}
break;
default:
return;
}
if((it & self.weapon) && am == 0) {
W_SetCurrentAmmo();
return;
}
}
};
/*

2
todo
View File

@ -5,7 +5,6 @@ rename all functions to be lower_underscore
core features:
custom pronouns
distributed ammo
lives counting
@ -27,4 +26,5 @@ third person player weapon models
done:
corpse pickups have keys
custom pronouns
no friendly fire