From 5fc17f6a00b93c419c278c0959ff0a04b645439d Mon Sep 17 00:00:00 2001 From: rgimad <33692565+rgimad@users.noreply.github.com> Date: Thu, 9 Jan 2025 23:11:31 +0300 Subject: [PATCH] fixed bug with game over on machines where nanosec counter fills up quicky --- dino | Bin 24116 -> 24184 bytes main.c | 4 ++++ misc.c | 4 +++- runner.c | 19 +++++++++++++------ runner.h | 1 + 5 files changed, 21 insertions(+), 7 deletions(-) diff --git a/dino b/dino index b7aad60659f8d74c723450776e990dde3bede20b..67fd2b4d55a701b6cbcab35c7186467397f71e0e 100644 GIT binary patch delta 7160 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 delta 7168 zcmai23vg4{nZ8%(fFLrm!SVxSY!~APHrS4N7(&1hR2#79b%KMNK%fwu2d~bSPPW@J zDkI!jxd}{jQg(NmOij~nv&|;mDVdF&60if)kT#v|w%J`se5upY^tiZFw>7QOIB38B zzxPTqFkO$2?tjktU*~_FNAk4(%4vOjB)qvZyrrShqiI?L+L8w}E%XPSTVj`{CD7m0 zrD-jgyRco;-V}sEe$)skD1HO`CDY2-l`|$A-!BbAy4SfOiw~~ z?7UA+lTDtV-%r&n zlx5K*CXDyI6|wW)Bcncuu(nlbmWV|(Ez?g0Cs?&ywe>DdYm194(HAm8E&_b(Txa~( zM@C6mQxNl({@VZtzBgz_d^Lmd99ouxP}!C}3BhC{^opo>hH zY=(F^IWmheiBUYv!}2k2wdZuVJn3EKBPEPfP?Nv*)-_W{9}Jw)V@W?7Fz}5578WEH z;fekXf@-k&@}S%x)-9sB1S#JuE)fWI0lrJ%d-yTz^%-DesOMxt)Ol35{6H)WnK0f^ zB$;hLFGT@dJ5$z8y@T)`nOd=ithnMr;Mh`LPZGUYQUrP`)7|)BOPq~pvc+Aa#0I95 z3*_5VYoa%LUMD5P*AwKHjD|@=Ez2hj{3COLFlm} zfBFSGzD$m?BgwyN^3b%x&(Q3VL1xbP;XU8&I&dJzKdyGy$qz-`H)NMHNpL-{>tgZ7ix@dmnr|f1x{}a zO4%mD)Yx{pH|ITlj%=OzA;f>Dd;m4 z85@fDt=s_S@|v^e$xdtkjhkk_m~D8G}p3|d^y+f{fK{zOTj5{8=d46sln z`bPEL`*@JLb*wzjT`F6(}})}U{~yLC9`A{L1r^ll{4gY4O`z> zQV$%X8knFx5%e~4Z#C09p(8hircdPx+a?dpj^1al*uQ{qysEDv?WT2z-mGv-ppsAk z#930hADaS@rDJ+|+rt7&EWov%-{RZ^q8XFf|2qewoq6?rYXf8J3iHmIjEKvw| zS;2h-U*t@Si=An_xOfn7BFf|s15_S)JRGcGu8>K*@Sz!eh|WkXv#ro2*9P;uNcv59 z#50XYS{Q2oHCjo?Svh5ADmW>$5S*4M< z^3{S*=vDIFf{I!B>^Glk!dZ!(w^Qa8w$CIXw)M!ua;qPtm{V0cn-D0j&B$=g1w);|+DO*r zkFmx-{ZTeH6v?m6DbnAQFVA^J_siXLYa8p~d1yHXla#SZ{B}pP?PEs#*!;hOgw&jI zd3J8$> znf;?y=M|c%mz&Gxd4B(Cd7!L7|DEh9Tjlxa)AC%|-JYD^%EIzBf#rlA8M8VSp|6p9 z$}9AI`2>E?o%&w+YQ5dvdcQ)n*sM_zyn@=sT(r~ zGsF8`FfKmpf|KJ*K3g$2`uuMwl>8{~KtkPFLLViraGA8kLr^ng26wvXw+@kwz49`L zqxuR`KuP3}6DAZ92|7>Uj6y1$KtIlc(g;&I6CRbT7BuRQ$O8+CqO^3C3nC{CI3p-& z?TkR)B>S9yaso$b3qU-{4=Y>ry(CDVA@@{OmYiot_#J!E9YDP@o=Q3U z;tN$JdYk-VRmBDhvFwH21_P>nxCCM_Z7(9H-C5l`leNPR2r@I0q?0v+IIc8Rm)H8R z5Za`B=70hm5Mr)W~d$HVgV>J=>%w+2qw ze=%-!4=c9VrXd9O$9&S5Pc^2`)D0Dr%W7JqByMOaWzvw~oO3eI5(g=(*zcF#x_s#u z!+$;>4)jprw8UeW8saG{NDQot_Cn}@WHFmesHB4KWjJ1fD$1%oKEx@}8@{#{>Rn^? zK4ZYJ?aW$_;<*7wUywUY)X8`4 z#NPA=gdCT#EbW}2=Tc?sm{p&s5M|-Q5?MJ0ORUu7{k79;v+5iZ6CcBgpB!gZKN@4< z@_21Ql-Op>*#m5os~cbO(q+yLX2)<@B1i>GL@7qn5%W0r?0`_4ZBal|+dfL$QeC=a zo8eDU6if9;m$)KOi)oV?V@PX8pdylMT77<8CWayei=6%gB&S!N}6BXnF2v)5i0TtDfnB8a{oA*H}7Ol~D$nc`4{0Y>}mUws!?;Cyc@}j@f?~xsg z=irjCZ*fuOaTq5a9%7Z^;fq+sNY zmLsEt6(8=WPlp-l#o1t7{(F6S=x1DyZ$Nk|@+=TumA?bGXQi*`{W-z7~%qECM6_E6|^u*^_oJiA7^N1{K=$8WEWevuJIZ-wxE=siNmUk;=Z0GgRY zZq?~U4qv+x|L2F4aPXD%kM4OZ?@S}IopYMREm&W z-6~_`>%&Q_bBqqyCVPG?+w<=Bxfze8aWRA?I2Dr4QaCx8Iam5{`YDUj6fE^*gcT#kn%GyJL)YgD=t) z2`PmXhY8u+_F`75%YR%pKbnrSl}vn!l*}Q%xaVXW-p$FU!OF}z4Ft+D`i|5y<=>!r z;3gVN{D1^S#wv$+5w20(IH#IM-s8;)$sl(uFDfJx*a)%YysWun%ZuidBI)!vMoFLs z@MCg0AR_2u(C$clN*l{pmgBXqbTJIRjb$|#LwIU&3JTH?p9 zmEHP(Q_*J!yJwF7PI92RISVbEbfmm>R-Nw%+?tNY}v6}uX$`SR>O$GwBl z1d20wD`L5ECC>jY(FCsKvTQ|A{%S=xp5QR2`%XQ)vP{>j<=Co_{PrEY9caO-AL-Sn zFs4`h9P5LSI%Y!8TCo8iKh9qLS>k`4IoYuKcHbqp^XTeYpSI1WlFzL!t*>-CX+7|+ zh{Qs@+R^Ss q+kr-Zhw%LZ+F`V#XiuOWM|%eC>u4v@{sryd&|X3N0oni>{rw+}s}AJ= diff --git a/main.c b/main.c index 6d3f23e..a25e7dd 100644 --- a/main.c +++ b/main.c @@ -111,6 +111,10 @@ int main(int argc, char* args[]) { // dbg_printf("frameTime = %d\n", frameTime); if (frameTime < FRAME_TIME) { // 1000ms/60frames = 16.(6) // printf("frameTime = %d\n", frameTime); + if (runner.crashed) { + // dbg_printf("runner.timeAfterCrashedMs +=\n"); + runner.timeAfterCrashedMs += FRAME_TIME - frameTime; + } graphicsDelay(FRAME_TIME - frameTime); } } diff --git a/misc.c b/misc.c index 12b9508..a9157df 100644 --- a/misc.c +++ b/misc.c @@ -22,5 +22,7 @@ void intToStr(int num, int ndigits, char* result) { } int getTimeStamp() { // in ms - return (_ksys_get_ns_count()/1000000); + uint64_t x = 0; + x = _ksys_get_ns_count(); + return (x/1000000); } diff --git a/runner.c b/runner.c index 7759236..52ca27d 100644 --- a/runner.c +++ b/runner.c @@ -13,6 +13,7 @@ void runnerInit() { runner.activated = false; runner.playing = false; runner.crashed = false; + runner.timeAfterCrashedMs = 0; runner.paused = false; runner.inverted = false; runner.playingIntro = false; @@ -83,12 +84,17 @@ void runnerOnKeyUp(int key) { } else if (runner.crashed) { // Check that enough time has elapsed before allowing jump key to restart. - int deltaTime = getTimeStamp() - runner.time; - if (deltaTime < 0) { - deltaTime = DELTA_MS_DEFAULT; - } - //printf(".deltaTime = %d\n", deltaTime); - if (key == RUNNER_KEYCODE_RESTART || (deltaTime >= RUNNER_GAMEOVER_CLEAR_TIME && (key == RUNNER_KEYCODE_JUMP_1 || key == RUNNER_KEYCODE_JUMP_2))) { + + int now = getTimeStamp(); + int deltaTime = now - runner.time; + // if (deltaTime < 0) { + // deltaTime = DELTA_MS_DEFAULT; + // runner.time = 0; + // } + + // dbg_printf(".now = %d .deltaTime = %d runner.time = %d\n", now, deltaTime, runner.time); + if (key == RUNNER_KEYCODE_RESTART || (runner.timeAfterCrashedMs >= RUNNER_GAMEOVER_CLEAR_TIME && (key == RUNNER_KEYCODE_JUMP_1 || key == RUNNER_KEYCODE_JUMP_2))) { + //dbg_printf("timeAfterCrashedMs = %d\n", runner.timeAfterCrashedMs); runnerRestart(); } } @@ -235,6 +241,7 @@ void runnerRestart() { runner.runningTime = 0; runner.playing = true; runner.crashed = false; + runner.timeAfterCrashedMs = 0; runner.distanceRan = 0; runner.currentSpeed = RUNNER_SPEED; runner.time = getTimeStamp(); diff --git a/runner.h b/runner.h index d575f99..2862c91 100644 --- a/runner.h +++ b/runner.h @@ -52,6 +52,7 @@ typedef struct { bool activated; bool playing; bool crashed; + int timeAfterCrashedMs; bool paused; bool inverted; bool invertTimer;