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/black.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',
|
||||
];
|
||||
|
||||
@ -18,22 +18,10 @@
|
||||
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%); }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<button id="fs-button">Fullscreen</button>
|
||||
<div id="status">Downloading...</div>
|
||||
<canvas id="canvas" oncontextmenu="event.preventDefault()" tabindex="-1"></canvas>
|
||||
|
||||
@ -56,16 +44,6 @@
|
||||
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() {
|
||||
prepareModuleEnvironment();
|
||||
loadGameScript();
|
||||
|
||||
@ -5,10 +5,6 @@ project(witcher001 LANGUAGES C CXX)
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
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)
|
||||
|
||||
# ===========================================
|
||||
@ -124,10 +120,6 @@ target_compile_definitions(witcher001 PRIVATE
|
||||
# SHOW_PATH
|
||||
)
|
||||
|
||||
if(FULLSCREEN)
|
||||
target_compile_definitions(witcher001 PRIVATE FULLSCREEN)
|
||||
endif()
|
||||
|
||||
# Линкуем с SDL2main, если он вообще установлен
|
||||
target_link_libraries(witcher001 PRIVATE SDL2main_external_lib)
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
"npcs": [
|
||||
{
|
||||
"id": "npc_teacher01",
|
||||
"name": "Аида Дженибекова",
|
||||
"name": "Aida Dzhenibekovna",
|
||||
"animationIdlePath": "resources/w/new_anims/teacher_stand_idle001_small.anim",
|
||||
"animationWalkPath": "resources/w/new_anims/teacher_walk001_small.anim",
|
||||
"meshTextures": {
|
||||
@ -22,7 +22,7 @@
|
||||
},
|
||||
{
|
||||
"id": "npc_02_woman",
|
||||
"name": "Айпери",
|
||||
"name": "Aiperi",
|
||||
"animationIdlePath": "resources/w/girlfriend/girlfriend_idle003_small.anim",
|
||||
"animationWalkPath": "resources/w/girlfriend/girlfriend_walk003_small.anim",
|
||||
"meshTextures": {
|
||||
@ -43,7 +43,7 @@
|
||||
},
|
||||
{
|
||||
"id": "npc_04_ghost",
|
||||
"name": "Призрак",
|
||||
"name": "Ghost",
|
||||
"animationIdlePath": "resources/w/ghost/ghost_idle004_small.anim",
|
||||
"animationWalkPath": "resources/w/ghost/ghost_idle004_small.anim",
|
||||
"meshTextures": {
|
||||
@ -64,7 +64,7 @@
|
||||
},
|
||||
{
|
||||
"id": "ghost_01x",
|
||||
"name": "Тень",
|
||||
"name": "Shadow",
|
||||
"meshTextures": {
|
||||
"Shadow_NPC_Rigged": "resources/w/shadow/Shadow_BaseColor.png"
|
||||
},
|
||||
@ -90,7 +90,7 @@
|
||||
},
|
||||
{
|
||||
"id": "ghost_02x",
|
||||
"name": "Тень",
|
||||
"name": "Shadow",
|
||||
"meshTextures": {
|
||||
"Shadow_NPC_Rigged": "resources/w/shadow/Shadow_BaseColor.png"
|
||||
},
|
||||
@ -116,7 +116,7 @@
|
||||
},
|
||||
{
|
||||
"id": "ghost_03x",
|
||||
"name": "Тень",
|
||||
"name": "Shadow",
|
||||
"meshTextures": {
|
||||
"Shadow_NPC_Rigged": "resources/w/shadow/Shadow_BaseColor.png"
|
||||
},
|
||||
@ -142,7 +142,7 @@
|
||||
},
|
||||
{
|
||||
"id": "npc_02_woman",
|
||||
"name": "Алтынай",
|
||||
"name": "Altynai",
|
||||
"animationIdlePath": "resources/w/girl/girl_idle001_small.anim",
|
||||
"animationWalkPath": "resources/w/girl/girl_walk010_small.anim",
|
||||
"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 uShadowMap;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
precision mediump float;
|
||||
precision highp float;
|
||||
|
||||
uniform sampler2D Texture;
|
||||
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.deactivate_interactive_object("Room_Cover_LivingRoom_W_S_2_001")
|
||||
game_api.set_npc_enabled(0, true)
|
||||
game_api.npc_rotate_to(0, 90)
|
||||
end)
|
||||
|
||||
if (bathroom_door_opened) then
|
||||
|
||||
@ -391,6 +391,7 @@ function on_hall_door_click()
|
||||
end)
|
||||
game_api.set_npc_enabled(0, true)
|
||||
game_api.set_npc_enabled(6, true)
|
||||
game_api.npc_rotate_to(6, 180)
|
||||
end
|
||||
else
|
||||
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.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(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",
|
||||
"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",
|
||||
"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",
|
||||
@ -17,6 +44,7 @@
|
||||
"horizontal_align": "center",
|
||||
"vertical_align": "center",
|
||||
"spacing": 24,
|
||||
"y": 120,
|
||||
"width": "match_parent",
|
||||
"height": "match_parent",
|
||||
"children": [
|
||||
@ -76,7 +104,7 @@
|
||||
"y": 10,
|
||||
"width": 160,
|
||||
"height": 36,
|
||||
"text": "v. 0.6",
|
||||
"text": "v. 0.7",
|
||||
"fontSize": 24,
|
||||
"textCentered": false,
|
||||
"topAligned": true,
|
||||
|
||||
@ -100,6 +100,16 @@
|
||||
"fontSize": 32,
|
||||
"textCentered": true,
|
||||
"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,6 +8,11 @@
|
||||
#else
|
||||
#include <GL/gl.h>
|
||||
#endif
|
||||
|
||||
#ifdef EMSCRIPTEN
|
||||
#include <emscripten/html5.h>
|
||||
#endif
|
||||
|
||||
namespace ZL {
|
||||
|
||||
|
||||
@ -20,6 +25,12 @@ float Environment::zoom = DEFAULT_ZOOM;
|
||||
|
||||
SDL_Window* Environment::window = nullptr;
|
||||
|
||||
#ifdef EMSCRIPTEN
|
||||
bool Environment::isFullscreen = false;
|
||||
#else
|
||||
bool Environment::isFullscreen = true;
|
||||
#endif
|
||||
|
||||
bool Environment::showMouse = 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
|
||||
|
||||
@ -30,6 +30,9 @@ public:
|
||||
|
||||
static SDL_Window* window;
|
||||
|
||||
static bool isFullscreen;
|
||||
static void setFullscreen(bool enable);
|
||||
|
||||
static bool showMouse;
|
||||
static bool exitGameLoop;
|
||||
|
||||
|
||||
32
src/Game.cpp
32
src/Game.cpp
@ -15,7 +15,6 @@
|
||||
#include <android/log.h>
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef EMSCRIPTEN
|
||||
#include <emscripten.h>
|
||||
#endif
|
||||
@ -1508,12 +1507,24 @@ namespace ZL
|
||||
currentLocation()->state.isNight = gameState.isNight;
|
||||
currentLocation()->scriptEngine.callTriggerNightEnterCallback();
|
||||
}
|
||||
|
||||
audioPlayer->crossFadeMusicAsync("audio/bishkek night.ogg");
|
||||
|
||||
} else {
|
||||
gameState.isDarklands = !gameState.isDarklands;
|
||||
|
||||
// Change HUD
|
||||
menuManager.setDarklandsMode(gameState.isDarklands);
|
||||
|
||||
if (gameState.isDarklands)
|
||||
{
|
||||
audioPlayer->crossFadeMusicAsync("audio/bishkek fight calm.ogg");
|
||||
}
|
||||
else
|
||||
{
|
||||
audioPlayer->crossFadeMusicAsync("audio/bishkek night.ogg");
|
||||
}
|
||||
|
||||
if (currentLocation()) {
|
||||
currentLocation()->state.isDarklands = gameState.isDarklands;
|
||||
if (gameState.isDarklands)
|
||||
@ -1622,6 +1633,25 @@ namespace ZL
|
||||
} catch (const std::exception& e) {
|
||||
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
|
||||
@ -93,7 +93,8 @@ namespace ZL
|
||||
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 = 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);
|
||||
|
||||
|
||||
@ -360,9 +360,17 @@ namespace ZL {
|
||||
? std::array<float, 4>{ 0.2f, 0.9f, 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();
|
||||
refreshSoundToggle();
|
||||
refreshFullscreenToggle();
|
||||
|
||||
uiManager.setTextButtonCallback("musicToggleButton", [this](const std::string&) {
|
||||
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.9f, 0.2f, 0.2f, 1.0f });
|
||||
});
|
||||
uiManager.setTextButtonCallback("fullScreenToggleButton", [this, refreshFullscreenToggle](const std::string&) {
|
||||
Environment::setFullscreen(!Environment::isFullscreen);
|
||||
refreshFullscreenToggle();
|
||||
});
|
||||
}
|
||||
|
||||
void MenuManager::showLoadGameScreen()
|
||||
@ -1783,6 +1795,7 @@ namespace ZL {
|
||||
root["soundVolume"] = audioPlayer_.getSoundVolume();
|
||||
root["musicEnabled"] = audioPlayer_.isMusicEnabled();
|
||||
root["soundEnabled"] = audioPlayer_.isSoundEnabled();
|
||||
root["fullscreen"] = Environment::isFullscreen;
|
||||
|
||||
std::ofstream file("settings.json");
|
||||
if (file.is_open()) {
|
||||
@ -1793,6 +1806,10 @@ namespace ZL {
|
||||
}
|
||||
|
||||
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");
|
||||
if (content.empty()) return;
|
||||
try {
|
||||
@ -1805,6 +1822,11 @@ namespace ZL {
|
||||
audioPlayer_.setMusicEnabled(root["musicEnabled"].get<bool>());
|
||||
if (root.contains("soundEnabled"))
|
||||
audioPlayer_.setSoundEnabled(root["soundEnabled"].get<bool>());
|
||||
if (root.contains("fullscreen")) {
|
||||
#ifndef EMSCRIPTEN
|
||||
Environment::setFullscreen(root["fullscreen"].get<bool>());
|
||||
#endif
|
||||
}
|
||||
} catch (const std::exception& e) {
|
||||
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 "Environment.h"
|
||||
#include "utils/Utils.h"
|
||||
#include <iostream>
|
||||
#ifdef __ANDROID__
|
||||
#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*/) {
|
||||
ZL::Environment::isFullscreen = e->isFullscreen;
|
||||
|
||||
// Вместо window.innerWidth, попробуйте запросить размер целевого элемента
|
||||
// так как после перехода в FS именно он растягивается на весь экран.
|
||||
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_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
|
||||
|
||||
#ifdef FULLSCREEN
|
||||
const Uint32 windowFlags = SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN | SDL_WINDOW_FULLSCREEN_DESKTOP;
|
||||
#else
|
||||
const Uint32 windowFlags = SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN | SDL_WINDOW_ALLOW_HIGHDPI | SDL_WINDOW_RESIZABLE;
|
||||
#endif
|
||||
// Read the persisted fullscreen preference (if any) before creating the
|
||||
// window, so it opens directly in the right mode instead of flashing
|
||||
// windowed -> fullscreen once settings are loaded later during setupPart2().
|
||||
{
|
||||
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(
|
||||
"Shadow Over Bishkek",
|
||||
|
||||
Loading…
Reference in New Issue
Block a user