mirror of
https://github.com/Ed94/HandmadeHero.git
synced 2024-11-12 20:44:52 -08:00
75 lines
3.0 KiB
Markdown
75 lines
3.0 KiB
Markdown
# HandmadeHero
|
|
|
|
Any code I do for this [series](https://handmadehero.org) will be here.
|
|
|
|
***(Only original hand-written code will be here, no code from the series itself)***
|
|
|
|
## Scripts
|
|
|
|
* `build.ps1` - Builds the project use `.\scripts\build msvc <args> <module>` or `.\scripts\build clang <args> <module>`
|
|
* `debug` adds debug symbols, etc
|
|
* `dev` for development builds. (automatically adds debug)
|
|
* `optimize` for optimized builds.
|
|
* `verbose` gives more info on arguments passed to tools, etc.
|
|
* `module` is the module to build, can be any of `platform` or `engine` for this point in the codebase. (Eventually game will also be a separate module)
|
|
* `clean.ps1` - Cleans the project
|
|
* `update_deps.ps1` - Updates the project dependencies to their latest from their respective repos.
|
|
|
|
*Make sure to run `update_deps.ps1` before building for the first time.*
|
|
|
|
## Notes
|
|
|
|
Building requires msvc or llvm's clang + lld, and powershell 7
|
|
|
|
The build is done in two stages:
|
|
|
|
1. Build and run metaprogram to scan and generate dependent code for the module being built.
|
|
2. Build the the runtime for the module.
|
|
|
|
Module build order:
|
|
|
|
1. Engine
|
|
2. Platform
|
|
|
|
## Milestone
|
|
|
|
Day 35 : Basic Sparse Tilemap Storage
|
|
|
|
Features Done so far:
|
|
|
|
* Tailor made build system via powershell scripts
|
|
* Supports building the repo with msvc or clang
|
|
* Will only build a module if it detects changes (md5 is cached)
|
|
* Can stage codegen metaprograms to run before building the module
|
|
* Will automatically not run if app process is found (for engine module).
|
|
* Can emit exported mangled symbols for the engine module for hot-reload with the platform module without needing to use C linkage symbols or a complex hot-reload library (Live++, etc).
|
|
* Platform Layer:
|
|
* Direct Sound audio
|
|
* Keyboard & Mouse Input via GetAsyncKeyState & Win32 window messagng
|
|
* XInput controller support
|
|
* Dualsense controller support via joyshock library
|
|
* Software rendering via Win32 GDI
|
|
* Instantaneous hot reload of engine module
|
|
* Block Memory allocation via VirtualAlloc for engine module
|
|
* Memory mapped files for engine & game snapshots.
|
|
* Engine Layer:
|
|
* Take & load snapshots of either the engine's or game's memory state.
|
|
* Allows for engine or game state to be restored even if a crash occurs to exact memory state it was before.
|
|
* Basic input abstraction into hard-coded actions (``EngineActions` & `PlayerActions`)
|
|
* Record & replay input.
|
|
* WIP : 2.5D Tile Map
|
|
* Virtualized into chunks
|
|
|
|
## Gallery
|
|
|
|
![img](docs/imgs/handmade_win32_2023-10-16_23-08-11.png)
|
|
![img](docs/imgs/handmade_win32_2023-10-11_23-39-57.gif)
|
|
![img](docs/imgs/handmade_win32_2023-10-11_00-47-19.gif)
|
|
![img](docs/imgs/handmade_win32_2023-10-10_13-13-14.gif)
|
|
![img](docs/imgs/handmade_win32_2023-10-06_12-43-47.gif)
|
|
![img](docs/imgs/handmade_win32_2023-10-01_20-22-20.gif)
|
|
![img](docs/imgs/Code_2023-10-01_19-20-56.gif)
|
|
![img](docs/imgs/Code_2023-09-28_15-14-53.gif)
|
|
![img](https://files.catbox.moe/9zau4s.png)
|
|
![img](https://files.catbox.moe/b7ifa8.png)
|