diff --git a/.github/workflows/multi-region-tests.yml b/.github/workflows/multi-region-tests.yml index 042fea45..20f4995f 100644 --- a/.github/workflows/multi-region-tests.yml +++ b/.github/workflows/multi-region-tests.yml @@ -2,7 +2,7 @@ name: Multi-Region Tests on: pull_request: - branches: [ master ] + branches: [ main ] jobs: build: diff --git a/CMakeLists.txt b/CMakeLists.txt index 155868de..29ac53a7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -64,7 +64,7 @@ include(cmake/relmapper.cmake) include(cmake/fonts.cmake) project(TPGZ - VERSION 1.0.0 + VERSION 1.1.0 DESCRIPTION "Twilight Princess speedrunning practice and testing tool" HOMEPAGE_URL "tpgz.io" LANGUAGES C CXX ASM) diff --git a/external/libtp_c/include/SSystem/SComponent/c_phase.h b/external/libtp_c/include/SSystem/SComponent/c_phase.h new file mode 100644 index 00000000..917f85ac --- /dev/null +++ b/external/libtp_c/include/SSystem/SComponent/c_phase.h @@ -0,0 +1,22 @@ +#ifndef C_PHASE_H +#define C_PHASE_H + +#include "../../dolphin/types.h" + +typedef int (*cPhs__Handler)(void*); + +enum cPhs__Step { + /* 0x0 */ cPhs_INIT_e, + /* 0x1 */ cPhs_LOADING_e, + /* 0x2 */ cPhs_NEXT_e, + /* 0x3 */ cPhs_UNK3_e, // appears to be an alternate error code, unsure how it differs + /* 0x4 */ cPhs_COMPLEATE_e, + /* 0x5 */ cPhs_ERROR_e, +}; + +typedef struct request_of_phase_process_class { + cPhs__Handler* mpHandlerTable; + int id; +} request_of_phase_process_class; + +#endif \ No newline at end of file diff --git a/external/libtp_c/include/d/meter/d_meter2_info.h b/external/libtp_c/include/d/meter/d_meter2_info.h index 1372d032..64f2a3de 100644 --- a/external/libtp_c/include/d/meter/d_meter2_info.h +++ b/external/libtp_c/include/d/meter/d_meter2_info.h @@ -25,6 +25,7 @@ class dMeter2Info_c { u8& getDirectUseItem() { return mDirectUseItem; } dMeterMap_c* getMeterMapClass() { return mMeterMap; } void offUseButton(int pButton) { mUseButton &= ~(u16)pButton; } + void offMenuInForce(int flag) { mMenuInForce &= ~(1 << flag); } /* 0x00 */ void* vtable; /* 0x04 */ u8 unk4[4]; @@ -56,7 +57,7 @@ class dMeter2Info_c { /* 0x90 */ u32 mTempBits; /* 0x94 */ s16 mMsgKeyWaitTimer; /* 0x96 */ u16 mHorseLifeCount; - /* 0x98 */ u16 unk152; + /* 0x98 */ u16 mMenuInForce; /* 0x9A */ u16 mHotSpringTimer[4]; /* 0xA2 */ u16 mSub2DStatus; /* 0xA4 */ u16 mFloatingFlowID; diff --git a/external/libtp_c/include/d/s/d_s_logo.h b/external/libtp_c/include/d/s/d_s_logo.h new file mode 100644 index 00000000..31b54458 --- /dev/null +++ b/external/libtp_c/include/d/s/d_s_logo.h @@ -0,0 +1,122 @@ +#ifndef D_D_S_LOGO_H +#define D_D_S_LOGO_H + +#include "../../f_op/f_op_scene.h" + +class mDoDvdThd_mountXArchive_c; +class mDoDvdThd_toMainRam_c; +class dDlst_2D_c; +class ResTIMG; +class JKRExpHeap; +class JKRHeap; + +class dScnLogo_c : public scene_class { +public: + enum { + /* 0x0 */ EXEC_WARNING_IN, + /* 0x1 */ EXEC_WARNING_DISP, + /* 0x2 */ EXEC_WARNING_OUT, + /* 0x3 */ EXEC_NINTENDO_IN, + /* 0x4 */ EXEC_NINTENDO_OUT, + /* 0x5 */ EXEC_DOLBY_IN, + /* 0x6 */ EXEC_DOLBY_OUT, + /* 0x7 */ EXEC_DOLBY_OUT2, + /* 0x8 */ EXEC_PROG_IN, + /* 0x9 */ EXEC_PROG_SEL, + /* 0xA */ EXEC_PROG_OUT, + /* 0xB */ EXEC_PROG_SET, + /* 0xC */ EXEC_PROG_SET2, + /* 0xD */ EXEC_PROG_CHANGE, + /* 0xE */ EXEC_DVD_WAIT, + /* 0xF */ EXEC_SCENE_CHANGE, + }; + + dScnLogo_c() {} + /* 802560B4 */ void preLoad_dyl_create(); + /* 802560F8 */ void preLoad_dyl_remove(); + /* 8025611C */ bool preLoad_dyl(); + /* 80256198 */ void checkProgSelect(); + /* 80256210 */ int draw(); + /* 80256264 */ void progInDraw(); + /* 8025631C */ void progSelDraw(); + /* 802568E0 */ void progOutDraw(); + /* 80256A3C */ void progSetDraw(); + /* 80256AC0 */ void progSet2Draw(); + /* 80256B3C */ void progChangeDraw(); + /* 80256BF4 */ void warningInDraw(); + /* 80256C68 */ void warningDispDraw(); + /* 80256DC4 */ void warningOutDraw(); + /* 80256E48 */ void nintendoInDraw(); + /* 80256ECC */ void nintendoOutDraw(); + /* 80256F50 */ void dolbyInDraw(); + /* 80256FD4 */ void dolbyOutDraw(); + /* 80257058 */ void dolbyOutDraw2(); + /* 80257070 */ void dvdWaitDraw(); + /* 80257284 */ void nextSceneChange(); + /* 802572B8 */ ~dScnLogo_c(); + /* 80257AE0 */ int create(); + /* 80257C64 */ void logoInitGC(); + /* 80257FEC */ void dvdDataLoad(); + /* 802584D8 */ void setProgressiveMode(u8); + /* 802584FC */ u8 getProgressiveMode(); + /* 80258520 */ bool isProgressiveMode(); + /* 8025854C */ void setRenderMode(); + +public: + /* 0x1C4 */ request_of_phase_process_class field_0x1c4; + /* 0x1CC */ mDoDvdThd_toMainRam_c* sceneCommand; + /* 0x1D0 */ JKRExpHeap* field_0x1d0; + /* 0x1D4 */ JKRExpHeap* field_0x1d4; + /* 0x1D8 */ JKRHeap* mpHeap; + /* 0x1DC */ dDlst_2D_c* mWarning; + /* 0x1E0 */ dDlst_2D_c* mWarningStart; + /* 0x1E4 */ dDlst_2D_c* mNintendoLogo; + /* 0x1E8 */ dDlst_2D_c* mDolbyLogo; + /* 0x1EC */ dDlst_2D_c* mProgressiveChoice; + /* 0x1F0 */ dDlst_2D_c* mProgressiveYes; + /* 0x1F4 */ dDlst_2D_c* mProgressiveNo; + /* 0x1F8 */ dDlst_2D_c* mProgressiveSel; + /* 0x1FC */ request_of_phase_process_class* m_preLoad_dylPhase; + /* 0x200 */ ResTIMG* mProgressivePro; + /* 0x204 */ ResTIMG* mProgressiveInter; + /* 0x208 */ u8 mExecCommand; + /* 0x209 */ u8 field_0x209; + /* 0x20A */ u8 field_0x20a; + /* 0x20B */ u8 field_0x20b; + /* 0x20C */ u16 mTimer; + /* 0x20E */ u16 field_0x20e; + /* 0x210 */ u16 field_0x210; + /* 0x212 */ u16 field_0x212; + /* 0x214 */ u16 field_0x214; + /* 0x218 */ u32 field_0x218; + /* 0x21C */ void* buffer; + /* 0x220 */ mDoDvdThd_mountXArchive_c* mpField0Command; + /* 0x224 */ mDoDvdThd_mountXArchive_c* mpAlAnmCommand; + /* 0x228 */ u8 field_0x228[4]; + /* 0x22C */ mDoDvdThd_mountXArchive_c* mpFmapResCommand; + /* 0x230 */ mDoDvdThd_mountXArchive_c* mpDmapResCommand; + /* 0x234 */ mDoDvdThd_mountXArchive_c* mpCollectResCommand; + /* 0x238 */ u8 field_0x238[4]; + /* 0x23C */ mDoDvdThd_mountXArchive_c* mpItemIconCommand; + /* 0x240 */ mDoDvdThd_mountXArchive_c* mpRingResCommand; + /* 0x244 */ u8 field_0x244[4]; + /* 0x248 */ mDoDvdThd_mountXArchive_c* mpPlayerNameCommand; + /* 0x24C */ mDoDvdThd_mountXArchive_c* mpItemInfResCommand; + /* 0x250 */ mDoDvdThd_mountXArchive_c* mpButtonCommand; + /* 0x254 */ u8 field_0x254[4]; + /* 0x258 */ mDoDvdThd_mountXArchive_c* mpCardIconCommand; + /* 0x25C */ mDoDvdThd_mountXArchive_c* mpBmgResCommand; + /* 0x260 */ mDoDvdThd_mountXArchive_c* mpMsgComCommand; + /* 0x264 */ mDoDvdThd_mountXArchive_c* mpMsgResCommand[7]; + /* 0x280 */ u8 field_0x280[0x10]; + /* 0x290 */ mDoDvdThd_mountXArchive_c* mpFontResCommand; + /* 0x294 */ mDoDvdThd_mountXArchive_c* mpMain2DCommand; + /* 0x298 */ mDoDvdThd_mountXArchive_c* mpRubyResCommand; + /* 0x29C */ mDoDvdThd_toMainRam_c* mParticleCommand; + /* 0x2A0 */ mDoDvdThd_toMainRam_c* mItemTableCommand; + /* 0x2A4 */ mDoDvdThd_toMainRam_c* mEnemyItemCommand; +}; + +LIBTP_DEFINE_FUNC(warningInDraw__10dScnLogo_cFv, dScnLogo_c__warningInDraw_void_, void, dScnLogo_c__warningInDraw, (dScnLogo_c*)); + +#endif \ No newline at end of file diff --git a/external/libtp_c/include/f_op/f_op_scene.h b/external/libtp_c/include/f_op/f_op_scene.h new file mode 100644 index 00000000..eda0a9a6 --- /dev/null +++ b/external/libtp_c/include/f_op/f_op_scene.h @@ -0,0 +1,22 @@ +#ifndef F_F_OP_SCENE_H_ +#define F_F_OP_SCENE_H_ + +#include "../f_op/f_op_scene_tag.h" + +struct request_of_phase_process_class; +class mDoDvdThd_command_c; + +typedef struct scene_process_profile_definition { + /* 0x00 */ node_process_profile_definition mBase; + /* 0x20 */ process_method_class* mpMtd; // Subclass methods + /* 0x24 */ u32 field_0x24; // padding? +} scene_process_profile_definition; + +class scene_class { +public: + /* 0x000 */ process_node_class mBase; + /* 0x1AC */ process_method_class * mpMtd; + /* 0x1B0 */ scene_tag_class mScnTg; +}; + +#endif \ No newline at end of file diff --git a/external/libtp_c/include/f_op/f_op_scene_tag.h b/external/libtp_c/include/f_op/f_op_scene_tag.h new file mode 100644 index 00000000..d99b933c --- /dev/null +++ b/external/libtp_c/include/f_op/f_op_scene_tag.h @@ -0,0 +1,12 @@ +#ifndef F_OP_SCENE_TAG_H +#define F_OP_SCENE_TAG_H + +#include "../f_pc/f_pc_node.h" +#include "../SSystem/SComponent/c_phase.h" + +class scene_tag_class { +public: + u8 field_0x00[0x14]; +}; + +#endif \ No newline at end of file diff --git a/external/libtp_c/include/f_pc/f_pc_node.h b/external/libtp_c/include/f_pc/f_pc_node.h new file mode 100644 index 00000000..82d28495 --- /dev/null +++ b/external/libtp_c/include/f_pc/f_pc_node.h @@ -0,0 +1,19 @@ +#ifndef F_PC_NODE_H_ +#define F_PC_NODE_H_ + +#include "../f_pc/f_pc_base.h" + +typedef struct process_node_class { + /* 0x00 */ base_process_class mBase; + /* 0xB8 */ nodedraw_method_class* mpNodeMtd; + /* 0xBC */ layer_class mLayer; + /* 0xE8 */ node_list_class mLayerNodeLists[16]; + /* 0x1A8 */ s8 mUnk0; +} process_node_class; + +typedef struct node_process_profile_definition { + /* 0x00 */ process_profile_definition mBase; + /* 0x1C */ process_method_class* sub_method; // Subclass methods +} node_process_profile_definition; + +#endif \ No newline at end of file diff --git a/modules/boot/include/menus/menu.h b/modules/boot/include/menus/menu.h index f7e872a4..4b57fa3e 100644 --- a/modules/boot/include/menus/menu.h +++ b/modules/boot/include/menus/menu.h @@ -66,6 +66,9 @@ enum MenuIndex { MN_CREDITS_INDEX, MN_COMBO_INDEX, + // Tools menu's sub menus + MN_CHECKERS_INDEX, + // This entry is used only to get a count of the number of valid entries. MN_COUNT }; diff --git a/modules/boot/include/tools.h b/modules/boot/include/tools.h index d4333a50..e6d1d35f 100644 --- a/modules/boot/include/tools.h +++ b/modules/boot/include/tools.h @@ -1,22 +1,15 @@ #pragma once enum ToolsIndex { + CHECKERS_INDEX, RELOAD_AREA_INDEX, FRAME_ADVANCE_INDEX, FAST_BONK_INDEX, FAST_MOVEMENT_INDEX, - GORGE_INDEX, -#ifdef WII_PLATFORM - BIT_INDEX, -#endif - COROTD_INDEX, - UMD_INDEX, INPUT_VIEWER_INDEX, LINK_DEBUG_INDEX, HEAP_DEBUG_INDEX, SAND_INDEX, - ROLL_INDEX, - MASH_CHECKER_INDEX, TELEPORT_INDEX, TURBO_MODE_INDEX, TIMER_INDEX, diff --git a/modules/boot/src/menus/menu.cpp b/modules/boot/src/menus/menu.cpp index 0dcde5ed..870c5b2e 100644 --- a/modules/boot/src/menus/menu.cpp +++ b/modules/boot/src/menus/menu.cpp @@ -3,18 +3,18 @@ // This array must correspond to the order of the MenuIndex enum. const char* g_menuPaths[MN_COUNT] = { - "main", "cheats", "flags", - "inventory", "memory", "practice", - "scene", "settings", "tools", - "warp", "general_flags", "dungeon_flags", - "portal_flags", "flag_records", "flag_log", - "item_wheel", "pause", "amounts", - "watches", "memory_editor", "memfiles", - "any_saves", "any_bite_saves", "hundo_saves", - "ad_saves", "nosq_saves", "glitchless_saves", - "actor_spawn", "actor_list", "collision_view", - "projection_view", "trigger_view", "pos_settings", - "credits", "combo" + "main", "cheats", "flags", + "inventory", "memory", "practice", + "scene", "settings", "tools", + "warp", "general_flags", "dungeon_flags", + "portal_flags", "flag_records", "flag_log", + "item_wheel", "pause", "amounts", + "watches", "memory_editor", "memfiles", + "any_saves", "any_bite_saves", "hundo_saves", + "ad_saves", "nosq_saves", "glitchless_saves", + "actor_spawn", "actor_list", "collision_view", + "projection_view", "trigger_view", "pos_settings", + "credits", "combo", "checkers" }; KEEP_FUNC Menu::Menu(Cursor& cursor) : cursor(cursor) {} \ No newline at end of file diff --git a/modules/boot/src/utils/hook.cpp b/modules/boot/src/utils/hook.cpp index 397ac53b..f3d9f4c7 100644 --- a/modules/boot/src/utils/hook.cpp +++ b/modules/boot/src/utils/hook.cpp @@ -18,6 +18,7 @@ #include "collision_view.h" #include "features/projection_view/include/projection_view.h" #include "libtp_c/include/m_Do/m_Do_printf.h" +#include "libtp_c/include/d/s/d_s_logo.h" #define HOOK_DEF(rettype, name, params) \ typedef rettype(*tp_##name##_t) params; \ @@ -51,10 +52,11 @@ HOOK_DEF(void, dCcS__draw, (dCcS*)); HOOK_DEF(void, BeforeOfPaint, (void)); HOOK_DEF(void, dCcS__MoveAfterCheck, (dCcS*)); - HOOK_DEF(int, dScnPly__phase_1, (void*)); HOOK_DEF(int, dScnPly__phase_4, (void*)); +HOOK_DEF(void, dScnLogo_c__warningInDraw, (dScnLogo_c*)); + HOOK_DEF(void, dBgS_Acch__CrrPos, (dBgS_Acch*, dBgS&)); HOOK_DEF(void, daAlink_c__setCutJumpSpeed, (daAlink_c*, int)); HOOK_DEF(void, daAlink_c__posMove, (daAlink_c*)); @@ -72,11 +74,32 @@ void drawHook(void* p1) { } #ifdef PR_TEST +#ifdef GCN_NTSCU +#define CRASH_ADDRESS (0x80450580) +#endif +#ifdef GCN_PAL +#define CRASH_ADDRESS (0x80452540) +#endif +#ifdef GCN_NTSCJ +#define CRASH_ADDRESS (0x8044A6C0) +#endif +#ifdef WII_NTSCU_10 +#define CRASH_ADDRESS (0x80537560) +#endif +#ifdef WII_NTSCU_12 +#define CRASH_ADDRESS (0x8051d5e0) +#endif +#ifdef WII_NTSCJ +#define CRASH_ADDRESS (0x8051b460) +#endif +#ifdef WII_PAL +#define CRASH_ADDRESS (0x8051DEE0) +#endif void myExceptionCallbackHook(void) { ExceptionCallbackTrampoline(); - gzCrashAddr = 1; - DCFlushRange((void*)(&gzCrashAddr), sizeof(gzCrashAddr)); - ICInvalidateRange((void*)(&gzCrashAddr), sizeof(gzCrashAddr)); + *reinterpret_cast(CRASH_ADDRESS) = 1; + DCFlushRange((void*)(CRASH_ADDRESS), sizeof(CRASH_ADDRESS)); + ICInvalidateRange((void*)(CRASH_ADDRESS), sizeof(CRASH_ADDRESS)); } #endif // PR_TEST @@ -228,6 +251,11 @@ void daAlink_c__setCutJumpSpeedHook(daAlink_c* i_this, int i_air) { daAlink_c__setCutJumpSpeedTrampoline(i_this, i_air); } +// WIP skipping intro logos +void dScnLogo_c__warningInDraw(dScnLogo_c* i_this) { + i_this->mExecCommand = dScnLogo_c::EXEC_DVD_WAIT; +} + void setupLJAProjectionLine(daAlink_c* i_this) { bool got_it = false; @@ -392,6 +420,7 @@ void daAlink_c__posMoveHook(daAlink_c* i_this) { #define f_myExceptionCallback myExceptionCallback_unsigned #define f_dScnPly__phase_1 phase_1_dScnPly_c___ #define f_dScnPly__phase_4 phase_4_dScnPly_c___ +#define f_dScnLogo_c__warningInDraw dScnLogo_c__warningInDraw_void_ #define f_dCcS__Draw dCcS__Draw_void_ #define f_dScnPly_BeforeOfPaint mDoGph_BeforeOfDraw_void_ #define f_dCcS__MoveAfterCheck dCcS__MoveAfterCheck_void_ @@ -412,6 +441,7 @@ void daAlink_c__posMoveHook(daAlink_c* i_this) { #define f_myExceptionCallback myExceptionCallback__FUsP9OSContextUlUl #define f_dScnPly__phase_1 phase_1__FP9dScnPly_c #define f_dScnPly__phase_4 phase_4__FP9dScnPly_c +#define f_dScnLogo_c__warningInDraw warningInDraw__10dScnLogo_cFv #define f_dCcS__Draw Draw__4dCcSFv #define f_dScnPly_BeforeOfPaint dScnPly_BeforeOfPaint__Fv #define f_dCcS__MoveAfterCheck MoveAfterCheck__4dCcSFv @@ -435,6 +465,7 @@ void f_putSave(void*, int); void f_myExceptionCallback(); int f_dScnPly__phase_1(void*); int f_dScnPly__phase_4(void*); +void f_dScnLogo_c__warningInDraw(dScnLogo_c*); void f_dCcS__Draw(dCcS*); void f_dScnPly_BeforeOfPaint(); void f_dCcS__MoveAfterCheck(dCcS*); @@ -459,6 +490,7 @@ KEEP_FUNC void applyHooks() { APPLY_HOOK(putSave, &f_putSave, putSaveHook); APPLY_HOOK(dScnPly__phase_1, &f_dScnPly__phase_1, saveInjectHook); APPLY_HOOK(dScnPly__phase_4, &f_dScnPly__phase_4, endSaveInjectHook); + APPLY_HOOK(dScnLogo_c__warningInDraw, &f_dScnLogo_c__warningInDraw, dScnLogo_c__warningInDraw); APPLY_HOOK(dCcS__draw, &f_dCcS__Draw, dCcSDrawHook); APPLY_HOOK(BeforeOfPaint, &f_dScnPly_BeforeOfPaint, beforeOfPaintHook); diff --git a/modules/menus/menu_actor_list/include/actor_list_menu.h b/modules/menus/menu_actor_list/include/actor_list_menu.h index 57c94b60..c707a7fd 100644 --- a/modules/menus/menu_actor_list/include/actor_list_menu.h +++ b/modules/menus/menu_actor_list/include/actor_list_menu.h @@ -22,6 +22,7 @@ enum { ACTOR_ANGLE_X_INDEX, ACTOR_ANGLE_Y_INDEX, ACTOR_ANGLE_Z_INDEX, + ACTOR_PROC_INDEX, ACTOR_PARAMS_INDEX, ACTOR_LIST_LINE_COUNT, @@ -36,7 +37,7 @@ class ActorListMenu : public Menu { private: void updateActorData(); template - void updateValue(T* value, f32 smallChange, f32 largeChange, bool increase, bool largeIncrement); + void updateValue(T*, bool); void loadActorName(); void checkAndCloseMenu(); void checkAndRestoreMenu(); diff --git a/modules/menus/menu_actor_list/src/actor_list_menu.cpp b/modules/menus/menu_actor_list/src/actor_list_menu.cpp index bf506391..b47d99db 100644 --- a/modules/menus/menu_actor_list/src/actor_list_menu.cpp +++ b/modules/menus/menu_actor_list/src/actor_list_menu.cpp @@ -19,20 +19,26 @@ #ifdef GCN_PLATFORM #define CONTROLLER_RIGHT GZPad::DPAD_RIGHT #define CONTROLLER_LEFT GZPad::DPAD_LEFT -#define CONTROLLER_Z GZPad::Z #define CONTROLLER_A GZPad::A -#define MEM_SWITCH_BTN GZPad::Y -#define CONTROL_TEXT "Y" +#define MEM_SWITCH_BTN GZPad::Z +#define SLOW_INC_BTN GZPad::X +#define FAST_INC_BTN GZPad::Y +#define MEM_TEXT "Z" +#define SLOW_INC_TEXT "X" +#define FAST_INC_TEXT "Y" #define DELETE_TEXT "START" #define DELETE_BUTTON GZPad::START #endif #ifdef WII_PLATFORM #define CONTROLLER_RIGHT GZPad::DPAD_RIGHT #define CONTROLLER_LEFT GZPad::DPAD_LEFT -#define CONTROLLER_Z GZPad::Z #define CONTROLLER_A GZPad::A -#define MEM_SWITCH_BTN GZPad::C -#define CONTROL_TEXT "C" +#define MEM_SWITCH_BTN GZPad::ONE +#define SLOW_INC_BTN GZPad::Z +#define FAST_INC_BTN GZPad::C +#define MEM_TEXT "1" +#define SLOW_INC_TEXT "Z" +#define FAST_INC_TEXT "C" #define DELETE_TEXT "PLUS" #define DELETE_BUTTON GZPad::PLUS #endif @@ -42,99 +48,12 @@ */ procBinData l_procData; -void ring_close_proc_wrapper(void* arg) { - dMw_c__ring_close_proc(arg); -} - -void collect_close_proc_wrapper(void* arg) { - dMw_c__collect_close_proc(arg); -} - -void dmap_close_proc_wrapper(void* arg) { - dMw_c__dmap_close_proc(arg); -} - -void fmap_close_proc_wrapper(void* arg) { - dMw_c__fmap_close_proc(arg); -} - -void collect_save_close_proc_wrapper(void* arg) { - dMw_c__collect_save_close_proc(arg); -} - -void collect_option_close_proc_wrapper(void* arg) { - dMw_c__collect_option_close_proc(arg); -} - -void collect_letter_close_proc_wrapper(void* arg) { - dMw_c__collect_letter_close_proc(arg); -} - -void collect_fishing_close_proc_wrapper(void* arg) { - dMw_c__collect_fishing_close_proc(arg); -} - -void collect_skill_close_proc_wrapper(void* arg) { - dMw_c__collect_skill_close_proc(arg); -} - -void collect_insect_close_proc_wrapper(void* arg) { - dMw_c__collect_insect_close_proc(arg); -} - -void insect_close_proc_wrapper(void* arg) { - dMw_c__insect_close_proc(arg); -} - -typedef void (*procFunc)(void*); -procFunc move_proc[] = { - NULL, - NULL, - ring_close_proc_wrapper, - NULL, - NULL, - collect_close_proc_wrapper, - NULL, - NULL, - fmap_close_proc_wrapper, - NULL, - NULL, - dmap_close_proc_wrapper, - NULL, - NULL, - collect_save_close_proc_wrapper, - NULL, - NULL, - collect_option_close_proc_wrapper, - NULL, - NULL, - collect_letter_close_proc_wrapper, - NULL, - NULL, - collect_fishing_close_proc_wrapper, - NULL, - NULL, - collect_skill_close_proc_wrapper, - NULL, - NULL, - collect_insect_close_proc_wrapper, - NULL, - NULL, - NULL, - insect_close_proc_wrapper -}; - /** * @brief Checks and closes any menu that's currently open. * * @details This function is used to close any menu that's currently open. * It stores the current menu status and then closes the menu by setting the status to none and running the currently open menu's closer function via move_proc function table. * - * @note Currently the function won't catch if the menu status is in opening or closing status (two statuses during menu transitions). It will only catch the "move" status. - * We may have to account for this later. - * - * @note The move_proc function table already exists in code. We can probably just map directly to it in the future instead of defining our own. - * */ void ActorListMenu::checkAndCloseMenu() { if (g_meter2_info.mMenuWindowClass) { @@ -142,22 +61,14 @@ void ActorListMenu::checkAndCloseMenu() { case dMw_c::NO_MENU: g_dComIfG_gameInfo.play.mPauseFlag = false; break; - case dMw_c::RING_MOVE: - case dMw_c::COLLECT_MOVE: - case dMw_c::DMAP_MOVE: - case dMw_c::FMAP_MOVE: - case dMw_c::SAVE_MOVE: - case dMw_c::OPTIONS_MOVE: - case dMw_c::LETTER_MOVE: - case dMw_c::FISHING_MOVE: - case dMw_c::SKILL_MOVE: - case dMw_c::INSECT_MOVE: - case dMw_c::INSECT_AGITHA_MOVE: + default: l_menuStatus = g_meter2_info.mMenuWindowClass->mMenuStatus; l_windowStatus = g_meter2_info.mWindowStatus; + g_meter2_info.offMenuInForce(g_meter2_info.mMenuWindowClass->mMenuStatus); + g_meter2_info.mMenuWindowClass->mMenuStatus = dMw_c::NO_MENU; g_meter2_info.mWindowStatus = dMw_c::NO_MENU; - move_proc[g_meter2_info.mMenuWindowClass->mMenuStatus](g_meter2_info.mMenuWindowClass); g_dComIfG_gameInfo.play.mPauseFlag = false; + break; } } } @@ -175,23 +86,8 @@ void ActorListMenu::checkAndCloseMenu() { void ActorListMenu::checkAndRestoreMenu() { if (l_menuStatus != dMw_c::NO_MENU) { g_dComIfG_gameInfo.play.mPauseFlag = true; - - switch (l_menuStatus) { - case dMw_c::RING_MOVE: - case dMw_c::COLLECT_MOVE: - case dMw_c::FMAP_MOVE: - case dMw_c::SAVE_MOVE: - case dMw_c::OPTIONS_MOVE: - case dMw_c::LETTER_MOVE: - case dMw_c::FISHING_MOVE: - case dMw_c::SKILL_MOVE: - case dMw_c::INSECT_MOVE: - case dMw_c::INSECT_AGITHA_MOVE: - case dMw_c::DMAP_MOVE: - g_meter2_info.mWindowStatus = l_windowStatus; - g_meter2_info.mMenuWindowClass->mMenuStatus = l_menuStatus; - break; - } + g_meter2_info.mWindowStatus = l_windowStatus; + g_meter2_info.mMenuWindowClass->mMenuStatus = l_menuStatus; } } @@ -199,13 +95,14 @@ KEEP_FUNC ActorListMenu::ActorListMenu(Cursor& cursor, ActorListData& data) : Menu(cursor), l_index(data.l_index), lines{ - {"", ACTOR_NAME_INDEX, "Z+A: freeze actor, Z+" DELETE_TEXT ": delete actor, " CONTROL_TEXT " view memory", false}, - {"", ACTOR_POSITION_X_INDEX, "dpad: +/-10.0, Z+dpad: +/-100.0", false}, - {"", ACTOR_POSITION_Y_INDEX, "dpad: +/-10.0, Z+dpad: +/-100.0", false}, - {"", ACTOR_POSITION_Z_INDEX, "dpad: +/-10.0, Z+dpad: +/-100.0", false}, - {"", ACTOR_ANGLE_X_INDEX, "dpad: +/-10, Z+dpad: +/-100", false}, - {"", ACTOR_ANGLE_Y_INDEX, "dpad: +/-10, Z+dpad: +/-100", false}, - {"", ACTOR_ANGLE_Z_INDEX, "dpad: +/-10, Z+dpad: +/-100", false}, + {"", ACTOR_NAME_INDEX, "Z+A: freeze actor, Z+" DELETE_TEXT ": delete actor, " MEM_TEXT " view memory", false}, + {"", ACTOR_POSITION_X_INDEX, "dpad: +/-100.0, " SLOW_INC_TEXT "+dpad: +/-1.0, " FAST_INC_TEXT "+dpad: +/-1000.0", false}, + {"", ACTOR_POSITION_Y_INDEX, "dpad: +/-100.0, " SLOW_INC_TEXT "+dpad: +/-1.0, " FAST_INC_TEXT "+dpad: +/-1000.0", false}, + {"", ACTOR_POSITION_Z_INDEX, "dpad: +/-100.0, " SLOW_INC_TEXT "+dpad: +/-1.0, " FAST_INC_TEXT "+dpad: +/-1000.0", false}, + {"", ACTOR_ANGLE_X_INDEX, "dpad: +/-100, " SLOW_INC_TEXT "+dpad: +/-1, " FAST_INC_TEXT "+dpad: +/-1000", false}, + {"", ACTOR_ANGLE_Y_INDEX, "dpad: +/-100, " SLOW_INC_TEXT "+dpad: +/-1, " FAST_INC_TEXT "+dpad: +/-1000", false}, + {"", ACTOR_ANGLE_Z_INDEX, "dpad: +/-100, " SLOW_INC_TEXT "+dpad: +/-1, " FAST_INC_TEXT "+dpad: +/-1000", false}, + {"", ACTOR_PROC_INDEX, "current actor proc id", false}, {"", ACTOR_PARAMS_INDEX, "current actor parameters", false}, } { // store camera position and target @@ -228,15 +125,18 @@ ActorListMenu::~ActorListMenu() { matrixInfo.matrix_info->pos = l_cameraPos; matrixInfo.matrix_info->target = l_cameraTarget; + // restore evt manager camera play & HUD dComIfGp_getEventManager().mCameraPlay = 0; g_drawHIO.mHUDAlpha = 1.0f; - } template -void ActorListMenu::updateValue(T* value, f32 smallChange, f32 largeChange, bool increase, bool largeIncrement) { +void ActorListMenu::updateValue(T* value, bool increase) { if (value != NULL) { - *value += (increase ? 1 : -1) * (largeIncrement ? largeChange : smallChange); + f32 change; + GZ_getButtonPressed(FAST_INC_BTN) ? change = 1000.0f : GZ_getButtonPressed(SLOW_INC_BTN) ? change = 1.0f : change = 100.0f; + + *value += (increase ? 1 : -1) * change; } } @@ -277,10 +177,7 @@ void ActorListMenu::draw() { bool rightPressed = GZ_getButtonRepeat(CONTROLLER_RIGHT,1); bool leftPressed = GZ_getButtonRepeat(CONTROLLER_LEFT,1); - bool zPressed = GZ_getButtonPressed(CONTROLLER_Z); - - f32 smallPosChange = 10.0f, largePosChange = 100.0f; - int smallAngleChange = 100, largeAngleChange = 1000; + switch (cursor.y) { case ACTOR_NAME_INDEX: @@ -302,7 +199,7 @@ void ActorListMenu::draw() { loadActorName(); } - if (GZ_getButtonPressed(CONTROLLER_Z) && GZ_getButtonPressed(DELETE_BUTTON)) { + if (GZ_getButtonPressed(MEM_SWITCH_BTN) && GZ_getButtonPressed(DELETE_BUTTON)) { if (g_currentActor) { if (g_currentActor->mBase.mProcName != PROC_ALINK) { fopAcM_delete(g_currentActor); @@ -310,7 +207,7 @@ void ActorListMenu::draw() { } } - if (GZ_getButtonPressed(CONTROLLER_Z) && GZ_getButtonPressed(CONTROLLER_A)) { + if (GZ_getButtonPressed(MEM_SWITCH_BTN) && GZ_getButtonPressed(CONTROLLER_A)) { if (g_currentActor) { g_currentActor->mBase.mPauseFlag = !g_currentActor->mBase.mPauseFlag; } @@ -328,34 +225,35 @@ void ActorListMenu::draw() { break; case ACTOR_POSITION_X_INDEX: if (rightPressed || leftPressed) { - updateValue(&g_currentActor->current.pos.x, smallPosChange, largePosChange, rightPressed, zPressed); + updateValue(&g_currentActor->current.pos.x, rightPressed); } break; case ACTOR_POSITION_Y_INDEX: if (rightPressed || leftPressed) { - updateValue(&g_currentActor->current.pos.y, smallPosChange, largePosChange, rightPressed, zPressed); + updateValue(&g_currentActor->current.pos.y, rightPressed); } break; case ACTOR_POSITION_Z_INDEX: if (rightPressed || leftPressed) { - updateValue(&g_currentActor->current.pos.z, smallPosChange, largePosChange, rightPressed, zPressed); + updateValue(&g_currentActor->current.pos.z, rightPressed); } break; case ACTOR_ANGLE_X_INDEX: if (rightPressed || leftPressed) { - updateValue(&g_currentActor->shape_angle.x, smallAngleChange, largeAngleChange, rightPressed, zPressed); + updateValue(&g_currentActor->shape_angle.x, rightPressed); } break; case ACTOR_ANGLE_Y_INDEX: if (rightPressed || leftPressed) { - updateValue(&g_currentActor->shape_angle.y, smallAngleChange, largeAngleChange, rightPressed, zPressed); + updateValue(&g_currentActor->shape_angle.y, rightPressed); } break; case ACTOR_ANGLE_Z_INDEX: if (rightPressed || leftPressed) { - updateValue(&g_currentActor->shape_angle.z, smallAngleChange, largeAngleChange, rightPressed, zPressed); + updateValue(&g_currentActor->shape_angle.z, rightPressed); } break; + case ACTOR_PROC_INDEX: case ACTOR_PARAMS_INDEX: // allowing arbitrary updates here causes frequent crashes. removing for now. break; @@ -369,6 +267,7 @@ void ActorListMenu::draw() { lines[ACTOR_ANGLE_X_INDEX].printf("rot-x: <0x%04X>", static_cast(g_currentActor->shape_angle.x)); lines[ACTOR_ANGLE_Y_INDEX].printf("rot-y: <0x%04X>", static_cast(g_currentActor->shape_angle.y)); lines[ACTOR_ANGLE_Z_INDEX].printf("rot-z: <0x%04X>", static_cast(g_currentActor->shape_angle.z)); + lines[ACTOR_PROC_INDEX].printf("proc id: %d", g_currentActor->mBase.mProcName); lines[ACTOR_PARAMS_INDEX].printf("params: 0x%08X", g_currentActor->mBase.mParameters); } diff --git a/modules/menus/menu_checkers/CMakeLists.txt b/modules/menus/menu_checkers/CMakeLists.txt new file mode 100644 index 00000000..24e35f3c --- /dev/null +++ b/modules/menus/menu_checkers/CMakeLists.txt @@ -0,0 +1,5 @@ +file(GLOB_RECURSE srcs CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp") +file(GLOB_RECURSE asms CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/src/*.s") +list(APPEND srcs ${asms}) +get_filename_component(rel_name ${CMAKE_CURRENT_SOURCE_DIR} NAME) +tpgz_add_module(${rel_name} "${srcs}" "${CMAKE_CURRENT_SOURCE_DIR}/include") \ No newline at end of file diff --git a/modules/menus/menu_checkers/include/checkers_menu.h b/modules/menus/menu_checkers/include/checkers_menu.h new file mode 100644 index 00000000..6778a82f --- /dev/null +++ b/modules/menus/menu_checkers/include/checkers_menu.h @@ -0,0 +1,40 @@ +#pragma once + +#include "menus/menu.h" + +#ifdef GCN_PLATFORM +#define GORGE_VOID_TEXT "L+Z" +#endif + +#ifdef WII_PLATFORM +#define GORGE_VOID_TEXT "Z+C+A+1" +#define BACK_IN_TIME_TEXT "Z+C+A+2" +#endif + +enum CheckersIndex { + +#ifdef WII_PLATFORM + BIT_INDEX, +#endif + COROTD_INDEX, + GORGE_INDEX, + MASH_CHECKER_INDEX, + ROLL_INDEX, + UMD_INDEX, + + CHECKERS_COUNT, +}; + +struct CheckersData { + Cursor cursor; +}; + +class CheckersMenu : public Menu { +public: + CheckersMenu(CheckersData&); + virtual ~CheckersMenu(); + virtual void draw(); + +private: + Line lines[CHECKERS_COUNT]; +}; \ No newline at end of file diff --git a/modules/menus/menu_checkers/include/main.h b/modules/menus/menu_checkers/include/main.h new file mode 100644 index 00000000..1935f7ae --- /dev/null +++ b/modules/menus/menu_checkers/include/main.h @@ -0,0 +1,6 @@ +#pragma once + +namespace tpgz::modules { +void main(); +void exit(); +} // namespace tpgz::modules \ No newline at end of file diff --git a/modules/menus/menu_checkers/src/checkers_menu.cpp b/modules/menus/menu_checkers/src/checkers_menu.cpp new file mode 100644 index 00000000..76b61a73 --- /dev/null +++ b/modules/menus/menu_checkers/src/checkers_menu.cpp @@ -0,0 +1,101 @@ +#include "menus/menu_checkers/include/checkers_menu.h" +#include "menus/utils/menu_mgr.h" + +const char l_descTemplates[CHECKERS_COUNT][100] = { +#ifdef WII_PLATFORM + "use %s to warp to ordon bridge", +#endif + "show frame info when doing coro td", + "use %s to warp to kakariko gorge", + "display A/B button mashing speeds", + "frame counter for chaining rolls", + "practice snowpeak universal map delay timing", +}; + +KEEP_FUNC CheckersMenu::CheckersMenu(CheckersData& data) + : Menu(data.cursor), lines{ +#ifdef WII_PLATFORM + {"bit checker", BIT_INDEX, "use " BACK_IN_TIME_TEXT " to warp to ordon bridge", true, + ACTIVE_FUNC(STNG_TOOLS_BIT)}, +#endif + {"coro td checker", COROTD_INDEX, "show frame info when doing coro td", true, + ACTIVE_FUNC(STNG_TOOLS_COROTD)}, + {"gorge checker", GORGE_INDEX, "use " GORGE_VOID_TEXT " to warp to kakariko gorge", + true, ACTIVE_FUNC(STNG_TOOLS_GORGE)}, + {"mash checker", MASH_CHECKER_INDEX, "display A/B button mashing speeds", true, + ACTIVE_FUNC(STNG_TOOLS_MASH_CHECKER)}, + {"roll checker", ROLL_INDEX, "frame counter for chaining rolls", true, + ACTIVE_FUNC(STNG_TOOLS_ROLL)}, + {"umd checker", UMD_INDEX, "practice snowpeak universal map delay timing", true, + ACTIVE_FUNC(STNG_TOOLS_UMD)}} { +} + +CheckersMenu::~CheckersMenu() {} + +GZSettingID l_mapping[] = { +#ifdef WII_PLATFORM + STNG_TOOLS_BIT, +#endif + STNG_TOOLS_COROTD, STNG_TOOLS_GORGE, + STNG_TOOLS_MASH_CHECKER,STNG_TOOLS_ROLL, + STNG_TOOLS_UMD, +}; + +#define set_active(id, status) \ + ({ \ + auto* stng = GZStng_get(id); \ + if (stng) \ + *(bool*)stng->data = status; \ + }) + +void CheckersMenu::draw() { + if (GZ_getButtonTrig(BACK_BUTTON)) { + g_menuMgr->pop(); + return; + } + + cursor.move(0, MENU_LINE_NUM); + + if (GZ_getButtonTrig(SELECTION_BUTTON)) { + GZSettingEntry* stng = nullptr; + if (cursor.y < CHECKERS_COUNT) { + stng = GZStng_get(l_mapping[cursor.y]); + if (!stng) { + stng = new GZSettingEntry{l_mapping[cursor.y], sizeof(bool), new bool}; + g_settings.push_back(stng); + } + } + if (stng) { + *(bool*)stng->data = !*(bool*)stng->data; + } + } + + char buf[100]; + switch (cursor.y) { + case GORGE_INDEX: { + uint16_t combo = GZStng_getData(STNG_CMD_GORGE_VOID, GORGE_VOID_BUTTONS); + char* comboStr = new char[GZCmd_getComboLen(combo) + 1]; + GZCmd_comboToStr(combo, comboStr); + snprintf(buf, sizeof(buf), l_descTemplates[cursor.y], comboStr); + delete[] comboStr; + break; + } +#ifdef WII_PLATFORM + case BIT_INDEX: { + uint16_t combo = GZStng_getData(STNG_CMD_BIT, BACK_IN_TIME_BUTTONS); + char* comboStr = new char[GZCmd_getComboLen(combo) + 1]; + GZCmd_comboToStr(combo, comboStr); + snprintf(buf, sizeof(buf), l_descTemplates[cursor.y], comboStr); + delete[] comboStr; + break; + } +#endif + default: { + snprintf(buf, sizeof(buf), l_descTemplates[cursor.y]); + break; + } + } + + strncpy(lines[cursor.y].description, buf, sizeof(lines[cursor.y].description)); + GZ_drawMenuLines(lines, cursor.y, MENU_LINE_NUM); +} diff --git a/modules/menus/menu_checkers/src/main.cpp b/modules/menus/menu_checkers/src/main.cpp new file mode 100644 index 00000000..343011d7 --- /dev/null +++ b/modules/menus/menu_checkers/src/main.cpp @@ -0,0 +1,50 @@ +#include +#include "menus/menu_checkers/include/checkers_menu.h" +#include "events/draw_listener.h" +#include "menus/utils/menu_mgr.h" +#include "utils/draw.h" + +void onCreate(); +void onLoad(); +void onDraw(); +void onUnload(); +void onDelete(); + +CheckersMenu* l_checkersMenu; + +namespace tpgz::modules { +void main() { + g_menuMgr->setCreateHook(onCreate); + g_menuMgr->setLoadHook(onLoad); + g_menuMgr->setUnloadHook(onUnload); + g_menuMgr->setDeleteHook(onDelete); +} +void exit() { + g_menuMgr->setCreateHook(nullptr); + g_menuMgr->setLoadHook(nullptr); + g_menuMgr->setUnloadHook(nullptr); + g_menuMgr->setDeleteHook(nullptr); +} +} // namespace tpgz::modules + +void onCreate() { + if (!g_menuMgr->getPermanentData()) { + g_menuMgr->setPermanentData(new CheckersData); + } +} + +void onLoad() { + l_checkersMenu = new CheckersMenu(*g_menuMgr->getPermanentData()); + g_drawListener->addListener(onDraw); +} + +void onDraw() { + l_checkersMenu->draw(); +} + +void onUnload() { + g_drawListener->removeListener(onDraw); + delete l_checkersMenu; +} + +void onDelete() {} \ No newline at end of file diff --git a/modules/menus/menu_memfiles/include/memfiles_menu.h b/modules/menus/menu_memfiles/include/memfiles_menu.h index c5f269d1..a7518fda 100644 --- a/modules/menus/menu_memfiles/include/memfiles_menu.h +++ b/modules/menus/menu_memfiles/include/memfiles_menu.h @@ -8,12 +8,13 @@ #define MEMFILE_DELETE_INDEX 3 struct MemfilesData { + Cursor cursor; uint8_t l_fileNo = 1; }; class MemfilesMenu : public Menu { public: - MemfilesMenu(Cursor&, MemfilesData&); + MemfilesMenu(MemfilesData&); virtual ~MemfilesMenu(); virtual void draw(); diff --git a/modules/menus/menu_memfiles/src/main.cpp b/modules/menus/menu_memfiles/src/main.cpp index 3008489c..5a7a3e9b 100644 --- a/modules/menus/menu_memfiles/src/main.cpp +++ b/modules/menus/menu_memfiles/src/main.cpp @@ -28,15 +28,13 @@ void exit() { } // namespace tpgz::modules void onCreate() { - g_menuMgr->setPersistentData(new MemfilesData()); - if (!g_menuMgr->getPermanentData()) { - g_menuMgr->setPermanentData(new Cursor); + if (!g_menuMgr->getPermanentData()) { + g_menuMgr->setPermanentData(new MemfilesData); } } void onLoad() { - l_menu = new MemfilesMenu(*g_menuMgr->getPermanentData(), - *g_menuMgr->getPersistentData()); + l_menu = new MemfilesMenu(*g_menuMgr->getPermanentData()); g_drawListener->addListener(onDraw); } @@ -49,8 +47,4 @@ void onUnload() { delete l_menu; } -void onDelete() { - auto data = g_menuMgr->getPersistentData(); - delete data; - g_menuMgr->setPersistentData(nullptr); -} +void onDelete() {} diff --git a/modules/menus/menu_memfiles/src/memfiles_menu.cpp b/modules/menus/menu_memfiles/src/memfiles_menu.cpp index 11711e94..4ced9935 100644 --- a/modules/menus/menu_memfiles/src/memfiles_menu.cpp +++ b/modules/menus/menu_memfiles/src/memfiles_menu.cpp @@ -13,15 +13,12 @@ PositionData memfile_posdata; -KEEP_FUNC MemfilesMenu::MemfilesMenu(Cursor& cursor, MemfilesData& data) - : Menu(cursor), - l_fileNo(data.l_fileNo), lines{ - {"file slot:", MEMFILE_SLOT_INDEX, "Select memfile slot"}, - {"save", MEMFILE_SAVE_INDEX, "Save memfile to slot", false}, - {"load", MEMFILE_LOAD_INDEX, "Load memfile from slot", false}, - {"delete", MEMFILE_DELETE_INDEX, "Delete memfile from slot", - false}, - } {} +KEEP_FUNC MemfilesMenu::MemfilesMenu(MemfilesData& data) + : Menu(data.cursor), l_fileNo(data.l_fileNo), lines{ + {"file slot:", MEMFILE_SLOT_INDEX, "Select memfile slot"}, + {"save", MEMFILE_SAVE_INDEX, "Save memfile to slot", false}, + {"load", MEMFILE_LOAD_INDEX, "Load memfile from slot", false}, + {"delete", MEMFILE_DELETE_INDEX, "Delete memfile from slot", false}} {} MemfilesMenu::~MemfilesMenu() {} diff --git a/modules/menus/menu_tools/include/tools_menu.h b/modules/menus/menu_tools/include/tools_menu.h index 2043c905..a0dd291f 100644 --- a/modules/menus/menu_tools/include/tools_menu.h +++ b/modules/menus/menu_tools/include/tools_menu.h @@ -6,7 +6,6 @@ #ifdef GCN_PLATFORM #define FRAME_ADVANCE_TEXT "R + D-Pad Up" #define FRAME_PAUSE_TEXT "R" -#define GORGE_VOID_TEXT "L+Z" #define STORE_POSITION_TEXT "D-PAD up + R" #define LOAD_POSITION_TEXT "D-PAD down + R" #define RELOAD_AREA_TEXT "L+R+A+Start" @@ -19,8 +18,6 @@ #ifdef WII_PLATFORM #define FRAME_ADVANCE_TEXT "Z+C+Plus+Minus" #define FRAME_PAUSE_TEXT "2" -#define GORGE_VOID_TEXT "Z+C+A+1" -#define BACK_IN_TIME_TEXT "Z+C+A+2" #define STORE_POSITION_TEXT "Z+C+1" #define LOAD_POSITION_TEXT "Z+C+2" #define RELOAD_AREA_TEXT "Z+C+B+2" diff --git a/modules/menus/menu_tools/src/tools_menu.cpp b/modules/menus/menu_tools/src/tools_menu.cpp index 51f77ff0..4fdef929 100644 --- a/modules/menus/menu_tools/src/tools_menu.cpp +++ b/modules/menus/menu_tools/src/tools_menu.cpp @@ -6,7 +6,6 @@ #include "libtp_c/include/d/com/d_com_inf_game.h" #include "gz_flags.h" #include "rels/include/defines.h" -#include "rels/include/defines.h" #include "menus/utils/menu_mgr.h" #ifdef GCN_PLATFORM @@ -33,22 +32,15 @@ #define MAX_TUNIC_COLORS 7 const char l_descTemplates[TOOLS_COUNT][100] = { + "open checkers menu", "use %s to reload current area", "use %s to pause, %s to frame advance", "reduces bonk animation significantly", "link's movement is much faster", - "use %s to warp to kakariko gorge", -#ifdef WII_PLATFORM - "use %s to warp to ordon bridge", -#endif - "show frame info when doing coro td", - "practice snowpeak universal map delay timing", "show current inputs", "show Link's position, angle, and speed", "show Heap size info", "link won't sink in sand", - "frame counter for chaining rolls", - "display A/B button mashing speeds", "%s to set, %s to load", "simulates turbo controller inputs", "frame timer: %s to start/stop, %s to reset", @@ -64,7 +56,8 @@ const char l_descTemplates[TOOLS_COUNT][100] = { KEEP_FUNC ToolsMenu::ToolsMenu(Cursor& cursor, ToolsData& data) : Menu(cursor), l_tunicCol_idx(data.l_tunicCol_idx), - lines{{"area reload", RELOAD_AREA_INDEX, "use " RELOAD_AREA_TEXT " to reload current area", + lines{{"checkers", CHECKERS_INDEX, "checkers menu", false}, + {"area reload", RELOAD_AREA_INDEX, "use " RELOAD_AREA_TEXT " to reload current area", true, ACTIVE_FUNC(STNG_TOOLS_RELOAD_AREA)}, {"frame advance", FRAME_ADVANCE_INDEX, "use " FRAME_ADVANCE_TEXT " to pause, " FRAME_PAUSE_TEXT " to frame advance", true, ACTIVE_FUNC(STNG_TOOLS_FRAME_ADVANCE)}, @@ -72,16 +65,6 @@ KEEP_FUNC ToolsMenu::ToolsMenu(Cursor& cursor, ToolsData& data) ACTIVE_FUNC(STNG_TOOLS_FAST_BONK)}, {"fast movement", FAST_MOVEMENT_INDEX, "link's movement is much faster", true, ACTIVE_FUNC(STNG_TOOLS_FAST_MOVEMENT)}, - {"gorge checker", GORGE_INDEX, "use " GORGE_VOID_TEXT " to warp to kakariko gorge", - true, ACTIVE_FUNC(STNG_TOOLS_GORGE)}, -#ifdef WII_PLATFORM - {"bit checker", BIT_INDEX, "use " BACK_IN_TIME_TEXT " to warp to ordon bridge", true, - ACTIVE_FUNC(STNG_TOOLS_BIT)}, -#endif - {"coro td checker", COROTD_INDEX, "show frame info when doing coro td", true, - ACTIVE_FUNC(STNG_TOOLS_COROTD)}, - {"umd checker", UMD_INDEX, "practice snowpeak universal map delay timing", true, - ACTIVE_FUNC(STNG_TOOLS_UMD)}, {"input viewer", INPUT_VIEWER_INDEX, "show current inputs", true, ACTIVE_FUNC(STNG_TOOLS_INPUT_VIEWER)}, {"link debug info", LINK_DEBUG_INDEX, "show Link's position, angle, and speed", true, @@ -90,10 +73,6 @@ KEEP_FUNC ToolsMenu::ToolsMenu(Cursor& cursor, ToolsData& data) ACTIVE_FUNC(STNG_TOOLS_HEAP_DEBUG)}, {"no sinking in sand", SAND_INDEX, "link won't sink in sand", true, ACTIVE_FUNC(STNG_TOOLS_SAND)}, - {"roll checker", ROLL_INDEX, "frame counter for chaining rolls", true, - ACTIVE_FUNC(STNG_TOOLS_ROLL)}, - {"mash checker", MASH_CHECKER_INDEX, "display A/B button mashing speeds", true, - ACTIVE_FUNC(STNG_TOOLS_MASH_CHECKER)}, {"teleport", TELEPORT_INDEX, STORE_POSITION_TEXT " to set, " LOAD_POSITION_TEXT " to load", true, ACTIVE_FUNC(STNG_TOOLS_TELEPORT)}, @@ -126,11 +105,7 @@ ToolsMenu::~ToolsMenu() {} GZSettingID l_mapping[] = { STNG_TOOLS_RELOAD_AREA, STNG_TOOLS_FRAME_ADVANCE, STNG_TOOLS_FAST_BONK, - STNG_TOOLS_FAST_MOVEMENT, STNG_TOOLS_GORGE, -#ifdef WII_PLATFORM - STNG_TOOLS_BIT, -#endif - STNG_TOOLS_COROTD, STNG_TOOLS_UMD, STNG_TOOLS_INPUT_VIEWER, + STNG_TOOLS_FAST_MOVEMENT, STNG_TOOLS_INPUT_VIEWER, STNG_TOOLS_LINK_DEBUG, STNG_TOOLS_HEAP_DEBUG, STNG_TOOLS_SAND, STNG_TOOLS_ROLL, STNG_TOOLS_MASH_CHECKER, STNG_TOOLS_TELEPORT, STNG_TOOLS_TURBO_MODE, STNG_TOOLS_TIMER, STNG_TOOLS_LOAD_TIMER, @@ -179,11 +154,16 @@ void ToolsMenu::draw() { } if (GZ_getButtonTrig(SELECTION_BUTTON)) { + if (cursor.y == CHECKERS_INDEX) { + g_menuMgr->push(MN_CHECKERS_INDEX); + return; + } + GZSettingEntry* stng = nullptr; if (cursor.y < TOOLS_COUNT && cursor.y != TUNIC_COLOR_INDEX) { - stng = GZStng_get(l_mapping[cursor.y]); + stng = GZStng_get(l_mapping[cursor.y-1]); if (!stng) { - stng = new GZSettingEntry{l_mapping[cursor.y], sizeof(bool), new bool}; + stng = new GZSettingEntry{l_mapping[cursor.y-1], sizeof(bool), new bool}; g_settings.push_back(stng); } } @@ -232,24 +212,6 @@ void ToolsMenu::draw() { delete[] comboPauseStr; break; } - case GORGE_INDEX: { - uint16_t combo = GZStng_getData(STNG_CMD_GORGE_VOID, GORGE_VOID_BUTTONS); - char* comboStr = new char[GZCmd_getComboLen(combo) + 1]; - GZCmd_comboToStr(combo, comboStr); - snprintf(buf, sizeof(buf), l_descTemplates[cursor.y], comboStr); - delete[] comboStr; - break; - } -#ifdef WII_PLATFORM - case BIT_INDEX: { - uint16_t combo = GZStng_getData(STNG_CMD_BIT, BACK_IN_TIME_BUTTONS); - char* comboStr = new char[GZCmd_getComboLen(combo) + 1]; - GZCmd_comboToStr(combo, comboStr); - snprintf(buf, sizeof(buf), l_descTemplates[cursor.y], comboStr); - delete[] comboStr; - break; - } -#endif case TELEPORT_INDEX: { uint16_t comboPause = GZStng_getData(STNG_CMD_STORE_POSITION, STORE_POSITION_BUTTONS); diff --git a/modules/menus/menu_warp/src/main.cpp b/modules/menus/menu_warp/src/main.cpp index 32298206..81807c5e 100644 --- a/modules/menus/menu_warp/src/main.cpp +++ b/modules/menus/menu_warp/src/main.cpp @@ -3,7 +3,6 @@ #include "events/draw_listener.h" #include "menus/utils/menu_mgr.h" #include "utils/draw.h" -#include "rels/include/cxx.h" void onCreate(); void onLoad(); @@ -48,4 +47,4 @@ void onUnload() { delete l_menu; } -void onDelete() {} +void onDelete() {} \ No newline at end of file