From 20e7089b842d1a33de7d92423ed5f23b1fc8f3f0 Mon Sep 17 00:00:00 2001 From: Jeremy Penner Date: Sun, 24 Feb 2019 17:26:28 -0500 Subject: [PATCH] Pete's house map, map resizing words --- defs.jor | 14 ++++++++++---- footer.tif | Bin 4332 -> 4332 bytes game.exe | Bin 111924 -> 112287 bytes game.jor | 21 ++++++++++++++++++--- game.prj | Bin 5265 -> 5265 bytes jorth.c | 30 +++++++++++++++++++----------- pete.map | Bin 0 -> 524 bytes tiles.tif | Bin 4078 -> 4078 bytes 8 files changed, 47 insertions(+), 18 deletions(-) create mode 100755 pete.map diff --git a/defs.jor b/defs.jor index ef5cd72..fb3f50c 100755 --- a/defs.jor +++ b/defs.jor @@ -19,11 +19,17 @@ s" jorth.log" open seekend deactivate const LOGFILE : defer word new-word docolon , ' noop , ' ret , ; : redefine ( cp cpdeferred ) cell + ! ; -: for ( from to -- ) here ' r> , ' r> , ; immediate ( r: to from ) +: +towards ( from to -- from+-1 ) + over > if 1 + else 1 - then ; + +: for ( from to -- ) ' r> , here ' r> , ; immediate ( r: to from ) : i ' r@ , ; immediate -: next ' r< , 1 lit ' + , ' r< , ( from+1 to ) - ' 2dup , ' - , ' BNZ_ , , - ' drop , ' drop , ; immediate +: next ' r< , ' r@ , ' +towards , ( from+1 r: to ) + ' dup , ' r@ , ' = , ' BZ_ , , + ' rdrop , ' drop , ; immediate + +: min ( x y -- x|y ) 2dup > if swap then drop ; +: max ( x y -- x|y ) 2dup < if swap then drop ; : decompile word lookup if 1 begin ( cp i ) diff --git a/footer.tif b/footer.tif index 431f11333a35de1b69f0f8a4f381737b0ca29803..99812bc19c1a0178b6f9522aca9d9c3b2e79f5c1 100755 GIT binary patch delta 27 lcmV+$0ObGdA?zWL=97^Dos*ye2a_%WuajU7q_f=u4-T>V3se9A delta 29 ncmV+&0OJ4bA?zWL=97~Hdy}98DUtD+k^u{oiUF^)-2x8|)O8HW diff --git a/game.exe b/game.exe index 6a08a8077b761a7efdde2a3175cf9f8116fcaed5..68e915946cc5579c82a14c3c675bef4353f8c9f0 100755 GIT binary patch delta 24423 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 WC7-jWD#u=Za(Z>{RchVKw*5bmJ>=y8 delta 24514 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 + swap ; var tileselect -3 const MAXTILE +8 const MAXTILE : mouseworldpos mousepos scrollpos +pos ; : mousetile mouseworldpos 4 >> swap 4 >> swap ; @@ -142,6 +142,19 @@ var tileselect MOUSEL mousedown if tileselect @ mousetile tile b! then ; +: copy-mapseg ( neww oldw y -- ) + r> ( oldw neww r: y ) + 2dup min >rot ( copyw neww oldw ) + r@ * map + ( copyw neww src ) + swap r< * map + ( copyw src dst ) + swap ( newh neww oldw r: oldh ) + 2dup < if 1 r< else r< 1 - 0 then ( newh neww copyw ystart ylim ) + for 2dup i copy-mapseg next + drop swap mapsize! ; + : save-map ( filename -- ) fdeactivate swap overwrite mapsize swap fput fput @@ -149,8 +162,8 @@ var tileselect factivate ; : load-map ( filename -- ) - fdeactivate swap open - fget fget + fdeactivate swap open tell . + fget tell . fget tell . cr .s 2dup * map fread mapsize! factivate ; @@ -220,3 +233,5 @@ JOB listen-for-jobs MODE-MOVE @ ' tick redefine ' full-draw ' draw redefine + +s" pete.map" load-map diff --git a/game.prj b/game.prj index 13d42e4da94be9c62103ad6c5cc604bbe0834c90..d4c8b59992462df3b1dcb5b1afae2d9b7ba802bd 100755 GIT binary patch delta 49 zcmbQJIZ<~-4T8dr5PAloEaD{Z~o82&%(sqJy}3doat!iW=+8i FW&mU64c`C& delta 49 zcmbQJIZ<JzlWe?_NfCZ^(hLk=ofsHSZ~o82&%z{_G+97UoQcb1v!-AM FGXPy-4D> 8) & 0xff, ACTIVE_FILE); + fwrite(&TOP().u, 2, 1, ACTIVE_FILE); } DROP(1); } @@ -312,18 +311,21 @@ void f_fwrite() { // ( length p ) } void f_fgetc() { + int result = EOF; if (ACTIVE_FILE) { - PUSHI(fgetc(ACTIVE_FILE)); - } else { - PUSHI(EOF); + char byte = 0; + if (fread(&byte, 1, 1, ACTIVE_FILE) == 1) { + result = byte; + } } + PUSHI(result); } void f_fget() { if (ACTIVE_FILE) { - int low = fgetc(ACTIVE_FILE); - int high = fgetc(ACTIVE_FILE); - PUSHU(low | (high << 8)); + int result = 0; + int err = fread(&result, 2, 1, ACTIVE_FILE); + PUSHU(result); } else { PUSHU(0); // no way to signal EOF } @@ -637,7 +639,7 @@ void f_close() { void f_open() { FILE *fp; f_close(); - fp = fopen(TOP().s, "a+"); + fp = fopen(TOP().s, "ab+"); fseek(fp, 0, SEEK_SET); ACTIVE_FILE = fp; DROP(1); @@ -645,7 +647,7 @@ void f_open() { void f_overwrite() { f_close(); - ACTIVE_FILE = fopen(TOP().s, "w+"); + ACTIVE_FILE = fopen(TOP().s, "wb+"); DROP(1); } @@ -744,6 +746,10 @@ void f_inline_data_() { IP = *IP.p; } +void f_memmove() { // ( dst src size -- ) + memmove(ST2().p, ST1().p, TOP().u); + DROP(3); +} void f_quote() { if (STATE.i) { PUSHS("LIT_"); @@ -923,12 +929,14 @@ void f_init() { CDEF("fdeactivate", f_deactivate); CDEF("seek", f_seek); CDEF("seekend", f_seekend); + CDEF("tell", f_tell); CDEF("fputc", f_fputc); CDEF("fput", f_fput); CDEF("fgetc", f_fgetc); CDEF("fget", f_fget); CDEF("fwrite", f_fwrite); CDEF("fread", f_fread); + CDEF("memmove", f_memmove); CDEF("quiet", f_quiet); CDEF("loud", f_loud); CDEF("task", f_task); diff --git a/pete.map b/pete.map new file mode 100755 index 0000000000000000000000000000000000000000..f64bffdd380ee460bed6fd5d4865e266b12f26f7 GIT binary patch literal 524 zcmaiwTNZ;b2t*M~=#Ts8{#V!;NNChP#vB#644gdWkam~eQvm`h3#1v#;7Geb4)g3`%_ oU2QC8EDvG6;y3NjApJ5=2>Q;Uh+Z<|vs`)&hF=0PhOamE0ax3iaA1R)@3v+pwdX6C)w#4+UJB9)Ga?1{A6(n5BKXodU*jjfPxqu&lWeLEp< zBR@h;{TXo_`V-_Q4gWdvGxTl|OFW7`m!i*y=tBb);u1`iO3hT8LA4RD5FhY?a{Oth z`yvUD@<xU?%+*i_qxIL`$mo%h#QC-h#QC-h#QC-h#QC-_{$AEiA<**BVT^n BTXFyZ delta 156 zcmaDS|4x2G8dE(3I^X~aG;n|sOb#pt