From 755ed5b29e3319d1d6c6870fbc2a4654c42a24ec Mon Sep 17 00:00:00 2001 From: Amethyst-szs Date: Thu, 24 Aug 2023 23:11:32 -0700 Subject: [PATCH] Post PR cleanup and adding features from GD repo --- src/program/devgui/DevGuiManager.cpp | 2 +- .../devgui/settings/DevGuiSettings.cpp | 3 ++- src/program/devgui/settings/SettingsHooks.cpp | 12 +++++++++ src/program/ghost/GhostManager.h | 2 +- src/program/primitives/PrimitiveQueue.h | 19 +++++++++++++- src/program/primitives/PrimitiveTypes.cpp | 22 ++++++++++++++++ src/program/primitives/PrimitiveTypes.h | 25 ++++++++++++++++++- 7 files changed, 80 insertions(+), 5 deletions(-) diff --git a/src/program/devgui/DevGuiManager.cpp b/src/program/devgui/DevGuiManager.cpp index c7c3da7..4cbef33 100644 --- a/src/program/devgui/DevGuiManager.cpp +++ b/src/program/devgui/DevGuiManager.cpp @@ -64,7 +64,7 @@ void DevGuiManager::createElements() createWindow(infoWindowName, true); createWindow(actorBrowseWindowName, false); createWindow(fpsWindowName, true); - createWindow(tasWindowName, true); + createWindow(tasWindowName, false); WindowGroup* memoryGroup = createWindowGroup("Memory Tools", 2); createWindow(loadLogWindowName, false, memoryGroup); diff --git a/src/program/devgui/settings/DevGuiSettings.cpp b/src/program/devgui/settings/DevGuiSettings.cpp index 0735442..1cb1dd9 100644 --- a/src/program/devgui/settings/DevGuiSettings.cpp +++ b/src/program/devgui/settings/DevGuiSettings.cpp @@ -20,11 +20,12 @@ DevGuiSettings::DevGuiSettings(DevGuiManager* parent) registerNewSetting(false, true, "Clear Wall Jump Limits"); registerNewSetting(false, true, "Button Motion Roll"); registerNewSetting(false, true, "Moon Refresh"); + registerNewSetting(false, true, "Disable Kingdom Moon Lock"); + registerNewSetting(false, true, "Always Manually Skip Cutscenes"); registerNewSetting(false, true, "Always Allow Checkpoints"); registerNewSetting(true, true, "Autosave"); registerNewSetting(true, true, "Display HUD"); registerNewSetting(true, true, "Play Music"); - registerNewSetting(false, true, "Always Manually Skip Cutscenes"); Logger::log(" Created %i settings\n", mSettings.size()); } diff --git a/src/program/devgui/settings/SettingsHooks.cpp b/src/program/devgui/settings/SettingsHooks.cpp index 1b5518b..abc0e10 100644 --- a/src/program/devgui/settings/SettingsHooks.cpp +++ b/src/program/devgui/settings/SettingsHooks.cpp @@ -134,6 +134,17 @@ HOOK_DEFINE_TRAMPOLINE(GreyShineRefreshHook) { } }; +HOOK_DEFINE_TRAMPOLINE(DisableMoonLockHook) { + static int Callback(GameDataHolder *thisPtr, bool *isCrashList, int worldID) { + int lockSize = Orig(thisPtr, isCrashList, worldID); + + if (DevGuiManager::instance()->getSettings()->getStateByName("Disable Kingdom Moon Lock")) + return 0; + + return lockSize; + } +}; + HOOK_DEFINE_TRAMPOLINE(ButtonMotionRollHook) { static bool Callback(void* thisPtr) { if (DevGuiManager::instance()->getSettings()->getStateByName("Button Motion Roll")) @@ -158,6 +169,7 @@ void exlSetupSettingsHooks() SaveHook::InstallAtSymbol("_ZNK10StageScene12isEnableSaveEv"); CheckpointWarpHook::InstallAtSymbol("_ZNK9MapLayout22isEnableCheckpointWarpEv"); GreyShineRefreshHook::InstallAtSymbol("_ZN16GameDataFunction10isGotShineE22GameDataHolderAccessorPK9ShineInfo"); + DisableMoonLockHook::InstallAtSymbol("_ZNK14GameDataHolder18findUnlockShineNumEPbi"); ButtonMotionRollHook::InstallAtSymbol("_ZNK23PlayerJudgeStartRolling21isTriggerRestartSwingEv"); NoDamageHook::InstallAtSymbol("_ZN16GameDataFunction12damagePlayerE20GameDataHolderWriter"); exlSetupDemoHooks(); diff --git a/src/program/ghost/GhostManager.h b/src/program/ghost/GhostManager.h index 2868d0c..410903a 100644 --- a/src/program/ghost/GhostManager.h +++ b/src/program/ghost/GhostManager.h @@ -38,7 +38,7 @@ class GhostManager : public al::NerveExecutor { s64 mEntryCount; nn::fs::DirectoryEntry* mEntries = nullptr; bool* mActiveReplays = nullptr; - int mMaxGhostNum = 8; + int mMaxGhostNum = 1; sead::PtrArray ghosts; al::Scene* mScene = nullptr; PlayerActorHakoniwa* mPlayer = nullptr; diff --git a/src/program/primitives/PrimitiveQueue.h b/src/program/primitives/PrimitiveQueue.h index b7a10f5..d122166 100644 --- a/src/program/primitives/PrimitiveQueue.h +++ b/src/program/primitives/PrimitiveQueue.h @@ -30,7 +30,19 @@ class PrimitiveQueue { void pushLine(sead::Vector3f point1, sead::Vector3f point2, sead::Color4f col) { - auto* entry = new (mHeap) PrimitiveTypeLine(point1, point2, col); + auto* entry = new (mHeap) PrimitiveTypeLine(point1, point2, col, 0.f, 0.f); + mRenderQueue.pushBack((PrimitiveTypeBase*)entry); + } + + void pushLine(sead::Vector3f point1, sead::Vector3f point2, sead::Color4f col, float size) + { + auto* entry = new (mHeap) PrimitiveTypeLine(point1, point2, col, size, size); + mRenderQueue.pushBack((PrimitiveTypeBase*)entry); + } + + void pushLine(sead::Vector3f point1, sead::Vector3f point2, sead::Color4f col, float size1, float size2) + { + auto* entry = new (mHeap) PrimitiveTypeLine(point1, point2, col, size1, size2); mRenderQueue.pushBack((PrimitiveTypeBase*)entry); } @@ -40,6 +52,11 @@ class PrimitiveQueue { mRenderQueue.pushBack((PrimitiveTypeBase*)entry); } + void pushBox(sead::Vector3f pos, float size, sead::Color4f frame, sead::Color4f fill) + { + auto* entry = new (mHeap) PrimitiveTypeBox(pos, {size, size, size}, frame, fill); + mRenderQueue.pushBack((PrimitiveTypeBase*)entry); + } void pushArea(const char* gName, sead::Color4f frame, sead::Color4f fill) { auto* entry = new (mHeap) PrimitiveTypeArea(gName, frame, fill); diff --git a/src/program/primitives/PrimitiveTypes.cpp b/src/program/primitives/PrimitiveTypes.cpp index cb2ea8b..0c09a16 100644 --- a/src/program/primitives/PrimitiveTypes.cpp +++ b/src/program/primitives/PrimitiveTypes.cpp @@ -14,6 +14,11 @@ void PrimitiveTypeLine::render() { sead::PrimitiveRenderer* renderer = sead::PrimitiveRenderer::instance(); renderer->drawLine(mPoints[0], mPoints[1], mColor); + + if(mPointsSize[0] > 0.f) + renderer->drawSphere4x8(mPoints[0], mPointsSize[0], mColor - sead::Color4f(0.f, 0.f, 0.f, 0.25f)); + if(mPointsSize[1] > 0.f) + renderer->drawSphere4x8(mPoints[1], mPointsSize[1], mColor - sead::Color4f(0.f, 0.f, 0.f, 0.25f)); } void PrimitiveTypeAxis::render() @@ -22,6 +27,23 @@ void PrimitiveTypeAxis::render() renderer->drawAxis(mTranslation, mSize); } +void PrimitiveTypeBox::render() +{ + sead::PrimitiveRenderer* renderer = sead::PrimitiveRenderer::instance(); + + sead::Matrix34f mtx = sead::Matrix34f::ident; + mtx.setTranslation(mPos); + + renderer->setModelMatrix(mtx); + + sead::PrimitiveDrawer::CubeArg shapeAreaSolid(sead::Vector3f::zero, mSize, mFillColor); + sead::PrimitiveDrawer::CubeArg shapeAreaWire(sead::Vector3f::zero, mSize, mFrameColor); + renderer->drawCube(shapeAreaSolid); + renderer->drawWireCube(shapeAreaWire); + + renderer->setModelMatrix(sead::Matrix34f::ident); +} + void PrimitiveTypeArea::render() { sead::PrimitiveRenderer* renderer = sead::PrimitiveRenderer::instance(); diff --git a/src/program/primitives/PrimitiveTypes.h b/src/program/primitives/PrimitiveTypes.h index 504cab2..8052b0d 100644 --- a/src/program/primitives/PrimitiveTypes.h +++ b/src/program/primitives/PrimitiveTypes.h @@ -54,16 +54,19 @@ class PrimitiveTypePoint : public PrimitiveTypeBase { class PrimitiveTypeLine : public PrimitiveTypeBase { public: - PrimitiveTypeLine(sead::Vector3f point1, sead::Vector3f point2, sead::Color4f col) + PrimitiveTypeLine(sead::Vector3f point1, sead::Vector3f point2, sead::Color4f col, float pointSize1, float pointSize2) : PrimitiveTypeBase(PrimitiveTypes::PRIM_LINE) { mPoints[0] = point1; mPoints[1] = point2; + mPointsSize[0] = pointSize1; + mPointsSize[1] = pointSize2; mColor = col; } ~PrimitiveTypeLine() override {} sead::Vector3f mPoints[2]; + float mPointsSize[2]; sead::Color4f mColor; void render() override; @@ -85,6 +88,26 @@ class PrimitiveTypeAxis : public PrimitiveTypeBase { void render() override; }; +class PrimitiveTypeBox : public PrimitiveTypeBase { +public: + PrimitiveTypeBox(sead::Vector3f pos, sead::Vector3f size, sead::Color4f frame, sead::Color4f fill) + : PrimitiveTypeBase(PrimitiveTypes::PRIM_AREA) + { + mPos = pos; + mSize = size; + mFrameColor = frame; + mFillColor = fill; + } + ~PrimitiveTypeBox() override {} + + sead::Vector3f mPos; + sead::Vector3f mSize; + sead::Color4f mFrameColor; + sead::Color4f mFillColor; + + void render() override; +}; + class PrimitiveTypeArea : public PrimitiveTypeBase { public: PrimitiveTypeArea(const char* gName, sead::Color4f frame, sead::Color4f fill)