From c850a5dc8e2bade282ca8edac8623043ea11dc87 Mon Sep 17 00:00:00 2001 From: Jeremy Penner Date: Sat, 3 Jul 2021 22:13:04 -0400 Subject: [PATCH] Fix scaling --- bitsy/game.json | 2 +- editor/8bitsy.fnl | 10 +++++----- editor/imstate.fnl | 6 +++--- editor/mapedit.fnl | 40 +++++++++++++++++++------------------ editor/tileedit.fnl | 12 ++++++----- presentation/commands.fnl | 5 ++++- presentation/pics/bsod.png | Bin 0 -> 44656 bytes presentation/slides.fnl | 40 ++++++++++++++++++++++++++++++++----- 8 files changed, 76 insertions(+), 39 deletions(-) create mode 100644 presentation/pics/bsod.png diff --git a/bitsy/game.json b/bitsy/game.json index f76b3f5..551a56e 100644 --- a/bitsy/game.json +++ b/bitsy/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":"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"},{"flags":[],"word":"","label":"","gfx":"000000002028381828282020202028000000000005151D191515040404041400"}],"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 a cat.","","",""]},{"lines":["","Nice kitty!","",""],"action":"say","character":"player"}]},{"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"},{"action":"say","character":"snake","lines":["","There's a snake though.","",""],"condition":"has glasses"},{"action":"say","character":"glasses","lines":["","aaack!","",""],"condition":"has glasses"}]},{"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"}]},{"func":"","x":16,"y":10,"steps":[{"lines":["","Would you be my friend?","",""],"action":"say","character":"charismatic frog"},{"lines":["","OF COURSE!","",""],"action":"say","character":"player"}]}],"tickword":"","moveword":"","map":"A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1000000A1A1A1A10000818181818181A1A1A10000000000A1A1A1000000818181628181A1A1A1000000000000A1A100000000818181818100A160600000000000000000000000000081000000A1000000000000000000C10000000000000000000060600000000000000000000000000000000000A1A1000081818100000000000000A1A100000000A1A10081818181810000000000A1A1A1A1000000A1A100818181818100000000A1A1A1A1A1A10000A1A10000008181000000000000A1A1A1A1A1E0A1A1A1A1A1A1A1A1A1A1A100A1A1A1A1A1A1A1A1A1A1"},{"loadword":"","map":"A1A1A1A1A1818181818181E1E181818181818181A1A1A1A18181818181818181E181818181818181A1A181818142810000008181E1E1818181000000A1000081818100000000818181E1E18181000000A100000000000000000000818181E181818100000000000000000000000000008181E18181810000A181810000000000000000000000E10062000000A181818181000000A10000818181E18181000000A1818181810000000000008181E1E18181000000A1A181818100000000818181E1E1818181818181A1A1A1818181000081818181E181818181818181A1A1A1A18181818181818181E181818181818181","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"}]},{"func":"","x":17,"y":6,"steps":[{"lines":["","Ribbit.","",""],"action":"say","character":"charismatic frog"},{"lines":["","I thought you'd be more","charismatic.",""],"action":"say","character":"player"}]}]},{"loadword":"","map":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000A1A1A1A1A1A1600060A1A1A1A1A1A10000000000606060606060600060606060606060000000000060C00000000000000000000000C060000000000060000000000000000000000000006000000000006000000000000002000000000000600000000000600000000000000000000000000060000000000060C00000210000000000220000C060000000000060606060606060606060606060606000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","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"},{"flags":[],"label":"charismatic frog","gfx":"00000000000020202020202020202000000000005455555F47475555050055550000000000000000002820282028000054040404040404040405050505010000000000002A2A2A7A62622A2A2A002A2A000000000001050505050505050405012A20202020202020202020202000000000000000000000000015051505150000"}],"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"}], "brushes": [{"mask":"FFFFFFFFFFFFFFFF","gfx":"D5D5D5D5D5D5D5D5","flags":[]},{"mask":"00008F8F8F000000","gfx":"00000A0A0A000000","flags":[]},{"mask":"0000BFBFBFBF0000","gfx":"0000AAAAAAAA0000","flags":[]},{"mask":"0000BCBCBC000000","gfx":"0000141414000000","flags":[]},{"mask":"0000BCBCBC000000","gfx":"0000949494000000","flags":[]},{"mask":"0000000C0C000000","gfx":"0000000C0C000000","flags":[]},{"mask":"00000C1E1E0C0000","flags":[],"gfx":"0000000000000000"},{"mask":"3E7F7F7F7F7F7F3E","gfx":"3E7F7F7F7F7F7F3E","flags":[]}]} +{"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"},{"flags":[],"word":"","label":"","gfx":"000000002028381828282020202028000000000005151D191515040404041400"}],"levels":[{"loadword":"","objects":[{"y":8,"x":15,"advanced":false,"linkentity":"","func":"","name":"","linkword":"","steps":[{"character":"cat","lines":["I'm a cat.","","",""],"action":"say"},{"action":"say","character":"player","lines":["","Nice kitty!","",""]}]},{"x":5,"func":"","linkentity":"","y":8,"linkword":"","name":"","steps":[{"action":"say","character":"angryfish","lines":["","","Grr! Go away!",""]}]},{"x":13,"func":"","linkentity":"","y":4,"name":"","linkword":"","steps":[{"lines":["","Just another empty pot.","",""],"action":"say","character":"player"}]},{"x":12,"func":"","linkentity":"","y":4,"name":"","linkword":"","steps":[{"action":"disappear","character":"player","lines":["","","",""]},{"action":"say","character":"player","lines":["","Whoops, I broke it!","",""]}]},{"x":11,"func":"","linkentity":"","y":4,"linkword":"","name":"","steps":[{"lines":["","It's a plain old empty pot.","",""],"action":"say","character":"player"}]},{"x":14,"func":"","linkentity":"","y":4,"linkword":"","name":"","steps":[{"lines":["","Nothing special about these pots.","",""],"action":"say","character":"player"}]},{"x":15,"func":"","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"},{"condition":"has glasses","character":"snake","lines":["","There's a snake though.","",""],"action":"say"},{"condition":"has glasses","character":"glasses","lines":["","aaack!","",""],"action":"say"}]},{"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":"A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1000000A1A1A1A10000818181818181A1A1A10000000000A1A1A1000000818181628181A1A1A1000000000000A1A100000000818181818100A160600000000000000000000000000081000000A1000000000000000000C10000000000000000000060600000000000000000000000000000000000A1A1000081818100000000000000A1A100000000A1A10081818181810000000000A1A1A1A1000000A1A100818181818100000000A1A1A1A1A1A10000A1A10000008181000000000000A1A1A1A1A1E0A1A1A1A1A1A1A1A1A1A1A100A1A1A1A1A1A1A1A1A1A1","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":["","","",""]},{"flag":"has glasses","character":"player","lines":["","","",""],"rhs":{"label":"","value":65535},"action":"set-flag"}]},{"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"},{"action":"say","character":"glasses","lines":["Holy cow!!","","This \"old man\" is actually","an alien!!"],"condition":"has glasses"}]},{"func":"","x":20,"y":7,"steps":[{"position":1537,"character":"player","action":"warp","lines":["","","",""],"map":"map3"}]},{"func":"","x":10,"y":1,"steps":[{"position":2057,"character":"player","lines":["","","",""],"action":"warp","map":"map4"}]},{"func":"","x":16,"y":10,"steps":[{"action":"say","character":"charismatic frog","lines":["","Would you be my friend?","",""]},{"action":"say","character":"player","lines":["","OF COURSE!","",""]}]}]},{"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"},{"condition":"has scissors","character":"player","lines":["","Hey, I bet I could cut down this","tree with my cool time scissors!",""],"action":"say"},{"condition":"has scissors","character":"player","lines":["","","",""],"action":"disappear"},{"condition":"has scissors","character":"player","lines":["","Haha, awesome.","",""],"action":"say"},{"condition":"has scissors","flag":"has wood","action":"set-flag","lines":["","","",""],"rhs":{"label":"","value":65535},"character":"player"}]},{"func":"","x":15,"y":6,"steps":[{"character":"player","lines":["","If only there was some convenient","way to cross this ankle-deep","stream!"],"action":"say"},{"action":"say","character":"player","lines":["","Guess I'll just have to build a","raft and sail it across.",""],"condition":"has wood"},{"action":"disappear","character":"player","lines":["","","",""],"condition":"has wood"}]},{"func":"","x":6,"y":10,"steps":[{"lines":["","Badger badger badger badger","badger badger badger badger","badger badger badger badger"],"action":"say","character":"snake"},{"lines":["","A snake! A snake!","",""],"action":"say","character":"player"}]},{"func":"","x":17,"y":6,"steps":[{"action":"say","character":"charismatic frog","lines":["","Ribbit.","",""]},{"action":"say","character":"player","lines":["","I thought you'd be more","charismatic.",""]}]}],"tickword":"","moveword":"","map":"A1A1A1A1A1818181818181E1E181818181818181A1A1A1A18181818181818181E181818181818181A1A181818142810000008181E1E1818181000000A1000081818100000000818181E1E18181000000A100000000000000000000818181E181818100000000000000000000000000008181E18181810000A181810000000000000000000000E10062000000A181818181000000A10000818181E18181000000A1818181810000000000008181E1E18181000000A1A181818100000000818181E1E1818181818181A1A1A1818181000081818181E181818181818181A1A1A1A18181818181818181E181818181818181"},{"loadword":"","objects":[{"func":"","x":10,"y":6,"steps":[{"action":"say","character":"stick bob","lines":["","Would you like to hear a jig","and a reel?",""]},{"action":"say","character":"player","lines":["","Do you play the theremin?","",""]},{"action":"say","character":"stick bob","lines":["","I can play anything!","",""]}]},{"func":"","x":10,"y":10,"steps":[{"position":265,"character":"player","lines":["","","",""],"action":"warp","map":"map2"}]},{"func":"","x":13,"y":4,"steps":[{"action":"say","character":"player","lines":["","It's a fiddle. I promise.","I worked hard to draw it.",""]}]},{"func":"","x":7,"y":4,"steps":[{"action":"say","character":"player","lines":["","Scissors with a clock on them?","They're super sharp!",""]},{"action":"say","character":"player","lines":["","I'm sure they'll come in handy!","",""]},{"flag":"has scissors","action":"set-flag","lines":["","","",""],"rhs":{"label":"","value":65535},"character":"player"},{"action":"disappear","character":"player","lines":["","","",""]}]}],"tickword":"","moveword":"","map":"000000000000000000000000000000000000000000000000000000000000000000000000000000000000A1A1A1A1A1A1600060A1A1A1A1A1A10000000000606060606060600060606060606060000000000060C00000000000000000000000C060000000000060000000000000000000000000006000000000006000000000000002000000000000600000000000600000000000000000000000000060000000000060C00000210000000000220000C060000000000060606060606060606060606060606000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}],"flags":["has wood","has scissors","","has glasses"],"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"}],"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"},{"flags":[],"label":"charismatic frog","gfx":"00000000000020202020202020202000000000005455555F47475555050055550000000000000000002820282028000054040404040404040405050505010000000000002A2A2A7A62622A2A2A002A2A000000000001050505050505050405012A20202020202020202020202000000000000000000000000015051505150000"}],"brushes":[{"mask":"FFFFFFFFFFFFFFFF","gfx":"D5D5D5D5D5D5D5D5","flags":[]},{"mask":"00008F8F8F000000","gfx":"00000A0A0A000000","flags":[]},{"mask":"0000BFBFBFBF0000","gfx":"0000AAAAAAAA0000","flags":[]},{"mask":"0000BCBCBC000000","gfx":"0000141414000000","flags":[]},{"mask":"0000BCBCBC000000","gfx":"0000949494000000","flags":[]},{"mask":"0000000C0C000000","gfx":"0000000C0C000000","flags":[]},{"mask":"00000C1E1E0C0000","flags":[],"gfx":"0000000000000000"},{"mask":"3E7F7F7F7F7F7F3E","gfx":"3E7F7F7F7F7F7F3E","flags":[]}]} \ No newline at end of file diff --git a/editor/8bitsy.fnl b/editor/8bitsy.fnl index f1256c6..c04df16 100644 --- a/editor/8bitsy.fnl +++ b/editor/8bitsy.fnl @@ -30,8 +30,8 @@ (let [maps (icollect [imap _ (ipairs files.game.levels)] (.. :map imap)) map (or action.map (. maps 1)) y (+ y style.padding.y) - map (dropdown view [:warp :map i] map maps x y 100) - (position-string y) (textbox view [:warp :loc i] (string.format "%x" (or action.position 0)) (+ x 150) y 150) + map (dropdown view [:warp :map i] map maps x y (* 100 SCALE)) + (position-string y) (textbox view [:warp :loc i] (string.format "%x" (or action.position 0)) (+ x (* 150 SCALE)) y (* 150 SCALE)) position (or (tonumber position-string 16) action.position)] (set action.map map) (set action.position position) @@ -47,13 +47,13 @@ (let [y (+ y style.padding.y) x (renderer.draw_text style.font "Set " x y style.text) flag (or action.flag (. files.game.flags 1)) - flag (dropdown view [:set-flag :flag i] flag files.game.flags x y 100) - x (renderer.draw_text style.font " to " (+ x 100) y style.text) + flag (dropdown view [:set-flag :flag i] flag files.game.flags x y (* 100 SCALE)) + x (renderer.draw_text style.font " to " (+ x (* 100 SCALE)) y style.text) options (lume.concat [{:label "" :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)] + (rhs y) (dropdown view [:set-flag :rhs i] rhs options x y (* 100 SCALE))] (set action.flag flag) (set action.rhs rhs) y)) diff --git a/editor/imstate.fnl b/editor/imstate.fnl index e8ae68f..8192b0c 100644 --- a/editor/imstate.fnl +++ b/editor/imstate.fnl @@ -102,10 +102,10 @@ (values (button view label x y w h) (+ y h))) (fn checkbox [view name isset x y ?tag] - (love.graphics.rectangle (if isset :fill :line) x y 12 12) - (local xEnd (renderer.draw_text style.font name (+ x 16) y style.text)) + (love.graphics.rectangle (if isset :fill :line) x y (* 12 SCALE) (* 12 SCALE)) + (local xEnd (renderer.draw_text style.font name (+ x (* 16 SCALE)) y style.text)) (love.graphics.setColor 1 1 1 1) - (button view (or ?tag name) x y (- xEnd x) 12)) + (button view (or ?tag name) x y (- xEnd x) (* 12 SCALE))) (fn focused? [view tag] (= (make-tag tag) (-?> view.imstate.focus (. :tag)))) (fn focus [view tag x y w h opts] diff --git a/editor/mapedit.fnl b/editor/mapedit.fnl index 0e286f9..0c218b7 100644 --- a/editor/mapedit.fnl +++ b/editor/mapedit.fnl @@ -66,7 +66,7 @@ level-count (length files.game.levels) _ (do (for [i 1 level-count] (tset options i i)) (table.insert options :New)) - (ilevel yNext) (dropdown self :map-selector self.ilevel options (+ x 50) y 100)] + (ilevel yNext) (dropdown self :map-selector self.ilevel options (+ x (* 50 SCALE)) y (* 100 SCALE))] (when (not= ilevel self.ilevel) (set self.ilevel (if (= ilevel :New) (+ level-count 1) ilevel)) (self:load-level)) @@ -170,13 +170,13 @@ (var istep-to-delete nil) (when (not object.steps) (set object.steps [])) (each [istep step (ipairs object.steps)] - (when (textbutton self "X" (+ x 280) y) + (when (textbutton self "X" (+ x (* 280 SCALE)) 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) + (+ x (* 100 SCALE) style.padding.x) y (* 100 SCALE)) :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 (step.action y) (dropdown self [:code-action istep] (or step.action (. actions.actionlist 1)) actions.actionlist x y (* 100 SCALE))) + (set y (actions.edit step self x y (* 300 SCALE) istep)) (set y (+ y style.padding.y))) (when istep-to-delete (table.remove object.steps istep-to-delete)) (let [(do-new y) (textbutton self "+ New Step" x (+ y style.padding.y))] @@ -190,11 +190,11 @@ (not= object.func nil)))) (fn MapEditView.draw-object-advanced-editor [self object x y] - (let [(func y) (textfield self "Word" object.func x y 100 200) - (name y) (textfield self "Name" object.name x (+ y style.padding.y) 100 200) - (linkword y) (textfield self "Link word" object.linkword x (+ y style.padding.y) 100 200) + (let [(func y) (textfield self "Word" object.func x y (* 100 SCALE) (* 200 SCALE)) + (name y) (textfield self "Name" object.name x (+ y style.padding.y) (* 100 SCALE) (* 200 SCALE)) + (linkword y) (textfield self "Link word" object.linkword x (+ y style.padding.y) (* 100 SCALE) (* 200 SCALE)) (do-unlink y) (if object.link (textbutton self "Unlink" x (+ y style.padding.y)) (values false y)) - (linkentity y) (if object.link (values object.linkentity y) (textfield self "Link entity" object.linkentity x (+ y style.padding.y) 100 200))] + (linkentity y) (if object.link (values object.linkentity y) (textfield self "Link entity" object.linkentity x (+ y style.padding.y) (* 100 SCALE) (* 200 SCALE)))] (lume.extend object {: func : name : linkword : linkentity}) (when do-unlink (set object.link nil)) y)) @@ -204,10 +204,10 @@ y (if (advanced? object) (self:draw-object-advanced-editor object x y) (self:draw-object-code-editor object x y)) - new-flag-name (textbox self :new-flag-name self.new-flag-name x (+ y style.padding.y) 200) - (mk-new-flag y) (textbutton self "+ New Flag" (+ x 200 style.padding.x) (+ y style.padding.y)) - do-delete (textbutton self "Delete" x (+ y 40)) - (do-advanced y) (textbutton self (if (advanced? object) "Simple" "Advanced") (+ x 150) (+ y 40))] + new-flag-name (textbox self :new-flag-name self.new-flag-name x (+ y style.padding.y) (* 200 SCALE)) + (mk-new-flag y) (textbutton self "+ New Flag" (+ x (* 200 SCALE) style.padding.x) (+ y style.padding.y)) + do-delete (textbutton self "Delete" x (+ y (* style.padding.y 2))) + (do-advanced y) (textbutton self (if (advanced? object) "Simple" "Advanced") (+ x (* 150 SCALE)) (+ y (* style.padding.y 2)))] (set self.new-flag-name new-flag-name) (when mk-new-flag (when (= files.game.flags nil) @@ -237,14 +237,16 @@ (self:draw_background style.background) (self:draw_scrollbar) (local ytop y) + (local editor-on-side (> self.size.x (+ (* tilew mapw) (* 300 SCALE)))) (set y (+ y (self:draw-map-selector x y) style.padding.y)) (self:draw-map-editor x y) (set y (+ y (* tileh maph) style.padding.y)) - (set y (+ y (self:draw-tile-selector x y (- self.size.x (* style.padding.x 2))))) + (set y (+ y (self:draw-tile-selector x y (if editor-on-side (* tilew mapw) + (- self.size.x (* style.padding.x 2)))))) - (set (self.level.tickword y) (textfield self "Tick word" self.level.tickword x (+ y style.padding.y) 100 200)) - (set (self.level.moveword y) (textfield self "Move word" self.level.moveword x (+ y style.padding.y) 100 200)) - (set (self.level.loadword y) (textfield self "Load word" self.level.loadword x (+ y style.padding.y) 100 200)) + (set (self.level.tickword y) (textfield self "Tick word" self.level.tickword x (+ y style.padding.y) (* 100 SCALE) (* 200 SCALE))) + (set (self.level.moveword y) (textfield self "Move word" self.level.moveword x (+ y style.padding.y) (* 100 SCALE) (* 200 SCALE))) + (set (self.level.loadword y) (textfield self "Load word" self.level.loadword x (+ y style.padding.y) (* 100 SCALE) (* 200 SCALE))) (let [(checked y-new) (checkbox self "Edit objects" (= self.itile nil) x (+ y style.padding.y)) _ (when checked (set self.itile nil) @@ -261,11 +263,11 @@ (when checked (tset self.level levelflag (not (. self.level levelflag)))) (set y y-new))) (when self.iobject - (set y (math.max y (if (> self.size.x (+ (* tilew mapw) 300)) + (set y (math.max y (if editor-on-side (self:draw-object-editor (+ x (* tilew mapw) style.padding.x) ytop) (self:draw-object-editor x (+ y style.padding.y)))))) - (set self.scrollheight (- y (+ self.position.y style.padding.y (- self.scroll.y))))) + (set self.scrollheight (+ y (- self.position.y) self.scroll.y style.padding.y))) (fn MapEditView.get_name [self] (.. "Map " self.ilevel)) diff --git a/editor/tileedit.fnl b/editor/tileedit.fnl index 049d5bc..f274d42 100644 --- a/editor/tileedit.fnl +++ b/editor/tileedit.fnl @@ -74,16 +74,18 @@ (fn TileView.draw-tile-flag [self flagname x y] (local flags (-?> self.tilecache.tiles (. self.itile) (. :flags))) (local flagset (if flags (. flags flagname) false)) - (when (checkbox self flagname flagset x y) - (tset flags flagname (if flagset nil true)))) + (let [(checked yNew) (checkbox self flagname flagset x y)] + (when checked (tset flags flagname (if flagset nil true))) + yNew)) (fn TileView.draw-tile-flags [self x y] (local tile (-?> self.tilecache.tiles (. self.itile))) + (var y y) (when tile - (set tile.word (textfield self "Default word" tile.word x y 100 200)) - (set tile.label (textfield self "Label" tile.label x (+ y pixel-size 4) 100 200))) + (set (tile.word y) (textfield self "Default word" tile.word x (+ y style.padding.y) (* 100 SCALE) (* 200 SCALE))) + (set (tile.label y) (textfield self "Label" tile.label x (+ y style.padding.y) (* 100 SCALE) (* 200 SCALE)))) (each [iflag flagname (ipairs (tiles.flags))] - (self:draw-tile-flag flagname x (+ y (* (+ iflag 1) (+ pixel-size 4)))))) + (set y (self:draw-tile-flag flagname x (+ y style.padding.y))))) (fn TileView.update-tile [self newtile] (self.tilecache:update-tile self.itile newtile self.tilekey)) diff --git a/presentation/commands.fnl b/presentation/commands.fnl index 2446b9e..43b3785 100644 --- a/presentation/commands.fnl +++ b/presentation/commands.fnl @@ -2,11 +2,14 @@ (local core (require :core)) (local command (require :core.command)) (local keymap (require :core.keymap)) +(local style (require :core.style)) (local SlideshowView (require :presentation.engine)) (fn set-scale [multiplier] (set _G.SCALE (* (love.graphics.getDPIScale) multiplier)) - (util.hotswap :core.style)) + (util.hotswap :core.style) + (when (= multiplier 1) + (set style.code_font (renderer.font.load (.. EXEDIR "/data/fonts/monospace.ttf") 15)))) (command.add nil { "presentation:start" (fn [] diff --git a/presentation/pics/bsod.png b/presentation/pics/bsod.png new file mode 100644 index 0000000000000000000000000000000000000000..1ce057a03d357ef767c2a79ceba3ea7725f8f3a7 GIT binary patch literal 44656 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 o$R*~~Lc#rdA!q;liCyFEg