Compare commits
No commits in common. "f26743600c2d2c6622d5dea57caae134bd1ab563" and "e6221792a43286d31b76ff9852f5aefe18f87a25" have entirely different histories.
f26743600c
...
e6221792a4
|
@ -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 != SK_NIGHTMARE) {
|
if(skill != 3) {
|
||||||
self.attack_finished = time + normal;
|
self.attack_finished = time + normal;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
void(void() thinkst) sub_check_refire = {
|
void(void() thinkst) sub_check_refire = {
|
||||||
if(skill != SK_NIGHTMARE) {
|
if(skill != 3) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(self.cnt == 1) {
|
if(self.cnt == 1) {
|
||||||
|
|
|
@ -113,9 +113,15 @@ 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)) {
|
||||||
(teamplay == 3 && are_both_players(targ, attacker)) ||
|
return;
|
||||||
!targ.takedamage) {
|
}
|
||||||
|
|
||||||
|
if(teamplay == 3 && are_both_players(targ, attacker)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!targ.takedamage) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -128,6 +134,7 @@ 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;
|
||||||
|
@ -140,9 +147,10 @@ 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 += take;
|
targ.dmg_take = targ.dmg_take + take;
|
||||||
targ.dmg_save += save;
|
targ.dmg_save = targ.dmg_save + save;
|
||||||
targ.dmg_inflictor = inflictor;
|
targ.dmg_inflictor = inflictor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -177,8 +185,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")) {
|
||||||
|
@ -194,7 +202,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 == SK_NIGHTMARE) {
|
if(skill == 3) {
|
||||||
self.pain_finished = time + 5;
|
self.pain_finished = time + 5;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -608,13 +608,6 @@ 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,
|
||||||
|
|
|
@ -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 > SK_NORMAL) {
|
if(skill > 1) {
|
||||||
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 == SK_EASY) {
|
if(skill == 0) {
|
||||||
self.health = 1;
|
self.health = 1;
|
||||||
} else {
|
} else {
|
||||||
self.health = 3;
|
self.health = 3;
|
||||||
|
|
|
@ -187,13 +187,18 @@ 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 || !ent_can_damage(self.enemy, self)) {
|
if(!self.enemy) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(!ent_can_damage(self.enemy, self)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -158,7 +158,7 @@ void() shalrath_home = {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
dir = normalize(vtemp - self.origin);
|
dir = normalize(vtemp - self.origin);
|
||||||
if(skill == SK_NIGHTMARE) {
|
if(skill == 3) {
|
||||||
self.velocity = dir * 350;
|
self.velocity = dir * 350;
|
||||||
} else {
|
} else {
|
||||||
self.velocity = dir * 250;
|
self.velocity = dir * 250;
|
||||||
|
|
|
@ -313,10 +313,12 @@ 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 ] {sham_cast_lightning();};
|
void() sham_magic9 = [ $magic9, sham_magic10 ]
|
||||||
void() sham_magic10 = [ $magic10, sham_magic11 ] {sham_cast_lightning();};
|
{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 == SK_NIGHTMARE) {
|
if(skill == 3) {
|
||||||
sham_cast_lightning();
|
sham_cast_lightning();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -399,6 +399,8 @@ 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 = {
|
||||||
|
|
|
@ -201,7 +201,8 @@ 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, src;
|
vector direction;
|
||||||
|
vector src;
|
||||||
|
|
||||||
make_vectors(self.v_angle);
|
make_vectors(self.v_angle);
|
||||||
|
|
||||||
|
@ -381,7 +382,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 *= 16;
|
f = f * 16;
|
||||||
|
|
||||||
e1 = e2 = world;
|
e1 = e2 = world;
|
||||||
|
|
||||||
|
|
|
@ -197,6 +197,7 @@ 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;
|
||||||
|
|
|
@ -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 |= self.items;
|
other.items = other.items | self.items;
|
||||||
|
|
||||||
if(!coop) {
|
if(!coop) {
|
||||||
self.solid = SOLID_NOT;
|
self.solid = SOLID_NOT;
|
||||||
|
|
7
todo
7
todo
|
@ -19,7 +19,8 @@ extraneous features:
|
||||||
|
|
||||||
add expansion pack entities
|
add expansion pack entities
|
||||||
emotes
|
emotes
|
||||||
player sounds option
|
player sound effect 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
|
||||||
|
@ -37,7 +38,3 @@ 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)
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user