Week 3 was a bit slow because I was away with family & friends on a five day vacation trip to the wonderful isle of Borkum. I’m still happy with the progress I managed. All in all Realms of Ancardia is shaping up nicely, considering that we probably need at least 12-18 more months for an early alpha release. Let’s look at what was accomplished.

My personal goal for week 3 was to work on the graphics framework of the game and introduce lots of new UI elements plus a dynamic layout composition system for UI elements. But before I could tackle that I had to clean up issues left unsolved during week 2:

Refactoring of movement system finished

I failed to finish the (un)planned refactoring of the movement system during week 2 and thus had to continue working on this. Major subsystems now have been fixed or integrated:

  • There are now time-based actor lists that control who acts when. And what happens on the sidelines.
  • There is now a standard way for switching maps back and forth including PC positioning.
  • The internal main loop has been greatly simplified.
  • The way to calculate time spent has been standardized.
  • The movement system has been fully standardized.
  • About 50+ bugs related to his system created in week 2 have been fixed.

UI component set implemented

Currently we still use an underlying Curses implementation of my own for the text on the screen. Eventually I want to be able to use a smart configurable component library to place elements as needed. This week I implemented the framework for a library that allows various layout managers, nested elements and scaling. Neato!

At this point I really feel happy with the decision to use MonoGame as the foundation for my framework. It is stable, clean and has few areas of weirdness (keyboard handling being one – but we’ll see about that later). And so far it seems to be extremely efficient for rendering which makes me very happy,

Also the APIs are elegant to use. All around bliss and for me a much better experience than with Unity or GameMaker (although GameMaker had a certain charm – but in the end it was a convoluted puzzle box with strange bugs… so I will continue to please my NIH syndrome and move forward building my own game engine 😉 ).

Option selection UI added

Already now the player is faced with options (although peculiar due to testing purposes – like “which group of commoners in a settlement should I attack?”). So far we had no UI for this. During this week I added a nice component framework setup (see above) and a dialog for option selection was the first use case.

I am quite happy with the results (although we still need to work on visual decorations). This is the code sample:

_optionDisplay = G.C.Element(G.C
  .Framed(G.C
    .HorizontalLayout()
      .VerticalLayout()
        .FormattedTextArea(textColor: TBColor.White, 
                           text: text,
                           maximumWidthInCharacters: 30)                                                                  
        .OptionList(textColor: TBColor.White, 
                    model: _optionSelectionModel)
      .End()
      .Image(_image, fraggedBorder: true)
   )
);

The code above creates this kind of dialog on the screen:

Obviously this needs a lot of graphical sugar and we already have ideas we want to explore. The following is a very early sample design and once Krys and I finalize the actual UI design I’ll integrate the design into the code:

(please ignore the typos – rapid prototyping here 😉 )

Tooltips

I have implemented the basic framework for tooltips. Tooltips will get lots of more detail and visual enhancements over the next weeks and months but now there is a rock solid foundation that allows arbitrarily complex and detailed tooltips. This will help us make the game a lot more accessible than ADOM ever was.

Here is a sample screenshot of a (yet unstyled demo) tooltip:

Tooltip on the surface world map
Tooltip for a settlement map tile
Tooltip during an encounter

Website content

I finally started adding content about Realms of Ancardia to this website. And Krys designed this amazing logo for the website:

Realms of Ancardia: Eternal Strife

Miscellaneous minor changes and fixes

  • Lots of tiles have been refined with more loving details by Krys.
  • Enemies in encounters now are placed with more variance and more available positions.
  • Player coordinates now are shown on the world map to allow easier information exchange between players.
  • Lots of feature and tile descriptions have been added.
  • Encounters with settlement inhabitants now have better descriptions.

Total size of the codebase after this week

  • 24,906 LOC in 402 files for the actual Realms of Ancardia game
  • 20,959 LOC in 361 files in my own underlying TBRLAPI framework library supporting my most recent roguelike games
  • plus extra external configuration files, images, tilemaps, audio files, etc.