Wiki en construcción. Muchos conceptos de aquí provienen de la alpha 0.2 y todavía pueden cambiar. La wiki se finalizará para la versión 1.0 — por ahora está para ayudar a los testers cerrados y, más adelante, a los jugadores del acceso anticipado a orientarse. Para la información más actual y fiable, únete al Discord — es donde se anuncian los cambios primero y donde puedes preguntar directamente.

Únete al Discord para las últimas novedades

Packs de mods

Qué puede cambiar un pack de contenido — equipos, pilotos, patrocinadores, proveedores, circuitos, calendario — en qué se diferencian extend y replace, y la estructura completa del archivo.

En esta página

Un pack de contenido es un solo archivo: una base de datos SQLite que vive en tu carpeta de mods (%APPDATA%\TheUndercut\mods\ en Windows — ver dónde van los archivos). Lleva las filas y las imágenes de los logos, de modo que un pack es una única cosa que compartir, respaldar o publicar.

mods/
  my_pack.db     ← el mod entero

No hace falta saber SQL para crear uno: el Editor de mods que viene con el juego escribe exactamente este archivo. Si sí quieres abrir el archivo tú mismo — para cambios masivos, o para generar un pack desde un script — la referencia SQL documenta cada tabla y cada columna. Esta página documenta lo que el archivo significa, que es lo que necesitas tanto si usas el editor, como si escribes un script propio o lees el pack de otra persona.

La regla de oro del formato: cada tabla y cada columna es opcional. Un pack que solo renombra dos equipos es válido. Todo lo que dejes fuera sigue siendo procedural, y un pack creado para una versión anterior sigue cargando en un juego más nuevo.

El formato actual es v2. Un pack registra en qué versión se escribió, y el juego lo indica en la fila del pack cuando solo lo entiende a medias: nunca te quedas preguntándote por qué una parte del pack no hizo nada. El Editor de mods actualiza un pack antiguo en cuanto lo abres.


Qué hay dentro de un pack

my_pack.db meta nombre · modos · escenario teams la parrilla drivers sponsors suppliers nombre de equipo circuits calendar nombre de circuito images blobs PNG nombre del logo

Todo dentro de un pack se enlaza por nombre: no hay ids ocultos.

TablaContiene
metaLos ajustes del propio pack: su nombre, los modos de sección, el escenario, el año inicial
teamsLa parrilla — identidad, colores, coche, presupuesto y (packs impuestos) infraestructuras y palmarés
driversPerfiles de pilotos — aptitudes, techos, curvas de crecimiento, rasgos, retrato, salario, asiento
sponsorsMarcas disponibles en el mercado de patrocinio
suppliersFabricantes de motores, neumáticos y combustible
circuitsTrazados importados de archivos .circuit — ver modding de circuitos
calendarLas rondas de la temporada, en orden
imagesLos archivos PNG a los que apuntan las filas: logos y sprites de coche personalizados

extend o replace

Cada sección lleva un modo, guardado en meta como <sección>_mode:

extend tus entradas primero, el juego sigue generando el resto las tuyas generadas

replace solo tus entradas — no se genera nada para esa sección

extend es el valor por defecto y es el propio patrón del juego base: un núcleo estático más relleno procedural. replace es lo que quieres para una temporada real completa.

Qué significa exactamente replace depende de la sección — conviene saberlo antes de preguntarte por qué ha sobrevivido un proveedor:

Secciónreplace hace
teamsRecorta la parrilla a tu lista: acaba teniendo exactamente la longitud de tu tabla de equipos
driversEl grupo de pilotos es solo el tuyo; no se genera nadie más para tu serie
sponsorsEl mercado de patrocinio es solo el tuyo
suppliersSolo se sustituyen las categorías que cubres. Un pack con dos fabricantes de motores y ninguno de neumáticos conserva los de neumáticos generados, porque una temporada no puede correrse sin uno
circuitsSe aplica al grupo de circuitos del mundo, las sedes de las que beben los calendarios futuros. replace significa que el mundo nunca vuelve a trazados generados; en todo caso, el calendario que construyas siempre corre los trazados que colocaste en él

Una cosa que replace no hace

Los pilotos de un pack llenan tu serie. El mundo también hace correr diez campeonatos no jugables, cada uno con una parrilla que llenar, y el juego completa el grupo de pilotos para que sus asientos no queden vacíos; por eso un pack con parrilla propia completa puede seguir rodeado de agentes libres generados.

meta.active_series es la respuesta: enumera los campeonatos que el mundo debe hacer correr (PFS es el jugable) y el resto de series se apaga. Desmarca todo menos la tuya y los pilotos de tu pack serán las únicas personas del mundo. No digas nada y correrán todas las series, como antes.


Dos maneras de empezar una carrera con un pack

meta.scenario decide qué ocurre cuando el jugador elige tu pack.

EscenarioLo que obtiene el jugador
New Series (por defecto)El jugador crea un equipo nuevo que se suma a la parrilla y juega la pretemporada. Tus equipos son rivales.
ImposedLa parrilla queda fija tal como la creaste: cada equipo con su personal, su material y sus contratos. El jugador toma uno de tus equipos y la temporada arranca en la carrera 1, sin pretemporada.

Un pack impuesto desbloquea campos que de otro modo no tendrían sentido, y esa es la única diferencia en el formato: niveles de infraestructura, palmarés de equipos y pilotos, año de fundación y los vínculos de «firmado con» que rellenan por adelantado los pilotos, patrocinadores y proveedores de cada equipo. Usa replace en equipos para una parrilla impuesta, de modo que solo corran los tuyos.


meta — los ajustes del pack

ClaveValorPor defecto
nameLo que muestra el selector de packsel nombre del archivo
authorTexto libre—
schema_versionVersión del formato de pack con la que se escribió este archivo (actual: 2)1
min_game_versionBuild del juego que necesita el pack. Un juego anterior lo indica en la fila del pack en vez de cargarlo a medias—
scenarionew_series · imposednew_series
start_yearAño natural de la temporada 1 — un pack puede arrancar en cualquier época1990
teams_mode, drivers_mode, sponsors_mode, suppliers_mode, circuits_modeextend · replaceextend
active_seriesCampeonatos que hace correr el mundo, separados por comas (PFS,PF2)ausente = todos
rulesIds de los reglamentos de la serie, separados por comas (escala de puntos, regla del 107 % en clasificación)los valores por defecto del juego

teams

Una fila sin name se salta. Los equipos se aplican a la parrilla en orden, así que la primera fila es el primer equipo.

ColumnaSignificadoSi la omites
idClave estable. Todos los vínculos del pack apuntan a ella, así que un equipo puede renombrarse sin perder sus pilotos, patrocinadores y proveedoresse usa el nombre visible
nameNombre del equipo — lo que el juego muestra en todas partesobligatorio
countryNombre de país o código ISOgenerado
budget_tiersmall · medium · large — el perfil de comportamiento: reservas de caja de la IA, tope de infraestructuras, prestigio, ambición en I+Ddeducido del presupuesto
budget_musdCaja inicial, en millones0 = la cantidad propia del nivel (40 M$ / 60 M$ / 90 M$)
reputation0–1000 = generado
color1, color2, color3#RRGGBB — las tres zonas de decoraciónvacío = conservar la decoración generada
car_index0–11, qué modelo de coche en vista lateralvacío = conservar el modelo generado (0 es un modelo real, así que no puede significar «sin definir»)
car_imageNombre de una fila images: un sprite lateral propio que sustituye al modelomodelo integrado
liveryPatrón de decoración cenital usado en carreras en vivo255 = elige el juego
suitMono que visten los pilotos del equipo255 = por piloto
logoUn nombre de fila images, o un número (uno de los logos que trae el juego), o una ruta relativa a mods/una marca procedural a partir del nombre del equipo
infra_engineering … infra_academyLos nueve niveles de departamento (la academia llega a 3, el resto a 10). En una parrilla impuesta, estos son la fuerza base del coche0 = generado
career_wins, career_titles, best_championship, founding_yearRegistro histórico mostrado en el perfil del equipo en la temporada 10 = por defecto (año de fundación 1990)
historyFilas temporada a temporada, temporada:posición:victorias, unidas por ;ninguna

drivers

Una fila sin nombre ni apellido se salta.

ColumnaSignificadoSi la omites
idClave estable de esta fila—
first_name, last_name—uno de los dos obligatorio
codeTres letras, único en todo el pack: el juego indexa a los pilotos por código y renombra un choque en silencioconstruido desde el apellido
countryNombre de país o código ISOgenerado
age1–55. Por debajo de 16 es exclusivo de mods: una promesa infantil envejece cada temporada, permanece oculta en Ojeadores hasta los 14 y no puede sentarse antes de que la serie lo permita (18 en la PFS)25
intelligence, pace, consistency, adaptability, stamina, aggressivityAptitudes, 1–2010
pot_* (las mismas seis)El techo de cada estadística. Nunca se aplica por debajo de la aptitud misma0 = generado
curve_* (las mismas seis)La forma de crecimiento de la estadística con la edad — ver abajo255 = la forma por defecto de esa estadística
traitsEl formato de rasgos del propio juego, pares tipo:nivel — créalos en el editorgenerados
fameRenombre inicial 0–100. Un valor inicial: el juego puede seguir moviéndolo0 = calculado a partir de las aptitudes
salarySalario pedido, por temporada500000
face_sheet, face_index, helmet_index, helmet_hue_0/1/2Retrato y casco255 = generado
team_idSienta a este piloto en ese equipo en la temporada 1, por el id estable del equipo — el vínculo que el juego resuelve primero—
teamLo mismo, por el nombre visible del equipo. Se usa cuando no hay team_idagente libre
roleprimary · secondary · reserve — el asiento es el coche: el titular conduce el coche 1, el segundo el coche 2primary
contract_yearsDuración del contrato en temporadas0 = 2
career_starts, career_wins, career_podiums, career_titles, best_finishPalmarés mostrado desde la temporada 10 = ninguno

Curvas de crecimiento

Cada aptitud se desarrolla con la edad según una de cinco formas. El juego siempre las tuvo, una fija por estadística; un pack puede asignar cualquier forma a cualquier estadística.

CurvaMejoraDeclinaPor defecto para
Pico tempranorápido hasta 26, lento hasta 30, luego nuncadesde 30Ritmo
Físicahasta 28, luego nuncadesde 28Resistencia
Cerebralsiempre, frenando tras 30 y luego 38nuncaInteligencia, Adaptabilidad
Experienciahasta 30, a media velocidad hasta 34, luego nuncadesde 34Regularidad
Juventudsolo hasta 24desde 28Agresividad

La curva es la forma, no la velocidad: lo rápido que una estadística cierra la distancia con su techo sigue siendo propiedad de la estadística.


sponsors

ColumnaSignificadoSi la omites
nameNombre de la marca — obligatorio—
sectorautomotive, technology, energy, finance, luxury, fashion, telecom, beverage, insurance, aviation, industry, retailgenerado
originNombre de país o código ISOgenerado
budget1–10 — lo que vale el acuerdo5
prominence1–10 — con qué frecuencia aparece la marca y lo difícil que es conseguirla5
color#RRGGBB—
logoUn nombre de fila images, o una ruta relativa a mods/un logo procedural
team_id / teamParrillas impuestas: firma esta marca con ese equipo en la temporada 1 — por id estable o por nombremercado abierto
idClave estable de esta fila—

suppliers

Una fila cuya category no sea una de las tres se salta por completo: es el único requisito estricto de la tabla.

ColumnaSignificadoSi la omites
nameObligatorio—
categoryengine · tires · fuelfila saltada
origin, color, logoComo en los patrocinadoresgenerado
budget, size1–105
power, reliability, endurance, potential, performance, heat, efficiencyEstadísticas técnicas 1–10 con sus nombres reales: solo las que tiene su categoría (ver abajo)0 = generado
stat_a … stat_dLos mismos cuatro valores en huecos genéricos, conservados para builds antiguas. Una columna con nombre gana a su hueco genérico0 = generado
money_per_gpValor del acuerdo en $/GP. Positivo = asociación (te pagan), negativo = cliente (les pagas)0 = generado
contractpartnership · client — gana sobre el signo de money_per_gp cuando ambos están puestosdecide el signo
durationDuración del contrato en temporadas0 = generado
team_id / teamParrillas impuestas: una lista — Scarlet:partner; Azure:customer; Emerald — un proveedor puede respaldar a varios equipos, cada uno en su nivel. Un socio por proveedor; un proveedor por categoría y equipomercado abierto
idClave estable de esta fila—
Categoríahueco Ahueco Bhueco Chueco D
enginepowerreliabilityendurance (se muestra, no se simula)potential (se muestra, no se simula)
tiresperformanceendurancereliabilityheat
fuelefficiency———

Dos cosas que un pack deliberadamente no puede fijar:

  • La arquitectura del motor (V8/V10/V12) no se guarda en el proveedor: el juego busca el nombre en su grupo mundial de fabricantes. Un nombre que ese grupo no conoce recae en V10.
  • Los rasgos ocultos de los neumáticos se generan a partir del nombre de la marca y la temporada, así que renombrar un fabricante vuelve a tirarlos.

circuits y calendar

Estas dos construyen una temporada. Los circuitos vienen del Editor de circuitos: el editor guarda un archivo .circuit y el Editor de mods lo importa al pack.

Cada circuito lleva un id, y una ronda del calendario apunta a él con circuit_id (su nombre sigue funcionando como recurso).

circuits guarda el trazado en sí — su nombre, lugar, longitud objetivo, preajuste visual, carácter, la línea central dibujada y los marcadores opcionales de salida/meta y boxes. calendar guarda las rondas, en orden: cada ronda es una ronda circuit (nombrando uno de tus trazados) o una ronda auto (un trazado generado de un carácter y una longitud dados).

Un pack con calendario sustituye la temporada por él. Un pack con circuitos pero sin calendario mete sus trazados en el grupo del mundo y deja que ocupen las rondas de la temporada.

Dos campos se registran a título informativo pero no se simulan: el year de un circuito y sus valores downforce / tire_wear / overtaking; en juego, esos tres se derivan del character del trazado.


images

name (la clave a la que apuntan las filas) más los bytes del PNG. Los logos se crean a 195×195; un sprite de coche personalizado es una vista lateral mirando a la derecha sobre fondo transparente, de 256 px de alto. El juego los descomprime en mods/.cache/ en el primer uso.


Lo que siempre sigue siendo generado

SecciónUn pack sustituyeEl juego sigue generando
EquiposNombre, país, reputación, presupuesto, perfil de comportamiento, colores, coche, decoración, mono, logoLa evolución del presupuesto, el comportamiento de la plantilla y (fuera del modo impuesto) las infraestructuras
PilotosNombre, código, país, edad, las seis aptitudes y sus techos, curvas, rasgos, retrato, casco, salario, famaLa ambición, los objetivos de temporada, la personalidad oculta
PatrocinadoresNombre, sector, color, presupuesto, notoriedad, origen, logoLos términos de los contratos, el comportamiento del mercado
ProveedoresNombre, categoría, color, presupuesto, tamaño, origen, logo, estadísticas técnicas, términos del acuerdoEl comportamiento del mercado, los rasgos ocultos de los neumáticos

Trampas que conviene conocer

  • Los vínculos siguen al id, no al nombre. Un piloto, patrocinador o proveedor apunta al id estable de un equipo, así que renombrarlo los conserva, y dos equipos pueden compartir nombre (solo sufre la lectura: clasificaciones y noticias lo muestran dos veces). Un pack escrito antes de que existieran los ids, o hecho a mano solo con nombres, sigue resolviéndose por nombre y mantiene el comportamiento antiguo: renombra ahí el equipo y el piloto pasa al grupo de agentes libres. Abrir el pack una vez en el Editor de mods lo actualiza.
  • Dos pilotos por equipo, uno por asiento. Un equipo con dos pilotos primary deja el coche 2 vacío, y un coche sin piloto no toma la salida. La pestaña Auditoría del editor existe sobre todo por esto.
  • Los códigos de piloto deben ser únicos. Un choque se renombra al cargar, en silencio, y todo lo indexado por código sigue el cambio.
  • El archivo del pack debe quedarse donde está. Los logos y los sprites de coche personalizados se leen de él; una carrera empezada con un pack que luego desaparece los pierde.
  • Un pack solo se aplica al crear la carrera. Editar un pack nunca cambia una carrera ya en marcha: empieza otra para ver el cambio.