actavis.dev
I do matching decompilation and reverse engineering, mostly PlayStation 1. The idea is to write C that compiles to the exact bytes the original build produced, which means a lot of MIPS R3000, overlay layouts, and coaxing a 1997 compiler into agreeing with you. Outside of that I'm into consoles, emulation, and tooling that sits close to the hardware.
Prototype notes
Uploading music
Make an R2 bucket, enable public access, and add a CORS rule allowing
GET from https://actavis.dev. Drag your files in,
then paste each public URL into SOUNDTRACK at the top of the
script. The moment a url is non-null that entry plays the real
file instead of the synth — the meter and background pulse are unchanged,
because both routes feed the same analyser.
The CORS rule is not optional: without it the browser taints the stream, the analyser reads pure silence, and the visuals sit dead while the audio plays fine. That symptom is almost always CORS.
On the FF7 soundtrack
Worth knowing before you plan around it: the PS1 music is not audio files. It is AKAO sequence data driving the SPU, so there is nothing on the disc to copy — it has to be rendered. And a public bucket serving the commercial soundtrack is straightforward infringement, disc or no disc, with your Cloudflare account as the thing at risk. Music you made, covers you performed, or licensed tracks all drop straight into the same list.
Audio fallback
What you're hearing is synthesised in the browser, not recordings — the
analyser needs real signal to react to, and shipping the actual
soundtrack isn't something you can host publicly. The file list is the
playlist: point SOUNDTRACK at your own rendered audio and
everything else keeps working.
Rendering the music
FF7's PS1 music isn't CD audio — it's AKAO sequence data driving the SPU, which is why there are no ready-made files on the disc. You'd render them from your own copy first. Fitting, given the sound driver is part of the decomp.
Decomp progress
Real numbers, hardcoded for now. Any decomp repo running objdiff emits a
report.json — have CI publish it and fetch it here instead.
GitHub activity
The contribution graph isn't in the public REST API; it needs the GraphQL
contributionsCollection field, which needs a token. Keep the
token as a Cloudflare Worker secret and let the page call the Worker, so
it never ships to the browser.