Life has been keeping me busy which has slowed some of my efforts, but I still try to devote as much of my spare time as I can to this project. My primary focus has been and continues to be on implementing the incredibly rich Ultima V combat system.
The process started out with a number of simple implementations including basic map loading, player character loading and enemy loading. It then got deeper and only made my respect for the original developers all the more grand as I realized how much had been packed into a few double density disks!
What was Implemented so far?
There are certain elements of this classic turn based combat model that have been implemented and I think MUST be present in the reworked system. I have implemented the following classic features so far:
- Loading player characters, enemy and appropriate map based on overworld enemies
- Keyboard based player character movement, enemy selection and player attacks
- Selection of active player character if you wish to focus on a single player
- Initiative based combat ensuring the most agile go first, and sometimes multiple times in a single round
- Ability to attack enemies in overworld/underworld
- Quick escape (ESC) when all enemies are dead
- Highlighting active player or active enemy
Quality of Life Improvements
It is important that the game translates well to a more modern audience as well, so I have opted to add some improved quality of life settings as well that will still maintain the charm while speeding up the grind of some battles.
Highlighting of enemies that are in range
It is now immediately noted which enemies are in range once you enter your attack mode, making it easier to pick your next victim!
The Initiative Bar
Who’s next? Should I cast my healing spell yet, or should I go in for the kill? The initiative bar is meant to help give the player a glimpse in to the 5 subsequent attackers to help with those strategies. There is likely going to be an option to disable this for the purists out there!
Cycle Enemy/Quick Attack
Although it can be a topic that breeds many different opinions – it is my personal belief that the existing combat can take too long when you are grinding out your high levels. Think about it – you are level 7 party, all equipped with Magic Axes and are now facing yet another horde of slimes! Two new features have been added to speed up combat to make these encounters more bearable:
- <TAB> key will cycle through all available enemies one at a time. This will work in all targeting modes including when casting spells (once it’s implemented!)
- The ` (~, left of the 1 key) will automatically attack the previous enemy attacked by the player, or if none have been selected then it will automatically attack the closest enemy.
The combination of these two features can significantly speed up play without spoiling it for those who like to play the ole’ fashion way.
The Battle Report
Another quality of life improvement is the inclusion of a Battle Report. This will help you better understand the contribution of your team members in battle, as well as giving you a glimpse into how their experience was affected. This will show at the end of every battle regardless if you escaped.
Debug Menus for Quick Combat Testing
As in past work – a special debug menu was created to speed up testing.
The following Debug menu provides quick teleportation, time changes and previsions hacking on the fly.
The debug menu allows quick access to all combat maps and all player combinations.
Line Of Sight
I attempted, and believe I succeeded in duplicating the original flood fill technique when producing line of sight and hiding tiles the Avatar shouldn’t be able to see!
As you may have noticed from the November release, the classic style blue borders now encapsulate all the UI elements, helping give them an old school feel and helping give each section it’s own purpose.
Although not all changes are as exciting as the combat (which is still in the works!), there have been some minor features implemented or completed since November as well:
- Ships can travel fast with sails and get damaged when they hit land
- eXit a frigate? How about a Skiff!
- Take damage on a skiff in deep water, and prevent a frigate from entering shallow water
- Able to use a magic carpet that is in your inventory
- Added +/- to speed or slower keyboard input
- Zoom in and out with mousewheel
- Created all enemy voxel models with basic animations
- Attacking people in stocks or bed will murder them!
- Ctrl+K for Karma
- Introduced outlining effect when characters are obstructed behind walls in combat
- Carpets and horses now go in all four directions, unlike the original game which was only left to right
Some exciting for me techy changes:
- Converted to the new Unity Input System, resulting in smoother and smarter input timing
- Decoupled importing of classic save state from new save states
- Considerable refactoring, removing all Find and GetComponent calls in place of strongly bound variables
- Initiative calculations do not appear to be quiet correct yet
- Dungeon maps seem to adhere to different rules when encountering baddies, they are not immediately clear
The fact of the matter is, the combat maps and basic mechanics took quite a while. Moving from top down to an isometric view does and continues to have quite a few visibility challenges. The next update hopes to complete the combat aspect which will include:
- Monster AI including movement, attack and special abilities (such as ghosts disappearing)
- Monsters should spawn and seek you out in the overworlds
- Player characters should be able to cast combat spells (IOW, I need to implement spells!)
- Spell and attack animations
- Hidden wall triggers
- People should be scared of a murderer, and guards will want to arrest them!
- When you die, you need to be resurrected and brought back home
I hope to get through the whole combat by the next update which should be around 3-4 months from now.