diff --git a/right_coin.lua b/right_coin.lua
index 011df69..f01fad6 100644
--- a/right_coin.lua
+++ b/right_coin.lua
@@ -16,6 +16,105 @@ coinBlue=0
coinRed=0
coinYellow=0
+solids={}
+do
+ local sols={1, 2, 3, 17}
+ for i,v in pairs(sols) do
+ solids[v]=true
+ end
+end
+
+function sol(x,y) return solids[mget(x//8,y//8)] end
+g = .3
+j = -4
+
+anis={
+ idle={257},
+ run={273,274},
+ jump={289},
+ fall={290}
+}
+
+do -- Player
+ Player = {
+ spr=0,
+ ani=anis.idle,
+ x=8,y=120,
+ w=8,h=8,
+ vx=0,vy=0,
+ isFlipped=false
+ }
+
+ function Player:direct()
+ if btn(2) then
+ self.vx = -2
+ self.isFlipped = true
+ elseif btn(3) then
+ self.vx = 2
+ self.isFlipped = false
+ else self.vx = 0
+ end
+ if btnp(0) and self.vy == 0 then self.vy = j end
+ end
+
+ function Player:update()
+ self:resolve()
+ self.x = self.x + self.vx
+ self.y = self.y + self.vy
+ end
+
+ function Player:resolve()
+ if sol(self.x + self.vx, self.y + self.h-1) or sol(self.x + self.vx + self.w-1, self.y + self.h-1) then
+ self.vx = 0
+ end
+
+ local roof = self:distanceToRoof()
+ local floor = self:distanceToFloor()
+ if self.vy < roof then
+ self.vy = roof
+ end
+ if self.vy >= floor then self.vy = floor
+ else self.vy = self.vy + g
+ end
+ if self.vy < 0 then
+ self.ani = anis.jump
+ elseif self.vy > 0 then
+ self.ani = anis.fall
+ elseif not (self.vx == 0) then
+ self.ani = anis.run
+ else
+ self.ani = anis.idle
+ end
+ end
+
+ function Player:distanceToFloor()
+ local y = 0
+ while (not sol(self.x + self.vx, self.y + y + self.h))
+ and (not sol(self.x + self.vx + self.w-1, self.y + y + self.h))
+ and (self.y + y < 128) do
+ y = y + 1
+ end
+ return y
+ end
+
+ function Player:distanceToRoof()
+ local y = 0
+ while (not sol(self.x + self.vx, self.y + y - 1))
+ and (not sol(self.x + self.vx + self.w-1, self.y + y - 1))
+ and (self.y + y > 0) do
+ y = y - 1
+ end
+ return y
+ end
+
+ function Player:draw()
+ self.spr=self.ani[(((t)//3)% #self.ani)+1]
+ local flip
+ if self.isFlipped then flip = 1 else flip = 0 end
+ spr(self.spr, self.x, self.y, 1, 1, flip)
+ end
+end
+
function drawStart()
cls(13)
print("The Right Coin",80,36)
@@ -29,8 +128,10 @@ function drawGameOver()
end
function drawGame()
- cls(0)
- spr(84,64,0)
+ map(0,0,30,17)
+ p:direct()
+ p:update()
+ p:draw()
end
function drawMarket()
@@ -97,6 +198,7 @@ function update(state)
end
end
+p=Player
function TIC()
update(currentState)
draw(currentState)
@@ -104,6 +206,10 @@ function TIC()
end
--
+-- 001:0bbbbbbbbb5b55b5b54544545444444444444444444444c44c44444444444444
+-- 002:bbbbbbbb5b55b55b454454454444444444444444444444c44c44444444444444
+-- 003:bbbbbbb0b55b555b544544554444444544444444444444c44c44444444444444
+-- 017:444444444444c4444c444444444444c444444444444444c444c4444444444444
-- 064:03aaaa3703aaaa3703aa3a3703aaaa3703aaaa3703aaaa3703a3aa3703aaaa37
-- 065:03aaaa3703aa3a3303aaaaaa03aaaaaa03aaaa3a033aaaaa0033333300000000
-- 066:7777777777777777777777777777777777777777777777777777777777777777
@@ -114,6 +220,33 @@ end
-- 084:000008880000880000880000008eeeee08ee00008ee666608666006680000000
--
+--
+-- 001:00044000000cc000000cc000006666000606606000c88c000008080000080800
+-- 017:00044000000cc000000cc0000006600000066c00000888000088080000000800
+-- 018:00044000000cc000000cc000006666c000c66000000888800008008000880000
+-- 033:00044000000cc0c0000cc060006666600066c600000888800888008000000080
+-- 034:000440000c0cc0c0060cc0600666666000066600000888000080008008000008
+--
+
+--
+
--
-- 000:00000000ffffffff00000000ffffffff
-- 001:0123456789abcdeffedcba9876543210