Balística
Ballistics
Especificação do sistema de balística: energia real por munição, voo com gravidade e arrasto, zeroing, penetração de materiais, ricochete e o modelo de implementação na UE 5.8.
Última edição em 07/07/2026, 20:14 por Admin
Balística
Página de game design (não diegética). Especifica o sistema de balística de The Sync Survival: cada projétil é um objeto físico com massa, velocidade e energia — o dano é consequência, nunca um número mágico.
1. Princípio: energia derivada, não inventada
Cada munição é definida por calibre, massa do projétil e velocidade inicial. Tudo o mais deriva disso:
Energia (J) = ½ × massa (kg) × velocidade² (m/s)
Tabela de referência das famílias de calibre (valores de design):
| Calibre | Massa | Vel. inicial | Energia na boca | Perfil |
|---|---|---|---|---|
| 9×19 mm (pistola) | 8,0 g | 360 m/s | ~520 J | curta distância, perde energia rápido |
| .45 (pistola pesada) | 15,0 g | 260 m/s | ~500 J | lento, pancada grande, queda acentuada |
| 5,56×45 (fuzil leve) | 4,0 g | 920 m/s | ~1.690 J | reto e rápido, sofre mais com barreiras |
| 7,62×39 (fuzil) | 7,9 g | 730 m/s | ~2.100 J | equilíbrio energia/penetração |
| 7,62×51 (fuzil de batalha/DMR) | 9,5 g | 840 m/s | ~3.350 J | mantém letalidade a centenas de metros |
| Calibre pesado (anti-material) | 42 g | 900 m/s | ~17.000 J | atravessa cobertura; raridade de endgame |
| 12ga (espingarda, balote) | 28 g | 400 m/s | ~2.240 J | devastador perto, inútil longe |
2. Voo do projétil
Dois fatores agem sobre o projétil em voo:
- Gravidade — queda constante; a compensação é o zeroing da mira (estágios 100/200/300/400 m).
- Arrasto — perda exponencial de velocidade, com coeficiente por forma/calibre:
Velocidade(d) = v0 × e^(−k × d) k = coeficiente de arrasto do projétil
Queda(d) ≈ ½ × g × t² t = tempo de voo até a distância d
Consequências de design: a Energia Restante no impacto (fração da energia inicial) entra direto na fórmula de dano; projéteis subsônicos (< 343 m/s) não estalam ao passar e caem muito mais; vento (se habilitado) só afeta tiros > 250 m, com intensidade por região (forte em Scorchlands e na costa de Coastal Towns).
3. Penetração de materiais
Cada material tem um custo de energia por centímetro atravessado. O projétil que atravessa continua o voo com a energia restante e um pequeno desvio angular:
| Material | Custo (J/cm) | Exemplo no mundo |
|---|---|---|
| Vidro | ~50 | janelas de Seaview |
| Madeira | ~150 | portas, paliçadas |
| Chapa metálica fina | ~400 | portas de carro, silos de Silohold |
| Alvenaria/tijolo | ~900 | casas de Milltown |
| Concreto/aço estrutural | ~2.000+ | bunkers, The Wall |
Regra prática: pistola não atravessa nem porta de carro com energia útil; fuzil de batalha atravessa parede de tijolo e ainda fere; calibre pesado ignora cobertura leve. Atirar através de paredes finas funciona — com dano reduzido e sem garantia de trajetória.
Munição perfurante (AP) multiplica a eficiência contra materiais e armaduras (custo de penetração ÷ 2), com dano de tecido levemente menor (furo "limpo").
4. Ricochete
Impactos oblíquos em superfícies duras podem ricochetear em vez de penetrar:
- Ângulo raso (< ~20° da superfície) + material duro (aço, concreto) = chance alta;
- O projétil perde 40–70% da energia e segue em trajetória desviada — ainda perigoso;
- Ambientes industriais (Foundry District, Rail Yard, Cargo Field) são zonas de ricochete por natureza — atirar em corredor de contêineres tem preço.
5. Supressão
Projéteis passando perto (< ~1,5 m) aplicam supressão mesmo sem acertar: sway momentâneo, visão estreitada, +Dor psicológica leve. Calibres maiores suprimem mais. É o que torna fogo de cobertura uma tática real.
6. Tipos de munição
| Tipo | Efeito |
|---|---|
| Comum | perfil de fábrica da tabela §1 |
| Perfurante (AP) | penetração ×2 contra materiais/armadura; dano de tecido −15% |
| Subsônica | silenciosa com supressor; energia baixa; queda acentuada; só faz sentido < 150 m |
| Improvisada | recarregada nos assentamentos (Iron Haven, Sanctuary Prime): −20% de energia, dispersão maior, ~2% de falha, desgasta o cano; cada cartucho carrega o próprio estado de conservação |
7. Implementação (UE 5.8)
Duas abordagens padrão da engine, usadas de forma híbrida:
- Trace preditivo segmentado (autoridade no servidor) — o projétil é simulado por segmentos de linha a passos fixos de tempo (substepping), aplicando gravidade e arrasto a cada passo. Barato, determinístico e ideal para multiplayer: o servidor resolve acertos/penetração; o cliente só renderiza.
- Tracer visual no cliente — a representação visual (Niagara) segue a mesma trajetória calculada, desacoplada da lógica.
// Passo de simulação server-side (substep fixo, ex.: 1/120 s)
USTRUCT()
struct FBallisticState
{
GENERATED_BODY()
FVector Position;
FVector Velocity; // m/s
float MassKg; // massa do projétil
float DragK; // coeficiente de arrasto (por munição)
float EnergyJ() const { return 0.5f * MassKg * Velocity.SizeSquared(); }
};
void StepBallistics(FBallisticState& S, float Dt, UWorld* World)
{
// 1. Integra forças: gravidade + arrasto exponencial
const FVector Gravity(0, 0, -980.f * 0.01f); // m/s²
S.Velocity += Gravity * Dt;
S.Velocity *= FMath::Exp(-S.DragK * S.Velocity.Size() * Dt);
// 2. Trace do segmento deste passo
const FVector End = S.Position + S.Velocity * Dt * 100.f; // m → cm
FHitResult Hit;
if (World->LineTraceSingleByChannel(Hit, S.Position, End, ECC_Bullet))
{
// 3. Resolve: ricochete (ângulo raso + material duro),
// penetração (energia vs custo do material × espessura)
// ou impacto final (entra no pipeline de dano — ver Sistema de Dano)
ResolveImpact(S, Hit);
return;
}
S.Position = End;
}
// Penetração: trace de saída mede a espessura do obstáculo
bool TryPenetrate(FBallisticState& S, const FHitResult& Hit)
{
const float ThicknessCm = MeasureExitThickness(Hit); // trace reverso
const float CostJ = GetMaterialCostPerCm(Hit.PhysMaterial) * ThicknessCm
/ GetAmmoAPMultiplier(S); // AP divide o custo
if (S.EnergyJ() <= CostJ)
return false; // parou no material
const float Remaining = S.EnergyJ() - CostJ; // energia que sobra
S.Velocity = ApplyExitDeviation(S.Velocity, Hit) // pequeno desvio
* FMath::Sqrt(2.f * Remaining / S.MassKg) / S.Velocity.Size();
return true; // continua voando
}
8. Exemplos de comportamento esperado
- Pistola 9 mm a 150 m: chega com fração da energia — ferimento e sangramento, não abate.
- Fuzil 7,62 a 300 m: energia letal preservada; a diferença entre calibres aparece na penetração e no sangramento.
- AP vs colete classe III: atravessa com dano razoável; comum no mesmo colete não penetra, mas o trauma (Choque) pode derrubar — e o colete degrada (ver Proteção e Armaduras).
- Capacete balístico: segura fragmentos e pistola (com possível nocaute por Choque); contra fuzil, a energia excedente atravessa.
- Tiro na Dead Zone: miras eletrônicas não funcionam — zeroing manual e ferro; o frio denso aumenta levemente o arrasto (ajuste de bioma).