Compare commits

...
15 Commits
206 changed files with 3440 additions and 2092 deletions

No files matched your search

+5
View File
@@ -409,3 +409,8 @@ web_resources/
pc_resources/ pc_resources/
resources_hd/ resources_hd/
web_resources_x2/ web_resources_x2/
.artifacts/
*.zip
+1
View File
@@ -62,4 +62,5 @@ app/jni/SDL
app/jni/zlib app/jni/zlib
app/src/main/assets/resources app/src/main/assets/resources
app/src/main/assets/audio
+1 -1
View File
@@ -1 +1 @@
### Перед запуском в папке ```app/jni/```(рядом с src) нужно создать три папки с исходниками библиотек ```libpng```, ```SDL```, ```zlib``` ### Android version
+10 -9
View File
@@ -9,12 +9,12 @@ else {
android { android {
if (buildAsApplication) { if (buildAsApplication) {
namespace "org.libsdl.app" namespace "fishrungames.shadowoverbishkek"
} }
compileSdkVersion 34 compileSdkVersion 37
defaultConfig { defaultConfig {
minSdkVersion 19 minSdkVersion 21
targetSdkVersion 34 targetSdkVersion 37
versionCode 1 versionCode 1
versionName "1.0" versionName "1.0"
externalNativeBuild { externalNativeBuild {
@@ -23,16 +23,16 @@ android {
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
}*/ }*/
cmake { cmake {
arguments "-DANDROID_APP_PLATFORM=android-19", "-DANDROID_STL=c++_static" arguments /*"-DANDROID_APP_PLATFORM=android-19",*/ "-DANDROID_STL=c++_static"
cppFlags "-std=c++11 -frtti -fexceptions" cppFlags "-std=c++17 -frtti -fexceptions"
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' abiFilters 'arm64-v8a', 'x86_64'
} }
} }
} }
buildTypes { buildTypes {
release { release {
minifyEnabled false minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
} }
} }
applicationVariants.all { variant -> applicationVariants.all { variant ->
@@ -62,7 +62,7 @@ android {
libraryVariants.all { variant -> libraryVariants.all { variant ->
variant.outputs.all { output -> variant.outputs.all { output ->
if (output.outputFileName != null && output.outputFileName.endsWith(".aar")) { if (output.outputFileName != null && output.outputFileName.endsWith(".aar")) {
output.outputFileName = "org.libsdl.app.aar" output.outputFileName = "fishrungames.shadowoverbishkek.aar"
} }
} }
} }
@@ -70,5 +70,6 @@ android {
} }
dependencies { dependencies {
implementation 'androidx.core:core-splashscreen:1.0.1'
implementation fileTree(include: ['*.jar'], dir: 'libs') implementation fileTree(include: ['*.jar'], dir: 'libs')
} }
+5 -1
View File
@@ -21,7 +21,7 @@ set(TP_ROOT "${THIRDPARTY_DIR}")
# ============================================================================== # ==============================================================================
# --- ZLIB --- # --- ZLIB ---
add_subdirectory("${TP_ROOT}/zlib-1.3.1" zlib-build) #add_subdirectory("${TP_ROOT}/zlib-1.3.2" zlib-build)
# --- LIBPNG --- # --- LIBPNG ---
set(PNG_STATIC ON CACHE BOOL "Build static library" FORCE) set(PNG_STATIC ON CACHE BOOL "Build static library" FORCE)
@@ -39,6 +39,10 @@ add_subdirectory("${TP_ROOT}/libpng-1.6.51" libpng-build)
# --- SDL2 --- # --- SDL2 ---
# Android-версия SDL требует специфичных настроек, но add_subdirectory обычно подхватывает их сама # Android-версия SDL требует специфичных настроек, но add_subdirectory обычно подхватывает их сама
add_subdirectory("${TP_ROOT}/SDL-release-2.32.10" sdl-build) add_subdirectory("${TP_ROOT}/SDL-release-2.32.10" sdl-build)
add_subdirectory("${TP_ROOT}/SDL_mixer-release-2.8.0" sdl-mixer-build)
add_subdirectory("${TP_ROOT}/SDL_ttf-release-2.24.0" sdl-ttf-build)
# --- LIBZIP --- # --- LIBZIP ---
# Отключаем поиск системных крипто-библиотек, так как в NDK их может не быть в стандартных путях # Отключаем поиск системных крипто-библиотек, так как в NDK их может не быть в стандартных путях
+123 -40
View File
@@ -33,62 +33,145 @@ endforeach()
# Создаем кастомную цель, которая будет запускать процесс копирования # Создаем кастомную цель, которая будет запускать процесс копирования
add_custom_target(sync_resources ALL DEPENDS ${RES_OUTPUTS}) add_custom_target(sync_resources ALL DEPENDS ${RES_OUTPUTS})
set(LUA_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../../thirdparty/lua-5.4.8")
file(GLOB LUA_SOURCES "${LUA_SRC_DIR}/*.c")
list(REMOVE_ITEM LUA_SOURCES
"${LUA_SRC_DIR}/lua.c"
"${LUA_SRC_DIR}/luac.c"
"${LUA_SRC_DIR}/onelua.c"
)
add_library(lua_static STATIC ${LUA_SOURCES})
target_include_directories(lua_static PUBLIC "${LUA_SRC_DIR}")
add_library(main SHARED add_library(main SHARED
SDL_android_main.c SDL_android_main.c
../../../../src/BoneAnimatedModel.cpp
../../../../src/Environment.cpp
../../../../src/Game.cpp
../../../../src/main.cpp ../../../../src/main.cpp
../../../../src/Projectile.cpp ../../../../src/Game.cpp
../../../../src/SparkEmitter.cpp ../../../../src/Game.h
../../../../src/TextModel.cpp ../../../../src/Character.cpp
../../../../src/UiManager.cpp ../../../../src/Character.h
../../../../src/utils/Perlin.cpp ../../../../src/CharacterState.cpp
../../../../src/utils/TaskManager.cpp ../../../../src/CharacterState.h
../../../../src/utils/Utils.cpp ../../../../src/Environment.cpp
../../../../src/navigation/PathFinder.cpp ../../../../src/Environment.h
../../../../src/planet/PlanetData.cpp ../../../../src/Localization.cpp
../../../../src/planet/PlanetObject.cpp ../../../../src/Localization.h
../../../../src/planet/StoneObject.cpp
../../../../src/render/FrameBuffer.cpp
../../../../src/render/ShadowMap.cpp
../../../../src/render/Renderer.cpp ../../../../src/render/Renderer.cpp
../../../../src/render/Renderer.h
../../../../src/render/ShaderManager.cpp ../../../../src/render/ShaderManager.cpp
../../../../src/render/ShaderManager.h
../../../../src/render/TextureManager.cpp ../../../../src/render/TextureManager.cpp
../../../../src/render/TextureManager.h
../../../../src/TextModel.cpp
../../../../src/TextModel.h
../../../../src/AudioPlayerAsync.cpp
../../../../src/AudioPlayerAsync.h
../../../../src/BoneAnimatedModelNew.cpp
../../../../src/BoneAnimatedModelNew.h
../../../../src/render/OpenGlExtensions.cpp ../../../../src/render/OpenGlExtensions.cpp
) ../../../../src/render/OpenGlExtensions.h
../../../../src/utils/Utils.cpp
# Подключаем заголовки ../../../../src/utils/Utils.h
target_include_directories(main PRIVATE ../../../../src/SparkEmitter.cpp
${CMAKE_CURRENT_SOURCE_DIR}/../SDL/include ../../../../src/SparkEmitter.h
${CMAKE_CURRENT_SOURCE_DIR}/../zlib ../../../../src/TeleportZone.h
${CMAKE_CURRENT_SOURCE_DIR}/../libpng ../../../../src/TeleportZone.cpp
${CMAKE_CURRENT_SOURCE_DIR}/../../../../thirdparty/eigen-5.0.0 ../../../../src/utils/TaskManager.cpp
${CMAKE_CURRENT_SOURCE_DIR}/../../../../thirdparty/boost_1_90_0 ../../../../src/utils/TaskManager.h
${CMAKE_CURRENT_SOURCE_DIR}/../../../../src ../../../../src/render/FrameBuffer.cpp
${CMAKE_CURRENT_SOURCE_DIR}/../libzip ../../../../src/render/FrameBuffer.h
) ../../../../src/render/ShadowMap.cpp
../../../../src/render/ShadowMap.h
# ВАЖНО: Линкуемся с png_static (статика) или png_shared (динамика) ../../../../src/UiManager.cpp
# Так как мы установили PNG_STATIC=ON и PNG_SHARED=OFF, ../../../../src/UiManager.h
# должна создаться цель png_static ../../../../src/render/TextRenderer.h
target_link_libraries(main ../../../../src/render/TextRenderer.cpp
png_static # ← ЭТО ПРАВИЛЬНОЕ ИМЯ ЦЕЛИ! ../../../../src/MenuManager.h
z ../../../../src/MenuManager.cpp
SDL2 ../../../../src/Location.h
../../../../src/Location.cpp
../../../../src/LocationState.h
../../../../src/LocationState.cpp
../../../../src/LocationEditor.h
../../../../src/LocationEditor.cpp
../../../../src/NpcCar.h
../../../../src/NpcCar.cpp
../../../../src/GameConstants.h
../../../../src/GameConstants.cpp
../../../../src/GameState.h
../../../../src/GameState.cpp
../../../../src/ScriptEngine.h
../../../../src/ScriptEngine.cpp
../../../../src/navigation/PathFinder.h
../../../../src/navigation/PathFinder.cpp
../../../../src/items/GameObjectLoader.h
../../../../src/items/GameObjectLoader.cpp
../../../../src/items/Item.h
../../../../src/items/Item.cpp
../../../../src/items/ItemRegistry.h
../../../../src/items/ItemRegistry.cpp
../../../../src/items/InteractiveObject.h
../../../../src/items/InteractiveObject.cpp
../../../../src/items/InteractiveObjectState.h
../../../../src/dialogue/DialogueTypes.h
../../../../src/dialogue/DialogueDatabase.h
../../../../src/dialogue/DialogueDatabase.cpp
../../../../src/dialogue/DialogueRuntime.h
../../../../src/dialogue/DialogueRuntime.cpp
../../../../src/dialogue/DialogueOverlay.h
../../../../src/dialogue/DialogueOverlay.cpp
../../../../src/dialogue/DialogueSystem.h
../../../../src/dialogue/DialogueSystem.cpp
../../../../src/dialogue/TranslationDatabase.h
../../../../src/dialogue/TranslationDatabase.cpp
../../../../src/quest/QuestTypes.h
../../../../src/quest/QuestJournal.h
../../../../src/quest/QuestJournal.cpp
../../../../src/cutscene/CutsceneTypes.h
../../../../src/cutscene/CutsceneDatabase.h
../../../../src/cutscene/CutsceneDatabase.cpp
../../../../src/cutscene/CutsceneRuntime.h
../../../../src/cutscene/CutsceneRuntime.cpp
../../../../src/cutscene/CutsceneOverlay.h
../../../../src/cutscene/CutsceneOverlay.cpp
../../../../src/render/UiQuad.h
) )
find_library(OPENGLES2_LIB GLESv2)
find_library(OPENGLES3_LIB GLESv3)
target_link_libraries(main target_link_libraries(main
${OPENGLES2_LIB} # OpenGL ES 2.0/3.0 ${OPENGLES3_LIB}
png_static
z
SDL2
SDL2_ttf
SDL2_mixer
log log
android android
OpenSLES OpenSLES
dl dl
zip zip
lua_static
#freetype
)
# Подключаем заголовки
target_include_directories(main PRIVATE
#${CMAKE_CURRENT_SOURCE_DIR}/../SDL/include
${CMAKE_CURRENT_SOURCE_DIR}/../../../../thirdparty/SDL_ttf-release-2.24.0/external/freetype/include
#${CMAKE_CURRENT_SOURCE_DIR}/../zlib
#${CMAKE_CURRENT_SOURCE_DIR}/../libpng
${CMAKE_CURRENT_SOURCE_DIR}/../../../../thirdparty/eigen-5.0.0
${CMAKE_CURRENT_SOURCE_DIR}/../../../../thirdparty/boost_1_90_0
${CMAKE_CURRENT_SOURCE_DIR}/../../../../src
${CMAKE_CURRENT_SOURCE_DIR}/../../../../thirdparty/sol2-3.3.0/include
#${CMAKE_CURRENT_SOURCE_DIR}/../libzip
) )
add_dependencies(main sync_resources) add_dependencies(main sync_resources)
+6 -6
View File
@@ -16,18 +16,18 @@
# public *; # public *;
#} #}
-keep,includedescriptorclasses,allowoptimization class org.libsdl.app.SDLInputConnection { -keep,includedescriptorclasses,allowoptimization class fishrungames.shadowoverbishkek.SDLInputConnection {
void nativeCommitText(java.lang.String, int); void nativeCommitText(java.lang.String, int);
void nativeGenerateScancodeForUnichar(char); void nativeGenerateScancodeForUnichar(char);
} }
-keep,includedescriptorclasses class org.libsdl.app.SDLActivity { -keep,includedescriptorclasses class fishrungames.shadowoverbishkek.SDLActivity {
# for some reason these aren't compatible with allowoptimization modifier # for some reason these aren't compatible with allowoptimization modifier
boolean supportsRelativeMouse(); boolean supportsRelativeMouse();
void setWindowStyle(boolean); void setWindowStyle(boolean);
} }
-keep,includedescriptorclasses,allowoptimization class org.libsdl.app.SDLActivity { -keep,includedescriptorclasses,allowoptimization class fishrungames.shadowoverbishkek.SDLActivity {
java.lang.String nativeGetHint(java.lang.String); # Java-side doesn't use this, so it gets minified, but C-side still tries to register it java.lang.String nativeGetHint(java.lang.String); # Java-side doesn't use this, so it gets minified, but C-side still tries to register it
boolean onNativeSoftReturnKey(); boolean onNativeSoftReturnKey();
void onNativeKeyboardFocusLost(); void onNativeKeyboardFocusLost();
@@ -62,7 +62,7 @@
boolean showTextInput(int, int, int, int); boolean showTextInput(int, int, int, int);
} }
-keep,includedescriptorclasses,allowoptimization class org.libsdl.app.HIDDeviceManager { -keep,includedescriptorclasses,allowoptimization class fishrungames.shadowoverbishkek.HIDDeviceManager {
boolean initialize(boolean, boolean); boolean initialize(boolean, boolean);
boolean openDevice(int); boolean openDevice(int);
int sendOutputReport(int, byte[]); int sendOutputReport(int, byte[]);
@@ -71,7 +71,7 @@
void closeDevice(int); void closeDevice(int);
} }
-keep,includedescriptorclasses,allowoptimization class org.libsdl.app.SDLAudioManager { -keep,includedescriptorclasses,allowoptimization class fishrungames.shadowoverbishkek.SDLAudioManager {
int[] getAudioOutputDevices(); int[] getAudioOutputDevices();
int[] getAudioInputDevices(); int[] getAudioInputDevices();
int[] audioOpen(int, int, int, int, int); int[] audioOpen(int, int, int, int, int);
@@ -90,7 +90,7 @@
native void addAudioDevice(boolean, int); native void addAudioDevice(boolean, int);
} }
-keep,includedescriptorclasses,allowoptimization class org.libsdl.app.SDLControllerManager { -keep,includedescriptorclasses,allowoptimization class fishrungames.shadowoverbishkek.SDLControllerManager {
void pollInputDevices(); void pollInputDevices();
void pollHapticDevices(); void pollHapticDevices();
void hapticRun(int, float, int); void hapticRun(int, float, int);
@@ -8,7 +8,7 @@
android:installLocation="auto"> android:installLocation="auto">
<!-- OpenGL ES 2.0 --> <!-- OpenGL ES 2.0 -->
<uses-feature android:glEsVersion="0x00020000" /> <uses-feature android:glEsVersion="0x00030000" />
<!-- Touchscreen support --> <!-- Touchscreen support -->
<uses-feature <uses-feature
@@ -52,7 +52,7 @@
<!-- <uses-permission android:name="android.permission.RECORD_AUDIO" /> --> <!-- <uses-permission android:name="android.permission.RECORD_AUDIO" /> -->
<!-- Create a Java class extending SDLActivity and place it in a <!-- Create a Java class extending SDLActivity and place it in a
directory under app/src/main/java matching the package, e.g. app/src/main/java/com/gamemaker/game/MyGame.java directory under shadowoverbishkek/main/java matching the package, e.g. shadowoverbishkek/main/java/com/gamemaker/game/MyGame.java
then replace "SDLActivity" with the name of your class (e.g. "MyGame") then replace "SDLActivity" with the name of your class (e.g. "MyGame")
in the XML below. in the XML below.
@@ -62,14 +62,14 @@
<application android:label="@string/app_name" <application android:label="@string/app_name"
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
android:allowBackup="true" android:allowBackup="true"
android:theme="@style/AppTheme" android:theme="@style/Theme.App.Starting"
android:hardwareAccelerated="true" > android:hardwareAccelerated="true" >
<!-- Example of setting SDL hints from AndroidManifest.xml: <!-- Example of setting SDL hints from AndroidManifest.xml:
<meta-data android:name="SDL_ENV.SDL_ACCELEROMETER_AS_JOYSTICK" android:value="0"/> <meta-data android:name="SDL_ENV.SDL_ACCELEROMETER_AS_JOYSTICK" android:value="0"/>
--> -->
<activity android:name="SDLActivity" <activity android:name=".ShadowOverBishkekActivity"
android:label="@string/app_name" android:label="@string/app_name"
android:alwaysRetainTaskState="true" android:alwaysRetainTaskState="true"
android:launchMode="singleInstance" android:launchMode="singleInstance"
@@ -0,0 +1,13 @@
package fishrungames.shadowoverbishkek;
import android.os.Bundle;
import androidx.core.splashscreen.SplashScreen;
import org.libsdl.app.SDLActivity;
public class ShadowOverBishkekActivity extends SDLActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
SplashScreen.installSplashScreen(this);
super.onCreate(savedInstanceState);
}
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,3 @@
<resources>
<string name="app_name">Тень над Бишкеком</string>
</resources>
@@ -1,3 +1,3 @@
<resources> <resources>
<string name="app_name">Game</string> <string name="app_name">Shadow Over Bishkek</string>
</resources> </resources>
@@ -4,4 +4,13 @@
<style name="AppTheme" parent="android:Theme.NoTitleBar.Fullscreen"> <style name="AppTheme" parent="android:Theme.NoTitleBar.Fullscreen">
<!-- Customize your theme here. --> <!-- Customize your theme here. -->
</style> </style>
<!-- Тема для Splash Screen -->
<style name="Theme.App.Starting" parent="Theme.SplashScreen">
<!-- Черный фон -->
<item name="windowSplashScreenBackground">#000000</item>
<!-- Ваша картинка 512x512 -->
<item name="windowSplashScreenAnimatedIcon">@drawable/splash_icon</item>
<!-- Ссылка на основную тему, которая применится после загрузки -->
<item name="postSplashScreenTheme">@style/AppTheme</item>
</style>
</resources> </resources>
+1 -1
View File
@@ -6,7 +6,7 @@ buildscript {
google() google()
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:8.1.1' classpath 'com.android.tools.build:gradle:9.3.0'
// NOTE: Do not place your application dependencies here; they belong // NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files // in the individual module build.gradle files
+11
View File
@@ -9,7 +9,18 @@
# Specifies the JVM arguments used for the daemon process. # Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings. # The setting is particularly useful for tweaking memory settings.
android.builtInKotlin=false
android.defaults.buildfeatures.resvalues=true
android.dependency.useConstraints=true
android.enableAppCompileTimeRClass=false
android.newDsl=false
android.r8.optimizedResourceShrinking=false
android.r8.strictFullModeForKeepRules=false
android.sdk.defaultTargetSdkToCompileSdkIfUnset=false
android.uniquePackageNames=false
android.usesSdkInManifest.disallowed=false
org.gradle.jvmargs=-Xmx1536m org.gradle.jvmargs=-Xmx1536m
android.useAndroidX=true
# When configured, Gradle will run in incubating parallel mode. # When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit # This option should only be used with decoupled projects. More details, visit
@@ -0,0 +1,12 @@
#This file is generated by updateDaemonJvm
toolchainUrl.FREE_BSD.AARCH64=https\://api.foojay.io/disco/v3.0/ids/ec7520a1e057cd116f9544c42142a16b/redirect
toolchainUrl.FREE_BSD.X86_64=https\://api.foojay.io/disco/v3.0/ids/4c4f879899012ff0a8b2e2117df03b0e/redirect
toolchainUrl.LINUX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/ec7520a1e057cd116f9544c42142a16b/redirect
toolchainUrl.LINUX.X86_64=https\://api.foojay.io/disco/v3.0/ids/4c4f879899012ff0a8b2e2117df03b0e/redirect
toolchainUrl.MAC_OS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/73bcfb608d1fde9fb62e462f834a3299/redirect
toolchainUrl.MAC_OS.X86_64=https\://api.foojay.io/disco/v3.0/ids/846ee0d876d26a26f37aa1ce8de73224/redirect
toolchainUrl.UNIX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/ec7520a1e057cd116f9544c42142a16b/redirect
toolchainUrl.UNIX.X86_64=https\://api.foojay.io/disco/v3.0/ids/4c4f879899012ff0a8b2e2117df03b0e/redirect
toolchainUrl.WINDOWS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/9482ddec596298c84656d31d16652665/redirect
toolchainUrl.WINDOWS.X86_64=https\://api.foojay.io/disco/v3.0/ids/39701d92e1756bb2f141eb67cd4c660e/redirect
toolchainVersion=21
+1 -1
View File
@@ -1,6 +1,6 @@
#Sat Jan 10 10:31:05 MSK 2026 #Sat Jan 10 10:31:05 MSK 2026
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.0-bin.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
+3
View File
@@ -109,6 +109,8 @@ set(SOURCES
../src/LocationState.cpp ../src/LocationState.cpp
../src/LocationEditor.h ../src/LocationEditor.h
../src/LocationEditor.cpp ../src/LocationEditor.cpp
../src/NpcCar.h
../src/NpcCar.cpp
../src/GameConstants.h ../src/GameConstants.h
../src/GameConstants.cpp ../src/GameConstants.cpp
../src/GameState.h ../src/GameState.h
@@ -195,6 +197,7 @@ set(EMSCRIPTEN_LINK_FLAGS
#"-sPTHREAD_POOL_SIZE=4" #"-sPTHREAD_POOL_SIZE=4"
"-sALLOW_MEMORY_GROWTH=1" "-sALLOW_MEMORY_GROWTH=1"
"-sFULL_ES3=1" "-sFULL_ES3=1"
"-lidbfs.js"
"--preload-file ${CMAKE_CURRENT_SOURCE_DIR}/../resources/loading.png@resources/loading.png" "--preload-file ${CMAKE_CURRENT_SOURCE_DIR}/../resources/loading.png@resources/loading.png"
"--preload-file ${CMAKE_CURRENT_SOURCE_DIR}/../resources/loadingProgressBar.png@resources/loadingProgressBar.png" "--preload-file ${CMAKE_CURRENT_SOURCE_DIR}/../resources/loadingProgressBar.png@resources/loadingProgressBar.png"
"--preload-file ${CMAKE_CURRENT_SOURCE_DIR}/../resources/loadingProgressBarFrame.png@resources/loadingProgressBarFrame.png" "--preload-file ${CMAKE_CURRENT_SOURCE_DIR}/../resources/loadingProgressBarFrame.png@resources/loadingProgressBarFrame.png"
+3 -3
View File
@@ -3,7 +3,7 @@
{ {
"id": "main_hall", "id": "main_hall",
"positionX": -3.1, "positionX": -3.1,
"positionY": 6.0, "positionY": 4.8,
"positionZ": 0.0, "positionZ": 0.0,
"directionX": 0.0, "directionX": 0.0,
"directionY": -1.0, "directionY": -1.0,
@@ -20,7 +20,7 @@
"limitX": 3.75, "limitX": 3.75,
"limitY": 2.75, "limitY": 2.75,
"positionX": 4.95, "positionX": 4.95,
"positionY": 3.0, "positionY": 3.6,
"positionZ": -14.25, "positionZ": -14.25,
"directionX": 0.0, "directionX": 0.0,
"directionY": -1.0, "directionY": -1.0,
@@ -55,7 +55,7 @@
"limitX": 3.75, "limitX": 3.75,
"limitY": 2.75, "limitY": 2.75,
"positionX": -4.95, "positionX": -4.95,
"positionY": 4.0, "positionY": 4.2,
"positionZ": -19.95, "positionZ": -19.95,
"directionX": 0.0, "directionX": 0.0,
"directionY": -1.0, "directionY": -1.0,
@@ -412,6 +412,70 @@
} }
] ]
}, },
{
"id": "dialog_chat_aiperi003",
"start": "line_1",
"nodes": [
{
"id": "line_1",
"type": "Line",
"speaker": "Бекзат",
"portrait": "resources/dialogue/portrait_phone.png",
"text": "Айпери ты куда убежала?",
"next": "line_2",
"chatBubble": "out"
},
{
"id": "line_2",
"type": "Line",
"speaker": "Айпери",
"portrait": "resources/dialogue/portrait_phone.png",
"text": "Ты достал уже, я не могу тебя ждать вечно! Возишься как сонная муха.",
"next": "line_3",
"chatBubble": "in"
},
{
"id": "line_3",
"type": "Line",
"speaker": "Айпери",
"portrait": "resources/dialogue/portrait_phone.png",
"text": "У меня нет времени ждать тебя, мне уже пора на курсы ехать.",
"next": "line_4",
"chatBubble": "in"
},
{
"id": "line_4",
"type": "Line",
"speaker": "Бекзат",
"portrait": "resources/dialogue/portrait_phone.png",
"text": "Так когда я тебе нож верну?",
"next": "line_5",
"chatBubble": "out"
},
{
"id": "line_5",
"type": "Line",
"speaker": "Айпери",
"portrait": "resources/dialogue/portrait_phone.png",
"text": "Приходи завтра в универ! Я каждый день в унике с раннего утра.",
"next": "line_6",
"chatBubble": "in"
},
{
"id": "line_6",
"type": "Line",
"speaker": "Бекзат",
"portrait": "resources/dialogue/portrait_phone.png",
"text": "Хорошо, встретимся завтра.",
"next": "end_1",
"chatBubble": "out"
},
{
"id": "end_1",
"type": "End"
}
]
},
{ {
"id": "dialog_car001", "id": "dialog_car001",
"start": "line_1", "start": "line_1",
@@ -0,0 +1,20 @@
precision highp float;
attribute vec3 vPosition;
attribute vec2 vTexCoord;
attribute vec3 vNormal;
varying vec2 texCoord;
varying vec4 fragPosLightSpace;
varying vec3 fragNormal;
uniform mat4 ProjectionModelViewMatrix;
uniform mat4 ModelViewMatrix;
uniform mat4 uLightFromCamera;
void main()
{
gl_Position = ProjectionModelViewMatrix * vec4(vPosition, 1.0);
texCoord = vTexCoord;
fragPosLightSpace = uLightFromCamera * ModelViewMatrix * vec4(vPosition, 1.0);
fragNormal = mat3(ModelViewMatrix) * vNormal;
}
+23
View File
@@ -0,0 +1,23 @@
attribute vec3 vPosition;
attribute vec2 vTexCoord;
attribute vec3 vNormal;
varying vec2 texCoord;
varying vec4 fragPosLightSpace;
varying vec3 fragNormal;
varying float fogDistance;
uniform mat4 ProjectionModelViewMatrix;
uniform mat4 ModelViewMatrix;
uniform mat4 uLightFromCamera;
uniform vec3 uPlayerEyePos;
void main()
{
vec4 eyePos = ModelViewMatrix * vec4(vPosition, 1.0);
fogDistance = length(eyePos.xyz - uPlayerEyePos);
gl_Position = ProjectionModelViewMatrix * vec4(vPosition, 1.0);
texCoord = vTexCoord;
fragPosLightSpace = uLightFromCamera * eyePos;
fragNormal = mat3(ModelViewMatrix) * vNormal;
}
@@ -0,0 +1,69 @@
attribute vec3 vPosition;
attribute vec2 vTexCoord;
attribute vec3 vNormal;
attribute vec4 aBoneIndices0;
attribute vec2 aBoneIndices1;
attribute vec4 aBoneWeights0;
attribute vec2 aBoneWeights1;
varying vec2 texCoord;
varying vec4 fragPosLightSpace;
varying vec3 fragNormal;
varying float fogDistance;
uniform mat4 ProjectionModelViewMatrix;
uniform mat4 ModelViewMatrix;
uniform mat4 uLightFromCamera;
uniform mat4 uBoneMatrices[58];
uniform vec3 uPlayerEyePos;
void main()
{
vec4 skinnedPos = vec4(0.0, 0.0, 0.0, 0.0);
vec3 skinnedNormal = vec3(0.0, 0.0, 0.0);
vec4 originalPos = vec4(vPosition, 1.0);
float totalWeight = 0.0;
if (aBoneWeights0.x > 0.0) {
skinnedPos += uBoneMatrices[int(aBoneIndices0.x)] * originalPos * aBoneWeights0.x;
skinnedNormal += mat3(uBoneMatrices[int(aBoneIndices0.x)]) * vNormal * aBoneWeights0.x;
totalWeight += aBoneWeights0.x;
}
if (aBoneWeights0.y > 0.0) {
skinnedPos += uBoneMatrices[int(aBoneIndices0.y)] * originalPos * aBoneWeights0.y;
skinnedNormal += mat3(uBoneMatrices[int(aBoneIndices0.y)]) * vNormal * aBoneWeights0.y;
totalWeight += aBoneWeights0.y;
}
if (aBoneWeights0.z > 0.0) {
skinnedPos += uBoneMatrices[int(aBoneIndices0.z)] * originalPos * aBoneWeights0.z;
skinnedNormal += mat3(uBoneMatrices[int(aBoneIndices0.z)]) * vNormal * aBoneWeights0.z;
totalWeight += aBoneWeights0.z;
}
if (aBoneWeights0.w > 0.0) {
skinnedPos += uBoneMatrices[int(aBoneIndices0.w)] * originalPos * aBoneWeights0.w;
skinnedNormal += mat3(uBoneMatrices[int(aBoneIndices0.w)]) * vNormal * aBoneWeights0.w;
totalWeight += aBoneWeights0.w;
}
if (aBoneWeights1.x > 0.0) {
skinnedPos += uBoneMatrices[int(aBoneIndices1.x)] * originalPos * aBoneWeights1.x;
skinnedNormal += mat3(uBoneMatrices[int(aBoneIndices1.x)]) * vNormal * aBoneWeights1.x;
totalWeight += aBoneWeights1.x;
}
if (aBoneWeights1.y > 0.0) {
skinnedPos += uBoneMatrices[int(aBoneIndices1.y)] * originalPos * aBoneWeights1.y;
skinnedNormal += mat3(uBoneMatrices[int(aBoneIndices1.y)]) * vNormal * aBoneWeights1.y;
totalWeight += aBoneWeights1.y;
}
if (totalWeight < 0.001) {
skinnedPos = originalPos;
skinnedNormal = vNormal;
}
vec4 eyePos = ModelViewMatrix * skinnedPos;
fogDistance = length(eyePos.xyz - uPlayerEyePos);
gl_Position = ProjectionModelViewMatrix * skinnedPos;
texCoord = vTexCoord;
fragPosLightSpace = uLightFromCamera * eyePos;
fragNormal = mat3(ModelViewMatrix) * skinnedNormal;
}
+55
View File
@@ -0,0 +1,55 @@
attribute vec3 vPosition;
attribute vec2 vTexCoord;
attribute vec4 aBoneIndices0;
attribute vec2 aBoneIndices1;
attribute vec4 aBoneWeights0;
attribute vec2 aBoneWeights1;
varying vec2 texCoord;
varying float fogDistance;
uniform mat4 ProjectionModelViewMatrix;
uniform mat4 ModelViewMatrix;
uniform mat4 uBoneMatrices[58];
uniform vec3 uPlayerEyePos;
void main()
{
vec4 skinnedPos = vec4(0.0, 0.0, 0.0, 0.0);
vec4 originalPos = vec4(vPosition, 1.0);
float totalWeight = 0.0;
if (aBoneWeights0.x > 0.0) {
skinnedPos += uBoneMatrices[int(aBoneIndices0.x)] * originalPos * aBoneWeights0.x;
totalWeight += aBoneWeights0.x;
}
if (aBoneWeights0.y > 0.0) {
skinnedPos += uBoneMatrices[int(aBoneIndices0.y)] * originalPos * aBoneWeights0.y;
totalWeight += aBoneWeights0.y;
}
if (aBoneWeights0.z > 0.0) {
skinnedPos += uBoneMatrices[int(aBoneIndices0.z)] * originalPos * aBoneWeights0.z;
totalWeight += aBoneWeights0.z;
}
if (aBoneWeights0.w > 0.0) {
skinnedPos += uBoneMatrices[int(aBoneIndices0.w)] * originalPos * aBoneWeights0.w;
totalWeight += aBoneWeights0.w;
}
if (aBoneWeights1.x > 0.0) {
skinnedPos += uBoneMatrices[int(aBoneIndices1.x)] * originalPos * aBoneWeights1.x;
totalWeight += aBoneWeights1.x;
}
if (aBoneWeights1.y > 0.0) {
skinnedPos += uBoneMatrices[int(aBoneIndices1.y)] * originalPos * aBoneWeights1.y;
totalWeight += aBoneWeights1.y;
}
if (totalWeight < 0.001) {
skinnedPos = originalPos;
}
vec4 eyePos = ModelViewMatrix * skinnedPos;
fogDistance = length(eyePos.xyz - uPlayerEyePos);
gl_Position = ProjectionModelViewMatrix * skinnedPos;
texCoord = vTexCoord;
}
@@ -1,4 +1,4 @@
precision mediump float; precision highp float;
uniform sampler2D Texture; uniform sampler2D Texture;
uniform sampler2D uShadowMap; uniform sampler2D uShadowMap;
@@ -0,0 +1,28 @@
precision highp float;
attribute vec3 vPosition;
attribute vec2 vTexCoord;
attribute vec3 vNormal;
varying vec2 texCoord;
varying vec4 fragPosLightSpace;
varying vec3 fragNormal;
varying float fogDistance;
varying vec3 fragViewPos;
varying vec2 fragWorldXZ;
uniform mat4 ProjectionModelViewMatrix;
uniform mat4 ModelViewMatrix;
uniform mat4 uLightFromCamera;
uniform vec3 uPlayerEyePos;
void main()
{
vec4 eyePos = ModelViewMatrix * vec4(vPosition, 1.0);
fogDistance = length(eyePos.xyz - uPlayerEyePos);
gl_Position = ProjectionModelViewMatrix * vec4(vPosition, 1.0);
texCoord = vTexCoord;
fragViewPos = eyePos.xyz;
fragNormal = mat3(ModelViewMatrix) * vNormal;
fragPosLightSpace = uLightFromCamera * eyePos;
fragWorldXZ = vPosition.xz;
}
@@ -0,0 +1,74 @@
attribute vec3 vPosition;
attribute vec2 vTexCoord;
attribute vec3 vNormal;
attribute vec4 aBoneIndices0;
attribute vec2 aBoneIndices1;
attribute vec4 aBoneWeights0;
attribute vec2 aBoneWeights1;
varying vec2 texCoord;
varying vec4 fragPosLightSpace;
varying vec3 fragNormal;
varying float fogDistance;
varying vec3 fragViewPos;
varying vec2 fragWorldXZ;
uniform mat4 ProjectionModelViewMatrix;
uniform mat4 ModelViewMatrix;
uniform mat4 uLightFromCamera;
uniform mat4 uViewInverse;
uniform mat4 uBoneMatrices[58];
uniform vec3 uPlayerEyePos;
void main()
{
vec4 skinnedPos = vec4(0.0, 0.0, 0.0, 0.0);
vec3 skinnedNormal = vec3(0.0, 0.0, 0.0);
vec4 originalPos = vec4(vPosition, 1.0);
float totalWeight = 0.0;
if (aBoneWeights0.x > 0.0) {
skinnedPos += uBoneMatrices[int(aBoneIndices0.x)] * originalPos * aBoneWeights0.x;
skinnedNormal += mat3(uBoneMatrices[int(aBoneIndices0.x)]) * vNormal * aBoneWeights0.x;
totalWeight += aBoneWeights0.x;
}
if (aBoneWeights0.y > 0.0) {
skinnedPos += uBoneMatrices[int(aBoneIndices0.y)] * originalPos * aBoneWeights0.y;
skinnedNormal += mat3(uBoneMatrices[int(aBoneIndices0.y)]) * vNormal * aBoneWeights0.y;
totalWeight += aBoneWeights0.y;
}
if (aBoneWeights0.z > 0.0) {
skinnedPos += uBoneMatrices[int(aBoneIndices0.z)] * originalPos * aBoneWeights0.z;
skinnedNormal += mat3(uBoneMatrices[int(aBoneIndices0.z)]) * vNormal * aBoneWeights0.z;
totalWeight += aBoneWeights0.z;
}
if (aBoneWeights0.w > 0.0) {
skinnedPos += uBoneMatrices[int(aBoneIndices0.w)] * originalPos * aBoneWeights0.w;
skinnedNormal += mat3(uBoneMatrices[int(aBoneIndices0.w)]) * vNormal * aBoneWeights0.w;
totalWeight += aBoneWeights0.w;
}
if (aBoneWeights1.x > 0.0) {
skinnedPos += uBoneMatrices[int(aBoneIndices1.x)] * originalPos * aBoneWeights1.x;
skinnedNormal += mat3(uBoneMatrices[int(aBoneIndices1.x)]) * vNormal * aBoneWeights1.x;
totalWeight += aBoneWeights1.x;
}
if (aBoneWeights1.y > 0.0) {
skinnedPos += uBoneMatrices[int(aBoneIndices1.y)] * originalPos * aBoneWeights1.y;
skinnedNormal += mat3(uBoneMatrices[int(aBoneIndices1.y)]) * vNormal * aBoneWeights1.y;
totalWeight += aBoneWeights1.y;
}
if (totalWeight < 0.001) {
skinnedPos = originalPos;
skinnedNormal = vNormal;
}
vec4 eyePos = ModelViewMatrix * skinnedPos;
fogDistance = length(eyePos.xyz - uPlayerEyePos);
gl_Position = ProjectionModelViewMatrix * skinnedPos;
texCoord = vTexCoord;
fragViewPos = eyePos.xyz;
fragNormal = mat3(ModelViewMatrix) * skinnedNormal;
fragPosLightSpace = uLightFromCamera * eyePos;
fragWorldXZ = (uViewInverse * eyePos).xz;
}
@@ -0,0 +1,71 @@
attribute vec3 vPosition;
attribute vec2 vTexCoord;
attribute vec3 vNormal;
attribute vec4 aBoneIndices0;
attribute vec2 aBoneIndices1;
attribute vec4 aBoneWeights0;
attribute vec2 aBoneWeights1;
varying vec2 texCoord;
varying float fogDistance;
varying vec3 fragViewPos;
varying vec3 fragNormal;
varying vec2 fragWorldXZ;
uniform mat4 ProjectionModelViewMatrix;
uniform mat4 ModelViewMatrix;
uniform mat4 uViewInverse;
uniform mat4 uBoneMatrices[58];
uniform vec3 uPlayerEyePos;
void main()
{
vec4 skinnedPos = vec4(0.0, 0.0, 0.0, 0.0);
vec3 skinnedNormal = vec3(0.0, 0.0, 0.0);
vec4 originalPos = vec4(vPosition, 1.0);
float totalWeight = 0.0;
if (aBoneWeights0.x > 0.0) {
skinnedPos += uBoneMatrices[int(aBoneIndices0.x)] * originalPos * aBoneWeights0.x;
skinnedNormal += mat3(uBoneMatrices[int(aBoneIndices0.x)]) * vNormal * aBoneWeights0.x;
totalWeight += aBoneWeights0.x;
}
if (aBoneWeights0.y > 0.0) {
skinnedPos += uBoneMatrices[int(aBoneIndices0.y)] * originalPos * aBoneWeights0.y;
skinnedNormal += mat3(uBoneMatrices[int(aBoneIndices0.y)]) * vNormal * aBoneWeights0.y;
totalWeight += aBoneWeights0.y;
}
if (aBoneWeights0.z > 0.0) {
skinnedPos += uBoneMatrices[int(aBoneIndices0.z)] * originalPos * aBoneWeights0.z;
skinnedNormal += mat3(uBoneMatrices[int(aBoneIndices0.z)]) * vNormal * aBoneWeights0.z;
totalWeight += aBoneWeights0.z;
}
if (aBoneWeights0.w > 0.0) {
skinnedPos += uBoneMatrices[int(aBoneIndices0.w)] * originalPos * aBoneWeights0.w;
skinnedNormal += mat3(uBoneMatrices[int(aBoneIndices0.w)]) * vNormal * aBoneWeights0.w;
totalWeight += aBoneWeights0.w;
}
if (aBoneWeights1.x > 0.0) {
skinnedPos += uBoneMatrices[int(aBoneIndices1.x)] * originalPos * aBoneWeights1.x;
skinnedNormal += mat3(uBoneMatrices[int(aBoneIndices1.x)]) * vNormal * aBoneWeights1.x;
totalWeight += aBoneWeights1.x;
}
if (aBoneWeights1.y > 0.0) {
skinnedPos += uBoneMatrices[int(aBoneIndices1.y)] * originalPos * aBoneWeights1.y;
skinnedNormal += mat3(uBoneMatrices[int(aBoneIndices1.y)]) * vNormal * aBoneWeights1.y;
totalWeight += aBoneWeights1.y;
}
if (totalWeight < 0.001) {
skinnedPos = originalPos;
skinnedNormal = vNormal;
}
vec4 eyePos = ModelViewMatrix * skinnedPos;
fogDistance = length(eyePos.xyz - uPlayerEyePos);
gl_Position = ProjectionModelViewMatrix * skinnedPos;
texCoord = vTexCoord;
fragViewPos = eyePos.xyz;
fragNormal = mat3(ModelViewMatrix) * skinnedNormal;
fragWorldXZ = (uViewInverse * eyePos).xz;
}
+24
View File
@@ -0,0 +1,24 @@
attribute vec3 vPosition;
attribute vec2 vTexCoord;
attribute vec3 vNormal;
varying vec2 texCoord;
varying float fogDistance;
varying vec3 fragViewPos;
varying vec3 fragNormal;
varying vec2 fragWorldXZ;
uniform mat4 ProjectionModelViewMatrix;
uniform mat4 ModelViewMatrix;
uniform vec3 uPlayerEyePos;
void main()
{
vec4 eyePos = ModelViewMatrix * vec4(vPosition.xyz, 1.0);
fogDistance = length(eyePos.xyz - uPlayerEyePos);
gl_Position = ProjectionModelViewMatrix * vec4(vPosition.xyz, 1.0);
texCoord = vTexCoord;
fragViewPos = eyePos.xyz;
fragNormal = mat3(ModelViewMatrix) * vNormal;
fragWorldXZ = vPosition.xz;
}
@@ -0,0 +1,65 @@
attribute vec3 vPosition;
attribute vec2 vTexCoord;
attribute vec3 vNormal;
attribute vec4 aBoneIndices0;
attribute vec2 aBoneIndices1;
attribute vec4 aBoneWeights0;
attribute vec2 aBoneWeights1;
varying vec2 texCoord;
varying vec4 fragPosLightSpace;
varying vec3 fragNormal;
uniform mat4 ProjectionModelViewMatrix;
uniform mat4 ModelViewMatrix;
uniform mat4 uLightFromCamera;
uniform mat4 uBoneMatrices[58];
void main()
{
vec4 skinnedPos = vec4(0.0, 0.0, 0.0, 0.0);
vec3 skinnedNormal = vec3(0.0, 0.0, 0.0);
vec4 originalPos = vec4(vPosition, 1.0);
float totalWeight = 0.0;
if (aBoneWeights0.x > 0.0) {
skinnedPos += uBoneMatrices[int(aBoneIndices0.x)] * originalPos * aBoneWeights0.x;
skinnedNormal += mat3(uBoneMatrices[int(aBoneIndices0.x)]) * vNormal * aBoneWeights0.x;
totalWeight += aBoneWeights0.x;
}
if (aBoneWeights0.y > 0.0) {
skinnedPos += uBoneMatrices[int(aBoneIndices0.y)] * originalPos * aBoneWeights0.y;
skinnedNormal += mat3(uBoneMatrices[int(aBoneIndices0.y)]) * vNormal * aBoneWeights0.y;
totalWeight += aBoneWeights0.y;
}
if (aBoneWeights0.z > 0.0) {
skinnedPos += uBoneMatrices[int(aBoneIndices0.z)] * originalPos * aBoneWeights0.z;
skinnedNormal += mat3(uBoneMatrices[int(aBoneIndices0.z)]) * vNormal * aBoneWeights0.z;
totalWeight += aBoneWeights0.z;
}
if (aBoneWeights0.w > 0.0) {
skinnedPos += uBoneMatrices[int(aBoneIndices0.w)] * originalPos * aBoneWeights0.w;
skinnedNormal += mat3(uBoneMatrices[int(aBoneIndices0.w)]) * vNormal * aBoneWeights0.w;
totalWeight += aBoneWeights0.w;
}
if (aBoneWeights1.x > 0.0) {
skinnedPos += uBoneMatrices[int(aBoneIndices1.x)] * originalPos * aBoneWeights1.x;
skinnedNormal += mat3(uBoneMatrices[int(aBoneIndices1.x)]) * vNormal * aBoneWeights1.x;
totalWeight += aBoneWeights1.x;
}
if (aBoneWeights1.y > 0.0) {
skinnedPos += uBoneMatrices[int(aBoneIndices1.y)] * originalPos * aBoneWeights1.y;
skinnedNormal += mat3(uBoneMatrices[int(aBoneIndices1.y)]) * vNormal * aBoneWeights1.y;
totalWeight += aBoneWeights1.y;
}
if (totalWeight < 0.001) {
skinnedPos = originalPos;
skinnedNormal = vNormal;
}
gl_Position = ProjectionModelViewMatrix * skinnedPos;
texCoord = vTexCoord;
fragPosLightSpace = uLightFromCamera * ModelViewMatrix * skinnedPos;
fragNormal = mat3(ModelViewMatrix) * skinnedNormal;
}
+4 -2
View File
@@ -106,13 +106,15 @@ end
function on_alik_door_click() function on_alik_door_click()
if (game_api.is_night()) then if (game_api.is_night()) then
game_api.start_dialogue("door_alik_dialog002") game_api.start_dialogue("door_alik_dialog002")
game_api.player_stop()
game_api.player_rotate_to(-90.0)
else else
if (alik_door_opened == false) then if (alik_door_opened == false) then
game_api.start_dialogue("door_alik_dialog001") game_api.start_dialogue("door_alik_dialog001")
game_api.player_stop()
game_api.player_rotate_to(-90.0)
end end
end end
game_api.player_stop()
game_api.player_rotate_to(-90.0)
end end
function callback_deactivate_cover_alik_room() function callback_deactivate_cover_alik_room()
+32 -1
View File
@@ -155,8 +155,9 @@ function callback_aiperi_chat()
game_api.setIntValue("aiperi_chat_opened", 1) game_api.setIntValue("aiperi_chat_opened", 1)
local aiperi_knife_aware = game_api.getIntValue("aiperi_knife_aware") local aiperi_knife_aware = game_api.getIntValue("aiperi_knife_aware")
local aiperi_talked_after_knife = game_api.getIntValue("aiperi_talked_after_knife") local aiperi_talked_after_knife = game_api.getIntValue("aiperi_talked_after_knife")
local player_hold_knife = game_api.getIntValue("player_hold_knife")
if (player_hold_knife) and (aiperi_talked_after_knife == 0) then if (player_hold_knife==1) and (aiperi_talked_after_knife == 0) then
game_api.start_dialogue("dialog_chat_aiperi003") game_api.start_dialogue("dialog_chat_aiperi003")
game_api.setIntValue("aiperi_talked_after_knife", 1) game_api.setIntValue("aiperi_talked_after_knife", 1)
else else
@@ -170,6 +171,36 @@ function callback_aiperi_chat()
end end
end end
end end
--[[
local aiperi_chat_opened = game_api.getIntValue("aiperi_chat_opened")
local aiperi_knife_aware = game_api.getIntValue("aiperi_knife_aware")
local aiperi_talked_after_knife = game_api.getIntValue("aiperi_talked_after_knife")
local lection_is_over = game_api.getIntValue("lection_is_over")
local player_hold_knife = game_api.getIntValue("player_hold_knife")
local player_hold_key = game_api.getIntValue("player_hold_key")
if (player_hold_knife==1) and (aiperi_talked_after_knife == 0) then
game_api.start_dialogue("dialog_chat_aiperi003")
game_api.setIntValue("aiperi_talked_after_knife", 1)
else
print("dialogx- step 2")
if aiperi_chat_opened == 0 then
print("dialogx- step 3")
game_api.setIntValue("aiperi_chat_opened", 1)
if aiperi_knife_aware == 0 then
print("dialogx- step 4")
if (lection_is_over == 1) then
print("dialogx- step 5")
if (player_hold_key == 0) then
print("dialogx- step 6")
game_api.start_dialogue("dialog_chat_aiperi002")
end
else
game_api.start_dialogue("dialog_chat_aiperi001")
end
end
end
end]]
end end
end end
+6 -4
View File
@@ -5,7 +5,6 @@ hall_door_opened = false
teacher_door_opened = false teacher_door_opened = false
player_hold_book = false player_hold_book = false
player_hold_knife = false
teacher_arrived_to_library = false teacher_arrived_to_library = false
teacher_told_about_book = false teacher_told_about_book = false
@@ -60,9 +59,10 @@ game_api.set_trigger_zone_callbacks("lection_hall_zone001",
function knife_dialog_zone001_enter_callback() function knife_dialog_zone001_enter_callback()
local day = game_api.getIntValue("day") local day = game_api.getIntValue("day")
local player_hold_key = game_api.getIntValue("player_hold_key") local player_hold_key = game_api.getIntValue("player_hold_key")
local player_hold_knife = game_api.getIntValue("player_hold_knife")
if (day == 0) then if (day == 0) then
if (player_hold_knife == false) then if (player_hold_knife == 0) then
local lection_is_over = game_api.getIntValue("lection_is_over") local lection_is_over = game_api.getIntValue("lection_is_over")
if lection_is_over == 1 then if lection_is_over == 1 then
game_api.npc_stop_and_rotate_to_player(1) game_api.npc_stop_and_rotate_to_player(1)
@@ -111,7 +111,8 @@ function on_knife_pickup()
game_api.pickup_item("knife") game_api.pickup_item("knife")
game_api.deactivate_interactive_object("Knife001") game_api.deactivate_interactive_object("Knife001")
game_api.set_npc_enabled(1, false) game_api.set_npc_enabled(1, false)
player_hold_knife = true game_api.setIntValue("player_hold_knife", 1)
game_api.set_trigger_zone_enabled(2, true) game_api.set_trigger_zone_enabled(2, true)
game_api.npc_walk_to(0, -4.57412, 0, 6.78495, on_teacher_arrived2) game_api.npc_walk_to(0, -4.57412, 0, 6.78495, on_teacher_arrived2)
game_api.quest_set_objective_completed("aiperi_knife", "aiperi_knife_take") game_api.quest_set_objective_completed("aiperi_knife", "aiperi_knife_take")
@@ -1171,8 +1172,9 @@ function callback_aiperi_chat()
local aiperi_knife_aware = game_api.getIntValue("aiperi_knife_aware") local aiperi_knife_aware = game_api.getIntValue("aiperi_knife_aware")
local aiperi_talked_after_knife = game_api.getIntValue("aiperi_talked_after_knife") local aiperi_talked_after_knife = game_api.getIntValue("aiperi_talked_after_knife")
local lection_is_over = game_api.getIntValue("lection_is_over") local lection_is_over = game_api.getIntValue("lection_is_over")
local player_hold_knife = game_api.getIntValue("player_hold_knife")
if (player_hold_knife) and (aiperi_talked_after_knife == 0) then if (player_hold_knife==1) and (aiperi_talked_after_knife == 0) then
game_api.start_dialogue("dialog_chat_aiperi003") game_api.start_dialogue("dialog_chat_aiperi003")
game_api.setIntValue("aiperi_talked_after_knife", 1) game_api.setIntValue("aiperi_talked_after_knife", 1)
else else
+65
View File
@@ -0,0 +1,65 @@
{
"root": {
"type": "FrameLayout",
"name": "hud_root",
"width": "match_parent",
"height": "match_parent",
"children": [
{
"type": "Button",
"name": "settingsButton",
"horizontal_gravity": "right",
"vertical_gravity": "top",
"x": -35,
"y": -35,
"width": 200,
"height": 200,
"clickZoneWidth": 176,
"clickZoneHeight": 176,
"textures": {
"normal": "resources/w/ui/img/Settings001_State=Default001.png",
"hover": "resources/w/ui/img/Settings001_State=Selected001.png",
"pressed": "resources/w/ui/img/Settings001_State=Tap001.png"
}
},
{
"type": "StaticImage",
"name": "location",
"width": 380,
"height": 64,
"y": 30,
"horizontal_gravity": "center",
"vertical_gravity": "bottom",
"texture": "resources/w/ui/img/Location_dorm.png"
},
{
"type": "LinearLayout",
"orientation": "vertical",
"vertical_align": "center",
"horizontal_align": "center",
"spacing": 0,
"width": "match_parent",
"height": 600,
"y": 300,
"children": [
{
"type": "StaticImage",
"name": "hint2",
"width": 660,
"height": 201,
"horizontal_gravity": "center",
"texture": "resources/w/ui/img/Hint2android.png",
"pulse": {
"minScale": 0.92,
"maxScale": 1.08,
"periodMs": 1500
},
"fadeIn": {
"durationMs": 1000
}
}
]
}
]
}
}
+65
View File
@@ -0,0 +1,65 @@
{
"root": {
"type": "FrameLayout",
"name": "hud_root",
"width": "match_parent",
"height": "match_parent",
"children": [
{
"type": "Button",
"name": "settingsButton",
"horizontal_gravity": "right",
"vertical_gravity": "top",
"x": -35,
"y": -35,
"width": 200,
"height": 200,
"clickZoneWidth": 176,
"clickZoneHeight": 176,
"textures": {
"normal": "resources/w/ui/img/Settings001_State=Default001.png",
"hover": "resources/w/ui/img/Settings001_State=Selected001.png",
"pressed": "resources/w/ui/img/Settings001_State=Tap001.png"
}
},
{
"type": "StaticImage",
"name": "location",
"width": 380,
"height": 64,
"y": 30,
"horizontal_gravity": "center",
"vertical_gravity": "bottom",
"texture": "resources/w/ui/img/Location_dorm.png"
},
{
"type": "LinearLayout",
"orientation": "vertical",
"vertical_align": "center",
"horizontal_align": "center",
"spacing": 0,
"width": "match_parent",
"height": 600,
"y": 300,
"children": [
{
"type": "StaticImage",
"name": "hint3",
"width": 692,
"height": 312,
"horizontal_gravity": "center",
"texture": "resources/w/ui/img/Hint3.png",
"pulse": {
"minScale": 0.92,
"maxScale": 1.08,
"periodMs": 1500
},
"fadeIn": {
"durationMs": 1000
}
}
]
}
]
}
}
+65
View File
@@ -0,0 +1,65 @@
{
"root": {
"type": "FrameLayout",
"name": "hud_root",
"width": "match_parent",
"height": "match_parent",
"children": [
{
"type": "LinearLayout",
"orientation": "vertical",
"vertical_align": "center",
"horizontal_align": "center",
"spacing": 0,
"width": "match_parent",
"height": 600,
"y": 300,
"children": [
{
"type": "StaticImage",
"name": "hint4",
"width": 705,
"height": 234,
"horizontal_gravity": "center",
"texture": "resources/w/ui/img/Hint4android.png",
"pulse": {
"minScale": 0.92,
"maxScale": 1.08,
"periodMs": 1500
},
"fadeIn": {
"durationMs": 1000
}
}
]
},
{
"type": "Button",
"name": "settingsButton",
"horizontal_gravity": "right",
"vertical_gravity": "top",
"x": -35,
"y": -35,
"width": 200,
"height": 200,
"clickZoneWidth": 176,
"clickZoneHeight": 176,
"textures": {
"normal": "resources/w/ui/img/Settings001_State=Default001.png",
"hover": "resources/w/ui/img/Settings001_State=Selected001.png",
"pressed": "resources/w/ui/img/Settings001_State=Tap001.png"
}
},
{
"type": "StaticImage",
"name": "location",
"width": 380,
"height": 64,
"y": 30,
"horizontal_gravity": "center",
"vertical_gravity": "bottom",
"texture": "resources/w/ui/img/Location_dorm.png"
}
]
}
}
+2 -2
View File
@@ -129,8 +129,8 @@
"name": "hint6b", "name": "hint6b",
"horizontal_gravity": "right", "horizontal_gravity": "right",
"vertical_gravity": "top", "vertical_gravity": "top",
"width": 738.75, "width": 630.4,
"height": 292.5, "height": 249.6,
"x": 80, "x": 80,
"y": 100, "y": 100,
"texture": "resources/w/ui/img/Hint6b.png", "texture": "resources/w/ui/img/Hint6b.png",
+2 -2
View File
@@ -82,8 +82,8 @@
"name": "hint6b", "name": "hint6b",
"horizontal_gravity": "right", "horizontal_gravity": "right",
"vertical_gravity": "top", "vertical_gravity": "top",
"width": 738.75, "width": 630.4,
"height": 292.5, "height": 249.6,
"x": 80, "x": 80,
"y": 100, "y": 100,
"texture": "resources/w/ui/img/Hint6b.png", "texture": "resources/w/ui/img/Hint6b.png",
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+369
View File
@@ -0,0 +1,369 @@
{
"root": {
"type": "FrameLayout",
"width": "match_parent",
"height": "match_parent",
"children": [
{
"type": "StaticImage",
"name": "creditsBkg",
"width": 2992,
"height": 1632,
"horizontal_gravity": "center",
"vertical_gravity": "center",
"texture": "resources/w/ui/img/main/MenuBkg001_v001.png"
},
{
"type": "LinearLayout",
"name": "creditsLinearLayout",
"orientation": "vertical",
"horizontal_gravity": "center",
"vertical_gravity": "top",
"horizontal_align": "left",
"animations": {
"slowScroll": {
"repeat": true,
"steps": [
{
"type": "move",
"to": [
0,
3600
],
"duration": 37.0
}
]
}
},
"width": 300,
"height": 4500,
"spacing": 20,
"children": [
{
"type": "TextView",
"name": "smallPause",
"width": 300,
"height": 1570,
"text": "",
"fontSize": 40,
"textCentered": true,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsTitleText",
"width": 300,
"height": 60,
"text": "Тень над Бишкеком Демо",
"fontSize": 40,
"textCentered": true,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText1",
"width": 300,
"height": 20,
"text": "Продюсер:",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 0.85, 0.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText2",
"width": 300,
"height": 40,
"text": "Владислав Хорев",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText3",
"width": 300,
"height": 20,
"text": "Гейм-дизайн:",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 0.85, 0.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText4",
"width": 300,
"height": 20,
"text": "Владислав Хорев",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText5",
"width": 300,
"height": 40,
"text": "Лейла Боброва",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText6",
"width": 300,
"height": 20,
"text": "Сценарий:",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 0.85, 0.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText7",
"width": 300,
"height": 20,
"text": "Владислав Хорев",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText8",
"width": 300,
"height": 40,
"text": "Лейла Боброва",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText9",
"width": 300,
"height": 20,
"text": "Разработка:",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 0.85, 0.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText10",
"width": 300,
"height": 20,
"text": "Владислав Хорев",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText11",
"width": 300,
"height": 20,
"text": "Владислав Кан",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText12",
"width": 300,
"height": 20,
"text": "Бексултан Алмазбеков",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText13",
"width": 300,
"height": 40,
"text": "Сергей Зотов",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText14",
"width": 300,
"height": 20,
"text": "Персонажи и анимации:",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 0.85, 0.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText15",
"width": 300,
"height": 20,
"text": "Дмитрий Прохорчик",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText16",
"width": 300,
"height": 40,
"text": "Роман Тресцов",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText17",
"width": 300,
"height": 20,
"text": "3D ассеты:",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 0.85, 0.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText18",
"width": 300,
"height": 20,
"text": "Дмитрий Прохорчик",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText19",
"width": 300,
"height": 40,
"text": "Ishmaladi (turbosquid.com)",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText20",
"width": 300,
"height": 20,
"text": "Арты:",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 0.85, 0.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText21",
"width": 300,
"height": 40,
"text": "Maggie Tem",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText22",
"width": 300,
"height": 20,
"text": "UI/UX:",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 0.85, 0.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText23",
"width": 300,
"height": 40,
"text": "Кенже Казматова",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText24",
"width": 300,
"height": 20,
"text": "Музыка:",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 0.85, 0.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText25",
"width": 300,
"height": 40,
"text": "Pazetic_Ocean",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText26",
"width": 300,
"height": 20,
"text": "Звуки:",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 0.85, 0.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText27",
"width": 300,
"height": 300,
"text": "IENBA, ImAFoley, stradie,\nItsTheGoodstuff, uwesoundboiz,\nAnthousai, Foxfire-,\nn-lerche, CogFireStudios,\nadcbicycle, AntoineRomo,\nSmallConfusion, joedeshon,\nefectirijillo (FreeSound.org)",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText28",
"width": 300,
"height": 160,
"text": "Некоторые арты, 3D модели\nи текстуры были созданы\nс помощью нейросетей.",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText29",
"width": 300,
"height": 40,
"text": "Некоторые текстуры были\nразработаны Magnific\nwww.magnific.com",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0]
}
]
},
{
"type": "Button",
"name": "creditsBackButton",
"width": "match_parent",
"height": "match_parent",
"x": 0,
"y": 0,
"textures": {
"normal": "resources/transparent.png",
"hover": "resources/transparent.png",
"pressed": "resources/transparent.png"
}
}
]
}
}
@@ -188,7 +188,7 @@
"vertical_gravity": "top", "vertical_gravity": "top",
"width": 274, "width": 274,
"height": 274, "height": 274,
"x": -200, "x": 200,
"y": 650, "y": 650,
"textures": { "textures": {
"normal": "resources/w/ui/img/inv/ItemBook002.png", "normal": "resources/w/ui/img/inv/ItemBook002.png",
@@ -60,7 +60,7 @@
"horizontal_gravity": "center", "horizontal_gravity": "center",
"vertical_gravity": "top", "vertical_gravity": "top",
"text": "Главное Задание 1", "text": "Главное Задание 1",
"fontSize": 56, "fontSize": 40,
"fontPath": "resources/fonts/DroidSans.ttf", "fontPath": "resources/fonts/DroidSans.ttf",
"textCentered": false, "textCentered": false,
"topAligned": false, "topAligned": false,
@@ -92,7 +92,7 @@
"vertical_align": "bottom", "vertical_align": "bottom",
"name": "objective1nameLayout", "name": "objective1nameLayout",
"paddingY": 0, "paddingY": 0,
"width": 540.0, "width": 510.0,
"height": 60.0, "height": 60.0,
"x": 56, "x": 56,
"y": 370, "y": 370,
@@ -103,7 +103,7 @@
"horizontal_gravity": "center", "horizontal_gravity": "center",
"vertical_gravity": "top", "vertical_gravity": "top",
"paddingY": -20, "paddingY": -20,
"width": 540.0, "width": 510.0,
"height": 60.0, "height": 60.0,
"text": "Цель 1 Цель 1 Цель 1 Цель 1", "text": "Цель 1 Цель 1 Цель 1 Цель 1",
"fontSize": 32, "fontSize": 32,
@@ -139,7 +139,7 @@
"horizontal_gravity": "center", "horizontal_gravity": "center",
"vertical_gravity": "top", "vertical_gravity": "top",
"vertical_align": "bottom", "vertical_align": "bottom",
"width": 540.0, "width": 510.0,
"height": 80.0, "height": 80.0,
"x": 56, "x": 56,
"y": 450, "y": 450,
@@ -150,7 +150,7 @@
"horizontal_gravity": "center", "horizontal_gravity": "center",
"vertical_gravity": "top", "vertical_gravity": "top",
"paddingY": 0, "paddingY": 0,
"width": 540.0, "width": 510.0,
"height": 60.0, "height": 60.0,
"text": "Цель 2", "text": "Цель 2",
"fontSize": 32, "fontSize": 32,
@@ -187,7 +187,7 @@
"vertical_align": "bottom", "vertical_align": "bottom",
"name": "objective3nameLayout", "name": "objective3nameLayout",
"paddingY": 0, "paddingY": 0,
"width": 540.0, "width": 510.0,
"height": 60.0, "height": 60.0,
"x": 56, "x": 56,
"y": 530, "y": 530,
@@ -197,7 +197,7 @@
"name": "objective3name", "name": "objective3name",
"horizontal_gravity": "center", "horizontal_gravity": "center",
"vertical_gravity": "top", "vertical_gravity": "top",
"width": 540.0, "width": 510.0,
"height": 60.0, "height": 60.0,
"text": "Цель 3", "text": "Цель 3",
"fontSize": 32, "fontSize": 32,
@@ -218,7 +218,7 @@
"type": "TextView", "type": "TextView",
"name": "quest_description", "name": "quest_description",
"x": 4.0, "x": 4.0,
"y": 480.0, "y": 510.0,
"width": 580.0, "width": 580.0,
"height": 400.0, "height": 400.0,
"horizontal_gravity": "center", "horizontal_gravity": "center",
@@ -48,13 +48,13 @@
{ {
"type": "StaticImage", "type": "StaticImage",
"name": "chatTopCover", "name": "chatTopCover",
"width": 638, "width": 882,
"height": 101.25, "height": 158,
"x": 0, "x": 0,
"y": 536, "y": 569,
"horizontal_gravity": "center", "horizontal_gravity": "center",
"vertical_gravity": "center", "vertical_gravity": "center",
"texture": "resources/w/ui/img/phone/chat_top_cover001.png" "texture": "resources/w/ui/img/phone/ChatCoverTop002.png"
}, },
{ {
"type": "TextButton", "type": "TextButton",
@@ -62,7 +62,7 @@
"horizontal_gravity": "center", "horizontal_gravity": "center",
"vertical_gravity": "center", "vertical_gravity": "center",
"x": 0.0, "x": 0.0,
"y": 424, "y": 414,
"width": 638, "width": 638,
"height": 112, "height": 112,
"text": "Айпери", "text": "Айпери",
@@ -48,13 +48,13 @@
{ {
"type": "StaticImage", "type": "StaticImage",
"name": "chatTopCover", "name": "chatTopCover",
"width": 638, "width": 882,
"height": 101.25, "height": 158,
"x": 0, "x": 0,
"y": 536, "y": 569,
"horizontal_gravity": "center", "horizontal_gravity": "center",
"vertical_gravity": "center", "vertical_gravity": "center",
"texture": "resources/w/ui/img/phone/chat_top_cover001.png" "texture": "resources/w/ui/img/phone/ChatCoverTop002.png"
}, },
{ {
"type": "TextButton", "type": "TextButton",
@@ -48,13 +48,13 @@
{ {
"type": "StaticImage", "type": "StaticImage",
"name": "chatTopCover", "name": "chatTopCover",
"width": 638, "width": 882,
"height": 101.25, "height": 158,
"x": 0, "x": 0,
"y": 536, "y": 569,
"horizontal_gravity": "center", "horizontal_gravity": "center",
"vertical_gravity": "center", "vertical_gravity": "center",
"texture": "resources/w/ui/img/phone/chat_top_cover001.png" "texture": "resources/w/ui/img/phone/ChatCoverTop002.png"
}, },
{ {
"type": "TextButton", "type": "TextButton",
+80
View File
@@ -0,0 +1,80 @@
{
"root": {
"type": "FrameLayout",
"width": "match_parent",
"height": "match_parent",
"children": [
{
"type": "StaticImage",
"name": "aboutBkg",
"width": 2992,
"height": 1632,
"horizontal_gravity": "center",
"vertical_gravity": "center",
"texture": "resources/w/ui/img/main/MenuBkg001_v001.png"
},
{
"type": "StaticImage",
"name": "aboutPicture",
"width": 720,
"height": 720,
"horizontal_gravity": "center",
"vertical_gravity": "center",
"texture": "resources/w/ui/img/main/aboutPage003android.png"
},
{
"type": "TextButton",
"name": "websiteButton",
"horizontal_gravity": "center",
"vertical_gravity": "center",
"y": 200,
"width": 200,
"height": 60,
"text": "Сайт игры Тень над Бишкеком",
"fontSize": 36,
"color": [0.55, 0.9, 1.0, 1.0],
"textCentered": true
},
{
"type": "TextButton",
"name": "telegramButton",
"horizontal_gravity": "center",
"vertical_gravity": "center",
"y": -240,
"x": -150,
"width": 200,
"height": 60,
"text": "Telegram-канал",
"fontSize": 40,
"color": [0.55, 0.9, 1.0, 1.0],
"textCentered": true
},
{
"type": "TextButton",
"name": "discordButton",
"horizontal_gravity": "center",
"vertical_gravity": "center",
"y": -240,
"x": 150,
"width": 200,
"height": 60,
"text": "Наш Discord",
"fontSize": 40,
"color": [0.55, 0.9, 1.0, 1.0],
"textCentered": true
},
{
"type": "TextButton",
"name": "aboutBackButton",
"horizontal_gravity": "center",
"vertical_gravity": "bottom",
"y": 40,
"width": 200,
"height": 60,
"text": "Назад",
"fontSize": 40,
"textCentered": true
}
]
}
}
+13 -3
View File
@@ -28,9 +28,9 @@
"type": "move", "type": "move",
"to": [ "to": [
0, 0,
2600 2800
], ],
"duration": 30.0 "duration": 33.0
} }
] ]
} }
@@ -333,11 +333,21 @@
"type": "TextView", "type": "TextView",
"name": "creditsText28", "name": "creditsText28",
"width": 300, "width": 300,
"height": 40, "height": 160,
"text": "Некоторые арты, 3D модели\nи текстуры были созданы\nс помощью нейросетей.", "text": "Некоторые арты, 3D модели\nи текстуры были созданы\nс помощью нейросетей.",
"fontSize": 32, "fontSize": 32,
"textCentered": false, "textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0] "color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText29",
"width": 300,
"height": 40,
"text": "Некоторые текстуры были\nразработаны Magnific\nwww.magnific.com",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0]
} }
] ]
}, },
+1 -1
View File
@@ -125,7 +125,7 @@
"y": 10, "y": 10,
"width": 160, "width": 160,
"height": 36, "height": 36,
"text": "v. 1.0.1", "text": "v. 1.0.3",
"fontSize": 24, "fontSize": 24,
"textCentered": false, "textCentered": false,
"topAligned": true, "topAligned": true,
@@ -0,0 +1,127 @@
{
"root": {
"type": "FrameLayout",
"width": "match_parent",
"height": "match_parent",
"children": [
{
"type": "StaticImage",
"name": "mainMenuBkg",
"width": 2992,
"height": 1632,
"horizontal_gravity": "center",
"vertical_gravity": "center",
"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",
"vertical_gravity": "center",
"width": 450,
"height": 900,
"texture": "resources/w/ui/img/main/under_letters002.png"
},
{
"type": "StaticImage",
"name": "mainMenuLogo",
"horizontal_gravity": "center",
"vertical_gravity": "center",
"width": 320,
"height": 180,
"y": 235,
"texture": "resources/w/ui/img/main/letters002android.png"
},
{
"type": "LinearLayout",
"orientation": "vertical",
"horizontal_align": "center",
"vertical_align": "center",
"spacing": 24,
"y": 140,
"width": "match_parent",
"height": "match_parent",
"children": [
{
"type": "TextButton",
"name": "menuStartButton",
"width": 300,
"height": 44,
"text": "Начать игру",
"fontSize": 48,
"textCentered": true
},
{
"type": "TextButton",
"name": "menuLoadButton",
"width": 300,
"height": 44,
"text": "Загрузить игру",
"fontSize": 48,
"textCentered": true
},
{
"type": "TextButton",
"name": "menuSettingsButton",
"width": 300,
"height": 44,
"text": "Настройки",
"fontSize": 48,
"textCentered": true
},
{
"type": "TextButton",
"name": "menuLanguageButton",
"width": 300,
"height": 44,
"text": "Язык / Language",
"fontSize": 48,
"textCentered": true
},
{
"type": "TextButton",
"name": "menuAboutButton",
"width": 300,
"height": 44,
"text": "О игре",
"fontSize": 48,
"textCentered": true
},
{
"type": "TextButton",
"name": "menuCreditsButton",
"width": 300,
"height": 44,
"text": "Авторы",
"fontSize": 48,
"textCentered": true
}
]
},
{
"type": "TextView",
"name": "mainMenuVersion",
"horizontal_gravity": "right",
"vertical_gravity": "bottom",
"x": 10,
"y": 10,
"width": 160,
"height": 36,
"text": "v. 1.0.3",
"fontSize": 24,
"textCentered": false,
"topAligned": true,
"paddingY": 4
}
]
}
}
+2 -11
View File
@@ -43,22 +43,13 @@
"width": "match_parent", "width": "match_parent",
"height": "match_parent" "height": "match_parent"
}, },
{
"type": "StaticImage",
"name": "chatTopCover",
"width": 446.25,
"height": 70.82,
"x": 0,
"y": -50.82,
"horizontal_gravity": "center",
"texture": "resources/w/ui/img/phone/chat_top_cover001.png"
},
{ {
"type": "TextButton", "type": "TextButton",
"name": "chatTitleButton", "name": "chatTitleButton",
"horizontal_gravity": "center", "horizontal_gravity": "center",
"vertical_gravity": "center",
"x": 0.0, "x": 0.0,
"y": 20.0, "y": 280.0,
"width": 446.25, "width": 446.25,
"height": 78.4, "height": 78.4,
"text": "Айпери", "text": "Айпери",
+2 -11
View File
@@ -43,22 +43,13 @@
"width": "match_parent", "width": "match_parent",
"height": "match_parent" "height": "match_parent"
}, },
{
"type": "StaticImage",
"name": "chatTopCover",
"width": 446.25,
"height": 70.82,
"x": 0,
"y": -50.82,
"horizontal_gravity": "center",
"texture": "resources/w/ui/img/phone/chat_top_cover001.png"
},
{ {
"type": "TextButton", "type": "TextButton",
"name": "chatTitleButton", "name": "chatTitleButton",
"horizontal_gravity": "center", "horizontal_gravity": "center",
"vertical_gravity": "center",
"x": 0.0, "x": 0.0,
"y": 20.0, "y": 280.0,
"width": 446.25, "width": 446.25,
"height": 78.4, "height": 78.4,
"text": "Атам", "text": "Атам",
+2 -11
View File
@@ -43,22 +43,13 @@
"width": "match_parent", "width": "match_parent",
"height": "match_parent" "height": "match_parent"
}, },
{
"type": "StaticImage",
"name": "chatTopCover",
"width": 446.25,
"height": 70.82,
"x": 0,
"y": -50.82,
"horizontal_gravity": "center",
"texture": "resources/w/ui/img/phone/chat_top_cover001.png"
},
{ {
"type": "TextButton", "type": "TextButton",
"name": "chatTitleButton", "name": "chatTitleButton",
"horizontal_gravity": "center", "horizontal_gravity": "center",
"vertical_gravity": "center",
"x": 0.0, "x": 0.0,
"y": 20.0, "y": 280.0,
"width": 446.25, "width": 446.25,
"height": 78.4, "height": 78.4,
"text": "БишкекНовости", "text": "БишкекНовости",
+65
View File
@@ -0,0 +1,65 @@
{
"root": {
"type": "FrameLayout",
"name": "hud_root",
"width": "match_parent",
"height": "match_parent",
"children": [
{
"type": "Button",
"name": "settingsButton",
"horizontal_gravity": "right",
"vertical_gravity": "top",
"x": -35,
"y": -35,
"width": 200,
"height": 200,
"clickZoneWidth": 176,
"clickZoneHeight": 176,
"textures": {
"normal": "resources/w/ui/img/Settings001_State=Default001.png",
"hover": "resources/w/ui/img/Settings001_State=Selected001.png",
"pressed": "resources/w/ui/img/Settings001_State=Tap001.png"
}
},
{
"type": "StaticImage",
"name": "location",
"width": 380,
"height": 64,
"y": 30,
"horizontal_gravity": "center",
"vertical_gravity": "bottom",
"texture": "resources/w/ui_en/img/Location_dorm.png"
},
{
"type": "LinearLayout",
"orientation": "vertical",
"vertical_align": "center",
"horizontal_align": "center",
"spacing": 0,
"width": "match_parent",
"height": 600,
"y": 300,
"children": [
{
"type": "StaticImage",
"name": "hint2",
"width": 660,
"height": 220,
"horizontal_gravity": "center",
"texture": "resources/w/ui_en/img/Hint2android.png",
"pulse": {
"minScale": 0.88,
"maxScale": 0.95,
"periodMs": 1500
},
"fadeIn": {
"durationMs": 1000
}
}
]
}
]
}
}
+65
View File
@@ -0,0 +1,65 @@
{
"root": {
"type": "FrameLayout",
"name": "hud_root",
"width": "match_parent",
"height": "match_parent",
"children": [
{
"type": "Button",
"name": "settingsButton",
"horizontal_gravity": "right",
"vertical_gravity": "top",
"x": -35,
"y": -35,
"width": 200,
"height": 200,
"clickZoneWidth": 176,
"clickZoneHeight": 176,
"textures": {
"normal": "resources/w/ui/img/Settings001_State=Default001.png",
"hover": "resources/w/ui/img/Settings001_State=Selected001.png",
"pressed": "resources/w/ui/img/Settings001_State=Tap001.png"
}
},
{
"type": "StaticImage",
"name": "location",
"width": 380,
"height": 64,
"y": 30,
"horizontal_gravity": "center",
"vertical_gravity": "bottom",
"texture": "resources/w/ui_en/img/Location_dorm.png"
},
{
"type": "LinearLayout",
"orientation": "vertical",
"vertical_align": "center",
"horizontal_align": "center",
"spacing": 0,
"width": "match_parent",
"height": 600,
"y": 300,
"children": [
{
"type": "StaticImage",
"name": "hint3",
"width": 692,
"height": 312,
"horizontal_gravity": "center",
"texture": "resources/w/ui_en/img/Hint3android.png",
"pulse": {
"minScale": 0.88,
"maxScale": 0.95,
"periodMs": 1500
},
"fadeIn": {
"durationMs": 1000
}
}
]
}
]
}
}
+65
View File
@@ -0,0 +1,65 @@
{
"root": {
"type": "FrameLayout",
"name": "hud_root",
"width": "match_parent",
"height": "match_parent",
"children": [
{
"type": "Button",
"name": "settingsButton",
"horizontal_gravity": "right",
"vertical_gravity": "top",
"x": -35,
"y": -35,
"width": 200,
"height": 200,
"clickZoneWidth": 176,
"clickZoneHeight": 176,
"textures": {
"normal": "resources/w/ui/img/Settings001_State=Default001.png",
"hover": "resources/w/ui/img/Settings001_State=Selected001.png",
"pressed": "resources/w/ui/img/Settings001_State=Tap001.png"
}
},
{
"type": "StaticImage",
"name": "location",
"width": 380,
"height": 64,
"y": 30,
"horizontal_gravity": "center",
"vertical_gravity": "bottom",
"texture": "resources/w/ui_en/img/Location_dorm.png"
},
{
"type": "LinearLayout",
"orientation": "vertical",
"vertical_align": "center",
"horizontal_align": "center",
"spacing": 0,
"width": "match_parent",
"height": 600,
"y": 300,
"children": [
{
"type": "StaticImage",
"name": "hint4",
"width": 705,
"height": 195,
"horizontal_gravity": "center",
"texture": "resources/w/ui_en/img/Hint4android.png",
"pulse": {
"minScale": 0.88,
"maxScale": 0.95,
"periodMs": 1500
},
"fadeIn": {
"durationMs": 1000
}
}
]
}
]
}
}
+2 -2
View File
@@ -129,8 +129,8 @@
"name": "hint6b", "name": "hint6b",
"horizontal_gravity": "right", "horizontal_gravity": "right",
"vertical_gravity": "top", "vertical_gravity": "top",
"width": 788, "width": 630.4,
"height": 276, "height": 220.8,
"x": 80, "x": 80,
"y": 100, "y": 100,
"texture": "resources/w/ui_en/img/Hint6b.png", "texture": "resources/w/ui_en/img/Hint6b.png",
+2 -2
View File
@@ -82,8 +82,8 @@
"name": "hint6b", "name": "hint6b",
"horizontal_gravity": "right", "horizontal_gravity": "right",
"vertical_gravity": "top", "vertical_gravity": "top",
"width": 788, "width": 630.4,
"height": 276, "height": 220.8,
"x": 80, "x": 80,
"y": 100, "y": 100,
"texture": "resources/w/ui_en/img/Hint6b.png", "texture": "resources/w/ui_en/img/Hint6b.png",
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,369 @@
{
"root": {
"type": "FrameLayout",
"width": "match_parent",
"height": "match_parent",
"children": [
{
"type": "StaticImage",
"name": "creditsBkg",
"width": 2992,
"height": 1632,
"horizontal_gravity": "center",
"vertical_gravity": "center",
"texture": "resources/w/ui/img/main/MenuBkg001_v001.png"
},
{
"type": "LinearLayout",
"name": "creditsLinearLayout",
"orientation": "vertical",
"horizontal_gravity": "center",
"vertical_gravity": "top",
"horizontal_align": "left",
"animations": {
"slowScroll": {
"repeat": true,
"steps": [
{
"type": "move",
"to": [
0,
3600
],
"duration": 37.0
}
]
}
},
"width": 300,
"height": 4500,
"spacing": 20,
"children": [
{
"type": "TextView",
"name": "smallPause",
"width": 300,
"height": 1570,
"text": "",
"fontSize": 40,
"textCentered": true,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsTitleText",
"width": 300,
"height": 60,
"text": "Shadow over Bishkek Demo",
"fontSize": 40,
"textCentered": true,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText1",
"width": 300,
"height": 20,
"text": "Producer:",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 0.85, 0.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText2",
"width": 300,
"height": 40,
"text": "Vladislav Khorev",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText3",
"width": 300,
"height": 20,
"text": "Game Design:",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 0.85, 0.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText4",
"width": 300,
"height": 20,
"text": "Vladislav Khorev",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText5",
"width": 300,
"height": 40,
"text": "Leila Bobrova",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText6",
"width": 300,
"height": 20,
"text": "Story:",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 0.85, 0.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText7",
"width": 300,
"height": 20,
"text": "Vladislav Khorev",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText8",
"width": 300,
"height": 40,
"text": "Leila Bobrova",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText9",
"width": 300,
"height": 20,
"text": "Development:",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 0.85, 0.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText10",
"width": 300,
"height": 20,
"text": "Vladislav Khorev",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText11",
"width": 300,
"height": 20,
"text": "Vladislav Kan",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText12",
"width": 300,
"height": 20,
"text": "Beksultan Almazbekov",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText13",
"width": 300,
"height": 40,
"text": "Sergei Zotov",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText14",
"width": 300,
"height": 20,
"text": "Characters and animations:",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 0.85, 0.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText15",
"width": 300,
"height": 20,
"text": "Dmitry Prohorchik",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText16",
"width": 300,
"height": 40,
"text": "Roman Trestcov",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText17",
"width": 300,
"height": 20,
"text": "3D Assets:",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 0.85, 0.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText18",
"width": 300,
"height": 20,
"text": "Dmitry Prohorchik",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText19",
"width": 300,
"height": 40,
"text": "Ishmaladi (turbosquid.com)",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText20",
"width": 300,
"height": 20,
"text": "Arts:",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 0.85, 0.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText21",
"width": 300,
"height": 40,
"text": "Maggie Tem",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText22",
"width": 300,
"height": 20,
"text": "UI/UX:",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 0.85, 0.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText23",
"width": 300,
"height": 40,
"text": "Kenje Kazmatova",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText24",
"width": 300,
"height": 20,
"text": "Music:",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 0.85, 0.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText25",
"width": 300,
"height": 40,
"text": "Pazetic_Ocean",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText26",
"width": 300,
"height": 20,
"text": "Sounds:",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 0.85, 0.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText27",
"width": 300,
"height": 300,
"text": "IENBA, ImAFoley, stradie,\nItsTheGoodstuff, uwesoundboiz,\nAnthousai, Foxfire-,\nn-lerche, CogFireStudios,\nadcbicycle, AntoineRomo,\nSmallConfusion, joedeshon,\nefectirijillo (FreeSound.org)",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText28",
"width": 300,
"height": 160,
"text": "Some art, 3D models\nand textures were created\nusing neural networks.",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0]
},
{
"type": "TextView",
"name": "creditsText29",
"width": 300,
"height": 40,
"text": "Some textures were\nDesigned by Magnific\nwww.magnific.com",
"fontSize": 32,
"textCentered": false,
"color": [1.0, 1.0, 1.0, 1.0]
}
]
},
{
"type": "Button",
"name": "creditsBackButton",
"width": "match_parent",
"height": "match_parent",
"x": 0,
"y": 0,
"textures": {
"normal": "resources/transparent.png",
"hover": "resources/transparent.png",
"pressed": "resources/transparent.png"
}
}
]
}
}
@@ -188,7 +188,7 @@
"vertical_gravity": "top", "vertical_gravity": "top",
"width": 274, "width": 274,
"height": 274, "height": 274,
"x": -200, "x": 200,
"y": 650, "y": 650,
"textures": { "textures": {
"normal": "resources/w/ui/img/inv/ItemBook002.png", "normal": "resources/w/ui/img/inv/ItemBook002.png",
Loaded 100 of 206 files, more files were not shown because too many files have changed in this diff. Show more