Fixing dialogues and cutscenes, minor bug fixing
This commit is contained in:
parent
2b32fce5e0
commit
fff5a9d4aa
@ -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
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@ -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": ""
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@ -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": ""
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@ -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": ""
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@ -38,7 +38,7 @@
|
|||||||
"endMs": 6133,
|
"endMs": 6133,
|
||||||
"fadeInMs": 0,
|
"fadeInMs": 0,
|
||||||
"fadeOutMs": 2000,
|
"fadeOutMs": 2000,
|
||||||
"easing": "EaseOutCubic",
|
"easing": "Linear",
|
||||||
"from": {
|
"from": {
|
||||||
"centerX": 0.51,
|
"centerX": 0.51,
|
||||||
"centerY": 0.5,
|
"centerY": 0.5,
|
||||||
@ -58,7 +58,7 @@
|
|||||||
"endMs": 6150,
|
"endMs": 6150,
|
||||||
"fadeInMs": 0,
|
"fadeInMs": 0,
|
||||||
"fadeOutMs": 2000,
|
"fadeOutMs": 2000,
|
||||||
"easing": "EaseOutCubic",
|
"easing": "Linear",
|
||||||
"from": {
|
"from": {
|
||||||
"centerX": 0.52,
|
"centerX": 0.52,
|
||||||
"centerY": 0.5,
|
"centerY": 0.5,
|
||||||
@ -78,7 +78,7 @@
|
|||||||
"endMs": 6167,
|
"endMs": 6167,
|
||||||
"fadeInMs": 0,
|
"fadeInMs": 0,
|
||||||
"fadeOutMs": 2000,
|
"fadeOutMs": 2000,
|
||||||
"easing": "EaseOutCubic",
|
"easing": "Linear",
|
||||||
"from": {
|
"from": {
|
||||||
"centerX": 0.56,
|
"centerX": 0.56,
|
||||||
"centerY": 0.36,
|
"centerY": 0.36,
|
||||||
@ -452,12 +452,12 @@
|
|||||||
"easing": "Linear",
|
"easing": "Linear",
|
||||||
"from": {
|
"from": {
|
||||||
"centerX": 0.5,
|
"centerX": 0.5,
|
||||||
"centerY": 0.5,
|
"centerY": 0.55,
|
||||||
"scale": 1
|
"scale": 1
|
||||||
},
|
},
|
||||||
"to": {
|
"to": {
|
||||||
"centerX": 0.5,
|
"centerX": 0.5,
|
||||||
"centerY": 0.5,
|
"centerY": 0.55,
|
||||||
"scale": 1.1
|
"scale": 1.1
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -472,12 +472,12 @@
|
|||||||
"easing": "Linear",
|
"easing": "Linear",
|
||||||
"from": {
|
"from": {
|
||||||
"centerX": 0.5,
|
"centerX": 0.5,
|
||||||
"centerY": 0.7,
|
"centerY": 0.6,
|
||||||
"scale": 1.3
|
"scale": 1.3
|
||||||
},
|
},
|
||||||
"to": {
|
"to": {
|
||||||
"centerX": 0.5,
|
"centerX": 0.5,
|
||||||
"centerY": 0.7,
|
"centerY": 0.6,
|
||||||
"scale": 1.5
|
"scale": 1.5
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -492,12 +492,12 @@
|
|||||||
"easing": "Linear",
|
"easing": "Linear",
|
||||||
"from": {
|
"from": {
|
||||||
"centerX": 0.5,
|
"centerX": 0.5,
|
||||||
"centerY": 0.5,
|
"centerY": 0.35,
|
||||||
"scale": 1
|
"scale": 1
|
||||||
},
|
},
|
||||||
"to": {
|
"to": {
|
||||||
"centerX": 0.5,
|
"centerX": 0.5,
|
||||||
"centerY": 0.5,
|
"centerY": 0.35,
|
||||||
"scale": 1
|
"scale": 1
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -512,12 +512,12 @@
|
|||||||
"easing": "Linear",
|
"easing": "Linear",
|
||||||
"from": {
|
"from": {
|
||||||
"centerX": 0.5,
|
"centerX": 0.5,
|
||||||
"centerY": 0.5,
|
"centerY": 0.6,
|
||||||
"scale": 1
|
"scale": 1
|
||||||
},
|
},
|
||||||
"to": {
|
"to": {
|
||||||
"centerX": 0.5,
|
"centerX": 0.5,
|
||||||
"centerY": 0.5,
|
"centerY": 0.6,
|
||||||
"scale": 1
|
"scale": 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -183,9 +183,20 @@
|
|||||||
"speaker": "Айпери",
|
"speaker": "Айпери",
|
||||||
"portrait": "resources/dialogue/portrait_phone.png",
|
"portrait": "resources/dialogue/portrait_phone.png",
|
||||||
"text": "Так что жду тебя в универе! Не вздумай прогулять!",
|
"text": "Так что жду тебя в универе! Не вздумай прогулять!",
|
||||||
"next": "end_1",
|
"next": "setflag_1",
|
||||||
"chatBubble": "in",
|
"chatBubble": "in",
|
||||||
"questUnlock": "aiperi_knife"
|
"questUnlock": "aiperi_knife"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "setflag_1",
|
||||||
|
"type": "SetFlag",
|
||||||
|
"effects": [
|
||||||
|
{
|
||||||
|
"flag": "aiperi_knife_aware",
|
||||||
|
"value": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"next": "end_1"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "end_1",
|
"id": "end_1",
|
||||||
@ -194,6 +205,25 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"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",
|
"id": "dialog_no_sleep001",
|
||||||
"start": "line_1",
|
"start": "line_1",
|
||||||
@ -668,7 +698,8 @@
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"cutscenes": [{
|
"cutscenes": [
|
||||||
|
{
|
||||||
"id": "sleep_cutscene001",
|
"id": "sleep_cutscene001",
|
||||||
"background": "resources/test_cutscene001.png",
|
"background": "resources/test_cutscene001.png",
|
||||||
"onFadeInCallback": "on_sleep_cutscene",
|
"onFadeInCallback": "on_sleep_cutscene",
|
||||||
@ -680,14 +711,34 @@
|
|||||||
"cameraTrack": [
|
"cameraTrack": [
|
||||||
{
|
{
|
||||||
"durationMs": 3000,
|
"durationMs": 3000,
|
||||||
"from": { "focusX": 0.3, "focusY": 0.50, "zoom": 1.10, "rotationDeg": 0.0 },
|
"from": {
|
||||||
"to": { "focusX": 0.7, "focusY": 0.50, "zoom": 1.00, "rotationDeg": 0.0 },
|
"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"
|
"easing": "EaseInOutSine"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"durationMs": 3000,
|
"durationMs": 3000,
|
||||||
"from": { "focusX": 0.3, "focusY": 0.50, "zoom": 1.0, "rotationDeg": 0.0 },
|
"from": {
|
||||||
"to": { "focusX": 0.7, "focusY": 0.50, "zoom": 1.1, "rotationDeg": 0.0 },
|
"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"
|
"easing": "EaseInOutCubic"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
@ -214,50 +214,192 @@
|
|||||||
"type": "End"
|
"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
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"cutscenes": [
|
"next": "end_1"
|
||||||
{
|
|
||||||
"id": "darklands_exit001",
|
|
||||||
"background": "resources/test_cutscene001.png",
|
|
||||||
"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,
|
"id": "end_1",
|
||||||
"from": { "focusX": 0.3, "focusY": 0.50, "zoom": 1.0, "rotationDeg": 0.0 },
|
"luaCallback": "on_aiperi_dialog_over",
|
||||||
"to": { "focusX": 0.7, "focusY": 0.50, "zoom": 1.1, "rotationDeg": 0.0 },
|
"type": "End"
|
||||||
"easing": "EaseInOutCubic"
|
|
||||||
}
|
}
|
||||||
],
|
]
|
||||||
"lines": [
|
|
||||||
{
|
|
||||||
"speaker": "Бекзат",
|
|
||||||
"portrait": "resources/dialogue/portrait_hero_neutral.png",
|
|
||||||
"text": "Кажется, яркий свет луны разбудил меня от этого сна.",
|
|
||||||
"durationMs": 3000
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"speaker": "Бекзат",
|
"id": "dialog_chat_aiperi002",
|
||||||
"portrait": "resources/dialogue/portrait_hero_neutral.png",
|
"start": "line_1",
|
||||||
"text": "Жесть вообще, хочу спать.",
|
"nodes": [
|
||||||
"durationMs": 3000
|
{
|
||||||
|
"id": "line_1",
|
||||||
|
"type": "Line",
|
||||||
|
"speaker": "Айпери",
|
||||||
|
"portrait": "resources/dialogue/portrait_phone.png",
|
||||||
|
"text": "Бекзат, ты где? Я жду тебя возле лестницы.",
|
||||||
|
"next": "end_1",
|
||||||
|
"chatBubble": "in"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"speaker": "Бекзат",
|
"id": "end_1",
|
||||||
"portrait": "rresources/dialogue/portrait_hero_neutral.png",
|
"type": "End"
|
||||||
"text": "Который час?",
|
|
||||||
"durationMs": 2000,
|
|
||||||
"background": "resources/test_cutscene001.png"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2039,6 +2039,297 @@
|
|||||||
"next": "line_17"
|
"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": []
|
||||||
|
}
|
||||||
2450
resources/dialogue/uni_interior_dialogues_005.json
Normal file
2450
resources/dialogue/uni_interior_dialogues_005.json
Normal file
File diff suppressed because it is too large
Load Diff
@ -204,34 +204,49 @@ game_api.set_enter_night_callback(
|
|||||||
end
|
end
|
||||||
)
|
)
|
||||||
|
|
||||||
local chat0_opened = false
|
|
||||||
local chat1_opened = false
|
|
||||||
local chat2_opened = false
|
|
||||||
|
|
||||||
game_api.set_chat_callbacks(
|
game_api.set_chat_callbacks(
|
||||||
function()
|
function()
|
||||||
if not chat0_opened then
|
if (not game_api.is_night()) and (not game_api.is_dawn()) then
|
||||||
chat0_opened = true
|
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")
|
game_api.start_dialogue("dialog_chat_aiperi001")
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end,
|
end,
|
||||||
function()
|
function()
|
||||||
if not chat1_opened then
|
local parents_chat_opened = game_api.getIntValue("parents_chat_opened")
|
||||||
chat1_opened = true
|
if parents_chat_opened == 0 then
|
||||||
|
game_api.setIntValue("parents_chat_opened", 1)
|
||||||
game_api.start_dialogue("dialog_chat_parents001")
|
game_api.start_dialogue("dialog_chat_parents001")
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
function()
|
function()
|
||||||
if not chat2_opened then
|
local news_chat_opened = game_api.getIntValue("news_chat_opened")
|
||||||
chat2_opened = true
|
if news_chat_opened == 0 then
|
||||||
|
game_api.setIntValue("news_chat_opened", 1)
|
||||||
game_api.start_dialogue("dialog_chat_news001")
|
game_api.start_dialogue("dialog_chat_news001")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
)
|
)
|
||||||
|
|
||||||
function on_aiperi_dialog_over()
|
function on_aiperi_dialog_over()
|
||||||
print("on_aiperi_dialog_over called")
|
|
||||||
|
|
||||||
game_api.close_phone()
|
game_api.close_phone()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -55,6 +55,7 @@ game_api.set_darklands_callbacks(
|
|||||||
print("Setting to day 1----")
|
print("Setting to day 1----")
|
||||||
game_api.setIntValue("day", 1)
|
game_api.setIntValue("day", 1)
|
||||||
game_api.set_dawn()
|
game_api.set_dawn()
|
||||||
|
game_api.setIntValue("morning_player_can_leave", 1)
|
||||||
end
|
end
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -113,3 +114,45 @@ game_api.set_trigger_zone_callbacks("taxi_zone001",
|
|||||||
taxi_zone001_enter_callback,
|
taxi_zone001_enter_callback,
|
||||||
nil
|
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
|
||||||
|
)
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
hall_door_opened = false
|
hall_door_opened = false
|
||||||
teacher_door_opened = false
|
teacher_door_opened = false
|
||||||
lection_is_over = false
|
--lection_is_over = false
|
||||||
|
|
||||||
player_hold_book = false
|
player_hold_book = false
|
||||||
player_hold_knife = false
|
player_hold_knife = false
|
||||||
@ -35,13 +35,25 @@ function dialog_aiperi_give_key()
|
|||||||
game_api.quest_unlock("aiperi_knife")
|
game_api.quest_unlock("aiperi_knife")
|
||||||
game_api.quest_set_objective_completed("aiperi_knife", "aiperi_knife_keys")
|
game_api.quest_set_objective_completed("aiperi_knife", "aiperi_knife_keys")
|
||||||
player_hold_key = true
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
function lection_hall_zone001_enter_callback()
|
function lection_hall_zone001_enter_callback()
|
||||||
--game_api.start_dialogue("")
|
--game_api.start_dialogue("")
|
||||||
--Start cutscene
|
--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.player_stop()
|
||||||
game_api.start_cutscene("lection_cutscene001")
|
game_api.start_cutscene("lection_cutscene001")
|
||||||
game_api.quest_set_objective_completed("study_beginning", "study_beginning_lecture")
|
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 (day == 0) then
|
||||||
if (player_hold_knife == false) 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
|
if (player_hold_key) then
|
||||||
game_api.start_dialogue("knife_dialog002")
|
game_api.start_dialogue("knife_dialog002")
|
||||||
else
|
else
|
||||||
@ -69,7 +82,10 @@ function knife_dialog_zone001_enter_callback()
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
if (game_api.is_night() == false) then
|
if (game_api.is_night() == false) then
|
||||||
|
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")
|
game_api.start_dialogue("knife_dialog_second001")
|
||||||
|
end
|
||||||
game_api.set_trigger_zone_enabled(1, false)
|
game_api.set_trigger_zone_enabled(1, false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -81,7 +97,8 @@ function knife_dialog_zone001_exit_callback()
|
|||||||
|
|
||||||
if (day == 0) then
|
if (day == 0) then
|
||||||
print("knife_dialog_zone001_exit_callback--!")
|
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
|
if (teacher_door_opened) then
|
||||||
game_api.switch_navigation(3)
|
game_api.switch_navigation(3)
|
||||||
else
|
else
|
||||||
@ -137,17 +154,6 @@ function on_book_pickup()
|
|||||||
end
|
end
|
||||||
|
|
||||||
function on_bookshelf_clicked()
|
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()
|
on_book_pickup()
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -157,6 +163,16 @@ function on_npc_interact(npc_index)
|
|||||||
if npc_index == 1 then
|
if npc_index == 1 then
|
||||||
local day = game_api.getIntValue("day")
|
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 (day == 0) then
|
||||||
if (player_hold_key) then
|
if (player_hold_key) then
|
||||||
game_api.start_dialogue("knife_dialog002")
|
game_api.start_dialogue("knife_dialog002")
|
||||||
@ -165,7 +181,7 @@ function on_npc_interact(npc_index)
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
game_api.start_dialogue("dialog_aiperi_morning001")
|
game_api.start_dialogue("dialog_aiperi_morning001")
|
||||||
end
|
end]]
|
||||||
end
|
end
|
||||||
if npc_index == 0 then
|
if npc_index == 0 then
|
||||||
if (player_ghost_aware == 1) then
|
if (player_ghost_aware == 1) then
|
||||||
@ -210,13 +226,6 @@ function on_quest_over()
|
|||||||
game_api.start_cutscene("game_complete_cutscene001")
|
game_api.start_cutscene("game_complete_cutscene001")
|
||||||
end
|
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()
|
function on_darklands_over()
|
||||||
game_api.set_player_hp(10)
|
game_api.set_player_hp(10)
|
||||||
game_api.resetPlayerAfterDeath()
|
game_api.resetPlayerAfterDeath()
|
||||||
@ -232,12 +241,15 @@ end
|
|||||||
function on_library_door_click()
|
function on_library_door_click()
|
||||||
print("on_library_door_click---")
|
print("on_library_door_click---")
|
||||||
local day = game_api.getIntValue("day")
|
local day = game_api.getIntValue("day")
|
||||||
|
local lection_is_over = game_api.getIntValue("lection_is_over")
|
||||||
|
|
||||||
if (day == 0) then
|
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")
|
game_api.start_dialogue("door_night_dialog001")
|
||||||
else
|
else
|
||||||
if (not lection_is_over) then
|
if (lection_is_over == 0) then
|
||||||
game_api.start_dialogue("door_dialog001")
|
game_api.start_dialogue("door_dialog001")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -404,25 +416,6 @@ function on_s1_door_click()
|
|||||||
else
|
else
|
||||||
game_api.start_dialogue("door_dialog001")
|
game_api.start_dialogue("door_dialog001")
|
||||||
end
|
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
|
end
|
||||||
|
|
||||||
function on_s2_door_click()
|
function on_s2_door_click()
|
||||||
@ -435,28 +428,9 @@ function on_s2_door_click()
|
|||||||
else
|
else
|
||||||
game_api.start_dialogue("door_dialog001")
|
game_api.start_dialogue("door_dialog001")
|
||||||
end
|
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
|
end
|
||||||
|
|
||||||
function on_n2_door_click()
|
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_can_open_door_index)
|
print(morning_can_open_door_index)
|
||||||
print("morning_did_open_door_index")
|
print("morning_did_open_door_index")
|
||||||
@ -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_North_1_001", 1)
|
||||||
game_api.set_object_alpha("Room_Cover_Main_Hall_001", 1)
|
game_api.set_object_alpha("Room_Cover_Main_Hall_001", 1)
|
||||||
game_api.activate_interactive_object("Note001")
|
game_api.activate_interactive_object("Note001")
|
||||||
|
|
||||||
teacher_door_opened = false
|
teacher_door_opened = false
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -574,9 +547,16 @@ end
|
|||||||
|
|
||||||
game_api.set_cutscene_callback("lection_cutscene001", function()
|
game_api.set_cutscene_callback("lection_cutscene001", function()
|
||||||
print("Cutscene done!")
|
print("Cutscene done!")
|
||||||
lection_is_over = true
|
game_api.setIntValue("lection_is_over", 1)
|
||||||
|
|
||||||
game_api.set_npc_enabled(1, true)
|
game_api.set_npc_enabled(1, true)
|
||||||
game_api.npc_walk_to(0, 0.758123, 0, 6.50063, on_teacher_arrived_intermediate)
|
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)
|
end)
|
||||||
|
|
||||||
|
|
||||||
@ -590,7 +570,7 @@ function on_report_card_pickup()
|
|||||||
local player_ghost_aware = game_api.getIntValue("ghost_aware")
|
local player_ghost_aware = game_api.getIntValue("ghost_aware")
|
||||||
if player_ghost_aware == 1 then
|
if player_ghost_aware == 1 then
|
||||||
local player_has_report_card = game_api.getIntValue("player_has_report_card")
|
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
|
if (player_has_report_card == 1) then
|
||||||
game_api.start_dialogue("dialog_report_card003") -- Еще рано возвращать зачетку обратно в шкаф
|
game_api.start_dialogue("dialog_report_card003") -- Еще рано возвращать зачетку обратно в шкаф
|
||||||
@ -612,8 +592,6 @@ end
|
|||||||
|
|
||||||
first_time_darklands = true
|
first_time_darklands = true
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
game_api.set_darklands_callbacks(
|
game_api.set_darklands_callbacks(
|
||||||
function()
|
function()
|
||||||
if (first_time_darklands) then
|
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
|
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.setIntValue("morning_player_can_leave", 1)
|
||||||
game_api.getIntValue("morning_aiperi_save_again", 0)
|
game_api.setIntValue("morning_aiperi_save_again", 0)
|
||||||
else
|
else
|
||||||
game_api.setIntValue("morning_player_can_leave", 0)
|
game_api.setIntValue("morning_player_can_leave", 0)
|
||||||
local morning_aiperi_talked = game_api.getIntValue("morning_aiperi_talked")
|
local morning_aiperi_talked = game_api.getIntValue("morning_aiperi_talked")
|
||||||
if (morning_aiperi_talked == 1) then
|
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
|
end
|
||||||
end
|
end
|
||||||
@ -883,7 +861,6 @@ function setDay1MorningSetup()
|
|||||||
end
|
end
|
||||||
|
|
||||||
function setDay1NightSetup()
|
function setDay1NightSetup()
|
||||||
|
|
||||||
teacher_door_opened = false
|
teacher_door_opened = false
|
||||||
|
|
||||||
print("setDay1NightSetup")
|
print("setDay1NightSetup")
|
||||||
@ -971,7 +948,7 @@ game_api.set_enter_night_callback(
|
|||||||
end
|
end
|
||||||
)
|
)
|
||||||
|
|
||||||
|
--[[
|
||||||
game_api.set_chat_callbacks(
|
game_api.set_chat_callbacks(
|
||||||
function()
|
function()
|
||||||
if (game_api.is_night()) then
|
if (game_api.is_night()) then
|
||||||
@ -992,10 +969,107 @@ game_api.set_chat_callbacks(
|
|||||||
nil,
|
nil,
|
||||||
nil
|
nil
|
||||||
)
|
)
|
||||||
|
]]
|
||||||
|
|
||||||
--[[function on_aiperi_give_keys()
|
|
||||||
game_api.pickup_item("all_keys")
|
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
|
||||||
|
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_opens_door()
|
function on_aiperi_opens_door()
|
||||||
print("on_aiperi_opens_door")
|
print("on_aiperi_opens_door")
|
||||||
@ -1163,7 +1237,6 @@ game_api.set_location_callbacks(
|
|||||||
end
|
end
|
||||||
|
|
||||||
if (day > 0) and resetState then
|
if (day > 0) and resetState then
|
||||||
|
|
||||||
if (game_api.is_darklands()) then
|
if (game_api.is_darklands()) then
|
||||||
--Currently not possible
|
--Currently not possible
|
||||||
print("Entered darklands setup")
|
print("Entered darklands setup")
|
||||||
@ -1223,7 +1296,6 @@ game_api.set_location_callbacks(
|
|||||||
print("setDay1MorningSetup entered-")
|
print("setDay1MorningSetup entered-")
|
||||||
setDay1MorningSetup()
|
setDay1MorningSetup()
|
||||||
end
|
end
|
||||||
|
|
||||||
end,
|
end,
|
||||||
function()
|
function()
|
||||||
print("Exit location uni interior")
|
print("Exit location uni interior")
|
||||||
|
|||||||
44
src/Game.cpp
44
src/Game.cpp
@ -213,7 +213,7 @@ namespace ZL
|
|||||||
LocationSetup uniInteriorParams;
|
LocationSetup uniInteriorParams;
|
||||||
uniInteriorParams.gameObjectsJsonPath = "resources/config2/gameobjects_uni_interior_x.json";
|
uniInteriorParams.gameObjectsJsonPath = "resources/config2/gameobjects_uni_interior_x.json";
|
||||||
uniInteriorParams.npcsJsonPath = "resources/config2/npcs_uni_interior.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 = {
|
uniInteriorParams.navigationJsonPaths = {
|
||||||
@ -296,6 +296,9 @@ namespace ZL
|
|||||||
this->currentLocation = nullptr;
|
this->currentLocation = nullptr;
|
||||||
menuManager.showMainMenu();
|
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)
|
if (locations["uni_interior"]->player)
|
||||||
locations["uni_interior"]->player->onDeathAnimComplete = [this]() { startDarklandsTransition(); };
|
locations["uni_interior"]->player->onDeathAnimComplete = [this]() { startDarklandsTransition(); };
|
||||||
for (auto& npc : locations["uni_interior"]->npcs) {
|
for (auto& npc : locations["uni_interior"]->npcs) {
|
||||||
@ -335,6 +338,9 @@ namespace ZL
|
|||||||
locations["uni_exterior"]->requestDarklandsTransition = [this]() { return startDarklandsTransition(); };
|
locations["uni_exterior"]->requestDarklandsTransition = [this]() { return startDarklandsTransition(); };
|
||||||
locations["uni_exterior"]->requestClosePhone = [this]() { menuManager.closePhoneEntirely(); };
|
locations["uni_exterior"]->requestClosePhone = [this]() { menuManager.closePhoneEntirely(); };
|
||||||
locations["uni_exterior"]->requestReturnToMainMenu = [this]() { menuManager.showMainMenu(); };
|
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)
|
if (locations["uni_exterior"]->player)
|
||||||
locations["uni_exterior"]->player->onDeathAnimComplete = [this]() { startDarklandsTransition(); };
|
locations["uni_exterior"]->player->onDeathAnimComplete = [this]() { startDarklandsTransition(); };
|
||||||
|
|
||||||
@ -379,6 +385,9 @@ namespace ZL
|
|||||||
locations["location_dorm"]->requestDarklandsTransition = [this]() { return startDarklandsTransition(); };
|
locations["location_dorm"]->requestDarklandsTransition = [this]() { return startDarklandsTransition(); };
|
||||||
locations["location_dorm"]->requestClosePhone = [this]() { menuManager.closePhoneEntirely(); };
|
locations["location_dorm"]->requestClosePhone = [this]() { menuManager.closePhoneEntirely(); };
|
||||||
locations["location_dorm"]->requestReturnToMainMenu = [this]() { menuManager.showMainMenu(); };
|
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)
|
if (locations["location_dorm"]->player)
|
||||||
locations["location_dorm"]->player->onDeathAnimComplete = [this]() { startDarklandsTransition(); };
|
locations["location_dorm"]->player->onDeathAnimComplete = [this]() { startDarklandsTransition(); };
|
||||||
|
|
||||||
@ -518,39 +527,6 @@ namespace ZL
|
|||||||
if (currentLocation) currentLocation->dialogueSystem.skipCutscene();
|
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;
|
std::cout << "Load resurces step 13" << std::endl;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|||||||
@ -132,7 +132,7 @@ namespace ZL
|
|||||||
|
|
||||||
dialogueSystem.init(renderer, CONST_ZIP_FILE);
|
dialogueSystem.init(renderer, CONST_ZIP_FILE);
|
||||||
dialogueSystem.loadDatabase(params.dialoguesJsonPath);
|
dialogueSystem.loadDatabase(params.dialoguesJsonPath);
|
||||||
dialogueSystem.loadCutsceneDatabase("resources/dialogue/cutscenes004.json");
|
dialogueSystem.loadCutsceneDatabase("resources/dialogue/cutscenes005.json");
|
||||||
dialogueSystem.setQuestJournal(journal);
|
dialogueSystem.setQuestJournal(journal);
|
||||||
|
|
||||||
npcNameText = std::make_unique<TextRenderer>();
|
npcNameText = std::make_unique<TextRenderer>();
|
||||||
|
|||||||
@ -122,6 +122,7 @@ namespace ZL
|
|||||||
|
|
||||||
std::function<void()> requestClosePhone;
|
std::function<void()> requestClosePhone;
|
||||||
std::function<void()> requestReturnToMainMenu;
|
std::function<void()> requestReturnToMainMenu;
|
||||||
|
std::function<void(int, bool, const std::string&)> requestSetChatUnread;
|
||||||
|
|
||||||
// Navigation editor — toggle with 'N', save with 'B', right-click to finalize polygon
|
// Navigation editor — toggle with 'N', save with 'B', right-click to finalize polygon
|
||||||
EditorMode editorMode = EditorMode::None;
|
EditorMode editorMode = EditorMode::None;
|
||||||
|
|||||||
@ -53,6 +53,22 @@ namespace ZL {
|
|||||||
return max(1, lines);
|
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<int>(msg.size());
|
||||||
|
while (bytePos < len && charCount < maxChars) {
|
||||||
|
const unsigned char c = static_cast<unsigned char>(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) {
|
static std::string formatMoney(int amount) {
|
||||||
bool negative = amount < 0;
|
bool negative = amount < 0;
|
||||||
std::string digits = std::to_string(negative ? -amount : amount);
|
std::string digits = std::to_string(negative ? -amount : amount);
|
||||||
@ -459,14 +475,23 @@ namespace ZL {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void MenuManager::refreshChatUnreadIndicators() {
|
void MenuManager::refreshChatUnreadIndicators() {
|
||||||
uiManager.setNodeVisible("chat1Unread", chatUnread_[0]);
|
static const char* kUnreadNodes[3] = { "chat1Unread", "chat2Unread", "chat3Unread" };
|
||||||
uiManager.setNodeVisible("chat2Unread", chatUnread_[1]);
|
static const char* kMsgNodes[3] = { "chat1msg", "chat2msg", "chat3msg" };
|
||||||
uiManager.setNodeVisible("chat3Unread", chatUnread_[2]);
|
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;
|
if (chatIndex < 0 || chatIndex > 2) return;
|
||||||
chatUnread_[chatIndex] = unread;
|
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) {
|
void MenuManager::spendMoney(int amount) {
|
||||||
@ -575,6 +600,11 @@ namespace ZL {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void MenuManager::returnToPhoneChatList() {
|
void MenuManager::returnToPhoneChatList() {
|
||||||
|
if (activeChatIndex_ >= 0 && activeChatIndex_ <= 2
|
||||||
|
&& !chatHistory_[activeChatIndex_].empty()) {
|
||||||
|
chatPreviewMsg_[activeChatIndex_] =
|
||||||
|
trimChatPreview(chatHistory_[activeChatIndex_].back().text);
|
||||||
|
}
|
||||||
activeChatIndex_ = -1;
|
activeChatIndex_ = -1;
|
||||||
phoneChatVisibleBubbles_.clear();
|
phoneChatVisibleBubbles_.clear();
|
||||||
uiManager.popMenu();
|
uiManager.popMenu();
|
||||||
@ -592,6 +622,11 @@ namespace ZL {
|
|||||||
|
|
||||||
|
|
||||||
void MenuManager::closePhoneEntirely() {
|
void MenuManager::closePhoneEntirely() {
|
||||||
|
if (activeChatIndex_ >= 0 && activeChatIndex_ <= 2
|
||||||
|
&& !chatHistory_[activeChatIndex_].empty()) {
|
||||||
|
chatPreviewMsg_[activeChatIndex_] =
|
||||||
|
trimChatPreview(chatHistory_[activeChatIndex_].back().text);
|
||||||
|
}
|
||||||
activeChatIndex_ = -1;
|
activeChatIndex_ = -1;
|
||||||
state = GameState::Gameplay;
|
state = GameState::Gameplay;
|
||||||
phoneChatVisibleBubbles_.clear();
|
phoneChatVisibleBubbles_.clear();
|
||||||
|
|||||||
@ -70,7 +70,7 @@ namespace ZL {
|
|||||||
|
|
||||||
void tutorialShowTaxiHint();
|
void tutorialShowTaxiHint();
|
||||||
|
|
||||||
void setChatUnread(int chatIndex, bool unread);
|
void setChatUnread(int chatIndex, bool unread, const std::string& previewMsg = "");
|
||||||
|
|
||||||
void spendMoney(int amount);
|
void spendMoney(int amount);
|
||||||
int getMoney() const { return money_; }
|
int getMoney() const { return money_; }
|
||||||
@ -229,6 +229,7 @@ namespace ZL {
|
|||||||
std::vector<std::string> visibleQuestIds;
|
std::vector<std::string> visibleQuestIds;
|
||||||
|
|
||||||
bool chatUnread_[3] = { true, true, true };
|
bool chatUnread_[3] = { true, true, true };
|
||||||
|
std::string chatPreviewMsg_[3]; // empty = keep JSON hardcoded text
|
||||||
int money_ = 5500;
|
int money_ = 5500;
|
||||||
|
|
||||||
// Phone chat state
|
// Phone chat state
|
||||||
|
|||||||
@ -376,6 +376,22 @@ namespace ZL {
|
|||||||
loc->requestReturnToMainMenu();
|
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<std::string>()
|
||||||
|
? previewMsg.as<std::string>() : "";
|
||||||
|
loc->requestSetChatUnread(chatIndex, unread, msg);
|
||||||
|
});
|
||||||
|
|
||||||
api.set_function("set_chat_callbacks",
|
api.set_function("set_chat_callbacks",
|
||||||
[this_impl = impl.get()](sol::object cb0, sol::object cb1, sol::object cb2) {
|
[this_impl = impl.get()](sol::object cb0, sol::object cb1, sol::object cb2) {
|
||||||
if (cb0.is<sol::protected_function>()) this_impl->chatOpenCallbacks[0] = cb0.as<sol::protected_function>();
|
if (cb0.is<sol::protected_function>()) this_impl->chatOpenCallbacks[0] = cb0.as<sol::protected_function>();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user