summaryrefslogtreecommitdiffstats
path: root/_site/log/matrix-digital-rain
diff options
context:
space:
mode:
authorSadeep Madurange <sadeep@asciimx.com>2025-12-20 21:36:45 +0800
committerSadeep Madurange <sadeep@asciimx.com>2025-12-20 21:36:45 +0800
commite15f1076b59e997108914f6a5b9b28652d323268 (patch)
tree294b0c5da8f8410ad0aab89dd2c5d107f581e083 /_site/log/matrix-digital-rain
parent31616ee1b8ff316d6558a0e7c87e4bd4211c9932 (diff)
downloadwww-e15f1076b59e997108914f6a5b9b28652d323268.tar.gz
Change website structure to a log.
Diffstat (limited to '_site/log/matrix-digital-rain')
-rw-r--r--_site/log/matrix-digital-rain/index.html148
-rw-r--r--_site/log/matrix-digital-rain/katakana.pngbin0 -> 133709 bytes
-rw-r--r--_site/log/matrix-digital-rain/matrix.mp4bin0 -> 930430 bytes
-rw-r--r--_site/log/matrix-digital-rain/poster.pngbin0 -> 70901 bytes
-rw-r--r--_site/log/matrix-digital-rain/source.tar.gzbin0 -> 2075 bytes
-rw-r--r--_site/log/matrix-digital-rain/thumb_sm.pngbin0 -> 22764 bytes
6 files changed, 148 insertions, 0 deletions
diff --git a/_site/log/matrix-digital-rain/index.html b/_site/log/matrix-digital-rain/index.html
new file mode 100644
index 0000000..26244b3
--- /dev/null
+++ b/_site/log/matrix-digital-rain/index.html
@@ -0,0 +1,148 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>The Matrix digital rain</title>
+
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>The Matrix digital rain</title>
+ <link rel="stylesheet" href="/assets/css/main.css">
+ <link rel="stylesheet" href="/assets/css/skeleton.css">
+</head>
+
+
+
+ </head>
+ <body>
+
+ <div id="nav-container" class="container">
+ <ul id="navlist" class="left">
+
+ <li >
+ <a href="/" class="link-decor-none">hme</a>
+ </li>
+ <li class="active">
+ <a href="/log/" class="link-decor-none">log</a>
+ </li>
+ <li >
+ <a href="/projects/" class="link-decor-none">poc</a>
+ </li>
+ <li >
+ <a href="/about/" class="link-decor-none">abt</a>
+ </li>
+ <li><a href="/feed.xml" class="link-decor-none">rss</a></li>
+ </ul>
+</div>
+
+
+
+ <main>
+ <div class="container">
+ <div class="container-2">
+ <h2 class="center" id="title">THE MATRIX DIGITAL RAIN</h2>
+ <h6 class="center">22 AUGUST 2022</h5>
+ <br>
+ <div class="twocol justify"><p>“All I see is blonde, brunette, red head.” The iconic digital rain from The
+Matrix in C, with zero dependencies—not even ncurses.</p>
+
+<video style="max-width:100%;" controls="" poster="poster.png">
+ <source src="matrix.mp4" type="video/mp4" />
+</video>
+
+<h2 id="overview">Overview</h2>
+
+<p>This is my fork of Domsson’s beautiful <a href="https://github.com/domsson/fakesteak" class="external" target="_blank" rel="noopener noreferrer">Fakesteak</a>. While going through his code, I
+wondered what it would take to faithfully recreate the original Matrix from the
+first movie without sacrificing its minimalism.</p>
+
+<p>My implementation supports:</p>
+
+<ul>
+ <li>Unicode characters.</li>
+ <li>24-bit RGB colors (truecolor).</li>
+ <li>Glitches in the matrix.</li>
+ <li>Ghosting effect of old monochrome CRT displays.</li>
+ <li>Closely resembles the Matrix seen in the background during Neo and Cypher’s
+conversation.</li>
+</ul>
+
+<p>With no dependencies, compilation is trivial:</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ cc -O3 main.c -o matrix
+$ ./matrix
+</code></pre></div></div>
+
+<h2 id="how-does-it-work">How does it work?</h2>
+
+<p>The program tracks the state of the terminal, such as code points, background
+and foreground colors, and cursor position, using multiple internal data
+buffers. On each frame, it updates these buffers and repaints the screen using
+ANSI escape codes:</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>static void term_print(const matrix *mat, size_t row, size_t col)
+{
+ size_t idx;
+ idx = mat_idx(mat, row, col);
+ wprintf(L"\x1b[%d;%dH\x1b[38;2;%d;%d;%dm%lc",
+ row, col,
+ mat-&gt;rgb[idx].color[R],
+ mat-&gt;rgb[idx].color[G],
+ mat-&gt;rgb[idx].color[B],
+ mat-&gt;code[idx]);
+}
+</code></pre></div></div>
+
+<p>The ghosting effect is achieved by carefully scaling the RGB
+channels before mixing them:</p>
+
+<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>static void mat_shade(matrix *mat, size_t row, size_t col)
+{
+ unsigned char *color;
+ color = mat-&gt;rgb[mat_idx(mat, row, col)].color;
+ color[R] = color[R] - (color[R] - COLOR_BG_RED) / 2;
+ color[G] = color[G] - (color[G] - COLOR_BG_GRN) / 2;
+ color[B] = color[B] - (color[B] - COLOR_BG_BLU) / 2;
+}
+</code></pre></div></div>
+
+<p>The ghosting function emulates the dim after glow by gradually transitioning
+each raindrop’s color towards the background color. This approach provides two
+key benefits: straightforward color configuration that integrates naturally
+with (Unix) ricing and high-fidelity recreation of the Matrix aesthetic.</p>
+
+<h2 id="customization">Customization</h2>
+
+<p>While you can alter almost every aspect, including speed, glitch frequency, and
+rain density, the most common customizations are the color scheme and character
+set.</p>
+
+<p>There are three color settings: head, tail, and background. You can configure
+them using <code class="language-plaintext highlighter-rouge">COLOR_*_RED</code>, <code class="language-plaintext highlighter-rouge">COLOR_*_GRN</code>, and <code class="language-plaintext highlighter-rouge">COLOR_*_BLU</code> definitions found in
+main.c.</p>
+
+<p>The <code class="language-plaintext highlighter-rouge">UNICODE_MIN</code> and <code class="language-plaintext highlighter-rouge">UNICODE_MAX</code> values control the Unicode block used. For
+example, setting them to <code class="language-plaintext highlighter-rouge">0x30A1</code> and <code class="language-plaintext highlighter-rouge">0x30F6</code> rains Katakana, if a font that
+supports Katakana is present on the system:</p>
+
+<p><img style="width: 100%;" src="katakana.png" /></p>
+
+<p>Files: <a href="source.tar.gz">source.tar.gz</a></p>
+</div>
+ <p class="post-author right">by W. D. Sadeep Madurange</p>
+ </div>
+ </div>
+ </main>
+
+ <div class="footer">
+ <div class="container">
+ <div class="twelve columns right container-2">
+ <p id="footer-text">&copy; ASCIIMX - 2025</p>
+ </div>
+ </div>
+</div>
+
+
+ </body>
+</html>
diff --git a/_site/log/matrix-digital-rain/katakana.png b/_site/log/matrix-digital-rain/katakana.png
new file mode 100644
index 0000000..b9df873
--- /dev/null
+++ b/_site/log/matrix-digital-rain/katakana.png
Binary files differ
diff --git a/_site/log/matrix-digital-rain/matrix.mp4 b/_site/log/matrix-digital-rain/matrix.mp4
new file mode 100644
index 0000000..84a9839
--- /dev/null
+++ b/_site/log/matrix-digital-rain/matrix.mp4
Binary files differ
diff --git a/_site/log/matrix-digital-rain/poster.png b/_site/log/matrix-digital-rain/poster.png
new file mode 100644
index 0000000..0321ad3
--- /dev/null
+++ b/_site/log/matrix-digital-rain/poster.png
Binary files differ
diff --git a/_site/log/matrix-digital-rain/source.tar.gz b/_site/log/matrix-digital-rain/source.tar.gz
new file mode 100644
index 0000000..fead280
--- /dev/null
+++ b/_site/log/matrix-digital-rain/source.tar.gz
Binary files differ
diff --git a/_site/log/matrix-digital-rain/thumb_sm.png b/_site/log/matrix-digital-rain/thumb_sm.png
new file mode 100644
index 0000000..d3f06c9
--- /dev/null
+++ b/_site/log/matrix-digital-rain/thumb_sm.png
Binary files differ