Wiki en construction. De nombreux concepts décrits ici viennent de l'alpha 0.2 et peuvent encore changer. Le wiki sera finalisé pour la version 1.0 — pour l'instant il sert à aider les testeurs fermés puis, plus tard, les joueurs de l'accès anticipé à s'y retrouver. Pour les informations les plus à jour et les plus fiables, rejoignez le Discord — c'est là que les changements sont annoncés en premier et que vous pouvez poser vos questions directement.

Rejoindre le Discord pour les dernières infos

Packs de mods

Ce qu'un pack de contenu peut changer — écuries, pilotes, sponsors, fournisseurs, circuits, calendrier — la différence entre extend et replace, et la structure complète du fichier.

Sur cette page

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

my_pack.db meta nom · modes · scénario teams la grille drivers sponsors suppliers nom d'écurie circuits calendar nom de circuit images blobs PNG nom du logo

Tout, dans un pack, est lié par le nom — pas d’identifiants cachés.

TableContient
metaLes réglages du pack : son nom, les modes de section, le scénario, l’année de départ
teamsLa grille — identité, couleurs, voiture, budget, et (packs imposés) infrastructures et palmarès
driversLes profils de pilotes — aptitudes, plafonds, courbes de progression, traits, portrait, salaire, baquet
sponsorsLes marques disponibles sur le marché des sponsors
suppliersMotoristes, manufacturiers de pneus et pétroliers
circuitsLes tracés importés depuis des fichiers .circuit — voir modding de circuits
calendarLes manches de la saison, dans l’ordre
imagesLes 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 vos entrées d'abord, le jeu génère toujours le reste les vôtres générées

replace seulement vos entrées — rien n’est généré pour cette section

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 :

Sectionreplace fait
teamsRéduit la grille à votre liste — la grille fait exactement la longueur de votre table d’écuries
driversLe vivier de pilotes n’est que le vôtre ; personne d’autre n’est généré pour votre série
sponsorsLe marché des sponsors n’est que le vôtre
suppliersSeules 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
circuitsS’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énarioCe 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.
ImposedLa 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éValeurDéfaut
nameAffiché dans le sélecteur de packsle nom du fichier
authorTexte libre—
schema_versionVersion du format de pack dans laquelle ce fichier a été écrit (actuelle : 2)1
min_game_versionBuild du jeu exigé par le pack. Un jeu plus ancien le signale sur la ligne du pack au lieu de le charger à moitié—
scenarionew_series · imposednew_series
start_yearAnnée civile de la saison 1 — un pack peut s’ouvrir sur n’importe quelle époque1990
teams_mode, drivers_mode, sponsors_mode, suppliers_mode, circuits_modeextend · replaceextend
active_seriesChampionnats que le monde fait tourner, séparés par des virgules (PFS,PF2)absent = tous
rulesIdentifiants 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.

ColonneSignificationSi vous l’omettez
idClé stable. Chaque liaison du pack pointe dessus, si bien qu’une écurie peut être renommée sans perdre ses pilotes, sponsors et fournisseursle nom affiché est utilisé à la place
nameNom de l’écurie — ce que le jeu affiche partoutobligatoire
countryNom de pays ou code ISOgénéré
budget_tiersmall · medium · large — le profil de comportement : réserves de trésorerie de l’IA, plafond d’infrastructures, prestige, ambition en R&Ddéduit du budget
budget_musdTrésorerie de départ, en millions0 = le montant propre au palier (40 M$ / 60 M$ / 90 M$)
reputation0–1000 = généré
color1, color2, color3#RRGGBB — les trois zones de livréelaissé vide = conserver la livrée générée
car_index0–11, le modèle de voiture en vue de profillaissé vide = conserver le modèle généré (0 est un vrai modèle, il ne peut donc pas signifier « non défini »)
car_imageNom d’une ligne images : un sprite de profil personnalisé remplaçant le modèlemodèle intégré
liveryMotif de livrée vu du dessus, porté en course live255 = le jeu choisit
suitCombinaison portée par les pilotes de l’écurie255 = par pilote
logoUn 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_academyLes 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 voiture0 = généré
career_wins, career_titles, best_championship, founding_yearPalmarès historique affiché sur le profil de l’écurie à la saison 10 = défaut (année de fondation 1990)
historyLignes saison par saison, saison:position:victoires, jointes par ;aucune

drivers

Une ligne sans prénom ni nom est ignorée.

ColonneSignificationSi vous l’omettez
idClé stable de cette ligne—
first_name, last_name—l’un des deux obligatoire
codeTrois lettres, unique dans tout le pack — le jeu indexe les pilotes par code et renomme silencieusement un doublonconstruit à partir du nom de famille
countryNom de pays ou code ISOgénéré
age1–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, aggressivityAptitudes, 1–2010
pot_* (les six mêmes)Le plafond de chaque statistique. Jamais appliqué en dessous de l’aptitude elle-même0 = généré
curve_* (les six mêmes)La forme de progression de la statistique avec l’âge — voir ci-dessous255 = la forme par défaut de cette statistique
traitsLe format de traits propre au jeu, des paires type:palier — à créer dans l’éditeurgénérés
fameRenommée de départ 0–100. Une valeur de départ : le jeu peut encore la faire bouger0 = calculé d’après les aptitudes
salarySalaire demandé, par saison500000
face_sheet, face_index, helmet_index, helmet_hue_0/1/2Portrait et casque255 = généré
team_idTitularise ce pilote dans cette écurie à la saison 1, par l’id stable de l’écurie — la liaison que le jeu résout en premier—
teamIdem, par le nom affiché de l’écurie. Utilisé quand il n’y a pas de team_idagent libre
roleprimary · secondary · reserve — le baquet, c’est la voiture : le titulaire pilote la voiture 1, le second la voiture 2primary
contract_yearsDurée du contrat en saisons0 = 2
career_starts, career_wins, career_podiums, career_titles, best_finishPalmarès affiché dès la saison 10 = 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.

CourbeProgresseDéclineDéfaut pour
Pic précocevite jusqu’à 26, lentement jusqu’à 30, puis plus du toutà partir de 30Rythme
Physiquejusqu’à 28, puis plus du toutà partir de 28Endurance
Cérébraletoujours, en ralentissant après 30 puis 38jamaisIntelligence, Adaptabilité
Expériencejusqu’à 30, à mi-vitesse jusqu’à 34, puis plus du toutà partir de 34Régularité
Jeunesseseulement jusqu’à 24à partir de 28Agressivité

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

ColonneSignificationSi vous l’omettez
nameNom de la marque — obligatoire—
sectorautomotive, technology, energy, finance, luxury, fashion, telecom, beverage, insurance, aviation, industry, retailgénéré
originNom de pays ou code ISOgénéré
budget1–10 — ce que vaut le contrat5
prominence1–10 — la fréquence d’apparition de la marque et la difficulté à la décrocher5
color#RRGGBB—
logoUn nom de ligne images, ou un chemin relatif à mods/un logo procédural
team_id / teamGrilles imposées : signe cette marque avec cette écurie à la saison 1 — par identifiant stable, ou par nommarché ouvert
idClé 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.

ColonneSignificationSi vous l’omettez
nameObligatoire—
categoryengine · tires · fuelligne ignorée
origin, color, logoComme pour les sponsorsgénéré
budget, size1–105
power, reliability, endurance, potential, performance, heat, efficiencyStatistiques 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_dLes 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érique0 = généré
money_per_gpValeur du contrat en $/GP. Positif = partenariat (ils vous paient), négatif = client (vous les payez)0 = généré
contractpartnership · client — l’emporte sur le signe de money_per_gp quand les deux sont renseignésle signe décide
durationDurée du contrat en saisons0 = généré
team_id / teamGrilles 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 écuriemarché ouvert
idClé stable de cette ligne—
Catégorieemplacement Aemplacement Bemplacement Cemplacement D
enginepowerreliabilityendurance (affiché, non simulé)potential (affiché, non simulé)
tiresperformanceendurancereliabilityheat
fuelefficiency———

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é

SectionUn pack remplaceLe jeu continue de générer
ÉcuriesNom, pays, réputation, budget, profil de comportement, couleurs, voiture, livrée, combinaison, logoL’évolution du budget, le comportement de l’effectif, et (hors mode imposé) les infrastructures
PilotesNom, code, pays, âge, les six aptitudes et leurs plafonds, courbes, traits, portrait, casque, salaire, renomméeL’ambition, les objectifs de saison, la personnalité cachée
SponsorsNom, secteur, couleur, budget, notoriété, origine, logoLes termes des contrats, le comportement du marché
FournisseursNom, catégorie, couleur, budget, taille, origine, logo, statistiques techniques, termes du contratLe 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’id stable 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 primary laisse 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.