From f70a4da530def83af6541eaf19ac446136ca6786 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C5=A1a=20Ceviel?= Date: Thu, 23 Apr 2026 12:51:04 +0300 Subject: [PATCH] scenary --- game/gui/button/choice_hover_background.png | 4 +- game/gui/button/choice_hover_background1.png | 3 + game/gui/button/choice_idle_background.png | 4 +- game/gui/button/choice_idle_background1.png | 3 + game/gui/frame.png | 4 +- game/gui/frame1.png | 3 + game/gui/textbox.png | 4 +- game/gui/textbox1.png | 3 + game/images/puzzle_0.png | 3 + game/images/puzzle_1.png | 3 + game/images/puzzle_2.png | 3 + game/images/puzzle_3.png | 3 + game/images/puzzle_unknown.png | 3 + game/script.rpy | 285 +++++++++++++++---- 14 files changed, 264 insertions(+), 64 deletions(-) create mode 100644 game/gui/button/choice_hover_background1.png create mode 100644 game/gui/button/choice_idle_background1.png create mode 100644 game/gui/frame1.png create mode 100644 game/gui/textbox1.png create mode 100644 game/images/puzzle_0.png create mode 100644 game/images/puzzle_1.png create mode 100644 game/images/puzzle_2.png create mode 100644 game/images/puzzle_3.png create mode 100644 game/images/puzzle_unknown.png diff --git a/game/gui/button/choice_hover_background.png b/game/gui/button/choice_hover_background.png index 49ca280..45fdce1 100644 --- a/game/gui/button/choice_hover_background.png +++ b/game/gui/button/choice_hover_background.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d2f5a4e7861d99677483ebfcc752c7dcda384f74c2723bc88e92983f49a812a1 -size 1116 +oid sha256:63258bbdec1bbbf9acded7d1e991e78d6ddf79ae970b19837613f54c669ca37c +size 10457 diff --git a/game/gui/button/choice_hover_background1.png b/game/gui/button/choice_hover_background1.png new file mode 100644 index 0000000..49ca280 --- /dev/null +++ b/game/gui/button/choice_hover_background1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2f5a4e7861d99677483ebfcc752c7dcda384f74c2723bc88e92983f49a812a1 +size 1116 diff --git a/game/gui/button/choice_idle_background.png b/game/gui/button/choice_idle_background.png index af45da2..17f2d22 100644 --- a/game/gui/button/choice_idle_background.png +++ b/game/gui/button/choice_idle_background.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0b425b43d0b129abc6bc4f87d81906eb73e8999ab216b69ebf72b1efac20f9bc -size 983 +oid sha256:5caaf6016564d758789c41451897381eed794fd7307adb132cc75aa018a6cf5c +size 10457 diff --git a/game/gui/button/choice_idle_background1.png b/game/gui/button/choice_idle_background1.png new file mode 100644 index 0000000..af45da2 --- /dev/null +++ b/game/gui/button/choice_idle_background1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0b425b43d0b129abc6bc4f87d81906eb73e8999ab216b69ebf72b1efac20f9bc +size 983 diff --git a/game/gui/frame.png b/game/gui/frame.png index fdddd2a..bd6261d 100644 --- a/game/gui/frame.png +++ b/game/gui/frame.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:946f8b1cf38e236295718db5216193aa36beb72ee2a92e4ba8ef7b2533fa12bc -size 2222 +oid sha256:5de17d08dcc2cb5e7e096618de932a7f49e1f86d83baf89dfd4b1a5e7b05f81a +size 110896 diff --git a/game/gui/frame1.png b/game/gui/frame1.png new file mode 100644 index 0000000..fdddd2a --- /dev/null +++ b/game/gui/frame1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:946f8b1cf38e236295718db5216193aa36beb72ee2a92e4ba8ef7b2533fa12bc +size 2222 diff --git a/game/gui/textbox.png b/game/gui/textbox.png index b4b2b5f..f2ab2d9 100644 --- a/game/gui/textbox.png +++ b/game/gui/textbox.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4fa7fc04f5d1d78dec8f3e0d92b59595b973689531142ba42ff174c0ea67108f -size 3625 +oid sha256:dc79edb6e1873e65d753ff79fa7102143d441a2add5df7c2ac5fd8b50d8f75fc +size 112078 diff --git a/game/gui/textbox1.png b/game/gui/textbox1.png new file mode 100644 index 0000000..b4b2b5f --- /dev/null +++ b/game/gui/textbox1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4fa7fc04f5d1d78dec8f3e0d92b59595b973689531142ba42ff174c0ea67108f +size 3625 diff --git a/game/images/puzzle_0.png b/game/images/puzzle_0.png new file mode 100644 index 0000000..08a850d --- /dev/null +++ b/game/images/puzzle_0.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a659f71202d247f1dc5cfa8f4466c6fb9c105da293ebe94d1205838c4f1feb9f +size 129086 diff --git a/game/images/puzzle_1.png b/game/images/puzzle_1.png new file mode 100644 index 0000000..a463c9e --- /dev/null +++ b/game/images/puzzle_1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:18fb7861ecaaa3c4772b469356ac420d1973bbd15b9248f7f45fa3e142bfe582 +size 127857 diff --git a/game/images/puzzle_2.png b/game/images/puzzle_2.png new file mode 100644 index 0000000..4fe7759 --- /dev/null +++ b/game/images/puzzle_2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22625b2493cda710d7ec4ec6993da591095f7a0e2ab8b5bf9331acec0c5f9394 +size 132946 diff --git a/game/images/puzzle_3.png b/game/images/puzzle_3.png new file mode 100644 index 0000000..3af4f78 --- /dev/null +++ b/game/images/puzzle_3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8526b39725d8c57b4c1f43664a786ed28fa3281db70693ae48ab4e71987b3e97 +size 136224 diff --git a/game/images/puzzle_unknown.png b/game/images/puzzle_unknown.png new file mode 100644 index 0000000..c82df28 --- /dev/null +++ b/game/images/puzzle_unknown.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8f90b976cfe8fa77cbda54f4b916245669376a3e2d279826bc25fb62448d590 +size 5368 diff --git a/game/script.rpy b/game/script.rpy index 90e5e34..063338e 100644 --- a/game/script.rpy +++ b/game/script.rpy @@ -2,6 +2,8 @@ return init python: + renpy.music.register_channel("ambient", "sfx") + _game_menu_screen = None _skipping = False @@ -11,8 +13,15 @@ init python: battery = 100 fragments = 0 - sync_points = 0 + thoughts_processed = False journal = [] + + puzzle_parts = [False, False, False, False] + puzzle_complete = False + + signal_sequence = [0, 1, 2] + player_input = [] + signal_active = True visited_locations = {"room": False, "corridor": False, "terminal": False} game_started = False @@ -36,13 +45,76 @@ screen journal(): frame: align (0.5, 0.5) xsize 700 ysize 500 + background "#333333" vbox: text "МЫСЛИ" size 50 for entry in journal: - text "- [entry]" size 40 - textbutton "ПОДУМАТЬ ОБ ЭТОМ" action [SetVariable("sync_points", sync_points + 1), Hide("journal")] + text "- [entry]" size 20 + + if fragments >= 3 and not thoughts_processed: + textbutton "ПОДУМАТЬ ОБ ЭТОМ": + action [Hide("journal"), Jump("deep_reflection")] + textbutton "ЗАКРЫТЬ" action Hide("journal") +screen corridor_puzzle_screen(): + modal True + frame: + align (0.5, 0.5) + xsize 640 ysize 750 + background "#333333" + + vbox: + align (0.5, 0.5) + spacing 20 + + grid 2 2: + xalign 0.5 + spacing 10 + for i in range(4): + button: + action [ + SetDict(puzzle_parts, i, True), + Function(renpy.restart_interaction) + ] + xsize 300 ysize 300 + background "#1a1a1a" + + if puzzle_parts[i]: + add "puzzle_[i].png" align (0.5, 0.5) + else: + add "puzzle_unknown.png" align (0.5, 0.5) + + textbutton "ЗАВЕРШИТЬ СБОРКУ": + action If(all(puzzle_parts), [Hide("corridor_puzzle_screen"), Return(True)], [Hide("corridor_puzzle_screen"), Return(False)]) + xalign 0.5 + xpadding 40 + ypadding 20 + background "#555555" + +screen terminal_rhythm_screen(): + modal True + frame: + align (0.5, 0.5) + xsize 600 ysize 300 + background "#333333" + + hbox: + align (0.5, 0.5) + spacing 20 + for i in range(3): + button: + action [ + Function(player_input.append, i), + Function(renpy.restart_interaction) + ] + xsize 150 ysize 150 + background ("#aaaaaa" if i in player_input else "#1a1a1a") + text "[i]" align (0.5, 0.5) + + if len(player_input) >= 3: + timer 0.3 action Return(player_input == signal_sequence) + label start: scene black @@ -69,50 +141,53 @@ label start: jump phase_1_intro label phase_1_intro: - # Инициализация счетчика рутины $ routine_tasks = 0 scene bg_room with dissolve - "Я просыпаюсь. Шум генератора — единственное, что доказывает, что я еще здесь." - "Семь лет назад я считал эту станцию своей крепостью. Теперь — это мой склеп, где я сам себе надсмотрщик." - "В воздухе пахнет озоном и застоявшейся пылью. Я чувствую каждый вдох, как попытку проглотить этот тяжелый, мертвый воздух." + "Я просыпаюсь. Шум генератора — единственное, что доказывает, что я еще здесь. Но сегодня этот звук другой. Он надтреснутый, хриплый, как дыхание умирающего." + "Индикатор на консоли мигает тусклым оранжевым. 100\%. Это последняя порция топлива. Последние искры жизни этой консервной банки." + "Семь лет назад я считал эту станцию своей крепостью. Теперь — это мой склеп, где я сам себе надсмотрщик, а генератор — мой метроном, отсчитывающий секунды до полной темноты." + "В воздухе пахнет озоном, гнилью и невыполненными обещаниями. Я чувствую каждый вдох, как попытку проглотить этот тяжелый, мертвый воздух, который скоро станет моим единственным спутником." - "Мои руки привычно тянутся к вещам, которые я переставляю изо дня в день. Это не привычка. Это попытка доказать самому себе, что я существую в этой физической реальности." - "Мне нужно закончить утренний ритуал. Только после этого я смогу сосредоточиться на всём остальном." + "Сегодня двадцатое апреля. И если верить датчикам, сегодня — последний день, когда станция сможет поддерживать жизнеобеспечение. К полуночи, если я не решусь на что-то, здесь станет холодно по-настоящему." + "Мои руки привычно тянутся к вещам, которые я переставляю изо дня в день. Это не привычка. Это попытка доказать самому себе, что я всё ещё существую в этой физической реальности, а не стал частью фонового шума оборудования." + "Мне нужно закончить утренний ритуал. Последний утренний ритуал. Только после этого я смогу сосредоточиться на том, чтобы принять решение, от которого я бежал три года." label routine_loop: if routine_tasks >= 3: jump start_game_proper - "Комната кажется пустой, но в ней всё ещё остались вещи, которые требуют моего внимания." + "Комната кажется пустой, но в ней всё ещё остались вещи, которые требуют моего внимания. Вещи, которые я должен 'оживить' в последний раз." menu: "Налить остывший кофе" if not coffee_done: $ coffee_done = True $ routine_tasks += 1 - "Чашка холодная, стенки покрыты коричневым налетом. Я смотрю на эту жидкость и вспоминаю, как раньше мы спорили о том, какой сорт кофе лучше." - "Теперь мне всё равно. Это просто топливо. Жидкая горечь, чтобы проснуться. Я делаю глоток, и холод металла чашки обжигает губы сильнее, чем сам напиток." + "Чашка холодная, стенки покрыты въевшимся коричневым налетом. Я смотрю на эту мутную жидкость и вспоминаю, как раньше мы спорили о том, какой сорт кофе лучше — с кислинкой или с горчинкой." + "Теперь мне всё равно. Это просто топливо. Жидкая горечь, чтобы хоть как-то почувствовать себя живым. Я делаю глоток, и холод металла чашки обжигает губы сильнее, чем сам напиток. Это вкус прощания." jump routine_loop "Подойти к окну и стереть иней" if not window_done: $ window_done = True $ routine_tasks += 1 - "Стекло промерзло насквозь. Я провожу рукавом, оставляя длинную, неровную полосу." - "За окном — только серая, бескрайняя пелена. Ни горизонта, ни неба. Иногда мне кажется, что я нахожусь не на станции связи, а в какой-то космической пустоте, куда забыли подать свет." - "Я вглядываюсь в это 'ничто', надеясь увидеть хоть что-то, кроме собственного отражения, но вижу лишь уставшие глаза человека, который слишком долго ждал." + "Стекло промерзло насквозь. Я провожу рукавом, оставляя длинную, неровную полосу. Иней осыпается, как пепел." + "За окном — только серая, бескрайняя пелена. Ни горизонта, ни неба. Иногда мне кажется, что я нахожусь не на станции связи, а внутри собственного разума, куда забыли подать свет." + "Я вглядываюсь в это 'ничто', надеясь увидеть хоть что-то, кроме собственного бледного отражения. Но вижу лишь глаза человека, который три года назад решил, что ожидание лучше, чем риск." jump routine_loop "Проверить статус генератора" if not power_done: $ power_done = True $ routine_tasks += 1 - "Я подхожу к главному щитку. Индикаторы мерцают, как нервные окончания. Семь лет эксплуатации — это не шутки." - "Генератор стонет под нагрузкой. Я касаюсь рычага, чувствуя его дрожь. Если я сейчас уйду — он просто сгорит. Если останусь — буду жечь энергию на поддержание пустоты." - "Каждый мой шаг здесь — это повторение того, от чего я пытаюсь сбежать, но я не могу позволить станции заглохнуть. Это моё единственное наследие." + "Я подхожу к главному щитку. Индикаторы мерцают, как нервные окончания, готовые вот-вот перегореть. Семь лет эксплуатации — это не шутки. Сегодня он сдастся." + "Генератор стонет под нагрузкой. Я касаюсь рычага, чувствуя его дрожь. Если я сейчас уйду — он просто сгорит. Если останусь — буду жечь последние крохи энергии на поддержание пустоты." + "Каждый мой шаг здесь — это повторение того, от чего я пытаюсь сбежать, но я не могу позволить станции заглохнуть раньше времени. Это моё единственное наследие, мой памятник трусости." jump routine_loop label start_game_proper: - "Ритуал завершен. Пустота внутри стала немного привычнее." - "Теперь, когда я 'дома', можно переходить к делам. Станция ждет. Что я буду делать дальше?" + "Ритуал завершен. Пустота внутри стала немного привычнее, но теперь она давит сильнее." + "Станция издает низкий, вибрирующий гул. Это звук умирающего сердца станции, и он резонирует где-то в моих ребрах." + "Каждый мой шаг отзывается эхом. Здесь слишком много тишины для места, которое когда-то было наполнено смехом и голосами." + "Что мне делать сегодня? Время утекает, как песок сквозь пальцы, и заряд батареи с каждой минутой становится всё ближе к нулю." $ game_started = True jump main_loop @@ -121,94 +196,192 @@ label main_loop: jump ending_silence show screen game_ui - "Станция ждет. Что я буду делать?" + + # play ambient "audio/ambient_low_hum.ogg" fadein 2.0 loop + + "Станция ждет. Сегодня всё закончится. Что я буду делать, пока ещё есть свет?" + menu: - "Осмотреть комнату": + "Осмотреть рабочий стол (Комната)" if not visited_locations["room"]: $ use_battery(5) + $ visited_locations["room"] = True jump qte_date_input - "Пойти в коридор": + + "Идти в коридор" if not visited_locations["corridor"]: $ use_battery(5) + $ visited_locations["corridor"] = True jump qte_corridor_puzzle - "Терминал": + + "Подойти к терминалу" if not visited_locations["terminal"]: $ use_battery(5) + $ visited_locations["terminal"] = True jump qte_terminal_rhythm - "Идти в серверную" if fragments >= 3: + + "Идти в серверную" if visited_locations["room"] and visited_locations["corridor"] and visited_locations["terminal"]: jump phase_3_culmination label qte_date_input: - "Нужно ввести дату. Мои руки дрожат." - $ date_input = renpy.input("Введите дату (ДД.ММ.ГГГГ):") + # scene bg_desk_close with fade + # play sound "audio/keyboard_clack.ogg" + + "Рабочий стол. Слой пыли здесь настолько толстый, что кажется, будто никто не садился сюда вечность." + "Курсор на экране терминала мигает в ритме моего пульса. Сегодня двадцатое апреля, двадцать третьего года." + "Ровно три года с того дня, когда всё пошло прахом. Три года тишины, которую я сам на себя наложил." + "Чтобы получить доступ к архиву за тот день, система требует подтвердить текущую дату. Словно издевается, заставляя меня признать, сколько времени я потратил на это самобичевание." + + $ date_input = renpy.input("Введите сегодняшнюю дату (ДД.ММ.ГГГГ):", length=10) + if date_input == "20.04.2023": - "Синхронизация успешна." + # play sound "audio/access_granted.ogg" + "Экран на мгновение вспыхивает ярким, почти болезненным белым цветом. Система приняла ввод." + "Я вхожу в архив. Передо мной всплывают логи трехлетней давности. Двадцатое апреля, двадцатый год." + "Я помню этот день по секундам. День, когда я должен был сказать одно слово, но вместо этого промолчал." + "Молчание стало моей клеткой. Я сам запер себя здесь, внутри этого 'сегодня', чтобы не сталкиваться с 'тем самым вчера'." + $ fragments += 1 - $ journal.append("Я помню этот день. В этот день всё сломалось.") + $ journal.append("20.04.2020. Дата моего заточения. Спустя три года я наконец-то открыл архив, который так боялся увидеть.") else: - "Ошибка доступа." + # play sound "audio/access_denied.ogg" + "На экране высветилось: 'ОШИБКА ДОСТУПА'." + "Даже простая проверка даты выбивает меня из колеи. Мои руки дрожат так сильно, что я путаю цифры." + "Я чувствую, как с каждой неудачной попыткой станция становится всё холоднее. Или это просто моё отчаяние?" + + "Я отхожу от стола. В голове пульсирует лишь одна мысль: я всё ещё здесь. Всё ещё в этом 2020-м." jump main_loop label qte_corridor_puzzle: - "Коридор. Здесь разбитое зеркало." - # Тут будет код пазла (наложение изображений) + scene bg_corridor with fade + # play sound "audio/wind_echo.ogg" + + "Коридор. Место, где время растянулось, как жевательная резинка." + "В конце — разбитое зеркало. Я смотрю в него, и мои глаза встречаются с глазами человека, который проиграл эту жизнь три года назад." + "Оно разбито на четыре неравных куска. Я вижу в этих осколках фрагменты того самого дня. Если я соберу их... если я заставлю себя посмотреть на них..." + + call screen corridor_puzzle_screen + $ result = _return + + if not result: + "Я смотрю на пустые места в зеркале. Я не могу... Руки не слушаются. В голове только шум и липкий страх." + "Я слишком слаб, чтобы видеть всё это целиком. Может быть, позже..." + jump main_loop + + "Последний осколок встал на место. Изображение сложилось." + "Я вижу себя. Я вижу её. Она стоит у двери, её ладонь касается ручки. Она ждёт одного слова. Любого слова." + + "А я? Я просто смотрю в пол. Я не могу поднять взгляд, потому что боюсь увидеть в её глазах подтверждение того, что я — ничтожество." + "Это зеркало — не отражение. Это приговор, который я сам себе вынес." + $ fragments += 1 - $ journal.append("Отражение пугает. Я вижу в нём чужака.") + $ journal.append("Коридор. Я увидел правду в зеркале: я не 'ждал', я намеренно молчал, чтобы она ушла.") + + "Больше здесь не на что смотреть. Я оставляю зеркало в покое, хотя оно всё ещё преследует меня своей правдой." jump main_loop label qte_terminal_rhythm: - "Сигнал уходит. Нужно поймать момент." - # Тут будет код ритм-игры - $ fragments += 1 - $ journal.append("Я пытаюсь связаться, но это крик в пустоту.") + scene bg_terminal with fade + # play sound "audio/terminal_hum.ogg" + + "Терминал. Моё единственное окно в мир, который меня забыл." + "Экран забит мусором — тысячи системных сообщений, ошибок и битых секторов. Где-то там, под слоем цифровой пыли, всё ещё лежат записи того дня." + "Сигнал нестабилен, поток данных рвется. Если я не выровняю частоту прямо сейчас, архив удалит себя автоматически как 'неактуальный'." + "Мне нужно поймать этот поток. Не для того, чтобы отправить сообщение... а для того, чтобы наконец увидеть, что она мне писала." + + $ player_input = [] + call screen terminal_rhythm_screen + + if _return: + # play sound "audio/success_beep.ogg" + "Синхронизация завершена. Помехи исчезли, оставив на экране четкие строки." + "Я прокручиваю лог вниз. Вот оно. Сообщение, которое я никогда не открывал." + "Моё сердце пропускает удар. Я не отправляю ничего. Я просто читаю её последние слова, и это ранит сильнее, чем любая ошибка связи." + + $ fragments += 1 + $ journal.append("Терминал: Я открыл её последнее сообщение. Теперь я знаю, что именно я потерял.") + else: + # play sound "audio/fail_buzz.ogg" + "Ошибка синхронизации. Архив свернулся, защищая себя от доступа." + "Я снова промахнулся. Руки дрожат, экран гаснет, и я остаюсь в тишине." + "Она осталась для меня неразгаданной. Снова. Всегда опаздываю — даже чтобы просто узнать правду." + + "Я выхожу из системы. Терминал остывает, но теперь в комнате стало ещё холоднее от осознания того, что я (не) узнал." + jump main_loop + +label deep_reflection: + "Я читаю свои записи. За каждой строчкой — трусость. За каждым 'потом' — страх." + "Я был таким слепым. Всё это время я думал, что храню память о ней, а на самом деле я просто бережно лелеял собственное бессилие." + "Хватит. Я всё понял." + + $ sync_points = 3 + $ thoughts_processed = True + + "Я закрываю записи. Теперь я знаю, что должен сделать." jump main_loop label phase_3_culmination: - "Я стою перед дверью в серверную. Пути назад нет." + scene bg_door_to_server with dissolve + # play sound "audio/heavy_door_open.ogg" + + "Серверная. Место, где родилась вся эта ложь." + "Я помню, как три года назад входил сюда, чтобы заглушить голос совести. Семь лет работы, три года молчания — всё это здесь." + "Светодиоды на стойках серверов мигают, словно конвульсии умирающего. Воздух здесь настолько сухой и горячий, что обжигает горло при каждом вдохе." + "На центральном терминале мерцает последний интерфейс. Если я нажму 'Ввод', пути назад не будет. Станция отключит жизнеобеспечение окончательно." + jump final_choice label final_choice: - scene bg_server with fade - "Система готова. На экране пульсирует курсор." - "Теперь, когда я знаю всё, у меня есть выбор. Но какой из них — мой настоящий?" + scene bg_server_close with dissolve + # play music "audio/tension_finale.ogg" fadein 5.0 + + "Курсор пульсирует. Он ждет. Решение, от которого я бежал три года, теперь стоит передо мной во весь рост." + "Я чувствую, как холод металла терминала пробирает до костей, несмотря на жар в серверной." menu: - # Концовка «Злость» - доступна всегда (гневный побег) "Разбить экран (Гнев)": jump ending_anger - # Концовка «Принятие» - доступна всегда (нейтральный инфантилизм) "Остаться и ждать конца (Принятие)": jump ending_acceptance - # Концовка «Переосмысление» - доступна только если собраны все фрагменты "Признать ошибки и выйти (Переосмысление)" if fragments >= 3: jump ending_reflection - # Концовка «Свет» - доступна только если собраны фрагменты И были «переосмысления» в журнале - "Отправить извинения и выйти (Свет)" if fragments >= 3 and sync_points >= 3: + "Отправить извинения (Свет)" if fragments >= 3 and sync_points >= 3: jump ending_light -# --- Концовки --- label ending_silence: - "Батарея села. Наконец-таки настала ТИШИНА." + scene black with fade + "Экран погас. Вместе с ним погас и последний источник света в этом склепе." + "Генератор сделал последний судорожный вдох и замолчал. В этой абсолютной темноте я наконец-то слышу то, чего так боялся." + "Ничего. Пустоту. Тишину, которая заполняет легкие вместо воздуха." + "Наконец-таки настала ТИШИНА." jump quit_after_ending label ending_anger: - "Я срываю красную панель. Тумблер падает вниз. Искры летят в лицо." - "Станция умирает, и я вместе с ней. Я зол на всё это время. Я зол на себя." + # play sound "audio/glass_shatter.ogg" + "Гнев — это единственное, что заставляет меня чувствовать себя живым. Я срываю красную панель, сдирая кожу на пальцах до крови." + "Тумблер падает вниз с хрустом ломающихся костей. Искры бьют в лицо, выжигая остатки рассудка." + "Станция умирает, и я тяну её за собой в небытие. Я зол на этот холод, на эти три года, на её молчание... я зол на себя, но мне проще сжечь этот мир, чем признать свою вину." + "Я зол." jump quit_after_ending label ending_acceptance: - "Я ничего не выбираю. Курсор просто мигает." - "Я буду ждать здесь, пока генератор не заглохнет. Это проще всего." + "Курсор мигает в ритме моего безразличия. Раз, два... Раз, два..." + "Зачем что-то менять? Зачем бороться с энтропией, если она всё равно победит?" + "Я откидываюсь на спинку кресла. Инфантильное желание просто закрыть глаза и ждать, пока тьма поглотит эту станцию, кажется единственно верным." + "Пусть всё закончится само собой. Я устал играть в героя. Я просто... буду ждать." jump quit_after_ending label ending_reflection: - "Я печатаю: 'Я был неправ. Это была глупая игра в мученика'." - "Я выключаю станцию. Впервые за три года я чувствую, что могу вдохнуть полной грудью." + "Я печатаю дрожащими пальцами: 'Я был неправ. Это была глупая, бесконечная игра в мученика, в которой не было победителей'." + "Я признаю это. Три года я строил стены из своего молчания, думая, что защищаюсь. Но я просто возвел свою собственную тюрьму." + "Я выключаю станцию. Впервые за долгое время я чувствую, что в воздухе стало меньше гари. Я должен двигаться дальше. Я не знаю, что там, во внешнем мире, но я больше не заперт внутри себя." jump quit_after_ending label ending_light: - "Я трачу последние искры энергии на то, чтобы отправить сообщение с извинениями." - "Я не знаю, прочтет ли он. Но я знаю, что я отпустил. Я выхожу в коридор, не оборачиваясь." + "Я направляю остатки энергии на передатчик. Каждый процент заряда — это вырванный из жизни кусок, который я отдаю за шанс сказать правду." + "Я пишу не для того, чтобы получить ответ. Я пишу, чтобы освободиться. 'Прости за тишину. Она была моей ошибкой'." + "Нажимаю 'Отправить'. Система оповещает о передаче пакета, и тут же питание отключается. Станция замирает." + "Я встаю и иду к выходу. Я не оглядываюсь. Мой долг перед прошлым оплачен, а будущее... будущее наконец-то принадлежит мне." jump quit_after_ending label quit_after_ending: