Each summer the r/roguelikedev community on Reddit has a summer event[1] in which we all make a simple roguelike game, roughly following the libtcod roguelike tutorial. I previously participated in 2020, 2021, 2022, 2023.
Each year I want to learn new things by trying something different. I also have a problem with scope creep[2] where I try to do too much. This year I limited myself to these three goals:
- Use table/spreadsheet data structures instead of OOP or ECS. I wanted this for my 2023 project[3], and want to use that structure everywhere this year, including indexes, spreadsheet formulas, queries, and editing the spreadsheet to see the changes in the game.
- Embrace Javascript instead of holding my nose using it. This includes prototype inheritance, dynamic types (but with jsdoc sometimes), dynamic field access, no-build setup, async/await, eval(), dynamic modules, and the with statement.
- Learn the Jujutsu version control system[4] as an alternative to Git. This is in part because I think it’s interesting, but in part because it lets me have a “two dimensional” history, with one dimension being time and one dimension being the chapters of the roguelike tutorial.
To keep my scope under control, I also made a list of things I did not want to learn:
- Stick to the features in the tutorial (unlike 2021–2023 where I tried things like thin walls, learning a new programming language, a new field of view algorithm, stackable inventory items, friendly NPCs, farming, hunger system, and even a full colony simulator like Dwarf Fortress).
- Use a language and library I already know: Javascript and ROT.js[5]. I love making my own engine but that is a distraction.
- Write the UI in HTML instead of making my own in the console. I did this in previous years and it went well.
It went well. I learned a lot.
Notes about each part of the tutorial:
- Part 0 - Setting up
- Part 1 - Drawing the ‘@’ symbol and moving it around
- Part 2 - The generic Entity, the render functions, and the map
- Part 3 - Generating a dungeon
- Part 4 - Field of view
- Part 5 - Placing enemies and kicking them (harmlessly)
- Part 6 - Doing (and taking) some damage
- Part 7 - Creating the interface
- Part 8 - Items and Inventory
- Part 9 - Ranged Scrolls and Targeting
- Part 10 - Saving and loading
- Part 11 - Delving into the Dungeon
- Part 12 - Increasing Difficulty
- Part 13 - Gearing up
[LLM use: I did not use LLMs to write any of the project code or writeup. However I did ask an LLM to suggest more unit tests for my table class. And I had an LLM passively checking my code[6]. And when I ran into language or library features that I couldn’t figure out, I searched with search engines, stackoverflow, and LLMs to get clarifications and examples.]