Jump Up, Pico Star!
A tribute/demake of the jump-rope mini-game from Super Mario Odyssey, made for Tweet Tweet Jam 3.
Press Z to jump.
PICO-8 source code:
h=0 d=1s=0.2j=0t=0p=0l=line w=rectfill poke(0x5f2c,3)function _update60() h+=d*s if (h>12)d=-1 if (h<0)then d=1if j==0 then p=0s=.2 else p+=1s+=.01 if (t<p)then t=p end end end if j==0then if (btnp(🅾️))j=5 end j=max(j-.2,0)cls()w(0,13,63,50,3)w(0,13,63,41,12) ?"웃",4,37,13 ?"웃",52,37,13 if (d>=1)r(h,6) x(j) if (d<1) r(h,7) print(p,13,16,10)print(t,46,16,10)end function r(z,y)l(10,41-z,52,41-z,y)end function x(z) ?"웃",28,37-z,1 ?"😐",28,33-z,15 l(29,33-z,33,33-z,8)l(27,32-z,35,32-z,8)l(27,31-z,35,31-z,8)l(28,30-z,34,30-z,8)w(29,35-z,33,36-z,5) end
And the same code again in expanded, commented explain-o-vision.
--declaring our variables h=0 // the Height of the rope d=1 // the rope's current Direction (1 or -1) s=0.2 // the rope's Speed j=0 // the player's Jump height - 0 means they're on the ground t=0 // the Top score p=0 // the Player's current score --aliasing some function names to save space later on l=line w=rectfill --switching to lo-res mode poke(0x5f2c,3) --our main loop! function _update60() --first we move the rope - by multiplying the rope speed (s) by --the current rope direction (d) and adding it to the current height (h) h+=d*s --if the rope's height (h) is more than 12 then it's the top of its travel --so we set its direction (d) to -1 (i.e. travelling down) if (h>12) d=-1 --if the rope's height (h) is less than 0 then it's at its low point --so we set its direction (d) to 1 (i.e. travelling up) if (h<0)then d=1 --additionally, if the player is standing on the ground when the rope --is at its low point, then the player has hit the rope and the -- game is over.. if j==0 then --...so we reset the player (p) score to zero, --and we set the rope speed (s) back to its original .2 p=0s=.2 else --but if the player is jumping when the rope is at its low point, --we add one to their score (p) and increase the rope speed (s) by .01 p+=1s+=.01 --and if the top score (t) is now lower than the player's score (p) --then we update the high score if (t<p)then t=p end end end --PLAYER INPUT --if the player is currently on the ground (j=0), we check if the player --pressed the button; if they did, we set their jump height to 5 (j=5+) if j==0 then if (btnp(�������)) j=5 end --and if the player is currently jumping, we decrease their jump height (j) --by .2 each frame until they are back on the ground j=max(j-.2,0) --DRAWING THE GRAPHICS --(usually done separately in the _draw() function, --but for TweetTweetJam we put it in _update60() to save space) --clear the screen cls() --draw two rectangles to represent the sky/grass w(0,13,63,50,3) w(0,13,63,41,12) --draw the two people holding the rope ?"웃",4,37,13 ?"웃",52,37,13 --if the rope is travelling up, draw it in gray behind the player if (d>=1) r(h,6) --draw the player x(j) --if the rope is travelling down, draw it in white in front of the player if (d<1) r(h,7) -- and finally, print the scores at the top print(p,13,16,10) print(t,46,16,10) --and that's it! end --OR IS IT? --a couple of extra functions written to save space --the 'r' function draws the rope with a given height (z) and color (y) function r(z,y) l(10,41-z,52,41-z,y) end --the 'x' function draws the player at height (z) function x(z) --first draw the body in dark blue ?"웃",28,37-z,1 --then draw the head in a caucasian skin colour ?"😐",28,33-z,15 --then draw four red lines to form the shape of a hat l(29,33-z,33,33-z,8) l(27,32-z,35,32-z,8) l(27,31-z,35,31-z,8) l(28,30-z,34,30-z,8) --and finally, draw a single brown line to make a mustache w(29,35-z,33,36-z,5) end