packbat: Photo of self in front of a brick wall looking out. (three-quarter)
Monday, March 15th, 2021 09:20 pm

Biggest thing going on right now is we're trying to start a new project with our PICO-8 creating, which is finishing carts. Like, within that project there are other projects - we're making a deck of pixel art cards for solitaire - but the goal is to finish things.

Current strategy is to achieve tangible progress every day. That is: the cart does something - even if it's as small as having a new sprite - that it didn't do before. We can do other stuff but we have to do that.


I don't think we mentioned No Video Jam 2. It's an audio game jam on itch.io - the challenge is to create a game that's completely playable without any visuals. It's a pretty different game space, but it feels feasible to do.

We kind of want to do it in PICO-8 because we're comfortable with that tool.

Speech synthesis is a problem. We can't really see a way around having language communication for menus and tutorial information and the like.

(The recent discovery of serial audio support in PICO-8 does change that, but not yet.)

(LÖVE does have audio - directional audio, even, which would be really useful. Relearning how to use that would probably be easier than writing a speech synthesizer or LPC encoder+decoder in/for PICO-8 in time for the jam.)


...dunno what else to talk about here. Been mostly doing the same stuff.

packbat: A bat wearing a big asexual-flag (black-gray-white-purple) backpack. (packsnek)
Sunday, September 13th, 2020 03:36 pm

The Humble Store sent us a receipt for our purchase of Lexaloffle's PICO-8 fantasy console at 9:13 a.m. EDT on Wednesday, September 25, 2019.

Today - Sunday, September 13, 2020 - we happened to select the "carts" folder and opened the "Properties" window to see how much we've done in that time.

A Windows dialogue box showing that the "carts" folder contains 1.00 GB of data made up of 1609 files and 92 folders.

For lack of knowing what to say, here are some subsets of that:

  • 38 files, 2 folders, and 1.23 MB are made up of Lexaloffle's demos and various carts we downloaded off the Lexaloffle forums.
  • 36 files and 1 folder are from making and modifying the Cave Diver cart from the Game Development with PICO-8 zine.
  • 31 files and 2 folders are from the Mixed Feelings Jam we made Driftself for.
  • 15 files and 2 folders are from the Games Made Quick Jam we made Truck Drive Test for.
  • 232 files and 43 folders are from a single export of binaries for the Rain Gif cart.
  • 78 files and 8 folders are from the rest of the Rain Gif files.
  • 539 files, 11 folders, and 835 MB are made up of music compositions, exported .wav sound files of those compositions, and (mostly) .mp3 exports of those sound files made in Audacity.
  • 65 files and 1 folder are from various experiments with sound effects, mostly to support the composition stuff.
  • 218 files and 2 folders are from other experimentation, including some bug testing.

...we've done a lot in a year. We have a lot more thoughts about the assumptions of PICO-8 and the limitations of PICO-8, for good and ill. We also have a lot more experience writing code, composing music, and drawing pixel art. We have several projects done and shared with the world, several projects that are incomplete and being worked on, and a lot more that we've left idle or abandoned.

It's hard to figure out what we should say about all this, but it's clear that dropping PICO-8 into our life has catalyzed a hell of a lot of reactions in us. It's been significant.

packbat: A bat wearing a big asexual-flag (black-gray-white-purple) backpack. (Default)
Saturday, July 25th, 2020 10:29 pm

PICO-8 does not really have a concept of tempo with regard to music, it has a concept of time.

One PICO-8 music tick is approximately 1/120th of a second.[1] At 60 frames per second, that's about two ticks per frame; at 30 frames per second, that's about four ticks per frame.

This shows up in an SFX two ways:

  • The SPD of an SFX (a misleading name, gonna say that right upfront) is how many music ticks each line holds for. The default SPD is 16 - if you're thinking of each line as a sixteenth note in 4/4, that works out to about 112 BPM, which is a pretty normal allegro.
  • The two arpeggio effects - effect 6 being the faster one and 7 the slower one - hold each of their notes for 4 ticks or 8 ticks, respectively.[2] (Which is to say: a blur of notes or a rapid sequence of notes, respectively.[3]) How exactly this works actually gets really messy if the SPD of the SFX is not a multiple of 16[5].

There is a kind of third way, which is: if you use a custom SFX instrument, that instrument will go through its ticks as long as its note is held. So, for example, a custom SFX instrument at SPD=1 that goes through all 32 lines of its SFX will take two lines of a SPD=16 SFX to finish playing. You can match this kind of thing to the music being created - we've created both staccato and grace notes for a SPD=24 piece by scheduling things within 24 ticks of a SPD=1 SFX, and we've taken a custom drum SFX and set it to loop exactly the right number of lines to do a double-stroke on that drum in a single line of a piece.

While the arpeggio effects (mostly[2]) aren't, a lot of the effects - 1=slide, 3=drop, 4=fade in, and 5=fade out - are based on the SPD of the line where the effect is played. The volume and pitch of the note in a slide will transition linearly from the previous note's at the beginning of the line to the destination note over the length of the line; the pitching-down of a note in a drop will be stretched out over the length of the line; the fade-in and fade-out will be linear between 0 and the given volume over the length of the line. If a slide or fade is too quick, it can be spread out between multiple slides; if it is too slow, there's ... not much you can do, other than make a custom SFX instrument.

But that's basically how it works. PICO-8 sounds are scheduled pitches of specific timbres over periods of time measured in music ticks.

[1] We suspect, but cannot prove, that it is actually 183/22 050 seconds - that is, 183 sample points at 22.05 kHz, the sampling frequency of an exported PICO-8 .wav file. This could be an artifact of exporting, however.

[2] If arpeggios are used in an effect with SPD 8 or less, these times are halved to 2 and 4 and the arps cycle twice as fast.

[3] An exception to this: if multiple lines have the same pitch - say, two lines at C2[4] and two lines at B2 - those notes will hold over and therefore sound slower and longer.

[4] PICO-8's C2 is C4 - middle C - in scientific pitch notation. Because reasons.

[5] There are grids, starting at the start of each SFX, for fast-arpeggios and slow-arpeggios within those SFX. Notes in the arpeggio during a line with an arpeggio effect will be picked based on what lines of that arpeggio's grid they fall on. ...you might just have to try it and see if it works.

packbat: A bat wearing a big asexual-flag (black-gray-white-purple) backpack. (Default)
Wednesday, July 1st, 2020 09:06 pm
A snippet from PICO-8's music editor view, showing four channels each playing a note one after the next.

So, in PICO-8, each channel can only play one note at a time. There is technically a way to add hardware echo, but it's undocumented and pretty inflexible; it does one thing and that's it.

That said, there's actually no rule that a melody has to be contained in a single SFX channel.

A PICO-8 custom SFX instrument using the phaser and triangle wave instruments. It's not a difficult technique, just a bit tedious: in essence, one composes music with instruments that tail off in volume (in this case, first within the custom SFX instrument shown to the right, and then further in the SFXes where the instrument is played), decides how many SFX channels to dedicates to the piece, and then starts each note in each channel in turn, giving each previous note as long as possible to tail off while the others are playing. In the example up top, the first channel comes in on the first line, the second on the second, the third on the third, and then the fourth waits a moment and comes in on the fifth.

(If one note interrupts the tail of a prior one - cuts it off before it fully fades out - it's not a big deal. After all, this is the moment when the note is the most quiet, and therefore least noticeable and most easily drowned out by, say, the new note that just started playing.)

Where we've really been using this technique is in imitating string instruments with a lot of sustain, like guitars or maybe harps? It's a cool sound, anyway.

packbat: A bat wearing a big asexual-flag (black-gray-white-purple) backpack. (Default)
Sunday, June 21st, 2020 11:08 am

So, we've been making a lot of music in PICO-8, and it's kind of been illuminating when it comes to our understanding of music theory.

What is music theory? The point of music theory is explaining the experience of listening to music.

...no, that's half true. The point of music theory should be and often is that - but can be and sometimes (often?) is snobbish condescension. People do wield the tools of music theory to argue that another person's taste in music is Wrong™, an exercise that is (a) cruel, (b) philosophically indefensible, (c) a waste of time, and (d) an entirely valid reason for hating music theory. This essay is about the music theory that explains the experience of listening to music, though.

Anyway. The point of music theory is explaining the experience of listening to music, and doing that is ... I guess three skills? Listening to music, understanding what in the music creates the effects one is feeling, and articulating how it does that. And now that we actually say that ... wow, this is embarrassing.

We studied the vocabulary of music theory in college. How to articulate what music is doing. We started at that end, and we never really connected that back to the feeling of listening to music - we just learned rules. (Mostly part writing - a specific set of rules describing how musicians a few hundred years ago in the vaguely north-western part of Eurasia would create a sense of harmony as consonances formed out of the independent motion of multiple melodic lines. Part writing is extremely valid and a lot of fun, by the way.) So when we first started writing PICO-8 music, we ... okay, first we transcribed a section of an out-of-copyright piece to learn the UI, but next we tried to apply the chord progression rules we'd learned - this language for articulating a specific style for making each chord lead into the next - directly to the production of music with no idea how that would sound.

And it didn't sound how we wanted. Being able to articulate the rules that we'd been taught got us nowhere as far as making feelings that we wanted.

This was largely prompted by having watched a video about the Beatles and whether they knew music theory, a story which ties into our own experience tracking music in PICO-8. What the Beatles lacked, for the most part, was just and only an academic language for articulating what they were doing - they knew what feelings they were hearing, and they understood a great deal about how they could create those feelings with their music, but they couldn't on their own put that into standardized language.

And we ... understand a little bit about how to create feelings with our music. And a lot less than we expected about how to articulate the feelings we like that we create. The theory is helping a lot - knowing what notes are in standard tertian-harmony chords and what notes are in the scales of the modes of major and minor mean we can make a lot of good guesses as to what notes would fit with what notes are already there - but we're guessing and checking a lot. We're hearing something that we like and rolling with it. And we're putting a lot less weight on finding chord progression than shaping lines and finding chord progressions within them.

And sometimes we can articulate how an effect was achieved and often we can't.

...I think we might try to make something with an extremely standard chord progression just for fun. But we have to do it like we did that part writing piece we linked earlier: demanding that it sound right while we search the space of options within the rules, and editing-editing-editing until it does.

packbat: A headshot of an anthro bat-eared fox - large ears, tan fur, brown dreadlocks - with a shiny textured face visor curving down from zir forehead to a rounded snout. The visor is mostly black, but has large orange-brown ovals on its surface representing zir eyes. (batfox visor)
Tuesday, June 9th, 2020 11:10 pm

I think, in the context of PICO-8, the best definition of music may be "a schedule of sounds". Every PICO-8 music tick - by default, about 1/120 s - each of the four channels of the hypothetical sound card decides what sound it will be producing based on the instructions it was given and makes that sound happen. The job of a composer working in PICO-8 is to invent a schedule of sounds that produces the effect they want and state it as instructions using SFX and, usually, music patterns.

The range of possible detail at which these schedules may be written is pretty interesting. Something happening every 120th of a second is happening at 120 Hz, and a note playing at 120 Hz is actually only a little over an octave under middle C - by working at such a fine scale, a SPD of 1 tick per line, one designs sounds more than melodies. At the other end, a SPD of 255 ticks per line, the notes pass by so slowly that it becomes difficult to even understand them as a rhythm - as a steady pulse one could bob one's head to. There is enough room at both ends of the scale to design original sounds that take a fraction of a second to produce and, in theory, to schedule an hour's performance of sound in sixty-four patterns. There is that breadth of space.

packbat: A bat wearing a big asexual-flag (black-gray-white-purple) backpack. (backpack bat)
Monday, June 8th, 2020 11:58 am

"So, open source implementations of the API are great because it makes you feel safer that your cartridges are going to live forever and there's more things you can do with it. And, you know, in the long term, I'm, y'know, working hard to make sure that no one will lose their PICO-8 cartridges.

"But, ah, but there are good reasons for it being close source. Part of it is that there is a very large secret basement to PICO-8 that I don't want anyone to know about yet. (...please don't tell anyone.)" [audience laughter] "And also, I think if it was open source at this point, there would be many variations of PICO-8 that would sort of eat away at that shared experience. You know, everyone knows what PICO-8 is - how big a cartridge is, what the pallete and screen limitations are - and that why it's valuable, I think.

"So, over time, you know, it should be more open and fixable and safe, you know, safe in regards to preserving software; but it would be bad in the short term for that reason. So there's good and bad things about the open source business."

- Joseph White, PRACTICE 2018

The longer we have spent working with PICO-8 as a tool, the more we've come to appreciate that the virtual console idea is really the least important part of what PICO-8 does. "Virtual console" is a framing for communicating about PICO-8 - for telling us, people who are not Joseph White, that the thing he made will put restrictions on us, that it's not designed to use the full power of our computers, and that what we make with it is fully ours rather than just mods on someone else's thing - but PICO-8 was not designed to help people make games they would have made on the NES or Apple II or Commodore 64 or Amiga 1000 more conveniently.

PICO-8 was designed to inspire.

It won't do that for everyone, and that's fine - nothing will inspire everyone - but:

  • PICO-8's restrictions are there to condense the space of possibilities into one with a greater density of joy, and therefore to inspire.
  • PICO-8's scale is small to make small projects fun - you can't do much, so doing a little feels allowed, feels significant, feels worth being inspired about.
  • PICO-8's scale is small to keep it light - much of the optimization is done for you, so you don't have let the 'am I going make people's computers grind to a halt?' question get in the way of your inspiration.
  • PICO-8's options are restricted, so you can become familiar with all the pieces and connect any idea you have with what pieces it would use - and use the pieces themselves to inspire new ideas.
  • PICO-8 carts are easy to share, which means that there are a lot of them, which means that folks like us can get a feeling for "this exists, has an identity, and is available to anyone - and I'm an anyone, and I can play too".
  • PICO-8 makes a space for you. A new cart in PICO-8 has no source code, nothing on the map, and only eight pixels of a single "fyi this sprite won't work on the map" sprite drawn on the sprite sheet. You start it up or type "REBOOT" and there is nothing to clear out of your way before you start.
  • PICO-8 has competent documentation. ...*flails wildly* that is so useful and it frustrates me when tools don't have that. If you want to do something in PICO-8, you can probably look up what you need to know in the PICO-8 manual, and if it's not in the manual, it's probably in the regularly-updated-and-fairly-comprehensive wiki. You don't have to stop being inspired to go try to find a person who's available and willing to explain how something works - you can just read how to do it and do it.

There are a lot of reasons to not use PICO-8 - we have plenty of game ideas that we cannot fit on a 128x128 pixel screen or in a 32kb file, for example - but for anyone designing one, the words "virtual console" I think become an impediment to understanding PICO-8 and why it works. It works because it exists to inspire.

packbat: A headshot of an anthro bat-eared fox - large ears, tan fur, brown dreadlocks - with a shiny textured face visor curving down from zir forehead to a rounded snout. The visor is mostly black, but has large orange-brown ovals on its surface representing zir eyes. (batfox visor)
Monday, June 1st, 2020 11:13 pm

Too tired to originate anything new today, so we're gonna go through some of the PICO-8 carts on our hard drive that we've written and copy out comments that we find amusing. (Note: one of these is amusing to us for non-screen-reader-able reasons.)

Read more... )

Interesting to note how many of the comments on our code are exceedingly practical. Useful? We don't know yet. But they get to the point.

packbat: A headshot of an anthro bat-eared fox - large ears, tan fur, brown dreadlocks - with a shiny textured face visor curving down from zir forehead to a rounded snout. The visor is mostly black, but has large orange-brown ovals on its surface representing zir eyes. (batfox visor)
Sunday, September 29th, 2019 12:24 pm

New Patreon post: the game I made and modified from a PICO-8 tutorial. Animated GIF in link.