X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_player.pas;h=98535cc9ef2f36220f98ba05b4cbb0a401598cac;hb=db4e988645273fe1c11611d84e03f0199cd181f7;hp=1c01e2f032ae7750f7531d20322c569baac24623;hpb=a7daeef3855f07c8302a60ab31cb20ab74aefc45;p=d2df-sdl.git diff --git a/src/game/g_player.pas b/src/game/g_player.pas index 1c01e2f..98535cc 100644 --- a/src/game/g_player.pas +++ b/src/game/g_player.pas @@ -318,9 +318,10 @@ type 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; @@ -413,6 +414,7 @@ type procedure LoadState(var Mem: TBinMemoryReader); override; end; + PGib = ^TGib; TGib = record alive: Boolean; ID: DWORD; @@ -421,10 +423,14 @@ type 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; @@ -434,7 +440,10 @@ type 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) @@ -457,9 +466,14 @@ type 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; @@ -616,10 +630,6 @@ var 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); @@ -1712,6 +1722,49 @@ begin 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; @@ -2046,7 +2099,7 @@ begin resetWeaponQueue(); end; -procedure TPlayer.positionChanged (); +procedure TPlayer.positionChanged (); inline; begin end; @@ -3169,7 +3222,7 @@ begin if mon = nil then s := '?' else - s := g_Monsters_GetKilledBy(mon.MonsterType); + s := g_Mons_GetKilledByTypeId(mon.MonsterType); case KillType of K_HARDKILL: @@ -3927,15 +3980,17 @@ begin 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; @@ -5042,6 +5097,7 @@ begin 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; @@ -5050,6 +5106,18 @@ begin 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, @@ -6095,7 +6163,29 @@ begin 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 @@ -7524,4 +7614,7 @@ begin FDifficult := TDifficult(p^); end; + +begin + conRegVar('cheat_berserk_autoswitch', @gBerserkAutoswitch, 'autoswitch to fist when berserk pack taken', '', true, true); end.