Entwicklerblog | Umgang mit der Sichtweite

Entwicklerblog | Umgang mit der Sichtweite

Dieser Beitrag ist der erste in einer Reihe von Entwicklerblogs, die wir euch vor dem Erscheinen von NXT – unserem brandneuen RuneScape-Client – liefern werden.

Haltet in den kommenden Wochen nach weiteren Blogbeiträgen wie diesem und weiteren Neuigkeiten zu den Betawochenenden für den NXT-Client die Augen offen.

Lest weiter, um von Mod Philip mehr über die Herausforderungen zu erfahren, die das Team überwinden mussten, um euch die spektakulären NXT-Ausblicke liefern zu können.


Im neuen RuneScape-Client könnt ihr viel weiter in die Ferne blicken als im bisher bestehenden Java-basierten Client. Das heißt, dass wir Gielinor besser aussehen lassen können als je zuvor – aber das hat uns mit einigen Problemen konfrontiert, die wir erstmal lösen mussten. Als das Spiel ursprünglich entwickelt wurde, war nie vorgesehen, dass Spieler so weit sehen können. Dies führte zu einigen ,interessanten' Entscheidungen darüber, wo manche Dinge in der Spielwelt platziert wurden.

Die erste Hürde war, dass einige Plätze in der Spielwelt thematisch gesehen näher aussehen, als sie sollten. Das ist besonders bei Inseln wie Karamja der Fall, die nun so aussieht, als wäre sie nur eine kurze Schwimmstrecke und nicht eine lange Reise weit entfernt.

Karamja von einem nahen Ufer aus gesehen

Ich bin mir recht sicher, dass ich dort hinüber schwimmen könnte...

Für uns ist es sehr schwer, eine Insel wie Karamja nachträglich zu versetzen. Vieles im Spiel verweist direkt auf exakte Koordinaten auf der Insel und zwar auf eine Weise, die nicht leicht aufspürbar und veränderbar ist. Es wäre ein riesiger Aufwand, Orte wie diesen tatsächlich auf der Weltoberfläche zu verschieben, also haben wir uns eine andere Lösung einfallen lassen.

Als erstes haben wir die Insel unsichtbar gemacht, wenn man sich nicht auf ihr befindet (und den Rest der Welt versteckt, wenn man auf der Insel ist) und sie dann durch etwas anderes ersetzt.

Um das zu erreichen, haben wir verschiedene Gegenden in Kategorien eingeteilt. Das erlaubt uns, diese Gebiete ein- oder auszublenden, sodass sie füreinander sichtbar oder unsichtbar sind, und sie in Zukunft mit anderen Eigenschaften auszustatten.

Jede der unten dargestellten Farben repräsentiert eine Gegend – es gibt vermutlich mehr als ihr denkt!

Farbkarte der Gegenden
1. Unter der Weltoberfläche 4. RuneScape-Weltoberfläche
2. Verliese 5. Clanburgen
3. Kerkerkunde

Im zweiten Schritt haben wir die Kategorien der Gegenden verwendet, um ,Nachahmer'-Teile anstelle der Kartenstücke einzufügen, die wir entfernt haben. Wir können also ein Kartenstück bauen, das zum Beispiel nur etwas Meer beinhaltet, und es anstelle der nun unsichtbaren Insel einfügen. Egal wo ihr also seid, werdet ihr nur die Teile der Welt sehen, die ihr sehen sollt.

Wir haben diese Technik bisher nicht oft angewandt, um Inseln vom Festland zu verstecken (und umgekehrt), allerdings haben wir die Kategorien verwendet, um mit einem anderem Fall umzugehen, bei dem die erhöhte Sichtweite (engl. ,Draw Distance') dafür gesorgt hat, dass man Dinge sehen konnte, die man nicht sehen sollte.

Nicht instanziierte Verliese werden im selben Koordinatenraum abgebildet wie die RuneScape-Weltoberfläche, gemeinsam mit Vorlagen (engl. ,Templates'), die wir verwendet haben, um instanziierte Inhalte zu erzeugen (was bedeutet, dass sie kopiert wurden, damit verschiedene Spieler oder Spielergruppen in derselben Gegend spielen können, ohne einander im Weg zu sein oder sich gegenseitig zu sehen). Da wir nie dachten, dass wir jemals weit genug sehen könnten, dass dies zu Problemen führen würde, liegen viele dieser Verliese/Vorlagen sehr nah beieinander, was recht schrill aussehen kann, wenn man diese Ecken besucht.

Haua schaut bei Gevatter Tod vorbei

Nun ja, Haua ist tot...

Wir haben zuvor daran gearbeitet, diese Gegenden (oder zumindest viele davon) zu kategorisieren, damit sie auf der Weltkarte auf verschiedenen Kartenbildern angezeigt werden können. Wir konnten allerdings nicht einfach die Daten übernehmen und verwenden, um verschiedene Gebiete automatisch voreinander zu verstecken, da es viele Orte gibt, wo man in der Tat von einem zum anderen laufen kann, obwohl sie sich in verschiedenen Gegenden befinden. Es wäre ein Problem, wenn man nicht sehen könnte, wo man hingeht.

Beispiel eines kaputten Gebietsübergangs

Achtung, Abgrund!

Am sichersten war es für uns, Gebiete durch Programmierung davon abzuhalten, entsprechend definiert zu werden, wenn sie von Spielern oder NSC durchschritten werden können. Wir haben uns dann ein Programm geschrieben, das die Informationen über die Weltkarte (wie im Spiel angezeigt) nimmt und automatisch Bilder von Gegenden für Gebiete generiert, die man von ihnen aus sehen sollte, und zwischen ihnen unsichtbare Wände aufstellt, damit man sie nicht durchqueren kann.

Das klingt vielleicht etwas gefährlich... und das war es auch! Wir wussten bereits, dass es dabei Gebiete geben würde, bei denen zuvor passierbare Wege geteilt werden würden, aber wir haben noch viel mehr gefunden, als wir es ausprobiert haben.

Nach langem Hin und Her mit Mod Helen (die den Großteil der komplizierten Anpassung der Karten vorgenommen hat) konnte ich mit dem Programm eine Karte generieren, auf der die Wände in Magenta eingefärbt waren, damit wir leichter sehen konnten, wo dieser Ansatz schiefgegangen war.

So viele Wände...

So... viele... Wände...

Tage voller Anpassungen später waren die Verliese und Instanzvorlagen endlich voneinander getrennt (zumindest größtenteils). Es gab noch ein paar weitere Fehler bei der Veröffentlichung, bei denen Teile der Welt noch ungewollt geteilt waren, aber sie haben sich relativ leicht beheben lassen.

Ein anderer Fall, bei dem die Einführung der erhöhten Sichtweite Probleme verursacht hat, waren die Instanzen selbst. Wenn Instanzen einen Ort in der offenen Welt darstellen, werden sie normalerweise so gestaltet, dass man nicht nah genug an ihren Rand herankommt, um zu sehen, dass nichts dahinter liegt. Im neuen Client ist das nicht mehr der Fall.

Allerdings können wir um die Kanten herum etwas einfügen, um das zu verbergen. Bei instanziierten Inhalten wird die Welt aus dem aufgebaut, was der Server ihr diktiert, es ist also relativ einfach zu beeinflussen. Es gibt allerdings viele instanziierte Inhaltsstückchen auf der Weltoberfläche, also gibt es nicht viele Orte, an denen dieses Feature bisher zum Einsatz kam.

Es gibt auch Gebiete, von denen aus man bestimme Teile derselben Instanz nicht sehen sollte und umgekehrt: zum Beispiel beim Aquarium im Spielerhaus. Wir haben noch nichts implementiert, um diese Probleme zu lösen, aber mit den bereits erwähnten Techniken sollte es relativ leicht sein.

All diese Lösungen erfordern viel manuelle Arbeit: das Durchforsten des Spiels, das Aufspüren von Gebieten, die diese Eingriffe nötig haben und repariert werden müssen. Wir geben den größten und offensichtlichsten Orten dabei Priorität, aber es ist eine gewaltige Aufgabe. Wir werden eure Hilfe benötigen, sobald NXT in die Betaphase startet, um auch den Rest zu erwischen!

Als wir die Sichtweite hochgeschraubt haben, haben wir dabei auch die Distanz erhöht, in der wir andere Spieler an den Spielclient übertragen. Es war schließlich immer ein bisschen seltsam, dass manche Spieler und NSC plötzlich aus dem Nichts aufgetaucht sind, obwohl sie in der Nähe eures Charakters waren. Es war unterhaltsam, außer in einigen Spielerkampfsituationen, bei denen wir uns Sorgen um ,Balancing'-Probleme gemacht haben. Um das zu bekämpfen, haben wir bereits existierenden Code verwendet, der Zieranpassungen in potentiell problematischen Spielerkampfsituationen ausblendet und Spieler in derselben Distanz anzeigt, wie es auch im Java-Client der Fall wäre.

Sichtweite in der großen Markthalle

Sie sind überall!

Der Aufwand hat sich auf jeden Fall gelohnt. In Gielinor weiter als je zuvor blicken zu können ist ziemlich toll. Für mich bitte keinen Nebel mehr direkt neben der Kamera!

Mod Philip
Technischer Leiter

Zurück nach oben