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