From 0b835f84df655d219afdceb1c9bb08298b0da4c0 Mon Sep 17 00:00:00 2001 From: Alex Date: Sun, 6 Sep 2026 15:19:37 +0400 Subject: [PATCH] Update to 1.45 --- CMakeLists.txt | 50 +++++++--- include/_config.h | 9 ++ include/logging.hpp | 8 ++ include/main.hpp | 9 +- mod.template.json | 2 +- qpm.json | 40 ++++++-- qpm.shared.json | 172 +++++++++++++++++++++++------------ scripts/build.ps1 | 15 ++- scripts/copy.ps1 | 7 ++ scripts/createqmod.ps1 | 2 + scripts/ndk-stack.ps1 | 2 + scripts/pull-tombstone.ps1 | 2 + scripts/restart-game.ps1 | 8 +- scripts/start-logging.ps1 | 7 +- scripts/validate-modjson.ps1 | 2 + src/main.cpp | 53 +++++------ 16 files changed, 265 insertions(+), 123 deletions(-) create mode 100644 include/_config.h create mode 100644 include/logging.hpp mode change 100644 => 100755 scripts/build.ps1 mode change 100644 => 100755 scripts/copy.ps1 mode change 100644 => 100755 scripts/createqmod.ps1 mode change 100644 => 100755 scripts/ndk-stack.ps1 mode change 100644 => 100755 scripts/pull-tombstone.ps1 mode change 100644 => 100755 scripts/restart-game.ps1 mode change 100644 => 100755 scripts/start-logging.ps1 mode change 100644 => 100755 scripts/validate-modjson.ps1 diff --git a/CMakeLists.txt b/CMakeLists.txt index e6be745..4580d79 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,19 +1,17 @@ # include some defines automatically made by qpm include(qpm_defines.cmake) -# Enable link time optimization -# In my experience, this can be highly unstable but it nets a huge size optimization and likely performance -# However, the instability was seen using Android.mk/ndk-build builds. With Ninja + CMake, this problem seems to have been solved. -# As always, test thoroughly -# - Fern -set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE) - cmake_minimum_required(VERSION 3.21) project(${COMPILE_ID}) # c++ standard -set(CMAKE_CXX_STANDARD 20) -set(CMAKE_CXX_STANDARD_REQUIRED 20) +set(CMAKE_CXX_STANDARD 26) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Build type" FORCE) +endif() +message(STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}") set(CMAKE_EXPORT_COMPILE_COMMANDS ON) @@ -22,8 +20,38 @@ set(SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src) set(INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include) # compile options used -add_compile_options(-frtti -fexceptions) -add_compile_options(-O3) +add_link_options(-Wl,--exclude-libs,ALL) +add_compile_options(-frtti -fPIE -fPIC -fexceptions -fvisibility=hidden) + +if(CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo" OR CMAKE_BUILD_TYPE STREQUAL "MinSizeRel") + add_compile_options(-O3 -flto) + set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE) +else() + add_compile_options(-O0 -g) +endif() + +# get git info +execute_process(COMMAND git config user.name OUTPUT_VARIABLE GIT_USER) +execute_process(COMMAND git branch --show-current OUTPUT_VARIABLE GIT_BRANCH) +execute_process(COMMAND git rev-parse --short HEAD OUTPUT_VARIABLE GIT_COMMIT) +execute_process(COMMAND git diff-index --quiet HEAD RESULT_VARIABLE GIT_MODIFIED) + +string(STRIP "${GIT_USER}" GIT_USER) +string(STRIP "${GIT_BRANCH}" GIT_BRANCH) +string(STRIP "${GIT_COMMIT}" GIT_COMMIT) +string(STRIP "${GIT_MODIFIED}" GIT_MODIFIED) + +message(STATUS "GIT_USER: ${GIT_USER}") +message(STATUS "GIT_BRANCH: ${GIT_BRANCH}") +message(STATUS "GIT_COMMIT: 0x${GIT_COMMIT}") +message(STATUS "GIT_MODIFIED: ${GIT_MODIFIED}") + +# set git defines +add_compile_definitions(GIT_USER=\"${GIT_USER}\") +add_compile_definitions(GIT_BRANCH=\"${GIT_BRANCH}\") +add_compile_definitions(GIT_COMMIT=0x${GIT_COMMIT}) +add_compile_definitions(GIT_MODIFIED=${GIT_MODIFIED}) + # compile definitions used add_compile_definitions(VERSION=\"${MOD_VERSION}\") add_compile_definitions(MOD_ID=\"${MOD_ID}\") diff --git a/include/_config.h b/include/_config.h new file mode 100644 index 0000000..959904f --- /dev/null +++ b/include/_config.h @@ -0,0 +1,9 @@ +#pragma once + +#define BSS_EXPORT __attribute__((visibility("default"))) + +#ifdef __cplusplus +#define EXPORT_FUNC extern "C" BSS_EXPORT +#else +#define EXPORT_FUNC BSS_EXPORT +#endif diff --git a/include/logging.hpp b/include/logging.hpp new file mode 100644 index 0000000..b719aa6 --- /dev/null +++ b/include/logging.hpp @@ -0,0 +1,8 @@ +#pragma once + +#include "paper2_scotland2/shared/logger.hpp" + +static constexpr auto Logger = Paper::ConstLoggerContext(MOD_ID); + +#define LOG_INFO(str, ...) Paper::Logger::fmtLogTag(str, MOD_ID __VA_OPT__(, __VA_ARGS__)) +#define LOG_ERROR(str, ...) Paper::Logger::fmtLogTag(str, MOD_ID __VA_OPT__(, __VA_ARGS__)) diff --git a/include/main.hpp b/include/main.hpp index 065e63b..fa8e594 100644 --- a/include/main.hpp +++ b/include/main.hpp @@ -1,8 +1,7 @@ #pragma once -#include "beatsaber-hook/shared/utils/logging.hpp" +#include "_config.h" +#include "scotland2/shared/loader.hpp" +#include "beatsaber-hook/shared/hooking.hpp" -#define LOG_INFO(...) logger.info(__VA_ARGS__) -#define LOG_ERROR(...) logger.error(__VA_ARGS__) - -constexpr auto logger = Paper::ConstLoggerContext(MOD_ID); +static inline modloader::ModInfo modInfo = {MOD_ID, VERSION, GIT_COMMIT}; \ No newline at end of file diff --git a/mod.template.json b/mod.template.json index 3982b62..f4caf2e 100644 --- a/mod.template.json +++ b/mod.template.json @@ -6,7 +6,7 @@ "version": "${version}", "modloader": "Scotland2", "packageId": "com.beatgames.beatsaber", - "packageVersion": "1.40.8_7379", + "packageVersion": "1.45.0_26420", "description": "Speed up or remove boring transitions in the game", "coverImage": "cover.png", "dependencies": [], diff --git a/qpm.json b/qpm.json index f9470a2..1946e18 100644 --- a/qpm.json +++ b/qpm.json @@ -19,8 +19,7 @@ "pwsh ./scripts/build.ps1 $0?" ], "copy": [ - "pwsh ./scripts/copy.ps1 $0:?", - "pwsh ./scripts/restart-game.ps1" + "pwsh ./scripts/copy.ps1 $0:?" ], "log": [ "pwsh ./scripts/start-logging.ps1 $0:" @@ -39,7 +38,7 @@ "pwsh ./scripts/pull-tombstone.ps1 -analyze" ] }, - "ndk": "^27.2.12479018", + "ndk": "^29.0.14206865", "qmodIncludeDirs": [ "build", "extern/libs" @@ -50,39 +49,60 @@ "dependencies": [ { "id": "beatsaber-hook", - "versionRange": "^6.4.2", + "versionRange": "^8.2.1", "additionalData": {} }, { "id": "bs-cordl", - "versionRange": "^4008.0.0", + "versionRange": "^4500.0.0", "additionalData": {} }, { "id": "bsml", - "versionRange": "^0.4.53", + "versionRange": "^0.5.8", "additionalData": {} }, { "id": "config-utils", - "versionRange": "^2.0.3", + "versionRange": "^3.0.0", "additionalData": {} }, { "id": "custom-types", - "versionRange": "^0.18.3", + "versionRange": "^0.20.0", + "additionalData": {} + }, + { + "id": "fmt", + "versionRange": "^11.0.2", + "additionalData": {} + }, + { + "id": "flamingo", + "versionRange": "^1.1.2", "additionalData": {} }, { "id": "paper2_scotland2", - "versionRange": "^4.6.4", + "versionRange": "^4.7.0", + "additionalData": {} + }, + { + "id": "reflectcpp", + "versionRange": "^0.25.0", + "additionalData": {} + }, + { + "id": "rapidjson-macros", + "versionRange": "^3.0.0", "additionalData": {} }, { "id": "scotland2", "versionRange": "^0.1.6", "additionalData": { - "includeQmod": false + "includeQmod": false, + "private": true } } ] diff --git a/qpm.shared.json b/qpm.shared.json index f66cee3..8a9081b 100644 --- a/qpm.shared.json +++ b/qpm.shared.json @@ -20,8 +20,7 @@ "pwsh ./scripts/build.ps1 $0?" ], "copy": [ - "pwsh ./scripts/copy.ps1 $0:?", - "pwsh ./scripts/restart-game.ps1" + "pwsh ./scripts/copy.ps1 $0:?" ], "log": [ "pwsh ./scripts/start-logging.ps1 $0:" @@ -40,7 +39,7 @@ "pwsh ./scripts/pull-tombstone.ps1 -analyze" ] }, - "ndk": "^27.2.12479018", + "ndk": "^29.0.14206865", "qmodIncludeDirs": [ "build", "extern/libs" @@ -51,39 +50,60 @@ "dependencies": [ { "id": "beatsaber-hook", - "versionRange": "^6.4.2", + "versionRange": "^8.2.1", "additionalData": {} }, { "id": "bs-cordl", - "versionRange": "^4008.0.0", + "versionRange": "^4500.0.0", "additionalData": {} }, { "id": "bsml", - "versionRange": "^0.4.53", + "versionRange": "^0.5.8", "additionalData": {} }, { "id": "config-utils", - "versionRange": "^2.0.3", + "versionRange": "^3.0.0", "additionalData": {} }, { "id": "custom-types", - "versionRange": "^0.18.3", + "versionRange": "^0.20.0", + "additionalData": {} + }, + { + "id": "fmt", + "versionRange": "^11.0.2", + "additionalData": {} + }, + { + "id": "flamingo", + "versionRange": "^1.1.2", "additionalData": {} }, { "id": "paper2_scotland2", - "versionRange": "^4.6.4", + "versionRange": "^4.7.0", + "additionalData": {} + }, + { + "id": "reflectcpp", + "versionRange": "^0.25.0", + "additionalData": {} + }, + { + "id": "rapidjson-macros", + "versionRange": "^3.0.0", "additionalData": {} }, { "id": "scotland2", "versionRange": "^0.1.6", "additionalData": { - "includeQmod": false + "includeQmod": false, + "private": true } } ] @@ -92,13 +112,13 @@ { "dependency": { "id": "custom-types", - "versionRange": "=0.18.3", + "versionRange": "=0.20.1", "additionalData": { - "soLink": "https://github.com/QuestPackageManager/Il2CppQuestTypePatching/releases/download/v0.18.3/libcustom-types.so", - "debugSoLink": "https://github.com/QuestPackageManager/Il2CppQuestTypePatching/releases/download/v0.18.3/debug_libcustom-types.so", + "soLink": "https://github.com/QuestPackageManager/Il2CppQuestTypePatching/releases/download/v0.20.1/libcustom-types.so", + "debugSoLink": "https://github.com/QuestPackageManager/Il2CppQuestTypePatching/releases/download/v0.20.1/debug_libcustom-types.so", "overrideSoName": "libcustom-types.so", - "modLink": "https://github.com/QuestPackageManager/Il2CppQuestTypePatching/releases/download/v0.18.3/CustomTypes.qmod", - "branchName": "version/v0_18_3", + "modLink": "https://github.com/QuestPackageManager/Il2CppQuestTypePatching/releases/download/v0.20.1/CustomTypes.qmod", + "branchName": "version/v0_20_1", "compileOptions": { "cppFlags": [ "-Wno-invalid-offsetof" @@ -107,53 +127,52 @@ "cmake": true } }, - "version": "0.18.3" + "version": "0.20.1" }, { "dependency": { "id": "rapidjson-macros", - "versionRange": "=2.1.0", + "versionRange": "=3.0.0", "additionalData": { "headersOnly": true, - "branchName": "version/v2_1_0", + "branchName": "version/v3_0_0", "cmake": false } }, - "version": "2.1.0" + "version": "3.0.0" }, { "dependency": { "id": "bs-cordl", - "versionRange": "=4008.0.0", + "versionRange": "=4500.1.0", "additionalData": { "headersOnly": true, - "branchName": "version/v4008_0_0", + "branchName": "version/v4500_1_0", "compileOptions": { "includePaths": [ "include" ], "cppFeatures": [], "cppFlags": [ - "-DNEED_UNSAFE_CSHARP", "-fdeclspec", - "-DUNITY_2021", + "-DUNITY_6", "-DHAS_CODEGEN", "-Wno-invalid-offsetof" ] } } }, - "version": "4008.0.0" + "version": "4500.1.0" }, { "dependency": { "id": "paper2_scotland2", - "versionRange": "=4.6.4", + "versionRange": "=4.8.0", "additionalData": { - "soLink": "https://github.com/Fernthedev/paperlog/releases/download/v4.6.4/libpaper2_scotland2.so", + "soLink": "https://github.com/Fernthedev/paperlog/releases/download/v4.8.0/libpaper2_scotland2.so", "overrideSoName": "libpaper2_scotland2.so", - "modLink": "https://github.com/Fernthedev/paperlog/releases/download/v4.6.4/paper2_scotland2.qmod", - "branchName": "version/v4_6_4", + "modLink": "https://github.com/Fernthedev/paperlog/releases/download/v4.8.0/paper2_scotland2.qmod", + "branchName": "version/v4_8_0", "compileOptions": { "systemIncludes": [ "shared/utfcpp/source" @@ -162,7 +181,7 @@ "cmake": false } }, - "version": "4.6.4" + "version": "4.8.0" }, { "dependency": { @@ -179,19 +198,51 @@ }, "version": "10.0.0" }, + { + "dependency": { + "id": "scotland2", + "versionRange": "=0.1.7", + "additionalData": { + "soLink": "https://github.com/sc2ad/scotland2/releases/download/v0.1.7/libsl2.so", + "debugSoLink": "https://github.com/sc2ad/scotland2/releases/download/v0.1.7/debug_libsl2.so", + "overrideSoName": "libsl2.so", + "branchName": "version/v0_1_7" + } + }, + "version": "0.1.7" + }, + { + "dependency": { + "id": "reflectcpp", + "versionRange": "=0.25.0", + "additionalData": { + "soLink": "https://github.com/kodenamekrak/reflectcpp-qpm/releases/download/v0.25.0/libreflectcpp.so", + "debugSoLink": "https://github.com/kodenamekrak/reflectcpp-qpm/releases/download/v0.25.0/debug_libreflectcpp.so", + "overrideSoName": "libreflectcpp.so", + "modLink": "https://github.com/kodenamekrak/reflectcpp-qpm/releases/download/v0.25.0/reflectcpp.qmod", + "branchName": "version/v0_25_0" + } + }, + "version": "0.25.0" + }, { "dependency": { "id": "config-utils", - "versionRange": "=2.0.3", + "versionRange": "=3.0.0", "additionalData": { "headersOnly": true, - "soLink": "https://github.com/darknight1050/config-utils/releases/download/v2.0.3/libconfig-utils_test.so", + "soLink": "https://github.com/darknight1050/config-utils/releases/download/v3.0.0/libconfig-utils_test.so", "overrideSoName": "libconfig-utils_test.so", - "branchName": "version/v2_0_3", + "branchName": "version/v3_0_0", + "compileOptions": { + "cppFlags": [ + "-DREFLECT_CPP_C_ARRAYS_OR_INHERITANCE" + ] + }, "cmake": true } }, - "version": "2.0.3" + "version": "3.0.0" }, { "dependency": { @@ -215,13 +266,13 @@ { "dependency": { "id": "beatsaber-hook", - "versionRange": "=6.4.2", + "versionRange": "=8.2.1", "additionalData": { - "soLink": "https://github.com/QuestPackageManager/beatsaber-hook/releases/download/v6.4.2/libbeatsaber-hook.so", - "debugSoLink": "https://github.com/QuestPackageManager/beatsaber-hook/releases/download/v6.4.2/debug_libbeatsaber-hook.so", + "soLink": "https://github.com/QuestPackageManager/beatsaber-hook/releases/download/v8.2.1/libbeatsaber-hook.so", + "debugSoLink": "https://github.com/QuestPackageManager/beatsaber-hook/releases/download/v8.2.1/debug_libbeatsaber-hook.so", "overrideSoName": "libbeatsaber-hook.so", - "modLink": "https://github.com/QuestPackageManager/beatsaber-hook/releases/download/v6.4.2/beatsaber-hook.qmod", - "branchName": "version/v6_4_2", + "modLink": "https://github.com/QuestPackageManager/beatsaber-hook/releases/download/v8.2.1/beatsaber-hook.qmod", + "branchName": "version/v8_2_1", "compileOptions": { "cppFlags": [ "-Wno-extra-qualification" @@ -230,40 +281,27 @@ "cmake": true } }, - "version": "6.4.2" + "version": "8.2.1" }, { "dependency": { "id": "bsml", - "versionRange": "=0.4.55", + "versionRange": "=0.5.8", "additionalData": { - "soLink": "https://github.com/bsq-ports/Quest-BSML/releases/download/v0.4.55/libbsml.so", - "debugSoLink": "https://github.com/bsq-ports/Quest-BSML/releases/download/v0.4.55/debug_libbsml.so", + "soLink": "https://github.com/bsq-ports/Quest-BSML/releases/download/v0.5.8/libbsml.so", + "debugSoLink": "https://github.com/bsq-ports/Quest-BSML/releases/download/v0.5.8/debug_libbsml.so", "overrideSoName": "libbsml.so", - "modLink": "https://github.com/bsq-ports/Quest-BSML/releases/download/v0.4.55/BSML.qmod", - "branchName": "version/v0_4_55", + "modLink": "https://github.com/bsq-ports/Quest-BSML/releases/download/v0.5.8/BSML.qmod", + "branchName": "version/v0_5_8", "cmake": true } }, - "version": "0.4.55" - }, - { - "dependency": { - "id": "scotland2", - "versionRange": "=0.1.6", - "additionalData": { - "soLink": "https://github.com/sc2ad/scotland2/releases/download/v0.1.6/libsl2.so", - "debugSoLink": "https://github.com/sc2ad/scotland2/releases/download/v0.1.6/debug_libsl2.so", - "overrideSoName": "libsl2.so", - "branchName": "version/v0_1_6" - } - }, - "version": "0.1.6" + "version": "0.5.8" }, { "dependency": { "id": "libil2cpp", - "versionRange": "=0.4.0", + "versionRange": "=0.5.0", "additionalData": { "headersOnly": true, "compileOptions": { @@ -274,7 +312,21 @@ } } }, - "version": "0.4.0" + "version": "0.5.0" + }, + { + "dependency": { + "id": "flamingo", + "versionRange": "=1.2.1", + "additionalData": { + "soLink": "https://github.com/QuestPackageManager/Flamingo/releases/download/v1.2.1/libflamingo.so", + "debugSoLink": "https://github.com/QuestPackageManager/Flamingo/releases/download/v1.2.1/debug_libflamingo.so", + "overrideSoName": "libflamingo.so", + "modLink": "https://github.com/QuestPackageManager/Flamingo/releases/download/v1.2.1/flamingo.qmod", + "branchName": "version/v1_2_1" + } + }, + "version": "1.2.1" } ] } \ No newline at end of file diff --git a/scripts/build.ps1 b/scripts/build.ps1 old mode 100644 new mode 100755 index c745c85..8624439 --- a/scripts/build.ps1 +++ b/scripts/build.ps1 @@ -1,7 +1,13 @@ +#!/usr/bin/env pwsh + Param( [Parameter(Mandatory=$false)] [Switch] $clean, + [Parameter(Mandatory=$false)] + [ValidateSet("Debug", "Release", "RelWithDebInfo", "MinSizeRel")] + [String] $buildType="RelWithDebInfo", + [Parameter(Mandatory=$false)] [Switch] $help ) @@ -11,6 +17,7 @@ if ($help -eq $true) { Write-Output "`n-- Arguments --`n" Write-Output "-Clean `t`t Deletes the `"build`" folder, so that the entire library is rebuilt" + Write-Output "-BuildType `t Selects Debug, Release, RelWithDebInfo, or MinSizeRel (default: RelWithDebInfo)" exit } @@ -18,7 +25,7 @@ if ($help -eq $true) { # if user specified clean, remove all build files if ($clean.IsPresent) { if (Test-Path -Path "build") { - remove-item build -R + Remove-Item -LiteralPath "build" -Recurse -Force -ErrorAction Stop } } @@ -27,5 +34,9 @@ if (($clean.IsPresent) -or (-not (Test-Path -Path "build"))) { New-Item -Path build -ItemType Directory } -& cmake -G "Ninja" -DCMAKE_BUILD_TYPE="RelWithDebInfo" -B build +Write-Output "Configuring CMake build type: $buildType" +& cmake -G "Ninja" "-DCMAKE_BUILD_TYPE=$buildType" -B build +if ($LASTEXITCODE -ne 0) { + exit $LASTEXITCODE +} & cmake --build ./build diff --git a/scripts/copy.ps1 b/scripts/copy.ps1 old mode 100644 new mode 100755 index 6a39a6e..4ed55ac --- a/scripts/copy.ps1 +++ b/scripts/copy.ps1 @@ -1,3 +1,5 @@ +#!/usr/bin/env pwsh + Param( [Parameter(Mandatory=$false)] [Switch] $clean, @@ -70,5 +72,10 @@ foreach ($fileName in $modJson.lateModFiles) { if ($log -eq $true) { & adb logcat -c +} + +& $PSScriptRoot/restart-game.ps1 + +if ($log -eq $true) { & $PSScriptRoot/start-logging.ps1 -self:$self -all:$all -custom:$custom -file:$file } diff --git a/scripts/createqmod.ps1 b/scripts/createqmod.ps1 old mode 100644 new mode 100755 index 9bd5551..be027f5 --- a/scripts/createqmod.ps1 +++ b/scripts/createqmod.ps1 @@ -1,3 +1,5 @@ +#!/usr/bin/env pwsh + Param( [Parameter(Mandatory=$false)] [String] $qmodName="", diff --git a/scripts/ndk-stack.ps1 b/scripts/ndk-stack.ps1 old mode 100644 new mode 100755 index b247dbc..0c127d4 --- a/scripts/ndk-stack.ps1 +++ b/scripts/ndk-stack.ps1 @@ -1,3 +1,5 @@ +#!/usr/bin/env pwsh + Param( [Parameter(Mandatory=$false)] [String] $logName = "log.log", diff --git a/scripts/pull-tombstone.ps1 b/scripts/pull-tombstone.ps1 old mode 100644 new mode 100755 index 17d3f83..782b653 --- a/scripts/pull-tombstone.ps1 +++ b/scripts/pull-tombstone.ps1 @@ -1,3 +1,5 @@ +#!/usr/bin/env pwsh + Param( [Parameter(Mandatory=$false)] [String] $fileName = "RecentCrash.log", diff --git a/scripts/restart-game.ps1 b/scripts/restart-game.ps1 old mode 100644 new mode 100755 index fd0196a..9c4cb23 --- a/scripts/restart-game.ps1 +++ b/scripts/restart-game.ps1 @@ -1,2 +1,8 @@ +#!/usr/bin/env pwsh + adb shell am force-stop com.beatgames.beatsaber -adb shell am start com.beatgames.beatsaber/com.unity3d.player.UnityPlayerActivity +adb shell am start com.beatgames.beatsaber/com.unity3d.player.UnityPlayerGameActivity + +# Workaround for Meta piracy notification +Start-Sleep -Seconds 1.0 +adb shell am start com.beatgames.beatsaber/com.unity3d.player.UnityPlayerGameActivity diff --git a/scripts/start-logging.ps1 b/scripts/start-logging.ps1 old mode 100644 new mode 100755 index c7401fb..5bc48bf --- a/scripts/start-logging.ps1 +++ b/scripts/start-logging.ps1 @@ -1,3 +1,5 @@ +#!/usr/bin/env pwsh + Param( [Parameter(Mandatory=$false)] [Switch] $self, @@ -42,8 +44,9 @@ $command = "adb logcat " if ($all -eq $false) { $loops = 0 - while ([string]::IsNullOrEmpty($bspid) -and $loops -lt 3) { - Start-Sleep -Milliseconds 100 + $maxRetries = 30 + while ([string]::IsNullOrEmpty($bspid) -and $loops -lt $maxRetries) { + Start-Sleep -Milliseconds 500 $bspid = adb shell pidof com.beatgames.beatsaber $loops += 1 } diff --git a/scripts/validate-modjson.ps1 b/scripts/validate-modjson.ps1 old mode 100644 new mode 100755 index 3627546..9953c9a --- a/scripts/validate-modjson.ps1 +++ b/scripts/validate-modjson.ps1 @@ -1,3 +1,5 @@ +#!/usr/bin/env pwsh + $mod = "./mod.json" $modTemplate = Get-Item "./mod.template.json" $qpmShared = Get-Item "./qpm.shared.json" diff --git a/src/main.cpp b/src/main.cpp index 93ed746..9a8c7a6 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,30 +1,25 @@ #include "main.hpp" -#include "GlobalNamespace/DefaultScenesTransitionsFromInit.hpp" #include "GlobalNamespace/GameScenesManager.hpp" -#include "beatsaber-hook/shared/utils/hooking.hpp" +#include "GlobalNamespace/HealthWarningFlowCoordinator.hpp" +#include "GlobalNamespace/InitialDestinationResolver.hpp" +#include "System/Threading/Tasks/Task.hpp" #include "bsml/shared/BSML.hpp" -#include "main.hpp" -#include "scotland2/shared/modloader.h" +#include "logging.hpp" #include "settings.hpp" using namespace GlobalNamespace; -modloader::ModInfo modInfo{MOD_ID, VERSION, 0}; MAKE_HOOK_MATCH( - InitSceneTransitions, - &DefaultScenesTransitionsFromInit::TransitionToNextScene, - void, - DefaultScenesTransitionsFromInit* self, - bool goStraightToMenu, - bool goStraightToEditor, - bool goToRecordingToolScene, - System::Action* onFinishShaderWarmup + PresentHealthWarningAsync, + &InitialDestinationResolver::PresentHealthWarningAsync, + System::Threading::Tasks::Task*, + InitialDestinationResolver* self ) { if (!getConfig().ShowWarning.GetValue()) - goStraightToMenu = true; - InitSceneTransitions(self, goStraightToMenu, goStraightToEditor, goToRecordingToolScene, onFinishShaderWarmup); + return System::Threading::Tasks::Task::get_CompletedTask(); + return PresentHealthWarningAsync(self); } MAKE_HOOK_MATCH( @@ -32,7 +27,7 @@ MAKE_HOOK_MATCH( &GameScenesManager::PushScenes, void, GameScenesManager* self, - ScenesTransitionSetupDataSO* scenesTransitionSetupData, + ScenesTransitionSetupData* scenesTransitionSetupData, float minDuration, System::Action* afterMinDurationCallback, System::Action_1* finishCallback @@ -63,7 +58,7 @@ MAKE_HOOK_MATCH( &GameScenesManager::ReplaceScenes, void, GameScenesManager* self, - ScenesTransitionSetupDataSO* scenesTransitionSetupData, + ScenesTransitionSetupData* scenesTransitionSetupData, ArrayW beforeNewScenesActivateRoutines, float minDuration, System::Action* afterMinDurationCallback, @@ -75,28 +70,24 @@ MAKE_HOOK_MATCH( ReplaceSceneTransition(self, scenesTransitionSetupData, beforeNewScenesActivateRoutines, minDuration, afterMinDurationCallback, finishCallback); } -extern "C" void setup(CModInfo* info) { - info->version = VERSION; - info->id = MOD_ID; - info->version_long = 0; - modInfo.assign(*info); - - Paper::Logger::RegisterFileContextId(MOD_ID); +EXPORT_FUNC void setup(CModInfo& info) { + info.version = VERSION; + info.id = MOD_ID; + info.version_long = GIT_COMMIT; + modInfo.assign(info); getConfig().Init(modInfo); LOG_INFO("Completed setup!"); } -extern "C" void late_load() { - il2cpp_functions::Init(); +EXPORT_FUNC void late_load() { BSML::Register::RegisterSettingsMenu("Transitions", SettingsDidActivate, true); LOG_INFO("Installing hooks..."); - INSTALL_HOOK(logger, InitSceneTransitions); - INSTALL_HOOK(logger, PushSceneTransition); - INSTALL_HOOK(logger, PopSceneTransition); - INSTALL_HOOK(logger, ReplaceSceneTransition); - LOG_INFO("Installed all hooks!"); + INSTALL_HOOK(Logger, PresentHealthWarningAsync); + INSTALL_HOOK(Logger, PushSceneTransition); + INSTALL_HOOK(Logger, PopSceneTransition); + INSTALL_HOOK(Logger, ReplaceSceneTransition); }