Milestone: Specific Behaviours and Graphics Overhaul – February 2023
In true “me” fashion – I have waited a half year to update officially on my progress!
The point and purpose of this update was to begin to really nail down some of the more specific behaviours in the game. The original Ultima V game engine had about 80% of the game run from generic run code, while the other 20% was extremely specific based on often very specific circumstances. These require custom AIs (not ChatGPT level stuff lol) and often custom code stuck in odd places.
Two new graphics perspectives were added – a new 3D perspective that is not isometric and a top down enhanced classic style. An optional change in perspective was EASILY my most requested feature. I sincerely hope this encourages more fans to consider the game in the future.
A small but very important update to combat map triggers was added. This ensured all combat maps were testable and able to be completed
Lastly there was an initial kick at dungeons. Loading them and navigating them in a crude fashion. There is much more to go – but this first step was long overdue!
New Graphic Modes
Enhanced Classic Mode
This mode is meant to satisfy the classic gamers who love the 2D style top down perspective. Under the hood it still uses the 3D voxels, allowing for shadows and advanced lighting while ensuring nothing is inadvertently blocked for view as can be the case in the existing Isometric mode.
Here is an example of what it looks like from a different camera angle.
New 3D Mode
I struggle to name it – it is simple a 3D mode, but not isometric. I often got complaints about the isometric mode feeling “odd” to control due to it’s angles.
This mode highlights the 3D models while ensuring there the camera is not blocked. I saw it as a happy medium.
Graphic Mode Errata
In order to introduce more modes, it took a major overhaul of the underlying engine. It was only ever built for one perspective. Each mode has distinct lighting and camera properties to ensure they all look wonderful! This means in the future it is easy to tweak existing modes, or add additional modes.
There was also a lot of effort put into improving the look and increasing the potential resolution of many sprites/voxels. They were 16x16x16 and many are now 32x32x32. This isn’t great for all voxels, but it does provide a new depth that was lacking from game characters.
Specific Behaviours
Specific Behaviours is a name I gave to any feature that strays from the “standard engine mechanics”. For example – if I want to talk to someone, the default behaviour is to lookup their dialogue script and follow it carefully. But there are a handful of NPCs that do not have dialogues built like that. Instead the original game code would have called a custom subroutine that followed specific and non standard logic. The Blackthorne guards are a great example of this.
Specific Behaviours are also anything that barely noticeable, but reflects a rule of the game world that you would maybe not consider at all. For another example – a minstrel is coded to look exactly like a bard. But if you sit them on a chair then they change to the minstrel sprite and begin to play music that the player can hear. These NPCs behave uniquely.
I wonder what you will wish for at the well?
See below for a more complete list.
Combat Map Triggers
If you have played Ultima V then you likely know some combat maps have special tiles that you must interact with in order to proceed. Without this completed I was unable to fully test a large number of dungeon combat maps. In this release they are fully implemented – although not fully tested. All preliminary tests work as expected though!
Dungeon’s are on the Menu!
I have become an amazing procrastinator for things I know to the be under-documented and complicated. This is what dungeons were for me. I had spent some time on and off in the past years learning about their mechanics but avoided making too much progress.
I did however finally dig in. I hacked an amazing number of save game files to be able to test and verify that I understood the data format. I am not sure it’s perfect, but I was able to introduce a new map type for it that adopts the current graphical view.
It uses “close enough” sprites to represent the tile types. For example a Trap is a swamp tile, a magic locked door is a hidden door and so on.
Errata
The full list can be found here:
https://github.com/users/bradhannah/projects/6/views/21
But basically I took a huge amount of time to rework years of code that was not fully fleshed. I simplified the code base dramatically which means that I will be able to move even faster in the future.
Also – a new chat dialog that shows you what the Avatar has asked and places it towards the bottom so it doesn’t block whole screen.
I also created a cool new Debug window. Although the original game was more simplistic in it’s approach to the game engine – it’s simply not how a modern engine like Unity works. Take it or leave it – it’s the price you pay to use a modern engine like Unity.
I created a debug window that can be toggled on and off to help me spot where failures or issues occur. It has already saved my bacon more than a handful of times! Also… it’s very pretty.
What’s Next?
I haven’t exactly decided – but it will likely be continuing on specific behaviours such as bridge trolls, getting drunk, falling down waterfalls etc.
It will also be fleshing out the dungeons much more. I have not decided how I will represent them in game. The original 3D first person is a hard nut to crack – but it is likely where I will start. I will also be integrating the dungeon combat into the dungeons – presently they are separate.’
Mostly complete list of specific behaviours
- Able to search for secret in searchable spots!? (such as… keys in a particular place)
- Search for glass swords!
- Smith the Horse only shows up after your first time at Iolo’s
- Killing rats not a crime
- Gremlins steal food (jerks!)
- Tie a horse to a hitching post and it won’t leave the post
- Walking through fireplaces hurts you, but you can if want
- Guard on top of LBs castle is mean and will arrest you if you tick him off
- Bards play lute when on seat
- Horses and Carpets move faster than walking
- People are scared of a murderer! They run away, while the guards will arrest you.
- Lighthouse light rotates
- Can Klimb in some combat maps
- Custom dialogue feature allows for conversations that are not in default dialogue
- Blackthorne guards are jerks – they expect you to wear the badge
- Pushing stuff in combat can trigger tiles to change
- Exit a combat map in single direction, if you try to leave in different directions it will prevent you
- Search for hidden doors
- Running into Cactus hurts
- Get food from a table (but lose Karma)
- Trade while in conversation with people
- HMS Cape makes you vroom-vroom
- You can free people in manacles, but they are antisocial afterwards
- Freeing people pisses guards off
- Daemon guards react as expected – they are both guards and not guards at the same time
- You can wish for horses, but I won’t tell you how!