This commit is contained in:
2026-03-18 15:09:24 -07:00
parent ac06195d1a
commit 69f074459e
388 changed files with 378382 additions and 74 deletions

View File

@@ -6,36 +6,50 @@ A taxonomy of puzzle design patterns derived from analysis of classic Sierra, Lu
**Previous Documentation March 2026**: Quest for Glory III: Wages of War analysis revealing unique puzzle patterns for class-specific gameplay, multi-faction negotiation mechanics, thief infiltration routes, and supernatural siege defense sequences. Additional coverage: Beneath a Steel Sky (LINC-Space password systems), Broken Sword I & II (plaster chemistry knowledge transfer, warehouse escape MFP), Grim Fandango (coat check → photo finish ticket pattern learning), Simon the Sorcerer (magic word learning system + witch duel combat application), Legend of Kyrandia 1 (bell musical sequence puzzle).
## Viewing the Knowledge Base
This project is now built with [mdbook](https://rust-lang.github.io/mdBook/). To view locally:
```bash
# View in browser (with auto-reload)
mdbook serve --open
# Or build once and open ./book/index.html
mdbook build
xed book/index.html # or your favorite browser
```
The generated HTML documentation is available at `./book/`.
## Table of Contents
| # | Puzzle Type | Core Mechanic | Game Source |
|---|-------------|---------------|-------------|
| 1 | [Multi-Faceted Plan Puzzle](./puzzles/multi-faceted-plan.md) | Requirements discovered incrementally; player synthesizes complete mental model | KQVI/KQVII/KQVIII/INDY1/SIMON/LK1/SMHTR/INDY2/SQ1/SQ3/SQ4/QFG1/QFG2/QFG3/QFG4/BS1/BS2/TLJ/SYB/GF |
| 2 | [Sensory Exploitation Puzzle](./puzzles/sensory-exploitation.md) | Character perceptual vulnerabilities exploited through item matching | KQIII/KQVI/KQVII/MI/LK1/SMHTR/INDY2/SQ1/SQ3/QFG1/QFG3/QFG4/BS1/TLJ/SYB/GF/SIMON |
| 3 | [Metaphor-to-Literal Translation](./puzzles/metaphor-literal.md) | Abstract language interpreted as literal game mechanics | MI/SQ2/QFG4 |
| 4 | [Information Brokerage Chain](./puzzles/information-brokerage.md) | Implicit NPC exchange network mapped through incremental interaction | KQVI/KQVII/MI/LK1/INDY2/SQ1/TD/BS1/BS2/TLJ/SYB/GF/QFG3/QFG4 |
| 5 | [Timed Consequence Puzzle](./puzzles/timed-consequence.md) | Narrative urgency without mechanical deadline; consequence is permanent story change | KQIII/KQVI/MM/LK1/SIMON/QFG1/QFG3/QFG4/BAS/BS1/SQ3 |
| 6 | [Environmental Storytelling Discovery](./puzzles/environmental-storytelling.md) | Information hidden in environment; discovered through examination, observation | KQVI/KQVII/QFG1/QFG3/QFG4/SYB/GF |
| 7 | [Cross-Realm Logistics Puzzle](./puzzles/cross-realm-logistics.md) | Inventory management across multiple locations/realms; rewards forward planning | KQVI/KQIII/KQVII/KQVIII/LK1/INDY2/SQ3/SQ4/TLJ/SYB/QFG3/QFG4 |
| 8 | [Truth Revelation Mechanic](./puzzles/truth-revelation.md) | Items reveal hidden truth; truth itself is the solution | KQVI/KQVII/QFG3/SQ1/SYB/GF |
| 9 | [Observation Replay Puzzle](./puzzles/observation-replay.md) | Single viewing of sequence, must reproduce exactly when opportunity arises | KQIII/KQVII/KQVIII/MM/MI/LK1/SIMON/INDY1/INDY2/QFG1/QFG3/QFG4/SQ1/SQ2/SQ3/SQ4/BAS/BS1/BS2/TLJ/SYB/GF/GK1 |
| 10 | [Pattern Learning / Knowledge Transfer](./puzzles/pattern-learning.md) | Learn rule set in low-stakes domain; apply exhaustively under consequences | MI/LK1/TD/KQVII/BAS/BS1/BS2/GF/SIMON/QFG3/QFG4 |
| 11 | [Environmental Memo Chain](./puzzles/memo-chain.md) | Scattered written fragments across locations; synthesize narrative to reveal solution | MI/SQ4/SYB/GF/GK1 |
| 12 | [NPC Distraction Physics](./puzzles/distraction-physics.md) | Manipulate environment to break NPC blocking pattern without confrontation | MI/INDY1/INDY2/BS1/BS2/TLJ/GF/GK1/SIMON/QFG3 |
| 13 | [Meta-Puzzle Construction](./puzzles/meta-puzzle-construction.md) | Sequential interdependence; each step's output becomes next step's input | MI/MM/KQIII/KQVII/KQVIII/LK1/SMHTR/INDY1/IJOA/TD/INDY2/SQ1/SQ3/SQ4/BAS/BS1/TLJ/SYB/GF/SIMON/QFG3/QFG4 |
| 14 | [Multi-Character Coordination Puzzle](./puzzles/multi-character-coordination.md) | Multiple characters required for separated location actions; single character physically impossible | MM/DOTT/TD/INDY1/INDY2 |
| 15 | [Cross-Temporal Causality Puzzle](./puzzles/cross-temporal-causality.md) | Actions in one time period create immediate consequences in another; solution requires understanding historical causality | DOTT/TLJ/GF/QFG4 |
| 16 | [Surreal Logic Bridge](./puzzles/surreal-logic-bridge.md) | Real-world causality rejected for cartoon/comedy equivalences; success requires abandoning realistic reasoning | SMHTR/SIMON |
| 17 | [Comedy-Based NPC Persuasion](./puzzles/comedy-based-persuasion.md) | Dialogue success depends on tonal comedy matching, not logical argument or trade | SMHTR/GF/SIMON |
| 18 | [Symbol Code Translation](./puzzles/symbol-code-translation.md) | Visual symbols on artifact translate to interface actions via shape/color+order matching; applied exhaustively | TD/INDY1/INDY2/KQVII/KQVIII/BS1/BS2/TLJ/SYB/GF/QFG3/QFG4/GK1 |
| 19 | [Robot Programming / Color-Encoded Sequences](./puzzles/robot-programming.md) | Abstract color→action rule discovery through experimentation; compose original sequences | TD/SYB |
| 20 | [Escalating Combat Progression](./puzzles/escalating-combat-progression.md) | Sequential combat gauntlet where each victory yields weapon needed for next opponent | FT/SQ3/QFG3 |
| 21 | [Corporate Infiltration Puzzle](./puzzles/corporate-infiltration.md) | Multi-layer security breach requiring disguise, behavioral role-play, and credential synthesis | INDY1/SQ3/QFG3 |
| 22 | [Predator Chase Escape](./puzzles/predator-chase-escape.md) | Redirect environmental hazards toward pursuing antagonist; timing/positioning critical | SQ3 |
| 23 | [Repair Chain Construction](./puzzles/repair-chain-construction.md) | Sequential component installation where each repair enables next system functionality | SQ3 |
| 24 | [Class-Specific Ritual Challenge](./puzzles/class-specific-ritual.md) | Same narrative obstacle solved through mechanically distinct class implementations | QFG3/QFG4 |
| 25 | [Multi-Faction Diplomacy Puzzle](./puzzles/multi-faction-diplomacy.md) | Multiple warring groups independently satisfied before unified conflict resolution possible | QFG3 |
| 1 | [Multi-Faceted Plan Puzzle](src/puzzles/multi-faceted-plan.md) | Requirements discovered incrementally; player synthesizes complete mental model | KQVI/KQVII/KQVIII/INDY1/SIMON/LK1/SMHTR/INDY2/SQ1/SQ3/SQ4/QFG1/QFG2/QFG3/QFG4/BS1/BS2/TLJ/SYB/GF |
| 2 | [Sensory Exploitation Puzzle](src/puzzles/sensory-exploitation.md) | Character perceptual vulnerabilities exploited through item matching | KQIII/KQVI/KQVII/MI/LK1/SMHTR/INDY2/SQ1/SQ3/QFG1/QFG3/QFG4/BS1/TLJ/SYB/GF/SIMON |
| 3 | [Metaphor-to-Literal Translation](src/puzzles/metaphor-literal.md) | Abstract language interpreted as literal game mechanics | MI/SQ2/QFG4 |
| 4 | [Information Brokerage Chain](src/puzzles/information-brokerage.md) | Implicit NPC exchange network mapped through incremental interaction | KQVI/KQVII/MI/LK1/INDY2/SQ1/TD/BS1/BS2/TLJ/SYB/GF/QFG3/QFG4 |
| 5 | [Timed Consequence Puzzle](src/puzzles/timed-consequence.md) | Narrative urgency without mechanical deadline; consequence is permanent story change | KQIII/KQVI/MM/LK1/SIMON/QFG1/QFG3/QFG4/BAS/BS1/SQ3 |
| 6 | [Environmental Storytelling Discovery](src/puzzles/environmental-storytelling.md) | Information hidden in environment; discovered through examination, observation | KQVI/KQVII/QFG1/QFG3/QFG4/SYB/GF |
| 7 | [Cross-Realm Logistics Puzzle](src/puzzles/cross-realm-logistics.md) | Inventory management across multiple locations/realms; rewards forward planning | KQVI/KQIII/KQVII/KQVIII/LK1/INDY2/SQ3/SQ4/TLJ/SYB/QFG3/QFG4 |
| 8 | [Truth Revelation Mechanic](src/puzzles/truth-revelation.md) | Items reveal hidden truth; truth itself is the solution | KQVI/KQVII/QFG3/SQ1/SYB/GF |
| 9 | [Observation Replay Puzzle](src/puzzles/observation-replay.md) | Single viewing of sequence, must reproduce exactly when opportunity arises | KQIII/KQVII/KQVIII/MM/MI/LK1/SIMON/INDY1/INDY2/QFG1/QFG3/QFG4/SQ1/SQ2/SQ3/SQ4/BAS/BS1/BS2/TLJ/SYB/GF/GK1 |
| 10 | [Pattern Learning / Knowledge Transfer](src/puzzles/pattern-learning.md) | Learn rule set in low-stakes domain; apply exhaustively under consequences | MI/LK1/TD/KQVII/BAS/BS1/BS2/GF/SIMON/QFG3/QFG4 |
| 11 | [Environmental Memo Chain](src/puzzles/memo-chain.md) | Scattered written fragments across locations; synthesize narrative to reveal solution | MI/SQ4/SYB/GF/GK1 |
| 12 | [NPC Distraction Physics](src/puzzles/distraction-physics.md) | Manipulate environment to break NPC blocking pattern without confrontation | MI/INDY1/INDY2/BS1/BS2/TLJ/GF/GK1/SIMON/QFG3 |
| 13 | [Meta-Puzzle Construction](src/puzzles/meta-puzzle-construction.md) | Sequential interdependence; each step's output becomes next step's input | MI/MM/KQIII/KQVII/KQVIII/LK1/SMHTR/INDY1/IJOA/TD/INDY2/SQ1/SQ3/SQ4/BAS/BS1/TLJ/SYB/GF/SIMON/QFG3/QFG4 |
| 14 | [Multi-Character Coordination Puzzle](src/puzzles/multi-character-coordination.md) | Multiple characters required for separated location actions; single character physically impossible | MM/DOTT/TD/INDY1/INDY2 |
| 15 | [Cross-Temporal Causality Puzzle](src/puzzles/cross-temporal-causality.md) | Actions in one time period create immediate consequences in another; solution requires understanding historical causality | DOTT/TLJ/GF/QFG4 |
| 16 | [Surreal Logic Bridge](src/puzzles/surreal-logic-bridge.md) | Real-world causality rejected for cartoon/comedy equivalences; success requires abandoning realistic reasoning | SMHTR/SIMON |
| 17 | [Comedy-Based NPC Persuasion](src/puzzles/comedy-based-persuasion.md) | Dialogue success depends on tonal comedy matching, not logical argument or trade | SMHTR/GF/SIMON |
| 18 | [Symbol Code Translation](src/puzzles/symbol-code-translation.md) | Visual symbols on artifact translate to interface actions via shape/color+order matching; applied exhaustively | TD/INDY1/INDY2/KQVII/KQVIII/BS1/BS2/TLJ/SYB/GF/QFG3/QFG4/GK1 |
| 19 | [Robot Programming / Color-Encoded Sequences](src/puzzles/robot-programming.md) | Abstract color→action rule discovery through experimentation; compose original sequences | TD/SYB |
| 20 | [Escalating Combat Progression](src/puzzles/escalating-combat-progression.md) | Sequential combat gauntlet where each victory yields weapon needed for next opponent | FT/SQ3/QFG3 |
| 21 | [Corporate Infiltration Puzzle](src/puzzles/corporate-infiltration.md) | Multi-layer security breach requiring disguise, behavioral role-play, and credential synthesis | INDY1/SQ3/QFG3 |
| 22 | [Predator Chase Escape](src/puzzles/predator-chase-escape.md) | Redirect environmental hazards toward pursuing antagonist; timing/positioning critical | SQ3 |
| 23 | [Repair Chain Construction](src/puzzles/repair-chain-construction.md) | Sequential component installation where each repair enables next system functionality | SQ3 |
| 24 | [Class-Specific Ritual Challenge](src/puzzles/class-specific-ritual.md) | Same narrative obstacle solved through mechanically distinct class implementations | QFG3/QFG4 |
| 25 | [Multi-Faction Diplomacy Puzzle](src/puzzles/multi-faction-diplomacy.md) | Multiple warring groups independently satisfied before unified conflict resolution possible | QFG3 |
---

13
book.toml Normal file
View File

@@ -0,0 +1,13 @@
[book]
authors = ["Puzzle Design Knowledge Base"]
language = "en"
title = "Puzzle Design Knowledge Base"
description = "A taxonomy of puzzle design patterns from classic point-and-click adventure games"
[output.html]
git-repository-url = "https://github.com/noti/puzzle-design-kb"
edit-url-template = "https://github.com/noti/puzzle-design-kb/edit/main/{path}"
[output.html.playground]
editable = true
line-numbers = true

1
book/.nojekyll Normal file
View File

@@ -0,0 +1 @@
This file makes sure that Github Pages doesn't process mdBook's output.

252
book/404.html Normal file
View File

@@ -0,0 +1,252 @@
<!DOCTYPE HTML>
<html lang="en" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Page not found - Puzzle Design Knowledge Base</title>
<base href="/">
<!-- Custom HTML head -->
<meta name="description" content="A taxonomy of puzzle design patterns from classic point-and-click adventure games">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="favicon-de23e50b.svg">
<link rel="shortcut icon" href="favicon-8114d1fc.png">
<link rel="stylesheet" href="css/variables-8adf115d.css">
<link rel="stylesheet" href="css/general-2459343d.css">
<link rel="stylesheet" href="css/chrome-ae938929.css">
<link rel="stylesheet" href="css/print-9e4910d8.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="fonts/fonts-9644e21d.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="mdbook-highlight-css" href="highlight-493f70e1.css">
<link rel="stylesheet" id="mdbook-tomorrow-night-css" href="tomorrow-night-4c0ae647.css">
<link rel="stylesheet" id="mdbook-ayu-highlight-css" href="ayu-highlight-3fdfc3ac.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "";
const default_light_theme = "light";
const default_dark_theme = "navy";
window.path_to_searchindex_js = "searchindex-c567150f.js";
</script>
<!-- Start loading toc.js asap -->
<script src="toc-35c178c7.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="mdbook-body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
sidebar_toggle.checked = false;
}
if (sidebar === 'visible') {
sidebar_toggle.checked = true;
} else {
html.classList.remove('sidebar-visible');
}
</script>
<nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="toc.html"></iframe>
</noscript>
<div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="mdbook-page-wrapper" class="page-wrapper">
<div class="page">
<div id="mdbook-menu-bar-hover-placeholder"></div>
<div id="mdbook-menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
</label>
<button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
</button>
<ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
</ul>
<button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
</button>
</div>
<h1 class="menu-title">Puzzle Design Knowledge Base</h1>
<div class="right-buttons">
<a href="print.html" title="Print this book" aria-label="Print this book">
<span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb" title="Git repository" aria-label="Git repository">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
</a>
</div>
</div>
<div id="mdbook-search-wrapper" class="hidden">
<form id="mdbook-searchbar-outer" class="searchbar-outer">
<div class="search-wrapper">
<input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
<div class="spinner-wrapper">
<span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
</div>
</div>
</form>
<div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
<div id="mdbook-searchresults-header" class="searchresults-header"></div>
<ul id="mdbook-searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="mdbook-content" class="content">
<main>
<h1 id="document-not-found-404"><a class="header" href="#document-not-found-404">Document not found (404)</a></h1>
<p>This URL is invalid, sorry. Please use the navigation bar or search to continue.</p>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
</nav>
</div>
<template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
<template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
<template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
<template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
<template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_line_numbers = true;
</script>
<script>
window.playground_copyable = true;
</script>
<script src="ace-2a3cd908.js"></script>
<script src="mode-rust-2c9d5c9a.js"></script>
<script src="editor-16ca416c.js"></script>
<script src="theme-dawn-4493f9c8.js"></script>
<script src="theme-tomorrow_night-9dbe62a9.js"></script>
<script src="elasticlunr-ef4e11c1.min.js"></script>
<script src="mark-09e88c2c.min.js"></script>
<script src="searcher-c2a407aa.js"></script>
<script src="clipboard-1626706a.min.js"></script>
<script src="highlight-abc7f01d.js"></script>
<script src="book-a0b12cfe.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

43
book/ace-2a3cd908.js Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,77 @@
/*
Based off of the Ayu theme
Original by Dempfi (https://github.com/dempfi/ayu)
*/
.hljs {
display: block;
overflow-x: auto;
background: #191f26;
color: #e6e1cf;
}
.hljs-comment,
.hljs-quote {
color: #5c6773;
}
.hljs-variable,
.hljs-template-variable,
.hljs-attribute,
.hljs-attr,
.hljs-regexp,
.hljs-link,
.hljs-selector-id,
.hljs-selector-class {
color: #ff7733;
}
.hljs-number,
.hljs-meta,
.hljs-builtin-name,
.hljs-literal,
.hljs-type,
.hljs-params {
color: #ffee99;
}
.hljs-string,
.hljs-bullet {
color: #b8cc52;
}
.hljs-title,
.hljs-built_in,
.hljs-section {
color: #ffb454;
}
.hljs-keyword,
.hljs-selector-tag,
.hljs-symbol {
color: #ff7733;
}
.hljs-name {
color: #36a3d9;
}
.hljs-tag {
color: #00568d;
}
.hljs-emphasis {
font-style: italic;
}
.hljs-strong {
font-weight: bold;
}
.hljs-addition {
color: #91b362;
}
.hljs-deletion {
color: #d96c75;
}

843
book/book-a0b12cfe.js Normal file
View File

@@ -0,0 +1,843 @@
'use strict';
/* global default_theme, default_dark_theme, default_light_theme, hljs, ClipboardJS */
// Fix back button cache problem
window.onunload = function() { };
// Global variable, shared between modules
function playground_text(playground, hidden = true) {
const code_block = playground.querySelector('code');
if (window.ace && code_block.classList.contains('editable')) {
const editor = window.ace.edit(code_block);
return editor.getValue();
} else if (hidden) {
return code_block.textContent;
} else {
return code_block.innerText;
}
}
(function codeSnippets() {
function fetch_with_timeout(url, options, timeout = 6000) {
return Promise.race([
fetch(url, options),
new Promise((_, reject) => setTimeout(() => reject(new Error('timeout')), timeout)),
]);
}
const playgrounds = Array.from(document.querySelectorAll('.playground'));
if (playgrounds.length > 0) {
fetch_with_timeout('https://play.rust-lang.org/meta/crates', {
headers: {
'Content-Type': 'application/json',
},
method: 'POST',
mode: 'cors',
})
.then(response => response.json())
.then(response => {
// get list of crates available in the rust playground
const playground_crates = response.crates.map(item => item['id']);
playgrounds.forEach(block => handle_crate_list_update(block, playground_crates));
});
}
function handle_crate_list_update(playground_block, playground_crates) {
// update the play buttons after receiving the response
update_play_button(playground_block, playground_crates);
// and install on change listener to dynamically update ACE editors
if (window.ace) {
const code_block = playground_block.querySelector('code');
if (code_block.classList.contains('editable')) {
const editor = window.ace.edit(code_block);
editor.addEventListener('change', () => {
update_play_button(playground_block, playground_crates);
});
// add Ctrl-Enter command to execute rust code
editor.commands.addCommand({
name: 'run',
bindKey: {
win: 'Ctrl-Enter',
mac: 'Ctrl-Enter',
},
exec: _editor => run_rust_code(playground_block),
});
}
}
}
// updates the visibility of play button based on `no_run` class and
// used crates vs ones available on https://play.rust-lang.org
function update_play_button(pre_block, playground_crates) {
const play_button = pre_block.querySelector('.play-button');
// skip if code is `no_run`
if (pre_block.querySelector('code').classList.contains('no_run')) {
play_button.classList.add('hidden');
return;
}
// get list of `extern crate`'s from snippet
const txt = playground_text(pre_block);
const re = /extern\s+crate\s+([a-zA-Z_0-9]+)\s*;/g;
const snippet_crates = [];
let item;
while (item = re.exec(txt)) {
snippet_crates.push(item[1]);
}
// check if all used crates are available on play.rust-lang.org
const all_available = snippet_crates.every(function(elem) {
return playground_crates.indexOf(elem) > -1;
});
if (all_available) {
play_button.classList.remove('hidden');
play_button.hidden = false;
} else {
play_button.classList.add('hidden');
}
}
function run_rust_code(code_block) {
let result_block = code_block.querySelector('.result');
if (!result_block) {
result_block = document.createElement('code');
result_block.className = 'result hljs language-bash';
code_block.append(result_block);
}
const text = playground_text(code_block);
const classes = code_block.querySelector('code').classList;
let edition = '2015';
classes.forEach(className => {
if (className.startsWith('edition')) {
edition = className.slice(7);
}
});
const params = {
version: 'stable',
optimize: '0',
code: text,
edition: edition,
};
if (text.indexOf('#![feature') !== -1) {
params.version = 'nightly';
}
result_block.innerText = 'Running...';
fetch_with_timeout('https://play.rust-lang.org/evaluate.json', {
headers: {
'Content-Type': 'application/json',
},
method: 'POST',
mode: 'cors',
body: JSON.stringify(params),
})
.then(response => response.json())
.then(response => {
if (response.result.trim() === '') {
result_block.innerText = 'No output';
result_block.classList.add('result-no-output');
} else {
result_block.innerText = response.result;
result_block.classList.remove('result-no-output');
}
})
.catch(error => result_block.innerText = 'Playground Communication: ' + error.message);
}
// Syntax highlighting Configuration
hljs.configure({
tabReplace: ' ', // 4 spaces
languages: [], // Languages used for auto-detection
});
const code_nodes = Array
.from(document.querySelectorAll('code'))
// Don't highlight `inline code` blocks in headers.
.filter(function(node) {
return !node.parentElement.classList.contains('header');
});
if (window.ace) {
// language-rust class needs to be removed for editable
// blocks or highlightjs will capture events
code_nodes
.filter(function(node) {
return node.classList.contains('editable');
})
.forEach(function(block) {
block.classList.remove('language-rust');
});
code_nodes
.filter(function(node) {
return !node.classList.contains('editable');
})
.forEach(function(block) {
hljs.highlightBlock(block);
});
} else {
code_nodes.forEach(function(block) {
hljs.highlightBlock(block);
});
}
// Adding the hljs class gives code blocks the color css
// even if highlighting doesn't apply
code_nodes.forEach(function(block) {
block.classList.add('hljs');
});
Array.from(document.querySelectorAll('code.hljs')).forEach(function(block) {
const lines = Array.from(block.querySelectorAll('.boring'));
// If no lines were hidden, return
if (!lines.length) {
return;
}
block.classList.add('hide-boring');
const buttons = document.createElement('div');
buttons.className = 'buttons';
buttons.innerHTML = '<button title="Show hidden lines" \
aria-label="Show hidden lines"></button>';
buttons.firstChild.innerHTML = document.getElementById('fa-eye').innerHTML;
// add expand button
const pre_block = block.parentNode;
pre_block.insertBefore(buttons, pre_block.firstChild);
buttons.firstChild.addEventListener('click', function(e) {
if (this.title === 'Show hidden lines') {
this.innerHTML = document.getElementById('fa-eye-slash').innerHTML;
this.title = 'Hide lines';
this.setAttribute('aria-label', e.target.title);
block.classList.remove('hide-boring');
} else if (this.title === 'Hide lines') {
this.innerHTML = document.getElementById('fa-eye').innerHTML;
this.title = 'Show hidden lines';
this.setAttribute('aria-label', e.target.title);
block.classList.add('hide-boring');
}
});
});
if (window.playground_copyable) {
Array.from(document.querySelectorAll('pre code')).forEach(function(block) {
const pre_block = block.parentNode;
if (!pre_block.classList.contains('playground')) {
let buttons = pre_block.querySelector('.buttons');
if (!buttons) {
buttons = document.createElement('div');
buttons.className = 'buttons';
pre_block.insertBefore(buttons, pre_block.firstChild);
}
const clipButton = document.createElement('button');
clipButton.className = 'clip-button';
clipButton.title = 'Copy to clipboard';
clipButton.setAttribute('aria-label', clipButton.title);
clipButton.innerHTML = '<i class="tooltiptext"></i>';
buttons.insertBefore(clipButton, buttons.firstChild);
}
});
}
// Process playground code blocks
Array.from(document.querySelectorAll('.playground')).forEach(function(pre_block) {
// Add play button
let buttons = pre_block.querySelector('.buttons');
if (!buttons) {
buttons = document.createElement('div');
buttons.className = 'buttons';
pre_block.insertBefore(buttons, pre_block.firstChild);
}
const runCodeButton = document.createElement('button');
runCodeButton.className = 'play-button';
runCodeButton.hidden = true;
runCodeButton.title = 'Run this code';
runCodeButton.setAttribute('aria-label', runCodeButton.title);
runCodeButton.innerHTML = document.getElementById('fa-play').innerHTML;
buttons.insertBefore(runCodeButton, buttons.firstChild);
runCodeButton.addEventListener('click', () => {
run_rust_code(pre_block);
});
if (window.playground_copyable) {
const copyCodeClipboardButton = document.createElement('button');
copyCodeClipboardButton.className = 'clip-button';
copyCodeClipboardButton.innerHTML = '<i class="tooltiptext"></i>';
copyCodeClipboardButton.title = 'Copy to clipboard';
copyCodeClipboardButton.setAttribute('aria-label', copyCodeClipboardButton.title);
buttons.insertBefore(copyCodeClipboardButton, buttons.firstChild);
}
const code_block = pre_block.querySelector('code');
if (window.ace && code_block.classList.contains('editable')) {
const undoChangesButton = document.createElement('button');
undoChangesButton.className = 'reset-button';
undoChangesButton.title = 'Undo changes';
undoChangesButton.setAttribute('aria-label', undoChangesButton.title);
undoChangesButton.innerHTML +=
document.getElementById('fa-clock-rotate-left').innerHTML;
buttons.insertBefore(undoChangesButton, buttons.firstChild);
undoChangesButton.addEventListener('click', function() {
const editor = window.ace.edit(code_block);
editor.setValue(editor.originalCode);
editor.clearSelection();
});
}
});
})();
(function themes() {
const html = document.querySelector('html');
const themeToggleButton = document.getElementById('mdbook-theme-toggle');
const themePopup = document.getElementById('mdbook-theme-list');
const themeColorMetaTag = document.querySelector('meta[name="theme-color"]');
const themeIds = [];
themePopup.querySelectorAll('button.theme').forEach(function(el) {
themeIds.push(el.id);
});
const stylesheets = {
ayuHighlight: document.querySelector('#mdbook-ayu-highlight-css'),
tomorrowNight: document.querySelector('#mdbook-tomorrow-night-css'),
highlight: document.querySelector('#mdbook-highlight-css'),
};
function showThemes() {
themePopup.style.display = 'block';
themeToggleButton.setAttribute('aria-expanded', true);
themePopup.querySelector('button#mdbook-theme-' + get_theme()).focus();
}
function updateThemeSelected() {
themePopup.querySelectorAll('.theme-selected').forEach(function(el) {
el.classList.remove('theme-selected');
});
const selected = get_saved_theme() ?? 'default_theme';
let element = themePopup.querySelector('button#mdbook-theme-' + selected);
if (element === null) {
// Fall back in case there is no "Default" item.
element = themePopup.querySelector('button#mdbook-theme-' + get_theme());
}
element.classList.add('theme-selected');
}
function hideThemes() {
themePopup.style.display = 'none';
themeToggleButton.setAttribute('aria-expanded', false);
themeToggleButton.focus();
}
function get_saved_theme() {
let theme = null;
try {
theme = localStorage.getItem('mdbook-theme');
} catch {
// ignore error.
}
return theme;
}
function delete_saved_theme() {
localStorage.removeItem('mdbook-theme');
}
function get_theme() {
const theme = get_saved_theme();
if (theme === null || theme === undefined || !themeIds.includes('mdbook-theme-' + theme)) {
if (typeof default_dark_theme === 'undefined') {
// A customized index.hbs might not define this, so fall back to
// old behavior of determining the default on page load.
return default_theme;
}
return window.matchMedia('(prefers-color-scheme: dark)').matches
? default_dark_theme
: default_light_theme;
} else {
return theme;
}
}
let previousTheme = default_theme;
function set_theme(theme, store = true) {
let ace_theme;
if (theme === 'coal' || theme === 'navy') {
stylesheets.ayuHighlight.disabled = true;
stylesheets.tomorrowNight.disabled = false;
stylesheets.highlight.disabled = true;
ace_theme = 'ace/theme/tomorrow_night';
} else if (theme === 'ayu') {
stylesheets.ayuHighlight.disabled = false;
stylesheets.tomorrowNight.disabled = true;
stylesheets.highlight.disabled = true;
ace_theme = 'ace/theme/tomorrow_night';
} else {
stylesheets.ayuHighlight.disabled = true;
stylesheets.tomorrowNight.disabled = true;
stylesheets.highlight.disabled = false;
ace_theme = 'ace/theme/dawn';
}
setTimeout(function() {
themeColorMetaTag.content = getComputedStyle(document.documentElement).backgroundColor;
}, 1);
if (window.ace && window.editors) {
window.editors.forEach(function(editor) {
editor.setTheme(ace_theme);
});
}
if (store) {
try {
localStorage.setItem('mdbook-theme', theme);
} catch {
// ignore error.
}
}
html.classList.remove(previousTheme);
html.classList.add(theme);
previousTheme = theme;
updateThemeSelected();
}
const query = window.matchMedia('(prefers-color-scheme: dark)');
query.onchange = function() {
set_theme(get_theme(), false);
};
// Set theme.
set_theme(get_theme(), false);
themeToggleButton.addEventListener('click', function() {
if (themePopup.style.display === 'block') {
hideThemes();
} else {
showThemes();
}
});
themePopup.addEventListener('click', function(e) {
let theme;
if (e.target.className === 'theme') {
theme = e.target.id;
} else if (e.target.parentElement.className === 'theme') {
theme = e.target.parentElement.id;
} else {
return;
}
theme = theme.replace(/^mdbook-theme-/, '');
if (theme === 'default_theme' || theme === null) {
delete_saved_theme();
set_theme(get_theme(), false);
} else {
set_theme(theme);
}
});
themePopup.addEventListener('focusout', function(e) {
// e.relatedTarget is null in Safari and Firefox on macOS (see workaround below)
if (!!e.relatedTarget &&
!themeToggleButton.contains(e.relatedTarget) &&
!themePopup.contains(e.relatedTarget)
) {
hideThemes();
}
});
// Should not be needed, but it works around an issue on macOS & iOS:
// https://github.com/rust-lang/mdBook/issues/628
document.addEventListener('click', function(e) {
if (themePopup.style.display === 'block' &&
!themeToggleButton.contains(e.target) &&
!themePopup.contains(e.target)
) {
hideThemes();
}
});
document.addEventListener('keydown', function(e) {
if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) {
return;
}
if (!themePopup.contains(e.target)) {
return;
}
let li;
switch (e.key) {
case 'Escape':
e.preventDefault();
hideThemes();
break;
case 'ArrowUp':
e.preventDefault();
li = document.activeElement.parentElement;
if (li && li.previousElementSibling) {
li.previousElementSibling.querySelector('button').focus();
}
break;
case 'ArrowDown':
e.preventDefault();
li = document.activeElement.parentElement;
if (li && li.nextElementSibling) {
li.nextElementSibling.querySelector('button').focus();
}
break;
case 'Home':
e.preventDefault();
themePopup.querySelector('li:first-child button').focus();
break;
case 'End':
e.preventDefault();
themePopup.querySelector('li:last-child button').focus();
break;
}
});
})();
(function sidebar() {
const sidebar = document.getElementById('mdbook-sidebar');
const sidebarLinks = document.querySelectorAll('#mdbook-sidebar a');
const sidebarToggleButton = document.getElementById('mdbook-sidebar-toggle');
const sidebarResizeHandle = document.getElementById('mdbook-sidebar-resize-handle');
const sidebarCheckbox = document.getElementById('mdbook-sidebar-toggle-anchor');
let firstContact = null;
/* Because we cannot change the `display` using only CSS after/before the transition, we
need JS to do it. We change the display to prevent the browsers search to find text inside
the collapsed sidebar. */
if (!document.documentElement.classList.contains('sidebar-visible')) {
sidebar.style.display = 'none';
}
sidebar.addEventListener('transitionend', () => {
/* We only change the display to "none" if we're collapsing the sidebar. */
if (!sidebarCheckbox.checked) {
sidebar.style.display = 'none';
}
});
sidebarToggleButton.addEventListener('click', () => {
/* To allow the sidebar expansion animation, we first need to put back the display. */
if (!sidebarCheckbox.checked) {
sidebar.style.display = '';
// Workaround for Safari skipping the animation when changing
// `display` and a transform in the same event loop. This forces a
// reflow after updating the display.
sidebar.offsetHeight;
}
});
function showSidebar() {
document.documentElement.classList.add('sidebar-visible');
Array.from(sidebarLinks).forEach(function(link) {
link.setAttribute('tabIndex', 0);
});
sidebarToggleButton.setAttribute('aria-expanded', true);
sidebar.setAttribute('aria-hidden', false);
try {
localStorage.setItem('mdbook-sidebar', 'visible');
} catch {
// Ignore error.
}
}
function hideSidebar() {
document.documentElement.classList.remove('sidebar-visible');
Array.from(sidebarLinks).forEach(function(link) {
link.setAttribute('tabIndex', -1);
});
sidebarToggleButton.setAttribute('aria-expanded', false);
sidebar.setAttribute('aria-hidden', true);
try {
localStorage.setItem('mdbook-sidebar', 'hidden');
} catch {
// Ignore error.
}
}
// Toggle sidebar
sidebarCheckbox.addEventListener('change', function sidebarToggle() {
if (sidebarCheckbox.checked) {
const current_width = parseInt(
document.documentElement.style.getPropertyValue('--sidebar-target-width'), 10);
if (current_width < 150) {
document.documentElement.style.setProperty('--sidebar-target-width', '150px');
}
showSidebar();
} else {
hideSidebar();
}
});
sidebarResizeHandle.addEventListener('mousedown', initResize, false);
function initResize() {
window.addEventListener('mousemove', resize, false);
window.addEventListener('mouseup', stopResize, false);
document.documentElement.classList.add('sidebar-resizing');
}
function resize(e) {
let pos = e.clientX - sidebar.offsetLeft;
if (pos < 20) {
hideSidebar();
} else {
if (!document.documentElement.classList.contains('sidebar-visible')) {
showSidebar();
}
pos = Math.min(pos, window.innerWidth - 100);
document.documentElement.style.setProperty('--sidebar-target-width', pos + 'px');
}
}
//on mouseup remove windows functions mousemove & mouseup
function stopResize() {
document.documentElement.classList.remove('sidebar-resizing');
window.removeEventListener('mousemove', resize, false);
window.removeEventListener('mouseup', stopResize, false);
}
document.addEventListener('touchstart', function(e) {
firstContact = {
x: e.touches[0].clientX,
time: Date.now(),
};
}, { passive: true });
document.addEventListener('touchmove', function(e) {
if (!firstContact) {
return;
}
const curX = e.touches[0].clientX;
const xDiff = curX - firstContact.x,
tDiff = Date.now() - firstContact.time;
if (tDiff < 250 && Math.abs(xDiff) >= 150) {
if (xDiff >= 0 && firstContact.x < Math.min(document.body.clientWidth * 0.25, 300)) {
showSidebar();
} else if (xDiff < 0 && curX < 300) {
hideSidebar();
}
firstContact = null;
}
}, { passive: true });
})();
(function chapterNavigation() {
document.addEventListener('keydown', function(e) {
if (e.altKey || e.ctrlKey || e.metaKey) {
return;
}
if (window.search && window.search.hasFocus()) {
return;
}
const html = document.querySelector('html');
function next() {
const nextButton = document.querySelector('.nav-chapters.next');
if (nextButton) {
window.location.href = nextButton.href;
}
}
function prev() {
const previousButton = document.querySelector('.nav-chapters.previous');
if (previousButton) {
window.location.href = previousButton.href;
}
}
function showHelp() {
const container = document.getElementById('mdbook-help-container');
const overlay = document.getElementById('mdbook-help-popup');
container.style.display = 'flex';
// Clicking outside the popup will dismiss it.
const mouseHandler = event => {
if (overlay.contains(event.target)) {
return;
}
if (event.button !== 0) {
return;
}
event.preventDefault();
event.stopPropagation();
document.removeEventListener('mousedown', mouseHandler);
hideHelp();
};
// Pressing esc will dismiss the popup.
const escapeKeyHandler = event => {
if (event.key === 'Escape') {
event.preventDefault();
event.stopPropagation();
document.removeEventListener('keydown', escapeKeyHandler, true);
hideHelp();
}
};
document.addEventListener('keydown', escapeKeyHandler, true);
document.getElementById('mdbook-help-container')
.addEventListener('mousedown', mouseHandler);
}
function hideHelp() {
document.getElementById('mdbook-help-container').style.display = 'none';
}
// Usually needs the Shift key to be pressed
switch (e.key) {
case '?':
e.preventDefault();
showHelp();
break;
}
// Rest of the keys are only active when the Shift key is not pressed
if (e.shiftKey) {
return;
}
switch (e.key) {
case 'ArrowRight':
e.preventDefault();
if (html.dir === 'rtl') {
prev();
} else {
next();
}
break;
case 'ArrowLeft':
e.preventDefault();
if (html.dir === 'rtl') {
next();
} else {
prev();
}
break;
}
});
})();
(function clipboard() {
const clipButtons = document.querySelectorAll('.clip-button');
function hideTooltip(elem) {
elem.firstChild.innerText = '';
elem.className = 'clip-button';
}
function showTooltip(elem, msg) {
elem.firstChild.innerText = msg;
elem.className = 'clip-button tooltipped';
}
const clipboardSnippets = new ClipboardJS('.clip-button', {
text: function(trigger) {
hideTooltip(trigger);
const playground = trigger.closest('pre');
return playground_text(playground, false);
},
});
Array.from(clipButtons).forEach(function(clipButton) {
clipButton.addEventListener('mouseout', function(e) {
hideTooltip(e.currentTarget);
});
});
clipboardSnippets.on('success', function(e) {
e.clearSelection();
showTooltip(e.trigger, 'Copied!');
});
clipboardSnippets.on('error', function(e) {
showTooltip(e.trigger, 'Clipboard error!');
});
})();
(function scrollToTop() {
const menuTitle = document.querySelector('.menu-title');
menuTitle.addEventListener('click', function() {
document.scrollingElement.scrollTo({ top: 0, behavior: 'smooth' });
});
})();
(function controllMenu() {
const menu = document.getElementById('mdbook-menu-bar');
(function controllPosition() {
let scrollTop = document.scrollingElement.scrollTop;
let prevScrollTop = scrollTop;
const minMenuY = -menu.clientHeight - 50;
// When the script loads, the page can be at any scroll (e.g. if you refresh it).
menu.style.top = scrollTop + 'px';
// Same as parseInt(menu.style.top.slice(0, -2), but faster
let topCache = menu.style.top.slice(0, -2);
menu.classList.remove('sticky');
let stickyCache = false; // Same as menu.classList.contains('sticky'), but faster
document.addEventListener('scroll', function() {
scrollTop = Math.max(document.scrollingElement.scrollTop, 0);
// `null` means that it doesn't need to be updated
let nextSticky = null;
let nextTop = null;
const scrollDown = scrollTop > prevScrollTop;
const menuPosAbsoluteY = topCache - scrollTop;
if (scrollDown) {
nextSticky = false;
if (menuPosAbsoluteY > 0) {
nextTop = prevScrollTop;
}
} else {
if (menuPosAbsoluteY > 0) {
nextSticky = true;
} else if (menuPosAbsoluteY < minMenuY) {
nextTop = prevScrollTop + minMenuY;
}
}
if (nextSticky === true && stickyCache === false) {
menu.classList.add('sticky');
stickyCache = true;
} else if (nextSticky === false && stickyCache === true) {
menu.classList.remove('sticky');
stickyCache = false;
}
if (nextTop !== null) {
menu.style.top = nextTop + 'px';
topCache = nextTop;
}
prevScrollTop = scrollTop;
}, { passive: true });
})();
(function controllBorder() {
function updateBorder() {
if (menu.offsetTop === 0) {
menu.classList.remove('bordered');
} else {
menu.classList.add('bordered');
}
}
updateBorder();
document.addEventListener('scroll', updateBorder, { passive: true });
})();
})();

7
book/clipboard-1626706a.min.js vendored Normal file

File diff suppressed because one or more lines are too long

274
book/core-principles.html Normal file
View File

@@ -0,0 +1,274 @@
<!DOCTYPE HTML>
<html lang="en" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Core Principles - Puzzle Design Knowledge Base</title>
<!-- Custom HTML head -->
<meta name="description" content="A taxonomy of puzzle design patterns from classic point-and-click adventure games">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="favicon-de23e50b.svg">
<link rel="shortcut icon" href="favicon-8114d1fc.png">
<link rel="stylesheet" href="css/variables-8adf115d.css">
<link rel="stylesheet" href="css/general-2459343d.css">
<link rel="stylesheet" href="css/chrome-ae938929.css">
<link rel="stylesheet" href="css/print-9e4910d8.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="fonts/fonts-9644e21d.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="mdbook-highlight-css" href="highlight-493f70e1.css">
<link rel="stylesheet" id="mdbook-tomorrow-night-css" href="tomorrow-night-4c0ae647.css">
<link rel="stylesheet" id="mdbook-ayu-highlight-css" href="ayu-highlight-3fdfc3ac.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "";
const default_light_theme = "light";
const default_dark_theme = "navy";
window.path_to_searchindex_js = "searchindex-c567150f.js";
</script>
<!-- Start loading toc.js asap -->
<script src="toc-35c178c7.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="mdbook-body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
sidebar_toggle.checked = false;
}
if (sidebar === 'visible') {
sidebar_toggle.checked = true;
} else {
html.classList.remove('sidebar-visible');
}
</script>
<nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="toc.html"></iframe>
</noscript>
<div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="mdbook-page-wrapper" class="page-wrapper">
<div class="page">
<div id="mdbook-menu-bar-hover-placeholder"></div>
<div id="mdbook-menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
</label>
<button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
</button>
<ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
</ul>
<button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
</button>
</div>
<h1 class="menu-title">Puzzle Design Knowledge Base</h1>
<div class="right-buttons">
<a href="print.html" title="Print this book" aria-label="Print this book">
<span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb" title="Git repository" aria-label="Git repository">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb/edit/main/src/core-principles.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
<span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
</a>
</div>
</div>
<div id="mdbook-search-wrapper" class="hidden">
<form id="mdbook-searchbar-outer" class="searchbar-outer">
<div class="search-wrapper">
<input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
<div class="spinner-wrapper">
<span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
</div>
</div>
</form>
<div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
<div id="mdbook-searchresults-header" class="searchresults-header"></div>
<ul id="mdbook-searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="mdbook-content" class="content">
<main>
<h1 id="core-principles"><a class="header" href="#core-principles">Core Principles</a></h1>
<p>These puzzle types share common characteristics that define adventure game puzzle design:</p>
<h2 id="limited-actions-unlimited-combinations"><a class="header" href="#limited-actions-unlimited-combinations">Limited Actions, Unlimited Combinations</a></h2>
<p>The standard adventure game action set (LOOK, TALK, USE, WALK, TAKE) is applied in novel ways. The puzzle emerges from the <em>combination</em> of actions, not from complex input systems.</p>
<h2 id="information-as-puzzle-element"><a class="header" href="#information-as-puzzle-element">Information as Puzzle Element</a></h2>
<p>The puzzle is often “what does the game know that I need to find out?” rather than “what do I need to do?” Information discovery is the primary mechanic.</p>
<h2 id="failure-as-feedback"><a class="header" href="#failure-as-feedback">Failure as Feedback</a></h2>
<p>Failed attempts reveal information about whats missing or wrong. The puzzle teaches through consequences, not explicit instruction.</p>
<h2 id="synthesis-over-collection"><a class="header" href="#synthesis-over-collection">Synthesis Over Collection</a></h2>
<p>The solution often requires combining information from multiple sources. No single action completes the puzzle—player must synthesize.</p>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="puzzles-front-matter.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="documentation-structure.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="puzzles-front-matter.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="documentation-structure.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
</nav>
</div>
<template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
<template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
<template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
<template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
<template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_line_numbers = true;
</script>
<script>
window.playground_copyable = true;
</script>
<script src="ace-2a3cd908.js"></script>
<script src="mode-rust-2c9d5c9a.js"></script>
<script src="editor-16ca416c.js"></script>
<script src="theme-dawn-4493f9c8.js"></script>
<script src="theme-tomorrow_night-9dbe62a9.js"></script>
<script src="elasticlunr-ef4e11c1.min.js"></script>
<script src="mark-09e88c2c.min.js"></script>
<script src="searcher-c2a407aa.js"></script>
<script src="clipboard-1626706a.min.js"></script>
<script src="highlight-abc7f01d.js"></script>
<script src="book-a0b12cfe.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

View File

@@ -0,0 +1,756 @@
/* CSS for UI elements (a.k.a. chrome) */
html {
scrollbar-color: var(--scrollbar) transparent;
}
#mdbook-searchresults a,
.content a:link,
a:visited,
a > .hljs {
color: var(--links);
}
/*
mdbook-body-container is necessary because mobile browsers don't seem to like
overflow-x on the body tag when there is a <meta name="viewport"> tag.
*/
#mdbook-body-container {
/*
This is used when the sidebar pushes the body content off the side of
the screen on small screens. Without it, dragging on mobile Safari
will want to reposition the viewport in a weird way.
*/
overflow-x: clip;
}
/* Menu Bar */
#mdbook-menu-bar,
#mdbook-menu-bar-hover-placeholder {
z-index: 101;
margin: auto calc(0px - var(--page-padding));
}
#mdbook-menu-bar {
position: relative;
display: flex;
flex-wrap: wrap;
background-color: var(--bg);
border-block-end-color: var(--bg);
border-block-end-width: 1px;
border-block-end-style: solid;
}
#mdbook-menu-bar.sticky,
#mdbook-menu-bar-hover-placeholder:hover + #mdbook-menu-bar,
#mdbook-menu-bar:hover,
html.sidebar-visible #mdbook-menu-bar {
position: -webkit-sticky;
position: sticky;
top: 0 !important;
}
#mdbook-menu-bar-hover-placeholder {
position: sticky;
position: -webkit-sticky;
top: 0;
height: var(--menu-bar-height);
}
#mdbook-menu-bar.bordered {
border-block-end-color: var(--table-border-color);
}
#mdbook-menu-bar .fa-svg, #mdbook-menu-bar .icon-button {
position: relative;
padding: 0 8px;
z-index: 10;
line-height: var(--menu-bar-height);
cursor: pointer;
transition: color 0.5s;
}
@media only screen and (max-width: 420px) {
#mdbook-menu-bar .fa-svg, #mdbook-menu-bar .icon-button {
padding: 0 5px;
}
}
.icon-button {
border: none;
background: none;
padding: 0;
color: inherit;
}
.icon-button .fa-svg {
margin: 0;
}
.right-buttons {
margin: 0 15px;
}
.right-buttons a {
text-decoration: none;
}
.left-buttons {
display: flex;
margin: 0 5px;
}
html:not(.js) .left-buttons button {
display: none;
}
.menu-title {
display: inline-block;
font-weight: 200;
font-size: 2.4rem;
line-height: var(--menu-bar-height);
text-align: center;
margin: 0;
flex: 1;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.menu-title {
cursor: pointer;
}
.menu-bar,
.menu-bar:visited,
.nav-chapters,
.nav-chapters:visited,
.mobile-nav-chapters,
.mobile-nav-chapters:visited,
.menu-bar .icon-button,
.menu-bar a .fa-svg {
color: var(--icons);
}
.menu-bar .fa-svg:hover,
.menu-bar .icon-button:hover,
.nav-chapters:hover,
.mobile-nav-chapters .fa-svg:hover {
color: var(--icons-hover);
}
/* Nav Icons */
.nav-chapters {
font-size: 2.5em;
text-align: center;
text-decoration: none;
position: fixed;
top: 0;
bottom: 0;
margin: 0;
max-width: 150px;
min-width: 90px;
display: flex;
justify-content: center;
align-content: center;
flex-direction: column;
transition: color 0.5s, background-color 0.5s;
}
.nav-chapters:hover {
text-decoration: none;
background-color: var(--theme-hover);
transition: background-color 0.15s, color 0.15s;
}
.nav-wrapper {
margin-block-start: 50px;
display: none;
}
.mobile-nav-chapters {
font-size: 2.5em;
text-align: center;
text-decoration: none;
width: 90px;
border-radius: 5px;
background-color: var(--sidebar-bg);
}
/* Only Firefox supports flow-relative values */
.previous { float: left; }
[dir=rtl] .previous { float: right; }
/* Only Firefox supports flow-relative values */
.next {
float: right;
right: var(--page-padding);
}
[dir=rtl] .next {
float: left;
right: unset;
left: var(--page-padding);
}
@media only screen and (max-width: 1080px) {
.nav-wide-wrapper { display: none; }
.nav-wrapper { display: block; }
}
/* sidebar-visible */
@media only screen and (max-width: 1380px) {
#mdbook-sidebar-toggle-anchor:checked ~ .page-wrapper .nav-wide-wrapper { display: none; }
#mdbook-sidebar-toggle-anchor:checked ~ .page-wrapper .nav-wrapper { display: block; }
}
/* Inline code */
:not(pre) > .hljs {
display: inline;
padding: 0.1em 0.3em;
border-radius: 3px;
}
:not(pre):not(a) > .hljs {
color: var(--inline-code-color);
overflow-x: initial;
}
a:hover > .hljs {
text-decoration: underline;
}
pre {
position: relative;
}
pre > .buttons {
position: absolute;
z-index: 100;
right: 0px;
top: 2px;
margin: 0px;
padding: 2px 0px;
color: var(--sidebar-fg);
cursor: pointer;
visibility: hidden;
opacity: 0;
transition: visibility 0.1s linear, opacity 0.1s linear;
}
pre:hover > .buttons {
visibility: visible;
opacity: 1
}
pre > .buttons :hover {
color: var(--sidebar-active);
border-color: var(--icons-hover);
background-color: var(--theme-hover);
}
pre > .buttons button {
cursor: inherit;
margin: 0px 5px;
padding: 2px 3px 0px 4px;
font-size: 23px;
border-style: solid;
border-width: 1px;
border-radius: 4px;
border-color: var(--icons);
background-color: var(--theme-popup-bg);
transition: 100ms;
transition-property: color,border-color,background-color;
color: var(--icons);
}
pre > .buttons button.clip-button {
padding: 2px 4px 0px 6px;
}
pre > .buttons button.clip-button::before {
/* clipboard image from octicons (https://github.com/primer/octicons/tree/v2.0.0) MIT license
*/
content: url('data:image/svg+xml,<svg width="21" height="20" viewBox="0 0 24 25" \
xmlns="http://www.w3.org/2000/svg" aria-label="Copy to clipboard">\
<path d="M18 20h2v3c0 1-1 2-2 2H2c-.998 0-2-1-2-2V5c0-.911.755-1.667 1.667-1.667h5A3.323 3.323 0 \
0110 0a3.323 3.323 0 013.333 3.333h5C19.245 3.333 20 4.09 20 5v8.333h-2V9H2v14h16v-3zM3 \
7h14c0-.911-.793-1.667-1.75-1.667H13.5c-.957 0-1.75-.755-1.75-1.666C11.75 2.755 10.957 2 10 \
2s-1.75.755-1.75 1.667c0 .911-.793 1.666-1.75 1.666H4.75C3.793 5.333 3 6.09 3 7z"/>\
<path d="M4 19h6v2H4zM12 11H4v2h8zM4 17h4v-2H4zM15 15v-3l-4.5 4.5L15 21v-3l8.027-.032L23 15z"/>\
</svg>');
filter: var(--copy-button-filter);
}
pre > .buttons button.clip-button:hover::before {
filter: var(--copy-button-filter-hover);
}
@media (pointer: coarse) {
pre > .buttons button {
/* On mobile, make it easier to tap buttons. */
padding: 0.3rem 1rem;
}
.sidebar-resize-indicator {
/* Hide resize indicator on devices with limited accuracy */
display: none;
}
}
pre > code {
display: block;
padding: 1rem;
}
/* FIXME: ACE editors overlap their buttons because ACE does absolute
positioning within the code block which breaks padding. The only solution I
can think of is to move the padding to the outer pre tag (or insert a div
wrapper), but that would require fixing a whole bunch of CSS rules.
*/
.hljs.ace_editor {
padding: 0rem 0rem;
}
pre > .result {
margin-block-start: 10px;
}
/* Search */
#mdbook-searchresults a {
text-decoration: none;
}
mark {
border-radius: 2px;
padding-block-start: 0;
padding-block-end: 1px;
padding-inline-start: 3px;
padding-inline-end: 3px;
margin-block-start: 0;
margin-block-end: -1px;
margin-inline-start: -3px;
margin-inline-end: -3px;
background-color: var(--search-mark-bg);
transition: background-color 300ms linear;
cursor: pointer;
}
mark.fade-out {
background-color: rgba(0,0,0,0) !important;
cursor: auto;
}
.searchbar-outer {
margin-inline-start: auto;
margin-inline-end: auto;
max-width: var(--content-max-width);
}
#mdbook-searchbar-outer.searching #mdbook-searchbar {
padding-right: 30px;
}
#mdbook-searchbar-outer .spinner-wrapper {
display: none;
}
#mdbook-searchbar-outer.searching .spinner-wrapper {
display: block;
}
.search-wrapper {
position: relative;
}
.spinner-wrapper {
--spinner-margin: 2px;
position: absolute;
margin-block-start: calc(var(--searchbar-margin-block-start) + var(--spinner-margin));
right: var(--spinner-margin);
top: 0;
bottom: var(--spinner-margin);
padding: 6px;
background-color: var(--bg);
}
#fa-spin {
animation: rotating 2s linear infinite;
display: inline-block;
}
@keyframes rotating {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
#mdbook-searchbar {
width: 100%;
margin-block-start: var(--searchbar-margin-block-start);
margin-block-end: 0;
margin-inline-start: auto;
margin-inline-end: auto;
padding: 10px 16px;
transition: box-shadow 300ms ease-in-out;
border: 1px solid var(--searchbar-border-color);
border-radius: 3px;
background-color: var(--searchbar-bg);
color: var(--searchbar-fg);
}
#mdbook-searchbar:focus,
#mdbook-searchbar.active {
box-shadow: 0 0 3px var(--searchbar-shadow-color);
}
.searchresults-header {
font-weight: bold;
font-size: 1em;
padding-block-start: 18px;
padding-block-end: 0;
padding-inline-start: 5px;
padding-inline-end: 0;
color: var(--searchresults-header-fg);
}
.searchresults-outer {
margin-inline-start: auto;
margin-inline-end: auto;
max-width: var(--content-max-width);
border-block-end: 1px dashed var(--searchresults-border-color);
}
ul#mdbook-searchresults {
list-style: none;
padding-inline-start: 20px;
}
ul#mdbook-searchresults li {
margin: 10px 0px;
padding: 2px;
border-radius: 2px;
}
ul#mdbook-searchresults li.focus {
background-color: var(--searchresults-li-bg);
}
ul#mdbook-searchresults span.teaser {
display: block;
clear: both;
margin-block-start: 5px;
margin-block-end: 0;
margin-inline-start: 20px;
margin-inline-end: 0;
font-size: 0.8em;
}
ul#mdbook-searchresults span.teaser em {
font-weight: bold;
font-style: normal;
}
/* Sidebar */
.sidebar {
position: fixed;
left: 0;
top: 0;
bottom: 0;
width: var(--sidebar-width);
font-size: 0.875em;
box-sizing: border-box;
-webkit-overflow-scrolling: touch;
overscroll-behavior-y: contain;
background-color: var(--sidebar-bg);
color: var(--sidebar-fg);
}
.sidebar-iframe-inner {
--padding: 10px;
background-color: var(--sidebar-bg);
padding: var(--padding);
margin: 0;
font-size: 1.4rem;
color: var(--sidebar-fg);
min-height: calc(100vh - var(--padding) * 2);
}
.sidebar-iframe-outer {
border: none;
height: 100%;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
[dir=rtl] .sidebar { left: unset; right: 0; }
.sidebar-resizing {
-moz-user-select: none;
-webkit-user-select: none;
-ms-user-select: none;
user-select: none;
}
html:not(.sidebar-resizing) .sidebar {
transition: transform 0.3s; /* Animation: slide away */
}
.sidebar code {
line-height: 2em;
}
.sidebar .sidebar-scrollbox {
overflow-y: auto;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
padding: 10px 10px;
}
.sidebar .sidebar-resize-handle {
position: absolute;
cursor: col-resize;
width: 0;
right: calc(var(--sidebar-resize-indicator-width) * -1);
top: 0;
bottom: 0;
display: flex;
align-items: center;
}
.sidebar-resize-handle .sidebar-resize-indicator {
width: 100%;
height: 16px;
color: var(--icons);
margin-inline-start: var(--sidebar-resize-indicator-space);
display: flex;
align-items: center;
justify-content: flex-start;
}
.sidebar-resize-handle .sidebar-resize-indicator::before {
content: "";
width: 2px;
height: 12px;
border-left: dotted 2px currentColor;
}
.sidebar-resize-handle .sidebar-resize-indicator::after {
content: "";
width: 2px;
height: 16px;
border-left: dotted 2px currentColor;
}
[dir=rtl] .sidebar .sidebar-resize-handle {
left: calc(var(--sidebar-resize-indicator-width) * -1);
right: unset;
}
.js .sidebar .sidebar-resize-handle {
cursor: col-resize;
width: calc(var(--sidebar-resize-indicator-width) - var(--sidebar-resize-indicator-space));
}
html:not(.js) .sidebar-resize-handle {
display: none;
}
/* sidebar-hidden */
#mdbook-sidebar-toggle-anchor:not(:checked) ~ .sidebar {
transform: translateX(calc(0px - var(--sidebar-width) - var(--sidebar-resize-indicator-width)));
}
[dir=rtl] #mdbook-sidebar-toggle-anchor:not(:checked) ~ .sidebar {
transform: translateX(calc(var(--sidebar-width) + var(--sidebar-resize-indicator-width)));
}
.sidebar::-webkit-scrollbar {
background: var(--sidebar-bg);
}
.sidebar::-webkit-scrollbar-thumb {
background: var(--scrollbar);
}
/* sidebar-visible */
#mdbook-sidebar-toggle-anchor:checked ~ .page-wrapper {
transform: translateX(calc(var(--sidebar-width) + var(--sidebar-resize-indicator-width)));
}
[dir=rtl] #mdbook-sidebar-toggle-anchor:checked ~ .page-wrapper {
transform: translateX(calc(0px - var(--sidebar-width) - var(--sidebar-resize-indicator-width)));
}
@media only screen and (min-width: 620px) {
#mdbook-sidebar-toggle-anchor:checked ~ .page-wrapper {
transform: none;
margin-inline-start: calc(var(--sidebar-width) + var(--sidebar-resize-indicator-width));
}
[dir=rtl] #mdbook-sidebar-toggle-anchor:checked ~ .page-wrapper {
transform: none;
}
}
.chapter {
list-style: none outside none;
padding-inline-start: 0;
line-height: 2.2em;
}
.chapter li {
color: var(--sidebar-non-existant);
}
/* This is a span wrapping the chapter link and the fold chevron. */
.chapter-link-wrapper {
/* Used to position the chevron to the right, allowing the text to wrap before it. */
display: flex;
}
.chapter li a {
/* Remove underlines. */
text-decoration: none;
color: var(--sidebar-fg);
}
.chapter li a:hover {
color: var(--sidebar-active);
}
.chapter li a.active {
color: var(--sidebar-active);
}
/* This is the toggle chevron. */
.chapter-fold-toggle {
cursor: pointer;
/* Positions the chevron to the side. */
margin-inline-start: auto;
padding: 0 10px;
user-select: none;
opacity: 0.68;
}
.chapter-fold-toggle div {
transition: transform 0.5s;
}
/* collapse the section */
.chapter li:not(.expanded) > ol {
display: none;
}
.chapter li.chapter-item {
line-height: 1.5em;
margin-block-start: 0.6em;
}
/* When expanded, rotate the chevron to point down. */
.chapter li.expanded > span > .chapter-fold-toggle div {
transform: rotate(90deg);
}
.chapter a.current-header {
color: var(--sidebar-active);
}
.on-this-page {
margin-left: 22px;
border-inline-start: 4px solid var(--sidebar-header-border-color);
padding-left: 8px;
}
.on-this-page > ol {
padding-left: 0;
}
/* Horizontal line in chapter list. */
.spacer {
width: 100%;
height: 3px;
margin: 5px 0px;
}
.chapter .spacer {
background-color: var(--sidebar-spacer);
}
/* On touch devices, add more vertical spacing to make it easier to tap links. */
@media (-moz-touch-enabled: 1), (pointer: coarse) {
.chapter li a { padding: 5px 0; }
.spacer { margin: 10px 0; }
}
.section {
list-style: none outside none;
padding-inline-start: 20px;
line-height: 1.9em;
}
/* Theme Menu Popup */
.theme-popup {
position: absolute;
left: 10px;
top: var(--menu-bar-height);
z-index: 1000;
border-radius: 4px;
font-size: 0.7em;
color: var(--fg);
background: var(--theme-popup-bg);
border: 1px solid var(--theme-popup-border);
margin: 0;
padding: 0;
list-style: none;
display: none;
/* Don't let the children's background extend past the rounded corners. */
overflow: hidden;
}
[dir=rtl] .theme-popup { left: unset; right: 10px; }
.theme-popup .default {
color: var(--icons);
}
.theme-popup .theme {
width: 100%;
border: 0;
margin: 0;
padding: 2px 20px;
line-height: 25px;
white-space: nowrap;
text-align: start;
cursor: pointer;
color: inherit;
background: inherit;
font-size: inherit;
}
.theme-popup .theme:hover {
background-color: var(--theme-hover);
}
.theme-selected::before {
display: inline-block;
content: "✓";
margin-inline-start: -14px;
width: 14px;
}
/* The container for the help popup that covers the whole window. */
#mdbook-help-container {
/* Position and size for the whole window. */
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
/* This uses flex layout (which is set in book.js), and centers the popup
in the window.*/
display: none;
align-items: center;
justify-content: center;
z-index: 1000;
/* Dim out the book while the popup is visible. */
background: var(--overlay-bg);
}
/* The popup help box. */
#mdbook-help-popup {
box-shadow: 0 4px 24px rgba(0,0,0,0.15);
min-width: 300px;
max-width: 500px;
width: 100%;
box-sizing: border-box;
display: flex;
flex-direction: column;
align-items: center;
background-color: var(--bg);
color: var(--fg);
border-width: 1px;
border-color: var(--theme-popup-border);
border-style: solid;
border-radius: 8px;
padding: 10px;
}
.mdbook-help-title {
text-align: center;
/* mdbook's margin for h2 is way too large. */
margin: 10px;
}

View File

@@ -0,0 +1,408 @@
/* Base styles and content styles */
:root {
/* Browser default font-size is 16px, this way 1 rem = 10px */
font-size: 62.5%;
color-scheme: var(--color-scheme);
}
html {
font-family: "Open Sans", sans-serif;
color: var(--fg);
background-color: var(--bg);
text-size-adjust: none;
-webkit-text-size-adjust: none;
}
body {
margin: 0;
font-size: 1.6rem;
overflow-x: hidden;
}
code {
font-family: var(--mono-font) !important;
font-size: var(--code-font-size);
direction: ltr !important;
}
/* make long words/inline code not x overflow */
main {
overflow-wrap: break-word;
}
/* make wide tables scroll if they overflow */
.table-wrapper {
overflow-x: auto;
}
/* Don't change font size in headers. */
h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
font-size: unset;
}
.left { float: left; }
.right { float: right; }
.boring { opacity: 0.6; }
.hide-boring .boring { display: none; }
.hidden { display: none !important; }
h2, h3 { margin-block-start: 2.5em; }
h4, h5 { margin-block-start: 2em; }
.header + .header h3,
.header + .header h4,
.header + .header h5 {
margin-block-start: 1em;
}
h1:target::before,
h2:target::before,
h3:target::before,
h4:target::before,
h5:target::before,
h6:target::before,
dt:target::before {
display: inline-block;
content: "»";
margin-inline-start: -30px;
width: 30px;
}
/* This is broken on Safari as of version 14, but is fixed
in Safari Technology Preview 117 which I think will be Safari 14.2.
https://bugs.webkit.org/show_bug.cgi?id=218076
*/
:target {
/* Safari does not support logical properties */
scroll-margin-top: calc(var(--menu-bar-height) + 0.5em);
}
.page {
outline: 0;
padding: 0 var(--page-padding);
margin-block-start: calc(0px - var(--menu-bar-height)); /* Compensate for the #mdbook-menu-bar-hover-placeholder */
}
.page-wrapper {
box-sizing: border-box;
background-color: var(--bg);
}
html:not(.js) .page-wrapper,
.js:not(.sidebar-resizing) .page-wrapper {
transition: margin-left 0.3s ease, transform 0.3s ease; /* Animation: slide away */
}
[dir=rtl]:not(.js) .page-wrapper,
[dir=rtl].js:not(.sidebar-resizing) .page-wrapper {
transition: margin-right 0.3s ease, transform 0.3s ease; /* Animation: slide away */
}
.content {
overflow-y: auto;
padding: 0 5px 50px 5px;
}
.content main {
margin-inline-start: auto;
margin-inline-end: auto;
max-width: var(--content-max-width);
}
.content p { line-height: 1.45em; }
.content ol { line-height: 1.45em; }
.content ul { line-height: 1.45em; }
.content a { text-decoration: none; }
.content a:hover { text-decoration: underline; }
.content img, .content video { max-width: 100%; }
.content .header:link,
.content .header:visited {
color: var(--fg);
}
.content .header:link,
.content .header:visited:hover {
text-decoration: none;
}
table {
margin: 0 auto;
border-collapse: collapse;
}
table td {
padding: 3px 20px;
border: 1px var(--table-border-color) solid;
}
table thead {
background: var(--table-header-bg);
}
table thead td {
font-weight: 700;
border: none;
}
table thead th {
padding: 3px 20px;
}
table thead tr {
border: 1px var(--table-header-bg) solid;
}
/* Alternate background colors for rows */
table tbody tr:nth-child(2n) {
background: var(--table-alternate-bg);
}
blockquote {
margin: 20px 0;
padding: 0 20px;
color: var(--fg);
background-color: var(--quote-bg);
border-block-start: .1em solid var(--quote-border);
border-block-end: .1em solid var(--quote-border);
}
/* TODO: Remove .warning in a future version of mdbook, it is replaced by
blockquote tags. */
.warning {
margin: 20px;
padding: 0 20px;
border-inline-start: 2px solid var(--warning-border);
}
.warning:before {
position: absolute;
width: 3rem;
height: 3rem;
margin-inline-start: calc(-1.5rem - 21px);
content: "ⓘ";
text-align: center;
background-color: var(--bg);
color: var(--warning-border);
font-weight: bold;
font-size: 2rem;
}
blockquote .warning:before {
background-color: var(--quote-bg);
}
kbd {
background-color: var(--table-border-color);
border-radius: 4px;
border: solid 1px var(--theme-popup-border);
box-shadow: inset 0 -1px 0 var(--theme-hover);
display: inline-block;
font-size: var(--code-font-size);
font-family: var(--mono-font);
line-height: 10px;
padding: 4px 5px;
vertical-align: middle;
}
sup {
/* Set the line-height for superscript and footnote references so that there
isn't an awkward space appearing above lines that contain the footnote.
See https://github.com/rust-lang/mdBook/pull/2443#discussion_r1813773583
for an explanation.
*/
line-height: 0;
}
.footnote-definition {
font-size: 0.9em;
}
/* The default spacing for a list is a little too large. */
.footnote-definition ul,
.footnote-definition ol {
padding-left: 20px;
}
.footnote-definition > li {
/* Required to position the ::before target */
position: relative;
}
.footnote-definition > li:target {
scroll-margin-top: 50vh;
}
.footnote-reference:target {
scroll-margin-top: 50vh;
}
/* Draws a border around the footnote (including the marker) when it is selected.
TODO: If there are multiple linkbacks, highlight which one you just came
from so you know which one to click.
*/
.footnote-definition > li:target::before {
border: 2px solid var(--footnote-highlight);
border-radius: 6px;
position: absolute;
top: -8px;
right: -8px;
bottom: -8px;
left: -32px;
pointer-events: none;
content: "";
}
/* Pulses the footnote reference so you can quickly see where you left off reading.
This could use some improvement.
*/
@media not (prefers-reduced-motion) {
.footnote-reference:target {
animation: fn-highlight 0.8s;
border-radius: 2px;
}
@keyframes fn-highlight {
from {
background-color: var(--footnote-highlight);
}
}
}
.tooltiptext {
position: absolute;
visibility: hidden;
color: #fff;
background-color: #333;
transform: translateX(-50%); /* Center by moving tooltip 50% of its width left */
left: -8px; /* Half of the width of the icon */
top: -35px;
font-size: 0.8em;
text-align: center;
border-radius: 6px;
padding: 5px 8px;
margin: 5px;
z-index: 1000;
}
.tooltipped .tooltiptext {
visibility: visible;
}
.chapter li.part-title {
color: var(--sidebar-fg);
margin: 5px 0px;
font-weight: bold;
}
.result-no-output {
font-style: italic;
}
.fa-svg svg {
width: 1em;
height: 1em;
fill: currentColor;
margin-bottom: -0.1em;
}
dt {
font-weight: bold;
margin-top: 0.5em;
margin-bottom: 0.1em;
}
/* This uses a CSS counter to add numbers to definitions, but only if there is
more than one definition. */
dl, dt {
counter-reset: dd-counter;
}
/* When there is more than one definition, increment the counter. The first
selector selects the first definition, and the second one selects definitions
2 and beyond.*/
dd:has(+ dd), dd + dd {
counter-increment: dd-counter;
/* Use flex display to help with positioning the numbers when there is a p
tag inside the definition. */
display: flex;
align-items: flex-start;
}
/* Shows the counter for definitions. The first selector selects the first
definition, and the second one selections definitions 2 and beyond.*/
dd:has(+ dd)::before, dd + dd::before {
content: counter(dd-counter) ". ";
font-weight: 600;
display: inline-block;
margin-right: 0.5em;
}
dd > p {
/* For loose definitions that have a p tag inside, don't add a bunch of
space before the definition. */
margin-top: 0;
}
/* Remove some excess space from the bottom. */
.blockquote-tag p:last-child {
margin-bottom: 2px;
}
.blockquote-tag {
/* Add some padding to make the vertical bar a little taller than the text.*/
padding: 2px 0px 2px 20px;
/* Add a solid color bar on the left side. */
border-inline-start-style: solid;
border-inline-start-width: 4px;
/* Disable the background color from normal blockquotes . */
background-color: inherit;
/* Disable border blocks from blockquotes. */
border-block-start: none;
border-block-end: none;
}
.blockquote-tag-title svg {
fill: currentColor;
/* Add space between the icon and the title. */
margin-right: 8px;
}
.blockquote-tag-note {
border-inline-start-color: var(--blockquote-note-color);
}
.blockquote-tag-tip {
border-inline-start-color: var(--blockquote-tip-color);
}
.blockquote-tag-important {
border-inline-start-color: var(--blockquote-important-color);
}
.blockquote-tag-warning {
border-inline-start-color: var(--blockquote-warning-color);
}
.blockquote-tag-caution {
border-inline-start-color: var(--blockquote-caution-color);
}
.blockquote-tag-note .blockquote-tag-title {
color: var(--blockquote-note-color);
}
.blockquote-tag-tip .blockquote-tag-title {
color: var(--blockquote-tip-color);
}
.blockquote-tag-important .blockquote-tag-title {
color: var(--blockquote-important-color);
}
.blockquote-tag-warning .blockquote-tag-title {
color: var(--blockquote-warning-color);
}
.blockquote-tag-caution .blockquote-tag-title {
color: var(--blockquote-caution-color);
}
.blockquote-tag-title {
/* Slightly increase the weight for more emphasis. */
font-weight: 600;
/* Vertically center the icon with the text. */
display: flex;
align-items: center;
/* Remove default large margins for a more compact display. */
margin: 2px 0 8px 0;
}
.blockquote-tag-title .fa-svg {
fill: currentColor;
/* Add some space between the icon and the text. */
margin-right: 8px;
}

View File

@@ -0,0 +1,50 @@
#mdbook-sidebar,
#mdbook-menu-bar,
.nav-chapters,
.mobile-nav-chapters {
display: none;
}
#mdbook-page-wrapper.page-wrapper {
transform: none !important;
margin-inline-start: 0px;
overflow-y: initial;
}
#mdbook-content {
max-width: none;
margin: 0;
padding: 0;
}
.page {
overflow-y: initial;
}
code {
direction: ltr !important;
}
pre > .buttons {
z-index: 2;
}
a, a:visited, a:active, a:hover {
color: #4183c4;
text-decoration: none;
}
h1, h2, h3, h4, h5, h6 {
page-break-inside: avoid;
page-break-after: avoid;
}
pre, code {
page-break-inside: avoid;
white-space: pre-wrap;
}
.fa {
display: none !important;
}

View File

@@ -0,0 +1,383 @@
/* Globals */
:root {
--sidebar-target-width: 300px;
--sidebar-width: min(var(--sidebar-target-width), 80vw);
--sidebar-resize-indicator-width: 8px;
--sidebar-resize-indicator-space: 2px;
--page-padding: 15px;
--content-max-width: 750px;
--menu-bar-height: 50px;
--mono-font: "Source Code Pro", Consolas, "Ubuntu Mono", Menlo, "DejaVu Sans Mono", monospace, monospace;
--code-font-size: 0.875em; /* please adjust the ace font size accordingly in editor.js */
--searchbar-margin-block-start: 5px;
}
/* Themes */
.ayu {
--bg: hsl(210, 25%, 8%);
--fg: #c5c5c5;
--sidebar-bg: #14191f;
--sidebar-fg: #c8c9db;
--sidebar-non-existant: #5c6773;
--sidebar-active: #ffb454;
--sidebar-spacer: #2d334f;
--scrollbar: var(--sidebar-fg);
--icons: #737480;
--icons-hover: #b7b9cc;
--links: #0096cf;
--inline-code-color: #ffb454;
--theme-popup-bg: #14191f;
--theme-popup-border: #5c6773;
--theme-hover: #191f26;
--quote-bg: hsl(226, 15%, 17%);
--quote-border: hsl(226, 15%, 22%);
--warning-border: #ff8e00;
--table-border-color: hsl(210, 25%, 13%);
--table-header-bg: hsl(210, 25%, 28%);
--table-alternate-bg: hsl(210, 25%, 11%);
--searchbar-border-color: #848484;
--searchbar-bg: #424242;
--searchbar-fg: #fff;
--searchbar-shadow-color: #d4c89f;
--searchresults-header-fg: #666;
--searchresults-border-color: #888;
--searchresults-li-bg: #252932;
--search-mark-bg: #e3b171;
--color-scheme: dark;
/* Same as `--icons` */
--copy-button-filter: invert(45%) sepia(6%) saturate(621%) hue-rotate(198deg) brightness(99%) contrast(85%);
/* Same as `--sidebar-active` */
--copy-button-filter-hover: invert(68%) sepia(55%) saturate(531%) hue-rotate(341deg) brightness(104%) contrast(101%);
--footnote-highlight: #2668a6;
--overlay-bg: rgba(33, 40, 48, 0.4);
--blockquote-note-color: #74b9ff;
--blockquote-tip-color: #09ca09;
--blockquote-important-color: #d3abff;
--blockquote-warning-color: #f0b72f;
--blockquote-caution-color: #f21424;
--sidebar-header-border-color: #c18639;
}
.coal {
--bg: hsl(200, 7%, 8%);
--fg: #98a3ad;
--sidebar-bg: #292c2f;
--sidebar-fg: #a1adb8;
--sidebar-non-existant: #505254;
--sidebar-active: #3473ad;
--sidebar-spacer: #393939;
--scrollbar: var(--sidebar-fg);
--icons: #43484d;
--icons-hover: #b3c0cc;
--links: #2b79a2;
--inline-code-color: #c5c8c6;
--theme-popup-bg: #141617;
--theme-popup-border: #43484d;
--theme-hover: #1f2124;
--quote-bg: hsl(234, 21%, 18%);
--quote-border: hsl(234, 21%, 23%);
--warning-border: #ff8e00;
--table-border-color: hsl(200, 7%, 13%);
--table-header-bg: hsl(200, 7%, 28%);
--table-alternate-bg: hsl(200, 7%, 11%);
--searchbar-border-color: #aaa;
--searchbar-bg: #b7b7b7;
--searchbar-fg: #000;
--searchbar-shadow-color: #aaa;
--searchresults-header-fg: #666;
--searchresults-border-color: #98a3ad;
--searchresults-li-bg: #2b2b2f;
--search-mark-bg: #355c7d;
--color-scheme: dark;
/* Same as `--icons` */
--copy-button-filter: invert(26%) sepia(8%) saturate(575%) hue-rotate(169deg) brightness(87%) contrast(82%);
/* Same as `--sidebar-active` */
--copy-button-filter-hover: invert(36%) sepia(70%) saturate(503%) hue-rotate(167deg) brightness(98%) contrast(89%);
--footnote-highlight: #4079ae;
--overlay-bg: rgba(33, 40, 48, 0.4);
--blockquote-note-color: #4493f8;
--blockquote-tip-color: #08ae08;
--blockquote-important-color: #ab7df8;
--blockquote-warning-color: #d29922;
--blockquote-caution-color: #d91b29;
--sidebar-header-border-color: #3473ad;
}
.light, html:not(.js) {
--bg: hsl(0, 0%, 100%);
--fg: hsl(0, 0%, 0%);
--sidebar-bg: #fafafa;
--sidebar-fg: hsl(0, 0%, 0%);
--sidebar-non-existant: #aaaaaa;
--sidebar-active: #1f1fff;
--sidebar-spacer: #f4f4f4;
--scrollbar: #8F8F8F;
--icons: #747474;
--icons-hover: #000000;
--links: #20609f;
--inline-code-color: #301900;
--theme-popup-bg: #fafafa;
--theme-popup-border: #cccccc;
--theme-hover: #e6e6e6;
--quote-bg: hsl(197, 37%, 96%);
--quote-border: hsl(197, 37%, 91%);
--warning-border: #ff8e00;
--table-border-color: hsl(0, 0%, 95%);
--table-header-bg: hsl(0, 0%, 80%);
--table-alternate-bg: hsl(0, 0%, 97%);
--searchbar-border-color: #aaa;
--searchbar-bg: #fafafa;
--searchbar-fg: #000;
--searchbar-shadow-color: #aaa;
--searchresults-header-fg: #666;
--searchresults-border-color: #888;
--searchresults-li-bg: #e4f2fe;
--search-mark-bg: #a2cff5;
--color-scheme: light;
/* Same as `--icons` */
--copy-button-filter: invert(45.49%);
/* Same as `--sidebar-active` */
--copy-button-filter-hover: invert(14%) sepia(93%) saturate(4250%) hue-rotate(243deg) brightness(99%) contrast(130%);
--footnote-highlight: #7e7eff;
--overlay-bg: rgba(200, 200, 205, 0.4);
--blockquote-note-color: #0969da;
--blockquote-tip-color: #008000;
--blockquote-important-color: #8250df;
--blockquote-warning-color: #9a6700;
--blockquote-caution-color: #b52731;
--sidebar-header-border-color: #6e6edb;
}
.navy {
--bg: hsl(226, 23%, 11%);
--fg: #bcbdd0;
--sidebar-bg: #282d3f;
--sidebar-fg: #c8c9db;
--sidebar-non-existant: #505274;
--sidebar-active: #2b79a2;
--sidebar-spacer: #2d334f;
--scrollbar: var(--sidebar-fg);
--icons: #737480;
--icons-hover: #b7b9cc;
--links: #2b79a2;
--inline-code-color: #c5c8c6;
--theme-popup-bg: #161923;
--theme-popup-border: #737480;
--theme-hover: #282e40;
--quote-bg: hsl(226, 15%, 17%);
--quote-border: hsl(226, 15%, 22%);
--warning-border: #ff8e00;
--table-border-color: hsl(226, 23%, 16%);
--table-header-bg: hsl(226, 23%, 31%);
--table-alternate-bg: hsl(226, 23%, 14%);
--searchbar-border-color: #aaa;
--searchbar-bg: #aeaec6;
--searchbar-fg: #000;
--searchbar-shadow-color: #aaa;
--searchresults-header-fg: #5f5f71;
--searchresults-border-color: #5c5c68;
--searchresults-li-bg: #242430;
--search-mark-bg: #a2cff5;
--color-scheme: dark;
/* Same as `--icons` */
--copy-button-filter: invert(51%) sepia(10%) saturate(393%) hue-rotate(198deg) brightness(86%) contrast(87%);
/* Same as `--sidebar-active` */
--copy-button-filter-hover: invert(46%) sepia(20%) saturate(1537%) hue-rotate(156deg) brightness(85%) contrast(90%);
--footnote-highlight: #4079ae;
--overlay-bg: rgba(33, 40, 48, 0.4);
--blockquote-note-color: #4493f8;
--blockquote-tip-color: #09ca09;
--blockquote-important-color: #ab7df8;
--blockquote-warning-color: #d29922;
--blockquote-caution-color: #f21424;
--sidebar-header-border-color: #2f6ab5;
}
.rust {
--bg: hsl(60, 9%, 87%);
--fg: #262625;
--sidebar-bg: #3b2e2a;
--sidebar-fg: #c8c9db;
--sidebar-non-existant: #505254;
--sidebar-active: #e69f67;
--sidebar-spacer: #45373a;
--scrollbar: var(--sidebar-fg);
--icons: #737480;
--icons-hover: #262625;
--links: #2b79a2;
--inline-code-color: #6e6b5e;
--theme-popup-bg: #e1e1db;
--theme-popup-border: #b38f6b;
--theme-hover: #99908a;
--quote-bg: hsl(60, 5%, 75%);
--quote-border: hsl(60, 5%, 70%);
--warning-border: #ff8e00;
--table-border-color: hsl(60, 9%, 82%);
--table-header-bg: #b3a497;
--table-alternate-bg: hsl(60, 9%, 84%);
--searchbar-border-color: #aaa;
--searchbar-bg: #fafafa;
--searchbar-fg: #000;
--searchbar-shadow-color: #aaa;
--searchresults-header-fg: #666;
--searchresults-border-color: #888;
--searchresults-li-bg: #dec2a2;
--search-mark-bg: #e69f67;
/* Same as `--icons` */
--copy-button-filter: invert(51%) sepia(10%) saturate(393%) hue-rotate(198deg) brightness(86%) contrast(87%);
/* Same as `--sidebar-active` */
--copy-button-filter-hover: invert(77%) sepia(16%) saturate(1798%) hue-rotate(328deg) brightness(98%) contrast(83%);
--footnote-highlight: #d3a17a;
--overlay-bg: rgba(150, 150, 150, 0.25);
--blockquote-note-color: #023b95;
--blockquote-tip-color: #007700;
--blockquote-important-color: #8250df;
--blockquote-warning-color: #603700;
--blockquote-caution-color: #aa1721;
--sidebar-header-border-color: #8c391f;
}
@media (prefers-color-scheme: dark) {
html:not(.js) {
--bg: hsl(200, 7%, 8%);
--fg: #98a3ad;
--sidebar-bg: #292c2f;
--sidebar-fg: #a1adb8;
--sidebar-non-existant: #505254;
--sidebar-active: #3473ad;
--sidebar-spacer: #393939;
--scrollbar: var(--sidebar-fg);
--icons: #43484d;
--icons-hover: #b3c0cc;
--links: #2b79a2;
--inline-code-color: #c5c8c6;
--theme-popup-bg: #141617;
--theme-popup-border: #43484d;
--theme-hover: #1f2124;
--quote-bg: hsl(234, 21%, 18%);
--quote-border: hsl(234, 21%, 23%);
--warning-border: #ff8e00;
--table-border-color: hsl(200, 7%, 13%);
--table-header-bg: hsl(200, 7%, 28%);
--table-alternate-bg: hsl(200, 7%, 11%);
--searchbar-border-color: #aaa;
--searchbar-bg: #b7b7b7;
--searchbar-fg: #000;
--searchbar-shadow-color: #aaa;
--searchresults-header-fg: #666;
--searchresults-border-color: #98a3ad;
--searchresults-li-bg: #2b2b2f;
--search-mark-bg: #355c7d;
--color-scheme: dark;
/* Same as `--icons` */
--copy-button-filter: invert(26%) sepia(8%) saturate(575%) hue-rotate(169deg) brightness(87%) contrast(82%);
/* Same as `--sidebar-active` */
--copy-button-filter-hover: invert(36%) sepia(70%) saturate(503%) hue-rotate(167deg) brightness(98%) contrast(89%);
--footnote-highlight: #4079ae;
--overlay-bg: rgba(33, 40, 48, 0.4);
--blockquote-note-color: #4493f8;
--blockquote-tip-color: #08ae08;
--blockquote-important-color: #ab7df8;
--blockquote-warning-color: #d29922;
--blockquote-caution-color: #d91b29;
--sidebar-header-border-color: #3473ad;
}
}

View File

@@ -0,0 +1,312 @@
<!DOCTYPE HTML>
<html lang="en" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Common Pitfalls - Puzzle Design Knowledge Base</title>
<!-- Custom HTML head -->
<meta name="description" content="A taxonomy of puzzle design patterns from classic point-and-click adventure games">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon-de23e50b.svg">
<link rel="shortcut icon" href="../favicon-8114d1fc.png">
<link rel="stylesheet" href="../css/variables-8adf115d.css">
<link rel="stylesheet" href="../css/general-2459343d.css">
<link rel="stylesheet" href="../css/chrome-ae938929.css">
<link rel="stylesheet" href="../css/print-9e4910d8.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../fonts/fonts-9644e21d.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css">
<link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css">
<link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
window.path_to_searchindex_js = "../searchindex-c567150f.js";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc-35c178c7.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="mdbook-body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
sidebar_toggle.checked = false;
}
if (sidebar === 'visible') {
sidebar_toggle.checked = true;
} else {
html.classList.remove('sidebar-visible');
}
</script>
<nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="mdbook-page-wrapper" class="page-wrapper">
<div class="page">
<div id="mdbook-menu-bar-hover-placeholder"></div>
<div id="mdbook-menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
</label>
<button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
</button>
<ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
</ul>
<button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
</button>
</div>
<h1 class="menu-title">Puzzle Design Knowledge Base</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb" title="Git repository" aria-label="Git repository">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb/edit/main/src/docs/common-pitfalls.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
<span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
</a>
</div>
</div>
<div id="mdbook-search-wrapper" class="hidden">
<form id="mdbook-searchbar-outer" class="searchbar-outer">
<div class="search-wrapper">
<input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
<div class="spinner-wrapper">
<span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
</div>
</div>
</form>
<div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
<div id="mdbook-searchresults-header" class="searchresults-header"></div>
<ul id="mdbook-searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="mdbook-content" class="content">
<main>
<h1 id="common-pitfalls"><a class="header" href="#common-pitfalls">Common Pitfalls</a></h1>
<h2 id="pattern-learning-vs-observation-replay"><a class="header" href="#pattern-learning-vs-observation-replay">Pattern Learning vs Observation Replay</a></h2>
<p><strong>Pattern Learning</strong>: Teaches a <em>system</em> with reusable rules that can be applied to novel situations.</p>
<ul>
<li>Example: Learn bell sequence rules, then compose original melodies</li>
</ul>
<p><strong>Observation Replay</strong>: Memorizes a <em>sequence</em> to reproduce verbatim when opportunity arises.</p>
<ul>
<li>Example: Watch guard patrol pattern, then follow exact same timing/path</li>
</ul>
<h2 id="multi-faceted-plan-vs-meta-construction"><a class="header" href="#multi-faceted-plan-vs-meta-construction">Multi-Faceted Plan vs Meta-Construction</a></h2>
<p><strong>Multi-Faceted Plan</strong>: Multiple requirements gathered in any order across independent sources, synthesized at the end.</p>
<ul>
<li>All three key fragments can be found in any order</li>
<li>Final combination happens once all pieces collected</li>
</ul>
<p><strong>Meta-Construction</strong>: Sequential chain where step Ns output enables step N+1.</p>
<ul>
<li>Cannot proceed to step 2 without completing step 1</li>
<li>Each repair enables next system functionality</li>
</ul>
<h2 id="brokerage-vs-sensory-exploitation"><a class="header" href="#brokerage-vs-sensory-exploitation">Brokerage vs Sensory Exploitation</a></h2>
<p><strong>Brokerage</strong>: Trade network requiring intermediate steps (item for item, information for action).</p>
<ul>
<li>“Ill give you the map if you fetch me the artifact”</li>
<li>Maps to explicit exchange mechanics</li>
</ul>
<p><strong>Sensory Exploitation</strong>: Exploit NPC perception weakness directly.</p>
<ul>
<li>Distract sleeping guard with noise elsewhere</li>
<li>No negotiation or trade involved</li>
</ul>
<h2 id="timed-consequence-pitfall"><a class="header" href="#timed-consequence-pitfall">Timed Consequence Pitfall</a></h2>
<p>The term “timed” refers to <em>narrative</em> urgency, not mechanical countdown:</p>
<ul>
<li><strong>NOT</strong>: 5-minute timer visible on screen</li>
<li><strong>IS</strong>: If you dont stop ritual before cutscene ends, permanent story change occurs</li>
</ul>
<h2 id="class-specific-vs-multi-faction"><a class="header" href="#class-specific-vs-multi-faction">Class-Specific vs Multi-Faction</a></h2>
<p><strong>Class-Specific Ritual Challenge</strong>: Same obstacle, mechanically distinct implementations based on player character class.</p>
<ul>
<li>Knight uses combat; Monk uses meditation; both achieve same narrative goal</li>
</ul>
<p><strong>Multi-Faction Diplomacy Puzzle</strong>: Multiple independent factions must all be satisfied before unified conflict resolution.</p>
<ul>
<li>Cannot bypass any faction</li>
<li>Each has separate requirements chain</li>
</ul>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../docs/style-formatting.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../docs/validation-checklist.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../docs/style-formatting.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../docs/validation-checklist.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
</nav>
</div>
<template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
<template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
<template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
<template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
<template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_line_numbers = true;
</script>
<script>
window.playground_copyable = true;
</script>
<script src="../ace-2a3cd908.js"></script>
<script src="../mode-rust-2c9d5c9a.js"></script>
<script src="../editor-16ca416c.js"></script>
<script src="../theme-dawn-4493f9c8.js"></script>
<script src="../theme-tomorrow_night-9dbe62a9.js"></script>
<script src="../elasticlunr-ef4e11c1.min.js"></script>
<script src="../mark-09e88c2c.min.js"></script>
<script src="../searcher-c2a407aa.js"></script>
<script src="../clipboard-1626706a.min.js"></script>
<script src="../highlight-abc7f01d.js"></script>
<script src="../book-a0b12cfe.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

View File

@@ -0,0 +1,314 @@
<!DOCTYPE HTML>
<html lang="en" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Style &amp; Formatting - Puzzle Design Knowledge Base</title>
<!-- Custom HTML head -->
<meta name="description" content="A taxonomy of puzzle design patterns from classic point-and-click adventure games">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon-de23e50b.svg">
<link rel="shortcut icon" href="../favicon-8114d1fc.png">
<link rel="stylesheet" href="../css/variables-8adf115d.css">
<link rel="stylesheet" href="../css/general-2459343d.css">
<link rel="stylesheet" href="../css/chrome-ae938929.css">
<link rel="stylesheet" href="../css/print-9e4910d8.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../fonts/fonts-9644e21d.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css">
<link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css">
<link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
window.path_to_searchindex_js = "../searchindex-c567150f.js";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc-35c178c7.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="mdbook-body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
sidebar_toggle.checked = false;
}
if (sidebar === 'visible') {
sidebar_toggle.checked = true;
} else {
html.classList.remove('sidebar-visible');
}
</script>
<nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="mdbook-page-wrapper" class="page-wrapper">
<div class="page">
<div id="mdbook-menu-bar-hover-placeholder"></div>
<div id="mdbook-menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
</label>
<button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
</button>
<ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
</ul>
<button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
</button>
</div>
<h1 class="menu-title">Puzzle Design Knowledge Base</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb" title="Git repository" aria-label="Git repository">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb/edit/main/src/docs/style-formatting.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
<span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
</a>
</div>
</div>
<div id="mdbook-search-wrapper" class="hidden">
<form id="mdbook-searchbar-outer" class="searchbar-outer">
<div class="search-wrapper">
<input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
<div class="spinner-wrapper">
<span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
</div>
</div>
</form>
<div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
<div id="mdbook-searchresults-header" class="searchresults-header"></div>
<ul id="mdbook-searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="mdbook-content" class="content">
<main>
<h1 id="style--formatting-guidelines"><a class="header" href="#style--formatting-guidelines">Style &amp; Formatting Guidelines</a></h1>
<h2 id="frontmatter"><a class="header" href="#frontmatter">Frontmatter</a></h2>
<p>No YAML headers required (unlike Jekyll/Hugo sites).</p>
<h2 id="link-format"><a class="header" href="#link-format">Link Format</a></h2>
<p>Use relative links: <code>./puzzles/file.md</code> or just <code>[./file-name.md](./file-name.md)</code></p>
<h2 id="headings-structure"><a class="header" href="#headings-structure">Headings Structure</a></h2>
<ul>
<li><code># Type Name</code> — Document title (one per file)</li>
<li><code>## Game Examples</code> — Section for concrete instances</li>
<li><code>### [Game]: [Puzzle Name]</code> — Individual example</li>
<li><code>## Related Types</code> — Cross-references section</li>
</ul>
<h2 id="tables"><a class="header" href="#tables">Tables</a></h2>
<p>Use for:</p>
<ul>
<li>Comparisons between puzzle types</li>
<li>Requirement summaries</li>
<li>Quick-reference matrices</li>
</ul>
<pre><code class="language-markdown">| Type | Similarity | Distinction |
|------|------------|-------------|
| Multi-Faceted Plan | Both gather across sources | MFP = different categories, not unified system |
</code></pre>
<h2 id="lists"><a class="header" href="#lists">Lists</a></h2>
<ul>
<li><strong>Numbered lists</strong> for sequential steps or solution chains</li>
<li><strong>Bullet lists</strong> for enumerations without order</li>
</ul>
<h2 id="emphasis"><a class="header" href="#emphasis">Emphasis</a></h2>
<p>Use bold (<code>**text**</code>) for:</p>
<ul>
<li>Field labels: <strong>Setup</strong>, <strong>Solution Chain</strong>, <strong>Why Its This Type</strong></li>
<li>Key terms (sparingly)</li>
</ul>
<h2 id="code-blocks"><a class="header" href="#code-blocks">Code Blocks</a></h2>
<p>Use triple-backticks with <code>markdown</code> for example structures showing game flows:</p>
<pre><code class="language-markdown">```markdown
1. Examine object A → discover property X
2. Talk to NPC B → learn about need Y
3. Combine A with Z → solution unlocks
```
</code></pre>
<h2 id="tone"><a class="header" href="#tone">Tone</a></h2>
<ul>
<li><strong>Mechanical and precise</strong> — avoid vague terms like “clever,” “creative”</li>
<li>Describe <strong>how</strong> not just <strong>that</strong></li>
<li>Example: Instead of “The player cleverly uses the mirror,” write “The player examines the mirror, notes its reflective surface matches the telescope requirement discovered earlier”</li>
</ul>
<h2 id="file-naming"><a class="header" href="#file-naming">File Naming</a></h2>
<p>Use kebab-case: <code>multi-faceted-plan.md</code>, <code>pattern-learning.md</code>, <code>cross-temporal-causality.md</code></p>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../puzzles/surreal-logic-bridge.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../docs/common-pitfalls.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../puzzles/surreal-logic-bridge.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../docs/common-pitfalls.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
</nav>
</div>
<template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
<template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
<template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
<template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
<template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_line_numbers = true;
</script>
<script>
window.playground_copyable = true;
</script>
<script src="../ace-2a3cd908.js"></script>
<script src="../mode-rust-2c9d5c9a.js"></script>
<script src="../editor-16ca416c.js"></script>
<script src="../theme-dawn-4493f9c8.js"></script>
<script src="../theme-tomorrow_night-9dbe62a9.js"></script>
<script src="../elasticlunr-ef4e11c1.min.js"></script>
<script src="../mark-09e88c2c.min.js"></script>
<script src="../searcher-c2a407aa.js"></script>
<script src="../clipboard-1626706a.min.js"></script>
<script src="../highlight-abc7f01d.js"></script>
<script src="../book-a0b12cfe.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

View File

@@ -0,0 +1,297 @@
<!DOCTYPE HTML>
<html lang="en" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Validation Checklist - Puzzle Design Knowledge Base</title>
<!-- Custom HTML head -->
<meta name="description" content="A taxonomy of puzzle design patterns from classic point-and-click adventure games">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon-de23e50b.svg">
<link rel="shortcut icon" href="../favicon-8114d1fc.png">
<link rel="stylesheet" href="../css/variables-8adf115d.css">
<link rel="stylesheet" href="../css/general-2459343d.css">
<link rel="stylesheet" href="../css/chrome-ae938929.css">
<link rel="stylesheet" href="../css/print-9e4910d8.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../fonts/fonts-9644e21d.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css">
<link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css">
<link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
window.path_to_searchindex_js = "../searchindex-c567150f.js";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc-35c178c7.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="mdbook-body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
sidebar_toggle.checked = false;
}
if (sidebar === 'visible') {
sidebar_toggle.checked = true;
} else {
html.classList.remove('sidebar-visible');
}
</script>
<nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="mdbook-page-wrapper" class="page-wrapper">
<div class="page">
<div id="mdbook-menu-bar-hover-placeholder"></div>
<div id="mdbook-menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
</label>
<button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
</button>
<ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
</ul>
<button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
</button>
</div>
<h1 class="menu-title">Puzzle Design Knowledge Base</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb" title="Git repository" aria-label="Git repository">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb/edit/main/src/docs/validation-checklist.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
<span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
</a>
</div>
</div>
<div id="mdbook-search-wrapper" class="hidden">
<form id="mdbook-searchbar-outer" class="searchbar-outer">
<div class="search-wrapper">
<input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
<div class="spinner-wrapper">
<span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
</div>
</div>
</form>
<div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
<div id="mdbook-searchresults-header" class="searchresults-header"></div>
<ul id="mdbook-searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="mdbook-content" class="content">
<main>
<h1 id="validation-checklist"><a class="header" href="#validation-checklist">Validation Checklist</a></h1>
<p>When adding content, ensure all items below are satisfied:</p>
<h2 id="document-structure"><a class="header" href="#document-structure">Document Structure</a></h2>
<ul>
<li><input disabled="" type="checkbox"> Title uses proper <code>#</code> heading (document title)</li>
<li><input disabled="" type="checkbox"> <strong>Information Architecture</strong> field present and describes how player discovers puzzle</li>
<li><input disabled="" type="checkbox"> <strong>Player Action Pattern</strong> uses numbered list with concrete steps</li>
<li><input disabled="" type="checkbox"> <strong>Core Mechanic</strong> is exactly one sentence</li>
<li><input disabled="" type="checkbox"> <strong>Variations</strong> section lists possible manifestations</li>
</ul>
<h2 id="game-examples-section"><a class="header" href="#game-examples-section">Game Examples Section</a></h2>
<ul>
<li><input disabled="" type="checkbox"> Each example has <code>### [Game]: [Puzzle Name]</code> header</li>
<li><input disabled="" type="checkbox"> <strong>Setup</strong> provides brief context description</li>
<li><input disabled="" type="checkbox"> <strong>Solution Chain</strong> uses numbered list with specific actions (1-5 steps typical)</li>
<li><input disabled="" type="checkbox"> Actions describe discoveries, not generic “solve puzzle” language</li>
<li><input disabled="" type="checkbox"> <strong>Why Its This Type</strong> explicitly connects example to core mechanic above</li>
</ul>
<h2 id="cross-referencing"><a class="header" href="#cross-referencing">Cross-Referencing</a></h2>
<ul>
<li><input disabled="" type="checkbox"> <code>## Related Types</code> section included at end of document</li>
<li><input disabled="" type="checkbox"> At least 2 related types identified in table format</li>
<li><input disabled="" type="checkbox"> Similarity column explains what they share</li>
<li><input disabled="" type="checkbox"> Distinction column clarifies difference clearly</li>
</ul>
<h2 id="convention-compliance"><a class="header" href="#convention-compliance">Convention Compliance</a></h2>
<ul>
<li><input disabled="" type="checkbox"> Game source code used (MI1, MI2, KQVI) — not full game name</li>
<li><input disabled="" type="checkbox"> Filename matches kebab-case of document title</li>
<li><input disabled="" type="checkbox"> No vague adjectives (“clever,” “creative”) in descriptions</li>
<li><input disabled="" type="checkbox"> Tone is mechanical and precise throughout</li>
</ul>
<h2 id="before-submitting"><a class="header" href="#before-submitting">Before Submitting</a></h2>
<p>Run the following to verify markdown syntax (optional):</p>
<pre><code class="language-bash">npx -y remark-cli README.md puzzles/*.md docs/*.md
</code></pre>
<p>Check that all linked files exist:</p>
<pre><code class="language-bash">grep -o "\./[^)]*\.md" SUMMARY.md | xargs -I {} test -f {} &amp;&amp; echo "All links valid"
</code></pre>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../docs/common-pitfalls.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../docs/common-pitfalls.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
</nav>
</div>
<template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
<template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
<template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
<template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
<template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_line_numbers = true;
</script>
<script>
window.playground_copyable = true;
</script>
<script src="../ace-2a3cd908.js"></script>
<script src="../mode-rust-2c9d5c9a.js"></script>
<script src="../editor-16ca416c.js"></script>
<script src="../theme-dawn-4493f9c8.js"></script>
<script src="../theme-tomorrow_night-9dbe62a9.js"></script>
<script src="../elasticlunr-ef4e11c1.min.js"></script>
<script src="../mark-09e88c2c.min.js"></script>
<script src="../searcher-c2a407aa.js"></script>
<script src="../clipboard-1626706a.min.js"></script>
<script src="../highlight-abc7f01d.js"></script>
<script src="../book-a0b12cfe.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

View File

@@ -0,0 +1,309 @@
<!DOCTYPE HTML>
<html lang="en" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Documentation Structure - Puzzle Design Knowledge Base</title>
<!-- Custom HTML head -->
<meta name="description" content="A taxonomy of puzzle design patterns from classic point-and-click adventure games">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="favicon-de23e50b.svg">
<link rel="shortcut icon" href="favicon-8114d1fc.png">
<link rel="stylesheet" href="css/variables-8adf115d.css">
<link rel="stylesheet" href="css/general-2459343d.css">
<link rel="stylesheet" href="css/chrome-ae938929.css">
<link rel="stylesheet" href="css/print-9e4910d8.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="fonts/fonts-9644e21d.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="mdbook-highlight-css" href="highlight-493f70e1.css">
<link rel="stylesheet" id="mdbook-tomorrow-night-css" href="tomorrow-night-4c0ae647.css">
<link rel="stylesheet" id="mdbook-ayu-highlight-css" href="ayu-highlight-3fdfc3ac.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "";
const default_light_theme = "light";
const default_dark_theme = "navy";
window.path_to_searchindex_js = "searchindex-c567150f.js";
</script>
<!-- Start loading toc.js asap -->
<script src="toc-35c178c7.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="mdbook-body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
sidebar_toggle.checked = false;
}
if (sidebar === 'visible') {
sidebar_toggle.checked = true;
} else {
html.classList.remove('sidebar-visible');
}
</script>
<nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="toc.html"></iframe>
</noscript>
<div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="mdbook-page-wrapper" class="page-wrapper">
<div class="page">
<div id="mdbook-menu-bar-hover-placeholder"></div>
<div id="mdbook-menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
</label>
<button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
</button>
<ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
</ul>
<button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
</button>
</div>
<h1 class="menu-title">Puzzle Design Knowledge Base</h1>
<div class="right-buttons">
<a href="print.html" title="Print this book" aria-label="Print this book">
<span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb" title="Git repository" aria-label="Git repository">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb/edit/main/src/documentation-structure.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
<span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
</a>
</div>
</div>
<div id="mdbook-search-wrapper" class="hidden">
<form id="mdbook-searchbar-outer" class="searchbar-outer">
<div class="search-wrapper">
<input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
<div class="spinner-wrapper">
<span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
</div>
</div>
</form>
<div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
<div id="mdbook-searchresults-header" class="searchresults-header"></div>
<ul id="mdbook-searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="mdbook-content" class="content">
<main>
<h1 id="documentation-structure"><a class="header" href="#documentation-structure">Documentation Structure</a></h1>
<p>Each puzzle type document contains:</p>
<ul>
<li><strong>Information Architecture</strong>: How information is conveyed to the player</li>
<li><strong>Player Action Pattern</strong>: What the player does with that information</li>
<li><strong>Core Mechanic</strong>: The underlying puzzle logic</li>
<li><strong>Variations</strong>: Different ways this type can manifest</li>
<li><strong>Adventure Game Implementation</strong>: How limited actions (LOOK, TALK, USE, WALK) map to the puzzle</li>
<li><strong>Example Structure</strong>: Generic template showing how the puzzle works</li>
<li><strong>Game Examples</strong>: Concrete instances from walkthroughs</li>
<li><strong>Related Types</strong>: Cross-references to similar puzzle mechanics</li>
</ul>
<h2 id="template-format"><a class="header" href="#template-format">Template Format</a></h2>
<pre><code class="language-markdown"># [Type Name]
**Information Architecture**: How player discovers puzzle structure.
**Player Action Pattern**:
1. Step one
2. Step two
3. Solution
**Core Mechanic**: Single sentence explaining underlying logic.
**Variations**: Brief list of possible manifestations
---
## Game Examples
### [Game]: [Puzzle Name]
**Setup**: Brief context description.
**Solution Chain**:
1-5. Actions with discoveries...
**Why It's This Type**: Explicit connection to core mechanic above.
---
## Related Types
| Type | Similarity | Distinction |
</code></pre>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="core-principles.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="puzzles/multi-faceted-plan.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="core-principles.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="puzzles/multi-faceted-plan.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
</nav>
</div>
<template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
<template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
<template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
<template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
<template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_line_numbers = true;
</script>
<script>
window.playground_copyable = true;
</script>
<script src="ace-2a3cd908.js"></script>
<script src="mode-rust-2c9d5c9a.js"></script>
<script src="editor-16ca416c.js"></script>
<script src="theme-dawn-4493f9c8.js"></script>
<script src="theme-tomorrow_night-9dbe62a9.js"></script>
<script src="elasticlunr-ef4e11c1.min.js"></script>
<script src="mark-09e88c2c.min.js"></script>
<script src="searcher-c2a407aa.js"></script>
<script src="clipboard-1626706a.min.js"></script>
<script src="highlight-abc7f01d.js"></script>
<script src="book-a0b12cfe.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

29
book/editor-16ca416c.js Normal file
View File

@@ -0,0 +1,29 @@
"use strict";
window.editors = [];
(function(editors) {
if (typeof(ace) === 'undefined' || !ace) {
return;
}
Array.from(document.querySelectorAll('.editable')).forEach(function(editable) {
let display_line_numbers = window.playground_line_numbers || false;
let editor = ace.edit(editable);
editor.setOptions({
highlightActiveLine: false,
showPrintMargin: false,
showLineNumbers: display_line_numbers,
showGutter: display_line_numbers,
maxLines: Infinity,
fontSize: "0.875em" // please adjust the font size of the code in general.css
});
editor.$blockScrolling = Infinity;
editor.getSession().setMode("ace/mode/rust");
editor.originalCode = editor.getValue();
editors.push(editor);
});
})(window.editors);

10
book/elasticlunr-ef4e11c1.min.js vendored Normal file

File diff suppressed because one or more lines are too long

BIN
book/favicon-8114d1fc.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

22
book/favicon-de23e50b.svg Normal file
View File

@@ -0,0 +1,22 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 199.7 184.2">
<style>
@media (prefers-color-scheme: dark) {
svg { fill: white; }
}
</style>
<path d="M189.5,36.8c0.2,2.8,0,5.1-0.6,6.8L153,162c-0.6,2.1-2,3.7-4.2,5c-2.2,1.2-4.4,1.9-6.7,1.9H31.4c-9.6,0-15.3-2.8-17.3-8.4
c-0.8-2.2-0.8-3.9,0.1-5.2c0.9-1.2,2.4-1.8,4.6-1.8H123c7.4,0,12.6-1.4,15.4-4.1s5.7-8.9,8.6-18.4l32.9-108.6
c1.8-5.9,1-11.1-2.2-15.6S169.9,0,164,0H72.7c-1,0-3.1,0.4-6.1,1.1l0.1-0.4C64.5,0.2,62.6,0,61,0.1s-3,0.5-4.3,1.4
c-1.3,0.9-2.4,1.8-3.2,2.8S52,6.5,51.2,8.1c-0.8,1.6-1.4,3-1.9,4.3s-1.1,2.7-1.8,4.2c-0.7,1.5-1.3,2.7-2,3.7c-0.5,0.6-1.2,1.5-2,2.5
s-1.6,2-2.2,2.8s-0.9,1.5-1.1,2.2c-0.2,0.7-0.1,1.8,0.2,3.2c0.3,1.4,0.4,2.4,0.4,3.1c-0.3,3-1.4,6.9-3.3,11.6
c-1.9,4.7-3.6,8.1-5.1,10.1c-0.3,0.4-1.2,1.3-2.6,2.7c-1.4,1.4-2.3,2.6-2.6,3.7c-0.3,0.4-0.3,1.5-0.1,3.4c0.3,1.8,0.4,3.1,0.3,3.8
c-0.3,2.7-1.3,6.3-3,10.8c-1.7,4.5-3.4,8.2-5,11c-0.2,0.5-0.9,1.4-2,2.8c-1.1,1.4-1.8,2.5-2,3.4c-0.2,0.6-0.1,1.8,0.1,3.4
c0.2,1.6,0.2,2.8-0.1,3.6c-0.6,3-1.8,6.7-3.6,11c-1.8,4.3-3.6,7.9-5.4,11c-0.5,0.8-1.1,1.7-2,2.8c-0.8,1.1-1.5,2-2,2.8
s-0.8,1.6-1,2.5c-0.1,0.5,0,1.3,0.4,2.3c0.3,1.1,0.4,1.9,0.4,2.6c-0.1,1.1-0.2,2.6-0.5,4.4c-0.2,1.8-0.4,2.9-0.4,3.2
c-1.8,4.8-1.7,9.9,0.2,15.2c2.2,6.2,6.2,11.5,11.9,15.8c5.7,4.3,11.7,6.4,17.8,6.4h110.7c5.2,0,10.1-1.7,14.7-5.2s7.7-7.8,9.2-12.9
l33-108.6c1.8-5.8,1-10.9-2.2-15.5C194.9,39.7,192.6,38,189.5,36.8z M59.6,122.8L73.8,80c0,0,7,0,10.8,0s28.8-1.7,25.4,17.5
c-3.4,19.2-18.8,25.2-36.8,25.4S59.6,122.8,59.6,122.8z M78.6,116.8c4.7-0.1,18.9-2.9,22.1-17.1S89.2,86.3,89.2,86.3l-8.9,0
l-10.2,30.5C70.2,116.9,74,116.9,78.6,116.8z M75.3,68.7L89,26.2h9.8l0.8,34l23.6-34h9.9l-13.6,42.5h-7.1l12.5-35.4l-24.5,35.4h-6.8
l-0.8-35L82,68.7H75.3z"/>
</svg>
<!-- Original image Copyright Dave Gandy — CC BY 4.0 License -->

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -0,0 +1,202 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

View File

@@ -0,0 +1,93 @@
Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries.
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

View File

@@ -0,0 +1,100 @@
/* Open Sans is licensed under the Apache License, Version 2.0. See http://www.apache.org/licenses/LICENSE-2.0 */
/* Source Code Pro is under the Open Font License. See https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL */
/* open-sans-300 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 300;
src: local('Open Sans Light'), local('OpenSans-Light'),
url('../fonts/open-sans-v17-all-charsets-300-7736aa35.woff2') format('woff2');
}
/* open-sans-300italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
@font-face {
font-family: 'Open Sans';
font-style: italic;
font-weight: 300;
src: local('Open Sans Light Italic'), local('OpenSans-LightItalic'),
url('../fonts/open-sans-v17-all-charsets-300italic-2c7b95c0.woff2') format('woff2');
}
/* open-sans-regular - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 400;
src: local('Open Sans Regular'), local('OpenSans-Regular'),
url('../fonts/open-sans-v17-all-charsets-regular-2e3b1d34.woff2') format('woff2');
}
/* open-sans-italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
@font-face {
font-family: 'Open Sans';
font-style: italic;
font-weight: 400;
src: local('Open Sans Italic'), local('OpenSans-Italic'),
url('../fonts/open-sans-v17-all-charsets-italic-6c9463f7.woff2') format('woff2');
}
/* open-sans-600 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 600;
src: local('Open Sans SemiBold'), local('OpenSans-SemiBold'),
url('../fonts/open-sans-v17-all-charsets-600-486c6759.woff2') format('woff2');
}
/* open-sans-600italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
@font-face {
font-family: 'Open Sans';
font-style: italic;
font-weight: 600;
src: local('Open Sans SemiBold Italic'), local('OpenSans-SemiBoldItalic'),
url('../fonts/open-sans-v17-all-charsets-600italic-1a3e8659.woff2') format('woff2');
}
/* open-sans-700 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 700;
src: local('Open Sans Bold'), local('OpenSans-Bold'),
url('../fonts/open-sans-v17-all-charsets-700-c22fe8c7.woff2') format('woff2');
}
/* open-sans-700italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
@font-face {
font-family: 'Open Sans';
font-style: italic;
font-weight: 700;
src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'),
url('../fonts/open-sans-v17-all-charsets-700italic-238ae959.woff2') format('woff2');
}
/* open-sans-800 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 800;
src: local('Open Sans ExtraBold'), local('OpenSans-ExtraBold'),
url('../fonts/open-sans-v17-all-charsets-800-3d2c812a.woff2') format('woff2');
}
/* open-sans-800italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */
@font-face {
font-family: 'Open Sans';
font-style: italic;
font-weight: 800;
src: local('Open Sans ExtraBold Italic'), local('OpenSans-ExtraBoldItalic'),
url('../fonts/open-sans-v17-all-charsets-800italic-ba1521ec.woff2') format('woff2');
}
/* source-code-pro-500 - latin_vietnamese_latin-ext_greek_cyrillic-ext_cyrillic */
@font-face {
font-family: 'Source Code Pro';
font-style: normal;
font-weight: 500;
src: url('../fonts/source-code-pro-v11-all-charsets-500-2bdd9410.woff2') format('woff2');
}

View File

@@ -0,0 +1,83 @@
/*
* An increased contrast highlighting scheme loosely based on the
* "Base16 Atelier Dune Light" theme by Bram de Haan
* (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune)
* Original Base16 color scheme by Chris Kempson
* (https://github.com/chriskempson/base16)
*/
/* Comment */
.hljs-comment,
.hljs-quote {
color: #575757;
}
/* Red */
.hljs-variable,
.hljs-template-variable,
.hljs-attribute,
.hljs-attr,
.hljs-tag,
.hljs-name,
.hljs-regexp,
.hljs-link,
.hljs-name,
.hljs-selector-id,
.hljs-selector-class {
color: #d70025;
}
/* Orange */
.hljs-number,
.hljs-meta,
.hljs-built_in,
.hljs-builtin-name,
.hljs-literal,
.hljs-type,
.hljs-params {
color: #b21e00;
}
/* Green */
.hljs-string,
.hljs-symbol,
.hljs-bullet {
color: #008200;
}
/* Blue */
.hljs-title,
.hljs-section {
color: #0030f2;
}
/* Purple */
.hljs-keyword,
.hljs-selector-tag {
color: #9d00ec;
}
.hljs {
display: block;
overflow-x: auto;
background: #f6f7f6;
color: #000;
}
.hljs-emphasis {
font-style: italic;
}
.hljs-strong {
font-weight: bold;
}
.hljs-addition {
color: #22863a;
background-color: #f0fff4;
}
.hljs-deletion {
color: #b31d28;
background-color: #ffeef0;
}

File diff suppressed because one or more lines are too long

301
book/index.html Normal file
View File

@@ -0,0 +1,301 @@
<!DOCTYPE HTML>
<html lang="en" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Front Matter - Puzzle Design Knowledge Base</title>
<!-- Custom HTML head -->
<meta name="description" content="A taxonomy of puzzle design patterns from classic point-and-click adventure games">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="favicon-de23e50b.svg">
<link rel="shortcut icon" href="favicon-8114d1fc.png">
<link rel="stylesheet" href="css/variables-8adf115d.css">
<link rel="stylesheet" href="css/general-2459343d.css">
<link rel="stylesheet" href="css/chrome-ae938929.css">
<link rel="stylesheet" href="css/print-9e4910d8.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="fonts/fonts-9644e21d.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="mdbook-highlight-css" href="highlight-493f70e1.css">
<link rel="stylesheet" id="mdbook-tomorrow-night-css" href="tomorrow-night-4c0ae647.css">
<link rel="stylesheet" id="mdbook-ayu-highlight-css" href="ayu-highlight-3fdfc3ac.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "";
const default_light_theme = "light";
const default_dark_theme = "navy";
window.path_to_searchindex_js = "searchindex-c567150f.js";
</script>
<!-- Start loading toc.js asap -->
<script src="toc-35c178c7.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="mdbook-body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
sidebar_toggle.checked = false;
}
if (sidebar === 'visible') {
sidebar_toggle.checked = true;
} else {
html.classList.remove('sidebar-visible');
}
</script>
<nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="toc.html"></iframe>
</noscript>
<div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="mdbook-page-wrapper" class="page-wrapper">
<div class="page">
<div id="mdbook-menu-bar-hover-placeholder"></div>
<div id="mdbook-menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
</label>
<button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
</button>
<ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
</ul>
<button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
</button>
</div>
<h1 class="menu-title">Puzzle Design Knowledge Base</h1>
<div class="right-buttons">
<a href="print.html" title="Print this book" aria-label="Print this book">
<span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb" title="Git repository" aria-label="Git repository">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb/edit/main/src/puzzles-front-matter.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
<span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
</a>
</div>
</div>
<div id="mdbook-search-wrapper" class="hidden">
<form id="mdbook-searchbar-outer" class="searchbar-outer">
<div class="search-wrapper">
<input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
<div class="spinner-wrapper">
<span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
</div>
</div>
</form>
<div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
<div id="mdbook-searchresults-header" class="searchresults-header"></div>
<ul id="mdbook-searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="mdbook-content" class="content">
<main>
<h1 id="puzzle-design-knowledge-base"><a class="header" href="#puzzle-design-knowledge-base">Puzzle Design Knowledge Base</a></h1>
<p>A handbook documenting puzzle design patterns from classic point-and-click adventure games (Kings Quest VI, Monkey Island series, and beyond). This repository captures mechanical patterns—how information is conveyed and what player actions solve puzzles.</p>
<h2 id="repository-purpose"><a class="header" href="#repository-purpose">Repository Purpose</a></h2>
<p>This is a <strong>documentation-only knowledge base</strong>. No code, no tests, no build process.</p>
<ul>
<li><code>/puzzles/</code> — Markdown documents defining puzzle type patterns</li>
<li><code>/walkthroughs/</code> — Source walkthrough text for game analysis (empty placeholder)</li>
<li><code>/README.md</code> — Master index with table of contents linking all puzzle types</li>
</ul>
<h2 id="navigation"><a class="header" href="#navigation">Navigation</a></h2>
<p>Use the sidebar to browse:</p>
<ul>
<li><strong>Core Principles</strong> — Fundamental characteristics of adventure game puzzles</li>
<li><strong>Puzzle Types by Category</strong> — Organized by mechanical similarity (Multi-Source Discovery, Sequential Construction, etc.)</li>
<li><strong>Documentation Guidelines</strong> — Style guide and validation checklists for contributors</li>
</ul>
<h2 id="game-source-codes"><a class="header" href="#game-source-codes">Game Source Codes</a></h2>
<ul>
<li>MI1 = Monkey Island 1</li>
<li>MI2 = Monkey Island 2</li>
<li>KQVI = Kings Quest VI</li>
<li>KQVII = Kings Quest VII</li>
<li>KQVIII = Kings Quest VIII</li>
<li>QFG3 = Quest for Glory III</li>
<li>QFG4 = Quest for Glory IV</li>
<li>GF = Grim Fandango</li>
<li>SIMON = Simon the Sorcerer</li>
<li>BS1 = Broken Sword I</li>
<li>BS2 = Broken Sword II</li>
<li>TLJ = The Longest Journey</li>
<li>SYB = Syberia</li>
<li>GK1 = Gabriel Knight 1</li>
</ul>
<h2 id="adding-new-content"><a class="header" href="#adding-new-content">Adding New Content</a></h2>
<p>When analyzing a new game walkthrough:</p>
<ol>
<li>Extract each puzzles solution from walkthrough text</li>
<li>For each, identify: what info was needed, how it was conveyed, what action solved it</li>
<li>Match against existing types OR create new type document</li>
<li>Add example to relevant puzzle type file under <code>## Game Examples</code></li>
<li>If creating new type: update <code>SUMMARY.md</code> table of contents</li>
</ol>
<p>Load the <code>adventure-puzzle-analyzer</code> skill when working with this repository.</p>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="next prefetch" href="core-principles.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="next prefetch" href="core-principles.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
</nav>
</div>
<template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
<template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
<template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
<template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
<template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_line_numbers = true;
</script>
<script>
window.playground_copyable = true;
</script>
<script src="ace-2a3cd908.js"></script>
<script src="mode-rust-2c9d5c9a.js"></script>
<script src="editor-16ca416c.js"></script>
<script src="theme-dawn-4493f9c8.js"></script>
<script src="theme-tomorrow_night-9dbe62a9.js"></script>
<script src="elasticlunr-ef4e11c1.min.js"></script>
<script src="mark-09e88c2c.min.js"></script>
<script src="searcher-c2a407aa.js"></script>
<script src="clipboard-1626706a.min.js"></script>
<script src="highlight-abc7f01d.js"></script>
<script src="book-a0b12cfe.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

7
book/mark-09e88c2c.min.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

13097
book/print.html Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,301 @@
<!DOCTYPE HTML>
<html lang="en" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Front Matter - Puzzle Design Knowledge Base</title>
<!-- Custom HTML head -->
<meta name="description" content="A taxonomy of puzzle design patterns from classic point-and-click adventure games">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="favicon-de23e50b.svg">
<link rel="shortcut icon" href="favicon-8114d1fc.png">
<link rel="stylesheet" href="css/variables-8adf115d.css">
<link rel="stylesheet" href="css/general-2459343d.css">
<link rel="stylesheet" href="css/chrome-ae938929.css">
<link rel="stylesheet" href="css/print-9e4910d8.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="fonts/fonts-9644e21d.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="mdbook-highlight-css" href="highlight-493f70e1.css">
<link rel="stylesheet" id="mdbook-tomorrow-night-css" href="tomorrow-night-4c0ae647.css">
<link rel="stylesheet" id="mdbook-ayu-highlight-css" href="ayu-highlight-3fdfc3ac.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "";
const default_light_theme = "light";
const default_dark_theme = "navy";
window.path_to_searchindex_js = "searchindex-c567150f.js";
</script>
<!-- Start loading toc.js asap -->
<script src="toc-35c178c7.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="mdbook-body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
sidebar_toggle.checked = false;
}
if (sidebar === 'visible') {
sidebar_toggle.checked = true;
} else {
html.classList.remove('sidebar-visible');
}
</script>
<nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="toc.html"></iframe>
</noscript>
<div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="mdbook-page-wrapper" class="page-wrapper">
<div class="page">
<div id="mdbook-menu-bar-hover-placeholder"></div>
<div id="mdbook-menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
</label>
<button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
</button>
<ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
</ul>
<button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
</button>
</div>
<h1 class="menu-title">Puzzle Design Knowledge Base</h1>
<div class="right-buttons">
<a href="print.html" title="Print this book" aria-label="Print this book">
<span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb" title="Git repository" aria-label="Git repository">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb/edit/main/src/puzzles-front-matter.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
<span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
</a>
</div>
</div>
<div id="mdbook-search-wrapper" class="hidden">
<form id="mdbook-searchbar-outer" class="searchbar-outer">
<div class="search-wrapper">
<input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
<div class="spinner-wrapper">
<span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
</div>
</div>
</form>
<div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
<div id="mdbook-searchresults-header" class="searchresults-header"></div>
<ul id="mdbook-searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="mdbook-content" class="content">
<main>
<h1 id="puzzle-design-knowledge-base"><a class="header" href="#puzzle-design-knowledge-base">Puzzle Design Knowledge Base</a></h1>
<p>A handbook documenting puzzle design patterns from classic point-and-click adventure games (Kings Quest VI, Monkey Island series, and beyond). This repository captures mechanical patterns—how information is conveyed and what player actions solve puzzles.</p>
<h2 id="repository-purpose"><a class="header" href="#repository-purpose">Repository Purpose</a></h2>
<p>This is a <strong>documentation-only knowledge base</strong>. No code, no tests, no build process.</p>
<ul>
<li><code>/puzzles/</code> — Markdown documents defining puzzle type patterns</li>
<li><code>/walkthroughs/</code> — Source walkthrough text for game analysis (empty placeholder)</li>
<li><code>/README.md</code> — Master index with table of contents linking all puzzle types</li>
</ul>
<h2 id="navigation"><a class="header" href="#navigation">Navigation</a></h2>
<p>Use the sidebar to browse:</p>
<ul>
<li><strong>Core Principles</strong> — Fundamental characteristics of adventure game puzzles</li>
<li><strong>Puzzle Types by Category</strong> — Organized by mechanical similarity (Multi-Source Discovery, Sequential Construction, etc.)</li>
<li><strong>Documentation Guidelines</strong> — Style guide and validation checklists for contributors</li>
</ul>
<h2 id="game-source-codes"><a class="header" href="#game-source-codes">Game Source Codes</a></h2>
<ul>
<li>MI1 = Monkey Island 1</li>
<li>MI2 = Monkey Island 2</li>
<li>KQVI = Kings Quest VI</li>
<li>KQVII = Kings Quest VII</li>
<li>KQVIII = Kings Quest VIII</li>
<li>QFG3 = Quest for Glory III</li>
<li>QFG4 = Quest for Glory IV</li>
<li>GF = Grim Fandango</li>
<li>SIMON = Simon the Sorcerer</li>
<li>BS1 = Broken Sword I</li>
<li>BS2 = Broken Sword II</li>
<li>TLJ = The Longest Journey</li>
<li>SYB = Syberia</li>
<li>GK1 = Gabriel Knight 1</li>
</ul>
<h2 id="adding-new-content"><a class="header" href="#adding-new-content">Adding New Content</a></h2>
<p>When analyzing a new game walkthrough:</p>
<ol>
<li>Extract each puzzles solution from walkthrough text</li>
<li>For each, identify: what info was needed, how it was conveyed, what action solved it</li>
<li>Match against existing types OR create new type document</li>
<li>Add example to relevant puzzle type file under <code>## Game Examples</code></li>
<li>If creating new type: update <code>SUMMARY.md</code> table of contents</li>
</ol>
<p>Load the <code>adventure-puzzle-analyzer</code> skill when working with this repository.</p>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="next prefetch" href="core-principles.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="next prefetch" href="core-principles.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
</nav>
</div>
<template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
<template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
<template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
<template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
<template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_line_numbers = true;
</script>
<script>
window.playground_copyable = true;
</script>
<script src="ace-2a3cd908.js"></script>
<script src="mode-rust-2c9d5c9a.js"></script>
<script src="editor-16ca416c.js"></script>
<script src="theme-dawn-4493f9c8.js"></script>
<script src="theme-tomorrow_night-9dbe62a9.js"></script>
<script src="elasticlunr-ef4e11c1.min.js"></script>
<script src="mark-09e88c2c.min.js"></script>
<script src="searcher-c2a407aa.js"></script>
<script src="clipboard-1626706a.min.js"></script>
<script src="highlight-abc7f01d.js"></script>
<script src="book-a0b12cfe.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

View File

@@ -0,0 +1,535 @@
<!DOCTYPE HTML>
<html lang="en" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Class-Specific Ritual Challenge - Puzzle Design Knowledge Base</title>
<!-- Custom HTML head -->
<meta name="description" content="A taxonomy of puzzle design patterns from classic point-and-click adventure games">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon-de23e50b.svg">
<link rel="shortcut icon" href="../favicon-8114d1fc.png">
<link rel="stylesheet" href="../css/variables-8adf115d.css">
<link rel="stylesheet" href="../css/general-2459343d.css">
<link rel="stylesheet" href="../css/chrome-ae938929.css">
<link rel="stylesheet" href="../css/print-9e4910d8.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../fonts/fonts-9644e21d.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css">
<link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css">
<link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
window.path_to_searchindex_js = "../searchindex-c567150f.js";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc-35c178c7.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="mdbook-body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
sidebar_toggle.checked = false;
}
if (sidebar === 'visible') {
sidebar_toggle.checked = true;
} else {
html.classList.remove('sidebar-visible');
}
</script>
<nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="mdbook-page-wrapper" class="page-wrapper">
<div class="page">
<div id="mdbook-menu-bar-hover-placeholder"></div>
<div id="mdbook-menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
</label>
<button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
</button>
<ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
</ul>
<button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
</button>
</div>
<h1 class="menu-title">Puzzle Design Knowledge Base</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb" title="Git repository" aria-label="Git repository">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb/edit/main/src/puzzles/class-specific-ritual.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
<span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
</a>
</div>
</div>
<div id="mdbook-search-wrapper" class="hidden">
<form id="mdbook-searchbar-outer" class="searchbar-outer">
<div class="search-wrapper">
<input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
<div class="spinner-wrapper">
<span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
</div>
</div>
</form>
<div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
<div id="mdbook-searchresults-header" class="searchresults-header"></div>
<ul id="mdbook-searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="mdbook-content" class="content">
<main>
<h1 id="class-specific-ritual-challenge"><a class="header" href="#class-specific-ritual-challenge">Class-Specific Ritual Challenge</a></h1>
<p><strong>Information Architecture</strong>: Player discovers ritual/competition structure through NPC dialogue; solution path diverges fundamentally based on character class. Each class receives distinct mechanical challenge (combat, magic, stealth) to solve identical narrative obstacle.</p>
<p><strong>Player Action Pattern</strong>:</p>
<ol>
<li>Learn ritual exists and has requirements (NPC dialogue)</li>
<li>Complete prerequisite tasks to gain entry (varies by class)</li>
<li>Enter ritual sequence — receive class-specific challenges</li>
<li>Execute class-appropriate mechanics to complete each trial</li>
<li>Alternative solutions available but may cost honor/points</li>
</ol>
<p><strong>Core Mechanic</strong>: The same story-level puzzle is instantiated through different mechanical lenses depending on class, ensuring parity of completion while rewarding specialization.</p>
<hr>
<h2 id="variations"><a class="header" href="#variations">Variations</a></h2>
<div class="table-wrapper">
<table>
<thead>
<tr><th>Type</th><th>Class Divergence</th><th>Convergence Point</th><th>Example</th></tr>
</thead>
<tbody>
<tr><td><strong>Ritual Trials</strong></td><td>Each class faces entirely different trial mechanics</td><td>Same narrative reward after completion</td><td>Simbani Warrior Initiation</td></tr>
<tr><td><strong>Dueling Styles</strong></td><td>Combat vs. magic vs. stealth approach to same obstacle</td><td>Enemy defeated, path cleared</td><td>Shaman Wizard Duel</td></tr>
<tr><td><strong>Access Methods</strong></td><td>Physical strength, spell, or sneaking past</td><td>Entry granted to restricted area</td><td>Various door obstacles</td></tr>
</tbody>
</table>
</div>
<hr>
<h2 id="game-examples"><a class="header" href="#game-examples">Game Examples</a></h2>
<h3 id="quest-for-glory-iii-simbani-warrior-initiation-qfg3"><a class="header" href="#quest-for-glory-iii-simbani-warrior-initiation-qfg3">Quest for Glory III: Simbani Warrior Initiation (QFG3)</a></h3>
<p><strong>Setup</strong>: Fighter class must compete in traditional Simbani warrior trials against Yesufu to become a recognized warrior. Only after initiation can the fighter marry Johari (the Leopard Lady) and receive the Magic Drum from the Laibon. The trials consist of five sequential events, each testing different physical abilities.</p>
<p><small>Source: qfg3-gamefaqs-cyricz.txt, lines 2149-2173 — “Youll start by running off to the Twisted Tree… Grab a vine off the tree and youll tie it to the spear… Throw the spear at the ring, and youll win this event”</small></p>
<p><small>Source: qfg3-gamefaqs-cyricz.txt, lines 2159-2161 — “Next, youll run to the Circle of Thorns… push the nearby log onto the circle. Run into the middle and youll grab the ring”</small></p>
<pre><code>WARRIOR INITIATION SEQUENCE (Fighter/Paladin):
EVENT 1: Twisted Tree Ring Retrieval
Location: Twisted Tree area in savanna
Challenge: Ring hanging from high branch
Standard Method (Yesufu): Throw spears repeatedly to knock ring down
Clever Solution: Grab vine from tree, tie it to spear, throw spear at ring
→ Vine reels ring down, event won instantly
Outcome: Ring secured, win over Yesufu
EVENT 2: Circle of Thorns
Location: Thorn maze area
Challenge: Retrieve ring from center without getting stuck in thorns
Standard Method (Yesufu): Stab at thorns with spear blindly, slowly advance
Clever Solution: Push nearby log onto thorns to bridge across
→ Walk safely through middle, grab ring immediately
Outcome: Ring secured, win over Yesufu
EVENT 3: Trap Rescue
Location: Path back to village
Challenge: Yesufu caught in bear trap
Required Action: Help him regardless of competition outcome
Solution: Use character's strength/agility to free trapped leg
Outcome: Honor points earned (8); demonstrates true warrior virtue
EVENT 4: Spear Throwing Contest
Location: Spear throwing area
Challenge: Out-throw Yesufu at targets
Phase 1: Stationary target — use best throwing technique
Phase 2: Moving target — timing and lead calculation required
Solution: Maximize Throwing skill, maintain focus on target movement pattern
Outcome: Higher score wins event (5 points)
EVENT 5: Wrestling Bridge Duel
Location: Wrestling Bridge in Simbani Village
Challenge: Unseat Yesufu three times using bridge combat mechanics
Mechanics Learned Earlier:
- Opponent jumps → Player ducks
- Opponent ducks → Player jumps
- Opponent dodges left → Player dodges left (mirror response)
Solution: Respond correctly to each of Yesufu's moves; repeat until 3 wins
Outcome: Contest victory, named Warrior (10 points if player wins)
WHY IT'S CLASS-SPECIFIC RITUAL (Not Pattern Learning):
COMPLETE MECHANICAL DIVERGENCE BY CLASS:
Fighter/Paladin experience: Physical trials requiring strength, agility, combat skills Wizard/Thief experience: Entirely different pathway—no warrior initiation required
WIZARD ALTERNATIVE (Shaman Duel):
Rather than physical trials, Wizard engages in magical duel with Leopardman Shaman:
- Summon Staff (counters opponent's anti-staff spell)
- Cast Reversal (reflects hostile magic)
- Cast Calm (dispels Wall of Flames)
- Cast Open (escapes Cage of Thorns)
- Cast Juggling Lights (illuminates darkened area)
- Cast Dazzle (reveals illusion snake)
- Cast Levitate (escapes pit trap)
- Final: Attack Shaman directly OR cast Dispel Potion (honor choice)
This is NOT pattern learning because:
1. Wizard never sees or participates in warrior trials
2. Each class has entirely different puzzle sequence for same outcome
3. No shared rule system learned and applied—pure mechanical divergence
PARALLEL NARRATIVE, DIVERGENT PLAY:
Both Fighter and Wizard achieve "acceptance by Leopardmen" through completely different gameplay experiences, but both receive Spear of Death as reward.
</code></pre>
<hr>
<h3 id="quest-for-glory-iii-the-shamans-magical-duel-wizard"><a class="header" href="#quest-for-glory-iii-the-shamans-magical-duel-wizard">Quest for Glory III: The Shamans Magical Duel (Wizard)</a></h3>
<p><strong>Setup</strong>: Wizard class must defend the Simbani cause against Leopardman aggression. Rather than physical combat trials, the Wizard challenges the Leopardman Shaman to a magical duel. Takes place in Leopardman Village after marrying Johari.</p>
<p><small>Source: qfg3-gamefaqs-cyricz.txt, lines 2601-2614 — “First, Summon your Staff… cast Reversal to flip back the staff-burning spell… Cast Calm… Cast Open on the cage… Cast Juggling Lights… Cast Dazzle to dispel the illusion… Cast Levitate to rise out of it”</small></p>
<pre><code>WIZARD'S DUEL SEQUENCE (Counter-Spell Reactive Puzzle):
INITIAL CONDITION: Must each take turns with spells; cannot attack directly until final phase
EXCHANGE 1: Shaman's Staff-Burning Spell
Threat: Magical fire spell aimed at player's summoned staff
Required Counter: Summon Staff FIRST (prevents destruction)
Then cast Reversal to reflect magic back at caster
Points: 4+4=8
EXCHANGE 2: Wall of Flames
Threat: Fire barrier traps Wizard in enclosed space
Required Counter: Cast Calm → extinguishes flames peacefully
Points: 4
EXCHANGE 3: Cage of Thorns
Threat: Magical thorn prison, locked from outside
Required Counter: Cast Open on cage door
Points: 4
EXCHANGE 4: Darkness Spell
Threat: Area becomes pitch black; visibility and targeting impossible
Required Counter: Cast Juggling Lights → creates illumination field
Points: 4
EXCHANGE 5: Illusion Snake
Threat: Black serpent illusion attacks player (not real, but distracting)
Required Counter: Cast Dazzle → reveals illusion, causes it to vanish
Points: 4
EXCHANGE 6: Pit Trap
Threat: Floor opens beneath Wizard; falling damage/death risk
Required Counter: Cast Levitate → rise above pit safely
Points: 4
FINAL PHASE: Shaman's Demon Summoning
Condition: "All bets are off now"—rules of no direct attack lifted
Options:
A) Kill the Shaman (combat approach) = 5 points, less honorable
B) Use Dispel Potion on possession = 8 points, maintains peace narrative
Either way: Win the Wizard's Duel (10 points total for victory)
WHY IT'S CLASS-SPECIFIC RITUAL:
MIRROR OF FIGHTER INITIATION:
- Same number of stages (~5-6 sequential challenges)
- Each stage presents threat requiring specific counter-action
- Final phase offers moral choice affecting honor/points
- Identical narrative reward: Acceptance by Leopardmen, Spear of Death gained
BUT COMPLETELY DIFFERENT MECHANICS:
- Fighter uses physical skills; Wizard uses spell selection
- Fighter competes against Yesufu directly; Wizard counters Shaman's spells
- No overlap in required player knowledge or actions
</code></pre>
<hr>
<h3 id="quest-for-glory-iv-dark-one-cave-escape-sequence-qfg4"><a class="header" href="#quest-for-glory-iv-dark-one-cave-escape-sequence-qfg4">Quest for Glory IV: Dark One Cave Escape Sequence (QFG4)</a></h3>
<p><strong>Setup</strong>: After collecting each of the seven Dark One Rituals, the player must escape from progressively dangerous caves. Each cave presents the same narrative obstacle (escape the collapsing chamber) but with mechanically distinct solutions by class.</p>
<p><small>Source: qfg4-gamefaqs-sac.txt, lines 2701-2750 — Fighter blood cave: “push the boulder into the gap”; Wizard: “cast Frost Bite twice to freeze the blood flow”</small></p>
<pre><code>BLOOD CAVE ESCAPE (After Blood Ritual):
Fighter Push boulder to block acid flow through chamber
Wizard Cast Frost Bite twice, freeze path across blood pool
Thief Use Acrobatics skill to leap between narrowing platforms
BREATH CAVE ESCAPE (After Breath Ritual):
Fighter Grab lung tendril, run when thrown across chamber
Wizard Cast Calm on valve mechanism, then Open spell to release pressure
Thief Climb invisible glass wall using stealth detection
SENSE CAVE NAVIGATION (Progressive Sense Restoration):
Common to all: Click Hand icon repeatedly to restore senses in order
Touch → Smell → Hearing → Sight
Fighter/Thief Navigate using restored physical perception abilities
Wizard Use magic detection to find sense-restoration points
SENSE CAVE ESCAPE (Electrical Hazard Chamber):
Fighter Time dendrite clusters, use grapnel swings across live wires
Wizard Cast Resistance spell, then Lightning Ball to short-circuit barrier
Thief Multiple grapnel swings; precise timing over electricity
BONE CAVE CAGE ESCAPE (Collapsing Prison):
Fighter Attack bone cage structure directly until it shatters
Wizard Alternating Flame Dart / Frost Bite spells to brittle bones → Force Bolt
Thief Use Acrobatics before cage fully closes, slip through gaps
ESSENCE CAVE FINAL BATTLE (Ad Avis Confrontation):
Common Step: Tell Ultimate Joke to stun the Dark Master
Fighter Erana's Staff transforms to spear, throw at Ad Avis through portal
Wizard Cast Force Bolt → Summon Staff to crystal in other realm → final attack
Thief Use stake from dungeon OR Acrobatics jump through dimensional rift
WHY IT'S CLASS-SPECIFIC RITUAL:
MECHANICAL DIVERGENCE WITH NARRATIVE CONVERGENCE:
Each escape presents identical story goal (survive the cave gauntlet)
but requires fundamentally different player skills:
- Fighter = physical strength, timing, combat
- Wizard = spell selection, mana management, magical solutions
- Thief = stealth mechanics, acrobatics, precision movement
NO OVERLAP IN REQUIRED ACTIONS:
Player never sees other class's solution method during their playthrough.
Each class experiences entirely different gameplay for same narrative beat.
COMPARISON TO QFG3 INITIATION:Similar to Simbani Warrior Trials (QFG3) in structurebut expanded from single ritual to gauntlet of 6 sequential escapes
</code></pre>
<p><small>Cited from: qfg4-gamefaqs-sac.txt:2701-2850, qfg4-gamefaqs-anonymous.txt:1110-1198</small></p>
<hr>
<h3 id="quest-for-glory-iv-monster-combat-solutions-qfg4"><a class="header" href="#quest-for-glory-iv-monster-combat-solutions-qfg4">Quest for Glory IV: Monster Combat Solutions (QFG4)</a></h3>
<p><strong>Setup</strong>: Common combat encounters resolved differently by class specialization. Some monsters only approachable by specific class abilities.</p>
<p><small>Source: qfg4-gamefaqs-cyricz.txt, lines 1716-1730 — “Wraith will continue to suck life out of you in combat unless you have some kind of protection, like the Aura Spell or Undead Amulet”</small></p>
<pre><code>WRAITH COMBAT (Life-Sucking Undead):
Fighter/Thief Must obtain Undead Amulet from Gypsy camp first
Then approach while dodging cold touch, hack repeatedly
Wizard Requires Aura Spell to create protective field
Can then attack directly without life drain
CHERNOVY WIZARD COMBAT (Magic-Reflecting Cultists):
Fighter/Thief Approach only when not casting; melee attacks work
Wizard Must watch for Reversal spell indication
Switch to Frost Bite (physical damage) during reversal period
NECROTAUR COMBAT (High-Difficulty Charge Attack):
Fighter Pin against wall, repeat strikes while dodging charge
Thief Use daggers at range; kiting strategy
Wizard Spells only - must maintain distance with Frost Bite / Force Bolt
WHY IT'S CLASS-SPECIFIC RITUAL:Combat is fundamental game mechanic, but each class has distinct encounter structure
Some enemies require class-specific preparation (pre-combat acquisition)
Solution paths diverge at multiple decision points within same encounter
</code></pre>
<p><small>Cited from: qfg4-gamefaqs-sac.txt:1638-1730</small></p>
<hr>
<h3 id="quest-for-glory-iv-entry-method-divergence-multiple-puzzles-qfg4"><a class="header" href="#quest-for-glory-iv-entry-method-divergence-multiple-puzzles-qfg4">Quest for Glory IV: Entry Method Divergence (Multiple Puzzles) (QFG4)</a></h3>
<p><strong>Setup</strong>: Multiple location access puzzles solved through class-specific approaches. Same destination, different entry mechanics.</p>
<p><small>Source: qfg4-gamefaqs-anonymous.txt, lines 702-718 — monastery entry; crystalshard.txt:398-399 — Borgov tomb entry</small></p>
<pre><code>MONASTERY ENTRY:
All classes Use Dark One Sign on door (universal solution)
Fighter/Thief Climb through window with sufficient skill level
Wizard Cast Levitate to reach window ledge
BORGOV TOMB CRYPT:
All classes Obtain key from Igor after Gypsy rescue quest
Wizard Cast Open spell on locked door
Thief Pick lock with Lockpick tool (from Thieves' Guild)
ELDERBURY BUSH BERRIES:
Fighter/Thief Throw rocks to dislodge berries, then sneak collection
Wizard Force Bolt knocks berries off → Fetch spell collects them
WHY IT'S CLASS-SPECITAL RITUAL:Primary narrative outcome identical (area access / item acquisition)
but solution path determined by character design choices.
Class mechanics gate different approach availability.
</code></pre>
<p><small>Cited from: qfg4-gamefaqs-sac.txt:2259-2270, qfg4-gamefaqs-anonymous.txt:937-1010</small></p>
<hr>
<h2 id="related-types"><a class="header" href="#related-types">Related Types</a></h2>
<div class="table-wrapper">
<table>
<thead>
<tr><th>Type</th><th>Similarity</th><th>Distinction</th></tr>
</thead>
<tbody>
<tr><td>Pattern Learning</td><td>Both require mastering mechanics early for later payoff</td><td>PL = same system reused; CSR = different classes get entirely different systems</td></tr>
<tr><td>Multi-Faceted Plan</td><td>Both have multiple requirements to satisfy</td><td>MFP = gather all requirements in any order; CSR = class determines which set applies</td></tr>
<tr><td>Observation Replay</td><td>Both involve learned sequences</td><td>OR = reproduce exact sequence seen once; CSR = learn rule application, not memorization</td></tr>
</tbody>
</table>
</div>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../puzzles/predator-chase-escape.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../puzzles/multi-faction-diplomacy.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../puzzles/predator-chase-escape.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../puzzles/multi-faction-diplomacy.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
</nav>
</div>
<template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
<template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
<template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
<template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
<template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_line_numbers = true;
</script>
<script>
window.playground_copyable = true;
</script>
<script src="../ace-2a3cd908.js"></script>
<script src="../mode-rust-2c9d5c9a.js"></script>
<script src="../editor-16ca416c.js"></script>
<script src="../theme-dawn-4493f9c8.js"></script>
<script src="../theme-tomorrow_night-9dbe62a9.js"></script>
<script src="../elasticlunr-ef4e11c1.min.js"></script>
<script src="../mark-09e88c2c.min.js"></script>
<script src="../searcher-c2a407aa.js"></script>
<script src="../clipboard-1626706a.min.js"></script>
<script src="../highlight-abc7f01d.js"></script>
<script src="../book-a0b12cfe.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

View File

@@ -0,0 +1,465 @@
<!DOCTYPE HTML>
<html lang="en" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Comedy-Based NPC Persuasion - Puzzle Design Knowledge Base</title>
<!-- Custom HTML head -->
<meta name="description" content="A taxonomy of puzzle design patterns from classic point-and-click adventure games">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon-de23e50b.svg">
<link rel="shortcut icon" href="../favicon-8114d1fc.png">
<link rel="stylesheet" href="../css/variables-8adf115d.css">
<link rel="stylesheet" href="../css/general-2459343d.css">
<link rel="stylesheet" href="../css/chrome-ae938929.css">
<link rel="stylesheet" href="../css/print-9e4910d8.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../fonts/fonts-9644e21d.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css">
<link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css">
<link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
window.path_to_searchindex_js = "../searchindex-c567150f.js";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc-35c178c7.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="mdbook-body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
sidebar_toggle.checked = false;
}
if (sidebar === 'visible') {
sidebar_toggle.checked = true;
} else {
html.classList.remove('sidebar-visible');
}
</script>
<nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="mdbook-page-wrapper" class="page-wrapper">
<div class="page">
<div id="mdbook-menu-bar-hover-placeholder"></div>
<div id="mdbook-menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
</label>
<button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
</button>
<ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
</ul>
<button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
</button>
</div>
<h1 class="menu-title">Puzzle Design Knowledge Base</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb" title="Git repository" aria-label="Git repository">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb/edit/main/src/puzzles/comedy-based-persuasion.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
<span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
</a>
</div>
</div>
<div id="mdbook-search-wrapper" class="hidden">
<form id="mdbook-searchbar-outer" class="searchbar-outer">
<div class="search-wrapper">
<input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
<div class="spinner-wrapper">
<span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
</div>
</div>
</form>
<div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
<div id="mdbook-searchresults-header" class="searchresults-header"></div>
<ul id="mdbook-searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="mdbook-content" class="content">
<main>
<h1 id="comedy-based-npc-persuasion"><a class="header" href="#comedy-based-npc-persuasion">Comedy-Based NPC Persuasion</a></h1>
<p><strong>Information Architecture</strong>: Dialogue trees include absurdity/humor options alongside standard inquiry/negotiation choices. Successful persuasion doesnt rely on logical argument, evidence presentation, or information exchange—it relies on comedic timing, escalating absurdity, or matching the NPCs own irrational worldview through joke-based dialogue selection.</p>
<p><strong>Player Action Pattern</strong>:</p>
<ol>
<li>Approach blocking NPC with conventional goals (passage, information, item)</li>
<li>Standard dialogue options available (polite request, threat, bribe, query)</li>
<li>Humor/absurdity options present but marked as “risky” or clearly unconventional</li>
<li>Selecting comedy path succeeds or fails based on tone-matching with NPC character</li>
<li>Success grants goal AND advances comedic narrative; failure provides funny rejection</li>
</ol>
<p><strong>Core Mechanic</strong>: The talk tree implements a “tonal compatibility” check where humor style must match character personality—not what you argue matters, but whether the joke lands within that characters comedic worldview.</p>
<hr>
<h2 id="variations"><a class="header" href="#variations">Variations</a></h2>
<div class="table-wrapper">
<table>
<thead>
<tr><th>Type</th><th>Comedy Approach</th><th>Success Condition</th><th>Example</th></tr>
</thead>
<tbody>
<tr><td><strong>Escalating Absurdity</strong></td><td>Each response increases ridiculousness</td><td>NPC joins in or gives up from confusion</td><td>Arguing with bureaucrat until they surrender</td></tr>
<tr><td><strong>Tone-Matching</strong></td><td>Mirror NPCs own humor style</td><td>Recognition of shared comedic frequency</td><td>Joke-for-joke exchange leading to alliance</td></tr>
<tr><td><strong>Self-Deprecating Deflection</strong></td><td>Mock self rather than confront</td><td>Disarms hostility through humility/humor</td><td>Guards laugh instead of arresting player</td></tr>
<tr><td><strong>Non-Sequitur Overload</strong></td><td>Deliberately illogical responses</td><td>Confuses NPC into cooperative state</td><td>Absurd claims accepted as legitimate</td></tr>
</tbody>
</table>
</div>
<hr>
<h2 id="game-examples"><a class="header" href="#game-examples">Game Examples</a></h2>
<h3 id="sam--max-hit-the-road-cone-of-tragedy-claim-ticket-acquisition-smhtr"><a class="header" href="#sam--max-hit-the-road-cone-of-tragedy-claim-ticket-acquisition-smhtr">Sam &amp; Max Hit the Road: Cone of Tragedy Claim Ticket Acquisition (SMHTR)</a></h3>
<p><strong>Problem</strong>: After riding the “Cone of Tragedy” carnival ride, player discovers most inventory items have fallen out. Need to retrieve them, but no obvious recovery method exists. Must interact with carnival worker nearby to find solution.</p>
<p><small>Source: adventuregamers_walkthrough.html, embedded walkthrough lines 156-164 — “Walk over to the Cone of Tragedy and talk to the man. Ask about the Cone of Tragedy. After leaving the Cone of Tragedy, check the inventory to find that most of the items have fallen out. Talk to the man and ask him about the inventory. He will give you a claim ticket.”</small></p>
<p><small>Source: abandonwaredos_solution.html, lines 253-260 — “talk with the guy sitting there -&gt; Click at Cone of Tragedy Icon -&gt; After looking at the inventory talk again with the guy -&gt; Ask for your Inventory -&gt; Youll get a ticket for the Lost &amp; Found”</small></p>
<pre><code>DIALOGUE TREE STRUCTURE:
Location: Carnival, near Cone of Tragedy ride (3.3)
NPC: Unnamed carnival worker sitting by ride exit
INITIAL CONTACT - Comedy Setup:
1. Ride completes, comedic inventory loss occurs
2. Worker NPC visible nearby for interaction
3. First conversation topic: "Cone of Tragedy" itself
- Worker explains ride (humorous description of item-loss mechanic)
- Establishes worker as carnival employee, potentially helpful
CRITICAL PERSUASION MOMENT:
4. Player checks inventory → discovers catastrophic item loss
5. Return to NPC for SECOND conversation
6. Dialogue option available: "Ask about Inventory"
7. [COMEDY MECHANIC]: Instead of demanding items back or threatening
Worker responds in kind with COMedic framing:
- Acknowledges tragedy absurdly
- Provides claim ticket as carnival-appropriate response
- Establishes Lost &amp; Found location humorously
8. Claim ticket received → enables Lost &amp; Found visit
RESPONSE ANALYSIS:
Why This is Comedy-Based Persuasion:
- Player option frames problem comedically ("inventory?" as joke) not seriously
- Worker's response matches comedic tone—doesn't dismiss or refuse
- Transaction (claim ticket) treats absurd loss as mundane carnival bureaucracy
- The "puzzle" is recognizing worker CAN help through proper tonal approach
What Would Fail (Hypothetical, Based on Game Design):
- Threatening worker → likely hostile/refusal response
- Demanding compensation → formal complaint process, not comedy-friendly
- Ignoring and exploring → possible but claims ticket path is themed solution
</code></pre>
<p><strong>Why Its Comedy-Based Persuasion (Not Information Brokerage)</strong>:</p>
<ol>
<li><strong>No Trade Exchange</strong>: Player gives nothing of material value to worker—only asks comedically</li>
<li><strong>Tone Determines Outcome, Not Logic</strong>: Worker provides ticket because the situation was framed within carnivals absurdist context, not because player offered valuable information or items</li>
<li><strong>Humor is Primary Interaction Mode</strong>: The joke is on PLAYER (ridiculous inventory loss); successful persuasion acknowledges and participates in that joke</li>
</ol>
<p><strong>Distinction from Sensory Exploitation</strong>: Worker has no perceptual vulnerability to exploit. Player doesnt deceive worker—they collaboratively acknowledge the absurdity, and workers response follows comedic world rules.</p>
<hr>
<h3 id="sam--max-hit-the-road-mole-man-candy-for-crowbar-exchange-smhtr"><a class="header" href="#sam--max-hit-the-road-mole-man-candy-for-crowbar-exchange-smhtr">Sam &amp; Max Hit the Road: Mole Man Candy-for-Crowbar Exchange (SMHTR)</a></h3>
<p><strong>Problem</strong>: Inside Tunnel of Love hidden room, Doug the Mole Man holds critical information (Bruno the Sasquatch location, Twine Ball destination) and an item needed to progress (crowbar for trailer door). Standard conversation reveals he wants something but initial offers dont work.</p>
<p><small>Source: adventuregamers_walkthrough.html, embedded walkthrough lines 195-201 — “Talk to Doug, and ask him about the bigfoot. The location of the largest ball of twine will appear on the map. Give Doug the candy, and he will give you a crowbar.”</small></p>
<p><small>Source: abandonwaredos_solution.html, lines 278-283 — “Talk to the Mole Man -&gt; Youll get many informations about Bruno the Sasquatch, during the conversation youll have to give him the candys -&gt; Youll get a crowbar for the candys and a new location (5)”</small></p>
<pre><code>PERSUASION THROUGH CHARACTER-TONAL MATCHING:
Location: Tunnel of Love Hidden Room (3.7)
NPC: Doug, "Mole Man" living in carnival attraction tunnels
Character Profile: Subterranean dweller with childlike/simple preferences
INITIAL INFORMATION GATHERING:
1. Enter room via hidden door (beard pull puzzle)
2. Approach Mole Man—easily approachable character, no hostility
3. Dialogue option: "Ask about Bigfoot"
4. Mole Man willingly discusses Bruno, provides Twine Ball location marker
CRITICAL EXCHANGE MOMENT:
5. Crowbar needed but not offered in conversation
6. Player must discover what Mole Man VALUES
7. [COMEDY PERSUASION MECHANIC]: Offer candy (acquired earlier at Snuckey's)
8. Response Analysis:
- Mole Man accepts immediately—no haggling, no debate
- Exchange framed as simple "swapping treasures" not transactional trade
- Comedic element: Mole Man's treasure = children's candy
9. Outcomes:
- Crowbar received
- Friendship/alliance established with character
- Tonal consistency: weird carnival worker values weird items
WHY THIS IS COMEDY PERSUASION (versus Information Brokerage):
TONE-MATCHING ELEMENTS:
- Mole Man character type: whimsical, childlike, underground dweller stereotype
- Candy as treasure fits his CHARACTER LOGIC despite being absurd to adult NPCs
- Exchange has no serious economic logic (what IS the crowbar worth versus candy?)
INFORMATION BROKERAGE COMPARISON:
If this were pure Information Brokerage:
- Player would learn Mole Man wants X through explicit demand
- X would have clear value to him within world economy
- Trading network would be logical (even if absurd items)
Actual Comedy-Based Approach:
- Discovery comes from trying INVENTORY ITEMS as conversation responses
- Success depends on tonal fit (weird person wants weird thing), not logic
- Joke is the MISALIGNMENT: adult tools for children's candy
PERSUASION STRUCTURE:
Not "I'll give you X if you give me Y" negotiation
But "Here's something I know you'd like" comedic gift-giving
</code></pre>
<p><strong>Why Its Comedy-Based Persuasion</strong>: The puzzle isnt mapping an exchange network. The puzzle is recognizing this character exists in a comedic register where childlike treasures make sense. Successful persuasion demonstrates world-knowledge about character TYPE, not logical deduction about needs/wants.</p>
<hr>
<h3 id="sam--max-hit-the-road-sasquatch-chief-rasping-smhtr"><a class="header" href="#sam--max-hit-the-road-sasquatch-chief-rasping-smhtr">Sam &amp; Max Hit the Road: Sasquatch Chief Rasping (SMHTR)</a></h3>
<p><strong>Problem</strong>: At Savage Jungle Inn, player encounters Bigfoot/Sasquatch chief with a dental complaint (raspy teeth/gum problem). Direct dialogue doesnt progress plot—must provide correct item in comedic fashion.</p>
<p><small>Source: adventuregamers_walkthrough.html, embedded walkthrough lines 635-637 — “Enter the Savage Jungle Inn. Talk to Evelyn Morris… Give the rasp to the bigfoot.”</small></p>
<p><small>Source: abandonwaredos_solution.html, lines 438-440 — “Give the Rasp to the Sasquatch”</small></p>
<pre><code>PHYSICAL COMEDY ITEM MATCHING:
Location: Savage Jungle Inn (10.2)
NPC: Sasquatch Chief with dental discomfort
Item Needed: Rasp (unexpected tool in player inventory from earlier horse encounter at Snuckey's)
SETUP CHAIN:
1. Earlier at Snuckey's bathroom incident (lines 137-147):
- Max borrows bathroom key temporarily
- Returns with rasp attached to key
- Player acquires rasp as incidental item, NO stated purpose
2. Long gameplay gap between acquisition and use
3. At Inn: Chief mentioned but problem not explicitly stated
COMEDY PERSUASION MOMENT:
4. Observe/talk to chief → dental discomfort implied (character acting, not explicit dialogue)
5. Player must recognize Rasp as SOLUTION despite no logical path
6. Use Rasp on Sasquatch/Chief teeth
7. Chief gratified—comedy resolution through physical problem/comedic tool match
WHY COMEDY-BASED:
- Tool purpose mismatch: Rasp is woodworking/metalworking, not dental equipment
- Absurd connection player must make
- Success comes from accepting "rasp solves tooth problems" as cartoon logic
PHYSICAL COMEDY PERSUASION SUBTYPE:
This represents a variation where persuasion through comedy applies to PHYSICAL interaction, not just dialogue. Item choice demonstrates comedic understanding of character's problem.
</code></pre>
<p><strong>Why Its Comedy-Based Persuasion</strong>: Success depends on recognizing the character TYPE (Sasquatch) + their implied PROBLEM state (teeth roughness/hairiness) + absurd ITEM that comedically fits. The rasp isnt a logical dental tool—its a joke solution for a hairy creature with rough teeth.</p>
<hr>
<h2 id="related-types"><a class="header" href="#related-types">Related Types</a></h2>
<div class="table-wrapper">
<table>
<thead>
<tr><th>Type</th><th>Similarity</th><th>Distinction</th></tr>
</thead>
<tbody>
<tr><td><strong>Information Brokerage Chain</strong></td><td>Both involve NPC wants/needs</td><td>IB = explicit trade network; CBP = tonal comedy matching</td></tr>
<tr><td><strong>Sensory Exploitation</strong></td><td>Both bypass standard interaction</td><td>SE = perception weakness; CBP = humor register alignment</td></tr>
<tr><td><strong>Multi-Faceted Plan</strong></td><td>Both may require multiple items/information</td><td>MFP = parallel requirements synthesis; CBP = single comedic recognition moment</td></tr>
</tbody>
</table>
</div>
<hr>
<h2 id="design-considerations"><a class="header" href="#design-considerations">Design Considerations</a></h2>
<p><strong>When to Use</strong>: Games where humor is central mechanic; NPCs defined by comedic traits rather than serious goals; situations where logic-based solutions would undermine tone.</p>
<p><strong>Key Design Principle</strong>: Comedy persuasion must feel character-appropriate, not random. Mole Man wants candy (character consistent); guard accepting absurd explanation only works if established as gullible/absurd themselves.</p>
<p><strong>Risks</strong>:</p>
<ul>
<li>Players may miss comedic options hidden among serious dialogue choices</li>
<li>Solutions can seem arbitrary without strong tonal framing</li>
<li>May undermine player agency if ONLY humor works in serious situations</li>
</ul>
<h3 id="simon-the-sorcerer-troll-bridge-whistle-negotiation-simon"><a class="header" href="#simon-the-sorcerer-troll-bridge-whistle-negotiation-simon">Simon the Sorcerer: Troll Bridge Whistle Negotiation (SIMON)</a></h3>
<p><strong>Problem</strong>: The Troll blocks bridge passage on “strike”—refusing to negotiate logically or accept standard trade. Dialogue attempts at bargaining fail. Only by recognizing the comedic nature of both characters and providing a prop that matches the absurdity can progress occur.</p>
<p><small>Source: walkthroughs/simon1/simon1.txt, lines 98-102 — “Talk to the troll, and it is interested in Simons whistle…”</small></p>
<h4 id="comedic-context-setup"><a class="header" href="#comedic-context-setup">Comedic Context Setup:</a></h4>
<p>The Troll explicitly declares a labor strike over unfair treatment by goats (Billy Goats Gruff reference). This establishes him as having bureaucratic/union-complaint humor rather than monster-hostility.</p>
<p><strong>Tonal Matching Required</strong>: Player must recognize the Troll wants COMEDIC SATISFACTION not logical passage—offering something that creates funny situation works where direct requests fail.</p>
<p>The Whistle (from Barbarian) triggers a comedic cascade: Troll blows it → absurd noise → Barbarian attacks Troll = “the strike gets violent resolution through musical instrument.” This is the joke-based solution matching the NPCs established humor profile (cartoon villain with labor grievance rather than traditional monster).</p>
<p><strong>Why Its Comedy-Based Persuasion</strong>: The dialogue succeeds not because of logical argument or trade value, but because providing a WHISTLE creates the scenario where Trolls own action triggers his defeat. Comedic irony is the persuasion mechanism—Troll becomes participant in his own downfall via toy he was curious about.</p>
<hr>
<p><strong>Best Practice</strong>: Establish character comedy profiles early. Signal acceptable interaction style through introduction scenes or other NPC interactions with similar personality types.</p>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../puzzles/distraction-physics.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../puzzles/multi-character-coordination.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../puzzles/distraction-physics.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../puzzles/multi-character-coordination.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
</nav>
</div>
<template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
<template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
<template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
<template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
<template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_line_numbers = true;
</script>
<script>
window.playground_copyable = true;
</script>
<script src="../ace-2a3cd908.js"></script>
<script src="../mode-rust-2c9d5c9a.js"></script>
<script src="../editor-16ca416c.js"></script>
<script src="../theme-dawn-4493f9c8.js"></script>
<script src="../theme-tomorrow_night-9dbe62a9.js"></script>
<script src="../elasticlunr-ef4e11c1.min.js"></script>
<script src="../mark-09e88c2c.min.js"></script>
<script src="../searcher-c2a407aa.js"></script>
<script src="../clipboard-1626706a.min.js"></script>
<script src="../highlight-abc7f01d.js"></script>
<script src="../book-a0b12cfe.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

View File

@@ -0,0 +1,625 @@
<!DOCTYPE HTML>
<html lang="en" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Corporate Infiltration - Puzzle Design Knowledge Base</title>
<!-- Custom HTML head -->
<meta name="description" content="A taxonomy of puzzle design patterns from classic point-and-click adventure games">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon-de23e50b.svg">
<link rel="shortcut icon" href="../favicon-8114d1fc.png">
<link rel="stylesheet" href="../css/variables-8adf115d.css">
<link rel="stylesheet" href="../css/general-2459343d.css">
<link rel="stylesheet" href="../css/chrome-ae938929.css">
<link rel="stylesheet" href="../css/print-9e4910d8.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../fonts/fonts-9644e21d.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css">
<link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css">
<link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
window.path_to_searchindex_js = "../searchindex-c567150f.js";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc-35c178c7.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="mdbook-body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
sidebar_toggle.checked = false;
}
if (sidebar === 'visible') {
sidebar_toggle.checked = true;
} else {
html.classList.remove('sidebar-visible');
}
</script>
<nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="mdbook-page-wrapper" class="page-wrapper">
<div class="page">
<div id="mdbook-menu-bar-hover-placeholder"></div>
<div id="mdbook-menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
</label>
<button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
</button>
<ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
</ul>
<button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
</button>
</div>
<h1 class="menu-title">Puzzle Design Knowledge Base</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb" title="Git repository" aria-label="Git repository">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb/edit/main/src/puzzles/corporate-infiltration.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
<span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
</a>
</div>
</div>
<div id="mdbook-search-wrapper" class="hidden">
<form id="mdbook-searchbar-outer" class="searchbar-outer">
<div class="search-wrapper">
<input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
<div class="spinner-wrapper">
<span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
</div>
</div>
</form>
<div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
<div id="mdbook-searchresults-header" class="searchresults-header"></div>
<ul id="mdbook-searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="mdbook-content" class="content">
<main>
<h1 id="corporate-espionage--multi-layer-infiltration-puzzle"><a class="header" href="#corporate-espionage--multi-layer-infiltration-puzzle">Corporate Espionage / Multi-Layer Infiltration Puzzle</a></h1>
<p><strong>Information Architecture</strong>: Player must bypass multiple security systems, each requiring different approach strategies. Access control is layered (perimeter → interior → restricted zones), and requires gathering authentication items (keycard, disguise, visual credentials) from different locations within facility. Security personnel actively patrol interior spaces with conditional response behaviors.</p>
<p><strong>Player Action Pattern</strong>:</p>
<ol>
<li>Breach perimeter using temporary concealment/stealth item</li>
<li>Acquire uniform/disguise from accessible storage</li>
<li>Perform mandatory maintenance tasks to avoid suspicion during patrols</li>
<li>Observe authority figure patterns to identify absence windows</li>
<li>Steal authentication credentials during vulnerability window</li>
<li>Bypass final electronic door controls with collected items</li>
</ol>
<p><strong>Core Mechanic</strong>: Multiple independent security barriers exist within a single facility, requiring the player to adapt behavior based on location context—steath for entry, disguise and maintenance for interior patrols, opportunistic theft for credentials, technical authentication for final barrier.</p>
<h2 id="variations"><a class="header" href="#variations">Variations</a></h2>
<div class="table-wrapper">
<table>
<thead>
<tr><th>Variation</th><th>Security Layers</th><th>Player Adaptation Required</th><th>Example</th></tr>
</thead>
<tbody>
<tr><td><strong>Disguise + Maintenance</strong></td><td>Visual ID check + behavioral monitoring</td><td>Must perform role actions correctly</td><td>SQ3 janitor infiltration</td></tr>
<tr><td><strong>Pure Stealth</strong></td><td>Active pursers, sensors</td><td>Avoid detection entirely</td><td>Classic stealth games</td></tr>
<tr><td><strong>Credential Stack</strong></td><td>Multiple door types requiring cards/keycodes</td><td>Collect all credentials in any order</td><td>Some sci-fi adventures</td></tr>
</tbody>
</table>
</div>
<hr>
<h2 id="game-examples"><a class="header" href="#game-examples">Game Examples</a></h2>
<h3 id="spacequest-iii-scummsoft-headquarters-infiltration-pestulon-sq3"><a class="header" href="#spacequest-iii-scummsoft-headquarters-infiltration-pestulon-sq3">SpaceQuest III: ScummSoft Headquarters Infiltration (Pestulon) (SQ3)</a></h3>
<p><strong>Problem</strong>: Roger reaches Pestulon where ScummSoft is holding two Andromeda citizens captive behind an “impenetrable force field.” Infiltrating the company headquarters requires bypassing guards, security doors, and eventually confronting corporate boss Elmo. Security personnel patrol hallways and will kill intruders unless disguised as staff.</p>
<p><small>Source: gamefaqs-tricrokra-archive.html, lines 534-539 — “Wear the invisibility belt = Turn on the belt = Enter ScumSoft”</small></p>
<p><small>Source: the-spoiler-walkthrough.html, lines 131-148 — Complete infiltration sequence</small></p>
<pre><code>LAYER 1 - PERIMETER BREACH (Invisibility Belt):
PREREQUISITE: INVISIBILITY BELT in inventory (captured from Arnold on Phleebhut)
LOCATION: Ship → South to ScummSoft building entrance
Action Sequence:
- WEAR belt → TURN ON belt (become invisible to guards)
- PUSH BUTTON at door control panel
- ENTER door while invisible
BELT FAILURE MECHANIC:
Citation: gamefaqs-tricrokra-archive.html, lines 542-544 — "The invisibility belt will get broken. Great."
Outcome: Belt breaks immediately upon entering; player now vulnerable inside and must acquire disguise quickly.
PHASE A - DISGUISE ACQUISITION (Becoming Staff):
LOCATION: South from entry → First door left (janitor closet)
Action Sequence:
- GET CLOVERES → Automatic costume change to janitor uniform
ITEMS GRANTED WITH UNIFORM:
- VAPORIZER (waste disposal tool, multi-purpose)
- Janitorial appearance (guards no longer kill on sight)
PHASE B - MANDATORY MAINTENANCE TASK (Behavioral Stealth):
SECURITY MECHANIC: Guards and sensors check trash can contents throughout facility. If any can is left full while player passes as janitor → immediate death for "not doing job properly."
SOLUTION PATTERN:
- Every room visited must have all visible trashcans emptied
- Command: USE VAPORIZER on each can until empty
LAYER 2 - AUTHENTICATION ACQUISITION (Photocopy Substitution):
SUB-PUZZLE: Boss Elmo's office security door requires facial recognition
INFORMATION FLOW:
1. Navigate maze hallways, vaporizing cans throughout
2. Reach first western room after entry area
3. Observe picture of Elmo's face on wall (not in boss's office yet)
4. TAKE PICTURE from wall
5. Use nearby photocopier: COPY picture
6. PUT PICTURE back on original location (avoid raising alarm if inspected)
Citation: gamefaqs-tricrokra-archive.html, lines 557-563 — "= Get the picture = Use the copier to copy the picture = Put the picture back where you found it."
OUTPUT ITEM: COPIED PHOTO of Elmo's face
PURPOSE: Will fool facial recognition scanner at restricted area
LAYER 3 - AUTHORITY FIGURE SURVEILLANCE (Wait for Absence):
LOCATION: Continue north through offices to boss's office window
OBSERVATION REQUIRED: Wait until Elmo leaves his office through east door
Citation: gamefaqs-tricrokra-archive.html, lines 577-580 — "Now the boss is gone... Enter his office"
STRATEGY: Player monitors from hallway. When Elmo exits east, opportunity window opens to enter office without confrontation.
LAYER 4 - CREDENTIAL THEFT (Keycard Acquisition):
WINDOW OF OPPORTUNITY: Only after Elmo leaves office
LOCATION: Elmo's private office (east side of building)
Action: GET KEYCARD from desk
Citation: gamefaqs-tricrokra-archive.html, line 580 — "steal the keycard from his desk and exit south"
LAYER 5 - RESTRICTED AREA ACCESS (Multi-Authentication Door):
LOCATION: Exit ScummSoft building (walk south out to main hall) → First door right on south side
SECURITY SYSTEMS TO BYPASS: Two-part electronic lock
AUTHENTICATION SEQUENCE:
STEP A - Insert Keycard
Prerequisite: KEYCARD in inventory (stolen from Elmo's office)
Command: USE keycard → put in slot reader
STEP B - Facial Recognition Scanner
Prerequisite: COPIED PHOTO of Elmo's face in inventory
Command: Hold copy → SHOW picture/COPIED photo to scanner
Citation: gamefaqs-tricrokra-archive.html, lines 592-596 — "= Go south and stop at the first door on the right = Use the keycard = Show the picture to fool the face scanner"
STEP C - Enter Restricted Area (Prison Cell Zone)
Door opens after BOTH authentications succeed
Two captured Andromedan citizens visible inside force field cell
LAYER 6 - CAPTIVE RESCUE:
LOCATION: Inside restricted room with prison cells
ACTION SEQUENCE:
- PRESS BUTTON at wall panel → Creates bridge to cells
- Walk to center platform
- USE VAPORIZER on each captive (dissolves their energy field restraints)
Citation: gamefaqs-tricrokra-archive.html, lines 597-601 — "= TYPE PRESS BUTTON to create a bridge = Go to the center = Use the vaporizer to free Mark and Scott"
LAYER 7 - FINAL CONFRONTATION SEQUENCE:
TRIGGER MECHANIC: After freeing captives, wait for Elmo to return. He challenges Roger to combat.
COMBAT PHASES: Two sequential encounters (robot boxing match → space battle)
Citation: gamefaqs-tricrokra-archive.html, lines 603-610 — "wait for the boss to pop up and he challenges you to a fight... For the space battle goes..."
</code></pre>
<p><strong>Why Its Multi-Layer Infiltration (Distinct from Simple Sensory Exploitation)</strong>:
This puzzle contains multiple sub-puzzle types in sequence:</p>
<ol>
<li><strong>Sensory Exploitation</strong>: Invisibility belt fools guard visual detection (but breaks)</li>
<li><strong>Disguise Mechanic</strong>: Janitor uniform provides social camouflage</li>
<li><strong>Conditional Behavior Enforcement</strong>: Janitor MUST empty cans—behavioral role play, not just wearing clothes</li>
<li><strong>Meta-Construction</strong>: Picture copied then keycard stolen to combine at final door</li>
<li><strong>Timed Opportunity Window</strong>: Stealing keycard requires Elmos absence</li>
</ol>
<p>Unlike pure sensory exploitation (one sense vulnerability), this is a multi-barrier infiltration where each layer requires different solutions from different mechanics. The challenge is managing all sub-puzzles in correct sequence: belt→disguise→copy picture→wait for boss→steal card→escape building→combine authentications→rescue captives.</p>
<p><strong>Key Distinction from Information Brokerage</strong>: IB gathers items through NPC trade chains (A wants X, give Y to A, get Z). Here, no social exchange exists—purely mechanical barriers requiring collected items. The “intelligence” gathering (copying picture) is environmental observation, not NPC negotiation.</p>
<p><strong>Comparison to Multi-Faceted Plan</strong>: MFP gathers parallel requirements from different NPC dialogues/situations. This infiltration has SEQUENTIAL dependencies: cannot copy picture before obtaining janitor access; cannot steal keycard before boss leaves office; vaporizing cans happens continuously during passage, not as discrete “gather this item” objective.</p>
<p><strong>Security Design Pattern Analysis</strong>:</p>
<ul>
<li><strong>Redundant Authentication</strong>: Final door requires BOTH card AND face scan—even stealing Elmos identity isnt enough without his physical card</li>
<li><strong>Behavioral Enforcement</strong>: Not just wearing disguise—must perform janitorial duties correctly or guards recognize fraud</li>
<li><strong>Temporal Windows</strong>: Boss absence creates single opportunity for credential theft</li>
</ul>
<hr>
<h3 id="quest-for-glory-iii-thief-espionage-routes-qfg3"><a class="header" href="#quest-for-glory-iii-thief-espionage-routes-qfg3">Quest for Glory III: Thief Espionage Routes (QFG3)</a></h3>
<p><strong>Setup</strong>: In QFG3, the Thief class has unique infiltration mechanics available throughout the war/siege narrative. Unlike the Fighters diplomatic routes or Wizards magical solutions, the Thief can steal critical items through stealth-based penetration of enemy territory at night. These are parallel to—rather than replacements for—the main diplomatic quest lines.</p>
<p><small>Source: qfg3-gamefaqs-cyricz.txt, lines 2963-2970 — “Wait until nighttime and return to the Laibons hut… Go outside the hut and go back inside. Youre supposed to climb in through a crack in the wall.”</small></p>
<p><small>Source: qfg3-gamefaqs-cyricz.txt, lines 2996-2998 — “Infiltrate the Chiefs Hut by crawling under it… The panther is outside the door. Itll be easier if you feed it some meat first (5), but you can also just dodge and jump through tightrope.”</small></p>
<pre><code>THIEF INFILTRATION ROUTE A: Laibon's Hut - Steal Magic Drum
OBJECTIVE: Obtain Magic Drum without diplomatic acquisition (Fighter receives it from Laibon after Warrior Initiation)
PHASE 1 - TIMING WINDOW IDENTIFICATION:
Requirement: Wait until NIGHTTIME in game clock cycle
Action: Monitor sun position (Special icon → hourglass menu)
Constraint: Must be night; daytime infiltration fails immediately
PHASE 2 - PERIMETER BREACH (Crack Exploitation):
Location: Laibon's Hut exterior, Simbani Village
Obstacle: Normal door guarded/patrolled during night hours
Sensory Exploitation: Crack in wall visible but requires Fine Dagger to widen
Action Sequence:
- Exit hut area → Walk around building to find crack in mud-brick wall
- USE Fine Dagger on crack → creates entry point sized for Thief character model only
- CRAWL through crack while SNEAK mode active (Stealth stat checked)
PHASE 3 - INTERIOR NAVIGATION (Hidden Compartment Access):
Interior State: Laibon sleeping; Magic Drum displayed in locked compartment
Action Sequence:
- Move silently through hut interior (Sneak verb must remain active)
- APPROACH shelf/altar where Drum is stored (no key needed—compartment is unlocked for narrative reason: Laibon trusts it's safe)
- TAKE Magic Drum → Item added to inventory without triggering alarm
PHASE 4 - EGRESS (Reverse Entry):
Exit Method: Same crawl-out through crack in wall
Risk Assessment: If awakened during exit → immediate combat failure state
Result: Possession of Magic Drum via theft rather than gift
THIEF INFILTRATION ROUTE B: Leopardmen Chief's Hut - Steal Spear of Death
OBJECTIVE: Obtain Spear of Death by stealth instead of peaceful exchange after returning Magic Drum
PHASE 1 - ACCESS GAIN (Nighttime Village Entry):
Prerequisite: Already know path to Leopardmen Village (via Johari guidance or Wizard/Fighter route)
Timing: Must be night; panther guard less active
Constraint: If discovered → combat with Chief or panther
PHASE 2 - PANTHER GUARD BYPASS:
Obstacle: Panther blocks hut entrance door
Sensory Exploitation Options:
OPTION A (Preferred - Safer): Feed Meat to Panther
- Prerequisite: Carry raw meat in inventory
- Action: USE Meat on ground at panther feet
- Result: Panther distracted eating; guard effectively removed for ~30 seconds
- Points: +5 puzzle points demonstrated
OPTION B (Risky - Stealth Check): Dodge/Past Through Timing Window
- Requirement: High Agility and Stealth stats
- Pattern: Panther patrol has predictable left-right movement cycle
- Action: Time movement between patrols using tightrope mechanics
- Failure State: Attack initiated if caught in middle of crossing
PHASE 3 - INTERIOR THREATS (Monkey Distraction System):
THREAT A: Noise-Making Monkey Inside Hut
Discovery: Upon entering, player hears monkey squeaking/movements
Mechanical Effect: If monkey continues making noise → wakes sleeping Chief → combat/failure
Solution Pattern (Sensory Exploitation):
- Locate food items on shelves (Fruit)
- USE Fruit to feed monkey → monkey occupied eating for extended duration
- Additional points (+5) for freeing monkey into jungle after taking spear
THREAT B: Chief's Sleeping Position Blocks Spear Access
Observation: Chief sprawled across floor directly beneath hanging spear
Solution Sequence:
- Crawl under hut entrance (Thief-specific action not available to other classes)
- Move around Chief without stepping on floorboards that creak
- Approach wall where Spear of Death mounted
PHASE 4 - TARGET ACQUISITION:
Action: TAKE Spear of Death from wall mount
Points Awarded: +10 for successful theft WITHOUT waking Chief
Risk: If Chief awakens during theft attempt → immediate combat initiated with unfavorable odds
CRITICAL DISTINCTION FROM FIGHTER ROUTE:
Fighter's Approach (Diplomatic Exchange):
- Complete Warrior Initiation trials
- Marry Johari through bride-price ceremony
- Return Magic Drum to Leopardmen Chief in person
- Negotiate peaceful return of Spear of Death
- Points earned honorably; maintains narrative of preventing war
Thief's Approach (Espionage Operations):
- Infiltrate Laibon's Hut at night → steal Magic Drum first
- Enter Leopardmen Village under cover of darkness
- Defeat panther guard through sensory exploitation (meat distraction)
- Bypass monkey security by feeding fruit
- Steal Spear of Death from Chief's hut with Stealth checks
- Points earned through skill demonstration, not honor
BOTH PATHS ACHIEVE SAME NARRATIVE OUTCOME: Peace conference possible because both artifacts recovered. The Thief simply demonstrates class-specific mechanics (stealth, lockpicking, timing windows) rather than Fighter's combat/trials or Wizard's magical solutions.
WHY IT'S CORPORATE INFILTRATION (NOT SIMPLE STEALTH PUZZLE):
MULTIPLE LAYERS OF SECURITY:
- Layer 1: Temporal restriction (nighttime only—guards/monsters different behavior patterns)
- Layer 2: Physical barrier exploitation (crack in wall requires Thief-size model + tool use)
- Layer 3: Interior guard AI (panther with detectable patrol cycles, exploitable via feeding)
- Layer 4: Secondary threat system (monkey noise alert mechanism)
- Layer 5: Target accessibility (requires navigating around sleeping NPC without triggering awareness)
BEHAVIORAL ROLE-PLAY REQUIREMENT (THIEF IDENTITY):
Must maintain Sneak verb active throughout entire sequence. Unlike SQ3's janitor disguise where player PERFORMS duties, Thief infiltration requires PLAYER TO NEVER ACT like a non-thief—continuous stealth mode demonstrates class specialization as core mechanic.
TEMPORAL WINDOW DEPENDENCIES:
- Laibon's Hut theft must occur at night but BEFORE Magic Drum given back diplomatically (inventory conflict)
- Chief's Hut infiltration has dual constraints: nighttime requirement + panther patrol cycle timing
- Monkey feeding creates extended window but still time-bound before natural awakening
PARALLEL TO SQ3 ARCHITECTURE:
Shared Pattern with SpaceQuest III:
- SQ3: Invisibility belt → Janitor disguise → Maintain by vaporizing cans → Photocopy credentials → Steal keycard during absence → Combine authentications at final door
- QFG3 Thief: Nighttime entry → Crack wall infiltration → Feed panther for access window → Distract monkey with fruit → Navigate sleeping guard room → Extract target item
Both use multi-stage barriers where each layer requires different solution (temporal + physical + behavioral avoidance + sensory exploitation). The core mechanic of "bypass security not through confrontation but through systematic barrier removal" is identical despite vastly different narrative contexts.
</code></pre>
<p><small>Source: qfg3-gamefaqs-cyricz.txt, lines 2958-2971 — Thief Laibons Hut infiltration sequence</small></p>
<p><small>Source: qfg3-gamefaqs-cyricz.txt, lines 2991-3004 — Leopardmen Chief hut stealth entry with panther and monkey obstacles</small></p>
<hr>
<h3 id="indy1-corridor-guard-disguise-system-servantofficer-uniforms"><a class="header" href="#indy1-corridor-guard-disguise-system-servantofficer-uniforms">INDY1: Corridor Guard Disguise System (Servant/Officer Uniforms)</a></h3>
<p><small>Source: walkthrough-king.txt, lines 161-188</small></p>
<p><strong>Setup</strong>: Castle Brunwald contains multiple Nazi guards patrolling corridors on the ground floor and 2nd floor. Each guard presents a blocking condition that can be bypassed through three distinct methods: direct combat (violence path), dialogue negotiation (persuasion path), or wearing appropriate disguise uniforms. Two uniform types exist in circulation: servant uniform (access to lower-security areas) and officers uniform (grants high-level access, requires brass key to unlock).</p>
<p><strong>Blocking Condition - Multi-Layer Security</strong>: Guards patrol corridors on two floors with conditional detection behaviors based on player appearance:</p>
<ul>
<li>Ground floor corridor: Drunk guard + patrolling guard + armored closet area</li>
<li>2nd Floor: West corridor guard (patrols east-west), additional guards at doorways</li>
<li>Each guard responds differently depending on whether Indy wears no uniform, servant clothes, or officers attire</li>
</ul>
<p><small>Source: walkthrough-king.txt, lines 166-169 — “There is another guard in the corridor to the west, and there are 3 ways to deal with him. Dressed as Indy, you can talk to him (1, 2, 2)… or… change into the servants uniform, then talk to him (1, 1, 3, 2)”</small></p>
<p><strong>Solution Chain — Uniform Acquisition Sequence</strong>:</p>
<p>PHASE A - SERVENT UNIFORM (Ground Floor, Lines 161-164):</p>
<ol>
<li>Navigate past initial guard via combat or dialogue negotiation</li>
<li>Enter closet room on east side of green carpet area</li>
<li>TAKE servant uniform from unlocked storage (officers uniform locked here—requires key)</li>
<li>CHANGE INTO servant costume at closet or any accessible wardrobe</li>
<li>Return to corridor, approach guards wearing servant disguise</li>
<li>Guards accept lower-priority dialogue tree (different conversation options available)</li>
</ol>
<p>PHASE B - OFFICERS UNIFORM REQUIREMENTS (2nd Floor Loop, Lines 174-183):</p>
<ol>
<li>Ascend to 2nd floor, follow corridor east, enter northern room</li>
<li>Take 50 Marks from chest in this room</li>
<li>Return south, navigate through west-patrolling guard (now bypassable as servant)</li>
<li>Enter western door when corridor turns north</li>
<li>Open chest → find OFFICER UNIFORM package inside</li>
</ol>
<p><small>Source: walkthrough-king.txt, lines 179-180 — “Open the chest and look inside to get a uniform. Look at it to find a brass key.”</small></p>
<ol start="6">
<li>INSPECT uniform in inventory → discover BRASS KEY hidden inside (essential item for unlocking)</li>
<li>Return downstairs to ground floor closet where officers uniform was originally locked</li>
<li>USE brass key on closet lock</li>
<li>TAKE officers uniform (now unlocked) into inventory</li>
</ol>
<p>PHASE C - DISGUISE ACTIVATION (2nd Floor Activation, Lines 183-184):
10. Ascend back to 2nd floor room containing 50 Marks chest (has change wardrobe option)
11. CHANGE INTO officers uniform at this location
12. Exit through alternate door in same room</p>
<p>PHASE D - HIGH-LEVEL ACCESS GRANTED (Lines 184-187):
13. Encounter guard past exit door—new dialogue options available as officer: TALK (option 2, 2, 3) vs combat
14. Continue north and east through previously inaccessible passages
15. Enter northern office door—guard allows access based on officer status recognition</p>
<p><small>Source: walkthrough-king.txt, lines 186-187 — “Dressed as an officer, talk to this guy (2, 2, 3)… If you were dressed as an officer, this conversation will help you later on.”</small></p>
<ol start="16">
<li>Navigate past guards who would have blocked combat/required payment when wearing civilian clothes</li>
<li>Maintain officer disguise through security zones (guards defer to authority rather than challenge)</li>
</ol>
<p><strong>Why Its Corporate Infiltration Disguise Layering</strong>: Unlike simple Sensory Exploitation (single vulnerability attack like “feed dog boar”), this puzzle implements MULTI-STAGE AUTHENTICATION where each disguise tier unlocks progressively access patterns:</p>
<ul>
<li><strong>Tier 1 (No uniform)</strong>: Guards respond with hostility—requires combat or monetary payment (15+ marks per guard)</li>
<li><strong>Tier 2 (Servant uniform)</strong>: Guards recognize lower status—different dialogue, no payment required, but limited zone entry</li>
<li><strong>Tier 3 (Officer uniform)</strong>: Guards recognize authority—complete corridor access, privileged conversations that advance plot</li>
</ul>
<p>The locked uniform requiring brass key demonstrates REDUNDANT AUTHENTICATION similar to SQ3s final door (keycard + photo scan). Player must acquire ITEM FROM LOCATION A (brass key in officers package) → unlock RESTRICTION AT LOCATION B (ground floor closet lock) → obtain ITEM C (officers uniform) → activate at LOCATION D (2nd floor wardrobe) → gain ACCESS PATTERN E (corridor passages previously blocked by guards).</p>
<p><strong>Behavior Verification Mechanic</strong>: Unlike SQ3 where vaporizing cans continuously tests whether youre “really a janitor,” the disguise system here uses CONTEXTUAL DIALOGUE VERIFICATION. Guards dont periodically check if youre a “real officer”—instead, they recognize uniform type at first encounter and modify their response accordingly. The verification happens through available conversation trees (officer gets options 2-2-3, servant gets options 1-1-3-2), not behavioral performance checks.</p>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../puzzles/escalating-combat-progression.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../puzzles/predator-chase-escape.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../puzzles/escalating-combat-progression.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../puzzles/predator-chase-escape.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
</nav>
</div>
<template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
<template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
<template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
<template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
<template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_line_numbers = true;
</script>
<script>
window.playground_copyable = true;
</script>
<script src="../ace-2a3cd908.js"></script>
<script src="../mode-rust-2c9d5c9a.js"></script>
<script src="../editor-16ca416c.js"></script>
<script src="../theme-dawn-4493f9c8.js"></script>
<script src="../theme-tomorrow_night-9dbe62a9.js"></script>
<script src="../elasticlunr-ef4e11c1.min.js"></script>
<script src="../mark-09e88c2c.min.js"></script>
<script src="../searcher-c2a407aa.js"></script>
<script src="../clipboard-1626706a.min.js"></script>
<script src="../highlight-abc7f01d.js"></script>
<script src="../book-a0b12cfe.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

View File

@@ -0,0 +1,711 @@
<!DOCTYPE HTML>
<html lang="en" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Cross-Realm Logistics - Puzzle Design Knowledge Base</title>
<!-- Custom HTML head -->
<meta name="description" content="A taxonomy of puzzle design patterns from classic point-and-click adventure games">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon-de23e50b.svg">
<link rel="shortcut icon" href="../favicon-8114d1fc.png">
<link rel="stylesheet" href="../css/variables-8adf115d.css">
<link rel="stylesheet" href="../css/general-2459343d.css">
<link rel="stylesheet" href="../css/chrome-ae938929.css">
<link rel="stylesheet" href="../css/print-9e4910d8.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../fonts/fonts-9644e21d.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css">
<link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css">
<link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
window.path_to_searchindex_js = "../searchindex-c567150f.js";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc-35c178c7.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="mdbook-body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
sidebar_toggle.checked = false;
}
if (sidebar === 'visible') {
sidebar_toggle.checked = true;
} else {
html.classList.remove('sidebar-visible');
}
</script>
<nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="mdbook-page-wrapper" class="page-wrapper">
<div class="page">
<div id="mdbook-menu-bar-hover-placeholder"></div>
<div id="mdbook-menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
</label>
<button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
</button>
<ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
</ul>
<button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
</button>
</div>
<h1 class="menu-title">Puzzle Design Knowledge Base</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb" title="Git repository" aria-label="Git repository">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb/edit/main/src/puzzles/cross-realm-logistics.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
<span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
</a>
</div>
</div>
<div id="mdbook-search-wrapper" class="hidden">
<form id="mdbook-searchbar-outer" class="searchbar-outer">
<div class="search-wrapper">
<input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
<div class="spinner-wrapper">
<span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
</div>
</div>
</form>
<div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
<div id="mdbook-searchresults-header" class="searchresults-header"></div>
<ul id="mdbook-searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="mdbook-content" class="content">
<main>
<h1 id="cross-realm-logistics-puzzle"><a class="header" href="#cross-realm-logistics-puzzle">Cross-Realm Logistics Puzzle</a></h1>
<h2 id="mechanic-definition"><a class="header" href="#mechanic-definition">Mechanic Definition</a></h2>
<p>The player must manage items across multiple locations/worlds/states—transporting items between places, combining ingredients from different sources, or ensuring items survive transitions. The puzzle tests spatial and temporal thinking about inventory: what to carry, what to acquire, and when.</p>
<p>“Realms” can be literal (dimensions, afterlife, parallel worlds) or figurative (factions, time periods, game states).</p>
<h2 id="information-architecture"><a class="header" href="#information-architecture">Information Architecture</a></h2>
<p><strong>Conveyance Method</strong>: Requirement discovery through exploration</p>
<ul>
<li>Player learns what ingredients are needed through books, dialogue, or failed attempts</li>
<li>Player must discover where each ingredient is located across different realms</li>
<li>Player must determine how to transport/combine items appropriately</li>
</ul>
<p><strong>Player Action Pattern</strong>:</p>
<ol>
<li>Learn whats needed (through text or failed attempts)</li>
<li>Determine where each component is located</li>
<li>Travel to each location and acquire items</li>
<li>Transport items to combination point</li>
<li>Execute combination → solution achieved</li>
</ol>
<p><strong>Core Mechanic</strong>: The puzzle tests forward planning and spatial awareness. Players must remember what theyll need in future locations while managing limited inventory space.</p>
<h2 id="design-rationale"><a class="header" href="#design-rationale">Design Rationale</a></h2>
<ul>
<li>Rewards planning—thinking ahead about future requirements</li>
<li>Creates world interconnection—realms feel connected through items flowing between them</li>
<li>Adds strategic depth—inventory management becomes meaningful</li>
<li>Enables payoff moments—items from early exploration save you later</li>
</ul>
<h2 id="why-its-effective"><a class="header" href="#why-its-effective">Why Its Effective</a></h2>
<p>The satisfaction comes from “just in time” inventory management—having the right item when you need it because you planned ahead. This rewards thorough exploration without punishing missed content.</p>
<h2 id="mechanic-variations"><a class="header" href="#mechanic-variations">Mechanic Variations</a></h2>
<div class="table-wrapper">
<table>
<thead>
<tr><th>Variation</th><th>Realm Type</th><th>Logistics Challenge</th></tr>
</thead>
<tbody>
<tr><td>Dimensional</td><td>Parallel worlds</td><td>Items may not exist in all realms</td></tr>
<tr><td>Temporal</td><td>Time travel</td><td>Items must be retrieved before theyre “taken”</td></tr>
<tr><td>Faction-based</td><td>Political states</td><td>Items must be traded between hostile groups</td></tr>
<tr><td>State-based</td><td>Game states</td><td>Items only available in certain conditions</td></tr>
</tbody>
</table>
</div>
<h2 id="generic-example-structure"><a class="header" href="#generic-example-structure">Generic Example Structure</a></h2>
<p><strong>Goal</strong>: Complete [Crafting/Activation] requiring [Ingredients]</p>
<p><strong>Information Flow</strong>:</p>
<ul>
<li>Player learns through text: “The spell requires coal, egg, and hair”</li>
<li>Player discovers locations: Coal at [Location A], Egg at [Location B], Hair at [Location C]</li>
<li>Player must travel to each location and collect items</li>
<li>Player must transport items to [Location D] for combination</li>
<li>Player executes combination → spell complete</li>
</ul>
<p><strong>The puzzle</strong>: Managing items across locations with limited inventory space and no explicit tracking of whats needed.</p>
<h2 id="adventure-game-implementation"><a class="header" href="#adventure-game-implementation">Adventure Game Implementation</a></h2>
<p>The limited action set creates specific challenges:</p>
<ul>
<li>WALK between realms—travel has cost/time</li>
<li>Inventory management—limited space forces decisions</li>
<li>USE items in correct sequence/location</li>
<li>The puzzle rewards players who explore thoroughly early</li>
</ul>
<p>This puzzle tests: “Can I think spatially about where items are and plan my inventory accordingly?”</p>
<hr>
<h2 id="game-examples"><a class="header" href="#game-examples">Game Examples</a></h2>
<h3 id="indiana-jones-fate-of-atlantis---orichalcum-bead-management-indy2"><a class="header" href="#indiana-jones-fate-of-atlantis---orichalcum-bead-management-indy2">Indiana Jones: Fate of Atlantis - Orichalcum Bead Management (INDY2)</a></h3>
<p><strong>Problem</strong>: Throughout the game, Indy must collect nine orichalcum beads from multiple geographically dispersed locations. Beads are required for various puzzles but also vulnerable to being lost through path-dependent events. Additionally, some puzzle solutions (the golden box, Nur-Ab-Sals necklace) REQUIRE specific bead counts at exact moments, forcing precise inventory tracking across the entire playthrough.</p>
<p><small>Source: walkthroughking_ashley_walkthrough.html — “Pick up the shiny bead” (Tikal), “put the orichalcum bead in the eels head to free it from the ice” (Iceland), and multiple later references including “put the two orichalcum beads in the box and close the lid.”</small></p>
<p><strong>Beac Acquisition Path (Multiple Locations)</strong>:</p>
<pre><code>BEAD 1-2: Iceland + Tikal (early game, guaranteed)
BEAD 3: Monte Carlo sunstone puzzle (all paths converge here)
BEAD 4-5: Atlantis golden box retrieval (mid-game)
BEAD 6-7: Labyrinth exploration (varies by path—Team/Wits get them different ways)
BEAD 8: Fists path exclusive combat encounters OR Wits/Team puzzle solution
BEAD 9: Very late game, often requires backtracking with specific inventory setup
&lt;small&gt;Source: walkthroughking_ashley_walkthrough.html — "Pick up the worldstone and Sternhart's staff...put the two orichalcum beads in the box" (Atlantis section)&lt;/small&gt;
</code></pre>
<p><strong>Critical Inventory Management Moments</strong>:</p>
<ol>
<li>
<p><strong>Golden Box Loading</strong>: In Atlantis, player must place beads into golden box:</p>
<ul>
<li>If too few beads collected → Cannot complete puzzle</li>
<li>If ALL beads used earlier → Irrecoverable failure state possible</li>
</ul>
</li>
<li>
<p><strong>Orichalcum Detector Calibration</strong>: The amber fish detector points toward orichalcum:</p>
<ul>
<li>Player must hide ONE bead in gold box + close lid (detector then ignores inventory)</li>
<li>This allows detector to locate HIDDEN beads in environment</li>
<li>WRONG ORDER (use detector before hiding bead) → Detector points at player, fails</li>
</ul>
</li>
</ol>
<p><small>Source: walkthroughking_ashley_walkthrough.html — “put the two orichalcum beads in the box and close the lid…Use the fish and it will point at Sophias necklace”</small></p>
<ol start="3">
<li><strong>Path-Dependent Loss</strong>: Wits path uses bead to charge statue for truck escape:
<ul>
<li>Consumes one bead permanently</li>
<li>Team/Fists paths have alternative solutions without bead cost</li>
<li>Player must know which paths bead economy theyre on</li>
</ul>
</li>
</ol>
<p><strong>Why Its Cross-Realm Logistics</strong>:</p>
<ol>
<li><strong>Multiple Geographic Realms</strong>: Beads sourced from Iceland, Tikal, Monte Carlo, Crete, Atlantis—each realm requires separate journey</li>
<li><strong>Inventory Planning Required</strong>: Nine beads scattered across 6+ distinct locations; player must track acquisition state without explicit progress indicator</li>
<li><strong>Consumption vs. Preservation Trade-offs</strong>: Some puzzles consume beads (Wits path statue charge), others require bead storage (golden box, detector calibration)</li>
<li><strong>Backtracking Penalties</strong>: Forgetting to collect bead at Location A = potentially impossible late-game puzzle without re-visiting with correct inventory setup</li>
</ol>
<p><strong>Distinction from Multi-Faceted Plan</strong>: MFP is about parallel requirement discovery for single immediate solution. Here, beads are collected INDEPENDENTLY across hundreds of gameplay minutes, then SYNTHESIZED in multiple separate puzzles (golden box, final machine operation) at the end—true long-term logistics.</p>
<hr>
<h3 id="kings-quest-vii-crystal-of-sunlight-multi-chapter-transport-chain-kqvii"><a class="header" href="#kings-quest-vii-crystal-of-sunlight-multi-chapter-transport-chain-kqvii">Kings Quest VII: Crystal of Sunlight Multi-Chapter Transport Chain (KQVII)</a></h3>
<p><strong>Problem</strong>: Lady Ceres requires “crystal of purest sunlight” to complete transformation spell in Chapter 6. However, obtaining and activating this crystal requires traveling through multiple distinct game chapters and realms over extensive playtime, with the item itself being useless until the very final step.</p>
<p><small>Source: walkthroughking_kq7.html:95-98</small></p>
<p><strong>Item Acquisition Chain (Chapters 3-5)</strong>:</p>
<pre><code>PHASE 1 - Crystal Retrieval (Chapter 4/5 transition):
Starting Position: Etheria realm (reached via Horseman's fife after Chapter 4)
Step 1: Return from Etheria to Malicia's house area:
- South → west from Etheria mountain peak
- Jump down bottom-left rainbow → returns to desert area
Step 2: Infiltrate Malicia's house (stealth timing puzzle):
- Back of house, examine green vine for hidden hole
- Timing requirement: walk away if dog barks, wait for silence window
- Enter during quiet period when patrol absent
Step 3: Navigate house interior to lamp room:
- Climb up into house from basement entry
- Malicia/dog return pattern must be timed (listen for cues)
- Go back down when they approach, up again when they leave
Step 4: Collect crystal from lamp fixture in bottom right of room:
- Crystal appears as generic item initially
- No indication yet that it needs sunlight exposure
Phase 2: Exit sequence requires fife use + rainbow transport (timing critical)
</code></pre>
<p><strong>PHASE 3 - Sunlight Activation (Chapter 5/6 transition)</strong>:</p>
<pre><code>Step 5: From Malicia's house, blow Horseman's fife → escape to desert via rainbow transport
- Jump down top-left rainbow specifically (different from entry rainbow!)
Step 6: Navigate沙漠 back to temple building:
- North twice from desert spawn point
- Enter door of ancient structure
Step 7: Find beam of sunlight streaming through upper window:
- Environmental clue: bright spot on floor indicating light source position
Step 8: Hold crystal IN the beam of sunlight (inventory use action):
- Crystal transforms/activates during this step
- Now becomes "charged" version usable for Maab rescue puzzle
PHASE 4 - Final Application (Chapter 6):
Step 9: Transport now-activated crystal back through realms via fife/rainbow/harp travel
Step 10: Access Isle of Dreams cave where Lady Maab imprisoned in ice
Step 11: Use activated crystal on ice block → Maab freed, puzzle resolved
</code></pre>
<p><strong>Why Its Cross-Realm Logistics</strong>:</p>
<ol>
<li>
<p><strong>Extended Geographic Spread</strong>: Crystal journey spans at least 4 distinct zones:</p>
<ul>
<li>Etheria (starting point after Chapter 4)</li>
<li>Malicias house (infiltration area near starting desert)</li>
<li>Desert temple building (sunlight activation zone)</li>
<li>Isle of Dreams cave (final application in late game)</li>
</ul>
</li>
<li>
<p><strong>Long-Term Item Maintenance</strong>: Crystal must be:</p>
<ul>
<li>Collected during Chapters 4-5 transition</li>
<li>Maintained in inventory through Chapter 5 completion</li>
<li>Transported to proper realm for final use</li>
<li>NOT consumed or lost to other puzzles (no backup crystals exist)</li>
</ul>
</li>
<li>
<p><strong>Multi-Transport System Dependency</strong>: Requires mastery of three separate transportation mechanics:</p>
<ul>
<li>Horsemans fife (immediate realm shift via magic instrument)</li>
<li>Rainbow bridges (specific directional jumps between rainbow types)</li>
<li>Harp transportation (Etheria → Fates travel, potentially needed for repositioning)</li>
</ul>
</li>
<li>
<p><strong>Temporal Span</strong>: Crystal obtained potentially 3-5 chapters before activation, 6+ chapters before final use in Maab rescue. Player must remember:</p>
<ul>
<li>Item exists and wasnt used elsewhere</li>
<li>Item has hidden potential (sunlight charging not obvious from description)</li>
<li>Activation requires specific environmental condition (sunbeam location)</li>
</ul>
</li>
</ol>
<p><strong>Backtracking Failure State</strong>: If player somehow loses crystal or uses it prematurely before sunlight activation, puzzle becomes impossible without save/reload. No second crystal exists anywhere in game world. This makes inventory management CRITICAL rather than optional.</p>
<p><strong>Connection to Other Puzzles</strong>: The Horsemans fife itself is obtained from Chapter 4 Horseman puzzle chain—the same transport item needed for crystal logistics comes from a separate meta-puzzle construction, creating cross-dependency between puzzle types.</p>
<hr>
<h3 id="kings-quest-vii-werebeast-salve-ingredient-maintenance-kqvii"><a class="header" href="#kings-quest-vii-werebeast-salve-ingredient-maintenance-kqvii">Kings Quest VII: Werebeast Salve Ingredient Maintenance (KQVII)</a></h3>
<p><strong>Problem</strong>: Jackalope fur collected in Chapter 1 must be preserved across 3+ chapters until were-beast salve can be crafted in Chapter 5. Represents inventory logistics where early-game item only becomes functional through mid-game synthesis.</p>
<p><small>Source: walkthroughking_kq7.html:67, 91-92</small></p>
<p><strong>Logistics Chain</strong>:</p>
<pre><code>CHAPTER 1 - Initial Acquisition (Desert):
- During hunting horn rabbit hole sequence (same as glasses puzzle)
- Collect jackalope fur from cactus near animated rabbit burrow
- Item stored in inventory with no immediate puzzle solution requiring it
- Multiple other items collected during same exploration (glasses, later traded to mouse)
INTERCHAPTERS 2-4 - Inventory Maintenance:
- Fur remains in inventory through transformation cure sequence (Chapter 2)
- Maintained through Chapter 3 town puzzles (bird/mask/trades with Fernando and Ersatz)
- Carried through Chapter 4 graveyard sequences without consumption
CHAPTER 5 - Item Activation and Application:
Step 1: From mirror maze, obtained magic statuette in Chapter 3
- Statuette maintained through Chapters 3-4 while completing other puzzles
Step 2: Visit snake merchant with magic statuette
- Trade statuette for were-beast salve liquid (consumes statuette permanently)
Step 3: Combine jackalope fur + werebeast salve in inventory
- Creates functional werebeast potion
- Jackalope fur was CRITICAL component; without it, trade with merchant useless
Step 4: Use combined potion on self before running through weed monster territory
- Transforms player temporarily to outrun vegetation threat
</code></pre>
<p><strong>Why Its Cross-Realm Logistics (Simple Form)</strong>:</p>
<ol>
<li><strong>Extended Temporal Separation</strong>: Fur collected in Chapter 1 ≈15+ minutes of gameplay, used in Chapter 5 final puzzle sequence = potentially 30-45 minutes later in playtime</li>
<li><strong>Zero Immediate Feedback</strong>: No indication when collecting fur that it matters. Player discovers its value only when encountering snake merchant much later</li>
<li><strong>Permanent Consumption Risk</strong>: If player deletes or loses inventory during Chapters 2-4 (via death, intentional reset, confusion), puzzle becomes impossible—no second jackalope location</li>
<li><strong>No Progress Marker</strong>: Game provides no hint that “jackalope fur = required” until Chapter 5 trade opportunity appears</li>
</ol>
<p><strong>Distinction from Long-Term Multi-Faceted Plan</strong>: While both span time, this emphasizes LOGISTICS (item maintenance across boundaries) over discovery synthesis. Player isnt combining multiple independently-discovered pieces in one location—theyre maintaining a single piece across multiple gameplay contexts until synthesis opportunity arises.</p>
<hr>
<h3 id="spacequest-iv-multi-time-period-item-transport-sq4"><a class="header" href="#spacequest-iv-multi-time-period-item-transport-sq4">SpaceQuest IV: Multi-Time-Period Item Transport (SQ4)</a></h3>
<p><strong>Problem</strong>: Roger must travel through four different Space Quest game worlds (XII, X, I, and back to XII) collecting items in each that are only usable in other time periods. The game requires remembering what to grab where across a 60+ minute playthrough spanning multiple distinct gameplay environments with no inventory transfer warnings or guidance.</p>
<p><small>Source: gamefaqs-tricrokra-archive.html, lines 720-775 — Full item list documentation shows cross-period dependencies</small></p>
<p><small>Source: gamerwalkthroughs.html — Walkthrough emphasizes multi-world navigation and item carry-through requirements</small></p>
<pre><code>TIME PERIOD VISIT SEQUENCE WITH INVENTORY MANAGEMENT:
PERIOD 1 - SpaceQuest XII (Future/Xenon): [Initial Acquisitions]
Location: Future Xenon wasteland, first area encountered
Items Collected Here (Critical for LATER periods):
A. Rope → Used immediately to catch bunny, NOT carried forward
B. Battery (from bunny) → CRITICAL: Must keep in inventory until FINAL XII return
- Purpose: Power PocketPal later at Vohaul's base
- Risk: Players might discard if it seems useless early game
C. Jar of Green Acid → CRITICAL: Required when returning to XII for laser tunnel door
Items "Optional" Collectibles:
D. Unstable Ordnance (nitroglycerin cylinder) → Must return to tank, not carried
KEY LOGISTICS DECISION: Both Battery and Acid must SURVIVE multiple time period transitions without consumption or discard. No gameplay feedback confirms these are important before XII return.
PERIOD 2 - SpaceQuest X (Estros Planet): [Information Gathering]
Location: Strange pre-human alien world with giant bird nests
Items/Info Collected:
A. Gum Wrapper Code Fragments → Physical item carrying data, not consumable
- Contains 3 symbols needed for time pod navigation code
- Must be remembered/examined later in Mall sequence
- Combined with hint book data = complete Ulence Flats destination
Critical Decision: This is INFORMATION, not an "inventory item" per se. Player must mentally retain the symbol data through subsequent locations.
PERIOD 3 - SpaceQuest X (Galaxy Galleria Mall): [Multi-Requirement Acquisition]
Location: Massive shopping mall with multiple stores and minigames
Items Collected (Complex Logistics):
A. Cigar → CRITICAL: Needed in XII for laser visibility smoke
- Obtained when fired from burger job (must remember to retrieve!)
- Walkthrough explicitly warns: Cannot get beyond this point
B. Matches → ERROR CORRECTION: Actually collected in SQ I, not Mall
- This shows player confusion potential—different walkthroughs may misplace items
C. Hint Book (Space Quest IV manual) → Physical item with embedded data
- Page 4: Ulence Flats time pod code (completes gum wrapper info)
- Page 7: Supercomputer access code "6965847669" for final door
- Must be consulted/referenced across multiple subsequent periods
D. PocketPal Connector → CRITICAL technical component
- Bought at Electronics store (Hz. So Good/Radio Shock)
- Must be SPECIFIC plug type matching XII computer room socket
- Combined with Battery (from period 1) + PocketPal device = functional terminal
Time Pressure Element: Must lure police away from time pod through Skate-O-Rama roof escape before accessing pod—police arrival triggered by buying connector.
PERIOD 4 - SpaceQuest I (Ulence Flats): [Critical Item Recovery]
Location: Retro-styled alien planet recreation of original SQ1 setting
Items Collected:
A. Matches from bar counter → CRITICAL for XII laser puzzle
- Requires clearing biker gang first (mini-chase sequence)
- Used with Cigar at laser tube to reveal invisible beams
- Classic cross-period dependency: Item in I for use in XII
PERIOD 5 - SpaceQuest XII Return (Final Confrontation): [Synthesis Phase]
Location: Back at Vohaul's base, previously visited environment now fully unlockable
INVENTORY SYNTHESIS REQUIRED (All items must still be held):
✓ Green Acid (from Period 1): Unlock laser tunnel door
✓ Cigar + Matches: Combined to create smoke → reveal lasers
✓ Battery + PocketPal + Connector: Power computer terminal, map droid locations
✓ Hint Book Page 7 Code: Enter supercomputer access code ("6965847669")
✓ Mental Retention of laser degree codes: From visible angles after smoke
SUCCESS CONDITION: All cross-period items maintained through complete playthrough. FAILURE STATES include discarding "seemingly useless" battery/acid early, or forgetting cigar collection point during mall chaos.
WHY IT'S CROSS-REALM LOGISTICS:
1. **Temporal Span**: Items collected at start of game (0-5 minutes) used at end (60+ minutes), through THREE intervening completely-different game worlds
2. **No Progress Tracking**: Game provides NO "you need X items for future" checklist. Pure player memory and forward planning
3. **Multiple Realm Transitions**: Four distinct Space Quest titles' aesthetics/rules—item must survive all transitions
4. **Critical Path Items Appear "Optional"**: Green acid jar, cigar butt, and battery have no immediate purpose when first obtained, making their importance unclear
5. **Combination at End Requires All Parts**: Final sequence is pure synthesis: items from period 1 + info from period 2 + gear from period 3 + tools from period 4 = completion
6. **No Retry Mechanism for Forgotten Items**: Unlike inventory management puzzles where you can revisit old areas, this is STRICTLY LINEAR progression with one-time collection points. Miss the cigar in the mall? Cannot return to get it later.
</code></pre>
<p><strong>Distinction from Multi-Faceted Plan</strong>: MFP gathers items for ONE locations puzzle. Cross-Realm Logistics requires maintaining items across ENTIRE PLAYTHROUGH through multiple environments, each providing critical components only usable elsewhere. The “Mall Sequence” (period 3) WITHIN SQ4 IS an MFP—but the OVERALL game structure is Cross-Realm Logistics spanning ALL four time periods.</p>
<hr>
<h2 id="related-types"><a class="header" href="#related-types">Related Types</a></h2>
<ul>
<li><strong>Multi-Faceted Plan</strong>: MFP gathers requirements for one immediate solution; Cross-Realm spreads acquisition over extensive gameplay</li>
<li><strong>Meta-Puzzle Construction</strong>: MPC creates strict sequential chains; Cross-Realm Logistics allows parallel collection across space/time</li>
</ul>
<hr>
<h3 id="legend-of-kyrandia-darms-scroll-dual-application-lk1"><a class="header" href="#legend-of-kyrandia-darms-scroll-dual-application-lk1">Legend of Kyrandia: Darms Scroll Dual Application (LK1)</a></h3>
<p><strong>Problem</strong>: Darm gives Brandon a single scroll with icy magic that must be used TWICE in completely separate game worlds, for unrelated puzzle types. The scroll represents classic cross-realm logistics where one item bridges multiple geographic domains and serves non-obvious future purposes beyond its immediate acquisition context.</p>
<p><small>Source: classicgamesparadise_walkthrough.html, lines 112, 183, 245 — Scroll received from Darm after quill trade; used at volcanic river AND burning branch in Faeriewood</small></p>
<p><small>Source: bonny_ploeg_walkthrough.html, line 113 — “Scroll With Icy Power - Received from Darm after youve given him the quill. Used twice: at the volcanic river and at the fiery bush.”</small></p>
<pre><code>ITEM ACQUISITION PHASE (Timbermist Woods):
Step 1 - Quill Collection Chain:
- Explore Timbermist Woods, find injured songbird near nesting area
- Songbird won't give quill until healed
- Heal bird using yellow gem (healing power from Deadwood Glade puzzle)
- Bird drops quill as reward
Step 2 - Scroll Exchange:
- Return to Darm's shack with quill in inventory
- Give quill to Darm → dialogue exchange about "stones and the altar"
- Darm writes and gives FREEZE SCROLL to Brandon
- Scroll description indicates icy/freezing magic properties
CROSS-REALM APPLICATION #1: Volcanic River Crossing (Serpent's Grotto)
Location: Cave system after Darkmouth area, before Iron Key chamber
Problem State:
- Volcanic river blocks path forward, lava too hot to cross directly
- Iron Key visible on opposite bank but unreachable
- No bridge or alternate route available
Scroll Application:
- Use Darm's scroll on volcanic river surface
- Icy magic freezes lava into solid traversable path
- Walk across frozen river, collect Iron Key
- Path remains frozen for duration sufficient to complete crossing
Critical Decision Point - Inventory Management:
&lt;small&gt;Source: classicgamesparadise_walkthrough.html, line 183 — "Make sure you don't throw away the scroll just yet; it will come in handy again later"&lt;/small&gt;
&lt;small&gt;Source: bonny_ploeg_walkthrough.html, line 63 — "Now you can drop the scroll to save space" (given AFTER Faeriewood use)&lt;/small&gt;
Player MUST recognize scroll remains CONSUMABLE-ONCE but still usable AGAIN in different context. Common player mistake: discard scroll after lava crossing due to "item used" assumption or inventory pressure.
CROSS-REALM APPLICATION #2: Burning Branch Extinguishment (Faeriewood)
Location: Faeriewood realm - separate magical dimension accessed through cave system
Problem State:
- Malcolm steals one of Zanthia's crystal balls, ruins alchemy fountain
- Missing crystal ball hidden inside burning branch/fire bush in western Faeriewood
- Flames prevent direct interaction; cannot grab ball without extinguishing fire first
Scroll Application (Second Use):
- Navigate to burning branch location (requires Faeriewood exploration)
- Use Darm's scroll on flames → icy magic extinguishes fire
- Burnt bush now accessible, missing crystal ball can be collected
- Return ball to fountain, restore Zanthia's laboratory
WHY IT'S CROSS-REALM LOGISTICS:
1. GEOGRAPHIC SEPARATION: Two applications span distinct game zones:
- Acquisition: Timbermist Woods (opening game area)
- Application 1: Serpent's Grotto volcanic cave (mid-game dungeon)
- Application 2: Faeriewood magical realm (separate dimension, late mid-game)
2. TEMPORAL SPREAD: Scroll received early (~5-10 minutes into game), used potentially 30+ minutes later across multiple world transitions
3. NO IMMEDIATE PURPOSE INDICATION: When Darm gives scroll with "stones and altar" hint, player cannot predict:
- Lava crossing requirement (Serpent's Grotto not yet visited)
- Faeriewood fire puzzle (completely separate dimension)
4. INVENTORY PRESERVATION CRITICAL: Scroll must be maintained in inventory through entire mid-game section. Discarding after first use = IMPOSSIBLE to retrieve crystal ball without save/reload.
5. MULTIPLE SOLUTION DOMAIN TYPES:
- River crossing = navigation/obstacle puzzle
- Branch fire = item retrieval/lockout puzzle
Same item solves two mechanically distinct problem types across different spatial contexts.
DISTINCTION FROM META-CONSTRUCTION:
Not sequential because scroll doesn't NEED volcanic river application first, then enable Faeriewood use. Both applications would function independently if player visited zones in opposite order (theoretically). The "logistics" is maintaining one item through multiple game states until BOTH unrelated puzzles present themselves.
POTENTIAL PLAYER FAILURE MODES:
- Discard scroll after lava freezing ("used up" assumption) → blocked from Faeriewood crystal ball
- Forget scroll exists during Faeriewood exploration → stuck on burning branch puzzle
- Use scroll incorrectly (e.g., on wrong fire source) → may consume scroll without solving intended puzzle
RELATIONSHIP TO OTHER LK1 MECHANICS:
Darm's scroll represents one of several "carry-through" items in Kyrandia I. Others include:
- Amulet gems (activated through meta-construction, used across multiple puzzles)
- Iron Key (obtained via scroll application #1, used later for castle gate)
</code></pre>
<hr>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../puzzles/truth-revelation.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../puzzles/memo-chain.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../puzzles/truth-revelation.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../puzzles/memo-chain.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
</nav>
</div>
<template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
<template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
<template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
<template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
<template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_line_numbers = true;
</script>
<script>
window.playground_copyable = true;
</script>
<script src="../ace-2a3cd908.js"></script>
<script src="../mode-rust-2c9d5c9a.js"></script>
<script src="../editor-16ca416c.js"></script>
<script src="../theme-dawn-4493f9c8.js"></script>
<script src="../theme-tomorrow_night-9dbe62a9.js"></script>
<script src="../elasticlunr-ef4e11c1.min.js"></script>
<script src="../mark-09e88c2c.min.js"></script>
<script src="../searcher-c2a407aa.js"></script>
<script src="../clipboard-1626706a.min.js"></script>
<script src="../highlight-abc7f01d.js"></script>
<script src="../book-a0b12cfe.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

View File

@@ -0,0 +1,673 @@
<!DOCTYPE HTML>
<html lang="en" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Cross-Temporal Causality - Puzzle Design Knowledge Base</title>
<!-- Custom HTML head -->
<meta name="description" content="A taxonomy of puzzle design patterns from classic point-and-click adventure games">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon-de23e50b.svg">
<link rel="shortcut icon" href="../favicon-8114d1fc.png">
<link rel="stylesheet" href="../css/variables-8adf115d.css">
<link rel="stylesheet" href="../css/general-2459343d.css">
<link rel="stylesheet" href="../css/chrome-ae938929.css">
<link rel="stylesheet" href="../css/print-9e4910d8.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../fonts/fonts-9644e21d.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css">
<link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css">
<link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
window.path_to_searchindex_js = "../searchindex-c567150f.js";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc-35c178c7.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="mdbook-body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
sidebar_toggle.checked = false;
}
if (sidebar === 'visible') {
sidebar_toggle.checked = true;
} else {
html.classList.remove('sidebar-visible');
}
</script>
<nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="mdbook-page-wrapper" class="page-wrapper">
<div class="page">
<div id="mdbook-menu-bar-hover-placeholder"></div>
<div id="mdbook-menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
</label>
<button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
</button>
<ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
</ul>
<button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
</button>
</div>
<h1 class="menu-title">Puzzle Design Knowledge Base</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb" title="Git repository" aria-label="Git repository">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb/edit/main/src/puzzles/cross-temporal-causality.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
<span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
</a>
</div>
</div>
<div id="mdbook-search-wrapper" class="hidden">
<form id="mdbook-searchbar-outer" class="searchbar-outer">
<div class="search-wrapper">
<input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
<div class="spinner-wrapper">
<span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
</div>
</div>
</form>
<div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
<div id="mdbook-searchresults-header" class="searchresults-header"></div>
<ul id="mdbook-searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="mdbook-content" class="content">
<main>
<h1 id="cross-temporal-causality-puzzle"><a class="header" href="#cross-temporal-causality-puzzle">Cross-Temporal Causality Puzzle</a></h1>
<p><strong>Information Architecture</strong>: Player actions performed in one time period create immediate, often irreversible consequences in another time period. The causal link may be explicit (direct environmental change) or implicit (historical precedent altering future state). Information about the consequence only becomes available after switching to the other time periods character.</p>
<p><strong>Player Action Pattern</strong>:</p>
<ol>
<li>Identify puzzle blocking condition in Time Period A</li>
<li>Discover that changing conditions in Time Period B could resolve it</li>
<li>Analyze what historical event/environmental factor in Period B causes Period A state</li>
<li>Switch to Period B, perform causal action</li>
<li>Return to Period A, verify consequence has manifested</li>
</ol>
<p><strong>Core Mechanic</strong>: The puzzle exploits TIME AS AN INVENTORY VARIABLE where actions are NOT constrained to the present moment—changes cascade deterministically from past→present→future (or vice versa for time-sensitive objects flushing), creating solutions that require understanding HISTORICAL CAUSALITY rather than just spatial navigation or item combination.</p>
<hr>
<h2 id="variations"><a class="header" href="#variations">Variations</a></h2>
<div class="table-wrapper">
<table>
<thead>
<tr><th>Type</th><th>Causality Pattern</th><th>Direction</th><th>Example</th></tr>
</thead>
<tbody>
<tr><td><strong>Environmental Destruction</strong></td><td>Object/terrain in past removed → disappears in future</td><td>Past→Future</td><td>Cherry tree cut down</td></tr>
<tr><td><strong>Historical Document Alteration</strong></td><td>Written content modified → changes how history records event/direction</td><td>Past→Future</td><td>Constitution text, contract signature</td></tr>
<tr><td><strong>Statue/Monument Modification</strong></td><td>Physical form of historical figure changed in past → alters memorial statue</td><td>Past→Present</td><td>George Washingtons pose</td></tr>
<tr><td><strong>Flushing Mechanism</strong></td><td>Object flushed down toilet sent to different time period → enables item progression</td><td>Any→Any</td><td>Chron-O-John inventory transfer</td></tr>
<tr><td><strong>Identity/Reputation Legacy</strong></td><td>Characters historical action becomes their defining trait → referenced in future</td><td>Past→Future</td><td>Edison family legacy</td></tr>
</tbody>
</table>
</div>
<hr>
<h2 id="game-examples"><a class="header" href="#game-examples">Game Examples</a></h2>
<h3 id="day-of-the-tentacle-freeing-laverne-via-tree-destruction-environmental-destruction"><a class="header" href="#day-of-the-tentacle-freeing-laverne-via-tree-destruction-environmental-destruction">Day of the Tentacle: Freeing Laverne via Tree Destruction (Environmental Destruction)</a></h3>
<p><strong>Problem</strong>: Laverne is stuck hanging from a kumquat tree two hundred years in the future. The tentacles guarding her wont let anyone approach the tree directly, and she cannot get down herself. No items in Bernards or Hoagies inventory can cut ropes or knock her down safely. The blocking condition appears unsolvable within the future timeline alone.</p>
<p><small>Source: swords_and_software_walkthrough.html, lines 965-973 — “John Hancock is freezing and has a nice blanket. He thinks the others would build a fire for George Washington if he were cold.”</small></p>
<pre><code>SPATIAL/TEMPORAL CONFIGURATION:
FUTURE (2020s - Bernard &amp; Laverne):
- Laverne's Chron-O-John crashed into tree top, she trapped hanging ~10 feet up
- Tentacle mansion guards control all ground-level access points
- Tree appears as mature kumquat tree (citrus fruit visible)
PAST (1795 - Hoagie):
- Same mansion location during Constitutional Convention
- Kumquat tree grows outside near outhouses
- George Washington present at inn, known for cherry tree chopping legend
- Thomas Jefferson mentions "cherry trees" as Washington's favorite to chop
CAUSALITY CHAIN ANALYSIS:
The key insight is that the SAME TREE exists in both time periods. Destroying it in the past means it cannot exist in the future—the kumquat tree Hoagie sees IS the ancestor of the tree Laverne hangs from.
THE CRITICAL CLUE (Metaphor-Literal Application):
&lt;small&gt;Source: swords_and_software_walkthrough.html, lines 965-987 — "George Washington likes to chop cherry trees."&lt;/small&gt;
Historical reference + visual trickery: The kumquat tree in 1795 must BECOME a cherry tree for George Washington to recognize and cut it down.
</code></pre>
<p><strong>Solution Chain</strong>:
<small>Source: swords_and_software_walkthrough.html, lines 1032-1108</small></p>
<p>PHASE 1 - DISCOVERY (Hoagie):</p>
<ol>
<li>Hoagie explores attic in past, finds bucket of red paint</li>
<li>Returns to kumquat tree near outhouses</li>
</ol>
<p>PHASE 2 - METAPHOR-LITERAL BRIDGE:
3. Use red paint on kumquat tree → tree bark appears crimson/wood-like
4. Return to main hall, tell George Washington about “cherry tree” outside<br>5. Washingtons historical compulsion activates: “I cannot lie—I chopped that cherry tree”</p>
<p>PHASE 3 - CROSS-TEMPORAL CAUSALITY TRIGGERED:
6. Washington cuts down the “cherry” (painted kumquat) tree with axe
7. <strong>IMMEDIATE CUTSCENE SWITCHES TO FUTURE</strong>: Lavernes tree VANISHES mid-scene
8. Laverne and Chron-O-John fall to ground—she is now free to control</p>
<pre><code>CROSS-TEMPORAL MANIFESTATION VISUALIZED:
[1795 - PAST] [2026 - FUTURE]
Hoagie finds red paint Laverne hanging, blocked
↓ ↓
Paints tree RED Tree visible in future
↓ ↓
Convinces Washington Tentacle guards watch
"cherry tree!" waiting for rescue
↓ [CAUSAL ACTION] ↓ [CONSEQUENCE - INSTANT]
Washington cuts tree TREE FALLS TREE DISAPPEARS → Laverne falls free
↓ ↓
History changes: Puzzle resolved:
"Washington chopped cherry tree" Laverne now controllable character
</code></pre>
<p><strong>Why Its Cross-Temporal Causality</strong>:</p>
<ol>
<li><strong>Action Separation</strong>: The SOLUTION (cutting tree) occurs 200+ years before the BLOCKED STATE appears</li>
<li><strong>Irreversible Change</strong>: Once tree is cut, it cannot be grown back—future state permanently altered</li>
<li><strong>Causal Chain Discovery Required</strong>: Player must understand that destroying an objects HISTORICAL PRESENCE removes its FUTURE EXISTENCE—not just “get item A, use on B”</li>
</ol>
<p><strong>Distinction from Multi-Character Coordination</strong>:
While two characters are involved (Hoagie acts, Laverne benefits), the CORE mechanic is TEMPORAL CAUSALITY not spatial coordination. In MCC, both characters act simultaneously in separated locations. Here, Hoagies action COMPLETES before the benefit manifests—the connection is HISTORICAL not SIMULTANEOUS.</p>
<p><strong>Distinction from Meta-Puzzle Construction</strong>:
Meta-Construction requires sequential item production (Step A output → Step B input). This puzzle has NO intermediate items—the tree cutting directly alters the game world state across time via WORLD STATE MUTATION rather than CRAFTING.</p>
<hr>
<h3 id="day-of-the-tentacle-flag-disguise-for-laverne-historical-document-alteration"><a class="header" href="#day-of-the-tentacle-flag-disguise-for-laverne-historical-document-alteration">Day of the Tentacle: Flag Disguise for Laverne (Historical Document Alteration)</a></h3>
<p><strong>Problem</strong>: Laverne needs to disguise herself as a tentacle to roam freely in the future, but guard tentacles catch any humans attempting to leave designated areas. She explicitly states “I wish I had some sort of tentacle disguise” but no disguise item exists in any characters inventory. The flag on the mansion roof appears tentacle-shaped but she cannot lower it without a crank.</p>
<p><small>Source: swords_and_software_walkthrough.html, lines 1289-1304 — “Laverne wishes she had some sort of tentacle disguise… Back in the kennel, ask to go to the bathroom, and once youre outside, give the tentacle chart to Hoagie.”</small></p>
<pre><code>BLOCKING CONDITION ANALYSIS:
FUTURE CONSTRAINTS:
- Laverne flagged as "human" by guard tentacles → immediately captured if roaming
- Flag on roof has tentacle shape (visually confirmed) but inaccessible
- Crank needed to lower flag exists in present-day mansion attic, NOT future
PAST OPPORTUNITIES:
- Betsy Ross sews American flag patterns at inn upstairs
- She accepts "design changes" from founding fathers placed on table
- Tentacle Chart (medical diagram of tentacle species) exists as item Hoagie can obtain
CAUSAL PATH:
The flag Laverne sees in the future IS the result of 1795 design decisions. Changing the historical pattern SPECIFICATION alters what gets manufactured centuries later.
</code></pre>
<p><strong>Solution Chain</strong>:
<small>Source: swords_and_software_walkthrough.html, lines 1306-1389</small></p>
<p>PHASE 1 - INFORMATION DISCOVERY (Laverne):</p>
<ol>
<li>Talk to guard tentacle → get taken to kennel for “human” violation</li>
<li>Express desire for “tentacle disguise”</li>
<li>Ask to use bathroom → exit to outside area momentarily</li>
<li>Give item to Hoagie in past: <strong>Tentacle Chart</strong></li>
</ol>
<p>PHASE 2 - HISTORICAL ALTERATION (Hoagie):
5. Go upstairs to Betsy Rosss room at inn
6. Place Tentacle Chart among flag pattern designs on table
7. Betsy Ross accepts chart as “new design from fickle founding fathers”</p>
<p>PHASE 3 - CROSS-TEMPORAL EFFECT MANIFESTS:
8. <strong>FUTURE FLAG VISUALLY CHANGES</strong> from standard shape to tentacle silhouette
9. Switch to Bernard in PRESENT time
10. Access attic, obtain crank from present-day version of mansion
11. Give crank to Laverne</p>
<p>PHASE 4 - DISGUISE COMPLETION (Laverne):
12. Return to rooftop via fireplace/chimney
13. Use crank on flagpole mechanism
14. Lower now-tentacle-shaped flag
15. Put on flag as clothing → disguise activates
16. Laverne now classified as “tentacle appearance” → can roam freely</p>
<pre><code>HISTORICAL DOCUMENT ALTERATION VISUALIZED:
[1795 - PAST - Hoagie] [2026 - FUTURE - Laverne]
Tentacle Chart exists Flag visible on mansion roof
(medical diagram) (normal American flag shape)
↓ ↓
Chart placed with Betsy's patterns Flag still normal at this point
("fickle founding fathers")
↓ [DESIGN DECISION ALTERED] ↓ [VISUAL MANIFESTATION]
Pattern modified to tentacle Future flag now tentacle-shaped!
shape for historical record (only visible after chart given)
↓ ↓
History changes: Physical access enabled:
"Tentacle was early flag design" Flag can be lowered + worn
as disguise
</code></pre>
<p><strong>Why Its Cross-Temporal Causality</strong>:</p>
<ol>
<li><strong>Document-Based Legacy</strong>: The solution requires modifying a HISTORICAL DOCUMENT (flag pattern) that influences future world state—not just item crafting but CANON ALTERATION</li>
<li><strong>Two-Stage Completion</strong>: Chart creation (past) + Crank retrieval (present) + Flag lowering (future) spans THREE TIME PERIODS, not one characters timeline</li>
<li><strong>Information Bridge Required</strong>: Player must understand that Betsy Rosss work DIRECTLY becomes future historical artifact</li>
</ol>
<p><strong>Distinction from Environmental Destruction</strong>:<br>Tree puzzle destroys a physical object; flag puzzle CREATES a different historical precedent. One is NEGATIVE CAUSALITY (removing something), this is POSITIVE (adding new design to history). Both are cross-temporal but opposite causal directions.</p>
<hr>
<h3 id="day-of-the-tentacle-contract-for-diamond-money-historical-document-completion"><a class="header" href="#day-of-the-tentacle-contract-for-diamond-money-historical-document-completion">Day of the Tentacle: Contract for Diamond Money (Historical Document Completion)</a></h3>
<p><strong>Problem</strong>: Bernard needs a diamond to repair the time machine, but Dr. Fred reveals he cannot afford one—he earned millions from a TV show about the Edison family but forgot to sign the royalty contract before the deadline. The unsigned contract is locked in his safe upstairs; he dreams of opening it but hasnt slept in two years due to nightmares about forgetting the combination (which relates to when he last opened it—while sleepwalking).</p>
<p><small>Source: swords_and_software_walkthrough.html, lines 1342-1350 — “Dr. Fred cant afford a new diamond because hes broke… forgot to sign the royalty contract in time… He hasnt slept in two years”</small></p>
<pre><code>THREE-TIME-PERIOD PUZZLE STRUCTURE:
PAST (1795 - Hoagie):
- Benjamin Franklin present, working on electricity experiments
- Lab coat belongs to Franklin's historical wardrobe
- Founding Fathers drafting Constitution in main hall
PRESENT (1993 - Bernard):
- Dr. Fred owns safe with contract inside
- Safe combination forgotten; linked to sleepwalking incident 2 years ago
- Dr. Fred stays awake via excessive coffee consumption
- Cannot afford diamond without signed contract royalties
FUTURE (2026 - Laverne/Tentacles):
- Statues of historical figures in convention hall
- George Washington statue holds sword in one hand, other gesture
- Statue's pose based on his historically documented position during "critical moment"
CAUSAL REQUIREMENT:
Contract must be signed in PAST for PRESENT royalties to exist. The signer's physical stance when signing determines the historical statue pose in FUTURE, which indirectly reveals safe combination digits through visual clues about Washington's posture at signing time.
</code></pre>
<p><strong>Solution Chain (Abridged - Full version involves more steps)</strong>:
<small>Source: swords_and_software_walkthrough.html, lines 2080-2140</small></p>
<p>KEY CAUSAL MOMENTS SPANNING TIME PERIODS:</p>
<p>PHASE A - SLEEP DETERMINATION (Bernard):</p>
<ol>
<li>Learn Dr. Fred needs decaf coffee to finally sleep</li>
<li>Acquire decaf from future tentacle cafeteria</li>
<li>Replace Freds caffeinated coffee with decaf</li>
<li><strong>Fred falls asleep for first time in 2 years</strong></li>
</ol>
<p>PHASE B - SLEEPWALKING CAPTURE (Past → Present):
5. Fred sleepwalks to safe, enters combination while unconscious
6. Bernard observes/sketches safe dial positions during sleepwalking event
7. Combination derived from hand positions</p>
<p>PHASE C - CONTRACT SIGNING ALTERATION (Hoagie - PAST):
8. Obtain Benjamin Franklins lab coat in past
9. Present unsigned contract to historical figures at Constitutional Convention
10. Convince founders to sign the “constitution” (which is actually Freds contract)
11. <strong>CRITICAL CAUSAL ACTION</strong>: George Washingtons stance while signing becomes HISTORICAL RECORD</p>
<p>PHASE D - STATUE MANIFESTATION (Future):
12. In future, Washington statue reflects his exact pose during 1795 signing moment
13. Statues sword position = clue to digits Fred used for safe combination<br>14. The statue CHANGE reflects the CONTRACT SIGNING EVENT that just occurred in past</p>
<p>PHASE E - RESOLUTION (Bernard):
15. Use derived combination on safe
16. Retrieve signed contract with millions in royalties
17. Call TV diamond advertisement, purchase real diamond
18. Install diamond in time machine → endgame accessible</p>
<pre><code>CONTRACT SIGNING CAUSALITY CHAIN:
[1795] [1993] [2026]
PAST PRESENT FUTURE
Franklin's lab coat obtained Fred sleepwalks Convention hall statues
↓ ↓ ↓
Contract presented as Fred opens safe, Washington statue shows
"Constitution amendment" Bernard watches hand pose from signing moment
positions (combination)
↓ [SIGNING EVENT] ↓ ↓ [HISTORICAL RECORD]
Founders sign document Safe combination known Statue's sword position =
Washington takes specific → Fred can open digits needed for safe pose
stance while signing safely, gets royalties ← Clue back to combo
╰──────────────────┬──────────────────────╯
Historical event created:
"Washington's legendary pose"
becomes physical clue across time
</code></pre>
<p><strong>Why Its Cross-Temporal Causality</strong>:</p>
<ol>
<li><strong>Document Legacy Across Eras</strong>: Contract unsigned in 1795 → Fred broke in 1993 → Diamond unobtainable. Signed contract creates entirely different present future.</li>
<li><strong>Statue as Historical Echo</strong>: Future statue doesnt just commemorate—it ENCODS information about past action physically through pose</li>
<li><strong>Circular Clue Structure</strong>: Combination discovered via sleepwalking (PRESENT) relates to statue pose (FUTURE) which reflects signing stance (PAST)—player must navigate CAUSAL LOOP not linear progression</li>
</ol>
<p><strong>Distinction from Memo Chain</strong>:<br>Memo Chain puzzles scatter FRAGMENTS of a single solution across locations in ONE timeline. This uses DOCUMENT ALTERATION where the ENTIRE SOLUTIONs existence depends on whether historical event occurs—not gathering pieces but CREATING the historical precedent itself.</p>
<hr>
<h2 id="chron-o-john-flushing-mechanic-special-inventory-transfer-variation"><a class="header" href="#chron-o-john-flushing-mechanic-special-inventory-transfer-variation">Chron-O-John Flushing Mechanic (Special Inventory Transfer Variation)</a></h2>
<p><strong>Problem</strong>: Items cannot be physically carried between time periods. Characters are stuck in separated eras and need inventory items that only exist in other timelines. Standard item transfer mechanisms (pick up, carry, give to NPC) dont work across centuries.</p>
<p><small>Source: swords_and_software_walkthrough.html, lines 792-804 — “Dr. Fred explains that using the Time-Flux Hydraulic Vortex Chamber you can flush small, inanimate objects to each other through time!”</small></p>
<p><strong>Core Mechanic Subtype</strong>: The Chron-O-John (time-period connected toilet) functions as a BIDIRECTIONAL FLUSHING NETWORK between all three time periods. Items flushed from any era arrive at ALL OTHER eras toilets simultaneously. This creates unique logistical puzzles where the SAME ITEM can be transferred across centuries instantly, functioning as <strong>TEMPORAL INVENTORY SHARING</strong> rather than traditional carrying.</p>
<pre><code>FLUSHING MECHANICS:
ITEM FLOW DIAGRAM:
┌──────────────┐
│ PAST │
│ (1795) │
│ Hoagie's │
│ Outhouse │
└──────┬───────┘
│ FLUSH
┌──────────────────┼──────────────────┐
↓ ↓ ↓
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ PRESENT │ │ ITEM │ │ FUTURE │
│ (1993) ├──►│ TRAVELS │──►│ (2026) │
│ Bernard's │ │ THROUGH TIME │ │ Laverne's │
│ Chron-O-John│ │ INSTANTLY │ │ Chron-O-John│
└──────────────┘ └──────────────┘ └──────────────┘
KEY FEATURES:
- All three toilets connected to same temporal stream
- Flushing from ANY endpoint sends item to ALL other endpoints
- Small inanimate objects only (no characters or large items)
- Bi-directional flow (can flush back from future→past!)
</code></pre>
<p><strong>Why Its Related but Distinct</strong>:
While flushing enables cross-temporal item movement, it is a GAMEPLAY MECHANIC not a puzzle TYPE itself. However, many Cross-Temporal Causality puzzles REQUIRE using the flushing network to transfer the causal agent (contract, tentacle chart, battery plans, etc.) between eras. Its the <strong>TRANSPORT LAYER</strong> that enables cross-temporal puzzles but does not define their SOLUTION LOGIC.</p>
<hr>
<h2 id="related-types"><a class="header" href="#related-types">Related Types</a></h2>
<div class="table-wrapper">
<table>
<thead>
<tr><th>Type</th><th>Similarity to Cross-Temporal Causality</th><th>Distinction</th></tr>
</thead>
<tbody>
<tr><td><strong>Multi-Character Coordination</strong></td><td>Both can require actions from separated characters</td><td>MCC = spatial separation; CTC = TEMPORAL separation as primary blocker</td></tr>
<tr><td><strong>Meta-Puzzle Construction</strong></td><td>Both involve sequential multi-step solutions</td><td>MPC = item output chains; CTC = WORLD STATE changes across eras</td></tr>
<tr><td><strong>Memo Chain</strong></td><td>Both reference historical documents</td><td>Memo = fragment gathering; CTC = HISTORICAL EVENT CREATION</td></tr>
<tr><td><strong>Environmental Destruction</strong></td><td>Both alter game world permanently</td><td>EnvDestruction is single-timeline only; CTC specifically MULTI-ERA</td></tr>
</tbody>
</table>
</div>
<hr>
<h2 id="design-considerations"><a class="header" href="#design-considerations">Design Considerations</a></h2>
<p><strong>Implementation Requirements</strong>:</p>
<ol>
<li><strong>Temporal Tracking System</strong>: Game must maintain separate world states per time period but allow causal linkage between them (object existence flags, document state tracking)</li>
<li><strong>Character Switch + Time Jump Interface</strong>: Player needs intuitive way to switch between eras to verify consequences immediately after action</li>
<li><strong>Visual Feedback Cues</strong>: Environmental changes should be VISUALLY OBVIOUS when they manifest across time (tree vanishing animation, flag shape shift cutscene)</li>
</ol>
<p><strong>Best Practices</strong>:</p>
<ul>
<li>Provide explicit hints about temporal connection (“That looks like the tree I saw back home!”)</li>
<li>Use iconic historical moments or recognizable figures for past period to make causality intuitive (Washington=cherry trees logic accessible without deep history knowledge)</li>
<li>Ensure consequence manifests IMMEDIATELY after causal action—delayed feedback frustrates players ability to learn temporal mechanics</li>
</ul>
<p><strong>Common Pitfalls</strong>:</p>
<ul>
<li>Players dont check other time periods after making changes (solution: prompt auto-cutscene to show effect)</li>
<li>Insufficient clue that past and future locations are connected (solution: distinctive landmarks visible in both eras)</li>
<li>Overly subtle consequence—if Laverne just falls silently, player may miss trees destruction mattered (solution: comedic/obvious reaction cutscene)</li>
</ul>
<hr>
<h2 id="when-to-use-this-type"><a class="header" href="#when-to-use-this-type">When to Use This Type</a></h2>
<p>Document a puzzle as Cross-Temporal Causality when:</p>
<ol>
<li>✓ Actions in one time PERIOD directly alter world state in DIFFERENT time period</li>
<li>✓ Player must consciously switch between timelines to solve the puzzle (not just visit sequentially)</li>
<li>✓ The solution involves understanding HISTORICAL OR CAUSAL connection between eras, not just item use</li>
<li>✓ At least one consequence is PERMANENT or SIGNIFICANTLY alters future game state</li>
</ol>
<p>DO NOT use this classification if:</p>
<ul>
<li>Time period switching is just flavor—same solution possible in single timeline (use standard puzzle type instead)</li>
<li>Only one direction of travel required with no feedback loop to origin time</li>
<li>“Time” mechanics are really just sequential chapters without causal linkage (narrative progression not CTC)</li>
</ul>
<hr>
<h2 id="tlj-variation-cross-realm-spatial-causality"><a class="header" href="#tlj-variation-cross-realm-spatial-causality">TLJ Variation: Cross-Realm Spatial Causality</a></h2>
<p><strong>The Longest Journey</strong> implements a dimensional variant where actions in Stark affect Arcadia and vice versa, though the core mechanic is <strong>CROSS-REALM</strong> rather than cross-temporal. This represents spatial causality across parallel dimensions rather than historical causality through time periods.</p>
<h3 id="the-longest-journey-phone-alignment-puzzle-chapter-8---reunification"><a class="header" href="#the-longest-journey-phone-alignment-puzzle-chapter-8---reunification">The Longest Journey: Phone Alignment Puzzle (Chapter 8 - Reunification)</a></h3>
<p><small>Source: 04_gameboomers_k_daleng.txt, lines 235-241 — “Go inside the cave (the mouth) in the big statue to see the symbol that belongs to each phone. Now youre going to set up the phones so that they will wake up the giant Qman…set up the phones in a special way so that the mouth on the phone by the tree hits the ear of the phone on the cliff…from there turn the mouth so that it hits the mouth of the statue so that your voice goes all over the island.”</small></p>
<pre><code>CROSS-LOCATION SIGNAL PROPAGATION CHAIN:
FOUR PHONE LOCATIONS ISLAND-WIDE:
1. Tree Phone (starting point - near Branchmen treehouse)
2. Cliff Phone (accessed through village, past suffering crab)
3. Ruins Phone (lower level cave accessible via rope descent from beach)
4. Giant Statue Phone (built into Q'man's statue mouth in central plaza)
SIGNAL FLOW REQUIREMENT:
Voice spoken at Tree Phone must propagate through chain to reach Statue Phone:
TREE [MOUTH OUT] → CLIFF [EAR IN, MOUTH OUT angled correctly]
↓ voice signal travels across distance
CLIFF [MOUTH OUT] → RUINS [EAR IN, MOUTH OUT angled up]
↓ voice continues along chain
RUINS [MOUTH OUT] → STATUE [MOUTH IN/receiving]
↓ Final propagation through island's acoustic network
RESULT: Voice amplified across entire island → Q'man awakens from slumber
SOLUTION CHAIN DETAIL:
Step A → Locate first phone at tree; speak into it, learn that mouth/ear orientation matters
&lt;small&gt;Source: 04_gameboomers_k_daleng.txt, line 239 — "the trick here is to set up the phones in a special way"&lt;/small&gt;
Step B → Visit each phone location, examine mouth and ear rotation controls
- Key obtained from ruins cave pile of rocks used to rotate orientations
- Turning key one way rotates MOUTH; opposite direction rotates EAR
Step C → Establish chain by orienting:
Phone #1 (Tree): Mouth pointing toward cliff location
Phone #2 (Cliff): Ear receiving from tree, mouth pointing toward ruins
Phone #3 (Ruins): Ear receiving from cliff, mouth pointing upward/at statue
Phone #4 (Statue): Positioned to receive amplified signal
WHY IT'S CROSS-REALM SPATIAL CAUSALITY:
While NOT temporal like DOTT's puzzles, this represents a SPATIAL variant where actions at Location A (phone rotation) create effects at remote Locations B, C, D through SIGNAL PROPAGATION. The puzzle requires understanding causality across SPACE rather than time—the acoustic chain connecting distant points functions identically to DOTT's historical document legacy connecting past→future events.
DISTINCTION FROM MULTI-CHARACTER COORDINATION:
All four phone locations controlled by single character (April). Puzzle is about spatial signal routing, not multiple characters acting simultaneously in separated locations.
RELATIONSHIP TO CROSS-REALM LOGISTICS:
Unlike Cross-Realm Logistics where player carries items across worlds (e.g., shift travel with inventory), this puzzle's "cross-realm" aspect is metaphorical—the phones span the physical island but require UNDERSTANDING CAUSAL CONNECTIONS between separated points rather than item transport.
CROSS-REALM DIMENSION VARIANT:
True Cross-Realm Causality in TLJ appears when actions in Stark create consequences in Arcadia (and vice versa):
Example - Shift Travel Consequences:
→ Items acquired in one dimension usable only after travel to other dimension
→ Information learned in Arcadia (e.g., Cortez's true identity) changes player's access/dialogue options back in Stark
→ This represents CROSS-DIMENSIONAL rather than cross-temporal causality but shares same mechanical principle: ACTION IN SEPARATED SPACE → CONSEQUENCE MANIFESTS AT DISTANCE
</code></pre>
<hr>
<h2 id="related-types-updated-reference-table-for-tlj-puzzles"><a class="header" href="#related-types-updated-reference-table-for-tlj-puzzles">Related Types (Updated Reference Table for TLJ Puzzles)</a></h2>
<div class="table-wrapper">
<table>
<thead>
<tr><th>Type</th><th>Similarity to Cross-Temporal Causality</th><th>Distinction</th><th>TLJ Example Matches This?</th></tr>
</thead>
<tbody>
<tr><td><strong>Multi-Character Coordination</strong></td><td>Both can require actions from separated characters</td><td>MCC = spatial separation; CTC = TEMPORAL separation</td><td>No - all single-character puzzles in TLJ</td></tr>
<tr><td><strong>Meta-Puzzle Construction</strong></td><td>Both involve sequential multi-step solutions</td><td>MPC = item output chains; CTC = WORLD STATE changes across eras</td><td>Plumbing, Shadow Puppet ARE Meta-Construction</td></tr>
<tr><td><strong>Memo Chain</strong></td><td>Both reference historical documents</td><td>Memo = fragment gathering; CTC = HISTORICAL EVENT CREATION</td><td>No memo-chain puzzles identified in TLJ</td></tr>
<tr><td><strong>Environmental Destruction</strong></td><td>Both alter game world permanently</td><td>EnvDestruction is single-timeline only; CTC specifically MULTI-ERA</td><td>Phone puzzle alters world state across location</td></tr>
<tr><td><strong>Cross-Realm Logistics</strong></td><td>Both involve separated space/era item transfer</td><td>Cross-Realm = carry-through; CTC = Causal action changes remote state without transport</td><td>Shift mechanics = Cross-Realm, not CTC</td></tr>
</tbody>
</table>
</div>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../puzzles/timed-consequence.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../puzzles/metaphor-literal.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../puzzles/timed-consequence.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../puzzles/metaphor-literal.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
</nav>
</div>
<template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
<template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
<template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
<template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
<template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_line_numbers = true;
</script>
<script>
window.playground_copyable = true;
</script>
<script src="../ace-2a3cd908.js"></script>
<script src="../mode-rust-2c9d5c9a.js"></script>
<script src="../editor-16ca416c.js"></script>
<script src="../theme-dawn-4493f9c8.js"></script>
<script src="../theme-tomorrow_night-9dbe62a9.js"></script>
<script src="../elasticlunr-ef4e11c1.min.js"></script>
<script src="../mark-09e88c2c.min.js"></script>
<script src="../searcher-c2a407aa.js"></script>
<script src="../clipboard-1626706a.min.js"></script>
<script src="../highlight-abc7f01d.js"></script>
<script src="../book-a0b12cfe.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

View File

@@ -0,0 +1,580 @@
<!DOCTYPE HTML>
<html lang="en" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>NPC Distraction Physics - Puzzle Design Knowledge Base</title>
<!-- Custom HTML head -->
<meta name="description" content="A taxonomy of puzzle design patterns from classic point-and-click adventure games">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon-de23e50b.svg">
<link rel="shortcut icon" href="../favicon-8114d1fc.png">
<link rel="stylesheet" href="../css/variables-8adf115d.css">
<link rel="stylesheet" href="../css/general-2459343d.css">
<link rel="stylesheet" href="../css/chrome-ae938929.css">
<link rel="stylesheet" href="../css/print-9e4910d8.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../fonts/fonts-9644e21d.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css">
<link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css">
<link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
window.path_to_searchindex_js = "../searchindex-c567150f.js";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc-35c178c7.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="mdbook-body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
sidebar_toggle.checked = false;
}
if (sidebar === 'visible') {
sidebar_toggle.checked = true;
} else {
html.classList.remove('sidebar-visible');
}
</script>
<nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="mdbook-page-wrapper" class="page-wrapper">
<div class="page">
<div id="mdbook-menu-bar-hover-placeholder"></div>
<div id="mdbook-menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
</label>
<button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
</button>
<ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
</ul>
<button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
</button>
</div>
<h1 class="menu-title">Puzzle Design Knowledge Base</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb" title="Git repository" aria-label="Git repository">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb/edit/main/src/puzzles/distraction-physics.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
<span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
</a>
</div>
</div>
<div id="mdbook-search-wrapper" class="hidden">
<form id="mdbook-searchbar-outer" class="searchbar-outer">
<div class="search-wrapper">
<input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
<div class="spinner-wrapper">
<span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
</div>
</div>
</form>
<div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
<div id="mdbook-searchresults-header" class="searchresults-header"></div>
<ul id="mdbook-searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="mdbook-content" class="content">
<main>
<h1 id="npc-distraction-physics"><a class="header" href="#npc-distraction-physics">NPC Distraction Physics</a></h1>
<p><strong>Information Architecture</strong>: NPC follows patrol/behavior pattern that blocks access to location or item. Blocking condition is <em>physical/spatial</em> rather than dialogue-based: line-of-sight, proximity triggers, or path obstruction. Solution requires manipulating environment to break the blocking condition without direct confrontation.</p>
<p><strong>Player Action Pattern</strong>: Observe NPC behavior loop. Identify environmental object/action that can exploit timing, physics, or AI limitations. Execute action to divert/obstruct/block NPCs attention or movement. Access previously blocked element during distraction window.</p>
<p><strong>Core Mechanic</strong>: Spatial/temporal manipulation creates opportunity window. Unlike Sensory Exploitation (direct vulnerability attack like tickle/sleep), DNP exploits <em>environment</em> + <em>NPC pathfinding/routine</em>. Player becomes environmental engineer, creating puzzle in 3D space using standard actions.</p>
<p><strong>Variations</strong>:</p>
<ul>
<li>Pull lever/activate object that NPC must investigate, breaking patrol pattern</li>
<li>Create physical obstruction (object on tracks, blocking door)</li>
<li>Redirect NPC attention via object manipulation (pull totem nose → monkey hangs there → NPC path rerouted)</li>
<li>Timing puzzle: wait for patrol cycle gap + execute grab action in short window</li>
</ul>
<p><strong>Adventure Game Implementation</strong>:</p>
<ul>
<li>LOOK at environment to spot interaction point that affects NPC behavior</li>
<li>Standard WALK/USE/PULL/PUSH actions on environmental objects</li>
<li>Observe NPC AI pattern (patrol route, reaction triggers)</li>
<li>Trigger environmental change → NPC reroutes or becomes occupied → access granted</li>
</ul>
<p><strong>Example Structure</strong>:</p>
<pre><code>Blockage Phase:
→ Target [ITEM] protected by [NPC_GUARD] with patrol loop to [OBJECT]
→ Direct theft impossible ("Can't steal while watched!")
Solution Phase:
→ Examine [ENVIRONMENTAL_OBJECT] within guard's patrol path/range
→ Realize action will divert NPC attention or alter movement pattern:
- USE object on [TRIGGER_POINT] creates distraction
- PULL [OBJECT] physically obstructs NPC path
- TIME window when NPC is investigating/occupies alternate location
Execution Phase:
→ Activate environment while NPC distracted → Access [ITEM] during vulnerability window
→ Distraction must be sustained or timed precisely
</code></pre>
<p><strong>Kings Quest VI Parallel</strong>: None identified in walkthrough.</p>
<p><strong>Monkey Island Example</strong>:</p>
<ul>
<li><strong>Totem Pole / Monkey Blockade</strong>:
<ul>
<li>Goal: Enter Giant Monkey Head interior (blocked)</li>
<li>Problem: Monkey guards it, standing on totem pole nose</li>
<li>Solution: Pull Nose down → Monkey follows and hangs from pulled-down nose → Monkey physically occupies space away from gate → Access granted</li>
<li>Distraction + spatial displacement = access</li>
</ul>
</li>
</ul>
<hr>
<h3 id="indiana-jones-fate-of-atlantis---submarine-guard-distraction-team-path-indy2"><a class="header" href="#indiana-jones-fate-of-atlantis---submarine-guard-distraction-team-path-indy2">Indiana Jones: Fate of Atlantis - Submarine Guard Distraction (Team Path, INDY2)</a></h3>
<p><strong>Setup</strong>: After reaching the Nazi submarine via hot air balloon crash, Indy and Sophia are separated—Sophia is imprisoned in a cell while Nazi guards patrol the corridors. Indy needs to reach the emergency rudder controls to guide the sub into the airlock. A guard stands watch near the rudder control room with no direct combat option available (Team path focuses on cooperation over violence).</p>
<p><small>Source: walkthroughking_ashley_walkthrough.html, lines 89 — “Get her to distract the guard, and then walk around behind him.”</small></p>
<p><strong>Blocking Condition</strong>: Guard stands stationary at fixed position blocking access to emergency rudder control. Cannot pass, cannot fight (on Team path), must create opportunity through environmental/social manipulation.</p>
<p><strong>Physical/Spatial Solution Chain</strong>:</p>
<ol>
<li>Sophia is in adjacent cell with wall opening allowing voice communication</li>
<li>Use Intercom/communicate with Sophia → coordinate distraction plan</li>
<li>Sophia shouts about “bucket” or “pail”—creates noise distraction audible to guard
4- Guard turns toward sound source (Sophias cell), turning back away from rudder corridor</li>
<li>While guard faces distraction: Walk Indy around behind him, through previously-blocked passage</li>
<li>Access emergency rudder controls unimpeded</li>
</ol>
<p><small>Source: gamefaqs_darth_maul_walkthrough.html, lines 981-987 — “Head for the right and open the trap door that leads to the strong box…Sophia will pick up a bucket and knock it over. The guard will hear the noise and run to Sophias cell. While he is distracted, use the key to unlock the rudder controls.”</small></p>
<p><strong>Environmental Manipulation</strong>: The distraction isnt an object thrown or lever pulled—it uses SOCIAL ENVIRONMENT (two separated allies coordinating) + AUDITORY TRIGGER (bucket noise). Guards AI prioritizes unexpected sounds near prisoner cells as security threats.</p>
<p><strong>Why Its Distraction Physics</strong>: Player doesnt confront guard directly. Instead, they manipulate the environment (Sophias bucket, communication between rooms, acoustic propagation) to create temporal opportunity window. Guard reroutes from patrol position due to environmental stimulus outside his blocking role.</p>
<p><strong>Alternative Solution Paths</strong>: Each path type has different approach:</p>
<ul>
<li><strong>Wits Path</strong>: Create fire in torpedo tube using rag + wires → guard responds to emergency evacuation (environmental hazard distraction)</li>
<li><strong>Fists Path</strong>: Direct combat defeats guard (not distraction—different path specialization)</li>
</ul>
<hr>
<h3 id="gabriel-knight-1-mime-distraction-for-cop-radio-access-gk1"><a class="header" href="#gabriel-knight-1-mime-distraction-for-cop-radio-access-gk1">Gabriel Knight 1: Mime Distraction for Cop Radio Access (GK1)</a></h3>
<p><strong>Setup</strong>: Gabriel needs to learn the location of a crime scene from police radio broadcasts. A cop stands guard at his motorcycle with an active radio in Jackson Square. The cop will not let Gabriel near the radio and has no dialogue option revealing the information.</p>
<p><small>Source: mysterymanor_mbday630_walkthrough.html, lines 77-78 — “Go to park. Get mime to follow you to cop and use motorcycle when cop chases mime.”</small></p>
<p><small>Source: justadventure_walkthrough.html, lines 540-557 — “(iii) Ergo He must somehow get the cop to leave his bike for a while. (iv) Get the mime to annoy him so that the cop will chase him away… The mime will now start mocking the cop who will try to catch him and run after him away from his motor bike in so doing.”</small></p>
<p><strong>Blocking Condition</strong>: Cop occupies fixed position next to motorcycle radio. Direct approach = refused access. Radio broadcasts contain vital intel (crime scene at Lake Pontchartrain). A mime wanders Jackson Square, following and mockingly copying anyone he approaches.</p>
<p><strong>Environmental/Spatial Solution Chain</strong>:</p>
<ol>
<li>Approach mime near top of screen → mime begins following Gabriel</li>
<li>Walk Gabriel toward right side of screen, then diagonally through center area</li>
<li>Position themselves so mime ends up standing close to cop</li>
<li>Mime begins mocking gestures → cop becomes annoyed</li>
<li>Cop abandons motorcycle post and chases mime away from radio</li>
<li>Window opens: Use motorcycle radio while cop is absent (2 points)</li>
<li>Radio broadcast reveals crime scene location: Lake Pontchartrain</li>
</ol>
<p><small>Source: justadventure_walkthrough.html, lines 547-548 — “Whilst the cop is absent, QUICKLY use his radio. You will hear the location of the crime scene it is at Lake Pontchartrain [+ 2 points]”</small></p>
<p><strong>Environmental Manipulation</strong>: The mime acts as a natural NPC-following entity built into Jackson Squares simulation. Player doesnt control the mime directly—instead manipulates spatial positioning so mimes inherent annoying behavior triggers cops departure. Environmental chain-reaction, not direct item use.</p>
<p><strong>Why Its Distraction Physics (Not Sensory Exploitation)</strong>: Cop has no perceptual weakness or specific vulnerability. Instead, player uses a third NPCs programmed following/mocking behavior to ALTER THE COPS PHYSICAL POSITION in space. The cop willingly leaves because of social irritation, not because his senses were deceived or exploited.</p>
<hr>
<h3 id="broken-sword-shadow-of-the-templars---baphomet-key-swap-chapter-6"><a class="header" href="#broken-sword-shadow-of-the-templars---baphomet-key-swap-chapter-6">Broken Sword: Shadow of the Templars - Baphomet Key Swap (Chapter 6)</a></h3>
<p><strong>Problem</strong>: Guard retains real Baphomet key while wearing protective gloves that prevent theft. Must replace real key with fake using environmental manipulation chain to create opportunity window when guard removes gloves temporarily.</p>
<p><small>Source: broken-sword-1/4_agh_peter_christiansen_walkthrough.html, lines 469-498</small>
<small>Source: broken-sword-1/1_walkthroughking_broken_sword.html, lines 178-185</small></p>
<p><strong>Environmental Manipulation Chain</strong>:</p>
<pre><code>PHASE 1 - Initial Blockage Discovery:
→ Approach guard at Baphomet temple/tomb entrance
→ Guard holds real key but wears protective gloves at all times
→ Direct theft attempt fails ("Can't take key while guard wears gloves")
→ Fake key crafted earlier in inventory (prerequisite from prior puzzle)
PHASE 2 - Distraction Setup (Painter Room Adjacency):
→ Locate painter working in adjacent chamber/room
→ Painter creates noise or activity that can be leveraged
→ Phone line accessible in player's location for remote communication
PHASE 3 - Environmental Trigger Sequence:
Step 1 → Adjust thermostat in shared temperature-control area
- Creates discomfort condition for painter (too hot/cold)
Step 2 → Painter seeks relief, moves to different location/uses phone
- Environmental change breaks normal work pattern
Step 3 → Phone call initiated by painter OR player calls painter
- Painter engaged in conversation at distance from guard room
PHASE 4 - Guard Distraction Window:
→ Guard's attention drawn to noise/activity from painter room
→ During distraction period, guard removes gloves (temperature/comfort reason)
→ CRITICAL TIMING WINDOW opens when gloves off and attention diverted
PHASE 5 - Key Swap Execution:
→ While guard distracted AND gloveless → Use fake key ON real key location
→ Real key replaced with duplicate in inventory
→ Original now accessible without confrontation or timing failure
WHY IT'S DISTRACTION PHYSICS: Multiple environmental elements (thermostat control, phone communication, painter's behavior) chain together to create opportunity window. Player manipulates 3D space using standard actions, creates puzzle where NPC reroutes attention due to external stimulus. NOT Sensory Exploitation because guard has no specific vulnerability being attacked—player engineers DISTRACTION CONDITIONS through environmental controls, not direct exploitation of perceptual weakness.
</code></pre>
<hr>
<h3 id="broken-sword-ii-the-smoking-mirror---ketchs-landing-catflagpole-surveyor-distraction-chapter-5"><a class="header" href="#broken-sword-ii-the-smoking-mirror---ketchs-landing-catflagpole-surveyor-distraction-chapter-5">Broken Sword II: The Smoking Mirror - Ketchs Landing Cat/Flagpole Surveyor Distraction (Chapter 5)</a></h3>
<p><strong>Problem</strong>: George needs access to the museum where Captain Ketchs treasure information is hidden, but cannot enter directly. Bronson the surveyor blocks the area and guards his equipment. The cat at the museum creates environmental distraction opportunities that can be exploited to bypass both obstacles without confrontation.</p>
<p><small>Source: 2_the_spoiler_tom_hayes_walkthrough.html, lines 262-271 — “Use the inner tube with the tree. Use the red ball with the inner tube. Use the ladder, to leave Bronson hanging from the flagpole. Get the marker.”</small></p>
<p><small>Source: 4_kasagaming_walkthrough.html, lines 359-362 — “Go up to the museum. Use the ladder to extend it. Climb the ladder, attach the inner tube to the middle window flagpole, then descend the ladder. Attach the fish to the inner tube…”</small></p>
<pre><code>PHASE 1 - BLOCKING CONDITION DISCOVERY:
→ Arrive at Ketch's Landing Museum area
→ Bronson stands near ladder/flagpoles, guarding survey equipment and plans
→ Museum door locked; Ketch sisters appear during certain dialogue cycles
→ Direct entry impossible while Bronson occupies the space
ENVIRONMENTAL OPPORTUNITY IDENTIFIED:
→ Cat roams museum porch area (unrelated NPC)
→ Flagpole with sensor/target sits on elevated platform
→ Red ball accessible via cat baiting sequence
PHASE 2 - DISTRACTION CHAIN SETUP:
Step 1 → Trade worm/quilt/lipstick to Rio for fish
&lt;small&gt;Source: kasagaming_walkthrough, line 359 — "Offer the quill pen to the cat. It will shred it to pieces."&lt;/small&gt;
Step 2 → Place fish on museum porch where cat can access
Step 3 → Cat distracted by fish → allows player movement through area
STEP 4 → Climb ladder, extend flagpole rope system with inner tube
Step 5 → Lower ball to ground level via tube mechanism
PHASE 3 - PHYSICAL DISTRACTION DEPLOYMENT:
Step 6 → Place red ball in tree-based sling/catapult mechanism
&lt;small&gt;Source: tom_hayes_walkthrough, line 267 — "Use the inner tube with the tree. Use the red ball with the inner tube."&lt;/small&gt;
Step 7 → Launch ball at flagpole sensor/target → sensor knocked from pole
Step 8 → Bronson climbs ladder to investigate/repair damaged survey equipment
CRITICAL DISTRACTION WINDOW:
→ Bronson hangs from upper flagpole (stuck/investigating)
&lt;small&gt;Source: kasagaming_walkthrough, line 360 — "Use the ladder, to leave Bronson hanging from the flagpole."&lt;/small&gt;
Step 9 → While Bronson occupied above: retrieve survey marker/equipment freely
- Physical obstruction removed by environmental consequence
Step 10 → Collect plans and theodolite from beach area (Bronson's abandoned items)
Step 11 → Return to museum, present plans to Ketch sisters → gain entrance
ENVIRONMENTAL MANIPULATION SUMMARY:
- Cat → food distraction creates access window for item placement
- Ball/sling mechanism → physical projectile knocks sensor off pole
- Sensor damage → triggers Bronson's investigation response (AI reactivity)
- Bronson stuck above → ground-level items now unprotected
</code></pre>
<p><strong>Why Its Distraction Physics</strong>: Player never confronts Bronson directly. Instead, manipulates environment (cat food placement, ball sling launch, sensor destruction) to create cascading physical consequences that remove the blocking condition. Bronsons distraction is not an explicit “distracted state”—he climbs to repair equipment because sensor was destroyed and ends up physically occupying elevated space away from his items. This differs from Sensory Exploitation (no direct attack on NPC perception) and differs from pure Observation Replay (player creates conditions rather than waits for natural cycle).</p>
<p><strong>Distinction from Information Brokerage</strong>: While Rio provides fish through trade, the core mechanic is PHYSICAL DISTRACTION of Bronson, not network navigation. Fish collection enables ball/cat actions but doesnt follow NPC→NPC information flow pattern.</p>
<hr>
<h2 id="related-types"><a class="header" href="#related-types">Related Types</a></h2>
<ul>
<li><strong>Sensory Exploitation</strong>: Attacks NPC directly via vulnerability (tickle/sleep/food); DNP attacks NPC indirectly via environmental change that reroutes their behavior</li>
<li><strong>Timed Consequence</strong>: Both use timing windows, but TC is about narrative urgency without mechanical deadline; DNP creates players own temporary opportunity through active manipulation</li>
<li><strong>Multi-Faceted Plan</strong>: DNP often simpler “one action breaks blockage” vs MFPs multi-requirement synthesis from disparate sources</li>
<li><strong>Observation Replay</strong>: Related when exploiting NPC behavior cycles, but OR waits for natural timing while DNP CREATES distraction conditions proactively rather than passively observing existing patterns</li>
</ul>
<h3 id="simon-the-sorcerer-pub-barman-beeswax-beer-scheme-simon"><a class="header" href="#simon-the-sorcerer-pub-barman-beeswax-beer-scheme-simon">Simon the Sorcerer: Pub Barman Beeswax Beer Scheme (SIMON)</a></h3>
<p><strong>Problem</strong>: The pub barman controls access to a barrel of beer and a brewery voucher needed for the Dwarf Mine plot. Direct theft or trade fails—barman only abandons these items after believing the barrel is damaged/leaking. Exploiting his diagnostic behavior creates the opportunity window.</p>
<p><small>Source: walkthroughs/simon1/simon1.txt, lines 614-620 — “When you have the wax, go to the pub and ask the bartender for a drink. While he looks for ingredients, use the wax on the beer barrel to plug it up. This tricks him into thinking the barrel is empty… The bartender puts the barrel of beer outside, and he gives Simon a brochure containing a free beer voucher.”</small></p>
<p><small>Source: walkthroughs/simon1/simon1_2.txt, lines 196-203 — “Enter the bar and talk to the barman. Say Mix me a Wet Wizard, barkeep. Quickly use the wax on the beer barrel behind the bar to get a beer voucher. Exit the bar and get the beer barrel.”</small></p>
<pre><code>BLOCKING CONDITION ANALYSIS:
LOCATION: Drunken Druid Pub (Village)
GOAL: Acquire BARREL OF BEER + VOUCHER LEAFLET from barman's inventory
OBSTACLE: Barman actively guards both items, no dialogue trade option available
NPC BEHAVIOR PATTERN IDENTIFIED:
- When asked to make a drink, barman consistently:
- Turns away from counter
- Looks behind bar for "ingredients"
- Returns to front with completed beverage
This animation loop creates ~3-5 second window where his attention is diverted
from the beer barrel directly behind him.
ENVIRONMENTAL MANIPULATION CHAIN:
PHASE 1 - DISTRACTION INITIATION:
→ Enter pub, navigate to bar counter
→ TALK to barman, select dialogue option: "Mix me a Wet Wizard, barkeep"
→ Barman animation triggers (back turned, searching behind counter)
PHASE 2 - TIMED INTERVENTION WINDOW:
→ [CRITICAL TIMING]: Use WAX on beer barrel spigot while barman distracted
Why This Works: Wax plugs the spigot—barrel appears non-functional (no liquid flows when pressed)
The intervention must occur during distraction window, or barman notices player tampering.
PHASE 3 - NPC DIAGNOSTIC RESPONSE BEHAVIOR:
→ Barman returns, attempts to serve from now-plugged barrel
→ Dialogue indicates: "Barrel's gone dry / broken—what a shame"
→ BARREL DISPLACED OUTSIDE PUB (barman removes it from premises)
PHASE 4 - ITEM ACQUISITION WINDOW:
→ VOUCHER given to player as compensation ("free drink coupon for another time")
→ Exit pub immediately → BARREL now available for collection (outside door)
Why Both Items Become Available Simultaneously: The barman's diagnostic conclusion
("barrel is broken/empty") triggers BOTH actions: discarding barrel AND compensating customer.
WHY IT'S DISTRACTION PHYSICS:
NPC ATTENTION REROUTE THROUGH ENVIRONMENTAL SETUP:
Player doesn't distract barman with an object thrown elsewhere (like pulling totem nose).
Instead, creates CONDITIONS for item acquisition by exploiting NPC's built-in behavior loop.
The key distinction: Barman's "looking for ingredients" animation is NATURAL BEHAVIOR, not
something player FORCED him to do via environmental manipulation. Player TIMED their intervention
(to use wax) during this naturally-occurring attention shift window.
TEMPORARY OPPORTUNITY CREATION:
Once wax applied, barman discovers problem and creates NEW opportunity state (barrel outside = accessible).
This is distinct from Observation Replay where player watches NPC perform then waits for them to leave.
Here player ACTIVELY CHANGES the barrel's physical state during window, which THEN triggers
new behavior chain from NPC.
TIMING MECHANIC AS DISTRACTION CORE:
Walkthrough emphasizes "Quickly use the wax" or timing language—underscores narrow window where
barman's back is turned. This isn't about creating a lasting diversion (like knocking over object that he then investigates for 30 seconds). It's about EXECUTING THE CRITICAL ACTION during brief attention gap in his pattern.
COMIC DELIVERY:
Absurdity derives from wax-plugged-spigot = "empty/barrel-broken" conclusion. No logical person
would think a beer barrel is empty because one spigot fails—but the game's internal causality accepts this as valid barman reasoning. Barman never suspects foul play, only mechanical failure.
FAILURE MODE:
If player attempts to use wax while barman faces counter (no distraction active), interaction blocked:
"Barman notices you tampering with his supplies and kicks you out."
This demonstrates the timing requirement—the environmental exploit works ONLY during attention window.
</code></pre>
<p><strong>Why Its Distraction Physics</strong>: The puzzle requires exploiting the barmans existing behavior pattern (turned away to find ingredients) rather than creating a new distraction from scratch. Environmental manipulation (wax on spigot) occurs DURING naturally-occurring attention gap, triggering consequences (abandoned barrel outside). This differs from creating external noise or pulling levers—player hijacks NPCs routine moment of vulnerability through precise timing.</p>
<hr>
<h2 id="game-examples"><a class="header" href="#game-examples">Game Examples</a></h2>
<h3 id="indy1-roast-boar-distraction-via-fireplace-smoke"><a class="header" href="#indy1-roast-boar-distraction-via-fireplace-smoke">INDY1: Roast Boar Distraction via Fireplace Smoke</a></h3>
<p><small>Source: walkthrough-king.txt, lines 154-158</small></p>
<p><strong>Setup</strong>: Nazi Colonel Vogels office at Castle Brunwald is guarded by his dog. Indy needs to pass through the office to access items in the drawers, but the dog will attack if he enters without distraction. The kitchen upstairs has a roast boar being prepared and a fireplace with burning coals.</p>
<p><strong>Blocking Condition</strong>: Dog stands guard in front of Vogels office door. Cannot enter or take items from desk while dog is present. Direct combat possible but suboptimal (violence-heavy playstyle, loses puzzle points).</p>
<p><strong>Solution Chain</strong>:</p>
<ol>
<li>Go upstairs to kitchen area on 2nd floor</li>
<li>Take empty stein from counter, fill it from ale keg spigot</li>
<li>Go to fireplace adjacent to where roast boar hangs</li>
<li>Pour first stein of ale onto burning coals → creates thick smoke that fills room</li>
<li>Wait for smoke to clear enough to see/grab roast boar</li>
<li>Take roast boar (dogs food) into inventory, refill stein one more time</li>
<li>Return downstairs through guard corridors with boar in inventory</li>
<li>Approach Vogels office and GIVE roast boar to dog sitting at door</li>
</ol>
<p><small>Source: walkthrough-king.txt, lines 209-210 — “Enter the first door to the west to find Vogels office. Give the roast boar to the dog, then open the right drawer in”</small></p>
<ol start="9">
<li>Dog becomes occupied eating the boar → attention diverted from doorway</li>
<li>Enter office while dog distracted by food, access desk drawers freely</li>
</ol>
<p><strong>Environmental Manipulation</strong>: Fireplace coals convert liquid ale into smoke—physical transformation that temporarily reduces visibility enough to safely retrieve hanging meat. The ale creates a sensory barrier (smoke/ash) that protects Indy from thermal damage while accessing the otherwise unreachable item. Dogs behavior is not “hacked” through AI weakness—instead, player physically brings the object dog naturally wants to its location.</p>
<p><strong>Why Its Distraction Physics</strong>: Unlike Sensory Exploitation which attacks an NPCs direct vulnerability (feeding monkey fruit because monkeys like fruit), this puzzle requires MANIPULATING THE PHYSICAL ENVIRONMENT FIRST (ale→smoke conversion) before accessing the distraction item itself. The fireplace acts as a transformative medium: without creating smoke barrier, Indy cannot retrieve the boar due to proximity to burning coals. Once boar acquired, giving it to dog is straightforward—the complex puzzle was getting the boar, not convincing the dog. Environmental engineering (heat + liquid → temporary visibility reduction) creates opportunity window for item acquisition.</p>
<h3 id="indy1-security-console-ale-short-circuit"><a class="header" href="#indy1-security-console-ale-short-circuit">INDY1: Security Console Ale Short-Circuit</a></h3>
<p><strong>Setup</strong>: Nazi security control room at Castle Brunwald contains an alarm system that will trigger during escape sequence unless disabled. The room is guarded by a Nazi soldier patrolling outside the door, but can be bypassed via combat or Mein Kampf book trade. Inside, the security console has ventilation grating on its side panel.</p>
<p><small>Source: walkthrough-king.txt, lines 190-192</small></p>
<p><strong>Blocking Condition</strong>: Alarm system is active and functional. If triggered during escape, it will lead to confrontation with Donovan or fail Henrys rescue entirely. Cannot disable through normal “use console” interaction (no dialogue/options for deactivation). Physical short-circuiting required.</p>
<p><strong>Solution Chain</strong>:</p>
<ol>
<li>Acquire stein of ale from earlier kitchen sequence (carried throughout castle infiltration)</li>
<li>Navigate to security control room on ground floor corridor</li>
<li>Deal with guard outside door: either GIVE Mein Kampf book OR fight him</li>
<li>Enter security room past the neutralized guard</li>
<li>Locate grating/ventilation panel on SIDE of alarm console</li>
<li>USE stein ON grating → Pour ale into electrical components</li>
<li>Ale conducts electricity, short-circuiting the alarm system</li>
<li>Alarm disabled—will not trigger during escape sequence</li>
</ol>
<p><small>Source: walkthrough-king.txt, lines 191-192 — “Once done, pour your stein of ale into the grating on the side of the security console to disable the alarm system.”</small></p>
<p><strong>Environmental Manipulation</strong>: Liquid ale is conductive when poured onto exposed electrical contacts. The grating design exposes internal components without requiring tool-based disassembly. Indy exploits the consoles poor industrial design (open ventilation near sensitive circuitry) to achieve what hacking or sabotage cannot—pure physical destruction through fluid dynamics. This is not “breaking the alarm”—its repurposing a beverage container into a conductive fluid delivery mechanism.</p>
<p><strong>Why Its Distraction Physics</strong>: The puzzle uses environmental PHYSICS rather than NPC manipulation, but follows same pattern: observe system behavior (alarm triggers on escape) → identify exploitable interaction point (grating exposes internals) → use available item in unconventional way (ale as conductive destruction agent) → create window of opportunity (disabled alarm = safe route for Henry). The ales dual-use nature mirrors other DNP items (wax barrel plug, thrown bucket)—everyday object repurposed through understanding of environmental rules. Unlike simple “break console” solution, player must recognize that liquid + exposed electronics = failure mode they can engineer intentionally.</p>
<hr>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../puzzles/symbol-code-translation.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../puzzles/comedy-based-persuasion.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../puzzles/symbol-code-translation.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../puzzles/comedy-based-persuasion.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
</nav>
</div>
<template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
<template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
<template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
<template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
<template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_line_numbers = true;
</script>
<script>
window.playground_copyable = true;
</script>
<script src="../ace-2a3cd908.js"></script>
<script src="../mode-rust-2c9d5c9a.js"></script>
<script src="../editor-16ca416c.js"></script>
<script src="../theme-dawn-4493f9c8.js"></script>
<script src="../theme-tomorrow_night-9dbe62a9.js"></script>
<script src="../elasticlunr-ef4e11c1.min.js"></script>
<script src="../mark-09e88c2c.min.js"></script>
<script src="../searcher-c2a407aa.js"></script>
<script src="../clipboard-1626706a.min.js"></script>
<script src="../highlight-abc7f01d.js"></script>
<script src="../book-a0b12cfe.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

View File

@@ -0,0 +1,494 @@
<!DOCTYPE HTML>
<html lang="en" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Environmental Storytelling Discovery - Puzzle Design Knowledge Base</title>
<!-- Custom HTML head -->
<meta name="description" content="A taxonomy of puzzle design patterns from classic point-and-click adventure games">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon-de23e50b.svg">
<link rel="shortcut icon" href="../favicon-8114d1fc.png">
<link rel="stylesheet" href="../css/variables-8adf115d.css">
<link rel="stylesheet" href="../css/general-2459343d.css">
<link rel="stylesheet" href="../css/chrome-ae938929.css">
<link rel="stylesheet" href="../css/print-9e4910d8.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../fonts/fonts-9644e21d.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css">
<link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css">
<link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
window.path_to_searchindex_js = "../searchindex-c567150f.js";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc-35c178c7.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="mdbook-body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
sidebar_toggle.checked = false;
}
if (sidebar === 'visible') {
sidebar_toggle.checked = true;
} else {
html.classList.remove('sidebar-visible');
}
</script>
<nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="mdbook-page-wrapper" class="page-wrapper">
<div class="page">
<div id="mdbook-menu-bar-hover-placeholder"></div>
<div id="mdbook-menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
</label>
<button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
</button>
<ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
</ul>
<button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
</button>
</div>
<h1 class="menu-title">Puzzle Design Knowledge Base</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb" title="Git repository" aria-label="Git repository">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb/edit/main/src/puzzles/environmental-storytelling.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
<span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
</a>
</div>
</div>
<div id="mdbook-search-wrapper" class="hidden">
<form id="mdbook-searchbar-outer" class="searchbar-outer">
<div class="search-wrapper">
<input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
<div class="spinner-wrapper">
<span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
</div>
</div>
</form>
<div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
<div id="mdbook-searchresults-header" class="searchresults-header"></div>
<ul id="mdbook-searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="mdbook-content" class="content">
<main>
<h1 id="environmental-storytelling-discovery"><a class="header" href="#environmental-storytelling-discovery">Environmental Storytelling Discovery</a></h1>
<h2 id="mechanic-definition"><a class="header" href="#mechanic-definition">Mechanic Definition</a></h2>
<p>The puzzle solution is knowledge, not items. Information is hidden within the game environment—through object examination, eavesdropping, spatial observation, or noticing changes between visits. The player must actively seek information rather than receive it through dialogue.</p>
<h2 id="information-architecture"><a class="header" href="#information-architecture">Information Architecture</a></h2>
<p><strong>Conveyance Method</strong>: Environmental traces</p>
<ul>
<li>Objects contain hints when examined closely</li>
<li>Eavesdropping reveals hidden conversations</li>
<li>Spatial patterns across locations reveal connections</li>
<li>Changes in environment between visits indicate time passage</li>
</ul>
<p><strong>Player Action Pattern</strong>:</p>
<ol>
<li>Notice something worth examining (LOOK, EXAMINE)</li>
<li>Discover information through close inspection</li>
<li>Synthesize information with other discovered facts</li>
<li>Use synthesized knowledge to determine next action</li>
</ol>
<p><strong>Core Mechanic</strong>: The puzzle is about finding information the game doesnt explicitly tell you. Theres no dialogue that says “the password is X”—you must discover it through environmental interaction.</p>
<h2 id="design-rationale"><a class="header" href="#design-rationale">Design Rationale</a></h2>
<ul>
<li>Rewards observation—players who examine carefully are rewarded</li>
<li>Creates detective feel—the player becomes an investigator</li>
<li>Integrates story and gameplay—learning the story IS the puzzle</li>
<li>Avoids exposition dumps—information emerges organically</li>
</ul>
<h2 id="why-its-effective"><a class="header" href="#why-its-effective">Why Its Effective</a></h2>
<p>The satisfaction comes from “stumbling” onto information. Finding something unexpected feels like discovery, not task completion. The world feels “lived in”—containing traces of what happened before the player arrived.</p>
<h2 id="mechanic-variations"><a class="header" href="#mechanic-variations">Mechanic Variations</a></h2>
<div class="table-wrapper">
<table>
<thead>
<tr><th>Variation</th><th>Information Location</th><th>Discovery Method</th></tr>
</thead>
<tbody>
<tr><td>Object-based</td><td>Items, furniture, documents</td><td>Close examination</td></tr>
<tr><td>Eavesdrop-based</td><td>Through walls, behind doors</td><td>Hidden conversation listening</td></tr>
<tr><td>Spatial</td><td>Pattern of locations, accessible routes</td><td>Mapping environment</td></tr>
<tr><td>Temporal</td><td>Changes between visits</td><td>Returning at different times</td></tr>
<tr><td>Synthesis</td><td>Multiple sources</td><td>Combining partial facts</td></tr>
</tbody>
</table>
</div>
<h2 id="generic-example-structure"><a class="header" href="#generic-example-structure">Generic Example Structure</a></h2>
<p><strong>Goal</strong>: Learn [Information]</p>
<p><strong>Information Flow</strong>:</p>
<ul>
<li>Player notices locked door with no visible mechanism</li>
<li>Player searches environment for how door might open</li>
<li>Player finds secret passage through unusual interaction (examining object)</li>
<li>In passage, player can eavesdrop on guards discussing half the information</li>
<li>Player finds different location containing second half through examination</li>
<li>Player synthesizes: [Half 1] + [Half 2] = [Complete Information]</li>
</ul>
<p><strong>The puzzle</strong>: Information is never given explicitly—always discovered through environmental interaction.</p>
<h2 id="adventure-game-implementation"><a class="header" href="#adventure-game-implementation">Adventure Game Implementation</a></h2>
<p>The limited action set drives this puzzle entirely:</p>
<ul>
<li>LOOK/EXAMINE objects to find hidden information</li>
<li>LISTEN for overheard conversations</li>
<li>The puzzle exists in the environmental interaction, not in UI</li>
<li>Player must remember what they found—external note-taking often required</li>
</ul>
<p>This puzzle tests: “Can I find information the game doesnt explicitly tell me?”</p>
<hr>
<h3 id="quest-for-glory-1-brigand-meeting-note--archery-range-spy-qfg1"><a class="header" href="#quest-for-glory-1-brigand-meeting-note--archery-range-spy-qfg1">Quest for Glory 1: Brigand Meeting Note &amp; Archery Range Spy (QFG1)</a></h3>
<p><strong>Problem</strong>: The brigands are planning something at an undisclosed location, but no NPC will openly discuss their base or meeting schedule. Player must discover both the timing (“midday”) AND location (archery range) through environmental clues that are NOT explicitly explained by dialogue.</p>
<p><small>Source: qfg1-fandom-wiki.md, lines 35-36 — “Enter the tavern and pick up the note that is next to the middle barstool.” Later at line 145: “Go to town, and enter the tavern. Pick up the new note.”</small></p>
<p><strong>Environmental Discovery Chain</strong>:</p>
<pre><code>CLUE 1: Tavern Note (Week 2+)
Location: Aces &amp; Eights Tavern, Spielburg tavern interior
Discovery Method: LOOK at middle barstool area, use pickup action on floor
Information Content (Second Note): "B- meet at target range at noon, urgent -B"
Critical Decoded Data:
- "target range" = archery practice location
- "noon" = specific meeting time (midday)
CLUE 2: Archery Range Surveillance Location
From Healer's hut: South twice, then West = archery training area
&lt;small&gt;Source: qfg1-loudking-gamefaqs.md, line 126 — "Go to side of archery range (south twice from healer then west) at midday."&lt;/small&gt;
Discovery Method: Travel to coordinates, wait for specified time window
Environmental Observation Opportunity: Bruno and Brutus (traitor brigands) appear at noon
Eavesdrop Result: Dialogue reveals secret password "Hiden Goseke" used for cave entrance
</code></pre>
<p><small>Source: qfg1-loudking-gamefaqs.md, lines 124-128 — “Spy on traitor brigands → learn secret key location and password: Hiden Goseke.”</small></p>
<p><strong>Synthesis Phase</strong>:</p>
<ol>
<li>EXAMINE barstool in tavern → note found (no NPC mentions this exists)</li>
<li>READ note provides abstract clue: “meet at target range at noon”</li>
<li>Player must INTERPRET “target range” = archery/training area (environmental vocabulary mapping)</li>
<li>Travel to described location, WAIT for midday time window</li>
<li>Overhear dialogue during position-based eavesdropping → password revealed</li>
</ol>
<p><strong>Why Its Environmental Storytelling</strong>:</p>
<ul>
<li><strong>No Explicit NPC Guidance</strong>: No character says “go to archery range at noon and listen”—information exists ONLY in environmental documents (notes found on floor)</li>
<li><strong>LOOK/EXAMINE Action Critical</strong>: Finding the note requires examining barstools, not dialogue choice or menu option</li>
<li><strong>Temporal Layer</strong>: Second note only appears after game clock advances—environment changes based on time passage, teaching player that returning later reveals new information</li>
<li><strong>Eavesdropping as Core Discovery Mechanism</strong>: Password learned by PHYSICAL POSITIONING and listening, not through selectable dialogue trees</li>
</ul>
<p><strong>Distinction from Memo Chain (MI1)</strong>:
While both involve written documents, MI1s memo chain requires SYNTHESIZING multiple fragments into a larger narrative. Here, EACH note is self-contained actionable intelligence—“meet at target range at noon” is complete data, just hidden in environment rather than dialogued.</p>
<p><strong>Distinction from Information Brokerage</strong>:
No NPC exchange network exists here. Player doesnt ask “who knows where brigands meet?” The notes are PHYSICAL OBJECTS discovered through examination, not knowledge obtained through dialogue trades. Tavern owner never mentions notes exist—theyre pure environmental traces without social mediation.</p>
<hr>
<h3 id="quest-for-glory-iv-hotel-mordavia-exercise-machine--weight-training-qfg4"><a class="header" href="#quest-for-glory-iv-hotel-mordavia-exercise-machine--weight-training-qfg4">Quest for Glory IV: Hotel Mordavia Exercise Machine &amp; Weight Training (QFG4)</a></h3>
<p><strong>Setup</strong>: In the players hotel room at Hotel Mordavia, an exercise machine sits unused. Through reading its manual and progressive use over multiple days, the player can increase Strength stat—not through quest reward, but through environmental interaction discovery.</p>
<p><small>Source: qfg4-gamefaqs-sac.txt lines 2187-2194 — “Read exercise manual add weights progressively over days for maximum strength gain”</small></p>
<pre><code>ENVIRONMENTAL DISCOVERY PHASE - Object Examination:
Step 1 → Enter Hotel Mordavia room (automatically purchased upon first hotel visit)
Room contains: bed, chest, exercise machine in corner
Step 2 → EXAMINE exercise machine or USE it directly
Initial feedback: Machine exists but effectiveness unclear
INFORMATION ACQUISITION - Manual Reading:
Step 3 → READ instruction manual for exercise equipment
(Manual may be found on/next to machine via LOOK action)
Information revealed:
- Machine requires progressive weight increases for optimal results
- Weights are stored in room or can be added incrementally
- Daily usage limits apply (body needs rest between sessions)
ENVIRONMENTAL INTERACTION SEQUENCE - Progressive Training:
Step 4 → Day 1: Use machine with starting weights
Result: Some strength increase, feedback about "need more resistance"
Step 5 → Add additional weight plate to machine (environmental object manipulation)
Step 6 → Day 2+: Return after night cycle has passed
Game-enforced rest period: Cannot overtrain in single day
Step 7 → Repeat: Use machine → add more weight → sleep → return next day
Progressive strength gains track with weight increases
ENVIRONMENTAL FEEDBACK LOOP - Physical Limit Detection:
Step 8 → Eventually receive feedback: "You've reached maximum for today" or similar
Mechanic reveals: Daily usage cap exists, must wait 24 hours (in-game)
Step 9 → Continue cycling through available weight plates until all added
Final reward: Maximum Strength increase achievable through this method
ENVIRONMENTAL STORYTELLING ELEMENTS:INFORMATION HIDDEN IN PHYSICAL SPACE:
Strength training isn't offered through quest NPCs—player must DISCOVER it by examining room contents.
PROGRESSIVE ENVIRONMENTAL CHANGES:Machine configuration changes as player adds weights.
This visible modification teaches the progression system (more weight = more benefit).
TEMPORAL LAYER - Day/Night Cycle Matters:Cannot brute-force strength in hours; environment enforces realistic rest periods.
Teaches player that some environmental interactions are time-gated by world mechanics.
WHY IT'S ENVIRONMENTAL STORYTELLING:KNOWLEDGE NOT CONVEYED THROUGH DIALOGUE:No NPC offers "go exercise at hotel" quest.
Information exists ONLY in physical space (machine + manual).
EXAMINATION-DRIVE DISCOVERY:Player must actively LOOK/USE objects to uncover training mechanic.
World contains hidden depth—environment is richer than surface exploration suggests.
SPATIAL ANCHORING - Location-Specific Training:Exercise machine location matters; hotel room becomes "training ground" through discovery.
This contrasts with generic "go to gym" quests—here, the puzzle IS noticing the existing environmental feature.
COMPARISON TO QFG1 BRIGAND NOTE:Both use PHYSICAL DOCUMENTS as information sources rather than NPC dialogue.
QFG1 = stolen note with meeting time/location
QFG4 = manual with training instructions
Both rewards LOOK/EXAMINE actions; both teach players that environment contains untapped knowledge.
This puzzle exemplifies subtle Environmental Storytelling: it's optional, low-stakes, but demonstrates
that environmental examination pays off—training player to look more carefully in high-stakes situations too.
</code></pre>
<p><small>Cited from: qfg4-gamefaqs-sac.txt:2187-2194</small></p>
<hr>
<h3 id="quest-for-glory-iv-olga--boris-estranged-couple-reconciliation-qfg4"><a class="header" href="#quest-for-glory-iv-olga--boris-estranged-couple-reconciliation-qfg4">Quest for Glory IV: Olga &amp; Boris Estranged Couple Reconciliation (QFG4)</a></h3>
<p><strong>Setup</strong>: Gatekeeper Boris Stovich and shopkeeper Olga share the same last name. Environmental clues (name matching, NPC dialogue about estrangement) reveal theyre a separated couple that the player can reconcile through messenger roleplay. Purely honor-based with no puzzle mechanic lock, but excellent environmental storytelling.</p>
<p><small>Source: qfg4-gamefaqs-sac.txt lines 2343-2350 — “Tell Olga about Boris… tell him about Olga… bouncing back and forth until the two agree to get back together”</small></p>
<pre><code>ENVIRONMENTAL CLUE DISCOVERY - Name Observation:
Step 1 → Speak to Boris Stovich at town gates (gatekeeper)
Player learns his full name: "Boris Stovich"
Step 2 → Visit General Store, speak to Olga the shopkeeper
Player learns her full name: "Olga Stovich" (same last name!)
ENVIRONMENTAL STORYTELLING - Dialogue Context Clues:
Step 3 → Mention Boris's name to Olga during conversation
Environmental emotional trigger: Olga becomes "snippy" or defensive
Dialogue Revealed:"My estranged husband" comment from Olga confirms relationship.
Information not explicitly stated as puzzle; emerges through casual environmental dialogue.
PLAYER AS MESSENGER - Facilitating Environmental Reconciliation:
Step 4 → Report to Boris that Olga was asked about him
Result: Boris shows interest, asks to send message back
Step 5 → Return to Olga with Boris's "greetings" (player-selected dialogue)
Each exchange reveals more emotional context from both sides
Step 6 → Repeat messenger exchanges ~3-5 times
Environment changes: NPC attitudes soften, dialogue becomes warmer
ENVIRONMENTAL RESOLUTION - Natural Convergence:
Step 7 → Eventually NPCs independently agree to reconcile
Triggered by player's message-passing but resolution is NPC-driven
Step 8 → Boris and Olga reunite; may see them together later in game
OR hear confirmation from other town NPCs about reconciliation
ENVIRONMENTAL STORYTELLING ELEMENTS:INFORMATION EMERGES FROM DIALOGUE CONTEXT:
Player isn't given "reconcile couple" quest explicitly.
Clue exists in environment (shared last name) + emotional dialogue responses.
SPATIAL ANCHORING - Two Locations, One Story:Boris at gates, Olga in store—player connects them through repeated WALK actions.
Physical traversal between locations mirrors narrative bridging of estrangement.
PROGRESSIVE ENVIRONMENTAL CHANGE - NPC Attitudes Shift:World FEELS different after reconciliation; NPCs reference the restored relationship.
This is environmental storytelling because the WORLD STATE changed, not just player inventory/flag.
WHY IT'S ENVIRONMENTAL STORYTELLING (NOT INFORMATION BROKERAGE):NO EXPLICIT PUZZLE STRUCTURE:No "I'll give you X if you do Y" exchange network.
Information brokerage requires NPC trade logic; this is organic relationship evolution facilitated by player observation.
OBSERVATION OVER MECHANIC:Success depends on NOTICING name similarity and being curious enough to bridge the connection.
Not a requirement-based puzzle but a world-enrichment discovery.
HONOR-BASED REWARD (Non-Mechanical):Puzzle Points? None. Key item? Nothing tangible.
Reward is WORLD IMPROVEMENT: estranged couple reunited, NPCs happier, player Honor stat increases.
This exemplifies "soft" Environmental Storytelling—no gates locked until solved, but the world feels more complete
when environmental clues are noticed and acted upon. Teaches players that exploration has narrative value beyond item acquisition.
</code></pre>
<p><small>Cited from: qfg4-gamefaqs-sac.txt:2343-2350</small></p>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../puzzles/information-brokerage.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../puzzles/truth-revelation.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../puzzles/information-brokerage.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../puzzles/truth-revelation.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
</nav>
</div>
<template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
<template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
<template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
<template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
<template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_line_numbers = true;
</script>
<script>
window.playground_copyable = true;
</script>
<script src="../ace-2a3cd908.js"></script>
<script src="../mode-rust-2c9d5c9a.js"></script>
<script src="../editor-16ca416c.js"></script>
<script src="../theme-dawn-4493f9c8.js"></script>
<script src="../theme-tomorrow_night-9dbe62a9.js"></script>
<script src="../elasticlunr-ef4e11c1.min.js"></script>
<script src="../mark-09e88c2c.min.js"></script>
<script src="../searcher-c2a407aa.js"></script>
<script src="../clipboard-1626706a.min.js"></script>
<script src="../highlight-abc7f01d.js"></script>
<script src="../book-a0b12cfe.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

View File

@@ -0,0 +1,534 @@
<!DOCTYPE HTML>
<html lang="en" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Escalating Combat Progression - Puzzle Design Knowledge Base</title>
<!-- Custom HTML head -->
<meta name="description" content="A taxonomy of puzzle design patterns from classic point-and-click adventure games">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon-de23e50b.svg">
<link rel="shortcut icon" href="../favicon-8114d1fc.png">
<link rel="stylesheet" href="../css/variables-8adf115d.css">
<link rel="stylesheet" href="../css/general-2459343d.css">
<link rel="stylesheet" href="../css/chrome-ae938929.css">
<link rel="stylesheet" href="../css/print-9e4910d8.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../fonts/fonts-9644e21d.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css">
<link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css">
<link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
window.path_to_searchindex_js = "../searchindex-c567150f.js";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc-35c178c7.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="mdbook-body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
sidebar_toggle.checked = false;
}
if (sidebar === 'visible') {
sidebar_toggle.checked = true;
} else {
html.classList.remove('sidebar-visible');
}
</script>
<nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="mdbook-page-wrapper" class="page-wrapper">
<div class="page">
<div id="mdbook-menu-bar-hover-placeholder"></div>
<div id="mdbook-menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
</label>
<button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
</button>
<ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
</ul>
<button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
</button>
</div>
<h1 class="menu-title">Puzzle Design Knowledge Base</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb" title="Git repository" aria-label="Git repository">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb/edit/main/src/puzzles/escalating-combat-progression.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
<span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
</a>
</div>
</div>
<div id="mdbook-search-wrapper" class="hidden">
<form id="mdbook-searchbar-outer" class="searchbar-outer">
<div class="search-wrapper">
<input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
<div class="spinner-wrapper">
<span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
</div>
</div>
</form>
<div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
<div id="mdbook-searchresults-header" class="searchresults-header"></div>
<ul id="mdbook-searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="mdbook-content" class="content">
<main>
<h1 id="escalating-combat-progression--rpg-in-adventure-hybrid"><a class="header" href="#escalating-combat-progression--rpg-in-adventure-hybrid">Escalating Combat Progression / RPG-in-Adventure Hybrid</a></h1>
<p><strong>Information Architecture</strong>: Game establishes combat encounters within linear progression context where each victory yields weapon upgrades that enable defeating stronger opponents. Unlike Pattern Learning (where same rules apply to new targets), Combative Progression uses INCREASINGLY DIFFICULT enemies that require SPECIFIC counter-weapons obtained from previous victories. Player cannot skip ahead without proper equipment; sequence is enforced through combat stats rather than door locks.</p>
<p><strong>Player Action Pattern</strong>:</p>
<ol>
<li>Enter arena location with limited traversal (cannot proceed without defeating gatekeepers)</li>
<li>Challenge weakest opponent with available weapons (bare fists/feet initially)</li>
<li>Victory rewards item: defeated enemys weapon dropped as loot</li>
<li>New weapon has different attack profile (damage, speed, special effects)</li>
<li>Identify next opponents specific weakness/exploit through experimentation or observation</li>
<li>Select appropriate weapon counter; defeat → repeat until progression unlocked</li>
</ol>
<p><strong>Core Mechanic</strong>: Sequential combat encounters form linear gauntlet where each victory produces resource needed to overcome next challenge; cannot reorder sequence without grinding/replay.</p>
<hr>
<h2 id="variations"><a class="header" href="#variations">Variations</a></h2>
<div class="table-wrapper">
<table>
<thead>
<tr><th>Type</th><th>Enemy Scaling</th><th>Weapon Acquisition</th><th>Traversal Impact</th><th>Example</th></tr>
</thead>
<tbody>
<tr><td><strong>Linear Gauntlet</strong></td><td>Each enemy stronger than last</td><td>Defeated opponent drops weapon</td><td>Must clear all to proceed</td><td>FT Mine Road biker fights</td></tr>
<tr><td><strong>Optional Side Arena</strong></td><td>Fixed difficulty, no scaling</td><td>Single prize upon completion</td><td>Rewards not required for main path</td><td>DOTT time-based combat events</td></tr>
<tr><td><strong>Resource Hoarding Required</strong></td><td>Enemies weak individually</td><td>Weapons found elsewhere, not drops</td><td>Must gather specific counters before entry</td><td>Traditional RPG dungeons</td></tr>
</tbody>
</table>
</div>
<hr>
<h2 id="adventure-game-implementation"><a class="header" href="#adventure-game-implementation">Adventure Game Implementation</a></h2>
<h3 id="standard-actions-applied"><a class="header" href="#standard-actions-applied">Standard Actions Applied:</a></h3>
<ul>
<li><strong>CLICK/INTERACT with opponent</strong> = Initiate combat sequence (real-time mini-game)</li>
<li><strong>SELECT WEAPON from inventory</strong> = Choose attack method before engagement</li>
<li><strong>TIME ATTACKS in real-time window</strong> = Execute strikes within enemy cooldown periods</li>
<li><strong>OBSERVE ENEMY PATTERNS</strong> = Learn attack timing to avoid damage</li>
</ul>
<h3 id="key-distinctions-from-pattern-learning"><a class="header" href="#key-distinctions-from-pattern-learning">Key Distinctions from Pattern Learning:</a></h3>
<ol>
<li><strong>Weapon Gating</strong>: Cannot defeat Enemy B with fists—even if rules understood, stats insufficient</li>
<li><strong>Progressive Enhancement</strong>: Player gets STRONGER (equipment upgrade) rather than WISER (rule mastery)</li>
<li><strong>Single Linear Sequence</strong>: No “apply learned system to new domain”—only one correct path forward</li>
<li><strong>Failure = Restart Attempt</strong> not “try different rule application”</li>
</ol>
<h3 id="key-distinctions-from-mini-game-integration"><a class="header" href="#key-distinctions-from-mini-game-integration">Key Distinctions from Mini-Game Integration:</a></h3>
<ol>
<li><strong>Narrative Progression Locked</strong>: Cannot proceed in story without combat resolution</li>
<li><strong>In-Universe Justification</strong>: Weapons are inventory items, not abstract UI selections</li>
<li><strong>Persistent Equipment</strong>: Acquired weapons carried across multiple encounters, not one-off tools</li>
</ol>
<hr>
<h2 id="example-structure-full-throttle-mine-road-gauntlet"><a class="header" href="#example-structure-full-throttle-mine-road-gauntlet">Example Structure: Full Throttle Mine Road Gauntlet</a></h2>
<h3 id="setup-post-bridge-destruction"><a class="header" href="#setup-post-bridge-destruction">Setup (Post-Bridge Destruction):</a></h3>
<small>
Source: lparchive_opendork_fullthrottle_combined.txt, lines 1806-1812 — "B: It blew up. F: Ooooh! Sorry I missed that! Well... You could jump it, like Ricky Myran. Cavefish got his ramp in their hideout..."
</small>
<pre><code>LOCATION: Mine Road (single narrow path with no branches)
OBSTACLE: 8 hostile bikers positioned sequentially along route
PLAYER STATE: Bare fists/feet + tire iron (obtained earlier from gas station pillow)
GOAL: Reach Cavefish leader to obtain night-vision specs → ramp access → gorge jump
PROGRESSION GATING:
- Cannot bypass bikers via alternate route (no path exists)
- Cannot talk/negotiate past enemies (hostile faction)
- Must defeat each biker individually in sequence encountered
</code></pre>
<h3 id="sequential-combat-chain"><a class="header" href="#sequential-combat-chain">Sequential Combat Chain:</a></h3>
<p><small>Source: lparchive_opendork_fullthrottle_combined.txt, lines 1824-1865 — Complete mine road opponent documentation with weapon drop details</small></p>
<p><strong>PHASE 1 - Baseline Opponent (Tutorial)</strong>:</p>
<pre><code>Opponent #1: Returning antagonist from game's first chapter
Weapon: None (fists only)
Difficulty: Wuss (lowest tier)
Player Equipment: Fist/Feet + Tire Iron
RESOLUTION: Simple victory with any attack method
REWARD: None (teaches combat exists, no loot drop)
</code></pre>
<p><strong>PHASE 2 - First Weapon Acquisition</strong>:</p>
<pre><code>Opponent #2: Rottwheeler gang member
Weapon: Chain
Difficulty: Slightly tougher than baseline
STRATEGY DISCOVERY: Chain has moderate damage; tire iron counters effectively
RESOLUTION: Victory with tire iron preferred (fists too weak)
REWARD: CHAIN dropped as inventory item
NEW PLAYER STATE: Fists + Tire Iron + CHAIN
</code></pre>
<p><strong>PHASE 3 - Weapon Tier Advancement</strong>:</p>
<pre><code>Opponent #3: Female biker
Weapon: None
Difficulty: Minimal (token enemy)
RESOLUTION: Trivial battle; reinforces combat mechanic
REWARD: Fuel canister (needed for later bike modification, not combat)
</code></pre>
<p><strong>PHASE 4 - Escalating Threat</strong>:</p>
<pre><code>Opponent #4: Rottwheeler with skull-mace
Weapon: Skull-mace (powered-up chain variant)
Difficulty: Moderate
STRATEGY DISCOVERY: Skull-mace stronger than basic chain; player's chain now viable counter
RESOLUTION: Use acquired chain weapon → victory possible
REWARD: SKULL-MACE dropped (chain upgrade)
CRITICAL DESIGN ELEMENT: Player can lose chain in certain puzzle uses.
If chain lost, must fight remaining opponents with weaker options or backtrack to acquire replacement.
</code></pre>
<p><strong>PHASE 5 - Evasion Counterplay</strong>:</p>
<pre><code>Opponent #5: Fast retreat biker
Weapon: Escape attempt (immediate flight)
Difficulty: Low but time-sensitive
STRATEGY DISCOVERY: Enemy attempts instant retreat; chain can restrain before escape
RESOLUTION: Use chain IMMEDIATELY on fight initiation → enemy immobilized, bike captured
REWARD: Fuel + bike parts (not combat weapon)
SPECIAL CASE: This opponent doesn't drop a weapon—demonstrates not all fights follow same pattern.
</code></pre>
<p><strong>PHASE 6 - Elemental Weakness Introduction</strong>:</p>
<pre><code>Opponent #6: Chainsaw wielder (gender-ambiguous rider)
Weapon: CHAINSAW (insta-kill for player if hit)
Difficulty: Highest pre-boss tier
PROBLEM STATEMENT: Standard weapons chain/skull-mace insufficient; hitting enemy = instant loss
SOLUTION DISCOVERY: Fertilizer bag (from earlier farming puzzle) blinds chainsaw operator
RESOLUTION: Throw fertilizer → chainsawer incapacitated → victory
REWARD: CHAINSAW added to inventory (strongest single-hit weapon)
MECHANIC EXPANSION: First opponent requiring SPECIFIC non-combat counter rather than better weapon.
Introduces "rock-paper-scissors" element where brute force fails against specialized threat.
</code></pre>
<p><strong>PHASE 7 - Damage Sponge</strong>:</p>
<pre><code>Opponent #7: Heavy armor Rottwheeler
Weapon: 2x4 (most powerful melee weapon)
Difficulty: High HP, high damage output
STRATEGY DISCOVERY: Standard weapons chip health slowly; chainsaw can defeat in reasonable time
RESOLUTION: Use CHAINSAW → enemy defeated with minimal player damage taken
REWARD: 2x4 (longest reach weapon, needed for final fight)
DESIGN SIGNIFICANCE: Introduces "appropriate tool" concept—chainsaw IS strongest DPS but 2x4
has special utility value needed for progression.
</code></pre>
<p><strong>PHASE 8 - Boss Fight with Positional Requirements</strong>:</p>
<pre><code>Opponent #8: Cavefish leader (final gatekeeper)
Weapon: Oil slick (area denial, not direct attack)
Difficulty: Special conditions required for victory
COMPLEX CONSTRAINTS:
1. Enemy positioned VERY LOW on bike (below normal hitboxes)
2. Only 2x4 has sufficient REACH to strike at this height
3. Enemy uses oil slick when player approaches → causes fall/reset
4. Must wait for bumpy terrain section → enemy rises slightly, becomes hittable
RESOLUTION CHAIN:
- Wait for road bump animation (enemy sits up)
- STRIKE with 2x4 ONLY (no other weapon has reach)
- Land multiple hits before enemy retreats to low position
- Repeat until KO
FAILURE STATE: Forcing fight without 2x4 = impossible (hitbox unreachable)
FAILURE STATE #2: Using terrain trick improperly → enemy blows up bike (specs lost forever)
OPTIMAL RESOLUTION: KO with 2x4 on bumpy ground → Cavefish specs intact
</code></pre>
<p><strong>PHASE 9 - Progression Unlocked</strong>:</p>
<pre><code>REWARD FROM BOSS DEFEAT: Cavefish night-vision spectacles
APPLICATION OF LOOT:
- Use specs to reveal hidden cave entrance (forcefield disabled when viewed through them)
- Enter Cavefish hideout → ramp access available
- Complete gorge jump → Mine Road cleared → story progression resumes
</code></pre>
<hr>
<h2 id="why-this-is-escalating-combat-progression"><a class="header" href="#why-this-is-escalating-combat-progression">Why This Is Escalating Combat Progression</a></h2>
<h3 id="distinction-from-pattern-learning"><a class="header" href="#distinction-from-pattern-learning">Distinction from Pattern Learning:</a></h3>
<ul>
<li><strong>PL</strong>: “I learned swordfight rules in Domain A, apply same rules to Sword Master”</li>
<li><strong>FCP</strong>: “I acquired tire iron, then chain, then skull-mace, then chainsaw, then 2x4—each weapon REQUIRED for next opponent”</li>
</ul>
<p>The player could theoretically understand ALL combat mechanics from Opponent #1—but without the 2x4, Boss Fight is IMPOSSIBLE regardless of skill. This is RPG progression logic (equipment gating) applied to adventure game traversal.</p>
<h3 id="distinction-from-mini-game-integration"><a class="header" href="#distinction-from-mini-game-integration">Distinction from Mini-Game Integration:</a></h3>
<p>Combat isnt optional side activity—<strong>linear progression is locked until all encounters resolved</strong>. The mine road has NO alternative path; player MUST fight, not talk/steal/smart-way around enemies. This integrates combat as CORE traversal mechanic rather than bonus content.</p>
<h3 id="distinction-from-traditional-rpgs"><a class="header" href="#distinction-from-traditional-rpgs">Distinction from Traditional RPGs:</a></h3>
<ol>
<li><strong>No XP System</strong>: Player strength comes ONLY from equipment drops, not level advancement</li>
<li><strong>Fixed Sequence</strong>: Cannot grind weaker enemies for stats; exactly 8 opponents in set order</li>
<li><strong>Short Duration</strong>: Entire gauntlet takes 10-15 minutes, not hours of adventuring</li>
</ol>
<hr>
<h2 id="design-considerations-for-escalating-combat-progres-sion"><a class="header" href="#design-considerations-for-escalating-combat-progres-sion">Design Considerations for Escalating Combat Progres sion</a></h2>
<h3 id="implementation-patterns"><a class="header" href="#implementation-patterns">Implementation Patterns:</a></h3>
<ol>
<li><strong>Clear Visual Weapon Hierarchy</strong>: Player should see chain ≠ chainsaw (power differential obvious)</li>
<li><strong>Reach/Range Differentiation</strong>: Not all power = damage; some weapons have special hitbox properties (FTs 2x4 reach requirement)</li>
<li><strong>Backtracking Prevention</strong>: If player loses key weapon, either allow acquisition of replacement OR implement save state</li>
<li><strong>Counterplay Variety</strong>: Mix pure combat (chain vs skull-mace) with puzzle elements (fertilizer blinds chainsawer)</li>
</ol>
<h3 id="best-practices"><a class="header" href="#best-practices">Best Practices:</a></h3>
<ol>
<li><strong>First Fight as Tutorial</strong>: Opponent #1 should be trivial—teaches mechanic, not tests it</li>
<li><strong>Escalation Pacing</strong>: 2-3 weak enemies → 1 medium → 1 strong requires specific counter → boss with multiple conditions</li>
<li><strong>Weapon Utility Overlap</strong>: Later weapons should replace earlier ones functionally (chainsaw &gt; skull-mace for DPS) but some retain unique value (2x4 reach)</li>
<li><strong>Fail Forward Option</strong>: If player screws up boss fight, provide alternative path or soft reset rather than game-breaking state</li>
</ol>
<h3 id="common-pitfalls"><a class="header" href="#common-pitfalls">Common Pitfalls:</a></h3>
<ul>
<li><strong>Weapon Loss Without Recovery</strong>: If player loses chain on puzzle with no replacement available → combat gauntlet becomes impossible</li>
<li><strong>Unclear Enemy Weaknesses</strong>: Player shouldnt need walkthrough to know “fertilizer stops chainsawer”</li>
<li><strong>Hitbox Ambiguity</strong>: “Only 2x4 can reach low rider” needs visual telegraphing, not obscure collision rules</li>
</ul>
<hr>
<h2 id="related-types"><a class="header" href="#related-types">Related Types</a></h2>
<div class="table-wrapper">
<table>
<thead>
<tr><th>Type</th><th>Similarity to Combat Progression</th><th>Distinction</th></tr>
</thead>
<tbody>
<tr><td><strong>Pattern Learning</strong></td><td>Both teach systems through sequential encounters</td><td>PL = same power, new applications; CP = increasing power requirements</td></tr>
<tr><td><strong>Meta-Puzzle Construction</strong></td><td>Both require sequential step completion</td><td>MPC = item A produces item B; CP = victory over enemy B produces weapon B</td></tr>
<tr><td><strong>Timed Con sequence / Permadeath</strong></td><td>Both can create “get this right now” pressure</td><td>Timed = single critical moment; CP = sustained series of escalating moments</td></tr>
</tbody>
</table>
</div>
<hr>
<h2 id="game-examples"><a class="header" href="#game-examples">Game Examples</a></h2>
<h3 id="full-throttle-mine-road-combat-gauntlet-ft---main-example"><a class="header" href="#full-throttle-mine-road-combat-gauntlet-ft---main-example">Full Throttle: Mine Road Combat Gauntlet (FT) - Main Example</a></h3>
<p>See complete solution chain documented in “Example Structure” section above.</p>
<p><strong>Why Its Escalating Combat Progression</strong>: This is the DEFINITIVE example—8 sequential opponents, each requiring specific weapon tier or counter-strategy obtained from previous victories. The entire sequence forms a single traversal obstacle where progression is EQUIPMENT-DEPENDENT rather than KNOWLEDGE-DEPENDENT. Even if player understood all combat tactics from opponent #1, they physically cannot defeat opponent #8 (Cavefish leader) without the 2x4 dropped by opponent #7.</p>
<small>
Source: lparchive_opendork_fullthrottle_combined.txt, lines 1704, 1824-1865 — Tire iron acquisition and complete enemy progression documentation
</small>
<hr>
<h3 id="full-throttle-gang-social-recognition-ft-pattern-identification"><a class="header" href="#full-throttle-gang-social-recognition-ft-pattern-identification">Full Throttle: Gang Social Recognition (FT, Pattern Identification)</a></h3>
<p>A secondary pattern system exists in Full Throttles biker gang identification mechanic. The game features three distinct motorcycle gangs—the Polecats (Bens gang), the Rottwheelers (hostile bikers on mine road), and the Cavefish (cult-like environmentalists). Each gang has visual identifiers that must be recognized for social interactions to succeed.</p>
<small>
Source: lparchive_opendork_fullthrottle_combined.txt — Multiple references to "Rottwheeler" identification and gang affiliation recognition
</small>
<p><strong>Identification Pattern</strong>:</p>
<pre><code>POLECATS (Ben's allies):
- Visual: Skull patches, specific vest designs
- Behavior: Willing to talk/trade with Ben
- Location: Corley Motors headquarters area
ROTTWHEELERS (Mine Road enemies):
- Visual: Distinct skull variations (rebel alliance tatoo mentioned)
- Behavior: Hostile, will not negotiate, must fight
- Location: Mine Road gauntlet exclusively
CAVEFISH (Environmental cultists):
- Visual: Bug-eating behavior, cave-dwelling appearance
- Special: Use infrared night-vision; cannot see without specs
- Behavior: Religious devotion to Ricky Myran ("spirit" reverence)
</code></pre>
<p><strong>Why This Is Pattern Recognition (NOT Social Engineering)</strong>:
Player doesnt learn a “social interaction system”—they simply identify WHICH gang is present at each location, then use appropriate approach. This is environmental context recognition rather than active social manipulation. Unlike Comedy-Based Persuasion (MI1), theres no “insult-inspect” discovery process; gang affiliations are immediately apparent through dialogue and appearance.</p>
<hr>
<h2 id="when-to-document-as-escalating-combat-progression"><a class="header" href="#when-to-document-as-escalating-combat-progression">When to Document as Escalating Combat Progression</a></h2>
<p>Document a puzzle sequence as this type when:</p>
<ol>
<li>✓ Player must defeat multiple opponents in FIXED SEQUENCE</li>
<li>✓ Each victory awards WEAPON/ITEM required (or helpful) for next opponent</li>
<li>✓ Cannot reorder sequence or skip opponents via alternate methods</li>
<li>✓ Progression is EQUIPMENT-GATED rather than knowledge-gated</li>
</ol>
<p>DO NOT classify as this type if:</p>
<ul>
<li>Opponents can be bypassed entirely (optional side content = Mini-Game Integration instead)</li>
<li>All enemies defeated with same abilities, no upgrades required (Pattern Learning instead)</li>
<li>Single combat encounter without progression chain (Simple Combat Puzzle)</li>
</ul>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../puzzles/robot-programming.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../puzzles/corporate-infiltration.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../puzzles/robot-programming.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../puzzles/corporate-infiltration.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
</nav>
</div>
<template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
<template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
<template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
<template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
<template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_line_numbers = true;
</script>
<script>
window.playground_copyable = true;
</script>
<script src="../ace-2a3cd908.js"></script>
<script src="../mode-rust-2c9d5c9a.js"></script>
<script src="../editor-16ca416c.js"></script>
<script src="../theme-dawn-4493f9c8.js"></script>
<script src="../theme-tomorrow_night-9dbe62a9.js"></script>
<script src="../elasticlunr-ef4e11c1.min.js"></script>
<script src="../mark-09e88c2c.min.js"></script>
<script src="../searcher-c2a407aa.js"></script>
<script src="../clipboard-1626706a.min.js"></script>
<script src="../highlight-abc7f01d.js"></script>
<script src="../book-a0b12cfe.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,369 @@
<!DOCTYPE HTML>
<html lang="en" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Memo Chain - Puzzle Design Knowledge Base</title>
<!-- Custom HTML head -->
<meta name="description" content="A taxonomy of puzzle design patterns from classic point-and-click adventure games">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon-de23e50b.svg">
<link rel="shortcut icon" href="../favicon-8114d1fc.png">
<link rel="stylesheet" href="../css/variables-8adf115d.css">
<link rel="stylesheet" href="../css/general-2459343d.css">
<link rel="stylesheet" href="../css/chrome-ae938929.css">
<link rel="stylesheet" href="../css/print-9e4910d8.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../fonts/fonts-9644e21d.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css">
<link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css">
<link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
window.path_to_searchindex_js = "../searchindex-c567150f.js";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc-35c178c7.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="mdbook-body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
sidebar_toggle.checked = false;
}
if (sidebar === 'visible') {
sidebar_toggle.checked = true;
} else {
html.classList.remove('sidebar-visible');
}
</script>
<nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="mdbook-page-wrapper" class="page-wrapper">
<div class="page">
<div id="mdbook-menu-bar-hover-placeholder"></div>
<div id="mdbook-menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
</label>
<button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
</button>
<ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
</ul>
<button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
</button>
</div>
<h1 class="menu-title">Puzzle Design Knowledge Base</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb" title="Git repository" aria-label="Git repository">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb/edit/main/src/puzzles/memo-chain.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
<span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
</a>
</div>
</div>
<div id="mdbook-search-wrapper" class="hidden">
<form id="mdbook-searchbar-outer" class="searchbar-outer">
<div class="search-wrapper">
<input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
<div class="spinner-wrapper">
<span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
</div>
</div>
</form>
<div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
<div id="mdbook-searchresults-header" class="searchresults-header"></div>
<ul id="mdbook-searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="mdbook-content" class="content">
<main>
<h1 id="environmental-memo-chain"><a class="header" href="#environmental-memo-chain">Environmental Memo Chain</a></h1>
<p><strong>Information Architecture</strong>: Written fragments (notes, memos, signs) distributed across multiple locations in the game world. Each fragment contains piece of larger narrative or set of instructions. Information is presented as background “worldbuilding” but collectively encodes puzzle solution.</p>
<p><strong>Player Action Pattern</strong>: Collect scattered written items through exploration. Read/compare contents mentally or against notes taken while exploring. Synthesize connections between seemingly unrelated memos to deduce location, character motive, or required item/action.</p>
<p><strong>Core Mechanic</strong>: Distributed text fragments → player-assembling narrative → puzzle answer revealed through reading comprehension + spatial mapping. No single memo contains full solution; meaning emerges from combination.</p>
<p><strong>Variations</strong>:</p>
<ul>
<li>Comic interoffice memos between game characters (complaints about each other)</li>
<li>Trail notes left by previous adventurers</li>
<li>Scattered diary pages out of chronological order</li>
<li>Cryptic signs/inscriptions requiring reordering or cross-referencing</li>
</ul>
<p><strong>Adventure Game Implementation</strong>:</p>
<ul>
<li>LOOK at scattered items across world (piles of paper, bulletin boards, ground litter)</li>
<li>Text is collected as inventory or viewed in situ and remembered</li>
<li>Player must map memo locations + connect content themes</li>
<li>Standard exploration actions; puzzle is in reading comprehension + memory</li>
</ul>
<p><strong>Example Structure</strong>:</p>
<pre><code>Discovery Phase:
→ Explore Location A: LOOK at note → "Don't leave key here - [CHAR_B] will find it"
→ Explore Location B (unrelated): LOOK at memo → "[CHAR_A], I stole your backdoor entrance!"
→ Explore Location C: LOUK at sign → "Restricted area: Monkey Head Base"
Synthesis Phase:
→ Compare all fragments mentally
→ Deduce relationship between characters, location hierarchy, item flow
→ Solution emerges: [KEY] was hidden in [MONKEY_HEAD] by [CHAR_A] to hide from [CHAR_B]
</code></pre>
<p><strong>Kings Quest VI Parallel</strong>: None identified in walkthrough.</p>
<p><strong>Monkey Island Example</strong>:</p>
<ul>
<li><strong>LeChuck Base Discovery</strong>: Three memos scattered across different screens:
<ul>
<li>Beach memo: “Please return our key to the Monkey Head” (Cannibals warning)</li>
<li>River Fork memo: Complaint about LeChucks noisy activities in Sacred Monkey Head area, saw him taking woman with scarf there</li>
<li>Pond memo: LeChuck warns Cannibals not to enter Monkey Head, calls it his “secret base of operations”</li>
<li><strong>Synthesis</strong>: Monkey Island = LeChucks hideout; must investigate the Giant Monkey Head interior</li>
</ul>
</li>
</ul>
<hr>
<h2 id="game-examples"><a class="header" href="#game-examples">Game Examples</a></h2>
<h3 id="spacequest-iv-time-pod-code-synthesis-sq4"><a class="header" href="#spacequest-iv-time-pod-code-synthesis-sq4">SpaceQuest IV: Time Pod Code Synthesis (SQ4)</a></h3>
<p><strong>Problem</strong>: Roger needs to travel to SpaceQuest Is location (Ulence Flats), but the time pod requires a six-digit destination code. The complete code is split across THREE separate sources in different game worlds, acquired at different play times. No single source provides complete navigation data.</p>
<p><small>Source: gamefaqs-tricrokra-archive.html, lines 436-438 — “Unfold this rag and youll see the part of a time-pod code you need later.”</small></p>
<p><small>Source: gamefaqs-tricrokra-archive.html, lines 497-503 — “You get the first three digits of the code to get in a new time sector, the three on the rag are the last three”</small></p>
<p><small>Source: adventuredoor-walkthrough.html, lines 458-459 — “Read the Space Quest IV hint book, page four about where to go with time pods. Check the wad of used chewing gum to complete the destination code.”</small></p>
<pre><code>MEMO COLLECTION PHASE:
SOURCE 1 - Gum Wrapper (SpaceQuest X, Strange Planet):
Location: Nest, after dead Sequel Police drops from sky
Action: Search body → find "rag of paper" (gum wrapper)
Discovery: Unfolding reveals THREE SYMBOLS (last half of code)
Acquisition time: Early game, before mall sequence
SOURCE 2 - Hint Book Page 4 (SpaceQuest X, Galaxy Galleria Mall):
Location: Software Store, bargain bin purchase required
Cost: Must earn money first (burger minigame) to afford
Discovery: Page 4 contains multiple time pod destinations
Critical data: THREE SYMBOLS for "Ulence Flats" destination
Acquisition time: Mid-game mall sequence (mandatory disguise/money puzzles first)
SOURCE 3 - Arcade Time Pod Display (SpaceQuest X):
Location: Game arcade, arrives with Sequel Police officers
Discovery: Current location encoding displayed on pod screen
Critical action: Must WRITE DOWN before leaving (game explicitly warns)
Consequence: Without this code, cannot return to mall after leaving
SYNTHESIS PHASE:
1. Player has gum wrapper (3 symbols) from SQX Planet
2. Player buys hint book, reads page 4 (3 more symbols for Ulence Flats)
3. Combined total = 6-symbol complete code
4. Player locates accessible time pod with displayed interface
5. Enter all six symbols in correct order → destination unlocked
WHY IT'S A MEMO CHAIN:
1. DISTRIBUTED FRAGMENTS: Code split across gum wrapper (physical note), hint book (documented text), and memory requirement (pod display text)
2. NO SINGLE SOURCE IS COMPLETE:
- Gum = 3/6 symbols
- Hint Book = different 3/6 symbols
- Display = interface location reference
3. SYNTHESIS REQUIRED: Player must mentally combine "first three from book" + "last three from rag" into ordered six-symbol sequence
4. WORLD-BUILDING DISGUISE: Fragments presented as environmental details — gum wrapper felt optional, hint book seemed like easter egg
</code></pre>
<p><strong>Distinction from Multi-Faceted Plan</strong>: MFP = gather independent ITEMS for synthesis. Memo Chain = gather INFORMATION fragments that collectively encode a solution. Here the code numbers are data, not physical components to combine.</p>
<hr>
<h2 id="related-types"><a class="header" href="#related-types">Related Types</a></h2>
<div class="table-wrapper">
<table>
<thead>
<tr><th>Type</th><th>Similarity</th><th>Distinction</th></tr>
</thead>
<tbody>
<tr><td>Multi-Faceted Plan</td><td>Both gather across sources</td><td>MFP collects items/actions; Memo Chain collects text fragments synthesizing into encoded solution</td></tr>
<tr><td>Environmental Storytelling</td><td>Info hidden in world details</td><td>Environmental Storytelling reveals lore; Memo Chain reveals puzzle solutions</td></tr>
<tr><td>Information Brokerage</td><td>All involve knowledge transfer</td><td>Brokerage = NPC exchanges; Memo Chain = environment-to-player data only</td></tr>
</tbody>
</table>
</div>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../puzzles/cross-realm-logistics.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../puzzles/sensory-exploitation.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../puzzles/cross-realm-logistics.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../puzzles/sensory-exploitation.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
</nav>
</div>
<template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
<template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
<template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
<template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
<template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_line_numbers = true;
</script>
<script>
window.playground_copyable = true;
</script>
<script src="../ace-2a3cd908.js"></script>
<script src="../mode-rust-2c9d5c9a.js"></script>
<script src="../editor-16ca416c.js"></script>
<script src="../theme-dawn-4493f9c8.js"></script>
<script src="../theme-tomorrow_night-9dbe62a9.js"></script>
<script src="../elasticlunr-ef4e11c1.min.js"></script>
<script src="../mark-09e88c2c.min.js"></script>
<script src="../searcher-c2a407aa.js"></script>
<script src="../clipboard-1626706a.min.js"></script>
<script src="../highlight-abc7f01d.js"></script>
<script src="../book-a0b12cfe.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,455 @@
<!DOCTYPE HTML>
<html lang="en" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Metaphor-to-Literal Translation - Puzzle Design Knowledge Base</title>
<!-- Custom HTML head -->
<meta name="description" content="A taxonomy of puzzle design patterns from classic point-and-click adventure games">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon-de23e50b.svg">
<link rel="shortcut icon" href="../favicon-8114d1fc.png">
<link rel="stylesheet" href="../css/variables-8adf115d.css">
<link rel="stylesheet" href="../css/general-2459343d.css">
<link rel="stylesheet" href="../css/chrome-ae938929.css">
<link rel="stylesheet" href="../css/print-9e4910d8.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../fonts/fonts-9644e21d.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css">
<link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css">
<link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
window.path_to_searchindex_js = "../searchindex-c567150f.js";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc-35c178c7.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="mdbook-body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
sidebar_toggle.checked = false;
}
if (sidebar === 'visible') {
sidebar_toggle.checked = true;
} else {
html.classList.remove('sidebar-visible');
}
</script>
<nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="mdbook-page-wrapper" class="page-wrapper">
<div class="page">
<div id="mdbook-menu-bar-hover-placeholder"></div>
<div id="mdbook-menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
</label>
<button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
</button>
<ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
</ul>
<button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
</button>
</div>
<h1 class="menu-title">Puzzle Design Knowledge Base</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb" title="Git repository" aria-label="Git repository">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb/edit/main/src/puzzles/metaphor-literal.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
<span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
</a>
</div>
</div>
<div id="mdbook-search-wrapper" class="hidden">
<form id="mdbook-searchbar-outer" class="searchbar-outer">
<div class="search-wrapper">
<input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
<div class="spinner-wrapper">
<span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
</div>
</div>
</form>
<div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
<div id="mdbook-searchresults-header" class="searchresults-header"></div>
<ul id="mdbook-searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="mdbook-content" class="content">
<main>
<h1 id="metaphor-to-literal-translation"><a class="header" href="#metaphor-to-literal-translation">Metaphor-to-Literal Translation</a></h1>
<h2 id="mechanic-definition"><a class="header" href="#mechanic-definition">Mechanic Definition</a></h2>
<p>The game presents abstract language—idioms, metaphors, poetic descriptions, or symbolic phrases—as puzzle instructions. The player must interpret figurative language as literal game mechanics: what would this phrase look like if it could physically exist in the game world?</p>
<h2 id="information-architecture"><a class="header" href="#information-architecture">Information Architecture</a></h2>
<p><strong>Conveyance Method</strong>: Text-based symbolic language</p>
<ul>
<li>Phrases appear in dialogue, item descriptions, book text, or environmental signage</li>
<li>The solution requires “translating” the metaphor into concrete game objects/actions</li>
<li>No explicit instruction—the player must recognize the symbolic nature</li>
</ul>
<p><strong>Player Action Pattern</strong>:</p>
<ol>
<li>Encounter metaphorical phrase in text</li>
<li>Identify what the phrase would mean if taken literally</li>
<li>Locate or create the literal equivalent in the game world</li>
<li>Execute literal action → solution achieved</li>
</ol>
<p><strong>Core Mechanic</strong>: The puzzle tests linguistic creativity—can the player imagine what “wallflowers” literally looks like in a game with flowers?</p>
<h2 id="design-rationale"><a class="header" href="#design-rationale">Design Rationale</a></h2>
<ul>
<li>Creates world coherence—language manifests physically, making the world feel internally consistent</li>
<li>Rewards literary thinking—players who engage carefully with text are advantaged</li>
<li>Generates memorable moments—literalized metaphors become distinctive visual/cognitive landmarks</li>
<li>Avoids generic solutions—each phrase has unique literal translation</li>
</ul>
<h2 id="why-its-effective"><a class="header" href="#why-its-effective">Why Its Effective</a></h2>
<p>The “aha” moment is distinct: recognizing that a phrase is symbolic rather than descriptive. This requires active reading rather than passive scanning—a skill that distinguishes engaged players.</p>
<h2 id="mechanic-variations"><a class="header" href="#mechanic-variations">Mechanic Variations</a></h2>
<div class="table-wrapper">
<table>
<thead>
<tr><th>Variation</th><th>Text Type</th><th>Literal Translation Approach</th></tr>
</thead>
<tbody>
<tr><td>Idiom</td><td>Common sayings</td><td>Identify physical objects that represent the idioms meaning</td></tr>
<tr><td>Poetic</td><td>Descriptive verse</td><td>Visualize the imagery as actual game elements</td></tr>
<tr><td>Symbolic</td><td>Heraldic/mythic language</td><td>Map symbols to game objects through cultural knowledge</td></tr>
<tr><td>Invented</td><td>Game-specific phrases</td><td>Learn the games symbolic vocabulary through context</td></tr>
</tbody>
</table>
</div>
<h2 id="generic-example-structure"><a class="header" href="#generic-example-structure">Generic Example Structure</a></h2>
<p><strong>Puzzle Text</strong>: “You will need salt water not from the sea to complete the binding.”</p>
<p><strong>Information Flow</strong>:</p>
<ul>
<li>Player reads text → recognizes metaphorical instruction</li>
<li>Player asks: “What could salt water not from the sea literally be?”</li>
<li>Options: tears (salty), magical solution, mineral water</li>
<li>Player examines game world: Are there crying things? Plants with “tears”?</li>
<li>Player discovers: A patch of “babys tears” plants that can be made to cry</li>
<li>Player finds: A way to make them cry (give milk to one, others cry in sympathy)</li>
<li>Player collects: The literal “tears”</li>
</ul>
<p><strong>The puzzle</strong>: Translating “salt water not from the sea” → “plant tears” through symbolic interpretation.</p>
<h2 id="adventure-game-implementation"><a class="header" href="#adventure-game-implementation">Adventure Game Implementation</a></h2>
<p>The limited action set maps directly to this puzzle:</p>
<ul>
<li>LOOK at text contexts (signs, books, dialogue) where phrases appear</li>
<li>EXAMINE objects referenced in phrases—do they have literal counterparts?</li>
<li>USE items that match the literal interpretation</li>
<li>The puzzle is fundamentally about mapping text to world</li>
</ul>
<h2 id="game-examples"><a class="header" href="#game-examples">Game Examples</a></h2>
<h3 id="monkey-island-i-trolls-red-herring-riddle"><a class="header" href="#monkey-island-i-trolls-red-herring-riddle">Monkey Island I: Trolls Red Herring Riddle</a></h3>
<p><strong>Metaphor</strong>: “I want something that will attract attention but have no real importance”</p>
<p><strong>Literal Translation Chain</strong>:</p>
<ol>
<li>Player reads riddle as abstract requirement</li>
<li>Interprets: “What object is literally known for attracting attention yet being unimportant?”</li>
<li>Identifies idiom: “red herring” — distracting but irrelevant detail in storytelling/mystery</li>
<li>Searches inventory: Whats a literal RED HERRING? → Fish (which are often painted red as decoration)</li>
<li>Execute: Give the Fish to Troll</li>
<li>Trolls confirmation: “Ah! A red herring!” reveals the idiom was intentionally chosen</li>
</ol>
<p><strong>Design Elegance</strong>: The phrase exists simultaneously as genuine puzzle instruction AND as a common English metaphor—the player wins by recognizing both layers.</p>
<h3 id="spacequest-ii-shaman-word-activation-sq2"><a class="header" href="#spacequest-ii-shaman-word-activation-sq2">SpaceQuest II: Shaman Word Activation (SQ2)</a></h3>
<p><strong>Metaphor</strong>: After Roger frees a trapped alien, he encounters small aliens who thank him through their shaman. The shaman speaks an unknown word/syllable via the dialect translator. This foreign language word is the KEY to moving a boulder blocking progress—but the player must understand that this single verbal utterance triggers the mechanical action.</p>
<p><small>Source: gamefaqs-tricrokra-archive.html, lines 459-462 — “Hear out the shaman who will thank you for saving one of his tribe… SAY THE WORD (the aliens will move the rock)”</small></p>
<p><strong>Literal Translation Chain</strong>:</p>
<ol>
<li>Roger saves trapped alien earlier (independent puzzle) → establishes goodwill connection</li>
<li>Player encounters little aliens in valley after falling through dark cave<br>3- Aliens lead Roger to “village” room shaman appears</li>
<li>Shaman speaks strange word via dialect translator device in inventory: <strong>“SHSR”</strong> (exact syllable unclear what this means, but walkthrough notes its the alien language equivalent of something significant)</li>
</ol>
<p>5- PLAYER REALIZATION: The phrase/syllable isnt description—it IS the action command itself
6. Execute: Type “SAY THE WORD” at village → game accepts verbatim foreign syllable
7. Result: Aliens move boulder, revealing underground passage to next area</p>
<p><strong>Why Its Metaphor-to-Literal (Edge Case)</strong>:<br>This is a borderline case—the metaphor isnt poetic language but FOREIGN LANGUAGE AS INTERFACE. The “translation” required is:</p>
<p>Metaphorical understanding: Shamans speak words of POWER that trigger events
Literal game implementation: Type exact syllable heard → word becomes command trigger</p>
<p><strong>Distinction from Standard Metaphor</strong>: Unlike Trolls Red Herring (common idiom decoded), this uses LITERAL foreign language—the player doesnt decode symbolism, they REPEAT what they heard. However, the core mechanic remains: spoken language = mechanical action trigger, making it a simplified variant of metaphor-to-literal translation.</p>
<p><strong>Alternative Classification</strong>: This could also be Observation Replay (“memorize word, say it later”) but the puzzles weight comes from understanding that the WORD ITSELF is the key—not where/say/when. The “translation” is accepting that dialogue can directly enable actions.</p>
<hr>
<h3 id="monkey-island-ii-bone-maze-navigation-song"><a class="header" href="#monkey-island-ii-bone-maze-navigation-song">Monkey Island II: Bone Maze Navigation Song</a></h3>
<p><strong>Metaphor (from dream sequence)</strong>:</p>
<pre><code>The HEAD bone is connected to the RIB bone.
The RIB bone is connected to the LEG bone.
The LEG bone is connected to the HIP bone.
</code></pre>
<p><strong>Literal Translation Chain</strong>:</p>
<ol>
<li>Player experiences bizarre song during near-death dream state</li>
<li>Later faces maze of “Ugly Bone Things” — wall panels with different bone carvings</li>
<li>Recognizes: Song lyrics describe physical connections between bones</li>
<li>Translation rule emerges: Each verse maps to one passage; push the FIRST three bones mentioned (fourth is irrelevant noise)</li>
<li>Execute sequence: HEAD → RIB → LEG passages, ignoring HIP each time</li>
<li>Result: Passageway opens, progress granted</li>
</ol>
<p><strong>Key Distinction</strong>: This is metaphor-to-literal because the song (poetic/abstract encoding) describes a PHYSICAL system (bone maze walls). Not “learn pattern” but “decode artistic encoding into mechanical solution.”</p>
<hr>
<h2 id="common-misidentifications"><a class="header" href="#common-misidentifications">Common Misidentifications</a></h2>
<div class="table-wrapper">
<table>
<thead>
<tr><th>Apparent Metaphor</th><th>Why Its Different</th></tr>
</thead>
<tbody>
<tr><td>Dance map = navigation instructions (MI1 fake map)</td><td>These are LITERAL dance moves applied as path choices, not metaphorical language</td></tr>
<tr><td>Voodoo doll categories (“something of the Thread”)</td><td>Categories are literal requirements, not symbolic phrases being decoded</td></tr>
</tbody>
</table>
</div>
<p><strong>Test</strong>: Is the text <em>figurative</em> (requires linguistic creativity to interpret) or <em>literal instructions in disguised form</em> (requires pattern recognition)? Metaphor-to-Literal requires the former.</p>
<h2 id="adventure-game-implementation-1"><a class="header" href="#adventure-game-implementation-1">Adventure Game Implementation</a></h2>
<p>The limited action set maps directly to this puzzle:</p>
<ul>
<li>LOOK at text contexts (signs, books, dialogue) where phrases appear</li>
<li>EXAMINE objects referenced in phrases—do they have literal counterparts?</li>
<li>USE items that match the literal interpretation</li>
<li>The puzzle is fundamentally about mapping text to world</li>
</ul>
<hr>
<h3 id="loom-gravestone-prophecy-translation"><a class="header" href="#loom-gravestone-prophecy-translation">Loom: Gravestone Prophecy Translation</a></h3>
<p><strong>Abstract Text (from mothers gravestone)</strong>:</p>
<pre><code>Destiny shall draw the lightning
Down from heaven; roll its thunder
Far across the sea to where I
Wait upon the Shore of Wonder
On the day the sky is opened
And the tree is split asunder
</code></pre>
<small>
Source: the-spoiler_gamecat.html, lines 116-122 — "Destiny shall draw the lightning Down from heaven; roll its thunder Far across the sea to where I Wait upon the Shore of Wonder On the day the sky is opened And the tree is split asunder"
<p>Source: strategywiki_loom_walkthrough.html, lines 658-659 — “Read the up front tombstone. It belongs to Cygna Threadbare, which is (in case you missed it), Bobbins mother.”
</p>
<p><strong>Metaphor-to-Literal Translation Chain</strong>:</p>
<ol>
<li>Player reads prophecy as poetic narrative describing future events</li>
<li>Key metaphorical phrases identified:
<ul>
<li>“sky is opened” → What could OPEN SKY literally look like?</li>
<li>“tree is split asunder” → The tree must BE SPLIT somehow</li>
</ul>
</li>
<li>Earlier game: Player learned OPEN draft from egg (mechanically, “opening” is a known action)</li>
<li>Hypothesis formation: “What if I cast OPEN on the SKY?” — literal interpretation of sky-opening metaphor</li>
<li>Test execution: Return to opening location (Hillpeak), click stars/sky, cast OPEN draft</li>
<li>Literal result: Lightning strikes, TREE SPLIT in half</li>
<li>Split tree falls into water → becomes boat for sea crossing</li>
</ol>
<small>
Source: walkthrough-king_bennett.html, lines 68 — "Leave the village again and return to the mountain where you started. Cast Open on the sky, then return towards the village and go to the dock just left of the village."
<p>Source: gamefaqs_t_hayes_archived.html, lines 301-304 — “Walk right along the path to return to the top of the mountain. Cast Open on the sky, which causes a boat to sail to the dock.”
</p>
<p><strong>Second Layer: Scrying Sphere Visions (Symbolic Imagery → Future Events)</strong>:</p>
<p>The glassmakers sphere shows symbolic scenes that translate to literal future events:</p>
<ol>
<li><strong>First viewing</strong>: Shows cave with dragon on fire (seemingly abstract apocalyptic vision)</li>
<li><strong>Translation discovery</strong>: Player later learns GOLD-TO-STRAW draft, turns dragons treasure to straw</li>
<li><strong>Application</strong>: Cast SLEEP on dragon → dragon breathes fire while sleeping → STRAW IGNITES → CAVE ON FIRE matches sphere vision exactly</li>
<li><strong>Reward</strong>: Fire reveals previously hidden cave exit (exactly as foretold)</li>
</ol>
<small>
Source: gamefaqs_tricrokra_archived.html, lines 518-530 — "Use the Terror draft on them and they'll flee... Examine the sphere you revealed 3 times to get all the hints from it and once again the 'Transendence' draft."
<p>Source: strategywiki_loom_walkthrough.html, lines 696 — “Now make sure that you empty the pool with the EMPTY draft, then look at the sphere three times; a few things happen:”
</p>
<p><strong>Why Its Metaphor-to-Literal Translation</strong>:</p>
<ol>
<li><strong>Poetic language requires symbolic interpretation</strong>: Prophecy isnt instruction manual—it uses figurative phrases (“sky is opened”) that must be reimagined as physical game actions</li>
<li><strong>Visual symbolism becomes mechanical reality</strong>: Sphere shows DRAGON CAVE ON FIRE as abstract image → player later ENACTS that exact scene through spell combinations</li>
<li><strong>Linguistic creativity required</strong>: Player cant just follow instructions—must ask “What would opening the sky mean in THIS game world where OPEN is a specific castable draft?”</li>
</ol>
<p><strong>Distinction from Observation Replay</strong>:
Prophecy isnt a sequence to memorize and replay—its ABSTRACT LANGUAGE requiring creative translation into concrete actions. The solution (“CLICK SKY + CAST OPEN”) doesnt appear anywhere as explicit instruction; it emerges from metaphorical interpretation applied within the games mechanical context.</p>
<hr>
<h2 id="related-types"><a class="header" href="#related-types">Related Types</a></h2>
<ul>
<li><strong>Pattern Learning</strong>: Both involve understanding systems, but Metaphor-to-Literal requires linguistic translation before mechanical application</li>
<li><strong>Environmental Storytelling</strong>: Both include narrative text, but this type centers on ACTIVE TRANSLATION of phrases into actions</li>
</ul>
<p>This puzzle type tests: “Can I imagine what this phrase would look like if the game world took it literally?”</p>
</small></small></small>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../puzzles/cross-temporal-causality.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../puzzles/symbol-code-translation.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../puzzles/cross-temporal-causality.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../puzzles/symbol-code-translation.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
</nav>
</div>
<template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
<template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
<template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
<template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
<template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_line_numbers = true;
</script>
<script>
window.playground_copyable = true;
</script>
<script src="../ace-2a3cd908.js"></script>
<script src="../mode-rust-2c9d5c9a.js"></script>
<script src="../editor-16ca416c.js"></script>
<script src="../theme-dawn-4493f9c8.js"></script>
<script src="../theme-tomorrow_night-9dbe62a9.js"></script>
<script src="../elasticlunr-ef4e11c1.min.js"></script>
<script src="../mark-09e88c2c.min.js"></script>
<script src="../searcher-c2a407aa.js"></script>
<script src="../clipboard-1626706a.min.js"></script>
<script src="../highlight-abc7f01d.js"></script>
<script src="../book-a0b12cfe.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

View File

@@ -0,0 +1,871 @@
<!DOCTYPE HTML>
<html lang="en" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Multi-Character Coordination - Puzzle Design Knowledge Base</title>
<!-- Custom HTML head -->
<meta name="description" content="A taxonomy of puzzle design patterns from classic point-and-click adventure games">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon-de23e50b.svg">
<link rel="shortcut icon" href="../favicon-8114d1fc.png">
<link rel="stylesheet" href="../css/variables-8adf115d.css">
<link rel="stylesheet" href="../css/general-2459343d.css">
<link rel="stylesheet" href="../css/chrome-ae938929.css">
<link rel="stylesheet" href="../css/print-9e4910d8.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../fonts/fonts-9644e21d.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css">
<link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css">
<link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
window.path_to_searchindex_js = "../searchindex-c567150f.js";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc-35c178c7.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="mdbook-body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
sidebar_toggle.checked = false;
}
if (sidebar === 'visible') {
sidebar_toggle.checked = true;
} else {
html.classList.remove('sidebar-visible');
}
</script>
<nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="mdbook-page-wrapper" class="page-wrapper">
<div class="page">
<div id="mdbook-menu-bar-hover-placeholder"></div>
<div id="mdbook-menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
</label>
<button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
</button>
<ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
</ul>
<button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
</button>
</div>
<h1 class="menu-title">Puzzle Design Knowledge Base</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb" title="Git repository" aria-label="Git repository">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb/edit/main/src/puzzles/multi-character-coordination.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
<span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
</a>
</div>
</div>
<div id="mdbook-search-wrapper" class="hidden">
<form id="mdbook-searchbar-outer" class="searchbar-outer">
<div class="search-wrapper">
<input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
<div class="spinner-wrapper">
<span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
</div>
</div>
</form>
<div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
<div id="mdbook-searchresults-header" class="searchresults-header"></div>
<ul id="mdbook-searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="mdbook-content" class="content">
<main>
<h1 id="multi-character-coordination-puzzle"><a class="header" href="#multi-character-coordination-puzzle">Multi-Character Coordination Puzzle</a></h1>
<p><strong>Information Architecture</strong>: Game requires two or more characters to perform simultaneous actions at separated locations. Success depends on character switching and timing, NOT just sequential progression or individual character competence. Single-character attempts physically impossible regardless of inventory or knowledge.</p>
<p><strong>Player Action Pattern</strong>:</p>
<ol>
<li>Identify that puzzle has spatially-separated components</li>
<li>Determine which character has required capability (strength, skill, inventory item)</li>
<li>Position each character at their designated location/action point</li>
<li>Execute actions in tight sequence using character-switch mechanic</li>
<li>All sub-actions complete before narrative urgency timeout</li>
</ol>
<p><strong>Core Mechanic</strong>: The puzzle exploits the MULTI-CHARACTER party system to create actions that NO SINGLE character could accomplish alone, regardless of knowledge or items—forcing player coordination and action sequencing across separated spatial contexts.</p>
<hr>
<h2 id="variations"><a class="header" href="#variations">Variations</a></h2>
<div class="table-wrapper">
<table>
<thead>
<tr><th>Type</th><th>Coordination Pattern</th><th>Urgency Level</th><th>Example</th></tr>
</thead>
<tbody>
<tr><td><strong>Simultaneous Dual-Action</strong></td><td>Two characters act at once in different rooms</td><td>High (narrative consequence)</td><td>Pool reactor: drain &amp; refill</td></tr>
<tr><td><strong>Sequential Handoff</strong></td><td>Character A creates opportunity → B captures it</td><td>Medium</td><td>Circuit breaker: off → fix wires → on</td></tr>
<tr><td><strong>Position Lock + Action</strong></td><td>One character HOLDS state while other acts</td><td>Variable</td><td>Holding door open, maintaining power OFF</td></tr>
<tr><td><strong>Character-Skill Complement</strong></td><td>Different abilities required from each character</td><td>Low-Medium</td><td>Strength to open + skill to manipulate</td></tr>
</tbody>
</table>
</div>
<hr>
<h2 id="game-examples"><a class="header" href="#game-examples">Game Examples</a></h2>
<h3 id="maniac-mansion-pool-reactor-meltdown-dual-action-simultaneous"><a class="header" href="#maniac-mansion-pool-reactor-meltdown-dual-action-simultaneous">Maniac Mansion: Pool Reactor Meltdown (Dual-Action Simultaneous)</a></h3>
<p><strong>Problem</strong>: Swimming pool contains two critical items (Glowing Key for dungeon/padlock access, Radio needed later). Pool water functions as atomic reactor coolant located at pool bottom. Draining reveals items but initiates meltdown countdown that destroys mansion if not reversed—killing all characters permanently. Single character physically incapable due to distance/speed constraints between valve location and pool ladder.</p>
<p><small>Source: syntax2000_walkthrough.txt, lines 219-226 — “NOTE 4:- there is an atomic reactor at the bottom of the swimming pool, the water keeps it from over heating and exploding. To get the radio and the glowing key you must first empty the pool, and then afterwards refill it. A single character can not complete the task alone in the time before the reactor overheats. One character must go under the house to the water valve and another to the pool side.”</small></p>
<pre><code>CHARACTER DISTRIBUTION REQUIREMENTS:
- HUNK STRENGTH CHARACTER (Dave after Hunk-O-Matic machine, or Bernard)
→ Task: Open front yard grate, access crawl space, control water valve
- SECOND CHARACTER (any of remaining two party members, e.g., Syd/Razor/Michael)
→ Task: Position at pool ladder, descend during drain window, retrieve items
SPATIAL CONFIGURATION (creates impossibility for single character):
Location A: Front yard grate → crawl space under house → water valve handle
Location B: Pool area with descending ladder → pool bottom where items sit
Distance: Walkable but takes 15-30+ seconds per traversal
Meltdown Window: Narrative state implies ~45-60 second safe window MAXIMUM
IMPOSSIBILITY PROOF (Why one character fails):
To complete alone, single character would need to:
1. Turn ON valve → pool begins draining (Location A start)
2. Walk from crawl space to outside → to pool area (Location A→B transition)
3. Descend ladder as water level drops (timing critical!)
4. Retrieve TWO items from pool bottom (Glowing Key + Radio)
5. ASCEND ladder before explosion
6. Walk back toward crawl space entrance...
7. ...open grate, descend again (second traversal B→A)
8. Turn valve OFF to refill pool (before meltdown completes)
Even in ideal conditions with PERFECT timing:
- Step 2 alone exceeds travel time budget
- Steps 6-7 adds another full round-trip cost
- Total minimum actions = 7 physical movements + item retrievals
- Safe window likely only covers ~3-4 of these comfortably
TWO-CHARACTER SOLUTION SEQUENCE:
&lt;small&gt;Source: syntax2000_walkthrough.txt, lines 96-101 — "DAVE:- turn on water valve... SYD:- down into empty pool, get radio, get glowing key, up out of pool. DAVE:- turn off water valve."&lt;/small&gt;
PREPARATION PHASE:
1. Hunk character opens front yard grate (requires strength)
2. Hunk positions in crawl space near valve handle
3. Second character positions at pool ladder waiting position
EXECUTION PHASE (Character switching required):
4. [Switch to VALVE CHARACTER] Activate water valve → MELTDOWN INITIATED
- Pool begins draining rapidly
- Reactor exposed, overheating process started
5. [QUICK CHARACTER SWITCH TO POOL CHARACTER]
- Second character descends immediate as water recedes (no travel time needed!)
- Grab Radio from pool bottom
- Grab Glowing Key from same location
- Ascend ladder back to pool surface level
6. [SWITCH BACK TO VALVE CHARACTER] Turn water valve OFF → Refill initiated
- Pool refills, reactor coolant restored
- Meltdown sequence aborted
7. STORY CONTINUES: Both items obtained, all characters survive, no game-over consequence
CHARACTER SWITCH MECHANIC (SCUMM Engine Feature):
- Player uses "New Kid" command to cycle between active party members
- Each character maintains separate position, inventory, actions-in-progress
- Switching takes negligible time (instantaneous in-game)
- This mechanic ENABLES coordination puzzles by allowing rapid action sequencing
</code></pre>
<p><strong>Why Its Multi-Character Coordination</strong>:</p>
<ol>
<li>
<p><strong>Physical Impossibility for Single Actor</strong>: Puzzle design explicitly states “A single character can not complete the task alone” via distance/timing constraints—not lack of knowledge or tools</p>
</li>
<li>
<p><strong>Exploits Games Character-Switch System</strong>: Solution REQUIRES using the “New Kid” command mechanic as core puzzle interaction, not just convenient navigation</p>
</li>
<li>
<p><strong>Spatial + Temporal Dual Constraint</strong>: Puzzle would be trivial if:</p>
<ul>
<li>Valve was adjacent to pool (single traversal = one character possible)</li>
<li>Meltdown window was infinite (time pressure removed = sequential same-character action works)
Both constraints must exist for coordination requirement</li>
</ul>
</li>
<li>
<p><strong>Parallel Action Architecture</strong>: Successful solution has two characters completing their respective roles in PARALLEL time, not sequentially</p>
</li>
</ol>
<p><strong>Distinction from Timed Consequence</strong>:
While pool puzzle HAS narrative urgency (reactor meltdown), the Timed Consequence classification describes WHAT makes it urgent. Multi-Character Coordination describes HOW it must be solved. Most timed puzzles can be single-character if fast enough—this one is impossible for one character even with perfect timing due to SPATIAL constraints.</p>
<p><strong>Distinction from Meta-Puzzle Construction</strong>:<br>No sequential item chain here—the two actions (open valve, get items) are COMPLEMENTARY not DEPENDENT. One does not produce an output that enables the next; both must complete within same time window for mutual success. The “production” is coordinated survival, not item crafting.</p>
<hr>
<h3 id="maniac-mansion-circuit-breaker-power-restoration-sequential-handoff"><a class="header" href="#maniac-mansion-circuit-breaker-power-restoration-sequential-handoff">Maniac Mansion: Circuit Breaker Power Restoration (Sequential Handoff)</a></h3>
<p><strong>Problem</strong>: Meteor Mess arcade game (on second floor past exam room in Games Room area) displays high score that unlocks Secret Laboratory access code. However, power to games room is cut due to broken electrical wires in attic/observatory space. Restoring power requires simultaneous circuit breaker manipulation AND wire repair—actions separated by floors and requiring different character inventories/tools.</p>
<p><small>Source: syntax2000_walkthrough.txt, lines 227-233 — “NOTE 5:- a particular arcade game in the games room will give you vital information, but unfortunately the power line has broken in the attic. This is another two character job, one must stand by the circuit breakers in the basement whilst the other must take the tools to the attic. Only when the electric power to the whole house has been turned off can the broken wires be repaired.”</small></p>
<pre><code>SEPARATE REQUIREMENTS (Character Skill/Item Distribution):
CHARACTER A (Circuit Breaker Handler):
- Location: Basement fuse box (ground floor)
- Required Action: Toggle circuit breakers OFF during repair window
- Inventory needed: NONE (just presence and timing)
- Critical behavior: Must be PRESENT at breaker panel when switch occurs
CHARACTER B (Wire Repair Specialist):
- Location: Attic/observatory wiring area (third floor, behind secret door revealed by paint remover)
- Required Action: Fix broken wires with tools
- Inventory needed: Tool box from garage + flashlight with working batteries
- Critical state: Can only work when power is DEACTIVATED
BLOCKING CONDITION ANALYSIS:
- Broken wires prevent electricity from reaching second-floor game room
- Arcade meter/game display remains dark/inactive without power
- High score code unavailable = laboratory door permanently locked
- No alternative power source exists in mansion (central breaker only)
- Attempting to work on live wires = invalid action or electrocution failure
SEQUENTIAL HANDOFF SOLUTION:
&lt;small&gt;Source: syntax2000_walkthrough.txt, lines 144-151 — "SYD:- ...turn off circuit breakers... DAVE:- turn on flashlight, use tools to fix broken wires... SYD:- turn on circuit breakers"&lt;/small&gt;
PHASE 1 - PREPARATION (can occur before power failure discovery):
1. Character A: Access basement via gargoyle door push → locate fuse box panel
2. Character B:
- Obtain tool box from garage (yellow key required to open car trunk)
- Access plant room, use paint remover on wall blotch → reveals secret door
- Enter attic space with broken wires
- Open radio found in attic → extract batteries
- Install batteries in flashlight
PHASE 2 - COORDINATED EXECUTION (character switching essential):
3. [Switch to Character A at basement] Open fuse box, prepare for breaker toggle
4. [SWITCH: Circuit Breakers OFF] Flip circuit breakers to OFF position
- ENTIRE MANSION goes dark (cutscene/dialogue confirms power loss)
- Attic wire repair window NOW ACTIVE
5. [IMMEDIATE SWITCH TO Character B in attic] Activate flashlight
- Use tool box on broken wires → Repair animation completes
- Power restoration enabled (wires now intact and safe for electricity)
6. [SWITCH BACK TO Character A at basement] Flip circuit breakers back ON
- Electricity restored to full mansion including second-floor game room
- Arcade meter activates, high score visible
PHASE 3 - ARCADO SEQUENCE NOW UNLOCKED:
7. Obtain quarter from Edna's sealed envelope (microwave steam puzzle)
8. Access Meteor Mess arcade machine in now-powered games room
9. Insert quarter → High score number displayed = laboratory door code
10. Use Glowing Key on dungeon double-padlocks, enter numeric code
11. Secret Laboratory accessible → proceed to final Meteor weapon sequence
URGENCY LEVEL ANALYSIS:
- NO narrative timer present (unlike pool reactor meltdown)
- Power can remain OFF indefinitely without consequence
- HOWEVER, leaving power off too long increases probability of Purple Tentacle encounter when refitting circuit breakers
&lt;small&gt;Source: syntax2000_walkthrough.txt, line 151 — "the chances are that the purple tentacle will throw you into the dungeon"&lt;/small&gt;
This creates SOFT URGENCY (danger probability increases) rather than HARD URGENCY (meltdown certainty), making this puzzle more forgiving than Pool Reactor variation.
MULTI-CHARACTER REQUIREMENT PROOF:
Single character could theoretically complete IF:
- Travel time from basement to attic &lt; "power OFF" maintenance window (which is infinite!)
BUT practical constraints make it unwieldy:
- Must manually carry tools UP multiple flights during execution
- Flashlight operation while walking + tool usage = clunky single-character flow
- Design INTENT clearly signals dual approach through narrative setup
The "two character job" explicitly mentioned in walkthrough NOTE 5 confirms this is DESIGNED as coordination puzzle, not just optionally easier with two actors.
</code></pre>
<p><strong>Why Its Multi-Character Coordination</strong>:</p>
<ol>
<li>
<p><strong>Complementary Resource Distribution</strong>: One character holds location/control (breaker panel), other holds tools/skill—neither can independently complete both halves</p>
</li>
<li>
<p><strong>Sequential State Management</strong>: Power OFF state is TEMPORARY and must be TRANSITIONED between two locations; holding it requires one actor while the other benefits from it</p>
</li>
<li>
<p><strong>Intended Design Pattern</strong>: Walkthrough explicitly documents “This is another two character job” confirming design intent, not emergent optimization opportunity</p>
</li>
</ol>
<p><strong>Distinction from Pool Reactor Variation</strong>:<br>Circuit breaker uses SEQUENTIAL handoff (power off → repair complete → power on) while pool reactor uses TRUE parallelism (drain and retrieve happening in same time window). Both are Multi-Character Coordination but with different temporal patterns.</p>
<hr>
<h2 id="design-considerations"><a class="header" href="#design-considerations">Design Considerations</a></h2>
<p><strong>Implementation Patterns</strong>:</p>
<ul>
<li><strong>Travel Time Budgeting</strong>: Distance between character locations must exceed single-character safe window</li>
<li><strong>Inventory Segmentation</strong>: Required items/tools physically distributed so no one character starts with complete set</li>
<li><strong>Action Blocking</strong>: Certain locations/actions unavailable until state change occurs (power off, water drained)</li>
<li><strong>Soft vs Hard Deadlines</strong>: Decide if coordination failure has permanent consequence or just requires retry</li>
</ul>
<p><strong>Best Practices</strong>:</p>
<ol>
<li>Make character-switch mechanic quick and intuitive—coordination frustration from clunky switching overshadows puzzle logic</li>
<li>Provide clear visual/auditory feedback when one characters action completes (circuit “click” sound, valve turn animation, pool drain progress)</li>
<li>Consider offering hint about multi-character nature (environmental clue like nearby sign saying “Caution: Reactor—two-person operation required”)</li>
</ol>
<p><strong>Common Pitfalls</strong>:</p>
<ul>
<li>Players may not check all floors/areas for second character positioning options</li>
<li>Ambiguous success/failure feedback leaves players unsure if coordination succeeded or was unnecessary</li>
<li>Overly tight timing windows create frustration rather than cleverness perception</li>
</ul>
<hr>
<h2 id="related-types"><a class="header" href="#related-types">Related Types</a></h2>
<div class="table-wrapper">
<table>
<thead>
<tr><th>Type</th><th>Similarity to Multi-Character Coordination</th><th>Distinction</th></tr>
</thead>
<tbody>
<tr><td><strong>Timed Consequence</strong></td><td>Both involve urgency and potential failure consequences</td><td>TC focuses on WHEN; MCC focuses on WHO/WHERE (can combine)</td></tr>
<tr><td><strong>Meta-Puzzle Construction</strong></td><td>Both require multi-step completion</td><td>MPC has sequential DEPENDENCIES; MCC has synchronized INDEPENDENCE</td></tr>
<tr><td><strong>Multi-Faceted Plan Puzzle</strong></td><td>Both gather requirements from multiple sources</td><td>MFP synthesizes separately-found info; MCC physically requires multiple actors</td></tr>
</tbody>
</table>
</div>
<hr>
<h2 id="when-to-use-this-type"><a class="header" href="#when-to-use-this-type">When to Use This Type</a></h2>
<p>Document a puzzle as Multi-Character Coordination when:</p>
<ol>
<li>✓ Single character literally CANNOT complete it regardless of knowledge/inventory (design constraint, not player limitation)</li>
<li>✓ Solution REQUIRES using character-switch mechanic at critical action points</li>
<li>✓ Spatial separation between required actions is intentional design choice</li>
<li>✓ Both characters perform MEANINGFUL work (not just “wait here” filler roles)</li>
</ol>
<p>DO NOT use this classification if:</p>
<ul>
<li>Single character COULD solve it with more patience/time (just less efficient = not MCC, standard efficiency optimization)</li>
<li>One character passively waits while other does all work (solo puzzle in disguise)</li>
<li>Puzzle is really about sequential dependency chain (use Meta-Puzzle Construction instead)</li>
</ul>
<hr>
<h2 id="variations-extended"><a class="header" href="#variations-extended">Variations Extended</a></h2>
<div class="table-wrapper">
<table>
<thead>
<tr><th>Type</th><th>Coordination Pattern</th><th>Urgency Level</th><th>Example</th></tr>
</thead>
<tbody>
<tr><td><strong>Single-Character Substitution</strong></td><td>Disguise/skin swap as mechanical workaround for blocking condition</td><td>Medium</td><td>Loom: Reflect draft enters forge as Rusty</td></tr>
</tbody>
</table>
</div>
<hr>
<h3 id="loom-forge-entry-via-reflection-substitution-single-character-substitution"><a class="header" href="#loom-forge-entry-via-reflection-substitution-single-character-substitution">Loom: Forge Entry via Reflection Substitution (Single-Character Substitution)</a></h3>
<p><strong>Problem</strong>: Blacksmiths Guild entrance requires a Blacksmiths identity—Bobbin Threadbare as a Weaver is physically blocked from entry by the doorman guard with no dialogue options available to convince him otherwise. However, Bobbin just encountered Wellwrought “Rusty” Nailbender, a legitimate Blacksmith who can enter freely. The REFLECT draft enables appearance substitution, mechanically functioning as a single-character workaround for what appears to be a multi-character requirement.</p>
<pre><code>BLOCKING CONDITION ANALYSIS:
Standard Entry (Impossible):
- Bobbin approaches guild door → doorman blocks access
- No TALK/USE OPTIONS available to doorman while standing at gate
- Inventory contains distaff only—no items that would convince guard
- Design intent: Weavers and Smiths are hostile guilds; no peaceful entry as Bobbin
SINGLE-CHARACTER SUBSTITUTION SOLUTION:
&lt;small&gt;Source: walkthrough-king_bennett.html, line 76 — "Cast the REFLECTION on RUSTY. You change appearances."
Source: strategywiki_loom_walkthrough.html, line 694 — "Cast the REFLECTION on RUSTY. You change appearances."
Source: the-spoiler_gamecat.html, lines 305-306 — "use the REFLECT spell on Rusty and you'll swap images. Now walk down to the Blacksmiths' Guild..."
&lt;/small&gt;
</code></pre>
<p><strong>Preparation Phase (Forest Gravestone)</strong>:</p>
<ol>
<li>After escaping dragons cave maze, arrive at Blacksmiths cemetery</li>
<li>Wake sleeping boy Wellwrought “Rusty” Nailbender using WAKE draft</li>
<li>Rusty introduces himself as Blacksmith, explains role in firewood gathering</li>
<li>Learn that he works for guild Bobbin needs to enter (unavailable directly)</li>
</ol>
<p><strong>Reflection Execution</strong>:
5. Cast REFLECT draft on Rustys sleeping form → appearance swap animation plays
6. Player character now APPEARS AS Rusty visually (skin/substitution not disguise item equipped)
7. Walk to Blacksmiths Guild entrance
8. Doorman recognizes “Rusty” as legitimate guild member → allows entry without question
9. Bobbin enters forge chamber while maintaining Rustys appearance</p>
<p><strong>Why Its Single-Character Substitution Variation</strong>:</p>
<p>The REFLECT draft creates a mechanical equivalent of multi-character coordination using ONLY ONE character through identity substitution:</p>
<ol>
<li><strong>Physical Blocking Workaround</strong>: Doormans blocking script checks for Blacksmith identity, not specific character sprite. By swapping appearance via magical means, Bobbin bypasses gatekeeper without fighting or dialogue</li>
<li><strong>Not True Multi-Character</strong>: Unlike MM pool puzzle (two actors at separated locations simultaneously), this is ONE actor playing a different role—the “coordination” comes from having encountered Rusty earlier</li>
<li><strong>Identity-Based Access Control</strong>: The guard checks VISUAL IDENTITY rather than physical presence—this is key to why single character succeeds where it would normally fail</li>
</ol>
<p><strong>Distinction from Sensory Exploitation</strong>:</p>
<ul>
<li>Sensory Exploitation tricks the GUARDS PERCEPTION (they see something different)</li>
<li>Reflection changes THE PLAYERS APPEARANCE (doorman genuinely sees “Rusty”)</li>
<li>SE: Guard is fooled; Reflect: Player IS (visually) someone else</li>
</ul>
<p><strong>Distinction from Stealth/Disguise Items</strong>:
In most adventure games, disguise items are inventory objects that player EQUIPS. In Loom, the appearance change is a CASTABLE SPELL with no ongoing inventory tracking—the transformation itself IS the puzzle solution, not an item application step.</p>
<hr>
<h3 id="zak-mckracken-pyramid-escape-position-lock--inventory-distribution"><a class="header" href="#zak-mckracken-pyramid-escape-position-lock--inventory-distribution">Zak McKracken: Pyramid Escape (Position Lock + Inventory Distribution)</a></h3>
<p>(continuing next…)</p>
<p><strong>Problem</strong>: Final pyramid tomb in Cairo contains White Crystal needed to complete the alien communication machine. Golden key opens chest but activates timed escape sequence. Three characters must coordinate at sarcophagus, chest/stairs, and exterior—each holding unique inventory items required for successful exit.</p>
<small>
Source: textfiles-com-solution.txt, lines 287-301 — "Switch to Leslie! Find door and walk to Sarcophagus' feet and push them. Switch to Zak! Walk to stairs. Switch to Melissa! Walk to stairs too. Switch to Leslie! Walk away from feet... Use golden key on box. Push button. Switch to Zak! (quickly) Get white crystal"
</small>
<p><strong>Coordination Requirements</strong>:</p>
<pre><code>INVENTORY DISTRIBUTION:
- Melissa: Golden Key (obtained Mars chamber via ankh force-field bypass)
- Leslie: Broom Alien (clears sand blocking pyramid exterior entrance)
- Zak: Bobby Pin Sign (unlocks tomb interior door), Duct-taped fishbowl helmet + wetsuit
SPATIAL BLOCKING CONSTRAINT:
Position A: Sarcophagus feet pushing point
Position B: Staircase passage (appears after feet pushed, but physically blocked by character sprite)
Position C: Upper chamber with golden key box/chest
Position D: Pyramid exterior entrance (sand pile)
COORDINATION SEQUENCE:
1. [LESLIE] Push sarcophagus feet → hidden staircase appears BUT she blocks passage
2. [LESLIE] Walk away from feet area entirely → clears path
3. [ZAK &amp; MELISSA] Now can ascend to upper chamber
4. [MELISSA] Insert golden key in box, push button → TIMER ACTIVATES
5. [IMMEDIATE SWITCH TO ZAK] Grab white crystal within ~10 second window
ESCAPE PHASE (all three characters):
6. [LESLIE outside] Use broom alien on sand pile → exterior entrance clears
7. [ZAK] Use bobby pin sign in keyhole → interior door unlocks
8. [All three coordinate through maze to tram exit]
</code></pre>
<p><strong>Why Its Multi-Character Coordination</strong>:</p>
<ol>
<li><strong>Physical Blocking</strong>: Leslies sprite occupies staircase passage; requires character switch + repositioning before others can ascend</li>
<li><strong>Resource Segmentation</strong>: Golden key (Melissa), broom alien (Leslie), bobby pin sign (Zak) = no single person has complete toolset</li>
<li><strong>Sequential Dependency Pipeline</strong>: Each actor must complete their role before next can progress</li>
</ol>
<p><strong>Distinction from Timed Consequence</strong>: Has urgency (crystal grab window), but PRIMARY mechanic is coordinating three actors through blocking states with distributed inventory—not just speed. TC applies to sub-puzzle; overall pyramid escape is MCC.</p>
<hr>
<h3 id="indiana-jones-fate-of-atlantis---team-path-multi-character-coordination-ijoa"><a class="header" href="#indiana-jones-fate-of-atlantis---team-path-multi-character-coordination-ijoa">Indiana Jones: Fate of Atlantis - Team Path Multi-Character Coordination (IJOA)</a></h3>
<p><strong>Problem</strong>: On the Team path, players control both Indiana Jones and Sophia Hapgood with character-switching capability. Multiple puzzles require transferring control between characters to access separated locations or leverage unique knowledge/abilities each character possesses. Indys Team path uses SEQUENTIAL handoff coordination rather than MM-style true parallel action.</p>
<p><small>Source: walkthroughking_ashley_walkthrough.html — “Let Sophia talk to Costa and then try it yourself.” (Initial coordination pattern)</small></p>
<p><strong>Coordination Pattern Examples</strong>:</p>
<p>Example A - Sternhart Distraction (Tikal):</p>
<pre><code>STEP 1 [INDY AT TIKAL]:
- Meet Dr. Sternhart blocking pyramid entrance
- Direct confrontation fails; dialogue doesn't progress goal
STEP 2 [TRANSFER TO SOPHIA]:
- Switch character control to Sophia at same location
- Talk to Sternhart → he's fascinated by her psychic insights, distracted
STEP 3 [RETURN TO INDY]:
- Transfer control back to Indiana Jones
- While Sternhart occupied talking to Sophia → Indy sneaks behind him
- Steal lantern from unattended position
RESULT: SEPARATION OF ATTENTION enables theft impossible for single character alone
</code></pre>
<p><small>Source: walkthroughking_ashley_walkthrough.html — “Get Sophia to keep him busy, while you go and steal his lantern.”</small></p>
<p>Example B - Nazi Submarine Guard Elimination (Team Path Finale):</p>
<pre><code>STEP 1 [SOPHIA IN ADJACENT CELL]:
- Use intercom to communicate with Sophia through shared cell wall
- Sophia agrees to create diversion
STEP 2 [COORDINATED DISTRACTION]:
- Sophia makes noise → guards walk toward her position (out of patrol pattern)
- Guard now exposed in vulnerable spot between cells
STEP 3 [INDY EXPLOITS POSITIONING]:
- Walk Indy around behind distracted guard
- After Sophia knocks him out with thrown object → Indy collects key items
RESULT: PHYSICAL SEPARATION enables flanking hit that single character's positioning cannot achieve
</code></pre>
<p><small>Source: walkthroughking_ashley_walkthrough.html — “Get her to distract the guard, and then walk around behind him. After she knocks him out…”</small></p>
<p>Example C - Gold Box Bead Puzzle (Atlantis):</p>
<pre><code>STEP 1 [INDY GATHERS PRE-REQUISITES]:
- Collect two orichalcum beads from game progression
- Acquire golden box mechanism
- Obtain fish-shaped orichalcum detector item
STEP 2 [TRANSFER TO SOPHIA FOR PHYSICAL POSITIONING]:
- Convence Sophia to crawl through narrow hole (smaller character model required)
- Sophia positioned behind gate/barrier Indy cannot pass alone
STEP 3 [INDY PROVIDES INVENTORY + DETECTOR FEEDBACK]:
- Give Sophia gold box containing beads
- Use orichalcum fish detector → points at Sophia (has hidden bead in necklace)
- Convence her to place hidden bead into box, close lid
RESULT: CHARACTER-SPECIFIC PHYSICAL CONSTRAINTS (size difference enabling passage through small aperture) + SHARED INVENTORY TRANSFER = solution impossible for solo character
</code></pre>
<p><small>Source: walkthroughking_ashley_walkthrough.html — “Convince her to crawl through the hole… Use the fish and it will point at Sophias necklace, convince her to put it in the gold box.”</small></p>
<p><strong>Why Its Multi-Character Coordination</strong>:</p>
<ol>
<li><strong>Physical Impossibility For Single Actor某些</strong>: Guard flanking requires simultaneous positioning of attacker (Indy) and distraction-source (Sophia) in separated spatial contexts. Single character would need to walk BOTH approaches simultaneously—requiring sequential handoff mechanism</li>
<li><strong>Character-Switching as Core Mechanic</strong>: Puzzle uses the control-transfer command strategically, not just for navigation</li>
<li><strong>Sequential Handoff Pattern (vs MM Parallel)</strong>: Unlike Maniac Mansions true parallel control, Indys Team path uses SEQUENTIAL switching—player controls ONE character at a time, but must alternate between them to maintain coordinated positions/attention states</li>
</ol>
<p><strong>Distinction from Multi-Faceted Plan</strong>: MFP gathers independent requirements into synthesis; MCC requires simultaneous spatial occupation or sequential handoff for PHYSICALLY impossible actions. The core challenge is CHARACTER COORDINATION, not information synthesis.</p>
<p><strong>Distinction from Information Brokerage</strong>: While characters exchange items here, the PRIMARY mechanic is SPATIAL SEPARATION + CONTROL TRANSFER—brokerage focuses on NPC trade mapping regardless of physical positioning. MCCs core question: “how do two separated locations coordinate?” not “who trades what?”</p>
<hr>
<h3 id="day-of-the-tentacle-super-battery-construction-cross-time-sequential-handoff"><a class="header" href="#day-of-the-tentacle-super-battery-construction-cross-time-sequential-handoff">Day of the Tentacle: Super-Battery Construction (Cross-Time Sequential Handoff)</a></h3>
<p><strong>Problem</strong>: Hoagie needs a super-battery to power his Chron-O-John in 1795, but the battery requires three ingredients (oil, vinegar, gold flakes) and Red Edisons help. These materials are scattered across THREE DIFFERENT time periods—oil and vinegar from past NPCs, gold flakes obtained by flushing through Bernards present timeline. The battery assembly itself requires Hoagie to distract Red Edison while simultaneously being in two places at once: watching the construction AND stealing the finished product before Red can claim it.</p>
<p><small>Source: swords_and_software_walkthrough.html, lines 940-948 — “Give the patent application to Red Edison, who asks you to bring him oil, vinegar and gold for the super-battery.”</small></p>
<pre><code>INVENTORY DISTRIBUTION ACROSS TIME PERIODS:
[1795 - PAST / Hoagie's timeline]:
- Oil: Must convince Benjamin Franklin to give lab coat, then use with kite to generate lightning → collect oil residue from ground after strike? [VERIFY]
- Vinegar: From Ben Franklin's wine bottle? (needs verification of exact source)
- Red Edison's Lab: Where battery assembly occurs
[1993 - PRESENT / Bernard's timeline]:
- Gold flakes: Flushed through time from present (possibly from TV show gold or casino win?)
- Battery plans: Initially taken by Bernard, then flushed back to past
[2026 - FUTURE / Laverne's timeline]:
- Ingredients possibly gathered here as well (needs walkthrough verification)
MULTI-CHARACTER REQUIREMENTS:
1. Item gathering across separated timelines (requires character switching + flushing network)
2. Simultaneous assembly AND theft during distractor window
3. Hoagie must be positioned to watch construction complete AND grab battery before Red notices
</code></pre>
<p><strong>Why Its Multi-Character Coordination</strong>:
While primarily a Cross-Temporal Causality puzzle for ingredient gathering, the FINAL ASSEMBLY requires HOAGIE + RED EDISON coordination—keeping Red distracted while battery finishes cooking, then stealing it. The three-character flushing network (Bernard→Hoagie items) enables the gathering phase which is multi-timeline coordination through the Chron-O-John system rather than traditional spatial separation.</p>
<p><strong>Distinction from Cross-Temporal Causality</strong>:<br>The super-battery puzzle uses time travel as LOGISTICAL ENABLEMENT (moving ingredients between eras to one assembly point). CTC puzzles have actions that alter WORLD STATE across timelines (tree destruction, document changes). Here the battery is crafted in ONE location using MULTISOURCE inputs—the temporal dimension aids collection not causality.</p>
<hr>
<h3 id="day-of-the-tentacle-human-show-championship-dott-multi-character-item-assembly"><a class="header" href="#day-of-the-tentacle-human-show-championship-dott-multi-character-item-assembly">Day of the Tentacle: Human Show Championship (DOTT, Multi-Character Item Assembly)</a></h3>
<p><strong>Problem</strong>: Laverne needs to win the “Humanity Show” contest with her mummy entry against rival contestant Harrold. The mummy starts as just a skeleton display—it lacks hair, teeth, and laugh capability needed to compete in all three categories (Best Hair, Best Smile, Best Laugh). Each item can only be obtained by a different character in a separated location/time period. Laverne alone CANNOT complete the entry regardless of her actions or dialogue choices.</p>
<p><small>Source: gamefaqs_tricrokra_walkthrough.txt, lines 398-427 — “Laverne cant do this on her own, so lets get the help from the boys.”</small></p>
<pre><code>MULTI-CHARACTER REQUIREMENT ANALYSIS:
BEFORE ASSEMBLY (Item Distribution Across Characters):
- Laverne (Future/2026): Has mummy base entry + nametag for contest registration
Cannot obtain any enhancement items in her timeline alone
- Bernard (Present/1993): Can access Oozo the Clown's laugh box, Dr. Fred's office
Items: Fake barf (to disqualify Harrold), laugh box (for Best Laugh category)
- Hoagie (Past/1795): Can access Betsy Ross's room, horse in stables
Items: Spaghetti for mummy hair, horse teeth for smile enhancement
SINGLE-CHARACTER IMPOSSIBILITY PROOF:
Laverne is spatially isolated from all item sources. Even if she could travel,
she cannot perform Bernard's actions (cut clown with scalpel) or Hoagie's actions
(read textbook to horse until asleep). Each character has UNIQUE CAPABILITIES required.
COORDINATION SOLUTION CHAIN:
</code></pre>
<p><small>Source: gamefaqs_tricrokra_walkthrough.txt, lines 398-428</small></p>
<pre><code>PHASE 1 - ITEM GATHERING (Parallel Actions Across Characters):
BERNARD ACQUIRES LAUGH BOX (Present):
1. Use Laverne's scalpel on Oozo the Clown → clown collapses
2. Pick up laugh box from clown inventory
3. Give/send laugh box to Laverne via Chron-O-John flushing network
BERNARD ACQUIRES BARF DISQUALIFICATION ITEM:
4. Push speaker box in Green Tentacle's room, turn on stereo
5. Fake barf dispenses below (munching machine failure)
6. Send barf to Laverne
HOAGIE ACQUIRES MUMMY HAIR MATERIAL (Past):
7. Give spaghetti to Laverne (via item transfer)
BERNARD SENDS TEXTBOOK FOR TEETH EXTRACTION:
8. Give textbook from Dr. Fred's office to Hoagie
9. Hoagie reads textbook to horse → horse falls asleep, teeth exposed
10. Extract horse teeth, send to Laverne
PHASE 2 - ENTRY ASSEMBLY (Laverne as Coordinator):
11. Laverne applies fake barf in front of Harrold → disqualification achieved
12. Apply horse teeth to mummy → Best Smile entry complete
13. Apply soggy noodles (formerly spaghetti) to mummy head → "hair" created
14. Use fork (sent by Bernard) on noodles → combs them into hair-like appearance
15. Insert laugh box into mummy's pocket → triggers when judges approach
PHASE 3 - JUDGING:
16. Talk to judges for ALL categories with enhanced mummy entry
17. Mummy wins Best Hair (noodles+fork), Best Smile (horse teeth), Best Laugh (box)
18. Laverne receives dinner coupon prize → enables kennel guard bribery later
</code></pre>
<p><strong>Why Its Multi-Character Coordination</strong>:</p>
<ol>
<li>
<p><strong>Spatial/Temporal Separation of Requirements</strong>: Each character must physically be in their specific time period to obtain items—Laverne cannot get Bernards laugh box without his presence in the present, cannot get horse teeth without Hoagie reading textbook in past</p>
</li>
<li>
<p><strong>Chron-O-John Flushing Network as Coordination Enabler</strong>: Item transfer across timelines requires using the games unique three-era flushing system—Bernard flushes to Laverne/Laverne flushes to Hoagie creates bidirectional pipeline</p>
</li>
<li>
<p><strong>Character-Specific Actions Required</strong>:</p>
<ul>
<li>Only Bernard can use scalpel on clown</li>
<li>Only Hoagie can read horse to sleep with textbook</li>
<li>Only Laverne can assemble entry and present to judges</li>
</ul>
</li>
<li>
<p><strong>Synthesis at Single Point (Mummy Entry)</strong>: All parallel item gathering converges on single object that Laverne must complete</p>
</li>
</ol>
<p><strong>Distinction from Cross-Temporal Causality</strong>: While items travel across time, the puzzle does NOT alter world state through historical changes. The laughing box in 1993 is same as in 2026—no causal alteration, only LOGISTICAL TRANSFER. CTC changes HISTORY (tree cut → disappears); this moves INVENTORY.</p>
<p><strong>Distinction from Meta-Puzzle Construction</strong>: The gathering phase IS parallel (Bernard can get laugh box AND barf in any order; Hoagies spaghetti/teeth are independent). Only the assembly phase has sequence, but thats minimal. Core requirement is MULTI-CHARACTER not sequential crafting.</p>
<hr>
<h2 id="the-dig-character-coordination-patterns-four-aliens-shared-inventory"><a class="header" href="#the-dig-character-coordination-patterns-four-aliens-shared-inventory">The Dig Character-Coordination Patterns (Four Aliens, Shared Inventory)</a></h2>
<h3 id="the-dig-crew-task-distribution-via-radio-communication-td"><a class="header" href="#the-dig-crew-task-distribution-via-radio-communication-td">The Dig: Crew Task Distribution via Radio Communication (TD)</a></h3>
<p><strong>Problem</strong>: After arriving on the alien planet, crew members split up and explore different locations independently. Unlike traditional multi-character games with explicit character-switching mechanics, The Dig uses a hybrid system: player controls Boston (protagonist) directly while coordinating with Maggie and Brink through radio communication (Penultimate device). Character abilities are specialized—Maggies linguistic expertise can interpret alien symbols, Brinks archaeology knowledge identifies artifacts—but they are physically SEPARATED by the game world. Coordination occurs through INFORMATION SHARING rather than simultaneous action.</p>
<small>
Source: mogelpower_morgana_walkthrough.txt, lines 1-25 — "Maggie ... renowned journalist and linguistic expert"; "Ludger Brink (noted geologist and archaeologist)"
<p>Source: spoiler_paul_greunke_walkthrough.txt, multiple instances of “talk to Maggie about” and “talk to Brink about” as information exchange points
</p>
<p><strong>Distribution Requirements</strong>:</p>
<pre><code>CHARACTER SPECIALIZATIONS:
- Boston Low (player-controlled): Physical actions, inventory management, exploration
- Maggie Robbins (linguist): Can interpret alien language symbols when shown artifacts
- Ludger Brink (archaeologist/geologist): Expert knowledge of ancient technologies, burial chambers, artifacts
INVENTORY SHARING LIMITATION:
Unlike MM or DOTT where each character has separate inventory, The Dig uses a SINGLE SHARED INVENTORY managed by Boston. However, items must be physically carried TO separated locations where other characters can examine them via TALK/SHOW interactions.
COORDINATION PATTERN ASYNCRONOUS (not simultaneous):
1. Player/Boston collects artifact at Location A
2. Travel to Location B where Maggie/Brink positioned
3. SHOW item → character provides domain-specific insight
4. Apply knowledge gained when returning puzzle context
</code></pre>
<p><strong>Information Exchange Solution Pattern</strong>:</p>
<p>[Source: mogelpower_morgana_walkthrough.txt, lines 1120-1137]</p>
<p>Example - Glowing Crystals and Life Restoration:</p>
<pre><code>DISCOVERY PHASE (Boston/Museum):
→ Boston collects GLOWING CRYSTALS from museum floor
→ Exhibits show skeleton transformation imagery but no explicit explanation
COORDINATION PHASE (Maggie/Library):
→ Boston radios Maggie via Penultimate device
→ SHOWS crystals to Maggie over radio
→ Dialogue reveals: "the dead could be raised" via crystal display interpretation
→ Maggie's linguistic knowledge decodes the museum display meaning
APPLICATION PHASE (Boston/Nexus):
→ Boston returns to Brink's body with crystals
→ USEs crystals on body → Brink resurrected as undead being
</code></pre>
<p><strong>Why Its NOT Traditional Multi-Character Coordination</strong>:</p>
<ol>
<li><strong>No Simultaneous Actions</strong>: Characters never act in PARALLEL—no character switching for synchronized tasks</li>
<li><strong>Single Actor Physicality</strong>: All physical actions performed by Boston alone; Maggie and Brink are advisors not doers</li>
<li><strong>Information Transfer, Not Spatial Coordination</strong>: Puzzle resolution comes from Maggies KNOWLEDGE being applied to Bostons ITEMS</li>
</ol>
<p><strong>Correct Classification</strong>: This is more accurately <strong>Information Brokerage</strong> where NPCs (separated party members) provide expert interpretation. The “multi-character” aspect is narrative framing only—mechanically its NPC expertise acquisition.</p>
<hr>
<h3 id="the-dig-weak-door-opening-requires-crew-member-strength-td-positional-coordination"><a class="header" href="#the-dig-weak-door-opening-requires-crew-member-strength-td-positional-coordination">The Dig: Weak Door Opening Requires Crew Member Strength (TD, Positional Coordination)</a></h3>
<p><strong>Problem</strong>: On the Museum Spire, a WEAKENED DOOR cannot be opened by Boston alone despite being unlocked. It requires TWO crew members to apply force simultaneously—one character pushes while the other assists. This is a physical constraint based on character positioning rather than inventory or knowledge distribution.</p>
<small>
Source: spoiler_paul_greunke_walkthrough.txt, lines 184-186 — "try to open weakened door (can't open it yet)"
<p>Source: mogelpower_morgana_walkthrough.txt, lines 1052-1053, 1187-1192 — “I couldnt OPEN the WEAKENED DOOR without help… Brink followed me back through… he did help me OPEN the WEAKENED DOOR”
</p>
<p><strong>Coordination Requirements</strong>:</p>
<pre><code>PHYSICAL CONSTRAINT:
Door mechanism functional but requires combined strength of two characters
CHARACTER DISTRIBUTION:
- Boston (Player): Positioned at door initially
- Brink (NPC): Must be physically present at SAME location
NOT INVENTORY DEPENDENT: Cannot solve through items alone—requires crew positioning
SOLUTION SEQUENCE:
1. [Boston]: Opens doors to Museum Spire, finds weakened door cannot be opened solo
2. [Boston]: Resurrects Brink using glowing crystals at Nexus
3. [Both Characters Together]: Enter tram together (Brink follows Boston on-screen)
4. [Both at Weak Door]: With BOTH characters present in scene → door can now be OPENED
5. [Result]: Life crystal chamber revealed, additional crystals can be collected
</code></pre>
<p><strong>Why Its Multi-Character Coordination (Minimal Form)</strong>:</p>
<ol>
<li><strong>Physical Presence Requirement</strong>: Puzzle explicitly requires TWO bodies at same location—single character attempt fails with clear feedback (“cant open it yet”)</li>
<li><strong>Not Inventory or Knowledge Based</strong>: No item makes Boston stronger; no conversation provides “how to pry door open”</li>
<li><strong>Simplified Coordination Pattern</strong>: Unlike MMs complex spatial separation + timing, this is simple PRESENCE DEPENDENCY—two characters adjacent = action possible</li>
</ol>
<p><strong>Distinction from Standard MCC</strong>: This is the MINIMAL form of Multi-Character Coordination requiring:</p>
<ul>
<li>Only two characters (not three)</li>
<li>No simultaneous actions across separated locations</li>
<li>Simple adjacency requirement for unlock condition</li>
</ul>
<p>It demonstrates that not all multi-character puzzles require MMs dual-location parallel execution—some merely need character stacking at single locus. The “coordination” is simplified to ensuring BOTH characters arrive BEFORE attempting action, rather than sequencing actions DURING puzzle resolution.</p>
</small></small>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../puzzles/comedy-based-persuasion.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../puzzles/robot-programming.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../puzzles/comedy-based-persuasion.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../puzzles/robot-programming.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
</nav>
</div>
<template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
<template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
<template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
<template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
<template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_line_numbers = true;
</script>
<script>
window.playground_copyable = true;
</script>
<script src="../ace-2a3cd908.js"></script>
<script src="../mode-rust-2c9d5c9a.js"></script>
<script src="../editor-16ca416c.js"></script>
<script src="../theme-dawn-4493f9c8.js"></script>
<script src="../theme-tomorrow_night-9dbe62a9.js"></script>
<script src="../elasticlunr-ef4e11c1.min.js"></script>
<script src="../mark-09e88c2c.min.js"></script>
<script src="../searcher-c2a407aa.js"></script>
<script src="../clipboard-1626706a.min.js"></script>
<script src="../highlight-abc7f01d.js"></script>
<script src="../book-a0b12cfe.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,485 @@
<!DOCTYPE HTML>
<html lang="en" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Multi-Faction Diplomacy - Puzzle Design Knowledge Base</title>
<!-- Custom HTML head -->
<meta name="description" content="A taxonomy of puzzle design patterns from classic point-and-click adventure games">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon-de23e50b.svg">
<link rel="shortcut icon" href="../favicon-8114d1fc.png">
<link rel="stylesheet" href="../css/variables-8adf115d.css">
<link rel="stylesheet" href="../css/general-2459343d.css">
<link rel="stylesheet" href="../css/chrome-ae938929.css">
<link rel="stylesheet" href="../css/print-9e4910d8.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../fonts/fonts-9644e21d.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css">
<link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css">
<link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
window.path_to_searchindex_js = "../searchindex-c567150f.js";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc-35c178c7.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="mdbook-body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
sidebar_toggle.checked = false;
}
if (sidebar === 'visible') {
sidebar_toggle.checked = true;
} else {
html.classList.remove('sidebar-visible');
}
</script>
<nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="mdbook-page-wrapper" class="page-wrapper">
<div class="page">
<div id="mdbook-menu-bar-hover-placeholder"></div>
<div id="mdbook-menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
</label>
<button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
</button>
<ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
</ul>
<button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
</button>
</div>
<h1 class="menu-title">Puzzle Design Knowledge Base</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb" title="Git repository" aria-label="Git repository">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb/edit/main/src/puzzles/multi-faction-diplomacy.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
<span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
</a>
</div>
</div>
<div id="mdbook-search-wrapper" class="hidden">
<form id="mdbook-searchbar-outer" class="searchbar-outer">
<div class="search-wrapper">
<input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
<div class="spinner-wrapper">
<span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
</div>
</div>
</form>
<div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
<div id="mdbook-searchresults-header" class="searchresults-header"></div>
<ul id="mdbook-searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="mdbook-content" class="content">
<main>
<h1 id="multi-faction-diplomacy-puzzle"><a class="header" href="#multi-faction-diplomacy-puzzle">Multi-Faction Diplomacy Puzzle</a></h1>
<p><strong>Information Architecture</strong>: Player discovers existence of multiple warring groups; each faction provides conflicting accounts of events. Player must gather intelligence from all sides to understand underlying cause of conflict before facilitating resolution.</p>
<p><strong>Player Action Pattern</strong>:</p>
<ol>
<li>Learn two+ factions are in conflict (narrative setup)</li>
<li>Meet representatives from both factions who blame each other</li>
<li>Gain trust/access to one faction through class-specific means</li>
<li>Extract truth about stolen/missing item causing conflict</li>
<li>Return the contested item, revealing true antagonist behind dispute</li>
<li>Facilitate peace meeting (often disrupted by third party reveal)</li>
</ol>
<p><strong>Core Mechanic</strong>: Multi-stage negotiation where each faction must be independently satisfied with players actions before a unified resolution can occur; the truth only becomes evident when juxtaposing information from opposing sides.</p>
<hr>
<h2 id="variations"><a class="header" href="#variations">Variations</a></h2>
<div class="table-wrapper">
<table>
<thead>
<tr><th>Type</th><th>Factions Involved</th><th>Player Intermediary Role</th><th>Example</th></tr>
</thead>
<tbody>
<tr><td><strong>Stolen Trellis Artifact</strong></td><td>Two rival tribes over cultural relic</td><td>Recover item, prove theft was false flag</td><td>Simbani/Leopardmen: Spear of Death</td></tr>
<tr><td><strong>Peace Conference Setup</strong></td><td>Three+ groups including government mediating</td><td>Earn credentials with all parties</td><td>Tarna King, Simbani Laibon, Leopardmen Chief</td></tr>
<tr><td><strong>Espionage Reveal</strong></td><td>One faction divided by hidden corruption</td><td>Expose traitor/infiltrator to restore unity</td><td>Thief helps Harami return home</td></tr>
</tbody>
</table>
</div>
<hr>
<h2 id="game-examples"><a class="header" href="#game-examples">Game Examples</a></h2>
<h3 id="quest-for-glory-iii-the-stolen-spear-of-death-qfg3"><a class="header" href="#quest-for-glory-iii-the-stolen-spear-of-death-qfg3">Quest for Glory III: The Stolen Spear of Death (QFG3)</a></h3>
<p><strong>Setup</strong>: Simbani tribe and Leopardmen are on brink of war over the sacred Spear of Death. Laibon claims Leopardmen stole it during peace mission. One survivor (Khatib) claims attack was unprovoked. Player must determine truth and resolve conflict to prevent war, which is actually being stoked by demonic forces seeking to generate deaths for portal-opening ritual.</p>
<p><small>Source: qfg3-gamefaqs-cyricz.txt, lines 1478-1490 — Storyteller description</small></p>
<p><small>Source: qfg3-gamefaqs-cyricz.txt, lines 1875-1886 — “The Hero and his Liontaur friend Rakeesh are summoned to the Kingdom of Tarna to prevent a war from occurring.”</small></p>
<pre><code>MULTI-FACTION DIPLOMACY STRUCTURE:
FACTION 1: SIMBANI VILLAGE
Goal: Recover Spear of Death, punish Leopardmen for theft
Representative: Laibon Mkubwa (elder/chieftain)
Allies to Gain: Uhura (warrior), Yesufu (Laibon's son)
Player Access Method:
- Fighter/Paladin: Complete Warrior Initiation trials
- Wizard: Not required at Simbani; bypass via Leopardman route
- Thief: No special requirements; can infiltrate later
Key Information Gained:
- Spear was on peace mission to Leopardmen (line 1879-1882)
- Peace mission attacked, everyone killed except Khatib
- Laibon believes this is grounds for war against Leopardmen
FACTION 2: LEOPARDMEN VILLAGE
Goal: Recover Drum of Magic, maintain neutrality/isolation
Representative: Chief &amp; Shaman
Allies to Gain: Johari (Chief's daughter), Shaman
Player Access Method:
- All classes: Must marry/free Johari who acts as guide
- Requires dispelling her with potion first
Key Information Gained:
- Drum of Magic was STOLEN from them (lines 1506-1508, 2963-2970)
- They seek drum's return, not Simbani destruction
- Chief offers Spear of Death in exchange for drum
PARALLEL TRACKS BY CLASS:
FIGHTER/PALADIN ROUTE (Diplomatic):
PHASE 1: Build Alliance with Simbani
Action: Complete Warrior Initiation against Yesufu
Reward: Recognition as Warrior, permission to pursue peace
PHASE 2: Rescue Johari
Action: Use Dispel Potion on Leopardman prisoner
Discovery: It's Johari, seeking marriage/better life
PHASE 3: Win Bride (Simbani requirement)
Prerequisites: Give Laibon Dinosaur Horn for rites
Gifts Required: Fine Robe, Fine Spear, 5 Zebra Skins
Result: Legal "marriage" to Johari authorized
PHASE 4: Win Trust of Johari
Gifts Required: Beads, Wooden Leopard carving, Fine Dagger
Action: Open her cage; she escapes peacefully
PHASE 5: Visit Leopardmen Village (with Johari)
Critical Dialogue Sequence:
- Tell about Romance (win her trust, 3 pts)
- Show Magic Drum OR Tell about Drum
Result: Johari agrees to guide player to village
PHASE 6: Negotiate with Leopardman Chief
Action: Give Drum of Magic back (20 pts)
Query: Ask about Spear of Death
Reward: Chief returns Simbani Spear peacefully (lines 2210-2211)
THIEF ROUTE (Espionage-Influenced):
PHASES 1-3: Same as Fighter (build trust, rescue Johari)
PHASE 4: STEAL the Drum instead of diplomatic acquisition
Location: Laibon's Hut at night
Method: Use Fine Dagger on crack in wall while sneaking
Enter hidden compartment area
Result: Possession of Magic Drum illegally (lines 2963-2970)
PHASE 5: Infiltrate Leopardman Village
Obstacle: Panther blocking Chief's hut entrance
Solution Options:
- Distract with Meat (safer, +5 pts)
- Dodge/jump across tightrope without feeding (risky)
Additional Thief Challenge Inside Chief's Hut:
- Monkey making noise will wake Chief
- Feed monkey Fruit first (5 pts), then free it (5 pts)
- Otherwise must maintain stealth while working around it
Action: Steal Spear of Death from wall (10 pts, lines 2996-2998)
Alternative: Picklock chest for extra items/cash
PHASE 6: Return BOTH Items (not just drum)
Action: Give Drum to Chief (20 pts)
Present Spear to Simbani Laibon (20 pts)
Critical Difference: Thief gets EXTRA points for spear recovery
because it was stolen by their methods, not given back
WIZARD ROUTE (Supernatural Diplomat):
PHASE 1-4: Setup through Johari courtship (same as Fighter/Thief)
PHASE 5: Magical Duel with Shaman replaces physical negotiation
Unlike Fighter's trials or Thief's stealth, Wizard engages in spell duel:
- Each stage presents magic that must be countered
- See class-specific-ritual.md for full duel sequence
FINAL PHASE (All Classes): Use Dispel Potion on Shaman instead of killing
Result: Maintains peace narrative; Shaman returns Spear peacefully
CRITICAL DIPLOMATIC REVELATION:
Regardless of path, at Peace Conference in Tarna:
- Leopardman Chief attacks Laibon unexpectedly
- Yesufu kills Chief with fatal spear thrust (lines 2224-2228)
- This was DEMON manipulation — not either faction's true will
- Rakeesh warns player to find Demons before war erupts
This reveals the underlying puzzle truth: BOTH FACTIONS were honest
about wanting peace. The conflict was manufactured by third party (Demons).
The diplomacy puzzle's purpose was preventing deaths that would fuel
the Demon Portal — making every point of peacemaking mechanically tie
to the final battle requirements.
</code></pre>
<p><small>Source: qfg3-gamefaqs-cyricz.txt, lines 2180-2230 — Fighter route to Leopardmen</small></p>
<p><small>Source: qfg3-gamefaqs-cyricz.txt, lines 2963-3007 — Thief infiltration of Chiefs Hut</small></p>
<p><strong>Why Its Multi-Faction Diplomacy (Not Information Brokerage)</strong>:</p>
<p>While information is exchanged, the core puzzle mechanic is:</p>
<ol>
<li><strong>Dual Authorization Required</strong>: Both factions must be separately satisfied before unified resolution</li>
<li><strong>Conflicting Initial Narratives</strong>: One says “they stole from us,” other says “they attacked us first”</li>
<li><strong>Reconciliation via Item Exchange</strong>: Physical objects (Spear, Drum) serve as peace tokens, not just information carriers</li>
<li><strong>Underlying Third-Party Manipulation Reveal</strong>: Truth only emerges at conference when BOTH sides shown wanting peace</li>
</ol>
<p>Information Brokerage = trade A for B with single NPC
Multi-Faction Diplomacy = reconcile A and Bs conflict by satisfying requirements for both independently</p>
<hr>
<h3 id="quest-for-glory-iii-the-harami-redemption-arc-qfg3"><a class="header" href="#quest-for-glory-iii-the-harami-redemption-arc-qfg3">Quest for Glory III: The Harami Redemption Arc (QFG3)</a></h3>
<p><strong>Setup</strong>: Early game, player witnesses thief “Harami” being captured and sentenced to honorlessness at Hall of Judgement. Later, homeless in Tarna streets, he becomes a secondary character who can become ally or enemy depending on treatment.</p>
<p><small>Source: qfg3-gamefaqs-cyricz.txt, lines 1895-1906 — “A man will start running away. Chase after him (8) and youll find him caught”</small></p>
<pre><code>FRACTION MICRO-DIPLOMACY: ONE NPC AS NEUTRAL PARTY
INITIAL ENCOUNTER: Hall of Judgement
Observation: Thief sentenced; declared "without honor"
Player Choice Point: Testify against him OR remain silent (implicit choice)
SECONDARY ENCOUNTERS (Bazaar Streets):
Encounter 1: Begging for help
Action Required: Agree to help (+4 pts, lines 2121-2123)
Failure State: If refused later interactions locked
Encounter 2-4: Night visits
Actions Required:
- Give food each night (consumes inventory)
- For Thief class: Show proper Thief Sign (+8 pts, line 2928)
Encounter 5: Final conversation
Required Topic: Tell him about Rakeesh (+8 pts)
Information Gained: Harami's backstory; why he stole
CRITICAL REVELATION AT PEACE CONFERENCE:
After conference violence breaks out:
- Player must flee Tarna to reach Lost City alone
- Later, at Lost City chamber with Doppelganger enemies:
- Five heroes each face evil mirror-self
- All five are losing battles (lines 2290-2293, 2887-2893, 3064-3068)
Diplomatic Payoff Moment:
Harami appears and STABS the Doppelganger in back (+8 pts honor despite being thief)
"Letting you run up the stairs to tower"
Why this counts as diplomacy:
1. Early investment (food, kindness, showing proper thief sign) pays off at critical moment
2. His help is ESSENTIAL without it team cannot progress
3. Redemption arc shows he was never truly villainous — just misunderstood outcast like player may have been
This micro-faction represents "the forgotten" — those cast aside by society who can still prove their worth through unexpected acts of honor when player showed them dignity first.
</code></pre>
<p><small>Source: qfg3-gamefaqs-cyricz.txt, lines 2122-2128 — Helping Harami sequence</small></p>
<p><small>Source: qfg3-gamefaqs-cyricz.txt, lines 2292-2293, 2678-2679, 3067-3068 — “Harami will show up and stab it in the back”</small></p>
<hr>
<h2 id="related-types"><a class="header" href="#related-types">Related Types</a></h2>
<div class="table-wrapper">
<table>
<thead>
<tr><th>Type</th><th>Similarity</th><th>Distinction</th></tr>
</thead>
<tbody>
<tr><td>Multi-Faceted Plan</td><td>Both gather requirements across many sources</td><td>MFP = unified objective with parallel tasks; MFD = conflicting objectives must be reconciled</td></tr>
<tr><td>Information Brokerage</td><td>Both involve exchange of goods/services for access</td><td>IB = linear chain A→B→C; MFD = two independent chains that merge at resolution</td></tr>
<tr><td>Class-Specific Ritual</td><td>Both diverge by class</td><td>CSR = same outcome, different mechanics; MFD = classes achieve OUTCOMES differently but same diplomatic end-state</td></tr>
</tbody>
</table>
</div>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../puzzles/class-specific-ritual.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../puzzles/surreal-logic-bridge.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../puzzles/class-specific-ritual.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../puzzles/surreal-logic-bridge.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
</nav>
</div>
<template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
<template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
<template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
<template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
<template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_line_numbers = true;
</script>
<script>
window.playground_copyable = true;
</script>
<script src="../ace-2a3cd908.js"></script>
<script src="../mode-rust-2c9d5c9a.js"></script>
<script src="../editor-16ca416c.js"></script>
<script src="../theme-dawn-4493f9c8.js"></script>
<script src="../theme-tomorrow_night-9dbe62a9.js"></script>
<script src="../elasticlunr-ef4e11c1.min.js"></script>
<script src="../mark-09e88c2c.min.js"></script>
<script src="../searcher-c2a407aa.js"></script>
<script src="../clipboard-1626706a.min.js"></script>
<script src="../highlight-abc7f01d.js"></script>
<script src="../book-a0b12cfe.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

View File

@@ -0,0 +1,805 @@
<!DOCTYPE HTML>
<html lang="en" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Observation Replay - Puzzle Design Knowledge Base</title>
<!-- Custom HTML head -->
<meta name="description" content="A taxonomy of puzzle design patterns from classic point-and-click adventure games">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon-de23e50b.svg">
<link rel="shortcut icon" href="../favicon-8114d1fc.png">
<link rel="stylesheet" href="../css/variables-8adf115d.css">
<link rel="stylesheet" href="../css/general-2459343d.css">
<link rel="stylesheet" href="../css/chrome-ae938929.css">
<link rel="stylesheet" href="../css/print-9e4910d8.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../fonts/fonts-9644e21d.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css">
<link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css">
<link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
window.path_to_searchindex_js = "../searchindex-c567150f.js";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc-35c178c7.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="mdbook-body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
sidebar_toggle.checked = false;
}
if (sidebar === 'visible') {
sidebar_toggle.checked = true;
} else {
html.classList.remove('sidebar-visible');
}
</script>
<nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="mdbook-page-wrapper" class="page-wrapper">
<div class="page">
<div id="mdbook-menu-bar-hover-placeholder"></div>
<div id="mdbook-menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
</label>
<button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
</button>
<ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
</ul>
<button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
</button>
</div>
<h1 class="menu-title">Puzzle Design Knowledge Base</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb" title="Git repository" aria-label="Git repository">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb/edit/main/src/puzzles/observation-replay.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
<span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
</a>
</div>
</div>
<div id="mdbook-search-wrapper" class="hidden">
<form id="mdbook-searchbar-outer" class="searchbar-outer">
<div class="search-wrapper">
<input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
<div class="spinner-wrapper">
<span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
</div>
</div>
</form>
<div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
<div id="mdbook-searchresults-header" class="searchresults-header"></div>
<ul id="mdbook-searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="mdbook-content" class="content">
<main>
<h1 id="observation-replay"><a class="header" href="#observation-replay">Observation Replay</a></h1>
<p><strong>Information Architecture</strong>: Game presents a procedural sequence once, under observation-only conditions (guard present, locked door, NPC interference). Player cannot interact during the demonstration.</p>
<p><strong>Player Action Pattern</strong>: Watch and memorize the exact sequence of actions or values. Return when guard/interference is absent. Replay sequence precisely to unlock new access.</p>
<p><strong>Core Mechanic</strong>: Single viewing + exact reproduction = reward. Information is presented in correct order once; puzzle difficulty emerges from memory load plus opportunity management.</p>
<p><strong>Variations</strong>:</p>
<ul>
<li>Numeric sequences (safe combinations, door codes)</li>
<li>Action sequences (push/pull patterns, dance moves)</li>
<li>Visual patterns (light arrangements, color orders)</li>
</ul>
<p><strong>Adventure Game Implementation</strong>:</p>
<ul>
<li>NPC performs action while blocking player interaction</li>
<li>Cutscene triggers once, cannot be rewound</li>
<li>Player must note sequence through observation alone</li>
<li>Return later when conditions allow replication</li>
<li>Standard actions (USE TALK LOOK) applied in memorized order</li>
</ul>
<p><strong>Example Structure</strong>:</p>
<pre><code>Player needs: Access to [LOCKED_LOCATION]
Discovery Phase:
→ Approach [LOC] and observe [NPC] perform exact sequence:
"Watch as guard opens safe: PULL-15, PUSH-3, PULL-27"
→ Blocked from interacting ("Can't touch while watched!")
Return Phase:
→ Create opportunity (distract NPC, wait for departure)
→ Apply memorized sequence to [OBJECT] with same standard actions:
USE safe → PULL handle 15 times...
→ Reward unlocked
</code></pre>
<p><strong>Kings Quest VI Parallel</strong>: None identified in walkthrough.</p>
<hr>
<h3 id="quest-for-glory-iv-dr-craniums-doorbell-sequence-qfg4"><a class="header" href="#quest-for-glory-iv-dr-craniums-doorbell-sequence-qfg4">Quest for Glory IV: Dr. Craniums Doorbell Sequence (QFG4)</a></h3>
<p><strong>Setup</strong>: To enter Dr. Craniums laboratory, the player must ring doorbells in the exact sequence they play when activated. This is a pure observation-replay puzzle where the correct order is demonstrated once at the door.</p>
<p><small>Source: qfg4-gamefaqs-anonymous.txt, lines 641-647 — “Ring doorbells in exact sequence they play (listen and repeat)”</small></p>
<pre><code>OBSERVATION PHASE - Sequence Demonstration:
→ Approach Dr. Cranium's office exterior
→ Click on door or bell rope to initiate demonstration
→ Four bells ring in specific melodic sequence:
Bell Order Heard: 2nd → 4th → 1st → 3rd (example)
→ Audio cue is distinct for each bell position
→ Dialogue feedback: "You must match the sequence to enter!"
REPLAY EXECUTION PHASE - Memory Test:
→ Return to bell ropes after demonstration completes
→ Click bells in EXACT same order observed during demo
→ Success condition: All four clicked correctly in sequence, no errors
→ Failed attempt: Door remains locked; can retry but must remember sequence
Reward upon completion (6 puzzle points): Laboratory access granted.
</code></pre>
<p><strong>Why Its Observation Replay</strong>: Single demonstration of correct sequence under “observation only” conditions. Player cannot interact during demo—must memorize exact bell order, then reproduce precisely when interaction becomes available. No partial hints given; perfect recall required for success.</p>
<p><small>Cited from: qfg4-gamefaqs-sac.txt:2201-2204</small></p>
<hr>
<h3 id="quest-for-glory-iv-will-o-wisp-capture-qfg4"><a class="header" href="#quest-for-glory-iv-will-o-wisp-capture-qfg4">Quest for Glory IV: Will-o-Wisp Capture (QFG4)</a></h3>
<p><strong>Setup</strong>: To reveal the Sense Ritual at a Squid Stone location, the player must capture Will-o-Wisps at night using candy, then release them in daytime. The puzzle combines timed consequence with observation replay of wisp movement patterns.</p>
<p><small>Source: qfg4-gamefaqs-anonymous.txt, lines 1075-1076 — “Use candy to lure wisp at night catch in empty flask”</small></p>
<pre><code>OBSERVATION PHASE - Behavior Learning:
→ Visit swamp edge at NIGHT (time-gated) only
→ Observe Will-o'-Wisps floating above dark water
→ Note attraction pattern: Wisps approach source of sweets/candy slowly
→ Observe collection opportunity: Use Empty Flask near wisp when it's close enough
REPLAY EXECUTION PHASE - Timing and Conditions:
Step 1 → Ensure candy in inventory (purchased from General Store)
Step 2 → Return to swamp edge at night, confirm Wisps visible
Step 3 → Use candy on ground/near water surface → Wisps approach lured by sweet smell
Step 4 → Wait for wisp to come within capture range (~3-5 seconds of wandering)
Step 5 → Use Empty Flask on approaching wisp → captures it inside
Time Criticality: Must release Wisps before daybreak or they die in flask!
Deferred Application - Ritual Revelation:
Step 6 → Visit Squid Stone area with captured Wisps during appropriate conditions
Step 7 → Release Will-o'-Wisps from flask onto ritual marker
Result: Light reveals hidden Mad Monk's tomb entrance/Bone Ritual location
Why It's Observation Replay + Timed Consequence hybrid:Player must OBSERVE wisp attraction behavior then REPLAY the luring sequence correctly.
CRITICAL TIMING: Wisps must be released BEFORE dawn otherwise puzzle fails permanently.
This combines OR (observe-reproduce) with TC (narrative urgency without hard deadline but real consequence).
</code></pre>
<p><small>Cited from: qfg4-gamefaqs-anonymous.txt:1075-1080, qfg4-gamefaqs-sac.txt:1946-1952</small></p>
<p><strong>Monkey Island Examples</strong>:</p>
<p><strong>Monkey Island Examples</strong>:</p>
<ul>
<li><strong>Safe Combination</strong>: Storekeeper opens safe while player watches (notes combination). Later, when storekeeper leaves shop unsupervised after going to find Sword Master, player returns and enters exact PULL/PUSH sequence he observed.</li>
</ul>
<h3 id="grim-fandango-year-three---meches-vault-safe-combination-lock-gf"><a class="header" href="#grim-fandango-year-three---meches-vault-safe-combination-lock-gf">Grim Fandango: Year Three - Meches Vault Safe Combination Lock (GF)</a></h3>
<p><strong>Problem</strong>: Manny must open the vault safe where Meche is hiding from Domino. The safe has a complex combination lock with four tumblers that must be precisely aligned before pulling the opening wheel. Critical detail: Pulling too early causes tumblers to spin, requiring complete reset.</p>
<p><small>Source: the-spoiler_walkthrough.html, lines 723-760 — Safe combination Q&amp;A and execution details</small></p>
<pre><code>OBSERVATION PHASE - Learning Combination Lock Mechanics:
→ Initial vault door approach → "Can't just open; needs tumblers aligned"
→ Examine wheel interface → Four tumblers visible through slot window
→ Observation: Tumbler position relative to door jamb indicates alignment
REPLAY EXECUTION CHAIN (Must be performed in exact order):
STEP 1A - Align First Tumbler (TOP tumbler):
Action: Rotate WHEEL RIGHT (clockwise) until all four tumblers begin spinning together
Critical: Stop wheel exactly when TOPMOST tumbler aligns with door jamb gap
Verification: Step away from wheel, look at it → Manny's dialogue confirms "they're lined up" or indicates misalignment
STEP 1B - Lock First Tumbler in Place:
Action: Use SCYTHE on spinning tumblers AFTER correct alignment achieved
Critical Timing: Must block BEFORE pulling handle; handles spinning if pulled prematurely
STEP 2 - Align Second Tumbler (SECOND from top):
Action: Rotate WHEEL LEFT (counter-clockwise) until second tumbler aligns with jamb gap
Constraint: Cannot overshoot; if passed alignment point, must restart entire sequence from Step 1
STEP 3 - Align Third Tumbler (THIRD from top):
Action: Rotate WHEEL RIGHT again until third tumbler aligned
Same constraints apply: Precision stopping required; no room for error
STEP 4 - Align Fourth Tumbler (BOTTOM tumbler):
Action: Rotate WHELL LEFT one final time until bottom tumbler matches jamb gap position
Final check: All four tumblers should show gaps aligned with door jamb in single column
STEP 5 - Open Vault Door:
Prerequisite: SCYTHE already used on tumblers to lock their positions (Step 1B)
Action: PULL HANDLE
Result: If all alignment correct + tumblers locked → Vault opens, Manny enters
FAILURE MECHANICS:
If PULL HANDLE before SCYTHE locks tumblers → tumblers spin wildly, door won't open. Must restart entire sequence from zero alignment.
WHY IT'S OBSERVATION REPLAY:
MEMORIZED SEQUENCE REQUIRED:
The RIGHT-LEFT-RIGHT-LEFT rotation pattern must be remembered and reproduced precisely. Game provides no on-screen checklist—player either recalls the alternating pattern or fails repeatedly until they notice the alternating direction requirement through observation of tumbler behavior.
EXACT TIMING CRITICAL:
Each tumbler must stop at exact jamb gap alignment. This is not trial-and-error but PATTERN RECOGNITION from observing how tumblers move as wheel rotates. The "aha" moment comes from watching movement patterns, then reproducing them.
NOIR THEME - CLASSIC SAFE-CRACKING TROPES:
Combination locks are quintessential noir elements—precision timing, mechanical understanding of locking mechanisms, the tension between success (opening smooth) and failure (tumblers spin). The dialogue feedback ("Manny tells you if they're lined up") mimics films where safecrackers rely on auditory/visual cues.
DISTINCTION FROM PATTERN LEARNING:
Unlike Pattern Learning, there's no Domain A → Domain B transfer. The vault safe is a single-instance puzzle where observation of THIS SPECIFIC MECHANISM enables success at THIS SPECIFIC LOCATION. No generalized tumbler-system learned for later application elsewhere.
</code></pre>
<hr>
<h3 id="beneath-a-steel-sky-power-plant-switch-sequence-bas"><a class="header" href="#beneath-a-steel-sky-power-plant-switch-sequence-bas">Beneath a Steel Sky: Power Plant Switch Sequence (BAS)</a></h3>
<p><strong>Problem</strong>: The control panel behind barred gates requires two switches positioned correctly before re-energizing the system, but the correct configuration cannot be determined through examination alone—player must create an opportunity to observe the mechanism working.</p>
<p><small>Source: 5_steamah_walkthrough.html, lines 382-384 — “Place the PUTTY on the LIGHT SOCKET and turn the main SWITCH back on. This results in a short circuit, opening the left CONTROL PANEL. Turn the main SWITCH back off. Notice two SWITCHes (levers) within the left CONTROL PANEL? Get the left SWITCH levered up and the right SWITCH levered down.”</small></p>
<p><strong>Discovery Phase</strong>:</p>
<pre><code>Location: Power Plant (Middle Level)
PHASE 1 - Create Observation Opportunity:
1. Arrive at power plant with WRENCH and PUTTY (from Factory storeroom)
2. Use WRENCH on two BUTTONS below steam pipe to unlock them
3. Have Joey press right button while player presses left simultaneously
4. Steam valve overloads, old worker leaves room
5. Turn OFF main SWITCH above control panel → safe to examine
PHASE 2 - Force System State Change (Observation Trigger):
1. Remove LIGHT BULB from socket when power is off
2. Replace with PUTTY (conductive material creates short circuit)
3. Turn main SWITCH back ON → bars blow open due to electrical surge
4. TURN POWER OFF immediately (now safe to inspect exposed panel)
PHASE 3 - Observe Required Configuration:
Two switches visible inside opened left control panel:
- Left switch must be UP
- Right switch must be DOWN
PHASE 4 - Reproduce Correct Configuration:
1. Set LEFT SWITCH levered UP
2. Set RIGHT SWITCH levered DOWN
3. Turn main power back ON
→ Elevator access granted to middle level
</code></pre>
<p><small>Source: 1_preterhuman_mitch_shaw_walkthrough.html, lines 160-174 — Detailed switch manipulation and power cycling sequence</small></p>
<p><strong>Why Its This Type</strong>: Player cannot know the correct switch configuration through direct interaction or hints. The puzzle requires creating conditions (short circuit with putty) that cause the game to <em>demonstrate</em> the working state (bars open when switches are positioned correctly), then reproducing that exact state later once the panel is accessible.</p>
<p><strong>Note on 16-bit SCUMM Engine Quirk</strong>: This puzzle leverages Revolution Softwares SCUMM-derived engine mechanics—the short circuit isnt realistic behavior but exploits how voltage/short detection logic triggers cutscene events regardless of actual electrical physics. Common in 1990s point-and-click adventures where object interaction rules simplify real-world causality.</p>
<hr>
<h3 id="broken-sword-shadow-of-the-templars---stealing-towel-and-wire-chapter-2"><a class="header" href="#broken-sword-shadow-of-the-templars---stealing-towel-and-wire-chapter-2">Broken Sword: Shadow of the Templars - Stealing Towel and Wire (Chapter 2)</a></h3>
<p><strong>Problem</strong>: Must steal two items from guarded locations—towel while Doyle takes a drink, wire while monk sneezes. Both require precise timing based on observed NPC action patterns.</p>
<p><small>Source: broken-sword-1/4_agh_peter_christiansen_walkthrough.html, lines 257-260</small>
<small>Source: broken-sword-1/4_agh_peter_christiansen_walkthrough.html, line 269</small>
<small>Source: broken-sword-1/1_walkthroughking_broken_sword.html, lines 97, 100</small></p>
<p><strong>Sub-Puzzle A - Towel Theft</strong>:</p>
<pre><code>OBSERVATION PHASE:
→ Locate Doyle's office with towel hanging near desk
→ Watch NPC pattern: Doyle periodically walks to desk corner, takes sip from glass
→ Identify exact timing window: towel accessible ONLY during drinking animation
REPLAY PHASE:
→ Wait for next sip cycle (no interaction possible outside window)
→ At precise moment when mouth reaches glass → Take towel action executes
→ Towel added to inventory; Doyle unaware due to animation-blocking state
</code></pre>
<p><strong>Sub-Puzzle B - Wire Theft</strong>:</p>
<pre><code>OBSERVATION PHASE:
→ Locate monk holding wire in side room/altar area
→ Watch NPC pattern: Monk performs repetitive prayer gesture, then sneezes at interval
→ Identify exact timing window: wire drops to floor during sneeze animation
REPLAY PHASE:
→ Wait for next sneeze cycle from doorway (cannot approach without detection)
→ At precise moment of sneeze → Grab wire action executes before monk recovers
→ Wire added to inventory; used later for Plaster Casting System puzzle
</code></pre>
<p><strong>Why Its This Type</strong>: Classic Observation Replay structure—player watches NPC perform blocking action once, memorizes exact timing window created by secondary animation (drinking, sneezing), then replays identical sequence to steal item. NOT Pattern Learning because no system rules transfer to new domains—each theft is unique one-off timing puzzle. NOT Distraction Physics because player doesnt manipulate environment; they exploit existing NPC behavior loop without modification.</p>
<hr>
<h3 id="broken-sword-ii-the-smoking-mirror---london-underground-signal-switch-chapter-5"><a class="header" href="#broken-sword-ii-the-smoking-mirror---london-underground-signal-switch-chapter-5">Broken Sword II: The Smoking Mirror - London Underground Signal Switch (Chapter 5)</a></h3>
<p><strong>Problem</strong>: Nico must board the train at Thames Dock by switching the signal light to red, but requires obtaining a weight card from a scale that needs coins, and coins are only accessible via hairclip trick on vending machine. The sequence of actions observed during exploration must be reproduced in precise order.</p>
<p><small>Source: 2_the_spoiler_tom_hayes_walkthrough.html, lines 274-281 — “Walk over to the vending machine. Use the hairclip with the coin slot. Get the coin from the coin reject slot.”</small></p>
<p><small>Source: 4_kasagaming_walkthrough.html, lines 370-377 — “Use the hairclip on the coin slot of the chocolate machine, then pick up the coin from the coin reject slot… Use the coin on the weighing machine and receive a weight card.”</small></p>
<pre><code>OBSERVATION / EXPLORATION PHASE:
→ Enter London Underground Station platform area
→ Observe vending machine with locked items (chocolate, coin) behind slots
→ Notice handbag in inventory contains hairclip
→ Try direct interaction → "Can't open without coin" feedback
REPLAY EXECUTION CHAIN:
Step 1 → Use hairclip on coin slot of chocolate vending machine
- Observed mechanism: clip jams/reverses slot logic
Step 2 → Collect ejected coin from reject slot
- Timing: immediate action after insertion, no delay
Step 3 → Approach weighing machine with coin in hand
- Note display: "Insert penny for card" prompt visible
Step 4 → Use coin on scale → receive weight card automatically
- Exchange is automatic; no additional timing window
Step 5 → Locate cupboard next to weighing machine
Step 6 → Examine crack near cupboard mechanism (requires dagger)
Step 7 → Use ancient dagger on cupboard lock → disables obstruction
Step 8 → Use weight card on access crack → activates door mechanism
Step 9 → Press red signal button → switches train lights to STOP signal
- Train now accessible for boarding
Step 10 → Board train → cutscene triggers, arrive at Thames Dock
</code></pre>
<p><strong>Why Its This Type</strong>: While primarily a sequential item use chain, the core mechanic is observing environmental cause→effect relationships then replaying them: hairclip→coin ejection, coin→card exchange, card+dagger→access. Player explores station and observes each mechanisms requirements independently, then replays exact sequences in correct order. The “observation” is reading environmental UI hints (slot prompts, crack visibility); the “replay” is executing the discovered action chains precisely as observed.</p>
<p><strong>Distinction from Meta-Puzzle Construction</strong>: Each step produces output for next step (coin→card→access), but player DISCOVERS this chain through exploration and observation of separate mechanisms, then REPLAYS it once fully understood. Theres no “trial sequence that demonstrates solution” element—just cause-effect relationships learned individually.</p>
<hr>
<h3 id="broken-sword-ii-the-smoking-mirror---thames-dock-guard-evasion-chapter-5"><a class="header" href="#broken-sword-ii-the-smoking-mirror---thames-dock-guard-evasion-chapter-5">Broken Sword II: The Smoking Mirror - Thames Dock Guard Evasion (Chapter 5)</a></h3>
<p><strong>Problem</strong>: Nico must steal into the ship cabin where Professor Oubier holds the Jaguar Stone, but a guard patrols continuously with Pablo nearby. Success requires timing movement to exact patrol cycle—any deviation results in capture/death. The sequence must be memorized from initial observation and reproduced precisely.</p>
<p><small>Source: 2_the_spoiler_tom_hayes_walkthrough.html, lines 309-315 — “Click on the other crate on the left, so Nico can hide closer to the ship… Wait until the guard starts talking to Pablo, and then climb down the ladder…”</small></p>
<p><small>Source: 4_kasagaming_walkthrough.html, lines 400-404 — Move to second crate after guard passes, move onto boat (ditto) and climb the ladder…“</small></p>
<pre><code>OBSERVATION PHASE - PATROL CYCLE ANALYSIS:
→ Enter Thames Dock area, observe guard movement pattern
→ Guard patrols back along dockside route at fixed intervals
→ Pablo stands stationary near ship ladder; occasional dialogue with guard
→ Ship cabin accessible only during guard attention window on Pablo
GUARD BEHAVIOR LOOPS IDENTIFIED:
Loop A → Patrol approaches from left → reaches Nico's position → continues right
Loop B → Reaches Pablo after ~10 seconds → engages in conversation (~5 seconds)
Loop C → Returns to patrol loop; ship cabin exposed during entire Loop B window
REPLAY EXECUTION - TIMING SEQUENCE:
Step 1 → Wait for guard patrol → move to SECOND crate (after guard passes first)
&lt;small&gt;Source: kasagaming_walkthrough, line 402 — "Move to the second crate after the guard has passed"&lt;/small&gt;
Step 2 → Continue movement ONTO SHIP as patrol clears area
Step 3 → CLIMB LADDER before patrol completes cycle return
CRITICAL TIMING WINDOW:
Step 4 → Wait for guard to reach Pablo and START TALKING
&lt;small&gt;Source: tom_hayes_walkthrough, line 312 — "Wait until the guard starts talking to Pablo"&lt;/small&gt;
Step 5 → CLIMB DOWN LADDER (immediately as conversation begins)
Step 6 → OPEN CUPBOARD door
Step 7 → CLIMB BACK UP LADDER (guard now faces away, occupied with Pablo)
COMPLETION SEQUENCE:
Step 8 → Guard enters cupboard investigating → climb down, close cupboard
Step 9 → Grab mop, use on cupboard door to stick it open/slow guard discovery
Step 10 → Look through porthole as cutscene triggers (Oubier/Karzac confrontation)
Step 11 → Enter cabin automatically during scene break
→ Check Oubier → he's still alive
→ Grab Jaguar Stone immediately
→ Karzac attacks → use ancient dagger to escape
</code></pre>
<p><strong>Why Its This Type</strong>: Player observes guard patrol pattern, identifying that guard+Pablo conversation creates temporary vulnerability window. Entire sequence (climb down, open cupboard, climb back up, close behind guard) must reproduce exact timing observed during initial exploration. The “single viewing” is watching guard behavior; the “reproduce exactly” is executing the 4-action sequence during correct patrol cycle. Multiple saves/tries needed if timing fails—but successful run matches observed opportunity window precisely.</p>
<p><strong>Distinction from Distraction Physics</strong>: Player doesnt CREATE distraction; they EXPLOIT existing NPC routine. Guard-Pablo dialogue happens automatically in game loop—Nico must TIME her actions to it, not trigger it. DNP would involve “pull lever to make guard investigate noise” whereas this is “wait for guard to naturally talk to Pablo.”</p>
<hr>
<h3 id="syberia-momos-dam-and-oar-sequence-valadilene-syb"><a class="header" href="#syberia-momos-dam-and-oar-sequence-valadilene-syb">Syberia: Momos Dam and Oar Sequence (Valadilene, SYB)</a></h3>
<p><strong>Problem</strong>: To access the secret mammoth cave, player must open a dam that blocks the river path. The lever controlling the dam is broken when first attempted. Player must observe Momo (the automaton guide)s movement pattern, then replicate key actions through timed interactions with Momo as intermediary.</p>
<p><small>Source: gamefaqs_thayes_syberia.txt, lines 360-371 — “ask Momo to Help open the dam. Hell try, but the lever will break off. Get the lever… Run right and ask him to Help get the oar. After Momo gets the oar, run right and ask him to Help open the dam.”</small></p>
<pre><code>OBSERVATION PHASE (Momo's Behavior Pattern):
Step 1 → Follow long forest path after Voralberg house attic sequence
- Momo walks ahead as visible guide through secret route
Step 2 → Reach dam control post with large lever mechanism
- Attempt to USE handle directly on dam → Lever BREAKS OFF
Step 3 → Receive BROKEN LEVER item in inventory (damaged state recorded)
- Dam remains closed, path blocked
Step 4 → Dialogue option "Help" appears when talking to Momo
- Player learns Momo CAN interact with environment independently
REPETITION REQUIRED SEQUENCE (Exact Action Order):
CRITICAL DISCOVERY:
→ Dam lever physically broke off—human hands too weak/damaged mechanism
→ Momo is automaton with superior strength but no independent agency trigger
→ "Help" dialogue must be used in SPECIFIC CONTEXT to activate Momo's assistance
EXECUTION SEQUENCE (must follow exact order):
Step 1 → Collect broken lever from ground after first failed attempt
&lt;small&gt;Source: gamefaqs_thayes_syberia.txt, line 364 — "Get the lever"&lt;/small&gt;
Step 2 → Navigate DOWN path to abandoned boat location
- Dam is uphill; boat with oar is downstream along riverbed
Step 3 → Attempt to USE broken lever on boat's stuck oar
&lt;small&gt;Note: First player tries alone—mechanically fails&lt;/small&gt;
Step 4 → Return to Momo (automaton reappears at boat location)
Step 5 → Select "Help" dialogue targeting the OAR retrieval
&lt;small&gt;Source: line 367-368 — "ask him to Help get the oar"&lt;/small&gt;
- CRITICAL: Context must be "oar stuck in boat" not general help request
Step 6 → Momo's automaton animation triggers: Pulls oar free with mechanical strength
- Player observes exact action sequence (Momo grips oar, pulls smoothly)
- OAR now loose, retrievable by player
Step 7 → Collect OAR from boat (inventory item acquired)
Step 8 → Navigate UPSTREAM back to dam location (retracing path)
Step 9 → Select "Help" dialogue targeting DAM lever again
&lt;small&gt;Source: line 369 — "ask him to Help open the dam"&lt;/strong&gt;&lt;/small&gt;
- Context now is "dam won't open with broken lever"
Step 10 → Momo's animation triggers second time: Uses superior strength to force dam lever open
- Dam gates swing open, river flow unblocked
Step 11 → Follow newly opened path upstream into mammoth cave entrance
WHY IT'S OBSERVATION REPLAY (Not Pattern Learning):
SINGLE-SEQUENCE MEMORIZATION:
Player does not learn a general SYSTEM to apply across multiple targets. Instead, discovers that Momo can be "helped" with specific tasks in a SPECIFIC ORDER:
1. Get broken lever → break happens
2. Go to boat, ask help on OAR first (not dam)
3. Collect oar → return upstream
4. Ask help on DAM second (after oar task completed)
The puzzle is NOT "Momo can lift heavy things" generalized rule—it's EXACT SEQUENCE: broken lever attempt creates item, downstream oar retrieval must complete before upstream dam opening succeeds. Order matters because game state tracks Momo's "help availability" through this specific sequence chain.
TIMING/CONTEXT DEPENDENCY:
Player cannot simply "ask for help twice." The "Help" dialogue option appears ONLY when player is at target location with appropriate context:
- At boat = OAR help available
- At dam AFTER oar retrieved = DAM help available
This creates observation-replay structure where player discovers opportunity windows through initial failure (broken lever), then reproduces the correct sequence of HELP REQUESTS in discovered order.
SYBERIA AUTOMATON THEME IMPLEMENTATION:
Unlike BAS's guard patrol timing, SYB uses Momo as a MECHANICAL intermediary that requires proper input sequencing. The automaton isn't teaching general principles—it's responding to specific command sequences. Player "observes" through trial (broken lever reveals problem) then "replays" correct interaction order with Momo assistant.
</code></pre>
<hr>
<h3 id="gabriel-knight-1-snake-scale-observation---face-removal-sequence-gk1"><a class="header" href="#gabriel-knight-1-snake-scale-observation---face-removal-sequence-gk1">Gabriel Knight 1: Snake Scale Observation - Face Removal Sequence (GK1)</a></h3>
<p><strong>Setup</strong>: After being attacked by a python in the Voodoo Museum, Gabriel returns to his bookstore looking sick. Grace removes something from his face and places it in her ashtray. The player must observe this sequence during a cutscene, then reproduce specific actions when full control returns—using tweezers to retrieve a tiny snake scale that provides critical evidence linking the museum python to the crime scene murders.</p>
<p><small>Source: justadventure_walkthrough.html, lines 942-950 — “As Gabriel enters the bookstore, Grace remarks on how green he looks and notices something sparkling on his face. (i) Watch CAREFULLY what happens next! (ii) She removes something from Gabriels face …….. (iii) …………… and puts the small item into the ashtray on her desk. From inventory, use the Magnifying Glass to enlarge the small item in the ashtray It is a snake scale from the python that attacked Gabriel in the Voodoo Museum. [+ 1 point] Since it is so fragile, from inventory, use the Tweezers to pick up the Museum Snake Scale. [+ 1 point]”</small></p>
<p><small>Source: justadventure_walkthrough.html, lines 948-950 — “In inventory, compare the Museum Snake Scale with the Lake Snake Scale you picked up at the crime scene. See the 2 Snake Scales side by side in inventory They are DEFINITELY from the SAME snake! [+ 2 points]”</small></p>
<p><strong>Single Viewing Phase (Cutscene - No Control)</strong>:</p>
<ul>
<li>Player watches Grace observe something on Gabriels face during dialogue sequence</li>
<li>She removes an invisible-to-inventory item with specific hand motion</li>
<li>Places it in ashtray on her desk before player regains control</li>
<li>Player has NO opportunity to intervene during this sequence</li>
</ul>
<p><strong>Reproduction Phase (Full Control Restored)</strong>:</p>
<ol>
<li>Use magnifying glass on ashtray → reveals tiny snake scale was left behind [+ 1 point]</li>
<li>Use tweezers to pick up fragile Museum Snake Scale from ashtray [+ 1 point]</li>
<li>Compare with Lake Snake Scale from earlier crime scene in inventory</li>
<li>Discovery: Both scales are from the SAME snake species [+ 2 points]</li>
<li>Critical evidence chain complete: Python attack at museum directly connected to murders</li>
</ol>
<p><strong>Why Its Observation Replay (Not Truth Revelation)</strong>:</p>
<ul>
<li>The scale existed but was effectively invisible until player WATCHED where Grace placed it during the cutscene</li>
<li>Without observing the sequence, player would never know to examine the ashtray specifically—too many other interactions available</li>
<li>Actions must be reproduced in exact order: magnifying glass first (reveals item), then tweezers for pickup</li>
<li>The discovery (scales match) only possible because player observed AND replayed the removal location</li>
</ul>
<p><strong>Distinction from Pattern Learning</strong>: Player doesnt learn a SYSTEM with multiple applications. They observe ONE specific sequence with ONE required reproduction. Graces action is not part of a reusable mechanic—its a narrative event that must be witnessed to enable later solution.</p>
<hr>
<h3 id="legend-of-kyrandia-merith-marble-chase-path-lk1"><a class="header" href="#legend-of-kyrandia-merith-marble-chase-path-lk1">Legend of Kyrandia: Merith Marble Chase Path (LK1)</a></h3>
<p><strong>Problem</strong>: After healing the rotten willow tree with a teardrop from Pool of Sorrows, the spirit Merith appears and mentions finding a marble needed to repair Brynns silver altar. To obtain it, Brandon must play a game of tag—following Meriths exact movement pattern and sneaking up from behind to claim the marble.</p>
<p><small>Source: classicgamesparadise_walkthrough.html, line 47 — “At the rotten willow tree, try using the teardrop you found at the Pool of Sorrows to heal the tree. After it is healed, Merith shows up and mentions a marble he found. To get it, you will need to play a little game of tag. He will lead you to the northeast where you can sneak up on him.”</small></p>
<p><small>Source: classicgamesparadise_walkthrough.html, line 55 — Summary step: “Chase Merith for the marble”</small></p>
<pre><code>OBSERVATION PHASE - Initial Encounter and Path Demonstration:
Step 1 → Prerequisite Completion:
- Earlier in game: Obtain teardrop from Pool of Sorrows (separate puzzle chain)
- Navigate to rotten willow tree location (Timbermist Woods area)
- Use teardrop on diseased tree → healing transformation cutscene triggers
Step 2 → Merith Appearance:
- Tree spirit Merith materializes after healing complete
- Dialogue exchange: Merith mentions discovering marble, implies it belongs on altar
- No explicit handover; Merith initiates chase game instead
Step 3 → Path Demonstration (Observation Critical):
- Merith begins moving in SPECIFIC DIRECTION (northeast from willow tree)
- Movement pattern establishes exact route through forest terrain
- Brandon cannot interact with Merith during this phase ("too fast!") or if approaching from wrong angle (Merith flees)
REPLAY EXECUTION - Path Following and Capture:
Step 4 → Follow Observed Route:
- Player must navigate Brandon along SAME northeast path Merith demonstrated
- Key spatial detail: Merith's movement establishes correct navigation through maze-like woods
Step 5 → Position for Approach:
- Continue following until reaching endpoint of chase path
- Merith slows/stops at destination point (northeast forest clearing)
Step 6 → Sneak-Up Maneuver (Timing/Angle Critical):
- Player must approach from BEHIND Merith's position
- Attempting frontal interaction or wrong angle → Merith runs again, requires respawning/chase restart
Step 7 → Marble Acquisition:
- Successful sneak approach triggers capture event
- Marble automatically added to inventory
- Merith departs, puzzle resolved
WHY IT'S OBSERVATION REPLAY:
SINGLE VIEWING ESTABLISHES SOLUTION:
Merith's initial northeast movement is the ONLY demonstration of correct path. No map marker, no compass hint, no repeated dialogue explaining direction. Player must MEMORIZE the exact route Merith took during opening chase phase.
EXACT REPRODUCTION REQUIRED:
Path following isn't "general area navigation." The walkthrough specifies "northeast" as critical detail—wrong directional choice leads to dead ends or requires backtracking to restart pursuit.
Angle/Timing Component Adds Memory Load:
Beyond path memorization, player must remember APPROACH MECHANIC: sneak from behind. This is demonstrated implicitly by game's blocking behavior (can't grab Merith during chase, fails if approached incorrectly). Successful reproduction requires combining BOTH spatial memory (where) AND interaction memory (how).
NO TRIAL-AND-ERROR DISCOVERY:
Unlike exploration puzzles where player experiments with different paths, here the SOLUTION EXISTS IN THE CUTSCENE. Trial-and-error only works through multiple save/loads or by correctly retaining path information from initial observation.
FAILURE MODES DEMONSTRATE MEMORY REQUIREMENT:
- Wrong direction from willow tree → cannot find Merith, must revisit and reobserve chase start
- Correct path but wrong approach angle → Merith flees, sequence potentially resets
- Frontal approach attempt → blocked by game state ("can't catch him!")
DISTINCTION FROM DISTRACTION PHYSICS:
Player doesn't CREATE distraction condition or manipulate environment. Merith's movement pattern is pre-scripted game loop—Brandon must ADAPT to it, not cause it. The puzzle tests OBSERVATION → MEMORY → REPRODUCTION chain, not environmental manipulation or timing-based NPC state change.
POTENTIAL IMPLEMENTATION VARIANTS:
This chase structure could easily be a Pattern Learning if marble-catching mechanics applied elsewhere (e.g., "catch other escaping sprites using same path-follow rule"). But in LK1's context, it's single-instance observation replay: one cutscene establishes solution, one reproduction sequence succeeds.
CONNECTION TO LARGER PUZZLE CHAIN:
Marble itself feeds into METALOGIC puzzle: Silver Altar Repair at Brynn's Temple:
1. Get teardrop from Pool of Sorrows (earlier chain)
2. Heal willow tree → triggers Merith appearance
3. Chase Merith for marble (this observation replay)
4. Return marble to Brynn's temple altar
5. Place silver rose on repaired altar → activates amulet
The chase is ONE LINK in larger meta-construction, but its internal mechanic is pure observation replay.
---
### Indiana Jones and the Last Crusade: Skull Music Sequence Puzzle (INDY1)
**Problem**: In lower catacombs of Venice, a chamber contains multiple skulls mounted on walls. Each skull produces a distinct musical tone when struck in sequence. The grail diary contains a musical notation indicating which skulls to strike and in what order. Player must observe the skull positions during initial exploration, then precisely replay the sequence when all conditions are met—hitting wrong skull or wrong order triggers failure state.
&lt;small&gt;Source: walkthrough-king.txt, lines 137-139 — "Look at the diary once more to get some clues. The top line indicates the left skull, the next the second skull, etc. Play the skulls in the order indicated by the music to open the door."&lt;/small&gt;
**Observation Phase**:
</code></pre>
<p>INFORMATION SOURCE: Grail Diary Musical Notation</p>
<ul>
<li>Open diary in inventory</li>
<li>Examine page showing staff notation with note positions</li>
<li>Each line/position corresponds to skull from left-to-right</li>
<li>Example: Top line = first skull (far left), second line = second skull, etc.</li>
</ul>
<p>SKULL CHAMBER EXPLORATION:</p>
<ul>
<li>Enter chamber containing multiple mounted skulls</li>
<li>Note each skull produces DIFFERENT PITCH when struck</li>
<li>Skulls arranged horizontally along wall in linear sequence</li>
<li>Player must mentally map diary lines to physical positions (1st diagram line = 1st physical skull from left)</li>
</ul>
<p>BLOCKING CONDITION BEFORE OBSERVATION COMPLETE:</p>
<ul>
<li>Door to next area locked, no alternate passage exists</li>
<li>Attempting random strikes produces incorrect notes (audio feedback indicates wrong sequence)</li>
<li>Only correct musical sequence opens door</li>
</ul>
<pre><code>
**Replay Execution Phase**:
</code></pre>
<p>SEQUENTIAL STRIKE PATTERN (Per Diary Notation):</p>
<p>Step 1 → Examine grail diary one final time, confirm note order mentally
- Critical: Must remember sequence; cannot look at diary during execution</p>
<p>Step 2 → Strike FIRST skull indicated by top-most notational line in diary
- Position determined by line position (not absolute left-to-right on screen,
but relative to diagram structure)</p>
<p>Step 3 → Move to SECOND skull per next musical notation line
- Timing: Must occur within reasonable interval or sequence may reset</p>
<p>Step 4 → Continue through ALL skulls matching notated pattern
- Audio feedback: Each strike produces distinct pitch
- Visual confirmation: Skull vibrates when struck correctly</p>
<p>VALIDATION: After final correct skull struck, hidden mechanism activates → door unlocks silently</p>
<pre><code>
**Why It's Observation Replay (Not Symbol Code Translation)**: While there IS a diagram to decode, the core mechanic is MEMORY AND TIMING—player must internalize sequence from static notation then perform it without reference during execution phase. Unlike SCT where symbols map directly to interface buttons here, the player memorizes ACTION SEQUENCE (strike order) rather than translating symbol-to-button equivalency. The skulls are not "interface elements" with matching properties—they're distinct physical objects requiring correct STRIKE ORDER reproduction.
**Distinction from Pattern Learning**: Single application only—no repeated framework across multiple door/sequence pairs. Pure observation → memory → exact reproduction structure. Once learned and executed successfully, puzzle complete with no further applications of the musical sequence system.
**Critical Timing Element**: Walkthrough emphasis on "play skulls in order" suggests sequence must occur within time window—player cannot indefinitely flip back to diary between strikes. This creates memory load pressure where player must retain full sequence during single execution attempt.
&lt;small&gt;Cited from: walkthrough-king.txt:137-139&lt;/small&gt;
</code></pre>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../puzzles/sensory-exploitation.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../puzzles/pattern-learning.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../puzzles/sensory-exploitation.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../puzzles/pattern-learning.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
</nav>
</div>
<template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
<template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
<template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
<template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
<template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_line_numbers = true;
</script>
<script>
window.playground_copyable = true;
</script>
<script src="../ace-2a3cd908.js"></script>
<script src="../mode-rust-2c9d5c9a.js"></script>
<script src="../editor-16ca416c.js"></script>
<script src="../theme-dawn-4493f9c8.js"></script>
<script src="../theme-tomorrow_night-9dbe62a9.js"></script>
<script src="../elasticlunr-ef4e11c1.min.js"></script>
<script src="../mark-09e88c2c.min.js"></script>
<script src="../searcher-c2a407aa.js"></script>
<script src="../clipboard-1626706a.min.js"></script>
<script src="../highlight-abc7f01d.js"></script>
<script src="../book-a0b12cfe.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

View File

@@ -0,0 +1,999 @@
<!DOCTYPE HTML>
<html lang="en" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Pattern Learning / Knowledge Transfer - Puzzle Design Knowledge Base</title>
<!-- Custom HTML head -->
<meta name="description" content="A taxonomy of puzzle design patterns from classic point-and-click adventure games">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon-de23e50b.svg">
<link rel="shortcut icon" href="../favicon-8114d1fc.png">
<link rel="stylesheet" href="../css/variables-8adf115d.css">
<link rel="stylesheet" href="../css/general-2459343d.css">
<link rel="stylesheet" href="../css/chrome-ae938929.css">
<link rel="stylesheet" href="../css/print-9e4910d8.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../fonts/fonts-9644e21d.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css">
<link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css">
<link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
window.path_to_searchindex_js = "../searchindex-c567150f.js";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc-35c178c7.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="mdbook-body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
sidebar_toggle.checked = false;
}
if (sidebar === 'visible') {
sidebar_toggle.checked = true;
} else {
html.classList.remove('sidebar-visible');
}
</script>
<nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="mdbook-page-wrapper" class="page-wrapper">
<div class="page">
<div id="mdbook-menu-bar-hover-placeholder"></div>
<div id="mdbook-menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
</label>
<button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
</button>
<ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
</ul>
<button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
</button>
</div>
<h1 class="menu-title">Puzzle Design Knowledge Base</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb" title="Git repository" aria-label="Git repository">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb/edit/main/src/puzzles/pattern-learning.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
<span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
</a>
</div>
</div>
<div id="mdbook-search-wrapper" class="hidden">
<form id="mdbook-searchbar-outer" class="searchbar-outer">
<div class="search-wrapper">
<input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
<div class="spinner-wrapper">
<span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
</div>
</div>
</form>
<div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
<div id="mdbook-searchresults-header" class="searchresults-header"></div>
<ul id="mdbook-searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="mdbook-content" class="content">
<main>
<h1 id="pattern-learning--knowledge-transfer"><a class="header" href="#pattern-learning--knowledge-transfer">Pattern Learning / Knowledge Transfer</a></h1>
<p><strong>Information Architecture</strong>: Game teaches a complete mechanical system in a low-stakes domain, then requires application of exact same rules in higher-stakes domain against different target. The tutorial IS the training—no explicit instruction, only pattern discovery through interaction.</p>
<p><strong>Player Action Pattern</strong>: Engage with training instances exhaustively to discover full rule set. Internalize cause/effect mappings (insult A → retort B). Face final application where mechanics are identical but consequences escalate (more rounds, permanent failure state, critical plot progression).</p>
<p><strong>Core Mechanic</strong>: The learning domain and application domain share IDENTICAL underlying rules. Player success depends on recognizing that Domain A was never a different puzzle—it WAS the solution manual for Domain B. This is NOT “practice makes perfect” through repetition; its “this system you just learned operates elsewhere.”</p>
<p><strong>Variations</strong>:</p>
<ul>
<li>Combat dialogue systems (insult/retort pairs)</li>
<li>Construction/crafting frameworks (ingredient categories → application recipe)</li>
<li>Code/password mechanics where training example uses same algorithm as lock</li>
</ul>
<p><strong>Adventure Game Implementation</strong>:</p>
<ul>
<li>Tutorial or “optional” early-game puzzles that teach full system</li>
<li>Standard TALK/USE actions reveal mechanical rules through trial/error</li>
<li>Later puzzles invoke same mechanic with different flavor/text/skins</li>
<li>Player must recognize: the framework hasnt changed, only the context</li>
</ul>
<hr>
<h2 id="example-structure"><a class="header" href="#example-structure">Example Structure</a></h2>
<h3 id="swordfight-combat-system-mi1"><a class="header" href="#swordfight-combat-system-mi1">Swordfight Combat System (MI1)</a></h3>
<pre><code>Learning Phase:
→ Encounter 4 types of roaming pirate NPCs with combat mini-game
→ Each duel reveals subset of insult/retort rule mappings
→ Exhaust all 16 combinations: learn every insult → correct retort pair
→ Rule: If opponent uses wrong retort, you win point; if they use right one, they win
Application Phase:
→ Sword Master fight introduces NEW insult text (20+ different lines)
→ BUT: Same 16 retort rules apply to mapped insults
→ Pattern recognition critical: "My tongue is sharper" → maps to feather-duster rule
→ First to 5 points wins (vs training's first-to-3)
</code></pre>
<h3 id="voodoo-doll-construction-framework-mi2"><a class="header" href="#voodoo-doll-construction-framework-mi2">Voodoo Doll Construction Framework (MI2)</a></h3>
<pre><code>Learning Phase (Act I - Largo):
→ Voodoo Lady explains 4 ingredient categories for curse doll:
1. Something of the Thread (clothing)
2. Something of the Head (hair/hairpiece)
3. Something of the Body (bodily fluids)
4. Something of the Dead (ancestor bone/remains)
→ Player gathers these 4 types for Largo doll successfully
→ Complete doll construction = working framework learned
Application Phase (Part IV - LeChuck):
→ After explosion, discover same Juju Bag mechanic
→ Framework from Act I applies: need Thread/Head/Body/Dead components
→ New instances of each category: Skull (Head), Beard Bits (Body),
Underwear (Thread), Used Hanky (fluid)
→ Apply same construction recipe → empowered doll works on LeChuck
</code></pre>
<h3 id="beneath-a-steel-sky-linc-space-tile-password-system-bas"><a class="header" href="#beneath-a-steel-sky-linc-space-tile-password-system-bas">Beneath a Steel Sky: LINC-SPACE Tile Password System (BAS)</a></h3>
<p><strong>Problem</strong>: Navigating through virtual reality spaces requires understanding the tile-based password system. The game teaches this in an early safe zone, then requires exact application in restricted security areas with timed constraints.</p>
<p><small>Source: 5_steamah_walkthrough.html, lines 454-460 — “Pick up the BALL (Compressed Data Red &amp; Green YinYang symbol)… Open the CARPET BAG and obtain the MAGNIFYING GLASS (Decrypt) and BIRTHDAY SURPRISE (Decompress)… Keep alternating between the green and red passwords on the tiles”</small></p>
<pre><code>Learning Phase (First LINC-Space Visit - Tutorial Area):
→ Enter interface room at Security HQ with ID CARD
→ Access INTERFACE terminal, "jack in" to LINC-Space VR environment
→ Room 1: Pick up BALL (Compressed Data) containing Red+Green password symbols
→ Room 2: Open CARPET BAG → get MAGNIFYING GLASS (Decrypt command) and SURPRISE GIFT (Decompress)
→ Discovered mechanic: DECRYPT removes "?" from documents, DECOMPRESS expands ball into passwords
→ Room 3: TILE PASSWORD SYSTEM demonstrated on floor panels with green/red symbols
Rule Discovery:
1. Floor tiles show GREEN or RED symbols
2. Player stands on a tile → places matching COLOR PASSWORD on current tile
3. This reveals a BRIDGE to adjacent tile (previously invisible/impassable)
4. Pattern: Alternate red/green passwords as you progress across tile sequence
5. Goal: Reach thick plasma beam exit using correct alternating sequence
Application Phase (Later LINC-Space Visits - Timed Security Zones):
→ First return with ANITA's CARD: Same tile rules apply, but now EYEBALL guardians present
→ SECONDARY RULE discovered: Use BLIND command on eyeballs to freeze them temporarily (~15-20 sec)
→ Pattern learned applies under pressure: Must navigate tiles WHILE managing reactivation timer
→ Player must remember/execute the exact same password alternation pattern learned earlier,
but now with added time constraint (eyeball reactivates after 15-20 seconds)
Third Visit - FINAL APPLICATION:
→ Enter with medical android's RED CARD → need access to CRYSTAL room guarded by CRUSADER
→ Same tile password mechanics apply (unchanged)
→ New challenge: CRUSADER blocks path until destroyed
→ Player must have acquired DIVINE WRATH program (from earlier eyeball blinding) to remove guardian
→ Once CRUSADER defeated, same red/green tile alternation allows access to CRYSTAL room
→ OSCILLATOR program (TUNING FORK from second visit) shatters crystal → VIRUS obtained
</code></pre>
<p><small>Source: 1_preterhuman_mitch_shaw_walkthrough.html, lines 232-247 — “Use the DECRYPT program on the two DOCUMENTS with ? on them… Use the PASSWORDS (green and red swirls) to get to the DOOR…”</small></p>
<p><small>Source: 5_steamah_walkthrough.html, lines 517-571 — Timed eyeball blind/CRUSADER sequence combining multiple learned systems</small></p>
<p><strong>Why Its Pattern Learning</strong>: The tile password system is taught exhaustively in the first safe visit (Room 3). Every subsequent LINC-Space visit uses IDENTICAL mechanics—no new tutorial, no changed rules. The challenge escalation comes from added constraints (timed eyeballs, guardian enemy) but the underlying navigation framework never changes. Player must recognize “the red/green alternation I learned in Room 3 still works here.”</p>
<p><strong>Distinct Cyberpunk/Hack Element</strong>: Unlike classic adventure puzzles, this leverages LINC-Spaces virtual reality setting—inventory becomes COMMANDS not OBJECTS (Decrypt, Decompress, Blind, Oscillator as verbs). Pattern applies across “virtual rooms” with consistent rules regardless of visual theme changes.</p>
<hr>
<h3 id="quest-for-glory-iv-antwerp-maze--knowledge-transfer-to-monastery-qfg4"><a class="header" href="#quest-for-glory-iv-antwerp-maze--knowledge-transfer-to-monastery-qfg4">Quest for Glory IV: Antwerp Maze → Knowledge Transfer to Monastery (QFG4)</a></h3>
<p><strong>Setup</strong>: Dr. Craniums lab contains two interconnected puzzles using a bizarre antwerp-throwing device (TRAP). The maze puzzle teaches core mechanics in a low-stakes bouncing-ball format, while information gathered about hexapods transfers to a completely separate monastery puzzle days later.</p>
<p><small>Source: qfg4-gamefaqs-anonymous.txt, lines 648-679 — “Use TRAP device to identify baby antwerp via yes/no questions… second TRAP use identifies hexapod → learns eats garlic (info for monastery later!)”</small></p>
<pre><code>LEARNING PHASE - Antwerp Maze Mechanics (Dr. Cranium's Lab, Room 2):
→ Enter bouncing room with antwerps (strange legless babies that hop constantly)
→ Use T.R.A.P. device in center room to identify target: Baby Antwerp
Rule discovered: TRAP uses elimination-based yes/no questioning
Questions asked: "Does it bounce?" → Yes; "Does it have legs?" → No; etc.
Must whittle down until only Baby Antwerp matches all answers (2 points)
→ Feed avocado to device → captures one baby antwerp successfully (2 points)
Rule discovered: Baby antwerps can be trapped via food bait
→ Enter Key Maze room with captured antwerp inside
→ Rotate maze walls to guide bouncing antwerp toward key, then exit
Rules learned:
- Antwerp bounces off walls at consistent angles (physics pattern)
- Holes send antwerp back to start (avoidance consequence)
- Rotating maze changes trajectory dynamically
- Key must be reached BEFORE final exit to complete puzzle
→ Exhaustive pattern testing required: try rotations, observe bounce outcomes,
refine mental model of reflection physics
APPLICATION PHASE 1 - Second TRAP Identification (Same location, different target):
→ Return to T.R.A.P. device, identify another creature
→ Through elimination questioning, discover HEXAPOD properties:
"Does it have six legs?" → Yes
"What does it eat?" → GARBAGE revealed as preference BUT also GARLIC mentioned
Critical knowledge gained: "Hexapods love garlic!" (2 points)
→ No immediate application of this information here—store for later
DEFERRED APPLICATION PHASE - Monastery Hexapod Encounter (~5+ days later, different location):
→ Enter monastery basement, find hexapod statue above fireplace
→ Remember TRAP identification: hexapods love garlic!
→ Use clove of Garlic on hexapod statue
→ Result: Statue's aggression neutralized, can approach without harm
→ Click Hand on right side of fireplace → discovers secret passage to basement (6 points)
Why It's Pattern Learning / Knowledge Transfer:DOMAIN TRANSFER BETWEEN PHYSICALLY SEPARATED PUZZLES:
Learning domain = Dr. Cranium's lab with TRAP device and antwerp maze
Application domain 1 = Same TRAP device but different creature (hexapod info extraction)
Application domain 2 = Completely separate monastery building, days later
MECHANICAL CONSISTENCY:TRAP device uses identical yes/no elimination mechanic for both creatures.
Information gathered in low-stakes lab puzzles has HIGHER-STAKES application at monastery:
without garlic knowledge, player either can't progress or takes damage trying to approach aggressively.
THE KEY DIFFERENCE FROM INFORMATION BROKERAGE:Not "NPC A tells you info NPC B needs" (brokerage)
but rather "Player discovers rule/mechanic/knowledge in Domain A that solves problem in Domain B."
The TRAP device doesn't GIVE information—it enables PLAYER to extract knowledge through mechanical interaction,
then player must remember and apply it across significant spatial/temporal separation.
EXHAUSTIBLE RULE SPACE:Antwerp maze has finite physics system (bounce angles, hole penalties, key/exit sequence)
TRAP questioning has binary branching tree with exhaustive answer combinations
Both are COMPLETE systems fully learnable before application required
</code></pre>
<p><small>Cited from: qfg4-gamefaqs-sac.txt:2210-2235, qfg4-gamefaqs-anonymous.txt:648-728</small></p>
<hr>
<h2 id="key-identifiers"><a class="header" href="#key-identifiers">Key Identifiers</a></h2>
<ol>
<li><strong>Same mechanic, different skin</strong>: Not “I learned to make Largos curse” but “I learned the voodoo doll system”</li>
<li><strong>Exhaustible rule space</strong>: Finite complete system can be discovered (16 insults, 4 categories)</li>
<li><strong>Domain transfer</strong>: Learning happens in Domain A, application in Domain B, mechanics identical</li>
<li><strong>No new teaching</strong>: Application phase provides zero tutorials; assumes player recognized the system</li>
</ol>
<hr>
<h2 id="related-types"><a class="header" href="#related-types">Related Types</a></h2>
<ul>
<li><strong>Multi-Faceted Plan</strong>: Both gather across multiple steps, but MFP has different <em>categories</em> of requirement (key+code+distracter), not one unifying <em>system</em></li>
<li><strong>Observation Replay</strong>: OR reproduces exact sequence verbatim; KT applies rules to new targets</li>
<li><strong>Environmental Storytelling</strong>: KT often includes world text, but puzzle is the mechanic transfer, not narrative connection</li>
</ul>
<hr>
<h2 id="common-misidentifications-not-knowledge-transfer"><a class="header" href="#common-misidentifications-not-knowledge-transfer">Common Misidentifications (NOT Knowledge Transfer)</a></h2>
<div class="table-wrapper">
<table>
<thead>
<tr><th>Apparent Similarity</th><th>Why Its Different</th><th>Actual Type</th></tr>
</thead>
<tbody>
<tr><td>Password game: learn finger-counting logic → apply to 3 doors</td><td>Single-domain application, no mechanical transfer</td><td>Pattern Recognition / Logic Puzzle</td></tr>
<tr><td>Parrot directions: feed crackers → get navigation clues</td><td>Information collection, not system learning</td><td>Multi-Faceted Plan (direction synthesis)</td></tr>
<tr><td>Spitting contest: watch wind timing → spit in window</td><td>Observation + execution of single puzzle</td><td>Environmental Timing Puzzle</td></tr>
<tr><td>Bone maze dream: song lyrics → corridor mapping</td><td>Cryptic message decoding</td><td>Metaphor-to-Literal Translation</td></tr>
</tbody>
</table>
</div>
<p><strong>Critical Test</strong>: Could you describe the solution as “I learned [SYSTEM] that applies to both [CONTEXT A] and [CONTEXT B]”? If not, its not Knowledge Transfer.</p>
<hr>
<h3 id="broken-sword-shadow-of-the-templars---plaster-casting-system-chapter-2"><a class="header" href="#broken-sword-shadow-of-the-templars---plaster-casting-system-chapter-2">Broken Sword: Shadow of the Templars - Plaster Casting System (Chapter 2)</a></h3>
<p><strong>Problem</strong>: Create key cast from statue impression, but plaster wont set correctly without understanding material science principles that must be learned in one domain and applied in another.</p>
<p><small>Source: broken-sword-1/4_agh_peter_christiansen_walkthrough.html, lines 289-307</small>
<small>Source: broken-sword-1/1_walkthroughking_broken_sword.html, lines 113-119</small></p>
<pre><code>Learning Phase (Domain A - Chemistry Lab):
→ Visit chemistry laboratory environment early in chapter
→ Examine plaster demonstration station or read related documentation
→ Discovery through environment: Plaster requires moisture to cure properly
→ Scientific principle learned: Water acts as catalyst—dry plaster = useless, wet plaster = functional
Application Phase (Domain B - Pub Cellar Imprisonment):
→ Later imprisoned in pub cellar with statue impression and dry plaster
→ Standard approach fails: can't cast without water source nearby
→ Framework recognition moment: "Plaster needs moisture"—lab principle applies here
→ Environmental scan for liquid → towel accessible near water source (pub cellar sink)
→ Apply learned system: Wet the towel, mix controlled moisture with plaster
→ Successful key cast produced using transferred knowledge from Domain A
WHY IT'S PATTERN LEARNING / KNOWLEDGE TRANSFER:
The UNDERLYING RULE ("plaster requires moisture ratio to cure") is IDENTICAL across both domains. Laboratory teaches complete mechanical framework—not "do steps a,b,c here" but "this chemical principle exists." Cellar imprisonment requires recognizing that framework applies despite different context/setting. Distinction from Observation Replay: no sequence memorization, only abstract cause-effect relationship transfers. NOT Multi-Faceted Plan because single unifying system governs both instances, not separate requirements needing synthesis.
</code></pre>
<hr>
<h3 id="grim-fandango-coat-check-system--photo-finish-ticket-gf---year-two"><a class="header" href="#grim-fandango-coat-check-system--photo-finish-ticket-gf---year-two">Grim Fandango: Coat Check System + Photo Finish Ticket (GF - Year Two)</a></h3>
<p><strong>Problem</strong>: In the Calavera Cafe bar, Lupe runs a coat check system using color-coded tickets. The photo finish counter at the Cat Track requires a specific racing ticket with week number, day of week, and race number. Both systems encode information symbolically—players must learn the encoding rules from environmental clues, then apply them to generate correct outputs.</p>
<p><small>Source: the-spoiler_walkthrough.html, lines 683-691 — “Pull out your ticket printer and print up a ticket for Week 2, Tuesday, Race 6… Week 2 can be found by reading the plaque on the statue of the cat, Race 6 can be found by looking at the photo, and the day of the week is Tuesday when the kitty hats are handed out according to the guy at the ticket counter”</small></p>
<pre><code>LEARNING PHASE (Domain A - Coat Check System Tutorial):
→ Calavera Cafe: Lupe manages coat check using color-coded tickets
→ Player observes ticket system in action (other patrons receiving/checking coats)
→ Examination of coat rack reveals colored tags organized systematically
Rule Discovery Through Environmental Clues:
RULE 1: Each coat/item has specific COLOR ASSOCIATION from its owner
RULE 2: Tickets encode information through VISUAL CATEGORIES (color = person's identifier)
RULE 3: Coat check is SYMBOL-CODING system, not simple key-locked retrieval
APPLICATION PHASE - Ticket Printer Puzzle (Domain B - Cat Track Photo Finish):
→ After SeaBee lawyer sequence, obtain ticket printer as item
→ Visit photo finish counter at Cat Track
→ Receive generic blank ticket (must print correct values)
DECODING THE REQUIRED TICKET PARAMETERS:
PARAMETER 1 - Week Number (Week 2):
Clue Source: Statue plaque outside Cat Track
Discovery: Plaque mentions "Second Annual Feline Classic" or similar text
Decoding: "Second annual" = WEEK 2 of cat racing season
PARAMETER 2 - Race Number (Race 6):
Clue Source: Previously-obtained photo showing race finish line
Discovery: Photo shows cats crossing finish, count reveals which race depicted
Decoding: EXAMINE PHOTO → Identify it's the SIXTH race in sequence
PARAMETER 3 - Day of Week (Tuesday):
Clue Source: Ticket counter NPC dialogue when asked about events/schedule
Disovery: Counter person mentions "we give out free kitty hats on Tuesdays" or equivalent
Decoding: "Kitty hat day" = TUESDAY
APPLICATION - Print Correct Ticket:
→ Use ticket printer in inventory → Generate ticket with parameters:
Week: 2 | Day: Tuesday | Race: 6
→ Submit completed ticket at Photo Finish window
→ Receive incriminating photo (Nick kissing Olivia) as output
WHY IT'S PATTERN LEARNING / KNOWLEDGE TRANSFER:
SYSTEM TEACHING THROUGH COAT CHECK DOMAIN:
The coat check system establishes that THIS WORLD ENCODES INFORMATION SYMBOLICALLY. Lupe's color-coded tickets aren't just "keys"—they're a SYSTEM of encoding categories (color = person identity). This trains player to look for VISUAL/EVIDENTIAL CLUES rather than direct dialogue statements.
FRAMEWORK TRANSFER TO PHOTO FINISH:
Once coat check establishes "this game uses symbolic information encoding," the photo finish puzzle applies IDENTICAL LOGIC:
- Coat check: Color → Person mapping (learn system)
- Photo ticket: Visual clues → Encoded parameters (apply same "decode symbols" skill)
The learning happens by recognizing patterns in how THIS GAME CONVEYS INFORMATION. Both systems require finding HIDDEN MEANINGS in environmental objects/plaque text/NPC hints and translating those into usable game states.
No single NPC states the complete solution: "Print Week 2, Tuesday, Race 6." Player must synthesize from THREE separate information sources using the pattern-learning principle that clues exist as SYMBOLS requiring interpretation, not explicit statements.
NOIR THREAT THEME INTEGRATION:
The coat check system is pure noir—a seedy bar, mysterious code system, information never given freely. The photo finish puzzle extends this with film noir investigation tropes: examining evidence photos, reading environmental text (plaques), questioning witnesses for fragmentary clues. Both require "detective work" mindset established in tutorial domain.
</code></pre>
<hr>
<h3 id="broken-sword-ii-the-smoking-mirror---pyramid-wheel-room-chapter-6"><a class="header" href="#broken-sword-ii-the-smoking-mirror---pyramid-wheel-room-chapter-6">Broken Sword II: The Smoking Mirror - Pyramid Wheel Room (Chapter 6)</a></h3>
<p><strong>Problem</strong>: Nico must unlock a sealed chamber door using Mayan pictogram interface. A complex machine displays four large rotating wheels with symbols; ten smaller tiles each show two-symbol combinations that must be formed on the machine first, then pressed. Four even smaller final tiles require matching TWO tiles-from-ten simultaneously. The puzzle teaches its own rule set through initial examination, then requires application exhaustively across multiple tile types.</p>
<p><small>Source: 4_kasagaming_walkthrough.html, lines 426-430 — “Notice the pictograms on the great Mayan machine and on the tiles… Each tile from the set of ten has a symbol on it made from two symbols on the machine.”</small></p>
<pre><code>LEARNING PHASE - RULE DISCOVERY THROUGH EXAMINATION:
→ Enter pyramid wheel room, examine interface components:
- Large rotating wheels with multiple pictogram options each
- Set of 10 medium tiles (each showing 2-symbol combination)
- Set of 4 small final tiles (each showing reference to 2-of-10-tiles)
→ First attempt at any tile → locked, won't move
→ Observation: Tiles encode REQUIRED STATES for wheels
→ Pattern discovered from examination:
RULE A: Each wheel has multiple symbol positions (rotateable)
RULE B: Medium tiles show target 2-symbol pairings needed on machine
RULE C: Small tiles reference TWO medium-tiles that must be activated first
APPLICATION CHAIN - EXHAUSTIVE FRAMEWORK EXECUTION:
Step 1 → Examine medium tile #1 → shows "crescent + skull" pairing
&lt;small&gt;Source: kasagaming_walkthrough, line 427 — "Each tile from the set of ten has a symbol on it made from two symbols on the machine"&lt;/small&gt;
Step 2 → Rotate wheels to show crescent AND skull simultaneously on display
Step 3 → Press medium tile #1 → ACCEPTED (wheels match its encoded pair)
REPEAT for all other medium tiles in set of 10:
→ Each requires finding correct WHEEL CONFIGURATION first
→ Pattern holds consistently: examine tile = read requirement, adjust wheels = fulfill requirement, press tile = validate match
→ By ~5-8 tiles, player internalizes full system rule: "Tile shows goal state → configure machine to that → press when matched"
FINAL PHASE - COMPOUND TILE CHAIN (Rule B applied recursively):
Step A → Examine small tile #1 → shows reference to medium-tiles 3+7
&lt;small&gt;Source: kasagaming_walkthrough, line 429 — "Each tile below the Mayan statue is made from two tiles from the set of ten"&lt;/small&gt;
Step B → Medium tile #3 already pressed (from earlier phase) ✓
Step C → Medium tile #7 already pressed (from earlier phase) ✓
- If not yet done, player learns: SMALL-TILES require MEDIUM-TILE PREREQUISITES
Step D → Press small tile #1 → ACCEPTED (both referenced tiles activated)
REPEAT for all 4 small tiles using same compound rule.
→ Complete set of 4 small-tiles pressed inward → secret door opens automatically
</code></pre>
<p><strong>Why Its This Type</strong>: The puzzle TEACHES its mechanical rules through initial interaction: examining tiles reveals required wheel configurations; first few tile presses confirm the “match wheels to tile, then press” framework. This SAME RULE SET exhaustively applied to all remaining tiles—including compound small-tiles that reference already-completed medium-tiles. Player doesnt discover scattered clues; they learn a COMPREHENSIVE SYSTEM whose consistent application is the solution. The teaching happens IN THE PUZZLE ITSELF through graduated difficulty (medium-tiles straightforward, small-tiles introduce layer-2 dependency).</p>
<p><strong>Core Mechanic Distinction</strong>: Unlike Symbol Code Translation where static symbols translate to actions (Bible diagram → chess moves), here player LEARNS AN INTERACTIVE SYSTEM: “Machine wheels are adjustable; tiles validate configurations; some tiles depend on others.” This framework applies EXHAUSTIVELY across ALL instances—no external training domain needed because the puzzle scaffolds learning through progressive revelation of its own rules.</p>
<p><strong>Distinction from Symbol Code Translation</strong>: Player isnt translating static visual codes to separate interface actions (Bible → chessboard). Instead, theyre operating a UNIFIED MECHANICAL SYSTEM where examining components reveals the systems operational logic. The wheels ARE the solution space; the tiles ARE validation gates for wheel states discovered through iterative experimentation.</p>
<hr>
<h3 id="simon-the-sorcerer-magic-word-learning-and-witch-duel-application-simon"><a class="header" href="#simon-the-sorcerer-magic-word-learning-and-witch-duel-application-simon">Simon the Sorcerer: Magic Word Learning and Witch Duel Application (SIMON)</a></h3>
<p><strong>Problem</strong>: The Witch challenges Simon to a magical duel but will not let him attempt it unless he becomes an official wizard first. Becoming a wizard requires learning magic words—taught by a talking tree in exchange for removing paint. Once learned, the exact same magic word system is then applied in combat against the witch.</p>
<p><small>Source: walkthroughs/simon1/simon1.txt, lines 827-863 — “Simon still needs to learn some magic words… Go to the Tree, four screens east of the Dragons Cave. It promises to teach you the words if you help it [remove paint]. Return to the tree with White Spirit from shop, use on pink splodge → learns four magic words: Alakazam=snake, Hocus Pocus=cat, Sausages=dog, Abracadabra=mouse.”</small></p>
<p><small>Source: walkthroughs/simon1/simon1_3.txt, lines 226-245 — “The duel is a weird match. Using the magic words taught to you by the tree, you morph into various animals… Dog beats snake, snake beats cat, and cat beats dog. Dont use the mouse in the duel, because the mouse always loses.”</small></p>
<pre><code>LEARNING PHASE (Domain A - Talking Tree Tutorial):
PHASE 1A - Discovering the Magic Word System Exists:
→ Navigate to tree located four screens east of Dragon's Cave
→ TREE DIALOGUE: "I can teach you magic words if you help me"
→ Player learns: Magic words exist as gameplay mechanic (previously unknown)
PHASE 1B - Learning Prerequisite Mechanic (White Spirit Acquisition):
→ Tree requirement stated: "Remove the pink paint stain on my bark"
→ Player must determine: How do you remove paint from a tree?
→ HYPOTHESIS GENERATION: White spirit = paint thinner in real world logic
→ Execute: Buy white spirit from village shop with previously-earned gold coins
PHASE 1C - Word-Mapping Discovery (The Rule Set):
→ After cleaning tree with white spirit → Tree teaches four magic words and their effects:
WORD 1: "Alakazam" → Simon transforms into SNAKE
WORD 2: "Hocus Pocus" → Simon transforms into CAT
WORD 3: "Sausages" → Simon transforms into DOG
WORD 4: "Abracadabra" → Simon transforms into MOUSE
RULE EXPLANATION PROVIDED BY TREE:
→ Tree explains animal hierarchy: "Dog beats snake, snake beats cat, cat beats dog"
← Critical detail: MOUSE ALWAYS LOSES (explicit warning)
Complete rule set now learned and documented by player.
APPLICATION PHASE (Domain B - Witch's Magical Duel):
PHASE 2A - Gaining Access to Duel Context:
→ Navigate to Witch's Cottage
→ Attempt to take broomstick → Witch challenges Simon to duel
→ WITCH CONDITION: "Only wizards can duels with me"
→ Player must first complete staff acquisition chain (become wizard at pub, separate plotline)
PHASE 2B - Applying Learned System in Combat Context:
→ Once wizard status granted, rematch initiated
→ Same magic word system NOW applied under stakes:
DUEL MECHANICS (Five rounds, best of five wins):
ROUND STRUCTURE:
1- Witch selects animal form via dialogue choice (randomized by game)
2- Player responds by selecting counter-form using learned words
3- Combat resolution calculated per tree's stated rules
EXAMPLE ROUND EXECUTION:
Witch chooses CAT form → says "Hocus Pocus!" (from same word set as player learned)
Player MUST KNOW: What beats cat? → SNAKE (per tree's rule teaching)
Player executes: SAY "Alakazam" → transforms to snake → wins round
COMBAT DECISION TREE (Applying Learned Rules):
- IF witch = DOG → respond with CAT ("Hocus Pocus")
- IF witch = SNAKE → respond with DOG ("Sausages")
- IF witch = CAT → respond with SNAKE ("Alakazam")
CRITICAL AVOIDANCE RULE (Learned from Tutorial):
Abracadabra/MOUSE is NEVER a winning response. Choosing it grants point to Witch automatically.
Player who learned tutorial well knows: "Never use mouse form in combat."
TIE-BREAKER MECHANIC:
→ If score tied after five rounds → game continues until tie broken
→ Same rules apply, no new mechanics introduced
→ Player must maintain word mapping under extended pressure
POST-DUEL PLOT DEVICE (Mouse Form Utility):
After winning duel, Witch transforms into DRAGON and attacks.
SOLUTION: Use "Abracadabra" → become mouse → escape through mouse hole in wall
This is where MOUSE form becomes useful—but NOT as combat mechanic,
instead as ESCAPE MECHANIC. The tutorial taught all transformations have some valid use,
even if some are combat-ineffective.
WHY IT'S PATTERN LEARNING / KNOWLEDGE TRANSFER:
IDENTICAL RULE SYSTEM IN BOTH DOMAINS:
Domain A (Tree Tutorial): "Dog beats snake, snake beats cat, cat beats dog" + word mappings
Domain B (Witch Combat): Exactly same rule set applies during five-round duel
PLAYER MUST RECOGNIZE: The system hasn't changed; only context shifted from
friendly teaching environment to competitive combat. The magic words don't work differently
against the witch—they're the EXACT SAME transformations with the EXACT SAME hierarchy rules.
EXHAUSTIVE RULE DISCOVERY IN TUTORIAL:
All four word→animal mappings are revealed upfront during tree interaction.
Hierarchy rules explicitly explained by tree character.
This differs from combat puzzles where you "learn through fighting" (try sword attack,
learn it doesn't work). Here the tutorial provides complete system knowledge before
combat begins—if player succeeded in learning tree phase, they know everything needed to win duel.
DOMAIN TRANSFER EVIDENCE:
The Tree explicitly warns: "Don't use mouse in combat—it always loses."
This is TUTORIAL→APPLICATION ADVICE that applies only if player recognizes:
"The tree's rules about animal hierarchy apply to this witch duel!"
Player who treats them as separate puzzles might waste time trying all four words randomly.
Player who recognizes knowledge transfer knows immediately: Never choose mouse form.
STOCHASTIC ELEMENT DOES NOT AFFECT MECHANICS:
Witch chooses animal randomly each round (per walkthrough notes).
This does not change UNDERLYING RULE SET—same hierarchy governs resolution regardless of choice.
Randomness adds challenge but does NOT create new mechanic. Player still applies:
"If opponent = X, response = Y" where X and Y come from fixed 4-element set taught in tutorial.
FAILURE AS KNOWLEDGE GAP IDENTIFICATION:
Losing rounds reveals player's knowledge gap, not mechanical complexity:
- Lose because you forgot which animal witch chose → memory failure
- Lose because you picked wrong counter → rule application failure
- Lose because you chose mouse → ignored tutorial advice
None of these are "complex puzzle mechanics." They're pure knowledge retention/application tests.
Player who took notes during tree phase should be able to replay those notes verbatim in duel.
DISTINCTION FROM COMBAT MINI-GAMES:
Unlike Monkey Island swordfight where player must discover insult/retort pairings,
Simon's magic system is EXPLICITLY TAUGHT before combat begins. Player receives all rules
as dialogue from NPC tree—not hidden mechanics uncovered through experimentation.
This makes Pattern Learning rather than combat-discovery: The tutorial phase isn't "practice"
combat—it's receiving the solution manual that applies DIRECTLY to actual combat phase.
</code></pre>
<p><strong>Why Its Pattern Learning</strong>: The Talking Tree provides exhaustive system teaching (all four word mappings, all three hierarchy rules, explicit warning about useless mouse option).</p>
<hr>
<h3 id="legend-of-kyrandia-royal-bell-musical-sequence-puzzle-lk1"><a class="header" href="#legend-of-kyrandia-royal-bell-musical-sequence-puzzle-lk1">Legend of Kyrandia: Royal Bell Musical Sequence Puzzle (LK1)</a></h3>
<p><strong>Problem</strong>: In a bedroom on the west side of Castle Kyrandias second floor, Four bells mounted on a stand produce different musical notes when struck. Player must discover the correct striking sequence to reveal a hidden golden key behind a painting. This is the only source of one of two keys needed for the great hall doors—critical path item with no alternative acquisition method.</p>
<p><small>Source: classicgamesparadise_walkthrough.html, lines 323-324 — “If you strike the bells in the correct order, the last gold key will be revealed behind the painting. The correct order is Do, Fa, Mi, Re, or green, white, gold then blue.”</small></p>
<p><small>Source: bonny_ploeg_walkthrough.html, line 78 — “Number the bells 1 to 4 from left to right, play 4 1 2 3 to move the painting up and take the golden key.”</small></p>
<pre><code>LEARNING PHASE: No explicit tutorial—discovery through environmental observation or trial/external reference
CONTEXTUAL SETUP:
→ Player reaches Castle Kyrandia after completing Faeriewood potions and retrieving Royal Chalice
→ Second floor bedroom accessible ONLY AFTER using yellow healing gem on Herman (sleep spell)
→ Bell stand found in westernmost room, four bells of different colors/materials
PATTERN DISCOVERY MECHANICS:
OPTION 1 - Trial and Error with External Save/Load:
Step 1 → Save game before first bell interaction
Step 2 → Strike arbitrary sequence (e.g., all bells one at a time)
Step 3 → Observe result: nothing happens / wrong sequence feedback
Step 4 → Reload save, try different permutation
Step 5 → Repeat until correct sequence discovered
OPTION 2 - External Knowledge/Walkthrough Consultation:
Player learns from guide: "Do Fa Mi Re" = scale positions mapped to bells 1-4
OPTION 3 - Color Sequence Mapping (Visual Pattern):
Walkthrough provides alternative notation: "green, white, gold, blue" = physical bell colors
Player translates color sequence to left-to-right numeric positions
CRITICAL CONSTRAINT - ONE CHANCE OR SAVE REQUIRED:
The walkthrough doesn't explicitly state whether WRONG sequences fail permanently or allow re-attempts. Based on LK1's general design patterns and similar puzzles in the game (birthstone altar consumes items), it's LIKELY that:
- Either: Each wrong attempt RESETS the bells to neutral state allowing retry
- Or: Wrong sequence locks the puzzle requiring reload/backtrack
This creates HIGH STAKES application—single failure may mean losing progress to earlier save point.
PATTERN STRUCTURE ANALYSIS:
MUSICAL SCALE AS RULE SET:
- "Do Re Mi Fa" = basic solfège scale, universally recognized pattern
- Correct sequence is do → fa → mi → re (positions 1 → 4 → 2 → 3 by standard ordering)
- This is REVERSE CHROMATIC ORDER—intentional deviation from expected 1-2-3-4
COLOR AS ALTERNATIVE NOTATION SYSTEM:
- Green = Do (position 1?) OR position 4 if reverse mapping used
- White = Fa (position 4 in numeric order, but walkthrough says "4 1 2 3")
- Gold/Brown = Mi (position 2)
- Blue = Re (position 3)
TWO COMPETING NOTATION SYSTEMS create ambiguity:
- Classicgamesparadise: "green, white, gold, blue"
- Bonny Ploeg: "4 1 2 3 left-to-right numeric order"
These appear to BE THE SAME SOLUTION expressed differently. Translation required:
If bells are numbered L→R as 1-2-3-4, and solution is 4-1-2-3, then:
- Bell 4 (rightmost) = first struck = white = Do? [contradiction - see below]
[NOTE: Walkthrough discrepancy may indicate multiple valid solutions OR conflicting sources]
WHY IT'S PATTERN LEARNING:
NO EXPLICIT TUTORIAL PHASE EXISTS IN THIS SPECIFIC INSTANCE.
However, the puzzle QUALIFIES as Pattern Learning by this definition:
1. LEARNED RULE SYSTEM FROM EXTERNAL DOMAIN:
- Solfège musical scale knowledge assumed or acquirable
- Color-to-note mapping requires pattern recognition skill
- Player learns (somehow) that sequence matters, not individual actions
2. APPLICATION UNDER CONSEQUENCES:
- Wrong sequence = failure (painting doesn't move, key inaccessible)
- Single source of critical item—no alternate acquisition path exists
- Failure may require save/reload OR complete backtracking if locked state
3. IDENTICAL MECHANICS TO LK1'S FLUTE PUZZLE:
The Serpent's Grotto ice-shattering requires playing a HIGH NOTE on flute.
This is SIMPLIFIED version—just "play high pitch" without full sequence.
Both puzzles use MUSIC AS LANGUAGE with discoverable rule set.
DISTINCTION FROM OBSERVATION REPLAY:
Observation Replay would be: WATCH someone play bells correctly, then reproduce EXACTLY what was observed. Here, NO demonstration is provided within game. Player must derive pattern through experimentation or external knowledge—no single viewing to memorize.
The "learned" element comes from PATTERN DISCOVERY (recognizing scale/music/color system applies) not MEMORY RETENTION (reproduce what was seen once).
DISTINCTION FROM SYMBOL CODE TRANSLATION:
Symbol Code Translation = visual puzzle where symbols on object A directly TRANSFER TO INTERFACE B (e.g., glyphs on statue → matching glyph buttons on door, same shape must go in same-shaped slot). Here, bells have NO VISUAL SYMBOLS transferring—just abstract color or positional identifiers. The "code" is musical scale knowledge, not visual symbol matching.
COMPARISON TO MI1'S SWORDFIGHT:
Both require discovering rule sets that map inputs → outputs correctly under pressure. Swordfight = insults/retorts; Bells = sequence/ordering. Both have single-failure-consequences (Sword Master fight loses immediately if wrong retort used too many times).
</code></pre>
<p>—The Witch duel then applies that exact same system unchanged in a higher-stakes context. Success depends entirely on recognizing the context shift while maintaining mechanical fidelity—the combat is just a test of remembered knowledge from tutorial domain, not new discovery.</p>
<p><strong>Comedy Element as Justification</strong>: The absurdity of “Sausages = dog transformation” delivers humor while maintaining logical consistency (words are arbitrary triggers, hierarchy follows rock-paper-scissors). Player laughs at the mapping but must treat it seriously in combat—comedy doesnt break mechanics, it flavors them.</p>
<h3 id="gabriel-knight-1-loa-machine-cipher-translation-system-gk1"><a class="header" href="#gabriel-knight-1-loa-machine-cipher-translation-system-gk1">Gabriel Knight 1: Loa Machine Cipher Translation System (GK1)</a></h3>
<p><strong>Problem</strong>: After obtaining Voodoo Code Page 1 from the conclave (Marie Laveaus tombstone symbols), Magenta at Moonbeam Books tests Gabriel with her “Loa Machine”—a cipher translation framework. The system teaches symbol-to-letter mapping rules that must then be applied to decode Voodoo Code Page 2 discovered later at the Second Conclave.</p>
<p><small>Source: justadventure_walkthrough.html, lines 906-923 — Loa machine translates symbols to letters; Page 1 decoded first</small></p>
<pre><code>LEARNING PHASE (Voodoo Code Page 1 Translation via Loa Machine):
Step A → Visit Magenta at Moonbeam Books residence in French Quarter
&lt;small&gt;Source: line 906 — "From inventory, show Magentia your Voodoo Code and ask her to decipher it. But she won't 'For outsiders' such as Gabriel"&lt;/small&gt;
Step B → Ask to be tested with her "Loa Machine"
- She agrees after persuasion
- Machine functions as CIPHER DECODER tool
Step C → Voodoo Code Page 1 displayed on screen:
- Left side: Symbol grid (voodoo pictograms)
- Right side: Blank letter slots beneath each symbol
Step D → TRANSLATION RULES DISCOVERY THROUGH EXPERIMENTATION:
Each voodoo symbol corresponds to ONE English letter
Letters appear beneath symbols in specific positions
Step E → COMPLETE DECODED MESSAGE (Page 1):
"DJ CONCLAVE TONIGHT BRING F WET KASH"
&lt;small&gt;Source: line 920 — "Look at the Voodoo Code in inventory. Now, beneath each of the symbols is a letter..."&lt;/small&gt;
Translation breakdown:
DJ → likely abbreviation/name
CONCLAVE TONIGHT → meeting timing directive
BRING F WET KASH → cryptic instruction (F=French? Wet=wet ingredients? Kash=cash?)
FRAMEWORK ESTABLISHED:
Rule Learnt: Symbol-to-letter mapping follows consistent cipher
Once one symbol is decoded, same symbol elsewhere = same letter
Position within message matters (symbols maintain relative spacing)
---
APPLICATION PHASE (Voodoo Code Page 2 - Same Rules Apply):
Step F → Return to conclave aftermath (after Crash death scene)
- New coded message appears on wall/floor at crime scene
&lt;small&gt;Source: line 998 — "take your sketchbook and copy the new coded message you now have Voodoo Code Page 2"&lt;/small&gt;
Step G → Acquire Voodoo Code Page 2 via sketchbook documentation
- OLD ITEM renamed: "Voodoo Code" → "Voodoo Code Page 1"
- NEW item created: "Voodoo Code Page 2"
Step H → COMBINE Pages in Inventory:
Action: Select both Page 1 and Page 2 together
Result: Game AUTOMATICALLY applies translation framework from Page 1
New composite item created: "Voodo Code" (merged translation)
&lt;small&gt;Source: lines 999-1000 — "In inventory, the coded message that Magentia translated has been renamed from Voodoo Code to Voodoo Code Page 1...combining Voodoo Code Page 1 and Voodoo Code Page 2 in inventory and obtaining the single item Voodoo Code"&lt;/small&gt;
CRITICAL MECHANIC:
- Player doesn't manually decode Page 2 symbol-by-symbol
- Instead, player COMBINES items → game applies SAME cipher rules automatically
- The "learning" was discovering that symbol→letter mapping is consistent
- The "application" is trusting the framework transfers to new instance
WHY IT'S PATTERN LEARNING:
1. TUTORIAL DOMAIN (Page 1): Low stakes—decode with Magenta's help via Loa Machine
2. APPLICATION DOMAIN (Page 2): Higher stakes—independent discovery, no helper available
3. IDENTICAL RULES APPLY: Same cipher framework works for both pages
4. NO NEW DISCOVERY NEEDED: Player recognizes "this is same system as before"
DISTINCTION FROM SYMBOL CODE TRANSLATION:
- SCT would be: Symbol A on artifact → Shape match on interface button
- PL here is: Learn cipher framework once (symbol→letter), apply to new MESSAGE instances
- The framework transfers; individual symbols may repeat across pages
COMPARISON TO MI1 SWORDFIGHT:
Similarities:
- Train with low-stakes examples (roaming pirates / Magenta tutorial)
- Apply same rules to high-stakes final (Sword Master / crime scene decoding)
Differences:
- Swordfight = active combat mini-game
- Voodoo Code = passive translation using learned framework
ESCALATION PATTERN:
Page 1 → Safe decode with NPC assistance → Framework understood
Page 2 → Independent application → Same rules reveal plot-critical information
</code></pre>
<p><small>Cited from: justadventure_walkthrough.html:906-1000</small></p>
<hr>
<h3 id="leshy-riddle-progression-qfg4---german-folklore-pattern-system"><a class="header" href="#leshy-riddle-progression-qfg4---german-folklore-pattern-system">Leshy Riddle Progression (QFG4) - German Folklore Pattern System</a></h3>
<p><strong>Problem</strong>: The Hero encounters a mischievous forest spirit (Leshy) who demands knowledge demonstration before offering assistance. Six riddles must be answered sequentially, but each answer is GATED by completing unrelated quests—the system teaches that “knowledge” in this game means “completing activities that provide knowable information.”</p>
<p><small>Source: qfg4-gamefaqs-sac.txt, lines 3179-3210 — “You cannot answer a riddle correctly until your character has the knowledge… Q: Who am I? A: Leshy (Found in Heros Magazine in Adventurers Guild)”</small></p>
<pre><code>LESHY RIDDLE SYSTEM - COMPLETE PROGRESSION:
RIDDLE 1: Identity (Simple Knowledge)
Question: "Who am I?"
Answer Required: "Leshy"
How to Learn: Read Hero's Magazine on bookshelf in Adventurer's Guild
Pattern Established: Folklore knowledge = answer ability [2 points]
---
RIDDLE 2: Plant Quest Integration (Action-Knowledge Bridge)
Question: "Save a plant from goo."
Answer Required: "Bush"
Knowledge Gate: Must have completed separate bonsai bush rescue
- Go to Squid Stone area
- Use Force Bolt on rocks blocking bush
- Cast Fetch spell to retrieve Bush
- Answer riddle with correct response
- Then transplant bush to Erana's Garden
Pattern Addition: Riddles gate other quests; completing quests enables riddle answers [2 points]
---
RIDDLE 3: Exploration Verification
Question: "Who's in the lake?"
Answer Required: "Rusalka"
Knowledge Gate: Visit Lake Mordavia, interact with Rusalka at least once
Pattern Addition: Knowledge = exploration completion, not just reading [2 points]
---
RIDDLE 4: Narrative Connection (Folklore to Character)
Question: "Who hides behind 'trick sticks'?"
Answer Required: "Baba Yaga"
Knowledge Gate: Either visit Baba Yaga's hut OR speak with Punny Bones about her
Pattern Addition: Recognize folklore references applied to in-game characters [2 points]
---
RIDDLE 5: Multi-Stage Quest Gate (Elderbury Pie Chain)
Question: "A berry bush with attitude?"
Answer Required: "Elderbury Bush"
Knowledge Gate: COMPLETE Baba Yaga's Elderbury Pie quest:
1. Buy/obtain Pie Pan from General Store
2. Collect Grue Goo in Empty Flask at Squid Stone area
3. Make Bonemeal (find Bone, grind in mortar at Baba Yaga's, collect)
4. Force Bolt Elderbury Bush to dislodge berries, Fetch the branch
5. Combine all four items → Elderbury Pie
6. Return pie to Baba Yaga via her laser-skulls oven
Pattern Addition: Some riddles gate major quest chains; completion = answerable [2 points]
---
RIDDLE 6: Spell Acquisition Dependency (Heart Ritual)
Question: "What does the Faery Queen want?"
Answer Required: "Staff" (referring to Erana's Staff)
Knowledge Gate: Must possess Ritual of Release spell
- Granted by Faeries after bush planted in Riddle 2
- Connect spell's purpose (freeing Staff from its rock base) to Faerie Queen's desires
Pattern Addition: Most difficult riddles gate both quest completion AND magic progression [2 points]
---
WHY THIS IS PATTERN LEARNING:
THE RULE SYSTEM is IDENTICAL across all six riddles and must be recognized/applied exhaustively:
CORE PATTERN (Applied Every Time):
1. Leshy asks riddle question about element X
2. Player checks: "Have I completed activity that teaches me about X?"
3. If YES → game allows selecting correct answer from dialogue tree
4. If NO → game rejects attempt, must go complete prerequisite activity
5. Return to Leshy, same interface, apply newly acquired knowledge
CRITICAL DISTINCTION FROM MULTI-FACETED PLAN:
In Multi-Faceted Plan (like gathering 4 items for Baba Yaga's pie itself):
- Each requirement is different TYPE of acquisition
- Items gathered independently in any order
- Solution = synthesis at the end (combine ingredients)
In this Leshy riddle system:
- All six requirements are SAME TYPE: "gain knowledge"
- Each riddle shares IDENTICAL solution mechanic: "check completed activities → answer from dialogue"
- Progression is LINEAR and GATED, not independent
- The pattern isn't synthesis—it's RECURSIVE APPLICATION of "knowledge = completion"
The system teaches once (Riddle 1: read magazine = know answer), then applies identical rule five more times with escalating complexity. Domain A (simple reading) = tutorial for Domain B (multi-stage quest chains), but MECHANIC never changes.
</code></pre>
<p><small>Source: qfg4-gamefaqs-sac.txt, lines 3206-3210 — “Now, getting the bush for the Leshy… Cast Force Bolt at the rocks to bust them up, then cast Fetch to snag the Bush itself (15). Now that you have the Bush, go back to answer the Leshys riddle, then go to Eranas Garden and plant it (6)”</small></p>
<hr>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../puzzles/observation-replay.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../puzzles/meta-puzzle-construction.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../puzzles/observation-replay.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../puzzles/meta-puzzle-construction.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
</nav>
</div>
<template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
<template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
<template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
<template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
<template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_line_numbers = true;
</script>
<script>
window.playground_copyable = true;
</script>
<script src="../ace-2a3cd908.js"></script>
<script src="../mode-rust-2c9d5c9a.js"></script>
<script src="../editor-16ca416c.js"></script>
<script src="../theme-dawn-4493f9c8.js"></script>
<script src="../theme-tomorrow_night-9dbe62a9.js"></script>
<script src="../elasticlunr-ef4e11c1.min.js"></script>
<script src="../mark-09e88c2c.min.js"></script>
<script src="../searcher-c2a407aa.js"></script>
<script src="../clipboard-1626706a.min.js"></script>
<script src="../highlight-abc7f01d.js"></script>
<script src="../book-a0b12cfe.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

View File

@@ -0,0 +1,369 @@
<!DOCTYPE HTML>
<html lang="en" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Predator Chase Escape - Puzzle Design Knowledge Base</title>
<!-- Custom HTML head -->
<meta name="description" content="A taxonomy of puzzle design patterns from classic point-and-click adventure games">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon-de23e50b.svg">
<link rel="shortcut icon" href="../favicon-8114d1fc.png">
<link rel="stylesheet" href="../css/variables-8adf115d.css">
<link rel="stylesheet" href="../css/general-2459343d.css">
<link rel="stylesheet" href="../css/chrome-ae938929.css">
<link rel="stylesheet" href="../css/print-9e4910d8.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../fonts/fonts-9644e21d.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css">
<link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css">
<link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
window.path_to_searchindex_js = "../searchindex-c567150f.js";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc-35c178c7.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="mdbook-body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
sidebar_toggle.checked = false;
}
if (sidebar === 'visible') {
sidebar_toggle.checked = true;
} else {
html.classList.remove('sidebar-visible');
}
</script>
<nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="mdbook-page-wrapper" class="page-wrapper">
<div class="page">
<div id="mdbook-menu-bar-hover-placeholder"></div>
<div id="mdbook-menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
</label>
<button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
</button>
<ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
</ul>
<button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
</button>
</div>
<h1 class="menu-title">Puzzle Design Knowledge Base</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb" title="Git repository" aria-label="Git repository">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb/edit/main/src/puzzles/predator-chase-escape.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
<span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
</a>
</div>
</div>
<div id="mdbook-search-wrapper" class="hidden">
<form id="mdbook-searchbar-outer" class="searchbar-outer">
<div class="search-wrapper">
<input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
<div class="spinner-wrapper">
<span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
</div>
</div>
</form>
<div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
<div id="mdbook-searchresults-header" class="searchresults-header"></div>
<ul id="mdbook-searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="mdbook-content" class="content">
<main>
<h1 id="predator-chase-escape-puzzle"><a class="header" href="#predator-chase-escape-puzzle">Predator Chase Escape Puzzle</a></h1>
<p><strong>Information Architecture</strong>: A relentless pursuer NPC (often an armored antagonist) hunts the player through hostile environments. The environment itself contains natural or artificial hazards that can be exploited to eliminate or deter the attacker. Information about escape routes and environmental traps comes from direct observation during chase sequences.</p>
<p><strong>Player Action Pattern</strong>:</p>
<ol>
<li>Recognize pursuit state initiated by antagonist appearance</li>
<li>Navigate toward known dangerous zones (environmental hazards)</li>
<li>Position self safely while luring pursuer into hazard</li>
<li>Trigger hazard to defeat/delay pursuer</li>
<li>Collect rewards or items dropped by defeated pursuer</li>
</ol>
<p><strong>Core Mechanic</strong>: The player cannot directly confront the enemy; victory requires redirecting environmental danger toward the pursuer, exploiting the antagonists inability to recognize terrain-based threats.</p>
<h2 id="variations"><a class="header" href="#variations">Variations</a></h2>
<div class="table-wrapper">
<table>
<thead>
<tr><th>Variation</th><th>Pursuit Type</th><th>Trap Method</th><th>Example</th></tr>
</thead>
<tbody>
<tr><td><strong>Natural Hazard</strong></td><td>Unavoidable hunter NPC</td><td>Biological trap (predatory flora/fauna)</td><td>SQ3 Phleebhut pods</td></tr>
<tr><td><strong>Constructed Trap</strong></td><td>Persistent pursuer</td><td>Mechanical devices, environmental hazards</td><td>Generic adventure games</td></tr>
<tr><td><strong>Time-Based Retreat</strong></td><td>Countdown timer</td><td>Reach safe zone before deadline</td><td>Timed escape sequences</td></tr>
</tbody>
</table>
</div>
<hr>
<h2 id="game-examples"><a class="header" href="#game-examples">Game Examples</a></h2>
<h3 id="spacequest-iii-arnoid-pursuit-and-pod-trap-phleebhut-sq3"><a class="header" href="#spacequest-iii-arnoid-pursuit-and-pod-trap-phleebhut-sq3">SpaceQuest III: Arnoid Pursuit and Pod Trap (Phleebhut) (SQ3)</a></h3>
<p><strong>Problem</strong>: After landing on Phleebhut, Roger Wilco is hunted by the “Arnold” — a relentless robotic terminator with superior combat capabilities. Direct confrontation guarantees death. The only escape requires luring the Arnold into carnivorous hanging pods that populate a specific cave area and harvest their bounty (invisibility belt) from the defeated machine.</p>
<p><small>Source: gamefaqs-tricrokra-archive.html, lines 376-382 — “Well, itll take awhile before he finds you… Now the Terminator will catch you.”</small></p>
<p><small>Source: the-spoiler-walkthrough.html, lines 89-97 — “The Arnoid will show up. Luckily, he is in a good mood and will give you a small amount of time to run away.”</small></p>
<pre><code>CHASE INITIATION PHASE:
Step 1 - Purchase Required Items (Pre-Chase Preparation):
Command Sequence: Enter World o' Wonders → SELL Gem → BUY Orat on a stick → BUY Underwear → BUY Hat
Citation: gamefaqs-tricrokra-archive.html, lines 393-401 — "= Sell the gem... = Buy Orat on a stick = Buy the chicken hat = Buy the thermoweave underwear"
Critical: Must sell gem for enough buckazoids to afford all three items. The Orat is specifically required for extracting the invisibility belt post-defeat.
CHASE EXECUTION PHASE (Two methods; only one reliably succeeds):
UNRELIABLE METHOD - Hook Grab Attempt:
Navigation: Go west twice → Enter building → Up elevator → When Arnold gets close, grab hanging hook
Success Rate: Low; sometimes fails entirely
Point Award: Minimal (less than alternative method)
Citation: gamefaqs-tricrokra-archive.html, lines 406-411 — "go west, enter the building go up the elevator and grab the hook when the Terminator gets close. This method gets you less points though, and does not always work."
RELIABLE METHOD - Carnivorous Pod Trap:
Step A - Lead Pursuer to Trap Zone:
Command Sequence: South x3 → East → Enter cave with hanging pods
Citation: gamefaqs-tricrokra-archive.html, lines 413-417 — "= Exit south x3"
Step B - Position for Safe Harvest:
Positioning Instruction: Stand BEHIND the carnivorous pods but NOT directly underneath them
Critical Constraint: The "things-in-the-cave" will kill Roger if he enters beneath them while Arnold is present. Standing behind (not under) keeps player safe while Arnold passes through danger zone.
Citation: gamefaqs-tricrokra-archive.html, lines 416-420 — "= Stand in the cave behind the 'things' and wait for the Terminator to come it'll get eaten by the 'things.'"
Step C - Wait for Trap Activation:
Mechanism: Carnivorous pods have independent detection system that triggers when humanoid (Arnold) enters kill zone but does not detect Roger unless he is directly below.
Outcome: Arnold is captured and consumed; Roger emerges unharmed from protected position.
Step D - Extract Invisibility Belt:
Prerequisite: ORAT ON A STICK in inventory (purchased earlier on Phleebhut)
Command: USE ORAT on defeated Arnold's remains
Reward: INVISIBILITY BELT acquired
Citation: gamefaqs-tricrokra-archive.html, line 421 — "= Use the Orat on a stick to get the Terminator's invisibility belt"
Failure Modes:
- If player returns to ship while being pursued → Arnold catches and kills Roger instantly (game over)
Citation: gamefaqs-tricrokra-archive.html, lines 418-420 — "DON'T GO TO YOUR SHIP. If you go there, you'll be killed."
- If Arnold fails to follow player into pod cave area → may need to exit and re-enter or check west path
Note: Sometimes the Terminator simply won't come; player must avoid ship until pursuit is resolved
</code></pre>
<p><strong>Why Its Predator Chase Escape (New Type)</strong>:
This represents a distinct puzzle category because environmental hazards serve as the <em>only</em> defeat mechanism, and timing/positioning both matter. Roger must: (1) survive during escape, (2) successfully guide pursuer through narrow corridor to trap zone without entering danger himself, (3) exploit the specific mechanical weakness of Arnold (cannot see pod danger, unlike player). The three-phase structure—preparation → chase → harvest—is unique from Observation Replay or other pursuit mechanics.</p>
<p><strong>Information Discovery</strong>: Partial trial-and-error during escape. The walkthrough warns that:</p>
<ul>
<li>One method (“hook grab”) is unreliable and yields fewer points</li>
<li>The second method (pods) is the only guaranteed success path</li>
<li>Environmental positioning (behind vs under pods) is critical for survival</li>
</ul>
<p>This requires both environmental intelligence (knowing what pods do) AND tactical retreat execution (luring without being caught).</p>
<p><strong>Distinction from Distraction Physics</strong>: Unlike distraction physics where NPCs are diverted by manipulating their environment or attention, predator chase requires the player to also navigate while pursued. The Arnold follows Roger directly; theres no “making him watch something else”—only escape and trap activation exists as valid strategies.</p>
<hr>
<h2 id="related-types"><a class="header" href="#related-types">Related Types</a></h2>
<div class="table-wrapper">
<table>
<thead>
<tr><th>Type</th><th>Similarity</th><th>Distinction</th></tr>
</thead>
<tbody>
<tr><td><strong>Timed Consequence Puzzle</strong></td><td>Both involve urgent avoidance of death state</td><td>Timed consequence has explicit story deadline; predator chase has immediate pursuit mechanic with no timer UI</td></tr>
<tr><td><strong>Distraction Physics</strong></td><td>Both manipulate environment to bypass blocked path</td><td>DP: distract NPC attention; Predator Chase: literally hide while enemy hunts you through terrain</td></tr>
<tr><td><strong>Observation Replay</strong></td><td>May require memorizing safe positions/routes during initial observation</td><td>OR: watch sequence once, replay later; Predator Chase: active pursuit without prior “viewing phase”—must act during hunt</td></tr>
</tbody>
</table>
</div>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../puzzles/corporate-infiltration.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../puzzles/class-specific-ritual.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../puzzles/corporate-infiltration.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../puzzles/class-specific-ritual.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
</nav>
</div>
<template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
<template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
<template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
<template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
<template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_line_numbers = true;
</script>
<script>
window.playground_copyable = true;
</script>
<script src="../ace-2a3cd908.js"></script>
<script src="../mode-rust-2c9d5c9a.js"></script>
<script src="../editor-16ca416c.js"></script>
<script src="../theme-dawn-4493f9c8.js"></script>
<script src="../theme-tomorrow_night-9dbe62a9.js"></script>
<script src="../elasticlunr-ef4e11c1.min.js"></script>
<script src="../mark-09e88c2c.min.js"></script>
<script src="../searcher-c2a407aa.js"></script>
<script src="../clipboard-1626706a.min.js"></script>
<script src="../highlight-abc7f01d.js"></script>
<script src="../book-a0b12cfe.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

View File

@@ -0,0 +1,390 @@
<!DOCTYPE HTML>
<html lang="en" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Repair Chain Construction - Puzzle Design Knowledge Base</title>
<!-- Custom HTML head -->
<meta name="description" content="A taxonomy of puzzle design patterns from classic point-and-click adventure games">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon-de23e50b.svg">
<link rel="shortcut icon" href="../favicon-8114d1fc.png">
<link rel="stylesheet" href="../css/variables-8adf115d.css">
<link rel="stylesheet" href="../css/general-2459343d.css">
<link rel="stylesheet" href="../css/chrome-ae938929.css">
<link rel="stylesheet" href="../css/print-9e4910d8.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../fonts/fonts-9644e21d.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css">
<link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css">
<link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
window.path_to_searchindex_js = "../searchindex-c567150f.js";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc-35c178c7.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="mdbook-body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
sidebar_toggle.checked = false;
}
if (sidebar === 'visible') {
sidebar_toggle.checked = true;
} else {
html.classList.remove('sidebar-visible');
}
</script>
<nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="mdbook-page-wrapper" class="page-wrapper">
<div class="page">
<div id="mdbook-menu-bar-hover-placeholder"></div>
<div id="mdbook-menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
</label>
<button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
</button>
<ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
</ul>
<button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
</button>
</div>
<h1 class="menu-title">Puzzle Design Knowledge Base</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb" title="Git repository" aria-label="Git repository">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb/edit/main/src/puzzles/repair-chain-construction.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
<span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
</a>
</div>
</div>
<div id="mdbook-search-wrapper" class="hidden">
<form id="mdbook-searchbar-outer" class="searchbar-outer">
<div class="search-wrapper">
<input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
<div class="spinner-wrapper">
<span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
</div>
</div>
</form>
<div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
<div id="mdbook-searchresults-header" class="searchresults-header"></div>
<ul id="mdbook-searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="mdbook-content" class="content">
<main>
<h1 id="repair-chain-construction-puzzle"><a class="header" href="#repair-chain-construction-puzzle">Repair Chain Construction Puzzle</a></h1>
<p><strong>Information Architecture</strong>: Player discovers repair requirements through direct examination of broken system states. Missing components must be found and integrated in a specific sequence where each components installation enables progression to the next step. The ship cannot function until ALL required parts are installed; partial repairs yield no progress.</p>
<p><strong>Player Action Pattern</strong>:</p>
<ol>
<li>Examine non-functional systems → identify whats broken/missing</li>
<li>Locate missing components through environmental search</li>
<li>Install components in required sequence (reactor → wires → engines)</li>
<li>Test system functionality after installation</li>
</ol>
<p><strong>Core Mechanic</strong>: The ship is a collection of interdependent failure states—each system cannot be repaired until its prerequisite systems are fixed, creating a linear dependency chain where the player must discover both <em>what</em> parts are needed and <em>where</em> to find them.</p>
<h2 id="variations"><a class="header" href="#variations">Variations</a></h2>
<div class="table-wrapper">
<table>
<thead>
<tr><th>Type</th><th>Dependency Structure</th><th>Example</th></tr>
</thead>
<tbody>
<tr><td><strong>Sequential Chain</strong></td><td>A→B→C (must complete in order)</td><td>SQ3 Ship Reactor installation</td></tr>
<tr><td><strong>Parallel Requirements</strong></td><td>A+B+C (order irrelevant)</td><td>Multi-faceted plan variants</td></tr>
<tr><td><strong>Conditional Branching</strong></td><td>Different paths based on available components</td><td>Complex crafting systems</td></tr>
</tbody>
</table>
</div>
<hr>
<h2 id="game-examples"><a class="header" href="#game-examples">Game Examples</a></h2>
<h3 id="spacequest-iii-escape-pod-repair-chain-sq3"><a class="header" href="#spacequest-iii-escape-pod-repair-chain-sq3">SpaceQuest III: Escape Pod Repair Chain (SQ3)</a></h3>
<p><strong>Problem</strong>: Roger Wilco awakens in his escape pod aboard a garbage freighter. The ship is non-functional—it lacks a reactor, proper wiring, and an engine. Each component must be located separately throughout the ships hazardous environments and installed in sequence before he can escape.</p>
<p><small>Source: gamefaqs-tricrokra-archive.html, lines 256-260 — “Now to get outta here…”</small></p>
<p><small>Source: the-spoiler-walkthrough.html, lines 63-70 — “South. East. Stand near the bucket conveyor and you will be taken up. Stand. Jump.”</small></p>
<pre><code>PHASE 1 - COMPONENT ACQUISITION (Order discovered through exploration):
COMPONENT A: WIRES
Location: Tube passage in garbage scow
Acquisition Method:
- Exit east → west twice → south → east
- Climb down to tube with rat
- Rats steal all items EXCEPT reactor initially; reroute search
Command: GET WIRE
Citation: gamefaqs-tricrokra-archive.html, line 263 — "= Get the wires"
COMPONENT B: REACTOR
Location: Basement/lower level of garbage scow (west wall)
Acquisition Method:
- Enter tube, climb down to basement
- Rats attack and steal all inventory except reactor
- Must re-enter after rat attack to retrieve lost items
- Climb ladder back up after acquiring reactor
Command: GET REACTOR
Citation: the-spoiler-walkthrough.html, line 69 — "'Get reactor'"
COMPONENT C: ENGINE
Location: Upper conveyor system, requires grabber cart manipulation
Acquisition Method:
- Use grabber cart and move to correct position above engine chute
- "Move about half-way across this screen and type 'push button'"
- Claw mechanism picks up green engine object (trial-and-error positioning)
Citation: the-spoiler-walkthrough.html, lines 76-80 — "Move the grabber above the middle chute... The claw should come out of the grabber which will pick up the green object."
COMPONENT D: LADDER
Location: After sliding down middle chute near entrance to rat pit
Acquisition Method:
- Exit scow area and climb ladder back up
- Retrieve ladder that leads to ship entrance
Command: GET LADDER
Citation: gamefaqs-tricrokra-archive.html, line 328 — "= GET THE LADDER (80)"
PHASE 2 - INSTALLATION SEQUENCE (Must follow this order):
STEP 1 - Position Ship for Access
Action: Navigate to the front of ship where green engine was deposited
Citation: gamefaqs-tricrokra-archive.html, lines 295-300 — "Exit east... Move to the front and press the button to release the engine."
STEP 2 - Climb onto Ship Exterior
Prerequisites: LADDER in inventory
Command: USE LADDER → CLIMB → OPEN HATCH
Citation: gamefaqs-tricrokra-archive.html, lines 340-344 — "= USE LADDER = CLIMB = OPEN HATCH = SIT"
STEP 3 - Install Reactor
Prerequisite: REACTOR in inventory, hatch interior accessible
Command: USE REACTOR
Citation: the-spoiler-walkthrough.html, line 87 — "'Put reactor in hole'"
STEP 4 - Install Wiring
Prerequisite: WIRES in inventory, reactor installed (power needed for electronics)
Command: USE WIRE
Citation: the-spoiler-walkthrough.html, line 87 — "'Put wires in hole'"
STEP 5 - Initialize Engine Systems
Prerequisite: ENGINE was dropped into ship hold earlier; now power available
Command: SIT → LOOK SCREEN → Select "1" for Engines
Citation: gamefaqs-tricrokra-archive.html, lines 346-350 — "Choose 1. Engines"
STEP 6 - Activate Shields and Weapons (Optional but recommended)
Command: Choose 8 for Weapon System → F for Front shields → Press space to fire
Citation: gamefaqs-tricrokra-archive.html, lines 352-354 — "= Choose 8... = Press space (Fire)"
STEP 7 - Escape Planet
Prerequisites: All systems operational
Command: Look Screen → 2 (Navigation) → 1 (Scan) → 2 (Set Course to Phleebhut) → 5 (Light Speed) → 3 (Land)
Citation: gamefaqs-tricrokra-archive.html, lines 362-370 — "= Choose 2. Navigation System = Choose 1. Scan"
</code></pre>
<p><strong>Why Its Meta-Puzzle Construction (Not Multi-Faceted Plan)</strong>:
This is a repair chain where each component installation enables the next action—without reactor power, wires cannot function; without wire connections, engine screen cannot activate. Components must be found first (parallel search phase), but installation follows linear sequence. Unlike MFP where requirements are just “all needed,” here order matters due to hard dependencies: Reactor→Wires→Screen access.</p>
<p><strong>Distinction from Similar Types</strong>:</p>
<ul>
<li><strong>Multi-Faceted Plan</strong>: Would allow acquiring reactor, wires, AND engine in any order then installing all simultaneously. SQ3 requires sequential installation because powered systems wont recognize unpowered subsystems.</li>
<li><strong>Meta-Puzzle Construction</strong>: The BROKEN SHIP itself is the puzzle structure—each failed system reveals whats needed, and repairs must happen in causal order (electricity before electronics).</li>
</ul>
<p><strong>Key Information Discovery Method</strong>: Environmental examination. Looking at each broken panel/screen directly states what component is missing (e.g., “The reactor compartment is empty”). Unlike MFPs distributed NPC dialogue hints, SQ3 uses direct system interface feedback.</p>
<hr>
<h2 id="related-types"><a class="header" href="#related-types">Related Types</a></h2>
<div class="table-wrapper">
<table>
<thead>
<tr><th>Type</th><th>Similarity</th><th>Distinction</th></tr>
</thead>
<tbody>
<tr><td><strong>Meta-Puzzle Construction</strong></td><td>Sequential dependency; each step enables next</td><td>SQ3 has parallel acquisition phase (find all parts) before sequential installation</td></tr>
<tr><td><strong>Multi-Faceted Plan</strong></td><td>Multiple requirements gathered from environment</td><td>MFP = gather then combine freely; SQ3 repair chain requires strict installation order</td></tr>
<tr><td><strong>Environmental Storytelling Discovery</strong></td><td>Information revealed through examining objects/breakdowns</td><td>That type focuses on narrative revelation, not mechanical repair chains</td></tr>
</tbody>
</table>
</div>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../puzzles/meta-puzzle-construction.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../puzzles/timed-consequence.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../puzzles/meta-puzzle-construction.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../puzzles/timed-consequence.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
</nav>
</div>
<template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
<template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
<template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
<template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
<template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_line_numbers = true;
</script>
<script>
window.playground_copyable = true;
</script>
<script src="../ace-2a3cd908.js"></script>
<script src="../mode-rust-2c9d5c9a.js"></script>
<script src="../editor-16ca416c.js"></script>
<script src="../theme-dawn-4493f9c8.js"></script>
<script src="../theme-tomorrow_night-9dbe62a9.js"></script>
<script src="../elasticlunr-ef4e11c1.min.js"></script>
<script src="../mark-09e88c2c.min.js"></script>
<script src="../searcher-c2a407aa.js"></script>
<script src="../clipboard-1626706a.min.js"></script>
<script src="../highlight-abc7f01d.js"></script>
<script src="../book-a0b12cfe.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

View File

@@ -0,0 +1,551 @@
<!DOCTYPE HTML>
<html lang="en" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Robot Programming / Color-Encoded Sequences - Puzzle Design Knowledge Base</title>
<!-- Custom HTML head -->
<meta name="description" content="A taxonomy of puzzle design patterns from classic point-and-click adventure games">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon-de23e50b.svg">
<link rel="shortcut icon" href="../favicon-8114d1fc.png">
<link rel="stylesheet" href="../css/variables-8adf115d.css">
<link rel="stylesheet" href="../css/general-2459343d.css">
<link rel="stylesheet" href="../css/chrome-ae938929.css">
<link rel="stylesheet" href="../css/print-9e4910d8.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../fonts/fonts-9644e21d.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css">
<link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css">
<link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
window.path_to_searchindex_js = "../searchindex-c567150f.js";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc-35c178c7.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="mdbook-body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
sidebar_toggle.checked = false;
}
if (sidebar === 'visible') {
sidebar_toggle.checked = true;
} else {
html.classList.remove('sidebar-visible');
}
</script>
<nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="mdbook-page-wrapper" class="page-wrapper">
<div class="page">
<div id="mdbook-menu-bar-hover-placeholder"></div>
<div id="mdbook-menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
</label>
<button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
</button>
<ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
</ul>
<button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
</button>
</div>
<h1 class="menu-title">Puzzle Design Knowledge Base</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb" title="Git repository" aria-label="Git repository">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb/edit/main/src/puzzles/robot-programming.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
<span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
</a>
</div>
</div>
<div id="mdbook-search-wrapper" class="hidden">
<form id="mdbook-searchbar-outer" class="searchbar-outer">
<div class="search-wrapper">
<input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
<div class="spinner-wrapper">
<span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
</div>
</div>
</form>
<div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
<div id="mdbook-searchresults-header" class="searchresults-header"></div>
<ul id="mdbook-searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="mdbook-content" class="content">
<main>
<h1 id="robot-programming--color-encoded-action-sequences-pattern-learning-variant"><a class="header" href="#robot-programming--color-encoded-action-sequences-pattern-learning-variant">Robot Programming / Color-Encoded Action Sequences (Pattern Learning Variant)</a></h1>
<p><strong>Information Architecture</strong>: Player discovers mechanical rule system through trial-and-error with no explicit tutorial. Each button color maps to specific robot action (directional movement or item manipulation). Rules are consistent and exhaustive—once discovered, player understands COMPLETE control framework. Later puzzles invoke identical mechanics for different goals, requiring players to compose NEW sequences using mastered framework rather than learning new rules.</p>
<p><strong>Player Action Pattern</strong>:</p>
<ol>
<li>Encounter robot/control panel interface with multiple color-coded buttons</li>
<li>Experiment with individual button colors to discover action mappings (purple=left, blue=up, etc.)</li>
<li>Observe robot behavior provides immediate visual feedback for each input</li>
<li>Compose sequences by entering multiple colored commands before execution trigger</li>
<li>Press execution button (triangle) to run programmed sequence</li>
<li>If goal not achieved: review failed sequence, adjust color/order, re-execute</li>
<li>When framework mastered: apply same rules to entirely different objectives without new teaching</li>
</ol>
<p><strong>Core Mechanic</strong>: Color-coded interface buttons map to specific robot actions; player learns exhaustive rule set through experimentation in low-stakes puzzle context, then applies IDENTICAL framework to new goals where failure has higher consequences (power restoration affects game progression).</p>
<hr>
<h2 id="variations"><a class="header" href="#variations">Variations</a></h2>
<div class="table-wrapper">
<table>
<thead>
<tr><th>Type</th><th>Learning Method</th><th>Feedback Clarity</th><th>Application Diversity</th><th>Example</th></tr>
</thead>
<tbody>
<tr><td><strong>Direct Experimentation</strong></td><td>Trial-and-error with no hints</td><td>High (visible robot movement)</td><td>Multiple goals, same rules</td><td>Robot lens retrieval → power restoration</td></tr>
<tr><td><strong>Environmental Hints</strong></td><td>Murals/displays suggest button-color meanings</td><td>Medium (requires interpretation)</td><td>Single complex goal</td><td>Light bridge controls via museum display interpretation</td></tr>
<tr><td><strong>Progressive Unlocking</strong></td><td>First rule reveals access to discover second</td><td>Low-Medium</td><td>Linear sequence discovery</td><td>Multi-stage control room puzzles</td></tr>
</tbody>
</table>
</div>
<hr>
<h2 id="adventure-game-implementation"><a class="header" href="#adventure-game-implementation">Adventure Game Implementation</a></h2>
<h3 id="standard-actions-applied"><a class="header" href="#standard-actions-applied">Standard Actions Applied:</a></h3>
<ul>
<li><strong>CLICK</strong> individual colored buttons = Input commands into program buffer (does NOT execute immediately)</li>
<li><strong>OBSERVE</strong> robot display = Monitor command queue accumulation before execution</li>
<li><strong>CLICK TRIANGULAR/EXECUTION BUTTON</strong> = Run programmed sequence</li>
<li><strong>WHITE CLEAR/BACKSPACE BUTTONS</strong> = Reset or edit command queue mid-programming</li>
</ul>
<h3 id="learning-through-failure"><a class="header" href="#learning-through-failure">Learning Through Failure:</a></h3>
<p>Unlike combat systems (swordfight) where failed attempts produce loss states, robot programming failures are benign—the robot simply doesnt achieve the desired outcome and returns to starting position. Player can retry indefinitely with modified sequences. This creates a sandbox learning environment with no penalty for experimentation.</p>
<hr>
<h2 id="example-structure-the-dig-robot-lens-retrieval"><a class="header" href="#example-structure-the-dig-robot-lens-retrieval">Example Structure: The Dig Robot Lens Retrieval</a></h2>
<h3 id="learning-phase-nexus-power-room"><a class="header" href="#learning-phase-nexus-power-room">Learning Phase (Nexus Power Room)</a></h3>
<p><strong>Environment Setup</strong>:
[Source: spoiler_paul_greunke_walkthrough.txt, lines 158-173]</p>
<pre><code>LOCATION: Nexus power room beneath main floor
INTERFACE: Control panel with 7 color-coded buttons:
→ Purple = ???
→ Blue = ???
→ Yellow = ???
→ Green = ???
→ Orange/Red = ??? (contextually changes function)
→ Top White = Backspace (remove last command)
→ Bottom White = Clear (reset all commands)
PHYSICAL CONTEXT: Robot descends through chute when triangular execution button pressed. Below robot can move over a pit containing an unattached lens that needs to be retrieved and placed in lens slot.
PLAYER KNOWLEDGE STATE: Zero—no hints provided about button functions.
</code></pre>
<p><strong>Discovery Process Through Experimentation</strong>:</p>
<p>Based on walkthrough reconstruction and logical deduction:</p>
<p>[Source: mogelpower_morgana_walkthrough.txt, lines 916-923]</p>
<p>The walkthrough author describes the actual discovery method:</p>
<blockquote>
<p>“The simplest way to figure out what the BUTTONS did seemed to be to plug in a line of one color on the CONTROL PANEL, PUSH the TRIANGULAR BUTTON, watch what happened, and then repeat with the next color. This way Id be able to devise a program that would get the thing to the UNATTACHED LENS…”</p>
</blockquote>
<p><strong>Systematic Discovery Process</strong>:</p>
<pre><code>STEP 1: Test Purple Button
→ Input: purple [execute]
→ Observation: Robot moves LEFT one step
→ Rule discovered: PURPLE = MOVE LEFT
STEP 2: Test Blue Button
→ Input: blue [execute]
→ Observation: Robot moves UP (toward top of screen/away from lens area)
→ Rule discovered: BLUE = MOVE UP
STEP 3: Test Yellow Button
→ Input: yellow [execute]
→ Observation: Robot moves DOWN (toward lens area)
→ Rule discovered: YELLOW = MOVE DOWN
STEP 4: Test Green Button
→ Input: green [execute]
→ Observation: Robot moves RIGHT
→ Rule discovered: GREEN = MOVE RIGHT
STEP 5: Understand Orange/Red Contextual Function
→ When robot positioned over item: orange/red = GRAB
→ When robot holding item: orange/red = DROP
→ Rule discovered: ORANGE/RED = contextual (GRAB/DROP toggle)
RULE SET NOW COMPLETE—all button mappings known
</code></pre>
<p><strong>Application 1: Lens Retrieval Program</strong>:</p>
<p>[Source: spoiler_paul_greunke_walkthrough.txt, lines 173-175]</p>
<blockquote>
<p>“to get the lens push: purple 4 times, yellow 2 times, and red 1 time”</p>
</blockquote>
<p><strong>Translation to Robot Commands</strong>:</p>
<pre><code>PROGRAM QUEUE (before execution):
purple, purple, purple, purple, yellow, yellow, orange
EXECUTED ACTIONS:
LEFT → LEFT → LEFT → LEFT (robot positions over lens)
DOWN → DOWN (robot descends to lens level)
ORANGE/RED = GRAB (robot picks up lens)
[Execution button pressed] → Robot completes sequence, returns via chute with lens
[Result check]: Lens slot now filled → Power activates → Nexus doors unlockable
</code></pre>
<p><strong>Key Design Element</strong>: The walkthrough author notes in [mogelpower_morgana_walkthrough.txt, lines 919-923]:</p>
<blockquote>
<p>“I had to PUSH the TRIANGULAR BUTTON a few times as I was putting the program together to make sure it was working right”</p>
</blockquote>
<p>This confirms player can ITERATE development—build partial sequence, test, add more commands, test again. This creates an accessible programming environment that mirrors modern incremental software development practices.</p>
<hr>
<h3 id="application-2-power-restoration-identical-rules-different-goal"><a class="header" href="#application-2-power-restoration-identical-rules-different-goal">Application 2: Power Restoration (Identical Rules, Different Goal)</a></h3>
<p>[Source: spoiler_paul_greunke_walkthrough.txt, lines 176-180]</p>
<p>After lens retrieval, power activates but is temporarily on. Player must now create SECOND program to permanently restore power by placing lens into correct slot.</p>
<blockquote>
<p>“to restore power (to open doors) push: purple 5 times, blue 4 times, and red 1 time”</p>
</blockquote>
<p><strong>Translation to Robot Commands</strong>:</p>
<pre><code>PROGRAM QUEUE:
purple, purple, purple, purple, purple, blue, blue, blue, blue, orange
EXECUTED ACTIONS:
LEFT x5 (position robot over slot)
UP x4 (ascend to slot height)
ORANGE/RED = DROP (release lens into slot)
[Result check]: Lens installed → Power permanently restored → Door panels functional
</code></pre>
<p><strong>Why This Is Pattern Learning</strong>:</p>
<ol>
<li><strong>Same Mechanic, Different Target</strong>: Robot doesnt learn anything new—player knows all rules from Application 1. Only goal changed (retrieval vs installation).</li>
<li><strong>New Sequence Required</strong>: Cannot reuse lens retrieval program; player must compose fresh command sequence for different spatial objective.</li>
<li><strong>Same Framework</strong>: Purple still = left, blue still = up, etc. Zero new teaching occurs.</li>
</ol>
<p>The robot puzzle teaches the COLOR→ACTION rule set ONCE in Application 1, then requires EXHAUSTIVE APPLICATION of those rules to solve Application 2 without any additional hints or tutorials.</p>
<hr>
<h3 id="extended-application-light-bridge-controls-same-framework-new-domain"><a class="header" href="#extended-application-light-bridge-controls-same-framework-new-domain">Extended Application: Light Bridge Controls (Same Framework, New Domain)</a></h3>
<p>A related Puzzle Learning example exists throughout The Dig with the light bridge “strange device” controls found on each spire.</p>
<p><strong>Light Bridge Control Pattern</strong>:
[Source: spoiler_paul_greunke_walkthrough.txt, lines 200-203; mogelpower_morgana_walkthrough.txt, lines 1278-1295]</p>
<pre><code>MECHANIC: Three-lens positioning puzzle with timing component
REPEATING FRAMEWORK on EACH spire light bridge:
1. Position LENS to one of three angles (each produces different audio tone)
2. Listen for which position produces DISTINCT/DIFFERENT tone
3. PUSH and HOLD switch until crystal above glows
4. Maintain hold until line completes drawing across pentagonal display
5. EXIT interface → BRIGHT LIGHT walkable bridge now appears connecting to central sphere
WALKTHROUGH AUTHOR NOTE: Same process applies at least FOUR TIMES (Museum Spire, Planetarium Spire, Map Spire, Tomb Spire)
[mogelpower_morgana_walkthrough.txt, lines 1599-1627 — light bridge solutions repeated across multiple spires with identical procedures]
VARIATION: Last active light bridge encountered includes hidden prism puzzle within control panel—randomly placed to add unexpected complexity after framework mastery
</code></pre>
<p><strong>Why Light Bridges Are Pattern Learning (not Symbol Code Translation)</strong>:</p>
<ul>
<li>No visual symbol matching—player learns procedural sequence, not visual equivalencies</li>
<li>Identical process applies across ALL instances with zero re-teaching</li>
<li>Player discovers rule set ONCE through first successful light bridge activation, then applies exhaustively</li>
<li>Audio feedback (different tone) becomes learned indicator of correct state</li>
</ul>
<hr>
<h2 id="why-robot-programming-is-pattern-learning-vs-other-types"><a class="header" href="#why-robot-programming-is-pattern-learning-vs-other-types">Why Robot Programming Is Pattern Learning vs. Other Types</a></h2>
<h3 id="distinction-from-multi-faceted-plan"><a class="header" href="#distinction-from-multi-faceted-plan">Distinction from Multi-Faceted Plan:</a></h3>
<ul>
<li><strong>MFP</strong>: Scatter multiple DIFFERENT puzzle requirements (key, code, distractor); collect all, SYNTHESIZE into solution</li>
<li><strong>Robot Programming</strong>: Discover ONE rule system (colors = actions); APPLY to multiple goals</li>
</ul>
<p>The robot uses a SINGLE mechanical framework applied repeatedly, not synthesis of disparate elements.</p>
<h3 id="distinction-from-meta-puzzle-construction"><a class="header" href="#distinction-from-meta-puzzle-construction">Distinction from Meta-Puzzle Construction:</a></h3>
<ul>
<li><strong>MPC</strong>: Step A produces output → Step B consumes that output → Step C builds on previous result</li>
<li><strong>Robot Programming</strong>: Lens retrieval succeeds as complete unit; power restoration is separate task using same tools</li>
</ul>
<p>While both robot programs achieve related goals in same location, they are INDEPENDENT solutions not a chain where ones output becomes anothers input. Player could restore power then retrieve lens—the order doesnt create dependencies.</p>
<h3 id="distinction-from-observation-replay"><a class="header" href="#distinction-from-observation-replay">Distinction from Observation Replay:</a></h3>
<ul>
<li><strong>OR</strong>: Watch exact sequence once, reproduce verbatim—NO rule understanding required</li>
<li><strong>Robot Programming</strong>: Discover abstract rules (“purple moves left”), compose ORIGINAL sequences for new goals</li>
</ul>
<p>Player didnt watch “purple-purple-yellow-red” and memorize it for later repetition. Player discovered PURPLE=LEFT as a reusable rule, then COMPOSED custom programs for each objective.</p>
<hr>
<h2 id="design-considerations-for-robotprogramming-puzzles"><a class="header" href="#design-considerations-for-robotprogramming-puzzles">Design Considerations for Robot/Programming Puzzles</a></h2>
<p><strong>Implementation Patterns</strong>:</p>
<ol>
<li><strong>Incremental Testing Capability</strong>: Allow players to test partial sequences before full commits</li>
<li><strong>Clear Visual Feedback</strong>: Robot movement must be unambiguous—exactly 1 step per command with visible positioning</li>
<li><strong>Command Queue Display</strong>: Show entered sequence BEFORE execution so player can verify correctness mentally</li>
<li><strong>Benign Failure States</strong>: Incorrect programs should reset without permanent consequences or item loss</li>
</ol>
<p><strong>Best Practices</strong>:</p>
<ol>
<li>Keep rule set small and memorable (5-7 actions maximum)</li>
<li>First goal requires shorter sequence (~5-8 commands) to teach without overwhelming</li>
<li>Later applications require longer/more complex sequences using same rules (~10+ commands)</li>
<li>Provide visual/auditory feedback for each command type (different sounds/animations per action)</li>
</ol>
<p><strong>Common Pitfalls</strong>:</p>
<ul>
<li>Rules too abstract or counterintuitive (“blue means diagonal movement” violates spatial intuition)</li>
<li>No way to test partial sequences—player must get entire program right on first attempt</li>
<li>Robot pathfinding obscured by visual clutter (cant see if robot actually moved correct number of steps)</li>
</ul>
<hr>
<h2 id="related-types"><a class="header" href="#related-types">Related Types</a></h2>
<div class="table-wrapper">
<table>
<thead>
<tr><th>Type</th><th>Similarity to Robot Programming</th><th>Distinction</th></tr>
</thead>
<tbody>
<tr><td><strong>Pattern Learning / Knowledge Transfer</strong></td><td>Same core mechanism: learn rules once, apply exhaustively</td><td>Robot programming is concrete spatial manipulation; PL often abstract (dialogue, ingredient categories)</td></tr>
<tr><td><strong>Symbol Code Translation</strong></td><td>Both systematic rule discovery through experimentation</td><td>SCT adds visual matching layer; robot programming uses direct abstraction (color→action, no intermediate symbol artifact)</td></tr>
<tr><td><strong>Observation Replay</strong></td><td>Both require remembering sequences</td><td>OR copies watched sequence exactly; Robot requires composing NEW sequences from learned rules</td></tr>
</tbody>
</table>
</div>
<hr>
<h2 id="game-examples"><a class="header" href="#game-examples">Game Examples</a></h2>
<h3 id="the-dig-nexus-robot-programming---complete-walkthrough-solution"><a class="header" href="#the-dig-nexus-robot-programming---complete-walkthrough-solution">The Dig: Nexus Robot Programming - Complete Walkthrough Solution</a></h3>
<p><strong>Setup</strong>: After Brink dies and crew enters Nexus, player descends ramp to power room. Blue crystal provides temporary light but removing it causes blackout. An unattached lens hangs over a pit below—must be retrieved and installed to restore permanent power so Nexus doors can open.</p>
<p><strong>Solution Chain</strong>:
[Source: Combined from spoiler_paul_greunke_walkthrough.txt lines 150-183; mogelpower_morgana_walkthrough.txt lines 915-925]</p>
<p><strong>PHASE 1 - Rule Discovery (Tutorial Sandbox)</strong>:</p>
<ol>
<li>Return to control panel with blue crystal in place (lights on for visibility)</li>
<li>Click individual colored buttons one at a time, execute single-command programs:
<ul>
<li>Purple alone → observe robot movement direction</li>
<li>Blue alone → observe robot movement direction</li>
<li>Yellow/Green same process</li>
</ul>
</li>
<li>Discover purple=left, blue=up, yellow=down, green=right through systematic testing</li>
<li>Learn orange/red button = GRAB/DROP (contextual based on robot state)</li>
</ol>
<p><strong>PHASE 2 - Lens Retrieval Program Composition</strong>:
5. Input sequence: P-P-P-P-Y-Y-O (purple×4, yellow×2, orange)
6. Execute with triangular button → robot descends, navigates to lens position, grabs it
7. Robot returns to chute with lens—lens now in inventory</p>
<p><strong>PHASE 3 - Power Restoration Program Composition</strong>:<br>8. Return to control panel (lights off but can interact)
9. Input sequence: P-P-P-P-P-B-B-B-B-O (purple×5, blue×4, orange)
10. Execute → robot navigates to slot position, drops lens into mount
11. Power activates permanently, Nexus doors now unlockable with engraved rods</p>
<p><strong>Why Its Extended Pattern Learning</strong>:</p>
<ul>
<li>Phase 1 teaches COMPLETE rule framework through experimentation</li>
<li>Phases 2 and 3 REQUIRE application of learned rules without additional hints</li>
<li>Player must COMPPOSE original sequences (not recall watched actions) using abstract mappings (colors → directions → spatial navigation)</li>
<li>Same system could theoretically be taught via explicit tutorial (“purple is left”) but game design deliberately WITHHOLDS instruction, forcing discovery learning</li>
</ul>
<p><strong>Design Significance</strong>: Unlike typical adventure game puzzle types where player solves discrete problems with unique solutions, the robot programming puzzle teaches a REUSABLE SYSTEM. This is mechanically closer to video game tutorial levels or mini-games that teach controls—except theres no explicit teaching text, only discovery through trial-and-error in authentic gameplay context.</p>
<hr>
<h2 id="when-to-document-as-robot-programming--color-encoded-sequences"><a class="header" href="#when-to-document-as-robot-programming--color-encoded-sequences">When to Document as Robot Programming / Color-Encoded Sequences</a></h2>
<p>Document as this type when:</p>
<ol>
<li>✓ Interface uses abstract symbols (colors/shapes) mapping to specific actions via consistent rules</li>
<li>✓ Player must DISCOVER mappings through experimentation—not taught explicitly</li>
<li>✓ Learned rule set applies to MULTIPLE puzzle goals requiring different sequences</li>
<li>✓ Framework functions without visual artifact matching (unlike Symbol Code Translations rod→button equivalence)</li>
</ol>
<p>DO NOT classify as this type if:</p>
<ul>
<li>Only ONE solution sequence exists (no repeated application of learned rules = not Pattern Learning)</li>
<li>Mappings taught through explicit text/tutorial rather than discovery</li>
<li>Different rule sets required for different goals (not consistent framework = Multi-Faceted Plan instead)</li>
</ul>
<hr>
<h2 id="cross-reference-to-related-mechanics"><a class="header" href="#cross-reference-to-related-mechanics">Cross-Reference to Related Mechanics</a></h2>
<h3 id="contrast-with-symbol-code-translation"><a class="header" href="#contrast-with-symbol-code-translation">Contrast with Symbol Code Translation:</a></h3>
<p>Both teach systems through first-instance learning but differ in COGNITIVE LAYER:</p>
<ul>
<li><strong>Robot Programming</strong>: Abstraction learning (“purple → left”)</li>
<li><strong>Symbol Translation</strong>: Visual matching learning (“red triangle on artifact → red triangle button on interface”)</li>
</ul>
<p>In practice, The Dig uses BOTH systems extensively—robots for power restoration and spatial puzzles, rods for door unlocking. Each exemplifies Pattern Learning through different cognitive mechanisms (abstract vs visual).</p>
<h3 id="contrast-with-observation-replay"><a class="header" href="#contrast-with-observation-replay">Contrast with Observation Replay:</a></h3>
<p>Both involve sequences but differ in FLEXIBILITY:</p>
<ul>
<li><strong>Robot Programming</strong>: Player composes custom sequences based on understood rules</li>
<li><strong>Observation Replay</strong>: Player reproduces EXACT watched sequence—no modification possible</li>
</ul>
<p>If player can think “I need to go LEFT 6 times instead of 4” rather than “I must repeat purple-purple-yellow-red exactly as shown,” its Robot Programming/Pattern Learning, not Observation Replay.</p>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../puzzles/multi-character-coordination.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../puzzles/escalating-combat-progression.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../puzzles/multi-character-coordination.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../puzzles/escalating-combat-progression.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
</nav>
</div>
<template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
<template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
<template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
<template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
<template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_line_numbers = true;
</script>
<script>
window.playground_copyable = true;
</script>
<script src="../ace-2a3cd908.js"></script>
<script src="../mode-rust-2c9d5c9a.js"></script>
<script src="../editor-16ca416c.js"></script>
<script src="../theme-dawn-4493f9c8.js"></script>
<script src="../theme-tomorrow_night-9dbe62a9.js"></script>
<script src="../elasticlunr-ef4e11c1.min.js"></script>
<script src="../mark-09e88c2c.min.js"></script>
<script src="../searcher-c2a407aa.js"></script>
<script src="../clipboard-1626706a.min.js"></script>
<script src="../highlight-abc7f01d.js"></script>
<script src="../book-a0b12cfe.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,491 @@
<!DOCTYPE HTML>
<html lang="en" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Surreal Logic Bridge - Puzzle Design Knowledge Base</title>
<!-- Custom HTML head -->
<meta name="description" content="A taxonomy of puzzle design patterns from classic point-and-click adventure games">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon-de23e50b.svg">
<link rel="shortcut icon" href="../favicon-8114d1fc.png">
<link rel="stylesheet" href="../css/variables-8adf115d.css">
<link rel="stylesheet" href="../css/general-2459343d.css">
<link rel="stylesheet" href="../css/chrome-ae938929.css">
<link rel="stylesheet" href="../css/print-9e4910d8.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../fonts/fonts-9644e21d.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css">
<link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css">
<link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
window.path_to_searchindex_js = "../searchindex-c567150f.js";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc-35c178c7.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="mdbook-body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
sidebar_toggle.checked = false;
}
if (sidebar === 'visible') {
sidebar_toggle.checked = true;
} else {
html.classList.remove('sidebar-visible');
}
</script>
<nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="mdbook-page-wrapper" class="page-wrapper">
<div class="page">
<div id="mdbook-menu-bar-hover-placeholder"></div>
<div id="mdbook-menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
</label>
<button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
</button>
<ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
</ul>
<button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
</button>
</div>
<h1 class="menu-title">Puzzle Design Knowledge Base</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb" title="Git repository" aria-label="Git repository">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb/edit/main/src/puzzles/surreal-logic-bridge.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
<span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
</a>
</div>
</div>
<div id="mdbook-search-wrapper" class="hidden">
<form id="mdbook-searchbar-outer" class="searchbar-outer">
<div class="search-wrapper">
<input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
<div class="spinner-wrapper">
<span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
</div>
</div>
</form>
<div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
<div id="mdbook-searchresults-header" class="searchresults-header"></div>
<ul id="mdbook-searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="mdbook-content" class="content">
<main>
<h1 id="surreal-logic-bridge"><a class="header" href="#surreal-logic-bridge">Surreal Logic Bridge</a></h1>
<p><strong>Information Architecture</strong>: Player encounters a blocking condition where standard causality fails (eggplant ≠ toupee logically). Success requires accepting and acting ON explicit comedic/absurdist equivalences stated by game world or implied through character dialogue. The “aha” moment recognizes the puzzle operates on cartoon logic, not physical simulation.</p>
<p><strong>Player Action Pattern</strong>:</p>
<ol>
<li>Attempt conventional solution → rejected with humorous failure</li>
<li>Game provides absurdist clue (dialogue, environmental joke, item description)</li>
<li>Player must mentally shift from realistic to surreal reasoning</li>
<li>Execute action that makes comedic but NOT literal sense</li>
<li>Success confirms the logic domain has shifted</li>
</ol>
<p><strong>Core Mechanic</strong>: The puzzle explicitly rejects real-world causality in favor of cartoon/comedy logic equivalences (X = Y because the joke says so, not physics). Player success depends on recognizing when to abandon realistic reasoning entirely.</p>
<hr>
<h2 id="variations"><a class="header" href="#variations">Variations</a></h2>
<div class="table-wrapper">
<table>
<thead>
<tr><th>Type</th><th>Clue Delivery</th><th>Equivalence Logic</th><th>Example</th></tr>
</thead>
<tbody>
<tr><td><strong>Visual-Pun Bridge</strong></td><td>Environmental visual gag implies equivalence</td><td>X looks like Y → treat as same</td><td>Vegetable that looks like persons head = that person</td></tr>
<tr><td><strong>Wordplay Literalization</strong></td><td>Double-meaning phrase taken literally</td><td>Pun becomes mechanic</td><td>“Toupee party” involves vegetable + toupee interaction</td></tr>
<tr><td><strong>Cartoon Physics Bridge</strong></td><td>Action violates physics but consistent with animation tropes</td><td>Impossible action works because cartoons say so</td><td>Pull beard → hidden door opens</td></tr>
<tr><td><strong>Surreal Item Combination</strong></td><td>Two unrelated items combine via comedic logic</td><td>A + B = C where relationship is joke-based</td><td>Eggplant on toupee transfers toupee to player</td></tr>
</tbody>
</table>
</div>
<hr>
<h2 id="game-examples"><a class="header" href="#game-examples">Game Examples</a></h2>
<h3 id="sam--max-hit-the-road-celebrity-vegetable-museum-toupee-acquisition-smhtr"><a class="header" href="#sam--max-hit-the-road-celebrity-vegetable-museum-toupee-acquisition-smhtr">Sam &amp; Max Hit the Road: Celebrity Vegetable Museum Toupee Acquisition (SMHTR)</a></h3>
<p><strong>Problem</strong>: Player needs a toupee from Conroy Bumpuss house at Bumpusville. The toupee sits prominently displayed above the fireplace but is guarded/alarm-protected. Direct interaction triggers alarm and guards appear. Standard stealth or distraction approaches fail or are unavailable.</p>
<p><small>Source: adventuregamers_walkthrough.html, embedded walkthrough lines 503-510 — “Use the Conroy Bumpus eggplant on the toupee. The alarm will sound and Lee-Harvey will throw you out of the house, but youll get the toupee.”</small></p>
<p><small>Source: abandonwaredos_solution.html, line 470 — “Use The Bumpus-Vegetable with the toupee -&gt; Toupee”</small></p>
<pre><code>SETUP PHASE (Multi-Location Preparation):
Location: Bumpusville House, Library Room
Action: Use golf retriever on bookshelf → Obtain cleaning robot manual
Note: This provides INFORMATION about alarms but NOT solution method
Exit scene when maintenance droid appears
Location: Celebrity Vegetable Museum
Action: Pick up eggplant from vegetable display box
Dialogue context: Eggplant visually resembles Conroy Bumpus's head shape
Exit to car, travel back to Bumpusville
CRITICAL PUZZLE EXECUTION:
Location: Bumpusville House, Bedroom/Fireplace Area (9.3)
Phase 1 - Setup Previous Actions Complete:
- Toupee visible above fireplace/display shelf
- Eggplant in inventory (from vegetable museum, acquired earlier)
- Guardian NPC (Lee-Harvey maintenance droid) has patrolling pattern established
Phase 2 - Surreal Logic Bridge Moment:
1. Examine toupee → No direct pickup option available
2. Standard "distract then steal" fails—alarm triggers regardless of guard position
3. Player must recognize EGGPLANT + TOUPEE interaction as solution space
4. Use Eggplant ON Toupee (not on alarm, not on guard—on the toupee itself)
Phase 3 - Resolution:
- Alarm TRIGGERS (expected/acceptable consequence)
- Lee-Harvey appears and throws player out of the house
- TOUPEE IS NOW IN INVENTORY despite eviction
- Puzzle complete through accepted comedic trade-off
LOGIC DOMAIN ANALYSIS:
REALISTIC LOGIC (FAILS):
- Eggplant has no physical property that affects toupees
- Alarm system should prevent theft regardless of item used
- Eviction = failure state in standard adventure game logic
CARTOON LOGIC (SUCCEEDS):
- Vegetable shaped like head + toupee on head = vegetable CLAIMS toupee
- When player uses eggplant-on-toupee: toupee "transfers" to eggplant
- Taking eggplant = taking toupee (comedic equivalence)
- Alarm/eviction is COMIC CONSEQUENCE not puzzle failure
- Narratively "worth it" because toupee was obtained
Why Eggplant Specifically?
- Visual joke: Bumpus's head resembles eggplant shape/color
- Cultural reference: Eggplants as phallic/comedic vegetable tropes
- Absurdist escalation: Normal items don't work; must use thematically-linked JOKE item
</code></pre>
<p><strong>Why Its Surreal Logic Bridge (Not Sensory Exploitation)</strong>:</p>
<ol>
<li><strong>Logic Domain Shift Required</strong>: Player actively rejects realistic causality—eggplant doesnt STEAL via distraction or perception manipulation; it COMEDICALLY TRANSFERS ownership through visual pun logic</li>
<li><strong>Clue Provided Through Absurdism</strong>: The vegetable museum establishes “celebrity vegetables” as joke concept (John Muir gourd, Bumpus eggplant). Player must accept this world internal comedy rules apply to puzzle-solving</li>
<li><strong>Trade-off is Narrative, Not Mechanic</strong>: In sensory exploitation, you avoid detection entirely. Here you ACCEPT failure consequence (eviction) because the comedic logic override provides desired outcome anyway</li>
</ol>
<p><strong>Distinction from Meta-Puzzle Construction</strong>: The eggplant and toupee arent steps in a production chain. They dont have sequential interdependence. Instead: EGGPLANT-AS-SURREAL-KEY directly unlocks TOUPEE ACCESS via cartoon physics equivalence, not through multi-step causal relationship.</p>
<hr>
<h3 id="sam--max-hit-the-road-tunnel-of-love-beard-pull-door-reveal-smhtr"><a class="header" href="#sam--max-hit-the-road-tunnel-of-love-beard-pull-door-reveal-smhtr">Sam &amp; Max Hit the Road: Tunnel of Love Beard Pull Door Reveal (SMHTR)</a></h3>
<p><strong>Problem</strong>: Inside the Carnivals Tunnel of Love attraction, a hidden door behind a medieval castle facade is invisible/unreachable via standard interaction. Player needs to access Doug the Mole Mans room to obtain crowbar and Twine Ball location info.</p>
<p><small>Source: adventuregamers_walkthrough.html, embedded walkthrough lines 205-213 — “Look at the man on the right. Sam will pull the beard, and a small door in the castle will open. Walk through the door.”</small></p>
<p><small>Source: abandonwaredos_solution.html, line 279 — “Use the Beard of the Man to the Right -&gt; Hidden door opens, Go through it”</small></p>
<pre><code>CARTOON PHYSICS EXECUTION CHAIN:
Location: Tunnel of Love Hidden Room (3.7)
Access Phase (prior to beard puzzle):
1. Ride swan boat into Tunnel of Love attraction
2. Use flashlight on back walls → reveals hidden fuse box
3. Use Max on fuse box → stops moving swan boat in place
4. Examine wall decorations → medieval castle facade with knight portrait visible
5. Portrait shows bearded man (medieval king/knight imagery)
The Surreal Logic Bridge:
CRITICAL MOMENT - Realistic logic would suggest:
- Examine portrait for hidden switches
- Look behind canvas/frame for mechanism
- Seek key or code elsewhere in room
- Attempt to open visible doors/windows
ACTUAL PUZZLE SOLUTION (Cartoon Physics):
6. Use PULL action on the knight's BEARD in the portrait
7. Beard removal triggers mechanical linkage
8. Hidden door physically slides open in castle wall
9. Enter newly-accessed passage → Doug's room
LOGIC ANALYSIS:
CARTOON TROPE UTILIZATION:
- Classic animation trope: Pull fake beard → reveal disguise/hidden person/mechanism
- Beards as removable props is established cartoon convention
- Portrait "come to life" interaction violates normal art-object rules
- Mechanical linkage between 2D portrait and 3D door exists without physical explanation
WORLD-BUILDING JUSTIFICATION:
- Tunnel of Love IS carnival ride → already operates on amusement-theme logic
- Hidden room contains Doug the Mole Man (another cartoon character)
- Entire sequence occurs within attraction designed for comedy/fantasy effects
CONSEQUENCE STRUCTURE:
No failure state—beard pull always works. The "puzzle" is recognizing that cartoon physics apply where realistic mechanics would fail.
</code></pre>
<p><strong>Why Its Surreal Logic Bridge</strong>:</p>
<ol>
<li><strong>Explicit Cartoon Trope Reference</strong>: Pulling fake beard to reveal hidden thing is animation convention, not physical world behavior</li>
<li><strong>No Clues or Trial-and-Error Needed</strong>: Beard pull should seem obvious TO cartoon literate players but IMPOSSIBLE to realistic logic</li>
<li><strong>Success Confirms World Rules</strong>: After this puzzle, player learns Sam &amp; Max operates on comedy physics consistently</li>
</ol>
<p><strong>Distinction from Environmental Storytelling Discovery</strong>: The hidden door isnt discovered through careful observation of environmental details (cracks in wall, odd texture). Its discovered through EXECUTING a cartoon action that has NO real-world precedent. The “clue” is genre literacy, not in-game detail.</p>
<hr>
<h2 id="related-types"><a class="header" href="#related-types">Related Types</a></h2>
<div class="table-wrapper">
<table>
<thead>
<tr><th>Type</th><th>Similarity</th><th>Distinction</th></tr>
</thead>
<tbody>
<tr><td><strong>Metaphor-to-Literal Translation</strong></td><td>Both require non-literal thinking</td><td>Metaphor = decode language; SurrLogic = accept cartoon physics override</td></tr>
<tr><td><strong>Sensory Exploitation</strong></td><td>Both bypass standard interaction</td><td>SE exploits perception weakness; SL abandons causality entirely</td></tr>
<tr><td><strong>Meta-Puzzle Construction</strong></td><td>Both involve multi-step solutions</td><td>MPC uses realistic chains; SL uses joke equivalences as steps</td></tr>
</tbody>
</table>
</div>
<hr>
<h2 id="design-considerations"><a class="header" href="#design-considerations">Design Considerations</a></h2>
<p><strong>When to Use</strong>: Puzzles where comedy tone is central to game identity; situations where realistic logic would create tedium or false dead-ends.</p>
<p><strong>Risks</strong>:</p>
<ul>
<li>Overuse makes world feel inconsistent (can player trust ANY logic?)</li>
<li>Solutions may seem random rather than clever if clues arent thematic enough</li>
<li>Frustration when players cant recognize genre convention reference</li>
</ul>
<p><strong>Best Practice</strong>: Anchor surreal equivalences in visual jokes or established character/world comedy. The eggplant works because vegetable museum established “celebrity vegetables” as running gag first.</p>
<h3 id="simon-the-sorcerer-watermelon-sousaphone-trade-simon"><a class="header" href="#simon-the-sorcerer-watermelon-sousaphone-trade-simon">Simon the Sorcerer: Watermelon-Sousaphone Trade (SIMON)</a></h3>
<p><strong>Problem</strong>: A musician is endlessly playing a sousaphone near the Troll Bridge, annoying Simon who needs to pass by. The musician refuses to stop—and crucially, offers the player the broken instrument after some event occurs. The solution involves an object interaction with no realistic causal link: throwing a giant melon directly into a brass instruments bell.</p>
<p><small>Source: walkthroughs/simon1/simon1.txt, lines 553-556 — “Go to the sousaphone player, near the troll bridge. Simon hates his music, so use the watermelon on the sousaphone. You receive a sousaphone for your troubles.”</small></p>
<p><small>Source: walkthroughs/simon1/simon1_2.txt, lines 115-116 — “Use the watermelon on the sousaphone to get the sousaphone”</small></p>
<pre><code>CARTOON PHYSICS ACTION REQUIRED:
REALISTIC EXPECTATION:
If player throws large fruit at a musical instrument during performance:
→ Instrument might be damaged (realistically expensive brass instrument)
→ Musician would be angry/upset
→ No guarantee of obtaining possession of the instrument
SIMON CARTOON LOGIC OUTCOME:
1- Player USES watermelon on sousaphone bell (direct contact action)
2- Watermelon physically enters and JAMS the brass tubing interior
3- Musician stops playing because instrument is now inoperable
4- COMIC EXCHANGE DIALOGUE occurs (not captured in walkthrough but implied):
- Musician: "You've ruined my sousaphone with this giant melon!"
- Simon: "Here's another one? Take it. My bad."
- Player receives the broken original as consolation replacement
WHY IT'S SURREAL LOGIC BRIDGE:
NO REAL-WORLD CAUSAL CHAIN EXISTS FOR THIS SOLUTION:
There is NO legitimate reason why throwing a watermelon at a sousaphone should result in player acquisition of that sousaphone. In realistic logic:
- Jamming instrument ≠ transferring ownership
- Damaging property usually creates conflict, not gift economy
The puzzle works PURELY through COMEDIC CAUSALITY:
"Watermelon clogs instrument" → "Musician defeated by absurdity" → "Player gets damaged goods as compensation"
COMIC JUSTIFICATION AS GAME LOGIC:
The humor derives from treating the exchange as completely legitimate within game world. No characters express shock at the fairness of "broken sousaphone for ruined watermelon"—it's accepted trade practice that the player receives the instrument simply by having destroyed its playability. This is cartoon logic where physical comedy automatically resolves to new item acquisition, regardless of realistic transaction rules.
FAILURE MODE ABSENCE AS MECHANICAL FEATURE:
Unlike other puzzles where wrong interactions lead to blocked progress or hostile NPC responses, surreal logic puzzles often have NO FAILURE STATE for their core action. Throwing the watermelon CANNOT "fail" in a traditional sense—it will ALWAYS jam and player will ALWAYS get the sousaphone because that's how cartoon equivalences work.
This differs from Sensory Exploitation (wrong item = failure to exploit) or Meta-Construction (wrong sequence = broken chain). The surreal action is BINARY AND GUARANTEED: perform the absurd interaction, receive the absurd reward.
THEMATIC ANCHOR IN SIMON WORLD:
Simon the Sorcerer establishes early that its world operates on comedic causality where ridiculous actions have legitimate game-state consequences. The watermelon-sousaphone trade justifies subsequent acceptance of other cartoon solutions like:
- Eating magic mushrooms to resize character
- Talking animals (owl, tree) providing quest help
- A talking pig (Rapunzel) eating through a chocolate door
Once player accepts "melon jams horn = get horn" as valid logic, the game's identity is confirmed: this world rewards absurdity as legitimate puzzle-solving methodology.
PREVIOUS CONTEXT NEEDED FOR FULL COMIC EFFECT:
The watermelon itself required a prior chain to obtain (beans → compost pile → melon growth). This means player HAS INVESTED in obtaining the absurd item before discovering its equally-absurd application. The comedy is AMPLIFIED because:
1- Player worked through realistic-ish chain for watermelon (water beans, plant on compost, harvest fruit)
2- Application context appears at first glance as hostile confrontation (musician blocking path)
3- Solution revealed to be GENTLE CARTOON PHYSICS rather than real conflict—no violence required, just throwing produce
The tonal shift from realistic item acquisition → cartoon application delivers the full comedic surprise that justifies the surreal equivalence.
</code></pre>
<p><strong>Why Its Surreal Logic Bridge</strong>: The watermelon-to-sousaphone exchange requires player to abandon realistic causation entirely and accept cartoon physics where “damage through absurdity = compensatory possession transfer.” No trial-and-error, no clues about “fruit jams instruments”—just execution of inherently ridiculous action that game world accepts as legitimate transaction.</p>
<hr>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../puzzles/multi-faction-diplomacy.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../docs/style-formatting.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../puzzles/multi-faction-diplomacy.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../docs/style-formatting.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
</nav>
</div>
<template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
<template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
<template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
<template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
<template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_line_numbers = true;
</script>
<script>
window.playground_copyable = true;
</script>
<script src="../ace-2a3cd908.js"></script>
<script src="../mode-rust-2c9d5c9a.js"></script>
<script src="../editor-16ca416c.js"></script>
<script src="../theme-dawn-4493f9c8.js"></script>
<script src="../theme-tomorrow_night-9dbe62a9.js"></script>
<script src="../elasticlunr-ef4e11c1.min.js"></script>
<script src="../mark-09e88c2c.min.js"></script>
<script src="../searcher-c2a407aa.js"></script>
<script src="../clipboard-1626706a.min.js"></script>
<script src="../highlight-abc7f01d.js"></script>
<script src="../book-a0b12cfe.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,680 @@
<!DOCTYPE HTML>
<html lang="en" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Timed Consequence - Puzzle Design Knowledge Base</title>
<!-- Custom HTML head -->
<meta name="description" content="A taxonomy of puzzle design patterns from classic point-and-click adventure games">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon-de23e50b.svg">
<link rel="shortcut icon" href="../favicon-8114d1fc.png">
<link rel="stylesheet" href="../css/variables-8adf115d.css">
<link rel="stylesheet" href="../css/general-2459343d.css">
<link rel="stylesheet" href="../css/chrome-ae938929.css">
<link rel="stylesheet" href="../css/print-9e4910d8.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../fonts/fonts-9644e21d.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css">
<link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css">
<link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
window.path_to_searchindex_js = "../searchindex-c567150f.js";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc-35c178c7.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="mdbook-body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
sidebar_toggle.checked = false;
}
if (sidebar === 'visible') {
sidebar_toggle.checked = true;
} else {
html.classList.remove('sidebar-visible');
}
</script>
<nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="mdbook-page-wrapper" class="page-wrapper">
<div class="page">
<div id="mdbook-menu-bar-hover-placeholder"></div>
<div id="mdbook-menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
</label>
<button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
</button>
<ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
</ul>
<button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
</button>
</div>
<h1 class="menu-title">Puzzle Design Knowledge Base</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb" title="Git repository" aria-label="Git repository">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb/edit/main/src/puzzles/timed-consequence.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
<span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
</a>
</div>
</div>
<div id="mdbook-search-wrapper" class="hidden">
<form id="mdbook-searchbar-outer" class="searchbar-outer">
<div class="search-wrapper">
<input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
<div class="spinner-wrapper">
<span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
</div>
</div>
</form>
<div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
<div id="mdbook-searchresults-header" class="searchresults-header"></div>
<ul id="mdbook-searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="mdbook-content" class="content">
<main>
<h1 id="timed-consequence-puzzle"><a class="header" href="#timed-consequence-puzzle">Timed Consequence Puzzle</a></h1>
<h2 id="mechanic-definition"><a class="header" href="#mechanic-definition">Mechanic Definition</a></h2>
<p>Urgency is conveyed through narrative consequence rather than mechanical time limits. The player learns that failure will result in permanent story change, but theres no visible countdown, progress bar, or explicit mechanical deadline. The pressure is diegetic—existing within the story world, not imposed by the game interface.</p>
<h2 id="information-architecture"><a class="header" href="#information-architecture">Information Architecture</a></h2>
<p><strong>Conveyance Method</strong>: Threat of consequence through dialogue/narrative</p>
<ul>
<li>NPCs explicitly state what will happen if player doesnt act</li>
<li>The consequence is always permanent and story-altering</li>
<li>No UI element tracks the deadline—the player must infer urgency from narrative</li>
</ul>
<p><strong>Player Action Pattern</strong>:</p>
<ol>
<li>Learn threat through dialogue/story event</li>
<li>Understand what the consequence is (permanent story change)</li>
<li>Determine what actions prevent the consequence</li>
<li>Execute actions with appropriate urgency</li>
<li>If successful, consequence avoided; if not, permanent change occurs</li>
</ol>
<p><strong>Core Mechanic</strong>: The puzzle is about managing urgency without visible metrics. The player must internalize the threat and act accordingly.</p>
<h2 id="design-rationale"><a class="header" href="#design-rationale">Design Rationale</a></h2>
<ul>
<li>Maintains immersion—no UI elements break narrative</li>
<li>Creates emotional stakes—the threat of permanent loss matters more than “game over”</li>
<li>Rewards urgency without stress—players feel pressure without countdown anxiety</li>
<li>Allows variable pacing—skilled/experienced players can take more time</li>
</ul>
<h2 id="why-its-effective"><a class="header" href="#why-its-effective">Why Its Effective</a></h2>
<p>The tension is narrative rather than mechanical. Failing doesnt mean “game over and restart”—it means the story changes permanently. This creates real stakes without punishing exploration.</p>
<h2 id="mechanic-variations"><a class="header" href="#mechanic-variations">Mechanic Variations</a></h2>
<div class="table-wrapper">
<table>
<thead>
<tr><th>Variation</th><th>Urgency Signal</th><th>Consequence Type</th></tr>
</thead>
<tbody>
<tr><td>Dialogue-stated</td><td>Character says “you have limited time”</td><td>Permanent transformation/death</td></tr>
<tr><td>Environmental</td><td>World visibly changes (emptying city, rising fire)</td><td>NPCs become unavailable</td></tr>
<tr><td>Progressive</td><td>Character relationships degrade over time</td><td>Missing story content</td></tr>
<tr><td>Celestial</td><td>Described event (alignment, eclipse) approaches</td><td>One-time opportunity lost</td></tr>
</tbody>
</table>
</div>
<h2 id="generic-example-structure"><a class="header" href="#generic-example-structure">Generic Example Structure</a></h2>
<p><strong>Information Flow</strong>:</p>
<ul>
<li>Character: “You have until [event] to [action]. After that, [consequence].”</li>
<li>Player understands consequence: Permanent story change, not restart</li>
<li>Player determines required actions: What needs to be done before event</li>
<li>Player acts with urgency but can still explore</li>
<li>If completed before event: Normal continuation</li>
<li>If not: [Consequence] occurs—game continues but fundamentally altered</li>
</ul>
<p><strong>The puzzle</strong>: Internalizing urgency without visible metrics and acting accordingly.</p>
<h2 id="adventure-game-implementation"><a class="header" href="#adventure-game-implementation">Adventure Game Implementation</a></h2>
<p>Limited actions become urgent:</p>
<ul>
<li>TALK to NPCs quickly—some become unavailable after consequence</li>
<li>WALK between locations—with purpose, not exploration</li>
<li>The puzzle isnt about speed, its about priority</li>
</ul>
<p>This puzzle tests: “Can I internalize narrative urgency and act with appropriate priority without mechanical feedback?”</p>
<hr>
<h2 id="game-examples"><a class="header" href="#game-examples">Game Examples</a></h2>
<h3 id="beneath-a-steel-sky-eyeball-guardian-timing-puzzle-bas"><a class="header" href="#beneath-a-steel-sky-eyeball-guardian-timing-puzzle-bas">Beneath a Steel Sky: Eyeball Guardian Timing Puzzle (BAS)</a></h3>
<p><strong>Problem</strong>: In LINC-Space security zones, Eyeball guardians patrol virtual corridors. Player must navigate past them to retrieve critical items (TUNING FORK, DIVINE WRATH program) while managing 15-20 second blind duration windows before reactivation.</p>
<p><small>Source: 5_steamah_walkthrough.html, lines 521-523 — “Blind the first EYEBALL. The idea is to get the TUNING FORK before the first EYEBALL reactivates in about 15-20 seconds… This eyeball reactivates only within a few seconds, so be quick!”</small></p>
<p><small>Source: 1_preterhuman_mitch_shaw_walkthrough.html, lines 305-315 — “Use the BLIND program on the EYE. Go NORTH again. Get the TUNING FORK if the EYE is still blinded (white)”</small></p>
<p><strong>Consequence Structure</strong>:</p>
<pre><code>THREAT: Being trapped/locked out by reactivated eyeballs
PERMANENTITY: Must disconnect and re-enter LINC-Space, losing progress
NO VISIBLE TIMER: Player must estimate from visual feedback (eyeball color: white=blinded vs colored=active)
PHASE 1 - BLIND FIRST EYEBALL (Timer ~15-20s):
→ Use BLIND command → eyeball turns WHITE (inactive state)
→ ⏱️ Invisible timer starts NOW
→ Move to second room before reactivation
PHASE 2 - BLIND SECOND EYEBALL (Timer "few seconds"):
→ Second eyeball reactivates much faster ("within a few seconds")
→ Use BLIND immediately → white state achieved
→ QUICKLY enter thick plasma exit beside it
PHASE 3 - RACE TO TUNING FORK:
→ Exit north (STOP before CRUSADER room—don't engage yet)
→ Go right into side corridor
→ GRAB TUNING FORK from floor
→ ⏱️ If first eyeball reactivates during this phase = trapped
PHASE 4 - SAFE RESET POINT:
→ Return to hub with WELL in center
→ Use PLAYBACK command on WELL (resets eyeball states)
→ DISCONNECT safely to main terminal
FAILURE STATE: If timer expires before Phase 4 complete
→ Eyeballs reactivate (return to colored state)
→ Player locked into section until disconnect/reconnect
---
### Broken Sword: Shadow of the Templars - Khan Cliff Escape (Chapter 4)
**Problem**: Final confrontation with Khan creates narrative urgency—George must execute precise escape sequence at cliff edge. No visible timer but death occurs if action order deviates from required pattern (buzzer then immediate jump).
&lt;small&gt;Source: broken-sword-1/4_agh_peter_christiansen_walkthrough.html, lines 420-427&lt;/small&gt;
&lt;small&gt;Source: broken-sword-1/1_walkthroughking_broken_sword.html, lines 178-179&lt;/small&gt;
**Consequence Structure**:
</code></pre>
<p>NARRATIVE URGENCY (No Mechanical Timer):
→ Scene establishes Khan confrontation as life-or-death scenario
→ No countdown visible, no progress bar tracking urgency
→ Threat conveyed entirely through NARRATIVE context: failed actions = character death</p>
<p>ESCAPE SEQUENCE REQUIREMENT:
Step 1 → Approach cliff edge with Khan pursuing behind
- Cutscene or dialogue establishes critical moment</p>
<p>Step 2 → Press buzzer at exact location (bridge/escape mechanism trigger)
- Activates bridge withdrawal or rope lowering mechanism</p>
<p>Step 3 → JUMP OFF CLIFF Immediately after buzzer activation
- Cannot pause, explore, or examine environment
- Death state triggers if delay exceeds narrow window</p>
<p>FAILURE STATE: Sequence deviation results in game over
→ Jump before pressing buzzer = fall to death (no rescue mechanism active)
→ Press buzzer then delay too long = Khan catches player / bridge collapses / narrative consequence triggers restart</p>
<pre><code>
**Why It's Timed Consequence**: Urgency exists entirely through NARRATIVE stakes (Khan pursuing, life-or-death scene establishment), not mechanical timer. Player internalizes threat from story context—cutscene language, dialogue, positioning all indicate "act now or die." No HUD element tracks the deadline; urgency is DIEGETIC within story world. The puzzle tests ability to prioritize correctly: player must recognize that immediate action required rather than exploration/interaction. This differs from Observation Replay's precise timing window (where exact button press moment matters for success) because TC focuses on ACTION SEQUENCE ORDER with narrative threat, not frame-perfect execution skill.
---
### Legend of Kyrandia: Malcolm Knife Throw-Back (LK1)
**Problem**: At the entrance to Serpent's Grotto, the antagonist Malcolm appears and throws a knife at Brandon. The player must click to throw the knife back BEFORE it hits Brandon. This is a critical first-time-only encounter with immediate permanent consequence—failure results in death and game over. Any other action (saving, running, dialogue) triggers Malcolm throwing another knife that cannot be missed.
&lt;small&gt;Source: classicgamesparadise_walkthrough.html, lines 107-108 — "When you try to enter, Malcolm will show up to taunt Brandon. When he throws the knife at Brandon, quickly click on it while it is stuck in the tree to throw it back. If you try to run, Malcolm will throw another and won't miss this time."&lt;/small&gt;
&lt;small&gt;Source: bonny_ploeg_walkthrough.html, lines 45-46 — "Enter the grotto: Malcolm will come out. As soon as you can, throw the knife back at him: anything else, even saving the game, is lethal." + line 88 — "Getting turned to stone (or in the floppy version: knifed) by Malcolm at the serpent grotto" listed as death scenario&lt;/small&gt;
</code></pre>
<p>NARRATIVE URGENCY WITHOUT MECHANICAL TIMER:</p>
<p>THREAT ESTABLISHMENT:
→ Player attempts to enter Serpents Grotto after sealing ice with flute
→ Cutscene/dialogue sequence establishes confrontation
→ MALCOLM THROWS KNIFE at Brandon (animated projectile)
→ CRITICAL MOMENT: Knife is STUCK IN TREE near Brandon (not yet lethal)</p>
<p>TIME WINDOW:</p>
<ul>
<li>No visible countdown or progress bar</li>
<li>Deadline implied: “click knife before it completes trajectory”</li>
<li>Threat conveyed through cutscene tension, not UI element</li>
</ul>
<p>REQUIRED ACTION SEQUENCE:</p>
<p>Step 1 → Malcolm throws knife; animation plays showing projectile
- Player cannot interact during throw animation</p>
<p>Step 2 → Knife lands STUCK IN TREE (briefly accessible state)
- CRITICAL: Must click on stuck knife IMMEDIATELY
- Pre-typing command wont work—must wait for exact moment</p>
<p>Step 3 → Click/USE on knife while its stuck (before game processes impact)
- Brandon catches and throws knife back at Malcolm
- Cutscene: Malcolm stunned, flees, seals grotto entrance with ice</p>
<p>FAILURE STATES:</p>
<p>A. RUN AWAY: Trigger different animation—Malcolm throws second knife
→ Second projectile cannot be caught/deflected
→ Direct hit = instant death/game over</p>
<p>B. SAVE GAME during initial throw window:
→ Saving triggers “too slow” failure state<br>→ Even the act of saving counts as “wrong action”
→ Malcolms dialogue changes; second knife throws</p>
<p>C. WRONG DIALOGUE/INTERACTION:
→ Any command other than immediate knife-click fails
→ Same outcome: lethal follow-up attack</p>
<p>WHY ITS TIMED CONSEQUENCE (Not Observation Replay):</p>
<p>NARRATIVE URGENCY VS MECHANICAL PRECISION:
This puzzle establishes urgency through STORY CONTEXT—Malcolm as antagonist, confrontation scene, life-or-death stakes—rather than requiring frame-perfect input skill. The “timing window” exists not because animation frames demand exact timing, but because the NARRATIVE establishes Malcolms attack as IMMEDIATE THREAT that demands immediate response.</p>
<p>PERMANENT CONSEQUENCE:
Failure = DEATH (permanent game state ending requiring restart/loading). Not just “puzzle failed, try different approach.” The consequence is binary: survive or permanent death. This matches TCs emphasis on story-altering outcomes rather than mechanical retry loops.</p>
<p>NO MEMORIZATION REQUIRED:
Unlike Observation Replay where player must memorize sequence from one viewing then reproduce it later, here player acts DURING the event, not after witnessing it. No prior observation, no delayed reproduction—pure immediate response to narrative threat.</p>
<p>“ANYTHING ELSE IS LETHAL” MECHANIC:
The walkthrough explicitly states “even saving the game is lethal”—this emphasizes how NARRATIVE URGENCY overrides normal game systems. The save system (normally safe action) becomes DEATH TRIGGER because story context demands one specific immediate response. This is TCs hallmark: urgency that exists beyond UI/menus, embedded in diegetic world rules.</p>
<pre><code>
---
### Legend of Kyrandia: Fireberry Maze Navigation (LK1)
**Problem**: Inside Shadowrealm/Serpent's Grotto, the player navigates a dark maze with limited visibility. Fireberries provide illumination but burn out after exactly 3 screen transitions when carried. If caught in darkness without light source, shadow wraiths devour Brandon (game over). The puzzle requires careful resource management across an unmemorable labyrinth with death as consequence for miscalculation.
&lt;small&gt;Source: classicgamesparadise_walkthrough.html, lines 173-175 — "Be careful though; you can only safely move between rooms 3 times before the Fireberries will burn out. If you are caught in a dark room without any light, the shadow wraiths will no longer be repelled by the light and will devour you. If you drop a fireberry on the ground, it won't burn out and will make that room safe to go back to if you run out of berries."&lt;/small&gt;
&lt;small&gt;Source: bonny_ploeg_walkthrough.html, lines 49-53 — "The caves are dark. If you are in a dark spot when you have no firebrities on you, you'll die... Fireberries will burn infinitely on the bush or on the floor, but you can only carry them for 3 screens."&lt;/small&gt;
</code></pre>
<p>NARRATIVE URGENCY THROUGH RESOURCE DECAY:</p>
<p>THREAT ESTABLISHMENT:
→ Shadowrealm is naturally dark (perpetual shadow/dungeon aesthetic)
→ Fireberries are required to repel shadow wraiths (established through early death or hint)
→ CRITICAL MECHANIC: Berries burn out after 3 screen transitions when HELD IN INVENTORY</p>
<p>DEATH CONSEQUENCE:</p>
<ul>
<li>No timer visible, no progress bar tracking berry burn-rate</li>
<li>Player must internally count “1 screen… 2 screens… 3 screens remaining”</li>
<li>At zero burns: darkness activates → wraiths appear → instant death</li>
</ul>
<p>STRATEGY OPTIONS (Both Require Planning):</p>
<p>OPTION A - Permanent Light Beacons:
Step 1 → Pick up 4 fireberries at each bush
Step 2 → Travel to new dark room, DROP ONE BERRY ON FLOOR before moving on
- Berry placed on floor burns INDEFINITELY (doesnt decay)
- Room becomes permanently safe for re-entry
Step 3 → Continue with remaining berries; each room gets beacon
Step 4 → If run out of portable berries → backtrack to any lit room (safe zone)</p>
<p>OPTION B - Map-Assisted Save/Reload at Bushes:
Step 1 → Create external paper map, number all fireberry bush locations
Step 2 → Establish secondary save file at EACH bush position
- Label saves with location identifier from map
- Primary save = progression; secondary save = bush checkpoint
Step 3 → When carrying berries into unknown section, use primary save only
Step 4 → If berries expire before finding next bush: RELOAD to nearest bush save</p>
<p>CRITICAL STRATEGY ELEMENTS:</p>
<ol>
<li>
<p>BERRY ECONOMY MANAGEMENT:</p>
<ul>
<li>Carrying = rapid decay (3 screens max)</li>
<li>Dropped on floor = infinite burn time</li>
<li>Each bush = finite resource pool, not renewable indefinitely</li>
</ul>
</li>
<li>
<p>NAVIGATION WITHOUT MEMORY:
All rooms look identical (dark cave aesthetic, no unique visual markers). External mapping required because internal landmarks dont exist.</p>
</li>
<li>
<p>DEATH CONSEQUENCE STRUCTURE:
Darkness death is PERMANENT (game over), not “lose current berries and respawn.” Player must manage risk through strategic berry placement or save-file discipline.</p>
</li>
</ol>
<p>WHY ITS TIMED CONSEQUENCE:</p>
<p>RESOURCE-DECAY URGENCY VS MECHANICAL TIMER:
No visible countdown exists. The “3 screens” burn rate is revealed through failed attempts or walkthrough knowledge. The urgency comes from INTERNAL COUNTING—player mentally tracks remaining screens before berry expiration. This creates NARRATIVE TENSION (“how far can I go before darkness claims me?”) without HUD timer.</p>
<p>STORY-EMBEDDED MECHANIC:
The fireberry mechanic is THEMATICO—shadow realms require light; carried light burns through use; abandoned light becomes permanent sanctuary. These rules feel diegetic, not arbitrary “3 moves before reset” puzzle structure.</p>
<p>PERMANENT CONSEQUENCE FOR MISMANAGEMENT:
Death in darkness = complete game over, requiring reload to much earlier save point. This is TCs hallmark stakes—consequence is NARRATIVE FAILURE (Brandon consumed by shadows), not JUST mechanical setback (lose inventory and retry).</p>
<p>DISTINCTION FROM PATTERNS/LOGISTICS PUZZLES:
While inventory management involved (Cross-Realm Logistics element), the CORE PUZZLE MECHANIC is URGENCY MANAGEMENT. Not “where are items located” but “how long until items cease functioning.” The temporal decay creates narrative urgency absent from pure logistics puzzles.</p>
<pre><code>
---
### SpaceQuest III: Ortega Force Field Escape (SQ3)
**Problem**: Roger reaches Ortega, a planet protected by an impenetrable force field beam maintained by a shield generator. After discovering the generator's location via telescope and acquiring items needed for escape, Roger must destroy the generator to disable the shielding—triggering an invisible countdown before the entire planet explodes. The player receives warning that time is limited but no visible timer displays remaining duration.
&lt;small&gt;Source: gamefaqs-tricrokra-archive.html, lines 485-491 — "Once you continued a timer will start to run. A timer you don't see, but one that is pretty narrow."&lt;/small&gt;
&lt;small&gt;Source: the-spoiler-walkthrough.html, lines 126-128 — "'Throw detonator'. 'Climb down ladder'. The planet's going to explode!."&lt;/small&gt;
</code></pre>
<p>THREAT STRUCTURE:</p>
<p>URGENCY SIGNAL (Dialogue-based):
Walkthrough explicitly states “Once you continued here a timer will start to run. A timer you dont see, but one that is pretty narrow.”
The threat consequence: “If you exceed the time you are dead.” [game over]</p>
<p>NO UI TIMER EXISTS:
Player must infer remaining time from narrative cue alone (“planets going to explode!”) and internal urgency management</p>
<p>PHASE 1 - PREPARATION (Before Timer Activates):</p>
<p>STEP A - Wait for Scouting Party to Depart
Prerequisite: Land on Ortega, wear thermoweave underwear (heat protection)
Location: South → West → South (behind bridge structure)
Action: Wait until armed men leave the area before proceeding
Citation: the-spoiler-walkthrough.html, line 123 — “Walk behind the boulder and wait for the men to leave”</p>
<p>STEP B - Discover Planet Location via Telescope
Location: Scout observation post (same location as above)
Action: LOOK in telescope → discover Pestulon coordinates
Outcome: New destination added to ship navigation system
Citation: gamefaqs-tricrokra-archive.html, line 489 — “Use the telescope, and youll discover Pestulon”</p>
<p>STEP C - Acquire Escape Tools
Items collected at scout post (before heading north):</p>
<ul>
<li>THERMAL DETONATOR (from box) → used to destroy generator</li>
<li>METAL POLE → required to pole vault across chasm after explosion</li>
</ul>
<p>Citation: gamefaqs-tricrokra-archive.html, lines 490-491 — “= Get a detonator from the box = Get the pole”</p>
<p>PHASE 2 - TIMER ACTIVATION SEQUENCE:</p>
<p>STEP A - Navigate to Shield Generator
Path: Exit south post → East × 2 → North (outside generator) → North again → Downstairs → North → East
Citation: gamefaqs-tricrokra-archive.html, lines 498-503 — Path sequence to reach generator interior</p>
<p>STEP B - Climb Final Access Point<br>Command: CLIMB ladder at north end of generator room</p>
<p>STEP C - DESTROY GENERATOR (TIMER BEGINS)
Action: THROW detonator into large hole in floor
Consequence Triggered: Force field deactivates; planet enters destruction sequence
Invisible Countdown: Walkthrough notes “pretty narrow” time limit</p>
<p>Citation: gamefaqs-tricrokra-archive.html, line 508 — “Throw the Detonator into the big hole”</p>
<p>PHASE 3 - ESCAPE SEQUENCE (Race Against Invisible Timer):</p>
<p>STEP A - Descend Generator Building<br>Command: CLIMB DOWN ladder immediately after detonation
Citation: gamefaqs-tricrokra-archive.html, line 509 — “= Climb down”</p>
<p>STEP B - Navigate Back to Ship (Fixed Exit Path)
Navigation Sequence (MUST NOT DEVIATE):</p>
<ul>
<li>West → South → South → West ×2 → North</li>
</ul>
<p>Critical Step at Chasm:
Position: After second west direction, before final east
Action: USE POLE to vault across ground crack formed by explosion
Citation: gamefaqs-tricrokra-archive.html, line 468 — “USE POLE (youll use your pole to jump over the crack)”</p>
<p>STEP C - Reach Ship and Launch
Final Moves: EAST → NORTH (center of screen) → Enter ship based on position
Commands in Ship: SIT → LOOK COMPUTER → Select “1” (Engines) → “3” (Takeoff)</p>
<p>Citation: gamefaqs-tricrokra-archive.html, lines 520-527 — Final escape sequence</p>
<p>CONSEQUENCE STRUCTURE:</p>
<p>IF TIMER EXPIRES BEFORE ESCAPE:
Consequence: Game over (death by planetary explosion)
No UI warning—player must infer remaining time from narrative urgency alone</p>
<p>WHY ITS TIMED CONSEQUENCE PUZZLE:</p>
<p>NARRATIVE URGENCY WITHOUT MECHANICAL TIMER:
Walkthrough explicitly states “A timer you dont see”—this is TCs defining trait. The player knows time matters but cannot quantify remaining duration without external knowledge (walkthrough) or careful observation of explosion animations (which may not be visible before game ends).</p>
<p>NO SAVE/LOAD GAMEPLAY LOOPS ALLOWED:
While player can theoretically save/reload, the design intends single-attempt execution after detonation. Theres no “try again” safety net—player must prepare all items beforehand and know/remember escape route.</p>
<p>CONSEQUENCE IS PERMANENT STORY CHANGE (Or Death):
If player fails to escape in time, consequence is Roger Wilco dying—story ends. This is TCs hallmark: stakes are narrative (character death) rather than mechanical (lose points/item).</p>
<p>KEY DISTINCTION FROM PREDATOR CHASE ESCAPE:
Predator Chase has immediate pursuit mechanic with no timer UI but ACTIVE PURSUER. Player is being hunted by Arnold in real-time. Ortega escape has no visible pursuer—only environmental destruction sequence triggered by players own action, requiring self-managed urgency without external threat presence.</p>
<p>TIMED URGENCY VS FIXED ROUTE:
The puzzles difficulty emerges from knowing/remembering a specific multi-step path (West → South × 2 → West × 2 → North → East) under time pressure. Unlike standard navigation puzzles, deviation or hesitation risks explosion death. This combines memory management with urgency—TCs narrative tension applied to rote escape sequence.</p>
<pre><code>
---
### Quest for Glory IV: Gypsy Rescue Window (QFG4)
**Setup**: On days 4-5 of gameplay, the Burgomeister at the town office will announce that gypsies have been captured and accused of being werewolves, with Igor "missing." The player must investigate and rescue them before a specific deadline or the gypsies are executed/lost permanently.
&lt;small&gt;Source: qfg4-gamefaqs-anonymous.txt lines 831-856 — "Day 4-5: Farmers found gypsy at Burgomeister's office... Gypsy accused of being werewolf, Igor 'missing'"&lt;/small&gt;
</code></pre>
<p>URGENCY SIGNAL - NARRATIVE THREAT:
Step 1 → Visit Burgomeisters office on Day 4+ (in-game calendar tracked by hotel nights)
Event triggers automatically if player has progressed足够 enough in valley exploration</p>
<p>Dialogue Conveyance:Burgomeister explains gypsies captured for “werewolf activities” near village farms.
Igor the hunchback is “missing” and suspected of involvement.
THREAT IMPLICIT: If gypsies are proven guilty or Igor not found, they face execution/expulsion from valley.</p>
<p>NO MECHANICAL TIMER UI:Player has no countdown or explicit deadline displayed.
Urgency must be inferred from narrative context: legal situations typically resolve quickly in medieval-settings.</p>
<p>CONSEQUENCE OF INACTION:If player delays too long (approx. days 6-8 depending on playthrough):Gypsies may be executed, released prematurely without aid,
OR the investigation opportunity closes entirely.
Result: Cannot complete Gypsy-related quests including Fortune Teller readings OR Rusalka quest for Paladins</p>
<p>REQUIRED ACTION SEQUENCE (Rescue Path):Step 1 → Search Igors likely locations (NOT town, NOT Dr. Craniums)
Clue: Igor works at cemetery during day</p>
<p>Step 2 → Visit Cemetery after gypsy accusation event
Look for tipped tombstone or unusual markings near graves</p>
<p>Step 3 → Investigate moaning sound coming from UNDER a disturbed grave
Tombstone has been pushed over, revealing hidden cavity underneath</p>
<p>Step 4 → Class-specific tombstone lifting:
Fighter: Use strength to push/force tombstone aside directly
Thief: Use rope tied to nearby tree branch as pulley system to lift stone<br>Wizard: Cast Fetch spell on tombstone to magically remove it
Result: Igor freed from underground hiding/detention spot</p>
<p>Step 5 → Automatic consequence: Gypsies are released once Igor is found
Reasoning: Without Igors alleged leadership, accusation collapses</p>
<p>REWARD FOR SUCCESSFUL RESCUE:Gypsy camp becomes fully accessible for future interactions.
Magda the Fortune Teller available for tarot readings (up to 4, providing Undead Amulet/Aura Spell).
Critical information about Dark Ones name “AVOOZL” eventually revealed through readings.</p>
<p>PALADIN-SPECIFIC EXTENSION:Rescued gypsies provide quest hints for Rusalka lake spirit release.
Magda can advise on “sacrifice needed” and guidance toward true redemption mechanics.</p>
<p>WHY ITS TIMED CONSEQUENCE PUZZLE:NARRATIVE URGENCY WITHOUT MECHANICAL DEADLINE:
Player learns THREAT exists (gypsies face consequences) but NO COUNTDOWN DISPLAYS.
Game continues normally if player ignores it—consequence only manifests as LOST OPPORTUNITY.</p>
<p>PERMANENT STORY CHANGE:Puzzle opportunity closes after certain point (exact timing undocumented, varies by playthrough).
Unlike “game over” puzzles, the game CONTINUES but specific content becomes UNACCESSIBLE.
This is hallmark Timed Consequence: narrative urgency, player-managed priority, permanent consequence of delay.</p>
<p>COMPARISON TO SPACEQUEST 4 EXPLOSION:SQ4 = mechanical death if fail (hard reset)
QFG4 = missed questline content (soft lockout, game continues)
Both share core TC trait: no visible timer, must infer urgency from narrative context.</p>
<pre><code>
&lt;small&gt;Cited from: qfg4-gamefaqs-anonymous.txt:831-856, qfg4-gamefaqs-sac.txt:2430-2447&lt;/small&gt;
---
### Quest for Glory IV: Will-o'-Wisp Nighttime Capture (QFG4)
**Setup**: To reveal the Sense Ritual location at the Squid Stone, player must capture Will-o'-Wisps. Wisps only appear at NIGHT and die if not released before DAYBREAK. This creates a strict time-window puzzle combining environmental timing with consequence management.
&lt;small&gt;Source: qfg4-gamefaqs-sac.txt lines 1946-1952 — "Make sure to let them out before daybreak or else they'll expire"&lt;/small&gt;
</code></pre>
<p>ENVIRONMENTAL URGENCY SIGNAL - Celestial Cycle:
Step 1 → Travel to swamp edge area (west forest, near Dark One Cave entrance)
CRITICAL CONSTRAINT: Must visit during NIGHT game time only</p>
<p>NIGHTTIME DETECTION:Will-o-Wisps visible as floating lights above dark water surface.
During daytime: Wisps disappear entirely; cannot be captured or interacted with.</p>
<p>CAPTURE MECHANIC:Step 2 → Ensure candy in inventory (purchased from General Store, town)
Item prerequisite for luring wisps</p>
<p>Step 3 → Use CANDY on ground/water near visible wisp
Result: Wisps approach slowly, attracted by sweet smell</p>
<p>Step 4 → Wait ~3-5 seconds until wisp enters capture range</p>
<p>Step 5 → Use EMPTY FLASK on approaching wisp<br>Result: Wisp captured inside flask, added to inventory item “Flask of Will O Wisps”</p>
<p>TIMED CONSEQUENCE WINDOW - Daybreak Deadline:
URGENCY: Captured wisps are ALIVE organisms inside flask.</p>
<pre><code> THREAT: If daybreak occurs before releasing wisps back into environment,
they DIE inside the flask permanently.
NO EXPLICIT WARNING: Game does not display countdown or "wisps dying soon" message.
Player must track time by observing sun/moon position OR checking clock UI.
</code></pre>
<p>RELEASE AND APPLICATION (Daytime):Step 6 → Travel to Squid Stone ritual marker location</p>
<p>Step 7 → Use Flask of Will O Wisps on ritual stone BEFORE daybreak if captured at night end
Result: Wisp light reveals hidden Mad Monks tomb entrance + Bone Ritual scroll location</p>
<p>CONSEQUENCE STRUCTURE:If wisps die from daybreak before release:Flask becomes empty/useless.
Must restart entire capture process (wait for next night cycle, repeat luring).
No permanent game lockout, but creates REPLAY PENALTY and delays progression.</p>
<p>WHY ITS TIMED CONSEQUENCE PUZZLE:ENVIRONMENTAL URGENCY WITHOUT MECHANICAL TENSION:
Player knows “before daybreak” is deadline but no explicit countdown.
Natural celestial cycle serves as timer (day/night transition).</p>
<p>SOFT CONSEQUENCE (Not Death/Lockout):Wisps dying = inconvenience and delay, not permanent story change or game over.
This is softer Timed Consequence compared to Gypsy rescue (which can permanently close questlines).</p>
<p>HYBRID WITH OBSERVATION REPLAY:OR component:Lure pattern must be observed and reproduced correctly (behavior learning).
TC component: Capture-to-release window creates urgency layer on top of OR mechanics.</p>
<p>The Will-o-Wisp puzzle demonstrates TC can apply to ITEM PRESERVATION not just character survival—
maintaining captured organisms viability is the timed challenge, with mechanical consequence (item uselessness) if deadline missed.</p>
<pre><code>
&lt;small&gt;Cited from: qfg4-gamefaqs-anonymous.txt:1075-1080, qfg4-gamefaqs-sac.txt:1946-1952&lt;/small&gt;
</code></pre>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../puzzles/repair-chain-construction.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../puzzles/cross-temporal-causality.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../puzzles/repair-chain-construction.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../puzzles/cross-temporal-causality.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
</nav>
</div>
<template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
<template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
<template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
<template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
<template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_line_numbers = true;
</script>
<script>
window.playground_copyable = true;
</script>
<script src="../ace-2a3cd908.js"></script>
<script src="../mode-rust-2c9d5c9a.js"></script>
<script src="../editor-16ca416c.js"></script>
<script src="../theme-dawn-4493f9c8.js"></script>
<script src="../theme-tomorrow_night-9dbe62a9.js"></script>
<script src="../elasticlunr-ef4e11c1.min.js"></script>
<script src="../mark-09e88c2c.min.js"></script>
<script src="../searcher-c2a407aa.js"></script>
<script src="../clipboard-1626706a.min.js"></script>
<script src="../highlight-abc7f01d.js"></script>
<script src="../book-a0b12cfe.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

View File

@@ -0,0 +1,380 @@
<!DOCTYPE HTML>
<html lang="en" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Truth Revelation Mechanic - Puzzle Design Knowledge Base</title>
<!-- Custom HTML head -->
<meta name="description" content="A taxonomy of puzzle design patterns from classic point-and-click adventure games">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon-de23e50b.svg">
<link rel="shortcut icon" href="../favicon-8114d1fc.png">
<link rel="stylesheet" href="../css/variables-8adf115d.css">
<link rel="stylesheet" href="../css/general-2459343d.css">
<link rel="stylesheet" href="../css/chrome-ae938929.css">
<link rel="stylesheet" href="../css/print-9e4910d8.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../fonts/fonts-9644e21d.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="mdbook-highlight-css" href="../highlight-493f70e1.css">
<link rel="stylesheet" id="mdbook-tomorrow-night-css" href="../tomorrow-night-4c0ae647.css">
<link rel="stylesheet" id="mdbook-ayu-highlight-css" href="../ayu-highlight-3fdfc3ac.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
window.path_to_searchindex_js = "../searchindex-c567150f.js";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc-35c178c7.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="mdbook-body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="mdbook-sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("mdbook-sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
sidebar_toggle.checked = false;
}
if (sidebar === 'visible') {
sidebar_toggle.checked = true;
} else {
html.classList.remove('sidebar-visible');
}
</script>
<nav id="mdbook-sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="mdbook-sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="mdbook-page-wrapper" class="page-wrapper">
<div class="page">
<div id="mdbook-menu-bar-hover-placeholder"></div>
<div id="mdbook-menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="mdbook-sidebar-toggle" class="icon-button" for="mdbook-sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="mdbook-sidebar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z"/></svg></span>
</label>
<button id="mdbook-theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="mdbook-theme-list">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M371.3 367.1c27.3-3.9 51.9-19.4 67.2-42.9L600.2 74.1c12.6-19.5 9.4-45.3-7.6-61.2S549.7-4.4 531.1 9.6L294.4 187.2c-24 18-38.2 46.1-38.4 76.1L371.3 367.1zm-19.6 25.4l-116-104.4C175.9 290.3 128 339.6 128 400c0 3.9 .2 7.8 .6 11.6c1.8 17.5-10.2 36.4-27.8 36.4H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H240c61.9 0 112-50.1 112-112c0-2.5-.1-5-.2-7.5z"/></svg></span>
</button>
<ul id="mdbook-theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="mdbook-theme-ayu">Ayu</button></li>
</ul>
<button id="mdbook-search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="mdbook-searchbar">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352c79.5 0 144-64.5 144-144s-64.5-144-144-144S64 128.5 64 208s64.5 144 144 144z"/></svg></span>
</button>
</div>
<h1 class="menu-title">Puzzle Design Knowledge Base</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<span class=fa-svg id="print-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb" title="Git repository" aria-label="Git repository">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg></span>
</a>
<a href="https://github.com/noti/puzzle-design-kb/edit/main/src/puzzles/truth-revelation.md" title="Suggest an edit" aria-label="Suggest an edit" rel="edit">
<span class=fa-svg id="git-edit-button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z"/></svg></span>
</a>
</div>
</div>
<div id="mdbook-search-wrapper" class="hidden">
<form id="mdbook-searchbar-outer" class="searchbar-outer">
<div class="search-wrapper">
<input type="search" id="mdbook-searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="mdbook-searchresults-outer" aria-describedby="searchresults-header">
<div class="spinner-wrapper">
<span class=fa-svg id="fa-spin"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M304 48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zm0 416c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM48 304c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm464-48c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48zM142.9 437c18.7-18.7 18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zm0-294.2c18.7-18.7 18.7-49.1 0-67.9S93.7 56.2 75 75s-18.7 49.1 0 67.9s49.1 18.7 67.9 0zM369.1 437c18.7 18.7 49.1 18.7 67.9 0s18.7-49.1 0-67.9s-49.1-18.7-67.9 0s-18.7 49.1 0 67.9z"/></svg></span>
</div>
</div>
</form>
<div id="mdbook-searchresults-outer" class="searchresults-outer hidden">
<div id="mdbook-searchresults-header" class="searchresults-header"></div>
<ul id="mdbook-searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('mdbook-sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('mdbook-sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#mdbook-sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="mdbook-content" class="content">
<main>
<h1 id="truth-revelation-mechanic"><a class="header" href="#truth-revelation-mechanic">Truth Revelation Mechanic</a></h1>
<h2 id="mechanic-definition"><a class="header" href="#mechanic-definition">Mechanic Definition</a></h2>
<p>An item or action reveals hidden truth—disguising whats false, exposing hidden identity, or showing what lies beneath the surface. The solution is not combat or force but <em>seeing through</em> deception. The truth itself is the key that unlocks the puzzle.</p>
<p>This differs from “evidence collection” puzzles: the item doesnt just <em>prove</em> something, it actively <em>shows</em> something.</p>
<h2 id="information-architecture"><a class="header" href="#information-architecture">Information Architecture</a></h2>
<p><strong>Conveyance Method</strong>: Item-based revelation</p>
<ul>
<li>Player obtains a “revealing” item through gameplay</li>
<li>Using the item on a target reveals hidden information</li>
<li>The reveal is diegetic—within the game world, not a UI popup</li>
</ul>
<p><strong>Player Action Pattern</strong>:</p>
<ol>
<li>Obtain revelation item through normal gameplay</li>
<li>Identify suspect/obstacle that might be disguised</li>
<li>Use revealing item on target</li>
<li>Information revealed → player knows truth</li>
<li>Use truth to solve puzzle (unlock path, prove guilt, etc.)</li>
</ol>
<p><strong>Core Mechanic</strong>: The puzzle isnt about finding evidence—its about revealing whats hidden. The item is a probe, not a weapon.</p>
<h2 id="design-rationale"><a class="header" href="#design-rationale">Design Rationale</a></h2>
<ul>
<li>Rewards observation—player must suspect something is hidden before investigating</li>
<li>Creates dramatic reveals—unmasking is inherently theatrical</li>
<li>Avoids violence—solution is cognitive, not confrontational</li>
<li>Integrates with narrative—revealing truth advances the story</li>
</ul>
<h2 id="why-its-effective"><a class="header" href="#why-its-effective">Why Its Effective</a></h2>
<p>The reveal moment is satisfying because its active discovery, not passive proof-gathering. The player uses a tool to learn something, not collects documents to prove something.</p>
<h2 id="mechanic-variations"><a class="header" href="#mechanic-variations">Mechanic Variations</a></h2>
<div class="table-wrapper">
<table>
<thead>
<tr><th>Variation</th><th>Revelation Method</th><th>Information Revealed</th></tr>
</thead>
<tbody>
<tr><td>Optical</td><td>Special item shows true form</td><td>Identity, disguise</td></tr>
<tr><td>Chemical</td><td>Substance reveals hidden marks</td><td>Truth, lies, secret writing</td></tr>
<tr><td>Physical</td><td>Object breaks concealment</td><td>Hidden rooms, mechanisms</td></tr>
<tr><td>Temporal</td><td>Time reveals truth</td><td>History, past events</td></tr>
<tr><td>Emotional</td><td>Truth triggers response</td><td>Deception, intentions</td></tr>
</tbody>
</table>
</div>
<h2 id="generic-example-structure"><a class="header" href="#generic-example-structure">Generic Example Structure</a></h2>
<p><strong>Goal</strong>: Identify the [Imposter/Truth/Hidden Thing]</p>
<p><strong>Information Flow</strong>:</p>
<ul>
<li>Player obtains [Revealing Item] through normal exploration</li>
<li>Player suspects something is not as it seems (through dialogue contradictions, visual anomalies)</li>
<li>Player uses [Revealing Item] on [Suspect/Object]</li>
<li>Game shows whats actually there (not what appears)</li>
<li>Player uses revealed truth to solve puzzle</li>
</ul>
<p><strong>The puzzle</strong>: Player must both obtain the revealing item AND correctly identify what to use it on.</p>
<h2 id="adventure-game-implementation"><a class="header" href="#adventure-game-implementation">Adventure Game Implementation</a></h2>
<h3 id="spacequest-1-sarien-id-card-truth-revelation-sq1"><a class="header" href="#spacequest-1-sarien-id-card-truth-revelation-sq1">SpaceQuest 1: Sarien ID Card Truth Revelation (SQ1)</a></h3>
<p><strong>Problem</strong>: Inside Deltaur mothership laundry room, Roger obtains a washing machine-disguised Sarien uniform. However, simply having the uniform isnt enough—examination reveals a critical truth about his new identity status that enables armory access. The puzzle lies in discovering WHAT THE UNIFORM TRULY REPRESENTS (authentic credentials, not mere clothing).</p>
<p><small>Source: cheatbook_walkthrough.html, lines 368-371 — “After washing open the machine (you now look like a Sarien). Exit east… Type LOOK CLOTHES and you get an ID card”</small></p>
<p><strong>Truth Revelation Sequence</strong>:</p>
<pre><code>PHASE 1 - APPEARANCE TRANSFORMATION (Surface Truth):
Step 1 → Hide in washing machine during laundry cycle
Step 2 → Washing completes; player exits wearing Sarien soldier uniform
Step 3 → Visual state changed: sprite now appears as "Sarien soldier" to guards
This is the FALSE/OBVIOUS truth: "I look like a Sarien, so I'm trusted"
PHASE 2 - EXAMINATION REVEALS DEEPER TRUTH:
Step 4 → Type "look at clothes/uniform/clothes" command (critical investigation action)
Step 5 → Game reveals HIDDEN truth: "You find an ID card in the pocket belonging to Butston Freem"
This is the ACTUAL truth: The uniform's true value isn't appearance—it's
the AUTHENTIC credentials it contains. Without the ID, disguise fails at armory.
PHASE 3 - TRUTH DEPLOYMENT (Application of Revelation):
Step 6 → Navigate to armory room via ventilation system/laundry exit
Step 7 → Show ID card to robot guard → "It's Butston Freem's authentic credentials!"
Robot accepts as proof of authorization, departs to retrieve pulseray
Step 8 → Without having examined uniform and discovered the truth (ID exists),
player cannot progress—appearence alone insufficient for armory gate
WHY IT'S TRUTH REVELATION:
SURFACE vs HIDDEN TRUTH STRUCTURE CLEAR:
- Surface Truth: "I'm disguised as a Sarien soldier" (visual sprite change, obvious)
- Hidden Truth: "The uniform contains legitimate access credentials" (requires LOOK command discovery)
- Revelation Mechanic: The "look at clothes" command ACTS AS THE REVEALING TOOL—it actively shows what's hidden in the pocket that couldn't be known through visual sprite inspection alone
ACTIVE DISCOVERY vs PASSIVE COLLECTION:
Player isn't just "picking up an item"—they must INFER that examining the uniform might reveal something beyond appearance. This requires thinking: "What else does THIS UNIFORM offer besides visual disguise?" The ID card's existence is DIEGETICALLY HIDDEN until player commands examination.
TRUTH ENABLES NEXT PHASE (Not Mere Proof):
ID card isn't PROOF of Sarien identity—it IS the functional authorization token. Without it, robot would reject even perfectly-disguised Roger. This demonstrates "truth as key to unlock" principle: uniform alone = cosmetic; ID within = access key.
HYBRID WITH SENSORY EXPLOITATION:
This puzzle layers Truth Revelation (discovering what the uniform CONTAINS) atop Sensory Exploitation (Sariens trust VISIBLE UNIFORM appearance). The laundry room is primarily SE, but the ARMORY ACCESS requires the TRUTH about credentials hidden within. This creates multi-layered puzzle architecture where both mechanics required for full solution.
DISTINCTION FROM SIMPLE ITEM PICKUP:
Many games have "find key in container" patterns. What makes THIS truth revelation is that the player must actively INVESTIGATE the uniform for hidden elements. Just grabbing uniform sprite → wearing it isn't sufficient. The LOOK command is explicit cognitive act of investigating WHAT ELSE this object might be beyond its surface function.
---
## Related Types
- **Sensory Exploitation**: Both use character perception, but SE exploits what the NPC trusts while TR reveals hidden reality
- **Information Brokerage**: Both involve exchange, but IB trades items for info while TR uses tools to discover concealed truth
This puzzle tests: "Can I identify what's hidden and see through surface appearance to deeper meaning?"
</code></pre>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../puzzles/environmental-storytelling.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../puzzles/cross-realm-logistics.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../puzzles/environmental-storytelling.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg></span>
</a>
<a rel="next prefetch" href="../puzzles/cross-realm-logistics.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M278.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 256 73.4 118.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160z"/></svg></span>
</a>
</nav>
</div>
<template id=fa-eye><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM432 256c0 79.5-64.5 144-144 144s-144-64.5-144-144s64.5-144 144-144s144 64.5 144 144zM288 192c0 35.3-28.7 64-64 64c-11.5 0-22.3-3-31.6-8.4c-.2 2.8-.4 5.5-.4 8.4c0 53 43 96 96 96s96-43 96-96s-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6z"/></svg></span></template>
<template id=fa-eye-slash><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M38.8 5.1C28.4-3.1 13.3-1.2 5.1 9.2S-1.2 34.7 9.2 42.9l592 464c10.4 8.2 25.5 6.3 33.7-4.1s6.3-25.5-4.1-33.7L525.6 386.7c39.6-40.6 66.4-86.1 79.9-118.4c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C465.5 68.8 400.8 32 320 32c-68.2 0-125 26.3-169.3 60.8L38.8 5.1zM223.1 149.5C248.6 126.2 282.7 112 320 112c79.5 0 144 64.5 144 144c0 24.9-6.3 48.3-17.4 68.7L408 294.5c5.2-11.8 8-24.8 8-38.5c0-53-43-96-96-96c-2.8 0-5.6 .1-8.4 .4c5.3 9.3 8.4 20.1 8.4 31.6c0 10.2-2.4 19.8-6.6 28.3l-90.3-70.8zm223.1 298L373 389.9c-16.4 6.5-34.3 10.1-53 10.1c-79.5 0-144-64.5-144-144c0-6.9 .5-13.6 1.4-20.2L83.1 161.5C60.3 191.2 44 220.8 34.5 243.7c-3.3 7.9-3.3 16.7 0 24.6c14.9 35.7 46.2 87.7 93 131.1C174.5 443.2 239.2 480 320 480c47.8 0 89.9-12.9 126.2-32.5z"/></svg></span></template>
<template id=fa-copy><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M502.6 70.63l-61.25-61.25C435.4 3.371 427.2 0 418.7 0H255.1c-35.35 0-64 28.66-64 64l.0195 256C192 355.4 220.7 384 256 384h192c35.2 0 64-28.8 64-64V93.25C512 84.77 508.6 76.63 502.6 70.63zM464 320c0 8.836-7.164 16-16 16H255.1c-8.838 0-16-7.164-16-16L239.1 64.13c0-8.836 7.164-16 16-16h128L384 96c0 17.67 14.33 32 32 32h47.1V320zM272 448c0 8.836-7.164 16-16 16H63.1c-8.838 0-16-7.164-16-16L47.98 192.1c0-8.836 7.164-16 16-16H160V128H63.99c-35.35 0-64 28.65-64 64l.0098 256C.002 483.3 28.66 512 64 512h192c35.2 0 64-28.8 64-64v-32h-47.1L272 448z"/></svg></span></template>
<template id=fa-play><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z"/></svg></span></template>
<template id=fa-clock-rotate-left><span class=fa-svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M75 75L41 41C25.9 25.9 0 36.6 0 57.9V168c0 13.3 10.7 24 24 24H134.1c21.4 0 32.1-25.9 17-41l-30.8-30.8C155 85.5 203 64 256 64c106 0 192 86 192 192s-86 192-192 192c-40.8 0-78.6-12.7-109.7-34.4c-14.5-10.1-34.4-6.6-44.6 7.9s-6.6 34.4 7.9 44.6C151.2 495 201.7 512 256 512c141.4 0 256-114.6 256-256S397.4 0 256 0C185.3 0 121.3 28.7 75 75zm181 53c-13.3 0-24 10.7-24 24V256c0 6.4 2.5 12.5 7 17l72 72c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-65-65V152c0-13.3-10.7-24-24-24z"/></svg></span></template>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_line_numbers = true;
</script>
<script>
window.playground_copyable = true;
</script>
<script src="../ace-2a3cd908.js"></script>
<script src="../mode-rust-2c9d5c9a.js"></script>
<script src="../editor-16ca416c.js"></script>
<script src="../theme-dawn-4493f9c8.js"></script>
<script src="../theme-tomorrow_night-9dbe62a9.js"></script>
<script src="../elasticlunr-ef4e11c1.min.js"></script>
<script src="../mark-09e88c2c.min.js"></script>
<script src="../searcher-c2a407aa.js"></script>
<script src="../clipboard-1626706a.min.js"></script>
<script src="../highlight-abc7f01d.js"></script>
<script src="../book-a0b12cfe.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>

555
book/searcher-c2a407aa.js Normal file
View File

@@ -0,0 +1,555 @@
'use strict';
/* global Mark, elasticlunr, path_to_root */
window.search = window.search || {};
(function search() {
// Search functionality
//
// You can use !hasFocus() to prevent keyhandling in your key
// event handlers while the user is typing their search.
if (!Mark || !elasticlunr) {
return;
}
// eslint-disable-next-line max-len
// IE 11 Compatibility from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith
if (!String.prototype.startsWith) {
String.prototype.startsWith = function(search, pos) {
return this.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;
};
}
const search_wrap = document.getElementById('mdbook-search-wrapper'),
searchbar_outer = document.getElementById('mdbook-searchbar-outer'),
searchbar = document.getElementById('mdbook-searchbar'),
searchresults = document.getElementById('mdbook-searchresults'),
searchresults_outer = document.getElementById('mdbook-searchresults-outer'),
searchresults_header = document.getElementById('mdbook-searchresults-header'),
searchicon = document.getElementById('mdbook-search-toggle'),
content = document.getElementById('mdbook-content'),
// SVG text elements don't render if inside a <mark> tag.
mark_exclude = ['text'],
marker = new Mark(content),
URL_SEARCH_PARAM = 'search',
URL_MARK_PARAM = 'highlight';
let current_searchterm = '',
doc_urls = [],
search_options = {
bool: 'AND',
expand: true,
fields: {
title: {boost: 1},
body: {boost: 1},
breadcrumbs: {boost: 0},
},
},
searchindex = null,
results_options = {
teaser_word_count: 30,
limit_results: 30,
},
teaser_count = 0;
function hasFocus() {
return searchbar === document.activeElement;
}
function removeChildren(elem) {
while (elem.firstChild) {
elem.removeChild(elem.firstChild);
}
}
// Helper to parse a url into its building blocks.
function parseURL(url) {
const a = document.createElement('a');
a.href = url;
return {
source: url,
protocol: a.protocol.replace(':', ''),
host: a.hostname,
port: a.port,
params: (function() {
const ret = {};
const seg = a.search.replace(/^\?/, '').split('&');
for (const part of seg) {
if (!part) {
continue;
}
const s = part.split('=');
ret[s[0]] = s[1];
}
return ret;
})(),
file: (a.pathname.match(/\/([^/?#]+)$/i) || ['', ''])[1],
hash: a.hash.replace('#', ''),
path: a.pathname.replace(/^([^/])/, '/$1'),
};
}
// Helper to recreate a url string from its building blocks.
function renderURL(urlobject) {
let url = urlobject.protocol + '://' + urlobject.host;
if (urlobject.port !== '') {
url += ':' + urlobject.port;
}
url += urlobject.path;
let joiner = '?';
for (const prop in urlobject.params) {
if (Object.prototype.hasOwnProperty.call(urlobject.params, prop)) {
url += joiner + prop + '=' + urlobject.params[prop];
joiner = '&';
}
}
if (urlobject.hash !== '') {
url += '#' + urlobject.hash;
}
return url;
}
// Helper to escape html special chars for displaying the teasers
const escapeHTML = (function() {
const MAP = {
'&': '&amp;',
'<': '&lt;',
'>': '&gt;',
'"': '&#34;',
'\'': '&#39;',
};
const repl = function(c) {
return MAP[c];
};
return function(s) {
return s.replace(/[&<>'"]/g, repl);
};
})();
function formatSearchMetric(count, searchterm) {
if (count === 1) {
return count + ' search result for \'' + searchterm + '\':';
} else if (count === 0) {
return 'No search results for \'' + searchterm + '\'.';
} else {
return count + ' search results for \'' + searchterm + '\':';
}
}
function formatSearchResult(result, searchterms) {
const teaser = makeTeaser(escapeHTML(result.doc.body), searchterms);
teaser_count++;
// The ?URL_MARK_PARAM= parameter belongs inbetween the page and the #heading-anchor
const url = doc_urls[result.ref].split('#');
if (url.length === 1) { // no anchor found
url.push('');
}
// encodeURIComponent escapes all chars that could allow an XSS except
// for '. Due to that we also manually replace ' with its url-encoded
// representation (%27).
const encoded_search = encodeURIComponent(searchterms.join(' ')).replace(/'/g, '%27');
return '<a href="' + path_to_root + url[0] + '?' + URL_MARK_PARAM + '=' + encoded_search
+ '#' + url[1] + '" aria-details="mdbook-teaser_' + teaser_count + '">'
+ result.doc.breadcrumbs + '</a>'
+ '<span class="teaser" id="mdbook-teaser_' + teaser_count
+ '" aria-label="Search Result Teaser">' + teaser + '</span>';
}
function makeTeaser(body, searchterms) {
// The strategy is as follows:
// First, assign a value to each word in the document:
// Words that correspond to search terms (stemmer aware): 40
// Normal words: 2
// First word in a sentence: 8
// Then use a sliding window with a constant number of words and count the
// sum of the values of the words within the window. Then use the window that got the
// maximum sum. If there are multiple maximas, then get the last one.
// Enclose the terms in <em>.
const stemmed_searchterms = searchterms.map(function(w) {
return elasticlunr.stemmer(w.toLowerCase());
});
const searchterm_weight = 40;
const weighted = []; // contains elements of ["word", weight, index_in_document]
// split in sentences, then words
const sentences = body.toLowerCase().split('. ');
let index = 0;
let value = 0;
let searchterm_found = false;
for (const sentenceindex in sentences) {
const words = sentences[sentenceindex].split(' ');
value = 8;
for (const wordindex in words) {
const word = words[wordindex];
if (word.length > 0) {
for (const searchtermindex in stemmed_searchterms) {
if (elasticlunr.stemmer(word).startsWith(
stemmed_searchterms[searchtermindex])
) {
value = searchterm_weight;
searchterm_found = true;
}
}
weighted.push([word, value, index]);
value = 2;
}
index += word.length;
index += 1; // ' ' or '.' if last word in sentence
}
index += 1; // because we split at a two-char boundary '. '
}
if (weighted.length === 0) {
return body;
}
const window_weight = [];
const window_size = Math.min(weighted.length, results_options.teaser_word_count);
let cur_sum = 0;
for (let wordindex = 0; wordindex < window_size; wordindex++) {
cur_sum += weighted[wordindex][1];
}
window_weight.push(cur_sum);
for (let wordindex = 0; wordindex < weighted.length - window_size; wordindex++) {
cur_sum -= weighted[wordindex][1];
cur_sum += weighted[wordindex + window_size][1];
window_weight.push(cur_sum);
}
let max_sum_window_index = 0;
if (searchterm_found) {
let max_sum = 0;
// backwards
for (let i = window_weight.length - 1; i >= 0; i--) {
if (window_weight[i] > max_sum) {
max_sum = window_weight[i];
max_sum_window_index = i;
}
}
} else {
max_sum_window_index = 0;
}
// add <em/> around searchterms
const teaser_split = [];
index = weighted[max_sum_window_index][2];
for (let i = max_sum_window_index; i < max_sum_window_index + window_size; i++) {
const word = weighted[i];
if (index < word[2]) {
// missing text from index to start of `word`
teaser_split.push(body.substring(index, word[2]));
index = word[2];
}
if (word[1] === searchterm_weight) {
teaser_split.push('<em>');
}
index = word[2] + word[0].length;
teaser_split.push(body.substring(word[2], index));
if (word[1] === searchterm_weight) {
teaser_split.push('</em>');
}
}
return teaser_split.join('');
}
function init(config) {
results_options = config.results_options;
search_options = config.search_options;
doc_urls = config.doc_urls;
searchindex = elasticlunr.Index.load(config.index);
searchbar_outer.classList.remove('searching');
searchbar.focus();
const searchterm = searchbar.value.trim();
if (searchterm !== '') {
searchbar.classList.add('active');
doSearch(searchterm);
}
}
function initSearchInteractions(config) {
// Set up events
searchicon.addEventListener('click', () => {
searchIconClickHandler();
}, false);
searchbar.addEventListener('keyup', () => {
searchbarKeyUpHandler();
}, false);
document.addEventListener('keydown', e => {
globalKeyHandler(e);
}, false);
// If the user uses the browser buttons, do the same as if a reload happened
window.onpopstate = () => {
doSearchOrMarkFromUrl();
};
// Suppress "submit" events so the page doesn't reload when the user presses Enter
document.addEventListener('submit', e => {
e.preventDefault();
}, false);
// If reloaded, do the search or mark again, depending on the current url parameters
doSearchOrMarkFromUrl();
// Exported functions
config.hasFocus = hasFocus;
}
initSearchInteractions(window.search);
function unfocusSearchbar() {
// hacky, but just focusing a div only works once
const tmp = document.createElement('input');
tmp.setAttribute('style', 'position: absolute; opacity: 0;');
searchicon.appendChild(tmp);
tmp.focus();
tmp.remove();
}
// On reload or browser history backwards/forwards events, parse the url and do search or mark
function doSearchOrMarkFromUrl() {
// Check current URL for search request
const url = parseURL(window.location.href);
if (Object.prototype.hasOwnProperty.call(url.params, URL_SEARCH_PARAM)
&& url.params[URL_SEARCH_PARAM] !== '') {
showSearch(true);
searchbar.value = decodeURIComponent(
(url.params[URL_SEARCH_PARAM] + '').replace(/\+/g, '%20'));
searchbarKeyUpHandler(); // -> doSearch()
} else {
showSearch(false);
}
if (Object.prototype.hasOwnProperty.call(url.params, URL_MARK_PARAM)) {
const words = decodeURIComponent(url.params[URL_MARK_PARAM]).split(' ');
marker.mark(words, {
exclude: mark_exclude,
});
const markers = document.querySelectorAll('mark');
const hide = () => {
for (let i = 0; i < markers.length; i++) {
markers[i].classList.add('fade-out');
window.setTimeout(() => {
marker.unmark();
}, 300);
}
};
for (let i = 0; i < markers.length; i++) {
markers[i].addEventListener('click', hide);
}
}
}
// Eventhandler for keyevents on `document`
function globalKeyHandler(e) {
if (e.altKey ||
e.ctrlKey ||
e.metaKey ||
e.shiftKey ||
e.target.type === 'textarea' ||
e.target.type === 'text' ||
!hasFocus() && /^(?:input|select|textarea)$/i.test(e.target.nodeName)
) {
return;
}
if (e.key === 'Escape') {
e.preventDefault();
searchbar.classList.remove('active');
setSearchUrlParameters('',
searchbar.value.trim() !== '' ? 'push' : 'replace');
if (hasFocus()) {
unfocusSearchbar();
}
showSearch(false);
marker.unmark();
} else if (!hasFocus() && (e.key === 's' || e.key === '/')) {
e.preventDefault();
showSearch(true);
window.scrollTo(0, 0);
searchbar.select();
} else if (hasFocus() && (e.key === 'ArrowDown'
|| e.key === 'Enter')) {
e.preventDefault();
const first = searchresults.firstElementChild;
if (first !== null) {
unfocusSearchbar();
first.classList.add('focus');
if (e.key === 'Enter') {
window.location.assign(first.querySelector('a'));
}
}
} else if (!hasFocus() && (e.key === 'ArrowDown'
|| e.key === 'ArrowUp'
|| e.key === 'Enter')) {
// not `:focus` because browser does annoying scrolling
const focused = searchresults.querySelector('li.focus');
if (!focused) {
return;
}
e.preventDefault();
if (e.key === 'ArrowDown') {
const next = focused.nextElementSibling;
if (next) {
focused.classList.remove('focus');
next.classList.add('focus');
}
} else if (e.key === 'ArrowUp') {
focused.classList.remove('focus');
const prev = focused.previousElementSibling;
if (prev) {
prev.classList.add('focus');
} else {
searchbar.select();
}
} else { // Enter
window.location.assign(focused.querySelector('a'));
}
}
}
function loadSearchScript(url, id) {
if (document.getElementById(id)) {
return;
}
searchbar_outer.classList.add('searching');
const script = document.createElement('script');
script.src = url;
script.id = id;
script.onload = () => init(window.search);
script.onerror = error => {
console.error(`Failed to load \`${url}\`: ${error}`);
};
document.head.append(script);
}
function showSearch(yes) {
if (yes) {
loadSearchScript(
window.path_to_searchindex_js ||
path_to_root + 'searchindex-c567150f.js',
'mdbook-search-index');
search_wrap.classList.remove('hidden');
searchicon.setAttribute('aria-expanded', 'true');
} else {
search_wrap.classList.add('hidden');
searchicon.setAttribute('aria-expanded', 'false');
const results = searchresults.children;
for (let i = 0; i < results.length; i++) {
results[i].classList.remove('focus');
}
}
}
function showResults(yes) {
if (yes) {
searchresults_outer.classList.remove('hidden');
} else {
searchresults_outer.classList.add('hidden');
}
}
// Eventhandler for search icon
function searchIconClickHandler() {
if (search_wrap.classList.contains('hidden')) {
showSearch(true);
window.scrollTo(0, 0);
searchbar.select();
} else {
showSearch(false);
}
}
// Eventhandler for keyevents while the searchbar is focused
function searchbarKeyUpHandler() {
const searchterm = searchbar.value.trim();
if (searchterm !== '') {
searchbar.classList.add('active');
doSearch(searchterm);
} else {
searchbar.classList.remove('active');
showResults(false);
removeChildren(searchresults);
}
setSearchUrlParameters(searchterm, 'push_if_new_search_else_replace');
// Remove marks
marker.unmark();
}
// Update current url with ?URL_SEARCH_PARAM= parameter, remove ?URL_MARK_PARAM and
// `#heading-anchor`. `action` can be one of "push", "replace",
// "push_if_new_search_else_replace" and replaces or pushes a new browser history item.
// "push_if_new_search_else_replace" pushes if there is no `?URL_SEARCH_PARAM=abc` yet.
function setSearchUrlParameters(searchterm, action) {
const url = parseURL(window.location.href);
const first_search = !Object.prototype.hasOwnProperty.call(url.params, URL_SEARCH_PARAM);
if (searchterm !== '' || action === 'push_if_new_search_else_replace') {
url.params[URL_SEARCH_PARAM] = searchterm;
delete url.params[URL_MARK_PARAM];
url.hash = '';
} else {
delete url.params[URL_MARK_PARAM];
delete url.params[URL_SEARCH_PARAM];
}
// A new search will also add a new history item, so the user can go back
// to the page prior to searching. A updated search term will only replace
// the url.
if (action === 'push' || action === 'push_if_new_search_else_replace' && first_search ) {
history.pushState({}, document.title, renderURL(url));
} else if (action === 'replace' ||
action === 'push_if_new_search_else_replace' &&
!first_search
) {
history.replaceState({}, document.title, renderURL(url));
}
}
function doSearch(searchterm) {
// Don't search the same twice
if (current_searchterm === searchterm) {
return;
}
searchbar_outer.classList.add('searching');
if (searchindex === null) {
return;
}
current_searchterm = searchterm;
// Do the actual search
const results = searchindex.search(searchterm, search_options);
const resultcount = Math.min(results.length, results_options.limit_results);
// Display search metrics
searchresults_header.innerText = formatSearchMetric(resultcount, searchterm);
// Clear and insert results
const searchterms = searchterm.split(' ');
removeChildren(searchresults);
for (let i = 0; i < resultcount ; i++) {
const resultElem = document.createElement('li');
resultElem.innerHTML = formatSearchResult(results[i], searchterms);
searchresults.appendChild(resultElem);
}
// Display results
showResults(true);
searchbar_outer.classList.remove('searching');
}
// Exported functions
search.hasFocus = hasFocus;
})(window.search);

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,7 @@
ace.define("ace/theme/dawn",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!1,t.cssClass="ace-dawn",t.cssText=".ace-dawn .ace_gutter {background: #ebebeb;color: #333}.ace-dawn .ace_print-margin {width: 1px;background: #e8e8e8}.ace-dawn {background-color: #F9F9F9;color: #080808}.ace-dawn .ace_cursor {color: #000000}.ace-dawn .ace_marker-layer .ace_selection {background: rgba(39, 95, 255, 0.30)}.ace-dawn.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #F9F9F9;}.ace-dawn .ace_marker-layer .ace_step {background: rgb(255, 255, 0)}.ace-dawn .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(75, 75, 126, 0.50)}.ace-dawn .ace_marker-layer .ace_active-line {background: rgba(36, 99, 180, 0.12)}.ace-dawn .ace_gutter-active-line {background-color : #dcdcdc}.ace-dawn .ace_marker-layer .ace_selected-word {border: 1px solid rgba(39, 95, 255, 0.30)}.ace-dawn .ace_invisible {color: rgba(75, 75, 126, 0.50)}.ace-dawn .ace_keyword,.ace-dawn .ace_meta {color: #794938}.ace-dawn .ace_constant,.ace-dawn .ace_constant.ace_character,.ace-dawn .ace_constant.ace_character.ace_escape,.ace-dawn .ace_constant.ace_other {color: #811F24}.ace-dawn .ace_invalid.ace_illegal {text-decoration: underline;font-style: italic;color: #F8F8F8;background-color: #B52A1D}.ace-dawn .ace_invalid.ace_deprecated {text-decoration: underline;font-style: italic;color: #B52A1D}.ace-dawn .ace_support {color: #691C97}.ace-dawn .ace_support.ace_constant {color: #B4371F}.ace-dawn .ace_fold {background-color: #794938;border-color: #080808}.ace-dawn .ace_list,.ace-dawn .ace_markup.ace_list,.ace-dawn .ace_support.ace_function {color: #693A17}.ace-dawn .ace_storage {font-style: italic;color: #A71D5D}.ace-dawn .ace_string {color: #0B6125}.ace-dawn .ace_string.ace_regexp {color: #CF5628}.ace-dawn .ace_comment {font-style: italic;color: #5A525F}.ace-dawn .ace_heading,.ace-dawn .ace_markup.ace_heading {color: #19356D}.ace-dawn .ace_variable {color: #234A97}.ace-dawn .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYLh/5+x/AAizA4hxNNsZAAAAAElFTkSuQmCC) right repeat-y}";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)}); (function() {
ace.require(["ace/theme/dawn"], function(m) {
if (typeof module == "object" && typeof exports == "object" && module) {
module.exports = m;
}
});
})();

View File

@@ -0,0 +1,7 @@
ace.define("ace/theme/tomorrow_night",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!0,t.cssClass="ace-tomorrow-night",t.cssText=".ace-tomorrow-night .ace_gutter {background: #25282c;color: #C5C8C6}.ace-tomorrow-night .ace_print-margin {width: 1px;background: #25282c}.ace-tomorrow-night {background-color: #1D1F21;color: #C5C8C6}.ace-tomorrow-night .ace_cursor {color: #AEAFAD}.ace-tomorrow-night .ace_marker-layer .ace_selection {background: #373B41}.ace-tomorrow-night.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #1D1F21;}.ace-tomorrow-night .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-tomorrow-night .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #4B4E55}.ace-tomorrow-night .ace_marker-layer .ace_active-line {background: #282A2E}.ace-tomorrow-night .ace_gutter-active-line {background-color: #282A2E}.ace-tomorrow-night .ace_marker-layer .ace_selected-word {border: 1px solid #373B41}.ace-tomorrow-night .ace_invisible {color: #4B4E55}.ace-tomorrow-night .ace_keyword,.ace-tomorrow-night .ace_meta,.ace-tomorrow-night .ace_storage,.ace-tomorrow-night .ace_storage.ace_type,.ace-tomorrow-night .ace_support.ace_type {color: #B294BB}.ace-tomorrow-night .ace_keyword.ace_operator {color: #8ABEB7}.ace-tomorrow-night .ace_constant.ace_character,.ace-tomorrow-night .ace_constant.ace_language,.ace-tomorrow-night .ace_constant.ace_numeric,.ace-tomorrow-night .ace_keyword.ace_other.ace_unit,.ace-tomorrow-night .ace_support.ace_constant,.ace-tomorrow-night .ace_variable.ace_parameter {color: #DE935F}.ace-tomorrow-night .ace_constant.ace_other {color: #CED1CF}.ace-tomorrow-night .ace_invalid {color: #CED2CF;background-color: #DF5F5F}.ace-tomorrow-night .ace_invalid.ace_deprecated {color: #CED2CF;background-color: #B798BF}.ace-tomorrow-night .ace_fold {background-color: #81A2BE;border-color: #C5C8C6}.ace-tomorrow-night .ace_entity.ace_name.ace_function,.ace-tomorrow-night .ace_support.ace_function,.ace-tomorrow-night .ace_variable {color: #81A2BE}.ace-tomorrow-night .ace_support.ace_class,.ace-tomorrow-night .ace_support.ace_type {color: #F0C674}.ace-tomorrow-night .ace_heading,.ace-tomorrow-night .ace_markup.ace_heading,.ace-tomorrow-night .ace_string {color: #B5BD68}.ace-tomorrow-night .ace_entity.ace_name.ace_tag,.ace-tomorrow-night .ace_entity.ace_other.ace_attribute-name,.ace-tomorrow-night .ace_meta.ace_tag,.ace-tomorrow-night .ace_string.ace_regexp,.ace-tomorrow-night .ace_variable {color: #CC6666}.ace-tomorrow-night .ace_comment {color: #969896}.ace-tomorrow-night .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHB3d/8PAAOIAdULw8qMAAAAAElFTkSuQmCC) right repeat-y}";var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)}); (function() {
ace.require(["ace/theme/tomorrow_night"], function(m) {
if (typeof module == "object" && typeof exports == "object" && module) {
module.exports = m;
}
});
})();

454
book/toc-35c178c7.js Normal file

File diff suppressed because one or more lines are too long

31
book/toc.html Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,104 @@
/* Tomorrow Night Theme */
/* https://github.com/jmblog/color-themes-for-highlightjs */
/* Original theme - https://github.com/chriskempson/tomorrow-theme */
/* https://github.com/jmblog/color-themes-for-highlightjs */
/* Tomorrow Comment */
.hljs-comment {
color: #969896;
}
/* Tomorrow Red */
.hljs-variable,
.hljs-attribute,
.hljs-attr,
.hljs-tag,
.hljs-regexp,
.ruby .hljs-constant,
.xml .hljs-tag .hljs-title,
.xml .hljs-pi,
.xml .hljs-doctype,
.html .hljs-doctype,
.css .hljs-id,
.css .hljs-class,
.css .hljs-pseudo {
color: #cc6666;
}
/* Tomorrow Orange */
.hljs-number,
.hljs-preprocessor,
.hljs-pragma,
.hljs-built_in,
.hljs-literal,
.hljs-params,
.hljs-constant {
color: #de935f;
}
/* Tomorrow Yellow */
.ruby .hljs-class .hljs-title,
.css .hljs-rule .hljs-attribute {
color: #f0c674;
}
/* Tomorrow Green */
.hljs-string,
.hljs-value,
.hljs-inheritance,
.hljs-header,
.hljs-name,
.ruby .hljs-symbol,
.xml .hljs-cdata {
color: #b5bd68;
}
/* Tomorrow Aqua */
.hljs-title,
.hljs-section,
.css .hljs-hexcolor {
color: #8abeb7;
}
/* Tomorrow Blue */
.hljs-function,
.python .hljs-decorator,
.python .hljs-title,
.ruby .hljs-function .hljs-title,
.ruby .hljs-title .hljs-keyword,
.perl .hljs-sub,
.javascript .hljs-title,
.coffeescript .hljs-title {
color: #81a2be;
}
/* Tomorrow Purple */
.hljs-keyword,
.javascript .hljs-function {
color: #b294bb;
}
.hljs {
display: block;
overflow-x: auto;
background: #1d1f21;
color: #c5c8c6;
}
.coffeescript .javascript,
.javascript .xml,
.tex .hljs-formula,
.xml .javascript,
.xml .vbscript,
.xml .css,
.xml .hljs-cdata {
opacity: 0.5;
}
.hljs-addition {
color: #718c00;
}
.hljs-deletion {
color: #c82829;
}

Some files were not shown because too many files have changed in this diff Show More