diff --git a/asm/vm.fnl b/asm/vm.fnl index b4da450..399e726 100644 --- a/asm/vm.fnl +++ b/asm/vm.fnl @@ -314,7 +314,7 @@ (fn vm.for [self ...] [:vm :>r (vm:while [:rtop] :r> :dec :>r ...) :rdrop]) (fn vm.i [self] :rtop) - + (fn vm.when [self ...] [:block [:vm :bz :_end ...] :_end]) @@ -468,6 +468,21 @@ :noteq [:lda 0] (vm:drop) [:sta vm.TOP :x] [:sta vm.TOPH :x]]) + (vm:def :< ; a b -- f + [:block + [:lda vm.ST1H :x] + [:cmp vm.TOPH :x] + [:bcc :islower] + [:lda vm.ST1 :x] + [:cmp vm.TOP :x] + [:bcc :islower] + [:lda 0] (vm:drop) [:sta vm.TOP :x] [:sta vm.TOPH :x] (vm:ret) + :islower + [:lda 0xff] (vm:drop) [:sta vm.TOP :x] [:sta vm.TOPH :x]]) + (vm:word :<= :2dup :< :>rot := :|) + (vm:word :>= :< :not) + (vm:word :> :<= :not) + (vm:def :& ; a b -- c [:lda vm.TOP :x] [:and vm.ST1 :x] [:sta vm.ST1 :x] [:lda vm.TOPH :x] [:and vm.ST1H :x] [:sta vm.ST1H :x] @@ -477,7 +492,12 @@ [:lda vm.TOP :x] [:ora vm.ST1 :x] [:sta vm.ST1 :x] [:lda vm.TOPH :x] [:ora vm.ST1H :x] [:sta vm.ST1H :x] (vm:drop)) - + + (vm:def :shl4 ; n -- n + [:asl vm.TOP :x] [:rol vm.TOPH :x] + [:asl vm.TOP :x] [:rol vm.TOPH :x] + [:asl vm.TOP :x] [:rol vm.TOPH :x] + [:asl vm.TOP :x] [:rol vm.TOPH :x]) vm) {:new mk-vm} diff --git a/game/defs.fnl b/game/defs.fnl index 3b63a13..5d7d6f0 100644 --- a/game/defs.fnl +++ b/game/defs.fnl @@ -18,10 +18,10 @@ (local org { :tiles (prg:org 0x4100) - :font (prg:org 0x4900) - :map (prg:org 0x4800) - :entity (prg:org 0x4b00) - :levelcode (prg:org 0x4c00) + :map (prg:org 0x4900) + :font (prg:org 0x4a00) + :entity (prg:org 0x4c00) + :levelcode (prg:org 0x4d00) :code vm.code }) @@ -100,12 +100,16 @@ (set level.vm.code (level:org org.levelcode.org)) level) -(fn say [portrait ...] +(fn say-runon [portrait ...] (local result [:vm :show-footer :lit (.. :p portrait) :draw-portrait]) (local lines [...]) (local ilineOffset (if (< (length lines) 4) 1 0)) (each [iline line (ipairs lines)] (table.insert result [:vm (vm:str line) (.. :draw-text (+ iline ilineOffset))])) + result) + +(fn say [portrait ...] + (local result (say-runon portrait ...)) (table.insert result :dismiss-dialog) result) @@ -113,5 +117,5 @@ (let [tilelist (tiles.loadgfx tiles.fn-tiles)] (fn [label] (tiles.find-itile tilelist label)))) -{: vm : prg : mapw : maph : mon : org : achar : astr : rot8l : deflevel : say : itile : controlstate} +{: vm : prg : mapw : maph : mon : org : achar : astr : rot8l : deflevel : say : say-runon : itile : controlstate} diff --git a/game/entity.fnl b/game/entity.fnl index b96bcfc..fcd5376 100644 --- a/game/entity.fnl +++ b/game/entity.fnl @@ -1,6 +1,6 @@ (local util (require :lib.util)) (local tiles (util.require :game.tiles)) -(local {: vm : org : itile} (require :game.defs)) +(local {: vm : org : itile : say : say-runon} (require :game.defs)) (local {: lo : hi} util) ; Entity memory layout: @@ -37,16 +37,17 @@ :dup :lookup-entity :get :rtop := (vm:when :lookup-entity :swap) ) :drop :rdrop) -(vm.code:append :responder [:dw 0]) -(vm:word :get-responder :lit :responder :get) +(vm:var :responder 0) +(vm:word :get-responder :responder :get) (vm:word :entity-itile :get :itile-at) (vm:word :responder-itile :get-responder :entity-itile) (vm:word :entity>do ; entity ev -- - :over :lit :responder :dup :get :>r :set + :over :responder :dup :get :>r :set :swap 2 :+ :get :execute - :r> :lit :responder :set) - -(vm:word :linked-entity :get-responder :dup 4 :+ :get :dup (vm:if [:execute] [:drop 6 :+ :get])) + :r> :responder :set) +(vm:word :link-arg ; e -- a + 6 :+ :get) +(vm:word :linked-entity :get-responder :dup 4 :+ :get :dup (vm:if [:execute] [:drop :link-arg])) (vm:word :entity-at>do ; yx ev -- f :>r :entity-at :dup (vm:if [:r> :entity>do vm.true] [:rdrop])) (vm:word :touch-entity ; yx -- f @@ -125,6 +126,34 @@ (itile :t-rexx) :set-respondertile 0 :set-rexx :move-to-responder])]))) + +(vm:word :read-digit ; -- digit + (vm:while [:read-key :dup 0x3a :< :over 0x30 :>= :& :not] :drop) 0x30 :-) + +(vm:word :keypad-digit ; pscreen -- n + :read-digit :swap :over :draw-digit) +(vm:word :next-digit ; pscreen n -- pscreen n + :shl4 :over :keypad-digit :+ :swap 1 :+ :swap) +(vm:word :draw-single-keypad-hash ; pscreen -- pscreen + :dup (string.byte "#") :draw-char 1 :+) +(vm:word :read-keypad ; -- n + 0x23e2 :dup + :draw-single-keypad-hash :draw-single-keypad-hash :draw-single-keypad-hash :draw-single-keypad-hash :drop + 0 :next-digit :next-digit :next-digit :next-digit :swap :drop :cleartext) +(vm:word :keypad ; ev code -- + :>r + (vm:if-and [[ev.touch :=] [:is-jaye?]] + [(say-runon :pady "ENTER YOUR 4-DIGIT DOOR CODE!" "AND HAVE A SUPER DAY!") + :read-keypad :dup :. :rtop := (vm:if [ + (say :pady "THAT'S RIGHT! HOORAY!" "YOU GET A GOLD STAR!") + :drop ev.act + ] [ + (say :pady "OHHH, SORRY! THAT'S NOT IT." "BETTER LUCK NEXT TIME!") + ])]) + :rdrop + :dup (itile :t-keyoff) (itile :t-keyon) :handle-onoff + (itile :t-keyon) :activate-link) + (vm:word :trigger-sidekick (vm:if-and [[:is-jaye?] [:gord-sitting :get]] [:gord-yx :get ev.touch :entity-around>do])) diff --git a/game/footer.fnl b/game/footer.fnl index 8466d1b..6c939c8 100644 --- a/game/footer.fnl +++ b/game/footer.fnl @@ -28,6 +28,8 @@ (vm:word :draw-char ; pscreen c -- :lookup-pchar :draw-pchar) +(vm:word :draw-digit ; pscreen n -- + 0x30 :+ :draw-char) (vm:word :snooze (vm:for)) (vm:word :textsnooze 0x30 :snooze) diff --git a/game/init.fnl b/game/init.fnl index fcb35e5..a898576 100644 --- a/game/init.fnl +++ b/game/init.fnl @@ -200,7 +200,7 @@ ) :quit]) -(util.reload :game.level5) +(util.reload :game.level6) (prg:assemble) diff --git a/game/level6.fnl b/game/level6.fnl new file mode 100644 index 0000000..c34cdcd --- /dev/null +++ b/game/level6.fnl @@ -0,0 +1,16 @@ +(local {: deflevel : say : itile : controlstate} (require :game.defs)) +(local {: ev} (require :game.entity)) +(local tile (require :game.tiles)) +(local {: walkable : neutable : debris : sittable} tile.flag-to-bit) +(local level (deflevel "game/map6.json")) +(local vm level.vm) + +(vm:word :linkloop ; e -- e + (vm:until :link-arg :dup :entity-itile (itile :termon) :=)) + +(vm:word :keypad1 0x1234 :keypad) +(vm:word :keypad2 0x2345 :keypad) +(vm:word :keypad3 0x3456 :keypad) +(vm:word :keypad4 0x4567 :keypad) + +level diff --git a/game/map6.json b/game/map6.json new file mode 100644 index 0000000..6aea406 --- /dev/null +++ b/game/map6.json @@ -0,0 +1 @@ +{"neut":{"y":1,"x":5},"map":"210261616161616161616161812261616161E1614161C2C081C0C0C0C0C0C0C0C0C0E0C081C0C0622161E04384C0C0C043C0C0C043C0C0C0848201612102616161C0C061610281026161C0C0616161612161C2C0C0C0C061E2C0C0C0A261C0C0C0C0E2612161E003C0C0C061C0C0C0C08261C0C0C003E06121026161C0C0C061E08282E2E061C0C0C06161612161C2C0C0C0C06103C0C0C02361C0C0C0C0C2614161E003C0C0C0616102C1026161C0C0C003E06121026184C0C0C0C043C043C063C0C0C0846161612161E081C0C0C0C0C0C0C0C0C0C0C0C081C083612161612261816161616161616161616161616161","tickword":"","jaye":{"y":2,"x":6},"gord-following":true,"moveword":"","objects":[{"x":3,"link":6,"func":"term","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":"term","linkword":"linkloop","name":"","y":6},{"x":9,"link":5,"func":"term","linkword":"linkloop","name":"","y":6},{"x":11,"func":"switch","linkword":"","name":"","y":4},{"x":3,"link":1,"func":"term","linkword":"linkloop","name":"","y":7},{"x":3,"link":8,"func":"term","linkword":"linkloop","name":"","y":4},{"x":3,"link":9,"func":"term","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":"term","linkword":"linkloop","name":"","y":4},{"x":19,"link":19,"func":"term","linkword":"linkloop","name":"","y":7},{"x":19,"link":23,"func":"term","linkword":"linkloop","name":"","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":10,"func":"term","linkword":"linkloop","name":"","y":11},{"x":14,"link":25,"func":"scan","linkword":"","name":"","y":12},{"x":13,"func":"door","linkword":"","name":"","y":12}]} \ No newline at end of file diff --git a/game/portraits.json b/game/portraits.json index b90a6ca..fd97f00 100644 --- a/game/portraits.json +++ b/game/portraits.json @@ -1 +1 @@ -[{"gfx":"8080808080E0E0F0F8FC2CBCACACACAC80809CFEFFFFFFD7D5D5555D4F5DD5D5BCB8B8B8F8F8F8F8FCFCFEFE86D0D0D495D5D5E5D5D5D5D7C797D7D0AAAAAAAA808086BFFFFFFFFAEAAA2A2E3C2EAAAA80808080808183878787058F8D8D8D8FAAAAAAA7AAAAEAEAE2E8EA8AD5D5D5D58F8F8787878F8F8F9F9FBFBE808A8AAA","label":"pjaye","flags":[]},{"gfx":"00002020000000004808080800202028004040011404450144010805445420352020000808084800000000202000000020544405080144014504140140400000000202012921220122011021222A052D00000405000001011211101100040415052A222110012201222129010202000004040011101112010100000504000000","label":"pneut","flags":[]},{"gfx":"80C090808484848484848484A8A8A8A8AA8080808080D4D4D5D5F59DFDD5D5D5A8A08080808080808080808080E0F8FC95D5D5D5F595D5D4D084D4D4D4D7FFFFD58080808080AAAAAAAABAE2FAAAAAA280828880A0A0A0A1A1A1A1A195959595A0AAAAAAAFA8AAAA8AA0AAAAAAEAFFFF95858181818181808080808080879FBF","label":"pgord","flags":[]},{"gfx":"808080808080C0C0C0C0C0C0C0C0C0C0808080808080AAAAFAFAFAAAAAAAAAAA8080808080C0D0D0D0D0D0D0D0D0D0D0A0A0A0A0A0AAAAAAA8A8A8A8A8A8A8A8808080808080D5D5DFDFDFD5D5D5D5D5808080808080828282828282828282828585858585D5D5D595959595959595958080808080828A8A8A8A8A8A8A8A8A8A","label":"prexx","flags":[]}] \ No newline at end of file +[{"gfx":"8080808080E0E0F0F8FC2CBCACACACAC80809CFEFFFFFFD7D5D5555D4F5DD5D5BCB8B8B8F8F8F8F8FCFCFEFE86D0D0D495D5D5E5D5D5D5D7C797D7D0AAAAAAAA808086BFFFFFFFFAEAAA2A2E3C2EAAAA80808080808183878787058F8D8D8D8FAAAAAAA7AAAAEAEAE2E8EA8AD5D5D5D58F8F8787878F8F8F9F9FBFBE808A8AAA","label":"pjaye","flags":[]},{"gfx":"00002020000000004808080800202028004040011404450144010805445420352020000808084800000000202000000020544405080144014504140140400000000202012921220122011021222A052D00000405000001011211101100040415052A222110012201222129010202000004040011101112010100000504000000","label":"pneut","flags":[]},{"gfx":"80C090808484848484848484A8A8A8A8AA8080808080D4D4D5D5F59DFDD5D5D5A8A08080808080808080808080E0F8FC95D5D5D5F595D5D4D084D4D4D4D7FFFFD58080808080AAAAAAAABAE2FAAAAAA280828880A0A0A0A1A1A1A1A195959595A0AAAAAAAFA8AAAA8AA0AAAAAAEAFFFF95858181818181808080808080879FBF","label":"pgord","flags":[]},{"gfx":"808080808080C0C0C0C0C0C0C0C0C0C0808080808080AAAAFAFAFAAAAAAAAAAA8080808080C0D0D0D0D0D0D0D0D0D0D0A0A0A0A0A0AAAAAAA8A8A8A8A8A8A8A8808080808080D5D5DFDFDFD5D5D5D5D5808080808080828282828282828282828585858585D5D5D595959595959595958080808080828A8A8A8A8A8A8A8A8A8A","label":"prexx","flags":[]},{"gfx":"808080F8F8F8F8F8F8B8B8F8F8B8B8F8808080FFFFFFFFDFDFFDFDDFDFFDFDDFF8B8B8F8F8B8B8F8F8F8F8F8F8D0D080DFFDFDDFDFFDFDDFDFFFFFFFFFAAAA80808080FFFFFFFFFEFEAFAFFEFEAFAFFE8080808FAFAFAFAFAFAFAFAFAFAFAFAFFEAFAFFEFEAFAFFEFEFFFFFFFFD5D580AFAFAFAFAFAFAFAFAFAFAFAFAFAAAA80","label":"ppady","flags":[]}] \ No newline at end of file diff --git a/game/tiles.json b/game/tiles.json index 26110ca..6140dbc 100644 --- a/game/tiles.json +++ b/game/tiles.json @@ -1 +1 @@ -[{"gfx":"7F7F1F03090923436943230909031F7F7F7F784111104542174245101141787F","word":"","label":"neut1","flags":[]},{"gfx":"7F1F03090923436943230909031F7F7F7F784111104542174245101141787F7F","word":"","label":"neut2","flags":[]},{"gfx":"808080C0C0C0E0C0D0C8C04040404080808083058585828A9282820A08081980","word":"","label":"jaye-e","flags":[]},{"gfx":"8080C020A0A0C0C0D0C8C0501010188080808183838782828A8A920202020380","word":"","label":"jaye-w","flags":[]},{"gfx":"8080E030B0B098C0D0D0C840404060808080870D8D8D99828A8A920202020780","word":"","label":"jaye-s","flags":[]},{"gfx":"8080C0E0E0E0B0C0D0C8C040404060808080838787878D828A92820202020780","word":"","label":"jaye-n","flags":[]},{"gfx":"80808C8080808080B08080808C808080808C80808083B0808080808080868080","word":"","label":"t-floor","flags":{"walkable":true}},{"gfx":"007C0C0C0C0C7C007C7E7EAA88888800001F181818181F001F0F979584848400","word":"term","label":"termoff","flags":[]},{"gfx":"007C2C0C0C2C7C007C7E7EAA88888800001F18191C191F001F0F979584848400","word":"term","label":"termon","flags":{"neutable":true}},{"gfx":"D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA","word":"","label":"","flags":[]},{"gfx":"D5D5D5D5D5F5F5FDDDD5D5D5D5D5D5D5AAAAAAAAAEAEBFBFBFABAAAAAAAAAAAA","word":"","label":"","flags":[]},{"gfx":"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF","word":"","label":"","flags":{"neutable":true}},{"gfx":"FF8FA7B3B3B3B3B3B3B3B3B3B3B383FFFFF8F2E6E6E6E6E6E6E6E6E6E6E6E0FF","word":"door","label":"doorclosed","flags":[]},{"gfx":"FF8F87838383838383838383838383FFFFF8F0E0E0E0E0E0E0E0E0E0E0E0E0FF","word":"door","label":"dooropen","flags":{"walkable":true}},{"gfx":"FFFFCFCFCFCF898183838787878FFFFFFFFCE4E4E4E4E0E0E0E0E0E0F0F8FFFF","word":"switch","label":"switchoff","flags":{"neutable":true}},{"gfx":"FFFFCFCFCFCF898123232727878FFFFFFFFCE4E4E4E0E0616565656571F8FFFF","word":"switch","label":"switchon","flags":{"neutable":true}},{"gfx":"FFFF83D3D3D3D3D3D3D3D3D3D383FFFFFFFFC0CACACECACBCACACACACAC0FFFF","word":"","label":"","flags":[]},{"gfx":"FFFFAFEBFBFBFBBBBBFBFBFBEBAFFFFFFFFFF5D7DFDFDFDDDDDFDFDFD7F5FFFF","word":"scan","label":"scanoff","flags":{"neutable":true}},{"gfx":"FFFF2F2B2B2B6B6B6B6B2B2B2B2FFFFFFFFF755555555757575755555575FFFF","word":"scan","label":"scanon","flags":{"neutable":true}},{"gfx":"FFF3C78FBFFCF98187BFFFFFBF9F9FC7FFCFE1F1FCFCF8FEFEFCF9F0E6CE8F9F","word":"","label":"","flags":[]},{"gfx":"80808C80808080A8AAAAAAA888888880808C8080808380859595958584848480","word":"","label":"","flags":[]},{"gfx":"80808C8080A0A0A8AAAA8AA0A8808080808C8081919090848594959585858080","word":"","label":"broken-table","flags":{"debris":true}},{"gfx":"00005054545450404054545010383800000C0A2A2A2A0A03032A2A0A081C1C00","word":"","label":"t-chair","flags":{"sittable":true}},{"gfx":"0000001C1C10545040606010545454000030070702020A0A0100020A080A0200","word":"","label":"","flags":{"debris":true}},{"gfx":"80A0A8AA92D2D2AAC2C2AA92D2AA808080959595949494959494959494858080","word":"","label":"","flags":[]},{"gfx":"80808C808080A8C292AAAAAAAA8AC0D0808C80808083959290959194948580A8","word":"","label":"","flags":{"debris":true}},{"gfx":"80806008282A0800202880A8A8A8A08080980000141501051511819595958580","word":"","label":"","flags":[]},{"gfx":"80808C808080A0A8AAAA8AA2AAAAAA80808C0000000330010105051511010514","word":"","label":"","flags":{"debris":true}},{"gfx":"80D0D0D0C0D4C4C4CECAC0E0A0808080808A8B8A82AAA2A2F2D2828785808080","word":"rexx","label":"t-rexx","flags":[]},{"gfx":"F8989898BE8686868686BEB098F880809F989898FCE0E0E0E0E0FC8C989F8080","word":"rexx","label":"t-rexxstop","flags":[]},{"gfx":"80808C8088A8A8E0E0F0C8C0CCC08080808C80808080B08183838282829A8080","word":"","label":"gord-ground","flags":[]},{"gfx":"808080A0A080F0F0F0E8D0D09098808080808081818083838385828282868080","word":"","label":"gord-s","flags":[]},{"gfx":"80C09090A080F0F0F0F0D0D09098808080808282818083838383828282868080","word":"","label":"gord-n","flags":[]},{"gfx":"808080A0A080F0F0F0F0D0D090B0808080808181818081838581808282868080","word":"","label":"gord-e","flags":[]},{"gfx":"8080A0A0A080E0F0E8E0D0D09098808080808081818083838383828282838080","word":"","label":"gord-w","flags":[]},{"gfx":"0088A8A8047470F8B8D4D4C4C4E40600000C0A2A2A2A0A81812A2A0A081C1C00","word":"","label":"gord-sit","flags":[]}] \ No newline at end of file +[{"gfx":"7F7F1F03090923436943230909031F7F7F7F784111104542174245101141787F","word":"","label":"neut1","flags":[]},{"gfx":"7F1F03090923436943230909031F7F7F7F784111104542174245101141787F7F","word":"","label":"neut2","flags":[]},{"gfx":"808080C0C0C0E0C0D0C8C04040404080808083058585828A9282820A08081980","word":"","label":"jaye-e","flags":[]},{"gfx":"8080C020A0A0C0C0D0C8C0501010188080808183838782828A8A920202020380","word":"","label":"jaye-w","flags":[]},{"gfx":"8080E030B0B098C0D0D0C840404060808080870D8D8D99828A8A920202020780","word":"","label":"jaye-s","flags":[]},{"gfx":"8080C0E0E0E0B0C0D0C8C040404060808080838787878D828A92820202020780","word":"","label":"jaye-n","flags":[]},{"gfx":"80808C8080808080B08080808C808080808C80808083B0808080808080868080","word":"","label":"t-floor","flags":{"walkable":true}},{"gfx":"007C0C0C0C0C7C007C7E7EAA88888800001F181818181F001F0F979584848400","word":"term","label":"termoff","flags":[]},{"gfx":"007C2C0C0C2C7C007C7E7EAA88888800001F18191C191F001F0F979584848400","word":"term","label":"termon","flags":{"neutable":true}},{"gfx":"D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA","word":"","label":"","flags":[]},{"gfx":"D5D5D5D5D5F5F5FDDDD5D5D5D5D5D5D5AAAAAAAAAEAEBFBFBFABAAAAAAAAAAAA","word":"","label":"","flags":[]},{"gfx":"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF","word":"","label":"","flags":{"neutable":true}},{"gfx":"FF8FA7B3B3B3B3B3B3B3B3B3B3B383FFFFF8F2E6E6E6E6E6E6E6E6E6E6E6E0FF","word":"door","label":"doorclosed","flags":[]},{"gfx":"FF8F87838383838383838383838383FFFFF8F0E0E0E0E0E0E0E0E0E0E0E0E0FF","word":"door","label":"dooropen","flags":{"walkable":true}},{"gfx":"FFFFCFCFCFCF898183838787878FFFFFFFFCE4E4E4E4E0E0E0E0E0E0F0F8FFFF","word":"switch","label":"switchoff","flags":{"neutable":true}},{"gfx":"FFFFCFCFCFCF898123232727878FFFFFFFFCE4E4E4E0E0616565656571F8FFFF","word":"switch","label":"switchon","flags":{"neutable":true}},{"gfx":"FFFF83D3D3D3D3D3D3D3D3D3D383FFFFFFFFC0CACACECACBCACACACACAC0FFFF","word":"","label":"","flags":[]},{"gfx":"FFFFAFEBFBFBFBBBBBFBFBFBEBAFFFFFFFFFF5D7DFDFDFDDDDDFDFDFD7F5FFFF","word":"scan","label":"scanoff","flags":{"neutable":true}},{"gfx":"FFFF2F2B2B2B6B6B6B6B2B2B2B2FFFFFFFFF755555555757575755555575FFFF","word":"scan","label":"scanon","flags":{"neutable":true}},{"gfx":"FFF3C78FBFFCF98187BFFFFFBF9F9FC7FFCFE1F1FCFCF8FEFEFCF9F0E6CE8F9F","word":"","label":"","flags":[]},{"gfx":"80808C80808080A8AAAAAAA888888880808C8080808380859595958584848480","word":"","label":"","flags":[]},{"gfx":"80808C8080A0A0A8AAAA8AA0A8808080808C8081919090848594959585858080","word":"","label":"broken-table","flags":{"debris":true}},{"gfx":"00005054545450404054545010383800000C0A2A2A2A0A03032A2A0A081C1C00","word":"","label":"t-chair","flags":{"sittable":true}},{"gfx":"0000001C1C10545040606010545454000030070702020A0A0100020A080A0200","word":"","label":"","flags":{"debris":true}},{"gfx":"80A0A8AA92D2D2AAC2C2AA92D2AA808080959595949494959494959494858080","word":"","label":"","flags":[]},{"gfx":"80808C808080A8C292AAAAAAAA8AC0D0808C80808083959290959194948580A8","word":"","label":"","flags":{"debris":true}},{"gfx":"80806008282A0800202880A8A8A8A08080980000141501051511819595958580","word":"","label":"","flags":[]},{"gfx":"80808C808080A0A8AAAA8AA2AAAAAA80808C0000000330010105051511010514","word":"","label":"","flags":{"debris":true}},{"gfx":"80D0D0D0C0D4C4C4CECAC0E0A0808080808A8B8A82AAA2A2F2D2828785808080","word":"rexx","label":"t-rexx","flags":[]},{"gfx":"F8989898BE8686868686BEB098F880809F989898FCE0E0E0E0E0FC8C989F8080","word":"rexx","label":"t-rexxstop","flags":[]},{"gfx":"80808C8088A8A8E0E0F0C8C0CCC08080808C80808080B08183838282829A8080","word":"","label":"gord-ground","flags":[]},{"gfx":"808080A0A080F0F0F0E8D0D09098808080808081818083838385828282868080","word":"","label":"gord-s","flags":[]},{"gfx":"80C09090A080F0F0F0F0D0D09098808080808282818083838383828282868080","word":"","label":"gord-n","flags":[]},{"gfx":"808080A0A080F0F0F0F0D0D090B0808080808181818081838581808282868080","word":"","label":"gord-e","flags":[]},{"gfx":"8080A0A0A080E0F0E8E0D0D09098808080808081818083838383828282838080","word":"","label":"gord-w","flags":[]},{"gfx":"0088A8A8047470F8B8D4D4C4C4E40600000C0A2A2A2A0A81812A2A0A081C1C00","word":"","label":"gord-sit","flags":[]},{"gfx":"FF81F9B9E9B9E9B9E9B9E9B9F9F981FFFFE0E7E7E5E7E5E7E5E7E5E7E7E7E0FF","word":"keypad","label":"t-keyoff","flags":[]},{"gfx":"7F01793969396939693969397979017F7F60676765676567656765676767607F","word":"keypad","label":"t-keyon","flags":[]}] \ No newline at end of file