Wiki

Clone wiki

ultima-exodus / U3_Title_Image_File_Format

There are two image files that comprise the title screen during the game's introduction sequence: a "blank" image and one that contains the "Exodus" title and subtext.

"Blank" Title Screen

There is one 300x200 blank image file for each video mode.

  • BLANK.IBM - CGA blank title screen
  • BLANK.EGA - EGA blank title screen (U3 Upgrade)
  • BLANK.VGA - VGA blank title screen (U3 Upgrade)

The blank title screen is the first image that's shown when the game starts. It comprises only the blue border with no logo or text and the first frame of the heroes/dragon animation. The entire image is output to the video buffer. The byte organization of this file varies slightly between the different video modes.

The BLANK.VGA file is 64,000 bytes with one byte per pixel (300x200). Data is organized by row (left-to-right, then top-to-bottom) with each successive row immediately following the previous. For example, if we indexed each pixel in the file, it would be organized in the following pattern:

row 0   - 0000 0001 0002 0003 0004 ... 0129 012A 012B
row 1   - 012C 012D 012E 012F 0130 ... 0255 0256 0257
row 2   - 0258 0259 0260 0261 0262 ... 0381 0382 0383
...
row 199 - E934 E935 E936 E937 E938 ... EA5D EA5E EA5F

The VGA data is written directly to the mode 0x13 video buffer at segment 0xA000.

The BLANK.EGA file has the same pixel organization with the difference that there are two pixels per byte instead of just one. As a result, each row in BLANK.EGA is 300/2=150 bytes and the entire file is 32,000 bytes. Since the U3 Upgrade uses VGA mode 0x13 when working with EGA graphics, the pixels are expanded to two bytes before being output to the video buffer.

The BLANK.IBM file however is organized differently. This 16,384 byte file contains row-interlaced CGA data in two frames of separate even and odd rows. This is structured as follows:

Index Size Description
0x0000 8000 bytes first frame - even rows (0-198)
0x1F40 192 bytes buffer, unused
0x2000 8000 bytes second frame - odd rows (1-199)
0x3F40 192 bytes buffer, unused

This corresponds exactly with the layout of the CGA video buffer at 0xB800.

Since CGA data has four pixels per byte, each row is 300/4=75 bytes in length.

"Exodus" Title Screen

There is one 300x200 exodus image file for each video mode.

  • EXOD.IBM - CGA Exodus title screen
  • EXOD.EGA - EGA Exodus title screen (U3 Upgrade)
  • EXOD.VGA - VGA Exodus title screen (U3 Upgrade)

The content of the Exodus title screen is gradually phased in as the intro sequence executes. In addition to the blue border it comprises the "Exodus" title, the "Ultima III" subtitle, the "by Lord British" script (though the actual output isn't sourced from here), a copyright notice, and the final two frames of the heroes/dragon animation showing both the dragon's breath and the heroes' charred remains.

The data is organized exactly as the BLANK.* files in the section above.

It's important to note that unlike the BLANK.* image files, the EXOD.* files are never dumped to the video buffer in its entirety. Rather, the game code phases in one piece of the image at a time.

As mentioned above, there are two frames of the heroes/dragon animation in the file. One of the frames is not in the correct position, but the game code adjusts its location when writing it to the video buffer.

Updated