diff --git a/chameleonic.p8 b/chameleonic.p8 index d91f9e5..498cf3f 100644 --- a/chameleonic.p8 +++ b/chameleonic.p8 @@ -480,16 +480,18 @@ function _mix(mx,my) return mx..","..my end +-- crate spec: +-- "up" == 1 +-- "right" == 2 +-- "down" == 4 +-- "left" == 8 +-- +-- +1+ +-- 8 2 +-- +4+ function level:_get_cratedef(s) - if (s<64 or s>=80) return nil - - local s2=s-64 - return { - up=s2&1!=0, - right=s2&2!=0, - down=s2&4!=0, - left=s2&8!=0 - } + if (s<64 or s>=80) return + return s & 0x000F end function level:get_latch(dx,dy,px,py) @@ -500,12 +502,11 @@ function level:get_latch(dx,dy,px,py) local dx1,dy1=-sgn0(dx),-sgn0(dy) if crate then - if - (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 + if crate.def & ( + dy1 >>> 15 | + (dy1 & 0x1) << 2 | + (dx1 & 0x8000) >>> 12 | + (dx1 & 0x1) << 1) ~= 0 then return { el="crate", dx=dx1,dy=dy1,