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 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user