{"id":26121,"date":"2025-07-23T14:26:23","date_gmt":"2025-07-23T05:26:23","guid":{"rendered":"http:\/\/www.tyosuke20xx.com\/blog\/?p=26121"},"modified":"2025-07-23T14:26:24","modified_gmt":"2025-07-23T05:26:24","slug":"vrmmorpg-%e3%82%a8%e3%83%ab%e3%83%80%e3%83%bc%e3%82%af%e3%83%ad%e3%83%8b%e3%82%af%e3%83%ab%e3%82%aa%e3%83%b3%e3%83%a9%e3%82%a4%e3%83%b3","status":"publish","type":"post","link":"http:\/\/www.tyosuke20xx.com\/blog\/?p=26121","title":{"rendered":"VRMMORPG \u30a8\u30eb\u30c0\u30fc\u30af\u30ed\u30cb\u30af\u30eb\u30aa\u30f3\u30e9\u30a4\u30f3"},"content":{"rendered":"\n<pre class=\"wp-block-code\"><code>\n&lt;!DOCTYPE html>\n&lt;html lang=\"ja\">\n&lt;head>\n  &lt;meta charset=\"UTF-8\">\n  &lt;title>VRMMORPG \u30a8\u30eb\u30c0\u30fc\u30af\u30ed\u30cb\u30af\u30eb\u30aa\u30f3\u30e9\u30a4\u30f3&lt;\/title>\n  &lt;script src=\"https:\/\/cdn.jsdelivr.net\/npm\/aframe@1.4.2\/dist\/aframe-master.min.js\">&lt;\/script>\n  &lt;style>\n    \/* Basic body and global positioning *\/\n    body { margin: 0; background: #111; overflow: hidden; font-family: 'Noto Sans JP', sans-serif;} \/* Prevent scrollbars and set default font *\/\n    #overlay, #dialogue, #partyStatus, #hint, #warpBtns, #shopDiv, #nightFilter, #questClear, #battleEffect { position:fixed; z-index:10;}\n\n    \/* Overlay - Main Title\/Instructions *\/\n    #overlay {\n      left:0; top:0; width:100vw; height:100vh; pointer-events:none; text-align:center;\n      color:#0ff; text-shadow:0 0 40px #0ff, 0 0 15px #fff; \/* Enhanced glow *\/\n      font-family: 'Orbitron', monospace; font-size:2.8rem; letter-spacing:4px; user-select:none;\n      display: flex; align-items: center; justify-content: center; \/* Center content vertically *\/\n      line-height: 1.5; \/* Improve readability for multi-line text *\/\n      background: rgba(0,0,0,0.6); \/* Slightly darker overlay for better contrast *\/\n      transition: opacity 1s ease-out; \/* Fade out effect *\/\n    }\n\n    \/* Dialogue Box *\/\n    #dialogue {\n      left:50%; bottom:5vw; transform:translateX(-50%);\n      min-width:360px; max-width:85vw; \/* Larger dialogue box *\/\n      background:linear-gradient(160deg, rgba(20,32,40,0.98), rgba(10,20,30,0.98)); \/* Deeper gradient *\/\n      color:#fff; border-radius:20px; padding:1.8em 2.5em; \/* More padding, rounder corners *\/\n      font-size:1.25rem; z-index:100;\n      border:4px solid #0ff; \/* Thicker, more prominent border *\/\n      box-shadow: 0 0 35px #0ffc, inset 0 0 15px #0ff5; \/* Stronger outer glow, subtle inner shadow *\/\n      display:none;\n      font-family: 'Noto Sans JP', sans-serif; text-align:left;\n      backdrop-filter: blur(5px); \/* Stronger blur effect *\/\n      animation: fadeIn 0.5s ease-out;\n    }\n    #dialogue .name { color: #ffd700; font-weight: bold; text-shadow: 0 0 8px #ffda00, 0 0 3px #fff; } \/* Gold name with stronger glow *\/\n    #dialogue .choice {\n      display:block; margin:1em 0; padding:0.8em 1.8em; \/* More padding for bigger touch target *\/\n      background:linear-gradient(145deg, #184c52, #103a3d); \/* Darker, richer gradient for choices *\/\n      color:#0ff; border:none; border-radius:12px; \/* Rounder buttons *\/\n      cursor:pointer; font-size:1.2em; font-weight:bold;\n      box-shadow: 0 6px 15px rgba(0,255,255,0.4); \/* Button shadow *\/\n      transition: all 0.3s cubic-bezier(.25,.8,.25,1); \/* Smooth transitions *\/\n      text-shadow: 0 0 7px #0ff, 0 0 2px #fff; \/* Text glow *\/\n      letter-spacing: 0.5px;\n    }\n    #dialogue .choice:hover {\n      background:linear-gradient(145deg, #256a73, #1a4d52); \/* Darker gradient on hover *\/\n      transform: translateY(-5px) scale(1.03); \/* More pronounced lift effect *\/\n      box-shadow: 0 10px 25px rgba(0,255,255,0.7); \/* Stronger shadow on hover *\/\n    }\n    #dialogue .choice:active {\n      transform: translateY(0); \/* Press down effect *\/\n      box-shadow: 0 2px 8px rgba(0,255,255,0.3);\n    }\n\n    \/* Party Status *\/\n    #partyStatus {\n      right:2vw; top:2vw; background:linear-gradient(160deg, rgba(16,32,45,0.96), rgba(8,16,22,0.96)); \/* Deeper gradient *\/\n      border:3px solid #0ff; color:#fff; border-radius:15px; padding:1.2em 1.8em; \/* More padding, rounder *\/\n      font-size:1.15rem; min-width:220px; \/* Slightly wider *\/\n      box-shadow: 0 0 18px #0ffc, inset 0 0 8px #0ff5; \/* Enhanced shadow *\/\n      font-family:'Noto Sans JP', sans-serif; \/* Consistent font *\/\n      backdrop-filter: blur(3px);\n      line-height: 1.6;\n    }\n    .dead { color:#f44; text-shadow:0 0 9px #f00, 0 0 5px #f88;} \/* Stronger death glow *\/\n    .alive { color:#fff; text-shadow:0 0 3px #fff; } \/* Subtle glow for alive *\/\n\n    \/* Hint Box *\/\n    #hint {\n      left:2vw; bottom:2vw; background:linear-gradient(160deg, rgba(24,32,60,0.95), rgba(12,16,30,0.95)); \/* Deeper gradient *\/\n      border:2px solid #0ff; color:#0ff; border-radius:12px; padding:0.8em 1.5em;\n      font-size:1.2rem; min-width:150px; text-align:center;\n      box-shadow: 0 0 15px #0ff9;\n      font-family:'Noto Sans JP', sans-serif;\n      backdrop-filter: blur(3px);\n    }\n\n    \/* Warp Buttons Container (now at bottom center) *\/\n    #warpBtns {\n      left: 50%; bottom: 2vw; transform: translateX(-50%); \/* Centered at bottom *\/\n      display: flex; flex-direction: row; \/* Horizontal layout *\/\n      justify-content: center; align-items: center;\n      width: 80vw; \/* Occupy more width *\/\n      flex-wrap: wrap; \/* Allow wrapping on smaller screens *\/\n    }\n    #warpBtns button {\n      margin:0.8em 1em; padding:0.9em 2em; \/* More padding and margin *\/\n      font-size:1.3em;\n      background:linear-gradient(145deg, #0ff6, #0ff2); \/* Lighter, more vibrant gradient *\/\n      color:#fff; border-radius:15px; border:3px solid #0ff; \/* Thicker border *\/\n      cursor:pointer;\n      box-shadow: 0 6px 18px rgba(0,255,255,0.5); \/* Stronger shadow *\/\n      transition: all 0.3s cubic-bezier(.25,.8,.25,1); \/* Smooth transitions *\/\n      text-shadow: 0 0 10px #fff, 0 0 7px #0ff; \/* White core glow *\/\n      letter-spacing: 1px;\n      font-weight: bold;\n    }\n    #warpBtns button:hover {\n      background:linear-gradient(145deg, #0ff8, #0ff4); \/* Stronger gradient on hover *\/\n      transform: translateY(-6px) scale(1.04); \/* More pronounced lift and scale *\/\n      box-shadow: 0 12px 30px rgba(0,255,255,0.8);\n      border-color: #fff; \/* White border on hover *\/\n    }\n    #warpBtns button:active {\n      transform: translateY(0) scale(1);\n      box-shadow: 0 3px 10px rgba(0,255,255,0.4);\n    }\n\n    \/* NPC Label - A-Frame text is styled separately *\/\n    .npc-label { color:#ffd700; font-family: 'Noto Sans JP',monospace; font-size:1.0em; text-align:center; text-shadow:0 0 4px #000;}\n\n    \/* Shop Div *\/\n    #shopDiv {\n      display:none; left:50%; top:50%; transform:translate(-50%,-50%);\n      min-width:420px; max-width:95vw; \/* Larger shop *\/\n      background:linear-gradient(160deg, rgba(22,42,70,0.99), rgba(11,21,35,0.99)); \/* Darker, richer gradient *\/\n      color:#fff; border-radius:25px; padding:2.5em 3em; \/* More padding, rounder *\/\n      font-size:1.3rem; z-index:110;\n      border:4px solid #ff0; \/* Thicker gold border *\/\n      box-shadow: 0 0 40px #ff0c, inset 0 0 20px #ff05; \/* Intense gold glow *\/\n      backdrop-filter: blur(6px);\n    }\n    #shopDiv .shop-item {\n      display: flex; justify-content: space-between; align-items: center;\n      padding: 0.8em 0; border-bottom: 1px solid rgba(255,255,0,0.2);\n    }\n    #shopDiv .shop-item:last-child { border-bottom: none; }\n    #shopDiv button {\n      margin:0.8em 0.8em 0 0; padding:0.9em 1.8em; \/* More padding *\/\n      font-size:1.2em; border-radius:15px; border:3px solid #ff0;\n      background:linear-gradient(145deg, #282828, #181818); \/* Dark gradient *\/\n      color:#ff0; cursor:pointer;\n      box-shadow: 0 4px 12px rgba(255,255,0,0.5);\n      transition: all 0.3s cubic-bezier(.25,.8,.25,1);\n      text-shadow: 0 0 7px #ff0;\n      font-weight: bold;\n    }\n    #shopDiv button:hover {\n      background:linear-gradient(145deg, #ff0, #e0d000); \/* Gold gradient on hover *\/\n      color:#222;\n      transform: translateY(-3px);\n      box-shadow: 0 7px 20px rgba(255,255,0,0.7);\n    }\n    #shopDiv button:active {\n      transform: translateY(0);\n      box-shadow: 0 2px 5px rgba(255,255,0,0.3);\n    }\n    #shopDiv .close-button {\n      position: absolute; top: 15px; right: 20px;\n      background: none; border: none; font-size: 2em; color: #ff0;\n      cursor: pointer; text-shadow: 0 0 10px #ff0;\n    }\n    #shopDiv .close-button:hover {\n      color: #fff; text-shadow: 0 0 15px #fff;\n    }\n\n    \/* Night Filter *\/\n    #nightFilter {left:0;top:0;width:100vw;height:100vh;z-index:5;pointer-events:none; background:rgba(0,8,38,0.27);transition:background 2s ease-in-out;}\n\n    \/* Quest Clear Notification *\/\n    #questClear {\n      display:none; left:0; top:0; width:100vw; height:100vh; z-index:150;\n      background:rgba(16,255,255,0.45); \/* More opaque *\/\n      color:#fff; font-size:6vw; font-family:Orbitron,sans-serif; text-align:center;\n      line-height:100vh; letter-spacing:0.25em; text-shadow:0 0 50px #0ff,0 0 20px #fff; \/* Stronger glow *\/\n      animation: pulseGlow 1.2s infinite alternate; \/* Faster pulsing animation *\/\n    }\n\n    \/* Battle Effect Overlay *\/\n    #battleEffect {\n      display: none;\n      left: 0; top: 0; width: 100vw; height: 100vh; z-index: 120;\n      background: rgba(255, 0, 0, 0.2); \/* Red tint *\/\n      pointer-events: none;\n      animation: battleFlash 0.3s ease-out;\n    }\n\n    \/* Keyframe for Quest Clear pulse effect *\/\n    @keyframes pulseGlow {\n      from { text-shadow:0 0 50px #0ff,0 0 20px #fff; transform: scale(1); opacity: 1; }\n      to { text-shadow:0 0 65px #0ff,0 0 25px #fff; transform: scale(1.03); opacity: 0.9; }\n    }\n\n    \/* Keyframe for Battle Flash effect *\/\n    @keyframes battleFlash {\n      0% { opacity: 0; }\n      50% { opacity: 1; }\n      100% { opacity: 0; }\n    }\n\n    \/* Fade In Animation for UI elements *\/\n    @keyframes fadeIn {\n      from { opacity: 0; transform: translate(-50%, -40%); }\n      to { opacity: 1; transform: translate(-50%, 0); }\n    }\n  &lt;\/style>\n&lt;\/head>\n&lt;body>\n  &lt;div id=\"overlay\">WASD\u3067\u79fb\u52d5\u30fb\u30de\u30a6\u30b9\u3067\u8996\u70b9\uff0f\u30af\u30ea\u30c3\u30af\u3067\u4f1a\u8a71\u30fb\u30d0\u30c8\u30eb\u30fb\u9032\u884c\uff01&lt;br>\u7b2c\u4e00\u7ae0\uff5e\u9b54\u754c\u307e\u3067\u5168\u7ae0\u30d5\u30eb\u30b7\u30ca\u30ea\u30aa\uff06\u5168\u6a5f\u80fd\uff01&lt;\/div>\n  &lt;div id=\"dialogue\">&lt;\/div>\n  &lt;div id=\"partyStatus\">&lt;\/div>\n  &lt;div id=\"hint\">\u53f3\u4e0b\u306e\u8ee2\u79fb\u30dc\u30bf\u30f3\u3067\u3069\u3053\u3067\u3082\u30ef\u30fc\u30d7\u3002NPC\/Enemy\/\u5b9d\u7bb1\/\u30b7\u30e7\u30c3\u30d7\u3082\u5168\u3066\u30af\u30ea\u30c3\u30af\u5bfe\u5fdc\uff01&lt;\/div>\n  &lt;div id=\"warpBtns\">&lt;\/div>\n  &lt;div id=\"shopDiv\">&lt;\/div>\n  &lt;div id=\"nightFilter\">&lt;\/div>\n  &lt;div id=\"questClear\">\u30af\u30a8\u30b9\u30c8\u30af\u30ea\u30a2\uff01&lt;\/div>\n  &lt;div id=\"battleEffect\">&lt;\/div>\n\n  &lt;a-scene shadow=\"type:pcfsoft\" renderer=\"antialias: true; colorManagement: true;\">\n    &lt;!-- Ground and Sky -->\n    &lt;a-box id=\"ground\" width=\"200\" height=\"1\" depth=\"200\" color=\"#7ac870\" position=\"0 0 0\" shadow=\"receive: true\">&lt;\/a-box>\n    &lt;a-sky id=\"sky\" color=\"#b8e6ff\">&lt;\/a-sky>\n\n    &lt;!-- Player Rig and Camera -->\n    &lt;a-entity id=\"playerRig\" position=\"0 1.6 22\">\n      &lt;a-camera id=\"playerCam\" wasd-controls=\"acceleration:36\" look-controls=\"pointerLockEnabled: true\">&lt;\/a-camera>\n    &lt;\/a-entity>\n\n    &lt;!-- Lights -->\n    &lt;a-light id=\"dirlight\" type=\"directional\" color=\"#fff\" intensity=\"1.13\" position=\"10 20 10\" castShadow=\"true\">&lt;\/a-light>\n    &lt;a-light id=\"ambientlight\" type=\"ambient\" color=\"#b8e6ff\" intensity=\"0.62\">&lt;\/a-light>\n\n    &lt;!-- Character Models (Marichan, Marianne, Elina) -->\n    &lt;!-- \u771f\u7406 -->\n    &lt;a-entity id=\"marichan\" position=\"0 0.1 22\">\n      &lt;a-sphere position=\"0 1.7 0\" radius=\"0.43\" color=\"#f44\">&lt;\/a-sphere>\n      &lt;a-torus position=\"0 1.95 0\" radius=\"0.25\" radius-tubular=\"0.06\" color=\"#e44\" rotation=\"90 0 0\">&lt;\/a-torus>\n      &lt;a-cylinder position=\"0 1.1 0\" radius=\"0.21\" height=\"1.1\" color=\"#222\">&lt;\/a-cylinder>\n      &lt;a-sphere position=\"0.21 1.45 0\" radius=\"0.09\" color=\"#ff8888\">&lt;\/a-sphere>\n      &lt;a-sphere position=\"-0.21 1.45 0\" radius=\"0.09\" color=\"#ff8888\">&lt;\/a-sphere>\n      &lt;a-cylinder position=\"0.36 1.1 0\" radius=\"0.06\" height=\"0.5\" color=\"#f99\" rotation=\"0 0 22\">&lt;\/a-cylinder>\n      &lt;a-cylinder position=\"-0.36 1.1 0\" radius=\"0.06\" height=\"0.5\" color=\"#f99\" rotation=\"0 0 -22\">&lt;\/a-cylinder>\n      &lt;a-cylinder position=\"0.11 0.35 0\" radius=\"0.07\" height=\"0.47\" color=\"#222\" rotation=\"0 0 13\">&lt;\/a-cylinder>\n      &lt;a-cylinder position=\"-0.11 0.35 0\" radius=\"0.07\" height=\"0.47\" color=\"#222\" rotation=\"0 0 -13\">&lt;\/a-cylinder>\n      &lt;a-box position=\"0.37 1.0 0.12\" width=\"0.07\" height=\"0.5\" depth=\"0.07\" color=\"#222\">&lt;\/a-box>\n      &lt;a-box position=\"0.37 1.27 0.12\" width=\"0.05\" height=\"0.18\" depth=\"0.05\" color=\"#bfb\">&lt;\/a-box>\n      &lt;a-sphere position=\"0.12 1.82 0.39\" radius=\"0.04\" color=\"#fff\">&lt;\/a-sphere>\n      &lt;a-sphere position=\"-0.12 1.82 0.39\" radius=\"0.04\" color=\"#fff\">&lt;\/a-sphere>\n      &lt;a-sphere position=\"0.12 1.82 0.43\" radius=\"0.018\" color=\"#111\">&lt;\/a-sphere>\n      &lt;a-sphere position=\"-0.12 1.82 0.43\" radius=\"0.018\" color=\"#111\">&lt;\/a-sphere>\n      &lt;a-torus position=\"0 1.71 0.43\" radius=\"0.07\" radius-tubular=\"0.011\" color=\"#e88\" rotation=\"90 0 0\">&lt;\/a-torus>\n      &lt;a-text value=\"\u771f\u7406\" color=\"#fff\" position=\"0 2.23 0\" align=\"center\" width=\"7\">&lt;\/a-text>\n    &lt;\/a-entity>\n    &lt;!-- \u30de\u30ea\u30a2\u30f3\u30cc -->\n    &lt;a-entity id=\"marianne\" position=\"2.5 0.1 22\">\n      &lt;a-sphere position=\"0 1.7 0\" radius=\"0.42\" color=\"#ffe89b\">&lt;\/a-sphere>\n      &lt;a-cone position=\"0 2.18 0\" radius-bottom=\"0.13\" radius-top=\"0.01\" height=\"0.23\" color=\"#ffd700\">&lt;\/a-cone>\n      &lt;a-cylinder position=\"0 1.05 0\" radius=\"0.21\" height=\"1.1\" color=\"#e4e7f4\">&lt;\/a-cylinder>\n      &lt;a-cylinder position=\"0.28 1.12 0.09\" radius=\"0.06\" height=\"0.54\" color=\"#eac\" rotation=\"0 0 24\">&lt;\/a-cylinder>\n      &lt;a-cylinder position=\"-0.28 1.12 0.09\" radius=\"0.06\" height=\"0.54\" color=\"#eac\" rotation=\"0 0 -24\">&lt;\/a-cylinder>\n      &lt;a-box position=\"0.02 1.7 0.28\" width=\"0.10\" height=\"0.03\" depth=\"0.01\" color=\"#22f\">&lt;\/a-box>\n      &lt;a-text value=\"\u30de\u30ea\u30a2\u30f3\u30cc\" color=\"#fff\" position=\"0 2.2 0\" align=\"center\" width=\"7\">&lt;\/a-text>\n    &lt;\/a-entity>\n    &lt;!-- \u30a8\u30ea\u30ca -->\n    &lt;a-entity id=\"elina\" position=\"-2.5 0.1 22\">\n      &lt;a-sphere position=\"0 1.7 0\" radius=\"0.42\" color=\"#70e59b\">&lt;\/a-sphere>\n      &lt;a-cylinder position=\"0 1.05 0\" radius=\"0.21\" height=\"1.1\" color=\"#e3ffe3\">&lt;\/a-cylinder>\n      &lt;a-cone position=\"0.32 1.85 0\" radius-bottom=\"0.06\" radius-top=\"0.01\" height=\"0.18\" color=\"#fff\" rotation=\"0 0 50\">&lt;\/a-cone>\n      &lt;a-cone position=\"-0.32 1.85 0\" radius-bottom=\"0.06\" radius-top=\"0.01\" height=\"0.18\" color=\"#fff\" rotation=\"0 0 -50\">&lt;\/a-cone>\n      &lt;a-text value=\"\u30a8\u30ea\u30ca\" color=\"#fff\" position=\"0 2.2 0\" align=\"center\" width=\"7\">&lt;\/a-text>\n    &lt;\/a-entity>\n\n    &lt;!-- Enhanced Town (\u8857) Graphics - Position: 0 0 22 -->\n    &lt;a-entity id=\"town-scene\" position=\"0 0 22\">\n      &lt;!-- Main Building 1 (Guild) -->\n      &lt;a-box position=\"-8 2.5 -5\" width=\"6\" height=\"5\" depth=\"6\" color=\"#a0522d\" shadow=\"cast: true\">&lt;\/a-box>\n      &lt;a-cone position=\"-8 5.5 -5\" radius-bottom=\"4\" height=\"3\" color=\"#8b4513\" rotation=\"0 45 0\" shadow=\"cast: true\">&lt;\/a-cone>\n      &lt;a-text value=\"GUILD\" color=\"#333\" position=\"-8 4.5 -1.9\" align=\"center\" width=\"10\">&lt;\/a-text>\n      &lt;!-- Main Building 2 (Tavern) -->\n      &lt;a-box position=\"8 2.5 -5\" width=\"6\" height=\"5\" depth=\"6\" color=\"#a0522d\" shadow=\"cast: true\">&lt;\/a-box>\n      &lt;a-cone position=\"8 5.5 -5\" radius-bottom=\"4\" height=\"3\" color=\"#8b4513\" rotation=\"0 -45 0\" shadow=\"cast: true\">&lt;\/a-cone>\n      &lt;a-text value=\"TAVERN\" color=\"#333\" position=\"8 4.5 -1.9\" align=\"center\" width=\"10\">&lt;\/a-text>\n      &lt;!-- Inn -->\n      &lt;a-box position=\"0 2.5 -10\" width=\"8\" height=\"5\" depth=\"7\" color=\"#deb887\" shadow=\"cast: true\">&lt;\/a-box>\n      &lt;a-cone position=\"0 5.5 -10\" radius-bottom=\"5\" height=\"3\" color=\"#cd853f\" shadow=\"cast: true\">&lt;\/a-cone>\n      &lt;a-text value=\"INN\" color=\"#333\" position=\"0 4.5 -6.4\" align=\"center\" width=\"10\">&lt;\/a-text>\n      &lt;!-- Shop -->\n      &lt;a-box id=\"town-shop\" position=\"12 2.5 0\" width=\"5\" height=\"5\" depth=\"5\" color=\"#8fbc8f\" shadow=\"cast: true\">&lt;\/a-box>\n      &lt;a-pyramid position=\"12 5.5 0\" width=\"5\" height=\"3\" depth=\"5\" color=\"#6b8e23\" shadow=\"cast: true\">&lt;\/a-pyramid>\n      &lt;a-text value=\"SHOP\" color=\"#333\" position=\"12 4.5 2.6\" align=\"center\" width=\"10\">&lt;\/a-text>\n      &lt;!-- Fountain -->\n      &lt;a-cylinder position=\"0 0.5 0\" radius=\"2\" height=\"1\" color=\"#4682b4\" shadow=\"cast: true\">&lt;\/a-cylinder>\n      &lt;a-cylinder position=\"0 1.5 0\" radius=\"0.5\" height=\"1\" color=\"#add8e6\" shadow=\"cast: true\">&lt;\/a-cylinder>\n      &lt;a-sphere position=\"0 2.5 0\" radius=\"0.3\" color=\"#add8e6\" shadow=\"cast: true\">&lt;\/a-sphere>\n      &lt;!-- Trees -->\n      &lt;a-cylinder position=\"-10 2.5 5\" radius=\"0.5\" height=\"5\" color=\"#8b4513\" shadow=\"cast: true\">&lt;\/a-cylinder>\n      &lt;a-cone position=\"-10 6.5 5\" radius-bottom=\"2\" height=\"4\" color=\"#228b22\" shadow=\"cast: true\">&lt;\/a-cone>\n      &lt;a-cylinder position=\"10 2.5 5\" radius=\"0.5\" height=\"5\" color=\"#8b4513\" shadow=\"cast: true\">&lt;\/a-cylinder>\n      &lt;a-cone position=\"10 6.5 5\" radius-bottom=\"2\" height=\"4\" color=\"#228b22\" shadow=\"cast: true\">&lt;\/a-cone>\n      &lt;!-- Town NPC -->\n      &lt;a-entity id=\"town-npc-1\" position=\"-5 0.1 0\" class=\"interactable-npc\">\n        &lt;a-sphere position=\"0 1.7 0\" radius=\"0.4\" color=\"#f0e68c\">&lt;\/a-sphere> &lt;!-- Head -->\n        &lt;a-cylinder position=\"0 1.0 0\" radius=\"0.2\" height=\"1.2\" color=\"#808080\">&lt;\/a-cylinder> &lt;!-- Body -->\n        &lt;a-text value=\"\u6751\u4eba\" color=\"#fff\" position=\"0 2.2 0\" align=\"center\" width=\"7\">&lt;\/a-text>\n      &lt;\/a-entity>\n    &lt;\/a-entity>\n\n    &lt;!-- Enhanced Home (\u81ea\u5b85) Graphics - Position: 18 0 31 -->\n    &lt;a-entity id=\"home-scene\" position=\"18 0 31\">\n      &lt;!-- House Body -->\n      &lt;a-box position=\"0 2.5 0\" width=\"8\" height=\"5\" depth=\"8\" color=\"#d2b48c\" shadow=\"cast: true\">&lt;\/a-box>\n      &lt;!-- Roof -->\n      &lt;a-box position=\"0 5.5 0\" width=\"9\" height=\"0.5\" depth=\"9\" color=\"#8b4513\" rotation=\"0 45 0\" shadow=\"cast: true\">&lt;\/a-box>\n      &lt;a-cone position=\"0 7.5 0\" radius-bottom=\"5\" height=\"4\" color=\"#8b4513\" shadow=\"cast: true\">&lt;\/a-cone>\n      &lt;!-- Chimney -->\n      &lt;a-box position=\"3 7 3\" width=\"1\" height=\"3\" depth=\"1\" color=\"#654321\" shadow=\"cast: true\">&lt;\/a-box>\n      &lt;!-- Door -->\n      &lt;a-box position=\"0 1.5 4.01\" width=\"2\" height=\"3\" depth=\"0.1\" color=\"#654321\">&lt;\/a-box>\n      &lt;!-- Windows -->\n      &lt;a-box position=\"3 2.5 4.01\" width=\"1.5\" height=\"2\" depth=\"0.1\" color=\"#87ceeb\">&lt;\/a-box>\n      &lt;a-box position=\"-3 2.5 4.01\" width=\"1.5\" height=\"2\" depth=\"0.1\" color=\"#87ceeb\">&lt;\/a-box>\n      &lt;a-box position=\"4.01 2.5 0\" width=\"0.1\" height=\"2\" depth=\"1.5\" rotation=\"0 90 0\" color=\"#87ceeb\">&lt;\/a-box>\n      &lt;!-- Small Garden &amp; Fence -->\n      &lt;a-plane position=\"0 0.01 6\" width=\"10\" height=\"4\" rotation=\"-90 0 0\" color=\"#556b2f\" shadow=\"receive: true\">&lt;\/a-plane>\n      &lt;a-sphere position=\"2 0.5 6\" radius=\"0.5\" color=\"#ff69b4\">&lt;\/a-sphere>\n      &lt;a-sphere position=\"-2 0.5 6\" radius=\"0.5\" color=\"#ff69b4\">&lt;\/a-sphere>\n      &lt;a-cylinder position=\"0 0.5 7\" radius=\"0.3\" height=\"1\" color=\"#8b4513\">&lt;\/a-cylinder>\n      &lt;a-cone position=\"0 1.5 7\" radius-bottom=\"1\" height=\"2\" color=\"#228b22\">&lt;\/a-cone>\n      &lt;!-- Fence -->\n      &lt;a-box position=\"0 0.5 8\" width=\"10\" height=\"1\" depth=\"0.1\" color=\"#a0522d\">&lt;\/a-box>\n      &lt;a-box position=\"4.9 0.5 6\" width=\"0.1\" height=\"1\" depth=\"4\" color=\"#a0522d\">&lt;\/a-box>\n      &lt;a-box position=\"-4.9 0.5 6\" width=\"0.1\" height=\"1\" depth=\"4\" color=\"#a0522d\">&lt;\/a-box>\n      &lt;!-- Interior elements (simple) -->\n      &lt;a-box position=\"0 0.7 -2\" width=\"6\" height=\"0.5\" depth=\"3\" color=\"#a0522d\">&lt;\/a-box> &lt;!-- Floor inside -->\n      &lt;a-box position=\"2 1.5 -3\" width=\"1.5\" height=\"1\" depth=\"0.8\" color=\"#654321\">&lt;\/a-box> &lt;!-- Table -->\n      &lt;a-box position=\"2.5 0.7 -2.5\" width=\"0.5\" height=\"0.8\" depth=\"0.5\" color=\"#654321\">&lt;\/a-box> &lt;!-- Chair -->\n      &lt;a-box position=\"-2 1.5 -3.8\" width=\"3\" height=\"0.5\" depth=\"1.5\" color=\"#8b4513\">&lt;\/a-box> &lt;!-- Bed -->\n    &lt;\/a-entity>\n\n    &lt;!-- Enhanced Dungeon Entrance (\u30c0\u30f3\u30b8\u30e7\u30f3\u5165\u53e3) Graphics - Position: -28 0 41 -->\n    &lt;a-entity id=\"dungeon-scene\" position=\"-28 0 41\">\n      &lt;!-- Cave Entrance Arch (more rugged) -->\n      &lt;a-torus position=\"0 3 0\" radius=\"4.5\" radius-tubular=\"1.5\" arc=\"180\" rotation=\"90 0 0\" color=\"#444\" shadow=\"cast: true\">&lt;\/a-torus>\n      &lt;a-box position=\"0 0.5 0\" width=\"9\" height=\"1.5\" depth=\"1.5\" color=\"#444\" shadow=\"cast: true\">&lt;\/a-box>\n      &lt;!-- Cave Interior (deeper, darker) -->\n      &lt;a-box position=\"0 2.5 -8\" width=\"12\" height=\"6\" depth=\"15\" color=\"#222\" shadow=\"cast: true\" material=\"shader: flat; side: back\">&lt;\/a-box>\n      &lt;!-- Jagged Rocks around entrance -->\n      &lt;a-tetrahedron position=\"4 1.5 1\" radius=\"1.5\" color=\"#555\" rotation=\"0 45 0\" shadow=\"cast: true\">&lt;\/a-tetrahedron>\n      &lt;a-tetrahedron position=\"-4 1.5 1\" radius=\"1.5\" color=\"#555\" rotation=\"0 -45 0\" shadow=\"cast: true\">&lt;\/a-tetrahedron>\n      &lt;a-box position=\"0 0.8 2\" width=\"6\" height=\"1.5\" depth=\"2\" color=\"#555\" rotation=\"0 15 0\" shadow=\"cast: true\">&lt;\/a-box>\n      &lt;!-- Pillars (more textured) -->\n      &lt;a-cylinder position=\"3.5 2.5 3\" radius=\"0.9\" height=\"5\" color=\"#666\" shadow=\"cast: true\">&lt;\/a-cylinder>\n      &lt;a-cylinder position=\"-3.5 2.5 3\" radius=\"0.9\" height=\"5\" color=\"#666\" shadow=\"cast: true\">&lt;\/a-cylinder>\n      &lt;!-- Glowing Crystals (more prominent) -->\n      &lt;a-dodecahedron position=\"5.5 1.8 -5\" radius=\"0.9\" color=\"#0ff\" material=\"emissive: #0ff; emissiveIntensity: 1.2\">&lt;\/a-dodecahedron>\n      &lt;a-dodecahedron position=\"-5.5 1.8 -5\" radius=\"0.9\" color=\"#0ff\" material=\"emissive: #0ff; emissiveIntensity: 1.2\">&lt;\/a-dodecahedron>\n      &lt;!-- Eerie light from deep within -->\n      &lt;a-light type=\"point\" color=\"#0ff\" intensity=\"0.5\" position=\"0 2 -10\">&lt;\/a-light>\n      &lt;!-- Dungeon Enemy (Slime) -->\n      &lt;a-entity id=\"dungeon-slime-1\" position=\"3 0.5 -5\" class=\"interactable-enemy\">\n        &lt;a-sphere position=\"0 0.5 0\" radius=\"0.5\" color=\"#8a2be2\" opacity=\"0.7\">&lt;\/a-sphere>\n        &lt;a-text value=\"\u30b9\u30e9\u30a4\u30e0\" color=\"#fff\" position=\"0 1.2 0\" align=\"center\" width=\"5\">&lt;\/a-text>\n      &lt;\/a-entity>\n    &lt;\/a-entity>\n\n    &lt;!-- Enhanced Large Castle (\u5927\u57ce) Graphics - Position: 0 0 65 -->\n    &lt;a-entity id=\"castle-scene\" position=\"0 0 65\">\n      &lt;!-- Main Castle Wall (more imposing) -->\n      &lt;a-box position=\"0 6 0\" width=\"40\" height=\"12\" depth=\"20\" color=\"#808080\" shadow=\"cast: true\">&lt;\/a-box>\n      &lt;!-- Battlements on main wall -->\n      &lt;a-box position=\"18 12.5 0\" width=\"2\" height=\"1\" depth=\"20\" color=\"#696969\" shadow=\"cast: true\">&lt;\/a-box>\n      &lt;a-box position=\"-18 12.5 0\" width=\"2\" height=\"1\" depth=\"20\" color=\"#696969\" shadow=\"cast: true\">&lt;\/a-box>\n      &lt;a-box position=\"0 12.5 8\" width=\"40\" height=\"1\" depth=\"2\" color=\"#696969\" shadow=\"cast: true\">&lt;\/a-box>\n      &lt;a-box position=\"0 12.5 -8\" width=\"40\" height=\"1\" depth=\"2\" color=\"#696969\" shadow=\"cast: true\">&lt;\/a-box>\n      &lt;!-- Main Tower 1 (taller, more detailed) -->\n      &lt;a-cylinder position=\"15 12 0\" radius=\"4\" height=\"24\" color=\"#777\" shadow=\"cast: true\">&lt;\/a-cylinder>\n      &lt;a-cone position=\"15 25 0\" radius-bottom=\"4.5\" height=\"6\" color=\"#555\" shadow=\"cast: true\">&lt;\/a-cone>\n      &lt;!-- Tower 1 Battlements -->\n      &lt;a-box position=\"15 24.5 0\" width=\"9\" height=\"1\" depth=\"9\" color=\"#696969\" rotation=\"0 45 0\" shadow=\"cast: true\">&lt;\/a-box>\n      &lt;!-- Main Tower 2 (taller, more detailed) -->\n      &lt;a-cylinder position=\"-15 12 0\" radius=\"4\" height=\"24\" color=\"#777\" shadow=\"cast: true\">&lt;\/a-cylinder>\n      &lt;a-cone position=\"-15 25 0\" radius-bottom=\"4.5\" height=\"6\" color=\"#555\" shadow=\"cast: true\">&lt;\/a-cone>\n      &lt;!-- Tower 2 Battlements -->\n      &lt;a-box position=\"-15 24.5 0\" width=\"9\" height=\"1\" depth=\"9\" color=\"#696969\" rotation=\"0 45 0\" shadow=\"cast: true\">&lt;\/a-box>\n      &lt;!-- Gate (more complex drawbridge style) -->\n      &lt;a-box position=\"0 4 -9.9\" width=\"10\" height=\"8\" depth=\"0.2\" color=\"#444\" shadow=\"cast: true\">&lt;\/a-box>\n      &lt;a-box position=\"0 9 -9.9\" width=\"12\" height=\"2\" depth=\"0.2\" color=\"#444\" shadow=\"cast: true\">&lt;\/a-box>\n      &lt;a-box position=\"0 11 -9.9\" width=\"14\" height=\"1\" depth=\"0.2\" color=\"#444\" shadow=\"cast: true\">&lt;\/a-box>\n      &lt;!-- Drawbridge elements -->\n      &lt;a-box position=\"0 0.5 -9.8\" width=\"8\" height=\"1\" depth=\"0.1\" color=\"#654321\" rotation=\"0 0 0\">&lt;\/a-box>\n      &lt;a-box position=\"4.5 5 -9.8\" width=\"0.2\" height=\"10\" depth=\"0.2\" color=\"#333\" rotation=\"0 0 15\">&lt;\/a-box>\n      &lt;a-box position=\"-4.5 5 -9.8\" width=\"0.2\" height=\"10\" depth=\"0.2\" color=\"#333\" rotation=\"0 0 -15\">&lt;\/a-box>\n      &lt;!-- Flags on towers -->\n      &lt;a-box position=\"15 28 0\" width=\"0.6\" height=\"4\" depth=\"0.6\" color=\"#8b4513\">&lt;\/a-box>\n      &lt;a-plane position=\"15 30 1.8\" width=\"2.5\" height=\"1.8\" rotation=\"0 90 0\" color=\"#ffd700\">&lt;\/a-plane>\n      &lt;a-box position=\"-15 28 0\" width=\"0.6\" height=\"4\" depth=\"0.6\" color=\"#8b4513\">&lt;\/a-box>\n      &lt;a-plane position=\"-15 30 1.8\" width=\"2.5\" height=\"1.8\" rotation=\"0 90 0\" color=\"#ffd700\">&lt;\/a-plane>\n    &lt;\/a-entity>\n\n    &lt;!-- Field Enemy (Slime) -->\n    &lt;a-entity id=\"field-slime-1\" position=\"10 0.1 10\" class=\"interactable-enemy\">\n      &lt;a-sphere position=\"0 0.5 0\" radius=\"0.5\" color=\"#00ff00\" opacity=\"0.7\">&lt;\/a-sphere>\n      &lt;a-text value=\"\u30b9\u30e9\u30a4\u30e0\" color=\"#fff\" position=\"0 1.2 0\" align=\"center\" width=\"5\">&lt;\/a-text>\n    &lt;\/a-entity>\n\n    &lt;!-- Boss Placeholder (for evo, ogre, dragon) -->\n    &lt;a-entity id=\"bossmon\" visible=\"false\">&lt;\/a-entity>\n\n  &lt;\/a-scene>\n&lt;script>\n\/\/ UI Elements\nconst dialogue = document.getElementById('dialogue');\nconst partyStatus = document.getElementById('partyStatus');\nconst hint = document.getElementById('hint');\nconst warpBtns = document.getElementById('warpBtns');\nconst shopDiv = document.getElementById('shopDiv');\nconst questClear = document.getElementById('questClear');\nconst battleEffect = document.getElementById('battleEffect');\nconst overlay = document.getElementById('overlay');\n\n\/\/ Game State\nlet state = {\n  party: &#91;\n    {name:'\u771f\u7406', lv:5, hp:60, maxhp:60, alive:true, job:'\u5263\u59eb', skills:&#91;'\u30d5\u30a1\u30a4\u30a2\u30fc\u30dc\u30fc\u30eb','\u30d5\u30a1\u30a4\u30a2\u30fc\u30a4\u30ce\u30bb\u30f3\u30c8']},\n    {name:'\u30de\u30ea\u30a2\u30f3\u30cc', lv:5, hp:50, maxhp:50, alive:true, job:'\u9b54\u6cd5\u59eb', skills:&#91;'\u30d5\u30a1\u30a4\u30a2\u30fc\u30dc\u30fc\u30eb']},\n    {name:'\u30a8\u30ea\u30ca', lv:5, hp:46, maxhp:46, alive:true, job:'\u30a8\u30eb\u30d5\u8ce2\u8005', skills:&#91;'\u30a2\u30af\u30a2\u30b9\u30d1\u30a4\u30af']}\n  ],\n  gold:3000,\n  inventory: &#91;],\n  currentStoryStep: \"intro_01\", \/\/ Current point in the story\n  lastPlayerPosition: {x:0, y:1.6, z:22}, \/\/ To track movement for progress\n  shopOpen: false,\n  inBattle: false,\n  evoCleared:false, ogreCleared:false, dragonCleared:false,\n  evoTry:0, evoLv:15, ogreLv:20, dragonLv:30,\n};\n\n\/\/ Warp Points (now with more descriptive names for UI)\nconst warpPoints = &#91;\n  {name:\"\u8857\", pos:{x:0, y:1.6, z:22}},\n  {name:\"\u81ea\u5b85\", pos:{x:18, y:1.6, z:31}},\n  {name:\"\u30c0\u30f3\u30b8\u30e7\u30f3\u5165\u53e3\", pos:{x:-28, y:1.6, z:41}},\n  {name:\"\u5927\u57ce\", pos:{x:0, y:1.6, z:65}}\n];\n\n\/\/ Shop Items\nconst shopItems = &#91;\n  {id: 'potion', name: '\u30dd\u30fc\u30b7\u30e7\u30f3', price: 100, type: 'consumable', effect: 'HP\u56de\u5fa9'},\n  {id: 'longsword', name: '\u30ed\u30f3\u30b0\u30bd\u30fc\u30c9', price: 500, type: 'weapon', atk: 10},\n  {id: 'ironshield', name: '\u30a2\u30a4\u30a2\u30f3\u30b7\u30fc\u30eb\u30c9', price: 300, type: 'armor', def: 5}\n];\n\n\/\/ Story Data (structured for branching)\nconst storyData = {\n  \"intro_01\": { speaker: \"\u5b85\u9593\", text: \"\u3042\uff5e\u6687\u3060\u306a\u30cd\u30c3\u30c8\u30b5\u30fc\u30d5\u30a3\u30f3\u3067\u3082\u3059\u308b\u304b\", next: \"intro_02\" },\n  \"intro_02\": { speaker: \"Narration\", text: \"\u65b0\u4f5cVR\u6a5f\u5668\u3092\u6ce8\u6587\u3057\u3066\u7fcc\u65e5\u5c4a\u3044\u305f\u3002\", next: \"intro_03\" },\n  \"intro_03\": { speaker: \"\u5b85\u9593\", text: \"\u3075\u3072\u3072\uff01\u5e7c\u5973\u306b\u306a\u308c\u305f\uff01\u4ffa\u306f\u5e7c\u5973\u306a\u3093\u3060\", next: \"intro_04\" },\n  \"intro_04\": { speaker: \"Narration\", text: \"\u30cf\u30f3\u30c9\u30eb\u30cd\u30fc\u30e0\u3092\u771f\u7406\u306b\u3057\u3066\u30ed\u30b0\u30a4\u30f3\u3002\u6700\u521d\u306e\u8857\u30dd\u30eb\u30c3\u30c9\u306b\u7740\u304f\u3002\", next: \"marianne_meet_01\" },\n  \"marianne_meet_01\": { speaker: \"\u30de\u30ea\u30a2\u30f3\u30cc\", text: \"\u304b\u308f\u3044\u3044\u308f\u306d\u79c1\u306f\u30de\u30ea\u30a2\u30f3\u30cc\u3063\u3066\u3044\u3046\u306e\", next: \"marianne_meet_02\" },\n  \"marianne_meet_02\": { speaker: \"\u771f\u7406\", text: \"\u304a\u4e3b\u3001\u306a\u304b\u306a\u304b\u306e\u7f8e\u5c11\u5973\u3067\u3054\u3056\u308b\u306a\u3041\u2026\", next: \"marianne_meet_03\" },\n  \"marianne_meet_03\": { speaker: \"\u30de\u30ea\u30a2\u30f3\u30cc\", text: \"\u3082\u3057\u304b\u3057\u3066\u4e2d\u8eab\u30ad\u30e2\u30f2\u30bf\u306e\u304a\u3063\u3055\u3093\uff01\uff1f\", next: \"marianne_meet_04\" },\n  \"marianne_meet_04\": { speaker: \"\u771f\u7406\", text: \"\u3046\u308b\u3061\u3083\u3044\uff01\u4ffa\u306f\u5e7c\u5973\u306a\u306e\u3060\u3041\u2026\uff01\", next: \"marianne_meet_05\" },\n  \"marianne_meet_05\": { speaker: \"\u30de\u30ea\u30a2\u30f3\u30cc\", text: \"\u307e\u3042\u898b\u305f\u76ee\u304b\u308f\u3044\u3044\u304b\u3089\u4e00\u7dd2\u306b\u884c\u304f\u304b\", next: \"to_castle_01\" },\n  \"to_castle_01\": { speaker: \"Narration\", text: \"\u771f\u7406\u306f\u3060\u3093\u3060\u3093\u5e7c\u5973\u5316\u3057\u3066\u3044\u3063\u305f\u3002\u304a\u57ce\u3078\u3002\", next: \"king_meet_01\" },\n  \"king_meet_01\": { speaker: \"\u738b\u69d8\", text: \"\u304a\u304a\u3001\u30de\u30ea\u30a2\u30f3\u30cc\u4f55\u51e6\u306b\u884c\u3063\u3066\u305f\u306e\u3060\uff1f\u304a\u3084\u305d\u306e\u5b50\u306f\uff1f\", next: \"king_meet_02\" },\n  \"king_meet_02\": { speaker: \"\u771f\u7406\", text: \"\u771f\u7406\u306a\u306e\u3058\u3083\uff01\uff01\", next: \"king_meet_03\" },\n  \"king_meet_03\": { speaker: \"\u738b\u69d8\", text: \"\u4f55\u3068\u53ef\u611b\u3089\u3057\u3044\u2026\", next: \"king_meet_04\" },\n  \"king_meet_04\": { speaker: \"\u30de\u30ea\u30a2\u30f3\u30cc\", text: \"\u79c1\u6c7a\u3081\u305f\u308f\uff01\u3053\u306e\u5b50\u3068\u4e00\u7dd2\u306b\u65c5\u3059\u308b\u3053\u3068\u306b\uff01\", next: \"king_meet_05\" },\n  \"king_meet_05\": { speaker: \"\u738b\u69d8\", text: \"\u305d\u308c\u306f\u884c\u304b\u3093\uff01\", next: \"king_meet_06\" },\n  \"king_meet_06\": { speaker: \"\u771f\u7406\", text: \"\u884c\u304f\u306e\u3058\u3083\uff01\", next: \"leave_castle_01\" },\n  \"leave_castle_01\": { speaker: \"Narration\", text: \"\u30de\u30ea\u30a2\u30f3\u30cc\u306e\u624b\u3092\u7e4b\u3044\u3067\u57ce\u3092\u51fa\u305f\u3002\", next: \"leave_castle_02\" },\n  \"leave_castle_02\": { speaker: \"\u30de\u30ea\u30a2\u30f3\u30cc\", text: \"\u3061\u3087\u3063\u3068\u5f85\u3061\u306a\u3055\u3044\u3088\u57ce\u304b\u3089\u51fa\u3066\u884c\u304f\u5f53\u3066\u3067\u3082\u3042\u308b\u306e\uff1f\", next: \"leave_castle_03\" },\n  \"leave_castle_03\": { speaker: \"\u771f\u7406\", text: \"\u6b21\u306e\u8857\u3092\u63a2\u3057\u3066\u307f\u3088\u3046\u3068\u601d\u3046\u306e\u3058\u3083\", next: \"leave_castle_04\" },\n  \"leave_castle_04\": { speaker: \"\u30de\u30ea\u30a2\u30f3\u30cc\", text: \"\u3053\u3053\u304b\u3089\u4e00\u756a\u8fd1\u304f\u306e\u8857\u3063\u3066\u8a00\u3063\u305f\u3089\u30a4\u30c7\u30eb\u304b\u3057\u3089\", next: \"leave_castle_05\" },\n  \"leave_castle_05\": { speaker: \"\u771f\u7406\", text: \"\u30a4\u30c7\u30eb\u3063\u3066\u3069\u3046\u3044\u3063\u305f\u5834\u6240\u306a\u306e\u304b\u306e\uff1f\", next: \"leave_castle_06\" },\n  \"leave_castle_06\": { speaker: \"\u30de\u30ea\u30a2\u30f3\u30cc\", text: \"\u77e5\u3089\u306a\u3044\u308f\u3088\u79c1\u8857\u304b\u3089\u51fa\u305f\u3053\u3068\u306a\u3044\u3057\u2026\", next: \"leave_castle_07\" },\n  \"leave_castle_07\": { speaker: \"\u771f\u7406\", text: \"\u305d\u308c\u3058\u3083\u304a\u8a66\u3057\u3067\u3044\u304f\u306e\u3058\u3083\uff01\", next: \"rest_01\" },\n  \"rest_01\": { speaker: \"Narration\", text: \"\u711a\u706b\u2192\u30c6\u30f3\u30c8\u3067\u4f11\u61a9\u2192\u671d\", next: \"start_journey_01\" },\n  \"start_journey_01\": { speaker: \"\u771f\u7406\", text: \"\u305d\u308c\u3058\u3083\u5411\u304b\u3046\u306e\u3058\u3083\uff01\", next: \"slime_appear_01\" },\n  \"slime_appear_01\": { speaker: \"Narration\", text: \"\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u51fa\u308b\u3068\u30b9\u30e9\u30a4\u30e0\u304c\u73fe\u308c\u305f\", next: \"battle_slime_01\" },\n  \"battle_slime_01\": {\n    speaker: \"\u771f\u7406\",\n    text: \"\u30d5\u30a1\u30a4\u30a2\u30fc\u30dc\u30fc\u30eb\uff01\uff01\",\n    onComplete: () => { startBattle('slime'); }, \/\/ Trigger battle function\n    next: \"slime_defeated_01\"\n  },\n  \"slime_defeated_01\": { speaker: \"Narration\", text: \"\u771f\u7406\u306e\u521d\u7d1a\u546a\u6587\u3067\u30b9\u30e9\u30a4\u30e0\u3092\u5012\u3057\u305f\", next: \"marianne_magic_01\" },\n  \"marianne_magic_01\": { speaker: \"\u30de\u30ea\u30a2\u30f3\u30cc\", text: \"\u3078\u3047\u3042\u3093\u305f\u546a\u6587\u4f7f\u3048\u308b\u306e\u306d\", next: \"marianne_magic_02\" },\n  \"marianne_magic_02\": { speaker: \"\u771f\u7406\", text: \"\u5fc5\u8981\u306a\u3089\u3070\u6559\u3048\u3066\u3042\u3052\u308b\u3053\u3068\u3082\u53ef\u80fd\u306a\u306e\u3058\u3083\", next: \"marianne_magic_03\" },\n  \"marianne_magic_03\": { speaker: \"\u30de\u30ea\u30a2\u30f3\u30cc\", text: \"\u6559\u3048\u3066\u6559\u3048\u3066\uff01\", next: \"marianne_magic_04\" },\n  \"marianne_magic_04\": { speaker: \"\u771f\u7406\", text: \"\u3057\u3087\u3046\u304c\u306a\u3044\u306e\u3046\", next: \"marianne_magic_05\" },\n  \"marianne_magic_05\": { speaker: \"Narration\", text: \"\u771f\u7406\u306f\u30de\u30ea\u30a2\u30f3\u30cc\u306b\u521d\u7d1a\u9b54\u8853\u3092\u6559\u3048\u305f\u3002\", next: \"marianne_magic_06\" },\n  \"marianne_magic_06\": { speaker: \"\u30de\u30ea\u30a2\u30f3\u30cc\", text: \"\u3053\u3046\u3067\u3059\u306e\uff1f\", next: \"marianne_magic_07\" },\n  \"marianne_magic_07\": { speaker: \"Narration\", text: \"\u708e\u306e\u9b54\u8853\u3092\u7e70\u308a\u51fa\u3057\u305f\", next: \"marianne_magic_08\" },\n  \"marianne_magic_08\": { speaker: \"\u771f\u7406\", text: \"\u305d\u3046\u305d\u3046\", next: \"marianne_magic_09\" },\n  \"marianne_magic_09\": { speaker: \"\u30de\u30ea\u30a2\u30f3\u30cc\", text: \"\u7d50\u69cb\u7c21\u5358\u3067\u3057\u305f\u306d\", next: \"marianne_magic_10\" },\n  \"marianne_magic_10\": { speaker: \"\u771f\u7406\", text: \"\u521d\u7d1a\u9b54\u8853\u3060\u304b\u3089\u306d\u4eca\u304b\u3089\u9b54\u8853\u66f8\u3067\u4e2d\u7d1a\u3092\u899a\u3048\u308b\u4e88\u5b9a\", next: \"master_mid_magic_01\" },\n  \"master_mid_magic_01\": { speaker: \"Narration\", text: \"\u6b21\u306e\u65e5\u3001\u4e2d\u7d1a\u9b54\u8853\u3092\u30de\u30b9\u30bf\u30fc\", next: \"ogre_appear_01\" },\n  \"ogre_appear_01\": { speaker: \"\u771f\u7406\", text: \"\u30d5\u30a1\u30a4\u30a2\u30fc\u30a4\u30ce\u30bb\u30f3\u30c8\uff01\uff01\", next: \"ogre_defeated_01\" },\n  \"ogre_defeated_01\": { speaker: \"Narration\", text: \"\u5de8\u5927\u306a\u30aa\u30fc\u30af\u3092\u4e38\u713c\u304d\u306b\", next: \"ogre_defeated_02\" },\n  \"ogre_defeated_02\": { speaker: \"\u30de\u30ea\u30a2\u30f3\u30cc\", text: \"\u30aa\u30fc\u30af\u3092\u4e00\u6483\u3067\u3084\u308b\u306a\u3093\u3066\u3059\u3054\u3044\u308f\u306d\", next: \"ogre_defeated_03\" },\n  \"ogre_defeated_03\": { speaker: \"\u771f\u7406\", text: \"\u3044\u3064\u306e\u9593\u306b\u304b\u306b\u5f37\u304f\u306a\u3063\u3066\u305f\u306e\u3058\u3083\", next: \"dungeon_found_01\" },\n  \"dungeon_found_01\": { speaker: \"Narration\", text: \"\u6d1e\u7a9f\u3092\u767a\u898b\u3002\u4e2d\u3078\u5165\u308b\u3002\", next: \"dungeon_intro_01\" },\n  \"dungeon_intro_01\": { speaker: \"\u30de\u30ea\u30a2\u30f3\u30cc\", text: \"\u3069\u3046\u3084\u3089\u3053\u3053\u306f\u672c\u3067\u66f8\u3044\u3066\u3042\u3063\u305f\u59cb\u307e\u308a\u306e\u6d1e\u7a9f\u306e\u3088\u3046\u306d\", next: \"lizardman_appear_01\" },\n  \"lizardman_appear_01\": { speaker: \"Narration\", text: \"\u30ea\u30b6\u30fc\u30c9\u30de\u30f3\u304c\u51fa\u73fe\uff01\", next: \"lizardman_battle_01\" },\n  \"lizardman_battle_01\": { speaker: \"\u771f\u7406\", text: \"\u30ea\u30b6\u30fc\u30c9\u30de\u30f3\u306a\u306e\u3058\u3083\u6c17\u3092\u4ed8\u3051\u308b\u306e\u3058\u3083\", next: \"lizardman_battle_02\" },\n  \"lizardman_battle_02\": { speaker: \"\u30de\u30ea\u30a2\u30f3\u30cc\", text: \"\u30d5\u30a1\u30a4\u30a2\u30fc\u30dc\u30fc\u30eb\uff01\uff01\", next: \"lizardman_battle_03\" },\n  \"lizardman_battle_03\": { speaker: \"Narration\", text: \"\u30ea\u30b6\u30fc\u30c9\u30de\u30f3\u300c\u5144\u8cb4\uff01\u5c3b\u5c3e\u304c\u71c3\u3048\u3066\u307e\u3059\u305c\u300d\", next: \"lizardman_battle_04\" },\n  \"lizardman_battle_04\": { speaker: \"\u771f\u7406\", text: \"\u3082\u3063\u3068\u71c3\u3084\u3057\u3066\u3084\u308b\u306e\u3058\u3083\", next: \"lizardman_defeated_01\" },\n  \"lizardman_defeated_01\": { speaker: \"Narration\", text: \"\u708e\u306e\u9b54\u8853\u3067\u30ea\u30b6\u30fc\u30c9\u30de\u30f3\u6483\u7834\uff01\", next: \"lizardman_defeated_02\" },\n  \"lizardman_defeated_02\": { speaker: \"\u30de\u30ea\u30a2\u30f3\u30cc\", text: \"\u3084\u308b\u3058\u3083\u306a\u3044\u79c1\u3082\u65e9\u304f\u4e2d\u7d1a\u9b54\u8853\u4f7f\u3048\u308b\u3088\u3046\u306b\u306a\u308a\u305f\u3044\u308f\", next: \"lizardman_defeated_03\" },\n  \"lizardman_defeated_03\": { speaker: \"\u771f\u7406\", text: \"\u4eca\u65e5\u306e\u591c\u306b\u3067\u3082\u6559\u3048\u3066\u3042\u3052\u308b\u306e\u3058\u3083\", next: \"treasure_chest_01\" },\n  \"treasure_chest_01\": { speaker: \"Narration\", text: \"\u6d1e\u7a9f\u306e\u5206\u5c90\u3067\u5b9d\u7bb1\uff08\u30ed\u30f3\u30b0\u30bd\u30fc\u30c9\uff09\u3092\u767a\u898b\u3002\", next: \"treasure_chest_02\" },\n  \"treasure_chest_02\": { speaker: \"\u771f\u7406\", text: \"\u3084\u3063\u305f\u5b9d\u7bb1\u306a\u306e\u3058\u3083\u30fc\uff01\", next: \"treasure_chest_03\" },\n  \"treasure_chest_03\": { speaker: \"\u30de\u30ea\u30a2\u30f3\u30cc\", text: \"\u4e2d\u8eab\u306f\u4f55\u304b\u3057\u3089\u306d\", next: \"treasure_chest_04\" },\n  \"treasure_chest_04\": { speaker: \"Narration\", text: \"\u4e2d\u8eab\u306f\u30ed\u30f3\u30b0\u30bd\u30fc\u30c9\u3060\u3063\u305f\", next: \"treasure_chest_05\" },\n  \"treasure_chest_05\": { speaker: \"\u771f\u7406\", text: \"\u4f55\u3060\u5263\u304b\u2026\", next: \"treasure_chest_06\" },\n  \"treasure_chest_06\": { speaker: \"\u30de\u30ea\u30a2\u30f3\u30cc\", text: \"\u6756\u306e\u65b9\u304c\u826f\u304b\u3063\u305f\u308f\u306d\u3067\u3082\u305b\u3063\u304b\u304f\u3060\u304b\u3089\u88c5\u5099\u3057\u3066\u898b\u307e\u3057\u3087\u3046\", next: \"sword_lv_up_01\" },\n  \"sword_lv_up_01\": { speaker: \"Narration\", text: \"\u5263\u8853\u30ec\u30d9\u30eb1\u306b\u306a\u3063\u305f\", next: \"sword_lv_up_02\" },\n  \"sword_lv_up_02\": { speaker: \"\u771f\u7406\", text: \"\u5263\u3092\u3082\u3063\u3068\u4f7f\u3044\u3053\u306a\u3057\u305f\u3044\u306e\u3046\", next: \"sword_lv_up_03\" },\n  \"sword_lv_up_03\": { speaker: \"\u30de\u30ea\u30a2\u30f3\u30cc\", text: \"\u5263\u8853\u304c\u51fa\u6765\u308b\u4eba\u3092\u63a2\u3059\u3057\u304b\u306a\u3044\u308f\u306d\", next: \"exit_dungeon_01\" },\n  \"exit_dungeon_01\": { speaker: \"Narration\", text: \"\u6d1e\u7a9f\u51fa\u53e3\u2192\u5916\u306b\u51fa\u308b\u3002\", next: \"exit_dungeon_02\" },\n  \"exit_dungeon_02\": { speaker: \"\u771f\u7406\", text: \"\u5916\u306b\u51fa\u305f\u306e\u3058\u3083\uff01\uff01\", next: \"idel_arrival_01\" },\n  \"idel_arrival_01\": { speaker: \"Narration\", text: \"\u8857\u30a4\u30c7\u30eb\u306b\u5230\u7740\u3002\", next: \"idel_guide_01\" },\n  \"idel_guide_01\": { speaker: \"\u6848\u5185\u4eba\", text: \"\u3088\u3046\u3053\u305d\u30a4\u30c7\u30eb\u3078\uff01\u3053\u3053\u306f\u4ef2\u9593\u3092\u96c6\u3081\u305f\u308a\u3059\u308b\u9152\u5834\u3084\u3001\u30af\u30a8\u30b9\u30c8\u3092\u53d7\u3051\u3089\u308c\u308b\u5192\u967a\u8005\u30ae\u30eb\u30c9\u304c\u3042\u308a\u307e\u3059\", next: \"idel_guide_02\" },\n  \"idel_guide_02\": { speaker: \"\u771f\u7406\", text: \"\u305d\u308c\u3058\u3083\u3042\u307e\u305a\u306f\u9152\u5834\u3067\u60c5\u5831\u53ce\u96c6\u3068\u4ef2\u9593\u96c6\u3081\u3068\u884c\u304d\u307e\u3059\u304b\", next: \"idel_guide_03\" },\n  \"idel_guide_03\": { speaker: \"\u30de\u30ea\u30a2\u30f3\u30cc\", text: \"\u3069\u3093\u306a\u4eba\u304c\u3044\u308b\u304b\u3057\u3089\u306d\", next: \"elina_appear_01\" },\n  \"elina_appear_01\": { speaker: \"Narration\", text: \"\u9152\u5834\u3067\u30a8\u30ea\u30ca\u767b\u5834\u3002\", next: \"elina_join_01\" },\n  \"elina_join_01\": { speaker: \"\u771f\u7406\", text: \"\u305d\u3053\u306e\u7f8e\u3057\u3044\u304a\u65b9\u3001\u308f\u3089\u308f\u9054\u3068\u5192\u967a\u3057\u307e\u305b\u3093\u304b\uff1f\", next: \"elina_join_02\" },\n  \"elina_join_02\": { speaker: \"\u30a8\u30ea\u30ca\", text: \"\u79c1\u306f\u30a8\u30ea\u30ca\u30fb\u30ab\u30ea\u30aa\u30c3\u30c8\u3088\u898b\u3066\u306e\u901a\u308a\u30a8\u30eb\u30d5\u3067\u9b54\u8853\u5e2b\u3092\u3084\u3063\u3066\u3044\u308b\u308f\", next: \"elina_join_03\" },\n  \"elina_join_03\": { speaker: \"\u771f\u7406\", text: \"\u3088\u304b\u3063\u305f\u3089\u4ef2\u9593\u306b\u306a\u3063\u3066\u304f\u308c\u307e\u305b\u3093\u304b\uff1f\", next: \"elina_join_04\" },\n  \"elina_join_04\": { speaker: \"\u30a8\u30ea\u30ca\", text: \"\u30af\u30a8\u30b9\u30c8\u3092\u624b\u4f1d\u3063\u3066\u304f\u308c\u305f\u3089\u8003\u3048\u3066\u3082\u3044\u3044\u308f\u3088\", next: \"elina_join_05\" },\n  \"elina_join_05\": { speaker: \"\u771f\u7406\", text: \"\u308f\u30fc\u3044\u624b\u4f1d\u3046\u624b\u4f1d\u3046\uff01\", next: \"to_guild_with_elina_01\" },\n  \"to_guild_with_elina_01\": { speaker: \"Narration\", text: \"\u30a8\u30ea\u30ca\u3068\u5171\u306b\u5192\u967a\u8005\u30ae\u30eb\u30c9\u3078\u3002\", next: \"gigborg_quest_01\" },\n  \"gigborg_quest_01\": { speaker: \"\u30a8\u30ea\u30ca\", text: \"\u3042\u306a\u305f\u9054\u306b\u306f\u30ae\u30b0\u30dc\u30eb\u30b0\u306e\u8a0e\u4f10\u3092\u3084\u3063\u3066\u8cb0\u3046\u308f\", next: \"gigborg_quest_02\" },\n  \"gigborg_quest_02\": { speaker: \"\u771f\u7406\", text: \"\u3069\u3093\u306a\u30e2\u30f3\u30b9\u30bf\u30fc\u304b\u308f\u304b\u3089\u306b\u3083\u3044\u3051\u3069\u9811\u5f35\u308b\u306b\u3083\", next: \"gigborg_quest_03\" },\n  \"gigborg_quest_03\": { speaker: \"\u30de\u30ea\u30a2\u30f3\u30cc\", text: \"\u4f55\u3067\u3061\u3087\u3063\u3068\u732b\u8a9e\u306b\u306a\u3063\u3066\u3093\u306e\", next: \"gigborg_quest_04\" },\n  \"gigborg_quest_04\": { speaker: \"\u771f\u7406\", text: \"\u3075\u306b\u3083\uff1f\uff1f\u5206\u304b\u3089\u306a\u3044\u306b\u3083\", next: \"gigborg_quest_05\" },\n  \"gigborg_quest_05\": { speaker: \"\u30a8\u30ea\u30ca\", text: \"\u5834\u6240\u306f\u59cb\u307e\u308a\u306e\u5854\u3088\u3002\u5317\u306b\u3042\u308b\u308f\u3002\", next: \"to_tower_01\" },\n  \"to_tower_01\": { speaker: \"Narration\", text: \"\u59cb\u307e\u308a\u306e\u5854\u3078\u5411\u304b\u3046\u3002\", next: \"goblin_battle_01\" },\n  \"goblin_battle_01\": { speaker: \"Narration\", text: \"\u59cb\u307e\u308a\u306e\u5854\u3067\u30b4\u30d6\u30ea\u30f3\u9054\u3068\u30d0\u30c8\u30eb\uff01\", next: \"goblin_battle_02\" },\n  \"goblin_battle_02\": { speaker: \"\u771f\u7406\", text: \"\u30d5\u30a1\u30a4\u30a2\u30fc\u30a4\u30ce\u30bb\u30f3\u30c8\uff01\uff01\", onComplete: () => { startBattle('goblin'); }, next: \"goblin_defeated_01\" },\n  \"goblin_defeated_01\": { speaker: \"Narration\", text: \"\u30b4\u30d6\u30ea\u30f3\u305f\u3061\u306f\u713c\u304d\u5c3d\u304f\u3055\u308c\u305f\u3002\", next: \"open_door_01\" },\n  \"open_door_01\": { speaker: \"Narration\", text: \"\u5854\u306e\u4e2d\u3067\u30a2\u30a4\u30c6\u30e0\u7aef\u672b\u3092\u4f7f\u3044\u6249\u3092\u958b\u304f\u3002\", next: \"boss_warning_01\" },\n  \"boss_warning_01\": { speaker: \"\u5192\u967a\u8005\", text: \"\u3053\u306e\u5148\u30dc\u30b9\u90e8\u5c4b\u304c\u3042\u308b\u305e\u5f37\u3044\u304b\u3089\u6ce8\u610f\u3057\u3066\u304a\u3051\", next: \"gigborg_boss_01\" },\n  \"gigborg_boss_01\": { speaker: \"Narration\", text: \"\u30dc\u30b9\u90e8\u5c4b\u3067\u30ae\u30b0\u30dc\u30eb\u30b0Lv10\u6226\u3002\", next: \"gigborg_boss_02\" },\n  \"gigborg_boss_02\": { speaker: \"\u30de\u30ea\u30a2\u30f3\u30cc\", text: \"\u30d5\u30a1\u30a4\u30a2\u30fc\u30dc\u30fc\u30eb\uff01\uff01\", next: \"gigborg_boss_03\" },\n  \"gigborg_boss_03\": { speaker: \"\u30a8\u30ea\u30ca\", text: \"\u30a2\u30af\u30a2\u30b9\u30d1\u30a4\u30af\uff01\uff01\", next: \"gigborg_boss_04\" },\n  \"gigborg_boss_04\": { speaker: \"Narration\", text: \"\u30ae\u30b0\u30dc\u30eb\u30b0\u306e\u65a7\u3067\u5168\u6ec5\u2192\u30a4\u30c7\u30eb\u3067\u5fa9\u6d3b\u3002\", next: \"level_up_needed_01\" },\n  \"level_up_needed_01\": { speaker: \"\u30de\u30ea\u30a2\u30f3\u30cc\", text: \"\u3084\u3089\u308c\u305f\u307f\u305f\u3044\u306d\u30ec\u30d9\u30eb\u4e0a\u3052\u3067\u3082\u3057\u307e\u3057\u3087\", next: \"goblin_hunt_01\" },\n  \"goblin_hunt_01\": { speaker: \"Narration\", text: \"\u897f\u306e\u68ee\u3067\u30b4\u30d6\u30ea\u30f3\u72e9\u308aLv10\u306b\u30a2\u30c3\u30d7\u3002\", next: \"lightning_vortex_01\" },\n  \"lightning_vortex_01\": { speaker: \"\u771f\u7406\", text: \"\u30e9\u30a4\u30c8\u30cb\u30f3\u30b0\u30f4\u30a9\u30eb\u30c6\u30c3\u30af\u30b9\u3092\u899a\u3048\u305f\uff01\", next: \"gigborg_retry_01\" },\n  \"gigborg_retry_01\": { speaker: \"Narration\", text: \"\u518d\u6311\u6226\u3067\u30ae\u30b0\u30dc\u30eb\u30b0\u6483\u7834\u3002\", next: \"gigborg_defeated_01\" },\n  \"gigborg_defeated_01\": { speaker: \"\u30de\u30ea\u30a2\u30f3\u30cc\", text: \"\u3084\u3063\u305f\u308f\uff01\u30ae\u30b0\u30dc\u30eb\u30b0\u6483\u7834\u3088\u3042\u3093\u305f\u304a\u3063\u3055\u3093\u306e\u7656\u306b\u306a\u304b\u306a\u304b\u3084\u308b\u308f\u306d\", next: \"gigborg_defeated_02\" },\n  \"gigborg_defeated_02\": { speaker: \"\u771f\u7406\", text: \"\u304a\u3063\u3055\u3093\u8a00\u3046\u306a\uff01\u3069\u3046\u307f\u3066\u3082\u304b\u308f\u3044\u3044\u5973\u306e\u5b50\u3058\u3083\u308d\uff1f\", next: \"gigborg_defeated_03\" },\n  \"gigborg_defeated_03\": { speaker: \"\u30de\u30ea\u30a2\u30f3\u30cc\", text: \"\u305d\u3001\u305d\u3046\u306d\u2026\", next: \"elina_officially_join_01\" },\n  \"elina_officially_join_01\": { speaker: \"\u30a8\u30ea\u30ca\", text: \"\u7d04\u675f\u901a\u308a\u4ef2\u9593\u306b\u306a\u3063\u3066\u3042\u3052\u308b\u308f\u3088\", next: \"elina_officially_join_02\" },\n  \"elina_officially_join_02\": { speaker: \"\u771f\u7406\", text: \"\u3088\u308d\u3057\u304f\u306a\u306e\u3058\u3083\", next: \"evolvia_quest_01\" },\n  \"evolvia_quest_01\": { speaker: \"\u30a8\u30ea\u30ca\", text: \"\u6b21\u306f\u30a8\u30dc\u30eb\u30d3\u30a2\u8a0e\u4f10\u306b\u884c\u304f\u308f\u3088\", next: \"evolvia_quest_02\" },\n  \"evolvia_quest_02\": { speaker: \"Narration\", text: \"\u6d77\u306b\u3044\u308b\u602a\u7269\u30a8\u30dc\u30eb\u30d3\u30a2\u8a0e\u4f10\u3078\u3002\", next: \"evolvia_battle_01\" },\n  \"evolvia_battle_01\": { speaker: \"\u771f\u7406\", text: \"\u30e9\u30a4\u30c8\u30cb\u30f3\u30b0\u30f4\u30a9\u30eb\u30c6\u30c3\u30af\u30b9\uff01\", next: \"evolvia_retreat_01\" },\n  \"evolvia_retreat_01\": { speaker: \"Narration\", text: \"\u30ec\u30d9\u30eb\u5dee\u3067\u64a4\u9000\u3001\u30ec\u30d9\u30eb\u4e0a\u3052\uff06\u30a2\u30a4\u30c6\u30e0\u96c6\u3081\u3002\", next: \"lightning_judgment_01\" },\n  \"lightning_judgment_01\": { speaker: \"Narration\", text: \"Lv20\u5230\u9054\u3067\u30e9\u30a4\u30c8\u30cb\u30f3\u30b0\u30b8\u30e3\u30c3\u30b8\u30e1\u30f3\u30c8\u3092\u899a\u3048\u308b\u3002\", next: \"evolvia_rematch_01\" },\n  \"evolvia_rematch_01\": { speaker: \"\u771f\u7406\", text: \"\u30a8\u30dc\u30eb\u30d3\u30a2\u3092\u5012\u3057\u306b\u884c\u304f\u308f\u3088\", next: \"evolvia_rematch_02\" },\n  \"evolvia_rematch_02\": { speaker: \"\u30de\u30ea\u30a2\u30f3\u30cc\", text: \"\u4eca\u5ea6\u3053\u305d\u5012\u3059\u308f\u3088\", next: \"evolvia_rematch_03\" },\n  \"evolvia_rematch_03\": { speaker: \"\u771f\u7406\", text: \"\u30e9\u30a4\u30c8\u30cb\u30f3\u30b0\u30b8\u30e3\u30c3\u30b8\u30e1\u30f3\u30c8\uff01\uff01\", next: \"evolvia_defeated_01\" },\n  \"evolvia_defeated_01\": { speaker: \"Narration\", text: \"\u30a8\u30dc\u30eb\u30d3\u30a2\u8a0e\u4f10\u3001\u30af\u30a8\u30b9\u30c8\u30af\u30ea\u30a2\u30fc\u3002\", next: \"quest_clear_effect_01\" },\n  \"quest_clear_effect_01\": { speaker: \"\u30a8\u30ea\u30ca\", text: \"\u304a\u3063\u3057\u3083\u30fc\u30af\u30ea\u30a2\uff01\u304a\u75b2\u308c\uff01\", onComplete: () => { showQuestClear(); }, next: \"ogre_quest_01\" },\n  \"ogre_quest_01\": { speaker: \"Narration\", text: \"\u30aa\u30fc\u30ac\u8a0e\u4f10\u2192\u30aa\u30fc\u30ac\u306e\u722a1\u4e07G\u3067\u58f2\u5374\u3002\", next: \"buy_equip_01\" },\n  \"buy_equip_01\": { speaker: \"Narration\", text: \"\u6b66\u5668\u30fb\u9632\u5177\u3092\u8cb7\u3044\u5f37\u5316\u3002\u5bbf\u5c4b\u3067\u4f53\u529b\u56de\u5fa9\u3002\", next: \"rank_up_quest_01\" },\n  \"rank_up_quest_01\": { speaker: \"\u53d7\u4ed8\u306e\u4eba\", text: \"\u73fe\u5728\u306e\u30e9\u30f3\u30af\u306fE\u30af\u30e9\u30b9\u3067\u3059\u3002\u30e9\u30f3\u30af\u30a2\u30c3\u30d7\u30af\u30a8\u30b9\u30c8\u306f\u30c9\u30e9\u30b4\u30f3\u8a0e\u4f10\u3067\u3059\u3002\", next: \"dragon_quest_01\" },\n  \"dragon_quest_01\": { speaker: \"\u771f\u7406\", text: \"\u30c9\u30e9\u30b4\u30f3\u306e\u8a0e\u4f10\u3044\u304f\u306e\u3058\u3083\", next: \"dragon_quest_02\" },\n  \"dragon_quest_02\": { speaker: \"Narration\", text: \"\u7adc\u306e\u5c71\u3078\u30d4\u30af\u30cb\u30c3\u30af\u2192\u30c9\u30e9\u30b4\u30f3\u306e\u5de3\u3067\u7206\u5f3e\u3092\u8a2d\u7f6e\u3057\u3066\u7206\u7834\uff01\", next: \"dragon_quest_03\" },\n  \"dragon_quest_03\": { speaker: \"\u771f\u7406\", text: \"\u5c11\u3005\u3084\u308a\u3059\u304e\u305f\u306e\u3058\u3083\", next: \"rank_up_d_01\" },\n  \"rank_up_d_01\": { speaker: \"Narration\", text: \"\u30a4\u30c7\u30eb\u3067\u30af\u30a8\u30b9\u30c8\u5831\u544a\u3001D\u30e9\u30f3\u30af\u306b\u30a2\u30c3\u30d7\uff06\u98db\u7a7a\u8247GET\u3002\", next: \"d_rank_quest_01\" },\n  \"d_rank_quest_01\": { speaker: \"\u30de\u30ea\u30a2\u30f3\u30cc\", text: \"D\u30e9\u30f3\u30af\u306e\u30af\u30a8\u30b9\u30c8\u3082\u53d7\u3051\u3066\u304a\u304d\u307e\u3057\u3087\", next: \"hero_tower_01\" },\n  \"hero_tower_01\": { speaker: \"Narration\", text: \"\u98db\u7a7a\u8247\u3067\u82f1\u96c4\u306e\u5854\u2192\u95c7\u306e\u9a0e\u58eb\u30dc\u30b9\u6226\", next: \"dark_knight_battle_01\" },\n  \"dark_knight_battle_01\": { speaker: \"\u30de\u30ea\u30a2\u30f3\u30cc\", text: \"\u53d7\u3051\u53d6\u3063\u3066\uff01\", next: \"dark_knight_battle_02\" },\n  \"dark_knight_battle_02\": { speaker: \"Narration\", text: \"\u30de\u30ea\u30a2\u30f3\u30cc\u304c\u5263\u3092\u6295\u3052\u771f\u7406\u304c\u95c7\u306e\u9a0e\u58eb\u3092\u8a0e\u3064\u3002\", next: \"dark_knight_defeated_01\" },\n  \"dark_knight_defeated_01\": { speaker: \"\u771f\u7406\", text: \"\u3069\u3046\u3058\u3083\uff1f\u308f\u3089\u308f\u306e\u529b\u306f\uff1f\", next: \"dark_knight_defeated_02\" },\n  \"dark_knight_defeated_02\": { speaker: \"\u30de\u30ea\u30a2\u30f3\u30cc\", text: \"\u3042\u306e\u6642\u3001\u79c1\u304c\u5263\u3092\u6e21\u3057\u3066\u306a\u304b\u3063\u305f\u3089\u6b7b\u3093\u3067\u305f\u308f\u3088\", next: \"dark_knight_defeated_03\" },\n  \"dark_knight_defeated_03\": { speaker: \"\u771f\u7406\", text: \"\u305d\u308c\u306f\u611f\u8b1d\u3057\u3066\u308b\u306e\u3058\u3083\", next: \"sky_castle_01\" },\n  \"sky_castle_01\": { speaker: \"Narration\", text: \"\u5854\u306e\u666f\u8272\u2192\u7a7a\u306b\u6d6e\u304b\u3076\u57ce\u30a8\u30ea\u30af\u30c3\u30c9\u3078\u3002\", next: \"angel_meet_01\" },\n  \"angel_meet_01\": { speaker: \"\u5929\u4f7f\", text: \"\u3088\u3046\u3053\u305d\u30a8\u30ea\u30af\u30c3\u30c9\u3078\", next: \"king_attacked_01\" },\n  \"king_attacked_01\": { speaker: \"\u738b\u69d8\", text: \"\u4eca\u30a8\u30ea\u30af\u30c3\u30c9\u306f\u9b54\u754c\u306e\u60aa\u9b54\u306e\u653b\u6483\u3092\u53d7\u3051\u3066\u3044\u308b\", next: \"demon_realm_quest_01\" },\n  \"demon_realm_quest_01\": { speaker: \"\u771f\u7406\", text: \"\u3093\u3058\u3083\u308f\u3089\u308f\u305f\u3061\u304c\u9b54\u754c\u306b\u884c\u3063\u3066\u60aa\u9b54\u3092\u5012\u3057\u3066\u3084\u308b\u306e\u3058\u3083\uff01\", next: \"demon_realm_quest_02\" },\n  \"demon_realm_quest_02\": { speaker: \"\u738b\u69d8\", text: \"\u7570\u754c\u306e\u9580\u306f\u3053\u3053\u304b\u3089\u305a\u3063\u3068\u5317\u306b\u3042\u308b\", next: \"to_demon_gate_01\" },\n  \"to_demon_gate_01\": { speaker: \"Narration\", text: \"\u7570\u754c\u306e\u9580\u3078\u2192\u30ef\u30a4\u30d0\u30fc\u30f3\u6483\u7834\u2192\u30b5\u30bf\u30f3\u6226\", next: \"satan_battle_01\" },\n  \"satan_battle_01\": { speaker: \"\u30b5\u30bf\u30f3\", text: \"\u3053\u3053\u304b\u3089\u5148\u306f\u901a\u3055\u306a\u3044\u305c\", next: \"satan_battle_02\" },\n  \"satan_battle_02\": { speaker: \"\u771f\u7406\", text: \"\u30b5\u30f3\u30c0\u30fc\u30b8\u30e3\u30c3\u30b8\u30e1\u30f3\u30c8\uff01\uff01\", next: \"satan_battle_03\" },\n  \"satan_battle_03\": { speaker: \"\u30a8\u30ea\u30ca\", text: \"\u30d7\u30e9\u30c1\u30ca\u30bd\u30fc\u30c9\uff01\uff01\", next: \"satan_defeated_01\" },\n  \"satan_defeated_01\": { speaker: \"Narration\", text: \"\u30b5\u30bf\u30f3\u8a0e\u4f10\u3001\u9b54\u754c\u3078\u7a81\u5165\uff01\", next: \"demon_realm_arrival_01\" },\n  \"demon_realm_arrival_01\": { speaker: \"\u6848\u5185\u4eba\", text: \"\u3088\u3046\u3053\u305d\u3001\u9b54\u754c\u306e\u8857\u30e2\u30eb\u30c9\u3078\", next: \"demon_realm_arrival_02\" },\n  \"demon_realm_arrival_02\": { speaker: \"\u30de\u30ea\u30a2\u30f3\u30cc\", text: \"\u3053\u3053\u306e\u60aa\u9b54\u9054\u306f\u6575\u5bfe\u5fc3\u304c\u306a\u3044\u3088\u3046\u306d\", next: \"demon_realm_arrival_03\" },\n  \"demon_realm_arrival_03\": { speaker: \"\u771f\u7406\", text: \"\u3082\u3046\u6b69\u304d\u75b2\u308c\u305f\u306e\u3058\u3083\u5bbf\u5c4b\u306b\u6cca\u308a\u305f\u3044\u306e\u3058\u3083\uff5e\", next: \"demon_castle_01\" },\n  \"demon_castle_01\": { speaker: \"Narration\", text: \"\u9b54\u754c\u306e\u57ce\u3092\u76ee\u6307\u3057\u30be\u30f3\u30d3\u6226\u2192\u30a8\u30ea\u30ca\u304c\u6483\u7834\uff01\", next: \"elina_defeat_zombie_01\" },\n  \"elina_defeat_zombie_01\": { speaker: \"\u30a8\u30ea\u30ca\", text: \"\u79c1\u306b\u4efb\u305b\u306a\u3055\u3044\uff01\uff01\", next: \"end_chapter\" },\n  \"end_chapter\": { speaker: \"Narration\", text: \"\u6b21\u7ae0\u3078\u7d9a\u304f\u2026\", next: null }\n};\n\nlet currentStoryId = state.currentStoryStep;\n\n\/\/ --- UI Functions ---\nfunction setWarpUI() {\n  warpBtns.innerHTML = '';\n  warpPoints.forEach(p=>{\n    let btn = document.createElement('button');\n    btn.textContent = p.name + \"\u3078\u8ee2\u79fb\";\n    btn.onclick = ()=>{\n      document.querySelector('#playerRig').setAttribute('position', `${p.pos.x} ${p.pos.y} ${p.pos.z}`);\n      closeDialogue(); \/\/ Close dialogue on warp\n      closeShop(); \/\/ Close shop on warp\n    };\n    warpBtns.appendChild(btn);\n  });\n}\n\nfunction updatePartyStatus() {\n  partyStatus.innerHTML = `&lt;b>\u30d1\u30fc\u30c6\u30a3&lt;\/b>&lt;br>`;\n  state.party.forEach(p=>{\n    partyStatus.innerHTML += `&lt;span class=\"${p.alive?'alive':'dead'}\">${p.name}(Lv${p.lv}) ${p.hp}\/${p.maxhp}HP&lt;\/span>&lt;br>`;\n  });\n  partyStatus.innerHTML += `&lt;b>G:&lt;\/b> ${state.gold}&lt;br>`;\n  partyStatus.innerHTML += `&lt;b>\u30a2\u30a4\u30c6\u30e0:&lt;\/b> ${state.inventory.map(item => item.name).join(', ') || '\u306a\u3057'}`;\n}\n\n\/\/ --- Day\/Night Cycle ---\nlet skyColor=\"#b8e6ff\", nightColor=\"#26305a\";\nlet night=false;\nfunction setDayNight(toNight){\n  night=toNight;\n  document.getElementById('sky').setAttribute('color',night?nightColor:skyColor);\n  document.getElementById('dirlight').setAttribute('intensity',night?0.28:1.13);\n  document.getElementById('ambientlight').setAttribute('intensity',night?0.16:0.62);\n  document.getElementById('nightFilter').style.background=night?\"rgba(0,8,38,0.53)\":\"rgba(0,8,38,0.0)\";\n}\nsetInterval(()=>{setDayNight(!night);},15000); setDayNight(false);\n\n\/\/ --- Dialogue System ---\nfunction showDialogueBlock(dialogueId) {\n  const data = storyData&#91;dialogueId];\n  if (!data) {\n    closeDialogue();\n    return;\n  }\n\n  dialogue.innerHTML = '';\n  dialogue.style.display = 'block';\n\n  if (data.speaker &amp;&amp; data.speaker !== 'Narration') {\n    const n = document.createElement('span');\n    n.className = 'name';\n    n.textContent = data.speaker + ' ';\n    dialogue.appendChild(n);\n  }\n  const t = document.createElement('span');\n  t.textContent = data.text;\n  dialogue.appendChild(t);\n\n  if (data.choices) {\n    data.choices.forEach(c => {\n      const btn = document.createElement('button');\n      btn.className = 'choice';\n      btn.textContent = c.text;\n      btn.onclick = () => {\n        if (c.onChoose) c.onChoose(); \/\/ Execute choice-specific logic\n        currentStoryId = c.next;\n        showDialogueBlock(currentStoryId);\n      };\n      dialogue.appendChild(btn);\n    });\n  } else {\n    dialogue.onclick = () => {\n      dialogue.onclick = null; \/\/ Prevent multiple clicks\n      if (data.onComplete) data.onComplete(); \/\/ Execute onComplete logic\n      currentStoryId = data.next;\n      showDialogueBlock(currentStoryId);\n    };\n  }\n}\n\nfunction closeDialogue() {\n  dialogue.style.display = 'none';\n  dialogue.onclick = null;\n}\n\n\/\/ --- Battle System (Simplified) ---\nfunction startBattle(enemyType) {\n  state.inBattle = true;\n  battleEffect.style.display = 'block';\n  \/\/ Simulate battle outcome instantly for now\n  setTimeout(() => {\n    battleEffect.style.display = 'none';\n    state.inBattle = false;\n    \/\/ Example: Party takes some damage, or enemy is defeated\n    state.party.forEach(p => {\n      if (p.alive) p.hp = Math.max(0, p.hp - 5); \/\/ Simulate damage\n      if (p.hp === 0) p.alive = false;\n    });\n    updatePartyStatus();\n    \/\/ Logic for enemy defeat, item drops, XP gain would go here\n    \/\/ For now, the story progresses automatically after the simulated battle\n  }, 300); \/\/ Flash for 0.3 seconds\n}\n\nfunction showQuestClear() {\n  questClear.style.display = 'block';\n  setTimeout(() => {\n    questClear.style.display = 'none';\n  }, 3000); \/\/ Show for 3 seconds\n}\n\n\/\/ --- Shop System ---\nfunction openShop() {\n  state.shopOpen = true;\n  shopDiv.style.display = 'block';\n  shopDiv.innerHTML = `\n    &lt;h2>\u30b7\u30e7\u30c3\u30d7&lt;\/h2>\n    &lt;p>\u30b4\u30fc\u30eb\u30c9: &lt;span id=\"shopGold\">${state.gold}&lt;\/span>G&lt;\/p>\n    &lt;div id=\"shopItemsContainer\">&lt;\/div>\n    &lt;button class=\"close-button\" onclick=\"closeShop()\">X&lt;\/button>\n  `;\n  const shopItemsContainer = document.getElementById('shopItemsContainer');\n\n  shopItems.forEach(item => {\n    const itemDiv = document.createElement('div');\n    itemDiv.className = 'shop-item';\n    itemDiv.innerHTML = `\n      &lt;span>${item.name} (${item.price}G)&lt;\/span>\n      &lt;button onclick=\"buyItem('${item.id}')\">\u8cfc\u5165&lt;\/button>\n    `;\n    shopItemsContainer.appendChild(itemDiv);\n  });\n  \/\/ Add a simple \"Sell\" option\n  if (state.inventory.length > 0) {\n    const sellSection = document.createElement('div');\n    sellSection.innerHTML = `&lt;h3>\u6301\u3061\u7269\u58f2\u5374&lt;\/h3>`;\n    state.inventory.forEach((item, index) => {\n      sellSection.innerHTML += `\n        &lt;div class=\"shop-item\">\n          &lt;span>${item.name} (${Math.floor(item.price \/ 2)}G)&lt;\/span>\n          &lt;button onclick=\"sellItem(${index})\">\u58f2\u5374&lt;\/button>\n        &lt;\/div>\n      `;\n    });\n    shopItemsContainer.appendChild(sellSection);\n  }\n}\n\nfunction buyItem(itemId) {\n  const item = shopItems.find(i => i.id === itemId);\n  if (item &amp;&amp; state.gold >= item.price) {\n    state.gold -= item.price;\n    state.inventory.push(item);\n    updatePartyStatus();\n    document.getElementById('shopGold').textContent = state.gold;\n    \/\/ Re-render shop to show updated inventory for selling\n    openShop();\n  } else if (item) {\n    \/\/ Using dialogue for messages instead of alert\n    showDialogueBlock({ speaker: \"\u30b7\u30e7\u30c3\u30d7\u5e97\u54e1\", text: \"\u30b4\u30fc\u30eb\u30c9\u304c\u8db3\u308a\u307e\u305b\u3093\uff01\" });\n  }\n}\n\nfunction sellItem(index) {\n  if (index >= 0 &amp;&amp; index &lt; state.inventory.length) {\n    const item = state.inventory.splice(index, 1)&#91;0];\n    state.gold += Math.floor(item.price \/ 2); \/\/ Sell for half price\n    updatePartyStatus();\n    document.getElementById('shopGold').textContent = state.gold;\n    openShop(); \/\/ Re-render shop\n  }\n}\n\nfunction closeShop() {\n  state.shopOpen = false;\n  shopDiv.style.display = 'none';\n}\n\n\/\/ --- Interaction System ---\n\/\/ Add click listeners to interactable entities\ndocument.addEventListener('DOMContentLoaded', () => {\n  const scene = document.querySelector('a-scene');\n\n  \/\/ Event listener for NPC interaction\n  const townNpc = document.getElementById('town-npc-1');\n  if (townNpc) {\n    townNpc.addEventListener('click', () => {\n      if (!state.inBattle &amp;&amp; !state.shopOpen) {\n        showDialogueBlock({ speaker: \"\u6751\u4eba\", text: \"\u3053\u3093\u306b\u3061\u306f\u3001\u5192\u967a\u8005\u3055\u3093\uff01\u3053\u306e\u8857\u306f\u5e73\u548c\u3067\u3059\u3088\u3002\" });\n      }\n    });\n  }\n\n  \/\/ Event listener for Shop interaction\n  const townShop = document.getElementById('town-shop');\n  if (townShop) {\n    townShop.addEventListener('click', () => {\n      if (!state.inBattle &amp;&amp; !state.shopOpen) {\n        openShop();\n      }\n    });\n  }\n\n  \/\/ Event listeners for Enemy interaction (Slimes)\n  const fieldSlime = document.getElementById('field-slime-1');\n  if (fieldSlime) {\n    fieldSlime.addEventListener('click', () => {\n      if (!state.inBattle &amp;&amp; !state.shopOpen) {\n        showDialogueBlock({\n          speaker: \"Narration\",\n          text: \"\u30b9\u30e9\u30a4\u30e0\u304c\u73fe\u308c\u305f\uff01\u6226\u3044\u307e\u3059\u304b\uff1f\",\n          choices: &#91;\n            { text: \"\u6226\u3046\", onChoose: () => { startBattle('slime'); fieldSlime.setAttribute('visible', 'false'); }, next: \"battle_result_slime\" },\n            { text: \"\u9003\u3052\u308b\", next: \"flee_result\" }\n          ]\n        });\n      }\n    });\n  }\n\n  const dungeonSlime = document.getElementById('dungeon-slime-1');\n  if (dungeonSlime) {\n    dungeonSlime.addEventListener('click', () => {\n      if (!state.inBattle &amp;&amp; !state.shopOpen) {\n        showDialogueBlock({\n          speaker: \"Narration\",\n          text: \"\u30c0\u30f3\u30b8\u30e7\u30f3\u30b9\u30e9\u30a4\u30e0\u304c\u73fe\u308c\u305f\uff01\u6226\u3044\u307e\u3059\u304b\uff1f\",\n          choices: &#91;\n            { text: \"\u6226\u3046\", onChoose: () => { startBattle('dungeon-slime'); dungeonSlime.setAttribute('visible', 'false'); }, next: \"battle_result_dungeon_slime\" },\n            { text: \"\u9003\u3052\u308b\", next: \"flee_result\" }\n          ]\n        });\n      }\n    });\n  }\n\n  \/\/ Define battle results (simple for now)\n  storyData&#91;\"battle_result_slime\"] = { speaker: \"Narration\", text: \"\u30b9\u30e9\u30a4\u30e0\u3092\u5012\u3057\u305f\uff01\u7d4c\u9a13\u5024\u306810G\u3092\u7372\u5f97\u3057\u305f\u3002\", onComplete: () => { state.gold += 10; updatePartyStatus(); }, next: currentStoryId };\n  storyData&#91;\"battle_result_dungeon_slime\"] = { speaker: \"Narration\", text: \"\u30c0\u30f3\u30b8\u30e7\u30f3\u30b9\u30e9\u30a4\u30e0\u3092\u5012\u3057\u305f\uff01\u7d4c\u9a13\u5024\u306820G\u3092\u7372\u5f97\u3057\u305f\u3002\", onComplete: () => { state.gold += 20; updatePartyStatus(); }, next: currentStoryId };\n  storyData&#91;\"flee_result\"] = { speaker: \"Narration\", text: \"\u306a\u3093\u3068\u304b\u9003\u3052\u5207\u3063\u305f\u3002\", next: currentStoryId };\n\n  \/\/ Initial story start\n  showDialogueBlock(currentStoryId);\n});\n\n\/\/ --- Main Game Loop for Progress (simplified) ---\nfunction checkProgress() {\n  updatePartyStatus();\n  const playerRig = document.querySelector('#playerRig');\n  if (!playerRig) return;\n  let pos = playerRig.object3D.position;\n\n  \/\/ Only progress linear story if no dialogue is open and not in battle\/shop\n  if (dialogue.style.display === 'none' &amp;&amp; !state.inBattle &amp;&amp; !state.shopOpen) {\n    \/\/ Auto-progress main story\n    if (storyData&#91;currentStoryId] &amp;&amp; !storyData&#91;currentStoryId].choices) {\n      \/\/ Simulate dialogue click if it's not a choice block\n      if (storyData&#91;currentStoryId].next) {\n        \/\/ This part is tricky with auto-progression.\n        \/\/ For now, the story relies on user clicks, or specific triggers.\n        \/\/ The `onComplete` in storyData handles the actual progression.\n      }\n    }\n  }\n\n  \/\/ Example: Trigger story based on proximity (can be expanded)\n  \/\/ This is just a basic example, the main story progression is click-driven.\n  const townCenter = new THREE.Vector3(0, 1.6, 22);\n  if (pos.distanceTo(townCenter) &lt; 10 &amp;&amp; state.currentStoryStep === \"intro_04\") {\n    \/\/ This is handled by the initial showDialogueBlock, but a more complex game\n    \/\/ might trigger different dialogue based on location.\n  }\n}\n\nsetInterval(checkProgress, 700); \/\/ Check progress every 0.7 seconds\n\n\/\/ Initial setup calls\nsetWarpUI();\nupdatePartyStatus();\n&lt;\/script>\n&lt;\/body>\n&lt;\/html><\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[54],"tags":[3],"class_list":["post-26121","post","type-post","status-publish","format-standard","hentry","category-vr","tag-programming"],"aioseo_notices":[],"jetpack_featured_media_url":"","_links":{"self":[{"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/26121","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=26121"}],"version-history":[{"count":1,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/26121\/revisions"}],"predecessor-version":[{"id":26122,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/26121\/revisions\/26122"}],"wp:attachment":[{"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=26121"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=26121"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=26121"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}