diff --git a/README.md b/docs/README.md similarity index 53% rename from README.md rename to docs/README.md index 9d63b10..d9d9ba9 100644 --- a/README.md +++ b/docs/README.md @@ -1,11 +1,13 @@ # Rogged -Turn-based roguelike dungeon crawler, built in C99 and with a dash of Zig to -serve as a learning opportunity. Rogged is basically a classic roguelike where -you descend through floors of a procedurally generated dungeon, fighting -enemies, managing inventory, and trying to reach the bottom alive. +Turn-based, infinite roguelike dungeon crawler built with C99 and with a dash of +Zig. Meant to serve primarily, but not exclusively, as a learning opportunity. +Rogged is basically a classic roguelike where you descend through floors of a +procedurally generated dungeon, fighting enemies, managing inventory, and trying +to reach the bottom alive or die chasing a highscore! -A non-exhaustive list of its (current) features: +The game itself, be it the code or mechanics, is _heavily_ in development. For +now, a non-exhaustive list of its (current) features are as follows: - Turn-based combat with damage variance, critical hits, dodge, and block mechanics @@ -18,33 +20,27 @@ A non-exhaustive list of its (current) features: - Procedural audio via raylib - ASCII-inspired tile rendering, with HP bars and floating damage text -**Controls:** - -| Key | Action | -| ------------- | ----------------------------------- | -| WASD / Arrows | Move or attack | -| G | Pick up item | -| I | Open inventory | -| U | Use a potion | -| E | Equip item from inventory | -| D | Drop item | -| Y / N | Confirm / decline descending stairs | -| R | Restart (on game over) | -| Q | Quit | +There are still some features lacking polish, or lacking _any_ kind of attention +to be viable. For a semi-complete list of things that need to be done, see the +[future plans section](#future-plans). ## Build Instructions -Rogged is built with C99 and Zig. Besides `raylib` and `pkg-config` you will -need a C compiler and basic Zig tooling. For now, we use C99 and Zig 0.15.2. -Those might change in the future. - -Additionally you will need `clang-format` and `just` for the developer workflow -if you plan to contribute. +Rogged is built on a relatively simple stack. It uses C99 for the main game +logic, and Zig for the combat library. Besides `raylib` and `pkg-config`, you +only need the core Zig tooling. For now the required Zig version is 0.15.2, but +this might change in the future. Additionally, you will need `clang-format` and +`just` for common development tasks in the case you plan to contribute. For +building, Zig is enough. ### Using Nix (Recommended) -The recommended developer tooling is [Nix](https://nixos.org). This provides a -pure, reproducible devshell across all machines. +The _recommended_ way of developing this project is using +[Nix](https://nixos.org) and relying on devshells for pure, reproducible +developer environment across all machines. + +If you are a [Direnv](https://direnv.net) user, you may simply run +`direnv allow` or you may use `nix develop` to enter the default shell. ```sh # Enter the development shell @@ -56,6 +52,9 @@ $ just dev ### Manual Build +If you are allergic to good tooling and would rather use your system Zig, you +may simply invoke `zig build` after acquiring Zig 0.15.2. + ```sh # Full build $ zig build @@ -67,6 +66,8 @@ $ zig build run $ just dev ``` +The Justfile provides commands that work across both methods. + ### Task Runner Commands There's a `Justfile` designed to make common tasks somewhat easier. For now, @@ -84,10 +85,14 @@ If the project gets more complicated, new tasks might be added. ## Future Plans -The game is currently **playable end-to-end** but it lacks _serious_ polish to -claim its place as a fun roguelike. Some of the features I'd like to introduce, -in no particular order, are as follows: +The game is currently **playable end-to-end**, but it lacks a fair bit of polish +to claim its place as a fun, engaging roguelike you can just boot up and play. +Some of the features that are planned for the future, in no particular order, +are as follows: +- [ ] **Better enemy AI** - The current AI is very simple. +- [ ] **Fog of War** - Instead of loading the entire map, let the player + discover the rooms - [ ] **Save / Load system** - Persist and restore game state between sessions - [ ] **More enemy variety** - Additional enemy types with unique abilities - [ ] **More item variety** - Rings, wands, scrolls, and cursed items @@ -100,8 +105,9 @@ in no particular order, are as follows: - [ ] **UI polish** - Better message log history, item descriptions, death screen -In addition, it might be interesting to allow customizing the "world state" by -as scripting API. Though, that is for much later. +Later down the line it might be an interesting choice to provide a scripting +API, likely with Lua, to allow customizing the game state and events. Though, +that is for much later. ## Attributions @@ -118,4 +124,6 @@ Additionally, _huge_ thanks to [Raylib] for how easy it made graphics and audio. This was perhaps my best experience in developing a graphical application, and CERTAINLY the most ergonomic when it comes to writing a game. +--- + _I got rogged :/_