diff --git a/src/game/g_weapons.pas b/src/game/g_weapons.pas
index a64d9872abf86eef5e60a7239d21f41a51308321..32fc8f6c04a770ee0c0e34bfc5ab630b4958d20b 100644 (file)
--- a/src/game/g_weapons.pas
+++ b/src/game/g_weapons.pas
function g_Weapon_HitUID(UID: Word; d: Integer; SpawnerUID: Word; t: Byte): Boolean;
function g_Weapon_CreateShot(I: Integer; ShotType: Byte; Spawner, TargetUID: Word; X, Y, XV, YV: Integer): LongWord;
-procedure g_Weapon_gun(const x, y, xd, yd, v, dmg: Integer; SpawnerUID: Word; CheckTrigger: Boolean);
+procedure g_Weapon_gun(const x, y, xd, yd, v, indmg: Integer; SpawnerUID: Word; CheckTrigger: Boolean);
procedure g_Weapon_punch(x, y: Integer; d, SpawnerUID: Word);
function g_Weapon_chainsaw(x, y: Integer; d, SpawnerUID: Word): Integer;
procedure g_Weapon_rocket(x, y, xd, yd: Integer; SpawnerUID: Word; WID: Integer = -1; Silent: Boolean = False);
end;
// È â êîíöå èãðîêîâ, íî òîëüêî åñëè ïîëîæåíî
- // (èëè friendlyfire, èëè friendly_hit_projectile)
- if LongBool(gGameSettings.Options and (GAME_OPTION_TEAMDAMAGE or GAME_OPTION_TEAMHITPROJECTILE)) then
+ // (èëè ñíàðÿä îò ìîíñòðà, èëè friendlyfire, èëè friendly_hit_projectile)
+ if (g_GetUIDType(SpawnerUID) <> UID_PLAYER) or
+ LongBool(gGameSettings.Options and (GAME_OPTION_TEAMDAMAGE or GAME_OPTION_TEAMHITPROJECTILE)) then
begin
if PlayerHit() then
begin
//!!!FIXME!!!
-procedure g_Weapon_gun (const x, y, xd, yd, v, dmg: Integer; SpawnerUID: Word; CheckTrigger: Boolean);
+procedure g_Weapon_gun (const x, y, xd, yd, v, indmg: Integer; SpawnerUID: Word; CheckTrigger: Boolean);
var
x0, y0: Integer;
x2, y2: Integer;
xi, yi: Integer;
wallDistSq: Integer = $3fffffff;
spawnerPlr: TPlayer = nil;
+ dmg: Integer;
function doPlayerHit (idx: Integer; hx, hy: Integer): Boolean;
begin
begin
if ((gGameSettings.Options and (GAME_OPTION_TEAMHITTRACE or GAME_OPTION_TEAMDAMAGE)) = 0) and
(spawnerPlr.Team <> TEAM_NONE) and (spawnerPlr.Team = gPlayers[idx].Team) then
+ begin
+ if (spawnerPlr <> gPlayers[idx]) and ((gGameSettings.Options and GAME_OPTION_TEAMABSORBDAMAGE) = 0) then
+ dmg := Max(1, dmg div 2);
exit;
+ end;
end;
result := HitPlayer(gPlayers[idx], dmg, (xi*v)*10, (yi*v)*10-3, SpawnerUID, HIT_SOME);
if result and (v <> 0) then gPlayers[idx].Push((xi*v), (yi*v));
if (g_GetUIDType(SpawnerUID) = UID_PLAYER) then
spawnerPlr := g_Player_Get(SpawnerUID);
+ dmg := indmg;
+
//wgunMonHash.reset(); //FIXME: clear hash on level change
wgunHitHeap.clear();
wgunHitTimeUsed := 0;