summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: dffafd3)
raw | patch | inline | side by side (parent: dffafd3)
author | fgsfds <pvt.fgsfds@gmail.com> | |
Tue, 3 Mar 2020 23:22:33 +0000 (02:22 +0300) | ||
committer | fgsfds <pvt.fgsfds@gmail.com> | |
Tue, 3 Mar 2020 23:22:33 +0000 (02:22 +0300) |
diff --git a/src/game/g_console.pas b/src/game/g_console.pas
index c38b476408f08dc42aba24a0b6ca04e000fc4e06..fa7d2db4202c5cc1544fc2acdf772b51329bbb68 100644 (file)
--- a/src/game/g_console.pas
+++ b/src/game/g_console.pas
AddCommand('quit', SystemCommands);
AddCommand('exit', SystemCommands);
AddCommand('r_reset', SystemCommands);
+ AddCommand('r_maxfps', SystemCommands);
AddCommand('g_language', SystemCommands);
AddCommand('bind', BindCommands);
diff --git a/src/game/g_game.pas b/src/game/g_game.pas
index b0e9e01feb36fd0bf5cbfb7e46c6c67b5134d917..0231bc8c5858249a2d24586d2772aacd879cb359 100644 (file)
--- a/src/game/g_game.pas
+++ b/src/game/g_game.pas
p.Obj.lerp(gLerpFactor, fX, fY);
px := fX + PLAYER_RECT_CX;
- py := fY + PLAYER_RECT_CY+p.Obj.slopeUpLeft;
+ py := fY + PLAYER_RECT_CY+nlerp(p.SlopeOld, p.Obj.slopeUpLeft, gLerpFactor);
if (g_dbg_scale = 1.0) and (not g_dbg_ignore_bounds) then
begin
procedure SystemCommands(P: SSArray);
var
cmd: string;
+ a: Integer;
begin
cmd := LowerCase(P[0]);
case cmd of
e_LogWriteln('resolution not changed');
sys_EnableVSync(gVSync);
end;
+ 'r_maxfps':
+ begin
+ if Length(p) = 2 then
+ begin
+ gMaxFPS := StrToIntDef(p[1], gMaxFPS);
+ if gMaxFPS > 0 then
+ gFrameTime := 1000 div gMaxFPS
+ else
+ gFrameTime := 0;
+ end;
+ e_LogWritefln('r_maxfps %d', [gMaxFPS]);
+ end;
'g_language':
begin
if Length(p) = 2 then
diff --git a/src/game/g_options.pas b/src/game/g_options.pas
index 4a561e090c08bfa6670a3102abc6c3d5c84741c1..ecc30f9b7606d64e9dec8b22579d5609d9d84944 100644 (file)
--- a/src/game/g_options.pas
+++ b/src/game/g_options.pas
glRenderToFBO: Boolean = True;
gTextureFilter: Boolean;
gLerpActors: Boolean = True;
+ gFrameTime: Integer = 5;
+ gMaxFPS: Integer = 200;
gNoSound: Boolean;
gSoundLevel: Integer;
gMusicLevel: Integer;
diff --git a/src/game/g_player.pas b/src/game/g_player.pas
index db39cb84b0961e1260f840fb8a885e710648b1a8..068c2b4124e41fe4d225a6dd4685666797c1300c 100644 (file)
--- a/src/game/g_player.pas
+++ b/src/game/g_player.pas
FFireAngle: SmallInt;
FIncCamOld: Integer;
FIncCam: Integer;
+ FSlopeOld: Integer;
FShellTimer: Integer;
FShellType: Byte;
FSawSound: TPlayableSound;
property GameAccelY: Integer read FObj.Accel.Y write FObj.Accel.Y;
property IncCam: Integer read FIncCam write FIncCam;
property IncCamOld: Integer read FIncCamOld write FIncCamOld;
+ property SlopeOld: Integer read FSlopeOld write FSlopeOld;
property UID: Word read FUID write FUID;
property JustTeleported: Boolean read FJustTeleported write FJustTeleported;
property NetTime: LongWord read FNetTime write FNetTime;
procedure TPlayer.DrawIndicator(Color: TRGB);
var
- indX, indY, fX, fY: Integer;
+ indX, indY, fX, fY, fSlope: Integer;
indW, indH: Word;
indA: Single;
a: TDFPoint;
if FAlive then
begin
FObj.lerp(gLerpFactor, fX, fY);
+ fSlope := nlerp(FSlopeOld, FObj.slopeUpLeft, gLerpFactor);
+
case gPlayerIndicatorStyle of
0:
begin
indY := fY - indH;
end;
+ indY := indY + fSlope;
indX := EnsureRange(indX, 0, Max(gMapInfo.Width, gPlayerScreenSize.X) - indW);
indY := EnsureRange(indY, 0, Max(gMapInfo.Height, gPlayerScreenSize.Y) - indH);
begin
e_TextureFontGetSize(gStdFont, nW, nH);
indX := fX + FObj.Rect.X + (FObj.Rect.Width - Length(FName) * nW) div 2;
- indY := fY - nH;
+ indY := fY - nH + fSlope;
e_TextureFontPrintEx(indX, indY, FName, gStdFont, Color.R, Color.G, Color.B, 1.0, True);
end;
end;
w, h: Word;
dr: Boolean;
Mirror: TMirrorType;
- fX, fY: Integer;
+ fX, fY, fSlope: Integer;
begin
FObj.lerp(gLerpFactor, fX, fY);
+ fSlope := nlerp(FSlopeOld, FObj.slopeUpLeft, gLerpFactor);
if FAlive then
begin
if FPunchAnim <> nil then
begin
FPunchAnim.Draw(fX+IfThen(Direction = TDirection.D_LEFT, 15-FObj.Rect.X, FObj.Rect.X-15),
- fY+FObj.Rect.Y-11, Mirror);
+ fY+fSlope+FObj.Rect.Y-11, Mirror);
if FPunchAnim.played then
begin
FPunchAnim.Free;
e_GetTextureSize(ID, @w, @h);
if FDirection = TDirection.D_LEFT then
e_Draw(ID, fX+FObj.Rect.X+(FObj.Rect.Width div 2)-(w div 2)+4,
- fY+FObj.Rect.Y+(FObj.Rect.Height div 2)-(h div 2)-7+FObj.slopeUpLeft, 0, True, False)
+ fY+FObj.Rect.Y+(FObj.Rect.Height div 2)-(h div 2)-7+fSlope, 0, True, False)
else
e_Draw(ID, fX+FObj.Rect.X+(FObj.Rect.Width div 2)-(w div 2)-2,
- fY+FObj.Rect.Y+(FObj.Rect.Height div 2)-(h div 2)-7+FObj.slopeUpLeft, 0, True, False);
+ fY+FObj.Rect.Y+(FObj.Rect.Height div 2)-(h div 2)-7+fSlope, 0, True, False);
end;
if FMegaRulez[MR_INVIS] > gTime then
else
dr := True;
if dr then
- FModel.Draw(fX, fY+FObj.slopeUpLeft, 200)
+ FModel.Draw(fX, fY+fSlope, 200)
else
- FModel.Draw(fX, fY+FObj.slopeUpLeft);
+ FModel.Draw(fX, fY+fSlope);
end
else
- FModel.Draw(fX, fY+FObj.slopeUpLeft, 254);
+ FModel.Draw(fX, fY+fSlope, 254);
end
else
- FModel.Draw(fX, fY+FObj.slopeUpLeft);
+ FModel.Draw(fX, fY+fSlope);
end;
if g_debug_Frames then
ReleaseKeys();
FDamageBuffer := 0;
+ FSlopeOld := 0;
FIncCamOld := 0;
FIncCam := 0;
FBFGFireCounter := -1;
Anim: TAnimation;
ID: DWORD;
begin
+ FSlopeOld := 0;
FIncCamOld := 0;
FIncCam := 0;
FBFGFireCounter := -1;
procedure TPlayer.PreUpdate();
begin
+ FSlopeOld := FObj.slopeUpLeft;
FIncCamOld := FIncCam;
FObj.oldX := FObj.X;
FObj.oldY := FObj.Y;
diff --git a/src/game/g_window.pas b/src/game/g_window.pas
index 351edf913e91396a154c5ae8a5c52a08cf32c5e2..f55c43001f90849c064bfc3a98b9dac28370322f 100644 (file)
--- a/src/game/g_window.pas
+++ b/src/game/g_window.pas
if flag then
Time_Old := Time - (Time_Delta mod 28);
- if (Time - Frame > 4) then
+ // don't wait if VSync is on, GL already probably waits enough
+ if gLerpActors then
+ flag := (Time - Frame >= gFrameTime) or gVSync;
+
+ if flag then
begin
if (not wMinimized) then
begin