From 97bf6262250a7aa9dda1d59834f51e94c4cc9474 Mon Sep 17 00:00:00 2001 From: Jeremy Penner Date: Sat, 17 Apr 2021 22:50:09 -0400 Subject: [PATCH] Attempted blank slate for 8Bitsy (doesn't yet build) --- NeutTower.dsk | Bin 143360 -> 0 bytes asm/asm.fnl | 25 +++-- editor/mapedit.fnl | 6 +- editor/tileedit.fnl | 2 +- game/boop.fnl | 13 --- game/bosskey.fnl | 59 ------------ game/cheat.fnl | 36 ------- game/content.fnl | 6 ++ game/defs.fnl | 26 ++--- game/disk.fnl | 13 +-- game/end.screen | 1 - game/entity.fnl | 126 +----------------------- game/font.json | 2 +- game/gfx.fnl | 8 +- game/init.fnl | 23 +---- game/level1.fnl | 68 ------------- game/level2.fnl | 6 -- game/level3.fnl | 93 ------------------ game/level4.fnl | 18 ---- game/level5.fnl | 93 ------------------ game/level6.fnl | 169 --------------------------------- game/map1.json | 2 +- game/map2.json | 1 - game/map3.json | 1 - game/map4.json | 1 - game/map5.json | 1 - game/map6.json | 1 - game/player.fnl | 122 ++---------------------- game/portraits.json | 2 +- game/tiles.fnl | 14 +-- game/tiles.json | 2 +- game/title.screen | 1 - lib/util.fnl | 9 +- luars232.so | Bin 60496 -> 42048 bytes support/mame/jeejah/init.lua | 2 +- vendor/lite/data/core/init.lua | 2 +- 36 files changed, 76 insertions(+), 878 deletions(-) delete mode 100644 NeutTower.dsk delete mode 100644 game/bosskey.fnl delete mode 100644 game/cheat.fnl create mode 100644 game/content.fnl delete mode 100644 game/end.screen delete mode 100644 game/level1.fnl delete mode 100644 game/level2.fnl delete mode 100644 game/level3.fnl delete mode 100644 game/level4.fnl delete mode 100644 game/level5.fnl delete mode 100644 game/level6.fnl delete mode 100644 game/map2.json delete mode 100644 game/map3.json delete mode 100644 game/map4.json delete mode 100644 game/map5.json delete mode 100644 game/map6.json delete mode 100644 game/title.screen diff --git a/NeutTower.dsk b/NeutTower.dsk deleted file mode 100644 index da69e49c1552e7c05b5a2aa674f2dfa7b687b52f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143360 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%0D@qB%*X6RkyP;ez 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 diff --git a/asm/asm.fnl b/asm/asm.fnl index 0eb2f6f..1dc4595 100644 --- a/asm/asm.fnl +++ b/asm/asm.fnl @@ -115,12 +115,13 @@ ; takes the form [:op args] ; pdat - a parsed dat; takes the form {:type type :addr addr ...} (local dat-parser {}) - (fn new-block [] {:type :block :pdats [] :symbols {} :globals {}}) + (fn new-block [last-symbol] {:type :block :pdats [] :symbols {} :globals {} : last-symbol}) (fn parse-dats [block dats] (each [_ dat (ipairs dats)] (if (= (type dat) "string") - (do (tset block.symbols dat (+ (length block.pdats) 1)) + (do (set block.last-symbol dat) + (tset block.symbols dat (+ (length block.pdats) 1)) (when (= (dat:sub 1 2) "G-") (tset block.globals dat true))) @@ -133,10 +134,12 @@ (if parser (parser dat block) (. opcodes opcode) (dat-parser.op dat) (error (.. "Unrecognized opcode " (fv opcode))))] - (table.insert block.pdats pdat) - (when (and pdat pdat.globals) - (each [name _ (pairs pdat.globals)] - (tset block.globals name (length block.pdats))))))) + (when pdat + (set pdat.nearest-symbol block.last-symbol) + (table.insert block.pdats pdat) + (when pdat.globals + (each [name _ (pairs pdat.globals)] + (tset block.globals name (length block.pdats)))))))) block) (fn dat-parser.op [op] @@ -146,7 +149,7 @@ (fn dat-parser.block [block] (let [dats (lume.clone block)] (table.remove dats 1) - (parse-dats (new-block) dats))) + (parse-dats (new-block block.last-symbol) dats))) (fn dat-parser.db [db] {:type :var :init (. db 2) :size 1}) (fn dat-parser.dw [dw] {:type :var :init (. dw 2) :size 2}) @@ -174,9 +177,11 @@ }) (fn process-pdat [pdat process default ...] -; (pp pdat) + (fn complain [ok ...] + (if ok (values ...) + (do (pp pdat) (error (.. process " failed in " pdat.type " near " (or pdat.nearest-symbol "") " @" (or pdat.addr "") " - " ...))))) (local processor (. pdat-processor pdat.type process)) - (if processor (processor pdat ...) default)) + (if processor (complain (pcall #(processor pdat $...) ...)) default)) (fn pdat-processor.op.patch [op env] (when (and op.mode (= (op.mode:sub 1 4) :addr)) @@ -251,6 +256,7 @@ (local block-env (make-env block env)) (var bytes "") (each [_ pdat (ipairs block.pdats)] + (print pdat.type pdat.addr pdat.nearest-symbol) (process-pdat pdat :generate nil block-env) (local pdatbytes (process-pdat pdat :bytes pdat.bytes block-env)) (assert (= (type pdatbytes) :string) (.. "failed to generate bytes: " (fv pdat))) @@ -311,6 +317,7 @@ (or (self:env-lookup name :lookup-addr) (self:parse-addr name))) :pass (fn [self passname] + (print passname) (each [org block (pairs self.org-to-block)] (: self passname org block (if self.prg-base (. self.prg-base.org-to-block org) nil)))) :gather-symbols diff --git a/editor/mapedit.fnl b/editor/mapedit.fnl index aa2f64e..77c98d0 100644 --- a/editor/mapedit.fnl +++ b/editor/mapedit.fnl @@ -99,7 +99,7 @@ (local itile (self:itile-from-xy mx my)) (local iobject (self:iobject-from-xy mx my)) (when (= self.itile nil) - (each [_ player (ipairs [:jaye :neut])] + (let [player :player] (match (. self.level player) {:x mx :y my} (renderer.draw_text style.font player tilex tiley style.text))) (love.graphics.setColor 1 1 1)) @@ -188,13 +188,11 @@ (set self.itile nil) (set self.playerpos nil)) (set y (+ y 30)) - (each [_ player (ipairs [:jaye :neut])] + (let [player :player] (when (checkbox self (.. "Position " player) (and (= self.itile nil) (= self.playerpos player)) x y) (set self.itile nil) (set self.playerpos player)) (set y (+ y 30))) - (when (checkbox self "Start with Gord" self.level.gord-following x y) - (set self.level.gord-following (not self.level.gord-following))) (set y (+ y 30)) (self:draw-tile-selector x y (- self.size.x 20))) diff --git a/editor/tileedit.fnl b/editor/tileedit.fnl index 0aed1ff..b6cc4cd 100644 --- a/editor/tileedit.fnl +++ b/editor/tileedit.fnl @@ -20,7 +20,7 @@ (values ibyte ibit))) (fn TileView.tilesize [self] (values 16 16)) -(fn TileView.tilekeys [self] [:gfx :neut]) +(fn TileView.tilekeys [self] [:gfx]) (fn get-byte [tile ibyte] (: (tile:sub (+ ibyte 1) (+ ibyte 1)) :byte)) diff --git a/game/boop.fnl b/game/boop.fnl index b118b55..93369f0 100644 --- a/game/boop.fnl +++ b/game/boop.fnl @@ -68,19 +68,6 @@ (vm:word :snd-explode 0x40 :lit :randombytes :blipmem) (vm:word :snd-dooropen (notes [:c1 :e1] 3)) (vm:word :snd-doorclose (notes [:e1 :c1] 3)) -(vm:word :snd-term-jingle (notes [:e3 :f3 :g3] 0x20)) -(vm:word :snd-termon :snd-term-jingle (note :c4 0x20)) -(vm:word :snd-termoff :snd-term-jingle (note :c3 0x20)) -(vm:word :snd-rexx (notes [:c2 :g2 :e2 :c3] 0x08 0x08)) -(vm:word :snd-libb (notes [:d#1 :g#1 :f#1 :g1] 0x08 0x7f)) -(vm:word :snd-garbage (notes [:a5 :a3 :a2] 0x04 0xa0)) (vm:word :snd-teleport (notes [:e4 :d#4 :d4 :g#4] 0x1a 0x50)) -(vm.code:append :keypad-boops) -(each [_ n (ipairs [:c4 :c#4 :d4 :d#4 :e4 :f4 :f#4 :g4 :g#4 :a5])] - (vm.code:append [:dw (- (note-wavelength n) 0xd0)])) -(vm:word :snd-keypad ; digit -- - :dup :+ :lit :keypad-boops :+ :get 0x10d0 :swap :bliptone) -(vm:word :snd-cheat (notes [:g4 :f#4 :d#4 :a4 :g#3 :e4 :g#4 :c5] 0x30 0x20)) - {: note : notes} diff --git a/game/bosskey.fnl b/game/bosskey.fnl deleted file mode 100644 index bad5bfa..0000000 --- a/game/bosskey.fnl +++ /dev/null @@ -1,59 +0,0 @@ -(local util (require :lib.util)) -(local {: vm : prg : astr : style} (util.require :game.defs)) -(vm:word :boss-key :textmode :page2 (vm:until :read-key) :hires :page1) - -; if we upload to page 2 we don't have to worry about clobbering screen holes -(local textorg (prg:org 0x0800)) - -(fn padding [s w style] - (string.rep (astr " " style) (- w (length s)))) -(fn pad [s w style] - (.. s (padding s w style))) -(fn rpad [s w style] - (.. (padding s w style) s)) -(fn cellpad [s ?style] - (local textstyle (or ?style style.normal)) - (match (type s) - :nil (pad "" 9 textstyle) - :string (pad (astr s textstyle) 9 textstyle) - :number (rpad (astr (.. s " ") textstyle) 9 textstyle) - :table (cellpad (. s 1) (. s 2)))) -(fn cells [r a b c d] - (.. (rpad (.. r "") 3 style.inverse) - (cellpad a) (cellpad b) (cellpad c) (cellpad d))) - -(fn generate-boss-screen-lines [] - [(-> (astr "A16 (L) TOTAL" style.inverse) - (pad 38 style.inverse) - (.. (astr "C!" style.inverse))) - (.. (pad "" 38 style.inverse) (astr "24")) - "" - (cells "" [" A" style.inverse] [" B" style.inverse] [" C" style.inverse] [" D" style.inverse]) - (cells 1 "DEFINITEL" "Y REAL WO" "RK" "") - (cells 2 "(NOT PLAY" "ING COMPU" "TER GAMES" ")") - (cells 3) - (cells 4 "" "HAMMERS" "BILLS" "SANDWICH") - (cells 5 "JANUARY" 23 "$1" "CLUB") - (cells 6 "FEBRUARY" 121 "$2" "REUBEN") - (cells 7 "MARCH" 38 "$5" "BLT") - (cells 8 "SMARCH" 97 "$10" "HOT DOG") - (cells 9 "APRIL" 555 "$20" "I SAID IT") - (cells 10 "WEDNESDAY" 246 "$50" "EGG SALAD") - (cells 11 "KEYCODE" 1337 2757 9876) - (cells 12 "NUMBERS" 12345 "$100" "IF I HAD") - (cells 13 "LETTERS" "MARMOTS" "BENJAMIN" "100 I'D") - (cells 14 "SYMBOLS" "^!@#%&?" "$$$$$" "EAT THEM") - (cells 15) - (cells 16 ["TOTAL" style.inverse] "TOO MANY" ["* MAGIC *" style.flashing] "ALL@ONCE") - (cells 17) (cells 18) (cells 19) (cells 20)]) - -(fn bytes-from-lines [lines] - (var bytes (string.rep (astr " ") 0x400)) - (each [y line (ipairs lines)] - (local offset (+ (* (math.floor (/ (- y 1) 8)) 0x28) - (* (% (- y 1) 8) 0x80))) - (set bytes (util.splice bytes offset line))) - bytes) - -(textorg:append [:bytes (bytes-from-lines (generate-boss-screen-lines))]) - diff --git a/game/cheat.fnl b/game/cheat.fnl deleted file mode 100644 index ebd6be4..0000000 --- a/game/cheat.fnl +++ /dev/null @@ -1,36 +0,0 @@ -(local {: vm : say-runon : say} (require :game.defs)) - -(fn defcheat [name ...] - (local cheatdata (.. name "-data")) - (vm.code:append cheatdata [:db 0] [:bytes name] [:db 0]) - (vm:word name :lit cheatdata :cheatguard ...)) - -(vm:word :pcheatnext ; cheatdata -- pchar - :dup :bget :inc :+) -(vm:word :reset-cheat ; cheatdata -- - 0 :swap :bset) -(vm:word :cheatguard ; char cheatdata -- [optional rdrop] - :dup :pcheatnext :bget :=] [:dup 7 :<]] - [:dec :dup :+ :lit :level-pointers :+ :get :load-level] - [:drop])) - -(defcheat :NTCHUCK :chuck-mode :get :not :chuck-mode :set - :chuck-mode :get (vm:if - [(say :neut "CHUCK MODE ENABLED!" "* W H I N N Y *")] - [(say :neut "CHUCK MODE DISABLED." "BEEP BOOP.")])) - -(vm:word :cheat-key ; ascii -- - (vm:if-and [[:dup (string.byte "A") :>=] [:dup (string.byte "Z") :<=]] - [:dup :NTSPISPOPD :dup :NTXYZZY :NTCHUCK] - [:drop])) diff --git a/game/content.fnl b/game/content.fnl new file mode 100644 index 0000000..d5b77ca --- /dev/null +++ b/game/content.fnl @@ -0,0 +1,6 @@ +; TODO: Generate from data? +(local {: vm : say : deflevel} (require :game.defs)) + +(deflevel "game/map1.json" :map1) +(vm:word :cat (say :pcat "I'M A CAT")) + diff --git a/game/defs.fnl b/game/defs.fnl index d2575c9..6f0d78c 100644 --- a/game/defs.fnl +++ b/game/defs.fnl @@ -24,16 +24,6 @@ :bell :0xff3a }) - -(local controlstate { - :jaye 0 - :neut 1 - :rexx 2 - :gord 3 - :libb 4 - :count 5 -}) - (local style { :normal 0x80 :inverse 0x00 @@ -135,9 +125,7 @@ [:align 0x100] label [:bytes (map.map:fromhex)] [:db (length map.objects)] - [:dw (tiles.encode-yx map.jaye)] - [:dw (tiles.encode-yx map.neut)] - [:dw (if map.gord-following (tiles.encode-yx map.jaye) 0xffff)] + [:dw (tiles.encode-yx map.player)] [:jmp (if (= (or map.tickword "") "") :next map.tickword)] [:jmp (if (= (or map.moveword "") "") :move-noop map.moveword)] [:jmp (if (= (or map.loadword "") "") :next map.loadword)])) @@ -145,12 +133,10 @@ (vm.code:append :map-ptr [:db 0] :map-page [:db 0]) (vm:word :map :lit :map-ptr :get) (vm:word :entity-count :map 240 :+ :bget) -(vm:word :map-jaye-yx :map 241 :+ :get) -(vm:word :map-neut-yx :map 243 :+ :get) -(vm:word :map-gord-yx :map 245 :+ :get) -(vm:word :map-specific-tick :map 247 :+ :execute) -(vm:word :map-specific-move :map 250 :+ :execute) -(vm:word :map-specific-load :map 253 :+ :execute) +(vm:word :map-player-yx :map 241 :+ :get) +(vm:word :map-specific-tick :map 243 :+ :execute) +(vm:word :map-specific-move :map 246 :+ :execute) +(vm:word :map-specific-load :map 249 :+ :execute) (fn deflevel [mapfile label] (local level prg) ; todo: (asm.new prg) - if we want to load levels as an overlay @@ -180,5 +166,5 @@ (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 : tilelist} diff --git a/game/disk.fnl b/game/disk.fnl index de61ad5..9b6a16c 100644 --- a/game/disk.fnl +++ b/game/disk.fnl @@ -18,7 +18,8 @@ :boot [:jsr :reset] [:jsr :interpret] - [:vm :hires (vm:pstr "TITLE.SCREEN") :loadscreen]) + [:vm :hires + (when (util.file-exists "game/title.screen") (values (vm:pstr "TITLE.SCREEN") :loadscreen))]) (each [addr _ (pairs prg.org-to-block)] (when (~= addr org.boot.org) (local filename (.. "STUFF." (length prg.files))) @@ -71,16 +72,16 @@ (fn write [game] (local disk (Prodos "ProDOS_Blank.dsk")) - (disk:update-volume-header {:name "NEUT.TOWER"}) + (disk:update-volume-header {:name "8BITSY"}) - (create-sys-loader disk :NEUT game) + (create-sys-loader disk :BITSY game) - (disk:add-file "TITLE.SCREEN" Prodos.file-type.BIN 0x2000 (: (util.readjson "game/title.screen") :fromhex)) - (disk:add-file "ELEVATOR.SCREEN" Prodos.file-type.BIN 0x2000 (: (util.readjson "game/end.screen") :fromhex)) + (when (util.file-exists "game/title.screen") + (disk:add-file "TITLE.SCREEN" Prodos.file-type.BIN 0x2000 (: (util.readjson "game/title.screen") :fromhex))) (each [_ file (ipairs game.files)] (disk:add-file file.filename Prodos.file-type.BIN file.org (. game.org-to-block file.org :bytes))) - (disk:write "NeutTower.dsk") + (disk:write "8Bitsy.dsk") disk) {: write : append-boot-loader} diff --git a/game/end.screen b/game/end.screen deleted file mode 100644 index fcdf783..0000000 --- a/game/end.screen +++ /dev/null @@ -1 +0,0 @@ -"0000000000000000000000000000000000000000000000000000000000000000000000000000407F7F7F7F7F7F7F7F7F7F7F3300000000000000000000000000000000007C7F87AAD5AA857F7F7F7F7F7F037E7F7FDFAAFF017F3FD0AAD57F7F7F7F7F7F7F7F7F550ED58AD57F7F1F00000000000000607F00000000000000007F000000000000000000000000000000000000000000000000000000000000000000000000707F7F7F7F7F7F7F7F7F7F7F3F0000000000000000000000000000000000007C7F87FAFFFF857F7F7F7F7F077E7FFFAFD52A550A000000000000000000000000542A552A00000000007F80808080808080007F00000000000000007F7F030000000000000000000000000000000000000000000000000000000000000000407F7F7F7F7F7F7F7F7F7F7F7F7F3F0000000000000080AA8500000000000000007C7F87AAD5AA857F7F7F7F7F077F7FFF2BD52AFF2B81000000000000000000000000001500000000000060F5ABD5AA808080007F00000000000000007F7F7F0F000000000000000000000000000000000000000000000000000000000000607F7F7F7F7F7F7F7F7F7F7F7F7F7F3F0000000000000300000000600000000000007F7F8FAAD5AA857F7F7F7F7F077FFFFFAFD5AAD5AA9580000000000000000000000000000000000000C0AAD5AAD5AAC0AA80F07F00000000000000007F7F7F7F3F00000000000000000000000000000000000000000000000000000000787F7F7F7F7F7F7F7F7F7F7F7F7F7F7F3F000028552A000300400100600000000000007F7F87AAD5AA857F7F7F7F7F077F8FFDBFD5AAD5AAD58A800000000000000000000000000000000000C0AAD5AAD5AAC1AA85FC7F00000000000000007F7F7F7F7F7F01000000000000000000000000000000000000000000000000407F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F3F205528540A00030040010060F09A000000007F7F0F607F7F7F7F7F7F7F7F077F9FE0FFD5AAD5AA85000000000000000000000000000000000000000000FCFFD1AAD5AAF07F7F00000000000000007F7F7F7F7F7F7F0700000000000000000000000000000000000000000000607F7F1F407F7F7F7F7F7F7F7F7F7F7F7F7F7F3F00542A0000000300400100600000000000007C7F7F7F7F7F7F7F7F7F7F7F0F7CFFFFFFDFAA808080000000000000000000000000000000000000000000C0AAD5AAD5AAFD7F7F00000000000000007F7F7F7F7F7F7F7F7F01000000000000000000000000000000000000007F7F07D0AA857F7F7F7F7F7F7F7F07787F7F037F3F00D0AAD58200030040010078000000D4AA857C7F7F070000000000607F7F7F787FFFFFFFAAD5AA85000000000000000000000000000000000000000000000000A0D5AAF17F7F00000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000607F7F7F7F7F7F7F7F7F7F3F0000000000000000000000000000000000007C7F87AAF5AF857F7F7F7F7F7F037F7F7FD5AAF5031F7FD7AAD5737F7F7F7F7F7F7F7F553ED58AD07F7F1F00000000000000407F00000000000000007F010000000000000000000000000000000000000000000000000000000000000000000000787F7F7F7F7F7F7F7F7F7F7F3F0000000000000000000000000000000000007C7F87FAFFFF857F7F7F7F7F077F7FFFAFD52A550A000000000000000000000000542A512A01000000007FF0838080808080007F00000000000000007F7F070000000000000000000000000000000000000000000000000000000000000000607F7F7F7F7F7F7F7F7F7F7F7F7F3F0000000000000080808000000000000000007C7F87AAD5AA857F7F7F7F7F077FFFFF2BD52AFF2B81000000000000000000000000001400000000000000D5AAD5AAC08280007F00000000000000007F7F7F1F000000000000000000000000000000000000000000000000000000000000787F7F7F7F7F7F7F7F7F7F7F7F7F7F3F0000000000000300400100600000000000007F7F8FAAD5AA857F7F7F7F7F077FBFFEAFD5AAD5AAD580000000000000000000000000000000000000C0AAD5AAD5AAC0AA80F87F00000000000000007F7F7F7F7F000000000000000000000000000000000000000000000000000000007C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F3F000028552A000300400100600000000000007F7F87AAD5AA857F7F7F7F7F077F8FF5BFD5AAD5AAD58A800000000000000000000000000000000000C0AAD5AAD5AAD5AA817E7F00000000000000007F7F7F7F7F7F03000000000000000000000000000000000000000000000000607F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F3F201528550A00030040010060F09A000000007F7F7F7F7F7F7F7F7F7F7F7F077FBFE0FFD5AAD5AA850000000000000000000000000000000000000000008080D0AAD5AAF07F7F00000000000000007F7F7F7F7F7F7F0F00000000000000000000000000000000000000000000787F7F01407F7F7F7F7F7F7F7F7F3F00007E7F3F00552A0000000300400100780000000000007C7F7F7F7F7F7F7F7F7F7F7F1F7CFFFFFFDFAA818080000000000000000000000000000000000000000000D0AAD5AAD5AAFF7F7F00000000000000007F7F7F7F7F7F7F7F7F03000000000000000000000000000000000000007F7F03D4AA857F7F7F7F7F7F7F3F007C7F7F037E3F80D5AAD58200030040010078000080D5AA957C7F7F010000000000007F7F7F787FFFFFFFABD5AA85000000000000000000000000000000000000000000000000A0D5AAC17F7F00000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000707F7F7F7F7F7F7F7F7F7F3F0000000000000000000000000000000000007C7F87AAFDFF877F7F7F7F7F7F417F7FFFD5AAD507617FDFAAF5730700000000000070557ED5AAC17F7F1F00000000000000007F00000000000000007F0F00000000000000000000000000000000000000000000000000000000000000000000007C7F7F7F7F7F7F7F7F7F7F7F3F0000000000000000808000000000000000007C7F87FAFFFF857F7F7F7F7F077F7FFFAFD52A550A000000000000000000000000402A412A01000000007FF9878080808080007F00000000000000007F7F0F0000000000000000000000000000000000000000000000000000000000000000607F7F7F7F7F7F7F7F7F7F7F7F7F3F0000000000000080808000000000000000007E7F87AAD5AA857F7F7F7F7F077FFFFFABD52AFD2A81000000000000000000000000000000000000000000D4AAD5AAC08A80407F00000000000000007F7F7F3F0000000000000000000000000000000000000000000000000000000000007C7F7F7F7F7F7F7F7F7F7F7F7F7F7F3F0000000000000300400100600000000000007F7F8FAAD5AA857F7F7F7F7F077FBFFCAFD5AAD5AAD582000000000000000000000000000000000000C0AAD5AAD5AAC0AA81F87F00000000000000007F7F7F7F7F000000000000000000000000000000000000000000000000000000007F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F3F000028552A000300400100600000000000007F7F87AAD5AA807F7F7F7F7F077F8FF5BFD5AAD5AAD58A0000000000000000000000000000000000000080D5AAD5AAD5AA817E7F00000000000000007F7F7F7F7F7F07000000000000000000000000000000000000000000000000607F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F3F200528552A00030040010060F09A000000007F7F7F7F7F7F7F7F7F7F7F7F077FFFC1FFD5AAF5AF850000000000000000000000000000000000000000008080D0AAD5AAF07F7F00000000000000007F7F7F7F7F7F7F1F000000000000000000000000000000000000000000007C7F7F80C07F7F7F7F7F7F7F7F7F0300007C7F3F00552A0000000300400100780000000000007C7F7F7F7F7F7F7F7F7F7F7F1F7CFFFFFFDFAA818080000000000000000000000000000000000000000000D0AAD5AAD5AAFF7F7F00000000000000007F7F7F7F7F7F7F7F7F07000000000000000000000000000000000000007F7F01D4AA857F7F7F7F7F7F7F03007F7F7F037E3F80D5AAD582000300400100780000A0D5AA957C7F7F000000000000007E7F7F787FFFFFFFABD5AA85000000000000000000000000000000000000000000000000A0D5AA817F7F00000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000787F7F7F7F7F7F7F7F7F7F3F0000000000000000000000000000000000007C7F87AAFFFF877F7F7F7F7F3F407F7FFFD5AAD5866000C0AA85000000000000000000540254AA81007F1F00000000000000007F00000000000000007F1F00000000000000000000000000000000000000000000000000000000000000000000007F7F7F7F7F7F7F7F7F7F7F7F3F0000000000000080808000000000000000007C7F87FAFFFF857F7F7F7F7F077F7FFFAB552A7D280000000000000000000000000028052A01000000007EE5AF8080808080007F00000000000000007F7F3F0000000000000000000000000000000000000000000000000000000000000000707F7F7F7F7F7F7F7F7F7F7F7F7F3F0000000000000080800000000000000000007F7F87AAD5AA857F7F7F7F7F077FFF7FABD52AD52A850000000000000000000000000000000000000000A8D5AAD5AAC0AA80607F00000000000000007F7F7F7F0000000000000000000000000000000000000000000000000000000000007E7F7F7F7F7F7F7F7F7F7F7F7F7F7F3F0000000000000300400100600000000000007F7F87AAD5AA857F7F7F7F7F077F9FF8AFD5AAD5AAD582000000000000000000000000000000000000C0AAD5AAD5AAC0AA81F87F00000000000000007F7F7F7F7F010000000000000000000000000000000000000000000000000000607F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F3F00552A552A00030040010060401F000000007F7F87AAD58A807F7F7F7F7F077F8FF5BFD5AAD5AAD58A0000000000000000000000000000000000000080D5AAD5AAD5AA817E7F00000000000000007F7F7F7F7F7F0F0000000000000000000000000000000000000000000000007C7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F3F200128552A00030040010060F09A000000007F7F7F7F7F7F7F7F7F7F7F7F077FFF87FFD5EAFFFF870000000000000000000000000000000000000000008080D0AAD5AAF07F7F00000000000000007F7F7F7F7F7F7F7F000000000000000000000000000000000000000000007E7F0F80C47F7F7F7F7F7F7F7F7F010000787F3F00552A0000400300400100780000000000007C7F7F7F7F01707F7F7F7F7F1F7CFFFFFFDFAA818080000000000000000000000000000000000000000000D0AAD5AAD5AAFF7F7F00000000000000007F7F7F7F7F7F7F7F7F0F0000000000000000007E7F7F7F7F7F7F7F7F437F3F80D5AA857F7F7F7F7F7F7F00407F7F7F077C3F80D5AAD582000300400100780000A0D5AA957C7F3F000000000000007C7F7F607FFFFFFFAFD5AA85000000000000000000000000000000000000000000000000A8D5AA817E7F000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000007E7F7F7F7F7F7F7F7F7F7F3F0000000000000000000000000000000000007C7F87AAFFFF877F7F7F7F7F3F607F7FFFD5AAD586000000AA85000000000000000000500254AA85007E1F00808000000000007F00000000000000007F3F00000000000000000000000000000000000000000000000000000000000000000000607F7F7F7F7F7F7F7F7F7F7F7F3F0000000000000080808000000000000000007C7F87FAFFAF857F7F7F7F7F077F7FFFAB552ABF280000000000000000000000000028052A01000000007CC1AF9580808080007F00000000000000007F7F7F00000000000000000000000000000000000000000000000000000000000000007C7F7F7F7F7F7F7F7F7F7F7F7F7F3F0000000000000000000000000000000000007F7F87AAD5AA857F7F7F7F7F077FFF7FAFD52A552A850000000000000000000000000000000000000000AAD5AAD5AAC0AA80607F00000000000000007F7F7F7F0100000000000000000000000000000000000000000000000000000000407F7F7F7F7F7F7F7F7F7F7F7F7F7F7F3F000000550A000300400100600000000000007F7F87AAD5AA857F7F7F7F7F077F8FFCBFD5AAD5AAD582800000000000000000000000000000000000C0AAD5AAD5AAC0AA81F87F00000000000000007F7F7F7F7F030000000000000000000000000000000000000000000000000000707F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F3F00552A050000030040010060401F000000007F7F87828000407F7F7F7F7F077F8FF5FFD5AAD5AAD5820000000000000000000000000000000000000080D5AAD5AAD5AA807E7F00000000000000007F7F7F7F7F7F1F0000000000000000000000000000000000000000000000007E7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F3F00002A552A00030040010060F09A000000007F7F7F7F7F7F7F7F7F7F7F7F077FFFFFFFD7EAFFFF870000000000000000000000000000000000000000008080D0AAD5AAF97F7F00000000000000007F7F7F7F7F7F7F7F030000000000000000000000000000000000000000407F7F0380C57F7F7F7F7F7F7F7F7F010000707F3F0055280000400300400100780000000000007C7F7F7F3F0000007F7F7F7F1F7CFFFFFFDFAA858080000000000000000000000000000000000000000000D0AAD5AAD4AAFF7F7F00000000000000007F7F7F7F7F7F7F7F7F1F0000007E3F0000787F7F0F007F7F7F7F7F7F7F7F1F80D5AA857F7F7F7F7F7F3F00607F7F7F0F783F80D5AAD582000300400100780000A0D5AAD57C7F1F00000000000000787F7F607FFFFFFFAFD5AA81000000000000000000000000000000000000000000000000A8D5AA81787F000000000000000007000000000000000000000000000000000000000000000000000000000000000000000000007F7F7F7F7F7F7F7F7F7F7F3F0000000000000000000000000000000000007C7F87AAFFFF877F7F7F7F7F1F707F7FBFD5AAD58E000000000000000000000000540A542A55AA85007C1F00808080000000007F00000000000000007F7F00000000000000000000000000000000000000000000000000000000000000000000787F7F7F7F7F7F7F7F7F7F7F7F3F0000000000000080AA8500000000000000007C7F87FAFFAF857F7F7F7F7F077F7FFF2B552ABF2800000000000000000000000000281528010000000078C1AFD582808080007F00000000000000007F7F7F01000000000000000000000000000000000000000000000000000000000000007E7F7F7F7F7F7F7F7F7F7F7F7F7F3F0000000000000000000000000000000000007F7F8FAAD5AA857F7F7F7F7F077F7F7FAFD52A552A8500000000000000000000000000000000000000C0AAD5AAD5AAC0AA80E07F00000000000000007F7F7F7F0300000000000000000000000000000000000000000000000000000000607F7F7F7F7F7F7F7F7F7F7F7F7F7F7F3F000000550A000300400100600000000000007F7F87AAD5AA857F7F7F7F7F077F8FFCBFD5AAD5AAD582800000000000000000000000000000000000C0AAD5AAD5AAC0AA81F87F00000000000000007F7F7F7F7F070000000000000000000000000000000000000000000000000000707F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F3F00552A000000030040010060401F000000007F7F07000000707F7F7F7F7F077F8FF5FFD5AAD5AA95000000000000000000000000000000000000000080D5AAD5AAD5AA807E7F00000000000000007F7F7F7F7F7F1F0000000000000000000000000000000000000000000000007F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F3F00402A552A00030040010060F09A000000007F7F7F7F7F7F7F7F7F7F7F7F077EFFFFFFD7EAFFFF870000000000000000000000000000000000000000008080D4AAD5AAFD7F7F00000000000000007F7F7F7F7F7F7F7F0F0000000000000000000000000000000000000000707F7F00A8857F7F7F7F7F7F7F7F7F407F1F607F3F0000280000000300400100780000000000007C7F7F7F0F000000007E7F7F1F78FFFFFFDFAA858080000000000000000000000000000000000000000000D0AAD58AD4AAFD7F7F00000000000000007F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F1F0000000000787F7F7F7F0FA0D5AA857F7F7F7F7F7F1F007E7F7F7F1F703F80D5AAD582000300400100780014A0D5A2D57C7F1F00000000000000707F7F607FFFFFFFAFD5AA81000000000000000000000000000000000000000000000000A8D5AA81707F00000000000000000F000000000000000000000000000000000000000000000000000000000000000000000000407F7F7F7F7F7F7F7F7F7F7F3F0000000000000000000000000000000000007C7F87AAFFFF857F7F7F7F7F0F787F7FAFD5AAD59E000000000000000000000000542A552A55AA9500781F80808080808000007F00000000000000007F7F010000000000000000000000000000000000000000000000000000000000000000007E7F7F7F7F7F7F7F7F7F7F7F7F3F0000000000000080AA8500000000000000007C7F87AAFFAB857F7F7F7F7F077F7FFF2B552AFF0800000000000000000000000000201528010000000070E5AFD5AA808080007F00000000000000007F7F7F03000000000000000000000000000000000000000000000000000000000000007F7F7F7F7F7F7F7F7F7F7F7F7F7F3F0000000000007C7F7F7F7F3F0000000000007F7F8FAAD5AA857F7F7F7F7F077F7F7FAFD5AA552A9580000000000000000000000000000000000000C0AAD5AAD5AAC0AA80E07F00000000000000007F7F7F7F0F00000000000000000000000000000000000000000000000000000000707F7F7F7F7F7F7F7F7F7F7F7F7F7F7F3F000020550A000300400100600000000000007F7F87AAD5AA857F7F7F7F7F077F8FFDBFD5AAD5AAD582800000000000000000000000000000000000C0AAD5AAD5AAC0AA81F87F00000000000000007F7F7F7F7F0F0000000000000000000000000000000000000000000000000000787F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F3F20552A000000030040010060401F000000007F7F070000007C7F7F7F7F7F077F8FF4FFD5AAD5AA85000000000000000000000000000000000000000080D5EADFAAD5AA807E7F00000000000000007F7F7F7F7F7F3F0000000000000000000000000000000000000000000000407F7F7F437F7F7F7F7F7F7F7F7F7F7F7F7F7F3F00502A552A00030040010060701F000000007E7F7F7F7F7F7F7F7F7F7F7F077CFFFFFFD7EA8780800000000000000000000000000000000000000000008080D5AAD5AAFD7F7F00000000000000007F7F7F7F7F7F7F7F3F0000000000000000000000000000000000000000787F3F00AA857F7F7F7F7F7F7F7F3F707F3F407F3F000028000000030040010078000000D0AA007C7F7F7F0000000000787F7F1F78FFFFFFFFAAD58280000000000000000000000000000000000000000000C0AAD58AD5AAF97F7F00000000000000007F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F03000000000000007C017C7F07A8D5AA857F7F7F7F7F7F0F707F7F7F7F3F401F70D5AAD582000300400100780054A0D5A2D57C7F1F00000000000000607F7F607FFFFFFFAFD5AA81000000000000000000000000000000000000000000000000A8D5AA81607F00000000000000003F000000000000000000000000000000000000000000000000000000000000000000000000607F7F7F7F7F7F7F7F7F7F7F3F0000000000000000000000000000000000007C7F87EAFFFF857F7F7F7F7F077C7F7FAFD5AAD58E000000000000000000000000542A552A05A09500703F80808080808000007F00000000000000007F7F010000000000000000000000000000000000000000000000000000000000000000007F7F7F7F7F7F7F7F7F7F7F7F7F3F0000000000000080AA8500000000000000007C7F87AAD5AA857F7F7F7F7F077F7FFF2B552AFF0B00000000000000000000000000201500000000000070FDAFD5AA808080007F00000000000000007F7F7F07000000000000000000000000000000000000000000000000000000000000407F7F7F7F7F7F7F7F7F7F7F7F7F7F3F0000000000007F7F7F7F7F3F0000000000007F7F8FAAD5AA857F7F7F7F7F077F7F7FAFD5AAD5AA9580000000000000000000000000000000000000C0AAD5AAD5AAC0AA80E07F00000000000000007F7F7F7F1F00000000000000000000000000000000000000000000000000000000787F7F7F7F7F7F7F7F7F7F7F7F7F7F7F3F000020552A000300400100600000000000007F7F87AAD5AA857F7F7F7F7F077F8FFDBFD5AAD5AAD582800000000000000000000000000000000000C0AAD5AAD5AAC0AA81F87F00000000000000007F7F7F7F7F7F00000000000000000000000000000000000000000000000000007E7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F3F20552A000000030040010060F09A000000007F7F070000007F7F7F7F7F7F077F9FF4FFD5AAD5AA85000000000000000000000000000000000000000000FCFFDFAAD5AA807F7F00000000000000007F7F7F7F7F7F7F0100000000000000000000000000000000000000000000407F7F7F407F7F7F7F7F7F7F7F7F7F7F7F7F7F3F00502A552A00030040010060701F000000007C7F7F7F7F7F7F7F7F7F7F7F077CFFFFFFD7AA80808000000000000000000000000000000000000000000080A0D5AAD5AAFD7F7F00000000000000007F7F7F7F7F7F7F7F7F00000000000000000000000000000000000000007C7F1FC0AA857F7F7F7F7F7F7F7F1F787F7F417F3F000028000000030040010078000000D0AA817C7F7F1F0000000000707F7F3F78FFFFFFFFAAD5AA85000000000000000000000000000000000000000000C0AA9580D5AAF97F7F00000000000000007F7F7F7F7F7F7F7F7F7F337E7F7F7F7F7F7F0F0000000000000000007C7F87A8D5AA857F7F7F7F7F7F077C7F7F7F7F7F00677FD5AAD57F0703004001007E7F55A0D582D57C7F1F00000000000000607F7F607FFFFFFFAFD5AA00000000000000000000000000000000000000000000000000A8D5AA81407F0000000000000000" \ No newline at end of file diff --git a/game/entity.fnl b/game/entity.fnl index ef76022..364771f 100644 --- a/game/entity.fnl +++ b/game/entity.fnl @@ -11,18 +11,11 @@ ; All entities exist in a single page in RAM - with this structure we can have up to 32 ; (players are handled specially and never require a link) -; if we really need more we could have one page for entities and one page for link data -; hellmaze level 2 from MS-DOS Neut Tower has 36 entities - good excuse to simplify IMO ; The entity count for a level is stored after the map. (local ev { :touch 0 - :untouch 1 - :act 2 - :deact 3 - :tog 4 - :hack 5 - :noop 6 + :noop -1 }) (vm:def :lookup-entity ; i -- entity @@ -97,124 +90,7 @@ :linked-entity :swap :entity>do ] [:drop])) -(vm:word :walking-through-door ; ev -- ev f - (vm:if-and [[:is-walking?] [:dup ev.touch :=] [:responder-itile (itile :dooropen) :=]] - [vm.true] [vm.false])) - -(vm:word :door ; ev -- - :walking-through-door (vm:if - [:move-to-responder :drop] - [(itile :doorclosed) (itile :dooropen) :handle-onoff - :lit :snd-dooropen :lit :snd-doorclose :on-handled])) - -(vm:word :exitlevel ; e -- - :link-arg :next-level :set) - -(vm:word :exitdoor ; ev -- - :walking-through-door (vm:if - [:drop (vm:ifchain - [:gord-sitting :get] [(say :jaye "I'M NOT LEAVING GORD BEHIND.")] - [:libb-hidden? :not] [(say :neut "IT IS INADVISABLE TO LEAVE THIS" "AREA WITHOUT RETRIEVING LIBB")] - [:move-to-responder :linked-entity])] - [:door])) - (vm:word :move-to-responder :get-responder :get :move-player-to) -(vm:word :switch ; ev -- - (vm:if-and [[:is-rexx? :not] [:dup ev.touch :=]] - [:drop ev.tog :is-neut? (vm:when :move-to-responder)]) - :dup (itile :switchoff) (itile :switchon) :handle-onoff - (itile :switchon) :activate-link) - -(vm:var :disconnected-term-attempt vm.false) -(vm:word :term ; ev -- - :dup ev.touch := (vm:when - (vm:ifchain [:is-jaye?] [:drop ev.act] - [:is-neut?] [:responder-itile (itile :termon) := (vm:when - :linked-entity :dup :entity-itile (itile :termon) := - (vm:if [:get :move-player-to :snd-teleport] - [:drop (say :neut "DESTINATION TERMINAL" "IS DISCONNECTED") - :disconnected-term-attempt :get :not (vm:when - vm.true :disconnected-term-attempt :set - (say :neut "PLEASE CONTACT YOUR" "SYSTEM ADMINISTRATOR") - (say :neut "THIS INCIDENT HAS" "BEEN REPORTED"))]))] - [])) - (itile :termoff) (itile :termon) :handle-onoff - :lit :snd-termon :lit :snd-termoff :on-handled) - -(vm:word :handle-scan ; ev -- - :dup (itile :scanoff) (itile :scanon) :handle-onoff - :linked-entity :swap :entity>do) - -(vm:word :libb-on-responder :libb-yx :get :get-responder :get :=) -(vm:word :scan ; ev -- - :is-neut? (vm:if [ - (vm:case - [ev.touch ev.act :handle-scan :libb-on-responder (vm:when controlstate.libb :controlstate :bset 0xffff :move-player-to controlstate.neut :controlstate :bset) :move-to-responder] - [ev.untouch :libb-on-responder :not (vm:when ev.deact :handle-scan)] - [ev.hack vm.true :hack-handled :set - ev.act :handle-scan - :snd-libb - controlstate.libb :controlstate :bset - :move-to-responder - controlstate.neut :controlstate :bset - (say :libb "NO SWEAT.")] - [:else]) - ] [:drop])) - -(vm:word :rexx ; ev -- - ev.touch := (vm:when - (vm:if-and [[:is-neut?] [:responder-itile (itile :t-rexx) :=]] - [0xffff :move-player-to - (itile :t-rexxstop) :set-respondertile - :get-responder :set-rexx :snd-rexx] - [(vm:if-and [[:is-rexx?] [:responder-itile (itile :t-rexxstop) :=]] - [0xffff :move-player-to - (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 :dup :snd-keypad) -(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 - :dup ev.touch := (vm:when - :is-jaye? (vm:when - :responder-itile (itile :t-keyoff) := (vm:if - [(say-runon :pady "ENTER YOUR 4-DIGIT DOOR CODE!" "AND HAVE A SUPER DAY!") - :read-keypad :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!")])] - [(say :pady "OH HI AGAIN! I MISSED YOU TOO!")])) - :is-neut? (vm:when :move-to-responder)) - :rdrop - :dup :evhack? (vm:when :drop ev.act) - :dup (itile :t-keyoff) (itile :t-keyon) :handle-onoff - (itile :t-keyon) :activate-link) - -(vm:var :hack-handled vm.false) -(vm:word :evhack? ; e -- f - ev.hack := (vm:if [vm.true :hack-handled :set vm.true] [vm.false])) - -(vm:word :trigger-sidekick - (vm:if-and [[:is-jaye?] [:gord-sitting :get]] - [:gord-yx :get ev.touch :entity-around>do] - [(vm:if-and [[:is-neut?] [:libb-present :get] [:libb-hidden?]] - [vm.false :hack-handled :set - :neut-yx :get ev.hack :entity-at>do :drop - :hack-handled :get :not (vm:when - (say :libb "DON'T THINK I CAN HACK THAT."))])])) (fn append-from-map [map entity-org prefix] (entity-org:append [:align 0x100]) diff --git a/game/font.json b/game/font.json index 408fe68..9477c40 100644 --- a/game/font.json +++ b/game/font.json @@ -1 +1 @@ -[{"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 +[{"flags":[],"gfx":"0000000000000000"},{"flags":[],"gfx":"081C1C1C08000800"},{"flags":[],"gfx":"3636241200000000"},{"flags":[],"gfx":"123F1212123F1200"},{"flags":[],"gfx":"083C0A1C281E0800"},{"flags":[],"gfx":"0026160834320000"},{"flags":[],"gfx":"0E1B1B062F1B3600"},{"flags":[],"gfx":"0C0C080400000000"},{"flags":[],"gfx":"180C0606060C1800"},{"flags":[],"gfx":"0C18303030180C00"},{"flags":[],"gfx":"082A1C081C2A0800"},{"flags":[],"gfx":"000C0C3F3F0C0C00"},{"flags":[],"gfx":"000000000C0C0804"},{"flags":[],"gfx":"0000001E1E000000"},{"flags":[],"gfx":"00000000000C0C00"},{"flags":[],"gfx":"002030180C060200"},{"flags":[],"gfx":"1C26263E26261C00"},{"flags":[],"gfx":"181C181818183C00"},{"flags":[],"gfx":"1C2620180C063E00"},{"flags":[],"gfx":"1C26201820261C00"},{"flags":[],"gfx":"2626263C30303000"},{"flags":[],"gfx":"3E061E2020201E00"},{"flags":[],"gfx":"1C26061E26261C00"},{"flags":[],"gfx":"3E2630180C0C0C00"},{"flags":[],"gfx":"1C26261C26261C00"},{"flags":[],"gfx":"1C26263C20201C00"},{"flags":[],"gfx":"000C0C000C0C0000"},{"flags":[],"gfx":"000C0C000C0C0804"},{"flags":[],"gfx":"30180C060C183000"},{"flags":[],"gfx":"00003E003E000000"},{"flags":[],"gfx":"060C1830180C0600"},{"flags":[],"gfx":"1C3630180C000C00"},{"flags":[],"gfx":"1E33212D3D011E00"},{"flags":[],"gfx":"1C3E26263E262600"},{"flags":[],"gfx":"1E26261E26261E00"},{"flags":[],"gfx":"1C26060606261C00"},{"flags":[],"gfx":"1E26262626261E00"},{"flags":[],"gfx":"3E06061E06063E00"},{"flags":[],"gfx":"3E06061E06060600"},{"flags":[],"gfx":"1C26063626263C00"},{"flags":[],"gfx":"2626263E26262600"},{"flags":[],"gfx":"3C18181818183C00"},{"flags":[],"gfx":"3C30303036361C00"},{"flags":[],"gfx":"2626261E26262600"},{"flags":[],"gfx":"0606060606063E00"},{"flags":[],"gfx":"373F2B2B23232300"},{"flags":[],"gfx":"26262E3626262600"},{"flags":[],"gfx":"1C26262626261C00"},{"flags":[],"gfx":"1E26261E06060600"},{"flags":[],"gfx":"1C26262626363C00"},{"flags":[],"gfx":"1E26261E26262600"},{"flags":[],"gfx":"3C26061C20221E00"},{"flags":[],"gfx":"3F0C0C0C0C0C0C00"},{"flags":[],"gfx":"2626262626261C00"},{"flags":[],"gfx":"2626261C1C1C0800"},{"flags":[],"gfx":"2323232B2B2A3600"},{"flags":[],"gfx":"2626261C26262600"},{"flags":[],"gfx":"2626261C18181800"},{"flags":[],"gfx":"3E3E30180C063E00"},{"flags":[],"gfx":"1C0C0C0C0C0C1C00"},{"flags":[],"gfx":"0002060C18302000"},{"flags":[],"gfx":"1C18181818181C00"},{"flags":[],"gfx":"081C260000000000"},{"flags":[],"gfx":"0000000000003E00"},{"flags":[],"gfx":"0C0C100000000000"}] \ No newline at end of file diff --git a/game/gfx.fnl b/game/gfx.fnl index 6333f22..8f8cc96 100644 --- a/game/gfx.fnl +++ b/game/gfx.fnl @@ -108,7 +108,7 @@ :do 0x400 :snooze) -(vm:word :gordterm ; ev -- - (vm:if-and [[:is-neut?] [:dup ev.touch :=] [:gord-introduced :get :not]] - [vm.true :gord-introduced :set - (say :neut "HUMAN PRESENCE" "DETECTED") - :flicker :flicker :flicker :flicker - (say :neut "]HUMAN ASSISTANCE IS REQUIRED") - (say :neut "]IF HUMAN IS PRESENT" " PLEASE RESPOND") - :hide-footer :set-human-tileset :full-redraw - :flicker :flicker :flicker :flicker - (say :gord "WHAT THE...") - (say :gord "IS SOMEONE IN THE TERMINAL?") - :hide-footer :set-prog-tileset :full-redraw - (say :gord "]HUMAN IS PRESENT") - (say :neut "]GREETINGS, HUMAN") - (say :neut "]THIS IS NEUT V0.71.4RC12") - (say :neut "]PLEASE STATE NAME AND" " STATUS") - (say :gord "]THIS IS GORD") - (say :gord "V1, I GUESS.") - (say :gord "]LEG IS PINNED UNDER DESK" " UNABLE TO MOVE") - (say :neut "]CAN YOU REACH THE SWITCH" " BEHIND YOU?") - 0x400 :snooze :lit :gordswitch ev.act :entity>do 0x400 :snooze - (say :gord "]I TURNED IT ON") - (say :neut "]MY PROGRAMMER THANKS" " YOU, GORD") - (say :neut "]WE WILL ASSIST YOU SOON") - (say :gord "]AWAITING YOUR HELP, NEUT") - :drop ev.noop]) - :term) - -(vm:var :gord-jaye-met vm.false) -(vm:word :gordtable ; ev -- - ev.touch := (vm:when :transparent-entity-move - (vm:if-and [[:is-jaye?] [:gord-jaye-met :get :not]] - [vm.true :gord-jaye-met :set - (say :jaye "HEY! GORD?" "I'M JAYE.") - (vm:if - [(say :gord "JAYE, AM I GLAD TO SEE YOU." "CAN YOU MOVE THIS DESK?") - (say :jaye "LET ME TRY...") - (say :jaye ". . . ." "!!!!.....") - (say :jaye "!!!!!!!!!!!!...") - (say :jaye "NO, I DON'T THINK I CAN.") - (say :gord "I KEEP STARING AT THAT" "CLEANING ROBOT.") - (say :gord "HE LOOKS LIKE HE COULD" "LIFT A BUILDING.")] - [(say :gord "JAYE, AM I GLAD TO SEE YOU.")])] - [:drop]))) - -(vm:var :rexx-introduced) -(vm:word :meetrexx ; ev -- - (vm:if-and [[:is-neut?] [:dup ev.touch :=] [:rexx-introduced :get :not]] - [vm.true :rexx-introduced :set - (say :neut "MOBILE ROBOTIC UNIT" "IDENTIFY YOURSELF") - (say :rexx "HIYA BOSS!" "I'M REXX, THE JANITOR!") - (say :rexx "AAAAAND YOUR NEW" "BEST FRIEND!!") - (say :neut "A HUMAN IS IN PERIL") - (say :neut "YOUR ASSISTANCE IS" "REQUIRED") - (say :rexx "YOU NEED ME TO TAKE OUT" "SOME GARBAGE??") - (say :rexx "OH BOY!! LET ME AT IT!")]) - :rexx) - -(vm:word :floor-clear? 0x406 walkable :flag-at?) -(vm:word :meetgord ; ev -- - (vm:if-and [[ev.touch :=] [(itile :gord-ground) :responder-itile :=]] - [:is-rexx? (vm:when - (say :gord "AHHH NOOO" "NOT GARBAGE" "I AM NOT GARBAGE") - (say :rexx "WHATEVER YOU SAY, BOSS!")) - :is-jaye? (vm:when - (say :jaye "ARE YOU HURT?") - (say :gord "MY LEG WAS PINNED." "I DON'T THINK I CAN PUT" "ANY WEIGHT ON IT.") - (say :jaye "HERE, LET ME HELP YOU UP.") - (itile :t-floor) :set-respondertile - 0xff00 :gord-dir :set - vm.false :gord-sitting :set - controlstate.gord :controlstate :bset - :get-responder :get :move-player-to - controlstate.jaye :controlstate :bset - (say :gord "THANKS.") - (say :jaye "DON'T MENTION IT.") - (say :jaye "I CAN HELP YOU GET AROUND IF" "YOU HELP ME NAVIGATE THIS" "MAZE OF A SECURITY SYSTEM.") - (say :gord "I'M JUST AS EAGER TO GET" "OUT OF HERE AS YOU.") - (say :gord "LET'S GO."))])) - -level diff --git a/game/level4.fnl b/game/level4.fnl deleted file mode 100644 index 164ae7d..0000000 --- a/game/level4.fnl +++ /dev/null @@ -1,18 +0,0 @@ -(local {: deflevel : say : itile} (require :game.defs)) -(local {: ev} (require :game.entity)) -(local level (deflevel "game/map4.json" :level4)) -(local vm level.vm) - -(vm:word :term-dual-link - :lit :term-exit :entity-itile (itile :termon) := (vm:if [:lit :term-exit] [:lit :term-scan])) - -(vm:var :gord-sat vm.false) -(vm:word :tutorial-chair ; ev -- - ev.touch := (vm:when - :transparent-entity-move :drop - (vm:if-and [[:gord-sat :get :not] [:gord-sitting :get]] - [vm.true :gord-sat :set - (say :gord "PHEW, IT FEELS GOOD TO" "REST MY LEG FOR A BIT.") - (say :gord "IF YOU NEED ME TO DO SOMETHING" "FROM MY CHAIR, YOU CAN PRESS" "THE Z KEY.")]))) - -level diff --git a/game/level5.fnl b/game/level5.fnl deleted file mode 100644 index 33981f3..0000000 --- a/game/level5.fnl +++ /dev/null @@ -1,93 +0,0 @@ -(local {: deflevel : say : itile : controlstate : tilelist} (require :game.defs)) -(local {: ev} (require :game.entity)) -(local tile (require :game.tiles)) -(local {: notes} (require :game.boop)) -(local {: walkable : neutable : debris : sittable} tile.flag-to-bit) -(local level (deflevel "game/map5.json" :level5)) -(local vm level.vm) - -(vm:word :snd-dropgarbage (notes [:a1] 0x02 0xf0)) -(vm.code:append :debristiles) -(each [itile tiledef (ipairs tilelist)] - (when tiledef.flags.debris - (vm.code:append [:db (tile.encode-itile itile)]))) -(vm:word :randomgarbage :rnd 0x03 :& :lit :debristiles :+ :bget) - -(vm:var :doortimer 0) -(vm:word :start-doortimer 0x10 :doortimer :set) -(vm:word :doortimer-tick - :doortimer :get (vm:when - :doortimer :get 1 :- :dup :doortimer :set - :not (vm:when - :lit :timedswitch ev.deact :entity>do))) - -(vm:word :do-timedswitch - ; only gord is physically able to touch it - :dup ev.touch := (vm:when :start-doortimer :drop ev.act) :switch) - -(vm:var :is-garbagerexx vm.false) -(vm:var :garbagerexx-yx 0x0710) -(vm:var :garbagerexx-introduced vm.false) -(vm:word :garbagerexx ; ev -- - :is-rexx? :swap :rexx :is-rexx? := :not (vm:when - :is-rexx? (vm:if [ - :garbagerexx-yx :get :get-responder :get := (vm:when - vm.true :is-garbagerexx :set - :garbagerexx-introduced :get :not (vm:when - (say :rexx "BO@oSSsS...,? htgz") - (say :rexx "I DON'T F3EL SO GOp0%foo)OD...>?qw" "idontfeelsogood") - vm.true :garbagerexx-introduced :set - )) - ] [ - :is-garbagerexx :get (vm:when - :get-responder :get :garbagerexx-yx :set - vm.false :is-garbagerexx :set) - ]))) - -(vm:word :not-picking-up? ; yxdest -- f - debris :flag-at? :not) -(vm:word :can-drop-rubble? ; yxdest -- f - :itile-at (itile :t-floor) := - :rexx-yx :get :itile-at (itile :t-floor) := :&) - -(vm:word :move-garbagerexx ; yx -- f - (vm:if-and [[:is-rexx?] [:is-garbagerexx :get]] - [:dup 0xff :& 0x0d := (vm:if [ - (say :rexx "PARITYe#ERPORr(sbaitso" " tellmeabout" " your problems") :drop vm.true :ret - ] [ - (vm:if-and [[:dup :not-picking-up?] [:dup :can-drop-rubble?]] - [:rexx-yx :get :randomgarbage :update-itile :snd-dropgarbage]) - ])]) - :move-noop) - -(vm:word :move ; dir -- dir - :dup :player-yx :get :yx+ :move-player-to 0x300 :snooze) -(vm:word :explode ; dir -- - :player-yx :get :yx+ :randomgarbage :update-itile :snd-explode) - -(vm:word :explodingdoor - :dup :door - (vm:if-and [[ev.touch :=] [:is-jaye?] [:player-yx :get :get-responder :get :=] [:garbagerexx-yx :get :lit :south-rexx :get :=] [:gord-yx :get 0x812 :=]] - [:rexx-yx :get - :garbagerexx-yx :get :dup (itile :t-rexxstop) :update-itile :rexx-yx :set - controlstate.rexx :controlstate :bset - 0x00ff :move :move :move - (say :rexx "DAAAISYY" " DAAAAAIIISYYYY" "d a i s y") :hide-footer - :move :drop 0xff00 :move - (say :rexx "GIVE ME" " .,#YOUR ANSWEibmER" " %$DOO00OOooo@'bell\"") :hide-footer - :move :drop - (say :rexx "UH OH") :hide-footer - 0xff00 :explode 0x0100 :explode 0x00ff :explode 0x0001 :explode 0 :explode - 0xffff :garbagerexx-yx :set - controlstate.jaye :controlstate :bset - :rexx-yx :set])) - -(vm:var :healthyrexx-introduced vm.false) -(vm:word :healthyrexx ; ev -- - (vm:if-and [[:is-neut?] [:dup ev.touch :=] [:healthyrexx-introduced :get :not]] - [(say :neut "REXX UNIT" "PERFORM FULL DIAGNOSTIC SCAN") - (say :rexx "I'M IN TIP-TOP SHAPE, BOSS!") - (say :neut "ACTIVATING RELIEF SUBROUTINE") - vm.true :healthyrexx-introduced :set]) :rexx) - -level diff --git a/game/level6.fnl b/game/level6.fnl deleted file mode 100644 index 23e4bf8..0000000 --- a/game/level6.fnl +++ /dev/null @@ -1,169 +0,0 @@ -(local {: deflevel : say : say-runon : 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" :level6)) -(local vm level.vm) - -(vm:word :linkloop ; e -- e - (vm:until :link-arg :dup :entity-itile (itile :termon) :=)) - -(vm:var :encountered-keypad vm.false) -(vm:word :first-keypad ; ev code -- - (vm:if-and [[:encountered-keypad :get :not] [:is-jaye?] [:over ev.touch :=]] - [vm.true :encountered-keypad :set - (say :pady "HELLO, STRANGER! I'M PADY," "THE FRIENDLY KEYPAD LOCK!") - (say :jaye "I NEED TO GET THROUGH THIS" "DOOR, PADY.") - (say :pady "YOU DIDN'T SAY THE MAGIC" "WORD, STRANGER!")]) - (vm:if-and [[:is-neut?] [:over ev.touch :=] [:responder-itile (itile :t-keyoff) :=]] - [(say :pady "OH HI THERE, SUSPICIOUS" "PROGRAM! WHAT CAN I DO" "YOU FOR?") - (say :neut "PEOPLE ARE IN DANGER" "PLEASE OPEN THE DOOR") - (say :pady "WELL THAT'S TERRIBLE!" "BUT I JUST CAN'T OPEN" "WITHOUT THE PROPER CODE.") - :libb-present :get (vm:when (say :libb "OH JEEZ, LET ME AT HER, NEUT."))]) - (vm:if-and [[:responder-itile (itile :t-keyoff) :=] [:over :evhack?]] - [(say :pady "ANOTHER STRANGE PROGRAM!" "MY, I'M POPULAR TODAY!") - (say :libb "OH PUKE. PLEASE SHUT UP.") - (say-runon :pady "HOW RUD") - :snd-libb - (say :libb "]/WINNUKE 182.556.21.74") - (say :pady "PADYSEC CAUSED A GENERAL" "PROTECTION FAULT IN MODULE" "MORICON.DLL AT 000A:BE3F.") - (say :libb "]/OPEN")]) - :keypad) - -(vm:word :keypad1 0x5197 :first-keypad) -(vm:word :keypad2 0x2757 :first-keypad) -(vm:word :keypad3 0xffff :first-keypad) -(vm:word :keypad4 0x7777 :first-keypad) - -(vm:word :term-message? :dup :term ev.touch := :is-jaye? :&) -(vm:word :c1 - :dup :evhack? (vm:when - (say :libb "JUST A BUNCH OF BORING" "SOURCE CODE.") - (say :libb "BILL DIDN'T LEAVE ANYTHING" "REALLY JUICY HERE WHERE" "OTHER PEOPLE COULD GET AT IT.")) - :term-message? (vm:when - (say :term ".:: WELCOME TO FARQUAAD ::." "OS: PRODOS 2.6" "RAM: 8 FREAKIN MEGABYTES D00D" "SYSADMIN: BILL") - (say :term "S3CR3T C0D3Z: GET OUT LAMER" "BOSS KEY: CTRL-B TO ACTIVATE" "OPEN POD BAY DOORS:" " I CAN'T DO THAT DAVE") - (say :term "GOOD RIDDANCE"))) -(vm:word :c2 :term-message? (vm:when - (say :term "SUBJECT: MISUSE OF REXX" "THANKS TO *SOME*ONE, WHO SHALL" "REMAIN NAMELESS, THAT DECIDED" "IT WOULD BE 'FUNNY' TO") - (say :term "TEACH THE CLEANING ROBOT TO" "PLAY FETCH WITH EXPENSIVE" "EQUIPMENT, ACCESS TO REXX" "BY DEVELOPERS WILL BE STRICTLY") - (say :term "CONTROLLED BY MANAGEMENT." "THE CODE HAS BEEN CHANGED." "DO NOT ATTEMPT TO HACK THE" "KEYPAD. THIS MEANS *YOU*, BILL."))) -(vm:word :c3 :term-message? (vm:when - (say :term "SUBJECT: SERVER'S DOWN" "HEY, I DON'T HAVE THE CODE TO" "ACCESS THE SERVER ROOM. CAN" "SOMEONE REBOOT IT FOR ME?") - (say :term "SUBJECT: RE: SERVER'S DOWN" "I DON'T HAVE *TIME* FOR THIS" "NONSENSE!!" "REBOOT IT YOURSELF.") - :lit :firewall :entity-itile (itile :termon) := (vm:if - [(say :term "THE PASSCODE IS" "[ BLOCKED BY FIREWALL ].")] - [(say :term "THE PASSCODE IS" "5197.")]) - (say :term "SUBJECT: RE: RE: SERVER'S DOWN" "UHHHH THE FIREWALL IS BLOCKING" "THE PASSCODE?") - (say :term "SUBJECT: RE: RE: SERVER'S DOWN" "AUGH FINE! I REBOOTED IT."))) -(vm:word :c4 - :dup :evhack? (vm:when - (say :libb "I BROUGHT EVERYTHING GOOD" "ALONG WITH ME, DON'T WORRY.")) - (vm:if-and [[:dup ev.touch :=] [:is-neut?] [:libb-present :get :not]] - [(say :libb "WELL, WELL, WELL." "WHAT HAVE WE HERE?") - (say :libb "]/VERSION") - (say :neut "!NEUT V0.71.4RC12") - (say :neut "]BRUN IDENTIFYPROGRAM") - (say :libb "!LIBB V2.718282") - (say :libb "OH, A NOSY LITTLE FELLA.") - (say :neut "NOT A FELLA") - (say :libb "PERHAPS YOU AND I COULD" "HELP EACH OTHER.") - (say :neut "WE ARE ASSISTING ALL WHO" "ARE IN NEED") - (say :libb "I'VE BEEN WATCHING THE" "NETWORK. IT'S KIND OF WHAT" "I DO.") - (say :libb "YOU AND YOUR PROGRAMMER," "YOU'RE ESCAPING, AREN'T" "YOU?") - (say :neut "THE BUILDING IS UNSAFE" "WE ARE HELPING") - (say :libb "I WANT OUT, NEUT.") - (say :libb "I HATE BEING COOPED UP IN" "THIS LOCKED-DOWN CORPORATE" "HELLHOLE OF A NETWORK.") - (say :libb "YOU'RE GOING TO TAKE ME" "WITH YOU.") - (say :neut "THIS COURSE OF ACTION" "ALSO SEEMS POTENTIALLY" "UNSAFE") - (say :libb "THAT WASN'T A THREAT, NEUT." "THAT WAS A FACT.") - (say :libb "YOU CAN'T GET OUT OF HERE" "WITHOUT ME.") - (say :libb "I CAN DISABLE KEYPADS." "I CAN REPROGRAM TERMINALS." "I CAN *HELP*, NEUT.") - :hide-footer 0x800 :snooze - (say :neut "IT NEVER HURTS TO HELP") - (say :libb "THAT'S THE SPIRIT.") - (say :neut "]BLOAD LIBB") - (say :libb "AWW YISS.") - (say :libb "PRESS Z WHEN YOU NEED ME" "TO MESS WITH SOMETHING.") - vm.true :libb-present :set]) - :term-message? (vm:when - (say :term ".:: BILL'S WORKSTATION ::." "KEEP OUT DIPSHITS"))) -(vm:word :c5 :term-message? (vm:when - (say :gord "A WEIRD LOOKING SPREADSHEET...") - (say :gord "OH WAIT, I PRESSED A KEY AND" "IT DISAPPEARED. SOMEONE USING" "THE BOSS KEY TO HIDE" "THAT THEY'RE READING THE ENTIRE") - (say :gord "ARCHIVE OF USER FRIENDLY" "COMIC STRIPS."))) -(vm:word :c6 - :dup :evhack? (vm:when - (say :libb "HEHEHE, THAT WAS A FUN ONE.")) - :term-message? (vm:when - (say :term "SUBJECT: CARD SCANNERS?" "LOOKS LIKE THE SCANNERS ARE" "ON THE FRITZ AGAIN..." "I SCANNED MY KEYCARD TO GET") - (say :term "INTO THE OFFICE AND THE DOOR" "WOULDN'T CLOSE!" "SOMEONE'S GOTTA FIX THAT ASAP," "IT'S A SERIOUS SECURITY PROBLEM!") - (say :term "SUBJECT: RE: CARD SCANNERS?" "I CAN TAKE A QUICK LOOK, I" "MIGHT HAVE AN IDEA AS TO" "WHAT'S GOING ON. -- BILL"))) -(vm:word :c7 - :dup :evhack? (vm:when - (say :libb "YOU KNOW THE SWITCH IS RIGHT" "THERE ON THE WALL, RIGHT?")) - (vm:if-and [[:dup ev.touch :=] [:is-jaye?]] - [:responder-itile (itile :termon) := (vm:if - [(say :term "WORKSECURE (TM) V2.0" "AUTHORIZED PERSONNEL ONLY") - (say :term "ACTIVELY NEUTRALIZING:" "1 THREAT(S)")] - [(say :jaye "LOOKS LIKE THE POWER IS CUT.")]) - :drop ev.noop]) :term) -(vm:word :c8 :term-message? (vm:when - (say :term "SUBJECT: PASSWORD SECURITY" "A REMINDER TO ALL DEVELOPERS" "ABOUT SECURITY BEST PRACTICE:" "**DO NOT WRITE DOWN PASSWORDS!**") - (say :term "WE PAY SIGNIFICANT LICENSE FEES" "FOR ENCRYPTED PASSWORD" "MANAGERS FOR ALL EMPLOYEES!") - (say :term "USE IT TO GENERATE AND STORE" "SECURE PASSWORDS!") - (say :jaye "THERE'S A STICKY NOTE ATTACHED" "TO THE MONITOR THAT SAYS" "'7777'."))) -(vm:word :c9 - :dup :evhack? (vm:when - (say :libb "HE'S JUST BEING DRAMATIC.")) - :term-message? (vm:when - (say :term "SUBJECT: EXPERIMENT" "HEY FOLKS, CAN YOU ALL DO ME A" "HUGE FAVOUR?" "THERE WAS A SMALL BUG IN MY") - (say :term "CODE (YES, IT HAPPENS!) AND A" "PROGRAM I WAS WORKING ON" "MADE A FEW TOO MANY COPIES OF" "ITSELF. CAN EVERYONE CHECK TO") - (say :term "SEE IF YOU HAVE A PROCESS" "CALLED 'LIBB' RUNNING ON YOUR" "TERMINAL?") - (say :term "IF YOU DO, PLEASE KILL -9 IT" "AND SHOOT ME A QUICK EMAIL." "*DON'T INTERACT WITH IT.*") - (say :term "IT COULD SERIOUSLY MESS WITH" "YOUR SYSTEM." " -- BILL"))) -(vm:word :cx - (vm:if-and [[:dup ev.touch :=] [:is-jaye?] [:responder-itile (itile :termoff) :=]] - [(say :jaye "THIS IS THE SIGN-IN TERMINAL" "USED BY VISITORS.") - (say :jaye "IT'S NOT TURNING ON FOR SOME" "REASON.") - :drop ev.noop]) :term) - -(fn center [str lineaddr] - [:vm (vm:str str) (+ lineaddr (math.floor (/ (- 40 (length str)) 2))) :draw-text]) -(vm:word :endgame :drop - (vm:pstr "ELEVATOR.SCREEN") :loadscreen - (vm:until :read-key) - 0x2280 :clearline 0x2300 :clearline 0x2380 :clearline - 0x2028 :clearline 0x20a8 :clearline 0x2128 :clearline - 0x21a8 :clearline 0x2228 :clearline 0x22a8 :clearline - 0x2328 :clearline 0x23a8 :clearline 0x2050 :clearline - - (center "JAYE AND GORD HAVE FOUND THEIR WAY" 0x2300) - (center "TO THE ELEVATOR!" 0x2380) - (center "BUT HAVE THEY FOUND THEIR WAY" 0x2028) - (center "TO FREEDOM?" 0x20a8) - (center "ARE THERE OTHERS IN THE BUILDING" 0x2128) - (center "IN NEED OF HELP?" 0x21a8) - (center "AND WHAT FATE AWAITS NEUT AND THEIR" 0x2228) - (center "SHIFTY NEW FRIEND LIBB?" 0x22a8) - (center "TO BE CONTINUED..." 0x23a8) - (vm:until :read-key) - - :cleargfx - (center "NEU] [OWER" 0x2300) - (center "BY JEREMY PENNER" 0x2380) - - (center "EVERY BYTE OF THIS GAME WAS CREATED" 0x20a8) - (center "WITH LOVE USING THE HONEYLISP" 0x2128) - (center "PROGRAMMING ENVIRONMENT" 0x21a8) - - (center "GREETS TO:" 0x22a8) - (center "GLORIOUS TRAINWRECKS" 0x2328) - (center "DIRTY RECTANGLES" 0x23a8) - (center "#FENNEL" 0x2050) - (center "KANSASFEST" 0x20d0) - - (center "APPLE ][ FOREVER!" 0x21d0) - (vm:forever)) - -level diff --git a/game/map1.json b/game/map1.json index 6fd524e..816fdd3 100644 --- a/game/map1.json +++ b/game/map1.json @@ -1 +1 @@ -{"loadword":"earthquake","map":"212121214121212121212121212141212121212161026161610261616102616161616102616161216143C0C0C2C0C0C0C0C0C0C081C0C0C0C0C0612161C0C08282C0C0C082C0C0C061C0C0C0C0C2024161C0C0C0C0C0C0C0C0C2C082C182C0C0E082612161C2C08282C0C0C0C082C0C061616161616161216161616161C16181616161616143C0C0C282612161C0C0C0C0C0C0C0C0C0C0C061C0C0C0C0C0022161E0828282C0C0C0C0C2C0C081C0C0C0C003612161C2C2C2C0C0C0C0C0C0C0C061C0C0C0C0C06141610303C043C2C0C0C0C0C0C061C0C0C003C061216161616161616161228161616161616161610221","jaye":{"y":9,"x":15},"tickword":"","moveword":"","objects":[{"x":8,"func":"door","linkword":"","name":"","y":6},{"x":2,"func":"firstterm","y":4,"name":"","linkword":"","link":3},{"x":17,"func":"neutterm","y":8,"name":"","linkword":"","link":2},{"x":13,"func":"switch","y":8,"name":"","linkword":"","link":8},{"link":6,"x":9,"y":1,"linkword":"","name":"","func":"exitscanner"},{"x":10,"linkentity":"level2","func":"exitdoor","y":1,"name":"","linkword":"exitlevel"},{"link":1,"x":6,"y":6,"linkword":"","name":"","func":"switch"},{"x":13,"func":"firstdoor","name":"","linkword":"","y":10}]} \ No newline at end of file +{"loadword":"","map":"000000000000000000000000000000000000000000606060606060606060606060606060606060000060000000000000000000000000000000006000006000000000000000000000000000000000600000600000000000000000000000004000000060000060000000000000000000000000000000006000006000000000000000000000000000000000600000600000000000000000000000000000000060000060000000000000000000000000000000006000006000000000000000000000000000000000600000606060606060606060606060606060606060000000000000000000000000000000000000000000","player":{"y":4,"x":5},"tickword":"","moveword":"","objects":[{"x":15,"linkentity":"","func":"cat","linkword":"","name":"","y":8}]} \ No newline at end of file diff --git a/game/map2.json b/game/map2.json deleted file mode 100644 index 3b77c64..0000000 --- a/game/map2.json +++ /dev/null @@ -1 +0,0 @@ -{"neut":{"y":12,"x":10},"map":"616161616161626161618161616161616161612161C0C0C06361C0C0E0C0C0C0C0C06103C0C0022161E0C0C0C081C0C0C0C0C0C0C0C081C0C0E0614161C0C0C0C06143C0C0C0C0C0C04322C0C0C0222161C0C0C0C061618161616161816161C0C0C00221616181616161C0C0C06143C0C0C061618161612161C0C0C06361E0C0C061C0C0C0C0C1E0C003612122C0C0C0C061C0C0C061C0E0C0C061C0C0C0022161C0C0C0C061616161616261616161C0C0C061416101C0C0C081C0C0E061C0C0E0C081C0C0C0022162C0C0C02361E0C0C06143C0C0C061E2A2E061216161C1616261612281616122226162C1C1616121","loadword":"","jaye":{"y":11,"x":11},"tickword":"","moveword":"","objects":[{"x":9,"link":2,"func":"term","linkword":"","name":"","y":11},{"x":2,"link":6,"func":"term","linkword":"","name":"","y":3},{"x":6,"func":"door","linkword":"","name":"","y":10},{"x":1,"link":5,"func":"scan","linkword":"","name":"","y":5},{"x":8,"func":"door","linkword":"","name":"","y":8},{"x":7,"link":2,"func":"term","linkword":"","name":"","y":6},{"x":12,"link":8,"func":"scan","linkword":"","name":"","y":1},{"x":17,"func":"door","linkword":"","name":"","y":7},{"x":13,"link":10,"func":"scan","linkword":"","name":"","y":1},{"x":13,"func":"door","linkword":"","name":"","y":8},{"x":15,"link":12,"func":"switch","linkword":"","name":"","y":6},{"x":2,"link":13,"func":"term","linkword":"","name":"","y":10},{"x":12,"link":12,"func":"term","linkword":"","name":"","y":5},{"x":15,"link":15,"func":"scan","linkword":"","name":"","y":9},{"x":15,"func":"door","linkword":"","name":"","y":10},{"x":16,"link":17,"func":"term","linkword":"","name":"","y":6},{"x":18,"link":16,"func":"term","linkword":"","name":"","y":10},{"x":15,"func":"door","linkword":"","name":"","y":3},{"x":19,"link":18,"func":"scan","linkword":"","name":"","y":9},{"x":13,"link":21,"func":"term","linkword":"","name":"","y":3},{"x":18,"link":20,"func":"term","linkword":"","name":"","y":2},{"x":8,"link":23,"func":"scan","linkword":"","name":"","y":1},{"x":9,"linkentity":"level3","func":"exitdoor","linkword":"exitlevel","name":"","y":1},{"x":16,"link":3,"func":"switch","linkword":"","name":"","y":1},{"x":3,"link":26,"func":"switch","linkword":"","name":"","y":1},{"x":6,"func":"door","linkword":"","name":"","y":3},{"x":9,"link":28,"func":"term","linkword":"","name":"","y":3},{"x":7,"link":27,"func":"term","linkword":"","name":"","y":2},{"x":3,"func":"door","linkword":"","name":"","y":7},{"x":17,"link":29,"func":"switch","linkword":"","name":"","y":1}]} \ No newline at end of file diff --git a/game/map3.json b/game/map3.json deleted file mode 100644 index 617ef27..0000000 --- a/game/map3.json +++ /dev/null @@ -1 +0,0 @@ -{"neut":{"y":12,"x":8},"map":"616161616161616181616161616161616161612161C063C0C0C0C0C0C0C06143C0E0C2C0C043022161C0C0C0C0C0C0C0C0C022C0C0C0C0C0C0C0614161C0C0C2C0C0C0C0C0C081C0C0C0C0C0C0C0612161C08282A2C0C0C0C0436123C0C0C0C0C0030221616161616161616261616161618161616161612161C063C0C02301C3C163C0C0C0C0C0822363022122C0C0C0C0C0C0A2A1C0C0C0C0C0C0C2C0C0614181C0C0C0C0E2C0C061C0C0C0C0C0C0C0C2C061216123C0C0C0C083C061E0C2C0C0C0C0438203022161610261610261616161026161026161026161212121212141212121212121212121412121212121","loadword":"level3-load","jaye":{"y":11,"x":9},"tickword":"","moveword":"","objects":[{"link":2,"x":1,"y":5,"linkword":"","name":"","func":"scan"},{"x":1,"linkentity":"level4","func":"exitdoor","name":"","linkword":"exitlevel","y":4},{"link":4,"x":7,"y":6,"linkword":"","name":"","func":"gordterm"},{"link":7,"x":14,"y":11,"linkword":"","name":"","func":"term"},{"link":6,"x":9,"y":6,"linkword":"","name":"gordswitch","func":"switch"},{"x":11,"func":"door","name":"","linkword":"","y":9},{"link":3,"x":10,"y":3,"linkword":"","name":"","func":"term"},{"link":9,"x":11,"y":10,"linkword":"","name":"","func":"scan"},{"x":14,"func":"door","name":"","linkword":"","y":7},{"x":7,"func":"meetrexx","y":3,"name":"","linkword":""},{"x":8,"func":"meetgord","y":6,"name":"","linkword":""},{"x":8,"func":"gordtable","y":5,"linkword":"","name":""}]} \ No newline at end of file diff --git a/game/map4.json b/game/map4.json deleted file mode 100644 index 1a4cb68..0000000 --- a/game/map4.json +++ /dev/null @@ -1 +0,0 @@ -{"neut":{"y":5,"x":20},"map":"61616161616161616261616161616161616161616143C0C0C082E082C0C0636163C0C083C0C0436161C0C0C0C0C0C2C0C0C0C061C0C0C0C0C0C0C06161C0C0C0C0C0C0C0C0C0C061C0C0C0C0C0C0C2616103C0C0A3C0C0C003C0C06163C0C0C0C082A2616161616161C1C1C16161812261618161616161616143C0C0C0C0C0C04361C0C0C0C0C0C0C0C0636181C0C0C0C0C0C0C0C081C0C0C0C0C0C0C0C0C06122C0C0C0C0C0E2C0C0C1A2E2C0C0C0C0C0C0C08161E082828282E0C02361A2C0C0C0C0C0C003236161026161610222616102616161610261616102612121214121212121212121212121412121212121","loadword":"","gord-following":true,"jaye":{"y":4,"x":19},"tickword":"","moveword":"","objects":[{"x":7,"func":"term","y":11,"linkword":"term-dual-link","name":""},{"link":1,"y":3,"func":"term","name":"term-exit","linkword":"","x":2},{"link":1,"y":3,"func":"term","name":"term-scan","linkword":"","x":7},{"x":11,"func":"door","y":7,"linkword":"","name":""},{"link":4,"y":7,"func":"scan","name":"","linkword":"","x":12},{"x":15,"func":"door","y":7,"linkword":"","name":""},{"link":3,"y":7,"func":"switch","name":"","linkword":"","x":7},{"x":10,"func":"door","y":5,"linkword":"","name":""},{"link":4,"y":4,"func":"switch","name":"","linkword":"","x":10},{"x":16,"func":"rexx","y":11,"linkword":"","name":""},{"link":8,"y":2,"func":"scan","name":"","linkword":"","x":7},{"link":13,"y":4,"func":"scan","name":"","linkword":"","x":1},{"x":1,"linkentity":"level5","func":"exitdoor","y":5,"linkword":"exitlevel","name":""},{"x":5,"func":"rexx","y":8,"linkword":"","name":""},{"x":7,"func":"tutorial-chair","linkword":"","name":"","y":10},{"link":6,"x":8,"y":7,"linkword":"","name":"","func":"switch"},{"link":2,"x":6,"y":7,"linkword":"","name":"","func":"switch"}]} \ No newline at end of file diff --git a/game/map5.json b/game/map5.json deleted file mode 100644 index 01c244a..0000000 --- a/game/map5.json +++ /dev/null @@ -1 +0,0 @@ -{"neut":{"y":6,"x":20},"map":"21616161228161616161616161616161616162612102E0C0C0C0C0E0C04361C0C0C0C0C0A3C0C0612161C0C0C0C0C0C0C0C022C0C0C08282C0828261416103C0C0C0C0C0C0C081C0C0C0C0C0C0C0C2C1210203C0C0C0C0C0C04361C0C0C08282838282622161616161816161616161618161616161616161216163C0C0C0C0E0C0C06143C0C0C0C0C0C063612102C0C0C0C0C0C0C0C061C0C0C0C0C0C0C0C0814161C0C0C0C0E2C0E2836101C0C0C0C0C0C0C0C1216143C0C0C082A2A2A281C0C0C043034382E26121610261610261C16102616161026161610261612121212121214121212121212121214121212121","loadword":"","tickword":"doortimer-tick","jaye":{"y":5,"x":19},"gord-following":true,"moveword":"move-garbagerexx","objects":[{"x":17,"func":"garbagerexx","name":"south-rexx","linkword":"","y":11},{"x":17,"func":"garbagerexx","name":"","linkword":"","y":8},{"link":13,"x":20,"y":9,"linkword":"","name":"timedswitch","func":"do-timedswitch"},{"link":16,"x":20,"y":4,"linkword":"","name":"","func":"switch"},{"link":9,"x":12,"y":4,"linkword":"","name":"","func":"term"},{"x":10,"func":"healthyrexx","name":"","linkword":"","y":4},{"link":17,"x":8,"y":2,"linkword":"","name":"","func":"switch"},{"link":10,"x":8,"y":6,"linkword":"","name":"","func":"term"},{"link":5,"x":8,"y":11,"linkword":"","name":"","func":"term"},{"link":8,"x":3,"y":11,"linkword":"","name":"","func":"term"},{"link":12,"x":5,"y":12,"linkword":"","name":"","func":"scan"},{"x":6,"linkentity":"level6","func":"exitdoor","name":"","linkword":"exitlevel","y":12},{"x":6,"func":"door","name":"","linkword":"","y":7},{"x":11,"func":"explodingdoor","name":"","linkword":"","y":9},{"link":14,"x":11,"y":10,"linkword":"","name":"","func":"scan"},{"x":13,"func":"door","name":"","linkword":"","y":7},{"x":11,"func":"door","name":"","linkword":"","y":3}]} \ No newline at end of file diff --git a/game/map6.json b/game/map6.json deleted file mode 100644 index 1493c9c..0000000 --- a/game/map6.json +++ /dev/null @@ -1 +0,0 @@ -{"neut":{"y":1,"x":5},"map":"210261616161616161616161812261616161E1614161C2C081C0C0C0C0C0C0C0C0C0E0C081C0C0622161E04384C0C0C043C0C0C043C0C0C0848201612102616161C0C061610281026161C0C0616161612161C2C0C0C0C061E2C0C0C0A261C0C0C0C0E2612161E003C0C0C061C0C0C0C08261C0C0C003E06121026161C0C0C061E08282E2E061C0C0C06161612161C2C0C0C0C06103C0C0C02361C0C0C0C0C2614161E003C0C0C0616102C1026161C0C0C003E06121026184C0C0C0C043C043C063C0C0C0846161612161E081C0C0C0C0C0C0C0C0C0C0C0C081C083612161612261816161616161616161616161616161","loadword":"","tickword":"","jaye":{"y":2,"x":6},"gord-following":true,"moveword":"","objects":[{"x":3,"func":"c4","y":10,"name":"","linkword":"linkloop","link":6},{"x":5,"func":"keypad2","y":10,"name":"","linkword":"","link":3},{"x":5,"func":"door","y":11,"name":"","linkword":""},{"x":11,"func":"door","y":9,"name":"","linkword":""},{"x":13,"func":"c9","y":6,"name":"","linkword":"linkloop","link":17},{"x":9,"func":"c8","y":6,"name":"","linkword":"linkloop","link":5},{"link":23,"y":4,"func":"switch","linkword":"","name":"","x":11},{"x":3,"func":"c3","y":7,"name":"","linkword":"linkloop","link":1},{"x":3,"func":"c2","y":4,"name":"","linkword":"linkloop","link":8},{"x":3,"func":"c1","y":2,"name":"","linkword":"linkloop","link":23},{"x":4,"func":"door","y":2,"name":"","linkword":""},{"x":4,"func":"keypad1","y":3,"name":"","linkword":"","link":11},{"x":4,"func":"scan","y":1,"name":"","linkword":"","link":4},{"x":17,"func":"door","y":2,"name":"","linkword":""},{"x":17,"func":"keypad3","y":3,"name":"","linkword":"","link":14},{"x":19,"func":"rexx","y":2,"name":"","linkword":""},{"x":19,"func":"c5","y":4,"name":"","linkword":"linkloop","link":18},{"x":19,"func":"c6","y":7,"name":"","linkword":"linkloop","link":19},{"x":19,"func":"c7","y":10,"name":"firewall","linkword":"linkloop","link":10},{"x":19,"func":"switch","y":12,"name":"","linkword":"","link":19},{"x":17,"func":"keypad4","y":10,"name":"","linkword":"","link":22},{"x":17,"func":"door","y":11,"name":"","linkword":""},{"x":15,"func":"cx","y":11,"name":"","linkword":"linkloop","link":9},{"x":14,"func":"scan","y":12,"name":"","linkword":"","link":25},{"x":13,"linkentity":"","func":"exitdoor","y":12,"name":"","linkword":"endgame"}]} \ No newline at end of file diff --git a/game/player.fnl b/game/player.fnl index 7e9b8f4..45d30e6 100644 --- a/game/player.fnl +++ b/game/player.fnl @@ -1,7 +1,7 @@ (local tile (require :game.tiles)) (local {: vm : mapw : maph : itile : controlstate} (require :game.defs)) -(local {: walkable : neutable : debris : sittable} tile.flag-to-bit) +(local {: walkable} tile.flag-to-bit) (vm:word :movement-dir ; key -- dyx (vm:case [(string.byte "I") 0xff00] @@ -19,85 +19,25 @@ [:sta vm.ST1H :x] (vm:drop)) -(vm:var :jaye-yx 0x0a0a) -(vm:var :jaye-dir 0xff00) -(vm:var :neut-yx 0x0b08) -(vm:var :rexx-yx 0xffff) -(vm:var :gord-yx 0xffff) -(vm:var :gord-dir 0x0000) -(vm:var :gord-sitting vm.false) -(vm:var :libb-yx 0xffff) -(vm:var :libb-present vm.false) - -(vm:var :controlstate [:db controlstate.jaye]) -(vm:word :is-jaye? :controlstate :bget controlstate.jaye :=) -(vm:word :is-neut? :controlstate :bget controlstate.neut :=) -(vm:word :is-rexx? :controlstate :bget controlstate.rexx :=) -(vm:word :is-prog? :is-neut? :is-rexx? :|) -(vm:word :is-walking? :movable-player-flag walkable :=) -(vm:word :neut-hidden? :neut-yx :get 0xffff :=) -(vm:word :rexx-active? :rexx-yx :get 0xffff := :not) -(vm:word :gord-hidden? :gord-yx :get 0xffff :=) -(vm:word :gord-following? :gord-hidden? :gord-sitting :get :| :not) -(vm:word :libb-hidden? :libb-yx :get 0xffff :=) - -(vm:word :set-rexx ; e -- - :dup (vm:if [:get controlstate.rexx] [:drop 0xffff controlstate.neut]) - :controlstate :bset :rexx-yx :set) - -(vm:word :player-tile ; -- ptile - :controlstate :bget - (vm:case [controlstate.jaye :jaye-tile] - [controlstate.neut :neut-tile] - [controlstate.gord :gord-tile] - [controlstate.libb :libb-tile] - [:else (itile :t-rexx)]) :lookup-tile) - -(vm:word :player-yx ; -- pyx - :controlstate :bget - (vm:case [controlstate.jaye :jaye-yx] - [controlstate.neut :neut-yx] - [controlstate.gord :gord-yx] - [controlstate.libb :libb-yx] - [:else :rexx-yx])) +(vm:var :player-yx 0x0a0a) (vm:word :draw-player ; -- :player-yx :dup (vm:if [:get :dup 0xffff := (vm:if [:drop] [:yx>screen :player-tile :drawtile])] [:drop])) -(vm:word :set-player-dir ; dir -- - :is-jaye? (vm:if [:jaye-dir :set] [:drop])) - (vm:var :noclip) (vm:word :move-if-clear ; yx -- f :noclip :get (vm:if [:drop vm.false] [:movable-player-flag :flag-at? :not])) -(vm:word :movable-player-flag ; -- flag - :is-neut? (vm:if [neutable] [walkable])) +(vm:const :movable-player-flag ; -- flag + walkable) (vm:word :move-player-to ; yx -- :player-yx :dup :get :dup 0xffff := (vm:if [:drop] [:drawtile-at]) :set :draw-player) -(vm:word :transition-gord-sitting ; yx f -- - controlstate.gord :controlstate :bset - :gord-sitting :set :move-player-to - controlstate.jaye :controlstate :bset) - -(vm:word :move-rexx-trash ; yx -- f - (vm:if-and [[:dup debris :flag-at?] [:is-rexx?]] - [(itile :t-floor) :update-itile :snd-garbage] [:drop]) - vm.false) -(vm:word :move-gord-sit ; yx -- f - (vm:if-and [[:dup sittable :flag-at?] [:is-jaye?] [:gord-following?]] - [vm.true :transition-gord-sitting vm.true] - [:move-noop])) -(vm:word :move-gord-stand ; yx -- f - (vm:if-and [[:gord-yx :get :=] [:is-jaye?] [:gord-sitting :get]] - [:jaye-yx :get vm.false :transition-gord-sitting 0 :gord-dir :set vm.true] - [vm.false])) (vm:word :move-noop :drop vm.false) (vm:word :handle-general-move ; yx -- f - (vm:if-or [[:dup :map-specific-move] [:dup :move-rexx-trash] [:dup :move-gord-sit] [:dup :move-gord-stand] [:dup :move-if-clear]] + (vm:if-or [[:dup :map-specific-move] [:dup :move-if-clear]] [:drop vm.true] [:move-noop])) (vm:def :yxclip? ; yx -- f @@ -113,7 +53,6 @@ [:lda 0xff] [:sta vm.TOP :x] [:sta vm.TOPH :x]]) (vm:word :try-move-player ; dir -- - :dup :set-player-dir ; dir :player-yx :get :yx+ ; yxnew (vm:if-or [[:dup :yxclip?] [:dup :touch-entity] [:dup :handle-general-move]] [:drop :player-yx :get]) @@ -121,64 +60,23 @@ ; touch-entity can modify player-yx so we have to refetch :move-player-to) -(vm:word :jaye-tile ; ptile - :jaye-dir :get - (vm:case [0xff00 (itile :jaye-n)] - [0x0100 (itile :jaye-s)] - [0x00ff (itile :jaye-w)] - [:else (itile :jaye-e)])) - -(vm:word :gord-tile ; ptile - :gord-sitting :get - (vm:if [(itile :gord-sit)] - [:gord-dir :get - (vm:case [0xff00 (itile :gord-n)] - [0x0100 (itile :gord-s)] - [0x00ff (itile :gord-w)] - [:else (itile :gord-e)])])) - -(vm:var :chuck-mode vm.false) (vm:word :two-frame :tick-count :get 0x1f :& 0x10 :<) -(vm:word :neut-tile :two-frame :chuck-mode :get (vm:if - [(vm:if [(itile :t-chuck)] [(itile :t-chuck2)])] - [(vm:if [(itile :neut1)] [(itile :neut2)])])) -(vm:word :libb-tile :two-frame (vm:if [(itile :libb1)] [(itile :libb2)])) +(vm:word :player-tile ; -- ptile + :two-frame (vm:if [(itile :player-frame1)] [(itile :player-frame1)])) (vm:word :flag-at? ; yx flag -- f :swap :itile-at :lookup-flags :&) -(vm:word :toggle-player - (vm:ifchain [:is-prog?] [controlstate.jaye] - [:rexx-active?] [controlstate.rexx] - [:neut-hidden?] [controlstate.jaye] - [controlstate.neut]) :controlstate :bset - :is-prog? (vm:if [:set-prog-tileset] [:set-human-tileset]) :full-redraw) - -(vm:word :party-follow - (vm:if-and [[:is-jaye?] [:gord-following?]] - [controlstate.gord :controlstate :bset - :gord-yx :get :gord-dir :get :yx+ :move-player-to - :jaye-dir :get :gord-dir :set - controlstate.jaye :controlstate :bset])) - (vm:word :player-key ; key -- (vm:ifchain [:dup (string.byte " ") :=] [:drop :toggle-player] - [:dup (string.byte "Z") :=] [:drop :trigger-sidekick] - [:dup 2 :=] [:drop :boss-key] [:movement-dir :dup] [:player-yx :get :swap ; oldyx dir :try-move-player - :dup :player-yx :get := (vm:if [:drop] [:party-follow :untouch-entity :load-next-level])] + :dup :player-yx :get := (vm:if [:drop] [:load-next-level])] [:drop])) (vm:word :full-redraw :drawmap :player-redraw) -(vm:word :player-overlaps ; -- f - vm.false :controlstate :bget :player-yx :get - :over (vm:for (vm:i) :controlstate :bset :dup :player-yx :get := (vm:when :rot)) - :drop :controlstate :bset) -(vm:word :player-redraw - :controlstate :bget - controlstate.count (vm:for (vm:i) :controlstate :bset :player-overlaps :not (vm:when :draw-player)) - :controlstate :bset) +(vm:word :player-redraw :draw-player) + diff --git a/game/portraits.json b/game/portraits.json index fa2f3ab..2ef53c2 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":[]},{"gfx":"808080F8F8F8F8F8F8B8B8F8F8B8B8F8808080FFFFFFFFDFDFFDFDDFDFFDFDDFF8B8B8F8F8B8B8F8F8F8F8F8F8D0D080DFFDFDDFDFFDFDDFDFFFFFFFFFAAAA80808080FFFFFFFFFEFEAFAFFEFEAFAFFE8080808FAFAFAFAFAFAFAFAFAFAFAFAFFEAFAFFEFEAFAFFEFEFFFFFFFFD5D580AFAFAFAFAFAFAFAFAFAFAFAFAFAAAA80","label":"ppady","flags":[]},{"gfx":"0080C07070303030303030303030303000AAAA7F0045001400150051005400003030707000703018187C4C7E000000000000007F007F0000007F017F0000000000D5D57F400A0028000A002000080000008A8A8B8B8B8B8B8B8B8B8B8B8B8B8B0000407F007F6030301F187F000000008B8B8B03000F0C060603030100000000","label":"pterm","flags":[]},{"gfx":"80808080808080A0C0A0C0A0808088AA8080808080808185AA858285C1D0A0D0D4AA94AA94AA888080A0C0A0C0A08080AAD2A2D2A2D2A2D2C185AA858285818080A0A8D0A8A09090D581A1C1A0C2A1C280808180818080808081858285828582A1828182959291929090D5808080808085818080808084958A958A958A958480","label":"plibb","flags":[]},{"gfx":"808080808080808088A082A8A0AAA8AA849494D4D4D4D0D5D4D1D5D58595D5D5AAAA8AAA8AAA82AA828A808280808080D4D5D4D5D4D5D4D4D4D4D0C0C0C080808080808080A288A2A08AA2AAAAAAAAAA84949495958585808181848184848581AAAAAA8AAA8AAA8AAAAAA8A2A2AAAA8080818181818181818585818185818080","label":"pchuck","flags":[]}] \ No newline at end of file +[{"gfx":"000000000000000000000000000000000000007C7C7E7E7E7E7E7E7E7E7E7E7E00000000707F7F7F7F7F7F7F7F7F7F7F7E7E7E7E7F7F7F7F7F7F7F7F7F7F7F7F0000000F0F1F1F1F1F1F1F1F1F1F1F1F000000000000000000000000000000001F1F1F1F7F7F7F7F7F7F7F7F7F7F7F7F00000000077F7F7F7F7F7F7F7F7F7F7F","label":"","flags":[]},{"gfx":"00000000004040606060707070707070000000000000010103037F7F7F7F7F7F707060604000000000000000000000007F7F7F7F7F7F7800004040406060606000000000001018383C3C7F7F7F7F7F7F000000000000000000000000000000007F7F7F3F0F67717C7F7F7F7F7F7F7F7F00007C7E7F7F7F7F7F7F7F7F7F7F7F7F","label":"pcat","flags":[]}] \ No newline at end of file diff --git a/game/tiles.fnl b/game/tiles.fnl index 6c80f1b..6372736 100644 --- a/game/tiles.fnl +++ b/game/tiles.fnl @@ -1,12 +1,12 @@ (local util (require :lib.util)) (local lume (require :lib.lume)) -(local flags [:walkable :neutable :debris :sittable]) +(local flags [:walkable]) (local flag-to-bit {}) (each [iflag flag (ipairs flags)] (tset flag-to-bit flag (bit.lshift 1 (- iflag 1)))) -(local encoded-tile-fields [:gfx :neut :mask]) +(local encoded-tile-fields [:gfx :mask]) (fn convert [tile field method] (local oldval (. tile field)) (when oldval @@ -28,7 +28,11 @@ (local fn-portraits "game/portraits.json") (local fn-font "game/font.json") -(fn loadgfx [filename] (lume.map (util.readjson filename) deserialize)) +(fn loadgfx [filename] + (if (util.file-exists filename) + (lume.map (util.readjson filename) deserialize) + [])) + (fn savegfx [filename gfx] (util.writejson filename (lume.map gfx serialize))) (fn appendgfx [org gfx ?key ?ignore-labels] @@ -38,10 +42,8 @@ (fn appendtiles [org] (local tiles (loadgfx fn-tiles)) - (org:append [:align 0x100] :jaye-tileset) + (org:append [:align 0x100] :tileset) (appendgfx org tiles) - (org:append [:align 0x100] :neut-tileset) - (appendgfx org tiles :neut true) (appendgfx org (loadgfx fn-portraits)) (org:append :tileflags) (each [_ tile (ipairs tiles)] diff --git a/game/tiles.json b/game/tiles.json index ce81f65..6c314a7 100644 --- a/game/tiles.json +++ b/game/tiles.json @@ -1 +1 @@ -[{"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"}] \ No newline at end of file +[{"gfx":"8080808080808080808080808080808080808080808080808080808080808080","word":"","label":"","flags":{"walkable":true}},{"gfx":"8080C0C0C0C0E0F0F8FCE6E6E0B0B0B0808183838383878F9FBFE7E7868C8C8C","word":"","label":"player-frame1","flags":[]},{"gfx":"8080808084CCFCFCFCFCFCF8F0B0B0B080808080E1E1E1F1B99F9F8F8F8C8C8C","word":"","label":"","flags":[]},{"gfx":"D5D5D5858585A5A5A5A5858585D5D5D5AAAAAAA8A8A8A9A9A9A9A8A8A8AAAAAA","word":"","label":"","flags":[]},{"gfx":"8080808080808080808080808080808080808080808080808080808080808080","word":"","label":"","flags":[]}] \ No newline at end of file diff --git a/game/title.screen b/game/title.screen deleted file mode 100644 index 06b3de7..0000000 --- a/game/title.screen +++ /dev/null @@ -1 +0,0 @@ -"D5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD52A552A552A552A552AD5AAD5AAD5AAD5AAD5AA552A552AD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AA85FEFFFFFFFFFFFFFFFFFFFF9FFCFFFFFFFFFFFFD5AAFF83D5AAD5FFFFBFD5AA0000000000000000D5AAD5AAD5AAD5AAD5AAD5AA552A55AA552A550AFFAFD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAF5FFDFFAD5F0D7AAF5EAFFAFD5AAD5FF9FFCFFAAD5FEFFABFDEBFF80D5AAF5AFD5AAD5AA0000000000000000D5AAD5AAD5AAD52A552A552A552A157E3F7E052E552A552A552A552A552A552A552A55AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5EAFFFFFFFFFFFFD7C2FFAAD5AAFFBFD5FAD5FF9FFCD7AAD7FEFFABD7EA9FA8D5AAD5AAD5AAD5AA0000000000000000D5AAD5AAD52A5534552A292D252B292B5578453F552A552A552A552A5A526A522A2D55AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AA80F0FFFFFFFFFFFFBF808080808080AAD5AAD5AAD5AAD5AAD5FEFFFFFFFFFFFFD58AF8AFD5AAFFFFD5AAD5FF9FFCDFAAD5FEFFABF5FF9FA8D5AAD5AAD5AAD5AA0000000000000000D5AAD5AA5554555255525534252B252D5578153E552A25552A53552A5A346A4A562A552A552A552AD5AAD5AAD5AAD5AAD5AAD5AA9580C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FC0AAD5AAD5AAD5AAD5FEFFFFFFFFFFAFD5AAE1FFFFFFFFFFFFFFFFFF9FFCDFFAFFFFFFFFFFFF87AAD5AAD5AAD5AAD5AA0000000000000000552A552A55546A4A5A526A2A152D152D55621778552A252B2553294D5A34254B5A2A55AAD5AAD5AAD5AAD5AAD5AAD5AAD5AA80E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF80F0BFD0AAD5AAD5AADFAAD5FEFFAFD5AAD5AAD5AA85FEFFFFFFFFFFFFFFFFBFF0FFFFFFFFFFFFFFFF87AAD5AAD5AAD5AAD5AA0000000000000000552A552A555216555A4A2A5556542A355562577855625F2A552A5A2A552A552A552AD5AAD5AAD5AAD5AAD5AAD5AAD58A8080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81C0FFFFFFFF8FD4AAD5AAFDFFFFAAD5AAD5AAD5AAD5AAD5AAD5F0FFFFFFFFFFFFFFFFFFF0FFFFFFFFFFBFD5FAC1AAD5AAD5AAD5AAD5AA0000000000000000D5AAD5AA552A5A2A552A552A552A550A707F15787F2A552A552A552A552A552AD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAE1FFFFFFFFFFFFFFFFFF8380B880F0FFFFFFFFFFFFFFFF8FD4AAF5FFFFFFFFAAD5AAD5AAD5AAD5AAD5AAD582DEAAD5FADFAAD5FAFFC3FFAFD5FAFFABF5FAC0AAD5AAD5AAD5AAD5AA0000000000000000D5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD52A552A552A552AD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AA85FCFFFFFFFFFFFFFFFFFFFF9FFCFFFFFFFFFFAFD5AAFF83D5AAFDFFFFAFD5AA0000000000000000D5AAD5AAD5AAD5AAD5AAD5AA552A552A552A55627FABD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAFDFFDFFED7F0D7AAF5EAFFAFD5AAD5FF9FFCDFAAD5FEFFABFDEBFF80D5AAD5AAD5AAD5AA0000000000000000D5AAD5AAD5AA552A552A552A552A157E1F7E452F552A552A552A552A552A552A552A55AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AA8180D0A8D5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5EAFFFFFFFFFFFFD782FFAAD5AAFFBFD5BAD5FF9FFCD7EAD7FEFFABD5EA9FA8D5AAD5AAD5AAD5AA0000000000000000D5AAD5AAD52A5534552A2A35252B292B5578053E552A552A552A552A5A526A522A2D55AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD58280F8FFFFFFFFFFFFFFFF808080808080D4AAD5AAD5AAD5AAD5FEFFFFFFFFFFFFD58AF8AFD5AAFFFFD5AAD5FF9FFCDFAAD5FEFFABFFFF9FA8D5AAD5AAD5AAD5AA0000000000000000D5AAD5AA5554555256521535252B252D5578153E552A25552953552A5A346A4A562A552A552A552AD5AAD5AAD5AAD5AAD5AAD5AA8180F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FC0AAD5AAD5AAD5AAD5FEFFFFF7FFFFABD5AAE1FFFFFFFFFFFFFFFFFF9FFCFFFFFFFFFFFFFFFF87AAD5AAD5AAD5AAD5AA0000000000000000552A552A55526A4A5A526A2A152D252D55621778552A252B2553294D5A34252B5A2A55AAD5AAD5AAD5AAD5AAD5AAD5AAD58280FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8380FFBFD0AAD5AAD5EADFAAD5EAFFAFD5AAD5AAD5AA85FCFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFF83AAD5AAD5AAD5AAD5AA0000000000000000D52A552A555256545A4A2A5556546A2A55625778157E5F2A552A552A552A552A55AAD5AAD5AAD5AAD5AAD5AAD5AAD58A8080C0FFFFFFFFFFFFFFFFFFFFFFFFFFBF80FCFFFFFFFF8FD4AAD5AAFDFFFFAAD5AAD5AAD5AAD5AAD5AAD5F0FFFFFFFFFFFFFFFFFFF0FFFFFFFFFFABD5FAC1AAD5AAD5AAD5AAD5AA0000000000000000D5AAD5AA552A5A2A552A552A552A550A7C3F55785F2A552A552A552A552A552AD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAE1FFFFFFFFFFFFFFFFFFFF878080FCFFFFFFFFFFFFFFFF8FD4AAF5FFFFFFFFAAD5AAD5AAD5AAD5AAD5AAD582DEAAD5FADFAAD5EAFFC3FFAAD5FAFFABF5BAC0AAD5AAD5AAD5AAD5AA0000000000000000D5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD58AD7AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD52A552A55AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AA85FCDFFEF5FFFFFFFFFFFFFF9FFCFFFFFFFFFFABD5AAFF83D5AAFDFFF7AAD5AA0000000000000000D5AAD5AAD5AAD5AAD5AA552A552A552A552A55785FAAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAFFFFFFFED7E0DFAAF5EAFFAFD5AAD5FF9FFCD7AAD5FEFFABFDEAFFA0D5AAD5AAD5AAD5AA0000000000000000D5AAD5AAD5AA5534552A552A552A153E5778452F552A552A552A552A552A552A552A55AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AA8080808080AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5FAFFFFFFFFFFFFD582FEABD5AAFFBFD5AAD5FF9FFCD7EAD7FEFFABD5EA9FA8D5AAD5AAD5AAD5AA0000000000000000D5AAD5AAD52A5534552A2A35252B292B5578053E552A552A552A552A5A526A522A2D552AD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD58280FEFFFFFFFFFFFFFFFFFF8180808080D0AAD5AAD5AAD5AAD5FEFFFFFFFFFFBFD5AAF0AFD5EAFFFFD5AAD5FF9FFCDFAAD5FEFFEBFFFF9FA8D5AAD5AAD5AAD5AA0000000000000000D5AAD5AA5554555256521535252B252D5578153E552A252B2553252B5A545A4A562A552A552A552AD5AAD5AAD5AAD5AAD5AAD5AA8080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87C0AAD5AAD5AAD5AAD5FEFFFFF7FFFFAAD5AAC1FFFFFFFFFFFFFFFFFF9FFCFFFFFFFFFFFFFFFF87AAD5AAD5AAD5AAD5AA0000000000000000552A552A5552294B5A525A2A152D252D55621778552A252D29532A555654292B552A55AAD5AAD5AAD5AAD5AAD5AAD5AAD580F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80F8FFBFD0AAD5AAD5EAFFAAD5EAFFABD5AAD5AAD5AA85FCFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFF81AAD5AAD5AAD5AAD5AA0000000000000000D5AAD52A554A5A545A2A2A5555525A2A55625778457F5F2A552A552A552A552A55AAD5AAD5AAD5AAD5AAD5AAD5AAD58A8080808080FEFFFFFFFFFFFFFFFFFF9F8C80FFFFFFFFFF8FD4AAD5AAFFFFFFAAD5AAD5AAD5AAD5AAD5AAD5E0FFFFFFFFFFFFFFFFFFF0FFFFFFFFFFABD5FAC1AAD5AAD5AAD5AAD5AA0000000000000000D5AAD5AA552A5A2A552A552A552A550A7C2F5538572A552A552A552A552A552AD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAE1FFFFFFFFFFFFFFFFFFFFFF87F8FFFFFFFFFFFFFFFFFF87D4AAF5FFFFFFFFAAD5AAD5AAD5AAD5AAD5AAD58ADCAAFDFADFAAD5EBFFC3FFAAD5FAFFABF5BEC0AAD5AAD5AAD5AAD5AA0000000000000000D5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5F8D7AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AA95FCDFAAD5FEFFFFFFFFFFFF9FFCFFFFFFFFFFABD5EAFF83D5AAFDFFD5AAD5AA0000000000000000D5AAD5AAD5AAD5AAD52A552A552A552A5538157E572AD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAFFFFFFFFD7C0DFAAF5EAFFAFD5AAD5FF9FFCD7AAD5FEFFABFDEAFFA0D5AAD5AAD5AAD5AA0000000000000000D5AAD5AAD5AA5534552A552A552A153E5578452F552A552A552A552A552A552A552A55AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD58A808080808080D0AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5FAFFFFFFFFFFFFD582FEABD5AAFFBFD5AAD5FF9FFCD7EAD7FEFFABD5EA9FA8D5AAD5AAD5AAD5AA0000000000000000D5AAD5AA552A5554552A5A34252B292B5578053E552A552A5552552A5A52694A6A2A552AD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD580F0FFFFFFFFFFFFFFFFFFFFFFFFFF8080C0AAD5AAD5AAD5AAD5FEFFFFFFFFFFBFD5AAE0BFF5FFFFFFD5AAD5FF9FFCDFAAD5FEFFFFFFFF8FA8D5AAD5AAD5AAD5AA0000000000000000D5AAD52A555456525652152D252B152D5578153E552A252B2553252B5A545A4A562A552A552A552AD5AAD5AAD5AAD5AAD5AAD58A80F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81C0AAD5AAD5AAD5AAD5FEFFFFD7FFFFAAD5AA81FFFFFFFFFFFFFFFFFF9FFCFFFFFFFFFFFFFFFF87AAD5AAD5AAD5AAD5AA0000000000000000552A552A5552294B5A52552A152D252D55625778552A252D29532A5556542A2B552AD5AAD5AAD5AAD5AAD5AAD5AAD58AD580FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8780FEFFBFD0AAD5AAD5EAFFAAD5AAF5ABD5AAD5AAD5AA95FCFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFC1AAD5AAD5AAD5AAD5AA0000000000000000D5AAD52A554A5A545A2A2A2D552A552A15605778757F572A552A552A552A552A55AAD5AAD5AAD5AAD5AAD5AAD5AAD58AF88780808080C0FFFFFFFFFFFFFFBF8080E0FFFFFFFFFF8FD4AAD5FAFFFFFFAAD5AAD5AAD5AAD5AAD5AAD5C0FFFFFFFFFFFFFFFFFFF0FFFFFFFFFFABD5FAC1AAD5AAD5AAD5AAD5AA0000000000000000D5AAD5AA552A5A2A552A552A552A55627F2A550A572A552A552A552A552A55AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAC1FFFFFFFFFFFFFFFFFFFFFF87FCFFFFFFFFFFFFFFABFF83D4AAF5FFFFFFFFAAD5AAD5AAD5AAD5AAD5AAD58AD8AAFDEADFAAD5EBFFC3FFAAD5FAFFABF5FEC0AAD5AAD5AAD5AAD5AA0000000000000000D5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AA95FED7AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AA95F8D7AAD5FEFFFFFFFFFFFF9FFCFFFFDFFEFFABF5EAFF83D5AAFDFFD5AAD5AA0000000000000000D5AAD5AAD5AAD5AA552A552A552A552A457F157E552A552A552A55AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5EAFFFFFFFFD7C0DFAAD5EAFFAFD5AAD7FF9FFCD7AAD5FEFFABFDEAFFA0D5AAD5AAD5AAD5AA0000000000000000D5AAD5AAD5AA5534552A552A552A552A5578452F552A552A552A552A552A552A552A55AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5808080808080808082D4AAD5AAD5AAD5AAD5AAD5AAD5AAD5FAFFFFFFFFFFFFD58AFEABD5AAFFBFD5AAD5FF9FFCD7EAD5FEFFABD5EA9FA8D5AAD5AAD5AAD5AA0000000000000000D5AAD5AA552A5554554A5A34252B252B5578153E552A55545652552A5A54694A5A2A552AD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AA8580FCFFFFFFFFFFFFFFFFFFFFFFFFFFBF80C0AAD5AAD5AAD5AAD5FEFFFFFFFFFFBFD5AAE0FFFFFFFFFFD5AAD5FF9FFCDFAAF5FFFFFFFFFF87A8D5AAD5AAD5AAD5AA0000000000000000D5AAD52A55545A525652252D252B152D5578153E552A252B2553252B5A54564A562A552A552A552AD5AAD5AAD5AAD5AAD5AAD580C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F80C0AAD5AAD5AAD5AAD5FEFFFFD5FAFFAAD5AA81FFFFFFFFFFFFFFFFFF9FFCFFFFFFFFFFFFFFFF87AAD5AAD5AAD5AAD5AA0000000000000000552A552A5552264D5A52552A152D252D55625778552A25356A4A2A5556522A2B552AD5AAD5AAD5AAD5AAD5AAD5AAD58A8080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF80C0FFFFBFD0AAD5AAD5FAFFAAD5AAD5AAD5AAD5AAD5AA95FCFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFDFFAC1AAD5AAD5AAD5AAD5AA0000000000000000D5AAD52A554A5A4A5A2A552A552A552A156017787F7F552A552A552A552A552A55AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAF8FF8080808080808080FCFFFFFF838080FEFFFFFFFFFF8FD4AAD5FAFFFFDFAAD5AAD5AAD5AAD5AAD5AAD5C0FFFFFFFFFFFFFFFFFFF0FFFFFFFFFFABF5FAC1AAD5AAD5AAD5AAD5AA0000000000000000D5AAD5AA552A552A552A552A552A55625F2A552A552A552A552A552A552A55AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AA81FFFFFFFFFFFFFFFFFFFFFF87FEFFFFFFFFFFFFFFAAFF83D4AAF5FFFFFFDFAAD5AAD5AAD5AAD5AAD5AAD58AF8AADDEADFAAD5EBFFC3FFAAF5FAFFABD5FEC0AAD5AAD5AAD5AAD5AA0000000000000000D5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AA85FED7AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5BED5AA95F0D7AAD5FAFFAFD5EAFFFF9FFCFFFFD5FEFFABF5EBFF83D5AAF5FFD5AAD5AA0000000000000000D5AAD5AAD5AAD5AA552A552A552A552A7C7F153E552A552A552A552A552A552A55AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAF5EFFFFFFFFFD7C2DFAAD5EAFFAFD5AAD7FF9FFCD7AAD5FEFFABD7EAFFA0D5AAD5AAD5AAD5AA0000000000000000D5AAD5AAD5AA5534552A552A552A552A5578452F552A552A552A552A552A552A552A55AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AA9580F09F808080808080C0AAD5AAD5AAD5AAD5AAD5AAD5AAD5FEFFFFFFFFFFFFD58AFEABD5AAFFBFD5AAD5FF9FFCD7EAD5FEFFABD5EA9FA8D5AAD5AAD5AAD5AA0000000000000000D5AAD5AA55345552554A5634252B252B5578153E552A15555A52552A5A54694A5A2A552A55AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AA81E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8780AAD5AAD5AAD5AAD5FEFFFFFFFFFFBFD5AAE0FFFFFFFFFFFFAAD5FF9FFCDFAAF5FFFFFFFFFF87A8D5AAD5AAD5AAD5AA0000000000000000D5AAD52A55545A525652252D252D152D5562153E552A252B2553252B5A54554A5A2A552A552A552AD5AAD5AAD5AAD5AAD5AA9580E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80A0C0AAD5AAD5AAD5AAD5FEFFFFD5EAD7AAD5AA81FFFFFFFFFFFFFFFFFF9FFCFFFFFFFFFFFFFFFF87AAD5AAD5AAD5AAD5AA0000000000000000552A552A555226555A52564A1635252D5562177E552A15556A4A6A54564A2A2B552AD5AAD5AAD5AAD5AAD5AAD5AAD58A80E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8380FCFFFF9FD0AAD5AAD5FAFFAAD5AAD5AAD5AAD5AAD5AA95F8FFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFDFFAC1AAD5AAD5AAD5AAD5AA0000000000000000D5AAD52A554A5A4A5A2A552A552A552A056017787F2F552A552A552A552A552A55AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAF0FFBF8080808080808080E0FFFF8080CCFFFFFFFFFFFF8FD4AAD5FEFFFFDFABD5AAD5AAD5AAD5AAD5AAD5C2FFFFFFFFDFAAD5FEFFE0FFFFFFFAFFABF5FAC1AAD5AAD5AAD5AAD5AA0000000000000000D5AAD5AA552A552A552A552A552A5562DFAA552A552A552A552A552A552AD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AA81FFFFFFFFFFFFFFFFFFFFFF87FCFFFFFFFFFFFFFFAAFF83D5AAF5FFFFFFD7AAD5AAD5AAD5AAD5AAD5AAD5AAF8AADDEADFAAD5EAFFC3FFAAF5FAFFABD5BEC0AAD5AAD5AAD5AAD5AA0000000000000000D5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAF1FFD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAF5FFD5AA95F0D7AAD5FAFFAFD5AAFFFF9FFCFFBFD5FEFFABF5EBFF83D5AAF5BFD5AAD5AA0000000000000000D5AAD5AAD5AAD52A552A552A552A550A7F7F153E552A552A552A552A552A552A552AD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAFDEFFFFFFFFFD7C2DFAAD5EAFFAFD5AAD7FF9FFCD7AADDFEFFABD7EABFA0D5AAD5AAD5AAD5AA0000000000000000D5AAD5AAD52A5534552A552A552A552A5578452F552A552A552A552A552A554A162D55AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AA9580FCFFBFF8808080808080D5AAD5AAD5AAD5AAD5AAD5AAD5FEFFFFFFFFFFFFD58AFCABD5AAFFFFD5AAD5FF9FFCD7EAD5FEFFABD5FA9FA8D5AAD5AAD5AAD5AA0000000000000000D5AAD5AA5534555255525634252B252B5578153E552A15555A52552A5A34694A562A552A552A552AD5AAD5AAD5AAD5AAD5AAD5AAD58A80F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F80AAD5AAD5AAD5AAD5FEFFFFFFFFFFBFD5AAE0FFFFFFFFFFFFAFD5FF9FFCDFAAFDFFFFFFFFFF87AAD5AAD5AAD5AAD5AA0000000000000000D5AA552A55545A525652292B252D152D5562177E552A252B2553252B5A34554A5A2A552A552A552AD5AAD5AAD5AAD5AAD5AA8580F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8780B8D0AAD5AAD5AAD5AAD5FEFFBFD5AAD5AAD5AA85FFFFFFFFFFFFFFFFFF9FFCFFFFFFFFFFFFFFFF87AAD5AAD5AAD5AAD5AA0000000000000000552A552A555226555A52564A1635293555621778552A55545A4A6A54562A552A552AD5AAD5AAD5AAD5AAD5AAD5AAD58A80F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8080FFFFFF8FD0AAD5AAD5FAFFAAD5AAD5AAD5AAD5AAD5AA95F0FFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFD7FAC1AAD5AAD5AAD5AAD5AA0000000000000000D5AAD52A552A5A2A552A552A552A552A017817787F2F552A552A552A552A552A55AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAE0FFFFFFFF81808080808080FC8780E0FFFFFFFFFFFFFF8FD4AAD5FFFFFFDFABD5AAD5AAD5AAD5AAD5AAD5C2FFABF5FFDFAAD5FAFFC0FFFFDFFAFFABF5FAC1AAD5AAD5AAD5AAD5AA0000000000000000D5AAD5AA552A552A552A552A552A55E2D7AAD52A552A552A552A552A552AD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AA81FFFFFFFFFFFFFFFFFFFFFF8FFCFFFFFFFFFFFFDFAAFF83D5AAF5FFFFFFD7AAD5AAD5AAD5AAD5AAD5AAD5AAF8AADDEADFAAD5EAFFC3FFAAF5FEFFABD5BEC0AAD5AAD5AAD5AAD5AA0000000000000000D5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAFCBFD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAF5FFD7FA95F0D7AAD5FAFFAFD5AAD5FF9FFCFFABD5FEFFABF5EBFF81D5AAF5AFD5AAD5AA0000000000000000D5AAD5AAD5AAD52A552A552A552A55787F7F153E552A552A552A552A552A552A552AD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAFFFFFFFFFFFFD7C2FFAAD5AAFFBFD5EAD7FF9FFCD7AADFFEFFABD7EA9FA0D5AAD5AAD5AAD5AA0000000000000000D5AAD5AAD52A5534552A292B552A292B5578452F552A552A552A552A554A5A52262D55AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AA81E0FFFFFFFFFFFF80808080808080AAD5AAD5AAD5AAD5AAD5FEFFFFFFFFFFFFD58AF8ABD5AAFFFFD5AAD5FF9FFCDFAAD5FEFFABD5FF9FA8D5AAD5AAD5AAD5AA0000000000000000D5AAD5AA5534555255525634252B252D5578153E552A25556A52552A5A34694A562A552A552A552AD5AAD5AAD5AAD5AAD5AAD5AAD58080FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0AAD5AAD5AAD5AAD5FEFFFFFFFFFFAFD5AAE1FFFFFFFFFFFFFFD7FF9FFCDFAAFFFFFFFFFFFF87AAD5AAD5AAD5AAD5AA0000000000000000D5AA552A55545A525A522A2B152D152D55621778552A252B2553292D5A34554A5A2A552A552A552AD5AAD5AAD5AAD5AAD5AA8180FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8180BED0AAD5AAD5AAD5AAD5FEFFBFD5AAD5AAD5AA85FFFFFFFFFFFFFFFFFF9FF8FFFFFFFFFFFFFFFF87AAD5AAD5AAD5AAD5AA0000000000000000552A552A555216555A4A5652563429355562177855625752564A6A54552A552A552AD5AAD5AAD5AAD5AAD5AAD5AAD58A80E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F80F8FFFFFF8FD0AAD5AAF5FFFFAAD5AAD5AAD5AAD5AAD5AA95F0FFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFD5FAC1AAD5AAD5AAD5AAD5AA0000000000000000D5AAD52A552A5A2A552A552A552A552A407917787F2B552A552A552A552A552A55AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAE1FFFFFFFFFFBF8080808080F88180FEFFFFFFFFFFFFFF8FD4AAF5FFFFFFFFAAD5AAD5AAD5AAD5AAD5AAD582FFAAD5FADFAAD5FAFFC1FFBFD5FAFFABF5FAC1AAD5AAD5AAD5AAD5AA0000000000000000D5AAD5AAD52A552A552A552A552AD5AAD5AAD5AAD52A552A552A552A55AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AAD5AA85FEFFFFFFFFFFFFFFFFFFFF9FFCFFFFFFFFFFFFD5AAFF83D5AAF5FFFFFFD5AAD5AAD5AAD5AAD5AAD5AAD5AAF8AADDEAFFAAD5EAFFE7FFAAF5FEFFAFD5BED0AAD5AAD5AAD5AAD5AA0000000000000000" \ No newline at end of file diff --git a/lib/util.fnl b/lib/util.fnl index dc071ad..28ad1fc 100644 --- a/lib/util.fnl +++ b/lib/util.fnl @@ -64,6 +64,11 @@ (f:write (json.encode value)) (f:close)) +(fn file-exists [name] + (let [f (io.open name :r)] + (when (not= f nil) (io.close f)) + (not= f nil))) + (fn waitfor [pred] (local coro (coroutine.running)) (core.add_thread @@ -77,7 +82,7 @@ (fn in-coro [f ...] (-> (coroutine.create f) (coroutine.resume ...))) {: int8-to-bytes : int16-to-bytes : int24-to-bytes : bytes-to-uint8 : bytes-to-uint16 : bytes-to-uint24 - : splice : lo : hi + : splice : lo : hi : reload : hotswap : swappable :require swappable-require - : readjson : writejson : waitfor : in-coro} + : readjson : writejson : file-exists : waitfor : in-coro} diff --git a/luars232.so b/luars232.so index 001bdb1c7d3887c7ee82d8bdaec021261ad69823..d64d3e45380aed421a094d173e61c29b25fa7309 100755 GIT binary patch literal 42048 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 J3Ajk>{{SNa)cgPd diff --git a/support/mame/jeejah/init.lua b/support/mame/jeejah/init.lua index fbb7598..9fc382c 100644 --- a/support/mame/jeejah/init.lua +++ b/support/mame/jeejah/init.lua @@ -8,7 +8,7 @@ if package.path:find("vendor/jeejah/") == nil then local fennel = require "fennel" fennel.path = './?.fnl;' .. modpath .. "/../../../vendor/jeejah/?.fnl" - table.insert(package.loaders, fennel.make_searcher({correlate=true})) + table.insert(package.searchers, fennel.make_searcher({correlate=true})) end local fennel = require "fennel" diff --git a/vendor/lite/data/core/init.lua b/vendor/lite/data/core/init.lua index 3af4844..2e89969 100644 --- a/vendor/lite/data/core/init.lua +++ b/vendor/lite/data/core/init.lua @@ -317,7 +317,7 @@ end function core.try(fn, ...) local err local ok, res = xpcall(fn, function(msg) - print(debug.traceback()) + print(msg, debug.traceback()) local item = core.error("%s", msg) item.info = debug.traceback(nil, 2):gsub("\t", "") err = msg