Build modular games with AI prompts. Remix-safe. Engine-agnostic. Contributor-first.

🎬 Tutorial Scenario Demo

Run the built-in tutorial scenario to understand MIFF’s workflow.

▶️ Run the Scenario

npx ts-node cli/miff-simulate.ts TutorialScenarioPure/scenario.json --seed 123 > out_tutorial.json

🔍 Validate Output

node scripts/validateOutputFormat.js out_tutorial.json scenario

📄 Expected Output

See TutorialScenarioPure/expected_output.json for the golden output.

Tip: Use RenderReplayPure to visualize renderData outputs.


🧪 Scenario Coverage Stubs

Below are example CLI stubs demonstrating how MIFF validates different genres. These are remix-safe placeholders to show structure, not shipped content.

1) Physics Shooter (Toppler)

# Initialize physics shooter scaffold
npx ts-node cli/miff-init.ts Toppler --template physics-shooter

# Simulate physics shooter scenario
npx ts-node cli/miff-simulate.ts Toppler/scenario.json --seed 101 > out_toppler.json
{
  "op": "runScenario",
  "status": "ok",
  "outputs": [
    { "type": "spawn", "entity": "enemy", "position": { "x": 12, "y": 4 } },
    { "type": "projectile", "id": "p1", "velocity": { "x": 3, "y": -9 } }
  ]
}

Remix-safe assets (preview):

square-red.png      # enemy placeholder
square-yellow.png   # projectile placeholder
mars-bg.png         # background placeholder

2) Rhythm RPG (Newhaven K-Pop Exorcist)

# Initialize rhythm RPG scaffold
npx ts-node cli/miff-init.ts Newhaven --template rhythm-rpg

# Simulate rhythm RPG scenario
npx ts-node cli/miff-simulate.ts Newhaven/scenario.json --seed 202 > out_rhythm.json
{
  "op": "runScenario",
  "status": "ok",
  "outputs": [
    { "type": "beat", "time": 0.0 },
    { "type": "window", "start": 0.1, "end": 0.3 },
    { "type": "combo", "streak": 5 }
  ]
}

Remix-safe assets (preview):

square-blue.png     # player marker
square-pink.png     # beat marker
ui-hud.png          # neutral UI placeholder

3) Open-World Adventure (Explorer)

# Initialize open-world scaffold
npx ts-node cli/miff-init.ts Explorer --template open-world

# Simulate explorer scenario
npx ts-node cli/miff-simulate.ts Explorer/scenario.json --seed 303 > out_explorer.json
{
  "op": "runScenario",
  "status": "ok",
  "outputs": [
    { "type": "mount", "entity": "horse", "zone": "zone_village" },
    { "type": "navigate", "from": "zone_village", "to": "zone_forest" },
    { "type": "dialog", "npc": "guard", "node": "greeting" }
  ]
}

Remix-safe assets (preview):

square-brown.png    # mount placeholder
square-green.png    # forest tile placeholder
dialog-box.png      # neutral dialog placeholder