Roguelike Games created by Thomas Biskup, the Creator of ADOM

Tag: talent system

Realms of Ancardia (Weekly Update 7)

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):

Combat skills
Primary skills
Secondary skills

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:

Equipment view
Backpack view: Here more work is open (e.g. item stacking, grouping, …)

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…

Character generation screen for an aspiring dwarven hero

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

Realms of Ancardia (Weekly Update 4)

Some weeks are great, some less so. Week 4 was a bit sluggish and annoying due to a large number of bugs suddenly plaguing development. But most were slain. Hooray!

Bugs, bugs, bugs

No idea where they came from but I lost a lot of time (well, at least for some of them) getting them under control:

  • In week 3 one of my optimizations introduced a memory leak that took me 3/4s of a day to fix.
  • My underlying TBRLAPI originally was designed for games based on the Curses API (well, my re-implementation of it). Realms of Ancardia is more and more moving away from the initial Curses-based approach towards a purely graphical implementation. This caused some friction with rendering and update issues. The underlying architecture of TBRLAPI still puts the Curses-approach too much into the forefront and the less it is needed the more I feel I have to introduce workarounds to get my Curses approach out of the way. I do not yet have a good idea on how to fix the architecture but something needs to happen since a number of update and rendering bugs this week were caused by the unholy combination of the formerly dominant Curses approach and the now evolving pure tile based and graphical approach. Birth pains of an API…
  • A Rider update wrecked my gut behavior. And while I love version control (and am fine with git generally) I really think that the git command line interface is one of the worst designs ever. Arcane, full of weird special cases (at least it feels to me like that), etc. It probably all makes sense if you manage a project with the size of the Linux kernel but I still feel that the git interface is just lousy for the majority of software development projects it is being used in. The wrong system won the VCS war in my book. Or at least someone should have taken the time to make git a lot more understandable for 95% of the cases. I lost half a day getting git to forget about files it suddenly started tracking and I still don’t know why this happened. What a lousy way to spend time…
  • There were some rendering issues where “dirt” is cached somewhere.

Character generation started

It finally feels like the game needs some flesh. So we need to start generating an actual character. I have started working on a primitive character generation screen which will be beautified once the various components of character generation are stable enough. For now it is ugly as hell. But it’s there.

On the main screen you can select the general generation mode (totally random or based on the name of the world and the character are the only two options righr now but a lot more will follow), generate a random world name (later you will be able to enter it yourself but we do not yet have code for text input), a character name (same challenge, but if you have selected a race and a gender then the internal race- and gender-specific name generators are utilized), select race and gender and prioritize talent categories.

The latter is the first major deviation from ADOM: Where in ADOM you have a ton of classes in Realms of Ancardia you can give different priorities to ten areas of expertise (see below for more details).

Each category has up to five levels of expertise (plus “untrained”). If you have at least some expertise you gain attribute bonusses during character generation, skill costs change (for the better the more excpertise you have) and you eventually will get other benefits (like free feats or special abilities).

We also are going to add back the professions from ADOM although they will have somewhat different rules and basically just are prioritized talent category sets. So in the end they will be useful to speed up character generation but you also have the option to kind of “cook” your own profession.

Here are some screenshots from the current state (most beautification still is missing… we just want to get ground by adding content on our race to an alpha release in… months… years… who knows 😉 ):

The main character generation screen so far (work in progress)
The ancestry selection screen
The gender selection screen
The talent priority selection screen

There is still a lot of work to be done but this IMHO is starting to look decent in a certain old school way I really enjoy.

Talent category system

I have implemented the talent category system. The following ten talent categories exist (taken from the source code):

        Wilderness,
        Roguery,
        Combat,
        Religion,
        Arcane,
        Knowledge,
        Skills,
        Strategy,
        Trade,
        Leadership

The general scope is much wider than in ADOM because eventually Realms of Ancardia will allow for a lot of activities besides dungeon crawling and monster killing – like building trade empires, raising armies and more.

Skill system

An initial draft for the skill system has been implemented (but the individual skill functionalities are going to be added over time). Here is the skill list from the source code together with the attributed talent categories (see above):

        // Talent category: Wilderness
        Survival,
        AnimalHandling,
        Woodcraft,
        Riding,
        Pathfinding,
        
        // Talent category: Roguery
        Stealth,
        PickLocks,
        DisarmTraps,
        SleightOfHand,
        Deception,
        
        // Talent category: Combat
        BladedWeapons,
        BluntWeapons,
        Polearms,
        TwohandedWeapons,
        ThrownWeapons,
        Bows,
        Crossbows,
        Slings,
        Shields,
        LightArmor,
        MediumArmor,
        HeavyArmor,
        
        // Talent category: Religion
        Theology,
        Piety,
        Channeling,
        Exorcism,
        Meditation,
        
        // Talent category: Arcane
        Spellcasting,
        Alchemy,
        Enchanting,
        ArcaneLore,
        RitualMagic,
        
        // Talent category: Knowledge
        Assessment,
        Healing,
        Herbalism,
        Appraisal,
        Navigation,
        
        // Talent category: Leadership
        Diplomacy,
        Inspiration,
        Administration,
        Intimidation,
        Etiquette,
        
        // Talent category: Strategy
        Tactics,
        BattlePlanning,
        Logistics,
        Siegecraft,
        GrandStrategy,
        
        // Talent category: Trade
        Barter,
        Commerce,
        Crafting,
        Finance,
        BusinessAdministration,
        
        // Talent category: Skills
        // Provides access to all skills.

Skills are ranked and run from 0+ to 40 and more. Usually they will be in the 0-20 range for normal adventures and might rise above 20 for experienced or highly specialized characters. The following abstract ranks are used (again taken from the source):

        Unskilled (0),
        Apprentice (1-4),
        Journeyman (5-9),
        Adept (10-14),
        Veteran (15-19),
        Expert (20-24),
        Master (25-29),
        Grandmaster (30-34),
        Legendary (35-39),
        Mythic (40+)       

Miscellaneous minor changes and fixes

  • I revised the name generators to create a lot more ADOM-like names. I’m a lot happier with the results and now tens of thousands of beings can have unique names.
  • I added special algorithms for shopkeeper names, ratling trader names and dragon names.
  • I added dragon personalities tried to unique dragon titles for special dragons.
  • Added faith points as a new attribute. While ADOM used power points for priests and wizards, Realms of Ancardia will differentiate between power points (used for arcane magic) and faith points (used for miracles).
  • Renamed talents to feats.
  • We debugged an annoying memory leak.
  • Krys enhanced many tiles making them subtly more beautiful and also added more monster tiles.
  • Some bugs were fixed related to combat and actions.

Total size of the codebase after this week

  • 28,022 LOC in 440 files for the actual Realms of Ancardia game
  • 21,635 LOC in 369 files in my own underlying TBRLAPI framework library supporting my most recent roguelike games
  • plus extra external configuration files, images, tilemaps, audio files, etc.

© 2025 My Roguelike Games

Theme by Anders NorenUp ↑