Working on cutscenes, minor fixing

This commit is contained in:
Vladislav Khorev 2026-06-07 15:50:14 +03:00
parent 6349859e66
commit cfbd29d5b1
3 changed files with 752 additions and 2 deletions

View File

@ -0,0 +1,722 @@
{
"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": ""
}
]
},
{
"id": "computer_cutscene001",
"skippable": true,
"durationMs": 9000,
"fadeOutMs": 500,
"fadeInMs": 500,
"endFadeOutMs": 0,
"endFadeInMs": 500,
"onFadeInCallback": "on_sleep_cutscene",
"imageSegments": [
{
"path": "resources/black.png",
"width": 1280,
"height": 720,
"startMs": 0,
"endMs": 9000,
"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/cutscene2/scr1.png",
"width": 1280,
"height": 720,
"startMs": 0,
"endMs": 2510,
"fadeInMs": 500,
"fadeOutMs": 0,
"easing": "Linear",
"from": {
"centerX": 0.5,
"centerY": 0.5,
"scale": 1
},
"to": {
"centerX": 0.5,
"centerY": 0.5,
"scale": 1.1
}
},
{
"path": "resources/w/cutscenes/cutscene2/scr2.png",
"width": 1280,
"height": 720,
"startMs": 956,
"endMs": 3522,
"fadeInMs": 1500,
"fadeOutMs": 500,
"easing": "Linear",
"from": {
"centerX": 0.5,
"centerY": 0.7,
"scale": 1.3
},
"to": {
"centerX": 0.5,
"centerY": 0.7,
"scale": 1.5
}
},
{
"path": "resources/w/cutscenes/cutscene2/scr4.png",
"width": 1280,
"height": 720,
"startMs": 4849,
"endMs": 6964,
"fadeInMs": 0,
"fadeOutMs": 500,
"easing": "Linear",
"from": {
"centerX": 0.5,
"centerY": 0.5,
"scale": 1
},
"to": {
"centerX": 0.5,
"centerY": 0.5,
"scale": 1
}
},
{
"path": "resources/w/cutscenes/cutscene2/scr3.png",
"width": 1280,
"height": 720,
"startMs": 3594,
"endMs": 6478,
"fadeInMs": 500,
"fadeOutMs": 1500,
"easing": "Linear",
"from": {
"centerX": 0.5,
"centerY": 0.5,
"scale": 1
},
"to": {
"centerX": 0.5,
"centerY": 0.5,
"scale": 1
}
}
],
"lines": [
{
"speaker": "",
"text": "Я начал делать презентацию по книге.",
"durationMs": 3000,
"waitForConfirm": false,
"luaCallback": ""
},
{
"speaker": "",
"text": "Книга была такая скучная что я уснул.",
"durationMs": 3000,
"waitForConfirm": false,
"luaCallback": ""
},
{
"speaker": "",
"text": "И я проснулся уже ночью...",
"durationMs": 3000,
"waitForConfirm": false,
"luaCallback": ""
}
]
},
{
"id": "darklands_exit001",
"skippable": true,
"durationMs": 12500,
"fadeOutMs": 0,
"fadeInMs": 500,
"endFadeOutMs": 0,
"endFadeInMs": 500,
"onFadeInCallback": "on_darklands_over",
"imageSegments": [
{
"path": "resources/black.png",
"width": 1280,
"height": 720,
"startMs": 0,
"endMs": 12500,
"fadeInMs": 0,
"fadeOutMs": 0,
"easing": "Linear",
"from": {
"centerX": 0.5,
"centerY": 0.5,
"scale": 1
},
"to": {
"centerX": 0.5,
"centerY": 0.5,
"scale": 1
}
}
],
"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": ""
}
]
},
{
"id": "sleep_cutscene001",
"skippable": true,
"durationMs": 5000,
"fadeOutMs": 500,
"fadeInMs": 500,
"endFadeOutMs": 0,
"endFadeInMs": 500,
"onFadeInCallback": "on_sleep_cutscene",
"imageSegments": [
{
"path": "resources/black.png",
"width": 1280,
"height": 720,
"startMs": 0,
"endMs": 6500,
"fadeInMs": 0,
"fadeOutMs": 0,
"easing": "Linear",
"from": {
"centerX": 0.5,
"centerY": 0.5,
"scale": 1
},
"to": {
"centerX": 0.5,
"centerY": 0.5,
"scale": 1
}
}
],
"lines": [
{
"speaker": "",
"text": "Я завалился спать и уснул.",
"durationMs": 3000,
"waitForConfirm": false,
"luaCallback": ""
},
{
"speaker": "",
"text": "Я проснулся на следующий день уже после обеда.",
"durationMs": 3000,
"waitForConfirm": false,
"luaCallback": ""
}
]
},
{
"id": "cutscene_final001",
"skippable": true,
"durationMs": 5000,
"fadeOutMs": 0,
"fadeInMs": 500,
"endFadeOutMs": 500,
"endFadeInMs": 500,
"onFadeInCallback": "",
"imageSegments": [
{
"path": "resources/black.png",
"width": 1280,
"height": 720,
"startMs": 0,
"endMs": 12500,
"fadeInMs": 0,
"fadeOutMs": 0,
"easing": "Linear",
"from": {
"centerX": 0.5,
"centerY": 0.5,
"scale": 1
},
"to": {
"centerX": 0.5,
"centerY": 0.5,
"scale": 1
}
}
],
"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": ""
}
]
}
]
}

29
resources/w/Cube_001.txt Normal file
View File

@ -0,0 +1,29 @@
===Vertices (Split by UV/Normal): 14
V 0: Pos(-1.0, 1.0, 1.0) Norm(-0.577328, 0.577361, 0.577361) UV(0.875, 0.5)
V 1: Pos(1.0, -1.0, 1.0) Norm(0.577328, -0.577361, 0.577361) UV(0.625, 0.75)
V 2: Pos(1.0, 1.0, 1.0) Norm(0.577372, 0.577339, 0.577339) UV(0.625, 0.5)
V 3: Pos(-1.0, -1.0, -1.0) Norm(-0.577328, -0.577361, -0.577361) UV(0.375, 1.0)
V 4: Pos(1.0, -1.0, -1.0) Norm(0.577372, -0.577339, -0.577339) UV(0.375, 0.75)
V 5: Pos(-1.0, -1.0, 1.0) Norm(-0.577372, -0.577339, 0.577339) UV(0.625, 0.0)
V 6: Pos(-1.0, 1.0, -1.0) Norm(-0.577372, 0.577339, -0.577339) UV(0.375, 0.25)
V 7: Pos(-1.0, -1.0, -1.0) Norm(-0.577328, -0.577361, -0.577361) UV(0.375, 0.0)
V 8: Pos(1.0, 1.0, -1.0) Norm(0.577328, 0.577361, -0.577361) UV(0.375, 0.5)
V 9: Pos(-1.0, -1.0, -1.0) Norm(-0.577328, -0.577361, -0.577361) UV(0.125, 0.75)
V 10: Pos(-1.0, 1.0, -1.0) Norm(-0.577372, 0.577339, -0.577339) UV(0.125, 0.5)
V 11: Pos(-1.0, 1.0, 1.0) Norm(-0.577328, 0.577361, 0.577361) UV(0.625, 0.25)
V 12: Pos(-1.0, -1.0, 1.0) Norm(-0.577372, -0.577339, 0.577339) UV(0.875, 0.75)
V 13: Pos(-1.0, -1.0, 1.0) Norm(-0.577372, -0.577339, 0.577339) UV(0.625, 1.0)
===Triangles (Indices): 12
Tri: 0 1 2
Tri: 1 3 4
Tri: 5 6 7
Tri: 8 9 10
Tri: 2 4 8
Tri: 11 8 6
Tri: 0 12 1
Tri: 1 13 3
Tri: 5 11 6
Tri: 8 4 9
Tri: 2 1 4
Tri: 11 2 8

View File

@ -128,10 +128,9 @@ namespace ZL
setupNavigation(params.navigationJsonPaths); setupNavigation(params.navigationJsonPaths);
dialogueSystem.init(renderer, CONST_ZIP_FILE); dialogueSystem.init(renderer, CONST_ZIP_FILE);
dialogueSystem.loadDatabase(params.dialoguesJsonPath); dialogueSystem.loadDatabase(params.dialoguesJsonPath);
dialogueSystem.loadCutsceneDatabase("resources/dialogue/cutscenes003.json"); dialogueSystem.loadCutsceneDatabase("resources/dialogue/cutscenes004.json");
dialogueSystem.setQuestJournal(journal); dialogueSystem.setQuestJournal(journal);
npcNameText = std::make_unique<TextRenderer>(); npcNameText = std::make_unique<TextRenderer>();