From 10b29177a38a4ce60e715be95ac228ecf9df0f13 Mon Sep 17 00:00:00 2001 From: Jeremy Penner Date: Fri, 25 Jun 2021 21:55:15 -0400 Subject: [PATCH] Honeylisp project support, porting Neut Tower --- 8Bitsy.dsk | Bin 143360 -> 143360 bytes bitsy/player.fnl | 2 +- editor/init.fnl | 2 +- editor/mapedit.fnl | 13 +++++++++---- editor/tileedit.fnl | 2 +- game/files.fnl | 4 ++-- game/tiles.fnl | 11 ++++++----- neuttower/defs.fnl | 14 +++++++------- neuttower/game.json | 1 + neuttower/init.fnl | 5 +++-- neuttower/level1.fnl | 11 ++++++----- neuttower/level2.fnl | 2 +- neuttower/level3.fnl | 4 ++-- neuttower/level4.fnl | 2 +- neuttower/level5.fnl | 9 +++++---- neuttower/level6.fnl | 4 ++-- neuttower/player.fnl | 2 +- wrap.fnl | 16 ++++++++++++++++ 18 files changed, 65 insertions(+), 39 deletions(-) create mode 100644 neuttower/game.json diff --git a/8Bitsy.dsk b/8Bitsy.dsk index 52c2efe7a39016c65871c0034cc1085ca5f75b9d..cca970ee827a64629b808880f177eca2d501f5ff 100644 GIT binary patch delta 84 zcmV-a0IUCi;0S==2(WKmLG}D%OGV=Jm%I1TY?=a8lr%)R!0@*f3 q3b|jYrfIB_3ak>b^B#{im&i&UQKzgJdcPV+cmjj4UAM4Z0Z`H(Z6wS9 diff --git a/bitsy/player.fnl b/bitsy/player.fnl index 7c5fa6e..601640b 100644 --- a/bitsy/player.fnl +++ b/bitsy/player.fnl @@ -1,7 +1,7 @@ (local tile (require :game.tiles)) (local {: vm : mapw : maph : itile : controlstate} (require :bitsy.defs)) -(local {: walkable} tile.flag-to-bit) +(local {: walkable} (tile.flag-to-bit)) (vm:word :either= ; target val1 val2 -- f :>rot :over := :>rot := :|) diff --git a/editor/init.fnl b/editor/init.fnl index 7f3486a..91edad7 100644 --- a/editor/init.fnl +++ b/editor/init.fnl @@ -21,7 +21,7 @@ (command.add nil commands)) (local fileeditors - {:screen {:view ScreenEditView :filefilter "^game/.*%.screen"}}) + {:screen {:view ScreenEditView :filefilter ".*%.screen"}}) (each [type {: view : filefilter} (pairs fileeditors)] (command.add nil diff --git a/editor/mapedit.fnl b/editor/mapedit.fnl index 9bda345..ede73a4 100644 --- a/editor/mapedit.fnl +++ b/editor/mapedit.fnl @@ -93,7 +93,7 @@ (var stripid "") (for [mx 1 mapw] (local itile (self:itile-from-xy mx my)) - (local tile (. self.tilecache.tiles itile :gfx)) + (local tile (?. self.tilecache.tiles itile :gfx)) (table.insert tilestrip tile) (set stripid (.. stripid (string.char itile)))) (var sprite (. self.stripcache stripid)) @@ -183,6 +183,11 @@ (when do-new (table.insert object.steps {})) y)) +(fn advanced? [object] + (or object.advanced + (and (= object.advanced nil) + object.func))) + (fn MapEditView.draw-object-advanced-editor [self object x y] (let [(func y) (textfield self "Word" object.func x y 100 200) (name y) (textfield self "Name" object.name x (+ y style.padding.y) 100 200) @@ -195,13 +200,13 @@ (fn MapEditView.draw-object-editor [self x y] (let [object (self:object) - y (if object.advanced + y (if (advanced? object) (self:draw-object-advanced-editor object x y) (self:draw-object-code-editor object x y)) new-flag-name (textbox self :new-flag-name self.new-flag-name x (+ y style.padding.y) 200) (mk-new-flag y) (textbutton self "+ New Flag" (+ x 200 style.padding.x) (+ y style.padding.y)) do-delete (textbutton self "Delete" x (+ y 40)) - (do-advanced y) (textbutton self (if object.advanced "Simple" "Advanced") (+ x 150) (+ y 40))] + (do-advanced y) (textbutton self (if (advanced? object) "Simple" "Advanced") (+ x 150) (+ y 40))] (set self.new-flag-name new-flag-name) (when mk-new-flag (when (= files.game.flags nil) @@ -211,7 +216,7 @@ (when do-delete (move-object self.level.objects (+ self.iobject 1) self.iobject) (set self.iobject nil)) - (when do-advanced (set object.advanced (not object.advanced))) + (when do-advanced (set object.advanced (not (advanced? object)))) y)) (fn MapEditView.load-level [self] diff --git a/editor/tileedit.fnl b/editor/tileedit.fnl index 519dbc4..0fcb6b5 100644 --- a/editor/tileedit.fnl +++ b/editor/tileedit.fnl @@ -79,7 +79,7 @@ (when tile (set tile.word (textfield self "Default word" tile.word x y 100 200)) (set tile.label (textfield self "Label" tile.label x (+ y pixel-size 4) 100 200))) - (each [iflag flagname (ipairs tiles.flags)] + (each [iflag flagname (ipairs (tiles.flags))] (self:draw-tile-flag flagname x (+ y (* (+ iflag 1) (+ pixel-size 4)))))) (fn TileView.update-tile [self newtile] diff --git a/game/files.fnl b/game/files.fnl index c7900b1..f6d050e 100644 --- a/game/files.fnl +++ b/game/files.fnl @@ -73,8 +73,8 @@ (util.nested-tset files [:tilecaches key] (new-cache files.game key))) (. files.tilecaches key)) -(fn files.reload [] - (files.load) +(fn files.reload [?filename] + (files.load ?filename) (when files.tilecaches (each [key cache (pairs files.tilecaches)] (cache:load (. files.game key))))) diff --git a/game/tiles.fnl b/game/tiles.fnl index b9709d1..707f337 100644 --- a/game/tiles.fnl +++ b/game/tiles.fnl @@ -1,10 +1,10 @@ (local util (require :lib.util)) (local lume (require :lib.lume)) (local files (require :game.files)) -(local flags [:walkable]) -(local flag-to-bit {}) -(each [iflag flag (ipairs flags)] - (tset flag-to-bit flag (bit.lshift 1 (- iflag 1)))) + +(fn flags [] (or files.game.tileflags [:walkable])) +(fn flag-to-bit [] + (collect [iflag flag (ipairs (flags))] (values flag (bit.lshift 1 (- iflag 1))))) (fn appendgfx [org gfx ?key ?label-prefix] (each [_ g (ipairs gfx)] @@ -13,6 +13,7 @@ (fn appendtiles [org] (local tiles files.game.tiles) + (local flag-lookup (flag-to-bit)) (org:append [:align 0x100] :tileset) (appendgfx org tiles) (appendgfx org files.game.portraits nil :portrait-) @@ -20,7 +21,7 @@ (each [_ tile (ipairs tiles)] (var flags 0) (each [flag _ (pairs tile.flags)] - (set flags (bit.bor flags (. flag-to-bit flag)))) + (set flags (bit.bor flags (. flag-lookup flag)))) (org:append [:db flags]))) (fn append-portraitwords [vm ?overrides] diff --git a/neuttower/defs.fnl b/neuttower/defs.fnl index 3704faf..636e73d 100644 --- a/neuttower/defs.fnl +++ b/neuttower/defs.fnl @@ -4,6 +4,7 @@ (local asm (require :asm.asm)) (local VM (require :asm.vm)) (local tiles (require :game.tiles)) +(local files (require :game.files)) (local Prodos (require :asm.prodos)) (local prg (asm.new)) @@ -133,7 +134,7 @@ (fn append-map [map org label] (org:append [:align 0x100] label - [:bytes (map.map:fromhex)] + [:bytes map.map] [:db (length map.objects)] [:dw (tiles.encode-yx map.jaye)] [:dw (tiles.encode-yx map.neut)] @@ -152,10 +153,10 @@ (vm:word :map-specific-move :map 250 :+ :execute) (vm:word :map-specific-load :map 253 :+ :execute) -(fn deflevel [mapfile label] +(fn deflevel [ilevel label] (local level prg) ; todo: (asm.new prg) - if we want to load levels as an overlay (local org level.vm.code) ; (level:org org.level.org) - if we want to give level data a stable loxation - (local map (readjson mapfile)) + (local map (. files.game.levels ilevel)) (local entity (require :neuttower.entity)) (append-map map org label) (entity.append-from-map map org label) @@ -163,7 +164,7 @@ level) (fn say-runon [portrait ...] - (local result [:vm (.. :draw-p portrait)]) + (local result [:vm (.. :draw-portrait- portrait)]) (local lines [...]) (local ilineOffset (if (< (length lines) 4) 1 0)) (each [iline line (ipairs lines)] @@ -175,10 +176,9 @@ (table.insert result :dismiss-dialog) result) -(local tilelist (tiles.loadgfx tiles.fn-tiles)) -(fn itile [label] (tiles.find-itile tilelist label)) +(fn itile [label] (tiles.find-itile files.game.tiles label)) (set vm.code org.code) -{: vm : prg : mapw : maph : mon : org : achar : astr : style : rot8l : deflevel : say : say-runon : itile : tilelist : controlstate} +{: vm : prg : mapw : maph : mon : org : achar : astr : style : rot8l : deflevel : say : say-runon : itile : controlstate} diff --git a/neuttower/game.json b/neuttower/game.json new file mode 100644 index 0000000..e27d818 --- /dev/null +++ b/neuttower/game.json @@ -0,0 +1 @@ +{"tiles":[{"neut":"5F5F1F03090923436943230909031F5F7A7A784111104542174245101141787A","label":"neut1","flags":[],"word":"","gfx":"7F7F1F03090923436943230909031F7F7F7F784111104542174245101141787F"},{"neut":"5F1F03090923436943230909031F5F5F7A784111104542174245101141787A7A","label":"neut2","flags":[],"word":"","gfx":"7F1F03090923436943230909031F7F7F7F784111104542174245101141787F7F"},{"neut":"808080C0C0C0E0C0D0C8C04040404080808083058585828A9282820A08081980","label":"jaye-e","flags":[],"word":"","gfx":"808080C0C0C0E0C0D0C8C04040404080808083058585828A9282820A08081980"},{"neut":"8080C020A0A0C0C0D0C8C0501010188080808183838782828A8A920202020380","label":"jaye-w","flags":[],"word":"","gfx":"8080C020A0A0C0C0D0C8C0501010188080808183838782828A8A920202020380"},{"neut":"8080E030B0B098C0D0D0C840404060808080870D8D8D99828A8A920202020780","label":"jaye-s","flags":[],"word":"","gfx":"8080E030B0B098C0D0D0C840404060808080870D8D8D99828A8A920202020780"},{"neut":"8080C0E0E0E0B0C0D0C8C040404060808080838787878D828A92820202020780","label":"jaye-n","flags":[],"word":"","gfx":"8080C0E0E0E0B0C0D0C8C040404060808080838787878D828A92820202020780"},{"neut":"8080808080808080808080808080808080808080808080808080808080808080","label":"t-floor","flags":{"walkable":true},"word":"","gfx":"80808C8080808080B08080808C808080808C80808083B0808080808080868080"},{"neut":"80FC8C8C8C8CFC80FCFEFE8080808080809F989898989F809F8F878080808080","label":"termoff","flags":[],"word":"term","gfx":"007C0C0C0C0C7C007C7E7EAA88888800001F181818181F001F0F979584848400"},{"neut":"507C2C2C2C2C7C557D7D7E005F5F5F5F0A3F353535353F2A3F2F67707A7A7A7A","label":"termon","flags":{"neutable":true},"word":"term","gfx":"007C2C0C0C2C7C007C7E7EAA88888800001F18191C191F001F0F979584848400"},{"neut":"D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA","label":"","flags":[],"word":"","gfx":"D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"},{"neut":"D5D5D5D581F9F9F9F9C195D5D5D5D5D5AAAAAAAAAA809F9F9F9F80AAAAAAAAAA","label":"","flags":[],"word":"","gfx":"D5D5D5D5D5F5F5FDDDD5D5D5D5D5D5D5AAAAAAAAAEAEBFBFBFABAAAAAAAAAAAA"},{"neut":"5F5F5F5F5F5F57555555575F5F5F5F5F7A7A7A7A7A7A6A2A2A2A6A7A7A7A7A7A","label":"","flags":{"neutable":true},"word":"","gfx":"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"},{"neut":"8080F8F8F8F8F8F8F8F8F8F8F8F8808080808F8F8F8F8F8F8F8F8F8F8F8F8080","label":"doorclosed","flags":[],"word":"door","gfx":"FF8FA7B3B3B3B3B3B3B3B3B3B3B383FFFFF8F2E6E6E6E6E6E6E6E6E6E6E6E0FF"},{"neut":"8080FC8C8C8C8C8C8C8C8C8C8CFC808080809F989898989898989898989F8080","label":"dooropen","flags":{"walkable":true},"word":"door","gfx":"FF8F87838383838383838383838383FFFFF8F0E0E0E0E0E0E0E0E0E0E0E0E0FF"},{"neut":"5F5F5F5F0F0705050505070F5F5F5F5F7A7A7A7A70602020202060707A7A7A7A","label":"switchoff","flags":{"neutable":true},"word":"switch","gfx":"FFFFCFCFCFCF898183838787878FFFFFFFFCE4E4E4E4E0E0E0E0E0E0F0F8FFFF"},{"neut":"5F5F5F5F0F0725252525070F5F5F5F5F7A7A7A7A70602525252560707A7A7A7A","label":"switchon","flags":{"neutable":true},"word":"switch","gfx":"FFFFCFCFCFCF898123232727878FFFFFFFFCE4E4E4E0E0616565656571F8FFFF"},{"neut":"808080D0D0D0D0D0D0D0D0D0D08080808080808A8A8A8A8A8A8A8A8A8A808080","label":"","flags":[],"word":"","gfx":"FFFF83D3D3D3D3D3D3D3D3D3D383FFFFFFFFC0CACACECACBCACACACACAC0FFFF"},{"neut":"5F5F5F5F7F0F0D0D0D0D0F0F7F5F5F5F7A7A7A7A7F703030303070707F7A7A7A","label":"scanoff","flags":{"neutable":true},"word":"scan","gfx":"FFFFAFEBFBFBFBBBBBFBFBFBEBAFFFFFFFFFF5D7DFDFDFDDDDDFDFDFD7F5FFFF"},{"neut":"5F5F5F5F7F2F2D2D2D2D2F2F7F5F5F5F7A7A7A7A7F753535353575757F7A7A7A","label":"scanon","flags":{"neutable":true},"word":"scan","gfx":"FFFF2F2B2B2B6B6B6B6B2B2B2B2FFFFFFFFF755555555757575755555575FFFF"},{"neut":"9EF3C68CB3E7F88086BEE0E0B09898C6F8CFE1B18C8C988E868C99B0E6CE8F99","label":"","flags":[],"word":"","gfx":"FFF3C78FBFFCF98187BFFFFFBF9F9FC7FFCFE1F1FCFCF8FEFEFCF9F0E6CE8F9F"},{"neut":"8080808080D4848484D48484848480808080808080AAA0A1A0AAA0A0A0A08080","label":"","flags":[],"word":"","gfx":"80808C80808080A8AAAAAAA888888880808C8080808380859595958584848480"},{"neut":"8080808080D4808480D48084808480808085848581AA80A180AA80A080A08080","label":"broken-table","flags":{"debris":true},"word":"","gfx":"80808C8080A0A0A8AAAA8AA0A8808080808C8081919090848594959585858080"},{"neut":"808080D09090D0C0C0D48484D490B8808080808A88888A8282AAA0A0AA889C80","label":"t-chair","flags":{"sittable":true},"word":"","gfx":"00005054545450404054545010383800000C0A2A2A2A0A03032A2A0A081C1C00"},{"neut":"808080809080D080C0808480D480B8808085848589808A818280A080AA809C80","label":"","flags":{"debris":true},"word":"","gfx":"0000001C1C10545040606010545454000030070702020A0A0100020A080A0200"},{"neut":"8080808080D48484D48484D48484D48080808080808A88888A88888A88888A80","label":"","flags":[],"word":"","gfx":"80A0A8AA92D2D2AAC2C2AA92D2AA808080959595949494959494959494858080"},{"neut":"8080808080808480D48084808480D48080858485818089808A80888088808A80","label":"","flags":{"debris":true},"word":"","gfx":"80808C808080A8C292AAAAAAAA8AC0D0808C80808083959290959194948580A8"},{"neut":"8080D4C4D4C0D4C4D4C0C0D48484D48080808A888A808A888A80808A88888A80","label":"","flags":[],"word":"","gfx":"80806008282A0800202880A8A8A8A08080980000141501051511819595958580"},{"neut":"8080D4809480D480D480C0808480D4808085848589808A818A80808088808A80","label":"","flags":{"debris":true},"word":"","gfx":"80808C808080A0A8AAAA8AA2AAAAAA80808C0000000330010105051511010514"},{"neut":"80D0D0D0C0D4C4C4CECAC0E0A0808080808A8B8A82AAA2A2F2D2828785808080","label":"t-rexx","flags":[],"word":"rexx","gfx":"80D0D0D0C0D4C4C4CECAC0E0A0808080808A8B8A82AAA2A2F2D2828785808080"},{"neut":"F8989898BE8686868686BEB098F880809F989898FCE0E0E0E0E0FC8C989F8080","label":"t-rexxstop","flags":[],"word":"rexx","gfx":"F8989898BE8686868686BEB098F880809F989898FCE0E0E0E0E0FC8C989F8080"},{"neut":"8080808088A8A8E0E0F0C8C0C0C08080808080808080808183838282829A8080","label":"gord-ground","flags":[],"word":"","gfx":"80808C8088A8A8E0E0F0C8C0CCC08080808C80808080B08183838282829A8080"},{"neut":"808080A0A080F0F0F0E8D0D09090988080808081818083838385828282828680","label":"gord-s","flags":[],"word":"","gfx":"808080A0A080F0F0F0E8D0D09090988080808081818083838385828282828680"},{"neut":"80C09090A080F0F0F0F0D0D09090988080808282818083838383828282828680","label":"gord-n","flags":[],"word":"","gfx":"80C09090A080F0F0F0F0D0D09090988080808282818083838383828282828680"},{"neut":"808080A0A080F0F0F0F0D0D09090B08080808181818081838581808282828680","label":"gord-e","flags":[],"word":"","gfx":"808080A0A080F0F0F0F0D0D09090B08080808181818081838581808282828680"},{"neut":"8080A0A0A080E0F0E8E0D0D09090988080808081818083838383828282828380","label":"gord-w","flags":[],"word":"","gfx":"8080A0A0A080E0F0E8E0D0D09090988080808081818083838383828282828380"},{"neut":"8088A8A880F0F0F8B8D4D4C4C4E486808080808A88888A8181AAA0A0AA889C80","label":"gord-sit","flags":[],"word":"","gfx":"0088A8A8047470F8B8D4D4C4C4E40600000C0A2A2A2A0A81812A2A0A081C1C00"},{"neut":"FF81F9B9E9B9E9B9E9B9E9B9F9F981FFFFE0E7E7E5E7E5E7E5E7E5E7E7E7E0FF","label":"t-keyoff","flags":[],"word":"keypad","gfx":"FF81F9B9E9B9E9B9E9B9E9B9F9F981FFFFE0E7E7E5E7E5E7E5E7E5E7E7E7E0FF"},{"neut":"7F01793969396939693969397979017F7F60676765676567656765676767607F","label":"t-keyon","flags":[],"word":"keypad","gfx":"7F01793969396939693969397979017F7F60676765676567656765676767607F"},{"neut":"5F8FA7C7A389D189838FA7C7A70F5F5F7AF0C4928A91C0F1F2C1928A90427A7A","label":"libb1","flags":[],"word":"","gfx":"FF8FA7C7A389D189838FA7C7A78FFFFFFFF0C4928A91C0F1F2C1928A90C7FFFF"},{"neut":"5F5F8FA7C7A389D189838FA7C7A70F5F7A7AF0C4928A91C0F1F2C1928A90427A","label":"libb2","flags":[],"word":"","gfx":"FFFF8FA7C7A389D189838FA7C7A78FFFFFFFF0C4928A91C0F1F2C1928A90C7FF"},{"neut":"5F5F5F8FA3A9A9A3A7A7A7A7A70F5F5F7A7A7A7A7AE0C5959595909292427A7A","label":"t-chuck","flags":[],"word":"","gfx":"FFFFFF8FA3A9A9A3A7A7A7A7A78FFFFFFFFFFFFFFCE0C5959595909292C7FFFF"},{"neut":"5F5F8FA3A9A9A3A7A7A7A7A78F5F5F5F7A7A7A7860C5959595909292C27A7A7A","label":"t-chuck2","flags":[],"word":"","gfx":"FFFF8FA3A9A9A3A7A7A7A7A78FFFFFFFFFFFFFFCE0C5959595909292C7FFFFFF"}],"tileflags":["walkable","neutable","debris","sittable"],"levels":[{"loadword":"earthquake","objects":[{"x":8,"func":"door","y":6,"linkword":"","name":""},{"x":2,"link":3,"func":"firstterm","linkword":"","name":"","y":4},{"x":17,"link":2,"func":"neutterm","linkword":"","name":"","y":8},{"x":13,"link":8,"func":"switch","linkword":"","name":"","y":8},{"x":9,"func":"exitscanner","y":1,"name":"","linkword":"","link":6},{"x":10,"linkentity":"level2","func":"exitdoor","linkword":"exitlevel","name":"","y":1},{"x":6,"func":"switch","y":6,"name":"","linkword":"","link":1},{"x":13,"linkentity":"","func":"firstdoor","y":10,"name":"","linkword":""}],"jaye":{"y":9,"x":15},"tickword":"","moveword":"","map":"212121214121212121212121212141212121212161026161610261616102616161616102616161216143C0C0C2C0C0C0C0C0C0C081C0C0C0C0C0612161C0C08282C0C0C082C0C0C061C0C0C0C0C2024161C0C0C0C0C0C0C0C0C2C082C182C0C0E082612161C2C08282C0C0C0C082C0C061616161616161216161616161C16181616161616143C0C0C282612161C0C0C0C0C0C0C0C0C0C0C061C0C0C0C0C0022161E0828282C0C0C0C0C2C0C081C0C0C0C003612161C2C2C2C0C0C0C0C0C0C0C061C0C0C0C0C06141610303C043C2C0C0C0C0C0C061C0C0C003C061216161616161616161228161616161616161610221"},{"neut":{"y":12,"x":10},"objects":[{"link":2,"y":11,"func":"term","name":"","linkword":"","x":9},{"link":6,"y":3,"func":"term","name":"","linkword":"","x":2},{"x":6,"func":"door","y":10,"linkword":"","name":""},{"link":5,"y":5,"func":"scan","name":"","linkword":"","x":1},{"x":8,"func":"door","y":8,"linkword":"","name":""},{"link":2,"y":6,"func":"term","name":"","linkword":"","x":7},{"link":8,"y":1,"func":"scan","name":"","linkword":"","x":12},{"x":17,"func":"door","y":7,"linkword":"","name":""},{"link":10,"y":1,"func":"scan","name":"","linkword":"","x":13},{"x":13,"func":"door","y":8,"linkword":"","name":""},{"link":12,"y":6,"func":"switch","name":"","linkword":"","x":15},{"link":13,"y":10,"func":"term","name":"","linkword":"","x":2},{"link":12,"y":5,"func":"term","name":"","linkword":"","x":12},{"link":15,"y":9,"func":"scan","name":"","linkword":"","x":15},{"x":15,"func":"door","y":10,"linkword":"","name":""},{"link":17,"y":6,"func":"term","name":"","linkword":"","x":16},{"link":16,"y":10,"func":"term","name":"","linkword":"","x":18},{"x":15,"func":"door","y":3,"linkword":"","name":""},{"link":18,"y":9,"func":"scan","name":"","linkword":"","x":19},{"link":21,"y":3,"func":"term","name":"","linkword":"","x":13},{"link":20,"y":2,"func":"term","name":"","linkword":"","x":18},{"link":23,"y":1,"func":"scan","name":"","linkword":"","x":8},{"x":9,"linkentity":"level3","func":"exitdoor","y":1,"linkword":"exitlevel","name":""},{"link":3,"y":1,"func":"switch","name":"","linkword":"","x":16},{"link":26,"y":1,"func":"switch","name":"","linkword":"","x":3},{"x":6,"func":"door","y":3,"linkword":"","name":""},{"link":28,"y":3,"func":"term","name":"","linkword":"","x":9},{"link":27,"y":2,"func":"term","name":"","linkword":"","x":7},{"x":3,"func":"door","y":7,"linkword":"","name":""},{"link":29,"y":1,"func":"switch","name":"","linkword":"","x":17}],"loadword":"","jaye":{"y":11,"x":11},"tickword":"","moveword":"","map":"616161616161626161618161616161616161612161C0C0C06361C0C0E0C0C0C0C0C06103C0C0022161E0C0C0C081C0C0C0C0C0C0C0C081C0C0E0614161C0C0C0C06143C0C0C0C0C0C04322C0C0C0222161C0C0C0C061618161616161816161C0C0C00221616181616161C0C0C06143C0C0C061618161612161C0C0C06361E0C0C061C0C0C0C0C1E0C003612122C0C0C0C061C0C0C061C0E0C0C061C0C0C0022161C0C0C0C061616161616261616161C0C0C061416101C0C0C081C0C0E061C0C0E0C081C0C0C0022162C0C0C02361E0C0C06143C0C0C061E2A2E061216161C1616261612281616122226162C1C1616121"},{"neut":{"y":12,"x":8},"objects":[{"x":1,"func":"scan","y":5,"name":"","linkword":"","link":2},{"x":1,"linkentity":"level4","func":"exitdoor","y":4,"name":"","linkword":"exitlevel"},{"x":7,"func":"gordterm","y":6,"name":"","linkword":"","link":4},{"x":14,"func":"term","y":11,"name":"","linkword":"","link":7},{"x":9,"func":"switch","y":6,"name":"gordswitch","linkword":"","link":6},{"x":11,"func":"door","y":9,"name":"","linkword":""},{"x":10,"func":"term","y":3,"name":"","linkword":"","link":3},{"x":11,"func":"scan","y":10,"name":"","linkword":"","link":9},{"x":14,"func":"door","y":7,"name":"","linkword":""},{"x":7,"func":"meetrexx","linkword":"","name":"","y":3},{"x":8,"func":"meetgord","linkword":"","name":"","y":6},{"x":8,"func":"gordtable","name":"","linkword":"","y":5}],"loadword":"level3-load","jaye":{"y":11,"x":9},"tickword":"","moveword":"","map":"616161616161616181616161616161616161612161C063C0C0C0C0C0C0C06143C0E0C2C0C043022161C0C0C0C0C0C0C0C0C022C0C0C0C0C0C0C0614161C0C0C2C0C0C0C0C0C081C0C0C0C0C0C0C0612161C08282A2C0C0C0C0436123C0C0C0C0C0030221616161616161616261616161618161616161612161C063C0C02301C3C163C0C0C0C0C0822363022122C0C0C0C0C0C0A2A1C0C0C0C0C0C0C2C0C0614181C0C0C0C0E2C0C061C0C0C0C0C0C0C0C2C061216123C0C0C0C083C061E0C2C0C0C0C0438203022161610261610261616161026161026161026161212121212141212121212121212121412121212121"},{"neut":{"y":5,"x":20},"objects":[{"x":7,"func":"term","name":"","linkword":"term-dual-link","y":11},{"link":1,"x":2,"y":3,"linkword":"","name":"term-exit","func":"term"},{"link":1,"x":7,"y":3,"linkword":"","name":"term-scan","func":"term"},{"x":11,"func":"door","name":"","linkword":"","y":7},{"link":4,"x":12,"y":7,"linkword":"","name":"","func":"scan"},{"x":15,"func":"door","name":"","linkword":"","y":7},{"link":3,"x":7,"y":7,"linkword":"","name":"","func":"switch"},{"x":10,"func":"door","name":"","linkword":"","y":5},{"link":4,"x":10,"y":4,"linkword":"","name":"","func":"switch"},{"x":16,"func":"rexx","name":"","linkword":"","y":11},{"link":8,"x":7,"y":2,"linkword":"","name":"","func":"scan"},{"link":13,"x":1,"y":4,"linkword":"","name":"","func":"scan"},{"x":1,"linkentity":"level5","func":"exitdoor","name":"","linkword":"exitlevel","y":5},{"x":5,"func":"rexx","name":"","linkword":"","y":8},{"x":7,"func":"tutorial-chair","y":10,"linkword":"","name":""},{"x":8,"func":"switch","y":7,"name":"","linkword":"","link":6},{"x":6,"func":"switch","y":7,"name":"","linkword":"","link":2}],"loadword":"","tickword":"","jaye":{"y":4,"x":19},"gord-following":true,"moveword":"","map":"61616161616161616261616161616161616161616143C0C0C082E082C0C0636163C0C083C0C0436161C0C0C0C0C0C2C0C0C0C061C0C0C0C0C0C0C06161C0C0C0C0C0C0C0C0C0C061C0C0C0C0C0C0C2616103C0C0A3C0C0C003C0C06163C0C0C0C082A2616161616161C1C1C16161812261618161616161616143C0C0C0C0C0C04361C0C0C0C0C0C0C0C0636181C0C0C0C0C0C0C0C081C0C0C0C0C0C0C0C0C06122C0C0C0C0C0E2C0C0C1A2E2C0C0C0C0C0C0C08161E082828282E0C02361A2C0C0C0C0C0C003236161026161610222616102616161610261616102612121214121212121212121212121412121212121"},{"neut":{"y":6,"x":20},"objects":[{"x":17,"func":"garbagerexx","y":11,"name":"south-rexx","linkword":""},{"x":17,"func":"garbagerexx","y":8,"name":"","linkword":""},{"x":20,"func":"do-timedswitch","y":9,"name":"timedswitch","linkword":"","link":13},{"x":20,"func":"switch","y":4,"name":"","linkword":"","link":16},{"x":12,"func":"term","y":4,"name":"","linkword":"","link":9},{"x":10,"func":"healthyrexx","y":4,"name":"","linkword":""},{"x":8,"func":"switch","y":2,"name":"","linkword":"","link":17},{"x":8,"func":"term","y":6,"name":"","linkword":"","link":10},{"x":8,"func":"term","y":11,"name":"","linkword":"","link":5},{"x":3,"func":"term","y":11,"name":"","linkword":"","link":8},{"x":5,"func":"scan","y":12,"name":"","linkword":"","link":12},{"x":6,"linkentity":"level6","func":"exitdoor","y":12,"name":"","linkword":"exitlevel"},{"x":6,"func":"door","y":7,"name":"","linkword":""},{"x":11,"func":"explodingdoor","y":9,"name":"","linkword":""},{"x":11,"func":"scan","y":10,"name":"","linkword":"","link":14},{"x":13,"func":"door","y":7,"name":"","linkword":""},{"x":11,"func":"door","y":3,"name":"","linkword":""}],"loadword":"","gord-following":true,"jaye":{"y":5,"x":19},"tickword":"doortimer-tick","moveword":"move-garbagerexx","map":"21616161228161616161616161616161616162612102E0C0C0C0C0E0C04361C0C0C0C0C0A3C0C0612161C0C0C0C0C0C0C0C022C0C0C08282C0828261416103C0C0C0C0C0C0C081C0C0C0C0C0C0C0C2C1210203C0C0C0C0C0C04361C0C0C08282838282622161616161816161616161618161616161616161216163C0C0C0C0E0C0C06143C0C0C0C0C0C063612102C0C0C0C0C0C0C0C061C0C0C0C0C0C0C0C0814161C0C0C0C0E2C0E2836101C0C0C0C0C0C0C0C1216143C0C0C082A2A2A281C0C0C043034382E26121610261610261C16102616161026161610261612121212121214121212121212121214121212121"},{"neut":{"y":1,"x":5},"objects":[{"x":3,"link":6,"func":"c4","linkword":"linkloop","name":"","y":10},{"x":5,"link":3,"func":"keypad2","linkword":"","name":"","y":10},{"x":5,"func":"door","linkword":"","name":"","y":11},{"x":11,"func":"door","linkword":"","name":"","y":9},{"x":13,"link":17,"func":"c9","linkword":"linkloop","name":"","y":6},{"x":9,"link":5,"func":"c8","linkword":"linkloop","name":"","y":6},{"link":23,"x":11,"y":4,"name":"","linkword":"","func":"switch"},{"x":3,"link":1,"func":"c3","linkword":"linkloop","name":"","y":7},{"x":3,"link":8,"func":"c2","linkword":"linkloop","name":"","y":4},{"x":3,"link":23,"func":"c1","linkword":"linkloop","name":"","y":2},{"x":4,"func":"door","linkword":"","name":"","y":2},{"x":4,"link":11,"func":"keypad1","linkword":"","name":"","y":3},{"x":4,"link":4,"func":"scan","linkword":"","name":"","y":1},{"x":17,"func":"door","linkword":"","name":"","y":2},{"x":17,"link":14,"func":"keypad3","linkword":"","name":"","y":3},{"x":19,"func":"rexx","linkword":"","name":"","y":2},{"x":19,"link":18,"func":"c5","linkword":"linkloop","name":"","y":4},{"x":19,"link":19,"func":"c6","linkword":"linkloop","name":"","y":7},{"x":19,"link":10,"func":"c7","linkword":"linkloop","name":"firewall","y":10},{"x":19,"link":19,"func":"switch","linkword":"","name":"","y":12},{"x":17,"link":22,"func":"keypad4","linkword":"","name":"","y":10},{"x":17,"func":"door","linkword":"","name":"","y":11},{"x":15,"link":9,"func":"cx","linkword":"linkloop","name":"","y":11},{"x":14,"link":25,"func":"scan","linkword":"","name":"","y":12},{"x":13,"linkentity":"","func":"exitdoor","linkword":"endgame","name":"","y":12}],"loadword":"","gord-following":true,"jaye":{"y":2,"x":6},"tickword":"","moveword":"","map":"210261616161616161616161812261616161E1614161C2C081C0C0C0C0C0C0C0C0C0E0C081C0C0622161E04384C0C0C043C0C0C043C0C0C0848201612102616161C0C061610281026161C0C0616161612161C2C0C0C0C061E2C0C0C0A261C0C0C0C0E2612161E003C0C0C061C0C0C0C08261C0C0C003E06121026161C0C0C061E08282E2E061C0C0C06161612161C2C0C0C0C06103C0C0C02361C0C0C0C0C2614161E003C0C0C0616102C1026161C0C0C003E06121026184C0C0C0C043C043C063C0C0C0846161612161E081C0C0C0C0C0C0C0C0C0C0C0C081C083612161612261816161616161616161616161616161"}],"portraits":[{"gfx":"8080808080E0E0F0F8FC2CBCACACACAC80809CFEFFFFFFD7D5D5555D4F5DD5D5BCB8B8B8F8F8F8F8FCFCFEFE86D0D0D495D5D5E5D5D5D5D7C797D7D0AAAAAAAA808086BFFFFFFFFAEAAA2A2E3C2EAAAA80808080808183878787058F8D8D8D8FAAAAAAA7AAAAEAEAE2E8EA8AD5D5D5D58F8F8787878F8F8F9F9FBFBE808A8AAA","label":"jaye","flags":[]},{"gfx":"00002020000000004808080800202028004040011404450144010805445420352020000808084800000000202000000020544405080144014504140140400000000202012921220122011021222A052D00000405000001011211101100040415052A222110012201222129010202000004040011101112010100000504000000","label":"neut","flags":[]},{"gfx":"80C090808484848484848484A8A8A8A8AA8080808080D4D4D5D5F59DFDD5D5D5A8A08080808080808080808080E0F8FC95D5D5D5F595D5D4D084D4D4D4D7FFFFD58080808080AAAAAAAABAE2FAAAAAA280828880A0A0A0A1A1A1A1A195959595A0AAAAAAAFA8AAAA8AA0AAAAAAEAFFFF95858181818181808080808080879FBF","label":"gord","flags":[]},{"gfx":"808080808080C0C0C0C0C0C0C0C0C0C0808080808080AAAAFAFAFAAAAAAAAAAA8080808080C0D0D0D0D0D0D0D0D0D0D0A0A0A0A0A0AAAAAAA8A8A8A8A8A8A8A8808080808080D5D5DFDFDFD5D5D5D5D5808080808080828282828282828282828585858585D5D5D595959595959595958080808080828A8A8A8A8A8A8A8A8A8A","label":"rexx","flags":[]},{"gfx":"808080F8F8F8F8F8F8B8B8F8F8B8B8F8808080FFFFFFFFDFDFFDFDDFDFFDFDDFF8B8B8F8F8B8B8F8F8F8F8F8F8D0D080DFFDFDDFDFFDFDDFDFFFFFFFFFAAAA80808080FFFFFFFFFEFEAFAFFEFEAFAFFE8080808FAFAFAFAFAFAFAFAFAFAFAFAFFEAFAFFEFEAFAFFEFEFFFFFFFFD5D580AFAFAFAFAFAFAFAFAFAFAFAFAFAAAA80","label":"pady","flags":[]},{"gfx":"0080C07070303030303030303030303000AAAA7F0045001400150051005400003030707000703018187C4C7E000000000000007F007F0000007F017F0000000000D5D57F400A0028000A002000080000008A8A8B8B8B8B8B8B8B8B8B8B8B8B8B0000407F007F6030301F187F000000008B8B8B03000F0C060603030100000000","label":"term","flags":[]},{"gfx":"80808080808080A0C0A0C0A0808088AA8080808080808185AA858285C1D0A0D0D4AA94AA94AA888080A0C0A0C0A08080AAD2A2D2A2D2A2D2C185AA858285818080A0A8D0A8A09090D581A1C1A0C2A1C280808180818080808081858285828582A1828182959291929090D5808080808085818080808084958A958A958A958480","label":"libb","flags":[]},{"gfx":"808080808080808088A082A8A0AAA8AA849494D4D4D4D0D5D4D1D5D58595D5D5AAAA8AAA8AAA82AA828A808280808080D4D5D4D5D4D5D4D4D4D4D0C0C0C080808080808080A288A2A08AA2AAAAAAAAAA84949495958585808181848184848581AAAAAA8AAA8AAA8AAAAAA8A2A2AAAA8080818181818181818585818185818080","label":"chuck","flags":[]}],"font":[{"flags":[],"gfx":"8080808080808080"},{"flags":[],"gfx":"8C8C8C8C88808C80"},{"flags":[],"gfx":"B3B3928080808080"},{"flags":[],"gfx":"B6FFB6B6B6FFB680"},{"flags":[],"gfx":"8CBE839EB09F8C80"},{"flags":[],"gfx":"80A3938884B2B180"},{"flags":[],"gfx":"8E9B9BCEBBB3EE80"},{"flags":[],"gfx":"8C8C888080808080"},{"flags":[],"gfx":"988C8C8C8C8C9880"},{"flags":[],"gfx":"8C98989898988C80"},{"flags":[],"gfx":"8CAD9E8C9EAD8C80"},{"flags":[],"gfx":"808C8CBF8C8C8080"},{"flags":[],"gfx":"808080808C8C8880"},{"flags":[],"gfx":"8080809C80808080"},{"flags":[],"gfx":"80808080808C8C80"},{"flags":[],"gfx":"80A0B0988C868280"},{"flags":[],"gfx":"9CB6B6BEB6B69C80"},{"flags":[],"gfx":"989C989898989880"},{"flags":[],"gfx":"9CB6B0988C86BE80"},{"flags":[],"gfx":"9CB6B098B0B69C80"},{"flags":[],"gfx":"9C9E9B9BBF989880"},{"flags":[],"gfx":"BE86869EB0B09E80"},{"flags":[],"gfx":"9C86869EB6B69C80"},{"flags":[],"gfx":"BEB0B0988C8C8C80"},{"flags":[],"gfx":"9CB6B69CB6B69C80"},{"flags":[],"gfx":"9CB6B6BCB0B09C80"},{"flags":[],"gfx":"808C8C808C8C8080"},{"flags":[],"gfx":"808C8C808C8C8880"},{"flags":[],"gfx":"B0988C868C98B080"},{"flags":[],"gfx":"8080BE80BE808080"},{"flags":[],"gfx":"868C98B0988C8680"},{"flags":[],"gfx":"9CB6B0988C808C80"},{"flags":[],"gfx":"9EB3B3BBBB839E80"},{"flags":[],"gfx":"9CB6B6B6BEB6B680"},{"flags":[],"gfx":"9EB6B69EB6B69E80"},{"flags":[],"gfx":"9CB6868686B69C80"},{"flags":[],"gfx":"9EB6B6B6B6B69E80"},{"flags":[],"gfx":"BE86869E8686BE80"},{"flags":[],"gfx":"BE86869E86868680"},{"flags":[],"gfx":"9EB383BBB3B39E80"},{"flags":[],"gfx":"B6B6B6BEB6B6B680"},{"flags":[],"gfx":"8C8C8C8C8C8C8C80"},{"flags":[],"gfx":"B0B0B0B0B6BE9C80"},{"flags":[],"gfx":"B6B69E9EB6B6B680"},{"flags":[],"gfx":"868686868686BE80"},{"flags":[],"gfx":"92BFBFBFB3B3B380"},{"flags":[],"gfx":"9EB6B6B6B6B6B680"},{"flags":[],"gfx":"9CB6B6B6B6B69C80"},{"flags":[],"gfx":"9EB6B69E86868680"},{"flags":[],"gfx":"9CB6B6B6BEB6BC80"},{"flags":[],"gfx":"9EB6B69EB6B6B680"},{"flags":[],"gfx":"9CB6869CB0B69C80"},{"flags":[],"gfx":"BFBF8C8C8C8C8C80"},{"flags":[],"gfx":"B6B6B6B6B6B69C80"},{"flags":[],"gfx":"B6B6B69C9C9C8880"},{"flags":[],"gfx":"B3B3B3BFBFBF9280"},{"flags":[],"gfx":"B6B6B69CB6B6B680"},{"flags":[],"gfx":"B6B6B6BCB0B09C80"},{"flags":[],"gfx":"BEBEB0988CBEBE80"},{"flags":[],"gfx":"BC8C8C8C8C8CBC80"},{"flags":[],"gfx":"8082868C98B0A080"},{"flags":[],"gfx":"9E98989898989E80"},{"flags":[],"gfx":"8894808080808080"},{"flags":[],"gfx":"808080808080BE80"}]} \ No newline at end of file diff --git a/neuttower/init.fnl b/neuttower/init.fnl index e544808..06e2c75 100644 --- a/neuttower/init.fnl +++ b/neuttower/init.fnl @@ -1,6 +1,7 @@ (local util (require :lib.util)) (local {: lo : hi : readjson} util) (local tile (util.reload :game.tiles)) +(local files (require :game.files)) (local {: prg : vm : org} (util.reload :neuttower.defs)) (local disk (util.reload :neuttower.disk)) @@ -15,8 +16,8 @@ (tile.appendtiles org.code) (org.code:append [:align 0x100] :font) -(tile.appendgfx org.code (tile.loadgfx tile.fn-font)) -(tile.append-portraitwords vm {:pneut #[:vm :chuck-mode :get (vm:if [:lit :pchuck] [:lit :pneut])]}) +(tile.appendgfx org.code files.game.font) +(tile.append-portraitwords vm {:neut #[:vm :chuck-mode :get (vm:if [:lit :portrait-chuck] [:lit :portrait-neut])]}) (util.reload :neuttower.level1) (util.reload :neuttower.level2) diff --git a/neuttower/level1.fnl b/neuttower/level1.fnl index ae0d46f..1d8ce57 100644 --- a/neuttower/level1.fnl +++ b/neuttower/level1.fnl @@ -1,12 +1,13 @@ (local {: readjson} (require :lib.util)) -(local {: deflevel : say : itile : controlstate : tilelist} (require :neuttower.defs)) +(local {: deflevel : say : itile : controlstate} (require :neuttower.defs)) (local {: ev} (require :neuttower.entity)) (local {: decode-itile : encode-yx} (require :game.tiles)) -(local level (deflevel "game/map1.json" :level1)) +(local files (require :game.files)) +(local level (deflevel 1 :level1)) (local vm level.vm) -(let [map (readjson "game/map1.json") - maptiles (map.map:fromhex) +(let [map (. files.game.levels 1) + maptiles map.map furniture-yx []] (for [ibyte 1 (length maptiles)] (let [btile (maptiles:sub ibyte ibyte) @@ -14,7 +15,7 @@ itile (+ (decode-itile enctile) 1) mx (+ (% (- ibyte 1) 20) 1) my (- 12 (math.floor (/ (- ibyte 1) 20)))] - (when (. tilelist itile :flags :debris) + (when (. files.game.tiles itile :flags :debris) (table.insert furniture-yx (encode-yx {:x mx :y my}))))) (vm.code:append :furniture-yx) (for [_ 1 10] diff --git a/neuttower/level2.fnl b/neuttower/level2.fnl index 0714bce..b00300c 100644 --- a/neuttower/level2.fnl +++ b/neuttower/level2.fnl @@ -1,6 +1,6 @@ (local {: deflevel : say : itile} (require :neuttower.defs)) (local {: ev} (require :neuttower.entity)) -(local level (deflevel "game/map2.json" :level2)) +(local level (deflevel 2 :level2)) (local vm level.vm) level diff --git a/neuttower/level3.fnl b/neuttower/level3.fnl index 78304ae..5ab6556 100644 --- a/neuttower/level3.fnl +++ b/neuttower/level3.fnl @@ -1,8 +1,8 @@ (local {: deflevel : say : itile : controlstate} (require :neuttower.defs)) (local {: ev} (require :neuttower.entity)) -(local level (deflevel "game/map3.json" :level3)) +(local level (deflevel 3 :level3)) (local tile (require :game.tiles)) -(local {: walkable : neutable : debris} tile.flag-to-bit) +(local {: walkable : neutable : debris} (tile.flag-to-bit)) (local vm level.vm) diff --git a/neuttower/level4.fnl b/neuttower/level4.fnl index 9eb0591..9463c2e 100644 --- a/neuttower/level4.fnl +++ b/neuttower/level4.fnl @@ -1,6 +1,6 @@ (local {: deflevel : say : itile} (require :neuttower.defs)) (local {: ev} (require :neuttower.entity)) -(local level (deflevel "game/map4.json" :level4)) +(local level (deflevel 4 :level4)) (local vm level.vm) (vm:word :term-dual-link diff --git a/neuttower/level5.fnl b/neuttower/level5.fnl index 8d3c3fe..de61e09 100644 --- a/neuttower/level5.fnl +++ b/neuttower/level5.fnl @@ -1,14 +1,15 @@ -(local {: deflevel : say : itile : controlstate : tilelist} (require :neuttower.defs)) +(local {: deflevel : say : itile : controlstate} (require :neuttower.defs)) (local {: ev} (require :neuttower.entity)) (local tile (require :game.tiles)) +(local files (require :game.files)) (local {: notes} (require :neuttower.boop)) -(local {: walkable : neutable : debris : sittable} tile.flag-to-bit) -(local level (deflevel "game/map5.json" :level5)) +(local {: walkable : neutable : debris : sittable} (tile.flag-to-bit)) +(local level (deflevel 5 :level5)) (local vm level.vm) (vm:word :snd-dropgarbage (notes [:a1] 0x02 0xf0)) (vm.code:append :debristiles) -(each [itile tiledef (ipairs tilelist)] +(each [itile tiledef (ipairs files.game.tiles)] (when tiledef.flags.debris (vm.code:append [:db (tile.encode-itile itile)]))) (vm:word :randomgarbage :rnd 0x03 :& :lit :debristiles :+ :bget) diff --git a/neuttower/level6.fnl b/neuttower/level6.fnl index e364f08..ceb269f 100644 --- a/neuttower/level6.fnl +++ b/neuttower/level6.fnl @@ -1,8 +1,8 @@ (local {: deflevel : say : say-runon : itile : controlstate} (require :neuttower.defs)) (local {: ev} (require :neuttower.entity)) (local tile (require :game.tiles)) -(local {: walkable : neutable : debris : sittable} tile.flag-to-bit) -(local level (deflevel "game/map6.json" :level6)) +(local {: walkable : neutable : debris : sittable} (tile.flag-to-bit)) +(local level (deflevel 6 :level6)) (local vm level.vm) (vm:word :linkloop ; e -- e diff --git a/neuttower/player.fnl b/neuttower/player.fnl index d43e868..7f7d5ab 100644 --- a/neuttower/player.fnl +++ b/neuttower/player.fnl @@ -1,7 +1,7 @@ (local tile (require :game.tiles)) (local {: vm : mapw : maph : itile : controlstate} (require :neuttower.defs)) -(local {: walkable : neutable : debris : sittable} tile.flag-to-bit) +(local {: walkable : neutable : debris : sittable} (tile.flag-to-bit)) (vm:word :movement-dir ; key -- dyx (vm:case [(string.byte "I") 0xff00] diff --git a/wrap.fnl b/wrap.fnl index fe27eb4..e5f3ad8 100644 --- a/wrap.fnl +++ b/wrap.fnl @@ -5,8 +5,24 @@ (require :link.command) (local core (require :core)) (local command (require :core.command)) +(local common (require :core.common)) (local keymap (require :core.keymap)) (local translate (require :core.doc.translate)) +(local files (require :game.files)) + +(command.add nil { + "honeylisp:open-project" (fn [] + (core.command_view:enter "Open Project" + (fn [text item] + (files.reload (or (and item item.text) text)) + (core.log "Opened")) + (fn [text] + (local files []) + (each [_ item (pairs core.project_files)] + (print item.filename) + (when (and (= item.type :file) (item.filename:find "^.*/game%.json")) + (table.insert files item.filename))) + (common.fuzzy_match files text))))}) (command.add #(link.machine:connected?) { "honeylisp:upload" (fn []