diff --git a/aabb2.p8 b/aabb2.p8 new file mode 100644 index 0000000..bc0d76b --- /dev/null +++ b/aabb2.p8 @@ -0,0 +1,254 @@ +pico-8 cartridge // http://www.pico-8.com +version 42 +__lua__ +local player = { + -- position + x = 64, + y = 50, + + -- velocity + dx = 0, + dy = 0, + + update = function(self) + -- apply gravity + self.dy = self.dy + 1 + -- cap the falling speed to 7px/frame + self.dy = min(self.dy, 7) + + local v_dist = 0 + + -- collision right + if self.dx > 0 and (isColliding(self.x + self.dx + 7, self.y) or isColliding(self.x + self.dx + 7, self.y + 7)) then + self.dx = 0 + end + -- collision left + if self.dx < 0 and (isColliding(self.x + self.dx, self.y) or isColliding(self.x + self.dx, self.y + 7)) then + self.dx = 0 + end + + -- collision down + if self.dy > 0 and (isColliding(self.x, self.y + self.dy + 7) or isColliding(self.x + 7, self.y + self.dy + 7)) then + -- get the blocks coordinates that the player is colliding with + local cx1, cy1 = getBlockCoords(self.x, self.y + self.dy + 7) + local cx2, cy2 = getBlockCoords(self.x + 7, self.y + self.dy + 7) + -- move the player on top of the block + v_dist = min(cy1 - (self.y + 8), cy2 - (self.y + 8)) + self.dy = 0 + end + -- collision up + if self.dy < 0 and (isColliding(self.x, self.y + self.dy) or isColliding(self.x + 7, self.y + self.dy)) then + -- get the blocks coordinates that the player is colliding with + local cx1, cy1 = getBlockCoords(self.x, self.y + self.dy) + local cx2, cy2 = getBlockCoords(self.x + 7, self.y + self.dy) + -- move the player right under the block + v_dist = min(cy1 - self.y + 8, cy2 - self.y + 8) + self.dy = 0 + end + + -- apply movement + self.x = self.x + self.dx + self.y = self.y + self.dy + v_dist + end, + + postUpdate = function(self) + self.dx = 0 + end +} + +function isColliding(x, y) + return fget(mget(flr(x / 8), flr(y / 8)), 0) +end + +function getBlockCoords(x, y) + return flr(x / 8) * 8, flr(y / 8) * 8 +end + +function _init() +end + +function _update() + --left + if btn(0) then + player.dx = -1 + end + + -- right + if btn(1) then + player.dx = 1 + end + + -- Up + if btnp(2) then + player.dy = -7 + end + + player:update() + player:postUpdate() +end + +function _draw() + cls() + map() + spr(2, player.x, player.y) +end + +__gfx__ +000000001111111d9999999900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000001111111d9999999900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +007007001111111d9999999900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000770001111111d9999999900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000770001111111d9999999900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +007007001111111d9999999900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000001111111d9999999900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000dddddddd9999999900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +__label__ +1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d +1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d +1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d +1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d +1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d +1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d +1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d1111111d +dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd +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 +1111111d00000000000000000000000000000000000000000000000000000000000000001111111d00000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000001111111d00000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000001111111d00000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000001111111d00000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000001111111d00000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000001111111d00000000000000000000000000000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000001111111d00000000000000000000000000000000000000001111111d +dddddddd0000000000000000000000000000000000000000000000000000000000000000dddddddd0000000000000000000000000000000000000000dddddddd +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d00000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d00000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d00000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d00000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d00000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d00000000000000001111111d +1111111d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111d00000000000000001111111d +dddddddd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dddddddd0000000000000000dddddddd +1111111d00000000000000000000000000000000000000001111111d00000000999999990000000000000000000000001111111d00000000000000001111111d +1111111d00000000000000000000000000000000000000001111111d00000000999999990000000000000000000000001111111d00000000000000001111111d +1111111d00000000000000000000000000000000000000001111111d00000000999999990000000000000000000000001111111d00000000000000001111111d +1111111d00000000000000000000000000000000000000001111111d00000000999999990000000000000000000000001111111d00000000000000001111111d +1111111d00000000000000000000000000000000000000001111111d00000000999999990000000000000000000000001111111d00000000000000001111111d +1111111d00000000000000000000000000000000000000001111111d00000000999999990000000000000000000000001111111d00000000000000001111111d +1111111d00000000000000000000000000000000000000001111111d00000000999999990000000000000000000000001111111d00000000000000001111111d +dddddddd0000000000000000000000000000000000000000dddddddd0000000099999999000000000000000000000000dddddddd0000000000000000dddddddd +1111111d00000000000000000000000000000000000000001111111d1111111d1111111d1111111d1111111d1111111d1111111d00000000000000001111111d +1111111d00000000000000000000000000000000000000001111111d1111111d1111111d1111111d1111111d1111111d1111111d00000000000000001111111d +1111111d00000000000000000000000000000000000000001111111d1111111d1111111d1111111d1111111d1111111d1111111d00000000000000001111111d +1111111d00000000000000000000000000000000000000001111111d1111111d1111111d1111111d1111111d1111111d1111111d00000000000000001111111d +1111111d00000000000000000000000000000000000000001111111d1111111d1111111d1111111d1111111d1111111d1111111d00000000000000001111111d +1111111d00000000000000000000000000000000000000001111111d1111111d1111111d1111111d1111111d1111111d1111111d00000000000000001111111d +1111111d00000000000000000000000000000000000000001111111d1111111d1111111d1111111d1111111d1111111d1111111d00000000000000001111111d +dddddddd0000000000000000000000000000000000000000dddddddddddddddddddddddddddddddddddddddddddddddddddddddd0000000000000000dddddddd +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 +0100000000000000000100000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000000000000000000000100000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000000000100000000000100000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000000000101010101010100000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000000010101010000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000001010101000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0100000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0101010101010101010101010101010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000