Game Code School released a free 17-part written tutorial series that builds a complete traditional roguelike from scratch in C++ with SDL3 — turn-based, ASCII, procedurally generated, permadeath. Every part ends with something you can build, run, and play, and all source is on GitHub with one folder per part.

The series covers:

  • Dungeon generation: BSP rooms, then cellular-automata caves
  • Recursive-shadowcasting field of view, fog of war, and a remembered map
  • Monster AI on a Dijkstra map — one flood fill over the floor that everything pathfinds from
  • Turn-based melee, ranged magic, equipment, and status effects
  • Data-driven character classes, multiple floors, a plain-text save system, HUD and message log, and synthesized sound with no asset files
  • A win condition

The stated philosophy is explaining the why as much as the what: why a Dijkstra map beats a pile of A* searches here, and why the architecture gets refactored exactly when it does — not before. Part 1 makes the sharpest argument: draw the dungeon as ASCII glyphs from the very first frame, because the renderer you build now is the one you keep. Start with colored rectangles and you will delete that renderer in Part 2.

The map stays pure data with no SDL knowledge, and the renderer knows nothing about tiles — so when Part 3 adds fog of war, it changes how tiles are coloured, not how they are drawn.

The Reddit thread adds useful nuance: commenters pushed back on the Dijkstra-vs-A* framing and the mixed code paradigms, and the author engaged with real detail (one flood serves every monster; flee behavior is the same map counted up; structs for data, classes for systems). A written, free, milestone-based resource like this is rare — worth keeping alongside the companion C++ primer for total beginners.