pico-8 cartridge // http://www.pico-8.com version 41 __lua__ -- snow dogs -- by yoyodyne function _init() create_particles() end function _update() update_snow() if mode == "title" then update_title() elseif mode == "game" then handle_input() update_trees() end end function _draw() if mode == "title" then draw_title() draw_snow() elseif mode == "game" then draw_game() draw_snow() --pdebug() draw_collide() draw_hud() end end function draw_game() cls(6) -- grey transparency palt(0b000001000000000) draw_trees() draw_dogs() palt() end -->8 -- snow particles = {} max_x = 200 function create_particles() for i=1,300 do particles[i] = { y=rnd(128)-128, x=rnd(max_x), dir=rnd(2)-1 } end end function draw_snow() for p in all(particles) do pset(p.x, p.y, 7) end end function update_snow() for p in all(particles) do p.x += p.dir - steering p.y += 1 + speed if p.y > 128 or p.x < 0 then p.y = 0 p.x = rnd(max_x) end end end -->8 -- game entities function draw_dogs() local d = {[0]=5, 6, 5, 7, 7, 6} for x=0,1 do for y=0,2 do local dx = 64 - (10 * x) + (steering*4*y) if y*2+x < dogs then spr(d[y*2+x], dx, 128-(16*(y+1)), 1, 2) end end end end function draw_tree(x, y) spr(11, x, y, 1, 2) end function draw_trees() for i=1,8 do draw_tree( left_wall[i]-8 - sled_x + 64, (i-1)*16 ) draw_tree( right_wall[i] - sled_x + 64, (i-1)*16 ) end end function tree_spread() -- ret: 2 vals, 15 to 60 -- width of field local diff = 15+((goal - distance) / goal)*45 shift = rnd(60-diff)*rnd({-1, 1}) diff += rnd(diff*0.2)-diff*0.1 return left_wall[1]+shift, left_wall[1]+shift+diff end function update_trees() local new_dist = distance + speed if flr(new_dist / 16) > flr(distance / 16) then -- shift 'em down for i = 8,2,-1 do left_wall[i] = left_wall[i-1] right_wall[i] = right_wall[i-1] end -- new tree at back l, r = tree_spread() left_wall[1] = l right_wall[1] = r end end function draw_hud() rectfill(14,0,114,4,7) local d = 14+distance/goal*100 rectfill(14,1,d,3,11) rectfill(d,1,d,3,4) for l=1,dogs do print("🐱", 1, (l-1)*7, 7) end print("▒", 108, 0, 0) if distance >= goal then print("you win!", 35, 64) -- if distance is near 100 elseif distance%1000 < 100 then local mtg = ceil((goal-distance)/1000)*100 print(mtg.." miles to go!", 30, 64) end end -->8 -- global state goal = 10000 mode = "title" steering = 0 speed = 1 distance = 0 -- 10ths of mile sled_x = 64 dogs = 6 left_wall = { 22, 20, 20, 18, 18, 16, 16, 16, } right_wall = { 112, 112, 114, 114, 116, 118, 118, 118 } -->8 -- update logic function handle_input() if btn(0) then steering = -1 elseif btn(1) then steering = 1 else steering = 0 end if btn(2) then speed = 20 else speed = 1 end distance += speed sled_x += steering * speed l, r = bounds() if sled_x-5 < l or sled_x+5 > r then crash() end if distance >= goal then state = "win" end end function bounds() -- return left, right w = {8, 8, 7, 7, 6, 6} w = w[dogs] return left_wall[w], right_wall[w] end function draw_collide() rect(52, 108, 72, 128) l, r = bounds() line(l, 90, l, 128, 3) line(r, 90, r, 128, 3) end function crash() sfx(4) dogs -= 1 if dogs == 0 then mode = "gameover" end sled_x = (left_wall[8]+right_wall[8])/2 end -->8 -- title title_y = 0 title_stretch = 0 title_rainbow = 0 title_susan = -40 title_89 = 40 function update_title() if title_y < 50 then title_y += 1 elseif title_stretch < 16 then title_stretch += 1 end if title_stretch == 16 and title_susan < 30 then title_susan += 1 title_89 -= 1 end if btnp(4) then mode = "game" end end function draw_title() cls(0) if title_susan then print("susan butcher's", title_susan, title_susan + 10, 12) end pal(8, 8+t()%6) pal(12, 8+(t()+4)%6) sspr(48, 24, 54, 16, 40-title_stretch, title_y, 54+title_stretch*2, 16+title_stretch) sspr(104, 24, 16, 16, 70+title_89, 100+title_89, 48, 48) end __gfx__ 00000000644444466444444667c7c7c6666666666666666666666666666666660000000000033000666666666666666600000000666666666666666600000000 000000006499994664999946c777777c666666666666666666666666556666550000000000033000666336666663766600000000466666646666666600000000 00700700693993966939939677077077666666666666666666666666565555650000000000333300666336666663366600000000446666444666666600000000 00077000699999966999999d77777777666666666466664660066776665555660000000000333300663333666633776600000000444664446666666600000000 0007700069999996699999dd77788777666666666444444666007766655555560000000003333330663333666637736600000000646666466666666600000000 00700700699ee996699ee9dd67777776666666666644446666777066655555560000000000044000663333666633336600000000664444666666666600000000 0000000066999966669999dd66777766666666666644446666070066665555660000000000044000633333366333777600000000660440666666666600000000 0000000066699666666996dd67777776666666666664466666677666666556660000000000044000633333366377733600000000664444444444446600000000 000000006dd99dd66dd99ddd77777777666666666664466666707766665555660000000000000000633333366333333600000000664444044444444600000000 00000000ddddddddddddddd677677677666666666644446666077766655555560000000000000000333333333333777700000000666440044444444400000000 00000000dd2222dddd22222677677677666666666644446666770066655555560000000000000000333333337777733300000000666440444444444400000000 00000000dd2222dddd22222677677667666666666644446666770766655555560000000000000000666446666664466600000000666666444444444600000000 00000000dd2222dddd22222666677766666666666644446666077766655555560000000000000000666446666664466600000000666666446666644600000000 00000000dd2222dddd22222666777776666666666644446666077766655555560000000000000000666446666664466600000000666666446666644600000000 00000000d222222dd222222667777776666666666644446666677666665555660000000000000000666446666664466600000000666666446666644600000000 00000000622222266222222667777776666666666664466666607666666556660000000000000000666446666664466600000000666666046666604600000000 00000000622222266666666666666666666666660000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000622662266666666666666666666666660000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000622662266666666666666666666666660000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000622662266666666666666666666666660000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000622662266666666666666666666666660000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000622662266666666666666666666666660000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000666666666666666666666666666666660000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000666666666666666666666666666666660000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000666666666666666666666666000000000000000066660666600066660666600066000666666000066000666600000000080000000000000000000000 00000000666666666666666666666666000000000000000066660666660066660666600600600660000600666600666660000000800888800088880000000000 00000000666666666666666666666666000000000000000006600660066006600066006600660660000606600660660066000000008000080000008000000000 00000000666666666666666666666666000000000000000006600660006006600066006600660666666606600660660006000000008000080000008000000000 00000000666666666666666666666666000000000000000006600660006006600066006666660666660006600660660006000000000888800088888000000000 00000000666666666666666666666666000000000000000006600660066006600066006600660660660006600660660066000000008000080000008000000000 00000000666666666666666666666666000000000000000066660666660066660066006600660660066000666600666660000000008000080000008000000000 00000000666666666666666666666666000000000000000066660666600066660066006600660660006600066000666600000000000888800088880000000000 __label__ 00000000000000700000000007000070000000700000000000000700000000000000000000000000000000000000000000000000007000000000000000000007 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000700000000000000000000000000000000000000000000000000000000000000000700000000700000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000007700000000000007000000000000700000000000000000070000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000070000000000000000000000000000700000000000000000070000000000007000000070000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000000077000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000007000000000700070000700000000000000000000000000000000000000000000000000000000000000077700000000000000000000000700000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007000000000007000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000007000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000070000070000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000070000000000000700000000000700000000000000000000000000000000000000000000000000070000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000070000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000700000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000770000000000000000000000000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000070000000000000000000000000000000000000000000000070700000000000000000007000000000070000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000070000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000cc0c0c00cc0ccc0cc000000ccc0c0c0ccc00cc0c0c0ccc0ccc07c007cc000000000070070000000000000000000700000 000000000000000000000000000000c000c0c0c000c0c0c0c00000c0c0c0c00c00c000c0c0c000c0c0c000c00000000000000000000000000000000000000000 000000000000000000000000000007ccc0c7c0ccc0ccc0c0c00000cc00c0c00c00c000c7c07c00cc000000ccc000000000000000000000000000000000000000 00000000000000000000000000000000c0c0c000c0c0c0c0c00000c0c0c0c00c00c000c0c0c000c0c0000000c000000000000000000000000000000000000000 007000000000000700000000000000cc000c70cc00c0c0c0c00000ccc00cc007000cc0c0c0ccc0c0c00000cc0070000000000007000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000700000000000000070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000066666600766666000006666660066666600000666000006666666666000000666000006666660000000000000000000000000000 00000000000000000000000066666600666666000006666660066666600000666000006666666666000000666000006666660000000000000000000000000000 00000000007000000000000066666600666666660006666660066666600706000660006660000000600006666660006666666600000000000000000000000000 00000000000000000000000066666600666666660006666660066666600006000660006660000000600006666660006666666600000000000000000000000000 00000000000000000000000000666000666000666600066600000666000666000666606660000000600666000666006660006666000000000000000000000000 00000000000000000000000000666000666000666600066600000666000666000666606660000000600666000666006660006666000000000000000000000000 00000000000000000000700000666000666000006600066600000666000666000666606666666666600666000666006660000066000000000000000000070000 00000000000000000000000000666000666000006600066600000666000666000666606666666666600666000666006660000066000000000000000000000000 00000000000000000000000000666000676700006600066600000666000666666666606676666600000666000666006660000066000000000000000000000000 00000000000000000000000000666000666000006600066600000666000666666666606666666600000666000666006660000066000000000000000000000000 00000000070070000000000000666000666700666600066600000666070666000666606660066670000666000666006660006666000000000000000000000000 00000000000000000000000000666000666000666600066600000666000666000666606660066600000666000666006660006666000000000000000000000000 00007000000007000000000066666600666666660006666670000666000666007666606660000666000006666660006666666600000000000000000000000000 00000000000000000000000066666600666666660006666660000666000666000666606660000666000006666660006666666600000000000000000000000000 00000000000000000000000066666600666666700006666660000666000666000666606660000076600000666000007666660000000000000000000070000000 00000000000000000000000066666600666666000006666660000666000666000666606660000066600000666000006666660000000000000000000000000000 00000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000700000000070000000000000000000000000000700000007000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000700000008880000000000000000000000000000000000070000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000008880000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000008870000070000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000008880000008888888888880000000008888888888880000000000000000000000000000000000000000000000 00000000000000070000000000000000000000008880000008888888888887000000008888888888880000700000000000000000000000700007000000000000 00000000000000000000000000000000000000008880000008888888888880000000008888888888880000000000000000000000000000000000000000000000 00000000000000000000007007070000000000000000008880000000000008880000000000000000008880000000000000000000007000000000000000000000 00000000000000000000000000000000000000000000008880000000000008880000000000000000008880000000000000000000000000000000000000000000 00000000000007000000000000000000000000000000008880000000000008880000000000000000708880000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000008880000000000008880000000000000000008880000000000000000000000000000000000000000000 00000000000000000000000070000000000000000000008880000000000008880000000000000000008880000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000008880000000000008880000000000000000008880000000000000000000000000000000000000000000 00000000007000000000000000000000000000000000000008888888888880000000078888888888888880000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000008888888888880000000008888888888888880000000000000000000000000000000000000000000 00000000000000070000000000000000000000000000000008888888888880000000008888888888888880000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000008880000000000008880000000000000000008880000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000008880000000000008880000000000000000008880070000000000000000000000000000070000000000 00000000000000000000000000000000000000000000008880000000000008880000000000000000008880000000000000000000000000000000000000000000 00000000000000000000000070000000000000007000008880000000000008880000000000007700008880000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000008880000000000008880000000000000000008880000000000000000000000000000000000000000000 00000000000000000000000000000000000700000000008880000000007008880000000000000000008880000007007000000000000000000000000000000000 00000000000000000000000000000000000000000000000008888888888880000000008888888888880000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000700008888888888880000000008888888888780000000000000000000000000000700000000000000000 00000000000000000000000000000000000000000000000008888888888880000000008888888888880000000000000000000000000000000000000000000000 00000000000000000000700000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000700700000000000000000700700000000000000000000000000000000000000000000000000000000070000007000700 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000070000000707000000000000000000000000000000000000000000000000007007000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000070000000000000000000070000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000007000000000000000000000000000000000000000000000000000000700000000000000000000000000000700000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 07000000000000000000000000000000000000000000000000070000000000000000000000000000000700000000000000000000000000000000000000000070 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000700000000000000000000000000000000000070000000000000000000700000000007000000070000000007000000007000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000070000000000000000070000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000700000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00007000000000000000000000000007000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000007000000700 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007000000000070000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000070000000000000000007000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 __map__ 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000010101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000010101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 __sfx__ 000f00001d0501f0502203024030270302703027030220302203022030240302703027030240302203024030290302903027030240302203024030290302b030270302403022030290302b0302b0302703022030 310f00001340227402274022953227402274022740229532004020000200002295320000200002295322953200002000020000229532000020000200002295320000200002000022953200002000022953229532 001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0004000000600006000060000600186501d65022650276502b6502f6502f6502c6502c6502c6502b6502b6502965027650236501e6501c6500060000600006000060000600006000060000600006000060000600 __music__ 00 00014344