Preorder the Game, Get the Source!

You'll get: Instant source code access, full access to nightly updates and a DRM-free copy of final game.
PREORDER NOW - $15 or preorder via Paypal.

Episode Guide

How to Use This Guide

Handmade Hero is broken up into four parts: a basic programming introduction, the construction of a platform prototyping layer, the coding of a game engine, and the coding of the game itself. These parts can be fluid, and blur into one another, but if you would like to skip directly to one of the parts without watching the preceding ones, you may be able to do so, depending on your level of experience.

  • The basic (very limited) introduction to C programming is Week 0.

  • The construction of a Win32 prototyping layer is Weeks 1 through 5.

  • Game engine coding begins on Week 6.

  • Gameplay coding begins on Week 56.

Text Editor Tutorial

By popular demand, Casey goes through his emacs setup and shows how he makes use of the text editor

Week 0: Intro to C

Before starting Handmade Hero, I did a five-day series on C programming to test the Twitch streaming set up. It is too brief to be a complete introduction to C, but may be better than nothing if you are trying to start from scratch. At some point, when there is time, I may try to do a more complete intro series for people who want to follow Handmade Hero but have little or no programming experience

Week 1: Simple Framebuffer on Windows

The first week of Handmade Hero was spent setting up a Windows build, creating a window, and making it so that we could directly write animating graphics into a framebuffer and have Windows display it in our window

Week 2: Sound and Input on Windows

The second week of Handmade was spent getting sound, input, and timing working

Week 3: Defining the Platform Layer Boundary

The third week of Handmade Hero had us abstracting our Win32 code so we could divide the project into platform-specific and platform-independent parts

Week 4: Win32 Prototyping Layer Cleanup

The fourth week of Handmade Hero was spent cleaning up our Win32 code, and getting to a lot of the "TODO" markers we put in the source code

Week 5: Fun with Win32

The fifth week of Handmade Hero is all about taking some time to do crazy, fun, and useful stuff with our Win32 layer

Week 6: Game Engine Architecture

The sixth week of Handmade Hero spends time laying the foundation of the game upon the platform work done over the previous weeks

Week 7: Coordinates and Tilemaps

The seventh week of Handmade Hero is about figuring out how we want to store the game world, as well as how to represent positions within that world

Week 8: Bitmaps

The eighth week of Handmade Hero focuses on loading and displaying our first asset files

Week 9: Vector Math and Player Movement

The ninth week of Handmade Hero introduces vectors and begins the process of using them to improve character motion

Week 10: Player Collision

The tenth week of Handmade Hero concentrates on iteratively improving the nascent collision detection code

Week 11: Basic Entity Handling

The eleventh week of Handmade Hero is mainly about handling entities

Week 12: Entities in Space

The twelfth week continues with entities. And space. Entities in space

Week 13: Simulation Regions

The thirteenth week concentrates on simulation

Week 14: Collision Rules

The fourteenth week continues with simulation regions. And Figure out how to handle collision rules

Week 15

Week fifteen

Week 16

Week sixteen

Week 17

Week seventeen

Week 18

Week eighteen

Week 19

Week nineteen

Week 20

Week twenty

Week 21

Week twenty-one

Week 22

Week twenty-two

Week 23

Week twenty-three

Week 24

Week twenty-four

Week 25

Week twenty-five

Week 26

Week twenty-six

Week 27

Week twenty-seven

Week 28

Week twenty-eight

Week 29

Week twenty-nine

Week 30

Week thirty

Week 31

Week thirty-one

Week 32

Week thirty-two

Week 33

Week thirty-three

Week 34

Week thirty-four

Week 35

Week thirty-five

Week 36

Week thirty-six

Week 37

Week thirty-seven

Week 38

Week thirty-eight

Week 39

Week thirty-nine

Week 40

Week forty

Week 41

Week forty-one

Week 42

Week forty-two

Week 43

Week forty-three

Week 44

Week forty-four

Week 45

Week forty-five

Week 46

Week forty-six

Week 47

Week forty-seven

Week 48

Week forty-eight

Week 49

Week forty-nine

RSI Leave

Q&A Sessions while Casey is on RSI leave resting his typing fingers

Week 50

Week fifty

Week 51: Debug System

The fifty-first week sees us reacquainting ourselves with and enhancing the debug system

Week 52: Debug System

The fifty-second week continues to enhance the debug system

Week 53: Cleanup

The fifty-third week consists of platform layer, profiler and software renderer cleanup

Week 54: Profiler Improvements

The fifty-fourth week was spent improving the profiler

Week 55: Profiler Enhancements

The fifty-fifth week was spent enhancing the profiler

Week 56: Profiler Clean-up and Player Movement

The fifty-sixth week began with some consolidation and clean-up of the debug system and ended with the beginning of gameplay programming in the form of a switch to hybrid tile-based movement

Week 57: Animation

The fifty-seventh week introduces animation, making the body hop between traversable points and stretch accordingly

Week 58: Animation and Entity System

The fifty-eighth week began by finishing off the animation for now before moving on to start on the new experimental sparse entity system

Week 59: Entities, Camera, Z and Head & Body Reorganisation

The fifty-ninth week contained a mixed bag of entity system clean-up, camera control, Z movement, and reorganisation of the head and body

Week 60: Transactional Movement and Entity Intelligence

The sixtieth week introduced the notion of transactional movement, started to decouple entity behaviour and introduced brains

Week 61: Brains, Decoupled Entity Rendering and Hopping

The sixty-first week finished implementing brains, decoupled visuals from entity type and got the monstar hopping

Week 62: Snakes, Familiars and Attacks

The sixty-second week saw the implementation of snakes, familiars now occupying traversables, and a swipe attack

Week 63: Z

The sixty-third week concentrated on solidifying Z

Week 64: Sorting

The sixty-fourth week was spent considering how to sort entities

Week 65: Sorting and Memory Arenas

The sixty-fifth week resumed our work sorting entities, and made memory arenas be used in the platform layer

Week 66: Sorting

The sixty-sixth week was all about sorting

Week 67: Sorting and Z-Layers

The sixty-seventh week continued working on sorting, including solidifying the concept of Z-layers

Week 68: Sorting and Multiple Render Targets

The sixty-eighth week continued working on sorting, and introduced the notion of multiple render layers

Week 69: Rendering and Miscellany

The sixty-ninth week was spent working on the rendering and fixing miscellaneous outstanding bugs

Week 70: Improved Texture Downloading and Varargs

The seventieth week moved away from multiple OpenGL contexts and implemented varargs

Week 71: Printf Replacement

The seventy-first week saw the almost complete replacement of printf(), with a view to removing a dependency on the C runtime library

Week 72: Finishing Printf Replacement, Bugs, Brains and Sorting

The seventy-second week finished the printf replacement, cleared a bunch of issues, activated entities by brain and sorted the debug overlay

Week 73: Boost Pads

The seventy-third week saw the replacement of stairs with boost pads

Week 74: Particles and a Chat on Undefined Behavior

The seventy-fourth week dealt with particles and undefined behavior

Week 75: Memory and Psychology

The seventy-fifth week saw the introduction of dynamically growing arenas and addressed the subject of impostor syndrome

Week 76: Memory Protection

The seventy-sixth week got hot code reloading working with dynamically allocated memory arenas and introduced underflow / overflow protection

Week 77: Debugging and Multiple Sim Regions

The seventy-seventh week comprised work on debugging memory, cutscene and traversable creation, and running multiple sim regions

Week 78: Multithreading Simulation Regions

The seventy-eighth week (actually the first weekend) was spent multithreading the simulation regions

Weekend 2: Isolating the Camera Update Code

The second weekend was spent isolating the camera update code

Weekend 3: Compression

The third weekend was spent implementing compression for the assets

Weekend 4: Clearing Out Pending GitHub Bugs

The fourth weekend was spent clearing out pending GitHub bugs in preparation for the 3D work of 2017

Weekend 5: CLANG Compatibility and Camera Control

The fifth weekend made the debug system compatible with CLANG and enabled camera zooming for variably sized rooms

Weekend 6: 3D

The sixth weekend was spent setting the stage for the switch to 3D