Sistema de Dano

Damage Pipeline

Especificação do pipeline de dano: fórmula do dano final (base × zona × energia × penetração × armadura × ângulo), efeitos paralelos (sangramento, choque, dor), degradação do equipamento em 5 estados, dano permanente vs temporário e dano de queda.

Última edição em 07/07/2026, 20:24 por Admin

Sistema de Dano

Página de game design (não diegética), derivada de Sistema de Atributos, Dano e Balística. Define o pipeline que transforma um impacto (projétil, melee, queda) em consequências sobre os vitais de Atributos do Jogador e sobre o equipamento, usando as zonas e multiplicadores de Dano por Parte do Corpo.


1. A fórmula

Pipeline conceitual de um projétil:

Dano Final = Dano Base da Munição
           × Multiplicador da Região (tabela de zonas)
           × Energia Restante (velocidade no impacto / velocidade inicial)
           × Modificador de Penetração (munição vs classe da armadura)
           × Redução da Armadura (absorção do item na zona)
           × Modificador de Ângulo (impacto oblíquo perde energia / ricocheteia)

Cada fator tem um dono claro:

  • Dano Base vem da munição (calibre, massa, carga).
  • Multiplicador da Região vem da tabela de zonas (Dano por Parte do Corpo).
  • Energia Restante vem da balística: a razão entre a velocidade no impacto e a velocidade inicial — tiros de longe chegam mais fracos.
  • Penetração compara o tipo de munição com a classe da armadura na zona.
  • Redução da Armadura é a absorção do item equipado na zona, escalada pela durabilidade atual.
  • Ângulo: impactos oblíquos perdem energia, podendo ricochetear antes mesmo de aplicar dano.

Detalhamento fator a fator — matrizes de valores (classes de penetração, absorção por classe, curvas de energia por distância) e três exemplos numéricos completos: Fórmula de Dano.

2. Efeitos paralelos de cada acerto

Cada acerto resolve, além da Vida:

  • Sangramento: chance por zona e calibre de abrir fontes de sangramento (leve 2/s, média 12/s, forte 20/s de Sangue). Fontes não estancam sozinhas em ferida grave: exigem bandagem/torniquete/sutura.
  • Choque/trauma: todo impacto gera Choque mesmo sem penetrar (energia transferida). Choque abaixo do limiar de Consciência = inconsciência — o "nocaute" de um capacete que segurou o tiro.
  • Dor: proporcional ao dano e à zona.
  • Dano ao equipamento: o item da zona perde durabilidade em 5 estados (tabela abaixo).

Durabilidade do equipamento — 5 estados

EstadoCoeficienteEfeito
Novo1,0Função plena.
Gasto0,7Função reduzida.
Danificado0,5Função reduzida.
Muito Danificado0,3Função mínima.
Arruinado0,0Perde toda a função.

3. Permanente vs temporário

  • Vida regenera (condicionada a Sangue/Fome/Sede altos).
  • Sangue regenera devagar.
  • Fraturas exigem item + tempo.
  • Vida máxima só é reduzida por contaminação/infecção não tratadas — e é recuperável em hospital.

Ou seja: quase todo dano é reversível com recursos e tempo; o que reduz o teto do personagem são condições negligenciadas, não o combate em si.

4. Dano de queda

Dano de queda usa o mesmo pipeline:

  • Choque a partir de ~3 m;
  • dano de Vida a partir de ~5 m;
  • fratura de perna na faixa de 5–9 m;
  • letal por volta de ~14 m.

5. Esboço de implementação (Origin + GAS)

Regra arquitetural do projeto: o dano é calculado exclusivamente no servidor Origin (custom), dentro do pipeline GAS adaptado do projeto. O cliente UE (plugin OriginGAS, replicação UE desligada) nunca calcula dano — recebe os novos valores dos atributos e os GameplayCues (efeitos visuais/sonoros do acerto) por opcodes do OriginNetwork.

O fluxo server-side segue o pattern do meta-atributo Damage:

  1. A simulação balística do servidor determina o impacto (zona, velocidade, ângulo, armadura presente).
  2. A execução do efeito de dano roda a fórmula do §1 (implementação detalhada em Fórmula de Dano) e empurra a magnitude no meta-atributo Damage do AttributeSet do alvo.
  3. O hook pós-execução do servidor converte Damage em Vida/Sangue — aplicando o dano local da zona e a transferência global — e zera o meta-atributo.
  4. Os efeitos paralelos são aplicados como efeitos/estados no servidor e anunciados ao cliente por opcodes (atributos atualizados + tags + cues).
// Server-side (Origin): fluxo de um acerto apos a balistica resolver o impacto.
void FTSSDamagePipeline::ResolveHit(const FTSSImpact& Impact)
{
    const FZoneSpec& Zone = ZoneTable[Impact.BodyZone];

    // 1) Formula completa (ver pagina "Formula de Dano") -> meta-atributo Damage.
    const float Damage = BallisticDamageExec.Execute(Impact);
    Attributes.PushMeta(EMeta::Damage, Damage);

    // 2) Hook pos-execucao: converte o meta em vitais e zera.
    //    - dano local na zona + transferencia p/ Vida global (Zone.GlobalTransfer)
    //    - Blood via fonte de sangramento (abaixo), nao direto
    Attributes.CommitDamageMeta(Impact.BodyZone, Zone.GlobalTransfer);

    // 3) Efeitos paralelos -- rodam em TODO acerto, mesmo bloqueado:
    Bleeding.TryOpenSource(Impact);                    // leve 2/s | media 12/s | forte 20/s
    Attributes.ApplyShock(Impact.TransferredEnergy * Zone.ShockMult);  // nocaute < 25
    Attributes.ApplyPain(Damage, Impact.BodyZone);
    Equipment.Degrade(Impact.BodyZone, Damage);        // 5 estados; Arruinado nao protege

    // 4) OriginNetwork anuncia: atributos atualizados + tags de estado + cues
    //    (o cliente OriginGAS espelha e toca os efeitos cosmeticos).
}

Divisão de responsabilidades: servidor Origin = balística, fórmula, vitais, estados e durabilidade; OriginNetwork = snapshot/updates de atributos, tags e cues; cliente OriginGAS = espelho dos atributos + feedback audiovisual (hitmarker diegético, vinheta de dor, ragdoll na inconsciência).


Ver também