HIVE PICO-8 Tutorial
§6
6a: map, sprites & palette swapping
cloudly.p8
function _draw() --bg cls(1) circfill(84,20,5,10) rectfill(0,90,127,127,0) --map palt(0, false) palt(1, true) pal(13,0) map(0,0,0,0,16,16) palt() pal() --cloud spr(0,50,0,4,4) end function _update() end
Merit Badge Challenge 6a ★★★
LANDSCAPE! Draw a landscape scene using the map and tiled sprites. Consider the time of day, weather, principles of composition. Use palette shenanigans to print black.
6b: simple timers & palette cycling
cloudly.p8
cloudx=128
cloud=0
flash=false
flashdown=100
function _draw()
--bg
cls(flash and 3 or 1)
circfill(84,20,5,10)
rectfill(0,90,127,127,flash and 14 or 0)
--map
palt(0, false)
palt(1, true)
if not flash then
pal(13,0)
end
map(0,0,0,0,16,16)
palt()
pal()
--cloud
if flash then
pal(6,7)
pal(13,7)
end
pal()
spr(cloud,cloudx,0,4,4)
flash=false
end
function _update()
--cloudcode
cloudx-=.3333
if cloudx < -32 then
cloudx=128+RND(20)
cloud=flr(rnd(3))*4
end
--flash counter
flashdown-=1
if flashdown <= 0 then
flash=true
flashdown=rnd()<.4 and rnd(100) or rnd(20)
end
end
Merit Badge Challenge 6b ★★★
KINETIC LANDSCAPE using timers and palette cycling breathe life into your landscape.
6c: custom functions & powers of recursion
cloudly.p8
cloudx=128
cloud=0
flash=false
flashdown=100
function _draw()
--bg
cls(flash and 3 or 1)
circfill(84,20,5,10)
rectfill(0,90,127,127,flash and 14 or 0)
--map
palt(0, false)
palt(1, true)
if not flash then
pal(13,0)
end
map(0,0,0,0,16,16)
if flash and rnd()<.2 then
spr(218,rnd(120)+4,72+rnd(44),1,3)
end
palt()
pal()
--cloud
if flash then
pal(6,7)
pal(13,7)
lightning(cloudx+16,20)
end
pal()
spr(cloud,cloudx,0,4,4)
flash=false
end
function _update()
--cloudcode
cloudx-=.3333
if cloudx < -32 then
cloudx=128+RND(20)
cloud=flr(rnd(3))*4
end
--flash counter
flashdown-=1
if flashdown <= 0 then
flash=true
flashdown=rnd()<.4 and rnd(100) or rnd(20)
end
end
function lightning(x,y)
local newx=x+(rnd(2)-1)*16
local newy=y+(rnd(2)-.3)*10
line(x,y,newx,newy,rnd(7)+8)
if newy<110 then
lightning(newx,newy)
if rnd()<.1 then
lightning(newx,newy)
end
end
end
Merit Badge Challenge 6c ★★★
ENCAPSULATED BEHAVIORS WORKSHOP Describe your custom functions to the HIVELORDS (see 6c+)
Merit Badge Challenge 6c+ ★★★★
ENCAPSULATED BEHAVIORS Create some custom functions that allow you to repeat some bit of code or behavior efficiently again under varied circumstances, that is to say with different parameter inputs. Can you create a stable recursion (ie one that doesn't crash the program)?