Compare commits
No commits in common. "10d98c67c0147e9b659da2df6e8965e78698990d" and "6933e8bf6892ee2cd6ee91307379ac6bb628752c" have entirely different histories.
10d98c67c0
...
6933e8bf68
|
@ -8,8 +8,6 @@ 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"
|
||||||
|
|
||||||
alias spectate "impulse 13"
|
|
||||||
|
|
||||||
set sc_cheats 0
|
set sc_cheats 0
|
||||||
set sc_lives 0
|
set sc_lives 0
|
||||||
set sc_dist_ammo 0
|
set sc_dist_ammo 0
|
||||||
|
|
222
source/client.qc
222
source/client.qc
|
@ -1,35 +1,5 @@
|
||||||
// client.qc: player-adjacent functions
|
// client.qc: player-adjacent functions
|
||||||
|
|
||||||
string(float pro) pronoun_subject = {
|
|
||||||
switch(pro) {
|
|
||||||
case PRO_NONE: return "none";
|
|
||||||
case PRO_FAE: return "fae";
|
|
||||||
case PRO_HE: return "he";
|
|
||||||
case PRO_IT: return "it";
|
|
||||||
case PRO_SHE: return "she";
|
|
||||||
case PRO_THEY: return "they";
|
|
||||||
case PRO_XEY: return "xey";
|
|
||||||
case PRO_ZE_H: return "ze";
|
|
||||||
case PRO_ZE_Z: return "ze";
|
|
||||||
default: return "unknown";
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
string(float pro) pronoun_possessive = {
|
|
||||||
switch(pro) {
|
|
||||||
case PRO_NONE: return "none";
|
|
||||||
case PRO_FAE: return "faer";
|
|
||||||
case PRO_HE: return "his";
|
|
||||||
case PRO_IT: return "its";
|
|
||||||
case PRO_SHE: return "her";
|
|
||||||
case PRO_THEY: return "their";
|
|
||||||
case PRO_XEY: return "xyr";
|
|
||||||
case PRO_ZE_H: return "hir";
|
|
||||||
case PRO_ZE_Z: return "zir";
|
|
||||||
default: return "unknown";
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
=============================================================================
|
=============================================================================
|
||||||
|
|
||||||
|
@ -52,16 +22,23 @@ void() SetChangeParms = {
|
||||||
}
|
}
|
||||||
|
|
||||||
// remove items
|
// remove items
|
||||||
self.items &= ~(IT_KEY1 | IT_KEY2 | IT_INVISIBILITY | IT_INVULNERABILITY |
|
self.items &= ~(IT_KEY1 | IT_KEY2 | IT_INVISIBILITY | IT_INVULNERABILITY | IT_SUIT | IT_QUAD);
|
||||||
IT_SUIT | IT_QUAD);
|
|
||||||
|
|
||||||
// cap super health
|
// cap super health
|
||||||
self.health = minmax(self.health, 50, 100);
|
if(self.health > 100) {
|
||||||
|
self.health = 100;
|
||||||
|
}
|
||||||
|
if(self.health < 50) {
|
||||||
|
self.health = 50;
|
||||||
|
}
|
||||||
parm1 = self.items;
|
parm1 = self.items;
|
||||||
parm2 = self.health;
|
parm2 = self.health;
|
||||||
parm3 = self.armorvalue;
|
parm3 = self.armorvalue;
|
||||||
parm4 = (self.ammo_shells < 25 ? 25 : self.ammo_shells);
|
if(self.ammo_shells < 25) {
|
||||||
|
parm4 = 25;
|
||||||
|
} else {
|
||||||
|
parm4 = self.ammo_shells;
|
||||||
|
}
|
||||||
parm5 = self.ammo_nails;
|
parm5 = self.ammo_nails;
|
||||||
parm6 = self.ammo_rockets;
|
parm6 = self.ammo_rockets;
|
||||||
parm7 = self.ammo_cells;
|
parm7 = self.ammo_cells;
|
||||||
|
@ -83,8 +60,6 @@ void() SetNewParms = {
|
||||||
};
|
};
|
||||||
|
|
||||||
void() DecodeLevelParms = {
|
void() DecodeLevelParms = {
|
||||||
float ofs, ofs2, pro;
|
|
||||||
|
|
||||||
if(serverflags) {
|
if(serverflags) {
|
||||||
if(world.model == "maps/start.bsp") {
|
if(world.model == "maps/start.bsp") {
|
||||||
SetNewParms(); // take away all stuff on starting new episode
|
SetNewParms(); // take away all stuff on starting new episode
|
||||||
|
@ -101,19 +76,6 @@ void() DecodeLevelParms = {
|
||||||
self.weapon = parm8;
|
self.weapon = parm8;
|
||||||
self.armortype = parm9 * 0.01;
|
self.armortype = parm9 * 0.01;
|
||||||
self.pronoun = parm10;
|
self.pronoun = parm10;
|
||||||
|
|
||||||
if(ext_strings) {
|
|
||||||
ofs = strstrofs(self.netname, "(", 0);
|
|
||||||
if(ofs != -1) {
|
|
||||||
for(pro = PRO_NONE; pro < PRO_MAX; pro++) {
|
|
||||||
ofs2 = strstrofs(self.netname, pronoun_possessive(pro), ofs);
|
|
||||||
if(ofs2 == ofs + 1 && strstrofs(self.netname, ")", ofs) != -1) {
|
|
||||||
self.pronoun = pro;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -277,7 +239,6 @@ void() execute_changelevel = {
|
||||||
other.solid = SOLID_NOT;
|
other.solid = SOLID_NOT;
|
||||||
other.movetype = MOVETYPE_NONE;
|
other.movetype = MOVETYPE_NONE;
|
||||||
other.modelindex = 0;
|
other.modelindex = 0;
|
||||||
other.spectating = SPECTATING_INTERMISSION;
|
|
||||||
setorigin(other, pos.origin);
|
setorigin(other, pos.origin);
|
||||||
other = find(other, classname, "player");
|
other = find(other, classname, "player");
|
||||||
}
|
}
|
||||||
|
@ -343,7 +304,6 @@ void() become_spectator = {
|
||||||
float not_dead;
|
float not_dead;
|
||||||
entity pl;
|
entity pl;
|
||||||
|
|
||||||
self.spectating = (self.lives ? SPECTATING_SPECTATING : SPECTATING_DEAD);
|
|
||||||
self.health = self.max_health;
|
self.health = self.max_health;
|
||||||
self.armortype = 0;
|
self.armortype = 0;
|
||||||
self.armorvalue = 0;
|
self.armorvalue = 0;
|
||||||
|
@ -495,7 +455,7 @@ void() PutClientInServer = {
|
||||||
} else {
|
} else {
|
||||||
bprint(ftos(self.lives), " lives left\n");
|
bprint(ftos(self.lives), " lives left\n");
|
||||||
}
|
}
|
||||||
} else if(self.lives == 0) {
|
} else {
|
||||||
self.lives = sf_lives;
|
self.lives = sf_lives;
|
||||||
dprint("lives reset to ", ftos(sf_lives), "\n");
|
dprint("lives reset to ", ftos(sf_lives), "\n");
|
||||||
}
|
}
|
||||||
|
@ -521,7 +481,6 @@ void() PutClientInServer = {
|
||||||
self.invincible_finished = 0;
|
self.invincible_finished = 0;
|
||||||
self.effects = 0;
|
self.effects = 0;
|
||||||
self.invincible_time = 0;
|
self.invincible_time = 0;
|
||||||
self.spectating = SPECTATING_NOT;
|
|
||||||
|
|
||||||
DecodeLevelParms();
|
DecodeLevelParms();
|
||||||
|
|
||||||
|
@ -532,10 +491,11 @@ void() PutClientInServer = {
|
||||||
self.th_die = PlayerDie;
|
self.th_die = PlayerDie;
|
||||||
|
|
||||||
self.deadflag = DEAD_NO;
|
self.deadflag = DEAD_NO;
|
||||||
|
// paustime is set by teleporters to keep the player from moving a while
|
||||||
// pausetime is set by teleporters to keep the player from moving for a bit
|
|
||||||
self.pausetime = 0;
|
self.pausetime = 0;
|
||||||
|
|
||||||
|
// spot = SelectSpawnPoint();
|
||||||
|
|
||||||
self.origin = spot.origin + '0 0 1';
|
self.origin = spot.origin + '0 0 1';
|
||||||
self.angles = spot.angles;
|
self.angles = spot.angles;
|
||||||
self.fixangle = TRUE; // turn this way immediately
|
self.fixangle = TRUE; // turn this way immediately
|
||||||
|
@ -660,7 +620,8 @@ Exit deathmatch games upon conditions
|
||||||
============
|
============
|
||||||
*/
|
*/
|
||||||
void() CheckRules = {
|
void() CheckRules = {
|
||||||
float timelimit, fraglimit;
|
float timelimit;
|
||||||
|
float fraglimit;
|
||||||
|
|
||||||
if(gameover) { // someone else quit the game already
|
if(gameover) { // someone else quit the game already
|
||||||
return;
|
return;
|
||||||
|
@ -669,8 +630,12 @@ void() CheckRules = {
|
||||||
timelimit = cvar("timelimit") * 60;
|
timelimit = cvar("timelimit") * 60;
|
||||||
fraglimit = cvar("fraglimit");
|
fraglimit = cvar("fraglimit");
|
||||||
|
|
||||||
if((timelimit && time >= timelimit) ||
|
if(timelimit && time >= timelimit) {
|
||||||
(fraglimit && self.frags >= fraglimit)) {
|
NextLevel();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(fraglimit && self.frags >= fraglimit) {
|
||||||
NextLevel();
|
NextLevel();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -742,12 +707,17 @@ void() PlayerJump = {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!(self.flags & FL_ONGROUND) || !(self.flags & FL_JUMPRELEASED)) {
|
if(!(self.flags & FL_ONGROUND)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!(self.flags & FL_JUMPRELEASED)) {
|
||||||
return; // don't pogo stick
|
return; // don't pogo stick
|
||||||
}
|
}
|
||||||
|
|
||||||
self.flags -= (self.flags & FL_JUMPRELEASED);
|
self.flags = self.flags - (self.flags & FL_JUMPRELEASED);
|
||||||
self.flags -= FL_ONGROUND; // don't stairwalk
|
|
||||||
|
self.flags = self.flags - FL_ONGROUND; // don't stairwalk
|
||||||
|
|
||||||
self.button2 = 0;
|
self.button2 = 0;
|
||||||
// player jumping sound
|
// player jumping sound
|
||||||
|
@ -762,8 +732,11 @@ WaterMove
|
||||||
============
|
============
|
||||||
*/
|
*/
|
||||||
void() WaterMove = {
|
void() WaterMove = {
|
||||||
string water_snd;
|
//dprint(ftos(self.waterlevel));
|
||||||
if(self.movetype == MOVETYPE_NOCLIP || self.health < 0) {
|
if(self.movetype == MOVETYPE_NOCLIP) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(self.health < 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -796,8 +769,8 @@ void() WaterMove = {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch(self.watertype) {
|
if(self.watertype == CONTENT_LAVA) {
|
||||||
case CONTENT_LAVA:
|
// do damage
|
||||||
if(self.dmgtime < time) {
|
if(self.dmgtime < time) {
|
||||||
if(self.radsuit_finished > time) {
|
if(self.radsuit_finished > time) {
|
||||||
self.dmgtime = time + 1;
|
self.dmgtime = time + 1;
|
||||||
|
@ -806,29 +779,31 @@ void() WaterMove = {
|
||||||
}
|
}
|
||||||
T_Damage(self, world, world, 10 * self.waterlevel);
|
T_Damage(self, world, world, 10 * self.waterlevel);
|
||||||
}
|
}
|
||||||
break;
|
} else if(self.watertype == CONTENT_SLIME) {
|
||||||
case CONTENT_SLIME:
|
// do damage
|
||||||
if(self.dmgtime < time && self.radsuit_finished < time) {
|
if(self.dmgtime < time && self.radsuit_finished < time) {
|
||||||
self.dmgtime = time + 1;
|
self.dmgtime = time + 1;
|
||||||
T_Damage(self, world, world, 4 * self.waterlevel);
|
T_Damage(self, world, world, 4 * self.waterlevel);
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!(self.flags & FL_INWATER)) {
|
if(!(self.flags & FL_INWATER)) {
|
||||||
// player enter water sound
|
// player enter water sound
|
||||||
switch(self.watertype) {
|
if(self.watertype == CONTENT_LAVA) {
|
||||||
case CONTENT_LAVA: water_snd = "player/inlava.wav"; break;
|
sound(self, CHAN_BODY, "player/inlava.wav", 1, ATTN_NORM);
|
||||||
case CONTENT_WATER: water_snd = "player/inh2o.wav"; break;
|
}
|
||||||
case CONTENT_SLIME: water_snd = "player/slimbrn2.wav"; break;
|
if(self.watertype == CONTENT_WATER) {
|
||||||
|
sound(self, CHAN_BODY, "player/inh2o.wav", 1, ATTN_NORM);
|
||||||
|
}
|
||||||
|
if(self.watertype == CONTENT_SLIME) {
|
||||||
|
sound(self, CHAN_BODY, "player/slimbrn2.wav", 1, ATTN_NORM);
|
||||||
}
|
}
|
||||||
sound(self, CHAN_BODY, water_snd, 1, ATTN_NORM);
|
|
||||||
self.flags = self.flags + FL_INWATER;
|
self.flags = self.flags + FL_INWATER;
|
||||||
self.dmgtime = 0;
|
self.dmgtime = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!(self.flags & FL_WATERJUMP)) {
|
if(!(self.flags & FL_WATERJUMP)) {
|
||||||
self.velocity -= 0.8 * self.waterlevel * frametime * self.velocity;
|
self.velocity = self.velocity - 0.8 * self.waterlevel * frametime * self.velocity;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -868,14 +843,17 @@ Called every frame before physics are run
|
||||||
================
|
================
|
||||||
*/
|
*/
|
||||||
void() PlayerPreThink = {
|
void() PlayerPreThink = {
|
||||||
// otherwise a button could be missed between the think tics
|
|
||||||
if(intermission_running) {
|
if(intermission_running) {
|
||||||
IntermissionThink();
|
IntermissionThink(); // otherwise a button could be missed between
|
||||||
return;
|
return; // the think tics
|
||||||
} else if(self.spectating) {
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(self.view_ofs == VEC_ORIGIN) {
|
||||||
|
return; // intermission, finale or spectating
|
||||||
|
}
|
||||||
|
|
||||||
|
makevectors(self.v_angle); // is this still used
|
||||||
|
|
||||||
CheckRules();
|
CheckRules();
|
||||||
WaterMove();
|
WaterMove();
|
||||||
|
|
||||||
|
@ -917,7 +895,7 @@ Check for turning off powerups
|
||||||
================
|
================
|
||||||
*/
|
*/
|
||||||
void() CheckPowerups = {
|
void() CheckPowerups = {
|
||||||
if(self.health <= 0 || self.spectating) {
|
if(self.health <= 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1042,18 +1020,16 @@ Called every frame after physics are run
|
||||||
================
|
================
|
||||||
*/
|
*/
|
||||||
void() PlayerPostThink = {
|
void() PlayerPostThink = {
|
||||||
if(time >= self.attack_finished) {
|
if(self.view_ofs == VEC_ORIGIN) {
|
||||||
ImpulseCommands();
|
return; // intermission, finale or spectating
|
||||||
}
|
}
|
||||||
|
if(self.deadflag) {
|
||||||
if(self.spectating || self.deadflag) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// do weapon stuff
|
// do weapon stuff
|
||||||
if(time >= self.attack_finished) {
|
|
||||||
W_WeaponFrame();
|
W_WeaponFrame();
|
||||||
}
|
|
||||||
|
|
||||||
// check to see if player landed and play landing sound
|
// check to see if player landed and play landing sound
|
||||||
if(self.jump_flag < -300 && self.flags & FL_ONGROUND && self.health > 0) {
|
if(self.jump_flag < -300 && self.flags & FL_ONGROUND && self.health > 0) {
|
||||||
|
@ -1100,23 +1076,20 @@ called when a player disconnects from a server
|
||||||
============
|
============
|
||||||
*/
|
*/
|
||||||
void() ClientDisconnect = {
|
void() ClientDisconnect = {
|
||||||
// if the level end trigger has been activated, just return
|
|
||||||
// since they aren't *really* leaving
|
|
||||||
if(gameover) {
|
if(gameover) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
// if the level end trigger has been activated, just return
|
||||||
|
// since they aren't *really* leaving
|
||||||
|
|
||||||
// let everyone else know
|
// let everyone else know
|
||||||
bprint(self.netname, " left the game with ", ftos(self.frags), " frags\n");
|
bprint(self.netname, " left the game with ", ftos(self.frags), " frags\n");
|
||||||
|
|
||||||
if(!self.spectating) {
|
|
||||||
sound(self, CHAN_BODY, "player/tornoff2.wav", 1, ATTN_NONE);
|
sound(self, CHAN_BODY, "player/tornoff2.wav", 1, ATTN_NONE);
|
||||||
set_suicide_frame();
|
set_suicide_frame();
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void() cheat = {
|
void() cheat = {
|
||||||
if(((deathmatch || coop) && !sf_cheats) || self.spectating) {
|
if((deathmatch || coop) && !sf_cheats) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1141,7 +1114,7 @@ void() cheat = {
|
||||||
};
|
};
|
||||||
|
|
||||||
void() cheat_quad = {
|
void() cheat_quad = {
|
||||||
if(((deathmatch || coop) && !sf_cheats) || self.spectating) {
|
if((deathmatch || coop) && !sf_cheats) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1150,6 +1123,36 @@ void() cheat_quad = {
|
||||||
self.items = self.items | IT_QUAD;
|
self.items = self.items | IT_QUAD;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
string(float pro) pronoun_subject = {
|
||||||
|
switch(pro) {
|
||||||
|
case PRO_NONE: return "none";
|
||||||
|
case PRO_FAE: return "fae";
|
||||||
|
case PRO_HE: return "he";
|
||||||
|
case PRO_IT: return "it";
|
||||||
|
case PRO_SHE: return "she";
|
||||||
|
case PRO_THEY: return "they";
|
||||||
|
case PRO_XEY: return "xey";
|
||||||
|
case PRO_ZE_H: return "ze";
|
||||||
|
case PRO_ZE_Z: return "ze";
|
||||||
|
default: return "unknown";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
string(float pro) pronoun_possessive = {
|
||||||
|
switch(pro) {
|
||||||
|
case PRO_NONE: return "none";
|
||||||
|
case PRO_FAE: return "faer";
|
||||||
|
case PRO_HE: return "his";
|
||||||
|
case PRO_IT: return "its";
|
||||||
|
case PRO_SHE: return "her";
|
||||||
|
case PRO_THEY: return "their";
|
||||||
|
case PRO_XEY: return "xyr";
|
||||||
|
case PRO_ZE_H: return "hir";
|
||||||
|
case PRO_ZE_Z: return "zir";
|
||||||
|
default: return "unknown";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
void(float pro) change_pronoun = {
|
void(float pro) change_pronoun = {
|
||||||
pro = minmax(pro, PRO_NONE, PRO_MAX - 1);
|
pro = minmax(pro, PRO_NONE, PRO_MAX - 1);
|
||||||
|
|
||||||
|
@ -1159,34 +1162,6 @@ void(float pro) change_pronoun = {
|
||||||
pronoun_possessive(pro), "\n");
|
pronoun_possessive(pro), "\n");
|
||||||
};
|
};
|
||||||
|
|
||||||
void() spectate = {
|
|
||||||
switch(self.spectating) {
|
|
||||||
case SPECTATING_NOT:
|
|
||||||
bprint(self.netname, " has become a spectator\n");
|
|
||||||
become_spectator();
|
|
||||||
break;
|
|
||||||
case SPECTATING_SPECTATING:
|
|
||||||
bprint(self.netname, " has returned from spectating\n");
|
|
||||||
setspawnparms(self);
|
|
||||||
PutClientInServer();
|
|
||||||
break;
|
|
||||||
case SPECTATING_DEAD:
|
|
||||||
centerprint(self,
|
|
||||||
"You have no life force left\n"
|
|
||||||
"and cannot return to\n"
|
|
||||||
"the mortal world yet");
|
|
||||||
break;
|
|
||||||
case SPECTATING_INTERMISSION:
|
|
||||||
case SPECTATING_FINALE:
|
|
||||||
centerprint(self,
|
|
||||||
"You are incorporeal as you wait\n"
|
|
||||||
"for the next cycle\n"
|
|
||||||
"and cannot return to\n"
|
|
||||||
"the mortal world yet");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
void() ImpulseCommands = {
|
void() ImpulseCommands = {
|
||||||
if(self.impulse >= 1 && self.impulse <= 8) {
|
if(self.impulse >= 1 && self.impulse <= 8) {
|
||||||
W_ChangeWeapon(self.impulse);
|
W_ChangeWeapon(self.impulse);
|
||||||
|
@ -1198,7 +1173,6 @@ void() ImpulseCommands = {
|
||||||
case 10: W_CycleWeapon(); break;
|
case 10: W_CycleWeapon(); break;
|
||||||
case 11: cheat_quad(); break;
|
case 11: cheat_quad(); break;
|
||||||
case 12: W_CycleWeaponReverse(); break;
|
case 12: W_CycleWeaponReverse(); break;
|
||||||
case 13: spectate(); break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1571,7 +1545,7 @@ Player entered the suicide command
|
||||||
============
|
============
|
||||||
*/
|
*/
|
||||||
void() ClientKill = {
|
void() ClientKill = {
|
||||||
if(!self.spectating) {
|
if(self.view_ofs != VEC_ORIGIN) {
|
||||||
reset_death_vel();
|
reset_death_vel();
|
||||||
self.frags--; // extra penalty
|
self.frags--; // extra penalty
|
||||||
ClientObituary(self, self);
|
ClientObituary(self, self);
|
||||||
|
|
|
@ -52,15 +52,15 @@ entity msg_entity; // destination of single entity writes
|
||||||
// required prog functions
|
// required prog functions
|
||||||
void() main; // only for testing
|
void() main; // only for testing
|
||||||
|
|
||||||
void() StartFrame; // called every frame
|
void() StartFrame;
|
||||||
|
|
||||||
void() PlayerPreThink; // called each frame on each client before physics
|
void() PlayerPreThink;
|
||||||
void() PlayerPostThink; // called each frame on each client after physics
|
void() PlayerPostThink;
|
||||||
|
|
||||||
void() ClientKill; // called when the "kill" cmd is entered
|
void() ClientKill;
|
||||||
void() ClientConnect; // called upon client "connect"
|
void() ClientConnect;
|
||||||
void() PutClientInServer; // call after setting the parm1... parms
|
void() PutClientInServer; // call after setting the parm1... parms
|
||||||
void() ClientDisconnect; // called upon client "disconnect"
|
void() ClientDisconnect;
|
||||||
|
|
||||||
/* called when a client first connects to a server. sets parms so they can be
|
/* called when a client first connects to a server. sets parms so they can be
|
||||||
* saved off for restarts
|
* saved off for restarts
|
||||||
|
@ -271,17 +271,6 @@ void(entity e) setspawnparms = #78;
|
||||||
|
|
||||||
float(string s) checkextension = #99;
|
float(string s) checkextension = #99;
|
||||||
|
|
||||||
float(string str, string sub, float startpos) strstrofs = #221;
|
|
||||||
float(string str, float ofs) str2chr = #222;
|
|
||||||
string(float... c) chr2str = #223;
|
|
||||||
string(float ccase, float calpha, float cnum, string... s) strconv = #224;
|
|
||||||
string(float chars, string... s) strpad = #225;
|
|
||||||
string(string info, string key, string... value) infoadd = #226;
|
|
||||||
string(string info, string key) infoget = #227;
|
|
||||||
float(string s1, string s2, float len) strncmp = #228;
|
|
||||||
float(string s1, string s2) strcasecmp = #229;
|
|
||||||
float(string s1, string s2, float len) strncasecmp = #230;
|
|
||||||
|
|
||||||
// constants -----------------------------------------------------------------|
|
// constants -----------------------------------------------------------------|
|
||||||
|
|
||||||
const vector VEC_ORIGIN = '0 0 0';
|
const vector VEC_ORIGIN = '0 0 0';
|
||||||
|
@ -496,6 +485,22 @@ enum {
|
||||||
WORLD_BASE,
|
WORLD_BASE,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
PRO_NONE,
|
||||||
|
|
||||||
|
// alphabetically sorted, based on pronoun.is and what i've seen used
|
||||||
|
PRO_FAE,
|
||||||
|
PRO_HE,
|
||||||
|
PRO_IT,
|
||||||
|
PRO_SHE,
|
||||||
|
PRO_THEY,
|
||||||
|
PRO_XEY,
|
||||||
|
PRO_ZE_H,
|
||||||
|
PRO_ZE_Z,
|
||||||
|
|
||||||
|
PRO_MAX,
|
||||||
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
DOOR_START_OPEN = 1,
|
DOOR_START_OPEN = 1,
|
||||||
DOOR_DONT_LINK = 4,
|
DOOR_DONT_LINK = 4,
|
||||||
|
@ -569,23 +574,6 @@ enum {
|
||||||
SIGIL_4 = 8,
|
SIGIL_4 = 8,
|
||||||
};
|
};
|
||||||
|
|
||||||
// super co-op additions
|
|
||||||
enum {
|
|
||||||
PRO_NONE,
|
|
||||||
|
|
||||||
// alphabetically sorted, based on pronoun.is and what i've seen used
|
|
||||||
PRO_FAE,
|
|
||||||
PRO_HE,
|
|
||||||
PRO_IT,
|
|
||||||
PRO_SHE,
|
|
||||||
PRO_THEY,
|
|
||||||
PRO_XEY,
|
|
||||||
PRO_ZE_H,
|
|
||||||
PRO_ZE_Z,
|
|
||||||
|
|
||||||
PRO_MAX,
|
|
||||||
};
|
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
SF_CHEATS = 1,
|
SF_CHEATS = 1,
|
||||||
SF_LIVES_BEG = 1,
|
SF_LIVES_BEG = 1,
|
||||||
|
@ -593,14 +581,6 @@ enum {
|
||||||
SF_LIVES_MSK = 14,
|
SF_LIVES_MSK = 14,
|
||||||
SF_DIST_AMMO = 16,
|
SF_DIST_AMMO = 16,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
|
||||||
SPECTATING_NOT,
|
|
||||||
SPECTATING_DEAD,
|
|
||||||
SPECTATING_SPECTATING,
|
|
||||||
SPECTATING_INTERMISSION,
|
|
||||||
SPECTATING_FINALE,
|
|
||||||
};
|
|
||||||
#pragma noref 0
|
#pragma noref 0
|
||||||
|
|
||||||
// globals -------------------------------------------------------------------|
|
// globals -------------------------------------------------------------------|
|
||||||
|
@ -655,7 +635,6 @@ float player_respawned;
|
||||||
float all_players_are_dead;
|
float all_players_are_dead;
|
||||||
|
|
||||||
float ext_con_set;
|
float ext_con_set;
|
||||||
float ext_strings;
|
|
||||||
|
|
||||||
// fields --------------------------------------------------------------------|
|
// fields --------------------------------------------------------------------|
|
||||||
|
|
||||||
|
@ -774,7 +753,6 @@ float ext_strings;
|
||||||
// super co-op additions
|
// super co-op additions
|
||||||
.float pronoun;
|
.float pronoun;
|
||||||
.float lives;
|
.float lives;
|
||||||
.float spectating;
|
|
||||||
|
|
||||||
// functions -----------------------------------------------------------------|
|
// functions -----------------------------------------------------------------|
|
||||||
|
|
||||||
|
@ -943,6 +921,4 @@ void() func_train_find;
|
||||||
|
|
||||||
void(vector p) boss_missile;
|
void(vector p) boss_missile;
|
||||||
|
|
||||||
void() ImpulseCommands;
|
|
||||||
|
|
||||||
// EOF
|
// EOF
|
||||||
|
|
|
@ -125,7 +125,6 @@ void() finale_1 = {
|
||||||
pl.solid = SOLID_NOT;
|
pl.solid = SOLID_NOT;
|
||||||
pl.movetype = MOVETYPE_NONE;
|
pl.movetype = MOVETYPE_NONE;
|
||||||
pl.modelindex = 0;
|
pl.modelindex = 0;
|
||||||
pl.spectating = SPECTATING_FINALE;
|
|
||||||
setorigin(pl, pos.origin);
|
setorigin(pl, pos.origin);
|
||||||
pl = find(pl, classname, "player");
|
pl = find(pl, classname, "player");
|
||||||
}
|
}
|
||||||
|
|
|
@ -1051,6 +1051,12 @@ Called every frame so impulse events can be handled as well as possible
|
||||||
============
|
============
|
||||||
*/
|
*/
|
||||||
void() W_WeaponFrame = {
|
void() W_WeaponFrame = {
|
||||||
|
if(time < self.attack_finished) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ImpulseCommands();
|
||||||
|
|
||||||
// check for attack
|
// check for attack
|
||||||
if(self.button0) {
|
if(self.button0) {
|
||||||
SuperDamageSound();
|
SuperDamageSound();
|
||||||
|
|
|
@ -18,8 +18,9 @@ void() worldspawn = {
|
||||||
InitBodyQue();
|
InitBodyQue();
|
||||||
|
|
||||||
if(cvar("pr_checkextension")) {
|
if(cvar("pr_checkextension")) {
|
||||||
ext_con_set = checkextension("DP_CON_SET");
|
if(checkextension("DP_CON_SET")) {
|
||||||
ext_strings = checkextension("FTE_STRINGS");
|
ext_con_set = TRUE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// custom map attributes
|
// custom map attributes
|
||||||
|
|
2
todo
2
todo
|
@ -14,6 +14,7 @@ all done
|
||||||
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>")
|
||||||
|
|
||||||
|
@ -33,7 +34,6 @@ corpse pickups have keys
|
||||||
custom pronouns
|
custom pronouns
|
||||||
distributed ammo
|
distributed ammo
|
||||||
enforcers are broken
|
enforcers are broken
|
||||||
impulse command for spectating
|
|
||||||
lives counting
|
lives counting
|
||||||
no friendly fire
|
no friendly fire
|
||||||
restart map after 10 seconds when everyone is dead
|
restart map after 10 seconds when everyone is dead
|
||||||
|
|
Loading…
Reference in New Issue
Block a user