From 5e81b222475fb51fd20846ff20a4c27213b0e62b Mon Sep 17 00:00:00 2001 From: GRAnimated Date: Fri, 17 Jan 2025 05:48:32 -0500 Subject: [PATCH 1/7] Implement `WindowConfirm` --- data/odyssey_functions.csv | 48 +-- lib/al/Library/Play/Layout/WindowConfirm.cpp | 317 +++++++++++++++++++ lib/al/Library/Play/Layout/WindowConfirm.h | 61 ++++ 3 files changed, 402 insertions(+), 24 deletions(-) create mode 100644 lib/al/Library/Play/Layout/WindowConfirm.cpp create mode 100644 lib/al/Library/Play/Layout/WindowConfirm.h diff --git a/data/odyssey_functions.csv b/data/odyssey_functions.csv index 126e904c..8815b558 100644 --- a/data/odyssey_functions.csv +++ b/data/odyssey_functions.csv @@ -61579,30 +61579,30 @@ Address,Quality,Size,Name 0x000000710099a960,U,000744,_ZN2al22TalkMessageVoicePlayer6updateEv 0x000000710099ac48,U,000292,_ZNK2al22TalkMessageVoicePlayer14calcVoicePitchEi 0x000000710099ad6c,U,000116,_ZNK2al22TalkMessageVoicePlayer9isPlayingEv -0x000000710099ade0,U,000740,_ZN2al13WindowConfirmC2ERKNS_14LayoutInitInfoEPKcS5_ -0x000000710099b0c4,U,000748,_ZN2al13WindowConfirmC1ERKNS_14LayoutInitInfoEPKcS5_ -0x000000710099b3b0,U,000028,_ZN2al13WindowConfirm13setTxtMessageEPKDs -0x000000710099b3cc,U,000056,_ZN2al13WindowConfirm10setTxtListEiPKDs -0x000000710099b404,U,000040,_ZN2al13WindowConfirm10setListNumEi -0x000000710099b42c,U,000008,_ZN2al13WindowConfirm12setCancelIdxEi -0x000000710099b434,U,000652,_ZN2al13WindowConfirm6appearEv -0x000000710099b6c0,U,000200,_ZN2al13WindowConfirm24appearWithChoicingCancelEv -0x000000710099b788,U,000012,_ZN2al13WindowConfirm10isNerveEndEv -0x000000710099b794,U,000120,_ZN2al13WindowConfirm6tryEndEv -0x000000710099b80c,U,000100,_ZN2al13WindowConfirm13isEnableInputEv -0x000000710099b870,U,000104,_ZN2al13WindowConfirm5tryUpEv -0x000000710099b8d8,U,000108,_ZN2al13WindowConfirm7tryDownEv -0x000000710099b944,U,000144,_ZN2al13WindowConfirm9tryDecideEv -0x000000710099b9d4,U,000128,_ZN2al13WindowConfirm19tryDecideWithoutEndEv -0x000000710099ba54,U,000428,_ZN2al13WindowConfirm9tryCancelEv -0x000000710099bc00,U,000148,_ZN2al13WindowConfirm15setCursorToPaneEv -0x000000710099bc94,U,000412,_ZN2al13WindowConfirm19tryCancelWithoutEndEv -0x000000710099be30,U,000004,_ZN2al13WindowConfirm7exeHideEv -0x000000710099be34,U,000200,_ZN2al13WindowConfirm9exeAppearEv -0x000000710099befc,U,000816,_ZN2al13WindowConfirm7exeWaitEv -0x000000710099c22c,U,000304,_ZN2al13WindowConfirm9exeDecideEv -0x000000710099c35c,U,000016,_ZN2al13WindowConfirm14exeDecideAfterEv -0x000000710099c36c,U,000112,_ZN2al13WindowConfirm6exeEndEv +0x000000710099ade0,O,000740,_ZN2al13WindowConfirmC2ERKNS_14LayoutInitInfoEPKcS5_ +0x000000710099b0c4,O,000748,_ZN2al13WindowConfirmC1ERKNS_14LayoutInitInfoEPKcS5_ +0x000000710099b3b0,O,000028,_ZN2al13WindowConfirm13setTxtMessageEPKDs +0x000000710099b3cc,O,000056,_ZN2al13WindowConfirm10setTxtListEiPKDs +0x000000710099b404,O,000040,_ZN2al13WindowConfirm10setListNumEi +0x000000710099b42c,O,000008,_ZN2al13WindowConfirm12setCancelIdxEi +0x000000710099b434,O,000652,_ZN2al13WindowConfirm6appearEv +0x000000710099b6c0,O,000200,_ZN2al13WindowConfirm24appearWithChoicingCancelEv +0x000000710099b788,O,000012,_ZN2al13WindowConfirm10isNerveEndEv +0x000000710099b794,O,000120,_ZN2al13WindowConfirm6tryEndEv +0x000000710099b80c,O,000100,_ZN2al13WindowConfirm13isEnableInputEv +0x000000710099b870,O,000104,_ZN2al13WindowConfirm5tryUpEv +0x000000710099b8d8,O,000108,_ZN2al13WindowConfirm7tryDownEv +0x000000710099b944,O,000144,_ZN2al13WindowConfirm9tryDecideEv +0x000000710099b9d4,M,000128,_ZN2al13WindowConfirm19tryDecideWithoutEndEv +0x000000710099ba54,O,000428,_ZN2al13WindowConfirm9tryCancelEv +0x000000710099bc00,O,000148,_ZN2al13WindowConfirm15setCursorToPaneEv +0x000000710099bc94,O,000412,_ZN2al13WindowConfirm19tryCancelWithoutEndEv +0x000000710099be30,O,000004,_ZN2al13WindowConfirm7exeHideEv +0x000000710099be34,O,000200,_ZN2al13WindowConfirm9exeAppearEv +0x000000710099befc,O,000816,_ZN2al13WindowConfirm7exeWaitEv +0x000000710099c22c,M,000304,_ZN2al13WindowConfirm9exeDecideEv +0x000000710099c35c,O,000016,_ZN2al13WindowConfirm14exeDecideAfterEv +0x000000710099c36c,O,000112,_ZN2al13WindowConfirm6exeEndEv 0x000000710099c3dc,U,000004, 0x000000710099c3e0,U,000008, 0x000000710099c3e8,U,000112, diff --git a/lib/al/Library/Play/Layout/WindowConfirm.cpp b/lib/al/Library/Play/Layout/WindowConfirm.cpp new file mode 100644 index 00000000..26f19705 --- /dev/null +++ b/lib/al/Library/Play/Layout/WindowConfirm.cpp @@ -0,0 +1,317 @@ +#include "Library/Play/Layout/WindowConfirm.h" + +#include "Library/Base/StringUtil.h" +#include "Library/Layout/LayoutActionFunction.h" +#include "Library/Layout/LayoutActorUtil.h" +#include "Library/Layout/LayoutInitInfo.h" +#include "Library/Nerve/NerveSetupUtil.h" +#include "Library/Nerve/NerveUtil.h" + +namespace { +using namespace al; +NERVE_IMPL(WindowConfirm, Hide); +NERVE_IMPL(WindowConfirm, Appear); +NERVE_IMPL(WindowConfirm, End); +NERVE_IMPL(WindowConfirm, Decide); +NERVE_IMPL(WindowConfirm, Wait); +NERVE_IMPL(WindowConfirm, DecideAfter); + +NERVES_MAKE_NOSTRUCT(WindowConfirm, Hide, Appear, DecideAfter); +NERVES_MAKE_STRUCT(WindowConfirm, End, Decide, Wait); + +} // namespace + +namespace al { + +WindowConfirm::WindowConfirm(const LayoutInitInfo& info, const char* name, const char* actorName) + : LayoutActor(actorName) { + initLayoutActor(this, info, name, nullptr); + + s32 paneChildNum = getPaneChildNum(this, "All"); + s32 i = 0; + + s32 numberOfPanes = 0; + for (i = 0; i < paneChildNum; i++) + numberOfPanes += isExistPane(this, StringTmp<64>("ParList%02d", i).cstr()); + + mParListArray.allocBuffer(numberOfPanes, nullptr, 8); + + for (i = 0; i < numberOfPanes; i++) { + LayoutActor* choiceActor = new LayoutActor(StringTmp<64>("選択肢%02d", i).cstr()); + initLayoutPartsActor(choiceActor, this, info, StringTmp<64>("ParList%02d", i).cstr(), + nullptr); + + mParListArray.pushBack(choiceActor); + } + + if (isExistPane(this, "ParHardKey")) { + mButtonActor = new LayoutActor("Aボタン"); + initLayoutPartsActor(mButtonActor, this, info, "ParHardKey", nullptr); + } + + mCursorActor = new LayoutActor("カーソル"); + initLayoutPartsActor(mCursorActor, this, info, "ParCursor", nullptr); + + initNerve(&Hide, 0); +} + +void WindowConfirm::setTxtMessage(const char16* message) { + setPaneString(this, "TxtMessage", message, 0); +} + +void WindowConfirm::setTxtList(s32 index, const char16* message) { + setPaneString(mParListArray.at(index), "TxtContent", message, 0); +} + +void WindowConfirm::setListNum(s32 num) { + mSelectionType = (SelectionType)num; + if (num == SelectionType_List01) + mCancelIdx = 1; + if (num == SelectionType_List02) + mCancelIdx = 0; +} + +void WindowConfirm::setCancelIdx(s32 index) { + mCancelIdx = index; +} + +void WindowConfirm::appear() { + if (isAlive()) + return; + mSelectionIndex = 0; + mDirection = Direction_None; + + startAction(this, "Appear", nullptr); + switch (mSelectionType) { + case SelectionType_HardKey: + startAction(this, "SelectHardKey", "Select"); + + hidePane(this, "ParCursor"); + hidePane(this, "ParHardKey"); + break; + case SelectionType_List00: + startAction(this, "SelectHardKey", "Select"); + startAction(mButtonActor, "Appear", nullptr); + + hidePane(this, "ParCursor"); + showPane(this, "ParHardKey"); + break; + case SelectionType_List01: + startAction(this, "Select2", "Select"); + startAction(mCursorActor, "Appear", nullptr); + startAction(mParListArray[0], "Select", nullptr); + startAction(mParListArray[1], "Wait", nullptr); + + showPane(this, "ParCursor"); + hidePane(this, "ParHardKey"); + break; + case SelectionType_List02: + startAction(this, "Select3", "Select"); + startAction(mCursorActor, "Appear", nullptr); + startAction(mParListArray[0], "Select", nullptr); + startAction(mParListArray[1], "Wait", nullptr); + startAction(mParListArray[2], "Wait", nullptr); + + showPane(this, "ParCursor"); + hidePane(this, "ParHardKey"); + break; + default: + break; + } + LayoutActor::appear(); + setNerve(this, &Appear); +} + +void WindowConfirm::appearWithChoicingCancel() { + if (isAlive()) + return; + appear(); + + if (mSelectionType == SelectionType_List01) { + startAction(mParListArray[mSelectionIndex], "Wait", nullptr); + startAction(mParListArray[mCancelIdx], "Select", nullptr); + } else if (mSelectionType == SelectionType_List02) { + startAction(mParListArray[mSelectionIndex], "Wait", nullptr); + startAction(mParListArray[mCancelIdx], "Select", nullptr); + } + + mSelectionIndex = mCancelIdx; +} + +bool WindowConfirm::isNerveEnd() { + return isNerve(this, &NrvWindowConfirm.End); +} + +bool WindowConfirm::tryEnd() { + if (isEnableInput()) { + mIsDecided = false; + setNerve(this, &NrvWindowConfirm.End); + return true; + } + return false; +} + +bool WindowConfirm::isEnableInput() { + if (mCooldown <= 0 && isNerve(this, &NrvWindowConfirm.Wait) && isGreaterEqualStep(this, 10)) { + mCooldown = 10; + return true; + } + return false; +} + +bool WindowConfirm::tryUp() { + if (isEnableInput()) { + mDirection = Direction_Up; + return true; + } + return false; +} + +bool WindowConfirm::tryDown() { + if (isEnableInput()) { + mDirection = Direction_Down; + return true; + } + return false; +} + +bool WindowConfirm::tryDecide() { + if (isEnableInput()) { + mIsDecided = false; + startHitReaction(this, "決定", nullptr); + setNerve(this, &NrvWindowConfirm.Decide); + return true; + } + return false; +} + +bool WindowConfirm::tryDecideWithoutEnd() { + if (isEnableInput()) { + mIsDecided = false; + setNerve(this, &NrvWindowConfirm.Decide); + return true; + } + return false; +} + +bool WindowConfirm::tryCancel() { + if (!isEnableInput()) + return false; + if ((mSelectionType == SelectionType_List01 || mSelectionType == SelectionType_List02) && + mSelectionIndex != mCancelIdx) { + startAction(mParListArray[mSelectionIndex], "Wait", nullptr); + startAction(mParListArray[mCancelIdx], "Select", nullptr); + mSelectionIndex = mCancelIdx; + setCursorToPane(); + } + startHitReaction(this, "キャンセル", nullptr); + mIsDecided = false; + setNerve(this, &NrvWindowConfirm.Decide); + return true; +} + +void WindowConfirm::setCursorToPane() { + if (mSelectionType < SelectionType_List01) + return; + sead::Vector3f trans = {1.0f, 1.0f, 1.0f}; + calcPaneTrans(&trans, mParListArray[mSelectionIndex], "Cursor"); + setPaneLocalTrans(this, "ParCursor", trans); +} + +bool WindowConfirm::tryCancelWithoutEnd() { + if (isEnableInput()) { + if ((mSelectionType == SelectionType_List01 || mSelectionType == SelectionType_List02) && + mSelectionIndex != mCancelIdx) { + startAction(mParListArray[mSelectionIndex], "Wait", nullptr); + startAction(mParListArray[mCancelIdx], "Select", nullptr); + mSelectionIndex = mCancelIdx; + setCursorToPane(); + } + mIsDecided = true; + setNerve(this, &NrvWindowConfirm.Decide); + return true; + } + return false; +} + +void WindowConfirm::exeHide() {} + +void WindowConfirm::exeAppear() { + if (mSelectionType == SelectionType_List01 || mSelectionType == SelectionType_List02) + setCursorToPane(); + if (isActionEnd(this, nullptr)) + setNerve(this, &NrvWindowConfirm.Wait); +} + +void WindowConfirm::exeWait() { + if (isFirstStep(this)) { + startAction(this, "Wait", nullptr); + mCooldown = -1; + } + if (mSelectionType == SelectionType_List01 || mSelectionType == SelectionType_List02) { + if (isActionPlaying(mCursorActor, "Appear", nullptr) && isActionEnd(mCursorActor, nullptr)) + startAction(mCursorActor, "Wait", nullptr); + } else { + if (mSelectionType == SelectionType_List00) + if (isActionPlaying(mButtonActor, "Appear", nullptr) && + isActionEnd(mButtonActor, nullptr)) + startAction(mButtonActor, "Wait", nullptr); + } + + if (mDirection == Direction_Up) { + startAction(mParListArray[mSelectionIndex], "Wait", nullptr); + if (mSelectionIndex-- <= 0) + mSelectionIndex = mSelectionType - 1; + + startAction(mParListArray[mSelectionIndex], "Select", nullptr); + setCursorToPane(); + } + if (mDirection == Direction_Down) { + startAction(mParListArray[mSelectionIndex], "Wait", nullptr); + mSelectionIndex++; + if (mSelectionIndex >= mSelectionType) + mSelectionIndex = 0; + + startAction(mParListArray[mSelectionIndex], "Select", nullptr); + setCursorToPane(); + } + + mDirection = Direction_None; + + if (mCooldown >= 0) + mCooldown--; +} + +void WindowConfirm::exeDecide() { + if (isFirstStep(this)) { + if ((mSelectionType & 0xFFFFFFFE) == 2) { + startAction(mParListArray[mSelectionIndex], "Decide", nullptr); + startAction(mCursorActor, "End", nullptr); + } else if ((mSelectionType & 0xFFFFFFFE) == 1) { + startAction(mButtonActor, "PageEnd", nullptr); + } else if ((mSelectionType & 0xFFFFFFFE) == 0) { + setNerve(this, &DecideAfter); + } + } + if ((mSelectionType & 0xFFFFFFFE) == 2) { + if (isActionEnd(mParListArray[mSelectionIndex], nullptr)) + setNerve(this, &DecideAfter); + } else if (isActionEnd(mButtonActor, nullptr)) + setNerve(this, &DecideAfter); +} + +void WindowConfirm::exeDecideAfter() { + setNerveAtGreaterEqualStep(this, &NrvWindowConfirm.End, 0); +} + +void WindowConfirm::exeEnd() { + if (!mIsDecided) { + if (isFirstStep(this)) + startAction(this, "End", nullptr); + + if (isActionEnd(this, nullptr)) + kill(); + } +} + +} // namespace al diff --git a/lib/al/Library/Play/Layout/WindowConfirm.h b/lib/al/Library/Play/Layout/WindowConfirm.h new file mode 100644 index 00000000..d037b93b --- /dev/null +++ b/lib/al/Library/Play/Layout/WindowConfirm.h @@ -0,0 +1,61 @@ +#pragma once + +#include + +#include "Library/Layout/LayoutActor.h" + +namespace al { +class LayoutInitInfo; + +class WindowConfirm : public LayoutActor { +public: + enum SelectionType : s32 { + SelectionType_None = -1, + SelectionType_HardKey = 0, + SelectionType_List00 = 1, + SelectionType_List01 = 2, + SelectionType_List02 = 3, + }; + + enum Direction : s32 { Direction_None = 0, Direction_Up = 1, Direction_Down = 2 }; + + WindowConfirm(const LayoutInitInfo&, const char*, const char*); + + void setTxtMessage(const char16*); + void setTxtList(s32, const char16*); + void setListNum(s32); + void setCancelIdx(s32); + void appear(); + void appearWithChoicingCancel(); + bool isNerveEnd(); + bool tryEnd(); + bool isEnableInput(); + bool tryUp(); + bool tryDown(); + bool tryDecide(); + bool tryDecideWithoutEnd(); + bool tryCancel(); + void setCursorToPane(); + bool tryCancelWithoutEnd(); + + void exeHide(); + void exeAppear(); + void exeWait(); + void exeDecide(); + void exeDecideAfter(); + void exeEnd(); + + // s32 getField134() { return mPrevSelectionIndex; } + +private: + Direction mDirection = Direction_None; + SelectionType mSelectionType = SelectionType_None; + s32 mSelectionIndex = -1; + s32 mCancelIdx = -1; + bool mIsDecided = false; + s32 mCooldown = -1; + sead::PtrArray mParListArray; + LayoutActor* mCursorActor; + LayoutActor* mButtonActor; +}; +} // namespace al From fe8f27d841fea6d874e52fb67ef6a2a4e74ec2b5 Mon Sep 17 00:00:00 2001 From: GRAnimated Date: Thu, 3 Apr 2025 01:07:21 -0400 Subject: [PATCH 2/7] Rebase --- lib/al/Library/Play/Layout/WindowConfirm.cpp | 102 ++++++++++--------- lib/al/Library/Play/Layout/WindowConfirm.h | 6 +- 2 files changed, 56 insertions(+), 52 deletions(-) diff --git a/lib/al/Library/Play/Layout/WindowConfirm.cpp b/lib/al/Library/Play/Layout/WindowConfirm.cpp index 26f19705..3943194a 100644 --- a/lib/al/Library/Play/Layout/WindowConfirm.cpp +++ b/lib/al/Library/Play/Layout/WindowConfirm.cpp @@ -64,10 +64,10 @@ void WindowConfirm::setTxtList(s32 index, const char16* message) { } void WindowConfirm::setListNum(s32 num) { - mSelectionType = (SelectionType)num; - if (num == SelectionType_List01) + mSelection.selectionType = (SelectionType)num; + if (num == (s32)SelectionType::List01) mCancelIdx = 1; - if (num == SelectionType_List02) + if (num == (s32)SelectionType::List02) mCancelIdx = 0; } @@ -78,25 +78,25 @@ void WindowConfirm::setCancelIdx(s32 index) { void WindowConfirm::appear() { if (isAlive()) return; - mSelectionIndex = 0; - mDirection = Direction_None; + mSelection.index = 0; + mDirection = Direction::None; startAction(this, "Appear", nullptr); - switch (mSelectionType) { - case SelectionType_HardKey: + switch (mSelection.selectionType) { + case SelectionType::HardKey: startAction(this, "SelectHardKey", "Select"); hidePane(this, "ParCursor"); hidePane(this, "ParHardKey"); break; - case SelectionType_List00: + case SelectionType::List00: startAction(this, "SelectHardKey", "Select"); startAction(mButtonActor, "Appear", nullptr); hidePane(this, "ParCursor"); showPane(this, "ParHardKey"); break; - case SelectionType_List01: + case SelectionType::List01: startAction(this, "Select2", "Select"); startAction(mCursorActor, "Appear", nullptr); startAction(mParListArray[0], "Select", nullptr); @@ -105,7 +105,7 @@ void WindowConfirm::appear() { showPane(this, "ParCursor"); hidePane(this, "ParHardKey"); break; - case SelectionType_List02: + case SelectionType::List02: startAction(this, "Select3", "Select"); startAction(mCursorActor, "Appear", nullptr); startAction(mParListArray[0], "Select", nullptr); @@ -127,15 +127,15 @@ void WindowConfirm::appearWithChoicingCancel() { return; appear(); - if (mSelectionType == SelectionType_List01) { - startAction(mParListArray[mSelectionIndex], "Wait", nullptr); + if (mSelection.selectionType == SelectionType::List01) { + startAction(mParListArray[(s32)mSelection.index], "Wait", nullptr); startAction(mParListArray[mCancelIdx], "Select", nullptr); - } else if (mSelectionType == SelectionType_List02) { - startAction(mParListArray[mSelectionIndex], "Wait", nullptr); + } else if (mSelection.selectionType == SelectionType::List02) { + startAction(mParListArray[(s32)mSelection.index], "Wait", nullptr); startAction(mParListArray[mCancelIdx], "Select", nullptr); } - mSelectionIndex = mCancelIdx; + mSelection.index = mCancelIdx; } bool WindowConfirm::isNerveEnd() { @@ -161,7 +161,7 @@ bool WindowConfirm::isEnableInput() { bool WindowConfirm::tryUp() { if (isEnableInput()) { - mDirection = Direction_Up; + mDirection = Direction::Up; return true; } return false; @@ -169,7 +169,7 @@ bool WindowConfirm::tryUp() { bool WindowConfirm::tryDown() { if (isEnableInput()) { - mDirection = Direction_Down; + mDirection = Direction::Down; return true; } return false; @@ -197,11 +197,12 @@ bool WindowConfirm::tryDecideWithoutEnd() { bool WindowConfirm::tryCancel() { if (!isEnableInput()) return false; - if ((mSelectionType == SelectionType_List01 || mSelectionType == SelectionType_List02) && - mSelectionIndex != mCancelIdx) { - startAction(mParListArray[mSelectionIndex], "Wait", nullptr); - startAction(mParListArray[mCancelIdx], "Select", nullptr); - mSelectionIndex = mCancelIdx; + if ((mSelection.selectionType == SelectionType::List01 || + mSelection.selectionType == SelectionType::List02) && + mSelection.index != mCancelIdx) { + startAction(mParListArray[(s32)mSelection.index], "Wait", nullptr); + startAction(mParListArray[(s32)mCancelIdx], "Select", nullptr); + mSelection.index = mCancelIdx; setCursorToPane(); } startHitReaction(this, "キャンセル", nullptr); @@ -211,20 +212,21 @@ bool WindowConfirm::tryCancel() { } void WindowConfirm::setCursorToPane() { - if (mSelectionType < SelectionType_List01) + if (mSelection.selectionType < SelectionType::List01) return; sead::Vector3f trans = {1.0f, 1.0f, 1.0f}; - calcPaneTrans(&trans, mParListArray[mSelectionIndex], "Cursor"); + calcPaneTrans(&trans, mParListArray[mSelection.index], "Cursor"); setPaneLocalTrans(this, "ParCursor", trans); } bool WindowConfirm::tryCancelWithoutEnd() { if (isEnableInput()) { - if ((mSelectionType == SelectionType_List01 || mSelectionType == SelectionType_List02) && - mSelectionIndex != mCancelIdx) { - startAction(mParListArray[mSelectionIndex], "Wait", nullptr); + if ((mSelection.selectionType == SelectionType::List01 || + mSelection.selectionType == SelectionType::List02) && + mSelection.index != mCancelIdx) { + startAction(mParListArray[(s32)mSelection.index], "Wait", nullptr); startAction(mParListArray[mCancelIdx], "Select", nullptr); - mSelectionIndex = mCancelIdx; + mSelection.index = mCancelIdx; setCursorToPane(); } mIsDecided = true; @@ -237,7 +239,8 @@ bool WindowConfirm::tryCancelWithoutEnd() { void WindowConfirm::exeHide() {} void WindowConfirm::exeAppear() { - if (mSelectionType == SelectionType_List01 || mSelectionType == SelectionType_List02) + if (mSelection.selectionType == SelectionType::List01 || + mSelection.selectionType == SelectionType::List02) setCursorToPane(); if (isActionEnd(this, nullptr)) setNerve(this, &NrvWindowConfirm.Wait); @@ -248,35 +251,36 @@ void WindowConfirm::exeWait() { startAction(this, "Wait", nullptr); mCooldown = -1; } - if (mSelectionType == SelectionType_List01 || mSelectionType == SelectionType_List02) { + if (mSelection.selectionType == SelectionType::List01 || + mSelection.selectionType == SelectionType::List02) { if (isActionPlaying(mCursorActor, "Appear", nullptr) && isActionEnd(mCursorActor, nullptr)) startAction(mCursorActor, "Wait", nullptr); } else { - if (mSelectionType == SelectionType_List00) + if (mSelection.selectionType == SelectionType::List00) if (isActionPlaying(mButtonActor, "Appear", nullptr) && isActionEnd(mButtonActor, nullptr)) startAction(mButtonActor, "Wait", nullptr); } - if (mDirection == Direction_Up) { - startAction(mParListArray[mSelectionIndex], "Wait", nullptr); - if (mSelectionIndex-- <= 0) - mSelectionIndex = mSelectionType - 1; + if (mDirection == Direction::Up) { + startAction(mParListArray[mSelection.index], "Wait", nullptr); + if (mSelection.index-- <= 0) + mSelection.index = (s32)mSelection.selectionType - 1; - startAction(mParListArray[mSelectionIndex], "Select", nullptr); + startAction(mParListArray[mSelection.index], "Select", nullptr); setCursorToPane(); } - if (mDirection == Direction_Down) { - startAction(mParListArray[mSelectionIndex], "Wait", nullptr); - mSelectionIndex++; - if (mSelectionIndex >= mSelectionType) - mSelectionIndex = 0; + if (mDirection == Direction::Down) { + startAction(mParListArray[mSelection.index], "Wait", nullptr); + mSelection.index++; + if (mSelection.index >= (s32)mSelection.selectionType) + mSelection.index = 0; - startAction(mParListArray[mSelectionIndex], "Select", nullptr); + startAction(mParListArray[mSelection.index], "Select", nullptr); setCursorToPane(); } - mDirection = Direction_None; + mDirection = Direction::None; if (mCooldown >= 0) mCooldown--; @@ -284,17 +288,17 @@ void WindowConfirm::exeWait() { void WindowConfirm::exeDecide() { if (isFirstStep(this)) { - if ((mSelectionType & 0xFFFFFFFE) == 2) { - startAction(mParListArray[mSelectionIndex], "Decide", nullptr); + if (((s32)mSelection.selectionType & 0xFFFFFFFE) == 2) { + startAction(mParListArray[mSelection.index], "Decide", nullptr); startAction(mCursorActor, "End", nullptr); - } else if ((mSelectionType & 0xFFFFFFFE) == 1) { + } else if (((s32)mSelection.selectionType & 0xFFFFFFFE) == 1) { startAction(mButtonActor, "PageEnd", nullptr); - } else if ((mSelectionType & 0xFFFFFFFE) == 0) { + } else if (((s32)mSelection.selectionType & 0xFFFFFFFE) == 0) { setNerve(this, &DecideAfter); } } - if ((mSelectionType & 0xFFFFFFFE) == 2) { - if (isActionEnd(mParListArray[mSelectionIndex], nullptr)) + if (((s32)mSelection.selectionType & 0xFFFFFFFE) == 2) { + if (isActionEnd(mParListArray[mSelection.index], nullptr)) setNerve(this, &DecideAfter); } else if (isActionEnd(mButtonActor, nullptr)) setNerve(this, &DecideAfter); diff --git a/lib/al/Library/Play/Layout/WindowConfirm.h b/lib/al/Library/Play/Layout/WindowConfirm.h index a27929f7..8254c5fb 100644 --- a/lib/al/Library/Play/Layout/WindowConfirm.h +++ b/lib/al/Library/Play/Layout/WindowConfirm.h @@ -25,7 +25,7 @@ public: struct Selection { SelectionType selectionType = SelectionType::None; - SelectionType prevSelectionType = SelectionType::None; + s32 index = -1; }; WindowConfirm(const LayoutInitInfo&, const char*, const char*); @@ -53,10 +53,10 @@ public: void exeDecideAfter(); void exeEnd(); - SelectionType getPrevSelectionType() { return mSelection.prevSelectionType; } + SelectionType getPrevSelectionType() { return (SelectionType)mSelection.index; } private: - Direction mDirection; + Direction mDirection = Direction::None; Selection mSelection; s32 mCancelIdx = -1; bool mIsDecided = false; From 8c2b5d96a7d060d2387c1a3f9e165139f38ccfba Mon Sep 17 00:00:00 2001 From: GRAnimated Date: Thu, 3 Apr 2025 14:16:30 -0400 Subject: [PATCH 3/7] Changes --- lib/al/Library/Play/Layout/WindowConfirm.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/lib/al/Library/Play/Layout/WindowConfirm.cpp b/lib/al/Library/Play/Layout/WindowConfirm.cpp index 3943194a..bc0c9150 100644 --- a/lib/al/Library/Play/Layout/WindowConfirm.cpp +++ b/lib/al/Library/Play/Layout/WindowConfirm.cpp @@ -64,11 +64,12 @@ void WindowConfirm::setTxtList(s32 index, const char16* message) { } void WindowConfirm::setListNum(s32 num) { - mSelection.selectionType = (SelectionType)num; - if (num == (s32)SelectionType::List01) - mCancelIdx = 1; - if (num == (s32)SelectionType::List02) - mCancelIdx = 0; + SelectionType selectionType = (SelectionType)num; + mSelection.selectionType = selectionType; + if (selectionType == SelectionType::List01) + setCancelIdx(1); + if (selectionType == SelectionType::List02) + setCancelIdx(0); } void WindowConfirm::setCancelIdx(s32 index) { @@ -78,6 +79,7 @@ void WindowConfirm::setCancelIdx(s32 index) { void WindowConfirm::appear() { if (isAlive()) return; + mSelection.index = 0; mDirection = Direction::None; @@ -125,13 +127,14 @@ void WindowConfirm::appear() { void WindowConfirm::appearWithChoicingCancel() { if (isAlive()) return; + appear(); if (mSelection.selectionType == SelectionType::List01) { - startAction(mParListArray[(s32)mSelection.index], "Wait", nullptr); + startAction(mParListArray[mSelection.index], "Wait", nullptr); startAction(mParListArray[mCancelIdx], "Select", nullptr); } else if (mSelection.selectionType == SelectionType::List02) { - startAction(mParListArray[(s32)mSelection.index], "Wait", nullptr); + startAction(mParListArray[mSelection.index], "Wait", nullptr); startAction(mParListArray[mCancelIdx], "Select", nullptr); } From ea820be6bd684bafb9f6b819ce05af15ce36a2f7 Mon Sep 17 00:00:00 2001 From: GRAnimated Date: Fri, 16 Jan 2026 17:29:32 -0500 Subject: [PATCH 4/7] Fix mismatches --- data/file_list.yml | 48 +++---- lib/NintendoSDK-NEX | 1 + lib/al/Library/Play/Layout/WindowConfirm.cpp | 143 +++++++++++-------- lib/al/Library/Play/Layout/WindowConfirm.h | 35 +++-- 4 files changed, 132 insertions(+), 95 deletions(-) create mode 160000 lib/NintendoSDK-NEX diff --git a/data/file_list.yml b/data/file_list.yml index 1365d94d..134d635a 100644 --- a/data/file_list.yml +++ b/data/file_list.yml @@ -272068,99 +272068,99 @@ Library/Play/Layout/WindowConfirm.o: - offset: 0x99ade0 size: 740 label: _ZN2al13WindowConfirmC2ERKNS_14LayoutInitInfoEPKcS5_ - status: NotDecompiled + status: Matching - offset: 0x99b0c4 size: 748 label: _ZN2al13WindowConfirmC1ERKNS_14LayoutInitInfoEPKcS5_ - status: NotDecompiled + status: Matching - offset: 0x99b3b0 size: 28 label: _ZN2al13WindowConfirm13setTxtMessageEPKDs - status: NotDecompiled + status: Matching - offset: 0x99b3cc size: 56 label: _ZN2al13WindowConfirm10setTxtListEiPKDs - status: NotDecompiled + status: Matching - offset: 0x99b404 size: 40 label: _ZN2al13WindowConfirm10setListNumEi - status: NotDecompiled + status: Matching - offset: 0x99b42c size: 8 label: _ZN2al13WindowConfirm12setCancelIdxEi - status: NotDecompiled + status: Matching - offset: 0x99b434 size: 652 label: _ZN2al13WindowConfirm6appearEv - status: NotDecompiled + status: Matching - offset: 0x99b6c0 size: 200 label: _ZN2al13WindowConfirm24appearWithChoicingCancelEv - status: NotDecompiled + status: Matching - offset: 0x99b788 size: 12 label: _ZN2al13WindowConfirm10isNerveEndEv - status: NotDecompiled + status: Matching - offset: 0x99b794 size: 120 label: _ZN2al13WindowConfirm6tryEndEv - status: NotDecompiled + status: Matching - offset: 0x99b80c size: 100 label: _ZN2al13WindowConfirm13isEnableInputEv - status: NotDecompiled + status: Matching - offset: 0x99b870 size: 104 label: _ZN2al13WindowConfirm5tryUpEv - status: NotDecompiled + status: Matching - offset: 0x99b8d8 size: 108 label: _ZN2al13WindowConfirm7tryDownEv - status: NotDecompiled + status: Matching - offset: 0x99b944 size: 144 label: _ZN2al13WindowConfirm9tryDecideEv - status: NotDecompiled + status: Matching - offset: 0x99b9d4 size: 128 label: _ZN2al13WindowConfirm19tryDecideWithoutEndEv - status: NotDecompiled + status: Matching - offset: 0x99ba54 size: 428 label: _ZN2al13WindowConfirm9tryCancelEv - status: NotDecompiled + status: Matching - offset: 0x99bc00 size: 148 label: _ZN2al13WindowConfirm15setCursorToPaneEv - status: NotDecompiled + status: Matching - offset: 0x99bc94 size: 412 label: _ZN2al13WindowConfirm19tryCancelWithoutEndEv - status: NotDecompiled + status: Matching - offset: 0x99be30 size: 4 label: _ZN2al13WindowConfirm7exeHideEv - status: NotDecompiled + status: Matching - offset: 0x99be34 size: 200 label: _ZN2al13WindowConfirm9exeAppearEv - status: NotDecompiled + status: Matching - offset: 0x99befc size: 816 label: _ZN2al13WindowConfirm7exeWaitEv - status: NotDecompiled + status: Matching - offset: 0x99c22c size: 304 label: _ZN2al13WindowConfirm9exeDecideEv - status: NotDecompiled + status: Matching - offset: 0x99c35c size: 16 label: _ZN2al13WindowConfirm14exeDecideAfterEv - status: NotDecompiled + status: Matching - offset: 0x99c36c size: 112 label: _ZN2al13WindowConfirm6exeEndEv - status: NotDecompiled + status: Matching - offset: 0x99c3dc size: 4 label: '' diff --git a/lib/NintendoSDK-NEX b/lib/NintendoSDK-NEX new file mode 160000 index 00000000..6da5b110 --- /dev/null +++ b/lib/NintendoSDK-NEX @@ -0,0 +1 @@ +Subproject commit 6da5b11082e0727719dd2d7164d2b2f420608099 diff --git a/lib/al/Library/Play/Layout/WindowConfirm.cpp b/lib/al/Library/Play/Layout/WindowConfirm.cpp index bc0c9150..8454b98a 100644 --- a/lib/al/Library/Play/Layout/WindowConfirm.cpp +++ b/lib/al/Library/Play/Layout/WindowConfirm.cpp @@ -25,7 +25,7 @@ namespace al { WindowConfirm::WindowConfirm(const LayoutInitInfo& info, const char* name, const char* actorName) : LayoutActor(actorName) { - initLayoutActor(this, info, name, nullptr); + initLayoutActor(this, info, name); s32 paneChildNum = getPaneChildNum(this, "All"); s32 i = 0; @@ -46,41 +46,40 @@ WindowConfirm::WindowConfirm(const LayoutInitInfo& info, const char* name, const if (isExistPane(this, "ParHardKey")) { mButtonActor = new LayoutActor("Aボタン"); - initLayoutPartsActor(mButtonActor, this, info, "ParHardKey", nullptr); + initLayoutPartsActor(mButtonActor, this, info, "ParHardKey"); } mCursorActor = new LayoutActor("カーソル"); - initLayoutPartsActor(mCursorActor, this, info, "ParCursor", nullptr); - - initNerve(&Hide, 0); + initLayoutPartsActor(mCursorActor, this, info, "ParCursor"); + initNerve(&Hide); } void WindowConfirm::setTxtMessage(const char16* message) { - setPaneString(this, "TxtMessage", message, 0); + setPaneString(this, "TxtMessage", message); } void WindowConfirm::setTxtList(s32 index, const char16* message) { - setPaneString(mParListArray.at(index), "TxtContent", message, 0); + setPaneString(mParListArray.at(index), "TxtContent", message); } void WindowConfirm::setListNum(s32 num) { SelectionType selectionType = (SelectionType)num; mSelection.selectionType = selectionType; if (selectionType == SelectionType::List01) - setCancelIdx(1); + setCancelIdx((s32)SelectionType::List00); if (selectionType == SelectionType::List02) - setCancelIdx(0); + setCancelIdx((s32)SelectionType::HardKey); } void WindowConfirm::setCancelIdx(s32 index) { - mCancelIdx = index; + mSelection.cancelType = (SelectionType)index; } void WindowConfirm::appear() { if (isAlive()) return; - mSelection.index = 0; + mSelection.prevSelectionType = SelectionType::HardKey; mDirection = Direction::None; startAction(this, "Appear", nullptr); @@ -101,8 +100,8 @@ void WindowConfirm::appear() { case SelectionType::List01: startAction(this, "Select2", "Select"); startAction(mCursorActor, "Appear", nullptr); - startAction(mParListArray[0], "Select", nullptr); - startAction(mParListArray[1], "Wait", nullptr); + startAction(mParListArray[(s32)SelectionType::HardKey], "Select", nullptr); + startAction(mParListArray[(s32)SelectionType::List00], "Wait", nullptr); showPane(this, "ParCursor"); hidePane(this, "ParHardKey"); @@ -110,9 +109,9 @@ void WindowConfirm::appear() { case SelectionType::List02: startAction(this, "Select3", "Select"); startAction(mCursorActor, "Appear", nullptr); - startAction(mParListArray[0], "Select", nullptr); - startAction(mParListArray[1], "Wait", nullptr); - startAction(mParListArray[2], "Wait", nullptr); + startAction(mParListArray[(s32)SelectionType::HardKey], "Select", nullptr); + startAction(mParListArray[(s32)SelectionType::List00], "Wait", nullptr); + startAction(mParListArray[(s32)SelectionType::List01], "Wait", nullptr); showPane(this, "ParCursor"); hidePane(this, "ParHardKey"); @@ -131,14 +130,14 @@ void WindowConfirm::appearWithChoicingCancel() { appear(); if (mSelection.selectionType == SelectionType::List01) { - startAction(mParListArray[mSelection.index], "Wait", nullptr); - startAction(mParListArray[mCancelIdx], "Select", nullptr); + startAction(mParListArray[getPrevSelectionIdx()], "Wait", nullptr); + startAction(mParListArray[getCancelIdx()], "Select", nullptr); } else if (mSelection.selectionType == SelectionType::List02) { - startAction(mParListArray[mSelection.index], "Wait", nullptr); - startAction(mParListArray[mCancelIdx], "Select", nullptr); + startAction(mParListArray[getPrevSelectionIdx()], "Wait", nullptr); + startAction(mParListArray[getCancelIdx()], "Select", nullptr); } - mSelection.index = mCancelIdx; + mSelection.prevSelectionType = mSelection.cancelType; } bool WindowConfirm::isNerveEnd() { @@ -190,7 +189,7 @@ bool WindowConfirm::tryDecide() { bool WindowConfirm::tryDecideWithoutEnd() { if (isEnableInput()) { - mIsDecided = false; + mIsDecided = true; setNerve(this, &NrvWindowConfirm.Decide); return true; } @@ -200,14 +199,16 @@ bool WindowConfirm::tryDecideWithoutEnd() { bool WindowConfirm::tryCancel() { if (!isEnableInput()) return false; + if ((mSelection.selectionType == SelectionType::List01 || mSelection.selectionType == SelectionType::List02) && - mSelection.index != mCancelIdx) { - startAction(mParListArray[(s32)mSelection.index], "Wait", nullptr); - startAction(mParListArray[(s32)mCancelIdx], "Select", nullptr); - mSelection.index = mCancelIdx; + mSelection.prevSelectionType != mSelection.cancelType) { + startAction(mParListArray[getPrevSelectionIdx()], "Wait", nullptr); + startAction(mParListArray[getCancelIdx()], "Select", nullptr); + mSelection.prevSelectionType = mSelection.cancelType; setCursorToPane(); } + startHitReaction(this, "キャンセル", nullptr); mIsDecided = false; setNerve(this, &NrvWindowConfirm.Decide); @@ -215,28 +216,28 @@ bool WindowConfirm::tryCancel() { } void WindowConfirm::setCursorToPane() { - if (mSelection.selectionType < SelectionType::List01) - return; - sead::Vector3f trans = {1.0f, 1.0f, 1.0f}; - calcPaneTrans(&trans, mParListArray[mSelection.index], "Cursor"); - setPaneLocalTrans(this, "ParCursor", trans); + if (mSelection.selectionType >= SelectionType::List01) { + sead::Vector3f trans = {1.0f, 1.0f, 1.0f}; + calcPaneTrans(&trans, mParListArray[getPrevSelectionIdx()], "Cursor"); + setPaneLocalTrans(this, "ParCursor", trans); + } } bool WindowConfirm::tryCancelWithoutEnd() { - if (isEnableInput()) { - if ((mSelection.selectionType == SelectionType::List01 || - mSelection.selectionType == SelectionType::List02) && - mSelection.index != mCancelIdx) { - startAction(mParListArray[(s32)mSelection.index], "Wait", nullptr); - startAction(mParListArray[mCancelIdx], "Select", nullptr); - mSelection.index = mCancelIdx; - setCursorToPane(); - } - mIsDecided = true; - setNerve(this, &NrvWindowConfirm.Decide); - return true; + if (!isEnableInput()) + return false; + + if ((mSelection.selectionType == SelectionType::List01 || + mSelection.selectionType == SelectionType::List02) && + mSelection.prevSelectionType != mSelection.cancelType) { + startAction(mParListArray[getPrevSelectionIdx()], "Wait", nullptr); + startAction(mParListArray[getCancelIdx()], "Select", nullptr); + mSelection.prevSelectionType = mSelection.cancelType; + setCursorToPane(); } - return false; + mIsDecided = true; + setNerve(this, &NrvWindowConfirm.Decide); + return true; } void WindowConfirm::exeHide() {} @@ -254,6 +255,7 @@ void WindowConfirm::exeWait() { startAction(this, "Wait", nullptr); mCooldown = -1; } + if (mSelection.selectionType == SelectionType::List01 || mSelection.selectionType == SelectionType::List02) { if (isActionPlaying(mCursorActor, "Appear", nullptr) && isActionEnd(mCursorActor, nullptr)) @@ -266,20 +268,19 @@ void WindowConfirm::exeWait() { } if (mDirection == Direction::Up) { - startAction(mParListArray[mSelection.index], "Wait", nullptr); - if (mSelection.index-- <= 0) - mSelection.index = (s32)mSelection.selectionType - 1; + startAction(mParListArray[getPrevSelectionIdx()], "Wait", nullptr); + if (updateSelectionIdx(Direction::Up) < SelectionType::HardKey) + mSelection.prevSelectionType = (SelectionType)((s32)mSelection.selectionType - 1); - startAction(mParListArray[mSelection.index], "Select", nullptr); + startAction(mParListArray[getPrevSelectionIdx()], "Select", nullptr); setCursorToPane(); } if (mDirection == Direction::Down) { - startAction(mParListArray[mSelection.index], "Wait", nullptr); - mSelection.index++; - if (mSelection.index >= (s32)mSelection.selectionType) - mSelection.index = 0; + startAction(mParListArray[getPrevSelectionIdx()], "Wait", nullptr); + if (updateSelectionIdx(Direction::Down) >= mSelection.selectionType) + mSelection.prevSelectionType = SelectionType::HardKey; - startAction(mParListArray[mSelection.index], "Select", nullptr); + startAction(mParListArray[getPrevSelectionIdx()], "Select", nullptr); setCursorToPane(); } @@ -291,20 +292,36 @@ void WindowConfirm::exeWait() { void WindowConfirm::exeDecide() { if (isFirstStep(this)) { - if (((s32)mSelection.selectionType & 0xFFFFFFFE) == 2) { - startAction(mParListArray[mSelection.index], "Decide", nullptr); - startAction(mCursorActor, "End", nullptr); - } else if (((s32)mSelection.selectionType & 0xFFFFFFFE) == 1) { - startAction(mButtonActor, "PageEnd", nullptr); - } else if (((s32)mSelection.selectionType & 0xFFFFFFFE) == 0) { + switch (mSelection.selectionType) { + case SelectionType::HardKey: setNerve(this, &DecideAfter); + return; + case SelectionType::List00: + startAction(mButtonActor, "PageEnd", nullptr); + break; + case SelectionType::List01: + case SelectionType::List02: + startAction(mParListArray[getPrevSelectionIdx()], "Decide", nullptr); + startAction(mCursorActor, "End", nullptr); + break; + default: + break; } } - if (((s32)mSelection.selectionType & 0xFFFFFFFE) == 2) { - if (isActionEnd(mParListArray[mSelection.index], nullptr)) + + switch (mSelection.selectionType) { + case SelectionType::List00: + if (isActionEnd(mButtonActor, nullptr)) setNerve(this, &DecideAfter); - } else if (isActionEnd(mButtonActor, nullptr)) - setNerve(this, &DecideAfter); + return; + case SelectionType::List01: + case SelectionType::List02: + if (isActionEnd(mParListArray[getPrevSelectionIdx()], nullptr)) + setNerve(this, &DecideAfter); + return; + default: + break; + } } void WindowConfirm::exeDecideAfter() { diff --git a/lib/al/Library/Play/Layout/WindowConfirm.h b/lib/al/Library/Play/Layout/WindowConfirm.h index 8254c5fb..d54977d4 100644 --- a/lib/al/Library/Play/Layout/WindowConfirm.h +++ b/lib/al/Library/Play/Layout/WindowConfirm.h @@ -25,15 +25,16 @@ public: struct Selection { SelectionType selectionType = SelectionType::None; - s32 index = -1; + SelectionType prevSelectionType = SelectionType::None; + SelectionType cancelType = SelectionType::None; }; - WindowConfirm(const LayoutInitInfo&, const char*, const char*); + WindowConfirm(const LayoutInitInfo& info, const char* name, const char* actorName); - void setTxtMessage(const char16*); - void setTxtList(s32, const char16*); - void setListNum(s32); - void setCancelIdx(s32); + void setTxtMessage(const char16* message); + void setTxtList(s32 index, const char16* message); + void setListNum(s32 num); + void setCancelIdx(s32 index); void appear() override; void appearWithChoicingCancel(); bool isNerveEnd(); @@ -46,6 +47,7 @@ public: bool tryCancel(); void setCursorToPane(); bool tryCancelWithoutEnd(); + void exeHide(); void exeAppear(); void exeWait(); @@ -53,12 +55,29 @@ public: void exeDecideAfter(); void exeEnd(); - SelectionType getPrevSelectionType() { return (SelectionType)mSelection.index; } + int getSelectionIdx() { return (s32)mSelection.prevSelectionType; } + + int getPrevSelectionIdx() { return (s32)mSelection.prevSelectionType; } + + int getCancelIdx() { return (s32)mSelection.cancelType; } + + SelectionType getSelectionType() { return mSelection.selectionType; } + + SelectionType getPrevSelectionType() { return mSelection.prevSelectionType; } + + SelectionType getCancelType() { return mSelection.cancelType; } + + SelectionType updateSelectionIdx(Direction dir) { + if (dir == Direction::Up) + mSelection.prevSelectionType = (SelectionType)((s32)mSelection.prevSelectionType - 1); + else if (dir == Direction::Down) + mSelection.prevSelectionType = (SelectionType)((s32)mSelection.prevSelectionType + 1); + return mSelection.prevSelectionType; + } private: Direction mDirection = Direction::None; Selection mSelection; - s32 mCancelIdx = -1; bool mIsDecided = false; s32 mCooldown = -1; sead::PtrArray mParListArray; From c3cffe1ab5a2fb9730a646c950fcba37a9bc2707 Mon Sep 17 00:00:00 2001 From: GRAnimated Date: Fri, 16 Jan 2026 17:30:35 -0500 Subject: [PATCH 5/7] Style checker --- lib/al/Library/Play/Layout/WindowConfirm.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/al/Library/Play/Layout/WindowConfirm.h b/lib/al/Library/Play/Layout/WindowConfirm.h index d54977d4..d3df4e12 100644 --- a/lib/al/Library/Play/Layout/WindowConfirm.h +++ b/lib/al/Library/Play/Layout/WindowConfirm.h @@ -55,11 +55,11 @@ public: void exeDecideAfter(); void exeEnd(); - int getSelectionIdx() { return (s32)mSelection.prevSelectionType; } + s32 getSelectionIdx() { return (s32)mSelection.prevSelectionType; } - int getPrevSelectionIdx() { return (s32)mSelection.prevSelectionType; } + s32 getPrevSelectionIdx() { return (s32)mSelection.prevSelectionType; } - int getCancelIdx() { return (s32)mSelection.cancelType; } + s32 getCancelIdx() { return (s32)mSelection.cancelType; } SelectionType getSelectionType() { return mSelection.selectionType; } From 4f3b2c93be159d673e64744162b469e1924e8f6d Mon Sep 17 00:00:00 2001 From: GRAnimated Date: Fri, 16 Jan 2026 17:40:02 -0500 Subject: [PATCH 6/7] Remove accidental submodule --- lib/NintendoSDK-NEX | 1 - 1 file changed, 1 deletion(-) delete mode 160000 lib/NintendoSDK-NEX diff --git a/lib/NintendoSDK-NEX b/lib/NintendoSDK-NEX deleted file mode 160000 index 6da5b110..00000000 --- a/lib/NintendoSDK-NEX +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 6da5b11082e0727719dd2d7164d2b2f420608099 From 5d13750aa38fa80078da3d2add48063ae2651697 Mon Sep 17 00:00:00 2001 From: GRAnimated Date: Mon, 23 Feb 2026 21:43:44 -0500 Subject: [PATCH 7/7] fix --- lib/NintendoSDK-NEX | 1 + lib/al/Library/Play/Layout/WindowConfirm.cpp | 7 +++---- 2 files changed, 4 insertions(+), 4 deletions(-) create mode 160000 lib/NintendoSDK-NEX diff --git a/lib/NintendoSDK-NEX b/lib/NintendoSDK-NEX new file mode 160000 index 00000000..462947c1 --- /dev/null +++ b/lib/NintendoSDK-NEX @@ -0,0 +1 @@ +Subproject commit 462947c1d88d365b1c2e2de6b5beb8ca78ab056a diff --git a/lib/al/Library/Play/Layout/WindowConfirm.cpp b/lib/al/Library/Play/Layout/WindowConfirm.cpp index 8454b98a..c8b68368 100644 --- a/lib/al/Library/Play/Layout/WindowConfirm.cpp +++ b/lib/al/Library/Play/Layout/WindowConfirm.cpp @@ -63,11 +63,10 @@ void WindowConfirm::setTxtList(s32 index, const char16* message) { } void WindowConfirm::setListNum(s32 num) { - SelectionType selectionType = (SelectionType)num; - mSelection.selectionType = selectionType; - if (selectionType == SelectionType::List01) + mSelection.selectionType = (SelectionType)num; + if (mSelection.selectionType == SelectionType::List01) setCancelIdx((s32)SelectionType::List00); - if (selectionType == SelectionType::List02) + if (mSelection.selectionType == SelectionType::List02) setCancelIdx((s32)SelectionType::HardKey); }