label main_menu: return init python: _game_menu_screen = None _skipping = False coffee_done = False window_done = False power_done = False battery = 100 fragments = 0 sync_points = 0 journal = [] visited_locations = {"room": False, "corridor": False, "terminal": False} game_started = False def use_battery(amount): global battery battery -= amount if battery < 0: battery = 0 screen game_ui(): if game_started: frame: align (0.02, 0.02) vbox: text "ЭНЕРГИЯ: [battery]%" size 40 text "ФРАГМЕНТЫ: [fragments]/3" size 40 textbutton "ЖУРНАЛ" action Show("journal") align (0.98, 0.98) screen journal(): modal True frame: align (0.5, 0.5) xsize 700 ysize 500 vbox: text "МЫСЛИ" size 50 for entry in journal: text "- [entry]" size 40 textbutton "ПОДУМАТЬ ОБ ЭТОМ" action [SetVariable("sync_points", sync_points + 1), Hide("journal")] textbutton "ЗАКРЫТЬ" action Hide("journal") label start: scene black play sound "audio/typing.ogg" loop fadein 0.5 show text "{size=150}{cps=10}ТИШИНА{/cps}{/size}" with dissolve pause 2.0 hide text with dissolve show text "{size=120}{cps=10}20.04.2023{/cps}{/size}" with dissolve pause 2.0 hide text with dissolve stop sound fadeout 0.5 $ player_name = renpy.input("Как меня зовут?", length=12) $ player_name = player_name.strip() if not player_name: $ player_name = "Техник" "Приятно познакомиться, [player_name]." jump phase_1_intro label phase_1_intro: # Инициализация счетчика рутины $ routine_tasks = 0 scene bg_room with dissolve "Я просыпаюсь. Шум генератора — единственное, что доказывает, что я еще здесь." "Семь лет назад я считал эту станцию своей крепостью. Теперь — это мой склеп, где я сам себе надсмотрщик." "В воздухе пахнет озоном и застоявшейся пылью. Я чувствую каждый вдох, как попытку проглотить этот тяжелый, мертвый воздух." "Мои руки привычно тянутся к вещам, которые я переставляю изо дня в день. Это не привычка. Это попытка доказать самому себе, что я существую в этой физической реальности." "Мне нужно закончить утренний ритуал. Только после этого я смогу сосредоточиться на всём остальном." 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 label main_loop: if battery <= 0: jump ending_silence show screen game_ui "Станция ждет. Что я буду делать?" menu: "Осмотреть комнату": $ use_battery(5) jump qte_date_input "Пойти в коридор": $ use_battery(5) jump qte_corridor_puzzle "Терминал": $ use_battery(5) jump qte_terminal_rhythm "Идти в серверную" if fragments >= 3: jump phase_3_culmination label qte_date_input: "Нужно ввести дату. Мои руки дрожат." $ date_input = renpy.input("Введите дату (ДД.ММ.ГГГГ):") if date_input == "20.04.2023": "Синхронизация успешна." $ fragments += 1 $ journal.append("Я помню этот день. В этот день всё сломалось.") else: "Ошибка доступа." jump main_loop label qte_corridor_puzzle: "Коридор. Здесь разбитое зеркало." # Тут будет код пазла (наложение изображений) $ fragments += 1 $ journal.append("Отражение пугает. Я вижу в нём чужака.") jump main_loop label qte_terminal_rhythm: "Сигнал уходит. Нужно поймать момент." # Тут будет код ритм-игры $ fragments += 1 $ journal.append("Я пытаюсь связаться, но это крик в пустоту.") jump main_loop label phase_3_culmination: "Я стою перед дверью в серверную. Пути назад нет." jump final_choice label final_choice: scene bg_server with fade "Система готова. На экране пульсирует курсор." "Теперь, когда я знаю всё, у меня есть выбор. Но какой из них — мой настоящий?" menu: # Концовка «Злость» - доступна всегда (гневный побег) "Разбить экран (Гнев)": jump ending_anger # Концовка «Принятие» - доступна всегда (нейтральный инфантилизм) "Остаться и ждать конца (Принятие)": jump ending_acceptance # Концовка «Переосмысление» - доступна только если собраны все фрагменты "Признать ошибки и выйти (Переосмысление)" if fragments >= 3: jump ending_reflection # Концовка «Свет» - доступна только если собраны фрагменты И были «переосмысления» в журнале "Отправить извинения и выйти (Свет)" if fragments >= 3 and sync_points >= 3: jump ending_light # --- Концовки --- label ending_silence: "Батарея села. Наконец-таки настала ТИШИНА." jump quit_after_ending label ending_anger: "Я срываю красную панель. Тумблер падает вниз. Искры летят в лицо." "Станция умирает, и я вместе с ней. Я зол на всё это время. Я зол на себя." 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: $ renpy.quit() return