From c8fa8c9e2aab72cf4e5db0e5d1c84a9ea6ee6eb0 Mon Sep 17 00:00:00 2001 From: Max Roncace Date: Tue, 23 Jun 2026 20:52:55 +0100 Subject: [PATCH] Link d_cursor_mng for all Wii versions (#3164) --- config/DZDE01/splits.txt | 11 ++- config/DZDE01/symbols.txt | 22 ++--- config/RZDE01_00/splits.txt | 9 +- config/RZDE01_00/symbols.txt | 8 +- config/RZDE01_02/splits.txt | 9 +- config/RZDE01_02/symbols.txt | 12 +-- config/RZDJ01/splits.txt | 9 +- config/RZDJ01/symbols.txt | 8 +- config/RZDP01/splits.txt | 9 +- config/RZDP01/symbols.txt | 6 +- config/Shield/symbols.txt | 10 +-- config/ShieldD/symbols.txt | 2 +- configure.py | 3 +- include/d/d_com_inf_game.h | 167 +++++++++++++++++++++++++++-------- include/d/d_cursor_mng.h | 46 ++++++---- include/d/d_item.h | 14 +++ include/d/d_rvl_fb_copy.h | 6 ++ include/d/d_save.h | 4 +- include/m_Do/m_Do_graphic.h | 2 +- src/d/d_com_inf_game.cpp | 2 +- src/d/d_cursor_mng.cpp | 61 ++++++------- src/d/d_rvl_fb_copy.cpp | 20 +++++ src/d/d_s_logo.cpp | 5 +- src/d/d_s_play.cpp | 5 +- src/d/d_save.cpp | 7 +- src/m_Do/m_Do_graphic.cpp | 3 +- 26 files changed, 315 insertions(+), 145 deletions(-) create mode 100644 include/d/d_rvl_fb_copy.h create mode 100644 src/d/d_rvl_fb_copy.cpp diff --git a/config/DZDE01/splits.txt b/config/DZDE01/splits.txt index 279181eb71..a056dc25d8 100644 --- a/config/DZDE01/splits.txt +++ b/config/DZDE01/splits.txt @@ -21,9 +21,12 @@ d/d_cursor_mng.cpp: .text start:0x80006D90 end:0x80007BC8 .data start:0x803BD040 end:0x803BD168 .sdata start:0x804F77C0 end:0x804F77F8 - .sbss start:0x804FA8C8 end:0x804FA8D8 + .sbss start:0x804FA8C8 end:0x804FA8D0 .sdata2 start:0x804FBB18 end:0x804FBB30 +d/d_rvl_fb_copy.cpp: + .sbss start:0x804FA8D0 end:0x804FA8D8 + d/d_E3Stage_select06.cpp: .text start:0x80007BC8 end:0x800097C4 .data start:0x803BD168 end:0x803BD3A0 @@ -50,10 +53,10 @@ m_Do/m_Do_printf.cpp: m_Do/m_Do_audio.cpp: .text start:0x8000ACF4 end:0x8000B698 .ctors start:0x80396108 end:0x8039610C - .data start:0x803BD770 end:0x803BD9E8 + .data start:0x803BD770 end:0x803BD9D0 .bss start:0x8040C0E0 end:0x8040D498 .sdata start:0x804F78B8 end:0x804F7924 - .sbss start:0x804FA92C end:0x804FA978 + .sbss start:0x804FA928 end:0x804FA978 m_Do/m_Do_controller_pad.cpp: .text start:0x8000B698 end:0x8000BAA8 @@ -63,7 +66,7 @@ m_Do/m_Do_controller_pad.cpp: m_Re/m_Re_controller_pad.cpp: .text start:0x8000BAA8 end:0x8000F56C .rodata start:0x803962C0 end:0x80396310 - .data start:0x803BD9E8 end:0x803BDA00 + .data start:0x803BD9D0 end:0x803BDA00 .bss start:0x8040D5A8 end:0x80414E58 .sbss start:0x804FA978 end:0x804FA988 .sdata2 start:0x804FBBA8 end:0x804FBC50 diff --git a/config/DZDE01/symbols.txt b/config/DZDE01/symbols.txt index c7dff24e8e..45fa8a4f2d 100644 --- a/config/DZDE01/symbols.txt +++ b/config/DZDE01/symbols.txt @@ -26891,7 +26891,7 @@ lbl_804FA8B8 = .sdata:0x804FA8B8; // type:object size:0x1 data:byte lbl_804FA8C0 = .sbss:0x804FA8C0; // type:object size:0x1 data:byte lbl_804FA8C1 = .sbss:0x804FA8C1; // type:object size:0x1 data:byte m_myObj__10dCsr_mng_c = .sbss:0x804FA8C8; // type:object size:0x4 scope:global align:4 data:4byte -lbl_804FA8D0 = .sbss:0x804FA8D0; // type:object size:0x1 data:byte +g_rvlEnableExtraFramebufferCopy = .sbss:0x804FA8D0; // type:object size:0x1 data:byte l_bloCsr = .sbss:0x804FA8D8; // type:object size:0x4 scope:local align:4 data:4byte l_bloObj = .sbss:0x804FA8DC; // type:object size:0x4 scope:local align:4 data:4byte fillcheck_check_frame = .sbss:0x804FA8E0; // type:object size:0x1 data:byte @@ -26902,21 +26902,21 @@ mSelectHeapBar = .sbss:0x804FA8F9; // type:object size:0x1 data:byte mCheckHeap = .sbss:0x804FA8FA; // type:object size:0x1 data:byte console_scroll$90874 = .sbss:0x804FA8FC; // type:object size:0x4 scope:local align:4 data:float frame$91010 = .sbss:0x804FA900; // type:object size:0x4 scope:local align:4 data:4byte -lbl_804FA908 = .sbss:0x804FA908; // type:object size:0x1 data:byte -lbl_804FA909 = .sbss:0x804FA909; // type:object size:0x1 data:byte -lbl_804FA90A = .sbss:0x804FA90A; // type:object size:0x1 data:byte -lbl_804FA90B = .sbss:0x804FA90B; // type:object size:0x1 data:byte -lbl_804FA90C = .sbss:0x804FA90C; // type:object size:0x1 data:byte +__OSReport_disable = .sbss:0x804FA908; // type:object size:0x1 data:byte +__OSReport_Error_disable = .sbss:0x804FA909; // type:object size:0x1 data:byte +__OSReport_Warning_disable = .sbss:0x804FA90A; // type:object size:0x1 data:byte +__OSReport_System_disable = .sbss:0x804FA90B; // type:object size:0x1 data:byte +__OSReport_enable = .sbss:0x804FA90C; // type:object size:0x1 data:byte __OSReport_MonopolyThread = .sbss:0x804FA910; // type:object size:0x4 scope:global align:4 data:4byte print_counts = .sbss:0x804FA914; // type:object size:0x4 scope:global align:4 data:4byte print_errors = .sbss:0x804FA918; // type:object size:0x4 scope:global align:4 data:4byte print_warings = .sbss:0x804FA91C; // type:object size:0x4 scope:global align:4 data:4byte print_systems = .sbss:0x804FA920; // type:object size:0x4 scope:global align:4 data:4byte -lbl_804FA924 = .sbss:0x804FA924; // type:object size:0x1 data:byte -lbl_804FA925 = .sbss:0x804FA925; // type:object size:0x1 data:byte -lbl_804FA928 = .sbss:0x804FA928; // type:object size:0x1 data:byte -lbl_804FA929 = .sbss:0x804FA929; // type:object size:0x1 data:byte -lbl_804FA92A = .sbss:0x804FA92A; // type:object size:0x1 data:byte +print_initialized = .sbss:0x804FA924; // type:object size:0x1 data:byte +data_80450BB5 = .sbss:0x804FA925; // type:object size:0x1 data:byte +mInitFlag__17mDoAud_zelAudio_c = .sbss:0x804FA928; // type:object size:0x1 data:byte +mResetFlag__17mDoAud_zelAudio_c = .sbss:0x804FA929; // type:object size:0x1 data:byte +mBgmSet__17mDoAud_zelAudio_c = .sbss:0x804FA92A; // type:object size:0x1 data:byte g_mDoAud_audioHeap = .sbss:0x804FA92C; // type:object size:0x4 scope:global align:4 data:4byte l_affCommand = .sbss:0x804FA930; // type:object size:0x4 scope:local align:4 data:4byte l_arcCommand = .sbss:0x804FA934; // type:object size:0x4 scope:local align:4 data:4byte diff --git a/config/RZDE01_00/splits.txt b/config/RZDE01_00/splits.txt index 36d8346201..1819efb0da 100644 --- a/config/RZDE01_00/splits.txt +++ b/config/RZDE01_00/splits.txt @@ -23,9 +23,12 @@ d/d_cursor_mng.cpp: .text start:0x800073D4 end:0x8000820C .data start:0x803F5618 end:0x803F5740 .sdata start:0x80537528 end:0x80537560 - .sbss start:0x8053A728 end:0x8053A738 + .sbss start:0x8053A728 end:0x8053A730 .sdata2 start:0x8053B9F8 end:0x8053BA10 +d/d_rvl_fb_copy.cpp: + .sbss start:0x8053A730 end:0x8053A738 + m_Do/m_Do_main.cpp: .text start:0x8000820C end:0x80008EE8 .data start:0x803F5740 end:0x803F5B28 @@ -44,7 +47,7 @@ m_Do/m_Do_printf.cpp: m_Do/m_Do_audio.cpp: .text start:0x800095CC end:0x80009F54 .ctors start:0x803CE244 end:0x803CE248 - .data start:0x803F5BE0 end:0x803F5E58 + .data start:0x803F5BE0 end:0x803F5E40 .bss start:0x8044A6A0 end:0x8044BA50 .sdata start:0x805375C0 end:0x8053762C .sbss start:0x8053A780 end:0x8053A7D0 @@ -57,7 +60,7 @@ m_Do/m_Do_controller_pad.cpp: m_Re/m_Re_controller_pad.cpp: .text start:0x8000A364 end:0x8000DD80 .rodata start:0x803CE400 end:0x803CE450 - .data start:0x803F5E58 end:0x803F5E70 + .data start:0x803F5E40 end:0x803F5E70 .bss start:0x8044BB60 end:0x80453410 .sbss start:0x8053A7D0 end:0x8053A7E0 .sdata2 start:0x8053BA40 end:0x8053BAE8 diff --git a/config/RZDE01_00/symbols.txt b/config/RZDE01_00/symbols.txt index a378ca920f..c4dfac2167 100644 --- a/config/RZDE01_00/symbols.txt +++ b/config/RZDE01_00/symbols.txt @@ -28054,10 +28054,10 @@ __float_nan = .sdata:0x8053A700; // type:object size:0x4 scope:global align:4 da __float_huge = .sdata:0x8053A704; // type:object size:0x4 scope:global align:4 data:float SendCount = .sdata:0x8053A708; // type:object size:0x1 data:byte m_myObj__13dHomeButton_c = .sbss:0x8053A720; // type:object size:0x4 scope:global align:4 data:4byte -lbl_8053A724 = .sbss:0x8053A724; // type:object size:0x1 data:byte -lbl_8053A725 = .sbss:0x8053A725; // type:object size:0x1 data:byte +lbl_8053A724__13dHomeButton_c = .sbss:0x8053A724; // type:object size:0x1 data:byte +lbl_8053A725__13dHomeButton_c = .sbss:0x8053A725; // type:object size:0x1 data:byte m_myObj__10dCsr_mng_c = .sbss:0x8053A728; // type:object size:0x4 scope:global align:4 data:4byte -lbl_8053A730 = .sbss:0x8053A730; // type:object size:0x8 data:byte +g_rvlEnableExtraFramebufferCopy = .sbss:0x8053A730; // type:object size:0x1 data:byte fillcheck_check_frame = .sbss:0x8053A738; // type:object size:0x1 data:byte sPowerOnTime__7mDoMain = .sbss:0x8053A740; // type:object size:0x8 scope:global align:4 data:4byte sHungUpTime__7mDoMain = .sbss:0x8053A748; // type:object size:0x8 scope:global align:4 data:4byte @@ -28077,7 +28077,7 @@ print_errors = .sbss:0x8053A770; // type:object size:0x4 scope:global align:4 da print_warings = .sbss:0x8053A774; // type:object size:0x4 scope:global align:4 data:4byte print_systems = .sbss:0x8053A778; // type:object size:0x4 scope:global align:4 data:4byte print_initialized = .sbss:0x8053A77C; // type:object size:0x1 data:byte -lbl_8053A77D = .sbss:0x8053A77D; // type:object size:0x1 data:byte +data_80450BB5 = .sbss:0x8053A77D; // type:object size:0x1 data:byte mInitFlag__17mDoAud_zelAudio_c = .sbss:0x8053A780; // type:object size:0x1 data:byte mResetFlag__17mDoAud_zelAudio_c = .sbss:0x8053A781; // type:object size:0x1 data:byte mBgmSet__17mDoAud_zelAudio_c = .sbss:0x8053A782; // type:object size:0x1 data:byte diff --git a/config/RZDE01_02/splits.txt b/config/RZDE01_02/splits.txt index 56822eabe7..3bec685a39 100644 --- a/config/RZDE01_02/splits.txt +++ b/config/RZDE01_02/splits.txt @@ -23,9 +23,12 @@ d/d_cursor_mng.cpp: .text start:0x800073D4 end:0x8000820C .data start:0x803E0978 end:0x803E0AA0 .sdata start:0x8051D5A8 end:0x8051D5E0 - .sbss start:0x80520728 end:0x80520738 + .sbss start:0x80520728 end:0x80520730 .sdata2 start:0x805219F8 end:0x80521A10 +d/d_rvl_fb_copy.cpp: + .sbss start:0x80520730 end:0x80520738 + m_Do/m_Do_main.cpp: .text start:0x8000820C end:0x80009024 .ctors start:0x803B8C84 end:0x803B8C88 @@ -45,7 +48,7 @@ m_Do/m_Do_printf.cpp: m_Do/m_Do_audio.cpp: .text start:0x8000973C end:0x8000A0E0 .ctors start:0x803B8C88 end:0x803B8C8C - .data start:0x803E0E70 end:0x803E10E8 + .data start:0x803E0E70 end:0x803E10D0 .bss start:0x80431CA0 end:0x80433058 .sdata start:0x8051D660 end:0x8051D6CC .sbss start:0x80520780 end:0x805207D0 @@ -58,7 +61,7 @@ m_Do/m_Do_controller_pad.cpp: m_Re/m_Re_controller_pad.cpp: .text start:0x8000A4F0 end:0x8000DF0C .rodata start:0x803B8E40 end:0x803B8E90 - .data start:0x803E10E8 end:0x803E1100 + .data start:0x803E10D0 end:0x803E1100 .bss start:0x80433168 end:0x8043AA18 .sbss start:0x805207D0 end:0x805207E0 .sdata2 start:0x80521A40 end:0x80521AE8 diff --git a/config/RZDE01_02/symbols.txt b/config/RZDE01_02/symbols.txt index 9663b1a441..edf783e6fe 100644 --- a/config/RZDE01_02/symbols.txt +++ b/config/RZDE01_02/symbols.txt @@ -27582,13 +27582,13 @@ __float_nan = .sdata:0x80520710; // type:object size:0x4 scope:global align:4 da __float_huge = .sdata:0x80520714; // type:object size:0x4 scope:global align:4 data:float SendCount = .sdata:0x80520718; // type:object size:0x1 data:byte m_myObj__13dHomeButton_c = .sbss:0x80520720; // type:object size:0x4 scope:global align:4 data:4byte -lbl_80520724 = .sbss:0x80520724; // type:object size:0x1 data:byte -lbl_80520725 = .sbss:0x80520725; // type:object size:0x1 data:byte +lbl_8053A724__13dHomeButton_c = .sbss:0x80520724; // type:object size:0x1 data:byte +lbl_8053A725__13dHomeButton_c = .sbss:0x80520725; // type:object size:0x1 data:byte m_myObj__10dCsr_mng_c = .sbss:0x80520728; // type:object size:0x4 scope:global align:4 data:4byte -lbl_80520730 = .sbss:0x80520730; // type:object size:0x8 data:byte +g_rvlEnableExtraFramebufferCopy = .sbss:0x80520730; // type:object size:0x1 data:byte fillcheck_check_frame = .sbss:0x80520738; // type:object size:0x1 data:byte -sPowerOnTime__7mDoMain = .sbss:0x80520740; // type:object size:0x8 scope:global align:4 data:4byte -sHungUpTime__7mDoMain = .sbss:0x80520748; // type:object size:0x8 scope:global align:4 data:4byte +sPowerOnTime__7mDoMain = .sbss:0x80520740; // type:object size:0x8 scope:global align:8 data:4byte +sHungUpTime__7mDoMain = .sbss:0x80520748; // type:object size:0x8 scope:global align:8 data:4byte mDisplayHeapSize = .sbss:0x80520750; // type:object size:0x1 data:byte mSelectHeapBar = .sbss:0x80520751; // type:object size:0x1 data:byte mCheckHeap = .sbss:0x80520752; // type:object size:0x1 data:byte @@ -27605,7 +27605,7 @@ print_errors = .sbss:0x80520770; // type:object size:0x4 scope:global align:4 da print_warings = .sbss:0x80520774; // type:object size:0x4 scope:global align:4 data:4byte print_systems = .sbss:0x80520778; // type:object size:0x4 scope:global align:4 data:4byte print_initialized = .sbss:0x8052077C; // type:object size:0x1 data:byte -lbl_8052077D = .sbss:0x8052077D; // type:object size:0x1 data:byte +data_80450BB5 = .sbss:0x8052077D; // type:object size:0x1 data:byte mInitFlag__17mDoAud_zelAudio_c = .sbss:0x80520780; // type:object size:0x1 data:byte mResetFlag__17mDoAud_zelAudio_c = .sbss:0x80520781; // type:object size:0x1 data:byte mBgmSet__17mDoAud_zelAudio_c = .sbss:0x80520782; // type:object size:0x1 data:byte diff --git a/config/RZDJ01/splits.txt b/config/RZDJ01/splits.txt index e52bc637ce..f80322afee 100644 --- a/config/RZDJ01/splits.txt +++ b/config/RZDJ01/splits.txt @@ -23,9 +23,12 @@ d/d_cursor_mng.cpp: .text start:0x800073D4 end:0x8000820C .data start:0x803DE938 end:0x803DEA60 .sdata start:0x8051B428 end:0x8051B460 - .sbss start:0x8051E5A8 end:0x8051E5B8 + .sbss start:0x8051E5A8 end:0x8051E5B0 .sdata2 start:0x8051F878 end:0x8051F890 +d/d_rvl_fb_copy.cpp: + .sbss start:0x8051E5B0 end:0x8051E5B8 + m_Do/m_Do_main.cpp: .text start:0x8000820C end:0x80009024 .ctors start:0x803BA744 end:0x803BA748 @@ -45,7 +48,7 @@ m_Do/m_Do_printf.cpp: m_Do/m_Do_audio.cpp: .text start:0x8000973C end:0x8000A0E0 .ctors start:0x803BA748 end:0x803BA74C - .data start:0x803DEE30 end:0x803DF0A8 + .data start:0x803DEE30 end:0x803DF090 .bss start:0x8042FB20 end:0x80430ED8 .sdata start:0x8051B4E0 end:0x8051B54C .sbss start:0x8051E600 end:0x8051E650 @@ -58,7 +61,7 @@ m_Do/m_Do_controller_pad.cpp: m_Re/m_Re_controller_pad.cpp: .text start:0x8000A4F0 end:0x8000DF0C .rodata start:0x803BA900 end:0x803BA950 - .data start:0x803DF0A8 end:0x803DF0C0 + .data start:0x803DF090 end:0x803DF0C0 .bss start:0x80430FE8 end:0x80438898 .sbss start:0x8051E650 end:0x8051E660 .sdata2 start:0x8051F8C0 end:0x8051F968 diff --git a/config/RZDJ01/symbols.txt b/config/RZDJ01/symbols.txt index ad27c25261..831cacf899 100644 --- a/config/RZDJ01/symbols.txt +++ b/config/RZDJ01/symbols.txt @@ -27588,10 +27588,10 @@ __float_nan = .sdata:0x8051E580; // type:object size:0x4 scope:global align:4 da __float_huge = .sdata:0x8051E584; // type:object size:0x4 scope:global align:4 data:float SendCount = .sdata:0x8051E588; // type:object size:0x1 data:byte m_myObj__13dHomeButton_c = .sbss:0x8051E5A0; // type:object size:0x4 scope:global align:4 data:4byte -lbl_8051E5A4 = .sbss:0x8051E5A4; // type:object size:0x1 data:byte -lbl_8051E5A5 = .sbss:0x8051E5A5; // type:object size:0x1 data:byte +lbl_8053A724__13dHomeButton_c = .sbss:0x8051E5A4; // type:object size:0x1 data:byte +lbl_8053A725__13dHomeButton_c = .sbss:0x8051E5A5; // type:object size:0x1 data:byte m_myObj__10dCsr_mng_c = .sbss:0x8051E5A8; // type:object size:0x4 scope:global align:4 data:4byte -lbl_8051E5B0 = .sbss:0x8051E5B0; // type:object size:0x8 data:byte +g_rvlEnableExtraFramebufferCopy = .sbss:0x8051E5B0; // type:object size:0x1 data:byte fillcheck_check_frame = .sbss:0x8051E5B8; // type:object size:0x1 data:byte sPowerOnTime__7mDoMain = .sbss:0x8051E5C0; // type:object size:0x8 scope:global align:4 data:4byte sHungUpTime__7mDoMain = .sbss:0x8051E5C8; // type:object size:0x8 scope:global align:4 data:4byte @@ -27611,7 +27611,7 @@ print_errors = .sbss:0x8051E5F0; // type:object size:0x4 scope:global align:4 da print_warings = .sbss:0x8051E5F4; // type:object size:0x4 scope:global align:4 data:4byte print_systems = .sbss:0x8051E5F8; // type:object size:0x4 scope:global align:4 data:4byte print_initialized = .sbss:0x8051E5FC; // type:object size:0x1 data:byte -lbl_8051E5FD = .sbss:0x8051E5FD; // type:object size:0x1 data:byte +data_80450BB5 = .sbss:0x8051E5FD; // type:object size:0x1 data:byte mInitFlag__17mDoAud_zelAudio_c = .sbss:0x8051E600; // type:object size:0x1 data:byte mResetFlag__17mDoAud_zelAudio_c = .sbss:0x8051E601; // type:object size:0x1 data:byte mBgmSet__17mDoAud_zelAudio_c = .sbss:0x8051E602; // type:object size:0x1 data:byte diff --git a/config/RZDP01/splits.txt b/config/RZDP01/splits.txt index ac6eeb4c84..fe395ec2f1 100644 --- a/config/RZDP01/splits.txt +++ b/config/RZDP01/splits.txt @@ -23,9 +23,12 @@ d/d_cursor_mng.cpp: .text start:0x800073D4 end:0x8000820C .data start:0x803E1698 end:0x803E17C0 .sdata start:0x8051DEA8 end:0x8051DEE0 - .sbss start:0x80520EE8 end:0x80520EF8 + .sbss start:0x80520EE8 end:0x80520EF0 .sdata2 start:0x805221B8 end:0x805221D0 +d/d_rvl_fb_copy.cpp: + .sbss start:0x80520EF0 end:0x80520EF8 + m_Do/m_Do_main.cpp: .text start:0x8000820C end:0x80009024 .ctors start:0x803B9104 end:0x803B9108 @@ -45,7 +48,7 @@ m_Do/m_Do_printf.cpp: m_Do/m_Do_audio.cpp: .text start:0x80009704 end:0x8000A0A8 .ctors start:0x803B9108 end:0x803B910C - .data start:0x803E1B90 end:0x803E1E08 + .data start:0x803E1B90 end:0x803E1DF0 .bss start:0x804325A0 end:0x80433958 .sdata start:0x8051DF60 end:0x8051DFCC .sbss start:0x80520F40 end:0x80520F90 @@ -58,7 +61,7 @@ m_Do/m_Do_controller_pad.cpp: m_Re/m_Re_controller_pad.cpp: .text start:0x8000A4B8 end:0x8000DED4 .rodata start:0x803B92C0 end:0x803B9310 - .data start:0x803E1E08 end:0x803E1E20 + .data start:0x803E1DF0 end:0x803E1E20 .bss start:0x80433A68 end:0x8043B318 .sbss start:0x80520F90 end:0x80520FA0 .sdata2 start:0x80522200 end:0x805222A8 diff --git a/config/RZDP01/symbols.txt b/config/RZDP01/symbols.txt index 593f75bd71..cfe7abd1b8 100644 --- a/config/RZDP01/symbols.txt +++ b/config/RZDP01/symbols.txt @@ -27508,8 +27508,8 @@ m_myObj__13dHomeButton_c = .sbss:0x80520EE0; // type:object size:0x4 scope:globa lbl_8053A724__13dHomeButton_c = .sbss:0x80520EE4; // type:object size:0x1 data:byte lbl_8053A725__13dHomeButton_c = .sbss:0x80520EE5; // type:object size:0x1 data:byte m_myObj__10dCsr_mng_c = .sbss:0x80520EE8; // type:object size:0x4 scope:global align:4 data:4byte -data_8053a730 = .sbss:0x80520EF0; // type:object size:0x1 data:byte -fillcheck_check_Frame = .sbss:0x80520EF8; // type:object size:0x1 data:byte +g_rvlEnableExtraFramebufferCopy = .sbss:0x80520EF0; // type:object size:0x1 data:byte +fillcheck_check_frame = .sbss:0x80520EF8; // type:object size:0x1 data:byte sPowerOnTime__7mDoMain = .sbss:0x80520F00; // type:object size:0x8 scope:global align:4 data:4byte sHungUpTime__7mDoMain = .sbss:0x80520F08; // type:object size:0x8 scope:global align:4 data:4byte mDisplayHeapSize = .sbss:0x80520F10; // type:object size:0x1 data:byte @@ -27528,7 +27528,7 @@ print_errors = .sbss:0x80520F30; // type:object size:0x4 scope:global align:4 da print_warings = .sbss:0x80520F34; // type:object size:0x4 scope:global align:4 data:4byte print_systems = .sbss:0x80520F38; // type:object size:0x4 scope:global align:4 data:4byte print_initialized = .sbss:0x80520F3C; // type:object size:0x1 data:byte -lbl_80520F3D = .sbss:0x80520F3D; // type:object size:0x1 data:byte +data_80450BB5 = .sbss:0x80520F3D; // type:object size:0x1 data:byte mInitFlag__17mDoAud_zelAudio_c = .sbss:0x80520F40; // type:object size:0x1 data:byte mResetFlag__17mDoAud_zelAudio_c = .sbss:0x80520F41; // type:object size:0x1 data:byte mBgmSet__17mDoAud_zelAudio_c = .sbss:0x80520F42; // type:object size:0x1 data:byte diff --git a/config/Shield/symbols.txt b/config/Shield/symbols.txt index b729d31c65..51b2bf9637 100644 --- a/config/Shield/symbols.txt +++ b/config/Shield/symbols.txt @@ -25146,11 +25146,11 @@ print_counts = .sbss:0x8050893C; // type:object size:0x4 scope:global data:4byte print_errors = .sbss:0x80508940; // type:object size:0x4 scope:global data:4byte hash:0x123F5FA0 print_warings = .sbss:0x80508944; // type:object size:0x4 scope:global data:4byte hash:0xA05AA6BC print_systems = .sbss:0x80508948; // type:object size:0x4 scope:global data:4byte hash:0x36CB5A9D -lbl_8050894C = .sbss:0x8050894C; // type:object size:0x1 data:byte hash:0xBF9D0727 -lbl_8050894D = .sbss:0x8050894D; // type:object size:0x1 data:byte hash:0xB0FDA7F8 -lbl_80508950 = .sbss:0x80508950; // type:object size:0x1 data:byte hash:0x694E5028 dhash:0x0978C44E -lbl_80508951 = .sbss:0x80508951; // type:object size:0x1 data:byte hash:0x842F0E27 dhash:0x44515221 -lbl_80508952 = .sbss:0x80508952; // type:object size:0x1 data:byte hash:0xB5B466D4 dhash:0x04485F72 +print_initialized = .sbss:0x8050894C; // type:object size:0x1 data:byte hash:0xBF9D0727 +data_80450BB5 = .sbss:0x8050894D; // type:object size:0x1 data:byte hash:0xB0FDA7F8 +mInitFlag__17mDoAud_zelAudio_c = .sbss:0x80508950; // type:object size:0x1 data:byte hash:0x694E5028 dhash:0x0978C44E +mResetFlag__17mDoAud_zelAudio_c = .sbss:0x80508951; // type:object size:0x1 data:byte hash:0x842F0E27 dhash:0x44515221 +mBgmSet__17mDoAud_zelAudio_c = .sbss:0x80508952; // type:object size:0x1 data:byte hash:0xB5B466D4 dhash:0x04485F72 g_mDoAud_audioHeap = .sbss:0x80508954; // type:object size:0x4 scope:global data:4byte hash:0xB286EBBE l_affCommand = .sbss:0x80508958; // type:object size:0x4 scope:global data:4byte hash:0x527CFA30 l_arcCommand = .sbss:0x8050895C; // type:object size:0x4 scope:global data:4byte hash:0xD9970F01 diff --git a/config/ShieldD/symbols.txt b/config/ShieldD/symbols.txt index 40ee1e8b06..7e1a8c519f 100644 --- a/config/ShieldD/symbols.txt +++ b/config/ShieldD/symbols.txt @@ -64150,7 +64150,7 @@ print_errors = .sbss:0x8074C2AC; // type:object size:0x4 scope:global data:4byte print_warings = .sbss:0x8074C2B0; // type:object size:0x4 scope:global data:4byte hash:0xA05AA6BC print_systems = .sbss:0x8074C2B4; // type:object size:0x4 scope:global data:4byte hash:0x36CB5A9D print_initialized = .sbss:0x8074C2B8; // type:object size:0x1 data:byte hash:0xBF9D0727 -lbl_8074C2B9 = .sbss:0x8074C2B9; // type:object size:0x7 data:byte hash:0xB0FDA7F8 +data_80450BB5 = .sbss:0x8074C2B9; // type:object size:0x7 data:byte hash:0xB0FDA7F8 mInitFlag__17mDoAud_zelAudio_c = .sbss:0x8074C2C0; // type:object size:0x1 data:byte hash:0x694E5028 dhash:0x0978C44E mResetFlag__17mDoAud_zelAudio_c = .sbss:0x8074C2C1; // type:object size:0x1 data:byte hash:0x842F0E27 dhash:0x44515221 mBgmSet__17mDoAud_zelAudio_c = .sbss:0x8074C2C2; // type:object size:0x1 data:byte hash:0xB5B466D4 dhash:0x04485F72 diff --git a/configure.py b/configure.py index 5368fb0ead..fe3e68a067 100755 --- a/configure.py +++ b/configure.py @@ -728,7 +728,8 @@ config.libs = [ "progress_category": "game", "objects": [ Object(NonMatching, "d/d_home_button.cpp"), - Object(NonMatching, "d/d_cursor_mng.cpp"), + Object(MatchingFor(ALL_WII, "DZDE01"), "d/d_cursor_mng.cpp"), + Object(MatchingFor(ALL_WII, "DZDE01"), "d/d_rvl_fb_copy.cpp"), Object(MatchingFor(ALL_GCN), "d/d_stage.cpp"), Object(MatchingFor(ALL_GCN), "d/d_map.cpp"), Object(MatchingFor(ALL_GCN), "d/d_com_inf_game.cpp"), diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 1d6edbb860..c959c1cb74 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -310,9 +310,9 @@ public: /* 0x04EEC */ u8 mDoStatus; // A button /* 0x04EED */ u8 field_0x4eed; /* 0x04EEE */ u8 m3DStatus; - /* 0x04EEF */ u8 field_0x4eef; // related to NunStatusForce + /* 0x04EEF */ u8 mNunDirectionForce; /* 0x04EF0 */ u8 field_0x4ef0; // related to NunStatus - /* 0x04EF1 */ u8 field_0x4ef1; // related to RemoConStatusForce + /* 0x04EF1 */ u8 mRemoConDirectionForce; /* 0x04EF2 */ u8 field_0x4ef2; // related to RemoConStatus /* 0x04EF3 */ u8 field_0x4ef3[2]; /* 0x04EF5 */ u8 m3DDirection; @@ -325,9 +325,9 @@ public: /* 0x04EFC */ u8 mRStatusForce; /* 0x04EFD */ u8 mAStatusForce; /* 0x04EFE */ u8 field_0x4efe; - /* 0x04EFF */ u8 field_0x4eff; // related to NunStatusForce + /* 0x04EFF */ u8 mNunStatusForce; /* 0x04F00 */ u8 mBottleStatusForce; - /* 0x04F01 */ u8 field_0x4f01; // related to RemoConStatusForce + /* 0x04F01 */ u8 mRemoConStatusForce; /* 0x04F02 */ u8 field_0x4f02[2]; /* 0x04F04 */ u8 mDoStatusForce; /* 0x04F05 */ u8 mTouchStatusForce; @@ -350,9 +350,9 @@ public: /* 0x04F17 */ u8 mRSetFlagForce; /* 0x04F18 */ u8 mASetFlagForce; /* 0x04F19 */ u8 field_0x4f19; - /* 0x04F1A */ u8 field_0x4f1a; // related to NunStatusForce + /* 0x04F1A */ u8 mNunSetFlagForce; /* 0x04F1B */ u8 mBottleSetFlagForce; - /* 0x04F1C */ u8 field_0x4f1c; // related to RemoConStatusForce + /* 0x04F1C */ u8 mRemoConSetFlagForce; /* 0x04F1D */ u8 field_0x4f1d[2]; /* 0x04F1F */ u8 mDoSetFlagForce; /* 0x04F20 */ u8 m3DSetFlagForce; @@ -369,12 +369,12 @@ public: /* 0x04F2B */ u8 mYSetFlagForce; /* 0x04F2C */ u8 mNunZStatus; /* 0x04F2D */ u8 mNunZSetFlag; - /* 0x04F2E */ u8 field_0x4fc6; // related to NunZStatusForce - /* 0x04F2F */ u8 field_0x4fc7; // related to NunZStatusForce + /* 0x04F2E */ u8 mNunZStatusForce; + /* 0x04F2F */ u8 mNunZSetFlagForce; /* 0x04F30 */ u8 mNunCStatus; /* 0x04F31 */ u8 mNunCSetFlag; - /* 0x04F32 */ u8 field_0x4fca; // related to NunCStatusForce - /* 0x04F33 */ u8 field_0x4fcb; // related to NunCStatusForce + /* 0x04F32 */ u8 mNunCStatusForce; + /* 0x04F33 */ u8 mNunCSetFlagForce; /* 0x04F34 */ u8 mSelectItem[8]; /* 0x04F3C */ u8 mSelectEquip[6]; /* 0x04F42 */ u8 mBaseAnimeID; @@ -406,7 +406,7 @@ public: /* 0x04F7D */ u8 mPauseFlag; /* 0x04F7E */ u8 mItemLifeCountType; /* 0x04F7F */ u8 mOxygenShowFlag; - /* 0x04F80 */ u8 mShow2D; + /* 0x04F80 */ bool mShow2D; /* 0x04F84 */ JKRExpHeap* mExpHeap2D; /* 0x04F88 */ JKRExpHeap* mSubExpHeap2D[2]; /* 0x04F90 */ JKRExpHeap* mMsgExpHeap; @@ -424,7 +424,7 @@ public: void clearItemBombNumCount(u8 i_item); s16 getItemMaxBombNumCount(u8 i_bombType); void setNowVibration(u8 vib_status); - u32 getNowVibration(); + u8 getNowVibration(); void setStartStage(dStage_startStage_c* p_startStage); static int getLayerNo_common_common(char const* stageName, int roomId, int layer); static int getLayerNo_common(char const* stageName, int roomId, int layer); @@ -593,7 +593,7 @@ public: dMsgObject_c* getMsgObjectClass() { return mItemInfo.mMsgObjectClass; } void setMsgObjectClass(dMsgObject_c* obj) { mItemInfo.mMsgObjectClass = obj; } f32 getItemLifeCount() { return mItemInfo.mItemLifeCount; } - u8& getItemLifeCountType() { return mItemInfo.mItemLifeCountType; } + u8 getItemLifeCountType() { return mItemInfo.mItemLifeCountType; } void setItemLifeCount(f32 hearts, u8 type) { mItemInfo.mItemLifeCount += hearts; mItemInfo.mItemLifeCountType = type; @@ -672,11 +672,18 @@ public: } u8 getNunStatus() { return mItemInfo.mNunStatus; } bool isNunSetFlag(u8 flag) { return (mItemInfo.mNunSetFlag & flag) ? true : false; } - void setNunStatus(u8 status, u8 param_1, u8 flag) { + void setNunStatus(u8 status, u8 direction, u8 flag) { mItemInfo.mNunStatus = status; - mItemInfo.field_0x4ef0 = param_1; + mItemInfo.field_0x4ef0 = direction; mItemInfo.mNunSetFlag = flag; } + u8 getNunStatusForce() { return mItemInfo.mNunStatus; } + bool getNunSetFlagForce() { return mItemInfo.mNunSetFlag; } + void setNunStatusForce(u8 status, u8 direction, u8 flag) { + mItemInfo.mNunStatusForce = status; + mItemInfo.mNunDirectionForce = direction; + mItemInfo.mNunSetFlagForce = flag; + } u8 getBottleStatus() { return mItemInfo.mBottleStatus; } bool isBottleSetFlag(u8 flag) { return (mItemInfo.mBottleSetFlag & flag) ? true : false; } void setBottleStatus(u8 status, u8 flag) { @@ -691,11 +698,18 @@ public: } u8 getRemoConStatus() { return mItemInfo.mRemoConStatus; } bool isRemoConSetFlag(u8 flag) { return (mItemInfo.mRemoConSetFlag & flag) ? true : false; } - void setRemoConStatus(u8 status, u8 param_1, u8 flag) { + void setRemoConStatus(u8 status, u8 direction, u8 flag) { mItemInfo.mRemoConStatus = status; - mItemInfo.field_0x4ef2 = param_1; + mItemInfo.field_0x4ef2 = direction; mItemInfo.mRemoConSetFlag = flag; } + u8 getRemoConStatusForce() { return mItemInfo.mBottleStatusForce; } + u8 getRemoConSetFlagForce() { return mItemInfo.mBottleSetFlagForce; } + void setRemoConStatusForce(u8 status, u8 direction, u8 flag) { + mItemInfo.mRemoConStatusForce = status; + mItemInfo.mRemoConDirectionForce = direction; + mItemInfo.mRemoConSetFlagForce = flag; + } u8 getDoStatus() { return mItemInfo.mDoStatus; } bool isDoSetFlag(u8 flag) { return (mItemInfo.mDoSetFlag & flag) ? true : false; } void setDoStatus(u8 status, u8 flag) { @@ -727,17 +741,17 @@ public: u8 getCStickStatus() { return mItemInfo.mCStickStatus; } u8 getCStickDirection() { return mItemInfo.mCStickDirection; } bool isCStickSetFlag(u8 flag) { return (mItemInfo.mCStickSetFlag & flag) ? true : false; } - void setCStickStatus(u8 status, u8 param_1, u8 flag) { + void setCStickStatus(u8 status, u8 direction, u8 flag) { mItemInfo.mCStickStatus = status; - mItemInfo.mCStickDirection = param_1; + mItemInfo.mCStickDirection = direction; mItemInfo.mCStickSetFlag = flag; } u8 getCStickStatusForce() { return mItemInfo.mCStickStatusForce; } u8 getCStickDirectionForce() { return mItemInfo.mCStickDirectionForce; } u8 getCStickSetFlagForce() { return mItemInfo.mCStickSetFlagForce; } - void setCStickStatusForce(u8 status, u8 param_1, u8 flag) { + void setCStickStatusForce(u8 status, u8 direction, u8 flag) { mItemInfo.mCStickStatusForce = status; - mItemInfo.mCStickDirectionForce = param_1; + mItemInfo.mCStickDirectionForce = direction; mItemInfo.mCStickSetFlagForce = flag; } u8 getSButtonStatus() { return mItemInfo.mSButtonStatus; } @@ -794,12 +808,29 @@ public: mItemInfo.mNunZStatus = status; mItemInfo.mNunZSetFlag = flag; } + u8 getNunZStatusForce() { return mItemInfo.mBottleStatusForce; } + u8 getNunZSetFlagForce() { return mItemInfo.mBottleSetFlagForce; } + void setNunZStatusForce(u8 status, u8 flag) { + mItemInfo.mNunZStatusForce = status; + mItemInfo.mNunZSetFlagForce = flag; + } u8 getNunCStatus() { return mItemInfo.mNunCStatus; } bool isNunCSetFlag(u8 flag) { return (mItemInfo.mNunCSetFlag & flag) ? true : false; } void setNunCStatus(u8 status, u8 flag) { mItemInfo.mNunCStatus = status; mItemInfo.mNunCSetFlag = flag; } + u8 getNunCStatusForce() { return mItemInfo.mBottleStatusForce; } + u8 getNunCSetFlagForce() { return mItemInfo.mBottleSetFlagForce; } + void setNunCStatusForce(u8 status, u8 flag) { + mItemInfo.mNunCStatusForce = status; + mItemInfo.mNunCSetFlagForce = flag; + } + u8 getTouchStatusForce() { return mItemInfo.mTouchStatusForce; } + u8 getTouchSetFlagForce() { return mItemInfo.mBottleSetFlagForce; } + void setTouchStatusForce(u8 status) { + mItemInfo.mTouchStatusForce = status; + } u8 getSelectItem(int idx) { return mItemInfo.mSelectItem[idx]; } void setSelectItem(int idx, u8 i_itemNo) { mItemInfo.mSelectItem[idx] = i_itemNo; } void setSelectEquip(int idx, u8 item_id) { mItemInfo.mSelectEquip[idx] = item_id; } @@ -835,7 +866,7 @@ public: void onPauseFlag() { mItemInfo.mPauseFlag = true; } u8 getOxygenShowFlag() { return mItemInfo.mOxygenShowFlag; } void setOxygenShowFlag(u8 flag) { mItemInfo.mOxygenShowFlag = flag; } - u8 show2dCheck() { return mItemInfo.mShow2D; } + bool show2dCheck() { return mItemInfo.mShow2D; } void show2dOn() { mItemInfo.mShow2D = 1; } void show2dOff() { mItemInfo.mShow2D = 0; } JKRExpHeap* getExpHeap2D() { return mItemInfo.mExpHeap2D; } @@ -3727,8 +3758,20 @@ inline bool dComIfGp_isNunSetFlag(u8 flag) { return g_dComIfG_gameInfo.play.isNunSetFlag(flag); } -inline void dComIfGp_setNunStatus(u8 status, u8 param_1, u8 flag) { - g_dComIfG_gameInfo.play.setNunStatus(status, param_1, flag); +inline void dComIfGp_setNunStatus(u8 status, u8 direction, u8 flag) { + g_dComIfG_gameInfo.play.setNunStatus(status, direction, flag); +} + +inline void dComIfGp_getNunStatusForce() { + g_dComIfG_gameInfo.play.getNunStatusForce(); +} + +inline void dComIfGp_getNunSetFlagForce() { + g_dComIfG_gameInfo.play.getNunSetFlagForce(); +} + +inline void dComIfGp_setNunStatusForce(u8 status, u8 direction, u8 flag) { + g_dComIfG_gameInfo.play.setNunStatusForce(status, direction, flag); } inline u8 dComIfGp_getBottleStatus() { @@ -3739,8 +3782,8 @@ inline bool dComIfGp_isBottleSetFlag(u8 flag) { return g_dComIfG_gameInfo.play.isBottleSetFlag(flag); } -inline void dComIfGp_setBottleStatus(u8 param_0, u8 param_1) { - g_dComIfG_gameInfo.play.setBottleStatus(param_0, param_1); +inline void dComIfGp_setBottleStatus(u8 status, u8 flag) { + g_dComIfG_gameInfo.play.setBottleStatus(status, flag); } inline u8 dComIfGp_getBottleStatusForce() { @@ -3751,8 +3794,8 @@ inline u8 dComIfGp_getBottleSetFlagForce() { return g_dComIfG_gameInfo.play.getBottleSetFlagForce(); } -inline void dComIfGp_setBottleStatusForce(u8 param_0, u8 param_1) { - g_dComIfG_gameInfo.play.setBottleStatusForce(param_0, param_1); +inline void dComIfGp_setBottleStatusForce(u8 status, u8 flag) { + g_dComIfG_gameInfo.play.setBottleStatusForce(status, flag); } inline u8 dComIfGp_getRemoConStatus() { @@ -3763,8 +3806,20 @@ inline bool dComIfGp_isRemoConSetFlag(u8 flag) { return g_dComIfG_gameInfo.play.isRemoConSetFlag(flag); } -inline void dComIfGp_setRemoConStatus(u8 status, u8 param_1, u8 flag) { - g_dComIfG_gameInfo.play.setRemoConStatus(status, param_1, flag); +inline void dComIfGp_setRemoConStatus(u8 status, u8 direction, u8 flag) { + g_dComIfG_gameInfo.play.setRemoConStatus(status, direction, flag); +} + +inline u8 dComIfGp_getRemoConStatusForce() { + return g_dComIfG_gameInfo.play.getRemoConStatusForce(); +} + +inline u8 dComIfGp_getRemoConSetFlagForce() { + return g_dComIfG_gameInfo.play.getRemoConSetFlagForce(); +} + +inline void dComIfGp_setRemoConStatusForce(u8 status, u8 direction, u8 flag) { + g_dComIfG_gameInfo.play.setRemoConStatusForce(status, direction, flag); } inline u8 dComIfGp_getDoStatus() { @@ -3835,8 +3890,8 @@ inline bool dComIfGp_isCStickSetFlag(u8 flag) { return g_dComIfG_gameInfo.play.isCStickSetFlag(flag); } -inline void dComIfGp_setCStickStatus(u8 status, u8 param_1, u8 flag) { - g_dComIfG_gameInfo.play.setCStickStatus(status, param_1, flag); +inline void dComIfGp_setCStickStatus(u8 status, u8 direction, u8 flag) { + g_dComIfG_gameInfo.play.setCStickStatus(status, direction, flag); } inline u8 dComIfGp_getCStickStatusForce() { @@ -3851,8 +3906,8 @@ inline u8 dComIfGp_getCStickSetFlagForce() { return g_dComIfG_gameInfo.play.getCStickSetFlagForce(); } -inline void dComIfGp_setCStickStatusForce(u8 status, u8 param_1, u8 flag) { - g_dComIfG_gameInfo.play.setCStickStatusForce(status, param_1, flag); +inline void dComIfGp_setCStickStatusForce(u8 status, u8 direction, u8 flag) { + g_dComIfG_gameInfo.play.setCStickStatusForce(status, direction, flag); } inline u8 dComIfGp_getSButtonStatus() { @@ -3963,6 +4018,18 @@ inline void dComIfGp_setNunZStatus(u8 param_0, u8 param_1) { g_dComIfG_gameInfo.play.setNunZStatus(param_0, param_1); } +inline u8 dComIfGp_getNunZStatusForce() { + return g_dComIfG_gameInfo.play.getNunZStatusForce(); +} + +inline u8 dComIfGp_getNunZSetFlagForce() { + return g_dComIfG_gameInfo.play.getNunZSetFlagForce(); +} + +inline void dComIfGp_setNunZStatusForce(u8 status, u8 flag) { + g_dComIfG_gameInfo.play.setNunZStatusForce(status, flag); +} + inline u8 dComIfGp_getNunCStatus() { return g_dComIfG_gameInfo.play.getNunCStatus(); } @@ -3971,8 +4038,32 @@ inline bool dComIfGp_isNunCSetFlag(u8 flag) { return g_dComIfG_gameInfo.play.isNunCSetFlag(flag); } -inline void dComIfGp_setNunCStatus(u8 param_0, u8 param_1) { - g_dComIfG_gameInfo.play.setNunCStatus(param_0, param_1); +inline void dComIfGp_setNunCStatus(u8 status, u8 flag) { + g_dComIfG_gameInfo.play.setNunCStatus(status, flag); +} + +inline u8 dComIfGp_getNunCStatusForce() { + return g_dComIfG_gameInfo.play.getNunCStatusForce(); +} + +inline u8 dComIfGp_getNunCSetFlagForce() { + return g_dComIfG_gameInfo.play.getNunCSetFlagForce(); +} + +inline void dComIfGp_setNunCStatusForce(u8 status, u8 flag) { + g_dComIfG_gameInfo.play.setNunCStatusForce(status, flag); +} + +inline u8 dComIfGp_getTouchStatusForce() { + return g_dComIfG_gameInfo.play.getTouchStatusForce(); +} + +inline u8 dComIfGp_getTouchSetFlagForce() { + return g_dComIfG_gameInfo.play.getTouchSetFlagForce(); +} + +inline void dComIfGp_setTouchStatusForce(u8 status) { + g_dComIfG_gameInfo.play.setTouchStatusForce(status); } inline void dComIfGp_setSelectEquipClothes(u8 i_clothNo) { @@ -4099,7 +4190,7 @@ inline void dComIfGp_onOxygenShowFlag() { g_dComIfG_gameInfo.play.setOxygenShowFlag(1); } -inline u8 dComIfGp_2dShowCheck() { +inline bool dComIfGp_2dShowCheck() { return g_dComIfG_gameInfo.play.show2dCheck(); } @@ -4254,7 +4345,7 @@ inline void dComIfGp_setNowVibration(u8 status) { g_dComIfG_gameInfo.play.setNowVibration(status); } -inline u32 dComIfGp_getNowVibration() { +inline u8 dComIfGp_getNowVibration() { return g_dComIfG_gameInfo.play.getNowVibration(); } diff --git a/include/d/d_cursor_mng.h b/include/d/d_cursor_mng.h index d8a84eb381..3d5a18d5b2 100644 --- a/include/d/d_cursor_mng.h +++ b/include/d/d_cursor_mng.h @@ -5,13 +5,13 @@ #include "m_Do/m_Do_graphic.h" #include "m_Re/m_Re_controller_pad.h" -// TODO: putting this here until a more appropriate place is found -extern u8 data_8053a730; - class dCsr_mng_c { +public: struct csr_c; - struct node_c : mDoGph_gInf_c::csr_c { + struct node_c { + virtual ~node_c() {} + BOOL set(u8 i_priority, u8, u16 i_mask); /* 0x04 */ u8 m_priority; @@ -19,12 +19,6 @@ class dCsr_mng_c { /* 0x06 */ u16 m_mask; /* 0x08 */ node_c* m_prev; /* 0x0C */ node_c* m_next; - /* 0x10 */ int m_actor_id; - /* 0x14 */ csr_c* m_csr; - /* 0x18 */ node_c* m_pointed_obj; - }; - - struct obj_c : node_c { }; struct list_c { @@ -40,7 +34,10 @@ class dCsr_mng_c { /* 0x04 */ node_c* m_root; }; - struct bloObj_c { + struct obj_c : node_c { + }; + + struct bloObj_c : obj_c { struct paneObj_c { paneObj_c(void) { m_handle = NULL; @@ -59,13 +56,16 @@ class dCsr_mng_c { }; bloObj_c() { - m_panes = new paneObj_c[1]; m_screen = 0; + m_panes = NULL; + m_pane_num = 0; + m_is_calc = FALSE; + m_pane_handle = NULL; } virtual ~bloObj_c(void); virtual u32 signature(void) const { - return 0x626c6f20; + return 'blo '; } virtual BOOL isInside(s16 i_x, s16 i_y); BOOL create(J2DScreen* i_screen, u16 i_mask, u8 i_priority, u8); @@ -73,7 +73,6 @@ class dCsr_mng_c { void calcPaneObjNum(J2DPane* i_pane); void createPaneObj(paneObj_c** i_panes, J2DPane* i_pane); - /* 0x04 */ u8 field_0x04[0x10 - 0x4]; /* 0x10 */ J2DScreen* m_screen; /* 0x14 */ paneObj_c* m_panes; /* 0x18 */ u16 m_pane_num; @@ -81,18 +80,35 @@ class dCsr_mng_c { /* 0x1C */ J2DPane* m_pane_handle; }; - struct ccObj_c : node_c { + struct ccObj_c : obj_c { virtual ~ccObj_c(void); virtual int signature(void) const { return 'cc '; } virtual BOOL isInside(s16, s16); void set(u16, u8, u8); + + /* 0x10 */ int m_actor_id; + /* 0x14 */ csr_c* m_csr; + /* 0x18 */ node_c* m_pointed_obj; }; struct csr_c : node_c { + csr_c() { + field_0x10 = 0xFF; + field_0x11 = 0; + field_0x12 = 0; + m_csr = NULL; + m_pointed_obj = NULL; + } virtual ~csr_c(void); BOOL set(mDoGph_gInf_c::csr_c* i_csr, u16, u8, u8); + + /* 0x10 */ u8 field_0x10; + /* 0x11 */ u8 field_0x11; + /* 0x12 */ u16 field_0x12; + /* 0x14 */ mDoGph_gInf_c::csr_c* m_csr; + /* 0x18 */ node_c* m_pointed_obj; }; private: diff --git a/include/d/d_item.h b/include/d/d_item.h index 0d379c0578..7b09ea9ddd 100644 --- a/include/d/d_item.h +++ b/include/d/d_item.h @@ -3,6 +3,20 @@ #include +#if PLATFORM_WII +#define SELECT_ITEMS_COUNT 4 +#define SELECT_ITEMS_MAX 4 +#elif PLATFORM_SHIELD +// Shield has some weird code where the Wii item limit of 4 is used e.g. as a loop bound +// despite that version only allowing 2 bound items. We use a separate macro to differentiate +// these usages as being disconnected from the actual item slot count. +#define SELECT_ITEMS_COUNT 2 +#define SELECT_ITEMS_MAX 4 +#else +#define SELECT_ITEMS_COUNT 2 +#define SELECT_ITEMS_MAX 2 +#endif + class dEnemyItem_c { public: static void setItemData(u8* data) { mData = data; } diff --git a/include/d/d_rvl_fb_copy.h b/include/d/d_rvl_fb_copy.h new file mode 100644 index 0000000000..2b14f4dfb3 --- /dev/null +++ b/include/d/d_rvl_fb_copy.h @@ -0,0 +1,6 @@ +#ifndef D_SCREEN_COPY +#define D_SCREEN_COPY + +extern bool g_rvlEnableExtraFramebufferCopy; + +#endif /* D_SCREEN_COPY */ diff --git a/include/d/d_save.h b/include/d/d_save.h index 3bcb4766a0..d90709e6df 100644 --- a/include/d/d_save.h +++ b/include/d/d_save.h @@ -500,7 +500,7 @@ private: class dSv_player_config_c { public: void init(); - u32 checkVibration() const; + u8 checkVibration() const; u8 getSound(); void setSound(u8 i_mode); u8 getVibration(); @@ -639,7 +639,7 @@ public: void onDungeonItemBossKey() { onDungeonItem(BOSS_KEY); } void offDungeonItemBossKey() { offDungeonItem(BOSS_KEY); } s32 isDungeonItemBossKey() const { return isDungeonItem(BOSS_KEY); } - void onStageBossEnemy() { + void onStageBossEnemy() { onDungeonItem(STAGE_BOSS_ENEMY); onDungeonItem(OOCCOO_NOTE); } diff --git a/include/m_Do/m_Do_graphic.h b/include/m_Do/m_Do_graphic.h index ac1931ef1b..d2f9e43b2d 100644 --- a/include/m_Do/m_Do_graphic.h +++ b/include/m_Do/m_Do_graphic.h @@ -59,7 +59,7 @@ public: public: virtual ~csr_c() {} virtual void draw(f32, f32) = 0; - virtual bool isPointer(); + virtual bool isPointer() { return true; } static void particleExecute(); static u32 getBlurID() { return m_blurID; } diff --git a/src/d/d_com_inf_game.cpp b/src/d/d_com_inf_game.cpp index 8dd0118685..c6085579d2 100644 --- a/src/d/d_com_inf_game.cpp +++ b/src/d/d_com_inf_game.cpp @@ -134,7 +134,7 @@ void dComIfG_play_c::setNowVibration(u8 i_vibration) { mItemInfo.mNowVibration = i_vibration; } -u32 dComIfG_play_c::getNowVibration() { +u8 dComIfG_play_c::getNowVibration() { return mItemInfo.mNowVibration; } diff --git a/src/d/d_cursor_mng.cpp b/src/d/d_cursor_mng.cpp index d5586091d1..a97a3d52a7 100644 --- a/src/d/d_cursor_mng.cpp +++ b/src/d/d_cursor_mng.cpp @@ -6,9 +6,6 @@ dCsr_mng_c* dCsr_mng_c::m_myObj; -// TODO: putting this here until a more appropriate place is found -u8 data_8053a730; - void dCsr_mng_c::update_(void) { BOOL is_valid = FALSE; @@ -21,10 +18,10 @@ void dCsr_mng_c::update_(void) { if (is_csr_on == 0) { mDoGph_gInf_c::entryCsr(NULL); - node_c* cur_node = m_csr_list.m_root; + csr_c* cur_node = static_cast(m_csr_list.m_root); while (cur_node != NULL) { - cur_node->m_pointed_obj = 0; - cur_node = cur_node->m_next; + cur_node->m_pointed_obj = NULL; + cur_node = static_cast(cur_node->m_next); } return; @@ -35,36 +32,36 @@ void dCsr_mng_c::update_(void) { int x = pos->x; int y = pos->y; - node_c* cur_node = m_csr_list.m_root; + csr_c* csr_node = static_cast(m_csr_list.m_root); mDoGph_gInf_c::csr_c* csr = NULL; - u16 last_mask = 1; - while (cur_node != NULL) { - cur_node->m_pointed_obj = NULL; + u16 last_mask = 0x1; + while (csr_node != NULL) { + csr_node->m_pointed_obj = NULL; - u16 cur_mask = cur_node->m_mask; - if (!g_dComIfG_gameInfo.play.mItemInfo.mPauseFlag || (cur_node->m_mask & 0x200) == 0) { + u16 cur_mask = csr_node->m_mask; + if (!g_dComIfG_gameInfo.play.mItemInfo.mPauseFlag || (cur_mask & 0x200) == 0) { if (csr == NULL) { - csr = cur_node->m_csr; + csr = csr_node->m_csr; } if (is_valid && last_mask != 0) { last_mask = cur_mask; - if (last_mask != 0) { - node_c* cur_node_2 = m_obj_list.m_root; - while (cur_node_2 != NULL) { - if ((cur_mask & cur_node_2->m_mask) != 0 && - ((bloObj_c*)cur_node_2)->isInside(x, y)) - { - cur_node->m_pointed_obj = cur_node_2; + if (cur_mask != 0) { + node_c* obj_node = m_obj_list.m_root; + u32 mask_temp = (s16)cur_mask; + while (obj_node != NULL) { + if (((u16)mask_temp & obj_node->m_mask) != 0 && + static_cast(obj_node)->isInside(x, y)) { + csr_node->m_pointed_obj = obj_node; } - cur_node_2 = cur_node_2->m_next; + obj_node = obj_node->m_next; } } } } - cur_node = cur_node->m_next; + csr_node = static_cast(csr_node->m_next); } if (!dComIfGs_getOptPointer()) { @@ -82,7 +79,7 @@ void dCsr_mng_c::update_(void) { void dCsr_mng_c::releaseCsr_(csr_c* i_csr) { mDoGph_gInf_c::csr_c* temp_r5 = i_csr->m_csr; - i_csr->m_pointed_obj = 0; + i_csr->m_pointed_obj = NULL; if (temp_r5 != NULL && temp_r5 == mDoGph_gInf_c::m_csr) { mDoGph_gInf_c::entryCsr(NULL); } @@ -90,12 +87,12 @@ void dCsr_mng_c::releaseCsr_(csr_c* i_csr) { } void dCsr_mng_c::insideObjReleaseCheck_(void) { - node_c* cur_node = m_csr_list.m_root; + csr_c* cur_node = (csr_c*)m_csr_list.m_root; while (cur_node != NULL) { if (!m_obj_list.isEntry(cur_node->m_pointed_obj)) { cur_node->m_pointed_obj = NULL; } - cur_node = cur_node->m_next; + cur_node = (csr_c*)cur_node->m_next; } } @@ -219,14 +216,17 @@ dCsr_mng_c::node_c* dCsr_mng_c::list_c::release(node_c* i_node) { } dCsr_mng_c::node_c* dCsr_mng_c::list_c::release(u16 i_mask) { + node_c* new_root; node_c* cur_node = m_root; while (cur_node != NULL) { if (cur_node->m_mask & i_mask) { - cur_node = release(cur_node); + new_root = release(cur_node); } else { - cur_node = cur_node->m_next; + new_root = cur_node->m_next; } + cur_node = new_root; } + return new_root; } BOOL dCsr_mng_c::list_c::isEntry(const node_c* i_node) const { @@ -268,7 +268,7 @@ BOOL dCsr_mng_c::bloObj_c::isInside(s16 i_x, s16 i_y) { } BOOL dCsr_mng_c::bloObj_c::create(J2DScreen* i_screen, u16 i_mask, u8 i_priority, u8 param_3) { - if (!((node_c*)this)->set(i_priority, param_3, i_mask)) { + if (!set(i_priority, param_3, i_mask)) { return FALSE; } m_screen = i_screen; @@ -325,9 +325,8 @@ void dCsr_mng_c::bloObj_c::createPaneObj(paneObj_c** i_panes, J2DPane* i_pane) { u64 info_tag = i_pane->mInfoTag; char* info_start = nullSkip((char*)&info_tag); if (info_start[0] == 0x4E && info_start[1] == 0x5F) { - paneObj_c* pane = *i_panes; *i_panes -= 1; - pane->m_handle = i_pane; + (*i_panes)->m_handle = i_pane; } JSUTreeIterator iter = i_pane->getPaneTree()->getFirstChild(); @@ -342,6 +341,8 @@ BOOL dCsr_mng_c::ccObj_c::isInside(s16 param_0, s16 param_1) { return 0; } + f64 temp = 4503601774854144.0f; + f32 x = (param_0 - mDoGph_gInf_c::getMinXF()) / mDoGph_gInf_c::getWidthF() * 2.0f - 1.0f; f32 y = (param_1 - mDoGph_gInf_c::getMinYF()) / mDoGph_gInf_c::getHeightF() * 2.0f - 1.0f; cXyz sp18; diff --git a/src/d/d_rvl_fb_copy.cpp b/src/d/d_rvl_fb_copy.cpp new file mode 100644 index 0000000000..2948559dbe --- /dev/null +++ b/src/d/d_rvl_fb_copy.cpp @@ -0,0 +1,20 @@ +#include "d/d_rvl_fb_copy.h" + +// This TU's existence is inferred from the following facts: +// - In most versions the below flag symbol is located in .sbss between symbols in d_cursor_mng +// and m_Do_main on most versions +// - The symbol is not used in either of those TUs +// - In DZDE01 an extra TU (d_E3Stage_select06) exists between those two TUs, and the flag symbol +// is located before its .sbss symbols meaning it cannot be in m_Do_main +// - In Wii versions there is a 7-byte gap between the last known symbol in d_cursor_mng and the +// flag symbol, which can only be caused by: +// a) An extra unused 4-byte-aligned symbol in d_cursor_mng (unlikely, the symbol map only +// tends to exclude 1-byte symbols) +// b) 4 extra unused 1-byte symbols in d_cursor_mng prior to the flag symbol (generally seems +// implausible to have that many extra unused vars) +// c) The symbol is contained by the demo-specific TU (seems implausible, doesn't really belong +// there and everything else would need to be guarded for other versions rather than just +// excluding the TU) +// d) An extra TU which forces the flag symbol to be aligned to 8 bytes (most likely reason) + +bool g_rvlEnableExtraFramebufferCopy; diff --git a/src/d/d_s_logo.cpp b/src/d/d_s_logo.cpp index dc89b3c40f..8c2c604c40 100644 --- a/src/d/d_s_logo.cpp +++ b/src/d/d_s_logo.cpp @@ -13,6 +13,7 @@ #include "d/d_com_inf_game.h" #include "d/d_item.h" #include "d/d_map_path_dmap.h" +#include "d/d_rvl_fb_copy.h" #include "m_Do/m_Do_Reset.h" #include "m_Do/m_Do_controller_pad.h" #include "m_Do/m_Do_graphic.h" @@ -936,7 +937,7 @@ dScnLogo_c::~dScnLogo_c() { OS_REPORT("\x1b[31m%d gameHeap->getFreeSize %08x(%d)\n\x1b[m", 1479, mDoExt_getGameHeap()->getFreeSize(), mDoExt_getGameHeap()->getFreeSize()); #if PLATFORM_WII - data_8053a730 = 0; + g_rvlEnableExtraFramebufferCopy = false; #endif } @@ -1077,7 +1078,7 @@ int dScnLogo_c::create() { } #if PLATFORM_WII - data_8053a730 = 1; + g_rvlEnableExtraFramebufferCopy = true; #endif mpHeap = mDoExt_setCurrentHeap(mLogo01Heap); diff --git a/src/d/d_s_play.cpp b/src/d/d_s_play.cpp index b916590d08..7c28afed96 100644 --- a/src/d/d_s_play.cpp +++ b/src/d/d_s_play.cpp @@ -18,6 +18,7 @@ #include "d/d_map_path_dmap.h" #include "d/d_meter2_info.h" #include "d/d_msg_object.h" +#include "d/d_rvl_fb_copy.h" #include "d/d_save_HIO.h" #include "f_op/f_op_draw_iter.h" #include "f_op/f_op_msg_mng.h" @@ -895,7 +896,7 @@ static int dScnPly_Delete(dScnPly_c* i_this) { dComIfGp_init(); #if PLATFORM_WII - data_8053a730 = 0; + g_rvlEnableExtraFramebufferCopy = false; #endif JUTAssertion::setMessageCount(0); @@ -1060,7 +1061,7 @@ static int phase_00(dScnPly_c* i_this) { } #if PLATFORM_WII - data_8053a730 = 1; + g_rvlEnableExtraFramebufferCopy = true; #endif #if DEBUG diff --git a/src/d/d_save.cpp b/src/d/d_save.cpp index aaa59edcf1..f52fd4398d 100644 --- a/src/d/d_save.cpp +++ b/src/d/d_save.cpp @@ -1009,9 +1009,12 @@ void dSv_player_config_c::init() { mPointer = 1; } -u32 dSv_player_config_c::checkVibration() const { +u8 dSv_player_config_c::checkVibration() const { #if PLATFORM_GCN - return JUTGamePad::sRumbleSupported & 0x80000000 ? dComIfGp_getNowVibration() : 0; + if (JUTGamePad::sRumbleSupported & 0x80000000) + return dComIfGp_getNowVibration(); + else + return 0; #else return dComIfGp_getNowVibration(); #endif diff --git a/src/m_Do/m_Do_graphic.cpp b/src/m_Do/m_Do_graphic.cpp index 6e36c6e626..7be8f9eb64 100644 --- a/src/m_Do/m_Do_graphic.cpp +++ b/src/m_Do/m_Do_graphic.cpp @@ -17,6 +17,7 @@ #include "SSystem/SComponent/c_math.h" #include "d/actor/d_a_player.h" #include "d/d_com_inf_game.h" +#include "d/d_rvl_fb_copy.h" #include "d/d_menu_collect.h" #include "d/d_jcam_editor.h" #include "d/d_jpreviewer.h" @@ -1985,7 +1986,7 @@ int mDoGph_Painter() { #endif #if PLATFORM_WII - if (data_8053a730) { + if (g_rvlEnableExtraFramebufferCopy) { GXSetTexCopySrc(0, 0, FB_WIDTH, FB_HEIGHT); GXSetTexCopyDst(FB_WIDTH, FB_HEIGHT, (GXTexFmt)mDoGph_gInf_c::m_fullFrameBufferTimg->format, 0); GXCopyTex(mDoGph_gInf_c::m_fullFrameBufferTex, 0);