Show HN: A PSX/DOS style 3D game written in Rust with a custom software renderer

Show HN (score: 40)
Found: September 17, 2025
ID: 1436

Description

Other
Show HN: A PSX/DOS style 3D game written in Rust with a custom software renderer So, after years of abandoning Rust after the hello world stage, I finally decided to do something substantial. It started with simple line rendering, but I liked how it was progressing so I figured I could make a reasonably complete PSX style renderer and a game with it.

My only dependency is SDL2; I treat it as my "platform", so it handles windowing, input and audio. This means my Cargo.toml is as simple as:

[dependencies.sdl2] version = "0.35" default-features = false features = ["mixer"]

this pulls around 6-7 other dependencies.

I am doing actual true color 3D rendering (with Z buffer, transforming, lighting and rasterizing each triangle and so on, no special techniques or raycasting), the framebuffer is 320x180 (widescreen 320x240). SDL handles the hardware-accelerated final scaling to the display resolution (if available, for example in VMs it's sometimes not so it's pure software). I do my own physics, quaternion/matrix/vector math, TGA and OBJ loading.

Performance: I have not spent a lot of time on this really, but I am kind of satisfied: FPS ranges from [200-500] on a 2011 i5 Thinkpad to [70-80] on a 2005 Pentium laptop (this could barely run rustc...I had to jump through some hoops to make it work on 32 bit Linux), to [40-50] on a RaspberryPi 3B+. I don't have more modern hardware to test.

All of this is single threaded, no SIMD, no inline asm. Also, implementing interlaced rendering provided a +50% perf boost (and a nice effect).

The Pentium laptop has an ATI (yes) chip which is, maybe not surprisingly, supported perfectly by SDL.

Regarding Rust: I've barely touched the language. I am using it more as a "C with vec!s, borrow checker, pattern matching, error propagation, and traits". I love the syntax of the subset that I use; it's crystal clear, readable, ergonomic. Things like matches/ifs returning values are extremely useful for concise and productive code. However, pro/idiomatic code that I see around, looks unreadable to me. I've written all of the code from scratch on my own terms, so this was not a problem, but still... In any case, the ecosystem and tooling are amazing. All in all, an amazing development experience. I am a bit afraid to switch back to C++ for my next project.

Also, rustup/cargo made things a walk in the park while creating a deployment script that automates the whole process: after a commit, it scans source files for used assets and packages only those, copies dependencies (DLLs for Win), sets up build dependencies depending on the target, builds all 3 targets (Win10_64, Linux32, Linux64), bundles everything into separate zips and uploads them to my local server. I am doing this from a 64bit Lubuntu 18.04 virtual machine.

You can try the game and read all info about it on the linked itch.io page: https://totenarctanz.itch.io/a-scavenging-trip

All assets (audio/images/fonts) where also made by me for this project (you could guess from the low quality).

Development tools: Geany (on Linux), notepad++ (on Windows), both vanilla with no plugins, Blender, Gimp, REAPER.

More from Show

Show HN: Modeling the Human Body in Rust So I Can Cmd+Click Through It

Show HN: Modeling the Human Body in Rust So I Can Cmd+Click Through It I started this trying to understand two things: why my Asian friends turn red after drinking, and why several friends all seemed to have migraine clusters.<p>I was reading medical papers and textbooks, but kept getting lost jumping between topics. I thought: what if I could just Cmd+Click through this like code? What if &quot;ALDH2 gene&quot; was actually clickable, and took me to the variant, the phenotype, the population frequencies?<p>So I started modeling human biology in Rust with my Ralph agent (Claude in a loop, ty ghuntley). Turns out the type system is perfect for this. Every biological entity is strongly-typed with relationships enforced at compile time.<p>After 1 day of agent coding: - 277 Rust files, ~95k lines of code - 1,561 tests passing - 13 complete organ systems - Genetics with ancestry-specific variants - Clinical pathology models<p>Try it:<p>git clone <a href="https:&#x2F;&#x2F;github.com&#x2F;lantos1618&#x2F;open_human_ontology" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;lantos1618&#x2F;open_human_ontology</a> cd open_human_ontology cargo run --example ide_navigation_demo<p>Then open `examples&#x2F;ide_navigation_demo.rs` and Cmd+Click through:<p>Understanding Asian flush:<p>AsianGeneticVariantsCatalog::get_metabolic_variants()<p>&#x2F;&#x2F; Click through to:<p>&#x2F;&#x2F; → ALDH2 gene on chromosome 12q24.12<p>&#x2F;&#x2F; → rs671 variant (Glu504Lys)<p>&#x2F;&#x2F; → 40% frequency in Japanese population<p>&#x2F;&#x2F; → Alcohol flush reaction<p>&#x2F;&#x2F; → 10x esophageal cancer risk with alcohol<p>&#x2F;&#x2F; → Acetaldehyde metabolism pathway<p>Understanding migraines: Migraine { subtype: WithAura, triggers: [Stress, LackOfSleep, HormonalChanges], genetic_variants: [&quot;rs2075968&quot;, &quot;rs1835740&quot;], ... }<p>&#x2F;&#x2F; Click through to:<p>&#x2F;&#x2F; → 17 migraine trigger types<p>&#x2F;&#x2F; → 12 aura symptom types<p>&#x2F;&#x2F; → Genetic risk factors<p>&#x2F;&#x2F; → Why clusters happen (HormonalChanges → Menstruation)<p>Now I can actually <i>navigate</i> the connections instead of flipping through PDFs. Heart → CoronaryArtery → Plaque. VisualCortex → 200M neurons → NeuralConnection pathways. It&#x27;s like Wikipedia but type-checked and with jump-to-definition.<p>This isn&#x27;t production medical software - it&#x27;s a learning tool. But it&#x27;s way more useful than textbooks for understanding how biological systems connect.<p>The agent keeps expanding it. Sometimes it OOMs but that&#x27;s part of the fun.<p>Tech: Rust, nalgebra, serde, rayon, proptest<p>I am not a dr or medical professional this is for my education you can commit to it if you want to or review and open some PR&#x27;s if you find wrong information or want to add references.

No other tools from this source yet.