Plagiator
Plagiator ist ein von ultimate geschriebener Kartengenerator. Seit dem <tbd> ist er in Karopapier eingebunden.
Der Generator ist kein "normaler" Generator in dem Sinne, dass er eine Strecke "aus dem Nichts" erzeugt. Stattdessen erzeugt er Karten durch "Plagiieren", d.h. Transformieren und leichtes Verändern, existierender Karten. Zur Verfügung stehen die Transformationen Skalierung (unabhängig in X- und Y-Richtung, einschließlich Spiegeln) sowie Rotation. Zu den leichten Veränderungen zählen Start und Ziel tauschen und Trimmen. Bei einer Skalierung kann zudem zwischen zwei Algorithmen gewählt werden.
Inhaltsverzeichnis
Funktionsweise
Der Plagiator arbeitet nach der folgenden Funktionsweise:
- Laden des Karten-Codes aus der Karodatenbank
- (optional) Tauschen von Start und Ziel
- Erzeugen einer 3x3 Transformations-Matrix aus den Parametern Größe X, Größe Y und Rotation
- Kompensation des ggf. durch Rotation entstehenden Offsets
- Berechnung der Inversen Matrix
- Karoweise transformation der Karte anhand des entsprechenden Skalierungsalgorithmus
- (optional) Trimmen der Karte
Parameter
Plagiator kann durch folgende Parameter beeinflusst werden:
- Karte - MID der zu plagiierenden/transformierenden Karte. Hinweis: aus offensichtlichen Gründen können keine Nachtkarten transformiert werden.
- Größe X & Größe Y - Skalierungsfaktor in der jeweiligen Richtung; Faktoren mit |scale| > 1 vergrößern die Karte; Faktoren mit |scale| < 1 verkleinern sie; negativen Faktoren spiegeln die Karte entlang der entsprechenden Achse; 0 ist nicht erlaubt
- Rotation - Drehung der Karte im Uhrzeigersinn in Grad; es sind beliebige Winkel zulässig, für die bessere Bedienbarkeit sind im Frontend jedoch Winkel die Vielfache von 45° sind mit Tickmarks leichter anwählbar
- Skalierungsmodus - zur Auswahl stehen zwei Modi: ultimate und nearestneighbor. Details dazu unter Skalierungsalgorithmen
- Start und Ziel tauschen - ist dieses Flag gesetzt werden alle Startfelder durch Zielfelder ausgetauscht und umgekehrt. Hinweis: dadurch ändert sich ggf. die Anzahl der Startplätze
- Trimmen - normalerweise werden Eckbereiche, die bei der Rotation entstehend durch fortsetzen des Geländes aufgefüllt. Möchte man dies nicht, kann man die Karte trimmen lassen. Die Karte wird dann soweit verkleinert, dass nur noch ein 1-Karo-breiter, nicht-befahrbarer Rand um die Strecke übrig bleibt (ggf. kann dies auch Karten ohne Rotation kleiner machen, wenn diese mehr Rand haben)
Skalierungsalgorithmen
Die Herausforderung beim Skalieren von Karten besteht darin sicherzustellen, dass das Ergebnis einerseits optisch ansprechend, aber trotzdem auch spannend zu fahren ist. Dazu habe ich (ultimate) ein bisschen rumprobiert und zwei unterschiedliche Algorithmen implementiert, die man enstprechend auswählen kann:
nearestneighbor
ultimate
Trivia
- der Plagiator arbeitet 100% deterministisch, d.h. es ist kein Zufall im Spiel und bei gleichen Parameter kommt auch immer das gleiche Ergebnis raus
- aufgrund des deterministischen Verhaltens können mit dem Plagiator keine Nachtkarten erzeugt werden (man könnte sonst schummeln). Um dennoch zufällige (Nacht)-Karten fahren zu können,
- es kann sein, dass bestimmte Parameterkombinationen zu nicht fahrbaren Karten führen - Ursachen für nicht fahrbare Karten können sein:
- Verkleinerung oder Rotation macht Strecke unpassierbar (ggf. abhängig vom Skalierungsalgorithmus)
- Tausch von Start und Ziel macht Route für einige Spieler unpassierbar (z.B. weil es dekorative Ziele gibt, die dann zu nicht fahrbaren Starts führen)
Beispielkarten
Original | Plagiat | Beschreibung |
---|---|---|
500px | 500px | Zugbereich: von=96, Breite: von=bis=1 |