- some more tweaks for rotated fieldgens

- some changes for how people get damaged from fieldgens, needs testing
- protein :)
This commit is contained in:
Adam Olsen 2001-07-27 05:11:51 +00:00
parent 0176f78b9e
commit 0241c299b9
2 changed files with 46 additions and 27 deletions

2
BUGS
View file

@ -6,3 +6,5 @@
- there appears to be a window between when a teamkill curse respawn is disabled and when they're killed. it should be removed. - there appears to be a window between when a teamkill curse respawn is disabled and when they're killed. it should be removed.
- through some combination of respawning, respawn guard, and teleporters (not necesarily needed), it's possible to get stuck on another person - through some combination of respawning, respawn guard, and teleporters (not necesarily needed), it's possible to get stuck on another person
- if you build your teleporter too close to a wall, and it blows up, you get "tried to sprint to a non-client" - if you build your teleporter too close to a wall, and it blows up, you get "tried to sprint to a non-client"
- hacked forcefields get you teamkills
- the "speed cheat" checker needs to be ripped out, it's kinda useless

View file

@ -251,6 +251,7 @@ void() DisableField =
void() Field_touch_SUB = void() Field_touch_SUB =
{ {
local float doFX; local float doFX;
local float shoulddamage;
doFX = TRUE; doFX = TRUE;
if (FieldIsMalfunctioning(self) & SCREWUP_THREE) // reduce output if (FieldIsMalfunctioning(self) & SCREWUP_THREE) // reduce output
@ -269,9 +270,12 @@ void() Field_touch_SUB =
else else
{ {
self.velocity = self.velocity - (self.velocity*4) + '0 0 1'; self.velocity = self.velocity - (self.velocity*4) + '0 0 1';
if (Field_ShouldDamage(self,other)) shoulddamage = Field_ShouldDamage(self,other);
TF_T_Damage (other, self, self.real_owner, self.dmg, TF_TD_NOTTEAM, TF_TD_ELECTRICITY); if (shoulddamage == 1)
TF_T_Damage (other, self, self.real_owner, self.dmg, TF_TD_NOTTEAM, TF_TD_ELECTRICITY);
else if (shoulddamage == 2) // hacked to hurt teammates
TF_T_Damage (other, self, world, self.dmg, TF_TD_NOTTEAM, TF_TD_ELECTRICITY);
} }
} }
@ -284,8 +288,14 @@ void() Field_touch_SUB =
DisableField(); DisableField();
return; return;
} }
else if (Field_ShouldDamage(self,other)) else
TF_T_Damage (other, self, self.real_owner, self.dmg, TF_TD_NOTTEAM, TF_TD_ELECTRICITY); {
shoulddamage = Field_ShouldDamage(self,other);
if (shoulddamage == 1)
TF_T_Damage (other, self, self.real_owner, self.dmg, TF_TD_NOTTEAM, TF_TD_ELECTRICITY);
else if (shoulddamage == 2) // hacked to hurt teammates
TF_T_Damage (other, self, world, self.dmg, TF_TD_NOTTEAM, TF_TD_ELECTRICITY);
}
} }
// excludes entities that shouldnt be moved, doors plats etc.. // excludes entities that shouldnt be moved, doors plats etc..
@ -441,31 +451,35 @@ float(entity tfield, entity who) Field_ItCanPass =
}; };
//========================================================================= //=========================================================================
// returns TRUE if 'who' entity should be damaged by the field // returns 1 or 2 if 'who' entity should be damaged by the field
// 1 if it's an enemy, 2 if a friendly and has been hacked
float(entity tfield, entity who) Field_ShouldDamage = float(entity tfield, entity who) Field_ShouldDamage =
{ {
if (FieldIsMalfunctioning(tfield) & SCREWUP_ONE) local float fr;
return TRUE; if (FieldIsMalfunctioning(tfield) & SCREWUP_ONE)
fr = 2;
else
fr = 0;
if (who.classname == "player") // PLAYERS if (who.classname == "player") // PLAYERS
{ {
if (who == tfield.real_owner) // field owner if (who == tfield.real_owner) // field owner
return FALSE; return fr;
if (Teammate(who.team_no, tfield.real_owner.team_no)) // teammate if (Teammate(who.team_no, tfield.real_owner.team_no)) // teammate
return FALSE; return fr;
if (Teammate(who.undercover_team, tfield.real_owner.team_no)) // spies disguised as our team if (Teammate(who.undercover_team, tfield.real_owner.team_no)) // spies disguised as our team
return FALSE; return fr;
} }
else if (IsMonster(who)) // MONSTERS/ARMY else if (IsMonster(who)) // MONSTERS/ARMY
{ {
if (Teammate(who.real_owner.team_no, tfield.real_owner.team_no)) // team monster if (Teammate(who.real_owner.team_no, tfield.real_owner.team_no)) // team monster
return FALSE; return fr;
} }
return TRUE; return 1;
}; };
//============================================================================= //=============================================================================
@ -553,8 +567,13 @@ void(entity gen1, entity gen2) Create_Field =
tfield.mins = tfield.maxs * -1; // FIXME: -1 * only did first float tfield.mins = tfield.maxs * -1; // FIXME: -1 * only did first float
tfield.origin = gen1.origin + (gen2.origin - gen1.origin) * 0.5; tfield.origin = gen1.origin + (gen2.origin - gen1.origin) * 0.5;
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;
tfield.absmax = tfield.origin + tfield.maxs; tfield.forcefield_offset = (gen2.origin - gen1.origin);
tfield.absmin = tfield.origin + tfield.mins; tfield.absmax_x = tfield.origin_x + max (tfield.forcefield_offset_x, -tfield.forcefield_offset_x);
tfield.absmax_y = tfield.origin_y + max (tfield.forcefield_offset_y, -tfield.forcefield_offset_y);
tfield.absmax_z = tfield.origin_z + max (tfield.forcefield_offset_z, -tfield.forcefield_offset_z);
tfield.absmin_x = tfield.origin_x + min (tfield.forcefield_offset_x, -tfield.forcefield_offset_x);
tfield.absmin_y = tfield.origin_y + min (tfield.forcefield_offset_y, -tfield.forcefield_offset_y);
tfield.absmin_z = tfield.origin_z + min (tfield.forcefield_offset_z, -tfield.forcefield_offset_z);
local vector right, forward, up; local vector right, forward, up;
// local string foo; // local string foo;
@ -571,8 +590,6 @@ void(entity gen1, entity gen2) Create_Field =
rotate_bbox (tfield.rotated_bbox, right, forward, up, tfield.mins, rotate_bbox (tfield.rotated_bbox, right, forward, up, tfield.mins,
tfield.maxs); tfield.maxs);
tfield.forcefield_offset = (gen2.origin - gen1.origin);
// apply stuff // apply stuff
tfield.movetype = MOVETYPE_NONE; tfield.movetype = MOVETYPE_NONE;
tfield.solid = SOLID_BBOX; tfield.solid = SOLID_BBOX;