diff --git a/src/game/g_player.pas b/src/game/g_player.pas
index 1c01e2f032ae7750f7531d20322c569baac24623..98535cc9ef2f36220f98ba05b4cbb0a401598cac 100644 (file)
--- a/src/game/g_player.pas
+++ b/src/game/g_player.pas
procedure CatchFire(Attacker: Word);
//WARNING! this does nothing for now, but still call it!
- procedure positionChanged (); //WARNING! call this after monster position was changed, or coldet will not work right!
+ procedure positionChanged (); //WARNING! call this after entity position was changed, or coldet will not work right!
procedure getMapBox (out x, y, w, h: Integer); inline;
+ procedure moveBy (dx, dy: Integer); inline;
public
property Vel: TPoint2i read FObj.Vel;
procedure LoadState(var Mem: TBinMemoryReader); override;
end;
+ PGib = ^TGib;
TGib = record
alive: Boolean;
ID: DWORD;
Color: TRGB;
Obj: TObj;
- procedure positionChanged (); //WARNING! call this after monster position was changed, or coldet will not work right!
+ procedure getMapBox (out x, y, w, h: Integer); inline;
+ procedure moveBy (dx, dy: Integer); inline;
+
+ procedure positionChanged (); inline; //WARNING! call this after entity position was changed, or coldet will not work right!
end;
+ PShell = ^TShell;
TShell = record
SpriteID: DWORD;
alive: Boolean;
CX, CY: Integer;
Obj: TObj;
- procedure positionChanged (); //WARNING! call this after monster position was changed, or coldet will not work right!
+ procedure getMapBox (out x, y, w, h: Integer); inline;
+ procedure moveBy (dx, dy: Integer); inline;
+
+ procedure positionChanged (); inline; //WARNING! call this after entity position was changed, or coldet will not work right!
end;
TCorpse = class (TObject)
procedure SaveState(var Mem: TBinMemoryWriter);
procedure LoadState(var Mem: TBinMemoryReader);
- procedure positionChanged (); //WARNING! call this after monster position was changed, or coldet will not work right!
+ procedure getMapBox (out x, y, w, h: Integer); inline;
+ procedure moveBy (dx, dy: Integer); inline;
- property Obj: TObj read FObj;
+ procedure positionChanged (); inline; //WARNING! call this after entity position was changed, or coldet will not work right!
+
+ function ObjPtr (): PObj; inline;
+
+ property Obj: TObj read FObj; // copies object
property State: Byte read FState;
property Mess: Boolean read FMess;
end;
BotList: Array of TBotProfile;
-procedure TGib.positionChanged (); begin end;
-procedure TShell.positionChanged (); begin end;
-
-
function Lerp(X, Y, Factor: Integer): Integer;
begin
Result := X + ((Y - X) div Factor);
end;
end;
+
+procedure TGib.getMapBox (out x, y, w, h: Integer); inline;
+begin
+ x := Obj.X+Obj.Rect.X;
+ y := Obj.Y+Obj.Rect.Y;
+ w := Obj.Rect.Width;
+ h := Obj.Rect.Height;
+end;
+
+procedure TGib.moveBy (dx, dy: Integer); inline;
+begin
+ if (dx <> 0) or (dy <> 0) then
+ begin
+ Obj.X += dx;
+ Obj.Y += dy;
+ positionChanged();
+ end;
+end;
+
+
+procedure TShell.getMapBox (out x, y, w, h: Integer); inline;
+begin
+ x := Obj.X;
+ y := Obj.Y;
+ w := Obj.Rect.Width;
+ h := Obj.Rect.Height;
+end;
+
+procedure TShell.moveBy (dx, dy: Integer); inline;
+begin
+ if (dx <> 0) or (dy <> 0) then
+ begin
+ Obj.X += dx;
+ Obj.Y += dy;
+ positionChanged();
+ end;
+end;
+
+
+procedure TGib.positionChanged (); inline; begin end;
+procedure TShell.positionChanged (); inline; begin end;
+
+
procedure g_Player_DrawCorpses();
var
i: Integer;
resetWeaponQueue();
end;
-procedure TPlayer.positionChanged ();
+procedure TPlayer.positionChanged (); inline;
begin
end;
if mon = nil then
s := '?'
else
- s := g_Monsters_GetKilledBy(mon.MonsterType);
+ s := g_Mons_GetKilledByTypeId(mon.MonsterType);
case KillType of
K_HARDKILL:
if not (R_BERSERK in FRulez) then
begin
Include(FRulez, R_BERSERK);
- if FBFGFireCounter = -1 then
+ if gBerserkAutoswitch and (gDebugMode or gCheats) and (FBFGFireCounter = -1) then
begin
FCurrWeap := WEAPON_KASTET;
resetWeaponQueue();
FModel.SetWeapon(WEAPON_KASTET);
end;
if gFlash <> 0 then
+ begin
Inc(FPain, 100);
if gFlash = 2 then Inc(FPickup, 5);
+ end;
FBerserk := gTime+30000;
Result := True;
remove := True;
if FKeys[b].Time = 0 then FKeys[b].Pressed := False else Dec(FKeys[b].Time);
end;
+
procedure TPlayer.getMapBox (out x, y, w, h: Integer); inline;
begin
x := FObj.X+PLAYER_RECT.X;
h := PLAYER_RECT.Height;
end;
+
+procedure TPlayer.moveBy (dx, dy: Integer); inline;
+begin
+ if (dx <> 0) or (dy <> 0) then
+ begin
+ FObj.X += dx;
+ FObj.Y += dy;
+ positionChanged();
+ end;
+end;
+
+
function TPlayer.Collide(X, Y: Integer; Width, Height: Word): Boolean;
begin
Result := g_Collide(FObj.X+PLAYER_RECT.X,
inherited;
end;
-procedure TCorpse.positionChanged (); begin end;
+function TCorpse.ObjPtr (): PObj; inline; begin result := @FObj; end;
+
+procedure TCorpse.positionChanged (); inline; begin end;
+
+procedure TCorpse.moveBy (dx, dy: Integer); inline;
+begin
+ if (dx <> 0) or (dy <> 0) then
+ begin
+ FObj.X += dx;
+ FObj.Y += dy;
+ positionChanged();
+ end;
+end;
+
+
+procedure TCorpse.getMapBox (out x, y, w, h: Integer); inline;
+begin
+ x := FObj.X+PLAYER_CORPSERECT.X;
+ y := FObj.Y+PLAYER_CORPSERECT.Y;
+ w := PLAYER_CORPSERECT.Width;
+ h := PLAYER_CORPSERECT.Height;
+end;
+
procedure TCorpse.Damage(Value: Word; vx, vy: Integer);
var
FDifficult := TDifficult(p^);
end;
+
+begin
+ conRegVar('cheat_berserk_autoswitch', @gBerserkAutoswitch, 'autoswitch to fist when berserk pack taken', '', true, true);
end.