mirror of
https://github.com/Donchitos/Claude-Code-Game-Studios.git
synced 2026-10-16 09:58:36 +00:00
Release 1.1.0 — one config file, and a process weight you choose
`project.yaml` at the repo root is now the single source of truth for a project's configuration, replacing `production/stage.txt`, `production/review-mode.txt` and `.claude/docs/technical-preferences.md` (all three still read as a fallback; nothing is force-deleted). **`modes.rigor` — one question instead of six.** `minimal`, `standard` or `full` fronts six knobs: `modes.workflow`, `docs.density`, `qa.level`, `modes.story_granularity`, `modes.review_mode` and `team.size`. It defaults to `minimal`, which is a change from 1.0's behaviour: the heavier tier was measured costing several times more to reach working code without producing a better result, and returning nothing when a fresh developer inherited the project. Pin `modes.rigor: standard` to keep 1.0's process level. Also in this release: - `/settings` to view or change any setting, and `project.local.yaml` for per-developer preferences that should not be committed. - `system_overrides` to hold one system to a higher standard than the rest of the project, and `testing.strict` to set per test type whether missing evidence blocks a story or warns. - A story that changes anything the player sees is not closed until the game has been launched, observed, and a screenshot retained in `production/qa/evidence/`. A parse check is not a run. This holds at every rigor level, including `minimal`, where automated tests are waived but the look is not. - The code root is engine-specific and enforced as such: Godot `src/`, Unity `Assets/`, Unreal `Source/<Module>/`. Two of the three will not build a project laid out any other way. - Migration tooling for existing projects: `.claude/scripts/migrate-v1-config.sh` converts a 1.0 layout, non-destructively by default, with a report to review before `--finalize` deletes anything. - Ask-before-write holds regardless of personal automation settings. Upgrading from 1.0 or earlier: see UPGRADING.md. Full list of changes: CHANGELOG.md. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016xvzG3i7pWQg4LjyDwWMXd
This commit is contained in:
co-authored by
Claude Opus 5
parent
984023ddac
commit
d05699707f
+175
@@ -0,0 +1,175 @@
|
||||
> Authoring guidance for interaction-pattern-library.md. Load only the part covering the section currently being authored — not the whole file at once.
|
||||
|
||||
> Covers: **Game-Specific UI Patterns** — full reference specifications for Inventory Slot, Ability / Skill Icon, Health / Resource Bar, Dialogue Box, Context Action Prompt, Damage Number.
|
||||
|
||||
## Game-Specific UI Patterns
|
||||
|
||||
---
|
||||
|
||||
#### Inventory Slot
|
||||
|
||||
**Category**: Game-Specific
|
||||
**Status**: Draft
|
||||
**When to Use**: Every item container in the inventory grid. Empty slots, populated
|
||||
slots, equipped slots, locked slots. The slot is the frame; the item icon is the
|
||||
content.
|
||||
|
||||
**States**:
|
||||
|
||||
| State | Visual | Notes |
|
||||
|-------|--------|-------|
|
||||
| Empty | Subtle slot border, no content. Not the same as disabled. Empty slots are interactable (receive items). | Avoid fully invisible empty slots — players lose track of grid dimensions |
|
||||
| Populated | Item icon fills 80% of slot area. Stack count bottom-right (if applicable). Quality border (colorblind-safe — icon + color). Equipped badge (top-right, if equipped). | |
|
||||
| Focused | Focus ring. Tooltip appears after 300ms. | |
|
||||
| Selected | Thicker or contrasting border. Used when multi-select is supported. | |
|
||||
| Drag source | Slot dims, drag ghost follows pointer. | See Grid Item for full drag spec |
|
||||
| Locked | Padlock icon overlay. No interaction. May show item at 50% opacity behind lock. | Used for locked loadout slots, DLC content, etc. |
|
||||
| Highlighted | Animated border glow (pulsing). Used for quest-relevant items or newly acquired items. | Respect motion reduction — replace pulse with a static badge |
|
||||
| Cooldown overlay | Radial fill overlay from 12 o'clock, clockwise, depleting as cooldown expires. | Only applicable if slots represent active items with cooldowns |
|
||||
|
||||
**Accessibility**: Stack counts and quality tiers must have text or icon alternatives to color coding. Tooltip is the primary accessibility mechanism — ensure it is reachable by keyboard and screen reader. Locked slots must announce "locked" to screen readers.
|
||||
|
||||
**Implementation Notes**: [Godot: Custom `Control` node. Quality border implemented as a `StyleBoxFlat` swapped based on rarity — avoid using `modulate` color for quality, as it affects the icon color. Drag and drop implemented via `get_drag_data()` and `can_drop_data()` / `drop_data()` override methods.]
|
||||
|
||||
---
|
||||
|
||||
#### Ability / Skill Icon
|
||||
|
||||
**Category**: Game-Specific
|
||||
**Status**: Draft
|
||||
**When to Use**: Ability buttons in the HUD ability bar, skill tree nodes, and
|
||||
any context where an ability must show availability state.
|
||||
|
||||
**States**:
|
||||
|
||||
| State | Visual | Notes |
|
||||
|-------|--------|-------|
|
||||
| Available | Full opacity icon. Keybinding label below. | |
|
||||
| On cooldown | Radial overlay depleting clockwise from 12 o'clock. Remaining time shown as a number in the center when > 2 seconds remain. | |
|
||||
| Charges remaining | Charge pip indicators below icon (e.g., 3 filled circles = 3 charges). Number alternative for screen readers. | |
|
||||
| Out of resource | Icon desaturates to ~20%. Border dims. Keybinding label dims. Distinct from cooldown — resource-gated, not time-gated. | |
|
||||
| Locked / not unlocked | Icon silhouette only (no full art visible). Padlock badge. May show unlock condition in tooltip. | |
|
||||
| Active / channeling | Pulsing border. Radial fill shows channel duration remaining. | |
|
||||
| Just activated | Brief scale 0.9x then spring to 1.0x (overshoot to 1.05x). | Example: Guild Wars 2 and Path of Exile both use press-depress animations on ability use to confirm activation. Respect motion reduction. |
|
||||
|
||||
**Accessibility**: All cooldown/charge information must have a numeric value (screen reader cannot parse radial overlays). The cooldown timer number satisfies this. Ability names and descriptions must be exposed to screen readers via tooltip.
|
||||
|
||||
**Implementation Notes**: [Godot: Custom `TextureButton` subclass with overlay
|
||||
`Control` nodes for cooldown radial and charge pips. The cooldown radial uses a
|
||||
custom shader on a `ColorRect` rotating a mask — or implement with a
|
||||
`ProgressBar` styled as circular if engine supports it. Verify against
|
||||
engine-reference/godot/ for Godot 4.6 shader support for this pattern.]
|
||||
|
||||
---
|
||||
|
||||
#### Health / Resource Bar
|
||||
|
||||
**Category**: Game-Specific
|
||||
**Status**: Draft
|
||||
**When to Use**: Any continuously varying value in the HUD that represents a
|
||||
critical player resource. Health, mana, stamina, shield, fuel.
|
||||
|
||||
**States and behaviors**:
|
||||
|
||||
| Event | Visual | Audio | Duration |
|
||||
|-------|--------|-------|---------|
|
||||
| Value decrease (damage) | Fill shrinks. Brief "damage flash" on the fill (white or red flash). Ghost bar lingers at previous value and drains to new value over 0.5s ("damage indicator"). | [Damage taken sound — varies by amount] | Instant decrease, 500ms ghost bar drain |
|
||||
| Value increase (heal) | Fill grows. Brief heal color flash (green — ensure colorblind safe with icon/glow backup). | [Heal sound] | 300ms ease-in |
|
||||
| Below 25% threshold | Fill changes color to warning state. Border pulses (or static badge in motion reduction mode). Optional: heartbeat audio cue (paired with visual if audio is sole signal). | [Low health sound — loops until above threshold] | Continuous |
|
||||
| At zero | Bar empty. Optional: bar shakes briefly. Death/depletion event fires. | [Death/depletion sound] | 200ms shake |
|
||||
| Maximum | Fill at 100%, brief glow. | — | 200ms |
|
||||
| Overflow (shield) | A separate bar segment appears beyond the natural fill area, in shield color. | [Shield gain sound] | 200ms |
|
||||
|
||||
**Accessibility**: The current value must be accessible as a number (tooltip or persistent display, or both). Color-coded threshold states must have non-color backups (icon, flashing, or audio visual warning). Warning state at 25% must have a visual signal independent of the color change.
|
||||
|
||||
**Implementation Notes**: [Godot: Two overlapping `ProgressBar` nodes for ghost
|
||||
bar effect — back bar holds previous value (drains via Tween), front bar holds
|
||||
current value (updates instantly). Threshold states trigger `StyleBoxFlat` swaps
|
||||
on the front bar. Ghost bar Tween duration is tunable as a designer parameter.]
|
||||
|
||||
---
|
||||
|
||||
#### Dialogue Box
|
||||
|
||||
**Category**: Game-Specific
|
||||
**Status**: Draft
|
||||
**When to Use**: NPC conversation, voiced narrative dialogue, tutorial text
|
||||
delivered through a character. All dialogue that has a speaker.
|
||||
|
||||
**Structure**: Speaker portrait or name tag (top of box or left side). Dialogue text body. Continue/advance prompt (bottom right). Optional: skip-all button, voice acting indicator, subtitle indicator.
|
||||
|
||||
**States and behaviors**:
|
||||
|
||||
| State | Visual | Input | Response | Duration |
|
||||
|-------|--------|-------|----------|---------|
|
||||
| Line entering | Text reveals character-by-character (typewriter effect). Or: text fades in at full speed if accessibility option set. | — | — | Speed: configurable in accessibility settings |
|
||||
| Revealing | Text animating in. Continue prompt hidden or pulsing at slow opacity. | [Any advance input] | Skip to end of current line instantly (show full line, stop typewriter) | Immediate |
|
||||
| Line complete | Full line shown. Continue prompt visible and animated. | — | — | — |
|
||||
| Advancing to next line | Continue prompt hides. Text fades out or wipes. New line begins. | [Any advance input] — Enter / A / Cross / Space / mouse click | Advance | 100ms transition |
|
||||
| Choices appearing | Choice buttons appear below dialogue text. Continue prompt hidden. Navigation focus moves to first choice. | D-pad / keyboard to select, Enter / A / Cross to confirm | Select choice | 150ms enter animation |
|
||||
| Closing | Box fades out | Final line advanced | Return control to player | 200ms |
|
||||
| Skipping all (if supported) | Brief confirmation prompt: "Skip dialogue?" | Dedicated skip button | Skip to post-dialogue state | — |
|
||||
|
||||
**Accessibility**: Subtitles are always enabled by default for all voiced dialogue. Typewriter animation speed is a user setting (see accessibility-requirements.md). The dialogue box must not auto-advance — players must control pacing. Speaker name is always shown. All choice buttons must be navigable by keyboard and gamepad. Choices must be accessible to screen readers with position announced.
|
||||
|
||||
**Implementation Notes**: [Godot: `RichTextLabel` with `bbcode_enabled` for
|
||||
formatting. Typewriter effect via `visible_characters` property animated by a
|
||||
`Timer`. Bind the advance input to a function that either skips typewriter
|
||||
(sets `visible_characters = -1`) or advances the dialogue state. Speaker name
|
||||
displayed in a separate `Label` above or beside the box. Dialogue data loaded from
|
||||
JSON or a dedicated dialogue format (e.g., Dialogic, Yarn Spinner for Godot).]
|
||||
|
||||
---
|
||||
|
||||
#### Context Action Prompt
|
||||
|
||||
**Category**: Game-Specific
|
||||
**Status**: Draft
|
||||
**When to Use**: A prompt that appears near an interactable game object indicating
|
||||
what the player can do. "Press [A] to open chest." "Hold [E] to pick up." Appears
|
||||
when the player enters the interaction zone, disappears when they leave.
|
||||
|
||||
**States**:
|
||||
|
||||
| State | Visual | Notes |
|
||||
|-------|--------|-------|
|
||||
| Appearing | Fades in and rises 8px from object anchor point. | Respect motion reduction — fade only, no rise |
|
||||
| Idle | Platform-correct button icon + action label. Icon matches current input method (updates if player switches). | Always show platform-correct icon — do not hardcode "Press A" for all platforms |
|
||||
| Holding (for hold inputs) | Radial fill on the button icon shows hold progress. Label changes to active verb ("Opening..."). | |
|
||||
| Cannot interact (blocked) | Icon dims. Label shows reason if known ("Too heavy", "Need key"). | Optional — only show blocked state if the reason is meaningful to the player |
|
||||
| Disappearing | Fades out. | Triggered when player exits interaction zone |
|
||||
|
||||
**Accessibility**: The button icon must be accompanied by a text label — do not rely on icon alone (some players use custom button labels or adaptive controllers with non-standard icons). The prompt must be positioned to not overlap character health or critical HUD information.
|
||||
|
||||
**Implementation Notes**: [Godot: Attach as a `Node3D` child (or `Node2D` child in 2D) of the interactable object. Use a `BillboardMesh` or a `SubViewport` with a UI scene for 3D games — this keeps the prompt facing the camera without code. Update the button icon texture based on `Input.get_joy_name()` or keyboard detection via `InputEventKey` vs `InputEventJoypadButton`. Hold progress implemented as an `AnimationPlayer` or `Tween` on a radial mask shader.]
|
||||
|
||||
---
|
||||
|
||||
#### Damage Number
|
||||
|
||||
**Category**: Game-Specific
|
||||
**Status**: Draft
|
||||
**When to Use**: Floating feedback numbers above combat participants. Normal
|
||||
damage, critical damage, healing, miss.
|
||||
|
||||
**Variants**:
|
||||
|
||||
| Variant | Visual | Notes |
|
||||
|---------|--------|-------|
|
||||
| Normal damage | White number, normal weight, medium size. | |
|
||||
| Critical hit | Larger size (1.5x), bold weight, orange or yellow — verify colorblind safe. Brief scale impact (1.3x → 1.0x on appear). | Example: Path of Exile and Diablo IV both use scale-pop for crits to make them immediately recognizable by size alone, independent of color. |
|
||||
| Healing | Green (verify colorblind safe — use + prefix and upward trajectory as non-color backups). | |
|
||||
| Miss / Evade | "MISS" text, grey, italic. Floats at smaller size. | |
|
||||
| Status damage (DoT) | Smaller size, distinct color matching the status effect. | |
|
||||
|
||||
**Behavior**: Numbers float upward from the hit location over 1.0 second. Numbers fade from 100% to 0% during the last 0.4 seconds. Multiple numbers from rapid hits stagger horizontally to avoid overlap. Maximum simultaneous damage numbers on screen: [define per game — typically 8-12 per character].
|
||||
|
||||
**Accessibility**: Damage numbers are purely supplementary feedback — they must never be the only way to understand combat state. Health bars are the authoritative source. Provide an option to disable damage numbers entirely (some players find them visually overwhelming). When disabled, the game must remain fully playable.
|
||||
|
||||
**Implementation Notes**: [Godot: Pool of `Label3D` (3D games) or `Label` (2D games)
|
||||
instances recycled via an object pool. Each instance is given a random small
|
||||
horizontal offset on spawn (±20px) to reduce overlap. Float animation via
|
||||
`Tween` on `position.y` and `modulate.a`. Critical hit scale-pop via Tween
|
||||
with `EASE_OUT` on scale followed by linear settle.]
|
||||
|
||||
---
|
||||
Reference in New Issue
Block a user