Posted November 11, 2023 by Klaim
#c++ #gdextension #modules #build2 #github
This week I mainly focused on completing the technical setup of the project. Last week I thought I would have enough of one week but it was optimistic and I overestimated how much I could do per week for this project and the obviously slightly random technical issues that makes everything slower. It’s fine and actually expected and planned around to have this kind of realizations. The whole planning I have is built to be adjustable without moving deadlines. But it needed an adjustment now.
So one thing I did is I took all the technical setup tasks which were not mandatory to progress on the game, tasks which were mostly useful stuffs or convenience or workflow related but not mandatory; I took these and put them in a separate column in my trello called “WARMUP”. Every time I sit to start working on a game, I like to just first work on a small non-crucial thing both as a warmup task and also as a way to feel like improving the overall situation, usually improving details of the game or workflow. These dont need to have a deadline, I just pick them when I dont feel yet ready to do great things.
I’ll avoid boring you with the details of planning for now, but basically I then just shuffled around some tasks, removed some (for later) and kept the deadline I setup for myself for v0.1
. We’ll see if I am still overestimating. If so, I’ll re-adjust again next week.
I dont know if I will publish v0.1
as it will probably not have any relevant gameplay, or I’ll maybe just send it to a few friends to check that it works on their computers. I have other ideas like that, but it’s not yet time to decide that.
While I was working on the technical setup, I got news that build2
staged version (the in-progress version, not stable) started having some upgrades relative to C++ modules support in clang. I learned from build2
devs that part of the issues I was seeing last week were actually because clang changed the prefered way to handle C++ modules (flags, and steps to handle them) and build-systems had to adapt. build2
wasnt’yet up to date but it is now at least in the stage version, that I already use (cause I’m bleeding from the edge!). So now I can actually use modules and yesterday I managed to set that up for at least the core/model part of the game. There isnt much code yet but it’s already helping with clarifying boundaries and avoiding having to handle header include dirs stuffs, worrying about what includes what etc.
I couldnt make the gdextension compile as a C++ module because of some obscure errors that for now I suspect are still clang issues but will check also with build2
people. Also, for some reason, if you have a cpp file which is the source of a test executable, and you include doctest, then import the module you want to test, there are errors which suggests clang (or msvc’s stl which is used here) still have some corner cases to fix. It’s easy to workaround though, just import before including doctest’s headers. But that should not be an issue, as C++ modules imports should be agnostic from where they appear in a file, meaning, contrary to including headers, order of imports should not have any impact on anything.
Anyway it’s cool to still be able to start the project with some C++ modules support, and I can always regress to the usual header setup if there are too many issues. Hopefully, most issues will be removed once msvc is supported by build2
. Also, I would love support for import std;
, C++23 feature, and I believe this is coming soon (just need some more build2
updates).
Yesterday I hit an issue with github, which use as my CI for now: there is a limit I didnt know about for CI usage of private project. I now deactivated usage of github CI and for now (because it’s not too important yet) I will just build on my local Windows and check sometimes on my linux laptop. I’ll still keep the github repo as a backup of course (also some other personal servers). I dont know if I will pay the fee later or setup my own CI at some point. I think I would pay the fee if I didnt have one of the steps of the CI taking about 40 minutes and I didnt manage to make caching work yet, that is, at the moment it would be expensive. The other possibility is to make the whole game open-source and benefit from free CI… but for now I was thinking doing this only later in the life of the project. Welp, for now I’ll just build locally and hope I’m not breaking MacOS support in particular.
Next week’s plan is mostly focused on solidifying some design choices, documenting them and starting the core model of the game (something similar to the what you can see in the code of the prototypes).