Wiki im Aufbau. Viele Konzepte hier stammen aus Alpha 0.2 und können sich noch ändern. Das Wiki wird zur Version 1.0 finalisiert — vorerst hilft es Closed-Testern und später Early-Access-Spielern bei der Orientierung. Für die aktuellsten und verlässlichsten Infos tritt dem Discord bei — dort werden Änderungen zuerst angekündigt und du kannst direkt nachfragen.

Für die neuesten Infos dem Discord beitreten

Mod-Packs

Was ein Content-Pack ändern kann — Teams, Fahrer, Sponsoren, Lieferanten, Strecken, Kalender — worin sich extend und replace unterscheiden und wie die Pack-Datei aufgebaut ist.

Auf dieser Seite

Ein Content-Pack ist eine einzige Datei: eine SQLite-Datenbank, die in deinem Mods-Ordner liegt (%APPDATA%\TheUndercut\mods\ unter Windows — siehe wohin die Dateien gehören). Sie trägt die Datensätze und die Logobilder, sodass ein Pack ein einziges Ding zum Teilen, Sichern oder Veröffentlichen ist.

mods/
  my_pack.db     ← die ganze Mod

Du musst kein SQL können, um eines zu bauen — der mit dem Spiel gelieferte Mod-Editor schreibt genau diese Datei. Willst du die Datei doch selbst öffnen — für Massenänderungen oder um ein Pack aus einem Skript zu erzeugen — dokumentiert die SQL-Referenz jede Tabelle und jede Spalte. Diese Seite dokumentiert, was die Datei bedeutet, und das brauchst du, egal ob du den Editor benutzt, ein eigenes Skript schreibst oder das Pack von jemand anderem liest.

Die goldene Regel des Formats: jede Tabelle und jede Spalte ist optional. Ein Pack, das nur zwei Teams umbenennt, ist gültig. Alles, was du weglässt, bleibt prozedural, und ein für eine ältere Version geschriebenes Pack lädt auch in einem neueren Spiel.

Das aktuelle Format ist v2. Ein Pack hält fest, in welcher Version es geschrieben wurde, und das Spiel sagt es in der Zeile des Packs, wenn es eines nur halb versteht — du rätselst nie, warum ein Teil des Packs nichts bewirkt hat. Der Mod-Editor aktualisiert ein älteres Pack, sobald du es öffnest.


Was in einem Pack steckt

my_pack.db meta Name · Modi · Szenario teams das Starterfeld drivers sponsors suppliers Teamname circuits calendar Streckenname images PNG-Blobs Logoname

Alles in einem Pack ist über den Namen verknüpft — keine versteckten IDs.

TabelleEnthält
metaDie Einstellungen des Packs: Name, Abschnittsmodi, Szenario, Startjahr
teamsDas Starterfeld — Identität, Farben, Auto, Budget und (bei vorgegebenen Packs) Infrastruktur und Erfolgsbilanz
driversFahrerprofile — Fähigkeiten, Obergrenzen, Wachstumskurven, Eigenschaften, Porträt, Gehalt, Cockpit
sponsorsMarken, die auf dem Sponsorenmarkt verfügbar sind
suppliersMotoren-, Reifen- und Kraftstoffhersteller
circuitsAus .circuit-Dateien importierte Strecken — siehe Strecken-Modding
calendarDie Rennen der Saison, in Reihenfolge
imagesDie PNG-Dateien, auf die die Zeilen zeigen: Logos und eigene Auto-Sprites

extend oder replace

Jeder Abschnitt trägt einen Modus, in meta als <abschnitt>_mode gespeichert:

extend zuerst deine Einträge, den Rest erzeugt das Spiel weiterhin deine generierte

replace nur deine Einträge — für diesen Abschnitt wird nichts erzeugt

extend ist die Vorgabe und entspricht dem Muster des Grundspiels: ein statischer Kern plus prozedurale Füllung. replace willst du für eine vollständige reale Saison.

Was replace genau bedeutet, hängt vom Abschnitt ab — gut zu wissen, bevor du dich wunderst, warum ein Lieferant überlebt hat:

Abschnittreplace bewirkt
teamsKürzt das Feld auf deine Liste — es ist am Ende genau so lang wie deine Teamtabelle
driversDer Fahrerpool besteht nur aus deinen; für deine Serie wird niemand sonst erzeugt
sponsorsDer Sponsorenmarkt besteht nur aus deinen
suppliersNur die Kategorien, die du abdeckst, werden ersetzt. Ein Pack mit zwei Motorenherstellern und ohne Reifenhersteller behält die generierten Reifenhersteller, denn ohne einen lässt sich keine Saison fahren
circuitsGilt für den Streckenpool der Welt — die Austragungsorte, aus denen künftige Kalender schöpfen. replace heißt, dass die Welt nie zu generierten Strecken zurückdriftet; der Kalender, den du baust, fährt ohnehin immer die Strecken, die du daraufgesetzt hast

Eines, was replace nicht tut

Die Fahrer eines Packs füllen deine Serie. Die Welt betreibt zusätzlich zehn nicht spielbare Meisterschaften, jede mit einem Feld, das gefüllt werden will, und das Spiel füllt den Fahrerpool auf, damit deren Cockpits nicht leer bleiben — deshalb kann ein Pack mit eigenem vollem Feld trotzdem von generierten freien Fahrern umgeben sein.

meta.active_series ist die Antwort: Liste die Meisterschaften auf, die die Welt betreiben soll (PFS ist die spielbare), und jede andere Serie wird abgeschaltet. Hake alles außer deiner eigenen ab, und die Fahrer deines Packs sind die einzigen Menschen der Welt. Sag nichts, und alle Serien laufen wie bisher.


Zwei Arten, mit einem Pack eine Karriere zu starten

meta.scenario entscheidet, was passiert, wenn der Spieler dein Pack wählt.

SzenarioWas der Spieler bekommt
New Series (Vorgabe)Der Spieler erstellt ein neues Team, das ins Feld einsteigt, und spielt die Vorsaison. Deine Teams sind Rivalen.
ImposedDas Feld steht so, wie du es gestaltet hast — jedes Team besetzt, ausgerüstet und unter Vertrag. Der Spieler übernimmt eines deiner Teams, und die Saison beginnt bei Rennen 1, ohne Vorsaison.

Ein vorgegebenes Pack schaltet Felder frei, die sonst keinen Sinn ergäben, und das ist der einzige Unterschied im Format: Infrastrukturstufen, Erfolgsbilanz von Team und Fahrern, Gründungsjahr und die „unter Vertrag bei“-Bindungen, die die Fahrer, Sponsoren und Lieferanten jedes Teams vorbelegen. Nutze bei Teams replace für ein vorgegebenes Feld, damit nur deine Teams fahren.


meta — die Einstellungen des Packs

SchlüsselWertVorgabe
nameIn der Pack-Auswahl angezeigtder Dateiname
authorFreier Text—
schema_versionVersion des Pack-Formats, in der diese Datei geschrieben wurde (aktuell: 2)1
min_game_versionSpielversion, die das Pack braucht. Ein älteres Spiel sagt das in der Zeile des Packs, statt es halb angewandt zu laden—
scenarionew_series · imposednew_series
start_yearKalenderjahr von Saison 1 — ein Pack kann in jeder Ära beginnen1990
teams_mode, drivers_mode, sponsors_mode, suppliers_mode, circuits_modeextend · replaceextend
active_seriesMeisterschaften, die die Welt betreibt, kommagetrennt (PFS,PF2)fehlt = alle
rulesIDs der Serien-Regelsätze, kommagetrennt (Punkteskala, 107-%-Qualifikationsregel)die Vorgaben des Spiels

teams

Eine Zeile ohne name wird übersprungen. Teams werden in Reihenfolge auf das Feld angewandt, die erste Zeile ist also das erste Team.

SpalteBedeutungWenn du sie weglässt
idStabiler Schlüssel. Jede Bindung im Pack zeigt darauf, sodass ein Team umbenannt werden kann, ohne seine Fahrer, Sponsoren und Lieferanten zu verlierenstattdessen wird der Anzeigename benutzt
nameTeamname — was das Spiel überall anzeigterforderlich
countryLändername oder ISO-Codegeneriert
budget_tiersmall · medium · large — das Verhaltensprofil: KI-Barreserven, Infrastrukturobergrenze, Prestige, F&E-Ehrgeizaus dem Budget abgeleitet
budget_musdStartkapital, in Millionen0 = der Betrag der Stufe (40 Mio. $ / 60 Mio. $ / 90 Mio. $)
reputation0–1000 = generiert
color1, color2, color3#RRGGBB — die drei Lackierungszonenleer gelassen = die generierte Lackierung behalten
car_index0–11, welches Seitenansicht-Modellleer gelassen = das generierte Modell behalten (0 ist ein echtes Modell und kann daher nicht „nicht gesetzt“ heißen)
car_imageName einer images-Zeile: ein eigener Seitenansicht-Sprite, der das Modell ersetzteingebautes Modell
liveryLackierungsmuster von oben, im Live-Rennen getragen255 = das Spiel wählt
suitRennanzug der Fahrer des Teams255 = je Fahrer
logoEin images-Zeilenname, oder eine Zahl (eines der mitgelieferten Logos), oder ein Pfad relativ zu mods/ein prozedurales Zeichen aus dem Teamnamen
infra_engineering … infra_academyDie neun Abteilungsstufen (Akademie bis 3, der Rest bis 10). In einem vorgegebenen Feld sind sie die Basisstärke des Autos0 = generiert
career_wins, career_titles, best_championship, founding_yearBestenliste, die zu Saison 1 im Teamprofil steht0 = Vorgabe (Gründungsjahr 1990)
historyZeilen Saison für Saison, saison:position:siege, mit ; verbundenkeine

drivers

Eine Zeile ohne Vor- und Nachnamen wird übersprungen.

SpalteBedeutungWenn du sie weglässt
idStabiler Schlüssel dieser Zeile—
first_name, last_name—einer von beiden erforderlich
codeDrei Buchstaben, im ganzen Pack eindeutig — das Spiel indiziert Fahrer über das Kürzel und benennt eine Dopplung stillschweigend umaus dem Nachnamen gebildet
countryLändername oder ISO-Codegeneriert
age1–55. Unter 16 geht nur per Mod: ein Kind-Talent altert jede Saison, bleibt bis 14 im Scouting verborgen und kann nicht eingesetzt werden, bevor die Serie es erlaubt (18 in der PFS)25
intelligence, pace, consistency, adaptability, stamina, aggressivityFähigkeiten, 1–2010
pot_* (dieselben sechs)Die Obergrenze jedes Werts. Nie unterhalb der Fähigkeit selbst angewandt0 = generiert
curve_* (dieselben sechs)Die Form der Entwicklung mit dem Alter — siehe unten255 = die Standardform dieses Werts
traitsDas spieleigene Eigenschaftsformat, art:stufe-Paare — im Editor anlegengeneriert
fameAnfangsbekanntheit 0–100. Ein Startwert: Das Spiel kann ihn weiter bewegen0 = aus den Fähigkeiten errechnet
salaryGefordertes Gehalt, pro Saison500000
face_sheet, face_index, helmet_index, helmet_hue_0/1/2Porträt und Helm255 = generiert
team_idSetzt diesen Fahrer zu Saison 1 in dieses Team, über die stabile id des Teams — die Bindung, die das Spiel zuerst auflöst—
teamDasselbe über den Anzeigenamen des Teams. Wird genutzt, wenn keine team_id da istfreier Fahrer
roleprimary · secondary · reserve — das Cockpit ist das Auto: der Stammfahrer fährt Auto 1, der zweite Auto 2primary
contract_yearsVertragslänge in Saisons0 = 2
career_starts, career_wins, career_podiums, career_titles, best_finishErfolgsbilanz, ab Saison 1 angezeigt0 = keine

Wachstumskurven

Jede Fähigkeit entwickelt sich mit dem Alter nach einer von fünf Formen. Das Spiel hatte sie immer, je Wert eine fest verdrahtete; ein Pack kann jedem Wert jede Form zuweisen.

KurveVerbessert sichFällt abStandard für
Frühes Hochschnell bis 26, langsam bis 30, dann nieab 30Pace
Körperlichbis 28, dann nieab 28Ausdauer
Kopfarbeitimmer, langsamer ab 30 und ab 38nieIntelligenz, Anpassungsfähigkeit
Erfahrungbis 30, halb so schnell bis 34, dann nieab 34Konstanz
Jugendnur bis 24ab 28Aggressivität

Die Kurve ist die Form, nicht das Tempo: Wie schnell ein Wert den Abstand zu seiner Obergrenze schließt, bleibt eine Eigenschaft des Werts.


sponsors

SpalteBedeutungWenn du sie weglässt
nameMarkenname — erforderlich—
sectorautomotive, technology, energy, finance, luxury, fashion, telecom, beverage, insurance, aviation, industry, retailgeneriert
originLändername oder ISO-Codegeneriert
budget1–10 — was der Deal wert ist5
prominence1–10 — wie oft die Marke auftaucht und wie schwer sie zu holen ist5
color#RRGGBB—
logoEin images-Zeilenname oder ein Pfad relativ zu mods/ein prozedurales Logo
team_id / teamVorgegebene Felder: bindet diese Marke zu Saison 1 an dieses Team — über die stabile ID oder den Namenoffener Markt
idStabiler Schlüssel dieser Zeile—

suppliers

Eine Zeile, deren category keine der drei ist, wird komplett übersprungen — das ist die einzige harte Anforderung der Tabelle.

SpalteBedeutungWenn du sie weglässt
nameErforderlich—
categoryengine · tires · fuelZeile übersprungen
origin, color, logoWie bei Sponsorengeneriert
budget, size1–105
power, reliability, endurance, potential, performance, heat, efficiencyTechnische Werte 1–10 unter ihren echten Namen — nur die, die die Kategorie hat (siehe unten)0 = generiert
stat_a … stat_dDieselben vier Werte in generischen Slots, für ältere Spielversionen erhalten. Eine benannte Spalte gewinnt gegen ihren generischen Slot0 = generiert
money_per_gpDeal-Wert in $/GP. Positiv = Partnerschaft (sie zahlen dir), negativ = Kunde (du zahlst ihnen)0 = generiert
contractpartnership · client — gewinnt gegen das Vorzeichen von money_per_gp, wenn beide gesetzt sinddas Vorzeichen entscheidet
durationVertragslänge in Saisons0 = generiert
team_id / teamVorgegebene Felder: eine Liste — Scarlet:partner; Azure:customer; Emerald — ein Lieferant kann mehrere Teams beliefern, jedes auf seiner Stufe. Ein Partner je Lieferant; ein Lieferant je Kategorie und Teamoffener Markt
idStabiler Schlüssel dieser Zeile—
KategorieSlot ASlot BSlot CSlot D
enginepowerreliabilityendurance (angezeigt, nicht simuliert)potential (angezeigt, nicht simuliert)
tiresperformanceendurancereliabilityheat
fuelefficiency———

Zwei Dinge kann ein Pack bewusst nicht setzen:

  • Die Motorarchitektur (V8/V10/V12) liegt nicht beim Lieferanten — das Spiel schlägt den Namen in seinem Welt-Herstellerpool nach. Ein Name, den dieser Pool nicht kennt, fällt auf V10 zurück.
  • Versteckte Reifeneigenschaften werden aus Markenname und Saison abgeleitet, einen Reifenhersteller umzubenennen würfelt sie also neu aus.

circuits und calendar

Diese beiden bauen eine Saison. Die Strecken kommen aus dem Strecken-Editor: Der Editor speichert eine .circuit-Datei, und der Mod-Editor importiert sie ins Pack.

Jede Strecke trägt eine id, und ein Kalenderrennen zeigt mit circuit_id darauf (der Name funktioniert weiterhin als Rückfalloption).

circuits enthält die Strecke selbst — Name, Ort, Ziellänge, Optik-Vorlage, Charakter, die gezeichnete Mittellinie sowie die optionalen Start/Ziel- und Boxenmarker. calendar enthält die Rennen in Reihenfolge: Jedes Rennen ist entweder ein circuit-Rennen (das eine deiner Strecken nennt) oder ein auto-Rennen (eine generierte Strecke mit gegebenem Charakter und gegebener Länge).

Ein Pack mit Kalender ersetzt die Saison dadurch. Ein Pack mit Strecken, aber ohne Kalender legt seine Strecken in den Weltpool und lässt sie die Rennen der Saison belegen.

Zwei Felder werden zur Information festgehalten, aber nicht simuliert: das year einer Strecke und ihre Werte downforce / tire_wear / overtaking — im Spiel werden diese drei aus dem character der Strecke abgeleitet.


images

name (der Schlüssel, auf den Zeilen zeigen) plus die PNG-Bytes. Logos werden mit 195×195 angelegt; ein eigener Auto-Sprite ist eine Seitenansicht nach rechts auf transparentem Hintergrund, 256 px hoch. Das Spiel entpackt sie bei der ersten Nutzung nach mods/.cache/.


Was immer generiert bleibt

AbschnittEin Pack überschreibtDas Spiel erzeugt weiterhin
TeamsName, Land, Ruf, Budget, Verhaltensprofil, Farben, Auto, Lackierung, Anzug, LogoBudgetentwicklung, Kaderverhalten und (außer bei „imposed“) die Infrastruktur
FahrerName, Kürzel, Land, Alter, die sechs Fähigkeiten und ihre Obergrenzen, Kurven, Eigenschaften, Porträt, Helm, Gehalt, BekanntheitEhrgeiz, Saisonziele, verborgene Persönlichkeit
SponsorenName, Branche, Farbe, Budget, Bekanntheitsgrad, Herkunft, LogoVertragsbedingungen, Marktverhalten
LieferantenName, Kategorie, Farbe, Budget, Größe, Herkunft, Logo, technische Werte, VertragsbedingungenMarktverhalten, versteckte Reifeneigenschaften

Fallen, die man kennen sollte

  • Bindungen folgen der ID, nicht dem Namen. Ein Fahrer, Sponsor oder Lieferant zeigt auf die stabile id eines Teams, ein Umbenennen behält sie also, und zwei Teams dürfen sich einen Namen teilen (nur die Lesbarkeit leidet — Wertungen und News zeigen ihn dann doppelt). Ein Pack, das vor den IDs geschrieben wurde oder von Hand nur mit Namen entstand, löst weiterhin über den Namen auf und behält das alte Verhalten: Benennst du das Team dort um, landet der Fahrer im Pool der freien Fahrer. Das Pack einmal im Mod-Editor zu öffnen aktualisiert es.
  • Zwei Fahrer pro Team, einer pro Cockpit. Ein Team mit zwei primary-Fahrern lässt Auto 2 leer, und ein Auto ohne Fahrer startet nicht. Der Audit-Tab des Editors existiert vor allem dafür.
  • Fahrerkürzel müssen eindeutig sein. Eine Dopplung wird beim Laden stillschweigend umbenannt, und alles, was über das Kürzel läuft, folgt der Umbenennung.
  • Die Pack-Datei muss dort bleiben, wo sie ist. Logos und eigene Auto-Sprites werden aus ihr gelesen; eine Karriere, die mit einem später verschwundenen Pack begonnen wurde, verliert sie.
  • Ein Pack greift nur bei der Karriereerstellung. Ein Pack zu bearbeiten ändert nie eine schon laufende Karriere — starte eine neue, um die Änderung zu sehen.