Reverse-engineering the 1998 Ultima Online demo server(draxinar.github.io) |
Reverse-engineering the 1998 Ultima Online demo server(draxinar.github.io) |
I liked the old Ultima saga, in particular from 5 to 7. Ultima 8 ... I did not hate it, but they killed off the old concept. Perhaps the old genre was meant to die anyway, but it was such a big difference from 7 to 8. While 7 is often the most praised variant, I particularly hated combat; it was much easier in Ultima 6. Either way it was specific for the 1990s era for the most part, which was pretty nice. (Ok - just looked up ... Ultima 1 to 5 actually was in the 1980s era; I thought it wasn't quite that old. Ultima 6 was released in 1990.)
UO was the only Ultima game I played. I got into programming doing Sphere and RunUO emulation as a kid without ever knowing about the long history of Ultima games. Assuming that all of the brilliance of UO was architected in a few year span of development. Now looking back at the series seeing all the foundations is incredible. Overnight success 20 years in the making.
got into it with Sphere (51 and 55) if my memory doesn't trick me.
was there ever a working port of the client for OSX ? would love to revamp it.
Then RunUO came out and took the emulator scene by storm
These files would be extremely valuable to produce a highly accurate reproduction of the Ultima Online world content.
https://drive.google.com/drive/folders/1Jw_QGpRJPGGnLUhYjVgk...
Not sure whether the exact files you’re looking for are included yet, but there are several server/client-era ISOs and backups in the archive. Might be worth digging through.
Let me know if you find anything interesting in there.
The server has 2500+ players logged in right now, so still very much active.
I was surprised that there is still an active community around UO!
In any case, this is very cool. Thanks for sharing!
I was 12-13 at the time (late 90s/early 2000s), I can't remember the emulator anymore, very likely it was POL, and the concept behind the shard was to be as close as possible to the official servers before UO:Renaissance so we worked quite a lot to make it look and feel as T2A. I learnt a lot, later when RunUO came out and became a bit stable (circa 2003) I helped to migrate what we had done within POL to C# code for RunUO, had to learn a lot more to keep up.
The other people working on this shard were all in university studying CS, or already had jobs as programmers, I was the kid who could write some scripts, I believe having this experience was pivotal for me to later become a professional. My first job in a real tech company even came from a recommendation one of these guys made when an internship position opened.
In a way I probably only have my career because of UO and private shards.
It was a great experience when I was 14. Also caused my high school career to plummet, all I wanted to do was to keep coding for my UO server.
On the upside, I have a great job now and it's all because I followed that passion.
If it was an MMO, or online, there's private server communities for it endlessly.
I forget the name of the game, maybe it was City of Heroes? It was shutdown for years, and then boop, someone popped up a Private Server years later.
Heck, and I've mentioned it before, the Shockwave Online games of old have some niche communities rebuilding the servers, building Shockwave runtimes and decompilers, and they overlap between games since they find themselves trying to solve similar problems. ;)
Mine too! My second one was changing the map (remove static items, add new islands and buildings, etc), and my third one was changing verdata.mul to add new animations and item graphics.
Playing Ultima Online on an unofficial POL server literally got me into IT. I was studying to be an accountant before that.
I can't remember all the things I did, but a couple of things I do remember:
1. Added 50-ish new spells. 2. Created an arena, where you could fight monsters of increasing difficulty and win prizes. There was another option where you could pick a specific monster and fight them in waves of increasing difficulty.
I actually have an archive with all of the scripts too. I'm a hoarder for my source code haha
Before they finally patched the hole, I used to enjoy running through crowds of high level monsters in dungeons to get a whole parade of them chasing me, then quickly casting a portal into the middle of town, usually next to the bank, then ducking behind the portal without going through, as the whole line of monsters walked towards me and popped through the portal and into town!
Also, you could tame animals to make them your pets.
So one Halloween I logged into UO, and my character had been transformed into a deer, as some kind of a sick joke! All my inventory was gone, and all I could do was deer stuff.
Then some bastard came along and TAMED ME. That totally sucked! I had to follow him around obediently all day. I guess I'm lucky he didn't skin me and make me into leather armor.
Unfortunately two things turned out to be true:
1) Most people don't want any of this and prefer to be on rails
2) The two groups of people most attracted to a game like this wind up in a dynamic where one group will leave the game if the other is present. Whereas the 2nd group requires the 1st to want to play.
1) Asheron's Call (which had a very active mod scene and now an emulator scene). I don' think the servers are nearly as popular as UO though.
2) Shadowbane (this one was heavily guild based but it was fun being a bit of an outlaw and PvPing random people and guilds).
What about
- Star Wars: The Old Republic (SWTOR),
- The Elder Scrolls Online (ESO),
- Guild Wars 2 (GW2),
- EVE Online,
- Black Desert?
I didn't have an LLM back then but also at least some debug symbols from a powerpc binary that was 3 years in the future, it helped a bit.
Some of your file names seem eerily familiar like packet_handler and entitylist :D
The final frontier is basically having a perfect netcode before polishing up the rest, but that was already a waste of a couple 100h so far.
I only glanced over the source a bit, but it does not seem like some reliably mechanic on top is used because its TCP all the way down? Interesting... if thats the case - it seems like a "slow" choice for an MMO back then.
I've been working on my own MFC C++ decompilation project. It's insane how useful LLMs are for this.
Recently, I've enjoyed scripting for the TazUO game client in Python; it's a slightly older version of Python 3, but still far ahead of scripting in Razor or SteamUO. If you're looking for a quiet single-player shard to play around with, I've enjoyed Memento.
The game is currently only available via emulator.
Localized, text-heavy RPGs are a very easy way to "learn-while-playing" a foreign language, and reading as well.
Would love to see this built !
I never realized this demo was in the expansion pack.
I wonder if they considered writing their disassembly in the 'pre-C++98 dialect of C++' used in the original, and targeting the original compiler. I've done some disassembly of binaries which ran on vintage systems, and I would've targeted the original toolchain if I could have. It's an interesting philosophical question.
I played T2A a little last year, great shard & peeps running it.
> each server (so called “shards”) ran on multiple Solaris machines (the map was split by regions).
Found this 13 year old Quora commment (from https://www.quora.com/What-was-the-technology-stack-driving-...).
Ruben Cortez
Those original servers were Sun Ultra II's running Solaris. If I remember correctly, it was a dual proc box (rare in those days), 300mhz, with 256MB of ram (which we subsequently upgraded to 512MB for a boat load of cash). The server weighed a ton, and certainly wasn't rack mountable. and they cost about $30k each, making one UO shard cost about $150k (not including external storage), which is a ridiculous amount of money these days for a single shard. We eventually built MMO shards for a lot less (including MCO, TSO, ENB, and of course SWTOR) cost per shard. Back ups were kept on internal storage, for which we sweated buckets over everytime we lost a drive. we eventually centralized backups on an Hitachi Storage array that was a monster and weighed easily 100lbs and provided a whopping ~10GB of raw space.
I think where we revolutionized administration of a distributed MMO was on the network side, specifically via the VPN, which was very new at that time. Short of ordering PTP circuits all over the country and world, we used a software VPN to create those tunnels over our public internet connection at the time (a SINGLE DS3 -- it wasn't until late 1998 that we had a second circuit!) to allow for login handoff, administration, backups, publishes, etc. our hub and spoke VPN design and subsequent fully-meshed design were what made distributing shards economically feasible.
I think it was around mid 1999 when we converted to Linux, but not before using Solaris x86 first for a time. We bought Dell Towers to act as servers (Dell didn't ship a true rack-mountable server until the following year or so I think) and they were slightly better on speed than the Suns and at a much lower cost. But i think we needed more of them per shard, especially as we released expansion packs (which in those days, meant adding a new server to handle the added land mass). We were likely closer to 10 servers/shard around 2000/1.
Credit to Mark Rizzo for the architecture and buildout of the UO's backend. It was way ahead of it's time, and the innovations we mustered back then is so taken for granted these days (but isn't that true for everything?!).
That timeline for Solaris (Sparc) -> Solaris (x86) -> Linux (x86) feels very familiar from my small company developer job at the time.
I still have an inkling to get back into MapleStory custom servers (or other MMOs) but to be honest something about the vast open world that is empty of players is really creepy/sad/liminal to me. I'd want to take a spin at adding some "life" to the servers, even if it is just extra player-ish NPCs.
Such great memories!
Nowadays I miss the UO experience but simply don't have time to sink into anything like it.
I played UO a lot when younger, on Neverlands shard, and none of my friends knew how to write code for EasyUO, so I had to learn it. Good times!
That is truly honorable perseverance
Then WoW happened.
Both groups self-identify as wanting a "real" experience in a sandbox that lets them "do anything". However one means this allows them to slaughter people with impunity whereas the other means it enables them to explore the world, choose their own occupation, define their own goals, etc. It's not even a PVP vs PVE divide, as there are plenty of PVPers in the 2nd group. Instead it's closer to "Griefers" vs "Sandbox game enthusiasts", where the griefer crowed requires prey to feed their urges.
So what happens is the griefer oriented crowd chases away the other crowd, then has no one to grief and then they leave too. You'll see it in comments here as many posters were, shall we say, not super mature 25+ years ago :) they'll be pining for the days about how they could kill everyone, steal their stuff, loot their houses, and otherwise cause problems.
One of the issues with the game was that while those behaviors were intentionally allowed, the designers didn't account for the kind of player who *only* wanted to do that and generally were obnoxious about it to boot instead of trying to massage it into the lore/RP of the game. So the scale was all off.
This is also where I first started seeing people focusing on "end game", although it may have existed in EQ. The actual sandbox-ish game was just a warmup you blasted through in order to get to the "real game". Meanwhile I ran around solo and just explored, and did whatever weird thing I wanted.