mirror of
https://github.com/izzy2lost/2ship2harkinian-Android.git
synced 2026-06-19 01:20:08 -07:00
Merge pull request #631 from HarbourMasters/develop-rika
`develop-rika` -> `develop`
This commit is contained in:
@@ -1 +1 @@
|
||||
libusb-dev libusb-1.0-0-dev libsdl2-dev libsdl2-net-dev libpng-dev libglew-dev libzip-dev zipcmp zipmerge ziptool nlohmann-json3-dev libtinyxml2-dev libspdlog-dev ninja-build
|
||||
libusb-dev libusb-1.0-0-dev libsdl2-dev libsdl2-net-dev libpng-dev libglew-dev nlohmann-json3-dev libtinyxml2-dev libspdlog-dev ninja-build
|
||||
|
||||
+17
-15
@@ -114,7 +114,7 @@ jobs:
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y $(cat .github/workflows/apt-deps.txt)
|
||||
sudo apt-get install -y $(cat .github/workflows/apt-deps.txt) libzip-dev zipcmp zipmerge ziptool
|
||||
- name: Cache build folders
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
@@ -254,17 +254,17 @@ jobs:
|
||||
linux-build-${{ github.ref }}
|
||||
linux-build-
|
||||
path: |
|
||||
SDL2-2.28.5
|
||||
SDL2_net-2.2.0
|
||||
SDL2-2.30.3
|
||||
tinyxml2-10.0.0
|
||||
libzip-1.10.1
|
||||
- name: Install latest SDL
|
||||
run: |
|
||||
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
|
||||
if [ ! -d "SDL2-2.28.5" ]; then
|
||||
wget https://www.libsdl.org/release/SDL2-2.28.5.tar.gz
|
||||
tar -xzf SDL2-2.28.5.tar.gz
|
||||
if [ ! -d "SDL2-2.30.3" ]; then
|
||||
wget https://www.libsdl.org/release/SDL2-2.30.3.tar.gz
|
||||
tar -xzf SDL2-2.30.3.tar.gz
|
||||
fi
|
||||
cd SDL2-2.28.5
|
||||
cd SDL2-2.30.3
|
||||
./configure --enable-hidapi-libusb
|
||||
make -j 10
|
||||
sudo make install
|
||||
@@ -283,18 +283,20 @@ jobs:
|
||||
cmake ..
|
||||
make
|
||||
sudo make install
|
||||
- name: Install latest SDL_net
|
||||
- name: Install libzip without crypto
|
||||
run: |
|
||||
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
|
||||
if [ ! -d "SDL2_net-2.2.0" ]; then
|
||||
wget https://www.libsdl.org/projects/SDL_net/release/SDL2_net-2.2.0.tar.gz
|
||||
tar -xzf SDL2_net-2.2.0.tar.gz
|
||||
if [ ! -d "libzip-1.10.1" ]; then
|
||||
wget https://github.com/nih-at/libzip/releases/download/v1.10.1/libzip-1.10.1.tar.gz
|
||||
tar -xzf libzip-1.10.1.tar.gz
|
||||
fi
|
||||
cd SDL2_net-2.2.0
|
||||
./configure
|
||||
make -j 10
|
||||
cd libzip-1.10.1
|
||||
mkdir -p build
|
||||
cd build
|
||||
cmake .. -DENABLE_COMMONCRYPTO=OFF -DENABLE_GNUTLS=OFF -DENABLE_MBEDTLS=OFF -DENABLE_OPENSSL=OFF
|
||||
make
|
||||
sudo make install
|
||||
sudo cp -av /usr/local/lib/libSDL* /lib/x86_64-linux-gnu/
|
||||
sudo cp -av /usr/local/lib/libzip* /lib/x86_64-linux-gnu/
|
||||
- name: Download 2ship.o2r
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
|
||||
@@ -79,7 +79,6 @@ execute_process(
|
||||
--executable=$<TARGET_FILE:2ship>
|
||||
$<$<BOOL:$<TARGET_PROPERTY:2ship,APPIMAGE_DESKTOP_FILE>>:--desktop-file=$<TARGET_PROPERTY:2ship,APPIMAGE_DESKTOP_FILE>>
|
||||
$<$<BOOL:$<TARGET_PROPERTY:2ship,APPIMAGE_ICON_FILE>>:--icon-file=$<TARGET_PROPERTY:2ship,APPIMAGE_ICON_FILE>>
|
||||
--exclude-library "*libcrypto*"
|
||||
--output=appimage
|
||||
# --verbosity=2
|
||||
)
|
||||
|
||||
@@ -17,7 +17,7 @@ if(SYSTEM_NAME MATCHES "Windows")
|
||||
if(NOT ONLY2SHIPOTR AND EXISTS ${SOURCE_DIR}/OTRExporter/mm.zip)
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E copy mm.zip ${TARGET_DIR}/mm.o2r)
|
||||
endif()
|
||||
if(EXISTS ${SOURCE_DIR}/OTRExporter/o2r)
|
||||
if(EXISTS ${SOURCE_DIR}/OTRExporter/2ship.o2r)
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E copy 2ship.o2r ${TARGET_DIR})
|
||||
endif()
|
||||
endif()
|
||||
@@ -1,6 +1,5 @@
|
||||
set(CVAR_VSYNC_ENABLED "${CVAR_PREFIX_SETTING}.VsyncEnabled" CACHE STRING "")
|
||||
set(CVAR_Z_FIGHTING_MODE "${CVAR_PREFIX_SETTING}.ZFightingMode" CACHE STRING "")
|
||||
set(CVAR_DISABLE_CLOSE_COLOR_WRAP "${CVAR_PREFIX_SETTING}.DisableCloseColorWrap" CACHE STRING "")
|
||||
set(CVAR_NEW_FILE_DROPPED "${CVAR_PREFIX_GENERAL}.NewFileDropped" CACHE STRING "")
|
||||
set(CVAR_DROPPED_FILE "${CVAR_PREFIX_GENERAL}.DroppedFile" CACHE STRING "")
|
||||
set(CVAR_INTERNAL_RESOLUTION "${CVAR_PREFIX_SETTING}.InternalResolution" CACHE STRING "")
|
||||
@@ -17,7 +16,6 @@ set(CVAR_STATS_WINDOW_OPEN "${CVAR_PREFIX_WINDOW}.Stats" CACHE STRING "")
|
||||
set(CVAR_ENABLE_MULTI_VIEWPORTS "${CVAR_PREFIX_SETTING}.EnableMultiViewports" CACHE STRING "")
|
||||
set(CVAR_LOW_RES_MODE "${CVAR_PREFIX_SETTING}.LowResMode" CACHE STRING "")
|
||||
set(CVAR_SIMULATED_INPUT_LAG "${CVAR_PREFIX_SETTING}.SimulatedInputLag" CACHE STRING "")
|
||||
set(CVAR_ALT_ASSETS "${CVAR_PREFIX_ENHANCEMENT}.AltAssets" CACHE STRING "")
|
||||
set(CVAR_GAME_OVERLAY_FONT "${CVAR_PREFIX_SETTING}.OverlayFont" CACHE STRING "")
|
||||
set(CVAR_MENU_BAR_OPEN "${CVAR_PREFIX_SETTING}.OpenMenuBar" CACHE STRING "")
|
||||
set(CVAR_PREFIX_CONTROLLERS "${CVAR_PREFIX_SETTING}.Controllers" CACHE STRING "")
|
||||
|
||||
+7
-4
@@ -5,10 +5,10 @@ set(CMAKE_CXX_STANDARD 20 CACHE STRING "The C++ standard to use")
|
||||
|
||||
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15" CACHE STRING "Minimum OS X deployment version")
|
||||
|
||||
project(2s2h VERSION 1.0.0 LANGUAGES C CXX)
|
||||
project(2s2h VERSION 1.0.1 LANGUAGES C CXX)
|
||||
include(CMake/2ship-cvars.cmake)
|
||||
include(CMake/lus-cvars.cmake)
|
||||
set(PROJECT_BUILD_NAME "Rika Alfa" CACHE STRING "")
|
||||
set(PROJECT_BUILD_NAME "Rika Bravo" CACHE STRING "")
|
||||
set(PROJECT_TEAM "github.com/harbourmasters" CACHE STRING "")
|
||||
|
||||
set_property(DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT 2ship)
|
||||
@@ -31,6 +31,9 @@ endif()
|
||||
# Enable the Gfx debugger in LUS to use libgfxd from ZAPDTR
|
||||
set(GFX_DEBUG_DISASSEMBLER ON)
|
||||
|
||||
# Tell LUS we're using F3DEX_GBI_2 (in a way that doesn't break libgfxd)
|
||||
set(USE_F3DEX2 ON)
|
||||
|
||||
################################################################################
|
||||
# Set target arch type if empty. Visual studio solution generator provides it.
|
||||
################################################################################
|
||||
@@ -146,7 +149,7 @@ add_custom_target(
|
||||
# CMake versions prior to 3.17 do not have the rm command, use remove instead for older versions
|
||||
COMMAND ${CMAKE_COMMAND} -E $<IF:$<VERSION_LESS:${CMAKE_VERSION},3.17>,remove,rm> -f mm.zip 2ship.o2r
|
||||
COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter/extract_assets.py -z "$<TARGET_FILE:ZAPD>" --non-interactive --xml-root ../mm/assets/xml --custom-otr-file 2ship.o2r "--custom-assets-path" ${CMAKE_CURRENT_SOURCE_DIR}/mm/assets/custom --port-ver "${CMAKE_PROJECT_VERSION}"
|
||||
COMMAND ${CMAKE_COMMAND} -DSYSTEM_NAME=${CMAKE_SYSTEM_NAME} -DTARGET_DIR="$<TARGET_FILE_DIR:ZAPD>" -DSOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} -DBINARY_DIR=${CMAKE_BINARY_DIR} -P ${CMAKE_CURRENT_SOURCE_DIR}/copy-existing-otrs.cmake
|
||||
COMMAND ${CMAKE_COMMAND} -DSYSTEM_NAME=${CMAKE_SYSTEM_NAME} -DTARGET_DIR="$<TARGET_FILE_DIR:ZAPD>" -DSOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} -DBINARY_DIR=${CMAKE_BINARY_DIR} -P ${CMAKE_CURRENT_SOURCE_DIR}/CMake/copy-existing-otrs.cmake
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter
|
||||
COMMENT "Running asset extraction..."
|
||||
DEPENDS ZAPD
|
||||
@@ -168,7 +171,7 @@ add_custom_target(
|
||||
# CMake versions prior to 3.17 do not have the rm command, use remove instead for older versions
|
||||
COMMAND ${CMAKE_COMMAND} -E $<IF:$<VERSION_LESS:${CMAKE_VERSION},3.17>,remove,rm> -f 2ship.o2r
|
||||
COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter/extract_assets.py -z "$<TARGET_FILE:ZAPD>" --norom --custom-otr-file 2ship.o2r "--custom-assets-path" ${CMAKE_CURRENT_SOURCE_DIR}/mm/assets/custom --port-ver "${CMAKE_PROJECT_VERSION}"
|
||||
COMMAND ${CMAKE_COMMAND} -DSYSTEM_NAME=${CMAKE_SYSTEM_NAME} -DTARGET_DIR="$<TARGET_FILE_DIR:ZAPD>" -DSOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} -DBINARY_DIR=${CMAKE_BINARY_DIR} -DONLY2SHIPOTR=On -P ${CMAKE_CURRENT_SOURCE_DIR}/copy-existing-otrs.cmake
|
||||
COMMAND ${CMAKE_COMMAND} -DSYSTEM_NAME=${CMAKE_SYSTEM_NAME} -DTARGET_DIR="$<TARGET_FILE_DIR:ZAPD>" -DSOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} -DBINARY_DIR=${CMAKE_BINARY_DIR} -DONLY2SHIPOTR=On -P ${CMAKE_CURRENT_SOURCE_DIR}/CMake/copy-existing-otrs.cmake
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter
|
||||
COMMENT "Generating 2ship.o2r..."
|
||||
DEPENDS ZAPD
|
||||
|
||||
+1
-1
Submodule OTRExporter updated: c2a891be8b...287c798918
+1
-1
Submodule ZAPDTR updated: ce2d63d8dd...b002f28757
+1
-1
Submodule libultraship updated: 0c4b491125...070eb35dde
@@ -20,8 +20,6 @@
|
||||
#include "include/global.h"
|
||||
#include "include/z64audio.h"
|
||||
|
||||
bool ShouldClearTextureCacheAtEndOfFrame = false;
|
||||
|
||||
namespace BenGui {
|
||||
// MARK: - Delegates
|
||||
|
||||
|
||||
@@ -14,8 +14,6 @@
|
||||
#include "2s2h/DeveloperTools/WarpPoint.h"
|
||||
#include "HudEditor.h"
|
||||
|
||||
extern bool ShouldClearTextureCacheAtEndOfFrame;
|
||||
|
||||
extern "C" {
|
||||
#include "z64.h"
|
||||
#include "functions.h"
|
||||
@@ -181,11 +179,15 @@ void DrawSettingsMenu() {
|
||||
"form of anti-aliasing");
|
||||
#endif
|
||||
#ifndef __WIIU__
|
||||
if (UIWidgets::CVarSliderInt("MSAA: %d", CVAR_MSAA_VALUE, 1, 8, 1)) {
|
||||
if (UIWidgets::CVarSliderInt((CVarGetInteger(CVAR_MSAA_VALUE, 1) == 1) ? "Anti-aliasing (MSAA): Off"
|
||||
: "Anti-aliasing (MSAA): %d",
|
||||
CVAR_MSAA_VALUE, 1, 8, 1)) {
|
||||
Ship::Context::GetInstance()->GetWindow()->SetMsaaLevel(CVarGetInteger(CVAR_MSAA_VALUE, 1));
|
||||
};
|
||||
UIWidgets::Tooltip(
|
||||
"Activates multi-sample anti-aliasing when above 1x up to 8x for 8 samples for every pixel");
|
||||
"Activates MSAA (multi-sample anti-aliasing) from 2x up to 8x, to smooth the edges of rendered "
|
||||
"geometry.\n"
|
||||
"Higher sample count will result in smoother edges on models, but may reduce performance.");
|
||||
#endif
|
||||
|
||||
{ // FPS Slider
|
||||
@@ -437,14 +439,14 @@ void DrawEnhancementsMenu() {
|
||||
UIWidgets::CVarCheckbox(
|
||||
"Pause Menu Save", "gEnhancements.Saving.PauseSave",
|
||||
{ .tooltip = "Re-introduce the pause menu save system. Pressing B in the pause menu will give you the "
|
||||
"option to create an Owl Save from your current location.\n\nWhen loading back into the "
|
||||
"game, you will be placed either at the entrance of the dungeon you saved in, or in South "
|
||||
"Clock Town." });
|
||||
"option to create a persistent Owl Save from your current location.\n\nWhen loading back "
|
||||
"into the game, you will be placed either at the entrance of the dungeon you saved in, or "
|
||||
"in South Clock Town." });
|
||||
if (UIWidgets::CVarCheckbox(
|
||||
"Autosave", "gEnhancements.Saving.Autosave",
|
||||
{ .tooltip = "Automatically create owl saves on the chosen interval.\n\nWhen loading back into the "
|
||||
"game, you will be placed either at the entrance of the dungeon you saved in, or in "
|
||||
"South Clock Town." })) {
|
||||
{ .tooltip = "Automatically create a persistent Owl Save on the chosen interval.\n\nWhen loading "
|
||||
"back into the game, you will be placed either at the entrance of the dungeon you "
|
||||
"saved in, or in South Clock Town." })) {
|
||||
RegisterAutosave();
|
||||
}
|
||||
UIWidgets::CVarSliderInt("Autosave Interval (minutes): %d", "gEnhancements.Saving.AutosaveInterval", 1, 60,
|
||||
@@ -535,10 +537,8 @@ void DrawEnhancementsMenu() {
|
||||
}
|
||||
|
||||
if (UIWidgets::BeginMenu("Modes")) {
|
||||
if (UIWidgets::CVarCheckbox("Play As Kafei", "gModes.PlayAsKafei",
|
||||
{ .tooltip = "Requires scene reload to take effect." })) {
|
||||
UpdatePlayAsKafeiSkeletons();
|
||||
}
|
||||
UIWidgets::CVarCheckbox("Play As Kafei", "gModes.PlayAsKafei",
|
||||
{ .tooltip = "Requires scene reload to take effect." });
|
||||
ImGui::EndMenu();
|
||||
}
|
||||
if (UIWidgets::BeginMenu("Player Movement")) {
|
||||
|
||||
@@ -59,9 +59,9 @@ extern "C" void HudEditor_ModifyRectPosValuesFromBase(s16 baseX, s16 baseY, s16*
|
||||
*rectTop = baseY + (offsetFromBaseY * CVarGetFloat(hudEditorElements[hudEditorActiveElement].scaleCvar, 1.0f));
|
||||
}
|
||||
|
||||
extern "C" void HudEditor_ModifyRectPosValues(s16* rectLeft, s16* rectTop) {
|
||||
s16 offsetFromBaseX = *rectLeft - hudEditorElements[hudEditorActiveElement].defaultX;
|
||||
s16 offsetFromBaseY = *rectTop - hudEditorElements[hudEditorActiveElement].defaultY;
|
||||
void HudEditor_ModifyRectPosValuesFloat(f32* rectLeft, f32* rectTop) {
|
||||
f32 offsetFromBaseX = *rectLeft - hudEditorElements[hudEditorActiveElement].defaultX;
|
||||
f32 offsetFromBaseY = *rectTop - hudEditorElements[hudEditorActiveElement].defaultY;
|
||||
*rectLeft = CVarGetInteger(hudEditorElements[hudEditorActiveElement].xCvar,
|
||||
hudEditorElements[hudEditorActiveElement].defaultX) +
|
||||
(offsetFromBaseX * CVarGetFloat(hudEditorElements[hudEditorActiveElement].scaleCvar, 1.0f));
|
||||
@@ -78,6 +78,16 @@ extern "C" void HudEditor_ModifyRectPosValues(s16* rectLeft, s16* rectTop) {
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" void HudEditor_ModifyRectPosValues(s16* rectLeft, s16* rectTop) {
|
||||
f32 newLeft = *rectLeft;
|
||||
f32 newTop = *rectTop;
|
||||
|
||||
HudEditor_ModifyRectPosValuesFloat(&newLeft, &newTop);
|
||||
|
||||
*rectLeft = (s16)newLeft;
|
||||
*rectTop = (s16)newTop;
|
||||
}
|
||||
|
||||
extern "C" void HudEditor_ModifyRectSizeValues(s16* rectWidth, s16* rectHeight) {
|
||||
*rectWidth *= CVarGetFloat(hudEditorElements[hudEditorActiveElement].scaleCvar, 1.0f);
|
||||
*rectHeight *= CVarGetFloat(hudEditorElements[hudEditorActiveElement].scaleCvar, 1.0f);
|
||||
@@ -90,16 +100,13 @@ extern "C" void HudEditor_ModifyTextureStepValues(s16* dsdx, s16* dtdy) {
|
||||
|
||||
// Modify matrix values based on the identity matrix (0,0) centered on the screen
|
||||
extern "C" void HudEditor_ModifyMatrixValues(f32* transX, f32* transY) {
|
||||
*transX = (f32)(SCREEN_WIDTH / 2) + *transX;
|
||||
*transY = (f32)(SCREEN_HEIGHT / 2) - *transY;
|
||||
*transX = ((f32)SCREEN_WIDTH / 2) + *transX;
|
||||
*transY = ((f32)SCREEN_HEIGHT / 2) - *transY;
|
||||
|
||||
s16 newX = *transX;
|
||||
s16 newY = *transY;
|
||||
HudEditor_ModifyRectPosValuesFloat(transX, transY);
|
||||
|
||||
HudEditor_ModifyRectPosValues(&newX, &newY);
|
||||
|
||||
*transX = (f32)newX - (SCREEN_WIDTH / 2);
|
||||
*transY = (f32)(SCREEN_HEIGHT / 2) - newY;
|
||||
*transX = *transX - ((f32)SCREEN_WIDTH / 2);
|
||||
*transY = ((f32)SCREEN_HEIGHT / 2) - *transY;
|
||||
}
|
||||
|
||||
extern "C" void HudEditor_ModifyKaleidoEquipAnimValues(s16* ulx, s16* uly, s16* shrinkRate) {
|
||||
|
||||
@@ -180,6 +180,8 @@ bool Checkbox(const char* _label, bool* value, const CheckboxOptions& options) {
|
||||
if (window->SkipItems)
|
||||
return false;
|
||||
|
||||
ImGui::BeginDisabled(options.disabled);
|
||||
|
||||
bool above = options.labelPosition == LabelPosition::Above;
|
||||
bool lpFar = options.labelPosition == LabelPosition::Far;
|
||||
bool right = options.alignment == ComponentAlignment::Right;
|
||||
@@ -210,19 +212,15 @@ bool Checkbox(const char* _label, bool* value, const CheckboxOptions& options) {
|
||||
|
||||
ImGui::ItemSize(total_bb, style.FramePadding.y);
|
||||
if (!ImGui::ItemAdd(total_bb, id)) {
|
||||
IMGUI_TEST_ENGINE_ITEM_INFO(id, label,
|
||||
g.LastItemData.StatusFlags | ImGuiItemStatusFlags_Checkable |
|
||||
(*value ? ImGuiItemStatusFlags_Checked : 0));
|
||||
ImGui::EndDisabled();
|
||||
return false;
|
||||
}
|
||||
|
||||
bool hovered, held;
|
||||
bool pressed = ImGui::ButtonBehavior(total_bb, id, &hovered, &held);
|
||||
bool hovered, held, pressed;
|
||||
pressed = ImGui::ButtonBehavior(total_bb, id, &hovered, &held);
|
||||
if (pressed) {
|
||||
*value = !(*value);
|
||||
ImGui::MarkItemEdited(id);
|
||||
}
|
||||
ImGui::BeginDisabled(options.disabled);
|
||||
PushStyleCheckbox(options.color);
|
||||
ImVec2 checkPos = pos;
|
||||
ImVec2 labelPos = pos;
|
||||
|
||||
+20
-33
@@ -101,6 +101,7 @@ OTRGlobals* OTRGlobals::Instance;
|
||||
GameInteractor* GameInteractor::Instance;
|
||||
|
||||
extern "C" char** cameraStrings;
|
||||
bool prevAltAssets = false;
|
||||
std::vector<std::shared_ptr<std::string>> cameraStdStrings;
|
||||
|
||||
Color_RGB8 kokiriColor = { 0x1E, 0x69, 0x1B };
|
||||
@@ -148,6 +149,8 @@ OTRGlobals::OTRGlobals() {
|
||||
// tell LUS to reserve 3 SoH specific threads (Game, Audio, Save)
|
||||
context =
|
||||
Ship::Context::CreateInstance("2 Ship 2 Harkinian", appShortName, "2ship2harkinian.json", archiveFiles, {}, 3);
|
||||
prevAltAssets = CVarGetInteger("gAltAssets", 0);
|
||||
context->GetResourceManager()->SetAltAssetsEnabled(prevAltAssets);
|
||||
|
||||
// Override LUS defaults
|
||||
Ship::Context::GetInstance()->GetLogger()->set_level(
|
||||
@@ -408,25 +411,6 @@ extern "C" void OTRExtScanner() {
|
||||
}
|
||||
}
|
||||
|
||||
std::string SanitizePath(std::string stringValue) {
|
||||
// Add backslashes.
|
||||
for (auto i = stringValue.begin();;) {
|
||||
auto const pos =
|
||||
std::find_if(i, stringValue.end(), [](char const c) { return '\\' == c || '\'' == c || '"' == c; });
|
||||
if (pos == stringValue.end()) {
|
||||
break;
|
||||
}
|
||||
i = std::next(stringValue.insert(pos, '\\'), 2);
|
||||
}
|
||||
|
||||
// Removes others.
|
||||
stringValue.erase(std::remove_if(stringValue.begin(), stringValue.end(),
|
||||
[](char const c) { return '\n' == c || '\r' == c || '\0' == c || '\x1A' == c; }),
|
||||
stringValue.end());
|
||||
|
||||
return stringValue;
|
||||
}
|
||||
|
||||
void Ben_ProcessDroppedFiles(std::string filePath) {
|
||||
SPDLOG_INFO("Processing dropped file: {}", filePath);
|
||||
|
||||
@@ -509,9 +493,6 @@ extern "C" void InitOTR() {
|
||||
CVarClear("gLetItSnow");
|
||||
}
|
||||
|
||||
// BENTODO Once we have a proper fix for the color cominber, remove this
|
||||
CVarRegisterInteger(CVAR_DISABLE_CLOSE_COLOR_WRAP, 1);
|
||||
|
||||
srand(now);
|
||||
#ifdef ENABLE_CROWD_CONTROL
|
||||
CrowdControl::Instance = new CrowdControl();
|
||||
@@ -584,8 +565,6 @@ extern "C" uint64_t GetUnixTimestamp() {
|
||||
return now;
|
||||
}
|
||||
|
||||
extern bool ShouldClearTextureCacheAtEndOfFrame;
|
||||
|
||||
extern "C" void Graph_StartFrame() {
|
||||
#ifndef __WIIU__
|
||||
using Ship::KbScancode;
|
||||
@@ -668,7 +647,7 @@ extern "C" void Graph_StartFrame() {
|
||||
#endif
|
||||
case KbScancode::LUS_KB_TAB: {
|
||||
// Toggle HD Assets
|
||||
CVarSetInteger(CVAR_ALT_ASSETS, !CVarGetInteger(CVAR_ALT_ASSETS, 0));
|
||||
CVarSetInteger("gAltAssets", !CVarGetInteger("gAltAssets", 0));
|
||||
// ShouldClearTextureCacheAtEndOfFrame = true;
|
||||
break;
|
||||
}
|
||||
@@ -676,7 +655,7 @@ extern "C" void Graph_StartFrame() {
|
||||
#endif
|
||||
|
||||
if (CVarGetInteger(CVAR_NEW_FILE_DROPPED, 0)) {
|
||||
std::string filePath = SanitizePath(CVarGetString(CVAR_DROPPED_FILE, ""));
|
||||
std::string filePath = CVarGetString(CVAR_DROPPED_FILE, "");
|
||||
if (!filePath.empty()) {
|
||||
GameInteractor::Instance->ExecuteHooks<GameInteractor::OnFileDropped>(filePath);
|
||||
}
|
||||
@@ -757,12 +736,16 @@ extern "C" void Graph_ProcessGfxCommands(Gfx* commands) {
|
||||
audio.cv_from_thread.wait(Lock);
|
||||
}
|
||||
}
|
||||
//
|
||||
// if (ShouldClearTextureCacheAtEndOfFrame) {
|
||||
// gfx_texture_cache_clear();
|
||||
// Ship::SkeletonPatcher::UpdateSkeletons();
|
||||
// ShouldClearTextureCacheAtEndOfFrame = false;
|
||||
//}
|
||||
|
||||
bool curAltAssets = CVarGetInteger("gAltAssets", 0);
|
||||
if (prevAltAssets != curAltAssets) {
|
||||
prevAltAssets = curAltAssets;
|
||||
Ship::Context::GetInstance()->GetResourceManager()->SetAltAssetsEnabled(curAltAssets);
|
||||
gfx_texture_cache_clear();
|
||||
// TODO: skeleton patch, hooks
|
||||
// SOH::SkeletonPatcher::UpdateSkeletons();
|
||||
// GameInteractor::Instance->ExecuteHooks<GameInteractor::OnAssetAltChange>();
|
||||
}
|
||||
|
||||
// OTRTODO: FIGURE OUT END FRAME POINT
|
||||
/* if (OTRGlobals::Instance->context->GetWindow()->lastScancode != -1)
|
||||
@@ -796,6 +779,10 @@ extern "C" uint16_t OTRGetPixelDepth(float x, float y) {
|
||||
return wnd->GetPixelDepth(x, adjustedY);
|
||||
}
|
||||
|
||||
extern "C" bool ResourceMgr_IsAltAssetsEnabled() {
|
||||
return Ship::Context::GetInstance()->GetResourceManager()->IsAltAssetsEnabled();
|
||||
}
|
||||
|
||||
extern "C" uint32_t ResourceMgr_GetNumGameVersions() {
|
||||
return Ship::Context::GetInstance()->GetResourceManager()->GetArchiveManager()->GetGameVersions().size();
|
||||
}
|
||||
@@ -1237,7 +1224,7 @@ extern "C" SkeletonHeader* ResourceMgr_LoadSkeletonByName(const char* path, Skel
|
||||
pathStr = pathStr.substr(sOtr.length());
|
||||
}
|
||||
|
||||
bool isAlt = CVarGetInteger(CVAR_ALT_ASSETS, 0);
|
||||
bool isAlt = ResourceMgr_IsAltAssetsEnabled();
|
||||
|
||||
if (isAlt) {
|
||||
pathStr = Ship::IResource::gAltAssetPrefix + pathStr;
|
||||
|
||||
@@ -172,6 +172,7 @@ void RegisterCameraFreeLook() {
|
||||
case CAM_FUNC_JUMP3:
|
||||
case CAM_FUNC_BATTLE1:
|
||||
case CAM_FUNC_UNIQUE2:
|
||||
case CAM_FUNC_UNIQUE3:
|
||||
if (Camera_CanFreeLook(camera)) {
|
||||
Camera_FreeLook(camera);
|
||||
*should = false;
|
||||
|
||||
@@ -26,13 +26,33 @@ void RegisterInfiniteCheats() {
|
||||
}
|
||||
|
||||
if (CVarGetInteger("gCheats.InfiniteConsumables", 0)) {
|
||||
AMMO(ITEM_BOW) = CUR_CAPACITY(UPG_QUIVER);
|
||||
AMMO(ITEM_BOMB) = CUR_CAPACITY(UPG_BOMB_BAG);
|
||||
AMMO(ITEM_BOMBCHU) = CUR_CAPACITY(UPG_BOMB_BAG);
|
||||
AMMO(ITEM_DEKU_STICK) = CUR_CAPACITY(UPG_DEKU_STICKS);
|
||||
AMMO(ITEM_DEKU_NUT) = CUR_CAPACITY(UPG_DEKU_NUTS);
|
||||
AMMO(ITEM_MAGIC_BEANS) = 20;
|
||||
AMMO(ITEM_POWDER_KEG) = 1;
|
||||
if (INV_CONTENT(ITEM_BOW) == ITEM_BOW) {
|
||||
AMMO(ITEM_BOW) = CUR_CAPACITY(UPG_QUIVER);
|
||||
}
|
||||
|
||||
if (INV_CONTENT(ITEM_BOMB) == ITEM_BOMB) {
|
||||
AMMO(ITEM_BOMB) = CUR_CAPACITY(UPG_BOMB_BAG);
|
||||
}
|
||||
|
||||
if (INV_CONTENT(ITEM_BOMBCHU) == ITEM_BOMBCHU) {
|
||||
AMMO(ITEM_BOMBCHU) = CUR_CAPACITY(UPG_BOMB_BAG);
|
||||
}
|
||||
|
||||
if (INV_CONTENT(ITEM_DEKU_STICK) == ITEM_DEKU_STICK) {
|
||||
AMMO(ITEM_DEKU_STICK) = CUR_CAPACITY(UPG_DEKU_STICKS);
|
||||
}
|
||||
|
||||
if (INV_CONTENT(ITEM_DEKU_NUT) == ITEM_DEKU_NUT) {
|
||||
AMMO(ITEM_DEKU_NUT) = CUR_CAPACITY(UPG_DEKU_NUTS);
|
||||
}
|
||||
|
||||
if (INV_CONTENT(ITEM_MAGIC_BEANS) == ITEM_MAGIC_BEANS) {
|
||||
AMMO(ITEM_MAGIC_BEANS) = 20;
|
||||
}
|
||||
|
||||
if (INV_CONTENT(ITEM_POWDER_KEG) == ITEM_POWDER_KEG) {
|
||||
AMMO(ITEM_POWDER_KEG) = 1;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -5,18 +5,34 @@ extern "C" {
|
||||
#include "z64.h"
|
||||
void Flags_SetWeekEventReg(s32 flag);
|
||||
extern SaveContext gSaveContext;
|
||||
extern PlayState* gPlayState;
|
||||
}
|
||||
|
||||
void RegisterSkipClockTowerOpen() {
|
||||
// This will handle skipping if you are around the Clock Town area, but not directly in south clock town
|
||||
REGISTER_VB_SHOULD(GI_VB_CLOCK_TOWER_OPENING_CONSIDER_THIS_FIRST_CYCLE, {
|
||||
if (CVarGetInteger("gEnhancements.Cutscenes.SkipStoryCutscenes", 0)) {
|
||||
*should = false;
|
||||
}
|
||||
});
|
||||
|
||||
// This will handle skipping if you are directly in South Clock Town
|
||||
REGISTER_VB_SHOULD(GI_VB_PLAY_TRANSITION_CS, {
|
||||
// Cutscene where clock tower opens. Will only show if the player is in Clock Town
|
||||
if (gSaveContext.save.entrance == ENTRANCE(SOUTH_CLOCK_TOWN, 0) && gSaveContext.save.cutsceneIndex == 0xFFF1 &&
|
||||
if ((gSaveContext.save.entrance == ENTRANCE(SOUTH_CLOCK_TOWN, 0) ||
|
||||
gSaveContext.save.entrance == ENTRANCE(TERMINA_FIELD, 0)) &&
|
||||
gSaveContext.save.cutsceneIndex == 0xFFF1 &&
|
||||
CVarGetInteger("gEnhancements.Cutscenes.SkipStoryCutscenes", 0)) {
|
||||
// Setting the respawn flag to 2 will respawn the player where they were before the cutscene, consistent
|
||||
// with the normal behavior
|
||||
gSaveContext.respawnFlag = 2;
|
||||
gSaveContext.save.cutsceneIndex = 0;
|
||||
// Copied from ObjTokeidai_TowerOpening_EndCutscene
|
||||
SET_WEEKEVENTREG(WEEKEVENTREG_CLOCK_TOWER_OPENED);
|
||||
gSaveContext.save.cutsceneIndex = 0;
|
||||
gSaveContext.respawnFlag = 2;
|
||||
gSaveContext.save.entrance = gSaveContext.respawn[RESPAWN_MODE_RETURN].entrance;
|
||||
if (gSaveContext.respawn[RESPAWN_MODE_RETURN].playerParams ==
|
||||
PLAYER_PARAMS(0xFF, PLAYER_INITMODE_TELESCOPE)) {
|
||||
gSaveContext.nextTransitionType = TRANS_TYPE_CIRCLE;
|
||||
} else {
|
||||
gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -49,6 +49,10 @@ void GameInteractor_ExecuteOnRoomInit(s16 sceneId, s8 roomNum) {
|
||||
GameInteractor::Instance->ExecuteHooksForFilter<GameInteractor::OnRoomInit>(sceneId, roomNum);
|
||||
}
|
||||
|
||||
void GameInteractor_ExecuteOnPlayDestroy() {
|
||||
GameInteractor::Instance->ExecuteHooks<GameInteractor::OnPlayDestroy>();
|
||||
}
|
||||
|
||||
bool GameInteractor_ShouldActorInit(Actor* actor) {
|
||||
bool result = true;
|
||||
GameInteractor::Instance->ExecuteHooks<GameInteractor::ShouldActorInit>(actor, &result);
|
||||
@@ -230,3 +234,22 @@ int GameInteractor_InvertControl(GIInvertType type) {
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
uint32_t GameInteractor_Dpad(GIDpadType type, uint32_t buttonCombo) {
|
||||
uint32_t result = 0;
|
||||
|
||||
switch (type) {
|
||||
case GI_DPAD_OCARINA:
|
||||
if (CVarGetInteger("gEnhancements.Playback.DpadOcarina", 0)) {
|
||||
result = buttonCombo;
|
||||
}
|
||||
break;
|
||||
case GI_DPAD_EQUIP:
|
||||
if (CVarGetInteger("gEnhancements.Dpad.DpadEquips", 0)) {
|
||||
result = buttonCombo;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -51,6 +51,7 @@ typedef enum {
|
||||
GI_VB_TATL_INTERUPT_MSG6,
|
||||
GI_VB_ITEM_BE_RESTRICTED,
|
||||
GI_VB_FLIP_HOP_VARIABLE,
|
||||
GI_VB_CLOCK_TOWER_OPENING_CONSIDER_THIS_FIRST_CYCLE,
|
||||
} GIVanillaBehavior;
|
||||
|
||||
typedef enum {
|
||||
@@ -58,6 +59,11 @@ typedef enum {
|
||||
GI_INVERT_CAMERA_RIGHT_STICK_Y,
|
||||
} GIInvertType;
|
||||
|
||||
typedef enum {
|
||||
GI_DPAD_OCARINA,
|
||||
GI_DPAD_EQUIP,
|
||||
} GIDpadType;
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
#include <vector>
|
||||
@@ -255,6 +261,7 @@ class GameInteractor {
|
||||
|
||||
DEFINE_HOOK(OnSceneInit, (s8 sceneId, s8 spawnNum));
|
||||
DEFINE_HOOK(OnRoomInit, (s8 sceneId, s8 roomNum));
|
||||
DEFINE_HOOK(OnPlayDestroy, ());
|
||||
|
||||
DEFINE_HOOK(ShouldActorInit, (Actor * actor, bool* should));
|
||||
DEFINE_HOOK(OnActorInit, (Actor * actor));
|
||||
@@ -296,6 +303,7 @@ void GameInteractor_ExecuteBeforeMoonCrashSaveReset();
|
||||
|
||||
void GameInteractor_ExecuteOnSceneInit(s16 sceneId, s8 spawnNum);
|
||||
void GameInteractor_ExecuteOnRoomInit(s16 sceneId, s8 roomNum);
|
||||
void GameInteractor_ExecuteOnPlayDestroy();
|
||||
|
||||
bool GameInteractor_ShouldActorInit(Actor* actor);
|
||||
void GameInteractor_ExecuteOnActorInit(Actor* actor);
|
||||
@@ -327,6 +335,7 @@ bool GameInteractor_Should(GIVanillaBehavior flag, bool result, void* optionalAr
|
||||
flag, [](GIVanillaBehavior _, bool* should, void* opt) body)
|
||||
|
||||
int GameInteractor_InvertControl(GIInvertType type);
|
||||
uint32_t GameInteractor_Dpad(GIDpadType type, uint32_t buttonCombo);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -17,20 +17,12 @@ extern TexturePtr sPlayerMouthTextures[PLAYER_FORM_MAX][PLAYER_MOUTH_MAX];
|
||||
static SkeletonHeader gLinkHumanSkelBackup;
|
||||
static SkeletonHeader gKafeiSkelBackup;
|
||||
|
||||
void UpdatePlayAsKafeiSkeletons() {
|
||||
void UpdatePlayAsKafei() {
|
||||
if (CVarGetInteger("gModes.PlayAsKafei", 0)) {
|
||||
auto gLinkHumanSkelResource = Ship::Context::GetInstance()->GetResourceManager()->LoadResource(gLinkHumanSkel);
|
||||
SkeletonHeader* gLinkHumanSkelPtr = (SkeletonHeader*)gLinkHumanSkelResource->GetRawPointer();
|
||||
memcpy(gLinkHumanSkelPtr, &gKafeiSkelBackup, sizeof(SkeletonHeader));
|
||||
} else {
|
||||
auto gLinkHumanSkelResource = Ship::Context::GetInstance()->GetResourceManager()->LoadResource(gLinkHumanSkel);
|
||||
SkeletonHeader* gLinkHumanSkelPtr = (SkeletonHeader*)gLinkHumanSkelResource->GetRawPointer();
|
||||
memcpy(gLinkHumanSkelPtr, &gLinkHumanSkelBackup, sizeof(SkeletonHeader));
|
||||
}
|
||||
}
|
||||
|
||||
void UpdatePlayAsKafeiOther() {
|
||||
if (CVarGetInteger("gModes.PlayAsKafei", 0)) {
|
||||
ResourceMgr_PatchGfxByName(gLinkHumanWaistDL, "gLinkHumanWaistDL0", 0,
|
||||
gsSPDisplayListOTRFilePath(gKafeiWaistDL));
|
||||
ResourceMgr_PatchGfxByName(gLinkHumanWaistDL, "gLinkHumanWaistDL1", 1, gsSPEndDisplayList());
|
||||
@@ -49,6 +41,10 @@ void UpdatePlayAsKafeiOther() {
|
||||
sPlayerMouthTextures[PLAYER_FORM_HUMAN][2] = (TexturePtr)gKafeiMouthAngryTex;
|
||||
sPlayerMouthTextures[PLAYER_FORM_HUMAN][3] = (TexturePtr)gKafeiMouthHappyTex;
|
||||
} else {
|
||||
auto gLinkHumanSkelResource = Ship::Context::GetInstance()->GetResourceManager()->LoadResource(gLinkHumanSkel);
|
||||
SkeletonHeader* gLinkHumanSkelPtr = (SkeletonHeader*)gLinkHumanSkelResource->GetRawPointer();
|
||||
memcpy(gLinkHumanSkelPtr, &gLinkHumanSkelBackup, sizeof(SkeletonHeader));
|
||||
|
||||
ResourceMgr_UnpatchGfxByName(gLinkHumanWaistDL, "gLinkHumanWaistDL0");
|
||||
ResourceMgr_UnpatchGfxByName(gLinkHumanWaistDL, "gLinkHumanWaistDL1");
|
||||
|
||||
@@ -78,9 +74,7 @@ void RegisterPlayAsKafei() {
|
||||
memcpy(&gLinkHumanSkelBackup, gLinkHumanSkelPtr, sizeof(SkeletonHeader));
|
||||
memcpy(&gKafeiSkelBackup, gKafeiSkelPtr, sizeof(SkeletonHeader));
|
||||
|
||||
UpdatePlayAsKafeiSkeletons();
|
||||
UpdatePlayAsKafeiOther();
|
||||
UpdatePlayAsKafei();
|
||||
|
||||
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnSceneInit>(
|
||||
[](s8 sceneId, s8 spawnNum) { UpdatePlayAsKafeiOther(); });
|
||||
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnPlayDestroy>([]() { UpdatePlayAsKafei(); });
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user