Files
Silence/game/script.rpy
T
2026-04-22 21:52:53 +03:00

216 lines
11 KiB
Plaintext

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