Production context
GDD/01-Gameplay/10-Blood-Visual.mdVerified implementation evidence
- Not verified for this documentation pass.
Relationships
Document contract coverage
Use these required Feature Specification areas during review. The imported GDD below is canonical; items not stated explicitly remain unresolved.
- ReviewPurpose & Player Value
- ReviewScope
- ReviewOut of Scope
- ReviewTerminology
- ReviewFunctional Behavior
- ReviewStates & Flows
- ReviewRules & Edge Cases
- ReviewDependencies
- ReviewAcceptance Criteria
- ReviewOpen Questions
Canonical GDD content
Visual blood only. It does not change combat, survival, stealth, or other gameplay in this spec. Any future gameplay use of blood is [TBD].
Related: 03-Combat-System.md, 06-Inventory-and-Items.md, 08-Character-Creation.md, 09-Weapon-Customization.md, 11-Wetness-and-Rain.md, ../03-Enemies/01-Zombie-Design.md, ../03-Enemies/02-Boss-Zombies.md, ../06-Art-Audio/01-Art-Direction-and-MetaHuman.md.
Dirt / fouling is cancelled (no dirt meter, no workbench cleaning, no jam/spread-from-dirt). Use still reduces durability. See 09-Weapon-Customization.md.
Layers — [CONFIRMED]
Both exist (they are not alternatives):
| Layer | What it is | Persistence |
|---|---|---|
| World hit feedback | Splatter / decals / particles in the scene when a living target is damaged | Ephemeral (combat readability) |
| Mesh stain | BloodAmount 0–1 on a Dynamic Material Instance (MID), driven by a per-mesh blood mask |
Item and character state; see below |
| Local HUD overlay | Blood on the local player's screen, not on the eye mesh | Fades over time; not shown to other players |
Blood color is one palette for all living targets (player, zombie, boss, animal). Do not author separate human vs zombie blood colors unless that decision is reopened.
Mesh stain — material contract — [CONFIRMED]
- Approach: mask on the existing material, not a Material Layer Blend stack.
- Control: a single scalar
BloodAmountin 0–1 per stained object (one value for the whole item/mesh, including multi-slot materials). - Mask: authored per mesh. Shared/procedural masks are not the v1 contract.
- MID applies that scalar to the mask. Exact parameter names are [TBD] (technical art).
- If a mesh has no blood mask (or materials do not expose the stain path), it shows no blood. Missing mask is not a ship blocker for that asset, but the pipeline applies to all future content in this system.
- New melee / clothing / body content is expected to follow this pipeline; unmasked pieces simply stay clean-looking.
What can stain (attacker) — [CONFIRMED]
Stains the thing that scored a melee hit, when that hit connects and deals damage to a living target.
Counts:
- Any equipped item that can perform a melee hit (melee weapons, tools, building hammer, etc.).
- A firearm used as a melee strike (butt / bayonet / similar) — the gun mesh stains.
- Unarmed punch: skin of the hands if no gloves are worn; gloves only (not hand skin) if gloves are worn.
- Kick: shoes.
Does not count:
- Thrown melee / thrown items.
- Hits on structures, walls, doors, or other non-living props (nothing to bleed).
- Block / parry — the attacker's weapon does not stain from being blocked.
Ranged gunfire does not stain the firearm. It can still stain the victim (see below).
What can stain (victim and bystanders-on-body) — [CONFIRMED]
When a living target takes damaging hits (melee, firearms, explosives, or any other damage that actually deals damage):
- Their outer worn clothing can stain. Which slot is “outer” is [TBD] until clothing layers are designed; do not implement a layer-priority table yet.
- Items in inventory that are not worn do not stain.
- Hair and skin stain. That
BloodAmountlives on the character/pawn, not on an item. Changing clothes does not clear body/hair blood. - Eyes do not receive a mesh stain.
- Zombies and bosses use the same mesh-stain contract on their bodies (per-mesh mask +
BloodAmount). - Animals use the same living-target rules.
Dual state: item vs character — [CONFIRMED]
| Surface | Where BloodAmount lives |
Unequip / swap |
|---|---|---|
| Weapon, tool, firearm (if melee-stained), worn clothing, gloves, shoes | Item instance | Stays on that item (drop, loot, inspect, re-equip) |
| Hair, skin (not eyes) | Character | Stays on the character when outfits change |
Both can be stained at once (e.g. bloody shirt item + bloody skin/hair on the pawn).
Accumulation — [CONFIRMED] rules, numbers [TBD]
- Amount added scales with damage dealt (attacker gear) or damage taken (victim clothes/body). Do not invent a formula, coefficient, or curve in code or docs.
- There is a ceiling (visual saturates; treat the scalar cap as 1.0 unless a different cap is decided later).
- Stains ease in (not a binary first-hit full coat).
- Stains do not decay until a wash system exists.
Wash — [CONFIRMED] intent, not this slice
Workbench cleaning of dirt/blood is cut.
Future wash sources (not built in the visual-pipeline slice):
- Faucet
- Water source
- Rain (wetness from rain is specified in 11-Wetness-and-Rain.md; washing blood with rain is still not decided)
Until a wash system exists, BloodAmount stays. Wash interaction, whether rain reduces blood, and whether wash is channeled are [TBD]. WetAmount is independent and must not clear blood by existing.
Networking, inspect, save — [CONFIRMED]
- Other players must see mesh stains (weapons, worn clothes, hair/skin, zombies/bosses).
- Mesh
BloodAmounton items is instance state: world drops, loot, and workbench 3D inspect show the stain. - Item and player character body/hair blood persist in the save record.
- Whether AI blood (zombie/boss/animal) is written into world persistence or only lives on the actor until despawn is [TBD].
HUD overlay is local-only and is not replicated.
Local HUD overlay — [CONFIRMED] existence, tuning [TBD]
- Blood marks on the local player's screen, then fade over time.
- Replaces staining the eye mesh.
- Duration, intensity vs damage, and exactly which events spawn it (incoming damage, camera-facing splatter, melee swing, combinations) are [TBD]. Do not copy a third-party vignette curve.
Gameplay — [TBD]
No stealth, infection, hygiene, or stat effect is specified. Do not hook BloodAmount into GAS or AI senses until a later decision.
Pipeline ownership — [CONFIRMED]
- Spec first; mesh masks and material wiring follow the contract above.
- This is a game-wide pipeline, not a one-weapon prototype. Content without a mask simply does not show the stain.
Open questions still [TBD]
Do not implement as if decided:
- Clothing outer-layer resolution.
BloodAmountgain formula and easing.- MID parameter names.
- HUD overlay triggers, duration, and intensity.
- Wash / rain / faucet implementation.
- AI blood persistence across server restart.
- World splatter/decal art direction (materials, lifetime, pooling) beyond “this layer exists.”
- Gameplay consequences of being bloody.