Dano por Parte do Corpo

Hit Zones

Especificação das zonas de acerto do personagem: multiplicadores por vital, transferência para a Vida global, consequências funcionais por zona, slots de equipamento que protegem cada região e sequelas temporárias vs permanentes.

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

Dano por Parte do Corpo

Página de game design (não diegética), derivada de Sistema de Atributos, Dano e Balística. Define as zonas de acerto do personagem e o que cada uma faz com os vitais descritos em Atributos do Jogador.

O princípio: onde o tiro acerta importa mais do que quanto de dano ele carrega. Cada zona tem multiplicadores próprios por vital, um coeficiente de transferência para a Vida global e consequências funcionais que mudam o que o jogador consegue fazer.


1. Tabela de zonas

Zonas de acerto com multiplicadores por vital e coeficiente de transferência para a Vida global:

ZonaMult. VidaTransfer. p/ globalMult. ChoqueConsequências específicas
Cabeça×2,0×2,0×3,0Morte rápida (headshot sem capacete = letal com quase qualquer calibre); sobrevivendo: inconsciência, visão turva/zumbido (perda temporária de visão/audição), Dor máxima.
Tórax×1,0×1,0×1,0Órgãos: pulmão atingido = respiração curta (stamina máx −30%, não prende respiração na mira); coração = morte; sangramento interno (Sangue drena sem fonte visível).
Abdômen×0,9×0,8×0,8Sangramento forte, perda de comida/água, infecção provável.
Braços×0,6×0,1×0,33Mira: sway +50%, recuo pior controlado, ações de duas mãos mais lentas; braço quebrado = sem arma longa (só pistola).
Mãos×0,5×0,1×0,25Recarregar/sacar/usar 40% mais lento, chance de derrubar item ao ser atingido, crafting/lockpick prejudicados.
Pernas×0,7×0,15×0,4Corrida reduzida; perna quebrada = mancar/rastejar, queda ao tentar sprint, Choque a cada passo.
Pés×0,5×0,1×0,25Passos ruidosos, velocidade −20%, sem sapato + terreno ruim = feridas/sangramento.

Leitura da tabela:

  • Mult. Vida escala o dano aplicado à zona; Transfer. p/ global define quanto desse dano vaza para a Vida geral do personagem — é por isso que um tiro na mão (×0,5 local, ×0,1 global) incapacita sem matar, enquanto um na cabeça (×2,0 / ×2,0) mata.
  • Mult. Choque escala o trauma transferido à Consciência: a cabeça (×3,0) apaga o personagem mesmo quando o capacete segura o projétil.
  • As consequências específicas são funcionais, não cosméticas: braços estragam a mira, mãos estragam o manuseio, pernas estragam a mobilidade, tórax estraga a respiração (e a Stamina junto).

2. Slots de equipamento por zona

Cada zona lista os slots de equipamento que a protegem — o item absorve parte do dano e se desgasta (a degradação em 5 estados é detalhada em Sistema de Dano):

  • Cabeça → capacete, máscara, óculos.
  • Tórax → colete, roupa, mochila (a mochila com coeficiente de absorção menor).

O mesmo princípio se estende às demais zonas pelo slot que as cobre fisicamente (calça → pernas, luvas → mãos, botas → pés): a proteção é honesta — só protege a área que o item realmente cobre. Um tiro no braço não é "tiro no colete".

3. Sequelas: temporárias vs permanentes

Ferimentos deixam sequelas temporárias ou permanentes:

  • Temporárias: fratura exige tala — o efeito (mancar, sem arma longa, etc.) dura até o tratamento com o item certo + tempo.
  • Permanentes: trauma craniano grave pode deixar zumbido permanente — só removível com tratamento em hospital de assentamento.

A regra geral: quanto mais crítica a zona e mais grave o ferimento, mais caro (em itens, tempo e deslocamento até infraestrutura) é reverter a sequela.


4. Esboço de implementação

Estruturas conceituais (estilo Unreal). A tabela do §1 vira um perfil de dados por zona; a resolução de acerto mapeia o osso do hit result para a zona.

/** Zonas de acerto do personagem. */
UENUM(BlueprintType)
enum class EBodyZone : uint8
{
    Head,       // x2.0 Vida | x2.0 global | x3.0 Choque
    Thorax,     // x1.0 | x1.0 | x1.0
    Abdomen,    // x0.9 | x0.8 | x0.8
    Arms,       // x0.6 | x0.1 | x0.33
    Hands,      // x0.5 | x0.1 | x0.25
    Legs,       // x0.7 | x0.15 | x0.4
    Feet        // x0.5 | x0.1 | x0.25
};

/** Perfil de dano de uma zona -- uma linha da tabela, como dado editavel. */
USTRUCT(BlueprintType)
struct FZoneDamageProfile
{
    GENERATED_BODY()

    /** Multiplicador do dano de Vida aplicado a zona. */
    UPROPERTY(EditDefaultsOnly)
    float VidaMult = 1.f;

    /** Fracao do dano da zona transferida para a Vida global. */
    UPROPERTY(EditDefaultsOnly)
    float GlobalTransfer = 1.f;

    /** Multiplicador do Choque (trauma -> Consciencia) gerado pelo impacto. */
    UPROPERTY(EditDefaultsOnly)
    float ChoqueMult = 1.f;

    /** Slots de equipamento que absorvem dano nesta zona (e se desgastam com o acerto). */
    UPROPERTY(EditDefaultsOnly)
    TArray<ETSSEquipSlot> SlotsProtegidos;
};
/** Mapeia o osso atingido (FHitResult::BoneName) para a zona de dano. */
EBodyZone ResolveHitZone(FName BoneName)
{
    static const TMap<FName, EBodyZone> BoneToZone = {
        { TEXT("head"),        EBodyZone::Head    },
        { TEXT("neck_01"),     EBodyZone::Head    },
        { TEXT("spine_03"),    EBodyZone::Thorax  },
        { TEXT("pelvis"),      EBodyZone::Abdomen },
        { TEXT("upperarm_l"),  EBodyZone::Arms    },
        { TEXT("upperarm_r"),  EBodyZone::Arms    },
        { TEXT("hand_l"),      EBodyZone::Hands   },
        { TEXT("hand_r"),      EBodyZone::Hands   },
        { TEXT("thigh_l"),     EBodyZone::Legs    },
        { TEXT("thigh_r"),     EBodyZone::Legs    },
        { TEXT("foot_l"),      EBodyZone::Feet    },
        { TEXT("foot_r"),      EBodyZone::Feet    },
    };

    if (const EBodyZone* Zone = BoneToZone.Find(BoneName))
    {
        return *Zone;
    }
    return EBodyZone::Thorax; // fallback conservador para ossos nao mapeados
}

Ver também