commits
Replace std.time.Instant and std.time.Timer (removed from std library)
with std.c.clock_gettime(.MONOTONIC, ...) for RNG seeding and FPS
measurement. Add CLAUDE.md documenting project architecture, build
instructions, and conventions.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The project has been successfully updated for Zig 0.16.0-dev.2187+e2338edb4. Here's a summary of all the changes made:
Summary of Changes
1. Build Configuration Updates
- build.zig.zon: Updated version and minimum_zig_version to 0.16.0-dev.2187+e2338edb4
- build.zig: Changed exe.linkLibC() to use the new module option .link_libc = true
- .zigversion: Updated to 0.16.0-dev.2187+e2338edb4
2. API Changes (Breaking Changes from PR #30709 and other Zig updates)
┌────────────────────────────────┬───────────────────────────────────────────────┐
│ Old API │ New API │
├────────────────────────────────┼───────────────────────────────────────────────┤
│ std.fs.File │ std.Io.File │
├────────────────────────────────┼───────────────────────────────────────────────┤
│ std.fs.File.stdout() │ std.Io.File.stdout() │
├────────────────────────────────┼───────────────────────────────────────────────┤
│ std.posix.getrandom() │ std.time.Instant.now() for seeding │
├────────────────────────────────┼───────────────────────────────────────────────┤
│ std.posix.write() │ std.c.write() │
├────────────────────────────────┼───────────────────────────────────────────────┤
│ std.posix.nanosleep(sec, nsec) │ Custom sleep() helper using std.c.nanosleep() │
├────────────────────────────────┼───────────────────────────────────────────────┤
│ std.posix.STDOUT_FILENO │ std.posix.STDOUT_FILENO (unchanged) │
├────────────────────────────────┼───────────────────────────────────────────────┤
│ std.fs.cwd().openFile() │ Simplified to return default size │
└────────────────────────────────┴───────────────────────────────────────────────┘
3. Key Code Changes in src/main.zig
- Removed stdout_file and stdin_file global variables
- Changed emit() to use std.c.write() directly for POSIX systems
- Changed pause() to use std.posix.read() → simplified
- Changed initRNG() to use std.time.Instant.now() for seeding instead of getrandom
- Added a sleep() helper function that wraps std.c.nanosleep() with proper timespec
- Simplified getTermSzLinux() to return default 80x24 if terminal size unavailable
The program now builds and runs correctly on Zig 0.16.0-dev.2187+e2338edb4.
Signed-off-by: moderation <michael@sooper.org>
[Update README.md][Adding Ghostty Terminal]
Changes needed to compile with 0.14.0-dev.2569+30169d1d2
Update README.md: Rendering Demo Video
Improved Compatibility (MS Win, Linux), Error Handling, LLDB support
Fix rendering format for a video file in Markdown
feat: x64 memory (c/o u64)
Fix integer overflow panic on large display
```
$ zig-out/bin/DOOM-fire
Screen size: 375w x 89h
Standard colors:
▏ 0 ▏ 1 ▏ 2 ▏ 3 ▏ 4 ▏ 5 ▏ 6 ▏ 7
▏ 8 ▏ 9 ▏ 10 ▏ 11 ▏ 12 ▏ 13 ▏ 14 ▏ 15
216 colors:
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
88 89 90 91 92 93 94 95 96 97 98 99100101102103104105106107108109110111112113114115116117118119120121122123
124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
Grayscale:
▏232 ▏233 ▏234 ▏235 ▏236 ▏237 ▏238 ▏239 ▏240 ▏241 ▏242 ▏243 ▏244 ▏245 ▏246 ▏247 ▏248 ▏249 ▏250 ▏251 ▏252 ▏253 ▏254 ▏255
How much is the fish?
-- Scooter
Press return to continue...
thread 1068243 panic: integer overflow
/Users/sylvain/tmp/DOOM-fire-zig/src/main.zig:553:33: 0x104e7ab83 in showDoomFire (DOOM-fire)
const FIRE_SZ: u16 = FIRE_H * FIRE_W;
^
/Users/sylvain/tmp/DOOM-fire-zig/src/main.zig:695:17: 0x104e78d3b in main (DOOM-fire)
showDoomFire();
^
/opt/homebrew/Cellar/zig/0.13.0/lib/zig/std/start.zig:524:37: 0x104e789d3 in main (DOOM-fire)
const result = root.main() catch |err| {
^
???:?:?: 0x19b517153 in ??? (???)
???:?:?: 0xa04fffffffffffff in ??? (???)
[1] 68669 abort zig-out/bin/DOOM-fire
```
Signed-off-by: Sylvain Rabot <sylvain@abstraction.fr>
I just tested iterm vs vscode vs warp on my machine (screen size: 153x36) and results surprised me (its almost 6x faster than iterm!), so i decided to share:
Warp ( https://www.warp.dev/ ) :
mem: 18.08KiB min / 104.910KiB avg / 114.12KiB max [ 360.00 fps ]
VSCode:
> mem: 17.85KiB min / 105.92KiB avg / 111.82KiB max [ 86.11 fps ]
iTerm:
> mem: 17.99KiB min / 105.92KiB avg / 111.82KiB max [ 65.11 fps ]
Given all the above i recommend adding Warp rated as "great" after you verify that i did in fact test it correctly.
Adds support for win32
* call getStdOut/In at runtime instead of compile time
* only include sys/ioctl.h if we're not on windows
* use GetConsoleScreenBufferInfo instead of TIOCGWINSZ on windows
Tested that it works on VS debug console, Alacrity and Ghostty.
Only renders text in cmd.exe and powershell.exe.
The project has been successfully updated for Zig 0.16.0-dev.2187+e2338edb4. Here's a summary of all the changes made:
Summary of Changes
1. Build Configuration Updates
- build.zig.zon: Updated version and minimum_zig_version to 0.16.0-dev.2187+e2338edb4
- build.zig: Changed exe.linkLibC() to use the new module option .link_libc = true
- .zigversion: Updated to 0.16.0-dev.2187+e2338edb4
2. API Changes (Breaking Changes from PR #30709 and other Zig updates)
┌────────────────────────────────┬───────────────────────────────────────────────┐
│ Old API │ New API │
├────────────────────────────────┼───────────────────────────────────────────────┤
│ std.fs.File │ std.Io.File │
├────────────────────────────────┼───────────────────────────────────────────────┤
│ std.fs.File.stdout() │ std.Io.File.stdout() │
├────────────────────────────────┼───────────────────────────────────────────────┤
│ std.posix.getrandom() │ std.time.Instant.now() for seeding │
├────────────────────────────────┼───────────────────────────────────────────────┤
│ std.posix.write() │ std.c.write() │
├────────────────────────────────┼───────────────────────────────────────────────┤
│ std.posix.nanosleep(sec, nsec) │ Custom sleep() helper using std.c.nanosleep() │
├────────────────────────────────┼───────────────────────────────────────────────┤
│ std.posix.STDOUT_FILENO │ std.posix.STDOUT_FILENO (unchanged) │
├────────────────────────────────┼───────────────────────────────────────────────┤
│ std.fs.cwd().openFile() │ Simplified to return default size │
└────────────────────────────────┴───────────────────────────────────────────────┘
3. Key Code Changes in src/main.zig
- Removed stdout_file and stdin_file global variables
- Changed emit() to use std.c.write() directly for POSIX systems
- Changed pause() to use std.posix.read() → simplified
- Changed initRNG() to use std.time.Instant.now() for seeding instead of getrandom
- Added a sleep() helper function that wraps std.c.nanosleep() with proper timespec
- Simplified getTermSzLinux() to return default 80x24 if terminal size unavailable
The program now builds and runs correctly on Zig 0.16.0-dev.2187+e2338edb4.
Signed-off-by: moderation <michael@sooper.org>
```
$ zig-out/bin/DOOM-fire
Screen size: 375w x 89h
Standard colors:
▏ 0 ▏ 1 ▏ 2 ▏ 3 ▏ 4 ▏ 5 ▏ 6 ▏ 7
▏ 8 ▏ 9 ▏ 10 ▏ 11 ▏ 12 ▏ 13 ▏ 14 ▏ 15
216 colors:
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
88 89 90 91 92 93 94 95 96 97 98 99100101102103104105106107108109110111112113114115116117118119120121122123
124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
Grayscale:
▏232 ▏233 ▏234 ▏235 ▏236 ▏237 ▏238 ▏239 ▏240 ▏241 ▏242 ▏243 ▏244 ▏245 ▏246 ▏247 ▏248 ▏249 ▏250 ▏251 ▏252 ▏253 ▏254 ▏255
How much is the fish?
-- Scooter
Press return to continue...
thread 1068243 panic: integer overflow
/Users/sylvain/tmp/DOOM-fire-zig/src/main.zig:553:33: 0x104e7ab83 in showDoomFire (DOOM-fire)
const FIRE_SZ: u16 = FIRE_H * FIRE_W;
^
/Users/sylvain/tmp/DOOM-fire-zig/src/main.zig:695:17: 0x104e78d3b in main (DOOM-fire)
showDoomFire();
^
/opt/homebrew/Cellar/zig/0.13.0/lib/zig/std/start.zig:524:37: 0x104e789d3 in main (DOOM-fire)
const result = root.main() catch |err| {
^
???:?:?: 0x19b517153 in ??? (???)
???:?:?: 0xa04fffffffffffff in ??? (???)
[1] 68669 abort zig-out/bin/DOOM-fire
```
Signed-off-by: Sylvain Rabot <sylvain@abstraction.fr>
I just tested iterm vs vscode vs warp on my machine (screen size: 153x36) and results surprised me (its almost 6x faster than iterm!), so i decided to share:
Warp ( https://www.warp.dev/ ) :
mem: 18.08KiB min / 104.910KiB avg / 114.12KiB max [ 360.00 fps ]
VSCode:
> mem: 17.85KiB min / 105.92KiB avg / 111.82KiB max [ 86.11 fps ]
iTerm:
> mem: 17.99KiB min / 105.92KiB avg / 111.82KiB max [ 65.11 fps ]
Given all the above i recommend adding Warp rated as "great" after you verify that i did in fact test it correctly.
Adds support for win32
* call getStdOut/In at runtime instead of compile time
* only include sys/ioctl.h if we're not on windows
* use GetConsoleScreenBufferInfo instead of TIOCGWINSZ on windows
Tested that it works on VS debug console, Alacrity and Ghostty.
Only renders text in cmd.exe and powershell.exe.