diff --git a/deepnight.p8 b/deepnight.p8 new file mode 100644 index 0000000..1082477 --- /dev/null +++ b/deepnight.p8 @@ -0,0 +1,291 @@ +pico-8 cartridge // http://www.pico-8.com +version 42 +__lua__ +local TILESIZE = 8 +local player = { + -- Cell coordinates + cx = 8, + cy = 8, + + -- 0-1 ratio values for the position within a grid cell + xr = 0, + yr = 0, + + -- Pixel coordinates + xx = 0, + yy = 0, + + -- Movements + dx = 0, + dy = 0, + + setCoordinates = function(self, x, y) + self.xx = x + self.yy = y + self.cx = flr(self.xx / TILESIZE) + self.xy = flr(self.yy / TILESIZE) + self.xr = (self.xx - self.cx * TILESIZE) / TILESIZE + self.xy = (self.yy - self.cy * TILESIZE) / TILESIZE + end, + + update = function(self) + -- Apply gravity + self.dy = self.dy + 0.05 + self.dy = min(self.dy, 0.98) + + self.xr = self.xr + self.dx + + self.yr = self.yr + self.dy + -- self.dy = self.dy * 0.8 + + if abs(self.dx) < 0.001 then self.dx = 0 end + if abs(self.dy) < 0.001 then self.dy = 0 end + + -- Collision right + if hasCollision(self.cx + 1, self.cy) and self.xr >= 0.75 then + self.xr = 0.75 + self.dx = 0 + end + -- Collision left + if hasCollision(self.cx - 1, self.cy) and self.xr <= 0.25 then + self.xr = 0.25 + self.dx = 0 + end + -- Collision up + if hasCollision(self.cx, self.cy - 1) and self.yr <= 0.375 then + self.yr = 0.375 + self.dy = 0 + end + -- Collision down + if hasCollision(self.cx, self.cy + 1) and self.yr >= 0.5 then + self.yr = 0.5 + self.dy = 0 + end + + while self.xr > 1 do + self.xr = self.xr - 1 + self.cx = self.cx + 1 + end + while (self.xr < 0) do + self.xr = self.xr + 1 + self.cx = self.cx - 1 + end + while (self.yr > 1) do + self.yr = self.yr - 1 + self.cy = self.cy + 1 + end + while (self.yr < 0) do + self.yr = self.yr + 1 + self.cy = self.cy - 1 + end + end, + + postUpdate = function(self) + self.dx = 0 + + self.xx = (self.cx + self.xr) * TILESIZE + self.yy = (self.cy + self.yr) * TILESIZE + end +} + +function hasCollision(x, y) + -- Implement collision detection logic here + return fget(mget(x, y), 0) +end + +function _init() +end + +local frames = 0 +function _update() + frames = frames + 1 + --left + if btn(0) then + player.dx = -0.1 + end + + -- right + if btn(1) then + player.dx = 0.1 + end + + -- Up + if btnp(2) then + player.dy = -0.45 + end + + player:update() +end + +function _draw() + cls() + map() + + -- Draw the sprite with a -4,-4 offset, to center it on the player's position + spr(((frames / 30) % 4) > 1 and 2 or 3, player.xx - 4, player.yy - 4) + + print("cell: " .. player.cx + player.xr .. ", " .. player.cy + player.yr, 1, 1, 7) + print("pos: " .. flr(player.xx) .. ", " .. flr(player.yy), 1, 10, 7) + + player:postUpdate() +end + +__gfx__ +000000001111111d0000b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000001111111d0000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +007007001111111d0000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000770001111111dbb8898bb00009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000770001111111d0000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +007007001111111d0000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000dddddddd0000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000001111111d0000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +__label__ +1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d +117717771711171d1111111d1777111d1111177d1777111d1777111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d +1711171d1711171d1171111d1717111d1111117d1717111d1711111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d +1711177d1711171d1111111d1777111d1111117d1717111d1777111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d +1711171d1711171d1171111d1717117d1111117d1717111d1117111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d +11771777177717771111111d1777171d111117771777117d1777111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d +1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d +dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1777117700770000000007000707000000000777070700000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1717171707000070000007000707000000000707070700000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1777171707770000000007770777000000000777077700000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1711171700070070000007070007007000000707000700000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1711177d07700000000007770007070000000777000700000000000000000000000000000000000000000000000000000000000000000000000000001111111d +dddddddd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dddddddd +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +dddddddd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dddddddd +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +dddddddd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dddddddd +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +dddddddd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dddddddd +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +dddddddd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dddddddd +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +dddddddd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dddddddd +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +dddddddd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dddddddd +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +dddddddd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dddddddd +1111111d000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d0000000000000000000000001111111d +1111111d000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d0000000000000000000000001111111d +1111111d000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d0000000000000000000000001111111d +1111111d000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d0000000000000000000000001111111d +1111111d000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d0000000000000000000000001111111d +1111111d000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d0000000000000000000000001111111d +1111111d000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d0000000000000000000000001111111d +dddddddd00000000000000000000000000000000000000000000000000000000000000000000000000000000dddddddd000000000000000000000000dddddddd +1111111d00000000000000000000000000000000000000001111111d00000000b000000000000000000000001111111d0000000000000000000000001111111d +1111111d00000000000000000000000000000000000000001111111d000000008000000000000000000000001111111d0000000000000000000000001111111d +1111111d00000000000000000000000000000000000000001111111d000000008000000000000000000000001111111d0000000000000000000000001111111d +1111111d00000000000000000000000000000000000000001111111d0000bb8898bb000000000000000000001111111d0000000000000000000000001111111d +1111111d00000000000000000000000000000000000000001111111d000000008000000000000000000000001111111d0000000000000000000000001111111d +1111111d00000000000000000000000000000000000000001111111d000000008000000000000000000000001111111d0000000000000000000000001111111d +1111111d00000000000000000000000000000000000000001111111d000000008000000000000000000000001111111d0000000000000000000000001111111d +dddddddd0000000000000000000000000000000000000000dddddddd00000000800000000000000000000000dddddddd000000000000000000000000dddddddd +1111111d00000000000000000000000000000000000000001111111d1111111d1111111d1111111d1111111d1111111d0000000000000000000000001111111d +1111111d00000000000000000000000000000000000000001111111d1111111d1111111d1111111d1111111d1111111d0000000000000000000000001111111d +1111111d00000000000000000000000000000000000000001111111d1111111d1111111d1111111d1111111d1111111d0000000000000000000000001111111d +1111111d00000000000000000000000000000000000000001111111d1111111d1111111d1111111d1111111d1111111d0000000000000000000000001111111d +1111111d00000000000000000000000000000000000000001111111d1111111d1111111d1111111d1111111d1111111d0000000000000000000000001111111d +1111111d00000000000000000000000000000000000000001111111d1111111d1111111d1111111d1111111d1111111d0000000000000000000000001111111d +1111111d00000000000000000000000000000000000000001111111d1111111d1111111d1111111d1111111d1111111d0000000000000000000000001111111d +dddddddd0000000000000000000000000000000000000000dddddddddddddddddddddddddddddddddddddddddddddddd000000000000000000000000dddddddd +1111111d000000000000000000000000000000001111111d1111111d1111111d1111111d0000000000000000000000000000000000000000000000001111111d +1111111d000000000000000000000000000000001111111d1111111d1111111d1111111d0000000000000000000000000000000000000000000000001111111d +1111111d000000000000000000000000000000001111111d1111111d1111111d1111111d0000000000000000000000000000000000000000000000001111111d +1111111d000000000000000000000000000000001111111d1111111d1111111d1111111d0000000000000000000000000000000000000000000000001111111d +1111111d000000000000000000000000000000001111111d1111111d1111111d1111111d0000000000000000000000000000000000000000000000001111111d +1111111d000000000000000000000000000000001111111d1111111d1111111d1111111d0000000000000000000000000000000000000000000000001111111d +1111111d000000000000000000000000000000001111111d1111111d1111111d1111111d0000000000000000000000000000000000000000000000001111111d +dddddddd00000000000000000000000000000000dddddddddddddddddddddddddddddddd000000000000000000000000000000000000000000000000dddddddd +1111111d0000000000000000000000001111111d1111111d1111111d1111111d000000000000000000000000000000000000000000000000000000001111111d +1111111d0000000000000000000000001111111d1111111d1111111d1111111d000000000000000000000000000000000000000000000000000000001111111d +1111111d0000000000000000000000001111111d1111111d1111111d1111111d000000000000000000000000000000000000000000000000000000001111111d +1111111d0000000000000000000000001111111d1111111d1111111d1111111d000000000000000000000000000000000000000000000000000000001111111d +1111111d0000000000000000000000001111111d1111111d1111111d1111111d000000000000000000000000000000000000000000000000000000001111111d +1111111d0000000000000000000000001111111d1111111d1111111d1111111d000000000000000000000000000000000000000000000000000000001111111d +1111111d0000000000000000000000001111111d1111111d1111111d1111111d000000000000000000000000000000000000000000000000000000001111111d +dddddddd000000000000000000000000dddddddddddddddddddddddddddddddd00000000000000000000000000000000000000000000000000000000dddddddd +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +dddddddd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dddddddd +1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d +1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d +1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d +1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d +1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d +1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d +1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d +dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd + +__gff__ +0001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +__map__ +0101010101010101010101010101010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000000000000000000010000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000000000100000000010000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000000000101010101010000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000000010101010000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000001010101000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0101010101010101010101010101010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/deepnight2.p8 b/deepnight2.p8 new file mode 100644 index 0000000..7caa280 --- /dev/null +++ b/deepnight2.p8 @@ -0,0 +1,302 @@ +pico-8 cartridge // http://www.pico-8.com +version 42 +__lua__ +local TILESIZE = 8 +local player = { + -- Cell coordinates + cx = 8, + cy = 8, + + -- 0-1 ratio values for the position within a grid cell + xr = 0, + yr = 0, + + -- Pixel coordinates + xx = 0, + yy = 0, + + -- Movements + dx = 0, + dy = 0, + + setCoordinates = function(self, x, y) + self.xx = x + self.yy = y + self.cx = flr(self.xx / TILESIZE) + self.xy = flr(self.yy / TILESIZE) + self.xr = (self.xx - self.cx * TILESIZE) / TILESIZE + self.xy = (self.yy - self.cy * TILESIZE) / TILESIZE + end, + + update = function(self) + -- Apply gravity + self.dy = self.dy + 0.05 + self.dy = min(self.dy, 0.98) + + self.xr = self.xr + self.dx + + self.yr = self.yr + self.dy + -- self.dy = self.dy * 0.8 + + if abs(self.dx) < 0.001 then self.dx = 0 end + if abs(self.dy) < 0.001 then self.dy = 0 end + + -- Collision right + if hasCollision(self.cx + 1, self.cy) and self.xr >= 0.75 then + self.xr = 0.75 + self.dx = 0 + end + -- Collision left + if hasCollision(self.cx - 1, self.cy) and self.xr <= 0.25 then + self.xr = 0.25 + self.dx = 0 + end + -- Collision up + if hasCollision(self.cx, self.cy - 1) and self.yr <= 0.375 then + self.yr = 0.375 + self.dy = 0 + end + + local cxLeft = self.cx + local cxRight = self.cx + + if self.xr < 0.25 then + cxLeft = self.cx - 1 + elseif self.xr > 0.875 then + cxRight = self.cx + 1 + end + + -- Collision down + if (hasCollision(cxLeft, self.cy + 1) or hasCollision(cxRight, self.cy + 1)) + and self.yr >= 0.5 then + self.yr = 0.5 + self.dy = 0 + end + + while self.xr > 1 do + self.xr = self.xr - 1 + self.cx = self.cx + 1 + end + while (self.xr < 0) do + self.xr = self.xr + 1 + self.cx = self.cx - 1 + end + while (self.yr > 1) do + self.yr = self.yr - 1 + self.cy = self.cy + 1 + end + while (self.yr < 0) do + self.yr = self.yr + 1 + self.cy = self.cy - 1 + end + end, + + postUpdate = function(self) + self.dx = 0 + + self.xx = (self.cx + self.xr) * TILESIZE + self.yy = (self.cy + self.yr) * TILESIZE + end +} + +function hasCollision(x, y) + -- Implement collision detection logic here + return fget(mget(x, y), 0) +end + +function _init() +end + +local frames = 0 +function _update() + frames = frames + 1 + --left + if btn(0) then + player.dx = -0.1 + end + + -- right + if btn(1) then + player.dx = 0.1 + end + + -- Up + if btnp(2) then + player.dy = -0.45 + end + + player:update() +end + +function _draw() + cls() + map() + + -- Draw the sprite with a -4,-4 offset, to center it on the player's position + spr(((frames / 30) % 4) > 1 and 2 or 3, player.xx - 4, player.yy - 4) + + print("cell: " .. player.cx + player.xr .. ", " .. player.cy + player.yr, 1, 1, 7) + print("pos: " .. flr(player.xx) .. ", " .. flr(player.yy), 1, 10, 7) + + player:postUpdate() +end + +__gfx__ +000000001111111d0000b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000001111111d0000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +007007001111111d0000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000770001111111dbb8898bb00009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000770001111111d0000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +007007001111111d0000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000dddddddd0000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000001111111d0088880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +__label__ +1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d +117717771711171d1111111d1777111d177117771111111d1777111d1777111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d +1711171d1711171d1171111d1117111d1171171d1111111d1717111d1711111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d +1711177d1711171d1111111d1117111d117117771111111d1777111d1777111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d +1711171d1711171d1171111d1117111d117111171171111d1117111d1117111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d +11771777177717771111111d1117117d177717771711111d1117117d1777111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d +dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd +1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1777117700770000000007770777000000000777070000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1717171707000070000007000007000000000007070000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1777171707770000000007770007000000000007077700000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1711171700070070000000070007007000000007070700000000000000000000000000000000000000000000000000000000000000000000000000001111111d +d7ddd77d0770000000000777000707000000000707770000000000000000000000000000000000000000000000000000000000000000000000000000dddddddd +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +dddddddd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dddddddd +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +dddddddd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dddddddd +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +dddddddd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dddddddd +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +dddddddd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dddddddd +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +dddddddd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dddddddd +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +dddddddd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dddddddd +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +dddddddd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dddddddd +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d0000000000000000000000000000000000000000000000000b0000000000000000000000000000001111111d0000000000000000000000001111111d +1111111d000000000000000000000000000000000000000000000000080000000000000000000000000000001111111d0000000000000000000000001111111d +1111111d000000000000000000000000000000000000000000000000080000000000000000000000000000001111111d0000000000000000000000001111111d +1111111d000000000000000000000000000000000000000000000bb8898bb0000000000000000000000000001111111d0000000000000000000000001111111d +1111111d000000000000000000000000000000000000000000000000080000000000000000000000000000001111111d0000000000000000000000001111111d +1111111d000000000000000000000000000000000000000000000000080000000000000000000000000000001111111d0000000000000000000000001111111d +dddddddd00000000000000000000000000000000000000000000000008000000000000000000000000000000dddddddd000000000000000000000000dddddddd +1111111d000000000000000000000000000000000000000000000008888000000000000000000000000000001111111d0000000000000000000000001111111d +1111111d00000000000000000000000000000000000000001111111d000000000000000000000000000000001111111d0000000000000000000000001111111d +1111111d00000000000000000000000000000000000000001111111d000000000000000000000000000000001111111d0000000000000000000000001111111d +1111111d00000000000000000000000000000000000000001111111d000000000000000000000000000000001111111d0000000000000000000000001111111d +1111111d00000000000000000000000000000000000000001111111d000000000000000000000000000000001111111d0000000000000000000000001111111d +1111111d00000000000000000000000000000000000000001111111d000000000000000000000000000000001111111d0000000000000000000000001111111d +1111111d00000000000000000000000000000000000000001111111d000000000000000000000000000000001111111d0000000000000000000000001111111d +dddddddd0000000000000000000000000000000000000000dddddddd00000000000000000000000000000000dddddddd000000000000000000000000dddddddd +1111111d00000000000000000000000000000000000000001111111d000000000000000000000000000000001111111d0000000000000000000000001111111d +1111111d00000000000000000000000000000000000000001111111d1111111d1111111d1111111d1111111d1111111d0000000000000000000000001111111d +1111111d00000000000000000000000000000000000000001111111d1111111d1111111d1111111d1111111d1111111d0000000000000000000000001111111d +1111111d00000000000000000000000000000000000000001111111d1111111d1111111d1111111d1111111d1111111d0000000000000000000000001111111d +1111111d00000000000000000000000000000000000000001111111d1111111d1111111d1111111d1111111d1111111d0000000000000000000000001111111d +1111111d00000000000000000000000000000000000000001111111d1111111d1111111d1111111d1111111d1111111d0000000000000000000000001111111d +1111111d00000000000000000000000000000000000000001111111d1111111d1111111d1111111d1111111d1111111d0000000000000000000000001111111d +dddddddd0000000000000000000000000000000000000000dddddddddddddddddddddddddddddddddddddddddddddddd000000000000000000000000dddddddd +1111111d00000000000000000000000000000000000000001111111d1111111d1111111d1111111d1111111d1111111d0000000000000000000000001111111d +1111111d000000000000000000000000000000001111111d1111111d1111111d1111111d0000000000000000000000000000000000000000000000001111111d +1111111d000000000000000000000000000000001111111d1111111d1111111d1111111d0000000000000000000000000000000000000000000000001111111d +1111111d000000000000000000000000000000001111111d1111111d1111111d1111111d0000000000000000000000000000000000000000000000001111111d +1111111d000000000000000000000000000000001111111d1111111d1111111d1111111d0000000000000000000000000000000000000000000000001111111d +1111111d000000000000000000000000000000001111111d1111111d1111111d1111111d0000000000000000000000000000000000000000000000001111111d +1111111d000000000000000000000000000000001111111d1111111d1111111d1111111d0000000000000000000000000000000000000000000000001111111d +dddddddd00000000000000000000000000000000dddddddddddddddddddddddddddddddd000000000000000000000000000000000000000000000000dddddddd +1111111d000000000000000000000000000000001111111d1111111d1111111d1111111d0000000000000000000000000000000000000000000000001111111d +1111111d0000000000000000000000001111111d1111111d1111111d1111111d000000000000000000000000000000000000000000000000000000001111111d +1111111d0000000000000000000000001111111d1111111d1111111d1111111d000000000000000000000000000000000000000000000000000000001111111d +1111111d0000000000000000000000001111111d1111111d1111111d1111111d000000000000000000000000000000000000000000000000000000001111111d +1111111d0000000000000000000000001111111d1111111d1111111d1111111d000000000000000000000000000000000000000000000000000000001111111d +1111111d0000000000000000000000001111111d1111111d1111111d1111111d000000000000000000000000000000000000000000000000000000001111111d +1111111d0000000000000000000000001111111d1111111d1111111d1111111d000000000000000000000000000000000000000000000000000000001111111d +dddddddd000000000000000000000000dddddddddddddddddddddddddddddddd00000000000000000000000000000000000000000000000000000000dddddddd +1111111d0000000000000000000000001111111d1111111d1111111d1111111d000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +dddddddd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dddddddd +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d +1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d +1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d +1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d +1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d +1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d +1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d +dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd +1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d + +__gff__ +0001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +__map__ +0101010101010101010101010101010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000000000000000000010000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000000000100000000010000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000000000101010101010000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000000010101010000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000001010101000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0101010101010101010101010101010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000