Ultima Online auf OpenBSD spielen

Athaba

Libellenliebhaber
Hallo,

nachdem ich kürzlich um Hilfe gebeten wurde Ultima Online[1], ein altes, aber noch immer viel gespieltes MMORPG unter OpenBSD zum Laufen zu bekommen möchte ich hier eine Anleitung dazu aufschreiben. Ich werde es mir besonders einfach machen und den simpelsten Weg dokumentieren um das Spiel zu spielen. Dazu wird ein Freeshard[2] genutzt mit dem das besonders einfach geht. Das ist zwar auch mit anderen möglich, aber in diesem Fall ist es komplett ohne kopieren von Dateien von einer Windows oder Wine-Installation möglich. Mit anderen Freeshards funktioniert das ganz ähnlich, allerdings kommen die heute häufig mit einem eigenen Updater, in Form einer Windows-exe, die wir unter OpenBSD nicht zum Laufen bekommen.

Beginnen wir mit den Paket-Abhängigkeiten:
  • unzip - Zum extrahieren von ClassicUO und Ultima Online
  • fnaify - Zum Ausführen von ClassicUO
  • rsync - Für den Updater (serverspezifisch)

Zunächst einmal laden wir ClassicUO. Dabei handelt es sich um eine Re-Implementierung des Clients in C#. Eine Sache die dabei wichtig zu beachten ist, ist dass es hier auf der offiziellen Website einen Launcher gibt, den ihr NICHT verwenden wollt. Dieser ist Closed Source und nicht in C#, das heißt, dass ihr damit nichts anfangen könnt. Außerdem wollt ihr die bereits gebaute Version verwenden. Es gibt nämlich ein paar Abhängigkeiten, die derzeit nicht in den Ports sind. Diese findet ihr unter den GitHub Releases des Projekts. Da manche Releases nur Source Code enthalten einfach den letzten nutzen, wo es einen Build gibt. Derzeit ist das ein Dev Preview.

Dieses extrahieren wir in ein Verzeichnis unserer Wahl.

Als nächstes besorgen wir uns die Client-Dateien. Da diese für gewöhnlich modifiziert sind (für eine Maps, Items, Menüs, etc.) bekommt man diese von Server. Wie bereits erwähnt nehmen wir eine einfache Variante. Bei dem Server handelt es sich um Pergon. Dies ist ein deutschsprachiger Server, auf dem man eine sehr stark modifizierte Version von Ultima Online spielen kann. Wenn ihr also ein originales Ultima Online wünscht werdet ihr nicht glücklich werden. Dafür kommt der Client als zip-File und erlaubt das Updaten mittels Shell-Skript. Einfach den Client laden und entpackt ihn wieder in ein beliebiges Verzeichnis extrahieren.

Wie erwähnt kommt der Client praktischerweise mit einem Shell-Skript. Als Abhängigkeit hat es lediglich rsync. Wenn das installiert ist sollte es reichen ./aktuell.sh auszuführen und die Spiele-Dateien sind aktuell.

Auf diesem Server ist es außerdem nötig sich anzumelden. Dies ist nicht immer nötig, manche Server nutzen euren Login-Versuch einfach gleich zur Registrierung. Was ihr aber tun solltet ist euch die Regeln des jeweiligen Servers durchzulesen. Da es sich um Enthusiasten handelt gibt es mitunter einige Details die man wissen sollte. Dafür sind sie meist überschaubar, also nicht mit einer großen Wand aus Text, wie bei den Terms of Service zu einem kommerziellen Produkt zu vergleichen. Nehmt euch also die Zeit.

Nun zum Start des Clients. Wie erwähnt ist der Launcher von ClassicUO Closed Source. Es ist daher nötig ClassicUO ohne GUI die richtigen Parameter zu geben. Eine Liste aller Arguments findet man in ihrem Wiki. Relevant sind den meisten Fällen drei davon, nämlich der Pfad zum Ultima Online Verzeichnis (-uopath), die IP-Adresse (-ip) und der Port (-port). Während der Pfad zum UO-Verzeichnis wahrscheinlich klar ist, ist das bei IP und Port womöglich nicht. Hier gibt es zwei Orte an denen ihr fündig werden könnt. Im Fall von Pergon gibt es wie bei der Nutzung des originalen Ultima Online Clients eine Datei login.cfg. In dieser findet ihr eine Zeile die so aussieht: LoginServer=202.61.227.207,3000 Wie ihr euch wohl denken könnt handelt es sich bei 202.61.227.207 um die IP-Adresse und 3000 den Port. ClassicUO ist in diesem Fall also mit fnaify Classicuo -uopath /pfad/zu/pergon -ip 202.61.227.207 -port 3000 auszuführen. Dann sollte sich Ultima Online öffnen und sofern ihr die Anmeldung bereits abgeschlossen habt losspielen können.

Um das Ganze einfacher zu machen, hier nochmal als in Form eines Command-Listings:
Code:
# Installation der Abhängigkeiten
pkg_add unzip fnaify rsync

# Download von ClassicUO
ftp https://github.com/ClassicUO/ClassicUO/releases/download/ClassicUO-dev-release/ClassicUO-dev-release.zip

# Download des Pergon-Clients
ftp https://welt-pergon.de/downloads/UO.zip

# Extrahieren des Clients
unzip UO.zip

# Updaten des Clients
cd pergon
./aktuell.sh
cd ..

# Extrahieren von ClassicUO
mkdir classicuo
cd classicuo
unzip ../ClassicUO-dev-release.zip

# Starten des Clients
fnaify Classicuo -uopath ../pergon -ip 202.61.227.207 -port 3000

Viel Spaß!



Ein paar abschließende Worte und Ergänzungen:

Pergon war wie gesagt nur ein Beispiel. Dieser Server ist stark modifiziert und legt durchaus Wert auf Rollenspiel, auch wenn das keine Pflicht ist, wie auf manchen Servern. Es ist ein sehr kleiner Shard und die deutsprachige Community ist limitiert, existiert aber definitiv. Leider ist es üblich, dass Freeshards eigene Updater bauen, die das ganze Spiel laden. Das klappt zwar unter FreeBSD und Linux mittels wine, aber wenn der Shard nicht zusätzlich auch noch den ganzen Client anbietet kann das mühsam sein. Hier müsste man zum Beispiel eine existierende Installation kopieren. Wenn ihr wissen wollt mit welchen Parametern ClassicUO gestartet wird könnt ihr das neben einem "ps" auch aus der Config herausfinden. Unter Linux findet ihr die in .config/ClassicUOLauncher/launcher_settings.xml.

Eine Liste von Freeshards gibt es hier.


International gibt es Freeshards, auf denen rund um die Uhr tausenden von Spielern online sind. Einer der größten derartigen Server ist UO Outlands. Leider verwendet der aber sowohl einen Server, als auch eine modifizierte Version von ClassicUO, was das Spielen unter OpenBSD nicht so einfach macht und weshalb selbst auf Linux zu Wine gegriffen wird.

Es gibt für Ultima Online Freeshards einige 3rd Party-Programme. Eines davon ist Razor. Das habe ich unter OpenBSD noch nicht probiert, aber es gibt eine Version davon, die Community Edition, die zumindest unter Linux mit ClassicUO läuft. Wenn ich das mal teste reiche ich entsprechend nach.

Leider bekomme ich ClassicUO unter OpenBSD derzeit manuell nicht gebaut. Es gibt ein paar Abhängigkeiten die fehlen, also wenn jemand mit mehr C# (und vor allem deren Ecosystem) Erfahrung hat und Lust hat sich das anzusehen wäre es sicher spannend einen Port zu machen. Des weiteren wäre es wohl möglich eine Art Launcher nachzubauen. Immerhin macht der nicht viel mehr als Konfigurationen mit den Command Line Arguments zu verwalten und entsprechend zu starten.

Ich fände es prima, wenn es interessierte gibt und vielleicht noch ein paar Beispiel-Konfigurationen für andere Server bauen könnten. Auch wäre das alles sicher unter FreeBSD spannend. Hier gibt es zwar den Fallback mit wine, aber wäre sicher nett wenn das eigenständig funktioniert. Läuft fnaify auch unter FreeBSD?

Falls jemand sonst noch fragen hat die damit irgendwie im Zusammenhang stehen einfach fragen. Ich spiele zwar selbst schon länger nicht mehr, finde das Spiel und die Community aber großartig.

Zum Thema Server. Es gibt wie erwähnt eine ganze Reihe an Implementierungen der Serverseite. Die wohl derzeit verbreitetsten sind RunUO und ServUO (C#/mono), aber es gibt auch Implementierung in C/C++ wie POLServer, UOX3, welches interssantererweise schon sehr lange bevor das hipp war mit Spidermonkey von Mozilla auf JavaScript fürs Skripten gesetzt hat und diverse andere. Ich habe mich nicht groß dran versucht, aber auch hier hatte ich mit dem Bauen Probleme. Wie gesagt, mit C# und Mono hab ich nicht viel am Hut, also vielleicht eh ganz trivial.

Wer lieber C++ hat könnte sich CrossUO als Client-Reimplementierung ansehen. Ich habe versucht das zu bauen, aber bin an meinen cmake-Kenntnissen gescheitert. Ironischerweise ist das Problem am Ende wohl LibreSSL. So wie ich das verstehe nutzt das Projekt LibreSSL und eine (modifizierte?) Version von libcurl als Abhängigkeit und ich hab das Projekt nicht davon wegbekommen bzw. es geschafft es damit zu bauen. Ist zwar nicht das Einzige, aber vieles hat sich recht einfach hinbiegen lassen.

Vor allem, wenn ihr ganz neu, aber interessiert seid würde ich das Subreddit oder YouTube empfehlen.

Oh wenn es Interesse gibt würde ich das weiter ausbauen und ins Wiki stellen.



[1] Ganz kurz: Open World, keine Instanzen, keine Level sondern Skills die man durch Verwendung verbesser, Open World komplett Custom Player Housing, PvE, PvP (je nach shard full loot und überall außerhalb von Städten). Im Unterschied zu vielen anderen MMORPGs haben Gegenstände in der Welt meist Sinn. Ein Beispiel: Man kann ein Schaf schären, die Wollte bei einem Webstuhl weben, sie mit einem Farbtopf färben, daraus Kleidung machen, oder aber zu Bandagen schneiden, auch Kleidung einfach zu Bandagen zerkleinern. Man kann von Anfang an überall hinlaufen, es gibt (auf den meisten Servern) keine bis garkeine Quests, und keinen Storystrang den man folgt und doch immer was zu tun. Je nach Server gibt es welche wo es Rollenspielpflicht gibt (teilweise sogar mit Pflicht des Einreichens einer zu genehmigenden Hintergrundgeschichte) über PvE-Server, PvP und Funserver. Teilweise mit stark modifizierten oder neuen Skills, keinen Rassen oder vielen, eigenen Rassen, manche mit Klassen, meist ohne und manche mit Charakter-Leveln statt Skills. Manche sogar mit Science Fiction Elementen.

[2] Anmerkung dazu: Bei Ultima Online ist es nicht so, dass irgendwo Code geleaked oder gestohlen wurde, sondern dass das Spiel seit frühen Zeiten Reverse Engineered wurde, sowohl der Server als auch der hier benutzt Client Open Source sind und bis auf ein paar Datenfiles, die auch modifiziert oder von Grund auf selbst erstellt wurden nichts mehr von Original genutzt wird. Seht es also als Engine-Reimplementierung, aber mit vielen Modifikationen. Auch der ursprüngliche Autor von Ultima Online, so wie der Ultima-Serie Richard Garriott hat in Interviews erwähnt selbst ab und an auf Freeshards zu spielen.

Oh und noch ein Funfact: Der Begriff Shard und damit auch der IT-Begriff Sharding kommen von diesem Spiel. Als die drauf gekommen sind dass mehr als ein Vielfaches der größten MMOs nicht groß genug ist haben die eine Story erfunden, warum es jetzt mehr als einen Server gibt und ins für heutige Standards eher witzige Intro-Video gepackt.
 
Zuletzt bearbeitet:

Athaba

Libellenliebhaber
Wie Versprochen ein Update zu Razor (das ist ein Tool für Makros und sehr viele andere Dinge, das mit dem Client interagiert, also auch Anzeigen ändert, etc.). Das klappt recht einfach. Zunächst wie erwähnt die Community Edition laden (ich habe die 64bit-Version genutzt). Dann muss das nach classicuo/Data/Plugins/razor (einfach mit mkdir -p erstellen, es gibt standardmäßig die Verzeichnisse Plugins und razor nicht) extrahiert werden. Wenn man dann noch ein -plugins razor/Razor.exe als Argument dranhängt klappt das auch. Plugins werden also relativ zum Data/Plugins-Verzeichnis geladen.
 

Esjott

Kellerkind
Hachja, UO ist ja schon ewig her... Hatte damals nur auf einem freeshard gespielt, hat aber immer Laune gemacht :) Richtiger Zeitverbrenner ;)
 

midnight

OpenBSD & FreeBSD
Ohja UO auf Drachenfels. Das waren noch Zeiten mit der Einwahl per Modem. Damals gab es nur Felucca und noch kein weichgespueltes Trammel ohne PVP und man wurde als Anfaenger direkt nach dem ersten Einloggen von anderen Spielern gekillt. :-) Sind jedenfalls schoene Erinnerungen. Vielleicht schaue ich mir das mal wieder unter OpenBSD oder FreeBSD an.
 

Athaba

Libellenliebhaber
Hehe, genau solche Erinnerungen und Nostalgie haben mich dazu animiert. Spiele zwar kein UO mehr, aber habe mir lange genug gedacht, dass mit Open Source Clients und Servern das eigentlich überall laufen sollte und nachdem ich mitbekommen habe, dass das scheinbar auch Leute neu beginnen hat es mich gereizt das mal zu probieren. Hat nur ein wenig gedauert was zu finden, mit dem man leicht installieren kann, nachdem viele Shards ihre Exe-Launcher bauen. Über UO-Hub dann auf Pergon gestoßen und war ein wenig begeistert, dass die einfach ein Shell-Skript fürs Update haben. Habe dort anno dazumal sogar gespielt. Ziemlich customized, mit eigenen Systemen. Kann mich grau erinnern, dass es da ganz regen Handel zwischen Ackerbauern und Nekromanten gab. Aber schon lange her.

Jetzt macht mir aber das Basteln eigentlich mehr Spaß. Wenn ich mehr Zeit hab spiel ich vielleicht auch mal wieder. Spätestens dann irgendwann in der Pension. ;)
 
Oben