You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

157 lines
3.0 KiB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
  1. pico-8 cartridge // http://www.pico-8.com
  2. version 32
  3. __lua__
  4. -- library
  5. black = 0
  6. dark_blue = 1
  7. dark_purple = 2
  8. dark_green = 3
  9. brown = 4
  10. dark_gray = 5
  11. light_gray = 6
  12. white = 7
  13. red = 8
  14. orange = 9
  15. yellow = 10
  16. green = 11
  17. blue = 12
  18. indigo = 13
  19. pink = 14
  20. peach = 15
  21. function print_ctr(s,y,c)
  22. print(s,64 - #s * 2,y,c)
  23. end
  24. -->8
  25. -- game code
  26. bg = blue
  27. function _init()
  28. -- button-press initial delay
  29. poke(0x5f5c, 2)
  30. -- button-press repeat
  31. poke(0x5f5d, 2)
  32. init_world()
  33. end
  34. function init_world()
  35. player = {}
  36. player.x = 64
  37. player.y = 16
  38. player.spr = 1
  39. drops = {}
  40. ramps = {}
  41. add_ramp(50,20,15,10)
  42. add_ramp(60,50,15,-15)
  43. add_ramp(48,60,20,0)
  44. add_ramp(45,75,10,30)
  45. end
  46. function add_ramp(x,y,dx,dy)
  47. r = {}
  48. r.x = x
  49. r.y = y
  50. r.dx = dx
  51. r.dy = dy
  52. add(ramps, r)
  53. end
  54. function _update()
  55. update_player()
  56. update_drops()
  57. end
  58. function update_player()
  59. if btn(0) then
  60. player.x -= 1
  61. end
  62. if btn(1) then
  63. player.x += 1
  64. end
  65. if btn(2) then
  66. player.y -= 1
  67. end
  68. if btn(3) then
  69. player.y += 1
  70. end
  71. if (player.y < 0) player.y = 0
  72. if (player.y > 127) player.y = 127
  73. if (player.x < 0) player.x = 0
  74. if (player.x > 127) player.x = 127
  75. if btnp(🅾️) then
  76. drop = {}
  77. drop.x = player.x
  78. drop.y = player.y
  79. add(drops, drop)
  80. end
  81. end
  82. function update_drop(d)
  83. if d.y == 127 or pget(d.x,d.y+1) == bg then
  84. d.y += 1
  85. return
  86. end
  87. left = pget(d.x-1,d.y) == bg and pget(d.x-1,d.y+1) == bg
  88. right = pget(d.x+1,d.y) == bg and pget(d.x+1,d.y+1) == bg
  89. if left and right then
  90. d.y += 1
  91. if rnd() < 0.5 then
  92. d.x -= 1
  93. else
  94. d.x += 1
  95. end
  96. elseif left then
  97. d.y += 1
  98. d.x -= 1
  99. elseif right then
  100. d.y += 1
  101. d.x += 1
  102. end
  103. end
  104. function update_drops()
  105. draw_world()
  106. new_drops = {}
  107. for i=1,#drops do
  108. d = drops[i]
  109. update_drop(d)
  110. if d.y < 128 then
  111. add(new_drops, d)
  112. end
  113. end
  114. drops = new_drops
  115. end
  116. function _draw()
  117. draw_world()
  118. spr(player.spr,player.x-1,player.y-1)
  119. print("drops: "..#drops, 1, 6, white)
  120. end
  121. function draw_world()
  122. cls(bg)
  123. foreach(drops, draw_drop)
  124. foreach(ramps, draw_ramp)
  125. end
  126. function draw_ramp(r)
  127. line(r.x,r.y,r.x+r.dx,r.y+r.dy,brown)
  128. end
  129. function draw_drop(drop)
  130. pset(drop.x, drop.y, white)
  131. end
  132. __gfx__
  133. 000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  134. 00000000aaa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  135. 007007000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  136. 00077000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  137. 00077000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  138. 00700700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000