From a5dbc5fcfc0dfbdb3597732ea1410235f6efbca8 Mon Sep 17 00:00:00 2001 From: Jeremy Penner Date: Wed, 5 May 2021 21:09:40 -0400 Subject: [PATCH] Conditional flag support --- 8Bitsy.dsk | Bin 143360 -> 143360 bytes editor/8bitsy.fnl | 18 ++++++++++++++++++ editor/imstate.fnl | 19 +++++++++++++------ editor/mapedit.fnl | 22 +++++++++++++++++++++- game/defs.fnl | 3 ++- game/files.fnl | 9 +++++++-- game/game.json | 2 +- game/init.fnl | 4 ++++ 8 files changed, 66 insertions(+), 11 deletions(-) diff --git a/8Bitsy.dsk b/8Bitsy.dsk index 03106b7b929452ecd887ab0180447c74f69b2558..135046c06470368cd79b921e98331a1a74253b19 100644 GIT binary patch delta 3122 zcmaKue^3wT)=;S$(OE^TxRyUvk`xbw7B6^Tq$sxX-@4q_{$0 zRTV;G-txRBc$I6<(hak=wtT(C+4_dVUDC5Z`1Ztu>9PKyi?6=%Z1L{O>5sZ!xw4`1 zx9Y@$-h1b^zdn2P%_kCX{5@pYEUC^w@j9Ia|DP&zJX(UVrQP_*7W4 zwag4n4UHwnFJB%{%uKx$i}f8IIDDvgWN>h#w{PG%GCvj@8y_DVgKm5*){CwG#TWbg z`$wRUvBB{{#>CRHoSdApQpQ+eUSWa5!7=7?6%;za+5&4sB*jvGfX|dGgr%9_fWQYXr+{)uvntyIC0d0bH450UahQ!9=8@)Fui;bmLF>Cwp_MD z!#n$)hF$(<;4XhRa2KbEyDT+vmuz79Cb9w(*?MAI7uYspRm56|buF+x#JY*?Cw9QJ zW_LdN2(0;M9oPJej%z;9alfQ)t?Vd4R!p{hhiutsAgeU2P{$f%EyNGa1Ra8~+`*O4P>gbq^thY(>c4pxC8}>~k zbLupB~IC z9z+@zlf{FGx|l2;M7%_PEztV=vWfK_5z zdkF9mengnkPQz&!8v>m(!fP7ol=2nASqSV48ZGt**DqzKkdycC+K2C7rZdj3HvN^+ z=L;hn6Hh#Ci=YEi4Sm6wW|)NzY=x#_XjL>voh{WKPNbjk<pn{*>Mbf!SE)q(lS&j8kDJ795i1B`GOq|>Lg0HVLs$g96@ntLMkph=hG0?~5q=li z0V-=r<$I_iY$OdMWOcU{ls=g*Wlv(HQCOwQs52YFFOr6lRGo{v_#W=WUfV02jT`RC z&8Xb;{mpR4vn9N^oEJCp<4dsQp4M)*oe{p-o_fA7bZTdWCGBC}D*4g1XszOQt8%%h zh+4q!Rdl(WDd@un*$p)%;1&(P=nhChQ8CIXeFk_u{q0sf;hk1AKfeu6zpgD^lJpuy z*Zlzu^=Z8*-fPm*LozX<^o@|&WnG=P16(IZO%I9a_?2Vvuer+_T0 z+u$9ypY$|U3gJ2M7m&S*4;lEi27-(j1S(W+UtLiY=ILCU!FG|HT0~CW+KNuCZ=J8P z4a8JpJBf7=!}mIg?IL!NSd`e}=;7e@7kwo$w3uS7&cLq*gv|PAghkNEbc>`Ko0m8p zNu(i)M1%&Zo*tn~jnZ?r)a+O0Qd9GK3C8eV8C%7eEfKL?y9%spy9(j!z3h>UuYKd2 zQ_%&c-ihjxqCz}E?gsq2zBnwO4`XD!5XQ(j6-E!f7seN_Lf#q87#|;y#)qWw1!=fw zY1C+H#^_+xlDiH<^S=pV(fhLTfOFH$D_~V~GuqwKjCSvDM!S!Z zRcLXX*lA+#Ad3o@P)Qp&p0Ro~9)Oj*}OWi@1Oy{Q|JwmT?S zs!av5M`8h~7H$l(g=LCOc|$ZN*2!}%^ra>~LV$3-z~J>Ipml|lJf3)QMx zHlVMe)T}WL(d`dng;8{7Kr*Ikj~5HSUlk1nD#?6V!ie)o9%-#81!Wy-48+gF(z2y# XxOE*@ZI!pa?fQBM9*X`V%ANWTPkw7i delta 3205 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" :value 0xffff} {:label "" :value 0}] + (icollect [_ flag (ipairs files.game.flags)] {:label flag :value (.. :cond- flag)})) + rhs (or action.rhs (. options 1)) + (rhs y) (dropdown view [:set-flag :rhs i] rhs options x y 100)] + (set action.flag flag) + (set action.rhs rhs) + y)) + (fn [action vm] + (values action.rhs.value (.. :cond-var- action.flag) :set))) + {} diff --git a/editor/imstate.fnl b/editor/imstate.fnl index 27fbded..e8ae68f 100644 --- a/editor/imstate.fnl +++ b/editor/imstate.fnl @@ -86,9 +86,12 @@ (set view.imstate.active (make-tag tag)) true)) +(fn set-cursor [view cursor] + (when (= view.cursor nil) (set view.cursor cursor))) + (fn active? [view tag] (= view.imstate.active (make-tag tag))) (fn button [view tag x y w h] - (when (mouse-inside x y w h) (set view.cursor :hand)) + (when (mouse-inside x y w h) (set-cursor view :hand)) (activate view tag x y w h) (values (and (active? view tag) (= view.imstate.left :released) (mouse-inside x y w h)) (+ y h style.padding.y))) @@ -197,7 +200,7 @@ (set textNew (replace-selection view textNew "" iStartDel iLimDel))))))) ; handle mouse events - (when (mouse-inside x y w h) (set view.cursor :ibeam)) + (when (mouse-inside x y w h) (set-cursor view :ibeam)) (when (and (focused? view tag) (active? view tag) (mouse-inside x y w h)) (local mouse-i (i-from-x textNew (love.mouse.getX) x style.font)) (when initial-press @@ -230,19 +233,23 @@ (renderer.draw_text style.font label x y style.text) (textbox view label text (+ x wLabel) y wText)) +(fn option-text [option] + (match (type option) + :string option + :table (or option.label (tostring option)) + _ (tostring option))) + (fn dropdown [view tag selection options x y w] (local row-h (+ (style.font:get_height) style.padding.y)) (var new-selection nil) (renderer.draw_rect x y w row-h style.selection) - (renderer.draw_text style.font selection (+ x style.padding.x) (+ y (/ style.padding.y 2)) style.text) + (renderer.draw_text style.font (option-text selection) (+ x style.padding.x) (+ y (/ style.padding.y 2)) style.text) (renderer.draw_text style.icon_font "-" (+ x w (- style.padding.x)) (+ y (/ style.padding.y 2)) style.text) (when (focused? view tag) (var row-y (+ y row-h)) (each [i option (ipairs options)] - (renderer.draw_rect x row-y w row-h style.selection) - (renderer.draw_text style.font option (+ x style.padding.x) (+ row-y (/ style.padding.y 2)) style.text) (when (button view [(make-tag tag) i] x row-y w row-h) (set new-selection option)) (set row-y (+ row-y row-h))) @@ -250,7 +257,7 @@ (var row-y (+ y row-h)) (each [i option (ipairs options)] (renderer.draw_rect x row-y w row-h style.selection) - (renderer.draw_text style.font option (+ x style.padding.x) (+ row-y (/ style.padding.y 2)) style.text) + (renderer.draw_text style.font (option-text option) (+ x style.padding.x) (+ row-y (/ style.padding.y 2)) style.text) (set row-y (+ row-y row-h)))))) (focus view tag x y w row-h) (values (or new-selection selection) (+ y row-h))) diff --git a/editor/mapedit.fnl b/editor/mapedit.fnl index 66af13a..9bda345 100644 --- a/editor/mapedit.fnl +++ b/editor/mapedit.fnl @@ -3,7 +3,7 @@ (local util (require :lib.util)) (local lume (require :lib.lume)) (local files (require :game.files)) -(local {: mouse-inside : activate : active? : checkbox : textfield : textbutton : dropdown} (util.require :editor.imstate)) +(local {: mouse-inside : activate : active? : checkbox : textfield : textbutton : textbox : dropdown} (util.require :editor.imstate)) (local {: tilestrip-to-sprite} (util.require :editor.tiledraw)) (local {: encode-yx : encode-itile : decode-itile} (util.require :game.tiles)) (local actions (require :editor.actions)) @@ -156,6 +156,15 @@ (if (= self.imstate.left :released) (set self.iobject-linking nil) (self:draw-link-line x y self.iobject-linking [0 1 0] true))))) +(fn condition-label [flag] + (if flag {:label flag : flag} {:label ""})) + +(fn condition-options [] + (let [options [(condition-label nil)]] + (each [_ flag (ipairs (or files.game.flags []))] + (table.insert options (condition-label flag))) + options)) + (fn MapEditView.draw-object-code-editor [self object x y] (var y y) (var istep-to-delete nil) @@ -163,6 +172,9 @@ (each [istep step (ipairs object.steps)] (when (textbutton self "X" (+ x 280) y) (set istep-to-delete istep)) + (set step.condition (. (dropdown self [:code-condition istep] (condition-label step.condition) (condition-options) + (+ x 100 style.padding.x) y 100) + :flag)) (set (step.action y) (dropdown self [:code-action istep] (or step.action (. actions.actionlist 1)) actions.actionlist x y 100)) (set y (actions.edit step self x y 300 istep)) (set y (+ y style.padding.y))) @@ -186,8 +198,16 @@ y (if object.advanced (self:draw-object-advanced-editor object x y) (self:draw-object-code-editor object x y)) + new-flag-name (textbox self :new-flag-name self.new-flag-name x (+ y style.padding.y) 200) + (mk-new-flag y) (textbutton self "+ New Flag" (+ x 200 style.padding.x) (+ y style.padding.y)) do-delete (textbutton self "Delete" x (+ y 40)) (do-advanced y) (textbutton self (if object.advanced "Simple" "Advanced") (+ x 150) (+ y 40))] + (set self.new-flag-name new-flag-name) + (when mk-new-flag + (when (= files.game.flags nil) + (set files.game.flags [])) + (table.insert files.game.flags new-flag-name) + (set self.new-flag-name "")) (when do-delete (move-object self.level.objects (+ self.iobject 1) self.iobject) (set self.iobject nil)) diff --git a/game/defs.fnl b/game/defs.fnl index d23693f..84f93a9 100644 --- a/game/defs.fnl +++ b/game/defs.fnl @@ -146,7 +146,8 @@ (when (not entity.advanced) (let [code []] (each [iaction action (ipairs (or entity.steps []))] - (lume.push code (actions.generate action vm iaction))) + (if action.condition (lume.push code (.. :cond- action.condition) (vm:when (actions.generate action vm iaction))) + (lume.push code (actions.generate action vm iaction)))) (vm:word (.. prefix ientity) :drop (table.unpack code)))))) (fn deflevel [ilevel label] diff --git a/game/files.fnl b/game/files.fnl index a07dc4c..f1fdf6e 100644 --- a/game/files.fnl +++ b/game/files.fnl @@ -37,12 +37,17 @@ :levels (do (set value.map (value.map:tohex)) value) _ value)) +(fn clone [v] + (match (type v) + :table (lume.clone v) + _ v)) + (fn files.load [] (set files.game (if (util.file-exists filename) (let [game (util.readjson filename)] (each [k v (pairs game)] - (tset game k (lume.map v #(deserialize k (lume.clone $1))))) + (tset game k (lume.map v #(deserialize k (clone $1))))) game) {:tiles [] :portraits [] :font [] :levels []})) files.game) @@ -50,7 +55,7 @@ (fn files.save [] (let [game {}] (each [k v (pairs files.game)] - (tset game k (lume.map v #(serialize k (lume.clone $1))))) + (tset game k (lume.map v #(serialize k (clone $1))))) (util.writejson filename game))) (fn new-cache [game key] diff --git a/game/game.json b/game/game.json index deda47b..49ebf2e 100644 --- a/game/game.json +++ b/game/game.json @@ -1 +1 @@ -{"tiles":[{"gfx":"8080808080808080808080808080808080808080808080808080808080808080","word":"","label":"","flags":{"walkable":true}},{"gfx":"8080C0C0C0C0E0F0F8FCE6E6E0B0B0B0808183838383878F9FBFE7E7868C8C8C","word":"","label":"player-frame1","flags":[]},{"gfx":"8080808084CCFCFCFCFCFCF8F0B0B0B080808080E1E1E1F1B99F9F8F8F8C8C8C","word":"","label":"","flags":[]},{"gfx":"D5D55555D5D55555D5D55555D5D555552A2AAAAA2A2AAAAA2A2AAAAA2A2AAAAA","word":"","label":"","flags":[]},{"gfx":"8080D4D0D0D0D4D45454D4D4D4D0808080808A8282828A8A8A0A0A8A8A828080","word":"pot","label":"","flags":[]},{"gfx":"8080808080D490948484A48494D080808080808080AA88A8A0A5A5A0A88A8080","word":"","label":"","flags":[]},{"gfx":"8080D4D0D0D0D4D45454D4D4D4D0808080808A8282828A8A8A0A0A8A8A828080","word":"","label":"","flags":[]},{"gfx":"000000A0908884827E0A0A0A0000000000000000201008040785858500000000","word":"","label":"","flags":[]},{"gfx":"000014040414500000000000A888A8800000282020280A010101010195919580","word":"","label":"","flags":[]},{"gfx":"00008C92921C60105010781C0E070300000098A4A41C030504050F1C38706000","word":"","label":"","flags":[]},{"gfx":"000000004040000000D4D4ECECECD480000000000202010101AAAAB6B6B6AA80","word":"","label":"","flags":[]},{"gfx":"0000000000004828282828482800000000000000000004050505050405000000","word":"","label":"","flags":[]},{"flags":{"walkable":true},"word":"","label":"","gfx":"000000002020202020000A080808000000000000000000415111111111110100"},{"flags":[],"word":"","label":"","gfx":"00002028282A2A2A2820A0A0A0A0A08000000515155555151505858585858580"},{"flags":[],"word":"","label":"","gfx":"8080808080F8FCFC9C9CBCFEE6E6E68080808287878780818784848484848480"},{"flags":[],"word":"","label":"","gfx":"C0C0D0D0D4D4D4D5D5D080C0D0D4D4D08282828080828AAAAA8A8A8A82808282"},{"flags":{"walkable":true},"word":"","label":"","gfx":"0410401004104010041040100410401000000000000000000000000000000000"}],"font":[{"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"}],"levels":[{"loadword":"","objects":[{"x":15,"y":8,"linkentity":"","func":"cat","name":"","linkword":"","steps":[{"character":"cat","lines":["I'm an apple.","","",""],"action":"say"},{"character":"player","lines":["Strange, you look like a cat.","","",""],"action":"say"}]},{"x":5,"func":"fish","linkentity":"","y":8,"linkword":"","name":"","steps":[{"action":"say","character":"angryfish","lines":["","","Grr! Go away!",""]}]},{"x":13,"func":"pot","linkentity":"","y":4,"name":"","linkword":"","steps":[{"lines":["","Just another empty pot.","",""],"action":"say","character":"player"}]},{"x":12,"func":"suspiciouspot","linkentity":"","y":4,"name":"","linkword":"","steps":[{"action":"disappear","character":"player","lines":["","","",""]},{"action":"say","character":"player","lines":["","Whoops, I broke it!","",""]}]},{"x":11,"func":"pot","linkentity":"","y":4,"linkword":"","name":"","steps":[{"lines":["","It's a plain old empty pot.","",""],"action":"say","character":"player"}]},{"x":14,"func":"pot","linkentity":"","y":4,"linkword":"","name":"","steps":[{"lines":["","Nothing special about these pots.","",""],"action":"say","character":"player"}]},{"x":15,"func":"pot","linkentity":"","y":4,"linkword":"","name":"","steps":[{"lines":["","This one has a million dollars","inside!!",""],"action":"say","character":"player"},{"lines":["","Oh, no, wait. That was just","a dust bunny.",""],"action":"say","character":"player"},{"lines":["","There's really nothing special","about this pot.",""],"action":"say","character":"player"},{"lines":["","Probably.","",""],"action":"say","character":"player"}]},{"func":"","x":20,"y":7,"steps":[{"position":1537,"character":"player","action":"warp","lines":["","","",""],"map":"map2"}]}],"player":{"y":4,"x":5},"tickword":"","moveword":"","map":"000000000000000000000000000000000000000000606060606060606060606060606060606060000060000000000000000000000000000000006000006000000000000000000000000000000000600000600000A00000000000000000004000000060600060000000000000000000000000000000000000006000000000000000000000000000000000606000600000000000000000000000000000000060000060000000000000000080808080800000006000006000000000000000000000000000000000600000606060606060606060606060606060606060000000000000000000000000000000000000000000"},{"loadword":"","map":"A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1000000A1A1A1A10000818181818181A1A1A10000000000A1A1A1000000818181818181A1A1A1000000000000A1A100000000818181818100A160600000000000000000000000000081000000A1000000000000000000C10000000000000000000060600000000000000000000000000000000000A1A1000081818100000000000000A1A100000000A1A10081818181810000000000A1A1A1A1000000A1A100818181818100000000A1A1A1A1A1A10000A1A10000008181000000000000A1A1A1A1A1E0A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1","tickword":"","moveword":"","objects":[{"func":"","x":1,"y":7,"steps":[{"position":1554,"character":"player","action":"warp","lines":["","","",""],"map":"map1"}]},{"func":"","x":18,"y":2,"steps":[{"action":"say","character":"player","lines":["","Neat, it's a pair of 3D glasses!","I wonder what I can see with","these..."]},{"action":"disappear","character":"player","lines":["","","",""]}]},{"func":"","x":10,"y":7,"steps":[{"lines":["","I am but a weary old man,","living alone in these woods.",""],"action":"say","character":"old man"},{"character":"player","lines":["","Cool story. Any words of wisdom","for me?",""],"action":"say"},{"character":"old man","lines":["","Not really.","",""],"action":"say"}]},{"func":"","x":20,"y":7,"steps":[{"position":1537,"character":"player","action":"warp","lines":["","","",""],"map":"map3"}]}]},{"loadword":"","objects":[{"func":"","x":1,"y":7,"steps":[{"position":1554,"character":"player","action":"warp","lines":["","","",""],"map":"map2"}]},{"func":"","x":9,"y":5,"steps":[{"character":"player","lines":["","This wood would be perfect to","build a bridge with!",""],"action":"say"},{"character":"player","lines":["","Haha, \"wood would\". Wood would","wood would.",""],"action":"say"}]},{"func":"","x":15,"y":6,"steps":[{"character":"player","lines":["","If only there was some convenient","way to cross this ankle-deep","stream!"],"action":"say"}]}],"tickword":"","moveword":"","map":"A1A1A1A1A1818181818181E1E181818181818181A1A1A1A18181818181818181E181818181818181A1A181818181810000008181E1E1818181000000A1000081818100000000818181E1E18181000000A100000000000000000000818181E181818100000000000000000000000000008181E18181810000A181810000000000000000000000E10000000000A181818181000000A10000818181E18181000000A1818181810000000000008181E1E18181000000A1A181818100000000818181E1E1818181818181A1A1A1818181000081818181E181818181818181A1A1A1A18181818181818181E181818181818181"}],"portraits":[{"gfx":"000000000000000000000000000000000000007C7C7E7E7E7E7E7E7E7E7E7E7E00000000707F7F7F7F7F7F7F7F7F7F7F7E7E7E7E7F7F7F7F7F7F7F7F7F7F7F7F0000000F0F1F1F1F1F1F1F1F1F1F1F1F000000000000000000000000000000001F1F1F1F7F7F7F7F7F7F7F7F7F7F7F7F00000000077F7F7F7F7F7F7F7F7F7F7F","label":"player","flags":[]},{"gfx":"00000000004040606060707070707070000000000000010103037F7F7F7F7F7F707060604000000000000000000000007F7F7F7F7F7F7800004040406060606000000000001018383C3C7F7F7F7F7F7F000000000000000000000000000000007F7F7F3F0F67717C7F7F7F7F7F7F7F7F00007C7E7F7F7F7F7F7F7F7F7F7F7F7F","label":"cat","flags":[]},{"gfx":"80808080808080808080D5818181858480808080808080808080AA80808080808484848484A4848484A48484848494D0809090D0D4F5D5D5D5D5D480808080AA80808080808080808080D5808080808080808080808080808080AAA0A0A0A888808080808AA8AAAAAA828080808080D588888888888889898888888888888A82","label":"angryfish","flags":[]},{"flags":[],"label":"old man","gfx":"0000000000000000000000000000000000000000000000707C7872737373736300000000303F3F3F7F7F7F7F7F7F7F7F0F7F7F7F7E7E7E7E7C7C79797979797300000000000000073F3F7F7F7F7F7F60000000000000000000000000000000000E7F3F3F3F3F7F7F7F7F7F7F7F3F1F1F00000000000000000004040C0C1C1E1F"}]} \ No newline at end of file +{"tiles":[{"gfx":"8080808080808080808080808080808080808080808080808080808080808080","word":"","label":"","flags":{"walkable":true}},{"gfx":"8080C0C0C0C0E0F0F8FCE6E6E0B0B0B0808183838383878F9FBFE7E7868C8C8C","word":"","label":"player-frame1","flags":[]},{"gfx":"8080808084CCFCFCFCFCFCF8F0B0B0B080808080E1E1E1F1B99F9F8F8F8C8C8C","word":"","label":"","flags":[]},{"gfx":"D5D55555D5D55555D5D55555D5D555552A2AAAAA2A2AAAAA2A2AAAAA2A2AAAAA","word":"","label":"","flags":[]},{"gfx":"8080D4D0D0D0D4D45454D4D4D4D0808080808A8282828A8A8A0A0A8A8A828080","word":"pot","label":"","flags":[]},{"gfx":"8080808080D490948484A48494D080808080808080AA88A8A0A5A5A0A88A8080","word":"","label":"","flags":[]},{"gfx":"808080F8F89898989898989E9F9E80808080809F9F9898989898989E9F9E8080","word":"","label":"","flags":[]},{"gfx":"000000A0908884827E0A0A0A0000000000000000201008040785858500000000","word":"","label":"","flags":[]},{"gfx":"000014040414500000000000A888A8800000282020280A010101010195919580","word":"","label":"","flags":[]},{"gfx":"00008C92921C60105010781C0E070300000098A4A41C030504050F1C38706000","word":"","label":"","flags":[]},{"gfx":"000000004040000000D4D4ECECECD480000000000202010101AAAAB6B6B6AA80","word":"","label":"","flags":[]},{"gfx":"0000000000004828282828482800000000000000000004050505050405000000","word":"","label":"","flags":[]},{"flags":{"walkable":true},"word":"","label":"","gfx":"000000002020202020000A080808000000000000000000415111111111110100"},{"flags":[],"word":"","label":"","gfx":"00002028282A2A2A2820A0A0A0A0A08000000515155555151505858585858580"},{"flags":[],"word":"","label":"","gfx":"8080808080F8FCFC9C9CBCFEE6E6E68080808287878780818784848484848480"},{"flags":[],"word":"","label":"","gfx":"C0C0D0D0D4D4D4D5D5D080C0D0D4D4D08282828080828AAAAA8A8A8A82808282"},{"flags":{},"word":"","label":"stickbob","gfx":"E090B090A0C0A8D0D0A8C0E0B0988080838486848281958A8A958183868C8080"},{"flags":[],"word":"","label":"","gfx":"8080808080A0A8A8A0A0A0A8A8A8A08081818181818594948585859594948580"},{"flags":[],"word":"","label":"","gfx":"008AA88A000020282A0A0A0A2A28000000151115140505010000101014150500"}],"levels":[{"loadword":"","map":"000000000000000000000000000000000000000000606060606060606060606060606060606060000060000000000000000000000000000000006000006000000000000000000000000000000000600000600000A00000000000000000004000000060600060000000000000000000000000000000000000006000000000000000000000000000000000606000600000000000000000000000000000000060000060000000000000000080808080800000006000006000000000000000000000000000000000600000606060606060606060606060606060606060000000000000000000000000000000000000000000","player":{"y":4,"x":5},"tickword":"","moveword":"","objects":[{"x":15,"func":"cat","linkentity":"","y":8,"linkword":"","name":"","steps":[{"action":"say","character":"cat","lines":["I'm an apple.","","",""]},{"action":"say","character":"player","lines":["Strange, you look like a cat.","","",""]}]},{"x":5,"y":8,"linkentity":"","func":"fish","name":"","linkword":"","steps":[{"lines":["","","Grr! Go away!",""],"action":"say","character":"angryfish"}]},{"x":13,"y":4,"linkentity":"","func":"pot","linkword":"","name":"","steps":[{"character":"player","lines":["","Just another empty pot.","",""],"action":"say"}]},{"x":12,"y":4,"linkentity":"","func":"suspiciouspot","linkword":"","name":"","steps":[{"lines":["","","",""],"action":"disappear","character":"player"},{"lines":["","Whoops, I broke it!","",""],"action":"say","character":"player"}]},{"x":11,"y":4,"linkentity":"","func":"pot","name":"","linkword":"","steps":[{"character":"player","lines":["","It's a plain old empty pot.","",""],"action":"say"}]},{"x":14,"y":4,"linkentity":"","func":"pot","name":"","linkword":"","steps":[{"character":"player","lines":["","Nothing special about these pots.","",""],"action":"say"}]},{"x":15,"y":4,"linkentity":"","func":"pot","name":"","linkword":"","steps":[{"character":"player","lines":["","This one has a million dollars","inside!!",""],"action":"say"},{"character":"player","lines":["","Oh, no, wait. That was just","a dust bunny.",""],"action":"say"},{"character":"player","lines":["","There's really nothing special","about this pot.",""],"action":"say"},{"character":"player","lines":["","Probably.","",""],"action":"say"}]},{"func":"","x":20,"y":7,"steps":[{"position":1537,"character":"player","lines":["","","",""],"action":"warp","map":"map2"}]}]},{"loadword":"","objects":[{"func":"","x":1,"y":7,"steps":[{"position":1554,"character":"player","lines":["","","",""],"action":"warp","map":"map1"}]},{"func":"","x":18,"y":2,"steps":[{"lines":["","Neat, it's a pair of 3D glasses!","I wonder what I can see with","these..."],"action":"say","character":"player"},{"lines":["","","",""],"action":"disappear","character":"player"},{"flag":"has glasses","action":"set-flag","lines":["","","",""],"rhs":{"label":"","value":65535},"character":"player"}]},{"func":"","x":10,"y":7,"steps":[{"character":"old man","lines":["","I am but a weary old man,","living alone in these woods.",""],"action":"say"},{"action":"say","character":"player","lines":["","Cool story. Any words of wisdom","for me?",""]},{"action":"say","character":"old man","lines":["","Not really.","",""]},{"condition":"has glasses","character":"glasses","lines":["Holy cow!!","","This \"old man\" is actually","an alien!!"],"action":"say"}]},{"func":"","x":20,"y":7,"steps":[{"position":1537,"character":"player","lines":["","","",""],"action":"warp","map":"map3"}]},{"func":"","x":10,"y":1,"steps":[{"position":2057,"character":"player","action":"warp","lines":["","","",""],"map":"map4"}]}],"tickword":"","moveword":"","map":"A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1000000A1A1A1A10000818181818181A1A1A10000000000A1A1A1000000818181818181A1A1A1000000000000A1A100000000818181818100A160600000000000000000000000000081000000A1000000000000000000C10000000000000000000060600000000000000000000000000000000000A1A1000081818100000000000000A1A100000000A1A10081818181810000000000A1A1A1A1000000A1A100818181818100000000A1A1A1A1A1A10000A1A10000008181000000000000A1A1A1A1A1E0A1A1A1A1A1A1A1A1A1A1A100A1A1A1A1A1A1A1A1A1A1"},{"loadword":"","map":"A1A1A1A1A1818181818181E1E181818181818181A1A1A1A18181818181818181E181818181818181A1A181818142810000008181E1E1818181000000A1000081818100000000818181E1E18181000000A100000000000000000000818181E181818100000000000000000000000000008181E18181810000A181810000000000000000000000E10000000000A181818181000000A10000818181E18181000000A1818181810000000000008181E1E18181000000A1A181818100000000818181E1E1818181818181A1A1A1818181000081818181E181818181818181A1A1A1A18181818181818181E181818181818181","tickword":"","moveword":"","objects":[{"func":"","x":1,"y":7,"steps":[{"position":1554,"character":"player","lines":["","","",""],"action":"warp","map":"map2"}]},{"func":"","x":9,"y":5,"steps":[{"action":"say","character":"player","lines":["","This wood would be perfect to","build a bridge with!",""]},{"action":"say","character":"player","lines":["","Haha, \"wood would\". Wood would","wood would.",""]},{"action":"say","character":"player","lines":["","Hey, I bet I could cut down this","tree with my cool time scissors!",""],"condition":"has scissors"},{"action":"disappear","character":"player","lines":["","","",""],"condition":"has scissors"},{"action":"say","character":"player","lines":["","Haha, awesome.","",""],"condition":"has scissors"},{"condition":"has scissors","flag":"has wood","character":"player","lines":["","","",""],"rhs":{"label":"","value":65535},"action":"set-flag"}]},{"func":"","x":15,"y":6,"steps":[{"action":"say","character":"player","lines":["","If only there was some convenient","way to cross this ankle-deep","stream!"]},{"condition":"has wood","character":"player","lines":["","Guess I'll just have to build a","raft and sail it across.",""],"action":"say"},{"condition":"has wood","character":"player","lines":["","","",""],"action":"disappear"}]},{"func":"","x":6,"y":10,"steps":[{"character":"snake","lines":["","Badger badger badger badger","badger badger badger badger","badger badger badger badger"],"action":"say"},{"character":"player","lines":["","A snake! A snake!","",""],"action":"say"}]}]},{"loadword":"","map":"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000600000000000000000000000606060606060600060606060606060000000000060C00000000000000000000000C060000000000060000000000000000000000000006000000000006000000000000002000000000000600000000000600000000000000000000000000060000000000060C00000210000000000220000C060000000000060606060606060606060606060606000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","tickword":"","moveword":"","objects":[{"func":"","x":10,"y":6,"steps":[{"lines":["","Would you like to hear a jig","and a reel?",""],"action":"say","character":"stick bob"},{"lines":["","Do you play the theremin?","",""],"action":"say","character":"player"},{"lines":["","I can play anything!","",""],"action":"say","character":"stick bob"}]},{"func":"","x":10,"y":10,"steps":[{"position":265,"character":"player","action":"warp","lines":["","","",""],"map":"map2"}]},{"func":"","x":13,"y":4,"steps":[{"lines":["","It's a fiddle. I promise.","I worked hard to draw it.",""],"action":"say","character":"player"}]},{"func":"","x":7,"y":4,"steps":[{"lines":["","Scissors with a clock on them?","They're super sharp!",""],"action":"say","character":"player"},{"lines":["","I'm sure they'll come in handy!","",""],"action":"say","character":"player"},{"flag":"has scissors","character":"player","lines":["","","",""],"rhs":{"label":"","value":65535},"action":"set-flag"},{"lines":["","","",""],"action":"disappear","character":"player"}]}]}],"flags":["has wood","has scissors","","has glasses"],"portraits":[{"gfx":"000000000000000000000000000000000000007C7C7E7E7E7E7E7E7E7E7E7E7E00000000707F7F7F7F7F7F7F7F7F7F7F7E7E7E7E7F7F7F7F7F7F7F7F7F7F7F7F0000000F0F1F1F1F1F1F1F1F1F1F1F1F000000000000000000000000000000001F1F1F1F7F7F7F7F7F7F7F7F7F7F7F7F00000000077F7F7F7F7F7F7F7F7F7F7F","label":"player","flags":[]},{"gfx":"00000000004040606060707070707070000000000000010103037F7F7F7F7F7F707060604000000000000000000000007F7F7F7F7F7F7800004040406060606000000000001018383C3C7F7F7F7F7F7F000000000000000000000000000000007F7F7F3F0F67717C7F7F7F7F7F7F7F7F00007C7E7F7F7F7F7F7F7F7F7F7F7F7F","label":"cat","flags":[]},{"gfx":"80808080808080808080D5818181858480808080808080808080AA80808080808484848484A4848484A48484848494D0809090D0D4F5D5D5D5D5D480808080AA80808080808080808080D5808080808080808080808080808080AAA0A0A0A888808080808AA8AAAAAA828080808080D588888888888889898888888888888A82","label":"angryfish","flags":[]},{"flags":[],"label":"old man","gfx":"0000000000000000000000000000000000000000000000707C7872737373736300000000303F3F3F7F7F7F7F7F7F7F7F0F7F7F7F7E7E7E7E7C7C79797979797300000000000000073F3F7F7F7F7F7F60000000000000000000000000000000000E7F3F3F3F3F7F7F7F7F7F7F7F3F1F1F00000000000000000004040C0C1C1E1F"},{"flags":[],"label":"stick bob","gfx":"808080808080808080A0A8E8E8F0F0F08080808080C0D4D5FDFFFFF3F1F1FFFFF0F0E0E0C08080808080808080808080FFFFF983FFBFBEFCF4D4D4D4D4D4D4D480808080808AAAABAFBFFFE7C7C7FFFF80808080808080808185858583838383FFFFCFE0FFFEBE8F8B8A8A8A8A8A8A8A83838383818080808080808080808080"},{"flags":[],"label":"snake","gfx":"000000000000808080808AA88A8080000000000000000014557155455054545000000020202020202020000000000000505455150505050505155554545040000000000000000000000202020202020200000000000000000000000000000000002020202000000000000002022A2A2A00000001010505051514141414150505"},{"flags":[],"label":"glasses","gfx":"000000000000000000000000000000000000007C7C7E7E7E7E555555757E7E7E00000000707F7F7F7F7F7F7F7F7F7F7F7E7E7E7E7F7F7F7F7F7F7F7F7F7F7F7F0000000F0F1F1F1F9FAAAAAAAB1F1F1F000000000000000000000000000000001F1F1F1F7F7F7F7F7F7F7F7F7F7F7F7F00000000077F7F7F7F7F7F7F7F7F7F7F"}],"font":[{"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/init.fnl b/game/init.fnl index 3cf4384..e2a5cd8 100644 --- a/game/init.fnl +++ b/game/init.fnl @@ -32,6 +32,10 @@ :map-specific-load :full-redraw) +(each [_ flag (ipairs (or files.game.flags []))] + (vm:var (.. :cond-var- flag) vm.false) + (vm:word (.. :cond- flag) (.. :cond-var- flag) :get)) + (each [imap _ (ipairs files.game.levels)] (deflevel imap (.. :map imap)))