Ultima 5 Redux – June 2020 Update

Brad Hannah has made a couple of significant updates to his voxel-based remake of Ultima 5 in recent months:

This update has been about 3 months in the works. You would think with Covid and self isolation that I would find myself with more free time, but it so often seems like I have less. Either way, there were two major features that I chipped away at over these three months and have made a big impact to the game.

Engine Update

Although I have written to graphical components in Unity and Unity is in fact a game engine, I had a tough problem to solve – the world is round. Unity is built primarily for a world that does not repeat. In Unity, when you hit the end of the defined worldspace then it just ends.

My first implementation of the worldspace involved keeping the Avatar at 0,0 in the world, while literally moving the visible portions of the world directly underneath the Avatar. This solved an important problem, but introduced a huge expense to the CPU and created unnecessary lag between input and screen response to that input. In short – it was lazy, and I paid for it in performance.

The new version of the engine is built on a different principle. The Avatar actually moves through the 3D space, while the world stays put. There are some optimizations such as trying to only draw the visible space so I don’ have to load the entire world in memory as I walk around a smaller portion of it. This resulted in some pretty crazy math-fu, but in the end it pretty much doubled the framerate and took a huge burden off the CPU. The input lag is gone and I am finally happy with the play experience.

Shoppe Keepers and the Blacksmith

There were two main improvements I wanted to make to the blacksmith:

  1. Provide more equipment stats to help make buying decisions easier
  2. Incorporate the original (often funny) dialogue into a point and click interface

When I set out to implement the many shoppe keeper varieties, I thought it was going to be a snap. Track down the conversation data in the “talk” files, make some buttons and we would be done before you know it. Unfortunately the reality of the shoppe keeper data and code immediately reared its head.

In short – the shoppe keeper conversation data is spread across multiple files, if it’s findable at all. Next thing I know a whole new shoppe keeper dialogue system needs to be created, pulling all that disparate data from it’s many locations.

As you might expect, Brad’s immediate plans for the future are to continue implementing different shoppe keeper types; he also intends to get line of sight implemented in the engine at some point soon.

1 Response

  1. Cambragol says:

    Steady progress, with lots of interesting modernization of the original.