Log In  
Follow
Hoatzin

Artist and Artistist. Maker of sublime internets and other less intangible arts.

:: Unfold ::

https://hive.saysi.org/pico8

I've been using PICO-8 to introduce teens to coding the traditional way, irl, for 5 years now. I've tried a lot of different ways of doing so: thru lecturing, found tutorials, providing a lot of boilerplate and letting kids play around with changing sprites and stuff, lots of 1-on-1... but I've been thinking long and hard about how to do it better.

I teach New Media at an after school art program (saysi.org) in an open studio environment that only superficially resembles a classroom. Students are a mix of teens of all ages and proficiencies and they do very little listening to instructors lecture and a lot of making stuff.

My students play games and dunning-kruger-ly imagine themselves capable of making them, but can be simultaneously terrified of anything that smells of math and can quickly get discouraged with the slightest bit of friction.

My ideal tutorial would introduce them to coding one concept at a time, but empower them to make creative doodles every step of the way, with whatever knowledge they've collected thus far. It would also free me from lecturing and allow me to do more troubleshooting and 1-on-1 in the studio. Not finding anything like that, I started my own little series. I have been putting them on Youtube for others to hopefully benefit from!

https://www.youtube.com/playlist?list=PLQIH9CiDAqf8LQYnbZ9GJ4XEfHXb7EdvZ

The source code and other PICO-8 resources we collected can be found on our PICO-8 portal: https://hive.saysi.org/pico8

I'd be happy to hear any feedback, especially from other teachers or beginner coders!

P#101493 2021-12-05 01:59

:: Unfold ::

Cart #porcelain_of_sisyphus-0 | 2021-02-22 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
8

The Porcelain of Sisyphus is the zen ocd music art germ game of 2021! Enjoy a li'l hell.

Featuring awesome musical stylings of @yeenmachine

Hold down ❎ to bleach the culture, 🅾️ to display the title (and sprinkle more grody pixels on the porcelain).

P#88016 2021-02-22 20:32 ( Edited 2021-02-23 02:52)

:: Unfold ::

Hey y'all, I'm gonna use this thread as my rubber ducky while I flail around figuring stuff out. Hopefully someone here has insight or I am missing something simple and solvable...

Cart #yajoziyoro-0 | 2021-02-11 | Code ▽ | Embed ▽ | No License
1

I've been trying to create the audio atmosphere where button being held down (x) turns on an otherwise muted music track. In theory this seemed easy. I feel like I am always one step away from a graceful solution, but keep making a mess.

I have created the function squeak(voil) that goes through the music memory and peeks and pokes its way to mute and unmute (aka voil) the particular channel on key press. This only works for the NEXT pattern however and not for the current pattern playing.

Alright, well, since I'm doing the peeking, I know the sfx that is supposed to be playing on the heretofore muted channel. I can just run an sfx call, offset by stat(20)—and then when the music call rolls over to the next pattern, the newly unmuted channel will just take over and everything will loop fine from that point on forever, but the music tag doesn't take over from the sfx.

Here's the action bits; mus_cycle(n) is the rudimentary state machine that is toggled on click. Full cart above.

function squeak(voil)
 printh("-------------------- "..(voil and "voil up" or "voil down"))
 -- printh(stat(24))
 local c=0
 local mus_trac,catchup=stat(24),0
 for mem=0x3102,0x31ff,4 do
  local v=peek(mem)
  local track = voil and band(v,0b111111) or bor(v,0b1000000)
  poke(mem, track)
  -- printh("poked "..mem.."     "..track)

  if(c==mus_trac) catchup=band(track,0b111111)
  c+=1
 end
 if voil then

  sfx(catchup,3,stat(20))
  -- printh(stat(19).." voil")
  printh(catchup.." "..stat(23).." / "..stat(26).." voil")
 else

  sfx(-1,3)
  sfx(-1,2)
  -- sfx(21,-2)
  -- printh(stat(19).." no voil")
  printh(catchup.." "..stat(23).." / "..stat(26).." no voil")
 end
 -- music(stat(24),0,stat(26))
 -- printh(stat(19))
end

mus_action=1
-- 1=nothing playing, 2=play nothing
-- 3=squeaky playing, 4=play squeaky
function mus_cycle(n)
 local boops={
  function()  end,
  function()
   squeak(false)
   mus_action=1
  end,
  function()  end,
  function()
   squeak(true)
   mus_action=3
  end
 }
 boops[n]()
end
  • Why is the music+sfx tune catchup solution tripping all over itself?
  • It feels like it works (loops form sfx to music) THE FIRST TIME, but then runs out of numbers or something?
  • Am I running out of channels and not realizing it? There should be a whole empty channel? I tried letting the engine decide where to play what and I tried explicitly nailing things down.

  • If I could have the music track start from a particular NOTE that would be great, but I can't and if I restart the music, I lose the rhythm.
  • I dunno what to make of stat(26), the values it is returning are weird.
  • I've been meaning to cache the mute/voil versions of the music and memcpy them into place as needed. Would that solve the issue however?
  • I really want to avoid having to manually serve one of the music channels through some kind of timer if I can get away with it...
  • But ugh how do people traditionally solve this kind of problem?
P#87392 2021-02-11 02:52 ( Edited 2021-02-11 02:55)

:: Unfold ::

Lately PICO8 will sometimes randomly crash, sometimes in a running game, sometimes in the editors. Full error in terminal shows up as:

-[MTLRenderPipelineDescriptorInternal validateWithDevice:]:2400: failed assertion `No valid pixelFormats set.'

I am running High Sierra (10.13.6) on a 2013 iMac.

P#85098 2020-12-06 21:46

:: Unfold ::

Cart #peketaweki-0 | 2020-05-05 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
7

Built on top of the Collide demo, Hrozgo's Helltruffles started life as a Zelda-like adventure game engine for my class to use and build upon. It has since ballooned in scope and complexity a bit into its own thing worth finishing. I am posting it here in a not very well commented state because it is almost a pretty solid framework that others could use to tell little stories.

Ask if you have any questions about what is going on in the code! Note that collisions are currently turned off but are there and can be made to work if you want them to...

It's practically entirely coded and put together on a pocketCHIP.

P#43590 2017-08-24 15:41 ( Edited 2020-05-05 17:49)

Follow Lexaloffle:          
Generated 2023-02-08 10:56:22 | 0.087s | Q:21