From fff5a9d4aacc1e0658ddd1075c29640004c9d5e8 Mon Sep 17 00:00:00 2001 From: Vladislav Khorev Date: Sat, 13 Jun 2026 15:07:09 +0300 Subject: [PATCH] Fixing dialogues and cutscenes, minor bug fixing --- resources/dialogue/cutscenes.json | 65 - resources/dialogue/cutscenes001.json | 396 --- resources/dialogue/cutscenes002.json | 415 --- resources/dialogue/cutscenes003.json | 415 --- .../{cutscenes004.json => cutscenes005.json} | 22 +- resources/dialogue/dorm_dialogues.json | 1457 +++++----- .../dialogue/uni_exterior_dialogues.json | 222 +- .../dialogue/uni_interior_dialogues_004.json | 295 +- .../dialogue/uni_interior_dialogues_005.json | 2450 +++++++++++++++++ resources/start_dorm.lua | 43 +- resources/start_uni_exterior.lua | 45 +- resources/start_uni_interior.lua | 282 +- src/Game.cpp | 46 +- src/Location.cpp | 2 +- src/Location.h | 1 + src/MenuManager.cpp | 43 +- src/MenuManager.h | 3 +- src/ScriptEngine.cpp | 16 + 18 files changed, 4010 insertions(+), 2208 deletions(-) delete mode 100644 resources/dialogue/cutscenes.json delete mode 100644 resources/dialogue/cutscenes001.json delete mode 100644 resources/dialogue/cutscenes002.json delete mode 100644 resources/dialogue/cutscenes003.json rename resources/dialogue/{cutscenes004.json => cutscenes005.json} (98%) create mode 100644 resources/dialogue/uni_interior_dialogues_005.json diff --git a/resources/dialogue/cutscenes.json b/resources/dialogue/cutscenes.json deleted file mode 100644 index dee3add..0000000 --- a/resources/dialogue/cutscenes.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "cutscenes": [ - { - "id": "test_cutscene_01", - "background": "resources/black.png", - "durationMs": 5000, - "fadeOutMs": 500, - "fadeInMs": 500, - "endFadeOutMs": 500, - "endFadeInMs": 500, - "imageSegments": [ - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_wall_x.png", - "startMs": 0, - "endMs": 8000, - "fadeInMs": 0, - "width": 1280, - "height": 720, - "from": { - "centerX": 0.3, "scale": 1.2 - }, - "to": { - "centerX": 0.7, "scale": 1.2 - }, - "easing": "Linear" - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_aida1_x.png", - "startMs": 0, - "endMs": 8000, - "width": 1280, - "height": 720, - "from": { - - "centerX": 0.3, - "centerY": 0.5, - "scale": 1.0 - }, - "to": { - "centerX": 0.7, - "centerY": 0.5, - "scale": 1.0 - } - } - ], - "lines": [ - { - "speaker": "Аида Дженибековна", - "text": "Здравствуйте, студенты.. Кого я вижу, где вы были весь семестр?", - "durationMs": 3000 - }, - { - "speaker": "Аида Дженибековна", - "text": "В эпизоде \"Семетей\" трилогии \"Манас\", изменники Канчоро и Кыяз захватывают власть над кыргызами.", - "durationMs": 3000 - }, - { - "speaker": "Аида Дженибековна", - "text": "На сегодня лекция завершена. Домашнее задание - к практическому занятию вы должны подготовить презентации, каждый по своей теме.", - "durationMs": 2000 - } - ] - } - ] -} \ No newline at end of file diff --git a/resources/dialogue/cutscenes001.json b/resources/dialogue/cutscenes001.json deleted file mode 100644 index 36a20ca..0000000 --- a/resources/dialogue/cutscenes001.json +++ /dev/null @@ -1,396 +0,0 @@ -{ - "cutscenes": [ - { - "id": "test_cutscene_01", - "background" : "resources/black.png", - "skippable": true, - "durationMs": 5000, - "fadeOutMs": 500, - "fadeInMs": 500, - "endFadeOutMs": 500, - "endFadeInMs": 500, - "onFadeInCallback": "", - "imageSegments": [ - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_wall_x.png", - "width": 1280, - "height": 720, - "startMs": 0, - "endMs": 3133, - "fadeInMs": 0, - "fadeOutMs": 2000, - "easing": "EaseOutCubic", - "from": { - "centerX": 0.51, - "centerY": 0.5, - "scale": 1.2 - }, - "to": { - "centerX": 0.58, - "centerY": 0.5, - "scale": 1.15 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_aida1_x.png", - "width": 1280, - "height": 720, - "startMs": 0, - "endMs": 3150, - "fadeInMs": 0, - "fadeOutMs": 2000, - "easing": "EaseOutCubic", - "from": { - "centerX": 0.52, - "centerY": 0.5, - "scale": 1.2 - }, - "to": { - "centerX": 0.575, - "centerY": 0.5, - "scale": 1.15 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_heads_x.png", - "width": 1280, - "height": 720, - "startMs": 0, - "endMs": 3150, - "fadeInMs": 0, - "fadeOutMs": 2000, - "easing": "EaseOutCubic", - "from": { - "centerX": 0.56, - "centerY": 0.64, - "scale": 1.3 - }, - "to": { - "centerX": 0.5, - "centerY": 0.63, - "scale": 1.4 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_wall_x.png", - "width": 1280, - "height": 720, - "startMs": 3050, - "endMs": 12150, - "fadeInMs": 1000, - "fadeOutMs": 1000, - "easing": "Linear", - "from": { - "centerX": 0.56, - "centerY": 0.5, - "scale": 1.2 - }, - "to": { - "centerX": 0.5, - "centerY": 0.5, - "scale": 1.1 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_aida3_x.png", - "width": 1280, - "height": 720, - "startMs": 3050, - "endMs": 12166, - "fadeInMs": 1100, - "fadeOutMs": 1000, - "easing": "Linear", - "from": { - "centerX": 0.52, - "centerY": 0.5, - "scale": 1.2 - }, - "to": { - "centerX": 0.5, - "centerY": 0.5, - "scale": 1.1 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_heads_x.png", - "width": 1280, - "height": 720, - "startMs": 3033, - "endMs": 12050, - "fadeInMs": 1000, - "fadeOutMs": 1000, - "easing": "Linear", - "from": { - "centerX": 0.5, - "centerY": 0.7, - "scale": 1.3 - }, - "to": { - "centerX": 0.58, - "centerY": 0.7, - "scale": 1.2 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_wall_x.png", - "width": 1280, - "height": 720, - "startMs": 11115, - "endMs": 18149, - "fadeInMs": 1000, - "fadeOutMs": 1000, - "easing": "Linear", - "from": { - "centerX": 0.59, - "centerY": 0.5, - "scale": 1.3 - }, - "to": { - "centerX": 0.49, - "centerY": 0.5, - "scale": 1.2 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_aida2_x.png", - "width": 1280, - "height": 720, - "startMs": 12032, - "endMs": 18165, - "fadeInMs": 1000, - "fadeOutMs": 1000, - "easing": "Linear", - "from": { - "centerX": 0.53, - "centerY": 0.5, - "scale": 1.3 - }, - "to": { - "centerX": 0.49, - "centerY": 0.5, - "scale": 1.2 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_heads_x.png", - "width": 1280, - "height": 720, - "startMs": 11951, - "endMs": 18150, - "fadeInMs": 1000, - "fadeOutMs": 1000, - "easing": "Linear", - "from": { - "centerX": 0.45, - "centerY": 0.8, - "scale": 1.3 - }, - "to": { - "centerX": 0.6, - "centerY": 0.8, - "scale": 1.26 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_wall_x.png", - "width": 1280, - "height": 720, - "startMs": 23967, - "endMs": 30000, - "fadeInMs": 500, - "fadeOutMs": 500, - "easing": "Linear", - "from": { - "centerX": 0.64, - "centerY": 0.3, - "scale": 2 - }, - "to": { - "centerX": 0.5, - "centerY": 0.3, - "scale": 2 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_aida3_x.png", - "width": 1280, - "height": 720, - "startMs": 24016, - "endMs": 30000, - "fadeInMs": 500, - "fadeOutMs": 500, - "easing": "Linear", - "from": { - "centerX": 0.63, - "centerY": 0.3, - "scale": 2 - }, - "to": { - "centerX": 0.51, - "centerY": 0.3, - "scale": 2 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_wall_x.png", - "width": 1280, - "height": 720, - "startMs": 18034, - "endMs": 24151, - "fadeInMs": 1000, - "fadeOutMs": 700, - "easing": "EaseOutSine", - "from": { - "centerX": 0.25, - "centerY": 0.2, - "scale": 2.3 - }, - "to": { - "centerX": 0.3, - "centerY": 0.2, - "scale": 2.3 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_wall_x.png", - "width": 1280, - "height": 720, - "startMs": 30000, - "endMs": 33683, - "fadeInMs": 500, - "fadeOutMs": 1000, - "easing": "Linear", - "from": { - "centerX": 0.45, - "centerY": 0.5, - "scale": 1.1 - }, - "to": { - "centerX": 0.5, - "centerY": 0.5, - "scale": 1 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_aida2_x.png", - "width": 1280, - "height": 720, - "startMs": 30333, - "endMs": 33466, - "fadeInMs": 500, - "fadeOutMs": 1000, - "easing": "Linear", - "from": { - "centerX": 0.43, - "centerY": 0.5, - "scale": 1.1 - }, - "to": { - "centerX": 0.5, - "centerY": 0.5, - "scale": 1 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_heads_x.png", - "width": 1280, - "height": 720, - "startMs": 30400, - "endMs": 33483, - "fadeInMs": 0, - "fadeOutMs": 1000, - "easing": "Linear", - "from": { - "centerX": 0.5, - "centerY": 0.65, - "scale": 1.2 - }, - "to": { - "centerX": 0.5, - "centerY": 0.6, - "scale": 1.2 - } - } - ], - "lines": [ - { - "speaker": "Аида Дженибековна", - "text": "Опаздывающие, заходите скорее и занимайте свои места! Лекция начинается!", - "durationMs": 3000, - "waitForConfirm": false, - "luaCallback": "" - }, - { - "speaker": "Аида Дженибековна", - "text": "В эпизоде \"Семетей\" трилогии \"Манас\", изменники Канчоро и Кыяз захватывают власть над кыргызами.", - "durationMs": 3000, - "waitForConfirm": false, - "luaCallback": "" - }, - { - "speaker": "Аида Дженибековна", - "text": "Чтобы спасти раненого богатыря Семетея, фея Кёкмончок с помощью заклинания уводит его в иной мир.", - "durationMs": 3000, - "waitForConfirm": false, - "luaCallback": "" - }, - { - "speaker": "Аида Дженибековна", - "text": "Этот мир описан в эпосе Манас как Кайып или Аль-Гайб, но некоторые ученые называют его миром теней.", - "durationMs": 3000, - "waitForConfirm": false, - "luaCallback": "" - }, - { - "speaker": "Аида Дженибековна", - "text": "В этом мире обитают феи, духи и джинны. Простым смертным в этот мир дорога закрыта.", - "durationMs": 3000, - "waitForConfirm": false, - "luaCallback": "" - }, - { - "speaker": "Аида Дженибековна", - "text": "Время там течет по другому - за один день в теневом мире могут пройти годы жизни обычного мира.", - "durationMs": 3000, - "waitForConfirm": false, - "luaCallback": "" - }, - { - "speaker": "Аида Дженибековна", - "text": "Обычно, мир теней никак не пересекается с нашим миром живых людей.", - "durationMs": 3000, - "waitForConfirm": false, - "luaCallback": "" - }, - { - "speaker": "", - "text": "Но в критические моменты для народа, обитатели теневого мира могут приходить в наш мир.", - "durationMs": 3000, - "waitForConfirm": false, - "luaCallback": "" - }, - { - "speaker": "Аида Дженибековна", - "text": "Совсем недавно закончилась пандемия, а сегодня мир захлестнули кровавые войны.", - "durationMs": 3000, - "waitForConfirm": false, - "luaCallback": "" - }, - { - "speaker": "Аида Дженибековна", - "text": "В такие кризисные моменты истории, грань между мирами становится особенно тонкой.", - "durationMs": 3000, - "waitForConfirm": false, - "luaCallback": "" - }, - { - "speaker": "Аида Дженибековна", - "text": "На сегодня лекция завершена. Все свободны! Задания на этот модуль вы получите индивидуально!", - "durationMs": 3000, - "waitForConfirm": false, - "luaCallback": "" - } - ] - } - ] -} \ No newline at end of file diff --git a/resources/dialogue/cutscenes002.json b/resources/dialogue/cutscenes002.json deleted file mode 100644 index be6a895..0000000 --- a/resources/dialogue/cutscenes002.json +++ /dev/null @@ -1,415 +0,0 @@ -{ - "cutscenes": [ - { - "id": "test_cutscene_01", - "skippable": true, - "durationMs": 34000, - "fadeOutMs": 500, - "fadeInMs": 500, - "endFadeOutMs": 0, - "endFadeInMs": 0, - "onFadeInCallback": "", - "imageSegments": [ - { - "path": "resources/black.png", - "width": 1280, - "height": 720, - "startMs": 0, - "endMs": 34000, - "fadeInMs": 0, - "fadeOutMs": 0, - "easing": "Linear", - "from": { - "centerX": 0.5, - "centerY": 0.5, - "scale": 1 - }, - "to": { - "centerX": 0.5, - "centerY": 0.5, - "scale": 1 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_wall_x.png", - "width": 1280, - "height": 720, - "startMs": 0, - "endMs": 3133, - "fadeInMs": 0, - "fadeOutMs": 2000, - "easing": "EaseOutCubic", - "from": { - "centerX": 0.51, - "centerY": 0.5, - "scale": 1.2 - }, - "to": { - "centerX": 0.58, - "centerY": 0.5, - "scale": 1.15 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_aida1_x.png", - "width": 1280, - "height": 720, - "startMs": 0, - "endMs": 3150, - "fadeInMs": 0, - "fadeOutMs": 2000, - "easing": "EaseOutCubic", - "from": { - "centerX": 0.52, - "centerY": 0.5, - "scale": 1.2 - }, - "to": { - "centerX": 0.575, - "centerY": 0.5, - "scale": 1.15 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_heads_x.png", - "width": 1280, - "height": 720, - "startMs": 0, - "endMs": 3150, - "fadeInMs": 0, - "fadeOutMs": 2000, - "easing": "EaseOutCubic", - "from": { - "centerX": 0.56, - "centerY": 0.36, - "scale": 1.3 - }, - "to": { - "centerX": 0.5, - "centerY": 0.37, - "scale": 1.4 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_wall_x.png", - "width": 1280, - "height": 720, - "startMs": 3050, - "endMs": 12150, - "fadeInMs": 1000, - "fadeOutMs": 1000, - "easing": "Linear", - "from": { - "centerX": 0.56, - "centerY": 0.5, - "scale": 1.2 - }, - "to": { - "centerX": 0.5, - "centerY": 0.5, - "scale": 1.1 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_aida3_x.png", - "width": 1280, - "height": 720, - "startMs": 3050, - "endMs": 12166, - "fadeInMs": 1100, - "fadeOutMs": 1000, - "easing": "Linear", - "from": { - "centerX": 0.52, - "centerY": 0.5, - "scale": 1.2 - }, - "to": { - "centerX": 0.5, - "centerY": 0.5, - "scale": 1.1 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_heads_x.png", - "width": 1280, - "height": 720, - "startMs": 3033, - "endMs": 12050, - "fadeInMs": 1000, - "fadeOutMs": 1000, - "easing": "Linear", - "from": { - "centerX": 0.5, - "centerY": 0.3, - "scale": 1.3 - }, - "to": { - "centerX": 0.58, - "centerY": 0.3, - "scale": 1.2 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_wall_x.png", - "width": 1280, - "height": 720, - "startMs": 11115, - "endMs": 18149, - "fadeInMs": 1000, - "fadeOutMs": 1000, - "easing": "Linear", - "from": { - "centerX": 0.59, - "centerY": 0.5, - "scale": 1.3 - }, - "to": { - "centerX": 0.49, - "centerY": 0.5, - "scale": 1.2 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_aida2_x.png", - "width": 1280, - "height": 720, - "startMs": 12032, - "endMs": 18165, - "fadeInMs": 1000, - "fadeOutMs": 1000, - "easing": "Linear", - "from": { - "centerX": 0.53, - "centerY": 0.5, - "scale": 1.3 - }, - "to": { - "centerX": 0.49, - "centerY": 0.5, - "scale": 1.2 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_heads_x.png", - "width": 1280, - "height": 720, - "startMs": 11951, - "endMs": 18150, - "fadeInMs": 1000, - "fadeOutMs": 1000, - "easing": "Linear", - "from": { - "centerX": 0.45, - "centerY": 0.2, - "scale": 1.3 - }, - "to": { - "centerX": 0.6, - "centerY": 0.2, - "scale": 1.26 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_wall_x.png", - "width": 1280, - "height": 720, - "startMs": 23967, - "endMs": 30000, - "fadeInMs": 500, - "fadeOutMs": 500, - "easing": "Linear", - "from": { - "centerX": 0.64, - "centerY": 0.7, - "scale": 2 - }, - "to": { - "centerX": 0.5, - "centerY": 0.7, - "scale": 2 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_aida3_x.png", - "width": 1280, - "height": 720, - "startMs": 24016, - "endMs": 30000, - "fadeInMs": 500, - "fadeOutMs": 500, - "easing": "Linear", - "from": { - "centerX": 0.63, - "centerY": 0.7, - "scale": 2 - }, - "to": { - "centerX": 0.51, - "centerY": 0.7, - "scale": 2 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_wall_x.png", - "width": 1280, - "height": 720, - "startMs": 18067, - "endMs": 24184, - "fadeInMs": 1000, - "fadeOutMs": 700, - "easing": "EaseOutSine", - "from": { - "centerX": 0.25, - "centerY": 0.8, - "scale": 2.3 - }, - "to": { - "centerX": 0.3, - "centerY": 0.8, - "scale": 2.3 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_wall_x.png", - "width": 1280, - "height": 720, - "startMs": 30000, - "endMs": 33683, - "fadeInMs": 500, - "fadeOutMs": 1000, - "easing": "Linear", - "from": { - "centerX": 0.45, - "centerY": 0.5, - "scale": 1.1 - }, - "to": { - "centerX": 0.5, - "centerY": 0.5, - "scale": 1 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_aida2_x.png", - "width": 1280, - "height": 720, - "startMs": 30333, - "endMs": 33466, - "fadeInMs": 500, - "fadeOutMs": 1000, - "easing": "Linear", - "from": { - "centerX": 0.43, - "centerY": 0.5, - "scale": 1.1 - }, - "to": { - "centerX": 0.5, - "centerY": 0.5, - "scale": 1 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_heads_x.png", - "width": 1280, - "height": 720, - "startMs": 30400, - "endMs": 33483, - "fadeInMs": 0, - "fadeOutMs": 1000, - "easing": "Linear", - "from": { - "centerX": 0.5, - "centerY": 0.35, - "scale": 1.2 - }, - "to": { - "centerX": 0.5, - "centerY": 0.4, - "scale": 1.2 - } - } - ], - "lines": [ - { - "speaker": "Аида Дженибековна", - "text": "Опаздывающие, заходите скорее и занимайте свои места! Лекция начинается!", - "durationMs": 3000, - "waitForConfirm": false, - "luaCallback": "" - }, - { - "speaker": "Аида Дженибековна", - "text": "В эпизоде \"Семетей\" трилогии \"Манас\", изменники Канчоро и Кыяз захватывают власть над кыргызами.", - "durationMs": 3000, - "waitForConfirm": false, - "luaCallback": "" - }, - { - "speaker": "Аида Дженибековна", - "text": "Чтобы спасти раненого богатыря Семетея, фея Кёкмончок с помощью заклинания уводит его в иной мир.", - "durationMs": 3000, - "waitForConfirm": false, - "luaCallback": "" - }, - { - "speaker": "Аида Дженибековна", - "text": "Этот мир описан в эпосе Манас как Кайып или Аль-Гайб, но некоторые ученые называют его миром теней.", - "durationMs": 3000, - "waitForConfirm": false, - "luaCallback": "" - }, - { - "speaker": "Аида Дженибековна", - "text": "В этом мире обитают феи, духи и джинны. Простым смертным в этот мир дорога закрыта.", - "durationMs": 3000, - "waitForConfirm": false, - "luaCallback": "" - }, - { - "speaker": "Аида Дженибековна", - "text": "Время там течет по другому - за один день в теневом мире могут пройти годы жизни обычного мира.", - "durationMs": 3000, - "waitForConfirm": false, - "luaCallback": "" - }, - { - "speaker": "Аида Дженибековна", - "text": "Обычно, мир теней никак не пересекается с нашим миром живых людей.", - "durationMs": 3000, - "waitForConfirm": false, - "luaCallback": "" - }, - { - "speaker": "", - "text": "Но в критические моменты для народа, обитатели теневого мира могут приходить в наш мир.", - "durationMs": 3000, - "waitForConfirm": false, - "luaCallback": "" - }, - { - "speaker": "Аида Дженибековна", - "text": "Совсем недавно закончилась пандемия, а сегодня мир захлестнули кровавые войны.", - "durationMs": 3000, - "waitForConfirm": false, - "luaCallback": "" - }, - { - "speaker": "Аида Дженибековна", - "text": "В такие кризисные моменты истории, грань между мирами становится особенно тонкой.", - "durationMs": 3000, - "waitForConfirm": false, - "luaCallback": "" - }, - { - "speaker": "Аида Дженибековна", - "text": "На сегодня лекция завершена. Все свободны! Задания на этот модуль вы получите индивидуально!", - "durationMs": 3000, - "waitForConfirm": false, - "luaCallback": "" - } - ] - } - ] -} \ No newline at end of file diff --git a/resources/dialogue/cutscenes003.json b/resources/dialogue/cutscenes003.json deleted file mode 100644 index 6adf8c4..0000000 --- a/resources/dialogue/cutscenes003.json +++ /dev/null @@ -1,415 +0,0 @@ -{ - "cutscenes": [ - { - "id": "lection_cutscene001", - "skippable": true, - "durationMs": 37000, - "fadeOutMs": 500, - "fadeInMs": 500, - "endFadeOutMs": 0, - "endFadeInMs": 2000, - "onFadeInCallback": "", - "imageSegments": [ - { - "path": "resources/black.png", - "width": 1280, - "height": 720, - "startMs": 0, - "endMs": 37052, - "fadeInMs": 0, - "fadeOutMs": 0, - "easing": "Linear", - "from": { - "centerX": 0.5, - "centerY": 0.5, - "scale": 1 - }, - "to": { - "centerX": 0.5, - "centerY": 0.5, - "scale": 1 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_wall_x.png", - "width": 1280, - "height": 720, - "startMs": 0, - "endMs": 6133, - "fadeInMs": 0, - "fadeOutMs": 2000, - "easing": "EaseOutCubic", - "from": { - "centerX": 0.51, - "centerY": 0.5, - "scale": 1.2 - }, - "to": { - "centerX": 0.58, - "centerY": 0.5, - "scale": 1.15 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_aida1_x.png", - "width": 1280, - "height": 720, - "startMs": 0, - "endMs": 6150, - "fadeInMs": 0, - "fadeOutMs": 2000, - "easing": "EaseOutCubic", - "from": { - "centerX": 0.52, - "centerY": 0.5, - "scale": 1.2 - }, - "to": { - "centerX": 0.575, - "centerY": 0.5, - "scale": 1.15 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_heads_x.png", - "width": 1280, - "height": 720, - "startMs": 0, - "endMs": 6167, - "fadeInMs": 0, - "fadeOutMs": 2000, - "easing": "EaseOutCubic", - "from": { - "centerX": 0.56, - "centerY": 0.36, - "scale": 1.3 - }, - "to": { - "centerX": 0.5, - "centerY": 0.37, - "scale": 1.4 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_wall_x.png", - "width": 1280, - "height": 720, - "startMs": 6000, - "endMs": 15100, - "fadeInMs": 1000, - "fadeOutMs": 1000, - "easing": "Linear", - "from": { - "centerX": 0.56, - "centerY": 0.5, - "scale": 1.2 - }, - "to": { - "centerX": 0.5, - "centerY": 0.5, - "scale": 1.1 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_aida3_x.png", - "width": 1280, - "height": 720, - "startMs": 6050, - "endMs": 15166, - "fadeInMs": 1100, - "fadeOutMs": 1000, - "easing": "Linear", - "from": { - "centerX": 0.52, - "centerY": 0.5, - "scale": 1.2 - }, - "to": { - "centerX": 0.5, - "centerY": 0.5, - "scale": 1.1 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_heads_x.png", - "width": 1280, - "height": 720, - "startMs": 6066, - "endMs": 15083, - "fadeInMs": 1000, - "fadeOutMs": 1000, - "easing": "Linear", - "from": { - "centerX": 0.5, - "centerY": 0.3, - "scale": 1.3 - }, - "to": { - "centerX": 0.58, - "centerY": 0.3, - "scale": 1.2 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_wall_x.png", - "width": 1280, - "height": 720, - "startMs": 14436, - "endMs": 21470, - "fadeInMs": 1000, - "fadeOutMs": 1000, - "easing": "Linear", - "from": { - "centerX": 0.59, - "centerY": 0.5, - "scale": 1.3 - }, - "to": { - "centerX": 0.49, - "centerY": 0.5, - "scale": 1.2 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_aida2_x.png", - "width": 1280, - "height": 720, - "startMs": 15348, - "endMs": 21481, - "fadeInMs": 1000, - "fadeOutMs": 1000, - "easing": "Linear", - "from": { - "centerX": 0.53, - "centerY": 0.5, - "scale": 1.3 - }, - "to": { - "centerX": 0.49, - "centerY": 0.5, - "scale": 1.2 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_heads_x.png", - "width": 1280, - "height": 720, - "startMs": 15388, - "endMs": 21587, - "fadeInMs": 1000, - "fadeOutMs": 1000, - "easing": "Linear", - "from": { - "centerX": 0.45, - "centerY": 0.2, - "scale": 1.3 - }, - "to": { - "centerX": 0.6, - "centerY": 0.2, - "scale": 1.26 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_wall_x.png", - "width": 1280, - "height": 720, - "startMs": 26588, - "endMs": 32621, - "fadeInMs": 500, - "fadeOutMs": 500, - "easing": "Linear", - "from": { - "centerX": 0.64, - "centerY": 0.7, - "scale": 2 - }, - "to": { - "centerX": 0.5, - "centerY": 0.7, - "scale": 2 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_aida3_x.png", - "width": 1280, - "height": 720, - "startMs": 26637, - "endMs": 32621, - "fadeInMs": 500, - "fadeOutMs": 500, - "easing": "Linear", - "from": { - "centerX": 0.63, - "centerY": 0.7, - "scale": 2 - }, - "to": { - "centerX": 0.51, - "centerY": 0.7, - "scale": 2 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_wall_x.png", - "width": 1280, - "height": 720, - "startMs": 20744, - "endMs": 26861, - "fadeInMs": 1000, - "fadeOutMs": 700, - "easing": "EaseOutSine", - "from": { - "centerX": 0.25, - "centerY": 0.8, - "scale": 2.3 - }, - "to": { - "centerX": 0.3, - "centerY": 0.8, - "scale": 2.3 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_wall_x.png", - "width": 1280, - "height": 720, - "startMs": 32546, - "endMs": 36229, - "fadeInMs": 500, - "fadeOutMs": 1000, - "easing": "Linear", - "from": { - "centerX": 0.45, - "centerY": 0.5, - "scale": 1.1 - }, - "to": { - "centerX": 0.5, - "centerY": 0.5, - "scale": 1 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_aida2_x.png", - "width": 1280, - "height": 720, - "startMs": 32542, - "endMs": 35675, - "fadeInMs": 500, - "fadeOutMs": 1000, - "easing": "Linear", - "from": { - "centerX": 0.43, - "centerY": 0.5, - "scale": 1.1 - }, - "to": { - "centerX": 0.5, - "centerY": 0.5, - "scale": 1 - } - }, - { - "path": "resources/w/cutscenes/cutscene1/cutscene1_heads_x.png", - "width": 1280, - "height": 720, - "startMs": 32497, - "endMs": 35580, - "fadeInMs": 0, - "fadeOutMs": 1000, - "easing": "Linear", - "from": { - "centerX": 0.5, - "centerY": 0.35, - "scale": 1.2 - }, - "to": { - "centerX": 0.5, - "centerY": 0.4, - "scale": 1.2 - } - } - ], - "lines": [ - { - "speaker": "Аида Дженибековна", - "text": "Опаздывающие, заходите скорее и занимайте свои места! Лекция начинается!", - "durationMs": 4000, - "waitForConfirm": false, - "luaCallback": "" - }, - { - "speaker": "Аида Дженибековна", - "text": "В эпизоде \"Семетей\" трилогии \"Манас\", изменники Канчоро и Кыяз захватывают власть над кыргызами.", - "durationMs": 3200, - "waitForConfirm": false, - "luaCallback": "" - }, - { - "speaker": "Аида Дженибековна", - "text": "Чтобы спасти раненого богатыря Семетея, фея Кёкмончок с помощью заклинания уводит его в иной мир.", - "durationMs": 3201, - "waitForConfirm": false, - "luaCallback": "" - }, - { - "speaker": "Аида Дженибековна", - "text": "Этот мир описан в эпосе Манас как Кайып или Аль-Гайб, но некоторые ученые называют его миром теней.", - "durationMs": 3202, - "waitForConfirm": false, - "luaCallback": "" - }, - { - "speaker": "Аида Дженибековна", - "text": "В этом мире обитают феи, духи и джинны. Простым смертным в этот мир дорога закрыта.", - "durationMs": 3200, - "waitForConfirm": false, - "luaCallback": "" - }, - { - "speaker": "Аида Дженибековна", - "text": "Время там течет по другому - за один день в теневом мире могут пройти годы жизни обычного мира.", - "durationMs": 3200, - "waitForConfirm": false, - "luaCallback": "" - }, - { - "speaker": "Аида Дженибековна", - "text": "Обычно, мир теней никак не пересекается с нашим миром живых людей.", - "durationMs": 3200, - "waitForConfirm": false, - "luaCallback": "" - }, - { - "speaker": "Аида Дженибековна", - "text": "Но в критические моменты для народа, обитатели теневого мира могут приходить в наш мир.", - "durationMs": 3200, - "waitForConfirm": false, - "luaCallback": "" - }, - { - "speaker": "Аида Дженибековна", - "text": "Совсем недавно закончилась пандемия, а сегодня мир захлестнули кровавые войны.", - "durationMs": 3200, - "waitForConfirm": false, - "luaCallback": "" - }, - { - "speaker": "Аида Дженибековна", - "text": "В такие кризисные моменты истории, грань между мирами становится особенно тонкой.", - "durationMs": 3200, - "waitForConfirm": false, - "luaCallback": "" - }, - { - "speaker": "Аида Дженибековна", - "text": "На сегодня лекция завершена. Все свободны! Задания на этот модуль вы получите индивидуально!", - "durationMs": 4000, - "waitForConfirm": false, - "luaCallback": "" - } - ] - } - ] -} \ No newline at end of file diff --git a/resources/dialogue/cutscenes004.json b/resources/dialogue/cutscenes005.json similarity index 98% rename from resources/dialogue/cutscenes004.json rename to resources/dialogue/cutscenes005.json index a62ca23..7cfd8c8 100644 --- a/resources/dialogue/cutscenes004.json +++ b/resources/dialogue/cutscenes005.json @@ -38,7 +38,7 @@ "endMs": 6133, "fadeInMs": 0, "fadeOutMs": 2000, - "easing": "EaseOutCubic", + "easing": "Linear", "from": { "centerX": 0.51, "centerY": 0.5, @@ -58,7 +58,7 @@ "endMs": 6150, "fadeInMs": 0, "fadeOutMs": 2000, - "easing": "EaseOutCubic", + "easing": "Linear", "from": { "centerX": 0.52, "centerY": 0.5, @@ -78,7 +78,7 @@ "endMs": 6167, "fadeInMs": 0, "fadeOutMs": 2000, - "easing": "EaseOutCubic", + "easing": "Linear", "from": { "centerX": 0.56, "centerY": 0.36, @@ -452,12 +452,12 @@ "easing": "Linear", "from": { "centerX": 0.5, - "centerY": 0.5, + "centerY": 0.55, "scale": 1 }, "to": { "centerX": 0.5, - "centerY": 0.5, + "centerY": 0.55, "scale": 1.1 } }, @@ -472,12 +472,12 @@ "easing": "Linear", "from": { "centerX": 0.5, - "centerY": 0.7, + "centerY": 0.6, "scale": 1.3 }, "to": { "centerX": 0.5, - "centerY": 0.7, + "centerY": 0.6, "scale": 1.5 } }, @@ -492,12 +492,12 @@ "easing": "Linear", "from": { "centerX": 0.5, - "centerY": 0.5, + "centerY": 0.35, "scale": 1 }, "to": { "centerX": 0.5, - "centerY": 0.5, + "centerY": 0.35, "scale": 1 } }, @@ -512,12 +512,12 @@ "easing": "Linear", "from": { "centerX": 0.5, - "centerY": 0.5, + "centerY": 0.6, "scale": 1 }, "to": { "centerX": 0.5, - "centerY": 0.5, + "centerY": 0.6, "scale": 1 } } diff --git a/resources/dialogue/dorm_dialogues.json b/resources/dialogue/dorm_dialogues.json index bd1d599..82db8c6 100644 --- a/resources/dialogue/dorm_dialogues.json +++ b/resources/dialogue/dorm_dialogues.json @@ -1,710 +1,761 @@ { - "dialogues": [ - { - "id": "dialog_start001", - "start": "line_1", - "nodes": [ + "dialogues": [ { - "id": "line_1", - "type": "Line", - "speaker": "Бекзат", - "portrait": "resources/dialogue/portrait_hero_neutral.png", - "text": "Новый день! Я проснулся, позавтракал и готов поехать в универ! Надо проверить телефон, и не забыть взять свою записную книжку.", - "next": "end_1" + "id": "dialog_start001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Новый день! Я проснулся, позавтракал и готов поехать в универ! Надо проверить телефон, и не забыть взять свою записную книжку.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] }, { - "id": "end_1", - "type": "End" + "id": "dialog_phone001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Я не буду никуда идти без своего телефона и записной книжки!", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "dialog_chat_parents001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Отец", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Бекзат, сынок, мы c мамой тебе отправили немного денег, постарайся прожить на эти деньги до конца недели!", + "next": "line_2", + "chatBubble": "in" + }, + { + "id": "line_2", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Спасибо!", + "next": "end_1", + "chatBubble": "out" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "dialog_chat_news001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Отец", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Жители Бишкека все чаще жалуются на депрессию и апатию. Смотрите свежее видео об этом на нашем канале!", + "next": "end_1", + "chatBubble": "in" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "dialog_chat_aiperi001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Бекзат, помнишь мы скидывались на торт для Аиды Джаныбековой? Я тогда еще приносила скатерть, тарелки и нож для торта. И я до сих пор не получила назад ничего.", + "next": "line_2", + "chatBubble": "in" + }, + { + "id": "line_2", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Скатерть и тарелки вроде бы лежат в студзоне.", + "next": "line_3", + "chatBubble": "out" + }, + { + "id": "line_3", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "А нож?", + "next": "line_4", + "chatBubble": "in" + }, + { + "id": "line_4", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Нож, наверное, так и остался в учительской.", + "next": "line_5", + "chatBubble": "out" + }, + { + "id": "line_5", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "А давай не \"наверное\"?", + "next": "line_6", + "chatBubble": "in" + }, + { + "id": "line_6", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "А давай ты приедешь в универ, зайдешь в учительскую, заберешь нож и отдашь мне?", + "next": "line_7", + "chatBubble": "in" + }, + { + "id": "line_7", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "У вас сегодня как раз Аида ведет лекцию. После лекции попросишь у нее ключи от учительской и заберешь нож.", + "next": "line_8", + "chatBubble": "in" + }, + { + "id": "line_8", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Почему ты сама не можешь забрать?", + "next": "line_9", + "chatBubble": "out" + }, + { + "id": "line_9", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Ты же знаешь, если я встречу Аиду, она 100% даст мне какое-нибудь сложное задание.", + "next": "line_10", + "chatBubble": "in" + }, + { + "id": "line_10", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "И потом, это ты у меня брал нож, с чего я должна ходить искать его по всему универу?", + "next": "line_11", + "chatBubble": "in" + }, + { + "id": "line_11", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Так что жду тебя в универе! Не вздумай прогулять!", + "next": "setflag_1", + "chatBubble": "in", + "questUnlock": "aiperi_knife" + }, + { + "id": "setflag_1", + "type": "SetFlag", + "effects": [ + { + "flag": "aiperi_knife_aware", + "value": 1 + } + ], + "next": "end_1" + }, + { + "id": "end_1", + "luaCallback": "on_aiperi_dialog_over", + "type": "End" + } + ] + }, + { + "id": "dialog_chat_aiperi002", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Бекзат, ты где? Я жду тебя возле лестницы.", + "next": "end_1", + "chatBubble": "in" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "dialog_no_sleep001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Я сейчас не хочу спать.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "dialog_phone_pickup001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Отлично, вот и мой телефон! Надо проверить новые сообщения.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "door_bathroom_dialog001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Здесь у меня душ и туалет.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "door_bathroom_alik_dialog001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Я не буду лезть в ванную комнату к Алику.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "door_locked_dialog001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Дверь закрыта. Кажется, сюда все еще никто не заселился.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "dialog_journal_pickup001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Возьму журнал с собой! Там все мои записи.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "dialog_taxi001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Прежде чем выходить наружу, я должен заказать такси до универа.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "dialog_taxi002", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Я заказал такси до универа, машина уже ждет!", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "dialog_taxi004", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Я уже заказал такси, машина уже ждет!", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "dialog_second_floor001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "На втором этаже женское общежитие, мне там делать нечего.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "dialog_female_student001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бермет", + "portrait": "resources/dialogue/portrait_student_girl.png", + "text": "Бекзат отстань!", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "dialog_female_student002", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Алтынай", + "portrait": "resources/dialogue/portrait_student_girl.png", + "text": "Бекзат ты почему на пары не ходишь?!", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "dialog_alik001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Алик", + "portrait": "resources/dialogue/portrait_student_boy.png", + "text": "Привет Бекзат! Давно я не видел тебя на парах!", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "door_alik_dialog001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Тук тук!", + "next": "line_2" + }, + { + "id": "line_2", + "type": "Line", + "speaker": "Алик", + "portrait": "resources/dialogue/portrait_student_boy.png", + "text": "Заходи!", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "dialog_alik002", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Алик", + "portrait": "resources/dialogue/portrait_student_boy.png", + "text": "Привет Бекзат!", + "next": "line_2" + }, + { + "id": "line_2", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Привет Алик! Разговор есть.", + "next": "line_3" + }, + { + "id": "line_3", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "С тобой на курсе училась Бегимай, ты ее помнишь?", + "next": "line_4" + }, + { + "id": "line_4", + "type": "Line", + "speaker": "Алик", + "portrait": "resources/dialogue/portrait_student_boy.png", + "text": "Конечно помню! Я тебе даже больше расскажу.", + "next": "line_5" + }, + { + "id": "line_5", + "type": "Line", + "speaker": "Алик", + "portrait": "resources/dialogue/portrait_student_boy.png", + "text": "В тот день она принесла свою курсовую, чтобы сдать.", + "next": "line_6" + }, + { + "id": "line_6", + "type": "Line", + "speaker": "Алик", + "portrait": "resources/dialogue/portrait_student_boy.png", + "text": "Но в тот день в учительской происходила генеральная уборка.", + "next": "line_7" + }, + { + "id": "line_7", + "type": "Line", + "speaker": "Алик", + "portrait": "resources/dialogue/portrait_student_boy.png", + "text": "И получилось так, что ее курсовая оказалась в стопке бумаг на выброс.", + "next": "line_8" + }, + { + "id": "line_8", + "type": "Line", + "speaker": "Алик", + "portrait": "resources/dialogue/portrait_student_boy.png", + "text": "Курсовая работа пропала, Бегимай получила за нее ноль баллов, и не прошла отбор в Германию.", + "next": "line_9" + }, + { + "id": "line_9", + "type": "Line", + "speaker": "Алик", + "portrait": "resources/dialogue/portrait_student_boy.png", + "text": "Поэтому с горя она выпрыгнула из окна лекционного зала и убилась.", + "next": "line_10" + }, + { + "id": "line_10", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "А ты откуда все это знаешь?", + "next": "line_11" + }, + { + "id": "line_11", + "type": "Line", + "speaker": "Алик", + "portrait": "resources/dialogue/portrait_student_boy.png", + "text": "Я видел как ее курсовую уносили вместе с другой макулатурой из учительской.", + "next": "line_12" + }, + { + "id": "line_12", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "И где сейчас ее курсовая работа?", + "next": "line_13" + }, + { + "id": "line_13", + "type": "Line", + "speaker": "Алик", + "portrait": "resources/dialogue/portrait_student_boy.png", + "text": "За зданием универа есть контейнер с кучей бумажного мусора и макулатурой.", + "next": "line_14" + }, + { + "id": "line_14", + "type": "Line", + "speaker": "Алик", + "portrait": "resources/dialogue/portrait_student_boy.png", + "text": "Скорее всего, курсовая до сих пор лежит где-то там.", + "next": "line_15" + }, + { + "id": "line_15", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Спасибо Алик! Ты мне очень помог.", + "next": "line_16" + }, + { + "id": "line_16", + "type": "Line", + "speaker": "Алик", + "portrait": "resources/dialogue/portrait_student_boy.png", + "text": "Да без проблем! Обращайся если что.", + "objectiveComplete": "ghost_lore.ghost_lore_alik", + "objectiveVisible": "ghost_lore.ghost_lore_alik", + "questUnlock": "ghost_coursework", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "dialog_alik003", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Алик", + "portrait": "resources/dialogue/portrait_student_boy.png", + "text": "Привет Бекзат! Надеюсь ты нашел то что ищешь.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "dialog_video001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Ого, пока я залипал в телефоне, уже наступила ночь!", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "dialog_video002", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Я не буду сейчас смотреть видеоролики, давай лучше пойдем спать.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "dialog_video003", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Мне некогда деградировать сегодня, у меня много дел!", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] } - ] - }, - { - "id": "dialog_phone001", - "start": "line_1", - "nodes": [ + ], + "cutscenes": [ { - "id": "line_1", - "type": "Line", - "speaker": "Бекзат", - "portrait": "resources/dialogue/portrait_hero_neutral.png", - "text": "Я не буду никуда идти без своего телефона и записной книжки!", - "next": "end_1" - }, - { - "id": "end_1", - "type": "End" + "id": "sleep_cutscene001", + "background": "resources/test_cutscene001.png", + "onFadeInCallback": "on_sleep_cutscene", + "durationMs": 5000, + "fadeOutMs": 500, + "fadeInMs": 500, + "endFadeOutMs": 500, + "endFadeInMs": 500, + "cameraTrack": [ + { + "durationMs": 3000, + "from": { + "focusX": 0.3, + "focusY": 0.5, + "zoom": 1.1, + "rotationDeg": 0.0 + }, + "to": { + "focusX": 0.7, + "focusY": 0.5, + "zoom": 1.0, + "rotationDeg": 0.0 + }, + "easing": "EaseInOutSine" + }, + { + "durationMs": 3000, + "from": { + "focusX": 0.3, + "focusY": 0.5, + "zoom": 1.0, + "rotationDeg": 0.0 + }, + "to": { + "focusX": 0.7, + "focusY": 0.5, + "zoom": 1.1, + "rotationDeg": 0.0 + }, + "easing": "EaseInOutCubic" + } + ], + "lines": [ + { + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Я завалился спать и уснул.", + "durationMs": 3000 + }, + { + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "И я проспал аж до обеда.", + "durationMs": 3000 + } + ] } - ] - }, - { - "id": "dialog_chat_parents001", - "start": "line_1", - "nodes": [ - { - "id": "line_1", - "type": "Line", - "speaker": "Отец", - "portrait": "resources/dialogue/portrait_phone.png", - "text": "Бекзат, сынок, мы c мамой тебе отправили немного денег, постарайся прожить на эти деньги до конца недели!", - "next": "line_2", - "chatBubble": "in" - }, - { - "id": "line_2", - "type": "Line", - "speaker": "Бекзат", - "portrait": "resources/dialogue/portrait_phone.png", - "text": "Спасибо!", - "next": "end_1", - "chatBubble": "out" - }, - { - "id": "end_1", - "type": "End" - } - ] - }, - { - "id": "dialog_chat_news001", - "start": "line_1", - "nodes": [ - { - "id": "line_1", - "type": "Line", - "speaker": "Отец", - "portrait": "resources/dialogue/portrait_phone.png", - "text": "Жители Бишкека все чаще жалуются на депрессию и апатию. Смотрите свежее видео об этом на нашем канале!", - "next": "end_1", - "chatBubble": "in" - }, - { - "id": "end_1", - "type": "End" - } - ] - }, - { - "id": "dialog_chat_aiperi001", - "start": "line_1", - "nodes": [ - { - "id": "line_1", - "type": "Line", - "speaker": "Айпери", - "portrait": "resources/dialogue/portrait_phone.png", - "text": "Бекзат, помнишь мы скидывались на торт для Аиды Джаныбековой? Я тогда еще приносила скатерть, тарелки и нож для торта. И я до сих пор не получила назад ничего.", - "next": "line_2", - "chatBubble": "in" - }, - { - "id": "line_2", - "type": "Line", - "speaker": "Бекзат", - "portrait": "resources/dialogue/portrait_phone.png", - "text": "Скатерть и тарелки вроде бы лежат в студзоне.", - "next": "line_3", - "chatBubble": "out" - }, - { - "id": "line_3", - "type": "Line", - "speaker": "Айпери", - "portrait": "resources/dialogue/portrait_phone.png", - "text": "А нож?", - "next": "line_4", - "chatBubble": "in" - }, - { - "id": "line_4", - "type": "Line", - "speaker": "Бекзат", - "portrait": "resources/dialogue/portrait_phone.png", - "text": "Нож, наверное, так и остался в учительской.", - "next": "line_5", - "chatBubble": "out" - }, - { - "id": "line_5", - "type": "Line", - "speaker": "Айпери", - "portrait": "resources/dialogue/portrait_phone.png", - "text": "А давай не \"наверное\"?", - "next": "line_6", - "chatBubble": "in" - }, - { - "id": "line_6", - "type": "Line", - "speaker": "Айпери", - "portrait": "resources/dialogue/portrait_phone.png", - "text": "А давай ты приедешь в универ, зайдешь в учительскую, заберешь нож и отдашь мне?", - "next": "line_7", - "chatBubble": "in" - }, - { - "id": "line_7", - "type": "Line", - "speaker": "Айпери", - "portrait": "resources/dialogue/portrait_phone.png", - "text": "У вас сегодня как раз Аида ведет лекцию. После лекции попросишь у нее ключи от учительской и заберешь нож.", - "next": "line_8", - "chatBubble": "in" - }, - { - "id": "line_8", - "type": "Line", - "speaker": "Бекзат", - "portrait": "resources/dialogue/portrait_phone.png", - "text": "Почему ты сама не можешь забрать?", - "next": "line_9", - "chatBubble": "out" - }, - { - "id": "line_9", - "type": "Line", - "speaker": "Айпери", - "portrait": "resources/dialogue/portrait_phone.png", - "text": "Ты же знаешь, если я встречу Аиду, она 100% даст мне какое-нибудь сложное задание.", - "next": "line_10", - "chatBubble": "in" - }, - { - "id": "line_10", - "type": "Line", - "speaker": "Айпери", - "portrait": "resources/dialogue/portrait_phone.png", - "text": "И потом, это ты у меня брал нож, с чего я должна ходить искать его по всему универу?", - "next": "line_11", - "chatBubble": "in" - }, - { - "id": "line_11", - "type": "Line", - "speaker": "Айпери", - "portrait": "resources/dialogue/portrait_phone.png", - "text": "Так что жду тебя в универе! Не вздумай прогулять!", - "next": "end_1", - "chatBubble": "in", - "questUnlock" : "aiperi_knife" - }, - { - "id": "end_1", - "luaCallback" : "on_aiperi_dialog_over", - "type": "End" - } - ] - }, - { - "id": "dialog_no_sleep001", - "start": "line_1", - "nodes": [ - { - "id": "line_1", - "type": "Line", - "speaker": "Бекзат", - "portrait": "resources/dialogue/portrait_hero_neutral.png", - "text": "Я сейчас не хочу спать.", - "next": "end_1" - }, - { - "id": "end_1", - "type": "End" - } - ] - }, - { - "id": "dialog_phone_pickup001", - "start": "line_1", - "nodes": [ - { - "id": "line_1", - "type": "Line", - "speaker": "Бекзат", - "portrait": "resources/dialogue/portrait_hero_neutral.png", - "text": "Отлично, вот и мой телефон! Надо проверить новые сообщения.", - "next": "end_1" - }, - { - "id": "end_1", - "type": "End" - } - ] - }, - { - "id": "door_bathroom_dialog001", - "start": "line_1", - "nodes": [ - { - "id": "line_1", - "type": "Line", - "speaker": "Бекзат", - "portrait": "resources/dialogue/portrait_hero_neutral.png", - "text": "Здесь у меня душ и туалет.", - "next": "end_1" - }, - { - "id": "end_1", - "type": "End" - } - ] - }, - { - "id": "door_bathroom_alik_dialog001", - "start": "line_1", - "nodes": [ - { - "id": "line_1", - "type": "Line", - "speaker": "Бекзат", - "portrait": "resources/dialogue/portrait_hero_neutral.png", - "text": "Я не буду лезть в ванную комнату к Алику.", - "next": "end_1" - }, - { - "id": "end_1", - "type": "End" - } - ] - }, - { - "id": "door_locked_dialog001", - "start": "line_1", - "nodes": [ - { - "id": "line_1", - "type": "Line", - "speaker": "Бекзат", - "portrait": "resources/dialogue/portrait_hero_neutral.png", - "text": "Дверь закрыта. Кажется, сюда все еще никто не заселился.", - "next": "end_1" - }, - { - "id": "end_1", - "type": "End" - } - ] - }, - { - "id": "dialog_journal_pickup001", - "start": "line_1", - "nodes": [ - { - "id": "line_1", - "type": "Line", - "speaker": "Бекзат", - "portrait": "resources/dialogue/portrait_hero_neutral.png", - "text": "Возьму журнал с собой! Там все мои записи.", - "next": "end_1" - }, - { - "id": "end_1", - "type": "End" - } - ] - }, - { - "id": "dialog_taxi001", - "start": "line_1", - "nodes": [ - { - "id": "line_1", - "type": "Line", - "speaker": "Бекзат", - "portrait": "resources/dialogue/portrait_hero_neutral.png", - "text": "Прежде чем выходить наружу, я должен заказать такси до универа.", - "next": "end_1" - }, - { - "id": "end_1", - "type": "End" - } - ] - }, - { - "id": "dialog_taxi002", - "start": "line_1", - "nodes": [ - { - "id": "line_1", - "type": "Line", - "speaker": "Бекзат", - "portrait": "resources/dialogue/portrait_hero_neutral.png", - "text": "Я заказал такси до универа, машина уже ждет!", - "next": "end_1" - }, - { - "id": "end_1", - "type": "End" - } - ] - }, - { - "id": "dialog_taxi004", - "start": "line_1", - "nodes": [ - { - "id": "line_1", - "type": "Line", - "speaker": "Бекзат", - "portrait": "resources/dialogue/portrait_hero_neutral.png", - "text": "Я уже заказал такси, машина уже ждет!", - "next": "end_1" - }, - { - "id": "end_1", - "type": "End" - } - ] - }, - { - "id": "dialog_second_floor001", - "start": "line_1", - "nodes": [ - { - "id": "line_1", - "type": "Line", - "speaker": "Бекзат", - "portrait": "resources/dialogue/portrait_hero_neutral.png", - "text": "На втором этаже женское общежитие, мне там делать нечего.", - "next": "end_1" - }, - { - "id": "end_1", - "type": "End" - } - ] - }, - { - "id": "dialog_female_student001", - "start": "line_1", - "nodes": [ - { - "id": "line_1", - "type": "Line", - "speaker": "Бермет", - "portrait": "resources/dialogue/portrait_student_girl.png", - "text": "Бекзат отстань!", - "next": "end_1" - }, - { - "id": "end_1", - "type": "End" - } - ] - }, - { - "id": "dialog_female_student002", - "start": "line_1", - "nodes": [ - { - "id": "line_1", - "type": "Line", - "speaker": "Алтынай", - "portrait": "resources/dialogue/portrait_student_girl.png", - "text": "Бекзат ты почему на пары не ходишь?!", - "next": "end_1" - }, - { - "id": "end_1", - "type": "End" - } - ] - }, - { - "id": "dialog_alik001", - "start": "line_1", - "nodes": [ - { - "id": "line_1", - "type": "Line", - "speaker": "Алик", - "portrait": "resources/dialogue/portrait_student_boy.png", - "text": "Привет Бекзат! Давно я не видел тебя на парах!", - "next": "end_1" - }, - { - "id": "end_1", - "type": "End" - } - ] - }, - { - "id": "door_alik_dialog001", - "start": "line_1", - "nodes": [ - { - "id": "line_1", - "type": "Line", - "speaker": "Бекзат", - "portrait": "resources/dialogue/portrait_hero_neutral.png", - "text": "Тук тук!", - "next": "line_2" - }, - { - "id": "line_2", - "type": "Line", - "speaker": "Алик", - "portrait": "resources/dialogue/portrait_student_boy.png", - "text": "Заходи!", - "next": "end_1" - }, - { - "id": "end_1", - "type": "End" - } - ] - }, - { - "id": "dialog_alik002", - "start": "line_1", - "nodes": [ - { - "id": "line_1", - "type": "Line", - "speaker": "Алик", - "portrait": "resources/dialogue/portrait_student_boy.png", - "text": "Привет Бекзат!", - "next": "line_2" - }, - { - "id": "line_2", - "type": "Line", - "speaker": "Бекзат", - "portrait": "resources/dialogue/portrait_hero_neutral.png", - "text": "Привет Алик! Разговор есть.", - "next": "line_3" - }, - { - "id": "line_3", - "type": "Line", - "speaker": "Бекзат", - "portrait": "resources/dialogue/portrait_hero_neutral.png", - "text": "С тобой на курсе училась Бегимай, ты ее помнишь?", - "next": "line_4" - }, - { - "id": "line_4", - "type": "Line", - "speaker": "Алик", - "portrait": "resources/dialogue/portrait_student_boy.png", - "text": "Конечно помню! Я тебе даже больше расскажу.", - "next": "line_5" - }, - { - "id": "line_5", - "type": "Line", - "speaker": "Алик", - "portrait": "resources/dialogue/portrait_student_boy.png", - "text": "В тот день она принесла свою курсовую, чтобы сдать.", - "next": "line_6" - }, - { - "id": "line_6", - "type": "Line", - "speaker": "Алик", - "portrait": "resources/dialogue/portrait_student_boy.png", - "text": "Но в тот день в учительской происходила генеральная уборка.", - "next": "line_7" - }, - { - "id": "line_7", - "type": "Line", - "speaker": "Алик", - "portrait": "resources/dialogue/portrait_student_boy.png", - "text": "И получилось так, что ее курсовая оказалась в стопке бумаг на выброс.", - "next": "line_8" - }, - { - "id": "line_8", - "type": "Line", - "speaker": "Алик", - "portrait": "resources/dialogue/portrait_student_boy.png", - "text": "Курсовая работа пропала, Бегимай получила за нее ноль баллов, и не прошла отбор в Германию.", - "next": "line_9" - }, - { - "id": "line_9", - "type": "Line", - "speaker": "Алик", - "portrait": "resources/dialogue/portrait_student_boy.png", - "text": "Поэтому с горя она выпрыгнула из окна лекционного зала и убилась.", - "next": "line_10" - }, - { - "id": "line_10", - "type": "Line", - "speaker": "Бекзат", - "portrait": "resources/dialogue/portrait_hero_neutral.png", - "text": "А ты откуда все это знаешь?", - "next": "line_11" - }, - { - "id": "line_11", - "type": "Line", - "speaker": "Алик", - "portrait": "resources/dialogue/portrait_student_boy.png", - "text": "Я видел как ее курсовую уносили вместе с другой макулатурой из учительской.", - "next": "line_12" - }, - { - "id": "line_12", - "type": "Line", - "speaker": "Бекзат", - "portrait": "resources/dialogue/portrait_hero_neutral.png", - "text": "И где сейчас ее курсовая работа?", - "next": "line_13" - }, - { - "id": "line_13", - "type": "Line", - "speaker": "Алик", - "portrait": "resources/dialogue/portrait_student_boy.png", - "text": "За зданием универа есть контейнер с кучей бумажного мусора и макулатурой.", - "next": "line_14" - }, - { - "id": "line_14", - "type": "Line", - "speaker": "Алик", - "portrait": "resources/dialogue/portrait_student_boy.png", - "text": "Скорее всего, курсовая до сих пор лежит где-то там.", - "next": "line_15" - }, - { - "id": "line_15", - "type": "Line", - "speaker": "Бекзат", - "portrait": "resources/dialogue/portrait_hero_neutral.png", - "text": "Спасибо Алик! Ты мне очень помог.", - "next": "line_16" - }, - { - "id": "line_16", - "type": "Line", - "speaker": "Алик", - "portrait": "resources/dialogue/portrait_student_boy.png", - "text": "Да без проблем! Обращайся если что.", - "objectiveComplete" : "ghost_lore.ghost_lore_alik", - "objectiveVisible": "ghost_lore.ghost_lore_alik", - "questUnlock": "ghost_coursework", - "next": "end_1" - }, - { - "id": "end_1", - "type": "End" - } - ] - }, - { - "id": "dialog_alik003", - "start": "line_1", - "nodes": [ - { - "id": "line_1", - "type": "Line", - "speaker": "Алик", - "portrait": "resources/dialogue/portrait_student_boy.png", - "text": "Привет Бекзат! Надеюсь ты нашел то что ищешь.", - "next": "end_1" - }, - { - "id": "end_1", - "type": "End" - } - ] - }, - { - "id": "dialog_video001", - "start": "line_1", - "nodes": [ - { - "id": "line_1", - "type": "Line", - "speaker": "Бекзат", - "portrait": "resources/dialogue/portrait_hero_neutral.png", - "text": "Ого, пока я залипал в телефоне, уже наступила ночь!", - "next": "end_1" - }, - { - "id": "end_1", - "type": "End" - } - ] - }, - { - "id": "dialog_video002", - "start": "line_1", - "nodes": [ - { - "id": "line_1", - "type": "Line", - "speaker": "Бекзат", - "portrait": "resources/dialogue/portrait_hero_neutral.png", - "text": "Я не буду сейчас смотреть видеоролики, давай лучше пойдем спать.", - "next": "end_1" - }, - { - "id": "end_1", - "type": "End" - } - ] - }, - { - "id": "dialog_video003", - "start": "line_1", - "nodes": [ - { - "id": "line_1", - "type": "Line", - "speaker": "Бекзат", - "portrait": "resources/dialogue/portrait_hero_neutral.png", - "text": "Мне некогда деградировать сегодня, у меня много дел!", - "next": "end_1" - }, - { - "id": "end_1", - "type": "End" - } - ] - } - ], - "cutscenes": [{ - "id": "sleep_cutscene001", - "background": "resources/test_cutscene001.png", - "onFadeInCallback": "on_sleep_cutscene", - "durationMs": 5000, - "fadeOutMs": 500, - "fadeInMs": 500, - "endFadeOutMs": 500, - "endFadeInMs": 500, - "cameraTrack": [ - { - "durationMs": 3000, - "from": { "focusX": 0.3, "focusY": 0.50, "zoom": 1.10, "rotationDeg": 0.0 }, - "to": { "focusX": 0.7, "focusY": 0.50, "zoom": 1.00, "rotationDeg": 0.0 }, - "easing": "EaseInOutSine" - }, - { - "durationMs": 3000, - "from": { "focusX": 0.3, "focusY": 0.50, "zoom": 1.0, "rotationDeg": 0.0 }, - "to": { "focusX": 0.7, "focusY": 0.50, "zoom": 1.1, "rotationDeg": 0.0 }, - "easing": "EaseInOutCubic" - } - ], - "lines": [ - { - "speaker": "Бекзат", - "portrait": "resources/dialogue/portrait_hero_neutral.png", - "text": "Я завалился спать и уснул.", - "durationMs": 3000 - }, - { - "speaker": "Бекзат", - "portrait": "resources/dialogue/portrait_hero_neutral.png", - "text": "И я проспал аж до обеда.", - "durationMs": 3000 - } - ] - } - ] -} + ] +} \ No newline at end of file diff --git a/resources/dialogue/uni_exterior_dialogues.json b/resources/dialogue/uni_exterior_dialogues.json index f1d289f..e49b048 100644 --- a/resources/dialogue/uni_exterior_dialogues.json +++ b/resources/dialogue/uni_exterior_dialogues.json @@ -214,52 +214,194 @@ "type": "End" } ] - } - ], - "cutscenes": [ + }, { - "id": "darklands_exit001", - "background": "resources/test_cutscene001.png", - "durationMs": 5000, - "fadeOutMs": 500, - "fadeInMs": 500, - "endFadeOutMs": 500, - "endFadeInMs": 500, - "cameraTrack": [ + "id": "dialog_chat_parents001", + "start": "line_1", + "nodes": [ { - "durationMs": 3000, - "from": { "focusX": 0.3, "focusY": 0.50, "zoom": 1.10, "rotationDeg": 0.0 }, - "to": { "focusX": 0.7, "focusY": 0.50, "zoom": 1.00, "rotationDeg": 0.0 }, - "easing": "EaseInOutSine" - }, - { - "durationMs": 3000, - "from": { "focusX": 0.3, "focusY": 0.50, "zoom": 1.0, "rotationDeg": 0.0 }, - "to": { "focusX": 0.7, "focusY": 0.50, "zoom": 1.1, "rotationDeg": 0.0 }, - "easing": "EaseInOutCubic" - } - ], - "lines": [ - { - "speaker": "Бекзат", - "portrait": "resources/dialogue/portrait_hero_neutral.png", - "text": "Кажется, яркий свет луны разбудил меня от этого сна.", - "durationMs": 3000 - }, - { - "speaker": "Бекзат", - "portrait": "resources/dialogue/portrait_hero_neutral.png", - "text": "Жесть вообще, хочу спать.", - "durationMs": 3000 + "id": "line_1", + "type": "Line", + "speaker": "Отец", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Бекзат, сынок, мы c мамой тебе отправили немного денег, постарайся прожить на эти деньги до конца недели!", + "next": "line_2", + "chatBubble": "in" }, { + "id": "line_2", + "type": "Line", "speaker": "Бекзат", - "portrait": "rresources/dialogue/portrait_hero_neutral.png", - "text": "Который час?", - "durationMs": 2000, - "background": "resources/test_cutscene001.png" + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Спасибо!", + "next": "end_1", + "chatBubble": "out" + }, + { + "id": "end_1", + "type": "End" } ] - } + }, + { + "id": "dialog_chat_news001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Отец", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Жители Бишкека все чаще жалуются на депрессию и апатию. Смотрите свежее видео об этом на нашем канале!", + "next": "end_1", + "chatBubble": "in" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "dialog_chat_aiperi001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Бекзат, помнишь мы скидывались на торт для Аиды Джаныбековой? Я тогда еще приносила скатерть, тарелки и нож для торта. И я до сих пор не получила назад ничего.", + "next": "line_2", + "chatBubble": "in" + }, + { + "id": "line_2", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Скатерть и тарелки вроде бы лежат в студзоне.", + "next": "line_3", + "chatBubble": "out" + }, + { + "id": "line_3", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "А нож?", + "next": "line_4", + "chatBubble": "in" + }, + { + "id": "line_4", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Нож, наверное, так и остался в учительской.", + "next": "line_5", + "chatBubble": "out" + }, + { + "id": "line_5", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "А давай не \"наверное\"?", + "next": "line_6", + "chatBubble": "in" + }, + { + "id": "line_6", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "А давай ты приедешь в универ, зайдешь в учительскую, заберешь нож и отдашь мне?", + "next": "line_7", + "chatBubble": "in" + }, + { + "id": "line_7", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "У вас сегодня как раз Аида ведет лекцию. После лекции попросишь у нее ключи от учительской и заберешь нож.", + "next": "line_8", + "chatBubble": "in" + }, + { + "id": "line_8", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Почему ты сама не можешь забрать?", + "next": "line_9", + "chatBubble": "out" + }, + { + "id": "line_9", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Ты же знаешь, если я встречу Аиду, она 100% даст мне какое-нибудь сложное задание.", + "next": "line_10", + "chatBubble": "in" + }, + { + "id": "line_10", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "И потом, это ты у меня брал нож, с чего я должна ходить искать его по всему универу?", + "next": "line_11", + "chatBubble": "in" + }, + { + "id": "line_11", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Так что жду тебя в универе! Не вздумай прогулять!", + "next": "setflag_1", + "chatBubble": "in", + "questUnlock": "aiperi_knife" + }, + { + "id": "setflag_1", + "type": "SetFlag", + "effects": [ + { + "flag": "aiperi_knife_aware", + "value": 1 + } + ], + "next": "end_1" + }, + { + "id": "end_1", + "luaCallback": "on_aiperi_dialog_over", + "type": "End" + } + ] + }, + { + "id": "dialog_chat_aiperi002", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Бекзат, ты где? Я жду тебя возле лестницы.", + "next": "end_1", + "chatBubble": "in" + }, + { + "id": "end_1", + "type": "End" + } + ] +} ] } diff --git a/resources/dialogue/uni_interior_dialogues_004.json b/resources/dialogue/uni_interior_dialogues_004.json index 7637800..f456f94 100644 --- a/resources/dialogue/uni_interior_dialogues_004.json +++ b/resources/dialogue/uni_interior_dialogues_004.json @@ -1,6 +1,6 @@ { "dialogues": [ - { + { "id": "darklands_day_dialog001", "start": "line_1", "nodes": [ @@ -2039,6 +2039,297 @@ "next": "line_17" } ] + }, + { + "id": "dialog_chat_parents001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Отец", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Бекзат, сынок, мы c мамой тебе отправили немного денег, постарайся прожить на эти деньги до конца недели!", + "next": "line_2", + "chatBubble": "in" + }, + { + "id": "line_2", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Спасибо!", + "next": "end_1", + "chatBubble": "out" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "dialog_chat_news001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Отец", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Жители Бишкека все чаще жалуются на депрессию и апатию. Смотрите свежее видео об этом на нашем канале!", + "next": "end_1", + "chatBubble": "in" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "dialog_chat_aiperi001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Бекзат, помнишь мы скидывались на торт для Аиды Джаныбековой? Я тогда еще приносила скатерть, тарелки и нож для торта. И я до сих пор не получила назад ничего.", + "next": "line_2", + "chatBubble": "in" + }, + { + "id": "line_2", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Скатерть и тарелки вроде бы лежат в студзоне.", + "next": "line_3", + "chatBubble": "out" + }, + { + "id": "line_3", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "А нож?", + "next": "line_4", + "chatBubble": "in" + }, + { + "id": "line_4", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Нож, наверное, так и остался в учительской.", + "next": "line_5", + "chatBubble": "out" + }, + { + "id": "line_5", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "А давай не \"наверное\"?", + "next": "line_6", + "chatBubble": "in" + }, + { + "id": "line_6", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "А давай ты приедешь в универ, зайдешь в учительскую, заберешь нож и отдашь мне?", + "next": "line_7", + "chatBubble": "in" + }, + { + "id": "line_7", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "У вас сегодня как раз Аида ведет лекцию. После лекции попросишь у нее ключи от учительской и заберешь нож.", + "next": "line_8", + "chatBubble": "in" + }, + { + "id": "line_8", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Почему ты сама не можешь забрать?", + "next": "line_9", + "chatBubble": "out" + }, + { + "id": "line_9", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Ты же знаешь, если я встречу Аиду, она 100% даст мне какое-нибудь сложное задание.", + "next": "line_10", + "chatBubble": "in" + }, + { + "id": "line_10", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "И потом, это ты у меня брал нож, с чего я должна ходить искать его по всему универу?", + "next": "line_11", + "chatBubble": "in" + }, + { + "id": "line_11", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Так что жду тебя в универе! Не вздумай прогулять!", + "next": "setflag_1", + "chatBubble": "in", + "questUnlock": "aiperi_knife" + }, + { + "id": "setflag_1", + "type": "SetFlag", + "effects": [ + { + "flag": "aiperi_knife_aware", + "value": 1 + } + ], + "next": "end_1" + }, + { + "id": "end_1", + "luaCallback": "on_aiperi_dialog_over", + "type": "End" + } + ] + }, + { + "id": "dialog_chat_aiperi002", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Бекзат, ты где? Я жду тебя возле лестницы.", + "next": "end_1", + "chatBubble": "in" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "cancel_phone_night_aiperi001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Я не буду писать Айпери, она опять будет издеваться надо мной.", + "next": "line_2" + }, + { + "id": "line_2", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Я лучше прочитаю заклинание, перейду в теневой мир и так выберусь наружу.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "cancel_phone_morning_aiperi001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Я не буду беспокоить Айпери. Я могу выбраться из универа и без ее помощи.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "dialog_chat_aiperi003", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Айпери ты куда убежала?", + "next": "line_2" + }, + { + "id": "line_2", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "Ты достал уже, я не могу тебя ждать вечно! Возишься как сонная муха.", + "next": "line_3" + }, + { + "id": "line_3", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "У меня нет времени ждать тебя, мне уже пора на курсы ехать.", + "next": "line_4" + }, + { + "id": "line_4", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Так когда я тебе нож верну?", + "next": "line_5" + }, + { + "id": "line_5", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "Приходи завтра в универ! Я каждый день в унике с раннего утра.", + "next": "line_6" + }, + { + "id": "line_6", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Хорошо, встретимся завтра.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] } - ] + ], + "cutscenes": [] } \ No newline at end of file diff --git a/resources/dialogue/uni_interior_dialogues_005.json b/resources/dialogue/uni_interior_dialogues_005.json new file mode 100644 index 0000000..1c2d1f1 --- /dev/null +++ b/resources/dialogue/uni_interior_dialogues_005.json @@ -0,0 +1,2450 @@ +{ + "dialogues": [ + { + "id": "darklands_day_dialog001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Это заклинание не работает днем.", + "next": "line_2" + }, + { + "id": "line_2", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Чтобы перейти в теневой мир, мне нужно дождаться ночи.", + "next": "line_3" + }, + { + "id": "line_3", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Чтобы время пролетело быстро, я могу посидеть в телефоне и позалипать в короткие видео.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "darklands_morning_dialog001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "У меня силы закончились и мне спать хочется. Достаточно теневого мира на сегодня, поехали в общагу.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "knife_dialog001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "Ты куда собрался, Бекзат?", + "next": "condition_1" + }, + { + "id": "line_2", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "Вот тебе ключ от учительской. Иди туда и забери нож.", + "next": "line_3", + "luaCallback": "dialog_aiperi_give_key" + }, + { + "id": "line_3", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "Пока ты не принесешь мне нож из учительской, никуда я тебя не выпущу.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + }, + { + "id": "condition_1", + "type": "Condition", + "conditions": [ + { + "flag": "aiperi_knife_aware", + "op": "Equals", + "value": 1 + } + ], + "trueNext": "line_2", + "falseNext": "line_4" + }, + { + "id": "line_4", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Что случилось?", + "next": "line_5" + }, + { + "id": "line_5", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "Ты почему мои сообщения не читаешь?", + "next": "line_6" + }, + { + "id": "line_6", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "Помнишь мы скидывались на торт для Аиды Джаныбековой? Я тогда еще приносила скатерть, тарелки и нож для торта. И я до сих пор не получила назад ничего.", + "next": "line_7" + }, + { + "id": "line_7", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Скатерть и тарелки вроде бы лежат в комнате отдыха для студентов", + "next": "line_8" + }, + { + "id": "line_8", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "А нож?", + "next": "line_9" + }, + { + "id": "line_9", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Нож, наверное, так и остался в учительской.", + "next": "line_10" + }, + { + "id": "line_10", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "Так сходи в учительскую, забери нож и принеси мне!", + "next": "line_11" + }, + { + "id": "line_11", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Почему ты сама не сходишь?", + "next": "line_12" + }, + { + "id": "line_12", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "Во-первых, ты у меня эти вещи брал, ты и должен вернуть.", + "next": "line_13" + }, + { + "id": "line_13", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "А во вторых, мне как-то не хочется попадаться на глаза Аиде. Я даже лекцию пропустила.", + "next": "line_14" + }, + { + "id": "line_14", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "У меня есть ощущение что если я ее встречу, она даст мне какое-то очень сложное задание.", + "next": "line_15" + }, + { + "id": "line_15", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Как я попаду в учительскую, если там закрыто?", + "next": "line_2" + } + ] + }, + { + "id": "knife_dialog002", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "Ты куда собрался, Бекзат?", + "next": "line_2" + }, + { + "id": "line_2", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "Пока ты не принесешь мне нож из учительской, никуда я тебя не выпущу.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "knife_dialog_second001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Куда Айпери убежала?", + "next": "line_2" + }, + { + "id": "line_2", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Ладно, я отдам ей нож завтра.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "aiperi_dialog001", + "start": "line_1", + "uninterruptible": true, + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "Так где нож, Бекзат? Ты мне его когда вернешь?", + "next": "line_2" + }, + { + "id": "line_2", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Извини, но этот нож внезапно мне очень нужен.", + "next": "line_3" + }, + { + "id": "line_3", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "Бекзат, какого черта?", + "next": "line_4" + }, + { + "id": "line_4", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "У меня вопрос, ты знаешь про Бегимай с прошлого курса?", + "next": "line_5" + }, + { + "id": "line_5", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "Я слышала она не смогла сдать курсовую, прыгнула с окна и разбилась насмерть.", + "next": "line_6" + }, + { + "id": "line_6", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "Менты приезжали, следователи допрашивали ректора, такой скандал был.", + "next": "line_7" + }, + { + "id": "line_7", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "А зачем тебе?", + "next": "line_8" + }, + { + "id": "line_8", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Ты не знаешь кого-нибудь, кто с ней был знаком?", + "next": "line_9" + }, + { + "id": "line_9", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "У тебя в общаге живет Алик, в комнате напротив тебя.", + "next": "line_10" + }, + { + "id": "line_10", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "Он с того же курса. Можешь у него поспрашивать.", + "next": "line_11" + }, + { + "id": "line_11", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Хорошо, спасибо!", + "objectiveComplete": "ghost_lore.ghost_lore_aiperi", + "questUnlock": "ghost_release", + "objectiveVisible": "ghost_lore.ghost_lore_alik", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "aiperi_dialog002", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "Я не знаю какие у тебя там дела, Бекзат,", + "next": "line_2" + }, + { + "id": "line_2", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "Но ты должен вернуть мне нож поскорее, а то я тебе голову оторву!", + "next": "line_3" + }, + { + "id": "line_3", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Я обещаю, сейчас я один вопрос решу и верну тебе нож.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "aiperi_dialog003", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "Так где нож, Бекзат? Ты мне его когда вернешь?", + "next": "line_2" + }, + { + "id": "line_2", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Я не могу дать тебе нож, он мне нужен чтобы убивать призраков.", + "next": "line_3" + }, + { + "id": "line_3", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "Что за чушь? Ты со своими компьютерными играми совсем крышей поехал?", + "next": "line_4" + }, + { + "id": "line_4", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Я обещаю, сейчас я один вопрос решу и верну тебе нож.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "door_dialog001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Дверь закрыта на ключ.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "door_teacher_dialog001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Это дверь в учительскую, и она закрыта. Мне нужно взять ключи у Айпери.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "door_unlock_dialog001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Хорошо, что у меня уже есть ключ от этой двери.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "door_night_dialog001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Дверь закрыта на ключ.", + "next": "line_2" + }, + { + "id": "line_2", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Видимо когда я спал, охранник запер дверь.", + "next": "line_3" + }, + { + "id": "line_3", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Это уже не смешно, как я отсюда выберусь?", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "teacher_dialog001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Аида Дженибековна", + "portrait": "resources/dialogue/portrait_teacher.png", + "text": "Бекзат, не мешай, я занята.", + "next": "line_2" + }, + { + "id": "line_2", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Ладно...", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "teacher_dialog002", + "start": "line_1", + "uninterruptible": true, + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Аида Дженибековна", + "portrait": "resources/dialogue/portrait_teacher.png", + "text": "Бекзат, тебе отдельное задание на модуль.", + "next": "line_2" + }, + { + "id": "line_2", + "type": "Line", + "speaker": "Аида Дженибековна", + "portrait": "resources/dialogue/portrait_teacher.png", + "text": "Подготовь презентацию по теме \"Манас в изложении Жусупа Мамая\".", + "next": "line_3" + }, + { + "id": "line_3", + "type": "Line", + "speaker": "Аида Дженибековна", + "portrait": "resources/dialogue/portrait_teacher.png", + "text": "Книга лежит в библиотеке, но забирать ее из библиотеки нельзя.", + "next": "line_4" + }, + { + "id": "line_4", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Как же я буду готовиться к презентации, если книгу забирать нельзя?", + "next": "line_5" + }, + { + "id": "line_5", + "type": "Line", + "speaker": "Аида Дженибековна", + "portrait": "resources/dialogue/portrait_teacher.png", + "text": "Там в библиотеке есть компьютер, напиши презентацию прямо на нем.", + "next": "line_6" + }, + { + "id": "line_6", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Ладно...", + "objectiveComplete": "study_beginning.study_beginning_task", + "questUnlock": "study_project", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "teacher_dialog003", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Аида Дженибековна, вы помните Бегимай? Она вам курсовую хотела сдать.", + "objectiveComplete": "ghost_lore.ghost_lore_teacher", + "next": "line_2" + }, + { + "id": "line_2", + "type": "Line", + "speaker": "Аида Дженибековна", + "portrait": "resources/dialogue/portrait_teacher.png", + "text": "Да, она говорила что приносила курсовую, но у меня ее нигде нет.", + "next": "line_3" + }, + { + "id": "line_3", + "type": "Line", + "speaker": "Аида Дженибековна", + "portrait": "resources/dialogue/portrait_teacher.png", + "text": "Если ты найдешь и покажешь мне ее курсовую работу, я выставлю ей оценку.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "teacher_dialog004", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Аида Дженибековна, Бегимай хотела вам курсовую сдать, вы помните?", + "objectiveComplete": "ghost_lore.ghost_lore_teacher", + "next": "line_2" + }, + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Я принес вам ее курсовую, можете посмотреть?", + "next": "line_2" + }, + { + "id": "line_2", + "type": "Line", + "speaker": "Аида Дженибековна", + "portrait": "resources/dialogue/portrait_teacher.png", + "text": "Хорошо, давай посмотрим.", + "next": "line_3" + }, + { + "id": "line_3", + "type": "Line", + "speaker": "Аида Дженибековна", + "portrait": "resources/dialogue/portrait_teacher.png", + "text": "Да, это ее курсовая работа, я вижу.", + "next": "line_4" + }, + { + "id": "line_4", + "type": "Line", + "speaker": "Аида Дженибековна", + "portrait": "resources/dialogue/portrait_teacher.png", + "text": "Там в шкафу лежат зачетки, найди мне зачетку и принеси мне.", + "next": "line_5" + }, + { + "id": "line_5", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Хорошо!", + "objectiveComplete": "ghost_coursework.ghost_coursework_mark", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "teacher_dialog005", + "start": "line_1", + "uninterruptible": true, + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Аида Дженибековна, Бегимай хотела вам курсовую сдать, вы помните?", + "objectiveComplete": "ghost_lore.ghost_lore_teacher", + "next": "line_2" + }, + { + "id": "line_2", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Я принес вам ее зачетку и ее курсовую работу, посмотрите пожалуйста.", + "next": "line_3" + }, + { + "id": "line_3", + "type": "Line", + "speaker": "Аида Дженибековна", + "portrait": "resources/dialogue/portrait_teacher.png", + "text": "Хорошо, давай посмотрим.", + "next": "line_4" + }, + { + "id": "line_4", + "type": "Line", + "speaker": "Аида Дженибековна", + "portrait": "resources/dialogue/portrait_teacher.png", + "text": "Да, я вижу что курсовая написана хорошо, я ставлю ей максимальный балл.", + "objectiveComplete": "ghost_coursework.ghost_coursework_mark", + "next": "line_5" + }, + { + "id": "line_5", + "type": "Line", + "speaker": "Аида Дженибековна", + "portrait": "resources/dialogue/portrait_teacher.png", + "text": "Вот держи зачетку с оценкой.", + "objectiveComplete": "ghost_release.ghost_release_mark", + "next": "line_6" + }, + { + "id": "line_6", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Спасибо!", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "book_dialog001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Мне стоит вернуть книгу на место, прежде чем уходить из библиотеки.", + "next": "line_2" + }, + { + "id": "line_2", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Иначе Аида Дженибековна меня убъет.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "ghost_dialog001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Куда я попал?", + "next": "line_2" + }, + { + "id": "line_2", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Я что, сплю?", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "ghost_dialog002", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Я вижу какие-то тени!", + "next": "line_2" + }, + { + "id": "line_2", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Мне лучше держать нож наготове.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "dialog_with_ghost001", + "uninterruptible": true, + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Призрак", + "portrait": "resources/dialogue/portrait_ghost.png", + "text": "Ты посмел заговорить со мной?", + "next": "condition_1" + }, + { + "id": "condition_1", + "type": "Condition", + "conditions": [ + { + "flag": "ghost_aware", + "op": "Equals", + "value": 1 + } + ], + "trueNext": "line_9", + "falseNext": "line_2" + }, + { + "id": "line_9", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Напомни пожалуйста, кто ты?", + "next": "line_10" + }, + { + "id": "line_2", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Ты кто?", + "next": "line_3" + }, + { + "id": "line_3", + "type": "Line", + "speaker": "Бегимай", + "portrait": "resources/dialogue/portrait_ghost.png", + "text": "Меня зовут Бегимай, мне нужно сдать курсовую по манасоведению.", + "next": "line_4" + }, + { + "id": "line_4", + "type": "Line", + "speaker": "Бегимай", + "portrait": "resources/dialogue/portrait_ghost.png", + "text": "Я появляюсь здесь каждую ночь, чтобы сдать курсовую.", + "next": "line_5" + }, + { + "id": "line_5", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "И как я могу заставить тебя уйти отсюда?", + "next": "line_6" + }, + { + "id": "line_6", + "type": "Line", + "speaker": "Бегимай", + "portrait": "resources/dialogue/portrait_ghost.png", + "text": "Я уйду на покой только когда увиду оценку по курсовой в своей зачетке.", + "next": "line_7" + }, + { + "id": "line_7", + "type": "Line", + "speaker": "Бегимай", + "portrait": "resources/dialogue/portrait_ghost.png", + "text": "А до тех пор, я буду появлятся здесь каждую ночь.", + "next": "line_8" + }, + { + "id": "line_8", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Ладно, я что-нибудь придумаю.", + "luaCallback": "", + "next": "setflag_1", + "questUnlock": "ghost_lore" + }, + { + "id": "setflag_1", + "type": "SetFlag", + "effects": [ + { + "flag": "ghost_aware", + "value": 1 + } + ], + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + }, + { + "id": "line_10", + "type": "Line", + "speaker": "Бегимай", + "portrait": "resources/dialogue/portrait_ghost.png", + "text": "Меня зовут Бегимай, мне нужно сдать курсовую по манасоведению.", + "next": "line_11" + }, + { + "id": "line_11", + "type": "Line", + "speaker": "Бегимай", + "portrait": "resources/dialogue/portrait_ghost.png", + "text": "Я появляюсь здесь каждую ночь, чтобы сдать курсовую.", + "next": "line_6" + } + ] + }, + { + "id": "dialog_with_ghost002", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бегимай", + "portrait": "resources/dialogue/portrait_ghost.png", + "text": "Я Бегимай, мне нужно сдать курсовую по манасоведению.", + "next": "line_2" + }, + { + "id": "line_2", + "type": "Line", + "speaker": "Бегимай", + "portrait": "resources/dialogue/portrait_ghost.png", + "text": "Я появляюсь здесь каждую ночь, чтобы сдать курсовую.", + "next": "line_3" + }, + { + "id": "line_3", + "type": "Line", + "speaker": "Бегимай", + "portrait": "resources/dialogue/portrait_ghost.png", + "text": "Я уйду на покой только когда увиду оценку по курсовой в своей зачетке.", + "next": "line_4" + }, + { + "id": "line_4", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Ладно, я что-нибудь придумаю.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "dialog_with_ghost003", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Эй простыня, посмотри сюда.", + "next": "line_2" + }, + { + "id": "line_2", + "type": "Line", + "speaker": "Бегимай", + "portrait": "resources/dialogue/portrait_ghost.png", + "text": "Что это?", + "next": "line_3" + }, + { + "id": "line_3", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Это твоя зачетка.", + "next": "line_4" + }, + { + "id": "line_4", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Тебе поставили за курсовую максимальный балл!", + "next": "line_5" + }, + { + "id": "line_5", + "type": "Line", + "speaker": "Бегимай", + "portrait": "resources/dialogue/portrait_ghost.png", + "text": "Неужели! Наконец-то, мое предназначение исполнено.", + "next": "line_6" + }, + { + "id": "line_6", + "type": "Line", + "speaker": "Бегимай", + "portrait": "resources/dialogue/portrait_ghost.png", + "text": "Теперь я могу уйти на покой.", + "next": "line_7" + }, + { + "id": "line_7", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Давай, иди отдыхай.", + "luaCallback": "on_quest_over", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "note_dialog001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Здесь написано: прочитай меня вслух.", + "next": "line_2" + }, + { + "id": "line_2", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "[Читает].", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "book_dialog002", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Сначала мне нужно найти книку в библиотеке.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "book_dialog003", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Да, вот эта книга! Я возьму ее.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "book_dialog004", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Я вернул книгу на место.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "book_dialog005", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "На этой полке лежат самые скучные книги в этом кабинете.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "book_dialog006", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Я надеюсь, мне эта книга больше не пригодится.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "computer_dialog001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Это старый библиотечный компьютер, он даже не подключен к интернету.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "computer_dialog002", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "От этого компьютера сейчас не будет никакого толку.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "computer_dialog003", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Надеюсь мне больше не придется притрагиваться к этому компьютеру.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "computer_dialog004", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Похоже, компьютеры в теневом режиме не функционируют никак.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "dialog_report_card001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Тут лежат зачетные книжки студентов.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "dialog_report_card002", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Здесь лежит зачетка Бегимай. Я пожалуй, возьму ее.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "dialog_report_card003", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Мне еще рано возвращать зачетку Бегимай обратно в шкаф.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "dialog_taxi003", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Чтобы заказать такси, я сначала должен выйти на улицу.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "dialog_video001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Ого, пока я залипал в приложении, уже наступила ночь!", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "dialog_video002", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Я не буду сейчас смотреть видеоролики, давай лучше вернемся в общагу и пойдем спать.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "dialog_video003", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Мне некогда деградировать сегодня, у меня много дел!", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "phone_night_aiperi001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_think.png", + "text": "Стоит ли написать Айпери?", + "next": "choice_1" + }, + { + "id": "choice_1", + "type": "Choice", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_think.png", + "text": "", + "choices": [ + { + "id": "choice_1780657177062", + "kind": "Main", + "text": "Попросить помощь", + "next": "line_2" + }, + { + "id": "choice_1780657211405", + "kind": "Optional", + "text": "Неважно", + "next": "end_1" + } + ] + }, + { + "id": "line_2", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Айпери, ты в сети?", + "next": "line_11", + "chatBubble": "out" + }, + { + "id": "line_11", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Я уже спать собираюсь. Что случилось?", + "next": "line_3", + "chatBubble": "in" + }, + { + "id": "line_3", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Я уснул в универе, и меня заперли тут!", + "next": "line_4", + "chatBubble": "out" + }, + { + "id": "line_4", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Пхахахх лашара", + "next": "line_5", + "chatBubble": "in" + }, + { + "id": "line_5", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Это не смешно!", + "next": "line_6", + "chatBubble": "out" + }, + { + "id": "line_6", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Я знаю у тебя есть ключи от всех кабинетов. Ты можешь приехать, открыть библиотеку и выпустить меня?", + "next": "line_7", + "chatBubble": "out" + }, + { + "id": "line_7", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Время уже позднее.", + "next": "line_8", + "chatBubble": "in" + }, + { + "id": "line_8", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Там в библиотеке есть мягкий диван. Ляг поспи, а я приеду утром и выпущу тебя.", + "next": "line_9", + "chatBubble": "in" + }, + { + "id": "line_9", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Айпери, ну пожалуйста!", + "next": "line_10", + "chatBubble": "out" + }, + { + "id": "line_10", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Я пойду спать. Доброй ночи!", + "next": "setflag_1", + "chatBubble": "in" + }, + { + "id": "setflag_1", + "type": "SetFlag", + "effects": [ + { + "flag": "asked_help_locked", + "value": 1 + } + ], + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "phone_dialog_night_parents001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Стоит ли написать родителям?", + "next": "choice_1", + "chatBubble": "out" + }, + { + "id": "choice_1", + "type": "Choice", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "", + "choices": [ + { + "id": "choice_1780657619319", + "kind": "Main", + "text": "Попросить помощь", + "next": "line_2" + }, + { + "id": "choice_1780657645270", + "kind": "Optional", + "text": "Неважно", + "next": "end_1" + } + ] + }, + { + "id": "end_1", + "type": "End" + }, + { + "id": "line_2", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Привет, ата! Меня заперли в универе ночью!", + "next": "line_3", + "chatBubble": "out" + }, + { + "id": "line_3", + "type": "Line", + "speaker": "Отец", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Сынок, ты же знаешь я живу далеко", + "next": "line_4", + "chatBubble": "in" + }, + { + "id": "line_4", + "type": "Line", + "speaker": "Отец", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Пока мы приедем, настанет утро!", + "next": "line_5", + "chatBubble": "in" + }, + { + "id": "line_5", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Да, точно, извнините", + "next": "line_6", + "chatBubble": "out" + }, + { + "id": "line_6", + "type": "Line", + "speaker": "Отец", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Напиши своей стартосте, может она придумает что сделать?", + "next": "end_1", + "chatBubble": "in" + } + ] + }, + { + "id": "phone_morning_aiperi001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Айпери! Ты где сейчас?", + "next": "condition_1", + "chatBubble": "out" + }, + { + "id": "condition_1", + "type": "Condition", + "conditions": [ + { + "flag": "asked_help_locked", + "op": "Equals", + "value": 1 + } + ], + "trueNext": "line_7", + "falseNext": "line_2" + }, + { + "id": "line_7", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Я приехала в университет чтобы тебя освободить.", + "next": "line_8", + "chatBubble": "in" + }, + { + "id": "line_2", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Я только что приехала в универ. Что случилось?", + "next": "condition_2", + "chatBubble": "in" + }, + { + "id": "condition_2", + "type": "Condition", + "conditions": [ + { + "flag": "morning_aiperi_save_again", + "op": "Equals", + "value": 1 + } + ], + "trueNext": "line_9", + "falseNext": "line_3" + }, + { + "id": "line_9", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Ты будешь смеяться, но мне снова нужна помощь. Открой дверь и выпусти меня из кабинета пожалуйста!", + "next": "line_10", + "chatBubble": "out" + }, + { + "id": "line_10", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Твое счастье что я всегда прихожу в универ раньше всех.", + "next": "line_6", + "chatBubble": "in" + }, + { + "id": "line_3", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Я заперт в кабинете. Открой мне дверь пожалуйста!", + "next": "line_4", + "chatBubble": "out" + }, + { + "id": "line_4", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Как ты там оказался?", + "next": "line_5", + "chatBubble": "in" + }, + { + "id": "line_5", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Это долгая история...", + "next": "line_6", + "chatBubble": "out" + }, + { + "id": "line_6", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Отойди от двери, я сейчас тебя освобожу!", + "next": "end_1", + "chatBubble": "in" + }, + { + "id": "end_1", + "luaCallback": "on_aiperi_opens_door", + "type": "End" + }, + { + "id": "line_8", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Спасибо большое!", + "next": "line_6", + "chatBubble": "out" + } + ] + }, + { + "id": "dialog_aiperi_morning001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Айпери!", + "next": "condition_3" + }, + { + "id": "condition_3", + "type": "Condition", + "conditions": [ + { + "flag": "morning_aiperi_talked", + "op": "Equals", + "value": 1 + } + ], + "trueNext": "condition_6", + "falseNext": "condition_5" + }, + { + "id": "condition_6", + "type": "Condition", + "conditions": [ + { + "flag": "morning_aiperi_save_again", + "op": "Equals", + "value": 1 + } + ], + "trueNext": "line_32", + "falseNext": "line_26" + }, + { + "id": "line_32", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "Ты опять застрял в универе ночью, потому что решаешь свои дела?", + "next": "line_33" + }, + { + "id": "line_33", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Дааа, спасибо что вытащила меня снова", + "next": "line_26" + }, + { + "id": "condition_5", + "type": "Condition", + "conditions": [ + { + "flag": "morning_player_can_leave", + "op": "Equals", + "value": 1 + } + ], + "trueNext": "line_31", + "falseNext": "line_27" + }, + { + "id": "line_31", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "Ого, Бекзат! Как хорошо, что я тебя встретила!", + "next": "line_12" + }, + { + "id": "line_27", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Спасибо большое!", + "next": "line_2" + }, + { + "id": "line_26", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "Я не знаю какие у тебя там дела, Бекзат, но ты должен вернуть мне нож как можно скорее!", + "next": "condition_4" + }, + { + "id": "condition_4", + "type": "Condition", + "conditions": [ + { + "flag": "ghost_aware", + "op": "Equals", + "value": 1 + }, + { + "flag": "alik_aware", + "op": "NotEquals", + "value": 1 + } + ], + "trueNext": "line_30", + "falseNext": "line_28" + }, + { + "id": "line_30", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "У меня есть один вопрос.", + "next": "line_29" + }, + { + "id": "line_28", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Хорошо, я скоро верну тебе твой нож.", + "next": "end_1" + }, + { + "id": "line_2", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "Во-первых, постарайся сделать так, чтобы этого больше не повторялось. Мне вовсе не в кайф вытаскивать твою задницу из проблем.", + "luaCallback": "", + "next": "line_3" + }, + { + "id": "line_3", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "Во-вторых, какого хрена ты в универе делаешь ночью?", + "next": "choice_1" + }, + { + "id": "choice_1", + "type": "Choice", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "", + "choices": [ + { + "id": "choice_1780659320965", + "kind": "Main", + "text": "Рассказать про записку", + "next": "line_4" + }, + { + "id": "choice_1780659326945", + "kind": "Optional", + "text": "Умолчать", + "next": "line_8" + } + ] + }, + { + "id": "line_4", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Ко мне попала странная записка, где было написано заклинание. Я прочитал его, и попал в потусторонний мир.", + "next": "line_5" + }, + { + "id": "line_5", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "Ты что опять в свои игры переиграл? Какой потусторонний мир?", + "next": "line_6" + }, + { + "id": "line_6", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Но это правда! Там все было по-другому, и я видел призраков...", + "next": "line_7" + }, + { + "id": "line_7", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "Тебе еще и не такое привидется. Езжай в общагу и выспись.", + "next": "setflag_1" + }, + { + "id": "setflag_1", + "type": "SetFlag", + "effects": [ + { + "flag": "told_aiperi_ghost", + "value": 1 + } + ], + "next": "line_11" + }, + { + "id": "end_1", + "luaCallback": "on_aiperi_morning_dialog_finished", + "type": "End" + }, + { + "id": "line_8", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Аида Джаныбекова увидела меня в учительской, и заставила писать эссе по этой тупой книге.", + "next": "line_9" + }, + { + "id": "line_9", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Я писал, писал и уснул.", + "next": "line_10" + }, + { + "id": "line_10", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "Дааа, она такая. Видишь как хорошо, что именно ты пошел за ножом, а не я.", + "next": "line_11" + }, + { + "id": "line_11", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "Да, кстати.", + "next": "line_12" + }, + { + "id": "line_12", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "Отдавай нож.", + "next": "line_13" + }, + { + "id": "line_13", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Да, насчет этого. Боюсь, что я не могу тебе пока что отдать нож.", + "next": "line_14" + }, + { + "id": "line_14", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "Какого черта?", + "next": "condition_1" + }, + { + "id": "condition_1", + "type": "Condition", + "conditions": [ + { + "flag": "told_aiperi_ghost", + "op": "Equals", + "value": 1 + } + ], + "trueNext": "line_16", + "falseNext": "line_15" + }, + { + "id": "line_16", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Оказывается, я могу убивать призраков только этим ножом, без него я буду беззащитен.", + "next": "line_17" + }, + { + "id": "line_17", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Но ты не переживай, я сделаю кое-какое дело и верну тебе этот нож.", + "next": "line_18" + }, + { + "id": "line_18", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "Постарайся сделать свои дела быстрее, иначе это я тебе голову оторву!", + "next": "setflag_3" + }, + { + "id": "setflag_3", + "type": "SetFlag", + "effects": [ + { + "flag": "morning_aiperi_talked", + "value": 1 + } + ], + "next": "condition_2" + }, + { + "id": "condition_2", + "type": "Condition", + "conditions": [ + { + "flag": "ghost_aware", + "op": "Equals", + "value": 1 + } + ], + "trueNext": "line_20", + "falseNext": "end_1" + }, + { + "id": "line_20", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Да, и еще кое что.", + "next": "line_29" + }, + { + "id": "line_29", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Ты знаешь про студентку Бегимай с прошлого курса?", + "next": "line_19" + }, + { + "id": "line_19", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "Я слышала она не смогла сдать курсовую по манасоведению, прыгнула с окна и разбилась насмерть.", + "next": "line_21" + }, + { + "id": "line_21", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "Менты приезжали, следователи допрашивали ректора, такой скандал был. Прежнего преподавателя по манасоведению отстранили.", + "next": "line_22" + }, + { + "id": "line_22", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "Поэтому, с этого года у нас этот предмет ведет Аида Дженибековна.", + "next": "line_23" + }, + { + "id": "line_23", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Ты не знаешь кого-нибудь, кто был знаком с Бегимай?", + "next": "line_24" + }, + { + "id": "line_24", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_aiperi.png", + "text": "У тебя в общаге живет Алик, в комнате напротив тебя. Он с того же курса. Можешь у него поспрашивать.", + "next": "line_25" + }, + { + "id": "line_25", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Спасибо!", + "next": "setflag_2" + }, + { + "id": "setflag_2", + "type": "SetFlag", + "effects": [ + { + "flag": "alik_aware", + "value": 1 + } + ], + "next": "end_1" + }, + { + "id": "line_15", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Нож мне нужен для кое-каких дел.", + "next": "line_17" + } + ] + }, + { + "id": "dialog_chat_parents001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Отец", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Бекзат, сынок, мы c мамой тебе отправили немного денег, постарайся прожить на эти деньги до конца недели!", + "next": "line_2", + "chatBubble": "in" + }, + { + "id": "line_2", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Спасибо!", + "next": "end_1", + "chatBubble": "out" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "dialog_chat_news001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Отец", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Жители Бишкека все чаще жалуются на депрессию и апатию. Смотрите свежее видео об этом на нашем канале!", + "next": "end_1", + "chatBubble": "in" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "dialog_chat_aiperi001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Бекзат, помнишь мы скидывались на торт для Аиды Джаныбековой? Я тогда еще приносила скатерть, тарелки и нож для торта. И я до сих пор не получила назад ничего.", + "next": "line_2", + "chatBubble": "in" + }, + { + "id": "line_2", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Скатерть и тарелки вроде бы лежат в студзоне.", + "next": "line_3", + "chatBubble": "out" + }, + { + "id": "line_3", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "А нож?", + "next": "line_4", + "chatBubble": "in" + }, + { + "id": "line_4", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Нож, наверное, так и остался в учительской.", + "next": "line_5", + "chatBubble": "out" + }, + { + "id": "line_5", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "А давай не \"наверное\"?", + "next": "line_6", + "chatBubble": "in" + }, + { + "id": "line_6", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "А давай ты приедешь в универ, зайдешь в учительскую, заберешь нож и отдашь мне?", + "next": "line_7", + "chatBubble": "in" + }, + { + "id": "line_7", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "У вас сегодня как раз Аида ведет лекцию. После лекции попросишь у нее ключи от учительской и заберешь нож.", + "next": "line_8", + "chatBubble": "in" + }, + { + "id": "line_8", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Почему ты сама не можешь забрать?", + "next": "line_9", + "chatBubble": "out" + }, + { + "id": "line_9", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Ты же знаешь, если я встречу Аиду, она 100% даст мне какое-нибудь сложное задание.", + "next": "line_10", + "chatBubble": "in" + }, + { + "id": "line_10", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "И потом, это ты у меня брал нож, с чего я должна ходить искать его по всему универу?", + "next": "line_11", + "chatBubble": "in" + }, + { + "id": "line_11", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Так что жду тебя в универе! Не вздумай прогулять!", + "next": "setflag_1", + "chatBubble": "in", + "questUnlock": "aiperi_knife" + }, + { + "id": "setflag_1", + "type": "SetFlag", + "effects": [ + { + "flag": "aiperi_knife_aware", + "value": 1 + } + ], + "next": "end_1" + }, + { + "id": "end_1", + "luaCallback": "on_aiperi_dialog_over", + "type": "End" + } + ] + }, + { + "id": "dialog_chat_aiperi002", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Бекзат, ты где? Я жду тебя возле лестницы.", + "next": "end_1", + "chatBubble": "in" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "cancel_phone_night_aiperi001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Я не буду писать Айпери, она опять будет издеваться надо мной.", + "next": "line_2" + }, + { + "id": "line_2", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Я лучше прочитаю заклинание, перейду в теневой мир и так выберусь наружу.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "cancel_phone_morning_aiperi001", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_hero_neutral.png", + "text": "Я не буду беспокоить Айпери. Я могу выбраться из универа и без ее помощи.", + "next": "end_1" + }, + { + "id": "end_1", + "type": "End" + } + ] + }, + { + "id": "dialog_chat_aiperi003", + "start": "line_1", + "nodes": [ + { + "id": "line_1", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Айпери ты куда убежала?", + "next": "line_2", + "chatBubble": "out" + }, + { + "id": "line_2", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Ты достал уже, я не могу тебя ждать вечно! Возишься как сонная муха.", + "next": "line_3", + "chatBubble": "in" + }, + { + "id": "line_3", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "У меня нет времени ждать тебя, мне уже пора на курсы ехать.", + "next": "line_4", + "chatBubble": "in" + }, + { + "id": "line_4", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Так когда я тебе нож верну?", + "next": "line_5", + "chatBubble": "out" + }, + { + "id": "line_5", + "type": "Line", + "speaker": "Айпери", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Приходи завтра в универ! Я каждый день в унике с раннего утра.", + "next": "line_6", + "chatBubble": "in" + }, + { + "id": "line_6", + "type": "Line", + "speaker": "Бекзат", + "portrait": "resources/dialogue/portrait_phone.png", + "text": "Хорошо, встретимся завтра.", + "next": "end_1", + "chatBubble": "out" + }, + { + "id": "end_1", + "type": "End" + } + ] + } + ], + "cutscenes": [] +} \ No newline at end of file diff --git a/resources/start_dorm.lua b/resources/start_dorm.lua index f0167a1..1537780 100644 --- a/resources/start_dorm.lua +++ b/resources/start_dorm.lua @@ -107,7 +107,7 @@ function on_bed_sleep() game_api.set_player_hp(200) --game_api.set_day() - done in cutscene local day = game_api.getIntValue("day") - game_api.setIntValue("day", day+1) + game_api.setIntValue("day", day + 1) print("Setting to day 1----x") end end @@ -204,34 +204,49 @@ game_api.set_enter_night_callback( end ) -local chat0_opened = false -local chat1_opened = false -local chat2_opened = false - game_api.set_chat_callbacks( function() - if not chat0_opened then - chat0_opened = true - game_api.start_dialogue("dialog_chat_aiperi001") + if (not game_api.is_night()) and (not game_api.is_dawn()) then + local aiperi_chat_opened = game_api.getIntValue("aiperi_chat_opened") + + if aiperi_chat_opened == 0 then + game_api.setIntValue("aiperi_chat_opened", 1) + local aiperi_knife_aware = game_api.getIntValue("aiperi_knife_aware") + local aiperi_talked_after_knife = game_api.getIntValue("aiperi_talked_after_knife") + + if (player_hold_knife) and (aiperi_talked_after_knife == 0) then + game_api.start_dialogue("dialog_chat_aiperi003") + game_api.setIntValue("aiperi_talked_after_knife", 1) + else + if aiperi_knife_aware == 0 then + local lection_is_over = game_api.getIntValue("lection_is_over") + if (lection_is_over == 1) then + game_api.start_dialogue("dialog_chat_aiperi002") + else + game_api.start_dialogue("dialog_chat_aiperi001") + end + end + end + end end end, function() - if not chat1_opened then - chat1_opened = true + local parents_chat_opened = game_api.getIntValue("parents_chat_opened") + if parents_chat_opened == 0 then + game_api.setIntValue("parents_chat_opened", 1) game_api.start_dialogue("dialog_chat_parents001") end end, function() - if not chat2_opened then - chat2_opened = true + local news_chat_opened = game_api.getIntValue("news_chat_opened") + if news_chat_opened == 0 then + game_api.setIntValue("news_chat_opened", 1) game_api.start_dialogue("dialog_chat_news001") end end ) function on_aiperi_dialog_over() - print("on_aiperi_dialog_over called") - game_api.close_phone() end diff --git a/resources/start_uni_exterior.lua b/resources/start_uni_exterior.lua index f1cf768..f7f5f0d 100644 --- a/resources/start_uni_exterior.lua +++ b/resources/start_uni_exterior.lua @@ -26,7 +26,7 @@ function on_container_clicked() game_api.start_dialogue("dialog_contaier003") elseif player_container_aware == 1 then game_api.start_dialogue("dialog_contaier002") - game_api.setIntValue("player_has_coursework", 1) + game_api.setIntValue("player_has_coursework", 1) else game_api.start_dialogue("dialog_contaier001") end @@ -55,6 +55,7 @@ game_api.set_darklands_callbacks( print("Setting to day 1----") game_api.setIntValue("day", 1) game_api.set_dawn() + game_api.setIntValue("morning_player_can_leave", 1) end ) @@ -113,3 +114,45 @@ game_api.set_trigger_zone_callbacks("taxi_zone001", taxi_zone001_enter_callback, nil ) + +game_api.set_chat_callbacks( + function() + if (not game_api.is_night()) and (not game_api.is_dawn()) then + local aiperi_chat_opened = game_api.getIntValue("aiperi_chat_opened") + + if aiperi_chat_opened == 0 then + game_api.setIntValue("aiperi_chat_opened", 1) + local aiperi_knife_aware = game_api.getIntValue("aiperi_knife_aware") + local aiperi_talked_after_knife = game_api.getIntValue("aiperi_talked_after_knife") + + if (player_hold_knife) and (aiperi_talked_after_knife == 0) then + game_api.start_dialogue("dialog_chat_aiperi003") + game_api.setIntValue("aiperi_talked_after_knife", 1) + else + if aiperi_knife_aware == 0 then + local lection_is_over = game_api.getIntValue("lection_is_over") + if (lection_is_over == 1) then + game_api.start_dialogue("dialog_chat_aiperi002") + else + game_api.start_dialogue("dialog_chat_aiperi001") + end + end + end + end + end + end, + function() + local parents_chat_opened = game_api.getIntValue("parents_chat_opened") + if parents_chat_opened == 0 then + game_api.setIntValue("parents_chat_opened", 1) + game_api.start_dialogue("dialog_chat_parents001") + end + end, + function() + local news_chat_opened = game_api.getIntValue("news_chat_opened") + if news_chat_opened == 0 then + game_api.setIntValue("news_chat_opened", 1) + game_api.start_dialogue("dialog_chat_news001") + end + end +) diff --git a/resources/start_uni_interior.lua b/resources/start_uni_interior.lua index 7adde02..e91e765 100644 --- a/resources/start_uni_interior.lua +++ b/resources/start_uni_interior.lua @@ -1,6 +1,6 @@ hall_door_opened = false teacher_door_opened = false -lection_is_over = false +--lection_is_over = false player_hold_book = false player_hold_knife = false @@ -35,13 +35,25 @@ function dialog_aiperi_give_key() game_api.quest_unlock("aiperi_knife") game_api.quest_set_objective_completed("aiperi_knife", "aiperi_knife_keys") player_hold_key = true + + print("dialog_aiperi_give_key, player_hold_key set to") + print(player_hold_key) + + local aiperi_chat_opened = game_api.getIntValue("aiperi_chat_opened") + + if (aiperi_chat_opened == 0) then + game_api.set_chat_unread(0, false, "(пусто)") + end end end function lection_hall_zone001_enter_callback() --game_api.start_dialogue("") --Start cutscene - if (lection_is_over == false) then + local lection_is_over = game_api.getIntValue("lection_is_over") + + + if (lection_is_over == 0) then game_api.player_stop() game_api.start_cutscene("lection_cutscene001") game_api.quest_set_objective_completed("study_beginning", "study_beginning_lecture") @@ -59,7 +71,8 @@ function knife_dialog_zone001_enter_callback() if (day == 0) then if (player_hold_knife == false) then - if lection_is_over then + local lection_is_over = game_api.getIntValue("lection_is_over") + if lection_is_over == 1 then if (player_hold_key) then game_api.start_dialogue("knife_dialog002") else @@ -69,7 +82,10 @@ function knife_dialog_zone001_enter_callback() end else if (game_api.is_night() == false) then - game_api.start_dialogue("knife_dialog_second001") + local aiperi_talked_after_knife = game_api.getIntValue("aiperi_talked_after_knife") + if (aiperi_talked_after_knife == 0) then + game_api.start_dialogue("knife_dialog_second001") + end game_api.set_trigger_zone_enabled(1, false) end end @@ -81,7 +97,8 @@ function knife_dialog_zone001_exit_callback() if (day == 0) then print("knife_dialog_zone001_exit_callback--!") - if (lection_is_over) then + local lection_is_over = game_api.getIntValue("lection_is_over") + if (lection_is_over == 1) then if (teacher_door_opened) then game_api.switch_navigation(3) else @@ -137,17 +154,6 @@ function on_book_pickup() end function on_bookshelf_clicked() - --[[if not player_hold_book then - game_api.pickup_item("book") - game_api.deactivate_interactive_object("Book001") - player_hold_book = true - game_api.set_trigger_zone_enabled(3, true) - else - game_api.remove_item("book") - game_api.activate_interactive_object("Book001") - player_hold_book = false - game_api.set_trigger_zone_enabled(3, false) - end]] on_book_pickup() end @@ -157,6 +163,16 @@ function on_npc_interact(npc_index) if npc_index == 1 then local day = game_api.getIntValue("day") + if (game_api.is_dawn()) or (day > 0) then + game_api.start_dialogue("dialog_aiperi_morning001") + else + if (player_hold_key) then + game_api.start_dialogue("knife_dialog002") + else + game_api.start_dialogue("knife_dialog001") + end + end +--[[ if (day == 0) then if (player_hold_key) then game_api.start_dialogue("knife_dialog002") @@ -165,7 +181,7 @@ function on_npc_interact(npc_index) end else game_api.start_dialogue("dialog_aiperi_morning001") - end + end]] end if npc_index == 0 then if (player_ghost_aware == 1) then @@ -210,13 +226,6 @@ function on_quest_over() game_api.start_cutscene("game_complete_cutscene001") end ---[[ -function on_first_ghost_dialog_over() - print("on_first_ghost_dialog_over") - player_ghost_aware = true - game_api.quest_unlock("ghost_lore") -end]] - function on_darklands_over() game_api.set_player_hp(10) game_api.resetPlayerAfterDeath() @@ -232,12 +241,15 @@ end function on_library_door_click() print("on_library_door_click---") local day = game_api.getIntValue("day") + local lection_is_over = game_api.getIntValue("lection_is_over") if (day == 0) then - if (game_api.is_night()) then + if game_api.is_dawn() then + game_api.start_dialogue("door_dialog001") + elseif game_api.is_night() then game_api.start_dialogue("door_night_dialog001") else - if (not lection_is_over) then + if (lection_is_over == 0) then game_api.start_dialogue("door_dialog001") end end @@ -404,25 +416,6 @@ function on_s1_door_click() else game_api.start_dialogue("door_dialog001") end - --[[ - if (morning_can_open_door_index == 1) then - if (morning_did_open_door_index == 0) then - morning_did_open_door_index = 1 - game_api.start_dialogue("door_unlock_dialog001") - - game_api.rotate_object("Room_S_0_Leaf001", 90, 0.5, nil) - game_api.fade_object("Room_Cover_Corridor_001", 0, 0.5, function() - game_api.deactivate_interactive_object("Room_Cover_Corridor_001") - end) - game_api.switch_navigation(8) - end - else - game_api.start_dialogue("door_dialog001") - end - ]] - --else - -- game_api.start_dialogue("door_dialog001") - --end end function on_s2_door_click() @@ -435,28 +428,9 @@ function on_s2_door_click() else game_api.start_dialogue("door_dialog001") end - - --[[ - if (morning_can_open_door_index == 2) then - if (morning_did_open_door_index == 0) then - morning_did_open_door_index = 2 - game_api.start_dialogue("door_unlock_dialog001") - - game_api.rotate_object("Room_S_1_Leaf001", 90, 0.5, nil) - game_api.fade_object("Room_Cover_Corridor_001", 0, 0.5, function() - game_api.deactivate_interactive_object("Room_Cover_Corridor_001") - end) - game_api.switch_navigation(9) - end - else - game_api.start_dialogue("door_dialog001") - end -]] end function on_n2_door_click() - --print("player_left_darklands") - --print(player_left_darklands) print("morning_can_open_door_index") print(morning_can_open_door_index) print("morning_did_open_door_index") @@ -505,33 +479,33 @@ end function on_computer_clicked() print("on_computer_clicked--") local day = game_api.getIntValue("day") - + if game_api.is_darklands() then - game_api.start_dialogue("computer_dialog004") + game_api.start_dialogue("computer_dialog004") elseif (day >= 1) or game_api.is_dawn() then print("on_computer_clicked--1") game_api.start_dialogue("computer_dialog003") else - if teacher_told_about_book then - print("on_computer_clicked--2") - if (game_api.is_night() == false) then - print("on_computer_clicked--3") - if (player_hold_book) then - print("on_computer_clicked--4") - game_api.quest_set_objective_completed("study_project", "study_project_write") - game_api.start_cutscene("computer_cutscene001") - else - print("on_computer_clicked--5") - game_api.start_dialogue("book_dialog002") - end + if teacher_told_about_book then + print("on_computer_clicked--2") + if (game_api.is_night() == false) then + print("on_computer_clicked--3") + if (player_hold_book) then + print("on_computer_clicked--4") + game_api.quest_set_objective_completed("study_project", "study_project_write") + game_api.start_cutscene("computer_cutscene001") else - print("on_computer_clicked--6") - game_api.start_dialogue("computer_dialog002") + print("on_computer_clicked--5") + game_api.start_dialogue("book_dialog002") end else - print("on_computer_clicked--7") - game_api.start_dialogue("computer_dialog001") + print("on_computer_clicked--6") + game_api.start_dialogue("computer_dialog002") end + else + print("on_computer_clicked--7") + game_api.start_dialogue("computer_dialog001") + end end end @@ -558,7 +532,6 @@ function on_sleep_cutscene() game_api.set_object_alpha("Room_Cover_North_1_001", 1) game_api.set_object_alpha("Room_Cover_Main_Hall_001", 1) game_api.activate_interactive_object("Note001") - teacher_door_opened = false end @@ -574,9 +547,16 @@ end game_api.set_cutscene_callback("lection_cutscene001", function() print("Cutscene done!") - lection_is_over = true + game_api.setIntValue("lection_is_over", 1) + game_api.set_npc_enabled(1, true) game_api.npc_walk_to(0, 0.758123, 0, 6.50063, on_teacher_arrived_intermediate) + + local aiperi_knife_aware = game_api.getIntValue("aiperi_knife_aware") + + if (aiperi_knife_aware == 0) then + game_api.set_chat_unread(0, true, "Бекзат, ты где? Я жду...") + end end) @@ -590,7 +570,7 @@ function on_report_card_pickup() local player_ghost_aware = game_api.getIntValue("ghost_aware") if player_ghost_aware == 1 then local player_has_report_card = game_api.getIntValue("player_has_report_card") - local report_card_signed = game_api.getIntValue("report_card_signed") + --local report_card_signed = game_api.getIntValue("report_card_signed") if (player_has_report_card == 1) then game_api.start_dialogue("dialog_report_card003") -- Еще рано возвращать зачетку обратно в шкаф @@ -612,8 +592,6 @@ end first_time_darklands = true - - game_api.set_darklands_callbacks( function() if (first_time_darklands) then @@ -706,12 +684,12 @@ game_api.set_darklands_callbacks( if (morning_can_open_door_index == 0) or (morning_can_open_door_index == 3) then game_api.setIntValue("morning_player_can_leave", 1) - game_api.getIntValue("morning_aiperi_save_again", 0) + game_api.setIntValue("morning_aiperi_save_again", 0) else game_api.setIntValue("morning_player_can_leave", 0) local morning_aiperi_talked = game_api.getIntValue("morning_aiperi_talked") if (morning_aiperi_talked == 1) then - game_api.getIntValue("morning_aiperi_save_again", 1) + game_api.setIntValue("morning_aiperi_save_again", 1) end end end @@ -883,7 +861,6 @@ function setDay1MorningSetup() end function setDay1NightSetup() - teacher_door_opened = false print("setDay1NightSetup") @@ -971,7 +948,7 @@ game_api.set_enter_night_callback( end ) - +--[[ game_api.set_chat_callbacks( function() if (game_api.is_night()) then @@ -992,10 +969,107 @@ game_api.set_chat_callbacks( nil, nil ) +]] + + +game_api.set_chat_callbacks( + function() + if (game_api.is_night()) then + if (game_api.is_dawn()) then + local morning_player_can_leave = game_api.getIntValue("morning_player_can_leave") + + if morning_player_can_leave == 0 then + game_api.start_dialogue("phone_morning_aiperi001") + else + game_api.start_dialogue("cancel_phone_morning_aiperi001") + end + else + local day = game_api.getIntValue("day") + local asked_help_locked = game_api.getIntValue("asked_help_locked") + + if (day == 0) then + if (asked_help_locked == 0) then + game_api.start_dialogue("phone_night_aiperi001") + end + else + game_api.start_dialogue("cancel_phone_night_aiperi001") + end + end + game_api.setIntValue("aiperi_talked_after_knife", 1) + game_api.setIntValue("aiperi_chat_opened", 1) + else + + local aiperi_chat_opened = game_api.getIntValue("aiperi_chat_opened") + local aiperi_knife_aware = game_api.getIntValue("aiperi_knife_aware") + local aiperi_talked_after_knife = game_api.getIntValue("aiperi_talked_after_knife") + local lection_is_over = game_api.getIntValue("lection_is_over") + + + + print("dialogx step 1") + + if (player_hold_knife) and (aiperi_talked_after_knife == 0) then + game_api.start_dialogue("dialog_chat_aiperi003") + game_api.setIntValue("aiperi_talked_after_knife", 1) + else + print("dialogx step 2") + if aiperi_chat_opened == 0 then + print("dialogx step 3") + game_api.setIntValue("aiperi_chat_opened", 1) + if aiperi_knife_aware == 0 then + print("dialogx step 4") + if (lection_is_over == 1) then + print("dialogx step 5") + print("player_hold_key") + print(player_hold_key) + if (player_hold_key == false) then + print("dialogx step 6") + game_api.start_dialogue("dialog_chat_aiperi002") + end + else + game_api.start_dialogue("dialog_chat_aiperi001") + end + end + end + + end + +--[[ + if aiperi_chat_opened == 0 then + game_api.setIntValue("aiperi_chat_opened", 1) + + if (player_hold_knife) and (aiperi_talked_after_knife == 0) then + game_api.start_dialogue("dialog_chat_aiperi003") + game_api.setIntValue("aiperi_talked_after_knife", 1) + else + if aiperi_knife_aware == 0 then + local lection_is_over = game_api.getIntValue("lection_is_over") + if (lection_is_over == 1) then + game_api.start_dialogue("dialog_chat_aiperi002") + else + game_api.start_dialogue("dialog_chat_aiperi001") + end + end + end + end]] + end + end, + function() + local parents_chat_opened = game_api.getIntValue("parents_chat_opened") + if parents_chat_opened == 0 then + game_api.setIntValue("parents_chat_opened", 1) + game_api.start_dialogue("dialog_chat_parents001") + end + end, + function() + local news_chat_opened = game_api.getIntValue("news_chat_opened") + if news_chat_opened == 0 then + game_api.setIntValue("news_chat_opened", 1) + game_api.start_dialogue("dialog_chat_news001") + end + end +) ---[[function on_aiperi_give_keys() -game_api.pickup_item("all_keys") -end]] function on_aiperi_opens_door() print("on_aiperi_opens_door") @@ -1148,7 +1222,7 @@ game_api.set_location_callbacks( print("day is:") print(day) - + local resetState = false if not (day == was_day_when_player_left) then resetState = true @@ -1161,9 +1235,8 @@ game_api.set_location_callbacks( elseif (was_state_when_player_left == 4) and (game_api.is_night() or game_api.is_darklands()) then resetState = true end - + if (day > 0) and resetState then - if (game_api.is_darklands()) then --Currently not possible print("Entered darklands setup") @@ -1180,8 +1253,8 @@ game_api.set_location_callbacks( game_api.switch_navigation(3) end end - - + + --[[ local day = game_api.getIntValue("day") if (day == 0)then @@ -1207,7 +1280,7 @@ game_api.set_location_callbacks( arrive in night ]] - + if (day > 0) and (game_api.is_night() == false) then @@ -1223,15 +1296,14 @@ game_api.set_location_callbacks( print("setDay1MorningSetup entered-") setDay1MorningSetup() end - end, function() print("Exit location uni interior") --player_left_darklands = false local hp = game_api.get_player_hp() game_api.setFloatValue("player_hp", hp) - - + + --[[ 0 - day0 1 - darklands @@ -1242,9 +1314,9 @@ game_api.set_location_callbacks( ]] local day = game_api.getIntValue("day") - + was_day_when_player_left = day - if (day == 0)then + if (day == 0) then was_state_when_player_left = 0 elseif game_api.is_darklands() then was_state_when_player_left = 1 diff --git a/src/Game.cpp b/src/Game.cpp index 8f6cc5f..cca5a7e 100644 --- a/src/Game.cpp +++ b/src/Game.cpp @@ -213,9 +213,9 @@ namespace ZL LocationSetup uniInteriorParams; uniInteriorParams.gameObjectsJsonPath = "resources/config2/gameobjects_uni_interior_x.json"; uniInteriorParams.npcsJsonPath = "resources/config2/npcs_uni_interior.json"; - uniInteriorParams.dialoguesJsonPath = "resources/dialogue/uni_interior_dialogues_004.json"; + uniInteriorParams.dialoguesJsonPath = "resources/dialogue/uni_interior_dialogues_005.json"; + - uniInteriorParams.navigationJsonPaths = { "resources/navigation/uni_interior4_unlocked_n2.txt", //0 "resources/navigation/uni_interior3_n2_hall.txt", @@ -296,6 +296,9 @@ namespace ZL this->currentLocation = nullptr; menuManager.showMainMenu(); }; + locations["uni_interior"]->requestSetChatUnread = [this](int idx, bool unread, const std::string& msg) { + menuManager.setChatUnread(idx, unread, msg); + }; if (locations["uni_interior"]->player) locations["uni_interior"]->player->onDeathAnimComplete = [this]() { startDarklandsTransition(); }; for (auto& npc : locations["uni_interior"]->npcs) { @@ -335,6 +338,9 @@ namespace ZL locations["uni_exterior"]->requestDarklandsTransition = [this]() { return startDarklandsTransition(); }; locations["uni_exterior"]->requestClosePhone = [this]() { menuManager.closePhoneEntirely(); }; locations["uni_exterior"]->requestReturnToMainMenu = [this]() { menuManager.showMainMenu(); }; + locations["uni_exterior"]->requestSetChatUnread = [this](int idx, bool unread, const std::string& msg) { + menuManager.setChatUnread(idx, unread, msg); + }; if (locations["uni_exterior"]->player) locations["uni_exterior"]->player->onDeathAnimComplete = [this]() { startDarklandsTransition(); }; @@ -379,6 +385,9 @@ namespace ZL locations["location_dorm"]->requestDarklandsTransition = [this]() { return startDarklandsTransition(); }; locations["location_dorm"]->requestClosePhone = [this]() { menuManager.closePhoneEntirely(); }; locations["location_dorm"]->requestReturnToMainMenu = [this]() { menuManager.showMainMenu(); }; + locations["location_dorm"]->requestSetChatUnread = [this](int idx, bool unread, const std::string& msg) { + menuManager.setChatUnread(idx, unread, msg); + }; if (locations["location_dorm"]->player) locations["location_dorm"]->player->onDeathAnimComplete = [this]() { startDarklandsTransition(); }; @@ -518,39 +527,6 @@ namespace ZL if (currentLocation) currentLocation->dialogueSystem.skipCutscene(); }; - std::cout << "Load resurces step 5" << std::endl; - /* - std::cout << "Load resurces step 12" << std::endl; - - // Shadow mapping shaders -#ifdef EMSCRIPTEN - renderer.shaderManager.AddShaderFromFiles("shadow_depth", "resources/shaders/shadow_depth.vertex", "resources/shaders/shadow_depth_web.fragment", CONST_ZIP_FILE); - std::cout << "Load resurces step 12x1" << std::endl; - renderer.shaderManager.AddShaderFromFiles("shadow_depth_skinning", "resources/shaders/shadow_depth_skinning.vertex", "resources/shaders/shadow_depth_web.fragment", CONST_ZIP_FILE); - std::cout << "Load resurces step 12x2" << std::endl; - renderer.shaderManager.AddShaderFromFiles("default_shadow", "resources/shaders/default_shadow.vertex", "resources/shaders/default_shadow_web.fragment", CONST_ZIP_FILE); - std::cout << "Load resurces step 12x3" << std::endl; - renderer.shaderManager.AddShaderFromFiles("skinning_shadow", "resources/shaders/skinning_shadow.vertex", "resources/shaders/default_shadow_web.fragment", CONST_ZIP_FILE); - std::cout << "Load resurces step 12x4" << std::endl; - renderer.shaderManager.AddShaderFromFiles("fog_shadow", "resources/shaders/fog_shadow.vertex", "resources/shaders/fog_shadow_web.fragment", CONST_ZIP_FILE); - std::cout << "Load resurces step 12x5" << std::endl; - renderer.shaderManager.AddShaderFromFiles("fog_skinning_shadow", "resources/shaders/fog_skinning_shadow.vertex", "resources/shaders/fog_shadow_web.fragment", CONST_ZIP_FILE); - std::cout << "Load resurces step 12x6" << std::endl; - renderer.shaderManager.AddShaderFromFiles("cutsceneFade", "resources/shaders/default.vertex", "resources/shaders/cutscene_fade_web.fragment", CONST_ZIP_FILE); - renderer.shaderManager.AddShaderFromFiles("cutsceneBlack", "resources/shaders/default.vertex", "resources/shaders/cutscene_black_web.fragment", CONST_ZIP_FILE); - - -#else - renderer.shaderManager.AddShaderFromFiles("shadow_depth", "resources/shaders/shadow_depth.vertex", "resources/shaders/shadow_depth_desktop.fragment", CONST_ZIP_FILE); - renderer.shaderManager.AddShaderFromFiles("shadow_depth_skinning", "resources/shaders/shadow_depth_skinning.vertex", "resources/shaders/shadow_depth_desktop.fragment", CONST_ZIP_FILE); - renderer.shaderManager.AddShaderFromFiles("default_shadow", "resources/shaders/default_shadow.vertex", "resources/shaders/default_shadow_desktop.fragment", CONST_ZIP_FILE); - renderer.shaderManager.AddShaderFromFiles("skinning_shadow", "resources/shaders/skinning_shadow.vertex", "resources/shaders/default_shadow_desktop.fragment", CONST_ZIP_FILE); - renderer.shaderManager.AddShaderFromFiles("fog_shadow", "resources/shaders/fog_shadow.vertex", "resources/shaders/fog_shadow_desktop.fragment", CONST_ZIP_FILE); - renderer.shaderManager.AddShaderFromFiles("fog_skinning_shadow", "resources/shaders/fog_skinning_shadow.vertex", "resources/shaders/fog_shadow_desktop.fragment", CONST_ZIP_FILE); - renderer.shaderManager.AddShaderFromFiles("cutsceneFade", "resources/shaders/default.vertex", "resources/shaders/cutscene_fade_desktop.fragment", CONST_ZIP_FILE); - renderer.shaderManager.AddShaderFromFiles("cutsceneBlack", "resources/shaders/default.vertex", "resources/shaders/cutscene_black_desktop.fragment", CONST_ZIP_FILE); -#endif*/ - std::cout << "Load resurces step 13" << std::endl; try { diff --git a/src/Location.cpp b/src/Location.cpp index 0add3be..f0c764f 100644 --- a/src/Location.cpp +++ b/src/Location.cpp @@ -132,7 +132,7 @@ namespace ZL dialogueSystem.init(renderer, CONST_ZIP_FILE); dialogueSystem.loadDatabase(params.dialoguesJsonPath); - dialogueSystem.loadCutsceneDatabase("resources/dialogue/cutscenes004.json"); + dialogueSystem.loadCutsceneDatabase("resources/dialogue/cutscenes005.json"); dialogueSystem.setQuestJournal(journal); npcNameText = std::make_unique(); diff --git a/src/Location.h b/src/Location.h index 7bc1ff1..3eb0d4d 100644 --- a/src/Location.h +++ b/src/Location.h @@ -122,6 +122,7 @@ namespace ZL std::function requestClosePhone; std::function requestReturnToMainMenu; + std::function requestSetChatUnread; // Navigation editor — toggle with 'N', save with 'B', right-click to finalize polygon EditorMode editorMode = EditorMode::None; diff --git a/src/MenuManager.cpp b/src/MenuManager.cpp index 0e6e110..6c527c0 100644 --- a/src/MenuManager.cpp +++ b/src/MenuManager.cpp @@ -53,6 +53,22 @@ namespace ZL { return max(1, lines); } + static std::string trimChatPreview(const std::string& msg, int maxChars = 22) { + int charCount = 0; + int bytePos = 0; + const int len = static_cast(msg.size()); + while (bytePos < len && charCount < maxChars) { + const unsigned char c = static_cast(msg[bytePos]); + if (c < 0x80) bytePos += 1; + else if (c < 0xE0) bytePos += 2; + else if (c < 0xF0) bytePos += 3; + else bytePos += 4; + ++charCount; + } + if (bytePos >= len) return msg; + return msg.substr(0, bytePos) + "..."; + } + static std::string formatMoney(int amount) { bool negative = amount < 0; std::string digits = std::to_string(negative ? -amount : amount); @@ -459,14 +475,23 @@ namespace ZL { } void MenuManager::refreshChatUnreadIndicators() { - uiManager.setNodeVisible("chat1Unread", chatUnread_[0]); - uiManager.setNodeVisible("chat2Unread", chatUnread_[1]); - uiManager.setNodeVisible("chat3Unread", chatUnread_[2]); + static const char* kUnreadNodes[3] = { "chat1Unread", "chat2Unread", "chat3Unread" }; + static const char* kMsgNodes[3] = { "chat1msg", "chat2msg", "chat3msg" }; + for (int i = 0; i < 3; ++i) { + uiManager.setNodeVisible(kUnreadNodes[i], chatUnread_[i]); + if (!chatPreviewMsg_[i].empty()) + uiManager.setText(kMsgNodes[i], chatPreviewMsg_[i]); + } } - void MenuManager::setChatUnread(int chatIndex, bool unread) { + void MenuManager::setChatUnread(int chatIndex, bool unread, const std::string& previewMsg) { if (chatIndex < 0 || chatIndex > 2) return; chatUnread_[chatIndex] = unread; + if (!previewMsg.empty()) { + chatPreviewMsg_[chatIndex] = trimChatPreview(previewMsg); + } else if (!unread && !chatHistory_[chatIndex].empty()) { + chatPreviewMsg_[chatIndex] = trimChatPreview(chatHistory_[chatIndex].back().text); + } } void MenuManager::spendMoney(int amount) { @@ -575,6 +600,11 @@ namespace ZL { } void MenuManager::returnToPhoneChatList() { + if (activeChatIndex_ >= 0 && activeChatIndex_ <= 2 + && !chatHistory_[activeChatIndex_].empty()) { + chatPreviewMsg_[activeChatIndex_] = + trimChatPreview(chatHistory_[activeChatIndex_].back().text); + } activeChatIndex_ = -1; phoneChatVisibleBubbles_.clear(); uiManager.popMenu(); @@ -592,6 +622,11 @@ namespace ZL { void MenuManager::closePhoneEntirely() { + if (activeChatIndex_ >= 0 && activeChatIndex_ <= 2 + && !chatHistory_[activeChatIndex_].empty()) { + chatPreviewMsg_[activeChatIndex_] = + trimChatPreview(chatHistory_[activeChatIndex_].back().text); + } activeChatIndex_ = -1; state = GameState::Gameplay; phoneChatVisibleBubbles_.clear(); diff --git a/src/MenuManager.h b/src/MenuManager.h index e20eefd..8ebc12c 100644 --- a/src/MenuManager.h +++ b/src/MenuManager.h @@ -70,7 +70,7 @@ namespace ZL { void tutorialShowTaxiHint(); - void setChatUnread(int chatIndex, bool unread); + void setChatUnread(int chatIndex, bool unread, const std::string& previewMsg = ""); void spendMoney(int amount); int getMoney() const { return money_; } @@ -229,6 +229,7 @@ namespace ZL { std::vector visibleQuestIds; bool chatUnread_[3] = { true, true, true }; + std::string chatPreviewMsg_[3]; // empty = keep JSON hardcoded text int money_ = 5500; // Phone chat state diff --git a/src/ScriptEngine.cpp b/src/ScriptEngine.cpp index 1b0266c..b71713d 100644 --- a/src/ScriptEngine.cpp +++ b/src/ScriptEngine.cpp @@ -376,6 +376,22 @@ namespace ZL { loc->requestReturnToMainMenu(); }); + // set_chat_unread(chat_index, unread [, preview_msg]) + // chat_index: 0=first contact, 1=second, 2=third + // unread: true to mark as unread, false to mark as read + // preview_msg: optional string to show in the chat list preview (trimmed to 22 chars) + // When unread=false and preview_msg is omitted, preview auto-updates from chat history. + api.set_function("set_chat_unread", + [loc](int chatIndex, bool unread, sol::object previewMsg) { + if (!loc->requestSetChatUnread) { + std::cerr << "[script] set_chat_unread: callback not wired\n"; + return; + } + const std::string msg = previewMsg.is() + ? previewMsg.as() : ""; + loc->requestSetChatUnread(chatIndex, unread, msg); + }); + api.set_function("set_chat_callbacks", [this_impl = impl.get()](sol::object cb0, sol::object cb1, sol::object cb2) { if (cb0.is()) this_impl->chatOpenCallbacks[0] = cb0.as();