Skip to content

Add focused NPC portrait and speaking animation to dialogue UI #139

@JOY

Description

@JOY

Summary

Make focused NPC dialogue feel like an RPG conversation instead of debug chat. The player should clearly see which NPC is speaking, with an NPC-side portrait or bust beside the NPC chat text and a simple speaking animation while the NPC response is delivered.

Source Docs

  • docs/design/56-focused-npc-dialogue-portrait-lipsync-design.md
  • docs/design/141-alpha-focused-npc-portrait-speaking-builder-brief.md
  • docs/design/30-alpha-ux-flow.md
  • docs/design/37-ai-npc-backend-client-roadmap.md
  • docs/setup/play-mode-smoke-checklist.md
  • docs/playtests/_templates/focused-dialogue-portrait/README.md

Scope

D1: Focused Dialogue Portrait UI

  • Add a portrait or bust anchor to the focused dialogue panel.
  • Place it beside the NPC-side message column.
  • Resolve portrait presentation from actor profile or local presentation catalog.
  • Show a stable missing-portrait fallback.
  • Hide or reduce focused NPC overhead nameplate while focused dialogue is active.
  • Prove portrait/bust identity matches the focused actor and selected line id.

D2: Text-Timed Speaking Animation

  • Add a presentation-only NPC speaking state.
  • Start speaking animation when NPC text reveal begins.
  • Stop when the line completes, fails, is skipped, times out, becomes stale, is rejected, or dialogue exits.
  • Clear old portrait and speaking state when the focused NPC switches.
  • Keep this independent from full voice, TTS, or Convai import.

D3: Dialogue State Polish

  • Keep player and NPC locked into dialogue state until exit.
  • Face the player and NPC toward each other during focused dialogue.
  • Disable normal movement input while typing.
  • Use non-combat talk or neutral idle animation during dialogue.
  • Keep ambient bubbles readable and separate from nameplates.
  • Show source and fallback state only in compact debug form.

D4: Ida Faber ARKit Blendshape Readiness

  • For Ida-family semi-real bodies, inspect the imported Unity mesh blendshape names before assuming support.
  • If the body exposes compatible face blendshapes, map it through an IdaFaberArkit52 lip sync profile.
  • Start with mouth and blink targets only; do not require full emotional facial acting for alpha.
  • Keep text-timed speaking fallback for Ida bodies without compatible blendshapes.

Future Hook Only

  • Leave hook points for audio-amplitude or provider viseme/blendshape lip sync.
  • Use Ida Faber's ARKit 52 blendshape documentation as the semi-real body reference, but verify the actual imported Unity mesh before implementation.
  • Full voice/TTS/session playback work remains tracked separately in Track scoped NPC voice sessions and playback implementation lane #288.

Acceptance Criteria

  • Pressing interact near an NPC enters focused dialogue only when in range.
  • NPC messages appear on the NPC side and player messages remain on the opposite side.
  • Focused NPC portrait or bust appears beside NPC-side text.
  • Portrait actor id matches focused actor id and NPC-side text actor.
  • Missing portrait fallback does not break layout and keeps actor name visible.
  • NPC speaking animation starts when NPC answer begins revealing or playing.
  • Speaking animation stops reliably on complete, skip, exit, fallback, timeout, stale reply, rejected reply, failure, duplicate-send block, or focused NPC switch.
  • Typing chat does not trigger movement, jump, attack, or interact input.
  • Player and NPC remain facing each other until dialogue exits.
  • Ambient bubbles and nameplates do not overlap heavily in the default camera view.
  • Play Mode smoke verifies one successful model-backed or scripted-smoke NPC reply and one fallback-visible case.
  • Provider output remains presentation-only and cannot mutate memory, relationship, quest, TIME, SECOND, inventory, combat, or body lifecycle state.

Evidence Template

  • docs/playtests/_templates/focused-dialogue-portrait/
  • docs/playtests/_templates/focused-dialogue-portrait/portrait-actor-parity-note.md

References

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:ai-agentOffline player agent, NPC intelligence, and agent observabilityarea:unityUnity client, scenes, assets, or editor workflowenhancementNew feature or requestpriority:p1High priority for current milestonesize:mMedium task

    Type

    No type
    No fields configured for issues without a type.

    Projects

    Status

    Ready

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions