diff --git a/game.exe b/game.exe index bfea347..108de1e 100755 Binary files a/game.exe and b/game.exe differ diff --git a/game.jor b/game.jor index 2f784f7..e4686d8 100755 --- a/game.jor +++ b/game.jor @@ -33,6 +33,7 @@ var player.prevdir 2 const DRIVING 4 const NOCLIP 8 const ISMARY +16 const ISJEANNE : player.driving? player.state DRIVING f@ ; @@ -45,7 +46,10 @@ var player.prevdir : {player} player.driving? if {car-drive} - else player.state ISMARY f@ if {pmary} else {ppete} then + else + player.state ISMARY f@ if {pmary} + else player.state ISJEANNE f@ if {pjeanne} + else {ppete} then then then ; : player.canmove? ( x y -- ) @@ -170,7 +174,7 @@ var glitchlevel MODE-MOVE @ ' tick redefine ' full-draw ' draw redefine :| player yield - ISMARY player.state f@ if p_jeanne yield then + player.state ISMARY f@ if p_jeanne yield then CHUCK-FOLLOW flag@ if p_chuck yield then done |; ' party redefine diff --git a/game.prj b/game.prj index 54d2cbd..780f942 100755 Binary files a/game.prj and b/game.prj differ diff --git a/goth.chr b/goth.chr deleted file mode 100755 index 75f9a7e..0000000 Binary files a/goth.chr and /dev/null differ diff --git a/jiles.jor b/jiles.jor new file mode 100755 index 0000000..8217dcf --- /dev/null +++ b/jiles.jor @@ -0,0 +1,29 @@ +: blah ' seremit task-emit ! ; +blah + +s" game.log" open seekend fdeactivate const LOGFILE +: emit-log ' fputc LOGFILE withfp ; +: atexit LOGFILE factivate close ; + +: start-repl activate blah ' emit-log task-echo ! + s" .:: J O R T H ( jean forth) ::." type cr + begin receive loadstring s" ok" type cr again ; +task const REPL +REPL start-repl + +intern input.jor +input.jor loadfile + +: worldpos>tilepos 4 >> swap 4 >> swap ; +: tilepos>mapindex mapsize drop * + ; +: tick + MOUSEL clicked if + 0xf5 mousepos worldpos>tilepos tilepos>mapindex map + b! + then + tick-debounce + ; + +: draw + 0 0 scroll + mousepos 4 draw-sprite + draw-screen ; \ No newline at end of file diff --git a/litt.chr b/litt.chr deleted file mode 100755 index 08c3067..0000000 Binary files a/litt.chr and /dev/null differ diff --git a/mtrail1.jor b/mtrail1.jor index 73561c8..cd152ee 100755 --- a/mtrail1.jor +++ b/mtrail1.jor @@ -1,16 +1,18 @@ ( T R A I L 1 ) -39 71 N ' {car} defentity car +( 39 71 N ' {car} defentity car car :touch move-player 1 player.state DRIVING f! ;entity +) :noname 0 player.state DRIVING f! -:| player.driving? not if car yield then +( :| player.driving? not if car yield then done |; ' entities redefine +) :| touch-begin S leaving? dup @@ -26,4 +28,6 @@ touch-next 3 56 2= dup touch-last |; ' player-touch redefine s" trail1.map" load-map +1 player.state ISMARY f! + ; ' onload redefine diff --git a/sans.chr b/sans.chr deleted file mode 100755 index c38bc69..0000000 Binary files a/sans.chr and /dev/null differ diff --git a/testbed.c b/testbed.c index d22d12a..2ca8a76 100755 --- a/testbed.c +++ b/testbed.c @@ -263,7 +263,7 @@ void f_glitch() { } } -void game_f_init(char *exe) { +void game_f_init(char *exe, char *bootjor) { f_init(exe); CDEF("seremit", f_seremit); CDEF("key-pressed", f_keyWasPressed); @@ -288,7 +288,7 @@ void game_f_init(char *exe) { CDEF("glitch", f_glitch); CDEF("unfuck", tile_init); - f_loadjor("gameboot.jor"); + f_loadjor(bootjor); f_atexit = f_lookupcp("atexit"); atexit(f_cleanup); @@ -329,13 +329,13 @@ void do_repl(char *exe) { int main(int argc, char *argv[]) { cell tick, draw; + char *bootjor = "gameboot.jor"; if (argc > 1) { - do_repl(argv[0]); - return 0; + bootjor = argv[1]; } ser_init(SER_COM2, BAUD_19200, SER_8N1); game_init(); - game_f_init(argv[0]); + game_f_init(argv[0], bootjor); tick = f_lookupcp("tick"); draw = f_lookupcp("draw"); diff --git a/tiles.c b/tiles.c index 9e5cc77..8d05dd8 100755 --- a/tiles.c +++ b/tiles.c @@ -32,6 +32,16 @@ void blitTile(unsigned int offsetFrom, unsigned int offsetTo) { } } +void blitSolidBlock(unsigned int offsetTo, unsigned char color) { + int y; + setPlaneColor(color); + for (y = 0; y < 16; y ++) { + VID[offsetTo] = 0xff; + VID[offsetTo + 1] = 0xff; + offsetTo += PAGE_STRIDE; + } +} + void blit32x32(unsigned int offsetFrom, unsigned int offsetTo) { int y; for (y = 0; y < 32; y ++) { @@ -74,8 +84,27 @@ int prepareBuffer(int pageX, int pageY) { unsigned char ibuffer = screen.nextBuffer; screen.nextBuffer = nextBufferIndex(ibuffer); *dirty = ibuffer; - for (i = 0; i < BUF_WSIZE; i ++) { - screen.buffer[ibuffer][i] = (&screen.memTiles[tile * BUF_WSIZE])[i]; + if ((tile & 0xf0) == 0xf0) { + unsigned int val = (tile & 0x01) ? 0xffff : 0x0000; + for (i = 0; i < 16; i ++) { + screen.buffer[ibuffer][i] = val; + } + val = (tile & 0x02) ? 0xffff : 0x0000; + for (i = 16; i < 32; i ++) { + screen.buffer[ibuffer][i] = val; + } + val = (tile & 0x04) ? 0xffff : 0x0000; + for (i = 32; i < 48; i ++) { + screen.buffer[ibuffer][i] = val; + } + val = (tile & 0x08) ? 0xffff : 0x0000; + for (i = 48; i < 64; i ++) { + screen.buffer[ibuffer][i] = val; + } + } else { + for (i = 0; i < BUF_WSIZE; i ++) { + screen.buffer[ibuffer][i] = (&screen.memTiles[tile * BUF_WSIZE])[i]; + } } screen.bufferOffset[ibuffer] = screen.pageOffset[screen.currentPage] + (pageX << 1) + (pageY * PAGE_STRIDE * 16); @@ -183,9 +212,10 @@ void drawScreen() { for (y = startY; y < startY + PAGE_TILES_H; y ++) { for (x = startX; x < startX + PAGE_TILES_W; x ++) { if (dirty[di++] == D_BGTILE) { - blitTile( - screen.tilesOffset + (screen.map[x + (y * screen.w)] << 5), - drawOffset); + char tile = screen.map[x + (y * screen.w)]; + if ((tile & 0xf0) != 0xf0) { + blitTile(screen.tilesOffset + (tile << 5), drawOffset); + } } drawOffset += 2; } @@ -204,6 +234,21 @@ void drawScreen() { } } setAllPlanes(); + di = 0; + drawOffset = screen.pageOffset[screen.currentPage]; + for (y = startY; y < startY + PAGE_TILES_H; y ++) { + for (x = startX; x < startX + PAGE_TILES_W; x ++) { + if (dirty[di++] == D_BGTILE) { + char tile = screen.map[x + (y * screen.w)]; + if ((tile & 0xf0) == 0xf0) { + blitSolidBlock(drawOffset, tile & 0x0f); + } + } + drawOffset += 2; + } + drawOffset += PAGE_STRIDE * 15; + } + setDisplayOffset(scrollOffset); setHorizontalPan(screen.scrollX & 0x07); diff --git a/trail1.jor b/trail1.jor index 5f8132e..a62dc9c 100755 --- a/trail1.jor +++ b/trail1.jor @@ -43,8 +43,10 @@ CHUCK-GONE flag@ if then touch-next 3 56 2= dup if + 1 glitchlevel ! pete say" This is where I buried it." say" All those years ago." + 0 glitchlevel ! then touch-last |; ' player-touch redefine diff --git a/trip.chr b/trip.chr deleted file mode 100755 index d1f79f8..0000000 Binary files a/trip.chr and /dev/null differ