diff --git a/vacuum_gambit.p8 b/vacuum_gambit.p8 index 70b9ac1..2454f10 100644 --- a/vacuum_gambit.p8 +++ b/vacuum_gambit.p8 @@ -61,11 +61,11 @@ end -- call f on everything on list -- and return a new list of --- items for which f was false. -function stripped(list, f) +-- items for which f was true. +function filtered(list, f) local ret, n = {}, 0 for v in all(list) do - if not f(v) then + if f(v) then n += 1 ret[n] = v end @@ -75,25 +75,25 @@ end -- call :move on everything on -- src and dump everything --- for which it returned false +-- for which it returned true -- onto dest. function appendmove(dest, src) local n = #dest for v in all(src) do - if not v:move() then + if v:move() then n += 1 dest[n] = v end end end --- like stripped, but calls +-- like filtered, but calls -- :move on stuff in the list -- instead of taking a func arg. -function stripmoved(list) +function filtermoved(list) local ret, n = {}, 0 for v in all(list) do - if not v:move() then + if v:move() then n += 1 ret[n] = v end @@ -196,11 +196,11 @@ function updategame() current_wave = flotilla.new() current_wave:load(rnd() > 0.5 and 7 or 0, 0, min(ones(waves_complete)\2, 4)) end - events = stripmoved(events) + events = filtermoved(events) appendmove(events, new_events) new_events = {} - intangibles_bg = stripmoved(intangibles_bg) - eships = stripmoved(eships) + intangibles_bg = filtermoved(intangibles_bg) + eships = filtermoved(eships) -- eship collider will be used -- both for pship and pbullets. @@ -213,25 +213,26 @@ function updategame() ps:hitship(es) es:hitship(ps) end - ebullets = stripped(ebullets, function(eb) - if (eb:move()) return true - if (not collides(pbox, hurtbox(eb))) return + ebullets = filtered(ebullets, function(eb) + if (not eb:move()) return + if (not collides(pbox, hurtbox(eb))) return true ps:hitbullet(eb) - return eb:hitship(ps) + return not eb:hitship(ps) end) else - ebullets=stripmoved(ebullets) + ebullets=filtermoved(ebullets) end - pbullets = stripped(pbullets, function(pb) - if (pb:move()) return true + pbullets = filtered(pbullets, function(pb) + if (not pb:move()) return for es in eship_collider:iterate_collisions(hurtbox(pb)) do es:hitbullet(pb) - if (pb:hitship(es)) return true + if (pb:hitship(es)) return end + return true end) - intangibles_fg = stripmoved(intangibles_fg) + intangibles_fg = filtermoved(intangibles_fg) if waves_complete == 32767 and #eships == 0 and #ebullets == 0 and #events == 0 then game_state = win @@ -535,7 +536,7 @@ function ship_m:constrain(p, dp, pmin, pmax, want) end function ship_m:move() - if (self.dead) return true; + if (self.dead) return; self:refresh_shield() local dx, dy, shoot_spec1, shoot_spec2 = self:act() local sg, xm, ym = self.special_guns, self.xmomentum, self.ymomentum @@ -555,7 +556,7 @@ function ship_m:move() self.xmomentum = xm self.ymomentum = ym - return false + return true end function ship_m:draw() @@ -774,7 +775,7 @@ end function bullet_base:move() local x,y = self.x + self.dx, self.y+self.dy self.x,self.y=x,y - return (y>128) or (y < -(self.height<<3)) or (x > 128) or (x < -(self.width<<3)) + return (y<=128) and (y >= -(self.height<<3)) and (x <= 128) and (x >= -(self.width<<3)) end function bullet_base:draw() @@ -1573,13 +1574,13 @@ blip_fx = mknew{ } function blip_fx:move() - if (self.cancel) return true + if (self.cancel) return self.frames -= 1 if self.frames < 0 then self.obj.fx_pal = nil - return true + return end - return false + return true end function blip_fx:abort() @@ -1624,11 +1625,12 @@ spark_particle=mknew{} function spark_particle:move() if (rnd(4) < 1) self.sidx += 1 - if (self.sidx > #self.sprs) return true + if (self.sidx > #self.sprs) return self.x += self.dx self.y += self.dy self.dx -= mid(0.05,-0.05, self.dx) self.dy -= mid(0.05,-0.05, self.dy) + return true end function spark_particle:draw() pset(self.x,self.y,self.sprs[self.sidx])