Working on minor stuff, arts, settings, cutscenes
This commit is contained in:
parent
5516d02e2c
commit
f7e63f933b
@ -9,5 +9,7 @@ export const AVAILABLE_IMAGES: string[] = [
|
|||||||
'resources/w/cutscenes/cutscene3/cs2_foreground.png',
|
'resources/w/cutscenes/cutscene3/cs2_foreground.png',
|
||||||
'resources/black.png',
|
'resources/black.png',
|
||||||
'resources/w/cutscenes/cutscene_exit_darklands/img.png',
|
'resources/w/cutscenes/cutscene_exit_darklands/img.png',
|
||||||
|
'resources/w/cutscenes/cutscene_exit_darklands/img2.png',
|
||||||
|
'resources/w/cutscenes/cutscene3/img.png',
|
||||||
'resources/w/white.png',
|
'resources/w/white.png',
|
||||||
];
|
];
|
||||||
|
|||||||
@ -18,22 +18,10 @@
|
|||||||
border: none;
|
border: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
#fs-button {
|
|
||||||
position: absolute;
|
|
||||||
top: 10px; left: 10px;
|
|
||||||
padding: 10px;
|
|
||||||
z-index: 10;
|
|
||||||
background: rgba(255,255,255,0.3);
|
|
||||||
color: white; border: 1px solid white;
|
|
||||||
cursor: pointer;
|
|
||||||
font-family: sans-serif;
|
|
||||||
border-radius: 5px;
|
|
||||||
}
|
|
||||||
#status { color: white; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); }
|
#status { color: white; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); }
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<button id="fs-button">Fullscreen</button>
|
|
||||||
<div id="status">Downloading...</div>
|
<div id="status">Downloading...</div>
|
||||||
<canvas id="canvas" oncontextmenu="event.preventDefault()" tabindex="-1"></canvas>
|
<canvas id="canvas" oncontextmenu="event.preventDefault()" tabindex="-1"></canvas>
|
||||||
|
|
||||||
@ -56,16 +44,6 @@
|
|||||||
document.body.appendChild(s);
|
document.body.appendChild(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
document.getElementById('fs-button').addEventListener('click', function() {
|
|
||||||
if (!document.fullscreenElement) {
|
|
||||||
document.documentElement.requestFullscreen().catch(function(e) {
|
|
||||||
console.error('Fullscreen error: ' + e.message);
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
document.exitFullscreen();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
document.addEventListener('DOMContentLoaded', function() {
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
prepareModuleEnvironment();
|
prepareModuleEnvironment();
|
||||||
loadGameScript();
|
loadGameScript();
|
||||||
|
|||||||
@ -5,10 +5,6 @@ project(witcher001 LANGUAGES C CXX)
|
|||||||
set(CMAKE_CXX_STANDARD 17)
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
|
||||||
# Build option (Windows-only): when ON, the game launches in fullscreen.
|
|
||||||
# When OFF (default), it launches in a 1280x720 window like before.
|
|
||||||
option(FULLSCREEN "Launch the game in fullscreen mode" OFF)
|
|
||||||
|
|
||||||
include(${CMAKE_CURRENT_SOURCE_DIR}/../cmake/ThirdParty.cmake)
|
include(${CMAKE_CURRENT_SOURCE_DIR}/../cmake/ThirdParty.cmake)
|
||||||
|
|
||||||
# ===========================================
|
# ===========================================
|
||||||
@ -124,10 +120,6 @@ target_compile_definitions(witcher001 PRIVATE
|
|||||||
# SHOW_PATH
|
# SHOW_PATH
|
||||||
)
|
)
|
||||||
|
|
||||||
if(FULLSCREEN)
|
|
||||||
target_compile_definitions(witcher001 PRIVATE FULLSCREEN)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Линкуем с SDL2main, если он вообще установлен
|
# Линкуем с SDL2main, если он вообще установлен
|
||||||
target_link_libraries(witcher001 PRIVATE SDL2main_external_lib)
|
target_link_libraries(witcher001 PRIVATE SDL2main_external_lib)
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
"npcs": [
|
"npcs": [
|
||||||
{
|
{
|
||||||
"id": "npc_teacher01",
|
"id": "npc_teacher01",
|
||||||
"name": "Аида Дженибекова",
|
"name": "Aida Dzhenibekovna",
|
||||||
"animationIdlePath": "resources/w/new_anims/teacher_stand_idle001_small.anim",
|
"animationIdlePath": "resources/w/new_anims/teacher_stand_idle001_small.anim",
|
||||||
"animationWalkPath": "resources/w/new_anims/teacher_walk001_small.anim",
|
"animationWalkPath": "resources/w/new_anims/teacher_walk001_small.anim",
|
||||||
"meshTextures": {
|
"meshTextures": {
|
||||||
@ -22,7 +22,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "npc_02_woman",
|
"id": "npc_02_woman",
|
||||||
"name": "Айпери",
|
"name": "Aiperi",
|
||||||
"animationIdlePath": "resources/w/girlfriend/girlfriend_idle003_small.anim",
|
"animationIdlePath": "resources/w/girlfriend/girlfriend_idle003_small.anim",
|
||||||
"animationWalkPath": "resources/w/girlfriend/girlfriend_walk003_small.anim",
|
"animationWalkPath": "resources/w/girlfriend/girlfriend_walk003_small.anim",
|
||||||
"meshTextures": {
|
"meshTextures": {
|
||||||
@ -43,7 +43,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "npc_04_ghost",
|
"id": "npc_04_ghost",
|
||||||
"name": "Призрак",
|
"name": "Ghost",
|
||||||
"animationIdlePath": "resources/w/ghost/ghost_idle004_small.anim",
|
"animationIdlePath": "resources/w/ghost/ghost_idle004_small.anim",
|
||||||
"animationWalkPath": "resources/w/ghost/ghost_idle004_small.anim",
|
"animationWalkPath": "resources/w/ghost/ghost_idle004_small.anim",
|
||||||
"meshTextures": {
|
"meshTextures": {
|
||||||
@ -64,7 +64,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "ghost_01x",
|
"id": "ghost_01x",
|
||||||
"name": "Тень",
|
"name": "Shadow",
|
||||||
"meshTextures": {
|
"meshTextures": {
|
||||||
"Shadow_NPC_Rigged": "resources/w/shadow/Shadow_BaseColor.png"
|
"Shadow_NPC_Rigged": "resources/w/shadow/Shadow_BaseColor.png"
|
||||||
},
|
},
|
||||||
@ -90,7 +90,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "ghost_02x",
|
"id": "ghost_02x",
|
||||||
"name": "Тень",
|
"name": "Shadow",
|
||||||
"meshTextures": {
|
"meshTextures": {
|
||||||
"Shadow_NPC_Rigged": "resources/w/shadow/Shadow_BaseColor.png"
|
"Shadow_NPC_Rigged": "resources/w/shadow/Shadow_BaseColor.png"
|
||||||
},
|
},
|
||||||
@ -116,7 +116,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "ghost_03x",
|
"id": "ghost_03x",
|
||||||
"name": "Тень",
|
"name": "Shadow",
|
||||||
"meshTextures": {
|
"meshTextures": {
|
||||||
"Shadow_NPC_Rigged": "resources/w/shadow/Shadow_BaseColor.png"
|
"Shadow_NPC_Rigged": "resources/w/shadow/Shadow_BaseColor.png"
|
||||||
},
|
},
|
||||||
@ -142,7 +142,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "npc_02_woman",
|
"id": "npc_02_woman",
|
||||||
"name": "Алтынай",
|
"name": "Altynai",
|
||||||
"animationIdlePath": "resources/w/girl/girl_idle001_small.anim",
|
"animationIdlePath": "resources/w/girl/girl_idle001_small.anim",
|
||||||
"animationWalkPath": "resources/w/girl/girl_walk010_small.anim",
|
"animationWalkPath": "resources/w/girl/girl_walk010_small.anim",
|
||||||
"meshTextures": {
|
"meshTextures": {
|
||||||
|
|||||||
@ -1,889 +0,0 @@
|
|||||||
{
|
|
||||||
"cutscenes": [
|
|
||||||
{
|
|
||||||
"id": "lection_cutscene001",
|
|
||||||
"skippable": true,
|
|
||||||
"durationMs": 37000,
|
|
||||||
"fadeOutMs": 500,
|
|
||||||
"fadeInMs": 500,
|
|
||||||
"endFadeOutMs": 0,
|
|
||||||
"endFadeInMs": 2000,
|
|
||||||
"onFadeInCallback": "on_lection_cutscene_fadein_callback",
|
|
||||||
"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": "Linear",
|
|
||||||
"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": "Linear",
|
|
||||||
"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": "Linear",
|
|
||||||
"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": 12000,
|
|
||||||
"fadeOutMs": 500,
|
|
||||||
"fadeInMs": 500,
|
|
||||||
"endFadeOutMs": 0,
|
|
||||||
"endFadeInMs": 500,
|
|
||||||
"onFadeInCallback": "on_sleep_cutscene",
|
|
||||||
"imageSegments": [
|
|
||||||
{
|
|
||||||
"path": "resources/black.png",
|
|
||||||
"width": 1280,
|
|
||||||
"height": 720,
|
|
||||||
"startMs": 0,
|
|
||||||
"endMs": 13000,
|
|
||||||
"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/cs2_background.png",
|
|
||||||
"width": 1280,
|
|
||||||
"height": 720,
|
|
||||||
"startMs": 0,
|
|
||||||
"endMs": 11984,
|
|
||||||
"fadeInMs": 0,
|
|
||||||
"fadeOutMs": 1000,
|
|
||||||
"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/cs2_books.png",
|
|
||||||
"width": 1280,
|
|
||||||
"height": 720,
|
|
||||||
"startMs": 0,
|
|
||||||
"endMs": 11550,
|
|
||||||
"fadeInMs": 0,
|
|
||||||
"fadeOutMs": 1000,
|
|
||||||
"easing": "Linear",
|
|
||||||
"from": {
|
|
||||||
"centerX": 0.46,
|
|
||||||
"centerY": 0.5,
|
|
||||||
"scale": 1.1
|
|
||||||
},
|
|
||||||
"to": {
|
|
||||||
"centerX": 0.58,
|
|
||||||
"centerY": 0.5,
|
|
||||||
"scale": 1.2
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "resources/w/cutscenes/cutscene2/cs2_chair.png",
|
|
||||||
"width": 1280,
|
|
||||||
"height": 720,
|
|
||||||
"startMs": 17,
|
|
||||||
"endMs": 10767,
|
|
||||||
"fadeInMs": 0,
|
|
||||||
"fadeOutMs": 300,
|
|
||||||
"easing": "Linear",
|
|
||||||
"from": {
|
|
||||||
"centerX": 0.47,
|
|
||||||
"centerY": 0.5,
|
|
||||||
"scale": 1.1
|
|
||||||
},
|
|
||||||
"to": {
|
|
||||||
"centerX": 0.57,
|
|
||||||
"centerY": 0.5,
|
|
||||||
"scale": 1.3
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "resources/w/cutscenes/cutscene2/cs2_gg001.png",
|
|
||||||
"width": 1280,
|
|
||||||
"height": 720,
|
|
||||||
"startMs": 0,
|
|
||||||
"endMs": 3083,
|
|
||||||
"fadeInMs": 0,
|
|
||||||
"fadeOutMs": 1000,
|
|
||||||
"easing": "Linear",
|
|
||||||
"from": {
|
|
||||||
"centerX": 0.47,
|
|
||||||
"centerY": 0.5,
|
|
||||||
"scale": 1.1
|
|
||||||
},
|
|
||||||
"to": {
|
|
||||||
"centerX": 0.5,
|
|
||||||
"centerY": 0.5,
|
|
||||||
"scale": 1.15
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "resources/w/cutscenes/cutscene2/cs2_gg002.png",
|
|
||||||
"width": 1280,
|
|
||||||
"height": 720,
|
|
||||||
"startMs": 1850,
|
|
||||||
"endMs": 4883,
|
|
||||||
"fadeInMs": 1000,
|
|
||||||
"fadeOutMs": 1000,
|
|
||||||
"easing": "Linear",
|
|
||||||
"from": {
|
|
||||||
"centerX": 0.5,
|
|
||||||
"centerY": 0.5,
|
|
||||||
"scale": 1.15
|
|
||||||
},
|
|
||||||
"to": {
|
|
||||||
"centerX": 0.53,
|
|
||||||
"centerY": 0.5,
|
|
||||||
"scale": 1.2
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "resources/w/cutscenes/cutscene2/cs2_gg003.png",
|
|
||||||
"width": 1280,
|
|
||||||
"height": 720,
|
|
||||||
"startMs": 3950,
|
|
||||||
"endMs": 7083,
|
|
||||||
"fadeInMs": 1000,
|
|
||||||
"fadeOutMs": 1000,
|
|
||||||
"easing": "Linear",
|
|
||||||
"from": {
|
|
||||||
"centerX": 0.49,
|
|
||||||
"centerY": 0.5,
|
|
||||||
"scale": 1.05
|
|
||||||
},
|
|
||||||
"to": {
|
|
||||||
"centerX": 0.55,
|
|
||||||
"centerY": 0.5,
|
|
||||||
"scale": 1.1
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "resources/w/cutscenes/cutscene2/cs2_gg004.png",
|
|
||||||
"width": 1280,
|
|
||||||
"height": 720,
|
|
||||||
"startMs": 6050,
|
|
||||||
"endMs": 10100,
|
|
||||||
"fadeInMs": 1000,
|
|
||||||
"fadeOutMs": 1000,
|
|
||||||
"easing": "Linear",
|
|
||||||
"from": {
|
|
||||||
"centerX": 0.47,
|
|
||||||
"centerY": 0.5,
|
|
||||||
"scale": 1.1
|
|
||||||
},
|
|
||||||
"to": {
|
|
||||||
"centerX": 0.53,
|
|
||||||
"centerY": 0.5,
|
|
||||||
"scale": 1.2
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "resources/w/cutscenes/cutscene2/cs2_foreground.png",
|
|
||||||
"width": 1280,
|
|
||||||
"height": 720,
|
|
||||||
"startMs": 0,
|
|
||||||
"endMs": 10100,
|
|
||||||
"fadeInMs": 0,
|
|
||||||
"fadeOutMs": 3000,
|
|
||||||
"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": 4000,
|
|
||||||
"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/w/cutscenes/cutscene_exit_darklands/img.png",
|
|
||||||
"width": 1280,
|
|
||||||
"height": 720,
|
|
||||||
"startMs": 1016,
|
|
||||||
"endMs": 10549,
|
|
||||||
"fadeInMs": 0,
|
|
||||||
"fadeOutMs": 0,
|
|
||||||
"easing": "EaseInOutQuad",
|
|
||||||
"from": {
|
|
||||||
"centerX": 0.85,
|
|
||||||
"centerY": 0.35,
|
|
||||||
"scale": 3
|
|
||||||
},
|
|
||||||
"to": {
|
|
||||||
"centerX": 0.6,
|
|
||||||
"centerY": 0.5,
|
|
||||||
"scale": 1.3
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "resources/black.png",
|
|
||||||
"width": 1280,
|
|
||||||
"height": 720,
|
|
||||||
"startMs": 9400,
|
|
||||||
"endMs": 12500,
|
|
||||||
"fadeInMs": 1000,
|
|
||||||
"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/white.png",
|
|
||||||
"width": 1280,
|
|
||||||
"height": 720,
|
|
||||||
"startMs": 0,
|
|
||||||
"endMs": 2033,
|
|
||||||
"fadeInMs": 0,
|
|
||||||
"fadeOutMs": 1000,
|
|
||||||
"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": 9000,
|
|
||||||
"fadeOutMs": 500,
|
|
||||||
"fadeInMs": 500,
|
|
||||||
"endFadeOutMs": 0,
|
|
||||||
"endFadeInMs": 500,
|
|
||||||
"onFadeInCallback": "on_sleep_cutscene",
|
|
||||||
"imageSegments": [
|
|
||||||
{
|
|
||||||
"path": "resources/w/cutscenes/cutscene_sleep/img.png",
|
|
||||||
"width": 1280,
|
|
||||||
"height": 720,
|
|
||||||
"startMs": 933,
|
|
||||||
"endMs": 8033,
|
|
||||||
"fadeInMs": 0,
|
|
||||||
"fadeOutMs": 0,
|
|
||||||
"easing": "Linear",
|
|
||||||
"from": {
|
|
||||||
"centerX": 0.5,
|
|
||||||
"centerY": 0.5,
|
|
||||||
"scale": 1
|
|
||||||
},
|
|
||||||
"to": {
|
|
||||||
"centerX": 0.75,
|
|
||||||
"centerY": 0.5,
|
|
||||||
"scale": 3
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "resources/black.png",
|
|
||||||
"width": 1280,
|
|
||||||
"height": 720,
|
|
||||||
"startMs": 0,
|
|
||||||
"endMs": 2117,
|
|
||||||
"fadeInMs": 0,
|
|
||||||
"fadeOutMs": 1000,
|
|
||||||
"easing": "Linear",
|
|
||||||
"from": {
|
|
||||||
"centerX": 0.5,
|
|
||||||
"centerY": 0.5,
|
|
||||||
"scale": 1
|
|
||||||
},
|
|
||||||
"to": {
|
|
||||||
"centerX": 0.5,
|
|
||||||
"centerY": 0.5,
|
|
||||||
"scale": 1
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "resources/black.png",
|
|
||||||
"width": 1280,
|
|
||||||
"height": 720,
|
|
||||||
"startMs": 4967,
|
|
||||||
"endMs": 9000,
|
|
||||||
"fadeInMs": 1000,
|
|
||||||
"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": ""
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "game_complete_cutscene001",
|
|
||||||
"skippable": true,
|
|
||||||
"durationMs": 12000,
|
|
||||||
"fadeOutMs": 0,
|
|
||||||
"fadeInMs": 500,
|
|
||||||
"endFadeOutMs": 0,
|
|
||||||
"endFadeInMs": 0,
|
|
||||||
"onFadeInCallback": "",
|
|
||||||
"imageSegments": [
|
|
||||||
{
|
|
||||||
"path": "resources/black.png",
|
|
||||||
"width": 1280,
|
|
||||||
"height": 720,
|
|
||||||
"startMs": 0,
|
|
||||||
"endMs": 13500,
|
|
||||||
"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": ""
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@ -1,929 +0,0 @@
|
|||||||
{
|
|
||||||
"cutscenes": [
|
|
||||||
{
|
|
||||||
"id": "lection_cutscene001",
|
|
||||||
"skippable": true,
|
|
||||||
"durationMs": 37000,
|
|
||||||
"fadeOutMs": 500,
|
|
||||||
"fadeInMs": 500,
|
|
||||||
"endFadeOutMs": 0,
|
|
||||||
"endFadeInMs": 2000,
|
|
||||||
"onFadeInCallback": "on_lection_cutscene_fadein_callback",
|
|
||||||
"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": "Linear",
|
|
||||||
"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": "Linear",
|
|
||||||
"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": "Linear",
|
|
||||||
"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": 12000,
|
|
||||||
"fadeOutMs": 500,
|
|
||||||
"fadeInMs": 500,
|
|
||||||
"endFadeOutMs": 0,
|
|
||||||
"endFadeInMs": 500,
|
|
||||||
"onFadeInCallback": "on_sleep_cutscene",
|
|
||||||
"imageSegments": [
|
|
||||||
{
|
|
||||||
"path": "resources/black.png",
|
|
||||||
"width": 1280,
|
|
||||||
"height": 720,
|
|
||||||
"startMs": 0,
|
|
||||||
"endMs": 13000,
|
|
||||||
"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/cs2_background.png",
|
|
||||||
"width": 1280,
|
|
||||||
"height": 720,
|
|
||||||
"startMs": 0,
|
|
||||||
"endMs": 11984,
|
|
||||||
"fadeInMs": 0,
|
|
||||||
"fadeOutMs": 1000,
|
|
||||||
"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/cs2_books.png",
|
|
||||||
"width": 1280,
|
|
||||||
"height": 720,
|
|
||||||
"startMs": 0,
|
|
||||||
"endMs": 11550,
|
|
||||||
"fadeInMs": 0,
|
|
||||||
"fadeOutMs": 1000,
|
|
||||||
"easing": "Linear",
|
|
||||||
"from": {
|
|
||||||
"centerX": 0.46,
|
|
||||||
"centerY": 0.5,
|
|
||||||
"scale": 1.1
|
|
||||||
},
|
|
||||||
"to": {
|
|
||||||
"centerX": 0.58,
|
|
||||||
"centerY": 0.5,
|
|
||||||
"scale": 1.2
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "resources/w/cutscenes/cutscene2/cs2_chair.png",
|
|
||||||
"width": 1280,
|
|
||||||
"height": 720,
|
|
||||||
"startMs": 17,
|
|
||||||
"endMs": 10767,
|
|
||||||
"fadeInMs": 0,
|
|
||||||
"fadeOutMs": 300,
|
|
||||||
"easing": "Linear",
|
|
||||||
"from": {
|
|
||||||
"centerX": 0.47,
|
|
||||||
"centerY": 0.5,
|
|
||||||
"scale": 1.1
|
|
||||||
},
|
|
||||||
"to": {
|
|
||||||
"centerX": 0.57,
|
|
||||||
"centerY": 0.5,
|
|
||||||
"scale": 1.3
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "resources/w/cutscenes/cutscene2/cs2_gg001.png",
|
|
||||||
"width": 1280,
|
|
||||||
"height": 720,
|
|
||||||
"startMs": 0,
|
|
||||||
"endMs": 3083,
|
|
||||||
"fadeInMs": 0,
|
|
||||||
"fadeOutMs": 1000,
|
|
||||||
"easing": "Linear",
|
|
||||||
"from": {
|
|
||||||
"centerX": 0.47,
|
|
||||||
"centerY": 0.5,
|
|
||||||
"scale": 1.1
|
|
||||||
},
|
|
||||||
"to": {
|
|
||||||
"centerX": 0.5,
|
|
||||||
"centerY": 0.5,
|
|
||||||
"scale": 1.15
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "resources/w/cutscenes/cutscene2/cs2_gg002.png",
|
|
||||||
"width": 1280,
|
|
||||||
"height": 720,
|
|
||||||
"startMs": 1850,
|
|
||||||
"endMs": 4883,
|
|
||||||
"fadeInMs": 1000,
|
|
||||||
"fadeOutMs": 1000,
|
|
||||||
"easing": "Linear",
|
|
||||||
"from": {
|
|
||||||
"centerX": 0.5,
|
|
||||||
"centerY": 0.5,
|
|
||||||
"scale": 1.15
|
|
||||||
},
|
|
||||||
"to": {
|
|
||||||
"centerX": 0.53,
|
|
||||||
"centerY": 0.5,
|
|
||||||
"scale": 1.2
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "resources/w/cutscenes/cutscene2/cs2_gg003.png",
|
|
||||||
"width": 1280,
|
|
||||||
"height": 720,
|
|
||||||
"startMs": 3950,
|
|
||||||
"endMs": 7083,
|
|
||||||
"fadeInMs": 1000,
|
|
||||||
"fadeOutMs": 1000,
|
|
||||||
"easing": "Linear",
|
|
||||||
"from": {
|
|
||||||
"centerX": 0.49,
|
|
||||||
"centerY": 0.5,
|
|
||||||
"scale": 1.05
|
|
||||||
},
|
|
||||||
"to": {
|
|
||||||
"centerX": 0.55,
|
|
||||||
"centerY": 0.5,
|
|
||||||
"scale": 1.1
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "resources/w/cutscenes/cutscene2/cs2_gg004.png",
|
|
||||||
"width": 1280,
|
|
||||||
"height": 720,
|
|
||||||
"startMs": 6050,
|
|
||||||
"endMs": 10100,
|
|
||||||
"fadeInMs": 1000,
|
|
||||||
"fadeOutMs": 1000,
|
|
||||||
"easing": "Linear",
|
|
||||||
"from": {
|
|
||||||
"centerX": 0.47,
|
|
||||||
"centerY": 0.5,
|
|
||||||
"scale": 1.1
|
|
||||||
},
|
|
||||||
"to": {
|
|
||||||
"centerX": 0.53,
|
|
||||||
"centerY": 0.5,
|
|
||||||
"scale": 1.2
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "resources/w/cutscenes/cutscene2/cs2_foreground.png",
|
|
||||||
"width": 1280,
|
|
||||||
"height": 720,
|
|
||||||
"startMs": 0,
|
|
||||||
"endMs": 10100,
|
|
||||||
"fadeInMs": 0,
|
|
||||||
"fadeOutMs": 3000,
|
|
||||||
"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": 4000,
|
|
||||||
"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/w/cutscenes/cutscene_exit_darklands/img.png",
|
|
||||||
"width": 1280,
|
|
||||||
"height": 720,
|
|
||||||
"startMs": 999,
|
|
||||||
"endMs": 10115,
|
|
||||||
"fadeInMs": 0,
|
|
||||||
"fadeOutMs": 0,
|
|
||||||
"easing": "EaseInOutQuad",
|
|
||||||
"from": {
|
|
||||||
"centerX": 0.85,
|
|
||||||
"centerY": 0.35,
|
|
||||||
"scale": 3
|
|
||||||
},
|
|
||||||
"to": {
|
|
||||||
"centerX": 0.6,
|
|
||||||
"centerY": 0.5,
|
|
||||||
"scale": 1.3
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "resources/w/cutscenes/cutscene_exit_darklands/img2.png",
|
|
||||||
"width": 1280,
|
|
||||||
"height": 720,
|
|
||||||
"startMs": 3000,
|
|
||||||
"endMs": 10567,
|
|
||||||
"fadeInMs": 2000,
|
|
||||||
"fadeOutMs": 0,
|
|
||||||
"easing": "Linear",
|
|
||||||
"from": {
|
|
||||||
"centerX": 0.85,
|
|
||||||
"centerY": 0.44,
|
|
||||||
"scale": 2.4
|
|
||||||
},
|
|
||||||
"to": {
|
|
||||||
"centerX": 0.68,
|
|
||||||
"centerY": 0.53,
|
|
||||||
"scale": 1.5
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "resources/black.png",
|
|
||||||
"width": 1280,
|
|
||||||
"height": 720,
|
|
||||||
"startMs": 9400,
|
|
||||||
"endMs": 12500,
|
|
||||||
"fadeInMs": 1000,
|
|
||||||
"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/white.png",
|
|
||||||
"width": 1280,
|
|
||||||
"height": 720,
|
|
||||||
"startMs": 0,
|
|
||||||
"endMs": 2033,
|
|
||||||
"fadeInMs": 0,
|
|
||||||
"fadeOutMs": 1000,
|
|
||||||
"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": 9000,
|
|
||||||
"fadeOutMs": 500,
|
|
||||||
"fadeInMs": 500,
|
|
||||||
"endFadeOutMs": 0,
|
|
||||||
"endFadeInMs": 500,
|
|
||||||
"onFadeInCallback": "on_sleep_cutscene",
|
|
||||||
"imageSegments": [
|
|
||||||
{
|
|
||||||
"path": "resources/w/cutscenes/cutscene_sleep/img.png",
|
|
||||||
"width": 1280,
|
|
||||||
"height": 720,
|
|
||||||
"startMs": 933,
|
|
||||||
"endMs": 8033,
|
|
||||||
"fadeInMs": 0,
|
|
||||||
"fadeOutMs": 0,
|
|
||||||
"easing": "Linear",
|
|
||||||
"from": {
|
|
||||||
"centerX": 0.55,
|
|
||||||
"centerY": 0.5,
|
|
||||||
"scale": 1
|
|
||||||
},
|
|
||||||
"to": {
|
|
||||||
"centerX": 0.75,
|
|
||||||
"centerY": 0.5,
|
|
||||||
"scale": 3
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "resources/black.png",
|
|
||||||
"width": 1280,
|
|
||||||
"height": 720,
|
|
||||||
"startMs": 0,
|
|
||||||
"endMs": 2117,
|
|
||||||
"fadeInMs": 0,
|
|
||||||
"fadeOutMs": 1000,
|
|
||||||
"easing": "Linear",
|
|
||||||
"from": {
|
|
||||||
"centerX": 0.5,
|
|
||||||
"centerY": 0.5,
|
|
||||||
"scale": 1
|
|
||||||
},
|
|
||||||
"to": {
|
|
||||||
"centerX": 0.5,
|
|
||||||
"centerY": 0.5,
|
|
||||||
"scale": 1
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "resources/black.png",
|
|
||||||
"width": 1280,
|
|
||||||
"height": 720,
|
|
||||||
"startMs": 4967,
|
|
||||||
"endMs": 9000,
|
|
||||||
"fadeInMs": 1000,
|
|
||||||
"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": ""
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "game_complete_cutscene001",
|
|
||||||
"skippable": true,
|
|
||||||
"durationMs": 12000,
|
|
||||||
"fadeOutMs": 0,
|
|
||||||
"fadeInMs": 500,
|
|
||||||
"endFadeOutMs": 0,
|
|
||||||
"endFadeInMs": 0,
|
|
||||||
"onFadeInCallback": "",
|
|
||||||
"imageSegments": [
|
|
||||||
{
|
|
||||||
"path": "resources/black.png",
|
|
||||||
"width": 1280,
|
|
||||||
"height": 720,
|
|
||||||
"startMs": 0,
|
|
||||||
"endMs": 13500,
|
|
||||||
"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/cutscene3/img.png",
|
|
||||||
"width": 1280,
|
|
||||||
"height": 720,
|
|
||||||
"startMs": 0,
|
|
||||||
"endMs": 11117,
|
|
||||||
"fadeInMs": 2000,
|
|
||||||
"fadeOutMs": 2000,
|
|
||||||
"easing": "Linear",
|
|
||||||
"from": {
|
|
||||||
"centerX": 0.5,
|
|
||||||
"centerY": 0.53,
|
|
||||||
"scale": 2.3
|
|
||||||
},
|
|
||||||
"to": {
|
|
||||||
"centerX": 0.5,
|
|
||||||
"centerY": 0.65,
|
|
||||||
"scale": 1.3
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"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": ""
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
precision mediump float;
|
precision highp float;
|
||||||
|
|
||||||
uniform sampler2D Texture;
|
uniform sampler2D Texture;
|
||||||
uniform sampler2D uShadowMap;
|
uniform sampler2D uShadowMap;
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
precision mediump float;
|
precision highp float;
|
||||||
|
|
||||||
uniform sampler2D Texture;
|
uniform sampler2D Texture;
|
||||||
uniform sampler2D uShadowMap;
|
uniform sampler2D uShadowMap;
|
||||||
|
|||||||
@ -107,6 +107,7 @@ function alik_door_open_callback()
|
|||||||
game_api.fade_object("Room_Cover_LivingRoom_W_S_2_001", 0, 0.5, function()
|
game_api.fade_object("Room_Cover_LivingRoom_W_S_2_001", 0, 0.5, function()
|
||||||
game_api.deactivate_interactive_object("Room_Cover_LivingRoom_W_S_2_001")
|
game_api.deactivate_interactive_object("Room_Cover_LivingRoom_W_S_2_001")
|
||||||
game_api.set_npc_enabled(0, true)
|
game_api.set_npc_enabled(0, true)
|
||||||
|
game_api.npc_rotate_to(0, 90)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
if (bathroom_door_opened) then
|
if (bathroom_door_opened) then
|
||||||
|
|||||||
@ -391,6 +391,7 @@ function on_hall_door_click()
|
|||||||
end)
|
end)
|
||||||
game_api.set_npc_enabled(0, true)
|
game_api.set_npc_enabled(0, true)
|
||||||
game_api.set_npc_enabled(6, true)
|
game_api.set_npc_enabled(6, true)
|
||||||
|
game_api.npc_rotate_to(6, 180)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
if (game_api.is_night()) then
|
if (game_api.is_night()) then
|
||||||
@ -556,6 +557,7 @@ game_api.set_cutscene_callback("lection_cutscene001", function()
|
|||||||
game_api.setIntValue("lection_is_over", 1)
|
game_api.setIntValue("lection_is_over", 1)
|
||||||
|
|
||||||
game_api.set_npc_enabled(1, true)
|
game_api.set_npc_enabled(1, true)
|
||||||
|
game_api.npc_rotate_to(1, 180)
|
||||||
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)
|
||||||
game_api.npc_walk_to(6, 5.28998, 0, -5.525, on_student_arrived)
|
game_api.npc_walk_to(6, 5.28998, 0, -5.525, on_student_arrived)
|
||||||
|
|
||||||
|
|||||||
BIN
resources/w/cutscenes/cutscene2/cs2_gg001.png
(Stored with Git LFS)
BIN
resources/w/cutscenes/cutscene2/cs2_gg001.png
(Stored with Git LFS)
Binary file not shown.
BIN
resources/w/cutscenes/cutscene2/cs2_gg002.png
(Stored with Git LFS)
BIN
resources/w/cutscenes/cutscene2/cs2_gg002.png
(Stored with Git LFS)
Binary file not shown.
BIN
resources/w/cutscenes/cutscene2/cs2_gg003.png
(Stored with Git LFS)
BIN
resources/w/cutscenes/cutscene2/cs2_gg003.png
(Stored with Git LFS)
Binary file not shown.
BIN
resources/w/gg/UniV_Grid_2K_Base_color.png
(Stored with Git LFS)
BIN
resources/w/gg/UniV_Grid_2K_Base_color.png
(Stored with Git LFS)
Binary file not shown.
BIN
resources/w/gg/UniV_Grid_2K_Base_color001.png
(Stored with Git LFS)
Normal file
BIN
resources/w/gg/UniV_Grid_2K_Base_color001.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
resources/w/ui/img/Location_dorm.png
(Stored with Git LFS)
BIN
resources/w/ui/img/Location_dorm.png
(Stored with Git LFS)
Binary file not shown.
BIN
resources/w/ui/img/Location_uni_ext.png
(Stored with Git LFS)
BIN
resources/w/ui/img/Location_uni_ext.png
(Stored with Git LFS)
Binary file not shown.
BIN
resources/w/ui/img/Location_uni_int.png
(Stored with Git LFS)
BIN
resources/w/ui/img/Location_uni_int.png
(Stored with Git LFS)
Binary file not shown.
BIN
resources/w/ui/img/main/MenuBkg001_v001.png
(Stored with Git LFS)
Normal file
BIN
resources/w/ui/img/main/MenuBkg001_v001.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
resources/w/ui/img/main/letters002.png
(Stored with Git LFS)
Normal file
BIN
resources/w/ui/img/main/letters002.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
resources/w/ui/img/main/main002.png
(Stored with Git LFS)
Normal file
BIN
resources/w/ui/img/main/main002.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
resources/w/ui/img/main/under_letters001.png
(Stored with Git LFS)
Normal file
BIN
resources/w/ui/img/main/under_letters001.png
(Stored with Git LFS)
Normal file
Binary file not shown.
42
resources/w/ui/screen_credits.json
Normal file
42
resources/w/ui/screen_credits.json
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
{
|
||||||
|
"root": {
|
||||||
|
"type": "FrameLayout",
|
||||||
|
"width": "match_parent",
|
||||||
|
"height": "match_parent",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "creditsBkg",
|
||||||
|
"width": "match_parent",
|
||||||
|
"height": "match_parent",
|
||||||
|
"texture": "resources/w/ui/img/main/bkg.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "creditsImage",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "center",
|
||||||
|
"width": 800,
|
||||||
|
"height": 500,
|
||||||
|
"texture": "resources/w/ui/img/main/about.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Button",
|
||||||
|
"name": "skipButton",
|
||||||
|
"horizontal_gravity": "right",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"x": -23,
|
||||||
|
"y": -35,
|
||||||
|
"width": 200,
|
||||||
|
"height": 200,
|
||||||
|
"clickZoneWidth": 176,
|
||||||
|
"clickZoneHeight": 176,
|
||||||
|
"textures": {
|
||||||
|
"normal": "resources/w/ui/img/RedClose001_State=Default001.png",
|
||||||
|
"hover": "resources/w/ui/img/RedClose001_State=Selected001.png",
|
||||||
|
"pressed": "resources/w/ui/img/RedClose001_State=Tap001.png"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -7,9 +7,36 @@
|
|||||||
{
|
{
|
||||||
"type": "StaticImage",
|
"type": "StaticImage",
|
||||||
"name": "mainMenuBkg",
|
"name": "mainMenuBkg",
|
||||||
"width": "match_parent",
|
"width": 2186,
|
||||||
|
"height": 1536,
|
||||||
|
"texture": "resources/w/ui/img/main/MenuBkg001_v001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "mainMenuBkg2",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "bottom",
|
||||||
|
"width": 720,
|
||||||
|
"height": 720,
|
||||||
|
"texture": "resources/w/ui/img/main/main002.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "mainMenuUnderLetterBkg",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"width": 450,
|
||||||
"height": "match_parent",
|
"height": "match_parent",
|
||||||
"texture": "resources/w/ui/img/main/bkg.png"
|
"texture": "resources/w/ui/img/main/under_letters001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "mainMenuLogo",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "center",
|
||||||
|
"width": 350,
|
||||||
|
"height": 175,
|
||||||
|
"y": 235,
|
||||||
|
"texture": "resources/w/ui/img/main/letters002.png"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "LinearLayout",
|
"type": "LinearLayout",
|
||||||
@ -17,6 +44,7 @@
|
|||||||
"horizontal_align": "center",
|
"horizontal_align": "center",
|
||||||
"vertical_align": "center",
|
"vertical_align": "center",
|
||||||
"spacing": 24,
|
"spacing": 24,
|
||||||
|
"y": 120,
|
||||||
"width": "match_parent",
|
"width": "match_parent",
|
||||||
"height": "match_parent",
|
"height": "match_parent",
|
||||||
"children": [
|
"children": [
|
||||||
@ -76,7 +104,7 @@
|
|||||||
"y": 10,
|
"y": 10,
|
||||||
"width": 160,
|
"width": 160,
|
||||||
"height": 36,
|
"height": 36,
|
||||||
"text": "v. 0.6",
|
"text": "v. 0.7",
|
||||||
"fontSize": 24,
|
"fontSize": 24,
|
||||||
"textCentered": false,
|
"textCentered": false,
|
||||||
"topAligned": true,
|
"topAligned": true,
|
||||||
|
|||||||
@ -100,6 +100,16 @@
|
|||||||
"fontSize": 32,
|
"fontSize": 32,
|
||||||
"textCentered": true,
|
"textCentered": true,
|
||||||
"color": [0.2, 0.9, 0.2, 1.0]
|
"color": [0.2, 0.9, 0.2, 1.0]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextButton",
|
||||||
|
"name": "fullScreenToggleButton",
|
||||||
|
"width": 500,
|
||||||
|
"height": 60,
|
||||||
|
"text": "Full Screen: OFF",
|
||||||
|
"fontSize": 32,
|
||||||
|
"textCentered": true,
|
||||||
|
"color": [0.2, 0.9, 0.2, 1.0]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|||||||
@ -8,9 +8,14 @@
|
|||||||
#else
|
#else
|
||||||
#include <GL/gl.h>
|
#include <GL/gl.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef EMSCRIPTEN
|
||||||
|
#include <emscripten/html5.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace ZL {
|
namespace ZL {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int Environment::windowHeaderHeight = 0;
|
int Environment::windowHeaderHeight = 0;
|
||||||
int Environment::width = CONST_DEFAULT_WIDTH;
|
int Environment::width = CONST_DEFAULT_WIDTH;
|
||||||
@ -20,6 +25,12 @@ float Environment::zoom = DEFAULT_ZOOM;
|
|||||||
|
|
||||||
SDL_Window* Environment::window = nullptr;
|
SDL_Window* Environment::window = nullptr;
|
||||||
|
|
||||||
|
#ifdef EMSCRIPTEN
|
||||||
|
bool Environment::isFullscreen = false;
|
||||||
|
#else
|
||||||
|
bool Environment::isFullscreen = true;
|
||||||
|
#endif
|
||||||
|
|
||||||
bool Environment::showMouse = false;
|
bool Environment::showMouse = false;
|
||||||
|
|
||||||
bool Environment::exitGameLoop = false;
|
bool Environment::exitGameLoop = false;
|
||||||
@ -55,4 +66,25 @@ void Environment::computeProjectionDimensions()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Environment::setFullscreen(bool enable) {
|
||||||
|
#ifdef EMSCRIPTEN
|
||||||
|
if (enable) {
|
||||||
|
EmscriptenFullscreenStrategy strategy{};
|
||||||
|
strategy.scaleMode = EMSCRIPTEN_FULLSCREEN_SCALE_STRETCH;
|
||||||
|
strategy.canvasResolutionScaleMode = EMSCRIPTEN_FULLSCREEN_CANVAS_SCALE_STDDEF;
|
||||||
|
strategy.filteringMode = EMSCRIPTEN_FULLSCREEN_FILTERING_DEFAULT;
|
||||||
|
emscripten_request_fullscreen_strategy("#canvas", EM_TRUE, &strategy);
|
||||||
|
} else {
|
||||||
|
emscripten_exit_fullscreen();
|
||||||
|
}
|
||||||
|
// isFullscreen is updated by onFullscreenChanged once the browser confirms —
|
||||||
|
// the request above is deferred/async and can fail silently (e.g. denied).
|
||||||
|
#else
|
||||||
|
if (window) {
|
||||||
|
SDL_SetWindowFullscreen(window, enable ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0);
|
||||||
|
}
|
||||||
|
isFullscreen = enable;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace ZL
|
} // namespace ZL
|
||||||
|
|||||||
@ -30,6 +30,9 @@ public:
|
|||||||
|
|
||||||
static SDL_Window* window;
|
static SDL_Window* window;
|
||||||
|
|
||||||
|
static bool isFullscreen;
|
||||||
|
static void setFullscreen(bool enable);
|
||||||
|
|
||||||
static bool showMouse;
|
static bool showMouse;
|
||||||
static bool exitGameLoop;
|
static bool exitGameLoop;
|
||||||
|
|
||||||
|
|||||||
32
src/Game.cpp
32
src/Game.cpp
@ -15,7 +15,6 @@
|
|||||||
#include <android/log.h>
|
#include <android/log.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifdef EMSCRIPTEN
|
#ifdef EMSCRIPTEN
|
||||||
#include <emscripten.h>
|
#include <emscripten.h>
|
||||||
#endif
|
#endif
|
||||||
@ -1508,12 +1507,24 @@ namespace ZL
|
|||||||
currentLocation()->state.isNight = gameState.isNight;
|
currentLocation()->state.isNight = gameState.isNight;
|
||||||
currentLocation()->scriptEngine.callTriggerNightEnterCallback();
|
currentLocation()->scriptEngine.callTriggerNightEnterCallback();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
audioPlayer->crossFadeMusicAsync("audio/bishkek night.ogg");
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
gameState.isDarklands = !gameState.isDarklands;
|
gameState.isDarklands = !gameState.isDarklands;
|
||||||
|
|
||||||
// Change HUD
|
// Change HUD
|
||||||
menuManager.setDarklandsMode(gameState.isDarklands);
|
menuManager.setDarklandsMode(gameState.isDarklands);
|
||||||
|
|
||||||
|
if (gameState.isDarklands)
|
||||||
|
{
|
||||||
|
audioPlayer->crossFadeMusicAsync("audio/bishkek fight calm.ogg");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
audioPlayer->crossFadeMusicAsync("audio/bishkek night.ogg");
|
||||||
|
}
|
||||||
|
|
||||||
if (currentLocation()) {
|
if (currentLocation()) {
|
||||||
currentLocation()->state.isDarklands = gameState.isDarklands;
|
currentLocation()->state.isDarklands = gameState.isDarklands;
|
||||||
if (gameState.isDarklands)
|
if (gameState.isDarklands)
|
||||||
@ -1622,6 +1633,25 @@ namespace ZL
|
|||||||
} catch (const std::exception& e) {
|
} catch (const std::exception& e) {
|
||||||
std::cerr << "[save] Failed to parse save file " << path << ": " << e.what() << std::endl;
|
std::cerr << "[save] Failed to parse save file " << path << ": " << e.what() << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (gameState.isDarklands)
|
||||||
|
{
|
||||||
|
audioPlayer->crossFadeMusicAsync("audio/bishkek fight calm.ogg");
|
||||||
|
}
|
||||||
|
else if (gameState.isNight)
|
||||||
|
{
|
||||||
|
audioPlayer->crossFadeMusicAsync("audio/bishkek night.ogg");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (gameState.currentLocationName == "location_dorm") {
|
||||||
|
audioPlayer->crossFadeMusicAsync("audio/obshaga.ogg");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
audioPlayer->crossFadeMusicAsync("audio/bishkek univer day.ogg");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace ZL
|
} // namespace ZL
|
||||||
@ -93,7 +93,8 @@ namespace ZL
|
|||||||
interactiveObjects = GameObjectLoader::loadAndCreateInteractiveObjects(params.interactiveObjectsJsonPath, renderer, CONST_ZIP_FILE);
|
interactiveObjects = GameObjectLoader::loadAndCreateInteractiveObjects(params.interactiveObjectsJsonPath, renderer, CONST_ZIP_FILE);
|
||||||
|
|
||||||
//auto playerTexture = std::make_shared<Texture>(CreateTextureDataFromPng("resources/w/gg/IMG_20260413_182354_992.png", CONST_ZIP_FILE));
|
//auto playerTexture = std::make_shared<Texture>(CreateTextureDataFromPng("resources/w/gg/IMG_20260413_182354_992.png", CONST_ZIP_FILE));
|
||||||
auto playerTexture = renderer.textureManager.LoadFromPng("resources/w/gg/UniV_Grid_2K_Base_color.png", CONST_ZIP_FILE);
|
//auto playerTexture = renderer.textureManager.LoadFromPng("resources/w/gg/UniV_Grid_2K_Base_color.png", CONST_ZIP_FILE);
|
||||||
|
auto playerTexture = renderer.textureManager.LoadFromPng("resources/w/gg/UniV_Grid_2K_Base_color001.png", CONST_ZIP_FILE);
|
||||||
|
|
||||||
auto sparkTexture = renderer.textureManager.LoadFromPng("resources/w/spark.png", CONST_ZIP_FILE);
|
auto sparkTexture = renderer.textureManager.LoadFromPng("resources/w/spark.png", CONST_ZIP_FILE);
|
||||||
|
|
||||||
|
|||||||
@ -360,9 +360,17 @@ namespace ZL {
|
|||||||
? std::array<float, 4>{ 0.2f, 0.9f, 0.2f, 1.0f }
|
? std::array<float, 4>{ 0.2f, 0.9f, 0.2f, 1.0f }
|
||||||
: std::array<float, 4>{ 0.9f, 0.2f, 0.2f, 1.0f });
|
: std::array<float, 4>{ 0.9f, 0.2f, 0.2f, 1.0f });
|
||||||
};
|
};
|
||||||
|
auto refreshFullscreenToggle = [this]() {
|
||||||
|
const bool on = Environment::isFullscreen;
|
||||||
|
uiManager.setTextButtonText("fullScreenToggleButton", on ? "Full Screen: ON" : "Full Screen: OFF");
|
||||||
|
uiManager.setTextButtonColor("fullScreenToggleButton", on
|
||||||
|
? std::array<float, 4>{ 0.2f, 0.9f, 0.2f, 1.0f }
|
||||||
|
: std::array<float, 4>{ 0.9f, 0.2f, 0.2f, 1.0f });
|
||||||
|
};
|
||||||
|
|
||||||
refreshMusicToggle();
|
refreshMusicToggle();
|
||||||
refreshSoundToggle();
|
refreshSoundToggle();
|
||||||
|
refreshFullscreenToggle();
|
||||||
|
|
||||||
uiManager.setTextButtonCallback("musicToggleButton", [this](const std::string&) {
|
uiManager.setTextButtonCallback("musicToggleButton", [this](const std::string&) {
|
||||||
audioPlayer_.setMusicEnabled(!audioPlayer_.isMusicEnabled());
|
audioPlayer_.setMusicEnabled(!audioPlayer_.isMusicEnabled());
|
||||||
@ -380,6 +388,10 @@ namespace ZL {
|
|||||||
? std::array<float, 4>{ 0.2f, 0.9f, 0.2f, 1.0f }
|
? std::array<float, 4>{ 0.2f, 0.9f, 0.2f, 1.0f }
|
||||||
: std::array<float, 4>{ 0.9f, 0.2f, 0.2f, 1.0f });
|
: std::array<float, 4>{ 0.9f, 0.2f, 0.2f, 1.0f });
|
||||||
});
|
});
|
||||||
|
uiManager.setTextButtonCallback("fullScreenToggleButton", [this, refreshFullscreenToggle](const std::string&) {
|
||||||
|
Environment::setFullscreen(!Environment::isFullscreen);
|
||||||
|
refreshFullscreenToggle();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void MenuManager::showLoadGameScreen()
|
void MenuManager::showLoadGameScreen()
|
||||||
@ -1783,6 +1795,7 @@ namespace ZL {
|
|||||||
root["soundVolume"] = audioPlayer_.getSoundVolume();
|
root["soundVolume"] = audioPlayer_.getSoundVolume();
|
||||||
root["musicEnabled"] = audioPlayer_.isMusicEnabled();
|
root["musicEnabled"] = audioPlayer_.isMusicEnabled();
|
||||||
root["soundEnabled"] = audioPlayer_.isSoundEnabled();
|
root["soundEnabled"] = audioPlayer_.isSoundEnabled();
|
||||||
|
root["fullscreen"] = Environment::isFullscreen;
|
||||||
|
|
||||||
std::ofstream file("settings.json");
|
std::ofstream file("settings.json");
|
||||||
if (file.is_open()) {
|
if (file.is_open()) {
|
||||||
@ -1793,6 +1806,10 @@ namespace ZL {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void MenuManager::loadSettings() {
|
void MenuManager::loadSettings() {
|
||||||
|
// Note: on desktop, main() already reads settings.json and creates the window
|
||||||
|
// directly in the right fullscreen state (see WIN32 main() in main.cpp) to avoid
|
||||||
|
// a windowed -> fullscreen flash. The block below just keeps Environment::isFullscreen
|
||||||
|
// in sync in case this is ever called from a path that didn't pre-apply it.
|
||||||
const std::string content = ZL::readTextFile("settings.json");
|
const std::string content = ZL::readTextFile("settings.json");
|
||||||
if (content.empty()) return;
|
if (content.empty()) return;
|
||||||
try {
|
try {
|
||||||
@ -1805,6 +1822,11 @@ namespace ZL {
|
|||||||
audioPlayer_.setMusicEnabled(root["musicEnabled"].get<bool>());
|
audioPlayer_.setMusicEnabled(root["musicEnabled"].get<bool>());
|
||||||
if (root.contains("soundEnabled"))
|
if (root.contains("soundEnabled"))
|
||||||
audioPlayer_.setSoundEnabled(root["soundEnabled"].get<bool>());
|
audioPlayer_.setSoundEnabled(root["soundEnabled"].get<bool>());
|
||||||
|
if (root.contains("fullscreen")) {
|
||||||
|
#ifndef EMSCRIPTEN
|
||||||
|
Environment::setFullscreen(root["fullscreen"].get<bool>());
|
||||||
|
#endif
|
||||||
|
}
|
||||||
} catch (const std::exception& e) {
|
} catch (const std::exception& e) {
|
||||||
std::cerr << "[settings] Failed to parse settings.json: " << e.what() << std::endl;
|
std::cerr << "[settings] Failed to parse settings.json: " << e.what() << std::endl;
|
||||||
}
|
}
|
||||||
|
|||||||
29
src/main.cpp
29
src/main.cpp
@ -1,5 +1,6 @@
|
|||||||
#include "Game.h"
|
#include "Game.h"
|
||||||
#include "Environment.h"
|
#include "Environment.h"
|
||||||
|
#include "utils/Utils.h"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#ifdef __ANDROID__
|
#ifdef __ANDROID__
|
||||||
#include <android/log.h>
|
#include <android/log.h>
|
||||||
@ -85,6 +86,8 @@ EM_BOOL onWindowResized(int /*eventType*/, const EmscriptenUiEvent* e, void* /*u
|
|||||||
}
|
}
|
||||||
|
|
||||||
EM_BOOL onFullscreenChanged(int /*eventType*/, const EmscriptenFullscreenChangeEvent* e, void* /*userData*/) {
|
EM_BOOL onFullscreenChanged(int /*eventType*/, const EmscriptenFullscreenChangeEvent* e, void* /*userData*/) {
|
||||||
|
ZL::Environment::isFullscreen = e->isFullscreen;
|
||||||
|
|
||||||
// Вместо window.innerWidth, попробуйте запросить размер целевого элемента
|
// Вместо window.innerWidth, попробуйте запросить размер целевого элемента
|
||||||
// так как после перехода в FS именно он растягивается на весь экран.
|
// так как после перехода в FS именно он растягивается на весь экран.
|
||||||
double clientW, clientH;
|
double clientW, clientH;
|
||||||
@ -245,11 +248,27 @@ int main(int argc, char *argv[]) {
|
|||||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3);
|
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3);
|
||||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
|
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
|
||||||
|
|
||||||
#ifdef FULLSCREEN
|
// Read the persisted fullscreen preference (if any) before creating the
|
||||||
const Uint32 windowFlags = SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN | SDL_WINDOW_FULLSCREEN_DESKTOP;
|
// window, so it opens directly in the right mode instead of flashing
|
||||||
#else
|
// windowed -> fullscreen once settings are loaded later during setupPart2().
|
||||||
const Uint32 windowFlags = SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN | SDL_WINDOW_ALLOW_HIGHDPI | SDL_WINDOW_RESIZABLE;
|
{
|
||||||
#endif
|
const std::string settingsContent = ZL::readTextFile("settings.json");
|
||||||
|
if (!settingsContent.empty()) {
|
||||||
|
try {
|
||||||
|
const nlohmann::json settingsRoot = nlohmann::json::parse(settingsContent);
|
||||||
|
if (settingsRoot.contains("fullscreen")) {
|
||||||
|
ZL::Environment::isFullscreen = settingsRoot["fullscreen"].get<bool>();
|
||||||
|
}
|
||||||
|
} catch (const std::exception& e) {
|
||||||
|
std::cerr << "[settings] Failed to parse settings.json: " << e.what() << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Uint32 windowFlags = SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN | SDL_WINDOW_ALLOW_HIGHDPI | SDL_WINDOW_RESIZABLE;
|
||||||
|
if (ZL::Environment::isFullscreen) {
|
||||||
|
windowFlags |= SDL_WINDOW_FULLSCREEN_DESKTOP;
|
||||||
|
}
|
||||||
|
|
||||||
ZL::Environment::window = SDL_CreateWindow(
|
ZL::Environment::window = SDL_CreateWindow(
|
||||||
"Shadow Over Bishkek",
|
"Shadow Over Bishkek",
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user