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
| Tabella | Contiene |
|---|---|
meta | Le impostazioni del pacchetto: nome, modalità delle sezioni, scenario, anno iniziale |
teams | Lo schieramento — identità, colori, vettura, budget e (pacchetti imposti) infrastrutture e palmarès |
drivers | Profili dei piloti — abilità, tetti, curve di crescita, tratti, ritratto, stipendio, sedile |
sponsors | I marchi disponibili sul mercato degli sponsor |
suppliers | Costruttori di motori, gomme e carburante |
circuits | Tracciati importati da file .circuit — vedi modding dei circuiti |
calendar | Le tappe della stagione, in ordine |
images | I 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 è 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:
| Sezione | replace fa |
|---|---|
teams | Riduce lo schieramento alla tua lista: risulta lungo esattamente quanto la tua tabella dei team |
drivers | Il bacino di piloti è solo il tuo; nessun altro viene generato per la tua serie |
sponsors | Il mercato degli sponsor è solo il tuo |
suppliers | Vengono 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 |
circuits | Si 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.
| Scenario | Cosa 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. |
| Imposed | La 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
| Chiave | Valore | Predefinito |
|---|---|---|
name | Mostrato nel selettore dei pacchetti | il nome del file |
author | Testo libero | — |
schema_version | Versione del formato con cui questo file è stato scritto (attuale: 2) | 1 |
min_game_version | Build del gioco richiesta dal pacchetto. Un gioco più vecchio lo segnala sulla riga del pacchetto invece di caricarlo a metà | — |
scenario | new_series · imposed | new_series |
start_year | Anno solare della stagione 1 — un pacchetto può aprirsi in qualsiasi epoca | 1990 |
teams_mode, drivers_mode, sponsors_mode, suppliers_mode, circuits_mode | extend · replace | extend |
active_series | Campionati che il mondo fa correre, separati da virgole (PFS,PF2) | assente = tutti |
rules | Id 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.
| Colonna | Significato | Se la ometti |
|---|---|---|
id | Chiave stabile. Ogni collegamento del pacchetto punta a essa, così un team può essere rinominato senza perdere piloti, sponsor e fornitori | viene usato il nome visualizzato |
name | Nome del team — ciò che il gioco mostra ovunque | obbligatorio |
country | Nome del paese o codice ISO | generato |
budget_tier | small · medium · large — il profilo di comportamento: riserve di cassa dell’IA, tetto delle infrastrutture, prestigio, ambizione in R&S | dedotto dal budget |
budget_musd | Cassa iniziale, in milioni | 0 = l’importo proprio della fascia (40 M$ / 60 M$ / 90 M$) |
reputation | 0–100 | 0 = generata |
color1, color2, color3 | #RRGGBB — le tre zone della livrea | lasciato vuoto = mantieni la livrea generata |
car_index | 0–11, quale modello di vettura in vista laterale | lasciato vuoto = mantieni il modello generato (0 è un modello vero, quindi non può significare «non impostato») |
car_image | Nome di una riga images: uno sprite laterale personalizzato che sostituisce il modello | modello integrato |
livery | Motivo di livrea visto dall’alto, indossato nelle gare dal vivo | 255 = sceglie il gioco |
suit | Tuta indossata dai piloti del team | 255 = per pilota |
logo | Il 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_academy | I nove livelli di reparto (l’academy arriva a 3, gli altri a 10). In una griglia imposta questi sono la forza base della vettura | 0 = generato |
career_wins, career_titles, best_championship, founding_year | Record storico mostrato sul profilo del team alla stagione 1 | 0 = predefinito (anno di fondazione 1990) |
history | Righe stagione per stagione, stagione:posizione:vittorie, unite da ; | nessuna |
drivers
Una riga senza nome né cognome viene saltata.
| Colonna | Significato | Se la ometti |
|---|---|---|
id | Chiave stabile di questa riga | — |
first_name, last_name | — | uno dei due obbligatorio |
code | Tre lettere, unico in tutto il pacchetto — il gioco indicizza i piloti per codice e rinomina in silenzio un duplicato | costruito dal cognome |
country | Nome del paese o codice ISO | generato |
age | 1–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, aggressivity | Abilità, 1–20 | 10 |
pot_* (le stesse sei) | Il tetto di ciascuna statistica. Mai applicato al di sotto dell’abilità stessa | 0 = generato |
curve_* (le stesse sei) | La forma di crescita della statistica con l’età — vedi sotto | 255 = la forma predefinita di quella statistica |
traits | Il formato dei tratti del gioco, coppie tipo:livello — creali nell’editor | generati |
fame | Notorietà iniziale 0–100. Un valore iniziale: il gioco può comunque muoverlo | 0 = ricavata dalle abilità |
salary | Stipendio richiesto, per stagione | 500000 |
face_sheet, face_index, helmet_index, helmet_hue_0/1/2 | Ritratto e casco | 255 = generato |
team_id | Schiera questo pilota in quel team alla stagione 1, tramite l’id stabile del team — il collegamento che il gioco risolve per primo | — |
team | Lo stesso, tramite il nome visualizzato del team. Usato quando non c’è team_id | svincolato |
role | primary · secondary · reserve — il sedile è la vettura: il titolare guida la vettura 1, il secondo la vettura 2 | primary |
contract_years | Durata del contratto in stagioni | 0 = 2 |
career_starts, career_wins, career_podiums, career_titles, best_finish | Palmarès mostrato dalla stagione 1 | 0 = 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.
| Curva | Migliora | Cala | Predefinita per |
|---|---|---|---|
| Picco precoce | in fretta fino a 26, lentamente fino a 30, poi mai | da 30 | Ritmo |
| Fisica | fino a 28, poi mai | da 28 | Resistenza |
| Cerebrale | sempre, rallentando dopo i 30 e poi i 38 | mai | Intelligenza, Adattabilità |
| Esperienza | fino a 30, a metà velocità fino a 34, poi mai | da 34 | Costanza |
| Giovinezza | solo fino a 24 | da 28 | Aggressività |
La curva è la forma, non la velocità: quanto in fretta una statistica colma il divario col suo tetto resta una proprietà della statistica.
sponsors
| Colonna | Significato | Se la ometti |
|---|---|---|
name | Nome del marchio — obbligatorio | — |
sector | automotive, technology, energy, finance, luxury, fashion, telecom, beverage, insurance, aviation, industry, retail | generato |
origin | Nome del paese o codice ISO | generato |
budget | 1–10 — quanto vale l’accordo | 5 |
prominence | 1–10 — quanto spesso compare il marchio e quanto è difficile ottenerlo | 5 |
color | #RRGGBB | — |
logo | Il nome di una riga images, o un percorso relativo a mods/ | un logo procedurale |
team_id / team | Griglie imposte: lega questo marchio a quel team alla stagione 1 — tramite id stabile o nome | mercato aperto |
id | Chiave stabile di questa riga | — |
suppliers
Una riga la cui category non è una delle tre viene saltata del tutto: è l’unico requisito rigido della tabella.
| Colonna | Significato | Se la ometti |
|---|---|---|
name | Obbligatorio | — |
category | engine · tires · fuel | riga saltata |
origin, color, logo | Come per gli sponsor | generato |
budget, size | 1–10 | 5 |
power, reliability, endurance, potential, performance, heat, efficiency | Statistiche tecniche 1–10 con i loro nomi reali — solo quelle previste dalla categoria (vedi sotto) | 0 = generata |
stat_a … stat_d | Gli stessi quattro valori in slot generici, mantenuti per le build più vecchie. Una colonna con nome vince sul suo slot generico | 0 = generata |
money_per_gp | Valore dell’accordo in $/GP. Positivo = partnership (ti pagano), negativo = cliente (paghi tu) | 0 = generato |
contract | partnership · client — vince sul segno di money_per_gp quando sono impostati entrambi | decide il segno |
duration | Durata del contratto in stagioni | 0 = generata |
team_id / team | Griglie 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 team | mercato aperto |
id | Chiave stabile di questa riga | — |
| Categoria | slot A | slot B | slot C | slot D |
|---|---|---|---|---|
| engine | power | reliability | endurance (mostrato, non simulato) | potential (mostrato, non simulato) |
| tires | performance | endurance | reliability | heat |
| fuel | efficiency | — | — | — |
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
| Sezione | Un pacchetto sostituisce | Il gioco continua a generare |
|---|---|---|
| Team | Nome, paese, reputazione, budget, profilo di comportamento, colori, vettura, livrea, tuta, logo | L’evoluzione del budget, il comportamento dell’organico e (fuori dal modo imposto) le infrastrutture |
| Piloti | Nome, codice, paese, età, le sei abilità e i loro tetti, curve, tratti, ritratto, casco, stipendio, notorietà | Ambizione, obiettivi di stagione, personalità nascosta |
| Sponsor | Nome, settore, colore, budget, notorietà, origine, logo | Termini contrattuali, comportamento di mercato |
| Fornitori | Nome, categoria, colore, budget, dimensione, origine, logo, statistiche tecniche, termini dell’accordo | Comportamento 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’
idstabile 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
primarylascia 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.