Monday, September 9, 2019

Game 88: Ultima

Mondain paid me no mind until I fired my blaster at him. He didn’t move, but used some magical attacks. Most of them missed, and none did much more than 50 points of damage, but one “mind blaster” attack hit and lowered my stats 10%. Some well-animated (for this game) flames scorched random tiles in the arena during each turn. I kept firing my blaster, and eventually he turned into a bat.

As a bat, he stopped attacking me, but I kept firing. At one point, the gem glowed, and I took it, and suffered a big chunk of damage. But I kept shooting Mondain, and he eventually succumbed.

Read the manuals here:

Ultima holds a special place in my heart, as it’s the series that started my obsession with game chronology, which over time transmogrified into Data Driven Gamer. I first played Ultima I in July 2000, when a copy of PC Gamer magazine arrived and came with a disc containing twelve complete DOS games, including Ultima I, Ultima Underworld, The Secret of Monkey Island, X-COM, and others. I found that Ultima I, unlike so many DOS games, worked perfectly on my Windows machine, and was surprisingly intuitive to play, when I expected DOS-era RPGs to be incomprehensively dense and unapproachable. It inspired me to seek out and play the rest of the series, in order. Currently I haven’t yet gotten around to playing Ultima IX.

Since then, I came to realize that what I played wasn’t truly the original Ultima, but a DOS port of a 1986 remake. The original game came out on 1981 and was never ported to PCs. This helped explain why Ultima II, which had been ported to DOS much earlier, seemed in ways to be a technically poorer game than its predecessor.

And so, the time has finally come for to finally play the original Ultima. It’s not a long game, and the remake has been adequately reviewed by many others, so I will be focusing on the differences I perceive between it and my memories of the remake. I will also be delving into and attempting to make some sense of its utterly baffling source code.

I started off reviewing the manual, and even with the original California Pacific Computer version, it’s a huge step up in quality from the dinky printout that came with Akalabeth. It’s not up there with Wizardry, and Origin’s later releases would be rich with lush illustrations and flavor text, but this manual does a thorough job of explaining the gameplay mechanics, even detailing the bizarre genre-shifting space shooter minigame that occurs later on in Ultima. The manual is, however, bereft of any kind of plot, background, or even any kind of indication of your goal.

There are several copies of Ultima on Asimov, but only the remake has been dumped as a WOZ. The “purest”-seeming dumps of the original are in NIB format, and have no obvious signs of tampering by crack groups, so I chose to use these. Interestingly, if you choose to load a saved game without having created any character, you are dumped into the middle of the ocean as a “Level 1 lizard peasant,” a race and class that aren’t options in the character creator.

Booting off of the player disk allows you to start a disk copying utility, or to run a demo loop that wasn’t in the remake.

The demo loop begins with a really ugly face morphing into a skull.

Then there’s a loop of four stills showing the different modes available in the game.

Then it repeats. Alright, now to boot from the main disk.

Ultima came on a double-sided floppy disk, with one side used for the program, and one side used to store player data. If you were rich enough to have two floppy disk drives, you could copy the player data side onto a blank disk, and then put that blank disk into your second drive and eliminate the need for disk-swapping when saving and loading.

As I’m emulating, the two sides of the disk are already separate files, and it’s not a problem to insert both sides into different drives at the same time. You have to press “Esc” when prompted to insert the player disk into drive 2.

First, we have the character creator. You have the six D&D stats, which may be set to values between 10-20, and you have 90 points to distribute. Races and classes assign additional bonus points.

Human +5 Intelligence Fighter +10 Strength, +10 Agility
Elf +5 Agility Cleric +10 Wisdom
Dwarf +5 Strength Wizard +10 Intelligence
Hobbit -5 Strength, +10 Wisdom Thief +10 Agility

And with your character created, you are returned to the main menu, where you can “continue previous game” to start.

It doesn’t look all that different from the remake, at first, just drawn a touch more crudely. But there is one difference that becomes evident very soon – moving around is kind of slow! Thankfully not as slow as Telengard on the PET, but it takes about a second to traverse a tile’s distance, rather than the instant in the Ultima remake. Also, it’s semi-realtime. Just as in Telengard, which infuriated me with its semi-realtime mechanics, Ultima will pass a turn for you in about five seconds of inactivity, consuming food, and allowing spawning monsters to attack you. There’s a “Lag time” option that can be set from 0-9, but I can’t perceive any difference.

Monsters behave a bit differently too.

In the remake, as in later Ultimas, monsters wandered around the map, just as you do. Here, they just sort of appear randomly as you wander, and always adjacent to you. Sometimes the game fails to draw their sprites, but you’ll know you’re being attacked, because the text portion of the screen will say so.

You can just walk away and they’ll disappear, or they might block your path, or you can Attack for EXP and GOLD. Combat is non-directional here; you just hit ‘A’ until the enemy dies. Hidden archers sometimes ambush you from the trees and can’t be attacked at all without ranged weapons, so all you can do is try to walk away until you are successful.

As with Akalabeth, Apple II computers of the time did not have up or down keys, so you must use Enter and / instead, and it’s a bit unintuitive on a standard PC keyboard.

My first goal here is to find a town and go shopping. Food runs out fast, and then you die. We don’t want that. Luckily, there’s a town and castle nearby to the north of where you start.

I entered the town first.

Towns in Ultima all look identical, and only differ by weapons stocked. I started off visiting the Arms dealer, where I bought a mace and a rope & spikes set. Armor was too expensive for now. I also bought a horse for faster travel (less time means less food consumed during a long trip, and the horse doesn’t need to eat), and then noticed that Iolo stole my mace, so I had to buy another. I spent what was left on food, taking care to stay away from that spoony bard.

Next, the castle.

Lord British demanded “gold or service.” I had no gold, so I offered service.

And with my gold depleted and service pledged to LB, I set out on the next phase of the journey – looking for trouble!

Ultima retains Akalabeth’s peculiar HP system where there is no concept of “full” HP. You simply have an amount, which goes down as you take damage, and has limited means of increasing. There is no resting or recovering lost HP, but there are ways to make that number go up. As in Akalabeth, the best way to gain more HP is to enter a dungeon, kill a lot, and then leave. The more monsters you killed, and the tougher they were, the more HP you’ll have gained from the expedition, and hopefully will have gained more than you lost.

Farther north in the continent was the dungeon of Montor.

Here lies one big difference from the remake – rope and spikes are necessary! Their purpose is to save you from pit traps, which didn’t exist in the remake. Here, they’re all over dungeons, and annoyingly, the rope and spikes are lost when you step over one. Even worse, if you keep walking, and then turn around and walk over the pit again, and you don’t have a rope & spikes, you’ll fall right in and land one level below. This is exactly what happened to me, and since the pit was right near the entrance, I had no possible hope of leaving the dungeon.

Retrying, I went further north and explored The Unholy Hole. It was more amenable than Montor – there was a trap on the first floor, but it was possible to explore much of the dungeon without stepping on it. Once I realized that some walls were false, I was able to traverse quite a bit of the dungeon without stepping on the trap.

Partial map, the entire outer ring can be circumferenced despite appearances

Moving in the dungeons is slow. Much slower than moving in the overworld, and much slower than moving in Wizardry. You can see the screen draw itself, line by line, with every step you take. Combat is almost unbearably slow, because the screen redraws itself with each move you make, even when just attacking. You can speed up the CPU emulation, but it’s risky as this also shortens the amount of time you’re allowed to wait before the game decides to pass up a turn.

Anyway, I found this first level to be a fairly sustainable way of jacking up my HP, and decided it would make a good training ground. I’d go in, walk around in circles fighting everything until the HP started to run low, and then leave and gain much more HP than what I had entered with, as well as some gold and XP. After some gold accumulated, I left and visited towns to buy a sword, plate mail, and more ropes and spikes, and also visited the Lost King to receive a quest to kill a gelatinous cube.

I went back to the Unholy Hole and went down to the second level to farm stats. Thieves swiped all of my ropes and spikes, but thankfully in Ultima, they don’t steal your equipped gear. I came out with a cool 800 HP.

So I bought more ropes and spikes back in Britain, and returned to delve some more.

I started to suspect that Ultima’s dungeons don’t actually have any walls other than what appears in the basic template. As with Akalabeth, each Ultima dungeon level is based on a template that looks like this:

Ladders alternate between going up and down on different levels, and walls and doors are added to the template, along with pits, traps, and monsters. But it seemed like every single wall that wasn’t originally part of the template was a false one, and both the monsters and I could walk through them! Sometimes impassible laser gates appear, but those are much rarer than walls.

Level 3 was where I found my gelatinous cube, which trashed my armor.

For my efforts, the Lost King gave me a red gem, one of four required to activate a time machine.

With accumulated gold, I replaced my armor bought a frigate, and sailed for the tower of knowledge.

This was immediately worth 8 points to intelligence, and LB granted me 6 strength on my return.

The Pillars of Protection, also of this continent, were reachable by frigate due east of the tower of knowledge.

This granted +6 to agility.

You can’t use any landmark twice in a row, but you can alternate between two to reap their benefits, so I did this, visiting the Pillars and Tower until I had over 50 agility points. Stat boosts do have diminishing returns; the higher the stat already is, the smaller a boost you’ll get. Then I sailed north to the lands of the dark unknown.

The lands aren’t all that different from each other. You do need to visit all of them in order to complete the kings’ quests and receive a gem from each, and the landmarks do different things in each land, but the wandering monsters are the same, the dungeons are randomly generated, and the towns all follow the same rules. I had reached level 3 at this point, and the armour shops were stocking Vacuum and Reflect suits, so I bought the latter, and restocked food.

The castles offered quests to kill a “Liche,” and to find the “Sign Post.” I searched the continent borders in my frigate and found two signposts, one boosting my stamina and the other boosting charisma, and looped them until my stamina was past 50.

I had reached level 4 at this point, and shops offered new weapons and vehicles, so I bought a wand and an air car, and spent the rest of my money on ladder spells to quickly traverse the dungeons. The wand, it turned out, could not attack enemies in the dungeons, so after a quick sojourn on level 1 of the ominous sounding “Guild of Death,” I went back to town to buy a much more practical bow and arrows.

It took some grinding for HP, but I was eventually able to fight and kill a Liche on level  7.

I returned to the kings for my rewards. For the Liche I received a blue gem and instructions to become Space Ace in order to gain the princess’s favor, and for the sign post I received +5 strength.

While I was in the castle, I decided to try murdering the jester for the key to try to rescue the princess. I quickly found that fighting the guards wasn’t worth the effort, so I just outmaneuvered them and endured their blows. It does take a bit of spacial puzzling to walk around them without letting them block your path, but their movement routine is pretty basic.

Getting dogpiled on at Olympus

The princess wasn’t impressed by my lack of space cred, but rewarded me anyway with 3000 HP, EXP, and gold, making this a far better stat farming technique than dungeoneering.

So then I flew West to the lands of the feudal lords. Similar routine; I found and visited the two castles for my quests. One king asked me to locate the Pillar of Ozymandias, the other wanted me to kill a carrion creeper, which can be found as early as level 5 in any dungeon.

I found the two landmarks and did the thing with alternating them to boost my stats. The Pillars of the Argonauts dropped increasingly better weapons until it finally dropped a “Blaster,” and the Pillar of Ozymandias boosted my wisdom.

You feel wiser for getting that reference!

Between the HP boost and the blaster weapon, killing a carrion crawler on level 5 was too easy. My reward for it was a green gem and the hint that I’d need to use a time machine to win, and my reward for finding the Pillar of Ozymandius was more strength.

Southward to the lands of danger and despair, I visited the castles, including one “Castle of Shamino” where I was tasked with killing a Balron, and the other asked me to find Grave of the Lost Soul. I had already seen one landmark on my way south to the mainland, so I went back northward. The first, “The East Sign Post,” uselessly told me “Go east to go east,” and the Grave of the Lost Soul to the west raised my stamina a small amount, since I had already boosted it earlier.

To kill the Balron, I went into a nearby dungeon called “The Skull Smasher” and used ladder magic to descend to level 9. A “mind whipper” there blasted my intelligence down to 16 points, and a number of tough, nasty monsters did scads of damage, but with over 3,000 HP I was able to outlast them all and eventually find and kill a Balron.

Not too badly drawn by Ultima standards.

Badly drawn even by Ultima standards.

I noticed that my Ladder Up magic failed a few times, likely as a result of my reduced intelligence. At least failed spellcasts don’t deplete your stock. I only had ten casts worth.

Shamino granted me a white gem and also instructed me to take nine items from his stores. A bit useless at this point, as I already had the best weapon and armor, and no reason to go back into the dungeons where I might face armor-eating gelatinous cubes, but I took extra food.

The king’s quests completed, there wasn’t much more to do but to buy a space ship and blast off.

What happens next feels like a combination of Star Trek and Star Raiders, and the similarities to both games just seem too strong to be coincidences. Star Trek had been ported to the Apple II by 1979, so it’s plausible Garriott was familiar with it, and he mentioned being influenced by Star Raiders in an interview with HG101.

Space is divided into a bunch of sectors, like in Star Trek, and some sectors, such as this one, have starbases where you can dock to refuel and recharge your shields. Unlike Star Trek (and unlike anything in Ultima until now), you control your ship in realtime, maneuver by engaging thrusters to drive, kill, or reverse your inertia, and docking requires pixel precision or else you crunch right into the space station.

You can also swap ships, trading your stock shuttle for a sleek fighter with five times as much shielding, or a fat scow with five times as much fuel capacity but a tenth of the shields. I went with the fighter.

A sector-scan shows you a 3x3 grid of the nine sectors in your immediate vicinity in ASCII, just like in Star Trek. To hyperjump to a different sector, you first need to switch to front-view mode, a la Star Raiders.

Amazingly, this first person perspective runs at a reasonable frame rate, with a convincing parallax starfield that conveys 3D motion as you dive, ascend, or turn in first person. When you hyperjump, it even hits a solid 60fps. The effect is actually better than I remember the remake being. It’s been awhile since I mentioned this, but Ultima is otherwise a terminally slow game, to the point where walking around a dungeon can be torturous as almost every keystroke causes the game to agonizingly redraw the entire screen, line-by-line.

The goal here is to become a Space Ace, and the only way to achieve this is to seek out sectors with the “^” symbol and kill the TIE Fighters there. Luckily, there’s no time limit, and you can return to base sectors to refuel/reshield as often as necessary. 20 kills gets you the Space Ace rating.

So, it’s cruder than Star Raiders, unsurprisingly, but it’s not unpleasant to play, just kind of repetitive. The use of Enter and ‘/’ keys for aiming up and down do make things a bit more difficult than intended, but that’s not the game’s fault. If anything, it’s kind of easy, in spite of the awkward key mapping. The high shields meant I’d be certain to need refueling at a base long before I even started to worry about getting blown up, so I didn’t really worry about how much damage I took.

It didn’t take long at all to kill 20 fighters and become a Space Ace.

It did take me a little while, though, to find my way back home. I hadn’t kept track of my movement through the galaxy, so I had to start making a map of it as I searched for my starting sector, which meant sweeping the galaxy and visiting every sector that showed up as a ‘B’ on the short-range scan until I found the earth orbital base. The scow would have been useful in this search, but the earth orbit base was the only place I could find one.

Back on earth, I was almost ready for Mondain, but one tedious requirement remained unfulfilled. The princess doesn’t just require that you be a Space Ace, but also that you reach Level 8, and I was only Level 6. So I grinded the overworld for about 25 minutes at 300% CPU speed until I reached my goal. Then I rescued the princess, and she told me that a time machine was “far to the north west of here.”

Far to the northwest

I boarded the time machine, put my four gems into their sockets, and pulled the lever, to find myself staring Mondain in the face, 1000 years ago.

So, that’s Ultima, in its more or less original incarnation. Difficulty balance is generally better than the remake, which was overall too easy, and vastly improved from Akalabeth, which was far too hard and provided too few ways to beat it on the hardest difficulty, none of which felt kosher.

But I think I wouldn’t have enjoyed Ultima very much if I had been exposed first to this version, rather than the remake, simply because of how damned slow almost everything is. It’s not the worst I’ve played in this regard – that would have to be Telengard on the PET, but moving around in the overworld, the castle, and especially the dungeons, which if I’m not mistaken run even more slowly than Akalabeth, was such a slog that it almost killed my enjoyment.

There’s a lot to respect about Ultima. Origin’s motto would be we create worlds, and this is possibly the first game to introduce the concept of a game world as we understand it in modern gaming, not one such as Zork where the world is navigated room-to-room, but one with a consistent, cohesive geography, with things to do in it, and a sense of being there. The actual content of the world is limited; you’re basically doing the same thing in four different continents, the tone and theme is all over the place, and some of that immersive Ultima magic fails once you understand what’s actually going on here - that the towns, castles, and dungeons are all cut from the same mold, that nothing you do is remembered, etc., but just about every defining feature of the open-world game concept has its roots here. The remake, more widely played at this point, didn’t expand on the open-world concept, which is both to its credit and to the credit of the original, which didn’t really need any expansion.


  1. I played the 1986 remake to completion around 1989 or so... I found it in the "big city" that we used to visit from time to time from our smaller community on sale, and snapped it up!

    I had a Tandy 1000 at the time, so it was nice that they used the TGA graphics and it looked like Ultima 4 and 5...

    It's definitely more limited (It is amazing how much progress was made in games from 1977 to 1990 when the computer power blasted off into the 32 bit realm...)

    The very first CRPG I owned was Ultima III in 1987, so the whole series remains my favorite by far.

  2. I played some recreations of Garriott's first ever version of DND a while back, and that game also featured pits that could only be escaped with ropes and spikes. It's a little odd that they'd still be in Ultima, but not in Akalabeth, as Garriott's earliest games seem to be fairly iterative.

  3. I picked this up from GoG a long time ago, but just couldn't get into it for a long time. Then, I tried it again about 6 months ago after playing through Lowlander and LowlanderII (by Bob Sabiston at Flat Black Fims, on Android) and I REALLY enjoyed it! I played the DOS remake.

  4. It’s interesting that Garriott chose a design that seems to discourage dungeon crawling. With ladder up/down as an option, it seems pretty foolish to go to the trouble and risks of exploring the dungeon. Pits and leprechauns and cubes, oh my!

  5. After reading the reviews... I decided a long time ago to simply skip Ultima II and Ultima VIII.

    The others all have very interesting points, or are amongst the best CRPGs ever written.

  6. Hi Ahab.

    Here it states that there is a bug where when you reenter a dungeon level, the layout has changed.

    I read your post and Nathan's post, but it did not seem like you encounted that problem. Do you have any insight on this??

    1. I tested this by running The Dungeon of Doom's first level three times, mapping each time. In all cases, the positions of false walls, doors, pits, and traps were the same. The only difference was the position of force fields and chests.

      I have details on dungeon generation on my "Basic mechanics of Ultima" page. But here's something I didn't put there -

      Before placing the false walls, doors, pits, and traps, the RNG is seeded with the dungeon's coordinates. The X, Y, dungeon depth, and continent index are used here. These numbers don't change, so your Dungeon of Doom should be identical to mine.

      But before placing the remaining dungeon features, the RNG is re-seeded with the elapsed game time value. Therefore, these will be different! Only the force field is really consequential to the map, though.

  7. Of course I have read your mechanic's page 😁 Your code analysis is the one of the most valuable content in your blog.

    Hmm, I am wondering if there could be a possibility where there are different versions?? The ultima codex seems to be very detailed and well documented. A page that goes on to explain every single port of Ultima must be reliable than average. From what I know, it was quite a common thing where the users will edit the BASIC code themselves in those days?? I saw some games that even suggests you to do that in the manuals. Do you think there is a possibility the very initial version had that bug, but later edited and the latter is the one that we have access to now?

    1. Anything's possible, but I think that's unlikely for multiple reasons -

      The Ultima Codex doesn't mention having multiple versions of the original game, and this wasn't common at all back then.

      Ultima can't be easily edited. The code structure is unorthodox, consisting of several different programs tied together with low-level calls. Common practice for editing a BASIC game would be to CTRL+C to halt execution and then use LIST to view the code, but this doesn't work in Ultima, and changing the code in just one of its programs would likely break everything.

      There are three copies on Asimov, and between them all the dungeon code does not meaningfully vary.

      So, the existence of an earlier, buggier version of Ultima is possible, but raises several questions, such as why isn't it documented or available anywhere, and how did whoever wrote about that bug play it? Fewer assumptions are needed to posit that Ultima Codex is wrong about that one.

  8. I'm old enough to remember Ultima being released on the Apple ][ plus and to have owned an original copy of Akalabeth: World of Doom.

    With regard to your comments about Ultima being painfully slow, keep in mind that that was "normal" speed back in the early '80s. Ultima was such an amazingly different beast, the thought that it was "slow" never even crossed my mind as a teenager.

  9. Hi Ahab.

    I was wondering if I could borrow your wisdom. I want to know the size of the programs for Apple II games and perhaps TRS-80 games, but I noticed that the file size I usually see on Windows Explorer is simply the capacity of the floppy disks that was used back then (blank space is counted towards the total size). Is there a way to determine the actual size of the program? If I delete the blank space on a Hex-Editor like Stirling, will it show the approximate size of the actual program?

    1. I'd use CiderPress to explore the files on Apple II games, and TRSTools for TRS-80 games. This won't work with WOZ files, though, and also will only work with games that have explicit files on the disk, and only if they're in a format known to the explorer tool. Reach For the Stars, for instance, doesn't seem to use any files. The program code and data seems to be directly loaded from unstructured disk sectors.

      Unfortunately, when these tools fail, I don't know of any good way to distinguish blank space from code/data. The useless sectors can be filled with garbage rather than zeroes or any other obvious pattern.

    2. Thank you Ahab!! I will follow your advice.


Most popular posts