Bury a dancing crow behind a wall of peanuts. This is what it wants.
Hey! This is an idle game designed to put the player in tension between queuing more actions (and hence making progress) and actually witnessing the gameplay.
Also, there's a chiptune. It incorporates Pico-8's built-in sound, but also some homemade synth code for the bassline.
Epilepsy warning: there's a little flashing, but all of it is localized to small areas of the screen. (under 16x16)
The crow consumed enough offerings to break reality and this is fine.
Hey seriously, could you explain your hoover code? I know the Alpha Juno sound involved a sawtooth wave amplitude modulated by PWM, so did you write it as sort of a bytebeat thing?
I don't know if there's much to explain for the hoover other than what's in the code! (Which is pretty short, if you scroll through the cart.)
It's two pulse waves x 0.125 where the transition point (pwm) is modulated over time, plus a sine wave x0.75. The two square waves are at slightly different frequencies, so you'll hear hoovering. After that, I saturate it a little with tbl[i]=tbl[i] * 0.5 + sgn(tbl[i])*sqrt(abs(tbl[i])) * 0.5
, which is just waveshaping by sqrt() at 50% wetness.
IMHO, the real trick here is that, because the 0x808 stuff is limited to 5512hz, and the sequencer melody is limited to 22khz, the hoover sounds intentionally lowpassed to make room for the melody. (so my mix accidentally sounds competent) There's a game by someone else called Aquaverge coming out in a few days where I wrote the soundtrack but didn't use the same trick, and the bassline (despite being in the same frequency range, and using similar elements) sounds a lot more abrasive.
The other trick here is just that moving in octaves (as I did in the second part) sounds full and adds a lot of rhythm without me compromising on loudness. It's also just a really good chord progression (I'm not self-praising in this case: it's a lift and simplification of the chords from All I Do by Stevie Wonder) and everything but the melody is in Pythagorean tuning, which is going to make it sound thick and wholesome.
Oh, and if you're not familiar with pcm nonsense in Pico 8, here's a quick demo cart! As an exercise for the reader, generate two square waves and one sin wave, then apply sqrt shaping instead:
-- pico 8 automatically muffles 0x808 audio, turn that off! poke(0x5f36,peek(0x5f36)|0x20) function _init() sw_pos=0 end function _update60() while stat(108)<stat(109) do local addr=0x8000 -- 140 hz, but add wobble local frequency=140+sin(time()*4)*4 -- 0x808 audio is at 5512 hz -- so there are 2x as many -- audio frames local base=5512*2 -- how much progress do we make on -- the waveform per audio frame? local ratio=frequency/base -- generate 32 frames of audio for _=0,31 do -- advance saw pos for this frame sw_pos+=ratio sw_pos%=1 -- generate saw from 0 to 1 local samp=sw_pos -- save one sample to memory -- (it has to be from 0 to 255 -- or 0x808 won't understand it!) local amp=flr(samp*255) poke(addr,amp) addr+=1 end -- send it to the audio output! serial(0x808,0x8000,32) end end |
[Please log in to post a comment]