abyssfuge 42
***
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ЭССЕНЦИЯ СЮРРЕАЛИЗМА</title>
<style>
:root {
/* Тема по умолчанию: Океанская */
--bg-color: #090914;
--text-color: #c8c8ff;
--accent-color: #141428;
--choice-bg: #242440;
--choice-hover: #34345a;
--border-color: #5040d0;
--highlight-color: #8060f0;
--end-color: #ff2060;
--font-main: 'Courier New', Courier, monospace;
--font-header: 'Georgia', serif;
}
/* Тема Пустыни Историй */
.desert-theme {
--bg-color: #1a150f;
--text-color: #e0d0b0;
--accent-color: #2a2015;
--choice-bg: #3a2f1f;
--choice-hover: #4a3f2f;
--border-color: #8b7555;
--highlight-color: #c4a77d;
--end-color: #e74c3c;
}
/* Тема Эха */
.echo-theme {
--bg-color: #0f1a1a;
--text-color: #b0e0e0;
--accent-color: #152a2a;
--choice-bg: #1f3a3a;
--choice-hover: #2f4a4a;
--border-color: #558b8b;
--highlight-color: #7dc4c4;
--end-color: #3ce7e7;
}
/* Тема Поля */
.field-theme {
--bg-color: #102010;
--text-color: #c0d0c0;
--accent-color: #183018;
--choice-bg: #284028;
--choice-hover: #385038;
--border-color: #609060;
--highlight-color: #80c080;
--end-color: #40e040;
}
/* Тема Комнаты */
.room-theme {
--bg-color: #181010;
--text-color: #d0c0c0;
--accent-color: #281818;
--choice-bg: #382828;
--choice-hover: #483838;
--border-color: #a07070;
--highlight-color: #d09090;
--end-color: #f06060;
}
/* Тема Леса */
.forest-theme {
--bg-color: #0f1a0f;
--text-color: #b0e0b0;
--accent-color: #152a15;
--choice-bg: #1f3a1f;
--choice-hover: #2f4a2f;
--border-color: #558b55;
--highlight-color: #7dc47d;
--end-color: #3ce73c;
}
/* Тема Океана */
.ocean-theme {
/* Используем значения по умолчанию из :root */
}
/* Тема Музыки (для эффектов) */
.font-music {
font-family: 'Arial Rounded MT Bold', 'Arial', sans-serif;
letter-spacing: 1px;
/* Можно добавить анимацию пульсации для музыки */
animation: pulse 2s infinite;
}
@keyframes pulse {
0% { transform: scale(1); }
50% { transform: scale(1.02); }
100% { transform: scale(1); }
}
body {
margin: 0;
padding: 0;
background-color: var(--bg-color);
color: var(--text-color);
font-family: var(--font-main);
line-height: 1.6;
min-height: 100vh;
display: flex;
justify-content: center;
align-items: center;
transition: background-color 1s ease, color 1s ease;
}
#game-container {
width: 90%;
max-width: 800px;
padding: 20px;
border: 1px solid var(--border-color);
border-radius: 8px;
background-color: var(--accent-color);
box-shadow: 0 0 20px rgba(80, 64, 208, 0.3);
position: relative;
overflow: hidden;
}
/* Glitch Effect для сцен */
.glitch {
position: relative;
animation: glitch-anim 0.3s linear infinite;
}
@keyframes glitch-anim {
0% { transform: translate(0); }
20% { transform: translate(-3px, 3px); }
40% { transform: translate(-3px, -3px); }
60% { transform: translate(3px, 3px); }
80% { transform: translate(3px, -3px); }
100% { transform: translate(0); }
}
header {
text-align: center;
margin-bottom: 20px;
border-bottom: 1px dashed var(--border-color);
padding-bottom: 10px;
}
h1 {
font-family: var(--font-header);
color: var(--highlight-color);
text-shadow: 0 0 5px rgba(128, 96, 240, 0.7);
margin: 0;
font-size: 2em;
}
#progress-bar-container {
width: 100%;
height: 10px;
background-color: #1a1a2a;
border-radius: 5px;
overflow: hidden;
margin-bottom: 20px;
}
#progress-bar {
height: 100%;
width: 0%;
background-color: var(--highlight-color);
transition: width 0.5s ease-in-out;
}
#scene-text {
margin-bottom: 20px;
min-height: 150px;
padding: 15px;
border-radius: 5px;
background-color: rgba(20, 20, 40, 0.5);
opacity: 0;
animation: fadeIn 1s ease-in forwards;
}
@keyframes fadeIn {
from { opacity: 0; transform: translateY(10px); }
to { opacity: 1; transform: translateY(0); }
}
#choices {
margin-bottom: 20px;
}
.choice-button {
display: block;
width: 100%;
padding: 12px 15px;
margin-bottom: 10px;
background-color: var(--choice-bg);
color: var(--text-color);
border: none;
border-radius: 5px;
cursor: pointer;
text-align: left;
font-family: var(--font-main);
font-size: 1em;
transition: background-color 0.3s, transform 0.2s;
opacity: 0;
animation: fadeIn 0.5s ease-in forwards;
}
.choice-button:hover {
background-color: var(--choice-hover);
transform: translateX(5px);
}
.choice-button:disabled {
background-color: #3a3a5a;
color: #8888aa;
cursor: not-allowed;
transform: none;
}
#game-info {
display: flex;
justify-content: space-between;
margin-top: 20px;
padding-top: 15px;
border-top: 1px dashed var(--border-color);
font-size: 0.9em;
}
#inventory, #motifs, #archetype-display {
flex: 1;
padding: 10px;
background-color: rgba(20, 20, 40, 0.3);
border-radius: 5px;
margin-right: 10px;
overflow-y: auto;
max-height: 150px;
}
#archetype-display {
margin-right: 0;
}
#inventory h3, #motifs h3, #archetype-display h3 {
margin-top: 0;
margin-bottom: 8px;
color: var(--highlight-color);
font-size: 1em;
}
#inventory ul, #motifs ul {
list-style-type: none;
padding-left: 0;
margin: 0;
}
#inventory li, #motifs li {
margin-bottom: 5px;
font-size: 0.85em;
}
#save-load-buttons {
text-align: center;
margin-top: 20px;
}
.save-load-button {
padding: 8px 15px;
margin: 0 5px;
background-color: var(--choice-bg);
color: var(--text-color);
border: 1px solid var(--border-color);
border-radius: 5px;
cursor: pointer;
font-family: var(--font-main);
transition: background-color 0.3s;
}
.save-load-button:hover {
background-color: var(--choice-hover);
}
#notification {
position: fixed;
top: 20px;
left: 50%;
transform: translateX(-50%);
background-color: var(--accent-color);
color: var(--text-color);
padding: 10px 20px;
border-radius: 5px;
border: 1px solid var(--border-color);
box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
opacity: 0;
transition: opacity 0.5s ease-in-out;
z-index: 1000;
}
.end-scene {
color: var(--end-color);
font-weight: bold;
}
footer {
text-align: center;
margin-top: 30px;
font-size: 0.8em;
color: #8888aa;
font-style: italic;
}
/* Шрифты */
.font-comic { font-family: 'Comic Sans MS', 'Comic Sans', cursive; }
.font-papyrus { font-family: 'Papyrus', fantasy; }
.font-lucida { font-family: 'Lucida Console', 'Courier New', monospace; }
.font-impact { font-family: 'Impact', 'Arial Black', sans-serif; }
.font-courier { font-family: 'Courier New', Courier, monospace; }
.font-georgia { font-family: 'Georgia', serif; }
</style>
</head>
<body>
<div id="game-container">
<header>
<h1>ЭССЕНЦИЯ СЮРРЕАЛИЗМА</h1>
</header>
<div id="progress-bar-container">
<div id="progress-bar"></div>
</div>
<div id="scene-text"></div>
<div id="choices"></div>
<div id="game-info">
<div id="inventory">
<h3>Инвентарь:</h3>
<ul id="inventory-list"></ul>
</div>
<div id="motifs">
<h3>Мотивы:</h3>
<ul id="motifs-list"></ul>
</div>
<div id="archetype-display">
<h3>Архетип:</h3>
<p id="archetype-text">Не определен</p>
</div>
</div>
<div id="save-load-buttons">
<button class="save-load-button" onclick="saveGame()">Сохранить</button>
<button class="save-load-button" onclick="loadGame()">Загрузить</button>
<button class="save-load-button" onclick="resetGame()">Начать сначала</button>
</div>
<footer>
<p>Исследуйте лабиринты сознания. Каждый выбор - это шаг в бездну.</p>
</footer>
</div>
<div id="notification"></div>
<script>
// --- ДАННЫЕ ИГРЫ ---
const gameData = {
scenes: {
// --- НАЧАЛЬНЫЕ СЦЕНЫ ---
"start": {
id: "start",
text: "Ты стоишь у края зыбучего океана, волны которого сделаны из чернил и звездного света. Над тобой висит перевернутый город, его здания растут корнями в небо. В твоей руке - перо, которое светится холодным синим светом. Что ты делаешь?",
choices: [
{ text: "Погружаюсь в океан, держа перо.", nextSceneId: "dive_ocean" },
{ text: "Пишу на песке первую букву своего имени.", nextSceneId: "write_sand" },
{ text: "Лечу вверх, к перевернутому городу.", nextSceneId: "fly_city" },
{ text: "Сажусь и начинаю рисовать пейзаж вокруг.", nextSceneId: "draw_landscape" },
{ text: "Закрываю глаза и слушаю шепот волн.", nextSceneId: "listen_waves" }
]
},
"dive_ocean": {
id: "dive_ocean",
text: "Холод охватывает тебя. Ты погружаешься в глубины, где свет пера рассеивается, создавая причудливые узоры. Водоворот мыслей и образов окружает тебя. Ты чувствуешь, как твоя сущность начинает меняться.",
choices: [
{ text: "Принять изменения и стать частью водоворота.", nextSceneId: "become_vortex" },
{ text: "Бороться, сохраняя человеческую форму.", nextSceneId: "fight_form" },
{ text: "Отпустить перо и наблюдать, как оно плывет прочь.", nextSceneId: "release_pen" },
{ text: "Попытаться понять язык шепчущих волн.", nextSceneId: "understand_waves" },
{ text: "Всплыть на поверхность, испугавшись глубин.", nextSceneId: "surface_fear" }
]
},
"write_sand": {
id: "write_sand",
text: "Песок под твоими пальцами начинает жить. Написанная буква превращается в сияющий символ, который поднимается в воздух. Вокруг появляются другие символы, складывающиеся в непонятное письмо.",
choices: [
{ text: "Попытаться прочитать это письмо.", nextSceneId: "read_symbols" },
{ text: "Стереть символы, вернув песок в исходное состояние.", nextSceneId: "erase_symbols" },
{ text: "Следовать за парящим символом.", nextSceneId: "follow_symbol" },
{ text: "Добавить больше букв, создавая сложный узор.", nextSceneId: "create_pattern" },
{ text: "Закопать перо в песок.", nextSceneId: "bury_pen" }
]
},
"fly_city": {
id: "fly_city",
text: "Ты взлетаешь, и мир переворачивается. Теперь ты летишь среди корней зданий, внизу раскинулся океан. Город живой, его стены пульсируют, а окна - это глаза, следящие за тобой.",
choices: [
{ text: "Посетить самое большое 'окно-глаз'.", nextSceneId: "visit_big_eye" },
{ text: "Попытаться войти внутрь одного из зданий через дверь в корне.", nextSceneId: "enter_building" },
{ text: "Прикоснуться к пульсирующей стене.", nextSceneId: "touch_wall" },
{ text: "Искать выход из этого перевернутого мира.", nextSceneId: "find_exit" },
{ text: "Петь, наблюдая за движением города.", nextSceneId: "sing_city" }
]
},
"draw_landscape": {
id: "draw_landscape",
text: "Перо касается бумаги... но бумаги нет. Ты рисуешь в воздухе, и линии остаются, создавая объемные образы. Твой рисунок начинает жить, превращаясь в маленький мир, парящий перед тобой.",
choices: [
{ text: "Войти в нарисованный мир.", nextSceneId: "enter_drawing" },
{ text: "Создать второго себя на рисунке.", nextSceneId: "create_self" },
{ text: "Нарисовать мост между реальностью и рисунком.", nextSceneId: "draw_bridge" },
{ text: "Стереть рисунок, пока он не стал опасным.", nextSceneId: "erase_drawing" },
{ text: "Отдать перо нарисованному существу.", nextSceneId: "give_pen_to_drawing" }
]
},
"listen_waves": {
id: "listen_waves",
text: "Шепот волн становится громче, превращаясь в голоса. Они рассказывают истории забытых цивилизаций, древние заклинания и тайны бытия. Ты понимаешь, что можешь задать один вопрос.",
choices: [
{ text: "Спросить о смысле собственного существования.", nextSceneId: "ask_existence" },
{ text: "Спросить о судьбе перевернутого города.", nextSceneId: "ask_city_fate" },
{ text: "Спросить, как выбраться из этого сна.", nextSceneId: "ask_wake_up" },
{ text: "Спросить о природе реальности.", nextSceneId: "ask_reality" },
{ text: "Не задавать вопрос, продолжая просто слушать.", nextSceneId: "keep_listening" }
]
},
// --- ВЕТКА: Погружение в океан ---
"become_vortex": {
id: "become_vortex",
text: "Ты отпускаешь контроль. Твое тело распадается, сознание расширяется. Ты становишься водоворотом, поглощающим образы, мысли, миры. Ты - это движение, это вечность.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Слияние"); determineArchetypeAndShow(state); }
},
"fight_form": {
id: "fight_form",
text: "Ты сопротивляешься. Сила водоворота пытается разорвать тебя, но ты держишься. Перо в твоей руке начинает светиться ярче, как маяк. Внезапно ты выбрасываешься на поверхность.",
choices: [
{ text: "Осмотреть новое окружение.", nextSceneId: "surface_new_world" },
{ text: "Проверить перо.", nextSceneId: "check_pen_surface" }
]
},
"release_pen": {
id: "release_pen",
text: "Перо выскальзывает из пальцев и уплывает вглубь. В этот момент ты понимаешь, что перо было якорем, связывающим тебя с реальностью. Ты начинаешь дезинтегрироваться, становясь частью океана.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Потеря Якоря"); determineArchetypeAndShow(state); }
},
"understand_waves": {
id: "understand_waves",
text: "Язык волн - это музыка, это ритм бытия. Ты начинаешь понимать его, и волны подхватывают тебя, унося в лабиринт подводных пещер, наполненных сияющими кристаллами памяти.",
choices: [
{ text: "Исследовать ближайшую пещеру.", nextSceneId: "explore_cave" },
{ text: "Собрать кристалл памяти.", nextSceneId: "collect_crystal", item: "Кристалл Памяти" }
]
},
"surface_fear": {
id: "surface_fear",
text: "Страх заставляет тебя всплыть. Ты вдыхаешь воздух, но мир изменился. Океан стал зеркалом, и ты видишь отражение не себя, а кого-то другого. Перевернутый город исчез.",
choices: [
{ text: "Вглядеться в отражение.", nextSceneId: "look_reflection" },
{ text: "Разбить зеркало океана.", nextSceneId: "break_mirror" }
]
},
// --- ВЕТКА: Письмо на песке ---
"read_symbols": {
id: "read_symbols",
text: "Символы складываются в предложение: 'Ты - ключ, но дверь еще не создана'. Земля под тобой начинает вибрировать, и из песка вырастает лестница, ведущая вниз, в темноту.",
choices: [
{ text: "Спуститься по лестнице.", nextSceneId: "descend_ladder" },
{ text: "Искать 'дверь', о которой говорится в послании.", nextSceneId: "search_door" }
]
},
"erase_symbols": {
id: "erase_symbols",
text: "Ты стираешь символы, но песок сразу же формирует их снова, теперь вдвое больше. Они окружают тебя, создавая ловушку из света и тени. Ты чувствуешь, как твоя воля угасает.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Ловушка Смысла"); determineArchetypeAndShow(state); }
},
"follow_symbol": {
id: "follow_symbol",
text: "Символ плывет вперед, и ты следуешь за ним. Он ведет тебя к краю обрыва, где песок обрывается в пустоту. Символ останавливается, вращаясь в воздухе.",
choices: [
{ text: "Прыгнуть в пустоту за символом.", nextSceneId: "jump_void" },
{ text: "Попытаться схватить символ.", nextSceneId: "grab_symbol" }
]
},
"create_pattern": {
id: "create_pattern",
text: "Узор становится все сложнее, и внезапно он вспыхивает, открывая портал в другой мир. Из портала доносится приглушенный смех и звук капающей воды.",
choices: [
{ text: "Войти в портал.", nextSceneId: "enter_portal_sand" },
{ text: "Закрыть портал, завершив узор.", nextSceneId: "close_portal_sand" }
]
},
"bury_pen": {
id: "bury_pen",
text: "Ты закапываешь перо. Земля дрожит, и из точки, где зарыто перо, начинает расти дерево. Его листья - это страницы книг, а плоды - сияющие чернильницы.",
choices: [
{ text: "Сорвать плод-чернильницу.", nextSceneId: "pick_ink_fruit", item: "Чернильница Мемории" },
{ text: "Сесть под деревом и начать читать листья.", nextSceneId: "read_leaves" }
]
},
// --- ВЕТКА: Полет к городу ---
"visit_big_eye": {
id: "visit_big_eye",
text: "Ты приближаешься к огромному окну. Внутри ты видишь бесконечную библиотеку, где книги сами перелистываются. Глаз моргает, и ты чувствуешь, как знания хлынули в твой разум.",
choices: [
{ text: "Попытаться войти в библиотеку.", nextSceneId: "enter_library" },
{ text: "Отвести взгляд, боясь потерять рассудок.", nextSceneId: "look_away_library" }
]
},
"enter_building": {
id: "enter_building",
text: "Дверь открывается, и ты оказываешься в странном помещении. Пол - это звездное небо, стены текут как вода. В центре комнаты стоит стол, на котором лежит карта, но она изображает не местность, а твои собственные сны.",
choices: [
{ text: "Изучить карту снов.", nextSceneId: "study_dream_map" },
{ text: "Положить руку на звездный пол.", nextSceneId: "touch_star_floor" }
]
},
"touch_wall": {
id: "touch_wall",
text: "Стена пульсирует под твоим прикосновением. Ты чувствуешь, как твоя кожа становится прозрачной, и ты видишь свои внутренние органы, но они сделаны из света и тени. Город принимает тебя.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Слияние с Городом"); determineArchetypeAndShow(state); }
},
"find_exit": {
id: "find_exit",
text: "Ты ищешь выход и находишь его - дверь, ведущую обратно в 'правильный' мир. Но рядом с дверью сидит фигура, похожая на тебя, но с перевернутым лицом. Она смотрит на тебя.",
choices: [
{ text: "Открыть дверь и уйти.", nextSceneId: "open_door_leave" },
{ text: "Поговорить с перевернутой фигурой.", nextSceneId: "talk_flipped_figure" }
]
},
"sing_city": {
id: "sing_city",
text: "Твой голос эхом разносится по городу. Здания начинают вибрировать в такт, создавая симфонию. Окна-глаза закрываются, и ты чувствуешь, как город засыпает под твою песню.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Убаюкивание"); determineArchetypeAndShow(state); }
},
// --- ВЕТКА: Рисование ---
"enter_drawing": {
id: "enter_drawing",
text: "Ты шагаешь в рисунок. Мир внутри него странен и прекрасен, но хрупок. Каждый твой шаг стирает линии, изменяя пейзаж. Ты понимаешь, что ты создатель и разрушитель этого мира одновременно.",
choices: [
{ text: "Двигаться осторожно, чтобы сохранить мир.", nextSceneId: "move_carefully_drawing" },
{ text: "Бежать, наблюдая, как мир меняется за тобой.", nextSceneId: "run_drawing" }
]
},
"create_self": {
id: "create_self",
text: "Нарисованный 'ты' оживает. Он смотрит на тебя с любопытством, затем улыбается и делает шаг навстречу. Вы стоите лицом к лицу - оригинал и копия.",
choices: [
{ text: "Попытаться объяснить ему, кто ты.", nextSceneId: "explain_to_copy" },
{ text: "Предложить ему выйти в реальный мир.", nextSceneId: "invite_copy_out" }
]
},
"draw_bridge": {
id: "draw_bridge",
text: "Мост материализуется. Он ведет в никуда, в точку между реальностью и воображением. По мосту идут другие путешественники - фрагменты твоего подсознания.",
choices: [
{ text: "Перейти мост.", nextSceneId: "cross_bridge" },
{ text: "Поговорить с одним из фрагментов.", nextSceneId: "talk_fragment" }
]
},
"erase_drawing": {
id: "erase_drawing",
text: "Ты стираешь рисунок. Мир исчезает, но в воздухе остается ощущение утраты. Перо в твоей руке становится тяжелее. Ты чувствуешь, что потерял что-то важное.",
choices: [
{ text: "Попытаться нарисовать что-то новое.", nextSceneId: "draw_new" },
{ text: "Уйти с этого места.", nextSceneId: "leave_place" }
]
},
"give_pen_to_drawing": {
id: "give_pen_to_drawing",
text: "Существо берет перо. Его глаза вспыхивают, и оно начинает рисовать. Новый мир создается вокруг, более яркий и живой, чем предыдущий. Оно предлагает тебе место в этом новом мире.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Сотворение"); determineArchetypeAndShow(state); }
},
// --- ВЕТКА: Шепот волн ---
"ask_existence": {
id: "ask_existence",
text: "Голоса шепчут: 'Ты - вопрос, на который мир пытается ответить. Твое существование - это акт творения, повторяющийся бесконечно.' Волны становятся спокойнее.",
choices: [
{ text: "Спросить: 'Какой ответ?'.", nextSceneId: "ask_answer" },
{ text: "Принять это и встать.", nextSceneId: "accept_stand" }
]
},
"ask_city_fate": {
id: "ask_city_fate",
text: "Ответ эхом: 'Город падает, чтобы снова взлететь. Он ищет того, кто станет его корнем. Ты - возможно, этот кто-то.' Небо над тобой начинает темнеть.",
choices: [
{ text: "Поднять голову и ждать.", nextSceneId: "wait_sky" },
{ text: "Закрыть уши и уйти.", nextSceneId: "leave_waves" }
]
},
"ask_wake_up": {
id: "ask_wake_up",
text: "Шепот становится громче: 'Сон - это другая форма реальности. Ты не спишь, ты просто смотришь с другого берега.' Ты чувствуешь, как реальность вокруг начинает колебаться, как теплый воздух над огнем.",
choices: [
{ text: "Попытаться 'проснуться'.", nextSceneId: "try_wake_up" },
{ text: "Исследовать колеблющуюся реальность.", nextSceneId: "explore_shifting_reality" }
]
},
"ask_reality": {
id: "ask_reality",
text: "Волны замолкают на мгновение, затем отвечают хором: 'Реальность - это согласованный сон разума. Ты - один из сонных богов, забывших, что они спят.' Вокруг появляются фантомы других 'сонных богов'.",
choices: [
{ text: "Попытаться вспомнить.", nextSceneId: "try_remember_god" },
{ text: "Объединиться с фантомами.", nextSceneId: "unite_phantoms" }
]
},
"keep_listening": {
id: "keep_listening",
text: "Ты слушаешь. Истории сменяют друг друга, становясь все причудливее. Ты перестаешь понимать, где заканчиваются истории и начинаешься ты. Ты сливаешься с шепотом.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Слияние с Нарративом"); determineArchetypeAndShow(state); }
},
// --- ДОПОЛНИТЕЛЬНЫЕ СЦЕНЫ ДЛЯ ПРОДОЛЖЕНИЯ ВЕТОК ---
"surface_new_world": {
id: "surface_new_world",
text: "Ты находишься на берегу нового, неизведанного континента. Небо здесь фиолетовое, а деревья растут вниз корнями. Вдалеке виднеется башня, похожая на свернувшуюся улитку.",
choices: [
{ text: "Идти к башне-улитке.", nextSceneId: "go_to_snail_tower" },
{ text: "Исследовать ближайшее дерево.", nextSceneId: "explore_tree" }
]
},
"check_pen_surface": {
id: "check_pen_surface",
text: "Перо светится, но свет стал теплее. Оно как будто откликнулось на твой страх и усилие. Ты чувствуешь, что оно стало частью тебя, а не просто инструментом.",
choices: [
{ text: "Продолжить исследование берега.", nextSceneId: "explore_shore" }
],
onEnter: function(state) { addToInventory(state, "Связанное Перо"); }
},
"explore_cave": {
id: "explore_cave",
text: "Пещера ведет вниз, вглубь планеты. Стены покрыты глифами, похожими на корни и вены. Воздух наполнен эхом чужих мыслей.",
choices: [
{ text: "Идти глубже, следуя эху.", nextSceneId: "follow_echo" },
{ text: "Выйти из пещеры.", nextSceneId: "exit_cave" }
]
},
"look_reflection": {
id: "look_reflection",
text: "Отражение улыбается тебе чужой улыбкой. Это лицо знакомо, но ты не можешь вспомнить, чье это. Оно шепчет твое имя, но с интонацией, от которой кровь стынет в жилах.",
choices: [
{ text: "Ответить на шепот.", nextSceneId: "respond_whisper" },
{ text: "Отвернуться и уйти.", nextSceneId: "turn_away_reflection" }
]
},
"break_mirror": {
id: "break_mirror",
text: "Ты бьешь по зеркалу. Оно трескается, и из каждой трещины вырывается стая птиц, сделанных из чернил. Они улетают в небо, оставляя после себя надпись: 'Память не стереть'.",
choices: [
{ text: "Прочитать надпись.", nextSceneId: "read_inscription" }
]
},
"descend_ladder": {
id: "descend_ladder",
text: "Лестница ведет вниз, в темноту. Воздух становится плотнее. Ты слышишь собственное эхо, но оно звучит как чей-то другой голос.",
choices: [
{ text: "Продолжать спуск.", nextSceneId: "continue_descent" },
{ text: "Остановиться и послушать эхо.", nextSceneId: "listen_echo_ladder" }
]
},
"search_door": {
id: "search_door",
text: "Ты ищешь дверь, но земля вокруг начинает меняться. Песок превращается в книги, а книги - в двери. Каждая дверь ведет в историю, которую ты никогда не жил.",
choices: [
{ text: "Открыть первую попавшуюся дверь.", nextSceneId: "open_random_door" },
{ text: "Искать дверь с твоим именем.", nextSceneId: "find_door_with_name" }
]
},
"jump_void": {
id: "jump_void",
text: "Ты прыгаешь. Падение длится бесконечно. Ты проходишь сквозь слои реальности, видя фрагменты множества других жизней и миров. Наконец, ты приземляешься в мягкий свет.",
choices: [
{ text: "Осмотреться.", nextSceneId: "look_around_void" }
]
},
"grab_symbol": {
id: "grab_symbol",
text: "Ты хватаешь символ. Он обжигает твою руку, и ты отпускаешь его. Символ взрывается, и из него вырывается поток света, который ослепляет тебя. Когда ты открываешь глаза, ты снова стоишь у края океана.",
choices: [
{ text: "Начать сначала.", nextSceneId: "start" }
]
},
"enter_portal_sand": {
id: "enter_portal_sand",
text: "Ты входишь в портал. Мир вокруг искажается, и ты находишь себя в библиотеке, где книги растут как деревья. В центре стоит пожилая женщина, читающая книгу, страницы которой самопроизвольно перелистываются.",
choices: [
{ text: "Подойти к женщине.", nextSceneId: "approach_woman" },
{ text: "Выбрать книгу-дерево и начать читать.", nextSceneId: "read_tree_book" }
]
},
"close_portal_sand": {
id: "close_portal_sand",
text: "Ты закрываешь портал. Узор на песке исчезает. Мир вокруг становится статичным, как старая фотография. Ты чувствуешь себя одиноким и забытым.",
choices: [
{ text: "Попытаться создать новый узор.", nextSceneId: "create_new_pattern" },
{ text: "Уйти прочь.", nextSceneId: "walk_away" }
]
},
"read_leaves": {
id: "read_leaves",
text: "Листья шелестят историями. Ты читаешь о себе, но в этих историях ты - герой, злодей, жертва и свидетель одновременно. Каждая история заканчивается твоей смертью, но по-разному.",
choices: [
{ text: "Найти историю, где ты выжил.", nextSceneId: "find_survival_story" },
{ text: "Закрыть глаза и перестать читать.", nextSceneId: "stop_reading" }
]
},
"enter_library": {
id: "enter_library",
text: "Ты входишь в библиотеку. Книги шепчут тебе на ухо, предлагая прочитать их. На одной обложке написано твое имя. На другой - имя того, кого ты никогда не знал, но всегда искал.",
choices: [
{ text: "Взять книгу со своим именем.", nextSceneId: "take_book_your_name" },
{ text: "Взять книгу с именем неизвестного.", nextSceneId: "take_book_unknown_name" }
]
},
"look_away_library": {
id: "look_away_library",
text: "Ты отводишь взгляд. Глаз окна моргает, и ты чувствуешь облегчение. Но теперь ты видишь, что вокруг города появились новые, еще более странные строения, как будто он продолжает расти.",
choices: [
{ text: "Исследовать новые строения.", nextSceneId: "explore_new_structures" }
]
},
"study_dream_map": {
id: "study_dream_map",
text: "Карта показывает пересечения, повторения, циклы. Ты видишь, что некоторые сны ведут в тупики, а другие - в те же точки, откуда ты начал. Это лабиринт.",
choices: [
{ text: "Найти выход из лабиринта на карте.", nextSceneId: "find_exit_map" },
{ text: "Попытаться изменить маршрут на карте.", nextSceneId: "change_route_map" }
]
},
"touch_star_floor": {
id: "touch_star_floor",
text: "Прикосновение к полу открывает портал под твоими ногами. Ты падаешь в звездную бездну, где каждая звезда - это чья-то нереализованная мечта.",
choices: [
{ text: "Попытаться схватить одну из звезд.", nextSceneId: "grab_star" },
{ text: "Крикнуть в бездну.", nextSceneId: "shout_void" }
]
},
"open_door_leave": {
id: "open_door_leave",
text: "Ты открываешь дверь. За ней обычный мир, солнце, шум машин. Ты оборачиваешься, но города уже нет. У тебя в руке осталось перо. Ты кладешь его в карман и уходишь.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Возвращение"); determineArchetypeAndShow(state); }
},
"talk_flipped_figure": {
id: "talk_flipped_figure",
text: "Фигура говорит твоим голосом, но задом наперед. Она говорит о том, что ты - лишь отражение, а она - истинная реальность. Предлагает поменяться местами.",
choices: [
{ text: "Согласиться поменяться.", nextSceneId: "agree_swap" },
{ text: "Отказаться и открыть дверь.", nextSceneId: "refuse_open_door" }
]
},
"move_carefully_drawing": {
id: "move_carefully_drawing",
text: "Ты двигаешься осторожно. Мир вокруг стабилизируется. Ты понимаешь, что являешься его творцом. Перед тобой появляется возможность создать идеальный пейзаж.",
choices: [
{ text: "Создать пейзаж воспоминаний.", nextSceneId: "create_memory_landscape" },
{ text: "Создать пейзаж мечты.", nextSceneId: "create_dream_landscape" }
]
},
"run_drawing": {
id: "run_drawing",
text: "Ты бежишь. Мир за тобой меняется хаотично, сливаясь в абстрактные формы. Ты теряешь ориентацию и в конце концов растворяешься в этом хаосе.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Растворение в Хаосе"); determineArchetypeAndShow(state); }
},
"explain_to_copy": {
id: "explain_to_copy",
text: "Ты пытаешься объяснить. Копия слушает, кивает, но в ее глазах появляется сомнение. Она говорит: 'Если ты оригинал, то кто я? И почему я чувствую, что ты - лишь копия?'",
choices: [
{ text: "Доказать, что ты оригинал.", nextSceneId: "prove_original" },
{ text: "Признать, что не знаешь.", nextSceneId: "admit_dont_know" }
]
},
"invite_copy_out": {
id: "invite_copy_out",
text: "Копия улыбается и берет тебя за руку. В момент прикосновения ты чувствуешь, как перо выскальзывает из твоей руки и возвращается в рисунок. Копия становится оригиналом, а ты - рисунком.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Инверсия"); determineArchetypeAndShow(state); }
},
"cross_bridge": {
id: "cross_bridge",
text: "По мосту ты идешь в неизвестность. Ветер шепчет голоса других путешественников. В центре моста ты встречаешь существо, которое задает тебе загадку.",
choices: [
{ text: "Попытаться решить загадку.", nextSceneId: "solve_riddle" },
{ text: "Пройти мимо, игнорируя существо.", nextSceneId: "ignore_creature" }
]
},
"talk_fragment": {
id: "talk_fragment",
text: "Фрагмент говорит голосом твоего забытого детства. Он рассказывает о вещах, которые ты старательно забыл. Ты чувствуешь, как прошлое пытается вернуться.",
choices: [
{ text: "Выслушать до конца.", nextSceneId: "listen_past" },
{ text: "Закрыть уши и бежать.", nextSceneId: "run_from_past" }
]
},
"draw_new": {
id: "draw_new",
text: "Ты пытаешься рисовать снова, но перо не слушается. Оно рисует не то, что ты хочешь, а то, что оно хочет. На этот раз рисунок изображает твой собственный скелет, смотрящий на тебя сквозь плоть.",
choices: [
{ text: "Стереть этот рисунок.", nextSceneId: "erase_skeleton" },
{ text: "Спросить скелет, чего он хочет.", nextSceneId: "ask_skeleton" }
]
},
"leave_place": {
id: "leave_place",
text: "Ты уходишь. Место, где было рисунок, остается пустым. Ты чувствуешь облегчение, но и тоску. Перо в твоей руке кажется теперь чужим.",
choices: [
{ text: "Вернуться к океану.", nextSceneId: "return_ocean" }
]
},
"ask_answer": {
id: "ask_answer",
text: "Голоса отвечают: 'Ответ - это следующий вопрос.' Волны начинают образовывать новые узоры, как будто сам океан задает тебе вопрос.",
choices: [
{ text: "Попытаться 'прочитать' узоры.", nextSceneId: "read_wave_patterns" },
{ text: "Задать свой вопрос океану.", nextSceneId: "ask_ocean" }
]
},
"accept_stand": {
id: "accept_stand",
text: "Ты встаешь. Шепот волн стихает. Ты чувствуешь себя более целостным, как будто только что нашел недостающую часть себя. Перо в твоей руке светится мягко, в унисон твоему сердцебиению.",
choices: [
{ text: "Идти вдоль берега.", nextSceneId: "walk_along_shore" }
]
},
"wait_sky": {
id: "wait_sky",
text: "Ты ждешь. Небо становится чернее, и в нем появляются трещины, как на зеркале. Из трещин падают фрагменты света, превращаясь в птиц. Они кружат над тобой.",
choices: [
{ text: "Поднять руку, чтобы птицы сели на нее.", nextSceneId: "raise_hand_birds" },
{ text: "Закрыть глаза и ждать конца.", nextSceneId: "close_eyes_wait_end" }
]
},
"leave_waves": {
id: "leave_waves",
text: "Ты уходишь. Шепот стихает. Перевернутый город возвращается, но теперь он кажется тебе менее странным, более знакомым. Ты чувствуешь, что начинаешь понимать его природу.",
choices: [
{ text: "Подойти ближе к городу.", nextSceneId: "approach_city_understood" }
]
},
"try_wake_up": {
id: "try_wake_up",
text: "Ты пытаешься 'проснуться'. Мир вокруг начинает меркнуть, как старый фильм. Ты чувствуешь тяжесть, холод. Глаза открываются. Ты лежишь в своей постели. Но в руке твое перо.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Просвет"); determineArchetypeAndShow(state); }
},
"explore_shifting_reality": {
id: "explore_shifting_reality",
text: "Ты исследуешь колеблющуюся реальность. Стены домов становятся жидкими, небо меняет цвет каждую секунду. Ты понимаешь, что можешь влиять на эти изменения своим настроением.",
choices: [
{ text: "Попытаться стабилизировать реальность.", nextSceneId: "stabilize_reality" },
{ text: "Погрузиться в хаос перемен.", nextSceneId: "embrace_chaos" }
]
},
"try_remember_god": {
id: "try_remember_god",
text: "Ты пытаешься вспомнить. Фантомы окружают тебя, и ты видишь фрагменты воспоминаний, которые не принадлежат тебе. Это воспоминания всех, кто когда-либо спал и грезил.",
choices: [
{ text: "Выбрать одно воспоминание и прожить его.", nextSceneId: "live_memory" },
{ text: "Оттолкнуть фантомов и очнуться.", nextSceneId: "push_phantoms" }
]
},
"unite_phantoms": {
id: "unite_phantoms",
text: "Ты протягиваешь руки к фантомам. Они принимают тебя. Ты чувствуешь, как твое сознание расширяется, вбирая в себя бесчисленные сны. Ты становишься частью коллективного бессознательного.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Слияние с Коллективом"); determineArchetypeAndShow(state); }
},
// --- ФИНАЛЬНЫЕ СЦЕНЫ ОСНОВНОЙ ВЕТКИ ---
"read_inscription": {
id: "read_inscription",
text: "[Финал: Чтение] Ты читаешь надпись на обрыве: 'Память не стереть, но можно переписать'. Слова мерцают и исчезают. Ты остаешься один, с новым пониманием.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Чтение"); determineArchetypeAndShow(state); }
},
"go_to_snail_tower": {
id: "go_to_snail_tower",
text: "[Финал: Путешествие] Ты входишь в башню-улитку. Внутри - бесконечная спираль лестниц. Ты поднимаешься, и с каждой ступенью чувствуешь, как становишься легче. В конце пути - дверь в новое начало.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Путешествие"); determineArchetypeAndShow(state); }
},
"explore_tree": {
id: "explore_tree",
text: "[Финал: Исследование] Ты исследуешь дерево. Его корни уходят глубоко в землю, а крона теряется в фиолетовом небе. Ты находишь дупло, где лежит зеркало. В отражении ты видишь свое истинное 'я'.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Исследование"); determineArchetypeAndShow(state); }
},
"follow_echo": {
id: "follow_echo",
text: "[Финал: Поиск] Ты следуешь за эхом. Оно ведет тебя к сердцу планеты, где ты находишь кристалл, излучающий твой собственный голос. Ты понимаешь, что был в поиске себя.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Поиск"); determineArchetypeAndShow(state); }
},
"exit_cave": {
id: "exit_cave",
text: "[Финал: Возвращение] Ты выходишь из пещеры. Свет ослепляет. Ты видишь океан, но он другой. Ты другой. Перо в твоей руке теперь просто палка. Ты бросаешь ее и идешь домой.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Возвращение"); determineArchetypeAndShow(state); }
},
"respond_whisper": {
id: "respond_whisper",
text: "[Финал: Диалог] Ты отвечаешь на шепот. Отражение выходит из зеркала океана и становится реальным. Оно говорит: 'Теперь мы вместе'. Вы идете вдвоем по берегу, становясь одним.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Диалог"); determineArchetypeAndShow(state); }
},
"turn_away_reflection": {
id: "turn_away_reflection",
text: "[Финал: Отказ] Ты отворачиваешься. Отражение кричит, зовет тебя, но ты уходишь. Ты чувствуешь облегчение. Ты сохранил свою целостность, отказавшись от встречи с другой стороной своей души.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Отказ"); determineArchetypeAndShow(state); }
},
"continue_descent": {
id: "continue_descent",
text: "[Финал: Погружение] Ты продолжаешь спускаться. Темнота становится абсолютной. Ты перестаешь чувствовать свое тело. Ты - только мысль, падающая в вечность.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Погружение"); determineArchetypeAndShow(state); }
},
"listen_echo_ladder": {
id: "listen_echo_ladder",
text: "[Финал: Прислушивание] Ты останавливаешься и слушаешь эхо. Оно рассказывает историю о том, как ты забрел сюда много лет назад и так и не нашел выход. Ты понимаешь, что это твое подсознание.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Прислушивание"); determineArchetypeAndShow(state); }
},
"open_random_door": {
id: "open_random_door",
text: "[Финал: Случайность] Ты открываешь дверь. За ней - твоя жизнь, но с одним изменением. Ты видишь себя, сделавшего другой выбор много лет назад. Жизнь пошла по другому пути. Ты закрываешь дверь, понимая, что все возможно.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Случайность"); determineArchetypeAndShow(state); }
},
"find_door_with_name": {
id: "find_door_with_name",
text: "[Финал: Идентичность] Ты находишь дверь со своим именем. За ней - комната, в которой ты видишь все свои возможные 'я'. Ты выбираешь одно и становишься им. Другие исчезают.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Идентичность"); determineArchetypeAndShow(state); }
},
"look_around_void": {
id: "look_around_void",
text: "[Финал: Наблюдение] Ты оглядываешься. Место странное и красивое. Ты чувствуешь, что можешь остаться здесь навсегда, наблюдая за потоками реальности. Ты становишься вечным наблюдателем.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Наблюдение"); determineArchetypeAndShow(state); }
},
"approach_woman": {
id: "approach_woman",
text: "[Финал: Знание] Ты подходишь к женщине. Она улыбается и протягивает тебе книгу. 'Это твоя история', - говорит она. Ты берешь книгу. На обложке твое имя. Ты открываешь первую страницу и читаешь: 'Жил-был...'",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Знание"); determineArchetypeAndShow(state); }
},
"read_tree_book": {
id: "read_tree_book",
text: "[Финал: Поглощение] Ты начинаешь читать книгу-дерево. Слова входят в тебя, переполняют сознание. Ты перестаешь быть собой. Ты становишься частью книги, части дерева, частью самой библиотеки.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Поглощение"); determineArchetypeAndShow(state); }
},
"create_new_pattern": {
id: "create_new_pattern",
text: "[Финал: Творчество] Ты создаешь новый узор. Он красив и сложен. В этот момент ты понимаешь, что являешься творцом реальности. Ты можешь создать любой мир. Ты начинаешь создавать свой собственный мир.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Творчество"); determineArchetypeAndShow(state); }
},
"walk_away": {
id: "walk_away",
text: "[Финал: Уход] Ты уходишь. Песок остается пустым. Ты чувствуешь, что упустил что-то важное. Ты оборачиваешься, но портал не открывается снова. Ты идешь по берегу, оставляя следы.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Уход"); determineArchetypeAndShow(state); }
},
"find_survival_story": {
id: "find_survival_story",
text: "[Финал: Надежда] Ты находишь историю, где выжил. Но прочитав ее, ты понимаешь, что 'выжить' означало отказаться от всего, что делало тебя собой. Выживший - это пустая оболочка. Ты закрываешь глаза, понимая цену выживания.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Надежда"); determineArchetypeAndShow(state); }
},
"stop_reading": {
id: "stop_reading",
text: "[Финал: Игнорирование] Ты перестаешь читать. Дерево перестает шелестеть. Тишина окутывает тебя. Ты чувствуешь облегчение, но и пустоту. Ты уходишь, оставляя за собой неотвеченные вопросы.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Игнорирование"); determineArchetypeAndShow(state); }
},
"take_book_your_name": {
id: "take_book_your_name",
text: "[Финал: Признание] Ты берешь книгу со своим именем. Она рассыпается в твоих руках, превращаясь в пыль. Из пыли поднимается образ твоего 'я', который говорит: 'Ты наконец нашел меня'.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Признание"); determineArchetypeAndShow(state); }
},
"take_book_unknown_name": {
id: "take_book_unknown_name",
text: "[Финал: Открытие] Ты берешь книгу с неизвестным именем. В ней история о человеке, которого не существует, но который живет в каждом из нас. Ты понимаешь, что это ты, которого ты боишься стать.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Открытие"); determineArchetypeAndShow(state); }
},
"explore_new_structures": {
id: "explore_new_structures",
text: "[Финал: Исследование] Ты исследуешь новые строения. Они излучают тепло и пульсируют. Ты входишь в одно из них и находишь комнату, полную зеркал. В каждом зеркале - ты, но в разном возрасте, в разных жизнях.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Исследование"); determineArchetypeAndShow(state); }
},
"find_exit_map": {
id: "find_exit_map",
text: "[Финал: Решение] Ты находишь выход на карте. Он ведет в точку, обозначенную как 'Начало'. Ты понимаешь, что лабиринт - это круг. Ты возвращаешься туда, откуда начал, но уже не тот, что был.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Решение"); determineArchetypeAndShow(state); }
},
"change_route_map": {
id: "change_route_map",
text: "[Финал: Изменение] Ты пытаешься изменить маршрут. Карта сопротивляется, но ты настаиваешь. Линии перерисовываются. Ты создаешь новый путь, ведущий в неизведанное. Ты следуешь по нему.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Изменение"); determineArchetypeAndShow(state); }
},
"grab_star": {
id: "grab_star",
text: "[Финал: Достижение] Ты хватаешь звезду. Она обжигает, но ты не отпускаешь. Свет ослепляет. Ты чувствуешь, как наполняешься силой чужих мечтаний. Ты становишься воплощением надежды.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Достижение"); determineArchetypeAndShow(state); }
},
"shout_void": {
id: "shout_void",
text: "[Финал: Крик] Ты кричишь в бездну. Твой крик эхом возвращается, но каждый раз он звучит по-другому. Ты понимаешь, что кричишь не в пустоту, а в бесконечность возможностей. Каждый эхо - это новая жизнь.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Крик"); determineArchetypeAndShow(state); }
},
"agree_swap": {
id: "agree_swap",
text: "[Финал: Жертва] Ты соглашаешься поменяться. Мир переворачивается. Ты теперь внутри двери, а фигура снаружи. Ты чувствуешь, как реальность принимает тебя. Ты - новая стражница границы.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Жертва"); determineArchetypeAndShow(state); }
},
"refuse_open_door": {
id: "refuse_open_door",
text: "[Финал: Упорство] Ты отказываешься. Фигура вздыхает и отходит в сторону. Ты открываешь дверь. За ней обычный мир. Ты уходишь, чувствуя, что сохранил себя, несмотря ни на что.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Упорство"); determineArchetypeAndShow(state); }
},
"create_memory_landscape": {
id: "create_memory_landscape",
text: "[Финал: Ностальгия] Ты создаешь пейзаж воспоминаний. Он прекрасен, но грустен. Ты живешь в нем вечно, переживая одни и те же моменты снова и снова. Время останавливается.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Ностальгия"); determineArchetypeAndShow(state); }
},
"create_dream_landscape": {
id: "create_dream_landscape",
text: "[Финал: Идеализм] Ты создаешь пейзаж мечты. Он совершенен, но хрупок. Любое прикосновение к нему искажает его. Ты становишься тюремщиком собственной мечты, боясь даже дышать.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Идеализм"); determineArchetypeAndShow(state); }
},
"prove_original": {
id: "prove_original",
text: "[Финал: Доказательство] Ты пытаешься доказать. Но чем больше ты доказываешь, тем меньше уверен в себе. Копия улыбается. 'Видишь, ты уже сомневаешься. Значит, я - оригинал'. Мир меняется.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Доказательство"); determineArchetypeAndShow(state); }
},
"admit_dont_know": {
id: "admit_dont_know",
text: "[Финал: Смирение] Ты признаешь, что не знаешь. Копия кивает с уважением. 'Тогда мы оба оригиналы', - говорит она. Она протягивает руку, и вы выходите из рисунка вместе, став двумя частями одного целого.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Смирение"); determineArchetypeAndShow(state); }
},
"solve_riddle": {
id: "solve_riddle",
text: "[Финал: Интеллект] Ты решаешь загадку. Существо улыбается и исчезает. Мост под твоими ногами становится прочнее. Ты переходишь его и находишь себя в месте, где все вопросы уже имеют ответы.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Интеллект"); determineArchetypeAndShow(state); }
},
"ignore_creature": {
id: "ignore_creature",
text: "[Финал: Индифферентность] Ты идешь мимо. Существо вздыхает и исчезает. Мост трясется под твоими ногами. Ты почти достигаешь середины, когда мост обрушивается. Ты падаешь в пустоту, но падение не приносит страха, а лишь покой.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Индифферентность"); determineArchetypeAndShow(state); }
},
"listen_past": {
id: "listen_past",
text: "[Финал: Принятие] Ты выслушиваешь до конца. Прошлое вливается в тебя, делая тебя целостным. Ты понимаешь, что не нужно бояться забытого. Ты встаешь, чувствуя себя полным.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Принятие"); determineArchetypeAndShow(state); }
},
"run_from_past": {
id: "run_from_past",
text: "[Финал: Отрицание] Ты бежишь. Фрагменты прошлого кричат тебе вслед, но ты не оглядываешься. Ты выходишь из рисунка, чувствуя облегчение. Но ты знаешь, что часть тебя осталась там, в прошлом.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Отрицание"); determineArchetypeAndShow(state); }
},
"erase_skeleton": {
id: "erase_skeleton",
text: "[Финал: Отказ от Смерти] Ты стираешь рисунок скелета. Перо дрожит в твоей руке. Ты чувствуешь, как жизнь вливается в тебя с новой силой. Ты отверг смерть, выбрав жизнь.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Отказ от Смерти"); determineArchetypeAndShow(state); }
},
"ask_skeleton": {
id: "ask_skeleton",
text: "[Финал: Диалог со Смертью] Ты спрашиваешь скелет. Он отвечает: 'Я хочу быть свободным'. Ты понимаешь, что должен отпустить перо. Оно возвращается скелету, и тот оживает, благодарит тебя и уходит, оставляя после себя только пустую оболочку.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Диалог со Смертью"); determineArchetypeAndShow(state); }
},
"return_ocean": {
id: "return_ocean",
text: "[Финал: Возвращение] Ты возвращаешься к океану. Все как будто забылось. Но в твоем сердце остался осадок пережитого. Ты снова стоишь у края, перо в руке. Что ты делаешь?",
choices: [
{ text: "Погружаюсь в океан, держа перо.", nextSceneId: "dive_ocean" },
{ text: "Пишу на песке первую букву своего имени.", nextSceneId: "write_sand" },
{ text: "Лечу вверх, к перевернутому городу.", nextSceneId: "fly_city" },
{ text: "Сажусь и начинаю рисовать пейзаж вокруг.", nextSceneId: "draw_landscape" },
{ text: "Закрываю глаза и слушаю шепот волн.", nextSceneId: "listen_waves" }
],
onEnter: function(state) { addMotif(state, "Цикл"); }
},
"read_wave_patterns": {
id: "read_wave_patterns",
text: "[Финал: Чтение Природы] Ты 'читаешь' узоры волн. Они говорят о великом цикле, о связи всех вещей. Ты понимаешь свое место в этом цикле. Ты становишься частью океана, но сохраняешь сознание.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Чтение Природы"); determineArchetypeAndShow(state); }
},
"ask_ocean": {
id: "ask_ocean",
text: "[Финал: Вопрос] Ты задаешь свой вопрос океану. Волны отвечают не словами, а чувствами. Ты понимаешь ответ всем своим существом. Это знание становится частью тебя. Ты уходишь, измененный.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Вопрос"); determineArchetypeAndShow(state); }
},
"walk_along_shore": {
id: "walk_along_shore",
text: "[Финал: Путь] Ты идешь вдоль берега. Перо в руке светится в такт твоим шагам. Ты не знаешь, куда ведет путь, но ты идешь. Это и есть ответ.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Путь"); determineArchetypeAndShow(state); }
},
"raise_hand_birds": {
id: "raise_hand_birds",
text: "[Финал: Принятие Дара] Ты поднимаешь руку. Птицы садятся на нее. Их свет наполняет тебя. Ты понимаешь, что они - твои забытые мечты. Ты принимаешь их обратно. Ты становишься целым.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Принятие Дара"); determineArchetypeAndShow(state); }
},
"close_eyes_wait_end": {
id: "close_eyes_wait_end",
text: "[Финал: Сдача] Ты закрываешь глаза и ждешь. Тьма окутывает тебя. Ты чувствуешь, как твое 'я' распадается. Это не боль, а облегчение. Ты сдаешься концу.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Сдача"); determineArchetypeAndShow(state); }
},
"approach_city_understood": {
id: "approach_city_understood",
text: "[Финал: Понимание] Ты подходишь к городу. Теперь ты понимаешь его. Это не город, а карта твоего сознания. Ты входишь в него, чтобы исследовать себя изнутри.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Понимание"); determineArchetypeAndShow(state); }
},
"stabilize_reality": {
id: "stabilize_reality",
text: "[Финал: Контроль] Ты стабилизируешь реальность. Хаос утихает. Мир становится предсказуемым. Ты чувствуешь власть, но также и скуку. Ты создал идеальную клетку.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Контроль"); determineArchetypeAndShow(state); }
},
"embrace_chaos": {
id: "embrace_chaos",
text: "[Финал: Хаос] Ты погружаешься в хаос. Мир меняется каждую секунду. Ты теряешь себя, но находишь нечто большее. Ты становишься частью потока, частью вечного изменения.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Хаос"); determineArchetypeAndShow(state); }
},
"live_memory": {
id: "live_memory",
text: "[Финал: Жизнь в Прошлом] Ты выбираешь воспоминание и живешь его. Оно становится реальнее настоящего. Ты забываешь, кто ты есть сейчас. Ты остаешься в прошлом навсегда.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Жизнь в Прошлом"); determineArchetypeAndShow(state); }
},
"push_phantoms": {
id: "push_phantoms",
text: "[Финал: Пробуждение] Ты отталкиваешь фантомов. Сны рассеиваются. Ты очищаешься от чужих воспоминаний. Ты встаешь, чувствуя себя своим хозяином. Ты проснулся.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Пробуждение"); determineArchetypeAndShow(state); }
},
// --- ВЕТКА: ПУСТЫНЯ ИСТОРИЙ ---
// --- СЦЕНА 1: ВХОД В ПУСТЫНЮ ---
"desert_enter": {
id: "desert_enter",
text: "Ты входишь в Пустыню Историй. Песок здесь не желтый, а серо-бежевый, как старые страницы. Воздух наполнен шелестом пергамента и запахом чернил. Ты видишь руины, похожие одновременно на обломки дома и обложки книги.",
choices: [
{ text: "Иду к ближайшим руинам.", nextSceneId: "desert_approach_ruins" },
{ text: "Слушаю шелест песка.", nextSceneId: "desert_listen_sand" },
{ text: "Собираю обломки, чтобы построить что-то новое.", nextSceneId: "desert_collect_fragments" },
{ text: "Ищу следы других путешественников.", nextSceneId: "desert_look_for_tracks" }
],
style: { theme: "desert-theme", font: "font-papyrus" }
},
// --- СЦЕНА 2: ПОДХОЖУ К РУИНАМ ---
"desert_approach_ruins": {
id: "desert_approach_ruins",
text: "Руины напоминают обломки старого дома. Стены покрыты символами, похожими на буквы, но искаженными. Внутри ты находишь стол, на котором лежит блокнот. Он открыт на странице с надписью: 'Предупреждение: каждая история требует жертвы. Обещание: каждая жертва дарует сокровище.'",
choices: [
{ text: "Читаю предупреждение и обещание.", nextSceneId: "desert_read_notebook" },
{ text: "Сажусь за стол и начинаю писать свою историю.", nextSceneId: "desert_write_own_story" },
{ text: "Сжигаю блокнот.", nextSceneId: "desert_burn_notebook" },
{ text: "Слушаю, что шепчут руины.", nextSceneId: "desert_listen_ruins" }
],
style: { theme: "desert-theme", font: "font-papyrus" }
},
// --- СЦЕНА 3: ЧИТАЮ БЛОКНОТ ---
"desert_read_notebook": {
id: "desert_read_notebook",
text: "Ты читаешь предупреждение и обещание. Слова начинают мерцать. Внезапно блокнот закрывается, и из него вылетает стая бумажных лодок. Они плывут по воздуху, как по течению. Каждая лодка - это история, которую кто-то оставил здесь.",
choices: [
{ text: "Строю из песка плот, чтобы последовать за ними.", nextSceneId: "build_sand_raft" },
{ text: "Разбиваю оставшиеся кусочки страниц. Больше лодок не появляется.", nextSceneId: "break_more_lonely" },
{ text: "Сажусь и смотрю фильм до конца.", nextSceneId: "desert_sit_watch_film" }
],
onEnter: function(state) { addMotif(state, "Мотив: Предупреждение и Обещание"); },
style: { theme: "desert-theme", font: "font-papyrus" }
},
// --- СЦЕНА 4: СОБИРАЮ ОБЛОМКИ ---
"desert_collect_fragments": {
id: "desert_collect_fragments",
text: "Ты начинаешь собирать обломки. Из кусочка стены, кусочка пола, осколка окна ты пытаешься сложить что-то целое. С каждым новым фрагментом твоя конструкция становится все причудливее. Это уже не дом и не книга. Это что-то новое, рожденное из хаоса. Когда ты заканчиваешь, конструкция оживает. Стены начинают менять цвет, пол – издавать тихий шепот, а из окна доносится свет. Ты слышишь голос: 'Ты создал новую реальность. Войди в нее.'",
choices: [
{ text: "Вхожу внутрь созданной конструкции.", nextSceneId: "desert_enter_creation" },
{ text: "Наблюдаю, как оживает моя конструкция.", nextSceneId: "desert_watch_creation" },
{ text: "Разрушаю конструкцию, боясь её силы.", nextSceneId: "desert_destroy_creation" }
],
style: { theme: "desert-theme", font: "font-comic" }
},
// --- СЦЕНА 5: ВХОЖУ В КОНСТРУКЦИЮ ---
"desert_enter_creation": {
id: "desert_enter_creation",
text: "Ты входишь внутрь созданной конструкции. Стены меняют цвет. Пол издает тихий шепот. Из окна доносится свет. Ты чувствуешь, как ты становишься частью этой конструкции. Ты – не гость, ты – хозяин.",
choices: [
{ text: "Исследую интерьер конструкции.", nextSceneId: "desert_explore_interior" },
{ text: "Кричу, чтобы проверить акустику.", nextSceneId: "desert_shout_acoustics" },
{ text: "Сажусь и размышляю о своей роли.", nextSceneId: "desert_sit_reflect_role" }
],
style: { theme: "desert-theme", font: "font-papyrus" }
},
// --- СЦЕНА 6: НАБЛЮДАЮ ЗА КОНСТРУКЦИЕЙ ---
"desert_watch_creation": {
id: "desert_watch_creation",
text: "Ты наблюдаешь, как оживает моя конструкция. Стены начинают менять цвет, пол – издавать тихий шепот, а из окна доносится свет. Ты чувствуешь, как ты становишься частью этого процесса. Ты – создатель.",
choices: [
{ text: "Вхожу внутрь конструкции.", nextSceneId: "desert_enter_creation" },
{ text: "Кричу, чтобы конструкция остановилась.", nextSceneId: "desert_shout_stop_creation" },
{ text: "Сажусь и размышляю о творении.", nextSceneId: "desert_sit_reflect_creation" }
],
style: { theme: "desert-theme", font: "font-papyrus" }
},
// --- СЦЕНА 7: РАЗРУШАЮ КОНСТРУКЦИЮ ---
"desert_destroy_creation": {
id: "desert_destroy_creation",
text: "Ты разрушаешь конструкцию. Стены теряют цвет, шепот стихает, свет меркнет. Ты чувствуешь облегчение, но и сожаление. Ты – разрушитель.",
choices: [
{ text: "Покидаю место разрушения.", nextSceneId: "desert_leave_destruction" },
{ text: "Собираю осколки заново.", nextSceneId: "desert_rebuild_creation" },
{ text: "Сажусь среди обломков и размышляю о разрушении.", nextSceneId: "desert_sit_amidst_debris" }
],
style: { theme: "desert-theme", font: "font-papyrus" }
},
// --- ФИНАЛЬНЫЕ СЦЕНЫ ВЕТКИ ПУСТЫНИ ---
"desert_burn_notebook": {
id: "desert_burn_notebook",
text: "[Финал: Молчание] Ты сжигаешь блокнот. История уничтожена. Ты больше не можешь вспомнить предупреждение и обещание. Ты - молчаливый.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Финал: Молчание"); collectTreasure(state, "Слово-Сокровище: Тишина"); incrementFinalCounter(state, "История"); determineArchetypeAndShow(state); },
style: { theme: "desert-theme", font: "font-papyrus" }
},
"build_sand_raft": {
id: "build_sand_raft",
text: "Ты строишь плот. Он держится на воде недолго, но этого достаточно, чтобы отплыть немного вдаль. Иногда этого достаточно.",
choices: [{ text: "Плыть немного.", nextSceneId: "end_jump_waves" }],
style: { theme: "desert-theme", font: "font-papyrus" }
},
"break_more_lonely": {
id: "break_more_lonely",
text: "Ты разбиваешь оставшиеся кусочки. Больше лодок нет. Ты один. Одиночество охватывает тебя, но в нём тоже есть своя истина.",
choices: [{ text: "Принять одиночество.", nextSceneId: "end_cannot_write" }],
style: { theme: "desert-theme", font: "font-papyrus" }
},
"desert_sit_watch_film": {
id: "desert_sit_watch_film",
text: "[Финал: Наблюдение] Ты сажусь и смотришь, как бумажные лодки уплывают. Ты понимаешь, что иногда быть наблюдателем - это тоже форма участия. Ты - зритель.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Финал: Наблюдение"); collectTreasure(state, "Слово-Сокровище: Взгляд"); incrementFinalCounter(state, "История"); determineArchetypeAndShow(state); },
style: { theme: "desert-theme", font: "font-lucida" }
},
"desert_explore_interior": {
id: "desert_explore_interior",
text: "[Финал: Исследование] Ты исследуешь интерьер. Каждая комната - это новая глава, каждый предмет - символ. Ты становишься частью созданной реальности. Ты - исследователь.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Финал: Исследование"); collectTreasure(state, "Слово-Сокровище: Ключ"); incrementFinalCounter(state, "История"); determineArchetypeAndShow(state); },
style: { theme: "desert-theme", font: "font-papyrus" }
},
"desert_shout_acoustics": {
id: "desert_shout_acoustics",
text: "[Финал: Эхо] Ты кричишь. Голос отражается от стен, создавая эхо. Эхо становится громче, и ты понимаешь, что оно несет в себе голоса всех, кто когда-либо кричал здесь. Ты - эхо.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Финал: Эхо"); collectTreasure(state, "Слово-Сокровище: Глас"); incrementFinalCounter(state, "История"); determineArchetypeAndShow(state); },
style: { theme: "echo-theme", font: "font-impact" }
},
"desert_sit_reflect_role": {
id: "desert_sit_reflect_role",
text: "[Финал: Размышление] Ты сажусь и размышляешь о своей роли. Ты понимаешь, что создание реальности - это великая ответственность. Ты - мыслитель.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Финал: Размышление"); collectTreasure(state, "Слово-Сокровище: Мудрость"); incrementFinalCounter(state, "История"); determineArchetypeAndShow(state); },
style: { theme: "desert-theme", font: "font-lucida" }
},
"desert_shout_stop_creation": {
id: "desert_shout_stop_creation",
text: "[Финал: Остановка] Ты кричишь, чтобы остановить конструкцию. Твоя воля сильнее. Конструкция замирает. Ты - властелин.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Финал: Остановка"); collectTreasure(state, "Слово-Сокровище: Власть"); incrementFinalCounter(state, "История"); determineArchetypeAndShow(state); },
style: { theme: "echo-theme", font: "font-impact" }
},
"desert_sit_reflect_creation": {
id: "desert_sit_reflect_creation",
text: "[Финал: Творец] Ты сажусь и размышляешь о творении. Ты понимаешь, что создал нечто большее, чем просто конструкцию. Ты создал новую реальность. Ты - творец.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Финал: Творец"); collectTreasure(state, "Слово-Сокровище: Искра"); incrementFinalCounter(state, "История"); determineArchetypeAndShow(state); },
style: { theme: "desert-theme", font: "font-lucida" }
},
"desert_leave_destruction": {
id: "desert_leave_destruction",
text: "[Финал: Уход] Ты покидаешь место разрушения. Ты чувствуешь облегчение, но и пустоту. Ты ушел от ответственности. Ты - беглец.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Финал: Уход"); collectTreasure(state, "Слово-Сокровище: Свобода"); incrementFinalCounter(state, "История"); determineArchetypeAndShow(state); },
style: { theme: "desert-theme", font: "font-papyrus" }
},
"desert_rebuild_creation": {
id: "desert_rebuild_creation",
text: "[Финал: Возрождение] Ты собираешь осколки заново. Конструкция оживает снова, но теперь она сильнее. Ты понимаешь, что разрушение - это тоже часть творения. Ты - возрожденный.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Финал: Возрождение"); collectTreasure(state, "Слово-Сокровище: Воскрешение"); incrementFinalCounter(state, "История"); determineArchetypeAndShow(state); },
style: { theme: "desert-theme", font: "font-papyrus" }
},
"desert_sit_amidst_debris": {
id: "desert_sit_amidst_debris",
text: "[Финал: Размышление о Разрушении] Ты сажусь среди обломков и размышляешь о разрушении. Ты понимаешь, что иногда разрушение необходимо для создания чего-то нового. Ты - философ.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Финал: Размышление о Разрушении"); collectTreasure(state, "Слово-Сокровище: Пепел"); incrementFinalCounter(state, "История"); determineArchetypeAndShow(state); },
style: { theme: "desert-theme", font: "font-lucida" }
},
// --- СЦЕНЫ-ЗАГЛУШКИ ДЛЯ ОШИБОК ---
"end_jump_waves": {
id: "end_jump_waves",
text: "[Финал: Прыжок] Ты прыгаешь в волны. Ты чувствуешь, как тело становится легче, как будто растворяешься в чернилах и свете. Ты - часть океана.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Финал: Прыжок"); collectTreasure(state, "Слово-Сокровище: Растворение"); incrementFinalCounter(state, "История"); determineArchetypeAndShow(state); }
},
"end_cannot_write": {
id: "end_cannot_write",
text: "[Финал: Неспособность Писать] Ты пытаешься написать, но слова не идут. Ты чувствуешь, как пустота заполняет тебя. Ты - немой.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Финал: Неспособность Писать"); collectTreasure(state, "Слово-Сокровище: Гласность"); incrementFinalCounter(state, "История"); determineArchetypeAndShow(state); }
},
// --- НОВЫЕ СЦЕНЫ ИЗ ФАЙЛА ---
// --- СЦЕНА: Слияние с мелодией в Пустыне ---
"desert_merge_with_melody": {
id: "desert_merge_with_melody",
text: "Музыка становится всё громче и причудливее. Ты чувствуешь, как твои пальцы начинают сливаться с клавишами. Ты больше не играешь, ты становишься частью мелодии. Ты чувствуешь, как твое сознание расплывается, сливаясь с шепотом: '...вдохнул-выдохнул...'",
choices: [
{ text: "Сливаюсь с мелодией полностью.", nextSceneId: "desert_fully_merged" },
{ text: "Пытаюсь остановить playing, чувствуя, что иду слишком далеко.", nextSceneId: "desert_stop_playing_far" }
],
style: { theme: "desert-theme", font: "font-music" },
onEnter: function(state) { addMotif(state, "Мотив: Музыка"); }
},
"desert_fully_merged": {
id: "desert_fully_merged",
text: "Ты сливаешься с мелодией. Твоё сознание расширяется до размеров вселенной. Ты становишься частью потока, частью вечности. Ты больше не 'ты'. Ты - это всё и ничто. Мотив завершен. Или только начинается?",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Финал: Слияние"); collectTreasure(state, "Слово-Сокровище: Единство"); incrementFinalCounter(state, "История"); determineArchetypeAndShow(state); },
style: { theme: "desert-theme", font: "font-music" }
},
"desert_stop_playing_far": {
id: "desert_stop_playing_far",
text: "Ты пытаешься остановиться, но мелодия уже стала частью тебя. Ты чувствуешь, как твоя кожа начинает светиться, как перо. Ты понимаешь, что теперь ты - часть этой песни.",
choices: [
{ text: "Продолжаю играть, но теперь контролирую мелодию.", nextSceneId: "desert_control_melody" },
{ text: "Отпускаю клавиши и смотрю, что произойдет.", nextSceneId: "desert_release_keys" }
],
style: { theme: "desert-theme", font: "font-impact" }
},
"desert_control_melody": {
id: "desert_control_melody",
text: "Ты берешь контроль над мелодией. Она становится твоим голосом, твоим выражением. Ты чувствуешь, как твоя сущность расширяется, но теперь ты управляешь этим расширением.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Финал: Контроль"); collectTreasure(state, "Слово-Сокровище: Мастерство"); incrementFinalCounter(state, "История"); determineArchetypeAndShow(state); },
style: { theme: "desert-theme", font: "font-music" }
},
"desert_release_keys": {
id: "desert_release_keys",
text: "Ты отпускаешь клавиши. Музыка замирает. Ты чувствуешь, как возвращаешься к себе. Перо в твоей руке снова холодное. Ты смотришь на него с новым пониманием.",
choices: [
{ text: "Пишу имя того, кого искал, на песке.", nextSceneId: "desert_write_name_sought" },
{ text: "Продолжаю исследовать Пустыню Историй.", nextSceneId: "desert_approach_ruins" }
],
style: { theme: "desert-theme", font: "font-papyrus" }
},
// --- СЦЕНА: Лестница из слов ---
"climb_word_ladder": {
id: "climb_word_ladder",
text: "Лестница из слов 'Мечта', 'Страх', 'Надежда', 'Забвение' ведет тебя вверх. Каждое слово под твоими ногами исчезает, превращаясь в дым. Воздух становится гуще, наполненным запахом старых книг и забытых времен. Что ты делаешь?",
choices: [
{ text: "Останавливаюсь и смотрю вниз. Океан теперь выглядит как точка.", nextSceneId: "stop_look_down" },
{ text: "Продолжаешь подниматься быстрее, чтобы не провалиться.", nextSceneId: "climb_faster" },
{ text: "Вырываешь одно из слов из лестницы и кладешь его в карман.", nextSceneId: "take_word", item: "Слово: Надежда" }
],
style: { theme: "echo-theme", font: "font-lucida" }
},
"stop_look_down": {
id: "stop_look_down",
text: "Ты останавливаешься. Океан действительно выглядит как точка. Ты чувствуешь, как далеко ушел от начала пути. Ветер шепчет тебе имя, которое ты почти забыл.",
choices: [
{ text: "Произношу имя вслух.", nextSceneId: "speak_name_aloud" },
{ text: "Продолжаю подниматься.", nextSceneId: "climb_faster" }
],
style: { theme: "echo-theme", font: "font-lucida" }
},
"climb_faster": {
id: "climb_faster",
text: "Ты карабкаешься быстрее. Слова под твоими ногами исчезают быстрее. Внезапно ты чувствуешь, как кто-то тянется к тебе снизу. Это твоя Тень.",
choices: [
{ text: "Пытаюсь убежать от Тени.", nextSceneId: "run_from_shadow" },
{ text: "Поворачиваюсь и смотрю на Тень.", nextSceneId: "face_shadow" }
],
style: { theme: "echo-theme", font: "font-lucida" }
},
"take_word": {
id: "take_word",
text: "Ты вырываешь слово 'Надежда' из лестницы. Оно в твоей руке теплое, как живое. Лестница колеблется, и несколько слов падают вниз, превращаясь в звезды. Ты продолжаешь подниматься. Город уже совсем близко, и ты видишь, что его улицы заполнены тенями твоих воспоминаний. Что ты делаешь?",
choices: [
{ text: "Вхожу в ближайшее здание. Внутри - зал, где на стенах висят портреты всех людей, которых ты когда-либо любил.", nextSceneId: "hall_of_lovers" },
{ text: "Следую по главной улице. Она ведет к огромной площади с фонтаном, из которого бьет свет.", nextSceneId: "main_street_fountain" }
],
style: { theme: "echo-theme", font: "font-lucida" }
},
"run_from_shadow": {
id: "run_from_shadow",
text: "[Финал: Бегство от Тени] Ты бежишь от Тени. Но она всегда рядом. Ты не можешь избавиться от неё. Ты чувствуешь, как ты теряешь часть себя.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Финал: Бегство от Тени"); collectTreasure(state, "Слово-Сокровище: Потеря"); incrementFinalCounter(state, "История"); determineArchetypeAndShow(state); },
style: { theme: "echo-theme", font: "font-lucida" }
},
"face_shadow": {
id: "face_shadow",
text: "Ты поворачиваешься. Тень смотрит на тебя с твоими же глазами. Она говорит: 'Ты не можешь уйти от меня. Я - часть тебя.' Ты чувствуешь, как она пытается снова стать частью тебя.",
choices: [
{ text: "Принимаю Тень обратно.", nextSceneId: "accept_shadow" },
{ text: "Отказываюсь и продолжаю подъем.", nextSceneId: "refuse_continue_climb" }
],
style: { theme: "echo-theme", font: "font-lucida" }
},
"accept_shadow": {
id: "accept_shadow",
text: "Ты принимаешь Тень. Она сливается с тобой, и ты чувствуешь, как твоя сущность становится полной. Ты понимаешь, что не можешь быть целым без своих темных сторон.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Финал: Принятие"); collectTreasure(state, "Слово-Сокровище: Целостность"); incrementFinalCounter(state, "История"); determineArchetypeAndShow(state); },
style: { theme: "echo-theme", font: "font-lucida" }
},
"refuse_continue_climb": {
id: "refuse_continue_climb",
text: "Ты отказываешься. Тень отходит в сторону, но ты чувствуешь, как часть тебя уходит вместе с ней. Ты продолжаешь подъем, чувствуя себя неполным.",
choices: [
{ text: "Вхожу в ближайшее здание.", nextSceneId: "enter_building_echo" },
{ text: "Следую по главной улице.", nextSceneId: "main_street_echo" }
],
style: { theme: "echo-theme", font: "font-lucida" }
},
// --- СЦЕНА: Стая механических птиц ---
"mechanical_birds": {
id: "mechanical_birds",
text: "Стая птиц кружит над тобой, свитки в их клювах трепещут на ветру. Символы на них переливаются и меняются. Одна птица отделяется от стаи и летит прямо к тебе, протягивая свиток. Что ты делаешь?",
choices: [
{ text: "Берешь свиток. Символы на нем складываются в твое имя, написанное задом наперед.", nextSceneId: "take_scroll_name" },
{ text: "Открываешь свиток. Из него вылетает маленький торнадо, наполненное картинами из твоего прошлого.", nextSceneId: "open_scroll_tornado" },
{ text: "Отказываюсь брать свиток и смотрю, что будет дальше.", nextSceneId: "refuse_scroll_watch" }
],
style: { theme: "echo-theme", font: "font-lucida" }
},
"take_scroll_name": {
id: "take_scroll_name",
text: "Ты берешь свиток. Символы на нем складываются в твое имя, написанное задом наперед. Имя вспыхивает на небе, как новая звезда. Вдруг город над тобой начинает падать, но вместо того, чтобы разрушаться, он раскрывается, как книга. Страницы летят вниз, и на каждой из них - фраза из письма, которое ты никогда не отправил. Что ты делаешь?",
choices: [
{ text: "Ловлю одну из страниц. На ней написано: 'Ты был моим сном, а я - твоим кошмаром.'", nextSceneId: "dream_nightmare" },
{ text: "Позволяю страницам пролететь мимо. Они превращаются в бабочек и улетают вдаль.", nextSceneId: "pages_butterflies" }
],
style: { theme: "echo-theme", font: "font-lucida" }
},
"open_scroll_tornado": {
id: "open_scroll_tornado",
text: "Ты открываешь свиток. Из него вылетает маленький торнадо, наполненное картинами из твоего прошлого. Ты видишь моменты, которые забыл, моменты, которые изменили тебя. Торнадо кружит вокруг тебя, и ты чувствуешь, как прошлое пытается вернуться.",
choices: [
{ text: "Позволяю торнадо поглотить меня.", nextSceneId: "let_tornado_consume" },
{ text: "Бегу прочь от торнадо.", nextSceneId: "run_from_tornado" }
],
style: { theme: "echo-theme", font: "font-lucida" }
},
"refuse_scroll_watch": {
id: "refuse_scroll_watch",
text: "Ты отказываешься брать свиток. Птица клюет тебя в руку, и ты чувствуешь резкую боль. Кровь на твоей руке превращается в чернила, и из них вырастает дерево. Его листья - это страницы ненаписанных историй.",
choices: [
{ text: "Сажусь под деревом и начинаю читать листья.", nextSceneId: "sit_read_leaves_tree" },
{ text: "Рву одно из листьев и кладу его в карман.", nextSceneId: "tear_leaf_pocket", item: "Лист: Возможность" }
],
style: { theme: "echo-theme", font: "font-lucida" }
},
"pages_butterflies": {
id: "pages_butterflies",
text: "Ты позволяешь страницам пролететь мимо. Они превращаются в бабочек и улетают вдаль. Одна из бабочек садится тебе на плечо. Она шепчет тебе на ухо имя того, кого ты потерял.",
choices: [
{ text: "Произношу имя вслух.", nextSceneId: "speak_name_lost" },
{ text: "Следую за одной из бабочек. Она ведет тебя к краю океана, где волны замерли.", nextSceneId: "follow_butterfly_edge" }
],
style: { theme: "echo-theme", font: "font-lucida" }
},
// --- СЦЕНА: Чтение цветового сдвига ---
"read_color_shift": {
id: "read_color_shift",
text: "Как только ты произносишь слова, мир меняется. Океан становится багрово-красным, небо - глубоким фиолетовым, а песок - золотым. Перо в твоей руке начинает светиться ярче. Ты чувствуешь, как твоя кожа становится прозрачной, и ты видишь свои мысли, текущие внутри, как река. Что ты делаешь?",
choices: [
{ text: "Сливаюсь с потоком мыслей. Ты перестаешь быть собой и становишься частью всего.", nextSceneId: "merge_thought_flow" },
{ text: "Пытаюсь сохранить свою форму, несмотря на изменения.", nextSceneId: "maintain_form" }
],
style: { theme: "ocean-theme", font: "font-georgia" }
},
"merge_thought_flow": {
id: "merge_thought_flow",
text: "[Финал: Слияние] Ты сливаешься с океаном. Твоё сознание расширяется до размеров вселенной. Ты становишься частью потока, частью вечности. Ты больше не 'ты'. Ты - это всё и ничто. Мотив завершен. Или только начинается?",
choices: [
{ text: "Начать сначала", nextSceneId: "start_new_journey" },
{ text: "Исследовать другие миры", nextSceneId: "transition_to_desert" },
{ text: "Уйти в бесконечность", nextSceneId: "final_abyss_1" }
],
isEnd: true,
onEnter: function(state) { addMotif(state, "Финал: Слияние"); collectTreasure(state, "Слово-Сокровище: Единство"); incrementFinalCounter(state, "История"); determineArchetypeAndShow(state); },
style: { theme: "ocean-theme", font: "font-georgia" }
},
"maintain_form": {
id: "maintain_form",
text: "Ты сопротивляешься изменениям. Твоя форма дрожит, но держится. Перо в твоей руке начинает гореть. Ты чувствуешь, как сила этого места пытается поглотить тебя, но ты держишься. Внезапно ты выбрасываешься на поверхность океана.",
choices: [
{ text: "Осмотреть новое окружение.", nextSceneId: "surface_new_world_ocean" },
{ text: "Проверить перо.", nextSceneId: "check_pen_surface_ocean" }
],
style: { theme: "ocean-theme", font: "font-georgia" }
},
// --- СЦЕНА: Начать сначала с подсчетом финалов ---
"start_new_journey": {
id: "start_new_journey",
text: "Ты чувствуешь, как реальность складывается по-новому. Всё начинается сначала, но теперь ты несешь с собой фрагменты пройденного пути. Ты снова стоишь у края зыбучего океана.",
choices: [
{ text: "Погружаюсь в океан, держа перо.", nextSceneId: "dive_ocean" },
{ text: "Пишу на песке первую букву своего имени.", nextSceneId: "write_sand" },
{ text: "Лечу вверх, к перевернутому городу.", nextSceneId: "fly_city" },
{ text: "Сажусь и начинаю рисовать пейзаж вокруг.", nextSceneId: "draw_landscape" },
{ text: "Закрываю глаза и слушаю шепот волн.", nextSceneId: "listen_waves" }
],
onEnter: function(state) {
// Сбрасываем прогресс, но сохраняем инвентарь
const savedInventory = [...state.inventory];
state.motifs = [];
state.flags = {};
state.finalCounters = {
"ultimate": state.finalCounters.ultimate, // Сохраняем счетчик историй
"archetype": 0 // Сбрасываем счетчик архетипа
};
state.inventory = savedInventory;
determinedArchetype = null; // Сбрасываем определенный архетип
updateInventoryDisplay();
updateMotifsDisplay();
updateArchetypeDisplay();
// Применяем тему по умолчанию
document.body.className = '';
document.getElementById('game-container').className = '';
}
},
// --- СЦЕНА: Переход в другой мир ---
"transition_to_desert": {
id: "transition_to_desert",
text: "Зов океана становится сильнее. Ты чувствуешь запах соли и чернил. Волны, казалось бы, далеко, но ты ощущаешь их присутствие. Перед тобой открывается путь к берегу.",
choices: [
{ text: "Иду к берегу океана.", nextSceneId: "start" },
{ text: "Остаюсь здесь и исследую дальше.", nextSceneId: "start" }
],
onEnter: function(state) {
applyThemeAndFont("ocean-theme", "font-courier");
}
},
"transition_to_city": {
id: "transition_to_city",
text: "Ты чувствуешь, как город над тобой зовет тебя. Его окна-глаза светятся мягким светом. Ты понимаешь, что это путь к новому пониманию.",
choices: [
{ text: "Лечу вверх, к перевернутому городу.", nextSceneId: "fly_city" },
{ text: "Сажусь и начинаю рисовать пейзаж вокруг.", nextSceneId: "draw_landscape" }
],
onEnter: function(state) {
applyThemeAndFont("ocean-theme", "font-courier");
}
},
// --- УЛЬТИМАТИВНЫЕ ФИНАЛЫ (5 ИСТОРИЙ) ---
"final_abyss_1": { // Связано с "Слиянием"
id: "final_abyss_1",
text: "[Окончательный Финал: Проводник] Ты уходишь в бесконечность. Твое сознание распадается и становится частью космоса. Ты - это звезды, тьма, ветер. Ты - всё и ничего.",
choices: [
{ text: "Начать сначала", nextSceneId: "start_new_journey" },
{ text: "Исследовать другие миры", nextSceneId: "transition_to_forest" },
{ text: "Уйти в бесконечность", nextSceneId: "final_abyss_1" }
],
isEnd: true,
onEnter: function(state) { addMotif(state, "Окончательный Финал: Проводник"); determineArchetypeAndShow(state); }
},
"final_abyss_2": { // Связано с "Прыжком"
id: "final_abyss_2",
text: "[Окончательный Финал: Прыжок] Ты прыгаешь в новую реальность. Мир взрывается цветами и звуками. Ты летишь сквозь реальности, сквозь миры. Это не конец, это начало нового путешествия. Мотив продолжается в бесконечности.",
choices: [
{ text: "Начать сначала", nextSceneId: "start_new_journey" },
{ text: "Исследовать другие миры", nextSceneId: "transition_to_forest" },
{ text: "Прыгнуть в новую реальность", nextSceneId: "final_abyss_2" }
],
isEnd: true,
onEnter: function(state) { addMotif(state, "Окончательный Финал: Прыжок"); collectTreasure(state, "Слово-Сокровище: Свобода"); incrementFinalCounter(state, "История"); determineArchetypeAndShow(state); }
},
"final_abyss_3": { // Связано с "Молчанием"
id: "final_abyss_3",
text: "[Окончательный Финал: Молчание] Ты погружаешься в тишину. Слова теряют смысл, мысли - форму. Ты становишься частью абсолютного покоя. Ты - это тишина между сердцебиениями вселенной.",
choices: [
{ text: "Начать сначала", nextSceneId: "start_new_journey" },
{ text: "Исследовать другие миры", nextSceneId: "transition_to_echo" },
{ text: "Погрузиться в тишину", nextSceneId: "final_abyss_3" }
],
isEnd: true,
onEnter: function(state) { addMotif(state, "Окончательный Финал: Молчание"); collectTreasure(state, "Слово-Сокровище: Тишина"); incrementFinalCounter(state, "История"); determineArchetypeAndShow(state); }
},
"final_abyss_4": { // Связано с "Поиском"
id: "final_abyss_4",
text: "[Окончательный Финал: Создание] Ты создаешь новую реальность. Ты - это начало и конец всех историй. Ты понимаешь, что был автором с самого начала. Ты - это история, которая рассказывает саму себя.",
choices: [
{ text: "Начать сначала", nextSceneId: "start_new_journey" },
{ text: "Исследовать другие миры", nextSceneId: "transition_to_city" },
{ text: "Создать новую реальность", nextSceneId: "final_abyss_4" }
],
isEnd: true,
onEnter: function(state) { addMotif(state, "Окончательный Финал: Создание"); collectTreasure(state, "Слово-Сокровище: Создание"); incrementFinalCounter(state, "История"); determineArchetypeAndShow(state); }
},
"final_abyss_5": { // Связано с "Эхом"
id: "final_abyss_5",
text: "[Окончательный Финал: Память] Ты растворяешься в потоке воспоминаний. Ты становишься частью коллективной памяти всех существ. Ты - это эхо каждого крика, каждая забытая песня, каждая незабвенная история.",
choices: [
{ text: "Начать сначала", nextSceneId: "start_new_journey" },
{ text: "Исследовать другие миры", nextSceneId: "transition_to_room" },
{ text: "Стать частью памяти", nextSceneId: "final_abyss_5" }
],
isEnd: true,
onEnter: function(state) { addMotif(state, "Окончательный Финал: Память"); collectTreasure(state, "Слово-Сокровище: Память"); incrementFinalCounter(state, "История"); determineArchetypeAndShow(state); }
},
"final_abyss_6": { // Связано с "Бытием"
id: "final_abyss_6",
text: "[Окончательный Финал: Бытие] Ты выбираешь быть собой. Ты принимаешь всю боль, всю радость, всю сложность своего существования. Ты - это ты, без масок, без искажений. Ты - это просто быть.",
choices: [
{ text: "Начать сначала", nextSceneId: "start_new_journey" },
{ text: "Исследовать другие миры", nextSceneId: "transition_to_field" },
{ text: "Быть собой", nextSceneId: "final_abyss_6" }
],
isEnd: true,
onEnter: function(state) { addMotif(state, "Окончательный Финал: Бытие"); collectTreasure(state, "Слово-Сокровище: Бытие"); incrementFinalCounter(state, "История"); determineArchetypeAndShow(state); }
},
"final_abyss_7": { // Связано с "Множественностью"
id: "final_abyss_7",
text: "[Окончательный Финал: Множественность] Ты становишься всеми своими 'я'. Ты - ребёнок, юноша, взрослый, старец. Ты - все любви, все потери. Ты больше, чем человек. Ты - это сумма всех возможностей.",
choices: [
{ text: "Начать сначала", nextSceneId: "start_new_journey" },
{ text: "Исследовать другие миры", nextSceneId: "transition_to_forest" },
{ text: "Объединить все 'я'", nextSceneId: "final_abyss_7" }
],
isEnd: true,
onEnter: function(state) { addMotif(state, "Окончательный Финал: Множественность"); collectTreasure(state, "Слово-Сокровище: Множественность"); incrementFinalCounter(state, "История"); determineArchetypeAndShow(state); }
},
"final_abyss_8": { // Связано с "Единством"
id: "final_abyss_8",
text: "[Окончательный Финал: Ясность] Ты кричишь. Голос разрывает пространство. Все 'ты' замолкают. Ты снова один, но теперь ты знаешь, кто ты есть. Ты - это ясность в хаосе, суть в многообразии.",
choices: [
{ text: "Начать сначала", nextSceneId: "start_new_journey" },
{ text: "Исследовать другие миры", nextSceneId: "transition_to_desert" },
{ text: "Найти своё 'я'", nextSceneId: "final_abyss_8" }
],
isEnd: true,
onEnter: function(state) { addMotif(state, "Окончательный Финал: Ясность"); collectTreasure(state, "Слово-Сокровище: Ясность"); incrementFinalCounter(state, "История"); determineArchetypeAndShow(state); }
},
// --- Недостающие сцены для исправления ошибок ---
"transition_to_forest": {
id: "transition_to_forest",
text: "Ты чувствуешь зов Леса. Воздух наполняется запахом мха и древесной коры. Свет фильтруется сквозь листву, создавая причудливые узоры. Перед тобой открывается тропа, ведущая вглубь.",
choices: [
{ text: "Иду по тропе вглубь леса.", nextSceneId: "forest_enter" },
{ text: "Остаюсь на опушке и прислушиваюсь к звукам.", nextSceneId: "forest_listen_edge" }
],
onEnter: function(state) {
applyThemeAndFont("forest-theme", "font-lucida");
}
},
"transition_to_echo": {
id: "transition_to_echo",
text: "Эхо твоего крика возвращается, но звучит странно, как будто из другого мира. Воздух начинает вибрировать, и ты чувствуешь, как твоя собственная история начинает отзываться на этот зов.",
choices: [
{ text: "Следую за эхом.", nextSceneId: "echo_follow" },
{ text: "Сажусь и начинаю петь мелодию.", nextSceneId: "echo_sing" }
],
onEnter: function(state) {
applyThemeAndFont("echo-theme", "font-lucida");
}
},
"transition_to_room": {
id: "transition_to_room",
text: "Ты чувствуешь тягу к Закрытому Пространству. Воздух становится плотнее, свет тусклее. Ты находишь дверь, за которой, как тебе кажется, спрятаны твои самые сокровенные воспоминания.",
choices: [
{ text: "Открываю дверь и вхожу.", nextSceneId: "room_enter" },
{ text: "Ищу другой вход.", nextSceneId: "room_seek_alternate" }
],
onEnter: function(state) {
applyThemeAndFont("room-theme", "font-georgia");
}
},
"transition_to_field": {
id: "transition_to_field",
text: "Зов Поля становится неотразим. Ты чувствуешь, как твое тело становится легче, а мысли - яснее. Перед тобой расстилается бескрайнее поле, колышущееся на ветру.",
choices: [
{ text: "Бегу по полю.", nextSceneId: "field_run" },
{ text: "Ложусь на землю и смотрю на небо.", nextSceneId: "field_lie" }
],
onEnter: function(state) {
applyThemeAndFont("field-theme", "font-comic");
}
},
"surface_new_world_ocean": {
id: "surface_new_world_ocean",
text: "Ты выбрасываешься на берег нового, неизведанного континента. Небо здесь фиолетовое, а деревья растут вниз корнями. Вдалеке виднеется башня, похожая на свернувшуюся улитку.",
choices: [
{ text: "Идти к башне-улитке.", nextSceneId: "go_to_snail_tower" },
{ text: "Исследовать ближайшее дерево.", nextSceneId: "explore_tree" }
]
},
"check_pen_surface_ocean": {
id: "check_pen_surface_ocean",
text: "Перо светится, но свет стал теплее. Оно как будто откликнулось на твой страх и усилие. Ты чувствуешь, что оно стало частью тебя, а не просто инструментом.",
choices: [
{ text: "Продолжить исследование берега.", nextSceneId: "explore_shore" }
],
onEnter: function(state) { addToInventory(state, "Связанное Перо"); }
},
"enter_building_echo": {
id: "enter_building_echo",
text: "Ты входишь в здание. Внутри царит полумрак, и воздух наполнен эхом твоих шагов. Стены покрыты зеркалами, и в каждом ты видишь свое отражение в разный момент времени.",
choices: [
{ text: "Подхожу к ближайшему зеркалу.", nextSceneId: "echo_approach_mirror" },
{ text: "Иду вглубь здания.", nextSceneId: "echo_deeper_building" }
]
},
"main_street_echo": {
id: "main_street_echo",
text: "Ты идешь по главной улице. Дома по обе стороны кажутся знакомыми, но искаженными. На стенах висят портреты, и ты замечаешь, что среди них есть и твой.",
choices: [
{ text: "Останавливаюсь у своего портрета.", nextSceneId: "echo_stop_at_portrait" },
{ text: "Продолжаю идти.", nextSceneId: "echo_continue_street" }
]
},
"dream_nightmare": {
id: "dream_nightmare",
text: "Ты ловишь страницу. На ней написано: 'Ты был моим сном, а я - твоим кошмаром.' Слова начинают гореть, и ты чувствуешь, как реальность вокруг начинает меняться.",
choices: [
{ text: "Сжигаю страницу.", nextSceneId: "burn_page" },
{ text: "Читаю дальше.", nextSceneId: "read_page_further" }
]
},
"let_tornado_consume": {
id: "let_tornado_consume",
text: "Ты позволяешь торнадо поглотить тебя. Картинки из прошлого проносятся перед глазами. Ты видишь все свои ошибки, все радости, все потери. Ты чувствуешь, как ты становишься частью этого потока.",
choices: [],
isEnd: true,
onEnter: function(state) { addMotif(state, "Финал: Поглощение"); collectTreasure(state, "Слово-Сокровище: Память"); incrementFinalCounter(state, "История"); determineArchetypeAndShow(state); }
},
"run_from_tornado": {
id: "run_from_tornado",
text: "Ты бежишь прочь от торнадо. Ветер свистит у тебя в ушах, и ты чувствуешь, как прошлое пытается удержать тебя. Ты спотыкаешься и падаешь, но поднимаешься и продолжаешь бежать.",
choices: [
{ text: "Спрятаться за деревом.", nextSceneId: "hide_behind_tree" },
{ text: "Бежать к океану.", nextSceneId: "run_to_ocean" }
]
},
"sit_read_leaves_tree": {
id: "sit_read_leaves_tree",
text: "Ты сажусь под деревом и начинаешь читать листья. Каждый лист - это история, которую ты мог бы написать, но не написал. Ты чувствуешь, как потенциал этих историй наполняет тебя.",
choices: [
{ text: "Выбираю один лист и начинаю читать.", nextSceneId: "choose_leaf_read" },
{ text: "Закрываю глаза и представляю, как пишу одну из историй.", nextSceneId: "imagine_writing_story" }
]
},
"tear_leaf_pocket": {
id: "tear_leaf_pocket",
text: "Ты рвешь один из листьев и кладешь его в карман. Лист теплое на ощупь, как живое существо. Ты чувствуешь, как оно начинает вибрировать, передавая тебе ощущение возможности.",
choices: [
{ text: "Продолжаю исследовать Пустыню Историй.", nextSceneId: "desert_approach_ruins" },
{ text: "Открываю лист и читаю, что на нем написано.", nextSceneId: "read_torn_leaf" }
],
onEnter: function(state) { addToInventory(state, "Лист: Возможность"); }
},
"speak_name_lost": {
id: "speak_name_lost",
text: "Ты произносишь имя вслух. Воздух вокруг начинает вибрировать, и ты чувствуешь, как кто-то или что-то откликается на твой зов.",
choices: [
{ text: "Жду ответа.", nextSceneId: "wait_for_response" },
{ text: "Бегу прочь от голоса.", nextSceneId: "run_from_voice" }
]
},
"follow_butterfly_edge": {
id: "follow_butterfly_edge",
text: "Ты следуешь за бабочкой к краю океана. Волны замерли, как стекло. Бабочка садится на твою руку и начинает светиться. Ты чувствуешь, как твоя кожа становится прозрачной.",
choices: [
{ text: "Смотрю на свое прозрачное тело.", nextSceneId: "look_transparent_body" },
{ text: "Отпускаю бабочку и ухожу.", nextSceneId: "release_butterfly_leave" }
]
}
}
};
// --- СИСТЕМА СОСТОЯНИЯ ИГРЫ ---
let currentState = {
currentSceneId: "start",
inventory: [],
motifs: [],
flags: {},
finalCounters: {
"ultimate": 0, // Счетчик для историй Пустыни Историй
"archetype": 0 // Счетчик для определения архетипа
}
};
// --- СИСТЕМА ИНВЕНТАРЯ ---
function addToInventory(state, item) {
if (!state.inventory.includes(item)) {
state.inventory.push(item);
updateInventoryDisplay();
showNotification(`Получен предмет: ${item}`);
}
}
function updateInventoryDisplay() {
const inventoryList = document.getElementById('inventory-list');
inventoryList.innerHTML = '';
currentState.inventory.forEach(item => {
const li = document.createElement('li');
li.textContent = item;
inventoryList.appendChild(li);
});
}
// --- СИСТЕМА МОТИВОВ ---
function addMotif(state, motif) {
if (!state.motifs.includes(motif)) {
state.motifs.push(motif);
updateMotifsDisplay();
}
// Увеличиваем счетчик для определения архетипа
state.finalCounters.archetype++;
console.log(`Мотив добавлен: ${motif}. Счетчик архетипа: ${state.finalCounters.archetype}`);
}
function updateMotifsDisplay() {
const motifsList = document.getElementById('motifs-list');
motifsList.innerHTML = '';
currentState.motifs.forEach(motif => {
const li = document.createElement('li');
li.textContent = motif;
motifsList.appendChild(li);
});
}
// --- СИСТЕМА СЛОВ-СОКРОВИЩ (для Пустыни Историй) ---
function collectTreasure(state, treasure) {
addToInventory(state, treasure);
state.finalCounters.ultimate++;
console.log(`Собрано Слово-Сокровище: ${treasure}. Счетчик историй: ${state.finalCounters.ultimate}`);
}
// --- СИСТЕМА СЧЕТЧИКОВ ФИНАЛОВ ---
function incrementFinalCounter(state, counterName) {
// В данном случае счетчик уже увеличивается в collectTreasure для "История"
// Эта функция может быть расширена для других счетчиков
console.log(`Счетчик '${counterName}' увеличен.`);
}
// --- СИСТЕМА ФЛАГОВ ---
function setFlag(state, flagName, value = true) {
state.flags[flagName] = value;
}
function checkFlag(state, flagName) {
return state.flags[flagName] === true;
}
// --- СИСТЕМА УСЛОВИЙ ---
function checkCondition(condition, state) {
if (!condition) return true; // Если условия нет, выбор доступен
// Пример условия: "flag:can_finish_game"
if (condition.startsWith("flag:")) {
const flagName = condition.split(":")[1];
return checkFlag(state, flagName);
}
// Можно добавить другие типы условий
return false;
}
// --- СИСТЕМА УВЕДОМЛЕНИЙ ---
function showNotification(message) {
const notification = document.getElementById('notification');
notification.textContent = message;
notification.style.opacity = '1';
setTimeout(() => {
notification.style.opacity = '0';
}, 3000);
}
// --- СИСТЕМА СОХРАНЕНИЯ/ЗАГРУЗКИ ---
function saveGame() {
localStorage.setItem('surrealismGameData', JSON.stringify(currentState));
showNotification('Игра сохранена!');
}
function loadGame() {
const savedState = localStorage.getItem('surrealismGameData');
if (savedState) {
currentState = JSON.parse(savedState);
// Восстанавливаем отображение
updateInventoryDisplay();
updateMotifsDisplay();
updateArchetypeDisplay();
loadScene(currentState.currentSceneId);
showNotification('Игра загружена!');
} else {
showNotification('Нет сохраненных данных.');
}
}
function resetGame() {
if (confirm("Вы уверены, что хотите начать сначала?")) {
// Сохраняем пройденные выборы (мотивы) в инвентарь
currentState.motifs.forEach(motif => {
addToInventory(currentState, `Пройденный путь: ${motif}`);
});
// Сброс состояния
currentState = {
currentSceneId: "start",
inventory: [...currentState.inventory], // Сохраняем инвентарь
motifs: [],
flags: {},
finalCounters: {
"ultimate": 0,
"archetype": 0
}
};
updateInventoryDisplay();
updateMotifsDisplay();
updateArchetypeDisplay();
loadScene("start");
showNotification('Игра начата заново. Пройденные пути добавлены в инвентарь.');
}
}
// --- СИСТЕМА АРХЕТИПОВ ТАРО ---
const archetypeTemplates = {
"Маг": ["Слово-Сокровище: Воля", "Слово-Сокровище: Манифестация", "Слово-Сокровище: Начало"],
"Верховная Жрица": ["Слово-Сокровище: Интуиция", "Слово-Сокровище: Тайна", "Слово-Сокровище: Луна"],
"Императрица": ["Слово-Сокровище: Плодородие", "Слово-Сокровище: Изобилие", "Слово-Сокровище: Природа"],
"Император": ["Слово-Сокровище: Структура", "Слово-Сокровище: Власть", "Слово-Сокровище: Стабильность"],
"Иерофант": ["Слово-Сокровище: Традиция", "Слово-Сокровище: Мудрость", "Слово-Сокровище: Учение"],
"Влюбленные": ["Слово-Сокровище: Любовь", "Слово-Сокровище: Гармония", "Слово-Сокровище: Выбор"],
"Колесница": ["Слово-Сокровище: Победа", "Слово-Сокровище: Воля", "Слово-Сокровище: Контроль"],
"Сила": ["Слово-Сокровище: Мужество", "Слово-Сокровище: Сдержанность", "Слово-Сокровище: Внутренняя Сила"],
"Отшельник": ["Слово-Сокровище: Поиск", "Слово-Сокровище: Мудрость", "Слово-Сокровище: Уединение"],
"Колесо Фортуны": ["Слово-Сокровище: Судьба", "Слово-Сокровище: Цикл", "Слово-Сокровище: Перемена"],
"Справедливость": ["Слово-Сокровище: Баланс", "Слово-Сокровище: Истина", "Слово-Сокровище: Закон"],
"Повешенный": ["Слово-Сокровище: Жертва", "Слово-Сокровище: Переоценка", "Слово-Сокровище: Ожидание"],
"Смерть": ["Слово-Сокровище: Преображение", "Слово-Сокровище: Конец", "Слово-Сокровище: Новое Начало"],
"Умеренность": ["Слово-Сокровище: Баланс", "Слово-Сокровище: Синтез", "Слово-Сокровище: Поток"],
"Дьявол": ["Слово-Сокровище: Искушение", "Слово-Сокровище: Оковы", "Слово-Сокровище: Тень"],
"Башня": ["Слово-Сокровище: Разрушение", "Слово-Сокровище: Освобождение", "Слово-Сокровище: Катастрофа"],
"Звезда": ["Слово-Сокровище: Надежда", "Слово-Сокровище: Вдохновение", "Слово-Сокровище: Исцеление"],
"Луна": ["Слово-Сокровище: Иллюзия", "Слово-Сокровище: Подсознание", "Слово-Сокровище: Страх"],
"Солнце": ["Слово-Сокровище: Радость", "Слово-Сокровище: Энергия", "Слово-Сокровище: Успех"],
"Суд": ["Слово-Сокровище: Возрождение", "Слово-Сокровище: Призыв", "Слово-Сокровище: Очищение"],
"Мир": ["Слово-Сокровище: Завершение", "Слово-Сокровище: Целостность", "Слово-Сокровище: Путешествие"],
"Шут": ["Слово-Сокровище: Потенциал", "Слово-Сокровище: Невинность", "Слово-Сокровище: Начало Пути"]
};
let determinedArchetype = null;
function determineArchetypeAndShow(state) {
// Определяем архетип только один раз, при первом финале
if (determinedArchetype) return;
const motifCount = state.finalCounters.archetype;
console.log(`Определение архетипа. Количество мотивов: ${motifCount}`);
// Упрощенная логика определения на основе количества собранных мотивов
// В реальной игре это могло бы быть сложнее, на основе самих мотивов
if (motifCount <= 3) determinedArchetype = "Шут";
else if (motifCount <= 6) determinedArchetype = "Маг";
else if (motifCount <= 9) determinedArchetype = "Верховная Жрица";
else if (motifCount <= 12) determinedArchetype = "Императрица";
else if (motifCount <= 15) determinedArchetype = "Император";
else if (motifCount <= 18) determinedArchetype = "Иерофант";
else if (motifCount <= 21) determinedArchetype = "Влюбленные";
else if (motifCount <= 24) determinedArchetype = "Колесница";
else if (motifCount <= 27) determinedArchetype = "Сила";
else if (motifCount <= 30) determinedArchetype = "Отшельник";
else if (motifCount <= 33) determinedArchetype = "Колесо Фортуны";
else if (motifCount <= 36) determinedArchetype = "Справедливость";
else if (motifCount <= 39) determinedArchetype = "Повешенный";
else if (motifCount <= 42) determinedArchetype = "Смерть";
else if (motifCount <= 45) determinedArchetype = "Умеренность";
else if (motifCount <= 48) determinedArchetype = "Дьявол";
else if (motifCount <= 51) determinedArchetype = "Башня";
else if (motifCount <= 54) determinedArchetype = "Звезда";
else if (motifCount <= 57) determinedArchetype = "Луна";
else if (motifCount <= 60) determinedArchetype = "Солнце";
else determinedArchetype = "Мир"; // или "Суд" как кульминацию
console.log(`Определен архетип: ${determinedArchetype}`);
// Добавляем Слова-Сокровища в инвентарь
const words = archetypeTemplates[determinedArchetype] || [];
words.forEach(word => addToInventory(state, word));
updateArchetypeDisplay();
showNotification(`Твой Архетип: ${determinedArchetype}`);
}
function updateArchetypeDisplay() {
const archetypeText = document.getElementById('archetype-text');
if (determinedArchetype) {
archetypeText.textContent = determinedArchetype;
} else {
archetypeText.textContent = "Не определен";
}
}
// --- ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ ---
function applyThemeAndFont(themeClass, fontClass) {
const body = document.body;
const container = document.getElementById('game-container');
body.className = themeClass || '';
container.className = fontClass || '';
}
// --- ОСНОВНАЯ ЛОГИКА ИГРЫ ---
function loadScene(sceneId) {
const scene = gameData.scenes[sceneId];
if (!scene) {
console.error(`Ошибка: Сцена с ID '${sceneId}' не найдена.`);
document.getElementById('scene-text').innerHTML = `<p class="end-scene">Ошибка: Сцена не найдена. Это ошибка в коде игры.</p>`;
document.getElementById('choices').innerHTML = '<button class="choice-button" onclick="loadScene(\'start\')">Начать с начала</button>';
return;
}
currentState.currentSceneId = sceneId;
// Применяем тему и шрифт, если они заданы
const gameContainer = document.getElementById('game-container');
const body = document.body;
// Сбрасываем темы
body.className = '';
gameContainer.className = '';
// Применяем новую тему и шрифт
if (scene.style) {
if (scene.style.theme) body.classList.add(scene.style.theme);
if (scene.style.font) gameContainer.classList.add(scene.style.font);
}
// Выполняем onEnter, если он есть
if (scene.onEnter && typeof scene.onEnter === 'function') {
scene.onEnter(currentState);
}
// Обновляем текст сцены
const sceneTextElement = document.getElementById('scene-text');
sceneTextElement.innerHTML = scene.isEnd ? `<p class="end-scene">${scene.text}</p>` : `<p>${scene.text}</p>`;
sceneTextElement.style.opacity = 0;
// Анимация появления текста
setTimeout(() => {
sceneTextElement.style.opacity = 1;
}, 10);
// Обновляем выборы
const choicesElement = document.getElementById('choices');
choicesElement.innerHTML = '';
if (scene.isEnd) {
// Для конечных сцен не показываем выборы, только кнопку перезапуска
// Но в некоторых финалах мы можем предлагать вернуться в начало
if (scene.choices && scene.choices.length > 0) {
// Это специальные финалы с выборами
renderChoices(scene.choices);
} else {
// Другие финалы - просто конец
const restartButton = document.createElement('button');
restartButton.className = 'choice-button';
restartButton.textContent = 'Начать сначала';
restartButton.onclick = () => resetGame(); // Используем resetGame
choicesElement.appendChild(restartButton);
}
} else {
renderChoices(scene.choices);
}
updateProgressBar();
}
function renderChoices(choices) {
const choicesElement = document.getElementById('choices');
let delay = 200; // Задержка для анимации
choices.forEach((choice, index) => {
// Проверяем условия
if (checkCondition(choice.condition, currentState)) {
const button = document.createElement('button');
button.className = 'choice-button';
button.textContent = choice.text;
button.style.animationDelay = `${delay}ms`;
button.onclick = () => {
// Добавляем предмет, если он есть
if (choice.item) {
addToInventory(currentState, choice.item);
}
loadScene(choice.nextSceneId);
};
choicesElement.appendChild(button);
delay += 100;
}
});
}
function updateProgressBar() {
// Простая логика: увеличиваем прогресс с каждым переходом
// Можно сделать более сложную, основанную на глубине в графе
const progressPercent = Math.min(100, (currentState.motifs.length + currentState.inventory.length) * 2); // Пример
document.getElementById('progress-bar').style.width = `${progressPercent}%`;
}
function initGame() {
updateInventoryDisplay();
updateMotifsDisplay();
updateArchetypeDisplay();
loadScene("start");
}
// Запуск игры при загрузке страницы
window.onload = initGame;
</script>
</body>
</html>
Свидетельство о публикации №225090200165