Milestone: Combat and Polish Complete

Well it’s been a hot minute since I have updated the blog and released an update video. Saying life has been busy would be an understatement but I have spent considerable time in pockets focusing on this particular milestone.

This was an update of bug fixes, polishing and (re)creation of a number of internal systems that weren’t optimal. For those in the gamedev space, there is a rule – make a bunch of small games to completion – don’t chose an RPG as your first project. I naturally ignored that advice and here we are over three years later 😉

When we last left off I had got some very early crude builds out for testing. They performed quite poorly and required major rework – but non the less it was something! I was blown away by the feedback of a few devoted fans who provided amazing insights and even helped develop a backlog of work items to better match the original. They also disproportionately ran Linux!?

August 2022 Update video for Ultima V Redux

Highlights

Music and Sound Effects

How do I show you music? Watch the video of course!

A situational music system and ambient noise system was put in. Using the famous Ultima V Midi pack, I converted it to MP3 and imported it. As location and circumstances change it is capable of fading music in and out.

The ambient noise generation is particularly cool! I want to add some ambience beyond the music so I implemented a few test cases. As you get closer or further from certain triggers the noises may be noisier or quieter.

  • As you approach a lighthouse, you will hear seagulls
  • When you are in the wild, you hear the call of the outdoors
  • Approaching a stream? Hear the gurgle of a stream
  • Out for a ride on the mighty ocean, surely you will hear the wind!

Other and more traditional sound effects were introduced as well such as footsteps, opening doors etc.

Combat

Combat was cleaned up dramatically. There were endless bugs in the dungeon generation and enemies didn’t generate in the overworld. Animations are largely cleaned up.

Overworld battles largely behave as expected now, with loot being dropped on occasion.

Chests, bloody pulp, item stacks and visible karma.
Updated sexier moongate, overworld projectiles and spawning monsters!

Overworld baddies can shoot at you with their fire or even a passing pirate ship with their cannon – but don’t worry you can shoot back with your own ships cannon!

Cool spell/potion/scroll effects – I think the Avatar may be in a bit of trouble this time around!

Spells (although largely un-implemented) can now be cast in combat or in the overworld.

User Interface Improvements

I almost feel bad putting these here because my Twitter followers have seen them as they have been built – but for the uninitiated I have been focused earlier in the milestone on overhauling the UI. I love the old UI – it was quick and easy – IF you had the manual close by to help you understand reagents required for spells for example.

There has been a focus on common component look and feel to ensure the player is immediately familiar as they traverse the dialogs.

Party Inventory includes filters, detailed
Spell Casting allows you to select the plater, indicates if you CAN cast it or if your level is too low, or don’t have any mixed.
Mixing reagents is more straightforward level indicators, highlighted reagents and after you mix your first spell correctly, the UI will remember – saving you time!
Quick and easy to mix you favourite spells!
Readying your party for battle has much of the guess work removed helping you understand attack and defence statss.

Saving and Loading

Love or hate the UI changes – something I imagine nearly all of us can agree on is that a single save file is the pits! I have added an unlimited (!?) save potential with details. It also finished the introduction of a separate save format. This allows me to extend it with additional data and saves me the hassle of understanding every single byte of the original. For the hackers out there – it’s JSON formatted, so easy to “tweak” 😉

Multiple save slots with lots of save details and party status!

The More Detailed List

The following highlights are included in this release (here for greater detail).

Sound

  • Added music system and 5 songs (midi->mp3) based on location
  • Added ambient sound effects system – for example, as you approach a lighthouse the seagulls get increasingly louder
  • Added standard sound effects such as walking on crunchy grass or click-clack on brick
  • The MIDI files are converted to MP3 and downloaded from http://exodus.voyd.net/downloads/

Improvements

  • Use/Inventory dialogs
  • Enemies can now drop chests (which you can search and open) and blood spatters as well. Included a new feature called “Item Stacks” which allows us to stack loot (or anything!) on top of each other.
  • Special items such as Crown, Sceptre, Amulet and Sandalwood box are now gettable in overworld, and disappear when you already have them in your inventory.
  • Monsters in the overworld now wander and chase you. If they catch you, they will initiate combat.
  • Projectile throwing overworld monsters such as sea serpents or pirate ships will fire at you if you get too close.
  • You can ‘f’ire the frigates cannons and kill overworld enemies.
  • Major effort in normalizing all buttons, sliders etc to use the common look and feel (using prefabs). Also added standard ‘X’ in top right of every dialog.
  • Small maps now have proper “outer edges” and even change depending on the map. For example Sin Vrall’s hut has desert tiles on the outside edges instead of grass.
  • Fixed major bugs that made the dungeon combat rooms… just plain wrong. There were some ‘off by one’ errors creating havic.
  • Multiple graphic and texture tweaks for a more common experience – such as lowering res on time of day semi-circles and new reagent graphics.
  • Cleaned up start up UI to make it easier to “get started” from scratch when booting the game. Options that “shouldn’t be clicked” are no longer clickable.
  • You can now extinguish a torch by clicking the torch icon in the bottom right.
  • Visible Karma tracking in bottom right (will eventually be optional).
  • New “escape” menu when hitting escape in the main game out of combat. This will allow you to save, load, quit and configure (kind of).
  • Unlimited save/load slots with easy access to save data on disk.
  • All potions are (should!?) be drinkable and have real effects.

New Systems

  • Created new “Tile” system that has each tile responsible for figuring out what it should be displaying and when – GREATLY simplified keeping track of what should be drawn and when
  • “Turn Result” queuing – this enables me to send an ordered list of events for processing. This allows for the classic feel of “one thing at a time” to be maintained. For example – it’s important that a projectile actually be seen hitting an enemy before the enemy dies!
  • Brand new animation system for tiles. Each tile now has an independent and semi random animation cycle. This creates a “liveness” feeling, but also erases a requirement on an obscure version of Voxel editing software I required to edit before.
  • Created a common UI framework to ensure all dialog boxes use same base code, ensuring continuity between them, but also saving me a ton of time developing and debugging.
  • Spell casting, potion drinking, scroll reading system during combat implemented. Only a few spells are implemented, but having the system in place will make the spell implementation much less difficult.
  • Numerous tweaks to make debugging faster including streamlines menus and saving previous values.
  • Converted from HDRP to URP rendering engines. There were massive performance issues related to using a very heavy engine (HDRP). Switching to Universal Render Pipeline resulted in huge improvements across to the board.

What’s Next

The game is clearly quite a ways from completion still. Much of my time has been spent creating, and re-creating or re-factoring internal systems. It has been important to do so because the issues and bugs that come from the old systems waste too much time, but now with the lessons learned and most of the systems in tip top condition I will be focusing on the following:

  • Implementation of endless “Specific Behaviours” (https://github.com/users/bradhannah/projects/6/views/17). There are events or mechanics that require special code for special circumstances. Big thanks to @tanabi for the amazing detail on the behaviours they recalled! Some examples:
    • Bard in Buccaneer’s Den plays a lute in the bar
    • When crossing a bridge, there is a chance that a troll will try to extort you!
    • If you do crappy stuff (steal, murder) in town, then the guards will try to arrest you
  • Complete implementation of combat “triggers” such as stepping on a tile or hitting a tile to open up secret entrances/exits.
  • Implement remaining music based on location

Published by Brad Hannah

Cloud Engineer by day, pretend game developer by night!

One thought on “Milestone: Combat and Polish Complete

Leave a comment

Design a site like this with WordPress.com
Get started