From 835a5159cf71bd73f955d2a33c00d56e1ad33564 Mon Sep 17 00:00:00 2001 From: Jeremy Penner Date: Mon, 11 Feb 2019 23:23:00 -0500 Subject: [PATCH] Implement time-based lerp, footer animation --- defs.jor | 3 ++- game.exe | Bin 107402 -> 108864 bytes game.jor | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- game.prj | Bin 5265 -> 5265 bytes jorth.c | 27 ++++++++++++++++++++++++-- jorth.h | 1 + testbed.c | 6 +++++- 7 files changed, 88 insertions(+), 6 deletions(-) diff --git a/defs.jor b/defs.jor index 8b161a3..360ce80 100755 --- a/defs.jor +++ b/defs.jor @@ -8,8 +8,9 @@ s" jorth.log" open const LOGFILE : 2dup over over ; : noop ; + : defer word new-word docolon , ' noop , ' ret , ; -: is ( cp -- ) word lookup drop cell + ! ; +: redefine ( cp cpdeferred ) cell + ! ; : decompile word lookup if 1 begin ( cp i ) diff --git a/game.exe b/game.exe index 99625a719c1887a4faa9bf88210032efaf4e0e4e..89f507c06d75fa8efc5549cfedb5259f97469a8c 100755 GIT binary patch delta 25272 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 I^(^)O0D+L3#{d8T delta 24000 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 ( range value -- f ) + over swap clamp0 >fix swap >fix fix/ ; +: fix fix* range ( start end -- start range ) over - ; +: >range r< >range r< rot - >ratio lerpr ; +: lerp ( start end duration timer -- i ) + @ ticks udelta ( start end duration delta ) + >ratio lerpr ; + +: triggered ( duration timer -- b ) + dup r> @ ticks udelta ( duration delta ) + 2dup <= if drop r< +! 1 else drop drop 0 then ; + +: now! ( timer -- ) ticks swap ! ; + : tick-player 0 ^LEFT key-down if 3 - W player entity.dir ! then ^RIGHT key-down if 3 + E player entity.dir ! then @@ -59,6 +85,33 @@ defentity player ^DOWN key-down if 3 + S player entity.dir ! then player entity.y +! ; +var MODE-TRAVEL +var MODE-TEXT +var split-timer + +: enter-mode-text + split-timer now! + MODE-TEXT @ ' tick redefine ; + +: mode-travel + tick-player + ^SPACE key-pressed if + enter-mode-text + then ; +' mode-travel MODE-TRAVEL ! + +: mode-text-hide + 24 0 10 split-timer lerp dup split-screen + 0 = if ' mode-travel ' tick redefine then ; + +: mode-text-show + 0 24 10 split-timer lerp split-screen + ^SPACE key-pressed if + split-timer now! + ' mode-text-hide ' tick redefine + then ; +' mode-text-show MODE-TEXT ! + : draw-player player entity.x @ player entity.y @ @@ -75,5 +128,5 @@ defentity player 600 600 2 draw-sprite draw-screen ; -' tick-player is tick -' full-draw is draw +MODE-TRAVEL @ ' tick redefine +' full-draw ' draw redefine diff --git a/game.prj b/game.prj index de0d414003699f45d3cf66c889375ec93ea810a2..dca032a993458f6c01e40b9205a6566e96bf58cc 100755 GIT binary patch delta 214 zcmbQJIZ<tatrZ%RMkQr#g=2Rga FCID>3Mp*y= delta 228 zcmbQJIZ<>VDg&$Q9zjY6oVH71A_pAAj2%6T312)dfh}%zyJT)c8b5c zYss)8zk%UQH9G^dmw!-*hr)kudsn{@PaoG{Jr9QeKplP|uE8Nrt}c4cKvOsv#2L;` z@$zG5P~eCW6Jr3G#Ko|9sVmSt{tG=I1{Z@egYZGwjsHQMVAua3>) +BINOP(f_shl, u, <<) + +void f_itofix() { + TOP().i = TOP().i << FIX_FRACTIONAL_BITS; +} +void f_fixtoi() { + TOP().i = TOP().i >> FIX_FRACTIONAL_BITS; +} +void f_fixmul() { + ST1().i = ((long)ST1().i * (long)TOP().i) / (1 << FIX_FRACTIONAL_BITS); + DROP(1); +} +void f_fixdiv() { + ST1().i = ((long)ST1().i * (1 << FIX_FRACTIONAL_BITS)) / TOP().i; + DROP(1); +} void f_eq0() { TOP().i = (TOP().i == 0); @@ -217,13 +234,13 @@ void f_word() { int key = ' '; int ibuf = 0; - while (key == ' ' || key == '\n' || key == '\r') { + while (key == ' ' || key == '\t' || key == '\n' || key == '\r') { f_key(); key = TOP().i; DROP(1); } - while (key != ' ' && key != '\n' && key != '\r' && key != 0) { + while (key != ' ' && key != '\t' && key != '\n' && key != '\r' && key != 0) { buf[ibuf++] = key; f_key(); key = TOP().i; @@ -794,6 +811,12 @@ void f_init() { CDEF("&", f_bitand); CDEF("|", f_bitor); CDEF("^", f_bitxor); + CDEF("<<", f_shl); + CDEF(">>", f_shr); + CDEF(">fix", f_itofix); + CDEF("