mmbshmup/the_parser.p8

62 lines
1.3 KiB
Plaintext
Raw Normal View History

Squash level_parser into main: parse levels in CSV commit b91ebeb77533cfab26dc28ae2e94bfb9f5d92aab Author: Kistaro Windrider <kistaro@gmail.com> Date: Wed Dec 20 13:33:00 2023 -0800 fix boss it works now except for a square being drawn in the shield. good enough commit ab687f8f6d501a5b46043830482a6f84cc418aca Author: Kistaro Windrider <kistaro@gmail.com> Date: Wed Dec 20 13:23:29 2023 -0800 adjust spawning now it runs for a little tiny bit! commit bef95df6a132f36ccd0f82a4b22c51fffad201bd Author: Kistaro Windrider <kistaro@gmail.com> Date: Wed Dec 20 13:18:20 2023 -0800 typo commit 24435a3c1524d92f1d6c5ac0cf195592ba321d28 Author: Kistaro Windrider <kistaro@gmail.com> Date: Wed Dec 20 13:18:01 2023 -0800 move guns before ships commit 0c3a36f1fddcafa8b515eb98e6d9b1dde861375c Author: Kistaro Windrider <kistaro@gmail.com> Date: Wed Dec 20 13:15:34 2023 -0800 defer zap_gun creation until it exists commit a39c419e5fadfc90866d16c3007898da601cbda2 Author: Kistaro Windrider <kistaro@gmail.com> Date: Wed Dec 20 13:13:51 2023 -0800 fix mknew commit 9ef762268f3a9405fd06bf46f6f981781bf3566f Author: Kistaro Windrider <kistaro@gmail.com> Date: Wed Dec 20 13:04:13 2023 -0800 many assorted syntax errors commit e50f516b110d3d51d3a9adfa7f471b802ec9b801 Author: Kistaro Windrider <kistaro@gmail.com> Date: Wed Dec 20 12:00:34 2023 -0800 allow strings when spawning guns commit f9e28fa0e280aa0a03dc3c53218699de609fc221 Author: Kistaro Windrider <kistaro@gmail.com> Date: Wed Dec 20 11:59:20 2023 -0800 fix missing paren commit 38a054dec144c672ae58a4fe24ad325685953fcc Author: Kistaro Windrider <kistaro@gmail.com> Date: Wed Dec 20 11:48:08 2023 -0800 candidate conversion to csv for level format commit fd391ff3bc70276a2852f738bb9492eb5968d900 Author: Kistaro Windrider <kistaro@gmail.com> Date: Wed Dec 20 11:40:11 2023 -0800 use _ENV to get rid of level_events and spawns commit fbd9f97429533684a7b0357855d74c7b23eb6bb5 Author: Kistaro Windrider <kistaro@gmail.com> Date: Wed Dec 20 11:33:59 2023 -0800 maybe fix the level parser commit 2a61e8b5d6aba26cc6ab44c602bab867ac2bb9ad Author: Kistaro Windrider <kistaro@gmail.com> Date: Sun Oct 15 21:09:12 2023 -0700 partial conversion to CSV-based levels, does not run yet commit 4ccbe1dc3541d7317b9871c420c2dfadd36da73c Author: Kistaro Windrider <kistaro@gmail.com> Date: Fri Oct 13 01:02:43 2023 -0700 okay honestly this all can and should just be CSVs commit b536d2c9875b34300dd1e7c9f11345fd89f603df Author: Kistaro Windrider <kistaro@gmail.com> Date: Sun Oct 8 00:41:24 2023 -0700 base for representing a level as a string
2023-12-20 22:09:07 +00:00
pico-8 cartridge // http://www.pico-8.com
version 41
__lua__
-- the parser
parser = {}
mknew(parser)
-- calls parse_into with a nop
-- emit function.
function parser:parse(str)
self:parse_into(str, function() end)
end
-- read a file of commands and
-- execute them, emitting the
-- results from each call into
-- `emit` as a table per row.
--
-- a "command" is a method on
-- self. a row alternates
-- commands with args. when
-- calling a command, it also
-- gets a table of previous
-- results as the first arg.
-- args are split on ','.
function parser:parse_into(str, emit)
for row in all(split(str, "\n")) do
local prev = {}
local sectors = split(row, ":")
for i=1,#sectors,2 do
local x = self[sectors[i]](self, prev, usplit(sectors[i+1]))
if (x) add(prev, x)
end
emit(prev)
end
end
-- saves prev[sel] as self.name.
-- if sel is unspecified, saves
-- all of prev (as a table).
function parser:saveas(prev, name, sel)
self[name] = sel and prev[sel] or prev
end
-- returns its args, ignoring
-- prev. Used to stuff things
-- into prev. args are packed
-- if there's multiple.
function parser:val(_, ...)
local ret := pack(...)
if (#ret == 1) return ret[1]
return ret
end
function parser:bind(_, fn, ...)
local f = self[fn]
return function()
f(...)
end
end