diff --git a/debug.jim b/debug.jim index bd062ff..74576c5 100755 Binary files a/debug.jim and b/debug.jim differ diff --git a/defs.jim b/defs.jim index b7cd8bc..808ed19 100755 Binary files a/defs.jim and b/defs.jim differ diff --git a/defs.jor b/defs.jor index cec823c..ed8658c 100755 --- a/defs.jor +++ b/defs.jor @@ -71,17 +71,13 @@ : max ( x y -- x|y ) 2dup < if swap then drop ; : +!pos ( n var -- ) dup @ r dup r@ @ <= if - drop 0 r@ ! - else r@ @ 0 < if - 1 - r@ ! - else drop then then rdrop ; +: cycle! ( var lim -- ) + over @ dup 0 < if drop 1 - swap ! + else <= if 0 swap ! + else drop then then ; -: +!cycle ( n var lim -- ) - >r >r r@ +! r >r r@ +! if drop 0 else dup 0 < : checkpoint ( cp -- ) create here 4 cells + , latest , tasks , , does> dup @ here! diff --git a/entity.jim b/entity.jim index 9340a5f..a10f837 100755 Binary files a/entity.jim and b/entity.jim differ diff --git a/footer.jim b/footer.jim index 112bd52..0a7a55d 100755 Binary files a/footer.jim and b/footer.jim differ diff --git a/footer.jor b/footer.jor index 32cf99e..3ea55fa 100755 --- a/footer.jor +++ b/footer.jor @@ -118,6 +118,7 @@ var cchoose 6 LMAGENTA character pady userword 4 LGREEN character term userword 8 RED character libb userword +9 BLUE character disk userword : noone WHITE text-color ! s" " dup dup dup 8 portraity 16 portraity 24 portraity 32 portraity ; userword diff --git a/game.jim b/game.jim index 7c913cf..55e9890 100755 Binary files a/game.jim and b/game.jim differ diff --git a/game.jor b/game.jor index 31b940b..7cb2af5 100755 --- a/game.jor +++ b/game.jor @@ -233,9 +233,20 @@ defer reset-level userword ticks! then ; +: quit-game hide-footer LEV_QUIT queue-level ; +: quit-tick + ^ESC key-pressed if :| + disk :| + s" Resume play" ' noop yield + s" Save and quit to title" :| savegame quit-game |; yield + s" Don't save and quit to title" ' quit-game yield + done |; choose + |; sched then ; + : mode-move player-tick boss-tick + quit-tick ticking-objects @ if ticking-objects @ links @@ -248,8 +259,12 @@ defer reset-level userword q-level @ dup if 0 q-level ! reset-level - loadlevel - party each follow more + dup LEV_QUIT = if + drop title + else + loadlevel + party each follow more + then else drop then ; : mode-wait tick-debounce boss-tick ; diff --git a/input.jim b/input.jim index fc3f50c..9298ae5 100755 Binary files a/input.jim and b/input.jim differ diff --git a/jiles.jim b/jiles.jim index dc35150..cdbc1e6 100755 Binary files a/jiles.jim and b/jiles.jim differ diff --git a/job.jim b/job.jim index b179a36..545a3e0 100755 Binary files a/job.jim and b/job.jim differ diff --git a/lev00001.jim b/lev00001.jim index 43abddd..9064921 100755 Binary files a/lev00001.jim and b/lev00001.jim differ diff --git a/lev00002.jim b/lev00002.jim index f1a62f3..a4d10c0 100755 Binary files a/lev00002.jim and b/lev00002.jim differ diff --git a/lev00003.jim b/lev00003.jim index 519c250..a97521b 100755 Binary files a/lev00003.jim and b/lev00003.jim differ diff --git a/level.jim b/level.jim index ee80f4e..32aa762 100755 Binary files a/level.jim and b/level.jim differ diff --git a/level.jor b/level.jor index 8e4a501..ac70b39 100755 --- a/level.jor +++ b/level.jor @@ -27,6 +27,7 @@ var ilevelfile intern end.jor -1 const LEV_END +-2 const LEV_QUIT var current-level : load-new-level ( n -- ) @@ -38,3 +39,4 @@ var current-level then loadfile ; : save-level ( -- ) current-level @ levelmap save-map ; +: savegame save.sav overwrite current-level @ fput close ; diff --git a/map.jim b/map.jim index b2c740d..1436861 100755 Binary files a/map.jim and b/map.jim differ diff --git a/portrait.gfx b/portrait.gfx index 69e0d59..4f94c7f 100755 Binary files a/portrait.gfx and b/portrait.gfx differ diff --git a/state.jim b/state.jim index a71d548..b3514c4 100755 Binary files a/state.jim and b/state.jim differ diff --git a/timer.jim b/timer.jim index e589bae..e3c9c62 100755 Binary files a/timer.jim and b/timer.jim differ diff --git a/title.jim b/title.jim index 36e2e31..67a41d2 100755 Binary files a/title.jim and b/title.jim differ diff --git a/title.jor b/title.jor index ec533f2..4ff5934 100755 --- a/title.jor +++ b/title.jor @@ -19,37 +19,46 @@ : optionbg ( c -- ) dup 10 textx ! titlec 27 textx ! titlec ; : option ( s -- ) dup strlen 1 >> 19 swap - textx ! titles ; +intern save.sav + +var savedlevel + : startgame ( n -- ) s" title" loadscr s" start.jor" loadjor ; : menu-opts s" New Game" :| 1 startgame |; yield - s" Continue" ' noop yield - s" Help" ' noop yield - s" Register" ' noop yield + s" Continue" savedlevel @ if :| savedlevel @ startgame |; else 0 then yield + s" Help" 0 yield + s" Register" 0 yield s" Quit" ' quit yield done ; var menu-selected : menu-y ( i -- y ) 12 * 90 + ; : draw-menu - 0 menu-opts each drop + 0 menu-opts each + if over menu-selected @ = if LGREEN else WHITE then else RED then + text-color ! over menu-y texty ! - over menu-selected @ = if LGREEN else WHITE then text-color ! option + option dup menu-selected @ = if 15 else sp then optionbg 1 + more drop ; -: redraw-menu 21 11 8 72 box draw-menu ; +: redraw-menu WHITE text-color ! 21 11 8 72 box draw-menu ; : exec-selected 0 menu-opts each swap drop - over menu-selected @ = if execute break else drop then - 1 + + over menu-selected @ = if + dup if execute else drop then break else drop + then 1 + more drop ; : menu-count 0 menu-opts each drop drop 1 + more ; : menu-select ( di -- ) menu-selected menu-count +!cycle draw-menu ; :noname - fuck s" title" loadscr redraw-menu + save.sav open fget close savedlevel ! + fuck 0 split-screen s" title" loadscr redraw-menu :| ^ENTER key-pressed if exec-selected then ^UP key-pressed if -1 menu-select then ^DOWN key-pressed if 1 menu-select then ^ESC key-pressed if quit then - |; ' tick redefine ; checkpoint title + |; ' tick redefine + ' noop ' draw redefine ; checkpoint title