Compare commits

..

No commits in common. "8a8b6c6cc1ca2c0cb5ac3497a5154d1d917e1cbe" and "fa8592e377014dcc435b299d8d59f2564882d95b" have entirely different histories.

10 changed files with 379 additions and 490 deletions

View File

@ -1,14 +0,0 @@
alias pronoun_none "impulse 20"
alias pronoun_fae "impulse 21"
alias pronoun_he "impulse 22"
alias pronoun_it "impulse 23"
alias pronoun_she "impulse 24"
alias pronoun_they "impulse 25"
alias pronoun_xey "impulse 26"
alias pronoun_ze_hir "impulse 27"
alias pronoun_ze_zir "impulse 28"
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."
// EOF

View File

@ -1,6 +0,0 @@
exec default.cfg
exec default_sc.cfg
exec config.cfg
exec autoexec.cfg
stuffcmds
startdemos demo1 demo2 demo3

View File

@ -101,31 +101,44 @@ void() HuntTarget = {
}; };
void() SightSound = { void() SightSound = {
string snd; float rsnd;
switch(self.classname) { if(self.classname == "monster_ogre") {
case "monster_enforcer": sound(self, CHAN_VOICE, "ogre/ogwake.wav", 1, ATTN_NORM);
switch(rint(random() * 3)) { } else if(self.classname == "monster_knight") {
case 0: snd = "enforcer/sight3.wav"; break; sound(self, CHAN_VOICE, "knight/ksight.wav", 1, ATTN_NORM);
case 1: snd = "enforcer/sight1.wav"; break; } else if(self.classname == "monster_shambler") {
case 2: snd = "enforcer/sight2.wav"; break; sound(self, CHAN_VOICE, "shambler/ssight.wav", 1, ATTN_NORM);
case 3: snd = "enforcer/sight4.wav"; break; } else if(self.classname == "monster_demon1") {
} sound(self, CHAN_VOICE, "demon/sight2.wav", 1, ATTN_NORM);
break; } else if(self.classname == "monster_wizard") {
case "monster_army": snd = "soldier/sight1.wav"; break; sound(self, CHAN_VOICE, "wizard/wsight.wav", 1, ATTN_NORM);
case "monster_demon1": snd = "demon/sight2.wav"; break; } else if(self.classname == "monster_zombie") {
case "monster_dog": snd = "dog/dsight.wav"; break; sound(self, CHAN_VOICE, "zombie/z_idle.wav", 1, ATTN_NORM);
case "monster_hell_knight": snd = "hknight/sight1.wav"; break; } else if(self.classname == "monster_dog") {
case "monster_knight": snd = "knight/ksight.wav"; break; sound(self, CHAN_VOICE, "dog/dsight.wav", 1, ATTN_NORM);
case "monster_ogre": snd = "ogre/ogwake.wav"; break; } else if(self.classname == "monster_hell_knight") {
case "monster_shalrath": snd = "shalrath/sight.wav"; break; sound(self, CHAN_VOICE, "hknight/sight1.wav", 1, ATTN_NORM);
case "monster_shambler": snd = "shambler/ssight.wav"; break; } else if(self.classname == "monster_tarbaby") {
case "monster_tarbaby": snd = "blob/sight1.wav"; break; sound(self, CHAN_VOICE, "blob/sight1.wav", 1, ATTN_NORM);
case "monster_wizard": snd = "wizard/wsight.wav"; break; } else if(self.classname == "monster_vomit") {
case "monster_zombie": snd = "zombie/z_idle.wav"; break; sound(self, CHAN_VOICE, "vomitus/v_sight1.wav", 1, ATTN_NORM);
} else if(self.classname == "monster_enforcer") {
rsnd = rint(random() * 3);
if(rsnd == 1) {
sound(self, CHAN_VOICE, "enforcer/sight1.wav", 1, ATTN_NORM);
} else if(rsnd == 2) {
sound(self, CHAN_VOICE, "enforcer/sight2.wav", 1, ATTN_NORM);
} else if(rsnd == 0) {
sound(self, CHAN_VOICE, "enforcer/sight3.wav", 1, ATTN_NORM);
} else {
sound(self, CHAN_VOICE, "enforcer/sight4.wav", 1, ATTN_NORM);
}
} else if(self.classname == "monster_army") {
sound(self, CHAN_VOICE, "soldier/sight1.wav", 1, ATTN_NORM);
} else if(self.classname == "monster_shalrath") {
sound(self, CHAN_VOICE, "shalrath/sight.wav", 1, ATTN_NORM);
} }
sound(self, CHAN_VOICE, snd, 1, ATTN_NORM);
}; };
void() FoundTarget = { void() FoundTarget = {

View File

@ -44,7 +44,6 @@ void() SetChangeParms = {
parm7 = self.ammo_cells; parm7 = self.ammo_cells;
parm8 = self.weapon; parm8 = self.weapon;
parm9 = self.armortype * 100; parm9 = self.armortype * 100;
parm10 = self.pronoun;
}; };
void() SetNewParms = { void() SetNewParms = {
@ -75,7 +74,6 @@ void() DecodeLevelParms = {
self.ammo_cells = parm7; self.ammo_cells = parm7;
self.weapon = parm8; self.weapon = parm8;
self.armortype = parm9 * 0.01; self.armortype = parm9 * 0.01;
self.pronoun = parm10;
}; };
/* /*
@ -261,7 +259,8 @@ void() changelevel_touch = {
} }
if(coop || deathmatch) { if(coop || deathmatch) {
bprint(other.netname, " exited the level\n"); bprint(other.netname);
bprint(" exited the level\n");
} }
nextmap = self.map; nextmap = self.map;
@ -324,6 +323,22 @@ void() respawn = {
} }
}; };
/*
============
ClientKill
Player entered the suicide command
============
*/
void() ClientKill = {
bprint(self.netname);
bprint(" suicides\n");
set_suicide_frame();
self.modelindex = modelindex_player;
self.frags = self.frags - 2; // extra penalty
respawn();
};
float(vector v) CheckSpawnPoint = { float(vector v) CheckSpawnPoint = {
return FALSE; return FALSE;
}; };
@ -1006,7 +1021,8 @@ called when a player connects to a server
============ ============
*/ */
void() ClientConnect = { void() ClientConnect = {
bprint(self.netname, " entered the game\n"); bprint(self.netname);
bprint(" entered the game\n");
// a client connecting during an intermission can cause problems // a client connecting during an intermission can cause problems
if(intermission_running) { if(intermission_running) {
@ -1029,105 +1045,19 @@ void() ClientDisconnect = {
// since they aren't *really* leaving // 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);
bprint(" left the game with ");
bprint(ftos(self.frags));
bprint(" frags\n");
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 = {
if(deathmatch || coop) {
return;
}
self.ammo_rockets = 100;
self.ammo_nails = 200;
self.ammo_shells = 100;
self.ammo_cells = 200;
self.items |= IT_AXE |
IT_SHOTGUN |
IT_SUPER_SHOTGUN |
IT_NAILGUN |
IT_SUPER_NAILGUN |
IT_GRENADE_LAUNCHER |
IT_ROCKET_LAUNCHER |
IT_LIGHTNING |
IT_KEY1 | IT_KEY2;
self.weapon = IT_ROCKET_LAUNCHER;
W_SetCurrentAmmo();
};
void() cheat_quad = {
if(deathmatch || coop) {
return;
}
self.super_time = 1;
self.super_damage_finished = time + 30;
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 = {
pro = minmax(pro, PRO_NONE, PRO_MAX - 1);
self.pronoun = pro;
sprint(self, "pronoun set to ",
pronoun_subject(pro), "/",
pronoun_possessive(pro), "\n");
};
void() ImpulseCommands = {
if(self.impulse >= 1 && self.impulse <= 8) {
W_ChangeWeapon(self.impulse);
} else if(self.impulse >= 20 && self.impulse < 40) {
change_pronoun(self.impulse - 20);
} else {
switch(self.impulse) {
case 9: cheat(); break;
case 10: W_CycleWeapon(); break;
case 11: cheat_quad(); break;
case 12: W_CycleWeaponReverse(); break;
}
}
self.impulse = 0;
};
float(entity targ, entity attacker) obit_teledeath = { float(entity targ, entity attacker) obit_teledeath = {
attacker.owner.frags = attacker.owner.frags + 1; attacker.owner.frags = attacker.owner.frags + 1;
bprint(" was telefragged by ", attacker.owner.netname, "\n"); bprint(" was telefragged by ");
bprint(attacker.owner.netname);
bprint("\n");
return TRUE; return TRUE;
}; };
@ -1141,15 +1071,12 @@ float(entity targ, entity attacker) obit_suicide = {
targ.frags = targ.frags - 1; targ.frags = targ.frags - 1;
if(targ.weapon == IT_LIGHTNING && targ.waterlevel > 1) { if(targ.weapon == IT_LIGHTNING && targ.waterlevel > 1) {
bprint(" discharges into the water\n"); bprint(" discharges into the water.\n");
} else if(targ.weapon == IT_GRENADE_LAUNCHER) { } else if(targ.weapon == IT_GRENADE_LAUNCHER) {
bprint(" tries to put the pin back in\n"); bprint(" tries to put the pin back in\n");
} else { } else {
bprint(" becomes bored with "); // FIXME
if(targ.pronoun != PRO_NONE) { bprint(" becomes bored with life\n");
bprint(pronoun_possessive(targ.pronoun), " ");
}
bprint("life\n");
} }
return TRUE; return TRUE;
@ -1164,13 +1091,8 @@ float(entity targ, entity attacker) obit_teamkill = {
if(rnum < 0.25) { if(rnum < 0.25) {
bprint(" mows down a teammate\n"); bprint(" mows down a teammate\n");
} else if(rnum < 0.50) { } else if(rnum < 0.50) {
if(attacker.pronoun == PRO_NONE) { // FIXME
bprint(" needs new glasses\n"); bprint(" checks his glasses\n");
} else {
bprint(" checks ",
pronoun_possessive(attacker.pronoun),
" glasses\n");
}
} else if(rnum < 0.75) { } else if(rnum < 0.75) {
bprint(" gets a frag for the other team\n"); bprint(" gets a frag for the other team\n");
} else { } else {
@ -1227,12 +1149,16 @@ float(entity targ, entity attacker) obit_pkill = {
if(attacker.waterlevel > 1) { if(attacker.waterlevel > 1) {
deathstring2 = "'s discharge\n"; deathstring2 = "'s discharge\n";
} else { } else {
deathstring2 = "'s hot lightning injection\n"; // FIXME
deathstring2 = "'s shaft\n";
} }
break; break;
} }
bprint(targ.netname, deathstring, attacker.netname, deathstring2); bprint(targ.netname);
bprint(deathstring);
bprint(attacker.netname);
bprint(deathstring2);
return TRUE; return TRUE;
}; };
@ -1240,110 +1166,35 @@ float(entity targ, entity attacker) obit_pkill = {
float(entity targ, entity attacker) obit_monster = { float(entity targ, entity attacker) obit_monster = {
switch(attacker.classname) { switch(attacker.classname) {
case "monster_army": case "monster_army":
if(random() < 0.5) { bprint(" was shot by a Grunt\n"); break;
bprint(" was shot by a Grunt\n");
} else {
bprint(" was blasted by a Grunt\n");
}
break;
case "monster_demon1": case "monster_demon1":
if(targ.pronoun == PRO_NONE) { bprint(" was eviscerated by a Fiend\n"); break;
bprint(" had a Fiend lobotomy\n");
} else {
bprint(" had ",
pronoun_possessive(targ.pronoun),
" head ripped off by a Fiend\n");
}
break;
case "monster_dog": case "monster_dog":
if(random() < 0.5) { bprint(" was mauled by a Rottweiler\n"); break;
bprint(" was eaten by a Rottweiler\n");
} else {
bprint(" was mauled by a Rottweiler\n");
}
break;
case "monster_enforcer": case "monster_enforcer":
if(random() < 0.5) { bprint(" was blasted by an Enforcer\n"); break;
bprint(" was lazed by an Enforcer\n");
} else {
bprint(" stood in an Enforcer's way\n");
}
break;
case "monster_fish": case "monster_fish":
if(targ.pronoun == PRO_NONE || random() < 0.5) { bprint(" was fed to the Rotfish\n"); break;
bprint(" was fed to a Rotfish\n");
} else {
bprint(" enjoys ",
pronoun_possessive(targ.pronoun),
" new life under the sea\n");
}
break;
case "monster_hell_knight": case "monster_hell_knight":
if(random() < 0.5) { bprint(" was slain by a Death Knight\n"); break;
bprint(" was killed to death by a Death Knight\n");
} else {
bprint(" was slain by a Death Knight\n");
}
break;
case "monster_knight": case "monster_knight":
if(random() < 0.1) { bprint(" was slashed by a Knight\n"); break;
bprint(" was enamored by the Knight's intricate animations\n");
} else {
bprint(" was slashed by a Knight\n");
}
break;
case "monster_ogre": case "monster_ogre":
if(random() < 0.05) { bprint(" was destroyed by an Ogre\n"); break;
bprint(" knows that it's all Ogre now\n");
} else {
bprint(" was destroyed by an Ogre\n");
}
break;
case "monster_oldone": case "monster_oldone":
if(targ.pronoun == PRO_NONE) { bprint(" became one with Shub-Niggurath\n"); break;
bprint(" became one with Shub-Niggurath\n");
} else {
bprint(" accepted ", pronoun_possessive(targ.pronoun), " fate\n");
}
break;
case "monster_shalrath": case "monster_shalrath":
if(random() < 0.5) { bprint(" was exploded by a Vore\n"); break;
bprint(" was merged with a Shalrath\n");
} else {
bprint(" couldn't evade the Vore\n");
}
break;
case "monster_shambler": case "monster_shambler":
if(random() < 0.5) { bprint(" was smashed by a Shambler\n"); break;
bprint(" was Shambled off this mortal coil\n");
} else {
bprint(" was fried by a Shambler\n");
}
break;
case "monster_tarbaby": case "monster_tarbaby":
if(random() < 0.5) { bprint(" was slimed by a Spawn\n"); break;
bprint(" was consumed by the Spawn\n"); case "monster_vomit":
} else { bprint(" was vomited on by a Vomitus\n"); break;
bprint(" found ",
pronoun_possessive(targ.pronoun),
" place with the Spawn\n");
}
break;
case "monster_wizard": case "monster_wizard":
if(random() < 0.5) { bprint(" was scragged by a Scrag\n"); break;
bprint(" wasn't ready for the Wizard\n");
} else {
bprint(" was scragged by a Scrag\n");
}
break;
case "monster_zombie": case "monster_zombie":
if(random() < 0.05) { bprint(" joins the Zombies\n"); break;
bprint(". You are the demons\nAnd then ",
targ.netname, " was a zombie.");
} else {
bprint(" joins the Zombies\n");
}
break;
default: default:
return FALSE; return FALSE;
} }
@ -1354,11 +1205,8 @@ float(entity targ, entity attacker) obit_monster = {
float(entity targ, entity attacker) obit_falling = { float(entity targ, entity attacker) obit_falling = {
if(targ.deathtype == "falling") { if(targ.deathtype == "falling") {
targ.deathtype = ""; targ.deathtype = "";
if(targ.pronoun == PRO_NONE) { // FIXME
bprint(" hit the ground too hard\n"); bprint(" fell to his death\n");
} else {
bprint(" fell to ", pronoun_possessive(targ.pronoun), " death\n");
}
return TRUE; return TRUE;
} else { } else {
return FALSE; return FALSE;
@ -1367,24 +1215,22 @@ float(entity targ, entity attacker) obit_falling = {
float(entity targ, entity attacker) obit_water = { float(entity targ, entity attacker) obit_water = {
switch(targ.watertype) { switch(targ.watertype) {
case CONTENT_SKY: case -3:
bprint(" tried to buy the sky and sell the sky\n");
break;
case CONTENT_WATER:
if(random() < 0.5) { if(random() < 0.5) {
bprint(" sleeps with the fishes\n"); bprint(" sleeps with the fishes\n");
} else { } else {
bprint(" was quite thirsty\n"); // FIXME
bprint(" sucks it down\n");
} }
break; break;
case CONTENT_SLIME: case -4:
if(random() < 0.5) { if(random() < 0.5) {
bprint(" gulped a load of slime\n"); bprint(" gulped a load of slime\n");
} else { } else {
bprint(" can't exist on slime alone\n"); bprint(" can't exist on slime alone\n");
} }
break; break;
case CONTENT_LAVA: case -5:
if(targ.health < -15) { if(targ.health < -15) {
bprint(" burst into flames\n"); bprint(" burst into flames\n");
} else if(random() < 0.5) { } else if(random() < 0.5) {
@ -1410,14 +1256,7 @@ float(entity targ, entity attacker) obit_trap = {
case "fireball": case "fireball":
bprint(" ate a lavaball\n"); break; bprint(" ate a lavaball\n"); break;
case "trigger_changelevel": case "trigger_changelevel":
if(targ.pronoun == PRO_NONE) { bprint(" tried to leave\n"); break;
bprint(" tried to leave\n");
} else {
bprint(" tried to leave, but ",
pronoun_subject(targ.pronoun),
" failed\n");
}
break;
default: default:
return FALSE; return FALSE;
} }
@ -1482,18 +1321,3 @@ void(entity targ, entity attacker) ClientObituary = {
bprint(" died\n"); bprint(" died\n");
} }
}; };
/*
============
ClientKill
Player entered the suicide command
============
*/
void() ClientKill = {
self.frags = self.frags - 1; // extra penalty
ClientObituary(self, self);
set_suicide_frame();
self.modelindex = modelindex_player;
respawn();
};

View File

@ -4,24 +4,17 @@ float() crandom = {
return 2 * (random() - 0.5); return 2 * (random() - 0.5);
}; };
float(float x, float y) max = { /*
return x < y ? y : x; =============
}; range
float(float x, float y) min = { returns the range catagorization of an entity reletive to self
return x < y ? x : y; 0 melee range, will become hostile even if back is turned
}; 1 visibility and infront, or visibility and show hostile
2 infront and show hostile
float(float x, float mi, float ma) minmax = { 3 only triggered by damage
return min(max(x, mi), ma); =============
}; */
/* returns the range catagorization of an entity reletive to self
* 0 melee range, will become hostile even if back is turned
* 1 visibility and infront, or visibility and show hostile
* 2 infront and show hostile
* 3 only triggered by damage
*/
float(entity targ) range = { float(entity targ) range = {
vector spot1, spot2; vector spot1, spot2;
float r; float r;
@ -41,7 +34,13 @@ float(entity targ) range = {
return RANGE_FAR; return RANGE_FAR;
}; };
// returns 1 if the entity is visible to self, even if not infront() /*
=============
visible
returns 1 if the entity is visible to self, even if not infront()
=============
*/
float(entity targ) visible = { float(entity targ) visible = {
vector spot1, spot2; vector spot1, spot2;
@ -59,7 +58,13 @@ float(entity targ) visible = {
return FALSE; return FALSE;
}; };
// returns 1 if the entity is in front(in sight) of self /*
=============
infront
returns 1 if the entity is in front(in sight) of self
=============
*/
float(entity targ) infront = { float(entity targ) infront = {
vector vec; vector vec;
float dot; float dot;

View File

@ -218,7 +218,7 @@ void(entity client, string s) stuffcmd = #21;
entity(vector org, float rad) findradius = #22; entity(vector org, float rad) findradius = #22;
void(string... s) bprint = #23; void(string... s) bprint = #23;
void(entity client, string... s) sprint = #24; void(entity client, string... s) sprint = #24;
void(string... s) dprint = #25; void(string s) dprint = #25;
string(float f) ftos = #26; string(float f) ftos = #26;
string(vector v) vtos = #27; string(vector v) vtos = #27;
void() coredump = #28; // prints all edicts void() coredump = #28; // prints all edicts
@ -473,22 +473,6 @@ enum {
WORLD_METAL, WORLD_METAL,
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,
};
#pragma noref 0 #pragma noref 0
// globals -------------------------------------------------------------------| // globals -------------------------------------------------------------------|
@ -648,9 +632,6 @@ float sight_entity_time;
.float healamount, healtype; .float healamount, healtype;
// super co-op additions
.float pronoun;
// functions -----------------------------------------------------------------| // functions -----------------------------------------------------------------|
// subs.qc // subs.qc
@ -675,9 +656,6 @@ void(entity targ, entity inflictor, entity attacker, float damage) T_Damage;
void(entity targ, entity inflictor, entity attacker, float damage) T_Damage; void(entity targ, entity inflictor, entity attacker, float damage) T_Damage;
// weapons.qc // weapons.qc
void(float wep) W_ChangeWeapon;
void() W_CycleWeaponReverse;
void() W_CycleWeapon;
void() W_FireAxe; void() W_FireAxe;
void() W_FireShotgun; void() W_FireShotgun;
void() W_FireSuperShotgun; void() W_FireSuperShotgun;
@ -690,10 +668,6 @@ float() W_BestWeapon;
void() W_SetCurrentAmmo; void() W_SetCurrentAmmo;
void() W_WeaponFrame; void() W_WeaponFrame;
// items.qc
string() Key1Name;
string() Key2Name;
void() army_fire; void() army_fire;
float() DemonCheckAttack; float() DemonCheckAttack;

View File

@ -52,7 +52,9 @@ void() SUB_regen = {
prints a warning message when spawned prints a warning message when spawned
*/ */
void() noclass = { void() noclass = {
dprint("noclass spawned at", vtos(self.origin), "\n"); dprint("noclass spawned at");
dprint(vtos(self.origin));
dprint("\n");
remove(self); remove(self);
}; };
@ -76,7 +78,9 @@ void() PlaceItem = {
self.origin_z = self.origin_z + 6; self.origin_z = self.origin_z + 6;
oldz = self.origin_z; oldz = self.origin_z;
if(!droptofloor()) { if(!droptofloor()) {
dprint("Bonus item fell out of level at ", vtos(self.origin), "\n"); dprint("Bonus item fell out of level at ");
dprint(vtos(self.origin));
dprint("\n");
remove(self); remove(self);
return; return;
} }
@ -170,6 +174,7 @@ void() item_health = {
void() health_touch = { void() health_touch = {
float amount; float amount;
string s;
if(other.classname != "player") { if(other.classname != "player") {
return; return;
@ -188,7 +193,10 @@ void() health_touch = {
} }
} }
sprint(other, "You receive ", ftos(self.healamount), " health\n"); sprint(other, "You receive ");
s = ftos(self.healamount);
sprint(other, s);
sprint(other, " health\n");
// health touch sound // health touch sound
sound(other, CHAN_ITEM, self.noise, 1, ATTN_NORM); sound(other, CHAN_ITEM, self.noise, 1, ATTN_NORM);
@ -466,7 +474,9 @@ void() weapon_touch = {
objerror("weapon_touch: unknown classname"); objerror("weapon_touch: unknown classname");
} }
sprint(other, "You got the ", self.netname, "\n"); sprint(other, "You got the ");
sprint(other, self.netname);
sprint(other, "\n");
// weapon touch sound // weapon touch sound
sound(other, CHAN_ITEM, "weapons/pkup.wav", 1, ATTN_NORM); sound(other, CHAN_ITEM, "weapons/pkup.wav", 1, ATTN_NORM);
stuffcmd(other, "bf\n"); stuffcmd(other, "bf\n");
@ -647,7 +657,9 @@ void() ammo_touch = {
bound_other_ammo(); bound_other_ammo();
sprint(other, "You got the ", self.netname, "\n"); sprint(other, "You got the ");
sprint(other, self.netname);
sprint(other, "\n");
// ammo touch sound // ammo touch sound
sound(other, CHAN_ITEM, "weapons/lock4.wav", 1, ATTN_NORM); sound(other, CHAN_ITEM, "weapons/lock4.wav", 1, ATTN_NORM);
stuffcmd(other, "bf\n"); stuffcmd(other, "bf\n");
@ -855,7 +867,9 @@ void() key_touch = {
return; return;
} }
sprint(other, "You got the ", self.netname, "\n"); sprint(other, "You got the ");
sprint(other, self.netname);
sprint(other, "\n");
sound(other, CHAN_ITEM, self.noise, 1, ATTN_NORM); sound(other, CHAN_ITEM, self.noise, 1, ATTN_NORM);
stuffcmd(other, "bf\n"); stuffcmd(other, "bf\n");
@ -1044,7 +1058,9 @@ void() powerup_touch = {
return; return;
} }
sprint(other, "You got the ", self.netname, "\n"); sprint(other, "You got the ");
sprint(other, self.netname);
sprint(other, "\n");
if(deathmatch) { if(deathmatch) {
self.mdl = self.model; self.mdl = self.model;
@ -1174,6 +1190,7 @@ PLAYER BACKPACKS
*/ */
void() BackpackTouch = { void() BackpackTouch = {
string s;
float best, old, new; float best, old, new;
entity stemp; entity stemp;
float acount; float acount;
@ -1187,7 +1204,8 @@ void() BackpackTouch = {
if(self.weapon && (other.items & self.weapon) == 0) { if(self.weapon && (other.items & self.weapon) == 0) {
acount = 1; acount = 1;
sprint(other, "the ", self.netname); sprint(other, "the ");
sprint(other, self.netname);
} }
// if the player was using their best weapon, change up to the new one if better // if the player was using their best weapon, change up to the new one if better
@ -1216,28 +1234,36 @@ void() BackpackTouch = {
sprint(other, ", "); sprint(other, ", ");
} }
acount = 1; acount = 1;
sprint(other, ftos(self.ammo_shells), " shells"); s = ftos(self.ammo_shells);
sprint(other, s);
sprint(other, " shells");
} }
if(self.ammo_nails) { if(self.ammo_nails) {
if(acount) { if(acount) {
sprint(other, ", "); sprint(other, ", ");
} }
acount = 1; acount = 1;
sprint(other, ftos(self.ammo_nails), " nails"); s = ftos(self.ammo_nails);
sprint(other, s);
sprint(other, " nails");
} }
if(self.ammo_rockets) { if(self.ammo_rockets) {
if(acount) { if(acount) {
sprint(other, ", "); sprint(other, ", ");
} }
acount = 1; acount = 1;
sprint(other, ftos(self.ammo_rockets), " rockets"); s = ftos(self.ammo_rockets);
sprint(other, s);
sprint(other, " rockets");
} }
if(self.ammo_cells) { if(self.ammo_cells) {
if(acount) { if(acount) {
sprint(other, ", "); sprint(other, ", ");
} }
acount = 1; acount = 1;
sprint(other, ftos(self.ammo_cells), " cells"); s = ftos(self.ammo_cells);
sprint(other, s);
sprint(other, " cells");
} }
if(self.items & IT_KEY1) { if(self.items & IT_KEY1) {
if(acount) { if(acount) {

View File

@ -226,7 +226,9 @@ void() misc_explobox = {
oldz = self.origin_z; oldz = self.origin_z;
droptofloor(); droptofloor();
if(oldz - self.origin_z > 250) { if(oldz - self.origin_z > 250) {
dprint("item fell out of level at ", vtos(self.origin), "\n"); dprint("item fell out of level at ");
dprint(vtos(self.origin));
dprint("\n");
remove(self); remove(self);
} }
}; };
@ -253,7 +255,9 @@ void() misc_explobox2 = {
oldz = self.origin_z; oldz = self.origin_z;
droptofloor(); droptofloor();
if(oldz - self.origin_z > 250) { if(oldz - self.origin_z > 250) {
dprint("item fell out of level at ", vtos(self.origin), "\n"); dprint("item fell out of level at ");
dprint(vtos(self.origin));
dprint("\n");
remove(self); remove(self);
} }
}; };

View File

@ -80,7 +80,9 @@ void() walkmonster_start_go = {
droptofloor(); droptofloor();
if(!walkmove(0, 0)) { if(!walkmove(0, 0)) {
dprint("walkmonster in wall at: ", vtos(self.origin), "\n"); dprint("walkmonster in wall at: ");
dprint(vtos(self.origin));
dprint("\n");
} }
self.takedamage = DAMAGE_AIM; self.takedamage = DAMAGE_AIM;
@ -98,7 +100,9 @@ void() walkmonster_start_go = {
self.goalentity = self.movetarget = find(world, targetname, self.target); self.goalentity = self.movetarget = find(world, targetname, self.target);
self.ideal_yaw = vectoyaw(self.goalentity.origin - self.origin); self.ideal_yaw = vectoyaw(self.goalentity.origin - self.origin);
if(!self.movetarget) { if(!self.movetarget) {
dprint("Monster can't find target at ", vtos(self.origin), "\n"); dprint("Monster can't find target at ");
dprint(vtos(self.origin));
dprint("\n");
} }
// this used to be an objerror // this used to be an objerror
if(self.movetarget.classname == "path_corner") { if(self.movetarget.classname == "path_corner") {
@ -139,13 +143,17 @@ void() flymonster_start_go = {
self.flags = self.flags | FL_MONSTER; self.flags = self.flags | FL_MONSTER;
if(!walkmove(0, 0)) { if(!walkmove(0, 0)) {
dprint("flymonster in wall at: ", vtos(self.origin), "\n"); dprint("flymonster in wall at: ");
dprint(vtos(self.origin));
dprint("\n");
} }
if(self.target) { if(self.target) {
self.goalentity = self.movetarget = find(world, targetname, self.target); self.goalentity = self.movetarget = find(world, targetname, self.target);
if(!self.movetarget) { if(!self.movetarget) {
dprint("Monster can't find target at ", vtos(self.origin), "\n"); dprint("Monster can't find target at ");
dprint(vtos(self.origin));
dprint("\n");
} }
// this used to be an objerror // this used to be an objerror
if(self.movetarget.classname == "path_corner") { if(self.movetarget.classname == "path_corner") {
@ -189,7 +197,9 @@ void() swimmonster_start_go = {
if(self.target) { if(self.target) {
self.goalentity = self.movetarget = find(world, targetname, self.target); self.goalentity = self.movetarget = find(world, targetname, self.target);
if(!self.movetarget) { if(!self.movetarget) {
dprint("Monster can't find target at ", vtos(self.origin), "\n"); dprint("Monster can't find target at ");
dprint(vtos(self.origin));
dprint("\n");
} }
// this used to be an objerror // this used to be an objerror
self.ideal_yaw = vectoyaw(self.goalentity.origin - self.origin); self.ideal_yaw = vectoyaw(self.goalentity.origin - self.origin);

View File

@ -830,60 +830,53 @@ W_ChangeWeapon
============ ============
*/ */
void(float wep) W_ChangeWeapon = { void() W_ChangeWeapon = {
float it, am, fl; float it, am, fl;
it = self.items; it = self.items;
am = 0; am = 0;
switch(wep) { if(self.impulse == 1) {
case 1: fl = IT_AXE;
fl = IT_AXE; } else if(self.impulse == 2) {
break; fl = IT_SHOTGUN;
case 2: if(self.ammo_shells < 1) {
fl = IT_SHOTGUN; am = 1;
if(self.ammo_shells < 1) { }
am = 1; } else if(self.impulse == 3) {
} fl = IT_SUPER_SHOTGUN;
break; if(self.ammo_shells < 2) {
case 3: am = 1;
fl = IT_SUPER_SHOTGUN; }
if(self.ammo_shells < 2) { } else if(self.impulse == 4) {
am = 1; fl = IT_NAILGUN;
} if(self.ammo_nails < 1) {
break; am = 1;
case 4: }
fl = IT_NAILGUN; } else if(self.impulse == 5) {
if(self.ammo_nails < 1) { fl = IT_SUPER_NAILGUN;
am = 1; if(self.ammo_nails < 2) {
} am = 1;
break; }
case 5: } else if(self.impulse == 6) {
fl = IT_SUPER_NAILGUN; fl = IT_GRENADE_LAUNCHER;
if(self.ammo_nails < 2) { if(self.ammo_rockets < 1) {
am = 1; am = 1;
} }
break; } else if(self.impulse == 7) {
case 6: fl = IT_ROCKET_LAUNCHER;
fl = IT_GRENADE_LAUNCHER; if(self.ammo_rockets < 1) {
if(self.ammo_rockets < 1) { am = 1;
am = 1; }
} } else if(self.impulse == 8) {
break; fl = IT_LIGHTNING;
case 7: if(self.ammo_cells < 1) {
fl = IT_ROCKET_LAUNCHER; am = 1;
if(self.ammo_rockets < 1) { }
am = 1;
}
break;
case 8:
fl = IT_LIGHTNING;
if(self.ammo_cells < 1) {
am = 1;
}
break;
} }
self.impulse = 0;
if(!(self.items & fl)) { if(!(self.items & fl)) {
// don't have the weapon or the ammo // don't have the weapon or the ammo
sprint(self, "no weapon.\n"); sprint(self, "no weapon.\n");
@ -896,71 +889,96 @@ void(float wep) W_ChangeWeapon = {
return; return;
} }
//
// set weapon, set ammo // set weapon, set ammo
//
self.weapon = fl; self.weapon = fl;
W_SetCurrentAmmo(); W_SetCurrentAmmo();
}; };
/* /*
============ ============
W_CycleWeapon CheatCommand
============
*/
void() CheatCommand = {
if(deathmatch || coop) {
return;
}
self.ammo_rockets = 100;
self.ammo_nails = 200;
self.ammo_shells = 100;
self.items = self.items |
IT_AXE |
IT_SHOTGUN |
IT_SUPER_SHOTGUN |
IT_NAILGUN |
IT_SUPER_NAILGUN |
IT_GRENADE_LAUNCHER |
IT_ROCKET_LAUNCHER |
IT_KEY1 | IT_KEY2;
self.ammo_cells = 200;
self.items = self.items | IT_LIGHTNING;
self.weapon = IT_ROCKET_LAUNCHER;
self.impulse = 0;
W_SetCurrentAmmo();
};
/*
============
CycleWeaponCommand
Go to the next weapon with ammo Go to the next weapon with ammo
============ ============
*/ */
void() W_CycleWeapon = { void() CycleWeaponCommand = {
float it, am; float it, am;
it = self.items; it = self.items;
self.impulse = 0;
for(;;) { for(;;) {
am = 0; am = 0;
switch(self.weapon) { if(self.weapon == IT_LIGHTNING) {
case IT_LIGHTNING: self.weapon = IT_AXE;
self.weapon = IT_AXE; } else if(self.weapon == IT_AXE) {
break; self.weapon = IT_SHOTGUN;
case IT_AXE: if(self.ammo_shells < 1) {
self.weapon = IT_SHOTGUN; am = 1;
if(self.ammo_shells < 1) { }
am = 1; } else if(self.weapon == IT_SHOTGUN) {
} self.weapon = IT_SUPER_SHOTGUN;
break; if(self.ammo_shells < 2) {
case IT_SHOTGUN: am = 1;
self.weapon = IT_SUPER_SHOTGUN; }
if(self.ammo_shells < 2) { } else if(self.weapon == IT_SUPER_SHOTGUN) {
am = 1; self.weapon = IT_NAILGUN;
} if(self.ammo_nails < 1) {
break; am = 1;
case IT_SUPER_SHOTGUN: }
self.weapon = IT_NAILGUN; } else if(self.weapon == IT_NAILGUN) {
if(self.ammo_nails < 1) { self.weapon = IT_SUPER_NAILGUN;
am = 1; if(self.ammo_nails < 2) {
} am = 1;
break; }
case IT_NAILGUN: } else if(self.weapon == IT_SUPER_NAILGUN) {
self.weapon = IT_SUPER_NAILGUN; self.weapon = IT_GRENADE_LAUNCHER;
if(self.ammo_nails < 2) { if(self.ammo_rockets < 1) {
am = 1; am = 1;
} }
break; } else if(self.weapon == IT_GRENADE_LAUNCHER) {
case IT_SUPER_NAILGUN: self.weapon = IT_ROCKET_LAUNCHER;
self.weapon = IT_GRENADE_LAUNCHER; if(self.ammo_rockets < 1) {
if(self.ammo_rockets < 1) { am = 1;
am = 1; }
} } else if(self.weapon == IT_ROCKET_LAUNCHER) {
break; self.weapon = IT_LIGHTNING;
case IT_GRENADE_LAUNCHER: if(self.ammo_cells < 1) {
self.weapon = IT_ROCKET_LAUNCHER; am = 1;
if(self.ammo_rockets < 1) { }
am = 1;
}
break;
case IT_ROCKET_LAUNCHER:
self.weapon = IT_LIGHTNING;
if(self.ammo_cells < 1) {
am = 1;
}
break;
} }
if((it & self.weapon) && am == 0) { if((it & self.weapon) && am == 0) {
W_SetCurrentAmmo(); W_SetCurrentAmmo();
@ -972,64 +990,56 @@ void() W_CycleWeapon = {
/* /*
============ ============
W_CycleWeaponReverse CycleWeaponReverseCommand
Go to the prev weapon with ammo Go to the prev weapon with ammo
============ ============
*/ */
void() W_CycleWeaponReverse = { void() CycleWeaponReverseCommand = {
float it, am; float it, am;
it = self.items; it = self.items;
self.impulse = 0;
for(;;) { while(1) {
am = 0; am = 0;
switch(self.weapon) { if(self.weapon == IT_LIGHTNING) {
case IT_LIGHTNING: self.weapon = IT_ROCKET_LAUNCHER;
self.weapon = IT_ROCKET_LAUNCHER; if(self.ammo_rockets < 1) {
if(self.ammo_rockets < 1) { am = 1;
am = 1; }
} } else if(self.weapon == IT_ROCKET_LAUNCHER) {
break; self.weapon = IT_GRENADE_LAUNCHER;
case IT_ROCKET_LAUNCHER: if(self.ammo_rockets < 1) {
self.weapon = IT_GRENADE_LAUNCHER; am = 1;
if(self.ammo_rockets < 1) { }
am = 1; } else if(self.weapon == IT_GRENADE_LAUNCHER) {
} self.weapon = IT_SUPER_NAILGUN;
break; if(self.ammo_nails < 2) {
case IT_GRENADE_LAUNCHER: am = 1;
self.weapon = IT_SUPER_NAILGUN; }
if(self.ammo_nails < 2) { } else if(self.weapon == IT_SUPER_NAILGUN) {
am = 1; self.weapon = IT_NAILGUN;
} if(self.ammo_nails < 1) {
break; am = 1;
case IT_SUPER_NAILGUN: }
self.weapon = IT_NAILGUN; } else if(self.weapon == IT_NAILGUN) {
if(self.ammo_nails < 1) { self.weapon = IT_SUPER_SHOTGUN;
am = 1; if(self.ammo_shells < 2) {
} am = 1;
break; }
case IT_NAILGUN: } else if(self.weapon == IT_SUPER_SHOTGUN) {
self.weapon = IT_SUPER_SHOTGUN; self.weapon = IT_SHOTGUN;
if(self.ammo_shells < 2) { if(self.ammo_shells < 1) {
am = 1; am = 1;
} }
break; } else if(self.weapon == IT_SHOTGUN) {
case IT_SUPER_SHOTGUN: self.weapon = IT_AXE;
self.weapon = IT_SHOTGUN; } else if(self.weapon == IT_AXE) {
if(self.ammo_shells < 1) { self.weapon = IT_LIGHTNING;
am = 1; if(self.ammo_cells < 1) {
} am = 1;
break; }
case IT_SHOTGUN:
self.weapon = IT_AXE;
break;
case IT_AXE:
self.weapon = IT_LIGHTNING;
if(self.ammo_cells < 1) {
am = 1;
}
break;
} }
if((it & self.weapon) && am == 0) { if((it & self.weapon) && am == 0) {
W_SetCurrentAmmo(); W_SetCurrentAmmo();
@ -1039,6 +1049,49 @@ void() W_CycleWeaponReverse = {
}; };
/*
============
ServerflagsCommand
Just for development
============
*/
void() ServerflagsCommand = {
serverflags = serverflags * 2 + 1;
};
void() QuadCheat = {
if(deathmatch || coop) {
return;
}
self.super_time = 1;
self.super_damage_finished = time + 30;
self.items = self.items | IT_QUAD;
dprint("quad cheat\n");
};
/*
============
ImpulseCommands
============
*/
void() ImpulseCommands = {
if(self.impulse >= 1 && self.impulse <= 8) {
W_ChangeWeapon();
}
switch(self.impulse) {
case 9: CheatCommand(); break;
case 10: CycleWeaponCommand(); break;
case 11: ServerflagsCommand(); break;
case 12: CycleWeaponReverseCommand(); break;
case 255: QuadCheat(); break;
}
self.impulse = 0;
};
/* /*
============ ============
W_WeaponFrame W_WeaponFrame