Roguelike Games created by Thomas Biskup, the Creator of ADOM

Tag: character generation

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

Lots of graphical details have been added in week 5. And work on character generation continues. It starts to feel like something almost complete. Overall the graphical fidelity has gone up another notch (while retaining the old school charm we are aiming for) and this will drive more changes in the weeks to come.

Also lots of infrastructure work happened in the background for the underlying game sytem as you can see at the end of this post by more than 160 new classes in the game alone (and “only” about 6,200 new lines of code… infrastructure often is not very complex per component but usually needs a lot of components to be extendable and efficient enough).

Animated main title image

Krys outdid himself animating our so far static main title image. We now have a beautifully animated title image:

Graphical frames

Dialogs, windows and tooltips now can have graphical frames in order to make them visually stand out more cleanly and be more attractive.

Here are is one example, more below with the other new features:

Visual upgrade for character generation

Everything was overhauled:

  • Typography
  • Spacing
  • Framing
  • Unified color scheme

All in all character generation (considering its basic state) now is looking a lot more pleasing and still fully aligned with our planned old school charme. Here are updated screenshots – compare them to last week if you like to see the progress:

The central character generation screen – from here you control everything
Definining talent category priorities – this basically shapes your former professional life
Selecting a race

The gender selection step already was shown in the previous section and skill selection still needs to be implemented (although most of skill infrastructure already is there).

Death screen added

Death always has been a big part of ADOM and it also will be a big part of Realms of Ancardia – even though the default game will have a wonderful twist by introducing permalife instead of permadeath. More on this at some later point in time… here’s the default death screen for your final death…

Item architecture created

It’s time to get items into the game in order to finish character generation. This usually requires a lot of infrastructure for a game with the complexity of Realms of Ancardia. So this week I did a lot of tedious groundwork by implementing these concepts:

  • items data structures
  • item templates
  • item template generators
  • item containers
  • item types
  • base items
  • template based items
  • item modifiers
  • item traits (that cause modifies to become real)
  • infrastructure for implementing random items based on some base template
  • infrastructure to randomly generate items based on type and desired power level

Not much fun but they enable one of the major fun parts – creating cool items 🙂

Also statistics now adjust due to equipping or unequipping items, etc.

Rules and architecture for initial equipment

Realms of Ancardia uses a system based on race and initial talent category levels in order to define the starting equipment of the player character. Both the architecture for this approach plus all rules to generate starting equipment based on on 12 races, 10 talent categories and 6 talent category levels for a total of

12 x 106 = 12,000,000 starting combinations for equipment

have been implemented. And since some of the starting equipment is randomized there is an almost infinite number of setups.

More details will be added to this system later when we implement star signs, background stories, feats, etc.

Started adding item templates

Adding items will be a forever job considering that ADOM had hundreds of them. To get character generation started we added 92 base item templates in 18 type categories. More to come – even character generation is not yet fully complete (we need a lot more scrolls, rings, wands and potions).

Inventory / information screen prototyped

I started with a prototype for an information screen about all data that makes up the player character (bound to the classical “i” for inventory – but it’s a lot more than that – so “information” seems to be the better future mnemonic for this).

Here is the unstyled prototype mostly used right now to confirm that data goes where it should while building a character (Krys already has prepared nice tab images but I was too slow to implement them before the weekly update had to go out):

Just some of the basics for now on the stats screen…
A basic inventory – all the item details still are missing…
And the backpack… again all details are missing and we probably will add category filters and… and…

The skill tab has not yet been built and the tabs themselves need to be upgraded visually.

Basics of a tavern generation system implemented

Taverns play a big role in any classical fantasy setting, even more so in Realms of Ancardia with its large number of highly variable settlements. Creative struck me like lighting and I designed a tavern generation system which provides the following features:

  • race-specific tavern names (e.g. dwarven taverns should be very differently named from dark elven or orc taverns)
  • randomized potential tavern activities (from standard stuff like dining and drinking to much more elaborate stuff like pitfighting or quest access)
  • room types and prices depending on the specific settlement data (and some randomness)
  • randomized rumors you might be able to hear while staying in the tavern
  • randomized special events (like a bar fight or the chance of your pockets being picked)
  • randomized special traits for taverns (like being haunted, a smuggler’s den or fey touched)

All this should help to make taverns truly unique places that are exciting and useful (and also sometimes dangerous) to visit. Besides all the avdenturing opportunities you can rest and recover in taverns and learn more about the settlement and the world.

Calendar component added to screen

The Ancardian calendar always played a prominent role in ADOM with it’s star signs and stuff. So it will in Realms of Ancardia, maybe even more so, now that we have complete civilizations, compex government forms and a whole world to be affected by the stars…

For now the map now is graced with a beautiful calendar widget that shows the time of the day (and in coming weeks will be enhanced with a star sign display). Here is a sample screenshot:

Day and night are important… especially in settlements

Note that this calendar version is just a first draft. We are right now working on an improved design where the surface world map will show a calendar focussing on the star signs (due to the extended movement time frame on the surface world) while the settlement maps will show the day and night cycle (because that really makes a difference in the settlements).

Miscellaneous minor changes and additions

  • Krys added a cool font to be used for headlines.
  • Kry generally spent time improving our fonts and typography.
  • Krys started to work on star signs.
  • Added a tab component to our UI framework.
  • Added a video component to our UI framework. And will have more of them in the future (think of small animated sequences like e.g. tavern images, etc. – a little like in my beloved Bard’s Tale I-III and Wasteland). Just a tiny bit of movement and animation – but enough to be fun.
  • Windows now have shadows.

Total size of the codebase after this week

  • 34,385 LOC in 603 files for the actual Realms of Ancardia game
  • 22,761 LOC in 383 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.

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 ↑