Un pack de contenu, c’est un seul fichier : une base de données SQLite posée dans votre dossier mods (%APPDATA%\TheUndercut\mods\ sous Windows — voir où vont les fichiers). Il porte les lignes et les images de logos, si bien qu’un pack est une chose unique à partager, sauvegarder ou publier.
mods/
my_pack.db ← tout le mod
Nul besoin de connaître le SQL pour en fabriquer un — l’Éditeur de mods livré avec le jeu écrit exactement ce fichier. Si vous voulez quand même ouvrir le fichier vous-même — pour des modifications en masse, ou pour générer un pack depuis un script — la référence SQL documente chaque table et chaque colonne. Cette page documente ce que le fichier signifie, ce dont vous avez besoin que vous passiez par l’éditeur, par un script maison, ou que vous lisiez le pack de quelqu’un d’autre.
La règle d’or du format : chaque table et chaque colonne est facultative. Un pack qui se contente de renommer deux écuries est valide. Tout ce que vous omettez reste procédural, et un pack écrit pour une version antérieure se charge encore dans un jeu plus récent.
Le format actuel est la v2. Un pack enregistre la version dans laquelle il a été écrit, et le jeu le signale sur la ligne du pack quand il n’en comprend qu’une partie — vous ne restez jamais à vous demander pourquoi une portion du pack n’a rien fait. L’Éditeur de mods met à niveau un ancien pack dès que vous l’ouvrez.
Ce qu’il y a dans un pack
| Table | Contient |
|---|---|
meta | Les réglages du pack : son nom, les modes de section, le scénario, l’année de départ |
teams | La grille — identité, couleurs, voiture, budget, et (packs imposés) infrastructures et palmarès |
drivers | Les profils de pilotes — aptitudes, plafonds, courbes de progression, traits, portrait, salaire, baquet |
sponsors | Les marques disponibles sur le marché des sponsors |
suppliers | Motoristes, manufacturiers de pneus et pétroliers |
circuits | Les tracés importés depuis des fichiers .circuit — voir modding de circuits |
calendar | Les manches de la saison, dans l’ordre |
images | Les fichiers PNG vers lesquels pointent les lignes : logos et sprites de voiture personnalisés |
extend ou replace
Chaque section porte un mode, stocké dans meta sous la clé <section>_mode :
extend est la valeur par défaut, et c’est le propre schéma du jeu de base : un noyau statique plus un remplissage procédural. replace est ce qu’il vous faut pour une saison réelle complète.
Ce que replace signifie exactement dépend de la section — bon à savoir avant de vous demander pourquoi un fournisseur a survécu :
| Section | replace fait |
|---|---|
teams | Réduit la grille à votre liste — la grille fait exactement la longueur de votre table d’écuries |
drivers | Le vivier de pilotes n’est que le vôtre ; personne d’autre n’est généré pour votre série |
sponsors | Le marché des sponsors n’est que le vôtre |
suppliers | Seules les catégories que vous couvrez sont remplacées. Un pack avec deux motoristes et aucun manufacturier de pneus conserve les manufacturiers générés, car une saison ne peut pas se courir sans |
circuits | S’applique au pool de circuits du monde — les sites dans lesquels les futurs calendriers puisent. replace signifie que le monde ne retombe jamais sur des tracés générés ; de toute façon, le calendrier que vous construisez fait toujours courir les tracés que vous y avez placés |
Une chose que replace ne fait pas
Les pilotes d’un pack remplissent votre série. Le monde fait aussi tourner dix championnats non jouables, chacun avec une grille à remplir, et le jeu complète le vivier de pilotes pour que leurs baquets ne restent pas vides — d’où le fait qu’un pack avec sa propre grille complète puisse tout de même être entouré d’agents libres générés.
meta.active_series est la réponse : listez les championnats que le monde doit faire tourner (PFS est le championnat jouable) et toutes les autres séries sont désactivées. Décochez tout sauf la vôtre et les pilotes de votre pack sont les seules personnes au monde. Ne dites rien et toutes les séries tournent, comme avant.
Deux façons de commencer une carrière avec un pack
meta.scenario décide de ce qui se passe quand le joueur choisit votre pack.
| Scénario | Ce que le joueur obtient |
|---|---|
| New Series (par défaut) | Le joueur crée une nouvelle écurie qui rejoint la grille et joue la pré-saison. Vos écuries sont des rivales. |
| Imposed | La grille est figée telle que vous l’avez écrite — chaque écurie dotée de son personnel, de son matériel et de ses contrats. Le joueur reprend l’une de vos écuries et la saison s’ouvre à la course 1, sans pré-saison. |
Un pack imposé déverrouille des champs qui n’auraient aucun sens autrement, et c’est la seule différence dans le format : niveaux d’infrastructures, palmarès des écuries et des pilotes, année de fondation, et les liaisons « sous contrat avec » qui préremplissent les pilotes, sponsors et fournisseurs de chaque écurie. Utilisez replace sur les écuries pour une grille imposée, afin que seules vos écuries courent.
meta — les réglages du pack
| Clé | Valeur | Défaut |
|---|---|---|
name | Affiché dans le sélecteur de packs | le nom du fichier |
author | Texte libre | — |
schema_version | Version du format de pack dans laquelle ce fichier a été écrit (actuelle : 2) | 1 |
min_game_version | Build du jeu exigé par le pack. Un jeu plus ancien le signale sur la ligne du pack au lieu de le charger à moitié | — |
scenario | new_series · imposed | new_series |
start_year | Année civile de la saison 1 — un pack peut s’ouvrir sur n’importe quelle époque | 1990 |
teams_mode, drivers_mode, sponsors_mode, suppliers_mode, circuits_mode | extend · replace | extend |
active_series | Championnats que le monde fait tourner, séparés par des virgules (PFS,PF2) | absent = tous |
rules | Identifiants de jeux de règles de la série, séparés par des virgules (barème de points, règle des 107 % en qualifications) | les valeurs par défaut du jeu |
teams
Une ligne sans name est ignorée. Les écuries sont appliquées à la grille dans l’ordre : la première ligne est la première écurie.
| Colonne | Signification | Si vous l’omettez |
|---|---|---|
id | Clé stable. Chaque liaison du pack pointe dessus, si bien qu’une écurie peut être renommée sans perdre ses pilotes, sponsors et fournisseurs | le nom affiché est utilisé à la place |
name | Nom de l’écurie — ce que le jeu affiche partout | obligatoire |
country | Nom de pays ou code ISO | généré |
budget_tier | small · medium · large — le profil de comportement : réserves de trésorerie de l’IA, plafond d’infrastructures, prestige, ambition en R&D | déduit du budget |
budget_musd | Trésorerie de départ, en millions | 0 = le montant propre au palier (40 M$ / 60 M$ / 90 M$) |
reputation | 0–100 | 0 = généré |
color1, color2, color3 | #RRGGBB — les trois zones de livrée | laissé vide = conserver la livrée générée |
car_index | 0–11, le modèle de voiture en vue de profil | laissé vide = conserver le modèle généré (0 est un vrai modèle, il ne peut donc pas signifier « non défini ») |
car_image | Nom d’une ligne images : un sprite de profil personnalisé remplaçant le modèle | modèle intégré |
livery | Motif de livrée vu du dessus, porté en course live | 255 = le jeu choisit |
suit | Combinaison portée par les pilotes de l’écurie | 255 = par pilote |
logo | Un nom de ligne images, ou un nombre (l’un des logos livrés avec le jeu), ou un chemin relatif à mods/ | une marque procédurale tirée du nom de l’écurie |
infra_engineering … infra_academy | Les neuf niveaux de département (l’académie plafonne à 3, le reste à 10). Dans une grille imposée, ils sont la force de base de la voiture | 0 = généré |
career_wins, career_titles, best_championship, founding_year | Palmarès historique affiché sur le profil de l’écurie à la saison 1 | 0 = défaut (année de fondation 1990) |
history | Lignes saison par saison, saison:position:victoires, jointes par ; | aucune |
drivers
Une ligne sans prénom ni nom est ignorée.
| Colonne | Signification | Si vous l’omettez |
|---|---|---|
id | Clé stable de cette ligne | — |
first_name, last_name | — | l’un des deux obligatoire |
code | Trois lettres, unique dans tout le pack — le jeu indexe les pilotes par code et renomme silencieusement un doublon | construit à partir du nom de famille |
country | Nom de pays ou code ISO | généré |
age | 1–55. En dessous de 16, c’est réservé aux mods : un espoir enfant vieillit chaque saison, reste invisible au Recrutement jusqu’à 14 ans, et ne peut pas être titularisé avant que la série ne l’autorise (18 en PFS) | 25 |
intelligence, pace, consistency, adaptability, stamina, aggressivity | Aptitudes, 1–20 | 10 |
pot_* (les six mêmes) | Le plafond de chaque statistique. Jamais appliqué en dessous de l’aptitude elle-même | 0 = généré |
curve_* (les six mêmes) | La forme de progression de la statistique avec l’âge — voir ci-dessous | 255 = la forme par défaut de cette statistique |
traits | Le format de traits propre au jeu, des paires type:palier — à créer dans l’éditeur | générés |
fame | Renommée de départ 0–100. Une valeur de départ : le jeu peut encore la faire bouger | 0 = calculé d’après les aptitudes |
salary | Salaire demandé, par saison | 500000 |
face_sheet, face_index, helmet_index, helmet_hue_0/1/2 | Portrait et casque | 255 = généré |
team_id | Titularise ce pilote dans cette écurie à la saison 1, par l’id stable de l’écurie — la liaison que le jeu résout en premier | — |
team | Idem, par le nom affiché de l’écurie. Utilisé quand il n’y a pas de team_id | agent libre |
role | primary · secondary · reserve — le baquet, c’est la voiture : le titulaire pilote la voiture 1, le second la voiture 2 | primary |
contract_years | Durée du contrat en saisons | 0 = 2 |
career_starts, career_wins, career_podiums, career_titles, best_finish | Palmarès affiché dès la saison 1 | 0 = aucun |
Courbes de progression
Chaque aptitude évolue avec l’âge selon l’une des cinq formes. Le jeu les a toujours eues, une par statistique en dur ; un pack peut affecter n’importe quelle forme à n’importe quelle statistique.
| Courbe | Progresse | Décline | Défaut pour |
|---|---|---|---|
| Pic précoce | vite jusqu’à 26, lentement jusqu’à 30, puis plus du tout | à partir de 30 | Rythme |
| Physique | jusqu’à 28, puis plus du tout | à partir de 28 | Endurance |
| Cérébrale | toujours, en ralentissant après 30 puis 38 | jamais | Intelligence, Adaptabilité |
| Expérience | jusqu’à 30, à mi-vitesse jusqu’à 34, puis plus du tout | à partir de 34 | Régularité |
| Jeunesse | seulement jusqu’à 24 | à partir de 28 | Agressivité |
La courbe est la forme, pas la vitesse : la rapidité avec laquelle une statistique comble l’écart avec son plafond reste une propriété de la statistique.
sponsors
| Colonne | Signification | Si vous l’omettez |
|---|---|---|
name | Nom de la marque — obligatoire | — |
sector | automotive, technology, energy, finance, luxury, fashion, telecom, beverage, insurance, aviation, industry, retail | généré |
origin | Nom de pays ou code ISO | généré |
budget | 1–10 — ce que vaut le contrat | 5 |
prominence | 1–10 — la fréquence d’apparition de la marque et la difficulté à la décrocher | 5 |
color | #RRGGBB | — |
logo | Un nom de ligne images, ou un chemin relatif à mods/ | un logo procédural |
team_id / team | Grilles imposées : signe cette marque avec cette écurie à la saison 1 — par identifiant stable, ou par nom | marché ouvert |
id | Clé stable de cette ligne | — |
suppliers
Une ligne dont la category n’est pas l’une des trois est entièrement ignorée — c’est la seule exigence stricte de la table.
| Colonne | Signification | Si vous l’omettez |
|---|---|---|
name | Obligatoire | — |
category | engine · tires · fuel | ligne ignorée |
origin, color, logo | Comme pour les sponsors | généré |
budget, size | 1–10 | 5 |
power, reliability, endurance, potential, performance, heat, efficiency | Statistiques techniques 1–10 sous leurs vrais noms — seulement celles que sa catégorie possède (voir ci-dessous) | 0 = généré |
stat_a … stat_d | Les quatre mêmes valeurs dans des emplacements génériques, conservés pour les anciens builds. Une colonne nommée l’emporte sur son emplacement générique | 0 = généré |
money_per_gp | Valeur du contrat en $/GP. Positif = partenariat (ils vous paient), négatif = client (vous les payez) | 0 = généré |
contract | partnership · client — l’emporte sur le signe de money_per_gp quand les deux sont renseignés | le signe décide |
duration | Durée du contrat en saisons | 0 = généré |
team_id / team | Grilles imposées : une liste — Scarlet:partner; Azure:customer; Emerald — un fournisseur peut soutenir plusieurs écuries, chacune à son niveau. Un partenaire par fournisseur ; un fournisseur par catégorie et par écurie | marché ouvert |
id | Clé stable de cette ligne | — |
| Catégorie | emplacement A | emplacement B | emplacement C | emplacement D |
|---|---|---|---|---|
| engine | power | reliability | endurance (affiché, non simulé) | potential (affiché, non simulé) |
| tires | performance | endurance | reliability | heat |
| fuel | efficiency | — | — | — |
Deux choses qu’un pack ne peut délibérément pas fixer :
- L’architecture moteur (V8/V10/V12) n’est pas stockée sur le fournisseur — le jeu cherche le nom dans son vivier mondial de constructeurs. Un nom inconnu de ce vivier retombe sur V10.
- Les traits cachés des pneus sont tirés du nom de la marque et de la saison : renommer un manufacturier les retire au sort.
circuits et calendar
Ces deux tables construisent une saison. Les circuits viennent de l’Éditeur de circuits : l’éditeur enregistre un fichier .circuit, et l’Éditeur de mods l’importe dans le pack.
Chaque circuit porte un id, et une manche du calendrier pointe dessus avec circuit_id (son nom fonctionne encore en repli).
circuits contient le tracé lui-même — son nom, son lieu, sa longueur cible, son préréglage visuel, son caractère, la ligne médiane dessinée, et les marqueurs facultatifs de départ/arrivée et de stands. calendar contient les manches, dans l’ordre : chaque manche est soit une manche circuit (nommant l’un de vos tracés), soit une manche auto (un tracé généré d’un caractère et d’une longueur donnés).
Un pack porteur d’un calendrier remplace la saison par celui-ci. Un pack porteur de circuits mais sans calendrier verse ses tracés dans le pool mondial et les laisse prendre les manches de la saison.
Deux champs sont enregistrés à titre indicatif mais non simulés : l’year d’un circuit, et ses notes downforce / tire_wear / overtaking — en jeu, ces trois-là sont dérivées du character du tracé.
images
name (la clé vers laquelle pointent les lignes) plus les octets du PNG. Les logos sont créés en 195×195 ; un sprite de voiture personnalisé est une vue de profil orientée vers la droite sur fond transparent, de 256 px de haut. Le jeu les décompresse dans mods/.cache/ à la première utilisation.
Ce qui reste toujours généré
| Section | Un pack remplace | Le jeu continue de générer |
|---|---|---|
| Écuries | Nom, pays, réputation, budget, profil de comportement, couleurs, voiture, livrée, combinaison, logo | L’évolution du budget, le comportement de l’effectif, et (hors mode imposé) les infrastructures |
| Pilotes | Nom, code, pays, âge, les six aptitudes et leurs plafonds, courbes, traits, portrait, casque, salaire, renommée | L’ambition, les objectifs de saison, la personnalité cachée |
| Sponsors | Nom, secteur, couleur, budget, notoriété, origine, logo | Les termes des contrats, le comportement du marché |
| Fournisseurs | Nom, catégorie, couleur, budget, taille, origine, logo, statistiques techniques, termes du contrat | Le comportement du marché, les traits cachés des pneus |
Pièges à connaître
- Les liaisons suivent l’identifiant, pas le nom. Un pilote, un sponsor ou un fournisseur pointe vers l’
idstable d’une écurie : renommer l’écurie les conserve, et deux écuries peuvent partager un nom (seule la lecture en souffre — classements et actualités l’affichent alors deux fois). Un pack écrit avant l’existence des identifiants, ou écrit à la main avec les seuls noms, se résout encore par nom et garde l’ancien comportement : renommez l’écurie dans ce cas et le pilote rejoint le vivier d’agents libres. Ouvrir une fois le pack dans l’Éditeur de mods le met à niveau. - Deux pilotes par écurie, un par baquet. Une écurie avec deux pilotes
primarylaisse la voiture 2 vide, et une voiture sans pilote ne prend pas le départ. L’onglet Audit de l’éditeur existe surtout pour ça. - Les codes pilotes doivent être uniques. Un doublon est renommé au chargement, silencieusement, et tout ce qui est indexé par code suit le renommage.
- Le fichier du pack doit rester où il est. Les logos et sprites de voiture personnalisés y sont lus ; une carrière lancée avec un pack qui disparaît ensuite les perd.
- Un pack ne s’applique qu’à la création de la carrière. Modifier un pack ne change jamais une carrière déjà en cours — lancez-en une nouvelle pour voir le changement.