Skip to content

Commit 2f9fd0a

Browse files
committed
re-drafted first two posts, pretty happy with them now
1 parent cf76e35 commit 2f9fd0a

File tree

3 files changed

+38
-30
lines changed

3 files changed

+38
-30
lines changed

config.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ theme = 'PaperMod'
1010
# Homepage info
1111
[params.homeInfoParams]
1212
Title = "Welcome 👋"
13-
Content = "This is the blog of Domenico Salvia aka json-born, a programmer and all round creative person from the UK. Follow along whilst I chase my lifelong ambition to build virtual worlds."
13+
Content = "I’m Domenico (aka json-born). Making video games has been my dream since I first sat at a computer. After 13 years of software work, I’m finally giving it a shot."
1414

1515
# Show read time and word count
1616
ShowReadingTime = true

content/posts/doom-engine-recreation.md

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,45 +9,53 @@ cover:
99
caption: "Exploring the legendary DOOM engine"
1010
---
1111

12-
I've been reading Fabien Sanglard's [Game Engine Black Book: DOOM](https://fabiensanglard.net/gebbdoom/), and it's honestly blown my mind. The book breaks down all the clever tricks behind id Software's masterpiece and makes you realize just how insanely talented those early developers were. Reading about BSP trees has me wanting to build something myself.
12+
I've been reading Fabien Sanglard's [*Game Engine Black Book: DOOM*](https://fabiensanglard.net/gebbdoom/), and honestly, it has blown my mind. The book breaks down all the clever tricks behind id Software's masterpiece and makes you appreciate just how insanely talented those early developers were. Reading about BSP trees, sub-pixel accuracy and perspective-correct texture mapping has me itching to build something myself.
1313

14-
So that's exactly what I'm going to do.
14+
So that is exactly what I am going to do.
1515

16-
I'm building an id Tech 1 engine recreation project in C++. This isn't about making a game, it's about learning by doing, understanding how this stuff actually works, and appreciating the engineering genius that Sanglard documents so well in his book. I want to implement the core systems from scratch and really get to grips with how they work together.
16+
I am starting an **id Tech 1 engine recreation project in C++**. This is not about making a game. It is about learning by doing, understanding how everything works under the hood, and gaining a deeper appreciation for the engineering genius Sanglard documents so well. I want to implement the core systems from scratch and see firsthand how they all fit together.
1717

18-
The plan is deliberately old-school: pure software rendering using [SDL](https://www.libsdl.org/) just as a display window. No modern GPU tricks, no shortcuts. I'll be calculating every single pixel in a framebuffer and pushing that each frame, just like the original engine did back in 1993.
18+
The plan is deliberately old school: **pure software rendering using [SDL](https://www.libsdl.org/)** as a display window. No modern GPU tricks, no shortcuts. Every single pixel will be calculated in a framebuffer and pushed to the screen each frame, just like the original engine did back in 1993.
1919

20-
## The approach
20+
---
21+
22+
## The Approach
2123

22-
After a couple of evenings chatting with GPT, I've come up with a rough plan of action:
24+
After a couple of hours thinking the problem through, and with a little help from GPT-5, I sketched out a rough plan:
2325

2426
### Foundations
2527

26-
Setting up the C++20 project structure, getting SDL running, and implementing the basic framebuffer system. You can read about this below, aside from some tooling issues, it was pretty straightforward.
28+
Set up a C++20 project, get SDL running, and draw something. Aside from some tooling quirks, this part was surprisingly straightforward.
2729

2830
### WAD Loader
2931

30-
This is where things get interesting. I need to parse DOOM's WAD files and extract the maps, textures, and sprites. The WAD format is beautifully simple but requires careful handling to get right.
32+
This is where things start to get interesting. DOOM stores all of its game data, including maps, textures, sprites, sounds, and more, inside WAD files. WAD stands for 'Where’s All the Data' and is essentially a simple archive format with a structured directory of all the resources the game needs. To bring the engine to life, I will need to parse these files and extract the maps, textures, and sprites.
3133

32-
### BSP & Software Rendering
34+
### BSP and Software Rendering
3335

34-
This is the big one. Implementing the Binary Space Partitioning system for proper visibility determination, then building the software renderer that draws walls, floors, and ceilings pixel by pixel. Texture mapping in particular looks like it's going to be a real pain.
36+
This is the big challenge. DOOM’s maps in the WAD file already provide all the geometry in terms of sectors, lines, and vertices, but to render the world efficiently I will need to build a Binary Space Partitioning system to determine what is visible at any moment. On top of that, the software renderer will draw walls, floors, and ceilings pixel by pixel, and getting the texture mapping right promises to be a real headache.
3537

3638
### Game Features
3739

38-
Player movement, input handling, sprite rendering, lighting effects, and all the other systems that make DOOM feel like DOOM.
40+
Finally, player movement, input handling, sprite rendering, lighting, and the other systems that make DOOM feel like DOOM. I'm keeping my goals for this section open-ended for now.
41+
42+
I am not trying to recreate every feature or optimize for modern hardware. I just want to understand the clever solutions Carmack, Romero, and the id team came up with given the limitations of early 1990s PCs.
43+
44+
This project feels like the perfect bridge between my web development background and my eventual goal of making games. It is low level enough to teach proper C++ and graphics programming but focused enough that I will not get lost in scope creep.
45+
46+
---
3947

40-
I'm not trying to recreate every feature or optimize for modern hardware. I just want to understand the clever solutions that Carmack, Romero, and the rest of the id team came up with when working with the limitations of early 90s PCs.
48+
## Laying the Foundations
4149

42-
This feels like the perfect bridge between my web development background and wanting to make games eventually. It's low-level enough to teach me proper C++ and graphics programming, but focused enough that I won't get completely lost in scope creep.
50+
At the start, I set up a new C++ project in JetBrains Rider. At this point, I was unfamiliar with most IDEs for C++ development, so I figured it did not matter much which one I used, and I defaulted to Rider after reading that it was becoming quite popular for game development. I planned to use CMake for build management due to it's portability, but after wrestling with the configuration for a while, I realized that Rider does not fully support CMake for native C++ projects out of the box.
4351

44-
## Laying the foundations
52+
I quickly realized that none of this mattered at the moment and that I was wasting time. I switched to Visual Studio and MSBuild instead, which integrates cleanly with vcpkg for dependency management. This made it much easier to get a working project structure up and running, and I can always port the project to CMake later if I want to.
4553

46-
I began by setting up a new project in JetBrains Rider, thinking I could use CMake. After some confusion, I realized that Rider doesn’t support CMake for native C++ projects out of the box — a frustrating discovery, but it quickly led me to switch to Visual Studio, which has native support for C++ and integrates seamlessly with vcpkg, which should hopefully make dependency management less of a headache.
54+
With the environment ready, I moved on to the first rendering test. For this, I used [SDL](https://www.libsdl.org/).
4755

48-
For those unfamiliar, [SDL](https://www.libsdl.org/) (Simple DirectMedia Layer) is a lightweight, cross-platform library that handles graphics, input, audio, and more. In this project, I'm using it purely as a window and display backend — all the actual rendering will happen in software, which gives me full control over every pixel, just like the original DOOM engine did.
56+
For those unfamiliar, [SDL](https://www.libsdl.org/) (Simple DirectMedia Layer) is a lightweight, cross platform library for graphics, input, audio, and more. In this project, I am using it purely as a window and display backend. All the actual rendering will happen in software, giving me full control over every pixel just like the original DOOM engine.
4957

50-
Once the setup was complete, I wrote some boilerplate for initializing SDL creating a window and drawing some stuff into it:
58+
Once the setup was complete, I wrote some boilerplate to initialize SDL, create a window, and draw a simple pixel:
5159

5260
```cpp
5361
#include <SDL3/SDL.h>
@@ -108,8 +116,8 @@ int main() {
108116
}
109117
```
110118

111-
Seeing it compile cleanly was a relief after banging my head against google for an hour trying to work out the best tools to use. Heres the end result:
119+
Seeing it compile cleanly was a relief after an hour of wrestling with tools. Here is the result:
112120

113121
![SDL3 Test Window](/images/test-window.png)
114122

115-
It aint much, but it's a start...
123+
It's not much, but it is a start.

content/posts/hello-world.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,23 @@
22
title: "Hello World!"
33
date: 2025-09-19T18:43:00+01:00
44
draft: false
5-
tags: ["Hello World!"]
5+
tags: ["Hello World"]
66
---
77

8-
My earliest gaming memory is sitting on my Dad's lap at 4 or 5 years old, firing the shotgun in DOOM while he handled the movement. Even at that age it dawned on me that the monitor was a window into another world...
8+
My earliest gaming memory is sitting on my dad’s lap at four or five, firing the shotgun in DOOM while he handled the movement. I had no idea what I was doing, and I’m pretty sure the game was way too intense for a toddler. Even so, I remember staring at the screen and being completely fascinated, caught up in this strange new world I didn’t fully understand but couldn’t look away from.
99

10-
When I was 9 or 10, my Dad asked me what I thought I might want to do when I was older, and without much thought, I told him I wanted to make computer games. When it came time to think about University, I remembered that conversation, said fuck it, and applied to study Computer Science with a specialisation in games at the University of Brighton.
10+
By the time I was nine or ten, my dad asked me what I wanted to do when I grew up. Without much thought, I told him I wanted to make computer games. Years later, when it came time to pick a university course, I remembered that conversation, shrugged, and applied to study Computer Science with a games specialization at the University of Brighton.
1111

12-
After graduating with a 2:1, a £2k overdraft, £25k in student loan debt and a strong desire to get drunk and make music with my friends, I got my first job as a junior web developer at a tiny start up in Brighton, UK. That was 13 years ago, and I'm still working in the same industry as a Software Architect.
12+
I graduated with a 2:1, a £2k overdraft, £25k in student loans, and a strong desire to get drunk and make music with my friends. I was passionate about coding, but I wasn’t ready to make a conventional office job the center of my life. My first job was as a junior web developer at a tiny startup in Brighton, UK. That was thirteen years ago. Today, I work in the same industry as a Software Architect.
1313

14-
I'm sad to say, I've barely written a line of C++ since Uni. That mostly stems from fear I think. I have and always have had a genuine desire to create things for myself and for others, but I also fear failure and greater than that, I also fear success. I don't think this is uncommon, it's very typical of Millennials.
14+
Im sad to say I’ve barely written a line of C++ since uni. Part of that stems from fear. I’ve always had a genuine desire to create for myself and for others, but I’ve also feared failure, and oddly enough, success. I suspect this isn’t unusual, it seems like a very Millennial thing.
1515

16-
Over the years, my skills as a programmer have really come along. Outside of work, I've hard-committed to numerous creative hobbies at various junctures in my life: music production, martial arts, poker, cooking and songwriting to name a few. I finally feel confident enough in my abilities as both a problem solver and a creative to take the plunge and chase the original dream, to build virtual worlds.
16+
Over the years, my skills as a programmer have developed more than I ever imagined they would. Outside of work, Ive dabbled in a bunch of creative pursuits: music production, martial arts, poker, cooking, songwriting. And now I finally feel confident enough in both my problem-solving and creative abilities to take the plunge and chase that original dream: building virtual worlds.
1717

18-
I'm starting this devlog to document that journey. My long-term goal is ambitious but clear: to write and release my own indie game. In the short term, I plan to study the work of the early pioneers and sharpen my C++ whilst doing so, diving deep into programming concepts, game engines, design principles, and probably some maths I should have paid more attention to at Uni.
18+
This devlog is where that journey begins. My long-term goal is ambitious but clear: to write and release my own indie game. In the short term, I’ll study the pioneers, sharpen my C++, and dive deep into programming concepts, game engines, design principles, and yes, the maths I probably should have paid more attention to at uni!
1919

20-
I'll be documenting everything along the way. The experiments and toy projects, programming concepts as I learn them, design decisions and why they worked (or didn't), tools and resources that actually help, and inevitably, the mistakes and dead ends (probably a lot of these).
20+
Ill document everything along the way: experiments and toy projects, programming concepts as I learn them, design decisions and whether they worked, tools and resources that actually help, and inevitably, the mistakes and dead ends, probably a lot of those.
2121

22-
I guess you could say this is my hello world moment for game development.
22+
You could say this is my “Hello World” moment for game development.
2323

24-
Let's see where I end up.
24+
Lets see where it takes me.

0 commit comments

Comments
 (0)