SISTEMA DE TRAÇÃO 4X4 — FS25   versão 1.4.0.0 (Zasty Chalk)
==============================================================

2.0.3.0
  - O HUD 4x4 continua visível com um trabalhador IA ao volante.
  - Travão: só acima de 25% conta como travagem (no teclado o jogo marca
    10% só por largar o acelerador).

2.0.2.0
  - Travar deixa de engatar o 4x4 (brakeEngage = false por omissão;
    nunca no semiauto). A patinagem das rodas a travar é ignorada, por
    isso os bloqueios já não ligam ao travar/largar o travão.
  - Em NENHUM modo o 4x4 engata acima de 20 km/h (nem com Ctrl+J).
  - Com o 4x4 engatado a velocidade fica limitada: 25 km/h tratores e
    ceifeiras, 40 km/h camiões e carros (DriveModeConfig.lua).

2.0.1.0
  - Proteção de estrada no MANUAL e no SEMIAUTOMÁTICO: acima da
    velocidade de estrada (20 km/h) o 4x4 não engata — nem com Ctrl+J,
    nem sozinho (nem a travar, no semiauto). Desengatar é sempre
    permitido e um 4x4 já engatado mantém-se. Validado também no
    servidor (multijogador).

NOVIDADES DA 2.0 (reescrita do sistema de decisão)

PREVISÃO DE TRAÇÃO FÍSICA (tratores com GPS de série)
  Corrigido: engatar uma alfaia pesada fazia a previsão saltar logo para
  uma percentagem alta, mesmo levantada e parada em plano. Agora o
  sistema calcula a força que o trator precisa de fazer e compara-a com
  a aderência que o eixo traseiro sozinho consegue dar:
    força     = peso total x (resistência ao rolamento + declive à frente)
              + esforço de tração das alfaias BAIXADAS no campo
    aderência = carga no eixo traseiro x coeficiente do solo
  O solo conta: estrada ou campo, e a humidade real do terreno (chuva).
  Uma grade de 19 t levantada no pátio dá 0%; a mesma grade baixada a
  trabalhar dá 100%; um reboque de 30 t só pede 4x4 a partir de ~12% de
  subida. Descidas fortes com muito peso atrás também contam.

ENGATE COMO NOS SISTEMAS REAIS (auto / smart / semiauto)
  - Patinagem das rodas traseiras (com histerese e tempo mínimo
    engatado de 6 s — acabou o "pisca-pisca").
  - TRAVAGEM: travar engata o 4x4 para travar com as quatro rodas.
  - Alfaia baixada no campo.
  - Velocidade quase nula em campo com a alfaia baixada (a lutar).
  - Previsão de tração e descidas com carga (tratores com GPS).
  Desengata em viragens apertadas de cabeceira (alfaia levantada) e
  acima da velocidade de estrada. O semiautomático continua a só
  engatar sozinho — desengatar é sempre contigo.
  O eixo dianteiro entra por EMBRAIAGEM (~0,4 s), não num salto.

BLOQUEIO DE DIFERENCIAIS EM 3 POSIÇÕES (Ctrl+K)
  LIVRE -> TRASEIRO -> TRASEIRO + DIANTEIRO (este só com 4x4 engatado).
  Bloqueio progressivo (~0,5 s), como os multidisco hidráulicos.
  Auto/smart: liga o traseiro com a alfaia baixada a andar a direito,
  junta o dianteiro com patinagem forte; solta-se ao virar, travar ou
  levantar a alfaia.
  SEGURANÇA EM TODOS OS MODOS: acima de 15 km/h ou a travar forte, os
  bloqueios soltam-se sozinhos.

PRESSÃO DOS PNEUS (Fendt smart)
  Passa a seguir o sítio onde estás (campo = pressão baixa, estrada ou
  depressa = pressão alta), como o VarioGrip real — e não o 4x4.

HUD
  Barra do eixo dianteiro com o nível real da embraiagem, cadeados nos
  eixos bloqueados, patinagem ao vivo, previsão, e o MOTIVO de cada
  decisão (Patinagem, Travagem 4 rodas, Alfaia baixada, Previsão GPS,
  Descida c/ carga, Viragem, Estrada...).

MULTIJOGADOR
  Corrigido: em servidor dedicado, o Ctrl+J num modo automático era
  desfeito logo pelo servidor. A prioridade da escolha manual passa a
  ficar registada no servidor.

AFINAÇÃO
  Todos os parâmetros novos estão comentados em scripts/DriveModeConfig.lua.
  Para diagnóstico, põe debugLog = true e envia o log.txt.

==============================================================
(Notas das versões anteriores abaixo)
==============================================================

SISTEMA DE TRAÇÃO 4x4 — FARMING SIMULATOR 25
================================================
Estado: CONFIRMADO A FUNCIONAR EM TESTES REAIS — diferença visível na
rotação das rodas entre 2x4/4x4 e diff lock on/off, testado com carga
pesada e chuva.

O QUE ESTE MOD FAZ
---------------------
  - Ctrl+J: liga/desliga a tração ao eixo dianteiro (2x4 <-> 4x4)
  - Ctrl+K: liga/desliga um bloqueio de diferencial real
  - Ctrl+N: mostra/esconde o indicador no ecrã
  - Ctrl+Shift+T: mostra/esconde o painel de telemetria 4x4
  - Indicador no ecrã: "4x4"/"2x4" a verde/vermelho, modo de tração
    entre parênteses, percentagem de engate no modo "smart", e
    "Diferencial bloqueado" a amarelo quando ativo
  - Cada trator vem com o modo "de série" conforme a tabela real que
    forneceste (ver scripts/DriveModeConfig.lua)
  - Deteção automática por PATINAGEM REAL das rodas traseiras (não só
    velocidade) — confirmado por engenharia inversa do mod Advanced
    Damage System (physicsWheel.netInfo.slip)
  - Modo "smart" (Fendt): engate gradual e contínuo, proporcional à
    patinagem, desliga sempre acima da velocidade de estrada
  - Se tiveres o mod Variable Tire Pressure instalado no mesmo
    veículo, o modo "smart"/"auto" ajusta automaticamente a pressão
    dos pneus (campo ao engatar 4x4, estrada ao voltar a 2x4) —
    chamando a função pública deles, sem duplicar o sistema deles
  - Posição do HUD ajustável DENTRO DO JOGO (Esc > Definições >
    Geral), sem editar nenhum ficheiro
  - Restrito a tratores, camiões, ceifeiras e carros
  - Multijogador: testado e confirmado num dedicated server real —
    Ctrl+J, Ctrl+K e os modos automáticos (auto/semiauto/smart) vão
    todos pela rede, com o servidor como única fonte de física
  - Ctrl+K respeita um limite de velocidade para o ENGATE (por omissão
    10 km/h, ajustável em DriveModeConfig.lua) — tal como numa caixa
    de transferência real, só se bloqueia parado ou devagar;
    desbloquear continua sempre permitido

MODOS DE TRAÇÃO
-------------------
  "manual"   — Ctrl+J liga/desliga sempre
  "semiauto" — CORRIGIDO (pedido pela comunidade): só ENGATA sozinho o
               4x4 ao detetar patinagem real — nunca desengata sozinho,
               isso fica sempre por conta do jogador (Ctrl+J). O
               BLOQUEIO DO DIFERENCIAL (Ctrl+K) continua sempre manual.
  "auto"     — engata E desengata o 4x4 sozinho por patinagem real; o
               bloqueio do diferencial também passa a ser automático
  "smart"    — modo Fendt: engate GRADUAL e proporcional à patinagem,
               nunca binário, bloqueio automático; usado atualmente só
               nos Fendt Vario

Tratores marcados como "semiauto" podem ser atualizados para "auto" a
sério na loja (ver PERSONALIZAR ao comprar) — útil porque a diferença
entre os dois não é óbvia à primeira vista.

Todos os parâmetros (limiares de patinagem, velocidade de estrada,
tempo de rampa do modo smart) estão no topo de
"scripts/DriveModeConfig.lua", com comentários a explicar cada um.

AJUSTAR A POSIÇÃO DO HUD (dentro do jogo, não por XML)
-----------------------------------------------------------
Abre o menu do jogo (Esc) -> Definições -> Geral. Deves ver uma secção
"4x4 Traction System HUD" com duas opções:
  "HUD 4x4 esquerda/direita" e "HUD 4x4 cima/baixo"
Cada uma tem incrementos de 5% do ecrã, entre -100% e +100%. A escolha
fica gravada automaticamente (num ficheiro na tua pasta de perfil, não
na savegame), por isso mantém-se em todas as quintas.

Se por algum motivo a secção não aparecer no menu (ex: uma versão do
jogo que mudou a estrutura desse menu), o mod usa como reserva os
valores hudOffsetXPercent/hudOffsetYPercent em DriveModeConfig.lua.

PRESSÃO DE PNEUS NATIVA (não depende de nenhum outro mod)
--------------------------------------------------------------
Versões anteriores dependiam do Variable Tire Pressure (chamando a
função pública dele). Isso causava dois problemas: oscilação (o 4x4 e
a pressão alimentavam-se um ao outro) e comportamento inconsistente —
o VTP tem a sua própria lógica de "parar = volta logo a modo estrada",
que não seguia o nosso próprio estado de 4x4.

Agora a pressão é 100% nossa: reduzimos ligeiramente o raio físico da
roda (o mesmo mecanismo que o VTP usa, confirmado por engenharia
inversa — reduzir wheel.physics.radius e marcar
wheel.physics.isPositionDirty = true) sempre que o 4x4 está engatado,
e voltamos ao normal quando desliga. A transição é gradual (3
segundos) para nunca dar solavancos. O limite de redução (-15% do
raio) é o mesmo valor por omissão que o VTP usa, já testado por um mod
real.

O HUD mostra sempre a pressão atual em bar (valor ilustrativo, 1.0 bar
em modo campo a 1.8 bar em modo estrada). Não precisas de ter o
Variable Tire Pressure instalado — e se o tiveres, os dois mods vão
mexer na mesma roda de forma independente, o que pode causar
conflitos; recomenda-se desativar a configuração de pressão variável
do VTP nos veículos onde uses o 4x4 inteligente.

CONFIRMADO EM JOGO: o saltitar do eixo dianteiro no modo "smart"
acontecia por causa do sistema de pressão de pneus PRÓPRIO do
FS25_MudSystemPhysics (TirePressureSystem, a partir da versão
1.3.2.0 desse mod) — nada a ver com lama ou afundamento. Os dois
mods mexiam no raio físico da mesma roda ao mesmo tempo. Tentámos
detetar quando o sistema deles está ativo para nos desligarmos, mas
confirmámos por testes reais e exaustivos que a variável global dele
nunca fica acessível ao nosso mod (motivo desconhecido). A correção
real foi mais simples: passámos a escrever o raio da roda em TODOS
os frames, sem exceção — ganha-se o "cabo de guerra" pela física da
roda só por insistência, seja lá quem for do outro lado.

ANTECIPAÇÃO POR GPS/TERRENO (só tratores topo de gama)
------------------------------------------------------
Fendt Vario 900/1000, John Deere 8R e Case IH Magnum/Steiger — os
únicos com sistema de GPS de série na vida real — antecipam-se a
subidas do terreno à frente do trator, engatando o 4x4 antes de
começarem a patinar a sério. Sistema 100% próprio (usa
getTerrainHeightAtWorldPos, função do próprio jogo): tentámos
inicialmente ligar isto ao FS25_MudSystemPhysics (ler o nível de
lama à frente), mas confirmámos por testes reais que as variáveis
globais desse mod nunca ficam acessíveis ao nosso — por isso o
sistema final lê elevação do terreno, não lama, e não depende de
nenhum outro mod para nada. Aparece no HUD desses tratores como
"Terrain GPS". Confirmado a funcionar bem em jogo (reage a subidas
reais, valores sensatos).

Também temos antecipação pelo peso do implemento a reboque —
tentámos primeiro via getTotalMass(), que nunca devolveu o valor
certo (uma grade de discos pesada só somava ~20kg). Corrigido:
confirmámos, lendo o XML real de um implemento (16145 kg), que a
massa vive em self.components[i].mass — lendo os componentes
físicos diretamente, sem passar pela função, o valor bate certo.

PARÂMETROS PRÓPRIOS POR SISTEMA REAL (não só categorias genéricas)
--------------------------------------------------------------------
Os três sistemas de GPS têm personalidade própria, não só a mesma
tabela genérica: VarioGrip (Fendt) é o mais rápido e sensível a
reagir; eAutoPowr+JDLink (John Deere 8R) fica a meio-termo; AFS
Connect (Case Magnum/Steiger) reage um pouco mais tarde, porque o
peso de série desses tratores já ajuda à aderência antes de precisar
do 4x4 a sério. Ajustável por trator em DriveModeConfig.lua
(slipEngageThreshold, slipDisengageThreshold, smartRampTimeMs em
cada linha de "patterns").

HUD RENOVADO — SEM SOBREPOSIÇÕES
------------------------------------
Corrigido um problema relatado em jogo: a linha "Terrain GPS" (ou a
pressão de pneus) podia ficar sobreposta a outra informação, ou sair
para fora da moldura do painel, consoante o que estivesse ativo
nesse momento. Causa: a altura do painel era um número fixo, mas o
número de linhas mostradas variava. Corrigido a sério: cada veículo
reserva sempre o espaço de TODAS as linhas que é capaz de mostrar
(bloqueio de diferencial, pressão de pneus, GPS/terreno), mesmo
quando não têm nada de especial para dizer nesse momento — só o
conteúdo de cada linha muda (ativo/inativo), nunca a presença da
própria linha. O painel nunca mais cresce nem encolhe, e nada fica
fora da moldura.


TELEMETRIA 4x4 (Ctrl+Shift+T)
---------------------------------------------------
Réplica honesta de um relatório de frota real (JDLink/AFS Connect/
VarioGuide) — só contadores e horas que o próprio mod mede, sem
nenhum "desgaste" inventado. Prime Ctrl+Shift+T para abrir/fechar um
painel por baixo do HUD principal, com: horas totais, horas em 4x4
(e %), horas com diferencial bloqueado, nº de engates, distância
percorrida em 4x4, e (só nos tratores GPS) quantas vezes a
antecipação por terreno disparou. O nome do relatório muda consoante
a marca (VarioGuide/JDLink/AFS Connect nos tratores GPS, genérico
nos restantes). Histórico próprio por trator, gravado na savegame —
acumula ao longo do tempo, não reinicia a cada carregamento.

MODOS DE TRAÇÃO POR TRATOR
-------------------------------
Populei "scripts/DriveModeConfig.lua" com os modos das tabelas que
forneceste. Os "match" são o meu melhor palpite do nome real do
ficheiro de cada veículo — confirma sempre no log:

  [FS25_4x4TractionSystem] <veículo>: modo de tração = manual/semiauto/auto/smart

Ajusta os "match" no ficheiro se algum trator não corresponder.
Qualquer veículo sem correspondência fica em "manual" por omissão.

COMO INSTALAR
----------------
1) Compacta a pasta "FS25_4x4TractionSystem" num .zip com o mesmo nome
   — os ficheiros (modDesc.xml, etc.) ficam na RAIZ do zip.
2) Coloca o .zip em Documentos\My Games\FarmingSimulator2025\mods
3) Ativa o mod no menu de mods antes de carregares a partida.
4) Entra num trator/camião/ceifeira/carro e testa Ctrl+J, Ctrl+K e
   Ctrl+N, e confirma a nova secção nas Definições Gerais do jogo.

SE DER ERRO
-------------
Qualquer erro só aparece UMA VEZ no log, com o prefixo
"[FS25_4x4TractionSystem]" — procura por isso em
"My Games\FarmingSimulator2025\log.txt" depois de fechares o jogo.
