forked from pyrex/chameleonic
		
	main #21
| @@ -994,7 +994,7 @@ function rope:affected_src_xy(artificial_px,artificial_py) | |||||||
| end | end | ||||||
|  |  | ||||||
| function rope:draw(artificial_px,artificial_py) | function rope:draw(artificial_px,artificial_py) | ||||||
|  local points,highlight,hypo_ops=self:_tug(true) |  local points,highlight,hypo_ops,hypo_blocks=self:_tug(true) | ||||||
|  local n,perc_to_show,from_end = self.state.name,1.0 |  local n,perc_to_show,from_end = self.state.name,1.0 | ||||||
|  if (n=="done") return |  if (n=="done") return | ||||||
|  if (n=="cast") perc_to_show=self.state.frame/2 |  if (n=="cast") perc_to_show=self.state.frame/2 | ||||||
| @@ -1066,11 +1066,17 @@ function rope:draw(artificial_px,artificial_py) | |||||||
|  |  | ||||||
|  -- hypothetical |  -- hypothetical | ||||||
|  local time=t()-self.flicker_t |  local time=t()-self.flicker_t | ||||||
|  if n=="latched" and time>0 and time%0.5>0.25 and not level:busy() then |  if n=="latched" and time>0 and not level:busy() then | ||||||
|   for o in all(hypo_ops) do |   if time%0.5>0.25 then | ||||||
|    local mx0,my0,dmx,dmy=unpack(o) |    for o in all(hypo_ops) do | ||||||
|    local px1,py1=(mx0+dmx)*8,(my0+dmy)*8 |     local mx0,my0,dmx,dmy=unpack(o) | ||||||
|    spr(14,px1,py1) |     local px1,py1=(mx0+dmx)*8,(my0+dmy)*8 | ||||||
|  |     spr(14,px1,py1) | ||||||
|  |    end | ||||||
|  |   end | ||||||
|  |   for o in all(hypo_blocks) do | ||||||
|  |    local x,y,dx,dy=unpack(o) | ||||||
|  |    spr(53,8*x+4*dx,8*y+4*dy,1,1,time%0.5>0.25) | ||||||
|   end |   end | ||||||
|  end |  end | ||||||
|  |  | ||||||
| @@ -1531,20 +1537,23 @@ function rope:_tug(hypothetically) | |||||||
|  local ancs=self:_anchors_simplified() |  local ancs=self:_anchors_simplified() | ||||||
|  local touched={} |  local touched={} | ||||||
|  |  | ||||||
|  |  local blocks = {} | ||||||
|  for i=#ancs-1,2,-1 do |  for i=#ancs-1,2,-1 do | ||||||
|   local ops_before_trash=self:_calc_push(ancs[i+1],ancs[i],ancs[i-1],ancs[i-2]) |   local ops_before_trash,blocks_before_trash=self:_calc_push(ancs[i+1],ancs[i],ancs[i-1],ancs[i-2]) | ||||||
|   local ops_to_do,corners={} |   local ops_to_do,corners={} | ||||||
|  |   for b in all(blocks_before_trash) do add(blocks, b) end | ||||||
|   if #ops_before_trash>0 then  |   if #ops_before_trash>0 then  | ||||||
|    ops_to_do=ops_before_trash  |    ops_to_do=ops_before_trash | ||||||
|   else  |   else  | ||||||
|    local ops_after_trash=self:_calc_push(ancs[i-2],ancs[i-1],ancs[i],ancs[i+1]) |    local ops_after_trash,blocks_after_trash=self:_calc_push(ancs[i-2],ancs[i-1],ancs[i],ancs[i+1]) | ||||||
|    ops_to_do=ops_after_trash |    ops_to_do=ops_after_trash | ||||||
|  |    for b in all(blocks_after_trash) do add(blocks,b) end | ||||||
|   end |   end | ||||||
|  |  | ||||||
|   local ops=ops_to_do |   local ops=ops_to_do | ||||||
|  |  | ||||||
|   if #ops>0 then |   if #ops>0 then | ||||||
|    if (hypothetically) return ancs,i-1,ops |    if (hypothetically) return ancs,i-1,ops,blocks | ||||||
|  |  | ||||||
|    for o in all(ops) do level:tug_crate(unpack(o)) end |    for o in all(ops) do level:tug_crate(unpack(o)) end | ||||||
|    return true |    return true | ||||||
| @@ -1553,7 +1562,7 @@ function rope:_tug(hypothetically) | |||||||
|  |  | ||||||
|  local latch=self.latch |  local latch=self.latch | ||||||
|  if latch and latch.el=="eyehook" then |  if latch and latch.el=="eyehook" then | ||||||
|   if (hypothetically) return ancs,0,{} |   if (hypothetically) return ancs,0,{},blocks | ||||||
|   player.todo={{ |   player.todo={{ | ||||||
|    update=function(s)  |    update=function(s)  | ||||||
|     if not s.rope or s.rope:done() then |     if not s.rope or s.rope:done() then | ||||||
| @@ -1594,17 +1603,19 @@ function rope:_tug(hypothetically) | |||||||
|    invalid_move=true |    invalid_move=true | ||||||
|   end |   end | ||||||
|    |    | ||||||
|   if not invalid_move and |   if not invalid_move then | ||||||
|    level:can_move(false,mx0,my0,dmx,dmy,1,0) |    if level:can_move(false,mx0,my0,dmx,dmy,1,0) then | ||||||
|   then |     if (hypothetically) return ancs,0,{{mx0,my0,dmx,dmy}},blocks | ||||||
|    if (hypothetically) return ancs,0,{{mx0,my0,dmx,dmy}} |  | ||||||
|  |  | ||||||
|    level:tug_crate(mx0,my0,dmx,dmy)  |     level:tug_crate(mx0,my0,dmx,dmy)  | ||||||
|    return true |     return true | ||||||
|  |    else | ||||||
|  |     add(blocks, {mx0,my0,dmx,dmy}) | ||||||
|  |    end | ||||||
|   end |   end | ||||||
|  end |  end | ||||||
|  |  | ||||||
|  if (hypothetically) return ancs |  if (hypothetically) return ancs,0,{},blocks | ||||||
|  return  |  return  | ||||||
| end | end | ||||||
|  |  | ||||||
| @@ -1674,7 +1685,7 @@ function rope:_calc_push( | |||||||
|   end |   end | ||||||
|  end |  end | ||||||
|  |  | ||||||
|  local ops2={} |  local ops2,blocked={},{} | ||||||
|  for o in all(ops) do |  for o in all(ops) do | ||||||
|   local mx,my,dmx,dmy=unpack(o) |   local mx,my,dmx,dmy=unpack(o) | ||||||
|   if not level:mcoll(mx,my) then |   if not level:mcoll(mx,my) then | ||||||
| @@ -1683,6 +1694,7 @@ function rope:_calc_push( | |||||||
|    local crate=level:get_crate(mx,my) |    local crate=level:get_crate(mx,my) | ||||||
|    if crate then |    if crate then | ||||||
|     if not level:can_move(false,mx,my,dmx,dmy,0,0) then |     if not level:can_move(false,mx,my,dmx,dmy,0,0) then | ||||||
|  |      add(blocked,o) | ||||||
|      break |      break | ||||||
|     end |     end | ||||||
|    else |    else | ||||||
| @@ -1691,7 +1703,7 @@ function rope:_calc_push( | |||||||
|    add(ops2,o) |    add(ops2,o) | ||||||
|   end |   end | ||||||
|  end |  end | ||||||
|  return ops2 |  return ops2,blocked | ||||||
| end | end | ||||||
|  |  | ||||||
| function rope:_anchors_simplified() | function rope:_anchors_simplified() | ||||||
| @@ -1973,10 +1985,10 @@ eeee0000cc04405500444400efeeee5e11111111e5eeeefeeeeeeeeeeeeeeeeeffffffffffffffff | |||||||
| 000aa111991111103bbbbbb3eeeeeeeeeeeeeeeeeeeeeeeeff1ff1ffffffffffffffffff00000000000000000000000000000000000000000000000000000000 | 000aa111991111103bbbbbb3eeeeeeeeeeeeeeeeeeeeeeeeff1ff1ffffffffffffffffff00000000000000000000000000000000000000000000000000000000 | ||||||
| 0000000099100000f765000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111999999111111111 | 0000000099100000f765000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111999999111111111 | ||||||
| 00000000990000007700000000000000000000000000000000000000000000000000000000000000000000000000000019911991999999911999999119999999 | 00000000990000007700000000000000000000000000000000000000000000000000000000000000000000000000000019911991999999911999999119999999 | ||||||
| 00000000990000006060000000000000000000000000000000000000000000000000000000000000000000000000000019977991999999911999999119999999 | 00000000990000006060000000000000000bc0000090020000000000000000000000000000000000000000000000000019977991999999911999999119999999 | ||||||
| 00000000090000005005000000000000000000000000000000000000000000000000000000000000000000000000000019911991999117111991199111711999 | 00000000090000005005000000bbcc00000bc0000009200000000000000000000000000000000000000000000000000019911991999117111991199111711999 | ||||||
| 00000000aa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000019911991999117111991199111711999 | 00000000aa0000000000000000ccbb00000cb0000002900000000000000000000000000000000000000000000000000019911991999117111991199111711999 | ||||||
| 0000000077a000000000000000000000000000000000000000000000000000000000000000000000000000000000000019999991999999911997799119999999 | 0000000077a000000000000000000000000cb0000020090000000000000000000000000000000000000000000000000019999991999999911997799119999999 | ||||||
| 00000007777a00000000000000000000000000000000000000000000000000000000000000000000000000000000000019999991999999911991199119999999 | 00000007777a00000000000000000000000000000000000000000000000000000000000000000000000000000000000019999991999999911991199119999999 | ||||||
| 00044444444444000000000000000000000000000000000000000000000000000000000000000000000000000000000019999991111111111111111111111111 | 00044444444444000000000000000000000000000000000000000000000000000000000000000000000000000000000019999991111111111111111111111111 | ||||||
| 44444444444004444444444444400444444444444440044444444444444004444444444444400444444444444440044444444444444004444444444444400444 | 44444444444004444444444444400444444444444440044444444444444004444444444444400444444444444440044444444444444004444444444444400444 | ||||||
| @@ -2206,7 +2218,7 @@ __label__ | |||||||
| 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 | 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 | ||||||
|  |  | ||||||
| __gff__ | __gff__ | ||||||
| 000000c0c0c0c0c0c0c0c0c0c0c00000000000c0c0c0c0c0c0c0c0c0202020200040c0c0c0c0c0c0c008080800000000404000000808080808080808c0c0c0c000000000080808080808080800000008000000000808080808080808000000000008080808080808080808080000000000080808080808080808080800000000 | 000000c0c0c0c0c0c0c0c0c0c0c00000000000c0c0c0c0c0c0c0c0c0202020200040c0c0c0c0c0c0c008080800000000404000000000080808080808c0c0c0c000000000080808080808080800000008000000000808080808080808000000000008080808080808080808080000000000080808080808080808080800000000 | ||||||
| 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | ||||||
| __map__ | __map__ | ||||||
| 0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d1203040404050d0d0d0d010d0d0d0d0d0d0d0d0d0d0d0d0d0d120d0d0d0d0d0d0d0d0d0d0d0d0d03043e0a040404050d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d | 0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d1203040404050d0d0d0d010d0d0d0d0d0d0d0d0d0d0d0d0d0d120d0d0d0d0d0d0d0d0d0d0d0d0d03043e0a040404050d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user