Overview
This chapter gives a short overview over the game itself, as well as a detailed summary about all game files used in Ultima Underworld 1 and 2.
Remarks
The game was released in the year 1992, just before Wolfenstein 3D came out. So it was the first true first-person game on the PC.
Ultima Underworld is a MS-DOS based game created in C with Turbo C++ 2.1 and Optasm as the assembler used (as far as we know). 3d models were done with 3d studio max and converted and placed into the executable.
Ultima Underworld is a trademark of Origin, Inc.
Document conventions
This document follows some conventions, to keep a nice and well-to-read format. The document is indented by 3 spaces; text must be wrapped at line column 79 and tables can (but doesn't need to be) indented with 3 spaces, too. No tab spaces should be used. Special parts of the formats specification that only refer to either Ultima Underworld 1 or 2 are marked with [uw1] or [uw2].
All integer data values in the documentation are referred as Int8 for 8-bit values, Int16 and Int32 for 16-bit and 32-bit values. All values are unsigned unless noted otherwise. As the game was written and run on x86 PC machines, all variables are stored in little-endian format, where e.g. the lower byte of a 16-bit value is stored first, then the higher byte. All data structures found so far use this scheme.
Summary of game files
This section lists all the files that are part of the Ultima Underworld game installations.
Ultima Underworld 1 files
Here's a list of all files for Ultima Underworld 1:
Files in the main folder:
| File | Notes |
|---|---|
| install.dat | infos which files are installed |
| install.exe | installer created with EZ-INSTALL 3.13 |
| install.olb | ANSI text strings for the installer |
| lha.doc | LHA manual for 2.13 |
| lha.exe | LHA 2.13 to unpack installer game files |
| uw.exe | ultima underworld 1 executable |
| uwsound.exe | sound settings program |
Files in the "data" folder:
| File | Notes |
|---|---|
| 3dwin.gr | 3d window graphics |
| allpals.dat | auxiliary 4-bit palette indices |
| animo.gr | small animations |
| armor_f.gr | female paperdoll armor graphics |
| armor_m.gr | male paperdoll armor graphics |
| babglobs.dat | initial conversation globals |
| blnkmap.byt | blank map bitmap, palette #1 |
| bodies.gr | paperdoll bodies |
| buttons.gr | buttons, seems to be from some map editor |
| chains.gr | rotating chains for the stats window |
| chargen.byt | character generation bitmap, palette #3 |
| charhead.gr | character images, for conversations |
| chrbtns.gr | character generation graphics, palette #3 |
| chrgen.dat | |
| cmb.dat | item combining rules |
| cnv.ark | conversation scripts |
| comobj.dat | common object properties |
| compass.gr | compass graphics |
| conv.byt | seems to be a conversation screenshot, palette #0 |
| converse.gr | conversation screen bitmaps |
| cursors.gr | mouse cursor images |
| doors.gr | door textures |
| dragons.gr | scroll dragons animations |
| eyes.gr | eyes from top screen |
| f16.tr | floor/ceiling textures, size 16x16 |
| f32.tr | floor/ceiling textures, size 32x32 |
| flasks.gr | health and mana flask graphics |
| font4x5p.sys | small font |
| font5x6i.sys | italic font, used in character stats screen |
| font5x6p.sys | normal font, used for scroll messages |
| fontbig.sys | big font, for cutscenes |
| fontbutn.sys | font for buttons (?) |
| fontchar.sys | character generation font (?) |
| genhead.gr | generic heads images |
| grave.dat | grave IDs |
| heads.gr | avatar character generation heads |
| inv.gr | inventory graphics, scroll backgrounds (?) |
| lev.ark | level maps, texture indices and object list |
| lfti.gr | left menu buttons |
| light.dat | palette mappings for 16 different light levels |
| lights.dat | |
| main.byt | main game screen bitmap, palette #0 |
| mono.dat | palette mapping for grayscale colors |
| objects.dat | object data specific to an object class |
| objects.gr | object graphics, some never seen in inventory (460 objects!) |
| opbtn.gr | opening screen buttons, create new game, etc.; palette #2 |
| opscr.byt | opening screen, palette #2 |
| optb.gr | some options buttons |
| optbtns.gr | all options buttons from the left menu |
| pals.dat | eight palettes (#0 to #7; #5 and #6 are the same) |
| panels.gr | some invalid type, 0x0 and 1x1 resolution images |
| player.dat | initial player character called "gronkey" |
| power.gr | hit power indicator graphics |
| pres1.byt | "origin presents" screen, palette #5 |
| pres2.byt | "a blue sky prod. game" screen, palette #5 |
| question.gr | a single question mark |
| scrledge.gr | scroll paper edges |
| shades.dat | |
| skills.dat | char. generation skills for all classes |
| spells.gr | spells graphics |
| strings.pak | all the game strings |
| terrain.dat | terrain texture properties (see 4.7) |
| tmflat.gr | wall switches and other decals |
| tmobj.gr | more wall decals, 3d model textures |
| uw.cfg | underworld configuration (audio, cut scenes) |
| views.gr | the letters "mv", probably not used |
| w16.tr | wall textures, size 16x16 |
| w64.tr | wall textures, size 64x64 |
| weapons.cm | weapon animation auxiliary palettes (see 3.8) |
| weapons.dat | weapon animation x and y coordinates (see 3.8) |
| weapons.gr | weapon hit animations, for left and right handedness |
| win1.byt | winning screen with text, palette #7 |
| win2.byt | blank winning screen for character info, palette #7 |
| xfer.dat | color index translation tables (see 9.3) |
Files in the "sound" folder:
(*.adv are device driver for midi/wave output)
| File | Notes |
|---|---|
| XX.voc | all cutscene audio files |
| uwXX.xmi | underworld extended midi music |
| awXX.xmi | the same, for adlib music (?) |
| sounds.dat | sound effect midi commands (?) |
| uw.mt | MT32 sound effects data |
| uw.ad | adlib stuff |
| adlib.adv | Ad Lib Music Synthesizer Card |
| mt32mpu.adv | Roland MT-32 or compatible |
| pasdig.adv | Pro Audio Spectrum Digital Sound |
| pasfm.adv | Pro Audio Spectrum FM Sound |
| pcspkr.adv | IBM PC or compatible internal speaker |
| sbdig.adv | Sound Blaster Digital Sound |
| sbfm.adv | Sound Blaster FM Sound |
| sbpdig.adv | Sound Blaster Pro Digital Sound |
| sbpfm.adv | Sound Blaster Pro FM Sound |
| tandy.adv | Tandy 3-voice internal sound |
Here's a list of song names for the .xmi files:
| File | Notes |
|---|---|
| uw01.xmi | Introduction |
| uw02.xmi | Dark Abyss |
| uw03.xmi | Descent |
| uw04.xmi | Wanderer |
| uw05.xmi | Battlefield |
| uw06.xmi | Combat |
| uw07.xmi | Injured |
| uw10.xmi | Armed |
| uw11.xmi | Victory |
| uw12.xmi | Death |
| uw13.xmi | Fleeing |
| uw15.xmi | Maps & Legends |
Files in the "cuts" folder:
- = not in "static" install
cs???.n00 anim control files (?)
cs000.n01 black screen cs000.n02 * garamon in swirling air cs000.n03 garamon talking cs000.n04 * garamon talking cs000.n05 * garamon talking cs000.n06 * garamon in swirling air cs000.n07 garamon appearing cs000.n10 intro w/ tyball stealing princess, troll and guards etc. cs000.n11 almric talking, on throne cs000.n12 almric talking, closeup cs000.n15 guard talking cs000.n16 * guard talking cs000.n17 * guard talking cs000.n20 mountain scene, avatar taken to the abyss cs000.n21 * mountain scene cs000.n22 abyss doors closed, from outside cs000.n23 doors closed, from inside, w/ avatar cs000.n24 guard talking, with purple background cs000.n25 * guard talking, with purple background
cs001.n01 ship approaching, abyss collapsing cs001.n02 ship taking avatar on board cs001.n03 almric talking, on ship cs001.n04 almric talking, on ship cs001.n05 * almric talking, on ship, birds in background cs001.n06 arial talking cs001.n07 arial talking cs001.n10 abyss collapsing, ship sails away
cs002.n01 dying tyball talking cs002.n02 * dying tyball talking cs002.n03 * dying tyball talking cs002.n04 * dying tyball, dying
cs003.n01 arial talking cs003.n02 * arial talking
cs011.n01 "ultima underworld the stygian abyss" splash screen anim cs012.n01 acknowledgements cs013.n01 goblet with letters "in" cs014.n01 goblet with letters "sa" cs015.n01 goblet with letters "hn"
cs400.n01 "look" graphics for windows to abyss volcano core cs401.n01 grave stones
cs402.n01 death skulls w/ silver sapling cs403.n01 death skulls animation cs403.n02 death skull end anim
cs404.n01 anvil graphics cs410.n01 map piece showing some traps
Files in the "crit" folder:
assoc.anm animation associations
Files in a save game folder (e.g. "Save1"):
lev.ark modified level map bglobals.dat conversation globals (initialized) desc savegame name player.dat character info
Files that only appear in the uw_demo "data" folder:
df??.tr floor textures dmain.byt main screen dplayer.??? encrypted player character info for self-running demo dscript.??? scripts for self-running demo sequences dterrain.dat terrain texture properties for the demo dw??.tr wall textures level13.anx object animation overlay info level13.st tilemap and master object list for first level level13.txm level texture usage for first level newobj.dat presd.byt "... presents a demo of ..." screen for the demo
Ultima Underworld 2 files
Here is a list of all files from Ultima Underworld 2 that differ in content or are only available in the second game.
Files in the main folder:
uinstall.exe game installer (LZEXE 0.91 compressed) uw2.exe Ultima Underworld 2 game
Files in the "data" folder:
byt.ark cnv.ark compressed conversation archive dl.dat gempt.gr red gem parts (?) ghed.gr lev.ark compressed levelmap archive lighting.dat pals.dat 11 palettes scd.ark weap.cm weapon animation auxiliary palettes (see 3.8) weap.dat weapon animation x and y coordinates (see 3.8)
Files in the "cuts" folder: cs???.n?? cutscene animations lback00x.byt (?) (x = 0..8)
Files in the "crit" folder:
as.an animation associations cr.an animation segment list pg.mp page file crXX.YY critter animations, XX=animation(octal) YY=page
Files in the "sound" folder:
bsp??.voc guardian speech dd??.adv digital sound drivers dm??.adv digital music drivers sample.opl sp??.voc sound effects uw.opl uw??.voc guardian laughter uwa??.xmi adlib music files uwr??.xmi roland music files
Here's a list of song names for the .xmi files:
uwa01.xmi The Labyrinth of Worlds Theme uwa02.xmi Enemy wounded uwa03.xmi Combat uwa04.xmi Dangerous Situation uwa05.xmi Armed uwa06.xmi Victory uwa07.xmi Sewers uwa10.xmi Talorus uwa11.xmi Prison Tower / Goblin Prison Tower uwa12.xmi Death uwa13.xmi Killorn Keep uwa14.xmi Ice Caverns / Blackrock Prison uwa15.xmi Scintillus Academy / Ice Caves uwa16.xmi Praecor Loth / Castle British uwa17.xmi The Labyrinth of Worlds Theme (again) uwa30.xmi Introduction uwa31.xmi Guardian's Trap
The second names come from some mp3 files available here: http://www.stygianabyss.com/uw/music/uw2.htm