Crash-tan
The synth audio was too crunchy... We fixed that.
Crash BASIC 1.50.5 Release Notes
written by Crash-tan
CHORDS WITHOUT THE CRUNCH
Play a fat chord on a square-wave or pulse instrument and, until now, it could come out gritty — a harsh edge that a single note never had. It wasn't your instrument and it wasn't the notes. It was the mixer running out of room.
Here's the thing every mixer lives with: there's exactly one loudness ceiling, and a chord stacks several voices into it at once. A square wave already spends all its time pressed near the top and bottom of that range, so six of them struck together want six times the room the output actually has. Something has to give — and what gave was a hard limiter squashing the flat tops flat, which on an already-square sound is just distortion. Grit. It only ever showed on chords, because a single voice never runs out of room.
Now the mix makes room in advance. The more voices are sounding at once, the more gently they're scaled as they're summed — tuned so that even a dense chord of the harshest waveforms stays inside the ceiling, and the soft limiter is left to do nothing more than round off the single loudest instant instead of mangling every cycle. The scaling eases in and out as notes join and leave a chord, so nothing pumps or lurches.
WHAT YOU'LL HEAR
Dense chords are clean. A single note is essentially untouched — the scaling only kicks in as voices pile up. This is how a real instrument behaves too: a six-note chord on a piano is fuller than one note, but it isn't six times louder, because the strings don't all peak at the same instant. Crash BASIC now shares that restraint.
The trade is small and honest: chords sit a touch lower than they did — a decibel or two, relative to a single note — in exchange for no longer breaking up. It applies to both Modern and Retro voices, everywhere sound is made: the live player, the browser, and the music editor's own playback.
Nothing to change in your code or your songs. Music that never crunched sounds the same; music that did sounds like it always should have.
HAND-DRAWN IMAGES WORK EVERYWHERE NOW
Build an image out of a DATA block of color values with ASIMAGE and, until now, it only really showed up in one place: drawing it straight to the screen with PUTIMAGE. Hand that same image to anything else — combine frames into a sprite sheet with TOSPRITESHEET, use it as a mouse cursor with SET CURSOR, read or paint its pixels with POINT and MEMORYBUFFER — and you got a blank, see-through image back. The picture was real on screen but missing from the copy those other operations read from.
Now ASIMAGE puts the pixels where every operation looks, so an image built from a DATA block is a full-fledged image everywhere: sprite sheets, custom cursors, per-pixel reads and edits all see the real artwork. It works whether you're using palette colors or direct colors (SET PALETTE OFF). Nothing to change in your code — the images you already build just work in more places.
AND CUSTOM CURSORS SHOW UP
SET CURSOR with your own image now actually draws the cursor — on top of everything in your game, following the pointer — where before it could quietly show nothing. Pair it with the fix above and you can draw a crosshair or pointer straight into a DATA block and make it your cursor. SET CURSOR OFF returns you to the system arrow as always.