@zep@mastodon.social
@zep@mastodon.social avatar

zep

@zep@mastodon.social

Working on fantasy consoles (PICO-8, Voxatron, Picotron) and trying to make my way back to userland. https://www.lexaloffle.com

#indiedev #pico8 #gamedev

This profile is from a federated server and may be incomplete. Browse more on the original instance.

zep, to random
@zep@mastodon.social avatar

I tried to make a #pico8 game in 20 seconds for #20secondgamejam, but I went 53 seconds over budget.

pico-8 editor being used to make a crappy game where a pink spaceship crashes into rocks

zep, to random
@zep@mastodon.social avatar

WIP #picotron waveshaping & envelopes (thx @luchak for the idea of going hard cut -> foldback)

https://youtu.be/UZ9YIaLpWmA

zep, to random
@zep@mastodon.social avatar

lexaloffle.com is being pummeled by weird reqs today ~ is it because cloudflare's dashboard is down and bad actors are treating it like the purge?

(the server seems to be coping fine, but I turned up rate limiting so log in if you want to do many searches or something)

zep,
@zep@mastodon.social avatar

// especially large groups of ips spamming search fields with a seemingly random dictionary of search terms. WHY?

zep,
@zep@mastodon.social avatar

@Felice aha! That sounds plausible ~ thanks for putting my mind at rest :}

zep,
@zep@mastodon.social avatar

@frew the Bard crawler was using your service's search feature? That seems very aggressive!
No useragent though -- just being curl'ed (and the ip address ranges don't belong to anyone obvious), so probably just spammers.

zep, to random
@zep@mastodon.social avatar

Ahh, the simple pleasures of making seasonal adjustments to your desktop theme. #picotron

Picotron desktop showing a 8x8 repeating wallpaper pattern being edited by a theme editing app.

zep,
@zep@mastodon.social avatar

//
The changes can be in realtime because the current theme settings are stored in a lightweight ram disk file (/ram/system/theme.pod) that the theme editor app is allowed to overwrite every frame, and the desktop wallpaper app (also p64 cartridge, like everything else) can cheaply read those changes.

Apps can alternatively send each other messages addressed by process id, but writing to /ram is a good way to publicly share data with any other process who might care to poll for changes.

zep,
@zep@mastodon.social avatar

@rollbrettklauen It's a new (WIP) thing! picotron.net

zep,
@zep@mastodon.social avatar

@Liquidream yes, exactly. Although, there will need to be some restrictions on access from something run straight out of splore, so not yet sure how useful it will be in that context :D

zep,
@zep@mastodon.social avatar

@rollbrettklauen it's basically the same model as pico-8: the c runtime/lua interp is compiled to wasm, and exported cartridges are that runtime packaged with the cartridge data.

And yeah, interpreted Lua is really fine for a lot of things! ~ with a bit of care, enforced by picotron's "cpu" limits >:-)

zep,
@zep@mastodon.social avatar

@waporwave it's a different cafe, pico pico was never that busy! Oh, that's too bad. We've been closed since 2020, but had quite unstable opening hours before that (depending on how lexaloffle was going :D )

zep, to random
@zep@mastodon.social avatar

Working on #picotron's .p64 cartridge files: a simple text format that is git-friendly and human-readable/hackable if needed. .lua & .txt entries are dumped verbatim, and everything else is base64-encoded.

Normally you don't need to interact with them at this level -- inside picotron, the .p64 cart is a logically a folder (you can "cp mycart.p64/gfx/sprites.gfx yourcart.p64/gfx" etc.)

zep,
@zep@mastodon.social avatar

@jamesgecko being simple to generate is definitely a consideration -- there is a hexadecimal option for writing binary files too if base64 is annoying.

The files inside can be quite complex though (lz4 encoded object data of varying forms), so being able to reliably /read/ it is a different matter.

zep,
@zep@mastodon.social avatar

@fsouchu yep -- the working cartridge folder can be mounted as a regular folder on host (> mount /ram/cart /foo), exposing everything in foo as regular files that can be edited with external editors.

zep,
@zep@mastodon.social avatar

@Felice Unfortunately resources are normally already compressed (rle + lz4), so the single byte change problem still happens regardless of encoding.

Resource files are normally quite small though -- a 256x16x16 spritebank is ~24k compressed and so on average 12k would be stored in a diff for a random pixel change (expanded to 16k in base64, or 24k in hex).

zep, to random
@zep@mastodon.social avatar
zep,
@zep@mastodon.social avatar

@waporwave you didn't speak too soon, it is indeed currently impossible! But I have a possible plan for that later if it seems needed: an envelope type that maps pitch or volume to an output value; so it would be possible to get e.g. FM OSC that is only audible on a note or volume range.

zep,
@zep@mastodon.social avatar

@waporwave There is definitely a lot of overlap between env types -- e.g. I also kinda want to be able to control attack on the amp & frequency etc. for either.

LFO is supposed to be the one "simple" go-to option for a lot of common situations, but I think the answer will just be information hiding (a fold-out section with advanced knobs and loop points etc)

zep,
@zep@mastodon.social avatar

@jlamores So far there's just a bit on each knob that means "select randomly in this range", but it is already quite useful for getting things like subtle tonal variation. It works for pitch too of course, but would be nice to have something like a scale mask. hrrrm.

zep,
@zep@mastodon.social avatar

@waporwave I went down a bit of a rabbithole with this; thanks for your thoughts :)
If you're curious, here's an updated version I like much better that has a unified envelope header and also pitch controlled parameters (+ volume,x,y-controlled parameters, where x & y are general purpose meta-parameters controllable via tracker commands).

https://www.lexaloffle.com/dl/docs/picotron_synth.html

zep,
@zep@mastodon.social avatar

@luchak That's extremely interesting, thanks! It would be nice to offer something like this out of the box and fits in nicely with the current shape parameter ("elbow" -- I should rename that). I also really like the idea of allowing wavetables to be used as shaping look-up tables.

zep,
@zep@mastodon.social avatar

@luchak Ha -- that's a nice way to put it. I'm putting aliasing closer to the feature (character, performance) end of the continuum:

  • lerp between wave samples / not between wavetable entries
  • no cutoff parameters or eq
  • lerp between envelope points (but bits reserved for alt interpolation in future)

There will be some wiggle room though if it turns out there are common gripes that are worth spending cpu / complexity on.

zep, to random
@zep@mastodon.social avatar

Writing some notes on #picotron audio, and some sections are mostly just warnings.

zep,
@zep@mastodon.social avatar

@Liquidream Here you go:
https://www.lexaloffle.com/dl/docs/picotron_synth.html

// The other manuals will get that feature next time they are updated :)

Farbs, to random
@Farbs@mastodon.social avatar

@zep Hello! I'm writing a Lua-based game framework and seeing some stutters that look suspiciously like garbage collection. Do you have any tips on either GC tuning or custom allocators?

zep,
@zep@mastodon.social avatar

@Farbs Maybe too late to be useful but..
I think simply collecting every frame isn't a bad strategy; minimize worst-case spikes at the cost of perf over time.

PICO-8 uses the standard 5.2 incremental collector lua_gc(L, LUA_GCSTEP, 200), and falls back to a full collects if the incremental can't keep up (i.e. keeps hitting the 2MB max allocation threshold)

I tried an adaptive step amount, but that causes all kinds of chaotic behavior for carts with irregular allocation patterns.

  • All
  • Subscribed
  • Moderated
  • Favorites
  • JUstTest
  • Leos
  • mdbf
  • osvaldo12
  • magazineikmin
  • tacticalgear
  • rosin
  • everett
  • Youngstown
  • InstantRegret
  • slotface
  • ngwrru68w68
  • kavyap
  • DreamBathrooms
  • normalnudes
  • thenastyranch
  • ethstaker
  • GTA5RPClips
  • cisconetworking
  • Durango
  • khanakhh
  • tester
  • provamag3
  • cubers
  • modclub
  • anitta
  • megavids
  • lostlight
  • All magazines