With the completion of the “R”eady and “N”ew Order functions, I have opted to mix it up and move on to something quite different. I am actively working towards getting an intro screen up and running. The primary goals will be:
Show wicked blue/greeny Ultima logo
Show Warriors of Destiny animated fire logo
Provide load function – selecting from dynamic pick list of save directories
Other functions will follow eventually, but the biggest pain in the ass I currently suffer if manually changing my save game directory in code every time I want to test a new scenario (ie. new equipment load outs, different party members).
Progress thus far
I had in the past experimented and loosely integrated the Ultima 6 Decoder (http://nodling.nullneuron.net/ultima/code/ultima6/u6decode.zip). This uses an LZW algorithm to explode the *.16 files. The trick is then taking these exploded files and exporting them one more time – to a more commonly read format such as bitmap (.bmp).
When opening the create.16 file, I worked on spotting patterns and managed to spot what I incorrectly identified as fire.
Realizing I picked the wrong graphic I moved on to startsc.16.
So far so good. I have discovered a few things:
each pixel is encoded in 4 bit chunks
there are non-pixel bytes of varying sizes before each graphic which i haven’t been able to identify yet
This is what I’ve got so far – but my ultimate hope is to dynamically load the graphics at runtime from the original data files instead of exporting to BMP. I want to make sure that I am not peddling in copyrighted materials after-all 🙂
Novembers video includes some great updates. The project has really begun take shape and is actually starting to look like a game.
Note: All character data, inventory data and string data is gathered directly from actual Ultima save and data files
A few key changes/improvements in the November update
Shifted to a classic isometric angle
Completed remaining sprite conversions to 3D model equivalents
Upgraded lighting engine
Implemented HUD with player characters, basic item quantities and current location (also added time into HUD!)
Implemented new Location tracking in HUD
Reimplemented UI for NPC conversations with common look and feel
Implemented signs (no runes yet!)
Implemented basic inventory system
K-limb fences and mountains
Space – pass time
G-et torches from wall
Porcullis drop at night
Next month brings on some new challenges I think. I will continue to work on equipping weapons and armour… you know honestly I’m not sure what else I will do – I just kind of work on the thing that most interests me that day or if I’m short on time, I just fix a bug and move on.
I haven’t found myself with much free time to work on my project in the last few weeks but I did manage to get some basic signs up and running.
It’s actually quite interesting the way that signs are stored. At least 2/3rds of them. There is a signs.dat file that contains the majority – however for some unknown reason I have unable to find a file with all the Eight Laws signs. As a result I have had to hard code them for now.
Also many signs use non english characters which I believe are indexes into a font file – but I haven’t got to the point where I can analyze them quite yet.
Lastly some signs are stuffed in the data.ovl file. I can only imagine why they needed to sink signs into any file other than signs.dat. I haven’t had to hardcode the sign text, but have had to hard code some file offsets which is a little gross, but I’ve done it before.
I often use Mind Maps at my day job to help organize my otherwise chaotic brain! I have begun to map out the entirety of what Ultima 5 boils down to in terms of function – then I overlay my personal plans for how I want to improve it. For example I have defined a number of custom UIs for functions such as buying/selling and a conversation log that you can actually refer to well after you had the conversation!
More than anything, it makes me realize how far I really have to go! But, it will serve as a de-facto project plan and feature list.
Work continues slowly but surely on the project. A focus on improved visuals has gone well (but is far from complete).
more 3D voxels replacing legacy sprites
new daytime lighting
basic NPC dialog
For the Unity nerds out there – I have switched from built-in renderer, to light weight render pipeline (LWRP) and finally to high definition render pipeline (HDRP). This has been a really neat experience and continues to strengthen the visual quality.
Next up I expect to:
Complete all “standard” NPC schedules and textures
Continued effort to Voxalize everything. It is worth noting after a rather mean message I saw on a forum – these initial Voxel models are pretty simple rips of the original, I hope to go from a 16x16x16 to a 32x32x32 in the future with greater detail. I’m a coder, not an artist, so I am trying not to sink too much time into the fine details yet.
I spent quite a bit of time optimizing lighting, shadows and anti-aliasing. It looks quite a bit better but I am realizing that I have to make a major shift if I want to “hide” parts of the world or town/village etc that the Avatar can’t see in the original game.
I spent quite a bit of time months ago putting together the basic NPC dialog code with simple text windows. I have since created a basic conversation UI. It’s ugly, and unpolished – but it works, at least for every example I’ve tested thus far.
Less noticeable but pretty cool (I think!) is some optimizations I did for string lookups. To restate, it is my intention to use the original string databases instead of transcribing them whenever possible. I do this, not because it’s required – but more so I can say that I literally used every bit of the original as I could to recreate the original experience.
I also added the look feature (L). It’s rough, but works on basic map elements.
That’s it for now! I will be working on doors, optimizing framerate (major problem!) and lighting/hiding as I go forward in the near future.