Compare commits

...

2 Commits

Author SHA1 Message Date
an 6933e8bf68 add DP_CON_SET support 2019-09-19 20:57:30 -04:00
an 3d627c7530 add automatic map restart upon all players running out of lives 2019-09-19 20:33:17 -04:00
5 changed files with 59 additions and 8 deletions

View File

@ -8,6 +8,10 @@ alias pronoun_xey "impulse 26"
alias pronoun_ze_hir "impulse 27"
alias pronoun_ze_zir "impulse 28"
set sc_cheats 0
set sc_lives 0
set sc_dist_ammo 0
echo "To change your pronouns in-game use one of the pronoun_ commands."
echo "You can get a list by typing 'pronoun_' and pressing tab."

View File

@ -301,6 +301,9 @@ void() trigger_changelevel = {
*/
void() become_spectator = {
float not_dead;
entity pl;
self.health = self.max_health;
self.armortype = 0;
self.armorvalue = 0;
@ -319,6 +322,16 @@ void() become_spectator = {
self.frame = 0;
self.modelindex = modelindex_eyes;
W_SetCurrentAmmo();
pl = find(world, classname, "player");
while(pl != world) {
not_dead += pl.lives;
pl = find(pl, classname, "player");
}
if(!not_dead) {
all_players_are_dead = time;
}
};
void() respawn = {
@ -339,7 +352,7 @@ void() respawn = {
player_respawned = TRUE;
PutClientInServer();
} else {
// restart the entire server
// restart the map
localcmd("restart\n");
}
};

View File

@ -269,6 +269,8 @@ string(string s) precache_file2 = #77; // registered version only
// set parm1... to the values at level start for coop respawn
void(entity e) setspawnparms = #78;
float(string s) checkextension = #99;
// constants -----------------------------------------------------------------|
const vector VEC_ORIGIN = '0 0 0';
@ -630,6 +632,9 @@ float sf_lives;
float sf_dist_ammo;
float player_respawned;
float all_players_are_dead;
float ext_con_set;
// fields --------------------------------------------------------------------|

View File

@ -17,6 +17,12 @@ void() worldspawn = {
lastspawn = world;
InitBodyQue();
if(cvar("pr_checkextension")) {
if(checkextension("DP_CON_SET")) {
ext_con_set = TRUE;
}
}
// custom map attributes
if(self.model == "maps/e1m8.bsp") {
cvar_set("sv_gravity", "100");
@ -179,16 +185,37 @@ void() worldspawn = {
};
void() StartFrame = {
float temp1flag;
entity pl;
float temp1flag, delta;
teamplay = cvar("teamplay");
skill = cvar("skill");
temp1flag = cvar("temp1");
framecount = framecount + 1;
sf_cheats = (temp1flag & SF_CHEATS) != 0;
sf_lives = bit_shift_right(temp1flag & SF_LIVES_MSK, SF_LIVES_BEG);
sf_dist_ammo = (temp1flag & SF_DIST_AMMO) != 0;
if(ext_con_set) {
sf_cheats = cvar("sc_cheats");
sf_lives = cvar("sc_lives");
sf_dist_ammo = cvar("sc_dist_ammo");
} else {
temp1flag = cvar("temp1");
sf_cheats = (temp1flag & SF_CHEATS) != 0;
sf_lives = bit_shift_right(temp1flag & SF_LIVES_MSK, SF_LIVES_BEG);
sf_dist_ammo = (temp1flag & SF_DIST_AMMO) != 0;
}
if(all_players_are_dead) {
delta = time - all_players_are_dead;
if(delta >= 9.95) {
localcmd("restart\n");
} else if(rint(delta * 10) == rint(delta) * 10) {
pl = find(world, classname, "player");
while(pl != world) {
centerprint(pl, "Mission failed.\nRestarting in ",
ftos(10 - rint(delta)), " seconds");
pl = find(pl, classname, "player");
}
}
}
};
/*

6
todo
View File

@ -9,12 +9,12 @@ rename all functions to be lower_underscore
core features:
add registercvar support
restart map after 10 seconds when everyone is dead
all done
useful features:
configurable enemy stats
impulse command for spectating
indicators for where other players are
users can cancel map ends ("<name> initiated travel to <mapname>")
@ -29,9 +29,11 @@ third person player weapon models
done:
add registercvar support
corpse pickups have keys
custom pronouns
distributed ammo
enforcers are broken
lives counting
no friendly fire
restart map after 10 seconds when everyone is dead