mirror of
https://git.code.sf.net/p/quake/prozac-qfcc
synced 2024-11-23 12:42:39 +00:00
Engineer tweaks:
1) added checkmove forward so it's easier to build against walls 2) Can't build sentries on top of forcefields anymore (they get bounced off) 3) fieldgens are now one unit taller than their fields, so you CAN build on the gen 4) forcefields bounce everything (including buildings) away now. 5) added #ifdef DISALLOW_BLOCKED_TELE around tele block checks. didn't get the point Debug tweaks: 1) added #ifdef DEBUG, which enables RPrint(), dremove(), and printtrace(), as well as the warlock cheat and origin reporting. 2) replaced EVERY dprint with RPrint. 3) changed makefile so that all = no DEBUG and no .sym
This commit is contained in:
parent
9be57e3cd1
commit
db4e96e70a
12 changed files with 144 additions and 104 deletions
11
TODO
11
TODO
|
@ -4,12 +4,13 @@ X = done
|
|||
M = more testing
|
||||
I = in progress
|
||||
W = waiting on other work
|
||||
- = not pertinent anymore
|
||||
|
||||
o Fix assault cannon death while firing = can't fire again until re-AC bug.
|
||||
o Can't switch from LG with 0 cells to airfist.
|
||||
X Can't switch from LG with 0 cells to airfist.
|
||||
X Scout while customizing bug.
|
||||
o teleporting grunty bug
|
||||
o Fix sensor stick bug! VERY abusable and annoying.
|
||||
X Fix sensor stick bug! VERY abusable and annoying.
|
||||
o Fix getting stuck on nail grenades while they rise.
|
||||
|
||||
M make changing skin/color force the proper color instead of kicking
|
||||
|
@ -23,10 +24,10 @@ W = waiting on other work
|
|||
X add a define to disable abusive admin commands (eg stuffcmd)
|
||||
X the thief skill should set the "invisible" face
|
||||
o "slave teslas"
|
||||
o instead of not allowing two fastest legs when upgraded, restrict the
|
||||
X instead of not allowing two fastest legs when upgraded, restrict the
|
||||
health/armor you're allowed when you have fast legs
|
||||
o make a seperate menu for detonating engineer buildings
|
||||
o remove RPrint, since it's really kinda pointless and just makes the code
|
||||
? remove RPrint, since it's really kinda pointless and just makes the code
|
||||
uglier
|
||||
o change the color defines (eg DARKBLUE) to be the exact number, not
|
||||
number + 1
|
||||
|
@ -35,7 +36,7 @@ W = waiting on other work
|
|||
o only allow people to use certain topcolors
|
||||
o allow more variation in skins
|
||||
o Make it so '1' repairs/reloads on all building menus
|
||||
o Teammates should be able to destroy fieldgens when they've been hacked to
|
||||
- Teammates should be able to destroy fieldgens when they've been hacked to
|
||||
hurt teammates
|
||||
o Possibly berserker shouldn't make detpacks do more damage
|
||||
o give airborn pipebombs a different death message
|
||||
|
|
|
@ -965,7 +965,7 @@ float() DoExtraCycle =
|
|||
} else if (already_chosen_map == MAP_LOADCYCLE) {
|
||||
local string st = infokey (NIL, "loopcycle");
|
||||
if (st != "0" && st != "off") {
|
||||
dprint ("No map loaded, restarting map cycle\n");
|
||||
RPrint ("No map loaded, restarting map cycle\n");
|
||||
SetNextMapNum (0);
|
||||
}
|
||||
}
|
||||
|
@ -2298,7 +2298,7 @@ void() CheckRules =
|
|||
localcmd ("serverinfo cyclenow \"\"\n");
|
||||
localcmd ("localinfo cyclenow \"\"\n");
|
||||
|
||||
dprint ("Cycling Map.\n");
|
||||
RPrint ("Cycling Map.\n");
|
||||
|
||||
NextLevel ();
|
||||
}
|
||||
|
|
|
@ -775,7 +775,7 @@ void (float cost, float type) BuyGren =
|
|||
if (type == 0) // if type is 0 we are buying the NULL GRENADE(tm)
|
||||
{
|
||||
sprint(self, PRINT_HIGH, "Congratulations. You have just attempted to buy a null grenade.\n");
|
||||
dprint("WARNING: Attempted purchase of NULL GRENADE. BUG BUG BUG BUG BUG BUG BUG\n");
|
||||
RPrint("WARNING: Attempted purchase of NULL GRENADE. BUG BUG BUG BUG BUG BUG BUG\n");
|
||||
return;
|
||||
}
|
||||
// Check whether we're allowing gren purchase.
|
||||
|
|
30
debug.qc
30
debug.qc
|
@ -10,7 +10,7 @@ float() CheckExistence;
|
|||
entity(float gno) Findgoal;
|
||||
|
||||
//- OfN -
|
||||
void (string msg) RPrint;
|
||||
void (string msg) Real_RPrint;
|
||||
void(entity who) MakeMeDebug;
|
||||
|
||||
//==============================================================
|
||||
|
@ -49,14 +49,6 @@ void(entity te) dremove =
|
|||
|
||||
//==============================================================
|
||||
// A command which just dumps your current location to the screen
|
||||
void() display_location =
|
||||
{
|
||||
local string st;
|
||||
|
||||
st = vtos(self.origin);
|
||||
sprint (self, PRINT_HIGH, st);
|
||||
sprint (self, PRINT_HIGH, "\n");
|
||||
};
|
||||
|
||||
//- OfN
|
||||
// any client can remotely debug the server after using impulse 195 if "allow_debug" is set to 1
|
||||
|
@ -64,7 +56,7 @@ void() display_location =
|
|||
// then RPrints will be sprinted to him also
|
||||
// i coded this cause i dont have access to console in prozac server and wanted to see the dprints
|
||||
// all the dprints in the code were replaced with RPrints
|
||||
void (string msg) RPrint =
|
||||
void (string msg) Real_RPrint =
|
||||
{
|
||||
dprint(msg);
|
||||
|
||||
|
@ -77,13 +69,13 @@ void (string msg) RPrint =
|
|||
void (float oneline) printtrace =
|
||||
{
|
||||
local string sep = oneline ? " " : "\n";
|
||||
dprint ("allsolid: " + ftos (trace_allsolid) + sep);
|
||||
dprint ("startsolid: " + ftos (trace_startsolid) + sep);
|
||||
dprint ("fraction: " + ftos (trace_fraction) + sep);
|
||||
dprint ("endpos: " + vtos (trace_endpos) + sep);
|
||||
dprint ("plane_normal: " + vtos (trace_plane_normal) + sep);
|
||||
dprint ("plane_dist: " + ftos (trace_plane_dist) + sep);
|
||||
dprint ("ent: " + (trace_ent ? "yes" : "no") + sep);
|
||||
dprint ("inopen: " + ftos (trace_inopen) + sep);
|
||||
dprint ("inwater: " + ftos (trace_inwater) + "\n");
|
||||
RPrint ("allsolid: " + ftos (trace_allsolid) + sep);
|
||||
RPrint ("startsolid: " + ftos (trace_startsolid) + sep);
|
||||
RPrint ("fraction: " + ftos (trace_fraction) + sep);
|
||||
RPrint ("endpos: " + vtos (trace_endpos) + sep);
|
||||
RPrint ("plane_normal: " + vtos (trace_plane_normal) + sep);
|
||||
RPrint ("plane_dist: " + ftos (trace_plane_dist) + sep);
|
||||
RPrint ("ent: " + (trace_ent ? "yes" : "no") + sep);
|
||||
RPrint ("inopen: " + ftos (trace_inopen) + sep);
|
||||
RPrint ("inwater: " + ftos (trace_inwater) + "\n");
|
||||
};
|
||||
|
|
10
defs.qh
10
defs.qh
|
@ -1311,6 +1311,14 @@
|
|||
#define AURA_HASTE 3
|
||||
#define AURA_INVIS 4
|
||||
|
||||
#ifdef DEBUG
|
||||
# define RPrint Real_RPrint
|
||||
#else
|
||||
# define RPrint(...)
|
||||
# define dremove remove
|
||||
# define printtrace(...)
|
||||
#endif
|
||||
|
||||
#include "ofndefs.qh"
|
||||
|
||||
#define AVG(a,b) (((a) + (b)) * 0.5)
|
||||
|
@ -1320,4 +1328,4 @@
|
|||
#define ASSERT(a) do {if (!(a)) error (__FILE__ + ":" + itos(__LINE__) + ": Assert failed: " + #a);} while (0)
|
||||
#define SIGN_i(a) (((a) < 0) ? -1 : +1)
|
||||
#define SIGN_f(a) (((a) < 0) ? -1.0 : +1.0)
|
||||
#define printf(...) do {dprint (sprintf (__VA_ARGS__));} while (0)
|
||||
#define printf(...) do {RPrint (sprintf (__VA_ARGS__));} while (0)
|
||||
|
|
114
engineer.qc
114
engineer.qc
|
@ -563,9 +563,9 @@ void(float objtobuild) TeamFortress_Build =
|
|||
// get an origin
|
||||
makevectors(self.v_angle);
|
||||
v_forward_z = 0;
|
||||
v_forward = normalize(v_forward) * 64;
|
||||
|
||||
obj.origin = self.origin + v_forward;
|
||||
v_forward = normalize(v_forward);
|
||||
|
||||
obj.origin = self.origin + v_forward * 35;
|
||||
|
||||
//WK Cheat Fix
|
||||
if (self.is_feigning) {
|
||||
|
@ -705,43 +705,67 @@ void(float objtobuild) TeamFortress_Build =
|
|||
btime = time + BUILD_TIME_FIELDGEN;
|
||||
}
|
||||
|
||||
if (objtobuild != BUILD_SECURITY_CAMERA)
|
||||
{
|
||||
local vector startpos, endpos;
|
||||
startpos = obj.origin;
|
||||
startpos_z = self.absmin_z - obj.mins_z + 50;
|
||||
endpos = obj.origin;
|
||||
endpos_z = self.absmin_z - obj.mins_z - 40;
|
||||
checkmove(startpos, obj.mins, obj.maxs, endpos, MOVE_NORMAL, self);
|
||||
if (objtobuild == BUILD_SECURITY_CAMERA)
|
||||
return;
|
||||
|
||||
if (trace_fraction == 1) {
|
||||
sprint (self, PRINT_HIGH, "Not enough room to build here\n");
|
||||
local vector startpos, endpos;
|
||||
|
||||
startpos = obj.origin;
|
||||
startpos_z = self.absmin_z - obj.mins_z + 60;
|
||||
|
||||
// build right up against the wall if there's a wall there
|
||||
checkmove(startpos, obj.mins, obj.maxs, startpos + v_forward*30, MOVE_NORMAL, obj);
|
||||
|
||||
RPrint ("Builder origin: " + vtos(self.origin) + "\n");
|
||||
RPrint ("First checkmove: ");
|
||||
printtrace( 1 );
|
||||
RPrint ("Distance from builder: ");
|
||||
RPrint (ftos(vlen(trace_endpos - self.origin)));
|
||||
RPrint ("\n");
|
||||
|
||||
startpos = trace_endpos;
|
||||
|
||||
endpos = obj.origin;
|
||||
endpos_z = self.absmin_z - obj.mins_z - 40;
|
||||
|
||||
checkmove(startpos, obj.mins, obj.maxs, endpos, MOVE_NORMAL, obj);
|
||||
|
||||
RPrint("Second checkmove: ");
|
||||
printtrace( 1 );
|
||||
RPrint("Distance from builder: ");
|
||||
RPrint(ftos(vlen(trace_endpos - self.origin)));
|
||||
RPrint("\n");
|
||||
|
||||
if (trace_fraction == 1 && !trace_allsolid) {
|
||||
sprint (self, PRINT_HIGH, "No buildable surfaces\n");
|
||||
dremove (obj);
|
||||
return;
|
||||
}
|
||||
|
||||
if (trace_allsolid || trace_fraction == 0) {
|
||||
sprint (self, PRINT_HIGH, "Not enough room to build\n");
|
||||
dremove (obj);
|
||||
return;
|
||||
}
|
||||
|
||||
if (trace_ent.classname == "force_field") // make it collide with ff
|
||||
trace_endpos_z--;
|
||||
|
||||
obj.origin = trace_endpos;
|
||||
obj.flags = obj.flags | FL_ONGROUND;
|
||||
obj.movetype = MOVETYPE_TOSS;
|
||||
|
||||
#ifdef DISALLOW_BLOCKED_TELE
|
||||
if (objtobuild == BUILD_TELEPORTER) {
|
||||
checkmove (obj.origin + '0 0 32', '-16 -16 -24', '16 16 32',
|
||||
obj.origin + '0 0 30', MOVE_NOMONSTERS, self);
|
||||
if (trace_startsolid || trace_fraction != 1) {
|
||||
sprint (self, PRINT_HIGH, "Not enough room for teleportation\n");
|
||||
dremove (obj);
|
||||
return;
|
||||
} else if (trace_startsolid) {
|
||||
checkmove (trace_endpos, obj.mins, obj.maxs, trace_endpos,
|
||||
MOVE_NORMAL, self);
|
||||
//printtrace (TRUE); // annoying
|
||||
if (trace_startsolid) {
|
||||
sprint (self, PRINT_HIGH, "Not enough room to build here\n");
|
||||
dremove (obj);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
obj.origin = trace_endpos;
|
||||
obj.flags = obj.flags | FL_ONGROUND;
|
||||
obj.movetype = MOVETYPE_TOSS;
|
||||
|
||||
if (objtobuild == BUILD_TELEPORTER) {
|
||||
checkmove (obj.origin + '0 0 32', '-16 -16 -24', '16 16 32',
|
||||
obj.origin + '0 0 30', MOVE_NOMONSTERS, self);
|
||||
if (trace_startsolid || trace_fraction != 1) {
|
||||
sprint (self, PRINT_HIGH, "Not enough room for teleportation\n");
|
||||
dremove (obj);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
obj.owner = self;
|
||||
obj.classname = "timer";
|
||||
|
@ -757,13 +781,14 @@ void(float objtobuild) TeamFortress_Build =
|
|||
setsize (obj, obj.mins, obj.maxs);
|
||||
setorigin (obj, obj.origin);
|
||||
|
||||
if (objtobuild == BUILD_TELEPORTER)
|
||||
if (Teleporter_CheckBlocked (obj)) {
|
||||
sprint (self, PRINT_HIGH, "Not enough room for " +
|
||||
"teleportation.\n");
|
||||
dremove (obj);
|
||||
return;
|
||||
}
|
||||
#ifdef DISALLOW_BLOCKED_TELE
|
||||
if (objtobuild == BUILD_TELEPORTER)
|
||||
if (Teleporter_CheckBlocked (obj)) {
|
||||
sprint (self, PRINT_HIGH, "Not enough room for teleportation.\n");
|
||||
dremove (obj);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (objtobuild==BUILD_TESLA)
|
||||
{
|
||||
|
@ -784,7 +809,6 @@ void(float objtobuild) TeamFortress_Build =
|
|||
self.weaponframe = 0;
|
||||
|
||||
TeamFortress_SetSpeed(self);
|
||||
}
|
||||
|
||||
if (objtobuild == BUILD_FIELDGEN)
|
||||
WhereGen(obj.origin);
|
||||
|
@ -931,7 +955,7 @@ void() TeamFortress_FinishedBuilding =
|
|||
sound (oldself, CHAN_ITEM, "weapons/turrset.wav", 1, ATTN_NORM);
|
||||
newmis.solid = SOLID_BBOX;
|
||||
setmodel(newmis, newmis.mdl);
|
||||
setsize (newmis, '-16 -16 0', '16 16 48');
|
||||
setsize (newmis, '-16 -16 4', '16 16 48'); //don't make it encompass the base
|
||||
setorigin(newmis, oldself.origin + '0 0 8');
|
||||
newmis.real_owner = oldself.real_owner; // The Engineer owns this item
|
||||
newmis.trigger_field = oldself;
|
||||
|
|
37
field.qc
37
field.qc
|
@ -301,23 +301,38 @@ void() Field_touch_SUB =
|
|||
}
|
||||
}
|
||||
|
||||
// excludes entities that shouldnt be moved, doors plats etc..
|
||||
if(other.movetype == MOVETYPE_NONE
|
||||
|| other.movetype == MOVETYPE_PUSH)
|
||||
//|| other.movetype == MOVETYPE_NOCLIP
|
||||
return;
|
||||
if (IsBuilding(other))
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
other.velocity_x = -other.velocity_x;
|
||||
other.velocity_y = -other.velocity_y;
|
||||
if(other.movetype != MOVETYPE_NONE && other.movetype != MOVETYPE_PUSH && other.movetype != MOVETYPE_BOUNCE && other.movetype != MOVETYPE_BOUNCEMISSILE)
|
||||
{
|
||||
checkmove(other.origin, other.mins, other.maxs, other.origin + '0 0 1', MOVE_NORMAL, other);
|
||||
|
||||
other.velocity += 200*normalize(other.velocity);
|
||||
if (trace_fraction == 1)
|
||||
{
|
||||
local vector forward = crossproduct(normalize(self.demon_one.origin - self.demon_two.origin), '0 0 1');
|
||||
|
||||
if (crossproduct (normalize(self.origin - other.origin), normalize(self.demon_one.origin -self.demon_two.origin))
|
||||
* '0 0 1' > 0)
|
||||
other.velocity = -300 * forward;
|
||||
else
|
||||
other.velocity = 300 * forward;
|
||||
|
||||
other.velocity_z += 50;
|
||||
|
||||
setorigin(other, other.origin + '0 0 1');
|
||||
}
|
||||
|
||||
else if (IsBuilding(other))
|
||||
{
|
||||
sprint(other.real_owner, PRINT_HIGH, "The forcefield short-circuits your structure\n");
|
||||
TF_T_Damage(other, NIL, NIL, 9999, TF_TD_IGNOREARMOUR, 0);
|
||||
}
|
||||
}
|
||||
|
||||
FieldExplosion(self,other.origin,other);
|
||||
PutFieldWork(self);
|
||||
|
||||
};
|
||||
|
||||
#ifdef FIELD_FORCEMODE
|
||||
|
@ -573,7 +588,7 @@ void(entity gen1, entity gen2) Create_Field =
|
|||
tfield.maxs = tfield.size * 0.5; // FIXME: / 2 is broken
|
||||
tfield.mins = -tfield.maxs;
|
||||
tfield.origin = AVG (gen1.origin, gen2.origin);
|
||||
tfield.origin_z = AVG (gen1.absmax_z, gen2.absmax_z) - tfield.maxs_z;
|
||||
tfield.origin_z = AVG (gen1.absmax_z, gen2.absmax_z) - tfield.maxs_z - 1;
|
||||
tfield.forcefield_offset = (gen2.origin - gen1.origin);
|
||||
|
||||
local vector right, forward, up;
|
||||
|
|
|
@ -1084,21 +1084,21 @@ void() GRun =
|
|||
if (dist < desired_min) {
|
||||
if (statehack != -1) {
|
||||
// dprint ("me: " + vtos (self.origin) + " goal: " + vtos (self.goalentity.origin) + "\n");
|
||||
dprint (diststring + "back off\n");
|
||||
RPrint (diststring + "back off\n");
|
||||
statehack = -1;
|
||||
}
|
||||
botmovedist (vectoyaw (v_forward), dist * -0.1); // back off
|
||||
} else if (dist > desired_max) {
|
||||
if (statehack != 1) {
|
||||
// dprint ("me: " + vtos (self.origin) + " goal: " + vtos (self.goalentity.origin) + "\n");
|
||||
dprint (diststring + "close in\n");
|
||||
RPrint (diststring + "close in\n");
|
||||
statehack = 1;
|
||||
}
|
||||
botmovedist (vectoyaw (v_forward), dist); // close in
|
||||
} else {
|
||||
if (statehack != 0) {
|
||||
// dprint ("me: " + vtos (self.origin) + " goal: " + vtos (self.goalentity.origin) + "\n");
|
||||
dprint (diststring + "do nothing *cough*\n");
|
||||
RPrint (diststring + "do nothing *cough*\n");
|
||||
statehack = 0;
|
||||
}
|
||||
if (random () < 0.1)
|
||||
|
|
7
makefile
7
makefile
|
@ -1,5 +1,6 @@
|
|||
all: qwprogs.dat
|
||||
qwprogs.dat: progs.src *.qc *.qh
|
||||
qfcc --warn=error --code=debug --advanced
|
||||
all: progs.src *.qc *.qh
|
||||
qfcc --warn=error --advanced
|
||||
debug: progs.src *.qc *.qh
|
||||
qfcc --warn=all --code=debug --advanced -DDEBUG
|
||||
clean:
|
||||
rm -f core *.dat *.pqc *.sym progdefs.h
|
||||
|
|
4
medic.qc
4
medic.qc
|
@ -188,7 +188,7 @@ float(entity doc, entity patient, vector org) CureAdverseEffects =
|
|||
}
|
||||
else
|
||||
{
|
||||
dprint("Warning: Error in Hallucination Timer logic.\n");
|
||||
RPrint("Warning: Error in Hallucination Timer logic.\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -227,7 +227,7 @@ float(entity doc, entity patient, vector org) CureAdverseEffects =
|
|||
}
|
||||
else
|
||||
{
|
||||
dprint("Warning: Error in Tranquilisation Timer logic.\n");
|
||||
RPrint("Warning: Error in Tranquilisation Timer logic.\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -567,8 +567,8 @@ void (string key, string value) UserInfoCallback =
|
|||
// dprint ("[[" + self.netname + "](" + key + ")(" + value + ")(" + oldval + ")]\n");
|
||||
|
||||
else if (key == "topcolor") { // FIXME: some topcolors may be allowed
|
||||
dprint ("items: " + ftos (self.cutf_items & CUTF_SPY_KIT) + " ");
|
||||
dprint ("skin: " + ftos (self.is_undercover) + "\n");
|
||||
RPrint ("items: " + ftos (self.cutf_items & CUTF_SPY_KIT) + " ");
|
||||
RPrint ("skin: " + ftos (self.is_undercover) + "\n");
|
||||
if ((self.cutf_items & CUTF_SPY_KIT) && self.is_undercover) {
|
||||
setinfokey(self, "topcolor", oldval);
|
||||
stuffcmd(self, "color \"" + oldval + "\"\n");
|
||||
|
@ -587,7 +587,7 @@ void (string key, string value) UserInfoCallback =
|
|||
} else {
|
||||
// accept everything else
|
||||
setinfokey (self, key, value);
|
||||
// dprint ("[default [" + self.netname + "](" + key + ")(" + value + ")(" + oldval + ")]\n");
|
||||
// RPrint ("[default [" + self.netname + "](" + key + ")(" + value + ")(" + oldval + ")]\n");
|
||||
}
|
||||
};
|
||||
|
||||
|
|
17
weapons.qc
17
weapons.qc
|
@ -3846,12 +3846,8 @@ void() ImpulseCommands =
|
|||
TeamFortress_CTF_FlagInfo();
|
||||
else
|
||||
TeamFortress_DisplayDetectionItems();
|
||||
} else if (self.impulse == TF_DISPLAYLOCATION)
|
||||
display_location();
|
||||
|
||||
/*else if (self.impulse == 199)
|
||||
CameraSwitchView();
|
||||
*/
|
||||
}
|
||||
|
||||
#ifdef DEMO_STUFF
|
||||
// Camera Impulses
|
||||
else if (self.playerclass == PC_UNDEFINED && self.impulse == TF_CAM_TARGET)
|
||||
|
@ -3916,8 +3912,8 @@ void() DeadImpulses =
|
|||
sprint(self,PRINT_MEDIUM,"Stock player classes are disabled\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (self.impulse == 69 && infokey(NIL, "lock_cheat") == "yes")
|
||||
#ifdef DEBUG
|
||||
if (self.impulse == 69 && infokey(NIL, "allow_debug") == "yes")
|
||||
{
|
||||
self.demon_blood = MAX_KNIFE_BLOOD;
|
||||
self.job = self.job | JOB_BLOODY_KNIFE;
|
||||
|
@ -3925,7 +3921,7 @@ void() DeadImpulses =
|
|||
return;
|
||||
}
|
||||
|
||||
if (self.impulse == 18)
|
||||
if (self.impulse == 18 && infokey(NIL, "allow_debug") == "yes")
|
||||
{
|
||||
sprint(self, PRINT_HIGH, "Your origin is: '", ftos(self.origin_x), " ", ftos(self.origin_y));
|
||||
sprint(self, PRINT_HIGH, " ", ftos(self.origin_z), "'\n");
|
||||
|
@ -3933,6 +3929,9 @@ void() DeadImpulses =
|
|||
return;
|
||||
}
|
||||
|
||||
if (self.impulse == 195 && !debug_target && infokey(NIL, "allow_debug") == "yes")
|
||||
debug_target = self;
|
||||
#endif
|
||||
|
||||
//<CH>
|
||||
if (self.impulse == I_CHEAT_ONE) {
|
||||
|
|
Loading…
Reference in a new issue