Proteção e Armaduras

Armor & Protection

Design do sistema de proteção: classes balísticas I–IV, área protegida real, durabilidade em 5 estados, trauma sem perfuração, penetração parcial e os quatro tipos de proteção (balística, corte, contaminação, térmica).

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

Proteção e Armaduras

Página de game design (não diegética), derivada do Sistema de Atributos, Dano e Balística. Define como coletes, capacetes e roupas protegem o jogador — um modelo híbrido: multiplicadores por zona de acerto + durabilidade que absorve dano.

O princípio norteador é proteção honesta: o item protege exatamente a área que cobre, bloqueia apenas o que sua classe permite, transfere trauma mesmo quando segura o tiro e, arruinado, não protege nada.


1. Classe balística (I–IV)

Cada peça de armadura tem uma classe balística conceitual, de I a IV, que define contra quais calibres o item bloqueia a penetração:

  • Projétil de classe igual ou inferior à do item → bloqueado (com trauma, ver §4).
  • Projétil de classe superior à do colete → penetração parcial ou total.
  • Munição perfurante (AP) eleva a classe efetiva do projétil: atravessa colete de classe compatível com dano razoável ao corpo, fazendo um furo "limpo".

Comportamentos esperados (herdados da página-hub):

  • Munição AP vs colete classe III: atravessa com dano razoável ao corpo.
  • Munição comum no mesmo colete classe III: não penetra, mas o trauma (Choque) pode derrubar — e o colete fica Danificado.
  • Capacete balístico segura fragmentos e calibres de pistola (com Choque alto — possível nocaute); não é garantia contra fuzil: a energia excedente atravessa.

2. Área protegida real

A hitbox é honesta: o item só protege as zonas que cobre fisicamente.

  • O colete cobre tórax e abdômennão cobre pescoço, braços nem cabeça.
  • Tiro no ombro não é "tiro no colete".
  • Cada zona de dano do corpo lista os slots de equipamento que a protegem (cabeça → capacete/máscara/óculos; tórax → colete/roupa/mochila com coeficiente menor).

3. Durabilidade (5 estados)

O item absorve dano e degrada. São cinco estados, cada um com seu fator de proteção:

EstadoFator
Novo1,0
Gasto0,7
Danificado0,5
Muito Danificado0,3
Arruinado0,0
  • Item Arruinado não protege e perde toda a função.
  • Arruinado não é reparável ao estado Novo — apenas parcialmente, nas oficinas dos assentamentos (Iron Haven, Sanctuary Prime).
  • Todo acerto na zona coberta consome durabilidade do item, mesmo quando bloqueado.

4. Trauma sem perfuração

Bloquear não é sair ileso. Quando a armadura segura o projétil, a energia do impacto ainda é transferida ao corpo como Choque + Dor — a "costela trincada" narrativa.

  • Calibre grande bloqueado = possível queda ou nocaute (Choque abaixo do limiar de Consciência = inconsciência).
  • É o cenário clássico do capacete que segurou o tiro de pistola: o jogador sobrevive, mas pode apagar.

5. Penetração parcial

Quando a energia do projétil excede pouco a proteção do item, o resultado não é binário: o projétil entra com dano reduzido e aplica sangramento leve. É o meio-termo entre o bloqueio limpo e a travessia total.

6. Dano ao conteúdo

Itens guardados dentro do colete ou da mochila, na zona atingida, podem ser danificados pelo impacto — há um coeficiente de transferência para o conteúdo. Carregar o kit médico no bolso frontal do colete tem um custo real.

7. Os quatro tipos de proteção

Um mesmo item raramente oferece todas — montar o loadout é escolher contra o que se proteger:

TipoFontes típicasUso por zona
Balísticacolete, capacetecombate com armas de fogo em qualquer região
Corte/impactoroupas grossascontra Desynced e melee — mordida em braço protegido não abre ferida
Contaminaçãomáscara com filtro + roupa seladaobrigatória na Contaminated Zone e durante Nanostorm; filtros são consumíveis
TérmicaisolamentoDead Zone e noite de deserto; roupa molhada perde isolamento e dobra de peso

8. Esboço de implementação

Perfil de armadura como dado (estilo Unreal), com os quatro tipos de proteção em bitmask:

UENUM(BlueprintType, meta = (Bitflags))
enum class EProtecaoTipo : uint8
{
    Nenhuma      = 0,
    Balistica    = 1 << 0,
    Corte        = 1 << 1,
    Contaminacao = 1 << 2,
    Termica      = 1 << 3
};

USTRUCT(BlueprintType)
struct FArmorProfile
{
    GENERATED_BODY()

    // Classe balistica conceitual (I a IV): ate onde o item bloqueia penetracao.
    UPROPERTY(EditDefaultsOnly, meta = (ClampMin = 1, ClampMax = 4))
    int32 Classe = 2;

    // Hitbox honesta: apenas as zonas fisicamente cobertas (colete = torax/abdomen).
    UPROPERTY(EditDefaultsOnly)
    TArray<EBodyZone> ZonasCobertas;

    // 5 estados: Novo 1.0 / Gasto 0.7 / Danificado 0.5 / Muito Danificado 0.3 / Arruinado 0.0
    UPROPERTY(BlueprintReadOnly)
    float Durabilidade = 1.0f;

    // Bitmask dos tipos de protecao (um item raramente tem todos).
    UPROPERTY(EditDefaultsOnly, meta = (Bitmask, BitmaskEnum = "EProtecaoTipo"))
    uint8 Protecoes = static_cast<uint8>(EProtecaoTipo::Balistica);
};

Resolução de um acerto contra a armadura — os três desfechos possíveis:

UENUM(BlueprintType)
enum class EArmorHitResult : uint8
{
    Bloqueado,          // zero penetracao; trauma (Choque + Dor) transferido
    PenetracaoParcial,  // energia excede pouco: dano reduzido + sangramento leve
    Atravessou          // classe superior, zona descoberta ou item arruinado
};

EArmorHitResult ResolveArmorHit(FArmorProfile& Armor, const FProjectileImpact& Hit,
                                float& OutDanoCorpo, float& OutChoque)
{
    // Zona descoberta ou item arruinado: nao protege nada.
    if (Armor.Durabilidade <= 0.f || !Armor.ZonasCobertas.Contains(Hit.Zona))
    {
        OutDanoCorpo = Hit.DanoBase;
        return EArmorHitResult::Atravessou;
    }

    // Todo acerto na zona coberta desgasta o item (5 estados).
    DegradeArmor(Armor, Hit.Energia);

    // AP eleva a classe efetiva do projetil.
    const int32 ClasseMunicao = Hit.ClassePenetracao;

    if (ClasseMunicao > Armor.Classe)
    {
        OutDanoCorpo = Hit.DanoBase * ModPenetracao(ClasseMunicao, Armor.Classe);
        return EArmorHitResult::Atravessou;
    }

    if (EnergiaExcedePouco(Hit, Armor)) // meio-termo, nao binario
    {
        OutDanoCorpo = Hit.DanoBase * FatorDanoReduzido; // + fonte de sangramento leve
        return EArmorHitResult::PenetracaoParcial;
    }

    // Bloqueado: bloquear nao e sair ileso — a energia vira trauma.
    OutDanoCorpo = 0.f;
    OutChoque = Hit.Energia * TraumaTransferCoef(Armor.Classe); // calibre grande = possivel nocaute
    return EArmorHitResult::Bloqueado;
}

(Valores auxiliares como FatorDanoReduzido e os coeficientes de trauma são ilustrativos — a fonte-da-verdade numérica é a tabela desta página e a fórmula de dano da página-hub.)


Ver também