Wiki in costruzione. Molti concetti qui descritti provengono dall'alpha 0.2 e possono ancora cambiare. La wiki sarà finalizzata per la versione 1.0 — per ora serve ad aiutare i tester chiusi e, più avanti, i giocatori dell'accesso anticipato a orientarsi. Per le informazioni più aggiornate e affidabili, entra nel Discord — è lì che le novità vengono annunciate per prime e dove puoi chiedere direttamente.

Entra nel Discord per le ultime novità

Pacchetti mod

Cosa può cambiare un pacchetto di contenuti — team, piloti, sponsor, fornitori, circuiti, calendario — in che cosa differiscono extend e replace, e la struttura completa del file.

In questa pagina

Un pacchetto di contenuti è un solo file: un database SQLite che sta nella tua cartella mods (%APPDATA%\TheUndercut\mods\ su Windows — vedi dove vanno i file). Contiene le righe e le immagini dei loghi, quindi un pacchetto è una cosa sola da condividere, salvare o pubblicare.

mods/
  my_pack.db     ← l'intera mod

Non serve conoscere l’SQL per crearne uno: l’Editor di mod fornito col gioco scrive esattamente questo file. Se invece volete aprire il file voi stessi — per modifiche di massa, o per generare un pack da uno script — il riferimento SQL documenta ogni tabella e ogni colonna. Questa pagina documenta cosa il file significa, ed è ciò che ti serve sia che usi l’editor, sia che ti scriva uno script tuo, sia che legga il pacchetto di qualcun altro.

La regola d’oro del formato: ogni tabella e ogni colonna è facoltativa. Un pacchetto che si limita a rinominare due team è valido. Tutto ciò che ometti resta procedurale, e un pacchetto scritto per una versione più vecchia si carica comunque in un gioco più recente.

Il formato attuale è la v2. Un pacchetto registra in quale versione è stato scritto, e il gioco lo segnala sulla riga del pacchetto quando lo capisce solo a metà — non resti mai a chiederti perché una parte del pacchetto non ha fatto nulla. L’Editor di mod aggiorna un pacchetto vecchio nel momento in cui lo apri.


Cosa c’è dentro un pacchetto

my_pack.db meta nome · modalità · scenario teams lo schieramento drivers sponsors suppliers nome del team circuits calendar nome del circuito images blob PNG nome del logo

Tutto dentro un pacchetto è collegato dal nome — nessun id nascosto.

TabellaContiene
metaLe impostazioni del pacchetto: nome, modalità delle sezioni, scenario, anno iniziale
teamsLo schieramento — identità, colori, vettura, budget e (pacchetti imposti) infrastrutture e palmarès
driversProfili dei piloti — abilità, tetti, curve di crescita, tratti, ritratto, stipendio, sedile
sponsorsI marchi disponibili sul mercato degli sponsor
suppliersCostruttori di motori, gomme e carburante
circuitsTracciati importati da file .circuit — vedi modding dei circuiti
calendarLe tappe della stagione, in ordine
imagesI file PNG a cui puntano le righe: loghi e sprite vettura personalizzati

extend o replace

Ogni sezione porta una modalità, salvata in meta come <sezione>_mode:

extend prima le tue voci, il resto lo genera comunque il gioco le tue generate

replace solo le tue voci — per quella sezione non si genera nulla

extend è il valore predefinito, ed è lo schema del gioco base: un nucleo statico più riempimento procedurale. replace è ciò che vuoi per una stagione reale completa.

Cosa significhi esattamente replace dipende dalla sezione — utile saperlo prima di chiederti perché un fornitore è sopravvissuto:

Sezionereplace fa
teamsRiduce lo schieramento alla tua lista: risulta lungo esattamente quanto la tua tabella dei team
driversIl bacino di piloti è solo il tuo; nessun altro viene generato per la tua serie
sponsorsIl mercato degli sponsor è solo il tuo
suppliersVengono sostituite solo le categorie che copri. Un pacchetto con due motoristi e nessun gommista mantiene i gommisti generati, perché senza non si può correre una stagione
circuitsSi applica al pool di circuiti del mondo — le sedi da cui attingono i calendari futuri. replace significa che il mondo non torna mai ai tracciati generati; in ogni caso il calendario che costruisci fa sempre correre i tracciati che ci hai messo

Una cosa che replace non fa

I piloti di un pacchetto riempiono la tua serie. Il mondo fa correre anche dieci campionati non giocabili, ognuno con uno schieramento da riempire, e il gioco integra il bacino di piloti perché i loro sedili non restino vuoti — ecco perché un pacchetto con uno schieramento completo suo può comunque essere circondato da svincolati generati.

meta.active_series è la risposta: elenca i campionati che il mondo deve far correre (PFS è quello giocabile) e ogni altra serie viene spenta. Deseleziona tutto tranne il tuo e i piloti del pacchetto saranno le uniche persone al mondo. Non dire nulla e gireranno tutte le serie, come prima.


Due modi in cui un pacchetto avvia una carriera

meta.scenario decide cosa succede quando il giocatore sceglie il tuo pacchetto.

ScenarioCosa ottiene il giocatore
New Series (predefinito)Il giocatore crea un nuovo team che entra in griglia e gioca la pre-stagione. I tuoi team sono i rivali.
ImposedLa griglia è fissata come l’hai creata: ogni team con personale, materiale e contratti. Il giocatore prende in mano uno dei tuoi team e la stagione parte dalla gara 1, senza pre-stagione.

Un pacchetto imposto sblocca campi che altrimenti non avrebbero senso, ed è l’unica differenza nel formato: livelli delle infrastrutture, palmarès di team e piloti, anno di fondazione e i collegamenti «sotto contratto con» che precompilano piloti, sponsor e fornitori di ogni team. Usa replace sui team per una griglia imposta, così corrono solo i tuoi.


meta — le impostazioni del pacchetto

ChiaveValorePredefinito
nameMostrato nel selettore dei pacchettiil nome del file
authorTesto libero—
schema_versionVersione del formato con cui questo file è stato scritto (attuale: 2)1
min_game_versionBuild del gioco richiesta dal pacchetto. Un gioco più vecchio lo segnala sulla riga del pacchetto invece di caricarlo a metà—
scenarionew_series · imposednew_series
start_yearAnno solare della stagione 1 — un pacchetto può aprirsi in qualsiasi epoca1990
teams_mode, drivers_mode, sponsors_mode, suppliers_mode, circuits_modeextend · replaceextend
active_seriesCampionati che il mondo fa correre, separati da virgole (PFS,PF2)assente = tutti
rulesId dei regolamenti della serie, separati da virgole (scala dei punti, regola del 107 % in qualifica)i valori predefiniti del gioco

teams

Una riga senza name viene saltata. I team vengono applicati allo schieramento in ordine, quindi la prima riga è il primo team.

ColonnaSignificatoSe la ometti
idChiave stabile. Ogni collegamento del pacchetto punta a essa, così un team può essere rinominato senza perdere piloti, sponsor e fornitoriviene usato il nome visualizzato
nameNome del team — ciò che il gioco mostra ovunqueobbligatorio
countryNome del paese o codice ISOgenerato
budget_tiersmall · medium · large — il profilo di comportamento: riserve di cassa dell’IA, tetto delle infrastrutture, prestigio, ambizione in R&Sdedotto dal budget
budget_musdCassa iniziale, in milioni0 = l’importo proprio della fascia (40 M$ / 60 M$ / 90 M$)
reputation0–1000 = generata
color1, color2, color3#RRGGBB — le tre zone della livrealasciato vuoto = mantieni la livrea generata
car_index0–11, quale modello di vettura in vista lateralelasciato vuoto = mantieni il modello generato (0 è un modello vero, quindi non può significare «non impostato»)
car_imageNome di una riga images: uno sprite laterale personalizzato che sostituisce il modellomodello integrato
liveryMotivo di livrea visto dall’alto, indossato nelle gare dal vivo255 = sceglie il gioco
suitTuta indossata dai piloti del team255 = per pilota
logoIl nome di una riga images, oppure un numero (uno dei loghi forniti col gioco), oppure un percorso relativo a mods/un marchio procedurale ricavato dal nome del team
infra_engineering … infra_academyI nove livelli di reparto (l’academy arriva a 3, gli altri a 10). In una griglia imposta questi sono la forza base della vettura0 = generato
career_wins, career_titles, best_championship, founding_yearRecord storico mostrato sul profilo del team alla stagione 10 = predefinito (anno di fondazione 1990)
historyRighe stagione per stagione, stagione:posizione:vittorie, unite da ;nessuna

drivers

Una riga senza nome né cognome viene saltata.

ColonnaSignificatoSe la ometti
idChiave stabile di questa riga—
first_name, last_name—uno dei due obbligatorio
codeTre lettere, unico in tutto il pacchetto — il gioco indicizza i piloti per codice e rinomina in silenzio un duplicatocostruito dal cognome
countryNome del paese o codice ISOgenerato
age1–55. Sotto i 16 è solo per le mod: una giovane promessa invecchia ogni stagione, resta nascosta allo Scouting fino ai 14 e non può essere schierata prima di quanto la serie consenta (18 nella PFS)25
intelligence, pace, consistency, adaptability, stamina, aggressivityAbilità, 1–2010
pot_* (le stesse sei)Il tetto di ciascuna statistica. Mai applicato al di sotto dell’abilità stessa0 = generato
curve_* (le stesse sei)La forma di crescita della statistica con l’età — vedi sotto255 = la forma predefinita di quella statistica
traitsIl formato dei tratti del gioco, coppie tipo:livello — creali nell’editorgenerati
fameNotorietà iniziale 0–100. Un valore iniziale: il gioco può comunque muoverlo0 = ricavata dalle abilità
salaryStipendio richiesto, per stagione500000
face_sheet, face_index, helmet_index, helmet_hue_0/1/2Ritratto e casco255 = generato
team_idSchiera questo pilota in quel team alla stagione 1, tramite l’id stabile del team — il collegamento che il gioco risolve per primo—
teamLo stesso, tramite il nome visualizzato del team. Usato quando non c’è team_idsvincolato
roleprimary · secondary · reserve — il sedile è la vettura: il titolare guida la vettura 1, il secondo la vettura 2primary
contract_yearsDurata del contratto in stagioni0 = 2
career_starts, career_wins, career_podiums, career_titles, best_finishPalmarès mostrato dalla stagione 10 = nessuno

Curve di crescita

Ogni abilità si sviluppa con l’età secondo una di cinque forme. Il gioco le ha sempre avute, una fissa per statistica; un pacchetto può assegnare qualsiasi forma a qualsiasi statistica.

CurvaMiglioraCalaPredefinita per
Picco precocein fretta fino a 26, lentamente fino a 30, poi maida 30Ritmo
Fisicafino a 28, poi maida 28Resistenza
Cerebralesempre, rallentando dopo i 30 e poi i 38maiIntelligenza, Adattabilità
Esperienzafino a 30, a metà velocità fino a 34, poi maida 34Costanza
Giovinezzasolo fino a 24da 28Aggressività

La curva è la forma, non la velocità: quanto in fretta una statistica colma il divario col suo tetto resta una proprietà della statistica.


sponsors

ColonnaSignificatoSe la ometti
nameNome del marchio — obbligatorio—
sectorautomotive, technology, energy, finance, luxury, fashion, telecom, beverage, insurance, aviation, industry, retailgenerato
originNome del paese o codice ISOgenerato
budget1–10 — quanto vale l’accordo5
prominence1–10 — quanto spesso compare il marchio e quanto è difficile ottenerlo5
color#RRGGBB—
logoIl nome di una riga images, o un percorso relativo a mods/un logo procedurale
team_id / teamGriglie imposte: lega questo marchio a quel team alla stagione 1 — tramite id stabile o nomemercato aperto
idChiave stabile di questa riga—

suppliers

Una riga la cui category non è una delle tre viene saltata del tutto: è l’unico requisito rigido della tabella.

ColonnaSignificatoSe la ometti
nameObbligatorio—
categoryengine · tires · fuelriga saltata
origin, color, logoCome per gli sponsorgenerato
budget, size1–105
power, reliability, endurance, potential, performance, heat, efficiencyStatistiche tecniche 1–10 con i loro nomi reali — solo quelle previste dalla categoria (vedi sotto)0 = generata
stat_a … stat_dGli stessi quattro valori in slot generici, mantenuti per le build più vecchie. Una colonna con nome vince sul suo slot generico0 = generata
money_per_gpValore dell’accordo in $/GP. Positivo = partnership (ti pagano), negativo = cliente (paghi tu)0 = generato
contractpartnership · client — vince sul segno di money_per_gp quando sono impostati entrambidecide il segno
durationDurata del contratto in stagioni0 = generata
team_id / teamGriglie imposte: un elenco — Scarlet:partner; Azure:customer; Emerald — un fornitore può sostenere più team, ciascuno al proprio livello. Un partner per fornitore; un fornitore per categoria per teammercato aperto
idChiave stabile di questa riga—
Categoriaslot Aslot Bslot Cslot D
enginepowerreliabilityendurance (mostrato, non simulato)potential (mostrato, non simulato)
tiresperformanceendurancereliabilityheat
fuelefficiency———

Due cose che un pacchetto deliberatamente non può impostare:

  • L’architettura del motore (V8/V10/V12) non è salvata sul fornitore: il gioco cerca il nome nel suo pool mondiale di costruttori. Un nome che quel pool non conosce ricade su V10.
  • I tratti nascosti delle gomme derivano dal nome del marchio e dalla stagione, quindi rinominare un gommista li rigenera.

circuits e calendar

Queste due costruiscono una stagione. I circuiti vengono dall’Editor di circuiti: l’editor salva un file .circuit e l’Editor di mod lo importa nel pacchetto.

Ogni circuito ha un id, e una tappa del calendario vi punta con circuit_id (il nome funziona ancora come ripiego).

circuits contiene il tracciato in sé — nome, luogo, lunghezza obiettivo, preset visivo, carattere, la linea centrale disegnata e i marcatori facoltativi di partenza/arrivo e box. calendar contiene le tappe, in ordine: ogni tappa è una tappa circuit (che nomina uno dei tuoi tracciati) oppure una tappa auto (un tracciato generato di dato carattere e lunghezza).

Un pacchetto che porta un calendario sostituisce la stagione con esso. Un pacchetto con circuiti ma senza calendario mette i suoi tracciati nel pool del mondo e li lascia occupare le tappe della stagione.

Due campi vengono registrati a titolo informativo ma non simulati: l’year di un circuito e i suoi valori downforce / tire_wear / overtaking — in gioco quei tre derivano dal character del tracciato.


images

name (la chiave a cui puntano le righe) più i byte del PNG. I loghi si creano a 195×195; uno sprite vettura personalizzato è una vista laterale rivolta a destra su sfondo trasparente, alta 256 px. Il gioco li estrae in mods/.cache/ al primo utilizzo.


Cosa resta sempre generato

SezioneUn pacchetto sostituisceIl gioco continua a generare
TeamNome, paese, reputazione, budget, profilo di comportamento, colori, vettura, livrea, tuta, logoL’evoluzione del budget, il comportamento dell’organico e (fuori dal modo imposto) le infrastrutture
PilotiNome, codice, paese, età, le sei abilità e i loro tetti, curve, tratti, ritratto, casco, stipendio, notorietàAmbizione, obiettivi di stagione, personalità nascosta
SponsorNome, settore, colore, budget, notorietà, origine, logoTermini contrattuali, comportamento di mercato
FornitoriNome, categoria, colore, budget, dimensione, origine, logo, statistiche tecniche, termini dell’accordoComportamento di mercato, tratti nascosti delle gomme

Trappole da conoscere

  • I collegamenti seguono l’id, non il nome. Un pilota, uno sponsor o un fornitore punta all’id stabile di un team, quindi rinominarlo li conserva, e due team possono condividere un nome (ne soffre solo la lettura: classifiche e notizie lo mostrano due volte). Un pacchetto scritto prima che esistessero gli id, o compilato a mano con i soli nomi, si risolve ancora per nome e mantiene il vecchio comportamento: se lì rinomini il team, il pilota finisce tra gli svincolati. Aprire una volta il pacchetto nell’Editor di mod lo aggiorna.
  • Due piloti per team, uno per sedile. Un team con due piloti primary lascia vuota la vettura 2, e una vettura senza pilota non parte. La scheda Audit dell’editor esiste soprattutto per questo.
  • I codici dei piloti devono essere unici. Un duplicato viene rinominato al caricamento, in silenzio, e tutto ciò che è indicizzato per codice segue la rinomina.
  • Il file del pacchetto deve restare dov’è. Loghi e sprite vettura personalizzati vengono letti da lì; una carriera avviata con un pacchetto che poi sparisce li perde.
  • Un pacchetto si applica solo alla creazione della carriera. Modificare un pacchetto non cambia mai una carriera già avviata — avviane una nuova per vedere la modifica.