forked from pyrex/chameleonic
		
	main #21
| @@ -319,7 +319,6 @@ function level:advance() | |||||||
| end | end | ||||||
|  |  | ||||||
| normpal = {[1]=0,[8]=0,[14]=0} | normpal = {[1]=0,[8]=0,[14]=0} | ||||||
| pitpal = {[8]=0,[13]=3,[4]=3,[7]=3} |  | ||||||
| function level:draw() | function level:draw() | ||||||
|  cls(5) |  cls(5) | ||||||
|  fillp() |  fillp() | ||||||
| @@ -336,11 +335,7 @@ function level:draw() | |||||||
|  |  | ||||||
|   spr(pit.s,px,py) |   spr(pit.s,px,py) | ||||||
|   if pit.full then |   if pit.full then | ||||||
|    pal(pitpal) |    spr(15,pit.px,pit.py) | ||||||
|    palt(0,false) |  | ||||||
|    spr(79,pit.px,pit.py) |  | ||||||
|    pal() |  | ||||||
|    pal(normpal) |  | ||||||
|   end |   end | ||||||
|   palt(8,true) |   palt(8,true) | ||||||
|   spr(pit.s,px,py) |   spr(pit.s,px,py) | ||||||
| @@ -885,6 +880,7 @@ function rope:new( | |||||||
|   id=0, |   id=0, | ||||||
|   state={name="cast",frame=0}, |   state={name="cast",frame=0}, | ||||||
|   latch=latch, |   latch=latch, | ||||||
|  |   flicker_t=t(), | ||||||
|  } |  } | ||||||
|  r.src=src |  r.src=src | ||||||
|  r.dst=dst |  r.dst=dst | ||||||
| @@ -970,7 +966,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=self:_tug(true) |  local points,highlight,hypo_ops=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 | ||||||
| @@ -1040,6 +1036,16 @@ function rope:draw(artificial_px,artificial_py) | |||||||
|   color() |   color() | ||||||
|  end |  end | ||||||
|  |  | ||||||
|  |  -- hypothetical | ||||||
|  |  local time=t()-self.flicker_t | ||||||
|  |  if n=="latched" and time>0 and time%0.5>0.25 and not level:busy() 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 | ||||||
|  |  | ||||||
|  -- debug |  -- debug | ||||||
|  --[[ |  --[[ | ||||||
|  local n1=self.src |  local n1=self.src | ||||||
| @@ -1486,7 +1492,9 @@ end | |||||||
|  |  | ||||||
| function rope:tug() | function rope:tug() | ||||||
|  if (not self:latched()) return |  if (not self:latched()) return | ||||||
|  return self:_tug() |  local success=self:_tug() | ||||||
|  |  if (success) self.flicker_t=t() | ||||||
|  |  return success | ||||||
| end | end | ||||||
|  |  | ||||||
| function rope:_tug(hypothetically) | function rope:_tug(hypothetically) | ||||||
| @@ -1506,19 +1514,16 @@ function rope:_tug(hypothetically) | |||||||
|   local ops=ops_to_do |   local ops=ops_to_do | ||||||
|  |  | ||||||
|   if #ops>0 then |   if #ops>0 then | ||||||
|    if (hypothetically) return ancs,i-1 |    if (hypothetically) return ancs,i-1,ops | ||||||
|  |  | ||||||
|    local dmx,dmy=ops[1].dmx,ops[1].dmy |    for o in all(ops) do level:tug_crate(unpack(o)) end | ||||||
|    for o in all(ops) do |  | ||||||
|     level:tug_crate(o.mx,o.my,o.dmx,o.dmy) |  | ||||||
|    end |  | ||||||
|    return true |    return true | ||||||
|   end |   end | ||||||
|  end |  end | ||||||
|  |  | ||||||
|  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,{} | ||||||
|   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 | ||||||
| @@ -1562,7 +1567,7 @@ function rope:_tug(hypothetically) | |||||||
|   if not invalid_move and |   if not invalid_move and | ||||||
|    level:can_move(false,mx0,my0,dmx,dmy,1,0) |    level:can_move(false,mx0,my0,dmx,dmy,1,0) | ||||||
|   then |   then | ||||||
|    if (hypothetically) return ancs,0 |    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 | ||||||
| @@ -1608,7 +1613,7 @@ function rope:_calc_push( | |||||||
|   end |   end | ||||||
|    |    | ||||||
|   for my=my0,my1,smy do |   for my=my0,my1,smy do | ||||||
|    add(ops,{mx=mx,my=my,dmx=dmx,dmy=0}) |    add(ops,{mx,my,dmx,0}) | ||||||
|   end |   end | ||||||
|  end |  end | ||||||
|   |   | ||||||
| @@ -1635,18 +1640,19 @@ function rope:_calc_push( | |||||||
|   end |   end | ||||||
|    |    | ||||||
|   for mx=mx0,mx1,smx do |   for mx=mx0,mx1,smx do | ||||||
|    add(ops,{mx=mx,my=my,dmx=0,dmy=dmy}) |    add(ops,{mx,my,0,dmy}) | ||||||
|   end |   end | ||||||
|  end |  end | ||||||
|  |  | ||||||
|  local ops2={} |  local ops2={} | ||||||
|  for o in all(ops) do |  for o in all(ops) do | ||||||
|   if not level:mcoll(o.mx,o.my) then |   local mx,my,dmx,dmy=unpack(o) | ||||||
|  |   if not level:mcoll(mx,my) then | ||||||
|    -- great! |    -- great! | ||||||
|   else |   else | ||||||
|    local crate=level:get_crate(o.mx,o.my) |    local crate=level:get_crate(mx,my) | ||||||
|    if crate then |    if crate then | ||||||
|     if not level:can_move(false,o.mx,o.my,o.dmx,o.dmy,0,0) then |     if not level:can_move(false,mx,my,dmx,dmy,0,0) then | ||||||
|      break |      break | ||||||
|     end |     end | ||||||
|    else |    else | ||||||
| @@ -1864,14 +1870,14 @@ function debugmouse:draw3() | |||||||
| end | end | ||||||
|  |  | ||||||
| __gfx__ | __gfx__ | ||||||
| 000030000000002200003000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeff1ff1ff1fffffff1ffffff1fffffff1dddddddd111111110005000000000000 | 000030000000002200003000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeff1ff1ff1fffffff1ffffff1fffffff1dddddddd111111110000000033300333 | ||||||
| 003333300000332200333330eeffffffffffffffffffffeee5e555e55e555e5eff1ff1ffffffffffffffffffffffffffdddddddd111111110000500000000000 | 003333300000332200333330eeffffffffffffffffffffeee5e555e55e555e5eff1ff1ffffffffffffffffffffffffffdddddddd111111110cc00cc033300333 | ||||||
| 099333990039932009333339effeeeeeeeeeeeeeeeeeeffee5eeeeeeeeeeee5eff1ff1ffff111111ff1111ff111111ffdddddddd111111110000000000000000 | 099333990039932009333339effeeeeeeeeeeeeeeeeeeffee5eeeeeeeeeeee5eff1ff1ffff111111ff1111ff111111ffdddddddd111111110cccccc033333333 | ||||||
| 09a333a9033a932009333339efee33e3333e333e3333eefee5e333e333333e5eff1ff1ffff1fffffff1ff1fffffff1ffdddddddd111111115005005000000000 | 09a333a9033a932009333339efee33e3333e333e3333eefee5e333e333333e5eff1ff1ffff1fffffff1ff1fffffff1ffdddddddd1111111100c00c0000300300 | ||||||
| 023333323333320000222220efe333e3333e333e33333efee5e333e333333e5eff1ff1ffff1fffffff1ff1fffffff1ffdddddddd111111110500500500000000 | 023333323333320000222220efe333e3333e333e33333efee5e333e333333e5eff1ff1ffff1fffffff1ff1fffffff1ffdddddddd1111111100c00c0000300300 | ||||||
| 002222200000220000222220efe33eeeeeeeeeeeeee33efeeee33eeeeee33eeeff1111ffff111111ff1ff1ff111111ffdddddddd111111110000000000000000 | 002222200000220000222220efe33eeeeeeeeeeeeee33efeeee33eeeeee33eeeff1111ffff111111ff1ff1ff111111ffdddddddd111111110cccccc033333333 | ||||||
| 000222c002222c0000022200efeeee555e555e55e5eeeefee5eeeeffffeeee5effffffffffffffffff1ff1ffffffffffdddddddd111111110005000000000000 | 000222c002222c0000022200efeeee555e555e55e5eeeefee5eeeeffffeeee5effffffffffffffffff1ff1ffffffffffdddddddd111111110cc00cc033300333 | ||||||
| 00000cc00000cc0000000cc0efe33e5eeeeeeeeee5e33efee5e33efeefe33e5e1ffffff11fffffffff1ff1fffffffff1dddddddd111111110000500000000000 | 00000cc00000cc0000000cc0efe33e5eeeeeeeeee5e33efee5e33efeefe33e5e1ffffff11fffffffff1ff1fffffffff1dddddddd111111110000000033300333 | ||||||
| 0000ff000000000000000000efe33e5e11111111e5e33efee5e33efeefe33e5eff1ff1ffffffffffffffffffffffffff88888888555555555555555588888888 | 0000ff000000000000000000efe33e5e11111111e5e33efee5e33efeefe33e5eff1ff1ffffffffffffffffffffffffff88888888555555555555555588888888 | ||||||
| 000f00f0000000000aa00aa0efe33eee11ffff11eee33efeeee33effffe33e5eff1ff1ffffffffffffffffffffffffff88888888558855885588558888888888 | 000f00f0000000000aa00aa0efe33eee11ffff11eee33efeeee33effffe33e5eff1ff1ffffffffffffffffffffffffff88888888558855885588558888888888 | ||||||
| 00d0000f000000000aaaaaa0efe33e5e1ff11ff1e5e33efee5e33eeeeee33eeeff1ff1fffff11111ffffffff11111fff88888888888888888888888888888888 | 00d0000f000000000aaaaaa0efe33e5e1ff11ff1e5e33efee5e33eeeeee33eeeff1ff1fffff11111ffffffff11111fff88888888888888888888888888888888 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user