Ultima Online in its early iterations was truly a magical game and helped to define a lot of the core design patterns of MMORPGs. The lead designer of UO, Raph Koster, has a lot of great insight when it comes to game design. I recommend his 2014 GDC talk, "Practical Creativity" [1], even to developers who are not interested in game development.
This is absolute magic to me. Wow. It sounds like an absolute dream. It is my opinion that the possibilities of a shared, persistent, virtual world were never fully realised. The description you make: of a fantasy world, persistent, vast, "real" (as in, internally consistent and fair), a world you can live in... modern MMOs offer absolutely none of that. It's a shame.
It speaks volumes that probably the best realisations of the MMO were... Ultima Online, Star Wars Galaxies, maybe Everquest? Maybe even some primitive MUDs and, oddly enough, a couple Minecraft servers. Instead we're stuck with WoW (and its clones), which was an excellent game in its own right, but it wasn't a true MMO in the sense above described.
because most companies didn't realize what they were copying when they copied WoW.
True MMO - aka, a sandbox game. See this very indepth critique, if you want more about this topic https://www.youtube.com/watch?v=nvK8fua6O64
Asia (KR/JP) had already huge mmo games before WoW
All of the buzz surrounding it prior to launch was about being able to play as characters from the Warcraft universe, not that it was a polished MMO.
The IP got people to sign up, the polish made them stick around.
Incidentally, are you aware of the LitRPG genre in fantasy? It's pretty much that, in literary form.
(Or, as I used it for, replacing the tree art assets to be smaller, making it easier to see through the 2D isometric trees.)
My favorite tidbit about UO is around the technical term 'shard'. It comes from lore from Ultima I, where the wizard fractures the gem that contains the world into shards, and each shard contains a copy of the world. Ultima Online needed a word to describe multiple servers, they picked a term from the lore.. and now 20 years onward, we talk about database sharding.
I also remember (fondly) going through RunUO with .NET Reflector to pick up tips and tricks. :)
It's object-oriented except when it's not. It's modular except where it isn't. It "optimizes" for $number_of_cores_on_your_box but doesn't actually use them for anything but world saves. Almost none of it is commented or documented (doxygen doesn't count as documentation).
I think runuo excelled not because it was significantly better but because it was less shitty than POL and Sphere that came before it.
I think the killer feature of RunUO was that it compiled the C# “script” files and linked them at runtime, eliminating the need to attach a scripting language that provides some limited API. It led to some extremely messy code, but it allowed you to achieve anything you wanted with minimum fuss, using the base .NET APIs that were well-documented. And the community was huge and active by UO emu standards.
It doesn’t fall over with 5000+ clients connected to a single server, which is pretty astounding considering it’s TCP based and players tended to clump up pretty majorly during in-game events and such.
Outlands has a breathtaking number of additional systems and enhancements that I’m sure are exposing weak points in the architecture (timers, pathfinding, and distance checking stuff especially).
Amazing shard btw, I logged some hours the week of launch before I got busy over the holidays.
It’s been a long time since I was involved in the RunUO community, but as I recall, one of the biggest limiting factors on scalability was activated NPC/AI. Range queries and movement were the two big pieces, so I’m sure your improvements would have a big impact there.
We ran load tests on Hybrid with over 10k clients (not just idle, mind you, but moving and talking and whatever else we were able to throw in to the load generators), and the server was able to keep up just fine. That was on mid-2000 era hardware too, but then again, RunUO wasn’t built to really take full advantage of multiple cores.
There are a lot of things I’d do differently if I had the opportunity to go back and redesign it from the ground up, but the simple single-threaded concurrency model is not something I’d want to change without great care. For all the scalability problems RunUO had, I think the concurrency model contributed significantly to its approachability, and I’d be very cautious of making any changes which would complect game logic with concurrency control.
I’ve heard quite a few stories (and now I’m hearing a few more) of folks whose path into software development started by tinkering around with RunUO. In fact, a few of my closest friends (and some now colleagues) took that same path. I am filled with a weird mix of pride and abject humility whenever I have the opportunity to see how the project has touched people all over the world, often in ways I could never have anticipated.
Please do share your changes back. I’d love to take a look at them, even after so many years.
-krrios
I'd also like to move away from timers for mobiles and simply call a function on a subset of them (sector by sector) each tick. This is advantageous because it groups all of the processing for a set of nearby mobiles in game space together in time, so it should greatly improve the CPU cache hit rate during the map searches. That would also require moving RunUO to a constant tick rate, which I also have patches for.
If anything, my changes have made RunUO more single threaded (and eliminated some locks in doing so). This has proven to be faster than some of the previously highly parallel code because the contention was so bad. That's not to say that it couldn't be done in a way that did scale well, but I agree with you that it would put the code out of reach of hobbyists entirely. I think the code today strikes the right balance of approachability and performance. Thanks for all of your effort on this project!
Never translated to working in software (couldn't afford college lol), but it did leave me with a hobbie I still do today, and love.
Best part is I didn’t even realise I was programming. In my mind I was just making the game do what I wanted.
I was totally obsessed with UO from the moment I logged in for the first time and created my character, a crafter who was primarily a miner/blacksmith.
That’s the thing about UO... nobody was the hero, everyone was just trying to survive and thrive in their own way; whether that meant crawling the dungeons as a warrior, bard, tamed, or caster; terrorizing those same dungeons as a player-killer out to strip the dungeon crawlers of all their loot and gear; or, spending your days baking bread or running your own player shopping mall, your only limitation was your effort and imagination. The idea that you could stake out your own small part of this vibrant world, right down to building a house in the limited land space available; or making your name as an accomplished crafter who people sought out for their superior crafted equipment, it was so fascinating to me.
After a few years I found out about a project called the Ultima Offline eXperiment, they were working on a server emulator that would let you run your own worlds, with your own rules! (Their scripting engine was JavaScript, running on the server... 19 years ago) As a teenager with no prior software experience, this was incredible to me. I scoured the internet for anything I could find to learn C++ and JavaScript and started screwing around with the emulator. It was slow going at first, given the somewhat limited resources available on the internet at the time, but I stuck with it and from that point on I knew exactly what I wanted to spend my life doing. After that I moved to would become the de-facto emulator for nearly 2 decades, RunUO. Through that community I found contract work on projects that were unrelated to UO, and from that experience transitioned to a full-time career in software about 10 years ago.
This game was hugely important to me and who I became because of it, and it makes me so happy that stories about UO pop up every few years as a reminder of that.