This week was focussed on finally getting a little game ready to be played. For many things it’s still too early but a lot of basics needed to be finished and/or improved.
Soon vacation time starts and during the summer holiday I probably will work a lot less (if at all) on the game. So weekly updates 8, 9 and 10 probably will be much shorter – if they happen at all (or they will happen later). Should there be a brief period of silence, fret not – regular updates will return.
Random talent category selection improved
If you select random talent category selection during character creation the game now tries to create a variety of more sensible builds for the character. There are certain primary talent categories (arcane, combat, thievery and religion) and all the others are marked as secondary. In most cases the game will try to distribute the available talent points to a limited number of categories. It also ensures that (in most cased) one or more of them are selected from primary categories.
Skill selection implemented
Random skill selection was implemented. To achieve this a lot of things had to be done:
- Skills had to be associated with talent categories (e.g. grouping all knowledge skills, all combat skills, etc.). Currently we have a total of 80 skills in 10 talent categories.
- An experience cost system had to be implemented mapping initial skill points to levels.
- Weapon types had to be mapped to combat skills.
- Lots of layout issues were wrestled.
Skill selection tries to be smart:
- Each category has some primary (more important) skills that are handled preferentially.
- Available weapons and armor are taken into account to select the most useful combat skills.
- Generic skill points from the ‘Skills’ category are distributed on more important skills.
Skills now are distributed across three tabs (yet unstyled):



Started work on the extended combat system
If you look at the combat statistics for Realms of Ancardia in their current state you will notice more values than in ADOM:

- DV: Dodge (or defense) value. I can’t decide on naming. This number needs to be surpassed by the attack roll in order to hit a being.
- PV: Protection value. The amount of damage absorbed by armor, tough skin, magic or whatever whenever a being is hit by a damaging attack.
- #P: The number of parries per combat turn. Each time an attack hits the defender gets a chance to parry the blow for as long as he still has parry attempts available. Note that you can’t parry blows from attackers two size categories larger than the defender. Usually weapons grant one parry attempt (rapiers grant two). High weapon skills can modify this.
- PB: The parry bonus. A bonus to the roll to deflect an attack. If the parry roll is equal to or greater than the attack roll is blocked.
- #B: The number of block attempts per turn. These are granted by shields but rules-wise work like parries. Small shields grant one block attempt per turn, medium shields grant two and large shields grant three.
- BB: The block bonus. Larger shields grant higher bonusses. As well as high shield skills, magic, talents, etc.
- H: Hit points. You are dead when they drop to zero.
- P: Power points. Energy used to charge arcane spells.
- F: Faith points. Like power points. But for miracles. Godly magic is intended to be quite different from arcane magic in Realms of Ancardia.
Damage indicator added
We now have a nicely pulsing frame for the screen when the PC gets damaged. The frame gets thicker and thicker the more wounded the PC becomes. And the rate of pulsing increases as damage gets more serious.
Item statistics in the inventory
I spent way more time than I had planned or expected on displaying items in the inventory. Realms of Ancardia is pretty close to ADOM in the amount of statistics structurally (and has even more details like damage types, different but cumulative damage ratings and some other details) and it took quite a while to get the display of item statistics into a somewhat decent form. Here is a sample:


The bad thing is that I will have to completely refactor this because I noticed too late that the current approach prevents me from using that data in messages. Doh!
There are also some details to be fixed (e.g. the coloring with the weapon damage entry). And graphical glitz will eventually be added. Also more statistics (like e.g. seeing the full combat values for the stuff you equipped, etc.)
Character creation modifier infrastructure
I created infrastructure in order to allow subtle and less subtle character (or game state) modifications during character generation. Currently this is being used for
- handling hurthling special starting conditions
- ensuring that mist elves have all-mithril equipment
- very religious characters have guaranteed blessed equipment
In the future the same infrastructure will be used to e.g. handle special starting conditions due to date circumstances and other factors.
Time wasted on sucky Apple Silicon support
Apple really fucks up many great projects with its Apple Silicon move. Despite Apple Silicon being great. But so many good libraries simple don’t work because the hard-pressed communities spending their time, love and energy on these projects seem to be stretched too far by Apple Silicon requirements.
Our project was hit by the fact that LibVLC (at least to my knowledge) does not have any working support for arm64. At least I couldn’t get it to run after spending many hours trying to get this fixed.
As a consequence of my switch to Apple Silicon for the Apple version of Realms of Ancardia we no longer can play videos. Which sucks.
This caused me to switch to SkiaSharp as my new framework for video display. For now this seems to work (fingers crossed).
And Death rejoices…
Character generation is (mostly) complete
Except for some minor details (beautification, more starting equipment, saving defaults) character generation now is complete. It has (for now) four modes (random/deterministic world, random/deterministic player character) and you can select race, gender and talent priorities. Specific skills and starting equipment are selected by the game. Also the character generation screen has become a lot more interactive and smarter…

Miscellaneous minor changes and additions
- The skills tab on the ‘i’nformation dialog was split into “Combat skills”, “Primary skills” and “Secondary skills” as we ran out of room trying to put everything into one tab.
- Combat skills now provide a lot of extra infos.
- Added seven new skill definitions (climbing, mountaineering, consecration, compel undead, artificing, sacrifice, summoning).
- Items now can be blessed, uncursed or cursed.
- Three new items have been added.
- The keys 0-5 now can be used to instantly alter talent category levels during character generation.
- We now have functionality for string input (e.g. names).
- The inventory and back now show more detailed item descriptions.
- Fixed various small bugs.
- Added a number of missing translations.
- Krys designed tons of great graphical enhancements and detail improvements and I yet need to find the time to add them all. Our issue tracker (see below) is filled with them. For now we have decided to add a little more gameplay to see how certain things will work and stabilize before doing a grand graphical update development sprint (probably: several sprints).
Total size of the codebase after this week
- 36,186 LOC in 615 files for the actual Realms of Ancardia game
- 24,280 LOC in 408 files in my own underlying TBRLAPI framework library supporting my most recent roguelike games
- plus extra external configuration files, images, tilemaps, audio files, etc.
The running total is available here.
State of our internal ticket system
We use YouTrack to manage ideas and bugs that pop up. The listings are by no means complete – it’s more of a “don’t eventually forget to fix this bug / add that amazing feature” pipeline that gives a little structure to our development process without turning it into a managed project 😉
- 132 open issues in total
- 56 closed issues in total