From b897ed3ec9b63001ce74411569a087cacc4f23d9 Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Mon, 5 Jan 2026 02:19:14 -0800 Subject: [PATCH] m_Do debug (#3017) * m_Do debug * d_particle fix --- config/ShieldD/splits.txt | 8 +- config/ShieldD/symbols.txt | 90 ++++---- include/CaptureScreen.h | 31 +++ include/JSystem/JHostIO/JORReflexible.h | 3 +- include/JSystem/JKernel/JKRExpHeap.h | 2 +- include/JSystem/JKernel/JKRHeap.h | 6 +- include/JSystem/JKernel/JKRSolidHeap.h | 2 +- include/d/d_com_inf_game.h | 7 + include/d/d_drawlist.h | 4 + include/d/d_jcam_editor.h | 38 ++++ include/d/d_jpreviewer.h | 40 ++++ include/d/d_particle.h | 1 - include/f_ap/f_ap_game.h | 11 +- include/m_Do/m_Do_controller_pad.h | 1 + include/m_Do/m_Do_ext.h | 12 +- include/m_Do/m_Do_machine.h | 2 +- include/m_Do/m_Do_main.h | 1 + src/f_op/f_op_actor.cpp | 4 +- src/m_Do/m_Do_controller_pad.cpp | 51 +++-- src/m_Do/m_Do_ext.cpp | 66 +++--- src/m_Do/m_Do_graphic.cpp | 286 ++++++++++++++++++------ src/m_Do/m_Do_machine.cpp | 209 +++++++++++++---- src/m_Do/m_Do_main.cpp | 33 ++- 23 files changed, 663 insertions(+), 245 deletions(-) create mode 100644 include/d/d_jcam_editor.h create mode 100644 include/d/d_jpreviewer.h diff --git a/config/ShieldD/splits.txt b/config/ShieldD/splits.txt index b3ea4ebc8d..5b6aba600e 100644 --- a/config/ShieldD/splits.txt +++ b/config/ShieldD/splits.txt @@ -17,7 +17,7 @@ m_Do/m_Do_main.cpp: .text start:0x80006880 end:0x8000AF00 .ctors start:0x8062F7C4 end:0x8062F7C8 .data start:0x8065FFA0 end:0x80660CF8 - .sdata start:0x8073F140 end:0x8073F264 + .sdata start:0x8073F140 end:0x8073F260 .sbss start:0x8074C260 end:0x8074C298 .sdata2 start:0x8074D740 end:0x8074D768 .bss start:0x80753500 end:0x80753980 @@ -25,8 +25,8 @@ m_Do/m_Do_main.cpp: m_Do/m_Do_printf.cpp: .text start:0x8000AF00 end:0x8000B8A0 .data start:0x80660CF8 end:0x80660DE8 - .sdata start:0x8073F264 end:0x8073F268 - .sbss start:0x8074C298 end:0x8074C2C4 + .sdata start:0x8073F260 end:0x8073F268 + .sbss start:0x8074C298 end:0x8074C2C0 .bss start:0x80753980 end:0x807541A0 m_Do/m_Do_audio.cpp: @@ -35,7 +35,7 @@ m_Do/m_Do_audio.cpp: .rodata start:0x8062FA20 end:0x8062FA30 .data start:0x80660DE8 end:0x80661190 .sdata start:0x8073F268 end:0x8073F2F0 - .sbss start:0x8074C2C4 end:0x8074C310 + .sbss start:0x8074C2C0 end:0x8074C310 .bss start:0x807541A0 end:0x80755570 m_Do/m_Do_controller_pad.cpp: diff --git a/config/ShieldD/symbols.txt b/config/ShieldD/symbols.txt index 7bc5653927..a40e70ba33 100644 --- a/config/ShieldD/symbols.txt +++ b/config/ShieldD/symbols.txt @@ -56923,7 +56923,7 @@ __RTTI__16JOREventListener = .sdata:0x8073F1D8; // type:object size:0x8 scope:gl @STRING@__ml__Q37JGadget40TLinkList<24JOREventCallbackListNode,-4>8iteratorCFv@2 = .sdata:0x8073F248; // type:object size:0x5 scope:local data:string hash:0x77A6A5B2 dhash:0xE9E906E0 @STRING@__ml__Q37JGadget40TLinkList<24JOREventCallbackListNode,-4>8iteratorCFv@0 = .sdata:0x8073F250; // type:object size:0x5 scope:local data:string hash:0x77A6A5B0 dhash:0xE9E906E0 @STRING@showAssert__12JUTAssertionFUlPCciPCc = .sdata:0x8073F258; // type:object size:0x3 scope:local data:string hash:0xB5B49325 dhash:0x8A51682D -lbl_8073F260 = .sdata:0x8073F260; // type:object size:0x4 hash:0xDEEFD0FB +print_callerPCLevel = .sdata:0x8073F260; // type:object size:0x1 hash:0xDEEFD0FB @74060 = .sdata:0x8073F264; // type:object size:0x4 scope:local hash:0xA0402070 @114385 = .sdata:0x8073F268; // type:object size:0x5 scope:local data:string hash:0xAC930B0F @114386 = .sdata:0x8073F270; // type:object size:0x7 scope:local data:string hash:0xAC930B0C @@ -56943,7 +56943,7 @@ __RTTI__28JASGlobalInstance<8Z2SeqMgr> = .sdata:0x8073F2D0; // type:object size: __RTTI__7Z2SeMgr = .sdata:0x8073F2E0; // type:object size:0x8 scope:global hash:0x4F5CF78F dhash:0x2CFD2898 __RTTI__27JASGlobalInstance<7Z2SeMgr> = .sdata:0x8073F2E8; // type:object size:0x8 scope:global hash:0x2E788E52 dhash:0xBD7E1260 @132349 = .sdata:0x8073F2F0; // type:object size:0x5 scope:local data:string hash:0xACB8534B -lbl_8073F2F5 = .sdata:0x8073F2F5; // type:object size:0x1 data:byte hash:0xB9EF6A6E dhash:0xAB6702CC +mWide__13mDoGph_gInf_c = .sdata:0x8073F2F5; // type:object size:0x1 data:byte hash:0xB9EF6A6E dhash:0xAB6702CC m_aspect__13mDoGph_gInf_c = .sdata:0x8073F2F8; // type:object size:0x4 scope:global align:4 data:float hash:0x3090CED9 dhash:0x81D7591B m_scale__13mDoGph_gInf_c = .sdata:0x8073F2FC; // type:object size:0x4 scope:global align:4 data:float hash:0xE062C531 dhash:0x713B30F3 m_invScale__13mDoGph_gInf_c = .sdata:0x8073F300; // type:object size:0x4 scope:global align:4 data:float hash:0xB7C31840 dhash:0xEBCB59E2 @@ -57084,8 +57084,8 @@ __RTTI__19JPAParticleCallBack = .sdata:0x8073F690; // type:object size:0x8 scope @115063 = .sdata:0x8073F6D8; // type:object size:0x5 scope:local data:string hash:0xAC938265 @115212 = .sdata:0x8073F6E0; // type:object size:0x2 scope:local data:string hash:0xAC938A01 lbl_8073F6E8 = .sdata:0x8073F6E8; // type:object size:0x1 data:byte hash:0xC4F99235 dhash:0x36EB3D35 -lbl_8073F6E9 = .sdata:0x8073F6E9; // type:object size:0x1 data:byte hash:0xDA67CD23 dhash:0x36F37423 -lbl_8073F6EA = .sdata:0x8073F6EA; // type:object size:0x1 data:byte hash:0x3EAABB7D dhash:0x36F3743D +mCaptureScreenDivH__11fapGm_HIO_c = .sdata:0x8073F6E9; // type:object size:0x1 data:byte hash:0xDA67CD23 dhash:0x36F37423 +mCaptureScreenDivV__11fapGm_HIO_c = .sdata:0x8073F6EA; // type:object size:0x1 data:byte hash:0x3EAABB7D dhash:0x36F3743D lbl_8073F6EB = .sdata:0x8073F6EB; // type:object size:0x1 data:byte hash:0x2C072CEE dhash:0x37B0404E @114738 = .sdata:0x8073F6EC; // type:object size:0x4 scope:local data:string hash:0xAC931B2D @114739 = .sdata:0x8073F6F0; // type:object size:0x4 scope:local data:string hash:0xAC931B2C @@ -64088,39 +64088,39 @@ __float_nan = .sdata:0x8074C238; // type:object size:0x4 scope:global align:4 da __float_huge = .sdata:0x8074C23C; // type:object size:0x4 scope:global align:4 data:float hash:0x05E96515 __double_huge = .sdata:0x8074C240; // type:object size:0x8 scope:global align:8 data:double hash:0xF83ACA30 lbl_8074C248 = .sdata:0x8074C248; // type:object size:0x1 data:byte hash:0x95F85801 -lbl_8074C260 = .sbss:0x8074C260; // type:object size:0x1 data:byte hash:0xC2BBDF96 -lbl_8074C261 = .sbss:0x8074C261; // type:object size:0x1 data:byte hash:0x8DBD5017 +memorycheck_check_frame = .sbss:0x8074C260; // type:object size:0x1 data:byte hash:0xC2BBDF96 +fillcheck_check_frame = .sbss:0x8074C261; // type:object size:0x1 data:byte hash:0x8DBD5017 sPowerOnTime__7mDoMain = .sbss:0x8074C268; // type:object size:0x8 scope:global data:4byte hash:0x268FA347 dhash:0xF9564990 sHungUpTime__7mDoMain = .sbss:0x8074C270; // type:object size:0x8 scope:global data:4byte hash:0xDF30E828 dhash:0x64C8059F -lbl_8074C278 = .sbss:0x8074C278; // type:object size:0x1 data:byte hash:0xAE961E8B -lbl_8074C279 = .sbss:0x8074C279; // type:object size:0x1 data:byte hash:0x5BC5D1B2 -lbl_8074C27A = .sbss:0x8074C27A; // type:object size:0x1 data:byte hash:0x9EBDA68D -lbl_8074C27B = .sbss:0x8074C27B; // type:object size:0x1 data:byte hash:0xEF85C4EB -lbl_8074C27C = .sbss:0x8074C27C; // type:object size:0x1 data:byte hash:0x85493AEA -lbl_8074C27D = .sbss:0x8074C27D; // type:object size:0x1 data:byte hash:0xC10E9EB2 +mDisplayHeapSize = .sbss:0x8074C278; // type:object size:0x1 data:byte hash:0xAE961E8B +mReportDisable = .sbss:0x8074C279; // type:object size:0x1 data:byte hash:0x5BC5D1B2 +mSelectHeapBar = .sbss:0x8074C27A; // type:object size:0x1 data:byte hash:0x9EBDA68D +mVisibleHeapBar = .sbss:0x8074C27B; // type:object size:0x1 data:byte hash:0xEF85C4EB +mPrintFrameLine = .sbss:0x8074C27C; // type:object size:0x1 data:byte hash:0x85493AEA +mCheckHeap = .sbss:0x8074C27D; // type:object size:0x1 data:byte hash:0xC10E9EB2 mDoMain_HIO = .sbss:0x8074C280; // type:object size:0x8 scope:global hash:0x5C34CFD9 @LOCAL@Debug_console__FUl@console_scroll@1 = .sbss:0x8074C288; // type:object size:0x4 scope:local align:4 data:float hash:0xBF7B851A dhash:0x7086F27F @LOCAL@main01__Fv@frame = .sbss:0x8074C28C; // type:object size:0x4 scope:local data:4byte hash:0xA8D047CF dhash:0x4B63C2BB instance__29JHIComPortManager<9JHICmnMem> = .sbss:0x8074C290; // type:object size:0x4 scope:global data:4byte hash:0x3E85C712 dhash:0x073E21A0 -print_initialized = .sbss:0x8074C298; // type:object size:0x1 data:byte hash:0xAA4B677C -lbl_8074C299 = .sbss:0x8074C299; // type:object size:0x1 data:byte hash:0x732354FB -lbl_8074C29A = .sbss:0x8074C29A; // type:object size:0x1 data:byte hash:0x192C6F69 -lbl_8074C29B = .sbss:0x8074C29B; // type:object size:0x1 data:byte hash:0xD31C3E46 -lbl_8074C29C = .sbss:0x8074C29C; // type:object size:0x1 data:byte hash:0x58778549 +__OSReport_disable = .sbss:0x8074C298; // type:object size:0x1 data:byte hash:0xAA4B677C +__OSReport_Error_disable = .sbss:0x8074C299; // type:object size:0x1 data:byte hash:0x732354FB +__OSReport_Warning_disable = .sbss:0x8074C29A; // type:object size:0x1 data:byte hash:0x192C6F69 +__OSReport_System_disable = .sbss:0x8074C29B; // type:object size:0x1 data:byte hash:0xD31C3E46 +__OSReport_enable = .sbss:0x8074C29C; // type:object size:0x1 data:byte hash:0x58778549 __OSReport_MonopolyThread = .sbss:0x8074C2A0; // type:object size:0x4 scope:global data:4byte hash:0x5152D00F -lbl_8074C2A4 = .sbss:0x8074C2A4; // type:object size:0x1 data:byte hash:0x5220DD69 -lbl_8074C2A5 = .sbss:0x8074C2A5; // type:object size:0x1 data:byte hash:0x506935B7 -lbl_8074C2A6 = .sbss:0x8074C2A6; // type:object size:0x1 hash:0x3BB70A48 -lbl_8074C2A7 = .sbss:0x8074C2A7; // type:object size:0x1 hash:0x583CBD0D +print_mutex_initialized = .sbss:0x8074C2A4; // type:object size:0x1 data:byte hash:0x5220DD69 +print_highPriority = .sbss:0x8074C2A5; // type:object size:0x1 data:byte hash:0x506935B7 +print_threadID = .sbss:0x8074C2A6; // type:object size:0x1 hash:0x3BB70A48 +print_callerPC = .sbss:0x8074C2A7; // type:object size:0x1 hash:0x583CBD0D print_counts = .sbss:0x8074C2A8; // type:object size:0x4 scope:global data:4byte hash:0x0C25061B print_errors = .sbss:0x8074C2AC; // type:object size:0x4 scope:global data:4byte hash:0x123F5FA0 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 -lbl_8074C2B8 = .sbss:0x8074C2B8; // type:object size:0x1 data:byte hash:0xBF9D0727 +print_initialized = .sbss:0x8074C2B8; // type:object size:0x1 data:byte hash:0xBF9D0727 lbl_8074C2B9 = .sbss:0x8074C2B9; // type:object size:0x7 data:byte hash:0xB0FDA7F8 -lbl_8074C2C0 = .sbss:0x8074C2C0; // type:object size:0x1 data:byte hash:0x694E5028 dhash:0x0978C44E -lbl_8074C2C1 = .sbss:0x8074C2C1; // type:object size:0x1 data:byte hash:0x842F0E27 dhash:0x44515221 -lbl_8074C2C2 = .sbss:0x8074C2C2; // type:object size:0x1 data:byte hash:0xB5B466D4 dhash:0x04485F72 +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 g_mDoAud_audioHeap = .sbss:0x8074C2C4; // type:object size:0x4 scope:global data:4byte hash:0xB286EBBE l_affCommand = .sbss:0x8074C2C8; // type:object size:0x4 scope:global data:4byte hash:0x527CFA30 l_arcCommand = .sbss:0x8074C2CC; // type:object size:0x4 scope:global data:4byte hash:0xD9970F01 @@ -64152,13 +64152,13 @@ mFadeRate__13mDoGph_gInf_c = .sbss:0x8074C330; // type:object size:0x4 scope:glo mFadeSpeed__13mDoGph_gInf_c = .sbss:0x8074C334; // type:object size:0x4 scope:global align:4 data:float hash:0x32A55ED7 dhash:0xB8023455 mBackColor__13mDoGph_gInf_c = .sbss:0x8074C338; // type:object size:0x4 scope:global hash:0xE3382340 dhash:0xFFA7FDE2 mFadeColor__13mDoGph_gInf_c = .sbss:0x8074C33C; // type:object size:0x4 scope:global data:byte hash:0xCF624FAD dhash:0xB920E1EF -lbl_8074C340 = .sbss:0x8074C340; // type:object size:0x1 data:byte hash:0x8060A1F6 dhash:0x97199254 -lbl_8074C341 = .sbss:0x8074C341; // type:object size:0x1 data:byte hash:0xAEFC12D8 dhash:0x970ECC7A -lbl_8074C342 = .sbss:0x8074C342; // type:object size:0x1 data:byte hash:0x17ED86D0 dhash:0x64BC5A72 -lbl_8074C343 = .sbss:0x8074C343; // type:object size:0x1 data:byte hash:0x833AD687 dhash:0x1FCE5685 +mBlureFlag__13mDoGph_gInf_c = .sbss:0x8074C340; // type:object size:0x1 data:byte hash:0x8060A1F6 dhash:0x97199254 +mBlureRate__13mDoGph_gInf_c = .sbss:0x8074C341; // type:object size:0x1 data:byte hash:0xAEFC12D8 dhash:0x970ECC7A +mFade__13mDoGph_gInf_c = .sbss:0x8074C342; // type:object size:0x1 data:byte hash:0x17ED86D0 dhash:0x64BC5A72 +mAutoForcus__13mDoGph_gInf_c = .sbss:0x8074C343; // type:object size:0x1 data:byte hash:0x833AD687 dhash:0x1FCE5685 lbl_8074C344 = .sbss:0x8074C344; // type:object size:0x1 data:byte hash:0x21FC0675 dhash:0x0CE64537 m_blurID__Q213mDoGph_gInf_c5csr_c = .sbss:0x8074C348; // type:object size:0x4 scope:global data:4byte hash:0x847B8725 dhash:0x564F5EB1 -lbl_8074C34C = .sbss:0x8074C34C; // type:object size:0x1 data:byte hash:0xE004A661 dhash:0xBFC539A3 +mWideZoom__13mDoGph_gInf_c = .sbss:0x8074C34C; // type:object size:0x1 data:byte hash:0xE004A661 dhash:0xBFC539A3 m_minX__13mDoGph_gInf_c = .sbss:0x8074C350; // type:object size:0x4 scope:global data:4byte hash:0x148AEC1B dhash:0xFBA4BE99 m_minY__13mDoGph_gInf_c = .sbss:0x8074C354; // type:object size:0x4 scope:global data:4byte hash:0x3CEC7A3A dhash:0xFBA4BE98 m_minXF__13mDoGph_gInf_c = .sbss:0x8074C358; // type:object size:0x4 scope:global align:4 data:float hash:0x56FA6CBD dhash:0x703C91FF @@ -64182,9 +64182,9 @@ archiveHeapErrors = .sbss:0x8074C398; // type:object size:0x4 scope:global data: unknownHeapErrors = .sbss:0x8074C39C; // type:object size:0x4 scope:global data:4byte hash:0x6BEBABBA heapErrors = .sbss:0x8074C3A0; // type:object size:0x4 scope:global data:4byte hash:0xAD85E432 @LOCAL@myGetHeapTypeByString__FP7JKRHeap@tmpString = .sbss:0x8074C3A4; // type:object size:0x5 scope:local data:byte hash:0x34A07792 dhash:0xEB3242A8 -lbl_8074C3A9 = .sbss:0x8074C3A9; // type:object size:0x1 data:byte hash:0x355216F6 dhash:0xC99D7D59 -lbl_8074C3AA = .sbss:0x8074C3AA; // type:object size:0x1 data:byte hash:0xFDF68EEF dhash:0xC99D7D59 -lbl_8074C3AB = .sbss:0x8074C3AB; // type:object size:0x1 data:byte hash:0x15E8B591 dhash:0xC99D7D59 +@LOCAL@developKeyCheck__FUlUl@key_link = .sbss:0x8074C3A9; // type:object size:0x1 data:byte hash:0x355216F6 dhash:0xC99D7D59 +@LOCAL@developKeyCheck__FUlUl@key_ganon@0 = .sbss:0x8074C3AA; // type:object size:0x1 data:byte hash:0xFDF68EEF dhash:0xC99D7D59 +@LOCAL@developKeyCheck__FUlUl@key_zelda@1 = .sbss:0x8074C3AB; // type:object size:0x1 data:byte hash:0x15E8B591 dhash:0xC99D7D59 @LOCAL@exceptionNNGCReadPad__FPUlPUl@l_oldButton@0 = .sbss:0x8074C3AC; // type:object size:0x4 scope:local data:4byte hash:0x50F85B88 dhash:0x8D7B3DDD mDoMtx_stack = .sbss:0x8074C3B0; // type:object size:0x1 scope:global hash:0x2AB168B3 CurrentHeapAdjustVerbose__6mDoExt = .sbss:0x8074C3B8; // type:object size:0x1 data:byte hash:0x60980213 dhash:0x3EBAE505 @@ -64216,10 +64216,10 @@ sFirst__16FixedMemoryCheck = .sbss:0x8074C418; // type:object size:0x4 scope:glo mSystemFar__14mDoLib_clipper = .sbss:0x8074C420; // type:object size:0x4 scope:global align:4 data:float hash:0x5BDDFAD2 dhash:0x3BFD5D57 mFovyRate__14mDoLib_clipper = .sbss:0x8074C424; // type:object size:0x4 scope:global align:4 data:float hash:0x73CD1106 dhash:0x00162BE3 mResetData__6mDoRst = .sbss:0x8074C428; // type:object size:0x4 scope:global data:4byte hash:0x55C17868 dhash:0x9A2A045E -lbl_8074C430 = .sbss:0x8074C430; // type:object size:0x1 data:byte hash:0x19BE1E2E dhash:0xD42015B7 -lbl_8074C431 = .sbss:0x8074C431; // type:object size:0x1 data:byte hash:0xCE8E7825 dhash:0xA822CCBC -lbl_8074C432 = .sbss:0x8074C432; // type:object size:0x1 data:byte hash:0xCBBFFD36 dhash:0x283B9E2F -lbl_8074C433 = .sbss:0x8074C433; // type:object size:0x1 hash:0x5096A6E1 dhash:0x1F2BBC78 +verbose__9mDoDvdThd = .sbss:0x8074C430; // type:object size:0x1 data:byte hash:0x19BE1E2E dhash:0xD42015B7 +DVDLogoMode__9mDoDvdThd = .sbss:0x8074C431; // type:object size:0x1 data:byte hash:0xCE8E7825 dhash:0xA822CCBC +SyncWidthSound__9mDoDvdThd = .sbss:0x8074C432; // type:object size:0x1 data:byte hash:0xCBBFFD36 dhash:0x283B9E2F +Report_DVDRead__9mDoDvdThd = .sbss:0x8074C433; // type:object size:0x1 hash:0x5096A6E1 dhash:0x1F2BBC78 BootInfo__10mDoDvdHack = .sbss:0x8074C434; // type:object size:0x4 scope:global data:4byte hash:0x602B2CCD dhash:0x0350F38C FstStart__10mDoDvdHack = .sbss:0x8074C438; // type:object size:0x4 scope:global data:4byte hash:0xB059FB54 dhash:0x87146F95 FstStringStart__10mDoDvdHack = .sbss:0x8074C43C; // type:object size:0x4 scope:global data:4byte hash:0x56901DA1 dhash:0x76F925E0 @@ -64242,7 +64242,7 @@ lbl_8074C468 = .sbss:0x8074C468; // type:object size:0x1 data:byte hash:0xBABF0D cDyl_Initialized = .sbss:0x8074C46C; // type:object size:0x4 scope:global data:4byte hash:0x4F14A2E4 cDyl_DVD = .sbss:0x8074C470; // type:object size:0x4 scope:global data:4byte hash:0x12A4A3DE lbl_8074C478 = .sbss:0x8074C478; // type:object size:0x1 data:byte hash:0x212A8642 dhash:0x9C6E1C22 -lbl_8074C479 = .sbss:0x8074C479; // type:object size:0x1 data:byte hash:0x911301CA dhash:0x705BB8AA +m_CpuTimerOff__11fapGm_HIO_c = .sbss:0x8074C479; // type:object size:0x1 data:byte hash:0x911301CA dhash:0x705BB8AA lbl_8074C47A = .sbss:0x8074C47A; // type:object size:0x1 data:byte hash:0xDE8007C6 dhash:0x7D1A2EE6 m_CpuTimerTick__11fapGm_HIO_c = .sbss:0x8074C47C; // type:object size:0x4 scope:global data:4byte hash:0x1D284173 dhash:0x706361F3 mCaptureScreen__11fapGm_HIO_c = .sbss:0x8074C480; // type:object size:0x4 scope:global data:4byte hash:0x440BFED0 dhash:0x751F8370 @@ -64252,8 +64252,8 @@ mCaptureScreenWidth__11fapGm_HIO_c = .sbss:0x8074C48A; // type:object size:0x2 s mCaptureScreenHeight__11fapGm_HIO_c = .sbss:0x8074C48C; // type:object size:0x2 scope:global data:2byte hash:0xE990D42F dhash:0xCAB4FC6F mCaptureScreenLinePf__11fapGm_HIO_c = .sbss:0x8074C48E; // type:object size:0x2 scope:global data:2byte hash:0x45377208 dhash:0xD3358B28 mCaptureScreenLineNum__11fapGm_HIO_c = .sbss:0x8074C490; // type:object size:0x2 scope:global data:2byte hash:0xCC174908 dhash:0x39E708E8 -lbl_8074C492 = .sbss:0x8074C492; // type:object size:0x1 data:byte hash:0x56EDE2EE dhash:0x36F65A0E -lbl_8074C493 = .sbss:0x8074C493; // type:object size:0x1 data:byte hash:0xDA2ADA30 dhash:0x36F65A10 +mCaptureScreenNumH__11fapGm_HIO_c = .sbss:0x8074C492; // type:object size:0x1 data:byte hash:0x56EDE2EE dhash:0x36F65A0E +mCaptureScreenNumV__11fapGm_HIO_c = .sbss:0x8074C493; // type:object size:0x1 data:byte hash:0xDA2ADA30 dhash:0x36F65A10 lbl_8074C494 = .sbss:0x8074C494; // type:object size:0x1 data:byte hash:0xA9B59EC0 dhash:0xA12DE4E0 mPriorityMaximum__19print_error_check_c = .sbss:0x8074C498; // type:object size:0x1 data:byte hash:0xE0AE7E09 dhash:0x4F24BEA1 mPrintDisable__19print_error_check_c = .sbss:0x8074C499; // type:object size:0x1 data:byte hash:0xC93122F6 dhash:0x62D5041E @@ -64308,7 +64308,7 @@ lbl_8074C580 = .sbss:0x8074C580; // type:object size:0x1 data:byte hash:0x3F91BE mArcBankName__20dStage_roomControl_c = .sbss:0x8074C584; // type:object size:0x4 scope:global data:4byte hash:0x885DF1A0 dhash:0xD2AA5D02 mArcBankData__20dStage_roomControl_c = .sbss:0x8074C588; // type:object size:0x4 scope:global data:4byte hash:0xF1AABD97 dhash:0xD2A70575 m_roomDzs__20dStage_roomControl_c = .sbss:0x8074C590; // type:object size:0x8 scope:global hash:0x67101B7C dhash:0x0B10A8BE -lbl_8074C598 = .sbss:0x8074C598; // type:object size:0x1 data:byte hash:0x0FE1C5F9 dhash:0x486303FB +mNoArcBank__20dStage_roomControl_c = .sbss:0x8074C598; // type:object size:0x1 data:byte hash:0x0FE1C5F9 dhash:0x486303FB mMySelfPointer__10dMap_HIO_c = .sbss:0x8074C5A0; // type:object size:0x4 scope:global data:4byte hash:0x1A38E60F dhash:0x9D3A05CE m_res_src_p__10dMap_HIO_c = .sbss:0x8074C5A4; // type:object size:0x4 scope:global data:4byte hash:0x3D5090F5 dhash:0xF541D914 m_res__22dMap_HIO_prm_res_dst_s = .sbss:0x8074C5A8; // type:object size:0x4 scope:global data:4byte hash:0xD26B2581 dhash:0x3C11EE61 @@ -64594,13 +64594,13 @@ g_msg_unit = .sbss:0x8074CA28; // type:object size:0x4 scope:global hash:0x2DF27 lbl_8074CA30 = .sbss:0x8074CA30; // type:object size:0x1 data:byte hash:0xDEF1B632 dOvlpFd_execute_f = .sbss:0x8074CA38; // type:object size:0x4 scope:global data:4byte hash:0x3CC65A9F g_LogHIO = .sbss:0x8074CA40; // type:object size:0x8 scope:global hash:0xE945B397 -lbl_8074CA48 = .sbss:0x8074CA48; // type:object size:0x1 data:byte hash:0x9DFC8DF2 dhash:0xE09EDBD3 +mOpeningCut__10dScnLogo_c = .sbss:0x8074CA48; // type:object size:0x1 data:byte hash:0x9DFC8DF2 dhash:0xE09EDBD3 lbl_8074CA49 = .sbss:0x8074CA49; // type:object size:0x1 data:byte hash:0x1236F8BB dhash:0x544758AC g_playerKind = .sbss:0x8074CA50; // type:object size:0x4 scope:global data:4byte hash:0x5D97F186 g_debugHpMode = .sbss:0x8074CA54; // type:object size:0x4 scope:global data:4byte hash:0x6F1EFA77 g_horsePosInit = .sbss:0x8074CA58; // type:object size:0x4 scope:global data:4byte hash:0x4285DC88 cursolStageName__10dScnMenu_c = .sbss:0x8074CA60; // type:object size:0x8 scope:global data:byte hash:0x50155B86 dhash:0x49261767 -lbl_8074CA68 = .sbss:0x8074CA68; // type:object size:0x1 data:byte hash:0x30DDAE9D dhash:0x1C912FBC +m_error_flags__10dScnMenu_c = .sbss:0x8074CA68; // type:object size:0x1 data:byte hash:0x30DDAE9D dhash:0x1C912FBC lbl_8074CA69 = .sbss:0x8074CA69; // type:object size:0x1 data:byte hash:0x63AE7904 dhash:0x6FB32EC5 m_autoCursolID__10dScnMenu_c = .sbss:0x8074CA6C; // type:object size:0x4 scope:global data:4byte hash:0x3A8D7EB5 dhash:0x1EF4BE34 m_autoGroupPoint__10dScnMenu_c = .sbss:0x8074CA70; // type:object size:0x4 scope:global data:4byte hash:0x548FE15F dhash:0xD7C99ADE @@ -64638,7 +64638,7 @@ lbl_8074CAF4 = .sbss:0x8074CAF4; // type:object size:0x1 data:byte hash:0x65D790 mFirst__24DynamicModuleControlBase = .sbss:0x8074CAF8; // type:object size:0x4 scope:global data:4byte hash:0x7A4D7869 dhash:0x286EBE4F mLast__24DynamicModuleControlBase = .sbss:0x8074CAFC; // type:object size:0x4 scope:global data:4byte hash:0x9730AE79 dhash:0xA427AC7F m_heap__24DynamicModuleControlBase = .sbss:0x8074CB00; // type:object size:0x4 scope:global data:4byte hash:0x03390490 dhash:0x27E5FEB6 -lbl_8074CB04 = .sbss:0x8074CB04; // type:object size:0x4 hash:0xA60021A4 dhash:0xCF20E6E2 +verbose__24DynamicModuleControlBase = .sbss:0x8074CB04; // type:object size:0x1 hash:0xA60021A4 dhash:0xCF20E6E2 sAllocBytes__20DynamicModuleControl = .sbss:0x8074CB08; // type:object size:0x4 scope:global data:4byte hash:0x0026CC68 dhash:0x7AE869CA sArchive__20DynamicModuleControl = .sbss:0x8074CB0C; // type:object size:0x4 scope:global data:4byte hash:0x8F5167FE dhash:0x63B1595C sFileCache__20DynamicModuleControl = .sbss:0x8074CB10; // type:object size:0x4 scope:global data:4byte hash:0xAFDE7EB6 dhash:0x9BB1DC14 @@ -64895,7 +64895,7 @@ sCallback__Q210JUTGamePad13C3ButtonReset = .sbss:0x8074CFB8; // type:object size sCallbackArg__Q210JUTGamePad13C3ButtonReset = .sbss:0x8074CFBC; // type:object size:0x4 scope:global data:4byte hash:0xCC5C4708 dhash:0x77A84D68 sThreshold__Q210JUTGamePad13C3ButtonReset = .sbss:0x8074CFC0; // type:object size:0x8 scope:global data:4byte hash:0xFCCCB7E2 dhash:0xE2BF2EC2 lbl_8074CFC8 = .sbss:0x8074CFC8; // type:object size:0x1 data:byte hash:0xBD6B48CC dhash:0x498A7ECC -lbl_8074CFC9 = .sbss:0x8074CFC9; // type:object size:0x1 data:byte hash:0x878FC37B dhash:0xB3FB803B +sResetOccurred__Q210JUTGamePad13C3ButtonReset = .sbss:0x8074CFC9; // type:object size:0x1 data:byte hash:0x878FC37B dhash:0xB3FB803B sResetOccurredPort__Q210JUTGamePad13C3ButtonReset = .sbss:0x8074CFCC; // type:object size:0x4 scope:global data:4byte hash:0xEAB52F22 dhash:0x4A01E002 sErrorManager__12JUTException = .sbss:0x8074CFD0; // type:object size:0x4 scope:global data:4byte hash:0x6DF35642 dhash:0x528F3581 sPreUserCallback__12JUTException = .sbss:0x8074CFD4; // type:object size:0x4 scope:global data:4byte hash:0xADFB8956 dhash:0x5E579095 diff --git a/include/CaptureScreen.h b/include/CaptureScreen.h index 1f843da9aa..8ae80ab064 100644 --- a/include/CaptureScreen.h +++ b/include/CaptureScreen.h @@ -3,6 +3,37 @@ #include "JSystem/JFramework/JFWDisplay.h" +class CProjectionDivider { +public: + /* 0x00 */ f32 field_0x0; + /* 0x04 */ f32 field_0x4; + /* 0x08 */ f32 field_0x8; + /* 0x0C */ f32 field_0xc; + /* 0x10 */ f32 field_0x10; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ s32 field_0x18; + /* 0x1C */ s32 field_0x1c; + + CProjectionDivider(s32, s32); + virtual ~CProjectionDivider() {} + f32 calcDivRatioH(s32) const; + f32 calcDivRatioV(s32) const; +}; + +class CPerspDivider : public CProjectionDivider { +public: + CPerspDivider(const Mtx44&, s32, s32); + virtual ~CPerspDivider() {} + void divide(Mtx44&, s32, s32) const; +}; + +class COrthoDivider : public CProjectionDivider { +public: + COrthoDivider(const Mtx44&, s32, s32); + virtual ~COrthoDivider() {} + void divide(Mtx44&, s32, s32) const; +}; + class CaptureScreen { public: CaptureScreen(const JFWDisplay*); diff --git a/include/JSystem/JHostIO/JORReflexible.h b/include/JSystem/JHostIO/JORReflexible.h index 4789cfd202..a0e0aeaaa3 100644 --- a/include/JSystem/JHostIO/JORReflexible.h +++ b/include/JSystem/JHostIO/JORReflexible.h @@ -39,6 +39,7 @@ struct JORServer; class JOREventListener { public: #if DEBUG + JOREventListener() {} virtual void listenPropertyEvent(const JORPropertyEvent*) = 0; #endif }; @@ -46,7 +47,7 @@ public: class JORReflexible : public JOREventListener { public: #if DEBUG - JORReflexible(); + JORReflexible() {} static JORServer* getJORServer(); virtual void listenPropertyEvent(const JORPropertyEvent*); diff --git a/include/JSystem/JKernel/JKRExpHeap.h b/include/JSystem/JKernel/JKRExpHeap.h index 309b81f29a..1535ba757b 100644 --- a/include/JSystem/JKernel/JKRExpHeap.h +++ b/include/JSystem/JKernel/JKRExpHeap.h @@ -119,7 +119,7 @@ inline JKRExpHeap* JKRCreateExpHeap(u32 size, JKRHeap* parent, bool errorFlag) { return JKRExpHeap::create(size, parent, errorFlag); } -inline void JKRDestroyExpHeap(JKRHeap* heap) { +inline void JKRDestroyExpHeap(JKRExpHeap* heap) { heap->destroy(); } diff --git a/include/JSystem/JKernel/JKRHeap.h b/include/JSystem/JKernel/JKRHeap.h index 650ee57663..ec9ca10497 100644 --- a/include/JSystem/JKernel/JKRHeap.h +++ b/include/JSystem/JKernel/JKRHeap.h @@ -108,10 +108,7 @@ public: } } - JKRHeap* getParent() { - JSUTree* parent = mChildTree.getParent(); - return parent->getObject(); - } + JKRHeap* getParent() { return mChildTree.getParent()->getObject(); } JSUTree& getHeapTree() { return mChildTree; } void appendDisposer(JKRDisposer* disposer) { mDisposerList.append(&disposer->mLink); } @@ -119,7 +116,6 @@ public: void lock() const { OSLockMutex(const_cast(&mMutex)); } void unlock() const { OSUnlockMutex(const_cast(&mMutex)); } u32 getHeapSize() { return mSize; } - u8 getCurrentGroupId() { return 0; } protected: /* 0x00 */ // vtable diff --git a/include/JSystem/JKernel/JKRSolidHeap.h b/include/JSystem/JKernel/JKRSolidHeap.h index 1897fd5aec..a14fd915fe 100644 --- a/include/JSystem/JKernel/JKRSolidHeap.h +++ b/include/JSystem/JKernel/JKRSolidHeap.h @@ -67,7 +67,7 @@ inline JKRSolidHeap* JKRCreateSolidHeap(u32 param_0, JKRHeap* heap, bool param_2 return JKRSolidHeap::create(param_0, heap, param_2); } -inline void JKRDestroySolidHeap(JKRHeap* heap) { +inline void JKRDestroySolidHeap(JKRSolidHeap* heap) { heap->destroy(); } diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index f30e2bbee5..bf1523042c 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -4198,6 +4198,13 @@ inline void dComIfGd_drawListItem3d() { g_dComIfG_gameInfo.drawlist.drawXluListItem3d(); } +# if VERSION > VERSION_GCN_JPN +inline void dComIfGd_drawListCursor() { + g_dComIfG_gameInfo.drawlist.drawOpaListCursor(); + g_dComIfG_gameInfo.drawlist.drawXluListCursor(); +} +#endif + inline void dComIfGd_reset() { g_dComIfG_gameInfo.drawlist.reset(); } diff --git a/include/d/d_drawlist.h b/include/d/d_drawlist.h index 38b4861bcb..8b77ee4dd4 100644 --- a/include/d/d_drawlist.h +++ b/include/d/d_drawlist.h @@ -483,6 +483,10 @@ public: void drawOpaList3Dlast() { drawOpaDrawList(mDrawBuffers[DB_LIST_3D_LAST]); } void drawOpaListFilter() { drawOpaDrawList(mDrawBuffers[DB_LIST_FILTER]); } void drawOpaListP0() { drawOpaDrawList(mDrawBuffers[DB_LIST_P0]); } +#if VERSION > VERSION_GCN_JPN + void drawOpaListCursor() { drawOpaDrawList(mDrawBuffers[DB_LIST_CURSOR]); } + void drawXluListCursor() { drawXluDrawList(mDrawBuffers[DB_LIST_CURSOR]); } +#endif void draw2DOpa() { draw(mp2DOpaDrawLists, mp2DOpaStart); } void draw2DOpaTop() { draw(mp2DOpaTopDrawLists, mp2DOpaTopStart); } void draw2DXlu() { draw(mp2DXluDrawLists, mp2DXluStart); } diff --git a/include/d/d_jcam_editor.h b/include/d/d_jcam_editor.h new file mode 100644 index 0000000000..db926274cc --- /dev/null +++ b/include/d/d_jcam_editor.h @@ -0,0 +1,38 @@ +#ifndef D_JCAM_EDITOR_H +#define D_JCAM_EDITOR_H + +#include "dolphin/mtx.h" + +namespace JStage { + class TSystem; +} +namespace JStudioCameraEditor { + class TControl; +} + +class JKRExpHeap; +class JUTGamePad; +class JUTResFont; + +class dJcame_c { +public: + dJcame_c(const JStage::TSystem*, f32, JUTGamePad&); + + void show3D(Mtx); + void show2D(); + + static void create(const JStage::TSystem*, f32, JUTGamePad&); + + static dJcame_c* m_myObj; + + static dJcame_c* get() { return m_myObj; } + + /* 0x00 */ JStage::TSystem* field_0x0; + /* 0x04 */ JUTResFont* field_0x4; + /* 0x08 */ JKRExpHeap* mHeap; + /* 0x0C */ JStudioCameraEditor::TControl* mControl; + /* 0x10 */ int field_0x10; + /* 0x14 */ u8 field_0x14; +}; + +#endif /* D_JCAM_EDITOR_H */ diff --git a/include/d/d_jpreviewer.h b/include/d/d_jpreviewer.h new file mode 100644 index 0000000000..c9cd4cbc35 --- /dev/null +++ b/include/d/d_jpreviewer.h @@ -0,0 +1,40 @@ +#ifndef D_JPREVIEWER_H +#define D_JPREVIEWER_H + +#include "dolphin/mtx.h" + +namespace JStudio { + class TControl; +} + +class J2DOrthoGraph; +class JKRExpHeap; +class JUTGamePad; +class JUTResFont; +class tParse_; + +class dJprevCtrl_c /* : public JStudioPreviewer::TControl */ { +public: + +}; + +class dJprev_c { +public: + dJprev_c(JStudio::TControl*, const JUTGamePad&); + + void show3D(Mtx); + void show2D(); + + static dJprev_c* get() { return m_myObj; } + + static dJprev_c* m_myObj; + + /* 0x00 */ J2DOrthoGraph* mOrthoGraph; + /* 0x04 */ JUTResFont* mFont; + /* 0x08 */ JKRExpHeap* mHeap; + /* 0x0C */ tParse_* m_parse; + /* 0x10 */ dJprevCtrl_c* mControl; + /* 0x14 */ u8 field_0x14; +}; + +#endif /* D_JPREVIEWER_H */ diff --git a/include/d/d_particle.h b/include/d/d_particle.h index a57a6918b7..74e304a531 100644 --- a/include/d/d_particle.h +++ b/include/d/d_particle.h @@ -211,7 +211,6 @@ public: UNUSED(i_emitter); dPa_cleanupGX(); } - virtual void execute(JPABaseEmitter*); virtual void setup(JPABaseEmitter*, cXyz const*, csXyz const*, s8); }; diff --git a/include/f_ap/f_ap_game.h b/include/f_ap/f_ap_game.h index 618caed84f..836554ba50 100644 --- a/include/f_ap/f_ap_game.h +++ b/include/f_ap/f_ap_game.h @@ -33,7 +33,7 @@ public: JUT_ASSERT(46, mCaptureScreen != NULL); } - static u8 isCaptureScreen() { + static bool isCaptureScreen() { return mCaptureScreenFlag; } @@ -44,6 +44,12 @@ public: static void offCpuTimer() { m_CpuTimerOff = FALSE; } + + static u8 getCaptureScreenNumH() { return mCaptureScreenNumH; } + static u8 getCaptureScreenNumV() { return mCaptureScreenNumV; } + + static u8 getCaptureScreenDivH() { return mCaptureScreenDivH; } + static u8 getCaptureScreenDivV() { return mCaptureScreenDivV; } #endif #if DEBUG @@ -63,6 +69,9 @@ public: static u8 mCaptureScreenNumV; static u8 mParticle254Fix; + + static u8 mCaptureScreenDivH; + static u8 mCaptureScreenDivV; #endif /* 0x04 */ s8 field_0x04; diff --git a/include/m_Do/m_Do_controller_pad.h b/include/m_Do/m_Do_controller_pad.h index 8f8f2a2ea9..c4291c1af9 100644 --- a/include/m_Do/m_Do_controller_pad.h +++ b/include/m_Do/m_Do_controller_pad.h @@ -70,6 +70,7 @@ public: static JUTGamePad* m_gamePad[4]; static interface_of_controller_pad m_cpadInfo[4]; + static interface_of_controller_pad m_debugCpadInfo[4]; }; inline void mDoCPd_ANALOG_CONV(u8 analog, f32& param_1) { diff --git a/include/m_Do/m_Do_ext.h b/include/m_Do/m_Do_ext.h index 14c3f36e37..e03eb6e1ca 100644 --- a/include/m_Do/m_Do_ext.h +++ b/include/m_Do/m_Do_ext.h @@ -148,7 +148,7 @@ STATIC_ASSERT(sizeof(mDoExt_bpkAnm) == 0x18); class mDoExt_bckAnm : public mDoExt_baseAnm { public: - mDoExt_bckAnm() { mpMtxCalc = NULL; } + mDoExt_bckAnm() { mAnm = NULL; } int init(J3DAnmTransform* i_bck, int i_play, int i_attr, f32 i_rate, s16 i_startF, s16 i_endF, bool i_modify); void changeBckOnly(J3DAnmTransform* i_bck); @@ -164,15 +164,15 @@ public: i_modelData->getJointNodePointer(0)->setMtxCalc(NULL); } - J3DAnmTransform* getBckAnm() { return mAnm; } + J3DAnmTransform* getBckAnm() { return mAnmTransform; } void removeJoint(J3DModelData* i_modelData, u16 i_idx) { i_modelData->getJointNodePointer(i_idx)->setMtxCalc(0); } private: - /* 0x14 */ J3DAnmTransform* mAnm; - /* 0x18 */ J3DMtxCalcAnimation, J3DMtxCalcJ3DSysInitMaya>* mpMtxCalc; + /* 0x14 */ J3DAnmTransform* mAnmTransform; + /* 0x18 */ J3DMtxCalcAnimation, J3DMtxCalcJ3DSysInitMaya>* mAnm; }; // Size: 0x1C STATIC_ASSERT(sizeof(mDoExt_bckAnm) == 0x1C); @@ -811,10 +811,8 @@ J3DModel* mDoExt_J3DModel__create(J3DModelData* i_modelData, u32 i_modelFlag, u32 i_differedDlistFlag); extern u32 aram_cache_size; +u32 mDoExt_getAraCacheSize(); void mDoExt_setAraCacheSize(u32 size); -inline u32 mDoExt_getAraCacheSize() { - return aram_cache_size; -} int mDoExt_resIDToIndex(JKRArchive* p_archive, u16 id); void mDoExt_modelEntryDL(J3DModel* i_model); diff --git a/include/m_Do/m_Do_machine.h b/include/m_Do/m_Do_machine.h index a9bfa34485..47879f3adb 100644 --- a/include/m_Do/m_Do_machine.h +++ b/include/m_Do/m_Do_machine.h @@ -8,7 +8,7 @@ class JKRHeap; void myHeapCheckRecursive(JKRHeap*); BOOL mDoMch_IsProgressiveMode(); -bool exceptionReadPad(u32*, u32*); +void exceptionReadPad(u32*, u32*); void exceptionRestart(); void myExceptionCallback(u16, OSContext*, u32, u32); void my_SysPrintHeap(char const*, void*, u32); diff --git a/include/m_Do/m_Do_main.h b/include/m_Do/m_Do_main.h index 99dc3876b8..4685b4aef7 100644 --- a/include/m_Do/m_Do_main.h +++ b/include/m_Do/m_Do_main.h @@ -11,6 +11,7 @@ extern OSThread mainThread; void version_check(); s32 LOAD_COPYDATE(void*); +extern OSThread mainThread; const int HeapCheckTableNum = 8; class HeapCheck { diff --git a/src/f_op/f_op_actor.cpp b/src/f_op/f_op_actor.cpp index a04944759e..221e14b308 100644 --- a/src/f_op/f_op_actor.cpp +++ b/src/f_op/f_op_actor.cpp @@ -75,7 +75,7 @@ void print_error_check_c::start() { mPrintErrors = print_errors; if (mPrintDisable) { - mPrintInit = print_initialized; + mPrintInit = __OSReport_disable; OSReportDisable(); } else { mPrintInit = -1; @@ -106,7 +106,7 @@ void print_error_check_c::check() { } if (mPrintInit != -1) { - print_initialized = mPrintInit; + __OSReport_disable = mPrintInit; } if (mPrintErrors != print_errors) { diff --git a/src/m_Do/m_Do_controller_pad.cpp b/src/m_Do/m_Do_controller_pad.cpp index 3893d9b965..dfc784a8eb 100644 --- a/src/m_Do/m_Do_controller_pad.cpp +++ b/src/m_Do/m_Do_controller_pad.cpp @@ -4,7 +4,9 @@ */ #include "m_Do/m_Do_controller_pad.h" +#include "JSystem/JAWExtSystem/JAWExtSystem.h" #include "SSystem/SComponent/c_lib.h" +#include "d/d_com_inf_game.h" #include "f_ap/f_ap_game.h" #include "m_Do/m_Do_Reset.h" #include "m_Do/m_Do_main.h" @@ -12,14 +14,14 @@ JUTGamePad* mDoCPd_c::m_gamePad[4]; interface_of_controller_pad mDoCPd_c::m_cpadInfo[4]; +interface_of_controller_pad mDoCPd_c::m_debugCpadInfo[4]; void mDoCPd_c::create() { #if PLATFORM_GCN || PLATFORM_SHIELD - JUTGamePad* pad = new JUTGamePad(JUTGamePad::EPort1); - m_gamePad[0] = pad; + m_gamePad[0] = new JUTGamePad(JUTGamePad::EPort1); #endif - if (mDoMain::developmentMode != 0) { + if (DEBUG || mDoMain::developmentMode != 0) { #if PLATFORM_WII m_gamePad[0] = new JUTGamePad(JUTGamePad::EPort1); #endif @@ -47,10 +49,8 @@ void mDoCPd_c::create() { interface_of_controller_pad* cpad = &m_cpadInfo[0]; for (int i = 0; i < 4; i++) { - cpad->mTrigLockL = false; - cpad->mHoldLockL = false; - cpad->mTrigLockR = false; - cpad->mHoldLockR = false; + cpad->mHoldLockL = cpad->mTrigLockL = false; + cpad->mHoldLockR = cpad->mTrigLockR = false; cpad++; } } @@ -59,15 +59,27 @@ void mDoCPd_c::read() { JUTGamePad::read(); if (!mDoRst::isReset() && mDoRst::is3ButtonReset()) { - JUTGamePad* pad = JUTGamePad::getGamePad(mDoRst::get3ButtonResetPort()); - - if (!pad->isPushing3ButtonReset()) { + if (!JUTGamePad::getGamePad(mDoRst::get3ButtonResetPort())->isPushing3ButtonReset()) { mDoRst::off3ButtonReset(); } } +#if DEBUG + if (m_gamePad[3]) { + JAWExtSystem::padProc(*m_gamePad[3]); + } +#endif + JUTGamePad** pad = m_gamePad; interface_of_controller_pad* interface = m_cpadInfo; +#if DEBUG + interface_of_controller_pad* interface2 = m_debugCpadInfo; + if (dComIfG_isDebugMode()) { + interface_of_controller_pad* tmp = interface; + interface = interface2; + interface2 = tmp; + } +#endif for (u32 i = 0; i < 4; i++) { if (*pad == NULL) { @@ -76,9 +88,14 @@ void mDoCPd_c::read() { convert(interface, *pad); LRlockCheck(interface); } - +#if DEBUG + cLib_memSet(interface2, 0, sizeof(interface_of_controller_pad)); +#endif pad++; interface++; +#if DEBUG + interface2++; +#endif } } @@ -103,26 +120,26 @@ void mDoCPd_c::convert(interface_of_controller_pad* pInterface, JUTGamePad* pPad } void mDoCPd_c::LRlockCheck(interface_of_controller_pad* interface) { - f32 trig_left = interface->mTriggerLeft; + f32 trigger = interface->mTriggerLeft; interface->mTrigLockL = false; interface->mTrigLockR = false; - if (trig_left > fapGmHIO_getLROnValue()) { + if (trigger > fapGmHIO_getLROnValue()) { if (interface->mHoldLockL != true) { interface->mTrigLockL = true; } interface->mHoldLockL = true; - } else if (trig_left < fapGmHIO_getLROffValue()) { + } else if (trigger < fapGmHIO_getLROffValue()) { interface->mHoldLockL = false; } - f32 trig_right = interface->mTriggerRight; - if (trig_right > fapGmHIO_getLROnValue()) { + trigger = interface->mTriggerRight; + if (trigger > fapGmHIO_getLROnValue()) { if (interface->mHoldLockR != true) { interface->mTrigLockR = true; } interface->mHoldLockR = true; - } else if (trig_right < fapGmHIO_getLROffValue()) { + } else if (trigger < fapGmHIO_getLROffValue()) { interface->mHoldLockR = false; } } diff --git a/src/m_Do/m_Do_ext.cpp b/src/m_Do/m_Do_ext.cpp index ab4a10c357..833a5558a0 100644 --- a/src/m_Do/m_Do_ext.cpp +++ b/src/m_Do/m_Do_ext.cpp @@ -212,26 +212,25 @@ void dummy3(J3DModel* i_model, void* i_bva, bool i_modify) { int mDoExt_bckAnm::init(J3DAnmTransform* i_bck, int i_play, int i_attr, f32 i_rate, s16 i_startF, s16 i_endF, bool i_modify) { JUT_ASSERT(614, (i_modify || isCurrentSolidHeap()) && i_bck != NULL); - - mAnm = i_bck; + mAnmTransform = i_bck; if (!i_modify) { - mpMtxCalc = new J3DMtxCalcAnimation, J3DMtxCalcJ3DSysInitMaya>(mAnm); - if (!mpMtxCalc) { + mAnm = new J3DMtxCalcAnimation, J3DMtxCalcJ3DSysInitMaya>(mAnmTransform); + if (!mAnm) { return 0; } } else { - mpMtxCalc->setAnmTransform(mAnm); + mAnm->setAnmTransform(mAnmTransform); } if (i_play) { - return initPlay(mAnm->getFrameMax(), i_attr < 0 ? mAnm->getAttribute() : i_attr, i_rate, i_startF, i_endF); + return initPlay(mAnmTransform->getFrameMax(), i_attr < 0 ? mAnmTransform->getAttribute() : i_attr, i_rate, i_startF, i_endF); } return 1; } void mDoExt_bckAnm::changeBckOnly(J3DAnmTransform* i_bck) { - mAnm = i_bck; - JUT_ASSERT(646, mAnm != NULL); - mpMtxCalc->setAnmTransform(mAnm); + mAnmTransform = i_bck; + JUT_ASSERT(646, mAnm != 0); + mAnm->setAnmTransform(mAnmTransform); } void dummy4(J3DModel* i_model, void* i_bxa, bool i_modify) { @@ -239,13 +238,13 @@ void dummy4(J3DModel* i_model, void* i_bxa, bool i_modify) { } void mDoExt_bckAnm::entry(J3DModelData* i_modelData, f32 i_frame) { - mAnm->setFrame(i_frame); - i_modelData->getJointNodePointer(0)->setMtxCalc(mpMtxCalc); + mAnmTransform->setFrame(i_frame); + i_modelData->getJointNodePointer(0)->setMtxCalc(mAnm); } void mDoExt_bckAnm::entryJoint(J3DModelData* i_modelData, u16 i_jntNo, f32 i_frame) { - mAnm->setFrame(i_frame); - i_modelData->getJointNodePointer(i_jntNo)->setMtxCalc(mpMtxCalc); + mAnmTransform->setFrame(i_frame); + i_modelData->getJointNodePointer(i_jntNo)->setMtxCalc(mAnm); } int mDoExt_blkAnm::init(J3DDeformData* i_deformData, J3DAnmCluster* i_blk, int i_anmPlay, @@ -288,19 +287,19 @@ void mDoExt_modelTexturePatch(J3DModelData* i_modelData) { } } -static void dummy1() { - ((J3DDrawPacket*)NULL)->beginPatch(); - ((J3DTevBlock*)NULL)->patch(); - ((J3DMaterial*)NULL)->getPEBlock(); - ((J3DMaterial*)NULL)->getTexGenBlock(); - ((J3DMaterial*)NULL)->getColorBlock()->patchLight(); - ((J3DPEBlock*)NULL)->patch(); - ((J3DDrawPacket*)NULL)->endPatch(); +static void dummy1(J3DModel* model, J3DMaterial* material) { + J3DMatPacket* packet = model->getMatPacket(0); + packet->beginPatch(); + material->getTevBlock()->patch(); + material->getColorBlock()->patchLight(); + material->getTexGenBlock(); + material->getPEBlock()->patch(); + packet->endPatch(); } static inline void modelMtxErrorCheck(J3DModel* i_model) { #if DEBUG - if (i_model->getBaseTRMtx()[0][0] == 3.4028235e38f) { + if (i_model->getBaseTRMtx()[0][0] == FLT_MAX) { i_model->getBaseTRMtx()[0][0] = 1.0f; JUT_WARN(883, "%s", "Model Matrix Not Initialize !\n"); } @@ -953,7 +952,7 @@ JKRSolidHeap* mDoExt_createSolidHeapToCurrent(JKRHeap** o_heap, u32 i_size, JKRH JKRSolidHeap* mDoExt_createSolidHeapToCurrent(u32 i_size, JKRHeap* i_parent, u32 i_alignment) { JUT_ASSERT(2427, OSGetCurrentThread() == &mainThread); - JUT_ASSERT(2428, mDoExt_SaveCurrentHeap == 0); + JUT_ASSERT(2428, mDoExt_SaveCurrentHeap == NULL); JKRSolidHeap* heap = mDoExt_createSolidHeapToCurrent(&mDoExt_SaveCurrentHeap, i_size, i_parent, i_alignment); if (mDoExt::CurrentHeapAdjustVerbose) { @@ -1046,22 +1045,13 @@ void mDoExt_destroySolidHeap(JKRSolidHeap* i_heap) { } void mDoExt_destroyExpHeap(JKRExpHeap* i_heap) { - bool var_r30 = true; - bool var_r28; -#if DEBUG - if (i_heap == mDoExt_getCurrentHeap()) { - OS_PANIC(2576, "Failed assertion i_heap != mDoExt_getCurrentHeap()"); - var_r28 = false; - if (!var_r28) { - var_r30 = false; - } - } -#endif + ASSERTLINE(2576, i_heap != mDoExt_getCurrentHeap()); JKRDestroyExpHeap(i_heap); - if (g_printOtherHeapDebug) { - // "mDoExt_destroyExpHeap Exp heap destruction" +#if DEBUG + if (mDoExt::HeapAdjustVerbose) { OS_REPORT("mDoExt_destroyExpHeap Expヒープ破壊 %08x\n", i_heap); } +#endif } JKRHeap* mDoExt_setCurrentHeap(JKRHeap* heap) { @@ -3863,6 +3853,10 @@ void DummyCheckHeap_check() { u32 aram_cache_size; +u32 mDoExt_getAraCacheSize() { + return aram_cache_size; +} + void mDoExt_setAraCacheSize(u32 size) { aram_cache_size = size; } diff --git a/src/m_Do/m_Do_graphic.cpp b/src/m_Do/m_Do_graphic.cpp index a34af824f4..7aed86fb99 100644 --- a/src/m_Do/m_Do_graphic.cpp +++ b/src/m_Do/m_Do_graphic.cpp @@ -7,6 +7,7 @@ #include "JSystem/J2DGraph/J2DOrthoGraph.h" #include "JSystem/J2DGraph/J2DPrint.h" +#include "JSystem/JAWExtSystem/JAWExtSystem.h" #include "JSystem/JFramework/JFWSystem.h" #include "JSystem/JParticle/JPADrawInfo.h" #include "JSystem/JUtility/JUTConsole.h" @@ -17,6 +18,8 @@ #include "d/actor/d_a_player.h" #include "d/d_com_inf_game.h" #include "d/d_menu_collect.h" +#include "d/d_jcam_editor.h" +#include "d/d_jpreviewer.h" #include #include "f_ap/f_ap_game.h" #include "f_op/f_op_camera_mng.h" @@ -384,6 +387,12 @@ mDoGph_gInf_c::bloom_c mDoGph_gInf_c::m_bloom; Mtx mDoGph_gInf_c::mBlureMtx; +#if DEBUG +cXyz mDoGph_gInf_c::csr_c::m_nowEffPos(0.0f, 0.0f, 0.0f); +cXyz mDoGph_gInf_c::csr_c::m_oldEffPos(0.0f, 0.0f, 0.0f); +cXyz mDoGph_gInf_c::csr_c::m_oldOldEffPos(0.0f, 0.0f, 0.0f); +#endif + void mDoGph_gInf_c::onBlure(const Mtx m) { mBlureFlag = true; setBlureMtx(m); @@ -573,81 +582,85 @@ u8 mDoGph_gInf_c::isWide() { } void mDoGph_gInf_c::setWideZoomProjection(Mtx44& m) { - if (isWideZoom()) { - f32 sp20 = m[0][0]; - f32 sp1C = m[0][2]; - f32 sp18 = m[1][1]; - f32 sp14 = m[1][2]; - f32 sp10 = m[2][2]; - f32 spC = m[2][3]; - - f32 temp_f31 = spC / (sp10 - 1.0f); - f32 sp8 = spC / sp10; - - f32 temp_f30 = ((temp_f31 * (1.0f + sp14)) / sp18); - f32 temp_f29 = ((temp_f31 * (sp14 - 1.0f)) / sp18); - f32 temp_f28 = ((temp_f31 * (sp1C - 1.0f)) / sp20); - f32 temp_f27 = ((temp_f31 * (1.0f + sp1C)) / sp20); - - temp_f30 *= getInvScale(); - temp_f29 *= getInvScale(); - temp_f28 *= getInvScale(); - temp_f27 *= getInvScale(); - - m[0][0] = (2.0f * temp_f31) / (temp_f27 - temp_f28); - m[0][1] = 0.0f; - m[0][2] = (temp_f27 + temp_f28) / (temp_f27 - temp_f28); - m[0][3] = 0.0f; - - m[1][0] = 0.0f; - m[1][1] = (2.0f * temp_f31) / (temp_f30 - temp_f29); - m[1][2] = (temp_f30 + temp_f29) / (temp_f30 - temp_f29); - m[1][3] = 0.0f; - - m[2][0] = 0.0f; - m[2][1] = 0.0f; - m[2][2] = -temp_f31 / (sp8 - temp_f31); - m[2][3] = -(sp8 * temp_f31) / (sp8 - temp_f31); - - m[3][0] = 0.0f; - m[3][1] = 0.0f; - m[3][2] = -1.0f; - m[3][3] = 0.0f; + if (!isWideZoom()) { + return; } + + f32 sp20 = m[0][0]; + f32 sp1C = m[0][2]; + f32 sp18 = m[1][1]; + f32 sp14 = m[1][2]; + f32 sp10 = m[2][2]; + f32 spC = m[2][3]; + + f32 temp_f31 = spC / (sp10 - 1.0f); + f32 sp8 = spC / sp10; + + f32 temp_f30 = ((temp_f31 * (1.0f + sp14)) / sp18); + f32 temp_f29 = ((temp_f31 * (sp14 - 1.0f)) / sp18); + f32 temp_f28 = ((temp_f31 * (sp1C - 1.0f)) / sp20); + f32 temp_f27 = ((temp_f31 * (1.0f + sp1C)) / sp20); + + temp_f30 *= getInvScale(); + temp_f29 *= getInvScale(); + temp_f28 *= getInvScale(); + temp_f27 *= getInvScale(); + + m[0][0] = (2.0f * temp_f31) / (temp_f27 - temp_f28); + m[0][1] = 0.0f; + m[0][2] = (temp_f27 + temp_f28) / (temp_f27 - temp_f28); + m[0][3] = 0.0f; + + m[1][0] = 0.0f; + m[1][1] = (2.0f * temp_f31) / (temp_f30 - temp_f29); + m[1][2] = (temp_f30 + temp_f29) / (temp_f30 - temp_f29); + m[1][3] = 0.0f; + + m[2][0] = 0.0f; + m[2][1] = 0.0f; + m[2][2] = -temp_f31 / (sp8 - temp_f31); + m[2][3] = -(sp8 * temp_f31) / (sp8 - temp_f31); + + m[3][0] = 0.0f; + m[3][1] = 0.0f; + m[3][2] = -1.0f; + m[3][3] = 0.0f; } void mDoGph_gInf_c::setWideZoomLightProjection(Mtx& m) { - if (isWideZoom()) { - f32 temp_f27 = m[0][0]; - f32 temp_f26 = m[0][2]; - f32 temp_f25 = m[1][1]; - f32 temp_f24 = m[1][2]; - - f32 temp_f31 = (1.0f + temp_f24) / temp_f25; - f32 temp_f30 = (temp_f24 - 1.0f) / temp_f25; - f32 temp_f29 = (temp_f26 - 1.0f) / temp_f27; - f32 temp_f28 = (1.0f + temp_f26) / temp_f27; - - temp_f31 *= getInvScale(); - temp_f30 *= getInvScale(); - temp_f29 *= getInvScale(); - temp_f28 *= getInvScale(); - - m[0][0] = 2.0f / (temp_f28 - temp_f29); - m[0][1] = 0.0f; - m[0][2] = (temp_f28 + temp_f29) / (temp_f28 - temp_f29); - m[0][3] = 0.0f; - - m[1][0] = 0.0f; - m[1][1] = 2.0f / (temp_f31 - temp_f30); - m[1][2] = (temp_f31 + temp_f30) / (temp_f31 - temp_f30); - m[1][3] = 0.0f; - - m[2][0] = 0.0f; - m[2][1] = 0.0f; - m[2][2] = -1.0f; - m[2][3] = 0.0f; + if (!isWideZoom()) { + return; } + + f32 temp_f27 = m[0][0]; + f32 temp_f26 = m[0][2]; + f32 temp_f25 = m[1][1]; + f32 temp_f24 = m[1][2]; + + f32 temp_f31 = (1.0f + temp_f24) / temp_f25; + f32 temp_f30 = (temp_f24 - 1.0f) / temp_f25; + f32 temp_f29 = (temp_f26 - 1.0f) / temp_f27; + f32 temp_f28 = (1.0f + temp_f26) / temp_f27; + + temp_f31 *= getInvScale(); + temp_f30 *= getInvScale(); + temp_f29 *= getInvScale(); + temp_f28 *= getInvScale(); + + m[0][0] = 2.0f / (temp_f28 - temp_f29); + m[0][1] = 0.0f; + m[0][2] = (temp_f28 + temp_f29) / (temp_f28 - temp_f29); + m[0][3] = 0.0f; + + m[1][0] = 0.0f; + m[1][1] = 2.0f / (temp_f31 - temp_f30); + m[1][2] = (temp_f31 + temp_f30) / (temp_f31 - temp_f30); + m[1][3] = 0.0f; + + m[2][0] = 0.0f; + m[2][1] = 0.0f; + m[2][2] = -1.0f; + m[2][3] = 0.0f; } #endif @@ -1360,8 +1373,54 @@ static void setLight() { GXLoadLightObjImm(&obj, GX_LIGHT0); } +#if DEBUG static void captureScreenSetProjection(Mtx44& m) { - // DEBUG NONMATCHING + if (fapGm_HIO_c::isCaptureScreen()) { + f32 local_88[7]; + + GXGetProjectionv(local_88); + if (int(local_88[0]) == 0) { + m[0][0] = local_88[1]; + m[0][1] = 0.0f; + m[0][2] = local_88[2]; + m[0][3] = 0.0f; + m[1][0] = 0.0f; + m[1][1] = local_88[3]; + m[1][2] = local_88[4]; + m[1][3] = 0.0f; + m[2][0] = 0.0f; + m[2][1] = 0.0f; + m[2][2] = local_88[5]; + m[2][3] = local_88[6]; + m[3][0] = 0.0f; + m[3][1] = 0.0f; + m[3][2] = -1.0f; + m[3][3] = 0.0f; + CPerspDivider divider(m, fapGm_HIO_c::getCaptureScreenDivH(), fapGm_HIO_c::getCaptureScreenDivV()); + divider.divide(m, fapGm_HIO_c::getCaptureScreenNumH(), fapGm_HIO_c::getCaptureScreenNumV()); + GXSetProjection(m, GX_PERSPECTIVE); + } else { + m[0][0] = local_88[1]; + m[0][1] = 0.0f; + m[0][2] = 0.0f; + m[0][3] = local_88[2]; + m[1][0] = 0.0f; + m[1][1] = local_88[3]; + m[1][2] = 0.0f; + m[1][3] = local_88[4]; + m[2][0] = 0.0f; + m[2][1] = 0.0f; + m[2][2] = local_88[5]; + m[2][3] = local_88[6]; + m[3][0] = 0.0f; + m[3][1] = 0.0f; + m[3][2] = 0.0f; + m[3][3] = 1.0f; + COrthoDivider divider(m, fapGm_HIO_c::getCaptureScreenDivH(), fapGm_HIO_c::getCaptureScreenDivV()); + divider.divide(m, fapGm_HIO_c::getCaptureScreenNumH(), fapGm_HIO_c::getCaptureScreenNumV()); + GXSetProjection(m, GX_ORTHOGRAPHIC); + } + } } static void captureScreenSetPort() { @@ -1370,12 +1429,70 @@ static void captureScreenSetPort() { } static void captureScreenSetScissor(scissor_class* scissor) { - // DEBUG NONMATCHING + if (fapGm_HIO_c::isCaptureScreen()) { + scissor->x_orig *= fapGm_HIO_c::getCaptureScreenDivH(); + scissor->y_orig *= fapGm_HIO_c::getCaptureScreenDivV(); + scissor->width *= fapGm_HIO_c::getCaptureScreenDivH(); + scissor->height *= fapGm_HIO_c::getCaptureScreenDivV(); + f32 f29 = fapGm_HIO_c::getCaptureScreenNumH() * 640; + f32 f27 = (fapGm_HIO_c::getCaptureScreenNumH() + 1) * 640; + f32 f28 = fapGm_HIO_c::getCaptureScreenNumV() * 456; + f32 f26 = (fapGm_HIO_c::getCaptureScreenNumV() + 1) * 456; + f32 f31 = scissor->x_orig + scissor->width; + if (f31 < f29) { + f31 = 0.0f; + } else if (f31 > f27) { + f31 = 640.0f; + } else { + f31 -= f29; + } + if (scissor->x_orig < f29) { + scissor->x_orig = 0.0f; + } else if (scissor->x_orig > f27) { + scissor->x_orig = 640.0f; + } else { + scissor->x_orig -= f29; + } + scissor->width = f31 - scissor->x_orig; + f32 f30 = scissor->y_orig + scissor->height; + if (f30 < f28) { + f30 = 0.0f; + } else if (f30 > f26) { + f30 = 456.0f; + } else { + f30 -= f28; + } + if (scissor->y_orig < f28) { + scissor->y_orig = 0.0f; + } else if (scissor->y_orig > f26) { + scissor->y_orig = 456.0f; + } else { + scissor->y_orig -= f28; + } + scissor->height = f30 - scissor->y_orig; + } } -static void captureScreenPerspDrawInfo(JPADrawInfo&) { - // DEBUG NONMATCHING +static void captureScreenPerspDrawInfo(JPADrawInfo& info) { + if (fapGm_HIO_c::isCaptureScreen()) { + Mtx44 m; + info.getPrjMtx(m); + m[0][0] *= 2.0f; + m[0][2] = 0.0f; + m[1][1] *= -2.0f; + m[1][2] = 0.0f; + m[2][3] = -2.0f; + CPerspDivider divider(m, fapGm_HIO_c::getCaptureScreenDivH(), fapGm_HIO_c::getCaptureScreenDivV()); + divider.divide(m, fapGm_HIO_c::getCaptureScreenNumH(), fapGm_HIO_c::getCaptureScreenNumV()); + m[0][0] *= 0.5f; + m[0][2] = m[0][2] * 0.5f - 0.5f; + m[1][1] *= -0.5f; + m[1][2] = m[1][2] * -0.5f - 0.5f; + m[2][3] = 0.0f; + info.setPrjMtx(m); + } } +#endif static void drawItem3D() { Mtx item_mtx; @@ -1610,6 +1727,15 @@ int mDoGph_Painter() { j3dSys.reinitGX(); GXSetClipMode(GX_CLIP_ENABLE); +#if DEBUG + if (dJcame_c::get()) { + dJcame_c::get()->show3D(camera_p->viewMtx); + } + if (dJprev_c::get()) { + dJprev_c::get()->show3D(camera_p->viewMtx); + } +#endif + if (!dComIfGp_isPauseFlag()) { #if DEBUG fapGm_HIO_c::startCpuTimer(); @@ -1941,6 +2067,11 @@ int mDoGph_Painter() { dComIfGp_particle_draw2Dfore(&draw_info3); } +#if DEBUG + j3dSys.setViewMtx(m5); + dComIfGd_drawListCursor(); +#endif + if (strcmp(dComIfGp_getStartStageName(), "F_SP127") == 0 || (mDoGph_gInf_c::isFade() & 0x80) != 0) { mDoGph_gInf_c::calcFade(); @@ -1951,8 +2082,15 @@ int mDoGph_Painter() { } #if DEBUG + if (dJcame_c::get()) { + dJcame_c::get()->show2D(); + } + if (dJprev_c::get()) { + dJprev_c::get()->show2D(); + } // "drawing up to 2D-fore particle (Rendering)" fapGm_HIO_c::stopCpuTimer("2D前(?)パーティクル描画まで(レンダリング)"); + JAWExtSystem::draw(); #endif mDoGph_gInf_c::endRender(); diff --git a/src/m_Do/m_Do_machine.cpp b/src/m_Do/m_Do_machine.cpp index d58a1766b8..34217648c7 100644 --- a/src/m_Do/m_Do_machine.cpp +++ b/src/m_Do/m_Do_machine.cpp @@ -28,6 +28,33 @@ #include "m_Do/m_Do_main.h" #include "DynamicLink.h" +#if !PLATFORM_GCN +#include "revolution/sc.h" +#include "revolution/wpad.h" +#endif + +#if PLATFORM_GCN +#define MAP_FILE_PLATFORM "" +#define MAP_FOLDER_PLATFORM "/Final" +#elif PLATFORM_WII +#define MAP_FILE_PLATFORM "R" +#define MAP_FOLDER_PLATFORM "/Rfinal" +#else +#define MAP_FILE_PLATFORM "R" +#define MAP_FOLDER_PLATFORM "/RVL" +#endif + +#if DEBUG +#define MAP_FILE_SUFFIX "D" +#define MAP_FOLDER_MODE "/Debug" +#else +#define MAP_FILE_SUFFIX "F" +#define MAP_FOLDER_MODE "/Release" +#endif + +#define MAP_FOLDER "/map" MAP_FOLDER_PLATFORM MAP_FOLDER_MODE +#define MAP_FILE "/" MAP_FILE_PLATFORM "framework" MAP_FILE_SUFFIX ".map" + #if DEBUG u8 mDoMch::mDebugFill = true; u8 mDoMch::mDebugFillNotUse = 0xDD; @@ -292,13 +319,16 @@ static const char* myGetHeapTypeByString(JKRHeap* p_heap) { case 0: return "(Null)"; default: - u32 tmpType = heapType; - char* typeStr = (char*)&tmpType; + union { + char c[4]; + u32 word; + } typeStr; + typeStr.word = heapType; - tmpString[0] = typeStr[0]; - tmpString[1] = typeStr[1]; - tmpString[2] = typeStr[2]; - tmpString[3] = typeStr[3]; + tmpString[0] = typeStr.c[0]; + tmpString[1] = typeStr.c[1]; + tmpString[2] = typeStr.c[2]; + tmpString[3] = typeStr.c[3]; tmpString[4] = 0; return tmpString; } @@ -319,13 +349,16 @@ static void myMemoryErrorRoutine(void* p_heap, u32 size, int alignment) { size, size, alignment, p_heap); } - u32 heapType = heap->getHeapType(); - u8* tmpString = (u8*)&heapType; + union { + u8 c[4]; + u32 word; + } heapType; + heapType.word = heap->getHeapType(); if (notSolidHeap) { OSReport_Error( "FreeSize=%08x TotalFreeSize=%08x HeapType=%08x(%c%c%c%c) HeapSize=%08x %s\n", - heap->getFreeSize(), heap->getTotalFreeSize(), heapType, tmpString[0], tmpString[1], - tmpString[2], tmpString[3], heap->getHeapSize(), myGetHeapTypeByString(heap)); + heap->getFreeSize(), heap->getTotalFreeSize(), heapType.word, heapType.c[0], heapType.c[1], + heapType.c[2], heapType.c[3], heap->getHeapSize(), myGetHeapTypeByString(heap)); } if (heapErrors == 0) { @@ -350,18 +383,26 @@ static void myMemoryErrorRoutine(void* p_heap, u32 size, int alignment) { void myHeapCheckRecursive(JKRHeap* p_heap) { if (!p_heap->check()) { - const char* type = myGetHeapTypeByString(p_heap); - OSReport_Error("error in %08x(%s)\n", p_heap, type); + OSReport_Error("error in %08x(%s)\n", p_heap, myGetHeapTypeByString(p_heap)); } - JSUTree* heapTree = &p_heap->getHeapTree(); - for (JSUTree* i = heapTree->getFirstChild(); i != NULL; i = i->getNextChild()) { + for (JSUTree* i = p_heap->getHeapTree().getFirstChild(); i != NULL; i = i->getNextChild()) { myHeapCheckRecursive(i->getObject()); } } void mDoMch_HeapCheckAll() { - myHeapCheckRecursive(JKRHeap::sRootHeap); + myHeapCheckRecursive(JKRGetRootHeap()); +#if PLATFORM_WII || PLATFORM_SHIELD + myHeapCheckRecursive(JKRGetRootHeap2()); +#endif +#if DEBUG + DummyCheckHeap_check(); +#endif +} + +void mDoMch_HeapFreeFillAll() { + myHeapCheckRecursive(JKRGetRootHeap()); } static int developKeyCheck(u32 btnTrig, u32 btnHold) { @@ -396,18 +437,73 @@ static int developKeyCheck(u32 btnTrig, u32 btnHold) { } BOOL mDoMch_IsProgressiveMode() { - return OSGetProgressiveMode() == true; +#if PLATFORM_GCN + bool result = OSGetProgressiveMode() == true; +#else + bool result = SCGetProgressiveMode() == true; +#endif + return result; } -bool exceptionReadPad(u32* p_btnTrig, u32* p_btnHold) { - return JUTException::getManager()->readPad(p_btnTrig, p_btnHold); +#if !PLATFORM_GCN +void exceptionNNGCReadPad(u32* p_btnTrig, u32* p_btnHold) { + static u32 l_cnvButton[10][2] = { + WPAD_BUTTON_MINUS, 0x40, + WPAD_BUTTON_PLUS, 0x20, + WPAD_BUTTON_HOME, 0x10, + WPAD_BUTTON_UP, 0x8, + WPAD_BUTTON_DOWN, 0x4, + WPAD_BUTTON_LEFT, 0x1, + WPAD_BUTTON_RIGHT, 0x2, + WPAD_BUTTON_1, 0x100, + WPAD_BUTTON_2, 0x200, + WPAD_BUTTON_A, 0x1000, + }; + static u32 l_oldButton; + + WPADStatus status; + WPADRead(0, &status); + *p_btnHold = 0; + u32* r29 = l_cnvButton[0]; + for (u32 i = 0; i < 10; i++) { + if (status.button & r29[0]) { + *p_btnHold |= r29[1]; + } + r29 += 2; + } + *p_btnTrig = *p_btnHold & (*p_btnHold ^ l_oldButton); + l_oldButton = *p_btnHold; } +#endif + +void exceptionReadPad(u32* p_btnTrig, u32* p_btnHold) { +#if PLATFORM_GCN + JUTException::getManager()->readPad(p_btnTrig, p_btnHold); +#else + exceptionNNGCReadPad(p_btnTrig, p_btnHold); +#endif +} + +void forever() { + while (true) {} +} + +#if !PLATFORM_GCN +void exceptionShutdown() { + mDoRst_reset(2, 0, 0); + //OSShutdownSystem(); + forever(); +} +#endif void exceptionRestart() { mDoRst_reset(0, 0, 0); +#if PLATFORM_GCN OSResetSystem(0, 0, 0); - do { - } while (true); +#else + //OSRestart(0); +#endif + while (true) {} } void myExceptionCallback(u16, OSContext*, u32, u32) { @@ -429,9 +525,10 @@ void myExceptionCallback(u16, OSContext*, u32, u32) { } else { manager->setTraceSuppress(0x80); if (mDoMain::developmentMode == 0) { +#if PLATFORM_GCN JUTGamePad pad(JUTGamePad::EPort1); manager->setGamePad(&pad); - +#endif if (manager != NULL) { OSEnableInterrupts(); // "Accepting Key input\n" @@ -440,16 +537,29 @@ void myExceptionCallback(u16, OSContext*, u32, u32) { exceptionReadPad(&btnTrig, &btnHold); developKeyCheck(btnTrig, btnHold); JUTException::waitTime(30); +#if PLATFORM_GCN if (JUTGamePad::C3ButtonReset::sResetOccurred) { exceptionRestart(); } +#else + if (mDoRst::isShutdown()) { + exceptionShutdown(); + } + if (OSGetResetButtonState()) { + // lbl_8074C385 = 1; + } else { +#if !DEBUG + exceptionRestart(); +#endif + } +#endif } // "JUTAssertion is visible\n" OSReport("JUTAssertionを可視化しました\n"); JUTAssertion::setVisible(true); JUTDbPrint::getManager()->setVisible(true); - JFWSystem::getSystemConsole()->setOutput(JUTConsole::OUTPUT_OSREPORT | - JUTConsole::OUTPUT_CONSOLE); + JUTConsole* console = JFWSystem::getSystemConsole(); + console->setOutput(JUTConsole::OUTPUT_OSREPORT | JUTConsole::OUTPUT_CONSOLE); } else { PPCHalt(); } @@ -459,7 +569,7 @@ void myExceptionCallback(u16, OSContext*, u32, u32) { JUTException::waitTime(3000); } } - DVDChangeDir("/map/Final/Release"); + DVDChangeDir(MAP_FOLDER); JUTDestroyVideoManager(); GXSetDrawDoneCallback(NULL); VISetBlack(0); @@ -476,10 +586,14 @@ static void fault_callback_scroll(u16, OSContext* p_context, u32, u32) { *(u32*)(srr0 - 0x8), *(u32*)(srr0 - 0x4), *(u32*)srr0); } +#if PLATFORM_GCN JUTGamePad pad(JUTGamePad::EPort1); manager->setGamePad(&pad); BOOL padDisabled = manager->isEnablePad() == false; +#else + bool padDisabled = false; +#endif if (!padDisabled) { exConsole->print("PUSH START BUTTON TO ADDITIONAL INFOMATION\n"); exConsole->print("--------------------------------------\n"); @@ -491,10 +605,11 @@ static void fault_callback_scroll(u16, OSContext* p_context, u32, u32) { while (true) { u32 btnHold, btnTrig; exceptionReadPad(&btnTrig, &btnHold); - +#if PLATFORM_GCN if (JUTGamePad::C3ButtonReset::sResetOccurred) { OSResetSystem(1, 0, 0); } +#endif bool waitRetrace = false; if (btnTrig == PAD_BUTTON_START) { @@ -504,13 +619,14 @@ static void fault_callback_scroll(u16, OSContext* p_context, u32, u32) { if (btnTrig == PAD_TRIGGER_Z) { JUTConsole* sysConsole = JFWSystem::getSystemConsole(); - if (JUTConsoleManager::getManager()->getDirectConsole() != sysConsole) { + JUTConsole* directConsole = JUTConsoleManager::getManager()->getDirectConsole(); + if (directConsole != sysConsole) { exConsole = sysConsole; - exConsole->setFontSize(8.0f, 6.0f); - exConsole->setPosition(8, 32); - exConsole->setHeight(23); - exConsole->setVisible(true); - exConsole->setOutput(JUTConsole::OUTPUT_CONSOLE | JUTConsole::OUTPUT_OSREPORT); + sysConsole->setFontSize(8.0f, 6.0f); + sysConsole->setPosition(8, 32); + sysConsole->setHeight(23); + sysConsole->setVisible(true); + sysConsole->setOutput(JUTConsole::OUTPUT_CONSOLE | JUTConsole::OUTPUT_OSREPORT); } else { exConsole = JUTException::getConsole(); } @@ -531,13 +647,13 @@ static void fault_callback_scroll(u16, OSContext* p_context, u32, u32) { if (btnHold == PAD_BUTTON_UP) { exConsole->scroll(holdUpCount < 3 ? -1 : (holdUpCount < 5 ? -2 : (holdUpCount < 7 ? -4 : -8))); waitRetrace = true; - holdDownCount = 0; holdUpCount++; + holdDownCount = 0; } else if (btnHold == PAD_BUTTON_DOWN) { exConsole->scroll(holdDownCount < 3 ? 1 : (holdDownCount < 5 ? 2 : (holdDownCount < 7 ? 4 : 8))); waitRetrace = true; - holdUpCount = 0; holdDownCount++; + holdUpCount = 0; } else { holdUpCount = 0; holdDownCount = 0; @@ -597,6 +713,27 @@ void my_SysPrintHeap(char const* message, void* start, u32 size) { end, size / 1024); } +#if DEBUG +u8 myWarningCount[115]; + +void myGXVerifyCallback(GXWarningLevel param_1, u32 param_2, const char* param_3) { + if (param_2 < ARRAY_SIZE(myWarningCount)) { + if (myWarningCount[param_2] >= 255) { + return; + } + if (myWarningCount[param_2] == 0) { + static const char* color[] = {"\x1b[34m", "\x1b[41;37m", "\x1b[43;30m", "\x1b[33m"}; + OSReport("%sGX L%1d, Warning %03d: %s\n\x1b[m", color[param_1], param_1, param_2, param_3); + JUTReportConsole_f("GX L%1d, Warning %03d: %s\n", param_1, param_2, param_3); + } + myWarningCount[param_2]++; + } else { + OSReport_Warning("GX L%1d, Warning %03d: %s\n", param_1, param_2, param_3); + JUTReportConsole_f("GX L%1d, Warning %03d: %s\n", param_1, param_2, param_3); + } +} +#endif + int mDoMch_Create() { if (mDoMain::developmentMode == 0 || !(OSGetConsoleType() & 0x10000000)) { OSReportDisable(); @@ -813,11 +950,7 @@ int mDoMch_Create() { sysConsole->setOutput(JUTConsole::OUTPUT_CONSOLE | JUTConsole::OUTPUT_OSREPORT); sysConsole->setPosition(16, 42); -#if DEBUG - JUTException::setMapFile("/map/RVL/Debug/RframeworkD.map"); -#else - JUTException::appendMapFile("/map/Final/Release/frameworkF.map"); -#endif + JUTException::setMapFile(MAP_FOLDER MAP_FILE); JUTException::setPreUserCallback(myExceptionCallback); JUTException::setPostUserCallback(fault_callback_scroll); diff --git a/src/m_Do/m_Do_main.cpp b/src/m_Do/m_Do_main.cpp index 4525bbb97e..5ab5fa334b 100644 --- a/src/m_Do/m_Do_main.cpp +++ b/src/m_Do/m_Do_main.cpp @@ -660,6 +660,22 @@ static void debug() { } } +// linker generated symbols +extern u8 _f_text[]; +extern u8 _e_text[]; +extern u8 _f_ctors[]; +extern u8 _e_ctors[]; +extern u8 _f_dtors[]; +extern u8 _e_dtors[]; +extern u8 _f_rodata[]; +extern u8 _e_rodata[]; + +#if VERSION == VERSION_SHIELD_DEBUG +const int audioHeapSize = 0x169000; +#else +const int audioHeapSize = 0x14D800; +#endif + void main01(void) { OS_REPORT("\x1b[m"); @@ -667,11 +683,10 @@ void main01(void) { mDoMch_Create(); #if DEBUG - // not sure how this works. appears to be getting .text, .ctors, .dtors, and .rodata areas - FixedMemoryCheck::easyCreate((void*)0x80006880, (s32)0x628F40); - FixedMemoryCheck::easyCreate((void*)0x8062F7C0, (s32)0x224); - FixedMemoryCheck::easyCreate((void*)0x8062FA00, (s32)0xc); - FixedMemoryCheck::easyCreate((void*)0x8062FA20, (s32)0x30568); + FixedMemoryCheck* local_20 = FixedMemoryCheck::easyCreate(_f_text, intptr_t(_e_text - _f_text)); + FixedMemoryCheck* local_24 = FixedMemoryCheck::easyCreate(_f_ctors, intptr_t(_e_ctors - _f_ctors)); + FixedMemoryCheck* local_28 = FixedMemoryCheck::easyCreate(_f_dtors, intptr_t(_e_dtors - _f_dtors)); + FixedMemoryCheck* local_2c = FixedMemoryCheck::easyCreate(_f_rodata, intptr_t(_e_rodata - _f_rodata)); #endif // setup FrameBuffer and ZBuffer, init display lists @@ -697,7 +712,8 @@ void main01(void) { mDoExt_setCurrentHeap(sp10); var_r28->dump_sort(); - OSReport("\x1b[36mHOSTIOヒープ残り %u Bytes\n\x1b[m", var_r28->getTotalFreeSize()); + s32 local_34 = var_r28->getTotalFreeSize(); + OSReport("\x1b[36mHOSTIOヒープ残り %u Bytes\n\x1b[m", local_34); #endif JUTConsole* console = JFWSystem::getSystemConsole(); @@ -718,11 +734,6 @@ void main01(void) { mDisplayHeapSize = 0; cDyl_InitAsync(); // init RELs - #if VERSION == VERSION_SHIELD_DEBUG - const int audioHeapSize = 0x169000; - #else - const int audioHeapSize = 0x14D800; - #endif g_mDoAud_audioHeap = JKRCreateSolidHeap(audioHeapSize, JKRGetCurrentHeap(), false); do {