Dev Diary 55 - Opinions

Super important implementations of long-awaited features related to Understandings are arrived this week. Now the system is much more deep and role-play-capable than it was before and now is quite close to the design I intended: your people can now be, for example, xenophobic exocannibals, or vegetarian destruction-magic communists, or any other weird combination. I’ll describe the improvements to the system in this post.

Two years have passed since I first showed the game and an unbelievable amount of work was done - surprisingly, it’s still super fun me! So, I counted some pieces of work content that this game uses already, and it’s quite a lot!


Dev Diary 54 - Blood

This tenday brought a lot of handy updates. The most important, I finally fixed quick world reloading, and now you don’t have to relaunch the game when you to load or start a new run, haha! This also allowed me to fix some issues related to Replay Last Turn functionality and to implement the long-awaited undo button (which resets the state to the beginning of the turn). Due to unforgiving spell effects and combinations, where one little mistake might ruin everything (yes, this is intended), the game has become much more fun with “undo”. At first, Thinking of limiting it, like Into The Breach does, but I see no reason to do this without such cool narrative tricks like in Into The Breach, and now I find myself using it a lot (didn’t try with playtesters yet). Anyway, player turn in Colossal Citadels is more like “a planning stage”, even though you can see applied abilities.

Here how “Revert Turn” looks now:


Dev Diary 53 - Steps Of The Crow

Living through some extremely stressful legal stuff, I didn’t make anything highly important this tenday. Instead, I was calming myself by casually polishing and improving the clarity of battles and abilities: this is as always a very fun thing to do. Besides increased juiciness, now there are fewer awkward things like too fast and frequent abilities, unrhythmical delays between attacks, and so on. If only I knew how to fix these stupid ragdolls so that they won’t occasionally fly away to another continent… Yesterday, one of them hit right in the camera somehow (I didn’t even know it has collision on), sadly I wasn’t recording.

However, in addition to bugfixing and doing not-so-meaningful visual improvements, I came up with a couple of things that are quite a big deal in terms of improving the strategic view. First, I got rid of old movement prediction lines and replaced them with these animations I shown before. The lines weren’t visually finished, but even if they were, they caused insane visual overload anyway (a screenshot from a terrified player), when there are a lot of creatures. Second, strategic view now shows unified aggro ranges of enemies. It got a bit more convenient to quickly inspect the situation. Does the strategic view still look crypthic, though?


Changelog #52 - Procedural Resource Visuals 2

Typing this on my way to Kullens Fyr. A few days ago I decided to get a tighter grip on blog writing - I found it quite enjoyable as I realized that I actually have a lot of things to write about. I made two blog posts related to Colossal Citadels - one about its fog implementation, and the other about triangle grid, which is another unique thing about this game. Both blog posts got some attention and I’m happy with them.

But still, being in not a good mood, I’ve done not so much for Colossal Citadels; however, I’ve implemented a very important feature that actually needed a lot of internal work. Procedural resources, which you mine in the world (trees, stones, metals, etc) will have a visual effect on everything you craft and build: from yesterday on, weapons now have colors/textures/animations/vfx taken from ores, which I recently improved a lot. Procedural trees, stones, as well as procedural visuals for buildings and armor are on the way!

From other less important things, I’ve finally moved to C++20 - oh it’s so good! I couldn’t use ranges-v3 (the prototype of std::ranges feature from C++20, but supported in C++17), because of conflicts with Unreal Engine. But lately, someone pointed me out that the engine actually was already fixed to support the latest C++ and I can just try it (it didn’t work last time I tried). Now it does! So I’m enjoying nice cool things from the new standard now such as ranges, concepts and finally starts_with, haha! Also, I’m moving back to my favorite text editor, because Rider is paid now and still incredibly buggy - I used it because of fancy IntelliJ inspection tools, and Visual Studio is not in my taste (I hate it). There were a lot of issues with getting VS Code to work, but so far I managed to fix all of them and now having a pleasure to work in it.

Here is the full changelog:


Triangular Grid 2

Exactly two years later, I’m writing a follow-up article on triangle grids on my personal blog. It features better distance functions than in the latest article. Check it out!


Changelog #51 - Calculations

Very good to finally experience summer completely. It actually gets hot here in Sweden! I’ve been to midsommar celebration, some birthdays, and walks in the awesome Swedish forests, so this time there are not so much gameplay changes, but anyway, there are a lot of internal changes, plus some usability and tutorial improvements.

Meanwhile been slowly rewriting code to get rid of one library that caused much problems: I edited some code for like 10 minutes per day and I think there were over 20k lines changed. Then I decided to try again to fix the actual issue instead of removing the library. And somehow I succeeded! Now I have the latest version protobuf and it doesn’t crash when trying to free strings from memory after being dynamically reloaded. There was a lot of other issues with static linking (such as armed conflicts between ssl versions), but it turned out they all were solvable. What all that means? That in playtest build, your C drive won’t fill by 100G anymore and eventually you will be able to restart game without hitting Alt+F4 on gameover screen :D

Another thing - I really want to try Unreal Engine 5 and convert the project to it, since there are a lot of sweet things (such as C++20 support). But I can’t do that yet because I need tessellation, which were cut out in UE5 - and they didn’t provide any proper replacement. I tried to return it in engine sources, but there were too much changes then and since then. Maybe I’ll try again one day, but for now it’s better to concentrate on the game. For now, I only updated the project to 4.27.2.

Also, I replaced standard unordered containers with other implementations made by community. The choice fell to robin_hood for strings and emilib for ints - benchmarks in the internet shown that these are the fastest. This is a premature optimization and game didn’t needed that - but anyway, updated containers game 4-10 times turn calculation speed boost! Now it’s almost instant even on 300x300 maps where are a lot of things going. It was not a secret that standard containers are not as good, but such huge speed boost is quite surprising. Here is this benchmark. Author wants to update it - I hope he will include Unreal Engine’s TMap there.

Lastly, I made a couple of very important features that were waiting really long (but no longer than this protobuf bug, which have been here almost since project start). The first one - you can now manually deattach groups that are about to deattach on the next turn. This way you can select which resources go to deattached groups (by drag’n’dropping them). This is usually not needed because they are distributed automatically depending on productions, an intention of sending expedition to the wilderness, but sometimes you need to do this faster than through resource transfers after deattachment. So here it is - but actually resource rearrangement is not implemented yet… Another feature is production number breakdown - some players question why is it -10 food per turn, or -0.5 wood per turn. Now you can hover the production number and the game will list all things that contribute to the production number - other productions, food consumption, resource transfers and so on.

Here is the full changelog:


Changelog #50 - Metal

Another week of Colossal Citadels development, I did a lot of important bugfixing and finally gave attention to some very pleasant important feature, procedural resource visuals. It was well received in social networks (and of course, in r/procgen. Easy.) and I gained some new followers. I’m happy about it, because it’s one of fundamental features!

Haha, this week I’ll be playing a lot of NextFest demos, because I removed Colossal Citadels from it and won’t be as busy with it’s promotion. Now it will be possible to make it to the perfection for the next festival: there is a lot of essential stuff to do and playtest, especially the tutorial level. Unfortunately there was a little progress with implementation, but some progress with it’s design.

Another new thing is a quickly made trailer for some twitter event, see video above. It’s quite the same as the first trailer (the one on Steam), but it was very fun to make.

And here is the changelog:


Changelog #49 - Postponing the Demo

Hello, I’ll start with not so good news (though, I already said it week ago at Discord). Colossal Citadels won’t participate in this summers Steam NextFest. It’s good that I made wider playtesting time last weekend: a lot of useful conclusions were inferred from the tests. Thank you guys!

The most important conclusion (and the primary reason of postponing the demo until the nextnext fest) is that the game needs a better tutorial. The percentage of players struggling with basics with current hint-based tutorials is quite significant, and some players skip tutorials, thinking that the game is too intuitive and misunderstand some parts of controls. Sometimes the density of information in tutorial windows is too big to be remembered/processed at once, and players forget/don’t prioritize the most important points.

For example, the movement controls are non-traditional and have some unusual things about it. Here is a video I made that captures the essense of it:

I want the first few runs to be a smoother experience, so I’m going to make a separate tutorial level that teaches the basics by forcing players to do certain actions, read hints and click certain buttons on the screen. I designed most of that tutorial long ago, but I won’t be able to finish it before the NextFest. Quite sad to see that a lot of awesome games have published their demos right now :( But I believe this decision will make the game much better.

If some of you really wanted to try the demo, you’ll be able to test the new tutorial (and main gameplay) when the tutorial is finished: I’ll just send you a message/email when it’s time, if you applied to a playtest.

I also made a very important feature for strategy games: tooltip extensions. Here is demonstration video. So, now you can hover tooltips and they will be extended into more tooltips, and you’ll be able to learn the whole game starting with just one popup!

Here is a changelog. It’s not long, but meaningful:


Changelog #48 - Armor

This tenday I made even less features and even more insectoidquashing than the week before. A lot of big problems come from google’s protobuf library, which I’m using in this project. They couldn’t make it to work with dynamic loading and even refuse to try, and Unreal Engine, as well as a lot of other software, makes use of it. Problems come in form of memory leaks, since certain functions don’t work (such as releasing arena buffers with strings). I was hoping to fix it soon, but looks like it’s not an adequate task, because this library is bigger than my game :) So, I started to rewrite related code and already changed over 7k lines of code to get rid of the library. The best replacement is Unreal Engine’s serialization and RPCs, even though I’ll have to give up some cool things such as proto definitiona. This rewrite branch is still work in progress, and the memory is still leaking now! But I guess that’s ok for pre-alpha, unless you have 4G of RAM.

Back to more interesting stuff: I redesigned how armor works to make it clearer. At first, there was an idea of turning armor into “hp bar extension” that will restore each turn: it would work like something between Divinity: Original Sin 2 and Slay the Spire. This would allow trickier combos and underline the feeling of “a perfect turn”, when you carefully plan to take no damage and do an effect on the battlefield. Armor-gaining skills would getting much more juicy (see Slay the Spire), and some other features like denying cold damage with fire damage and backwards would work more intuitively. It’s also much clearer to player than the previous system of “defense points”, that non-linearly added to damage percentage cut. For example, 1 point was 5%, 2 points was 9%, and it never gets to 100%.

But there are problems with it: we have a lot of types and damage/defense in design: pierce, blunt, fire, cold, lightning, poison. All of these can’t be shown on a healthbar at once, and there are dozens of units on the screen at the same time. Information needs to be clear and go as fast as possible. It would be inconvenient repeatedly open popups to see defenses; damage predictions on healthbars won’t show damage due to first few strikes taking armor instead of health points. So, this defense style doesn’t fit for this scale of the game. If there were 4 units on screen and not 20, it would make a greater experience. Maybe I’ll leave this idea for future games.

There is much simpler solution. Because there are six types of damage, it’s perfectly fine to have 100% defense for one of them. So now armor is simply adding flat damage block! It linearly stacks with skills, resource effects and everything else. For physical damage armor, it would be easy to gain big defense, but almost impossible to gain 100%. Against elemental damage, it would be not uncommon to have 100% defense against some type of damage and vulnerability to some other.

Besides from armor, I improved menu design and made it more eye-candy; also, more turn prediction visualization work. Here is the full changelog.


Public playtest incoming

Hey! Colossal Citadels is going to have more unsupervised pre-alpha tests, and I need more people for that. If you want to participate, fill up this form and wait a until the end of the week!

Disclaimer: this will be a limited version of first N turns with fixed maps and less procedural generation - it will be easier for me to judge about the experience of tutorials and first steps in the game. Also, of course, a lot of bugs and feature placeholders.

When it starts I would be thankful if you play the game and destroy it: your critique can be used to improve the game.

Thanks a lot!