Hacker News new | ask | show | jobs
by nrb 2741 days ago
I owe my career to this game.

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.

9 comments

Same! Never used UOX but ran a few small private servers back in the day using SphereServer and eventually RunUO. While it didn't lead to any professional connections in my case, it was my first foray into programming.

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.

[1] https://www.youtube.com/watch?v=zyVTxGpEO30

>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.

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.

> we're stuck with WoW (and its clones), which was an excellent game in its own right, but it wasn't a true MMO

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

Let me tell you this, but.. WoW was the clone, it tried to copy already existings MMOs, the only reason WoW was sucessfull was because all the advertising it got

Asia (KR/JP) had already huge mmo games before WoW

That’s not completely fair... WoW was successful because it was outstandingly polished (no other game was even close at the time) and fun to play.
It also got a massive amount of early hype by being a Blizzard/Warcraft IP and not generic fantasy.

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.

I knew which video you were talking about after reading your first sentence hehe :)
It's interesting that you mention EQ in that statement. EQ was viewed as a direct rejection of the virtual world concept of UO. I only played it for 5-6 months so perhaps it changed over time.
> ... a fantasy world, persistent, vast, "real" (as in, internally consistent and fair), a world you can live in...

Incidentally, are you aware of the LitRPG genre in fantasy? It's pretty much that, in literary form.

I think a fair number of us owe our careers to UO; I'm in a similar boat to you, dabbled with UOX, POL, spent a good deal of time with Sphere (my first foray into 'large' C++ projects and, also my first real Linux exposure sshing into the servers to run `sphere &` when it inevitably crashed), and later with RunUO. It also is what made me learn data structures, in working with tools and programs to read/write (and distribute) changes to UO data files to create your server's own maps, art assets, etc.

(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.

Heh, this is funny... I worked on an emulator for Dark Age of Camelot _and_ an emulator for World of Warcraft (WCell) and attribute experience from both projects to getting my first software gig.

I also remember (fondly) going through RunUO with .NET Reflector to pick up tips and tricks. :)

I worked with runuo quite a lot and while I too have lots of fond memories, it's actually a huge mess of a codebase.

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 generally agree (object serialization was rough, and stop-the-word saves have been a constant issue for the entire life of the project) but the things it did well were done outstandingly better than POL, Sphere, UOX, Wolfpack, etc.

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.

It actually falls over around 1000 clients if they're actually playing and encountering one another at any regularity. I have been contributing to a new RunUO based shard (http://www.uooutlands.com) that has become extremely popular and hit 2k clients online. The lag was pretty extreme at first, but after a few weeks of studying CPU profiles I rewrote a lot of the map search algorithms, plus a few other things, and it's scaling easily now. I plan to push the rewrites upstream soon. The emulator still has legs!
My experience is from ~3000 online peak in the mid 2000s, with a more pure T2A ruleset.

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.

Congratulations on the launch! I’ve heard great things about Outlands and have been meaning to log in and check it out.

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'll get those patches out soon. Outlands generally is running much more complex AI with much faster response targets, so in conjunction with the far more detailed map it is stressing RunUO much harder than previous shards. But as noted the primary CPU consumer is definitely the map searching. My changes don't entirely change the algorithm (I've adjusted the sector size), but rather take advantage of more recent C# features that are much friendlier to the JIT and shift several allocations to the stack.

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!

Surprisingly similar for me, I even released my first piece of software on the runuo forms (maraks script creator haha).

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.

College isn't a requirement for a career in software... at least not in North America. Although I'm sure you know that by now.
I didn’t go to college either, never too late to make the transition if you want it.
I wish I never went to college. Giant waste of time and money.
FYI there has actually been several attempts to also rewrite the client from scratch. One is still active. See https://github.com/andreakarasho/classicuo. Pretty cool stuff.
I have a very similar story. I spent many many evenings in my teens learning to “script” with Taran’s Sphere Scripting For Dummies website and .chm file for the Sphere Server UO emulator.

Best part is I didn’t even realise I was programming. In my mind I was just making the game do what I wanted.

Me too! I bought a book about C# and read each chapter over and over until I understood what was going on, because I wanted to join work on a RunUO project. Which I did and it was my first experience with working on a team, using source control etc.
That’s cool. I think Minecraft mods did this for a younger gen as well.