Reinterpreting the Ultima (1981) Engine
Over the past week I started working on a small side project called Open Sosaria.
The goal is simply to reimplement the engine of the original Ultima (1981) Apple II release so that it runs on modern systems while preserving the behavior of the original game. This is not a remake, and not a remaster. It is an engine reinterpretation.
The intention is to reproduce how the original game behaves using modern code while still requiring the original game data. The engine reads the Apple II disk images, extracts the assets, and then runs the game logic on a modern renderer.
No original assets are included in the repository. You must bring your own disks.
Project Goals
The basic goal is behaviour preservation, reproduce the gameplay rules as closely as possible. It should extract everything it needs from the game disks (program and player disks). Depending on how long this take (I’m currently thinking it wont take that long) I might add some extra features like widescreen support, mods, maybe a level editor, not sure yet.
What Is Working So Far
Even though the project is still early, several major pieces of the original game pipeline are already functioning.
Disk verification
The engine checks that both Apple II disk images exist and verifies that the required files are present. If the expected files are missing, the runtime fails with a clear message.
Apple II DOS 3.3 disk parsing
The engine can read the Apple II disk catalog and locate files stored on the disk. This includes navigating the DOS 3.3 track and sector layout used by Ultima.
Splash screen and title screen


Character generator

The character creation system is now functional. Observed constraints from the original implementation include:
- Stats must be allocated between 10 and 20 points per stat
- Player names can be up to 15 characters
- Initial stats begin at:
- HP: 100
- FOOD: 100
- HEALTH: 100
- EXPERIENCE: 1
- X: 40
- Y: 40
Overworld rendering
The overworld map is now rendering correctly. Internally the map is divided into four chunks extracted from the disk.
Player movement and collisions
Player movement is implemented and collisions are working.
Reinterpreting the Original Mechanics
One of the most fascinating aspects of the project is determining how certain behaviors worked in the original engine. Because the original game was built around Apple II hardware timing, some behaviors cannot be reproduced exactly and must instead be interpreted. For example:
Keyboard wait behavior
The original code appears to wait roughly 200 keyboard iterations. In the modern engine this has been reinterpreted as 5 seconds of waiting which produces a similar perceived delay compared to the original running in emulation. Waiting consumes a small amount of food and advances time.
- Food consumed: 0.05
- Time advanced: 0.5
Documentation
Every discovery about the engine behavior is written down as a reinterpretation note. The goal is not just to reproduce the game but to understand how the original engine worked. These notes will evolve as more mechanics are validated.
What Comes Next
There is still a lot to implement.
- enemy encounters
- game logic
- towns and dungeons
- combat systems
- NPC interactions
In other words, the actual game.
For now the focus remains on building a stable engine foundation before layering the rest of the mechanics on top.
Final Thoughts
This project is still very early, but the core pieces are starting to come together. If you are curious about the progress, the repository is available here: https://github.com/delcodigo/open-sosaria
More updates soon.