basic cycle
This commit is contained in:
1 parent
6994bbbf7a
commit
ed410f46b1
6 files changed
+229
-28
No files matched your search
+12
-13
@@ -26,17 +26,16 @@ define config.check_conflicting_properties = True
|
|||||||
## Цвета текста в интерфейсе.
|
## Цвета текста в интерфейсе.
|
||||||
|
|
||||||
## Акцентный цвет используется в заголовках и подчёркнутых текстах.
|
## Акцентный цвет используется в заголовках и подчёркнутых текстах.
|
||||||
define gui.accent_color = '#0099cc'
|
define gui.accent_color = '#858585'
|
||||||
|
|
||||||
## Цвет, используемый в текстовой кнопке, когда она не выбрана и не наведена.
|
## Цвет, используемый в текстовой кнопке, когда она не выбрана и не наведена.
|
||||||
define gui.idle_color = '#888888'
|
define gui.idle_color = '#b7b7b7'
|
||||||
|
|
||||||
## Small_color используется в маленьком тексте, который должен быть ярче/темнее,
|
## Small_color используется в маленьком тексте, который должен быть ярче/темнее,
|
||||||
## для того, чтобы выделяться.
|
## для того, чтобы выделяться.
|
||||||
define gui.idle_small_color = '#aaaaaa'
|
define gui.idle_small_color = '#888888'
|
||||||
|
|
||||||
## Цвет, используемых в кнопках и панелях, когда они наведены.
|
## Цвет, используемых в кнопках и панелях, когда они наведены.
|
||||||
define gui.hover_color = '#66c1e0'
|
define gui.hover_color = '#4a5255'
|
||||||
|
|
||||||
## Цвет, используемый текстовой кнопкой, когда она выбрана, но не наведена.
|
## Цвет, используемый текстовой кнопкой, когда она выбрана, но не наведена.
|
||||||
## Кнопка может быть выбрана, если это текущий экран или текущее значение
|
## Кнопка может быть выбрана, если это текущий экран или текущее значение
|
||||||
@@ -59,25 +58,25 @@ define gui.interface_text_color = '#ffffff'
|
|||||||
## Шрифты и их размеры #########################################################
|
## Шрифты и их размеры #########################################################
|
||||||
|
|
||||||
## Шрифт, используемый внутриигровым текстом.
|
## Шрифт, используемый внутриигровым текстом.
|
||||||
define gui.text_font = "DejaVuSans.ttf"
|
define gui.text_font = "gui/fonts/NoteworthyBold.otf"
|
||||||
|
|
||||||
## Шрифт, используемый именами персонажей.
|
## Шрифт, используемый именами персонажей.
|
||||||
define gui.name_text_font = "DejaVuSans.ttf"
|
define gui.name_text_font = "gui/fonts/NoteworthyBold.otf"
|
||||||
|
|
||||||
## Шрифт, используемый текстом вне игры.
|
## Шрифт, используемый текстом вне игры.
|
||||||
define gui.interface_text_font = "DejaVuSans.ttf"
|
define gui.interface_text_font = "gui/fonts/NoteworthyBold.otf"
|
||||||
|
|
||||||
## Размер нормального текста диалога.
|
## Размер нормального текста диалога.
|
||||||
define gui.text_size = 33
|
define gui.text_size = 40
|
||||||
|
|
||||||
## Размер имён персонажей.
|
## Размер имён персонажей.
|
||||||
define gui.name_text_size = 45
|
define gui.name_text_size = 50
|
||||||
|
|
||||||
## Размер текста в пользовательском интерфейсе.
|
## Размер текста в пользовательском интерфейсе.
|
||||||
define gui.interface_text_size = 33
|
define gui.interface_text_size = 45
|
||||||
|
|
||||||
## Размер заголовков в пользовательском интерфейсе.
|
## Размер заголовков в пользовательском интерфейсе.
|
||||||
define gui.label_text_size = 36
|
define gui.label_text_size = 50
|
||||||
|
|
||||||
## Размер текста на экране уведомлений.
|
## Размер текста на экране уведомлений.
|
||||||
define gui.notify_text_size = 24
|
define gui.notify_text_size = 24
|
||||||
@@ -134,7 +133,7 @@ define gui.namebox_tile = False
|
|||||||
## значения в пикселях слева и сверху от текстового окна или процентное
|
## значения в пикселях слева и сверху от текстового окна или процентное
|
||||||
## отношение, например, 0.5 для центрирования.
|
## отношение, например, 0.5 для центрирования.
|
||||||
define gui.dialogue_xpos = 402
|
define gui.dialogue_xpos = 402
|
||||||
define gui.dialogue_ypos = 75
|
define gui.dialogue_ypos = 45
|
||||||
|
|
||||||
## Максимальная ширина текста диалога в пикселях.
|
## Максимальная ширина текста диалога в пикселях.
|
||||||
define gui.dialogue_width = 1116
|
define gui.dialogue_width = 1116
|
||||||
|
|||||||
Binary file not shown.
+8
-2
@@ -39,6 +39,12 @@ define gui.about = _p("""
|
|||||||
|
|
||||||
define build.name = "Silence"
|
define build.name = "Silence"
|
||||||
|
|
||||||
|
define config.has_autosave = False
|
||||||
|
define config.has_quicksave = False
|
||||||
|
define config.autosave_on_quit = False
|
||||||
|
define config.autosave_on_choice = False
|
||||||
|
define config.rollback_enabled = False
|
||||||
|
define config.quit_action = Quit(confirm=False)
|
||||||
|
|
||||||
## Звуки и музыка ##############################################################
|
## Звуки и музыка ##############################################################
|
||||||
|
|
||||||
@@ -48,7 +54,7 @@ define build.name = "Silence"
|
|||||||
|
|
||||||
define config.has_sound = True
|
define config.has_sound = True
|
||||||
define config.has_music = True
|
define config.has_music = True
|
||||||
define config.has_voice = True
|
define config.has_voice = False
|
||||||
|
|
||||||
|
|
||||||
## Чтобы разрешить игроку тестировать громкость на звуковом или голосовом
|
## Чтобы разрешить игроку тестировать громкость на звуковом или голосовом
|
||||||
@@ -121,7 +127,7 @@ define config.window_hide_transition = Dissolve(.2)
|
|||||||
## в то время как любая другая цифра — это количество символов, печатаемых в
|
## в то время как любая другая цифра — это количество символов, печатаемых в
|
||||||
## секунду.
|
## секунду.
|
||||||
|
|
||||||
default preferences.text_cps = 0
|
default preferences.text_cps = 40
|
||||||
|
|
||||||
|
|
||||||
## Стандартная задержка авточтения. Большие значения означают долгие ожидания, а
|
## Стандартная задержка авточтения. Большие значения означают долгие ожидания, а
|
||||||
|
|||||||
+3
-1
@@ -236,6 +236,7 @@ style choice_button_text is default:
|
|||||||
## внеигровым меню.
|
## внеигровым меню.
|
||||||
|
|
||||||
screen quick_menu():
|
screen quick_menu():
|
||||||
|
pass
|
||||||
|
|
||||||
## Гарантирует, что оно появляется поверх других экранов.
|
## Гарантирует, что оно появляется поверх других экранов.
|
||||||
zorder 100
|
zorder 100
|
||||||
@@ -261,7 +262,7 @@ screen quick_menu():
|
|||||||
init python:
|
init python:
|
||||||
config.overlay_screens.append("quick_menu")
|
config.overlay_screens.append("quick_menu")
|
||||||
|
|
||||||
default quick_menu = True
|
default quick_menu = False
|
||||||
|
|
||||||
style quick_menu is hbox
|
style quick_menu is hbox
|
||||||
style quick_button is default
|
style quick_button is default
|
||||||
@@ -1519,6 +1520,7 @@ style pref_vbox:
|
|||||||
## использующей меньше кнопок, но больших по размеру, чтобы их было легче
|
## использующей меньше кнопок, но больших по размеру, чтобы их было легче
|
||||||
## касаться.
|
## касаться.
|
||||||
screen quick_menu():
|
screen quick_menu():
|
||||||
|
pass
|
||||||
variant "touch"
|
variant "touch"
|
||||||
|
|
||||||
zorder 100
|
zorder 100
|
||||||
|
|||||||
+206
-12
@@ -1,22 +1,216 @@
|
|||||||
# Вы можете расположить сценарий своей игры в этом файле.
|
label main_menu:
|
||||||
|
return
|
||||||
|
|
||||||
# Определение персонажей игры.
|
init python:
|
||||||
define e = Character('Эйлин', color="#c8ffc8")
|
_game_menu_screen = None
|
||||||
|
_skipping = False
|
||||||
|
|
||||||
# Вместо использования оператора image можете просто
|
coffee_done = False
|
||||||
# складывать все ваши файлы изображений в папку images.
|
window_done = False
|
||||||
# Например, сцену bg room можно вызвать файлом "bg room.png",
|
power_done = False
|
||||||
# а eileen happy — "eileen happy.webp", и тогда они появятся в игре.
|
|
||||||
|
|
||||||
# Игра начинается здесь:
|
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:
|
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
|
||||||
|
|
||||||
scene bg room
|
label ending_anger:
|
||||||
|
"Я срываю красную панель. Тумблер падает вниз. Искры летят в лицо."
|
||||||
|
"Станция умирает, и я вместе с ней. Я зол на всё это время. Я зол на себя."
|
||||||
|
jump quit_after_ending
|
||||||
|
|
||||||
show eileen happy
|
label ending_acceptance:
|
||||||
|
"Я ничего не выбираю. Курсор просто мигает."
|
||||||
|
"Я буду ждать здесь, пока генератор не заглохнет. Это проще всего."
|
||||||
|
jump quit_after_ending
|
||||||
|
|
||||||
e "Вы создали новую игру Ren'Py."
|
label ending_reflection:
|
||||||
|
"Я печатаю: 'Я был неправ. Это была глупая игра в мученика'."
|
||||||
|
"Я выключаю станцию. Впервые за три года я чувствую, что могу вдохнуть полной грудью."
|
||||||
|
jump quit_after_ending
|
||||||
|
|
||||||
e "Добавьте сюжет, изображения и музыку и отправьте её в мир!"
|
label ending_light:
|
||||||
|
"Я трачу последние искры энергии на то, чтобы отправить сообщение с извинениями."
|
||||||
|
"Я не знаю, прочтет ли он. Но я знаю, что я отпустил. Я выхожу в коридор, не оборачиваясь."
|
||||||
|
jump quit_after_ending
|
||||||
|
|
||||||
|
label quit_after_ending:
|
||||||
|
$ renpy.quit()
|
||||||
return
|
return
|
||||||
Binary file not shown.
Reference in new issue
Block a user