HIVE PICO-8 Tutorial
§1–4
1: intro & what it means to be ready to code
supercoolgame.p8
cls(8) print("jello mold")
2a: functions & the coordinate system
circlesinouterspace.p8
function _draw() cls(1) circfill(0,0,30,9) circ(64,64,10,8) circ(64,64,11,8) circfill(127,127,rnd(30)+30,11) end
Merit Badge Challenge 2a ★
BABY'S FIRST ABSTRACTION Refer to principles of composition and design in assembling a cool pixel artwork with just colors, circles, random functions and math.
2b: a few more functions for your starter pack
circlesinouterspace.p8
cls(1) function _draw() circfill(0,0,30,9) circ(64,64,10,8) circ(64,64,11,8) line(64,64,rnd(128),rnd(128),14) line(rnd(128),rnd(128),14) line(rnd(128),rnd(128),14) line(rnd(128),rnd(128),14) line(rnd(128),rnd(128),14) line(rnd(128),rnd(128),14) color(1) pset(rnd(128),rnd(128)) pset(rnd(128),rnd(128)) pset(rnd(128),rnd(128)) pset(rnd(128),rnd(128)) pset(rnd(128),rnd(128)) pset(rnd(128),rnd(128)) pset(rnd(128),rnd(128),7) circfill(127,127,rnd(10)+60,15) circ(127,127,rnd(10)+40,7) circfill(127,127,10+rnd(20),7) end
Merit Badge Challenge 2b ★
BASIC ABSTRACTION Make a variation on your earlier composition with more functions. Extra points for using functions not yet covered.
3: stashing stuff with variables
16mm_windy.p8
numbur =0 function _draw() cls(0) wobble_x=rnd(4) wobble_y=rnd(4) numbur=numbur+1 rectfill(64-30,40,64+30,80,13) rectfill(64-24+wobble_x,42+wobble_y,64+24+wobble_x,76+wobble_y,7) print(numbur, 70+wobble_x,70+wobble_y,13) end
Merit Badge Challenge 3 ★★
VARIABLE ABSTRACTION How can slowly changing variables level up your abstract composition game?
4a: loops & conditional statements
petrixels2.p8
cls(7) -- seed the agar for start=0,25,1 do pset(rnd(128),rnd(128),0) end -- speed grabbing=2000 function _draw() for grab=0,grabbing,1 do local x=rnd(128) local y=rnd(128) local c=pget(x,y) if c~=7 then circfill(x,y,1,0) end end end
Merit Badge Challenge 4a ★★★
LOOPY ABSTRACTION Make an abstraction in which a variable changes over time, something checks against something else before making decisions one way or another.
4b: interactivity
petrixels3.p8
cls(7) -- seed the agar for start=0,25,1 do pset(rnd(128),rnd(128),rnd(16)) end -- hit x to pour bleach! function _update() if btn(❎) then for glog=0,10,1 do circfill(rnd(128),rnd(128),rnd(15),7) end for glog=0,30,1 do pset(rnd(128),rnd(128),7) end end end -- speed grabbing=2000 function _draw() for grab=0,grabbing,1 do local x=rnd(128) local y=rnd(128) local c=pget(x,y) if c~=7 then circfill(x,y,1,c) end end end
Merit Badge Challenge 4b ★★★★
REACTIVE ABSTRACTION Make an abstraction in which audience/player input (pressing arrow keys) changes some variable (circle moves left/right)
4c: sine & cosine for angle math in coordinate space
grab_neighboring_pixels_with_a_for.p8
x=105 y=96 dist=1 cls(7) -- poke only ordinal directions pset(x,y,12) for arc=0,.75,.25 do pset(sin(arc)*dist+x,cos(arc)*dist+y, 9) print(sin(arc)..","..cos(arc)) end -- poke all 8 pixels around, -- including diagonally x+=10 pset(x,y,11) for arc=0,.875,.125 do pset(sin(arc)*dist+x+.5,cos(arc)*dist+y+.5,14) print(sin(arc)..","..cos(arc)) end -- poke only diagonals x-=5 y+=7 pset(x,y,8) for arc=.125,.875,.25 do pset(sin(arc)*dist+x+.5,cos(arc)*dist+y+.5,13) print(sin(arc)..","..cos(arc)) end
petrixels4.p8
cls(7) for start=0,25,1 do pset(rnd(128),rnd(128),rnd(16)) end function _update() if btn(❎) then for glog=0,10,1 do circfill(rnd(128),rnd(128),rnd(15),7) end for glog=0,30,1 do pset(rnd(128),rnd(128),7) end end end grabbing=250 function _draw() for grab=0,grabbing,1 do local x=flr(rnd(128)) local y=flr(rnd(128)) local c=pget(x,y) if c~=7 then local neigh_c local neighs = 0 for arc=0,.875,.125 do neigh_c = pget(sin(arc)+x+.5,cos(arc)+y+.5) if neigh_c == c then neighs+=1 end end if neighs>6 then --[[ q w e r t y u i o p …∧░➡️⧗▤⬆️☉🅾️◆ a s d f g h j k l █★⬇️✽●♥웃⌂⬅️ z x c v b n m ▥❎🐱ˇ▒♪😐 ]]-- print("░",x-3,y-flr(rnd(4)),c) else circfill(x,y,neighs/4+1,c) end end end end
Merit Badge Challenge 4c ★★★★★
ANGULAR ABSTRACTION Make an abstraction that uses sin and cosin to convert angle information into coordinates to some end.