About Time! April 2020 Update
So What’s New?
I have already posted about
NPC AI/Pathfinding, debug console and the
Pre-Alpha Build, so I will stick to the newer items.
- Full day/night cycles
- Full moon cycles with onscreen widget
- Moongates and Moonstones
- Moongate travel by moon cycle
- Cool “up/down” animation of moongate
- Cool fade in/fade out when teleporting
- Ambient glow of Moongates
- Search and ‘G’et the moonstone
- Bury the moonstone
- ‘P’ush mechanic
- Did you know chairs change direction when you push them? Now I do!
- Complete Z-Stat descriptions
- Highlighting of Reagents and Spell names for easier and quicker reference
- Thank you to Ultima Codex who is attributed to many entries that were not in the original Book Of Lore
- Look out for some great entries from the Book or Brad
- Small enhancements include:
- Fall down grates (even multiple grates like in Blackthorne’s castle)
- Begun using light emitting materials in Unity to make things glow
- Magic doors
- Lava
- Crystal balls
Some Details and Challenges
This was an interesting update because it seemed every time I wanted to implement some small component of the feature list then I would end up having to create some new system I had never considered.
Picking up a moonstone
So you want to ‘G’et a moonstone? Well first you ‘S’earch for it of course. But when you search in game for things that aren’t moonstones you could have stacks. The stacks do not translate well into the 3D game since they stack. So I had to create a queuing system that essentially puts them in a first in first out (FIFO) structure where the next item would appear as you ‘G’et the “exposed” item.
Next, typical inventory items are stored in a consistent way in the saved.gam file which makes it super easy to keep track – except moonstones are different. Moonstones are either “buried” or “not buried” and if they are not buried then I must assume they are in the Avatar’s inventory. This does not quite fit with the original games logic, and I still have to solve for it (but as I write this, I think I figured it out )
Moonphases
Frankly, I have gotten away with being fairly ignorant of exactly how the moonphases work, progress and why the hell there are two moons! Needless to say, there is some very dirty (yet functional!) code that abstracts those complexities. I even wrote (borrowed) some calculus to move the moons and Sun in a circle. May God have mercy on my soul if I need to update this code again!
3D Tiles in a 2D World
This is not a new problem to me – the original game only showed a single tile at a time, so if an item such as a moonstone was exposed, then it simply hid the tile underneath. Also, things like signs did not technically have a tile underneath.
I had implemented a guessing algorithm in the past to try and take a best guess at the tile underneath but it was often wrong (no-one’s perfect), so to combat that I implemented an unfortunate, but requisite
tile override system that allows me override any tile on any map. Note: This could be used in the future for customization or to makes quality of life tweaks to the game (I’m look at you @Cambragol!).
The Core Library versus the Unity Game Code
As many are aware, this is technically two projects – the core game code called Ultima5Redux (soon to be UltimaVRedux) and Ultima5Redux3D. Because I am using a paid/proprietary module in Ultima5Redux3D, I am unable to share it publicly on GitHub. To make sure the community get’s as much value as possible, I have continued to move game logic to the core library – if done correctly, the Ultima5Redux3D will only be reacting core game libraries logic decisions, allowing anyone in the future to build ontop of the core library if they opted to (MIT license).
Thanks
Just wanted to say thank you to all those who actively participate in the project such as the great feedback and ideas from @Cambragol, the publicity from Dino and WTF Dragon and all the other dragons who give me encouragement on Twitter and Reddit. It is always appreciated!
Also thank you to the Ultima Codex wiki contributors! When filling out the Z-Stats descriptions I used the wiki exclusively for quick descriptions from the Book of Lore, and when they weren’t available then I quoted (and attributed) portions of an article directly.