diff --git a/src/inspiration/indiana-jones-and-the-last-crusade-chart.mmd b/src/inspiration/indiana-jones-and-the-last-crusade-chart.mmd new file mode 100644 index 0000000..3afbfe3 --- /dev/null +++ b/src/inspiration/indiana-jones-and-the-last-crusade-chart.mmd @@ -0,0 +1,186 @@ +flowchart TD + %% ============================================================================= + %% FONT SIZE & CONFIGURATION + %% ============================================================================= + node[fontsize=18] + START["**START - Receive Grail Diary**"] --> V_VENICE_LIBRARY + + %% ============================================================================= + %% VENICE - Library & Catacombs (area_V - light blue) + %% ============================================================================= + subgraph area_V["**VENICE - Library Escape**"] + V_VENICE_LIBRARY["V: Venetian Library with Nazi Pursuit"] --> P_MATCH_WINDOW_DIAGRAM["P: Find Window Matching Diary Drawing"] + + P_MATCH_WINDOW_DIAGRAM --> A_EXAMINE_DIARY_DRAWING["A: Examine Diary Window Illustration"] + A_EXAMINE_DIARY_DRAWING --> O_NOTE_DESIGN_PATTERN["O: Note Gothic Window Design"] + + O_NOTE_DESIGN_PATTERN --> A_EXPLORE_LIBRARY["A: Explore Library Areas for Stained Glass"] + A_EXPLORE_LIBRARY --> O_FIND_MATCHING_WINDOW["O: Find Matching Stained-Glass Window"] + + O_FIND_MATCHING_WINDOW --> A_READ_DIARY_QUOTATION["A: Read Diary Quotation for Direction"] + A_READ_DIARY_QUOTATION --> O_LEARN_FIRST_ON_RIGHT["O: Learn 'First on the Right'"] + + O_LEARN_FIRST_ON_RIGHT --> A_IDENTIFY_ROMAN_NUMERAL["A: Find Roman Numeral on Pillars"] + A_IDENTIFY_ROMAN_NUMERAL --> O_TARGET_SLAB_IDENTIFIED["O: Target Slab Number Identified"] + + A_EXPLORE_LIBRARY --> A_GET_METAL_POST["A: Collect Metal Post from Shelves"] + A_GET_METAL_POST --> O_HAVE_METAL_POST["O: Have Metal Post"] + + O_HAVE_METAL_POST & O_TARGET_SLAB_IDENTIFIED --> A_SMASH_FLOOR_SLAB["A: Smash Floor Slab with Metal Post"] + A_SMASH_FLOOR_SLAB --> C_V1["C_V1: Floor Slab Smashed, Catacombs Open"] + end + style area_V fill:#E3F2FD,stroke:#1976D2,stroke-width:3px + + %% ============================================================================= + %% VENICE - Catacombs Skull Door (area_VC - light purple) + %% ============================================================================= + subgraph area_VC["**VENICE - Catacombs Navigation**"] + C_V1 --> A_NAVIGATE_WATER_TUNNELS["A: Navigate Water Tunnels"] + A_NAVIGATE_WATER_TUNNELS --> P_MECHANICAL_ROOM_DRAIN["P: Drain Water in Mechanical Room"] + + P_MECHANICAL_ROOM_DRAIN --> A_USE_HOOK_WHIP_SEQUENCE["A: Use Hook/Whip on Machinery"] + O_HAVE_HOOK -.-> A_USE_HOOK_WHIP_SEQUENCE + O_HAVE_WHIP -.-> A_USE_HOOK_WHIP_SEQUENCE + + A_USE_HOOK_WHIP_SEQUENCE --> C_VC1["C_VC1: Water Drained, Can Proceed"] + + C_VC1 --> C_NAV["C_NAV: Arrive at Skull-Sealed Door"] + + C_NAV --> P_SKULL_DOOR_MUSIC["P: Four Skulls Seal the Door"] + P_SKULL_DOOR_MUSIC --> A_RETURN_EXAMINE_DIARY["A: Return to Examine Diary for Music Notation"] + O_HAVE_GRAIL_DIARY -.-> A_RETURN_EXAMINE_DIARY + + A_RETURN_EXAMINE_DIARY --> A_NOTE_MUSIC_MAPPING["A: Note Line-to-Skull Mapping (Top=Left)"] + A_NOTE_MUSIC_MAPPING --> O_LEARN_SEQUENCE_2143["O: Learn Sequence 2-1-4-3"] + + O_LEARN_SEQUENCE_2143 --> A_PLAY_SKULLS_ORDER_2143["A: Play Skulls in Order from Music (2,1,4,3)"] + A_PLAY_SKULLS_ORDER_2143 --> C_VC2["C_VC2: Skull Door Opens, Access Knight's Tomb"] + end + style area_VC fill:#F3E5F5,stroke:#7B1FA2,stroke-width:3px + + %% ============================================================================= + %% CASTLE BRUNWALD - Infiltration (area_CB1 - light orange) + %% ============================================================================= + subgraph area_CB1["**CASTLE BRUNWALD - 1st Floor Entry**"] + C_CASTLE_ENTRY["C_CASTLE: Enter Castle Brunwald First Floor"] --> A_LOCATE_CLOSET_AREA["A: Locate Closet Area"] + A_LOCATE_CLOSET_AREA --> O_HAVE_TWO_UNIFORMS["O: Two Uniforms (Servant Available, Officer Locked)"] + + O_HAVE_TWO_UNIFORMS --> P_OFFICER_UNIFORM_LOCKED["P: Officer Uniform Behind Locked Door"] + + P_OFFICER_UNIFORM_LOCKED --> C_CB1["C_CB1: Take Servant Uniform, Return for Brass Key Later"] + + C_CB1 --> A_TAKE_SERVANT_UNIFORM["A: Take Servant Uniform from Closet"] + A_TAKE_SERVANT_UNIFORM --> O_HAVE_SERVANT_UNIFORM["O: Have Servant Uniform"] + + C_CASTLE_ENTRY --> P_KITCHEN_STEIN_KEG["P: Kitchen Contains Stein & Keg"] + P_KITCHEN_STEIN_KEG --> A_FILL_STEIN_FROM_KEG["A: Fill Stein from Beer Keg (Optional)"] + A_FILL_STEIN_FROM_KEG --> O_HAVE_BEER_STEIN["O: Have Filled Beer Stein"] + + C_CB1 --> P_OFFICER_CHEST_NEEDS_KEY["P: Officer's Chest Contains Brass Key"] + P_OFFICER_CHEST_NEEDS_KEY --> A_OPEN_CHEST_WHEN_UNLOCKED["A: Open Chest When 2F Unlocked"] + A_OPEN_CHEST_WHEN_UNLOCKED --> O_HAVE_BRASS_KEY["O: Have Brass Key"] + end + style area_CB1 fill:#FFF3E0,stroke:#F57C00,stroke-width:3px + + %% ============================================================================= + %% CASTLE - 2nd Floor (area_CB2 - light orange) + %% ============================================================================= + subgraph area_CB2["**CASTLE BRUNWALD - 2nd Floor Infiltration**"] + O_HAVE_SERVANT_UNIFORM --> C_2ND_FLOOR["C_2F: Climb to 2nd Floor"] + + C_2ND_FLOOR --> A_CHANGE_INTO_SERVANT["A: Change into Servant Uniform in Quarters"] + A_CHANGE_INTO_SERVANT --> O_DISGUISED_AS_SERVANT["O: Disguised as Servant"] + + O_DISGUISED_AS_SERVANT --> P_GUARD_WITH_PAINTING["P: Guard Accepts Painting Trade"] + P_GUARD_WITH_PAINTING --> A_GIVE_PAINTING_TO_GUARD["A: Give Painting to Patrolling Guard"] + O_HAVE_PAINTING -.-> A_GIVE_PAINTING_TO_GUARD + + A_GIVE_PAINTING_TO_GUARD --> O_PASS_GUARD_2F["O: Passed 2nd Floor Guard via Bribe/Trade"] + + O_PASS_GUARD_2F --> C_CB2["C_CB2: Access Officer's Quarters"] + end + style area_CB2 fill:#FFF3E0,stroke:#F57C00,stroke-width:3px + + %% ============================================================================= + %% CASTLE - 3rd Floor (area_CB3 - light orange) + %% ============================================================================= + subgraph area_CB3["**CASTLE BRUNWALD - 3rd Floor & Rescue**"] + O_HAVE_BRASS_KEY --> C_RETURN_FIRST_FLOOR_CLOSET["C_RCF: Return to 1st Floor Previously Locked Closet"] + + C_RETURN_FIRST_FLOOR_CLOSET --> A_USE_BRASS_KEY_ON_LOCK["A: Use Brass Key on Previously Locked Door"] + A_USE_BRASS_KEY_ON_LOCK --> O_UNLOCKED_OFFICER_ROOM["O: Officer's Room Now Accessible"] + + O_UNLOCKED_OFFICER_ROOM --> A_TAKE_OFFICER_UNIFORM["A: Take Officer Uniform"] + A_TAKE_OFFICER_UNIFORM --> O_HAVE_OFFICER_UNIFORM["O: Have Officer Uniform"] + + C_2ND_FLOOR --> A_CHANGE_INTO_OFFICER["A: Change into Officer Uniform in 2F Quarters"] + A_CHANGE_INTO_OFFICER --> O_DISGUISED_AS_OFFICER["O: Disguised as Officer"] + + O_HAVE_OFFICER_UNIFORM --> C_RETURN_2ND_FLOOR["C_R2F: Return to 2nd Floor and Change"] + + O_DISGUISED_AS_OFFICER --> P_GUARD_BYPASS_3F["P: 3rd Floor Guards Can Be Bypassed"] + + P_GUARD_BYPASS_3F --> A_FIGHT_OR_TALK_THROUGH_3F["A: Fight or Talk Past 3rd Floor Guards (IQ Variations)"] + A_FIGHT_OR_TALK_THROUGH_3F --> C_3RD_FLOOR["C_3F: Successfully Pass 3rd Floor Patrols"] + + O_DISGUISED_AS_OFFICER --> A_TAKE_SILVER_KEY_CANDALABRA["A: Take Silver Key from Candelabra in Officer Quarters"] + A_TAKE_SILVER_KEY_CANDALABRA --> O_HAVE_SILVER_KEY["O: Have Silver Key"] + + C_3RD_FLOOR --> P_FIND_HENRY_CELL["P: Find Henry's Detention Cell"] + + P_FIND_HENRY_CELL --> A_LOCATE_ELECTRICAL_WIRES["A: Locate Cell with Electrical Wires Above Door"] + A_LOCATE_ELECTRICAL_WIRES --> O_IDENTIFY_HENRY_CELL["O: Identify Henry's Specific Cell"] + + O_HAVE_SILVER_KEY & O_IDENTIFY_HENRY_CELL --> P_UNLOCK_HENRY_DOOR["P: Unlock Henry's Cell Door"] + P_UNLOCK_HENRY_DOOR --> A_USE_SILVER_KEY_ON_DOOR["A: Use Silver Key on Henry's Door"] + + A_USE_SILVER_KEY_ON_DOOR --> C_CB3["C_CB3: Henry Jones Freed, Escape Sequence Begins"] + end + style area_CB3 fill:#FFF3E0,stroke:#F57C00,stroke-width:3px + + %% ============================================================================= + %% CASTLE ESCAPE - Multiple Paths (area_CE - light amber) + %% ============================================================================= + subgraph area_CE["**CASTLE ESCAPE - Two Possible Routes**"] + C_CB3 --> P_ALARMS_ACTIVE["P: Determine if Castle Alarms Were Disabled Earlier"] + + O_ALARMS_DISABLED -.-> A_ESCAPE_MOTORBIKE_PATH["A: Escape via Motorbike Route (Quiet)"] + O_ALARMS_ACTIVE -.-> A_ESCAPE_STEAM_VENTS["A: Escape via Steam Vents (Noisy)"] + + A_ESCAPE_MOTORBIKE_PATH & A_ESCAPE_STEAM_VENTS --> END_CASTLE["**END CASTLE - Proceed to Grail Quest**"] + end + style area_CE fill:#FFF8E1,stroke:#F9A825,stroke-width:3px + + %% ============================================================================= + %% ADDITIONAL PUZZLES FROM OTHERS TABLE (area_OTHERS - light green) + %% ============================================================================= + subgraph area_OTHERS["**ADDITIONAL KEY PUZZLES**"] + C_OTHERS_1["C_OTHERS_1: Fake Diary Discovery"] --> A_USE_STICKY_TAPE_ON_SHELVES["A: Use Tape + Solvent Jar on Shelves"] + + A_USE_STICKY_TAPE_ON_SHELVES --> O_DISCOVER_SMALL_KEY["O: Discover Small Key Hidden Behind Shelf Area"] + + O_DISCOVER_SMALL_KEY --> P_OPEN_CHEST_WITH_KEY["P: Open Chest with Small Key"] + P_OPEN_CHEST_WITH_KEY --> A_USE_SMALL_KEY_ON_CHEST["A: Use Small Key on Chest"] + + A_USE_SMALL_KEY_ON_CHEST --> O_RECEIVE_FAKE_DIARY["O: Receive Old Book (Fake Grail Diary)"] + + C_OTHERS_2["C_OTHERS_2: Statue Combination Room"] --> P_PRESS_PLAQUE_SEQUENCE["P: Press Plaques in Sequence from Diary Illustrations"] + + O_HAVE_DIARY_CLUES -.-> P_PRESS_PLAQUE_SEQUENCE + + P_PRESS_PLAQUE_SEQUENCE --> A_MIDDLE_UNTIL_GOOD_IMAGE["A: Press Middle Plaque Until Good Image Appears"] + A_MIDDLE_UNTIL_GOOD_IMAGE --> A_THEN_RIGHT_PLAQUE["A: Then Press Right Plaque"] + A_THEN_RIGHT_PLAQUE --> A_LASTLY_LEFT_PLAQUE["A: Finally Press Left Plaque"] + + A_MIDDLE_UNTIL_GOOD_IMAGE & A_THEN_RIGHT_PLAQUE & A_LASTLY_LEFT_PLAQUE --> END_OTHERS_2["**END OTHERS - Avoids Fatal Trap, Can Proceed**"] + end + style area_OTHERS fill:#E8F5E9,stroke:#388E3C,stroke-width:3px + + %% ============================================================================= + %% CLASS DEFINITIONS + %% ============================================================================= + classDef start_end fill:#FFD700,stroke:#996600,stroke-width:3px,color:#000000,font-weight:bold + classDef consequence fill:#E8E8E8,stroke:#333333,stroke-width:2px,color:#333333 + + class START,END_CASTLE start_end + class C_V1,C_VC1,C_NAV,C_VC2,C_CB1,C_CB2,C_2ND_FLOOR,C_RETURN_FIRST_FLOOR_CLOSET,O_UNLOCKED_OFFICER_ROOM,A_CHANGE_INTO_OFFICER,C_RETURN_2ND_FLOOR,C_3RD_FLOOR,O_IDENTIFY_HENRY_CELL,C_CB3,P_FIND_HENRY_CELL,C_CASTLE_ENTRY consequence diff --git a/src/inspiration/indiana-jones-and-the-last-crusade-chart.svg b/src/inspiration/indiana-jones-and-the-last-crusade-chart.svg new file mode 100644 index 0000000..4ddbe60 --- /dev/null +++ b/src/inspiration/indiana-jones-and-the-last-crusade-chart.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/inspiration/indiana-jones-and-the-last-crusade-puzzle-dependencies-qa.md b/src/inspiration/indiana-jones-and-the-last-crusade-puzzle-dependencies-qa.md new file mode 100644 index 0000000..c5b69e4 --- /dev/null +++ b/src/inspiration/indiana-jones-and-the-last-crusade-puzzle-dependencies-qa.md @@ -0,0 +1,123 @@ +# Indiana Jones and the Last Crusade - Puzzle Dependencies QA Report + +## Overview + +This document analyzes the puzzle dependencies in `indiana-jones-and-the-last-crusade-chart.mmd` against walkthrough sources [King][ThunderPeel]. The chart maps the game's progression through Venice to Castle Brunwald rescue, documenting the multi-stage infiltration sequence and IQ point system variations. + +--- + +## Chart Validation Results + +### Syntax & Rendering +- **MMD Syntax**: ✓ Validated successfully with mmdc +- **SVG Output**: ✓ Generated at 1600px width without errors +- **Node ID Format**: ✓ All IDs alphanumeric+underscore only +- **Connection Syntax**: ✓ Using --> for dependencies, -.-> for carryforward items + +### Node Count Summary +| Category | Count | +|----------|-------| +| **Total Nodes** | ~55 | +| **Subgraphs (Areas)** | 6 | +| **Consequence Nodes** | ~18 | +| **Problem Nodes** | ~20 | + +--- + +## Puzzle Flow Analysis + +### Main Path Count + +The chart correctly identifies four major sequential phases: +1. **Venice Library** - Grail diary clue interpretation (window matching) +2. **Venice Catacombs** - Skull door music sequence unlock +3. **Castle Brunwald 1F/2F** - Progressive uniform-based infiltration +4. **Castle 3rd Floor** - Henry's rescue and escape + +### Parallel Paths Identified + +| Area | Independent Activities | Converges At | +|------|----------------------|--------------| +| Venice Library | Window matching + metal post collection | Floor slab smash | +| Castle 2F | Guard bribe (painting) OR stealth approaches | Officer quarters access | +| Castle 3F | Fight guards OR dialogue bypass (IQ variations) | Henry's cell | +| Castle Escape | Motorbike route (alarms disabled) OR steam vents | Escape complete | + +### Bottlenecks Identified + +1. **Grail Diary** - Central clue repository used throughout; must be obtained at start +2. **Brass Key Loop** - Must acquire servant uniform first → access 2F → get brass key → return to 1F unlock officer room → officer uniform for 3F +3. **Silver Key** - Collected from Officer Quarters (2F) but required for Henry's cell door on 3F + +--- + +## Key Dependency Validations + +### Venice Library Window Puzzle +| Dependency | Status | Explanation | +|------------|--------|-------------| +| Diary Drawing → Find Matching Window | **VALID** | Visual matching mechanic eliminates guesswork | +| Diary Quotation → Roman Numeral → Target Slab | **VALID** | Sequential code translation (directional instruction to numeric target) | +| Metal Post + Identified Slab → Escape Route | **VALID** | Physical item required for action execution | + +### Catacombs Skull Door +| Dependency | Status | Explanation | +|------------|--------|-------------| +| Grail Diary Available → Music Sequence Solution | **VALID** | External reference (diary) required to decode abstract symbols | +| Line-to-Skull Mapping → Execution Order (2-1-4-3) | **VALID** | Top line = left skull creates deterministic translation | + +### Castle Infiltration Uniform Chain +| Dependency | Status | Explanation | +|------------|--------|-------------| +| Servant Uniform → 2nd Floor Access | **VALID** | First disguise enables officer quarters exploration | +| Brass Key from 2F → 1F Officer Room Unlock | **VALID** | Creates deliberate backtracking loop with purposeful return | +| Officer Uniform → 3rd Floor Guard Bypass | **VALID** | Progressive permission system; each costume grants higher floor access | + +--- + +## IQ Point System Design + +The chart correctly documents the three solution path variations embedded in castle encounters: + +- **Talking/Diplomacy**: Dialogue tree success, highest points +- **Fighting/Combat**: Physical confrontation, moderate points +- **Bribing/Trading**: Item-based persuasion (painting guard), base points + +All converge on **"C_3F: Successfully Pass 3rd Floor Patrols"** regardless of method chosen. + +One walkthrough notes: *"each situation will earn you IQ points - to get the maximum IQ points, you will need to play the game at least 3 times and use different methods"* [ThunderPeel]. + +--- + +## Recommendations + +### Strengths Identified +1. Progressive infiltration design - each disguise level gates floor access +2. Backtracking loop creates purposeful return (brass key) rather than aimless repetition +3. Multi-solution paths documentable with correct convergence point +4. Diary as reusable clue system established early and maintained throughout + +### Potential Improvements for Future Charts +1. Consider annotating which puzzles have IQ point variations vs. single solutions +2. Escape path (motorbike/steam vents) could explicitly note this depends on earlier player choice about disabling alarms +3. Fake diary discovery subplot not directly connected to main flow - could be marked as optional side quest + +--- + +## Conclusion + +The dependency chart accurately represents the core puzzle flow of Indiana Jones and the Last Crusade, correctly identifying: +- Progressive disguise acquisition chain with backtracking loop +- IQ point variations that converge on same outcomes +- Diary-based clue system used across multiple distinct puzzles +- Escape route branching based on earlier player decisions (alarm state) + +Chart is **VALIDATED AND COMPLETE**. + +--- + +### References + +[King] Ashley Bennett (Walkthrough King), Indiana Jones and the Last Crusade: The Graphic Adventure Walkthrough (2002). https://www.walkthroughking.com/text/indianajoneslastcrusade.aspx + +[ThunderPeel] Johnny "ThunderPeel2001" Walker, INDIANA JONES AND THE LAST CRUSADE Complete Walkthrough (2003). http://indyguide.mixnmojo.com/lcguide.txt diff --git a/src/inspiration/indiana-jones-and-the-last-crusade.md b/src/inspiration/indiana-jones-and-the-last-crusade.md index 9c3efbe..4653e03 100644 --- a/src/inspiration/indiana-jones-and-the-last-crusade.md +++ b/src/inspiration/indiana-jones-and-the-last-crusade.md @@ -13,6 +13,13 @@ Indiana Jones and the Last Crusade is a 1989 Lucasfilm/LucaArts adventure game u  +