From dc5136ca2156796811c9d6ca8d4244ce8e773e42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Untersch=C3=BCtz?= Date: Mon, 5 Jan 2026 19:54:07 +0100 Subject: [PATCH] Adjust physics constants for better 20 TPS gameplay feel, refine smoothing and correction thresholds, and update cache-busting version for client assets. --- cmd/client/game_render.go | 8 ++++---- cmd/client/prediction.go | 7 ++++--- cmd/client/web/game.js | 2 +- cmd/client/web/index.html | 2 +- cmd/client/web/main.wasm | Bin 27717856 -> 27717856 bytes pkg/server/room.go | 4 ++-- 6 files changed, 12 insertions(+), 11 deletions(-) diff --git a/cmd/client/game_render.go b/cmd/client/game_render.go index db4c98d..e3a1089 100644 --- a/cmd/client/game_render.go +++ b/cmd/client/game_render.go @@ -84,8 +84,8 @@ func (g *Game) UpdateGame() { // Lokale Physik sofort anwenden (Prediction) g.ApplyInput(input) - // Sanfte Korrektur anwenden (schnellere Interpolation für weniger Ruckeln) - const smoothingFactor = 0.4 // Erhöht von 0.2 auf 0.4 + // Sanfte Korrektur anwenden (langsamer bei 20 TPS für weniger Jitter) + const smoothingFactor = 0.15 // Reduziert für 20 TPS (war 0.4 bei 60 TPS) if g.correctionX != 0 || g.correctionY != 0 { g.predictedX += g.correctionX * smoothingFactor g.predictedY += g.correctionY * smoothingFactor @@ -93,8 +93,8 @@ func (g *Game) UpdateGame() { g.correctionX *= (1.0 - smoothingFactor) g.correctionY *= (1.0 - smoothingFactor) - // Korrektur beenden wenn sehr klein (kleinerer Threshold) - if g.correctionX*g.correctionX+g.correctionY*g.correctionY < 0.25 { + // Korrektur beenden wenn sehr klein + if g.correctionX*g.correctionX+g.correctionY*g.correctionY < 1.0 { g.correctionX = 0 g.correctionY = 0 } diff --git a/cmd/client/prediction.go b/cmd/client/prediction.go index 3d0c4cb..7d15681 100644 --- a/cmd/client/prediction.go +++ b/cmd/client/prediction.go @@ -38,7 +38,7 @@ func (g *Game) ApplyInput(input InputState) { // Sprung if input.Jump && g.predictedGround { - g.predictedVY = -42.0 // war -14.0 bei 60 TPS (-14.0 * 3) + g.predictedVY = -30.0 // Reduziert für besseres Spielgefühl bei 20 TPS g.predictedGround = false } @@ -114,8 +114,9 @@ func (g *Game) ReconcileWithServer(serverState game.PlayerState) { diffX := replayX - g.predictedX diffY := replayY - g.predictedY - // Nur korrigieren wenn Differenz signifikant (reduzierter Threshold für weniger Ruckeln) - const threshold = 2.0 // Reduziert von 5.0 auf 2.0 + // Nur korrigieren wenn Differenz signifikant + // Bei 20 TPS größerer Threshold wegen größerer normaler Abweichungen + const threshold = 5.0 // Erhöht für 20 TPS (war 2.0) if diffX*diffX+diffY*diffY > threshold*threshold { // Speichere Korrektur für sanfte Interpolation g.correctionX = diffX diff --git a/cmd/client/web/game.js b/cmd/client/web/game.js index ba4d6e9..038d271 100644 --- a/cmd/client/web/game.js +++ b/cmd/client/web/game.js @@ -234,7 +234,7 @@ window.onWasmReady = function() { }; // Cache Management - Version wird bei jedem Build aktualisiert -const CACHE_VERSION = 1767637179526; // Wird durch Build-Prozess ersetzt +const CACHE_VERSION = 1767639190355; // Wird durch Build-Prozess ersetzt // Fetch mit Cache-Busting async function fetchWithCache(url) { diff --git a/cmd/client/web/index.html b/cmd/client/web/index.html index 2f2d503..9b73def 100644 --- a/cmd/client/web/index.html +++ b/cmd/client/web/index.html @@ -291,7 +291,7 @@ diff --git a/cmd/client/web/main.wasm b/cmd/client/web/main.wasm index e3e9e3e842b6ce7df5368f4cdcff87c97887e85a..868162e94fd4122cda1c462cfbf3d70fc69b5088 100755 GIT binary patch delta 1888 zcmXZYcUaYR6vuIYf}-M9+~6LFS1y;!mFpG-ks&e^aUu6|aRDwA$H(nQR8(-{-lN2J zhD|Fo+hp0ap$!{W8trM{Pj#N>{d%5r{yf*N?`w3;R34h{iHl4b>0UHEp*T6IC@;^E zJ}f3KydXICxqS#bhvUk>8cg89Z7Ezn6tDa1s58Xu?hOCk7A$i9y6*VhAym7)Hbp!-)|@ED=YHB;tutL;{gWBoWEP zXd;CeL!=UEL^_c{j3veqnZ$S^iXU^q%Q`(^b<4rVmXYnLajMGhH`*V*1qdndx)W4bvB< zFHK*WzBb)7ePjC8^j+1t;9Fr=df9V)E^kz{&*S#E?4CTQ#}%FD^t#-+cBjJ?ZO?W4 zBKtX<-pGo;np+|M4oClp5?jqJ({0oDrW(@^rXNi|nSM6?V*1teo9TDcAErM|f0_O^ z-6^%zSY;+rTlfioQAgAj0ivF$FB*tI(NHuJjYSjDR5TOKMGMhV1c_FnwP+*Sigu#C z=pceci0CLfiO!;n=qkF2?xKh2DSC-e(OZOxKEfvYif~~U5yBxNg;PWcm*^*=h1)uB ztLbmWcMV9g>ROHcv&#@Pz%mRJgT!DlL<|+fM2r|NMu=DuCq{~RF-jzeM3E$t#b}Wt z#)wprCelTQ7%Rq!Ofg<$i3wt&m?S2PDI!};6*=e61h1f0jh`nN;*e?!nFwLVC`k%%b>^;3Q{?!yT94D2cHbO^qnY$WI#^5}WJDpA_v% zDRkzQCOVwyan8JjWgsk~G2uaY5>1Gvgcs3_Xil^syor`XE5e6pO|&7}677igLv)Mj3*L^2}B~1 zL?ja_#6%*MNFyc@lZh!rIx&@)MocGW5HpEc#B5>?;U+SOOd^ZOCUS^eVlFX{$Rp+x z`9uM+fG8x2h=s%=qL^4rEFnsWQer8wj95;rAk5EK603;S#2TWESWB!U))OQ)5aq;1 zViU2M*g|Y2wh`Nj3StMblh{S951H^;GL&U?xdEybGmbgGXN<2n9PCP+8Njybd zB%UUoA)Y0kBc3NN5ibyzi5H2Nh?j|1h*yc%h}X}f?nbrO!2{a$%2_pag9H9QMphk< z^k~$>3iNQD4f1FdZU1k#E30ej{H)uRmuu<*tSja9HFdT1HCHYbSTVKdx?J`4wAz$k z@V{z$!}O-I%!^r7h^(@oPY)5oUUrcX?tn(9rTnLamt zVfxbamFa8KH>PiEFZkaHx;7xoo#V8Hhq>L6ZoAtZn(fGP*dpvhA|t{hBW&4WHhV@+ zXt>j!S?S$yC%`k*8D%REZn$Im&h)*h!SsXaN7GNHpH07*el`7O`rY)0=}*&NroT=9 zYzc0#DomoW@DQG&iD)XkL^IJ`v=H8+rD!F5L~GGTv=!|{d(lDoijJa_=q$R3uA-ap z6aFGVbQe8DPti;C7JWot(NFXj14N)0D1yWw5iACa5D_ZEgiYAR5aAHvB0@Mtq;)a4 zAWazw6}E9QwjF<<110=e7iZm~z~75hY`*e?!