Projektdetails | |
---|---|
Abschluss: | 2003 |
Umfang: | Prototyp |
Entwickler: | Thomas Hilbert |
Rahmen: | Hobbyprojekt |
Dauer: | 6 Monate (3. Anlauf) |
Plattform: | Windows (.NET) |
Als mein erstes "Großprojekt" war UOSharp eine wichtige Erfahrung auf meinem Weg in die Spieleentwicklung. Nicht einfach drauf los coden, sondern sich Gedanken machen, was man erreichen will, und noch vor der ersten Programmzeile den fertigen Bauplan im Kopf haben. Tatsächlich brauchte es nicht einen, sondern drei Anläufe, bis ein brauchbarer Gameserver daraus wurde. Neben Schule und Nebenjob flossen so etwa 2 Jahre in die Entwicklung von UOSharp, bis dann 2003 endlich ein präsentabler Stand erreicht war.
Der finale Server - bestehend aus dem hardgecodeten Core und einer Grundausstattung an Scripts - erlaubt den Betrieb eines eigenen "Ultima Online"-Gameservers. Eine freie Anzahl an Clients kann sich verbinden, Characters erzeugen und mit ihnen spielen.
UOSharp wurde komplett in C# entwickelt und nutzt viele der vorgefertigten .NET-Komponenten, wie z.B. den CSharpCodeProvider, mit dem UOSharp zur Laufzeit die C#-Scripts kompiliert und linkt.
Die zur Entwicklung nötigen Informationen über das Anwendungsprotokoll, den Aufbau der Spielwelt und detaillierte Spielregeln wie Kampfalgorithmen etc. fanden sich glücklicherweise größtenteils im Internet. Ebenfalls im Internet verfügbare Tools wie spezielle Packetlogger und Cracks für die (anscheinend bis heute nicht geknackte) Traffic-Encryption ermöglichten die Beschaffung der restlichen Information.
In Ultima Online werden alle Pakete per TCP/IP übertragen. Jedes Paket besteht dabei aus einem Command-Byte, welches die Funktion des Pakets definiert, und optional einer Paketlänge und Parametern. Pakete werden vor dem Versand nach Huffman kodiert, um Traffic einzusparen.
UOSharp's Core enthält die Basisklassen der zentralen Spielobjekte wie Character, Item und Skill. Alle darauf aufbauenden, spezialisierten Objekte existieren zwar ebenfalls als C#-Code, werden aber nicht fest in den Core mit einkompiliert, sondern liegen als C#-Quelldateien in einem Ordner bei der Anwendung. Beim Start der Anwendung wird der Ordner komplett durchsucht und alle gefundenen Dateien werden zur Laufzeit kompiliert und in die Anwendung eingelinkt. So ist eine komplette Trennung von Programmkern und Gameplay gegeben.