Wiki em construção. Muitos conceitos aqui vêm da alpha 0.2 e ainda podem mudar. A wiki será finalizada para a versão 1.0 — por agora serve para ajudar os testadores fechados e, mais tarde, os jogadores do acesso antecipado a orientar-se. Para as informações mais atuais e fiáveis, entre no Discord — é lá que as mudanças são anunciadas primeiro e onde pode perguntar diretamente.

Entrar no Discord para as últimas novidades

Pacotes de mods

O que um pacote de conteúdo pode mudar — equipas, pilotos, patrocinadores, fornecedores, circuitos, calendário — em que diferem extend e replace, e a estrutura completa do ficheiro.

Nesta página

Um pacote de conteúdo é um único ficheiro: uma base de dados SQLite colocada na sua pasta de mods (%APPDATA%\TheUndercut\mods\ no Windows — ver onde ficam os ficheiros). Leva as linhas e as imagens dos logótipos, por isso um pacote é uma coisa só para partilhar, guardar ou publicar.

mods/
  my_pack.db     ← a mod inteira

Não é preciso saber SQL para criar um — o Editor de mods que vem com o jogo escreve exatamente este ficheiro. Se mesmo assim quiser abrir o ficheiro por si — para alterações em massa, ou para gerar um pacote a partir de um script — a referência SQL documenta cada tabela e cada coluna. Esta página documenta o que o ficheiro significa, que é o que precisa quer use o editor, um script seu, ou leia o pacote de outra pessoa.

A regra de ouro do formato: cada tabela e cada coluna é opcional. Um pacote que apenas renomeia duas equipas é válido. Tudo o que deixar de fora continua procedural, e um pacote criado para uma versão anterior continua a carregar num jogo mais recente.

O formato atual é a v2. Um pacote regista em que versão foi escrito, e o jogo indica-o na linha do pacote quando só o percebe em parte — nunca fica a pensar porque é que uma parte do pacote não fez nada. O Editor de mods atualiza um pacote antigo assim que o abre.


O que há dentro de um pacote

my_pack.db meta nome · modos · cenário teams a grelha drivers sponsors suppliers nome da equipa circuits calendar nome do circuito images blobs PNG nome do logótipo

Tudo dentro de um pacote está ligado pelo nome — não há ids escondidos.

TabelaContém
metaAs definições do pacote: o nome, os modos de secção, o cenário, o ano inicial
teamsA grelha — identidade, cores, carro, orçamento e (pacotes impostos) infraestruturas e palmarés
driversPerfis de pilotos — aptidões, tetos, curvas de crescimento, traços, retrato, salário, lugar
sponsorsMarcas disponíveis no mercado de patrocínio
suppliersFabricantes de motores, pneus e combustível
circuitsTraçados importados de ficheiros .circuit — ver modding de circuitos
calendarAs rondas da época, por ordem
imagesOs ficheiros PNG para os quais as linhas apontam: logótipos e sprites de carro personalizados

extend ou replace

Cada secção tem um modo, guardado em meta como <secção>_mode:

extend as suas entradas primeiro, o jogo continua a gerar o resto as suas geradas

replace só as suas entradas — nada é gerado para essa secção

extend é o valor predefinido e é o próprio padrão do jogo base: um núcleo estático mais enchimento procedural. replace é o que quer para uma época real completa.

O que replace significa ao certo depende da secção — vale a pena saber antes de se perguntar porque é que um fornecedor sobreviveu:

Secçãoreplace faz
teamsCorta a grelha para a sua lista — fica exatamente com o comprimento da sua tabela de equipas
driversA bolsa de pilotos é só a sua; mais ninguém é gerado para a sua série
sponsorsO mercado de patrocínio é só o seu
suppliersSó as categorias que cobre são substituídas. Um pacote com dois fabricantes de motores e nenhum de pneus mantém os de pneus gerados, porque não se corre uma época sem um
circuitsAplica-se ao conjunto de circuitos do mundo — os palcos de onde os calendários futuros saem. replace significa que o mundo nunca volta a traçados gerados; de qualquer forma, o calendário que construir corre sempre os traçados que lá colocou

Uma coisa que replace não faz

Os pilotos de um pacote preenchem a sua série. O mundo também faz correr dez campeonatos não jogáveis, cada um com uma grelha para encher, e o jogo reforça a bolsa de pilotos para que os lugares deles não fiquem vazios — é por isso que um pacote com uma grelha completa sua pode continuar rodeado de agentes livres gerados.

meta.active_series é a resposta: liste os campeonatos que o mundo deve fazer correr (PFS é o jogável) e todas as outras séries ficam desligadas. Desmarque tudo menos a sua e os pilotos do seu pacote serão as únicas pessoas do mundo. Não diga nada e todas as séries correm, como antes.


Duas formas de um pacote iniciar uma carreira

meta.scenario decide o que acontece quando o jogador escolhe o seu pacote.

CenárioO que o jogador recebe
New Series (predefinido)O jogador cria uma equipa nova que entra na grelha e joga a pré-época. As suas equipas são as rivais.
ImposedA grelha fica fixa tal como a criou — cada equipa com pessoal, material e contratos. O jogador assume uma das suas equipas e a época abre na corrida 1, sem pré-época.

Um pacote imposto desbloqueia campos que de outro modo não fariam sentido, e essa é a única diferença no formato: níveis de infraestrutura, palmarés de equipas e pilotos, ano de fundação e as ligações de «contratado por» que pré-preenchem os pilotos, patrocinadores e fornecedores de cada equipa. Use replace nas equipas para uma grelha imposta, para que só as suas corram.


meta — as definições do pacote

ChaveValorPredefinição
nameMostrado no seletor de pacoteso nome do ficheiro
authorTexto livre—
schema_versionVersão do formato de pacote em que este ficheiro foi escrito (atual: 2)1
min_game_versionBuild do jogo de que o pacote precisa. Um jogo mais antigo indica-o na linha do pacote em vez de o carregar meio aplicado—
scenarionew_series · imposednew_series
start_yearAno civil da época 1 — um pacote pode abrir em qualquer era1990
teams_mode, drivers_mode, sponsors_mode, suppliers_mode, circuits_modeextend · replaceextend
active_seriesCampeonatos que o mundo faz correr, separados por vírgulas (PFS,PF2)ausente = todos
rulesIds dos conjuntos de regras da série, separados por vírgulas (escala de pontos, regra dos 107 % na qualificação)as predefinições do jogo

teams

Uma linha sem name é ignorada. As equipas são aplicadas à grelha por ordem, por isso a primeira linha é a primeira equipa.

ColunaSignificadoSe a omitir
idChave estável. Todas as ligações do pacote apontam para ela, por isso uma equipa pode ser renomeada sem perder pilotos, patrocinadores e fornecedoresé usado o nome visível
nameNome da equipa — o que o jogo mostra por todo o ladoobrigatório
countryNome do país ou código ISOgerado
budget_tiersmall · medium · large — o perfil de comportamento: reservas de caixa da IA, teto de infraestruturas, prestígio, ambição em I&Ddeduzido do orçamento
budget_musdCaixa inicial, em milhões0 = o montante próprio do escalão (40 M$ / 60 M$ / 90 M$)
reputation0–1000 = gerada
color1, color2, color3#RRGGBB — as três zonas da decoraçãovazio = manter a decoração gerada
car_index0–11, qual o modelo de carro em vista lateralvazio = manter o modelo gerado (0 é um modelo real, por isso não pode significar «por definir»)
car_imageNome de uma linha images: um sprite lateral próprio que substitui o modelomodelo integrado
liveryPadrão de decoração visto de cima, usado nas corridas em direto255 = o jogo escolhe
suitFato usado pelos pilotos da equipa255 = por piloto
logoUm nome de linha images, ou um número (um dos logótipos que vêm com o jogo), ou um caminho relativo a mods/uma marca procedural a partir do nome da equipa
infra_engineering … infra_academyOs nove níveis de departamento (a academia vai até 3, os restantes até 10). Numa grelha imposta, estes são a força base do carro0 = gerado
career_wins, career_titles, best_championship, founding_yearRegisto histórico mostrado no perfil da equipa na época 10 = predefinição (ano de fundação 1990)
historyLinhas época a época, época:posição:vitórias, unidas por ;nenhuma

drivers

Uma linha sem nome próprio nem apelido é ignorada.

ColunaSignificadoSe a omitir
idChave estável desta linha—
first_name, last_name—um dos dois obrigatório
codeTrês letras, único em todo o pacote — o jogo indexa os pilotos por código e renomeia um conflito em silêncioconstruído a partir do apelido
countryNome do país ou código ISOgerado
age1–55. Abaixo dos 16 é exclusivo das mods: uma promessa criança envelhece a cada época, fica invisível no Recrutamento até aos 14 e não pode ser alinhada antes do que a série permite (18 na PFS)25
intelligence, pace, consistency, adaptability, stamina, aggressivityAptidões, 1–2010
pot_* (as mesmas seis)O teto de cada estatística. Nunca aplicado abaixo da própria aptidão0 = gerado
curve_* (as mesmas seis)A forma de crescimento da estatística com a idade — ver abaixo255 = a forma predefinida dessa estatística
traitsO formato de traços do próprio jogo, pares tipo:nível — crie-os no editorgerados
fameNotoriedade inicial 0–100. Um valor inicial: o jogo pode continuar a mexer nele0 = calculada a partir das aptidões
salarySalário pedido, por época500000
face_sheet, face_index, helmet_index, helmet_hue_0/1/2Retrato e capacete255 = gerado
team_idColoca este piloto nessa equipa na época 1, pelo id estável da equipa — a ligação que o jogo resolve primeiro—
teamO mesmo, pelo nome visível da equipa. Usado quando não há team_idagente livre
roleprimary · secondary · reserve — o lugar é o carro: o titular guia o carro 1, o segundo o carro 2primary
contract_yearsDuração do contrato em épocas0 = 2
career_starts, career_wins, career_podiums, career_titles, best_finishPalmarés mostrado desde a época 10 = nenhum

Curvas de crescimento

Cada aptidão desenvolve-se com a idade segundo uma de cinco formas. O jogo sempre as teve, uma fixa por estatística; um pacote pode atribuir qualquer forma a qualquer estatística.

CurvaMelhoraDeclinaPredefinida para
Pico precocedepressa até aos 26, devagar até aos 30, depois nuncaa partir dos 30Ritmo
Físicaaté aos 28, depois nuncaa partir dos 28Resistência
Cerebralsempre, abrandando após os 30 e depois os 38nuncaInteligência, Adaptabilidade
Experiênciaaté aos 30, a meia velocidade até aos 34, depois nuncaa partir dos 34Regularidade
Juventudesó até aos 24a partir dos 28Agressividade

A curva é a forma, não a velocidade: a rapidez com que uma estatística fecha a distância para o seu teto continua a ser uma propriedade da estatística.


sponsors

ColunaSignificadoSe a omitir
nameNome da marca — obrigatório—
sectorautomotive, technology, energy, finance, luxury, fashion, telecom, beverage, insurance, aviation, industry, retailgerado
originNome do país ou código ISOgerado
budget1–10 — quanto vale o acordo5
prominence1–10 — com que frequência a marca aparece e a dificuldade em consegui-la5
color#RRGGBB—
logoUm nome de linha images, ou um caminho relativo a mods/um logótipo procedural
team_id / teamGrelhas impostas: assina esta marca com essa equipa na época 1 — por id estável ou por nomemercado aberto
idChave estável desta linha—

suppliers

Uma linha cuja category não seja uma das três é totalmente ignorada — é a única exigência rígida da tabela.

ColunaSignificadoSe a omitir
nameObrigatório—
categoryengine · tires · fuellinha ignorada
origin, color, logoComo nos patrocinadoresgerado
budget, size1–105
power, reliability, endurance, potential, performance, heat, efficiencyEstatísticas técnicas 1–10 com os nomes reais — só as que a categoria tem (ver abaixo)0 = gerada
stat_a … stat_dOs mesmos quatro valores em espaços genéricos, mantidos para builds antigas. Uma coluna com nome ganha ao seu espaço genérico0 = gerada
money_per_gpValor do acordo em $/GP. Positivo = parceria (pagam-lhe), negativo = cliente (paga-lhes)0 = gerado
contractpartnership · client — ganha ao sinal de money_per_gp quando ambos estão definidosdecide o sinal
durationDuração do contrato em épocas0 = gerada
team_id / teamGrelhas impostas: uma lista — Scarlet:partner; Azure:customer; Emerald — um fornecedor pode apoiar várias equipas, cada uma ao seu nível. Um parceiro por fornecedor; um fornecedor por categoria e por equipamercado aberto
idChave estável desta linha—
Categoriaespaço Aespaço Bespaço Cespaço D
enginepowerreliabilityendurance (mostrado, não simulado)potential (mostrado, não simulado)
tiresperformanceendurancereliabilityheat
fuelefficiency———

Duas coisas que um pacote deliberadamente não pode definir:

  • A arquitetura do motor (V8/V10/V12) não fica guardada no fornecedor — o jogo procura o nome no seu conjunto mundial de construtores. Um nome que esse conjunto não conhece recai em V10.
  • Os traços ocultos dos pneus são gerados a partir do nome da marca e da época, por isso renomear um fabricante volta a sorteá-los.

circuits e calendar

Estas duas constroem uma época. Os circuitos vêm do Editor de circuitos: o editor guarda um ficheiro .circuit e o Editor de mods importa-o para o pacote.

Cada circuito tem um id, e uma ronda do calendário aponta para ele com circuit_id (o nome ainda funciona como recurso).

circuits guarda o traçado em si — nome, local, comprimento pretendido, predefinição visual, carácter, a linha central desenhada e os marcadores opcionais de partida/meta e boxes. calendar guarda as rondas, por ordem: cada ronda é uma ronda circuit (que nomeia um dos seus traçados) ou uma ronda auto (um traçado gerado com determinado carácter e comprimento).

Um pacote que leve um calendário substitui a época por ele. Um pacote com circuitos mas sem calendário mete os seus traçados no conjunto do mundo e deixa-os ocupar as rondas da época.

Dois campos são registados a título informativo mas não simulados: o year de um circuito e as suas classificações downforce / tire_wear / overtaking — em jogo, esses três derivam do character do traçado.


images

name (a chave para onde as linhas apontam) mais os bytes do PNG. Os logótipos são criados a 195×195; um sprite de carro personalizado é uma vista lateral virada à direita sobre fundo transparente, com 256 px de altura. O jogo extrai-os para mods/.cache/ na primeira utilização.


O que fica sempre gerado

SecçãoUm pacote substituiO jogo continua a gerar
EquipasNome, país, reputação, orçamento, perfil de comportamento, cores, carro, decoração, fato, logótipoA evolução do orçamento, o comportamento do plantel e (fora do modo imposto) as infraestruturas
PilotosNome, código, país, idade, as seis aptidões e os seus tetos, curvas, traços, retrato, capacete, salário, famaA ambição, os objetivos da época, a personalidade oculta
PatrocinadoresNome, setor, cor, orçamento, notoriedade, origem, logótipoOs termos dos contratos, o comportamento do mercado
FornecedoresNome, categoria, cor, orçamento, dimensão, origem, logótipo, estatísticas técnicas, termos do acordoO comportamento do mercado, os traços ocultos dos pneus

Armadilhas a conhecer

  • As ligações seguem o id, não o nome. Um piloto, patrocinador ou fornecedor aponta para o id estável de uma equipa, por isso renomeá-la mantém-nos, e duas equipas podem partilhar um nome (só a leitura sofre — classificações e notícias mostram-no duas vezes). Um pacote escrito antes de existirem ids, ou feito à mão só com nomes, continua a resolver por nome e mantém o comportamento antigo: renomeie aí a equipa e o piloto passa para a bolsa de agentes livres. Abrir o pacote uma vez no Editor de mods atualiza-o.
  • Dois pilotos por equipa, um por lugar. Uma equipa com dois pilotos primary deixa o carro 2 vazio, e um carro sem piloto não parte. O separador Auditoria do editor existe sobretudo para isto.
  • Os códigos dos pilotos têm de ser únicos. Um conflito é renomeado ao carregar, em silêncio, e tudo o que é indexado por código acompanha a mudança.
  • O ficheiro do pacote tem de ficar onde está. Os logótipos e os sprites de carro personalizados são lidos a partir dele; uma carreira iniciada com um pacote que depois desaparece perde-os.
  • Um pacote só se aplica na criação da carreira. Editar um pacote nunca muda uma carreira já a decorrer — comece outra para ver a alteração.