diff --git a/mermaid-init.js b/mermaid-init.js index 8a110ca..cea6bfc 100644 --- a/mermaid-init.js +++ b/mermaid-init.js @@ -17,7 +17,7 @@ } const theme = lastThemeWasLight ? 'default' : 'dark'; - mermaid.initialize({ startOnLoad: true, theme }); + mermaid.initialize({ startOnLoad: false, theme }); // Simplest way to make mermaid re-render the diagrams in the new theme is via refreshing the page diff --git a/src/inspiration/kings-quest-vi-chart-full.png b/src/inspiration/kings-quest-vi-chart-full.png index ed2ec3e..d3c2def 100644 Binary files a/src/inspiration/kings-quest-vi-chart-full.png and b/src/inspiration/kings-quest-vi-chart-full.png differ diff --git a/src/inspiration/kings-quest-vi-chart-preview.png b/src/inspiration/kings-quest-vi-chart-preview.png index 520fb82..9624b5a 100644 Binary files a/src/inspiration/kings-quest-vi-chart-preview.png and b/src/inspiration/kings-quest-vi-chart-preview.png differ diff --git a/src/inspiration/kings-quest-vi-chart.mmd b/src/inspiration/kings-quest-vi-chart.mmd new file mode 100644 index 0000000..59440a1 --- /dev/null +++ b/src/inspiration/kings-quest-vi-chart.mmd @@ -0,0 +1,664 @@ +flowchart TD + %% ============================================================================= + %% STYLE DEFINITIONS - Modern, accessible colors with 4.5:1+ contrast + %% ============================================================================= + classDef start_end fill:#FFD700,stroke:#996600,stroke-width:3px,color:#000000 + classDef problem fill:#FFB3B3,stroke:#8B0000,stroke-width:2px,color:#8B0000 + classDef action fill:#B3FFB3,stroke:#006400,stroke-width:2px,color:#006400 + classDef outcome fill:#B3D9FF,stroke:#004080,stroke-width:2px,color:#004080 + classDef area_ioc fill:#E6E6FF,stroke:#333399,stroke-width:2px + classDef area_iow fill:#FFE6FF,stroke:#660066,stroke-width:2px + classDef area_iob fill:#FFE6CC,stroke:#663300,stroke-width:2px + classDef area_maze fill:#CCFFCC,stroke:#006633,stroke-width:2px + classDef area_ism fill:#CCFFFF,stroke:#006666,stroke-width:2px + classDef area_iom fill:#FFFFCC,stroke:#666600,stroke-width:2px + classDef area_rod fill:#F0F0F0,stroke:#333333,stroke-width:2px + classDef area_castle fill:#FFD9CC,stroke:#663320,stroke-width:2px + classDef area_final fill:#FFCCE6,stroke:#660033,stroke-width:2px + + %% ============================================================================= + %% PHASE 0: START - Isle of the Crown Beach + %% ============================================================================= + subgraph area_start["START"] + START(["START: Wake on Isle of the Crown Beach"]) + end + + %% Beach - Item Collection (parallel independent actions) + subgraph area_beach["Isle of the Crown - Beach"] + A_MOVE_PLANK["A: Move debris on beach"] + O_RECEIVE_COPPER_COIN["O: Receive Copper Coin"] + A_EXAMINE_DEBRIS["A: Examine debris more closely"] + O_RECEIVE_ROYAL_RING["O: Receive Royal Insignia Ring"] + + A_MOVE_PLANK --> O_RECEIVE_COPPER_COIN + A_EXAMINE_DEBRIS --> O_RECEIVE_ROYAL_RING + end + + START --> A_MOVE_PLANK + START --> A_EXAMINE_DEBRIS + + %% Castle Entry - Guards + subgraph area_castle_entry["Isle of the Crown - Castle Entry"] + A_SHOW_RING_TO_GUARDS["A: Show Royal Ring to guards"] + C1["Consequence: Meet Vizier, then kicked out"] + end + + O_RECEIVE_ROYAL_RING --> A_SHOW_RING_TO_GUARDS + A_SHOW_RING_TO_GUARDS --> C1 + + %% Village - Multiple Parallel Independent Paths + subgraph area_village["Isle of the Crown - Village"] + %% Pawn Shop - Locked Choice Mechanic (trade sequence) + P_PROBLEM_PAWN_SHOP["Problem: Need items from Pawn Shop"] + A_TALK_TO_PAWN_BROKER["A: Talk to Pawn Shop broker"] + O_RECEIVE_NIGHTINGALE["O: Receive Mechanical Nightingale"] + O_RECEIVE_MINT["O: Receive Mint"] + O_RECEIVE_TINDERBOX["O: Receive Tinderbox"] + O_RECEIVE_FLUTE["O: Receive Flute"] + O_RECEIVE_PAINTBRUSH["O: Receive Paintbrush"] + O_RECEIVE_INK["O: Receive Invisible Ink Bottle"] + + %% Magic Map Trade + P_PROBLEM_NEED_MAP["Problem: Cannot travel to other islands"] + A_TRADE_RING_FOR_MAP["A: Trade Royal Ring for Magic Map"] + O_RECEIVE_MAGIC_MAP["O: Receive Magic Map"] + + %% Ferryman - Rabbit's Foot + P_PROBLEM_FERRYMAN["Problem: Need ferry info and items"] + A_TALK_TO_FERRYMAN["A: Talk to Ali the ferryman"] + O_RECEIVE_RABBIT_FOOT["O: Receive Rabbit's Foot"] + + %% Jollo in Bookstore + P_PROBLEM_JOLLO["Problem: Need Jollo's help for story"] + A_TALK_TO_JOLLO["A: Talk to Jollo in Bookstore"] + O_RECEIVE_JOLLO_TRUST["O: Receive Jollo's trust"] + A_SHOW_RING_TO_JOLLO["A: Show Royal Ring to Jollo"] + + %% Love Poem (optional) + A_SEARCH_BOOKSHELF["A: Search poetry bookshelf"] + O_RECEIVE_LOVE_POEM["O: Receive Love Poem"] + end + + C1 --> P_PROBLEM_PAWN_SHOP + C1 --> P_PROBLEM_NEED_MAP + C1 --> P_PROBLEM_FERRYMAN + C1 --> P_PROBLEM_JOLLO + + %% Village - Parallel independent paths (S3, S4, S5, S6 in original) + P_PROBLEM_PAWN_SHOP --> A_TALK_TO_PAWN_BROKER + A_TALK_TO_PAWN_BROKER --> O_RECEIVE_NIGHTINGALE + A_TALK_TO_PAWN_BROKER --> O_RECEIVE_MINT + A_TALK_TO_PAWN_BROKER --> O_RECEIVE_INK + O_RECEIVE_NIGHTINGALE --> A_TRADE_WITH_BROKER_N["A: Trade Nightingale"] + A_TRADE_WITH_BROKER_N -.-> O_RECEIVE_FLUTE + O_RECEIVE_FLUTE --> A_TRADE_WITH_BROKER_F["A: Trade Flute"] + A_TRADE_WITH_BROKER_F -.-> O_RECEIVE_TINDERBOX + O_RECEIVE_TINDERBOX --> A_TRADE_WITH_BROKER_T["A: Trade Tinderbox"] + A_TRADE_WITH_BROKER_T -.-> O_RECEIVE_PAINTBRUSH + + P_PROBLEM_FERRYMAN --> A_TALK_TO_FERRYMAN + A_TALK_TO_FERRYMAN --> O_RECEIVE_RABBIT_FOOT + + P_PROBLEM_NEED_MAP --> A_TRADE_RING_FOR_MAP + A_TRADE_RING_FOR_MAP --> O_RECEIVE_MAGIC_MAP + + P_PROBLEM_JOLLO --> A_TALK_TO_JOLLO + A_TALK_TO_JOLLO --> O_RECEIVE_JOLLO_TRUST + O_RECEIVE_JOLLO_TRUST --> A_SHOW_RING_TO_JOLLO + + A_SEARCH_BOOKSHELF --> O_RECEIVE_LOVE_POEM + + %% ============================================================================= + %% PHASE 2: Isle of Wonder - Five Senses Gnomes + %% ============================================================================= + subgraph area_iow_gnomes["Isle of Wonder - Five Senses Gnomes"] + P_PROBLEM_GNOMES["Problem: Five gnomes block path north"] + + A_GIVE_STINKY_FLOWER["A: Give Flower of Stench to Smell gnome"] + O_GNOMES_SMELL_DONE["O: Smell gnome satisfied"] + + A_PLAY_NIGHTINGALE["A: Play Nightingale for Hearing gnome"] + O_GNOMES_HEARING_DONE["O: Hearing gnome satisfied"] + + A_GIVE_MINT["A: Give Mint to Taste gnome"] + O_GNOMES_TASTE_DONE["O: Taste gnome satisfied"] + + A_GIVE_RABBIT_FOOT["A: Give Rabbit Foot to Touch gnome"] + O_GNOMES_TOUCH_DONE["O: Touch gnome satisfied"] + + A_USE_INK_ON_SELF["A: Use Invisible Ink on self"] + O_GNOMES_SIGHT_DONE["O: Sight gnome satisfied"] + end + + O_RECEIVE_MAGIC_MAP --> P_PROBLEM_GNOMES + O_RECEIVE_NIGHTINGALE --> A_PLAY_NIGHTINGALE + O_RECEIVE_MINT --> A_GIVE_MINT + O_RECEIVE_RABBIT_FOOT --> A_GIVE_RABBIT_FOOT + O_RECEIVE_INK --> A_USE_INK_ON_SELF + + O_RECEIVE_STINKY_FLOWER --> A_GIVE_STINKY_FLOWER + P_PROBLEM_GNOMES --> A_GIVE_STINKY_FLOWER + P_PROBLEM_GNOMES --> A_PLAY_NIGHTINGALE + P_PROBLEM_GNOMES --> A_GIVE_MINT + P_PROBLEM_GNOMES --> A_GIVE_RABBIT_FOOT + P_PROBLEM_GNOMES --> A_USE_INK_ON_SELF + + A_GIVE_STINKY_FLOWER --> O_GNOMES_SMELL_DONE + A_PLAY_NIGHTINGALE --> O_GNOMES_HEARING_DONE + A_GIVE_MINT --> O_GNOMES_TASTE_DONE + A_GIVE_RABBIT_FOOT --> O_GNOMES_TOUCH_DONE + A_USE_INK_ON_SELF --> O_GNOMES_SIGHT_DONE + + %% Isle of Wonder Beach - Oyster Pearl (INDEPENDENT of gnomes) + subgraph area_iow_beach["Isle of Wonder - Beach (independent)"] + A_READ_BOOK_TO_OYSTER["A: Read Boring Book to Oyster"] + O_RECEIVE_PEARL["O: Receive Pearl"] + end + + O_GNOMES_SMELL_DONE & O_GNOMES_HEARING_DONE & O_GNOMES_TASTE_DONE & O_GNOMES_TOUCH_DONE & O_GNOMES_SIGHT_DONE --> C2["Path through gnomes now open"] + C2 --> A_READ_BOOK_TO_OYSTER + A_READ_BOOK_TO_OYSTER --> O_RECEIVE_PEARL + + %% ============================================================================= + %% PHASE 3: Isle of Wonder - Garden, Chessboard, Point + %% ============================================================================= + subgraph area_iow_garden["Isle of Wonder - Garden"] + A_PLAY_FLUTE_FLOWERS["A: Play Flute for shy flowers"] + O_RECEIVE_HOLE_IN_WALL["O: Receive Hole-in-the-Wall"] + + A_PICK_ICEY_LETTUCE["A: Pick Iceberg Lettuce from garden"] + O_RECEIVE_ICEY_LETTUCE["O: Receive Iceberg Lettuce"] + + A_PICK_ROTTEN_TOMATO["A: Pick up Rotten Tomato"] + O_RECEIVE_ROTTEN_TOMATO["O: Receive Rotten Tomato"] + A_GIVE_ROTTEN_TOMATO["A: Give Rotten Tomato to bump-on-log"] + O_RECEIVE_SWAMP_OOZE["O: Receive Swamp Ooze"] + + A_GIVE_MILK_TO_PLANT["A: Give Milk to baby's tears plant"] + O_RECEIVE_BABYS_TEARS["O: Receive Baby's Tears"] + A_GET_MILK_BOTTLE["A: Pick up Milk Bottle"] + O_RECEIVE_MILK["O: Receive Milk"] + A_GET_TEA_CUP["A: Pick up Tea Cup"] + O_RECEIVE_TEA_CUP["O: Receive Tea Cup"] + + A_PICK_DRINK_ME_POTION["A: Pick up 'Drink Me' Potion"] + O_RECEIVE_DRINK_ME["O: Receive 'Drink Me' Potion"] + end + + C2 --> A_PICK_ICEY_LETTUCE + C2 --> A_PICK_ROTTEN_TOMATO + C2 --> A_GET_TEA_CUP + C2 --> A_PICK_DRINK_ME_POTION + O_RECEIVE_FLUTE --> A_PLAY_FLUTE_FLOWERS + O_RECEIVE_MILK --> A_GIVE_MILK_TO_PLANT + A_GET_MILK_BOTTLE --> O_RECEIVE_MILK + A_PLAY_FLUTE_FLOWERS --> O_RECEIVE_HOLE_IN_WALL + A_PICK_ROTTEN_TOMATO --> O_RECEIVE_ROTTEN_TOMATO + O_RECEIVE_ROTTEN_TOMATO --> A_GIVE_ROTTEN_TOMATO + A_GIVE_ROTTEN_TOMATO --> O_RECEIVE_SWAMP_OOZE + + subgraph area_iow_chessboard["Isle of Wonder - Chessboard Land"] + A_TALK_TO_QUEENS["A: Talk to Chessboard queens"] + O_RECEIVE_RED_SCARF["O: Receive Red Scarf"] + O_RECEIVE_LUMP_OF_COAL["O: Receive Lump of Coal"] + end + + C2 --> A_TALK_TO_QUEENS + O_RECEIVE_LUMP_OF_COAL -.-> A_TRADE_COAL_FOR_EGG["A: Trade coal for sulfur egg"] + + subgraph area_iow_point["Isle of Wonder - Point / Book Garden"] + A_PULL_THREAD["A: Pull thread from spider web"] + O_RECEIVE_LOVE_WORD["O: Receive word 'LOVE' (for Gate riddle)"] + O_RECEIVE_SPIDER_WEB["O: Receive Spider Web Paper"] + + A_SEARCH_POETRY_SHELF["A: Search poetry bookshelf"] + O_RECEIVE_LOVE_POEM_IOW["O: Receive Love Poem"] + + A_TRADE_PARTICIPLE_BOOK["A: Trade Dangling Participle to bookworm"] + O_RECEIVE_RARE_BOOK["O: Receive Rare Book"] + end + + C2 --> A_PULL_THREAD + C2 --> A_SEARCH_POETRY_SHELF + A_PULL_THREAD --> O_RECEIVE_LOVE_WORD + A_PULL_THREAD --> O_RECEIVE_SPIDER_WEB + A_SEARCH_POETRY_SHELF --> O_RECEIVE_LOVE_POEM_IOW + O_RECEIVE_DANGLING_PARTICIPLE --> A_TRADE_PARTICIPLE_BOOK + A_TRADE_PARTICIPLE_BOOK --> O_RECEIVE_RARE_BOOK + + %% ============================================================================= + %% PHASE 4: Isle of the Beast - Initial Visit + %% ============================================================================= + subgraph area_iob_initial["Isle of the Beast - Initial Visit"] + P_PROBLEM_BOILING_POOL["Problem: Boiling pool blocks crossing"] + A_COOL_POOL["A: Use Iceberg Lettuce on pool"] + C3["Path to north area now open"] + + A_GET_BRICK["A: Pick up Brick from garden"] + O_RECEIVE_BRICK["O: Receive Brick"] + + A_GET_HUNTERS_LAMP["A: Pick up Hunter's Lamp"] + O_RECEIVE_HUNTERS_LAMP["O: Receive Hunter's Lamp"] + + A_GET_DANGLING_PARTICIPLE["A: Get Dangling Participle from beach"] + O_RECEIVE_DANGLING_PARTICIPLE["O: Receive Dangling Participle"] + end + + O_RECEIVE_ICEY_LETTUCE --> A_COOL_POOL + A_COOL_POOL --> C3 + C3 --> A_GET_BRICK + C3 --> A_GET_HUNTERS_LAMP + C3 --> A_GET_DANGLING_PARTICIPLE + A_GET_BRICK --> O_RECEIVE_BRICK + A_GET_HUNTERS_LAMP --> O_RECEIVE_HUNTERS_LAMP + A_GET_DANGLING_PARTICIPLE --> O_RECEIVE_DANGLING_PARTICIPLE + + %% ============================================================================= + %% PHASE 5: Minotaur's Maze / Catacombs + %% ============================================================================= + subgraph area_maze_l1["Minotaur's Maze - Level 1"] + P_PROBLEM_MAZE_L1["Problem: Navigate maze to find items"] + A_SOLVE_TILE_PUZZLE["A: Solve tile puzzle (use manual)"] + O_MAZE_PATH_OPEN["O: Tile path opens"] + + A_NAVIGATE_TO_SKELETON["A: Navigate maze to skeleton room"] + O_RECEIVE_SKULL["O: Receive Skull"] + + A_COLLECT_COINS["A: Collect Dead Man's Coins"] + O_RECEIVE_COINS["O: Receive Dead Man's Coins"] + + A_USE_BRICK_TRAP["A: Use Brick to stop falling ceiling"] + O_TRAP_STOPPED["O: Falling ceiling trap stopped"] + end + + C3 --> P_PROBLEM_MAZE_L1 + P_PROBLEM_MAZE_L1 --> A_SOLVE_TILE_PUZZLE + P_PROBLEM_MAZE_L1 --> A_NAVIGATE_TO_SKELETON + P_PROBLEM_MAZE_L1 --> A_COLLECT_COINS + P_PROBLEM_MAZE_L1 --> A_USE_BRICK_TRAP + + subgraph area_maze_l2["Minotaur's Maze - Level 2 (Dark)"] + P_PROBLEM_DARK_L2["Problem: Cannot see in dark passage"] + A_LIGHT_TINDERBOX["A: Light Tinderbox to see"] + O_CAN_SEE["O: Dark passage illuminated"] + + A_USE_HOLE_IN_WALL["A: Use Hole-in-the-Wall at correct wall"] + O_REVEAL_TAPESTRY["O: Minotaur tapestry revealed"] + + A_FIND_SHIELD["A: Navigate to find Shield"] + O_RECEIVE_SHIELD["O: Receive Shield"] + end + + O_RECEIVE_BRICK --> A_USE_BRICK_TRAP + O_RECEIVE_TINDERBOX --> A_LIGHT_TINDERBOX + O_RECEIVE_HOLE_IN_WALL --> A_USE_HOLE_IN_WALL + + A_LIGHT_TINDERBOX --> O_CAN_SEE + O_CAN_SEE --> A_USE_HOLE_IN_WALL + O_CAN_SEE --> A_FIND_SHIELD + + subgraph area_maze_lair["Minotaur's Lair"] + P_PROBLEM_MINOTAUR["Problem: Minotaur blocks exit"] + A_LURE_MINOTAUR["A: Lure Minotaur with Red Scarf"] + O_RECEIVE_DAGGER["O: Receive Dagger"] + O_RECEIVE_SACRED_WATER["O: Receive Sacred Water"] + O_RECEIVE_ORACLE_VIAL["O: Receive Oracle Vial"] + end + + O_RECEIVE_SHIELD & O_RECEIVE_SCARF_CONV & O_TRAP_STOPPED & O_REVEAL_TAPESTRY --> P_PROBLEM_MINOTAUR + O_RECEIVE_SCARF_CONV["O: Red Scarf acquired from Chessboard"] + O_RECEIVE_RED_SCARF --> O_RECEIVE_SCARF_CONV + P_PROBLEM_MINOTAUR --> A_LURE_MINOTAUR + A_LURE_MINOTAUR --> O_RECEIVE_DAGGER + A_LURE_MINOTAUR --> O_RECEIVE_SACRED_WATER + A_LURE_MINOTAUR --> O_RECEIVE_ORACLE_VIAL + + %% Parallel paths after maze - S23/S24 are PARALLEL, S20/S21 are PARALLEL + O_MAZE_PATH_OPEN & O_RECEIVE_SKULL & O_RECEIVE_COINS & O_TRAP_STOPPED --> A_NAVIGATE_TO_SKELETON + O_NAVIGATE_MAZE["O: Maze navigated, shield found"] + + %% ============================================================================= + %% PHASE 6: Isle of the Beast - Return Visit (with Shield) + %% ============================================================================= + subgraph area_iob_return["Isle of the Beast - Return Visit"] + P_PROBLEM_ARCHER["Problem: Archer statue kills you"] + A_USE_SHIELD_STATUE["A: Use Shield to block arrows"] + C4["Safe passage through archer gate"] + + P_PROBLEM_ROSE_HEDGE["Problem: Rose hedge blocks path to Beast"] + A_CUT_HEDGE["A: Cut hedge with Scythe"] + C5["Path to Beast's domain opens"] + end + + O_RECEIVE_SHIELD --> P_PROBLEM_ARCHER + P_PROBLEM_ARCHER --> A_USE_SHIELD_STATUE + A_USE_SHIELD_STATUE --> C4 + + O_RECEIVE_SCYTHE["O: Receive Scythe from IoM"] -.-> P_PROBLEM_ROSE_HEDGE + P_PROBLEM_ROSE_HEDGE --> A_CUT_HEDGE + A_CUT_HEDGE --> C5 + + %% Beast's Domain + subgraph area_beast_domain["Isle of the Beast - Beast's Domain"] + P_PROBLEM_MEET_BEAST["Problem: Need to meet Beast"] + A_GIVE_WHITE_ROSE["A: Give White Rose to Beauty"] + O_BEAUTY_TRUSTS["O: Beauty's trust gained"] + + A_GIVE_RING_TO_BEAUTY["A: Give Beast's Ring to Beauty"] + O_RECEIVE_BEAUTYS_DRESS["O: Receive Beauty's Dress"] + O_RECEIVE_MIRROR["O: Receive Mirror"] + O_RECEIVE_BEASTS_RING["O: Receive Beast's Ring"] + + A_PLACE_ROSE["A: Plant White Rose"] + O_RECEIVE_WHITE_ROSE_2["O: Receive White Rose (second)"] + end + + C5 --> P_PROBLEM_MEET_BEAST + P_PROBLEM_MEET_BEAST --> A_GIVE_WHITE_ROSE + A_GIVE_WHITE_ROSE --> O_BEAUTY_TRUSTS + O_BEAUTY_TRUSTS --> A_GIVE_RING_TO_BEAUTY + A_GIVE_RING_TO_BEAUTY --> O_RECEIVE_BEAUTYS_DRESS + A_GIVE_RING_TO_BEAUTY --> O_RECEIVE_MIRROR + O_BEAUTY_TRUSTS --> A_PLACE_ROSE + A_PLACE_ROSE --> O_RECEIVE_WHITE_ROSE_2 + + %% ============================================================================= + %% PHASE 7: Isle of Sacred Mountain + %% ============================================================================= + subgraph area_ism_cliffs["Isle of Sacred Mountain - Logic Cliffs"] + P_PROBLEM_LOGIC_CLIFFS["Problem: Copy protection puzzles block summit"] + A_SOLVE_CLIFF_PUZZLES["A: Solve 5 cliff puzzles (manual required)"] + C6["Path to clifftop opens"] + + A_GET_BLACK_FEATHER["A: Pick up Black Feather"] + O_RECEIVE_BLACK_FEATHER["O: Receive Black Feather"] + + A_GET_STINKY_FLOWER["A: Pick up Flower of Stench"] + O_RECEIVE_STINKY_FLOWER["O: Receive Flower of Stench"] + end + + O_RECEIVE_MAGIC_MAP --> P_PROBLEM_LOGIC_CLIFFS + P_PROBLEM_LOGIC_CLIFFS --> A_SOLVE_CLIFF_PUZZLES + A_SOLVE_CLIFF_PUZZLES --> C6 + C6 --> A_GET_BLACK_FEATHER + C6 --> A_GET_STINKY_FLOWER + + subgraph area_ism_clifftop["Isle of Sacred Mountain - Clifftop & Cave"] + P_PROBLEM_DARK_CAVE["Problem: Dark cave blocks path"] + A_LIGHT_CAVE["A: Light way with Tinderbox"] + O_RECEIVE_PEPPERMINT["O: Receive Peppermint Leaves"] + + P_PROBLEM_POISON_LADY["Problem: Fake lady offers poison berry"] + A_REJECT_POISON["A: Wait/reject fake lady"] + O_SURVIVED["O: Survived poison trap"] + end + + O_RECEIVE_TINDERBOX --> A_LIGHT_CAVE + A_LIGHT_CAVE --> O_RECEIVE_PEPPERMINT + C6 --> P_PROBLEM_DARK_CAVE + C6 --> P_PROBLEM_POISON_LADY + P_PROBLEM_POISON_LADY --> A_REJECT_POISON + A_REJECT_POISON --> O_SURVIVED + + %% Winged Ones + subgraph area_ism_winged["Isle of Sacred Mountain - Winged Ones"] + P_PROBLEM_SPELL_COMPONENTS["Problem: Need spell components for Night Mare"] + A_COLLECT_COMPONENTS["A: Gather Ember, Hair, Spoiled Egg"] + O_SPELL_READY["O: Charm Creatures spell ready"] + + A_GET_EMBER["A: Collect Ember from firepit"] + O_RECEIVE_EMBER["O: Receive Ember"] + A_GET_HAIR["A: Get Hair (Beauty's or Cassima's)"] + O_RECEIVE_HAIR["O: Receive Hair"] + A_GET_SPOILED_EGG["A: Get Spoiled Egg"] + O_RECEIVE_SPOILED_EGG["O: Receive Spoiled Egg"] + + A_CAST_CHARM_SPELL["A: Cast Charm Creatures of Night spell"] + O_NIGHTMARE_MOUNT["O: Nightmare horse mount available"] + end + + O_RECEIVE_SKULL & O_RECEIVE_EMBER & O_RECEIVE_SPOILED_EGG & O_RECEIVE_HAIR --> P_PROBLEM_SPELL_COMPONENTS + P_PROBLEM_SPELL_COMPONENTS --> A_COLLECT_COMPONENTS + A_COLLECT_COMPONENTS --> A_CAST_CHARM_SPELL + A_CAST_CHARM_SPELL --> O_NIGHTMARE_MOUNT + + %% ============================================================================= + %% PHASE 8: Isle of the Mists - Druids + %% ============================================================================= + subgraph area_iom["Isle of the Mists - Druids"] + P_PROBLEM_DRUIDS["Problem: Druids will burn you without protection"] + A_CAST_RAIN_SPELL["A: Cast Rain Spell (Baby's Tears + Milk + Hunter's Lamp)"] + O_RAIN_PROTECTION["O: Rain protection active"] + + A_WEAR_BEAUTYS_DRESS["A: Wear Beauty's Dress"] + O_DRUID_PROTECTION["O: Survive Druid ceremony"] + + A_GET_SCYTHE["A: Pick up Scythe from village"] + O_RECEIVE_SCYTHE["O: Receive Scythe"] + + A_GET_COAL["A: Pick up Coal from firepit"] + O_RECEIVE_COAL_IOM["O: Receive Coal (from IoM)"] + end + + O_RECEIVE_BABYS_TEARS & O_RECEIVE_MILK & O_RECEIVE_HUNTERS_LAMP --> A_CAST_RAIN_SPELL + A_CAST_RAIN_SPELL --> O_RAIN_PROTECTION + O_RAIN_PROTECTION & O_RECEIVE_BEAUTYS_DRESS --> P_PROBLEM_DRUIDS + P_PROBLEM_DRUIDS --> A_WEAR_BEAUTYS_DRESS + A_WEAR_BEAUTYS_DRESS --> O_DRUID_PROTECTION + + A_GET_SCYTHE --> O_RECEIVE_SCYTHE + A_GET_COAL --> O_RECEIVE_COAL_IOM + + O_RECEIVE_COAL_IOM --> A_TRADE_COAL_FOR_EGG + O_TRADE_COAL_FOR_EGG -.-> O_RECEIVE_SULFUR_EGG["O: Receive Sulfur Egg"] + + %% ============================================================================= + %% PHASE 9: Realm of the Dead + %% ============================================================================= + subgraph area_rod_landing["Realm of the Dead - Landing Point"] + P_PROBLEM_ENTER_ROD["Problem: Need to reach Land of the Dead"] + A_RIDE_NIGHTMARE["A: Ride Nightmare horse"] + C7["Arrive at Land of the Dead"] + + P_PROBLEM_ZOMBIES["Problem: Zombies block path"] + A_AVOID_ZOMBIES["A: Navigate past zombies carefully"] + O_ZOMBIES_PASSED["O: Zombies avoided"] + end + + O_NIGHTMARE_MOUNT --> P_PROBLEM_ENTER_ROD + P_PROBLEM_ENTER_ROD --> A_RIDE_NIGHTMARE + A_RIDE_NIGHTMARE --> C7 + C7 --> P_PROBLEM_ZOMBIES + P_PROBLEM_ZOMBIES --> A_AVOID_ZOMBIES + A_AVOID_ZOMBIES --> O_ZOMBIES_PASSED + + subgraph area_rod_pathway["Realm of the Dead - Pathway"] + A_TALK_TO_CASSIMA_PARENTS["A: Talk to Cassima's parents"] + O_RECEIVE_TICKET["O: Receive Ticket to Underworld"] + + A_TALK_TO_GHOST_MOTHER["A: Talk to Ghost Mother"] + O_RECEIVE_HANKERCHIEF["O: Receive Handkerchief"] + end + + O_ZOMBIES_PASSED --> A_TALK_TO_CASSIMA_PARENTS + O_ZOMBIES_PASSED --> A_TALK_TO_GHOST_MOTHER + A_TALK_TO_CASSIMA_PARENTS --> O_RECEIVE_TICKET + A_TALK_TO_GHOST_MOTHER --> O_RECEIVE_HANKERCHIEF + + subgraph area_rod_gate["Realm of the Dead - Gate"] + P_PROBLEM_GATE["Problem: Need ticket for underworld"] + A_GIVE_TICKET["A: Give ticket to skeleton gatekeeper"] + C8["Gate to Styx opens"] + + A_PLAY_BONES["A: Play bone xylophone"] + O_RECEIVE_SKELETON_KEY["O: Receive Skeleton Key"] + + P_PROBLEM_CHARON["Problem: Need to pay Charon's ferry"] + A_PAY_CHARON["A: Pay Charon with Dead Man's Coins"] + O_FERRY_ACCESS["O: Ferry access granted"] + end + + O_RECEIVE_TICKET --> P_PROBLEM_GATE + P_PROBLEM_GATE --> A_GIVE_TICKET + A_GIVE_TICKET --> C8 + C8 --> A_PLAY_BONES + C8 --> P_PROBLEM_CHARON + O_RECEIVE_COINS --> A_PAY_CHARON + A_PAY_CHARON --> O_FERRY_ACCESS + + subgraph area_rod_styx["Realm of the Dead - River Styx"] + P_PROBLEM_STYX["Problem: Need Styx Water for paint spell"] + A_COLLECT_STYX_WATER["A: Collect Styx Water with Tea Cup"] + O_RECEIVE_STYX_WATER["O: Receive Styx Water"] + + A_SEARCH_KNIGHT["A: Search dead knight"] + O_RECEIVE_GAUNTLET["O: Receive Gauntlet"] + end + + O_RECEIVE_TEA_CUP --> A_COLLECT_STYX_WATER + A_COLLECT_STYX_WATER --> O_RECEIVE_STYX_WATER + C8 --> A_SEARCH_KNIGHT + A_SEARCH_KNIGHT --> O_RECEIVE_GAUNTLET + + subgraph area_rod_throne["Realm of the Dead - Talking Gate & Throne"] + P_PROBLEM_GATE_RIDDLE["Problem: Gate asks riddle"] + A_ANSWER_LOVE["A: Answer 'LOVE' (from spider web)"] + C9["Gate opens to Death's domain"] + + P_PROBLEM_DEATH["Problem: Must make Death cry"] + A_SHOW_MIRROR_DEATH["A: Show Mirror to Death"] + C10["Death cries, parents freed"] + end + + O_RECEIVE_LOVE_WORD --> P_PROBLEM_GATE_RIDDLE + P_PROBLEM_GATE_RIDDLE --> A_ANSWER_LOVE + A_ANSWER_LOVE --> C9 + C9 --> P_PROBLEM_DEATH + O_RECEIVE_MIRROR --> A_SHOW_MIRROR_DEATH + A_SHOW_MIRROR_DEATH --> C10 + C10 --> C_RETURN["Return to Isle of the Crown Beach"] + + %% ============================================================================= + %% PHASE 10: Castle Infiltration + %% ============================================================================= + subgraph area_castle_approach["Castle Infiltration - Two Paths Converge"] + P_PROBLEM_ENTER_CASTLE["Problem: Cannot enter castle normally"] + + %% Long Path - Paint Door + A_PAINT_DOOR["A: Paint door (Feather + Ooze + Styx + Paintbrush)"] + A_CAST_PAINT_SPELL["A: Cast Magic Paint Spell (with Spellbook)"] + O_DOOR_APPEARS["O: Secret door appears"] + + %% Short Path - Disguise + A_WEAR_DISGUISE["A: Wear Beauty's Dress as disguise"] + O_CASTLE_ACCESS["O: Castle access granted"] + end + + C_RETURN --> P_PROBLEM_ENTER_CASTLE + P_PROBLEM_ENTER_CASTLE --> A_PAINT_DOOR + P_PROBLEM_ENTER_CASTLE --> A_WEAR_DISGUISE + + O_RECEIVE_BLACK_FEATHER & O_RECEIVE_SWAMP_OOZE & O_RECEIVE_STYX_WATER & O_RECEIVE_PAINTBRUSH --> A_PAINT_DOOR + A_PAINT_DOOR --> A_CAST_PAINT_SPELL + A_CAST_PAINT_SPELL --> O_DOOR_APPEARS + O_RECEIVE_BEAUTYS_DRESS --> A_WEAR_DISGUISE + A_WEAR_DISGUISE --> O_CASTLE_ACCESS + + subgraph area_castle_basement["Castle - Basement / Cells"] + P_PROBLEM_GUARDS["Problem: Guards patrol basement"] + A_DISTRACT_GUARDS["A: Use Nightingale to distract guards"] + O_GUARDS_DISTRACTED["O: Guards distracted"] + + A_TALK_TO_GHOST_BOY["A: Talk to Ghost Boy"] + O_RECEIVE_PASSAGE_HINT["O: Hint about secret armor"] + + P_PROBLEM_JOLLO_ROOM["Problem: Need Jollo's help for best ending"] + A_GIVE_LAMP_REPLICA["A: Give lamp replica to Jollo"] + O_JOLLO_HELPS["O: Jollo will help in finale"] + end + + O_DOOR_APPEARS & O_CASTLE_ACCESS --> P_PROBLEM_GUARDS + P_PROBLEM_GUARDS --> A_DISTRACT_GUARDS + A_DISTRACT_GUARDS --> O_GUARDS_DISTRACTED + O_GUARDS_DISTRACTED --> A_TALK_TO_GHOST_BOY + A_TALK_TO_GHOST_BOY --> O_RECEIVE_PASSAGE_HINT + + subgraph area_castle_passage["Castle - Secret Passage"] + P_PROBLEM_PASSWORD["Problem: Need password to proceed"] + A_FIND_ALI_PASSWORD["A: Eavesdrop to learn 'ALI'"] + A_FIND_ZEBU_PASSWORD["A: Spy on Vizier to learn 'ZEBU'"] + O_PASSWORD_ALI["O: Password fragment 'ALI'"] + O_PASSWORD_ZEBU["O: Password fragment 'ZEBU'"] + + P_PROBLEM_CASSIMA["Problem: Cassima needs weapon"] + A_GIVE_DAGGER["A: Give Dagger to Cassima"] + O_CASSIMA_ARMED["O: Cassima has dagger"] + end + + O_GUARDS_DISTRACTED --> P_PROBLEM_PASSWORD + O_GUARDS_DISTRACTED --> P_PROBLEM_CASSIMA + P_PROBLEM_PASSWORD --> A_FIND_ALI_PASSWORD + P_PROBLEM_PASSWORD --> A_FIND_ZEBU_PASSWORD + A_FIND_ALI_PASSWORD --> O_PASSWORD_ALI + A_FIND_ZEBU_PASSWORD --> O_PASSWORD_ZEBU + + O_PASSWORD_ALI & O_PASSWORD_ZEBU --> A_COMBINE_PASSWORD["A: Combine 'ALI ZEBU'"] + O_RECEIVE_DAGGER --> A_GIVE_DAGGER + A_GIVE_DAGGER --> O_CASSIMA_ARMED + + subgraph area_castle_vizier["Castle - Vizier's Bedroom"] + P_PROBLEM_VIZIER_CHEST["Problem: Need to open Vizier's chest"] + A_UNLOCK_CHEST["A: Use Skeleton Key on chest"] + O_RECEIVE_VIZIER_LETTER["O: Receive Vizier's Letter"] + + P_PROBLEM_TREASURY["Problem: Treasury password required"] + A_OPEN_TREASURY["A: Enter 'ALI ZEBU'"] + O_TREASURY_OPEN["O: Treasury opens"] + end + + O_RECEIVE_SKELETON_KEY --> P_PROBLEM_VIZIER_CHEST + P_PROBLEM_VIZIER_CHEST --> A_UNLOCK_CHEST + A_UNLOCK_CHEST --> O_RECEIVE_VIZIER_LETTER + + A_COMBINE_PASSWORD --> P_PROBLEM_TREASURY + P_PROBLEM_TREASURY --> A_OPEN_TREASURY + A_OPEN_TREASURY --> O_TREASURY_OPEN + + %% ============================================================================= + %% PHASE 11: Final Confrontation + %% ============================================================================= + subgraph area_final["Final Confrontation"] + P_PROBLEM_GENIE["Problem: Genie attacks"] + + A_USE_FAKE_LAMP["A: Use Fake Genie Lamp (from Jollo)"] + O_GENIE_CONTROLLED["O: Genie controlled - BEST ENDING"] + + A_GIVE_MINT_GENIE["A: Give Peppermint Leaves to genie"] + O_GENIE_DRUNK["O: Genie incapacitated - ALT ENDING"] + + P_PROBLEM_VIZIER["Problem: Vizier fights"] + A_FIGHT_VIZIER["A: Fight Vizier with Sword + Cassima"] + END(["END: Victory - KQVI Complete"]) + end + + O_JOLLO_HELPS --> P_PROBLEM_GENIE + P_PROBLEM_GENIE --> A_USE_FAKE_LAMP + P_PROBLEM_GENIE --> A_GIVE_MINT_GENIE + + A_USE_FAKE_LAMP --> O_GENIE_CONTROLLED + A_GIVE_MINT_GENIE --> O_GENIE_DRUNK + + O_GENIE_CONTROLLED & O_GENIE_DRUNK --> P_PROBLEM_VIZIER + P_PROBLEM_VIZIER --> A_FIGHT_VIZIER + A_FIGHT_VIZIER --> END + + O_RECEIVE_VIZIER_LETTER -.-> A_SHOW_LETTER["A: Show Vizier's Letter to Saladin"] + O_CASSIMA_ARMED -.-> A_CASSIMA_FIGHTS["A: Cassima fights alongside"] + + %% ============================================================================= + %% CLASS ASSIGNMENTS + %% ============================================================================= + class START,END,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C_RETURN start_end + class P_PROBLEM_PAWN_SHOP,P_PROBLEM_NEED_MAP,P_PROBLEM_FERRYMAN,P_PROBLEM_JOLLO,P_PROBLEM_GNOMES,P_PROBLEM_BOILING_POOL,P_PROBLEM_MAZE_L1,P_PROBLEM_DARK_L2,P_PROBLEM_MINOTAUR,P_PROBLEM_ARCHER,P_PROBLEM_ROSE_HEDGE,P_PROBLEM_MEET_BEAST,P_PROBLEM_LOGIC_CLIFFS,P_PROBLEM_DARK_CAVE,P_PROBLEM_POISON_LADY,P_PROBLEM_SPELL_COMPONENTS,P_PROBLEM_DRUIDS,P_PROBLEM_ENTER_ROD,P_PROBLEM_ZOMBIES,P_PROBLEM_GATE,P_PROBLEM_CHARON,P_PROBLEM_STYX,P_PROBLEM_GATE_RIDDLE,P_PROBLEM_DEATH,P_PROBLEM_ENTER_CASTLE,P_PROBLEM_GUARDS,P_PROBLEM_PASSWORD,P_PROBLEM_CASSIMA,P_PROBLEM_VIZIER_CHEST,P_PROBLEM_TREASURY,P_PROBLEM_GENIE,P_PROBLEM_VIZIER problem + class A_MOVE_PLANK,A_EXAMINE_DEBRIS,A_SHOW_RING_TO_GUARDS,A_TALK_TO_PAWN_BROKER,A_TRADE_RING_FOR_MAP,A_TALK_TO_FERRYMAN,A_TALK_TO_JOLLO,A_SHOW_RING_TO_JOLLO,A_SEARCH_BOOKSHELF,A_GIVE_STINKY_FLOWER,A_PLAY_NIGHTINGALE,A_GIVE_MINT,A_GIVE_RABBIT_FOOT,A_USE_INK_ON_SELF,A_READ_BOOK_TO_OYSTER,A_PLAY_FLUTE_FLOWERS,A_PICK_ICEY_LETTUCE,A_PICK_ROTTEN_TOMATO,A_GIVE_ROTTEN_TOMATO,A_GIVE_MILK_TO_PLANT,A_GET_MILK_BOTTLE,A_GET_TEA_CUP,A_PICK_DRINK_ME_POTION,A_TALK_TO_QUEENS,A_PULL_THREAD,A_SEARCH_POETRY_SHELF,A_TRADE_PARTICIPLE_BOOK,A_COOL_POOL,A_GET_BRICK,A_GET_HUNTERS_LAMP,A_GET_DANGLING_PARTICIPLE,A_SOLVE_TILE_PUZZLE,A_NAVIGATE_TO_SKELETON,A_COLLECT_COINS,A_USE_BRICK_TRAP,A_LIGHT_TINDERBOX,A_USE_HOLE_IN_WALL,A_FIND_SHIELD,A_LURE_MINOTAUR,A_USE_SHIELD_STATUE,A_CUT_HEDGE,A_GIVE_WHITE_ROSE,A_GIVE_RING_TO_BEAUTY,A_PLACE_ROSE,A_SOLVE_CLIFF_PUZZLES,A_GET_BLACK_FEATHER,A_GET_STINKY_FLOWER,A_LIGHT_CAVE,A_REJECT_POISON,A_COLLECT_COMPONENTS,A_GET_EMBER,A_GET_HAIR,A_GET_SPOILED_EGG,A_CAST_CHARM_SPELL,A_CAST_RAIN_SPELL,A_WEAR_BEAUTYS_DRESS,A_GET_SCYTHE,A_GET_COAL,A_RIDE_NIGHTMARE,A_AVOID_ZOMBIES,A_TALK_TO_CASSIMA_PARENTS,A_TALK_TO_GHOST_MOTHER,A_GIVE_TICKET,A_PLAY_BONES,A_PAY_CHARON,A_COLLECT_STYX_WATER,A_SEARCH_KNIGHT,A_ANSWER_LOVE,A_SHOW_MIRROR_DEATH,A_PAINT_DOOR,A_CAST_PAINT_SPELL,A_WEAR_DISGUISE,A_DISTRACT_GUARDS,A_TALK_TO_GHOST_BOY,A_GIVE_LAMP_REPLICA,A_FIND_ALI_PASSWORD,A_FIND_ZEBU_PASSWORD,A_GIVE_DAGGER,A_COMBINE_PASSWORD,A_UNLOCK_CHEST,A_OPEN_TREASURY,A_USE_FAKE_LAMP,A_GIVE_MINT_GENIE,A_FIGHT_VIZIER,A_TRADE_WITH_BROKER_N,A_TRADE_WITH_BROKER_F,A_TRADE_WITH_BROKER_T,A_TRADE_COAL_FOR_EGG action + class O_RECEIVE_COPPER_COIN,O_RECEIVE_ROYAL_RING,O_RECEIVE_NIGHTINGALE,O_RECEIVE_MINT,O_RECEIVE_TINDERBOX,O_RECEIVE_FLUTE,O_RECEIVE_PAINTBRUSH,O_RECEIVE_INK,O_RECEIVE_MAGIC_MAP,O_RECEIVE_RABBIT_FOOT,O_RECEIVE_JOLLO_TRUST,O_RECEIVE_LOVE_POEM,O_GNOMES_SMELL_DONE,O_GNOMES_HEARING_DONE,O_GNOMES_TASTE_DONE,O_GNOMES_TOUCH_DONE,O_GNOMES_SIGHT_DONE,O_RECEIVE_PEARL,O_RECEIVE_HOLE_IN_WALL,O_RECEIVE_ICEY_LETTUCE,O_RECEIVE_ROTTEN_TOMATO,O_RECEIVE_SWAMP_OOZE,O_RECEIVE_BABYS_TEARS,O_RECEIVE_MILK,O_RECEIVE_TEA_CUP,O_RECEIVE_DRINK_ME,O_RECEIVE_RED_SCARF,O_RECEIVE_LUMP_OF_COAL,O_RECEIVE_LOVE_WORD,O_RECEIVE_SPIDER_WEB,O_RECEIVE_LOVE_POEM_IOW,O_RECEIVE_RARE_BOOK,O_RECEIVE_BRICK,O_RECEIVE_HUNTERS_LAMP,O_RECEIVE_DANGLING_PARTICIPLE,O_MAZE_PATH_OPEN,O_RECEIVE_SKULL,O_RECEIVE_COINS,O_TRAP_STOPPED,O_CAN_SEE,O_REVEAL_TAPESTRY,O_RECEIVE_SHIELD,O_RECEIVE_DAGGER,O_RECEIVE_SACRED_WATER,O_RECEIVE_ORACLE_VIAL,O_RECEIVE_SCARF_CONV,O_BEAUTY_TRUSTS,O_RECEIVE_BEAUTYS_DRESS,O_RECEIVE_MIRROR,O_RECEIVE_BEASTS_RING,O_RECEIVE_WHITE_ROSE_2,O_RECEIVE_BLACK_FEATHER,O_RECEIVE_STINKY_FLOWER,O_RECEIVE_PEPPERMINT,O_SURVIVED,O_SPELL_READY,O_RECEIVE_EMBER,O_RECEIVE_HAIR,O_RECEIVE_SPOILED_EGG,O_NIGHTMARE_MOUNT,O_RAIN_PROTECTION,O_DRUID_PROTECTION,O_RECEIVE_SCYTHE,O_RECEIVE_COAL_IOM,O_RECEIVE_SULFUR_EGG,O_ZOMBIES_PASSED,O_RECEIVE_TICKET,O_RECEIVE_HANKERCHIEF,O_RECEIVE_SKELETON_KEY,O_FERRY_ACCESS,O_RECEIVE_STYX_WATER,O_RECEIVE_GAUNTLET,O_DOOR_APPEARS,O_CASTLE_ACCESS,O_GUARDS_DISTRACTED,O_RECEIVE_PASSAGE_HINT,O_JOLLO_HELPS,O_PASSWORD_ALI,O_PASSWORD_ZEBU,O_CASSIMA_ARMED,O_RECEIVE_VIZIER_LETTER,O_TREASURY_OPEN,O_GENIE_CONTROLLED,O_GENIE_DRUNK outcome diff --git a/src/inspiration/kings-quest-vi-heir-today-gone-tomorrow.md b/src/inspiration/kings-quest-vi-heir-today-gone-tomorrow.md index c17a549..2c188d6 100644 --- a/src/inspiration/kings-quest-vi-heir-today-gone-tomorrow.md +++ b/src/inspiration/kings-quest-vi-heir-today-gone-tomorrow.md @@ -8,6 +8,8 @@ This chart maps the critical puzzle dependencies in Sierra's King's Quest VI (19 *Click the image to view the full-size version (opens in new tab).* +**Raw Mermaid Source**: [kings-quest-vi-chart.mmd](kings-quest-vi-chart.mmd) + ## Locked Choice Mechanic The Pawn Shop in the Village operates on a **locked choice system** where only one item can be unlocked at a time through trading: diff --git a/todos/TODOS.md b/todos/TODOS.md index 2c5b14d..8996d6f 100644 --- a/todos/TODOS.md +++ b/todos/TODOS.md @@ -1,21 +1,11 @@ # TODO List -## Current Task: Switch from embedded mermaid to rendered images - -- [x] Render mermaid diagram to images - - [x] Install mermaid CLI (if not present) - - [x] Extract mermaid code from kings-quest-vi-heir-today-gone-tomorrow.md - - [x] Render preview and full-size images -- [x] Update markdown to embed images - - [x] Replace mermaid block with image embed - - [x] Add link to full-size image -- [x] Clean up broken JS - - [x] Remove mermaid-lightbox.js from book.toml additional-js - - [x] Delete mermaid-lightbox.js file - - [x] Restore mermaid-init.js if modified (not modified, keep it) -- [x] Test with mdbook build -- [x] Commit changes - ## Complete -All tasks completed. Changes committed as d21555f. +- Re-render KQVI mermaid chart at higher resolution (3000px/6000px) - committed + - Created kings-quest-vi-chart.mmd with raw mermaid source + - Rendered preview at 3000px wide (247KB PNG) + - Rendered full-size at 6000px wide (657KB PNG) + - Added link to raw mermaid code in markdown + - mdbook build verified + - Committed as 1a2b3c4