U3 Upgrade Release Log

Release 3.2 – 2016-12-19

This release adds perhaps the most common request I’ve received over the years: improved PC-speaker sound effects. More specifically, the sound effects are now timed and should sound mostly consistent with the original intent.

Ultima 3’s sound effects where designed to sound great on a 4.77 MHz 8086, but do not scale well as CPU speed increases. This is because the game code directly manipulates the PC speaker without being hooked to any kind of timer. Thus, as the CPU frequency (or VM speed) increases, the faster the PC speaker oscillates which makes the sound not only shorter but also higher pitched.

In this latest patch, if the SFXTIMED driver is configured, the sound effects will now be paced against a timer interrupt. It’s recommended that you run DOSBOX at around 3000 cycles (or 9000 if using CGA Composite mode) to get a good playable experience.

Some Additional Technical Notes:

Note that DOSBOX needs to be above at least 1000 cycles for the timer to operate properly otherwise the timer interrupt will begin thrashing. This is because the interrupt routine will execute too slowly and never return before the next interrupt is fired, thus freezing the game.

You may also read how it works here.

Previous Releases

Release 3.1 – 2014-07-23

This release adds a few gameplay fixes to the game and addresses a few issues/concerns folks had with version 3.0.

  • A set of gameplay fixes that can be enabled/disabled in the configuration program. The fixes must be toggled as a group; they cannot be toggled individually. If enabled, they will do the following:
    • Double the overworld monster generation rate. Perhaps one of the largest complaints of this port of U3 is the low monster generation rate and, by extension, the ship generation rate.
    • Increase the dungeon monster generation rate. Rate increase varies by level such that it is double the original on the first level, but only 25% more on the bottom level. Note that the effective rate increases with each dungeon level. This results in more lucrative dungeon runs, but also potentially more dangerous.
    • Halve the food consumption rate. Food is supposed to be taxing on a party, but weighs to heavily against poorer parties.
  • A streamlined installation procedure. This package ships with default configuration for the most common or recommended settings. You are of course free to customize it as needed, but it’s no longer required.
  • Windows-native (32-bit) and Linux-native (i686 ELF) versions of the U3RESET, U3CFG, and BINPAT tools. Windows versions end in “w” and Linux versions end in “l”. This should make it simpler to run these programs without having to boot into Dosbox and manually run them. Sorry MacOS users – I’d love to have OSX native versions as well, but I don’t have a great cross-compile solution to build Mac binaries from Windows.
  • The DOS 16-bit version of U3RESET was missing from the v3.0 package. It’s included again now.
  • A bugfix where a resurrection would cause the game to crash.
  • A minor VGA graphics update to the dragon animation on startup.

Release 3.0 – 2012-01-16

After many years, the 3.0 release is finally available. The major feature of this release is its support for 256-color VGA graphics.

It’s worthwhile to note that the video and music code was entirely re-written and extracted into external drivers. This makes it easier for me to maintain, but also enabled the ability to “switch” between video modes with a config program by merely swapping drivers.

In addition to the headline VGA graphics, users have the option of playing in EGA and CGA modes if they so choose. Furthermore, for “classic mode” enthusiasts, there is now a CGA Composite driver which simulates the blending of CGA colors on composite monitors. This is actually how U3 on the IBM PC was intended to be played! More info at https://bitbucket.org/mcmagi/ultima-exodus/wiki/CGA_Composite

Besides the graphics drivers, a number of other things have been updated/added:

  • You can replace those 0-7 moon phase numbers with actual moon phase icons. Make sure “moon phases” is set as “enabled” in the config.
  • The EXE programs included with the upgrade (U3CFG.EXE and U3RESET.EXE) have been recompiled to work properly under 16-bit DOS without a DPMI interface (e.g. DOS4GW).
  • A bug was fixed that would give inaccurate Marks/Cards information in Ztats.
  • The frame limiter was rewritten using the PIT (Programmable Interrupt Timer) as opposed to date milisecond comparisons. Some of the timings have been adjusted.
  • The Exodus Project is now open source! Find us on SourceForge at the following URL: https://bitbucket.org/mcmagi/ultima-exodus/overview

Lastly, I no longer include the modified binaries in the release packages. I found that as I modified more and more of the files in the Ultima games I was coming awefully close to including the entire game in the zip file. Now, the release packages include a patch file that contains only the differences. You’ll need to use the binpat program to patch your executable and data files. There’s more on this in the install instructions.

Release 2.5 – 2002-01-08

I have made only one bugfix to this release:

It looks like there was a problem updating the main Sosaria map when leaving Ambrosia. It turned out to be a result of not having cached the main map to memory as the game does when entering a town. I found the problem code and repaired it.

Release 2.4 – 2001-08-31

I have made two updates to this release:

  • First, a bug was fixed with AutoSave. Previously, if AutoSave was disabled and a party member dies in combat, the game would save the state of the party anyway. This is AutoSave behavior and obviously should not happen if it is disabled. As it turns out, I missed updating the AutoSave code at that point, even though I had documented it as having been updated! Anyway, this problem is now fixed.
  • Second, I found it frustrating that when I wanted to start U3 all over with a new party, that I would have to copy the map file, SOSARIA.ULT, from the CD to erase the monsters, ships, etc from the map. The new included utility, U3RESET.EXE, eliminates this procedure. Whenever you want to start U3 anew, simply disperse your party and then run this program. It will wipe all the monsters, chests, frigates, and horses from the map, and reset the whirlpool and moongates as if you were starting from scratch. Please note that this does not clear the roster.

Release 2.3 – 2001-04-06

I have not added any new features to this version, but I have made three maintenance updates to the game:

The first fix pertains to opening files. Some users have reported receiving the message “Wrong Disk” upon starting the game. The game would lock from that point on, but the original CGA U3 would start fine. This problem occurrs because the “read-only” attribute is set on one or more of U3’s data files. The solution thus far has been to remove the read-only setting.

The Ultima 3 game files all have the read-only attribute set when they are on the CD. This is the operating system’s way of saying that you cannot change any existing files on the CD. When the files are copied onto the hard drive, the read-only flag is preserved. Thus, any attempt to write to these files will fail until the attribute is removed.

When I upgraded the file access code in release 2.2, I set all files to open in read/write mode by default. This means that if any of the data files have the read-only attribute set, the game will error out and halt. The latest fix that I have encorporated will open files in read-only mode (not read/write) when it is only going to read data from a file, and write-only mode when it is only going to write data to a file. This fix, in effect, yields the same behaviour as the original, while still taking advantage of the newer file access methods.

I do not consider this a bug fix, just a matter of convenience. Please note that if your U3 saved game files have the read-only attribute set, it will not be able to write to them, and hence result in the familiar “Wrong Disk” message.

Secondly, I have changed the timing on a few parts of the intro to the game. Certain parts should run at a somewhat more consistent rate b/w systems and I have added pauses in other places.

The third and final fix is the “u3cfg” configuration program. I orignally compiled this program with MS Visual C++. When any attempt was made to run “u3cfg” in pure DOS or on DosEmu, the program will complain that Windows is not available. I have since recompiled with DJGPP, and the config program now runs as it should. Of course, DJGPP increased the size of the program four-fold, since it is no longer accessing Windows functions. I thus killed all the Object-Oriented-ness from the program and made it straight C. It dropped 50kB from its previous size, which is not perfect, but is still better than an excessive 200kB config program.

Release 2.2 – 2001-01-01

This release addresses many issues that have been submitted, the first of which is the AutoSave bug. When you entered a town or castle with the AutoSave disabled, and then left the town, the overworld map was loaded from disk, and thus assumed the state of your last saved game. This is very likely the reason behind the lack of monsters being generated and the problem with ships appearing. I modified the binary so that it now caches the Sosaria map in memory when entering a town and reads the map from memory (instead of from the disk) when leaving the town. This should have no affect on those who prefer to have the AutoSave feature enabled.

The next update was to address problems with WinNT and Win2k users. It seems that when software interrupt 66 is called from within the virtual machine when MIDPAK is not loaded, the virtual machine crashes (probably because int 66 defaults to 0000:0000). The ULTIMA3.COM program not only launches and unloads midpak, but creates a wrapper interrupt for the game when MIDI is disabled. The result: the game no longer crashes in NT with MIDI disabled.

In addition, Win2k users could not run the game with MIDI at all. For some strange reason, the virtual machine was not passing the command line arguments to the midpak driver. Thus, the driver was unable to load with a large enough buffer, neither was it able to unload. The new ULTIMA3.COM launcher corrects this problem. (Although the original problem of why the command tail was not detected by midpak on the command line still eludes me. If someone can enlighten me on this issue, please do.)

The new configuration program, U3CFG.EXE creates/edits the file U3.CFG which is loaded by ULTIMA3.COM. You may now enable or disable MIDI, the AutoSave feature, and the frame limiter from this program.

The game can no longer be launched using the U3EGA.COM binary. You must use ULTIMA3.COM to load the game.

I improved memory handling in the program. Although .COM programs, by default, are allocated all memory in the block within which it is loaded, the game now frees any unused memory AND makes sure that enough is available before using it.

Lastly, I was informed that in the original version of U3, the song “Alive” is played during the endgame sequence. I have made this change to the endgame, and also to the “dead party” sequence.

Oh… and I almost completely forgot. Some of you may have noticed that when you attempt to play U3 in pure DOS mode on a FAT32 filesystem, the game will not function at all (upgrade or CGA version). This is because U3 used a method of file I/O that was considered obsolete after DOS 2.0 was released. (for those who are familiar with this; U3 accessed files using File Control Blocks). I modified the program to use a more modern method of file access and this problem should no longer appear in the upgrade.

Release 2.1 – 2000-11-27

AutoSave patch program, “u3autosv.exe”, was written. Be advised that this program patches the actual binary, not a config file. It will only work with release 2.1 of the U3 Upgrade. It will have no effect (positive or negative) on previous versions.

I edited some of the MIDI music to loop properly without skipping its beat. I also balanced the volume of the instruments on a few of the songs.

I fixed a bug where the game would AutoSave when you enter or leave Ambrosia when AutoSave is disabled. It looks like I missed this one the first time around.

Current Known Issues

The upgrade does not presently operate under Win2k. I believe I understand the source of the problem and I am currently in the process of developing a workaround. It may be some time before it is completed, though.

In addition, neither NT4 nor Win2k will execute U3 properly when only “u3ega.com” is run (to play without midi).

Release 2.0 – 2000-11-19

It’s been nearly two months, and I figured I’d jump straight to version 2.0 without the pre-releases this time. And I hope you’re ready to replay through the whole game again, because Ultima III for the PC now has MIDI music!! Whoohoo!!

I tried to stick to the C64 and Apple II releases in most places. Unlike the original, the Demo screen does not loop through every song, only Wander. That’s fine, I think, because most people do not let the game sit on that screen for very long. 🙂 Fanfare is played when you die and when you win the game. In the originals, the game just froze when you died… I’m not sure about the end game, since I never got there on non-PC platforms. Let me know if you think I missed anything.

The MIDI music has been enhanced to suit the feel of the game. I packaged the MIDI files on my download page as well for those who want them.

I did add a few other things. First and foremost, the game no longer “auto-saves” when you enter a town/castle/dungeon, when your party dies, or when you win the game. It only saves when you press “Q”. I will eventually release a tool that will allow you to re-enable this “feature”, as well as control some other aspects of the game. In the mean time, if you really want that annoying “feature”, email me and I will give you a workaround.

Various other updates: I added ALT-R/X/Q support to combat scenes. I also fixed a bug at the endgame which displays a cursor when you press a key. And the horse now has a mane.

I would also like to thank Aradindae Dragon (maker of the U4 MIDI Upgrade) for helping me to get the Midpak Drivers to work properly.

At this point, Phase II is complete. As for the entirety of the U3 Upgrade project, I’m pondering a third phase. What else could I upgrade? I’ll let you know that when I make a decision. 😉

Release 1.0 – 2000-09-10

The Frame Limiter support has been improved. Previously, screen flashes during spells or the blue or red “hit” tiles were not handled by the frame limiter and thus appeared too quickly to be seen on some systems. The Frame Limiter was also added to the Demonstration Screen, Peer Gems, and Dragon Animation during the Intro. All other parts of the Introduction do not make use of the frame limiter (at least not yet), and have thus been slowed even further.

The ALT-R (Restore), ALT-X (Exit), and ALT-M (Main Menu) hotkeys have been integrated into the program. They will work in the overworld, towns, dungeons, end game, and when all party members are dead. They will not work while peering through gems, in combat, or at shops. The ALT-X command has also been added to the main menu.

All tiles in the game have been colored. In addition, the intro animation (where the Dragon burns the doomed party) also now makes use of the appropriate colors.

You can hear the Dragon fry said party now, as well.

At this point, Phase I is complete. I will now sit back, relax, and take a nice long nap. Real life is also starting to ask for a piece of my time, so I have some affairs to put in order. Whence I return, I’ll tackle Phase II.

Release 0.5 – 2000-08-29

Release 0.5 is out! I’ve fixed the corrupted text bug that plagued previous versions and managed to get proper coloring when peering through Gems in the overworld. In addition, this release features an experimental Frame Limiter which should replace the use of moslo. I’ve tested this on only a few computers, so I’d appreciate it if you let me know if it doesn’t work or is too slow for you. Also, please note that the frame limiter does not currently apply to the intro.

Phase I is very near completion! Once I finish coloring the remaining tiles and read the feedback on the frame limiter, release 1.0 should be ready.

Release 0.4 – 2000-08-25

What is in this release:

  • Dungeons work! And they are in color too!
  • Peer Gems now work as well!
  • Colored more tiles.

What is left before release 1.0:

  • I must now begin to look for the corrupted text bug again.
  • More tiles to color.
  • I may have found a better way to handle some of the speed issues.
  • Peering at gems in the overworld gives awkward colors.

I have also updated the project web site to be more… presentable.

Release 0.3 – 2000-08-22

What is NOT in this release:

  • I have not had the opportunity to get the Peer Gems or Dungeons to work.
  • Neither have I successfully tracked down the “corrupted text bug” after a week of searching for it.

What is in this release:

  • I found a way to slow down the game speed without affecting the game’s responsiveness to the keyboard.
  • I colored most of the tiles to resemble U1 & U4.
  • The game screen “blinks” when an area-affect spell is cast.
  • The party member box blinks when a party member is hit or poisoned.
  • The number above the party member box is highlighted when it is this character’s turn in combat.

Release 0.2 – 2000-08-15

The game is now playable! The text, game map, frame border and animations all work properly and are rendered in 16 colors. But please note that Dungeons and Gems do not work yet. I also slowed down the game quite a bit. I also found one bug so far: during some combat scenes, the text gets corrupted and displays garbage.

Release 0.1 – 2000-08-13

At present, you cannot play the game. But the introduction, demonstration, main menu, and roster/party interface are all 100% functional. I also slowed down the intro and demo some, so you could actually SEE what’s going on. All tiles & character sets have been converted to 16 colors.

Pre-Release History

Title Screen – 2000-08-08

It took a full week, but the title screen was working 100%.

Debugging Begins – 2000-08-01

After the tiles were converted, I took a look at the assembler code. I copied the debugging output into MS Word and added comments throughout so I could see what was going on. After experiments with graphics mode 0x0d failed, I soon discovered the beauty of graphics mode 0x13.

Project Begins – 2000-07-30

I crafted a working tile converter/editor in C++ to build the new graphics. I did this in my spare time, just to learn a bit more about C++. I did not expect the project to move so swiftly.

First Attempt – 1997

I made my first attempt at Assembler with the intent of upgrading the graphics in Exodus. Unfortunately, I understood very little about Assembler and programming in general. All attempts halted after a month of trying. But the thought never left my mind.