Merge pull request #631 from HarbourMasters/develop-rika

`develop-rika` -> `develop`
This commit is contained in:
Garrett Cox
2024-05-31 23:36:54 -05:00
committed by GitHub
42 changed files with 313 additions and 177 deletions
+1 -1
View File
@@ -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
View File
@@ -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:
-1
View File
@@ -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()
-2
View File
@@ -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
View File
@@ -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 ZAPDTR updated: ce2d63d8dd...b002f28757
-2
View File
@@ -20,8 +20,6 @@
#include "include/global.h"
#include "include/z64audio.h"
bool ShouldClearTextureCacheAtEndOfFrame = false;
namespace BenGui {
// MARK: - Delegates
+14 -14
View File
@@ -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")) {
+18 -11
View File
@@ -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) {
+5 -7
View File
@@ -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
View File
@@ -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;
+1
View File
@@ -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;
+27 -7
View File
@@ -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
}
+7 -13
View File
@@ -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