The documentation surrounding UA/UO for Linux is out of date, so here is how to get it up and running. I’ll be using the TazUO client, which provides a very nice grid-based inventory. I’ll be running the server and client on the same computer, but it’s easy to do it separately.
Install mono, a framework that lets you run .NET software on Linux.
arch: # pacman -S mono
debian: # apt install mono-devel
Download the latest release of the Ultima Adventures server. For me it’s Ultima-Adventures-Server.zip.
$ wget https://github.com/FinalTwist/Ultima-Adventures/releases/download/v2.10/Ultima-Adventures-Server.zip
$ unzip Ultima-Adventures-Server.zip
In the ./Ultima-Adventures/Server directory, compile a new server binary. This worked for me on Arch Linux and Debian:
$ cd Ultima-Adventures/Server
$ find Server -name "*.cs" | xargs mcs -optimize+ -unsafe -t:exe -out:Adventures-Server.exe -win32icon:Server/runuo.ico -nowarn:219,414 -d:NEWTIMERS -d:NEWPARENT -d:MONO -reference:System.Drawing
I got these warnings. This will output the file Adventures-Server.exe.
Server/EventSink.cs(629,65): warning CS0618: `System.TimeZone' is obsolete: `System.TimeZone has been deprecated. Please investigate the use of System.TimeZoneInfo instead.'
Server/Network/Packets.cs(4419,61): warning CS0618: `System.TimeZone' is obsolete: `System.TimeZone has been deprecated. Please investigate the use of System.TimeZoneInfo instead.'
Server/EventSink.cs(626,33): warning CS0618: `System.TimeZone' is obsolete: `System.TimeZone has been deprecated. Please investigate the use of System.TimeZoneInfo instead.'
Server/TileMatrixPatch.cs(109,34): warning CS0618: `System.IO.FileStream.Handle' is obsolete: `Use SafeFileHandle instead'
Server/TileMatrixPatch.cs(179,35): warning CS0618: `System.IO.FileStream.Handle' is obsolete: `Use SafeFileHandle instead'
Server/TileMatrix.cs(445,36): warning CS0618: `System.IO.FileStream.Handle' is obsolete: `Use SafeFileHandle instead'
Server/TileMatrix.cs(524,31): warning CS0618: `System.IO.FileStream.Handle' is obsolete: `Use SafeFileHandle instead'
Compilation succeeded - 7 warning(s)
Run the server with $ mono Adventures-Server.exe
A short Linux help file in the Documentation directory says to edit Ultima-Adventures/Server/Scripts/MyServerSettings.cs
and change return @"C:\Ultima-Adventures\Files";
to return @"./Files";
. In my case, this was already set.
I’m using the latest TazUO (TazUO.3.24.1.0.zip) but we need the “Data Files” directory from Ultima-Adventures-Client.zip. To be clear UA ships with multiple preconfigured Windows clients, but TazUO has a native Linux binary so I’m using that instead. TazUO ships with Linux binaries, but the documentation says to use mono
to run the Windows executable. I’m not sure why. I’ve used the Linux binary and it seems fine. I’m not sure what the upsides/downsides of each method are.
Download the latest TazUO and Ultima-Adventures-Client.zip. Unzip TazUO to ./tazuo
$ wget https://github.com/FinalTwist/Ultima-Adventures/releases/download/v2.10/Ultima-Adventures-Client.zip
$ wget https://github.com/jsebold666/TazUO/releases/download/v3.24.1/TazUO.3.24.1.0.zip
$ unzip TazUO.3.24.1.0.zip -d tazuo/
Unzip the Data Files
directory from the UA client zip to the tazuo
directory:
$ unzip -j Ultima-Adventures-Client.zip "Ultima-Adventures/Client/Data Files/*" -d "tazuo/Data Files"
Make the client binary executable
$ cd tazuo
$ chmod +x ClassicUO.bin.x86_64
Run the file with ./ClassicUO.bin.x86_64
. You’ll get the error “Make sure your settings.json file is correctly filled out, could not find the UO directory.” This creates the a default settings.json
. Click OK.
Edit settings.json
to include the server IP, port, UO directory, and client version. The ultimaonlinedirectory
should be set to the tazuo/Data Files
directory. Obviously if you’re running on a remote server, set the IP to the remote server, or use 74.91.120.104 for the online UA server.
"ip": "127.0.0.1",
"port": 2593,
"ultimaonlinedirectory": "/home/USERNAME/tazuo/Data Files",
"profilespath": "",
"clientversion": "7.0.15.1",
Then run the client with ./ClassicUO.bin.x86_64
and it should work!
When launching the game you’ll get an error that it can’t find the UO Razor plugin. If you want this:
Unzip the Client/Assistants directory from Ultima-Adventures-Client.zip to tazuo/Data/Plugins/Assistant
$ mkdir tazuo/Data/Plugins/Assistant
$ unzip -j Ultima-Adventures-Client.zip "Ultima-Adventures/Client/Assistants/*" -d "tazuo/Data/Plugins/Assistant"
A language file seems like it’s in the wrong place. Move it to the Language directory. Otherwise you’ll get an error like Razor_lang.enu isn’t in the right folder.
$ cp tazuo/Data/Plugins/Assistant/Razor_lang.enu tazuo/Data/Plugins/Assistant/Language
The first time I launched the client with UO Razor installed, an error message about how it was using the default profile appeared behind the splash screen. I had to Alt-Tab and X-out of the error message from the Alt-Tab screen in KDE. I saved a new profile and this didn’t happen again.
I tested a few features of UO Razor and they seemed to work. I am not experienced with UO clients though.
Note, you might have to name the file Adventures-Server.exe. If I run the mcs command and output linuxserver.exe instead, I get this error when running it:
System.IO.FileNotFoundException: Could not load file or assembly 'Adventures-Server, Version=2.7.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies.
File name: 'Adventures-Server, Version=2.7.0.0, Culture=neutral, PublicKeyToken=null'
This exception is fatal, press return to exit
If I run the mcs
command and output Adventures-Server.exe, then rename it, I don’t seem to get any error. I did not care enough to troubleshoot this.
If your compilation fails with a lot of errors like this, you’re probably in the wrong directory:
...
Server/Scripts/Server Functions/Context Menus/EatEntry.cs(9,11): error CS0246: The type or namespace name `Food' could not be found. Are you missing an assembly reference?
Server/Scripts/Server Functions/Context Menus/EatEntry.cs(11,33): error CS0246: The type or namespace name `Food' could not be found. Are you missing an assembly reference?
Compilation failed: 3075 error(s), 8 warnings
When you extract the .zip you’ll have ./Ultima-Adventures/Server
and ./Ultima-Adventures/Server/Server
. Make sure you’re running the command from ./Ultima-Adventures/Server
, not just ./Ultima-Adventures
I get this error on my Debian server about a problematic werewolf in the Saves directory. I haven’t been able to figure out the cause. I tried using the latest stable mono (6.12.0.200) and compiling mono from source (6.13), deleting everything, and starting over each time, but I hit the same issue each time so I don’t think it’s a mono issue. I fiddled with this for a while before giving up. This was an BeeLink SER6 computer. I ran through the same install on a random Debian VPS and it worked without issue.
+ Server Functions/Player Commands/Loot.cs:
CS0649: Line 65: Field `Server.Misc.LootChoiceUpdates.InternalTarget.m_Origin' is never assigned to, and will always have its default value `0'
Scripts: Skipping VB.NET Scripts...done (use -vb to enable)
Scripts: Verifying...done (8269 items, 1881 mobiles) (0.74 seconds)
ACC Registered: Server.ACC.CM.CentralMemory
Loading convo fragments... Done.
Regions: Loading...done
World: Loading...An error was encountered while loading a saved object
- Type: Server.Mobiles.Werewolf
- Serial: 0x0003629C
Delete the object? (y/n)
After pressing return an exception will be thrown and the server will terminate.
Error:
System.Exception: Load failed (items=False, mobiles=True, guilds=False, type=Server.Mobiles.Werewolf, serial=0x0003629C) ---> System.Exception: ***** Bad serialize on Server.Mobiles.Werewolf *****
at Server.World.Load () [0x004a3] in <b09f157439c048a78971cd5c55f1a131>:0
--- End of inner exception stack trace ---
at Server.World.Load () [0x008f9] in <b09f157439c048a78971cd5c55f1a131>:0
at Server.Core.Main (System.String[] args) [0x0046b] in <b09f157439c048a78971cd5c55f1a131>:0
This exception is fatal, press return to exit
Alternative just press y, delete that werewolf, and go on with your life. I don’t know if there are any other consequences to this. One player running a Debian server on the UA Discord just said to delete it and rerun the sever. Someone else said the server will probably crash when a werewolf appears, so maybe don’t do that. I just switched to a different server that didn’t have the issue.
You might see the file says to just use LinuxServer.exe. As of v2.10, it looks like this was no longer shipping with the Ultima Adventures releases, so just compile it yourself via the above.