S01E01 |
Day 001 - Setting Up the Windows Build
|
November 18, 2014
YouTube
|
113
|
|
S01E02 |
Day 002 - Opening a Win32 Window
|
November 19, 2014
YouTube
|
60
|
|
S01E03 |
Day 003 - Allocating a Backbuffer
|
November 20, 2014
YouTube
|
93
|
|
S01E04 |
Day 004 - Animating the Backbuffer
|
November 20, 2014
YouTube
|
94
|
|
S01E05 |
Day 005 - Windows Graphics Review
|
November 22, 2014
YouTube
|
127
|
|
S01E06 |
Day 006 - Gamepad and Keyboard Input
|
November 25, 2014
YouTube
|
81
|
|
S01E07 |
Day 007 - Initializing DirectSound
|
November 25, 2014
YouTube
|
92
|
|
S01E08 |
Day 008 - Writing a Square Wave to DirectSound
|
November 26, 2014
YouTube
|
93
|
|
S01E09 |
Day 009 - Variable-Pitch Sine Wave Output
|
November 27, 2014
YouTube
|
123
|
|
S01E10 |
Day 010 - QueryPerformanceCounter and RDTSC
|
November 28, 2014
YouTube
|
118
|
|
S01E11 |
Day 011 - The Basics of Platform API Design
|
December 2, 2014
YouTube
|
102
|
|
S01E12 |
Day 012 - Platform-independent Sound Output
|
December 2, 2014
YouTube
|
97
|
|
S01E13 |
Day 013 - Platform-independent User Input
|
December 3, 2014
YouTube
|
93
|
|
S01E14 |
Day 014 - Platform-independent Game Memory
|
December 5, 2014
YouTube
|
95
|
|
S01E15 |
Day 015 - Platform-independent Debug File I/O
|
December 5, 2014
YouTube
|
93
|
|
S01E16 |
Day 016 - VisualStudio Compiler Switches
|
December 8, 2014
YouTube
|
91
|
|
S01E17 |
Day 017 - Unified Keyboard and Gamepad Input
|
December 9, 2014
YouTube
|
101
|
|
S01E18 |
Day 018 - Enforcing a Video Frame Rate
|
December 11, 2014
YouTube
|
87
|
|
S01E19 |
Day 019 - Improving Audio Synchronization
|
December 11, 2014
YouTube
|
104
|
|
S01E20 |
Day 020 - Debugging the Audio Sync
|
December 12, 2014
YouTube
|
166
|
|
S01E21 |
Day 021 - Loading Game Code Dynamically
|
December 15, 2014
YouTube
|
103
|
|
S01E22 |
Day 022 - Instantaneous Live Code Editing
|
December 17, 2014
YouTube
|
113
|
|
S01E23 |
Day 023 - Looped Live Code Editing
|
December 18, 2014
YouTube
|
106
|
|
S01E24 |
Day 024 - Win32 Platform Layer Cleanup
|
December 19, 2014
YouTube
|
98
|
|
S01E25 |
Day 025 - Finishing the Win32 Prototyping Layer
|
December 19, 2014
YouTube
|
150
|
|
S01E26 |
Day 026 - Introduction to Game Architecture
|
December 22, 2014
YouTube
|
90
|
|
S01E27 |
Day 027 - Exploration-based Architecture
|
December 23, 2014
YouTube
|
102
|
|
S01E28 |
Day 028 - Drawing a Tile Map
|
December 24, 2014
YouTube
|
96
|
|
S01E29 |
Day 029 - Basic Tile Map Collision Checking
|
December 25, 2014
YouTube
|
99
|
|
S01E30 |
Day 030 - Moving Between Tile Maps
|
December 26, 2014
YouTube
|
115
|
|
S01E31 |
Day 031 - Tilemap Coordinate Systems
|
December 29, 2014
YouTube
|
93
|
|
S01E32 |
Day 032 - Unified Position Representation
|
December 30, 2014
YouTube
|
96
|
|
S01E33 |
Day 033 - Virtualized Tile Maps
|
December 31, 2014
YouTube
|
91
|
|
S01E34 |
Day 034 - Tile Map Memory
|
January 1, 2015
YouTube
|
108
|
|
S01E35 |
Day 035 - Basic Sparse Tilemap Storage
|
January 2, 2015
YouTube
|
107
|
|
S01E36 |
Day 036 - Loading BMPs
|
January 5, 2015
YouTube
|
91
|
|
S01E37 |
Day 037 - Basic Bitmap Rendering
|
January 6, 2015
YouTube
|
93
|
|
S01E38 |
Day 038 - Basic Linear Bitmap Blending
|
January 7, 2015
YouTube
|
103
|
|
S01E39 |
Handmade Hero - Announcement Trailer
|
November 12, 2014
|
90
|
|
S01E40 |
Intro to C on Windows - Day 1
|
November 12, 2014
|
90
|
|
S01E41 |
Intro to C on Windows - Day 2
|
November 14, 2014
|
90
|
|
S01E42 |
Intro to C on Windows - Day 3
|
November 14, 2014
|
90
|
|
S01E43 |
Intro to C on Windows - Day 4
|
November 15, 2014
|
90
|
|
S01E44 |
Intro to C on Windows - Day 5
|
November 16, 2014
|
90
|
|
S01E45 |
Basic Emacs Tutorial
season finale
|
December 16, 2014
|
37
|
|
S01E46 |
Day 039 - Basic Bitmap Rendering Cleanup
|
January 8, 2015
YouTube
|
90
|
|
S01E47 |
Day 040 - Cursor Hiding and Fullscreen Support
|
January 9, 2015
YouTube
|
72
|
|
S01E48 |
Day 041 - Overview of the Types of Math Used in Games
|
January 12, 2015
YouTube
|
94
|
|
S01E49 |
Day 042 - Basic 2D Vectors
|
January 12, 2015
YouTube
|
101
|
|
S01E50 |
Day 043 - The Equations of Motion
|
January 14, 2015
YouTube
|
99
|
|
S01E51 |
Day 044 - Reflecting Vectors
|
January 15, 2015
YouTube
|
90
|
|
S01E52 |
Day 045 - Geometric vs. Temporal Movement Search
|
January 16, 2015
YouTube
|
90
|
|
S01E53 |
Day 046 - Basic Multiplayer Support
|
January 20, 2015
YouTube
|
108
|
|
S01E54 |
Day 047 - Vector Lengths
|
January 20, 2015
YouTube
|
83
|
|
S01E55 |
Day 048 - Line Segment Intersection Collisions
|
January 21, 2015
YouTube
|
60
|
|
S01E56 |
Day 049 - Debugging Canonical Coordinates
|
January 22, 2015
YouTube
|
90
|
|
S01E57 |
Day 050 - Basic Minkowski-based Collision Detection
|
January 23, 2015
YouTube
|
104
|
|
S01E58 |
Day 051 - Separating Entities By Update Frequency
|
January 27, 2015
YouTube
|
87
|
|
S01E59 |
Day 052 - Entity Movement in Camera Space
|
January 27, 2015
YouTube
|
102
|
|
S01E60 |
Day 053 - Environment Elements as Entities
|
January 28, 2015
YouTube
|
81
|
|
S01E61 |
Day 054 - Removing the Dormant Entity Concept
|
January 29, 2015
YouTube
|
78
|
|
S01E62 |
Day 055 - Hash-based World Storage
|
January 30, 2015
YouTube
|
118
|
|
S01E63 |
Day 056 - Switching from Tiles to Entities
|
February 2, 2015
YouTube
|
77
|
|
S01E64 |
Day 057 - Spatially Partitioning Entities
|
February 3, 2015
YouTube
|
85
|
|
S01E65 |
Day 058 - Using the Spatial Partition
|
February 4, 2015
YouTube
|
88
|
|
S01E66 |
Day 059 - Adding a Basic Familiar Entity
|
February 6, 2015
YouTube
|
99
|
|
S01E67 |
Day 060 - Adding Hitpoints
|
February 6, 2015
YouTube
|
94
|
|
S01E68 |
Day 061 - Adding a Simple Attack
|
February 10, 2015
YouTube
|
101
|
|
S01E69 |
Day 062 - Basic Moving Projectiles
|
February 11, 2015
YouTube
|
79
|
|
S01E70 |
Day 063 - Simulation Regions
|
February 12, 2015
YouTube
|
89
|
|
S01E71 |
Day 064 - Mapping Entity Indexes to Pointers
|
February 13, 2015
YouTube
|
84
|
|
S01E72 |
Day 065 - Finishing the Simulation Region Change
|
February 13, 2015
YouTube
|
86
|
|
S01E73 |
Day 066 - Adding Support for Non-spatial Entities
|
February 16, 2015
YouTube
|
73
|
|
S01E74 |
Day 067 - Making Updates Conditional
|
February 18, 2015
YouTube
|
90
|
|
S01E75 |
Day 068 - Exact Enforcement of Maximum Movement Distances
|
February 19, 2015
YouTube
|
88
|
|
S01E76 |
Day 069 - Pairwise Collision Rules
|
February 19, 2015
YouTube
|
84
|
|
S01E77 |
Day 070 - Exploration To-do List
|
February 20, 2015
YouTube
|
95
|
|
S01E78 |
Day 071 - Converting to Full 3D Positioning
|
February 24, 2015
YouTube
|
93
|
|
S01E79 |
Day 072 - Proper 3D Inclusion Tests
|
February 25, 2015
YouTube
|
90
|
|
S01E80 |
Day 073 - Temporarily Overlapping Entities
|
February 26, 2015
YouTube
|
78
|
|
S01E81 |
Day 074 - Moving Entities Up and Down Stairwells
|
February 27, 2015
YouTube
|
93
|
|
S01E82 |
Day 075 - Conditional Movement Based on Step Heights
|
February 27, 2015
YouTube
|
86
|
|
S01E83 |
Day 076 - Entity Heights and Collision Detection
|
March 10, 2015
YouTube
|
87
|
|
S01E84 |
Day 077 - Entity Ground Points
|
March 11, 2015
YouTube
|
81
|
|
S01E85 |
Day 078 - Multiple Collision Volumes Per Entity
|
March 12, 2015
YouTube
|
78
|
|
S01E86 |
Day 079 - Defining the Ground
|
March 13, 2015
YouTube
|
98
|
|
S01E87 |
Day 080 - Handling Traversables in the Collision Loop
|
March 14, 2015
YouTube
|
76
|
|
S01E88 |
Day 081 - Creating Ground with Overlapping Bitmaps
|
March 19, 2015
YouTube
|
98
|
|
S01E89 |
Day 082 - Caching Composited Bitmaps
|
March 20, 2015
YouTube
|
92
|
|
S01E90 |
Day 083 - Premultiplied Alpha
|
March 20, 2015
YouTube
|
110
|
|
S01E91 |
Day 084 - Scrolling Ground Buffer
|
March 24, 2015
YouTube
|
78
|
|
S01E92 |
Day 085 - Transient Ground Buffers
|
March 25, 2015
YouTube
|
76
|
|
S01E93 |
Day 086 - Aligning Ground Buffers to World Chunks
|
March 26, 2015
YouTube
|
85
|
|
S01E94 |
Day 087 - Seamless Ground Textures
|
March 27, 2015
YouTube
|
71
|
|
S01E95 |
Day 088 - Push Buffer Rendering
|
March 28, 2015
YouTube
|
75
|
|
S01E96 |
Day 089 - Renderer Push Buffer Entry Types
|
March 31, 2015
YouTube
|
76
|
|
S01E97 |
Day 090 - Bases Part I
|
April 1, 2015
YouTube
|
83
|
|
S01E98 |
Day 091 - Bases Part II
|
April 2, 2015
YouTube
|
69
|
|
S01E99 |
Day 092 - Filling Rotated and Scaled Rectangles
|
April 3, 2015
YouTube
|
75
|
|
S01E100 |
Day 093 - Textured Quadrilaterals
|
April 4, 2015
YouTube
|
86
|
|
S01E101 |
Day 094 - Converting sRGB to Light-linear Space
|
April 7, 2015
YouTube
|
82
|
|
S01E102 |
Day 095 - Gamma-correct Premultiplied Alpha
|
April 8, 2015
YouTube
|
78
|
|
S01E103 |
Day 096 - Introduction to Lighting
|
April 9, 2015
YouTube
|
117
|
|
S01E104 |
Day 097 - Adding Normal Maps to the Pipeline
|
April 10, 2015
YouTube
|
76
|
|
S01E105 |
Day 098 - Normal Map Code Cleanup
|
April 11, 2015
YouTube
|
77
|
|
S01E106 |
Day 099 - Test Environment Maps
|
April 14, 2015
YouTube
|
81
|
|
S01E107 |
Day 100 - Reflection Vectors
|
April 15, 2015
YouTube
|
74
|
|
S01E108 |
Day 101 - The Inverse and the Transpose
|
April 16, 2015
YouTube
|
89
|
|
S01E109 |
Day 102 - Transforming Normals Properly
|
April 17, 2015
YouTube
|
91
|
|
S01E110 |
Day 103 - Card-like Normal Map Reflections
|
April 18, 2015
YouTube
|
78
|
|
S01E111 |
Day 104 - Switching to Y-is-up Render Targets
|
April 21, 2015
YouTube
|
73
|
|
S01E112 |
Day 105 - Cleaning Up the Renderer API
|
April 22, 2015
YouTube
|
79
|
|
S01E113 |
Day 106 - World Scaling
|
April 23, 2015
YouTube
|
71
|
|
S01E114 |
Day 107 - Fading Z Layers
|
April 24, 2015
YouTube
|
81
|
|
S01E115 |
Day 108 - Perspective Projection
|
April 25, 2015
YouTube
|
94
|
|
S01E116 |
Day 109 - Resolution-Independent Rendering
|
April 28, 2015
YouTube
|
85
|
|
S01E117 |
Day 110 - Unprojecting Screen Boundaries
|
April 30, 2015
YouTube
|
83
|
|
S01E118 |
Day 111 - Resolution-Independent Ground Chunks
|
May 1, 2015
YouTube
|
65
|
|
S01E119 |
Day 112 - A Mental Model of CPU Performance
|
May 5, 2015
YouTube
|
86
|
|
S01E120 |
Day 113 - Simple Performance Counters
|
May 6, 2015
YouTube
|
72
|
|
S01E121 |
Day 114 - Preparing a Function for Optimization
|
May 7, 2015
YouTube
|
83
|
|
S01E122 |
Day 115 - SIMD Basics
|
May 7, 2015
YouTube
|
97
|
|
S01E123 |
Day 116 - Converting Math Operations to SIMD
|
May 8, 2015
YouTube
|
109
|
|
S01E124 |
Day 117 - Packing Pixels for the Framebuffer
|
May 12, 2015
YouTube
|
95
|
|
S01E125 |
Day 118 - Wide Unpacking and Masking
|
May 13, 2015
YouTube
|
92
|
|
S01E126 |
Day 119 - Counting Intrinsics
|
May 14, 2015
YouTube
|
102
|
|
S01E127 |
Day 120 - Measuring Port Usage with IACA
|
May 15, 2015
YouTube
|
100
|
|
S01E128 |
Day 121 - Rendering in Tiles (Marathon)
|
May 17, 2015
YouTube
|
257
|
|
S01E129 |
Day 122 - Introduction to Multithreading
|
May 25, 2015
YouTube
|
79
|
|
S01E130 |
Day 123 - Interlocked Operations
|
May 27, 2015
YouTube
|
90
|
|
S01E131 |
Day 124 - Memory Barriers and Semaphores
|
May 28, 2015
YouTube
|
85
|
|
S01E132 |
Day 125 - Abstracting the Work Queue
|
May 29, 2015
YouTube
|
84
|
|
S01E133 |
Day 126 - Circular FIFO Work Queue
|
May 30, 2015
YouTube
|
93
|
|
S01E134 |
Day 127 - Aligning Rendering Memory
|
June 2, 2015
YouTube
|
77
|
|
S01E135 |
Day 128 - Push-time Transforms
|
June 3, 2015
YouTube
|
86
|
|
S01E136 |
Day 129 - Adding Orthographic Projection
|
June 4, 2015
YouTube
|
88
|
|
S01E137 |
Day 130 - Seamless Bilinear Tiling
|
June 5, 2015
YouTube
|
74
|
|
S01E138 |
Day 131 - Asynchronous Ground Chunk Composition
|
June 9, 2015
YouTube
|
83
|
|
S01E139 |
Day 132 - Asset Streaming
|
June 10, 2015
YouTube
|
85
|
|
S01E140 |
Day 133 - Preliminary Asset Structuring
|
June 11, 2015
YouTube
|
86
|
|
S01E141 |
Day 134 - Mapping Assets to Bitmaps
|
June 12, 2015
YouTube
|
84
|
|
S01E142 |
Day 135 - Typed Asset Arrays
|
June 13, 2015
YouTube
|
98
|
|
S01E143 |
Day 136 - Tag-based Asset Retrieval
|
June 16, 2015
YouTube
|
69
|
|
S01E144 |
Day 137 - Matching Periodic Tags
|
June 17, 2015
YouTube
|
70
|
|
S01E145 |
Day 138 - Loading WAV Files
|
June 18, 2015
YouTube
|
81
|
|
S01E146 |
Day 139 - Introduction to Sound Mixing
|
June 19, 2015
YouTube
|
78
|
|
S01E147 |
Day 140 - Implementing a Sound Mixer
|
June 20, 2015
YouTube
|
88
|
|
S01E148 |
Day 141 - Streaming Large Audio in Chunks
|
June 23, 2015
YouTube
|
88
|
|
S01E149 |
Day 142 - Per-sample Volume Interpolation
|
June 24, 2015
YouTube
|
78
|
|
S01E150 |
Day 143 - Pitch Shifting in the Mixer
|
June 25, 2015
YouTube
|
83
|
|
S01E151 |
Day 144 - SSE Mixer Pre and Post Loops
|
June 27, 2015
YouTube
|
97
|
|
S01E152 |
Day 145 - SSE Mixer Main Loop
|
June 30, 2015
YouTube
|
78
|
|
S01E153 |
Day 146 - Accumulation vs. Explicit Calculation
|
July 1, 2015
YouTube
|
109
|
|
S01E154 |
Day 147 - Defining the Asset File
|
July 14, 2015
YouTube
|
78
|
|
S01E155 |
Day 148 - Writing the Asset File Header
|
July 15, 2015
YouTube
|
100
|
|
S01E156 |
Day 149 - Writing Assets to the Asset File
|
July 16, 2015
YouTube
|
94
|
|
S01E157 |
Day 150 - Loading Assets from the Asset File
|
July 17, 2015
YouTube
|
82
|
|
S01E158 |
Day 151 - New Platform File API
series finale
|
July 18, 2015
YouTube
|
74
|
|