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_hir "impulse 27"
alias pronoun_ze_zir "impulse 28" 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 "To change your pronouns in-game use one of the pronoun_ commands."
echo "You can get a list by typing 'pronoun_' and pressing tab." echo "You can get a list by typing 'pronoun_' and pressing tab."

View File

@ -301,6 +301,9 @@ void() trigger_changelevel = {
*/ */
void() become_spectator = { void() become_spectator = {
float not_dead;
entity pl;
self.health = self.max_health; self.health = self.max_health;
self.armortype = 0; self.armortype = 0;
self.armorvalue = 0; self.armorvalue = 0;
@ -319,6 +322,16 @@ void() become_spectator = {
self.frame = 0; self.frame = 0;
self.modelindex = modelindex_eyes; self.modelindex = modelindex_eyes;
W_SetCurrentAmmo(); 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 = { void() respawn = {
@ -339,7 +352,7 @@ void() respawn = {
player_respawned = TRUE; player_respawned = TRUE;
PutClientInServer(); PutClientInServer();
} else { } else {
// restart the entire server // restart the map
localcmd("restart\n"); 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 // set parm1... to the values at level start for coop respawn
void(entity e) setspawnparms = #78; void(entity e) setspawnparms = #78;
float(string s) checkextension = #99;
// constants -----------------------------------------------------------------| // constants -----------------------------------------------------------------|
const vector VEC_ORIGIN = '0 0 0'; const vector VEC_ORIGIN = '0 0 0';
@ -630,6 +632,9 @@ float sf_lives;
float sf_dist_ammo; float sf_dist_ammo;
float player_respawned; float player_respawned;
float all_players_are_dead;
float ext_con_set;
// fields --------------------------------------------------------------------| // fields --------------------------------------------------------------------|

View File

@ -17,6 +17,12 @@ void() worldspawn = {
lastspawn = world; lastspawn = world;
InitBodyQue(); InitBodyQue();
if(cvar("pr_checkextension")) {
if(checkextension("DP_CON_SET")) {
ext_con_set = TRUE;
}
}
// custom map attributes // custom map attributes
if(self.model == "maps/e1m8.bsp") { if(self.model == "maps/e1m8.bsp") {
cvar_set("sv_gravity", "100"); cvar_set("sv_gravity", "100");
@ -179,16 +185,37 @@ void() worldspawn = {
}; };
void() StartFrame = { void() StartFrame = {
float temp1flag; entity pl;
float temp1flag, delta;
teamplay = cvar("teamplay"); teamplay = cvar("teamplay");
skill = cvar("skill"); skill = cvar("skill");
temp1flag = cvar("temp1");
framecount = framecount + 1; framecount = framecount + 1;
sf_cheats = (temp1flag & SF_CHEATS) != 0; if(ext_con_set) {
sf_lives = bit_shift_right(temp1flag & SF_LIVES_MSK, SF_LIVES_BEG); sf_cheats = cvar("sc_cheats");
sf_dist_ammo = (temp1flag & SF_DIST_AMMO) != 0; 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: core features:
add registercvar support all done
restart map after 10 seconds when everyone is dead
useful features: useful features:
configurable enemy stats configurable enemy stats
impulse command for spectating
indicators for where other players are indicators for where other players are
users can cancel map ends ("<name> initiated travel to <mapname>") users can cancel map ends ("<name> initiated travel to <mapname>")
@ -29,9 +29,11 @@ third person player weapon models
done: done:
add registercvar support
corpse pickups have keys corpse pickups have keys
custom pronouns custom pronouns
distributed ammo distributed ammo
enforcers are broken enforcers are broken
lives counting lives counting
no friendly fire no friendly fire
restart map after 10 seconds when everyone is dead