pico-8 cartridge // http://www.pico-8.com version 41 __lua__ -- vacuum gambit automatic brake test -- by kistaro windrider function usplit(str) return unpack(split(str)) end function csv(s) local ret = split(s, "\n") for i, v in ipairs(ret) do ret[i] = type(v) == "string" and split(v) or { v } end return ret end -- generate standard "overlay" -- constructor for type tt. -- if more is defined, generated -- new calls more(ret) after -- ret is definitely not nil -- before calling setmetatable. -- use to initialize mutables. -- -- if there was a previous new, -- it is invoked on the new -- object *after* more, because -- this works better with the -- `more` impls i use. function mknew(tt, more) local mt, oldnew = { __index = tt }, tt.new tt.new = function(ret) if (not ret) ret = {} if (more) more(ret) if (oldnew) oldnew(ret) setmetatable(ret, mt) return ret end end function _init() pal(1,129,1) the_ship = ship.new() slomo = 0 sloc = 0 reroll() end function reroll() the_ship:reroll() end function _update60() if (btnp(4)) reroll() slomo += btnp(2) and -1 or btnp(3) and 1 or 0 slomo = (slomo < 0) and 0 or (slomo > 60) and 60 or slomo sloc += 1 if sloc > slomo then the_ship:update() sloc=0 end end function _draw() cls(1) the_ship:draw() end -->8 -- ship ship = { maxspd=4, thrust=0.25, drag=0.0625, y=32, } mknew(ship) function ship:reroll() self.x=rnd(128) self.dx=rnd(2*self.maxspd)-self.maxspd end function ship:draw() if self.x < -7 then spr(2, 0, self.y-7) spr(2, 0, self.y+8) elseif self.x > 127 then spr(2, 120, self.y-7, 1, 1, true) spr(2, 120, self.y+8, 1, 1, true) else spr(1,self.x,self.y) end end function ship:update() local t = btn(0) and -1 or btn(1) and 1 or 0 t *= self.thrust t = constrain(self, t) local s,lim=self.dx+t,self.maxspd local sg = sgn(s) s -= sg*self.drag if (sgn(s) != sg) s=0 if (abs(s)>lim) s=sg*lim self.x += s self.dx = s self:add_sparks(t) end function ship:add_sparks(t) end -->8 -- constraints function constrain(s, want) return want end -->8 -- fx -- todo: spark ring buffer __gfx__ 00000000800000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000006666000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000067777600800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000675555758008888000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000675000750800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000067777500080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000005555000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000