-
Notifications
You must be signed in to change notification settings - Fork 2
/
index.md.html
190 lines (127 loc) · 4.97 KB
/
index.md.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
<meta charset="utf-8" />
<link rel="stylesheet" href="css/style.css"/> <!--Based on "Slate" style of Markdeep-->
**Handmade Hero Notes**
## [Foreword](articles/preface.md.html).
## [Appendix. Glossary and References](articles/appendix.md.html).
# [Day 1](html/day1.html). Setting Up the Windows Build
1. Set up [Visual Studio][msvc].
2. Configure Command Prompt.
3. Set up a Text Editor ([4coder][]/[vscode][]).
4. Create the First Code File (`win32_handmade.cpp`).
5. `build.bat` philosophy.
6. Intro to debugging in [Visual Studio][msvc] and [RemedyBG][].
# [Day 2](html/day2.html). Opening a Win32 Window
1. Create and Register the WindowClass.
2. Create Main Windows Callback, Start Processing Basic Messages.
3. Create a Window.
4. Start the Message Loop with `GetMessageA`.
# [Day 3](html/day3.html). Allocating a Back Buffer
1. Create a Bitmap using `CreateDIBSection`.
2. Output the Bitmap to the Window using `StretchDIBits`.
# [Day 4](html/day4.html). Animating the Back Buffer
1. Custom Bitmap Memory Allocation.
3. Render a Gradient to the Bitmap.
4. Animate the Bitmap on Each Frame.
5. RGB Color Packing in Windows.
# [Day 5](html/day5.html). Windows Graphics Review
1. Pack the Bitmap-related Globals Into a Struct
2. The Stack
3. Full Program Step-through
# [Day 6](html/day6.html). Gamepad and Keyboard Input
1. XInput
2. Direct Library Loading
3. Process Keyboard Messages
# [Day 7](html/day7.html). Initializing DirectSound
1. Load Direct Sound
2. Initialize the Buffers
3. Deep Dive: COM, Vtables, Disassembly
# [Day 8](html/day8.html). Writing a Square Wave to DirectSound
1. Write to a Circular Buffer
2. Square Wave
3. Play Sound through DirectSound
# [Day 9](html/day9.html). Variable-Pitch Sine Wave Output
1. Generate a Sine Wave
2. Debug Sample Writing
3. Link Sound Pitch to User Input
# [Day 10](html/day10.html). QueryPerformanceCounter and RDTSC
1. Time the frame using `QueryPerformanceCounter` and `RDTSC`
2. String formatting tools in the C Standard Library
3. Intro to Dimensional Analysis
# [Day 11](html/day11.html). The Basics of Platform API Design
1. About Code Architecture
2. Platform Usage Philosophies
3. Start Implementing Game as Service System Style
# [Day 12](html/day12.html). Platform-Independent Sound Output
1. Intro to our API Design Approach
2. Start Generating Sounds on the Game Layer
3. Make Use of Sound Generation in the Platform Layer
# [Day 13](html/day13.html). Platform-Independent User Input
1. Think of a Possible Input System Usage
2. Make a First Pass on the Input System
# [Day 14](html/day14.html). Platform-Independent Game Memory
1. Intro to Memory Management
2. Design and Implementation of Our Approach
3. Assertions
# [Day 15](html/day15.html). Platform-Independent Debug File I/O
1. About File I/O in Games
2. Platform Implementation of the Debug I/O
3. Safe Truncation
# [Day 16](html/day16.html). Visual Studio Compiler Switches
1. Enable Compiler Warnings
2. Set Other Compiler Switches
3. Try a 32-bit Build
# [Day 17](html/day17.html). Unified Keyboard and Gamepad Input
1. Move Keyboard Input to WinMain
2. Finish Gamepad Stick Code
3. Improve Keyboard Input Processing
# [Day 18](html/day18.html). Enforcing a Video Frame Rate
1. Define frame rate problem
2. Implement first pass solution
3. Some Cleanup and Refactoring
# [Day 19](html/day19.html). Improving Audio Synchronization
1. Visualize the DirectSound Cursors
2. Deep-dive Debugging: Audio Skipping
3. Increase Audio Latency
# [Day 20](html/day20.html). Debugging the Audio Sync
1. Deep Dive into Audio Latency Issue
2. Implement Two Audio Paths
3. Introduce GameGetSoundSamples
4. More Debug Work
# [Day 21](html/day21.html). Loading Game Code Dynamically
1. Separate Game From Platform
2. Build Game DLL
3. Reload Game DLL at Runtime
# [Day 22](html/day22.html). Instantaneous Live Code Editing
1. Variable PDB Name
2. Re-enable Debugger Support
3. Remove Delay Between Reloads
# [Day 23](html/day23.html). Looped Live Code Editing
1. Add a Test Player
2. Implement Live Loop
3. Showcase Live Loop Editing
# [Day 24](html/day24.html). Win32 Platform Layer Cleanup
1. Various Code Improvements
2. String Building Routines
# [Day 25](html/day25.html). Finishing the Win32 Prototyping Layer
1. Capture Mouse Input
2. Improve Replay Handling
3. Clean Up Platform Debug Code
# [Day 26](html/day26.html). Introduction to Game Architecture
1. About Software Architecture
2. Game Architecture for Handmade Hero
# [Day 27](html/day27.html). Exploration-based Architecture
1. Explore and Lock architecture approach
2. Game Design for Handmade Hero
3. Test Code Cleanup
4. DrawRectangle Function
# [Day 28](html/day28.html). Drawing a Tile Map
1. Floating-point Color
2. Basic Tile Map
3. Getting a Player on the Screen
4. Aside: A bit of Color Theory
# [Day 29](html/day29.html). Basic Tile Map Collision Checking
1. Player Collision with the Tilemap
2. Multiple Tile Maps
-------------
(insert articles/links.md.html here)
<script src="js/markdeep.min.js" charset="utf-8"></script>