diff --git a/chameleonic.p8 b/chameleonic.p8 index ec2a908..03c6dec 100644 --- a/chameleonic.p8 +++ b/chameleonic.p8 @@ -633,10 +633,12 @@ end ropecheck=split"-0.6,0.4,0.4" +-- argument "o" is a rope operation: +-- array of [mx0,my0,dmx,dmy] function level:can_move( - is_player, - mx0,my0,dmx,dmy,exclude_src,exclude_dst + is_player,o,exclude_src,exclude_dst ) + local mx0,my0,dmx,dmy=unpack(o) local mx1,my1=mx0+dmx,my0+dmy if (is_player and self:win_at(mx1,my1)) return true if (is_player and self:get_open_pit(mx1,my1)) return wrongbleep:adequately_warned() @@ -652,7 +654,8 @@ function level:can_move( return true end --- argument is array-like: mx0,my0,dmx,dmy +-- argument is a rope operation: +-- array of [mx0,my0,dmx,dmy] function level:tug_crate(t) local mx0,my0,dmx,dmy=unpack(t) local mxy0=_mix{mx0,my0} @@ -736,7 +739,7 @@ function player:update() else local x,y=self.x,self.y local function try_move(dx,dy,f) - if level:can_move(true,x,y,dx,dy,0,2) then + if level:can_move(true,{x,y,dx,dy},0,2) then self.todo=f self.cooldown=3 local t=f[#f] @@ -1604,7 +1607,7 @@ function rope:_tug(hypothetically) if not invalid_move then local mv = {mx0,my0,dmx,dmy} - if level:can_move(false,mx0,my0,dmx,dmy,1,0) then + if level:can_move(false,mv,1,0) then if (hypothetically) return ancs,0,{mv},blocks level:tug_crate(mv) @@ -1693,7 +1696,7 @@ function rope:_calc_push( else local crate=level:get_crate(mx,my) if crate then - if not level:can_move(false,mx,my,dmx,dmy,0,0) then + if not level:can_move(false,o,0,0) then add(blocked,o) break end