Compare commits

...

2 Commits

Author SHA1 Message Date
f26743600c various small fixes 2019-09-22 18:47:51 -04:00
4f2ac13652 remove extraneous FIXMEs 2019-09-21 17:31:18 -04:00
12 changed files with 32 additions and 41 deletions

View File

@ -277,13 +277,13 @@ some monsters refire twice automatically
void(float normal) sub_attack_finished = { void(float normal) sub_attack_finished = {
self.cnt = 0; // refire count for nightmare self.cnt = 0; // refire count for nightmare
if(skill != 3) { if(skill != SK_NIGHTMARE) {
self.attack_finished = time + normal; self.attack_finished = time + normal;
} }
}; };
void(void() thinkst) sub_check_refire = { void(void() thinkst) sub_check_refire = {
if(skill != 3) { if(skill != SK_NIGHTMARE) {
return; return;
} }
if(self.cnt == 1) { if(self.cnt == 1) {

View File

@ -113,15 +113,9 @@ void(entity targ, entity inflictor, entity attacker, float damage) ent_damage =
float take; float take;
// team play damage avoidance // team play damage avoidance
if(teamplay == 1 && is_same_team(targ, attacker)) { if((teamplay == 1 && is_same_team(targ, attacker)) ||
return; (teamplay == 3 && are_both_players(targ, attacker)) ||
} !targ.takedamage) {
if(teamplay == 3 && are_both_players(targ, attacker)) {
return;
}
if(!targ.takedamage) {
return; return;
} }
@ -134,7 +128,6 @@ void(entity targ, entity inflictor, entity attacker, float damage) ent_damage =
} }
// save damage based on the target's armor level // save damage based on the target's armor level
save = ceil(targ.armortype * damage); save = ceil(targ.armortype * damage);
if(save >= targ.armorvalue) { if(save >= targ.armorvalue) {
save = targ.armorvalue; save = targ.armorvalue;
@ -147,10 +140,9 @@ void(entity targ, entity inflictor, entity attacker, float damage) ent_damage =
// add to the damage total for clients, which will be sent as a single // add to the damage total for clients, which will be sent as a single
// message at the end of the frame // message at the end of the frame
// FIXME: remove after combining shotgun blasts?
if(targ.flags & FL_CLIENT) { if(targ.flags & FL_CLIENT) {
targ.dmg_take = targ.dmg_take + take; targ.dmg_take += take;
targ.dmg_save = targ.dmg_save + save; targ.dmg_save += save;
targ.dmg_inflictor = inflictor; targ.dmg_inflictor = inflictor;
} }
@ -185,8 +177,8 @@ void(entity targ, entity inflictor, entity attacker, float damage) ent_damage =
oldself = self; oldself = self;
self = targ; self = targ;
if((self.flags & FL_MONSTER) && attacker != world) { if(self.flags & FL_MONSTER && attacker != world) {
// get mad unless of the same class(except for soldiers) // get mad unless of the same class (except for soldiers)
if(self != attacker && attacker != self.enemy) { if(self != attacker && attacker != self.enemy) {
if((self.classname != attacker.classname) if((self.classname != attacker.classname)
|| (self.classname == "monster_army")) { || (self.classname == "monster_army")) {
@ -202,7 +194,7 @@ void(entity targ, entity inflictor, entity attacker, float damage) ent_damage =
if(self.th_pain) { if(self.th_pain) {
self.th_pain(attacker, take); self.th_pain(attacker, take);
// nightmare mode monsters don't go into pain frames often // nightmare mode monsters don't go into pain frames often
if(skill == 3) { if(skill == SK_NIGHTMARE) {
self.pain_finished = time + 5; self.pain_finished = time + 5;
} }
} }

View File

@ -608,6 +608,13 @@ enum {
AI_MONSTER_HIGH = 48, AI_MONSTER_HIGH = 48,
}; };
enum {
SK_EASY,
SK_NORMAL,
SK_HARD,
SK_NIGHTMARE,
};
// super co-op additions // super co-op additions
enum { enum {
PRO_NONE, PRO_NONE,

View File

@ -192,7 +192,7 @@ void(vector p) boss_missile = {
org = self.origin + p_x * v_forward + p_y * v_right + p_z*'0 0 1'; org = self.origin + p_x * v_forward + p_y * v_right + p_z*'0 0 1';
// lead the player on hard mode // lead the player on hard mode
if(skill > 1) { if(skill > SK_NORMAL) {
t = vec_len(self.enemy.origin - org) / 300; t = vec_len(self.enemy.origin - org) / 300;
vec = self.enemy.velocity; vec = self.enemy.velocity;
vec_z = 0; vec_z = 0;
@ -225,7 +225,7 @@ void() boss_awake = {
set_model(self, "progs/boss.mdl"); set_model(self, "progs/boss.mdl");
set_size(self, '-128 -128 -24', '128 128 256'); set_size(self, '-128 -128 -24', '128 128 256');
if(skill == 0) { if(skill == SK_EASY) {
self.health = 1; self.health = 1;
} else { } else {
self.health = 3; self.health = 3;

View File

@ -187,18 +187,13 @@ void() ogre_fire_grenade = {
/* /*
================ ================
chainsaw chainsaw
FIXME
================ ================
*/ */
void(float side) chainsaw = { void(float side) chainsaw = {
vector delta; vector delta;
float ldmg; float ldmg;
if(!self.enemy) { if(!self.enemy || !ent_can_damage(self.enemy, self)) {
return;
}
if(!ent_can_damage(self.enemy, self)) {
return; return;
} }

View File

@ -158,7 +158,7 @@ void() shalrath_home = {
return; return;
} }
dir = normalize(vtemp - self.origin); dir = normalize(vtemp - self.origin);
if(skill == 3) { if(skill == SK_NIGHTMARE) {
self.velocity = dir * 350; self.velocity = dir * 350;
} else { } else {
self.velocity = dir * 250; self.velocity = dir * 250;

View File

@ -313,12 +313,10 @@ void() sham_magic6 = [ $magic6, sham_magic9 ] {
sham_cast_lightning(); sham_cast_lightning();
sound(self, CHAN_WEAPON, "shambler/sboom.wav", 1, ATTN_NORM); sound(self, CHAN_WEAPON, "shambler/sboom.wav", 1, ATTN_NORM);
}; };
void() sham_magic9 = [ $magic9, sham_magic10 ] void() sham_magic9 = [ $magic9, sham_magic10 ] {sham_cast_lightning();};
{sham_cast_lightning();}; void() sham_magic10 = [ $magic10, sham_magic11 ] {sham_cast_lightning();};
void() sham_magic10 = [ $magic10, sham_magic11 ]
{sham_cast_lightning();};
void() sham_magic11 = [ $magic11, sham_magic12 ] { void() sham_magic11 = [ $magic11, sham_magic12 ] {
if(skill == 3) { if(skill == SK_NIGHTMARE) {
sham_cast_lightning(); sham_cast_lightning();
} }
}; };

View File

@ -399,8 +399,6 @@ has been twice in two seconds, otherwise it goes into one of the four
fast pain frames. fast pain frames.
A hit of less than 10 points of damage(winged by a shotgun) will be ignored. A hit of less than 10 points of damage(winged by a shotgun) will be ignored.
FIXME: don't use pain_finished because of nightmare hack
================= =================
*/ */
void(entity attacker, float take) zombie_pain = { void(entity attacker, float take) zombie_pain = {

View File

@ -201,8 +201,7 @@ Go to the trouble of combining multiple pellets into a single damage call.
================ ================
*/ */
void(float shotcount, vector dir, vector spread) fire_bullets = { void(float shotcount, vector dir, vector spread) fire_bullets = {
vector direction; vector direction, src;
vector src;
make_vectors(self.v_angle); make_vectors(self.v_angle);
@ -382,7 +381,7 @@ void(vector p1, vector p2, entity from, float damage) lightning_damage = {
f_x = 0 - f_y; f_x = 0 - f_y;
f_y = f_x; f_y = f_x;
f_z = 0; f_z = 0;
f = f * 16; f *= 16;
e1 = e2 = world; e1 = e2 = world;

View File

@ -197,7 +197,6 @@ void() door_touch = {
return; return;
} }
// FIXME: blink key on player's status bar
if((self.items & other.items) != self.items) { if((self.items & other.items) != self.items) {
switch(self.owner.items) { switch(self.owner.items) {
case IT_KEY1: print_center(other, "You need the ", key_1_name()); break; case IT_KEY1: print_center(other, "You need the ", key_1_name()); break;

View File

@ -754,7 +754,7 @@ void() key_touch = {
sound(other, CHAN_ITEM, self.noise, 1, ATTN_NORM); sound(other, CHAN_ITEM, self.noise, 1, ATTN_NORM);
cmd_client(other, "bf\n"); cmd_client(other, "bf\n");
other.items = other.items | self.items; other.items |= self.items;
if(!coop) { if(!coop) {
self.solid = SOLID_NOT; self.solid = SOLID_NOT;

7
todo
View File

@ -19,8 +19,7 @@ extraneous features:
add expansion pack entities add expansion pack entities
emotes emotes
player sound effect option player sounds option
players shoot through eachother (teamplay 4?)
selectable player models and skins selectable player models and skins
sound clips sound clips
third person player weapon models third person player weapon models
@ -38,3 +37,7 @@ no friendly fire
rename all functions to be lower_underscore rename all functions to be lower_underscore
restart map after 10 seconds when everyone is dead restart map after 10 seconds when everyone is dead
users can cancel map ends ("<name> initiated travel to <mapname>") users can cancel map ends ("<name> initiated travel to <mapname>")
rejected:
players shoot through eachother (teamplay 4?) (can theoretically be done in quakec but the math is too complex)