Klaninsel

Wochenrückblick: Rotieren von Schematics, Alpen-Skin für Klans

Wochenrückblick27. Feb. 2022

Alpenwelt für Klans

In dieser Woche hat das Bauteam den alpinen Skin für Klans auf Vordermann gebracht. Die Herausforderung bestand darin, dass wir bei der Erstellung noch nicht wussten, welche Größenverhältnisse wir am Ende brauchen. Damit jede Mittelinsel Platz für einen Weg um den zentralen Bauplatz hat, musste die gesamte Map nochmal neu aufgebrochen und in jede Richtung um 20 Block erweitert werden, ohne dass irgendwelche Lücken auffallen.

Durch Klanskins könnt ihr die Umgebung eurer Klanwelt bestimmen. Doch beeinflusst dies auch die Umgebung beim Klankrieg, welcher auf ganz unterschiedlichen Karten stattfindet. Damit dies möglich ist, wird die Basis beim Krieg in einer Schematic gespeichert und die Welt wird dabei aus der Spielfläche, den Basen und den Skins zusammengesetzt.

Schematics

Rotiert man nur die Position und nicht auch die Blöcke selbst, zeigen Treppen und Co. anschließend in die falsche Richtung.Bei unseren Klankriegen stehen sich beide Klans gegenüber. Da aber alle Klans ihre Klaninseln in dieselbe Richtung aufbauen, würden sie ohne Rotation voneinander wegschauen.

Rotiert man nur die Position und nicht auch die Blöcke selbst, zeigen Treppen und Co. anschließend in die falsche Richtung.

Wir speichern den bebauten Bereich von Klaninseln in unserem eigenen Schematic-Format und nicht z. B. im MCEdit- oder Sponge-Format (die Beide in WorldEdit genutzt werden könnten), weil wir so einfach Erweiterungen vornehmen können und auf unseren Servern so nicht von WordEdit abhängig sind.

Das bedeutet aber auch, dass wir solche Transformationen selbst umsetzen müssen. Eine dieser Transformationen ist die Rotation, die wir in dieser Woche implementiert haben.

Bei der Rotation gibt es in Minecraft im Grunde genommen zwei verschiedene Aspekte. Einerseits müssen die Blöcke und Entitäten relativ zum Zentrum "verschoben" werden. Dann gibt es aber noch zu beachten, dass eine Vielzahl der Blöcke auch irgendeine Form von Ausrichtung hat. Treppen, Hebel, Mauern, Falltüren, Holzstämme, Stufen, Banner, Köpfe und viele, viele weitere.

Diese Blöcke müssen also darüber hinaus auch noch "in sich" gedreht werden, um mit der neuen Ausrichtung übereinzustimmen. Beachtet man dies nicht, verändert sich der Inhalt durch die Rotation optisch (siehe Bild 1).

Wir können Schematics nun über alle Achsen in 90° Schritten rotieren. So ist es zum Beispiel auch möglich, eine Struktur auf den Kopf zu stellen. Feinere Schritte als 90° sind nicht ohne Interpolation (also praktisch die näherungsweise Ermittlung von unbekannten Werten) möglich, weil sich die Blöcke dann nicht mehr sauber in das Blockraster einfügen würden. Wir müssten also gewissermaßen "vermuten", welcher Block den Platz einnehmen soll.

Neben den Skins im Hintergrund der beiden Seiten, müssen auch die Klanbasen selbst rotiert werden, damit sie sich gegenüberstehen.

Bei der Klankriegskarte können wir dann die Basis eines Klans einfach ohne Veränderung einfügen, die andere Basis müssen wir um 180° rotieren. Das ist Teil des dynamischen Ladens der Klankriegsserver.

Wir initialisieren die Welt anhand von Metadaten, die dem Server als Teil des Matchmaking-Prozesses zugewiesen werden, und stellen die Karte dann so zusammen.

Begonnen wird mit der grundsätzlichen Karte (die das Spielfeld bestimmt). Darüber werden dann die Klanskins in den jeweiligen Seiten eingefügt (die ggf. auch um 180° rotiert werden müssen) und zuletzt werden die Schematics der teilnehmenden Klans geladen und in den Plattformen eingefügt. Anschließend kann der Klankrieg losgehen!

Ausblick

Stück für Stück fügen sich immer mehr Elemente des Klankriegs zusammen und die Zeit des ausgiebigen Testens rückt immer näher! Dann wäre endlich das letzte große Feature so weit und wir können uns ans Balancing und den Feinschliff machen, was quasi einer letzten internen Beta vor dem Release entspricht. Noch steht uns also einiges an Arbeit bevor, doch wir werden euch wie immer per Discord, Instagram und Twitter auf dem Laufenden halten!