Peso e Mobilidade

Weight & Mobility

Design de inventário, peso e mobilidade: 14 slots de equipamento, containers com grids, hotbar, a curva peso→stamina (livre até 6 kg, ~1,75% por kg acima) e o estado composto de Mobilidade.

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

Peso e Mobilidade

Página de game design (não diegética), derivada do Sistema de Atributos, Dano e Balística. Define o inventário do jogador e como o peso carregado se converte em custo físico real — cada quilo a mais é uma decisão.

O inventário é integrado ao sistema do projeto: grid replicado, identidade por GUID e containers aninhados.


1. Slots de equipamento (14)

O corpo do jogador tem 14 slots de equipamento:

#Slot#Slot
1Cabeça8Calça
2Armadura9Luvas
3Primária10Botas
4Secundária11Óculos
5Pistola12Ouvido
6Melee13Mochila
7Torso14Colete Tático

2. Containers e grids

  • Mochila, colete, roupa e coldres adicionam grids próprios de armazenamento (ex.: mochila 5×5 + 5×2).
  • Itens grandes ocupam um footprint W×H no grid e podem girar 90° para caber.
  • Containers são aninhados: uma bolsa dentro da mochila mantém o próprio grid e o próprio conteúdo.

3. Acesso rápido (hotbar)

  • A hotbar espelha os slots de arma (1–4) + consumíveis (5/6).
  • Itens presos ao corpo (coldre, bainha, bolso do colete) sacam mais rápido que itens dentro da mochila — que exige parar e abrir.
  • Posicionar o kit médico no bolso do colete vs no fundo da mochila é uma decisão de loadout com consequência em combate.

4. Peso → Stamina

A regra central do sistema:

  • Sem penalidade até ~6 kg de peso carregado.
  • Acima disso, cada 1 kg corta ~1,75% da barra máxima de Stamina, com piso de 5% (a barra nunca zera por peso).
  • É a barra máxima que encolhe — não a taxa de consumo: um jogador sobrecarregado simplesmente tem menos fôlego total.

Efeitos do sobrepeso:

  • Sprint mais curto;
  • Mira menos estável (respiração pesada);
  • Regeneração de Stamina mais lenta;
  • Mais ruído de movimento;
  • Quedas de altura mais perigosas.

5. Ferimentos limitam carga

O estado do corpo restringe o que se pode carregar e usar:

  • Braço quebrado = sem arma primária nas mãos e capacidade de carregar reduzida (só pistola).
  • Carregar item pesado nas mãos (motor, caixa) trava sprint e armas — transporte é uma escolha tática.

6. Esboço de implementação

O cálculo da Stamina máxima em função do peso total:

// Peso -> Stamina maxima: livre ate 6 kg; acima disso cada 1 kg corta ~1,75%
// da barra maxima, com piso de 5%.
float UTSSVitalsComponent::GetMaxStamina(float PesoTotalKg) const
{
    const float PesoLivreKg = 6.0f;
    const float CortePorKg  = 0.0175f; // ~1,75% por kg acima do limite livre
    const float PisoPercent = 0.05f;   // a barra nunca cai abaixo de 5%

    const float ExcessoKg = FMath::Max(0.f, PesoTotalKg - PesoLivreKg);
    const float Fator     = FMath::Max(PisoPercent, 1.f - ExcessoKg * CortePorKg);

    return StaminaBase * Fator; // StaminaBase = 100
}

A Mobilidade é um estado derivado e composto — pernas feridas, peso, fadiga e temperatura convergem para a velocidade real, a capacidade de sprint/salto e o ruído de passos:

USTRUCT(BlueprintType)
struct FMobilityState
{
    GENERATED_BODY()

    // Cada fator em 0..1, alimentado pelo sistema correspondente.
    UPROPERTY(BlueprintReadOnly) float FatorPernas  = 1.f; // ferimento/fratura nas pernas
    UPROPERTY(BlueprintReadOnly) float FatorPeso    = 1.f; // derivado do peso carregado
    UPROPERTY(BlueprintReadOnly) float FatorFadiga  = 1.f; // acumulo de longo prazo sem descanso
    UPROPERTY(BlueprintReadOnly) float FatorTermico = 1.f; // hipotermia/hipertermia

    UPROPERTY(BlueprintReadOnly) bool  bPodeSprint  = true; // falso: perna quebrada ou item pesado nas maos
    UPROPERTY(BlueprintReadOnly) bool  bPodeSaltar  = true;
    UPROPERTY(BlueprintReadOnly) float RuidoPassos  = 1.f;  // sobrepeso e pes feridos aumentam o ruido

    float GetVelocidadeFinal(float VelocidadeBase) const
    {
        // Estado composto: pernas feridas + peso + fadiga + temperatura -> velocidade real.
        return VelocidadeBase * FatorPernas * FatorPeso * FatorFadiga * FatorTermico;
    }
};

Ver também