From 8e3f47e3b76154da225ef5acda690d5e20454bf0 Mon Sep 17 00:00:00 2001 From: Sadeep Madurange Date: Sat, 13 Dec 2025 11:18:22 +0800 Subject: wip: matrix. --- _projects/matrix-digital-rain.md | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) (limited to '_projects/matrix-digital-rain.md') diff --git a/_projects/matrix-digital-rain.md b/_projects/matrix-digital-rain.md index 35a3d97..7c5f295 100644 --- a/_projects/matrix-digital-rain.md +++ b/_projects/matrix-digital-rain.md @@ -6,37 +6,43 @@ layout: post --- "All I see is blonde, brunette, red head." The iconic digital rain from The -Matrix, implemented in C, without dependencies (not even ncurses). +Matrix implemented in C without dependencies (not even ncurses). -This project is a fork of Domsson's beautiful Fakesteak. Use the following commands to compile -and run the program: +rel="noopener noreferrer">Fakesteak. As I was going through the fakesteak +code, I thought about what it might take to recreate the original rain from the +first Matrix movie without losing the program's minimalism and elegance. + +My version of the matrix has the following features: + + - Unicode characters. + - Fully customizable 24-bit RGB (truecolor) colors. + - Glitches in the matrix. + - Ghosting effect of old monochrome displays. + - Closely resembles the one seen in the background while Neo and Cypher were + talking in the first Matrix movie. + +As there are no dependencies, you can compile and run it however you want: ``` $ cc -O3 main.c -o matrix $ ./matrix ``` -While I loved Domsson's take on the -digital rain, what blew my mind was the minimalistic elegance of his code. As I -carefully examined it, I thought about what it might take to recreate the -original digital rain from the first Matrix movie with it. The challenge is -adding these features without destroying fakesteak's elegance. - ## How does it work? -The `matrix` struct makes use of three 2D arrays to encode the Matrix: the -`code` array for 32-bit Unicode characters, the `rgb` array for 24-bit RGB -values of the character (foreground color), and the `shade` array for the -degree of transparency of the character to simulate the ghosting effect of old -monochrome displays. The dimensions of these arrays depend on the size of the -terminal screen. Each slot in the array corresponds to a cursor position on the -screen. +The `matrix` struct makes use of two 2D arrays to encode the Matrix: the `code` +array for 32-bit Unicode characters and the `rgb` array for RGB values of the +characters (foreground color). The dimensions of these arrays depend on the +size of the terminal window. Each slot in the array corresponds to a cursor +position on the screen. The ghosting effect, which is arguably the crowning feature of my version, is implemented by carefully scaling and mixing the RGB channels: -- cgit v1.2.3