diff --git a/src/game/g_player.pas b/src/game/g_player.pas
index bb9b4149dca2a8bfcc677691bf985814fbb1b4ca..a99e5b069ef21ba255f7f4a4e08b2fe6d1b38d3c 100644 (file)
--- a/src/game/g_player.pas
+++ b/src/game/g_player.pas
+(* Copyright (C) DooM 2D:Forever Developers
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *)
+{$MODE DELPHI}
unit g_player;
interface
procedure SetFlag(Flag: Byte);
function DropFlag(): Boolean;
procedure AllRulez(Health: Boolean);
+ procedure RestoreHealthArmor();
procedure FragCombo();
procedure GiveItem(ItemType: Byte);
procedure Damage(value: Word; SpawnerUID: Word; vx, vy: Integer; t: Byte); virtual;
procedure Draw();
procedure SaveState(var Mem: TBinMemoryWriter);
procedure LoadState(var Mem: TBinMemoryReader);
-
+
property Obj: TObj read FObj;
property State: Byte read FState;
property Mess: Boolean read FMess;
uses
e_log, g_map, g_items, g_console, SysUtils, g_gfx, Math,
g_options, g_triggers, g_menu, MAPDEF, g_game,
- WADEDITOR, g_main, g_monsters, CONFIG, g_language, g_net, g_netmsg;
+ wadreader, g_main, g_monsters, CONFIG, g_language, g_net, g_netmsg;
type
TBotProfile = record
TEAMCOLOR: Array [TEAM_RED..TEAM_BLUE] of TRGB = ((R:255; G:0; B:0),
(R:0; G:0; B:255));
DIFFICULT_EASY: TDifficult = (DiagFire: 32; InvisFire: 32; DiagPrecision: 32;
- FlyPrecision: 32; Cover: 32; CloseJump: 32);
+ FlyPrecision: 32; Cover: 32; CloseJump: 32;
+ WeaponPrior:(0,0,0,0,0,0,0,0,0,0); CloseWeaponPrior:(0,0,0,0,0,0,0,0,0,0));
DIFFICULT_MEDIUM: TDifficult = (DiagFire: 127; InvisFire: 127; DiagPrecision: 127;
- FlyPrecision: 127; Cover: 127; CloseJump: 127);
+ FlyPrecision: 127; Cover: 127; CloseJump: 127;
+ WeaponPrior:(0,0,0,0,0,0,0,0,0,0); CloseWeaponPrior:(0,0,0,0,0,0,0,0,0,0));
DIFFICULT_HARD: TDifficult = (DiagFire: 255; InvisFire: 255; DiagPrecision: 255;
- FlyPrecision: 255; Cover: 255; CloseJump: 255);
+ FlyPrecision: 255; Cover: 255; CloseJump: 255;
+ WeaponPrior:(0,0,0,0,0,0,0,0,0,0); CloseWeaponPrior:(0,0,0,0,0,0,0,0,0,0));
WEAPON_PRIOR1: Array [WEAPON_KASTET..WEAPON_SUPERPULEMET] of Byte =
(WEAPON_SUPERPULEMET, WEAPON_SHOTGUN2, WEAPON_SHOTGUN1,
WEAPON_CHAINGUN, WEAPON_PLASMA, WEAPON_ROCKETLAUNCHER,
begin
if (gShells = nil) or (Length(gShells) = 0) then
Exit;
-
+
with gShells[CurrentShell] do
begin
SpriteID := 0;
else
g_Sound_PlayExAt('SOUND_PLAYER_SHELL' + IntToStr(k), X, Y);
end;
-
+
begin
// Êóñêè ìÿñà:
if gGibs <> nil then
Obj.Vel.X := -(vel.X div 2);
if WordBool(mr and (MOVE_HITCEIL or MOVE_HITLAND)) then
Obj.Vel.Y := -(vel.Y div 2);
-
+
if (Obj.Vel.X >= 0) then
begin // Clockwise
RAngle := RAngle + Abs(Obj.Vel.X)*6 + Abs(Obj.Vel.Y);
SetLength(gShells, MaxGibs);
CurrentGib := 0;
CurrentShell := 0;
-
+
if gCorpses <> nil then
for i := 0 to High(gCorpses) do
gCorpses[i].Free();
FRulez := FRulez+[R_KEY_RED, R_KEY_GREEN, R_KEY_BLUE];
end;
+procedure TPlayer.RestoreHealthArmor();
+begin
+ FHealth := PLAYER_HP_LIMIT;
+ FArmor := PLAYER_AP_LIMIT;
+end;
+
procedure TPlayer.FragCombo();
var
Param: Integer;
g_Player_CreateGibs(FObj.X+FObj.Rect.X+(FObj.Rect.Width div 2),
FObj.Y+FObj.Rect.Y+(FObj.Rect.Height div 2),
FModelName, FColor);
+ // Çâóê ìÿñà îò òðóïà:
pm := g_PlayerModel_Get(FModelName);
- pm.PlaySound(MODELSOUND_DIE, 3, FObj.X, FObj.Y);
+ pm.PlaySound(MODELSOUND_DIE, 5, FObj.X, FObj.Y);
pm.Free;
end;
end
if gTime mod (GAME_TICK*2) <> 0 then
begin
g_Obj_Move(@FObj, True, True, True);
-
+
Exit;
end;
else
begin
EnableAI := True;
-
+
// Ïðîâåðÿåì, îòêëþ÷¸í ëè AI áîòîâ
if (g_debug_BotAIOff = 1) and (Team = TEAM_RED) then
EnableAI := False;
procedure TBot.SelectWeapon(Dist: Integer);
var
a: Integer;
-
+
function HaveAmmo(weapon: Byte): Boolean;
begin
case weapon of