Claude-skill-registry Gameplay Concepts & Mechanics

Core gameplay loop focusing on crime investigation, evidence photography, and time loop mechanics. Use when working on investigation features, photo system, or game progression.

install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/gameplay-concepts" ~/.claude/skills/majiayu000-claude-skill-registry-gameplay-concepts-mechanics && rm -rf "$T"
manifest: skills/data/gameplay-concepts/SKILL.md
source content

Gameplay Concepts & Mechanics

Game Overview

Genre: First-Person Detective / Time Loop Mystery
Core Loop: Witness crime → Photograph evidence → Analyze clues → Repeat day → Solve mystery

Setting: Small town/village with recurring day cycle
Perspective: First-person with camera mechanics
Time Period: One repeating day (6 AM - 10 PM)

Three Pillars of Gameplay

1. 🕵️ Crime Investigation

2. 📷 Photography Evidence System

3. ⏰ Time Loop Mechanics


1. Crime & Investigation System

Crime Structure

Crime Definition (

public/data/events/*.json
):

{
  "id": "crime_theft",
  "name": "The Bread Theft",
  "type": "crime",
  "triggerTime": "03:00",
  "location": {"x": 10, "y": 0, "z": 15},
  "description": "Someone stole fresh bread from the bakery",
  "suspects": ["thief", "beggar"],
  "evidence": [
    {
      "type": "photo",
      "subject": "thief",
      "location": "bakery",
      "timeWindow": ["02:45", "03:15"]
    }
  ]
}

Investigation Structure

Investigation Definition (

public/data/investigations/*.json
):

{
  "id": "bread_thief",
  "title": "Who Stole the Bread?",
  "description": "The baker reports bread missing every morning",
  "objectives": [
    {
      "id": "photograph_suspect",
      "description": "Photograph the suspect near the bakery",
      "type": "photo",
      "required": true
    },
    {
      "id": "find_witness",
      "description": "Find someone who saw the crime",
      "type": "dialogue",
      "npcId": "guard"
    }
  ],
  "solution": {
    "culprit": "thief",
    "motive": "Hunger",
    "evidence": ["photo_thief_bakery"]
  }
}

Crime Types

Theft:

  • Missing items
  • Suspects with opportunity
  • Evidence: photos, witness testimony

Vandalism:

  • Damaged property
  • Motive investigation
  • Evidence: timing, location

Mystery/Suspicious Activity:

  • Unusual behavior
  • Pattern recognition
  • Evidence: multiple observations

Investigation States

enum InvestigationState {
  Locked,      // Not yet discovered
  Active,      // Currently investigating
  Solved,      // Completed successfully
  Failed       // Time ran out or wrong conclusion
}

Evidence Collection

Evidence Types:

  1. Photographs: Visual proof of suspects/scenes
  2. Testimony: NPC dialogue responses
  3. Physical Clues: Items found at crime scene
  4. Timing: When events occurred
  5. Location: Where suspects were seen

Evidence Chain:

Observe → Photograph → Analyze → Connect → Conclude

Clue System (Planned)

Clue Properties:

interface Clue {
  id: string;
  type: "photo" | "dialogue" | "item" | "timing";
  content: string;
  timestamp: string;
  location: Vector3;
  relatedNPC?: string;
  importance: "critical" | "supporting" | "minor";
}

2. Photography Evidence System

Photo System (
src/systems/photoSystem.ts
)

Core Concept: Camera is the primary investigation tool

Features:

  • Take photos with camera view
  • Photos capture: NPCs, locations, timestamps
  • Limited film capacity (encourages careful shooting)
  • Photos persist across time loops
  • Evidence review interface

Photo Capture

Trigger: Press 'C' key or Click photo button

Photo Data Structure:

interface Photo {
  id: string;
  timestamp: string;           // Game time when taken
  location: {x: number, y: number, z: number};
  cameraAngle: {x: number, y: number};
  visibleNPCs: string[];       // IDs of NPCs in frame
  buildingsInFrame: string[];  // Nearby buildings
  timeOfDay: "dawn" | "morning" | "afternoon" | "evening" | "night";
  thumbnail?: string;          // Screenshot data
}

Photo Analysis

Evidence Value Calculation:

// Photo is valuable if:
- Taken during relevant time window
- Shows suspect near crime scene
- Captures interaction between NPCs
- Documents timeline of events

Photo Scoring:

interface PhotoScore {
  relevance: number;    // 0-10 (related to active investigation)
  timing: number;       // 0-10 (right time window)
  composition: number;  // 0-10 (subject visibility)
  rarity: number;       // 0-10 (unusual event captured)
}

Camera Mechanics

View Mode:

- First-person camera switches to "photo mode"
- UI overlay with viewfinder
- Focus indicator on NPCs
- Timestamp display
- Film count remaining

Photo Restrictions:

  • Limited film: 36 photos per loop
  • Cannot photograph in darkness (too dark to see)
  • Distance limit: Clear photos up to 20 units
  • Cannot photo through walls/obstacles

Photo Storage

In-Game Album:

- Photos organized by time taken
- Filter by: NPC, location, time
- Compare photos across loops
- Mark important photos
- Add notes to photos

Photo UI (

src/ui/photoStack.ts
):

- Polaroid-style display
- Click to enlarge
- See timestamp and location
- Compare with evidence list

Evidence Photos

Critical Evidence:

✓ Suspect at crime scene during crime time
✓ Unusual NPC interactions
✓ Items out of place
✓ Contradictions with NPC testimony

Supporting Evidence:

○ NPC schedules/patterns
○ Location relationships
○ Timeline of events
○ Witness presence

3. Time Loop Mechanics

Loop Concept

The Core Mechanic: Day repeats until mystery is solved

Day Structure:

06:00 - Day Start (player wakes)
08:00 - Town wakes up, NPCs start routines
12:00 - Midday, peak activity
15:00 - Afternoon, schedules continue
18:00 - Evening, some NPCs head home
21:00 - Night, reduced activity
05:59 - Day End (forced loop or manual reset)

Loop States

First Loop:

  • Player unaware of loop
  • Crime occurs without warning
  • NPCs behave normally
  • Investigation begins

Subsequent Loops:

  • Player retains knowledge
  • Can anticipate events
  • NPCs unaware of loop (same dialogue)
  • Evidence accumulates

Final Loop (Solved):

  • Player presents evidence
  • Confrontation with culprit
  • Resolution cutscene
  • Day breaks loop / Game continues

Loop Trigger Events

Automatic Reset:

// Day ends at 10 PM
if (currentTime >= 22:00) {
  triggerLoopReset();
}

Manual Reset:

// Player can reset via menu
// Useful if stuck or want to retry
resetToMorning();

Solved Reset:

// After solving, day continues or loop ends
if (investigationSolved) {
  breakLoop(); // or continueWithoutLoop();
}

Persistent Elements

What Carries Over: ✅ Photos taken (evidence album)
✅ Dialogue options unlocked
✅ Player knowledge (journal entries)
✅ Investigation progress
✅ Clue connections made
✅ NPC relationship levels

What Resets: 🔄 NPC positions (back to 6 AM)
🔄 NPC dialogue state
🔄 World state (crimes haven't happened)
🔄 Player position (spawn point)
🔄 Time (6:00 AM)
🔄 Dynamic objects (doors, items)

Loop Counter

interface LoopData {
  loopNumber: number;           // How many loops completed
  daysInLoop: number;           // Total days experienced
  investigationsActive: string[];
  investigationsSolved: string[];
  totalPhotos: number;
  criticalEvidenceFound: boolean;
}

Meta-Progression

Knowledge Growth:

Loop 1: Witness crime, confused
Loop 2: Know when crime occurs, prepare camera
Loop 3: Know suspect patterns, strategic photos
Loop 4: Have full timeline, present evidence

Player Journal:

interface JournalEntry {
  loop: number;
  time: string;
  content: string;
  type: "observation" | "clue" | "theory";
  relatedPhotos: string[];
}

Gameplay Flow

Investigation Cycle

1. OBSERVE
   ├─ Watch NPCs following schedules
   ├─ Notice unusual behavior
   └─ Identify suspects

2. DOCUMENT
   ├─ Take photos of evidence
   ├─ Screenshot crime scenes
   └─ Capture NPC interactions

3. ANALYZE
   ├─ Review photos in album
   ├─ Compare with NPC schedules
   └─ Build timeline

4. INTERROGATE
   ├─ Talk to NPCs
   ├─ Present photos as evidence
   └─ Unlock new dialogue

5. CONCLUDE
   ├─ Identify culprit
   ├─ Present evidence
   └─ Solve investigation

6. LOOP (if not solved)
   ├─ Reset day
   ├─ Retain knowledge
   └─ Refine approach

Player Actions

Movement:

  • WASD: Walk
  • Mouse: Look
  • Space: Jump (if enabled)
  • Shift: Sprint (if enabled)

Interaction:

  • E: Interact with NPCs/objects
  • C: Take photo
  • Tab: Open inventory/evidence
  • Esc: Menu / Pause

Investigation:

  • Photo album review
  • Journal reading
  • Map viewing
  • NPC schedule notes

NPC Dialogue System

Dialogue States:

interface DialogueNode {
  id: string;
  text: string;
  conditions?: {
    hasPhoto?: string;        // Requires specific photo
    timeRange?: [string, string];
    loopNumber?: number;      // Unlocks after X loops
    investigationState?: string;
  };
  responses: DialogueChoice[];
}

Evidence Presentation:

// Show photo to NPC for reaction
presentEvidence(photo: Photo, npc: NPC) {
  if (photo.visibleNPCs.includes(npc.id)) {
    // NPC recognizes themselves
    return npc.reactions.photograph_self;
  } else if (photo.relatedToNPC(npc)) {
    // Photo shows something NPC knows about
    return npc.reactions.photograph_related;
  }
}

Data Files Structure

Events Directory

public/data/events/
  ├── crime_theft.json      - Bread theft crime
  └── [future crimes]

Investigations Directory

public/data/investigations/
  ├── bread_thief.json      - Bread theft investigation
  └── [future mysteries]

Packs (Combined Content)

public/data/packs/
  └── bakery_scenario.json  - Complete scenario with NPCs, crime, investigation

Planned Features

Investigation Board

  • Connect clues visually
  • Timeline reconstruction
  • Suspect profiles
  • Evidence organization

Advanced Photography

  • Photo quality/lighting affects value
  • Different lenses/zoom levels
  • Photo comparison tool
  • Anomaly detection

Multiple Investigations

  • Parallel mysteries
  • Interconnected crimes
  • Long-term mysteries spanning multiple loops

NPC Memory

  • NPCs remember player actions
  • Relationship building affects dialogue
  • Trust system for information sharing

Development Commands

List all events

cd /home/gianfiorenzo/Documents/Vs\ Code/babylon_fp
ls -1 public/data/events/*.json

List all investigations

cd /home/gianfiorenzo/Documents/Vs\ Code/babylon_fp
ls -1 public/data/investigations/*.json

Validate investigation JSON

cd /home/gianfiorenzo/Documents/Vs\ Code/babylon_fp
for f in public/data/investigations/*.json; do
  echo "Checking $f..."
  node -e "JSON.parse(require('fs').readFileSync('$f'))" && echo "✓ Valid"
done

Check photo system

cd /home/gianfiorenzo/Documents/Vs\ Code/babylon_fp
grep -n "class PhotoSystem\|interface Photo" src/systems/photoSystem.ts

Related Files

src/systems/photoSystem.ts              - Photo capture & storage
src/systems/npcSystem.ts                - NPC behavior & schedules
src/systems/hourlyCycle.ts              - Event triggering
src/systems/loopManager.ts              - Game loop management
src/ui/photoStack.ts                    - Photo display UI
public/data/events/                     - Crime definitions
public/data/investigations/             - Investigation definitions
public/data/packs/                      - Complete scenarios

Design Philosophy

Player Agency:

  • No hand-holding, figure it out
  • Multiple solution paths
  • Mistakes don't end game (loop resets)
  • Experimentation encouraged

Environmental Storytelling:

  • NPCs reveal story through schedules
  • World design hints at relationships
  • Photos tell stories without words

Emergent Narrative:

  • Player creates their own investigation story
  • Each loop can be different approach
  • Personal theories and deductions

Respect Player Time:

  • Loops are short (15-20 real minutes)
  • Fast-forward options
  • Clear progress indicators
  • Skip known information