Reverse-engineering the 1998 Ultima Online demo server
Comments
raymond_goo
MacNCheese23
As the final and last surviving dev of eqclassic I found this interesting, but expected more story meat on how tools were used and the overall process. Nevertheless, a nice read.
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.
helloplanets
For anyone wanting to try UO out, it's still a game with an active player base. There are 3rd party servers like UO Outlands, which gets closer to the original gameplay. Meaning very harsh in comparison to what most people are used to in today's MMOs. Players can just come to gank you and you'll lose your stuff, etc.
The server has 2500+ players logged in right now, so still very much active.
tagami
OOooOooOoooOoO
singleshot_
An Corp & have a great day
ct520
Yeah - I feel like UO outlands is ran better then the original UO. Their discord is pretty active too about 20k users on there.
curioussquirrel
My first real programming achievement was building a website for an Ultima Online shard. I wrote some really terrible PHP and HTML, but it worked for 20+ years afterwards. Great memories!
I was surprised that there is still an active community around UO!
In any case, this is very cool. Thanks for sharing!
piva00
Similar experience, I helped to build the website, manage the forum installation, and overtime the people running the shard invited me to also code for the emulator they were running.
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.
mentos
Same, when I got into UO emulation I used Sphere for a month then this new C# emulator called RunUO was announced haha and I moved over (~ Aug 2001). There's still a forum post from 26 years ago of me remarking about all the brackets { } involved in writing C# code ha. But I remember that spark when I made a change in a sword file and saw it reflected in game. Been chasing and riding that high ever since. Led to a career in software development but more importantly unlocked some of the greatest joy in life I'm sure everyone here can attest to.
penetrarthur
Mine was automating mining ore via an assist tool called UOInject. I think the language there was Visual Basic. I started programming purely out of necessity.
giancarlostoro
> I was surprised that there is still an active community around UO!
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. ;)
000000000001
Yes! Can confirm am in a Discord server for Farmville, called Farmville Replowed. A community member has also forked it and added updates, though he changed the database schema so it has been pr'd, and released a Electron client with Flash bundled, Windows, Linux, and Mac are supported.
arthens
> My first real programming achievement was building a website for an Ultima Online shard
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.
gedge
Me three! Made my own POL shard, and invited some friends to it. Wasn't a big thing, but I was proud :)
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
devin
My first website was for my guild on Chesapeake, and I hacked together scripts for macroing various skills as my first "actual programming" project. It is also what led me to join IRC for the first time, which then later led me to freenode.
arscan
I had a similar experience. Back then gamers were an outsized part of the online community, so if you wanted to build a site that got some actual use and engagement, building to that audience was a good strategy. And of course, it helps when you are part of that audience.
kev009
The UO emulator scene got me into network programming. I've never seen an online game capture so many ancillary/emergent/accidental gameplay mechanics as well as this, somehow all the 3d MMOs seemed to downgrade a lot of the interesting economics, building, exploring that UO delivered. PvP and quest type stuff is probably a lot better in other games but it was still compelling and you could realistically play solo or in a group or casually interact with randoms and effortlessly switch between these as you felt like it.
jghn
> somehow all the 3d MMOs seemed to downgrade a lot of the interesting
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.
low_tech_love
The “rails” thing is very much the gist of it. Don’t get me wrong, I think classic WoW is probably one of the best games ever made, but after it came out, nobody wanted the raw experience of early online worlds anymore. Which is just life I guess.
jghn
Yep. After I stopped UO I took a break for a few years and picked up WoW after it had already settled in for a bit. I was surprised how on rails it was. Get a quest? Well my UI plugin tells me exactly what to go. Add *any* sort of mystery or nondeterminism? People whine.
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.
gww
A few of the older 3d MMORPGS did try to instill some of those mechanics. Examples include:
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).
viking123
Maybe there is some opportunity there? Very little going on in the mmo world now tbh. Wow, old school runescape, final fantasy online, not much else worth it.
aleph_minus_one
> Wow, old school runescape, final fantasy online, not much else worth it.
What about
- Star Wars: The Old Republic (SWTOR),
- The Elder Scrolls Online (ESO),
- Guild Wars 2 (GW2),
- EVE Online,
- Black Desert?
pitched
All of them (except Eve) feel too much like WoW reskins to bother with. This is personal opinion but the feeling probably reflects why they have 1% (estimated by ChatGPT) of WoW’s subscriptions.
archturtle
I'm enjoying GW2 a lot, I feel it has a lot of players. No matter which corner of the map you go to, you can always find people doing either open world group content or their own thing
singleshot_
Eve is more of an Excel reskin.
tcbawo
This game was created before virtual currency and pay to win was a thing. The potential money is probably too corrupting.
skerit
> I worked on this project intermittently for 10 years, until recent developments in LLMs finally made it possible to complete this seemingly never-ending task.
I've been working on my own MFC C++ decompilation project. It's insane how useful LLMs are for this.
3form
Are you using LLM in an automated way for this? Also, local or cloud?
IChrisI
I enjoyed Ultimate Online, back in the day.
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.
ajxs
Very cool! Would you believe I was actually just listening to some of the old Ultima game soundtracks when I saw this?
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.
IG_Semmelweiss
I've been looking for a localized (Spanish or French), mobile version of Ultima 4 (NES). Others too. Something similar to what was done with FF series by Pixel Remaster.
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 !
fp64
Interesting, the reversing was done with radare2? I mean it's pretty neat and I wish I would use it more often (so I don't keep forgetting the commands and workflows...) but Ghidra or even the now-free-for-personal-use IDA Pro are so much better and move convenient, at least to me.
NBJack
I'll never forget the trailers for Ultima Online 2 back in 2000. Ironically, their choice of accompanying music had the line "this is not superstition".
I never realized this demo was in the expansion pack.
_doctor_love
Oh, UO...such good memories. I remember biking down to Cybersmith in Palo Alto to buy pre-paid time since I wasn't old enough to have a card. Used to rock it on the Napa Valley shard back in the day (I wasn't brave enough for Catskills).
Nowadays I miss the UO experience but simply don't have time to sink into anything like it.
zeropoint46
why not catskills? was it different? are you thinking of Siege Perilous that had a harder rule set?
darknavi
I love old MMO server reverse-engineering. MapleStory custom servers helped get me into programming in middle school/high school.
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.
grebc
Memories.
I played T2A a little last year, great shard & peeps running it.
usualtuesday
Lovely to see this here and I’m sure lots of lurkers here who played UO. For me - The Alter Realm, Imagi-Nation, Abbadon and many others. World builder on a shard as well. Great game, pity WoW came along and killed the genre but thats life.
jdmoreira
Wow. I spent a lot of time, probably around the year 2000, playing UO on a Portuguese shard named "Lusitania".
Such great memories!
danborn26
The network optimizations they had to use in the late 90s for MMOs are still impressive today. Great effort on preserving this piece of gaming history.
klvino
Great memories. The human engagement was more genuine to everyday in-person interactions than the current state of MMORPGs and even most Social platforms. The game was also great in how extensible it was. Too great in some aspects that allowed botting, but accessible enough that general public, coding novices experienced an "intro to scripting" to create sophisticated macros.
zuzululu
I was too young for Ultima era but what was the experience like playing an MMO in the late 90s and early 2000s ?
low_tech_love
A lot of grinding, first and foremost. The idea of a massive multiplayer game was new so just having the thing itself was enough to get you excited to go in and spend days repeating the same 5-second loop to get a level. It was also a much more social thing, servers were usually small (and niche) enough that you would know most people by nickname, know when someone new entered, etc. Most games were mostly sandboxes so the fun was just to have this shared world and compete in it, more than doing quests, etc. There was a lot of full drop PVP so the stakes were really high, you could lose in a second the items you worked for weeks or months to get. It was exhilarating.
Then WoW happened.
zuzululu
I've heard of EverQuest was brutal as well
lysace
This part caught my interest:
> 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.
ckbkr10
> After 10 years of on-and-off work
That is truly honorable perseverance
axpy906
HN loves UO. Before this was MUDs on Telnet and the like. Text based but very fun.
rzzzt
Arglebargle, glop-glyf!?!
DonHopkins
Wow, I wonder if my favorite portal hole is unpatched?
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.
jesse_dot_id
Played in the UO beta with a CD I got out of a magazine or something. It began a period more than a decade of UO -> EverQuest -> WoW addiction. I sincerely believe that if I never discovered MMORPGs, I would be a billionaire lol
canadiantim
Sometimes i just put on the title music ("Stones") just for that hit of nostalgia
snickmy
sooo many memories.
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.
stackghost
Sphere 51a and 55i were the two dominant versions for a long time, alongside POL.
Then RunUO came out and took the emulator scene by storm
gverrilla
Nice work! But is there utility beyond the technical curiosity and challenge?
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!
shutterkiller
Posts like this are a great reminder that protocol archaeology is half software history, half debugging. The reconstruction work here sounds genuinely fun.
deadbabe
Is this better than a server emulator?
kev009
It's first party, so you get a look under the covers at how things were supposed to work. But the later server emulators are undoubtedly better by any realistic consideration, 1990s C code is not something you'd want to expose to the internet and any design decisions that made sense on era hardware and POSIX APIs are not really applicable once multicore and fast(er) storage became pedestrian.
shevy-java
Well, props for that effort.
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.)
mentos
Did you ever get into Ultima Online?
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.
Quote: If anyone out there has the dynamic0.mul or dynamic0.bkp (server savegames) or regions.txt (spawn definitions) or resbank.mul (resources definitions) files from the original Ultima Online servers, circa 1997-2003, I’d be very grateful if you could send them to me. It seems very unlikely that the original dynamic0.mul or dynamic0.bkp files are truly lost, since they were surely backed up in multiple safe places.
These files would be extremely valuable to produce a highly accurate reproduction of the Ultima Online world content.