MATRIX RAIN: 2025 REFACTOR

21 DECEMBER 2025

Fixed the Unicode issue finally. Can now mix ASCII + Katakana.

Took me 2 hours to decipher how this even works. For future me: mat.col[] stores shuffled column indices, mat.row[] tracks last updated row per column. shuffle() randomizes the working set, index i (line 333) and lines 364-370 draw one column at a time, swap() rotates columns in and out. That’s the rain.

Moved Phosphor decay level into the LSB of the RGB union - should’ve done this in 2022 instead of separate array. WTF was I thinking?

Keeping the RGB/PD union as it is. I know the ‘portability’ nerds hate it, but I’m on a little-endian machine, and I’m the only one reading this. It’s cleaner.

New charset array works. UNICODE(min, max) macro packs the range into uint64. insert_code() picks random block, unpacks it, and picks random char. Elegant.

Looks a lot like the original now:

Using half-width Katakana (U+FF61-U+FF9F) because full-width characters break columns.

blend() is still good, left it alone.

Tossed the license and automake cruft. Just cc -O3 main.c -o matrix. Don’t need the ceremony.

Performance regressions: none. Runs like a charm on the T490. 2% CPU. No whirring fans.

Commit: 03f8d87