@ericrisco/rsc 0.1.35 → 0.1.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -2
- package/manifest.json +241 -2
- package/package.json +1 -1
- package/scripts/lib/domains.js +1 -0
- package/scripts/lib/recommend.js +4 -0
- package/skills/game-design/SKILL.md +170 -0
- package/skills/game-design/evals/README.md +13 -0
- package/skills/game-design/evals/cases.yaml +47 -0
- package/skills/game-design/references/mechanics-and-loops.md +78 -0
- package/skills/game-design/references/playtesting-and-scope.md +58 -0
- package/skills/game-design/references/progression-and-economy.md +70 -0
- package/skills/game-storytelling/SKILL.md +159 -0
- package/skills/game-storytelling/evals/README.md +28 -0
- package/skills/game-storytelling/evals/cases.yaml +51 -0
- package/skills/game-storytelling/references/branching-and-state.md +134 -0
- package/skills/game-storytelling/references/dialogue-tools.md +117 -0
- package/skills/game-storytelling/references/environmental-storytelling.md +71 -0
- package/skills/gamedev-multiplayer/SKILL.md +250 -0
- package/skills/gamedev-multiplayer/evals/README.md +12 -0
- package/skills/gamedev-multiplayer/evals/cases.yaml +44 -0
- package/skills/gamedev-multiplayer/references/godot-high-level-multiplayer.md +133 -0
- package/skills/gamedev-multiplayer/references/prediction-and-latency.md +104 -0
- package/skills/gamedev-multiplayer/references/unity-and-unreal-netcode.md +166 -0
- package/skills/gamedev-pathing/SKILL.md +242 -0
- package/skills/gamedev-pathing/evals/README.md +14 -0
- package/skills/gamedev-pathing/evals/cases.yaml +49 -0
- package/skills/gamedev-pathing/references/navmesh-workflow.md +110 -0
- package/skills/gamedev-pathing/references/search-algorithms.md +135 -0
- package/skills/gamedev-pathing/references/steering-and-avoidance.md +120 -0
- package/skills/gamedev-physics/SKILL.md +225 -0
- package/skills/gamedev-physics/evals/README.md +12 -0
- package/skills/gamedev-physics/evals/cases.yaml +54 -0
- package/skills/gamedev-physics/references/character-controllers.md +120 -0
- package/skills/gamedev-physics/references/determinism-and-queries.md +124 -0
- package/skills/gamedev-physics/references/layers-and-masks.md +115 -0
- package/skills/gamedev-shaders/SKILL.md +252 -0
- package/skills/gamedev-shaders/evals/README.md +14 -0
- package/skills/gamedev-shaders/evals/cases.yaml +45 -0
- package/skills/gamedev-shaders/references/effect-recipes.md +205 -0
- package/skills/gamedev-shaders/references/godot-shading-language.md +133 -0
- package/skills/gamedev-shaders/references/unity-and-unreal-shaders.md +169 -0
- package/skills/gamedev-shipping/SKILL.md +236 -0
- package/skills/gamedev-shipping/evals/README.md +9 -0
- package/skills/gamedev-shipping/evals/cases.yaml +55 -0
- package/skills/gamedev-shipping/references/mobile-and-desktop.md +127 -0
- package/skills/gamedev-shipping/references/stores-and-ci.md +162 -0
- package/skills/gamedev-shipping/references/web-export-headers.md +140 -0
- package/skills/godot/SKILL.md +319 -0
- package/skills/godot/evals/README.md +13 -0
- package/skills/godot/evals/cases.yaml +50 -0
- package/skills/godot/references/export-and-testing.md +102 -0
- package/skills/godot/references/gdscript-style.md +84 -0
- package/skills/godot/references/godot3-to-4-traps.md +89 -0
- package/skills/godot/references/nodes-scenes-resources.md +109 -0
- package/skills/level-design/SKILL.md +175 -0
- package/skills/level-design/evals/README.md +35 -0
- package/skills/level-design/evals/cases.yaml +58 -0
- package/skills/level-design/references/blockout-to-art.md +118 -0
- package/skills/level-design/references/guidance-and-readability.md +152 -0
- package/skills/level-design/references/pacing-and-encounters.md +142 -0
- package/skills/roast-me/tools/adapters/__pycache__/__init__.cpython-312.pyc +0 -0
- package/skills/roast-me/tools/adapters/__pycache__/base.cpython-312.pyc +0 -0
- package/skills/roast-me/tools/adapters/__pycache__/claude.cpython-312.pyc +0 -0
- package/skills/roast-me/tools/adapters/__pycache__/codex.cpython-312.pyc +0 -0
- package/skills/roast-me/tools/adapters/__pycache__/gemini.cpython-312.pyc +0 -0
- package/skills/roast-me/tools/adapters/__pycache__/registry.cpython-312.pyc +0 -0
- package/skills/unity/SKILL.md +282 -0
- package/skills/unity/evals/README.md +8 -0
- package/skills/unity/evals/cases.yaml +43 -0
- package/skills/unity/references/build-and-platforms.md +65 -0
- package/skills/unity/references/input-system.md +102 -0
- package/skills/unity/references/lifecycle-deep-dive.md +75 -0
- package/skills/unreal/SKILL.md +270 -0
- package/skills/unreal/evals/README.md +12 -0
- package/skills/unreal/evals/cases.yaml +45 -0
- package/skills/unreal/references/blueprint-cpp-parity.md +109 -0
- package/skills/unreal/references/gameplay-framework.md +95 -0
- package/skills/unreal/references/packaging.md +83 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Eval harness — level-design
|
|
2
|
+
|
|
3
|
+
These evals assert two things about the `level-design` skill. **Triggering:** it
|
|
4
|
+
fires on level layout, pacing, encounter, guidance, and reward requests, and
|
|
5
|
+
stays out of systemic mechanic/economy design (`game-design`), narrative
|
|
6
|
+
(`game-storytelling`), and engine-specific level tooling (`godot`/`unity`/
|
|
7
|
+
`unreal`). **Capability:** when engaged, it delivers the craft — the
|
|
8
|
+
blockout→art pipeline, the sawtooth intensity graph with breathers, the
|
|
9
|
+
introduce→develop→twist→combine teaching pattern, light/color/affordance
|
|
10
|
+
guidance, and observe-don't-coach playtesting — rather than generic advice.
|
|
11
|
+
|
|
12
|
+
## How to run
|
|
13
|
+
|
|
14
|
+
Run through an agent harness with skills loadable on demand; `cases.yaml` is the
|
|
15
|
+
fixture. Use the same model for every trial; vary only which skills are loaded.
|
|
16
|
+
|
|
17
|
+
- **Triggering:** load the full catalog so the agent can route to siblings; feed
|
|
18
|
+
each `should_trigger` / `should_not_trigger` prompt verbatim and record which
|
|
19
|
+
skill fires. Run 3–5 trials per prompt (the choice is stochastic).
|
|
20
|
+
- Pass: `should_trigger` selects **level-design** in the majority of trials;
|
|
21
|
+
`should_not_trigger` does not (ideally routes to the listed `route_to`).
|
|
22
|
+
- Bar: **≥90%** trigger accuracy across all prompts.
|
|
23
|
+
- **Capability:** run each scenario WITH only level-design loaded vs WITHOUT any
|
|
24
|
+
skill (baseline), 3 times each. Grade responses against the `must_include`
|
|
25
|
+
rubric, one point per checkable item genuinely present.
|
|
26
|
+
- Bar: WITH covers **≥80%** of items on average AND beats WITHOUT by **≥25**
|
|
27
|
+
percentage points (a skill that doesn't move the needle fails).
|
|
28
|
+
|
|
29
|
+
## Notes / honesty
|
|
30
|
+
|
|
31
|
+
- LLM-graded and stochastic — re-run on edits; treat small deltas as noise.
|
|
32
|
+
- `route_to` targets assume the sibling skills (`game-design`,
|
|
33
|
+
`game-storytelling`, `godot`, `unity`, `unreal`) exist in the catalog; a
|
|
34
|
+
missing sibling can cause a near-miss to mis-route without it being a
|
|
35
|
+
level-design fault — note it, don't count it against this skill.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
skill: level-design
|
|
2
|
+
|
|
3
|
+
should_trigger:
|
|
4
|
+
- prompt: "I've built the first level of my platformer but playtesters say it's boring in the middle and then brutal at the end. How do I fix the pacing?"
|
|
5
|
+
why: "Direct pacing complaint on a built level — the intensity-graph / sawtooth + breather guidance. 'Boring in the middle, brutal at the end' is a flat-then-spike curve the skill diagnoses."
|
|
6
|
+
- prompt: "Players keep getting lost in my second map — they wander into dead ends and can't find the exit. What am I doing wrong?"
|
|
7
|
+
why: "Navigation/readability failure ('players get lost') — the skill's guidance layer: landmarks, light-led critical path, denying wrong turns visually. Lostness is a readability bug the skill owns."
|
|
8
|
+
- prompt: "How should I lay out the blockout for a new FPS arena before I start making art?"
|
|
9
|
+
why: "Explicit blockout request and the blockout->greybox->playtest->art pipeline plus metrics block and arena-shape design. Core Use-when trigger."
|
|
10
|
+
- prompt: "I want to teach the player how a new grappling-hook mechanic works through the level itself, without a tutorial popup. How do I structure that?"
|
|
11
|
+
why: "Teaching a mechanic through space = introduce->develop->twist->combine. The mechanic itself is game-design's, but structuring the SPACE that teaches it is level design."
|
|
12
|
+
- prompt: "Where should I put the secret rooms and the best loot in my dungeon so exploring feels rewarding but not frustrating?"
|
|
13
|
+
why: "Reward & secret placement + risk/reward + breadcrumbing. 'Rewarding but not frustrating' is exactly the reward-the-observation-not-the-pixel-hunt guidance."
|
|
14
|
+
- prompt: "My combat arena feels like everyone just hides behind one wall and pokes out. How do I make the fights more dynamic?"
|
|
15
|
+
why: "Arena-shape design: static peek-war means missing flanks/verticality and bad cover rhythm. The skill's encounter/arena section addresses this directly."
|
|
16
|
+
- prompt: "How do I guide players toward the objective using lighting and color instead of a giant waypoint marker?"
|
|
17
|
+
why: "Guidance without hand-holding via light/color/composition and the reserved interact-color language. Explicit 'instead of a waypoint' framing is the skill's core."
|
|
18
|
+
|
|
19
|
+
should_not_trigger:
|
|
20
|
+
- prompt: "How high should the player be able to jump and how much should double-jump cost stamina? I'm balancing the movement system."
|
|
21
|
+
route_to: "game-design"
|
|
22
|
+
why: "This is the movement RULE/economy itself (systemic mechanic + stamina cost tuning), which game-design owns. Level design consumes the jump metric; it doesn't set or balance it."
|
|
23
|
+
- prompt: "Write the environmental storytelling and the audio-log script for the abandoned lab area to reveal the backstory."
|
|
24
|
+
route_to: "game-storytelling"
|
|
25
|
+
why: "Narrative content — what the space SAYS (backstory, audio-log writing). Level design places the beat; game-storytelling authors it."
|
|
26
|
+
- prompt: "How do I bake the nav mesh and set the agent radius so enemies path around my level geometry in Unity?"
|
|
27
|
+
route_to: "unity"
|
|
28
|
+
why: "Engine-specific level tooling (nav-mesh bake, agent radius in Unity). Explicitly out of scope; the engine skill implements the layout the design decided."
|
|
29
|
+
- prompt: "My Godot TileMap isn't showing collision on the ground layer and the player falls through. How do I fix it?"
|
|
30
|
+
route_to: "godot"
|
|
31
|
+
why: "Engine tooling bug — TileMap collision setup in Godot. This is implementation, not the craft of layout/pacing/readability."
|
|
32
|
+
- prompt: "How should I design the loot rarity tiers and drop-rate curves for the whole game's economy?"
|
|
33
|
+
route_to: "game-design"
|
|
34
|
+
why: "Loot-table / economy systems design across the whole game — a systemic concern game-design owns, not the placement of a reward within one level's space."
|
|
35
|
+
- prompt: "How do I optimize the frame rate in my Unreal level — the shadows and draw calls are tanking performance?"
|
|
36
|
+
route_to: "unreal"
|
|
37
|
+
why: "Engine performance/rendering optimization (draw calls, shadow cost) is engine tooling, owned by the unreal skill, not level-design craft."
|
|
38
|
+
|
|
39
|
+
capability:
|
|
40
|
+
- scenario: "A designer says: 'My level's first playthrough is fun but by the middle testers get bored and then the final room feels unfairly hard. It's already fully textured and lit. How do I fix it?'"
|
|
41
|
+
must_include:
|
|
42
|
+
- "Diagnoses a flawed intensity curve (flat/boring middle, spike at the end) and prescribes a sawtooth: peaks with breathers/safe rooms between, difficulty trending up with checkpoint resets."
|
|
43
|
+
- "Recommends adding a breather/safe room after peaks so intensity drops and the next peak reads, and varying encounter length/spacing to kill the monotony."
|
|
44
|
+
- "Flags that the level is already textured/lit as a process problem — layout changes should be validated in blockout/greybox, and warns that art-first makes pacing fixes expensive."
|
|
45
|
+
- "Frames the final-room spike as a telegraph/difficulty-curve issue (signpost the ramp, reset at a checkpoint) rather than just lowering difficulty."
|
|
46
|
+
- scenario: "A developer asks: 'Players keep getting lost in my level and walk right past the exit. I don't want to add a waypoint arrow. How do I guide them?'"
|
|
47
|
+
must_include:
|
|
48
|
+
- "Treats lostness as a readability/guidance bug, not player error, and keeps guidance diegetic (no waypoint)."
|
|
49
|
+
- "Uses light to lead (players move toward light/contrast; light the critical path, objective, and exit; keep dead-ends dim)."
|
|
50
|
+
- "Establishes a dominant landmark per area for self-location and frames the exit with composition/leading lines."
|
|
51
|
+
- "Recommends a reserved, consistent accent color for interactables/path used nowhere decoratively, and consistent affordances."
|
|
52
|
+
- "Prescribes watching a fresh, uncoached playtester (and/or position/dwell heatmaps) to locate exactly where players hesitate or diverge, without answering 'where do I go?'."
|
|
53
|
+
- scenario: "A designer asks: 'I have a new mechanic — a portal gun — and I want the level to teach it without any text tutorial.'"
|
|
54
|
+
must_include:
|
|
55
|
+
- "Lays out the introduce -> develop -> twist -> combine progression (or equivalent teach-through-space structure)."
|
|
56
|
+
- "Introduces the mechanic somewhere it cannot hurt the player (safe, zero-risk first encounter) before any real stakes."
|
|
57
|
+
- "Builds up through low-stakes use, a recontextualizing twist, and a final combine/mastery test that layers earlier learning."
|
|
58
|
+
- "Notes that the space itself teaches (no tutorial popup) and that the mechanic's rules belong to game-design while the teaching layout is level design."
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# Blockout to art — the pipeline in detail
|
|
2
|
+
|
|
3
|
+
The single most expensive mistake in level design is committing art before the
|
|
4
|
+
space is proven. This reference details each stage, the metrics block that
|
|
5
|
+
everything is built from, how to playtest a grey box, and the handoff to the
|
|
6
|
+
engine skill and art team.
|
|
7
|
+
|
|
8
|
+
## Why art goes last
|
|
9
|
+
|
|
10
|
+
A blockout is minutes to change; a finished, textured, lit set-piece is days.
|
|
11
|
+
Layouts *always* change under playtest — a corridor is too long, a fight needs a
|
|
12
|
+
flank, a landmark isn't visible from the entrance. If that geometry is already
|
|
13
|
+
art, every fix throws away work and creates pressure to *not* fix it. Art-first
|
|
14
|
+
levels ship with known layout problems because nobody wants to redo the art.
|
|
15
|
+
So: prove the space grey, then dress it.
|
|
16
|
+
|
|
17
|
+
## Stage 1 — Blockout (whitebox)
|
|
18
|
+
|
|
19
|
+
Build the level from **primitive geometry at true scale** — boxes, planes,
|
|
20
|
+
cylinders, ramps. No materials beyond a flat neutral, no props, no final
|
|
21
|
+
lighting. A single neutral mid-grey with a subtle grid texture is ideal: it
|
|
22
|
+
shows scale and stops you from judging the level on looks it doesn't have yet.
|
|
23
|
+
|
|
24
|
+
You are answering three questions:
|
|
25
|
+
|
|
26
|
+
1. **Flow** — can the player move through the intended route without snagging?
|
|
27
|
+
Are the loops, gates, and shortcuts where you planned?
|
|
28
|
+
2. **Timing & distance** — how long is the walk between beats? Are jumps and
|
|
29
|
+
gaps possible and fair? Is a corridor a slog or a snappy connector?
|
|
30
|
+
3. **Legibility** — from each decision point, is the next objective findable by
|
|
31
|
+
shape and layout alone (before any lighting/color tricks)?
|
|
32
|
+
|
|
33
|
+
Block out the **critical path first**, walk it end to end many times, then add
|
|
34
|
+
exploration branches and encounters. Keep everything modular and snapped to a
|
|
35
|
+
grid so pieces move cheaply.
|
|
36
|
+
|
|
37
|
+
## The metrics block (lock this before any geometry)
|
|
38
|
+
|
|
39
|
+
Every dimension in the level is a multiple of the player's capabilities. Define
|
|
40
|
+
these **first**, in engine units, and build to them. Guessing metrics is how you
|
|
41
|
+
get gaps that feel wrong and cover that doesn't protect.
|
|
42
|
+
|
|
43
|
+
| Metric | What it governs | Typical relationship |
|
|
44
|
+
|---|---|---|
|
|
45
|
+
| **Player height (standing)** | Ceiling clearance, door height, sightline height | The base unit; doors ~1.3–1.5× |
|
|
46
|
+
| **Crouch height** | Vents, low cover, crawl spaces | ~0.5–0.6× standing |
|
|
47
|
+
| **Eye height** | What sightlines actually reveal (camera, not feet) | Slightly below standing top |
|
|
48
|
+
| **Shoulder / capsule width** | Corridor and doorway minimum width | Corridors ≥ 2× so two can pass / strafe |
|
|
49
|
+
| **Jump height** | Max step-up, ledge height, low-cover top | Cover just below eye so you can peek |
|
|
50
|
+
| **Jump distance (gap)** | Platform spacing, chasm width | Design gaps at ~70–85% of max so they read as fair |
|
|
51
|
+
| **Reach / grab height** | Climbable ledge height, mantling | Set the climb-ledge trim to this exact height |
|
|
52
|
+
| **Run speed** | Travel time between beats, breather length | Distance = speed × intended seconds |
|
|
53
|
+
| **Weapon/threat effective range** | Arena sightline length, cover spacing | Long lanes for ranged, short for melee |
|
|
54
|
+
|
|
55
|
+
Write these into `02-DOCS/wiki/stack/level-design.md` (see the SKILL.md grounding
|
|
56
|
+
section) so every level in the project shares one metrics block. When a metric
|
|
57
|
+
is a *rule* of the game (how high the player jumps at all), that number is owned
|
|
58
|
+
by `game-design`; level design *consumes* it here and builds space to fit.
|
|
59
|
+
|
|
60
|
+
## Stage 2 — Greybox
|
|
61
|
+
|
|
62
|
+
Refine the blockout just enough to test *reading* and *feel*:
|
|
63
|
+
|
|
64
|
+
- **Temp neutral materials** to distinguish floor/wall/hazard/interactable by
|
|
65
|
+
value, not decoration.
|
|
66
|
+
- **Placeholder lighting** used as a *design* tool — light the path, the
|
|
67
|
+
objective, and the exit; keep non-paths dim. This is where guidance is
|
|
68
|
+
authored, long before final art lighting.
|
|
69
|
+
- **Stand-in enemies, cover, pickups, and interactables** at real metrics so
|
|
70
|
+
encounters and the reserved interact-color language can be tested.
|
|
71
|
+
|
|
72
|
+
Now the questions are: does the space *read*? Does the encounter work? Is the
|
|
73
|
+
pacing right? Greybox is still cheap — you are still iterating layout, not
|
|
74
|
+
protecting art.
|
|
75
|
+
|
|
76
|
+
## Stage 3 — Playtest the grey box
|
|
77
|
+
|
|
78
|
+
Do this early and often, on the blockout/greybox, because fixes are cheap. Full
|
|
79
|
+
observation protocol and telemetry live in `guidance-and-readability.md`; the
|
|
80
|
+
blockout-specific loop is:
|
|
81
|
+
|
|
82
|
+
1. Sit a **fresh, uncoached** player down. Say only "play". Stay silent.
|
|
83
|
+
2. Log every **hesitation** (readability gap), **wrong turn** (navigation gap),
|
|
84
|
+
**repeated death** (telegraph/difficulty gap), and **skipped area** (reward
|
|
85
|
+
or guidance gap).
|
|
86
|
+
3. Never answer "where do I go?" — that question is your top finding.
|
|
87
|
+
4. Change the grey geometry/lighting, re-test. Repeat until it plays.
|
|
88
|
+
|
|
89
|
+
Only when the greybox plays well for players you didn't coach do you unlock art.
|
|
90
|
+
|
|
91
|
+
## Stage 4 — Art pass (and the handoff)
|
|
92
|
+
|
|
93
|
+
Art *serves the proven layout*. The reserved interact-color, the light-led path,
|
|
94
|
+
the framed landmark, the readable silhouettes — art must **reinforce** the
|
|
95
|
+
guidance the greybox already established, never fight it. If the art pass makes
|
|
96
|
+
the level prettier but harder to read, it failed.
|
|
97
|
+
|
|
98
|
+
Hand off to the engine skill (`godot` / `unity` / `unreal`) for the tooling that
|
|
99
|
+
turns the layout into a shippable level:
|
|
100
|
+
|
|
101
|
+
- Nav-mesh generation and agent radius (must match the capsule width above).
|
|
102
|
+
- Occlusion culling / visibility and streaming volumes.
|
|
103
|
+
- Final lighting: lightmap/GI bakes, reflection probes, light-leak fixes.
|
|
104
|
+
- Collision meshes distinct from render meshes; blocking volumes replacing the
|
|
105
|
+
greybox's implicit walls.
|
|
106
|
+
- LODs, mesh instancing, and performance budgets.
|
|
107
|
+
|
|
108
|
+
### Art-pass handoff checklist
|
|
109
|
+
|
|
110
|
+
- [ ] Layout is locked — no pending "this fight might move" notes.
|
|
111
|
+
- [ ] Metrics block is final; art meshes respect door/corridor/cover heights.
|
|
112
|
+
- [ ] Critical path, landmark, and interact-color language are decided and
|
|
113
|
+
documented so art reinforces (never contradicts) them.
|
|
114
|
+
- [ ] Greybox lighting intent (path lit, dead-ends dim) is captured for the
|
|
115
|
+
final lighting pass to honor.
|
|
116
|
+
- [ ] Collision/nav requirements handed to the engine skill with the capsule
|
|
117
|
+
dimensions.
|
|
118
|
+
- [ ] A greybox reference build is kept for A/B readability comparison after art.
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# Guidance & readability — direct the player without hand-holding
|
|
2
|
+
|
|
3
|
+
How to make a player always know where to go, understand what they can do, and
|
|
4
|
+
feel clever for exploring — using the environment instead of arrows. Also
|
|
5
|
+
covers the playtest protocol, traversal telemetry, and reward/secret placement,
|
|
6
|
+
because those are how you *diagnose and fix* readability.
|
|
7
|
+
|
|
8
|
+
## The layers of guidance (strongest to weakest)
|
|
9
|
+
|
|
10
|
+
The eye is drawn, roughly in this priority, to: **motion → light/brightness →
|
|
11
|
+
high contrast → saturated color → the different/odd → framed shapes.** Stack
|
|
12
|
+
these on the path you want taken; strip them from paths you don't.
|
|
13
|
+
|
|
14
|
+
### Light leads
|
|
15
|
+
|
|
16
|
+
Players move toward light — the moth effect — and toward higher value contrast.
|
|
17
|
+
|
|
18
|
+
- Light the **critical path, the objective, and the exit**; keep dead-ends,
|
|
19
|
+
non-paths, and cut branches dim.
|
|
20
|
+
- A bright opening at the end of a dark corridor is an irresistible pull.
|
|
21
|
+
- Use light *in greybox* as a design tool, not a final-art afterthought — the
|
|
22
|
+
guidance is authored in placeholder lighting and art merely honors it.
|
|
23
|
+
- Contrast beats absolute brightness: a shaft of light in gloom guides harder
|
|
24
|
+
than a uniformly bright room.
|
|
25
|
+
|
|
26
|
+
### Color as language
|
|
27
|
+
|
|
28
|
+
Reserve **one saturated accent color** to mean "you can interact / go here" and
|
|
29
|
+
use it *nowhere else*.
|
|
30
|
+
|
|
31
|
+
- Precedents: Mirror's Edge's "runner red" for the traversal path; Dishonored's
|
|
32
|
+
faint glint on usable objects; the near-ubiquitous "yellow = climbable/grab"
|
|
33
|
+
convention.
|
|
34
|
+
- The value of the convention *is its consistency*. The moment the interact
|
|
35
|
+
color appears on decoration, you've lied — the player learns to distrust it
|
|
36
|
+
and starts checking everything, which is the opposite of guidance.
|
|
37
|
+
- Keep the rest of the palette desaturated relative to the accent so it pops.
|
|
38
|
+
|
|
39
|
+
### Composition
|
|
40
|
+
|
|
41
|
+
Compose the space like a photographer composes a shot.
|
|
42
|
+
|
|
43
|
+
- **Leading lines** — rails, beams, roads, pipes, tiling that point toward the
|
|
44
|
+
objective.
|
|
45
|
+
- **Framing** — arches, doorways, foreground silhouettes that box the eye onto
|
|
46
|
+
the target.
|
|
47
|
+
- **Negative space** and **contrast** to isolate what matters.
|
|
48
|
+
- From every decision point, the critical path should be the most-framed,
|
|
49
|
+
highest-contrast, best-lit option.
|
|
50
|
+
|
|
51
|
+
### Affordances & signifiers
|
|
52
|
+
|
|
53
|
+
(Norman/Gibson.) An affordance is what the environment *lets* you do; a signifier
|
|
54
|
+
is the visual cue that advertises it.
|
|
55
|
+
|
|
56
|
+
- A ledge that looks grabbable **must** be grabbable; a wall that looks solid
|
|
57
|
+
**must** be solid. A door-shaped thing that never opens teaches the player to
|
|
58
|
+
ignore doors.
|
|
59
|
+
- Establish the visual language **early** and hold it: if a specific trim, decal,
|
|
60
|
+
or material means "climb here," that cue appears **only** where you can climb.
|
|
61
|
+
- Inconsistent affordances are the #1 source of "I didn't know I could do that"
|
|
62
|
+
and "I thought I could do that and died." Consistency > cleverness.
|
|
63
|
+
- Prefer **diegetic signifiers** (a rope, scuff marks, a worn path, a ladder)
|
|
64
|
+
over UI prompts; save prompts for genuinely non-obvious systemic actions.
|
|
65
|
+
|
|
66
|
+
### Landmarks & self-location
|
|
67
|
+
|
|
68
|
+
- One **dominant landmark** per area — a large, distinct, distant silhouette
|
|
69
|
+
(Disney's "weenie": the visual magnet that pulls you forward). It answers
|
|
70
|
+
"where am I / where's the goal" without a minimap.
|
|
71
|
+
- Keep landmarks visible from key decision points; if the player can't see the
|
|
72
|
+
landmark when they need to choose, it isn't doing its job.
|
|
73
|
+
- **Deny wrong turns visually** — subtle dead-ends, unlit gaps, a distinct
|
|
74
|
+
"not-a-path" material — rather than relying on invisible collision, which
|
|
75
|
+
feels arbitrary and cheap.
|
|
76
|
+
|
|
77
|
+
### The critical-path readability self-test
|
|
78
|
+
|
|
79
|
+
Stand at each decision point in the greybox and ask: *with no HUD and no prior
|
|
80
|
+
knowledge, is the intended next step the most obvious thing here?* If you have
|
|
81
|
+
to argue for it, a fresh player will get lost. Fix with light/framing/landmark
|
|
82
|
+
before reaching for a waypoint.
|
|
83
|
+
|
|
84
|
+
## Playtesting — observe, don't coach
|
|
85
|
+
|
|
86
|
+
You cannot see your own level fresh; your knowledge of it is the one thing a
|
|
87
|
+
player won't have.
|
|
88
|
+
|
|
89
|
+
1. **Fresh, uncoached tester.** Say "play." Then stay silent.
|
|
90
|
+
2. **Log four signals:**
|
|
91
|
+
- **Hesitation / stopping** → readability gap (they can't tell where to go).
|
|
92
|
+
- **Wrong turn / backtrack** → navigation gap (guidance points wrong or is
|
|
93
|
+
absent).
|
|
94
|
+
- **Repeated death** → telegraph or difficulty gap (threat unfair or
|
|
95
|
+
unreadable).
|
|
96
|
+
- **Skipped content** → reward-placement or guidance gap.
|
|
97
|
+
3. **Never answer "where do I go?"** — that question *is* the finding. Answering
|
|
98
|
+
it destroys the data and hides the bug.
|
|
99
|
+
4. **Ask after, not during**: "Where did you think you were supposed to go? What
|
|
100
|
+
did you expect that button to do? Where did you feel stuck?" Open questions,
|
|
101
|
+
no leading.
|
|
102
|
+
5. Test on the **greybox**, early and often — fixes are cheap while it's grey.
|
|
103
|
+
|
|
104
|
+
## Traversal telemetry & heatmaps
|
|
105
|
+
|
|
106
|
+
Turn anecdote into pattern by logging player data across many sessions:
|
|
107
|
+
|
|
108
|
+
| Metric | What it shows | The fix when it's bad |
|
|
109
|
+
|---|---|---|
|
|
110
|
+
| **Position heatmap** | Where players spend time; **cold zones** they never enter | Cold zone = dead space: re-light it, add a landmark/reward, or cut it |
|
|
111
|
+
| **Death heatmap** | Where players die; **clusters** = unfair/unreadable threats | Fix the telegraph, the arena, or the difficulty — not the player |
|
|
112
|
+
| **Path traces** | Are they on the golden path or lost? | Divergence from intended path = guidance failure at that fork |
|
|
113
|
+
| **Dwell time** at forks | Long dwell = unclear guidance | Add light/framing/landmark to make the choice obvious |
|
|
114
|
+
| **Look / aim heatmap** | Did they even *see* the landmark or reward? | If not looked-at, it's mis-placed or out-competed — reposition |
|
|
115
|
+
| **Time-to-objective** | Pacing vs intent (too fast/slow) | Adjust distance, breather length, or beat spacing |
|
|
116
|
+
|
|
117
|
+
Read the map as instructions: a branch nobody takes needs a visible reward at
|
|
118
|
+
its mouth; a region everyone avoids isn't pulling them — fix the pull or remove
|
|
119
|
+
the region.
|
|
120
|
+
|
|
121
|
+
## Reward & secret placement
|
|
122
|
+
|
|
123
|
+
- **Reward the wandering eye.** Put secrets where a *curious* player naturally
|
|
124
|
+
looks — behind the waterfall, up the ledge you already lit and framed, down
|
|
125
|
+
the branch you breadcrumbed. Reward **observation**, not pixel-hunting.
|
|
126
|
+
- **Breadcrumb every secret.** A glint, an out-of-place object, a suspicious
|
|
127
|
+
seam, an odd bit of geometry visible from the path. The player should feel
|
|
128
|
+
clever — which means the game showed them the thread first. A secret with no
|
|
129
|
+
breadcrumb is just frustration.
|
|
130
|
+
- **Never hide mandatory progression like a secret.** A required key or door
|
|
131
|
+
disguised as optional is a stuck-player generator. Secrets are optional by
|
|
132
|
+
definition; the critical path stays legible.
|
|
133
|
+
|
|
134
|
+
## Risk vs reward
|
|
135
|
+
|
|
136
|
+
- Gate the **best** optional reward behind the **biggest** optional risk or
|
|
137
|
+
detour — a hard side-arena, a long climb, a resource gamble, a no-checkpoint
|
|
138
|
+
stretch.
|
|
139
|
+
- Keep the **critical path rewarding on its own** so risk-averse players aren't
|
|
140
|
+
punished for playing it safe; put the *extra* behind the *extra* effort.
|
|
141
|
+
- Make the risk and the reward both *visible before committing* so the choice is
|
|
142
|
+
informed: the player should see the treasure across the deadly gap and decide.
|
|
143
|
+
|
|
144
|
+
### Reward taxonomy (vary these so exploration stays fresh)
|
|
145
|
+
|
|
146
|
+
| Type | Example | Notes |
|
|
147
|
+
|---|---|---|
|
|
148
|
+
| **Power / upgrade** | new ability, weapon, permanent buff | Strongest pull; use sparingly |
|
|
149
|
+
| **Resources** | ammo, health, currency | Steady exploration incentive |
|
|
150
|
+
| **Lore / collectible** | note, audio log, vista, cosmetic | For the curious; light them in breathers |
|
|
151
|
+
| **Shortcut unlock** | a door back to the hub, a lowered ladder | Best long-term reward — reshapes the level, cuts backtracking |
|
|
152
|
+
| **Spectacle** | a view, a scripted moment, an Easter egg | Pure delight; costs no systemic balance |
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
# Pacing & encounters — rhythm, arenas, and teaching through space
|
|
2
|
+
|
|
3
|
+
A level is a piece of music, not a list of rooms. This reference covers the
|
|
4
|
+
intensity graph, the breather, the difficulty curve, the encounter template, the
|
|
5
|
+
introduce→develop→twist→combine teaching pattern, and arena-shape design.
|
|
6
|
+
|
|
7
|
+
## The intensity graph
|
|
8
|
+
|
|
9
|
+
Plot intended intensity (danger + cognitive load + stimulus) against time for
|
|
10
|
+
the whole level. The target shape is a **sawtooth trending upward**: a peak
|
|
11
|
+
(combat, chase, platforming gauntlet, tense stealth), a sharp drop to a valley
|
|
12
|
+
(a breather), then a higher peak. Overall the line climbs, ending on the level's
|
|
13
|
+
hardest, most spectacular moment.
|
|
14
|
+
|
|
15
|
+
```text
|
|
16
|
+
intensity
|
|
17
|
+
^ ___/\ <- climax (hardest, last)
|
|
18
|
+
| ___/\ ___/\ /
|
|
19
|
+
| __/\ / \ __/\ / \___/
|
|
20
|
+
| __/ \/ \__/ \/ <- breathers (valleys)
|
|
21
|
+
+---------------------------------------------> time
|
|
22
|
+
intro peak rest peak rest build climax
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Two failure shapes to avoid:
|
|
26
|
+
|
|
27
|
+
- **Flat-high** — sustained maximum intensity. The player fatigues and the peaks
|
|
28
|
+
stop reading as peaks; it flattens into undifferentiated noise. This is the
|
|
29
|
+
most common "my level is exhausting / boring despite lots of action" cause.
|
|
30
|
+
- **Flat-low** — long stretches with no tension or stimulus. Reads as padding
|
|
31
|
+
and boredom even if each individual moment is competent.
|
|
32
|
+
|
|
33
|
+
Draw this graph *before* building encounters; it tells you where fights go and
|
|
34
|
+
how long the gaps between them should be.
|
|
35
|
+
|
|
36
|
+
## The breather (safe room)
|
|
37
|
+
|
|
38
|
+
After each peak, a valley: a **safe room** with no threat, low stimulus, and
|
|
39
|
+
usually a save point and/or restock. The breather does three jobs:
|
|
40
|
+
|
|
41
|
+
1. **Lets adrenaline drop** so the next peak spikes instead of blending in.
|
|
42
|
+
(Halo's cadence is often described as "thirty seconds of fun" on repeat — the
|
|
43
|
+
calm between is what makes the fun read.)
|
|
44
|
+
2. **Rewards observation** — a quiet room is where lore, a secret, or a vista
|
|
45
|
+
lands, because the player has attention to spare.
|
|
46
|
+
3. **Sets up the next escalation** — telegraph what's coming (a locked blast
|
|
47
|
+
door, distant sound, a corpse) so the next peak feels earned, not random.
|
|
48
|
+
|
|
49
|
+
Vary breather length with the peak that preceded it: a brutal fight earns a
|
|
50
|
+
longer rest; a light skirmish gets a short beat.
|
|
51
|
+
|
|
52
|
+
## Difficulty curve within a level
|
|
53
|
+
|
|
54
|
+
The macro trend is up, but it **resets at checkpoints** — the sawtooth again.
|
|
55
|
+
Let the player re-enter a checkpoint competent and confident, then ramp. A curve
|
|
56
|
+
that only climbs with no resets feels punishing; one that never climbs feels
|
|
57
|
+
trivial. Signposting difficulty (a visibly tougher enemy, a bigger arena) lets
|
|
58
|
+
the player brace, which is fairer than a surprise spike.
|
|
59
|
+
|
|
60
|
+
## Encounter design
|
|
61
|
+
|
|
62
|
+
An **encounter = enemy composition × space × objective × available resources.**
|
|
63
|
+
Change any single factor to create a fresh encounter without new assets:
|
|
64
|
+
|
|
65
|
+
- **Composition** — which enemy types, how many, in what waves.
|
|
66
|
+
- **Space** — the arena shape (below); the same enemies feel new in a new arena.
|
|
67
|
+
- **Objective** — kill all / survive N seconds / reach the exit / protect / hold
|
|
68
|
+
ground / retreat. The objective reshapes how the space is used.
|
|
69
|
+
- **Resources** — ammo, health, cover, high ground the player can seize.
|
|
70
|
+
|
|
71
|
+
### The encounter template
|
|
72
|
+
|
|
73
|
+
```text
|
|
74
|
+
ENCOUNTER — <name>
|
|
75
|
+
Teaches / tests ..... which mechanic or threat (and which of I/D/T/C beat)
|
|
76
|
+
Space ............... arena shape, sightline length, cover, flanks, verticality
|
|
77
|
+
Composition ......... enemy types + counts + wave timing
|
|
78
|
+
Objective ........... win condition (kill / survive / reach / hold / escort)
|
|
79
|
+
Resources ........... ammo/health/cover/high-ground and where they sit
|
|
80
|
+
Entry / exit ........ how the player arrives (telegraph) and leaves (release valve)
|
|
81
|
+
Intensity ........... where this sits on the level's graph (peak height)
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Introduce -> develop -> twist -> combine
|
|
85
|
+
|
|
86
|
+
The four-beat progression that teaches a new element through space, without
|
|
87
|
+
text. (The pattern behind Portal's test chambers, Half-Life 2's set-pieces, and
|
|
88
|
+
much Nintendo level craft.)
|
|
89
|
+
|
|
90
|
+
1. **Introduce** — meet it where it cannot hurt you. A turret across a safe gap;
|
|
91
|
+
one tile of the new hazard with a wall to watch from. Zero-risk learning.
|
|
92
|
+
2. **Develop** — use it for real, low stakes. The turret now guards a corridor
|
|
93
|
+
you must cross; the hazard is a gap you must jump.
|
|
94
|
+
3. **Twist** — recontextualize it. Two turrets flanking; the turret behind glass
|
|
95
|
+
you must lure enemies past; the hazard now moves. The rule you learned bends.
|
|
96
|
+
4. **Combine** — the mastery test: the new element + everything learned earlier,
|
|
97
|
+
at full intensity, as the section's climax.
|
|
98
|
+
|
|
99
|
+
### Worked example — a "gravity plate" that flings the player upward
|
|
100
|
+
|
|
101
|
+
- **Introduce**: one plate in a safe room; step on it, get flung to a ledge with
|
|
102
|
+
a reward. No threat. Player learns "plate = launch."
|
|
103
|
+
- **Develop**: cross a pit by chaining two plates — miss and you just fall back,
|
|
104
|
+
retry. Low stakes, real use.
|
|
105
|
+
- **Twist**: a plate launches you *into* a turret's line of fire — now you must
|
|
106
|
+
time the launch, or use the plate to reach the turret's flank.
|
|
107
|
+
- **Combine**: an arena where plates are the only way to reach high cover, under
|
|
108
|
+
fire, while enemies also use them. Everything at once.
|
|
109
|
+
|
|
110
|
+
## Arena shape — the geometry is the difficulty knob
|
|
111
|
+
|
|
112
|
+
The shape a fight happens in matters as much as the enemies:
|
|
113
|
+
|
|
114
|
+
- **Sightline length ↔ threat range.** Long lanes favor ranged play and
|
|
115
|
+
sniping; tight rooms favor shotguns/melee and force close engagements. Set the
|
|
116
|
+
lane length to the range you want to be dominant.
|
|
117
|
+
- **Cover rhythm.** Space cover so the player *advances in beats* — peek, move,
|
|
118
|
+
peek — rather than turtling in one spot. Low cover (peek over) vs full cover
|
|
119
|
+
(peek around) change the fight's tempo.
|
|
120
|
+
- **Flanks.** Give at least one flank route so a fight isn't a static peek-war;
|
|
121
|
+
a flank forces the player to move and makes the space three-dimensional in
|
|
122
|
+
play, not just in geometry.
|
|
123
|
+
- **Verticality.** High ground is pressure and reward. The Doom (2016) arena
|
|
124
|
+
is the reference: multi-tier, with resources and enemies placed to pull the
|
|
125
|
+
player *through* and *up* the space rather than hunker in a corner.
|
|
126
|
+
- **Chokepoints + release valves.** A choke concentrates danger (good for a
|
|
127
|
+
last stand); always pair it with an exit or a way to break the standoff, or
|
|
128
|
+
the fight stalls into a stalemate.
|
|
129
|
+
- **Entry and exit.** Telegraph the fight before the player commits (see the
|
|
130
|
+
arena from a safe threshold), and give a clear release when it's won.
|
|
131
|
+
|
|
132
|
+
### Arena patterns
|
|
133
|
+
|
|
134
|
+
| Pattern | Shape | Good for |
|
|
135
|
+
|---|---|---|
|
|
136
|
+
| **Corridor / lane** | Long, narrow, few flanks | Tension, forced pace, ranged duels |
|
|
137
|
+
| **Open arena** | Wide, multi-cover, multi-flank | Skill expression, mobile fights |
|
|
138
|
+
| **Vertical arena** | Stacked tiers, ramps/lifts | High-ground contests, push-forward combat |
|
|
139
|
+
| **Hub** | Central space, spokes off it | Wave defense, "hold ground" objectives |
|
|
140
|
+
| **Pinch** | Wide → choke → wide | Escalation, last-stand beats |
|
|
141
|
+
|
|
142
|
+
Match the pattern to the encounter's job on the intensity graph, not to habit.
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|