diff --git a/footer.tif b/footer.tif index 7302738..431f113 100755 Binary files a/footer.tif and b/footer.tif differ diff --git a/game.exe b/game.exe index 8a7e26c..f615d95 100755 Binary files a/game.exe and b/game.exe differ diff --git a/game.jor b/game.jor index e29a9cb..546e3df 100755 --- a/game.jor +++ b/game.jor @@ -77,6 +77,37 @@ defentity player : now! ( timer -- ) ticks swap ! ; +( F O O T E R ) +var footer-y +0 footer-y ! + +: draw-footer footer-y @ split-screen ; + +: text1 6 4 rot text ; +: text2 6 12 rot text ; +: clear s" " dup text1 text2 ; + +var footer-timer + +: move-footer-to ( ytarget -- ) + footer-y @ swap ( from to -- ) + footer-timer now! + begin + 2dup 10 footer-timer lerp ( from to now -- ) + dup footer-y ! + over != ( from to -- ) + while + suspend + repeat drop drop ; + +: show-footer 24 move-footer-to ; +: hide-footer 0 move-footer-to ; + +: say1 ( s -- ) clear text1 show-footer ^ENTER wait-key ; +: say2 ( s1 s2 -- ) clear text2 text1 show-footer ^ENTER wait-key ; + +( T I C K ) + : tick-player 0 ^LEFT key-down if 3 - W player entity.dir ! then ^RIGHT key-down if 3 + E player entity.dir ! then @@ -85,32 +116,30 @@ defentity player ^DOWN key-down if 3 + S player entity.dir ! then player entity.y +! ; -var MODE-TRAVEL -var MODE-TEXT -var split-timer +var MODE-MOVE +var MODE-WAIT -: enter-mode-text - split-timer now! - MODE-TEXT @ ' tick redefine ; +( J O B ) +: listen-for-jobs activate blah + begin receive + MODE-WAIT @ ' tick redefine + execute + hide-footer + MODE-MOVE @ ' tick redefine + again ; -: mode-travel +task const JOB +JOB listen-for-jobs + +: hello-world s" Hello, world!" say1 s" How are you" s" today?" say2 ; + +: mode-move tick-player ^SPACE key-pressed if - enter-mode-text + ' hello-world JOB send 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 ! +' mode-move MODE-MOVE ! +' noop MODE-WAIT ! : draw-player player entity.x @ @@ -126,7 +155,8 @@ var split-timer draw-player 50 50 0 draw-sprite 600 600 2 draw-sprite - draw-screen ; + draw-screen + draw-footer ; -MODE-TRAVEL @ ' tick redefine +MODE-MOVE @ ' tick redefine ' full-draw ' draw redefine diff --git a/game.prj b/game.prj index 0919c51..17f475b 100755 Binary files a/game.prj and b/game.prj differ diff --git a/kbd.h b/kbd.h index 9fefd03..624a7b7 100755 --- a/kbd.h +++ b/kbd.h @@ -16,6 +16,7 @@ unsigned char kbd_wait(); #define keyIsDown(k) (keybuf[k] & KEY_SIGNAL) #define keyWasPressed(k) ((keybuf[k] & 0x0f) == KEY_PRESSED) +#define consumeKey(k) (keybuf[k] = keyWasPressed(k) ? KEY_DOWN : keybuf[k]) #define keyWasReleased(k) ((keybuf[k] & 0x0f) == KEY_RELEASED) #define K_ESC 1 diff --git a/testbed.c b/testbed.c index 13d46e3..d80216b 100755 --- a/testbed.c +++ b/testbed.c @@ -115,7 +115,9 @@ void f_seremit() { } void f_keyWasPressed() { - TOP().i = keyWasPressed(TOP().i); + int k = TOP().i; + TOP().i = keyWasPressed(k); + consumeKey(k); } void f_keyIsDown() { TOP().i = keyIsDown(TOP().i); @@ -136,7 +138,7 @@ void f_splitscreen() { DROP(1); } -void f_text() { // ( col y s -- ) +void f_text() { // ( col line s -- ) text_draw(ST2().u + (ST1().u * PAGE_STRIDE), TOP().s); DROP(3); } diff --git a/tiff.c b/tiff.c index 72ee169..cdb2a2f 100755 --- a/tiff.c +++ b/tiff.c @@ -70,7 +70,7 @@ int tifLoadEGA(FILE *f, TifImageMeta_t meta, unsigned int vidOffset, int maxY, u volatile unsigned char far *out = &VID[vidOffset]; unsigned char b, g, r, i; - if (meta.width > MAX_WIDTH || (meta.width % 16) != 0) { + if (meta.width > MAX_WIDTH || (meta.width % 8) != 0) { return 0; } setWriteMode(0); diff --git a/tiff.h b/tiff.h index 3e1101f..3af7942 100755 --- a/tiff.h +++ b/tiff.h @@ -10,7 +10,7 @@ typedef struct { unsigned long stripOffsets; } TifImageMeta_t; -#define MAX_WIDTH 320 +#define MAX_WIDTH 328 TifImageMeta_t tifLoadMeta(FILE *f); int tifLoadEGA(FILE *f, TifImageMeta_t meta, unsigned int vidOffset, int maxY, unsigned int w);