Save some tokens in horrible, horrible ways. #13
@ -438,7 +438,9 @@ function level:spawn_exit()
|
|||||||
if (self:_mget(x,y)!=18) return
|
if (self:_mget(x,y)!=18) return
|
||||||
for nx=x-1,x+1 do
|
for nx=x-1,x+1 do
|
||||||
for ny=y-1,y+1 do
|
for ny=y-1,y+1 do
|
||||||
if nx<0 or ny<0 or nx>15 or ny>15 then
|
-- next check: is at least one of
|
||||||
|
-- nx or ny out of range [0, 15]?
|
||||||
|
if (nx | ny) & 0xFFF0 ~= 0 then
|
||||||
self._wins[_mix(nx,ny)]=true
|
self._wins[_mix(nx,ny)]=true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -478,16 +480,18 @@ function _mix(mx,my)
|
|||||||
return mx..","..my
|
return mx..","..my
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- crate spec:
|
||||||
|
-- "up" == 1
|
||||||
|
-- "right" == 2
|
||||||
|
-- "down" == 4
|
||||||
|
-- "left" == 8
|
||||||
|
--
|
||||||
|
-- +1+
|
||||||
|
-- 8 2
|
||||||
|
-- +4+
|
||||||
function level:_get_cratedef(s)
|
function level:_get_cratedef(s)
|
||||||
if (s<64 or s>=80) return nil
|
if (s<64 or s>=80) return
|
||||||
|
return s & 0x000F
|
||||||
local s2=s-64
|
|
||||||
return {
|
|
||||||
up=s2&1!=0,
|
|
||||||
right=s2&2!=0,
|
|
||||||
down=s2&4!=0,
|
|
||||||
left=s2&8!=0
|
|
||||||
}
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function level:get_latch(dx,dy,px,py)
|
function level:get_latch(dx,dy,px,py)
|
||||||
@ -498,12 +502,7 @@ function level:get_latch(dx,dy,px,py)
|
|||||||
local dx1,dy1=-sgn0(dx),-sgn0(dy)
|
local dx1,dy1=-sgn0(dx),-sgn0(dy)
|
||||||
|
|
||||||
if crate then
|
if crate then
|
||||||
if
|
if crate.def & dy1*dy1*(2.5+1.5*dy1)+dx1*dx1*(5-3*dx1) ~= 0 then
|
||||||
(crate.def.up and dy>0) or
|
|
||||||
(crate.def.down and dy<0) or
|
|
||||||
(crate.def.left and dx>0) or
|
|
||||||
(crate.def.right and dx<0)
|
|
||||||
then
|
|
||||||
return {
|
return {
|
||||||
el="crate",
|
el="crate",
|
||||||
dx=dx1,dy=dy1,
|
dx=dx1,dy=dy1,
|
||||||
@ -545,12 +544,12 @@ function level:can_move(
|
|||||||
if player.rope then
|
if player.rope then
|
||||||
local chk=false
|
local chk=false
|
||||||
local w,h=1.6,0.2
|
local w,h=1.6,0.2
|
||||||
if (dmx==0) w,h=0.2,1.6
|
if dmx==0 then
|
||||||
|
w,h=0.2,1.6
|
||||||
if (dmy==-1) rectx,recty=0.4,-0.8
|
else
|
||||||
if (dmy==1) rectx,recty=0.4,0.2
|
dmy = 0
|
||||||
if (dmx==-1) rectx,recty=-0.8,0.4
|
end
|
||||||
if (dmx==1) rectx,recty=0.2,0.4
|
rectx,recty=dmx*(0.4>>>dmx),dmy*(0.4>>>dmy)
|
||||||
|
|
||||||
if (player.rope:collide_mrect(mx0+rectx,my0+recty,w,h,exclude_src,exclude_dst)) return false
|
if (player.rope:collide_mrect(mx0+rectx,my0+recty,w,h,exclude_src,exclude_dst)) return false
|
||||||
end
|
end
|
||||||
@ -627,7 +626,7 @@ function player:update()
|
|||||||
end
|
end
|
||||||
|
|
||||||
if kbd:btn(4) then
|
if kbd:btn(4) then
|
||||||
if kbd:btnp(4) and self.rope!=nil then
|
if kbd:btnp(4) and self.rope then
|
||||||
self.rope:destroy()
|
self.rope:destroy()
|
||||||
kbd:release(4)
|
kbd:release(4)
|
||||||
end
|
end
|
||||||
@ -660,7 +659,7 @@ function player:update()
|
|||||||
|
|
||||||
self.todo={{
|
self.todo={{
|
||||||
update=function()
|
update=function()
|
||||||
return self.rope==nil or self.rope:latched()
|
return not self.rope or self.rope:latched()
|
||||||
end
|
end
|
||||||
}}
|
}}
|
||||||
elseif kbd:btnp(5) then
|
elseif kbd:btnp(5) then
|
||||||
@ -765,7 +764,7 @@ function player:draw()
|
|||||||
|
|
||||||
if self.rope then
|
if self.rope then
|
||||||
local rx_adj,ry_adj=self.rope:affected_src_xy(rx,ry)
|
local rx_adj,ry_adj=self.rope:affected_src_xy(rx,ry)
|
||||||
if rx_adj!=nil then
|
if rx_adj then
|
||||||
local drx,dry=rx_adj-rx,ry_adj-ry
|
local drx,dry=rx_adj-rx,ry_adj-ry
|
||||||
rx,ry=rx+drx,ry+dry
|
rx,ry=rx+drx,ry+dry
|
||||||
px,py=px+drx,py+dry
|
px,py=px+drx,py+dry
|
||||||
@ -833,10 +832,7 @@ function rope:update()
|
|||||||
elseif self.state.name=="latched" then
|
elseif self.state.name=="latched" then
|
||||||
if (self.latch==nil) wrongbleep:bleep(5) self:destroy() return
|
if (self.latch==nil) wrongbleep:bleep(5) self:destroy() return
|
||||||
|
|
||||||
if
|
if self.latch and self.latch.rec then
|
||||||
self.latch!=nil and
|
|
||||||
self.latch.rec!=nil
|
|
||||||
then
|
|
||||||
self:drag_src(
|
self:drag_src(
|
||||||
self.latch.rec.mx+0.5+self.latch.ax_offset,
|
self.latch.rec.mx+0.5+self.latch.ax_offset,
|
||||||
self.latch.rec.my+0.5+self.latch.ay_offset
|
self.latch.rec.my+0.5+self.latch.ay_offset
|
||||||
@ -898,11 +894,10 @@ end
|
|||||||
|
|
||||||
function rope:draw(artificial_px,artificial_py)
|
function rope:draw(artificial_px,artificial_py)
|
||||||
local points,highlight=self:_tug(true)
|
local points,highlight=self:_tug(true)
|
||||||
if (self.state.name=="done") return
|
local n,perc_to_show,from_end = self.state.name,1.0,false
|
||||||
local perc_to_show=1.0
|
if (n=="done") return
|
||||||
local from_end=false
|
if (n=="cast") perc_to_show=self.state.frame/2
|
||||||
if (self.state.name=="cast") perc_to_show=self.state.frame/2
|
if (n=="destroy") perc_to_show=(1.0-self.state.frame/8)^2
|
||||||
if (self.state.name=="destroy") perc_to_show=(1.0-self.state.frame/8)^2
|
|
||||||
if (self.state.reelin) from_end=true
|
if (self.state.reelin) from_end=true
|
||||||
|
|
||||||
points[#points]={x=artificial_px,y=artificial_py}
|
points[#points]={x=artificial_px,y=artificial_py}
|
||||||
@ -1191,7 +1186,7 @@ function rope:be_pushed_by(anchor,ax_old,ay_old)
|
|||||||
local ax_new,ay_new=anchor.ax,anchor.ay
|
local ax_new,ay_new=anchor.ax,anchor.ay
|
||||||
while true do
|
while true do
|
||||||
n1=n0.next
|
n1=n0.next
|
||||||
if (n1==nil) return
|
if (not n1) return
|
||||||
|
|
||||||
local nx0,ny0=n0.ax,n0.ay
|
local nx0,ny0=n0.ax,n0.ay
|
||||||
local nx1,ny1=n1.ax,n1.ay
|
local nx1,ny1=n1.ax,n1.ay
|
||||||
@ -1318,7 +1313,7 @@ function _stepfrom(x0,x1)
|
|||||||
local done=false
|
local done=false
|
||||||
if x0==x1 then
|
if x0==x1 then
|
||||||
return function()
|
return function()
|
||||||
if (done) return nil
|
if (done) return
|
||||||
done=true return x0
|
done=true return x0
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user