From ef14b2b9321009b98d3735c88be0175d34ed72a7 Mon Sep 17 00:00:00 2001 From: Jeffrey Crowell Date: Fri, 16 Jan 2026 17:07:48 -0800 Subject: [PATCH 01/46] Fix linker errors. Stubbing out all OS* functions to stubs.cpp, these will likely have to be replaced with the operating system's primitives for locking/heaps/threads/etc. Moved some generic globals into globals.cpp, not sure where they're actually to be used. Stub DSP functions Stub JSUMemoryOutputStream, JORServer, Z2Audio mDoExt stubs add memcpy add some more stubs, add extras c++ mangled functions add extras.cpp AR/AQ stubbing stub DVD stub CARD more stubs, more extras add missing mtx functions to dusk file finish mtx stub GX KPAD and LC, also do pragma marks for better visualization finish mtx, add a few more stubs gf/wpad/vi translate some matrix math from ppc to C jorserver/debugpad/fap/dmsgobject add m_Do_ext functions from debug block to separate file make small janges to JSystem, does this need upstreaming reorg DVD stubs reorganize stubs by mark --- CMakeLists.txt | 9 +- include/JSystem/JAudio2/JASGadget.h | 5 + src/d/actor/d_a_npc_hoz.cpp | 4 +- src/dusk/J3DTransforms_C.cpp | 25 + src/dusk/extras.c | 12 + src/dusk/extras.cpp | 18 + src/dusk/globals.cpp | 16 + src/dusk/m_Do_ext_dusk.cpp | 565 +++++++++ src/dusk/mtx.cpp | 730 ++++++++++++ src/dusk/stubs.c | 517 --------- src/dusk/stubs.cpp | 1651 +++++++++++++++++++++++++++ 11 files changed, 3031 insertions(+), 521 deletions(-) create mode 100644 src/dusk/J3DTransforms_C.cpp create mode 100644 src/dusk/extras.cpp create mode 100644 src/dusk/globals.cpp create mode 100644 src/dusk/m_Do_ext_dusk.cpp create mode 100644 src/dusk/mtx.cpp delete mode 100644 src/dusk/stubs.c create mode 100644 src/dusk/stubs.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 0fbfab1814..87a30e76a7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1338,8 +1338,13 @@ set(REL_FILES set(DUSK_FILES #src/dusk/imgui.cpp - #src/dusk/stubs.c + src/dusk/stubs.cpp src/dusk/extras.c + src/dusk/extras.cpp + src/dusk/globals.cpp + src/dusk/mtx.cpp + src/dusk/J3DTransforms_C.cpp + src/dusk/m_Do_ext_dusk.cpp ) source_group("dolzel" FILES ${DOLZEL_FILES} ${Z2AUDIOLIB_FILES} ${SSYSTEM_FILES} ${JSYSTEM_FILES} ${REL_FILES}) @@ -1350,7 +1355,7 @@ target_compile_definitions(game PRIVATE TARGET_PC VERSION=0 NDEBUG=1 NDEBUG_DEFI # TODO: version handling for res includes set(DUSK_TP_VERSION GZ2E01) target_include_directories(game PRIVATE include src assets/${DUSK_TP_VERSION} ${CMAKE_BINARY_DIR}/../${DUSK_TP_VERSION}/include) -target_link_libraries(game PRIVATE aurora::core aurora::gx aurora::si aurora::vi aurora::pad) +target_link_libraries(game PRIVATE aurora::core aurora::gx aurora::si aurora::vi aurora::pad aurora::mtx) add_executable(dusk src/dusk/main.cpp) target_compile_definitions(dusk PRIVATE TARGET_PC VERSION=0) diff --git a/include/JSystem/JAudio2/JASGadget.h b/include/JSystem/JAudio2/JASGadget.h index 718ce02069..087e8028cd 100644 --- a/include/JSystem/JAudio2/JASGadget.h +++ b/include/JSystem/JAudio2/JASGadget.h @@ -33,6 +33,11 @@ public: static T* sInstance; }; +#ifndef __MWERKS__ +template +T* JASGlobalInstance::sInstance; +#endif + /** * @ingroup jsystem-jaudio * diff --git a/src/d/actor/d_a_npc_hoz.cpp b/src/d/actor/d_a_npc_hoz.cpp index 016975028f..32d3f25e90 100644 --- a/src/d/actor/d_a_npc_hoz.cpp +++ b/src/d/actor/d_a_npc_hoz.cpp @@ -854,8 +854,8 @@ int daNpc_Hoz_c::test(void* i_this) { mMode = 2; // fall-through case 2: - mFaceMotionSeqMngr.setNo((int)mpHIO, -1.0f, 0, 0); - mMotionSeqMngr.setNo((int)mpHIO, -1.0f, 0, 0); + mFaceMotionSeqMngr.setNo(mpHIO->m.common.face_expression, -1.0f, 0, 0); + mMotionSeqMngr.setNo(mpHIO->m.common.motion, -1.0f, 0, 0); mJntAnm.lookNone(0); attention_info.flags = 0; case 3: diff --git a/src/dusk/J3DTransforms_C.cpp b/src/dusk/J3DTransforms_C.cpp new file mode 100644 index 0000000000..efdd2793cd --- /dev/null +++ b/src/dusk/J3DTransforms_C.cpp @@ -0,0 +1,25 @@ +#include +#include + +// translated to C, should be correct, but not tested. + +void J3DPSMtxArrayConcat(Mtx mA, Mtx mB, Mtx mAB, u32 count) { + for (uint32_t i = 0; i < count; i++) { + const float* b = (const float*)mB[i]; + float* res = (float*)mAB[i]; + + for (int row = 0; row < 3; row++) { + float a0 = mA[row][0]; + float a1 = mA[row][1]; + float a2 = mA[row][2]; + float a3 = mA[row][3]; + + // Standard Matrix Multiply for 3x4 * 3x4 (with implicit 4th row [0,0,0,1]) + res[row * 4 + 0] = a0 * b[0] + a1 * b[4] + a2 * b[8]; + res[row * 4 + 1] = a0 * b[1] + a1 * b[5] + a2 * b[9]; + res[row * 4 + 2] = a0 * b[2] + a1 * b[6] + a2 * b[10]; + // The 4th column includes the translation + res[row * 4 + 3] = a0 * b[3] + a1 * b[7] + a2 * b[11] + a3; + } + } +} diff --git a/src/dusk/extras.c b/src/dusk/extras.c index 1dcb6ae49f..d4af760430 100644 --- a/src/dusk/extras.c +++ b/src/dusk/extras.c @@ -1,5 +1,8 @@ #include "dusk/extras.h" #include +#include +#include +#include int stricmp(const char* str1, const char* str2) { char a_var; @@ -43,3 +46,12 @@ int strnicmp(const char* str1, const char* str2, int n) { return 0; } + + +void *_memcpy(void* dest, void const* src, int n) { + return memcpy(dest, src, n); +} + +void DCZeroRange(void* addr, uint32_t nBytes) { + bzero(addr, nBytes); +} diff --git a/src/dusk/extras.cpp b/src/dusk/extras.cpp new file mode 100644 index 0000000000..f13d3e3440 --- /dev/null +++ b/src/dusk/extras.cpp @@ -0,0 +1,18 @@ +// C++ Mangled version of extras.c +#include +#include + +void *__memcpy(void* dest, void const* src, int n) { + return memcpy(dest, src, n); +} + +void __dcbz(void* addr, int offset) { + // Gekko cache lines are 32 bytes. + // dcbz usually requires addr to be 32-byte aligned. + memset((char*)addr + offset, 0, 32); +} + +int __cntlzw(unsigned int val) { + if (val == 0) return 32; // PowerPC returns 32 if the input is 0 + return __builtin_clz(val); +} diff --git a/src/dusk/globals.cpp b/src/dusk/globals.cpp new file mode 100644 index 0000000000..34537c572c --- /dev/null +++ b/src/dusk/globals.cpp @@ -0,0 +1,16 @@ +#include +#include +#include +u8 g_printOtherHeapDebug; + +dKankyo_HIO_c g_kankyoHIO; + +dDebugPad_c dDebugPad; + +u32 __OSFpscrEnableBits; + +GDLObj* __GDCurrentDL; + +// DSP +DSPTaskInfo* __DSP_first_task; +DSPTaskInfo* __DSP_curr_task; diff --git a/src/dusk/m_Do_ext_dusk.cpp b/src/dusk/m_Do_ext_dusk.cpp new file mode 100644 index 0000000000..7d16d08439 --- /dev/null +++ b/src/dusk/m_Do_ext_dusk.cpp @@ -0,0 +1,565 @@ +// XXX Ripped these from a DEBUG block, rather than changing defines. +/** + * m_Do_ext.cpp + * Model, Animation, and Heap Functions + */ + +#include "d/dolzel.h" // IWYU pragma: keep + +#include +#include +#include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h" +#include "JSystem/J3DGraphBase/J3DDrawBuffer.h" +#include "JSystem/J3DGraphBase/J3DMaterial.h" +#include "JSystem/J3DGraphLoader/J3DMaterialFactory.h" +#include "JSystem/JKernel/JKRAssertHeap.h" +#include "JSystem/JKernel/JKRExpHeap.h" +#include "JSystem/JKernel/JKRSolidHeap.h" +#include "JSystem/JUtility/JUTCacheFont.h" +#include "JSystem/JUtility/JUTResFont.h" +#include "Z2AudioLib/Z2Creature.h" +#include "d/d_com_inf_game.h" +#include "global.h" +#include "m_Do/m_Do_ext.h" +#include "m_Do/m_Do_main.h" +#include "m_Do/m_Do_mtx.h" +#include + +mDoExt_cube8pPacket::mDoExt_cube8pPacket(cXyz* i_points, const GXColor& i_color) { + cXyz* pnt_array = mPoints; + + for (int i = 0; i < 8; i++) { + *(pnt_array)++ = *(i_points)++; + } + + DCStoreRangeNoSync(mPoints, sizeof(cXyz) * 8); + mColor = i_color; +} + +void drawCube(MtxP mtx, cXyz* pos, const GXColor& color) { + GXSetArray(GX_VA_POS, pos, sizeof(cXyz)); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_INDEX8); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP, + GX_AF_NONE); + GXSetNumTexGens(0); + GXSetNumTevStages(1); + GXSetTevColor(GX_TEVREG0, color); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); + GXSetCullMode(GX_CULL_BACK); + GXSetClipMode(GX_CLIP_ENABLE); + GXLoadPosMtxImm(mtx, 0); + GXSetCurrentMtx(0); + + GXBegin(GX_TRIANGLESTRIP, GX_VTXFMT0, 14); + GXPosition1x8(4); + GXPosition1x8(6); + GXPosition1x8(5); + GXPosition1x8(7); + GXPosition1x8(3); + GXPosition1x8(6); + GXPosition1x8(2); + GXPosition1x8(4); + GXPosition1x8(0); + GXPosition1x8(5); + GXPosition1x8(1); + GXPosition1x8(3); + GXPosition1x8(0); + GXPosition1x8(2); + GXEnd(); +} + +void mDoExt_cube8pPacket::draw() { + drawCube(j3dSys.getViewMtx(), mPoints, mColor); +} + +mDoExt_cubePacket::mDoExt_cubePacket(cXyz& i_position, cXyz& i_size, csXyz& i_angle, const GXColor& i_color) { + mPosition = i_position; + mSize = i_size; + mAngle = i_angle; + mColor = i_color; +} + +void mDoExt_cubePacket::draw() { + static cXyz l_pos[8] = { + cXyz(-1.0f, 1.0f, -1.0f), cXyz(1.0f, 1.0f, -1.0f), cXyz(-1.0f, 1.0f, 1.0f), + cXyz(1.0f, 1.0f, 1.0f), cXyz(-1.0f, -1.0f, -1.0f), cXyz(1.0f, -1.0f, -1.0f), + cXyz(-1.0f, -1.0f, 1.0f), cXyz(1.0f, -1.0f, 1.0f), + }; + + mDoMtx_stack_c::transS(mPosition.x, mPosition.y, mPosition.z); + mDoMtx_stack_c::XYZrotM(mAngle.x, mAngle.y, mAngle.z); + mDoMtx_stack_c::scaleM(mSize.x, mSize.y, mSize.z); + mDoMtx_stack_c::revConcat(j3dSys.getViewMtx()); + drawCube(mDoMtx_stack_c::get(), l_pos, mColor); +} + +mDoExt_quadPacket::mDoExt_quadPacket(cXyz* i_points, const GXColor& i_color, u8 i_clipZ) { + cXyz* pnt_array = mPoints; + + for (int i = 0; i < 4; i++) { + *(pnt_array)++ = *(i_points)++; + } + + DCStoreRangeNoSync(mPoints, sizeof(cXyz) * 4); + mColor = i_color; + mClipZ = i_clipZ; +} + +void mDoExt_quadPacket::draw() { + GXSetArray(GX_VA_POS, mPoints, sizeof(cXyz)); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_INDEX8); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP, + GX_AF_NONE); + GXSetNumTexGens(0); + GXSetNumTevStages(1); + GXSetTevColor(GX_TEVREG0, mColor); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + + if (mClipZ) { + GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); + } else { + GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); + } + + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); + GXSetCullMode(GX_CULL_BACK); + GXSetClipMode(GX_CLIP_ENABLE); + GXLoadPosMtxImm(j3dSys.getViewMtx(), 0); + GXSetCurrentMtx(0); + + GXBegin(GX_QUADS, GX_VTXFMT0, 4); + GXPosition1x8(0); + GXPosition1x8(1); + GXPosition1x8(2); + GXPosition1x8(3); + GXEnd(); +} + +mDoExt_trianglePacket::mDoExt_trianglePacket(cXyz* i_points, const GXColor& i_color, u8 i_clipZ) { + cXyz* pnt_array = mPoints; + + for (int i = 0; i < 3; i++) { + *(pnt_array)++ = *(i_points)++; + } + + DCStoreRangeNoSync(mPoints, sizeof(cXyz) * 3); + mColor = i_color; + mClipZ = i_clipZ; +} + +void mDoExt_trianglePacket::draw() { + j3dSys.reinitGX(); + + GXSetArray(GX_VA_POS, mPoints, sizeof(cXyz)); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_INDEX8); + GXLoadPosMtxImm(j3dSys.getViewMtx(), 0); + GXSetCurrentMtx(0); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP, GX_AF_NONE); + GXSetNumTexGens(0); + GXSetNumTevStages(1); + GXSetTevColor(GX_TEVREG0, mColor); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + GXSetZCompLoc(GX_ENABLE); + + if (mClipZ) { + GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); + } else { + GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); + } + + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); + GXSetFog(GX_FOG_NONE, 0.0f, 0.0f, 0.0f, 0.0f, g_clearColor); + GXSetFogRangeAdj(GX_DISABLE, 0, NULL); + GXSetCullMode(GX_CULL_NONE); + GXSetDither(GX_ENABLE); + GXSetClipMode(GX_CLIP_ENABLE); + GXSetNumIndStages(0); + + GXBegin(GX_TRIANGLES, GX_VTXFMT0, 3); + GXPosition1x8(0); + GXPosition1x8(1); + GXPosition1x8(2); + GXEnd(); + + J3DShape::resetVcdVatCache(); +} + +mDoExt_linePacket::mDoExt_linePacket(cXyz& i_start, cXyz& i_end, const GXColor& i_color, u8 i_clipZ, u8 i_width) { + mStart = i_start; + mEnd = i_end; + mColor = i_color; + mClipZ = i_clipZ; + mWidth = i_width; +} + +void mDoExt_linePacket::draw() { + j3dSys.reinitGX(); + + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXLoadPosMtxImm(j3dSys.getViewMtx(), 0); + GXSetCurrentMtx(0); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP, GX_AF_NONE); + GXSetNumTexGens(0); + GXSetNumTevStages(1); + GXSetTevColor(GX_TEVREG0, mColor); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + GXSetZCompLoc(GX_ENABLE); + + if (mClipZ) { + GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); + } else { + GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); + } + + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); + GXSetFog(GX_FOG_NONE, 0.0f, 0.0f, 0.0f, 0.0f, g_clearColor); + GXSetFogRangeAdj(GX_DISABLE, 0, NULL); + GXSetCullMode(GX_CULL_NONE); + GXSetDither(GX_ENABLE); + GXSetClipMode(GX_CLIP_ENABLE); + GXSetNumIndStages(0); + GXSetLineWidth(mWidth, GX_TO_ZERO); + + GXBegin(GX_LINES, GX_VTXFMT0, 2); + GXPosition3f32(mStart.x, mStart.y, mStart.z); + GXPosition3f32(mEnd.x, mEnd.y, mEnd.z); + GXEnd(); + + J3DShape::resetVcdVatCache(); +} + +mDoExt_ArrowPacket::mDoExt_ArrowPacket(cXyz& i_position, cXyz& param_1, const GXColor& i_color, u8 i_clipZ, u8 i_lineWidth) { + mStart = i_position; + mEnd = param_1; + mColor = i_color; + mClipZ = i_clipZ; + mLineWidth = i_lineWidth; +} + +void mDoExt_ArrowPacket::draw() { + Mtx sp28; + cXyz sp18; + + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP, GX_AF_NONE); + GXSetNumTexGens(0); + GXSetNumTevStages(1); + GXSetTevColor(GX_TEVREG0, mColor); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + + if (mClipZ) { + GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); + } else { + GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); + } + + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); + GXSetCullMode(GX_CULL_NONE); + GXSetClipMode(GX_CLIP_ENABLE); + GXSetLineWidth(mLineWidth, GX_TO_ZERO); + + sp18 = mEnd - mStart; + MtxTrans(mStart.x, mStart.y, mStart.z, 0); + cMtx_YrotM(*calc_mtx, sp18.atan2sX_Z()); + cMtx_XrotM(*calc_mtx, cM_atan2s(JMAFastSqrt(SQUARE(sp18.x) + SQUARE(sp18.z)), sp18.y)); + cMtx_concat(j3dSys.getViewMtx(), *calc_mtx, sp28); + + GXLoadPosMtxImm(sp28, 0); + GXSetCurrentMtx(0); + + GXBegin(GX_LINES, GX_VTXFMT0, 2); + GXPosition3f32(0.0f, 0.0f, 0.0f); + GXPosition3f32(0.0f, sp18.abs(), 0.0f); + GXEnd(); + + f32 var_f29 = sp18.abs(); + f32 var_f31 = var_f29 * 0.1f; + f32 var_f30 = var_f29 * 0.8f; + + GXBegin(GX_TRIANGLEFAN, GX_VTXFMT0, 6); + GXPosition3f32(0.0f, var_f29, 0.0f); + GXPosition3f32(0.0f, var_f30, var_f31); + GXPosition3f32(var_f31, var_f30, 0.0f); + GXPosition3f32(0.0f, var_f30, -var_f31); + GXPosition3f32(-var_f31, var_f30, 0.0f); + GXPosition3f32(0.0f, var_f30, var_f31); + GXEnd(); +} + +mDoExt_pointPacket::mDoExt_pointPacket(cXyz& i_position, const GXColor& i_color, u8 i_clipZ, u8 i_lineWidth) { + mPosition = i_position; + mColor = i_color; + mClipZ = i_clipZ; + mLineWidth = i_lineWidth; +} + +void mDoExt_pointPacket::draw() { + j3dSys.reinitGX(); + + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP, GX_AF_NONE); + GXSetNumTexGens(0); + GXSetNumTevStages(1); + GXSetTevColor(GX_TEVREG0, mColor); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + + if (mClipZ) { + GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); + } else { + GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); + } + + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); + GXSetCullMode(GX_CULL_NONE); + GXSetClipMode(GX_CLIP_ENABLE); + GXSetPointSize(mLineWidth, GX_TO_ZERO); + + GXLoadPosMtxImm(j3dSys.getViewMtx(), 0); + GXSetCurrentMtx(0); + + GXBegin(GX_POINTS, GX_VTXFMT0, 1); + GXPosition3f32(mPosition.x, mPosition.y, mPosition.z); + GXEnd(); + + j3dSys.reinitGX(); + J3DShape::resetVcdVatCache(); +} + +mDoExt_circlePacket::mDoExt_circlePacket(cXyz& i_position, f32 i_radius, const GXColor& i_color, u8 i_clipZ, u8 i_lineWidth) { + mPosition = i_position; + mRadius = i_radius; + mColor = i_color; + mClipZ = i_clipZ; + mLineWidth = i_lineWidth; +} + +void mDoExt_circlePacket::draw() { + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP, GX_AF_NONE); + GXSetNumTexGens(0); + GXSetNumTevStages(1); + GXSetTevColor(GX_TEVREG0, mColor); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + + if (mClipZ) { + GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); + } else { + GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); + } + + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); + GXSetCullMode(GX_CULL_NONE); + GXSetClipMode(GX_CLIP_ENABLE); + GXSetLineWidth(mLineWidth, GX_TO_ZERO); + GXLoadPosMtxImm(j3dSys.getViewMtx(), 0); + GXSetCurrentMtx(0); + + cXyz sp38; + cXyz sp44; + int numEdges = 36; + sp38.y = sp44.y = mPosition.y; + + GXBegin(GX_LINES, GX_VTXFMT0, numEdges * 2); + for (int i = 0; i < numEdges; i++) { + sp38.x = cM_fcos((i * 6.2831855f) / numEdges) * mRadius; + sp38.z = cM_fsin((i * 6.2831855f) / numEdges) * mRadius; + + sp44.x = cM_fcos(((i + 1) * 6.2831855f) / numEdges) * mRadius; + sp44.z = cM_fsin(((i + 1) * 6.2831855f) / numEdges) * mRadius; + + sp38.x += mPosition.x; + sp38.z += mPosition.z; + sp44.x += mPosition.x; + sp44.z += mPosition.z; + GXPosition3f32(sp38.x, sp38.y, sp38.z); + GXPosition3f32(sp44.x, sp44.y, sp44.z); + } + GXEnd(); +} + +mDoExt_spherePacket::mDoExt_spherePacket(cXyz& i_position, f32 i_size, const GXColor& i_color, u8 i_clipZ) { + mPosition = i_position; + mSize = i_size; + mColor = i_color; + mClipZ = i_clipZ; +} + +void mDoExt_spherePacket::draw() { + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0, GX_ENABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT0, GX_DF_CLAMP, GX_AF_NONE); + GXSetNumTexGens(0); + GXSetNumTevStages(1); + GXSetTevColor(GX_TEVREG0, mColor); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_RASC, GX_CC_C0, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + + if (mClipZ) { + GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); + } else { + GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); + } + + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); + GXSetCullMode(GX_CULL_BACK); + GXSetClipMode(GX_CLIP_ENABLE); + + mDoMtx_stack_c::copy(j3dSys.getViewMtx()); + mDoMtx_stack_c::transM(mPosition.x, mPosition.y, mPosition.z); + mDoMtx_stack_c::scaleM(mSize, mSize, mSize); + + GXLoadPosMtxImm(mDoMtx_stack_c::get(), 0); + mDoMtx_stack_c::inverseTranspose(); + + GXLoadNrmMtxImm(mDoMtx_stack_c::get(), 0); + GXSetCurrentMtx(0); + + GXDrawSphere(8, 8); +} + +mDoExt_cylinderPacket::mDoExt_cylinderPacket(cXyz& i_position, f32 i_radius, f32 i_height, const GXColor& i_color, u8 i_clipZ) { + mPosition = i_position; + mRadius = i_radius; + mHeight = i_height; + mColor = i_color; + mClipZ = i_clipZ; +} + +void mDoExt_cylinderPacket::draw() { + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0, GX_ENABLE, GX_SRC_REG, GX_SRC_REG, 1, GX_DF_CLAMP, GX_AF_NONE); + GXSetNumTexGens(0); + GXSetNumTevStages(1); + GXSetTevColor(GX_TEVREG0, mColor); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_RASC, GX_CC_C0, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + + if (mClipZ) { + GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); + } else { + GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); + } + + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); + GXSetCullMode(GX_CULL_BACK); + GXSetClipMode(GX_CLIP_ENABLE); + + f32 var_f31 = mHeight * 0.5f; + + mDoMtx_stack_c::copy(j3dSys.getViewMtx()); + mDoMtx_stack_c::transM(mPosition.x, mPosition.y + var_f31, mPosition.z); + mDoMtx_stack_c::scaleM(mRadius, var_f31, mRadius); + mDoMtx_stack_c::XrotM(0x4000); + + GXLoadPosMtxImm(mDoMtx_stack_c::get(), 0); + mDoMtx_stack_c::inverseTranspose(); + + GXLoadNrmMtxImm(mDoMtx_stack_c::get(), 0); + GXSetCurrentMtx(0); + GXDrawCylinder(8); +} + +mDoExt_cylinderMPacket::mDoExt_cylinderMPacket(Mtx i_mtx, const GXColor& i_color, u8 i_clipZ) { + cMtx_copy(i_mtx, mMatrix); + mColor = i_color; + mClipZ = i_clipZ; +} + +void mDoExt_cylinderMPacket::draw() { + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0, GX_ENABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT0, GX_DF_CLAMP, GX_AF_NONE); + GXSetNumTexGens(0); + GXSetNumTevStages(1); + GXSetTevColor(GX_TEVREG0, mColor); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_RASC, GX_CC_C0, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + + if (mClipZ) { + GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); + } else { + GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); + } + + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); + GXSetCullMode(GX_CULL_BACK); + GXSetClipMode(GX_CLIP_ENABLE); + + cMtx_concat(j3dSys.getViewMtx(), mMatrix, mMatrix); + + GXLoadPosMtxImm(mMatrix, 0); + cMtx_inverseTranspose(mMatrix, mMatrix); + + GXLoadNrmMtxImm(mMatrix, 0); + GXSetCurrentMtx(0); + + GXDrawCylinder(8); +} diff --git a/src/dusk/mtx.cpp b/src/dusk/mtx.cpp new file mode 100644 index 0000000000..19016ec781 --- /dev/null +++ b/src/dusk/mtx.cpp @@ -0,0 +1,730 @@ +// This should go into aurora, but for now we'll place it here: +#include +#include +#include + +#define ASSERTLINE(line, cond) (void)0 +#define ASSERTMSGLINE(line, cond, msg) (void)0 +#define ASSERTMSG1LINE(line, cond, msg, arg1) (void)0 +#define ASSERTMSG2LINE(line, cond, msg, arg1, arg2) (void)0 +#define ASSERTMSGLINEV(line, cond, ...) (void)0 + +// SNIP : after here, place it into aurora + +void C_MTXLightOrtho(Mtx m, f32 t, f32 b, f32 l, f32 r, f32 scaleS, f32 scaleT, f32 transS, f32 transT) { + f32 tmp; + + ASSERTMSGLINE(2672, m, "MTXLightOrtho(): NULL MtxPtr 'm' "); + ASSERTMSGLINE(2673, (t != b), "MTXLightOrtho(): 't' and 'b' clipping planes are equal "); + ASSERTMSGLINE(2674, (l != r), "MTXLightOrtho(): 'l' and 'r' clipping planes are equal "); + tmp = 1 / (r - l); + m[0][0] = (2 * tmp * scaleS); + m[0][1] = 0; + m[0][2] = 0; + m[0][3] = (transS + (scaleS * (tmp * -(r + l)))); + tmp = 1/ (t - b); + m[1][0] = 0; + m[1][1] = (2 * tmp * scaleT); + m[1][2] = 0; + m[1][3] = (transT + (scaleT * (tmp * -(t + b)))); + m[2][0] = 0; + m[2][1] = 0; + m[2][2] = 0; + m[2][3] = 1; +} + +void C_MTXLightPerspective(Mtx m, f32 fovY, f32 aspect, f32 scaleS, f32 scaleT, f32 transS, f32 transT) { + f32 angle; + f32 cot; + + ASSERTMSGLINE(2604, m, "MTXLightPerspective(): NULL MtxPtr 'm' "); + ASSERTMSGLINE(2605, (fovY > 0.0) && (fovY < 180.0), "MTXLightPerspective(): 'fovY' out of range "); + ASSERTMSGLINE(2606, 0 != aspect, "MTXLightPerspective(): 'aspect' is 0 "); + + angle = (0.5f * fovY); + angle = MTXDegToRad(angle); + cot = 1 / tanf(angle); + m[0][0] = (scaleS * (cot / aspect)); + m[0][1] = 0; + m[0][2] = -transS; + m[0][3] = 0; + m[1][0] = 0; + m[1][1] = (cot * scaleT); + m[1][2] = -transT; + m[1][3] = 0; + m[2][0] = 0; + m[2][1] = 0; + m[2][2] = -1; + m[2][3] = 0; +} + +void C_MTXLookAt(Mtx m, const Point3d* camPos, const Vec* camUp, const Point3d* target) { + Vec vLook; + Vec vRight; + Vec vUp; + + ASSERTMSGLINE(2437, m, "MTXLookAt(): NULL MtxPtr 'm' "); + ASSERTMSGLINE(2438, camPos, "MTXLookAt(): NULL VecPtr 'camPos' "); + ASSERTMSGLINE(2439, camUp, "MTXLookAt(): NULL VecPtr 'camUp' "); + ASSERTMSGLINE(2440, target, "MTXLookAt(): NULL Point3dPtr 'target' "); + + vLook.x = camPos->x - target->x; + vLook.y = camPos->y - target->y; + vLook.z = camPos->z - target->z; + VECNormalize(&vLook, &vLook); + VECCrossProduct(camUp, &vLook, &vRight); + VECNormalize(&vRight, &vRight); + VECCrossProduct(&vLook, &vRight, &vUp); + m[0][0] = vRight.x; + m[0][1] = vRight.y; + m[0][2] = vRight.z; + m[0][3] = -((camPos->z * vRight.z) + ((camPos->x * vRight.x) + (camPos->y * vRight.y))); + m[1][0] = vUp.x; + m[1][1] = vUp.y; + m[1][2] = vUp.z; + m[1][3] = -((camPos->z * vUp.z) + ((camPos->x * vUp.x) + (camPos->y * vUp.y))); + m[2][0] = vLook.x; + m[2][1] = vLook.y; + m[2][2] = vLook.z; + m[2][3] = -((camPos->z * vLook.z) + ((camPos->x * vLook.x) + (camPos->y * vLook.y))); +} + +void C_MTXPerspective(Mtx44 m, f32 fovY, f32 aspect, f32 n, f32 f) { + f32 angle; + f32 cot; + f32 tmp; + + ASSERTMSGLINE(179, m, "MTXPerspective(): NULL Mtx44Ptr 'm' "); + ASSERTMSGLINE(180, (fovY > 0.0) && (fovY < 180.0), "MTXPerspective(): 'fovY' out of range "); + ASSERTMSGLINE(181, 0.0f != aspect, "MTXPerspective(): 'aspect' is 0 "); + + angle = (0.5f * fovY); + angle = MTXDegToRad(angle); + cot = 1 / tanf(angle); + m[0][0] = (cot / aspect); + m[0][1] = 0; + m[0][2] = 0; + m[0][3] = 0; + m[1][0] = 0; + m[1][1] = (cot); + m[1][2] = 0; + m[1][3] = 0; + m[2][0] = 0; + m[2][1] = 0; + tmp = 1 / (f - n); + m[2][2] = (-n * tmp); + m[2][3] = (tmp * -(f * n)); + m[3][0] = 0; + m[3][1] = 0; + m[3][2] = -1; + m[3][3] = 0; +} + +void C_MTXRotRad(Mtx m, char axis, f32 rad) { + f32 sinA; + f32 cosA; + + ASSERTMSGLINE(1447, m, "MTXRotRad(): NULL MtxPtr 'm' "); + sinA = sinf(rad); + cosA = cosf(rad); + C_MTXRotTrig(m, axis, sinA, cosA); +} + +void C_MTXScale(Mtx m, f32 xS, f32 yS, f32 zS) { + ASSERTMSGLINE(2008, m, "MTXScale(): NULL MtxPtr 'm' "); + m[0][0] = xS; + m[0][1] = 0; + m[0][2] = 0; + m[0][3] = 0; + m[1][0] = 0; + m[1][1] = yS; + m[1][2] = 0; + m[1][3] = 0; + m[2][0] = 0; + m[2][1] = 0; + m[2][2] = zS; + m[2][3] = 0; +} + +void C_MTXScaleApply(const Mtx src, Mtx dst, f32 xS, f32 yS, f32 zS) { + ASSERTMSGLINE(2070, src, "MTXScaleApply(): NULL MtxPtr 'src' "); + ASSERTMSGLINE(2071, dst, "MTXScaleApply(): NULL MtxPtr 'dst' "); + dst[0][0] = (src[0][0] * xS); + dst[0][1] = (src[0][1] * xS); + dst[0][2] = (src[0][2] * xS); + dst[0][3] = (src[0][3] * xS); + dst[1][0] = (src[1][0] * yS); + dst[1][1] = (src[1][1] * yS); + dst[1][2] = (src[1][2] * yS); + dst[1][3] = (src[1][3] * yS); + dst[2][0] = (src[2][0] * zS); + dst[2][1] = (src[2][1] * zS); + dst[2][2] = (src[2][2] * zS); + dst[2][3] = (src[2][3] * zS); +} + +void C_MTXTransApply(const Mtx src, Mtx dst, f32 xT, f32 yT, f32 zT) { + ASSERTMSGLINE(1933, src, "MTXTransApply(): NULL MtxPtr 'src' "); + ASSERTMSGLINE(1934, dst, "MTXTransApply(): NULL MtxPtr 'src' "); //! wrong assert string + + if (src != dst) { + dst[0][0] = src[0][0]; + dst[0][1] = src[0][1]; + dst[0][2] = src[0][2]; + dst[1][0] = src[1][0]; + dst[1][1] = src[1][1]; + dst[1][2] = src[1][2]; + dst[2][0] = src[2][0]; + dst[2][1] = src[2][1]; + dst[2][2] = src[2][2]; + } + + dst[0][3] = (src[0][3] + xT); + dst[1][3] = (src[1][3] + yT); + dst[2][3] = (src[2][3] + zT); +} + +void C_MTXRotTrig(Mtx m, char axis, f32 sinA, f32 cosA) { + ASSERTMSGLINE(1502, m, "MTXRotTrig(): NULL MtxPtr 'm' "); + switch(axis) { + case 'x': + case 'X': + m[0][0] = 1; + m[0][1] = 0; + m[0][2] = 0; + m[0][3] = 0; + m[1][0] = 0; + m[1][1] = cosA; + m[1][2] = -sinA; + m[1][3] = 0; + m[2][0] = 0; + m[2][1] = sinA; + m[2][2] = cosA; + m[2][3] = 0; + break; + case 'y': + case 'Y': + m[0][0] = cosA; + m[0][1] = 0; + m[0][2] = sinA; + m[0][3] = 0; + m[1][0] = 0; + m[1][1] = 1; + m[1][2] = 0; + m[1][3] = 0; + m[2][0] = -sinA; + m[2][1] = 0; + m[2][2] = cosA; + m[2][3] = 0; + break; + case 'z': + case 'Z': + m[0][0] = cosA; + m[0][1] = -sinA; + m[0][2] = 0; + m[0][3] = 0; + m[1][0] = sinA; + m[1][1] = cosA; + m[1][2] = 0; + m[1][3] = 0; + m[2][0] = 0; + m[2][1] = 0; + m[2][2] = 1; + m[2][3] = 0; + break; + default: + ASSERTMSGLINE(1529, FALSE, "MTXRotTrig(): invalid 'axis' value "); + break; + } +} + +void C_VECAdd(const Vec* a, const Vec* b, Vec* ab) { + ASSERTMSGLINE(114, a, "VECAdd(): NULL VecPtr 'a' "); + ASSERTMSGLINE(115, b, "VECAdd(): NULL VecPtr 'b' "); + ASSERTMSGLINE(116, ab, "VECAdd(): NULL VecPtr 'ab' "); + ab->x = a->x + b->x; + ab->y = a->y + b->y; + ab->z = a->z + b->z; +} + +// MTX QUAT + +void C_QUATMultiply(const Quaternion* p, const Quaternion* q, Quaternion* pq) { + Quaternion* r; + Quaternion pqTmp; + + ASSERTMSGLINE(193, p, "QUATMultiply(): NULL QuaternionPtr 'p' "); + ASSERTMSGLINE(194, q, "QUATMultiply(): NULL QuaternionPtr 'q' "); + ASSERTMSGLINE(195, pq, "QUATMultiply(): NULL QuaternionPtr 'pq' "); + + if (p == pq || q == pq){ + r = &pqTmp; + } else { + r = pq; + } + + r->w = (p->w * q->w) - (p->x * q->x) - (p->y * q->y) - (p->z * q->z); + r->x = (p->w * q->x) + (p->x * q->w) + (p->y * q->z) - (p->z * q->y); + r->y = (p->w * q->y) + (p->y * q->w) + (p->z * q->x) - (p->x * q->z); + r->z = (p->w * q->z) + (p->z * q->w) + (p->x * q->y) - (p->y * q->x); + + if (r == &pqTmp) { + *pq = pqTmp; + } +} + +void C_QUATRotAxisRad(Quaternion* r, const Vec* axis, f32 rad) { + f32 half, sh, ch; + Vec nAxis; + + ASSERTMSGLINE(758, r, "QUATRotAxisRad(): NULL QuaternionPtr 'r' "); + ASSERTMSGLINE(759, axis, "QUATRotAxisRad(): NULL VecPtr 'axis' "); + + VECNormalize(axis, &nAxis); + + half = rad * 0.5f; + sh = sinf(half); + ch = cosf(half); + + r->x = sh * nAxis.x; + r->y = sh * nAxis.y; + r->z = sh * nAxis.z; + r->w = ch; +} + +void C_QUATSlerp(const Quaternion* p, const Quaternion* q, Quaternion* r, f32 t) { + f32 theta, sin_th, cos_th; + f32 tp, tq; + + ASSERTMSGLINE(869, p, "QUATSlerp(): NULL QuaternionPtr 'p' "); + ASSERTMSGLINE(870, q, "QUATSlerp(): NULL QuaternionPtr 'q' "); + ASSERTMSGLINE(871, r, "QUATSlerp(): NULL QuaternionPtr 'r' "); + + cos_th = p->x * q->x + p->y * q->y + p->z * q->z + p->w * q->w; + tq = 1.0f; + + if (cos_th < 0.0f) { + cos_th = -cos_th; + tq = -tq; + } + + if (cos_th <= 0.99999f) { + theta = acosf(cos_th); + sin_th = sinf(theta); + + tp = sinf((1.0f - t) * theta) / sin_th; + tq *= sinf(t * theta) / sin_th; + } else { + tp = 1.0f - t; + tq *= t; + } + + r->x = (tp * p->x) + (tq * q->x); + r->y = (tp * p->y) + (tq * q->y); + r->z = (tp * p->z) + (tq * q->z); + r->w = (tp * p->w) + (tq * q->w); +} + +void C_VECHalfAngle(const Vec* a, const Vec* b, Vec* half) { + Vec aTmp; + Vec bTmp; + Vec hTmp; + + ASSERTMSGLINE(713, a, "VECHalfAngle(): NULL VecPtr 'a' "); + ASSERTMSGLINE(714, b, "VECHalfAngle(): NULL VecPtr 'b' "); + ASSERTMSGLINE(715, half, "VECHalfAngle(): NULL VecPtr 'half' "); + + aTmp.x = -a->x; + aTmp.y = -a->y; + aTmp.z = -a->z; + bTmp.x = -b->x; + bTmp.y = -b->y; + bTmp.z = -b->z; + + VECNormalize(&aTmp, &aTmp); + VECNormalize(&bTmp, &bTmp); + VECAdd(&aTmp, &bTmp, &hTmp); + + if (VECDotProduct(&hTmp, &hTmp) > 0.0f) { + VECNormalize(&hTmp, half); + return; + } + *half = hTmp; +} + +void C_VECNormalize(const Vec* src, Vec* unit) { + f32 mag; + + ASSERTMSGLINE(321, src, "VECNormalize(): NULL VecPtr 'src' "); + ASSERTMSGLINE(322, unit, "VECNormalize(): NULL VecPtr 'unit' "); + + mag = (src->z * src->z) + ((src->x * src->x) + (src->y * src->y)); + ASSERTMSGLINE(327, 0.0f != mag, "VECNormalize(): zero magnitude vector "); + + mag = 1.0f/ sqrtf(mag); + unit->x = src->x * mag; + unit->y = src->y * mag; + unit->z = src->z * mag; +} + +void C_VECReflect(const Vec* src, const Vec* normal, Vec* dst) { + f32 cosA; + Vec uI; + Vec uN; + + ASSERTMSGLINE(769, src, "VECReflect(): NULL VecPtr 'src' "); + ASSERTMSGLINE(770, normal, "VECReflect(): NULL VecPtr 'normal' "); + ASSERTMSGLINE(771, dst, "VECReflect(): NULL VecPtr 'dst' "); + + uI.x = -src->x; + uI.y = -src->y; + uI.z = -src->z; + + VECNormalize(&uI, &uI); + VECNormalize(normal, &uN); + + cosA = VECDotProduct(&uI, &uN); + dst->x = (2.0f * uN.x * cosA) - uI.x; + dst->y = (2.0f * uN.y * cosA) - uI.y; + dst->z = (2.0f * uN.z * cosA) - uI.z; + VECNormalize(dst, dst); +} + +u32 C_MTXInverse(const Mtx src, Mtx inv) { + Mtx mTmp; + MtxPtr m; + f32 det; + + ASSERTMSGLINE(950, src, "MTXInverse(): NULL MtxPtr 'src' "); + ASSERTMSGLINE(951, inv, "MTXInverse(): NULL MtxPtr 'inv' "); + + if (src == inv) { + m = mTmp; + } else { + m = inv; + } + det = ((((src[2][1] * (src[0][2] * src[1][0])) + + ((src[2][2] * (src[0][0] * src[1][1])) + + (src[2][0] * (src[0][1] * src[1][2])))) + - (src[0][2] * (src[2][0] * src[1][1]))) + - (src[2][2] * (src[1][0] * src[0][1]))) + - (src[1][2] * (src[0][0] * src[2][1])); + if (0 == det) { + return 0; + } + det = 1 / det; + m[0][0] = (det * +((src[1][1] * src[2][2]) - (src[2][1] * src[1][2]))); + m[0][1] = (det * -((src[0][1] * src[2][2]) - (src[2][1] * src[0][2]))); + m[0][2] = (det * +((src[0][1] * src[1][2]) - (src[1][1] * src[0][2]))); + + m[1][0] = (det * -((src[1][0] * src[2][2]) - (src[2][0] * src[1][2]))); + m[1][1] = (det * +((src[0][0] * src[2][2]) - (src[2][0] * src[0][2]))); + m[1][2] = (det * -((src[0][0] * src[1][2]) - (src[1][0] * src[0][2]))); + + m[2][0] = (det * +((src[1][0] * src[2][1]) - (src[2][0] * src[1][1]))); + m[2][1] = (det * -((src[0][0] * src[2][1]) - (src[2][0] * src[0][1]))); + m[2][2] = (det * +((src[0][0] * src[1][1]) - (src[1][0] * src[0][1]))); + + m[0][3] = ((-m[0][0] * src[0][3]) - (m[0][1] * src[1][3])) - (m[0][2] * src[2][3]); + m[1][3] = ((-m[1][0] * src[0][3]) - (m[1][1] * src[1][3])) - (m[1][2] * src[2][3]); + m[2][3] = ((-m[2][0] * src[0][3]) - (m[2][1] * src[1][3])) - (m[2][2] * src[2][3]); + + if (m == mTmp) { + C_MTXCopy(mTmp, inv); + } + return 1; +} + +void C_MTXConcatArray(const Mtx a, const Mtx* srcBase, Mtx* dstBase, u32 count) { + u32 i; + + ASSERTMSGLINE(580, a != 0, "MTXConcatArray(): NULL MtxPtr 'a' "); + ASSERTMSGLINE(581, srcBase != 0, "MTXConcatArray(): NULL MtxPtr 'srcBase' "); + ASSERTMSGLINE(582, dstBase != 0, "MTXConcatArray(): NULL MtxPtr 'dstBase' "); + ASSERTMSGLINE(583, count > 1, "MTXConcatArray(): count must be greater than 1."); + + for (i = 0; i < count; i++) { + C_MTXConcat(a, *srcBase, *dstBase); + srcBase++; + dstBase++; + } +} + +void C_MTXMultVecArray(const Mtx m, const Vec* srcBase, Vec* dstBase, u32 count) { + u32 i; + Vec vTmp; + + ASSERTMSGLINE(168, m, "MTXMultVecArray(): NULL MtxPtr 'm' "); + ASSERTMSGLINE(169, srcBase, "MTXMultVecArray(): NULL VecPtr 'srcBase' "); + ASSERTMSGLINE(170, dstBase, "MTXMultVecArray(): NULL VecPtr 'dstBase' "); + ASSERTMSGLINE(171, count > 1, "MTXMultVecArray(): count must be greater than 1."); + + for(i = 0; i < count; i++) { + vTmp.x = m[0][3] + ((m[0][2] * srcBase->z) + ((m[0][0] * srcBase->x) + (m[0][1] * srcBase->y))); + vTmp.y = m[1][3] + ((m[1][2] * srcBase->z) + ((m[1][0] * srcBase->x) + (m[1][1] * srcBase->y))); + vTmp.z = m[2][3] + ((m[2][2] * srcBase->z) + ((m[2][0] * srcBase->x) + (m[2][1] * srcBase->y))); + dstBase->x = vTmp.x; + dstBase->y = vTmp.y; + dstBase->z = vTmp.z; + srcBase++; + dstBase++; + } +} + +void C_MTXMultVecArraySR(const Mtx m, const Vec* srcBase, Vec* dstBase, u32 count) { + u32 i; + Vec vTmp; + + ASSERTMSGLINE(410, m, "MTXMultVecArraySR(): NULL MtxPtr 'm' "); + ASSERTMSGLINE(411, srcBase, "MTXMultVecArraySR(): NULL VecPtr 'srcBase' "); + ASSERTMSGLINE(412, dstBase, "MTXMultVecArraySR(): NULL VecPtr 'dstBase' "); + ASSERTMSGLINE(413, count > 1, "MTXMultVecArraySR(): count must be greater than 1."); + + for(i = 0; i < count; i++) { + vTmp.x = (m[0][2] * srcBase->z) + ((m[0][0] * srcBase->x) + (m[0][1] * srcBase->y)); + vTmp.y = (m[1][2] * srcBase->z) + ((m[1][0] * srcBase->x) + (m[1][1] * srcBase->y)); + vTmp.z = (m[2][2] * srcBase->z) + ((m[2][0] * srcBase->x) + (m[2][1] * srcBase->y)); + dstBase->x = vTmp.x; + dstBase->y = vTmp.y; + dstBase->z = vTmp.z; + srcBase++; + dstBase++; + } +} + +void C_MTXQuat(Mtx m, const Quaternion* q) { + f32 s; + f32 xs; + f32 ys; + f32 zs; + f32 wx; + f32 wy; + f32 wz; + f32 xx; + f32 xy; + f32 xz; + f32 yy; + f32 yz; + f32 zz; + + ASSERTMSGLINE(2145, m, "MTXQuat(): NULL MtxPtr 'm' "); + ASSERTMSGLINE(2146, q, "MTXQuat(): NULL QuaternionPtr 'q' "); + ASSERTMSGLINE(2147, q->x || q->y || q->z || q->w, "MTXQuat(): zero-value quaternion "); + s = 2 / ((q->w * q->w) + ((q->z * q->z) + ((q->x * q->x) + (q->y * q->y)))); + xs = q->x * s; + ys = q->y * s; + zs = q->z * s; + wx = q->w * xs; + wy = q->w * ys; + wz = q->w * zs; + xx = q->x * xs; + xy = q->x * ys; + xz = q->x * zs; + yy = q->y * ys; + yz = q->y * zs; + zz = q->z * zs; + m[0][0] = (1 - (yy + zz)); + m[0][1] = (xy - wz); + m[0][2] = (xz + wy); + m[0][3] = 0; + m[1][0] = (xy + wz); + m[1][1] = (1 - (xx + zz)); + m[1][2] = (yz - wx); + m[1][3] = 0; + m[2][0] = (xz - wy); + m[2][1] = (yz + wx); + m[2][2] = (1 - (xx + yy)); + m[2][3] = 0; +} +void C_MTXRotAxisRad(Mtx m, const Vec* axis, f32 rad) { + Vec vN; + f32 s; + f32 c; + f32 t; + f32 x; + f32 y; + f32 z; + f32 xSq; + f32 ySq; + f32 zSq; + + ASSERTMSGLINE(1677, m, "MTXRotAxisRad(): NULL MtxPtr 'm' "); + ASSERTMSGLINE(1678, axis, "MTXRotAxisRad(): NULL VecPtr 'axis' "); + + s = sinf(rad); + c = cosf(rad); + t = 1 - c; + C_VECNormalize(axis, &vN); + x = vN.x; + y = vN.y; + z = vN.z; + xSq = (x * x); + ySq = (y * y); + zSq = (z * z); + m[0][0] = (c + (t * xSq)); + m[0][1] = (y * (t * x)) - (s * z); + m[0][2] = (z * (t * x)) + (s * y); + m[0][3] = 0; + m[1][0] = ((y * (t * x)) + (s * z)); + m[1][1] = (c + (t * ySq)); + m[1][2] = ((z * (t * y)) - (s * x)); + m[1][3] = 0; + m[2][0] = ((z * (t * x)) - (s * y)); + m[2][1] = ((z * (t * y)) + (s * x)); + m[2][2] = (c + (t * zSq)); + m[2][3] = 0; +} + +// VEC +void C_VECCrossProduct(const Vec* a, const Vec* b, Vec* axb) { + Vec vTmp; + + ASSERTMSGLINE(608, a, "VECCrossProduct(): NULL VecPtr 'a' "); + ASSERTMSGLINE(609, b, "VECCrossProduct(): NULL VecPtr 'b' "); + ASSERTMSGLINE(610, axb, "VECCrossProduct(): NULL VecPtr 'axb' "); + + vTmp.x = (a->y * b->z) - (a->z * b->y); + vTmp.y = (a->z * b->x) - (a->x * b->z); + vTmp.z = (a->x * b->y) - (a->y * b->x); + axb->x = vTmp.x; + axb->y = vTmp.y; + axb->z = vTmp.z; +} + +f32 C_VECDistance(const Vec* a, const Vec* b) { + return sqrtf(C_VECSquareDistance(a, b)); +} + +f32 C_VECDotProduct(const Vec* a, const Vec* b) { + f32 dot; + + ASSERTMSGLINE(546, a, "VECDotProduct(): NULL VecPtr 'a' "); + ASSERTMSGLINE(547, b, "VECDotProduct(): NULL VecPtr 'b' "); + dot = (a->z * b->z) + ((a->x * b->x) + (a->y * b->y)); + return dot; +} + +f32 C_VECMag(const Vec* v) { + return sqrtf(C_VECSquareMag(v)); +} + +void C_VECScale(const Vec* src, Vec* dst, f32 scale) { + ASSERTMSGLINE(253, src, "VECScale(): NULL VecPtr 'src' "); + ASSERTMSGLINE(254, dst, "VECScale(): NULL VecPtr 'dst' "); + dst->x = (src->x * scale); + dst->y = (src->y * scale); + dst->z = (src->z * scale); +} + +f32 C_VECSquareDistance(const Vec* a, const Vec* b) { + Vec diff; + + diff.x = a->x - b->x; + diff.y = a->y - b->y; + diff.z = a->z - b->z; + return (diff.z * diff.z) + ((diff.x * diff.x) + (diff.y * diff.y)); +} + +f32 C_VECSquareMag(const Vec* v) { + f32 sqmag; + + ASSERTMSGLINE(411, v, "VECMag(): NULL VecPtr 'v' "); + + sqmag = v->z * v->z + ((v->x * v->x) + (v->y * v->y)); + return sqmag; +} + +void C_VECSubtract(const Vec* a, const Vec* b, Vec* a_b) { + ASSERTMSGLINE(183, a, "VECSubtract(): NULL VecPtr 'a' "); + ASSERTMSGLINE(184, b, "VECSubtract(): NULL VecPtr 'b' "); + ASSERTMSGLINE(185, a_b, "VECSubtract(): NULL VecPtr 'a_b' "); + a_b->x = a->x - b->x; + a_b->y = a->y - b->y; + a_b->z = a->z - b->z; +} + +#pragma mark PSMTX +// I think these are PPC ASM implemntations? +// this can be done just with defining DEBUG, but that has some other +// implecations, so we'll just define them here for now. These are all just wrappers around the C versions, so we can just call those directly. +void PSMTXConcatArray(const __REGISTER Mtx a, const __REGISTER Mtx* srcBase, __REGISTER Mtx* dstBase, __REGISTER u32 count) { + C_MTXConcatArray(a, srcBase, dstBase, count); +} +void PSMTXCopy(const __REGISTER Mtx src, __REGISTER Mtx dst) { + C_MTXCopy(src, dst); +} +void PSMTXIdentity(__REGISTER Mtx m) { + C_MTXIdentity(m); +} +u32 PSMTXInverse(const __REGISTER Mtx src, __REGISTER Mtx inv) { + return C_MTXInverse(src, inv); +} +void PSMTXMultVec(const __REGISTER Mtx m, const __REGISTER Vec* src, __REGISTER Vec* dst) { + C_MTXMultVec(m, src, dst); +} +void PSMTXConcat(const __REGISTER Mtx a, const __REGISTER Mtx b, __REGISTER Mtx ab) { + C_MTXConcat(a, b, ab); +} +void PSMTXMultVecArray(const Mtx m, const Vec* srcBase, Vec* dstBase, u32 count) { + C_MTXMultVecArray(m, srcBase, dstBase, count); +} +void PSMTXMultVecArraySR(const __REGISTER Mtx m, const __REGISTER Vec* srcBase, __REGISTER Vec* dstBase, __REGISTER u32 count) { + C_MTXMultVecArraySR(m, srcBase, dstBase, count); +} +void PSMTXMultVecSR(const __REGISTER Mtx m, const __REGISTER Vec* src, __REGISTER Vec* dst) { + C_MTXMultVecSR(m, src, dst); +} +void PSMTXQuat(__REGISTER Mtx m, const __REGISTER Quaternion* q) { + C_MTXQuat(m, q); +} +void PSMTXRotAxisRad(Mtx m, const Vec* axis, f32 rad) { + C_MTXRotAxisRad(m, axis, rad); +} +void PSMTXRotRad(Mtx m, char axis, f32 rad) { + C_MTXRotRad(m, axis, rad); +} +void PSMTXScale(__REGISTER Mtx m, __REGISTER f32 xS, __REGISTER f32 yS, __REGISTER f32 zS) { + C_MTXScale(m, xS, yS, zS); +} +void PSMTXScaleApply(const __REGISTER Mtx src, __REGISTER Mtx dst, __REGISTER f32 xS, __REGISTER f32 yS, __REGISTER f32 zS) { + C_MTXScaleApply(src, dst, xS, yS, zS); +} +void PSMTXTrans(__REGISTER Mtx m, __REGISTER f32 xT, __REGISTER f32 yT, __REGISTER f32 zT) { + C_MTXTrans(m, xT, yT, zT); +} +void PSMTXTransApply(const __REGISTER Mtx src, __REGISTER Mtx dst, __REGISTER f32 xT, __REGISTER f32 yT, __REGISTER f32 zT) { + C_MTXTransApply(src, dst, xT, yT, zT); +} +void PSQUATMultiply(const __REGISTER Quaternion* p, const __REGISTER Quaternion* q, __REGISTER Quaternion* pq) { + C_QUATMultiply(p, q, pq); +} +void PSVECAdd(const __REGISTER Vec* a, const __REGISTER Vec* b, __REGISTER Vec* ab) { + C_VECAdd(a, b, ab); +} +void PSVECCrossProduct(const __REGISTER Vec* a, const __REGISTER Vec* b, __REGISTER Vec* axb) { + C_VECCrossProduct(a, b, axb); +} +f32 PSVECDistance(const __REGISTER Vec* a, const __REGISTER Vec* b) { + return C_VECDistance(a, b); +} +f32 PSVECDotProduct(const __REGISTER Vec* a, const __REGISTER Vec* b) { + return C_VECDotProduct(a, b); +} +f32 PSVECMag(const __REGISTER Vec* v) { + return C_VECMag(v); +} +void PSVECNormalize(const __REGISTER Vec* src, __REGISTER Vec* unit) { + C_VECNormalize(src, unit); +} +void PSVECScale(const __REGISTER Vec* src, __REGISTER Vec* dst, __REGISTER f32 scale) { + C_VECScale(src, dst, scale); +} +f32 PSVECSquareDistance(const __REGISTER Vec* a, const __REGISTER Vec* b) { + return C_VECSquareDistance(a, b); +} +f32 PSVECSquareMag(const __REGISTER Vec* v) { + return C_VECSquareMag(v); +} +void PSVECSubtract(const __REGISTER Vec* a, const __REGISTER Vec* b, __REGISTER Vec* a_b) { + C_VECSubtract(a, b, a_b); +} diff --git a/src/dusk/stubs.c b/src/dusk/stubs.c deleted file mode 100644 index f31a522eb7..0000000000 --- a/src/dusk/stubs.c +++ /dev/null @@ -1,517 +0,0 @@ -#include -#include -#include -#include - -// Credits: Super Monkey Ball - -static VIRetraceCallback sVIRetraceCallback = NULL; - -void OSReport(const char *msg, ...) { - va_list args; - va_start(args, msg); - vprintf(msg, args); - va_end(args); -} - -u32 OSGetConsoleType() { return OS_CONSOLE_RETAIL1; } - -u32 OSGetSoundMode() { return 2; } - -s32 CARDCancel(CARDFileInfo *fileInfo) { - puts("CARDCancel is a stub"); - return 0; -} - -s32 CARDCheck(s32 chan) { - puts("CARDCheck is a stub"); - return 0; -} - -s32 CARDCheckAsync(s32 chan, CARDCallback callback) { - puts("CARDCheckAsync is a stub"); - return 0; -} - -s32 CARDClose(CARDFileInfo *fileInfo) { - puts("CARDClose is a stub"); - return 0; -} - -s32 CARDCreate(s32 chan, const char *fileName, u32 size, - CARDFileInfo *fileInfo) { - puts("CARDCreate is a stub"); - return 0; -} - -s32 CARDCreateAsync(s32 chan, const char *fileName, u32 size, - CARDFileInfo *fileInfo, CARDCallback callback) { - puts("CARDCreateAsync is a stub"); - return 0; -} - -s32 CARDDelete(s32 chan, const char *fileName) { - puts("CARDDelete is a stub"); - return 0; -} - -s32 CARDDeleteAsync(s32 chan, const char *fileName, CARDCallback callback) { - puts("CARDDeleteAsync is a stub"); - return 0; -} - -s32 CARDFastDeleteAsync(s32 chan, s32 fileNo, CARDCallback callback) { - puts("CARDFastDeleteAsync is a stub"); - return 0; -} - -s32 CARDFastOpen(s32 chan, s32 fileNo, CARDFileInfo *fileInfo) { - puts("CARDFastOpen is a stub"); - return 0; -} - -s32 CARDFormat(s32 chan) { - puts("CARDFormat is a stub"); - return 0; -} - -s32 CARDFreeBlocks(s32 chan, s32 *byteNotUsed, s32 *filesNotUsed) { - puts("CARDFreeBlocks is a stub"); - return 0; -} - -s32 CARDGetResultCode(s32 chan) { - puts("CARDGetResultCode is a stub"); - return 0; -} - -s32 CARDGetStatus(s32 chan, s32 fileNo, CARDStat *stat) { - puts("CARDGetStatus is a stub"); - return 0; -} - -s32 CARDGetSectorSize(s32 chan, u32 *size) { - puts("CARDGetSectorSize is a stub"); - return 0; -} - -void CARDInit() { puts("CARDInit is a stub"); } - -s32 CARDMount(s32 chan, void *workArea, CARDCallback detachCallback) { - puts("CARDMount is a stub"); - return 0; -} - -s32 CARDMountAsync(s32 chan, void *workArea, CARDCallback detachCallback, - CARDCallback attachCallback) { - puts("CARDMountAsync is a stub"); - return 0; -} - -s32 CARDOpen(s32 chan, const char *fileName, CARDFileInfo *fileInfo) { - puts("CARDOpen is a stub"); - return 0; -} - -s32 CARDProbeEx(s32 chan, s32 *memSize, s32 *sectorSize) { - puts("CARDProbeEx is a stub"); - return 0; -} - -s32 CARDRead(CARDFileInfo *fileInfo, void *addr, s32 length, s32 offset) { - puts("CARDRead is a stub"); - return 0; -} - -s32 CARDReadAsync(CARDFileInfo *fileInfo, void *addr, s32 length, s32 offset, - CARDCallback callback) { - puts("CARDReadAsync is a stub"); - return 0; -} - -s32 CARDRename(s32 chan, const char *oldName, const char *newName) { - puts("CARDRename is a stub"); - return 0; -} - -s32 CARDRenameAsync(s32 chan, const char *oldName, const char *newName, - CARDCallback callback) { - puts("CARDRenameAsync is a stub"); - return 0; -} - -s32 CARDSetStatusAsync(s32 chan, s32 fileNo, CARDStat *stat, - CARDCallback callback) { - puts("CARDSetStatusAsync is a stub"); - return 0; -} - -s32 CARDUnmount(s32 chan) { - puts("CARDUnmount is a stub"); - return 0; -} - -s32 CARDWrite(CARDFileInfo *fileInfo, const void *addr, s32 length, - s32 offset) { - puts("CARDWrite is a stub"); - return 0; -} - -s32 CARDWriteAsync(CARDFileInfo *fileInfo, const void *addr, s32 length, - s32 offset, CARDCallback callback) { - puts("CARDWriteAsync is a stub"); - return 0; -} - -s32 CARDGetSerialNo(s32 chan, u64 *serialNo) { return 0; } - -s32 CARDSetStatus(s32 chan, s32 fileNo, CARDStat *stat) { return 0; } - -void DCFlushRange(void *addr, u32 nBytes) { - // puts("DCFlushRange is a stub"); -} - -void DCFlushRangeNoSync(void *addr, u32 nBytes) { - // puts("DCFlushRangeNoSync is a stub"); -} - -void DCInvalidateRange(void *addr, u32 nBytes) { - // puts("DCInvalidateRange is a stub"); -} - -void DCStoreRange(void *addr, u32 nBytes) { - // puts("DCStoreRange is a stub"); -} - -void DCStoreRangeNoSync(void *addr, u32 nBytes) { - // puts("DCStoreRangeNoSync is a stub"); -} - -s32 DVDCancel(DVDCommandBlock *block) { - puts("DVDCancel is a stub"); - return 0; -} - -void DVDReadAbsAsyncForBS(void *a, struct bb2struct *b, int c, int d, - void (*e)()) { - puts("DVDReadAbsAsyncForBS is a stub"); -} - -void DVDReadDiskID(void *a, DVDDiskID *b, void (*c)()) { - puts("DVDReadDiskID is a stub"); -} - -void DVDReset() { puts("DVDReset is a stub"); } - -BOOL EXIDeselect(int chan) { - puts("EXIDeselect is a stub"); - return FALSE; -} - -BOOL EXIDma(int chan, void *buffer, s32 size, int d, int e) { - puts("EXIDma is a stub"); - return FALSE; -} - -BOOL EXIImm(int chan, u32 *b, int c, int d, int e) { - puts("EXIImm is a stub"); - return FALSE; -} - -BOOL EXILock(int chan, int b, int c) { - puts("EXILock is a stub"); - return FALSE; -} - -BOOL EXISelect(int chan, int b, int c) { - puts("EXISelect is a stub"); - return FALSE; -} - -BOOL EXISync(int chan) { - puts("EXISync is a stub"); - return FALSE; -} - -BOOL EXIUnlock(int chan) { - puts("EXIUnlock is a stub"); - return FALSE; -} - -void LCEnable() { puts("LCEnable is a stub"); } - -void OSClearContext(OSContext *context) { puts("OSClearContext is a stub"); } - -BOOL OSDisableInterrupts() { - puts("OSDisableInterrupts is a stub"); - return FALSE; -} - -void OSDumpContext(OSContext *context) { puts("OSDumpContext is a stub"); } - -OSThread *OSGetCurrentThread() { - puts("OSGetCurrentThread is a stub"); - return 0; -} - -u16 OSGetFontEncode() { - puts("OSGetFontEncode is a stub"); - return 0; -} - -char *OSGetFontTexture(char *string, void **image, s32 *x, s32 *y, s32 *width) { - puts("OSGetFontTexture is a stub"); - return 0; -} - -char *OSGetFontWidth(char *string, s32 *width) { - puts("OSGetFontWidth is a stub"); - return 0; -} - -BOOL OSGetResetButtonState() { - puts("OSGetResetButtonState is a stub"); - return FALSE; -} - -u32 OSGetStackPointer() { - puts("OSGetStackPointer is a stub"); - return 0; -} - -BOOL OSInitFont(OSFontHeader *fontData) { - puts("OSInitFont is a stub"); - return FALSE; -} - -BOOL OSLink(OSModuleInfo *newModule, void *bss) { - puts("OSLink is a stub"); - return TRUE; -} - -void OSLoadContext(OSContext *context) { puts("OSLoadContext is a stub"); } - -void OSResetSystem(int reset, u32 resetCode, BOOL forceMenu) { - puts("OSResetSystem is a stub"); -} - -BOOL OSRestoreInterrupts(BOOL level) { - puts("OSRestoreInterrupts is a stub"); - return FALSE; -} - -s32 OSResumeThread(OSThread *thread) { - puts("OSResumeThread is a stub"); - return 0; -} - -void OSSetCurrentContext(OSContext *context) { - puts("OSSetCurrentContext is a stub"); -} - -void OSSetStringTable(const void *stringTable) { - puts("OSSetStringTable is a stub"); -} - -s32 OSSuspendThread(OSThread *thread) { - puts("OSSuspendThread is a stub"); - return 0; -} - -void OSTicksToCalendarTime(OSTime ticks, OSCalendarTime *td) { - puts("OSTicksToCalendarTime is a stub"); -} - -BOOL OSUnlink(OSModuleInfo *oldModule) { - puts("OSUnlink is a stub"); - return FALSE; -} - -void OSWakeupThread(OSThreadQueue *queue) { puts("OSWakeupThread is a stub"); } - -void PPCHalt() { puts("PPCHalt is a stub"); } - -void SoundChoID(int a, int b) { puts("SoundChoID is a stub"); } - -void SoundPan(int a, int b, int c) { puts("SoundPan is a stub"); } - -void SoundPitch(u16 a, int b) { puts("SoundPitch is a stub"); } - -void SoundRevID(int a, int b) { puts("SoundRevID is a stub"); } - -void VIConfigure(const GXRenderModeObj *rm) { puts("VIConfigure is a stub"); } - -void VIConfigurePan(u16 xOrg, u16 yOrg, u16 width, u16 height) { - puts("VIConfigurePan is a stub"); -} - -u32 VIGetRetraceCount() { - // puts("VIGetRetraceCount is a stub"); - return 0; // TODO this might be important -} - -u32 VIGetNextField() { - puts("VIGetNextField is a stub"); - return 0; -} - -void VISetBlack(BOOL black) { puts("VISetBlack is a stub"); } - -void VISetNextFrameBuffer(void *fb) { - // puts("VISetNextFrameBuffer is a stub"); -} - -void VIWaitForRetrace() { - if (sVIRetraceCallback) { - sVIRetraceCallback(0); - } -} - -s32 __CARDFormatRegionAsync(int a, int b) { - puts("__CARDFormatRegionAsync is a stub"); - return 0; -} - -void __GXSetSUTexSize() { puts("__GXSetSUTexSize is a stub"); } - -void __GXSetVAT() { puts("__GXSetVAT is a stub"); } - -void __GXSetVCD() { puts("__GXSetVCD is a stub"); } - -void __GXUpdateBPMask() { puts("__GXUpdateBPMask is a stub"); } - -u32 __OSGetDIConfig() { - puts("__OSGetDIConfig is a stub"); - return 0; -} - -__OSInterruptHandler __OSSetInterruptHandler(__OSInterrupt interrupt, - __OSInterruptHandler handler) { - puts("__OSSetInterruptHandler is a stub"); - return 0; -} - -OSInterruptMask __OSUnmaskInterrupts(OSInterruptMask mask) { - puts("__OSUnmaskInterrupts is a stub"); - return 0; -} - -void SISetSamplingRate(u32 msec) { - // Maybe we could include SI later - puts("SISetSamplingRate is a stub"); -} - -VIRetraceCallback VISetPostRetraceCallback(VIRetraceCallback callback) { - sVIRetraceCallback = callback; - return callback; -} - -void GXSetGPMetric(GXPerf0 perf0, GXPerf1 perf1) { - // puts("GXSetGPMetric is a stub"); -} - -void GXReadGPMetric(u32 *cnt0, u32 *cnt1) { - // puts("GXReadGPMetric is a stub"); -} - -void GXClearGPMetric(void) { - // puts("GXClearGPMetric is a stub"); -} - -void GXReadMemMetric(u32 *cp_req, u32 *tc_req, u32 *cpu_rd_req, u32 *cpu_wr_req, - u32 *dsp_req, u32 *io_req, u32 *vi_req, u32 *pe_req, - u32 *rf_req, u32 *fi_req) { - // puts("GXReadMemMetric is a stub"); -} - -void GXClearMemMetric(void) { - // puts("GXClearMemMetric is a stub"); -} - -void GXClearVCacheMetric(void) { - // puts("GXClearVCacheMetric is a stub"); -} - -void GXReadPixMetric(u32 *top_pixels_in, u32 *top_pixels_out, - u32 *bot_pixels_in, u32 *bot_pixels_out, - u32 *clr_pixels_in, u32 *copy_clks) { - // puts("GXReadPixMetric is a stub"); -} - -void GXClearPixMetric(void) { - // puts("GXClearPixMetric is a stub"); -} - -void GXSetVCacheMetric(GXVCachePerf attr) { - // puts("GXSetVCacheMetric is a stub"); -} - -void GXReadVCacheMetric(u32 *check, u32 *miss, u32 *stall) { - // puts("GXReadVCacheMetric is a stub"); -} - -void GXSetDrawSync(u16 token) { - // puts("GXSetDrawSync is a stub"); -} - -GXDrawSyncCallback GXSetDrawSyncCallback(GXDrawSyncCallback cb) { - puts("GXSetDrawSyncCallback is a stub"); - // TODO - return cb; -} - -void PPCSync(void) { - // puts("PPCSync is a stub"); -} - -void GXWaitDrawDone(void) { - // puts("GXWaitDrawDone is a stub"); -} - -void GXSetTevIndTile(GXTevStageID tev_stage, GXIndTexStageID ind_stage, - u16 tilesize_s, u16 tilesize_t, u16 tilespacing_s, - u16 tilespacing_t, GXIndTexFormat format, - GXIndTexMtxID matrix_sel, GXIndTexBiasSel bias_sel, - GXIndTexAlphaSel alpha_sel) { - // TODO - // puts("GXSetTevIndTile is a stub"); -} - -void GXResetWriteGatherPipe(void) { - // puts("GXResetWriteGatherPipe is a stub"); -} - -void ARQInit(void) { puts("ARQInit is a stub"); } - -void GXProject(f32 x, f32 y, f32 z, const f32 mtx[3][4], const f32 *pm, - const f32 *vp, f32 *sx, f32 *sy, f32 *sz) { - Vec peye; - f32 xc; - f32 yc; - f32 zc; - f32 wc; - - peye.x = mtx[0][3] + ((mtx[0][2] * z) + ((mtx[0][0] * x) + (mtx[0][1] * y))); - peye.y = mtx[1][3] + ((mtx[1][2] * z) + ((mtx[1][0] * x) + (mtx[1][1] * y))); - peye.z = mtx[2][3] + ((mtx[2][2] * z) + ((mtx[2][0] * x) + (mtx[2][1] * y))); - if (pm[0] == 0.0f) { - xc = (peye.x * pm[1]) + (peye.z * pm[2]); - yc = (peye.y * pm[3]) + (peye.z * pm[4]); - zc = pm[6] + (peye.z * pm[5]); - wc = 1.0f / -peye.z; - } else { - xc = pm[2] + (peye.x * pm[1]); - yc = pm[4] + (peye.y * pm[3]); - zc = pm[6] + (peye.z * pm[5]); - wc = 1.0f; - } - *sx = (vp[2] / 2.0f) + (vp[0] + (wc * (xc * vp[2] / 2.0f))); - *sy = (vp[3] / 2.0f) + (vp[1] + (wc * (-yc * vp[3] / 2.0f))); - *sz = vp[5] + (wc * (zc * (vp[5] - vp[4]))); -} - -void GXGetViewportv(f32 *vp) { - // TODO -} - -void OSSetSoundMode(u32 mode) {} diff --git a/src/dusk/stubs.cpp b/src/dusk/stubs.cpp new file mode 100644 index 0000000000..b4da7aa1df --- /dev/null +++ b/src/dusk/stubs.cpp @@ -0,0 +1,1651 @@ +#include +#include +#include +#include + +// Credits: Super Monkey Ball + +# pragma mark OS +void OSReport(const char *msg, ...) { + va_list args; + va_start(args, msg); + vprintf(msg, args); + va_end(args); +} + +u32 OSGetConsoleType() { return OS_CONSOLE_RETAIL1; } + +u32 OSGetSoundMode() { return 2; } + +// Consolidated OS functions (moved from other sections) +void OSClearContext(OSContext *context) { puts("OSClearContext is a stub"); } + +void OSInit() { puts("OSInit is a stub"); } + +void OSInitMutex(OSMutex *mutex) { puts("OSInitMutex is a stub"); } + +void OSUnlockMutex(OSMutex *mutex) { puts("OSUnlockMutex is a stub"); } + +BOOL OSTryLockMutex(OSMutex *mutex) { + puts("OSTryLockMutex is a stub"); + return FALSE; +} + +void *OSAllocFromArenaLo(u32 size, u32 align) { + puts("OSAllocFromArenaLo is a stub"); + return NULL; +} + +BOOL OSDisableInterrupts() { + puts("OSDisableInterrupts is a stub"); + return FALSE; +} + +void OSSleepThread(OSThreadQueue *queue) { puts("OSSleepThread is a stub"); } + +void OSDumpContext(OSContext *context) { puts("OSDumpContext is a stub"); } + +void OSSignalCond(OSCond *cond) { puts("OSSignalCond is a stub"); } + +void OSCreateAlarm(OSAlarm *alarm) { puts("OSCreateAlarm is a stub"); } + +void OSCancelAlarm(OSAlarm *alarm) { puts("OSCancelAlarm is a stub"); } + +s32 OSCheckActiveThreads(void) { puts("OSCheckActiveThreads is a stub"); } + +int OSCreateThread(OSThread* thread, void* (*func)(void*), void* param, void* stack, u32 stackSize, OSPriority priority, u16 attr) { + puts("OSCreateThread is a stub"); + return 0; +} + +s32 OSDisableScheduler() { + puts("OSDisableScheduler is a stub"); + return 0; +} + +void OSDetachThread(OSThread* thread) { + puts("OSDetachThread is a stub"); +} + +OSThread *OSGetCurrentThread() { + puts("OSGetCurrentThread is a stub"); + return 0; +} + +u16 OSGetFontEncode() { + puts("OSGetFontEncode is a stub"); + return 0; +} + +char *OSGetFontTexture(char *string, void **image, s32 *x, s32 *y, s32 *width) { + puts("OSGetFontTexture is a stub"); + return 0; +} + +char *OSGetFontWidth(char *string, s32 *width) { + puts("OSGetFontWidth is a stub"); + return 0; +} + +BOOL OSGetResetButtonState() { + puts("OSGetResetButtonState is a stub"); + return FALSE; +} + +u32 OSGetStackPointer() { + puts("OSGetStackPointer is a stub"); + return 0; +} + +BOOL OSInitFont(OSFontHeader *fontData) { + puts("OSInitFont is a stub"); + return FALSE; +} + +BOOL OSLink(OSModuleInfo *newModule, void *bss) { + puts("OSLink is a stub"); + return TRUE; +} + +void OSLoadContext(OSContext *context) { puts("OSLoadContext is a stub"); } + +void OSResetSystem(int reset, u32 resetCode, BOOL forceMenu) { + puts("OSResetSystem is a stub"); +} + +BOOL OSRestoreInterrupts(BOOL level) { + puts("OSRestoreInterrupts is a stub"); + return FALSE; +} + +s32 OSResumeThread(OSThread *thread) { + puts("OSResumeThread is a stub"); + return 0; +} + +void OSSetCurrentContext(OSContext *context) { + puts("OSSetCurrentContext is a stub"); +} + +void OSSetStringTable(void* stringTable) { + puts("OSSetStringTable is a stub"); +} + +OSSwitchThreadCallback OSSetSwitchThreadCallback(OSSwitchThreadCallback callback) { + puts("OSSetSwitchThreadCallback is a stub"); + return NULL; +} + +int OSSetThreadPriority(OSThread* thread, s32 priority) { + puts("OSSetThreadPriority is a stub"); + return 0; +} + +void OSWaitCond(OSCond* cond, OSMutex* mutex) { + puts("OSWaitCond is a stub"); +} + +void OSYieldThread(void) { + puts("OSYieldThread is a stub"); +} + +s32 OSSuspendThread(OSThread *thread) { + puts("OSSuspendThread is a stub"); + return 0; +} + +void OSCancelThread(OSThread *thread) { + puts("OSCancelThread is a stub"); +} + +void OSTicksToCalendarTime(OSTime ticks, OSCalendarTime *td) { + puts("OSTicksToCalendarTime is a stub"); +} + +BOOL OSUnlink(OSModuleInfo *oldModule) { + puts("OSUnlink is a stub"); + return FALSE; +} + +void OSSwitchFiberEx(__REGISTER u32 param_0, __REGISTER u32 param_1, __REGISTER u32 param_2, __REGISTER u32 param_3, __REGISTER u32 code, __REGISTER u32 stack) { + puts("OSSwitchFiberEx is a stub"); +} + +void OSWakeupThread(OSThreadQueue *queue) { puts("OSWakeupThread is a stub"); } + +u32 __OSGetDIConfig() { + puts("__OSGetDIConfig is a stub"); + return 0; +} + +__OSInterruptHandler __OSSetInterruptHandler(__OSInterrupt interrupt, + __OSInterruptHandler handler) { + puts("__OSSetInterruptHandler is a stub"); + return 0; +} + +OSInterruptMask __OSUnmaskInterrupts(OSInterruptMask mask) { + puts("__OSUnmaskInterrupts is a stub"); + return 0; +} + +BOOL OSEnableInterrupts() { + puts("OSEnableInterrupts is a stub"); + return FALSE; +} + +s32 OSEnableScheduler() { + puts("OSEnableScheduler is a stub"); + return 0; +} + +void OSExitThread(void *val) { puts("OSExitThread is a stub"); } + +void* OSGetArenaHi(void) { + puts("OSGetArenaHi is a stub"); + return NULL; +} + +void* OSGetArenaLo(void) { + puts("OSGetArenaLo is a stub"); + return NULL; +} + +OSContext* OSGetCurrentContext(void) { + puts("OSGetCurrentContext is a stub"); + return NULL; +} + +u32 OSGetProgressiveMode(void) { + puts("OSGetProgressiveMode is a stub"); + return 0; +} + +u32 OSGetResetCode(void) { + puts("OSGetResetCode is a stub"); + return 0; +} + +BOOL OSGetResetSwitchState() { + puts("OSGetResetSwitchState is a stub"); + return FALSE; +} + +s32 OSGetThreadPriority(OSThread* thread) { + puts("OSGetThreadPriority is a stub"); + return 0; +} + +OSTick OSGetTick(void) { + puts("OSGetTick is a stub"); + return 0; +} + +OSTime OSGetTime(void) { + puts("OSGetTime is a stub"); + return 0; +} + +void OSInitCond(OSCond* cond) { + puts("OSInitCond is a stub"); +} + +void OSInitMessageQueue(OSMessageQueue* mq, void* msgArray, s32 msgCount) { + puts("OSInitMessageQueue is a stub"); +} + +void OSInitThreadQueue(OSThreadQueue* queue) { + puts("OSInitThreadQueue is a stub"); +} + +BOOL OSIsThreadTerminated(OSThread* thread) { + puts("OSIsThreadTerminated is a stub"); + return FALSE; +} + +int OSJamMessage(OSMessageQueue* mq, void* msg, s32 flags) { + puts("OSJamMessage is a stub"); + return 0; +} + +BOOL OSLinkFixed(OSModuleInfo* newModule, void* bss) { + puts("OSLinkFixed is a stub"); + return TRUE; +} + +void OSLockMutex(OSMutex* mutex) { + puts("OSLockMutex is a stub"); +} + +void OSProtectRange(u32 chan, void* addr, u32 nBytes, u32 control) { + puts("OSProtectRange is a stub"); +} + +int OSReceiveMessage(OSMessageQueue* mq, void* msg, s32 flags) { + puts("OSReceiveMessage is a stub"); + return 0; +} + +int OSSendMessage(OSMessageQueue* mq, void* msg, s32 flags) { + puts("OSSendMessage is a stub"); + return 0; +} + +void OSSetArenaHi(void* newHi) { + puts("OSSetArenaHi is a stub"); +} + +void OSSetArenaLo(void* newLo) { + puts("OSSetArenaLo is a stub"); +} + +void OSSetPeriodicAlarm(OSAlarm* alarm, OSTime start, OSTime period, OSAlarmHandler handler) { + puts("OSSetPeriodicAlarm is a stub"); +} + +void OSSetProgressiveMode(u32 on) { + puts("OSSetProgressiveMode is a stub"); +} + +void OSSetSaveRegion(void* start, void* end) { + puts("OSSetSaveRegion is a stub"); +} + +OSErrorHandler OSSetErrorHandler(OSError error, OSErrorHandler handler) { + puts("OSSetErrorHandler is a stub"); + return NULL; +} + +void OSSetAlarm(OSAlarm* alarm, OSTime tick, OSAlarmHandler handler) { + puts("OSSetAlarm is a stub"); +} + +void* OSInitAlloc(void* arenaStart, void* arenaEnd, int maxHeaps) { + puts("OSInitAlloc is a stub"); + return NULL; +} + +void OSFillFPUContext(__REGISTER OSContext* context) { + puts("OSFillFPUContext is a stub"); +} + +void OSSetSoundMode(u32 mode) {} + +# pragma mark SOUND +void SoundChoID(int a, int b) { puts("SoundChoID is a stub"); } +void SoundPan(int a, int b, int c) { puts("SoundPan is a stub"); } +void SoundPitch(u16 a, int b) { puts("SoundPitch is a stub"); } +void SoundRevID(int a, int b) { puts("SoundRevID is a stub"); } + +# pragma mark CARD + +#include + +extern "C" int CARDProbe(s32 chan) { + puts("CARDProbe is a stub"); + return 0; +} + +s32 CARDCancel(CARDFileInfo *fileInfo) { + puts("CARDCancel is a stub"); + return 0; +} + +s32 CARDCheck(s32 chan) { + puts("CARDCheck is a stub"); + return 0; +} + +s32 CARDCheckAsync(s32 chan, CARDCallback callback) { + puts("CARDCheckAsync is a stub"); + return 0; +} + +s32 CARDClose(CARDFileInfo *fileInfo) { + puts("CARDClose is a stub"); + return 0; +} + +s32 CARDCreate(s32 chan, const char *fileName, u32 size, + CARDFileInfo *fileInfo) { + puts("CARDCreate is a stub"); + return 0; +} + +s32 CARDCreateAsync(s32 chan, const char *fileName, u32 size, + CARDFileInfo *fileInfo, CARDCallback callback) { + puts("CARDCreateAsync is a stub"); + return 0; +} + +s32 CARDDelete(s32 chan, const char *fileName) { + puts("CARDDelete is a stub"); + return 0; +} + +s32 CARDDeleteAsync(s32 chan, const char *fileName, CARDCallback callback) { + puts("CARDDeleteAsync is a stub"); + return 0; +} + +s32 CARDFastDeleteAsync(s32 chan, s32 fileNo, CARDCallback callback) { + puts("CARDFastDeleteAsync is a stub"); + return 0; +} + +s32 CARDFastOpen(s32 chan, s32 fileNo, CARDFileInfo *fileInfo) { + puts("CARDFastOpen is a stub"); + return 0; +} + +s32 CARDFormat(s32 chan) { + puts("CARDFormat is a stub"); + return 0; +} + +s32 CARDFreeBlocks(s32 chan, s32 *byteNotUsed, s32 *filesNotUsed) { + puts("CARDFreeBlocks is a stub"); + return 0; +} + +s32 CARDGetResultCode(s32 chan) { + puts("CARDGetResultCode is a stub"); + return 0; +} + +s32 CARDGetStatus(s32 chan, s32 fileNo, CARDStat *stat) { + puts("CARDGetStatus is a stub"); + return 0; +} + +s32 CARDGetSectorSize(s32 chan, u32 *size) { + puts("CARDGetSectorSize is a stub"); + return 0; +} + +void CARDInit() { puts("CARDInit is a stub"); } + +s32 CARDMount(s32 chan, void *workArea, CARDCallback detachCallback) { + puts("CARDMount is a stub"); + return 0; +} + +s32 CARDMountAsync(s32 chan, void *workArea, CARDCallback detachCallback, + CARDCallback attachCallback) { + puts("CARDMountAsync is a stub"); + return 0; +} + +s32 CARDOpen(s32 chan, const char *fileName, CARDFileInfo *fileInfo) { + puts("CARDOpen is a stub"); + return 0; +} + +s32 CARDProbeEx(s32 chan, s32 *memSize, s32 *sectorSize) { + puts("CARDProbeEx is a stub"); + return 0; +} + +s32 CARDRead(CARDFileInfo *fileInfo, void *addr, s32 length, s32 offset) { + puts("CARDRead is a stub"); + return 0; +} + +s32 CARDReadAsync(CARDFileInfo *fileInfo, void *addr, s32 length, s32 offset, + CARDCallback callback) { + puts("CARDReadAsync is a stub"); + return 0; +} + +s32 CARDRename(s32 chan, const char *oldName, const char *newName) { + puts("CARDRename is a stub"); + return 0; +} + +s32 CARDRenameAsync(s32 chan, const char *oldName, const char *newName, + CARDCallback callback) { + puts("CARDRenameAsync is a stub"); + return 0; +} + +s32 CARDSetStatusAsync(s32 chan, s32 fileNo, CARDStat *stat, + CARDCallback callback) { + puts("CARDSetStatusAsync is a stub"); + return 0; +} + +s32 CARDUnmount(s32 chan) { + puts("CARDUnmount is a stub"); + return 0; +} + +extern "C" s32 CARDWrite(CARDFileInfo *fileInfo, void *addr, s32 length, + s32 offset) { + puts("CARDWrite is a stub"); + return 0; +} + +s32 CARDWriteAsync(CARDFileInfo *fileInfo, const void *addr, s32 length, + s32 offset, CARDCallback callback) { + puts("CARDWriteAsync is a stub"); + return 0; +} + +s32 CARDGetSerialNo(s32 chan, u64 *serialNo) { return 0; } + +s32 CARDSetStatus(s32 chan, s32 fileNo, CARDStat *stat) { return 0; } + +s32 __CARDFormatRegionAsync(int a, int b) { + puts("__CARDFormatRegionAsync is a stub"); + return 0; +} + +# pragma mark DC + +void DCFlushRange(void *addr, u32 nBytes) { + // puts("DCFlushRange is a stub"); +} + +void DCFlushRangeNoSync(void *addr, u32 nBytes) { + // puts("DCFlushRangeNoSync is a stub"); +} + +void DCInvalidateRange(void *addr, u32 nBytes) { + // puts("DCInvalidateRange is a stub"); +} + +void DCStoreRange(void *addr, u32 nBytes) { + // puts("DCStoreRange is a stub"); +} + +void DCStoreRangeNoSync(void *addr, u32 nBytes) { + // puts("DCStoreRangeNoSync is a stub"); +} + +# pragma mark EXI + +BOOL EXIDeselect(int chan) { + puts("EXIDeselect is a stub"); + return FALSE; +} + +BOOL EXIDma(int chan, void *buffer, s32 size, int d, int e) { + puts("EXIDma is a stub"); + return FALSE; +} + +BOOL EXIImm(int chan, u32 *b, int c, int d, int e) { + puts("EXIImm is a stub"); + return FALSE; +} + +BOOL EXILock(int chan, int b, int c) { + puts("EXILock is a stub"); + return FALSE; +} + +BOOL EXISelect(int chan, int b, int c) { + puts("EXISelect is a stub"); + return FALSE; +} + +BOOL EXISync(int chan) { + puts("EXISync is a stub"); + return FALSE; +} + +BOOL EXIUnlock(int chan) { + puts("EXIUnlock is a stub"); + return FALSE; +} + +# pragma mark LC + +void LCEnable() { puts("LCEnable is a stub"); } + +// OS-related functions consolidated under "# pragma mark OS" further up + +# pragma mark VI + +static VIRetraceCallback sVIRetraceCallback = NULL; + +extern "C" { + +void VIConfigure(const GXRenderModeObj *rm) { puts("VIConfigure is a stub"); } + +void VIConfigurePan(u16 xOrg, u16 yOrg, u16 width, u16 height) { + puts("VIConfigurePan is a stub"); +} + +u32 VIGetRetraceCount() { + // puts("VIGetRetraceCount is a stub"); + return 0; // TODO this might be important +} + +u32 VIGetNextField() { + puts("VIGetNextField is a stub"); + return 0; +} + +void VISetBlack(BOOL black) { puts("VISetBlack is a stub"); } + +void VISetNextFrameBuffer(void *fb) { + // puts("VISetNextFrameBuffer is a stub"); +} + +void VIWaitForRetrace() { + if (sVIRetraceCallback) { + sVIRetraceCallback(0); + } +} + +void* VIGetCurrentFrameBuffer(void) { + puts("VIGetCurrentFrameBuffer is a stub"); + return NULL; +} + +u32 VIGetDTVStatus(void) { + puts("VIGetDTVStatus is a stub"); + return 0; +} + +void* VIGetNextFrameBuffer(void) { + puts("VIGetNextFrameBuffer is a stub"); + return NULL; +} + +VIRetraceCallback VISetPostRetraceCallback(VIRetraceCallback callback) { + sVIRetraceCallback = callback; + return callback; +} + +VIRetraceCallback VISetPreRetraceCallback(VIRetraceCallback cb) { + puts("VISetPreRetraceCallback is a stub"); + return cb; +} + +} // extern "C" + +# pragma mark DSP +#include +extern "C" void __DSP_insert_task(DSPTaskInfo* task) { + puts("__DSP_insert_task is a stub"); +} + +extern "C" void __DSP_boot_task(DSPTaskInfo*) { + puts("__DSP_boot_task is a stub"); +} + +extern "C" void __DSP_exec_task(DSPTaskInfo*, DSPTaskInfo*) { + puts("__DSP_exec_task is a stub"); +} + +extern "C" void __DSP_remove_task(DSPTaskInfo* task) { + puts("__DSP_remove_task is a stub"); +} + +void DSPAssertInt(void) { + puts("DSPAssertInt is a stub"); +} +u32 DSPCheckMailFromDSP(void) { + puts("DSPCheckMailFromDSP is a stub"); + return 0; +} +u32 DSPCheckMailToDSP(void) { + puts("DSPCheckMailToDSP is a stub"); + return 0; +} +void DSPInit(void) { + puts("DSPInit is a stub"); +} +u32 DSPReadMailFromDSP(void) { + puts("DSPReadMailFromDSP is a stub"); + return 0; +} +void DSPSendMailToDSP(u32 mail) { + puts("DSPSendMailToDSP is a stub"); +} + +# pragma mark Z2Audio +#include +void Z2AudioCS::extensionProcess(s32, s32) { + puts("Z2AudioMgr::play is a stub"); +} + +# pragma mark JORServer +#include +void JORServer::releaseMCTX(JORMContext*) { + puts("releaseMCTX is a stub"); +} + +JORMContext* JORServer::attachMCTX(u32) { + puts("attachMCTX is a stub"); + return NULL; +} + +JORServer* JORServer::instance; + +void JORMContext::genCheckBoxSub(u32 kind, const char* label, u32 id, u32 style, u16 initValue, u16 mask, + JOREventListener* pListener, u16 posX, u16 posY, u16 width, + u16 height) { + puts("JORServer::genCheckBoxSub is a stub"); +} +void JORMContext::updateCheckBoxSub(u32 mode, u32 id, u16 value, u16 mask, u32 param_4) { + puts("JORServer::updateCheckBoxSub is a stub"); +} + +# pragma mark JSUMemoryOutputStream +#include +s32 JSUMemoryOutputStream::getAvailable() const { + return mLength - mPosition; +} + +s32 JSUMemoryOutputStream::getPosition() const { + return mPosition; +} + +# pragma mark JSURandomOutputStream +#include +s32 JSUMemoryOutputStream::seek(s32 offset, JSUStreamSeekFrom origin) { + // XXX I think this is correct? could be broken. + return this->seekPos(offset, origin); +} + +# pragma mark JKRHeap +#include +JKRHeap* JKRHeap::sRootHeap2; // XXX this is defined for WII/SHIELD, should we just define it for dusk builds? + +# pragma mark mDoExt_onCupOnAupPacket +#include +mDoExt_offCupOnAupPacket::~mDoExt_offCupOnAupPacket() { + puts("mDoExt_onCupOffAupPacket_c destructor is a stub"); +} +# pragma mark mDoExt_onCupOffAupPacket +mDoExt_onCupOffAupPacket::~mDoExt_onCupOffAupPacket() { + puts("mDoExt_onCupOffAupPacket_c destructor is a stub"); +} + +# pragma mark mDoExt +namespace mDoExt { + u8 CurrentHeapAdjustVerbose; + u8 HeapAdjustVerbose; + u8 HeapAdjustQuiet; +}; + +# pragma mark dKankyo_vrboxHIO_c +#include +void dKankyo_vrboxHIO_c::dKankyo_vrboxHIOInfoUpDateF() { + puts("dKankyo_vrboxHIO_c::dKankyo_vrboxHIOInfoUpDateF is a stub"); +} + +void dKankyo_lightHIO_c::dKankyo_lightHIOInfoUpDateF() { + puts("dKankyo_lightHIO_c::dKankyo_lightHIOInfoUpDateF is a stub"); +} + +# pragma mark dKankyo_HIO_c +#include +dKankyo_HIO_c::dKankyo_HIO_c() { + light.m_displayTVColorSettings = FALSE; + vrbox.m_displayVrboxTVColorSettings = FALSE; +} + +dKankyo_ParticlelightHIO_c::dKankyo_ParticlelightHIO_c() { + field_0x5 = 0; + prim_col.r = 255; + prim_col.g = 255; + prim_col.b = 255; + prim_col.a = 255; + env_col.r = 255; + env_col.g = 255; + env_col.b = 255; + env_col.a = 255; + blend_ratio = 0.5f; + field_0x14 = 0; + type = 0; + field_0x19 = 1; + field_0x1a = 0; +} + +dKankyo_dungeonlightHIO_c::dKankyo_dungeonlightHIO_c() { + field_0x5 = 0; + usedLights = 0; + displayDebugSphere = 0; + field_0x8 = 0; + field_0x9 = 0; +} + +dKankyo_demolightHIO_c::dKankyo_demolightHIO_c() { + adjust_ON = 0; + light.mPosition.x = 0.0f; + light.mPosition.y = 0.0f; + light.mPosition.z = 0.0f; + light.mColor.r = 255; + light.mColor.g = 255; + light.mColor.b = 255; + light.mPow = 1000.0f; + light.mFluctuation = 0.0f; +} + +dKankyo_efflightHIO_c::dKankyo_efflightHIO_c() { + adjust_ON = 0; + power = 80.0f; + fluctuation = 100.0f; + + step1.start_frame = 1; + step1.r = 191; + step1.g = 150; + step1.b = 45; + + step2.start_frame = 4; + step2.r = 180; + step2.g = 60; + step2.b = 0; + + step3.start_frame = 8; + step3.r = 75; + step3.g = 15; + step3.b = 0; + + step4.start_frame = 15; + step4.r = 0; + step4.g = 0; + step4.b = 0; +} + +dKankyo_vrboxHIO_c::dKankyo_vrboxHIO_c() { + m_VrboxSetting = 0; + field_0x5 = 0; + field_0x7 = 0; + field_0x8 = 0; + field_0x9 = 0; + field_0xa = 0; + field_0xb = 0; + field_0xc = 0; + field_0xd = 0; + field_0xe = -1; + field_0xf = -1; + field_0x10 = -1; + field_0x11 = -1; + field_0x12 = -1; + field_0x13 = -1; + field_0x14 = 0; + m_horizonHeight = 0.0f; +} + +dKankyo_lightHIO_c::dKankyo_lightHIO_c() { + m_HOSTIO_setting = FALSE; + field_0x52 = 0; + m_forcedPalette = FALSE; + m_displayColorPaletteCheckInfo = TRUE; + + field_0x58 = 0.0f; + field_0x60 = 0; + field_0x61 = 0; + field_0x62 = 0; + field_0x63 = 0; + field_0x64 = 0; + field_0x65 = 0; + field_0x66 = 0; + field_0x67 = 0; + field_0x68 = 0; + field_0x69 = 0; + field_0x6a = 0; + field_0x6b = 0; + + m_BG_fakelight_R = 0; + m_BG_fakelight_G = 0; + m_BG_fakelight_B = 0; + m_BG_fakelight_power = 0.0f; + + field_0x80 = 0; +} + +dKankyo_bloomHIO_c::dKankyo_bloomHIO_c() { + field_0x4 = 0; + m_saturationPattern = 0; + field_0x5 = 0; + + for (int i = 0; i < 64; i++) { + dKydata_BloomInfo_c* bloominf = dKyd_BloomInf_tbl_getp(i); + bloom_info[i] = bloominf->info; + } +} + +dKankyo_windHIO_c::dKankyo_windHIO_c() { + display_wind_dir = 0; + use_HOSTIO_adjustment = 0; + field_0x8 = -1; + global_x_angle = 0; + global_y_angle = 0; + global_wind_power = 0.3f; + field_0x14 = 0.0; + field_0x18 = 35.0f; + field_0x1c = 6.0f; + display_wind_trajectory = 0; + lightsword_x_angle = 1800; + lightsword_init_scale = 500.0f; + lightsword_end_scale = 300.0f; + influence = 1.0f; + lightsword_move_speed = 150.0f; + influence_attenuation = 0.3f; + wind_change_speed = 0.05f; + minigame_no_wind_duration = 90; + minigame_low_wind_duration = 60; + minigame_high_wind_duration = 90; +} +dKankyo_navyHIO_c::dKankyo_navyHIO_c() { + field_0x5 = 0; + field_0x6 = 0; + field_0x8 = 12; + cloud_sunny_wind_influence_rate = 10.0f; + cloud_sunny_bottom_height = 2500.0f; + cloud_sunny_top_height = 2500.0f; + cloud_sunny_size = 0.6f; + cloud_sunny_height_shrink_rate = 0.9999f; + cloud_sunny_alpha = 1.0f; + cloud_cloudy_wind_influence_rate = 25.0f; + cloud_cloudy_bottom_height = 1200.0f; + cloud_cloudy_top_height = 1200.0f; + cloud_cloudy_size = 0.84f; + cloud_cloudy_height_shrink_rate = 0.96f; + cloud_cloudy_alpha = 1.0f; + field_0x3c = 4000.0f; + field_0x40 = 2000.0f; + field_0x44 = 2500.0f; + field_0x48 = 80.0f; + field_0x4c = 0.18f; + field_0x68 = 1; + field_0x69 = 3; + field_0x50 = 255.0f; + field_0x58 = 800.0f; + field_0x5c = 250.0f; + field_0x54 = 1.0f; + field_0x60 = 1000.0f; + field_0x64 = 0.2f; + housi_max_number = 300; + housi_max_alpha = 120.0f; + housi_max_scale = 9.0f; + field_0x74 = 45; + field_0x75 = 136; + field_0x76 = 170; + field_0x78 = 109; + field_0x79 = 60; + field_0x7a = 205; + field_0x7c = 120.0f; + field_0x80 = 100.0f; + field_0x84 = 0.2f; + field_0x8a = 0; + field_0x88 = 0; + field_0x80 = 0.0f; + moon_col.r = 0; + moon_col.g = 0; + moon_col.b = 0; + moon_col.a = 255; + moon_scale = 8000.0f; + field_0xb0.x = 16.5f; + field_0xb0.y = -2.0f; + field_0xb0.z = 30.0f; + field_0xbc = 160.0f; + field_0xc0 = 0.06f; + field_0xc4 = 200; + field_0xc8 = 3.0f; + field_0xcc = 60.0f; + field_0xd0 = 69; + field_0xd1 = 60; + field_0xd2 = 39; + field_0xd4 = 124; + field_0xd5 = 124; + field_0xd6 = 104; + field_0xd3 = 255; + field_0xd8 = 255; + field_0xd9 = 0; + field_0xda = 0; + field_0xdc = 255; + field_0xdd = 255; + field_0xde = 0; + field_0xe0 = 500; + field_0xe4 = 0.4f; + sun_col.r = 255; + sun_col.g = 255; + sun_col.b = 241; + sun_col2.r = 255; + sun_col2.g = 145; + sun_col2.b = 73; + sun_adjust_ON = 0; + smell_adjust_ON = 0; + smell_col.r = 255; + smell_col.g = 255; + smell_col.b = 115; + smell_col2.r = 80; + smell_col2.g = 50; + smell_col2.b = 0; + smell_alpha = 1.0f; + field_0xf0 = 190; + field_0xf1 = 120; + field_0xf2 = 120; + field_0x108 = 60; + field_0x109 = 0; + field_0x10a = 0; + field_0xf4 = 60; + field_0xf5 = 150; + field_0xf6 = 230; + field_0x10c = 50; + field_0x10d = 65; + field_0x10e = 80; + field_0xf8 = 80; + field_0xf9 = 80; + field_0xfa = 20; + field_0x110 = 30; + field_0x111 = 30; + field_0x112 = 10; + field_0xfc = 33; + field_0xfd = 255; + field_0xfe = 125; + field_0x114 = 33; + field_0x115 = 255; + field_0x116 = 125; + field_0x120 = 0.1f; + field_0x124 = 1.0f; + constellation_maker_ON = 0; + constellation_maker_pos[0].x = 5900.0f; + constellation_maker_pos[0].y = 14000.0f; + constellation_maker_pos[0].z = -16000.0f; + constellation_maker_pos[1].x = 7500.0f; + constellation_maker_pos[1].y = 14000.0f; + constellation_maker_pos[1].z = -14700.0f; + constellation_maker_pos[2].x = 8700.0f; + constellation_maker_pos[2].y = 13920.0f; + constellation_maker_pos[2].z = -14700.0f; + constellation_maker_pos[3].x = 10200.0f; + constellation_maker_pos[3].y = 14320.0f; + constellation_maker_pos[3].z = -15000.0f; + constellation_maker_pos[4].x = 12300.0f; + constellation_maker_pos[4].y = 15400.0f; + constellation_maker_pos[4].z = -18400.0f; + constellation_maker_pos[5].x = 13000.0f; + constellation_maker_pos[5].y = 13500.0f; + constellation_maker_pos[5].z = -15000.0f; + constellation_maker_pos[6].x = 13000.0f; + constellation_maker_pos[6].y = 15400.0f; + constellation_maker_pos[6].z = -14500.0f; + constellation_maker_pos[7].x = 13000.0f; + constellation_maker_pos[7].y = 15400.0f; + constellation_maker_pos[7].z = -14500.0f; + constellation_maker_pos[8].x = 13000.0f; + constellation_maker_pos[8].y = 15400.0f; + constellation_maker_pos[8].z = -14500.0f; + constellation_maker_pos[9].x = 13000.0f; + constellation_maker_pos[9].y = 15400.0f; + constellation_maker_pos[9].z = -14500.0f; + lightning_scale_x_min = 14.0f; + lightning_scale_x_max = 20.0f; + lightning_scale_y_min = 14.0f; + lightning_scale_y_max = 20.0f; + lightning_tilt_angle = 2000; + field_0x1b6 = 3; + lightning_debug_mode = 0; + collect_light_reflect_pos.x = 60000.0f; + collect_light_reflect_pos.y = -5000.0f; + collect_light_reflect_pos.z = 0.0f; + moya_alpha = 0.12f; + field_0x1c5 = 0; + thunder_col.r = 75; + thunder_col.g = 130; + thunder_col.b = 150; + thunder_height = 2000.0f; + thunder_blacken_rate = 0.75f; + water_in_col_ratio_R = 0.0f; + water_in_col_ratio_G = 0.4f; + water_in_col_ratio_B = 0.5f; + field_0x1e8 = -10.0f; + field_0x1ec = 40.0f; + field_0x1f0 = 50.0f; + field_0x1f4 = 200.0f; + field_0x1f8 = 0.0f; + field_0x1e4 = 80; + field_0x1e5 = 80; + field_0x1e6 = 80; + field_0x1fd = 2; + field_0x1fe = 3; + field_0x1ff = 0; + field_0x200 = 0; + mist_tag_fog_near = -2000.0f; + mist_tag_fog_far = 200.0f; + wipe_test_ON = 0xff; + field_0x210 = 0.0f; + fade_test_speed = 0; + field_0x215 = 1; + smell_railtag_space = 0.0f; + field_0x22a = 0; + field_0x22c = 0; + field_0x22d = 0; + light_adjust_ON = 0; + adjust_light_ambcol.r = 24; + adjust_light_ambcol.g = 24; + adjust_light_ambcol.b = 24; + adjust_light_dif0_col_R = 126; + adjust_light_dif0_col_G = 110; + adjust_light_dif0_col_B = 89; + adjust_light_dif1_col.r = 24; + adjust_light_dif1_col.g = 41; + adjust_light_dif1_col.b = 50; + adjust_light_main_pos.x = 500.0f; + adjust_light_main_pos.y = 500.0f; + adjust_light_main_pos.z = 500.0f; + mist_twilight_c1_col.r = 182; + mist_twilight_c1_col.g = 88; + mist_twilight_c1_col.b = 50; + mist_twilight_c1_col.a = 150; + mist_twilight_c2_col.r = 117; + mist_twilight_c2_col.g = 69; + mist_twilight_c2_col.b = 50; + mist_twilight_c2_col.a = 255; + field_0x264.r = 124; + field_0x264.g = 60; + field_0x264.b = 50; + field_0x267 = 255; + field_0x268 = 150; + adjust_custom_R = 70; + adjust_custom_G = 70; + adjust_custom_B = 70; + adjust_light_mode = 1; + adjust_height = 0.0f; + field_0x278 = 120.0f; + shadow_adjust_ON = 0; + shadow_normal_alpha = 0.4f; + shadow_max_alpha = 0.65f; + field_0x29c = 0; + field_0x27c = 70.0f; + field_0x280 = 0.05f; + field_0x284 = 1.5f; + field_0x288 = 0.00025f; + field_0x28c = 0.001f; + unk_color_1.r = 255; + unk_color_1.g = 255; + unk_color_1.b = 255; + unk_alpha_1 = 255; + unk_color_2.r = 0; + unk_color_2.g = 0; + unk_color_2.b = 0; + unk_alpha_2 = 255; + unk_color_3.r = 60; + unk_color_3.g = 30; + unk_color_3.b = 0; + unk_alpha_3 = 255; + field_0x29d = 1; + camera_light_col.r = 25; + camera_light_col.g = 90; + camera_light_col.b = 183; + camera_light_alpha = 255; + camera_light_y_shift = 1500.0f; + camera_light_power = 1.25f; + camera_light_cutoff = 90.0f; + camera_light_sp = 2; + camera_light_da = 3; + demo_adjust_SW = 0; + demo_focus_pos = 30; + demo_focus_offset_x = 0.0025f; + demo_focus_offset_y = 0.0025f; + grass_ambcol.r = 0; + grass_ambcol.g = 0; + grass_ambcol.b = 0; + grass_adjust_ON = 0; + grass_shine_value = 0.0f; + stars_max_number = 0xffff; + display_save_location = 0; + unk_light_influence_ratio = 100; + door_light_influence_ratio = 255; + fish_pond_colreg_adjust_ON = 0; + fish_pond_colreg_c0.r = 0; + fish_pond_colreg_c0.g = 0; + fish_pond_colreg_c0.b = 0; + water_mud_adjust_ON = 0; + field_0x2ea = 0; + field_0x2ec = 0; + fish_pond_tree_adjust_ON = 0; + fish_pond_tree_ambcol.r = 0; + fish_pond_tree_ambcol.g = 0; + fish_pond_tree_ambcol.b = 0; + fish_pond_tree_dif0_col.r = 0; + fish_pond_tree_dif0_col.g = 0; + fish_pond_tree_dif0_col.b = 0; + fish_pond_tree_dif1_col.r = 0; + fish_pond_tree_dif1_col.g = 0; + fish_pond_tree_dif1_col.b = 0; + rainbow_adjust_ON = 0; + rainbow_separation_dist = 4500; + rainbow_max_alpha = 175; + field_0x2ff = 0; + grass_light_influence_ratio = 100; + grass_light_debug = 0; + field_0x302 = 2000; + field_0x304 = 0.6f; + field_0x308 = 0; + moya_col.r = 255; + moya_col.g = 255; + moya_col.b = 255; + field_0x30d = 0; + twilight_sense_saturation_mode = 0; + twilight_sense_pat = 0; + twilight_sense_pat_tv_display_ON = 0; + camera_light_adjust_ON = 0; + possessed_zelda_light_col.r = 30; + possessed_zelda_light_col.g = 55; + possessed_zelda_light_col.b = 110; + possessed_zelda_light_alpha = 255; + possessed_zelda_light_height = -800.0f; + possessed_zelda_light_power = 250.0f; + beast_ganon_light_col.r = 60; + beast_ganon_light_col.g = 95; + beast_ganon_light_col.b = 100; + beast_ganon_light_alpha = 255; + beast_ganon_light_height = -800.0f; + beast_ganon_light_power = 150.0f; + water_in_light_col.r = 138; + water_in_light_col.g = 192; + water_in_light_col.b = 188; +} + +# pragma mark AI +#include +u32 AIGetDSPSampleRate(void) { + puts("AIGetDSPSampleRate is a stub"); + return 48000; // Default sample rate? +} + +void AIInit(u8* stack) { + puts("AIInit is a stub"); + // This function initializes the AI system, but we don't have any specific implementation here. + // In a real scenario, it would set up the audio interface and prepare it for use. +} + +void AIInitDMA(u32 start_addr, u32 length) { + puts("AIInitDMA is a stub"); +} + +AIDCallback AIRegisterDMACallback(AIDCallback callback) { + puts("AIRegisterDMACallback is a stub"); + return callback; +} + +void AISetDSPSampleRate(u32 rate) { + // Should this link with the getsamplerate? this is very TODO + puts("AISetDSPSampleRate is a stub"); +} + +void AIStartDMA(void) { + puts("AIStartDMA is a stub"); +} + +void AIStopDMA(void) { + puts("AIStopDMA is a stub"); +} + +# pragma mark AR +#include +// Auxilary RAM doesn't exist on PC platforms, do we need to call malloc/free for these instead? +// For now, we will just stub these functions. +u32 ARAlloc(u32 length) { + puts("ARAlloc is a stub"); + return 0; +} + +u32 ARGetSize(void) { + return 0x10000; // 64KB, this is the size of the AR memory region +} + +u32 ARInit(u32* stack_index_addr, u32 num_entries) { + puts("ARInit is a stub"); + return 0; +} + +# pragma mark ARQ +void ARQPostRequest(ARQRequest* request, u32 owner, u32 type, u32 priority, u32 source, u32 dest, u32 length, ARQCallback callback) { + puts("ARQPostRequest is a stub"); +} + +void ARQInit() { + puts("ARQInit is a stub"); +} + +# pragma mark DVD +#include +s32 DVDCancel(volatile DVDCommandBlock* block) { + puts("DVDCancel is a stub"); + return 0; +} +s32 DVDCancel(DVDCommandBlock* block) { + puts("DVDCancel is a stub"); + return 0; +} +BOOL DVDChangeDir(const char* dirName) { + puts("DVDChangeDir is a stub"); + return TRUE; +} +BOOL DVDCheckDisk(void) { + puts("DVDCheckDisk is a stub"); + return TRUE; +} +BOOL DVDClose(DVDFileInfo* fileInfo) { + puts("DVDClose is a stub"); + return TRUE; +} +int DVDCloseDir(DVDDir* dir) { + puts("DVDCloseDir is a stub"); + return 0; +} +s32 DVDConvertPathToEntrynum(const char* pathPtr) { + puts("DVDConvertPathToEntrynum is a stub"); + return 0; +} +BOOL DVDFastOpen(s32 entrynum, DVDFileInfo* fileInfo) { + puts("DVDFastOpen is a stub"); + return TRUE; +} +s32 DVDGetCommandBlockStatus(const DVDCommandBlock* block) { + puts("DVDGetCommandBlockStatus is a stub"); + return 0; +} +DVDDiskID* DVDGetCurrentDiskID(void) { + puts("DVDGetCurrentDiskID is a stub"); + return NULL; +} +s32 DVDGetDriveStatus(void) { + puts("DVDGetDriveStatus is a stub"); + return 0; +} +void DVDInit(void) { + puts("DVDInit is a stub"); +} +BOOL DVDOpen(const char* fileName, DVDFileInfo* fileInfo) { + puts("DVDOpen is a stub"); + return TRUE; +} +int DVDOpenDir(const char* dirName, DVDDir* dir) { + puts("DVDOpenDir is a stub"); + return 0; +} +BOOL DVDReadAsyncPrio(DVDFileInfo* fileInfo, void* addr, s32 length, s32 offset, + DVDCallback callback, s32 prio) { + puts("DVDReadAsyncPrio is a stub"); + return TRUE; +} +int DVDReadDir(DVDDir* dir, DVDDirEntry* dirent) { + puts("DVDReadDir is a stub"); + return 0; +} +s32 DVDReadPrio(DVDFileInfo* fileInfo, void* addr, s32 length, s32 offset, s32 prio) { + puts("DVDReadPrio is a stub"); + return 0; +} + +void DVDReadAbsAsyncForBS(void *a, struct bb2struct *b, int c, int d, + void (*e)()) { + puts("DVDReadAbsAsyncForBS is a stub"); +} + +void DVDReadDiskID(void *a, DVDDiskID *b, void (*c)()) { + puts("DVDReadDiskID is a stub"); +} + +void DVDReset() { + puts("DVDReset is a stub"); +} + +# pragma mark GD +#include +#include +void GDFlushCurrToMem(void) { + puts("GDFlushCurrToMem is a stub"); +} +void GDInitGDLObj(GDLObj* dl, void* start, u32 length) { + puts("GDInitGDLObj is a stub"); +} +void GDOverflowed(void) { + puts("GDOverflowed is a stub"); +} +void GDPadCurr32(void) { + puts("GDPadCurr32 is a stub"); +} +void GDSetArray(GXAttr attr, void* base_ptr, u8 stride) { + puts("GDSetArray is a stub"); +} +void GDSetArrayRaw(GXAttr attr, u32 base_ptr_raw, u8 stride) { + puts("GDSetArrayRaw is a stub"); +} +void GDSetVtxDescv(const GXVtxDescList* attrPtr) { + puts("GDSetVtxDescv is a stub"); +} + +# pragma mark GX +#include + +// Moved-in GX helpers and helpers for metrics/project +void __GXSetSUTexSize() { puts("__GXSetSUTexSize is a stub"); } +void __GXSetVAT() { puts("__GXSetVAT is a stub"); } +void __GXSetVCD() { puts("__GXSetVCD is a stub"); } +void __GXUpdateBPMask() { puts("__GXUpdateBPMask is a stub"); } + +void GXSetGPMetric(GXPerf0 perf0, GXPerf1 perf1) { + // puts("GXSetGPMetric is a stub"); +} +void GXReadGPMetric(u32 *cnt0, u32 *cnt1) { + // puts("GXReadGPMetric is a stub"); +} +void GXClearGPMetric(void) { + // puts("GXClearGPMetric is a stub"); +} +void GXReadMemMetric(u32 *cp_req, u32 *tc_req, u32 *cpu_rd_req, u32 *cpu_wr_req, + u32 *dsp_req, u32 *io_req, u32 *vi_req, u32 *pe_req, + u32 *rf_req, u32 *fi_req) { + // puts("GXReadMemMetric is a stub"); +} +void GXClearMemMetric(void) { + // puts("GXClearMemMetric is a stub"); +} +void GXClearVCacheMetric(void) { + // puts("GXClearVCacheMetric is a stub"); +} +void GXReadPixMetric(u32 *top_pixels_in, u32 *top_pixels_out, + u32 *bot_pixels_in, u32 *bot_pixels_out, + u32 *clr_pixels_in, u32 *copy_clks) { + // puts("GXReadPixMetric is a stub"); +} +void GXClearPixMetric(void) { + // puts("GXClearPixMetric is a stub"); +} +void GXSetVCacheMetric(GXVCachePerf attr) { + // puts("GXSetVCacheMetric is a stub"); +} +void GXReadVCacheMetric(u32 *check, u32 *miss, u32 *stall) { + // puts("GXReadVCacheMetric is a stub"); +} +void GXSetDrawSync(u16 token) { + // puts("GXSetDrawSync is a stub"); +} +GXDrawSyncCallback GXSetDrawSyncCallback(GXDrawSyncCallback cb) { + puts("GXSetDrawSyncCallback is a stub"); + return cb; +} +void GXDrawCylinder(u8 numEdges) { + puts("GXDrawCylinder is a stub"); +} +void GXWaitDrawDone(void) { + // puts("GXWaitDrawDone is a stub"); +} +void GXSetTevIndTile(GXTevStageID tev_stage, GXIndTexStageID ind_stage, + u16 tilesize_s, u16 tilesize_t, u16 tilespacing_s, + u16 tilespacing_t, GXIndTexFormat format, + GXIndTexMtxID matrix_sel, GXIndTexBiasSel bias_sel, + GXIndTexAlphaSel alpha_sel) { + // TODO +} +void GXResetWriteGatherPipe(void) { + // puts("GXResetWriteGatherPipe is a stub"); +} + +void GXProject(f32 x, f32 y, f32 z, const f32 mtx[3][4], const f32 *pm, + const f32 *vp, f32 *sx, f32 *sy, f32 *sz) { + Vec peye; + f32 xc; + f32 yc; + f32 zc; + f32 wc; + + peye.x = mtx[0][3] + ((mtx[0][2] * z) + ((mtx[0][0] * x) + (mtx[0][1] * y))); + peye.y = mtx[1][3] + ((mtx[1][2] * z) + ((mtx[1][0] * x) + (mtx[1][1] * y))); + peye.z = mtx[2][3] + ((mtx[2][2] * z) + ((mtx[2][0] * x) + (mtx[2][1] * y))); + if (pm[0] == 0.0f) { + xc = (peye.x * pm[1]) + (peye.z * pm[2]); + yc = (peye.y * pm[3]) + (peye.z * pm[4]); + zc = pm[6] + (peye.z * pm[5]); + wc = 1.0f / -peye.z; + } else { + xc = pm[2] + (peye.x * pm[1]); + yc = pm[4] + (peye.y * pm[3]); + zc = pm[6] + (peye.z * pm[5]); + wc = 1.0f; + } + *sx = (vp[2] / 2.0f) + (vp[0] + (wc * (xc * vp[2] / 2.0f))); + *sy = (vp[3] / 2.0f) + (vp[1] + (wc * (-yc * vp[3] / 2.0f))); + *sz = vp[5] + (wc * (zc * (vp[5] - vp[4]))); +} +void GXAbortFrame(void) { + puts("GXAbortFrame is a stub"); +} +void GXEnableTexOffsets(GXTexCoordID coord, u8 line_enable, u8 point_enable) { + puts("GXEnableTexOffsets is a stub"); +} +OSThread* GXGetCurrentGXThread(void) { + puts("GXGetCurrentGXThread is a stub"); + return NULL; +} +void* GXGetFifoBase(const GXFifoObj* fifo) { + puts("GXGetFifoBase is a stub"); + return NULL; +} +u32 GXGetFifoSize(const GXFifoObj* fifo) { + puts("GXGetFifoSize is a stub"); + return 0; +} +u16 GXGetNumXfbLines(u16 efbHeight, f32 yScale) { + puts("GXGetNumXfbLines is a stub"); + return 0; +} +void GXGetViewportv(f32* vp) { + puts("GXGetViewportv is a stub"); +} +void GXGetScissor(u32* left, u32* top, u32* wd, u32* ht) { + puts("GXGetScissor is a stub"); +} +u32 GXGetTexObjTlut(const GXTexObj* tex_obj) { + puts("GXGetTexObjTlut is a stub"); + return 0; +} +f32 GXGetYScaleFactor(u16 efbHeight, u16 xfbHeight) { + puts("GXGetYScaleFactor is a stub"); + return 0.0f; +} +void GXInitTexCacheRegion(GXTexRegion* region, u8 is_32b_mipmap, u32 tmem_even, GXTexCacheSize size_even, u32 tmem_odd, GXTexCacheSize size_odd) { + puts("GXInitTexCacheRegion is a stub"); +} +// XXX, this should be some struct? +GXRenderModeObj GXNtsc480IntDf; +GXRenderModeObj GXNtsc480Int; +void GXPeekZ(u16 x, u16 y, u32* z) { + puts("GXPeekZ is a stub"); + *z = 0; +} +void GXReadXfRasMetric(u32* xf_wait_in, u32* xf_wait_out, u32* ras_busy, u32* clocks) { + puts("GXReadXfRasMetric is a stub"); + *xf_wait_in = 0; + *xf_wait_out = 0; + *ras_busy = 0; + *clocks = 0; +} +void GXSetClipMode(GXClipMode mode) { + puts("GXSetClipMode is a stub"); +} +void GXSetCoPlanar(GXBool enable) { + puts("GXSetCoPlanar is a stub"); +} +void GXSetCopyClamp(GXFBClamp clamp) { + puts("GXSetCopyClamp is a stub"); +} +OSThread* GXSetCurrentGXThread(void) { + puts("GXSetCurrentGXThread is a stub"); + return NULL; +} +void GXSetFogRangeAdj(GXBool enable, u16 center, const GXFogAdjTable *table) { + puts("GXSetFogRangeAdj is a stub"); +} +void GXSetMisc(GXMiscToken token, u32 val) { + puts("GXSetMisc is a stub"); +} +void GXSetPointSize(u8 pointSize, GXTexOffset texOffsets) { + puts("GXSetPointSize is a stub"); +} +void GXSetProjectionv(const f32* ptr) { + puts("GXSetProjectionv is a stub"); +} +void GXSetVtxAttrFmtv(GXVtxFmt vtxfmt, const GXVtxAttrFmtList* list) { + puts("GXSetVtxAttrFmtv is a stub"); +} + +# pragma mark KPAD +// is this actually used? +extern "C" void KPADDisableDPD(s32) { + puts("KPADDisableDPD is a stub"); + +} +extern "C" void KPADEnableDPD(s32) { + puts("KPADEnableDPD is a stub"); +} + +// LC (consolidated above) +void LCDisable(void) { + puts("LCDisable is a stub"); +} +void LCQueueWait(__REGISTER u32 len) { + puts("LCQueueWait is a stub"); +} +u32 LCStoreData(void* destAddr, void* srcAddr, u32 nBytes) { + puts("LCStoreData is a stub"); + return 0; +} + +# pragma mark PPC Arch +// MSR stuff? +void PPCHalt() { puts("PPCHalt is a stub"); } + +extern "C" void PPCSync(void) { + // puts("PPCSync is a stub"); +} + +u32 PPCMfhid2() { + puts("PPCMfhid2 is a stub"); + return 0; +} + +u32 PPCMfmsr() { + puts("PPCMfmsr is a stub"); + return 0; +} + +void PPCMtmsr(u32 newMSR) { + puts("PPCMtmsr is a stub"); +} + +# pragma mark WPAD +// uh.. this is revolution include not dolphin? +typedef void (*WPADExtensionCallback)(s32 chan, s32 devType); +extern "C" WPADExtensionCallback WPADSetExtensionCallback(s32 chan, WPADExtensionCallback cb) { + puts("WPADSetExtensionCallback is a stub"); + return cb; +} + +# pragma mark GF +#include +void GFSetZMode(u8 compare_enable, GXCompare func, u8 update_enable) { + puts("GFSetZMode is a stub"); +} +void GFSetGenMode2(u8 nTexGens, u8 nChans, u8 nTevs, u8 nInds, GXCullMode cm) { + puts("GFSetGenMode2 is a stub"); +} +void GFSetTevColorS10(GXTevRegID reg, GXColorS10 color) { + puts("GFSetTevColorS10 is a stub"); +} +void GFSetBlendModeEtc(GXBlendMode type, GXBlendFactor src_factor, + GXBlendFactor dst_factor, GXLogicOp logic_op, + u8 color_update_enable, u8 alpha_update_enable, + u8 dither_enable) { + puts("GFSetBlendModeEtc is a stub"); +} +void GFSetChanAmbColor(GXChannelID chan, GXColor color) { + puts("GFSetChanAmbColor is a stub"); +} +void GFSetFog(GXFogType type, f32 startz, f32 endz, f32 nearz, f32 farz, GXColor color) { + puts("GFSetFog is a stub"); +} + +# pragma mark DEBUGPAD +#include +dDebugPad_c::dDebugPad_c() { + puts("constructing debug pad, stubbed?"); +} + +# pragma mark f_ap +#include +u8 fapGm_HIO_c::mCaptureScreenDivH = 1; + +# pragma mark dMsgObject +#include +void dMsgObject_c::setSelectWordFlag(u8 flag) { + puts("dMsgObject_c::setSelectWordFlag is a stub"); +} +void dMsgObject_c::setWord(const char* i_word) { + puts("dMsgObject_c::setWord is a stub"); +} +void dMsgObject_c::setSelectWord(int i_no, const char* i_word) { + puts("dMsgObject_c::setSelectWord is a stub"); +} From 81d679d2075b85c27addea02077eaa7a131d6902 Mon Sep 17 00:00:00 2001 From: roeming Date: Sun, 18 Jan 2026 18:11:54 -0500 Subject: [PATCH 02/46] Fix errors for msvc Use less strict compiler flags instead of modifying source code Add ugly defines so MSVC stops complaining about zero length arrays --- CMakeLists.txt | 1 + include/JSystem/JGeometry.h | 6 +- include/JSystem/JHostIO/JORMContext.h | 7 + include/JSystem/JMessage/JMessage.h | 5 + include/JSystem/JSupport/JSUOutputStream.h | 7 + include/JSystem/JUtility/JUTFont.h | 5 + include/SSystem/SComponent/c_xyz.h | 4 + include/Z2AudioLib/Z2StatusMgr.h | 1 + include/d/actor/d_a_npc.h | 3 +- include/d/actor/d_a_npc_aru.h | 3 +- include/d/actor/d_a_npc_besu.h | 3 +- include/d/actor/d_a_npc_bou.h | 7 +- include/d/actor/d_a_npc_clerka.h | 13 +- include/d/actor/d_a_npc_clerkb.h | 13 +- include/d/actor/d_a_npc_taro.h | 13 +- include/d/d_com_inf_game.h | 6 +- include/d/d_menu_fmap.h | 5 + include/d/d_particle_name.h | 1 + include/d/d_shop_system.h | 9 +- include/global.h | 37 +++ src/JSystem/J2DGraph/J2DMaterialFactory.cpp | 2 +- .../J3DGraphLoader/J3DModelLoaderCalcSize.cpp | 2 +- src/JSystem/JAudio2/JASSeqParser.cpp | 4 +- src/JSystem/JStage/JSGAmbientLight.cpp | 2 +- src/JSystem/JStage/JSGFog.cpp | 2 +- src/JSystem/JStage/JSGLight.cpp | 2 +- .../MSL/MSL_C++/MSL_Common/Include/stdint.h | 26 +- .../MSL/MSL_C/MSL_Common/Include/cstddef | 2 + .../MSL/MSL_C/MSL_Common/Include/float.h | 2 +- .../MSL/MSL_C/MSL_Common/Include/stddef | 4 + .../MSL/MSL_C/MSL_Common/Include/va_list | 9 + src/SSystem/SComponent/c_math.cpp | 1 + src/SSystem/SComponent/c_phase.cpp | 1 + src/SSystem/SComponent/c_xyz.cpp | 5 +- src/d/actor/d_a_alink_effect.inc | 10 +- src/d/actor/d_a_balloon_2D.cpp | 46 +-- src/d/actor/d_a_boomerang.cpp | 30 +- src/d/actor/d_a_coach_2D.cpp | 18 +- src/d/actor/d_a_door_mbossL1.cpp | 6 +- src/d/actor/d_a_e_arrow.cpp | 106 +++--- src/d/actor/d_a_e_ymb.cpp | 8 +- src/d/actor/d_a_e_zm.cpp | 3 +- src/d/actor/d_a_mant.cpp | 8 +- src/d/actor/d_a_npc4.cpp | 3 +- src/d/actor/d_a_npc_bouS.cpp | 52 +-- src/d/actor/d_a_npc_jagar.cpp | 2 +- src/d/actor/d_a_npc_kn_teach01.inc | 4 +- src/d/actor/d_a_npc_len.cpp | 2 +- src/d/actor/d_a_npc_lud.cpp | 2 +- src/d/actor/d_a_npc_moi.cpp | 2 +- src/d/actor/d_a_npc_saru.cpp | 2 +- src/d/actor/d_a_npc_theB.cpp | 52 +-- src/d/actor/d_a_npc_uri.cpp | 2 +- src/d/actor/d_a_obj_carry.cpp | 2 +- src/d/actor/d_a_obj_drop.cpp | 8 +- src/d/actor/d_a_obj_flag2.cpp | 4 +- src/d/actor/d_a_obj_flag3.cpp | 4 +- src/d/actor/d_a_obj_kbacket.cpp | 2 +- src/d/actor/d_a_obj_swchain.cpp | 4 +- src/d/actor/d_a_obj_ystone.cpp | 10 +- src/d/actor/d_a_title.cpp | 16 +- src/d/d_bright_check.cpp | 30 +- src/d/d_com_inf_game.cpp | 1 + src/d/d_drawlist.cpp | 4 +- src/d/d_error_msg.cpp | 6 +- src/d/d_ev_camera.cpp | 37 ++- src/d/d_file_sel_info.cpp | 52 +-- src/d/d_file_sel_warning.cpp | 14 +- src/d/d_file_select.cpp | 182 +++++------ src/d/d_gameover.cpp | 8 +- src/d/d_kantera_icon_meter.cpp | 4 +- src/d/d_menu_collect.cpp | 308 +++++++++--------- src/d/d_menu_dmap.cpp | 188 +++++------ src/d/d_menu_fishing.cpp | 50 +-- src/d/d_menu_fmap2D.cpp | 136 ++++---- src/d/d_menu_insect.cpp | 54 +-- src/d/d_menu_item_explain.cpp | 42 +-- src/d/d_menu_letter.cpp | 186 +++++------ src/d/d_menu_option.cpp | 210 ++++++------ src/d/d_menu_ring.cpp | 108 +++--- src/d/d_menu_save.cpp | 84 ++--- src/d/d_menu_skill.cpp | 66 ++-- src/d/d_meter2_draw.cpp | 288 ++++++++-------- src/d/d_meter_button.cpp | 204 ++++++------ src/d/d_meter_haihai.cpp | 16 +- src/d/d_meter_hakusha.cpp | 12 +- src/d/d_meter_string.cpp | 18 +- src/d/d_msg_scrn_3select.cpp | 62 ++-- src/d/d_msg_scrn_arrow.cpp | 14 +- src/d/d_msg_scrn_boss.cpp | 8 +- src/d/d_msg_scrn_explain.cpp | 54 +-- src/d/d_msg_scrn_howl.cpp | 58 ++-- src/d/d_msg_scrn_item.cpp | 74 ++--- src/d/d_msg_scrn_jimaku.cpp | 32 +- src/d/d_msg_scrn_kanban.cpp | 32 +- src/d/d_msg_scrn_light.cpp | 2 +- src/d/d_msg_scrn_place.cpp | 8 +- src/d/d_msg_scrn_staff.cpp | 6 +- src/d/d_msg_scrn_talk.cpp | 88 ++--- src/d/d_msg_scrn_tree.cpp | 34 +- src/d/d_name.cpp | 72 ++-- src/d/d_select_cursor.cpp | 48 +-- src/d/d_timer.cpp | 102 +++--- src/m_Do/m_Do_graphic.cpp | 2 +- src/m_Do/m_Do_lib.cpp | 6 +- 105 files changed, 1871 insertions(+), 1760 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 87a30e76a7..791b083ed3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -23,6 +23,7 @@ elseif (APPLE) set(CMAKE_BUILD_RPATH "$ORIGIN") elseif (MSVC) add_compile_options(/bigobj) + add_compile_options(/Zc:strictStrings-) endif () add_subdirectory(extern/aurora EXCLUDE_FROM_ALL) diff --git a/include/JSystem/JGeometry.h b/include/JSystem/JGeometry.h index 62f2a743c1..78cebe8681 100644 --- a/include/JSystem/JGeometry.h +++ b/include/JSystem/JGeometry.h @@ -6,9 +6,13 @@ #include "JSystem/JMath/JMath.h" #ifndef __MWERKS__ -#include +#ifdef _MSVC_LANG +#include +#else +#include #define FLT_EPSILON std::numeric_limits::epsilon() #endif +#endif namespace JGeometry { diff --git a/include/JSystem/JHostIO/JORMContext.h b/include/JSystem/JHostIO/JORMContext.h index 0db8cf22a6..22158007f9 100644 --- a/include/JSystem/JHostIO/JORMContext.h +++ b/include/JSystem/JHostIO/JORMContext.h @@ -2,7 +2,14 @@ #define JORMCONTEXT_H #include + +#ifdef _MSVC_LANG #include +#else +#include +#endif + +#include #include "JSystem/JHostIO/JORReflexible.h" #include "JSystem/JSupport/JSUMemoryStream.h" diff --git a/include/JSystem/JMessage/JMessage.h b/include/JSystem/JMessage/JMessage.h index a097187998..b4144ddf00 100644 --- a/include/JSystem/JMessage/JMessage.h +++ b/include/JSystem/JMessage/JMessage.h @@ -35,7 +35,12 @@ typedef struct str1_entry_t { typedef struct str1_section_t { /* 0x00 */ bmg_section_t header; // section header +#ifdef _MSVC_LANG + str1_entry_t* __get_entries() const { return (str1_entry_t*)(this + 1); } + __declspec(property(get = __get_entries)) str1_entry_t* entries; +#else /* 0x08 */ str1_entry_t entries[0]; +#endif } str1_section_t; #endif /* JMESSAGE_H */ diff --git a/include/JSystem/JSupport/JSUOutputStream.h b/include/JSystem/JSupport/JSUOutputStream.h index b44ec084b0..81c8f9d24d 100644 --- a/include/JSystem/JSupport/JSUOutputStream.h +++ b/include/JSystem/JSupport/JSUOutputStream.h @@ -18,6 +18,13 @@ public: s32 write(const void*, s32); void write(const char*); +#ifdef _MSVC_LANG + JSUOutputStream& operator<<(uintptr_t param_0) { + write(¶m_0, sizeof(uintptr_t)); + return *this; + } +#endif + JSUOutputStream& operator<<(u32 param_0) { write(¶m_0, sizeof(u32)); return *this; diff --git a/include/JSystem/JUtility/JUTFont.h b/include/JSystem/JUtility/JUTFont.h index 12cf8f6772..4ebaadb7fa 100644 --- a/include/JSystem/JUtility/JUTFont.h +++ b/include/JSystem/JUtility/JUTFont.h @@ -52,7 +52,12 @@ struct ResFONT { /* 0x1A */ u16 textureWidth; /* 0x1C */ u16 textureHeight; /* 0x1E */ u16 padding; +#ifdef _MSVC_LANG + u8* __get_data() const { return (u8*)(this + 1); } + __declspec(property(get = __get_data)) u8* data; +#else /* 0x20 */ u8 data[]; +#endif }; /* 0x00 */ u64 magic; diff --git a/include/SSystem/SComponent/c_xyz.h b/include/SSystem/SComponent/c_xyz.h index 23b059be98..8aec629bc6 100644 --- a/include/SSystem/SComponent/c_xyz.h +++ b/include/SSystem/SComponent/c_xyz.h @@ -4,6 +4,10 @@ #include "dolphin/mtx.h" #include +#ifdef _MSVC_LANG +#define M_PI 3.14159265358979323846f +#endif + struct cXyz : Vec { static const cXyz Zero; static const cXyz BaseX; diff --git a/include/Z2AudioLib/Z2StatusMgr.h b/include/Z2AudioLib/Z2StatusMgr.h index 615374f2be..762772c746 100644 --- a/include/Z2AudioLib/Z2StatusMgr.h +++ b/include/Z2AudioLib/Z2StatusMgr.h @@ -1,6 +1,7 @@ #ifndef Z2STATUSMGR_H #define Z2STATUSMGR_H +#include #include "JSystem/JAudio2/JASGadget.h" #include diff --git a/include/d/actor/d_a_npc.h b/include/d/actor/d_a_npc.h index 08fee130bc..53a839e74a 100644 --- a/include/d/actor/d_a_npc.h +++ b/include/d/actor/d_a_npc.h @@ -626,7 +626,8 @@ public: daNpcT_MotionSeqMngr_c::sequenceStepData_c const* i_faceMotionSequenceData, int i_faceMotionStepNum, daNpcT_MotionSeqMngr_c::sequenceStepData_c const* i_motionSequenceData, - int i_motionStepNum, daNpcT_evtData_c const* i_evtData, char** i_arcNames) : + int i_motionStepNum, daNpcT_evtData_c const* i_evtData, char** i_arcNames) + : mpFaceMotionAnmData(i_faceMotionAnmData), mpMotionAnmData(i_motionAnmData), mpEvtData(i_evtData), diff --git a/include/d/actor/d_a_npc_aru.h b/include/d/actor/d_a_npc_aru.h index 0cd612bb5c..7a68ea7673 100644 --- a/include/d/actor/d_a_npc_aru.h +++ b/include/d/actor/d_a_npc_aru.h @@ -149,8 +149,7 @@ public: int i_faceMotionStepNum, daNpcT_MotionSeqMngr_c::sequenceStepData_c const* i_motionSequenceData, int i_motionStepNum, - daNpcT_evtData_c const* i_evtData, - char** i_arcNames) + daNpcT_evtData_c const* i_evtData, char** i_arcNames) : daNpcT_c(i_faceMotionAnmData, i_motionAnmData, i_faceMotionSequenceData, i_faceMotionStepNum, i_motionSequenceData, i_motionStepNum, i_evtData, i_arcNames) {} diff --git a/include/d/actor/d_a_npc_besu.h b/include/d/actor/d_a_npc_besu.h index 0e1028069f..173f970b8d 100644 --- a/include/d/actor/d_a_npc_besu.h +++ b/include/d/actor/d_a_npc_besu.h @@ -111,8 +111,7 @@ public: int i_faceMotionStepNum, daNpcT_MotionSeqMngr_c::sequenceStepData_c const* i_motionSequenceData, int i_motionStepNum, - daNpcT_evtData_c const* i_evtData, - char** i_arcNames) + daNpcT_evtData_c const* i_evtData, char** i_arcNames) : daNpcT_c(i_faceMotionAnmData, i_motionAnmData, i_faceMotionSequenceData, i_faceMotionStepNum, i_motionSequenceData, i_motionStepNum, i_evtData, i_arcNames) { diff --git a/include/d/actor/d_a_npc_bou.h b/include/d/actor/d_a_npc_bou.h index 391c038457..99b44169b5 100644 --- a/include/d/actor/d_a_npc_bou.h +++ b/include/d/actor/d_a_npc_bou.h @@ -86,9 +86,10 @@ public: int talkwithJagar(void*); int talk(void*); daNpc_Bou_c(daNpcT_faceMotionAnmData_c const* param_1, daNpcT_motionAnmData_c const* param_2, - daNpcT_MotionSeqMngr_c::sequenceStepData_c const* param_3, int param_4, - daNpcT_MotionSeqMngr_c::sequenceStepData_c const* param_5, int param_6, - daNpcT_evtData_c const* param_7, char** param_8) : + daNpcT_MotionSeqMngr_c::sequenceStepData_c const* param_3, int param_4, + daNpcT_MotionSeqMngr_c::sequenceStepData_c const* param_5, int param_6, + daNpcT_evtData_c const* param_7, char** param_8) + : daNpcT_c(param_1, param_2, param_3, param_4, param_5, param_6, param_7, param_8) {} diff --git a/include/d/actor/d_a_npc_clerka.h b/include/d/actor/d_a_npc_clerka.h index f1c683d74d..a20c12c001 100644 --- a/include/d/actor/d_a_npc_clerka.h +++ b/include/d/actor/d_a_npc_clerka.h @@ -95,13 +95,12 @@ public: int tend(void*); int talk(void*); int shop(void*); - daNpc_clerkA_c( - daNpcT_faceMotionAnmData_c const* i_faceMotionAnmData, - daNpcT_motionAnmData_c const* i_motionAnmData, - daNpcT_MotionSeqMngr_c::sequenceStepData_c const* i_faceMotionSequenceData, - int i_faceMotionStepNum, - daNpcT_MotionSeqMngr_c::sequenceStepData_c const* i_motionSequenceData, int i_motionStepNum, - daNpcT_evtData_c const* i_evtData, char** i_arcNames) + daNpc_clerkA_c(daNpcT_faceMotionAnmData_c const* i_faceMotionAnmData, + daNpcT_motionAnmData_c const* i_motionAnmData, + daNpcT_MotionSeqMngr_c::sequenceStepData_c const* i_faceMotionSequenceData, + int i_faceMotionStepNum, + daNpcT_MotionSeqMngr_c::sequenceStepData_c const* i_motionSequenceData, + int i_motionStepNum, daNpcT_evtData_c const* i_evtData, char** i_arcNames) : dShopSystem_c(i_faceMotionAnmData, i_motionAnmData, i_faceMotionSequenceData, i_faceMotionStepNum, i_motionSequenceData, i_motionStepNum, i_evtData, i_arcNames) {} diff --git a/include/d/actor/d_a_npc_clerkb.h b/include/d/actor/d_a_npc_clerkb.h index dfe3ee6eb3..f83ec949d4 100644 --- a/include/d/actor/d_a_npc_clerkb.h +++ b/include/d/actor/d_a_npc_clerkb.h @@ -108,13 +108,12 @@ public: int tend(void*); int talk(void*); int shop(void*); - daNpc_clerkB_c( - daNpcT_faceMotionAnmData_c const* i_faceMotionAnmData, - daNpcT_motionAnmData_c const* i_motionAnmData, - daNpcT_MotionSeqMngr_c::sequenceStepData_c const* i_faceMotionSequenceData, - int i_faceMotionStepNum, - daNpcT_MotionSeqMngr_c::sequenceStepData_c const* i_motionSequenceData, int i_motionStepNum, - daNpcT_evtData_c const* i_evtData, char** i_arcNames) + daNpc_clerkB_c(daNpcT_faceMotionAnmData_c const* i_faceMotionAnmData, + daNpcT_motionAnmData_c const* i_motionAnmData, + daNpcT_MotionSeqMngr_c::sequenceStepData_c const* i_faceMotionSequenceData, + int i_faceMotionStepNum, + daNpcT_MotionSeqMngr_c::sequenceStepData_c const* i_motionSequenceData, + int i_motionStepNum, daNpcT_evtData_c const* i_evtData, char** i_arcNames) : dShopSystem_c(i_faceMotionAnmData, i_motionAnmData, i_faceMotionSequenceData, i_faceMotionStepNum, i_motionSequenceData, i_motionStepNum, i_evtData, i_arcNames) {} diff --git a/include/d/actor/d_a_npc_taro.h b/include/d/actor/d_a_npc_taro.h index 7eaf3d42b3..8db2ec3270 100644 --- a/include/d/actor/d_a_npc_taro.h +++ b/include/d/actor/d_a_npc_taro.h @@ -121,13 +121,12 @@ public: int practice(void*); int nurse(void*); int talk(void*); - daNpc_Taro_c( - daNpcT_faceMotionAnmData_c const* i_faceMotionAnmData, - daNpcT_motionAnmData_c const* i_motionAnmData, - daNpcT_MotionSeqMngr_c::sequenceStepData_c const* i_faceMotionSequenceData, - int i_faceMotionStepNum, - daNpcT_MotionSeqMngr_c::sequenceStepData_c const* i_motionSequenceData, int i_motionStepNum, - daNpcT_evtData_c const* i_evtData, char** i_arcNames) + daNpc_Taro_c(daNpcT_faceMotionAnmData_c const* i_faceMotionAnmData, + daNpcT_motionAnmData_c const* i_motionAnmData, + daNpcT_MotionSeqMngr_c::sequenceStepData_c const* i_faceMotionSequenceData, + int i_faceMotionStepNum, + daNpcT_MotionSeqMngr_c::sequenceStepData_c const* i_motionSequenceData, + int i_motionStepNum, daNpcT_evtData_c const* i_evtData, char** i_arcNames) : daNpcT_c(i_faceMotionAnmData, i_motionAnmData, i_faceMotionSequenceData, i_faceMotionStepNum, i_motionSequenceData, i_motionStepNum, i_evtData, i_arcNames) { diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index bf1523042c..adef9d71d8 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -924,7 +924,8 @@ inline void dComIfG_ct() { g_dComIfG_gameInfo.ct(); } -int dComLbG_PhaseHandler(request_of_phase_process_class*, request_of_phase_process_fn*, void*); +int dComLbG_PhaseHandler(request_of_phase_process_class*, request_of_phase_process_fn*, + void*); BOOL dComIfG_resetToOpening(scene_class* scene); char* dComIfG_getRoomArcName(int roomNo); void* dComIfG_getStageRes(char const* i_resName); @@ -3757,7 +3758,8 @@ inline int dComIfGp_evmng_getMyStaffId(const char* i_staffname, fopAc_ac_c* i_ac return dComIfGp_getPEvtManager()->getMyStaffId(i_staffname, i_actor, i_tagId); } -inline int dComIfGp_evmng_getMyActIdx(int i_staffId, char** i_actions, int i_actionNum, BOOL param_3, BOOL param_4) { +inline int dComIfGp_evmng_getMyActIdx(int i_staffId, char** i_actions, int i_actionNum, + BOOL param_3, BOOL param_4) { return dComIfGp_getPEvtManager()->getMyActIdx(i_staffId, i_actions, i_actionNum, param_3, param_4); } diff --git a/include/d/d_menu_fmap.h b/include/d/d_menu_fmap.h index 2b450aa577..a8c528ac9d 100644 --- a/include/d/d_menu_fmap.h +++ b/include/d/d_menu_fmap.h @@ -74,7 +74,12 @@ public: /* 0x0 */ char mStageName[8]; /* 0x8 */ u16 mAreaName; /* 0xA */ u8 mCount; +#ifdef _MSVC_LANG + u8* __get_mRoomNos() const { return (u8*)(this + 1); } + __declspec(property(get = __get_mRoomNos)) u8* mRoomNos; +#else /* 0xB */ u8 mRoomNos[0]; +#endif }; /* 0x0 */ u8 mCount; diff --git a/include/d/d_particle_name.h b/include/d/d_particle_name.h index 52b7770484..05c128edd7 100644 --- a/include/d/d_particle_name.h +++ b/include/d/d_particle_name.h @@ -2,6 +2,7 @@ #define D_PARTICLE_D_PARTICLE_NAME_H #include "dolphin/types.h" +#include // Room scenes use a bit to specify an ID is from a room particle pack, not the common particle pack #define dPa_RM(id) (0x8000 | (id)) diff --git a/include/d/d_shop_system.h b/include/d/d_shop_system.h index 0f4c6ae17b..02f76074dd 100644 --- a/include/d/d_shop_system.h +++ b/include/d/d_shop_system.h @@ -29,10 +29,11 @@ public: }; dShopSystem_c(daNpcT_faceMotionAnmData_c const* param_1, daNpcT_motionAnmData_c const* param_2, - daNpcT_MotionSeqMngr_c::sequenceStepData_c const* param_3, int param_4, - daNpcT_MotionSeqMngr_c::sequenceStepData_c const* param_5, int param_6, daNpcT_evtData_c const* param_7, - char** param_8) : daNpcT_c(param_1,param_2,param_3,param_4,param_5,param_6,param_7,param_8) { - OS_REPORT("|%06d:%x|dShopSystem_c -> コンストラクト\n", g_Counter.mCounter0, this); + daNpcT_MotionSeqMngr_c::sequenceStepData_c const* param_3, int param_4, + daNpcT_MotionSeqMngr_c::sequenceStepData_c const* param_5, int param_6, + daNpcT_evtData_c const* param_7, char** param_8) + : daNpcT_c(param_1, param_2, param_3, param_4, param_5, param_6, param_7, param_8) { + OS_REPORT("|%06d:%x|dShopSystem_c -> コンストラクト\n", g_Counter.mCounter0, this); initShopSystem(); } diff --git a/include/global.h b/include/global.h index 8be30974cc..9cca717013 100644 --- a/include/global.h +++ b/include/global.h @@ -83,6 +83,24 @@ extern int __abs(int); void* __memcpy(void*, const void*, int); #endif +#ifdef _MSVC_LANG +inline int __builtin_clz(unsigned int v) { + int count = 32; + while (v != 0) { + count--; + v >>= 1; + } + return count; +} + +#define COMPOUND_LITERAL(x) +#define M_PI 3.14159265358979323846f +#else + +#define COMPOUND_LITERAL(x) (x) + +#endif + #define FAST_DIV(x, n) (x >> (n / 2)) #define SQUARE(x) ((x) * (x)) @@ -145,4 +163,23 @@ static const float INF = 2000000000.0f; #define UNSET_FLAG(var, flag, type) (var) &= ~(flag) #endif +#ifdef _MSVC_LANG + template + inline constexpr auto MultiCharLiteral(const char (&buf)[N]) { + // static_assert(buf[0] == '\'' && buf[N - 2] == '\''); // can't constexpr strings, just pray + constexpr int len = N - 1; + static_assert(len >= 2 && len <= 10); + + unsigned long long out = 0; + for (int i = 1; i < len - 1; i++) { + out = (out << 8) | ((unsigned long long)buf[i]); + } + return out; + } + + #define MULTI_CHAR(x) MultiCharLiteral(#x) +#else + #define MULTI_CHAR(x) MultiCharLiteral(#x) +#endif + #endif diff --git a/src/JSystem/J2DGraph/J2DMaterialFactory.cpp b/src/JSystem/J2DGraph/J2DMaterialFactory.cpp index 55a8ca4c36..d283a8a9ef 100644 --- a/src/JSystem/J2DGraph/J2DMaterialFactory.cpp +++ b/src/JSystem/J2DGraph/J2DMaterialFactory.cpp @@ -276,7 +276,7 @@ J2DGXColorS10 J2DMaterialFactory::newTevColor(int param_0, int param_1) const { } JUtility::TColor J2DMaterialFactory::newTevKColor(int param_0, int param_1) const { - JUtility::TColor local_20 = (GXColor){0xFF, 0xFF, 0xFF, 0xFF}; + JUtility::TColor local_20 = COMPOUND_LITERAL(GXColor){0xFF, 0xFF, 0xFF, 0xFF}; J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]]; if (iVar2->field_0x4a[param_1] != 0xffff) { return field_0x3c[iVar2->field_0x4a[param_1]]; diff --git a/src/JSystem/J3DGraphLoader/J3DModelLoaderCalcSize.cpp b/src/JSystem/J3DGraphLoader/J3DModelLoaderCalcSize.cpp index 5957fcc642..d8eb26ae6b 100644 --- a/src/JSystem/J3DGraphLoader/J3DModelLoaderCalcSize.cpp +++ b/src/JSystem/J3DGraphLoader/J3DModelLoaderCalcSize.cpp @@ -135,7 +135,7 @@ u32 J3DModelLoader::calcLoadBinaryDisplayListSize(const void* stream, u32 flags) case 'MDL3': size += calcSizeMaterialDL((const J3DMaterialDLBlock*)nextBlock, flags); break; - case 'MAT3': { + case 'MAT3': { u32 flags2 = (J3DMLF_21 | J3DMLF_Material_PE_Full | J3DMLF_Material_Color_LightOn); flags2 |= (u32)flags & (J3DMLF_Material_UseIndirect | J3DMLF_26); mpMaterialBlock = (const J3DMaterialBlock*)nextBlock; diff --git a/src/JSystem/JAudio2/JASSeqParser.cpp b/src/JSystem/JAudio2/JASSeqParser.cpp index e68d880e17..415f5d6082 100644 --- a/src/JSystem/JAudio2/JASSeqParser.cpp +++ b/src/JSystem/JAudio2/JASSeqParser.cpp @@ -721,10 +721,10 @@ s32 JASSeqParser::cmdReg(JASTrack* param_0, u32* param_1) { case 7: r30 ^= readReg(param_0, r29); break; - case 8: + case 8: { static JMath::TRandom_ oRandom(0); r30 = (oRandom.get_bit32() >> 9) % r30; - break; + } break; case 9: r30 = readReg(param_0, r29) << r30; break; diff --git a/src/JSystem/JStage/JSGAmbientLight.cpp b/src/JSystem/JStage/JSGAmbientLight.cpp index e7954c8cf3..acffa59621 100644 --- a/src/JSystem/JStage/JSGAmbientLight.cpp +++ b/src/JSystem/JStage/JSGAmbientLight.cpp @@ -9,7 +9,7 @@ s32 JStage::TAmbientLight::JSGFGetType() const { } GXColor JStage::TAmbientLight::JSGGetColor() const { - return (GXColor){255, 255, 255, 255}; + return COMPOUND_LITERAL(GXColor){255, 255, 255, 255}; } void JStage::TAmbientLight::JSGSetColor(GXColor) {} diff --git a/src/JSystem/JStage/JSGFog.cpp b/src/JSystem/JStage/JSGFog.cpp index cf1a8eb2c8..cb9c28f463 100644 --- a/src/JSystem/JStage/JSGFog.cpp +++ b/src/JSystem/JStage/JSGFog.cpp @@ -28,7 +28,7 @@ f32 JStage::TFog::JSGGetEndZ() const { void JStage::TFog::JSGSetEndZ(f32) {} GXColor JStage::TFog::JSGGetColor() const { - return (GXColor){255, 255, 255, 255}; + return COMPOUND_LITERAL(GXColor){255, 255, 255, 255}; } void JStage::TFog::JSGSetColor(GXColor) {} diff --git a/src/JSystem/JStage/JSGLight.cpp b/src/JSystem/JStage/JSGLight.cpp index a9797befcf..c8b7432987 100644 --- a/src/JSystem/JStage/JSGLight.cpp +++ b/src/JSystem/JStage/JSGLight.cpp @@ -15,7 +15,7 @@ bool JStage::TLight::JSGGetLightType() const { void JStage::TLight::JSGSetLightType(JStage::TELight) {} GXColor JStage::TLight::JSGGetColor() const { - return (GXColor){255, 255, 255, 255}; + return COMPOUND_LITERAL(GXColor){255, 255, 255, 255}; } void JStage::TLight::JSGSetColor(GXColor) {} diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C++/MSL_Common/Include/stdint.h b/src/PowerPC_EABI_Support/MSL/MSL_C++/MSL_Common/Include/stdint.h index caf108094b..1c8c64b0b5 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C++/MSL_Common/Include/stdint.h +++ b/src/PowerPC_EABI_Support/MSL/MSL_C++/MSL_Common/Include/stdint.h @@ -3,20 +3,24 @@ #include -#ifdef __cplusplus - using std::uint8_t; - using std::uint16_t; - using std::uint32_t; +#ifdef _MSVC_LANG + #include +#else + #ifdef __cplusplus + using std::uint8_t; + using std::uint16_t; + using std::uint32_t; - using std::int8_t; - using std::int16_t; - using std::int32_t; + using std::int8_t; + using std::int16_t; + using std::int32_t; - using std::uint64_t; - using std::int64_t; + using std::uint64_t; + using std::int64_t; - using std::uintptr_t; - using std::intptr_t; + using std::uintptr_t; + using std::intptr_t; + #endif #endif #endif diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/cstddef b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/cstddef index cd142bcf60..d3ffcea0a8 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/cstddef +++ b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/cstddef @@ -11,8 +11,10 @@ extern "C" { #define NULL 0 #endif +#ifndef _MSVC_LANG typedef unsigned long size_t; typedef long ptrdiff_t; +#endif #ifndef __cplusplus typedef unsigned short wchar_t; diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/float.h b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/float.h index 1a294cbb1c..a5e5791777 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/float.h +++ b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/float.h @@ -99,7 +99,7 @@ int __fpclassifyl(long double __value); #define FLT_MAX_EXP 128 #define FLT_MAX_10_EXP 38 -#if DEBUG +#if DEBUG || defined(_MSVC_LANG) #define FLT_MAX 3.4028235e38f #define FLT_EPSILON 1.1920929e-7f #else diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/stddef b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/stddef index a960525303..8b2b85e7e6 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/stddef +++ b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/stddef @@ -3,6 +3,10 @@ #include +#ifdef _MSVC_LANG +#include +#endif + #ifdef __cplusplus extern "C" { #endif diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/va_list b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/va_list index 04a8cfe7fc..215d33e3d9 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/va_list +++ b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/va_list @@ -1,6 +1,13 @@ #ifndef MSL_VA_LIST_H #define MSL_VA_LIST_H +#ifdef _MSVC_LANG + #include + #define va_start __crt_va_start_a + #define va_end __crt_va_end + #define va_arg __crt_va_arg +#else + #ifdef __cplusplus extern "C" { #endif @@ -39,4 +46,6 @@ void* __va_arg(_va_list_struct*, int); } #endif +#endif + #endif /* __VA_ARG_H */ diff --git a/src/SSystem/SComponent/c_math.cpp b/src/SSystem/SComponent/c_math.cpp index ba7a63c61a..2cc54fece9 100644 --- a/src/SSystem/SComponent/c_math.cpp +++ b/src/SSystem/SComponent/c_math.cpp @@ -6,6 +6,7 @@ #include "SSystem/SComponent/c_math.h" #include "SSystem/SComponent/c_m3d.h" #include +#include s16 cM_rad2s(f32 rad) { s32 s = (std::fmod(rad, 2 * M_PI) * (0x8000 / M_PI)); diff --git a/src/SSystem/SComponent/c_phase.cpp b/src/SSystem/SComponent/c_phase.cpp index c31fd9b2d0..fbef09e635 100644 --- a/src/SSystem/SComponent/c_phase.cpp +++ b/src/SSystem/SComponent/c_phase.cpp @@ -4,6 +4,7 @@ */ #include "SSystem/SComponent/c_phase.h" +#include "global.h" void cPhs_Reset(request_of_phase_process_class* phase) { phase->id = cPhs_INIT_e; diff --git a/src/SSystem/SComponent/c_xyz.cpp b/src/SSystem/SComponent/c_xyz.cpp index 9f05b9e61c..be4214a874 100644 --- a/src/SSystem/SComponent/c_xyz.cpp +++ b/src/SSystem/SComponent/c_xyz.cpp @@ -6,11 +6,14 @@ #include "SSystem/SComponent/c_xyz.h" #include "SSystem/SComponent/c_math.h" #include "JSystem/JUtility/JUTAssert.h" +#include "global.h" #ifndef __MWERKS__ +#ifndef _MSVC_LANG #include #define FLT_EPSILON std::numeric_limits::epsilon() #endif +#endif cXyz cXyz::operator+(const Vec& vec) const { Vec ret; @@ -82,7 +85,7 @@ cXyz cXyz::normZC() const { outVec.x = 0.0f; outVec.y = 0.0f; outVec.z = 1.0f; - outVec = (Vec){0,0,1}; + outVec = COMPOUND_LITERAL(Vec){0,0,1}; } } diff --git a/src/d/actor/d_a_alink_effect.inc b/src/d/actor/d_a_alink_effect.inc index 7ad7c2f4df..0eb97ea1bd 100644 --- a/src/d/actor/d_a_alink_effect.inc +++ b/src/d/actor/d_a_alink_effect.inc @@ -2013,10 +2013,10 @@ BOOL daAlink_lockCursor_c::create() { return false; } - field_0xc = mScrn->search('n_all'); - mCursor0 = mScrn->search('cursor0'); - mCursor1 = mScrn->search('cursor1'); - mCursor2 = mScrn->search('cursor2'); + field_0xc = mScrn->search(MULTI_CHAR('n_all')); + mCursor0 = mScrn->search(MULTI_CHAR('cursor0')); + mCursor1 = mScrn->search(MULTI_CHAR('cursor1')); + mCursor2 = mScrn->search(MULTI_CHAR('cursor2')); field_0x28->searchUpdateMaterialID(mScrn); field_0xc->setAnimation(field_0x28); @@ -2029,7 +2029,7 @@ BOOL daAlink_lockCursor_c::create() { mCursor0->setAnimation(field_0x24); mCursor1->setAnimation(field_0x24); mCursor2->setAnimation(field_0x24); - mScrn->search('flash')->setAnimation(field_0x24); + mScrn->search(MULTI_CHAR('flash'))->setAnimation(field_0x24); field_0x24->setFrame(0.0f); field_0x1c->searchUpdateMaterialID(mScrn); diff --git a/src/d/actor/d_a_balloon_2D.cpp b/src/d/actor/d_a_balloon_2D.cpp index a580f46e6b..3d7b126d43 100644 --- a/src/d/actor/d_a_balloon_2D.cpp +++ b/src/d/actor/d_a_balloon_2D.cpp @@ -164,18 +164,18 @@ int daBalloon2D_c::createHeap() { JKRArchive* arc = resInfo->getArchive(); mScreen->setPriority("zelda_balloon_game.blo", 0x20000, arc); dPaneClass_showNullPane(mScreen); - field_0x578 = new CPaneMgr(mScreen, 'n_all', 2, NULL); - field_0x57c = new CPaneMgr(mScreen, 'score_tn', 0, NULL); - field_0x580 = new CPaneMgr(mScreen, 'suji_n', 2, NULL); - field_0x584 = new CPaneMgr(mScreen, 's_set_n', 0, NULL); - field_0x588 = new CPaneMgr(mScreen, 'tas_n', 0, NULL); - field_0x58c = new CPaneMgr(mScreen, 'combo_tn', 0, NULL); - field_0x590 = new CPaneMgr(mScreen, 'num_n', 0, NULL); - field_0x594 = new CPaneMgr(mScreen, 'co_set_n', 2, NULL); - field_0x598 = new CPaneMgr(mScreen, 'bal_3_n', 2, NULL); - field_0x59c = new CPaneMgr(mScreen, 'bal_2_n', 2, NULL); - field_0x5a0 = new CPaneMgr(mScreen, 'bal_1_n', 2, NULL); - field_0x5a4 = new CPaneMgr(mScreen, 'ba_com_n', 2, NULL); + field_0x578 = new CPaneMgr(mScreen, MULTI_CHAR('n_all'), 2, NULL); + field_0x57c = new CPaneMgr(mScreen, MULTI_CHAR('score_tn'), 0, NULL); + field_0x580 = new CPaneMgr(mScreen, MULTI_CHAR('suji_n'), 2, NULL); + field_0x584 = new CPaneMgr(mScreen, MULTI_CHAR('s_set_n'), 0, NULL); + field_0x588 = new CPaneMgr(mScreen, MULTI_CHAR('tas_n'), 0, NULL); + field_0x58c = new CPaneMgr(mScreen, MULTI_CHAR('combo_tn'), 0, NULL); + field_0x590 = new CPaneMgr(mScreen, MULTI_CHAR('num_n'), 0, NULL); + field_0x594 = new CPaneMgr(mScreen, MULTI_CHAR('co_set_n'), 2, NULL); + field_0x598 = new CPaneMgr(mScreen, MULTI_CHAR('bal_3_n'), 2, NULL); + field_0x59c = new CPaneMgr(mScreen, MULTI_CHAR('bal_2_n'), 2, NULL); + field_0x5a0 = new CPaneMgr(mScreen, MULTI_CHAR('bal_1_n'), 2, NULL); + field_0x5a4 = new CPaneMgr(mScreen, MULTI_CHAR('ba_com_n'), 2, NULL); field_0x578->setAlphaRate(0.0f); field_0x5a4->setAlphaRate(0.0f); for (s32 i = 0; i < 10; i++) { @@ -196,17 +196,17 @@ int daBalloon2D_c::createHeap() { } J2DTextBox* combos[2]; J2DTextBox* scores[2]; - combos[0] = (J2DTextBox*)mScreen->search('combo_ts'); - combos[1] = (J2DTextBox*)mScreen->search('combo_t'); - scores[0] = (J2DTextBox*)mScreen->search('score_ts'); - scores[1] = (J2DTextBox*)mScreen->search('score_t'); - field_0x5a8[0] = (J2DPicture*)mScreen->search('suji_4'); - field_0x5a8[1] = (J2DPicture*)mScreen->search('suji_3'); - field_0x5a8[2] = (J2DPicture*)mScreen->search('suji_2'); - field_0x5a8[3] = (J2DPicture*)mScreen->search('suji_1'); - field_0x5a8[4] = (J2DPicture*)mScreen->search('suji_0'); - field_0x5a8[5] = (J2DPicture*)mScreen->search('num_1'); - field_0x5a8[6] = (J2DPicture*)mScreen->search('num_0'); + combos[0] = (J2DTextBox*)mScreen->search(MULTI_CHAR('combo_ts')); + combos[1] = (J2DTextBox*)mScreen->search(MULTI_CHAR('combo_t')); + scores[0] = (J2DTextBox*)mScreen->search(MULTI_CHAR('score_ts')); + scores[1] = (J2DTextBox*)mScreen->search(MULTI_CHAR('score_t')); + field_0x5a8[0] = (J2DPicture*)mScreen->search(MULTI_CHAR('suji_4')); + field_0x5a8[1] = (J2DPicture*)mScreen->search(MULTI_CHAR('suji_3')); + field_0x5a8[2] = (J2DPicture*)mScreen->search(MULTI_CHAR('suji_2')); + field_0x5a8[3] = (J2DPicture*)mScreen->search(MULTI_CHAR('suji_1')); + field_0x5a8[4] = (J2DPicture*)mScreen->search(MULTI_CHAR('suji_0')); + field_0x5a8[5] = (J2DPicture*)mScreen->search(MULTI_CHAR('num_1')); + field_0x5a8[6] = (J2DPicture*)mScreen->search(MULTI_CHAR('num_0')); for (int i = 0; i < 2; i++) { combos[i]->setString(32, ""); scores[i]->setString(32, ""); diff --git a/src/d/actor/d_a_boomerang.cpp b/src/d/actor/d_a_boomerang.cpp index 8853c08d03..6f6b2cd1a0 100644 --- a/src/d/actor/d_a_boomerang.cpp +++ b/src/d/actor/d_a_boomerang.cpp @@ -158,10 +158,10 @@ static const u32 l_lockSeFlg[BOOMERANG_LOCK_MAX] = { }; void daBoomerang_sight_c::initialize() { - m_cursorYellowAllPane = m_cursorYellowScrn->search('n_all'); - m_cursorYellow0Pane = m_cursorYellowScrn->search('cursor0'); - m_cursorYellow1Pane = m_cursorYellowScrn->search('cursor1'); - m_cursorYellow2Pane = m_cursorYellowScrn->search('cursor2'); + m_cursorYellowAllPane = m_cursorYellowScrn->search(MULTI_CHAR('n_all')); + m_cursorYellow0Pane = m_cursorYellowScrn->search(MULTI_CHAR('cursor0')); + m_cursorYellow1Pane = m_cursorYellowScrn->search(MULTI_CHAR('cursor1')); + m_cursorYellow2Pane = m_cursorYellowScrn->search(MULTI_CHAR('cursor2')); m_cursorYellowBck->searchUpdateMaterialID(m_cursorYellowScrn); m_cursorYellowAllPane->setAnimation(m_cursorYellowBck); @@ -174,7 +174,7 @@ void daBoomerang_sight_c::initialize() { m_cursorYellow0Pane->setAnimation(m_cursorYellowBpk); m_cursorYellow1Pane->setAnimation(m_cursorYellowBpk); m_cursorYellow2Pane->setAnimation(m_cursorYellowBpk); - m_cursorYellowScrn->search('flash')->setAnimation(m_cursorYellowBpk); + m_cursorYellowScrn->search(MULTI_CHAR('flash'))->setAnimation(m_cursorYellowBpk); m_cursorYellowBpk->setFrame(0.0f); m_cursorYellow2Brk->searchUpdateMaterialID(m_cursorYellowScrn); @@ -192,10 +192,10 @@ void daBoomerang_sight_c::initialize() { m_cursorYellowScrn->setUserInfo('n_43'); m_cursorYellowAllPane->setUserInfo(' '); - m_cursorRedAllPane = m_cursorRedScrn->search('n_all'); - m_cursorRed0Pane = m_cursorRedScrn->search('cursor0'); - m_cursorRed1Pane = m_cursorRedScrn->search('cursor1'); - m_cursorRed2Pane = m_cursorRedScrn->search('cursor2'); + m_cursorRedAllPane = m_cursorRedScrn->search(MULTI_CHAR('n_all')); + m_cursorRed0Pane = m_cursorRedScrn->search(MULTI_CHAR('cursor0')); + m_cursorRed1Pane = m_cursorRedScrn->search(MULTI_CHAR('cursor1')); + m_cursorRed2Pane = m_cursorRedScrn->search(MULTI_CHAR('cursor2')); m_cursorRedAllPane->setAnimation(m_cursorYellowBck); m_cursorRed0Pane->setAnimation(m_cursorYellowBck); @@ -204,7 +204,7 @@ void daBoomerang_sight_c::initialize() { m_cursorRed0Pane->setAnimation(m_cursorYellowBpk); m_cursorRed1Pane->setAnimation(m_cursorYellowBpk); m_cursorRed2Pane->setAnimation(m_cursorYellowBpk); - m_cursorRedScrn->search('flash')->setAnimation(m_cursorYellowBpk); + m_cursorRedScrn->search(MULTI_CHAR('flash'))->setAnimation(m_cursorYellowBpk); m_cursorRed2Brk->searchUpdateMaterialID(m_cursorRedScrn); m_cursorRedBrk->searchUpdateMaterialID(m_cursorRedScrn); @@ -221,10 +221,10 @@ void daBoomerang_sight_c::initialize() { m_cursorRedScrn->setUserInfo('n_43'); m_cursorRedAllPane->setUserInfo(' '); - m_cursorOrangeAllPane = m_cursorOrangeScrn->search('n_all'); - m_cursorOrange0Pane = m_cursorOrangeScrn->search('cursor0'); - m_cursorOrange1Pane = m_cursorOrangeScrn->search('cursor1'); - m_cursorOrange2Pane = m_cursorOrangeScrn->search('cursor2'); + m_cursorOrangeAllPane = m_cursorOrangeScrn->search(MULTI_CHAR('n_all')); + m_cursorOrange0Pane = m_cursorOrangeScrn->search(MULTI_CHAR('cursor0')); + m_cursorOrange1Pane = m_cursorOrangeScrn->search(MULTI_CHAR('cursor1')); + m_cursorOrange2Pane = m_cursorOrangeScrn->search(MULTI_CHAR('cursor2')); m_cursorOrangeAllPane->setAnimation(m_cursorYellowBck); m_cursorOrange0Pane->setAnimation(m_cursorYellowBck); @@ -233,7 +233,7 @@ void daBoomerang_sight_c::initialize() { m_cursorOrange0Pane->setAnimation(m_cursorYellowBpk); m_cursorOrange1Pane->setAnimation(m_cursorYellowBpk); m_cursorOrange2Pane->setAnimation(m_cursorYellowBpk); - m_cursorOrangeScrn->search('flash')->setAnimation(m_cursorYellowBpk); + m_cursorOrangeScrn->search(MULTI_CHAR('flash'))->setAnimation(m_cursorYellowBpk); m_cursorOrange2Brk->searchUpdateMaterialID(m_cursorOrangeScrn); m_cursorOrangeBrk->searchUpdateMaterialID(m_cursorOrangeScrn); diff --git a/src/d/actor/d_a_coach_2D.cpp b/src/d/actor/d_a_coach_2D.cpp index fd21f2dac0..e6a4fa52f2 100644 --- a/src/d/actor/d_a_coach_2D.cpp +++ b/src/d/actor/d_a_coach_2D.cpp @@ -124,13 +124,13 @@ int daCoach2D_c::createHeap() { mpFireIconBrk->searchUpdateMaterialID(mpScrn); setBrkAnime(true); - mpPaneAll = new CPaneMgr(mpScrn, 'n_all', 2, NULL); - mpPaneBasha = new CPaneMgr(mpScrn, 'basha_n', 2, NULL); - mpPaneFire = new CPaneMgr(mpScrn, 'fire_n', 2, NULL); + mpPaneAll = new CPaneMgr(mpScrn, MULTI_CHAR('n_all'), 2, NULL); + mpPaneBasha = new CPaneMgr(mpScrn, MULTI_CHAR('basha_n'), 2, NULL); + mpPaneFire = new CPaneMgr(mpScrn, MULTI_CHAR('fire_n'), 2, NULL); - mpScrn->search('fire_b_n')->move(mpPaneFire->getPosX(), mpPaneFire->getPosY()); + mpScrn->search(MULTI_CHAR('fire_b_n'))->move(mpPaneFire->getPosX(), mpPaneFire->getPosY()); - mpPaneFireB = new CPaneMgr(mpScrn, 'fire_b_n', 2, NULL); + mpPaneFireB = new CPaneMgr(mpScrn, MULTI_CHAR('fire_b_n'), 2, NULL); mMsgLight = new dMsgScrnLight_c(6, 0xFF); @@ -287,7 +287,7 @@ void daCoach2D_c::update() { icon_pos_x -= var_f29; } - f32 var_f30 = 4.0f * ((J2DPicture*)mpScrn->search('basha_p0'))->getWhite().r; + f32 var_f30 = 4.0f * ((J2DPicture*)mpScrn->search(MULTI_CHAR('basha_p0')))->getWhite().r; if (var_f30 > 255.0f) { var_f30 = 255.0f; } @@ -319,14 +319,14 @@ void daCoach2D_c::setBrkAnime(bool param_0) { if (mBrkFrame >= mpFireIconBrk->getFrameMax()) { mBrkFrame -= mpFireIconBrk->getFrameMax(); } - mpScrn->search('basha_f0')->show(); + mpScrn->search(MULTI_CHAR('basha_f0'))->show(); } else { - mpScrn->search('basha_f0')->hide(); + mpScrn->search(MULTI_CHAR('basha_f0'))->hide(); mBrkFrame = 0.0f; } mpFireIconBrk->setFrame(mBrkFrame); - mpScrn->search('basha_p0')->setAnimation(mpFireIconBrk); + mpScrn->search(MULTI_CHAR('basha_p0'))->setAnimation(mpFireIconBrk); } static int daCoach2D_create(daCoach2D_c* i_this) { diff --git a/src/d/actor/d_a_door_mbossL1.cpp b/src/d/actor/d_a_door_mbossL1.cpp index d752b14ba3..1636dd22b9 100644 --- a/src/d/actor/d_a_door_mbossL1.cpp +++ b/src/d/actor/d_a_door_mbossL1.cpp @@ -247,7 +247,7 @@ int daMBdoorL1_c::getDoorType() { char* daMBdoorL1_c::getOpenAnm() { if (getDoorType() == DOOR_TYPE_1) { - return"oj_DoorOpD.bck"; + return "oj_DoorOpD.bck"; } if (getDoorType() == DOOR_TYPE_0) { return "oj_DoorOpC.bck"; @@ -257,7 +257,7 @@ char* daMBdoorL1_c::getOpenAnm() { char* daMBdoorL1_c::getCloseAnm() { if (getDoorType() == DOOR_TYPE_1) { - return"oj_DoorCloseD.bck"; + return "oj_DoorCloseD.bck"; } if (getDoorType() == DOOR_TYPE_0) { return "oj_DoorCloseC.bck"; @@ -271,7 +271,7 @@ char* daMBdoorL1_c::getBmd() { case 11: return "door-knob_00.bmd"; default: - return"door-shutter_00.bmd"; + return "door-shutter_00.bmd"; } } diff --git a/src/d/actor/d_a_e_arrow.cpp b/src/d/actor/d_a_e_arrow.cpp index 9827237349..79edf1938e 100644 --- a/src/d/actor/d_a_e_arrow.cpp +++ b/src/d/actor/d_a_e_arrow.cpp @@ -358,69 +358,69 @@ static void e_arrow_demo_fire(e_arrow_class* i_this) { } i_this->mTimers[0] = 20; - case 1: - spB0.set(0, i_this->field_0xa0c, 0); + case 1: { + spB0.set(0, i_this->field_0xa0c, 0); - static u16 fire_name[] = {0x84EE, 0x84EF, 0x84F0, 0x84F1}; + static u16 fire_name[] = {0x84EE, 0x84EF, 0x84F0, 0x84F1}; - for (int i = 0; i < 4; i++) { - i_this->field_0x9f0[i] = dComIfGp_particle_set(i_this->field_0x9f0[i], fire_name[i], - &i_this->field_0xa00, &spB0, NULL); + for (int i = 0; i < 4; i++) { + i_this->field_0x9f0[i] = dComIfGp_particle_set(i_this->field_0x9f0[i], fire_name[i], + &i_this->field_0xa00, &spB0, NULL); - dComIfGp_particle_levelEmitterOnEventMove(i_this->field_0x9f0[i]); - } - - if (i_this->mTimers[0] == 0) { - daPy_py_c* player_p = (daPy_py_c*)dComIfGp_getPlayer(0); - - f32 var_f31; - if (i_this->field_0xa0c == 0) { - var_f31 = 41200.0f; - sp9C.z = -700.0f; - } else { - var_f31 = 36800.0f; - sp9C.z = 700.0f; + dComIfGp_particle_levelEmitterOnEventMove(i_this->field_0x9f0[i]); } - if (!player_p->checkWolfDig() && - (!dComIfGp_event_runCheck() || - fopAcM_getTalkEventPartner(daPy_getLinkPlayerActorClass()) != - (fopAc_ac_c*)daPy_py_c::getMidnaActor())) - { - if (!dMsgObject_isTalkNowCheck()) { - cLib_addCalc2(&i_this->field_0xa00.z, var_f31, 0.1f, i_this->field_0xa10); + if (i_this->mTimers[0] == 0) { + daPy_py_c* player_p = (daPy_py_c*)dComIfGp_getPlayer(0); + + f32 var_f31; + if (i_this->field_0xa0c == 0) { + var_f31 = 41200.0f; + sp9C.z = -700.0f; + } else { + var_f31 = 36800.0f; + sp9C.z = 700.0f; } - } - if (i_this->field_0xa0c == 0 && fpcM_Search(s_limit_sub, i_this) != NULL) { - dBgS_ObjGndChk gnd_chk; - sp9C = player_p->current.pos; - sp9C.y += 200.0f; - gnd_chk.SetPos(&sp9C); - - if (dComIfG_Bgsp().GroundCross(&gnd_chk) > -10000.0f) { - i_this->mMode = 2; - return; + if (!player_p->checkWolfDig() && + (!dComIfGp_event_runCheck() || + fopAcM_getTalkEventPartner(daPy_getLinkPlayerActorClass()) != + (fopAc_ac_c*)daPy_py_c::getMidnaActor())) + { + if (!dMsgObject_isTalkNowCheck()) { + cLib_addCalc2(&i_this->field_0xa00.z, var_f31, 0.1f, i_this->field_0xa10); + } } + + if (i_this->field_0xa0c == 0 && fpcM_Search(s_limit_sub, i_this) != NULL) { + dBgS_ObjGndChk gnd_chk; + sp9C = player_p->current.pos; + sp9C.y += 200.0f; + gnd_chk.SetPos(&sp9C); + + if (dComIfG_Bgsp().GroundCross(&gnd_chk) > -10000.0f) { + i_this->mMode = 2; + return; + } + } + + cLib_addCalc2(&i_this->field_0xa10, 10.0f, 1.0f, 1.0f); + + if (!dComIfGp_event_runCheck()) { + sp9C.y = 0.0f; + sp9C.x = 0.0f; + + i_this->mCcFireEffSph.SetC(i_this->field_0xa00 + sp9C); + i_this->mCcFireEffSph.SetR(800.0f); + dComIfG_Ccsp()->Set(&i_this->mCcFireEffSph); + } + + i_this->mpModel = NULL; } - cLib_addCalc2(&i_this->field_0xa10, 10.0f, 1.0f, 1.0f); - - if (!dComIfGp_event_runCheck()) { - sp9C.y = 0.0f; - sp9C.x = 0.0f; - - i_this->mCcFireEffSph.SetC(i_this->field_0xa00 + sp9C); - i_this->mCcFireEffSph.SetR(800.0f); - dComIfG_Ccsp()->Set(&i_this->mCcFireEffSph); - } - - i_this->mpModel = NULL; - } - - Z2GetAudioMgr()->seStartLevel(Z2SE_OBJ_STRAWFENCE_BURNING, &i_this->field_0xa00, 0, 0, 1.0f, - 1.0f, -1.0f, -1.0f, 0); - break; + Z2GetAudioMgr()->seStartLevel(Z2SE_OBJ_STRAWFENCE_BURNING, &i_this->field_0xa00, 0, 0, + 1.0f, 1.0f, -1.0f, -1.0f, 0); + } break; case 2: dMeter2Info_getMeterClass()->setLifeZero(); break; diff --git a/src/d/actor/d_a_e_ymb.cpp b/src/d/actor/d_a_e_ymb.cpp index 6ec159ca31..37da21606f 100644 --- a/src/d/actor/d_a_e_ymb.cpp +++ b/src/d/actor/d_a_e_ymb.cpp @@ -1117,7 +1117,7 @@ void daE_YMB_c::executeFlyAttack() { setInclination(); break; - case 5: + case 5: { setElecEffect2(); field_0x704 = 3; field_0x712 = 1; @@ -1141,7 +1141,9 @@ void daE_YMB_c::executeFlyAttack() { } static s16 ymb_chance_time[3] = { - 110, 80, 50, + 110, + 80, + 50, }; if (field_0x6fc == 0) { mMode = 9; @@ -1151,7 +1153,7 @@ void daE_YMB_c::executeFlyAttack() { } setInclination(); - break; + } break; case 9: case 10: diff --git a/src/d/actor/d_a_e_zm.cpp b/src/d/actor/d_a_e_zm.cpp index 1e67b6c317..e9ea08514f 100644 --- a/src/d/actor/d_a_e_zm.cpp +++ b/src/d/actor/d_a_e_zm.cpp @@ -384,7 +384,7 @@ void daE_ZM_c::executeWait() { } break; - case MODE_2: + case MODE_2: { mStts.Move(); mCyl.OffTgSetBit(); mCyl.OffCoSetBit(); @@ -406,6 +406,7 @@ void daE_ZM_c::executeWait() { mSound.startCreatureSound(Z2SE_EN_ZM_DISAPPER, 0, -1); mMode++; + } // fallthrough case MODE_3: cLib_addCalc0(&field_0x6f4.x, 0.7f, 1.0f); diff --git a/src/d/actor/d_a_mant.cpp b/src/d/actor/d_a_mant.cpp index af433d0a77..0e203ddca9 100644 --- a/src/d/actor/d_a_mant.cpp +++ b/src/d/actor/d_a_mant.cpp @@ -284,8 +284,8 @@ void daMant_packet_c::draw() { dKy_Global_amb_set(this->mTevStr); GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); - GXSetTevColor(GX_TEVREG0, (GXColor){1, 0, 0, 0}); - GXSetTevKColor(GX_KCOLOR0, (GXColor){1, 0, 0, 0}); + GXSetTevColor(GX_TEVREG0, COMPOUND_LITERAL(GXColor){1, 0, 0, 0}); + GXSetTevKColor(GX_KCOLOR0, COMPOUND_LITERAL(GXColor){1, 0, 0, 0}); GXSetTevKColorSel(GX_TEVSTAGE0, GX_TEV_KCSEL_K0); GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_KONST, GX_CC_TEXC, GX_CC_RASC, GX_CC_C0); @@ -318,8 +318,8 @@ void daMant_packet_c::draw() { GXInitTexObjLOD(&GStack_74, GX_LINEAR, GX_LINEAR, 0.0, 0.0, 0.0, 0, 0, GX_ANISO_1); GXLoadTexObj(&GStack_74, GX_TEXMAP0); - GXSetTevColor(GX_TEVREG0, (GXColor){0, 0, 0, 0}); - GXSetTevKColor(GX_KCOLOR0, (GXColor){0, 0, 0, 0}); + GXSetTevColor(GX_TEVREG0, COMPOUND_LITERAL(GXColor){0, 0, 0, 0}); + GXSetTevKColor(GX_KCOLOR0, COMPOUND_LITERAL(GXColor){0, 0, 0, 0}); GXSetCullMode(GX_CULL_FRONT); GXLoadPosMtxImm(this->mMtx2, GX_PNMTX0); diff --git a/src/d/actor/d_a_npc4.cpp b/src/d/actor/d_a_npc4.cpp index 9e59ae820f..5f7621d926 100644 --- a/src/d/actor/d_a_npc4.cpp +++ b/src/d/actor/d_a_npc4.cpp @@ -1280,7 +1280,8 @@ int daNpcF_c::ctrlMsgAnm(int& o_expression, int& o_motion, fopAc_ac_c* param_2, return mMsgTimer; } -void daNpcF_c::orderEvent(int i_speak, char* i_evtName, u16 param_2, u16 i_priority, u8 i_mapToolID, +void daNpcF_c::orderEvent(int i_speak, char* i_evtName, u16 param_2, u16 i_priority, + u8 i_mapToolID, u16 i_flag) { if (i_evtName != NULL) { mEventIdx = dComIfGp_getEventManager().getEventIdx(this, i_evtName, 0xff); diff --git a/src/d/actor/d_a_npc_bouS.cpp b/src/d/actor/d_a_npc_bouS.cpp index 4fa1b66694..c848bc781d 100644 --- a/src/d/actor/d_a_npc_bouS.cpp +++ b/src/d/actor/d_a_npc_bouS.cpp @@ -1360,22 +1360,22 @@ int daNpcBouS_c::EvCut_BousIntroSumo1(int i_staffId) { if (eventManager.getIsAddvance(i_staffId)) { switch (*cutName) { - case '0x0001': + case MULTI_CHAR('0x0001'): setLookMode(LOOK_PLAYER_TALK); mActorMngrs[0].entry(daPy_getPlayerActorClass()); break; - case '0x0002': - case '0x0003': - case '0x0005': - case '0x0006': - case '0x0007': - case '0x0008': - case '0x0009': + case MULTI_CHAR('0x0002'): + case MULTI_CHAR('0x0003'): + case MULTI_CHAR('0x0005'): + case MULTI_CHAR('0x0006'): + case MULTI_CHAR('0x0007'): + case MULTI_CHAR('0x0008'): + case MULTI_CHAR('0x0009'): initTalk(9, NULL); break; - case '0x0004': + case MULTI_CHAR('0x0004'): setExpressionAnm(ANM_FH_TALK_B, true); break; @@ -1396,17 +1396,17 @@ int daNpcBouS_c::EvCut_BousIntroSumo1(int i_staffId) { } switch (*cutName) { - case '0x0001': - case '0x0004': + case MULTI_CHAR('0x0001'): + case MULTI_CHAR('0x0004'): return 1; - case '0x0002': - case '0x0003': - case '0x0005': - case '0x0006': - case '0x0007': - case '0x0008': - case '0x0009': + case MULTI_CHAR('0x0002'): + case MULTI_CHAR('0x0003'): + case MULTI_CHAR('0x0005'): + case MULTI_CHAR('0x0006'): + case MULTI_CHAR('0x0007'): + case MULTI_CHAR('0x0008'): + case MULTI_CHAR('0x0009'): if (talkProc(NULL, TRUE, NULL)) { s32 choiceNo = mFlow.getChoiceNo(); OS_REPORT("二択分岐 %s\n", choiceNo == 0 ? "はい" : "いいえ"); @@ -1434,7 +1434,7 @@ int daNpcBouS_c::EvCut_BousIntroSumo2(int i_staffId) { if (eventManager.getIsAddvance(i_staffId)) { switch (*cutName) { - case '0x0001': + case MULTI_CHAR('0x0001'): initTalk(9, NULL); setLookMode(LOOK_PLAYER_TALK); mActorMngrs[0].entry(daPy_getPlayerActorClass()); @@ -1456,7 +1456,7 @@ int daNpcBouS_c::EvCut_BousIntroSumo2(int i_staffId) { } switch (*cutName) { - case '0x0001': + case MULTI_CHAR('0x0001'): if (mCurAngle.y == fopAcM_searchPlayerAngleY(this)) { if (talkProc(NULL, TRUE, NULL)) { int choiceNo = mFlow.getChoiceNo(); @@ -1489,15 +1489,15 @@ int daNpcBouS_c::EvCut_BousIntroSumo3(int i_staffId) { if (eventManager.getIsAddvance(i_staffId)) { switch (*cutName) { - case '0x0001': + case MULTI_CHAR('0x0001'): setLookMode(LOOK_PLAYER_TALK); mActorMngrs[0].entry(daPy_getPlayerActorClass()); break; - case '0x0003': + case MULTI_CHAR('0x0003'): setMotion(MOT_WALK, -1.0f, 0); // fallthrough - case '0x0002': + case MULTI_CHAR('0x0002'): setAngle(-0x2AAA); initTalk(9, NULL); break; @@ -1521,16 +1521,16 @@ int daNpcBouS_c::EvCut_BousIntroSumo3(int i_staffId) { } switch (*cutName) { - case '0x0001': + case MULTI_CHAR('0x0001'): return 1; - case '0x0002': + case MULTI_CHAR('0x0002'): if (talkProc(NULL, TRUE, NULL)) { return 1; } break; - case '0x0003': { + case MULTI_CHAR('0x0003'): { cXyz* pos = dComIfGp_evmng_getMyXyzP(i_staffId, "pos"); if (pos != NULL) { if (cLib_chaseAngleS(&shape_angle.y, cLib_targetAngleY(¤t.pos, pos), 0x100)) { diff --git a/src/d/actor/d_a_npc_jagar.cpp b/src/d/actor/d_a_npc_jagar.cpp index 7fd3a5aad5..dab7385ca5 100644 --- a/src/d/actor/d_a_npc_jagar.cpp +++ b/src/d/actor/d_a_npc_jagar.cpp @@ -347,7 +347,7 @@ int daNpc_Jagar_c::create() { static int const heapSize[4] = {14416, 14448, 14448, 0}; daNpcT_ct(this, daNpc_Jagar_c, l_faceMotionAnmData, (const daNpcT_motionAnmData_c *)l_motionAnmData, (const daNpcT_MotionSeqMngr_c::sequenceStepData_c *) l_faceMotionSequenceData, 4, - (const daNpcT_MotionSeqMngr_c::sequenceStepData_c *)l_motionSequenceData, 4, (const daNpcT_evtData_c *)l_evtList, (char **)l_resNameList + (const daNpcT_MotionSeqMngr_c::sequenceStepData_c *)l_motionSequenceData, 4, (const daNpcT_evtData_c *)l_evtList, l_resNameList ); mType = getType(); diff --git a/src/d/actor/d_a_npc_kn_teach01.inc b/src/d/actor/d_a_npc_kn_teach01.inc index ae4a5a3ca2..77d941a372 100644 --- a/src/d/actor/d_a_npc_kn_teach01.inc +++ b/src/d/actor/d_a_npc_kn_teach01.inc @@ -333,7 +333,7 @@ int daNpc_Kn_c::ctrlWarp() { void(0); break; } - case 1: + case 1: { sp28 = 1; field_0x170d++; @@ -367,7 +367,7 @@ int daNpc_Kn_c::ctrlWarp() { field_0x170d = 0; } void(0); - break; + } break; case 2: sp28 = 1; field_0x170d++; diff --git a/src/d/actor/d_a_npc_len.cpp b/src/d/actor/d_a_npc_len.cpp index 6d3586be20..28963aac14 100644 --- a/src/d/actor/d_a_npc_len.cpp +++ b/src/d/actor/d_a_npc_len.cpp @@ -174,7 +174,7 @@ int daNpc_Len_c::create() { (const daNpcT_motionAnmData_c*)l_motionAnmData, (const daNpcT_MotionSeqMngr_c::sequenceStepData_c*)l_faceMotionSequenceData, 4, (const daNpcT_MotionSeqMngr_c::sequenceStepData_c*)l_motionSequenceData, - 4, (const daNpcT_evtData_c*)l_evtList, (char**)l_resNameList); + 4, (const daNpcT_evtData_c*)l_evtList, l_resNameList); mType = getType(); mFlowNodeNo = getFlowNodeNo(); diff --git a/src/d/actor/d_a_npc_lud.cpp b/src/d/actor/d_a_npc_lud.cpp index b15297f89d..2b7373446d 100644 --- a/src/d/actor/d_a_npc_lud.cpp +++ b/src/d/actor/d_a_npc_lud.cpp @@ -254,7 +254,7 @@ int daNpc_Lud_c::create() { (const daNpcT_motionAnmData_c*)l_motionAnmData, (const daNpcT_MotionSeqMngr_c::sequenceStepData_c*)l_faceMotionSequenceData, 4, (const daNpcT_MotionSeqMngr_c::sequenceStepData_c*)l_motionSequenceData, - 4, (const daNpcT_evtData_c*)l_evtList, (char**)l_resNameList); + 4, (const daNpcT_evtData_c*)l_evtList, l_resNameList); mType = getType(); mFlowNodeNo = getFlowNodeNo(); diff --git a/src/d/actor/d_a_npc_moi.cpp b/src/d/actor/d_a_npc_moi.cpp index 50462a6f25..f5513e0014 100644 --- a/src/d/actor/d_a_npc_moi.cpp +++ b/src/d/actor/d_a_npc_moi.cpp @@ -267,7 +267,7 @@ int daNpc_Moi_c::create() { (const daNpcT_motionAnmData_c*)l_motionAnmData, (const daNpcT_MotionSeqMngr_c::sequenceStepData_c*)l_faceMotionSequenceData, 4, (const daNpcT_MotionSeqMngr_c::sequenceStepData_c*)l_motionSequenceData, - 4, (const daNpcT_evtData_c*)l_evtList, (char**)l_resNameList); + 4, (const daNpcT_evtData_c*)l_evtList, l_resNameList); mType = getType(); mFlowNodeNo = getFlowNodeNo(); diff --git a/src/d/actor/d_a_npc_saru.cpp b/src/d/actor/d_a_npc_saru.cpp index b7e9a2b835..8cae6ba680 100644 --- a/src/d/actor/d_a_npc_saru.cpp +++ b/src/d/actor/d_a_npc_saru.cpp @@ -308,7 +308,7 @@ int daNpc_Saru_c::create() { }; daNpcT_ct(this, daNpc_Saru_c, l_faceMotionAnmData, l_motionAnmData, - l_faceMotionSequenceData, 4, l_motionSequenceData, 4, l_evtList, (char**)l_resNameList); + l_faceMotionSequenceData, 4, l_motionSequenceData, 4, l_evtList, l_resNameList); mType = getType(); mFlowNodeNo = getFlowNodeNo(); diff --git a/src/d/actor/d_a_npc_theB.cpp b/src/d/actor/d_a_npc_theB.cpp index 29df164a3f..9f9993ae94 100644 --- a/src/d/actor/d_a_npc_theB.cpp +++ b/src/d/actor/d_a_npc_theB.cpp @@ -1176,10 +1176,10 @@ int daNpcTheB_c::EvCut_PersonalCombatIntro(int i_staffId) { if (eventManager.getIsAddvance(i_staffId)) { switch (*cutName) { - case '0x0001': + case MULTI_CHAR('0x0001'): break; - case '0x0002': + case MULTI_CHAR('0x0002'): initTalk(0x16, NULL); setLookMode(LOOK_PLAYER); mActorMngrs[0].entry(daPy_getPlayerActorClass()); @@ -1204,10 +1204,10 @@ int daNpcTheB_c::EvCut_PersonalCombatIntro(int i_staffId) { } switch (*cutName) { - case '0x0001': + case MULTI_CHAR('0x0001'): return 1; - case '0x0002': + case MULTI_CHAR('0x0002'): if (talkProc(NULL, TRUE, NULL)) { dComIfGs_onSaveDunSwitch(52); dComIfGs_onSaveDunSwitch(53); @@ -1229,7 +1229,7 @@ int daNpcTheB_c::EvCut_PersonalCombatRevenge(int i_staffId) { if (eventManager.getIsAddvance(i_staffId)) { switch (*cutName) { - case '0x0001': { + case MULTI_CHAR('0x0001'): { fopAc_ac_c* actor_p = getEvtAreaTagP(5, 0); cXyz* pos = dComIfGp_evmng_getMyXyzP(i_staffId, "pos"); int* angle = dComIfGp_evmng_getMyIntegerP(i_staffId, "angle"); @@ -1248,13 +1248,13 @@ int daNpcTheB_c::EvCut_PersonalCombatRevenge(int i_staffId) { break; } - case '0x0002': + case MULTI_CHAR('0x0002'): initTalk(0x17, NULL); setLookMode(LOOK_PLAYER); mActorMngrs[0].entry(daPy_getPlayerActorClass()); break; - case '0x0003': + case MULTI_CHAR('0x0003'): break; default: @@ -1282,19 +1282,19 @@ int daNpcTheB_c::EvCut_PersonalCombatRevenge(int i_staffId) { } switch (*cutName) { - case '0x0001': + case MULTI_CHAR('0x0001'): if (getCoachSpeed() == 0.0f) { return 1; } break; - case '0x0002': + case MULTI_CHAR('0x0002'): if (talkProc(NULL, TRUE, NULL)) { return 1; } break; - case '0x0003': + case MULTI_CHAR('0x0003'): return 1; default: @@ -1411,7 +1411,7 @@ int daNpcTheB_c::EvCut_AnnulationFieldRace(int i_staffId) { if (eventManager.getIsAddvance(i_staffId)) { switch (*cutName) { - case '0x0001': + case MULTI_CHAR('0x0001'): if (startAndGoal_p != NULL) { startAndGoal_p->readyStartTimer(); } @@ -1424,7 +1424,7 @@ int daNpcTheB_c::EvCut_AnnulationFieldRace(int i_staffId) { } switch (*cutName) { - case '0x0001': + case MULTI_CHAR('0x0001'): if (startAndGoal_p != NULL && startAndGoal_p->isStartCheck()) { return 1; } @@ -1444,15 +1444,15 @@ int daNpcTheB_c::EvCut_TheBHint(int i_staffId) { if (eventManager.getIsAddvance(i_staffId)) { switch (*cutName) { - case '0x0001': + case MULTI_CHAR('0x0001'): setMotionAnm(ANM_SIT, 0.0f); break; - case '0x0002': + case MULTI_CHAR('0x0002'): initTalk(mHintMsgNo, NULL); break; - case '0x0003': { + case MULTI_CHAR('0x0003'): { cXyz pos; csXyz angle; daNpcF_getPlayerInfoFromPlayerList(field_0xe04, mRoomNo, pos, angle); @@ -1479,11 +1479,11 @@ int daNpcTheB_c::EvCut_TheBHint(int i_staffId) { } switch (*cutName) { - case '0x0001': - case '0x0003': + case MULTI_CHAR('0x0001'): + case MULTI_CHAR('0x0003'): return 1; - case '0x0002': + case MULTI_CHAR('0x0002'): if (talkProc(NULL, TRUE, NULL)) { mHintEvtFlag = 0; return 1; @@ -1504,22 +1504,22 @@ int daNpcTheB_c::EvCut_CoachGuardGameOver(int i_staffId) { if (eventManager.getIsAddvance(i_staffId)) { switch (*cutName) { - case '0x0001': + case MULTI_CHAR('0x0001'): Z2GetAudioMgr()->bgmStart(Z2BGM_GAME_OVER, 0, 0); break; - case '0x0002': { + case MULTI_CHAR('0x0002'): { daNpcCoach_c* coach_p = (daNpcCoach_c*)fopAcM_SearchByID(parentActorID); cXyz pos(0.0f, -30000.0f, 0.0f); coach_p->setPosAngle(pos, shape_angle); break; } - case '0x0003': + case MULTI_CHAR('0x0003'): ((daCoach2D_c*)fpcM_SearchByName(PROC_COACH2D))->hide(); break; - case '0x0004': + case MULTI_CHAR('0x0004'): break; default: @@ -1529,12 +1529,12 @@ int daNpcTheB_c::EvCut_CoachGuardGameOver(int i_staffId) { } switch (*cutName) { - case '0x0001': - case '0x0002': - case '0x0003': + case MULTI_CHAR('0x0001'): + case MULTI_CHAR('0x0002'): + case MULTI_CHAR('0x0003'): return 1; - case '0x0004': + case MULTI_CHAR('0x0004'): daPy_getPlayerActorClass()->onForceGameOver(); return 1; diff --git a/src/d/actor/d_a_npc_uri.cpp b/src/d/actor/d_a_npc_uri.cpp index d1594f2450..6b3d134764 100644 --- a/src/d/actor/d_a_npc_uri.cpp +++ b/src/d/actor/d_a_npc_uri.cpp @@ -232,7 +232,7 @@ int daNpc_Uri_c::create() { (const daNpcT_motionAnmData_c*)l_motionAnmData, (const daNpcT_MotionSeqMngr_c::sequenceStepData_c*)l_faceMotionSequenceData, 4, (const daNpcT_MotionSeqMngr_c::sequenceStepData_c*)l_motionSequenceData, - 4, (const daNpcT_evtData_c*)l_evtList, (char**)l_resNameList); + 4, (const daNpcT_evtData_c*)l_evtList, l_resNameList); mType = getType(); mFlowNodeNo = getFlowNodeNo(); diff --git a/src/d/actor/d_a_obj_carry.cpp b/src/d/actor/d_a_obj_carry.cpp index bea4671174..383ecc7b86 100644 --- a/src/d/actor/d_a_obj_carry.cpp +++ b/src/d/actor/d_a_obj_carry.cpp @@ -1682,7 +1682,7 @@ int daObjCarry_c::execute() { cLib_chaseF(&field_0xe20, 2.0f, 0.05f + KREG_F(1)); } - GXColor color = (GXColor){0x5F, 0x5F, 0x5F, 0xFF}; + GXColor color = COMPOUND_LITERAL(GXColor){0x5F, 0x5F, 0x5F, 0xFF}; int var_r27 = dKy_BossLight_set(¤t.pos, &color, field_0xe20 + KREG_F(0), 0); if (!var_r27) { OS_REPORT_ERROR("光球:ライト登録できませんでした\n"); diff --git a/src/d/actor/d_a_obj_drop.cpp b/src/d/actor/d_a_obj_drop.cpp index eff54e3af1..cdd3930a5a 100644 --- a/src/d/actor/d_a_obj_drop.cpp +++ b/src/d/actor/d_a_obj_drop.cpp @@ -324,7 +324,7 @@ int daObjDrop_c::modeWait() { mModeAction = 3; } break; - case 3: + case 3: { removeBodyEffect(); static const s16 target_rel_angle[] = {-0x4000, 0x0000, 0x4000}; @@ -338,8 +338,8 @@ int daObjDrop_c::modeWait() { mModeAction = 4; mDrawInTimer = 60; mSound.startSound(Z2SE_OBJ_LIGHTDROP_DRAW_IN, 0, -1); - break; - case 4: + } break; + case 4: { mDrawInTimer--; for (int i = 0; i < 3; i++) { speedF = 60.0f; @@ -396,7 +396,7 @@ int daObjDrop_c::modeWait() { checkCompleteDemo(); mModeAction = 5; } - break; + } break; case 5: if (cLib_calcTimer(&mDeleteTimer) == 0) { mModeAction = 6; diff --git a/src/d/actor/d_a_obj_flag2.cpp b/src/d/actor/d_a_obj_flag2.cpp index 578b62b029..2172b5e96d 100644 --- a/src/d/actor/d_a_obj_flag2.cpp +++ b/src/d/actor/d_a_obj_flag2.cpp @@ -291,8 +291,8 @@ void FlagCloth_c::draw() { GXSetTevSwapMode(GX_TEVSTAGE0, GX_TEV_SWAP0, GX_TEV_SWAP0); dKy_Global_amb_set(&mTevStr); GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); - GXSetTevColor(GX_TEVREG0, (GXColor){0, 0, 0, 0xff}); - GXSetTevKColor(GX_KCOLOR0, (GXColor){0, 0, 0, 0xff}); + GXSetTevColor(GX_TEVREG0, COMPOUND_LITERAL(GXColor){0, 0, 0, 0xff}); + GXSetTevKColor(GX_KCOLOR0, COMPOUND_LITERAL(GXColor){0, 0, 0, 0xff}); GXSetTevKColorSel(GX_TEVSTAGE0, GX_TEV_KCSEL_K0); GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_KONST, GX_CC_TEXC, GX_CC_RASC, GX_CC_C0); GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_4, GX_TRUE, GX_TEVPREV); diff --git a/src/d/actor/d_a_obj_flag3.cpp b/src/d/actor/d_a_obj_flag3.cpp index cd69f4b407..6584710795 100644 --- a/src/d/actor/d_a_obj_flag3.cpp +++ b/src/d/actor/d_a_obj_flag3.cpp @@ -250,8 +250,8 @@ inline void FlagCloth2_c::draw() { GXSetTevSwapMode(GX_TEVSTAGE0, GX_TEV_SWAP0, GX_TEV_SWAP0); dKy_Global_amb_set(&mTevStr); GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); - GXSetTevColor(GX_TEVREG0, (GXColor){0, 0, 0, 0xff}); - GXSetTevKColor(GX_KCOLOR0, (GXColor){0, 0, 0, 0xff}); + GXSetTevColor(GX_TEVREG0, COMPOUND_LITERAL(GXColor){0, 0, 0, 0xff}); + GXSetTevKColor(GX_KCOLOR0, COMPOUND_LITERAL(GXColor){0, 0, 0, 0xff}); GXSetTevKColorSel(GX_TEVSTAGE0, GX_TEV_KCSEL_K0); GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_KONST, GX_CC_TEXC, GX_CC_RASC, GX_CC_C0); GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_4, GX_TRUE, GX_TEVPREV); diff --git a/src/d/actor/d_a_obj_kbacket.cpp b/src/d/actor/d_a_obj_kbacket.cpp index 092c033550..d5a1bc6c38 100644 --- a/src/d/actor/d_a_obj_kbacket.cpp +++ b/src/d/actor/d_a_obj_kbacket.cpp @@ -14,7 +14,7 @@ static s32 l_bmdData[4] = { 8, 0, 9, 0 }; -static char* l_resNameList[1] = { "Kakashi" }; +static char* l_resNameList[1] = {"Kakashi"}; const daObj_KBacket_HIOParam daObj_KBacket_Param_c::m = { 0.0f, -5.0f, 1.0f, 400.0f, 73.0f, 30.0f, 30.0f, 30.0f, 37.0f, 45.0f, 0.0f diff --git a/src/d/actor/d_a_obj_swchain.cpp b/src/d/actor/d_a_obj_swchain.cpp index 8dfb91bab4..ce333ef083 100644 --- a/src/d/actor/d_a_obj_swchain.cpp +++ b/src/d/actor/d_a_obj_swchain.cpp @@ -97,11 +97,11 @@ void daObjSwChain_HIO_c::genMessage(JORMContext* ctx) { ctx->genSlider("戻る速度・低速", &mReturnSpeedLow, 0.0f, 50.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); // Process Stop - ctx->genCheckBox("処理停止", &mProcessStop, '\x01', 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + ctx->genCheckBox("処理停止", &mProcessStop, 0x1, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); // Clawshot Related ctx->genLabel("-- フックショット関係 --", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); // Reaction Angle Display - ctx->genCheckBox("反応角度表示", &mReactionAngleDisplay, '\x01', 0, NULL, 0xffff, 0xffff, 0x200, + ctx->genCheckBox("反応角度表示", &mReactionAngleDisplay, 0x1, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); // Clawshot Reaction Angle ctx->genSlider("フックショット反応角度", &mReactionAngle, 0, 0x7fff, 0, NULL, 0xffff, 0xffff, diff --git a/src/d/actor/d_a_obj_ystone.cpp b/src/d/actor/d_a_obj_ystone.cpp index 93f752a986..70db783150 100644 --- a/src/d/actor/d_a_obj_ystone.cpp +++ b/src/d/actor/d_a_obj_ystone.cpp @@ -111,11 +111,10 @@ static void action(obj_ystone_class* i_this) { J3DAnmTransform* anm; J3DAnmTextureSRTKey* btk_anm; switch (i_this->mMirrorMode) { - case 0: + case 0: { g_env_light.settingTevStruct(0, &i_this->current.pos, &i_this->tevStr); - static u16 mirror_effect_id[10] = { - 0x89A0, 0x89A1, 0x89A2, 0x89A5, 0x89A6, 0x89A7, 0x89A8, 0x89A9, 0x89AA, 0x89AB - }; + static u16 mirror_effect_id[10] = {0x89A0, 0x89A1, 0x89A2, 0x89A5, 0x89A6, + 0x89A7, 0x89A8, 0x89A9, 0x89AA, 0x89AB}; for (int i = 0; i < 10; i++) { dComIfGp_particle_set(mirror_effect_id[i], &i_this->current.pos, &i_this->tevStr, &i_this->shape_angle, NULL); @@ -125,8 +124,7 @@ static void action(obj_ystone_class* i_this) { anm = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName[i_this->mLevel], 5); i_this->mpMorf->setAnm(anm, 0, 0.0f, 0.0f, 0.0f, -1.0f); i_this->mpMorf->setFrame(1.0f); - break; - + } break; case 1: if (i_this->mTimer == 0) { i_this->mMirrorMode = 2; diff --git a/src/d/actor/d_a_title.cpp b/src/d/actor/d_a_title.cpp index 3072d3c24c..55229336b8 100644 --- a/src/d/actor/d_a_title.cpp +++ b/src/d/actor/d_a_title.cpp @@ -182,12 +182,12 @@ void daTitle_c::loadWait_proc() { mTitle.Scr->setPriority("zelda_press_start.blo", 0x100000, mpMount->getArchive()); J2DTextBox* text[7]; - text[0] = (J2DTextBox*)mTitle.Scr->search('t_s_00'); - text[1] = (J2DTextBox*)mTitle.Scr->search('t_s_01'); - text[2] = (J2DTextBox*)mTitle.Scr->search('t_s_02'); - text[3] = (J2DTextBox*)mTitle.Scr->search('t_s_03'); - text[4] = (J2DTextBox*)mTitle.Scr->search('t_s_04'); - text[5] = (J2DTextBox*)mTitle.Scr->search('t_s_05'); + text[0] = (J2DTextBox*)mTitle.Scr->search(MULTI_CHAR('t_s_00')); + text[1] = (J2DTextBox*)mTitle.Scr->search(MULTI_CHAR('t_s_01')); + text[2] = (J2DTextBox*)mTitle.Scr->search(MULTI_CHAR('t_s_02')); + text[3] = (J2DTextBox*)mTitle.Scr->search(MULTI_CHAR('t_s_03')); + text[4] = (J2DTextBox*)mTitle.Scr->search(MULTI_CHAR('t_s_04')); + text[5] = (J2DTextBox*)mTitle.Scr->search(MULTI_CHAR('t_s_05')); text[6] = (J2DTextBox*)mTitle.Scr->search('t_o'); for (int i = 0; i < 7; i++) { @@ -196,9 +196,9 @@ void daTitle_c::loadWait_proc() { fopMsgM_messageGet(text[i]->getStringPtr(), 100); } - field_0x600 = new CPaneMgrAlpha(mTitle.Scr, 'n_all', 2, NULL); + field_0x600 = new CPaneMgrAlpha(mTitle.Scr, MULTI_CHAR('n_all'), 2, NULL); field_0x600->setAlpha(0); - J2DPane* pane = mTitle.Scr->search('n_all'); + J2DPane* pane = mTitle.Scr->search(MULTI_CHAR('n_all')); pane->translate(g_daTitHIO.mPSPosX, g_daTitHIO.mPSPosY); pane->scale(g_daTitHIO.mPSScaleX, g_daTitHIO.mPSScaleY); mpHeap->becomeCurrentHeap(); diff --git a/src/d/d_bright_check.cpp b/src/d/d_bright_check.cpp index 75537717e1..e7695b7451 100644 --- a/src/d/d_bright_check.cpp +++ b/src/d/d_bright_check.cpp @@ -28,32 +28,32 @@ dBrightCheck_c::~dBrightCheck_c() { void dBrightCheck_c::screenSet() { static u64 const tv_btnA[] = { - 'cont_at1', 'cont_at2', 'cont_at3', 'cont_at4', 'cont_at', + MULTI_CHAR('cont_at1'), MULTI_CHAR('cont_at2'), MULTI_CHAR('cont_at3'), MULTI_CHAR('cont_at4'), MULTI_CHAR('cont_at'), }; static u64 const ftv_btnA[] = { - 'font_a1', 'font_at2', 'font_at3', 'font_at4', 'font_at', + MULTI_CHAR('font_a1'), MULTI_CHAR('font_at2'), MULTI_CHAR('font_at3'), MULTI_CHAR('font_at4'), MULTI_CHAR('font_at'), }; #if (VERSION == VERSION_GCN_JPN) || (VERSION == VERSION_WII_JPN) static u64 const txTV[] = { - 'menu_t6s', 'menu_t6', 'menu_t9s', 'menu_t9', 'menut10s', - 'menu_t10', 'menu_t7s', 'menu_t7', 'menu_t8s', 'menu_t8', + MULTI_CHAR('menu_t6s'), MULTI_CHAR('menu_t6'), MULTI_CHAR('menu_t9s'), MULTI_CHAR('menu_t9'), MULTI_CHAR('menut10s'), + MULTI_CHAR('menu_t10'), MULTI_CHAR('menu_t7s'), MULTI_CHAR('menu_t7'), MULTI_CHAR('menu_t8s'), MULTI_CHAR('menu_t8'), }; #else static u64 const txTV[] = { - 'menu_t61', 'menu_t2', 'menu_t91', 'menu_t1', 'menut101', - 'menu_t01', 'menu_t71', 'menu_t3', 'menu_t81', 'menu_t4', + MULTI_CHAR('menu_t61'), MULTI_CHAR('menu_t2'), MULTI_CHAR('menu_t91'), MULTI_CHAR('menu_t1'), MULTI_CHAR('menut101'), + MULTI_CHAR('menu_t01'), MULTI_CHAR('menu_t71'), MULTI_CHAR('menu_t3'), MULTI_CHAR('menu_t81'), MULTI_CHAR('menu_t4'), }; #endif #if (VERSION == VERSION_GCN_JPN) || (VERSION == VERSION_WII_JPN) static u64 const txTVhide[] = { - 'fmenu_6n', 'fmenu_9n', 'fmenu_10', 'fmenu_7n', 'fmenu_8n', + MULTI_CHAR('fmenu_6n'), MULTI_CHAR('fmenu_9n'), MULTI_CHAR('fmenu_10'), MULTI_CHAR('fmenu_7n'), MULTI_CHAR('fmenu_8n'), }; #else static u64 const txTVhide[] = { - 'menu_6n', 'menu_9n', 'menu_10n', 'menu_7n', 'menu_8n', + MULTI_CHAR('menu_6n'), MULTI_CHAR('menu_9n'), MULTI_CHAR('menu_10n'), MULTI_CHAR('menu_7n'), MULTI_CHAR('menu_8n'), }; #endif @@ -61,16 +61,16 @@ void dBrightCheck_c::screenSet() { JUT_ASSERT(0, mBrightCheck.Scr != NULL); mBrightCheck.Scr->setPriority("zelda_option_check.blo", 0x1100000, mArchive); - mBrightCheck.Scr->search('g_abtn_n')->hide(); + mBrightCheck.Scr->search(MULTI_CHAR('g_abtn_n'))->hide(); #if (VERSION == VERSION_GCN_JPN) || (VERSION == VERSION_WII_JPN) - J2DTextBox* settings_text = (J2DTextBox*)mBrightCheck.Scr->search('t_t00'); - mBrightCheck.Scr->search('t_t00')->show(); - mBrightCheck.Scr->search('f_t00')->hide(); + J2DTextBox* settings_text = (J2DTextBox*)mBrightCheck.Scr->search(MULTI_CHAR('t_t00')); + mBrightCheck.Scr->search(MULTI_CHAR('t_t00'))->show(); + mBrightCheck.Scr->search(MULTI_CHAR('f_t00'))->hide(); #else - J2DTextBox* settings_text = (J2DTextBox*)mBrightCheck.Scr->search('f_t00'); - mBrightCheck.Scr->search('f_t00')->show(); - mBrightCheck.Scr->search('t_t00')->hide(); + J2DTextBox* settings_text = (J2DTextBox*)mBrightCheck.Scr->search(MULTI_CHAR('f_t00')); + mBrightCheck.Scr->search(MULTI_CHAR('f_t00'))->show(); + mBrightCheck.Scr->search(MULTI_CHAR('t_t00'))->hide(); #endif settings_text->setFont(mDoExt_getRubyFont()); diff --git a/src/d/d_com_inf_game.cpp b/src/d/d_com_inf_game.cpp index 50099a9a91..57b76d8b10 100644 --- a/src/d/d_com_inf_game.cpp +++ b/src/d/d_com_inf_game.cpp @@ -2634,6 +2634,7 @@ BOOL dComIfGp_TransportWarp_check() { int dComLbG_PhaseHandler(request_of_phase_process_class* i_phaseReq, cPhs__Handler* i_handler, void* i_data) { int phase = cPhs_Handler(i_phaseReq, i_handler, i_data); + switch (phase) { case cPhs_NEXT_e: phase = dComLbG_PhaseHandler(i_phaseReq, i_handler, i_data); diff --git a/src/d/d_drawlist.cpp b/src/d/d_drawlist.cpp index ddea5f1128..381b46051a 100644 --- a/src/d/d_drawlist.cpp +++ b/src/d/d_drawlist.cpp @@ -622,7 +622,7 @@ static u8 l_shadowSealDL[] ATTRIBUTE_ALIGN(32) = { }; dDlst_2DT2_c::dDlst_2DT2_c() { - field_0x40 = (GXColor){0, 0, 0, 0}; + field_0x40 = COMPOUND_LITERAL(GXColor){0, 0, 0, 0}; } void dDlst_2DT2_c::init(ResTIMG* i_timg, f32 param_1, f32 param_2, f32 param_3, f32 param_4, @@ -634,7 +634,7 @@ void dDlst_2DT2_c::init(ResTIMG* i_timg, f32 param_1, f32 param_2, f32 param_3, field_0x30 = param_4; mScaleX = i_scaleX; mScaleY = i_scaleY; - field_0x3c = (GXColor){0, 0, 0, 255}; + field_0x3c = COMPOUND_LITERAL(GXColor){0, 0, 0, 255}; field_0x44 = param_6; if (field_0x44 != 0 && GXGetTexObjWrapS(&mTexObj) == 2) { diff --git a/src/d/d_error_msg.cpp b/src/d/d_error_msg.cpp index ecbb1d2a0a..0dd931c224 100644 --- a/src/d/d_error_msg.cpp +++ b/src/d/d_error_msg.cpp @@ -72,9 +72,9 @@ static void messageSet(u32 status, bool i_drawBg) { JUT_ASSERT(102, strlen(msg_p)-1 < 512); - J2DTextBox tpane('TEXT1', JGeometry::TBox2(0.0f, 0.0f, FB_WIDTH, 200.0f), (ResFONT*)font_data, msg_p, 512, HBIND_CENTER, VBIND_CENTER); - J2DTextBox spane('TEXT2', JGeometry::TBox2(0.0f, 0.0f, FB_WIDTH, 200.0f), (ResFONT*)font_data, msg_p, 512, HBIND_CENTER, VBIND_CENTER); - J2DPicture ppane('PICT1', JGeometry::TBox2(0.0f, 0.0f, FB_WIDTH, FB_HEIGHT), (ResTIMG*)black_tex, NULL); + J2DTextBox tpane(MULTI_CHAR('TEXT1'), JGeometry::TBox2(0.0f, 0.0f, FB_WIDTH, 200.0f), (ResFONT*)font_data, msg_p, 512, HBIND_CENTER, VBIND_CENTER); + J2DTextBox spane(MULTI_CHAR('TEXT2'), JGeometry::TBox2(0.0f, 0.0f, FB_WIDTH, 200.0f), (ResFONT*)font_data, msg_p, 512, HBIND_CENTER, VBIND_CENTER); + J2DPicture ppane(MULTI_CHAR('PICT1'), JGeometry::TBox2(0.0f, 0.0f, FB_WIDTH, FB_HEIGHT), (ResTIMG*)black_tex, NULL); JUTResFont font((ResFONT*)font_data, NULL); JUTFont* pfont = (JUTFont*)&font; diff --git a/src/d/d_ev_camera.cpp b/src/d/d_ev_camera.cpp index 1cd4c3e3b7..20d9f359c6 100644 --- a/src/d/d_ev_camera.cpp +++ b/src/d/d_ev_camera.cpp @@ -12,6 +12,12 @@ #include "d/d_drawlist.h" #include "d/actor/d_a_alink.h" +#ifdef __MWERKS__ +#define LOAD_4BYTE_STRING_LITERAL(x) (*(u32*)(x)) +#else +#define LOAD_4BYTE_STRING_LITERAL(x) read_big_endian_u32(x) +#endif + namespace { static bool isStageEvent(int param_0) { dStage_MapEventInfo_c* info = dComIfGp_getStage()->getMapEventInfo(); @@ -400,19 +406,19 @@ fopAc_ac_c* dCamera_c::getEvActor(char* i_event) { } fopAc_ac_c* actor; - if (*(u32*)string == '@PLA') { + if (LOAD_4BYTE_STRING_LITERAL(string) == '@PLA') { actor = mpPlayerActor; - } else if (*(u32*)string == '@STA') { + } else if (LOAD_4BYTE_STRING_LITERAL(string) == '@STA') { actor = dComIfGp_event_getPt1(); - } else if (*(u32*)string == '@PAR') { + } else if (LOAD_4BYTE_STRING_LITERAL(string) == '@PAR') { actor = dComIfGp_event_getPt2(); - } else if (*(u32*)string == '@TAL') { + } else if (LOAD_4BYTE_STRING_LITERAL(string) == '@TAL') { actor = dComIfGp_event_getTalkPartner(); - } else if (*(u32*)string == '@DOO') { + } else if (LOAD_4BYTE_STRING_LITERAL(string) == '@DOO') { actor = dComIfGp_event_getDoorPartner(); - } else if (*(u32*)string == '@TAR' || *(u32*)string == '@ITE') { + } else if (LOAD_4BYTE_STRING_LITERAL(string) == '@TAR' || LOAD_4BYTE_STRING_LITERAL(string) == '@ITE') { actor = dComIfGp_event_getItemPartner(); - } else if (*(u32*)string == 'Link') { + } else if (LOAD_4BYTE_STRING_LITERAL(string) == 'Link') { actor = dComIfGp_getLinkPlayer(); } else { actor = fopAcM_searchFromName4Event(string, -1); @@ -440,19 +446,19 @@ fopAc_ac_c* dCamera_c::getEvActor(char* i_event, char* param_1) { char* name_str = string; fopAc_ac_c* actor; - if (*(u32*)string == '@PLA') { + if (LOAD_4BYTE_STRING_LITERAL(string) == '@PLA') { actor = mpPlayerActor; - } else if (*(u32*)string == '@STA') { + } else if (LOAD_4BYTE_STRING_LITERAL(string) == '@STA') { actor = dComIfGp_event_getPt1(); - } else if (*(u32*)string == '@PAR') { + } else if (LOAD_4BYTE_STRING_LITERAL(string) == '@PAR') { actor = dComIfGp_event_getPt2(); - } else if (*(u32*)string == '@TAL') { + } else if (LOAD_4BYTE_STRING_LITERAL(string) == '@TAL') { actor = dComIfGp_event_getTalkPartner(); - } else if (*(u32*)string == '@DOO') { + } else if (LOAD_4BYTE_STRING_LITERAL(string) == '@DOO') { actor = dComIfGp_event_getDoorPartner(); - } else if (*(u32*)string == '@TAR' || *(u32*)string == '@ITE') { + } else if (LOAD_4BYTE_STRING_LITERAL(string) == '@TAR' || LOAD_4BYTE_STRING_LITERAL(string) == '@ITE') { actor = dComIfGp_event_getItemPartner(); - } else if (*(u32*)string == 'Link') { + } else if (LOAD_4BYTE_STRING_LITERAL(string) == 'Link') { actor = dComIfGp_getLinkPlayer(); } else { actor = fopAcM_searchFromName4Event(name_str, -1); @@ -1925,7 +1931,8 @@ bool dCamera_c::styleEvCamera() { field_0x160 = 0; } - s32 style = mCamParam.SearchStyle(*(u32*)getEvStringPntData("Name", "FN01")); + s32 style = + mCamParam.SearchStyle(LOAD_4BYTE_STRING_LITERAL(getEvStringPntData("Name", "FN01"))); (this->*engine_tbl[mCamParam.Algorythmn(style)])(style); return isModeOK(); } diff --git a/src/d/d_file_sel_info.cpp b/src/d/d_file_sel_info.cpp index df0bee5aa9..cec56a424e 100644 --- a/src/d/d_file_sel_info.cpp +++ b/src/d/d_file_sel_info.cpp @@ -35,24 +35,24 @@ void dFile_info_c::screenSet() { mFileInfo.Scr->setPriority("zelda_file_select_info_text.blo", 0x1100000, mArchive); mFileInfo.mFont = mDoExt_getMesgFont(); - mFileInfo.Scr->search('w_cp_ef1')->hide(); - mFileInfo.field_0x10 = mFileInfo.Scr->search('w_dat_i1'); - mDatBase = new CPaneMgrAlpha(mFileInfo.Scr, 'w_dat_i1', 2, NULL); - mNoDatBase = new CPaneMgrAlpha(mFileInfo.Scr, 'w_nda_i1', 2, NULL); + mFileInfo.Scr->search(MULTI_CHAR('w_cp_ef1'))->hide(); + mFileInfo.field_0x10 = mFileInfo.Scr->search(MULTI_CHAR('w_dat_i1')); + mDatBase = new CPaneMgrAlpha(mFileInfo.Scr, MULTI_CHAR('w_dat_i1'), 2, NULL); + mNoDatBase = new CPaneMgrAlpha(mFileInfo.Scr, MULTI_CHAR('w_nda_i1'), 2, NULL); J2DTextBox* info_text[4]; #if (VERSION == VERSION_GCN_JPN) || (VERSION == VERSION_WII_JPN) - info_text[0] = (J2DTextBox*)mFileInfo.Scr->search('w_s_t_01'); - info_text[1] = (J2DTextBox*)mFileInfo.Scr->search('w_p_t_01'); - mFileInfo.Scr->search('f_s_t_02')->hide(); - mFileInfo.Scr->search('f_p_t_02')->hide(); + info_text[0] = (J2DTextBox*)mFileInfo.Scr->search(MULTI_CHAR('w_s_t_01')); + info_text[1] = (J2DTextBox*)mFileInfo.Scr->search(MULTI_CHAR('w_p_t_01')); + mFileInfo.Scr->search(MULTI_CHAR('f_s_t_02'))->hide(); + mFileInfo.Scr->search(MULTI_CHAR('f_p_t_02'))->hide(); #else - info_text[0] = (J2DTextBox*)mFileInfo.Scr->search('f_s_t_02'); - info_text[1] = (J2DTextBox*)mFileInfo.Scr->search('f_p_t_02'); - mFileInfo.Scr->search('w_s_t_01')->hide(); - mFileInfo.Scr->search('w_p_t_01')->hide(); + info_text[0] = (J2DTextBox*)mFileInfo.Scr->search(MULTI_CHAR('f_s_t_02')); + info_text[1] = (J2DTextBox*)mFileInfo.Scr->search(MULTI_CHAR('f_p_t_02')); + mFileInfo.Scr->search(MULTI_CHAR('w_s_t_01'))->hide(); + mFileInfo.Scr->search(MULTI_CHAR('w_p_t_01'))->hide(); #endif for (int i = 0; i < 2; i++) { @@ -63,19 +63,19 @@ void dFile_info_c::screenSet() { dMeter2Info_getString(0x3D1, info_text[1]->getStringPtr(), NULL); // Total play time #if (VERSION == VERSION_GCN_JPN) || (VERSION == VERSION_WII_JPN) - info_text[0] = (J2DTextBox*)mFileInfo.Scr->search('w_name01'); - info_text[1] = (J2DTextBox*)mFileInfo.Scr->search('w_new_1'); - mFileInfo.Scr->search('f_name01')->hide(); - mFileInfo.Scr->search('f_new_1')->hide(); + info_text[0] = (J2DTextBox*)mFileInfo.Scr->search(MULTI_CHAR('w_name01')); + info_text[1] = (J2DTextBox*)mFileInfo.Scr->search(MULTI_CHAR('w_new_1')); + mFileInfo.Scr->search(MULTI_CHAR('f_name01'))->hide(); + mFileInfo.Scr->search(MULTI_CHAR('f_new_1'))->hide(); #else - info_text[0] = (J2DTextBox*)mFileInfo.Scr->search('f_name01'); - info_text[1] = (J2DTextBox*)mFileInfo.Scr->search('f_new_1'); - mFileInfo.Scr->search('w_name01')->hide(); - mFileInfo.Scr->search('w_new_1')->hide(); + info_text[0] = (J2DTextBox*)mFileInfo.Scr->search(MULTI_CHAR('f_name01')); + info_text[1] = (J2DTextBox*)mFileInfo.Scr->search(MULTI_CHAR('f_new_1')); + mFileInfo.Scr->search(MULTI_CHAR('w_name01'))->hide(); + mFileInfo.Scr->search(MULTI_CHAR('w_new_1'))->hide(); #endif - info_text[2] = (J2DTextBox*)mFileInfo.Scr->search('w_time01'); - info_text[3] = (J2DTextBox*)mFileInfo.Scr->search('w_ptim01'); + info_text[2] = (J2DTextBox*)mFileInfo.Scr->search(MULTI_CHAR('w_time01')); + info_text[3] = (J2DTextBox*)mFileInfo.Scr->search(MULTI_CHAR('w_ptim01')); for (int i = 0; i < 4; i++) { info_text[i]->setFont(mFileInfo.mFont); @@ -119,9 +119,9 @@ int dFile_info_c::setSaveData(dSv_save_c* i_savedata, BOOL i_validChksum, u8 i_d void dFile_info_c::setHeartCnt(dSv_save_c* i_savedata) { static u64 l_htag[] = { - 'hear_20', 'hear_21', 'hear_22', 'hear_23', 'hear_24', 'hear_25', 'hear_26', - 'hear_27', 'hear_28', 'hear_29', 'hear_30', 'hear_31', 'hear_32', 'hear_33', - 'hear_34', 'hear_35', 'hear_36', 'hear_37', 'hear_38', 'hear_39', + MULTI_CHAR('hear_20'), MULTI_CHAR('hear_21'), MULTI_CHAR('hear_22'), MULTI_CHAR('hear_23'), MULTI_CHAR('hear_24'), MULTI_CHAR('hear_25'), MULTI_CHAR('hear_26'), + MULTI_CHAR('hear_27'), MULTI_CHAR('hear_28'), MULTI_CHAR('hear_29'), MULTI_CHAR('hear_30'), MULTI_CHAR('hear_31'), MULTI_CHAR('hear_32'), MULTI_CHAR('hear_33'), + MULTI_CHAR('hear_34'), MULTI_CHAR('hear_35'), MULTI_CHAR('hear_36'), MULTI_CHAR('hear_37'), MULTI_CHAR('hear_38'), MULTI_CHAR('hear_39'), }; static const char* amariheartTex[] = { @@ -215,7 +215,7 @@ void dDlst_FileInfo_c::draw() { MTXScale(m, mBasePane->getWidth() / field_0x10->getWidth(), mBasePane->getHeight() / field_0x10->getHeight(), 1.0f); MTXConcat(glb_mtx, m, glb_mtx); - Scr->search('Nm_02')->setMtx(glb_mtx); + Scr->search(MULTI_CHAR('Nm_02'))->setMtx(glb_mtx); } Scr->draw(0.0f, 0.0f, graf_ctx); diff --git a/src/d/d_file_sel_warning.cpp b/src/d/d_file_sel_warning.cpp index 3063012ea0..4fbce3920b 100644 --- a/src/d/d_file_sel_warning.cpp +++ b/src/d/d_file_sel_warning.cpp @@ -59,20 +59,20 @@ void dFile_warning_c::screenSet() { mFileWarn.Scr->animation(); mFileWarn.mFont = mDoExt_getMesgFont(); - mpRootPane = new CPaneMgr(mFileWarn.Scr, 'Nm_02', 0, NULL); + mpRootPane = new CPaneMgr(mFileWarn.Scr, MULTI_CHAR('Nm_02'), 0, NULL); JUT_ASSERT(0, mpRootPane != NULL); field_0x34 = mpRootPane->getTranslateY(); #if REGION_JPN - mFileWarn.Scr->search('ms_for_2')->hide(); - mFileWarn.Scr->search('ms_for_3')->hide(); + mFileWarn.Scr->search(MULTI_CHAR('ms_for_2'))->hide(); + mFileWarn.Scr->search(MULTI_CHAR('ms_for_3'))->hide(); - field_0x20 = static_cast(mFileWarn.Scr->search('w_msg_jp')); + field_0x20 = static_cast(mFileWarn.Scr->search(MULTI_CHAR('w_msg_jp'))); #else - mFileWarn.Scr->search('w_msg_jp')->hide(); - mFileWarn.Scr->search('ms_for_2')->hide(); + mFileWarn.Scr->search(MULTI_CHAR('w_msg_jp'))->hide(); + mFileWarn.Scr->search(MULTI_CHAR('ms_for_2'))->hide(); - field_0x20 = static_cast(mFileWarn.Scr->search('ms_for_3')); + field_0x20 = static_cast(mFileWarn.Scr->search(MULTI_CHAR('ms_for_3'))); #endif field_0x20->show(); field_0x20->setFont(mFileWarn.mFont); diff --git a/src/d/d_file_select.cpp b/src/d/d_file_select.cpp index efd4dff429..93a60c3661 100644 --- a/src/d/d_file_select.cpp +++ b/src/d/d_file_select.cpp @@ -58,7 +58,7 @@ static s32 MenuSelEndFrameTbl[3] = { 898, }; -static u64 l_tagName13[3] = {'w_dat_i0', 'w_dat_i1', 'w_dat_i2'}; +static u64 l_tagName13[3] = {MULTI_CHAR('w_dat_i0'), MULTI_CHAR('w_dat_i1'), MULTI_CHAR('w_dat_i2')}; dFs_HIO_c::dFs_HIO_c() { base_effect_appear_frames = 5; @@ -806,15 +806,15 @@ void dFile_select_c::dataSelectStart() { yesnoMenuMoveAnmInitSet(0x473, 0x47d); selectWakuAlpahAnmInit(mSelectNum, 0xff, 0, g_fsHIO.select_box_appear_frames); - mSelDt.ScrDt->search('ken_00')->hide(); - mSelDt.ScrDt->search('ken_01')->hide(); - mSelDt.ScrDt->search('ken_02')->hide(); - mSelDt.ScrDt->search('tate_00')->hide(); - mSelDt.ScrDt->search('tate_01')->hide(); - mSelDt.ScrDt->search('tate_02')->hide(); - mSelDt.ScrDt->search('fuku_00')->hide(); - mSelDt.ScrDt->search('fuku_01')->hide(); - mSelDt.ScrDt->search('fuku_02')->hide(); + mSelDt.ScrDt->search(MULTI_CHAR('ken_00'))->hide(); + mSelDt.ScrDt->search(MULTI_CHAR('ken_01'))->hide(); + mSelDt.ScrDt->search(MULTI_CHAR('ken_02'))->hide(); + mSelDt.ScrDt->search(MULTI_CHAR('tate_00'))->hide(); + mSelDt.ScrDt->search(MULTI_CHAR('tate_01'))->hide(); + mSelDt.ScrDt->search(MULTI_CHAR('tate_02'))->hide(); + mSelDt.ScrDt->search(MULTI_CHAR('fuku_00'))->hide(); + mSelDt.ScrDt->search(MULTI_CHAR('fuku_01'))->hide(); + mSelDt.ScrDt->search(MULTI_CHAR('fuku_02'))->hide(); mpFileSelect3d->drawOff(); mDataSelProc = DATASELPROC_SELECT_DATA_OPENERASE_MOVE; @@ -1001,8 +1001,8 @@ void dFile_select_c::dataSelectMoveAnime() { void dFile_select_c::makeRecInfo(u8 i_dataNo) { dSv_save_c* pSave = (dSv_save_c*)&mSaveData[i_dataNo]; - J2DPane* ken0 = mSelDt.ScrDt->search('ken_00'); - J2DPane* ken1 = mSelDt.ScrDt->search('ken_01'); + J2DPane* ken0 = mSelDt.ScrDt->search(MULTI_CHAR('ken_00')); + J2DPane* ken1 = mSelDt.ScrDt->search(MULTI_CHAR('ken_01')); ken0->hide(); ken1->hide(); @@ -1016,7 +1016,7 @@ void dFile_select_c::makeRecInfo(u8 i_dataNo) { ken1->hide(); } - J2DPane* ken2 = mSelDt.ScrDt->search('ken_02'); + J2DPane* ken2 = mSelDt.ScrDt->search(MULTI_CHAR('ken_02')); if (pSave->getPlayer().getGetItem().isFirstBit(fpcNm_ITEM_MASTER_SWORD) || pSave->getPlayer().getGetItem().isFirstBit(fpcNm_ITEM_LIGHT_SWORD)) { @@ -1025,8 +1025,8 @@ void dFile_select_c::makeRecInfo(u8 i_dataNo) { ken2->hide(); } - J2DPane* tate0 = mSelDt.ScrDt->search('tate_00'); - J2DPane* tate1 = mSelDt.ScrDt->search('tate_01'); + J2DPane* tate0 = mSelDt.ScrDt->search(MULTI_CHAR('tate_00')); + J2DPane* tate1 = mSelDt.ScrDt->search(MULTI_CHAR('tate_01')); tate0->hide(); tate1->hide(); @@ -1038,28 +1038,28 @@ void dFile_select_c::makeRecInfo(u8 i_dataNo) { tate1->show(); } - J2DPane* tate2 = mSelDt.ScrDt->search('tate_02'); + J2DPane* tate2 = mSelDt.ScrDt->search(MULTI_CHAR('tate_02')); if (pSave->getPlayer().getGetItem().isFirstBit(fpcNm_ITEM_HYLIA_SHIELD)) { tate2->show(); } else { tate2->hide(); } - J2DPane* fuku0 = mSelDt.ScrDt->search('fuku_00'); + J2DPane* fuku0 = mSelDt.ScrDt->search(MULTI_CHAR('fuku_00')); if (pSave->getPlayer().getGetItem().isFirstBit(fpcNm_ITEM_WEAR_KOKIRI)) { fuku0->show(); } else { fuku0->hide(); } - J2DPane* fuku1 = mSelDt.ScrDt->search('fuku_01'); + J2DPane* fuku1 = mSelDt.ScrDt->search(MULTI_CHAR('fuku_01')); if (pSave->getPlayer().getGetItem().isFirstBit(fpcNm_ITEM_WEAR_ZORA)) { fuku1->show(); } else { fuku1->hide(); } - J2DPane* fuku2 = mSelDt.ScrDt->search('fuku_02'); + J2DPane* fuku2 = mSelDt.ScrDt->search(MULTI_CHAR('fuku_02')); if (pSave->getPlayer().getGetItem().isFirstBit(fpcNm_ITEM_ARMOR)) { fuku2->show(); } else { @@ -1658,7 +1658,7 @@ void dFile_select_c::copySelMoveAnmInitSet(int param_0, int param_1) { } void dFile_select_c::setSaveDataForCopySel() { - static u64 l_tagName101[2] = {'w_nun01', 'w_nun02'}; + static u64 l_tagName101[2] = {MULTI_CHAR('w_nun01'), MULTI_CHAR('w_nun02')}; static char* l_numTex[3] = {"tt_1_metal_40x40.bti", "tt_2_metal_40x40.bti", "tt_3_metal_40x40.bti"}; SaveDataBuf* pSave = mSaveData; @@ -2900,31 +2900,31 @@ void dFile_select_c::cardToNandDataCopyErrDisp3() { #endif void dFile_select_c::screenSet() { - static u64 l_tagName0[3] = {'w_sel_00', 'w_sel_01', 'w_sel_02'}; - static u64 l_tagName3[3] = {'w_moyo00', 'w_moyo01', 'w_moyo02'}; - static u64 l_tagName4[3] = {'w_gold00', 'w_gold01', 'w_gold02'}; - static u64 l_tagName5[3] = {'w_go2_00', 'w_go2_01', 'w_go2_02'}; - static u64 l_tagName12[3] = {'w_bk_l00', 'w_bk_l01', 'w_bk_l02'}; - static u64 l_nouseTag[15] = {'w_mcheck', 'w_tabi1', 'w_tabi2', 'w_tabi3', 'w_doko_c', - 'w_uwa_c', 'w_cp_chu', 'w_cpsita', 'w_cp_x', 'w_de', - 'w_de_chu', 'w_desita', 'w_de_x', 'w_name', 'w_h_name'}; + static u64 l_tagName0[3] = {MULTI_CHAR('w_sel_00'), MULTI_CHAR('w_sel_01'), MULTI_CHAR('w_sel_02')}; + static u64 l_tagName3[3] = {MULTI_CHAR('w_moyo00'), MULTI_CHAR('w_moyo01'), MULTI_CHAR('w_moyo02')}; + static u64 l_tagName4[3] = {MULTI_CHAR('w_gold00'), MULTI_CHAR('w_gold01'), MULTI_CHAR('w_gold02')}; + static u64 l_tagName5[3] = {MULTI_CHAR('w_go2_00'), MULTI_CHAR('w_go2_01'), MULTI_CHAR('w_go2_02')}; + static u64 l_tagName12[3] = {MULTI_CHAR('w_bk_l00'), MULTI_CHAR('w_bk_l01'), MULTI_CHAR('w_bk_l02')}; + static u64 l_nouseTag[15] = {MULTI_CHAR('w_mcheck'), MULTI_CHAR('w_tabi1'), MULTI_CHAR('w_tabi2'), MULTI_CHAR('w_tabi3'), MULTI_CHAR('w_doko_c'), + MULTI_CHAR('w_uwa_c'), MULTI_CHAR('w_cp_chu'), MULTI_CHAR('w_cpsita'), MULTI_CHAR('w_cp_x'), 'w_de', + MULTI_CHAR('w_de_chu'), MULTI_CHAR('w_desita'), MULTI_CHAR('w_de_x'), MULTI_CHAR('w_name'), MULTI_CHAR('w_h_name')}; #if (VERSION == VERSION_GCN_JPN) || (VERSION == VERSION_WII_JPN) - static u64 l_tagName21[2] = {'w_tabi_s', 'w_tabi_x'}; + static u64 l_tagName21[2] = {MULTI_CHAR('w_tabi_s'), MULTI_CHAR('w_tabi_x')}; #else - static u64 l_tagName21[2] = {'t_for', 't_for1'}; + static u64 l_tagName21[2] = {MULTI_CHAR('t_for'), MULTI_CHAR('t_for1')}; #endif - static u64 l_tagName18[3] = {'w_de_ef0', 'w_de_ef1', 'w_de_ef2'}; - static u64 l_tagName19[3] = {'w_cp_ef0', 'w_cp_ef1', 'w_cp_ef2'}; + static u64 l_tagName18[3] = {MULTI_CHAR('w_de_ef0'), MULTI_CHAR('w_de_ef1'), MULTI_CHAR('w_de_ef2')}; + static u64 l_tagName19[3] = {MULTI_CHAR('w_cp_ef0'), MULTI_CHAR('w_cp_ef1'), MULTI_CHAR('w_cp_ef2')}; #if (VERSION == VERSION_GCN_JPN) || (VERSION == VERSION_WII_JPN) - static u64 l_tagName20[2] = {'w_er_msg', 'w_er_msR'}; + static u64 l_tagName20[2] = {MULTI_CHAR('w_er_msg'), MULTI_CHAR('w_er_msR')}; #else - static u64 l_tagName20[2] = {'er_for0', 'er_for1'}; + static u64 l_tagName20[2] = {MULTI_CHAR('er_for0'), MULTI_CHAR('er_for1')}; #endif - static u64 l_tagName131[3] = {'N_sel_00', 'N_sel_01', 'N_sel_02'}; + static u64 l_tagName131[3] = {MULTI_CHAR('N_sel_00'), MULTI_CHAR('N_sel_01'), MULTI_CHAR('N_sel_02')}; fileSel.Scr = new J2DScreen(); JUT_ASSERT(4917, fileSel.Scr != NULL); @@ -2943,27 +2943,27 @@ void dFile_select_c::screenSet() { field_0x0090->searchUpdateMaterialID(fileSel.Scr); field_0x009c->searchUpdateMaterialID(fileSel.Scr); - mBaseMovePane = new CPaneMgr(fileSel.Scr, 'w_move_n', 0, NULL); - mBaseSubPane = fileSel.Scr->search('w_sub_n'); + mBaseMovePane = new CPaneMgr(fileSel.Scr, MULTI_CHAR('w_move_n'), 0, NULL); + mBaseSubPane = fileSel.Scr->search(MULTI_CHAR('w_sub_n')); for (int i = 0; i < 3; i++) { mSelFilePanes[i] = new CPaneMgr(fileSel.Scr, l_tagName0[i], 1, NULL); } - fileSel.Scr->search('Wi_btn_n')->hide(); - mBbtnPane = new CPaneMgrAlpha(fileSel.Scr, 'w_n_bbtn', 2, NULL); - mAbtnPane = new CPaneMgrAlpha(fileSel.Scr, 'w_n_abtn', 2, NULL); + fileSel.Scr->search(MULTI_CHAR('Wi_btn_n'))->hide(); + mBbtnPane = new CPaneMgrAlpha(fileSel.Scr, MULTI_CHAR('w_n_bbtn'), 2, NULL); + mAbtnPane = new CPaneMgrAlpha(fileSel.Scr, MULTI_CHAR('w_n_abtn'), 2, NULL); #if (VERSION == VERSION_GCN_JPN) || (VERSION == VERSION_WII_JPN) - mModoruTxtPane = new CPaneMgrAlpha(fileSel.Scr, 'w_modo', 2, NULL); - mKetteiTxtPane = new CPaneMgrAlpha(fileSel.Scr, 'w_kete', 2, NULL); - fileSel.Scr->search('f_modo')->hide(); - fileSel.Scr->search('f_kete')->hide(); + mModoruTxtPane = new CPaneMgrAlpha(fileSel.Scr, MULTI_CHAR('w_modo'), 2, NULL); + mKetteiTxtPane = new CPaneMgrAlpha(fileSel.Scr, MULTI_CHAR('w_kete'), 2, NULL); + fileSel.Scr->search(MULTI_CHAR('f_modo'))->hide(); + fileSel.Scr->search(MULTI_CHAR('f_kete'))->hide(); #else - mModoruTxtPane = new CPaneMgrAlpha(fileSel.Scr, 'f_modo', 2, NULL); - mKetteiTxtPane = new CPaneMgrAlpha(fileSel.Scr, 'f_kete', 2, NULL); - fileSel.Scr->search('w_modo')->hide(); - fileSel.Scr->search('w_kete')->hide(); + mModoruTxtPane = new CPaneMgrAlpha(fileSel.Scr, MULTI_CHAR('f_modo'), 2, NULL); + mKetteiTxtPane = new CPaneMgrAlpha(fileSel.Scr, MULTI_CHAR('f_kete'), 2, NULL); + fileSel.Scr->search(MULTI_CHAR('w_modo'))->hide(); + fileSel.Scr->search(MULTI_CHAR('w_kete'))->hide(); #endif ((J2DTextBox*)mModoruTxtPane->getPanePtr())->setFont(fileSel.font[0]); @@ -3031,13 +3031,13 @@ void dFile_select_c::screenSet() { } #if (VERSION == VERSION_GCN_JPN) || (VERSION == VERSION_WII_JPN) - fileSel.Scr->search('t_for')->hide(); - fileSel.Scr->search('t_for1')->hide(); + fileSel.Scr->search(MULTI_CHAR('t_for'))->hide(); + fileSel.Scr->search(MULTI_CHAR('t_for1'))->hide(); #else - fileSel.Scr->search('w_tabi_s')->hide(); - fileSel.Scr->search('w_tabi_x')->hide(); - fileSel.Scr->search('w_mgn1')->hide(); - fileSel.Scr->search('w_mgn2')->hide(); + fileSel.Scr->search(MULTI_CHAR('w_tabi_s'))->hide(); + fileSel.Scr->search(MULTI_CHAR('w_tabi_x'))->hide(); + fileSel.Scr->search(MULTI_CHAR('w_mgn1'))->hide(); + fileSel.Scr->search(MULTI_CHAR('w_mgn2'))->hide(); #endif for (int i = 0; i < 2; i++) { @@ -3084,17 +3084,17 @@ void dFile_select_c::screenSet() { field_0x0208 = 0; field_0x0209 = 0; - mErrorMsgPane = fileSel.Scr->search('w_er_n'); + mErrorMsgPane = fileSel.Scr->search(MULTI_CHAR('w_er_n')); #if (VERSION == VERSION_GCN_JPN) || (VERSION == VERSION_WII_JPN) - fileSel.Scr->search('er_for0')->hide(); - fileSel.Scr->search('er_for1')->hide(); + fileSel.Scr->search(MULTI_CHAR('er_for0'))->hide(); + fileSel.Scr->search(MULTI_CHAR('er_for1'))->hide(); #else - fileSel.Scr->search('w_er_msg')->hide(); - fileSel.Scr->search('w_er_msR')->hide(); + fileSel.Scr->search(MULTI_CHAR('w_er_msg'))->hide(); + fileSel.Scr->search(MULTI_CHAR('w_er_msR'))->hide(); #endif - fileSel.Scr->search('w_er_msE')->hide(); + fileSel.Scr->search(MULTI_CHAR('w_er_msE'))->hide(); for (int i = 0; i < 2; i++) { mErrorMsgTxtPane[i] = new CPaneMgrAlpha(fileSel.Scr, l_tagName20[i], 0, NULL); @@ -3131,7 +3131,7 @@ void dFile_select_c::screenSet() { mSelIcon->setPos(vtxCenter.x, vtxCenter.y, mSelFilePanes[mSelectNum]->getPanePtr(), true); mSelIcon->setAlphaRate(0.0f); - J2DPane* basePane = fileSel.Scr->search('Nm_02'); + J2DPane* basePane = fileSel.Scr->search(MULTI_CHAR('Nm_02')); basePane->setAnimation(mBaseMoveAnm); setWakuAnm(); @@ -3160,11 +3160,11 @@ void dFile_select_c::screenSet() { mFileInfoNoDatBasePane[i] = mFileInfo[i]->getNoDatBase(); } - mNameBasePane = fileSel.Scr->search('name_n'); + mNameBasePane = fileSel.Scr->search(MULTI_CHAR('name_n')); mpName = new dName_c(mNameBasePane); field_0x0128 = false; mpFileWarning = new dFile_warning_c(mpArchive, 0); - mSelDt.mpPane = fileSel.Scr->search('w_moyo03'); + mSelDt.mpPane = fileSel.Scr->search(MULTI_CHAR('w_moyo03')); #if PLATFORM_GCN JUtility::TColor black = mDoGph_gInf_c::getFadeColor(); @@ -3173,7 +3173,7 @@ void dFile_select_c::screenSet() { white.a = 0xff; ResTIMG* timg = (ResTIMG*)dComIfGp_getMain2DArchive()->getResource('TIMG', "tt_block8x8.bti"); - mpFadePict = new J2DPicture('PICT01', JGeometry::TBox2(0.0f, FB_WIDTH, 0.0f, FB_HEIGHT), + mpFadePict = new J2DPicture(MULTI_CHAR('PICT01'), JGeometry::TBox2(0.0f, FB_WIDTH, 0.0f, FB_HEIGHT), timg, NULL); mpFadePict->setBlackWhite(black, white); mpFadePict->setAlpha(0); @@ -3181,20 +3181,20 @@ void dFile_select_c::screenSet() { } void dFile_select_c::screenSetCopySel() { - static u64 l_tagName000[2] = {'w_sel_01', 'w_sel_02'}; - static u64 l_tagName001[2] = {'w_moyo01', 'w_moyo02'}; - static u64 l_tagName002[2] = {'w_gold01', 'w_gold02'}; - static u64 l_tagName003[2] = {'w_go2_01', 'w_go2_02'}; - static u64 l_tagName004[2] = {'w_bk_l01', 'w_bk_l02'}; - static u64 l_tagName005[2] = {'w_cp_ef1', 'w_cp_ef2'}; + static u64 l_tagName000[2] = {MULTI_CHAR('w_sel_01'), MULTI_CHAR('w_sel_02')}; + static u64 l_tagName001[2] = {MULTI_CHAR('w_moyo01'), MULTI_CHAR('w_moyo02')}; + static u64 l_tagName002[2] = {MULTI_CHAR('w_gold01'), MULTI_CHAR('w_gold02')}; + static u64 l_tagName003[2] = {MULTI_CHAR('w_go2_01'), MULTI_CHAR('w_go2_02')}; + static u64 l_tagName004[2] = {MULTI_CHAR('w_bk_l01'), MULTI_CHAR('w_bk_l02')}; + static u64 l_tagName005[2] = {MULTI_CHAR('w_cp_ef1'), MULTI_CHAR('w_cp_ef2')}; mCpSel.Scr = new J2DScreen(); JUT_ASSERT(5286, mCpSel.Scr != NULL); mCpSel.Scr->setPriority("zelda_file_select_copy_select.blo", 0x1100000, mpArchive); dPaneClass_showNullPane(mCpSel.Scr); - mCpSel.mpPane2 = mCpSel.Scr->search('name_n'); - mCpSel.mpPane1 = fileSel.Scr->search('name_n'); + mCpSel.mpPane2 = mCpSel.Scr->search(MULTI_CHAR('name_n')); + mCpSel.mpPane1 = fileSel.Scr->search(MULTI_CHAR('name_n')); void* bck = JKRGetNameResource("zelda_file_select_copy_select.bck", mpArchive); mCpSelBck = (J2DAnmTransform*)J2DAnmLoaderDataBase::load(bck); @@ -3248,7 +3248,7 @@ void dFile_select_c::screenSetCopySel() { mCpSel.Scr->search(l_tagName005[i])->hide(); } - J2DPane* namePane = mCpSel.Scr->search('name_n'); + J2DPane* namePane = mCpSel.Scr->search(MULTI_CHAR('name_n')); namePane->setAnimation(mCpSelBck); mCpSelBck->setFrame(0.0f); namePane->animationTransform(); @@ -3270,15 +3270,15 @@ void dFile_select_c::screenSetCopySel() { } void dFile_select_c::screenSetYesNo() { - static u64 l_tagName012[2] = {'w_no_n', 'w_yes_n'}; - static u64 l_tagName013[2] = {'w_no_t', 'w_yes_t'}; - static u64 l_tagName013U[2] = {'f_no_t', 'f_yes_t'}; - static u64 l_tagName9[2] = {'w_no_m', 'w_yes_m'}; + static u64 l_tagName012[2] = {MULTI_CHAR('w_no_n'), MULTI_CHAR('w_yes_n')}; + static u64 l_tagName013[2] = {MULTI_CHAR('w_no_t'), MULTI_CHAR('w_yes_t')}; + static u64 l_tagName013U[2] = {MULTI_CHAR('f_no_t'), MULTI_CHAR('f_yes_t')}; + static u64 l_tagName9[2] = {MULTI_CHAR('w_no_m'), MULTI_CHAR('w_yes_m')}; static u64 l_tagName10[2] = { - 'w_no_g', - 'w_yes_g', + MULTI_CHAR('w_no_g'), + MULTI_CHAR('w_yes_g'), }; - static u64 l_tagName11[2] = {'w_no_gr', 'w_yes_gr'}; + static u64 l_tagName11[2] = {MULTI_CHAR('w_no_gr'), MULTI_CHAR('w_yes_gr')}; static u8 l_msgNum2[2] = {0x08, 0x07}; mYnSel.ScrYn = new J2DScreen(); @@ -3336,12 +3336,12 @@ void dFile_select_c::screenSetYesNo() { } void dFile_select_c::screenSet3Menu() { - static u64 l_tagName6[3] = {'w_sat_mo', 'w_del_mo', 'w_cop_mo'}; - static u64 l_tagName7[3] = {'w_sat_g', 'w_del_g', 'w_cop_g'}; - static u64 l_tagName8[3] = {'w_sat_gr', 'w_del_gr', 'w_cop_gr'}; - static u64 l_tagName1[3] = {'w_sta_n', 'w_del_n', 'w_cop_n'}; - static u64 l_tagName011[3] = {'w_sta', 'w_del', 'w_cop_t'}; - static u64 l_tagName011U[3] = {'f_sta', 'f_del', 'f_cop_t'}; + static u64 l_tagName6[3] = {MULTI_CHAR('w_sat_mo'), MULTI_CHAR('w_del_mo'), MULTI_CHAR('w_cop_mo')}; + static u64 l_tagName7[3] = {MULTI_CHAR('w_sat_g'), MULTI_CHAR('w_del_g'), MULTI_CHAR('w_cop_g')}; + static u64 l_tagName8[3] = {MULTI_CHAR('w_sat_gr'), MULTI_CHAR('w_del_gr'), MULTI_CHAR('w_cop_gr')}; + static u64 l_tagName1[3] = {MULTI_CHAR('w_sta_n'), MULTI_CHAR('w_del_n'), MULTI_CHAR('w_cop_n')}; + static u64 l_tagName011[3] = {MULTI_CHAR('w_sta'), MULTI_CHAR('w_del'), MULTI_CHAR('w_cop_t')}; + static u64 l_tagName011U[3] = {MULTI_CHAR('f_sta'), MULTI_CHAR('f_del'), MULTI_CHAR('f_cop_t')}; static u8 l_msgNum[3] = {0x57, 0x58, 0x56}; m3mSel.Scr3m = new J2DScreen(); @@ -3367,7 +3367,7 @@ void dFile_select_c::screenSet3Menu() { m3mBtk->searchUpdateMaterialID(m3mSel.Scr3m); m3mBtkFrame = 0; - m3mMenuPane = m3mSel.Scr3m->search('wmenu_n'); + m3mMenuPane = m3mSel.Scr3m->search(MULTI_CHAR('wmenu_n')); m3mMenuPane->setAnimation(m3mBck); m3mBck->setFrame(799.0f); m3mMenuPane->animationTransform(); @@ -3411,13 +3411,13 @@ void dFile_select_c::screenSetDetail() { mSelDt.ScrDt->setAnimation(mSelDtBtk); mSelDtBtkFrame = 0; - mSelDt.mpPane2 = mSelDt.ScrDt->search('n_all'); - mSelDtPane_mset = new CPaneMgr(mSelDt.ScrDt, 'mset_p_n', 0, NULL); + mSelDt.mpPane2 = mSelDt.ScrDt->search(MULTI_CHAR('n_all')); + mSelDtPane_mset = new CPaneMgr(mSelDt.ScrDt, MULTI_CHAR('mset_p_n'), 0, NULL); mpFileSelect3d->setBasePane(mSelDtPane_mset); - mpFileSelect3d->setBase2Pane(fileSel.Scr->search('w_sub_n')); + mpFileSelect3d->setBase2Pane(fileSel.Scr->search(MULTI_CHAR('w_sub_n'))); - mSelDt.ScrDt->search('d_win_n')->setUserInfo('n_43'); + mSelDt.ScrDt->search(MULTI_CHAR('d_win_n'))->setUserInfo('n_43'); } void dFile_select_c::setWakuAnm() { diff --git a/src/d/d_gameover.cpp b/src/d/d_gameover.cpp index 4bf16c7e42..b5b6485be2 100644 --- a/src/d/d_gameover.cpp +++ b/src/d/d_gameover.cpp @@ -368,14 +368,14 @@ dDlst_GameOverScrnDraw_c::dDlst_GameOverScrnDraw_c(JKRArchive* i_archive) { mFadeColor.set(0, 0, 0, 0); if (dMeter2Info_getGameOverType() != 0) { - mpScreen->search('n_base')->hide(); + mpScreen->search(MULTI_CHAR('n_base'))->hide(); if (mDoGph_gInf_c::getFadeRate() == 1.0f) { mFadeColor = mDoGph_gInf_c::getFadeColor(); } } - mpScreen->search('base_b')->hide(); + mpScreen->search(MULTI_CHAR('base_b'))->hide(); JUtility::TColor img_white(mFadeColor); JUtility::TColor img_black(mFadeColor); @@ -384,10 +384,10 @@ dDlst_GameOverScrnDraw_c::dDlst_GameOverScrnDraw_c(JKRArchive* i_archive) { ResTIMG* img = (ResTIMG*)dComIfGp_getMain2DArchive()->getResource('TIMG', "tt_block8x8.bti"); mpBackImg = - new J2DPicture('PICT01', JGeometry::TBox2(0.0f, 486.0f, 0.0f, 660.0f), img, NULL); + new J2DPicture(MULTI_CHAR('PICT01'), JGeometry::TBox2(0.0f, 486.0f, 0.0f, 660.0f), img, NULL); mpBackImg->setBlackWhite(img_white, img_black); - J2DTextBox* gold_tbox = (J2DTextBox*)mpScreen->search('gold_00'); + J2DTextBox* gold_tbox = (J2DTextBox*)mpScreen->search(MULTI_CHAR('gold_00')); gold_tbox->setFont(mDoExt_getSubFont()); char string[64]; diff --git a/src/d/d_kantera_icon_meter.cpp b/src/d/d_kantera_icon_meter.cpp index 431c4c0d30..fa31a962ea 100644 --- a/src/d/d_kantera_icon_meter.cpp +++ b/src/d/d_kantera_icon_meter.cpp @@ -31,9 +31,9 @@ void dKantera_icon_c::initiate() { dPaneClass_showNullPane(scrn); mpKanteraIcon->setScreen(scrn); - mpParent = new CPaneMgr(scrn, 'kan_m_n', 2, NULL); + mpParent = new CPaneMgr(scrn, MULTI_CHAR('kan_m_n'), 2, NULL); - mpGauge = new CPaneMgr(scrn, 'yellow_m', 0, NULL); + mpGauge = new CPaneMgr(scrn, MULTI_CHAR('yellow_m'), 0, NULL); } void dKantera_icon_c::setAlphaRate(f32 alphaRate) { diff --git a/src/d/d_menu_collect.cpp b/src/d/d_menu_collect.cpp index 400a00544f..636b797801 100644 --- a/src/d/d_menu_collect.cpp +++ b/src/d/d_menu_collect.cpp @@ -254,25 +254,25 @@ static u8 const lit_3778[12] = { }; void dMenu_Collect2D_c::screenSet() { - static const u64 text_sv[3] = {'sav_0', 'sav_1', 'sav_2'}; - static const u64 text_op[3] = {'opt_0', 'opt_1', 'opt_2',}; - static const u64 ftext_sv[3] = {'f_sav_0', 'f_sav_1', 'f_sav_2'}; - static const u64 ftext_op[3] = {'f_opt_0', 'f_opt_1', 'f_opt_2'}; - static const u64 text_a_tag[5] = {'atext1_1', 'atext1_2', 'atext1_3', 'atext1_4', 'atext1_5'}; - static const u64 text_b_tag[5] = {'btext1_1', 'btext1_2', 'btext1_3', 'btext1_4', 'btext1_5'}; + static const u64 text_sv[3] = {MULTI_CHAR('sav_0'), MULTI_CHAR('sav_1'), MULTI_CHAR('sav_2')}; + static const u64 text_op[3] = {MULTI_CHAR('opt_0'), MULTI_CHAR('opt_1'), MULTI_CHAR('opt_2'),}; + static const u64 ftext_sv[3] = {MULTI_CHAR('f_sav_0'), MULTI_CHAR('f_sav_1'), MULTI_CHAR('f_sav_2')}; + static const u64 ftext_op[3] = {MULTI_CHAR('f_opt_0'), MULTI_CHAR('f_opt_1'), MULTI_CHAR('f_opt_2')}; + static const u64 text_a_tag[5] = {MULTI_CHAR('atext1_1'), MULTI_CHAR('atext1_2'), MULTI_CHAR('atext1_3'), MULTI_CHAR('atext1_4'), MULTI_CHAR('atext1_5')}; + static const u64 text_b_tag[5] = {MULTI_CHAR('btext1_1'), MULTI_CHAR('btext1_2'), MULTI_CHAR('btext1_3'), MULTI_CHAR('btext1_4'), MULTI_CHAR('btext1_5')}; #if REGION_JPN - static_cast(mpScreen->search('t_t00'))->setFont(mDoExt_getRubyFont()); - static_cast(mpScreen->search('t_t00'))->setString(0x20, ""); + static_cast(mpScreen->search(MULTI_CHAR('t_t00')))->setFont(mDoExt_getRubyFont()); + static_cast(mpScreen->search(MULTI_CHAR('t_t00')))->setString(0x20, ""); dMeter2Info_getStringKanji( - 0x3E1, static_cast(mpScreen->search('t_t00'))->getStringPtr(), NULL); - mpScreen->search('f_t00')->hide(); + 0x3E1, static_cast(mpScreen->search(MULTI_CHAR('t_t00')))->getStringPtr(), NULL); + mpScreen->search(MULTI_CHAR('f_t00'))->hide(); #else - static_cast(mpScreen->search('f_t00'))->setFont(mDoExt_getRubyFont()); - static_cast(mpScreen->search('f_t00'))->setString(0x20, ""); + static_cast(mpScreen->search(MULTI_CHAR('f_t00')))->setFont(mDoExt_getRubyFont()); + static_cast(mpScreen->search(MULTI_CHAR('f_t00')))->setString(0x20, ""); dMeter2Info_getStringKanji( - 0x3E1, static_cast(mpScreen->search('f_t00'))->getStringPtr(), NULL); - mpScreen->search('t_t00')->hide(); + 0x3E1, static_cast(mpScreen->search(MULTI_CHAR('f_t00')))->getStringPtr(), NULL); + mpScreen->search(MULTI_CHAR('t_t00'))->hide(); #endif for (int i = 0; i < 3; i++) { @@ -311,45 +311,45 @@ void dMenu_Collect2D_c::screenSet() { } #if REGION_JPN - static_cast(mpScreen->search('item_n00'))->setFont(mDoExt_getMesgFont()); - static_cast(mpScreen->search('item_n01'))->setFont(mDoExt_getMesgFont()); - static_cast(mpScreen->search('item_n02'))->setFont(mDoExt_getMesgFont()); - static_cast(mpScreen->search('item_n03'))->setFont(mDoExt_getMesgFont()); - static_cast(mpScreen->search('item_n00'))->setString(0x20, ""); - static_cast(mpScreen->search('item_n01'))->setString(0x20, ""); - static_cast(mpScreen->search('item_n02'))->setString(0x20, ""); - static_cast(mpScreen->search('item_n03'))->setString(0x20, ""); - static_cast(mpScreen->search('i_text1'))->setFont(mDoExt_getMesgFont()); - static_cast(mpScreen->search('i_text0'))->setFont(mDoExt_getMesgFont()); - static_cast(mpScreen->search('i_text1'))->setString(0x100, ""); - static_cast(mpScreen->search('i_text0'))->setString(0x100, ""); + static_cast(mpScreen->search(MULTI_CHAR('item_n00')))->setFont(mDoExt_getMesgFont()); + static_cast(mpScreen->search(MULTI_CHAR('item_n01')))->setFont(mDoExt_getMesgFont()); + static_cast(mpScreen->search(MULTI_CHAR('item_n02')))->setFont(mDoExt_getMesgFont()); + static_cast(mpScreen->search(MULTI_CHAR('item_n03')))->setFont(mDoExt_getMesgFont()); + static_cast(mpScreen->search(MULTI_CHAR('item_n00')))->setString(0x20, ""); + static_cast(mpScreen->search(MULTI_CHAR('item_n01')))->setString(0x20, ""); + static_cast(mpScreen->search(MULTI_CHAR('item_n02')))->setString(0x20, ""); + static_cast(mpScreen->search(MULTI_CHAR('item_n03')))->setString(0x20, ""); + static_cast(mpScreen->search(MULTI_CHAR('i_text1')))->setFont(mDoExt_getMesgFont()); + static_cast(mpScreen->search(MULTI_CHAR('i_text0')))->setFont(mDoExt_getMesgFont()); + static_cast(mpScreen->search(MULTI_CHAR('i_text1')))->setString(0x100, ""); + static_cast(mpScreen->search(MULTI_CHAR('i_text0')))->setString(0x100, ""); - mpScreen->search('item_n04')->hide(); - mpScreen->search('item_n05')->hide(); - mpScreen->search('item_n06')->hide(); - mpScreen->search('item_n07')->hide(); - mpScreen->search('f_text1')->hide(); - mpScreen->search('f_text0')->hide(); + mpScreen->search(MULTI_CHAR('item_n04'))->hide(); + mpScreen->search(MULTI_CHAR('item_n05'))->hide(); + mpScreen->search(MULTI_CHAR('item_n06'))->hide(); + mpScreen->search(MULTI_CHAR('item_n07'))->hide(); + mpScreen->search(MULTI_CHAR('f_text1'))->hide(); + mpScreen->search(MULTI_CHAR('f_text0'))->hide(); #else - static_cast(mpScreen->search('item_n04'))->setFont(mDoExt_getMesgFont()); - static_cast(mpScreen->search('item_n05'))->setFont(mDoExt_getMesgFont()); - static_cast(mpScreen->search('item_n06'))->setFont(mDoExt_getMesgFont()); - static_cast(mpScreen->search('item_n07'))->setFont(mDoExt_getMesgFont()); - static_cast(mpScreen->search('item_n04'))->setString(0x20, ""); - static_cast(mpScreen->search('item_n05'))->setString(0x20, ""); - static_cast(mpScreen->search('item_n06'))->setString(0x20, ""); - static_cast(mpScreen->search('item_n07'))->setString(0x20, ""); - static_cast(mpScreen->search('f_text1'))->setFont(mDoExt_getMesgFont()); - static_cast(mpScreen->search('f_text0'))->setFont(mDoExt_getMesgFont()); - static_cast(mpScreen->search('f_text1'))->setString(0x100, ""); - static_cast(mpScreen->search('f_text0'))->setString(0x100, ""); + static_cast(mpScreen->search(MULTI_CHAR('item_n04')))->setFont(mDoExt_getMesgFont()); + static_cast(mpScreen->search(MULTI_CHAR('item_n05')))->setFont(mDoExt_getMesgFont()); + static_cast(mpScreen->search(MULTI_CHAR('item_n06')))->setFont(mDoExt_getMesgFont()); + static_cast(mpScreen->search(MULTI_CHAR('item_n07')))->setFont(mDoExt_getMesgFont()); + static_cast(mpScreen->search(MULTI_CHAR('item_n04')))->setString(0x20, ""); + static_cast(mpScreen->search(MULTI_CHAR('item_n05')))->setString(0x20, ""); + static_cast(mpScreen->search(MULTI_CHAR('item_n06')))->setString(0x20, ""); + static_cast(mpScreen->search(MULTI_CHAR('item_n07')))->setString(0x20, ""); + static_cast(mpScreen->search(MULTI_CHAR('f_text1')))->setFont(mDoExt_getMesgFont()); + static_cast(mpScreen->search(MULTI_CHAR('f_text0')))->setFont(mDoExt_getMesgFont()); + static_cast(mpScreen->search(MULTI_CHAR('f_text1')))->setString(0x100, ""); + static_cast(mpScreen->search(MULTI_CHAR('f_text0')))->setString(0x100, ""); - mpScreen->search('item_n00')->hide(); - mpScreen->search('item_n01')->hide(); - mpScreen->search('item_n02')->hide(); - mpScreen->search('item_n03')->hide(); - mpScreen->search('i_text1')->hide(); - mpScreen->search('i_text0')->hide(); + mpScreen->search(MULTI_CHAR('item_n00'))->hide(); + mpScreen->search(MULTI_CHAR('item_n01'))->hide(); + mpScreen->search(MULTI_CHAR('item_n02'))->hide(); + mpScreen->search(MULTI_CHAR('item_n03'))->hide(); + mpScreen->search(MULTI_CHAR('i_text1'))->hide(); + mpScreen->search(MULTI_CHAR('i_text0'))->hide(); #endif field_0x22d[0][0] = 0; @@ -364,13 +364,13 @@ void dMenu_Collect2D_c::screenSet() { if (field_0x22d[3][0] != 0) { if (dComIfGs_isItemFirstBit(0x28)) { - mpScreen->search('ken_00')->hide(); - mpScreen->search('ken_01')->show(); + mpScreen->search(MULTI_CHAR('ken_00'))->hide(); + mpScreen->search(MULTI_CHAR('ken_01'))->show(); } else if (dComIfGs_isItemFirstBit(0x3F) /* dSv_event_flag_c::F_0026 - Ordon Village - gave wooden sword to talo on 3rd day */ && !dComIfGs_isEventBit(0x302)) { - mpScreen->search('ken_00')->show(); - mpScreen->search('ken_01')->hide(); + mpScreen->search(MULTI_CHAR('ken_00'))->show(); + mpScreen->search(MULTI_CHAR('ken_01'))->hide(); } } @@ -390,11 +390,11 @@ void dMenu_Collect2D_c::screenSet() { dComIfGs_isItemFirstBit(0x2B) || dComIfGs_isItemFirstBit(0x2A) ? true : false; if (field_0x22d[3][1] != 0) { if (dComIfGs_isItemFirstBit(0x2B)) { - mpScreen->search('tate_00')->show(); - mpScreen->search('tate_01')->hide(); + mpScreen->search(MULTI_CHAR('tate_00'))->show(); + mpScreen->search(MULTI_CHAR('tate_01'))->hide(); } else if (dComIfGs_isItemFirstBit(0x2A)) { - mpScreen->search('tate_00')->hide(); - mpScreen->search('tate_01')->show(); + mpScreen->search(MULTI_CHAR('tate_00'))->hide(); + mpScreen->search(MULTI_CHAR('tate_01'))->show(); } } field_0x22d[4][1] = dComIfGs_isItemFirstBit(0x2C); @@ -661,14 +661,14 @@ void dMenu_Collect2D_c::screenSet() { mCursorX = i_copy; mCursorY = j_copy; } - mpLinkPm = new CPaneMgr(mpScreen, 'linki_n', 0, NULL); + mpLinkPm = new CPaneMgr(mpScreen, MULTI_CHAR('linki_n'), 0, NULL); mLinkGlobalCenterPos.x = mpLinkPm->getInitGlobalCenterPosX(); mLinkGlobalCenterPos.y = mpLinkPm->getInitGlobalCenterPosY(); mLinkGlobalCenterPos.z = -1000.0f; - mpMaskPm = new CPaneMgr(mpScreen, 'kamen_n', 0, NULL); - mpModelBg = new CPaneMgr(mpScreen, 'modelbgn', 2, NULL); - mpHeartParent = new CPaneMgr(mpScreen, 'heart_n', 0, NULL); - mpHeartPiece = new CPaneMgr(mpScreen, 'heart_kn', 0, NULL); + mpMaskPm = new CPaneMgr(mpScreen, MULTI_CHAR('kamen_n'), 0, NULL); + mpModelBg = new CPaneMgr(mpScreen, MULTI_CHAR('modelbgn'), 2, NULL); + mpHeartParent = new CPaneMgr(mpScreen, MULTI_CHAR('heart_n'), 0, NULL); + mpHeartPiece = new CPaneMgr(mpScreen, MULTI_CHAR('heart_kn'), 0, NULL); setAButtonString(mCurrentAString); setBButtonString(mCurrentBString); setItemNameString(mCursorX, mCursorY); @@ -701,12 +701,12 @@ void dMenu_Collect2D_c::btkAnimeLoop0(J2DAnmTextureSRTKey* i_SRTKey) { } else { mFrame = 0.0f; } - static_cast(mpScreen->search('modelbg0'))->setAnimation(i_SRTKey); - static_cast(mpScreen->search('modelbg1'))->setAnimation(i_SRTKey); - static_cast(mpScreen->search('modelbg2'))->setAnimation(i_SRTKey); - static_cast(mpScreen->search('modelbg3'))->setAnimation(i_SRTKey); - static_cast(mpScreen->search('modelbg4'))->setAnimation(i_SRTKey); - static_cast(mpScreen->search('modelbg5'))->setAnimation(i_SRTKey); + static_cast(mpScreen->search(MULTI_CHAR('modelbg0')))->setAnimation(i_SRTKey); + static_cast(mpScreen->search(MULTI_CHAR('modelbg1')))->setAnimation(i_SRTKey); + static_cast(mpScreen->search(MULTI_CHAR('modelbg2')))->setAnimation(i_SRTKey); + static_cast(mpScreen->search(MULTI_CHAR('modelbg3')))->setAnimation(i_SRTKey); + static_cast(mpScreen->search(MULTI_CHAR('modelbg4')))->setAnimation(i_SRTKey); + static_cast(mpScreen->search(MULTI_CHAR('modelbg5')))->setAnimation(i_SRTKey); } void dMenu_Collect2D_c::setBackAlpha() { @@ -1125,24 +1125,24 @@ void dMenu_Collect2D_c::changeClothe() { void dMenu_Collect2D_c::setArrowMaxNum(u8 param_0) { switch (param_0) { case 0: - mpScreen->search('item_0_0')->hide(); - mpScreen->search('item_0_1')->hide(); - mpScreen->search('item_0_2')->hide(); + mpScreen->search(MULTI_CHAR('item_0_0'))->hide(); + mpScreen->search(MULTI_CHAR('item_0_1'))->hide(); + mpScreen->search(MULTI_CHAR('item_0_2'))->hide(); break; case 30: - mpScreen->search('item_0_0')->show(); - mpScreen->search('item_0_1')->hide(); - mpScreen->search('item_0_2')->hide(); + mpScreen->search(MULTI_CHAR('item_0_0'))->show(); + mpScreen->search(MULTI_CHAR('item_0_1'))->hide(); + mpScreen->search(MULTI_CHAR('item_0_2'))->hide(); break; case 60: - mpScreen->search('item_0_0')->hide(); - mpScreen->search('item_0_1')->show(); - mpScreen->search('item_0_2')->hide(); + mpScreen->search(MULTI_CHAR('item_0_0'))->hide(); + mpScreen->search(MULTI_CHAR('item_0_1'))->show(); + mpScreen->search(MULTI_CHAR('item_0_2'))->hide(); break; case 100: - mpScreen->search('item_0_0')->hide(); - mpScreen->search('item_0_1')->hide(); - mpScreen->search('item_0_2')->show(); + mpScreen->search(MULTI_CHAR('item_0_0'))->hide(); + mpScreen->search(MULTI_CHAR('item_0_1'))->hide(); + mpScreen->search(MULTI_CHAR('item_0_2'))->show(); break; } } @@ -1150,26 +1150,26 @@ void dMenu_Collect2D_c::setArrowMaxNum(u8 param_0) { void dMenu_Collect2D_c::setWalletMaxNum(u16 i_walletSize) { switch (i_walletSize) { case 300: - mpScreen->search('item_1_0')->show(); - mpScreen->search('item_1_1')->hide(); - mpScreen->search('item_1_2')->hide(); + mpScreen->search(MULTI_CHAR('item_1_0'))->show(); + mpScreen->search(MULTI_CHAR('item_1_1'))->hide(); + mpScreen->search(MULTI_CHAR('item_1_2'))->hide(); break; case 600: - mpScreen->search('item_1_0')->hide(); - mpScreen->search('item_1_1')->show(); - mpScreen->search('item_1_2')->hide(); + mpScreen->search(MULTI_CHAR('item_1_0'))->hide(); + mpScreen->search(MULTI_CHAR('item_1_1'))->show(); + mpScreen->search(MULTI_CHAR('item_1_2'))->hide(); break; case 1000: - mpScreen->search('item_1_0')->hide(); - mpScreen->search('item_1_1')->hide(); - mpScreen->search('item_1_2')->show(); + mpScreen->search(MULTI_CHAR('item_1_0'))->hide(); + mpScreen->search(MULTI_CHAR('item_1_1'))->hide(); + mpScreen->search(MULTI_CHAR('item_1_2'))->show(); break; } } void dMenu_Collect2D_c::setSmellType() { static const u64 smell_tag[5] = { - 'wolf_med', 'wolf_chi', 'wolf_fis', 'wolf_iri', 'wolf_pou', + MULTI_CHAR('wolf_med'), MULTI_CHAR('wolf_chi'), MULTI_CHAR('wolf_fis'), MULTI_CHAR('wolf_iri'), MULTI_CHAR('wolf_pou'), }; s32 smellType = -1; switch (dComIfGs_getCollectSmell()) { @@ -1200,10 +1200,10 @@ void dMenu_Collect2D_c::setSmellType() { void dMenu_Collect2D_c::setHeartPiece() { static const u64 heart_tag[4] = { - 'heart_1n', - 'heart_2n', - 'heart_3n', - 'heart_4n', + MULTI_CHAR('heart_1n'), + MULTI_CHAR('heart_2n'), + MULTI_CHAR('heart_3n'), + MULTI_CHAR('heart_4n'), }; s32 life = dComIfGs_getMaxLife() % 5; for (int i = 0; i < MAX_VISIBLE_HEARTPIECES; i++) { @@ -1227,10 +1227,10 @@ void dMenu_Collect2D_c::setPohMaxNum(u8 i_pohNum) { JKRArchive* archive = dComIfGp_getMain2DArchive(); const char* textureName = dMeter2Info_getNumberTextureName(div); ResTIMG* timg = (ResTIMG*)archive->getResource('TIMG', textureName); - static_cast(mpScreen->search('item2_3'))->changeTexture(timg, 0); + static_cast(mpScreen->search(MULTI_CHAR('item2_3')))->changeTexture(timg, 0); check = 1; } else { - mpScreen->search('item2_3')->hide(); + mpScreen->search(MULTI_CHAR('item2_3'))->hide(); } div = index / 10; index = index % 10; @@ -1238,25 +1238,25 @@ void dMenu_Collect2D_c::setPohMaxNum(u8 i_pohNum) { JKRArchive* archive = dComIfGp_getMain2DArchive(); const char* textureName2 = dMeter2Info_getNumberTextureName(div); ResTIMG* timg2 = (ResTIMG*)archive->getResource('TIMG', textureName2); - static_cast(mpScreen->search('item2_2'))->changeTexture(timg2, 0); + static_cast(mpScreen->search(MULTI_CHAR('item2_2')))->changeTexture(timg2, 0); } else { - mpScreen->search('item2_2')->hide(); + mpScreen->search(MULTI_CHAR('item2_2'))->hide(); } JKRArchive* archive = dComIfGp_getMain2DArchive(); const char* textureName3 = dMeter2Info_getNumberTextureName(index); ResTIMG* timg3 = (ResTIMG*)archive->getResource('TIMG', textureName3); - static_cast(mpScreen->search('item2_1'))->changeTexture(timg3, 0); + static_cast(mpScreen->search(MULTI_CHAR('item2_1')))->changeTexture(timg3, 0); } else { - mpScreen->search('item2_3')->hide(); - mpScreen->search('item2_2')->hide(); - mpScreen->search('item2_1')->hide(); + mpScreen->search(MULTI_CHAR('item2_3'))->hide(); + mpScreen->search(MULTI_CHAR('item2_2'))->hide(); + mpScreen->search(MULTI_CHAR('item2_1'))->hide(); } } void dMenu_Collect2D_c::setEquipItemFrameColorSword(int i_frame) { static const u64 tag[2] = { - 'ken_g_0', - 'ken_g_1', + MULTI_CHAR('ken_g_0'), + MULTI_CHAR('ken_g_1'), }; if (i_frame == -1) { @@ -1312,8 +1312,8 @@ void dMenu_Collect2D_c::setEquipItemFrameColorSword(int i_frame) { void dMenu_Collect2D_c::setEquipItemFrameColorShield(int i_frame) { static const u64 tag[2] = { - 'tate_g_0', - 'tate_g_1', + MULTI_CHAR('tate_g_0'), + MULTI_CHAR('tate_g_1'), }; if (i_frame == -1) { @@ -1360,9 +1360,9 @@ void dMenu_Collect2D_c::setEquipItemFrameColorShield(int i_frame) { void dMenu_Collect2D_c::setEquipItemFrameColorClothes(int i_frame) { static const u64 tag[3] = { - 'fuku_g_0', - 'fuku_g_1', - 'fuku_g_2', + MULTI_CHAR('fuku_g_0'), + MULTI_CHAR('fuku_g_1'), + MULTI_CHAR('fuku_g_2'), }; if (i_frame == -1) { @@ -1412,7 +1412,7 @@ void dMenu_Collect2D_c::setEquipItemFrameColorClothes(int i_frame) { void dMenu_Collect2D_c::setHIO(bool i_useHIO) { static const u64 kaz_n[9] = { - 'uzu_00', 'uzu_01', 'uzu_02', 'uzu_03', 'uzu_04', 'uzu_05', 'uzu_06', 'uzu_07', 'hishi', + MULTI_CHAR('uzu_00'), MULTI_CHAR('uzu_01'), MULTI_CHAR('uzu_02'), MULTI_CHAR('uzu_03'), MULTI_CHAR('uzu_04'), MULTI_CHAR('uzu_05'), MULTI_CHAR('uzu_06'), MULTI_CHAR('uzu_07'), MULTI_CHAR('hishi'), }; if (mBlueSmokePosX != g_drawHIO.mCollectScreen.mBlueSmokePosX || @@ -1460,7 +1460,7 @@ void dMenu_Collect2D_c::setHIO(bool i_useHIO) { } if (g_drawHIO.mCollectScreen.mColorDebugON) { - J2DPicture* basePicture = (J2DPicture*)mpScreen->search('nht_base'); + J2DPicture* basePicture = (J2DPicture*)mpScreen->search(MULTI_CHAR('nht_base')); basePicture->setBlackWhite(g_drawHIO.mCollectScreen.mVesselBack[0], g_drawHIO.mCollectScreen.mVesselFront[0]); @@ -1501,29 +1501,29 @@ void dMenu_Collect2D_c::setHIO(bool i_useHIO) { u64 dMenu_Collect2D_c::getItemTag(int i_tag1, int i_tag2, bool param_3) { static const u64 itemTag[6][7] = { - {0, 0, 0, 'ken_n0', 'ken_n1', 'heart_kn', 'kamen_n'}, - {0, 0, 0, 'tate_n0', 'tate_n1'}, + {0, 0, 0, MULTI_CHAR('ken_n0'), MULTI_CHAR('ken_n1'), MULTI_CHAR('heart_kn'), MULTI_CHAR('kamen_n')}, + {0, 0, 0, MULTI_CHAR('tate_n0'), MULTI_CHAR('tate_n1')}, { 0, 0, 0, - 'fuku_n0', - 'fuku_n1', - 'fuku_n2', + MULTI_CHAR('fuku_n0'), + MULTI_CHAR('fuku_n1'), + MULTI_CHAR('fuku_n2'), }, { - 'item_1_n', - 'item_0_n', - 'kabu_6n', - 'maki_5_n', + MULTI_CHAR('item_1_n'), + MULTI_CHAR('item_0_n'), + MULTI_CHAR('kabu_6n'), + MULTI_CHAR('maki_5_n'), }, { - 'wolf_n', - 'item_2_n', - 'fish_3_n', - 'lett_4_n', + MULTI_CHAR('wolf_n'), + MULTI_CHAR('item_2_n'), + MULTI_CHAR('fish_3_n'), + MULTI_CHAR('lett_4_n'), }, - {'save_n', 'option_n'}, + {MULTI_CHAR('save_n'), MULTI_CHAR('option_n')}, }; if (i_tag2 == 5 && !param_3) { @@ -2033,37 +2033,37 @@ void dMenu_Collect2D_c::_draw() { if (mItemNameString == 0) { #if REGION_JPN - char* stringPtr1 = static_cast(mpScreen->search('i_text1'))->getStringPtr(); + char* stringPtr1 = static_cast(mpScreen->search(MULTI_CHAR('i_text1')))->getStringPtr(); #else - char* stringPtr1 = static_cast(mpScreen->search('f_text1'))->getStringPtr(); + char* stringPtr1 = static_cast(mpScreen->search(MULTI_CHAR('f_text1')))->getStringPtr(); #endif strcpy(stringPtr1, ""); #if REGION_JPN - char* stringPtr0 = static_cast(mpScreen->search('i_text0'))->getStringPtr(); + char* stringPtr0 = static_cast(mpScreen->search(MULTI_CHAR('i_text0')))->getStringPtr(); #else - char* stringPtr0 = static_cast(mpScreen->search('f_text0'))->getStringPtr(); + char* stringPtr0 = static_cast(mpScreen->search(MULTI_CHAR('f_text0')))->getStringPtr(); #endif strcpy(stringPtr0, ""); } else { #if REGION_JPN - J2DTextBox* textBox1 = static_cast(mpScreen->search('i_text1')); + J2DTextBox* textBox1 = static_cast(mpScreen->search(MULTI_CHAR('i_text1'))); #else - J2DTextBox* textBox1 = static_cast(mpScreen->search('f_text1')); + J2DTextBox* textBox1 = static_cast(mpScreen->search(MULTI_CHAR('f_text1'))); #endif mpString->getString(mItemNameString, textBox1, NULL, NULL, NULL, 0); #if REGION_JPN - J2DTextBox* textBox0 = static_cast(mpScreen->search('i_text0')); + J2DTextBox* textBox0 = static_cast(mpScreen->search(MULTI_CHAR('i_text0'))); #else - J2DTextBox* textBox0 = static_cast(mpScreen->search('f_text0')); + J2DTextBox* textBox0 = static_cast(mpScreen->search(MULTI_CHAR('f_text0'))); #endif mpString->getString(mItemNameString, textBox0, NULL, NULL, NULL, 0); #if REGION_JPN - textBox0 = static_cast(mpScreen->search('i_text0')); + textBox0 = static_cast(mpScreen->search(MULTI_CHAR('i_text0'))); #else - textBox0 = static_cast(mpScreen->search('f_text0')); + textBox0 = static_cast(mpScreen->search(MULTI_CHAR('f_text0'))); #endif mpString->drawOutFontLocal(textBox0, -1.0f); } @@ -2087,7 +2087,7 @@ bool dMenu_Collect2D_c::isOutCheck() { void dMenu_Collect2D_c::setAButtonString(u16 i_stringID) { static const u64 text_a_tag[5] = { - 'atext1_1', 'atext1_2', 'atext1_3', 'atext1_4', 'atext1_5', + MULTI_CHAR('atext1_1'), MULTI_CHAR('atext1_2'), MULTI_CHAR('atext1_3'), MULTI_CHAR('atext1_4'), MULTI_CHAR('atext1_5'), }; if (i_stringID != mCurrentAString) { @@ -2111,7 +2111,7 @@ void dMenu_Collect2D_c::setAButtonString(u16 i_stringID) { void dMenu_Collect2D_c::setBButtonString(u16 i_stringID) { static const u64 text_b_tag[5] = { - 'btext1_1', 'btext1_2', 'btext1_3', 'btext1_4', 'btext1_5', + MULTI_CHAR('btext1_1'), MULTI_CHAR('btext1_2'), MULTI_CHAR('btext1_3'), MULTI_CHAR('btext1_4'), MULTI_CHAR('btext1_5'), }; if (i_stringID != mCurrentBString) { @@ -2145,23 +2145,23 @@ void dMenu_Collect2D_c::setItemNameString(u8 param_0, u8 param_1) { } else { #if REGION_JPN char* stringPtr = - static_cast(mpScreen->search('item_n00'))->getStringPtr(); + static_cast(mpScreen->search(MULTI_CHAR('item_n00')))->getStringPtr(); dMeter2Info_getStringKanji(uVar6, stringPtr, NULL); - stringPtr = static_cast(mpScreen->search('item_n01'))->getStringPtr(); + stringPtr = static_cast(mpScreen->search(MULTI_CHAR('item_n01')))->getStringPtr(); dMeter2Info_getStringKanji(uVar6, stringPtr, NULL); - stringPtr = static_cast(mpScreen->search('item_n02'))->getStringPtr(); + stringPtr = static_cast(mpScreen->search(MULTI_CHAR('item_n02')))->getStringPtr(); dMeter2Info_getStringKanji(uVar6, stringPtr, NULL); - stringPtr = static_cast(mpScreen->search('item_n03'))->getStringPtr(); + stringPtr = static_cast(mpScreen->search(MULTI_CHAR('item_n03')))->getStringPtr(); dMeter2Info_getStringKanji(uVar6, stringPtr, NULL); #else char* stringPtr = - static_cast(mpScreen->search('item_n04'))->getStringPtr(); + static_cast(mpScreen->search(MULTI_CHAR('item_n04')))->getStringPtr(); dMeter2Info_getStringKanji(uVar6, stringPtr, NULL); - stringPtr = static_cast(mpScreen->search('item_n05'))->getStringPtr(); + stringPtr = static_cast(mpScreen->search(MULTI_CHAR('item_n05')))->getStringPtr(); dMeter2Info_getStringKanji(uVar6, stringPtr, NULL); - stringPtr = static_cast(mpScreen->search('item_n06'))->getStringPtr(); + stringPtr = static_cast(mpScreen->search(MULTI_CHAR('item_n06')))->getStringPtr(); dMeter2Info_getStringKanji(uVar6, stringPtr, NULL); - stringPtr = static_cast(mpScreen->search('item_n07'))->getStringPtr(); + stringPtr = static_cast(mpScreen->search(MULTI_CHAR('item_n07')))->getStringPtr(); dMeter2Info_getStringKanji(uVar6, stringPtr, NULL); #endif } @@ -2171,21 +2171,21 @@ void dMenu_Collect2D_c::setItemNameString(u8 param_0, u8 param_1) { void dMenu_Collect2D_c::setItemNameStringNull() { mItemNameString = 0; #if REGION_JPN - J2DTextBox* textBox = (J2DTextBox*)mpScreen->search('item_n00'); + J2DTextBox* textBox = (J2DTextBox*)mpScreen->search(MULTI_CHAR('item_n00')); strcpy(textBox->getStringPtr(), ""); - textBox = (J2DTextBox*)mpScreen->search('item_n01'); + textBox = (J2DTextBox*)mpScreen->search(MULTI_CHAR('item_n01')); strcpy(textBox->getStringPtr(), ""); - textBox = (J2DTextBox*)mpScreen->search('item_n02'); + textBox = (J2DTextBox*)mpScreen->search(MULTI_CHAR('item_n02')); strcpy(textBox->getStringPtr(), ""); - textBox = (J2DTextBox*)mpScreen->search('item_n03'); + textBox = (J2DTextBox*)mpScreen->search(MULTI_CHAR('item_n03')); #else - J2DTextBox* textBox = (J2DTextBox*)mpScreen->search('item_n04'); + J2DTextBox* textBox = (J2DTextBox*)mpScreen->search(MULTI_CHAR('item_n04')); strcpy(textBox->getStringPtr(), ""); - textBox = (J2DTextBox*)mpScreen->search('item_n05'); + textBox = (J2DTextBox*)mpScreen->search(MULTI_CHAR('item_n05')); strcpy(textBox->getStringPtr(), ""); - textBox = (J2DTextBox*)mpScreen->search('item_n06'); + textBox = (J2DTextBox*)mpScreen->search(MULTI_CHAR('item_n06')); strcpy(textBox->getStringPtr(), ""); - textBox = (J2DTextBox*)mpScreen->search('item_n07'); + textBox = (J2DTextBox*)mpScreen->search(MULTI_CHAR('item_n07')); #endif strcpy(textBox->getStringPtr(), ""); } diff --git a/src/d/d_menu_dmap.cpp b/src/d/d_menu_dmap.cpp index 4e22a4cb12..bd81807b18 100644 --- a/src/d/d_menu_dmap.cpp +++ b/src/d/d_menu_dmap.cpp @@ -146,32 +146,32 @@ void dMenu_DmapBg_c::mapScreenInit() { } #if (PLATFORM_WII || PLATFORM_SHIELD) - mpBlack = new CPaneMgrAlpha(mMapScreen[0], 'm_black', 2, NULL); + mpBlack = new CPaneMgrAlpha(mMapScreen[0], MULTI_CHAR('m_black'), 2, NULL); JUT_ASSERT(699, mpBlack != NULL); mpBlack->setAlphaRate(0.0f); #else mpBlack = NULL; #endif - mMapScreen[0]->search('map_icon')->hide(); - mMapScreen[0]->search('map_aria')->hide(); - mMapScreen[0]->search('n_all')->hide(); - mMapScreen[1]->search('n_all')->hide(); - mMapScreen[0]->search('m_black')->hide(); - mMapScreen[1]->search('bs_00_0')->hide(); - mMapScreen[1]->search('bs_00_1')->hide(); - mMapScreen[1]->search('gold00_0')->hide(); - mMapScreen[1]->search('gold00_1')->hide(); - mMapScreen[1]->search('m_black')->hide(); - mMapScreen[1]->search('center_n')->hide(); - mMapScreen[1]->search('map_ai_n')->setBasePosition(J2DBasePosition_0); - mMapScreen[0]->search('center_n')->setBasePosition(J2DBasePosition_4); + mMapScreen[0]->search(MULTI_CHAR('map_icon'))->hide(); + mMapScreen[0]->search(MULTI_CHAR('map_aria'))->hide(); + mMapScreen[0]->search(MULTI_CHAR('n_all'))->hide(); + mMapScreen[1]->search(MULTI_CHAR('n_all'))->hide(); + mMapScreen[0]->search(MULTI_CHAR('m_black'))->hide(); + mMapScreen[1]->search(MULTI_CHAR('bs_00_0'))->hide(); + mMapScreen[1]->search(MULTI_CHAR('bs_00_1'))->hide(); + mMapScreen[1]->search(MULTI_CHAR('gold00_0'))->hide(); + mMapScreen[1]->search(MULTI_CHAR('gold00_1'))->hide(); + mMapScreen[1]->search(MULTI_CHAR('m_black'))->hide(); + mMapScreen[1]->search(MULTI_CHAR('center_n'))->hide(); + mMapScreen[1]->search(MULTI_CHAR('map_ai_n'))->setBasePosition(J2DBasePosition_0); + mMapScreen[0]->search(MULTI_CHAR('center_n'))->setBasePosition(J2DBasePosition_4); OSInitFastCast(); { Mtx m; CPaneMgr pane; - Vec vtx = pane.getGlobalVtx(mMapScreen[1]->search('map_icon'), &m, 0, false, 0); + Vec vtx = pane.getGlobalVtx(mMapScreen[1]->search(MULTI_CHAR('map_icon')), &m, 0, false, 0); field_0xdc0 = vtx.x; field_0xdc4 = vtx.y; } @@ -192,7 +192,7 @@ void dMenu_DmapBg_c::mapScreenInit() { mMapScreen[0]->animation(); setGoldAnimation(true); - mMapPane = (J2DPicture*)mMapScreen[1]->search('map_aria'); + mMapPane = (J2DPicture*)mMapScreen[1]->search(MULTI_CHAR('map_aria')); mMapPane->setCornerColor(JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF)); mMapPane->setWhite(JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF)); @@ -203,7 +203,7 @@ void dMenu_DmapBg_c::mapScreenInit() { mMapWidth = vtx3.x - vtx0.x; mMapHeight = vtx3.y - vtx0.y; - J2DPicture* map_icon_pic = (J2DPicture*)mMapScreen[1]->search('map_icon'); + J2DPicture* map_icon_pic = (J2DPicture*)mMapScreen[1]->search(MULTI_CHAR('map_icon')); map_icon_pic->setBasePosition(J2DBasePosition_4); map_icon_pic->setCornerColor(JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF)); map_icon_pic->setAlpha(0); @@ -211,7 +211,7 @@ void dMenu_DmapBg_c::mapScreenInit() { initiate(dComIfGp_getDmapResArchive()); for (int i = 0; i < 2; i++) { - mpMapSpace[i] = new CPaneMgr(mMapScreen[i], 'mapspace', 0, NULL); + mpMapSpace[i] = new CPaneMgr(mMapScreen[i], MULTI_CHAR('mapspace'), 0, NULL); JUT_ASSERT(817, mpMapSpace[i] != NULL); mpMapSpace[i]->paneTrans(0.0f, -15.0f); @@ -281,15 +281,15 @@ bool dMenu_DmapBg_c::iconScaleAnm() { } void dMenu_DmapBg_c::buttonIconScreenInit() { - static u64 const cont_at[5] = {'cont_at', 'cont_at1', 'cont_at2', 'cont_at3', 'cont_at4'}; - static u64 const cont_bt[5] = {'cont_bt', 'cont_bt1', 'cont_bt2', 'cont_bt3', 'cont_bt4'}; - static u64 const font_at[5] = {'font_at', 'font_at1', 'font_at2', 'font_at3', 'font_at4'}; - static u64 const font_bt[5] = {'font_bt', 'font_bt1', 'font_bt2', 'font_bt3', 'font_bt4'}; + static u64 const cont_at[5] = {MULTI_CHAR('cont_at'), MULTI_CHAR('cont_at1'), MULTI_CHAR('cont_at2'), MULTI_CHAR('cont_at3'), MULTI_CHAR('cont_at4')}; + static u64 const cont_bt[5] = {MULTI_CHAR('cont_bt'), MULTI_CHAR('cont_bt1'), MULTI_CHAR('cont_bt2'), MULTI_CHAR('cont_bt3'), MULTI_CHAR('cont_bt4')}; + static u64 const font_at[5] = {MULTI_CHAR('font_at'), MULTI_CHAR('font_at1'), MULTI_CHAR('font_at2'), MULTI_CHAR('font_at3'), MULTI_CHAR('font_at4')}; + static u64 const font_bt[5] = {MULTI_CHAR('font_bt'), MULTI_CHAR('font_bt1'), MULTI_CHAR('font_bt2'), MULTI_CHAR('font_bt3'), MULTI_CHAR('font_bt4')}; static u64 const c_tag[2] = { #if VERSION == VERSION_GCN_JPN - 'c_text_s', 'c_text' + MULTI_CHAR('c_text_s'), MULTI_CHAR('c_text') #else - 'f_text_s', 'f_text' + MULTI_CHAR('f_text_s'), MULTI_CHAR('f_text') #endif }; @@ -313,9 +313,9 @@ void dMenu_DmapBg_c::buttonIconScreenInit() { #else mDecorateScreen = NULL; mpDecorateRoot = NULL; - mButtonScreen->search('w_spot')->hide(); - mButtonScreen->search('spot00')->hide(); - mButtonScreen->search('spot01')->hide(); + mButtonScreen->search(MULTI_CHAR('w_spot'))->hide(); + mButtonScreen->search(MULTI_CHAR('spot00'))->hide(); + mButtonScreen->search(MULTI_CHAR('spot01'))->hide(); #endif mpButtonRoot = new CPaneMgrAlphaMorf(mButtonScreen, 'ROOT', 2, NULL); @@ -326,7 +326,7 @@ void dMenu_DmapBg_c::buttonIconScreenInit() { mpButtonText[i] = NULL; } - mpCButton = new CPaneMgrAlpha(mButtonScreen, 'c_btn', 2, NULL); + mpCButton = new CPaneMgrAlpha(mButtonScreen, MULTI_CHAR('c_btn'), 2, NULL); JUT_ASSERT(978, mpCButton != NULL); mpJButton = NULL; @@ -372,9 +372,9 @@ void dMenu_DmapBg_c::buttonIconScreenInit() { void dMenu_DmapBg_c::setAButtonString(u32 i_msgNo) { static u64 const cont_at[5] = { #if VERSION == VERSION_GCN_JPN - 'cont_at', 'cont_at1', 'cont_at2', 'cont_at3', 'cont_at4' + MULTI_CHAR('cont_at'), MULTI_CHAR('cont_at1'), MULTI_CHAR('cont_at2'), MULTI_CHAR('cont_at3'), MULTI_CHAR('cont_at4') #else - 'font_at', 'font_at1', 'font_at2', 'font_at3', 'font_at4' + MULTI_CHAR('font_at'), MULTI_CHAR('font_at1'), MULTI_CHAR('font_at2'), MULTI_CHAR('font_at3'), MULTI_CHAR('font_at4') #endif }; for (int i = 0; i < 5; i++) { @@ -389,9 +389,9 @@ void dMenu_DmapBg_c::setAButtonString(u32 i_msgNo) { void dMenu_DmapBg_c::setBButtonString(u32 i_msgNo) { static u64 const cont_bt[5] = { #if VERSION == VERSION_GCN_JPN - 'cont_bt', 'cont_bt1', 'cont_bt2', 'cont_bt3', 'cont_bt4' + MULTI_CHAR('cont_bt'), MULTI_CHAR('cont_bt1'), MULTI_CHAR('cont_bt2'), MULTI_CHAR('cont_bt3'), MULTI_CHAR('cont_bt4') #else - 'font_bt', 'font_bt1', 'font_bt2', 'font_bt3', 'font_bt4' + MULTI_CHAR('font_bt'), MULTI_CHAR('font_bt1'), MULTI_CHAR('font_bt2'), MULTI_CHAR('font_bt3'), MULTI_CHAR('font_bt4') #endif }; for (int i = 0; i < 5; i++) { @@ -412,9 +412,9 @@ dMenu_Dmap_c* dMenu_Dmap_c::myclass; void dMenu_DmapBg_c::setCButtonString(u32 i_msgNo) { static u64 const c_tag[2] = { #if VERSION == VERSION_GCN_JPN - 'c_text_s', 'c_text' + MULTI_CHAR('c_text_s'), MULTI_CHAR('c_text') #else - 'f_text_s', 'f_text' + MULTI_CHAR('f_text_s'), MULTI_CHAR('f_text') #endif }; int i; @@ -478,7 +478,7 @@ void dMenu_DmapBg_c::baseScreenInit() { JUT_ASSERT(1362, fg != false); dPaneClass_showNullPane(mFloorScreen); - mBaseScreen->search('w_btn_n')->hide(); + mBaseScreen->search(MULTI_CHAR('w_btn_n'))->hide(); mpBaseRoot = new CPaneMgrAlphaMorf(mBaseScreen, 'ROOT', 2, NULL); JUT_ASSERT(1396, mpBaseRoot != NULL); @@ -493,11 +493,11 @@ void dMenu_DmapBg_c::baseScreenInit() { mpDrawCursor->setParam(0.95f, 0.9f, 0.1f, 0.6f, 0.5f); #if VERSION == VERSION_GCN_JPN - J2DTextBox* uVar9 = (J2DTextBox*)mBaseScreen->search('t_t00'); - mBaseScreen->search('f_t_00')->hide(); + J2DTextBox* uVar9 = (J2DTextBox*)mBaseScreen->search(MULTI_CHAR('t_t00')); + mBaseScreen->search(MULTI_CHAR('f_t_00'))->hide(); #else - J2DTextBox* uVar9 = (J2DTextBox*)mBaseScreen->search('f_t_00'); - mBaseScreen->search('t_t00')->hide(); + J2DTextBox* uVar9 = (J2DTextBox*)mBaseScreen->search(MULTI_CHAR('f_t_00')); + mBaseScreen->search(MULTI_CHAR('t_t00'))->hide(); #endif uVar9->setFont(mDoExt_getSubFont()); uVar9->setString(32, ""); @@ -523,11 +523,11 @@ void dMenu_DmapBg_c::setFloorMessage() { }; #if VERSION == VERSION_GCN_JPN - #define FLOOR_TAG(A, B) ('ffoor0_0' | (A<<16) | (B)) - #define FFOOR_TAG(A, B) ('floor0_0' | (A<<16) | (B)) + #define FLOOR_TAG(A, B) (MULTI_CHAR('ffoor0_0') | (A<<16) | (B)) + #define FFOOR_TAG(A, B) (MULTI_CHAR('floor0_0') | (A<<16) | (B)) #else - #define FLOOR_TAG(A, B) ('floor0_0' | (A<<16) | (B)) - #define FFOOR_TAG(A, B) ('ffoor0_0' | (A<<16) | (B)) + #define FLOOR_TAG(A, B) (MULTI_CHAR('floor0_0') | (A<<16) | (B)) + #define FFOOR_TAG(A, B) (MULTI_CHAR('ffoor0_0') | (A<<16) | (B)) #endif floor_textbox_1[0] = (J2DTextBox*)mFloorScreen->search(FFOOR_TAG(7, 1)); @@ -794,8 +794,8 @@ void dMenu_DmapBg_c::setAllAlphaRate(f32 i_rate, bool param_2) { } void dMenu_DmapBg_c::setGoldAnimation(bool param_1) { - J2DPane* gold0 = mMapScreen[0]->search('gold00_0'); - J2DPane* gold1 = mMapScreen[0]->search('gold00_1'); + J2DPane* gold0 = mMapScreen[0]->search(MULTI_CHAR('gold00_0')); + J2DPane* gold1 = mMapScreen[0]->search(MULTI_CHAR('gold00_1')); if (param_1) { gold0->setAnimation(field_0xd28[0]); @@ -808,13 +808,13 @@ void dMenu_DmapBg_c::setGoldAnimation(bool param_1) { void dMenu_DmapBg_c::setGoldFrameAlphaRate(f32 i_rate) { if (0.0f == i_rate) { - mMapScreen[0]->search('gold00_0')->hide(); - mMapScreen[0]->search('gold00_1')->hide(); + mMapScreen[0]->search(MULTI_CHAR('gold00_0'))->hide(); + mMapScreen[0]->search(MULTI_CHAR('gold00_1'))->hide(); } else { - mMapScreen[0]->search('gold00_0')->show(); - mMapScreen[0]->search('gold00_1')->show(); - mMapScreen[0]->search('gold00_0')->setAlpha(i_rate * 255.0f); - mMapScreen[0]->search('gold00_1')->setAlpha(i_rate * 255.0f); + mMapScreen[0]->search(MULTI_CHAR('gold00_0'))->show(); + mMapScreen[0]->search(MULTI_CHAR('gold00_1'))->show(); + mMapScreen[0]->search(MULTI_CHAR('gold00_0'))->setAlpha(i_rate * 255.0f); + mMapScreen[0]->search(MULTI_CHAR('gold00_1'))->setAlpha(i_rate * 255.0f); } } @@ -874,7 +874,7 @@ void dMenu_DmapBg_c::draw() { mMapScreen[0]->draw(field_0xd94, field_0xd98, grafContext); if (mpBackTexture != NULL) { - J2DPane* center_pane = mMapScreen[0]->search('center_n'); + J2DPane* center_pane = mMapScreen[0]->search(MULTI_CHAR('center_n')); CPaneMgr pane; Mtx mtx; Vec local_200 = pane.getGlobalVtx(center_pane, &mtx, 0, false, 0); @@ -903,7 +903,7 @@ void dMenu_DmapBg_c::draw() { mMapScreen[1]->draw(field_0xd94, field_0xd98, grafContext); - J2DPane* center_pane = mMapScreen[1]->search('center_n'); + J2DPane* center_pane = mMapScreen[1]->search(MULTI_CHAR('center_n')); CPaneMgr pane; Mtx local_110; Vec local_218 = pane.getGlobalVtx(center_pane, &local_110, 0, false, 0); @@ -1060,18 +1060,18 @@ dMenu_Dmap_c::dMenu_Dmap_c(JKRExpHeap* param_1, STControl* param_2, CSTControl* } void dMenu_Dmap_c::screenInit() { - static u64 const floor_tag[8] = {'floor7_n', 'floor0_n', 'floor1_n', 'floor2_n', - 'floor3_n', 'floor4_n', 'floor5_n', 'floor6_n'}; - static u64 const icon_tag[8] = {'ico_set7', 'ico_set0', 'ico_set1', 'ico_set2', - 'ico_set3', 'ico_set4', 'ico_set5', 'ico_set6'}; - static u64 const boss_tag[8] = {'ic_st_b7', 'ic_st_b0', 'ic_st_b1', 'ic_st_b2', - 'ic_st_b3', 'ic_st_b4', 'ic_st_b5', 'ic_st_b6'}; - static u64 const stay_tag[2] = {'rink_nul', 'boss_nul'}; - static u64 const waku_tag[3] = {'gray_map', 'gray_con', 'gray_key'}; - static u64 const key_tag[3] = {'key_00', 'key_01', 'key_02'}; - static u64 const item_tag[3] = {'map000', 'con000', 'i_key_n'}; + static u64 const floor_tag[8] = {MULTI_CHAR('floor7_n'), MULTI_CHAR('floor0_n'), MULTI_CHAR('floor1_n'), MULTI_CHAR('floor2_n'), + MULTI_CHAR('floor3_n'), MULTI_CHAR('floor4_n'), MULTI_CHAR('floor5_n'), MULTI_CHAR('floor6_n')}; + static u64 const icon_tag[8] = {MULTI_CHAR('ico_set7'), MULTI_CHAR('ico_set0'), MULTI_CHAR('ico_set1'), MULTI_CHAR('ico_set2'), + MULTI_CHAR('ico_set3'), MULTI_CHAR('ico_set4'), MULTI_CHAR('ico_set5'), MULTI_CHAR('ico_set6')}; + static u64 const boss_tag[8] = {MULTI_CHAR('ic_st_b7'), MULTI_CHAR('ic_st_b0'), MULTI_CHAR('ic_st_b1'), MULTI_CHAR('ic_st_b2'), + MULTI_CHAR('ic_st_b3'), MULTI_CHAR('ic_st_b4'), MULTI_CHAR('ic_st_b5'), MULTI_CHAR('ic_st_b6')}; + static u64 const stay_tag[2] = {MULTI_CHAR('rink_nul'), MULTI_CHAR('boss_nul')}; + static u64 const waku_tag[3] = {MULTI_CHAR('gray_map'), MULTI_CHAR('gray_con'), MULTI_CHAR('gray_key')}; + static u64 const key_tag[3] = {MULTI_CHAR('key_00'), MULTI_CHAR('key_01'), MULTI_CHAR('key_02')}; + static u64 const item_tag[3] = {MULTI_CHAR('map000'), MULTI_CHAR('con000'), MULTI_CHAR('i_key_n')}; - field_0x10 = new CPaneMgr(mpDrawBg->mBaseScreen, 'floo_s_n', 0, NULL); + field_0x10 = new CPaneMgr(mpDrawBg->mBaseScreen, MULTI_CHAR('floo_s_n'), 0, NULL); for (int i = 0; i < 8; i++) { field_0x114[i] = 0.0f; @@ -1118,7 +1118,7 @@ void dMenu_Dmap_c::screenInit() { f32 var_f29; f32 var_f28 = 7.0f; - var_f29 = mpDrawBg->mFloorScreen->search('s_n_all')->getHeight(); + var_f29 = mpDrawBg->mFloorScreen->search(MULTI_CHAR('s_n_all'))->getHeight(); f32 var_f30 = mSelFloor[0]->getPanePtr()->getHeight(); f32 var_f27 = mFloorAll - mBottomFloor + 1; @@ -1137,19 +1137,19 @@ void dMenu_Dmap_c::screenInit() { iconMoveCalc(); Vec local_b0 = mSelFloor[getDefaultCurFloorPos()]->getGlobalVtxCenter(false, 0); mpDrawBg->mpDrawCursor->setPos(local_b0.x + field_0x104, local_b0.y, mSelFloor[getDefaultCurFloorPos()]->getPanePtr(), true); - field_0x94 = new CPaneMgr(mpDrawBg->mBaseScreen, 'item_s_n', 0, NULL); - field_0x7c[0] = new CPaneMgr(mpDrawBg->mBaseScreen, 'map_n', 3, NULL); - field_0x7c[1] = new CPaneMgr(mpDrawBg->mBaseScreen, 'con_n', 3, NULL); - field_0x7c[2] = new CPaneMgr(mpDrawBg->mBaseScreen, 'key_n', 3, NULL); - field_0x88[0] = new CPaneMgr(mpDrawBg->mBaseScreen, 'map000', 3, NULL); - field_0x88[1] = new CPaneMgr(mpDrawBg->mBaseScreen, 'con000', 3, NULL); + field_0x94 = new CPaneMgr(mpDrawBg->mBaseScreen, MULTI_CHAR('item_s_n'), 0, NULL); + field_0x7c[0] = new CPaneMgr(mpDrawBg->mBaseScreen, MULTI_CHAR('map_n'), 3, NULL); + field_0x7c[1] = new CPaneMgr(mpDrawBg->mBaseScreen, MULTI_CHAR('con_n'), 3, NULL); + field_0x7c[2] = new CPaneMgr(mpDrawBg->mBaseScreen, MULTI_CHAR('key_n'), 3, NULL); + field_0x88[0] = new CPaneMgr(mpDrawBg->mBaseScreen, MULTI_CHAR('map000'), 3, NULL); + field_0x88[1] = new CPaneMgr(mpDrawBg->mBaseScreen, MULTI_CHAR('con000'), 3, NULL); if (dStage_stagInfo_GetSaveTbl(dComIfGp_getStageStagInfo()) == 0x11) { - field_0x88[2] = new CPaneMgr(mpDrawBg->mBaseScreen, 'i_key_n', 3, NULL); + field_0x88[2] = new CPaneMgr(mpDrawBg->mBaseScreen, MULTI_CHAR('i_key_n'), 3, NULL); } else if (dStage_stagInfo_GetSaveTbl(dComIfGp_getStageStagInfo()) == 0x14) { - field_0x88[2] = new CPaneMgr(mpDrawBg->mBaseScreen, 'lv5_k_n', 3, NULL); + field_0x88[2] = new CPaneMgr(mpDrawBg->mBaseScreen, MULTI_CHAR('lv5_k_n'), 3, NULL); } else { - field_0x88[2] = new CPaneMgr(mpDrawBg->mBaseScreen, 'nor_k_n', 3, NULL); + field_0x88[2] = new CPaneMgr(mpDrawBg->mBaseScreen, MULTI_CHAR('nor_k_n'), 3, NULL); } for (int i = 0; i < 3; i++) { @@ -1157,8 +1157,8 @@ void dMenu_Dmap_c::screenInit() { } if (dStage_stagInfo_GetSaveTbl(dComIfGp_getStageStagInfo()) == 0x11) { - mpDrawBg->mBaseScreen->search('lv5_k_n')->hide(); - mpDrawBg->mBaseScreen->search('nor_k_n')->hide(); + mpDrawBg->mBaseScreen->search(MULTI_CHAR('lv5_k_n'))->hide(); + mpDrawBg->mBaseScreen->search(MULTI_CHAR('nor_k_n'))->hide(); u8 key_num = 0; if (checkItemGet(fpcNm_ITEM_L2_KEY_PIECES1, 1)) { @@ -1186,19 +1186,19 @@ void dMenu_Dmap_c::screenInit() { } if (key_num == 0 || dMeter2Info_isTempBit(0)) { - mpDrawBg->mBaseScreen->search('key_n_n')->hide(); + mpDrawBg->mBaseScreen->search(MULTI_CHAR('key_n_n'))->hide(); } else { ResTIMG* tex = (ResTIMG*)dComIfGp_getMain2DArchive()->getResource('TIMG', dMeter2Info_getNumberTextureName(key_num)); - ((J2DPicture*)mpDrawBg->mBaseScreen->search('c_n_2_s'))->changeTexture(tex, 0); - ((J2DPicture*)mpDrawBg->mBaseScreen->search('c_n_2'))->changeTexture(tex, 0); + ((J2DPicture*)mpDrawBg->mBaseScreen->search(MULTI_CHAR('c_n_2_s')))->changeTexture(tex, 0); + ((J2DPicture*)mpDrawBg->mBaseScreen->search(MULTI_CHAR('c_n_2')))->changeTexture(tex, 0); tex = (ResTIMG*)dComIfGp_getMain2DArchive()->getResource('TIMG', dMeter2Info_getNumberTextureName(3)); - ((J2DPicture*)mpDrawBg->mBaseScreen->search('c_n_1_s'))->changeTexture(tex, 0); - ((J2DPicture*)mpDrawBg->mBaseScreen->search('c_n_1'))->changeTexture(tex, 0); + ((J2DPicture*)mpDrawBg->mBaseScreen->search(MULTI_CHAR('c_n_1_s')))->changeTexture(tex, 0); + ((J2DPicture*)mpDrawBg->mBaseScreen->search(MULTI_CHAR('c_n_1')))->changeTexture(tex, 0); } } else if (dStage_stagInfo_GetSaveTbl(dComIfGp_getStageStagInfo()) == 0x14) { - mpDrawBg->mBaseScreen->search('i_key_n')->hide(); - mpDrawBg->mBaseScreen->search('nor_k_n')->hide(); - mpDrawBg->mBaseScreen->search('key_n_n')->hide(); + mpDrawBg->mBaseScreen->search(MULTI_CHAR('i_key_n'))->hide(); + mpDrawBg->mBaseScreen->search(MULTI_CHAR('nor_k_n'))->hide(); + mpDrawBg->mBaseScreen->search(MULTI_CHAR('key_n_n'))->hide(); u8 itemNo = fpcNm_ITEM_NONE; field_0x174[2] = 0; @@ -1229,14 +1229,14 @@ void dMenu_Dmap_c::screenInit() { case fpcNm_ITEM_TOMATO_PUREE: case fpcNm_ITEM_TASTE: dMeter2Info_readItemTexture(itemNo, mItemTexBuf, - (J2DPicture*)mpDrawBg->mBaseScreen->search('lv5_boss'), NULL, NULL, NULL, NULL, + (J2DPicture*)mpDrawBg->mBaseScreen->search(MULTI_CHAR('lv5_boss')), NULL, NULL, NULL, NULL, NULL, NULL, -1); break; } } else { - mpDrawBg->mBaseScreen->search('i_key_n')->hide(); - mpDrawBg->mBaseScreen->search('lv5_k_n')->hide(); - mpDrawBg->mBaseScreen->search('key_n_n')->hide(); + mpDrawBg->mBaseScreen->search(MULTI_CHAR('i_key_n'))->hide(); + mpDrawBg->mBaseScreen->search(MULTI_CHAR('lv5_k_n'))->hide(); + mpDrawBg->mBaseScreen->search(MULTI_CHAR('key_n_n'))->hide(); field_0x174[2] = (u8)dComIfGs_isDungeonItemBossKey() ? fpcNm_ITEM_BOSS_KEY : 0; } @@ -1257,9 +1257,9 @@ void dMenu_Dmap_c::screenInit() { mpDrawBg->mBaseScreen->search(waku_tag[i])->hide(); if (i == 2) { - mpDrawBg->mBaseScreen->search('lv5_k_n')->hide(); - mpDrawBg->mBaseScreen->search('nor_k_n')->hide(); - mpDrawBg->mBaseScreen->search('key_n_n')->hide(); + mpDrawBg->mBaseScreen->search(MULTI_CHAR('lv5_k_n'))->hide(); + mpDrawBg->mBaseScreen->search(MULTI_CHAR('nor_k_n'))->hide(); + mpDrawBg->mBaseScreen->search(MULTI_CHAR('key_n_n'))->hide(); } } } @@ -1269,7 +1269,7 @@ void dMenu_Dmap_c::screenInit() { } field_0x94->hide(); - field_0x98 = new CPaneMgr(mpDrawBg->mBaseScreen, 'so_s_n', 0, NULL); + field_0x98 = new CPaneMgr(mpDrawBg->mBaseScreen, MULTI_CHAR('so_s_n'), 0, NULL); field_0x98->hide(); } @@ -2024,8 +2024,8 @@ void dMenu_Dmap_c::_draw() { sp14[1] = -(field_0x138 + 100.0f * (sp20 * mMapCtrl->getPixelPerCm())); Vec spC; - spC.x = mpDrawBg->mMapScreen[0]->search('center_n')->getGlbBounds().i.x + (mpDrawBg->mMapScreen[0]->search('center_n')->getWidth() / 2); - spC.y = mpDrawBg->mMapScreen[0]->search('center_n')->getGlbBounds().i.y + (mpDrawBg->mMapScreen[0]->search('center_n')->getHeight() / 2); + spC.x = mpDrawBg->mMapScreen[0]->search(MULTI_CHAR('center_n'))->getGlbBounds().i.x + (mpDrawBg->mMapScreen[0]->search(MULTI_CHAR('center_n'))->getWidth() / 2); + spC.y = mpDrawBg->mMapScreen[0]->search(MULTI_CHAR('center_n'))->getGlbBounds().i.y + (mpDrawBg->mMapScreen[0]->search(MULTI_CHAR('center_n'))->getHeight() / 2); CPaneMgr sp70; //!@bug It's unclear what this is supposed to be, but a stack pointer being converted to a bool is probably not intended. diff --git a/src/d/d_menu_fishing.cpp b/src/d/d_menu_fishing.cpp index 20142d9c6d..50aedbf79f 100644 --- a/src/d/d_menu_fishing.cpp +++ b/src/d/d_menu_fishing.cpp @@ -219,54 +219,54 @@ void dMenu_Fishing_c::wait_move() { void dMenu_Fishing_c::screenSetBase() { static const u64 fish_n[6] = { - 'fish_n_6', 'fish_n_5', 'fish_n_3', 'fish_n_1', 'fish_n_2', 'fish_n_4', + MULTI_CHAR('fish_n_6'), MULTI_CHAR('fish_n_5'), MULTI_CHAR('fish_n_3'), MULTI_CHAR('fish_n_1'), MULTI_CHAR('fish_n_2'), MULTI_CHAR('fish_n_4'), }; static const u64 fish_p0[6] = { - 'fi_pa_6n', 'fi_pa_5n', 'fi_pa_3n', 'fi_pa_1n', 'fi_pa_2n', 'fi_pa_4n', + MULTI_CHAR('fi_pa_6n'), MULTI_CHAR('fi_pa_5n'), MULTI_CHAR('fi_pa_3n'), MULTI_CHAR('fi_pa_1n'), MULTI_CHAR('fi_pa_2n'), MULTI_CHAR('fi_pa_4n'), }; static const u64 fish_p1[6] = { - 'fi_na_6n', 'fi_na_5n', 'fi_na_3n', 'fi_na_1n', 'fi_na_2n', 'fi_na_4n', + MULTI_CHAR('fi_na_6n'), MULTI_CHAR('fi_na_5n'), MULTI_CHAR('fi_na_3n'), MULTI_CHAR('fi_na_1n'), MULTI_CHAR('fi_na_2n'), MULTI_CHAR('fi_na_4n'), }; - static const u64 fish_p2[6] = {'fi_li_6n', 'fi_li_5n', 'fi_li_3n', - 'fi_li_1n', 'fi_li_2n', 'fi_li_4n'}; + static const u64 fish_p2[6] = {MULTI_CHAR('fi_li_6n'), MULTI_CHAR('fi_li_5n'), MULTI_CHAR('fi_li_3n'), + MULTI_CHAR('fi_li_1n'), MULTI_CHAR('fi_li_2n'), MULTI_CHAR('fi_li_4n')}; static const u64 fish_p3[6] = { - 'b_box_6n', 'b_box_5n', 'b_box_3n', 'b_box_1n', 'b_box_2n', 'b_box_4n', + MULTI_CHAR('b_box_6n'), MULTI_CHAR('b_box_5n'), MULTI_CHAR('b_box_3n'), MULTI_CHAR('b_box_1n'), MULTI_CHAR('b_box_2n'), MULTI_CHAR('b_box_4n'), }; static const u64 fish_p4[6] = { - 'r_box_6n', 'r_box_5n', 'r_box_3n', 'r_box_1n', 'r_box_2n', 'r_box_4n', + MULTI_CHAR('r_box_6n'), MULTI_CHAR('r_box_5n'), MULTI_CHAR('r_box_3n'), MULTI_CHAR('r_box_1n'), MULTI_CHAR('r_box_2n'), MULTI_CHAR('r_box_4n'), }; static const u64 fish_p5[6] = { - 'info_6_n', 'info_5_n', 'info_3_n', 'info_1_n', 'info_2_n', 'info_4_n', + MULTI_CHAR('info_6_n'), MULTI_CHAR('info_5_n'), MULTI_CHAR('info_3_n'), MULTI_CHAR('info_1_n'), MULTI_CHAR('info_2_n'), MULTI_CHAR('info_4_n'), }; static const u64 size_1[6] = { - 'size_t_6', 'size_t_5', 'size_t_3', 'size_t_1', 'size_t_2', 'size_t_4', + MULTI_CHAR('size_t_6'), MULTI_CHAR('size_t_5'), MULTI_CHAR('size_t_3'), MULTI_CHAR('size_t_1'), MULTI_CHAR('size_t_2'), MULTI_CHAR('size_t_4'), }; static const u64 size_unit_1[6] = { - 'cm_t_6', 'cm_t_5', 'cm_t_3', 'cm_t_1', 'cm_t_2', 'cm_t_4', + MULTI_CHAR('cm_t_6'), MULTI_CHAR('cm_t_5'), MULTI_CHAR('cm_t_3'), MULTI_CHAR('cm_t_1'), MULTI_CHAR('cm_t_2'), MULTI_CHAR('cm_t_4'), }; static const u64 count_1[6] = { - 'count_t6', 'count_t5', 'count_t3', 'count_t1', 'count_t2', 'count_t4', + MULTI_CHAR('count_t6'), MULTI_CHAR('count_t5'), MULTI_CHAR('count_t3'), MULTI_CHAR('count_t1'), MULTI_CHAR('count_t2'), MULTI_CHAR('count_t4'), }; static const u64 count_unit_1[6] = { - 'cou_t_6', 'cou_t_5', 'cou_t_3', 'cou_t_1', 'cou_t_2', 'cou_t_4', + MULTI_CHAR('cou_t_6'), MULTI_CHAR('cou_t_5'), MULTI_CHAR('cou_t_3'), MULTI_CHAR('cou_t_1'), MULTI_CHAR('cou_t_2'), MULTI_CHAR('cou_t_4'), }; static const u64 name_0[6] = { - 'name_6', 'name_5', 'name_3', 'name_1', 'name_2', 'name_4', + MULTI_CHAR('name_6'), MULTI_CHAR('name_5'), MULTI_CHAR('name_3'), MULTI_CHAR('name_1'), MULTI_CHAR('name_2'), MULTI_CHAR('name_4'), }; static const u64 fname_0[6] = { - 'f_name_6', 'f_name_5', 'f_name_3', 'f_name_1', 'f_name_2', 'f_name_4', + MULTI_CHAR('f_name_6'), MULTI_CHAR('f_name_5'), MULTI_CHAR('f_name_3'), MULTI_CHAR('f_name_1'), MULTI_CHAR('f_name_2'), MULTI_CHAR('f_name_4'), }; static const u32 name_id[6] = { @@ -280,7 +280,7 @@ void dMenu_Fishing_c::screenSetBase() { mpScreen = new J2DScreen(); mpScreen->setPriority("zelda_fish_window.blo", 0x20000, mpArchive); dPaneClass_showNullPane(mpScreen); - mpParent = new CPaneMgr(mpScreen, 'n_all', 2, NULL); + mpParent = new CPaneMgr(mpScreen, MULTI_CHAR('n_all'), 2, NULL); mpParent->setAlphaRate(0.0f); for (int i = 0; i < MAX_FINDABLE_FISHES; i++) { mpFishParent[i] = new CPaneMgr(mpScreen, fish_n[i], 0, NULL); @@ -291,15 +291,15 @@ void dMenu_Fishing_c::screenSetBase() { mpFishParts[4][i] = new CPaneMgr(mpScreen, fish_p4[i], 0, NULL); mpFishParts[5][i] = new CPaneMgr(mpScreen, fish_p5[i], 0, NULL); } - mpFishInfoParent[0] = new CPaneMgr(mpScreen, 'info_blu', 0, NULL); - mpFishInfoParent[1] = new CPaneMgr(mpScreen, 'info_red', 0, NULL); + mpFishInfoParent[0] = new CPaneMgr(mpScreen, MULTI_CHAR('info_blu'), 0, NULL); + mpFishInfoParent[1] = new CPaneMgr(mpScreen, MULTI_CHAR('info_red'), 0, NULL); #if (VERSION == VERSION_GCN_JPN) || (VERSION == VERSION_WII_JPN) - J2DTextBox* textBox = (J2DTextBox*)mpScreen->search('t_t00'); - mpScreen->search('f_t00')->hide(); + J2DTextBox* textBox = (J2DTextBox*)mpScreen->search(MULTI_CHAR('t_t00')); + mpScreen->search(MULTI_CHAR('f_t00'))->hide(); #else - J2DTextBox* textBox = (J2DTextBox*)mpScreen->search('f_t00'); - mpScreen->search('t_t00')->hide(); + J2DTextBox* textBox = (J2DTextBox*)mpScreen->search(MULTI_CHAR('f_t00')); + mpScreen->search(MULTI_CHAR('t_t00'))->hide(); #endif textBox->setFont(mDoExt_getSubFont()); @@ -328,8 +328,8 @@ void dMenu_Fishing_c::screenSetBase() { mpFishNameString[i]->setString(0x20, ""); dMeter2Info_getStringKanji(name_id[i], mpFishNameString[i]->getStringPtr(), NULL); } - mpInfoLargestString = (J2DTextBox*)mpScreen->search('inf_size'); - mpInfoNumCaughtString = (J2DTextBox*)mpScreen->search('inf_cou'); + mpInfoLargestString = (J2DTextBox*)mpScreen->search(MULTI_CHAR('inf_size')); + mpInfoNumCaughtString = (J2DTextBox*)mpScreen->search(MULTI_CHAR('inf_cou')); mpInfoLargestString->setFont(mDoExt_getMesgFont()); mpInfoNumCaughtString->setFont(mDoExt_getMesgFont()); mpInfoLargestString->setString(0x20, ""); @@ -339,8 +339,8 @@ void dMenu_Fishing_c::screenSetBase() { } void dMenu_Fishing_c::screenSetDoIcon() { - static const u64 text_a_tag[5] = {'atext1_1', 'atext1_2', 'atext1_3', 'atext1_4', 'atext1_5'}; - static const u64 text_b_tag[5] = {'btext1_1', 'btext1_2', 'btext1_3', 'btext1_4', 'btext1_5'}; + static const u64 text_a_tag[5] = {MULTI_CHAR('atext1_1'), MULTI_CHAR('atext1_2'), MULTI_CHAR('atext1_3'), MULTI_CHAR('atext1_4'), MULTI_CHAR('atext1_5')}; + static const u64 text_b_tag[5] = {MULTI_CHAR('btext1_1'), MULTI_CHAR('btext1_2'), MULTI_CHAR('btext1_3'), MULTI_CHAR('btext1_4'), MULTI_CHAR('btext1_5')}; mpIconScreen = new J2DScreen(); mpIconScreen->setPriority("zelda_collect_soubi_do_icon_parts.blo", 0x20000, mpArchive); diff --git a/src/d/d_menu_fmap2D.cpp b/src/d/d_menu_fmap2D.cpp index a8776ee94b..9963404887 100644 --- a/src/d/d_menu_fmap2D.cpp +++ b/src/d/d_menu_fmap2D.cpp @@ -177,10 +177,10 @@ dMenu_Fmap2DBack_c::dMenu_Fmap2DBack_c() { mpBaseRoot = new CPaneMgrAlphaMorf(mpBaseScreen, 'ROOT', 2, NULL); JUT_ASSERT(264, mpBaseRoot != NULL); - mpMapArea = new CPaneMgr(mpBaseScreen, 'center_n', 0, NULL); + mpMapArea = new CPaneMgr(mpBaseScreen, MULTI_CHAR('center_n'), 0, NULL); JUT_ASSERT(269, mpMapArea != NULL); - mpMapBlack = new CPaneMgr(mpBaseScreen, 'map_blak', 0, NULL); + mpMapBlack = new CPaneMgr(mpBaseScreen, MULTI_CHAR('map_blak'), 0, NULL); JUT_ASSERT(273, mpMapBlack != NULL); mpMeterHaihai = new dMeterHaihai_c(1); @@ -203,12 +203,12 @@ dMenu_Fmap2DBack_c::dMenu_Fmap2DBack_c() { dPaneClass_showNullPane(mpPointScreen); - mpPointParent = new CPaneMgr(mpPointScreen, 'f_po_n', 2, NULL); + mpPointParent = new CPaneMgr(mpPointScreen, MULTI_CHAR('f_po_n'), 2, NULL); JUT_ASSERT(301, mpPointParent != NULL); mpPointParent->scale(g_fmapHIO.mCursorScale, g_fmapHIO.mCursorScale); - static const u64 cur_tag[4] = {'f_po_ru', 'f_po_rd', 'f_po_ld', 'f_po_lu'}; + static const u64 cur_tag[4] = {MULTI_CHAR('f_po_ru'), MULTI_CHAR('f_po_rd'), MULTI_CHAR('f_po_ld'), MULTI_CHAR('f_po_lu')}; for (int i = 0; i < 4; i++) { J2DPicture* picture = static_cast(mpPointScreen->search(cur_tag[i])); @@ -389,7 +389,7 @@ void dMenu_Fmap2DBack_c::draw() { if (g_fmapHIO.mCursorDebugON) { mpPointParent->scale(g_fmapHIO.mCursorScale, g_fmapHIO.mCursorScale); - static const u64 cur_tag[4] = {'f_po_ru', 'f_po_rd', 'f_po_ld', 'f_po_lu'}; + static const u64 cur_tag[4] = {MULTI_CHAR('f_po_ru'), MULTI_CHAR('f_po_rd'), MULTI_CHAR('f_po_ld'), MULTI_CHAR('f_po_lu')}; for (int i = 0; i < 4; i++) { J2DPicture* picture = static_cast(mpPointScreen->search(cur_tag[i])); @@ -1813,8 +1813,8 @@ void dMenu_Fmap2DBack_c::btkAnimeLoop(f32 i_step) { mAnmFrame = 0.0f; } - mpBaseScreen->search('gold00_0')->setAnimation(mpBaseAnm); - mpBaseScreen->search('gold00_1')->setAnimation(mpBaseAnm); + mpBaseScreen->search(MULTI_CHAR('gold00_0'))->setAnimation(mpBaseAnm); + mpBaseScreen->search(MULTI_CHAR('gold00_1'))->setAnimation(mpBaseAnm); mpBaseScreen->animation(); } @@ -2186,46 +2186,46 @@ dMenu_Fmap2DTop_c::dMenu_Fmap2DTop_c(JKRExpHeap* i_heap, STControl* i_stick) { mpAnalogStickAlpha = NULL; mpAnalogStick = NULL; mpDpad = NULL; - mpTitleScreen->search('tri_Null')->hide(); + mpTitleScreen->search(MULTI_CHAR('tri_Null'))->hide(); #endif #if PLATFORM_GCN - mpArrowLAlpha[0] = new CPaneMgrAlpha(mpTitleScreen, 'yaji_04', 0, NULL); - mpArrowLAlpha[1] = new CPaneMgrAlpha(mpTitleScreen, 'yaji_05', 0, NULL); - mpArrowRAlpha[0] = new CPaneMgrAlpha(mpTitleScreen, 'yaji_06', 0, NULL); - mpArrowRAlpha[1] = new CPaneMgrAlpha(mpTitleScreen, 'yaji_07', 0, NULL); + mpArrowLAlpha[0] = new CPaneMgrAlpha(mpTitleScreen, MULTI_CHAR('yaji_04'), 0, NULL); + mpArrowLAlpha[1] = new CPaneMgrAlpha(mpTitleScreen, MULTI_CHAR('yaji_05'), 0, NULL); + mpArrowRAlpha[0] = new CPaneMgrAlpha(mpTitleScreen, MULTI_CHAR('yaji_06'), 0, NULL); + mpArrowRAlpha[1] = new CPaneMgrAlpha(mpTitleScreen, MULTI_CHAR('yaji_07'), 0, NULL); - mpDpadAlpha = new CPaneMgrAlpha(mpTitleScreen, 'juji_c_n', 2, NULL); + mpDpadAlpha = new CPaneMgrAlpha(mpTitleScreen, MULTI_CHAR('juji_c_n'), 2, NULL); mpDpadAlpha->setAlphaRate(0.0f); mpAnalogStickAlpha = new CPaneMgrAlpha(mpTitleScreen, 'as_n', 2, NULL); mpAnalogStickAlpha->setAlphaRate(0.0f); mpAnalogStick = new CPaneMgr(mpTitleScreen, 'as_n', 0, NULL); - mpDpad = new CPaneMgr(mpTitleScreen, 'juji_c_n', 0, NULL); + mpDpad = new CPaneMgr(mpTitleScreen, MULTI_CHAR('juji_c_n'), 0, NULL); #endif #if PLATFORM_SHIELD - mpButtonA = new CPaneMgr(mpTitleScreen, 'abtn_n', 2, NULL); + mpButtonA = new CPaneMgr(mpTitleScreen, MULTI_CHAR('abtn_n'), 2, NULL); JUT_ASSERT(3935, mpButtonA != NULL); - mpButtonB = new CPaneMgr(mpTitleScreen, 'bbtn_n', 2, NULL); + mpButtonB = new CPaneMgr(mpTitleScreen, MULTI_CHAR('bbtn_n'), 2, NULL); JUT_ASSERT(3938, mpButtonB != NULL); - mpButtonZ = new CPaneMgr(mpTitleScreen, 'j_scal_n', 2, NULL); + mpButtonZ = new CPaneMgr(mpTitleScreen, MULTI_CHAR('j_scal_n'), 2, NULL); JUT_ASSERT(3941, mpButtonZ != NULL); - mpButtonTextA = new CPaneMgr(mpTitleScreen, 'a_text_n', 2, NULL); + mpButtonTextA = new CPaneMgr(mpTitleScreen, MULTI_CHAR('a_text_n'), 2, NULL); JUT_ASSERT(3953, mpButtonTextA != NULL); - mpButtonTextB = new CPaneMgr(mpTitleScreen, 'b_text_n', 2, NULL); + mpButtonTextB = new CPaneMgr(mpTitleScreen, MULTI_CHAR('b_text_n'), 2, NULL); JUT_ASSERT(3956, mpButtonTextB != NULL); - mpButtonTextZ = new CPaneMgr(mpTitleScreen, 'z_text_n', 2, NULL); + mpButtonTextZ = new CPaneMgr(mpTitleScreen, MULTI_CHAR('z_text_n'), 2, NULL); JUT_ASSERT(3959, mpButtonTextZ != NULL); #else - mpButtonA = new CPaneMgr(mpTitleScreen, 'abtn_n1', 2, NULL); + mpButtonA = new CPaneMgr(mpTitleScreen, MULTI_CHAR('abtn_n1'), 2, NULL); JUT_ASSERT(3935, mpButtonA != NULL); - mpButtonB = new CPaneMgr(mpTitleScreen, 'bbtn_n1', 2, NULL); + mpButtonB = new CPaneMgr(mpTitleScreen, MULTI_CHAR('bbtn_n1'), 2, NULL); JUT_ASSERT(3938, mpButtonB != NULL); - mpButtonZ = new CPaneMgr(mpTitleScreen, 'zbtn_n1', 2, NULL); + mpButtonZ = new CPaneMgr(mpTitleScreen, MULTI_CHAR('zbtn_n1'), 2, NULL); JUT_ASSERT(3941, mpButtonZ != NULL); - mpButtonTextA = new CPaneMgr(mpTitleScreen, 'a_text_n', 2, NULL); + mpButtonTextA = new CPaneMgr(mpTitleScreen, MULTI_CHAR('a_text_n'), 2, NULL); JUT_ASSERT(3953, mpButtonTextA != NULL); - mpButtonTextB = new CPaneMgr(mpTitleScreen, 'b_text_n', 2, NULL); + mpButtonTextB = new CPaneMgr(mpTitleScreen, MULTI_CHAR('b_text_n'), 2, NULL); JUT_ASSERT(3956, mpButtonTextB != NULL); - mpButtonTextZ = new CPaneMgr(mpTitleScreen, 'z_text_n', 2, NULL); + mpButtonTextZ = new CPaneMgr(mpTitleScreen, MULTI_CHAR('z_text_n'), 2, NULL); JUT_ASSERT(3959, mpButtonTextZ != NULL); #endif mpButtonA->setAlphaRate(0.0f); @@ -2235,16 +2235,16 @@ dMenu_Fmap2DTop_c::dMenu_Fmap2DTop_c(JKRExpHeap* i_heap, STControl* i_stick) { mpButtonTextB->setAlphaRate(0.0f); mpButtonTextZ->setAlphaRate(0.0f); - mpNamePane = new CPaneMgr(mpTitleScreen, 'name_n', 0, NULL); + mpNamePane = new CPaneMgr(mpTitleScreen, MULTI_CHAR('name_n'), 0, NULL); JUT_ASSERT(3970, mpNamePane != NULL); - mpSubPane = new CPaneMgr(mpTitleScreen, 'sub_n_n', 0, NULL); + mpSubPane = new CPaneMgr(mpTitleScreen, MULTI_CHAR('sub_n_n'), 0, NULL); JUT_ASSERT(3974, mpSubPane != NULL); if (dMeter2Info_getMapStatus() == 9) { mpNamePane->hide(); mpSubPane->hide(); } - mpContPane = new CPaneMgr(mpTitleScreen, 'cont_n', 0, NULL); + mpContPane = new CPaneMgr(mpTitleScreen, MULTI_CHAR('cont_n'), 0, NULL); JUT_ASSERT(3984, mpContPane != NULL); mTitlePosX = mTitlePosY = 0.0f; @@ -2270,8 +2270,8 @@ dMenu_Fmap2DTop_c::dMenu_Fmap2DTop_c(JKRExpHeap* i_heap, STControl* i_stick) { mAnmFrame = 0.0f; - static const u64 area_name[3] = {'i_name_s', 'i_name' ,'i_name1'}; - static const u64 farea_name[3] = {'f_name_1', 'f_name3', 'f_name2'}; + static const u64 area_name[3] = {MULTI_CHAR('i_name_s'), MULTI_CHAR('i_name') ,MULTI_CHAR('i_name1')}; + static const u64 farea_name[3] = {MULTI_CHAR('f_name_1'), MULTI_CHAR('f_name3'), MULTI_CHAR('f_name2')}; for (int i = 0; i < 3; i++) { #if VERSION == VERSION_GCN_JPN static_cast(mpTitleScreen->search(area_name[i])) @@ -2287,17 +2287,17 @@ dMenu_Fmap2DTop_c::dMenu_Fmap2DTop_c(JKRExpHeap* i_heap, STControl* i_stick) { } #if PLATFORM_GCN static const u64 sfont_name[7] = { - 'sfont00', 'sfontl0', 'sfontl1', 'sfontl2', 'sfontb0', 'sfontb1', 'sfontb2' + MULTI_CHAR('sfont00'), MULTI_CHAR('sfontl0'), MULTI_CHAR('sfontl1'), MULTI_CHAR('sfontl2'), MULTI_CHAR('sfontb0'), MULTI_CHAR('sfontb1'), MULTI_CHAR('sfontb2') }; static const u64 ffont_name[7] = { - 'ffont00', 'ffontl0', 'ffontl1', 'ffontl2', 'ffontb0', 'ffontb3', 'ffontb4' + MULTI_CHAR('ffont00'), MULTI_CHAR('ffontl0'), MULTI_CHAR('ffontl1'), MULTI_CHAR('ffontl2'), MULTI_CHAR('ffontb0'), MULTI_CHAR('ffontb3'), MULTI_CHAR('ffontb4') }; #else static const u64 sfont_name[7] = { - 'sfont00', 'sfontl0', 'sfontl1', 'sfontl2', 'sfontb0', 'sfontb1', 'sfontb2' + MULTI_CHAR('sfont00'), MULTI_CHAR('sfontl0'), MULTI_CHAR('sfontl1'), MULTI_CHAR('sfontl2'), MULTI_CHAR('sfontb0'), MULTI_CHAR('sfontb1'), MULTI_CHAR('sfontb2') }; static const u64 ffont_name[7] = { - 'ffont01', 'ffontl3', 'ffontl4', 'ffontl5', 'ffontb3', 'ffontb4', 'ffontb5' + MULTI_CHAR('ffont01'), MULTI_CHAR('ffontl3'), MULTI_CHAR('ffontl4'), MULTI_CHAR('ffontl5'), MULTI_CHAR('ffontb3'), MULTI_CHAR('ffontb4'), MULTI_CHAR('ffontb5') }; #endif for (int i = 0; i < 7; i++) { @@ -2315,8 +2315,8 @@ dMenu_Fmap2DTop_c::dMenu_Fmap2DTop_c(JKRExpHeap* i_heap, STControl* i_stick) { } setTitleNameString(0x3e0); - static const u64 cont_zt[5] = {'cont_zt', 'cont_zt1', 'cont_zt2', 'cont_zt3', 'cont_zt4'}; - static const u64 font_zt[5] = {'font_zt1', 'font_zt2', 'font_zt3', 'font_zt4', 'font_zt5'}; + static const u64 cont_zt[5] = {MULTI_CHAR('cont_zt'), MULTI_CHAR('cont_zt1'), MULTI_CHAR('cont_zt2'), MULTI_CHAR('cont_zt3'), MULTI_CHAR('cont_zt4')}; + static const u64 font_zt[5] = {MULTI_CHAR('font_zt1'), MULTI_CHAR('font_zt2'), MULTI_CHAR('font_zt3'), MULTI_CHAR('font_zt4'), MULTI_CHAR('font_zt5')}; for (int i = 0; i < 5; i++) { #if VERSION == VERSION_GCN_JPN static_cast(mpTitleScreen->search(cont_zt[i])) @@ -2332,11 +2332,11 @@ dMenu_Fmap2DTop_c::dMenu_Fmap2DTop_c(JKRExpHeap* i_heap, STControl* i_stick) { } setZButtonString(0x529, 0xff); #if PLATFORM_GCN - static const u64 cont_bt[5] = {'cont_bt1', 'cont_bt2', 'cont_bt3', 'cont_bt4', 'cont_bt'}; - static const u64 font_bt[5] = {'font_bt1', 'font_bt2', 'font_bt3', 'font_bt4', 'font_bt5'}; + static const u64 cont_bt[5] = {MULTI_CHAR('cont_bt1'), MULTI_CHAR('cont_bt2'), MULTI_CHAR('cont_bt3'), MULTI_CHAR('cont_bt4'), MULTI_CHAR('cont_bt')}; + static const u64 font_bt[5] = {MULTI_CHAR('font_bt1'), MULTI_CHAR('font_bt2'), MULTI_CHAR('font_bt3'), MULTI_CHAR('font_bt4'), MULTI_CHAR('font_bt5')}; #else - static const u64 cont_bt[5] = {'cont_bt1', 'cont_bt2', 'cont_bt3', 'cont_bt4', 'cont_bt8'}; - static const u64 font_bt[5] = {'font_bt1', 'font_bt2', 'font_bt3', 'font_bt4', 'font_bt5'}; + static const u64 cont_bt[5] = {MULTI_CHAR('cont_bt1'), MULTI_CHAR('cont_bt2'), MULTI_CHAR('cont_bt3'), MULTI_CHAR('cont_bt4'), MULTI_CHAR('cont_bt8')}; + static const u64 font_bt[5] = {MULTI_CHAR('font_bt1'), MULTI_CHAR('font_bt2'), MULTI_CHAR('font_bt3'), MULTI_CHAR('font_bt4'), MULTI_CHAR('font_bt5')}; #endif for (int i = 0; i < 5; i++) { #if VERSION == VERSION_GCN_JPN @@ -2353,8 +2353,8 @@ dMenu_Fmap2DTop_c::dMenu_Fmap2DTop_c(JKRExpHeap* i_heap, STControl* i_stick) { } setBButtonString(0x522, 0xff); - static const u64 cont_at[5] = {'cont_at', 'cont_at1', 'cont_at2', 'cont_at3', 'cont_at4'}; - static const u64 font_at[5] = {'font_at1', 'font_at2', 'font_at3', 'font_at4', 'font_at5'}; + static const u64 cont_at[5] = {MULTI_CHAR('cont_at'), MULTI_CHAR('cont_at1'), MULTI_CHAR('cont_at2'), MULTI_CHAR('cont_at3'), MULTI_CHAR('cont_at4')}; + static const u64 font_at[5] = {MULTI_CHAR('font_at1'), MULTI_CHAR('font_at2'), MULTI_CHAR('font_at3'), MULTI_CHAR('font_at4'), MULTI_CHAR('font_at5')}; for (int i = 0; i < 5; i++) { #if VERSION == VERSION_GCN_JPN static_cast(mpTitleScreen->search(cont_at[i])) @@ -2371,8 +2371,8 @@ dMenu_Fmap2DTop_c::dMenu_Fmap2DTop_c(JKRExpHeap* i_heap, STControl* i_stick) { setAButtonString(0x527, 0xff); #if PLATFORM_GCN - static const u64 juji_c[5] = {'juji_c00', 'juji_c01', 'juji_c02', 'juji_c03', 'juji_c04'}; - static const u64 fuji_c[5] = {'fuji_c00', 'fuji_c01', 'fuji_c02', 'fuji_c03', 'fuji_c04'}; + static const u64 juji_c[5] = {MULTI_CHAR('juji_c00'), MULTI_CHAR('juji_c01'), MULTI_CHAR('juji_c02'), MULTI_CHAR('juji_c03'), MULTI_CHAR('juji_c04')}; + static const u64 fuji_c[5] = {MULTI_CHAR('fuji_c00'), MULTI_CHAR('fuji_c01'), MULTI_CHAR('fuji_c02'), MULTI_CHAR('fuji_c03'), MULTI_CHAR('fuji_c04')}; for (int i = 0; i < 5; i++) { #if VERSION == VERSION_GCN_JPN static_cast(mpTitleScreen->search(juji_c[i])) @@ -2388,8 +2388,8 @@ dMenu_Fmap2DTop_c::dMenu_Fmap2DTop_c(JKRExpHeap* i_heap, STControl* i_stick) { } setCrossLRString(0x3f9); - static const u64 ast_c[5] = {'ast_00', 'ast_01', 'ast_02', 'ast_03', 'ast_04'}; - static const u64 fst_c[5] = {'fst_00', 'fst_01', 'fst_02', 'fst_03', 'fst_04'}; + static const u64 ast_c[5] = {MULTI_CHAR('ast_00'), MULTI_CHAR('ast_01'), MULTI_CHAR('ast_02'), MULTI_CHAR('ast_03'), MULTI_CHAR('ast_04')}; + static const u64 fst_c[5] = {MULTI_CHAR('fst_00'), MULTI_CHAR('fst_01'), MULTI_CHAR('fst_02'), MULTI_CHAR('fst_03'), MULTI_CHAR('fst_04')}; for (int i = 0; i < 5; i++) { #if VERSION == VERSION_GCN_JPN static_cast(mpTitleScreen->search(ast_c[i])) @@ -2574,28 +2574,28 @@ void dMenu_Fmap2DTop_c::btkAnimeLoop(J2DAnmTextureSRTKey* i_anm, f32 i_delta) { mAnmFrame = 0.0f; } - mpTitleScreen->search('spot_0')->setAnimation(i_anm); + mpTitleScreen->search(MULTI_CHAR('spot_0'))->setAnimation(i_anm); mpTitleScreen->animation(); } void dMenu_Fmap2DTop_c::setMoyaAlpha(u8 i_alpha) { - mpTitleScreen->search('spot_0')->setAlpha(i_alpha); + mpTitleScreen->search(MULTI_CHAR('spot_0'))->setAlpha(i_alpha); } void dMenu_Fmap2DTop_c::setTitleNameString(u32 param_0) { #if VERSION == VERSION_GCN_JPN static const u64 sfont_name[7] = { - 'sfont00', 'sfontl0', 'sfontl1', 'sfontl2', 'sfontb0', 'sfontb1', 'sfontb2' + MULTI_CHAR('sfont00'), MULTI_CHAR('sfontl0'), MULTI_CHAR('sfontl1'), MULTI_CHAR('sfontl2'), MULTI_CHAR('sfontb0'), MULTI_CHAR('sfontb1'), MULTI_CHAR('sfontb2') }; #define setTitleNameString_font_name sfont_name #elif PLATFORM_GCN static const u64 ffont_name[7] = { - 'ffont00', 'ffontl0', 'ffontl1', 'ffontl2', 'ffontb0', 'ffontb3', 'ffontb4' + MULTI_CHAR('ffont00'), MULTI_CHAR('ffontl0'), MULTI_CHAR('ffontl1'), MULTI_CHAR('ffontl2'), MULTI_CHAR('ffontb0'), MULTI_CHAR('ffontb3'), MULTI_CHAR('ffontb4') }; #define setTitleNameString_font_name ffont_name #else static const u64 ffont_name[7] = { - 'ffont01', 'ffontl3', 'ffontl4', 'ffontl5', 'ffontb3', 'ffontb4', 'ffontb5' + MULTI_CHAR('ffont01'), MULTI_CHAR('ffontl3'), MULTI_CHAR('ffontl4'), MULTI_CHAR('ffontl5'), MULTI_CHAR('ffontb3'), MULTI_CHAR('ffontb4'), MULTI_CHAR('ffontb5') }; #define setTitleNameString_font_name ffont_name #endif @@ -2616,10 +2616,10 @@ void dMenu_Fmap2DTop_c::setTitleNameString(u32 param_0) { void dMenu_Fmap2DTop_c::setAreaNameString(u32 param_0) { #if VERSION == VERSION_GCN_JPN - static const u64 iarea_name[3] = {'i_name_s', 'i_name', 'i_name1'}; + static const u64 iarea_name[3] = {MULTI_CHAR('i_name_s'), MULTI_CHAR('i_name'), MULTI_CHAR('i_name1')}; #define setAreaNameString_area_name iarea_name #else - static const u64 farea_name[3] = {'f_name_1', 'f_name3', 'f_name2'}; + static const u64 farea_name[3] = {MULTI_CHAR('f_name_1'), MULTI_CHAR('f_name3'), MULTI_CHAR('f_name2')}; #define setAreaNameString_area_name farea_name #endif for (int i = 0; i < 3; i++) { @@ -2643,10 +2643,10 @@ void dMenu_Fmap2DTop_c::setZButtonString(u32 param_0, u8 i_alpha) { } #if VERSION == VERSION_GCN_JPN - static const u64 cont_zt[5] = {'cont_zt', 'cont_zt1', 'cont_zt2', 'cont_zt3', 'cont_zt4'}; + static const u64 cont_zt[5] = {MULTI_CHAR('cont_zt'), MULTI_CHAR('cont_zt1'), MULTI_CHAR('cont_zt2'), MULTI_CHAR('cont_zt3'), MULTI_CHAR('cont_zt4')}; #define setZButtonString_font_zt cont_zt #else - static const u64 font_zt[5] = {'font_zt1', 'font_zt2', 'font_zt3', 'font_zt4', 'font_zt5'}; + static const u64 font_zt[5] = {MULTI_CHAR('font_zt1'), MULTI_CHAR('font_zt2'), MULTI_CHAR('font_zt3'), MULTI_CHAR('font_zt4'), MULTI_CHAR('font_zt5')}; #define setZButtonString_font_zt font_zt #endif if (param_0 == 0 || !isWarpAccept()) { @@ -2677,10 +2677,10 @@ void dMenu_Fmap2DTop_c::setZButtonString(u32 param_0, u8 i_alpha) { void dMenu_Fmap2DTop_c::setBButtonString(u32 param_0, u8 i_alpha) { #if VERSION == VERSION_GCN_JPN - static const u64 cont_bt[5] = {'cont_bt1', 'cont_bt2', 'cont_bt3', 'cont_bt4', 'cont_bt'}; + static const u64 cont_bt[5] = {MULTI_CHAR('cont_bt1'), MULTI_CHAR('cont_bt2'), MULTI_CHAR('cont_bt3'), MULTI_CHAR('cont_bt4'), MULTI_CHAR('cont_bt')}; #define setBButtonString_font_bt cont_bt #else - static const u64 font_bt[5] = {'font_bt1', 'font_bt2', 'font_bt3', 'font_bt4', 'font_bt5'}; + static const u64 font_bt[5] = {MULTI_CHAR('font_bt1'), MULTI_CHAR('font_bt2'), MULTI_CHAR('font_bt3'), MULTI_CHAR('font_bt4'), MULTI_CHAR('font_bt5')}; #define setBButtonString_font_bt font_bt #endif if (param_0 == 0) { @@ -2703,10 +2703,10 @@ void dMenu_Fmap2DTop_c::setBButtonString(u32 param_0, u8 i_alpha) { void dMenu_Fmap2DTop_c::setAButtonString(u32 param_0, u8 i_alpha) { #if VERSION == VERSION_GCN_JPN - static const u64 cont_at[5] = {'cont_at', 'cont_at1', 'cont_at2', 'cont_at3', 'cont_at4'}; + static const u64 cont_at[5] = {MULTI_CHAR('cont_at'), MULTI_CHAR('cont_at1'), MULTI_CHAR('cont_at2'), MULTI_CHAR('cont_at3'), MULTI_CHAR('cont_at4')}; #define setAButtonString_font_at cont_at #else - static const u64 font_at[5] = {'font_at1', 'font_at2', 'font_at3', 'font_at4', 'font_at5'}; + static const u64 font_at[5] = {MULTI_CHAR('font_at1'), MULTI_CHAR('font_at2'), MULTI_CHAR('font_at3'), MULTI_CHAR('font_at4'), MULTI_CHAR('font_at5')}; #define setAButtonString_font_at font_at #endif if (param_0 == 0) { @@ -2730,23 +2730,23 @@ void dMenu_Fmap2DTop_c::setAButtonString(u32 param_0, u8 i_alpha) { void dMenu_Fmap2DTop_c::setCrossLRString(u32 param_0) { #if PLATFORM_GCN || (VERSION == VERSION_SHIELD) #if VERSION == VERSION_GCN_JPN - static const u64 juji_c[5] = {'juji_c00', 'juji_c01', 'juji_c02', 'juji_c03', 'juji_c04'}; + static const u64 juji_c[5] = {MULTI_CHAR('juji_c00'), MULTI_CHAR('juji_c01'), MULTI_CHAR('juji_c02'), MULTI_CHAR('juji_c03'), MULTI_CHAR('juji_c04')}; #else - static const u64 juji_c[5] = {'fuji_c00', 'fuji_c01', 'fuji_c02', 'fuji_c03', 'fuji_c04'}; + static const u64 juji_c[5] = {MULTI_CHAR('fuji_c00'), MULTI_CHAR('fuji_c01'), MULTI_CHAR('fuji_c02'), MULTI_CHAR('fuji_c03'), MULTI_CHAR('fuji_c04')}; #endif if (param_0 == 0) { for (int i = 0; i < 5; i++) { J2DTextBox* text_box = static_cast(mpTitleScreen->search(juji_c[i])); strcpy(text_box->getStringPtr(), ""); } - mpTitleScreen->search('juy_sha0')->show(); + mpTitleScreen->search(MULTI_CHAR('juy_sha0'))->show(); mAlphaDpad = 1; } else { for (int i = 0; i < 5; i++) { J2DTextBox* text_box = static_cast(mpTitleScreen->search(juji_c[i])); dMeter2Info_getStringKanji(param_0, text_box->getStringPtr(), NULL); } - mpTitleScreen->search('juy_sha0')->show(); + mpTitleScreen->search(MULTI_CHAR('juy_sha0'))->show(); mAlphaDpad = 2; } #endif @@ -2755,23 +2755,23 @@ void dMenu_Fmap2DTop_c::setCrossLRString(u32 param_0) { void dMenu_Fmap2DTop_c::set3DStickString(u32 param_0) { #if PLATFORM_GCN || (VERSION == VERSION_SHIELD) #if VERSION == VERSION_GCN_JPN - static const u64 ast_c[5] = {'ast_00', 'ast_01', 'ast_02', 'ast_03', 'ast_04'}; + static const u64 ast_c[5] = {MULTI_CHAR('ast_00'), MULTI_CHAR('ast_01'), MULTI_CHAR('ast_02'), MULTI_CHAR('ast_03'), MULTI_CHAR('ast_04')}; #else - static const u64 ast_c[5] = {'fst_00', 'fst_01', 'fst_02', 'fst_03', 'fst_04'}; + static const u64 ast_c[5] = {MULTI_CHAR('fst_00'), MULTI_CHAR('fst_01'), MULTI_CHAR('fst_02'), MULTI_CHAR('fst_03'), MULTI_CHAR('fst_04')}; #endif if (param_0 == 0) { for (int i = 0; i < 5; i++) { J2DTextBox* text_box = static_cast(mpTitleScreen->search(ast_c[i])); strcpy(text_box->getStringPtr(), ""); } - mpTitleScreen->search('as_sha0')->show(); + mpTitleScreen->search(MULTI_CHAR('as_sha0'))->show(); mAlphaAnalogStick = 1; } else { for (int i = 0; i < 5; i++) { J2DTextBox* text_box = static_cast(mpTitleScreen->search(ast_c[i])); dMeter2Info_getStringKanji(param_0, text_box->getStringPtr(), NULL); } - mpTitleScreen->search('as_sha0')->show(); + mpTitleScreen->search(MULTI_CHAR('as_sha0'))->show(); mAlphaAnalogStick = 2; } #endif diff --git a/src/d/d_menu_insect.cpp b/src/d/d_menu_insect.cpp index c8f8cc6d51..2e9b224217 100644 --- a/src/d/d_menu_insect.cpp +++ b/src/d/d_menu_insect.cpp @@ -440,20 +440,20 @@ void dMenu_Insect_c::explain_close_move() { void dMenu_Insect_c::screenSetBase() { static const u64 insect_tag[MAX_INSECT_NUM] = { - 'ari_os', 'ari_ms', 'kag_os', 'kag_ms', 'kab_os', 'kab_ms', 'kam_os', 'kam_mes', - 'kuwa_os', 'kuwa_mes', 'dan_os', 'dan_mes', 'cho_os', 'cho_ms', 'tent_os', 'tent_mes', - 'kata_os', 'kata_mes', 'nana_os', 'nana_mes', 'bat_os', 'bat_mes', 'tonb_os', 'tonb_mes', + MULTI_CHAR('ari_os'), MULTI_CHAR('ari_ms'), MULTI_CHAR('kag_os'), MULTI_CHAR('kag_ms'), MULTI_CHAR('kab_os'), MULTI_CHAR('kab_ms'), MULTI_CHAR('kam_os'), MULTI_CHAR('kam_mes'), + MULTI_CHAR('kuwa_os'), MULTI_CHAR('kuwa_mes'), MULTI_CHAR('dan_os'), MULTI_CHAR('dan_mes'), MULTI_CHAR('cho_os'), MULTI_CHAR('cho_ms'), MULTI_CHAR('tent_os'), MULTI_CHAR('tent_mes'), + MULTI_CHAR('kata_os'), MULTI_CHAR('kata_mes'), MULTI_CHAR('nana_os'), MULTI_CHAR('nana_mes'), MULTI_CHAR('bat_os'), MULTI_CHAR('bat_mes'), MULTI_CHAR('tonb_os'), MULTI_CHAR('tonb_mes'), }; static const u64 ageha_tag[MAX_INSECT_NUM] = { - 'ageha00', 'ageha01', 'ageha02', 'ageha03', 'ageha04', 'ageha05', 'ageha06', 'ageha07', - 'ageha08', 'ageha09', 'ageha10', 'ageha11', 'ageha12', 'ageha13', 'ageha14', 'ageha15', - 'ageha16', 'ageha17', 'ageha18', 'ageha19', 'ageha20', 'ageha21', 'ageha22', 'ageha23', + MULTI_CHAR('ageha00'), MULTI_CHAR('ageha01'), MULTI_CHAR('ageha02'), MULTI_CHAR('ageha03'), MULTI_CHAR('ageha04'), MULTI_CHAR('ageha05'), MULTI_CHAR('ageha06'), MULTI_CHAR('ageha07'), + MULTI_CHAR('ageha08'), MULTI_CHAR('ageha09'), MULTI_CHAR('ageha10'), MULTI_CHAR('ageha11'), MULTI_CHAR('ageha12'), MULTI_CHAR('ageha13'), MULTI_CHAR('ageha14'), MULTI_CHAR('ageha15'), + MULTI_CHAR('ageha16'), MULTI_CHAR('ageha17'), MULTI_CHAR('ageha18'), MULTI_CHAR('ageha19'), MULTI_CHAR('ageha20'), MULTI_CHAR('ageha21'), MULTI_CHAR('ageha22'), MULTI_CHAR('ageha23'), }; mpScreen = new J2DScreen(); mpScreen->setPriority("zelda_gold_insects.blo", 0x20000, mpArchive); dPaneClass_showNullPane(mpScreen); - mpParent = new CPaneMgr(mpScreen, 'n_all', 2, NULL); + mpParent = new CPaneMgr(mpScreen, MULTI_CHAR('n_all'), 2, NULL); mpParent->setAlphaRate(0.0f); for (int i = 0; i < MAX_INSECT_NUM; i++) { mpINSParent[i] = new CPaneMgr(mpScreen, insect_tag[i], 0, NULL); @@ -474,11 +474,11 @@ void dMenu_Insect_c::screenSetBase() { } } #if VERSION == VERSION_GCN_JPN - J2DTextBox* textBox = (J2DTextBox*)mpScreen->search('t_t00'); - mpScreen->search('f_t00')->hide(); + J2DTextBox* textBox = (J2DTextBox*)mpScreen->search(MULTI_CHAR('t_t00')); + mpScreen->search(MULTI_CHAR('f_t00'))->hide(); #else - J2DTextBox* textBox = (J2DTextBox*)mpScreen->search('f_t00'); - mpScreen->search('t_t00')->hide(); + J2DTextBox* textBox = (J2DTextBox*)mpScreen->search(MULTI_CHAR('f_t00')); + mpScreen->search(MULTI_CHAR('t_t00'))->hide(); #endif textBox->setFont(mDoExt_getSubFont()); textBox->setString(0x200, ""); @@ -489,27 +489,27 @@ void dMenu_Insect_c::screenSetExplain() { mpExpScreen = new J2DScreen(); mpExpScreen->setPriority("zelda_gold_insects_info.blo", 0x20000, mpArchive); dPaneClass_showNullPane(mpExpScreen); - mpExpParent = new CPaneMgr(mpExpScreen, 'n_all', 2, NULL); + mpExpParent = new CPaneMgr(mpExpScreen, MULTI_CHAR('n_all'), 2, NULL); mpExpParent->setAlphaRate(0.0f); - mpExpSubWin[0] = new CPaneMgr(mpExpScreen, 'in_win_n', 0, NULL); - mpExpSubWin[1] = new CPaneMgr(mpExpScreen, 'w_d_mo_n', 0, NULL); + mpExpSubWin[0] = new CPaneMgr(mpExpScreen, MULTI_CHAR('in_win_n'), 0, NULL); + mpExpSubWin[1] = new CPaneMgr(mpExpScreen, MULTI_CHAR('w_d_mo_n'), 0, NULL); if (field_0xf6 == 0) { mpExpSubWin[1]->hide(); } #if VERSION == VERSION_GCN_JPN - mpInfoText = new CPaneMgr(mpExpScreen, 'mg_3line', 0, NULL); - mpExpScreen->search('n_e4line')->hide(); - field_0x5c = (J2DTextBox*)mpExpScreen->search('w_msg_jp'); - mpExpScreen->search('ms_for_2')->hide(); + mpInfoText = new CPaneMgr(mpExpScreen, MULTI_CHAR('mg_3line'), 0, NULL); + mpExpScreen->search(MULTI_CHAR('n_e4line'))->hide(); + field_0x5c = (J2DTextBox*)mpExpScreen->search(MULTI_CHAR('w_msg_jp')); + mpExpScreen->search(MULTI_CHAR('ms_for_2'))->hide(); #else - mpInfoText = new CPaneMgr(mpExpScreen, 'mg_e4lin', 0, NULL); - mpExpScreen->search('n_3line')->hide(); - field_0x5c = (J2DTextBox*)mpExpScreen->search('ms_for_2'); - mpExpScreen->search('w_msg_jp')->hide(); + mpInfoText = new CPaneMgr(mpExpScreen, MULTI_CHAR('mg_e4lin'), 0, NULL); + mpExpScreen->search(MULTI_CHAR('n_3line'))->hide(); + field_0x5c = (J2DTextBox*)mpExpScreen->search(MULTI_CHAR('ms_for_2')); + mpExpScreen->search(MULTI_CHAR('w_msg_jp'))->hide(); #endif - mpExpScreen->search('ms_for_3')->hide(); - field_0x54[0] = (J2DPicture*)mpExpScreen->search('insects'); - field_0x54[1] = (J2DPicture*)mpExpScreen->search('insectss'); + mpExpScreen->search(MULTI_CHAR('ms_for_3'))->hide(); + field_0x54[0] = (J2DPicture*)mpExpScreen->search(MULTI_CHAR('insects')); + field_0x54[1] = (J2DPicture*)mpExpScreen->search(MULTI_CHAR('insectss')); J2DTextBox* textBox = (J2DTextBox*)mpInfoText->getPanePtr(); textBox->setFont(mDoExt_getMesgFont()); J2DTextBox* textBox2 = (J2DTextBox*)mpInfoText->getPanePtr(); @@ -520,10 +520,10 @@ void dMenu_Insect_c::screenSetExplain() { void dMenu_Insect_c::screenSetDoIcon() { static const u64 text_a_tag[5] = { - 'atext1_1', 'atext1_2', 'atext1_3', 'atext1_4', 'atext1_5', + MULTI_CHAR('atext1_1'), MULTI_CHAR('atext1_2'), MULTI_CHAR('atext1_3'), MULTI_CHAR('atext1_4'), MULTI_CHAR('atext1_5'), }; static const u64 text_b_tag[5] = { - 'btext1_1', 'btext1_2', 'btext1_3', 'btext1_4', 'btext1_5', + MULTI_CHAR('btext1_1'), MULTI_CHAR('btext1_2'), MULTI_CHAR('btext1_3'), MULTI_CHAR('btext1_4'), MULTI_CHAR('btext1_5'), }; mpIconScreen = new J2DScreen(); diff --git a/src/d/d_menu_item_explain.cpp b/src/d/d_menu_item_explain.cpp index 5f3dd5c2d4..665d2b9928 100644 --- a/src/d/d_menu_item_explain.cpp +++ b/src/d/d_menu_item_explain.cpp @@ -41,17 +41,17 @@ static moveFunc move_process[] = { dMenu_ItemExplain_c::dMenu_ItemExplain_c(JKRExpHeap* i_heap, JKRArchive* i_archive, STControl* i_stick, bool param_3) { static const u64 name_tag[4] = { - 'item_n04', - 'item_n05', - 'item_n06', - 'item_n07', + MULTI_CHAR('item_n04'), + MULTI_CHAR('item_n05'), + MULTI_CHAR('item_n06'), + MULTI_CHAR('item_n07'), }; static const u64 fame_tag[4] = { - 'f_item_1', - 'f_item_2', - 'f_item_3', - 'f_item_4', + MULTI_CHAR('f_item_1'), + MULTI_CHAR('f_item_2'), + MULTI_CHAR('f_item_3'), + MULTI_CHAR('f_item_4'), }; mpHeap = i_heap; @@ -96,18 +96,18 @@ dMenu_ItemExplain_c::dMenu_ItemExplain_c(JKRExpHeap* i_heap, JKRArchive* i_archi mpKanteraMeter = new dKantera_icon_c(); mpInfoScreen = new J2DScreen(); mpInfoScreen->setPriority("zelda_item_screen_info.blo", 0x20000, mpArchive); - mpParent[0] = new CPaneMgr(mpInfoScreen, 'n_all', 2, NULL); + mpParent[0] = new CPaneMgr(mpInfoScreen, MULTI_CHAR('n_all'), 2, NULL); mpParent[1] = NULL; - mpLabel = new CPaneMgr(mpInfoScreen, 'label_n', 0, NULL); + mpLabel = new CPaneMgr(mpInfoScreen, MULTI_CHAR('label_n'), 0, NULL); mDescAlpha = 0.0f; field_0x78 = 0; mAlphaRatio = 201.0f; #if VERSION == VERSION_GCN_JPN - mpInfoText = new CPaneMgr(mpInfoScreen, 'i_text4', 0, NULL); - mpInfoScreen->search('i_text1')->hide(); + mpInfoText = new CPaneMgr(mpInfoScreen, MULTI_CHAR('i_text4'), 0, NULL); + mpInfoScreen->search(MULTI_CHAR('i_text1'))->hide(); #else - mpInfoText = new CPaneMgr(mpInfoScreen, 'i_text1', 0, NULL); - mpInfoScreen->search('i_text4')->hide(); + mpInfoText = new CPaneMgr(mpInfoScreen, MULTI_CHAR('i_text1'), 0, NULL); + mpInfoScreen->search(MULTI_CHAR('i_text4'))->hide(); #endif ((J2DTextBox*)(mpInfoText->getPanePtr()))->setFont(mDoExt_getMesgFont()); ((J2DTextBox*)(mpInfoText->getPanePtr()))->setString(0x200, ""); @@ -123,25 +123,25 @@ dMenu_ItemExplain_c::dMenu_ItemExplain_c(JKRExpHeap* i_heap, JKRArchive* i_archi ((J2DTextBox*)(mpNameText[i]->getPanePtr()))->setFont(mDoExt_getMesgFont()); ((J2DTextBox*)(mpNameText[i]->getPanePtr()))->setString(0x20, ""); } - mpInfoIcon = new CPaneMgr(mpInfoScreen, 'i_icon_p', 0, NULL); + mpInfoIcon = new CPaneMgr(mpInfoScreen, MULTI_CHAR('i_icon_p'), 0, NULL); for (int i = 0; i < 4; i++) { mpExpItemTex[i] = (ResTIMG*)mpHeap->alloc(0xC00, 0x20); } mpExpItemPane[0] = new J2DPicture( - 'i_icon_1', + MULTI_CHAR('i_icon_1'), JGeometry::TBox2(0.0f, 0.0f, mpInfoIcon->getInitSizeX(), mpInfoIcon->getInitSizeY()), ((J2DPicture*)(mpInfoIcon->getPanePtr()))->getTexture(0)->getTexInfo(), NULL); mpExpItemPane[0]->setBasePosition(J2DBasePosition_4); mpInfoIcon->getPanePtr()->appendChild(mpExpItemPane[0]); mpExpItemPane[1] = new J2DPicture( - 'i_icon_2', + MULTI_CHAR('i_icon_2'), JGeometry::TBox2(0.0f, 0.0f, mpInfoIcon->getInitSizeX(), mpInfoIcon->getInitSizeY()), ((J2DPicture*)(mpInfoIcon->getPanePtr()))->getTexture(0)->getTexInfo(), NULL); mpExpItemPane[1]->setBasePosition(J2DBasePosition_4); mpInfoIcon->getPanePtr()->appendChild(mpExpItemPane[1]); mpExpItemPane[2] = new J2DPicture( - 'i_icon_3', + MULTI_CHAR('i_icon_3'), JGeometry::TBox2(0.0f, 0.0f, mpInfoIcon->getInitSizeX(), mpInfoIcon->getInitSizeY()), ((J2DPicture*)(mpInfoIcon->getPanePtr()))->getTexture(0)->getTexInfo(), NULL); mpExpItemPane[2]->setBasePosition(J2DBasePosition_4); @@ -151,7 +151,7 @@ dMenu_ItemExplain_c::dMenu_ItemExplain_c(JKRExpHeap* i_heap, JKRArchive* i_archi 'TIMG', dMeter2Info_getNumberTextureName(0)); for (int i = 0; i < 3; i++) { mpItemNumTex[i] = new J2DPicture(texResource); - mpInfoScreen->search('info_n1')->appendChild(mpItemNumTex[i]); + mpInfoScreen->search(MULTI_CHAR('info_n1'))->appendChild(mpItemNumTex[i]); mpItemNumTex[i]->move(i * 16.0f + (mpInfoIcon->getPosX() + mpInfoIcon->getSizeX() * 0.5f), mpInfoIcon->getPosY() + mpInfoIcon->getSizeY() - 3.0f); mpItemNumTex[i]->resize(16.0f, 16.0f); @@ -395,7 +395,7 @@ void dMenu_ItemExplain_c::open_init() { } } setNumber(); - mpInfoScreen->search('i_i_back')->show(); + mpInfoScreen->search(MULTI_CHAR('i_i_back'))->show(); field_0xe6 = 0; } else { mpInfoIcon->hide(); @@ -403,7 +403,7 @@ void dMenu_ItemExplain_c::open_init() { mpExpItemPane[i]->hide(); } setNumber(); - mpInfoScreen->search('i_i_back')->hide(); + mpInfoScreen->search(MULTI_CHAR('i_i_back'))->hide(); field_0xe6 = 1; } if (mpArrow != NULL) { diff --git a/src/d/d_menu_letter.cpp b/src/d/d_menu_letter.cpp index 95c2d0ae65..0c91e663b3 100644 --- a/src/d/d_menu_letter.cpp +++ b/src/d/d_menu_letter.cpp @@ -428,11 +428,11 @@ void dMenu_Letter_c::wait_move() { if (mProcess == 1 || mProcess == 2) { #if VERSION == VERSION_GCN_JPN - J2DTextBox* textBox = (J2DTextBox*)mpBaseScreen->search('t_t00'); - mpBaseScreen->search('f_t_00')->hide(); + J2DTextBox* textBox = (J2DTextBox*)mpBaseScreen->search(MULTI_CHAR('t_t00')); + mpBaseScreen->search(MULTI_CHAR('f_t_00'))->hide(); #else - J2DTextBox* textBox = (J2DTextBox*)mpBaseScreen->search('f_t_00'); - mpBaseScreen->search('t_t00')->hide(); + J2DTextBox* textBox = (J2DTextBox*)mpBaseScreen->search(MULTI_CHAR('f_t_00')); + mpBaseScreen->search(MULTI_CHAR('t_t00'))->hide(); #endif dComIfGp_setMessageCountNumber(field_0x374 + (field_0x36f + 1) * 100); mpString->getString(0x4d6, textBox, NULL, NULL, NULL, 0); @@ -550,7 +550,7 @@ void dMenu_Letter_c::read_move_init() { setBButtonString(0x3f9); } CPaneMgr paneMgr; - J2DPane* pane = mpLetterScreen[0]->search('set_ya_n'); + J2DPane* pane = mpLetterScreen[0]->search(MULTI_CHAR('set_ya_n')); Vec pos = paneMgr.getGlobalVtxCenter(pane, false, 0); mpArrow->setPos(pos.x, pos.y); } else { @@ -591,7 +591,7 @@ void dMenu_Letter_c::read_move_move() { mpArrow->arwAnimeMove(); } CPaneMgr paneMgr; - J2DPane* pane = mpLetterScreen[0]->search('set_ya_n'); + J2DPane* pane = mpLetterScreen[0]->search(MULTI_CHAR('set_ya_n')); Vec pos = paneMgr.getGlobalVtxCenter(pane, false, 0); mpArrow->setPos(pos.x, pos.y); } @@ -704,51 +704,51 @@ void dMenu_Letter_c::read_close_move() { void dMenu_Letter_c::screenSetMenu() { static const u64 tag_sub0[6] = { - 'menu_t0s', 'menu_t1s', 'menu_t2s', 'menu_t3s', 'menu_t4s', 'menu_t5s', + MULTI_CHAR('menu_t0s'), MULTI_CHAR('menu_t1s'), MULTI_CHAR('menu_t2s'), MULTI_CHAR('menu_t3s'), MULTI_CHAR('menu_t4s'), MULTI_CHAR('menu_t5s'), }; static const u64 tag_sub1[6] = { - 'menu_t0', 'menu_t1', 'menu_t2', 'menu_t3', 'menu_t4', 'menu_t5', + MULTI_CHAR('menu_t0'), MULTI_CHAR('menu_t1'), MULTI_CHAR('menu_t2'), MULTI_CHAR('menu_t3'), MULTI_CHAR('menu_t4'), MULTI_CHAR('menu_t5'), }; static const u64 tag_name0[6] = { - 'menu_t6s', 'menu_f7s', 'menu_f8s', 'menu_t9s', 'menu_10s', 'menu_11s', + MULTI_CHAR('menu_t6s'), MULTI_CHAR('menu_f7s'), MULTI_CHAR('menu_f8s'), MULTI_CHAR('menu_t9s'), MULTI_CHAR('menu_10s'), MULTI_CHAR('menu_11s'), }; static const u64 tag_name1[6] = { - 'menu_f6', 'menu_f7', 'menu_t8', 'menu_t9', 'menu_t10', 'menu_t11', + MULTI_CHAR('menu_f6'), MULTI_CHAR('menu_f7'), MULTI_CHAR('menu_t8'), MULTI_CHAR('menu_t9'), MULTI_CHAR('menu_t10'), MULTI_CHAR('menu_t11'), }; static const u64 ftag_sub0[6] = { - 'fenu_t0s', 'fenu_t1s', 'fenu_t2s', 'fenu_t3s', 'fenu_t4s', 'fenu_t5s', + MULTI_CHAR('fenu_t0s'), MULTI_CHAR('fenu_t1s'), MULTI_CHAR('fenu_t2s'), MULTI_CHAR('fenu_t3s'), MULTI_CHAR('fenu_t4s'), MULTI_CHAR('fenu_t5s'), }; static const u64 ftag_sub1[6] = { - 'fenu_t0', 'fenu_t1', 'fenu_t2', 'fenu_t3', 'fenu_t4', 'fenu_t5', + MULTI_CHAR('fenu_t0'), MULTI_CHAR('fenu_t1'), MULTI_CHAR('fenu_t2'), MULTI_CHAR('fenu_t3'), MULTI_CHAR('fenu_t4'), MULTI_CHAR('fenu_t5'), }; static const u64 ftag_name0[6] = { - 'fenu_t6s', 'fenu_t7s', 'fenu_f8s', 'fenu_t9s', 'fenu_10s', 'fenu_11s', + MULTI_CHAR('fenu_t6s'), MULTI_CHAR('fenu_t7s'), MULTI_CHAR('fenu_f8s'), MULTI_CHAR('fenu_t9s'), MULTI_CHAR('fenu_10s'), MULTI_CHAR('fenu_11s'), }; static const u64 ftag_name1[6] = { - 'fenu_t6', 'fenu_t7', 'fenu_t8', 'fenu_t9', 'fenu_t10', 'fenu_t11', + MULTI_CHAR('fenu_t6'), MULTI_CHAR('fenu_t7'), MULTI_CHAR('fenu_t8'), MULTI_CHAR('fenu_t9'), MULTI_CHAR('fenu_t10'), MULTI_CHAR('fenu_t11'), }; static const u64 tag_letter[6] = { - 'let_00_n', 'let_01_n', 'let_02_n', 'let_03_n', 'let_04_n', 'let_05_n', + MULTI_CHAR('let_00_n'), MULTI_CHAR('let_01_n'), MULTI_CHAR('let_02_n'), MULTI_CHAR('let_03_n'), MULTI_CHAR('let_04_n'), MULTI_CHAR('let_05_n'), }; static const u64 tag_frame[6] = { - 'flame_00', 'flame_01', 'flame_02', 'flame_03', 'flame_04', 'flame_05', + MULTI_CHAR('flame_00'), MULTI_CHAR('flame_01'), MULTI_CHAR('flame_02'), MULTI_CHAR('flame_03'), MULTI_CHAR('flame_04'), MULTI_CHAR('flame_05'), }; static const u64 tag_menu0[6] = { #if VERSION == VERSION_GCN_JPN - 'menu_t0', 'menu_t1', 'menu_t2', 'menu_t3', 'menu_t4', 'menu_t5', + MULTI_CHAR('menu_t0'), MULTI_CHAR('menu_t1'), MULTI_CHAR('menu_t2'), MULTI_CHAR('menu_t3'), MULTI_CHAR('menu_t4'), MULTI_CHAR('menu_t5'), #else - 'fenu_t0', 'fenu_t1', 'fenu_t2', 'fenu_t3', 'fenu_t4', 'fenu_t5', + MULTI_CHAR('fenu_t0'), MULTI_CHAR('fenu_t1'), MULTI_CHAR('fenu_t2'), MULTI_CHAR('fenu_t3'), MULTI_CHAR('fenu_t4'), MULTI_CHAR('fenu_t5'), #endif }; static const u64 tag_menu1[6] = { #if VERSION == VERSION_GCN_JPN - 'menu_f6', 'menu_f7', 'menu_t8', 'menu_t9', 'menu_t10', 'menu_t11', + MULTI_CHAR('menu_f6'), MULTI_CHAR('menu_f7'), MULTI_CHAR('menu_t8'), MULTI_CHAR('menu_t9'), MULTI_CHAR('menu_t10'), MULTI_CHAR('menu_t11'), #else - 'fenu_t6', 'fenu_t7', 'fenu_t8', 'fenu_t9', 'fenu_t10', 'fenu_t11', + MULTI_CHAR('fenu_t6'), MULTI_CHAR('fenu_t7'), MULTI_CHAR('fenu_t8'), MULTI_CHAR('fenu_t9'), MULTI_CHAR('fenu_t10'), MULTI_CHAR('fenu_t11'), #endif }; static const u64 tag_midoku[6] = { - 'midoku_0', 'midoku_1', 'midoku_2', 'midoku_3', 'midoku_4', 'midoku_5', + MULTI_CHAR('midoku_0'), MULTI_CHAR('midoku_1'), MULTI_CHAR('midoku_2'), MULTI_CHAR('midoku_3'), MULTI_CHAR('midoku_4'), MULTI_CHAR('midoku_5'), }; mpMenuScreen = new J2DScreen(); @@ -756,7 +756,7 @@ void dMenu_Letter_c::screenSetMenu() { bool fg = mpMenuScreen->setPriority("zelda_letter_select_6menu.blo", 0x20000, mpArchive); JUT_ASSERT(1156, fg != false); dPaneClass_showNullPane(mpMenuScreen); - mpParent[0] = new CPaneMgr(mpMenuScreen, 'n_all', 2, NULL); + mpParent[0] = new CPaneMgr(mpMenuScreen, MULTI_CHAR('n_all'), 2, NULL); JUT_ASSERT(1161, mpParent[0] != NULL); mpParent[0]->setAlphaRate(0.0f); for (int i = 0; i < 6; i++) { @@ -828,7 +828,7 @@ void dMenu_Letter_c::screenSetMenu() { fg = mpMenuDMYScreen->setPriority("zelda_letter_select_6menu.blo", 0x20000, mpArchive); JUT_ASSERT(1280, fg != false); dPaneClass_showNullPane(mpMenuDMYScreen); - mpDMYParent = new CPaneMgr(mpMenuDMYScreen, 'n_all', 2, NULL); + mpDMYParent = new CPaneMgr(mpMenuDMYScreen, MULTI_CHAR('n_all'), 2, NULL); JUT_ASSERT(1285, mpDMYParent != NULL); for (int i = 0; i < 6; i++) { #if VERSION == VERSION_GCN_JPN @@ -866,15 +866,15 @@ void dMenu_Letter_c::screenSetMenu() { void dMenu_Letter_c::screenSetBase() { static const u64 tag_pip[9] = { - 'pi_00_n', 'pi_01_n', 'pi_02_n', 'pi_03_n', 'pi_04_n', - 'pi_05_n', 'pi_06_n', 'pi_07_n', 'pi_08_n', + MULTI_CHAR('pi_00_n'), MULTI_CHAR('pi_01_n'), MULTI_CHAR('pi_02_n'), MULTI_CHAR('pi_03_n'), MULTI_CHAR('pi_04_n'), + MULTI_CHAR('pi_05_n'), MULTI_CHAR('pi_06_n'), MULTI_CHAR('pi_07_n'), MULTI_CHAR('pi_08_n'), }; static const u64 tag_pil[9] = { - 'pi_l_00', 'pi_l_01', 'pi_l_02', 'pi_l_03', 'pi_l_04', - 'pi_l_05', 'pi_l_06', 'pi_l_07', 'pi_l_08', + MULTI_CHAR('pi_l_00'), MULTI_CHAR('pi_l_01'), MULTI_CHAR('pi_l_02'), MULTI_CHAR('pi_l_03'), MULTI_CHAR('pi_l_04'), + MULTI_CHAR('pi_l_05'), MULTI_CHAR('pi_l_06'), MULTI_CHAR('pi_l_07'), MULTI_CHAR('pi_l_08'), }; static const u64 tag_pii[9] = { - 'pi_00', 'pi_01', 'pi_02', 'pi_03', 'pi_04', 'pi_05', 'pi_06', 'pi_07', 'pi_08', + MULTI_CHAR('pi_00'), MULTI_CHAR('pi_01'), MULTI_CHAR('pi_02'), MULTI_CHAR('pi_03'), MULTI_CHAR('pi_04'), MULTI_CHAR('pi_05'), MULTI_CHAR('pi_06'), MULTI_CHAR('pi_07'), MULTI_CHAR('pi_08'), }; mpBaseScreen = new J2DScreen(); @@ -882,39 +882,39 @@ void dMenu_Letter_c::screenSetBase() { bool fg = mpBaseScreen->setPriority("zelda_letter_select_base.blo", 0x20000, mpArchive); JUT_ASSERT(1361, fg != false); dPaneClass_showNullPane(mpBaseScreen); - mpBaseScreen->search('wi_btn_n')->hide(); - mpParent[1] = new CPaneMgr(mpBaseScreen, 'n_all', 2, NULL); + mpBaseScreen->search(MULTI_CHAR('wi_btn_n'))->hide(); + mpParent[1] = new CPaneMgr(mpBaseScreen, MULTI_CHAR('n_all'), 2, NULL); JUT_ASSERT(1372, mpParent[1] != NULL); mpParent[1]->setAlphaRate(0.0f); #if VERSION == VERSION_GCN_JPN - J2DTextBox* piVar9 = (J2DTextBox*)mpBaseScreen->search('t_t00'); - mpBaseScreen->search('f_t_00')->hide(); + J2DTextBox* piVar9 = (J2DTextBox*)mpBaseScreen->search(MULTI_CHAR('t_t00')); + mpBaseScreen->search(MULTI_CHAR('f_t_00'))->hide(); #else - J2DTextBox* piVar9 = (J2DTextBox*)mpBaseScreen->search('f_t_00'); - mpBaseScreen->search('t_t00')->hide(); + J2DTextBox* piVar9 = (J2DTextBox*)mpBaseScreen->search(MULTI_CHAR('f_t_00')); + mpBaseScreen->search(MULTI_CHAR('t_t00'))->hide(); #endif piVar9->setString(0x40, ""); piVar9->setFont(mDoExt_getSubFont()); dComIfGp_setMessageCountNumber(field_0x374 + (field_0x36f + 1) * 100); mpString->getString(0x4d6, piVar9, NULL, NULL, NULL, 0); #if VERSION == VERSION_GCN_JPN - J2DTextBox* text1 = (J2DTextBox*)mpBaseScreen->search('wps_text'); - J2DTextBox* text2 = (J2DTextBox*)mpBaseScreen->search('w_p_text'); - J2DTextBox* text3 = (J2DTextBox*)mpBaseScreen->search('g_ps_txt'); - J2DTextBox* text4 = (J2DTextBox*)mpBaseScreen->search('g_p_text'); - mpBaseScreen->search('fwpstex1')->hide(); - mpBaseScreen->search('fwp_tex1')->hide(); - mpBaseScreen->search('fgps_tx1')->hide(); - mpBaseScreen->search('fgp_tex1')->hide(); + J2DTextBox* text1 = (J2DTextBox*)mpBaseScreen->search(MULTI_CHAR('wps_text')); + J2DTextBox* text2 = (J2DTextBox*)mpBaseScreen->search(MULTI_CHAR('w_p_text')); + J2DTextBox* text3 = (J2DTextBox*)mpBaseScreen->search(MULTI_CHAR('g_ps_txt')); + J2DTextBox* text4 = (J2DTextBox*)mpBaseScreen->search(MULTI_CHAR('g_p_text')); + mpBaseScreen->search(MULTI_CHAR('fwpstex1'))->hide(); + mpBaseScreen->search(MULTI_CHAR('fwp_tex1'))->hide(); + mpBaseScreen->search(MULTI_CHAR('fgps_tx1'))->hide(); + mpBaseScreen->search(MULTI_CHAR('fgp_tex1'))->hide(); #else - J2DTextBox* text1 = (J2DTextBox*)mpBaseScreen->search('fwpstex1'); - J2DTextBox* text2 = (J2DTextBox*)mpBaseScreen->search('fwp_tex1'); - J2DTextBox* text3 = (J2DTextBox*)mpBaseScreen->search('fgps_tx1'); - J2DTextBox* text4 = (J2DTextBox*)mpBaseScreen->search('fgp_tex1'); - mpBaseScreen->search('wps_text')->hide(); - mpBaseScreen->search('w_p_text')->hide(); - mpBaseScreen->search('g_ps_txt')->hide(); - mpBaseScreen->search('g_p_text')->hide(); + J2DTextBox* text1 = (J2DTextBox*)mpBaseScreen->search(MULTI_CHAR('fwpstex1')); + J2DTextBox* text2 = (J2DTextBox*)mpBaseScreen->search(MULTI_CHAR('fwp_tex1')); + J2DTextBox* text3 = (J2DTextBox*)mpBaseScreen->search(MULTI_CHAR('fgps_tx1')); + J2DTextBox* text4 = (J2DTextBox*)mpBaseScreen->search(MULTI_CHAR('fgp_tex1')); + mpBaseScreen->search(MULTI_CHAR('wps_text'))->hide(); + mpBaseScreen->search(MULTI_CHAR('w_p_text'))->hide(); + mpBaseScreen->search(MULTI_CHAR('g_ps_txt'))->hide(); + mpBaseScreen->search(MULTI_CHAR('g_p_text'))->hide(); #endif text1->setString(0x40, ""); text2->setString(0x40, ""); @@ -928,16 +928,16 @@ void dMenu_Letter_c::screenSetBase() { dMeter2Info_getStringKanji(0x4d7, text2->getStringPtr(), 0); dMeter2Info_getStringKanji(0x4d7, text3->getStringPtr(), 0); dMeter2Info_getStringKanji(0x4d7, text4->getStringPtr(), 0); - ((J2DTextBox*)mpBaseScreen->search('pi_no_00'))->setFont(mDoExt_getMesgFont()); - ((J2DTextBox*)mpBaseScreen->search('pi_no_01'))->setFont(mDoExt_getMesgFont()); - ((J2DTextBox*)mpBaseScreen->search('pi_no_02'))->setFont(mDoExt_getMesgFont()); - ((J2DTextBox*)mpBaseScreen->search('pi_no_03'))->setFont(mDoExt_getMesgFont()); - ((J2DTextBox*)mpBaseScreen->search('pi_no_04'))->setFont(mDoExt_getMesgFont()); - ((J2DTextBox*)mpBaseScreen->search('pi_no_05'))->setFont(mDoExt_getMesgFont()); - ((J2DTextBox*)mpBaseScreen->search('pi_no_06'))->setFont(mDoExt_getMesgFont()); - ((J2DTextBox*)mpBaseScreen->search('pi_no_07'))->setFont(mDoExt_getMesgFont()); - ((J2DTextBox*)mpBaseScreen->search('pi_no_08'))->setFont(mDoExt_getMesgFont()); - field_0x1ec = (J2DTextBox*)mpBaseScreen->search('let_area'); + ((J2DTextBox*)mpBaseScreen->search(MULTI_CHAR('pi_no_00')))->setFont(mDoExt_getMesgFont()); + ((J2DTextBox*)mpBaseScreen->search(MULTI_CHAR('pi_no_01')))->setFont(mDoExt_getMesgFont()); + ((J2DTextBox*)mpBaseScreen->search(MULTI_CHAR('pi_no_02')))->setFont(mDoExt_getMesgFont()); + ((J2DTextBox*)mpBaseScreen->search(MULTI_CHAR('pi_no_03')))->setFont(mDoExt_getMesgFont()); + ((J2DTextBox*)mpBaseScreen->search(MULTI_CHAR('pi_no_04')))->setFont(mDoExt_getMesgFont()); + ((J2DTextBox*)mpBaseScreen->search(MULTI_CHAR('pi_no_05')))->setFont(mDoExt_getMesgFont()); + ((J2DTextBox*)mpBaseScreen->search(MULTI_CHAR('pi_no_06')))->setFont(mDoExt_getMesgFont()); + ((J2DTextBox*)mpBaseScreen->search(MULTI_CHAR('pi_no_07')))->setFont(mDoExt_getMesgFont()); + ((J2DTextBox*)mpBaseScreen->search(MULTI_CHAR('pi_no_08')))->setFont(mDoExt_getMesgFont()); + field_0x1ec = (J2DTextBox*)mpBaseScreen->search(MULTI_CHAR('let_area')); for (int i = 0; i < 9; i++) { field_0x1f0[i] = (J2DTextBox*)mpBaseScreen->search(tag_pip[i]); if (field_0x374 > 1 && i < field_0x374) { @@ -969,7 +969,7 @@ void dMenu_Letter_c::screenSetShadow() { mpSdwScreen = new J2DScreen(); mpSdwScreen->setPriority("zelda_letter_select_shadow.blo", 0x20000, mpArchive); dPaneClass_showNullPane(mpSdwScreen); - mpParent[2] = new CPaneMgr(mpSdwScreen, 'n_all', 2, NULL); + mpParent[2] = new CPaneMgr(mpSdwScreen, MULTI_CHAR('n_all'), 2, NULL); mpParent[2]->setAlphaRate(0.0f); } @@ -982,20 +982,20 @@ void dMenu_Letter_c::screenSetLetter() { #if VERSION == VERSION_GCN_JPN if (dComIfGs_getOptRuby() == 0) { - field_0x2ec[0] = new CPaneMgr(mpLetterScreen[0], 't3f_s', 0, NULL); - field_0x2ec[1] = new CPaneMgr(mpLetterScreen[0], 'mg_3flin', 0, NULL); - field_0x2f4[0] = new CPaneMgr(mpLetterScreen[0], 'mg_3f_s', 0, NULL); - field_0x2f4[1] = new CPaneMgr(mpLetterScreen[0], 'mg_3f', 0, NULL); + field_0x2ec[0] = new CPaneMgr(mpLetterScreen[0], MULTI_CHAR('t3f_s'), 0, NULL); + field_0x2ec[1] = new CPaneMgr(mpLetterScreen[0], MULTI_CHAR('mg_3flin'), 0, NULL); + field_0x2f4[0] = new CPaneMgr(mpLetterScreen[0], MULTI_CHAR('mg_3f_s'), 0, NULL); + field_0x2f4[1] = new CPaneMgr(mpLetterScreen[0], MULTI_CHAR('mg_3f'), 0, NULL); mpLetterScreen[0]->search('t4_s')->hide(); - mpLetterScreen[0]->search('mg_e4lin')->hide(); + mpLetterScreen[0]->search(MULTI_CHAR('mg_e4lin'))->hide(); mpLetterScreen[0]->search('t3_s')->hide(); - mpLetterScreen[0]->search('mg_3line')->hide(); - mpLineParent = new CPaneMgr(mpLetterScreen[0], 'jp_fri_n', 0, NULL); + mpLetterScreen[0]->search(MULTI_CHAR('mg_3line'))->hide(); + mpLineParent = new CPaneMgr(mpLetterScreen[0], MULTI_CHAR('jp_fri_n'), 0, NULL); JUT_ASSERT(1530, mpLineParent != NULL); for (int i = 0; i < 12; i++) { static u64 const line_tag[12] = { - 'line00', 'line01', 'line02', 'line03', 'line04', 'line05', - 'line06', 'line07', 'line08', + MULTI_CHAR('line00'), MULTI_CHAR('line01'), MULTI_CHAR('line02'), MULTI_CHAR('line03'), MULTI_CHAR('line04'), MULTI_CHAR('line05'), + MULTI_CHAR('line06'), MULTI_CHAR('line07'), MULTI_CHAR('line08'), }; if (line_tag[i] != 0) { @@ -1011,22 +1011,22 @@ void dMenu_Letter_c::screenSetLetter() { ((J2DTextBox*)field_0x2f4[1]->getPanePtr())->setLineSpace(((J2DTextBox*)field_0x2ec[1]->getPanePtr())->getLineSpace()); } else { field_0x2ec[0] = new CPaneMgr(mpLetterScreen[0], 't3_s', 0, NULL); - field_0x2ec[1] = new CPaneMgr(mpLetterScreen[0], 'mg_3line', 0, NULL); + field_0x2ec[1] = new CPaneMgr(mpLetterScreen[0], MULTI_CHAR('mg_3line'), 0, NULL); for (int i = 0; i < 2; i++) { field_0x2f4[i] = NULL; } mpLetterScreen[0]->search('t4_s')->hide(); - mpLetterScreen[0]->search('mg_e4lin')->hide(); - mpLetterScreen[0]->search('t3f_s')->hide(); - mpLetterScreen[0]->search('mg_3flin')->hide(); - mpLetterScreen[0]->search('mg_3f_s')->hide(); - mpLetterScreen[0]->search('mg_3f')->hide(); + mpLetterScreen[0]->search(MULTI_CHAR('mg_e4lin'))->hide(); + mpLetterScreen[0]->search(MULTI_CHAR('t3f_s'))->hide(); + mpLetterScreen[0]->search(MULTI_CHAR('mg_3flin'))->hide(); + mpLetterScreen[0]->search(MULTI_CHAR('mg_3f_s'))->hide(); + mpLetterScreen[0]->search(MULTI_CHAR('mg_3f'))->hide(); mpLineParent = new CPaneMgr(mpLetterScreen[0], 'jp_n', 0, NULL); JUT_ASSERT(1530, mpLineParent != NULL); for (int i = 0; i < 12; i++) { static u64 const line_tag[12] = { - 'line21', 'line22', 'line23', 'line24', 'line25', 'line26', - 'line27', 'line28', 'line29', + MULTI_CHAR('line21'), MULTI_CHAR('line22'), MULTI_CHAR('line23'), MULTI_CHAR('line24'), MULTI_CHAR('line25'), MULTI_CHAR('line26'), + MULTI_CHAR('line27'), MULTI_CHAR('line28'), MULTI_CHAR('line29'), }; if (line_tag[i] != 0) { @@ -1036,26 +1036,26 @@ void dMenu_Letter_c::screenSetLetter() { } } - mpLetterScreen[0]->search('jp_fri_n')->hide(); + mpLetterScreen[0]->search(MULTI_CHAR('jp_fri_n'))->hide(); mpLetterScreen[0]->search('us_n')->hide(); } #else static u64 const line_tag[12] = { - 'line09', 'line10', 'line11', 'line12', 'line13', 'line14', - 'line15', 'line16', 'line17', 'line18', 'line19', 'line20', + MULTI_CHAR('line09'), MULTI_CHAR('line10'), MULTI_CHAR('line11'), MULTI_CHAR('line12'), MULTI_CHAR('line13'), MULTI_CHAR('line14'), + MULTI_CHAR('line15'), MULTI_CHAR('line16'), MULTI_CHAR('line17'), MULTI_CHAR('line18'), MULTI_CHAR('line19'), MULTI_CHAR('line20'), }; field_0x2ec[0] = new CPaneMgr(mpLetterScreen[0], 't4_s', 0, NULL); - field_0x2ec[1] = new CPaneMgr(mpLetterScreen[0], 'mg_e4lin', 0, NULL); + field_0x2ec[1] = new CPaneMgr(mpLetterScreen[0], MULTI_CHAR('mg_e4lin'), 0, NULL); for (int i = 0; i < 2; i++) { field_0x2f4[i] = NULL; } - mpLetterScreen[0]->search('t3f_s')->hide(); - mpLetterScreen[0]->search('mg_3flin')->hide(); - mpLetterScreen[0]->search('mg_3f_s')->hide(); - mpLetterScreen[0]->search('mg_3f')->hide(); + mpLetterScreen[0]->search(MULTI_CHAR('t3f_s'))->hide(); + mpLetterScreen[0]->search(MULTI_CHAR('mg_3flin'))->hide(); + mpLetterScreen[0]->search(MULTI_CHAR('mg_3f_s'))->hide(); + mpLetterScreen[0]->search(MULTI_CHAR('mg_3f'))->hide(); mpLetterScreen[0]->search('t3_s')->hide(); - mpLetterScreen[0]->search('mg_3line')->hide(); + mpLetterScreen[0]->search(MULTI_CHAR('mg_3line'))->hide(); mpLineParent = new CPaneMgr(mpLetterScreen[0], 'us_n', 0, NULL); JUT_ASSERT(1530, mpLineParent != NULL); for (int i = 0; i < 12; i++) { @@ -1065,7 +1065,7 @@ void dMenu_Letter_c::screenSetLetter() { field_0x25c[i] = NULL; } } - mpLetterScreen[0]->search('jp_fri_n')->hide(); + mpLetterScreen[0]->search(MULTI_CHAR('jp_fri_n'))->hide(); mpLetterScreen[0]->search('jp_n')->hide(); #endif @@ -1085,8 +1085,8 @@ void dMenu_Letter_c::screenSetLetter() { #endif } } - field_0x1e4[0] = (J2DTextBox*)mpLetterScreen[0]->search('p_texts'); - field_0x1e4[1] = (J2DTextBox*)mpLetterScreen[0]->search('p_text'); + field_0x1e4[0] = (J2DTextBox*)mpLetterScreen[0]->search(MULTI_CHAR('p_texts')); + field_0x1e4[1] = (J2DTextBox*)mpLetterScreen[0]->search(MULTI_CHAR('p_text')); for (int i = 0; i < 2; i++) { field_0x1e4[i]->setFont(mDoExt_getSubFont()); field_0x1e4[i]->setString(0x10, ""); @@ -1097,7 +1097,7 @@ void dMenu_Letter_c::screenSetLetter() { JUT_ASSERT(1631, fg != false); dPaneClass_showNullPane(mpLetterScreen[1]); for (int i = 0; i < 2; i++) { - mpTextParent[i] = new CPaneMgr(mpLetterScreen[i], 'n_all', 2, NULL); + mpTextParent[i] = new CPaneMgr(mpLetterScreen[i], MULTI_CHAR('n_all'), 2, NULL); JUT_ASSERT(1636, mpTextParent[i] != NULL); mpTextParent[i]->scale(0.0f, 0.0f); mpTextParent[i]->setAlphaRate(0.0f); @@ -1111,10 +1111,10 @@ void dMenu_Letter_c::screenSetLetter() { void dMenu_Letter_c::screenSetDoIcon() { static const u64 text_a_tag[5] = { - 'atext1_1', 'atext1_2', 'atext1_3', 'atext1_4', 'atext1_5', + MULTI_CHAR('atext1_1'), MULTI_CHAR('atext1_2'), MULTI_CHAR('atext1_3'), MULTI_CHAR('atext1_4'), MULTI_CHAR('atext1_5'), }; static const u64 text_b_tag[5] = { - 'btext1_1', 'btext1_2', 'btext1_3', 'btext1_4', 'btext1_5', + MULTI_CHAR('btext1_1'), MULTI_CHAR('btext1_2'), MULTI_CHAR('btext1_3'), MULTI_CHAR('btext1_4'), MULTI_CHAR('btext1_5'), }; mpIconScreen = new J2DScreen(); diff --git a/src/d/d_menu_option.cpp b/src/d/d_menu_option.cpp index 647638768c..b4c5d05785 100644 --- a/src/d/d_menu_option.cpp +++ b/src/d/d_menu_option.cpp @@ -92,13 +92,13 @@ dMenu_Option_c::~dMenu_Option_c() {} static const u32 dMo_soundMode[3] = {0, 1, 2}; void dMenu_Option_c::_create() { - static const u64 text_a_tag[5] = {'atext1_1', 'atext1_2', 'atext1_3', 'atext1_4', 'atext1_5'}; - static const u64 text_b_tag[5] = {'btext1_1', 'btext1_2', 'btext1_3', 'btext1_4', 'btext1_5'}; - static const u64 l_tagName012[2] = {'w_no_n', 'w_yes_n'}; - static const u64 l_tagName013[2] = {'w_no_t', 'w_yes_t'}; - static const u64 l_tagName9[2] = {'w_no_m', 'w_yes_m'}; - static const u64 l_tagName10[2] = {'w_no_g', 'w_yes_g'}; - static const u64 l_tagName11[2] = {'w_no_gr', 'w_yes_gr'}; + static const u64 text_a_tag[5] = {MULTI_CHAR('atext1_1'), MULTI_CHAR('atext1_2'), MULTI_CHAR('atext1_3'), MULTI_CHAR('atext1_4'), MULTI_CHAR('atext1_5')}; + static const u64 text_b_tag[5] = {MULTI_CHAR('btext1_1'), MULTI_CHAR('btext1_2'), MULTI_CHAR('btext1_3'), MULTI_CHAR('btext1_4'), MULTI_CHAR('btext1_5')}; + static const u64 l_tagName012[2] = {MULTI_CHAR('w_no_n'), MULTI_CHAR('w_yes_n')}; + static const u64 l_tagName013[2] = {MULTI_CHAR('w_no_t'), MULTI_CHAR('w_yes_t')}; + static const u64 l_tagName9[2] = {MULTI_CHAR('w_no_m'), MULTI_CHAR('w_yes_m')}; + static const u64 l_tagName10[2] = {MULTI_CHAR('w_no_g'), MULTI_CHAR('w_yes_g')}; + static const u64 l_tagName11[2] = {MULTI_CHAR('w_no_gr'), MULTI_CHAR('w_yes_gr')}; static const u8 l_msgNum2[2] = {8, 7}; mpFont = mDoExt_getMesgFont(); @@ -116,14 +116,14 @@ void dMenu_Option_c::_create() { bool fg = mpScreen->setPriority("zelda_option_select_menu.blo", 0x20000, mpArchive); JUT_ASSERT(210, fg != false); - mpScreen->search('base_a_n')->hide(); - mpScreen->search('y_set_p4')->hide(); - mpScreen->search('y_set_p3')->hide(); - mpScreen->search('y_set_p2')->hide(); - mpScreen->search('y_set_p1')->hide(); - mpScreen->search('y_set_p0')->hide(); - field_0x254[0] = (J2DTextBox*)mpScreen->search('cont_ts'); - field_0x254[1] = (J2DTextBox*)mpScreen->search('cont_t'); + mpScreen->search(MULTI_CHAR('base_a_n'))->hide(); + mpScreen->search(MULTI_CHAR('y_set_p4'))->hide(); + mpScreen->search(MULTI_CHAR('y_set_p3'))->hide(); + mpScreen->search(MULTI_CHAR('y_set_p2'))->hide(); + mpScreen->search(MULTI_CHAR('y_set_p1'))->hide(); + mpScreen->search(MULTI_CHAR('y_set_p0'))->hide(); + field_0x254[0] = (J2DTextBox*)mpScreen->search(MULTI_CHAR('cont_ts')); + field_0x254[1] = (J2DTextBox*)mpScreen->search(MULTI_CHAR('cont_t')); for (int i = 0; i < 2; i++) { field_0x254[i]->setFont(mDoExt_getMesgFont()); field_0x254[i]->setString(0x20, ""); @@ -132,8 +132,8 @@ void dMenu_Option_c::_create() { JUT_ASSERT(246, mpBackScreen != NULL); fg = mpBackScreen->setPriority("zelda_option_base.blo", 0x20000, mpArchive); JUT_ASSERT(251, fg != false); - mpBackScreen->search('wi_btn_n')->hide(); - field_0x27c = mpBackScreen->search('let_area'); + mpBackScreen->search(MULTI_CHAR('wi_btn_n'))->hide(); + field_0x27c = mpBackScreen->search(MULTI_CHAR('let_area')); mpClipScreen = new J2DScreen(); JUT_ASSERT(265, mpClipScreen != NULL); @@ -147,7 +147,7 @@ void dMenu_Option_c::_create() { fg = mpShadowScreen->setPriority("zelda_option_menu_shadow.blo", 0x20000, mpArchive); JUT_ASSERT(278, fg != false); dPaneClass_showNullPane(mpShadowScreen); - mpShadowScreen->search('mw_n_5')->hide(); + mpShadowScreen->search(MULTI_CHAR('mw_n_5'))->hide(); mpTVScreen = new J2DScreen(); JUT_ASSERT(287, mpTVScreen != NULL); @@ -155,12 +155,12 @@ void dMenu_Option_c::_create() { JUT_ASSERT(291, fg != false); dPaneClass_showNullPane(mpTVScreen); - mpTVButtonAB = new CPaneMgr(mpTVScreen, 'g_abtn_n', 0, NULL); + mpTVButtonAB = new CPaneMgr(mpTVScreen, MULTI_CHAR('g_abtn_n'), 0, NULL); JUT_ASSERT(295, mpTVButtonAB != NULL); - mpTVButtonText = new CPaneMgr(mpTVScreen, 'a_text_n', 0, NULL); + mpTVButtonText = new CPaneMgr(mpTVScreen, MULTI_CHAR('a_text_n'), 0, NULL); JUT_ASSERT(298, mpTVButtonText != NULL); - mpTVScreen->search('g_abtn_n')->hide(); + mpTVScreen->search(MULTI_CHAR('g_abtn_n'))->hide(); mpScreenIcon = new J2DScreen(); JUT_ASSERT(325, mpScreenIcon != NULL); @@ -1289,141 +1289,141 @@ void dMenu_Option_c::menuHide(int index) { void dMenu_Option_c::screenSet() { static const u64 tag_frame[6] = { - 'flame_00', 'flame_01', 'flame_02', 'flame_03', 'flame_04', 'flame_05', + MULTI_CHAR('flame_00'), MULTI_CHAR('flame_01'), MULTI_CHAR('flame_02'), MULTI_CHAR('flame_03'), MULTI_CHAR('flame_04'), MULTI_CHAR('flame_05'), }; #if VERSION == VERSION_GCN_JPN static const u64 tag_menu0[6] = { - 'menu_t0', 'menu_t1', 'menu_t2', 'menu_t3', 'menu_t4', 'menu_t5', + MULTI_CHAR('menu_t0'), MULTI_CHAR('menu_t1'), MULTI_CHAR('menu_t2'), MULTI_CHAR('menu_t3'), MULTI_CHAR('menu_t4'), MULTI_CHAR('menu_t5'), }; #else static const u64 tag_menu0[6] = { - 'fenu_t0', 'fenu_t1', 'fenu_t2', 'fenu_t3', 'fenu_t4', 'fenu_t5', + MULTI_CHAR('fenu_t0'), MULTI_CHAR('fenu_t1'), MULTI_CHAR('fenu_t2'), MULTI_CHAR('fenu_t3'), MULTI_CHAR('fenu_t4'), MULTI_CHAR('fenu_t5'), }; #endif static const u64 let_n[6] = { - 'let_00_n', 'let_01_n', 'let_02_n', 'let_03_n', 'let_04_n', 'let_05_n', + MULTI_CHAR('let_00_n'), MULTI_CHAR('let_01_n'), MULTI_CHAR('let_02_n'), MULTI_CHAR('let_03_n'), MULTI_CHAR('let_04_n'), MULTI_CHAR('let_05_n'), }; static const u64 let2_n[6] = { - 'let_00_n', 'let_01_n', 'let_02_n', 'let_03_n', 'let_04_n', + MULTI_CHAR('let_00_n'), MULTI_CHAR('let_01_n'), MULTI_CHAR('let_02_n'), MULTI_CHAR('let_03_n'), MULTI_CHAR('let_04_n'), }; static const u64 menu_n[6] = { - 'menu_n0', 'menu_n1', 'menu_n2', 'menu_n3', 'menu_n4', 'menu_n5', + MULTI_CHAR('menu_n0'), MULTI_CHAR('menu_n1'), MULTI_CHAR('menu_n2'), MULTI_CHAR('menu_n3'), MULTI_CHAR('menu_n4'), MULTI_CHAR('menu_n5'), }; static const u64 menu2_n[6] = { - 'mw_n_0', 'mw_n_1', 'mw_n_2', 'mw_n_3', 'mw_n_4', + MULTI_CHAR('mw_n_0'), MULTI_CHAR('mw_n_1'), MULTI_CHAR('mw_n_2'), MULTI_CHAR('mw_n_3'), MULTI_CHAR('mw_n_4'), }; static const u64 al0_n[6] = { - 's_grr_00', 's_grr_01', 's_grr_02', 's_grr_03', 's_grr_04', 's_grr_05', + MULTI_CHAR('s_grr_00'), MULTI_CHAR('s_grr_01'), MULTI_CHAR('s_grr_02'), MULTI_CHAR('s_grr_03'), MULTI_CHAR('s_grr_04'), MULTI_CHAR('s_grr_05'), }; static const u64 al1_n[6] = { - 'c_grr_00', 'c_grr_01', 'c_grr_02', 'c_grr_03', 'c_grr_04', 'c_grr_05', + MULTI_CHAR('c_grr_00'), MULTI_CHAR('c_grr_01'), MULTI_CHAR('c_grr_02'), MULTI_CHAR('c_grr_03'), MULTI_CHAR('c_grr_04'), MULTI_CHAR('c_grr_05'), }; static const u64 al2_n[6] = { - 's_grl_00', 's_grl_01', 's_grl_02', 's_grl_03', 's_grl_04', 's_grl_05', + MULTI_CHAR('s_grl_00'), MULTI_CHAR('s_grl_01'), MULTI_CHAR('s_grl_02'), MULTI_CHAR('s_grl_03'), MULTI_CHAR('s_grl_04'), MULTI_CHAR('s_grl_05'), }; static const u64 al3_n[6] = { - 'c_grl_00', 'c_grl_01', 'c_grl_02', 'c_grl_03', 'c_grl_04', 'c_grl_05', + MULTI_CHAR('c_grl_00'), MULTI_CHAR('c_grl_01'), MULTI_CHAR('c_grl_02'), MULTI_CHAR('c_grl_03'), MULTI_CHAR('c_grl_04'), MULTI_CHAR('c_grl_05'), }; static const u64 haihail_n[5] = { - 'y_set_l0', 'y_set_l1', 'y_set_l2', 'y_set_l3', 'y_set_l4', + MULTI_CHAR('y_set_l0'), MULTI_CHAR('y_set_l1'), MULTI_CHAR('y_set_l2'), MULTI_CHAR('y_set_l3'), MULTI_CHAR('y_set_l4'), }; static const u64 haihair_n[5] = { - 'y_set_r0', 'y_set_r1', 'y_set_r2', 'y_set_r3', 'y_set_r4', + MULTI_CHAR('y_set_r0'), MULTI_CHAR('y_set_r1'), MULTI_CHAR('y_set_r2'), MULTI_CHAR('y_set_r3'), MULTI_CHAR('y_set_r4'), }; static const u64 menu3_n[6] = { - 'menuapn0', 'menuapn1', 'menuapn2', 'menuapn3', 'menuapn4', + MULTI_CHAR('menuapn0'), MULTI_CHAR('menuapn1'), MULTI_CHAR('menuapn2'), MULTI_CHAR('menuapn3'), MULTI_CHAR('menuapn4'), }; static const u64 tv_btnA[5] = { - 'cont_at1', 'cont_at2', 'cont_at3', 'cont_at4', 'cont_at', + MULTI_CHAR('cont_at1'), MULTI_CHAR('cont_at2'), MULTI_CHAR('cont_at3'), MULTI_CHAR('cont_at4'), MULTI_CHAR('cont_at'), }; static const u64 ftv_btnA[5] = { - 'font_a1', 'font_at2', 'font_at3', 'font_at4', 'font_at', + MULTI_CHAR('font_a1'), MULTI_CHAR('font_at2'), MULTI_CHAR('font_at3'), MULTI_CHAR('font_at4'), MULTI_CHAR('font_at'), }; #if VERSION == VERSION_GCN_JPN - static const u64 fenu_t0[2] = {'fenu_t0s', 'fenu_t0'}; - static const u64 menu_t0[2] = {'menu_t0s', 'menu_t0'}; - static const u64 fenu_t1[2] = {'fenu_t1s', 'fenu_t1'}; - static const u64 menu_t1[2] = {'menu_t1s', 'menu_t1'}; - static const u64 fenu_t2[2] = {'fenu_t2s', 'fenu_t2'}; - static const u64 menu_t2[2] = {'menu_t2s', 'menu_t2'}; - static const u64 fenu_t3[2] = {'fenu_t3s', 'fenu_t3'}; - static const u64 menu_t3[2] = {'menu_t3s', 'menu_t3'}; - static const u64 fenu_t4[2] = {'fenu_t4s', 'fenu_t4'}; - static const u64 menu_t4[2] = {'menu_t4s', 'menu_t4'}; - static const u64 fenu_t5[2] = {'fenu_t5s', 'fenu_t5'}; - static const u64 menu_t5[2] = {'menu_t5s', 'menu_t5'}; + static const u64 fenu_t0[2] = {MULTI_CHAR('fenu_t0s'), MULTI_CHAR('fenu_t0')}; + static const u64 menu_t0[2] = {MULTI_CHAR('menu_t0s'), MULTI_CHAR('menu_t0')}; + static const u64 fenu_t1[2] = {MULTI_CHAR('fenu_t1s'), MULTI_CHAR('fenu_t1')}; + static const u64 menu_t1[2] = {MULTI_CHAR('menu_t1s'), MULTI_CHAR('menu_t1')}; + static const u64 fenu_t2[2] = {MULTI_CHAR('fenu_t2s'), MULTI_CHAR('fenu_t2')}; + static const u64 menu_t2[2] = {MULTI_CHAR('menu_t2s'), MULTI_CHAR('menu_t2')}; + static const u64 fenu_t3[2] = {MULTI_CHAR('fenu_t3s'), MULTI_CHAR('fenu_t3')}; + static const u64 menu_t3[2] = {MULTI_CHAR('menu_t3s'), MULTI_CHAR('menu_t3')}; + static const u64 fenu_t4[2] = {MULTI_CHAR('fenu_t4s'), MULTI_CHAR('fenu_t4')}; + static const u64 menu_t4[2] = {MULTI_CHAR('menu_t4s'), MULTI_CHAR('menu_t4')}; + static const u64 fenu_t5[2] = {MULTI_CHAR('fenu_t5s'), MULTI_CHAR('fenu_t5')}; + static const u64 menu_t5[2] = {MULTI_CHAR('menu_t5s'), MULTI_CHAR('menu_t5')}; #else - static const u64 fenu_t0[2] = {'fenu_t0s', 'fenu_t0'}; - static const u64 menu_t0[2] = {'menu_t0s', 'menu_t0'}; - static const u64 fenu_t2[2] = {'fenu_t1s', 'fenu_t1'}; - static const u64 menu_t2[2] = {'menu_t1s', 'menu_t1'}; - static const u64 fenu_t3[2] = {'fenu_t2s', 'fenu_t2'}; - static const u64 menu_t3[2] = {'menu_t2s', 'menu_t2'}; - static const u64 fenu_t4[2] = {'fenu_t3s', 'fenu_t3'}; - static const u64 menu_t4[2] = {'menu_t3s', 'menu_t3'}; - static const u64 fenu_t1[2] = {'fenu_t4s', 'fenu_t4'}; - static const u64 menu_t1[2] = {'menu_t4s', 'menu_t4'}; - static const u64 fenu_t5[2] = {'fenu_t5s', 'fenu_t5'}; - static const u64 menu_t5[2] = {'menu_t5s', 'menu_t5'}; + static const u64 fenu_t0[2] = {MULTI_CHAR('fenu_t0s'), MULTI_CHAR('fenu_t0')}; + static const u64 menu_t0[2] = {MULTI_CHAR('menu_t0s'), MULTI_CHAR('menu_t0')}; + static const u64 fenu_t2[2] = {MULTI_CHAR('fenu_t1s'), MULTI_CHAR('fenu_t1')}; + static const u64 menu_t2[2] = {MULTI_CHAR('menu_t1s'), MULTI_CHAR('menu_t1')}; + static const u64 fenu_t3[2] = {MULTI_CHAR('fenu_t2s'), MULTI_CHAR('fenu_t2')}; + static const u64 menu_t3[2] = {MULTI_CHAR('menu_t2s'), MULTI_CHAR('menu_t2')}; + static const u64 fenu_t4[2] = {MULTI_CHAR('fenu_t3s'), MULTI_CHAR('fenu_t3')}; + static const u64 menu_t4[2] = {MULTI_CHAR('menu_t3s'), MULTI_CHAR('menu_t3')}; + static const u64 fenu_t1[2] = {MULTI_CHAR('fenu_t4s'), MULTI_CHAR('fenu_t4')}; + static const u64 menu_t1[2] = {MULTI_CHAR('menu_t4s'), MULTI_CHAR('menu_t4')}; + static const u64 fenu_t5[2] = {MULTI_CHAR('fenu_t5s'), MULTI_CHAR('fenu_t5')}; + static const u64 menu_t5[2] = {MULTI_CHAR('menu_t5s'), MULTI_CHAR('menu_t5')}; #endif static const u64 menut_0[6] = { - 'menut0as', 'menut0a', 'menut0a2', 'menut0a1', 'menut0a4', 'menut0a3', + MULTI_CHAR('menut0as'), MULTI_CHAR('menut0a'), MULTI_CHAR('menut0a2'), MULTI_CHAR('menut0a1'), MULTI_CHAR('menut0a4'), MULTI_CHAR('menut0a3'), }; static const u64 fenut_0[6] = { - 'menut010', 'menut0a9', 'menut0a8', 'menut0a7', 'menut0a6', 'menut0a5', + MULTI_CHAR('menut010'), MULTI_CHAR('menut0a9'), MULTI_CHAR('menut0a8'), MULTI_CHAR('menut0a7'), MULTI_CHAR('menut0a6'), MULTI_CHAR('menut0a5'), }; static const u64 menut_1[6] = { - 'menut1as', 'menut1a', 'menut1a2', 'menut1a1', 'menut1a4', 'menut1a3', + MULTI_CHAR('menut1as'), MULTI_CHAR('menut1a'), MULTI_CHAR('menut1a2'), MULTI_CHAR('menut1a1'), MULTI_CHAR('menut1a4'), MULTI_CHAR('menut1a3'), }; static const u64 fenut_1[6] = { - 'menut110', 'menut1a9', 'menut1a8', 'menut1a7', 'menut1a6', 'menut1a5', + MULTI_CHAR('menut110'), MULTI_CHAR('menut1a9'), MULTI_CHAR('menut1a8'), MULTI_CHAR('menut1a7'), MULTI_CHAR('menut1a6'), MULTI_CHAR('menut1a5'), }; static const u64 menut_2[6] = { - 'menut2as', 'menut2a', 'menut2a2', 'menut2a1', 'menut2a4', 'menut2a3', + MULTI_CHAR('menut2as'), MULTI_CHAR('menut2a'), MULTI_CHAR('menut2a2'), MULTI_CHAR('menut2a1'), MULTI_CHAR('menut2a4'), MULTI_CHAR('menut2a3'), }; static const u64 fenut_2[6] = { - 'menut210', 'menut2a9', 'menut2a8', 'menut2a7', 'menut2a6', 'menut2a5', + MULTI_CHAR('menut210'), MULTI_CHAR('menut2a9'), MULTI_CHAR('menut2a8'), MULTI_CHAR('menut2a7'), MULTI_CHAR('menut2a6'), MULTI_CHAR('menut2a5'), }; static const u64 menut_3[6] = { - 'menut3a5', 'menut3a6', 'menut3a7', 'menut3a8', 'menut3a9', 'menut310', + MULTI_CHAR('menut3a5'), MULTI_CHAR('menut3a6'), MULTI_CHAR('menut3a7'), MULTI_CHAR('menut3a8'), MULTI_CHAR('menut3a9'), MULTI_CHAR('menut310'), }; static const u64 fenut_3[6] = { - 'menut315', 'menut314', 'menut313', 'menut312', 'menut311', 'menut001', + MULTI_CHAR('menut315'), MULTI_CHAR('menut314'), MULTI_CHAR('menut313'), MULTI_CHAR('menut312'), MULTI_CHAR('menut311'), MULTI_CHAR('menut001'), }; static const u64 menut_4[6] = { - 'menut3as', 'menut3a', 'menut3a2', 'menut3a1', 'menut3a4', 'menut3a3', + MULTI_CHAR('menut3as'), MULTI_CHAR('menut3a'), MULTI_CHAR('menut3a2'), MULTI_CHAR('menut3a1'), MULTI_CHAR('menut3a4'), MULTI_CHAR('menut3a3'), }; static const u64 fenut_4[6] = { - 'menut321', 'menut320', 'menut319', 'menut318', 'menut317', 'menut316', + MULTI_CHAR('menut321'), MULTI_CHAR('menut320'), MULTI_CHAR('menut319'), MULTI_CHAR('menut318'), MULTI_CHAR('menut317'), MULTI_CHAR('menut316'), }; #if VERSION == VERSION_GCN_JPN static const u64 tx[6] = { - 'wps_text', 'w_p_text', 'g_ps_tx3', 'g_p_tex3', 'wps_tex1', 'w_p_tex1', + MULTI_CHAR('wps_text'), MULTI_CHAR('w_p_text'), MULTI_CHAR('g_ps_tx3'), MULTI_CHAR('g_p_tex3'), MULTI_CHAR('wps_tex1'), MULTI_CHAR('w_p_tex1'), }; #else static const u64 tx[6] = { - 'w_p_tex5', 'w_p_tex6', 'w_p_tex3', 'w_p_tex4', 'fps_tex1', 'f_p_tex1', + MULTI_CHAR('w_p_tex5'), MULTI_CHAR('w_p_tex6'), MULTI_CHAR('w_p_tex3'), MULTI_CHAR('w_p_tex4'), MULTI_CHAR('fps_tex1'), MULTI_CHAR('f_p_tex1'), }; #endif static const u64 op_tx[4] = { - 'w_text_n', 'w_btn_n', 'w_k_t_n', 'w_abtn_n', + MULTI_CHAR('w_text_n'), MULTI_CHAR('w_btn_n'), MULTI_CHAR('w_k_t_n'), MULTI_CHAR('w_abtn_n'), }; static const u64 z_tx[3] = { - 'z_gc_n', 0, 0, + MULTI_CHAR('z_gc_n'), 0, 0, }; #if VERSION == VERSION_GCN_JPN static const u64 txTV[10] = { - 'menu_t6s', 'menu_t6', 'menu_t9s', 'menu_t9', 'menut10s', - 'menu_t10', 'menu_t7s', 'menu_t7', 'menu_t8s', 'menu_t8', + MULTI_CHAR('menu_t6s'), MULTI_CHAR('menu_t6'), MULTI_CHAR('menu_t9s'), MULTI_CHAR('menu_t9'), MULTI_CHAR('menut10s'), + MULTI_CHAR('menu_t10'), MULTI_CHAR('menu_t7s'), MULTI_CHAR('menu_t7'), MULTI_CHAR('menu_t8s'), MULTI_CHAR('menu_t8'), }; #else static const u64 txTV[10] = { - 'menu_t61', 'menu_t2', 'menu_t91', 'menu_t1', 'menut101', - 'menu_t01', 'menu_t71', 'menu_t3', 'menu_t81', 'menu_t4', + MULTI_CHAR('menu_t61'), MULTI_CHAR('menu_t2'), MULTI_CHAR('menu_t91'), MULTI_CHAR('menu_t1'), MULTI_CHAR('menut101'), + MULTI_CHAR('menu_t01'), MULTI_CHAR('menu_t71'), MULTI_CHAR('menu_t3'), MULTI_CHAR('menu_t81'), MULTI_CHAR('menu_t4'), }; #endif - mpTitle = new CPaneMgr(mpBackScreen, 'title_n', 0, NULL); + mpTitle = new CPaneMgr(mpBackScreen, MULTI_CHAR('title_n'), 0, NULL); Vec pos = mpTitle->getGlobalVtxCenter(mpTitle->mPane, false, 0); mpWarning->mPosY = pos.y + g_drawHIO.mOptionScreen.mBackgroundPosY; for (int i = 0; i < 6; i++) { @@ -1445,11 +1445,11 @@ void dMenu_Option_c::screenSet() { mpDrawCursor->setScale(0.0f); mpDrawCursor->setParam(1.01f, 0.85f, 0.02f, 0.5f, 0.5f); mpDrawCursor->offPlayAnime(0); - mpParent[0] = new CPaneMgr(mpScreen, 'n_all', 2, NULL); - mpParent[1] = new CPaneMgr(mpClipScreen, 'n_all', 2, NULL); + mpParent[0] = new CPaneMgr(mpScreen, MULTI_CHAR('n_all'), 2, NULL); + mpParent[1] = new CPaneMgr(mpClipScreen, MULTI_CHAR('n_all'), 2, NULL); mpParent[2] = new CPaneMgr(mpShadowScreen, 'nall', 2, NULL); - mpParent[3] = new CPaneMgr(mpTVScreen, 'n_all', 2, NULL); - mpParent[4] = new CPaneMgr(mpBackScreen, 'n_all', 2, NULL); + mpParent[3] = new CPaneMgr(mpTVScreen, MULTI_CHAR('n_all'), 2, NULL); + mpParent[4] = new CPaneMgr(mpBackScreen, MULTI_CHAR('n_all'), 2, NULL); for (int i = 0; i < 6; i++) { mpMenuNull[i] = new CPaneMgr(mpScreen, let_n[i], 0, NULL); mpMenuPane[i] = new CPaneMgr(mpScreen, menu_n[i], 0, NULL); @@ -1496,19 +1496,19 @@ void dMenu_Option_c::screenSet() { } } #if VERSION == VERSION_GCN_JPN - field_0x270[0] = (J2DTextBox*)mpBackScreen->search('t_t00'); - field_0x270[1] = (J2DTextBox*)mpBackScreen->search('t_t01'); - mpBackScreen->search('f_t00')->hide(); - mpBackScreen->search('t_t01')->hide(); - field_0x270[2] = (J2DTextBox*)mpTVScreen->search('t_t00'); - mpTVScreen->search('f_t00')->hide(); + field_0x270[0] = (J2DTextBox*)mpBackScreen->search(MULTI_CHAR('t_t00')); + field_0x270[1] = (J2DTextBox*)mpBackScreen->search(MULTI_CHAR('t_t01')); + mpBackScreen->search(MULTI_CHAR('f_t00'))->hide(); + mpBackScreen->search(MULTI_CHAR('t_t01'))->hide(); + field_0x270[2] = (J2DTextBox*)mpTVScreen->search(MULTI_CHAR('t_t00')); + mpTVScreen->search(MULTI_CHAR('f_t00'))->hide(); #else - field_0x270[0] = (J2DTextBox*)mpBackScreen->search('f_t00'); - field_0x270[1] = (J2DTextBox*)mpBackScreen->search('t_t01'); - mpBackScreen->search('t_t00')->hide(); - mpBackScreen->search('t_t01')->hide(); - field_0x270[2] = (J2DTextBox*)mpTVScreen->search('f_t00'); - mpTVScreen->search('t_t00')->hide(); + field_0x270[0] = (J2DTextBox*)mpBackScreen->search(MULTI_CHAR('f_t00')); + field_0x270[1] = (J2DTextBox*)mpBackScreen->search(MULTI_CHAR('t_t01')); + mpBackScreen->search(MULTI_CHAR('t_t00'))->hide(); + mpBackScreen->search(MULTI_CHAR('t_t01'))->hide(); + field_0x270[2] = (J2DTextBox*)mpTVScreen->search(MULTI_CHAR('f_t00')); + mpTVScreen->search(MULTI_CHAR('t_t00'))->hide(); #endif for (int i = 0; i < 3; i++) { field_0x270[i]->setFont(mDoExt_getRubyFont()); @@ -1697,11 +1697,11 @@ void dMenu_Option_c::screenSet() { field_0x3b4 = 0.0f; menuVisible(); #if VERSION == VERSION_GCN_JPN - mpBackScreen->search('jpn_n')->show(); - mpBackScreen->search('foregn_n')->hide(); + mpBackScreen->search(MULTI_CHAR('jpn_n'))->show(); + mpBackScreen->search(MULTI_CHAR('foregn_n'))->hide(); #else - mpBackScreen->search('jpn_n')->hide(); - mpBackScreen->search('foregn_n')->show(); + mpBackScreen->search(MULTI_CHAR('jpn_n'))->hide(); + mpBackScreen->search(MULTI_CHAR('foregn_n'))->show(); #endif for (int i = 0; i < 6; i++) { J2DTextBox* backScreen = (J2DTextBox*)mpBackScreen->search(tx[i]); @@ -1715,7 +1715,7 @@ void dMenu_Option_c::screenSet() { mpString->getString(0x556, backScreen, NULL, NULL, NULL, 0); } } - mpBackScreen->search('wi_btn_n')->hide(); + mpBackScreen->search(MULTI_CHAR('wi_btn_n'))->hide(); for (int i = 0; i < 4; i++) { field_0x1c0[i] = 0; } @@ -2075,14 +2075,14 @@ void dMenu_Option_c::changeTVCheck() { static void dummy() { #if VERSION == VERSION_GCN_JPN - static const u64 txTVhide[5] = {'fmenu_6n', 'fmenu_9n', 'fmenu_10', 'fmenu_7n', 'fmenu_8n'}; + static const u64 txTVhide[5] = {MULTI_CHAR('fmenu_6n'), MULTI_CHAR('fmenu_9n'), MULTI_CHAR('fmenu_10'), MULTI_CHAR('fmenu_7n'), MULTI_CHAR('fmenu_8n')}; #else - static const u64 txTVhide[5] = {'menu_6n', 'menu_9n', 'menu_10n', 'menu_7n', 'menu_8n'}; + static const u64 txTVhide[5] = {MULTI_CHAR('menu_6n'), MULTI_CHAR('menu_9n'), MULTI_CHAR('menu_10n'), MULTI_CHAR('menu_7n'), MULTI_CHAR('menu_8n')}; #endif } void dMenu_Option_c::setAButtonString(u16 i_stringID) { - static const u64 text_a_tag[5] = {'atext1_1', 'atext1_2', 'atext1_3', 'atext1_4', 'atext1_5'}; + static const u64 text_a_tag[5] = {MULTI_CHAR('atext1_1'), MULTI_CHAR('atext1_2'), MULTI_CHAR('atext1_3'), MULTI_CHAR('atext1_4'), MULTI_CHAR('atext1_5')}; u32 stringId = i_stringID; if (stringId != field_0x3dc) { field_0x3dc = i_stringID; @@ -2101,7 +2101,7 @@ void dMenu_Option_c::setAButtonString(u16 i_stringID) { } void dMenu_Option_c::setBButtonString(u16 i_stringID) { - static const u64 text_b_tag[5] = {'btext1_1', 'btext1_2', 'btext1_3', 'btext1_4', 'btext1_5'}; + static const u64 text_b_tag[5] = {MULTI_CHAR('btext1_1'), MULTI_CHAR('btext1_2'), MULTI_CHAR('btext1_3'), MULTI_CHAR('btext1_4'), MULTI_CHAR('btext1_5')}; u32 stringId = i_stringID; if (stringId != field_0x3de) { field_0x3de = i_stringID; diff --git a/src/d/d_menu_ring.cpp b/src/d/d_menu_ring.cpp index 49c3e4000b..de1a5ab3a0 100644 --- a/src/d/d_menu_ring.cpp +++ b/src/d/d_menu_ring.cpp @@ -48,34 +48,34 @@ static procFunc stick_proc[] = { dMenu_Ring_c::dMenu_Ring_c(JKRExpHeap* i_heap, STControl* i_stick, CSTControl* i_cStick, u8 i_ringOrigin) { static const u64 xy_text[5] = { - 'yx_text', 'yx_te_s1', 'yx_te_s2', 'yx_te_s3', 'yx_te_s4', + MULTI_CHAR('yx_text'), MULTI_CHAR('yx_te_s1'), MULTI_CHAR('yx_te_s2'), MULTI_CHAR('yx_te_s3'), MULTI_CHAR('yx_te_s4'), }; static const u64 fxy_text[5] = { - 'fyx_tex', 'fyx_te_1', 'fyx_te_2', 'fyx_te_3', 'fyx_te_4', + MULTI_CHAR('fyx_tex'), MULTI_CHAR('fyx_te_1'), MULTI_CHAR('fyx_te_2'), MULTI_CHAR('fyx_te_3'), MULTI_CHAR('fyx_te_4'), }; static const u64 c_text[5] = { - 'c_text', 'c_te_s1', 'c_te_s2', 'c_te_s3', 'c_te_s4', + MULTI_CHAR('c_text'), MULTI_CHAR('c_te_s1'), MULTI_CHAR('c_te_s2'), MULTI_CHAR('c_te_s3'), MULTI_CHAR('c_te_s4'), }; static const u64 fc_text[5] = { - 'fc_text', 'fc_te_s1', 'fc_te_s2', 'fc_te_s3', 'fc_te_s4', + MULTI_CHAR('fc_text'), MULTI_CHAR('fc_te_s1'), MULTI_CHAR('fc_te_s2'), MULTI_CHAR('fc_te_s3'), MULTI_CHAR('fc_te_s4'), }; static const u64 c_text1[5] = { - 'c_text1', 'c_texs1', 'c_texs2', 'c_texs3', 'c_texs4', + MULTI_CHAR('c_text1'), MULTI_CHAR('c_texs1'), MULTI_CHAR('c_texs2'), MULTI_CHAR('c_texs3'), MULTI_CHAR('c_texs4'), }; static const u64 fc_text1[5] = { - 'fc_text1', 'fc_texs1', 'fc_texs2', 'fc_texs3', 'fc_texs4', + MULTI_CHAR('fc_text1'), MULTI_CHAR('fc_texs1'), MULTI_CHAR('fc_texs2'), MULTI_CHAR('fc_texs3'), MULTI_CHAR('fc_texs4'), }; static const u64 t_on[5] = { - 'gr_t_on', 'g_tof_s5', 'g_tof_s6', 'g_tof_s7', 'g_tof_s8', + MULTI_CHAR('gr_t_on'), MULTI_CHAR('g_tof_s5'), MULTI_CHAR('g_tof_s6'), MULTI_CHAR('g_tof_s7'), MULTI_CHAR('g_tof_s8'), }; static const u64 ft_on[5] = { - 'fr_t_on', 'f_tof_s5', 'f_tof_s6', 'f_tof_s7', 'f_tof_s8', + MULTI_CHAR('fr_t_on'), MULTI_CHAR('f_tof_s5'), MULTI_CHAR('f_tof_s6'), MULTI_CHAR('f_tof_s7'), MULTI_CHAR('f_tof_s8'), }; static const u64 t_off[5] = { - 'gr_t_of', 'g_tof_s1', 'g_tof_s2', 'g_tof_s3', 'g_tof_s4', + MULTI_CHAR('gr_t_of'), MULTI_CHAR('g_tof_s1'), MULTI_CHAR('g_tof_s2'), MULTI_CHAR('g_tof_s3'), MULTI_CHAR('g_tof_s4'), }; static const u64 ft_off[5] = { - 'fr_t_of', 'f_tof_s1', 'f_tof_s2', 'f_tof_s3', 'f_tof_s4', + MULTI_CHAR('fr_t_of'), MULTI_CHAR('f_tof_s1'), MULTI_CHAR('f_tof_s2'), MULTI_CHAR('f_tof_s3'), MULTI_CHAR('f_tof_s4'), }; mpHeap = i_heap; @@ -264,12 +264,12 @@ dMenu_Ring_c::dMenu_Ring_c(JKRExpHeap* i_heap, STControl* i_stick, CSTControl* i "SCRN/zelda_item_select_icon_message_ver2.blo", 0x20000, dComIfGp_getRingResArchive()); dPaneClass_showNullPane(mpScreen); - mpMessageParent = new CPaneMgrAlpha(mpScreen, 'n_all', 2, NULL); + mpMessageParent = new CPaneMgrAlpha(mpScreen, MULTI_CHAR('n_all'), 2, NULL); mpTextParent[0] = new CPaneMgr(mpScreen, 'r_n', 0, NULL); mpTextParent[1] = new CPaneMgr(mpScreen, 'c_n', 2, NULL); mpTextParent[1]->setAlphaRate(1.0f); mpTextParent[2] = NULL; - mpTextParent[3] = new CPaneMgr(mpScreen, 'c_sen_n', 2, NULL); + mpTextParent[3] = new CPaneMgr(mpScreen, MULTI_CHAR('c_sen_n'), 2, NULL); mpTextParent[4] = new CPaneMgr(mpScreen, 'gr_n', 2, NULL); mpTextParent[4]->hide(); for (int i = 5; i < 10; i++) { @@ -301,20 +301,20 @@ dMenu_Ring_c::dMenu_Ring_c(JKRExpHeap* i_heap, STControl* i_stick, CSTControl* i mItemSlotParam2[i] = (mpItemBuf[i][0]->height / 48.0f * (texScale / 100.0f)); } } - mpScreen->search('r_btn_n')->hide(); + mpScreen->search(MULTI_CHAR('r_btn_n'))->hide(); if (mPlayerIsWolf) { - mpScreen->search('yx_te_s1')->hide(); - mpScreen->search('yx_te_s2')->hide(); - mpScreen->search('yx_te_s3')->hide(); - mpScreen->search('yx_te_s4')->hide(); - mpScreen->search('yx_text')->hide(); - mpScreen->search('fyx_te_1')->hide(); - mpScreen->search('fyx_te_2')->hide(); - mpScreen->search('fyx_te_3')->hide(); - mpScreen->search('fyx_te_4')->hide(); - mpScreen->search('fyx_tex')->hide(); - mpScreen->search('x_btn_n')->hide(); - mpScreen->search('y_btn_n')->hide(); + mpScreen->search(MULTI_CHAR('yx_te_s1'))->hide(); + mpScreen->search(MULTI_CHAR('yx_te_s2'))->hide(); + mpScreen->search(MULTI_CHAR('yx_te_s3'))->hide(); + mpScreen->search(MULTI_CHAR('yx_te_s4'))->hide(); + mpScreen->search(MULTI_CHAR('yx_text'))->hide(); + mpScreen->search(MULTI_CHAR('fyx_te_1'))->hide(); + mpScreen->search(MULTI_CHAR('fyx_te_2'))->hide(); + mpScreen->search(MULTI_CHAR('fyx_te_3'))->hide(); + mpScreen->search(MULTI_CHAR('fyx_te_4'))->hide(); + mpScreen->search(MULTI_CHAR('fyx_tex'))->hide(); + mpScreen->search(MULTI_CHAR('x_btn_n'))->hide(); + mpScreen->search(MULTI_CHAR('y_btn_n'))->hide(); } mpString = new dMsgString_c(); for (i = 0; i < 5; i++) { @@ -387,38 +387,38 @@ dMenu_Ring_c::dMenu_Ring_c(JKRExpHeap* i_heap, STControl* i_stick, CSTControl* i "SCRN/zelda_item_select_icon3_spot.blo", 0x20000, dComIfGp_getRingResArchive()); dPaneClass_showNullPane(mpSpotScreen); - mpSpotParent = new CPaneMgrAlpha(mpSpotScreen, 'n_all', 2, NULL); + mpSpotParent = new CPaneMgrAlpha(mpSpotScreen, MULTI_CHAR('n_all'), 2, NULL); mpCenterScreen = new J2DScreen(); dPaneClass_setPriority(&mpResData[2], mpHeap, mpCenterScreen, "SCRN/zelda_item_select_icon3_center_parts.blo", 0x20000, dComIfGp_getRingResArchive()); dPaneClass_showNullPane(mpCenterScreen); - mpCenterParent = new CPaneMgrAlpha(mpCenterScreen, 'center_n', 2, NULL); - mpNameParent = new CPaneMgr(mpCenterScreen, 'label_n', 1, NULL); - mpCircle = new CPaneMgr(mpCenterScreen, 'circle_n', 2, NULL); + mpCenterParent = new CPaneMgrAlpha(mpCenterScreen, MULTI_CHAR('center_n'), 2, NULL); + mpNameParent = new CPaneMgr(mpCenterScreen, MULTI_CHAR('label_n'), 1, NULL); + mpCircle = new CPaneMgr(mpCenterScreen, MULTI_CHAR('circle_n'), 2, NULL); J2DTextBox* textBox[4]; #if VERSION == VERSION_GCN_JPN - textBox[0] = (J2DTextBox*)mpCenterScreen->search('item_n04'); - textBox[1] = (J2DTextBox*)mpCenterScreen->search('item_n05'); - textBox[2] = (J2DTextBox*)mpCenterScreen->search('item_n06'); - textBox[3] = (J2DTextBox*)mpCenterScreen->search('item_n07'); - J2DPane* pane = mpCenterScreen->search('fitem_n1'); + textBox[0] = (J2DTextBox*)mpCenterScreen->search(MULTI_CHAR('item_n04')); + textBox[1] = (J2DTextBox*)mpCenterScreen->search(MULTI_CHAR('item_n05')); + textBox[2] = (J2DTextBox*)mpCenterScreen->search(MULTI_CHAR('item_n06')); + textBox[3] = (J2DTextBox*)mpCenterScreen->search(MULTI_CHAR('item_n07')); + J2DPane* pane = mpCenterScreen->search(MULTI_CHAR('fitem_n1')); pane->mVisible = false; - pane = mpCenterScreen->search('fitem_n2'); + pane = mpCenterScreen->search(MULTI_CHAR('fitem_n2')); pane->mVisible = false; - pane = mpCenterScreen->search('fitem_n3'); + pane = mpCenterScreen->search(MULTI_CHAR('fitem_n3')); pane->mVisible = false; - pane = mpCenterScreen->search('fitem_n4'); + pane = mpCenterScreen->search(MULTI_CHAR('fitem_n4')); pane->mVisible = false; #else - textBox[0] = (J2DTextBox*)mpCenterScreen->search('fitem_n1'); - textBox[1] = (J2DTextBox*)mpCenterScreen->search('fitem_n2'); - textBox[2] = (J2DTextBox*)mpCenterScreen->search('fitem_n3'); - textBox[3] = (J2DTextBox*)mpCenterScreen->search('fitem_n4'); - mpCenterScreen->search('item_n04'); - mpCenterScreen->search('item_n05'); - mpCenterScreen->search('item_n06'); - mpCenterScreen->search('item_n07'); + textBox[0] = (J2DTextBox*)mpCenterScreen->search(MULTI_CHAR('fitem_n1')); + textBox[1] = (J2DTextBox*)mpCenterScreen->search(MULTI_CHAR('fitem_n2')); + textBox[2] = (J2DTextBox*)mpCenterScreen->search(MULTI_CHAR('fitem_n3')); + textBox[3] = (J2DTextBox*)mpCenterScreen->search(MULTI_CHAR('fitem_n4')); + mpCenterScreen->search(MULTI_CHAR('item_n04')); + mpCenterScreen->search(MULTI_CHAR('item_n05')); + mpCenterScreen->search(MULTI_CHAR('item_n06')); + mpCenterScreen->search(MULTI_CHAR('item_n07')); #endif for (int i = 0; i < 4; i++) { textBox[i]->setFont(mDoExt_getMesgFont()); @@ -614,7 +614,7 @@ void dMenu_Ring_c::_draw() { if (mStatus != STATUS_EXPLAIN && mPikariFlashingSpeed > 0.0f) { Vec pos; CPaneMgr paneMgr; - pos = paneMgr.getGlobalVtxCenter(mpScreen->search('gr_btn'), true, 0); + pos = paneMgr.getGlobalVtxCenter(mpScreen->search(MULTI_CHAR('gr_btn')), true, 0); dMeter2Info_getMeterClass()->getMeterDrawPtr()->drawPikari( pos.x, pos.y, &mPikariFlashingSpeed, g_ringHIO.mPikariScale, g_ringHIO.mPikariFrontOuter, g_ringHIO.mPikariFrontInner, g_ringHIO.mPikariBackOuter, g_ringHIO.mPikariBackInner, @@ -1102,15 +1102,15 @@ void dMenu_Ring_c::setScale() { void dMenu_Ring_c::setNameString(u32 i_stringID) { J2DTextBox* textBox[4]; #if VERSION == VERSION_GCN_JPN - textBox[0] = (J2DTextBox*)mpCenterScreen->search('item_n04'); - textBox[1] = (J2DTextBox*)mpCenterScreen->search('item_n05'); - textBox[2] = (J2DTextBox*)mpCenterScreen->search('item_n06'); - textBox[3] = (J2DTextBox*)mpCenterScreen->search('item_n07'); + textBox[0] = (J2DTextBox*)mpCenterScreen->search(MULTI_CHAR('item_n04')); + textBox[1] = (J2DTextBox*)mpCenterScreen->search(MULTI_CHAR('item_n05')); + textBox[2] = (J2DTextBox*)mpCenterScreen->search(MULTI_CHAR('item_n06')); + textBox[3] = (J2DTextBox*)mpCenterScreen->search(MULTI_CHAR('item_n07')); #else - textBox[0] = (J2DTextBox*)mpCenterScreen->search('fitem_n1'); - textBox[1] = (J2DTextBox*)mpCenterScreen->search('fitem_n2'); - textBox[2] = (J2DTextBox*)mpCenterScreen->search('fitem_n3'); - textBox[3] = (J2DTextBox*)mpCenterScreen->search('fitem_n4'); + textBox[0] = (J2DTextBox*)mpCenterScreen->search(MULTI_CHAR('fitem_n1')); + textBox[1] = (J2DTextBox*)mpCenterScreen->search(MULTI_CHAR('fitem_n2')); + textBox[2] = (J2DTextBox*)mpCenterScreen->search(MULTI_CHAR('fitem_n3')); + textBox[3] = (J2DTextBox*)mpCenterScreen->search(MULTI_CHAR('fitem_n4')); #endif if (mNameStringID != i_stringID) { for (int i = 0; i < 4; i++) { diff --git a/src/d/d_menu_save.cpp b/src/d/d_menu_save.cpp index 823ea577fc..3298543599 100644 --- a/src/d/d_menu_save.cpp +++ b/src/d/d_menu_save.cpp @@ -149,28 +149,28 @@ void dMenu_save_c::_create() { } void dMenu_save_c::screenSet() { - static u64 l_tagName0[3] = {'w_sel_00', 'w_sel_01', 'w_sel_02'}; - static u64 l_tagName000[2] = {'w_no_t', 'w_yes_t'}; - static u64 l_tagName000U[2] = {'f_no_t', 'f_yes_t'}; - static u64 l_tagName00[2] = {'w_modo', 'w_kete'}; - static u64 l_tagName00U[2] = {'f_modo', 'f_kete'}; - static u64 l_tagName3[3] = {'w_moyo00', 'w_moyo01', 'w_moyo02'}; - static u64 l_tagName4[3] = {'w_gold00', 'w_gold01', 'w_gold02'}; - static u64 l_tagName5[3] = {'w_go2_00', 'w_go2_01', 'w_go2_02'}; - static u64 l_tagName9[2] = {'w_no_m', 'w_yes_m'}; - static u64 l_tagName10[2] = {'w_no_g', 'w_yes_g'}; - static u64 l_tagName11[2] = {'w_no_gr', 'w_yes_gr'}; - static u64 l_tagName12[3] = {'w_bk_l00', 'w_bk_l01', 'w_bk_l02'}; + static u64 l_tagName0[3] = {MULTI_CHAR('w_sel_00'), MULTI_CHAR('w_sel_01'), MULTI_CHAR('w_sel_02')}; + static u64 l_tagName000[2] = {MULTI_CHAR('w_no_t'), MULTI_CHAR('w_yes_t')}; + static u64 l_tagName000U[2] = {MULTI_CHAR('f_no_t'), MULTI_CHAR('f_yes_t')}; + static u64 l_tagName00[2] = {MULTI_CHAR('w_modo'), MULTI_CHAR('w_kete')}; + static u64 l_tagName00U[2] = {MULTI_CHAR('f_modo'), MULTI_CHAR('f_kete')}; + static u64 l_tagName3[3] = {MULTI_CHAR('w_moyo00'), MULTI_CHAR('w_moyo01'), MULTI_CHAR('w_moyo02')}; + static u64 l_tagName4[3] = {MULTI_CHAR('w_gold00'), MULTI_CHAR('w_gold01'), MULTI_CHAR('w_gold02')}; + static u64 l_tagName5[3] = {MULTI_CHAR('w_go2_00'), MULTI_CHAR('w_go2_01'), MULTI_CHAR('w_go2_02')}; + static u64 l_tagName9[2] = {MULTI_CHAR('w_no_m'), MULTI_CHAR('w_yes_m')}; + static u64 l_tagName10[2] = {MULTI_CHAR('w_no_g'), MULTI_CHAR('w_yes_g')}; + static u64 l_tagName11[2] = {MULTI_CHAR('w_no_gr'), MULTI_CHAR('w_yes_gr')}; + static u64 l_tagName12[3] = {MULTI_CHAR('w_bk_l00'), MULTI_CHAR('w_bk_l01'), MULTI_CHAR('w_bk_l02')}; #if VERSION == VERSION_GCN_JPN - static u64 l_tagName21[2] = {'w_tabi_s', 'w_tabi_x'}; - static u64 l_tagName20[2] = {'w_er_msg', 'w_er_msR'}; + static u64 l_tagName21[2] = {MULTI_CHAR('w_tabi_s'), MULTI_CHAR('w_tabi_x')}; + static u64 l_tagName20[2] = {MULTI_CHAR('w_er_msg'), MULTI_CHAR('w_er_msR')}; #else - static u64 l_tagName21[2] = {'t_for', 't_for1'}; - static u64 l_tagName211[10] = {'tmoyou00', 'tmoyou01', 'tmoyou02', 'tmoyou03', 'tmoyou04', - 'tmoyou05', 'tmoyou06', 'tmoyou07', 'tmoyou08', 'tmoyou09'}; - static u64 l_tagName20[2] = {'er_for0', 'er_for1'}; + static u64 l_tagName21[2] = {MULTI_CHAR('t_for'), MULTI_CHAR('t_for1')}; + static u64 l_tagName211[10] = {MULTI_CHAR('tmoyou00'), MULTI_CHAR('tmoyou01'), MULTI_CHAR('tmoyou02'), MULTI_CHAR('tmoyou03'), MULTI_CHAR('tmoyou04'), + MULTI_CHAR('tmoyou05'), MULTI_CHAR('tmoyou06'), MULTI_CHAR('tmoyou07'), MULTI_CHAR('tmoyou08'), MULTI_CHAR('tmoyou09')}; + static u64 l_tagName20[2] = {MULTI_CHAR('er_for0'), MULTI_CHAR('er_for1')}; #endif - static u64 l_tagName13[3] = {'w_dat_i0', 'w_dat_i1', 'w_dat_i2'}; + static u64 l_tagName13[3] = {MULTI_CHAR('w_dat_i0'), MULTI_CHAR('w_dat_i1'), MULTI_CHAR('w_dat_i2')}; static u8 l_msgNum0[2] = {0x08, 0x07}; static u8 l_msgNum[2] = {0x54, 0x55}; @@ -192,15 +192,15 @@ void dMenu_save_c::screenSet() { field_0x48->searchUpdateMaterialID(mSaveSel.Scr); field_0x4c->searchUpdateMaterialID(mSaveSel.Scr); - mpSelectMoveBase = new CPaneMgr(mSaveSel.Scr, 'w_move_n', 0, NULL); - field_0xa0 = mSaveSel.Scr->search('wmenu_n'); + mpSelectMoveBase = new CPaneMgr(mSaveSel.Scr, MULTI_CHAR('w_move_n'), 0, NULL); + field_0xa0 = mSaveSel.Scr->search(MULTI_CHAR('wmenu_n')); for (int i = 0; i < 3; i++) { mpSelData[i] = new CPaneMgr(mSaveSel.Scr, l_tagName0[i], 0, NULL); } - mpNoYes[0] = new CPaneMgr(mSaveSel.Scr, 'w_no_n', 0, NULL); - mpNoYes[1] = new CPaneMgr(mSaveSel.Scr, 'w_yes_n', 0, NULL); + mpNoYes[0] = new CPaneMgr(mSaveSel.Scr, MULTI_CHAR('w_no_n'), 0, NULL); + mpNoYes[1] = new CPaneMgr(mSaveSel.Scr, MULTI_CHAR('w_yes_n'), 0, NULL); for (int i = 0; i < 2; i++) { #if VERSION == VERSION_GCN_JPN @@ -217,17 +217,17 @@ void dMenu_save_c::screenSet() { ((J2DTextBox*)mpNoYesTxt[i]->getPanePtr())->setString(message); } - mSaveSel.Scr->search('Wi_btn_n')->hide(); - mSaveSel.Scr->search('GC_btn_n')->show(); + mSaveSel.Scr->search(MULTI_CHAR('Wi_btn_n'))->hide(); + mSaveSel.Scr->search(MULTI_CHAR('GC_btn_n'))->show(); - mpBBtnIcon = new CPaneMgrAlpha(mSaveSel.Scr, 'w_nbbtn', 2, NULL); - mpABtnIcon = new CPaneMgrAlpha(mSaveSel.Scr, 'w_nabtn', 2, NULL); + mpBBtnIcon = new CPaneMgrAlpha(mSaveSel.Scr, MULTI_CHAR('w_nbbtn'), 2, NULL); + mpABtnIcon = new CPaneMgrAlpha(mSaveSel.Scr, MULTI_CHAR('w_nabtn'), 2, NULL); #if VERSION == VERSION_GCN_JPN - mpBackTxt = new CPaneMgrAlpha(mSaveSel.Scr, 'w_modo', 2, NULL); - mpConfirmTxt = new CPaneMgrAlpha(mSaveSel.Scr, 'w_kete', 2, NULL); + mpBackTxt = new CPaneMgrAlpha(mSaveSel.Scr, MULTI_CHAR('w_modo'), 2, NULL); + mpConfirmTxt = new CPaneMgrAlpha(mSaveSel.Scr, MULTI_CHAR('w_kete'), 2, NULL); #else - mpBackTxt = new CPaneMgrAlpha(mSaveSel.Scr, 'f_modo', 2, NULL); - mpConfirmTxt = new CPaneMgrAlpha(mSaveSel.Scr, 'f_kete', 2, NULL); + mpBackTxt = new CPaneMgrAlpha(mSaveSel.Scr, MULTI_CHAR('f_modo'), 2, NULL); + mpConfirmTxt = new CPaneMgrAlpha(mSaveSel.Scr, MULTI_CHAR('f_kete'), 2, NULL); #endif mpBackTxt->setAlpha(0); @@ -313,11 +313,11 @@ void dMenu_save_c::screenSet() { } #if VERSION == VERSION_GCN_JPN - mSaveSel.Scr->search('t_for')->hide(); - mSaveSel.Scr->search('t_for1')->hide(); + mSaveSel.Scr->search(MULTI_CHAR('t_for'))->hide(); + mSaveSel.Scr->search(MULTI_CHAR('t_for1'))->hide(); #else - mSaveSel.Scr->search('w_tabi_s')->hide(); - mSaveSel.Scr->search('w_tabi_x')->hide(); + mSaveSel.Scr->search(MULTI_CHAR('w_tabi_s'))->hide(); + mSaveSel.Scr->search(MULTI_CHAR('w_tabi_x'))->hide(); for (int i = 0; i < 10; i++) { mSaveSel.Scr->search(l_tagName211[i])->hide(); @@ -345,13 +345,13 @@ void dMenu_save_c::screenSet() { mpHeaderTxtPane[1]->setAlpha(0); mHeaderTxtType = 0; - field_0xb4 = mSaveSel.Scr->search('w_er_n'); + field_0xb4 = mSaveSel.Scr->search(MULTI_CHAR('w_er_n')); #if VERSION == VERSION_GCN_JPN - mSaveSel.Scr->search('er_for0')->hide(); - mSaveSel.Scr->search('er_for1')->hide(); + mSaveSel.Scr->search(MULTI_CHAR('er_for0'))->hide(); + mSaveSel.Scr->search(MULTI_CHAR('er_for1'))->hide(); #else - mSaveSel.Scr->search('w_er_msg')->hide(); - mSaveSel.Scr->search('w_er_msR')->hide(); + mSaveSel.Scr->search(MULTI_CHAR('w_er_msg'))->hide(); + mSaveSel.Scr->search(MULTI_CHAR('w_er_msR'))->hide(); #endif for (int i = 0; i < 2; i++) { @@ -390,7 +390,7 @@ void dMenu_save_c::screenSet() { mSelIcon->setPos(pos.x, pos.y, mpSelData[mSelectedFile]->getPanePtr(), true); mSelIcon->setAlphaRate(0.0f); - J2DPane* pane = mSaveSel.Scr->search('Nm_02'); + J2DPane* pane = mSaveSel.Scr->search(MULTI_CHAR('Nm_02')); pane->setAnimation(field_0x40); field_0x64 = 0; field_0x50 = 1; @@ -793,7 +793,7 @@ void dMenu_save_c::saveQuestion() { if (mYesNoCursor == CURSOR_YES) { field_0x1c0 = 1; - J2DPane* pane = mSaveSel.Scr->search('Nm_02'); + J2DPane* pane = mSaveSel.Scr->search(MULTI_CHAR('Nm_02')); pane->setAnimation(field_0x40); field_0xd2 = 0; diff --git a/src/d/d_menu_skill.cpp b/src/d/d_menu_skill.cpp index 8aaececff3..a1c4e76a31 100644 --- a/src/d/d_menu_skill.cpp +++ b/src/d/d_menu_skill.cpp @@ -360,57 +360,57 @@ void dMenu_Skill_c::read_close_move() { void dMenu_Skill_c::screenSetMenu() { static const u64 tag_sub0[7] = { - 'menu_t0s', 'menu_t1s', 'menu_t2s', 'menu_t3s', 'menu_t4s', 'menu_t5s', 'menu_t51', + MULTI_CHAR('menu_t0s'), MULTI_CHAR('menu_t1s'), MULTI_CHAR('menu_t2s'), MULTI_CHAR('menu_t3s'), MULTI_CHAR('menu_t4s'), MULTI_CHAR('menu_t5s'), MULTI_CHAR('menu_t51'), }; static const u64 tag_sub1[7] = { - 'menu_t0', 'menu_t1', 'menu_t2', 'menu_t3', 'menu_t4', 'menu_t5', 'menu_t6', + MULTI_CHAR('menu_t0'), MULTI_CHAR('menu_t1'), MULTI_CHAR('menu_t2'), MULTI_CHAR('menu_t3'), MULTI_CHAR('menu_t4'), MULTI_CHAR('menu_t5'), MULTI_CHAR('menu_t6'), }; static const u64 tag_name0[7] = { - 'menu_t6s', 'menu_f7s', 'menu_f8s', 'menu_t9s', 'menu_10s', 'menu_11s', 'menu_112', + MULTI_CHAR('menu_t6s'), MULTI_CHAR('menu_f7s'), MULTI_CHAR('menu_f8s'), MULTI_CHAR('menu_t9s'), MULTI_CHAR('menu_10s'), MULTI_CHAR('menu_11s'), MULTI_CHAR('menu_112'), }; static const u64 tag_name1[7] = { - 'menu_f6', 'menu_f7', 'menu_t8', 'menu_t9', 'menu_t10', 'menu_t11', 'menu_t01', + MULTI_CHAR('menu_f6'), MULTI_CHAR('menu_f7'), MULTI_CHAR('menu_t8'), MULTI_CHAR('menu_t9'), MULTI_CHAR('menu_t10'), MULTI_CHAR('menu_t11'), MULTI_CHAR('menu_t01'), }; static const u64 ftag_sub0[7] = { - 'fenu_t0s', 'fenu_t1s', 'fenu_t2s', 'fenu_t3s', 'fenu_t4s', 'fenu_t5s', 'fenu_t6s', + MULTI_CHAR('fenu_t0s'), MULTI_CHAR('fenu_t1s'), MULTI_CHAR('fenu_t2s'), MULTI_CHAR('fenu_t3s'), MULTI_CHAR('fenu_t4s'), MULTI_CHAR('fenu_t5s'), MULTI_CHAR('fenu_t6s'), }; static const u64 ftag_sub1[7] = { - 'fenu_t0', 'fenu_t1', 'fenu_t2', 'fenu_t3', 'fenu_t4', 'fenu_t5', 'fenu_t6', + MULTI_CHAR('fenu_t0'), MULTI_CHAR('fenu_t1'), MULTI_CHAR('fenu_t2'), MULTI_CHAR('fenu_t3'), MULTI_CHAR('fenu_t4'), MULTI_CHAR('fenu_t5'), MULTI_CHAR('fenu_t6'), }; static const u64 ftag_name0[7] = { - 'fenu_t7s', 'fenu_t8s', 'fenu_t9s', 'fenu_10s', 'fenu_11s', 'fenu_12s', 'fenu_13s', + MULTI_CHAR('fenu_t7s'), MULTI_CHAR('fenu_t8s'), MULTI_CHAR('fenu_t9s'), MULTI_CHAR('fenu_10s'), MULTI_CHAR('fenu_11s'), MULTI_CHAR('fenu_12s'), MULTI_CHAR('fenu_13s'), }; static const u64 ftag_name1[7] = { - 'fenu_t7', 'fenu_t8', 'fenu_t9', 'fenu_10', 'fenu_11', 'fenu_12', 'fenu_13', + MULTI_CHAR('fenu_t7'), MULTI_CHAR('fenu_t8'), MULTI_CHAR('fenu_t9'), MULTI_CHAR('fenu_10'), MULTI_CHAR('fenu_11'), MULTI_CHAR('fenu_12'), MULTI_CHAR('fenu_13'), }; static const u64 tag_letter[7] = { - 'let_00_n', 'let_01_n', 'let_02_n', 'let_03_n', 'let_04_n', 'let_05_n', 'let_06_n', + MULTI_CHAR('let_00_n'), MULTI_CHAR('let_01_n'), MULTI_CHAR('let_02_n'), MULTI_CHAR('let_03_n'), MULTI_CHAR('let_04_n'), MULTI_CHAR('let_05_n'), MULTI_CHAR('let_06_n'), }; static const u64 tag_frame[7] = { - 'flame_00', 'flame_01', 'flame_02', 'flame_03', 'flame_04', 'flame_05', 'flame_06', + MULTI_CHAR('flame_00'), MULTI_CHAR('flame_01'), MULTI_CHAR('flame_02'), MULTI_CHAR('flame_03'), MULTI_CHAR('flame_04'), MULTI_CHAR('flame_05'), MULTI_CHAR('flame_06'), }; static const u64 tag_maki[7] = { - 'maki_0n', 'maki_1n', 'maki_2n', 'maki_3n', 'maki_4n', 'maki_5n', 'maki_6n', + MULTI_CHAR('maki_0n'), MULTI_CHAR('maki_1n'), MULTI_CHAR('maki_2n'), MULTI_CHAR('maki_3n'), MULTI_CHAR('maki_4n'), MULTI_CHAR('maki_5n'), MULTI_CHAR('maki_6n'), }; static const u64 tag_makic[7] = { - 'maki_0', 'maki_1', 'maki_2', 'maki_3', 'maki_4', 'maki_5', 'maki_6', + MULTI_CHAR('maki_0'), MULTI_CHAR('maki_1'), MULTI_CHAR('maki_2'), MULTI_CHAR('maki_3'), MULTI_CHAR('maki_4'), MULTI_CHAR('maki_5'), MULTI_CHAR('maki_6'), }; mpMenuScreen = new J2DScreen(); mpMenuScreen->setPriority("zelda_ougi_window.blo", 0x20000, mpArchive); dPaneClass_showNullPane(mpMenuScreen); - mpParent = new CPaneMgr(mpMenuScreen, 'n_all', 2, NULL); + mpParent = new CPaneMgr(mpMenuScreen, MULTI_CHAR('n_all'), 2, NULL); mpParent->setAlphaRate(0.0f); for (int i = 0; i < 7; i++) { #if VERSION == VERSION_GCN_JPN @@ -469,11 +469,11 @@ void dMenu_Skill_c::screenSetMenu() { } } #if VERSION == VERSION_GCN_JPN - J2DTextBox* textBox = (J2DTextBox*)mpMenuScreen->search('t_t00'); - mpMenuScreen->search('f_t00')->hide(); + J2DTextBox* textBox = (J2DTextBox*)mpMenuScreen->search(MULTI_CHAR('t_t00')); + mpMenuScreen->search(MULTI_CHAR('f_t00'))->hide(); #else - J2DTextBox* textBox = (J2DTextBox*)mpMenuScreen->search('f_t00'); - mpMenuScreen->search('t_t00')->hide(); + J2DTextBox* textBox = (J2DTextBox*)mpMenuScreen->search(MULTI_CHAR('f_t00')); + mpMenuScreen->search(MULTI_CHAR('t_t00'))->hide(); #endif textBox->setFont(mDoExt_getSubFont()); textBox->setString(0x200, ""); @@ -482,29 +482,29 @@ void dMenu_Skill_c::screenSetMenu() { void dMenu_Skill_c::screenSetLetter() { static const u64 name_tag[4] = { - 'item_n04', - 'item_n05', - 'item_n06', - 'item_n07', + MULTI_CHAR('item_n04'), + MULTI_CHAR('item_n05'), + MULTI_CHAR('item_n06'), + MULTI_CHAR('item_n07'), }; static const u64 fame_tag[4] = { - 'f_item_1', - 'f_item_2', - 'f_item_3', - 'f_item_4', + MULTI_CHAR('f_item_1'), + MULTI_CHAR('f_item_2'), + MULTI_CHAR('f_item_3'), + MULTI_CHAR('f_item_4'), }; mpLetterScreen = new J2DScreen(); mpLetterScreen->setPriority("zelda_ougi_info.blo", 0x20000, mpArchive); dPaneClass_showNullPane(mpLetterScreen); #if VERSION == VERSION_GCN_JPN - mpTextPane = new CPaneMgr(mpLetterScreen, 'mg_3line', 0, NULL); - mpLetterScreen->search('n_e4line')->hide(); + mpTextPane = new CPaneMgr(mpLetterScreen, MULTI_CHAR('mg_3line'), 0, NULL); + mpLetterScreen->search(MULTI_CHAR('n_e4line'))->hide(); #else - mpTextPane = new CPaneMgr(mpLetterScreen, 'mg_e4lin', 0, NULL); - mpLetterScreen->search('n_3line')->hide(); + mpTextPane = new CPaneMgr(mpLetterScreen, MULTI_CHAR('mg_e4lin'), 0, NULL); + mpLetterScreen->search(MULTI_CHAR('n_3line'))->hide(); #endif - mpExpName = new CPaneMgr(mpLetterScreen, 'label_n', 0, NULL); + mpExpName = new CPaneMgr(mpLetterScreen, MULTI_CHAR('label_n'), 0, NULL); J2DTextBox* paneFont = (J2DTextBox*)mpTextPane->getPanePtr(); paneFont->setFont(mDoExt_getMesgFont()); J2DTextBox* paneString = (J2DTextBox*)mpTextPane->getPanePtr(); @@ -520,7 +520,7 @@ void dMenu_Skill_c::screenSetLetter() { mpNameString[i]->setFont(mDoExt_getMesgFont()); mpNameString[i]->setString(0x40, ""); } - mpTextParent = new CPaneMgr(mpLetterScreen, 'n_all', 2, NULL); + mpTextParent = new CPaneMgr(mpLetterScreen, MULTI_CHAR('n_all'), 2, NULL); mpTextParent->setAlphaRate(0.0f); ResTIMG* timg = (ResTIMG*)dComIfGp_getMain2DArchive()->getResource('TIMG', "tt_block8x8.bti"); mpBlackTex = new J2DPicture(timg); @@ -530,10 +530,10 @@ void dMenu_Skill_c::screenSetLetter() { void dMenu_Skill_c::screenSetDoIcon() { static const u64 text_a_tag[5] = { - 'atext1_1', 'atext1_2', 'atext1_3', 'atext1_4', 'atext1_5', + MULTI_CHAR('atext1_1'), MULTI_CHAR('atext1_2'), MULTI_CHAR('atext1_3'), MULTI_CHAR('atext1_4'), MULTI_CHAR('atext1_5'), }; static const u64 text_b_tag[5] = { - 'btext1_1', 'btext1_2', 'btext1_3', 'btext1_4', 'btext1_5', + MULTI_CHAR('btext1_1'), MULTI_CHAR('btext1_2'), MULTI_CHAR('btext1_3'), MULTI_CHAR('btext1_4'), MULTI_CHAR('btext1_5'), }; mpIconScreen = new J2DScreen(); mpIconScreen->setPriority("zelda_collect_soubi_do_icon_parts.blo", 0x20000, mpArchive); diff --git a/src/d/d_meter2_draw.cpp b/src/d/d_meter2_draw.cpp index 5be39371cd..80a1af9b98 100644 --- a/src/d/d_meter2_draw.cpp +++ b/src/d/d_meter2_draw.cpp @@ -50,7 +50,7 @@ dMeter2Draw_c::dMeter2Draw_c(JKRExpHeap* mp_heap) { JUT_ASSERT(0, fg != false); dPaneClass_showNullPane(mpScreen); - mpScreen->search('ju_ring5')->hide(); + mpScreen->search(MULTI_CHAR('ju_ring5'))->hide(); field_0x73c = 0.0f; for (int i = 0; i < 2; i++) { @@ -71,10 +71,10 @@ dMeter2Draw_c::dMeter2Draw_c(JKRExpHeap* mp_heap) { JUT_ASSERT(0, fg != false); dPaneClass_showNullPane(mpPikariScreen); - mpPikariParent = new CPaneMgr(mpPikariScreen, 'pika_n', 0, NULL); + mpPikariParent = new CPaneMgr(mpPikariScreen, MULTI_CHAR('pika_n'), 0, NULL); JUT_ASSERT(0, mpPikariParent != NULL); - mPikariBlack = static_cast(mpPikariScreen->search('pika00'))->getBlack(); - mPikariWhite = static_cast(mpPikariScreen->search('pika00'))->getWhite(); + mPikariBlack = static_cast(mpPikariScreen->search(MULTI_CHAR('pika00')))->getBlack(); + mPikariWhite = static_cast(mpPikariScreen->search(MULTI_CHAR('pika00')))->getWhite(); OSInitFastCast(); void* pikari_bck = JKRGetNameResource("zelda_icon_pikari.bck", dComIfGp_getMain2DArchive()); @@ -86,14 +86,14 @@ dMeter2Draw_c::dMeter2Draw_c(JKRExpHeap* mp_heap) { mPikariBpk->searchUpdateMaterialID(mpPikariScreen); playPikariBpkAnimation(1.0f); - mpParent = new CPaneMgr(mpScreen, 'n_all', 2, NULL); + mpParent = new CPaneMgr(mpScreen, MULTI_CHAR('n_all'), 2, NULL); JUT_ASSERT(0, mpParent != NULL); - static u64 const a_tag[] = {'cont_at1', 'cont_at2', 'cont_at3', 'cont_at4', 'cont_at'}; - static u64 const b_tag[] = {'cont_bt1', 'cont_bt2', 'cont_bt3', 'cont_bt4', 'cont_bt'}; - static u64 const z_tag[] = {'cont_zt1', 'cont_zt2', 'cont_zt3', 'cont_zt4', 'cont_rt'}; - static u64 const x_tag[] = {'cont_xt1', 'cont_xt2', 'cont_xt3', 'cont_xt4', 'cont_xt5'}; - static u64 const y_tag[] = {'cont_yt1', 'cont_yt2', 'cont_yt3', 'cont_yt4', 'cont_yt5'}; + static u64 const a_tag[] = {MULTI_CHAR('cont_at1'), MULTI_CHAR('cont_at2'), MULTI_CHAR('cont_at3'), MULTI_CHAR('cont_at4'), MULTI_CHAR('cont_at')}; + static u64 const b_tag[] = {MULTI_CHAR('cont_bt1'), MULTI_CHAR('cont_bt2'), MULTI_CHAR('cont_bt3'), MULTI_CHAR('cont_bt4'), MULTI_CHAR('cont_bt')}; + static u64 const z_tag[] = {MULTI_CHAR('cont_zt1'), MULTI_CHAR('cont_zt2'), MULTI_CHAR('cont_zt3'), MULTI_CHAR('cont_zt4'), MULTI_CHAR('cont_rt')}; + static u64 const x_tag[] = {MULTI_CHAR('cont_xt1'), MULTI_CHAR('cont_xt2'), MULTI_CHAR('cont_xt3'), MULTI_CHAR('cont_xt4'), MULTI_CHAR('cont_xt5')}; + static u64 const y_tag[] = {MULTI_CHAR('cont_yt1'), MULTI_CHAR('cont_yt2'), MULTI_CHAR('cont_yt3'), MULTI_CHAR('cont_yt4'), MULTI_CHAR('cont_yt5')}; for (int i = 0; i < 5; i++) { mpAText[i] = new CPaneMgr(mpScreen, a_tag[i], 0, NULL); @@ -721,36 +721,36 @@ void dMeter2Draw_c::initLife() { } static u64 const life_tag[] = { - 'hpb_00', 'hpb_01', 'hpb_02', 'hpb_03', 'hpb_04', 'hpb_05', 'hpb_06', - 'hpb_07', 'hpb_08', 'hpb_09', 'hpb_10', 'hpb_11', 'hpb_12', 'hpb_13', - 'hpb_14', 'hpb_15', 'hpb_16', 'hpb_17', 'hpb_18', 'hpb_19', + MULTI_CHAR('hpb_00'), MULTI_CHAR('hpb_01'), MULTI_CHAR('hpb_02'), MULTI_CHAR('hpb_03'), MULTI_CHAR('hpb_04'), MULTI_CHAR('hpb_05'), MULTI_CHAR('hpb_06'), + MULTI_CHAR('hpb_07'), MULTI_CHAR('hpb_08'), MULTI_CHAR('hpb_09'), MULTI_CHAR('hpb_10'), MULTI_CHAR('hpb_11'), MULTI_CHAR('hpb_12'), MULTI_CHAR('hpb_13'), + MULTI_CHAR('hpb_14'), MULTI_CHAR('hpb_15'), MULTI_CHAR('hpb_16'), MULTI_CHAR('hpb_17'), MULTI_CHAR('hpb_18'), MULTI_CHAR('hpb_19'), }; static u64 const mark_tag[] = { - 'heartn00', 'heartn01', 'heartn02', 'heartn03', 'heartn04', 'heartn05', 'heartn06', - 'heartn07', 'heartn08', 'heartn09', 'heartn10', 'heartn11', 'heartn12', 'heartn13', - 'heartn14', 'heartn15', 'heartn16', 'heartn17', 'heartn18', 'heartn19', + MULTI_CHAR('heartn00'), MULTI_CHAR('heartn01'), MULTI_CHAR('heartn02'), MULTI_CHAR('heartn03'), MULTI_CHAR('heartn04'), MULTI_CHAR('heartn05'), MULTI_CHAR('heartn06'), + MULTI_CHAR('heartn07'), MULTI_CHAR('heartn08'), MULTI_CHAR('heartn09'), MULTI_CHAR('heartn10'), MULTI_CHAR('heartn11'), MULTI_CHAR('heartn12'), MULTI_CHAR('heartn13'), + MULTI_CHAR('heartn14'), MULTI_CHAR('heartn15'), MULTI_CHAR('heartn16'), MULTI_CHAR('heartn17'), MULTI_CHAR('heartn18'), MULTI_CHAR('heartn19'), }; static u64 const base_tag[] = { - 'h_ba_n00', 'h_ba_n01', 'h_ba_n02', 'h_ba_n03', 'h_ba_n04', 'h_ba_n05', 'h_ba_n06', - 'h_ba_n07', 'h_ba_n08', 'h_ba_n09', 'h_ba_n10', 'h_ba_n11', 'h_ba_n12', 'h_ba_n13', - 'h_ba_n14', 'h_ba_n15', 'h_ba_n16', 'h_ba_n17', 'h_ba_n18', 'h_ba_n19', + MULTI_CHAR('h_ba_n00'), MULTI_CHAR('h_ba_n01'), MULTI_CHAR('h_ba_n02'), MULTI_CHAR('h_ba_n03'), MULTI_CHAR('h_ba_n04'), MULTI_CHAR('h_ba_n05'), MULTI_CHAR('h_ba_n06'), + MULTI_CHAR('h_ba_n07'), MULTI_CHAR('h_ba_n08'), MULTI_CHAR('h_ba_n09'), MULTI_CHAR('h_ba_n10'), MULTI_CHAR('h_ba_n11'), MULTI_CHAR('h_ba_n12'), MULTI_CHAR('h_ba_n13'), + MULTI_CHAR('h_ba_n14'), MULTI_CHAR('h_ba_n15'), MULTI_CHAR('h_ba_n16'), MULTI_CHAR('h_ba_n17'), MULTI_CHAR('h_ba_n18'), MULTI_CHAR('h_ba_n19'), }; static u64 const lifet1_tag[] = { - 'hear_00s', 'hear_01s', 'hear_02s', 'hear_03s', 'hear_04s', 'hear_05s', 'hear_06s', - 'hear_07s', 'hear_08s', 'hear_09s', 'hear_10s', 'hear_11s', 'hear_12s', 'hear_13s', - 'hear_14s', 'hear_15s', 'hear_16s', 'hear_17s', 'hear_18s', 'hear_19s', + MULTI_CHAR('hear_00s'), MULTI_CHAR('hear_01s'), MULTI_CHAR('hear_02s'), MULTI_CHAR('hear_03s'), MULTI_CHAR('hear_04s'), MULTI_CHAR('hear_05s'), MULTI_CHAR('hear_06s'), + MULTI_CHAR('hear_07s'), MULTI_CHAR('hear_08s'), MULTI_CHAR('hear_09s'), MULTI_CHAR('hear_10s'), MULTI_CHAR('hear_11s'), MULTI_CHAR('hear_12s'), MULTI_CHAR('hear_13s'), + MULTI_CHAR('hear_14s'), MULTI_CHAR('hear_15s'), MULTI_CHAR('hear_16s'), MULTI_CHAR('hear_17s'), MULTI_CHAR('hear_18s'), MULTI_CHAR('hear_19s'), }; static u64 const lifet2_tag[] = { - 'hear_00', 'hear_01', 'hear_02', 'hear_03', 'hear_04', 'hear_05', 'hear_06', - 'hear_07', 'hear_08', 'hear_09', 'hear_10', 'hear_11', 'hear_12', 'hear_13', - 'hear_14', 'hear_15', 'hear_16', 'hear_17', 'hear_18', 'hear_19', + MULTI_CHAR('hear_00'), MULTI_CHAR('hear_01'), MULTI_CHAR('hear_02'), MULTI_CHAR('hear_03'), MULTI_CHAR('hear_04'), MULTI_CHAR('hear_05'), MULTI_CHAR('hear_06'), + MULTI_CHAR('hear_07'), MULTI_CHAR('hear_08'), MULTI_CHAR('hear_09'), MULTI_CHAR('hear_10'), MULTI_CHAR('hear_11'), MULTI_CHAR('hear_12'), MULTI_CHAR('hear_13'), + MULTI_CHAR('hear_14'), MULTI_CHAR('hear_15'), MULTI_CHAR('hear_16'), MULTI_CHAR('hear_17'), MULTI_CHAR('hear_18'), MULTI_CHAR('hear_19'), }; - mpLifeParent = new CPaneMgr(mpScreen, 'heart_n', 2, NULL); + mpLifeParent = new CPaneMgr(mpScreen, MULTI_CHAR('heart_n'), 2, NULL); JUT_ASSERT(0, mpLifeParent != NULL); for (int i = 0; i < 20; i++) { @@ -770,7 +770,7 @@ void dMeter2Draw_c::initLife() { JUT_ASSERT(0, mpLifeTexture[i][1] != NULL); } - mpBigHeart = new CPaneMgr(mpScreen, 'bigh_n', 2, NULL); + mpBigHeart = new CPaneMgr(mpScreen, MULTI_CHAR('bigh_n'), 2, NULL); JUT_ASSERT(0, mpBigHeart != NULL); mpLifeParent->setAlphaRate(0.0f); @@ -791,20 +791,20 @@ void dMeter2Draw_c::initMagic() { field_0x550 = 0.0f; field_0x554 = 0.0f; - mpMagicParent = new CPaneMgr(mpKanteraScreen, 'magic_n', 2, NULL); + mpMagicParent = new CPaneMgr(mpKanteraScreen, MULTI_CHAR('magic_n'), 2, NULL); JUT_ASSERT(0, mpMagicParent != NULL); - mpMagicBase = new CPaneMgr(mpKanteraScreen, 'mm_base', 0, NULL); + mpMagicBase = new CPaneMgr(mpKanteraScreen, MULTI_CHAR('mm_base'), 0, NULL); JUT_ASSERT(0, mpMagicBase != NULL); - mpMagicFrameL = new CPaneMgr(mpKanteraScreen, 'm_w_l_n', 2, NULL); + mpMagicFrameL = new CPaneMgr(mpKanteraScreen, MULTI_CHAR('m_w_l_n'), 2, NULL); JUT_ASSERT(0, mpMagicFrameL != NULL); mpMagicFrameR = - new CPaneMgr(mpKanteraScreen, 'm_w_r_n', 2, NULL); + new CPaneMgr(mpKanteraScreen, MULTI_CHAR('m_w_r_n'), 2, NULL); JUT_ASSERT(0, mpMagicFrameR != NULL); - mpMagicMeter = new CPaneMgr(mpKanteraScreen, 'mm_00', 0, NULL); + mpMagicMeter = new CPaneMgr(mpKanteraScreen, MULTI_CHAR('mm_00'), 0, NULL); JUT_ASSERT(0, mpMagicMeter != NULL); OSInitFastCast(); @@ -851,7 +851,7 @@ void dMeter2Draw_c::initMagic() { } void dMeter2Draw_c::initLightDrop() { - mpLightDropParent = new CPaneMgr(mpScreen, 's_tuta_n', 2, NULL); + mpLightDropParent = new CPaneMgr(mpScreen, MULTI_CHAR('s_tuta_n'), 2, NULL); JUT_ASSERT(0, mpLightDropParent != NULL); static u64 const tuta_0[] = { @@ -860,13 +860,13 @@ void dMeter2Draw_c::initLightDrop() { }; static u64 const tuta_1[] = { - 'sl_00', 'sl_01', 'sl_02', 'sl_03', 'sl_04', 'sl_05', 'sl_06', 'sl_07', - 'sl_08', 'sl_09', 'sl_10', 'sl_11', 'sl_12', 'sl_13', 'sl_14', 'sl_15', + MULTI_CHAR('sl_00'), MULTI_CHAR('sl_01'), MULTI_CHAR('sl_02'), MULTI_CHAR('sl_03'), MULTI_CHAR('sl_04'), MULTI_CHAR('sl_05'), MULTI_CHAR('sl_06'), MULTI_CHAR('sl_07'), + MULTI_CHAR('sl_08'), MULTI_CHAR('sl_09'), MULTI_CHAR('sl_10'), MULTI_CHAR('sl_11'), MULTI_CHAR('sl_12'), MULTI_CHAR('sl_13'), MULTI_CHAR('sl_14'), MULTI_CHAR('sl_15'), }; static u64 const tuta_2[] = { - 'scp_00', 'scp_01', 'scp_02', 'scp_03', 'scp_04', 'scp_05', 'scp_06', 'scp_07', - 'scp_08', 'scp_09', 'scp_10', 'scp_11', 'scp_12', 'scp_13', 'scp_14', 'scp_15', + MULTI_CHAR('scp_00'), MULTI_CHAR('scp_01'), MULTI_CHAR('scp_02'), MULTI_CHAR('scp_03'), MULTI_CHAR('scp_04'), MULTI_CHAR('scp_05'), MULTI_CHAR('scp_06'), MULTI_CHAR('scp_07'), + MULTI_CHAR('scp_08'), MULTI_CHAR('scp_09'), MULTI_CHAR('scp_10'), MULTI_CHAR('scp_11'), MULTI_CHAR('scp_12'), MULTI_CHAR('scp_13'), MULTI_CHAR('scp_14'), MULTI_CHAR('scp_15'), }; for (int i = 0; i < 16; i++) { @@ -880,10 +880,10 @@ void dMeter2Draw_c::initLightDrop() { JUT_ASSERT(0, mpSIParts[i][2] != NULL); } - mpSIParent[0] = new CPaneMgr(mpScreen, 'tuta_n', 2, NULL); + mpSIParent[0] = new CPaneMgr(mpScreen, MULTI_CHAR('tuta_n'), 2, NULL); JUT_ASSERT(0, mpSIParent[0] != NULL); - mpSIParent[1] = new CPaneMgr(mpScreen, 's_null', 2, NULL); + mpSIParent[1] = new CPaneMgr(mpScreen, MULTI_CHAR('s_null'), 2, NULL); JUT_ASSERT(0, mpSIParent[1] != NULL); mpLightDropParent->setAlphaRate(0.0f); @@ -907,12 +907,12 @@ void dMeter2Draw_c::initLightDrop() { } void dMeter2Draw_c::initRupeeKey() { - mpRupeeKeyParent = new CPaneMgr(mpScreen, 'r_k_n', 2, NULL); + mpRupeeKeyParent = new CPaneMgr(mpScreen, MULTI_CHAR('r_k_n'), 2, NULL); JUT_ASSERT(0, mpRupeeKeyParent != NULL); field_0x718 = 1.0f; - static u64 const rupeet1_tag[] = {'r_n_1_s', 'r_n_2_s', 'r_n_3_s', 'r_n_4_s'}; - static u64 const rupeet2_tag[] = {'r_n_1', 'r_n_2', 'r_n_3', 'r_n_4'}; + static u64 const rupeet1_tag[] = {MULTI_CHAR('r_n_1_s'), MULTI_CHAR('r_n_2_s'), MULTI_CHAR('r_n_3_s'), MULTI_CHAR('r_n_4_s')}; + static u64 const rupeet2_tag[] = {MULTI_CHAR('r_n_1'), MULTI_CHAR('r_n_2'), MULTI_CHAR('r_n_3'), MULTI_CHAR('r_n_4')}; for (int i = 0; i < 4; i++) { mpRupeeTexture[i][0] = new CPaneMgr(mpScreen, rupeet1_tag[i], 0, NULL); @@ -924,20 +924,20 @@ void dMeter2Draw_c::initRupeeKey() { mpRupeeTexture[i][1]->getPanePtr()->setBasePosition(J2DBasePosition_4); } - mpRupeeParent[0] = new CPaneMgr(mpScreen, 'rupi_n', 2, NULL); + mpRupeeParent[0] = new CPaneMgr(mpScreen, MULTI_CHAR('rupi_n'), 2, NULL); JUT_ASSERT(0, mpRupeeParent[0] != NULL); - mpRupeeParent[1] = new CPaneMgr(mpScreen, 'moyou_rn', 2, NULL); + mpRupeeParent[1] = new CPaneMgr(mpScreen, MULTI_CHAR('moyou_rn'), 2, NULL); JUT_ASSERT(0, mpRupeeParent[1] != NULL); - mpRupeeParent[2] = new CPaneMgr(mpScreen, 'moyou_ln', 2, NULL); + mpRupeeParent[2] = new CPaneMgr(mpScreen, MULTI_CHAR('moyou_ln'), 2, NULL); JUT_ASSERT(0, mpRupeeParent[2] != NULL); mpRupeeParent[0]->setAlphaRate(0.0f); mpRupeeParent[1]->setAlphaRate(0.0f); mpRupeeParent[2]->setAlphaRate(0.0f); - static u64 const key_tag[] = {'key_nul', 'k_n_1_n', 'k_n_2_n', 'k_n_3_n', 'k_n_4_n'}; + static u64 const key_tag[] = {MULTI_CHAR('key_nul'), MULTI_CHAR('k_n_1_n'), MULTI_CHAR('k_n_2_n'), MULTI_CHAR('k_n_3_n'), MULTI_CHAR('k_n_4_n')}; for (int i = 0; i < 5; i++) { mpKeyTexture[i] = new CPaneMgr(mpScreen, key_tag[i], 0, NULL); @@ -946,7 +946,7 @@ void dMeter2Draw_c::initRupeeKey() { mpKeyTexture[i]->hide(); } - mpKeyParent = new CPaneMgr(mpScreen, 'key_n', 2, NULL); + mpKeyParent = new CPaneMgr(mpScreen, MULTI_CHAR('key_n'), 2, NULL); JUT_ASSERT(0, mpKeyParent != NULL); mpKeyParent->setAlphaRate(0.0f); @@ -988,7 +988,7 @@ void dMeter2Draw_c::initButton() { } } - mpItemB = new CPaneMgr(mpScreen, 'b_itm_p', 0, NULL); + mpItemB = new CPaneMgr(mpScreen, MULTI_CHAR('b_itm_p'), 0, NULL); JUT_ASSERT(0, mpItemB != NULL); mpItemB->getPanePtr()->setBasePosition(J2DBasePosition_4); mpItemB->show(); @@ -1003,19 +1003,19 @@ void dMeter2Draw_c::initButton() { field_0x771 = dComIfGs_getBButtonItemKey(); mpItemBPane = new J2DPicture( - 'b_itm_pp', + MULTI_CHAR('b_itm_pp'), JGeometry::TBox2(0.0f, 0.0f, mpItemB->getInitSizeX(), mpItemB->getInitSizeY()), static_cast(mpItemB->getPanePtr())->getTexture(0)->getTexInfo(), NULL); JUT_ASSERT(0, mpItemBPane != NULL); mpItemBPane->setBasePosition(J2DBasePosition_4); mpItemB->getPanePtr()->appendChild(mpItemBPane); - mpItemXY[0] = new CPaneMgr(mpScreen, 'x_itm_p', 0, NULL); + mpItemXY[0] = new CPaneMgr(mpScreen, MULTI_CHAR('x_itm_p'), 0, NULL); JUT_ASSERT(0, mpItemXY[0] != NULL); mpItemXY[0]->getPanePtr()->setBasePosition(J2DBasePosition_4); dMeter2Info_setMeterItemPanePtr(0, mpItemXY[0]); - mpItemXY[1] = new CPaneMgr(mpScreen, 'y_itm_p', 0, NULL); + mpItemXY[1] = new CPaneMgr(mpScreen, MULTI_CHAR('y_itm_p'), 0, NULL); JUT_ASSERT(0, mpItemXY[1] != NULL); mpItemXY[1]->getPanePtr()->setBasePosition(J2DBasePosition_4); dMeter2Info_setMeterItemPanePtr(1, mpItemXY[1]); @@ -1024,7 +1024,7 @@ void dMeter2Draw_c::initButton() { mpBTextA = NULL; mpItemXYPane[0] = new J2DPicture( - 'x_itm_pp', + MULTI_CHAR('x_itm_pp'), JGeometry::TBox2(0.0f, 0.0f, mpItemXY[0]->getInitSizeX(), mpItemXY[0]->getInitSizeY()), static_cast(mpItemXY[0]->getPanePtr())->getTexture(0)->getTexInfo(), NULL); JUT_ASSERT(0, mpItemXYPane[0] != NULL); @@ -1032,84 +1032,84 @@ void dMeter2Draw_c::initButton() { mpItemXY[0]->getPanePtr()->appendChild(mpItemXYPane[0]); mpItemXYPane[1] = new J2DPicture( - 'y_itm_pp', + MULTI_CHAR('y_itm_pp'), JGeometry::TBox2(0.0f, 0.0f, mpItemXY[1]->getInitSizeX(), mpItemXY[1]->getInitSizeY()), static_cast(mpItemXY[1]->getPanePtr())->getTexture(0)->getTexInfo(), NULL); JUT_ASSERT(0, mpItemXYPane[1] != NULL); mpItemXYPane[1]->setBasePosition(J2DBasePosition_4); mpItemXY[1]->getPanePtr()->appendChild(mpItemXYPane[1]); - mpItemR = new CPaneMgr(mpScreen, 'r_itm_p', 0, NULL); + mpItemR = new CPaneMgr(mpScreen, MULTI_CHAR('r_itm_p'), 0, NULL); JUT_ASSERT(0, mpItemR != NULL); mpItemR->getPanePtr()->setBasePosition(J2DBasePosition_4); dMeter2Info_setMeterItemPanePtr(2, mpItemR); mpItemXYPane[2] = new J2DPicture( - 'r_itm_pp', + MULTI_CHAR('r_itm_pp'), JGeometry::TBox2(0.0f, 0.0f, mpItemR->getInitSizeX(), mpItemR->getInitSizeY()), static_cast(mpItemR->getPanePtr())->getTexture(0)->getTexInfo(), NULL); JUT_ASSERT(0, mpItemXYPane[2] != NULL); mpItemXYPane[2]->setBasePosition(J2DBasePosition_4); mpItemR->getPanePtr()->appendChild(mpItemXYPane[2]); - mpLightB = new CPaneMgr(mpScreen, 'b_light', 0, NULL); + mpLightB = new CPaneMgr(mpScreen, MULTI_CHAR('b_light'), 0, NULL); JUT_ASSERT(0, mpLightB != NULL); mpLightB->getPanePtr()->setBasePosition(J2DBasePosition_4); field_0x72c = 1.0f; mpLightB->hide(); - mpLightXY[0] = new CPaneMgr(mpScreen, 'x_light', 0, NULL); + mpLightXY[0] = new CPaneMgr(mpScreen, MULTI_CHAR('x_light'), 0, NULL); JUT_ASSERT(0, mpLightXY[0] != NULL); mpLightXY[0]->getPanePtr()->setBasePosition(J2DBasePosition_4); mpLightXY[0]->hide(); - mpLightXY[1] = new CPaneMgr(mpScreen, 'y_light', 0, NULL); + mpLightXY[1] = new CPaneMgr(mpScreen, MULTI_CHAR('y_light'), 0, NULL); JUT_ASSERT(0, mpLightXY[1] != NULL); mpLightXY[1]->getPanePtr()->setBasePosition(J2DBasePosition_4); mpLightXY[1]->hide(); - mpLightXY[2] = new CPaneMgr(mpScreen, 'r_light', 0, NULL); + mpLightXY[2] = new CPaneMgr(mpScreen, MULTI_CHAR('r_light'), 0, NULL); JUT_ASSERT(0, mpLightXY[2] != NULL); mpLightXY[2]->getPanePtr()->setBasePosition(J2DBasePosition_4); mpLightXY[2]->hide(); - mpBTextA = new CPaneMgr(mpScreen, 'b_text_a', 0, NULL); + mpBTextA = new CPaneMgr(mpScreen, MULTI_CHAR('b_text_a'), 0, NULL); JUT_ASSERT(0, mpBTextA != NULL); - mpBTextB = new CPaneMgr(mpScreen, 'b_text_b', 0, NULL); + mpBTextB = new CPaneMgr(mpScreen, MULTI_CHAR('b_text_b'), 0, NULL); JUT_ASSERT(0, mpBTextB != NULL); - mpBTextXY[0] = new CPaneMgr(mpScreen, 'b_text_x', 0, NULL); + mpBTextXY[0] = new CPaneMgr(mpScreen, MULTI_CHAR('b_text_x'), 0, NULL); JUT_ASSERT(0, mpBTextXY[0] != NULL); - mpBTextXY[1] = new CPaneMgr(mpScreen, 'b_text_y', 0, NULL); + mpBTextXY[1] = new CPaneMgr(mpScreen, MULTI_CHAR('b_text_y'), 0, NULL); JUT_ASSERT(0, mpBTextXY[1] != NULL); mpBTextXY[2] = NULL; - mpTextA = new CPaneMgr(mpScreen, 'a_text_n', 0, NULL); + mpTextA = new CPaneMgr(mpScreen, MULTI_CHAR('a_text_n'), 0, NULL); JUT_ASSERT(0, mpTextA != NULL); - mpTextB = new CPaneMgr(mpScreen, 'b_text_n', 0, NULL); + mpTextB = new CPaneMgr(mpScreen, MULTI_CHAR('b_text_n'), 0, NULL); JUT_ASSERT(0, mpTextB != NULL); - mpTextXY[2] = new CPaneMgr(mpScreen, 'z_text_n', 0, NULL); + mpTextXY[2] = new CPaneMgr(mpScreen, MULTI_CHAR('z_text_n'), 0, NULL); JUT_ASSERT(0, mpTextXY[2] != NULL); - mpTextXY[0] = new CPaneMgr(mpScreen, 'x_text_n', 0, NULL); + mpTextXY[0] = new CPaneMgr(mpScreen, MULTI_CHAR('x_text_n'), 0, NULL); JUT_ASSERT(0, mpTextXY[0] != NULL); - mpTextXY[1] = new CPaneMgr(mpScreen, 'y_text_n', 0, NULL); + mpTextXY[1] = new CPaneMgr(mpScreen, MULTI_CHAR('y_text_n'), 0, NULL); JUT_ASSERT(0, mpTextXY[1] != NULL); - mpTextI = new CPaneMgr(mpScreen, 'i_text_n', 2, NULL); + mpTextI = new CPaneMgr(mpScreen, MULTI_CHAR('i_text_n'), 2, NULL); JUT_ASSERT(0, mpTextI != NULL); - mpTextM = new CPaneMgr(mpScreen, 'm_text_n', 2, NULL); + mpTextM = new CPaneMgr(mpScreen, MULTI_CHAR('m_text_n'), 2, NULL); JUT_ASSERT(0, mpTextM != NULL); - static u64 const juji_i_tag[] = {'ju_ring4', 'yaji_00', 'yaji_01', 'ju_ring2', 'ju_ring4'}; - static u64 const juji_m_tag[] = {'ju_ring3', 'yaji_02', 'yaji_03', 'ju_ring3', 0}; + static u64 const juji_i_tag[] = {MULTI_CHAR('ju_ring4'), MULTI_CHAR('yaji_00'), MULTI_CHAR('yaji_01'), MULTI_CHAR('ju_ring2'), MULTI_CHAR('ju_ring4')}; + static u64 const juji_m_tag[] = {MULTI_CHAR('ju_ring3'), MULTI_CHAR('yaji_02'), MULTI_CHAR('yaji_03'), MULTI_CHAR('ju_ring3'), 0}; for (int i = 0; i < 5; i++) { if (juji_i_tag[i] != 0) { @@ -1130,33 +1130,33 @@ void dMeter2Draw_c::initButton() { mpTextXY[0]->hide(); mpTextXY[1]->hide(); - mpButtonParent = new CPaneMgr(mpScreen, 'cont_n', 2, NULL); + mpButtonParent = new CPaneMgr(mpScreen, MULTI_CHAR('cont_n'), 2, NULL); JUT_ASSERT(0, mpButtonParent != NULL); - mpButtonA = new CPaneMgr(mpScreen, 'abtn_n', 2, NULL); + mpButtonA = new CPaneMgr(mpScreen, MULTI_CHAR('abtn_n'), 2, NULL); JUT_ASSERT(0, mpButtonA != NULL); - mpButtonB = new CPaneMgr(mpScreen, 'bbtn_n', 2, NULL); + mpButtonB = new CPaneMgr(mpScreen, MULTI_CHAR('bbtn_n'), 2, NULL); JUT_ASSERT(0, mpButtonB != NULL); field_0x730 = 1.0f; - mpButtonMidona = new CPaneMgr(mpScreen, 'midona_n', 2, NULL); + mpButtonMidona = new CPaneMgr(mpScreen, MULTI_CHAR('midona_n'), 2, NULL); JUT_ASSERT(0, mpButtonMidona != NULL); mButtonZAlpha = 0.0f; field_0x724 = 0.0f; field_0x738 = 0.0f; field_0x740 = 0; - mpButtonXY[0] = new CPaneMgr(mpScreen, 'xbtn_n', 2, NULL); + mpButtonXY[0] = new CPaneMgr(mpScreen, MULTI_CHAR('xbtn_n'), 2, NULL); JUT_ASSERT(0, mpButtonXY[0] != NULL); - mpButtonXY[1] = new CPaneMgr(mpScreen, 'ybtn_n', 2, NULL); + mpButtonXY[1] = new CPaneMgr(mpScreen, MULTI_CHAR('ybtn_n'), 2, NULL); JUT_ASSERT(0, mpButtonXY[1] != NULL); - mpButtonXY[2] = new CPaneMgr(mpScreen, 'zbtn_n', 2, NULL); + mpButtonXY[2] = new CPaneMgr(mpScreen, MULTI_CHAR('zbtn_n'), 2, NULL); JUT_ASSERT(0, mpButtonXY[2] != NULL); - mpUzu = new CPaneMgrAlpha(mpScreen, 'uzu_n', 2, NULL); + mpUzu = new CPaneMgrAlpha(mpScreen, MULTI_CHAR('uzu_n'), 2, NULL); JUT_ASSERT(0, mpUzu != NULL); ResTIMG* timg = (ResTIMG*)dComIfGp_getMain2DArchive()->getResource( @@ -1208,54 +1208,54 @@ void dMeter2Draw_c::initButton() { } void dMeter2Draw_c::initButtonCross() { - mpButtonCrossParent = new CPaneMgr(mpScreen, 'juji_n', 2, NULL); + mpButtonCrossParent = new CPaneMgr(mpScreen, MULTI_CHAR('juji_n'), 2, NULL); JUT_ASSERT(0, mpButtonCrossParent != NULL); - static_cast(mpScreen->search('cont_ju0'))->setFont(mDoExt_getMesgFont()); - static_cast(mpScreen->search('cont_ju1'))->setFont(mDoExt_getMesgFont()); - static_cast(mpScreen->search('cont_ju2'))->setFont(mDoExt_getMesgFont()); - static_cast(mpScreen->search('cont_ju3'))->setFont(mDoExt_getMesgFont()); - static_cast(mpScreen->search('cont_ju4'))->setFont(mDoExt_getMesgFont()); + static_cast(mpScreen->search(MULTI_CHAR('cont_ju0')))->setFont(mDoExt_getMesgFont()); + static_cast(mpScreen->search(MULTI_CHAR('cont_ju1')))->setFont(mDoExt_getMesgFont()); + static_cast(mpScreen->search(MULTI_CHAR('cont_ju2')))->setFont(mDoExt_getMesgFont()); + static_cast(mpScreen->search(MULTI_CHAR('cont_ju3')))->setFont(mDoExt_getMesgFont()); + static_cast(mpScreen->search(MULTI_CHAR('cont_ju4')))->setFont(mDoExt_getMesgFont()); - static_cast(mpScreen->search('cont_ju0'))->setString(0x40, ""); - static_cast(mpScreen->search('cont_ju1'))->setString(0x40, ""); - static_cast(mpScreen->search('cont_ju2'))->setString(0x40, ""); - static_cast(mpScreen->search('cont_ju3'))->setString(0x40, ""); - static_cast(mpScreen->search('cont_ju4'))->setString(0x40, ""); + static_cast(mpScreen->search(MULTI_CHAR('cont_ju0')))->setString(0x40, ""); + static_cast(mpScreen->search(MULTI_CHAR('cont_ju1')))->setString(0x40, ""); + static_cast(mpScreen->search(MULTI_CHAR('cont_ju2')))->setString(0x40, ""); + static_cast(mpScreen->search(MULTI_CHAR('cont_ju3')))->setString(0x40, ""); + static_cast(mpScreen->search(MULTI_CHAR('cont_ju4')))->setString(0x40, ""); dMeter2Info_getString( - 0x61, static_cast(mpScreen->search('cont_ju0'))->getStringPtr(), NULL); + 0x61, static_cast(mpScreen->search(MULTI_CHAR('cont_ju0')))->getStringPtr(), NULL); dMeter2Info_getString( - 0x61, static_cast(mpScreen->search('cont_ju1'))->getStringPtr(), NULL); + 0x61, static_cast(mpScreen->search(MULTI_CHAR('cont_ju1')))->getStringPtr(), NULL); dMeter2Info_getString( - 0x61, static_cast(mpScreen->search('cont_ju2'))->getStringPtr(), NULL); + 0x61, static_cast(mpScreen->search(MULTI_CHAR('cont_ju2')))->getStringPtr(), NULL); dMeter2Info_getString( - 0x61, static_cast(mpScreen->search('cont_ju3'))->getStringPtr(), NULL); + 0x61, static_cast(mpScreen->search(MULTI_CHAR('cont_ju3')))->getStringPtr(), NULL); dMeter2Info_getString( - 0x61, static_cast(mpScreen->search('cont_ju4'))->getStringPtr(), NULL); + 0x61, static_cast(mpScreen->search(MULTI_CHAR('cont_ju4')))->getStringPtr(), NULL); - static_cast(mpScreen->search('cont_ju5'))->setFont(mDoExt_getMesgFont()); - static_cast(mpScreen->search('cont_ju6'))->setFont(mDoExt_getMesgFont()); - static_cast(mpScreen->search('cont_ju7'))->setFont(mDoExt_getMesgFont()); - static_cast(mpScreen->search('cont_ju8'))->setFont(mDoExt_getMesgFont()); - static_cast(mpScreen->search('cont_ju9'))->setFont(mDoExt_getMesgFont()); + static_cast(mpScreen->search(MULTI_CHAR('cont_ju5')))->setFont(mDoExt_getMesgFont()); + static_cast(mpScreen->search(MULTI_CHAR('cont_ju6')))->setFont(mDoExt_getMesgFont()); + static_cast(mpScreen->search(MULTI_CHAR('cont_ju7')))->setFont(mDoExt_getMesgFont()); + static_cast(mpScreen->search(MULTI_CHAR('cont_ju8')))->setFont(mDoExt_getMesgFont()); + static_cast(mpScreen->search(MULTI_CHAR('cont_ju9')))->setFont(mDoExt_getMesgFont()); - static_cast(mpScreen->search('cont_ju5'))->setString(0x40, ""); - static_cast(mpScreen->search('cont_ju6'))->setString(0x40, ""); - static_cast(mpScreen->search('cont_ju7'))->setString(0x40, ""); - static_cast(mpScreen->search('cont_ju8'))->setString(0x40, ""); - static_cast(mpScreen->search('cont_ju9'))->setString(0x40, ""); + static_cast(mpScreen->search(MULTI_CHAR('cont_ju5')))->setString(0x40, ""); + static_cast(mpScreen->search(MULTI_CHAR('cont_ju6')))->setString(0x40, ""); + static_cast(mpScreen->search(MULTI_CHAR('cont_ju7')))->setString(0x40, ""); + static_cast(mpScreen->search(MULTI_CHAR('cont_ju8')))->setString(0x40, ""); + static_cast(mpScreen->search(MULTI_CHAR('cont_ju9')))->setString(0x40, ""); dMeter2Info_getString( - 0x62, static_cast(mpScreen->search('cont_ju5'))->getStringPtr(), NULL); + 0x62, static_cast(mpScreen->search(MULTI_CHAR('cont_ju5')))->getStringPtr(), NULL); dMeter2Info_getString( - 0x62, static_cast(mpScreen->search('cont_ju6'))->getStringPtr(), NULL); + 0x62, static_cast(mpScreen->search(MULTI_CHAR('cont_ju6')))->getStringPtr(), NULL); dMeter2Info_getString( - 0x62, static_cast(mpScreen->search('cont_ju7'))->getStringPtr(), NULL); + 0x62, static_cast(mpScreen->search(MULTI_CHAR('cont_ju7')))->getStringPtr(), NULL); dMeter2Info_getString( - 0x62, static_cast(mpScreen->search('cont_ju8'))->getStringPtr(), NULL); + 0x62, static_cast(mpScreen->search(MULTI_CHAR('cont_ju8')))->getStringPtr(), NULL); dMeter2Info_getString( - 0x62, static_cast(mpScreen->search('cont_ju9'))->getStringPtr(), NULL); + 0x62, static_cast(mpScreen->search(MULTI_CHAR('cont_ju9')))->getStringPtr(), NULL); mpButtonCrossParent->setAlphaRate(0.0f); drawButtonCross(g_drawHIO.mButtonCrossOFFPosX, g_drawHIO.mButtonCrossOFFPosY); @@ -1269,9 +1269,9 @@ void dMeter2Draw_c::playPikariBckAnimation(f32 i_frame) { } void dMeter2Draw_c::setPikariBpkAnimation(J2DAnmColor* i_bpk) { - mpPikariScreen->search('pika00')->setAnimation(i_bpk); - mpPikariScreen->search('moya00')->setAnimation(i_bpk); - mpPikariScreen->search('moyabs')->setAnimation(i_bpk); + mpPikariScreen->search(MULTI_CHAR('pika00'))->setAnimation(i_bpk); + mpPikariScreen->search(MULTI_CHAR('moya00'))->setAnimation(i_bpk); + mpPikariScreen->search(MULTI_CHAR('moyabs'))->setAnimation(i_bpk); } void dMeter2Draw_c::playPikariBpkAnimation(f32 i_frame) { @@ -1283,18 +1283,18 @@ void dMeter2Draw_c::playPikariBpkAnimation(f32 i_frame) { void dMeter2Draw_c::playOxygenBpkAnimation(J2DAnmColor* i_bpk) { if (i_bpk == NULL || mpMagicMeter->getAlpha() == 0) { - mpKanteraScreen->search('mm_00')->setAnimation((J2DAnmColor*)NULL); + mpKanteraScreen->search(MULTI_CHAR('mm_00'))->setAnimation((J2DAnmColor*)NULL); } else { field_0x558++; if (field_0x558 >= i_bpk->getFrameMax()) { field_0x558 -= i_bpk->getFrameMax(); } - mpKanteraScreen->search('mm_00')->setAnimation(i_bpk); + mpKanteraScreen->search(MULTI_CHAR('mm_00'))->setAnimation(i_bpk); i_bpk->setFrame(field_0x558); mpKanteraScreen->animation(); - mpKanteraScreen->search('mm_00')->setAnimation((J2DAnmColor*)NULL); + mpKanteraScreen->search(MULTI_CHAR('mm_00'))->setAnimation((J2DAnmColor*)NULL); } } @@ -1315,20 +1315,20 @@ void dMeter2Draw_c::drawPikari(f32 i_posX, f32 i_posY, f32* i_framep, f32 i_scal if (param_9 == 4) { var_f31 = 24.0f; - if (mpPikariScreen->search('moya00')->isVisible()) { - mpPikariScreen->search('moya00')->hide(); + if (mpPikariScreen->search(MULTI_CHAR('moya00'))->isVisible()) { + mpPikariScreen->search(MULTI_CHAR('moya00'))->hide(); } - if (mpPikariScreen->search('moyabs')->isVisible()) { - mpPikariScreen->search('moyabs')->hide(); + if (mpPikariScreen->search(MULTI_CHAR('moyabs'))->isVisible()) { + mpPikariScreen->search(MULTI_CHAR('moyabs'))->hide(); } } else { - if (!mpPikariScreen->search('moya00')->isVisible()) { - mpPikariScreen->search('moya00')->show(); + if (!mpPikariScreen->search(MULTI_CHAR('moya00'))->isVisible()) { + mpPikariScreen->search(MULTI_CHAR('moya00'))->show(); } - if (!mpPikariScreen->search('moyabs')->isVisible()) { - mpPikariScreen->search('moyabs')->show(); + if (!mpPikariScreen->search(MULTI_CHAR('moyabs'))->isVisible()) { + mpPikariScreen->search(MULTI_CHAR('moyabs'))->show(); } } @@ -1357,21 +1357,21 @@ void dMeter2Draw_c::drawPikari(f32 i_posX, f32 i_posY, f32* i_framep, f32 i_scal mpPikariParent->scale(i_scale * mpPikariParent->getScaleX(), i_scale * mpPikariParent->getScaleY()); - if (mpPikariScreen->search('moya00')->isVisible()) { - static_cast(mpPikariScreen->search('moya00')) + if (mpPikariScreen->search(MULTI_CHAR('moya00'))->isVisible()) { + static_cast(mpPikariScreen->search(MULTI_CHAR('moya00'))) ->setBlackWhite(i_moyaBlack, i_moyaWhite); } - if (mpPikariScreen->search('moyabs')->isVisible()) { - static_cast(mpPikariScreen->search('moyabs')) + if (mpPikariScreen->search(MULTI_CHAR('moyabs'))->isVisible()) { + static_cast(mpPikariScreen->search(MULTI_CHAR('moyabs'))) ->setBlackWhite(i_moyabsBlack, i_moyabsWhite); } if (param_9 != 4) { - static_cast(mpPikariScreen->search('pika00')) + static_cast(mpPikariScreen->search(MULTI_CHAR('pika00'))) ->setBlackWhite(mPikariBlack, mPikariBlack); } else { - static_cast(mpPikariScreen->search('pika00')) + static_cast(mpPikariScreen->search(MULTI_CHAR('pika00'))) ->setBlackWhite(g_MsgObject_HIO_c.mPikariPikaR1, g_MsgObject_HIO_c.mPikariPikaR0); } @@ -1390,9 +1390,9 @@ void dMeter2Draw_c::drawPikariHakusha(f32 i_posX, f32 i_posY, f32 i_frame, f32 i mpPikariParent->scale(i_scale * mpPikariParent->getScaleX(), i_scale * mpPikariParent->getScaleY()); - static_cast(mpPikariScreen->search('moya00')) + static_cast(mpPikariScreen->search(MULTI_CHAR('moya00'))) ->setBlackWhite(i_moyaBlack, i_moyaWhite); - static_cast(mpPikariScreen->search('moyabs')) + static_cast(mpPikariScreen->search(MULTI_CHAR('moyabs'))) ->setBlackWhite(i_moyabsBlack, i_moyabsWhite); mpPikariScreen->draw(0.0f, 0.0f, dComIfGp_getCurrentGrafPort()); @@ -1407,7 +1407,7 @@ void dMeter2Draw_c::changeTextureLife(int i_no, bool param_1, u8 i_quarterNum) { mpLifeTexture[i_no][0]->hide(); mpLifeTexture[i_no][1]->hide(); - static u64 const tag_bigh[] = {'bigh_00', 'bigh_01', 'bigh_02', 'bigh_03'}; + static u64 const tag_bigh[] = {MULTI_CHAR('bigh_00'), MULTI_CHAR('bigh_01'), MULTI_CHAR('bigh_02'), MULTI_CHAR('bigh_03')}; for (int i = 0; i < 4; i++) { if (i == i_quarterNum) { @@ -1417,7 +1417,7 @@ void dMeter2Draw_c::changeTextureLife(int i_no, bool param_1, u8 i_quarterNum) { } } - static u64 const tag_du[] = {'heart_ln', 'heart_un'}; + static u64 const tag_du[] = {MULTI_CHAR('heart_ln'), MULTI_CHAR('heart_un')}; mpBigHeart->translate(mpLifeParts[i_no]->getTranslateX() + (mpScreen->search(tag_du[i_no / 10])->getTranslateX() - @@ -2295,7 +2295,7 @@ void dMeter2Draw_c::drawButtonB(u8 i_action, bool param_1, f32 i_posX, f32 i_pos } if (i_action == 0x26 || i_action == 0x2E) { - mpScreen->search('item_b_n')->show(); + mpScreen->search(MULTI_CHAR('item_b_n'))->show(); var_r31 = 1; if (mButtonBItem != dComIfGs_getSelectEquipSword()) { @@ -2309,17 +2309,17 @@ void dMeter2Draw_c::drawButtonB(u8 i_action, bool param_1, f32 i_posX, f32 i_pos changeTextureItemB(mButtonBItem); break; default: - mpScreen->search('item_b_n')->hide(); + mpScreen->search(MULTI_CHAR('item_b_n'))->hide(); var_r31 = 0; } } } else if (param_1 == true && i_action == 0x4F) { - mpScreen->search('item_b_n')->show(); + mpScreen->search(MULTI_CHAR('item_b_n'))->show(); mButtonBItem = fpcNm_ITEM_LURE_ROD; changeTextureItemB(fpcNm_ITEM_LURE_ROD); var_r31 = 2; } else { - mpScreen->search('item_b_n')->hide(); + mpScreen->search(MULTI_CHAR('item_b_n'))->hide(); } mpItemB->getPanePtr()->rotate(mpItemB->getSizeX() * 0.5f, mpItemB->getSizeY() * 0.5f, ROTATE_Z, @@ -2344,7 +2344,7 @@ void dMeter2Draw_c::drawButtonB(u8 i_action, bool param_1, f32 i_posX, f32 i_pos } void dMeter2Draw_c::drawButtonR(u8 unused0, u8 i_action, bool unused1, bool unused2) { - mpScreen->search('item_r_n')->hide(); + mpScreen->search(MULTI_CHAR('item_r_n'))->hide(); mpTextXY[2]->show(); getActionString(i_action, 1, &field_0x768[2]); @@ -2431,7 +2431,7 @@ void dMeter2Draw_c::drawButtonBin(u8 i_action) { void dMeter2Draw_c::drawButtonXY(int i_no, u8 i_itemNo, u8 i_action, bool param_3, bool param_4) { JUT_ASSERT(0, i_no < SELECT_MAX_e); - static u64 const tag[] = {'item_x_n', 'item_y_n'}; + static u64 const tag[] = {MULTI_CHAR('item_x_n'), MULTI_CHAR('item_y_n')}; if (!param_3) { mpScreen->search(tag[i_no])->hide(); @@ -3926,7 +3926,7 @@ s16 dMeter2Draw_c::getButtonTimer() { // unused static u64 const tag_7759[] = { - 'item_x_n', - 'item_y_n', - 'item_j_n', + MULTI_CHAR('item_x_n'), + MULTI_CHAR('item_y_n'), + MULTI_CHAR('item_j_n'), }; diff --git a/src/d/d_meter_button.cpp b/src/d/d_meter_button.cpp index 7147e97bc3..a9bcd0f95d 100644 --- a/src/d/d_meter_button.cpp +++ b/src/d/d_meter_button.cpp @@ -141,42 +141,42 @@ int dMeterButton_c::_execute(u32 i_flags, bool i_drawA, bool i_drawB, bool i_dra u8 dir_3D = dComIfGp_get3DDirection(); if (dir_3D & DIR_LEFT_e) { - if (!mpButtonScreen->search('yaji_l_n')->isVisible()) { - mpButtonScreen->search('yaji_l_n')->show(); + if (!mpButtonScreen->search(MULTI_CHAR('yaji_l_n'))->isVisible()) { + mpButtonScreen->search(MULTI_CHAR('yaji_l_n'))->show(); } } else { - if (mpButtonScreen->search('yaji_l_n')->isVisible() == true) { - mpButtonScreen->search('yaji_l_n')->hide(); + if (mpButtonScreen->search(MULTI_CHAR('yaji_l_n'))->isVisible() == true) { + mpButtonScreen->search(MULTI_CHAR('yaji_l_n'))->hide(); } } if (dir_3D & DIR_UP_e) { - if (!mpButtonScreen->search('yaji_u_n')->isVisible()) { - mpButtonScreen->search('yaji_u_n')->show(); + if (!mpButtonScreen->search(MULTI_CHAR('yaji_u_n'))->isVisible()) { + mpButtonScreen->search(MULTI_CHAR('yaji_u_n'))->show(); } } else { - if (mpButtonScreen->search('yaji_u_n')->isVisible() == true) { - mpButtonScreen->search('yaji_u_n')->hide(); + if (mpButtonScreen->search(MULTI_CHAR('yaji_u_n'))->isVisible() == true) { + mpButtonScreen->search(MULTI_CHAR('yaji_u_n'))->hide(); } } if (dir_3D & DIR_DOWN_e) { - if (!mpButtonScreen->search('yaji_d_n')->isVisible()) { - mpButtonScreen->search('yaji_d_n')->show(); + if (!mpButtonScreen->search(MULTI_CHAR('yaji_d_n'))->isVisible()) { + mpButtonScreen->search(MULTI_CHAR('yaji_d_n'))->show(); } } else { - if (mpButtonScreen->search('yaji_d_n')->isVisible() == true) { - mpButtonScreen->search('yaji_d_n')->hide(); + if (mpButtonScreen->search(MULTI_CHAR('yaji_d_n'))->isVisible() == true) { + mpButtonScreen->search(MULTI_CHAR('yaji_d_n'))->hide(); } } if (dir_3D & DIR_RIGHT_e) { - if (!mpButtonScreen->search('yaji_r_n')->isVisible()) { - mpButtonScreen->search('yaji_r_n')->show(); + if (!mpButtonScreen->search(MULTI_CHAR('yaji_r_n'))->isVisible()) { + mpButtonScreen->search(MULTI_CHAR('yaji_r_n'))->show(); } } else { - if (mpButtonScreen->search('yaji_r_n')->isVisible() == true) { - mpButtonScreen->search('yaji_r_n')->hide(); + if (mpButtonScreen->search(MULTI_CHAR('yaji_r_n'))->isVisible() == true) { + mpButtonScreen->search(MULTI_CHAR('yaji_r_n'))->hide(); } } } @@ -185,39 +185,39 @@ int dMeterButton_c::_execute(u32 i_flags, bool i_drawA, bool i_drawB, bool i_dra u8 dir_c = dComIfGp_getCStickDirection(); if (dir_c & DIR_LEFT_e) { - if (!mpButtonScreen->search('yaji_ln')->isVisible()) { - mpButtonScreen->search('yaji_ln')->show(); + if (!mpButtonScreen->search(MULTI_CHAR('yaji_ln'))->isVisible()) { + mpButtonScreen->search(MULTI_CHAR('yaji_ln'))->show(); } } else { - if (mpButtonScreen->search('yaji_ln')->isVisible() == true) { - mpButtonScreen->search('yaji_ln')->hide(); + if (mpButtonScreen->search(MULTI_CHAR('yaji_ln'))->isVisible() == true) { + mpButtonScreen->search(MULTI_CHAR('yaji_ln'))->hide(); } } if (dir_c & DIR_UP_e) { - if (!mpButtonScreen->search('yaji_un')->isVisible()) { - mpButtonScreen->search('yaji_un')->show(); + if (!mpButtonScreen->search(MULTI_CHAR('yaji_un'))->isVisible()) { + mpButtonScreen->search(MULTI_CHAR('yaji_un'))->show(); } } else { - if (mpButtonScreen->search('yaji_un')->isVisible() == true) { - mpButtonScreen->search('yaji_un')->hide(); + if (mpButtonScreen->search(MULTI_CHAR('yaji_un'))->isVisible() == true) { + mpButtonScreen->search(MULTI_CHAR('yaji_un'))->hide(); } } if (dir_c & DIR_DOWN_e) { - if (!mpButtonScreen->search('yaji_dn')->isVisible()) { - mpButtonScreen->search('yaji_dn')->show(); + if (!mpButtonScreen->search(MULTI_CHAR('yaji_dn'))->isVisible()) { + mpButtonScreen->search(MULTI_CHAR('yaji_dn'))->show(); } - } else if (mpButtonScreen->search('yaji_dn')->isVisible() == true) { - mpButtonScreen->search('yaji_dn')->hide(); + } else if (mpButtonScreen->search(MULTI_CHAR('yaji_dn'))->isVisible() == true) { + mpButtonScreen->search(MULTI_CHAR('yaji_dn'))->hide(); } if (dir_c & DIR_RIGHT_e) { - if (!mpButtonScreen->search('yaji_rn')->isVisible()) { - mpButtonScreen->search('yaji_rn')->show(); + if (!mpButtonScreen->search(MULTI_CHAR('yaji_rn'))->isVisible()) { + mpButtonScreen->search(MULTI_CHAR('yaji_rn'))->show(); } - } else if (mpButtonScreen->search('yaji_rn')->isVisible() == true) { - mpButtonScreen->search('yaji_rn')->hide(); + } else if (mpButtonScreen->search(MULTI_CHAR('yaji_rn'))->isVisible() == true) { + mpButtonScreen->search(MULTI_CHAR('yaji_rn'))->hide(); } } @@ -986,13 +986,13 @@ bool dMeterButton_c::alphaAnimeButtonBin(u32 i_flags, bool i_drawButton) { void dMeterButton_c::screenInitButton() { static u64 const text_tag[] = { - 'info_ar0', 'info_ar1', 'info_ar2', 'info_ar3', 'info_ar4', - 'info_ar5', 'info_ar6', 'info_ar7', 'info_ar8', 'info_ar9', + MULTI_CHAR('info_ar0'), MULTI_CHAR('info_ar1'), MULTI_CHAR('info_ar2'), MULTI_CHAR('info_ar3'), MULTI_CHAR('info_ar4'), + MULTI_CHAR('info_ar5'), MULTI_CHAR('info_ar6'), MULTI_CHAR('info_ar7'), MULTI_CHAR('info_ar8'), MULTI_CHAR('info_ar9'), }; static u64 const ftext_tag[] = { - 'fnfo_ar0', 'fnfo_ar1', 'fnfo_ar2', 'fnfo_ar3', 'fnfo_ar4', - 'fnfo_ar5', 'fnfo_ar6', 'fnfo_ar7', 'fnfo_ar8', 'fnfo_ar9', + MULTI_CHAR('fnfo_ar0'), MULTI_CHAR('fnfo_ar1'), MULTI_CHAR('fnfo_ar2'), MULTI_CHAR('fnfo_ar3'), MULTI_CHAR('fnfo_ar4'), + MULTI_CHAR('fnfo_ar5'), MULTI_CHAR('fnfo_ar6'), MULTI_CHAR('fnfo_ar7'), MULTI_CHAR('fnfo_ar8'), MULTI_CHAR('fnfo_ar9'), }; OS_REPORT("enter dMeterButton_c::screenInitButton\n"); @@ -1012,7 +1012,7 @@ void dMeterButton_c::screenInitButton() { dPaneClass_showNullPane(mpButtonScreen); field_0x00c = NULL; - mpParent = new CPaneMgr(mpButtonScreen, 'info_n', 0, NULL); + mpParent = new CPaneMgr(mpButtonScreen, MULTI_CHAR('info_n'), 0, NULL); if (mpParent == NULL) OS_REPORT("[%s] %d\n", __FILE__, 1867); JUT_ASSERT(1868, mpParent != NULL); @@ -1037,7 +1037,7 @@ void dMeterButton_c::screenInitButton() { mParentCenterX = (608.0f / 2) - mpParent->getInitCenterPosX(); paneTrans(mpParent, mParentCenterX, 0.0f, 0xFF); - mpButtonA = new CPaneMgr(mpButtonScreen, 'abtn_n', 2, NULL); + mpButtonA = new CPaneMgr(mpButtonScreen, MULTI_CHAR('abtn_n'), 2, NULL); if (mpButtonA == NULL) { OS_REPORT("[%s] %d\n", __FILE__, 1902); } @@ -1045,7 +1045,7 @@ void dMeterButton_c::screenInitButton() { mpButtonA->setAlphaRate(0.0f); mpButtonA->show(); - mpButtonB = new CPaneMgr(mpButtonScreen, 'bbtn_n', 2, NULL); + mpButtonB = new CPaneMgr(mpButtonScreen, MULTI_CHAR('bbtn_n'), 2, NULL); if (mpButtonB == NULL) { OS_REPORT("[%s] %d\n", __FILE__, 1914); } @@ -1053,7 +1053,7 @@ void dMeterButton_c::screenInitButton() { mpButtonB->setAlphaRate(0.0f); mpButtonB->show(); - mpButtonR = new CPaneMgr(mpButtonScreen, 'rbtn_n', 2, NULL); + mpButtonR = new CPaneMgr(mpButtonScreen, MULTI_CHAR('rbtn_n'), 2, NULL); if (mpButtonR == NULL) { OS_REPORT("[%s] %d\n", __FILE__, 1932); } @@ -1061,7 +1061,7 @@ void dMeterButton_c::screenInitButton() { mpButtonR->setAlphaRate(0.0f); mpButtonR->show(); - mpMidona = new CPaneMgr(mpButtonScreen, 'midona', 0, NULL); + mpMidona = new CPaneMgr(mpButtonScreen, MULTI_CHAR('midona'), 0, NULL); JUT_ASSERT(1939, mpMidona != NULL); if (mpMidona == NULL) { OS_REPORT("[%s] %d\n", __FILE__, 1941); @@ -1073,12 +1073,12 @@ void dMeterButton_c::screenInitButton() { #if DEBUG if (mpButtonScreen->search('zbtn') == 0) OS_REPORT("[%s] %d\n", __FILE__, 1947); - if (mpButtonScreen->search('z_btnl') == 0) OS_REPORT("[%s] %d\n", __FILE__, 1948); + if (mpButtonScreen->search(MULTI_CHAR('z_btnl')) == 0) OS_REPORT("[%s] %d\n", __FILE__, 1948); #endif mpButtonScreen->search('zbtn')->show(); - mpButtonScreen->search('z_btnl')->show(); + mpButtonScreen->search(MULTI_CHAR('z_btnl'))->show(); - mpButtonZ = new CPaneMgr(mpButtonScreen, 'zbtn_n', 2, NULL); + mpButtonZ = new CPaneMgr(mpButtonScreen, MULTI_CHAR('zbtn_n'), 2, NULL); if (mpButtonZ == NULL) { OS_REPORT("[%s] %d\n", __FILE__, 1954); } @@ -1086,35 +1086,35 @@ void dMeterButton_c::screenInitButton() { mpButtonZ->setAlphaRate(0.0f); mpButtonZ->show(); - mpButton3D = new CPaneMgr(mpButtonScreen, 'asbtn_n', 2, NULL); + mpButton3D = new CPaneMgr(mpButtonScreen, MULTI_CHAR('asbtn_n'), 2, NULL); JUT_ASSERT(1964, mpButton3D != NULL); mpButton3D->setAlphaRate(0.0f); mpButton3D->show(); - mpButtonScreen->search('yaji_l_n')->hide(); - mpButtonScreen->search('yaji_u_n')->hide(); - mpButtonScreen->search('yaji_d_n')->hide(); - mpButtonScreen->search('yaji_r_n')->hide(); + mpButtonScreen->search(MULTI_CHAR('yaji_l_n'))->hide(); + mpButtonScreen->search(MULTI_CHAR('yaji_u_n'))->hide(); + mpButtonScreen->search(MULTI_CHAR('yaji_d_n'))->hide(); + mpButtonScreen->search(MULTI_CHAR('yaji_r_n'))->hide(); - mpButtonC = new CPaneMgr(mpButtonScreen, 'cbtn_n', 2, NULL); + mpButtonC = new CPaneMgr(mpButtonScreen, MULTI_CHAR('cbtn_n'), 2, NULL); JUT_ASSERT(1992, mpButtonC != NULL); mpButtonC->setAlphaRate(0.0f); mpButtonC->show(); - mpButtonScreen->search('yaji_ln')->hide(); - mpButtonScreen->search('yaji_un')->hide(); - mpButtonScreen->search('yaji_dn')->hide(); - mpButtonScreen->search('yaji_rn')->hide(); + mpButtonScreen->search(MULTI_CHAR('yaji_ln'))->hide(); + mpButtonScreen->search(MULTI_CHAR('yaji_un'))->hide(); + mpButtonScreen->search(MULTI_CHAR('yaji_dn'))->hide(); + mpButtonScreen->search(MULTI_CHAR('yaji_rn'))->hide(); - mpButtonS = new CPaneMgr(mpButtonScreen, 'sbtn_n', 2, NULL); + mpButtonS = new CPaneMgr(mpButtonScreen, MULTI_CHAR('sbtn_n'), 2, NULL); JUT_ASSERT(2002, mpButtonS != NULL); mpButtonS->setAlphaRate(0.0f); - mpButtonX = new CPaneMgr(mpButtonScreen, 'xbtn_n', 2, NULL); + mpButtonX = new CPaneMgr(mpButtonScreen, MULTI_CHAR('xbtn_n'), 2, NULL); JUT_ASSERT(2048, mpButtonX != NULL); mpButtonX->setAlphaRate(0.0f); - mpButtonY = new CPaneMgr(mpButtonScreen, 'ybtn_n', 2, NULL); + mpButtonY = new CPaneMgr(mpButtonScreen, MULTI_CHAR('ybtn_n'), 2, NULL); JUT_ASSERT(2052, mpButtonY != NULL); mpButtonY->setAlphaRate(0.0f); @@ -1123,7 +1123,7 @@ void dMeterButton_c::screenInitButton() { mpButtonRemo2 = NULL; mpButtonAR = NULL; - mpButton3DB = new CPaneMgr(mpButtonScreen, 'as_b_n', 2, NULL); + mpButton3DB = new CPaneMgr(mpButtonScreen, MULTI_CHAR('as_b_n'), 2, NULL); JUT_ASSERT(2060, mpButton3DB != NULL); mpButton3DB->setAlphaRate(0.0f); @@ -1135,19 +1135,19 @@ void dMeterButton_c::screenInitButton() { mpButtonNunZ = NULL; mpButtonNunC = NULL; - mpButtonBin = new CPaneMgr(mpButtonScreen, 'bottl_n', 2, NULL); + mpButtonBin = new CPaneMgr(mpButtonScreen, MULTI_CHAR('bottl_n'), 2, NULL); JUT_ASSERT(2071, mpButtonBin != NULL); mpButtonBin->setAlphaRate(0.0f); - mpText[0] = new CPaneMgr(mpButtonScreen, 'text_n', 2, NULL); + mpText[0] = new CPaneMgr(mpButtonScreen, MULTI_CHAR('text_n'), 2, NULL); JUT_ASSERT(2075, mpText[0] != NULL); mpText[0]->setAlphaRate(0.0f); - mpText[1] = new CPaneMgr(mpButtonScreen, 'text2_n', 2, NULL); + mpText[1] = new CPaneMgr(mpButtonScreen, MULTI_CHAR('text2_n'), 2, NULL); JUT_ASSERT(2079, mpText[1] != NULL); mpText[1]->setAlphaRate(0.0f); - mpItem_c = new CPaneMgr(mpButtonScreen, 'fishing', 0, NULL); + mpItem_c = new CPaneMgr(mpButtonScreen, MULTI_CHAR('fishing'), 0, NULL); JUT_ASSERT(2083, mpItem_c != NULL); mpItem_c->setAlphaRate(0.0f); @@ -1214,8 +1214,8 @@ void dMeterButton_c::screenInitButton() { Mtx m, m2; Vec sp108 = pane.getGlobalVtx(mpButtonScreen->search('zbtn'), &m, 0, false, 0); Vec spFC = pane.getGlobalVtx(mpButtonScreen->search('zbtn'), &m, 3, false, 0); - Vec spF0 = pane.getGlobalVtx(mpButtonScreen->search('midona'), &m2, 0, false, 0); - Vec spE4 = pane.getGlobalVtx(mpButtonScreen->search('midona'), &m2, 3, false, 0); + Vec spF0 = pane.getGlobalVtx(mpButtonScreen->search(MULTI_CHAR('midona')), &m2, 0, false, 0); + Vec spE4 = pane.getGlobalVtx(mpButtonScreen->search(MULTI_CHAR('midona')), &m2, 3, false, 0); f32 var_f2; if (sp108.x > spF0.x) { @@ -1411,18 +1411,18 @@ void dMeterButton_c::screenInitText() { JUT_ASSERT(2457, fg != false); dPaneClass_showNullPane(mpScreen); - mpFkAll_c = new CPaneMgr(mpScreen, 'n_all', 2, NULL); + mpFkAll_c = new CPaneMgr(mpScreen, MULTI_CHAR('n_all'), 2, NULL); OS_REPORT("[%s] %d\n", __FILE__, 2461); JUT_ASSERT(2462, mpFkAll_c != NULL); mpFkAll_c->setAlphaRate(0.0f); OS_REPORT("[%s] %d\n", __FILE__, 2465); - mpScreen->search('mg_null')->move( - g_MsgObject_HIO_c.mTextPosX + mpScreen->search('mg_null')->getBounds().i.x, - g_MsgObject_HIO_c.mTextPosY + mpScreen->search('mg_null')->getBounds().i.y); + mpScreen->search(MULTI_CHAR('mg_null'))->move( + g_MsgObject_HIO_c.mTextPosX + mpScreen->search(MULTI_CHAR('mg_null'))->getBounds().i.x, + g_MsgObject_HIO_c.mTextPosY + mpScreen->search(MULTI_CHAR('mg_null'))->getBounds().i.y); OS_REPORT("[%s] %d\n", __FILE__, 2469); - mpFkRoot_c = new CPaneMgr(mpScreen, 'mg_null', 0, NULL); + mpFkRoot_c = new CPaneMgr(mpScreen, MULTI_CHAR('mg_null'), 0, NULL); JUT_ASSERT(2472, mpFkRoot_c != NULL); OS_REPORT("[%s] %d\n", __FILE__, 2474); @@ -1440,24 +1440,24 @@ void dMeterButton_c::screenInitText() { dPaneClass_showNullPane(mpTextScreen); OS_REPORT("[%s] %d\n", __FILE__, 2496); - mpTmRoot_c = new CPaneMgr(mpTextScreen, 'mg_null', 0, NULL); + mpTmRoot_c = new CPaneMgr(mpTextScreen, MULTI_CHAR('mg_null'), 0, NULL); JUT_ASSERT(2499, mpTmRoot_c != NULL); #if VERSION == VERSION_GCN_JPN if (dComIfGs_getOptRuby() == 0) { - mpTm_c[0] = new CPaneMgr(mpTextScreen, 'mg_3flin', 0, NULL); + mpTm_c[0] = new CPaneMgr(mpTextScreen, MULTI_CHAR('mg_3flin'), 0, NULL); - mpTm_c[1] = new CPaneMgr(mpTextScreen, 't3f_s', 0, NULL); + mpTm_c[1] = new CPaneMgr(mpTextScreen, MULTI_CHAR('t3f_s'), 0, NULL); - field_0x0ec[0] = new CPaneMgr(mpTextScreen, 'mg_3f', 0, NULL); + field_0x0ec[0] = new CPaneMgr(mpTextScreen, MULTI_CHAR('mg_3f'), 0, NULL); - field_0x0ec[1] = new CPaneMgr(mpTextScreen, 'mg_3f_s', 0, NULL); + field_0x0ec[1] = new CPaneMgr(mpTextScreen, MULTI_CHAR('mg_3f_s'), 0, NULL); - mpTextScreen->search('n_3line')->hide(); - mpTextScreen->search('n_3fline')->show(); - mpTextScreen->search('n_e4line')->hide(); + mpTextScreen->search(MULTI_CHAR('n_3line'))->hide(); + mpTextScreen->search(MULTI_CHAR('n_3fline'))->show(); + mpTextScreen->search(MULTI_CHAR('n_e4line'))->hide(); } else { - mpTm_c[0] = new CPaneMgr(mpTextScreen, 'mg_3line', 0, NULL); + mpTm_c[0] = new CPaneMgr(mpTextScreen, MULTI_CHAR('mg_3line'), 0, NULL); mpTm_c[1] = new CPaneMgr(mpTextScreen, 't3_s', 0, NULL); @@ -1465,12 +1465,12 @@ void dMeterButton_c::screenInitText() { field_0x0ec[1] = NULL; OS_REPORT("[%s] %d\n", __FILE__, __LINE__); - mpTextScreen->search('n_3line')->show(); - mpTextScreen->search('n_3fline')->hide(); - mpTextScreen->search('n_e4line')->hide(); + mpTextScreen->search(MULTI_CHAR('n_3line'))->show(); + mpTextScreen->search(MULTI_CHAR('n_3fline'))->hide(); + mpTextScreen->search(MULTI_CHAR('n_e4line'))->hide(); } #else - mpTm_c[0] = new CPaneMgr(mpTextScreen, 'mg_e4lin', 0, NULL); + mpTm_c[0] = new CPaneMgr(mpTextScreen, MULTI_CHAR('mg_e4lin'), 0, NULL); JUT_ASSERT(2504, mpTm_c[0] != NULL); mpTm_c[1] = new CPaneMgr(mpTextScreen, 't4_s', 0, NULL); @@ -1481,9 +1481,9 @@ void dMeterButton_c::screenInitText() { OS_REPORT("[%s] %d\n", __FILE__, 2512); - mpTextScreen->search('n_3line')->hide(); - mpTextScreen->search('n_3fline')->hide(); - mpTextScreen->search('n_e4line')->show(); + mpTextScreen->search(MULTI_CHAR('n_3line'))->hide(); + mpTextScreen->search(MULTI_CHAR('n_3fline'))->hide(); + mpTextScreen->search(MULTI_CHAR('n_e4line'))->show(); #endif OS_REPORT("[%s] %d\n", __FILE__, 2554); @@ -3045,7 +3045,7 @@ f32 dMeterButton_c::getCenterPosCalc(u8 i_button, char* i_string, int param_2) { (mTextScale[param_2] * dMeter2Info_getStringLength(mpTextBox[0], i_string)) * temp_f0; if (field_0x4d9 == param_2 && field_0x4be[param_2] == 1) { - field_0x1e4[param_2] = mButtonBScale * mpButtonScreen->search('fishing')->getWidth(); + field_0x1e4[param_2] = mButtonBScale * mpButtonScreen->search(MULTI_CHAR('fishing'))->getWidth(); } field_0x29c[param_2] = field_0x1e4[param_2]; @@ -3058,15 +3058,15 @@ f32 dMeterButton_c::getCenterPosCalc(u8 i_button, char* i_string, int param_2) { switch (i_button) { case BUTTON_A_e: - mButtonWidth[i_button] = mButtonAScale * mpButtonScreen->search('a_btn1')->getWidth(); + mButtonWidth[i_button] = mButtonAScale * mpButtonScreen->search(MULTI_CHAR('a_btn1'))->getWidth(); field_0x304[i_button] = field_0x1e4[param_2] + mButtonWidth[i_button]; break; case BUTTON_B_e: - mButtonWidth[i_button] = mButtonBScale * mpButtonScreen->search('b_btn')->getWidth(); + mButtonWidth[i_button] = mButtonBScale * mpButtonScreen->search(MULTI_CHAR('b_btn'))->getWidth(); field_0x304[i_button] = field_0x1e4[param_2] + mButtonWidth[i_button]; break; case BUTTON_R_e: - mButtonWidth[i_button] = mButtonRScale * mpButtonScreen->search('r_btn_b')->getWidth(); + mButtonWidth[i_button] = mButtonRScale * mpButtonScreen->search(MULTI_CHAR('r_btn_b'))->getWidth(); field_0x304[i_button] = field_0x1e4[param_2] + mButtonWidth[i_button]; break; case BUTTON_Z_e: @@ -3076,8 +3076,8 @@ f32 dMeterButton_c::getCenterPosCalc(u8 i_button, char* i_string, int param_2) { Mtx m, m2; Vec sp124 = pane.getGlobalVtx(mpButtonScreen->search('zbtn'), &m, 0, false, 0); Vec sp130 = pane.getGlobalVtx(mpButtonScreen->search('zbtn'), &m, 3, false, 0); - Vec sp13C = pane.getGlobalVtx(mpButtonScreen->search('midona'), &m2, 0, false, 0); - Vec sp148 = pane.getGlobalVtx(mpButtonScreen->search('midona'), &m2, 3, false, 0); + Vec sp13C = pane.getGlobalVtx(mpButtonScreen->search(MULTI_CHAR('midona')), &m2, 0, false, 0); + Vec sp148 = pane.getGlobalVtx(mpButtonScreen->search(MULTI_CHAR('midona')), &m2, 3, false, 0); f32 var_f2; if (sp124.x > sp13C.x) { @@ -3099,47 +3099,47 @@ f32 dMeterButton_c::getCenterPosCalc(u8 i_button, char* i_string, int param_2) { field_0x304[i_button] = field_0x1e4[param_2] + mButtonWidth[i_button]; break; case BUTTON_3D_e: - mButtonWidth[i_button] = mButton3DScale * mpButtonScreen->search('as_btn1')->getWidth(); + mButtonWidth[i_button] = mButton3DScale * mpButtonScreen->search(MULTI_CHAR('as_btn1'))->getWidth(); if (dComIfGp_get3DDirection() & DIR_LEFT_e) { - mButtonWidth[i_button] += mButton3DScale * mpButtonScreen->search('yaji04')->getWidth(); + mButtonWidth[i_button] += mButton3DScale * mpButtonScreen->search(MULTI_CHAR('yaji04'))->getWidth(); } if (dComIfGp_get3DDirection() & DIR_RIGHT_e) { - mButtonWidth[i_button] += mButton3DScale * mpButtonScreen->search('yaji02')->getWidth(); + mButtonWidth[i_button] += mButton3DScale * mpButtonScreen->search(MULTI_CHAR('yaji02'))->getWidth(); } field_0x304[i_button] = 0.0f; break; case BUTTON_C_e: if (dComIfGp_checkCameraAttentionStatus(0, 8)) { - mButtonWidth[i_button] = mButtonCScale * mpButtonScreen->search('c_btn')->getWidth(); + mButtonWidth[i_button] = mButtonCScale * mpButtonScreen->search(MULTI_CHAR('c_btn'))->getWidth(); field_0x304[i_button] = 0.0f; } else { mButtonWidth[i_button] = - mButtonCScale * (mpButtonScreen->search('yaji_rn')->getWidth() + - mpButtonScreen->search('c_btn')->getWidth()); + mButtonCScale * (mpButtonScreen->search(MULTI_CHAR('yaji_rn'))->getWidth() + + mpButtonScreen->search(MULTI_CHAR('c_btn'))->getWidth()); field_0x304[i_button] = field_0x1e4[param_2] + mButtonWidth[i_button]; } break; case BUTTON_S_e: - mButtonWidth[i_button] = mButtonSScale * mpButtonScreen->search('a_btn2')->getWidth(); + mButtonWidth[i_button] = mButtonSScale * mpButtonScreen->search(MULTI_CHAR('a_btn2'))->getWidth(); field_0x304[i_button] = field_0x1e4[param_2] + mButtonWidth[i_button]; break; case BUTTON_X_e: - mButtonWidth[i_button] = mButtonXScale * mpButtonScreen->search('x_btn')->getWidth(); + mButtonWidth[i_button] = mButtonXScale * mpButtonScreen->search(MULTI_CHAR('x_btn'))->getWidth(); field_0x304[i_button] = field_0x1e4[param_2] + mButtonWidth[i_button]; break; case BUTTON_Y_e: - mButtonWidth[i_button] = mButtonYScale * mpButtonScreen->search('y_btn')->getWidth(); + mButtonWidth[i_button] = mButtonYScale * mpButtonScreen->search(MULTI_CHAR('y_btn'))->getWidth(); field_0x304[i_button] = field_0x1e4[param_2] + mButtonWidth[i_button]; break; case BUTTON_3DB_e: - mButtonWidth[i_button] = mButton3DBScale * mpButtonScreen->search('as_b_n')->getWidth(); + mButtonWidth[i_button] = mButton3DBScale * mpButtonScreen->search(MULTI_CHAR('as_b_n'))->getWidth(); field_0x304[i_button] = field_0x1e4[param_2] + mButtonWidth[i_button]; break; case BUTTON_BIN_e: - mButtonWidth[i_button] = field_0x5f0 * mpButtonScreen->search('bottl_n')->getWidth(); + mButtonWidth[i_button] = field_0x5f0 * mpButtonScreen->search(MULTI_CHAR('bottl_n'))->getWidth(); field_0x304[i_button] = 0.0f; break; } diff --git a/src/d/d_meter_haihai.cpp b/src/d/d_meter_haihai.cpp index f1b647502a..5e6c9fd3e7 100644 --- a/src/d/d_meter_haihai.cpp +++ b/src/d/d_meter_haihai.cpp @@ -30,7 +30,7 @@ int dMeterHaihai_c::_create() { JUT_ASSERT(0, fg != false); dPaneClass_showNullPane(mpHaihaiScreen); - mpParent = new CPaneMgr(mpHaihaiScreen, 'n_all', 2, NULL); + mpParent = new CPaneMgr(mpHaihaiScreen, MULTI_CHAR('n_all'), 2, NULL); JUT_ASSERT(0, mpParent != NULL); OSInitFastCast(); @@ -300,9 +300,9 @@ void dMeterHaihai_c::playBckAnime(J2DAnmTransformKey* i_bck) { } i_bck->setFrame(mBckFrame); - mpHaihaiScreen->search('n_anim')->setAnimation(i_bck); - mpHaihaiScreen->search('n_anim')->animationTransform(); - mpHaihaiScreen->search('n_anim')->setAnimation((J2DAnmTransform*)NULL); + mpHaihaiScreen->search(MULTI_CHAR('n_anim'))->setAnimation(i_bck); + mpHaihaiScreen->search(MULTI_CHAR('n_anim'))->animationTransform(); + mpHaihaiScreen->search(MULTI_CHAR('n_anim'))->setAnimation((J2DAnmTransform*)NULL); } } @@ -323,8 +323,8 @@ void dMeterHaihai_c::playBtkAnime(J2DAnmTextureSRTKey* i_btk) { } i_btk->setFrame(mBtkFrame); - mpHaihaiScreen->search('yaji00')->setAnimation(i_btk); - mpHaihaiScreen->search('yaji01')->setAnimation(i_btk); + mpHaihaiScreen->search(MULTI_CHAR('yaji00'))->setAnimation(i_btk); + mpHaihaiScreen->search(MULTI_CHAR('yaji01'))->setAnimation(i_btk); } } @@ -345,7 +345,7 @@ void dMeterHaihai_c::playBpkAnime(J2DAnmColor* i_bpk) { } i_bpk->setFrame(mBpkFrame); - mpHaihaiScreen->search('npc_l1')->setAnimation(i_bpk); - mpHaihaiScreen->search('yaji_l')->setAnimation(i_bpk); + mpHaihaiScreen->search(MULTI_CHAR('npc_l1'))->setAnimation(i_bpk); + mpHaihaiScreen->search(MULTI_CHAR('yaji_l'))->setAnimation(i_bpk); } } diff --git a/src/d/d_meter_hakusha.cpp b/src/d/d_meter_hakusha.cpp index ab9a0fc833..094ca82152 100644 --- a/src/d/d_meter_hakusha.cpp +++ b/src/d/d_meter_hakusha.cpp @@ -25,7 +25,7 @@ dMeterHakusha_c::~dMeterHakusha_c() { int dMeterHakusha_c::_create() { static u64 haku_tag[] = { - 'haku_n00', 'haku_n01', 'haku_n02', 'haku_n03', 'haku_n04', 'haku_n05', + MULTI_CHAR('haku_n00'), MULTI_CHAR('haku_n01'), MULTI_CHAR('haku_n02'), MULTI_CHAR('haku_n03'), MULTI_CHAR('haku_n04'), MULTI_CHAR('haku_n05'), }; for (int i = 0; i < 6; i++) { @@ -33,7 +33,7 @@ int dMeterHakusha_c::_create() { JUT_ASSERT(0, mpHakushaPos[i] != NULL); } - mpHakushaParent = new CPaneMgr(field_0x004, 'hakunall', 0, NULL); + mpHakushaParent = new CPaneMgr(field_0x004, MULTI_CHAR('hakunall'), 0, NULL); JUT_ASSERT(0, mpHakushaParent != NULL); mpHakushaScreen = new J2DScreen(); @@ -44,10 +44,10 @@ int dMeterHakusha_c::_create() { JUT_ASSERT(0, fg != false); dPaneClass_showNullPane(mpHakushaScreen); - mpHakushaOn = new CPaneMgr(mpHakushaScreen, 'haku_n', 2, NULL); + mpHakushaOn = new CPaneMgr(mpHakushaScreen, MULTI_CHAR('haku_n'), 2, NULL); JUT_ASSERT(0, mpHakushaOn != NULL); - mpHakushaOff = new CPaneMgr(mpHakushaScreen, 'haku_b_n', 2, NULL); + mpHakushaOff = new CPaneMgr(mpHakushaScreen, MULTI_CHAR('haku_b_n'), 2, NULL); JUT_ASSERT(0, mpHakushaOff != NULL); mpHakushaOn->setAlphaRate(0.0f); @@ -73,12 +73,12 @@ int dMeterHakusha_c::_create() { JUT_ASSERT(0, fg != false); dPaneClass_showNullPane(mpButtonScreen); - mpButtonA = new CPaneMgr(mpButtonScreen, 'abtn_n', 2, NULL); + mpButtonA = new CPaneMgr(mpButtonScreen, MULTI_CHAR('abtn_n'), 2, NULL); JUT_ASSERT(0, mpButtonA != NULL); mpButtonA->show(); mpButtonA->setAlphaRate(0.0f); - mpButtonScreen->search('info_n')->translate(0.0f, 0.0f); + mpButtonScreen->search(MULTI_CHAR('info_n'))->translate(0.0f, 0.0f); field_0x100 = g_drawHIO.mButtonAHorsePosX; field_0x104 = g_drawHIO.mButtonAHorsePosY; diff --git a/src/d/d_meter_string.cpp b/src/d/d_meter_string.cpp index c416244d18..47002a7e6d 100644 --- a/src/d/d_meter_string.cpp +++ b/src/d/d_meter_string.cpp @@ -57,19 +57,19 @@ int dMeterString_c::_create() { mpGetInBck = (J2DAnmTransformKey*)J2DAnmLoaderDataBase::load( JKRGetNameResource("zelda_game_image_cow_get_in.bck", mpMapArchive)); - mpParentPane = new CPaneMgr(mpScreen, 'get_in_n', 2, NULL); + mpParentPane = new CPaneMgr(mpScreen, MULTI_CHAR('get_in_n'), 2, NULL); JUT_ASSERT(0, mpParentPane != NULL); - mpRootPane = new CPaneMgr(mpScreen, 'n_all', 0, NULL); + mpRootPane = new CPaneMgr(mpScreen, MULTI_CHAR('n_all'), 0, NULL); JUT_ASSERT(0, mpRootPane != NULL); - mpTextPane = new CPaneMgr(mpScreen, 'get_in', 0, NULL); + mpTextPane = new CPaneMgr(mpScreen, MULTI_CHAR('get_in'), 0, NULL); JUT_ASSERT(0, mpTextPane != NULL); - static_cast(mpScreen->search('get_in_s'))->setFont(mDoExt_getMesgFont()); - static_cast(mpScreen->search('get_in'))->setFont(mDoExt_getMesgFont()); - static_cast(mpScreen->search('get_in_s'))->setString(0x100, ""); - static_cast(mpScreen->search('get_in'))->setString(0x100, ""); + static_cast(mpScreen->search(MULTI_CHAR('get_in_s')))->setFont(mDoExt_getMesgFont()); + static_cast(mpScreen->search(MULTI_CHAR('get_in')))->setFont(mDoExt_getMesgFont()); + static_cast(mpScreen->search(MULTI_CHAR('get_in_s')))->setString(0x100, ""); + static_cast(mpScreen->search(MULTI_CHAR('get_in')))->setString(0x100, ""); mAnimFrame = 0.0f; mPikariAnimFrame = 0.0f; @@ -165,8 +165,8 @@ int dMeterString_c::_delete() { int dMeterString_c::createString(int i_stringID) { char str_buf[32]; dMeter2Info_getString(i_stringID, str_buf, NULL); - strcpy(static_cast(mpScreen->search('get_in_s'))->getStringPtr(), str_buf); - strcpy(static_cast(mpScreen->search('get_in'))->getStringPtr(), str_buf); + strcpy(static_cast(mpScreen->search(MULTI_CHAR('get_in_s')))->getStringPtr(), str_buf); + strcpy(static_cast(mpScreen->search(MULTI_CHAR('get_in')))->getStringPtr(), str_buf); mAnimFrame = 40.0f; mPikariAnimFrame = -1.0f; diff --git a/src/d/d_msg_scrn_3select.cpp b/src/d/d_msg_scrn_3select.cpp index 557ed12cd9..803df43c05 100644 --- a/src/d/d_msg_scrn_3select.cpp +++ b/src/d/d_msg_scrn_3select.cpp @@ -25,16 +25,16 @@ processFn process[] = { dMsgScrn3Select_c::dMsgScrn3Select_c() { static u64 const tag_name[3][12] = { // A - 'a_n', 'a_g', 'a_gr', 'a_m', 'w_yes_00', 'w_yes_01', 'w_yes_02', 'w_yes_03', 'w_yes_04', - 'sel_po00', 'a_kahen', 'a_cursor', + 'a_n', 'a_g', 'a_gr', 'a_m', MULTI_CHAR('w_yes_00'), MULTI_CHAR('w_yes_01'), MULTI_CHAR('w_yes_02'), MULTI_CHAR('w_yes_03'), MULTI_CHAR('w_yes_04'), + MULTI_CHAR('sel_po00'), MULTI_CHAR('a_kahen'), MULTI_CHAR('a_cursor'), // B - 'b_n', 'b_g', 'b_gr', 'b_m', 'w_yes_07', 'w_yes_06', 'w_yes_05', 'w_yes_08', 'w_yes_09', - 'sel_po01', 'b_kahen', 'b_cursor', + 'b_n', 'b_g', 'b_gr', 'b_m', MULTI_CHAR('w_yes_07'), MULTI_CHAR('w_yes_06'), MULTI_CHAR('w_yes_05'), MULTI_CHAR('w_yes_08'), MULTI_CHAR('w_yes_09'), + MULTI_CHAR('sel_po01'), MULTI_CHAR('b_kahen'), MULTI_CHAR('b_cursor'), // C - 'c_n', 'c_g', 'c_gr', 'c_m', 'w_yes_12', 'w_yes_11', 'w_yes_10', 'w_yes_13', 'w_yes_14', - 'sel_po02', 'c_kahen', 'c_cursor' + 'c_n', 'c_g', 'c_gr', 'c_m', MULTI_CHAR('w_yes_12'), MULTI_CHAR('w_yes_11'), MULTI_CHAR('w_yes_10'), MULTI_CHAR('w_yes_13'), MULTI_CHAR('w_yes_14'), + MULTI_CHAR('sel_po02'), MULTI_CHAR('c_kahen'), MULTI_CHAR('c_cursor') }; mpScreen = new J2DScreen(); @@ -66,7 +66,7 @@ dMsgScrn3Select_c::dMsgScrn3Select_c() { JUT_ASSERT(0, mpSelectCursor != NULL); mpSelectCursor->setAlphaRate(0.0f); - mpParent = new CPaneMgr(mpScreen, 'abc_n', 0, NULL); + mpParent = new CPaneMgr(mpScreen, MULTI_CHAR('abc_n'), 0, NULL); JUT_ASSERT(0, mpParent != NULL); for (int i = 0; i < 3; i++) { @@ -115,11 +115,11 @@ dMsgScrn3Select_c::dMsgScrn3Select_c() { mpTmSel_c[2] = new CPaneMgr(mpScreen, 'c_tf', 0, NULL); - mpTmrSel_c[0] = new CPaneMgr(mpScreen, 'a_tf_f', 0, NULL); + mpTmrSel_c[0] = new CPaneMgr(mpScreen, MULTI_CHAR('a_tf_f'), 0, NULL); - mpTmrSel_c[1] = new CPaneMgr(mpScreen, 'b_tf_f', 0, NULL); + mpTmrSel_c[1] = new CPaneMgr(mpScreen, MULTI_CHAR('b_tf_f'), 0, NULL); - mpTmrSel_c[2] = new CPaneMgr(mpScreen, 'c_tf_f', 0, NULL); + mpTmrSel_c[2] = new CPaneMgr(mpScreen, MULTI_CHAR('c_tf_f'), 0, NULL); for (int i = 0; i < 3; i++) { ((J2DTextBox*)(mpTmSel_c[i]->getPanePtr()))->setString(64, ""); @@ -129,15 +129,15 @@ dMsgScrn3Select_c::dMsgScrn3Select_c() { ((J2DTextBox*)(mpTmrSel_c[i]->getPanePtr()))->setFont(mDoExt_getMesgFont()); } - mpScreen->search('a_t_e')->hide(); - mpScreen->search('b_t_e')->hide(); - mpScreen->search('c_t_e')->hide(); + mpScreen->search(MULTI_CHAR('a_t_e'))->hide(); + mpScreen->search(MULTI_CHAR('b_t_e'))->hide(); + mpScreen->search(MULTI_CHAR('c_t_e'))->hide(); mpScreen->search('a_tf')->show(); mpScreen->search('b_tf')->show(); mpScreen->search('c_tf')->show(); - mpScreen->search('a_tf_f')->show(); - mpScreen->search('b_tf_f')->show(); - mpScreen->search('c_tf_f')->show(); + mpScreen->search(MULTI_CHAR('a_tf_f'))->show(); + mpScreen->search(MULTI_CHAR('b_tf_f'))->show(); + mpScreen->search(MULTI_CHAR('c_tf_f'))->show(); mpScreen->search('a_t')->hide(); mpScreen->search('b_t')->hide(); mpScreen->search('c_t')->hide(); @@ -154,27 +154,27 @@ dMsgScrn3Select_c::dMsgScrn3Select_c() { mpTmrSel_c[i] = NULL; } - mpScreen->search('a_t_e')->hide(); - mpScreen->search('b_t_e')->hide(); - mpScreen->search('c_t_e')->hide(); + mpScreen->search(MULTI_CHAR('a_t_e'))->hide(); + mpScreen->search(MULTI_CHAR('b_t_e'))->hide(); + mpScreen->search(MULTI_CHAR('c_t_e'))->hide(); mpScreen->search('a_tf')->hide(); mpScreen->search('b_tf')->hide(); mpScreen->search('c_tf')->hide(); - mpScreen->search('a_tf_f')->hide(); - mpScreen->search('b_tf_f')->hide(); - mpScreen->search('c_tf_f')->hide(); + mpScreen->search(MULTI_CHAR('a_tf_f'))->hide(); + mpScreen->search(MULTI_CHAR('b_tf_f'))->hide(); + mpScreen->search(MULTI_CHAR('c_tf_f'))->hide(); mpScreen->search('a_t')->show(); mpScreen->search('b_t')->show(); mpScreen->search('c_t')->show(); } #else - mpTmSel_c[0] = new CPaneMgr(mpScreen, 'a_t_e', 0, NULL); + mpTmSel_c[0] = new CPaneMgr(mpScreen, MULTI_CHAR('a_t_e'), 0, NULL); JUT_ASSERT(0, mpTmSel_c[0] != NULL); - mpTmSel_c[1] = new CPaneMgr(mpScreen, 'b_t_e', 0, NULL); + mpTmSel_c[1] = new CPaneMgr(mpScreen, MULTI_CHAR('b_t_e'), 0, NULL); JUT_ASSERT(0, mpTmSel_c[1] != NULL); - mpTmSel_c[2] = new CPaneMgr(mpScreen, 'c_t_e', 0, NULL); + mpTmSel_c[2] = new CPaneMgr(mpScreen, MULTI_CHAR('c_t_e'), 0, NULL); JUT_ASSERT(0, mpTmSel_c[2] != NULL); for (int i = 0; i < 3; i++) { @@ -183,15 +183,15 @@ dMsgScrn3Select_c::dMsgScrn3Select_c() { mpTmrSel_c[i] = NULL; } - mpScreen->search('a_t_e')->show(); - mpScreen->search('b_t_e')->show(); - mpScreen->search('c_t_e')->show(); + mpScreen->search(MULTI_CHAR('a_t_e'))->show(); + mpScreen->search(MULTI_CHAR('b_t_e'))->show(); + mpScreen->search(MULTI_CHAR('c_t_e'))->show(); mpScreen->search('a_tf')->hide(); mpScreen->search('b_tf')->hide(); mpScreen->search('c_tf')->hide(); - mpScreen->search('a_tf_f')->hide(); - mpScreen->search('b_tf_f')->hide(); - mpScreen->search('c_tf_f')->hide(); + mpScreen->search(MULTI_CHAR('a_tf_f'))->hide(); + mpScreen->search(MULTI_CHAR('b_tf_f'))->hide(); + mpScreen->search(MULTI_CHAR('c_tf_f'))->hide(); mpScreen->search('a_t')->hide(); mpScreen->search('b_t')->hide(); mpScreen->search('c_t')->hide(); diff --git a/src/d/d_msg_scrn_arrow.cpp b/src/d/d_msg_scrn_arrow.cpp index 1ad714f839..ba85ceea2f 100644 --- a/src/d/d_msg_scrn_arrow.cpp +++ b/src/d/d_msg_scrn_arrow.cpp @@ -25,23 +25,23 @@ dMsgScrnArrow_c::dMsgScrnArrow_c() { mpBpk->searchUpdateMaterialID(mpScreen); mBpkFrame = 0.0f; - mpParent_c = new CPaneMgr(mpScreen, 'set_ya_n', 0, NULL); + mpParent_c = new CPaneMgr(mpScreen, MULTI_CHAR('set_ya_n'), 0, NULL); JUT_ASSERT(0, mpParent_c != NULL); - mpArw_c = new CPaneMgr(mpScreen, 'ya_next', 0, NULL); + mpArw_c = new CPaneMgr(mpScreen, MULTI_CHAR('ya_next'), 0, NULL); JUT_ASSERT(0, mpArw_c != NULL); mpArw_c->hide(); mpArw_c->mPane->setAnimation(mpBck); - mpScreen->search('yajnext')->setAnimation(mpBpk); - mpScreen->search('yajinexl')->setAnimation(mpBpk); + mpScreen->search(MULTI_CHAR('yajnext'))->setAnimation(mpBpk); + mpScreen->search(MULTI_CHAR('yajinexl'))->setAnimation(mpBpk); - mpDot_c = new CPaneMgr(mpScreen, 'ya_end', 0, NULL); + mpDot_c = new CPaneMgr(mpScreen, MULTI_CHAR('ya_end'), 0, NULL); JUT_ASSERT(0, mpDot_c != NULL); mpDot_c->hide(); - mpScreen->search('yaj_end')->setAnimation(mpBpk); - mpScreen->search('yajiendl')->setAnimation(mpBpk); + mpScreen->search(MULTI_CHAR('yaj_end'))->setAnimation(mpBpk); + mpScreen->search(MULTI_CHAR('yajiendl'))->setAnimation(mpBpk); } dMsgScrnArrow_c::~dMsgScrnArrow_c() { diff --git a/src/d/d_msg_scrn_boss.cpp b/src/d/d_msg_scrn_boss.cpp index 242fa4af22..d2110e7cec 100644 --- a/src/d/d_msg_scrn_boss.cpp +++ b/src/d/d_msg_scrn_boss.cpp @@ -8,7 +8,7 @@ dMsgScrnBoss_c::dMsgScrnBoss_c() { static u64 t_tag[7] = { - 'sfontb0', 'sfontb1', 'sfontb2', 'sfontl0', 'sfontl1', 'sfontl2', 'sfont00', + MULTI_CHAR('sfontb0'), MULTI_CHAR('sfontb1'), MULTI_CHAR('sfontb2'), MULTI_CHAR('sfontl0'), MULTI_CHAR('sfontl1'), MULTI_CHAR('sfontl2'), MULTI_CHAR('sfont00'), }; init(); @@ -17,15 +17,15 @@ dMsgScrnBoss_c::dMsgScrnBoss_c() { mpScreen->setPriority("zelda_boss_name.blo", 0x20000, dComIfGp_getMsgArchive(4)); dPaneClass_showNullPane(mpScreen); - mpPmP_c = new CPaneMgr(mpScreen, 'n_all', 2, NULL); + mpPmP_c = new CPaneMgr(mpScreen, MULTI_CHAR('n_all'), 2, NULL); mpPmP_c->scale(g_MsgObject_HIO_c.mBossNameScaleX, g_MsgObject_HIO_c.mBossNameScaleY); - mpFontParent = new CPaneMgr(mpScreen, 's_font_n', 0, NULL); + mpFontParent = new CPaneMgr(mpScreen, MULTI_CHAR('s_font_n'), 0, NULL); mpFontParent->scale(g_MsgObject_HIO_c.mBossNameCharSizeX, g_MsgObject_HIO_c.mBossNameCharSizeY); mpFontParent->paneTrans(g_MsgObject_HIO_c.mBossNameCharPosX, g_MsgObject_HIO_c.mBossNameCharPosY); - mpBaseParent = new CPaneMgr(mpScreen, 'base_n', 2, NULL); + mpBaseParent = new CPaneMgr(mpScreen, MULTI_CHAR('base_n'), 2, NULL); mpBaseParent->scale(g_MsgObject_HIO_c.mBossNameBaseSizeX, g_MsgObject_HIO_c.mBossNameBaseSizeY); mpBaseParent->paneTrans(g_MsgObject_HIO_c.mBossNameBasePosX, g_MsgObject_HIO_c.mBossNameBasePosY); diff --git a/src/d/d_msg_scrn_explain.cpp b/src/d/d_msg_scrn_explain.cpp index 3df29b4e11..a684b437f3 100644 --- a/src/d/d_msg_scrn_explain.cpp +++ b/src/d/d_msg_scrn_explain.cpp @@ -64,15 +64,15 @@ dMsgScrnExplain_c::dMsgScrnExplain_c(STControl* i_stick, u8 param_1, bool param_ dComIfGp_getMsgCommonArchive()); dPaneClass_showNullPane(mpTxScreen); - mpTm_c[0] = new CPaneMgr(mpTxScreen, 'mg_3line', 0, NULL); + mpTm_c[0] = new CPaneMgr(mpTxScreen, MULTI_CHAR('mg_3line'), 0, NULL); mpTm_c[1] = new CPaneMgr(mpTxScreen, 't3_s', 0, NULL); field_0x10[0] = NULL; field_0x10[1] = NULL; - mpTxScreen->search('n_3line')->show(); - mpTxScreen->search('n_3fline')->hide(); - mpTxScreen->search('n_e4line')->hide(); + mpTxScreen->search(MULTI_CHAR('n_3line'))->show(); + mpTxScreen->search(MULTI_CHAR('n_3fline'))->hide(); + mpTxScreen->search(MULTI_CHAR('n_e4line'))->hide(); #if VERSION == VERSION_GCN_JPN field_0x50 = 0.0f; @@ -85,44 +85,44 @@ dMsgScrnExplain_c::dMsgScrnExplain_c(STControl* i_stick, u8 param_1, bool param_ dComIfGp_getMsgCommonArchive()); dPaneClass_showNullPane(mpTxScreen); - mpScreen->search('n_all')->scale(g_MsgObject_HIO_c.mBoxTalkScaleX, + mpScreen->search(MULTI_CHAR('n_all'))->scale(g_MsgObject_HIO_c.mBoxTalkScaleX, g_MsgObject_HIO_c.mBoxTalkScaleY); #if VERSION == VERSION_GCN_JPN field_0x50 = 0.0f; if (dComIfGs_getOptRuby() == 0) { - mpTm_c[0] = new CPaneMgr(mpTxScreen, 'mg_3flin', 0, NULL); - mpTm_c[1] = new CPaneMgr(mpTxScreen, 't3f_s', 0, NULL); + mpTm_c[0] = new CPaneMgr(mpTxScreen, MULTI_CHAR('mg_3flin'), 0, NULL); + mpTm_c[1] = new CPaneMgr(mpTxScreen, MULTI_CHAR('t3f_s'), 0, NULL); - field_0x10[0] = new CPaneMgr(mpTxScreen, 'mg_3f', 0, NULL); - field_0x10[1] = new CPaneMgr(mpTxScreen, 'mg_3f_s', 0, NULL); + field_0x10[0] = new CPaneMgr(mpTxScreen, MULTI_CHAR('mg_3f'), 0, NULL); + field_0x10[1] = new CPaneMgr(mpTxScreen, MULTI_CHAR('mg_3f_s'), 0, NULL); - mpTxScreen->search('n_3line')->hide(); - mpTxScreen->search('n_3fline')->show(); - mpTxScreen->search('n_e4line')->hide(); + mpTxScreen->search(MULTI_CHAR('n_3line'))->hide(); + mpTxScreen->search(MULTI_CHAR('n_3fline'))->show(); + mpTxScreen->search(MULTI_CHAR('n_e4line'))->hide(); } else { - mpTm_c[0] = new CPaneMgr(mpTxScreen, 'mg_3line', 0, NULL); + mpTm_c[0] = new CPaneMgr(mpTxScreen, MULTI_CHAR('mg_3line'), 0, NULL); mpTm_c[1] = new CPaneMgr(mpTxScreen, 't3_s', 0, NULL); field_0x10[0] = NULL; field_0x10[1] = NULL; - mpTxScreen->search('n_3line')->show(); - mpTxScreen->search('n_3fline')->hide(); - mpTxScreen->search('n_e4line')->hide(); + mpTxScreen->search(MULTI_CHAR('n_3line'))->show(); + mpTxScreen->search(MULTI_CHAR('n_3fline'))->hide(); + mpTxScreen->search(MULTI_CHAR('n_e4line'))->hide(); } #else field_0x50 = -10.0f; - mpTm_c[0] = new CPaneMgr(mpTxScreen, 'mg_e4lin', 0, NULL); + mpTm_c[0] = new CPaneMgr(mpTxScreen, MULTI_CHAR('mg_e4lin'), 0, NULL); mpTm_c[1] = new CPaneMgr(mpTxScreen, 't4_s', 0, NULL); field_0x10[0] = NULL; field_0x10[1] = NULL; - mpTxScreen->search('n_3line')->hide(); - mpTxScreen->search('n_3fline')->hide(); - mpTxScreen->search('n_e4line')->show(); + mpTxScreen->search(MULTI_CHAR('n_3line'))->hide(); + mpTxScreen->search(MULTI_CHAR('n_3fline'))->hide(); + mpTxScreen->search(MULTI_CHAR('n_e4line'))->show(); #endif if (param_1 == 2 || param_1 == 4) { @@ -153,13 +153,13 @@ dMsgScrnExplain_c::dMsgScrnExplain_c(STControl* i_stick, u8 param_1, bool param_ } } - mpScreen->search('mg_null')->move( - g_MsgObject_HIO_c.mTextPosX + mpScreen->search('mg_null')->getBounds().i.x, - g_MsgObject_HIO_c.mTextPosY + mpScreen->search('mg_null')->getBounds().i.y); + mpScreen->search(MULTI_CHAR('mg_null'))->move( + g_MsgObject_HIO_c.mTextPosX + mpScreen->search(MULTI_CHAR('mg_null'))->getBounds().i.x, + g_MsgObject_HIO_c.mTextPosY + mpScreen->search(MULTI_CHAR('mg_null'))->getBounds().i.y); - mpArw_c = new CPaneMgr(mpScreen, 'set_ya_n', 0, NULL); - mpMg_c[0] = new CPaneMgr(mpScreen, 'mg_null', 0, NULL); - mpMg_c[1] = new CPaneMgr(mpTxScreen, 'mg_null', 0, NULL); + mpArw_c = new CPaneMgr(mpScreen, MULTI_CHAR('set_ya_n'), 0, NULL); + mpMg_c[0] = new CPaneMgr(mpScreen, MULTI_CHAR('mg_null'), 0, NULL); + mpMg_c[1] = new CPaneMgr(mpTxScreen, MULTI_CHAR('mg_null'), 0, NULL); mpRoot_c[0] = new CPaneMgr(mpScreen, 'ROOT', 2, NULL); mpRoot_c[1] = new CPaneMgr(mpTxScreen, 'ROOT', 2, NULL); @@ -260,7 +260,7 @@ void dMsgScrnExplain_c::move() { (this->*init_process[mStatus])(); } - mpScreen->search('n_all')->scale(g_MsgObject_HIO_c.mBoxTalkScaleX, + mpScreen->search(MULTI_CHAR('n_all'))->scale(g_MsgObject_HIO_c.mBoxTalkScaleX, g_MsgObject_HIO_c.mBoxTalkScaleY); } diff --git a/src/d/d_msg_scrn_howl.cpp b/src/d/d_msg_scrn_howl.cpp index 1790501930..473de9c350 100644 --- a/src/d/d_msg_scrn_howl.cpp +++ b/src/d/d_msg_scrn_howl.cpp @@ -39,18 +39,18 @@ static dMsgScrnHowl_cFunc process[5] = { dMsgScrnHowl_c::dMsgScrnHowl_c() { static u64 ylinen_tag[3] = { - 'ylinen00', - 'ylinen02', - 'ylinen04', + MULTI_CHAR('ylinen00'), + MULTI_CHAR('ylinen02'), + MULTI_CHAR('ylinen04'), }; static u64 tlinen_tag[7] = { - 'tlinen00', 'tlinen01', 'tlinen02', 'tlinen03', 'tlinen04', 'tlinen05', 'tlinen06', + MULTI_CHAR('tlinen00'), MULTI_CHAR('tlinen01'), MULTI_CHAR('tlinen02'), MULTI_CHAR('tlinen03'), MULTI_CHAR('tlinen04'), MULTI_CHAR('tlinen05'), MULTI_CHAR('tlinen06'), }; static u64 tline_tag[7] = { - 'tline00', 'tline01', 'tline02', 'tline03', 'tlinen04', 'tline05', 'tline06', + MULTI_CHAR('tline00'), MULTI_CHAR('tline01'), MULTI_CHAR('tline02'), MULTI_CHAR('tline03'), MULTI_CHAR('tlinen04'), MULTI_CHAR('tline05'), MULTI_CHAR('tline06'), }; static u64 tlines_tag[7] = { - 'tlines00', 'tlines01', 'tlines02', 'tlines03', 'tlines04', 'tlines05', 'tlines06', + MULTI_CHAR('tlines00'), MULTI_CHAR('tlines01'), MULTI_CHAR('tlines02'), MULTI_CHAR('tlines03'), MULTI_CHAR('tlines04'), MULTI_CHAR('tlines05'), MULTI_CHAR('tlines06'), }; init(); @@ -59,31 +59,31 @@ dMsgScrnHowl_c::dMsgScrnHowl_c() { bool fg = mpScreen->setPriority("zelda_wolf_howl.blo", 0x20000, dComIfGp_getMsgArchive(5)); JUT_ASSERT(73, fg != false); dPaneClass_showNullPane(mpScreen); - mpScreen->search('line00')->hide(); - mpPmP_c = new CPaneMgr(mpScreen, 'n_all', 3, NULL); + mpScreen->search(MULTI_CHAR('line00'))->hide(); + mpPmP_c = new CPaneMgr(mpScreen, MULTI_CHAR('n_all'), 3, NULL); JUT_ASSERT(79, mpPmP_c != NULL); mpScreen->search('ag_n')->hide(); field_0x1994 = 0.0f; field_0x1998 = 0.0f; - mpScreen->search('wi_btn_n')->hide(); - mpButtonIcon[0] = new CPaneMgr(mpScreen, 'cbtn_n', 2, NULL); + mpScreen->search(MULTI_CHAR('wi_btn_n'))->hide(); + mpButtonIcon[0] = new CPaneMgr(mpScreen, MULTI_CHAR('cbtn_n'), 2, NULL); JUT_ASSERT(91, mpButtonIcon[0] != NULL); - mpButtonText[0] = new CPaneMgr(mpScreen, 'g_ltxt_n', 2, NULL); + mpButtonText[0] = new CPaneMgr(mpScreen, MULTI_CHAR('g_ltxt_n'), 2, NULL); JUT_ASSERT(93, mpButtonText[0] != NULL); - mpButtonIcon[1] = new CPaneMgr(mpScreen, 'abt_n', 2, NULL); + mpButtonIcon[1] = new CPaneMgr(mpScreen, MULTI_CHAR('abt_n'), 2, NULL); JUT_ASSERT(96, mpButtonIcon[1] != NULL); - mpButtonText[1] = new CPaneMgr(mpScreen, 'gr_txt_n', 2, NULL); + mpButtonText[1] = new CPaneMgr(mpScreen, MULTI_CHAR('gr_txt_n'), 2, NULL); JUT_ASSERT(98, mpButtonText[1] != NULL); #if VERSION == VERSION_GCN_JPN - J2DTextBox* piStack_19c = (J2DTextBox*)mpScreen->search('g_l_info'); - J2DTextBox* piStack_1a0 = (J2DTextBox*)mpScreen->search('g_r_info'); - mpScreen->search('fgr_info')->hide(); - mpScreen->search('fgl_info')->hide(); + J2DTextBox* piStack_19c = (J2DTextBox*)mpScreen->search(MULTI_CHAR('g_l_info')); + J2DTextBox* piStack_1a0 = (J2DTextBox*)mpScreen->search(MULTI_CHAR('g_r_info')); + mpScreen->search(MULTI_CHAR('fgr_info'))->hide(); + mpScreen->search(MULTI_CHAR('fgl_info'))->hide(); #else - J2DTextBox* piStack_19c = (J2DTextBox*)mpScreen->search('fgl_info'); - J2DTextBox* piStack_1a0 = (J2DTextBox*)mpScreen->search('fgr_info'); - mpScreen->search('g_l_info')->hide(); - mpScreen->search('g_r_info')->hide(); + J2DTextBox* piStack_19c = (J2DTextBox*)mpScreen->search(MULTI_CHAR('fgl_info')); + J2DTextBox* piStack_1a0 = (J2DTextBox*)mpScreen->search(MULTI_CHAR('fgr_info')); + mpScreen->search(MULTI_CHAR('g_l_info'))->hide(); + mpScreen->search(MULTI_CHAR('g_r_info'))->hide(); #endif piStack_19c->setString(0x40, ""); piStack_19c->setFont(mDoExt_getMesgFont()); @@ -138,9 +138,9 @@ dMsgScrnHowl_c::dMsgScrnHowl_c() { field_0x2136 = (350.0f / field_0x1980); field_0x2138 = 0; field_0x1984 = 255.0f / field_0x2136; - mpABase = new CPaneMgr(mpScreen, 'a_base', 0, NULL); + mpABase = new CPaneMgr(mpScreen, MULTI_CHAR('a_base'), 0, NULL); JUT_ASSERT(218, mpABase != NULL); - mpLineAll = new CPaneMgr(mpScreen, 'line_all', 0, NULL); + mpLineAll = new CPaneMgr(mpScreen, MULTI_CHAR('line_all'), 0, NULL); JUT_ASSERT(221, mpLineAll != NULL); f32 in_f31; for (int i = 0; i < 7; i++) { @@ -184,7 +184,7 @@ dMsgScrnHowl_c::dMsgScrnHowl_c() { res = (ResTIMG const*)dComIfGp_getMsgArchive(5)->getResource('TIMG', "tt_black_32.bti"); mpGuideDot = new J2DPicture(res); JUT_ASSERT(280, mpGuideDot != NULL); - mpGuideDot->setBlackWhite(((J2DPicture*)mpScreen->search('line00'))->getBlack(), ((J2DPicture*)mpScreen->search('line00'))->getWhite()); + mpGuideDot->setBlackWhite(((J2DPicture*)mpScreen->search(MULTI_CHAR('line00')))->getBlack(), ((J2DPicture*)mpScreen->search(MULTI_CHAR('line00')))->getWhite()); res = (ResTIMG const*)dComIfGp_getMain2DArchive()->getResource('TIMG', "tt_iastarRR.bti"); mpTopBall = new J2DPicture(res); JUT_ASSERT(287, mpTopBall != NULL); @@ -197,8 +197,8 @@ dMsgScrnHowl_c::dMsgScrnHowl_c() { mpTopBallTail[i]->setBlackWhite(g_MsgObject_HIO_c.mHowlHIO.mDotBlack, g_MsgObject_HIO_c.mHowlHIO.mDotWhite); } field_0x2134 = 0; - field_0x1988 = mpScreen->search('line00')->getWidth(); - field_0x198c = mpScreen->search('line00')->getHeight(); + field_0x1988 = mpScreen->search(MULTI_CHAR('line00'))->getWidth(); + field_0x198c = mpScreen->search(MULTI_CHAR('line00'))->getHeight(); field_0x2194 = daAlink_getAlinkActorClass()->getCorrectCurveID(); mCorrectLineMax = 0; field_0x2197 = 0; @@ -674,7 +674,7 @@ void dMsgScrnHowl_c::drawGuide() { } if (dVar16 > 0.0f) { mpGuideDot->setAlpha( - dVar16 * (mpScreen->search('line00')->getAlpha() * mpPmP_c->getAlphaRate())); + dVar16 * (mpScreen->search(MULTI_CHAR('line00'))->getAlpha() * mpPmP_c->getAlphaRate())); mpGuideDot->draw((2.0f + (local_f0 - local_f8 / 2)), (local_f4 - local_fc / 2), local_f8, local_fc, false, false, false); } @@ -771,7 +771,7 @@ void dMsgScrnHowl_c::drawGuide2() { } if (guideAlpha > 0.0f && local_94 > 0.0f) { mpGuideDot->setAlpha(local_94 * - (guideAlpha * (mpScreen->search('line00')->getAlpha() * + (guideAlpha * (mpScreen->search(MULTI_CHAR('line00'))->getAlpha() * mpPmP_c->getAlphaRate()))); mpGuideDot->draw(2.0f + (local_a0 - local_a8 / 2), local_a4 - local_ac / 2, local_a8, local_ac, false, false, false); @@ -810,7 +810,7 @@ void dMsgScrnHowl_c::drawEffect() { 12.0f + ((vec2.x - vec1.x) / (mDoGph_gInf_c::getWidthF() / FB_WIDTH)), field_0x2120); grafContext->setScissor(); u8 timer = daAlink_getAlinkActorClass()->getWolfHowlMgrP()->getReleaseTimer(); - u8 screenAlpha = mpScreen->search('line00')->getAlpha(); + u8 screenAlpha = mpScreen->search(MULTI_CHAR('line00'))->getAlpha(); mpWaveTex->setAlpha((screenAlpha * mpPmP_c->getAlphaRate()) * ((30 - timer) / 30.0f)); f32 fVar2 = field_0x2128 * field_0x1980; f32 fVar3 = mpLineH[0]->getGlobalPosX() - field_0x27a8; diff --git a/src/d/d_msg_scrn_item.cpp b/src/d/d_msg_scrn_item.cpp index e6cd7f582a..4010c56443 100644 --- a/src/d/d_msg_scrn_item.cpp +++ b/src/d/d_msg_scrn_item.cpp @@ -146,10 +146,10 @@ dMsgScrnItem_c::dMsgScrnItem_c(u8 param_1, u8 param_2, JKRExpHeap* param_3) { } else { dVar18 = 1.0f; } - field_0x178 = field_0x0e0[0]->width * mpScreen->search('set_it_n')->getWidth() / 48.0f; - field_0x17c = field_0x0e0[0]->height * mpScreen->search('set_it_n')->getHeight() / 48.0f; - field_0x170 = mpScreen->search('set_it_n')->getWidth(); - field_0x174 = mpScreen->search('set_it_n')->getHeight(); + field_0x178 = field_0x0e0[0]->width * mpScreen->search(MULTI_CHAR('set_it_n'))->getWidth() / 48.0f; + field_0x17c = field_0x0e0[0]->height * mpScreen->search(MULTI_CHAR('set_it_n'))->getHeight() / 48.0f; + field_0x170 = mpScreen->search(MULTI_CHAR('set_it_n'))->getWidth(); + field_0x174 = mpScreen->search(MULTI_CHAR('set_it_n'))->getHeight(); for (int i = 0; i < 3; i++) { if (mpItemPane[i] != NULL) { mpItemPane[i]->resize(field_0x178 * dVar18, field_0x17c * dVar18); @@ -166,19 +166,19 @@ dMsgScrnItem_c::dMsgScrnItem_c(u8 param_1, u8 param_2, JKRExpHeap* param_3) { JUT_ASSERT(291, mpBuf != NULL); memset(mpBuf, 0, 0x106a); mCharInfoPtr = (CharInfo_c*)mpBuf; - field_0x160 = mpScreen->search('n_all')->getBounds().i.x; - field_0x164 = mpScreen->search('n_all')->getBounds().i.y; + field_0x160 = mpScreen->search(MULTI_CHAR('n_all'))->getBounds().i.x; + field_0x164 = mpScreen->search(MULTI_CHAR('n_all'))->getBounds().i.y; field_0x180 = 0.0f; field_0x184 = 0.0f; for (int i = 0; i < 3; i++) { field_0x188[i] = g_MsgObject_HIO_c.mBoxPos[i][3]; } field_0x194 = 0.0f; - mpArw_c = new CPaneMgr(mpScreen, 'set_ya_n', 0, NULL); + mpArw_c = new CPaneMgr(mpScreen, MULTI_CHAR('set_ya_n'), 0, NULL); JUT_ASSERT(306, mpArw_c != NULL); - mpMg_c[0] = new CPaneMgr(mpScreen, 'mg_null', 0, NULL); + mpMg_c[0] = new CPaneMgr(mpScreen, MULTI_CHAR('mg_null'), 0, NULL); JUT_ASSERT(309, mpMg_c[0] != NULL); - mpMg_c[1] = new CPaneMgr(mpTxScreen, 'mg_null', 0, NULL); + mpMg_c[1] = new CPaneMgr(mpTxScreen, MULTI_CHAR('mg_null'), 0, NULL); JUT_ASSERT(312, mpMg_c[1] != NULL); OSInitFastCast(); fukiPosCalc(param_1); @@ -192,55 +192,55 @@ dMsgScrnItem_c::dMsgScrnItem_c(u8 param_1, u8 param_2, JKRExpHeap* param_3) { field_0x12c[1]->searchUpdateMaterialID(mpScreen); field_0x154[1] = 0.0f; field_0x19d = false; - mpPmP_c = new CPaneMgr(mpScreen, 'n_all', 3, NULL); + mpPmP_c = new CPaneMgr(mpScreen, MULTI_CHAR('n_all'), 3, NULL); JUT_ASSERT(389, mpPmP_c != NULL); mpPmP_c->scale(g_MsgObject_HIO_c.mBoxItemScaleX, g_MsgObject_HIO_c.mBoxItemScaleY); #if VERSION == VERSION_GCN_JPN if (dComIfGs_getOptRuby() == 0) { - mpTm_c[0] = new CPaneMgr(mpTxScreen, 'mg_3flin', 0, NULL); + mpTm_c[0] = new CPaneMgr(mpTxScreen, MULTI_CHAR('mg_3flin'), 0, NULL); JUT_ASSERT(407, mpTm_c[0] != NULL); - mpTm_c[1] = new CPaneMgr(mpTxScreen, 't3f_s', 0, NULL); + mpTm_c[1] = new CPaneMgr(mpTxScreen, MULTI_CHAR('t3f_s'), 0, NULL); JUT_ASSERT(410, mpTm_c[1] != NULL); - mpTm_c[2] = new CPaneMgr(mpTxScreen, 't3f_w', 0, NULL); + mpTm_c[2] = new CPaneMgr(mpTxScreen, MULTI_CHAR('t3f_w'), 0, NULL); JUT_ASSERT(413, mpTm_c[2] != NULL); - mpTmr_c[0] = new CPaneMgr(mpTxScreen, 'mg_3f', 0, NULL); + mpTmr_c[0] = new CPaneMgr(mpTxScreen, MULTI_CHAR('mg_3f'), 0, NULL); JUT_ASSERT(416, mpTmr_c[0] != NULL); - mpTmr_c[1] = new CPaneMgr(mpTxScreen, 'mg_3f_s', 0, NULL); + mpTmr_c[1] = new CPaneMgr(mpTxScreen, MULTI_CHAR('mg_3f_s'), 0, NULL); JUT_ASSERT(419, mpTmr_c[1] != NULL); - mpTmr_c[2] = new CPaneMgr(mpTxScreen, 'mg_3f_w', 0, NULL); + mpTmr_c[2] = new CPaneMgr(mpTxScreen, MULTI_CHAR('mg_3f_w'), 0, NULL); JUT_ASSERT(422, mpTmr_c[2] != NULL); - mpTxScreen->search('n_3line')->hide(); - mpTxScreen->search('n_3fline')->show(); - mpTxScreen->search('n_e4line')->hide(); + mpTxScreen->search(MULTI_CHAR('n_3line'))->hide(); + mpTxScreen->search(MULTI_CHAR('n_3fline'))->show(); + mpTxScreen->search(MULTI_CHAR('n_e4line'))->hide(); } else { - mpTm_c[0] = new CPaneMgr(mpTxScreen, 'mg_3line', 0, NULL); + mpTm_c[0] = new CPaneMgr(mpTxScreen, MULTI_CHAR('mg_3line'), 0, NULL); JUT_ASSERT(407, mpTm_c[0] != NULL); mpTm_c[1] = new CPaneMgr(mpTxScreen, 't3_s', 0, NULL); JUT_ASSERT(410, mpTm_c[1] != NULL); mpTm_c[2] = new CPaneMgr(mpTxScreen, 't3_w', 0, NULL); JUT_ASSERT(413, mpTm_c[2] != NULL); - mpTxScreen->search('n_3line')->show(); - mpTxScreen->search('n_3fline')->hide(); - mpTxScreen->search('n_e4line')->hide(); + mpTxScreen->search(MULTI_CHAR('n_3line'))->show(); + mpTxScreen->search(MULTI_CHAR('n_3fline'))->hide(); + mpTxScreen->search(MULTI_CHAR('n_e4line'))->hide(); } #else - mpTm_c[0] = new CPaneMgr(mpTxScreen, 'mg_e4lin', 0, NULL); + mpTm_c[0] = new CPaneMgr(mpTxScreen, MULTI_CHAR('mg_e4lin'), 0, NULL); JUT_ASSERT(407, mpTm_c[0] != NULL); mpTm_c[1] = new CPaneMgr(mpTxScreen, 't4_s', 0, NULL); JUT_ASSERT(410, mpTm_c[1] != NULL); mpTm_c[2] = new CPaneMgr(mpTxScreen, 't4_w', 0, NULL); JUT_ASSERT(413, mpTm_c[2] != NULL); - mpTxScreen->search('n_3line')->hide(); - mpTxScreen->search('n_3fline')->hide(); - mpTxScreen->search('n_e4line')->show(); + mpTxScreen->search(MULTI_CHAR('n_3line'))->hide(); + mpTxScreen->search(MULTI_CHAR('n_3fline'))->hide(); + mpTxScreen->search(MULTI_CHAR('n_e4line'))->show(); #endif for (int i = 0; i < 3; i++) { @@ -475,10 +475,10 @@ void dMsgScrnItem_c::drawSelf() { texScale = 1.0f; }; - mpItemPane[i]->draw(mpScreen->search('set_it_n')->getGlbBounds().i.x + + mpItemPane[i]->draw(mpScreen->search(MULTI_CHAR('set_it_n'))->getGlbBounds().i.x + 0.5f * (field_0x170 - (field_0x178 * texScale)) + g_MsgObject_HIO_c.mBoxItemPosX, - mpScreen->search('set_it_n')->getGlbBounds().i.y + + mpScreen->search(MULTI_CHAR('set_it_n'))->getGlbBounds().i.y + 0.5f * (field_0x174 - (field_0x17c * texScale)) + g_MsgObject_HIO_c.mBoxItemPosY, field_0x178 * texScale, field_0x17c * texScale, field_0x19e, false, @@ -600,14 +600,14 @@ void dMsgScrnItem_c::fukiPosCalc(u8 param_1) { switch(field_0x19c) { case 1: yOffset = g_MsgObject_HIO_c.mBoxPos[2][3]; - field_0x180 = 105.0f - (mpScreen->search('n_all')->getBounds().i.y + - mpScreen->search('n_all')->getBounds().f.y) / 2; + field_0x180 = 105.0f - (mpScreen->search(MULTI_CHAR('n_all'))->getBounds().i.y + + mpScreen->search(MULTI_CHAR('n_all'))->getBounds().f.y) / 2; mpSelect_c->translate(486.0f, 230.0f); break; case 2: yOffset = g_MsgObject_HIO_c.mBoxPos[1][3]; - field_0x180 = 235.0f - (mpScreen->search('n_all')->getBounds().i.y + - mpScreen->search('n_all')->getBounds().f.y) / 2; + field_0x180 = 235.0f - (mpScreen->search(MULTI_CHAR('n_all'))->getBounds().i.y + + mpScreen->search(MULTI_CHAR('n_all'))->getBounds().f.y) / 2; mpSelect_c->translate(486.0f, 355.0f); break; default: @@ -617,7 +617,7 @@ void dMsgScrnItem_c::fukiPosCalc(u8 param_1) { } field_0x184 = yOffset; setTextBoxPosOffsetY(field_0x180 + yOffset); - mpScreen->search('n_all')->move(field_0x160, yOffset + (field_0x164 + field_0x180)); + mpScreen->search(MULTI_CHAR('n_all'))->move(field_0x160, yOffset + (field_0x164 + field_0x180)); if (mpPmP_c != NULL) { mpPmP_c->reinit(); mpArrow_c->setPos(mpArw_c->getGlobalPosX() + (0.5f * mpArw_c->getSizeX()), @@ -639,8 +639,8 @@ void dMsgScrnItem_c::fukiPosCalc(u8 param_1) { } void dMsgScrnItem_c::setBtk0Animation(J2DAnmTextureSRTKey* param_1) { - mpScreen->search('gold00')->setAnimation(param_1); - mpScreen->search('gold01')->setAnimation(param_1); + mpScreen->search(MULTI_CHAR('gold00'))->setAnimation(param_1); + mpScreen->search(MULTI_CHAR('gold01'))->setAnimation(param_1); } void dMsgScrnItem_c::setBpk0Animation(J2DAnmColor* param_0) { @@ -648,7 +648,7 @@ void dMsgScrnItem_c::setBpk0Animation(J2DAnmColor* param_0) { } void dMsgScrnItem_c::setBpk1Animation(J2DAnmColor* param_0) { - mpScreen->search('moyou_1')->setAnimation(param_0); + mpScreen->search(MULTI_CHAR('moyou_1'))->setAnimation(param_0); } bool dMsgScrnItem_c::isOugiID() { diff --git a/src/d/d_msg_scrn_jimaku.cpp b/src/d/d_msg_scrn_jimaku.cpp index 53d83df320..d76ae68141 100644 --- a/src/d/d_msg_scrn_jimaku.cpp +++ b/src/d/d_msg_scrn_jimaku.cpp @@ -39,7 +39,7 @@ dMsgScrnJimaku_c::dMsgScrnJimaku_c(u8 param_0, JKRExpHeap* i_heap) { memset(mpBuf, 0, 0x106A); mCharInfoPtr = (CharInfo_c*)mpBuf; - mpPmP_c = new CPaneMgr(mpScreen, 'mg_null', 3, NULL); + mpPmP_c = new CPaneMgr(mpScreen, MULTI_CHAR('mg_null'), 3, NULL); JUT_ASSERT(0, mpPmP_c != NULL); mpPmP_c->scale(g_MsgObject_HIO_c.mSubtitleScaleX, g_MsgObject_HIO_c.mSubtitleScaleY); field_0xcc = g_MsgObject_HIO_c.mBoxPos[0][5]; @@ -47,33 +47,33 @@ dMsgScrnJimaku_c::dMsgScrnJimaku_c(u8 param_0, JKRExpHeap* i_heap) { #if VERSION == VERSION_GCN_JPN if (dComIfGs_getOptRuby() == 0) { - mpTm_c[0] = new CPaneMgr(mpScreen, 'mg_3flin', 0, NULL); - mpTm_c[1] = new CPaneMgr(mpScreen, 't3f_s', 0, NULL); + mpTm_c[0] = new CPaneMgr(mpScreen, MULTI_CHAR('mg_3flin'), 0, NULL); + mpTm_c[1] = new CPaneMgr(mpScreen, MULTI_CHAR('t3f_s'), 0, NULL); - mpTmr_c[0] = new CPaneMgr(mpScreen, 'mg_3f', 0, NULL); - mpTmr_c[1] = new CPaneMgr(mpScreen, 'mg_3f_s', 0, NULL); + mpTmr_c[0] = new CPaneMgr(mpScreen, MULTI_CHAR('mg_3f'), 0, NULL); + mpTmr_c[1] = new CPaneMgr(mpScreen, MULTI_CHAR('mg_3f_s'), 0, NULL); - mpScreen->search('n_3line')->hide(); - mpScreen->search('n_3fline')->show(); - mpScreen->search('n_e4line')->hide(); + mpScreen->search(MULTI_CHAR('n_3line'))->hide(); + mpScreen->search(MULTI_CHAR('n_3fline'))->show(); + mpScreen->search(MULTI_CHAR('n_e4line'))->hide(); } else { - mpTm_c[0] = new CPaneMgr(mpScreen, 'mg_3line', 0, NULL); + mpTm_c[0] = new CPaneMgr(mpScreen, MULTI_CHAR('mg_3line'), 0, NULL); mpTm_c[1] = new CPaneMgr(mpScreen, 't3_s', 0, NULL); - mpScreen->search('n_3line')->show(); - mpScreen->search('n_3fline')->hide(); - mpScreen->search('n_e4line')->hide(); + mpScreen->search(MULTI_CHAR('n_3line'))->show(); + mpScreen->search(MULTI_CHAR('n_3fline'))->hide(); + mpScreen->search(MULTI_CHAR('n_e4line'))->hide(); } #else - mpTm_c[0] = new CPaneMgr(mpScreen, 'mg_e4lin', 0, NULL); + mpTm_c[0] = new CPaneMgr(mpScreen, MULTI_CHAR('mg_e4lin'), 0, NULL); JUT_ASSERT(0, mpTm_c[0] != NULL); mpTm_c[1] = new CPaneMgr(mpScreen, 't4_s', 0, NULL); JUT_ASSERT(0, mpTm_c[1] != NULL); - mpScreen->search('n_3line')->hide(); - mpScreen->search('n_3fline')->hide(); - mpScreen->search('n_e4line')->show(); + mpScreen->search(MULTI_CHAR('n_3line'))->hide(); + mpScreen->search(MULTI_CHAR('n_3fline'))->hide(); + mpScreen->search(MULTI_CHAR('n_e4line'))->show(); #endif for (int i = 0; i < 2; i++) { diff --git a/src/d/d_msg_scrn_kanban.cpp b/src/d/d_msg_scrn_kanban.cpp index 864d533bff..681986c25a 100644 --- a/src/d/d_msg_scrn_kanban.cpp +++ b/src/d/d_msg_scrn_kanban.cpp @@ -39,7 +39,7 @@ dMsgScrnKanban_c::dMsgScrnKanban_c(JKRExpHeap* param_0) { field_0xd0->searchUpdateMaterialID(mpScreen); field_0xd8 = 0.0f; - mpPmP_c = new CPaneMgr(mpScreen, 'n_size', 2, NULL); + mpPmP_c = new CPaneMgr(mpScreen, MULTI_CHAR('n_size'), 2, NULL); JUT_ASSERT(60, mpPmP_c != NULL); mpPmP_c->getPanePtr()->setAnimation(field_0xcc); @@ -48,10 +48,10 @@ dMsgScrnKanban_c::dMsgScrnKanban_c(JKRExpHeap* param_0) { mpPmP_c->getPanePtr()->setAnimation((J2DAnmTransform*)NULL); mpPmP_c->scale(g_MsgObject_HIO_c.mBoxStoneScaleX, g_MsgObject_HIO_c.mBoxStoneScaleY); - mpBack_c = new CPaneMgr(mpScreen, 'back_b', 0, NULL); + mpBack_c = new CPaneMgr(mpScreen, MULTI_CHAR('back_b'), 0, NULL); JUT_ASSERT(68, mpBack_c != NULL); - mpSpot_c = new CPaneMgr(mpScreen, 'spot00', 0, NULL); + mpSpot_c = new CPaneMgr(mpScreen, MULTI_CHAR('spot00'), 0, NULL); JUT_ASSERT(72, mpSpot_c != NULL); mpSpot_c->getPanePtr()->setAnimation(field_0xd0); @@ -59,18 +59,18 @@ dMsgScrnKanban_c::dMsgScrnKanban_c(JKRExpHeap* param_0) { #if VERSION == VERSION_GCN_JPN if (dComIfGs_getOptRuby() != 0) { - static u64 const t_tag[3] = {'mg_3line', 't3_w', 't3_s'}; + static u64 const t_tag[3] = {MULTI_CHAR('mg_3line'), 't3_w', 't3_s'}; for (int i = 0; i < 3; i++) { mpTm_c[i] = new CPaneMgr(mpScreen, t_tag[i], 0, NULL); ((J2DTextBox*)mpTm_c[i]->getPanePtr())->setFont(mDoExt_getMesgFont()); } - mpScreen->search('n_3line')->show(); - mpScreen->search('n_3fline')->hide(); - mpScreen->search('n_e4line')->hide(); + mpScreen->search(MULTI_CHAR('n_3line'))->show(); + mpScreen->search(MULTI_CHAR('n_3fline'))->hide(); + mpScreen->search(MULTI_CHAR('n_e4line'))->hide(); } else { - static u64 const t_tag_2[3] = {'t3fline', 't3f_w', 't3f_s'}; - static u64 const tr_tag[3] = {'mg_3f', 'mg_3f_w', 'mg_3f_s'}; + static u64 const t_tag_2[3] = {MULTI_CHAR('t3fline'), MULTI_CHAR('t3f_w'), MULTI_CHAR('t3f_s')}; + static u64 const tr_tag[3] = {MULTI_CHAR('mg_3f'), MULTI_CHAR('mg_3f_w'), MULTI_CHAR('mg_3f_s')}; for (int i = 0; i < 3; i++) { mpTm_c[i] = new CPaneMgr(mpScreen, t_tag_2[i], 0, NULL); @@ -80,12 +80,12 @@ dMsgScrnKanban_c::dMsgScrnKanban_c(JKRExpHeap* param_0) { ((J2DTextBox*)mpTmr_c[i]->getPanePtr())->setFont(mDoExt_getMesgFont()); } - mpScreen->search('n_3line')->hide(); - mpScreen->search('n_3fline')->show(); - mpScreen->search('n_e4line')->hide(); + mpScreen->search(MULTI_CHAR('n_3line'))->hide(); + mpScreen->search(MULTI_CHAR('n_3fline'))->show(); + mpScreen->search(MULTI_CHAR('n_e4line'))->hide(); } #else - static u64 const t_tag[3] = {'mg_e4lin', 'f4_w', 't4_s'}; + static u64 const t_tag[3] = {MULTI_CHAR('mg_e4lin'), 'f4_w', 't4_s'}; for (int i = 0; i < 3; i++) { mpTm_c[i] = new CPaneMgr(mpScreen, t_tag[i], 0, NULL); @@ -93,9 +93,9 @@ dMsgScrnKanban_c::dMsgScrnKanban_c(JKRExpHeap* param_0) { ((J2DTextBox*)mpTm_c[i]->getPanePtr())->setFont(mDoExt_getMesgFont()); } - mpScreen->search('n_3line')->hide(); - mpScreen->search('n_3fline')->hide(); - mpScreen->search('n_e4line')->show(); + mpScreen->search(MULTI_CHAR('n_3line'))->hide(); + mpScreen->search(MULTI_CHAR('n_3fline'))->hide(); + mpScreen->search(MULTI_CHAR('n_e4line'))->show(); #endif ((J2DTextBox*)mpTm_c[0]->getPanePtr())->getFontSize(mFontSize); diff --git a/src/d/d_msg_scrn_light.cpp b/src/d/d_msg_scrn_light.cpp index baa99036b5..55872b72fb 100644 --- a/src/d/d_msg_scrn_light.cpp +++ b/src/d/d_msg_scrn_light.cpp @@ -143,7 +143,7 @@ dMsgScrnLight_c::dMsgScrnLight_c(u8 i_colorType, u8 param_1) { mpBpk->searchUpdateMaterialID(mpScreen); mBpkFrame = 0.0f; - mpParent_c = new CPaneMgr(mpScreen, 'moya00', 0, NULL); + mpParent_c = new CPaneMgr(mpScreen, MULTI_CHAR('moya00'), 0, NULL); JUT_ASSERT(0, mpParent_c != NULL); mpParent_c->getPanePtr()->setAnimation(mpBck); diff --git a/src/d/d_msg_scrn_place.cpp b/src/d/d_msg_scrn_place.cpp index dc2a337f8a..c9c76484c6 100644 --- a/src/d/d_msg_scrn_place.cpp +++ b/src/d/d_msg_scrn_place.cpp @@ -14,7 +14,7 @@ dMsgScrnPlace_c::dMsgScrnPlace_c() { static u64 t_tag[7] = { - 'sfontb0', 'sfontb1', 'sfontb2', 'sfontl0', 'sfontl1', 'sfontl2', 'sfont00', + MULTI_CHAR('sfontb0'), MULTI_CHAR('sfontb1'), MULTI_CHAR('sfontb2'), MULTI_CHAR('sfontl0'), MULTI_CHAR('sfontl1'), MULTI_CHAR('sfontl2'), MULTI_CHAR('sfont00'), }; init(); @@ -35,16 +35,16 @@ dMsgScrnPlace_c::dMsgScrnPlace_c() { #endif dPaneClass_showNullPane(mpScreen); - mpPmP_c = new CPaneMgr(mpScreen, 'n_all', 2, NULL); + mpPmP_c = new CPaneMgr(mpScreen, MULTI_CHAR('n_all'), 2, NULL); mpPmP_c->scale(g_MsgObject_HIO_c.mStageTitleScaleX, g_MsgObject_HIO_c.mStageTitleScaleY); - mpFontParent = new CPaneMgr(mpScreen, 's_font_n', 0, NULL); + mpFontParent = new CPaneMgr(mpScreen, MULTI_CHAR('s_font_n'), 0, NULL); mpFontParent->scale(g_MsgObject_HIO_c.mStageTitleCharSizeX, g_MsgObject_HIO_c.mStageTitleCharSizeY); mpFontParent->paneTrans(g_MsgObject_HIO_c.mStageTitleCharPosX, g_MsgObject_HIO_c.mStageTitleCharPosY - mScaleX); - mpBaseParent = new CPaneMgr(mpScreen, 'base_n', 2, NULL); + mpBaseParent = new CPaneMgr(mpScreen, MULTI_CHAR('base_n'), 2, NULL); mpBaseParent->scale(g_MsgObject_HIO_c.mStageTitleBaseSizeX, g_MsgObject_HIO_c.mStageTitleBaseSizeY); mpBaseParent->paneTrans(g_MsgObject_HIO_c.mStageTitleBasePosX, diff --git a/src/d/d_msg_scrn_staff.cpp b/src/d/d_msg_scrn_staff.cpp index cbba48b164..d0cd861250 100644 --- a/src/d/d_msg_scrn_staff.cpp +++ b/src/d/d_msg_scrn_staff.cpp @@ -13,7 +13,7 @@ dMsgScrnStaff_c::dMsgScrnStaff_c(u8 unused) { static u64 t_tag[6] = { - 'right_s', 'right', 'center_s', 'center', 'left_s', 'left', + MULTI_CHAR('right_s'), MULTI_CHAR('right'), MULTI_CHAR('center_s'), MULTI_CHAR('center'), MULTI_CHAR('left_s'), 'left', }; init(); @@ -26,8 +26,8 @@ dMsgScrnStaff_c::dMsgScrnStaff_c(u8 unused) { dPaneClass_showNullPane(mpScreen); mpPmP_c = new CPaneMgr(mpScreen, 'ROOT', 2, NULL); - mpScreen->search('left_n')->hide(); - mpScreen->search('right_n')->hide(); + mpScreen->search(MULTI_CHAR('left_n'))->hide(); + mpScreen->search(MULTI_CHAR('right_n'))->hide(); for (int i = 0; i < 6; i++) { mpTm_c[i] = new CPaneMgr(mpScreen, t_tag[i], NULL, NULL); diff --git a/src/d/d_msg_scrn_talk.cpp b/src/d/d_msg_scrn_talk.cpp index 5324728edc..a95db2b969 100644 --- a/src/d/d_msg_scrn_talk.cpp +++ b/src/d/d_msg_scrn_talk.cpp @@ -77,21 +77,21 @@ dMsgScrnTalk_c::dMsgScrnTalk_c(u8 param_1, u8 param_2, JKRExpHeap* param_3) { field_0xf8[i] = 18.0f - g_MsgObject_HIO_c.mPikariScale; field_0x35c[i] = g_MsgObject_HIO_c.mPikariHaloDelay_spirit; } - field_0xe8 = mpScreen->search('n_all')->getBounds().i.x; - field_0xec = mpScreen->search('n_all')->getBounds().i.y; + field_0xe8 = mpScreen->search(MULTI_CHAR('n_all'))->getBounds().i.x; + field_0xec = mpScreen->search(MULTI_CHAR('n_all'))->getBounds().i.y; field_0xf0 = 0.0f; for (int i = 0; i < 3; i++) { field_0x350[i] = g_MsgObject_HIO_c.mBoxPos[i][0]; } - mpScreen->search('mg_null')->move( - mpScreen->search('mg_null')->getBounds().i.x + g_MsgObject_HIO_c.mTextPosX, - mpScreen->search('mg_null')->getBounds().i.y + g_MsgObject_HIO_c.mTextPosY); - mpArw_c = new CPaneMgr(mpScreen, 'set_ya_n', 0, NULL); + mpScreen->search(MULTI_CHAR('mg_null'))->move( + mpScreen->search(MULTI_CHAR('mg_null'))->getBounds().i.x + g_MsgObject_HIO_c.mTextPosX, + mpScreen->search(MULTI_CHAR('mg_null'))->getBounds().i.y + g_MsgObject_HIO_c.mTextPosY); + mpArw_c = new CPaneMgr(mpScreen, MULTI_CHAR('set_ya_n'), 0, NULL); JUT_ASSERT(147, mpArw_c != NULL); - mpMg_c[0] = new CPaneMgr(mpScreen, 'mg_null', 0, NULL); + mpMg_c[0] = new CPaneMgr(mpScreen, MULTI_CHAR('mg_null'), 0, NULL); JUT_ASSERT(150, mpMg_c[0] != NULL); - mpMg_c[1] = new CPaneMgr(mpTxScreen, 'mg_null', 0, NULL); + mpMg_c[1] = new CPaneMgr(mpTxScreen, MULTI_CHAR('mg_null'), 0, NULL); JUT_ASSERT(153, mpMg_c[1] != NULL); OSInitFastCast(); @@ -101,69 +101,69 @@ dMsgScrnTalk_c::dMsgScrnTalk_c(u8 param_1, u8 param_2, JKRExpHeap* param_3) { field_0xf4 = -10.0f; #endif fukiPosCalc(param_1); - mpPmP_c = new CPaneMgr(mpScreen, 'n_all', 3, NULL); + mpPmP_c = new CPaneMgr(mpScreen, MULTI_CHAR('n_all'), 3, NULL); JUT_ASSERT(176, mpPmP_c != NULL); mpPmP_c->scale(g_MsgObject_HIO_c.mBoxTalkScaleX, g_MsgObject_HIO_c.mBoxTalkScaleY); #if VERSION == VERSION_GCN_JPN if (dComIfGs_getOptRuby() == 0) { - mpTm_c[0] = new CPaneMgr(mpTxScreen, 'mg_3flin', 0, NULL); - mpTm_c[1] = new CPaneMgr(mpTxScreen, 't3f_s', 0, NULL); + mpTm_c[0] = new CPaneMgr(mpTxScreen, MULTI_CHAR('mg_3flin'), 0, NULL); + mpTm_c[1] = new CPaneMgr(mpTxScreen, MULTI_CHAR('t3f_s'), 0, NULL); - mpTmr_c[0] = new CPaneMgr(mpTxScreen, 'mg_3f', 0, NULL); + mpTmr_c[0] = new CPaneMgr(mpTxScreen, MULTI_CHAR('mg_3f'), 0, NULL); if (dMsgObject_getMsgObjectClass()->getFukiKind() == 8) { - mpTm_c[2] = new CPaneMgr(mpTxScreen, 't3f_s1', 0, NULL); - mpTm_c[3] = new CPaneMgr(mpTxScreen, 't3f_s2', 0, NULL); - mpTm_c[4] = new CPaneMgr(mpTxScreen, 't3f_s3', 0, NULL); - mpTm_c[5] = new CPaneMgr(mpTxScreen, 't3f_s4', 0, NULL); - mpTmr_c[1] = new CPaneMgr(mpTxScreen, 'mg_3f_s1', 0, NULL); - mpTmr_c[2] = new CPaneMgr(mpTxScreen, 'mg_3f_s2', 0, NULL); + mpTm_c[2] = new CPaneMgr(mpTxScreen, MULTI_CHAR('t3f_s1'), 0, NULL); + mpTm_c[3] = new CPaneMgr(mpTxScreen, MULTI_CHAR('t3f_s2'), 0, NULL); + mpTm_c[4] = new CPaneMgr(mpTxScreen, MULTI_CHAR('t3f_s3'), 0, NULL); + mpTm_c[5] = new CPaneMgr(mpTxScreen, MULTI_CHAR('t3f_s4'), 0, NULL); + mpTmr_c[1] = new CPaneMgr(mpTxScreen, MULTI_CHAR('mg_3f_s1'), 0, NULL); + mpTmr_c[2] = new CPaneMgr(mpTxScreen, MULTI_CHAR('mg_3f_s2'), 0, NULL); } else { - mpTmr_c[1] = new CPaneMgr(mpTxScreen, 'mg_3f_s', 0, NULL); + mpTmr_c[1] = new CPaneMgr(mpTxScreen, MULTI_CHAR('mg_3f_s'), 0, NULL); } - mpTxScreen->search('n_3line')->hide(); - mpTxScreen->search('n_3fline')->show(); - mpTxScreen->search('n_e4line')->hide(); + mpTxScreen->search(MULTI_CHAR('n_3line'))->hide(); + mpTxScreen->search(MULTI_CHAR('n_3fline'))->show(); + mpTxScreen->search(MULTI_CHAR('n_e4line'))->hide(); } else { - mpTm_c[0] = new CPaneMgr(mpTxScreen, 'mg_3line', 0, NULL); + mpTm_c[0] = new CPaneMgr(mpTxScreen, MULTI_CHAR('mg_3line'), 0, NULL); mpTm_c[1] = new CPaneMgr(mpTxScreen, 't3_s', 0, NULL); if (dMsgObject_getMsgObjectClass()->getFukiKind() == 8) { - mpTm_c[2] = new CPaneMgr(mpTxScreen, 't3_s1', 0, NULL); + mpTm_c[2] = new CPaneMgr(mpTxScreen, MULTI_CHAR('t3_s1'), 0, NULL); JUT_ASSERT(189, mpTm_c[2] != NULL); - mpTm_c[3] = new CPaneMgr(mpTxScreen, 't3_s2', 0, NULL); + mpTm_c[3] = new CPaneMgr(mpTxScreen, MULTI_CHAR('t3_s2'), 0, NULL); JUT_ASSERT(191, mpTm_c[3] != NULL); - mpTm_c[4] = new CPaneMgr(mpTxScreen, 't3_s3', 0, NULL); + mpTm_c[4] = new CPaneMgr(mpTxScreen, MULTI_CHAR('t3_s3'), 0, NULL); JUT_ASSERT(193, mpTm_c[4] != NULL); - mpTm_c[5] = new CPaneMgr(mpTxScreen, 't3_s4', 0, NULL); + mpTm_c[5] = new CPaneMgr(mpTxScreen, MULTI_CHAR('t3_s4'), 0, NULL); JUT_ASSERT(193, mpTm_c[5] != NULL); } - mpTxScreen->search('n_3line')->show(); - mpTxScreen->search('n_3fline')->hide(); - mpTxScreen->search('n_e4line')->hide(); + mpTxScreen->search(MULTI_CHAR('n_3line'))->show(); + mpTxScreen->search(MULTI_CHAR('n_3fline'))->hide(); + mpTxScreen->search(MULTI_CHAR('n_e4line'))->hide(); } #else - mpTm_c[0] = new CPaneMgr(mpTxScreen, 'mg_e4lin', 0, NULL); + mpTm_c[0] = new CPaneMgr(mpTxScreen, MULTI_CHAR('mg_e4lin'), 0, NULL); JUT_ASSERT(182, mpTm_c[0] != NULL); mpTm_c[1] = new CPaneMgr(mpTxScreen, 't4_s', 0, NULL); JUT_ASSERT(185, mpTm_c[1] != NULL); if (dMsgObject_getMsgObjectClass()->getFukiKind() == 8) { - mpTm_c[2] = new CPaneMgr(mpTxScreen, 't4_s1', 0, NULL); + mpTm_c[2] = new CPaneMgr(mpTxScreen, MULTI_CHAR('t4_s1'), 0, NULL); JUT_ASSERT(189, mpTm_c[2] != NULL); - mpTm_c[3] = new CPaneMgr(mpTxScreen, 't4_s2', 0, NULL); + mpTm_c[3] = new CPaneMgr(mpTxScreen, MULTI_CHAR('t4_s2'), 0, NULL); JUT_ASSERT(191, mpTm_c[3] != NULL); - mpTm_c[4] = new CPaneMgr(mpTxScreen, 't4_s3', 0, NULL); + mpTm_c[4] = new CPaneMgr(mpTxScreen, MULTI_CHAR('t4_s3'), 0, NULL); JUT_ASSERT(193, mpTm_c[4] != NULL); - mpTm_c[5] = new CPaneMgr(mpTxScreen, 't4_s4', 0, NULL); + mpTm_c[5] = new CPaneMgr(mpTxScreen, MULTI_CHAR('t4_s4'), 0, NULL); JUT_ASSERT(193, mpTm_c[5] != NULL); } - mpTxScreen->search('n_3line')->hide(); - mpTxScreen->search('n_3fline')->hide(); - mpTxScreen->search('n_e4line')->show(); + mpTxScreen->search(MULTI_CHAR('n_3line'))->hide(); + mpTxScreen->search(MULTI_CHAR('n_3fline'))->hide(); + mpTxScreen->search(MULTI_CHAR('n_e4line'))->show(); #endif for (int i = 0; i < 6; i++) { if (mpTm_c[i] != NULL) { @@ -484,16 +484,16 @@ void dMsgScrnTalk_c::fukiPosCalc(u8 param_1) { switch (field_0x488) { case 1: dVar15 = g_MsgObject_HIO_c.mBoxPos[2][0]; - field_0xf0 = 105.0f - (mpScreen->search('n_all')->getBounds().i.y + - mpScreen->search('n_all')->getBounds().f.y) / 2; + field_0xf0 = 105.0f - (mpScreen->search(MULTI_CHAR('n_all'))->getBounds().i.y + + mpScreen->search(MULTI_CHAR('n_all'))->getBounds().f.y) / 2; if (mpSelect_c != NULL) { mpSelect_c->translate(486.0f, 230.0f); } break; case 2: dVar15 = g_MsgObject_HIO_c.mBoxPos[1][0]; - field_0xf0 = 235.0f - (mpScreen->search('n_all')->getBounds().i.y + - mpScreen->search('n_all')->getBounds().f.y) / 2; + field_0xf0 = 235.0f - (mpScreen->search(MULTI_CHAR('n_all'))->getBounds().i.y + + mpScreen->search(MULTI_CHAR('n_all'))->getBounds().f.y) / 2; if (mpSelect_c != NULL) { mpSelect_c->translate(486.0f, 355.0f); } @@ -508,10 +508,10 @@ void dMsgScrnTalk_c::fukiPosCalc(u8 param_1) { } if (dComIfGp_isHeapLockFlag() == 2 || dComIfGp_isHeapLockFlag() == 3) { setTextBoxPosOffsetY(-190.0f); - mpScreen->search('n_all')->move(field_0xe8, field_0xec - 190.0f); + mpScreen->search(MULTI_CHAR('n_all'))->move(field_0xe8, field_0xec - 190.0f); } else { setTextBoxPosOffsetY(field_0xf0 + dVar15); - mpScreen->search('n_all')->move(field_0xe8, field_0xec + field_0xf0 + dVar15); + mpScreen->search(MULTI_CHAR('n_all'))->move(field_0xe8, field_0xec + field_0xf0 + dVar15); } if (mpPmP_c != NULL) { mpPmP_c->reinit(); diff --git a/src/d/d_msg_scrn_tree.cpp b/src/d/d_msg_scrn_tree.cpp index 6165a62b8f..eb29b1e266 100644 --- a/src/d/d_msg_scrn_tree.cpp +++ b/src/d/d_msg_scrn_tree.cpp @@ -44,36 +44,36 @@ dMsgScrnTree_c::dMsgScrnTree_c(JUTFont* param_0, JKRExpHeap* param_1) { field_0xd4->searchUpdateMaterialID(mpScreen); field_0xe0 = 0.0f; - mpPmP_c = new CPaneMgr(mpScreen, 'n_size', 2, NULL); + mpPmP_c = new CPaneMgr(mpScreen, MULTI_CHAR('n_size'), 2, NULL); mpPmP_c->getPanePtr()->setAnimation(field_0xcc); field_0xcc->setFrame(1.0f); mpPmP_c->getPanePtr()->animationTransform(); mpPmP_c->getPanePtr()->setAnimation((J2DAnmTransform*)NULL); mpPmP_c->scale(g_MsgObject_HIO_c.mBoxWoodScaleX, g_MsgObject_HIO_c.mBoxWoodScaleY); - field_0xc4 = new CPaneMgr(mpScreen, 'back_b', 0, NULL); - field_0xc8 = new CPaneMgr(mpScreen, 'spot00', 0, NULL); + field_0xc4 = new CPaneMgr(mpScreen, MULTI_CHAR('back_b'), 0, NULL); + field_0xc8 = new CPaneMgr(mpScreen, MULTI_CHAR('spot00'), 0, NULL); field_0xc8->getPanePtr()->setAnimation(field_0xd0); - mpScreen->search('white_m')->setAnimation(field_0xd4); + mpScreen->search(MULTI_CHAR('white_m'))->setAnimation(field_0xd4); #if VERSION == VERSION_GCN_JPN if (dComIfGs_getOptRuby() != 0) { for (int i = 0; i < 3; i++) { - static u64 const t_tag[3] = {'mg_3line', 't3_w', 't3_s'}; + static u64 const t_tag[3] = {MULTI_CHAR('mg_3line'), 't3_w', 't3_s'}; mpTm_c[i] = new CPaneMgr(mpScreen, t_tag[i], 0, NULL); ((J2DTextBox*)mpTm_c[i]->getPanePtr())->setFont(field_0x54); ((J2DTextBox*)mpTm_c[i]->getPanePtr())->setString(0x210, ""); } - mpScreen->search('n_3line')->show(); - mpScreen->search('n_3fline')->hide(); - mpScreen->search('n_e4line')->hide(); + mpScreen->search(MULTI_CHAR('n_3line'))->show(); + mpScreen->search(MULTI_CHAR('n_3fline'))->hide(); + mpScreen->search(MULTI_CHAR('n_e4line'))->hide(); } else { for (int i = 0; i < 3; i++) { - static u64 const t_tag[3] = {'t3fline', 't3f_w', 't3f_s'}; - static u64 const tr_tag[3] = {'mg_3f', 'mg_3f_w', 'mg_3f_s'}; + static u64 const t_tag[3] = {MULTI_CHAR('t3fline'), MULTI_CHAR('t3f_w'), MULTI_CHAR('t3f_s')}; + static u64 const tr_tag[3] = {MULTI_CHAR('mg_3f'), MULTI_CHAR('mg_3f_w'), MULTI_CHAR('mg_3f_s')}; mpTm_c[i] = new CPaneMgr(mpScreen, t_tag[i], 0, NULL); ((J2DTextBox*)mpTm_c[i]->getPanePtr())->setFont(field_0x54); @@ -84,22 +84,22 @@ dMsgScrnTree_c::dMsgScrnTree_c(JUTFont* param_0, JKRExpHeap* param_1) { ((J2DTextBox*)mpTmr_c[i]->getPanePtr())->setString(0x210, ""); } - mpScreen->search('n_3line')->hide(); - mpScreen->search('n_3fline')->show(); - mpScreen->search('n_e4line')->hide(); + mpScreen->search(MULTI_CHAR('n_3line'))->hide(); + mpScreen->search(MULTI_CHAR('n_3fline'))->show(); + mpScreen->search(MULTI_CHAR('n_e4line'))->hide(); } #else for (int i = 0; i < 3; i++) { - static u64 const t_tag[3] = {'mg_e4lin', 'f4_w', 't4_s'}; + static u64 const t_tag[3] = {MULTI_CHAR('mg_e4lin'), 'f4_w', 't4_s'}; mpTm_c[i] = new CPaneMgr(mpScreen, t_tag[i], 0, NULL); ((J2DTextBox*)mpTm_c[i]->getPanePtr())->setFont(field_0x54); ((J2DTextBox*)mpTm_c[i]->getPanePtr())->setString(0x200, ""); } - mpScreen->search('n_3line')->hide(); - mpScreen->search('n_3fline')->hide(); - mpScreen->search('n_e4line')->show(); + mpScreen->search(MULTI_CHAR('n_3line'))->hide(); + mpScreen->search(MULTI_CHAR('n_3fline'))->hide(); + mpScreen->search(MULTI_CHAR('n_e4line'))->show(); #endif ((J2DTextBox*)mpTm_c[0]->getPanePtr())->getFontSize(mFontSize); diff --git a/src/d/d_name.cpp b/src/d/d_name.cpp index e45a9ee0d1..091ad29232 100644 --- a/src/d/d_name.cpp +++ b/src/d/d_name.cpp @@ -1290,18 +1290,18 @@ void dName_c::screenSet() { 's_00', 's_01', 's_02', 's_03', 's_04', 's_05', 's_06', 's_07', }; static u64 l_cur1TagName[8] = { - 's_0r', 's_01r', 's_02r', 's_03r', 's_04r', 's_05r', 's_06r', 's_07r', + 's_0r', MULTI_CHAR('s_01r'), MULTI_CHAR('s_02r'), MULTI_CHAR('s_03r'), MULTI_CHAR('s_04r'), MULTI_CHAR('s_05r'), MULTI_CHAR('s_06r'), MULTI_CHAR('s_07r'), }; #if REGION_JPN static u64 l_menu_icon_tag[4] = { - 'j_hira_n', - 'j_kata_n', - 'j_eigo_n', - 'j_end_n', + MULTI_CHAR('j_hira_n'), + MULTI_CHAR('j_kata_n'), + MULTI_CHAR('j_eigo_n'), + MULTI_CHAR('j_end_n'), }; static u64 l_menu_tag[5][3] = { - 'm_hira_0', 'm_hira_1', 'm_hira_s', 'm_kata_0', 'm_kata_1', 'm_kata_s', - 'm_eigo_0', 'm_eigo_1', 'm_eigo_s', 'j_end_0', 'j_end_1', 'j_end_s', + MULTI_CHAR('m_hira_0'), MULTI_CHAR('m_hira_1'), MULTI_CHAR('m_hira_s'), MULTI_CHAR('m_kata_0'), MULTI_CHAR('m_kata_1'), MULTI_CHAR('m_kata_s'), + MULTI_CHAR('m_eigo_0'), MULTI_CHAR('m_eigo_1'), MULTI_CHAR('m_eigo_s'), MULTI_CHAR('j_end_0'), MULTI_CHAR('j_end_1'), MULTI_CHAR('j_end_s'), }; static u32 l_menu_msg[4] = { 0x386, @@ -1311,14 +1311,14 @@ void dName_c::screenSet() { }; #else static u64 l_menu_icon_tag[4] = { - 'p_ABC_n', - 'p_abc_n', - 'j_eigo_n', - 'p_end_n', + MULTI_CHAR('p_ABC_n'), + MULTI_CHAR('p_abc_n'), + MULTI_CHAR('j_eigo_n'), + MULTI_CHAR('p_end_n'), }; static u64 l_menu_tag[5][3] = { - 'p_ABC_0', 'p_ABC_1', 'p_ABC_2', 'p_abc_0', 'p_abc_1', 'p_abc_2', - 'm_eigo_0', 'm_eigo_1', 'm_eigo_2', 'p_end_0', 'p_end_1', 'p_end_2', + MULTI_CHAR('p_ABC_0'), MULTI_CHAR('p_ABC_1'), MULTI_CHAR('p_ABC_2'), MULTI_CHAR('p_abc_0'), MULTI_CHAR('p_abc_1'), MULTI_CHAR('p_abc_2'), + MULTI_CHAR('m_eigo_0'), MULTI_CHAR('m_eigo_1'), MULTI_CHAR('m_eigo_2'), MULTI_CHAR('p_end_0'), MULTI_CHAR('p_end_1'), MULTI_CHAR('p_end_2'), }; static u32 l_menu_msg[4] = { 0x38B, @@ -1328,20 +1328,20 @@ void dName_c::screenSet() { }; #endif static u64 l_tagName[65] = { - 'm_00_0', 'm_00_1', 'm_00_2', 'm_00_3', 'm_00_4', 'm_01_0', 'm_01_1', 'm_01_2', 'm_01_3', - 'm_01_4', 'm_02_0', 'm_02_1', 'm_02_2', 'm_02_3', 'm_02_4', 'm03_0', 'm03_1', 'm03_2', - 'm03_3', 'm03_4', 'm_04_0', 'm_04_1', 'm_04_2', 'm_04_3', 'm_04_4', 'm_05_0', 'm_05_1', - 'm_05_2', 'm_05_3', 'm_05_4', 'm_06_0', 'm_06_1', 'm_06_2', 'm_06_3', 'm_06_4', 'm_07_0', - 'm_07_1', 'm_07_2', 'm_07_3', 'm_07_4', 'm_08_0', 'm_08_1', 'm_08_2', 'm_08_3', 'm_08_4', - 'm_09_0', 'm_09_1', 'm_09_2', 'm_09_3', 'm_09_4', 'm_10_0', 'm_10_1', 'm_10_2', 'm_10_3', - 'm_10_4', 'm_11_0', 'm_11_1', 'm_11_2', 'm_11_3', 'm_11_4', 'm12_0', 'm12_1', 'm12_2', - 'm12_3', 'm12_4', + MULTI_CHAR('m_00_0'), MULTI_CHAR('m_00_1'), MULTI_CHAR('m_00_2'), MULTI_CHAR('m_00_3'), MULTI_CHAR('m_00_4'), MULTI_CHAR('m_01_0'), MULTI_CHAR('m_01_1'), MULTI_CHAR('m_01_2'), MULTI_CHAR('m_01_3'), + MULTI_CHAR('m_01_4'), MULTI_CHAR('m_02_0'), MULTI_CHAR('m_02_1'), MULTI_CHAR('m_02_2'), MULTI_CHAR('m_02_3'), MULTI_CHAR('m_02_4'), MULTI_CHAR('m03_0'), MULTI_CHAR('m03_1'), MULTI_CHAR('m03_2'), + MULTI_CHAR('m03_3'), MULTI_CHAR('m03_4'), MULTI_CHAR('m_04_0'), MULTI_CHAR('m_04_1'), MULTI_CHAR('m_04_2'), MULTI_CHAR('m_04_3'), MULTI_CHAR('m_04_4'), MULTI_CHAR('m_05_0'), MULTI_CHAR('m_05_1'), + MULTI_CHAR('m_05_2'), MULTI_CHAR('m_05_3'), MULTI_CHAR('m_05_4'), MULTI_CHAR('m_06_0'), MULTI_CHAR('m_06_1'), MULTI_CHAR('m_06_2'), MULTI_CHAR('m_06_3'), MULTI_CHAR('m_06_4'), MULTI_CHAR('m_07_0'), + MULTI_CHAR('m_07_1'), MULTI_CHAR('m_07_2'), MULTI_CHAR('m_07_3'), MULTI_CHAR('m_07_4'), MULTI_CHAR('m_08_0'), MULTI_CHAR('m_08_1'), MULTI_CHAR('m_08_2'), MULTI_CHAR('m_08_3'), MULTI_CHAR('m_08_4'), + MULTI_CHAR('m_09_0'), MULTI_CHAR('m_09_1'), MULTI_CHAR('m_09_2'), MULTI_CHAR('m_09_3'), MULTI_CHAR('m_09_4'), MULTI_CHAR('m_10_0'), MULTI_CHAR('m_10_1'), MULTI_CHAR('m_10_2'), MULTI_CHAR('m_10_3'), + MULTI_CHAR('m_10_4'), MULTI_CHAR('m_11_0'), MULTI_CHAR('m_11_1'), MULTI_CHAR('m_11_2'), MULTI_CHAR('m_11_3'), MULTI_CHAR('m_11_4'), MULTI_CHAR('m12_0'), MULTI_CHAR('m12_1'), MULTI_CHAR('m12_2'), + MULTI_CHAR('m12_3'), MULTI_CHAR('m12_4'), }; static u64 l_nameTagName[8] = { - 'name_00', 'name_01', 'name_02', 'name_03', 'name_04', 'name_05', 'name_06', 'name_07', + MULTI_CHAR('name_00'), MULTI_CHAR('name_01'), MULTI_CHAR('name_02'), MULTI_CHAR('name_03'), MULTI_CHAR('name_04'), MULTI_CHAR('name_05'), MULTI_CHAR('name_06'), MULTI_CHAR('name_07'), }; static u64 l_nameCurTagName[8] = { - 's__n_00', 's__n_01', 's__n_02', 's__n_03', 's__n_04', 's__n_05', 's__n_06', 's__n_07', + MULTI_CHAR('s__n_00'), MULTI_CHAR('s__n_01'), MULTI_CHAR('s__n_02'), MULTI_CHAR('s__n_03'), MULTI_CHAR('s__n_04'), MULTI_CHAR('s__n_05'), MULTI_CHAR('s__n_06'), MULTI_CHAR('s__n_07'), }; nameIn.NameInScr = new J2DScreen(); @@ -1350,7 +1350,7 @@ void dName_c::screenSet() { archive = dComIfGp_getNameResArchive(); nameIn.NameInScr->setPriority("zelda_player_name.blo", 0x100000, archive); dPaneClass_showNullPane(nameIn.NameInScr); - nameIn.field_0x10 = nameIn.NameInScr->search('name_n'); + nameIn.field_0x10 = nameIn.NameInScr->search(MULTI_CHAR('name_n')); void* bpk = JKRGetNameResource("zelda_player_name.bpk", archive); JUT_ASSERT(0, bpk != NULL); @@ -1375,22 +1375,22 @@ void dName_c::screenSet() { } #if REGION_JPN - nameIn.NameInScr->search('pal_n')->hide(); - mMenuPane = nameIn.NameInScr->search('jpn_n'); + nameIn.NameInScr->search(MULTI_CHAR('pal_n'))->hide(); + mMenuPane = nameIn.NameInScr->search(MULTI_CHAR('jpn_n')); mMenuPane->show(); - nameIn.NameInScr->search('p_ABC_n')->scale(0.0f, 0.0f); - nameIn.NameInScr->search('p_abc_n')->scale(0.0f, 0.0f); - nameIn.NameInScr->search('p_end_n')->scale(0.0f, 0.0f); + nameIn.NameInScr->search(MULTI_CHAR('p_ABC_n'))->scale(0.0f, 0.0f); + nameIn.NameInScr->search(MULTI_CHAR('p_abc_n'))->scale(0.0f, 0.0f); + nameIn.NameInScr->search(MULTI_CHAR('p_end_n'))->scale(0.0f, 0.0f); #else - nameIn.NameInScr->search('jpn_n')->hide(); - mMenuPane = nameIn.NameInScr->search('pal_n'); + nameIn.NameInScr->search(MULTI_CHAR('jpn_n'))->hide(); + mMenuPane = nameIn.NameInScr->search(MULTI_CHAR('pal_n')); mMenuPane->show(); - nameIn.NameInScr->search('j_hira_n')->scale(0.0f, 0.0f); - nameIn.NameInScr->search('j_kata_n')->scale(0.0f, 0.0f); - nameIn.NameInScr->search('j_eigo_n')->scale(0.0f, 0.0f); - nameIn.NameInScr->search('j_end_n')->scale(0.0f, 0.0f); + nameIn.NameInScr->search(MULTI_CHAR('j_hira_n'))->scale(0.0f, 0.0f); + nameIn.NameInScr->search(MULTI_CHAR('j_kata_n'))->scale(0.0f, 0.0f); + nameIn.NameInScr->search(MULTI_CHAR('j_eigo_n'))->scale(0.0f, 0.0f); + nameIn.NameInScr->search(MULTI_CHAR('j_end_n'))->scale(0.0f, 0.0f); #endif J2DTextBox* menuPane[3]; @@ -1425,7 +1425,7 @@ void dName_c::screenSet() { mMenuIcon[0]->hide(); mMenuIcon[1]->hide(); #endif - mMojiPane = nameIn.NameInScr->search('moji_n'); + mMojiPane = nameIn.NameInScr->search(MULTI_CHAR('moji_n')); for (u32 i = 0; i < 65; i++) { mMojiIcon[i] = new CPaneMgr(nameIn.NameInScr, l_tagName[i], 2, NULL); diff --git a/src/d/d_select_cursor.cpp b/src/d/d_select_cursor.cpp index c2fc86ab0d..cd2a5c0af2 100644 --- a/src/d/d_select_cursor.cpp +++ b/src/d/d_select_cursor.cpp @@ -100,12 +100,12 @@ dSelect_cursor_c::dSelect_cursor_c(u8 param_0, f32 param_1, JKRArchive* param_2) } switch(mNameIdx) { - case 0: - mpPaneMgr = new CPaneMgr(mpScreen, 'n_all', 2, NULL); + case 0: { + mpPaneMgr = new CPaneMgr(mpScreen, MULTI_CHAR('n_all'), 2, NULL); mpPaneMgr->hide(); mpPaneMgr->setAlpha(0); - static u64 const corner_tag[4] = {'l_u_null', 'l_d_null', 'r_u_null', 'r_d_null'}; + static u64 const corner_tag[4] = {MULTI_CHAR('l_u_null'), MULTI_CHAR('l_d_null'), MULTI_CHAR('r_u_null'), MULTI_CHAR('r_d_null')}; for (int i = 0; i< 4; i++) { field_0x1C[i] = new CPaneMgr(mpScreen, corner_tag[i], 0, NULL); field_0x94[i] = mpScreen->search(corner_tag[i])->getTranslateX(); @@ -117,15 +117,15 @@ dSelect_cursor_c::dSelect_cursor_c(u8 param_0, f32 param_1, JKRArchive* param_2) mpPaneMgr->scale(param_1, param_1); field_0x14 = NULL; field_0x18 = NULL; - break; + } break; case 1: - mpPaneMgr = new CPaneMgr(mpScreen, 'n_all', 2, NULL); + mpPaneMgr = new CPaneMgr(mpScreen, MULTI_CHAR('n_all'), 2, NULL); mpPaneMgr->hide(); mpPaneMgr->setAlpha(0); mpPaneMgr->scale(param_1, param_1); - field_0x14 = new CPaneMgr(mpScreen, 'sel_po00', 0, NULL); + field_0x14 = new CPaneMgr(mpScreen, MULTI_CHAR('sel_po00'), 0, NULL); field_0x14->hide(); - field_0x18 = new CPaneMgr(mpScreen, 'n_all2', 2, NULL); + field_0x18 = new CPaneMgr(mpScreen, MULTI_CHAR('n_all2'), 2, NULL); break; case 2: mpPaneMgr = new CPaneMgr(mpScreen, 'Null', 2, NULL); @@ -136,7 +136,7 @@ dSelect_cursor_c::dSelect_cursor_c(u8 param_0, f32 param_1, JKRArchive* param_2) field_0x18 = NULL; break; case 3: - mpPaneMgr = new CPaneMgr(mpScreen, 'batsu', 2, NULL); + mpPaneMgr = new CPaneMgr(mpScreen, MULTI_CHAR('batsu'), 2, NULL); mpPaneMgr->hide(); mpPaneMgr->setAlpha(0); mpPaneMgr->scale(param_1, param_1); @@ -180,8 +180,8 @@ dSelect_cursor_c::dSelect_cursor_c(u8 param_0, f32 param_1, JKRArchive* param_2) field_0x40 = 0.0f; switch(mNameIdx) { case 1: - field_0x50 = mpScreen->search('ssel_ico')->getTranslateX(); - field_0x54 = mpScreen->search('ssel_ico')->getTranslateY(); + field_0x50 = mpScreen->search(MULTI_CHAR('ssel_ico'))->getTranslateX(); + field_0x54 = mpScreen->search(MULTI_CHAR('ssel_ico'))->getTranslateY(); break; case 0: case 2: @@ -394,8 +394,8 @@ void dSelect_cursor_c::setScale(f32 i_scale) { switch (mNameIdx) { case 1: - field_0x50 = mpScreen->search('ssel_ico')->getTranslateX(); - field_0x54 = mpScreen->search('ssel_ico')->getTranslateY(); + field_0x50 = mpScreen->search(MULTI_CHAR('ssel_ico'))->getTranslateX(); + field_0x54 = mpScreen->search(MULTI_CHAR('ssel_ico'))->getTranslateY(); break; case 0: case 2: @@ -466,14 +466,14 @@ void dSelect_cursor_c::setBpkAnimation(J2DAnmColor* param_0) { break; } case 2: - mpScreen->search('light')->setAnimation(param_0); - mpScreen->search('back_l')->setAnimation(param_0); + mpScreen->search(MULTI_CHAR('light'))->setAnimation(param_0); + mpScreen->search(MULTI_CHAR('back_l'))->setAnimation(param_0); break; case 3: - mpScreen->search('batsu')->setAnimation(param_0); + mpScreen->search(MULTI_CHAR('batsu'))->setAnimation(param_0); break; default: - mpScreen->search('light00')->setAnimation(param_0); + mpScreen->search(MULTI_CHAR('light00'))->setAnimation(param_0); break; } } @@ -482,7 +482,7 @@ void dSelect_cursor_c::setBtk0Animation(J2DAnmTextureSRTKey* param_0) { switch (mNameIdx) { case 0: { static u64 const tag_4197[8] = { - 'i_c_ld1', 'i_c_ld2', 'i_c_lu1', 'i_c_lu2', 'i_c_rd1', 'i_c_rd2', 'i_c_ru1', 'i_c_ru2', + MULTI_CHAR('i_c_ld1'), MULTI_CHAR('i_c_ld2'), MULTI_CHAR('i_c_lu1'), MULTI_CHAR('i_c_lu2'), MULTI_CHAR('i_c_rd1'), MULTI_CHAR('i_c_rd2'), MULTI_CHAR('i_c_ru1'), MULTI_CHAR('i_c_ru2'), }; for (int i = 0; i < 8; i++) { mpScreen->search(tag_4197[i])->setAnimation(param_0); @@ -490,14 +490,14 @@ void dSelect_cursor_c::setBtk0Animation(J2DAnmTextureSRTKey* param_0) { break; } case 1: { - static u64 const tag_4204[2] = {'gold01', 'gold02'}; + static u64 const tag_4204[2] = {MULTI_CHAR('gold01'), MULTI_CHAR('gold02')}; for (int i = 0; i < 2; i++) { mpScreen->search(tag_4204[i])->setAnimation(param_0); } break; } default: - mpScreen->search('gold01')->setAnimation(param_0); + mpScreen->search(MULTI_CHAR('gold01'))->setAnimation(param_0); break; } } @@ -526,15 +526,15 @@ void dSelect_cursor_c::setCursorAnimation() { field_0x84[i] = mParam2 * (field_0xa4[i] * ((1.0f - param3) + fVar2 * param3)); } - moveCenter(mpScreen->search('l_u_null'), field_0x74[0], field_0x84[0]); - moveCenter(mpScreen->search('l_d_null'), field_0x74[1], field_0x84[1]); - moveCenter(mpScreen->search('r_u_null'), field_0x74[2], field_0x84[2]); - moveCenter(mpScreen->search('r_d_null'), field_0x74[3], field_0x84[3]); + moveCenter(mpScreen->search(MULTI_CHAR('l_u_null')), field_0x74[0], field_0x84[0]); + moveCenter(mpScreen->search(MULTI_CHAR('l_d_null')), field_0x74[1], field_0x84[1]); + moveCenter(mpScreen->search(MULTI_CHAR('r_u_null')), field_0x74[2], field_0x84[2]); + moveCenter(mpScreen->search(MULTI_CHAR('r_d_null')), field_0x74[3], field_0x84[3]); } void dSelect_cursor_c::setBckAnimation(J2DAnmTransformKey* param_0) { - mpScreen->search('ssel_ico')->setAnimation((J2DAnmTransform*)param_0); + mpScreen->search(MULTI_CHAR('ssel_ico'))->setAnimation((J2DAnmTransform*)param_0); } void dSelect_cursor_c::moveCenter(J2DPane* i_pane, f32 i_x, f32 i_y) { diff --git a/src/d/d_timer.cpp b/src/d/d_timer.cpp index 4bb87da478..df66f37589 100644 --- a/src/d/d_timer.cpp +++ b/src/d/d_timer.cpp @@ -602,17 +602,17 @@ void dDlst_TimerScrnDraw_c::setScreen(s32 param_0, JKRArchive* i_archive) { mpGetInBck = (J2DAnmTransform*)J2DAnmLoaderDataBase::load( JKRGetNameResource("zelda_game_image_cow_get_in.bck", mpArchive)); - mpGetInParent = new CPaneMgr(mpGetInScreen, 'get_in_n', 2, NULL); + mpGetInParent = new CPaneMgr(mpGetInScreen, MULTI_CHAR('get_in_n'), 2, NULL); JUT_ASSERT(0, mpGetInParent != NULL); - mpGetInRoot = new CPaneMgr(mpGetInScreen, 'n_all', 0, NULL); + mpGetInRoot = new CPaneMgr(mpGetInScreen, MULTI_CHAR('n_all'), 0, NULL); JUT_ASSERT(0, mpGetInRoot != NULL); - mpGetInText = new CPaneMgr(mpGetInScreen, 'get_in', 0, NULL); + mpGetInText = new CPaneMgr(mpGetInScreen, MULTI_CHAR('get_in'), 0, NULL); JUT_ASSERT(0, mpGetInText != NULL); - static_cast(mpGetInScreen->search('get_in_s'))->setFont(mDoExt_getMesgFont()); - static_cast(mpGetInScreen->search('get_in'))->setFont(mDoExt_getMesgFont()); + static_cast(mpGetInScreen->search(MULTI_CHAR('get_in_s')))->setFont(mDoExt_getMesgFont()); + static_cast(mpGetInScreen->search(MULTI_CHAR('get_in')))->setFont(mDoExt_getMesgFont()); for (int i = 0; i < 51; i++) { m_getin_info[i].bck_frame = 0.0f; @@ -639,40 +639,40 @@ void dDlst_TimerScrnDraw_c::setScreenBase() { mpParent = NULL; - mpCowParent = new CPaneMgr(mpScreen, 'cow_n', 2, NULL); + mpCowParent = new CPaneMgr(mpScreen, MULTI_CHAR('cow_n'), 2, NULL); JUT_ASSERT(0, mpCowParent != NULL); mpCowParent->setAlphaRate(0.0f); - mpTimeParent = new CPaneMgr(mpScreen, 'time_n', 2, NULL); + mpTimeParent = new CPaneMgr(mpScreen, MULTI_CHAR('time_n'), 2, NULL); JUT_ASSERT(0, mpTimeParent != NULL); mpTimeParent->setAlphaRate(0.0f); - mpImageParent = new CPaneMgr(mpScreen, 'cow_i_n', 2, NULL); + mpImageParent = new CPaneMgr(mpScreen, MULTI_CHAR('cow_i_n'), 2, NULL); JUT_ASSERT(0, mpImageParent != NULL); mpImageParent->setAlphaRate(0.0f); - field_0x5c[0][0] = mpScreen->search('c_n_2'); - field_0x5c[0][1] = mpScreen->search('c_n_2_s'); - field_0x5c[1][0] = mpScreen->search('c_n_1'); - field_0x5c[1][1] = mpScreen->search('c_n_1_s'); + field_0x5c[0][0] = mpScreen->search(MULTI_CHAR('c_n_2')); + field_0x5c[0][1] = mpScreen->search(MULTI_CHAR('c_n_2_s')); + field_0x5c[1][0] = mpScreen->search(MULTI_CHAR('c_n_1')); + field_0x5c[1][1] = mpScreen->search(MULTI_CHAR('c_n_1_s')); - field_0x6c[0] = static_cast(mpScreen->search('c_n_4')); - field_0x6c[1] = static_cast(mpScreen->search('c_n_4_s')); - field_0x74[0] = static_cast(mpScreen->search('c_n_3')); - field_0x74[1] = static_cast(mpScreen->search('c_n_3_s')); + field_0x6c[0] = static_cast(mpScreen->search(MULTI_CHAR('c_n_4'))); + field_0x6c[1] = static_cast(mpScreen->search(MULTI_CHAR('c_n_4_s'))); + field_0x74[0] = static_cast(mpScreen->search(MULTI_CHAR('c_n_3'))); + field_0x74[1] = static_cast(mpScreen->search(MULTI_CHAR('c_n_3_s'))); - mTimerText[0][0] = mpScreen->search('t_n_6'); - mTimerText[0][1] = mpScreen->search('t_n_6_s'); - mTimerText[1][0] = mpScreen->search('t_n_5'); - mTimerText[1][1] = mpScreen->search('t_n_5_s'); - mTimerText[2][0] = mpScreen->search('t_n_4'); - mTimerText[2][1] = mpScreen->search('t_n_4_s'); - mTimerText[3][0] = mpScreen->search('t_n_3'); - mTimerText[3][1] = mpScreen->search('t_n_3_s'); - mTimerText[4][0] = mpScreen->search('t_n_2'); - mTimerText[4][1] = mpScreen->search('t_n_2_s'); - mTimerText[5][0] = mpScreen->search('t_n_1'); - mTimerText[5][1] = mpScreen->search('t_n_1_s'); + mTimerText[0][0] = mpScreen->search(MULTI_CHAR('t_n_6')); + mTimerText[0][1] = mpScreen->search(MULTI_CHAR('t_n_6_s')); + mTimerText[1][0] = mpScreen->search(MULTI_CHAR('t_n_5')); + mTimerText[1][1] = mpScreen->search(MULTI_CHAR('t_n_5_s')); + mTimerText[2][0] = mpScreen->search(MULTI_CHAR('t_n_4')); + mTimerText[2][1] = mpScreen->search(MULTI_CHAR('t_n_4_s')); + mTimerText[3][0] = mpScreen->search(MULTI_CHAR('t_n_3')); + mTimerText[3][1] = mpScreen->search(MULTI_CHAR('t_n_3_s')); + mTimerText[4][0] = mpScreen->search(MULTI_CHAR('t_n_2')); + mTimerText[4][1] = mpScreen->search(MULTI_CHAR('t_n_2_s')); + mTimerText[5][0] = mpScreen->search(MULTI_CHAR('t_n_1')); + mTimerText[5][1] = mpScreen->search(MULTI_CHAR('t_n_1_s')); } void dDlst_TimerScrnDraw_c::setScreenBoatRace() { @@ -683,21 +683,21 @@ void dDlst_TimerScrnDraw_c::setScreenBoatRace() { JUT_ASSERT(0, fg != false); dPaneClass_showNullPane(mpScreen); - mpParent = new CPaneMgr(mpScreen, 'ta_co_n', 2, NULL); + mpParent = new CPaneMgr(mpScreen, MULTI_CHAR('ta_co_n'), 2, NULL); JUT_ASSERT(0, mpParent != NULL); - mpCowParent = new CPaneMgr(mpScreen, 'num_n', 2, NULL); + mpCowParent = new CPaneMgr(mpScreen, MULTI_CHAR('num_n'), 2, NULL); JUT_ASSERT(0, mpCowParent != NULL); mpCowParent->setAlphaRate(0.0f); mpTimeParent = NULL; - mpImageParent = new CPaneMgr(mpScreen, 'target_n', 2, NULL); + mpImageParent = new CPaneMgr(mpScreen, MULTI_CHAR('target_n'), 2, NULL); JUT_ASSERT(0, mpImageParent != NULL); mpImageParent->setAlphaRate(0.0f); - mpScreen->search('w_target')->hide(); - mpScreen->search('target')->show(); + mpScreen->search(MULTI_CHAR('w_target'))->hide(); + mpScreen->search(MULTI_CHAR('target'))->show(); for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { @@ -705,9 +705,9 @@ void dDlst_TimerScrnDraw_c::setScreenBoatRace() { } } - field_0x6c[0] = static_cast(mpScreen->search('num_1')); + field_0x6c[0] = static_cast(mpScreen->search(MULTI_CHAR('num_1'))); field_0x6c[1] = NULL; - field_0x74[0] = static_cast(mpScreen->search('num_0')); + field_0x74[0] = static_cast(mpScreen->search(MULTI_CHAR('num_0'))); field_0x74[1] = NULL; for (int i = 0; i < 6; i++) { @@ -727,25 +727,25 @@ void dDlst_TimerScrnDraw_c::setScreenRider() { mpParent = NULL; - mpCowParent = new CPaneMgr(mpScreen, 'num_n', 2, NULL); + mpCowParent = new CPaneMgr(mpScreen, MULTI_CHAR('num_n'), 2, NULL); JUT_ASSERT(0, mpCowParent != NULL); mpCowParent->setAlphaRate(0.0f); mpTimeParent = NULL; - mpImageParent = new CPaneMgr(mpScreen, 'rid_i_n', 2, NULL); + mpImageParent = new CPaneMgr(mpScreen, MULTI_CHAR('rid_i_n'), 2, NULL); JUT_ASSERT(0, mpImageParent != NULL); mpImageParent->setAlphaRate(0.0f); - field_0x5c[0][0] = mpScreen->search('n_n_2'); - field_0x5c[0][1] = mpScreen->search('n_n_2_s'); - field_0x5c[1][0] = mpScreen->search('n_n_1'); - field_0x5c[1][1] = mpScreen->search('n_n_1_s'); + field_0x5c[0][0] = mpScreen->search(MULTI_CHAR('n_n_2')); + field_0x5c[0][1] = mpScreen->search(MULTI_CHAR('n_n_2_s')); + field_0x5c[1][0] = mpScreen->search(MULTI_CHAR('n_n_1')); + field_0x5c[1][1] = mpScreen->search(MULTI_CHAR('n_n_1_s')); - field_0x6c[0] = static_cast(mpScreen->search('n_n_4')); - field_0x6c[1] = static_cast(mpScreen->search('n_n_4_s')); - field_0x74[0] = static_cast(mpScreen->search('n_n_3')); - field_0x74[1] = static_cast(mpScreen->search('n_n_3_s')); + field_0x6c[0] = static_cast(mpScreen->search(MULTI_CHAR('n_n_4'))); + field_0x6c[1] = static_cast(mpScreen->search(MULTI_CHAR('n_n_4_s'))); + field_0x74[0] = static_cast(mpScreen->search(MULTI_CHAR('n_n_3'))); + field_0x74[1] = static_cast(mpScreen->search(MULTI_CHAR('n_n_3_s'))); for (int i = 0; i < 6; i++) { for (int j = 0; j < 2; j++) { @@ -764,10 +764,10 @@ void dDlst_TimerScrnDraw_c::hideDenominator() { } if (field_0x3C8 == 8) { - mpScreen->search('n_sl_s')->hide(); + mpScreen->search(MULTI_CHAR('n_sl_s'))->hide(); mpScreen->search('n_sl')->hide(); } else { - J2DPane* sl_s = mpScreen->search('c_sl_s'); + J2DPane* sl_s = mpScreen->search(MULTI_CHAR('c_sl_s')); J2DPane* sl = mpScreen->search('c_sl'); if (sl_s != NULL) { @@ -1220,8 +1220,8 @@ BOOL dDlst_TimerScrnDraw_c::closeAnime() { int dDlst_TimerScrnDraw_c::createGetIn(cXyz i_pos) { char string[104]; dMeter2Info_getString(0x3E4, string, NULL); // "GOAT IN!" - strcpy(static_cast(mpGetInScreen->search('get_in_s'))->getStringPtr(), string); - strcpy(static_cast(mpGetInScreen->search('get_in'))->getStringPtr(), string); + strcpy(static_cast(mpGetInScreen->search(MULTI_CHAR('get_in_s')))->getStringPtr(), string); + strcpy(static_cast(mpGetInScreen->search(MULTI_CHAR('get_in')))->getStringPtr(), string); if (mCowID < 50) { m_getin_info[mCowID].bck_frame = 40.0f; @@ -1309,8 +1309,8 @@ int dDlst_TimerScrnDraw_c::createGetIn(cXyz i_pos) { s32 dDlst_TimerScrnDraw_c::createStart(u16 i_messageID) { char string[112]; dMeter2Info_getString(i_messageID, string, NULL); - strcpy(static_cast(mpGetInScreen->search('get_in_s'))->getStringPtr(), string); - strcpy(static_cast(mpGetInScreen->search('get_in'))->getStringPtr(), string); + strcpy(static_cast(mpGetInScreen->search(MULTI_CHAR('get_in_s')))->getStringPtr(), string); + strcpy(static_cast(mpGetInScreen->search(MULTI_CHAR('get_in')))->getStringPtr(), string); if (mCowID == 0) { m_getin_info[mCowID].bck_frame = 40.0f; diff --git a/src/m_Do/m_Do_graphic.cpp b/src/m_Do/m_Do_graphic.cpp index 7aed86fb99..6ee5512042 100644 --- a/src/m_Do/m_Do_graphic.cpp +++ b/src/m_Do/m_Do_graphic.cpp @@ -1090,7 +1090,7 @@ void mDoGph_gInf_c::bloom_c::create() { mPoint = 128; mBlureSize = 64; mBlureRatio = 128; - mBlendColor = (GXColor){255, 255, 255, 255}; + mBlendColor = COMPOUND_LITERAL(GXColor){255, 255, 255, 255}; } } diff --git a/src/m_Do/m_Do_lib.cpp b/src/m_Do/m_Do_lib.cpp index 9b68a1a1c3..ab680abb55 100644 --- a/src/m_Do/m_Do_lib.cpp +++ b/src/m_Do/m_Do_lib.cpp @@ -120,11 +120,11 @@ void mDoLib_pos2camera(Vec* src, Vec* dst) { static void dummy() { J3DAlphaComp* alphaComp = NULL; - alphaComp->setAlphaCompInfo((J3DAlphaCompInfo){}); + alphaComp->setAlphaCompInfo(COMPOUND_LITERAL(J3DAlphaCompInfo){}); J3DPEBlock* peBlock = NULL; - peBlock->getZMode()->setZModeInfo((J3DZModeInfo){}); + peBlock->getZMode()->setZModeInfo(COMPOUND_LITERAL(J3DZModeInfo){}); dComIfGd_getInvViewMtx(); J3DMaterial* mat = NULL; mat->getTevKColor(0); - mDoLib_clipper::clip(j3dSys.getViewMtx(), (Vec){}, 0.0f); + mDoLib_clipper::clip(j3dSys.getViewMtx(), COMPOUND_LITERAL(Vec){}, 0.0f); } From 5d6aa01e6ece01d69fe66df17698affc56e9d4f6 Mon Sep 17 00:00:00 2001 From: Jeffrey Crowell Date: Fri, 16 Jan 2026 17:07:48 -0800 Subject: [PATCH 03/46] Fix linker errors. Stubbing out all OS* functions to stubs.cpp, these will likely have to be replaced with the operating system's primitives for locking/heaps/threads/etc. Moved some generic globals into globals.cpp, not sure where they're actually to be used. Stub DSP functions Stub JSUMemoryOutputStream, JORServer, Z2Audio mDoExt stubs add memcpy add some more stubs, add extras c++ mangled functions add extras.cpp AR/AQ stubbing stub DVD stub CARD more stubs, more extras add missing mtx functions to dusk file finish mtx stub GX KPAD and LC, also do pragma marks for better visualization finish mtx, add a few more stubs gf/wpad/vi translate some matrix math from ppc to C jorserver/debugpad/fap/dmsgobject add m_Do_ext functions from debug block to separate file make small janges to JSystem, does this need upstreaming reorg DVD stubs reorganize stubs by mark --- CMakeLists.txt | 7 +- include/JSystem/JAudio2/JASGadget.h | 5 + src/dusk/J3DTransforms_C.cpp | 25 + src/dusk/extras.c | 12 + src/dusk/extras.cpp | 18 + src/dusk/globals.cpp | 21 + src/dusk/m_Do_ext_dusk.cpp | 565 ++++++++ src/dusk/mtx.cpp | 730 ++++++++++ src/dusk/stubs.cpp | 2080 ++++++++++++++++----------- src/m_Do/m_Do_main.cpp | 9 +- 10 files changed, 2621 insertions(+), 851 deletions(-) create mode 100644 src/dusk/J3DTransforms_C.cpp create mode 100644 src/dusk/extras.cpp create mode 100644 src/dusk/globals.cpp create mode 100644 src/dusk/m_Do_ext_dusk.cpp create mode 100644 src/dusk/mtx.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 437f138699..4f7ff4995e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1347,6 +1347,11 @@ set(DUSK_FILES src/dusk/imgui.cpp src/dusk/stubs.cpp src/dusk/extras.c + src/dusk/extras.cpp + src/dusk/globals.cpp + src/dusk/mtx.cpp + src/dusk/J3DTransforms_C.cpp + src/dusk/m_Do_ext_dusk.cpp ) source_group("dolzel" FILES ${DOLZEL_FILES} ${Z2AUDIOLIB_FILES} ${SSYSTEM_FILES} ${JSYSTEM_FILES} ${REL_FILES}) @@ -1357,7 +1362,7 @@ target_compile_definitions(game PRIVATE TARGET_PC VERSION=0 NDEBUG=1 NDEBUG_DEFI # TODO: version handling for res includes set(DUSK_TP_VERSION GZ2E01) target_include_directories(game PRIVATE include src assets/${DUSK_TP_VERSION} ${CMAKE_BINARY_DIR}/../${DUSK_TP_VERSION}/include) -target_link_libraries(game PRIVATE aurora::core aurora::gx aurora::si aurora::vi aurora::pad) +target_link_libraries(game PRIVATE aurora::core aurora::gx aurora::si aurora::vi aurora::pad aurora::mtx) add_executable(dusk src/dusk/main.cpp) target_compile_definitions(dusk PRIVATE TARGET_PC VERSION=0) diff --git a/include/JSystem/JAudio2/JASGadget.h b/include/JSystem/JAudio2/JASGadget.h index 718ce02069..087e8028cd 100644 --- a/include/JSystem/JAudio2/JASGadget.h +++ b/include/JSystem/JAudio2/JASGadget.h @@ -33,6 +33,11 @@ public: static T* sInstance; }; +#ifndef __MWERKS__ +template +T* JASGlobalInstance::sInstance; +#endif + /** * @ingroup jsystem-jaudio * diff --git a/src/dusk/J3DTransforms_C.cpp b/src/dusk/J3DTransforms_C.cpp new file mode 100644 index 0000000000..efdd2793cd --- /dev/null +++ b/src/dusk/J3DTransforms_C.cpp @@ -0,0 +1,25 @@ +#include +#include + +// translated to C, should be correct, but not tested. + +void J3DPSMtxArrayConcat(Mtx mA, Mtx mB, Mtx mAB, u32 count) { + for (uint32_t i = 0; i < count; i++) { + const float* b = (const float*)mB[i]; + float* res = (float*)mAB[i]; + + for (int row = 0; row < 3; row++) { + float a0 = mA[row][0]; + float a1 = mA[row][1]; + float a2 = mA[row][2]; + float a3 = mA[row][3]; + + // Standard Matrix Multiply for 3x4 * 3x4 (with implicit 4th row [0,0,0,1]) + res[row * 4 + 0] = a0 * b[0] + a1 * b[4] + a2 * b[8]; + res[row * 4 + 1] = a0 * b[1] + a1 * b[5] + a2 * b[9]; + res[row * 4 + 2] = a0 * b[2] + a1 * b[6] + a2 * b[10]; + // The 4th column includes the translation + res[row * 4 + 3] = a0 * b[3] + a1 * b[7] + a2 * b[11] + a3; + } + } +} diff --git a/src/dusk/extras.c b/src/dusk/extras.c index 1dcb6ae49f..d4af760430 100644 --- a/src/dusk/extras.c +++ b/src/dusk/extras.c @@ -1,5 +1,8 @@ #include "dusk/extras.h" #include +#include +#include +#include int stricmp(const char* str1, const char* str2) { char a_var; @@ -43,3 +46,12 @@ int strnicmp(const char* str1, const char* str2, int n) { return 0; } + + +void *_memcpy(void* dest, void const* src, int n) { + return memcpy(dest, src, n); +} + +void DCZeroRange(void* addr, uint32_t nBytes) { + bzero(addr, nBytes); +} diff --git a/src/dusk/extras.cpp b/src/dusk/extras.cpp new file mode 100644 index 0000000000..f13d3e3440 --- /dev/null +++ b/src/dusk/extras.cpp @@ -0,0 +1,18 @@ +// C++ Mangled version of extras.c +#include +#include + +void *__memcpy(void* dest, void const* src, int n) { + return memcpy(dest, src, n); +} + +void __dcbz(void* addr, int offset) { + // Gekko cache lines are 32 bytes. + // dcbz usually requires addr to be 32-byte aligned. + memset((char*)addr + offset, 0, 32); +} + +int __cntlzw(unsigned int val) { + if (val == 0) return 32; // PowerPC returns 32 if the input is 0 + return __builtin_clz(val); +} diff --git a/src/dusk/globals.cpp b/src/dusk/globals.cpp new file mode 100644 index 0000000000..d82a680fcc --- /dev/null +++ b/src/dusk/globals.cpp @@ -0,0 +1,21 @@ +#include +#include +#include +u8 g_printOtherHeapDebug; + +dKankyo_HIO_c g_kankyoHIO; + +dDebugPad_c dDebugPad; + +u32 __OSFpscrEnableBits; + +GDLObj* __GDCurrentDL; + +// DSP +#include +DSPTaskInfo* __DSP_first_task; +DSPTaskInfo* __DSP_curr_task; + +// mDo_dvd +#include +u8 mDoDvdThd::DVDLogoMode; diff --git a/src/dusk/m_Do_ext_dusk.cpp b/src/dusk/m_Do_ext_dusk.cpp new file mode 100644 index 0000000000..7d16d08439 --- /dev/null +++ b/src/dusk/m_Do_ext_dusk.cpp @@ -0,0 +1,565 @@ +// XXX Ripped these from a DEBUG block, rather than changing defines. +/** + * m_Do_ext.cpp + * Model, Animation, and Heap Functions + */ + +#include "d/dolzel.h" // IWYU pragma: keep + +#include +#include +#include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h" +#include "JSystem/J3DGraphBase/J3DDrawBuffer.h" +#include "JSystem/J3DGraphBase/J3DMaterial.h" +#include "JSystem/J3DGraphLoader/J3DMaterialFactory.h" +#include "JSystem/JKernel/JKRAssertHeap.h" +#include "JSystem/JKernel/JKRExpHeap.h" +#include "JSystem/JKernel/JKRSolidHeap.h" +#include "JSystem/JUtility/JUTCacheFont.h" +#include "JSystem/JUtility/JUTResFont.h" +#include "Z2AudioLib/Z2Creature.h" +#include "d/d_com_inf_game.h" +#include "global.h" +#include "m_Do/m_Do_ext.h" +#include "m_Do/m_Do_main.h" +#include "m_Do/m_Do_mtx.h" +#include + +mDoExt_cube8pPacket::mDoExt_cube8pPacket(cXyz* i_points, const GXColor& i_color) { + cXyz* pnt_array = mPoints; + + for (int i = 0; i < 8; i++) { + *(pnt_array)++ = *(i_points)++; + } + + DCStoreRangeNoSync(mPoints, sizeof(cXyz) * 8); + mColor = i_color; +} + +void drawCube(MtxP mtx, cXyz* pos, const GXColor& color) { + GXSetArray(GX_VA_POS, pos, sizeof(cXyz)); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_INDEX8); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP, + GX_AF_NONE); + GXSetNumTexGens(0); + GXSetNumTevStages(1); + GXSetTevColor(GX_TEVREG0, color); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); + GXSetCullMode(GX_CULL_BACK); + GXSetClipMode(GX_CLIP_ENABLE); + GXLoadPosMtxImm(mtx, 0); + GXSetCurrentMtx(0); + + GXBegin(GX_TRIANGLESTRIP, GX_VTXFMT0, 14); + GXPosition1x8(4); + GXPosition1x8(6); + GXPosition1x8(5); + GXPosition1x8(7); + GXPosition1x8(3); + GXPosition1x8(6); + GXPosition1x8(2); + GXPosition1x8(4); + GXPosition1x8(0); + GXPosition1x8(5); + GXPosition1x8(1); + GXPosition1x8(3); + GXPosition1x8(0); + GXPosition1x8(2); + GXEnd(); +} + +void mDoExt_cube8pPacket::draw() { + drawCube(j3dSys.getViewMtx(), mPoints, mColor); +} + +mDoExt_cubePacket::mDoExt_cubePacket(cXyz& i_position, cXyz& i_size, csXyz& i_angle, const GXColor& i_color) { + mPosition = i_position; + mSize = i_size; + mAngle = i_angle; + mColor = i_color; +} + +void mDoExt_cubePacket::draw() { + static cXyz l_pos[8] = { + cXyz(-1.0f, 1.0f, -1.0f), cXyz(1.0f, 1.0f, -1.0f), cXyz(-1.0f, 1.0f, 1.0f), + cXyz(1.0f, 1.0f, 1.0f), cXyz(-1.0f, -1.0f, -1.0f), cXyz(1.0f, -1.0f, -1.0f), + cXyz(-1.0f, -1.0f, 1.0f), cXyz(1.0f, -1.0f, 1.0f), + }; + + mDoMtx_stack_c::transS(mPosition.x, mPosition.y, mPosition.z); + mDoMtx_stack_c::XYZrotM(mAngle.x, mAngle.y, mAngle.z); + mDoMtx_stack_c::scaleM(mSize.x, mSize.y, mSize.z); + mDoMtx_stack_c::revConcat(j3dSys.getViewMtx()); + drawCube(mDoMtx_stack_c::get(), l_pos, mColor); +} + +mDoExt_quadPacket::mDoExt_quadPacket(cXyz* i_points, const GXColor& i_color, u8 i_clipZ) { + cXyz* pnt_array = mPoints; + + for (int i = 0; i < 4; i++) { + *(pnt_array)++ = *(i_points)++; + } + + DCStoreRangeNoSync(mPoints, sizeof(cXyz) * 4); + mColor = i_color; + mClipZ = i_clipZ; +} + +void mDoExt_quadPacket::draw() { + GXSetArray(GX_VA_POS, mPoints, sizeof(cXyz)); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_INDEX8); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP, + GX_AF_NONE); + GXSetNumTexGens(0); + GXSetNumTevStages(1); + GXSetTevColor(GX_TEVREG0, mColor); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + + if (mClipZ) { + GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); + } else { + GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); + } + + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); + GXSetCullMode(GX_CULL_BACK); + GXSetClipMode(GX_CLIP_ENABLE); + GXLoadPosMtxImm(j3dSys.getViewMtx(), 0); + GXSetCurrentMtx(0); + + GXBegin(GX_QUADS, GX_VTXFMT0, 4); + GXPosition1x8(0); + GXPosition1x8(1); + GXPosition1x8(2); + GXPosition1x8(3); + GXEnd(); +} + +mDoExt_trianglePacket::mDoExt_trianglePacket(cXyz* i_points, const GXColor& i_color, u8 i_clipZ) { + cXyz* pnt_array = mPoints; + + for (int i = 0; i < 3; i++) { + *(pnt_array)++ = *(i_points)++; + } + + DCStoreRangeNoSync(mPoints, sizeof(cXyz) * 3); + mColor = i_color; + mClipZ = i_clipZ; +} + +void mDoExt_trianglePacket::draw() { + j3dSys.reinitGX(); + + GXSetArray(GX_VA_POS, mPoints, sizeof(cXyz)); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_INDEX8); + GXLoadPosMtxImm(j3dSys.getViewMtx(), 0); + GXSetCurrentMtx(0); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP, GX_AF_NONE); + GXSetNumTexGens(0); + GXSetNumTevStages(1); + GXSetTevColor(GX_TEVREG0, mColor); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + GXSetZCompLoc(GX_ENABLE); + + if (mClipZ) { + GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); + } else { + GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); + } + + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); + GXSetFog(GX_FOG_NONE, 0.0f, 0.0f, 0.0f, 0.0f, g_clearColor); + GXSetFogRangeAdj(GX_DISABLE, 0, NULL); + GXSetCullMode(GX_CULL_NONE); + GXSetDither(GX_ENABLE); + GXSetClipMode(GX_CLIP_ENABLE); + GXSetNumIndStages(0); + + GXBegin(GX_TRIANGLES, GX_VTXFMT0, 3); + GXPosition1x8(0); + GXPosition1x8(1); + GXPosition1x8(2); + GXEnd(); + + J3DShape::resetVcdVatCache(); +} + +mDoExt_linePacket::mDoExt_linePacket(cXyz& i_start, cXyz& i_end, const GXColor& i_color, u8 i_clipZ, u8 i_width) { + mStart = i_start; + mEnd = i_end; + mColor = i_color; + mClipZ = i_clipZ; + mWidth = i_width; +} + +void mDoExt_linePacket::draw() { + j3dSys.reinitGX(); + + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXLoadPosMtxImm(j3dSys.getViewMtx(), 0); + GXSetCurrentMtx(0); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP, GX_AF_NONE); + GXSetNumTexGens(0); + GXSetNumTevStages(1); + GXSetTevColor(GX_TEVREG0, mColor); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + GXSetZCompLoc(GX_ENABLE); + + if (mClipZ) { + GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); + } else { + GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); + } + + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); + GXSetFog(GX_FOG_NONE, 0.0f, 0.0f, 0.0f, 0.0f, g_clearColor); + GXSetFogRangeAdj(GX_DISABLE, 0, NULL); + GXSetCullMode(GX_CULL_NONE); + GXSetDither(GX_ENABLE); + GXSetClipMode(GX_CLIP_ENABLE); + GXSetNumIndStages(0); + GXSetLineWidth(mWidth, GX_TO_ZERO); + + GXBegin(GX_LINES, GX_VTXFMT0, 2); + GXPosition3f32(mStart.x, mStart.y, mStart.z); + GXPosition3f32(mEnd.x, mEnd.y, mEnd.z); + GXEnd(); + + J3DShape::resetVcdVatCache(); +} + +mDoExt_ArrowPacket::mDoExt_ArrowPacket(cXyz& i_position, cXyz& param_1, const GXColor& i_color, u8 i_clipZ, u8 i_lineWidth) { + mStart = i_position; + mEnd = param_1; + mColor = i_color; + mClipZ = i_clipZ; + mLineWidth = i_lineWidth; +} + +void mDoExt_ArrowPacket::draw() { + Mtx sp28; + cXyz sp18; + + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP, GX_AF_NONE); + GXSetNumTexGens(0); + GXSetNumTevStages(1); + GXSetTevColor(GX_TEVREG0, mColor); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + + if (mClipZ) { + GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); + } else { + GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); + } + + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); + GXSetCullMode(GX_CULL_NONE); + GXSetClipMode(GX_CLIP_ENABLE); + GXSetLineWidth(mLineWidth, GX_TO_ZERO); + + sp18 = mEnd - mStart; + MtxTrans(mStart.x, mStart.y, mStart.z, 0); + cMtx_YrotM(*calc_mtx, sp18.atan2sX_Z()); + cMtx_XrotM(*calc_mtx, cM_atan2s(JMAFastSqrt(SQUARE(sp18.x) + SQUARE(sp18.z)), sp18.y)); + cMtx_concat(j3dSys.getViewMtx(), *calc_mtx, sp28); + + GXLoadPosMtxImm(sp28, 0); + GXSetCurrentMtx(0); + + GXBegin(GX_LINES, GX_VTXFMT0, 2); + GXPosition3f32(0.0f, 0.0f, 0.0f); + GXPosition3f32(0.0f, sp18.abs(), 0.0f); + GXEnd(); + + f32 var_f29 = sp18.abs(); + f32 var_f31 = var_f29 * 0.1f; + f32 var_f30 = var_f29 * 0.8f; + + GXBegin(GX_TRIANGLEFAN, GX_VTXFMT0, 6); + GXPosition3f32(0.0f, var_f29, 0.0f); + GXPosition3f32(0.0f, var_f30, var_f31); + GXPosition3f32(var_f31, var_f30, 0.0f); + GXPosition3f32(0.0f, var_f30, -var_f31); + GXPosition3f32(-var_f31, var_f30, 0.0f); + GXPosition3f32(0.0f, var_f30, var_f31); + GXEnd(); +} + +mDoExt_pointPacket::mDoExt_pointPacket(cXyz& i_position, const GXColor& i_color, u8 i_clipZ, u8 i_lineWidth) { + mPosition = i_position; + mColor = i_color; + mClipZ = i_clipZ; + mLineWidth = i_lineWidth; +} + +void mDoExt_pointPacket::draw() { + j3dSys.reinitGX(); + + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP, GX_AF_NONE); + GXSetNumTexGens(0); + GXSetNumTevStages(1); + GXSetTevColor(GX_TEVREG0, mColor); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + + if (mClipZ) { + GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); + } else { + GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); + } + + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); + GXSetCullMode(GX_CULL_NONE); + GXSetClipMode(GX_CLIP_ENABLE); + GXSetPointSize(mLineWidth, GX_TO_ZERO); + + GXLoadPosMtxImm(j3dSys.getViewMtx(), 0); + GXSetCurrentMtx(0); + + GXBegin(GX_POINTS, GX_VTXFMT0, 1); + GXPosition3f32(mPosition.x, mPosition.y, mPosition.z); + GXEnd(); + + j3dSys.reinitGX(); + J3DShape::resetVcdVatCache(); +} + +mDoExt_circlePacket::mDoExt_circlePacket(cXyz& i_position, f32 i_radius, const GXColor& i_color, u8 i_clipZ, u8 i_lineWidth) { + mPosition = i_position; + mRadius = i_radius; + mColor = i_color; + mClipZ = i_clipZ; + mLineWidth = i_lineWidth; +} + +void mDoExt_circlePacket::draw() { + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP, GX_AF_NONE); + GXSetNumTexGens(0); + GXSetNumTevStages(1); + GXSetTevColor(GX_TEVREG0, mColor); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + + if (mClipZ) { + GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); + } else { + GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); + } + + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); + GXSetCullMode(GX_CULL_NONE); + GXSetClipMode(GX_CLIP_ENABLE); + GXSetLineWidth(mLineWidth, GX_TO_ZERO); + GXLoadPosMtxImm(j3dSys.getViewMtx(), 0); + GXSetCurrentMtx(0); + + cXyz sp38; + cXyz sp44; + int numEdges = 36; + sp38.y = sp44.y = mPosition.y; + + GXBegin(GX_LINES, GX_VTXFMT0, numEdges * 2); + for (int i = 0; i < numEdges; i++) { + sp38.x = cM_fcos((i * 6.2831855f) / numEdges) * mRadius; + sp38.z = cM_fsin((i * 6.2831855f) / numEdges) * mRadius; + + sp44.x = cM_fcos(((i + 1) * 6.2831855f) / numEdges) * mRadius; + sp44.z = cM_fsin(((i + 1) * 6.2831855f) / numEdges) * mRadius; + + sp38.x += mPosition.x; + sp38.z += mPosition.z; + sp44.x += mPosition.x; + sp44.z += mPosition.z; + GXPosition3f32(sp38.x, sp38.y, sp38.z); + GXPosition3f32(sp44.x, sp44.y, sp44.z); + } + GXEnd(); +} + +mDoExt_spherePacket::mDoExt_spherePacket(cXyz& i_position, f32 i_size, const GXColor& i_color, u8 i_clipZ) { + mPosition = i_position; + mSize = i_size; + mColor = i_color; + mClipZ = i_clipZ; +} + +void mDoExt_spherePacket::draw() { + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0, GX_ENABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT0, GX_DF_CLAMP, GX_AF_NONE); + GXSetNumTexGens(0); + GXSetNumTevStages(1); + GXSetTevColor(GX_TEVREG0, mColor); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_RASC, GX_CC_C0, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + + if (mClipZ) { + GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); + } else { + GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); + } + + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); + GXSetCullMode(GX_CULL_BACK); + GXSetClipMode(GX_CLIP_ENABLE); + + mDoMtx_stack_c::copy(j3dSys.getViewMtx()); + mDoMtx_stack_c::transM(mPosition.x, mPosition.y, mPosition.z); + mDoMtx_stack_c::scaleM(mSize, mSize, mSize); + + GXLoadPosMtxImm(mDoMtx_stack_c::get(), 0); + mDoMtx_stack_c::inverseTranspose(); + + GXLoadNrmMtxImm(mDoMtx_stack_c::get(), 0); + GXSetCurrentMtx(0); + + GXDrawSphere(8, 8); +} + +mDoExt_cylinderPacket::mDoExt_cylinderPacket(cXyz& i_position, f32 i_radius, f32 i_height, const GXColor& i_color, u8 i_clipZ) { + mPosition = i_position; + mRadius = i_radius; + mHeight = i_height; + mColor = i_color; + mClipZ = i_clipZ; +} + +void mDoExt_cylinderPacket::draw() { + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0, GX_ENABLE, GX_SRC_REG, GX_SRC_REG, 1, GX_DF_CLAMP, GX_AF_NONE); + GXSetNumTexGens(0); + GXSetNumTevStages(1); + GXSetTevColor(GX_TEVREG0, mColor); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_RASC, GX_CC_C0, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + + if (mClipZ) { + GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); + } else { + GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); + } + + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); + GXSetCullMode(GX_CULL_BACK); + GXSetClipMode(GX_CLIP_ENABLE); + + f32 var_f31 = mHeight * 0.5f; + + mDoMtx_stack_c::copy(j3dSys.getViewMtx()); + mDoMtx_stack_c::transM(mPosition.x, mPosition.y + var_f31, mPosition.z); + mDoMtx_stack_c::scaleM(mRadius, var_f31, mRadius); + mDoMtx_stack_c::XrotM(0x4000); + + GXLoadPosMtxImm(mDoMtx_stack_c::get(), 0); + mDoMtx_stack_c::inverseTranspose(); + + GXLoadNrmMtxImm(mDoMtx_stack_c::get(), 0); + GXSetCurrentMtx(0); + GXDrawCylinder(8); +} + +mDoExt_cylinderMPacket::mDoExt_cylinderMPacket(Mtx i_mtx, const GXColor& i_color, u8 i_clipZ) { + cMtx_copy(i_mtx, mMatrix); + mColor = i_color; + mClipZ = i_clipZ; +} + +void mDoExt_cylinderMPacket::draw() { + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0, GX_ENABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT0, GX_DF_CLAMP, GX_AF_NONE); + GXSetNumTexGens(0); + GXSetNumTevStages(1); + GXSetTevColor(GX_TEVREG0, mColor); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_RASC, GX_CC_C0, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + + if (mClipZ) { + GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); + } else { + GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); + } + + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); + GXSetCullMode(GX_CULL_BACK); + GXSetClipMode(GX_CLIP_ENABLE); + + cMtx_concat(j3dSys.getViewMtx(), mMatrix, mMatrix); + + GXLoadPosMtxImm(mMatrix, 0); + cMtx_inverseTranspose(mMatrix, mMatrix); + + GXLoadNrmMtxImm(mMatrix, 0); + GXSetCurrentMtx(0); + + GXDrawCylinder(8); +} diff --git a/src/dusk/mtx.cpp b/src/dusk/mtx.cpp new file mode 100644 index 0000000000..19016ec781 --- /dev/null +++ b/src/dusk/mtx.cpp @@ -0,0 +1,730 @@ +// This should go into aurora, but for now we'll place it here: +#include +#include +#include + +#define ASSERTLINE(line, cond) (void)0 +#define ASSERTMSGLINE(line, cond, msg) (void)0 +#define ASSERTMSG1LINE(line, cond, msg, arg1) (void)0 +#define ASSERTMSG2LINE(line, cond, msg, arg1, arg2) (void)0 +#define ASSERTMSGLINEV(line, cond, ...) (void)0 + +// SNIP : after here, place it into aurora + +void C_MTXLightOrtho(Mtx m, f32 t, f32 b, f32 l, f32 r, f32 scaleS, f32 scaleT, f32 transS, f32 transT) { + f32 tmp; + + ASSERTMSGLINE(2672, m, "MTXLightOrtho(): NULL MtxPtr 'm' "); + ASSERTMSGLINE(2673, (t != b), "MTXLightOrtho(): 't' and 'b' clipping planes are equal "); + ASSERTMSGLINE(2674, (l != r), "MTXLightOrtho(): 'l' and 'r' clipping planes are equal "); + tmp = 1 / (r - l); + m[0][0] = (2 * tmp * scaleS); + m[0][1] = 0; + m[0][2] = 0; + m[0][3] = (transS + (scaleS * (tmp * -(r + l)))); + tmp = 1/ (t - b); + m[1][0] = 0; + m[1][1] = (2 * tmp * scaleT); + m[1][2] = 0; + m[1][3] = (transT + (scaleT * (tmp * -(t + b)))); + m[2][0] = 0; + m[2][1] = 0; + m[2][2] = 0; + m[2][3] = 1; +} + +void C_MTXLightPerspective(Mtx m, f32 fovY, f32 aspect, f32 scaleS, f32 scaleT, f32 transS, f32 transT) { + f32 angle; + f32 cot; + + ASSERTMSGLINE(2604, m, "MTXLightPerspective(): NULL MtxPtr 'm' "); + ASSERTMSGLINE(2605, (fovY > 0.0) && (fovY < 180.0), "MTXLightPerspective(): 'fovY' out of range "); + ASSERTMSGLINE(2606, 0 != aspect, "MTXLightPerspective(): 'aspect' is 0 "); + + angle = (0.5f * fovY); + angle = MTXDegToRad(angle); + cot = 1 / tanf(angle); + m[0][0] = (scaleS * (cot / aspect)); + m[0][1] = 0; + m[0][2] = -transS; + m[0][3] = 0; + m[1][0] = 0; + m[1][1] = (cot * scaleT); + m[1][2] = -transT; + m[1][3] = 0; + m[2][0] = 0; + m[2][1] = 0; + m[2][2] = -1; + m[2][3] = 0; +} + +void C_MTXLookAt(Mtx m, const Point3d* camPos, const Vec* camUp, const Point3d* target) { + Vec vLook; + Vec vRight; + Vec vUp; + + ASSERTMSGLINE(2437, m, "MTXLookAt(): NULL MtxPtr 'm' "); + ASSERTMSGLINE(2438, camPos, "MTXLookAt(): NULL VecPtr 'camPos' "); + ASSERTMSGLINE(2439, camUp, "MTXLookAt(): NULL VecPtr 'camUp' "); + ASSERTMSGLINE(2440, target, "MTXLookAt(): NULL Point3dPtr 'target' "); + + vLook.x = camPos->x - target->x; + vLook.y = camPos->y - target->y; + vLook.z = camPos->z - target->z; + VECNormalize(&vLook, &vLook); + VECCrossProduct(camUp, &vLook, &vRight); + VECNormalize(&vRight, &vRight); + VECCrossProduct(&vLook, &vRight, &vUp); + m[0][0] = vRight.x; + m[0][1] = vRight.y; + m[0][2] = vRight.z; + m[0][3] = -((camPos->z * vRight.z) + ((camPos->x * vRight.x) + (camPos->y * vRight.y))); + m[1][0] = vUp.x; + m[1][1] = vUp.y; + m[1][2] = vUp.z; + m[1][3] = -((camPos->z * vUp.z) + ((camPos->x * vUp.x) + (camPos->y * vUp.y))); + m[2][0] = vLook.x; + m[2][1] = vLook.y; + m[2][2] = vLook.z; + m[2][3] = -((camPos->z * vLook.z) + ((camPos->x * vLook.x) + (camPos->y * vLook.y))); +} + +void C_MTXPerspective(Mtx44 m, f32 fovY, f32 aspect, f32 n, f32 f) { + f32 angle; + f32 cot; + f32 tmp; + + ASSERTMSGLINE(179, m, "MTXPerspective(): NULL Mtx44Ptr 'm' "); + ASSERTMSGLINE(180, (fovY > 0.0) && (fovY < 180.0), "MTXPerspective(): 'fovY' out of range "); + ASSERTMSGLINE(181, 0.0f != aspect, "MTXPerspective(): 'aspect' is 0 "); + + angle = (0.5f * fovY); + angle = MTXDegToRad(angle); + cot = 1 / tanf(angle); + m[0][0] = (cot / aspect); + m[0][1] = 0; + m[0][2] = 0; + m[0][3] = 0; + m[1][0] = 0; + m[1][1] = (cot); + m[1][2] = 0; + m[1][3] = 0; + m[2][0] = 0; + m[2][1] = 0; + tmp = 1 / (f - n); + m[2][2] = (-n * tmp); + m[2][3] = (tmp * -(f * n)); + m[3][0] = 0; + m[3][1] = 0; + m[3][2] = -1; + m[3][3] = 0; +} + +void C_MTXRotRad(Mtx m, char axis, f32 rad) { + f32 sinA; + f32 cosA; + + ASSERTMSGLINE(1447, m, "MTXRotRad(): NULL MtxPtr 'm' "); + sinA = sinf(rad); + cosA = cosf(rad); + C_MTXRotTrig(m, axis, sinA, cosA); +} + +void C_MTXScale(Mtx m, f32 xS, f32 yS, f32 zS) { + ASSERTMSGLINE(2008, m, "MTXScale(): NULL MtxPtr 'm' "); + m[0][0] = xS; + m[0][1] = 0; + m[0][2] = 0; + m[0][3] = 0; + m[1][0] = 0; + m[1][1] = yS; + m[1][2] = 0; + m[1][3] = 0; + m[2][0] = 0; + m[2][1] = 0; + m[2][2] = zS; + m[2][3] = 0; +} + +void C_MTXScaleApply(const Mtx src, Mtx dst, f32 xS, f32 yS, f32 zS) { + ASSERTMSGLINE(2070, src, "MTXScaleApply(): NULL MtxPtr 'src' "); + ASSERTMSGLINE(2071, dst, "MTXScaleApply(): NULL MtxPtr 'dst' "); + dst[0][0] = (src[0][0] * xS); + dst[0][1] = (src[0][1] * xS); + dst[0][2] = (src[0][2] * xS); + dst[0][3] = (src[0][3] * xS); + dst[1][0] = (src[1][0] * yS); + dst[1][1] = (src[1][1] * yS); + dst[1][2] = (src[1][2] * yS); + dst[1][3] = (src[1][3] * yS); + dst[2][0] = (src[2][0] * zS); + dst[2][1] = (src[2][1] * zS); + dst[2][2] = (src[2][2] * zS); + dst[2][3] = (src[2][3] * zS); +} + +void C_MTXTransApply(const Mtx src, Mtx dst, f32 xT, f32 yT, f32 zT) { + ASSERTMSGLINE(1933, src, "MTXTransApply(): NULL MtxPtr 'src' "); + ASSERTMSGLINE(1934, dst, "MTXTransApply(): NULL MtxPtr 'src' "); //! wrong assert string + + if (src != dst) { + dst[0][0] = src[0][0]; + dst[0][1] = src[0][1]; + dst[0][2] = src[0][2]; + dst[1][0] = src[1][0]; + dst[1][1] = src[1][1]; + dst[1][2] = src[1][2]; + dst[2][0] = src[2][0]; + dst[2][1] = src[2][1]; + dst[2][2] = src[2][2]; + } + + dst[0][3] = (src[0][3] + xT); + dst[1][3] = (src[1][3] + yT); + dst[2][3] = (src[2][3] + zT); +} + +void C_MTXRotTrig(Mtx m, char axis, f32 sinA, f32 cosA) { + ASSERTMSGLINE(1502, m, "MTXRotTrig(): NULL MtxPtr 'm' "); + switch(axis) { + case 'x': + case 'X': + m[0][0] = 1; + m[0][1] = 0; + m[0][2] = 0; + m[0][3] = 0; + m[1][0] = 0; + m[1][1] = cosA; + m[1][2] = -sinA; + m[1][3] = 0; + m[2][0] = 0; + m[2][1] = sinA; + m[2][2] = cosA; + m[2][3] = 0; + break; + case 'y': + case 'Y': + m[0][0] = cosA; + m[0][1] = 0; + m[0][2] = sinA; + m[0][3] = 0; + m[1][0] = 0; + m[1][1] = 1; + m[1][2] = 0; + m[1][3] = 0; + m[2][0] = -sinA; + m[2][1] = 0; + m[2][2] = cosA; + m[2][3] = 0; + break; + case 'z': + case 'Z': + m[0][0] = cosA; + m[0][1] = -sinA; + m[0][2] = 0; + m[0][3] = 0; + m[1][0] = sinA; + m[1][1] = cosA; + m[1][2] = 0; + m[1][3] = 0; + m[2][0] = 0; + m[2][1] = 0; + m[2][2] = 1; + m[2][3] = 0; + break; + default: + ASSERTMSGLINE(1529, FALSE, "MTXRotTrig(): invalid 'axis' value "); + break; + } +} + +void C_VECAdd(const Vec* a, const Vec* b, Vec* ab) { + ASSERTMSGLINE(114, a, "VECAdd(): NULL VecPtr 'a' "); + ASSERTMSGLINE(115, b, "VECAdd(): NULL VecPtr 'b' "); + ASSERTMSGLINE(116, ab, "VECAdd(): NULL VecPtr 'ab' "); + ab->x = a->x + b->x; + ab->y = a->y + b->y; + ab->z = a->z + b->z; +} + +// MTX QUAT + +void C_QUATMultiply(const Quaternion* p, const Quaternion* q, Quaternion* pq) { + Quaternion* r; + Quaternion pqTmp; + + ASSERTMSGLINE(193, p, "QUATMultiply(): NULL QuaternionPtr 'p' "); + ASSERTMSGLINE(194, q, "QUATMultiply(): NULL QuaternionPtr 'q' "); + ASSERTMSGLINE(195, pq, "QUATMultiply(): NULL QuaternionPtr 'pq' "); + + if (p == pq || q == pq){ + r = &pqTmp; + } else { + r = pq; + } + + r->w = (p->w * q->w) - (p->x * q->x) - (p->y * q->y) - (p->z * q->z); + r->x = (p->w * q->x) + (p->x * q->w) + (p->y * q->z) - (p->z * q->y); + r->y = (p->w * q->y) + (p->y * q->w) + (p->z * q->x) - (p->x * q->z); + r->z = (p->w * q->z) + (p->z * q->w) + (p->x * q->y) - (p->y * q->x); + + if (r == &pqTmp) { + *pq = pqTmp; + } +} + +void C_QUATRotAxisRad(Quaternion* r, const Vec* axis, f32 rad) { + f32 half, sh, ch; + Vec nAxis; + + ASSERTMSGLINE(758, r, "QUATRotAxisRad(): NULL QuaternionPtr 'r' "); + ASSERTMSGLINE(759, axis, "QUATRotAxisRad(): NULL VecPtr 'axis' "); + + VECNormalize(axis, &nAxis); + + half = rad * 0.5f; + sh = sinf(half); + ch = cosf(half); + + r->x = sh * nAxis.x; + r->y = sh * nAxis.y; + r->z = sh * nAxis.z; + r->w = ch; +} + +void C_QUATSlerp(const Quaternion* p, const Quaternion* q, Quaternion* r, f32 t) { + f32 theta, sin_th, cos_th; + f32 tp, tq; + + ASSERTMSGLINE(869, p, "QUATSlerp(): NULL QuaternionPtr 'p' "); + ASSERTMSGLINE(870, q, "QUATSlerp(): NULL QuaternionPtr 'q' "); + ASSERTMSGLINE(871, r, "QUATSlerp(): NULL QuaternionPtr 'r' "); + + cos_th = p->x * q->x + p->y * q->y + p->z * q->z + p->w * q->w; + tq = 1.0f; + + if (cos_th < 0.0f) { + cos_th = -cos_th; + tq = -tq; + } + + if (cos_th <= 0.99999f) { + theta = acosf(cos_th); + sin_th = sinf(theta); + + tp = sinf((1.0f - t) * theta) / sin_th; + tq *= sinf(t * theta) / sin_th; + } else { + tp = 1.0f - t; + tq *= t; + } + + r->x = (tp * p->x) + (tq * q->x); + r->y = (tp * p->y) + (tq * q->y); + r->z = (tp * p->z) + (tq * q->z); + r->w = (tp * p->w) + (tq * q->w); +} + +void C_VECHalfAngle(const Vec* a, const Vec* b, Vec* half) { + Vec aTmp; + Vec bTmp; + Vec hTmp; + + ASSERTMSGLINE(713, a, "VECHalfAngle(): NULL VecPtr 'a' "); + ASSERTMSGLINE(714, b, "VECHalfAngle(): NULL VecPtr 'b' "); + ASSERTMSGLINE(715, half, "VECHalfAngle(): NULL VecPtr 'half' "); + + aTmp.x = -a->x; + aTmp.y = -a->y; + aTmp.z = -a->z; + bTmp.x = -b->x; + bTmp.y = -b->y; + bTmp.z = -b->z; + + VECNormalize(&aTmp, &aTmp); + VECNormalize(&bTmp, &bTmp); + VECAdd(&aTmp, &bTmp, &hTmp); + + if (VECDotProduct(&hTmp, &hTmp) > 0.0f) { + VECNormalize(&hTmp, half); + return; + } + *half = hTmp; +} + +void C_VECNormalize(const Vec* src, Vec* unit) { + f32 mag; + + ASSERTMSGLINE(321, src, "VECNormalize(): NULL VecPtr 'src' "); + ASSERTMSGLINE(322, unit, "VECNormalize(): NULL VecPtr 'unit' "); + + mag = (src->z * src->z) + ((src->x * src->x) + (src->y * src->y)); + ASSERTMSGLINE(327, 0.0f != mag, "VECNormalize(): zero magnitude vector "); + + mag = 1.0f/ sqrtf(mag); + unit->x = src->x * mag; + unit->y = src->y * mag; + unit->z = src->z * mag; +} + +void C_VECReflect(const Vec* src, const Vec* normal, Vec* dst) { + f32 cosA; + Vec uI; + Vec uN; + + ASSERTMSGLINE(769, src, "VECReflect(): NULL VecPtr 'src' "); + ASSERTMSGLINE(770, normal, "VECReflect(): NULL VecPtr 'normal' "); + ASSERTMSGLINE(771, dst, "VECReflect(): NULL VecPtr 'dst' "); + + uI.x = -src->x; + uI.y = -src->y; + uI.z = -src->z; + + VECNormalize(&uI, &uI); + VECNormalize(normal, &uN); + + cosA = VECDotProduct(&uI, &uN); + dst->x = (2.0f * uN.x * cosA) - uI.x; + dst->y = (2.0f * uN.y * cosA) - uI.y; + dst->z = (2.0f * uN.z * cosA) - uI.z; + VECNormalize(dst, dst); +} + +u32 C_MTXInverse(const Mtx src, Mtx inv) { + Mtx mTmp; + MtxPtr m; + f32 det; + + ASSERTMSGLINE(950, src, "MTXInverse(): NULL MtxPtr 'src' "); + ASSERTMSGLINE(951, inv, "MTXInverse(): NULL MtxPtr 'inv' "); + + if (src == inv) { + m = mTmp; + } else { + m = inv; + } + det = ((((src[2][1] * (src[0][2] * src[1][0])) + + ((src[2][2] * (src[0][0] * src[1][1])) + + (src[2][0] * (src[0][1] * src[1][2])))) + - (src[0][2] * (src[2][0] * src[1][1]))) + - (src[2][2] * (src[1][0] * src[0][1]))) + - (src[1][2] * (src[0][0] * src[2][1])); + if (0 == det) { + return 0; + } + det = 1 / det; + m[0][0] = (det * +((src[1][1] * src[2][2]) - (src[2][1] * src[1][2]))); + m[0][1] = (det * -((src[0][1] * src[2][2]) - (src[2][1] * src[0][2]))); + m[0][2] = (det * +((src[0][1] * src[1][2]) - (src[1][1] * src[0][2]))); + + m[1][0] = (det * -((src[1][0] * src[2][2]) - (src[2][0] * src[1][2]))); + m[1][1] = (det * +((src[0][0] * src[2][2]) - (src[2][0] * src[0][2]))); + m[1][2] = (det * -((src[0][0] * src[1][2]) - (src[1][0] * src[0][2]))); + + m[2][0] = (det * +((src[1][0] * src[2][1]) - (src[2][0] * src[1][1]))); + m[2][1] = (det * -((src[0][0] * src[2][1]) - (src[2][0] * src[0][1]))); + m[2][2] = (det * +((src[0][0] * src[1][1]) - (src[1][0] * src[0][1]))); + + m[0][3] = ((-m[0][0] * src[0][3]) - (m[0][1] * src[1][3])) - (m[0][2] * src[2][3]); + m[1][3] = ((-m[1][0] * src[0][3]) - (m[1][1] * src[1][3])) - (m[1][2] * src[2][3]); + m[2][3] = ((-m[2][0] * src[0][3]) - (m[2][1] * src[1][3])) - (m[2][2] * src[2][3]); + + if (m == mTmp) { + C_MTXCopy(mTmp, inv); + } + return 1; +} + +void C_MTXConcatArray(const Mtx a, const Mtx* srcBase, Mtx* dstBase, u32 count) { + u32 i; + + ASSERTMSGLINE(580, a != 0, "MTXConcatArray(): NULL MtxPtr 'a' "); + ASSERTMSGLINE(581, srcBase != 0, "MTXConcatArray(): NULL MtxPtr 'srcBase' "); + ASSERTMSGLINE(582, dstBase != 0, "MTXConcatArray(): NULL MtxPtr 'dstBase' "); + ASSERTMSGLINE(583, count > 1, "MTXConcatArray(): count must be greater than 1."); + + for (i = 0; i < count; i++) { + C_MTXConcat(a, *srcBase, *dstBase); + srcBase++; + dstBase++; + } +} + +void C_MTXMultVecArray(const Mtx m, const Vec* srcBase, Vec* dstBase, u32 count) { + u32 i; + Vec vTmp; + + ASSERTMSGLINE(168, m, "MTXMultVecArray(): NULL MtxPtr 'm' "); + ASSERTMSGLINE(169, srcBase, "MTXMultVecArray(): NULL VecPtr 'srcBase' "); + ASSERTMSGLINE(170, dstBase, "MTXMultVecArray(): NULL VecPtr 'dstBase' "); + ASSERTMSGLINE(171, count > 1, "MTXMultVecArray(): count must be greater than 1."); + + for(i = 0; i < count; i++) { + vTmp.x = m[0][3] + ((m[0][2] * srcBase->z) + ((m[0][0] * srcBase->x) + (m[0][1] * srcBase->y))); + vTmp.y = m[1][3] + ((m[1][2] * srcBase->z) + ((m[1][0] * srcBase->x) + (m[1][1] * srcBase->y))); + vTmp.z = m[2][3] + ((m[2][2] * srcBase->z) + ((m[2][0] * srcBase->x) + (m[2][1] * srcBase->y))); + dstBase->x = vTmp.x; + dstBase->y = vTmp.y; + dstBase->z = vTmp.z; + srcBase++; + dstBase++; + } +} + +void C_MTXMultVecArraySR(const Mtx m, const Vec* srcBase, Vec* dstBase, u32 count) { + u32 i; + Vec vTmp; + + ASSERTMSGLINE(410, m, "MTXMultVecArraySR(): NULL MtxPtr 'm' "); + ASSERTMSGLINE(411, srcBase, "MTXMultVecArraySR(): NULL VecPtr 'srcBase' "); + ASSERTMSGLINE(412, dstBase, "MTXMultVecArraySR(): NULL VecPtr 'dstBase' "); + ASSERTMSGLINE(413, count > 1, "MTXMultVecArraySR(): count must be greater than 1."); + + for(i = 0; i < count; i++) { + vTmp.x = (m[0][2] * srcBase->z) + ((m[0][0] * srcBase->x) + (m[0][1] * srcBase->y)); + vTmp.y = (m[1][2] * srcBase->z) + ((m[1][0] * srcBase->x) + (m[1][1] * srcBase->y)); + vTmp.z = (m[2][2] * srcBase->z) + ((m[2][0] * srcBase->x) + (m[2][1] * srcBase->y)); + dstBase->x = vTmp.x; + dstBase->y = vTmp.y; + dstBase->z = vTmp.z; + srcBase++; + dstBase++; + } +} + +void C_MTXQuat(Mtx m, const Quaternion* q) { + f32 s; + f32 xs; + f32 ys; + f32 zs; + f32 wx; + f32 wy; + f32 wz; + f32 xx; + f32 xy; + f32 xz; + f32 yy; + f32 yz; + f32 zz; + + ASSERTMSGLINE(2145, m, "MTXQuat(): NULL MtxPtr 'm' "); + ASSERTMSGLINE(2146, q, "MTXQuat(): NULL QuaternionPtr 'q' "); + ASSERTMSGLINE(2147, q->x || q->y || q->z || q->w, "MTXQuat(): zero-value quaternion "); + s = 2 / ((q->w * q->w) + ((q->z * q->z) + ((q->x * q->x) + (q->y * q->y)))); + xs = q->x * s; + ys = q->y * s; + zs = q->z * s; + wx = q->w * xs; + wy = q->w * ys; + wz = q->w * zs; + xx = q->x * xs; + xy = q->x * ys; + xz = q->x * zs; + yy = q->y * ys; + yz = q->y * zs; + zz = q->z * zs; + m[0][0] = (1 - (yy + zz)); + m[0][1] = (xy - wz); + m[0][2] = (xz + wy); + m[0][3] = 0; + m[1][0] = (xy + wz); + m[1][1] = (1 - (xx + zz)); + m[1][2] = (yz - wx); + m[1][3] = 0; + m[2][0] = (xz - wy); + m[2][1] = (yz + wx); + m[2][2] = (1 - (xx + yy)); + m[2][3] = 0; +} +void C_MTXRotAxisRad(Mtx m, const Vec* axis, f32 rad) { + Vec vN; + f32 s; + f32 c; + f32 t; + f32 x; + f32 y; + f32 z; + f32 xSq; + f32 ySq; + f32 zSq; + + ASSERTMSGLINE(1677, m, "MTXRotAxisRad(): NULL MtxPtr 'm' "); + ASSERTMSGLINE(1678, axis, "MTXRotAxisRad(): NULL VecPtr 'axis' "); + + s = sinf(rad); + c = cosf(rad); + t = 1 - c; + C_VECNormalize(axis, &vN); + x = vN.x; + y = vN.y; + z = vN.z; + xSq = (x * x); + ySq = (y * y); + zSq = (z * z); + m[0][0] = (c + (t * xSq)); + m[0][1] = (y * (t * x)) - (s * z); + m[0][2] = (z * (t * x)) + (s * y); + m[0][3] = 0; + m[1][0] = ((y * (t * x)) + (s * z)); + m[1][1] = (c + (t * ySq)); + m[1][2] = ((z * (t * y)) - (s * x)); + m[1][3] = 0; + m[2][0] = ((z * (t * x)) - (s * y)); + m[2][1] = ((z * (t * y)) + (s * x)); + m[2][2] = (c + (t * zSq)); + m[2][3] = 0; +} + +// VEC +void C_VECCrossProduct(const Vec* a, const Vec* b, Vec* axb) { + Vec vTmp; + + ASSERTMSGLINE(608, a, "VECCrossProduct(): NULL VecPtr 'a' "); + ASSERTMSGLINE(609, b, "VECCrossProduct(): NULL VecPtr 'b' "); + ASSERTMSGLINE(610, axb, "VECCrossProduct(): NULL VecPtr 'axb' "); + + vTmp.x = (a->y * b->z) - (a->z * b->y); + vTmp.y = (a->z * b->x) - (a->x * b->z); + vTmp.z = (a->x * b->y) - (a->y * b->x); + axb->x = vTmp.x; + axb->y = vTmp.y; + axb->z = vTmp.z; +} + +f32 C_VECDistance(const Vec* a, const Vec* b) { + return sqrtf(C_VECSquareDistance(a, b)); +} + +f32 C_VECDotProduct(const Vec* a, const Vec* b) { + f32 dot; + + ASSERTMSGLINE(546, a, "VECDotProduct(): NULL VecPtr 'a' "); + ASSERTMSGLINE(547, b, "VECDotProduct(): NULL VecPtr 'b' "); + dot = (a->z * b->z) + ((a->x * b->x) + (a->y * b->y)); + return dot; +} + +f32 C_VECMag(const Vec* v) { + return sqrtf(C_VECSquareMag(v)); +} + +void C_VECScale(const Vec* src, Vec* dst, f32 scale) { + ASSERTMSGLINE(253, src, "VECScale(): NULL VecPtr 'src' "); + ASSERTMSGLINE(254, dst, "VECScale(): NULL VecPtr 'dst' "); + dst->x = (src->x * scale); + dst->y = (src->y * scale); + dst->z = (src->z * scale); +} + +f32 C_VECSquareDistance(const Vec* a, const Vec* b) { + Vec diff; + + diff.x = a->x - b->x; + diff.y = a->y - b->y; + diff.z = a->z - b->z; + return (diff.z * diff.z) + ((diff.x * diff.x) + (diff.y * diff.y)); +} + +f32 C_VECSquareMag(const Vec* v) { + f32 sqmag; + + ASSERTMSGLINE(411, v, "VECMag(): NULL VecPtr 'v' "); + + sqmag = v->z * v->z + ((v->x * v->x) + (v->y * v->y)); + return sqmag; +} + +void C_VECSubtract(const Vec* a, const Vec* b, Vec* a_b) { + ASSERTMSGLINE(183, a, "VECSubtract(): NULL VecPtr 'a' "); + ASSERTMSGLINE(184, b, "VECSubtract(): NULL VecPtr 'b' "); + ASSERTMSGLINE(185, a_b, "VECSubtract(): NULL VecPtr 'a_b' "); + a_b->x = a->x - b->x; + a_b->y = a->y - b->y; + a_b->z = a->z - b->z; +} + +#pragma mark PSMTX +// I think these are PPC ASM implemntations? +// this can be done just with defining DEBUG, but that has some other +// implecations, so we'll just define them here for now. These are all just wrappers around the C versions, so we can just call those directly. +void PSMTXConcatArray(const __REGISTER Mtx a, const __REGISTER Mtx* srcBase, __REGISTER Mtx* dstBase, __REGISTER u32 count) { + C_MTXConcatArray(a, srcBase, dstBase, count); +} +void PSMTXCopy(const __REGISTER Mtx src, __REGISTER Mtx dst) { + C_MTXCopy(src, dst); +} +void PSMTXIdentity(__REGISTER Mtx m) { + C_MTXIdentity(m); +} +u32 PSMTXInverse(const __REGISTER Mtx src, __REGISTER Mtx inv) { + return C_MTXInverse(src, inv); +} +void PSMTXMultVec(const __REGISTER Mtx m, const __REGISTER Vec* src, __REGISTER Vec* dst) { + C_MTXMultVec(m, src, dst); +} +void PSMTXConcat(const __REGISTER Mtx a, const __REGISTER Mtx b, __REGISTER Mtx ab) { + C_MTXConcat(a, b, ab); +} +void PSMTXMultVecArray(const Mtx m, const Vec* srcBase, Vec* dstBase, u32 count) { + C_MTXMultVecArray(m, srcBase, dstBase, count); +} +void PSMTXMultVecArraySR(const __REGISTER Mtx m, const __REGISTER Vec* srcBase, __REGISTER Vec* dstBase, __REGISTER u32 count) { + C_MTXMultVecArraySR(m, srcBase, dstBase, count); +} +void PSMTXMultVecSR(const __REGISTER Mtx m, const __REGISTER Vec* src, __REGISTER Vec* dst) { + C_MTXMultVecSR(m, src, dst); +} +void PSMTXQuat(__REGISTER Mtx m, const __REGISTER Quaternion* q) { + C_MTXQuat(m, q); +} +void PSMTXRotAxisRad(Mtx m, const Vec* axis, f32 rad) { + C_MTXRotAxisRad(m, axis, rad); +} +void PSMTXRotRad(Mtx m, char axis, f32 rad) { + C_MTXRotRad(m, axis, rad); +} +void PSMTXScale(__REGISTER Mtx m, __REGISTER f32 xS, __REGISTER f32 yS, __REGISTER f32 zS) { + C_MTXScale(m, xS, yS, zS); +} +void PSMTXScaleApply(const __REGISTER Mtx src, __REGISTER Mtx dst, __REGISTER f32 xS, __REGISTER f32 yS, __REGISTER f32 zS) { + C_MTXScaleApply(src, dst, xS, yS, zS); +} +void PSMTXTrans(__REGISTER Mtx m, __REGISTER f32 xT, __REGISTER f32 yT, __REGISTER f32 zT) { + C_MTXTrans(m, xT, yT, zT); +} +void PSMTXTransApply(const __REGISTER Mtx src, __REGISTER Mtx dst, __REGISTER f32 xT, __REGISTER f32 yT, __REGISTER f32 zT) { + C_MTXTransApply(src, dst, xT, yT, zT); +} +void PSQUATMultiply(const __REGISTER Quaternion* p, const __REGISTER Quaternion* q, __REGISTER Quaternion* pq) { + C_QUATMultiply(p, q, pq); +} +void PSVECAdd(const __REGISTER Vec* a, const __REGISTER Vec* b, __REGISTER Vec* ab) { + C_VECAdd(a, b, ab); +} +void PSVECCrossProduct(const __REGISTER Vec* a, const __REGISTER Vec* b, __REGISTER Vec* axb) { + C_VECCrossProduct(a, b, axb); +} +f32 PSVECDistance(const __REGISTER Vec* a, const __REGISTER Vec* b) { + return C_VECDistance(a, b); +} +f32 PSVECDotProduct(const __REGISTER Vec* a, const __REGISTER Vec* b) { + return C_VECDotProduct(a, b); +} +f32 PSVECMag(const __REGISTER Vec* v) { + return C_VECMag(v); +} +void PSVECNormalize(const __REGISTER Vec* src, __REGISTER Vec* unit) { + C_VECNormalize(src, unit); +} +void PSVECScale(const __REGISTER Vec* src, __REGISTER Vec* dst, __REGISTER f32 scale) { + C_VECScale(src, dst, scale); +} +f32 PSVECSquareDistance(const __REGISTER Vec* a, const __REGISTER Vec* b) { + return C_VECSquareDistance(a, b); +} +f32 PSVECSquareMag(const __REGISTER Vec* v) { + return C_VECSquareMag(v); +} +void PSVECSubtract(const __REGISTER Vec* a, const __REGISTER Vec* b, __REGISTER Vec* a_b) { + C_VECSubtract(a, b, a_b); +} diff --git a/src/dusk/stubs.cpp b/src/dusk/stubs.cpp index ee466a699c..8590df30eb 100644 --- a/src/dusk/stubs.cpp +++ b/src/dusk/stubs.cpp @@ -1,52 +1,10 @@ -//#include -#include -#include +#include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include #include // Credits: Super Monkey Ball -static VIRetraceCallback sVIRetraceCallback = NULL; - void OSReport(const char *msg, ...) { va_list args; va_start(args, msg); @@ -58,6 +16,335 @@ u32 OSGetConsoleType() { return OS_CONSOLE_RETAIL1; } u32 OSGetSoundMode() { return 2; } +// Consolidated OS functions (moved from other sections) +void OSClearContext(OSContext *context) { puts("OSClearContext is a stub"); } + +void OSInit() { puts("OSInit is a stub"); } + +void OSInitMutex(OSMutex *mutex) { puts("OSInitMutex is a stub"); } + +void OSUnlockMutex(OSMutex *mutex) { puts("OSUnlockMutex is a stub"); } + +BOOL OSTryLockMutex(OSMutex *mutex) { + puts("OSTryLockMutex is a stub"); + return FALSE; +} + +void *OSAllocFromArenaLo(u32 size, u32 align) { + puts("OSAllocFromArenaLo is a stub"); + return NULL; +} + +BOOL OSDisableInterrupts() { + puts("OSDisableInterrupts is a stub"); + return FALSE; +} + +void OSSleepThread(OSThreadQueue *queue) { puts("OSSleepThread is a stub"); } + +void OSDumpContext(OSContext *context) { puts("OSDumpContext is a stub"); } + +void OSSignalCond(OSCond *cond) { puts("OSSignalCond is a stub"); } + +void OSCreateAlarm(OSAlarm *alarm) { puts("OSCreateAlarm is a stub"); } + +void OSCancelAlarm(OSAlarm *alarm) { puts("OSCancelAlarm is a stub"); } + +s32 OSCheckActiveThreads(void) { puts("OSCheckActiveThreads is a stub"); } + +int OSCreateThread(OSThread* thread, void* (*func)(void*), void* param, void* stack, u32 stackSize, OSPriority priority, u16 attr) { + puts("OSCreateThread is a stub"); + return 0; +} + +s32 OSDisableScheduler() { + puts("OSDisableScheduler is a stub"); + return 0; +} + +void OSDetachThread(OSThread* thread) { + puts("OSDetachThread is a stub"); +} + +OSThread *OSGetCurrentThread() { + puts("OSGetCurrentThread is a stub"); + return 0; +} + +u16 OSGetFontEncode() { + puts("OSGetFontEncode is a stub"); + return 0; +} + +char *OSGetFontTexture(char *string, void **image, s32 *x, s32 *y, s32 *width) { + puts("OSGetFontTexture is a stub"); + return 0; +} + +char *OSGetFontWidth(char *string, s32 *width) { + puts("OSGetFontWidth is a stub"); + return 0; +} + +BOOL OSGetResetButtonState() { + puts("OSGetResetButtonState is a stub"); + return FALSE; +} + +u32 OSGetStackPointer() { + puts("OSGetStackPointer is a stub"); + return 0; +} + +BOOL OSInitFont(OSFontHeader *fontData) { + puts("OSInitFont is a stub"); + return FALSE; +} + +BOOL OSLink(OSModuleInfo *newModule, void *bss) { + puts("OSLink is a stub"); + return TRUE; +} + +void OSLoadContext(OSContext *context) { puts("OSLoadContext is a stub"); } + +void OSResetSystem(int reset, u32 resetCode, BOOL forceMenu) { + puts("OSResetSystem is a stub"); +} + +BOOL OSRestoreInterrupts(BOOL level) { + puts("OSRestoreInterrupts is a stub"); + return FALSE; +} + +s32 OSResumeThread(OSThread *thread) { + puts("OSResumeThread is a stub"); + return 0; +} + +void OSSetCurrentContext(OSContext *context) { + puts("OSSetCurrentContext is a stub"); +} + +void OSSetStringTable(void* stringTable) { + puts("OSSetStringTable is a stub"); +} + +OSSwitchThreadCallback OSSetSwitchThreadCallback(OSSwitchThreadCallback callback) { + puts("OSSetSwitchThreadCallback is a stub"); + return NULL; +} + +int OSSetThreadPriority(OSThread* thread, s32 priority) { + puts("OSSetThreadPriority is a stub"); + return 0; +} + +void OSWaitCond(OSCond* cond, OSMutex* mutex) { + puts("OSWaitCond is a stub"); +} + +void OSYieldThread(void) { + puts("OSYieldThread is a stub"); +} + +s32 OSSuspendThread(OSThread *thread) { + puts("OSSuspendThread is a stub"); + return 0; +} + +void OSCancelThread(OSThread *thread) { + puts("OSCancelThread is a stub"); +} + +void OSTicksToCalendarTime(OSTime ticks, OSCalendarTime *td) { + puts("OSTicksToCalendarTime is a stub"); +} + +BOOL OSUnlink(OSModuleInfo *oldModule) { + puts("OSUnlink is a stub"); + return FALSE; +} + +void OSSwitchFiberEx(__REGISTER u32 param_0, __REGISTER u32 param_1, __REGISTER u32 param_2, __REGISTER u32 param_3, __REGISTER u32 code, __REGISTER u32 stack) { + puts("OSSwitchFiberEx is a stub"); +} + +void OSWakeupThread(OSThreadQueue *queue) { puts("OSWakeupThread is a stub"); } + +u32 __OSGetDIConfig() { + puts("__OSGetDIConfig is a stub"); + return 0; +} + +__OSInterruptHandler __OSSetInterruptHandler(__OSInterrupt interrupt, + __OSInterruptHandler handler) { + puts("__OSSetInterruptHandler is a stub"); + return 0; +} + +OSInterruptMask __OSUnmaskInterrupts(OSInterruptMask mask) { + puts("__OSUnmaskInterrupts is a stub"); + return 0; +} + +BOOL OSEnableInterrupts() { + puts("OSEnableInterrupts is a stub"); + return FALSE; +} + +s32 OSEnableScheduler() { + puts("OSEnableScheduler is a stub"); + return 0; +} + +void OSExitThread(void *val) { puts("OSExitThread is a stub"); } + +void* OSGetArenaHi(void) { + puts("OSGetArenaHi is a stub"); + return NULL; +} + +void* OSGetArenaLo(void) { + puts("OSGetArenaLo is a stub"); + return NULL; +} + +OSContext* OSGetCurrentContext(void) { + puts("OSGetCurrentContext is a stub"); + return NULL; +} + +u32 OSGetProgressiveMode(void) { + puts("OSGetProgressiveMode is a stub"); + return 0; +} + +u32 OSGetResetCode(void) { + puts("OSGetResetCode is a stub"); + return 0; +} + +BOOL OSGetResetSwitchState() { + puts("OSGetResetSwitchState is a stub"); + return FALSE; +} + +s32 OSGetThreadPriority(OSThread* thread) { + puts("OSGetThreadPriority is a stub"); + return 0; +} + +OSTick OSGetTick(void) { + puts("OSGetTick is a stub"); + return 0; +} + +OSTime OSGetTime(void) { + puts("OSGetTime is a stub"); + return 0; +} + +void OSInitCond(OSCond* cond) { + puts("OSInitCond is a stub"); +} + +void OSInitMessageQueue(OSMessageQueue* mq, void* msgArray, s32 msgCount) { + puts("OSInitMessageQueue is a stub"); +} + +void OSInitThreadQueue(OSThreadQueue* queue) { + puts("OSInitThreadQueue is a stub"); +} + +BOOL OSIsThreadTerminated(OSThread* thread) { + puts("OSIsThreadTerminated is a stub"); + return FALSE; +} + +int OSJamMessage(OSMessageQueue* mq, void* msg, s32 flags) { + puts("OSJamMessage is a stub"); + return 0; +} + +BOOL OSLinkFixed(OSModuleInfo* newModule, void* bss) { + puts("OSLinkFixed is a stub"); + return TRUE; +} + +void OSLockMutex(OSMutex* mutex) { + puts("OSLockMutex is a stub"); +} + +void OSProtectRange(u32 chan, void* addr, u32 nBytes, u32 control) { + puts("OSProtectRange is a stub"); +} + +int OSReceiveMessage(OSMessageQueue* mq, void* msg, s32 flags) { + puts("OSReceiveMessage is a stub"); + return 0; +} + +int OSSendMessage(OSMessageQueue* mq, void* msg, s32 flags) { + puts("OSSendMessage is a stub"); + return 0; +} + +void OSSetArenaHi(void* newHi) { + puts("OSSetArenaHi is a stub"); +} + +void OSSetArenaLo(void* newLo) { + puts("OSSetArenaLo is a stub"); +} + +void OSSetPeriodicAlarm(OSAlarm* alarm, OSTime start, OSTime period, OSAlarmHandler handler) { + puts("OSSetPeriodicAlarm is a stub"); +} + +void OSSetProgressiveMode(u32 on) { + puts("OSSetProgressiveMode is a stub"); +} + +void OSSetSaveRegion(void* start, void* end) { + puts("OSSetSaveRegion is a stub"); +} + +OSErrorHandler OSSetErrorHandler(OSError error, OSErrorHandler handler) { + puts("OSSetErrorHandler is a stub"); + return NULL; +} + +void OSSetAlarm(OSAlarm* alarm, OSTime tick, OSAlarmHandler handler) { + puts("OSSetAlarm is a stub"); +} + +void* OSInitAlloc(void* arenaStart, void* arenaEnd, int maxHeaps) { + puts("OSInitAlloc is a stub"); + return NULL; +} + +void OSFillFPUContext(__REGISTER OSContext* context) { + puts("OSFillFPUContext is a stub"); +} + +void OSSetSoundMode(u32 mode) {} + +# pragma mark SOUND +void SoundChoID(int a, int b) { puts("SoundChoID is a stub"); } +void SoundPan(int a, int b, int c) { puts("SoundPan is a stub"); } +void SoundPitch(u16 a, int b) { puts("SoundPitch is a stub"); } +void SoundRevID(int a, int b) { puts("SoundRevID is a stub"); } + +# pragma mark CARD + +#include + +extern "C" int CARDProbe(s32 chan) { + puts("CARDProbe is a stub"); + return 0; +} + s32 CARDCancel(CARDFileInfo *fileInfo) { puts("CARDCancel is a stub"); return 0; @@ -191,13 +478,13 @@ s32 CARDUnmount(s32 chan) { return 0; } -s32 CARDWrite(CARDFileInfo *fileInfo, void *addr, s32 length, +extern "C" s32 CARDWrite(CARDFileInfo *fileInfo, void *addr, s32 length, s32 offset) { puts("CARDWrite is a stub"); return 0; } -s32 CARDWriteAsync(CARDFileInfo *fileInfo, void *addr, s32 length, +s32 CARDWriteAsync(CARDFileInfo *fileInfo, const void *addr, s32 length, s32 offset, CARDCallback callback) { puts("CARDWriteAsync is a stub"); return 0; @@ -207,6 +494,13 @@ s32 CARDGetSerialNo(s32 chan, u64 *serialNo) { return 0; } s32 CARDSetStatus(s32 chan, s32 fileNo, CARDStat *stat) { return 0; } +s32 __CARDFormatRegionAsync(int a, int b) { + puts("__CARDFormatRegionAsync is a stub"); + return 0; +} + +# pragma mark DC + void DCFlushRange(void *addr, u32 nBytes) { // puts("DCFlushRange is a stub"); } @@ -227,23 +521,7 @@ void DCStoreRangeNoSync(void *addr, u32 nBytes) { // puts("DCStoreRangeNoSync is a stub"); } -s32 DVDCancel(volatile DVDCommandBlock *block) { - puts("DVDCancel is a stub"); - return 0; -} - -int DVDReadAbsAsyncForBS(DVDCommandBlock *block, void *addr, s32 length, s32 offset, - DVDCBCallback callback) { - puts("DVDReadAbsAsyncForBS is a stub"); - return 0; -} - -int DVDReadDiskID(DVDCommandBlock* block, DVDDiskID* diskID, DVDCBCallback callback) { - puts("DVDReadDiskID is a stub"); - return 0; -} - -void DVDReset() { puts("DVDReset is a stub"); } +# pragma mark EXI BOOL EXIDeselect(int chan) { puts("EXIDeselect is a stub"); @@ -280,106 +558,17 @@ BOOL EXIUnlock(int chan) { return FALSE; } +# pragma mark LC + void LCEnable() { puts("LCEnable is a stub"); } -void OSClearContext(OSContext *context) { puts("OSClearContext is a stub"); } +// OS-related functions consolidated under "# pragma mark OS" further up -BOOL OSDisableInterrupts() { - puts("OSDisableInterrupts is a stub"); - return FALSE; -} +# pragma mark VI -void OSDumpContext(OSContext *context) { puts("OSDumpContext is a stub"); } +static VIRetraceCallback sVIRetraceCallback = NULL; -OSThread *OSGetCurrentThread() { - puts("OSGetCurrentThread is a stub"); - return 0; -} - -u16 OSGetFontEncode() { - puts("OSGetFontEncode is a stub"); - return 0; -} - -char *OSGetFontTexture(const char* string, void** image, s32* x, s32* y, s32* width) { - puts("OSGetFontTexture is a stub"); - return 0; -} - -char *OSGetFontWidth(const char* string, s32* width) { - puts("OSGetFontWidth is a stub"); - return 0; -} - -BOOL OSGetResetButtonState() { - puts("OSGetResetButtonState is a stub"); - return FALSE; -} - -u32 OSGetStackPointer() { - puts("OSGetStackPointer is a stub"); - return 0; -} - -BOOL OSInitFont(OSFontHeader *fontData) { - puts("OSInitFont is a stub"); - return FALSE; -} - -BOOL OSLink(OSModuleInfo *newModule, void *bss) { - puts("OSLink is a stub"); - return TRUE; -} - -void OSLoadContext(OSContext *context) { puts("OSLoadContext is a stub"); } - -void OSResetSystem(int reset, u32 resetCode, BOOL forceMenu) { - puts("OSResetSystem is a stub"); -} - -BOOL OSRestoreInterrupts(BOOL level) { - puts("OSRestoreInterrupts is a stub"); - return FALSE; -} - -s32 OSResumeThread(OSThread *thread) { - puts("OSResumeThread is a stub"); - return 0; -} - -void OSSetCurrentContext(OSContext *context) { - puts("OSSetCurrentContext is a stub"); -} - -void OSSetStringTable(void* stringTable) { - puts("OSSetStringTable is a stub"); -} - -s32 OSSuspendThread(OSThread *thread) { - puts("OSSuspendThread is a stub"); - return 0; -} - -void OSTicksToCalendarTime(OSTime ticks, OSCalendarTime *td) { - puts("OSTicksToCalendarTime is a stub"); -} - -BOOL OSUnlink(OSModuleInfo *oldModule) { - puts("OSUnlink is a stub"); - return FALSE; -} - -void OSWakeupThread(OSThreadQueue *queue) { puts("OSWakeupThread is a stub"); } - -void PPCHalt() { puts("PPCHalt is a stub"); } - -void SoundChoID(int a, int b) { puts("SoundChoID is a stub"); } - -void SoundPan(int a, int b, int c) { puts("SoundPan is a stub"); } - -void SoundPitch(u16 a, int b) { puts("SoundPitch is a stub"); } - -void SoundRevID(int a, int b) { puts("SoundRevID is a stub"); } +extern "C" { void VIConfigure(const GXRenderModeObj *rm) { puts("VIConfigure is a stub"); } @@ -409,38 +598,19 @@ void VIWaitForRetrace() { } } -s32 __CARDFormatRegionAsync(int a, int b) { - puts("__CARDFormatRegionAsync is a stub"); +void* VIGetCurrentFrameBuffer(void) { + puts("VIGetCurrentFrameBuffer is a stub"); + return NULL; +} + +u32 VIGetDTVStatus(void) { + puts("VIGetDTVStatus is a stub"); return 0; } -void __GXSetSUTexSize() { puts("__GXSetSUTexSize is a stub"); } - -void __GXSetVAT() { puts("__GXSetVAT is a stub"); } - -void __GXSetVCD() { puts("__GXSetVCD is a stub"); } - -void __GXUpdateBPMask() { puts("__GXUpdateBPMask is a stub"); } - -u32 __OSGetDIConfig() { - puts("__OSGetDIConfig is a stub"); - return 0; -} - -__OSInterruptHandler __OSSetInterruptHandler(__OSInterrupt interrupt, - __OSInterruptHandler handler) { - puts("__OSSetInterruptHandler is a stub"); - return 0; -} - -OSInterruptMask __OSUnmaskInterrupts(OSInterruptMask mask) { - puts("__OSUnmaskInterrupts is a stub"); - return 0; -} - -void SISetSamplingRate(u32 msec) { - // Maybe we could include SI later - puts("SISetSamplingRate is a stub"); +void* VIGetNextFrameBuffer(void) { + puts("VIGetNextFrameBuffer is a stub"); + return NULL; } VIRetraceCallback VISetPostRetraceCallback(VIRetraceCallback callback) { @@ -448,83 +618,835 @@ VIRetraceCallback VISetPostRetraceCallback(VIRetraceCallback callback) { return callback; } +VIRetraceCallback VISetPreRetraceCallback(VIRetraceCallback cb) { + puts("VISetPreRetraceCallback is a stub"); + return cb; +} + +} // extern "C" + +# pragma mark DSP +#include +extern "C" void __DSP_insert_task(DSPTaskInfo* task) { + puts("__DSP_insert_task is a stub"); +} + +extern "C" void __DSP_boot_task(DSPTaskInfo*) { + puts("__DSP_boot_task is a stub"); +} + +extern "C" void __DSP_exec_task(DSPTaskInfo*, DSPTaskInfo*) { + puts("__DSP_exec_task is a stub"); +} + +extern "C" void __DSP_remove_task(DSPTaskInfo* task) { + puts("__DSP_remove_task is a stub"); +} + +void DSPAssertInt(void) { + puts("DSPAssertInt is a stub"); +} +u32 DSPCheckMailFromDSP(void) { + puts("DSPCheckMailFromDSP is a stub"); + return 0; +} +u32 DSPCheckMailToDSP(void) { + puts("DSPCheckMailToDSP is a stub"); + return 0; +} +void DSPInit(void) { + puts("DSPInit is a stub"); +} +u32 DSPReadMailFromDSP(void) { + puts("DSPReadMailFromDSP is a stub"); + return 0; +} +void DSPSendMailToDSP(u32 mail) { + puts("DSPSendMailToDSP is a stub"); +} + +# pragma mark Z2Audio +#include +void Z2AudioCS::extensionProcess(s32, s32) { + puts("Z2AudioMgr::play is a stub"); +} + +# pragma mark JORServer +#include +void JORServer::releaseMCTX(JORMContext*) { + puts("releaseMCTX is a stub"); +} + +JORMContext* JORServer::attachMCTX(u32) { + puts("attachMCTX is a stub"); + return NULL; +} + +JORServer* JORServer::instance; + +void JORMContext::genCheckBoxSub(u32 kind, const char* label, u32 id, u32 style, u16 initValue, u16 mask, + JOREventListener* pListener, u16 posX, u16 posY, u16 width, + u16 height) { + puts("JORServer::genCheckBoxSub is a stub"); +} +void JORMContext::updateCheckBoxSub(u32 mode, u32 id, u16 value, u16 mask, u32 param_4) { + puts("JORServer::updateCheckBoxSub is a stub"); +} + +int JOREventCallbackListNode::JORAct(u32, const char*) { + return 0; +} + +# pragma mark JSUMemoryOutputStream +#include +s32 JSUMemoryOutputStream::getAvailable() const { + return mLength - mPosition; +} + +s32 JSUMemoryOutputStream::getPosition() const { + return mPosition; +} + +# pragma mark JSURandomOutputStream +#include +s32 JSUMemoryOutputStream::seek(s32 offset, JSUStreamSeekFrom origin) { + // XXX I think this is correct? could be broken. + return this->seekPos(offset, origin); +} + +# pragma mark JKRHeap +#include +JKRHeap* JKRHeap::sRootHeap2; // XXX this is defined for WII/SHIELD, should we just define it for dusk builds? + +# pragma mark mDoExt_onCupOnAupPacket +#include +mDoExt_offCupOnAupPacket::~mDoExt_offCupOnAupPacket() { + puts("mDoExt_onCupOffAupPacket_c destructor is a stub"); +} +# pragma mark mDoExt_onCupOffAupPacket +mDoExt_onCupOffAupPacket::~mDoExt_onCupOffAupPacket() { + puts("mDoExt_onCupOffAupPacket_c destructor is a stub"); +} + +# pragma mark mDoExt +namespace mDoExt { + u8 CurrentHeapAdjustVerbose; + u8 HeapAdjustVerbose; + u8 HeapAdjustQuiet; +}; + +# pragma mark dKankyo_vrboxHIO_c +#include +void dKankyo_vrboxHIO_c::dKankyo_vrboxHIOInfoUpDateF() { + puts("dKankyo_vrboxHIO_c::dKankyo_vrboxHIOInfoUpDateF is a stub"); +} + +void dKankyo_lightHIO_c::dKankyo_lightHIOInfoUpDateF() { + puts("dKankyo_lightHIO_c::dKankyo_lightHIOInfoUpDateF is a stub"); +} + +# pragma mark dKankyo_HIO_c +#include +dKankyo_HIO_c::dKankyo_HIO_c() { + light.m_displayTVColorSettings = FALSE; + vrbox.m_displayVrboxTVColorSettings = FALSE; +} + +dKankyo_ParticlelightHIO_c::dKankyo_ParticlelightHIO_c() { + field_0x5 = 0; + prim_col.r = 255; + prim_col.g = 255; + prim_col.b = 255; + prim_col.a = 255; + env_col.r = 255; + env_col.g = 255; + env_col.b = 255; + env_col.a = 255; + blend_ratio = 0.5f; + field_0x14 = 0; + type = 0; + field_0x19 = 1; + field_0x1a = 0; +} + +dKankyo_dungeonlightHIO_c::dKankyo_dungeonlightHIO_c() { + field_0x5 = 0; + usedLights = 0; + displayDebugSphere = 0; + field_0x8 = 0; + field_0x9 = 0; +} + +dKankyo_demolightHIO_c::dKankyo_demolightHIO_c() { + adjust_ON = 0; + light.mPosition.x = 0.0f; + light.mPosition.y = 0.0f; + light.mPosition.z = 0.0f; + light.mColor.r = 255; + light.mColor.g = 255; + light.mColor.b = 255; + light.mPow = 1000.0f; + light.mFluctuation = 0.0f; +} + +dKankyo_efflightHIO_c::dKankyo_efflightHIO_c() { + adjust_ON = 0; + power = 80.0f; + fluctuation = 100.0f; + + step1.start_frame = 1; + step1.r = 191; + step1.g = 150; + step1.b = 45; + + step2.start_frame = 4; + step2.r = 180; + step2.g = 60; + step2.b = 0; + + step3.start_frame = 8; + step3.r = 75; + step3.g = 15; + step3.b = 0; + + step4.start_frame = 15; + step4.r = 0; + step4.g = 0; + step4.b = 0; +} + +dKankyo_vrboxHIO_c::dKankyo_vrboxHIO_c() { + m_VrboxSetting = 0; + field_0x5 = 0; + field_0x7 = 0; + field_0x8 = 0; + field_0x9 = 0; + field_0xa = 0; + field_0xb = 0; + field_0xc = 0; + field_0xd = 0; + field_0xe = -1; + field_0xf = -1; + field_0x10 = -1; + field_0x11 = -1; + field_0x12 = -1; + field_0x13 = -1; + field_0x14 = 0; + m_horizonHeight = 0.0f; +} + +dKankyo_lightHIO_c::dKankyo_lightHIO_c() { + m_HOSTIO_setting = FALSE; + field_0x52 = 0; + m_forcedPalette = FALSE; + m_displayColorPaletteCheckInfo = TRUE; + + field_0x58 = 0.0f; + field_0x60 = 0; + field_0x61 = 0; + field_0x62 = 0; + field_0x63 = 0; + field_0x64 = 0; + field_0x65 = 0; + field_0x66 = 0; + field_0x67 = 0; + field_0x68 = 0; + field_0x69 = 0; + field_0x6a = 0; + field_0x6b = 0; + + m_BG_fakelight_R = 0; + m_BG_fakelight_G = 0; + m_BG_fakelight_B = 0; + m_BG_fakelight_power = 0.0f; + + field_0x80 = 0; +} + +dKankyo_bloomHIO_c::dKankyo_bloomHIO_c() { + field_0x4 = 0; + m_saturationPattern = 0; + field_0x5 = 0; + + for (int i = 0; i < 64; i++) { + dKydata_BloomInfo_c* bloominf = dKyd_BloomInf_tbl_getp(i); + bloom_info[i] = bloominf->info; + } +} + +dKankyo_windHIO_c::dKankyo_windHIO_c() { + display_wind_dir = 0; + use_HOSTIO_adjustment = 0; + field_0x8 = -1; + global_x_angle = 0; + global_y_angle = 0; + global_wind_power = 0.3f; + field_0x14 = 0.0; + field_0x18 = 35.0f; + field_0x1c = 6.0f; + display_wind_trajectory = 0; + lightsword_x_angle = 1800; + lightsword_init_scale = 500.0f; + lightsword_end_scale = 300.0f; + influence = 1.0f; + lightsword_move_speed = 150.0f; + influence_attenuation = 0.3f; + wind_change_speed = 0.05f; + minigame_no_wind_duration = 90; + minigame_low_wind_duration = 60; + minigame_high_wind_duration = 90; +} +dKankyo_navyHIO_c::dKankyo_navyHIO_c() { + field_0x5 = 0; + field_0x6 = 0; + field_0x8 = 12; + cloud_sunny_wind_influence_rate = 10.0f; + cloud_sunny_bottom_height = 2500.0f; + cloud_sunny_top_height = 2500.0f; + cloud_sunny_size = 0.6f; + cloud_sunny_height_shrink_rate = 0.9999f; + cloud_sunny_alpha = 1.0f; + cloud_cloudy_wind_influence_rate = 25.0f; + cloud_cloudy_bottom_height = 1200.0f; + cloud_cloudy_top_height = 1200.0f; + cloud_cloudy_size = 0.84f; + cloud_cloudy_height_shrink_rate = 0.96f; + cloud_cloudy_alpha = 1.0f; + field_0x3c = 4000.0f; + field_0x40 = 2000.0f; + field_0x44 = 2500.0f; + field_0x48 = 80.0f; + field_0x4c = 0.18f; + field_0x68 = 1; + field_0x69 = 3; + field_0x50 = 255.0f; + field_0x58 = 800.0f; + field_0x5c = 250.0f; + field_0x54 = 1.0f; + field_0x60 = 1000.0f; + field_0x64 = 0.2f; + housi_max_number = 300; + housi_max_alpha = 120.0f; + housi_max_scale = 9.0f; + field_0x74 = 45; + field_0x75 = 136; + field_0x76 = 170; + field_0x78 = 109; + field_0x79 = 60; + field_0x7a = 205; + field_0x7c = 120.0f; + field_0x80 = 100.0f; + field_0x84 = 0.2f; + field_0x8a = 0; + field_0x88 = 0; + field_0x80 = 0.0f; + moon_col.r = 0; + moon_col.g = 0; + moon_col.b = 0; + moon_col.a = 255; + moon_scale = 8000.0f; + field_0xb0.x = 16.5f; + field_0xb0.y = -2.0f; + field_0xb0.z = 30.0f; + field_0xbc = 160.0f; + field_0xc0 = 0.06f; + field_0xc4 = 200; + field_0xc8 = 3.0f; + field_0xcc = 60.0f; + field_0xd0 = 69; + field_0xd1 = 60; + field_0xd2 = 39; + field_0xd4 = 124; + field_0xd5 = 124; + field_0xd6 = 104; + field_0xd3 = 255; + field_0xd8 = 255; + field_0xd9 = 0; + field_0xda = 0; + field_0xdc = 255; + field_0xdd = 255; + field_0xde = 0; + field_0xe0 = 500; + field_0xe4 = 0.4f; + sun_col.r = 255; + sun_col.g = 255; + sun_col.b = 241; + sun_col2.r = 255; + sun_col2.g = 145; + sun_col2.b = 73; + sun_adjust_ON = 0; + smell_adjust_ON = 0; + smell_col.r = 255; + smell_col.g = 255; + smell_col.b = 115; + smell_col2.r = 80; + smell_col2.g = 50; + smell_col2.b = 0; + smell_alpha = 1.0f; + field_0xf0 = 190; + field_0xf1 = 120; + field_0xf2 = 120; + field_0x108 = 60; + field_0x109 = 0; + field_0x10a = 0; + field_0xf4 = 60; + field_0xf5 = 150; + field_0xf6 = 230; + field_0x10c = 50; + field_0x10d = 65; + field_0x10e = 80; + field_0xf8 = 80; + field_0xf9 = 80; + field_0xfa = 20; + field_0x110 = 30; + field_0x111 = 30; + field_0x112 = 10; + field_0xfc = 33; + field_0xfd = 255; + field_0xfe = 125; + field_0x114 = 33; + field_0x115 = 255; + field_0x116 = 125; + field_0x120 = 0.1f; + field_0x124 = 1.0f; + constellation_maker_ON = 0; + constellation_maker_pos[0].x = 5900.0f; + constellation_maker_pos[0].y = 14000.0f; + constellation_maker_pos[0].z = -16000.0f; + constellation_maker_pos[1].x = 7500.0f; + constellation_maker_pos[1].y = 14000.0f; + constellation_maker_pos[1].z = -14700.0f; + constellation_maker_pos[2].x = 8700.0f; + constellation_maker_pos[2].y = 13920.0f; + constellation_maker_pos[2].z = -14700.0f; + constellation_maker_pos[3].x = 10200.0f; + constellation_maker_pos[3].y = 14320.0f; + constellation_maker_pos[3].z = -15000.0f; + constellation_maker_pos[4].x = 12300.0f; + constellation_maker_pos[4].y = 15400.0f; + constellation_maker_pos[4].z = -18400.0f; + constellation_maker_pos[5].x = 13000.0f; + constellation_maker_pos[5].y = 13500.0f; + constellation_maker_pos[5].z = -15000.0f; + constellation_maker_pos[6].x = 13000.0f; + constellation_maker_pos[6].y = 15400.0f; + constellation_maker_pos[6].z = -14500.0f; + constellation_maker_pos[7].x = 13000.0f; + constellation_maker_pos[7].y = 15400.0f; + constellation_maker_pos[7].z = -14500.0f; + constellation_maker_pos[8].x = 13000.0f; + constellation_maker_pos[8].y = 15400.0f; + constellation_maker_pos[8].z = -14500.0f; + constellation_maker_pos[9].x = 13000.0f; + constellation_maker_pos[9].y = 15400.0f; + constellation_maker_pos[9].z = -14500.0f; + lightning_scale_x_min = 14.0f; + lightning_scale_x_max = 20.0f; + lightning_scale_y_min = 14.0f; + lightning_scale_y_max = 20.0f; + lightning_tilt_angle = 2000; + field_0x1b6 = 3; + lightning_debug_mode = 0; + collect_light_reflect_pos.x = 60000.0f; + collect_light_reflect_pos.y = -5000.0f; + collect_light_reflect_pos.z = 0.0f; + moya_alpha = 0.12f; + field_0x1c5 = 0; + thunder_col.r = 75; + thunder_col.g = 130; + thunder_col.b = 150; + thunder_height = 2000.0f; + thunder_blacken_rate = 0.75f; + water_in_col_ratio_R = 0.0f; + water_in_col_ratio_G = 0.4f; + water_in_col_ratio_B = 0.5f; + field_0x1e8 = -10.0f; + field_0x1ec = 40.0f; + field_0x1f0 = 50.0f; + field_0x1f4 = 200.0f; + field_0x1f8 = 0.0f; + field_0x1e4 = 80; + field_0x1e5 = 80; + field_0x1e6 = 80; + field_0x1fd = 2; + field_0x1fe = 3; + field_0x1ff = 0; + field_0x200 = 0; + mist_tag_fog_near = -2000.0f; + mist_tag_fog_far = 200.0f; + wipe_test_ON = 0xff; + field_0x210 = 0.0f; + fade_test_speed = 0; + field_0x215 = 1; + smell_railtag_space = 0.0f; + field_0x22a = 0; + field_0x22c = 0; + field_0x22d = 0; + light_adjust_ON = 0; + adjust_light_ambcol.r = 24; + adjust_light_ambcol.g = 24; + adjust_light_ambcol.b = 24; + adjust_light_dif0_col_R = 126; + adjust_light_dif0_col_G = 110; + adjust_light_dif0_col_B = 89; + adjust_light_dif1_col.r = 24; + adjust_light_dif1_col.g = 41; + adjust_light_dif1_col.b = 50; + adjust_light_main_pos.x = 500.0f; + adjust_light_main_pos.y = 500.0f; + adjust_light_main_pos.z = 500.0f; + mist_twilight_c1_col.r = 182; + mist_twilight_c1_col.g = 88; + mist_twilight_c1_col.b = 50; + mist_twilight_c1_col.a = 150; + mist_twilight_c2_col.r = 117; + mist_twilight_c2_col.g = 69; + mist_twilight_c2_col.b = 50; + mist_twilight_c2_col.a = 255; + field_0x264.r = 124; + field_0x264.g = 60; + field_0x264.b = 50; + field_0x267 = 255; + field_0x268 = 150; + adjust_custom_R = 70; + adjust_custom_G = 70; + adjust_custom_B = 70; + adjust_light_mode = 1; + adjust_height = 0.0f; + field_0x278 = 120.0f; + shadow_adjust_ON = 0; + shadow_normal_alpha = 0.4f; + shadow_max_alpha = 0.65f; + field_0x29c = 0; + field_0x27c = 70.0f; + field_0x280 = 0.05f; + field_0x284 = 1.5f; + field_0x288 = 0.00025f; + field_0x28c = 0.001f; + unk_color_1.r = 255; + unk_color_1.g = 255; + unk_color_1.b = 255; + unk_alpha_1 = 255; + unk_color_2.r = 0; + unk_color_2.g = 0; + unk_color_2.b = 0; + unk_alpha_2 = 255; + unk_color_3.r = 60; + unk_color_3.g = 30; + unk_color_3.b = 0; + unk_alpha_3 = 255; + field_0x29d = 1; + camera_light_col.r = 25; + camera_light_col.g = 90; + camera_light_col.b = 183; + camera_light_alpha = 255; + camera_light_y_shift = 1500.0f; + camera_light_power = 1.25f; + camera_light_cutoff = 90.0f; + camera_light_sp = 2; + camera_light_da = 3; + demo_adjust_SW = 0; + demo_focus_pos = 30; + demo_focus_offset_x = 0.0025f; + demo_focus_offset_y = 0.0025f; + grass_ambcol.r = 0; + grass_ambcol.g = 0; + grass_ambcol.b = 0; + grass_adjust_ON = 0; + grass_shine_value = 0.0f; + stars_max_number = 0xffff; + display_save_location = 0; + unk_light_influence_ratio = 100; + door_light_influence_ratio = 255; + fish_pond_colreg_adjust_ON = 0; + fish_pond_colreg_c0.r = 0; + fish_pond_colreg_c0.g = 0; + fish_pond_colreg_c0.b = 0; + water_mud_adjust_ON = 0; + field_0x2ea = 0; + field_0x2ec = 0; + fish_pond_tree_adjust_ON = 0; + fish_pond_tree_ambcol.r = 0; + fish_pond_tree_ambcol.g = 0; + fish_pond_tree_ambcol.b = 0; + fish_pond_tree_dif0_col.r = 0; + fish_pond_tree_dif0_col.g = 0; + fish_pond_tree_dif0_col.b = 0; + fish_pond_tree_dif1_col.r = 0; + fish_pond_tree_dif1_col.g = 0; + fish_pond_tree_dif1_col.b = 0; + rainbow_adjust_ON = 0; + rainbow_separation_dist = 4500; + rainbow_max_alpha = 175; + field_0x2ff = 0; + grass_light_influence_ratio = 100; + grass_light_debug = 0; + field_0x302 = 2000; + field_0x304 = 0.6f; + field_0x308 = 0; + moya_col.r = 255; + moya_col.g = 255; + moya_col.b = 255; + field_0x30d = 0; + twilight_sense_saturation_mode = 0; + twilight_sense_pat = 0; + twilight_sense_pat_tv_display_ON = 0; + camera_light_adjust_ON = 0; + possessed_zelda_light_col.r = 30; + possessed_zelda_light_col.g = 55; + possessed_zelda_light_col.b = 110; + possessed_zelda_light_alpha = 255; + possessed_zelda_light_height = -800.0f; + possessed_zelda_light_power = 250.0f; + beast_ganon_light_col.r = 60; + beast_ganon_light_col.g = 95; + beast_ganon_light_col.b = 100; + beast_ganon_light_alpha = 255; + beast_ganon_light_height = -800.0f; + beast_ganon_light_power = 150.0f; + water_in_light_col.r = 138; + water_in_light_col.g = 192; + water_in_light_col.b = 188; +} + +# pragma mark AI +#include +u32 AIGetDSPSampleRate(void) { + puts("AIGetDSPSampleRate is a stub"); + return 48000; // Default sample rate? +} + +void AIInit(u8* stack) { + puts("AIInit is a stub"); + // This function initializes the AI system, but we don't have any specific implementation here. + // In a real scenario, it would set up the audio interface and prepare it for use. +} + +void AIInitDMA(u32 start_addr, u32 length) { + puts("AIInitDMA is a stub"); +} + +AIDCallback AIRegisterDMACallback(AIDCallback callback) { + puts("AIRegisterDMACallback is a stub"); + return callback; +} + +void AISetDSPSampleRate(u32 rate) { + // Should this link with the getsamplerate? this is very TODO + puts("AISetDSPSampleRate is a stub"); +} + +void AIStartDMA(void) { + puts("AIStartDMA is a stub"); +} + +void AIStopDMA(void) { + puts("AIStopDMA is a stub"); +} + +# pragma mark AR +#include +// Auxilary RAM doesn't exist on PC platforms, do we need to call malloc/free for these instead? +// For now, we will just stub these functions. +u32 ARAlloc(u32 length) { + puts("ARAlloc is a stub"); + return 0; +} + +u32 ARGetSize(void) { + return 0x10000; // 64KB, this is the size of the AR memory region +} + +u32 ARInit(u32* stack_index_addr, u32 num_entries) { + puts("ARInit is a stub"); + return 0; +} + +# pragma mark ARQ +void ARQPostRequest(ARQRequest* request, u32 owner, u32 type, u32 priority, u32 source, u32 dest, u32 length, ARQCallback callback) { + puts("ARQPostRequest is a stub"); +} + +void ARQInit() { + puts("ARQInit is a stub"); +} + +# pragma mark DVD +#include +s32 DVDCancel(volatile DVDCommandBlock* block) { + puts("DVDCancel is a stub"); + return 0; +} +s32 DVDCancel(DVDCommandBlock* block) { + puts("DVDCancel is a stub"); + return 0; +} +BOOL DVDChangeDir(const char* dirName) { + puts("DVDChangeDir is a stub"); + return TRUE; +} +BOOL DVDCheckDisk(void) { + puts("DVDCheckDisk is a stub"); + return TRUE; +} +BOOL DVDClose(DVDFileInfo* fileInfo) { + puts("DVDClose is a stub"); + return TRUE; +} +int DVDCloseDir(DVDDir* dir) { + puts("DVDCloseDir is a stub"); + return 0; +} +s32 DVDConvertPathToEntrynum(const char* pathPtr) { + puts("DVDConvertPathToEntrynum is a stub"); + return 0; +} +BOOL DVDFastOpen(s32 entrynum, DVDFileInfo* fileInfo) { + puts("DVDFastOpen is a stub"); + return TRUE; +} +s32 DVDGetCommandBlockStatus(const DVDCommandBlock* block) { + puts("DVDGetCommandBlockStatus is a stub"); + return 0; +} +DVDDiskID* DVDGetCurrentDiskID(void) { + puts("DVDGetCurrentDiskID is a stub"); + return NULL; +} +s32 DVDGetDriveStatus(void) { + puts("DVDGetDriveStatus is a stub"); + return 0; +} +void DVDInit(void) { + puts("DVDInit is a stub"); +} +BOOL DVDOpen(const char* fileName, DVDFileInfo* fileInfo) { + puts("DVDOpen is a stub"); + return TRUE; +} +int DVDOpenDir(const char* dirName, DVDDir* dir) { + puts("DVDOpenDir is a stub"); + return 0; +} +BOOL DVDReadAsyncPrio(DVDFileInfo* fileInfo, void* addr, s32 length, s32 offset, + DVDCallback callback, s32 prio) { + puts("DVDReadAsyncPrio is a stub"); + return TRUE; +} +int DVDReadDir(DVDDir* dir, DVDDirEntry* dirent) { + puts("DVDReadDir is a stub"); + return 0; +} +s32 DVDReadPrio(DVDFileInfo* fileInfo, void* addr, s32 length, s32 offset, s32 prio) { + puts("DVDReadPrio is a stub"); + return 0; +} + +void DVDReadAbsAsyncForBS(void *a, struct bb2struct *b, int c, int d, + void (*e)()) { + puts("DVDReadAbsAsyncForBS is a stub"); +} + +void DVDReadDiskID(void *a, DVDDiskID *b, void (*c)()) { + puts("DVDReadDiskID is a stub"); +} + +void DVDReset() { + puts("DVDReset is a stub"); +} + +# pragma mark GD +#include +#include +void GDFlushCurrToMem(void) { + puts("GDFlushCurrToMem is a stub"); +} +void GDInitGDLObj(GDLObj* dl, void* start, u32 length) { + puts("GDInitGDLObj is a stub"); +} +void GDOverflowed(void) { + puts("GDOverflowed is a stub"); +} +void GDPadCurr32(void) { + puts("GDPadCurr32 is a stub"); +} +void GDSetArray(GXAttr attr, void* base_ptr, u8 stride) { + puts("GDSetArray is a stub"); +} +void GDSetArrayRaw(GXAttr attr, u32 base_ptr_raw, u8 stride) { + puts("GDSetArrayRaw is a stub"); +} +void GDSetVtxDescv(const GXVtxDescList* attrPtr) { + puts("GDSetVtxDescv is a stub"); +} + +# pragma mark GX +#include + +// Moved-in GX helpers and helpers for metrics/project +void __GXSetSUTexSize() { puts("__GXSetSUTexSize is a stub"); } +void __GXSetVAT() { puts("__GXSetVAT is a stub"); } +void __GXSetVCD() { puts("__GXSetVCD is a stub"); } +void __GXUpdateBPMask() { puts("__GXUpdateBPMask is a stub"); } + void GXSetGPMetric(GXPerf0 perf0, GXPerf1 perf1) { // puts("GXSetGPMetric is a stub"); } - void GXReadGPMetric(u32 *cnt0, u32 *cnt1) { // puts("GXReadGPMetric is a stub"); } - void GXClearGPMetric(void) { // puts("GXClearGPMetric is a stub"); } - void GXReadMemMetric(u32 *cp_req, u32 *tc_req, u32 *cpu_rd_req, u32 *cpu_wr_req, u32 *dsp_req, u32 *io_req, u32 *vi_req, u32 *pe_req, u32 *rf_req, u32 *fi_req) { // puts("GXReadMemMetric is a stub"); } - void GXClearMemMetric(void) { // puts("GXClearMemMetric is a stub"); } - void GXClearVCacheMetric(void) { // puts("GXClearVCacheMetric is a stub"); } - void GXReadPixMetric(u32 *top_pixels_in, u32 *top_pixels_out, u32 *bot_pixels_in, u32 *bot_pixels_out, u32 *clr_pixels_in, u32 *copy_clks) { // puts("GXReadPixMetric is a stub"); } - void GXClearPixMetric(void) { // puts("GXClearPixMetric is a stub"); } - void GXSetVCacheMetric(GXVCachePerf attr) { // puts("GXSetVCacheMetric is a stub"); } - void GXReadVCacheMetric(u32 *check, u32 *miss, u32 *stall) { // puts("GXReadVCacheMetric is a stub"); } - void GXSetDrawSync(u16 token) { // puts("GXSetDrawSync is a stub"); } - GXDrawSyncCallback GXSetDrawSyncCallback(GXDrawSyncCallback cb) { puts("GXSetDrawSyncCallback is a stub"); - // TODO return cb; } - -void PPCSync(void) { - // puts("PPCSync is a stub"); +void GXDrawCylinder(u8 numEdges) { + puts("GXDrawCylinder is a stub"); } - void GXWaitDrawDone(void) { // puts("GXWaitDrawDone is a stub"); } - void GXSetTevIndTile(GXTevStageID tev_stage, GXIndTexStageID ind_stage, u16 tilesize_s, u16 tilesize_t, u16 tilespacing_s, u16 tilespacing_t, GXIndTexFormat format, GXIndTexMtxID matrix_sel, GXIndTexBiasSel bias_sel, GXIndTexAlphaSel alpha_sel) { // TODO - // puts("GXSetTevIndTile is a stub"); } - void GXResetWriteGatherPipe(void) { // puts("GXResetWriteGatherPipe is a stub"); } -void ARQInit(void) { puts("ARQInit is a stub"); } - void GXProject(f32 x, f32 y, f32 z, const f32 mtx[3][4], const f32 *pm, const f32 *vp, f32 *sx, f32 *sy, f32 *sz) { Vec peye; @@ -551,575 +1473,116 @@ void GXProject(f32 x, f32 y, f32 z, const f32 mtx[3][4], const f32 *pm, *sy = (vp[3] / 2.0f) + (vp[1] + (wc * (-yc * vp[3] / 2.0f))); *sz = vp[5] + (wc * (zc * (vp[5] - vp[4]))); } - -void GXGetViewportv(f32 *vp) { - // TODO -} - -void OSSetSoundMode(u32 mode) {} - -u32 AIGetDSPSampleRate(void) { - puts("AIGetDSPSampleRate is a stub"); - return 0; -} - -void AIInit(u8* stack) { - puts("AIInit is a stub"); -} - -void AIInitDMA(u32 start_addr, u32 length) { - puts("AIInitDMA is a stub"); -} - -AIDCallback AIRegisterDMACallback(AIDCallback callback) { - puts("AIRegisterDMACallback is a stub"); - return NULL; -} - -void AISetDSPSampleRate(u32 rate) { - puts("AISetDSPSampleRate is a stub"); -} - -void AIStartDMA(void) { - puts("AIStartDMA is a stub"); -} - -void AIStopDMA(void) { - puts("AIStopDMA is a stub"); -} - -u32 ARAlloc(u32 length) { - puts("ARAlloc is a stub"); - return 0; -} - -u32 ARGetSize(void) { - puts("ARGetSize is a stub"); - return 0; -} - -u32 ARInit(u32* stack_index_addr, u32 num_entries) { - puts("ARInit is a stub"); - return 0; -} - -void ARQPostRequest(ARQRequest* request, u32 owner, u32 type, u32 priority, u32 source, u32 dest, u32 length, ARQCallback callback) { - puts("ARQPostRequest is a stub"); -} - -int CARDProbe(s32 chan) { - puts("CARDProbe is a stub"); - return 0; -} - -void C_MTXLightOrtho(Mtx m, f32 t, f32 b, f32 l, f32 r, f32 scaleS, f32 scaleT, f32 transS, - f32 transT) { - puts("C_MTXLightOrtho is a stub"); -} - -void C_MTXLightPerspective(Mtx m, f32 fovY, f32 aspect, f32 scaleS, f32 scaleT, f32 transS, - f32 transT) { - puts("C_MTXLightPerspective is a stub"); -} - -void C_MTXLookAt(Mtx m, const Point3d* camPos, const Vec* camUp, const Point3d* target) { - puts("C_MTXLookAt is a stub"); -} - -void C_MTXOrtho(Mtx44 m, f32 t, f32 b, f32 l, f32 r, f32 n, f32 f) { - puts("C_MTXOrtho is a stub"); -} - -void C_MTXPerspective(Mtx44 m, f32 fovY, f32 aspect, f32 n, f32 f) { - puts("C_MTXPerspective is a stub"); -} - -void C_MTXRotAxisRad(Mtx m, const Vec* axis, f32 rad) { - puts("C_MTXRotAxisRad is a stub"); -} - -void C_QUATRotAxisRad(Quaternion* r, const Vec* axis, f32 rad) { - puts("C_QUATRotAxisRad is a stub"); -} - -void C_QUATSlerp(const Quaternion* p, const Quaternion* q, Quaternion* r, f32 t) { - puts("C_QUATSlerp is a stub"); -} - -void C_VECHalfAngle(const Vec* a, const Vec* b, Vec* half) { - puts("C_VECHalfAngle is a stub"); -} - -void C_VECReflect(const Vec* src, const Vec* normal, Vec* dst) { - puts("C_VECReflect is a stub"); -} - -void DCZeroRange(void* addr, u32 nBytes) { - puts("C_VECReflect is a stub"); -} - -void DSPAssertInt(void) { - puts("DSPAssertInt is a stub"); -} - -u32 DSPCheckMailFromDSP(void) { - puts("DSPCheckMailFromDSP is a stub"); - return 0; -} - -u32 DSPCheckMailToDSP(void) { - puts("DSPCheckMailToDSP is a stub"); - return 0; -} - -void DSPInit(void) { - puts("DSPInit is a stub"); -} - -u32 DSPReadMailFromDSP(void) { - puts("DSPReadMailFromDSP is a stub"); - return 0; -} - -void DSPSendMailToDSP(u32 mail) { - puts("DSPSendMailToDSP is a stub"); -} - -BOOL DVDChangeDir(const char* dirName) { - puts("DVDChangeDir is a stub"); - return FALSE; -} - -BOOL DVDCheckDisk(void) { - puts("DVDCheckDisk is a stub"); - return FALSE; -} - -BOOL DVDClose(DVDFileInfo* fileInfo) { - puts("DVDClose is a stub"); - return FALSE; -} - -int DVDCloseDir(DVDDir* dir) { - puts("DVDCloseDir is a stub"); - return 0; -} - -s32 DVDConvertPathToEntrynum(const char* pathPtr) { - puts("DVDConvertPathToEntrynum is a stub"); - return 0; -} - -BOOL DVDFastOpen(s32 entrynum, DVDFileInfo* fileInfo) { - puts("DVDFastOpen is a stub"); - return FALSE; -} - -s32 DVDGetCommandBlockStatus(const DVDCommandBlock* block) { - puts("DVDGetCommandBlockStatus is a stub"); - return 0; -} - -DVDDiskID* DVDGetCurrentDiskID(void) { - puts("DVDGetCurrentDiskID is a stub"); - return NULL; -} - -s32 DVDGetDriveStatus(void) { - puts("DVDGetDriveStatus is a stub"); - return 0; -} - -void DVDInit(void) { - puts("DVDInit is a stub"); -} - -BOOL DVDOpen(const char* fileName, DVDFileInfo* fileInfo) { - puts("DVDOpen is a stub"); - return FALSE; -} - -int DVDOpenDir(const char* dirName, DVDDir* dir) { - puts("DVDOpenDir is a stub"); - return 0; -} - -BOOL DVDReadAsyncPrio(DVDFileInfo* fileInfo, void* addr, s32 length, s32 offset, - DVDCallback callback, s32 prio) { - puts("DVDReadAsyncPrio is a stub"); - return FALSE; -} - -int DVDReadDir(DVDDir* dir, DVDDirEntry* dirent) { - puts("DVDReadDir is a stub"); - return 0; -} - -s32 DVDReadPrio(DVDFileInfo* fileInfo, void* addr, s32 length, s32 offset, s32 prio) { - puts("DVDReadPrio is a stub"); - return 0; -} - -void GDFlushCurrToMem(void) { - puts("GDFlushCurrToMem is a stub"); -} - -void GDInitGDLObj(GDLObj* dl, void* start, u32 length) { - puts("GDInitGDLObj is a stub"); -} - -void GDOverflowed(void) { - puts("GDOverflowed is a stub"); -} - -void GDPadCurr32(void) { - puts("GDPadCurr32 is a stub"); -} - -extern "C" { - -void GDSetArray(GXAttr attr, void* base_ptr, u8 stride) { - puts("GDSetArray is a stub"); -} - -void GDSetArrayRaw(GXAttr attr, u32 base_ptr_raw, u8 stride) { - puts("GDSetArrayRaw is a stub"); -} - -void GDSetVtxDescv(const GXVtxDescList* attrPtr) { - puts("GDSetVtxDescv is a stub"); -} - -} - void GXAbortFrame(void) { puts("GXAbortFrame is a stub"); } - -void GXEnableTexOffsets(GXTexCoordID coord, GXBool line_enable, GXBool point_enable) { +void GXEnableTexOffsets(GXTexCoordID coord, u8 line_enable, u8 point_enable) { puts("GXEnableTexOffsets is a stub"); } - OSThread* GXGetCurrentGXThread(void) { puts("GXGetCurrentGXThread is a stub"); return NULL; } - void* GXGetFifoBase(const GXFifoObj* fifo) { puts("GXGetFifoBase is a stub"); return NULL; } - u32 GXGetFifoSize(const GXFifoObj* fifo) { puts("GXGetFifoSize is a stub"); return 0; } - u16 GXGetNumXfbLines(u16 efbHeight, f32 yScale) { puts("GXGetNumXfbLines is a stub"); return 0; } - +void GXGetViewportv(f32* vp) { + puts("GXGetViewportv is a stub"); +} void GXGetScissor(u32* left, u32* top, u32* wd, u32* ht) { puts("GXGetScissor is a stub"); } - u32 GXGetTexObjTlut(const GXTexObj* tex_obj) { puts("GXGetTexObjTlut is a stub"); return 0; } - f32 GXGetYScaleFactor(u16 efbHeight, u16 xfbHeight) { puts("GXGetYScaleFactor is a stub"); - return 0.f; + return 0.0f; } - -void GXInitTexCacheRegion(GXTexRegion* region, GXBool is_32b_mipmap, u32 tmem_even, GXTexCacheSize size_even, - u32 tmem_odd, GXTexCacheSize size_odd) { +void GXInitTexCacheRegion(GXTexRegion* region, u8 is_32b_mipmap, u32 tmem_even, GXTexCacheSize size_even, u32 tmem_odd, GXTexCacheSize size_odd) { puts("GXInitTexCacheRegion is a stub"); } - -GXRenderModeObj GXNtsc480Int = { - (VITVMode)0, 640, 480, 480, 40, 0, 640, 480, (VIXFBMode)1, 0, 0, { 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6 }, { 0, 0, 21, 22, 21, 0, 0 } -}; - +// XXX, this should be some struct? +GXRenderModeObj GXNtsc480IntDf; +GXRenderModeObj GXNtsc480Int; void GXPeekZ(u16 x, u16 y, u32* z) { puts("GXPeekZ is a stub"); + *z = 0; } - void GXReadXfRasMetric(u32* xf_wait_in, u32* xf_wait_out, u32* ras_busy, u32* clocks) { puts("GXReadXfRasMetric is a stub"); + *xf_wait_in = 0; + *xf_wait_out = 0; + *ras_busy = 0; + *clocks = 0; } - void GXSetClipMode(GXClipMode mode) { puts("GXSetClipMode is a stub"); } - void GXSetCoPlanar(GXBool enable) { puts("GXSetCoPlanar is a stub"); } - void GXSetCopyClamp(GXFBClamp clamp) { puts("GXSetCopyClamp is a stub"); } - OSThread* GXSetCurrentGXThread(void) { puts("GXSetCurrentGXThread is a stub"); return NULL; } - -void GXSetFogRangeAdj(GXBool enable, u16 center, const GXFogAdjTable* table) { +void GXSetFogRangeAdj(GXBool enable, u16 center, const GXFogAdjTable *table) { puts("GXSetFogRangeAdj is a stub"); } - void GXSetMisc(GXMiscToken token, u32 val) { puts("GXSetMisc is a stub"); } - void GXSetPointSize(u8 pointSize, GXTexOffset texOffsets) { puts("GXSetPointSize is a stub"); } - void GXSetProjectionv(const f32* ptr) { puts("GXSetProjectionv is a stub"); } - void GXSetVtxAttrFmtv(GXVtxFmt vtxfmt, const GXVtxAttrFmtList* list) { puts("GXSetVtxAttrFmtv is a stub"); } +# pragma mark KPAD +// is this actually used? +extern "C" void KPADDisableDPD(s32) { + puts("KPADDisableDPD is a stub"); + +} +extern "C" void KPADEnableDPD(s32) { + puts("KPADEnableDPD is a stub"); +} + +// LC (consolidated above) void LCDisable(void) { puts("LCDisable is a stub"); } - -void LCQueueWait(u32 len) { +void LCQueueWait(__REGISTER u32 len) { puts("LCQueueWait is a stub"); } - u32 LCStoreData(void* destAddr, void* srcAddr, u32 nBytes) { puts("LCStoreData is a stub"); return 0; } -void* OSAllocFromArenaLo(u32 size, u32 align) { - puts("OSAllocFromArenaLo is a stub"); - return NULL; -} +# pragma mark PPC Arch +// MSR stuff? +void PPCHalt() { puts("PPCHalt is a stub"); } -void OSCancelAlarm(OSAlarm *alarm) { - puts("OSCancelAlarm is a stub"); -} - -void OSCancelThread(OSThread* thread) { - puts("OSCancelThread is a stub"); -} - -s32 OSCheckActiveThreads(void) { - puts("OSCheckActiveThreads is a stub"); - return 0; -} - -void OSCreateAlarm(OSAlarm* alarm) { - puts("OSCreateAlarm is a stub"); -} - -int OSCreateThread(OSThread* thread, void* (*func)(void*), void* param, void* stack, u32 stackSize, OSPriority priority, u16 attr) { - puts("OSCreateThread is a stub"); - return 0; -} - -void OSDetachThread(OSThread* thread) { - puts("OSDetachThread is a stub"); -} - -s32 OSDisableScheduler(void) { - puts("OSDisableScheduler is a stub"); - return 0; -} - -BOOL OSEnableInterrupts(void) { - puts("OSEnableInterrupts is a stub"); - return FALSE; -} - -s32 OSEnableScheduler(void) { - puts("OSEnableScheduler is a stub"); - return 0; -} - -void OSExitThread(void* val) { - puts("OSExitThread is a stub"); -} - -void OSFillFPUContext(OSContext* context) { - puts("OSFillFPUContext is a stub"); -} - -void* OSGetArenaHi(void) { - puts("OSGetArenaHi is a stub"); - return NULL; -} - -void* OSGetArenaLo(void) { - puts("OSGetArenaLo is a stub"); - return NULL; -} - -OSContext* OSGetCurrentContext(void) { - puts("OSGetCurrentContext is a stub"); - return NULL; -} - -u32 OSGetProgressiveMode(void) { - puts("OSGetProgressiveMode is a stub"); - return 0; -} - -u32 OSGetResetCode() { - puts("OSGetResetCode is a stub"); - return 0; -} - -BOOL OSGetResetSwitchState(void) { - puts("OSGetResetSwitchState is a stub"); - return FALSE; -} - -s32 OSGetThreadPriority(OSThread* thread) { - puts("OSGetThreadPriority is a stub"); - return 0; -} - -OSTick OSGetTick(void) { - puts("OSGetTick is a stub"); - return 0; -} - -OSTime OSGetTime(void) { - puts("OSGetTime is a stub"); - return 0; -} - -void OSInit(void) { - puts("OSInit is a stub"); -} - -void* OSInitAlloc(void* arenaStart, void* arenaEnd, int maxHeaps) { - puts("OSInitAlloc is a stub"); - return NULL; -} - -void OSInitCond(OSCond* cond) { - puts("OSInitCond is a stub"); -} - -void OSInitMessageQueue(OSMessageQueue* mq, void* msgArray, s32 msgCount) { - puts("OSInitMessageQueue is a stub"); -} - -void OSInitMutex(OSMutex* mutex) { - puts("OSInitMutex is a stub"); -} - -void OSInitThreadQueue(OSThreadQueue* queue) { - puts("OSInitThreadQueue is a stub"); -} - -BOOL OSIsThreadTerminated(OSThread* thread) { - puts("OSIsThreadTerminated is a stub"); - return FALSE; -} - -int OSJamMessage(OSMessageQueue* mq, void* msg, s32 flags) { - puts("OSJamMessage is a stub"); - return 0; -} - -BOOL OSLinkFixed(OSModuleInfo* newModule, void* bss) { - puts("OSLinkFixed is a stub"); - return FALSE; -} - -void OSLockMutex(OSMutex* mutex) { - puts("OSLockMutex is a stub"); -} - -void OSProtectRange(u32 chan, void* addr, u32 nBytes, u32 control) { - puts("OSProtectRange is a stub"); -} - -int OSReceiveMessage(OSMessageQueue* mq, void* msg, s32 flags) { - puts("OSReceiveMessage is a stub"); - return 0; -} - -int OSSendMessage(OSMessageQueue* mq, void* msg, s32 flags) { - puts("OSSendMessage is a stub"); - return 0; -} - -void OSSetAlarm(OSAlarm* alarm, OSTime tick, OSAlarmHandler handler) { - puts("OSSetAlarm is a stub"); -} - -void OSSetArenaHi(void* newHi) { - puts("OSSetArenaHi is a stub"); -} - -void OSSetArenaLo(void* newLo) { - puts("OSSetArenaLo is a stub"); -} - -OSErrorHandler OSSetErrorHandler(OSError error, OSErrorHandler handler) { - puts("OSSetErrorHandler is a stub"); - return NULL; -} - -void OSSetPeriodicAlarm(OSAlarm* alarm, OSTime start, OSTime period, OSAlarmHandler handler) { - puts("OSSetPeriodicAlarm is a stub"); -} - -void OSSetProgressiveMode(u32 on) { - puts("OSSetProgressiveMode is a stub"); -} - -void OSSetSaveRegion(void* start, void* end) { - puts("OSSetSaveRegion is a stub"); -} - -OSSwitchThreadCallback OSSetSwitchThreadCallback(OSSwitchThreadCallback callback) { - puts("OSSetSwitchThreadCallback is a stub"); - return NULL; -} - -int OSSetThreadPriority(OSThread* thread, OSPriority priority) { - puts("OSSetThreadPriority is a stub"); - return 0; -} - -void OSSignalCond(OSCond* cond) { - puts("OSSignalCond is a stub"); -} - -void OSSleepThread(OSThreadQueue* queue) { - puts("OSSleepThread is a stub"); -} - -BOOL OSTryLockMutex(OSMutex* mutex) { - puts("OSTryLockMutex is a stub"); - return FALSE; -} - -void OSUnlockMutex(OSMutex* mutex) { - puts("OSUnlockMutex is a stub"); -} - -void OSWaitCond(OSCond* cond, OSMutex* mutex) { - puts("OSWaitCond is a stub"); -} - -void OSYieldThread(void) { - puts("OSYieldThread is a stub"); +extern "C" void PPCSync(void) { + // puts("PPCSync is a stub"); } u32 PPCMfhid2() { @@ -1136,185 +1599,63 @@ void PPCMtmsr(u32 newMSR) { puts("PPCMtmsr is a stub"); } -void PSMTXConcat(const Mtx a, const Mtx b, Mtx ab) { - puts("PSMTXConcat is a stub"); -} - -void PSMTXCopy(const Mtx src, Mtx dst) { - puts("PSMTXCopy is a stub"); -} - -void PSMTXIdentity(Mtx m) { - puts("PSMTXIdentity is a stub"); -} - -u32 PSMTXInverse(const Mtx src, Mtx inv) { - puts("PSMTXInverse is a stub"); - return 0; -} - -void PSMTXMultVec(const Mtx m, const Vec* src, Vec* dst) { - puts("PSMTXMultVec is a stub"); -} - -void PSMTXMultVecArray(const Mtx m, const Vec* srcBase, Vec* dstBase, u32 count) { - puts("PSMTXMultVecArray is a stub"); -} - -void PSMTXMultVecArraySR(const Mtx m, const Vec* srcBase, Vec* dstBase, u32 count) { - puts("PSMTXMultVecArraySR is a stub"); -} - -void PSMTXMultVecSR(const Mtx m, const Vec* src, Vec* dst) { - puts("PSMTXMultVecSR is a stub"); -} - -void PSMTXQuat(Mtx m, const Quaternion* q) { - puts("PSMTXQuat is a stub"); -} - -void PSMTXRotAxisRad(Mtx m, const Vec* axis, f32 rad) { - puts("PSMTXRotAxisRad is a stub"); -} - -void PSMTXRotRad(Mtx m, char axis, f32 rad) { - puts("PSMTXRotRad is a stub"); -} - -void PSMTXScale(Mtx m, f32 xS, f32 yS, f32 zS) { - puts("PSMTXScale is a stub"); -} - -void PSMTXScaleApply(const Mtx src, Mtx dst, f32 xS, f32 yS, f32 zS) { - puts("PSMTXScaleApply is a stub"); -} - -void PSMTXTrans(Mtx m, f32 xT, f32 yT, f32 zT) { - puts("PSMTXTrans is a stub"); -} - -void PSMTXTransApply(const Mtx src, Mtx dst, f32 xT, f32 yT, f32 zT) { - puts("PSMTXTransApply is a stub"); -} - -void PSQUATMultiply(const Quaternion* p, const Quaternion* q, Quaternion* pq) { - puts("PSQUATMultiply is a stub"); -} - -void PSVECAdd(const Vec* a, const Vec* b, Vec* ab) { - puts("PSVECAdd is a stub"); -} - -void PSVECCrossProduct(const Vec* a, const Vec* b, Vec* axb) { - puts("PSVECCrossProduct is a stub"); -} - -f32 PSVECDistance(const Vec* a, const Vec* b) { - puts("PSVECDistance is a stub"); - return 0.f; -} - -f32 PSVECDotProduct(const Vec* a, const Vec* b) { - puts("PSVECDotProduct is a stub"); - return 0.f; -} - -f32 PSVECMag(const Vec* v) { - puts("PSVECMag is a stub"); - return 0.f; -} - -void PSVECNormalize(const Vec* src, Vec* unit) { - puts("PSVECNormalize is a stub"); -} - -void PSVECScale(const Vec* src, Vec* dst, f32 scale) { - puts("PSVECScale is a stub"); -} - -f32 PSVECSquareDistance(const Vec* a, const Vec* b) { - puts("PSVECSquareDistance is a stub"); - return 0.f; -} - -f32 PSVECSquareMag(const Vec* v) { - puts("PSVECSquareMag is a stub"); - return 0.f; -} - -void PSVECSubtract(const Vec* a, const Vec* b, Vec* a_b) { - puts("PSVECSubtract is a stub"); -} - -void* VIGetCurrentFrameBuffer(void) { - puts("VIGetCurrentFrameBuffer is a stub"); - return NULL; -} - -u32 VIGetDTVStatus(void) { - puts("VIGetDTVStatus is a stub"); - return 0; -} - -void* VIGetNextFrameBuffer(void) { - puts("VIGetNextFrameBuffer is a stub"); - return NULL; -} - -VIRetraceCallback VISetPreRetraceCallback(VIRetraceCallback cb) { - puts("VISetPreRetraceCallback is a stub"); - return NULL; +# pragma mark WPAD +// uh.. this is revolution include not dolphin? +typedef void (*WPADExtensionCallback)(s32 chan, s32 devType); +extern "C" WPADExtensionCallback WPADSetExtensionCallback(s32 chan, WPADExtensionCallback cb) { + puts("WPADSetExtensionCallback is a stub"); + return cb; } +# pragma mark GF +#include void GFSetZMode(u8 compare_enable, GXCompare func, u8 update_enable) { puts("GFSetZMode is a stub"); } - void GFSetGenMode2(u8 nTexGens, u8 nChans, u8 nTevs, u8 nInds, GXCullMode cm) { puts("GFSetGenMode2 is a stub"); } - -void OSSwitchFiberEx(u32 a, u32 b, u32 c, u32 d, u32 e, u32 f) { - puts("OSSwitchFiberEx is a stub"); -} - void GFSetTevColorS10(GXTevRegID reg, GXColorS10 color) { puts("GFSetTevColorS10 is a stub"); } - void GFSetBlendModeEtc(GXBlendMode type, GXBlendFactor src_factor, GXBlendFactor dst_factor, GXLogicOp logic_op, u8 color_update_enable, u8 alpha_update_enable, u8 dither_enable) { puts("GFSetBlendModeEtc is a stub"); } - void GFSetChanAmbColor(GXChannelID chan, GXColor color) { puts("GFSetChanAmbColor is a stub"); } - -void J3DPSMtxArrayConcat(f32 (*a)[4], f32 (*b)[4], f32 (*c)[4], u32 d) { - puts("J3DPSMtxArrayConcat is a stub"); -} - -void __dcbz(void* a, int b) { - puts("__dcbz is a stub"); -} - void GFSetFog(GXFogType type, f32 startz, f32 endz, f32 nearz, f32 farz, GXColor color) { puts("GFSetFog is a stub"); } -int __cntlzw(unsigned int a) { - puts("__cntlzw is a stub"); - return 0; +# pragma mark DEBUGPAD +#include +dDebugPad_c::dDebugPad_c() { + puts("constructing debug pad, stubbed?"); } -void* __memcpy(void* a, const void* b, int c) { - puts("__cntlzw is a stub"); - return NULL; +# pragma mark f_ap +#include +u8 fapGm_HIO_c::mCaptureScreenDivH = 1; + +# pragma mark dMsgObject +#include +void dMsgObject_c::setSelectWordFlag(u8 flag) { + puts("dMsgObject_c::setSelectWordFlag is a stub"); +} +void dMsgObject_c::setWord(const char* i_word) { + puts("dMsgObject_c::setWord is a stub"); +} +void dMsgObject_c::setSelectWord(int i_no, const char* i_word) { + puts("dMsgObject_c::setSelectWord is a stub"); } +#pragma mark HIO +#include +#include BOOL HIO2Close(s32 handle) { puts("HIO2Close is a stub"); return FALSE; @@ -1354,3 +1695,44 @@ BOOL HIOWrite(u32 addr, void* buffer, s32 size) { puts("HIOWrite is a stub"); return FALSE; } + +#pragma mark JHICommBuf +#include +void JHICommBufHeader::init() { + puts("JHICommBufHeader::init is a stub"); +} + +int JHICommBufHeader::load() { + puts("JHICommBufHeader::load is a stub"); +} + +int JHICommBufReader::read(void*, int) { + puts("JHICommBufReader::read is a stub"); + return 0; +} +void JHICommBufReader::readEnd() { + puts("JHICommBufReader::readEnd is a stub"); +} + +int JHICommBufReader::readBegin() { + puts("JHICommBufReader::readBegin is a stub"); +} + +int JHICommBufWriter::writeBegin() { + puts("JHICommBufWriter::writeBegin is a stub"); + return 0; +} + +int JHICommBufWriter::write(void*, int) { + puts("JHICommBufWriter::write is a stub"); + return 0; +} + +void JHICommBufWriter::writeEnd() { + puts("JHICommBufWriter::writeEnd is a stub"); +} + +u32 JHICommBufReader::Header::getReadableSize() const { + puts("JHICommBufReader::Header::getReadableSize is a stub"); + return 0; +} diff --git a/src/m_Do/m_Do_main.cpp b/src/m_Do/m_Do_main.cpp index 748959eb67..9f753ef4a9 100644 --- a/src/m_Do/m_Do_main.cpp +++ b/src/m_Do/m_Do_main.cpp @@ -774,9 +774,16 @@ void main01(void) { } while (true); } +#if !__MWERKS__ +template +JHIComPortManager* JHIComPortManager::instance = nullptr; + +template<> +JHIComPortManager* JHIComPortManager::instance = nullptr; +#endif + #if DEBUG JHIComPortManager* JHIComPortManager:: instance; - // DEBUG NONMATCHING void parse_args(int argc, const char* argv[]) { int i; From 3b742025dba3891623ae1f2fcd42ea35a376c544 Mon Sep 17 00:00:00 2001 From: Lurs <2795933+Lurs@users.noreply.github.com> Date: Fri, 13 Feb 2026 23:28:47 +0100 Subject: [PATCH 04/46] Fix MSVC compiler and linker errors - Fix struct/class forward declaration mismatches (JAIAudience, JASTrack) causing different MSVC mangled names and unresolved symbols - Add jsystem_stubs.cpp with stubs for JASHeap, JASVoiceBank, J3DShapeTable, JAUSection, JHICommBuf, HIO/HIO2, JOR --- CMakeLists.txt | 8 +- include/JSystem/J2DGraph/J2DAnimation.h | 26 + .../JSystem/J3DGraphAnimator/J3DShapeTable.h | 2 +- include/JSystem/J3DGraphBase/J3DDrawBuffer.h | 2 + include/JSystem/J3DU/J3DUD.h | 17 +- include/JSystem/JAudio2/JAISound.h | 4 +- include/JSystem/JAudio2/JASCmdStack.h | 2 +- include/JSystem/JAudio2/JASHeapCtrl.h | 2 +- include/JSystem/JAudio2/JASSeqCtrl.h | 2 +- include/JSystem/JAudio2/JASSeqParser.h | 2 +- include/JSystem/JGadget/search.h | 6 +- include/JSystem/JGeometry.h | 14 +- include/JSystem/JMath/JMath.h | 132 +- .../JSystem/JStudio/JStudio/functionvalue.h | 8 + include/d/actor/d_a_b_ds.h | 2 + include/dolphin/os.h | 58 +- include/dusk/extras.h | 2 + include/f_op/f_op_scene.h | 2 +- include/f_pc/f_pc_profile_lst.h | 805 ++++++++++ src/JSystem/J2DGraph/J2DMaterialFactory.cpp | 4 + src/JSystem/J3DGraphAnimator/J3DAnimation.cpp | 26 + src/JSystem/J3DGraphAnimator/J3DMtxBuffer.cpp | 4 +- .../J3DGraphLoader/J3DMaterialFactory.cpp | 12 + .../J3DGraphLoader/J3DMaterialFactory_v21.cpp | 8 + src/SSystem/SComponent/c_API.cpp | 16 +- src/d/actor/d_a_alink_effect.inc | 4 +- src/d/actor/d_a_b_ds.cpp | 3 + src/d/actor/d_a_e_dd.cpp | 2 +- src/d/actor/d_a_e_dn.cpp | 14 +- src/d/actor/d_a_e_fb.cpp | 2 +- src/d/actor/d_a_e_mf.cpp | 14 +- src/d/actor/d_a_e_mk.cpp | 2 +- src/d/actor/d_a_e_nz.cpp | 2 +- src/d/actor/d_a_e_vt.cpp | 2 +- src/d/actor/d_a_e_yr.cpp | 2 +- src/d/actor/d_a_npc_bou.cpp | 2 +- src/d/actor/d_a_npc_gro.cpp | 2 +- src/d/actor/d_a_npc_kasi_mich.cpp | 2 +- src/d/actor/d_a_npc_maro.cpp | 2 +- src/d/actor/d_a_npc_taro.cpp | 2 +- src/d/actor/d_a_obj_brakeeff.cpp | 2 +- src/d/actor/d_a_obj_ice_l.cpp | 2 +- src/d/actor/d_a_obj_katatsumuri.cpp | 4 +- src/d/actor/d_a_obj_klift00.cpp | 2 +- src/d/actor/d_a_obj_maki.cpp | 2 +- src/d/actor/d_a_obj_sakuita.cpp | 2 +- src/d/actor/d_a_obj_tornado.cpp | 2 +- src/d/actor/d_a_obj_wdStick.cpp | 2 +- src/d/actor/d_a_ppolamp.cpp | 5 + src/d/actor/d_a_tag_msg.cpp | 2 +- src/d/actor/d_a_tag_ss_drink.cpp | 2 + src/d/d_map.cpp | 6 +- src/dusk/extras.c | 3 +- src/dusk/extras.cpp | 9 + src/dusk/globals.cpp | 5 + src/dusk/jsystem_stubs.cpp | 144 ++ src/dusk/stubs.cpp | 1366 ++++++++--------- src/f_op/f_op_msg_mng.cpp | 2 +- src/f_pc/f_pc_profile.cpp | 9 + src/f_pc/f_pc_profile_lst.cpp | 801 +++++++++- 60 files changed, 2780 insertions(+), 815 deletions(-) create mode 100644 src/dusk/jsystem_stubs.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index e39e73f18a..23d663166a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,9 +25,10 @@ elseif (MSVC) add_compile_options(/bigobj) add_compile_options(/Zc:strictStrings-) endif () -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-error -Wno-c++11-narrowing") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error -Wno-c++11-narrowing") - +if (NOT MSVC) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-error -Wno-c++11-narrowing") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error -Wno-c++11-narrowing") +endif () add_subdirectory(extern/aurora EXCLUDE_FROM_ALL) set(DOLZEL_FILES @@ -1353,6 +1354,7 @@ set(DUSK_FILES src/dusk/mtx.cpp src/dusk/J3DTransforms_C.cpp src/dusk/m_Do_ext_dusk.cpp + src/dusk/jsystem_stubs.cpp ) source_group("dolzel" FILES ${DOLZEL_FILES} ${Z2AUDIOLIB_FILES} ${SSYSTEM_FILES} ${JSYSTEM_FILES} ${REL_FILES}) diff --git a/include/JSystem/J2DGraph/J2DAnimation.h b/include/JSystem/J2DGraph/J2DAnimation.h index 035be59253..c1408a898d 100644 --- a/include/JSystem/J2DGraph/J2DAnimation.h +++ b/include/JSystem/J2DGraph/J2DAnimation.h @@ -526,6 +526,32 @@ inline f32 J2DHermiteInterpolation(__REGISTER f32 pp1, __REGISTER s16* pp2, __RE fsubs fout, fout, ff0 } // clang-format on + return fout; +#else + f32 time1 = (f32)*pp2; + f32 value1 = (f32)*pp3; + f32 tangent1 = (f32)*pp4; + f32 time2 = (f32)*pp5; + f32 value2 = (f32)*pp6; + f32 tangent2 = (f32)*pp7; + + f32 duration = time2 - time1; + f32 t = (pp1 - time1) / duration; + f32 t2 = t * t; + + f32 dv = value2 - value1; + f32 ff4 = dv - duration * tangent1; + + f32 ff0 = tangent2 * duration + value1; + ff0 = ff0 - value2; + ff0 = ff0 - ff4; + ff0 = t2 * ff0; + + f32 fout = duration * tangent1 + ff0; + fout = fout * t + value1; + fout = ff4 * t2 + fout; + fout = fout - ff0; + return fout; #endif } diff --git a/include/JSystem/J3DGraphAnimator/J3DShapeTable.h b/include/JSystem/J3DGraphAnimator/J3DShapeTable.h index 9caba23ce9..54661058b4 100644 --- a/include/JSystem/J3DGraphAnimator/J3DShapeTable.h +++ b/include/JSystem/J3DGraphAnimator/J3DShapeTable.h @@ -1,7 +1,7 @@ #ifndef J3DSHAPETABLE_H #define J3DSHAPETABLE_H -#include "JSystem/JUtility/JUTAssert.h" +#include "JSystem/J3DAssert.h" class J3DVertexData; struct J3DDrawMtxData; diff --git a/include/JSystem/J3DGraphBase/J3DDrawBuffer.h b/include/JSystem/J3DGraphBase/J3DDrawBuffer.h index 4208d5d598..68be132081 100644 --- a/include/JSystem/J3DGraphBase/J3DDrawBuffer.h +++ b/include/JSystem/J3DGraphBase/J3DDrawBuffer.h @@ -26,6 +26,8 @@ inline f32 J3DCalcZValue(__REGISTER MtxP m, __REGISTER Vec v) { // clang-format on return out; +#else + return m[2][0] * v.x + m[2][1] * v.y + m[2][2] * v.z + m[2][3]; #endif } diff --git a/include/JSystem/J3DU/J3DUD.h b/include/JSystem/J3DU/J3DUD.h index ec9357c96b..1386f1c6c8 100644 --- a/include/JSystem/J3DU/J3DUD.h +++ b/include/JSystem/J3DU/J3DUD.h @@ -1,14 +1,19 @@ #ifndef J3DUD_H #define J3DUD_H -#include +#include "dolphin/types.h" +#ifndef __MWERKS__ +#include +#endif namespace J3DUD { - inline f32 JMAAbs(f32 x) { - #ifdef __MWERKS__ - return __fabsf(x); - #endif - } +inline f32 JMAAbs(f32 x) { +#ifdef __MWERKS__ + return __fabsf(x); +#else + return fabsf(x); +#endif } +} // namespace J3DUD #endif /* J3DUD_H */ diff --git a/include/JSystem/JAudio2/JAISound.h b/include/JSystem/JAudio2/JAISound.h index 3e1e36b9ad..670b6604d1 100644 --- a/include/JSystem/JAudio2/JAISound.h +++ b/include/JSystem/JAudio2/JAISound.h @@ -68,7 +68,7 @@ public: } id_; }; -class JASTrack; +struct JASTrack; /** * @ingroup jsystem-jaudio @@ -250,7 +250,7 @@ public: class JAISoundHandle; class JAIAudible; -class JAIAudience; +struct JAIAudience; class JAISe; class JAISeq; class JAISoundChild; diff --git a/include/JSystem/JAudio2/JASCmdStack.h b/include/JSystem/JAudio2/JASCmdStack.h index c35a1146cb..2ad327362b 100644 --- a/include/JSystem/JAudio2/JASCmdStack.h +++ b/include/JSystem/JAudio2/JASCmdStack.h @@ -3,7 +3,7 @@ #include "JSystem/JSupport/JSUList.h" -class JASTrack; +struct JASTrack; /** * @ingroup jsystem-jaudio diff --git a/include/JSystem/JAudio2/JASHeapCtrl.h b/include/JSystem/JAudio2/JASHeapCtrl.h index 6c219ac091..3cdd338538 100644 --- a/include/JSystem/JAudio2/JASHeapCtrl.h +++ b/include/JSystem/JAudio2/JASHeapCtrl.h @@ -147,7 +147,7 @@ namespace JASKernel { JKRHeap* getSystemHeap(); }; * */ template class T> -class JASMemChunkPool : public T >::ObjectLevelLockable { +class JASMemChunkPool : public T > { struct MemoryChunk { MemoryChunk(MemoryChunk* nextChunk) { mNextChunk = nextChunk; diff --git a/include/JSystem/JAudio2/JASSeqCtrl.h b/include/JSystem/JAudio2/JASSeqCtrl.h index 974f1c7065..d481192d6f 100644 --- a/include/JSystem/JAudio2/JASSeqCtrl.h +++ b/include/JSystem/JAudio2/JASSeqCtrl.h @@ -3,7 +3,7 @@ #include "JSystem/JAudio2/JASSeqReader.h" -class JASTrack; +struct JASTrack; class JASSeqParser; /** diff --git a/include/JSystem/JAudio2/JASSeqParser.h b/include/JSystem/JAudio2/JASSeqParser.h index b9368b28ed..e8f425de84 100644 --- a/include/JSystem/JAudio2/JASSeqParser.h +++ b/include/JSystem/JAudio2/JASSeqParser.h @@ -3,7 +3,7 @@ #include -class JASTrack; +struct JASTrack; /** * @ingroup jsystem-jaudio diff --git a/include/JSystem/JGadget/search.h b/include/JSystem/JGadget/search.h index bbc5c9ce6c..be20e40158 100644 --- a/include/JSystem/JGadget/search.h +++ b/include/JSystem/JGadget/search.h @@ -9,7 +9,11 @@ namespace JGadget { namespace search { template -struct TExpandStride_ {}; +struct TExpandStride_ { +#ifdef _MSC_VER + static T get(T n) { return n << 3; } +#endif +}; template <> struct TExpandStride_ { diff --git a/include/JSystem/JGeometry.h b/include/JSystem/JGeometry.h index ef8f69f3e1..773195392e 100644 --- a/include/JSystem/JGeometry.h +++ b/include/JSystem/JGeometry.h @@ -6,13 +6,9 @@ #include "JSystem/JMath/JMath.h" #ifndef __MWERKS__ -#ifdef _MSVC_LANG -#include -#else -#include +#include #define FLT_EPSILON std::numeric_limits::epsilon() #endif -#endif namespace JGeometry { @@ -50,6 +46,10 @@ struct TUtil { f32 root = __frsqrte(x); root = 0.5f * root * (3.0f - x * (root * root)); return root; + #else + if (x <= 0.0f) + return x; + return 1.0f / std::sqrt(x); #endif } @@ -62,6 +62,10 @@ struct TUtil { f32 root = __frsqrte(x); root = 0.5f * root * (3.0f - x * (root * root)); return x * root; + #else + if (x <= 0.0f) + return x; + return std::sqrt(x); #endif } }; diff --git a/include/JSystem/JMath/JMath.h b/include/JSystem/JMath/JMath.h index ab0faee049..e121253c65 100644 --- a/include/JSystem/JMath/JMath.h +++ b/include/JSystem/JMath/JMath.h @@ -1,7 +1,7 @@ #ifndef JMATH_H #define JMATH_H -#include +#include "dolphin/mtx.h" #include void JMAMTXApplyScale(const Mtx, Mtx, f32, f32, f32); @@ -14,18 +14,24 @@ void JMAVECScaleAdd(__REGISTER const Vec* vec1, __REGISTER const Vec* vec2, __RE inline int JMAAbs(int value) { #ifdef __MWERKS__ return __abs(value); +#else + return abs(value); #endif } inline f32 JMAAbs(f32 x) { #ifdef __MWERKS__ return __fabsf(x); +#else + return fabsf(x); #endif } inline f32 JMAFastReciprocal(f32 value) { #ifdef __MWERKS__ return __fres(value); +#else + return 1.0f / value; #endif } @@ -40,6 +46,8 @@ inline float __frsqrtes(__REGISTER double f) { // clang-format on return out; +#else + return 1.0f / sqrtf(f); #endif } @@ -54,6 +62,8 @@ inline f32 JMAFastSqrt(__REGISTER const f32 input) { } else { return input; } +#else + return sqrt(input); #endif } @@ -87,6 +97,15 @@ inline f32 JMAHermiteInterpolation(__REGISTER f32 p1, __REGISTER f32 p2, __REGIS } // clang-format on return ff25; +#else + f32 t = (p1 - p2) / (p5 - p2); + f32 t2 = t * t; + f32 t3 = t2 * t; + f32 h1 = 2.0f * t3 - 3.0f * t2 + 1.0f; + f32 h2 = -2.0f * t3 + 3.0f * t2; + f32 h3 = t3 - 2.0f * t2 + t; + f32 h4 = t3 - t2; + return h1 * p4 + h2 * p7 + h3 * (p3 - p4) + h4 * (p6 - p3); #endif } @@ -115,6 +134,12 @@ inline void gekko_ps_copy3(__REGISTER void* dst, __REGISTER const void* src) { psq_st src0, 0(dst), 0, 0 stfs src1, 8(dst) }; +#else + f32* fsrc = (f32*)src; + f32* fdst = (f32*)dst; + fdst[0] = fsrc[0]; + fdst[1] = fsrc[1]; + fdst[2] = fsrc[2]; #endif } @@ -131,6 +156,15 @@ inline void gekko_ps_copy6(__REGISTER void* dst, __REGISTER const void* src) { psq_st src1, 8(dst), 0, 0 psq_st src2, 16(dst), 0, 0 }; +#else + f32* fsrc = (f32*)src; + f32* fdst = (f32*)dst; + fdst[0] = fsrc[0]; + fdst[1] = fsrc[1]; + fdst[2] = fsrc[2]; + fdst[3] = fsrc[3]; + fdst[4] = fsrc[4]; + fdst[5] = fsrc[5]; #endif } @@ -156,6 +190,12 @@ inline void gekko_ps_copy12(__REGISTER void* dst, __REGISTER const void* src) { psq_st src4, 32(dst), 0, 0 psq_st src5, 40(dst), 0, 0 }; +#else + f32* fsrc = (f32*)src; + f32* fdst = (f32*)dst; + for (int i = 0; i < 12; i++) { + fdst[i] = fsrc[i]; + } #endif } @@ -187,13 +227,19 @@ inline void gekko_ps_copy16(__REGISTER void* dst, __REGISTER const void* src) { psq_st src6, 48(dst), 0, 0 psq_st src7, 56(dst), 0, 0 }; +#else + f32* fsrc = (f32*)src; + f32* fdst = (f32*)dst; + for (int i = 0; i < 16; i++) { + fdst[i] = fsrc[i]; + } #endif } }; // namespace JMath namespace JMathInlineVEC { - inline void C_VECAdd(__REGISTER const Vec* a, __REGISTER const Vec* b, __REGISTER Vec* ab) { +inline void C_VECAdd(__REGISTER const Vec* a, __REGISTER const Vec* b, __REGISTER Vec* ab) { #ifdef __MWERKS__ __REGISTER f32 axy; __REGISTER f32 bxy; @@ -211,17 +257,21 @@ namespace JMathInlineVEC { ps_add sumz, az, bz psq_st sumz, 8(ab), 1, 0 } + #else + ab->x = a->x + b->x; + ab->y = a->y + b->y; + ab->z = a->z + b->z; #endif - } +} - inline void C_VECSubtract(__REGISTER const Vec* a, __REGISTER const Vec* b, __REGISTER Vec* ab) { - #ifdef __MWERKS__ - __REGISTER f32 axy; - __REGISTER f32 bxy; - __REGISTER f32 az; - __REGISTER f32 subz; - __REGISTER f32 bz; - asm { +inline void C_VECSubtract(__REGISTER const Vec* a, __REGISTER const Vec* b, __REGISTER Vec* ab) { +#ifdef __MWERKS__ + __REGISTER f32 axy; + __REGISTER f32 bxy; + __REGISTER f32 az; + __REGISTER f32 subz; + __REGISTER f32 bz; + asm { psq_l axy, 0(a), 0, 0 psq_l bxy, 0(b), 0, 0 ps_sub bxy, axy, bxy @@ -230,35 +280,41 @@ namespace JMathInlineVEC { psq_l bz, 8(b), 1, 0 ps_sub subz, az, bz psq_st subz, 8(ab), 1, 0 - } - #endif } +#else + ab->x = a->x - b->x; + ab->y = a->y - b->y; + ab->z = a->z - b->z; +#endif +} - inline f32 C_VECSquareMag(__REGISTER const Vec* v) { - #ifdef __MWERKS__ - __REGISTER f32 x_y; - __REGISTER f32 z; - __REGISTER f32 res; - - asm { +inline f32 C_VECSquareMag(__REGISTER const Vec* v) { +#ifdef __MWERKS__ + __REGISTER f32 x_y; + __REGISTER f32 z; + __REGISTER f32 res; + + asm { psq_l x_y, 0(v), 0, 0 ps_mul x_y, x_y, x_y lfs z, 8(v) ps_madd res, z, z, x_y ps_sum0 res, res, x_y, x_y - } - return res; - #endif } + return res; +#else + return (v->x * v->x) + (v->y * v->y) + (v->z * v->z); +#endif +} - inline f32 C_VECDotProduct(__REGISTER const Vec *a, __REGISTER const Vec *b) { - #ifdef __MWERKS__ - __REGISTER f32 res; - __REGISTER f32 thisyz; - __REGISTER f32 otheryz; - __REGISTER f32 otherxy; - __REGISTER f32 thisxy; - asm { +inline f32 C_VECDotProduct(__REGISTER const Vec* a, __REGISTER const Vec* b) { +#ifdef __MWERKS__ + __REGISTER f32 res; + __REGISTER f32 thisyz; + __REGISTER f32 otheryz; + __REGISTER f32 otherxy; + __REGISTER f32 thisxy; + asm { psq_l thisyz, 4(a), 0, 0 psq_l otheryz, 4(b), 0, 0 ps_mul thisyz, thisyz, otheryz @@ -266,13 +322,15 @@ namespace JMathInlineVEC { psq_l otherxy, 0(b), 0, 0 ps_madd otheryz, thisxy, otherxy, thisyz ps_sum0 res, otheryz, thisyz, thisyz - }; - return res; - #endif - } -}; + }; + return res; +#else + return (a->x * b->x) + (a->y * b->y) + (a->z * b->z); +#endif +} +}; // namespace JMathInlineVEC -template +template inline T JMAMax(T param_0, T param_1) { T ret; if (param_0 > param_1) { diff --git a/include/JSystem/JStudio/JStudio/functionvalue.h b/include/JSystem/JStudio/JStudio/functionvalue.h index 3684a66da2..e1d4cbcc1c 100644 --- a/include/JSystem/JStudio/JStudio/functionvalue.h +++ b/include/JSystem/JStudio/JStudio/functionvalue.h @@ -333,7 +333,11 @@ public: return r1.pf_ == r2.pf_; } +#ifdef __MWERKS__ f32 operator*() { +#else + f32 operator*() const { +#endif // this guard is required - removing it breaks float regalloc in std::upper_bound #if DEBUG JUT_ASSERT(947, pf_!=NULL); @@ -444,7 +448,11 @@ public: return r1.pf_ == r2.pf_; } +#ifdef __MWERKS__ f32 operator*() { +#else + f32 operator*() const { +#endif #if DEBUG JUT_ASSERT(1098, pf_!=NULL); #endif diff --git a/include/d/actor/d_a_b_ds.h b/include/d/actor/d_a_b_ds.h index d7dd03a90b..ee737a955a 100644 --- a/include/d/actor/d_a_b_ds.h +++ b/include/d/actor/d_a_b_ds.h @@ -332,8 +332,10 @@ private: /* 0x2EDC */ dMsgFlow_c mMsgFlow; }; +#ifdef __MWERKS__ cXyz daB_DS_c::getHandPosR() { return mHandPos[1]; } cXyz daB_DS_c::getHandPosL() { return mHandPos[0]; } +#endif STATIC_ASSERT(sizeof(daB_DS_c) == 0x2F28); diff --git a/include/dolphin/os.h b/include/dolphin/os.h index 07eb305adb..5377eac2ad 100644 --- a/include/dolphin/os.h +++ b/include/dolphin/os.h @@ -45,7 +45,9 @@ typedef u32 OSTick; #include #include #include +#ifdef __MWERKS__ #include +#endif #include #include #include @@ -54,6 +56,18 @@ typedef u32 OSTick; // private macro, maybe shouldn't be defined here? #define OFFSET(addr, align) (((u32)(addr) & ((align)-1))) +#ifndef __MWERKS__ +typedef struct { + BOOL valid; + u32 restartCode; + u32 bootDol; + void* regionStart; + void* regionEnd; + int argsUseDefault; + void* argsAddr; +} OSExecParams; +#endif + #define DOLPHIN_ALIGNMENT 32 // Upper words of the masks, since UIMM is only 16 bits @@ -80,9 +94,9 @@ OSThread* __gUnkThread1 AT_ADDRESS(OS_BASE_CACHED | 0x00D8); int __gUnknown800030C0[2] AT_ADDRESS(OS_BASE_CACHED | 0x30C0); u8 __gUnknown800030E3 AT_ADDRESS(OS_BASE_CACHED | 0x30E3); #else -#define __OSBusClock (*(u32 *)(OS_BASE_CACHED | 0x00F8)) -#define __OSCoreClock (*(u32 *)(OS_BASE_CACHED | 0x00FC)) -#endif +#define __OSBusClock 486000000 +#define __OSCoreClock (486000000 / 4) +#endif // __MWERKS__ #define OS_BUS_CLOCK __OSBusClock #define OS_CORE_CLOCK __OSCoreClock @@ -210,7 +224,6 @@ DECL_WEAK void OSReportDisable(void); DECL_WEAK void OSReportEnable(void); DECL_WEAK void OSReportForceEnableOff(void); DECL_WEAK void OSReportForceEnableOn(void); -DECL_WEAK void OSVReport(const char* format, va_list list); #if DEBUG #define OS_REPORT(...) OSReport(__VA_ARGS__) @@ -233,6 +246,29 @@ extern u8 __OSReport_enable; #define OSRoundUp32B(x) (((u32)(x) + 32 - 1) & ~(32 - 1)) #define OSRoundDown32B(x) (((u32)(x)) & ~(32 - 1)) +#ifndef __MWERKS__ + +static inline void* OSPhysicalToCached(u32 paddr) { + return reinterpret_cast(static_cast(paddr)); +} +static inline void* OSPhysicalToUncached(u32 paddr) { + return reinterpret_cast(static_cast(paddr)); +} +static inline u32 OSCachedToPhysical(void* caddr) { + return static_cast(reinterpret_cast(caddr)); +} +static inline u32 OSUncachedToPhysical(void* ucaddr) { + return static_cast(reinterpret_cast(ucaddr)); +} +static inline void* OSCachedToUncached(void* caddr) { + return caddr; +} +static inline void* OSUncachedToCached(void* ucaddr) { + return ucaddr; +} + +#else + void* OSPhysicalToCached(u32 paddr); void* OSPhysicalToUncached(u32 paddr); u32 OSCachedToPhysical(void* caddr); @@ -240,7 +276,9 @@ u32 OSUncachedToPhysical(void* ucaddr); void* OSCachedToUncached(void* caddr); void* OSUncachedToCached(void* ucaddr); -#if !DEBUG +#endif + +#if !DEBUG && defined(__MWERKS__) #define OSPhysicalToCached(paddr) ((void*) ((u32)(OS_BASE_CACHED + (u32)(paddr)))) #define OSPhysicalToUncached(paddr) ((void*) ((u32)(OS_BASE_UNCACHED + (u32)(paddr)))) #define OSCachedToPhysical(caddr) ((u32) ((u32)(caddr) - OS_BASE_CACHED)) @@ -257,6 +295,10 @@ extern OSTime __OSStartTime; extern int __OSInIPL; // helper for assert line numbers in different revisions +#ifndef SDK_REVISION +#define SDK_REVISION 0 +#endif + #if SDK_REVISION < 1 #define LINE(l0, l1, l2) (l0) #elif SDK_REVISION < 2 @@ -275,7 +317,6 @@ extern int __OSInIPL; // This is dumb but we dont have a Metrowerks way to do variadic macros in the macro to make this done in a not scrubby way. #define ASSERTMSG1LINE(line, cond, msg, arg1) \ ((cond) || (OSPanic(__FILE__, line, msg, arg1), 0)) - #define ASSERTMSG2LINE(line, cond, msg, arg1, arg2) \ ((cond) || (OSPanic(__FILE__, line, msg, arg1, arg2), 0)) @@ -289,7 +330,6 @@ extern int __OSInIPL; #define ASSERTMSG2LINE(line, cond, msg, arg1, arg2) (void)0 #define ASSERTMSGLINEV(line, cond, ...) (void)0 #endif - #define ASSERT(cond) ASSERTLINE(__LINE__, cond) inline s16 __OSf32tos16(__REGISTER f32 inF) { @@ -357,5 +397,5 @@ static inline void OSInitFastCast(void) { } #endif -#endif -#endif +#endif // __REVOLUTION_SDK__ +#endif // _DOLPHIN_OS_H_ diff --git a/include/dusk/extras.h b/include/dusk/extras.h index 242cd0478c..562ca051c1 100644 --- a/include/dusk/extras.h +++ b/include/dusk/extras.h @@ -5,8 +5,10 @@ extern "C" { #endif +#ifndef _MSC_VER int strnicmp(const char* str1, const char* str2, int n); int stricmp(const char* str1, const char* str2); +#endif #ifdef __cplusplus } diff --git a/include/f_op/f_op_scene.h b/include/f_op/f_op_scene.h index a42eee7211..0e736093f1 100644 --- a/include/f_op/f_op_scene.h +++ b/include/f_op/f_op_scene.h @@ -12,7 +12,7 @@ struct scene_method_class { }; typedef struct scene_process_profile_definition { - /* 0x00 */ node_process_profile_definition nase; + /* 0x00 */ node_process_profile_definition base; /* 0x20 */ scene_method_class* submethod; // Subclass methods /* 0x24 */ u32 unk_0x24; // padding? } scene_process_profile_definition; diff --git a/include/f_pc/f_pc_profile_lst.h b/include/f_pc/f_pc_profile_lst.h index f768d3e118..a7f100b654 100644 --- a/include/f_pc/f_pc_profile_lst.h +++ b/include/f_pc/f_pc_profile_lst.h @@ -3,6 +3,16 @@ #include "f_pc/f_pc_profile.h" +#ifndef __MWERKS__ +#include "f_op/f_op_actor.h" +#include "f_op/f_op_camera.h" +#include "f_op/f_op_kankyo.h" +#include "f_op/f_op_msg_mng.h" +#include "f_op/f_op_overlap.h" +#include "f_op/f_op_scene.h" +#endif + +#ifdef __MWERKS__ extern process_profile_definition g_profile_ALINK; extern process_profile_definition g_profile_NO_CHG_ROOM; extern process_profile_definition g_profile_ITEM; @@ -795,6 +805,801 @@ extern process_profile_definition g_profile_TALK; extern process_profile_definition g_profile_TBOX_SW; extern process_profile_definition g_profile_TITLE; extern process_profile_definition g_profile_WarpBug; +#else +extern actor_process_profile_definition g_profile_ALINK; +extern actor_process_profile_definition g_profile_NO_CHG_ROOM; +extern actor_process_profile_definition g_profile_ITEM; +extern camera_process_profile_definition g_profile_CAMERA; +extern camera_process_profile_definition g_profile_CAMERA2; +extern kankyo_process_profile_definition g_profile_ENVSE; +extern msg_process_profile_definition g_profile_GAMEOVER; +extern kankyo_process_profile_definition g_profile_KANKYO; +extern kankyo_process_profile_definition g_profile_KYEFF; +extern kankyo_process_profile_definition g_profile_KYEFF2; +extern kankyo_process_profile_definition g_profile_KY_THUNDER; +extern msg_process_profile_definition g_profile_MENUWINDOW; +extern msg_process_profile_definition g_profile_METER2; +extern msg_process_profile_definition g_profile_MSG_OBJECT; +extern overlap_process_profile_definition g_profile_OVERLAP0; +extern overlap_process_profile_definition g_profile_OVERLAP1; +extern overlap_process_profile_definition g_profile_OVERLAP6; +extern overlap_process_profile_definition g_profile_OVERLAP7; +extern overlap_process_profile_definition g_profile_OVERLAP8; +extern overlap_process_profile_definition g_profile_OVERLAP9; +extern overlap_process_profile_definition g_profile_OVERLAP10; +extern overlap_process_profile_definition g_profile_OVERLAP11; +extern overlap_process_profile_definition g_profile_OVERLAP2; +extern overlap_process_profile_definition g_profile_OVERLAP3; +extern scene_process_profile_definition g_profile_LOGO_SCENE; +extern scene_process_profile_definition g_profile_MENU_SCENE; +extern scene_process_profile_definition g_profile_NAME_SCENE; +extern scene_process_profile_definition g_profile_NAMEEX_SCENE; +extern scene_process_profile_definition g_profile_PLAY_SCENE; +extern scene_process_profile_definition g_profile_OPENING_SCENE; +extern scene_process_profile_definition g_profile_ROOM_SCENE; +extern scene_process_profile_definition g_profile_WARNING_SCENE; +extern scene_process_profile_definition g_profile_WARNING2_SCENE; +extern msg_process_profile_definition g_profile_TIMER; +extern kankyo_process_profile_definition g_profile_WMARK; +extern kankyo_process_profile_definition g_profile_WPILLAR; +extern actor_process_profile_definition g_profile_ANDSW; +extern actor_process_profile_definition2 g_profile_BG; +extern actor_process_profile_definition g_profile_BG_OBJ; +extern actor_process_profile_definition g_profile_DMIDNA; +extern actor_process_profile_definition g_profile_DBDOOR; +extern actor_process_profile_definition g_profile_KNOB20; +extern actor_process_profile_definition g_profile_DOOR20; +extern actor_process_profile_definition g_profile_SPIRAL_DOOR; +extern actor_process_profile_definition2 g_profile_DSHUTTER; +extern actor_process_profile_definition g_profile_EP; +extern actor_process_profile_definition g_profile_HITOBJ; +extern actor_process_profile_definition g_profile_KYTAG00; +extern actor_process_profile_definition g_profile_KYTAG04; +extern actor_process_profile_definition g_profile_KYTAG17; +extern actor_process_profile_definition g_profile_OBJ_BEF; +extern actor_process_profile_definition g_profile_Obj_BurnBox; +extern actor_process_profile_definition g_profile_Obj_Carry; +extern actor_process_profile_definition g_profile_OBJ_ITO; +extern actor_process_profile_definition g_profile_Obj_Movebox; +extern actor_process_profile_definition g_profile_Obj_Swpush; +extern actor_process_profile_definition g_profile_Obj_Timer; +extern actor_process_profile_definition2 g_profile_PATH_LINE; +extern actor_process_profile_definition2 g_profile_SCENE_EXIT; +extern actor_process_profile_definition g_profile_SET_BG_OBJ; +extern actor_process_profile_definition g_profile_SWHIT0; +extern actor_process_profile_definition g_profile_TAG_ALLMATO; +extern actor_process_profile_definition g_profile_TAG_CAMERA; +extern actor_process_profile_definition g_profile_TAG_CHKPOINT; +extern actor_process_profile_definition g_profile_TAG_EVENT; +extern actor_process_profile_definition g_profile_TAG_EVT; +extern actor_process_profile_definition g_profile_TAG_EVTAREA; +extern actor_process_profile_definition g_profile_TAG_EVTMSG; +extern actor_process_profile_definition g_profile_TAG_HOWL; +extern actor_process_profile_definition g_profile_TAG_KMSG; +extern actor_process_profile_definition g_profile_TAG_LANTERN; +extern actor_process_profile_definition g_profile_Tag_Mist; +extern actor_process_profile_definition g_profile_TAG_MSG; +extern actor_process_profile_definition g_profile_TAG_PUSH; +extern actor_process_profile_definition g_profile_TAG_TELOP; +extern actor_process_profile_definition g_profile_TBOX; +extern actor_process_profile_definition g_profile_TBOX2; +extern actor_process_profile_definition g_profile_VRBOX; +extern actor_process_profile_definition g_profile_VRBOX2; +extern actor_process_profile_definition g_profile_ARROW; +extern actor_process_profile_definition g_profile_BOOMERANG; +extern actor_process_profile_definition g_profile_CROD; +extern actor_process_profile_definition g_profile_DEMO00; +extern actor_process_profile_definition g_profile_DISAPPEAR; +extern actor_process_profile_definition g_profile_MG_ROD; +extern actor_process_profile_definition g_profile_MIDNA; +extern actor_process_profile_definition g_profile_NBOMB; +extern actor_process_profile_definition g_profile_Obj_LifeContainer; +extern actor_process_profile_definition g_profile_Obj_Yousei; +extern actor_process_profile_definition g_profile_SPINNER; +extern actor_process_profile_definition g_profile_SUSPEND; +extern actor_process_profile_definition g_profile_Tag_Attp; +extern actor_process_profile_definition g_profile_ALLDIE; +extern actor_process_profile_definition g_profile_ANDSW2; +extern actor_process_profile_definition g_profile_BD; +extern actor_process_profile_definition g_profile_CANOE; +extern actor_process_profile_definition g_profile_CSTAF; +extern actor_process_profile_definition g_profile_Demo_Item; +extern actor_process_profile_definition g_profile_L1BOSS_DOOR; +extern actor_process_profile_definition g_profile_E_DN; +extern actor_process_profile_definition g_profile_E_FM; +extern actor_process_profile_definition g_profile_E_GA; +extern actor_process_profile_definition g_profile_E_HB; +extern actor_process_profile_definition g_profile_E_NEST; +extern actor_process_profile_definition g_profile_E_RD; +extern actor_process_profile_definition g_profile_ECONT; +extern actor_process_profile_definition g_profile_FR; +extern actor_process_profile_definition g_profile_GRASS; +extern actor_process_profile_definition g_profile_KYTAG05; +extern actor_process_profile_definition g_profile_KYTAG10; +extern actor_process_profile_definition g_profile_KYTAG11; +extern actor_process_profile_definition g_profile_KYTAG14; +extern actor_process_profile_definition g_profile_MG_FISH; +extern actor_process_profile_definition g_profile_NPC_BESU; +extern actor_process_profile_definition g_profile_NPC_FAIRY_SEIREI; +extern actor_process_profile_definition g_profile_NPC_FISH; +extern actor_process_profile_definition g_profile_NPC_HENNA; +extern actor_process_profile_definition g_profile_NPC_KAKASHI; +extern actor_process_profile_definition g_profile_NPC_KKRI; +extern actor_process_profile_definition g_profile_NPC_KOLIN; +extern actor_process_profile_definition g_profile_NPC_MARO; +extern actor_process_profile_definition g_profile_NPC_TARO; +extern actor_process_profile_definition g_profile_NPC_TKJ; +extern actor_process_profile_definition g_profile_Obj_BHASHI; +extern actor_process_profile_definition g_profile_Obj_BkDoor; +extern actor_process_profile_definition g_profile_Obj_BossWarp; +extern actor_process_profile_definition g_profile_Obj_Cboard; +extern actor_process_profile_definition g_profile_Obj_Digpl; +extern actor_process_profile_definition g_profile_Obj_Eff; +extern actor_process_profile_definition g_profile_OBJ_FMOBJ; +extern actor_process_profile_definition g_profile_Obj_GpTaru; +extern actor_process_profile_definition g_profile_Obj_HHASHI; +extern actor_process_profile_definition g_profile_OBJ_KANBAN2; +extern actor_process_profile_definition g_profile_OBJ_KBACKET; +extern actor_process_profile_definition g_profile_Obj_KkrGate; +extern actor_process_profile_definition g_profile_Obj_KLift00; +extern actor_process_profile_definition g_profile_Tag_KtOnFire; +extern actor_process_profile_definition g_profile_Obj_Ladder; +extern actor_process_profile_definition g_profile_Obj_Lv2Candle; +extern actor_process_profile_definition g_profile_Obj_MagneArm; +extern actor_process_profile_definition g_profile_Obj_MetalBox; +extern actor_process_profile_definition g_profile_Obj_MGate; +extern actor_process_profile_definition g_profile_Obj_NamePlate; +extern actor_process_profile_definition g_profile_Obj_OnCloth; +extern actor_process_profile_definition g_profile_Obj_RopeBridge; +extern actor_process_profile_definition g_profile_Obj_SwallShutter; +extern actor_process_profile_definition g_profile_OBJ_STICK; +extern actor_process_profile_definition g_profile_Obj_StoneMark; +extern actor_process_profile_definition g_profile_Obj_Swpropeller; +extern actor_process_profile_definition g_profile_Obj_Swpush5; +extern actor_process_profile_definition g_profile_Obj_Yobikusa; +extern actor_process_profile_definition g_profile_SCENE_EXIT2; +extern actor_process_profile_definition g_profile_ShopItem; +extern actor_process_profile_definition g_profile_SQ; +extern actor_process_profile_definition g_profile_SWC00; +extern actor_process_profile_definition g_profile_Tag_CstaSw; +extern actor_process_profile_definition g_profile_Tag_AJnot; +extern actor_process_profile_definition g_profile_Tag_AttackItem; +extern actor_process_profile_definition g_profile_Tag_Gstart; +extern actor_process_profile_definition g_profile_Tag_Hinit; +extern actor_process_profile_definition g_profile_Tag_Hjump; +extern actor_process_profile_definition g_profile_Tag_Hstop; +extern actor_process_profile_definition g_profile_Tag_Lv2PrChk; +extern actor_process_profile_definition g_profile_Tag_Magne; +extern actor_process_profile_definition g_profile_Tag_Mhint; +extern actor_process_profile_definition g_profile_Tag_Mstop; +extern actor_process_profile_definition g_profile_Tag_Spring; +extern actor_process_profile_definition g_profile_Tag_Statue; +extern actor_process_profile_definition g_profile_Ykgr; +extern actor_process_profile_definition g_profile_DR; +extern actor_process_profile_definition g_profile_L7lowDr; +extern actor_process_profile_definition g_profile_L7ODR; +extern actor_process_profile_definition g_profile_B_BH; +extern actor_process_profile_definition g_profile_B_BQ; +extern actor_process_profile_definition g_profile_B_DR; +extern actor_process_profile_definition g_profile_B_DRE; +extern actor_process_profile_definition g_profile_B_DS; +extern actor_process_profile_definition g_profile_B_GG; +extern actor_process_profile_definition g_profile_B_GM; +extern actor_process_profile_definition g_profile_B_GND; +extern actor_process_profile_definition g_profile_B_GO; +extern actor_process_profile_definition g_profile_B_GOS; +extern actor_process_profile_definition g_profile_B_MGN; +extern actor_process_profile_definition g_profile_B_OB; +extern actor_process_profile_definition g_profile_B_OH; +extern actor_process_profile_definition g_profile_B_OH2; +extern actor_process_profile_definition g_profile_B_TN; +extern actor_process_profile_definition g_profile_B_YO; +extern actor_process_profile_definition g_profile_B_YOI; +extern actor_process_profile_definition g_profile_B_ZANT; +extern actor_process_profile_definition g_profile_B_ZANTM; +extern actor_process_profile_definition g_profile_B_ZANTZ; +extern actor_process_profile_definition g_profile_B_ZANTS; +extern actor_process_profile_definition g_profile_BALLOON2D; +extern actor_process_profile_definition g_profile_BULLET; +extern actor_process_profile_definition g_profile_COACH2D; +extern actor_process_profile_definition g_profile_COACH_FIRE; +extern actor_process_profile_definition g_profile_COW; +extern actor_process_profile_definition g_profile_CSTATUE; +extern actor_process_profile_definition g_profile_DO; +extern actor_process_profile_definition g_profile_BOSS_DOOR; +extern actor_process_profile_definition g_profile_L5BOSS_DOOR; +extern actor_process_profile_definition g_profile_L1MBOSS_DOOR; +extern actor_process_profile_definition g_profile_PushDoor; +extern actor_process_profile_definition g_profile_E_AI; +extern actor_process_profile_definition g_profile_E_ARROW; +extern actor_process_profile_definition g_profile_E_BA; +extern actor_process_profile_definition g_profile_E_BEE; +extern actor_process_profile_definition g_profile_E_BG; +extern actor_process_profile_definition g_profile_E_BI; +extern actor_process_profile_definition g_profile_E_BI_LEAF; +extern actor_process_profile_definition g_profile_E_BS; +extern actor_process_profile_definition g_profile_E_BU; +extern actor_process_profile_definition g_profile_E_BUG; +extern actor_process_profile_definition g_profile_E_CR; +extern actor_process_profile_definition g_profile_E_CR_EGG; +extern actor_process_profile_definition g_profile_E_DB; +extern actor_process_profile_definition g_profile_E_DB_LEAF; +extern actor_process_profile_definition g_profile_E_DD; +extern actor_process_profile_definition g_profile_E_DF; +extern actor_process_profile_definition g_profile_E_DK; +extern actor_process_profile_definition g_profile_E_DT; +extern actor_process_profile_definition g_profile_E_FB; +extern actor_process_profile_definition g_profile_E_FK; +extern actor_process_profile_definition g_profile_E_FS; +extern actor_process_profile_definition g_profile_E_FZ; +extern actor_process_profile_definition g_profile_E_GB; +extern actor_process_profile_definition g_profile_E_GE; +extern actor_process_profile_definition g_profile_E_GI; +extern actor_process_profile_definition g_profile_E_GM; +extern actor_process_profile_definition g_profile_E_GOB; +extern actor_process_profile_definition g_profile_E_GS; +extern actor_process_profile_definition g_profile_E_HB_LEAF; +extern actor_process_profile_definition g_profile_E_HM; +extern actor_process_profile_definition g_profile_E_HP; +extern actor_process_profile_definition g_profile_E_HZ; +extern actor_process_profile_definition g_profile_E_HZELDA; +extern actor_process_profile_definition g_profile_E_IS; +extern actor_process_profile_definition g_profile_E_KG; +extern actor_process_profile_definition g_profile_E_KK; +extern actor_process_profile_definition g_profile_E_KR; +extern actor_process_profile_definition g_profile_E_MB; +extern actor_process_profile_definition g_profile_E_MD; +extern actor_process_profile_definition g_profile_E_MF; +extern actor_process_profile_definition g_profile_E_MK; +extern actor_process_profile_definition g_profile_E_MK_BO; +extern actor_process_profile_definition g_profile_E_MM; +extern actor_process_profile_definition g_profile_E_MM_MT; +extern actor_process_profile_definition g_profile_E_MS; +extern actor_process_profile_definition g_profile_E_NZ; +extern actor_process_profile_definition g_profile_E_OC; +extern actor_process_profile_definition g_profile_E_OctBg; +extern actor_process_profile_definition g_profile_E_OT; +extern actor_process_profile_definition g_profile_E_PH; +extern actor_process_profile_definition g_profile_E_PM; +extern actor_process_profile_definition g_profile_E_PO; +extern actor_process_profile_definition g_profile_E_PZ; +extern actor_process_profile_definition g_profile_E_RB; +extern actor_process_profile_definition g_profile_E_RDB; +extern actor_process_profile_definition g_profile_E_RDY; +extern actor_process_profile_definition g_profile_E_S1; +extern actor_process_profile_definition g_profile_E_SB; +extern actor_process_profile_definition g_profile_E_SF; +extern actor_process_profile_definition g_profile_E_SG; +extern actor_process_profile_definition g_profile_E_SH; +extern actor_process_profile_definition g_profile_E_SM; +extern actor_process_profile_definition g_profile_E_SM2; +extern actor_process_profile_definition g_profile_E_ST; +extern actor_process_profile_definition g_profile_E_ST_LINE; +extern actor_process_profile_definition g_profile_E_SW; +extern actor_process_profile_definition g_profile_E_TH; +extern actor_process_profile_definition g_profile_E_TH_BALL; +extern actor_process_profile_definition g_profile_E_TK; +extern actor_process_profile_definition g_profile_E_TK2; +extern actor_process_profile_definition g_profile_E_TK_BALL; +extern actor_process_profile_definition g_profile_E_TT; +extern actor_process_profile_definition g_profile_E_VT; +extern actor_process_profile_definition g_profile_E_WAP; +extern actor_process_profile_definition g_profile_E_WB; +extern actor_process_profile_definition g_profile_E_WS; +extern actor_process_profile_definition g_profile_E_WW; +extern actor_process_profile_definition g_profile_E_YC; +extern actor_process_profile_definition g_profile_E_YD; +extern actor_process_profile_definition g_profile_E_YD_LEAF; +extern actor_process_profile_definition g_profile_E_YG; +extern actor_process_profile_definition g_profile_E_YH; +extern actor_process_profile_definition g_profile_E_YK; +extern actor_process_profile_definition g_profile_E_YM; +extern actor_process_profile_definition g_profile_E_YM_TAG; +extern actor_process_profile_definition g_profile_E_YMB; +extern actor_process_profile_definition g_profile_E_YR; +extern actor_process_profile_definition g_profile_E_ZH; +extern actor_process_profile_definition g_profile_E_ZM; +extern actor_process_profile_definition g_profile_E_ZS; +extern actor_process_profile_definition g_profile_FORMATION_MNG; +extern actor_process_profile_definition g_profile_GUARD_MNG; +extern actor_process_profile_definition g_profile_HORSE; +extern actor_process_profile_definition g_profile_HOZELDA; +extern actor_process_profile_definition g_profile_Izumi_Gate; +extern actor_process_profile_definition g_profile_KAGO; +extern actor_process_profile_definition g_profile_KYTAG01; +extern actor_process_profile_definition g_profile_KYTAG02; +extern actor_process_profile_definition g_profile_KYTAG03; +extern actor_process_profile_definition g_profile_KYTAG06; +extern actor_process_profile_definition g_profile_KYTAG07; +extern actor_process_profile_definition g_profile_KYTAG08; +extern actor_process_profile_definition g_profile_KYTAG09; +extern actor_process_profile_definition g_profile_KYTAG12; +extern actor_process_profile_definition g_profile_KYTAG13; +extern actor_process_profile_definition g_profile_KYTAG15; +extern actor_process_profile_definition g_profile_KYTAG16; +extern actor_process_profile_definition g_profile_MANT; +extern actor_process_profile_definition g_profile_FSHOP; +extern actor_process_profile_definition g_profile_MIRROR; +extern actor_process_profile_definition g_profile_MOVIE_PLAYER; +extern actor_process_profile_definition g_profile_MYNA; +extern actor_process_profile_definition g_profile_NI; +extern actor_process_profile_definition g_profile_NPC_ARU; +extern actor_process_profile_definition g_profile_NPC_ASH; +extern actor_process_profile_definition g_profile_NPC_ASHB; +extern actor_process_profile_definition g_profile_NPC_BANS; +extern actor_process_profile_definition g_profile_NPC_BLUENS; +extern actor_process_profile_definition g_profile_NPC_BOU; +extern actor_process_profile_definition g_profile_NPC_BOU_S; +extern actor_process_profile_definition g_profile_NPC_CD3; +extern actor_process_profile_definition g_profile_NPC_CHAT; +extern actor_process_profile_definition g_profile_NPC_CHIN; +extern actor_process_profile_definition g_profile_NPC_CLERKA; +extern actor_process_profile_definition g_profile_NPC_CLERKB; +extern actor_process_profile_definition g_profile_NPC_CLERKT; +extern actor_process_profile_definition g_profile_NPC_COACH; +extern actor_process_profile_definition g_profile_NPC_DF; +extern actor_process_profile_definition g_profile_NPC_DOC; +extern actor_process_profile_definition g_profile_NPC_DOORBOY; +extern actor_process_profile_definition g_profile_NPC_DRSOL; +extern actor_process_profile_definition g_profile_NPC_DU; +extern actor_process_profile_definition g_profile_NPC_FAIRY; +extern actor_process_profile_definition g_profile_NPC_FGUARD; +extern actor_process_profile_definition g_profile_NPC_GND; +extern actor_process_profile_definition g_profile_NPC_GRA; +extern actor_process_profile_definition g_profile_NPC_GRC; +extern actor_process_profile_definition g_profile_NPC_GRD; +extern actor_process_profile_definition g_profile_NPC_GRM; +extern actor_process_profile_definition g_profile_NPC_GRMC; +extern actor_process_profile_definition g_profile_NPC_GRO; +extern actor_process_profile_definition g_profile_NPC_GRR; +extern actor_process_profile_definition g_profile_NPC_GRS; +extern actor_process_profile_definition g_profile_NPC_GRZ; +extern actor_process_profile_definition g_profile_NPC_GUARD; +extern actor_process_profile_definition g_profile_NPC_GWOLF; +extern actor_process_profile_definition g_profile_NPC_HANJO; +extern actor_process_profile_definition g_profile_NPC_HENNA0; +extern actor_process_profile_definition g_profile_NPC_HOZ; +extern actor_process_profile_definition g_profile_NPC_IMPAL; +extern actor_process_profile_definition g_profile_NPC_INKO; +extern actor_process_profile_definition g_profile_NPC_INS; +extern actor_process_profile_definition g_profile_NPC_JAGAR; +extern actor_process_profile_definition g_profile_NPC_KASIHANA; +extern actor_process_profile_definition g_profile_NPC_KASIKYU; +extern actor_process_profile_definition g_profile_NPC_KASIMICH; +extern actor_process_profile_definition g_profile_NPC_KDK; +extern actor_process_profile_definition g_profile_NPC_KN; +extern actor_process_profile_definition g_profile_NPC_KNJ; +extern actor_process_profile_definition g_profile_NPC_KOLINB; +extern actor_process_profile_definition g_profile_NPC_KS; +extern actor_process_profile_definition g_profile_NPC_KYURY; +extern actor_process_profile_definition g_profile_NPC_LEN; +extern actor_process_profile_definition g_profile_NPC_LF; +extern actor_process_profile_definition g_profile_NPC_LUD; +extern actor_process_profile_definition g_profile_NPC_MIDP; +extern actor_process_profile_definition g_profile_NPC_MK; +extern actor_process_profile_definition g_profile_NPC_MOI; +extern actor_process_profile_definition g_profile_NPC_MOIR; +extern actor_process_profile_definition g_profile_MYNA2; +extern actor_process_profile_definition g_profile_NPC_NE; +extern actor_process_profile_definition g_profile_NPC_P2; +extern actor_process_profile_definition g_profile_NPC_PACHI_BESU; +extern actor_process_profile_definition g_profile_NPC_PACHI_MARO; +extern actor_process_profile_definition g_profile_NPC_PACHI_TARO; +extern actor_process_profile_definition g_profile_NPC_PASSER; +extern actor_process_profile_definition g_profile_NPC_PASSER2; +extern actor_process_profile_definition g_profile_NPC_POST; +extern actor_process_profile_definition g_profile_NPC_POUYA; +extern actor_process_profile_definition g_profile_NPC_PRAYER; +extern actor_process_profile_definition g_profile_NPC_RACA; +extern actor_process_profile_definition g_profile_NPC_RAFREL; +extern actor_process_profile_definition g_profile_NPC_SARU; +extern actor_process_profile_definition g_profile_NPC_SEIB; +extern actor_process_profile_definition g_profile_NPC_SEIC; +extern actor_process_profile_definition g_profile_NPC_SEID; +extern actor_process_profile_definition g_profile_NPC_SEIRA; +extern actor_process_profile_definition g_profile_NPC_SERA2; +extern actor_process_profile_definition g_profile_NPC_SEIREI; +extern actor_process_profile_definition g_profile_NPC_SHAD; +extern actor_process_profile_definition g_profile_NPC_SHAMAN; +extern actor_process_profile_definition g_profile_NPC_SHOE; +extern actor_process_profile_definition g_profile_NPC_SHOP0; +extern actor_process_profile_definition g_profile_NPC_SMARO; +extern actor_process_profile_definition g_profile_NPC_SOLA; +extern actor_process_profile_definition g_profile_NPC_SOLDIERa; +extern actor_process_profile_definition g_profile_NPC_SOLDIERb; +extern actor_process_profile_definition g_profile_NPC_SQ; +extern actor_process_profile_definition g_profile_NPC_THE; +extern actor_process_profile_definition g_profile_NPC_THEB; +extern actor_process_profile_definition g_profile_NPC_TK; +extern actor_process_profile_definition g_profile_NPC_TKC; +extern actor_process_profile_definition g_profile_NPC_TKJ2; +extern actor_process_profile_definition g_profile_NPC_TKS; +extern actor_process_profile_definition g_profile_NPC_TOBY; +extern actor_process_profile_definition g_profile_NPC_TR; +extern actor_process_profile_definition g_profile_NPC_URI; +extern actor_process_profile_definition g_profile_NPC_WORM; +extern actor_process_profile_definition g_profile_NPC_WRESTLER; +extern actor_process_profile_definition g_profile_NPC_YAMID; +extern actor_process_profile_definition g_profile_NPC_YAMIS; +extern actor_process_profile_definition g_profile_NPC_YAMIT; +extern actor_process_profile_definition g_profile_NPC_YELIA; +extern actor_process_profile_definition g_profile_NPC_YKM; +extern actor_process_profile_definition g_profile_NPC_YKW; +extern actor_process_profile_definition g_profile_NPC_ZANB; +extern actor_process_profile_definition g_profile_NPC_ZANT; +extern actor_process_profile_definition g_profile_NPC_ZELR; +extern actor_process_profile_definition g_profile_NPC_ZELRO; +extern actor_process_profile_definition g_profile_NPC_ZELDA; +extern actor_process_profile_definition g_profile_NPC_ZRA; +extern actor_process_profile_definition g_profile_NPC_ZRC; +extern actor_process_profile_definition g_profile_NPC_ZRZ; +extern actor_process_profile_definition g_profile_Obj_Lv5Key; +extern actor_process_profile_definition g_profile_Obj_Turara; +extern actor_process_profile_definition g_profile_Obj_TvCdlst; +extern actor_process_profile_definition g_profile_Obj_Ytaihou; +extern actor_process_profile_definition g_profile_Obj_AmiShutter; +extern actor_process_profile_definition g_profile_Obj_Ari; +extern actor_process_profile_definition g_profile_OBJ_AUTOMATA; +extern actor_process_profile_definition g_profile_Obj_Avalanche; +extern actor_process_profile_definition g_profile_OBJ_BALLOON; +extern actor_process_profile_definition g_profile_Obj_BarDesk; +extern actor_process_profile_definition g_profile_Obj_Batta; +extern actor_process_profile_definition g_profile_Obj_BBox; +extern actor_process_profile_definition g_profile_OBJ_BED; +extern actor_process_profile_definition g_profile_Obj_Bemos; +extern actor_process_profile_definition g_profile_Obj_Bhbridge; +extern actor_process_profile_definition g_profile_Obj_BkLeaf; +extern actor_process_profile_definition g_profile_BkyRock; +extern actor_process_profile_definition g_profile_Obj_BmWindow; +extern actor_process_profile_definition g_profile_Obj_BoomShutter; +extern actor_process_profile_definition g_profile_Obj_Bombf; +extern actor_process_profile_definition g_profile_OBJ_BOUMATO; +extern actor_process_profile_definition g_profile_OBJ_BRG; +extern actor_process_profile_definition g_profile_Obj_BsGate; +extern actor_process_profile_definition g_profile_Obj_awaPlar; +extern actor_process_profile_definition g_profile_Obj_CatDoor; +extern actor_process_profile_definition g_profile_OBJ_CB; +extern actor_process_profile_definition g_profile_Obj_ChainBlock; +extern actor_process_profile_definition g_profile_Obj_Cdoor; +extern actor_process_profile_definition g_profile_Obj_Chandelier; +extern actor_process_profile_definition g_profile_Obj_Chest; +extern actor_process_profile_definition g_profile_Obj_Cho; +extern actor_process_profile_definition g_profile_Obj_Cowdoor; +extern actor_process_profile_definition g_profile_Obj_Crope; +extern actor_process_profile_definition g_profile_Obj_CRVFENCE; +extern actor_process_profile_definition g_profile_Obj_CRVGATE; +extern actor_process_profile_definition g_profile_Obj_CRVHAHEN; +extern actor_process_profile_definition g_profile_Obj_CRVLH_DW; +extern actor_process_profile_definition g_profile_Obj_CRVLH_UP; +extern actor_process_profile_definition g_profile_Obj_CRVSTEEL; +extern actor_process_profile_definition g_profile_Obj_Crystal; +extern actor_process_profile_definition g_profile_Obj_ChainWall; +extern actor_process_profile_definition g_profile_Obj_DamCps; +extern actor_process_profile_definition g_profile_Obj_Dan; +extern actor_process_profile_definition g_profile_Obj_Digholl; +extern actor_process_profile_definition g_profile_Obj_DigSnow; +extern actor_process_profile_definition g_profile_Obj_Elevator; +extern actor_process_profile_definition g_profile_Obj_Drop; +extern actor_process_profile_definition g_profile_Obj_DUST; +extern actor_process_profile_definition g_profile_Obj_E_CREATE; +extern actor_process_profile_definition g_profile_Obj_FallObj; +extern actor_process_profile_definition g_profile_Obj_Fan; +extern actor_process_profile_definition g_profile_Obj_Fchain; +extern actor_process_profile_definition g_profile_Obj_FireWood; +extern actor_process_profile_definition g_profile_Obj_FireWood2; +extern actor_process_profile_definition g_profile_Obj_FirePillar; +extern actor_process_profile_definition g_profile_Obj_FirePillar2; +extern actor_process_profile_definition g_profile_Obj_Flag; +extern actor_process_profile_definition g_profile_Obj_Flag2; +extern actor_process_profile_definition g_profile_Obj_Flag3; +extern actor_process_profile_definition g_profile_OBJ_FOOD; +extern actor_process_profile_definition g_profile_OBJ_FW; +extern actor_process_profile_definition g_profile_OBJ_GADGET; +extern actor_process_profile_definition g_profile_Obj_GanonWall; +extern actor_process_profile_definition g_profile_Obj_GanonWall2; +extern actor_process_profile_definition g_profile_OBJ_GB; +extern actor_process_profile_definition g_profile_Obj_Geyser; +extern actor_process_profile_definition g_profile_Obj_glowSphere; +extern actor_process_profile_definition g_profile_OBJ_GM; +extern actor_process_profile_definition g_profile_Obj_GoGate; +extern actor_process_profile_definition g_profile_Obj_GOMIKABE; +extern actor_process_profile_definition g_profile_OBJ_GRA; +extern actor_process_profile_definition g_profile_GRA_WALL; +extern actor_process_profile_definition g_profile_Obj_GraRock; +extern actor_process_profile_definition g_profile_Obj_GraveStone; +extern actor_process_profile_definition g_profile_GRDWATER; +extern actor_process_profile_definition g_profile_Obj_GrzRock; +extern actor_process_profile_definition g_profile_Obj_H_Saku; +extern actor_process_profile_definition g_profile_Obj_HBarrel; +extern actor_process_profile_definition g_profile_Obj_HFtr; +extern actor_process_profile_definition g_profile_Obj_MHasu; +extern actor_process_profile_definition g_profile_Obj_Hata; +extern actor_process_profile_definition g_profile_OBJ_HB; +extern actor_process_profile_definition g_profile_Obj_HBombkoya; +extern actor_process_profile_definition g_profile_Obj_HeavySw; +extern actor_process_profile_definition g_profile_Obj_Hfuta; +extern actor_process_profile_definition g_profile_Obj_HsTarget; +extern actor_process_profile_definition g_profile_Obj_Ice_l; +extern actor_process_profile_definition g_profile_Obj_Ice_s; +extern actor_process_profile_definition g_profile_Obj_IceBlock; +extern actor_process_profile_definition g_profile_Obj_IceLeaf; +extern actor_process_profile_definition g_profile_OBJ_IHASI; +extern actor_process_profile_definition g_profile_Obj_Ikada; +extern actor_process_profile_definition g_profile_Obj_InoBone; +extern actor_process_profile_definition g_profile_Obj_ITA; +extern actor_process_profile_definition g_profile_OBJ_ITAMATO; +extern actor_process_profile_definition g_profile_Obj_Kabuto; +extern actor_process_profile_definition g_profile_Obj_Kag; +extern actor_process_profile_definition g_profile_OBJ_KAGE; +extern actor_process_profile_definition g_profile_OBJ_KAGO; +extern actor_process_profile_definition g_profile_Obj_Kaisou; +extern actor_process_profile_definition g_profile_Obj_Kam; +extern actor_process_profile_definition g_profile_Obj_Kantera; +extern actor_process_profile_definition g_profile_Obj_Kat; +extern actor_process_profile_definition g_profile_Obj_KazeNeko; +extern actor_process_profile_definition g_profile_OBJ_KBOX; +extern actor_process_profile_definition g_profile_OBJ_KEY; +extern actor_process_profile_definition g_profile_OBJ_KEYHOLE; +extern actor_process_profile_definition g_profile_OBJ_KI; +extern actor_process_profile_definition g_profile_Obj_KiPot; +extern actor_process_profile_definition g_profile_OBJ_KITA; +extern actor_process_profile_definition g_profile_Obj_KJgjs; +extern actor_process_profile_definition g_profile_Obj_KKanban; +extern actor_process_profile_definition g_profile_KN_BULLET; +extern actor_process_profile_definition g_profile_Obj_Kshutter; +extern actor_process_profile_definition g_profile_Obj_Kuw; +extern actor_process_profile_definition g_profile_Obj_KWheel00; +extern actor_process_profile_definition g_profile_Obj_KWheel01; +extern actor_process_profile_definition g_profile_Obj_KznkArm; +extern actor_process_profile_definition g_profile_Obj_Laundry; +extern actor_process_profile_definition g_profile_Obj_LndRope; +extern actor_process_profile_definition g_profile_OBJ_LBOX; +extern actor_process_profile_definition g_profile_OBJ_LP; +extern actor_process_profile_definition g_profile_Obj_Lv1Cdl00; +extern actor_process_profile_definition g_profile_Obj_Lv1Cdl01; +extern actor_process_profile_definition g_profile_Obj_Lv3Candle; +extern actor_process_profile_definition g_profile_Obj_Lv3Water; +extern actor_process_profile_definition g_profile_Obj_Lv3Water2; +extern actor_process_profile_definition g_profile_OBJ_LV3WATERB; +extern actor_process_profile_definition g_profile_Obj_Lv3R10Saka; +extern actor_process_profile_definition g_profile_Obj_WaterEff; +extern actor_process_profile_definition g_profile_Tag_Lv4CandleDm; +extern actor_process_profile_definition g_profile_Tag_Lv4Candle; +extern actor_process_profile_definition g_profile_Obj_Lv4EdShutter; +extern actor_process_profile_definition g_profile_Obj_Lv4Gate; +extern actor_process_profile_definition g_profile_Obj_Lv4HsTarget; +extern actor_process_profile_definition g_profile_Obj_Lv4PoGate; +extern actor_process_profile_definition g_profile_Obj_Lv4RailWall; +extern actor_process_profile_definition g_profile_Obj_Lv4SlideWall; +extern actor_process_profile_definition g_profile_Obj_Lv4Bridge; +extern actor_process_profile_definition g_profile_Obj_Lv4Chan; +extern actor_process_profile_definition g_profile_Obj_Lv4DigSand; +extern actor_process_profile_definition g_profile_Obj_Lv4Floor; +extern actor_process_profile_definition g_profile_Obj_Lv4Gear; +extern actor_process_profile_definition g_profile_Obj_PRElvtr; +extern actor_process_profile_definition g_profile_Obj_Lv4PRwall; +extern actor_process_profile_definition g_profile_Obj_Lv4Sand; +extern actor_process_profile_definition g_profile_Obj_Lv5FBoard; +extern actor_process_profile_definition g_profile_Obj_IceWall; +extern actor_process_profile_definition g_profile_Obj_Lv5SwIce; +extern actor_process_profile_definition g_profile_Obj_Ychndlr; +extern actor_process_profile_definition g_profile_Obj_YIblltray; +extern actor_process_profile_definition g_profile_Obj_Lv6ChgGate; +extern actor_process_profile_definition g_profile_Obj_Lv6FuriTrap; +extern actor_process_profile_definition g_profile_Obj_Lv6Lblock; +extern actor_process_profile_definition g_profile_Obj_Lv6SwGate; +extern actor_process_profile_definition g_profile_Obj_Lv6SzGate; +extern actor_process_profile_definition g_profile_Obj_Lv6Tenbin; +extern actor_process_profile_definition g_profile_Obj_Lv6TogeRoll; +extern actor_process_profile_definition g_profile_Obj_Lv6TogeTrap; +extern actor_process_profile_definition g_profile_Obj_Lv6bemos; +extern actor_process_profile_definition g_profile_Obj_Lv6bemos2; +extern actor_process_profile_definition g_profile_Obj_Lv6EGate; +extern actor_process_profile_definition g_profile_Obj_Lv6ElevtA; +extern actor_process_profile_definition g_profile_Obj_Lv6SwTurn; +extern actor_process_profile_definition g_profile_Obj_Lv7BsGate; +extern actor_process_profile_definition g_profile_Obj_Lv7PropY; +extern actor_process_profile_definition g_profile_Obj_Lv7Bridge; +extern actor_process_profile_definition g_profile_Obj_Lv8KekkaiTrap; +extern actor_process_profile_definition g_profile_Obj_Lv8Lift; +extern actor_process_profile_definition g_profile_Obj_Lv8OptiLift; +extern actor_process_profile_definition g_profile_Obj_Lv8UdFloor; +extern actor_process_profile_definition g_profile_Obj_Lv9SwShutter; +extern actor_process_profile_definition g_profile_Obj_MagLift; +extern actor_process_profile_definition g_profile_Obj_MagLiftRot; +extern actor_process_profile_definition g_profile_OBJ_MAKI; +extern actor_process_profile_definition g_profile_Obj_MasterSword; +extern actor_process_profile_definition g_profile_Obj_Mato; +extern actor_process_profile_definition g_profile_Obj_MHole; +extern actor_process_profile_definition g_profile_OBJ_MIE; +extern actor_process_profile_definition g_profile_Obj_Mirror6Pole; +extern actor_process_profile_definition g_profile_Obj_MirrorChain; +extern actor_process_profile_definition g_profile_Obj_MirrorSand; +extern actor_process_profile_definition g_profile_Obj_MirrorScrew; +extern actor_process_profile_definition g_profile_Obj_MirrorTable; +extern actor_process_profile_definition g_profile_OBJ_MSIMA; +extern actor_process_profile_definition g_profile_Obj_MvStair; +extern actor_process_profile_definition g_profile_OBJ_MYOGAN; +extern actor_process_profile_definition g_profile_Obj_Nagaisu; +extern actor_process_profile_definition g_profile_Obj_Nan; +extern actor_process_profile_definition g_profile_OBJ_NDOOR; +extern actor_process_profile_definition g_profile_OBJ_NOUGU; +extern actor_process_profile_definition g_profile_OCTHASHI; +extern actor_process_profile_definition g_profile_OBJ_OILTUBO; +extern actor_process_profile_definition g_profile_Obj_Onsen; +extern actor_process_profile_definition g_profile_OBJ_ONSEN_FIRE; +extern actor_process_profile_definition g_profile_Obj_OnsenTaru; +extern actor_process_profile_definition g_profile_Obj_PushDoor; +extern actor_process_profile_definition g_profile_Obj_PDtile; +extern actor_process_profile_definition g_profile_Obj_PDwall; +extern actor_process_profile_definition g_profile_Obj_Picture; +extern actor_process_profile_definition g_profile_Obj_Pillar; +extern actor_process_profile_definition g_profile_OBJ_PLEAF; +extern actor_process_profile_definition g_profile_Obj_poCandle; +extern actor_process_profile_definition g_profile_Obj_poFire; +extern actor_process_profile_definition g_profile_Obj_poTbox; +extern actor_process_profile_definition g_profile_Obj_Prop; +extern actor_process_profile_definition g_profile_OBJ_PUMPKIN; +extern actor_process_profile_definition g_profile_Obj_RCircle; +extern actor_process_profile_definition g_profile_Obj_RfHole; +extern actor_process_profile_definition g_profile_Obj_RiderGate; +extern actor_process_profile_definition g_profile_Obj_RIVERROCK; +extern actor_process_profile_definition g_profile_OBJ_ROCK; +extern actor_process_profile_definition g_profile_Obj_RotBridge; +extern actor_process_profile_definition g_profile_Obj_RotTrap; +extern actor_process_profile_definition g_profile_OBJ_ROTEN; +extern actor_process_profile_definition g_profile_Obj_RotStair; +extern actor_process_profile_definition g_profile_OBJ_RW; +extern actor_process_profile_definition g_profile_Obj_Saidan; +extern actor_process_profile_definition g_profile_Obj_Sakuita; +extern actor_process_profile_definition g_profile_Obj_ItaRope; +extern actor_process_profile_definition g_profile_Obj_SCannon; +extern actor_process_profile_definition g_profile_Obj_SCannonCrs; +extern actor_process_profile_definition g_profile_Obj_SCannonTen; +extern actor_process_profile_definition g_profile_OBJ_SEKIDOOR; +extern actor_process_profile_definition g_profile_OBJ_SEKIZO; +extern actor_process_profile_definition g_profile_OBJ_SEKIZOA; +extern actor_process_profile_definition g_profile_Obj_Shield; +extern actor_process_profile_definition g_profile_Obj_SM_DOOR; +extern actor_process_profile_definition g_profile_Obj_SmallKey; +extern actor_process_profile_definition g_profile_Obj_SmgDoor; +extern actor_process_profile_definition g_profile_Obj_Smoke; +extern actor_process_profile_definition g_profile_OBJ_SMTILE; +extern actor_process_profile_definition g_profile_Obj_SmWStone; +extern actor_process_profile_definition g_profile_Tag_SnowEff; +extern actor_process_profile_definition g_profile_Obj_SnowSoup; +extern actor_process_profile_definition g_profile_OBJ_SO; +extern actor_process_profile_definition g_profile_Obj_SpinLift; +extern actor_process_profile_definition g_profile_OBJ_SSDRINK; +extern actor_process_profile_definition g_profile_OBJ_SSITEM; +extern actor_process_profile_definition g_profile_Obj_StairBlock; +extern actor_process_profile_definition g_profile_Obj_Stone; +extern actor_process_profile_definition g_profile_Obj_Stopper; +extern actor_process_profile_definition g_profile_Obj_Stopper2; +extern actor_process_profile_definition g_profile_OBJ_SUISYA; +extern actor_process_profile_definition g_profile_OBJ_SW; +extern actor_process_profile_definition g_profile_Obj_SwBallA; +extern actor_process_profile_definition g_profile_Obj_SwBallB; +extern actor_process_profile_definition g_profile_Obj_SwBallC; +extern actor_process_profile_definition g_profile_Obj_SwLight; +extern actor_process_profile_definition g_profile_Obj_SwChain; +extern actor_process_profile_definition g_profile_Obj_SwHang; +extern actor_process_profile_definition g_profile_Obj_Sword; +extern actor_process_profile_definition g_profile_Obj_Swpush2; +extern actor_process_profile_definition g_profile_Obj_SwSpinner; +extern actor_process_profile_definition g_profile_Obj_SwTurn; +extern actor_process_profile_definition g_profile_Obj_SyRock; +extern actor_process_profile_definition g_profile_Obj_SZbridge; +extern actor_process_profile_definition g_profile_Obj_TaFence; +extern actor_process_profile_definition g_profile_Obj_Table; +extern actor_process_profile_definition g_profile_Obj_TakaraDai; +extern actor_process_profile_definition g_profile_OBJ_TATIGI; +extern actor_process_profile_definition g_profile_Obj_Ten; +extern actor_process_profile_definition g_profile_Obj_TestCube; +extern actor_process_profile_definition g_profile_Obj_Gake; + +extern actor_process_profile_definition g_profile_Obj_THASHI; +extern actor_process_profile_definition g_profile_Obj_TDoor; +extern actor_process_profile_definition g_profile_Obj_TimeFire; +extern actor_process_profile_definition g_profile_OBJ_TKS; +extern actor_process_profile_definition g_profile_Obj_TMoon; +extern actor_process_profile_definition g_profile_Obj_ToaruMaki; +extern actor_process_profile_definition g_profile_OBJ_TOBY; +extern actor_process_profile_definition g_profile_Obj_TobyHouse; +extern actor_process_profile_definition g_profile_Obj_TogeTrap; +extern actor_process_profile_definition g_profile_Obj_Tombo; +extern actor_process_profile_definition g_profile_Obj_Tornado; +extern actor_process_profile_definition g_profile_Obj_Tornado2; +extern actor_process_profile_definition g_profile_OBJ_TP; +extern actor_process_profile_definition g_profile_TREESH; +extern actor_process_profile_definition g_profile_Obj_TwGate; +extern actor_process_profile_definition g_profile_OBJ_UDOOR; +extern actor_process_profile_definition g_profile_OBJ_USAKU; +extern actor_process_profile_definition g_profile_Obj_VolcGnd; +extern actor_process_profile_definition g_profile_Obj_VolcanicBall; +extern actor_process_profile_definition g_profile_Obj_VolcanicBomb; +extern actor_process_profile_definition g_profile_Obj_KakarikoBrg; +extern actor_process_profile_definition g_profile_Obj_OrdinBrg; +extern actor_process_profile_definition g_profile_Obj_WtGate; +extern actor_process_profile_definition g_profile_Obj_WaterPillar; +extern actor_process_profile_definition g_profile_Obj_WaterFall; +extern actor_process_profile_definition g_profile_Obj_Wchain; +extern actor_process_profile_definition g_profile_Obj_WdStick; +extern actor_process_profile_definition g_profile_OBJ_WEB0; +extern actor_process_profile_definition g_profile_OBJ_WEB1; +extern actor_process_profile_definition g_profile_Obj_WellCover; +extern actor_process_profile_definition g_profile_OBJ_WFLAG; +extern actor_process_profile_definition g_profile_Obj_WindStone; +extern actor_process_profile_definition g_profile_Obj_Window; +extern actor_process_profile_definition g_profile_Obj_WoodPendulum; +extern actor_process_profile_definition g_profile_Obj_WoodStatue; +extern actor_process_profile_definition g_profile_Obj_WoodenSword; +extern actor_process_profile_definition g_profile_OBJ_YBAG; +extern actor_process_profile_definition g_profile_OBJ_YSTONE; +extern actor_process_profile_definition g_profile_Obj_ZoraCloth; +extern actor_process_profile_definition g_profile_Obj_ZDoor; +extern actor_process_profile_definition g_profile_Obj_zrTurara; +extern actor_process_profile_definition g_profile_Obj_zrTuraraRc; +extern actor_process_profile_definition g_profile_ZRA_MARK; +extern actor_process_profile_definition g_profile_OBJ_ZRAFREEZE; +extern actor_process_profile_definition g_profile_Obj_ZraRock; +extern actor_process_profile_definition g_profile_PASSER_MNG; +extern actor_process_profile_definition g_profile_PERU; +extern actor_process_profile_definition g_profile_PPolamp; +extern actor_process_profile_definition g_profile_SKIP2D; +extern actor_process_profile_definition g_profile_START_AND_GOAL; +extern actor_process_profile_definition g_profile_SwBall; +extern actor_process_profile_definition g_profile_SwLBall; +extern actor_process_profile_definition g_profile_SwTime; +extern actor_process_profile_definition g_profile_Tag_Lv6Gate; +extern actor_process_profile_definition g_profile_Tag_Lv7Gate; +extern actor_process_profile_definition g_profile_Tag_Lv8Gate; +extern actor_process_profile_definition g_profile_Tag_TWGate; +extern actor_process_profile_definition g_profile_Tag_Arena; +extern actor_process_profile_definition g_profile_Tag_Assist; +extern actor_process_profile_definition g_profile_TAG_BTLITM; +extern actor_process_profile_definition g_profile_Tag_ChgRestart; +extern actor_process_profile_definition g_profile_TAG_CSW; +extern actor_process_profile_definition g_profile_Tag_Escape; +extern actor_process_profile_definition g_profile_Tag_FWall; +extern actor_process_profile_definition g_profile_TAG_GRA; +extern actor_process_profile_definition g_profile_TAG_GUARD; +extern actor_process_profile_definition g_profile_Tag_Instruction; +extern actor_process_profile_definition g_profile_Tag_KagoFall; +extern actor_process_profile_definition g_profile_Tag_LightBall; +extern actor_process_profile_definition g_profile_TAG_LV5SOUP; +extern actor_process_profile_definition g_profile_Tag_Lv6CstaSw; +extern actor_process_profile_definition g_profile_Tag_Mmsg; +extern actor_process_profile_definition g_profile_Tag_Mwait; +extern actor_process_profile_definition g_profile_TAG_MYNA2; +extern actor_process_profile_definition g_profile_TAG_MNLIGHT; +extern actor_process_profile_definition g_profile_TAG_PATI; +extern actor_process_profile_definition g_profile_Tag_poFire; +extern actor_process_profile_definition g_profile_TAG_QS; +extern actor_process_profile_definition g_profile_Tag_RetRoom; +extern actor_process_profile_definition g_profile_Tag_RiverBack; +extern actor_process_profile_definition g_profile_Tag_RmbitSw; +extern actor_process_profile_definition g_profile_Tag_Schedule; +extern actor_process_profile_definition g_profile_Tag_SetBall; +extern actor_process_profile_definition g_profile_Tag_Restart; +extern actor_process_profile_definition g_profile_TAG_SHOPCAM; +extern actor_process_profile_definition g_profile_TAG_SHOPITM; +extern actor_process_profile_definition g_profile_Tag_SmkEmt; +extern actor_process_profile_definition g_profile_Tag_Spinner; +extern actor_process_profile_definition g_profile_Tag_Sppath; +extern actor_process_profile_definition g_profile_TAG_SSDRINK; +extern actor_process_profile_definition g_profile_Tag_Stream; +extern actor_process_profile_definition g_profile_Tag_TheBHint; +extern actor_process_profile_definition g_profile_Tag_WaraHowl; +extern actor_process_profile_definition g_profile_Tag_WatchGe; +extern actor_process_profile_definition g_profile_Tag_WaterFall; +extern actor_process_profile_definition g_profile_Tag_Wljump; +extern actor_process_profile_definition g_profile_TAG_YAMI; +extern actor_process_profile_definition g_profile_TALK; +extern actor_process_profile_definition g_profile_TBOX_SW; +extern actor_process_profile_definition g_profile_TITLE; +extern actor_process_profile_definition g_profile_WarpBug; +#endif extern process_profile_definition* g_fpcPfLst_ProfileList[]; diff --git a/src/JSystem/J2DGraph/J2DMaterialFactory.cpp b/src/JSystem/J2DGraph/J2DMaterialFactory.cpp index 8cabf74f43..e7a3639844 100644 --- a/src/JSystem/J2DGraph/J2DMaterialFactory.cpp +++ b/src/JSystem/J2DGraph/J2DMaterialFactory.cpp @@ -178,7 +178,11 @@ J2DMaterial* J2DMaterialFactory::create(J2DMaterial* param_0, int index, u32 par } JUtility::TColor J2DMaterialFactory::newMatColor(int param_0, int param_1) const { +#ifdef __MWERKS__ JUtility::TColor local_20 = (GXColor){0xff,0xff,0xff,0xff}; +#else + JUtility::TColor local_20 = GXColor{0xff,0xff,0xff,0xff}; +#endif J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]]; if (iVar2->field_0x8[param_1] != 0xffff) { return field_0x10[iVar2->field_0x8[param_1]]; diff --git a/src/JSystem/J3DGraphAnimator/J3DAnimation.cpp b/src/JSystem/J3DGraphAnimator/J3DAnimation.cpp index 6b9a2d2250..94653f1bda 100644 --- a/src/JSystem/J3DGraphAnimator/J3DAnimation.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DAnimation.cpp @@ -552,6 +552,32 @@ inline f32 J3DHermiteInterpolation(__REGISTER f32 pp1, __REGISTER s16 const* pp2 fsubs fout, fout, ff0 } // clang-format on + return fout; +#else + f32 time1 = (f32)*pp2; + f32 value1 = (f32)*pp3; + f32 tangent1 = (f32)*pp4; + f32 time2 = (f32)*pp5; + f32 value2 = (f32)*pp6; + f32 tangent2 = (f32)*pp7; + + f32 duration = time2 - time1; + f32 t = (pp1 - time1) / duration; + f32 t2 = t * t; + + f32 dv = value2 - value1; + f32 ff4 = dv - duration * tangent1; + + f32 ff0 = tangent2 * duration + value1; + ff0 = ff0 - value2; + ff0 = ff0 - ff4; + ff0 = t2 * ff0; + + f32 fout = duration * tangent1 + ff0; + fout = fout * t + value1; + fout = ff4 * t2 + fout; + fout = fout - ff0; + return fout; #endif } diff --git a/src/JSystem/J3DGraphAnimator/J3DMtxBuffer.cpp b/src/JSystem/J3DGraphAnimator/J3DMtxBuffer.cpp index a1e9ba0243..8b881d27d0 100644 --- a/src/JSystem/J3DGraphAnimator/J3DMtxBuffer.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DMtxBuffer.cpp @@ -15,11 +15,11 @@ Mtx* J3DMtxBuffer::sNoUseDrawMtxPtr = &J3DMtxBuffer::sNoUseDrawMtx; Mtx33* J3DMtxBuffer::sNoUseNrmMtxPtr = &J3DMtxBuffer::sNoUseNrmMtx; // force .sdata2 order -f32 dummy1() { +static f32 dummy1() { return 1.0f; } -f32 dummy0() { +static f32 dummy0() { return 0.0f; } diff --git a/src/JSystem/J3DGraphLoader/J3DMaterialFactory.cpp b/src/JSystem/J3DGraphLoader/J3DMaterialFactory.cpp index d9d098c66d..93970e3c4f 100644 --- a/src/JSystem/J3DGraphLoader/J3DMaterialFactory.cpp +++ b/src/JSystem/J3DGraphLoader/J3DMaterialFactory.cpp @@ -464,7 +464,11 @@ u32 J3DMaterialFactory::calcSizeLockedMaterial(J3DMaterial* i_material, int i_id } J3DGXColor J3DMaterialFactory::newMatColor(int i_idx, int i_no) const { + #ifdef __MWERKS__ J3DGXColor dflt = (GXColor){0xff, 0xff, 0xff, 0xff}; + #else + J3DGXColor dflt = GXColor{0xff, 0xff, 0xff, 0xff}; + #endif J3DMaterialInitData* mtl_init_data = &mpMaterialInitData[mpMaterialID[i_idx]]; if (mtl_init_data->mMatColorIdx[i_no] != 0xffff) { return mpMatColor[mtl_init_data->mMatColorIdx[i_no]]; @@ -493,7 +497,11 @@ J3DColorChan J3DMaterialFactory::newColorChan(int i_idx, int i_no) const { } J3DGXColor J3DMaterialFactory::newAmbColor(int i_idx, int i_no) const { + #ifdef __MWERKS__ J3DGXColor dflt = (GXColor){0x32, 0x32, 0x32, 0x32}; + #else + J3DGXColor dflt = GXColor{0x32, 0x32, 0x32, 0x32}; + #endif J3DMaterialInitData* mtl_init_data = &mpMaterialInitData[mpMaterialID[i_idx]]; if (mtl_init_data->mAmbColorIdx[i_no] != 0xffff) { return mpAmbColor[mtl_init_data->mAmbColorIdx[i_no]]; @@ -570,7 +578,11 @@ J3DGXColorS10 J3DMaterialFactory::newTevColor(int i_idx, int i_no) const { } J3DGXColor J3DMaterialFactory::newTevKColor(int i_idx, int i_no) const { + #ifdef __MWERKS__ J3DGXColor dflt = (GXColor){0xff, 0xff, 0xff, 0xff}; + #else + J3DGXColor dflt = GXColor{0xff, 0xff, 0xff, 0xff}; + #endif J3DMaterialInitData* mtl_init_data = &mpMaterialInitData[mpMaterialID[i_idx]]; if (mtl_init_data->mTevKColorIdx[i_no] != 0xffff) { return mpTevKColor[mtl_init_data->mTevKColorIdx[i_no]]; diff --git a/src/JSystem/J3DGraphLoader/J3DMaterialFactory_v21.cpp b/src/JSystem/J3DGraphLoader/J3DMaterialFactory_v21.cpp index 47815e881e..b00b08ff68 100644 --- a/src/JSystem/J3DGraphLoader/J3DMaterialFactory_v21.cpp +++ b/src/JSystem/J3DGraphLoader/J3DMaterialFactory_v21.cpp @@ -167,7 +167,11 @@ J3DMaterial* J3DMaterialFactory_v21::create(J3DMaterial* i_material, int i_idx, } J3DGXColor J3DMaterialFactory_v21::newMatColor(int i_idx, int i_no) const { + #ifdef __MWERKS__ J3DGXColor defaultColor = (GXColor){0xff, 0xff, 0xff, 0xff}; + #else + J3DGXColor defaultColor = GXColor{0xff, 0xff, 0xff, 0xff}; + #endif J3DMaterialInitData_v21* mtl_init_data = &mpMaterialInitData[mpMaterialID[i_idx]]; if (mtl_init_data->mMatColorIdx[i_no] != 0xffff) { return J3DGXColor(mpMatColor[mtl_init_data->mMatColorIdx[i_no]]); @@ -262,7 +266,11 @@ J3DGXColorS10 J3DMaterialFactory_v21::newTevColor(int i_idx, int i_no) const { } J3DGXColor J3DMaterialFactory_v21::newTevKColor(int i_idx, int param_1) const { + #ifdef __MWERKS__ J3DGXColor defaultColor = (GXColor){0xff, 0xff, 0xff, 0xff}; + #else + J3DGXColor defaultColor = GXColor{0xff, 0xff, 0xff, 0xff}; + #endif J3DMaterialInitData_v21* mtl_init_data = &mpMaterialInitData[mpMaterialID[i_idx]]; if (mtl_init_data->mTevKColorIdx[param_1] != 0xffff) { return J3DGXColor(mpTevKColor[mtl_init_data->mTevKColorIdx[param_1]]); diff --git a/src/SSystem/SComponent/c_API.cpp b/src/SSystem/SComponent/c_API.cpp index 8e075e10ef..a6ecf42d75 100644 --- a/src/SSystem/SComponent/c_API.cpp +++ b/src/SSystem/SComponent/c_API.cpp @@ -7,12 +7,16 @@ extern void mDoGph_BlankingON(); extern void mDoGph_BlankingOFF(); -extern void mDoGph_BeforeOfDraw(); -extern void mDoGph_AfterOfDraw(); -extern void mDoGph_Painter(); -extern void mDoGph_Create(); +extern int mDoGph_BeforeOfDraw(); +extern int mDoGph_AfterOfDraw(); +extern int mDoGph_Painter(); +extern int mDoGph_Create(); cAPI_Interface g_cAPI_Interface = { - mDoGph_Create, mDoGph_BeforeOfDraw, mDoGph_AfterOfDraw, - mDoGph_Painter, mDoGph_BlankingON, mDoGph_BlankingOFF, + (cAPIGph_Mthd)mDoGph_Create, + (cAPIGph_Mthd)mDoGph_BeforeOfDraw, + (cAPIGph_Mthd)mDoGph_AfterOfDraw, + (cAPIGph_Mthd)mDoGph_Painter, + mDoGph_BlankingON, + mDoGph_BlankingOFF, }; diff --git a/src/d/actor/d_a_alink_effect.inc b/src/d/actor/d_a_alink_effect.inc index ef28323ac7..7af8e88645 100644 --- a/src/d/actor/d_a_alink_effect.inc +++ b/src/d/actor/d_a_alink_effect.inc @@ -1246,7 +1246,7 @@ void daAlink_c::setWolfDigEffect() { } else if (field_0x3198 == 7) { var_r29 = 0; var_r28 = ID_ZI_J_DASHWTRA_C; - setEmitterPolyColor(&field_0x32cc, ID_ZI_J_DASHWTRA_A, mPolyInfo2, &field_0x37d4, &sp18); + setEmitterPolyColor((u32*)&field_0x32cc, ID_ZI_J_DASHWTRA_A, mPolyInfo2, &field_0x37d4, &sp18); setEmitterPolyColor(&field_0x31bc, ID_ZI_J_DASHWTRA_B, mPolyInfo2, &field_0x37d4, &sp18); } else { var_r29 = 0; @@ -1281,7 +1281,7 @@ void daAlink_c::setWolfSwimEndEffect(JPABaseEmitter** param_0, JPABaseEmitter** var_r30 = 1; } - *param_0 = setEmitterColor(&field_0x32cc, name0[var_r30], &field_0x37c8, &shape_angle); + *param_0 = setEmitterColor((u32*)&field_0x32cc, name0[var_r30], &field_0x37c8, &shape_angle); if (var_r30 != 0) { *param_1 = setEmitterColor(&field_0x31bc, name1[var_r30], &field_0x37c8, &shape_angle); diff --git a/src/d/actor/d_a_b_ds.cpp b/src/d/actor/d_a_b_ds.cpp index 88b5c8042a..43f4af6cc3 100644 --- a/src/d/actor/d_a_b_ds.cpp +++ b/src/d/actor/d_a_b_ds.cpp @@ -5703,4 +5703,7 @@ actor_process_profile_definition g_profile_B_DS = { fopAc_CULLBOX_CUSTOM_e, }; +cXyz daB_DS_c::getHandPosR() { return mHandPos[1]; } +cXyz daB_DS_c::getHandPosL() { return mHandPos[0]; } + AUDIO_INSTANCES; diff --git a/src/d/actor/d_a_e_dd.cpp b/src/d/actor/d_a_e_dd.cpp index e0de6cb03f..1094366738 100644 --- a/src/d/actor/d_a_e_dd.cpp +++ b/src/d/actor/d_a_e_dd.cpp @@ -336,7 +336,7 @@ static BOOL way_bg_check(e_dd_class* i_this, f32 param_2) { return FALSE; } -u8 hio_set; +static u8 hio_set; static daE_DD_HIO_c l_HIO; diff --git a/src/d/actor/d_a_e_dn.cpp b/src/d/actor/d_a_e_dn.cpp index 794458bbe6..c68d2510bf 100644 --- a/src/d/actor/d_a_e_dn.cpp +++ b/src/d/actor/d_a_e_dn.cpp @@ -354,13 +354,13 @@ static BOOL other_bg_check2(e_dn_class* i_this, cXyz* i_pos) { return FALSE; } -u8 hio_set; +static u8 hio_set; -daE_DN_HIO_c l_HIO; +static daE_DN_HIO_c l_HIO; -fopAc_ac_c* target_info[10]; +static fopAc_ac_c* target_info[10]; -int target_info_count; +static int target_info_count; static void* s_b_sub(void* i_actor, void* i_data) { if (fopAcM_IsActor(i_actor) && dBomb_c::checkBombActor((fopAc_ac_c*)i_actor) && !((dBomb_c*)i_actor)->checkStateExplode() && target_info_count < 10) { @@ -2978,7 +2978,7 @@ static void anm_se_set(e_dn_class* i_this) { } } -int c_start; +static int c_start; static int daE_DN_Execute(e_dn_class* i_this) { if (i_this->status != 0) { @@ -3298,9 +3298,9 @@ static int daE_DN_Delete(e_dn_class* i_this) { return 1; } -Vec jv_offset = { 0.0f, 0.0f, 0.0f }; +static Vec jv_offset = { 0.0f, 0.0f, 0.0f }; -dJntColData_c jc_data[12] = { +static dJntColData_c jc_data[12] = { {0, 1, 2, 40.0f, &jv_offset}, {0, 1, 3, 30.0f, &jv_offset}, {0, 1, 22, 40.0f, &jv_offset}, {0, 1, 11, 15.0f, &jv_offset}, {0, 1, 12, 10.0f, &jv_offset}, {0, 1, 17, 15.0f, &jv_offset}, diff --git a/src/d/actor/d_a_e_fb.cpp b/src/d/actor/d_a_e_fb.cpp index 1fbbbc2410..877e43d537 100644 --- a/src/d/actor/d_a_e_fb.cpp +++ b/src/d/actor/d_a_e_fb.cpp @@ -127,7 +127,7 @@ static f32 dummy_117095() { } #endif -bool hio_set; +static bool hio_set; static daE_FB_HIO_c l_HIO; diff --git a/src/d/actor/d_a_e_mf.cpp b/src/d/actor/d_a_e_mf.cpp index 42ad76cfd7..0c3c101416 100644 --- a/src/d/actor/d_a_e_mf.cpp +++ b/src/d/actor/d_a_e_mf.cpp @@ -289,13 +289,13 @@ static BOOL other_bg_check2(e_mf_class* i_this, cXyz* param_2) { return FALSE; } -u8 hio_set; +static u8 hio_set; -daE_MF_HIO_c l_HIO; +static daE_MF_HIO_c l_HIO; -fopAc_ac_c* target_info[10]; +static fopAc_ac_c* target_info[10]; -int target_info_count; +static int target_info_count; static void* s_b_sub(void* i_actor, void* i_data) { if (fopAcM_IsActor(i_actor) && dBomb_c::checkBombActor((fopAc_ac_c*)i_actor) && !((dBomb_c*)i_actor)->checkStateExplode() && target_info_count < 10) { @@ -2773,7 +2773,7 @@ static void anm_se_set(e_mf_class* i_this) { } } -int c_start; +static int c_start; static int daE_MF_Execute(e_mf_class* i_this) { fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->actor; @@ -3085,9 +3085,9 @@ static int daE_MF_Delete(e_mf_class* i_this) { return 1; } -Vec jv_offset = { 0.0f, 0.0f, 0.0f }; +static Vec jv_offset = { 0.0f, 0.0f, 0.0f }; -dJntColData_c jc_data[12] = { +static dJntColData_c jc_data[12] = { {0, 1, 2, 40.0f, &jv_offset}, {0, 1, 3, 30.0f, &jv_offset}, {0, 1, 22, 40.0f, &jv_offset}, {0, 1, 11, 15.0f, &jv_offset}, {0, 1, 12, 10.0f, &jv_offset}, {0, 1, 17, 15.0f, &jv_offset}, diff --git a/src/d/actor/d_a_e_mk.cpp b/src/d/actor/d_a_e_mk.cpp index fef3a86675..c5b4b7a34c 100644 --- a/src/d/actor/d_a_e_mk.cpp +++ b/src/d/actor/d_a_e_mk.cpp @@ -137,7 +137,7 @@ static cXyz STAGE_CENTER_POS; static s16 STAGE_ANGLE_Y; -u8 hio_set; +static u8 hio_set; static daE_MK_HIO_c l_HIO; diff --git a/src/d/actor/d_a_e_nz.cpp b/src/d/actor/d_a_e_nz.cpp index 738d01b3bf..59f4258f7e 100644 --- a/src/d/actor/d_a_e_nz.cpp +++ b/src/d/actor/d_a_e_nz.cpp @@ -129,7 +129,7 @@ static int daE_NZ_Draw(e_nz_class* i_this) { return 1; } -bool hio_set; +static bool hio_set; static daE_NZ_HIO_c l_HIO; diff --git a/src/d/actor/d_a_e_vt.cpp b/src/d/actor/d_a_e_vt.cpp index a9d716acd0..a0fc8b926c 100644 --- a/src/d/actor/d_a_e_vt.cpp +++ b/src/d/actor/d_a_e_vt.cpp @@ -873,7 +873,7 @@ void daE_VA_c::setFireEffect(int param_0) { dComIfGp_particle_set(field_0x10f80[idx + 2], 0x3AE, &field_0x1140[param_0], NULL, &scale); } -f32 dummy() { +static f32 dummy() { return 3.2f; } diff --git a/src/d/actor/d_a_e_yr.cpp b/src/d/actor/d_a_e_yr.cpp index f329c48a9a..a5dfd55d9d 100644 --- a/src/d/actor/d_a_e_yr.cpp +++ b/src/d/actor/d_a_e_yr.cpp @@ -1716,7 +1716,7 @@ static void e_yr_su_wait_move(e_yr_class* i_this) { } } -f32 dummy() { +static f32 dummy() { return -50.0f; } diff --git a/src/d/actor/d_a_npc_bou.cpp b/src/d/actor/d_a_npc_bou.cpp index fe6f44846e..23640f7a09 100644 --- a/src/d/actor/d_a_npc_bou.cpp +++ b/src/d/actor/d_a_npc_bou.cpp @@ -16,7 +16,7 @@ static int l_bmdData[1][2] = { {11, 1}, }; -daNpcT_evtData_c l_evtList[11] = { +static daNpcT_evtData_c l_evtList[11] = { {"", 0}, {"NO_RESPONSE", 0}, {"WILDGOAT", 2}, diff --git a/src/d/actor/d_a_npc_gro.cpp b/src/d/actor/d_a_npc_gro.cpp index 564d0b1d8b..4c98adfe70 100644 --- a/src/d/actor/d_a_npc_gro.cpp +++ b/src/d/actor/d_a_npc_gro.cpp @@ -192,7 +192,7 @@ enum Mode { static NPC_GRO_HIO_CLASS l_HIO; -daNpc_Maro_c::actionFunc dummy_lit_3931() { +static daNpc_Maro_c::actionFunc dummy_lit_3931() { return &daNpc_Maro_c::choccai; } diff --git a/src/d/actor/d_a_npc_kasi_mich.cpp b/src/d/actor/d_a_npc_kasi_mich.cpp index e76b9b9823..4b3d7ca068 100644 --- a/src/d/actor/d_a_npc_kasi_mich.cpp +++ b/src/d/actor/d_a_npc_kasi_mich.cpp @@ -941,7 +941,7 @@ int daNpcKasiMich_c::getWolfPathNearIdx() { return rv; } -void dummy() { +static void dummy() { daNpcKasiMich_c::actionFunc temp; temp = &daNpcKasiMich_c::wait; temp = &daNpcKasiMich_c::wait; diff --git a/src/d/actor/d_a_npc_maro.cpp b/src/d/actor/d_a_npc_maro.cpp index 709e27cb5c..492d83527e 100644 --- a/src/d/actor/d_a_npc_maro.cpp +++ b/src/d/actor/d_a_npc_maro.cpp @@ -116,7 +116,7 @@ static int l_bmdData[2][2] = { {11, 1}, {5, 2}, }; -daNpcT_evtData_c l_evtList[15] = { +static daNpcT_evtData_c l_evtList[15] = { {"", 0}, {"DEFAULT_GETITEM", 0}, {"NO_RESPONSE", 0}, diff --git a/src/d/actor/d_a_npc_taro.cpp b/src/d/actor/d_a_npc_taro.cpp index 32956de232..4bcfb6a0d8 100644 --- a/src/d/actor/d_a_npc_taro.cpp +++ b/src/d/actor/d_a_npc_taro.cpp @@ -20,7 +20,7 @@ #include "f_op/f_op_camera_mng.h" #include -daNpc_Maro_c::actionFunc dummy_lit_3931() { +static daNpc_Maro_c::actionFunc dummy_lit_3931() { return &daNpc_Maro_c::choccai; } diff --git a/src/d/actor/d_a_obj_brakeeff.cpp b/src/d/actor/d_a_obj_brakeeff.cpp index d9299694f9..6a43938f72 100644 --- a/src/d/actor/d_a_obj_brakeeff.cpp +++ b/src/d/actor/d_a_obj_brakeeff.cpp @@ -141,7 +141,7 @@ u32 bef_brk[2] = { 10, }; -int useHeapInit(fopAc_ac_c* i_this) { +static int useHeapInit(fopAc_ac_c* i_this) { obj_brakeeff_class* a_this = static_cast(i_this); J3DModelData* modelData = diff --git a/src/d/actor/d_a_obj_ice_l.cpp b/src/d/actor/d_a_obj_ice_l.cpp index 34d489308c..7048eb3a18 100644 --- a/src/d/actor/d_a_obj_ice_l.cpp +++ b/src/d/actor/d_a_obj_ice_l.cpp @@ -14,7 +14,7 @@ #include "d/d_s_play.h" #include -f32 dummyLiteral() { +static f32 dummyLiteral() { return 0.0f; } diff --git a/src/d/actor/d_a_obj_katatsumuri.cpp b/src/d/actor/d_a_obj_katatsumuri.cpp index 115d0dfadd..8f0242dabe 100644 --- a/src/d/actor/d_a_obj_katatsumuri.cpp +++ b/src/d/actor/d_a_obj_katatsumuri.cpp @@ -149,11 +149,11 @@ static int daObjKAT_Delete(daObjKAT_c* i_this) { return 1; } -f32 dummy0() { +static f32 dummy0() { return 0.0f; } -f32 dummy1() { +static f32 dummy1() { return 0.4f; } diff --git a/src/d/actor/d_a_obj_klift00.cpp b/src/d/actor/d_a_obj_klift00.cpp index 739c7fe7f8..221e4f8812 100644 --- a/src/d/actor/d_a_obj_klift00.cpp +++ b/src/d/actor/d_a_obj_klift00.cpp @@ -109,7 +109,7 @@ static const int l_dzbidx[] = {9}; #endif // force dCcD_Sph::~dCcD_Sph to be emitted earlier than it otherwise would -void dummy() { +static void dummy() { delete (dCcD_Sph*)NULL; delete (dCcD_Cyl*)NULL; } diff --git a/src/d/actor/d_a_obj_maki.cpp b/src/d/actor/d_a_obj_maki.cpp index c555335745..8bb3578dd5 100644 --- a/src/d/actor/d_a_obj_maki.cpp +++ b/src/d/actor/d_a_obj_maki.cpp @@ -146,7 +146,7 @@ int daObj_Maki_Delete(obj_maki_class* i_this) { return 1; } -int useHeapInit(fopAc_ac_c* i_this) { +static int useHeapInit(fopAc_ac_c* i_this) { obj_maki_class* a_this = (obj_maki_class*)i_this; J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("Obj_maki", 4); diff --git a/src/d/actor/d_a_obj_sakuita.cpp b/src/d/actor/d_a_obj_sakuita.cpp index 0f828d4d73..87073326d1 100644 --- a/src/d/actor/d_a_obj_sakuita.cpp +++ b/src/d/actor/d_a_obj_sakuita.cpp @@ -89,7 +89,7 @@ void daObjSakuita_c::setBaseMtx() { cMtx_copy(mDoMtx_stack_c::get(), mMtx); } -f32 dummyLiteral() { return 0.5f; } +static f32 dummyLiteral() { return 0.5f; } void daObjSakuita_c::setPlatePos() { cXyz cStack_24; diff --git a/src/d/actor/d_a_obj_tornado.cpp b/src/d/actor/d_a_obj_tornado.cpp index 3b6c837f73..6761f0a329 100644 --- a/src/d/actor/d_a_obj_tornado.cpp +++ b/src/d/actor/d_a_obj_tornado.cpp @@ -216,7 +216,7 @@ static int daObjTrnd_Create(daObjTrnd_c* i_this) { return i_this->create(); } -void dummyString() { +static void dummyString() { DEAD_STRING(""); } diff --git a/src/d/actor/d_a_obj_wdStick.cpp b/src/d/actor/d_a_obj_wdStick.cpp index d7e5275460..be060df460 100644 --- a/src/d/actor/d_a_obj_wdStick.cpp +++ b/src/d/actor/d_a_obj_wdStick.cpp @@ -435,7 +435,7 @@ void daWdStick_c::mode_proc_roll() { bgCheck(); } -f32 dummyLiteral() { return 100.0f; } +static f32 dummyLiteral() { return 100.0f; } BOOL daWdStick_c::chkWaterLineIn() { return mAcch.m_wtr.GetHeight() > current.pos.y + 40.0f; diff --git a/src/d/actor/d_a_ppolamp.cpp b/src/d/actor/d_a_ppolamp.cpp index e760171d4e..ddac92eb84 100644 --- a/src/d/actor/d_a_ppolamp.cpp +++ b/src/d/actor/d_a_ppolamp.cpp @@ -58,8 +58,13 @@ int daPPolamp_c::draw() { g_env_light.setLightTevColorType_MAJI(mModel1, &tevStr); mDoExt_modelUpdateDL(mModel1); g_env_light.setLightTevColorType_MAJI(mModel2, &tevStr); + #ifdef __MWERKS__ static J3DGXColorS10 TEV_COLOR_1 = (GXColorS10){0x48, 0x85, 0xff, 0xff}; static J3DGXColorS10 TEV_COLOR_2 = (GXColorS10){0, 0, 0xff, 0xff}; + #else + static J3DGXColorS10 TEV_COLOR_1 = GXColorS10 {0x48, 0x85, 0xff, 0xff}; + static J3DGXColorS10 TEV_COLOR_2 = GXColorS10 {0, 0, 0xff, 0xff}; + #endif J3DModelData* modelData = mModel2->getModelData(); for (u16 i = 0; i < modelData->getMaterialNum(); i++) { diff --git a/src/d/actor/d_a_tag_msg.cpp b/src/d/actor/d_a_tag_msg.cpp index d9cbd2bf66..25cf35e224 100644 --- a/src/d/actor/d_a_tag_msg.cpp +++ b/src/d/actor/d_a_tag_msg.cpp @@ -264,7 +264,7 @@ void daTag_Msg_HIO_c::genMessage(JORMContext* ctx) { } #endif -void dummyString() { +static void dummyString() { DEAD_STRING("Timer"); } diff --git a/src/d/actor/d_a_tag_ss_drink.cpp b/src/d/actor/d_a_tag_ss_drink.cpp index bca1da5abc..86a25148bf 100644 --- a/src/d/actor/d_a_tag_ss_drink.cpp +++ b/src/d/actor/d_a_tag_ss_drink.cpp @@ -246,9 +246,11 @@ static int daTag_SSDrink_IsDelete(void* i_this) { daTag_SSDrink_c::~daTag_SSDrink_c() {} +#ifdef __MWERKS__ void daObj_SSBase_c::setSoldOut() { /* empty function */ } +#endif static actor_method_class daTag_SSDrink_MethodTable = { (process_method_func)daTag_SSDrink_Create, (process_method_func)daTag_SSDrink_Delete, diff --git a/src/d/d_map.cpp b/src/d/d_map.cpp index 6678e6d9af..1cc6a4dfb4 100644 --- a/src/d/d_map.cpp +++ b/src/d/d_map.cpp @@ -694,14 +694,16 @@ GXColor* renderingAmap_c::getLineColor(int param_0, int param_1) { if (param_1 == 4) { switch (field_0x3c) { - case 0: + case 0: { static const GXColor borderColor0 = {0xB4, 0x00, 0x00, 0x00}; *color = borderColor0; break; - case 1: + } + case 1: { static const GXColor borderColor1 = {0xB8, 0x00, 0x00, 0x00}; *color = borderColor1; break; + } default: JUT_ASSERT(1636, FALSE); break; diff --git a/src/dusk/extras.c b/src/dusk/extras.c index d4af760430..85a08394a6 100644 --- a/src/dusk/extras.c +++ b/src/dusk/extras.c @@ -1,9 +1,9 @@ #include "dusk/extras.h" #include #include -#include #include +#ifndef _MSC_VER int stricmp(const char* str1, const char* str2) { char a_var; char b_var; @@ -46,6 +46,7 @@ int strnicmp(const char* str1, const char* str2, int n) { return 0; } +#endif void *_memcpy(void* dest, void const* src, int n) { diff --git a/src/dusk/extras.cpp b/src/dusk/extras.cpp index f13d3e3440..de402f028b 100644 --- a/src/dusk/extras.cpp +++ b/src/dusk/extras.cpp @@ -1,6 +1,9 @@ // C++ Mangled version of extras.c #include #include +#ifdef _MSC_VER +#include +#endif void *__memcpy(void* dest, void const* src, int n) { return memcpy(dest, src, n); @@ -14,5 +17,11 @@ void __dcbz(void* addr, int offset) { int __cntlzw(unsigned int val) { if (val == 0) return 32; // PowerPC returns 32 if the input is 0 +#ifdef _MSC_VER + unsigned long idx; + _BitScanReverse(&idx, val); + return 31 - (int)idx; +#else return __builtin_clz(val); +#endif } diff --git a/src/dusk/globals.cpp b/src/dusk/globals.cpp index 34537c572c..d82a680fcc 100644 --- a/src/dusk/globals.cpp +++ b/src/dusk/globals.cpp @@ -12,5 +12,10 @@ u32 __OSFpscrEnableBits; GDLObj* __GDCurrentDL; // DSP +#include DSPTaskInfo* __DSP_first_task; DSPTaskInfo* __DSP_curr_task; + +// mDo_dvd +#include +u8 mDoDvdThd::DVDLogoMode; diff --git a/src/dusk/jsystem_stubs.cpp b/src/dusk/jsystem_stubs.cpp new file mode 100644 index 0000000000..2987e39df3 --- /dev/null +++ b/src/dusk/jsystem_stubs.cpp @@ -0,0 +1,144 @@ +#include +#include + +#pragma mark J3DShapeTable +#include "JSystem/J3DGraphAnimator/J3DShapeTable.h" + +void J3DShapeTable::initShapeNodes(J3DDrawMtxData* mtxData, J3DVertexData* vtxData) { + puts("J3DShapeTable::initShapeNodes is a stub"); +} + +// JAISe::JAISeMgr_startID_, JAISeq::JAISeqMgr_startID_, JAIStream::JAIStreamMgr_startID_ +// are compiled from their real source files (JAISe.obj, JAISeq.obj, JAIStream.obj) + +#pragma mark JAUSection +#include "JSystem/JAudio2/JAUSectionHeap.h" + +JAUSoundTable* JAUSection::newSoundTable(void const* data, u32 size, bool flag) { + puts("JAUSection::newSoundTable is a stub"); + return nullptr; +} + +JAUSoundNameTable* JAUSection::newSoundNameTable(void const* data, u32 size, bool flag) { + puts("JAUSection::newSoundNameTable is a stub"); + return nullptr; +} + +JAIStreamDataMgr* JAUSection::newStreamFileTable(void const* data, bool flag) { + puts("JAUSection::newStreamFileTable is a stub"); + return nullptr; +} + +#pragma mark JASHeap +#include "JSystem/JAudio2/JASHeapCtrl.h" + +JASHeap::JASHeap(JASDisposer* disposer) + : mTree(this), mDisposer(disposer), mBase(nullptr), mSize(0), field_0x40(nullptr) { + OSInitMutex(&mMutex); +} + +#pragma mark JASVoiceBank +#include "JSystem/JAudio2/JASVoiceBank.h" + +bool JASVoiceBank::getInstParam(int a, int b, int c, JASInstParam* param) const { + puts("JASVoiceBank::getInstParam is a stub"); + return false; +} + +// JASSeqParser::sCallBackFunc is compiled from JASSeqParser.obj + +#pragma mark JHICommBuf +#include "JSystem/JHostIO/JHIComm.h" + +void JHICommBufHeader::init() { + puts("JHICommBufHeader::init is a stub"); +} + +int JHICommBufHeader::load() { + puts("JHICommBufHeader::load is a stub"); + return -1; +} + +int JHICommBufReader::readBegin() { + puts("JHICommBufReader::readBegin is a stub"); + return -1; +} + +void JHICommBufReader::readEnd() { + puts("JHICommBufReader::readEnd is a stub"); +} + +int JHICommBufReader::read(void* buf, int size) { + puts("JHICommBufReader::read is a stub"); + return 0; +} + +u32 JHICommBufReader::Header::getReadableSize() const { + puts("JHICommBufReader::Header::getReadableSize is a stub"); + return 0; +} + +int JHICommBufWriter::writeBegin() { + puts("JHICommBufWriter::writeBegin is a stub"); + return -1; +} + +void JHICommBufWriter::writeEnd() { + puts("JHICommBufWriter::writeEnd is a stub"); +} + +int JHICommBufWriter::write(void* buf, int size) { + puts("JHICommBufWriter::write is a stub"); + return 0; +} + +#pragma mark HIO / HIO2 +#include +#include + +extern "C" { + +BOOL HIORead(u32 addr, void* buffer, s32 size) { + puts("HIORead is a stub"); + return FALSE; +} + +BOOL HIOWrite(u32 addr, void* buffer, s32 size) { + puts("HIOWrite is a stub"); + return FALSE; +} + +BOOL HIO2Init(void) { + puts("HIO2Init is a stub"); + return FALSE; +} + +BOOL HIO2EnumDevices(HIO2EnumCallback callback) { + puts("HIO2EnumDevices is a stub"); + return FALSE; +} + +s32 HIO2Open(HIO2DeviceType type, HIO2UnkCallback exiCb, HIO2DisconnectCallback disconnectCb) { + puts("HIO2Open is a stub"); + return -1; +} + +BOOL HIO2Close(s32 handle) { + puts("HIO2Close is a stub"); + return FALSE; +} + +} // extern "C" + +#pragma mark JOR +#include "JSystem/JHostIO/JORServer.h" + +int JOREventCallbackListNode::JORAct(u32 eventID, const char* eventName) { + puts("JOREventCallbackListNode::JORAct is a stub"); + return 0; +} + +#pragma mark J3DPSMtxArrayConcat +void J3DPSMtxArrayConcat(float (*a)[4], float (*b)[4], float (*out)[4], unsigned long count) { + puts("J3DPSMtxArrayConcat is a stub"); +} diff --git a/src/dusk/stubs.cpp b/src/dusk/stubs.cpp index 0148f701a9..b39aa3ddb6 100644 --- a/src/dusk/stubs.cpp +++ b/src/dusk/stubs.cpp @@ -5,754 +5,795 @@ // Credits: Super Monkey Ball -<<<<<<< HEAD -# pragma mark OS -======= ->>>>>>> wip/linkfix2 -void OSReport(const char *msg, ...) { - va_list args; - va_start(args, msg); - vprintf(msg, args); - va_end(args); +#pragma mark OS +/* +void OSReport(const char* msg, ...) { + va_list args; + va_start(args, msg); + vprintf(msg, args); + va_end(args); +}*/ + +u32 OSGetConsoleType() { + return OS_CONSOLE_RETAIL1; } -u32 OSGetConsoleType() { return OS_CONSOLE_RETAIL1; } - -u32 OSGetSoundMode() { return 2; } +u32 OSGetSoundMode() { + return 2; +} // Consolidated OS functions (moved from other sections) -void OSClearContext(OSContext *context) { puts("OSClearContext is a stub"); } - -void OSInit() { puts("OSInit is a stub"); } - -void OSInitMutex(OSMutex *mutex) { puts("OSInitMutex is a stub"); } - -void OSUnlockMutex(OSMutex *mutex) { puts("OSUnlockMutex is a stub"); } - -BOOL OSTryLockMutex(OSMutex *mutex) { - puts("OSTryLockMutex is a stub"); - return FALSE; +void OSClearContext(OSContext* context) { + puts("OSClearContext is a stub"); } -void *OSAllocFromArenaLo(u32 size, u32 align) { - puts("OSAllocFromArenaLo is a stub"); - return NULL; +void OSInit() { + puts("OSInit is a stub"); +} + +void OSInitMutex(OSMutex* mutex) { + puts("OSInitMutex is a stub"); +} + +void OSUnlockMutex(OSMutex* mutex) { + puts("OSUnlockMutex is a stub"); +} + +BOOL OSTryLockMutex(OSMutex* mutex) { + puts("OSTryLockMutex is a stub"); + return FALSE; +} + +void* OSAllocFromArenaLo(u32 size, u32 align) { + puts("OSAllocFromArenaLo is a stub"); + return NULL; } BOOL OSDisableInterrupts() { - puts("OSDisableInterrupts is a stub"); - return FALSE; + puts("OSDisableInterrupts is a stub"); + return FALSE; } -void OSSleepThread(OSThreadQueue *queue) { puts("OSSleepThread is a stub"); } +void OSSleepThread(OSThreadQueue* queue) { + puts("OSSleepThread is a stub"); +} -void OSDumpContext(OSContext *context) { puts("OSDumpContext is a stub"); } +void OSDumpContext(OSContext* context) { + puts("OSDumpContext is a stub"); +} -void OSSignalCond(OSCond *cond) { puts("OSSignalCond is a stub"); } +void OSSignalCond(OSCond* cond) { + puts("OSSignalCond is a stub"); +} -void OSCreateAlarm(OSAlarm *alarm) { puts("OSCreateAlarm is a stub"); } +void OSCreateAlarm(OSAlarm* alarm) { + puts("OSCreateAlarm is a stub"); +} -void OSCancelAlarm(OSAlarm *alarm) { puts("OSCancelAlarm is a stub"); } +void OSCancelAlarm(OSAlarm* alarm) { + puts("OSCancelAlarm is a stub"); +} -s32 OSCheckActiveThreads(void) { puts("OSCheckActiveThreads is a stub"); } +s32 OSCheckActiveThreads(void) { + puts("OSCheckActiveThreads is a stub"); + return 0; +} -int OSCreateThread(OSThread* thread, void* (*func)(void*), void* param, void* stack, u32 stackSize, OSPriority priority, u16 attr) { - puts("OSCreateThread is a stub"); - return 0; +int OSCreateThread(OSThread* thread, void* (*func)(void*), void* param, void* stack, u32 stackSize, + OSPriority priority, u16 attr) { + puts("OSCreateThread is a stub"); + return 0; } s32 OSDisableScheduler() { - puts("OSDisableScheduler is a stub"); - return 0; + puts("OSDisableScheduler is a stub"); + return 0; } void OSDetachThread(OSThread* thread) { - puts("OSDetachThread is a stub"); + puts("OSDetachThread is a stub"); } -OSThread *OSGetCurrentThread() { - puts("OSGetCurrentThread is a stub"); - return 0; +OSThread* OSGetCurrentThread() { + puts("OSGetCurrentThread is a stub"); + return 0; } u16 OSGetFontEncode() { - puts("OSGetFontEncode is a stub"); - return 0; + puts("OSGetFontEncode is a stub"); + return 0; } -char *OSGetFontTexture(char *string, void **image, s32 *x, s32 *y, s32 *width) { - puts("OSGetFontTexture is a stub"); - return 0; +char* OSGetFontTexture(char* string, void** image, s32* x, s32* y, s32* width) { + puts("OSGetFontTexture is a stub"); + return 0; } -char *OSGetFontWidth(char *string, s32 *width) { - puts("OSGetFontWidth is a stub"); - return 0; +char* OSGetFontWidth(char* string, s32* width) { + puts("OSGetFontWidth is a stub"); + return 0; } BOOL OSGetResetButtonState() { - puts("OSGetResetButtonState is a stub"); - return FALSE; + puts("OSGetResetButtonState is a stub"); + return FALSE; } u32 OSGetStackPointer() { - puts("OSGetStackPointer is a stub"); - return 0; + puts("OSGetStackPointer is a stub"); + return 0; } -BOOL OSInitFont(OSFontHeader *fontData) { - puts("OSInitFont is a stub"); - return FALSE; +BOOL OSInitFont(OSFontHeader* fontData) { + puts("OSInitFont is a stub"); + return FALSE; } -BOOL OSLink(OSModuleInfo *newModule, void *bss) { - puts("OSLink is a stub"); - return TRUE; +BOOL OSLink(OSModuleInfo* newModule, void* bss) { + puts("OSLink is a stub"); + return TRUE; } -void OSLoadContext(OSContext *context) { puts("OSLoadContext is a stub"); } +void OSLoadContext(OSContext* context) { + puts("OSLoadContext is a stub"); +} void OSResetSystem(int reset, u32 resetCode, BOOL forceMenu) { - puts("OSResetSystem is a stub"); + puts("OSResetSystem is a stub"); } BOOL OSRestoreInterrupts(BOOL level) { - puts("OSRestoreInterrupts is a stub"); - return FALSE; + puts("OSRestoreInterrupts is a stub"); + return FALSE; } -s32 OSResumeThread(OSThread *thread) { - puts("OSResumeThread is a stub"); - return 0; +s32 OSResumeThread(OSThread* thread) { + puts("OSResumeThread is a stub"); + return 0; } -void OSSetCurrentContext(OSContext *context) { - puts("OSSetCurrentContext is a stub"); +void OSSetCurrentContext(OSContext* context) { + puts("OSSetCurrentContext is a stub"); } void OSSetStringTable(void* stringTable) { - puts("OSSetStringTable is a stub"); + puts("OSSetStringTable is a stub"); } OSSwitchThreadCallback OSSetSwitchThreadCallback(OSSwitchThreadCallback callback) { - puts("OSSetSwitchThreadCallback is a stub"); - return NULL; + puts("OSSetSwitchThreadCallback is a stub"); + return NULL; } int OSSetThreadPriority(OSThread* thread, s32 priority) { - puts("OSSetThreadPriority is a stub"); - return 0; + puts("OSSetThreadPriority is a stub"); + return 0; } void OSWaitCond(OSCond* cond, OSMutex* mutex) { - puts("OSWaitCond is a stub"); + puts("OSWaitCond is a stub"); } void OSYieldThread(void) { - puts("OSYieldThread is a stub"); + puts("OSYieldThread is a stub"); } -s32 OSSuspendThread(OSThread *thread) { - puts("OSSuspendThread is a stub"); - return 0; +s32 OSSuspendThread(OSThread* thread) { + puts("OSSuspendThread is a stub"); + return 0; } -void OSCancelThread(OSThread *thread) { - puts("OSCancelThread is a stub"); +void OSCancelThread(OSThread* thread) { + puts("OSCancelThread is a stub"); } -void OSTicksToCalendarTime(OSTime ticks, OSCalendarTime *td) { - puts("OSTicksToCalendarTime is a stub"); +void OSTicksToCalendarTime(OSTime ticks, OSCalendarTime* td) { + puts("OSTicksToCalendarTime is a stub"); } -BOOL OSUnlink(OSModuleInfo *oldModule) { - puts("OSUnlink is a stub"); - return FALSE; +BOOL OSUnlink(OSModuleInfo* oldModule) { + puts("OSUnlink is a stub"); + return FALSE; } -void OSSwitchFiberEx(__REGISTER u32 param_0, __REGISTER u32 param_1, __REGISTER u32 param_2, __REGISTER u32 param_3, __REGISTER u32 code, __REGISTER u32 stack) { - puts("OSSwitchFiberEx is a stub"); +void OSSwitchFiberEx(__REGISTER u32 param_0, __REGISTER u32 param_1, __REGISTER u32 param_2, + __REGISTER u32 param_3, __REGISTER u32 code, __REGISTER u32 stack) { + puts("OSSwitchFiberEx is a stub"); } -void OSWakeupThread(OSThreadQueue *queue) { puts("OSWakeupThread is a stub"); } +void OSWakeupThread(OSThreadQueue* queue) { + puts("OSWakeupThread is a stub"); +} u32 __OSGetDIConfig() { - puts("__OSGetDIConfig is a stub"); - return 0; + puts("__OSGetDIConfig is a stub"); + return 0; } __OSInterruptHandler __OSSetInterruptHandler(__OSInterrupt interrupt, __OSInterruptHandler handler) { - puts("__OSSetInterruptHandler is a stub"); - return 0; + puts("__OSSetInterruptHandler is a stub"); + return 0; } OSInterruptMask __OSUnmaskInterrupts(OSInterruptMask mask) { - puts("__OSUnmaskInterrupts is a stub"); - return 0; + puts("__OSUnmaskInterrupts is a stub"); + return 0; } BOOL OSEnableInterrupts() { - puts("OSEnableInterrupts is a stub"); - return FALSE; + puts("OSEnableInterrupts is a stub"); + return FALSE; } s32 OSEnableScheduler() { - puts("OSEnableScheduler is a stub"); - return 0; + puts("OSEnableScheduler is a stub"); + return 0; } -void OSExitThread(void *val) { puts("OSExitThread is a stub"); } +void OSExitThread(void* val) { + puts("OSExitThread is a stub"); +} void* OSGetArenaHi(void) { - puts("OSGetArenaHi is a stub"); - return NULL; + puts("OSGetArenaHi is a stub"); + return NULL; } void* OSGetArenaLo(void) { - puts("OSGetArenaLo is a stub"); - return NULL; + puts("OSGetArenaLo is a stub"); + return NULL; } OSContext* OSGetCurrentContext(void) { - puts("OSGetCurrentContext is a stub"); - return NULL; + puts("OSGetCurrentContext is a stub"); + return NULL; } u32 OSGetProgressiveMode(void) { - puts("OSGetProgressiveMode is a stub"); - return 0; + puts("OSGetProgressiveMode is a stub"); + return 0; } u32 OSGetResetCode(void) { - puts("OSGetResetCode is a stub"); - return 0; + puts("OSGetResetCode is a stub"); + return 0; } BOOL OSGetResetSwitchState() { - puts("OSGetResetSwitchState is a stub"); - return FALSE; + puts("OSGetResetSwitchState is a stub"); + return FALSE; } s32 OSGetThreadPriority(OSThread* thread) { - puts("OSGetThreadPriority is a stub"); - return 0; + puts("OSGetThreadPriority is a stub"); + return 0; } OSTick OSGetTick(void) { - puts("OSGetTick is a stub"); - return 0; + puts("OSGetTick is a stub"); + return 0; } OSTime OSGetTime(void) { - puts("OSGetTime is a stub"); - return 0; + puts("OSGetTime is a stub"); + return 0; } void OSInitCond(OSCond* cond) { - puts("OSInitCond is a stub"); + puts("OSInitCond is a stub"); } void OSInitMessageQueue(OSMessageQueue* mq, void* msgArray, s32 msgCount) { - puts("OSInitMessageQueue is a stub"); + puts("OSInitMessageQueue is a stub"); } void OSInitThreadQueue(OSThreadQueue* queue) { - puts("OSInitThreadQueue is a stub"); + puts("OSInitThreadQueue is a stub"); } BOOL OSIsThreadTerminated(OSThread* thread) { - puts("OSIsThreadTerminated is a stub"); - return FALSE; + puts("OSIsThreadTerminated is a stub"); + return FALSE; } int OSJamMessage(OSMessageQueue* mq, void* msg, s32 flags) { - puts("OSJamMessage is a stub"); - return 0; + puts("OSJamMessage is a stub"); + return 0; } BOOL OSLinkFixed(OSModuleInfo* newModule, void* bss) { - puts("OSLinkFixed is a stub"); - return TRUE; + puts("OSLinkFixed is a stub"); + return TRUE; } void OSLockMutex(OSMutex* mutex) { - puts("OSLockMutex is a stub"); + puts("OSLockMutex is a stub"); } void OSProtectRange(u32 chan, void* addr, u32 nBytes, u32 control) { - puts("OSProtectRange is a stub"); + puts("OSProtectRange is a stub"); } int OSReceiveMessage(OSMessageQueue* mq, void* msg, s32 flags) { - puts("OSReceiveMessage is a stub"); - return 0; + puts("OSReceiveMessage is a stub"); + return 0; } int OSSendMessage(OSMessageQueue* mq, void* msg, s32 flags) { - puts("OSSendMessage is a stub"); - return 0; + puts("OSSendMessage is a stub"); + return 0; } void OSSetArenaHi(void* newHi) { - puts("OSSetArenaHi is a stub"); + puts("OSSetArenaHi is a stub"); } void OSSetArenaLo(void* newLo) { - puts("OSSetArenaLo is a stub"); + puts("OSSetArenaLo is a stub"); } void OSSetPeriodicAlarm(OSAlarm* alarm, OSTime start, OSTime period, OSAlarmHandler handler) { - puts("OSSetPeriodicAlarm is a stub"); + puts("OSSetPeriodicAlarm is a stub"); } void OSSetProgressiveMode(u32 on) { - puts("OSSetProgressiveMode is a stub"); + puts("OSSetProgressiveMode is a stub"); } void OSSetSaveRegion(void* start, void* end) { - puts("OSSetSaveRegion is a stub"); + puts("OSSetSaveRegion is a stub"); } OSErrorHandler OSSetErrorHandler(OSError error, OSErrorHandler handler) { - puts("OSSetErrorHandler is a stub"); - return NULL; + puts("OSSetErrorHandler is a stub"); + return NULL; } void OSSetAlarm(OSAlarm* alarm, OSTime tick, OSAlarmHandler handler) { - puts("OSSetAlarm is a stub"); + puts("OSSetAlarm is a stub"); } void* OSInitAlloc(void* arenaStart, void* arenaEnd, int maxHeaps) { - puts("OSInitAlloc is a stub"); - return NULL; + puts("OSInitAlloc is a stub"); + return NULL; } void OSFillFPUContext(__REGISTER OSContext* context) { - puts("OSFillFPUContext is a stub"); + puts("OSFillFPUContext is a stub"); } void OSSetSoundMode(u32 mode) {} -# pragma mark SOUND -void SoundChoID(int a, int b) { puts("SoundChoID is a stub"); } -void SoundPan(int a, int b, int c) { puts("SoundPan is a stub"); } -void SoundPitch(u16 a, int b) { puts("SoundPitch is a stub"); } -void SoundRevID(int a, int b) { puts("SoundRevID is a stub"); } +#pragma mark SOUND +void SoundChoID(int a, int b) { + puts("SoundChoID is a stub"); +} +void SoundPan(int a, int b, int c) { + puts("SoundPan is a stub"); +} +void SoundPitch(u16 a, int b) { + puts("SoundPitch is a stub"); +} +void SoundRevID(int a, int b) { + puts("SoundRevID is a stub"); +} -# pragma mark CARD +#pragma mark CARD #include extern "C" int CARDProbe(s32 chan) { - puts("CARDProbe is a stub"); - return 0; + puts("CARDProbe is a stub"); + return 0; } -s32 CARDCancel(CARDFileInfo *fileInfo) { - puts("CARDCancel is a stub"); - return 0; +s32 CARDCancel(CARDFileInfo* fileInfo) { + puts("CARDCancel is a stub"); + return 0; } s32 CARDCheck(s32 chan) { - puts("CARDCheck is a stub"); - return 0; + puts("CARDCheck is a stub"); + return 0; } s32 CARDCheckAsync(s32 chan, CARDCallback callback) { - puts("CARDCheckAsync is a stub"); - return 0; + puts("CARDCheckAsync is a stub"); + return 0; } -s32 CARDClose(CARDFileInfo *fileInfo) { - puts("CARDClose is a stub"); - return 0; +s32 CARDClose(CARDFileInfo* fileInfo) { + puts("CARDClose is a stub"); + return 0; } -s32 CARDCreate(s32 chan, const char *fileName, u32 size, - CARDFileInfo *fileInfo) { - puts("CARDCreate is a stub"); - return 0; +s32 CARDCreate(s32 chan, const char* fileName, u32 size, CARDFileInfo* fileInfo) { + puts("CARDCreate is a stub"); + return 0; } -s32 CARDCreateAsync(s32 chan, const char *fileName, u32 size, - CARDFileInfo *fileInfo, CARDCallback callback) { - puts("CARDCreateAsync is a stub"); - return 0; +s32 CARDCreateAsync(s32 chan, const char* fileName, u32 size, CARDFileInfo* fileInfo, + CARDCallback callback) { + puts("CARDCreateAsync is a stub"); + return 0; } -s32 CARDDelete(s32 chan, const char *fileName) { - puts("CARDDelete is a stub"); - return 0; +s32 CARDDelete(s32 chan, const char* fileName) { + puts("CARDDelete is a stub"); + return 0; } -s32 CARDDeleteAsync(s32 chan, const char *fileName, CARDCallback callback) { - puts("CARDDeleteAsync is a stub"); - return 0; +s32 CARDDeleteAsync(s32 chan, const char* fileName, CARDCallback callback) { + puts("CARDDeleteAsync is a stub"); + return 0; } s32 CARDFastDeleteAsync(s32 chan, s32 fileNo, CARDCallback callback) { - puts("CARDFastDeleteAsync is a stub"); - return 0; + puts("CARDFastDeleteAsync is a stub"); + return 0; } -s32 CARDFastOpen(s32 chan, s32 fileNo, CARDFileInfo *fileInfo) { - puts("CARDFastOpen is a stub"); - return 0; +s32 CARDFastOpen(s32 chan, s32 fileNo, CARDFileInfo* fileInfo) { + puts("CARDFastOpen is a stub"); + return 0; } s32 CARDFormat(s32 chan) { - puts("CARDFormat is a stub"); - return 0; + puts("CARDFormat is a stub"); + return 0; } -s32 CARDFreeBlocks(s32 chan, s32 *byteNotUsed, s32 *filesNotUsed) { - puts("CARDFreeBlocks is a stub"); - return 0; +s32 CARDFreeBlocks(s32 chan, s32* byteNotUsed, s32* filesNotUsed) { + puts("CARDFreeBlocks is a stub"); + return 0; } s32 CARDGetResultCode(s32 chan) { - puts("CARDGetResultCode is a stub"); - return 0; + puts("CARDGetResultCode is a stub"); + return 0; } -s32 CARDGetStatus(s32 chan, s32 fileNo, CARDStat *stat) { - puts("CARDGetStatus is a stub"); - return 0; +s32 CARDGetStatus(s32 chan, s32 fileNo, CARDStat* stat) { + puts("CARDGetStatus is a stub"); + return 0; } -s32 CARDGetSectorSize(s32 chan, u32 *size) { - puts("CARDGetSectorSize is a stub"); - return 0; +s32 CARDGetSectorSize(s32 chan, u32* size) { + puts("CARDGetSectorSize is a stub"); + return 0; } -void CARDInit() { puts("CARDInit is a stub"); } - -s32 CARDMount(s32 chan, void *workArea, CARDCallback detachCallback) { - puts("CARDMount is a stub"); - return 0; +void CARDInit() { + puts("CARDInit is a stub"); } -s32 CARDMountAsync(s32 chan, void *workArea, CARDCallback detachCallback, +s32 CARDMount(s32 chan, void* workArea, CARDCallback detachCallback) { + puts("CARDMount is a stub"); + return 0; +} + +s32 CARDMountAsync(s32 chan, void* workArea, CARDCallback detachCallback, CARDCallback attachCallback) { - puts("CARDMountAsync is a stub"); - return 0; + puts("CARDMountAsync is a stub"); + return 0; } -s32 CARDOpen(s32 chan, const char *fileName, CARDFileInfo *fileInfo) { - puts("CARDOpen is a stub"); - return 0; +s32 CARDOpen(s32 chan, const char* fileName, CARDFileInfo* fileInfo) { + puts("CARDOpen is a stub"); + return 0; } -s32 CARDProbeEx(s32 chan, s32 *memSize, s32 *sectorSize) { - puts("CARDProbeEx is a stub"); - return 0; +s32 CARDProbeEx(s32 chan, s32* memSize, s32* sectorSize) { + puts("CARDProbeEx is a stub"); + return 0; } -s32 CARDRead(CARDFileInfo *fileInfo, void *addr, s32 length, s32 offset) { - puts("CARDRead is a stub"); - return 0; +s32 CARDRead(CARDFileInfo* fileInfo, void* addr, s32 length, s32 offset) { + puts("CARDRead is a stub"); + return 0; } -s32 CARDReadAsync(CARDFileInfo *fileInfo, void *addr, s32 length, s32 offset, +s32 CARDReadAsync(CARDFileInfo* fileInfo, void* addr, s32 length, s32 offset, CARDCallback callback) { - puts("CARDReadAsync is a stub"); - return 0; + puts("CARDReadAsync is a stub"); + return 0; } -s32 CARDRename(s32 chan, const char *oldName, const char *newName) { - puts("CARDRename is a stub"); - return 0; +s32 CARDRename(s32 chan, const char* oldName, const char* newName) { + puts("CARDRename is a stub"); + return 0; } -s32 CARDRenameAsync(s32 chan, const char *oldName, const char *newName, - CARDCallback callback) { - puts("CARDRenameAsync is a stub"); - return 0; +s32 CARDRenameAsync(s32 chan, const char* oldName, const char* newName, CARDCallback callback) { + puts("CARDRenameAsync is a stub"); + return 0; } -s32 CARDSetStatusAsync(s32 chan, s32 fileNo, CARDStat *stat, - CARDCallback callback) { - puts("CARDSetStatusAsync is a stub"); - return 0; +s32 CARDSetStatusAsync(s32 chan, s32 fileNo, CARDStat* stat, CARDCallback callback) { + puts("CARDSetStatusAsync is a stub"); + return 0; } s32 CARDUnmount(s32 chan) { - puts("CARDUnmount is a stub"); - return 0; + puts("CARDUnmount is a stub"); + return 0; } -extern "C" s32 CARDWrite(CARDFileInfo *fileInfo, void *addr, s32 length, - s32 offset) { - puts("CARDWrite is a stub"); - return 0; +extern "C" s32 CARDWrite(CARDFileInfo* fileInfo, void* addr, s32 length, s32 offset) { + puts("CARDWrite is a stub"); + return 0; } -s32 CARDWriteAsync(CARDFileInfo *fileInfo, const void *addr, s32 length, - s32 offset, CARDCallback callback) { - puts("CARDWriteAsync is a stub"); - return 0; +s32 CARDWriteAsync(CARDFileInfo* fileInfo, const void* addr, s32 length, s32 offset, + CARDCallback callback) { + puts("CARDWriteAsync is a stub"); + return 0; } -s32 CARDGetSerialNo(s32 chan, u64 *serialNo) { return 0; } +s32 CARDGetSerialNo(s32 chan, u64* serialNo) { + return 0; +} -s32 CARDSetStatus(s32 chan, s32 fileNo, CARDStat *stat) { return 0; } +s32 CARDSetStatus(s32 chan, s32 fileNo, CARDStat* stat) { + return 0; +} s32 __CARDFormatRegionAsync(int a, int b) { - puts("__CARDFormatRegionAsync is a stub"); - return 0; + puts("__CARDFormatRegionAsync is a stub"); + return 0; } -# pragma mark DC +#pragma mark DC -void DCFlushRange(void *addr, u32 nBytes) { - // puts("DCFlushRange is a stub"); +void DCFlushRange(void* addr, u32 nBytes) { + // puts("DCFlushRange is a stub"); } -void DCFlushRangeNoSync(void *addr, u32 nBytes) { - // puts("DCFlushRangeNoSync is a stub"); +void DCFlushRangeNoSync(void* addr, u32 nBytes) { + // puts("DCFlushRangeNoSync is a stub"); } -void DCInvalidateRange(void *addr, u32 nBytes) { - // puts("DCInvalidateRange is a stub"); +void DCInvalidateRange(void* addr, u32 nBytes) { + // puts("DCInvalidateRange is a stub"); } -void DCStoreRange(void *addr, u32 nBytes) { - // puts("DCStoreRange is a stub"); +void DCStoreRange(void* addr, u32 nBytes) { + // puts("DCStoreRange is a stub"); } -void DCStoreRangeNoSync(void *addr, u32 nBytes) { - // puts("DCStoreRangeNoSync is a stub"); +void DCStoreRangeNoSync(void* addr, u32 nBytes) { + // puts("DCStoreRangeNoSync is a stub"); } -# pragma mark EXI +#pragma mark EXI BOOL EXIDeselect(int chan) { - puts("EXIDeselect is a stub"); - return FALSE; + puts("EXIDeselect is a stub"); + return FALSE; } -BOOL EXIDma(int chan, void *buffer, s32 size, int d, int e) { - puts("EXIDma is a stub"); - return FALSE; +BOOL EXIDma(int chan, void* buffer, s32 size, int d, int e) { + puts("EXIDma is a stub"); + return FALSE; } -BOOL EXIImm(int chan, u32 *b, int c, int d, int e) { - puts("EXIImm is a stub"); - return FALSE; +BOOL EXIImm(int chan, u32* b, int c, int d, int e) { + puts("EXIImm is a stub"); + return FALSE; } BOOL EXILock(int chan, int b, int c) { - puts("EXILock is a stub"); - return FALSE; + puts("EXILock is a stub"); + return FALSE; } BOOL EXISelect(int chan, int b, int c) { - puts("EXISelect is a stub"); - return FALSE; + puts("EXISelect is a stub"); + return FALSE; } BOOL EXISync(int chan) { - puts("EXISync is a stub"); - return FALSE; + puts("EXISync is a stub"); + return FALSE; } BOOL EXIUnlock(int chan) { - puts("EXIUnlock is a stub"); - return FALSE; + puts("EXIUnlock is a stub"); + return FALSE; } -# pragma mark LC +#pragma mark LC -void LCEnable() { puts("LCEnable is a stub"); } +void LCEnable() { + puts("LCEnable is a stub"); +} // OS-related functions consolidated under "# pragma mark OS" further up -# pragma mark VI +#pragma mark VI static VIRetraceCallback sVIRetraceCallback = NULL; extern "C" { -void VIConfigure(const GXRenderModeObj *rm) { puts("VIConfigure is a stub"); } +void VIConfigure(const GXRenderModeObj* rm) { + puts("VIConfigure is a stub"); +} void VIConfigurePan(u16 xOrg, u16 yOrg, u16 width, u16 height) { - puts("VIConfigurePan is a stub"); + puts("VIConfigurePan is a stub"); } u32 VIGetRetraceCount() { - // puts("VIGetRetraceCount is a stub"); - return 0; // TODO this might be important + // puts("VIGetRetraceCount is a stub"); + return 0; // TODO this might be important } u32 VIGetNextField() { - puts("VIGetNextField is a stub"); - return 0; -} - -void VISetBlack(BOOL black) { puts("VISetBlack is a stub"); } - -void VISetNextFrameBuffer(void *fb) { - // puts("VISetNextFrameBuffer is a stub"); -} - -void VIWaitForRetrace() { - if (sVIRetraceCallback) { - sVIRetraceCallback(0); - } -} - -void* VIGetCurrentFrameBuffer(void) { - puts("VIGetCurrentFrameBuffer is a stub"); - return NULL; -} - -u32 VIGetDTVStatus(void) { - puts("VIGetDTVStatus is a stub"); - return 0; -} - -void* VIGetNextFrameBuffer(void) { - puts("VIGetNextFrameBuffer is a stub"); - return NULL; -} - -VIRetraceCallback VISetPostRetraceCallback(VIRetraceCallback callback) { - sVIRetraceCallback = callback; - return callback; -} - -VIRetraceCallback VISetPreRetraceCallback(VIRetraceCallback cb) { - puts("VISetPreRetraceCallback is a stub"); - return cb; -} - -} // extern "C" - -# pragma mark DSP -#include -extern "C" void __DSP_insert_task(DSPTaskInfo* task) { - puts("__DSP_insert_task is a stub"); -} - -extern "C" void __DSP_boot_task(DSPTaskInfo*) { - puts("__DSP_boot_task is a stub"); -} - -extern "C" void __DSP_exec_task(DSPTaskInfo*, DSPTaskInfo*) { - puts("__DSP_exec_task is a stub"); -} - -extern "C" void __DSP_remove_task(DSPTaskInfo* task) { - puts("__DSP_remove_task is a stub"); -} - -void DSPAssertInt(void) { - puts("DSPAssertInt is a stub"); -} -u32 DSPCheckMailFromDSP(void) { - puts("DSPCheckMailFromDSP is a stub"); - return 0; -} -u32 DSPCheckMailToDSP(void) { - puts("DSPCheckMailToDSP is a stub"); - return 0; -} -void DSPInit(void) { - puts("DSPInit is a stub"); -} -u32 DSPReadMailFromDSP(void) { - puts("DSPReadMailFromDSP is a stub"); - return 0; -} -void DSPSendMailToDSP(u32 mail) { - puts("DSPSendMailToDSP is a stub"); -} - -# pragma mark Z2Audio -#include -void Z2AudioCS::extensionProcess(s32, s32) { - puts("Z2AudioMgr::play is a stub"); -} - -# pragma mark JORServer -#include -void JORServer::releaseMCTX(JORMContext*) { - puts("releaseMCTX is a stub"); -} - -JORMContext* JORServer::attachMCTX(u32) { - puts("attachMCTX is a stub"); - return NULL; -} - -JORServer* JORServer::instance; - -void JORMContext::genCheckBoxSub(u32 kind, const char* label, u32 id, u32 style, u16 initValue, u16 mask, - JOREventListener* pListener, u16 posX, u16 posY, u16 width, - u16 height) { - puts("JORServer::genCheckBoxSub is a stub"); -} -void JORMContext::updateCheckBoxSub(u32 mode, u32 id, u16 value, u16 mask, u32 param_4) { - puts("JORServer::updateCheckBoxSub is a stub"); -} - -<<<<<<< HEAD -======= -int JOREventCallbackListNode::JORAct(u32, const char*) { + puts("VIGetNextField is a stub"); return 0; } ->>>>>>> wip/linkfix2 -# pragma mark JSUMemoryOutputStream +void VISetBlack(BOOL black) { + puts("VISetBlack is a stub"); +} + +void VISetNextFrameBuffer(void* fb) { + // puts("VISetNextFrameBuffer is a stub"); +} + +void VIWaitForRetrace() { + if (sVIRetraceCallback) { + sVIRetraceCallback(0); + } +} + +void* VIGetCurrentFrameBuffer(void) { + puts("VIGetCurrentFrameBuffer is a stub"); + return NULL; +} + +u32 VIGetDTVStatus(void) { + puts("VIGetDTVStatus is a stub"); + return 0; +} + +void* VIGetNextFrameBuffer(void) { + puts("VIGetNextFrameBuffer is a stub"); + return NULL; +} + +VIRetraceCallback VISetPostRetraceCallback(VIRetraceCallback callback) { + sVIRetraceCallback = callback; + return callback; +} + +VIRetraceCallback VISetPreRetraceCallback(VIRetraceCallback cb) { + puts("VISetPreRetraceCallback is a stub"); + return cb; +} + +} // extern "C" + +#pragma mark DSP +#include +extern "C" void __DSP_insert_task(DSPTaskInfo* task) { + puts("__DSP_insert_task is a stub"); +} + +extern "C" void __DSP_boot_task(DSPTaskInfo*) { + puts("__DSP_boot_task is a stub"); +} + +extern "C" void __DSP_exec_task(DSPTaskInfo*, DSPTaskInfo*) { + puts("__DSP_exec_task is a stub"); +} + +extern "C" void __DSP_remove_task(DSPTaskInfo* task) { + puts("__DSP_remove_task is a stub"); +} + +void DSPAssertInt(void) { + puts("DSPAssertInt is a stub"); +} +u32 DSPCheckMailFromDSP(void) { + puts("DSPCheckMailFromDSP is a stub"); + return 0; +} +u32 DSPCheckMailToDSP(void) { + puts("DSPCheckMailToDSP is a stub"); + return 0; +} +void DSPInit(void) { + puts("DSPInit is a stub"); +} +u32 DSPReadMailFromDSP(void) { + puts("DSPReadMailFromDSP is a stub"); + return 0; +} +void DSPSendMailToDSP(u32 mail) { + puts("DSPSendMailToDSP is a stub"); +} + +#pragma mark Z2Audio +#include +void Z2AudioCS::extensionProcess(s32, s32) { + puts("Z2AudioMgr::play is a stub"); +} + +// #pragma mark JORServer +// #include +// void JORServer::releaseMCTX(JORMContext*) { +// puts("releaseMCTX is a stub"); +// } +// +// JORMContext* JORServer::attachMCTX(u32) { +// puts("attachMCTX is a stub"); +// return NULL; +// } +// +// JORServer* JORServer::instance; +// +// void JORMContext::genCheckBoxSub(u32 kind, const char* label, u32 id, u32 style, u16 initValue, +// u16 mask, JOREventListener* pListener, u16 posX, u16 posY, +// u16 width, u16 height) { +// puts("JORServer::genCheckBoxSub is a stub"); +// } +// void JORMContext::updateCheckBoxSub(u32 mode, u32 id, u16 value, u16 mask, u32 param_4) { +// puts("JORServer::updateCheckBoxSub is a stub"); +// } + +#pragma mark JSUMemoryOutputStream #include s32 JSUMemoryOutputStream::getAvailable() const { - return mLength - mPosition; + return mLength - mPosition; } s32 JSUMemoryOutputStream::getPosition() const { - return mPosition; + return mPosition; } -# pragma mark JSURandomOutputStream +#pragma mark JSURandomOutputStream #include s32 JSUMemoryOutputStream::seek(s32 offset, JSUStreamSeekFrom origin) { - // XXX I think this is correct? could be broken. - return this->seekPos(offset, origin); + // XXX I think this is correct? could be broken. + return this->seekPos(offset, origin); } -# pragma mark JKRHeap +#pragma mark JKRHeap #include -JKRHeap* JKRHeap::sRootHeap2; // XXX this is defined for WII/SHIELD, should we just define it for dusk builds? +JKRHeap* JKRHeap::sRootHeap2; // XXX this is defined for WII/SHIELD, should we just define it for + // dusk builds? -# pragma mark mDoExt_onCupOnAupPacket +#pragma mark mDoExt_onCupOnAupPacket #include mDoExt_offCupOnAupPacket::~mDoExt_offCupOnAupPacket() { - puts("mDoExt_onCupOffAupPacket_c destructor is a stub"); + puts("mDoExt_onCupOffAupPacket_c destructor is a stub"); } -# pragma mark mDoExt_onCupOffAupPacket +#pragma mark mDoExt_onCupOffAupPacket mDoExt_onCupOffAupPacket::~mDoExt_onCupOffAupPacket() { - puts("mDoExt_onCupOffAupPacket_c destructor is a stub"); + puts("mDoExt_onCupOffAupPacket_c destructor is a stub"); } -# pragma mark mDoExt -namespace mDoExt { - u8 CurrentHeapAdjustVerbose; - u8 HeapAdjustVerbose; - u8 HeapAdjustQuiet; -}; +// #pragma mark mDoExt +// namespace mDoExt { +// u8 CurrentHeapAdjustVerbose; +// u8 HeapAdjustVerbose; +// u8 HeapAdjustQuiet; +// }; // namespace mDoExt -# pragma mark dKankyo_vrboxHIO_c +#pragma mark dKankyo_vrboxHIO_c #include void dKankyo_vrboxHIO_c::dKankyo_vrboxHIOInfoUpDateF() { - puts("dKankyo_vrboxHIO_c::dKankyo_vrboxHIOInfoUpDateF is a stub"); + puts("dKankyo_vrboxHIO_c::dKankyo_vrboxHIOInfoUpDateF is a stub"); } void dKankyo_lightHIO_c::dKankyo_lightHIOInfoUpDateF() { - puts("dKankyo_lightHIO_c::dKankyo_lightHIOInfoUpDateF is a stub"); + puts("dKankyo_lightHIO_c::dKankyo_lightHIOInfoUpDateF is a stub"); } -# pragma mark dKankyo_HIO_c +#pragma mark dKankyo_HIO_c #include dKankyo_HIO_c::dKankyo_HIO_c() { light.m_displayTVColorSettings = FALSE; @@ -1216,533 +1257,466 @@ dKankyo_navyHIO_c::dKankyo_navyHIO_c() { water_in_light_col.b = 188; } -# pragma mark AI +#pragma mark AI #include u32 AIGetDSPSampleRate(void) { - puts("AIGetDSPSampleRate is a stub"); - return 48000; // Default sample rate? + puts("AIGetDSPSampleRate is a stub"); + return 48000; // Default sample rate? } void AIInit(u8* stack) { - puts("AIInit is a stub"); - // This function initializes the AI system, but we don't have any specific implementation here. - // In a real scenario, it would set up the audio interface and prepare it for use. + puts("AIInit is a stub"); + // This function initializes the AI system, but we don't have any specific implementation here. + // In a real scenario, it would set up the audio interface and prepare it for use. } void AIInitDMA(u32 start_addr, u32 length) { - puts("AIInitDMA is a stub"); + puts("AIInitDMA is a stub"); } AIDCallback AIRegisterDMACallback(AIDCallback callback) { - puts("AIRegisterDMACallback is a stub"); - return callback; + puts("AIRegisterDMACallback is a stub"); + return callback; } void AISetDSPSampleRate(u32 rate) { - // Should this link with the getsamplerate? this is very TODO - puts("AISetDSPSampleRate is a stub"); + // Should this link with the getsamplerate? this is very TODO + puts("AISetDSPSampleRate is a stub"); } void AIStartDMA(void) { - puts("AIStartDMA is a stub"); + puts("AIStartDMA is a stub"); } void AIStopDMA(void) { - puts("AIStopDMA is a stub"); + puts("AIStopDMA is a stub"); } -# pragma mark AR +#pragma mark AR #include // Auxilary RAM doesn't exist on PC platforms, do we need to call malloc/free for these instead? // For now, we will just stub these functions. u32 ARAlloc(u32 length) { - puts("ARAlloc is a stub"); - return 0; + puts("ARAlloc is a stub"); + return 0; } u32 ARGetSize(void) { - return 0x10000; // 64KB, this is the size of the AR memory region + return 0x10000; // 64KB, this is the size of the AR memory region } u32 ARInit(u32* stack_index_addr, u32 num_entries) { - puts("ARInit is a stub"); - return 0; + puts("ARInit is a stub"); + return 0; } -# pragma mark ARQ -void ARQPostRequest(ARQRequest* request, u32 owner, u32 type, u32 priority, u32 source, u32 dest, u32 length, ARQCallback callback) { - puts("ARQPostRequest is a stub"); +#pragma mark ARQ +void ARQPostRequest(ARQRequest* request, u32 owner, u32 type, u32 priority, u32 source, u32 dest, + u32 length, ARQCallback callback) { + puts("ARQPostRequest is a stub"); } void ARQInit() { - puts("ARQInit is a stub"); + puts("ARQInit is a stub"); } -# pragma mark DVD +#pragma mark DVD #include s32 DVDCancel(volatile DVDCommandBlock* block) { - puts("DVDCancel is a stub"); - return 0; + puts("DVDCancel is a stub"); + return 0; } s32 DVDCancel(DVDCommandBlock* block) { - puts("DVDCancel is a stub"); - return 0; + puts("DVDCancel is a stub"); + return 0; } BOOL DVDChangeDir(const char* dirName) { - puts("DVDChangeDir is a stub"); - return TRUE; + puts("DVDChangeDir is a stub"); + return TRUE; } BOOL DVDCheckDisk(void) { - puts("DVDCheckDisk is a stub"); - return TRUE; + puts("DVDCheckDisk is a stub"); + return TRUE; } BOOL DVDClose(DVDFileInfo* fileInfo) { - puts("DVDClose is a stub"); - return TRUE; + puts("DVDClose is a stub"); + return TRUE; } int DVDCloseDir(DVDDir* dir) { - puts("DVDCloseDir is a stub"); - return 0; + puts("DVDCloseDir is a stub"); + return 0; } s32 DVDConvertPathToEntrynum(const char* pathPtr) { - puts("DVDConvertPathToEntrynum is a stub"); - return 0; + puts("DVDConvertPathToEntrynum is a stub"); + return 0; } BOOL DVDFastOpen(s32 entrynum, DVDFileInfo* fileInfo) { - puts("DVDFastOpen is a stub"); - return TRUE; + puts("DVDFastOpen is a stub"); + return TRUE; } s32 DVDGetCommandBlockStatus(const DVDCommandBlock* block) { - puts("DVDGetCommandBlockStatus is a stub"); - return 0; + puts("DVDGetCommandBlockStatus is a stub"); + return 0; } DVDDiskID* DVDGetCurrentDiskID(void) { - puts("DVDGetCurrentDiskID is a stub"); - return NULL; + puts("DVDGetCurrentDiskID is a stub"); + return NULL; } s32 DVDGetDriveStatus(void) { - puts("DVDGetDriveStatus is a stub"); - return 0; + puts("DVDGetDriveStatus is a stub"); + return 0; } void DVDInit(void) { - puts("DVDInit is a stub"); + puts("DVDInit is a stub"); } BOOL DVDOpen(const char* fileName, DVDFileInfo* fileInfo) { - puts("DVDOpen is a stub"); - return TRUE; + puts("DVDOpen is a stub"); + return TRUE; } int DVDOpenDir(const char* dirName, DVDDir* dir) { - puts("DVDOpenDir is a stub"); - return 0; + puts("DVDOpenDir is a stub"); + return 0; } BOOL DVDReadAsyncPrio(DVDFileInfo* fileInfo, void* addr, s32 length, s32 offset, DVDCallback callback, s32 prio) { - puts("DVDReadAsyncPrio is a stub"); - return TRUE; + puts("DVDReadAsyncPrio is a stub"); + return TRUE; } int DVDReadDir(DVDDir* dir, DVDDirEntry* dirent) { - puts("DVDReadDir is a stub"); - return 0; + puts("DVDReadDir is a stub"); + return 0; } s32 DVDReadPrio(DVDFileInfo* fileInfo, void* addr, s32 length, s32 offset, s32 prio) { - puts("DVDReadPrio is a stub"); - return 0; + puts("DVDReadPrio is a stub"); + return 0; } -void DVDReadAbsAsyncForBS(void *a, struct bb2struct *b, int c, int d, - void (*e)()) { - puts("DVDReadAbsAsyncForBS is a stub"); +void DVDReadAbsAsyncForBS(void* a, struct bb2struct* b, int c, int d, void (*e)()) { + puts("DVDReadAbsAsyncForBS is a stub"); } -void DVDReadDiskID(void *a, DVDDiskID *b, void (*c)()) { - puts("DVDReadDiskID is a stub"); +void DVDReadDiskID(void* a, DVDDiskID* b, void (*c)()) { + puts("DVDReadDiskID is a stub"); } void DVDReset() { - puts("DVDReset is a stub"); + puts("DVDReset is a stub"); } -# pragma mark GD +#pragma mark GD #include #include void GDFlushCurrToMem(void) { - puts("GDFlushCurrToMem is a stub"); + puts("GDFlushCurrToMem is a stub"); } void GDInitGDLObj(GDLObj* dl, void* start, u32 length) { - puts("GDInitGDLObj is a stub"); + puts("GDInitGDLObj is a stub"); } void GDOverflowed(void) { - puts("GDOverflowed is a stub"); + puts("GDOverflowed is a stub"); } void GDPadCurr32(void) { - puts("GDPadCurr32 is a stub"); + puts("GDPadCurr32 is a stub"); } void GDSetArray(GXAttr attr, void* base_ptr, u8 stride) { - puts("GDSetArray is a stub"); + puts("GDSetArray is a stub"); } void GDSetArrayRaw(GXAttr attr, u32 base_ptr_raw, u8 stride) { - puts("GDSetArrayRaw is a stub"); + puts("GDSetArrayRaw is a stub"); } void GDSetVtxDescv(const GXVtxDescList* attrPtr) { - puts("GDSetVtxDescv is a stub"); + puts("GDSetVtxDescv is a stub"); } -# pragma mark GX +#pragma mark GX #include // Moved-in GX helpers and helpers for metrics/project -void __GXSetSUTexSize() { puts("__GXSetSUTexSize is a stub"); } -void __GXSetVAT() { puts("__GXSetVAT is a stub"); } -void __GXSetVCD() { puts("__GXSetVCD is a stub"); } -void __GXUpdateBPMask() { puts("__GXUpdateBPMask is a stub"); } +void __GXSetSUTexSize() { + puts("__GXSetSUTexSize is a stub"); +} +void __GXSetVAT() { + puts("__GXSetVAT is a stub"); +} +void __GXSetVCD() { + puts("__GXSetVCD is a stub"); +} +void __GXUpdateBPMask() { + puts("__GXUpdateBPMask is a stub"); +} void GXSetGPMetric(GXPerf0 perf0, GXPerf1 perf1) { - // puts("GXSetGPMetric is a stub"); + // puts("GXSetGPMetric is a stub"); } -void GXReadGPMetric(u32 *cnt0, u32 *cnt1) { - // puts("GXReadGPMetric is a stub"); +void GXReadGPMetric(u32* cnt0, u32* cnt1) { + // puts("GXReadGPMetric is a stub"); } void GXClearGPMetric(void) { - // puts("GXClearGPMetric is a stub"); + // puts("GXClearGPMetric is a stub"); } -void GXReadMemMetric(u32 *cp_req, u32 *tc_req, u32 *cpu_rd_req, u32 *cpu_wr_req, - u32 *dsp_req, u32 *io_req, u32 *vi_req, u32 *pe_req, - u32 *rf_req, u32 *fi_req) { - // puts("GXReadMemMetric is a stub"); +void GXReadMemMetric(u32* cp_req, u32* tc_req, u32* cpu_rd_req, u32* cpu_wr_req, u32* dsp_req, + u32* io_req, u32* vi_req, u32* pe_req, u32* rf_req, u32* fi_req) { + // puts("GXReadMemMetric is a stub"); } void GXClearMemMetric(void) { - // puts("GXClearMemMetric is a stub"); + // puts("GXClearMemMetric is a stub"); } void GXClearVCacheMetric(void) { - // puts("GXClearVCacheMetric is a stub"); + // puts("GXClearVCacheMetric is a stub"); } -void GXReadPixMetric(u32 *top_pixels_in, u32 *top_pixels_out, - u32 *bot_pixels_in, u32 *bot_pixels_out, - u32 *clr_pixels_in, u32 *copy_clks) { - // puts("GXReadPixMetric is a stub"); +void GXReadPixMetric(u32* top_pixels_in, u32* top_pixels_out, u32* bot_pixels_in, + u32* bot_pixels_out, u32* clr_pixels_in, u32* copy_clks) { + // puts("GXReadPixMetric is a stub"); } void GXClearPixMetric(void) { - // puts("GXClearPixMetric is a stub"); + // puts("GXClearPixMetric is a stub"); } void GXSetVCacheMetric(GXVCachePerf attr) { - // puts("GXSetVCacheMetric is a stub"); + // puts("GXSetVCacheMetric is a stub"); } -void GXReadVCacheMetric(u32 *check, u32 *miss, u32 *stall) { - // puts("GXReadVCacheMetric is a stub"); +void GXReadVCacheMetric(u32* check, u32* miss, u32* stall) { + // puts("GXReadVCacheMetric is a stub"); } void GXSetDrawSync(u16 token) { - // puts("GXSetDrawSync is a stub"); + // puts("GXSetDrawSync is a stub"); } GXDrawSyncCallback GXSetDrawSyncCallback(GXDrawSyncCallback cb) { - puts("GXSetDrawSyncCallback is a stub"); - return cb; + puts("GXSetDrawSyncCallback is a stub"); + return cb; } void GXDrawCylinder(u8 numEdges) { - puts("GXDrawCylinder is a stub"); + puts("GXDrawCylinder is a stub"); } void GXWaitDrawDone(void) { - // puts("GXWaitDrawDone is a stub"); + // puts("GXWaitDrawDone is a stub"); } -void GXSetTevIndTile(GXTevStageID tev_stage, GXIndTexStageID ind_stage, - u16 tilesize_s, u16 tilesize_t, u16 tilespacing_s, - u16 tilespacing_t, GXIndTexFormat format, +void GXSetTevIndTile(GXTevStageID tev_stage, GXIndTexStageID ind_stage, u16 tilesize_s, + u16 tilesize_t, u16 tilespacing_s, u16 tilespacing_t, GXIndTexFormat format, GXIndTexMtxID matrix_sel, GXIndTexBiasSel bias_sel, GXIndTexAlphaSel alpha_sel) { - // TODO + // TODO } void GXResetWriteGatherPipe(void) { - // puts("GXResetWriteGatherPipe is a stub"); + // puts("GXResetWriteGatherPipe is a stub"); } -void GXProject(f32 x, f32 y, f32 z, const f32 mtx[3][4], const f32 *pm, - const f32 *vp, f32 *sx, f32 *sy, f32 *sz) { - Vec peye; - f32 xc; - f32 yc; - f32 zc; - f32 wc; +void GXProject(f32 x, f32 y, f32 z, const f32 mtx[3][4], const f32* pm, const f32* vp, f32* sx, + f32* sy, f32* sz) { + Vec peye; + f32 xc; + f32 yc; + f32 zc; + f32 wc; - peye.x = mtx[0][3] + ((mtx[0][2] * z) + ((mtx[0][0] * x) + (mtx[0][1] * y))); - peye.y = mtx[1][3] + ((mtx[1][2] * z) + ((mtx[1][0] * x) + (mtx[1][1] * y))); - peye.z = mtx[2][3] + ((mtx[2][2] * z) + ((mtx[2][0] * x) + (mtx[2][1] * y))); - if (pm[0] == 0.0f) { - xc = (peye.x * pm[1]) + (peye.z * pm[2]); - yc = (peye.y * pm[3]) + (peye.z * pm[4]); - zc = pm[6] + (peye.z * pm[5]); - wc = 1.0f / -peye.z; - } else { - xc = pm[2] + (peye.x * pm[1]); - yc = pm[4] + (peye.y * pm[3]); - zc = pm[6] + (peye.z * pm[5]); - wc = 1.0f; - } - *sx = (vp[2] / 2.0f) + (vp[0] + (wc * (xc * vp[2] / 2.0f))); - *sy = (vp[3] / 2.0f) + (vp[1] + (wc * (-yc * vp[3] / 2.0f))); - *sz = vp[5] + (wc * (zc * (vp[5] - vp[4]))); + peye.x = mtx[0][3] + ((mtx[0][2] * z) + ((mtx[0][0] * x) + (mtx[0][1] * y))); + peye.y = mtx[1][3] + ((mtx[1][2] * z) + ((mtx[1][0] * x) + (mtx[1][1] * y))); + peye.z = mtx[2][3] + ((mtx[2][2] * z) + ((mtx[2][0] * x) + (mtx[2][1] * y))); + if (pm[0] == 0.0f) { + xc = (peye.x * pm[1]) + (peye.z * pm[2]); + yc = (peye.y * pm[3]) + (peye.z * pm[4]); + zc = pm[6] + (peye.z * pm[5]); + wc = 1.0f / -peye.z; + } else { + xc = pm[2] + (peye.x * pm[1]); + yc = pm[4] + (peye.y * pm[3]); + zc = pm[6] + (peye.z * pm[5]); + wc = 1.0f; + } + *sx = (vp[2] / 2.0f) + (vp[0] + (wc * (xc * vp[2] / 2.0f))); + *sy = (vp[3] / 2.0f) + (vp[1] + (wc * (-yc * vp[3] / 2.0f))); + *sz = vp[5] + (wc * (zc * (vp[5] - vp[4]))); } void GXAbortFrame(void) { - puts("GXAbortFrame is a stub"); + puts("GXAbortFrame is a stub"); } void GXEnableTexOffsets(GXTexCoordID coord, u8 line_enable, u8 point_enable) { - puts("GXEnableTexOffsets is a stub"); + puts("GXEnableTexOffsets is a stub"); } OSThread* GXGetCurrentGXThread(void) { - puts("GXGetCurrentGXThread is a stub"); - return NULL; + puts("GXGetCurrentGXThread is a stub"); + return NULL; } void* GXGetFifoBase(const GXFifoObj* fifo) { - puts("GXGetFifoBase is a stub"); - return NULL; + puts("GXGetFifoBase is a stub"); + return NULL; } u32 GXGetFifoSize(const GXFifoObj* fifo) { - puts("GXGetFifoSize is a stub"); - return 0; + puts("GXGetFifoSize is a stub"); + return 0; } u16 GXGetNumXfbLines(u16 efbHeight, f32 yScale) { - puts("GXGetNumXfbLines is a stub"); - return 0; + puts("GXGetNumXfbLines is a stub"); + return 0; } void GXGetViewportv(f32* vp) { - puts("GXGetViewportv is a stub"); + puts("GXGetViewportv is a stub"); } void GXGetScissor(u32* left, u32* top, u32* wd, u32* ht) { - puts("GXGetScissor is a stub"); + puts("GXGetScissor is a stub"); } u32 GXGetTexObjTlut(const GXTexObj* tex_obj) { - puts("GXGetTexObjTlut is a stub"); - return 0; + puts("GXGetTexObjTlut is a stub"); + return 0; } f32 GXGetYScaleFactor(u16 efbHeight, u16 xfbHeight) { - puts("GXGetYScaleFactor is a stub"); - return 0.0f; + puts("GXGetYScaleFactor is a stub"); + return 0.0f; } -void GXInitTexCacheRegion(GXTexRegion* region, u8 is_32b_mipmap, u32 tmem_even, GXTexCacheSize size_even, u32 tmem_odd, GXTexCacheSize size_odd) { - puts("GXInitTexCacheRegion is a stub"); +void GXInitTexCacheRegion(GXTexRegion* region, u8 is_32b_mipmap, u32 tmem_even, + GXTexCacheSize size_even, u32 tmem_odd, GXTexCacheSize size_odd) { + puts("GXInitTexCacheRegion is a stub"); } // XXX, this should be some struct? -GXRenderModeObj GXNtsc480IntDf; +//GXRenderModeObj GXNtsc480IntDf; GXRenderModeObj GXNtsc480Int; void GXPeekZ(u16 x, u16 y, u32* z) { - puts("GXPeekZ is a stub"); - *z = 0; + puts("GXPeekZ is a stub"); + *z = 0; } void GXReadXfRasMetric(u32* xf_wait_in, u32* xf_wait_out, u32* ras_busy, u32* clocks) { - puts("GXReadXfRasMetric is a stub"); - *xf_wait_in = 0; - *xf_wait_out = 0; - *ras_busy = 0; - *clocks = 0; + puts("GXReadXfRasMetric is a stub"); + *xf_wait_in = 0; + *xf_wait_out = 0; + *ras_busy = 0; + *clocks = 0; } void GXSetClipMode(GXClipMode mode) { - puts("GXSetClipMode is a stub"); + puts("GXSetClipMode is a stub"); } void GXSetCoPlanar(GXBool enable) { - puts("GXSetCoPlanar is a stub"); + puts("GXSetCoPlanar is a stub"); } void GXSetCopyClamp(GXFBClamp clamp) { - puts("GXSetCopyClamp is a stub"); + puts("GXSetCopyClamp is a stub"); } OSThread* GXSetCurrentGXThread(void) { - puts("GXSetCurrentGXThread is a stub"); - return NULL; + puts("GXSetCurrentGXThread is a stub"); + return NULL; } -void GXSetFogRangeAdj(GXBool enable, u16 center, const GXFogAdjTable *table) { - puts("GXSetFogRangeAdj is a stub"); +void GXSetFogRangeAdj(GXBool enable, u16 center, const GXFogAdjTable* table) { + puts("GXSetFogRangeAdj is a stub"); } void GXSetMisc(GXMiscToken token, u32 val) { - puts("GXSetMisc is a stub"); + puts("GXSetMisc is a stub"); } void GXSetPointSize(u8 pointSize, GXTexOffset texOffsets) { - puts("GXSetPointSize is a stub"); + puts("GXSetPointSize is a stub"); } void GXSetProjectionv(const f32* ptr) { - puts("GXSetProjectionv is a stub"); + puts("GXSetProjectionv is a stub"); } void GXSetVtxAttrFmtv(GXVtxFmt vtxfmt, const GXVtxAttrFmtList* list) { - puts("GXSetVtxAttrFmtv is a stub"); + puts("GXSetVtxAttrFmtv is a stub"); } -# pragma mark KPAD +#pragma mark KPAD // is this actually used? extern "C" void KPADDisableDPD(s32) { - puts("KPADDisableDPD is a stub"); - + puts("KPADDisableDPD is a stub"); } extern "C" void KPADEnableDPD(s32) { - puts("KPADEnableDPD is a stub"); + puts("KPADEnableDPD is a stub"); } // LC (consolidated above) void LCDisable(void) { - puts("LCDisable is a stub"); + puts("LCDisable is a stub"); } void LCQueueWait(__REGISTER u32 len) { - puts("LCQueueWait is a stub"); + puts("LCQueueWait is a stub"); } u32 LCStoreData(void* destAddr, void* srcAddr, u32 nBytes) { - puts("LCStoreData is a stub"); - return 0; + puts("LCStoreData is a stub"); + return 0; } -# pragma mark PPC Arch +#pragma mark PPC Arch // MSR stuff? -void PPCHalt() { puts("PPCHalt is a stub"); } +void PPCHalt() { + puts("PPCHalt is a stub"); +} extern "C" void PPCSync(void) { - // puts("PPCSync is a stub"); + // puts("PPCSync is a stub"); } u32 PPCMfhid2() { - puts("PPCMfhid2 is a stub"); - return 0; + puts("PPCMfhid2 is a stub"); + return 0; } u32 PPCMfmsr() { - puts("PPCMfmsr is a stub"); - return 0; + puts("PPCMfmsr is a stub"); + return 0; } void PPCMtmsr(u32 newMSR) { - puts("PPCMtmsr is a stub"); + puts("PPCMtmsr is a stub"); } -# pragma mark WPAD +#pragma mark WPAD // uh.. this is revolution include not dolphin? typedef void (*WPADExtensionCallback)(s32 chan, s32 devType); extern "C" WPADExtensionCallback WPADSetExtensionCallback(s32 chan, WPADExtensionCallback cb) { - puts("WPADSetExtensionCallback is a stub"); - return cb; + puts("WPADSetExtensionCallback is a stub"); + return cb; } -# pragma mark GF +#pragma mark GF #include void GFSetZMode(u8 compare_enable, GXCompare func, u8 update_enable) { - puts("GFSetZMode is a stub"); + puts("GFSetZMode is a stub"); } void GFSetGenMode2(u8 nTexGens, u8 nChans, u8 nTevs, u8 nInds, GXCullMode cm) { - puts("GFSetGenMode2 is a stub"); + puts("GFSetGenMode2 is a stub"); } void GFSetTevColorS10(GXTevRegID reg, GXColorS10 color) { - puts("GFSetTevColorS10 is a stub"); + puts("GFSetTevColorS10 is a stub"); } -void GFSetBlendModeEtc(GXBlendMode type, GXBlendFactor src_factor, - GXBlendFactor dst_factor, GXLogicOp logic_op, - u8 color_update_enable, u8 alpha_update_enable, +void GFSetBlendModeEtc(GXBlendMode type, GXBlendFactor src_factor, GXBlendFactor dst_factor, + GXLogicOp logic_op, u8 color_update_enable, u8 alpha_update_enable, u8 dither_enable) { - puts("GFSetBlendModeEtc is a stub"); + puts("GFSetBlendModeEtc is a stub"); } void GFSetChanAmbColor(GXChannelID chan, GXColor color) { - puts("GFSetChanAmbColor is a stub"); + puts("GFSetChanAmbColor is a stub"); } void GFSetFog(GXFogType type, f32 startz, f32 endz, f32 nearz, f32 farz, GXColor color) { - puts("GFSetFog is a stub"); + puts("GFSetFog is a stub"); } -# pragma mark DEBUGPAD +#pragma mark DEBUGPAD #include dDebugPad_c::dDebugPad_c() { - puts("constructing debug pad, stubbed?"); + puts("constructing debug pad, stubbed?"); } -# pragma mark f_ap +#pragma mark f_ap #include u8 fapGm_HIO_c::mCaptureScreenDivH = 1; -# pragma mark dMsgObject +#pragma mark dMsgObject #include -void dMsgObject_c::setSelectWordFlag(u8 flag) { - puts("dMsgObject_c::setSelectWordFlag is a stub"); -} +// void dMsgObject_c::setSelectWordFlag(u8 flag) { +// puts("dMsgObject_c::setSelectWordFlag is a stub"); +// } void dMsgObject_c::setWord(const char* i_word) { - puts("dMsgObject_c::setWord is a stub"); + puts("dMsgObject_c::setWord is a stub"); } void dMsgObject_c::setSelectWord(int i_no, const char* i_word) { - puts("dMsgObject_c::setSelectWord is a stub"); -} -<<<<<<< HEAD -======= - -#pragma mark HIO -#include -#include -BOOL HIO2Close(s32 handle) { - puts("HIO2Close is a stub"); - return FALSE; + puts("dMsgObject_c::setSelectWord is a stub"); } -BOOL HIO2EnumDevices(HIO2EnumCallback callback) { - puts("HIO2EnumDevices is a stub"); - return FALSE; +#pragma mark dMeter2Info +#include +void dMeter2Info_c::getString(u32 i_stringID, char* o_string, JMSMesgEntry_c* i_msgEntry) { + puts("dMeter2Info_c::getString is a stub"); +} +void dMeter2Info_c::getStringKanji(u32 i_stringID, char* o_string, JMSMesgEntry_c* i_msgEntry) { + puts("dMeter2Info_c::getStringKanji is a stub"); } -BOOL HIO2Init(void) { - puts("HIO2Init is a stub"); - return FALSE; -} +dPa_particleTracePcallBack_c JPTracePCB4; -s32 HIO2Open(HIO2DeviceType type, HIO2UnkCallback exiCb, HIO2DisconnectCallback disconnectCb) { - puts("HIO2Open is a stub"); - return 0; -} -BOOL HIO2Read(s32 handle, u32 addr, void* buffer, s32 size) { - puts("HIO2Read is a stub"); - return FALSE; -} -BOOL HIO2Write(s32 handle, u32 addr, void* buffer, s32 size) { - puts("HIO2Write is a stub"); - return FALSE; -} - -BOOL HIORead(u32 addr, void* buffer, s32 size) { - puts("HIORead is a stub"); - return FALSE; -} - -BOOL HIOWrite(u32 addr, void* buffer, s32 size) { - puts("HIOWrite is a stub"); - return FALSE; -} - -#pragma mark JHICommBuf -#include -void JHICommBufHeader::init() { - puts("JHICommBufHeader::init is a stub"); -} - -int JHICommBufHeader::load() { - puts("JHICommBufHeader::load is a stub"); -} - -int JHICommBufReader::read(void*, int) { - puts("JHICommBufReader::read is a stub"); - return 0; -} -void JHICommBufReader::readEnd() { - puts("JHICommBufReader::readEnd is a stub"); -} - -int JHICommBufReader::readBegin() { - puts("JHICommBufReader::readBegin is a stub"); -} - -int JHICommBufWriter::writeBegin() { - puts("JHICommBufWriter::writeBegin is a stub"); - return 0; -} - -int JHICommBufWriter::write(void*, int) { - puts("JHICommBufWriter::write is a stub"); - return 0; -} - -void JHICommBufWriter::writeEnd() { - puts("JHICommBufWriter::writeEnd is a stub"); -} - -u32 JHICommBufReader::Header::getReadableSize() const { - puts("JHICommBufReader::Header::getReadableSize is a stub"); - return 0; -} ->>>>>>> wip/linkfix2 diff --git a/src/f_op/f_op_msg_mng.cpp b/src/f_op/f_op_msg_mng.cpp index 9442a807a6..c0b6dd060a 100644 --- a/src/f_op/f_op_msg_mng.cpp +++ b/src/f_op/f_op_msg_mng.cpp @@ -248,7 +248,7 @@ u8 fopMsgM_itemNumIdx(u8 i_no) { return itemicon[i_no] & 0xFF; } -f32 dummy() { +static f32 dummy() { J2DPane* dummyPlane = NULL; dummyPlane->getAlpha(); dummyPlane->getHeight(); diff --git a/src/f_pc/f_pc_profile.cpp b/src/f_pc/f_pc_profile.cpp index 4a4f9a1d8b..e6d2933ada 100644 --- a/src/f_pc/f_pc_profile.cpp +++ b/src/f_pc/f_pc_profile.cpp @@ -5,7 +5,16 @@ #include "f_pc/f_pc_profile.h" + +#ifndef __MWERKS__ +// Forward declare the static list from f_pc_profile_lst.cpp +extern process_profile_definition* g_fpcPfLst_ProfileList[]; +// On PC: Direct pointer to static array +process_profile_definition** g_fpcPf_ProfileList_p = g_fpcPfLst_ProfileList; +#else +// On Console: Pointer initialized by REL module prolog process_profile_definition** g_fpcPf_ProfileList_p; +#endif process_profile_definition* fpcPf_Get(s16 i_profname) { int index = i_profname; diff --git a/src/f_pc/f_pc_profile_lst.cpp b/src/f_pc/f_pc_profile_lst.cpp index 2ccc40684d..b55847533c 100644 --- a/src/f_pc/f_pc_profile_lst.cpp +++ b/src/f_pc/f_pc_profile_lst.cpp @@ -5,6 +5,8 @@ #include "f_pc/f_pc_profile_lst.h" + +#ifdef __MWERKS__ process_profile_definition* g_fpcPfLst_ProfileList[] = { &g_profile_OVERLAP0, &g_profile_OVERLAP1, @@ -800,7 +802,6 @@ process_profile_definition* g_fpcPfLst_ProfileList[] = { &g_profile_GAMEOVER, NULL, }; - extern "C" void ModuleProlog() { g_fpcPf_ProfileList_p = g_fpcPfLst_ProfileList; } @@ -808,3 +809,801 @@ extern "C" void ModuleProlog() { extern "C" void ModuleEpilog() { g_fpcPf_ProfileList_p = NULL; } + +#else +process_profile_definition* g_fpcPfLst_ProfileList[] = { + &g_profile_OVERLAP0.base.base, + &g_profile_OVERLAP1.base.base, + &g_profile_OVERLAP3.base.base, + &g_profile_OVERLAP6.base.base, + &g_profile_OVERLAP7.base.base, + &g_profile_OVERLAP8.base.base, + &g_profile_OVERLAP9.base.base, + &g_profile_OVERLAP10.base.base, + &g_profile_OVERLAP11.base.base, + &g_profile_LOGO_SCENE.base.base, + &g_profile_MENU_SCENE.base.base, + &g_profile_PLAY_SCENE.base.base, + &g_profile_OPENING_SCENE.base.base, + &g_profile_NAME_SCENE.base.base, + &g_profile_NAMEEX_SCENE.base.base, + &g_profile_WARNING_SCENE.base.base, + &g_profile_WARNING2_SCENE.base.base, + &g_profile_OVERLAP2.base.base, + &g_profile_ROOM_SCENE.base.base, + &g_profile_KANKYO.base.base, + &g_profile_ALLDIE.base.base, + &g_profile_ENVSE.base.base, + &g_profile_Obj_Swpush.base.base, + &g_profile_Obj_Swpush2.base.base, + &g_profile_Obj_Swpush5.base.base, + &g_profile_Tag_Gstart.base.base, + &g_profile_NO_CHG_ROOM.base.base, + &g_profile_Obj_Lv6ElevtA.base.base, + &g_profile_OBJ_SO.base.base, + &g_profile_Obj_Movebox.base.base, + &g_profile_Obj_SwTurn.base.base, + &g_profile_Obj_Lv6SwTurn.base.base, + &g_profile_OBJ_SEKIZOA.base.base, + &g_profile_OBJ_GRA.base.base, + &g_profile_TAG_GRA.base.base, + &g_profile_TAG_YAMI.base.base, + &g_profile_Obj_Ladder.base.base, + &g_profile_OBJ_BEF.base.base, + &g_profile_OBJ_FMOBJ.base.base, + &g_profile_OBJ_LBOX.base.base, + &g_profile_OBJ_WEB0.base.base, + &g_profile_OBJ_WEB1.base.base, + &g_profile_OBJ_CB.base.base, + &g_profile_OBJ_MAKI.base.base, + &g_profile_OBJ_BRG.base.base, + &g_profile_OBJ_GB.base.base, + &g_profile_OBJ_GM.base.base, + &g_profile_OBJ_TOBY.base.base, + &g_profile_OBJ_TP.base.base, + &g_profile_TREESH.base.base, + &g_profile_Obj_ZDoor.base.base, + &g_profile_Obj_Pillar.base.base, + &g_profile_Obj_Cdoor.base.base, + &g_profile_GRDWATER.base.base, + &g_profile_Obj_RotBridge.base.base, + &g_profile_Obj_MagLift.base.base, + &g_profile_Obj_MagLiftRot.base.base, + &g_profile_Obj_Lv1Cdl00.base.base, + &g_profile_Obj_Lv1Cdl01.base.base, + &g_profile_Obj_TvCdlst.base.base, + &g_profile_Obj_HsTarget.base.base, + &g_profile_Obj_HeavySw.base.base, + &g_profile_Obj_GoGate.base.base, + &g_profile_Obj_TaFence.base.base, + &g_profile_Obj_Saidan.base.base, + &g_profile_Obj_SpinLift.base.base, + &g_profile_Obj_BmWindow.base.base, + &g_profile_Obj_RfHole.base.base, + &g_profile_Obj_WaterPillar.base.base, + &g_profile_Obj_SyRock.base.base, + &g_profile_Obj_BsGate.base.base, + &g_profile_Obj_AmiShutter.base.base, + &g_profile_Obj_WtGate.base.base, + &g_profile_Obj_Lv2Candle.base.base, + &g_profile_Obj_TogeTrap.base.base, + &g_profile_Obj_RotTrap.base.base, + &g_profile_Obj_SwallShutter.base.base, + &g_profile_Obj_IceWall.base.base, + &g_profile_Obj_Lv5SwIce.base.base, + &g_profile_Obj_Lv5FBoard.base.base, + &g_profile_Obj_Turara.base.base, + &g_profile_Obj_TwGate.base.base, + &g_profile_Obj_Digholl.base.base, + &g_profile_Obj_Digpl.base.base, + &g_profile_Obj_TestCube.base.base, + &g_profile_Obj_Kshutter.base.base, + &g_profile_NPC_COACH.base.base, + &g_profile_NPC_THEB.base.base, + &g_profile_COACH_FIRE.base.base, + &g_profile_COACH2D.base.base, + &g_profile_BALLOON2D.base.base, + &g_profile_SKIP2D.base.base, + &g_profile_Obj_MvStair.base.base, + &g_profile_Obj_Cowdoor.base.base, + &g_profile_Obj_Swpropeller.base.base, + &g_profile_Obj_BoomShutter.base.base, + &g_profile_NPC_KS.base.base, + &g_profile_Obj_Hfuta.base.base, + &g_profile_Obj_BkDoor.base.base, + &g_profile_Obj_Cboard.base.base, + &g_profile_Obj_MGate.base.base, + &g_profile_Obj_Ikada.base.base, + &g_profile_Obj_Ice_l.base.base, + &g_profile_Obj_Ice_s.base.base, + &g_profile_Obj_E_CREATE.base.base, + &g_profile_Obj_Bhbridge.base.base, + &g_profile_Obj_Kaisou.base.base, + &g_profile_Obj_HHASHI.base.base, + &g_profile_Obj_BHASHI.base.base, + &g_profile_OCTHASHI.base.base, + &g_profile_Obj_THASHI.base.base, + &g_profile_Obj_CRVGATE.base.base, + &g_profile_Obj_CRVFENCE.base.base, + &g_profile_Obj_CRVHAHEN.base.base, + &g_profile_Obj_CRVSTEEL.base.base, + &g_profile_Obj_CRVLH_UP.base.base, + &g_profile_Obj_CRVLH_DW.base.base, + &g_profile_Obj_RIVERROCK.base.base, + &g_profile_Obj_DUST.base.base, + &g_profile_Obj_ITA.base.base, + &g_profile_Obj_Window.base.base, + &g_profile_Obj_MetalBox.base.base, + &g_profile_Obj_BBox.base.base, + &g_profile_OBJ_MSIMA.base.base, + &g_profile_OBJ_MYOGAN.base.base, + &g_profile_B_ZANTS.base.base, + &g_profile_Obj_ChainBlock.base.base, + &g_profile_Obj_ChainWall.base.base, + &g_profile_Obj_KkrGate.base.base, + &g_profile_Obj_RiderGate.base.base, + &g_profile_Obj_Onsen.base.base, + &g_profile_Obj_Chest.base.base, + &g_profile_Obj_Bemos.base.base, + &g_profile_Obj_RopeBridge.base.base, + &g_profile_Obj_WellCover.base.base, + &g_profile_Obj_GraveStone.base.base, + &g_profile_Obj_ZraRock.base.base, + &g_profile_Obj_GraRock.base.base, + &g_profile_Obj_GrzRock.base.base, + &g_profile_GRA_WALL.base.base, + &g_profile_OBJ_ONSEN_FIRE.base.base, + &g_profile_Obj_Lv6bemos.base.base, + &g_profile_Obj_Lv6bemos2.base.base, + &g_profile_Obj_BarDesk.base.base, + &g_profile_Obj_DigSnow.base.base, + &g_profile_Obj_Ytaihou.base.base, + &g_profile_Obj_Elevator.base.base, + &g_profile_Obj_Lv6TogeRoll.base.base, + &g_profile_Obj_Lv6TogeTrap.base.base, + &g_profile_Obj_Lv6Tenbin.base.base, + &g_profile_Obj_Lv6SwGate.base.base, + &g_profile_Obj_Lv6Lblock.base.base, + &g_profile_Obj_Lv6ChgGate.base.base, + &g_profile_Obj_Lv6FuriTrap.base.base, + &g_profile_Obj_Lv6SzGate.base.base, + &g_profile_Obj_Lv4EdShutter.base.base, + &g_profile_Obj_Lv4Gate.base.base, + &g_profile_Obj_Lv4PoGate.base.base, + &g_profile_Obj_Lv4SlideWall.base.base, + &g_profile_Obj_Lv4HsTarget.base.base, + &g_profile_Obj_Lv7PropY.base.base, + &g_profile_Obj_Lv7BsGate.base.base, + &g_profile_Obj_Lv8OptiLift.base.base, + &g_profile_Obj_Lv8KekkaiTrap.base.base, + &g_profile_Obj_Lv8Lift.base.base, + &g_profile_Obj_Lv8UdFloor.base.base, + &g_profile_Obj_Lv9SwShutter.base.base, + &g_profile_Obj_TobyHouse.base.base, + &g_profile_Obj_poCandle.base.base, + &g_profile_Obj_Lv4DigSand.base.base, + &g_profile_Obj_FallObj.base.base, + &g_profile_Obj_SmgDoor.base.base, + &g_profile_Obj_SwLight.base.base, + &g_profile_Obj_Avalanche.base.base, + &g_profile_Obj_MirrorScrew.base.base, + &g_profile_Obj_MirrorSand.base.base, + &g_profile_Obj_MirrorTable.base.base, + &g_profile_Obj_MirrorChain.base.base, + &g_profile_Obj_Mirror6Pole.base.base, + &g_profile_Obj_SwSpinner.base.base, + &g_profile_Obj_TDoor.base.base, + &g_profile_Obj_Lv7Bridge.base.base, + &g_profile_Obj_zrTurara.base.base, + &g_profile_Obj_TakaraDai.base.base, + &g_profile_Obj_Table.base.base, + &g_profile_Obj_CatDoor.base.base, + &g_profile_Obj_Gake.base.base, + &g_profile_CSTAF.base.base, + &g_profile_Obj_Lv4RailWall.base.base, + &g_profile_Obj_Lv4Sand.base.base, + &g_profile_Obj_PushDoor.base.base, + &g_profile_PushDoor.base.base, + &g_profile_Obj_GanonWall2.base.base, + &g_profile_Obj_Lv4Bridge.base.base, + &g_profile_Obj_Lv4Floor.base.base, + &g_profile_Tag_Spinner.base.base, + &g_profile_Obj_SwHang.base.base, + &g_profile_Obj_RotStair.base.base, + &g_profile_Obj_MagneArm.base.base, + &g_profile_Obj_KWheel00.base.base, + &g_profile_Obj_KWheel01.base.base, + &g_profile_Obj_Ychndlr.base.base, + &g_profile_Obj_PRElvtr.base.base, + &g_profile_Obj_MHasu.base.base, + &g_profile_Obj_YIblltray.base.base, + &g_profile_Obj_Lv6EGate.base.base, + &g_profile_Obj_PDtile.base.base, + &g_profile_Obj_PDwall.base.base, + &g_profile_Obj_Lv4PRwall.base.base, + &g_profile_Obj_KLift00.base.base, + &g_profile_B_OH.base.base, + &g_profile_Obj_Lv4Chan.base.base, + &g_profile_Obj_Lv3R10Saka.base.base, + &g_profile_Obj_Lv3Water.base.base, + &g_profile_Obj_Lv3Water2.base.base, + &g_profile_OBJ_LV3WATERB.base.base, + &g_profile_Obj_HBombkoya.base.base, + &g_profile_Obj_SZbridge.base.base, + &g_profile_Obj_KakarikoBrg.base.base, + &g_profile_Obj_OrdinBrg.base.base, + &g_profile_Obj_BurnBox.base.base, + &g_profile_Obj_KJgjs.base.base, + &g_profile_OBJ_IHASI.base.base, + &g_profile_Obj_IceBlock.base.base, + &g_profile_Obj_VolcanicBall.base.base, + &g_profile_Obj_VolcanicBomb.base.base, + &g_profile_Obj_VolcGnd.base.base, + &g_profile_Obj_KKanban.base.base, + &g_profile_E_PH.base.base, + &g_profile_NPC_ZRA.base.base, + &g_profile_Obj_Chandelier.base.base, + &g_profile_Obj_Stopper2.base.base, + &g_profile_DOOR20.base.base, + &g_profile_Tag_Hinit.base.base, + &g_profile_Tag_Hjump.base.base, + &g_profile_Tag_AJnot.base.base, + &g_profile_Tag_Hstop.base.base, + &g_profile_CANOE.base.base, + &g_profile_HORSE.base.base, + &g_profile_E_WB.base.base, + &g_profile_OBJ_ITO.base.base, + &g_profile_OBJ_SW.base.base, + &g_profile_SPINNER.base.base, + &g_profile_B_OB.base.base, + &g_profile_KAGO.base.base, + &g_profile_E_YC.base.base, + &g_profile_B_DS.base.base, + &g_profile_B_DR.base.base, + &g_profile_B_ZANTZ.base.base, + &g_profile_B_ZANT.base.base, + &g_profile_B_ZANTM.base.base, + &g_profile_TBOX.base.base, + &g_profile_TBOX2.base.base, + &g_profile_ALINK.base.base, + &g_profile_BOOMERANG.base.base, + &g_profile_MIDNA.base.base, + &g_profile_NPC_TK.base.base, + &g_profile_NPC_WORM.base.base, + &g_profile_PPolamp.base.base, + &g_profile_BkyRock.base.base, + &g_profile_HITOBJ.base.base, + &g_profile_EP.base.base, + &g_profile_COW.base.base, + &g_profile_PERU.base.base, + &g_profile_NI.base.base, + &g_profile_NPC_TKJ2.base.base, + &g_profile_SQ.base.base, + &g_profile_NPC_SQ.base.base, + &g_profile_DO.base.base, + &g_profile_NPC_NE.base.base, + &g_profile_NPC_TR.base.base, + &g_profile_NPC_LF.base.base, + &g_profile_OBJ_FOOD.base.base, + &g_profile_OBJ_KI.base.base, + &g_profile_OBJ_KITA.base.base, + &g_profile_OBJ_KEY.base.base, + &g_profile_OBJ_KEYHOLE.base.base, + &g_profile_Obj_Lv5Key.base.base, + &g_profile_OBJ_LP.base.base, + &g_profile_OBJ_TATIGI.base.base, + &g_profile_OBJ_ROCK.base.base, + &g_profile_OBJ_WFLAG.base.base, + &g_profile_OBJ_KAGE.base.base, + &g_profile_OBJ_KANBAN2.base.base, + &g_profile_OBJ_BALLOON.base.base, + &g_profile_OBJ_SUISYA.base.base, + &g_profile_OBJ_OILTUBO.base.base, + &g_profile_OBJ_ROTEN.base.base, + &g_profile_OBJ_SSDRINK.base.base, + &g_profile_OBJ_SSITEM.base.base, + &g_profile_TAG_SSDRINK.base.base, + &g_profile_TAG_BTLITM.base.base, + &g_profile_TAG_LV5SOUP.base.base, + &g_profile_TAG_MNLIGHT.base.base, + &g_profile_TAG_SHOPCAM.base.base, + &g_profile_TAG_SHOPITM.base.base, + &g_profile_OBJ_NDOOR.base.base, + &g_profile_OBJ_UDOOR.base.base, + &g_profile_OBJ_USAKU.base.base, + &g_profile_Obj_SM_DOOR.base.base, + &g_profile_OBJ_BED.base.base, + &g_profile_OBJ_BOUMATO.base.base, + &g_profile_OBJ_ITAMATO.base.base, + &g_profile_OBJ_NOUGU.base.base, + &g_profile_OBJ_STICK.base.base, + &g_profile_OBJ_MIE.base.base, + &g_profile_OBJ_SEKIDOOR.base.base, + &g_profile_OBJ_SEKIZO.base.base, + &g_profile_OBJ_SMTILE.base.base, + &g_profile_NPC_FISH.base.base, + &g_profile_MG_FISH.base.base, + &g_profile_FSHOP.base.base, + &g_profile_NPC_DU.base.base, + &g_profile_DISAPPEAR.base.base, + &g_profile_Obj_Mato.base.base, + &g_profile_Obj_Flag.base.base, + &g_profile_Obj_Flag2.base.base, + &g_profile_Obj_Flag3.base.base, + &g_profile_Obj_GOMIKABE.base.base, + &g_profile_Obj_Yousei.base.base, + &g_profile_Obj_Kabuto.base.base, + &g_profile_Obj_Cho.base.base, + &g_profile_Obj_Kuw.base.base, + &g_profile_Obj_Nan.base.base, + &g_profile_Obj_Dan.base.base, + &g_profile_Obj_Kam.base.base, + &g_profile_Obj_Ten.base.base, + &g_profile_Obj_Ari.base.base, + &g_profile_Obj_Kag.base.base, + &g_profile_Obj_Batta.base.base, + &g_profile_Obj_Tombo.base.base, + &g_profile_Obj_Kat.base.base, + &g_profile_Obj_H_Saku.base.base, + &g_profile_Obj_Yobikusa.base.base, + &g_profile_Obj_KazeNeko.base.base, + &g_profile_Obj_KznkArm.base.base, + &g_profile_Obj_NamePlate.base.base, + &g_profile_Obj_OnCloth.base.base, + &g_profile_Obj_LndRope.base.base, + &g_profile_Obj_ItaRope.base.base, + &g_profile_Obj_Sakuita.base.base, + &g_profile_Obj_Laundry.base.base, + &g_profile_WarpBug.base.base, + &g_profile_Izumi_Gate.base.base, + &g_profile_Obj_Fchain.base.base, + &g_profile_Obj_Wchain.base.base, + &g_profile_Tag_Attp.base.base, + &g_profile_Obj_Tornado.base.base, + &g_profile_Obj_Tornado2.base.base, + &g_profile_Obj_FirePillar.base.base, + &g_profile_Obj_FirePillar2.base.base, + &g_profile_Obj_InoBone.base.base, + &g_profile_Obj_Stopper.base.base, + &g_profile_Obj_MHole.base.base, + &g_profile_Tag_Magne.base.base, + &g_profile_Obj_BossWarp.base.base, + &g_profile_Obj_WoodPendulum.base.base, + &g_profile_Obj_WdStick.base.base, + &g_profile_Obj_StairBlock.base.base, + &g_profile_Obj_Geyser.base.base, + &g_profile_Tag_KtOnFire.base.base, + &g_profile_Obj_FireWood.base.base, + &g_profile_Obj_FireWood2.base.base, + &g_profile_Obj_GpTaru.base.base, + &g_profile_Obj_OnsenTaru.base.base, + &g_profile_Obj_KiPot.base.base, + &g_profile_TBOX_SW.base.base, + &g_profile_Obj_SwChain.base.base, + &g_profile_Obj_WoodenSword.base.base, + &g_profile_Obj_StoneMark.base.base, + &g_profile_Obj_Lv3Candle.base.base, + &g_profile_Tag_Lv4Candle.base.base, + &g_profile_Tag_Lv4CandleDm.base.base, + &g_profile_Obj_DamCps.base.base, + &g_profile_Obj_Smoke.base.base, + &g_profile_Obj_WaterFall.base.base, + &g_profile_Obj_ZoraCloth.base.base, + &g_profile_Obj_poFire.base.base, + &g_profile_Tag_poFire.base.base, + &g_profile_Obj_glowSphere.base.base, + &g_profile_Tag_LightBall.base.base, + &g_profile_SwLBall.base.base, + &g_profile_SwBall.base.base, + &g_profile_Obj_WaterEff.base.base, + &g_profile_Tag_RiverBack.base.base, + &g_profile_Tag_KagoFall.base.base, + &g_profile_Tag_Lv2PrChk.base.base, + &g_profile_Obj_Lv4Gear.base.base, + &g_profile_Obj_MasterSword.base.base, + &g_profile_Obj_WoodStatue.base.base, + &g_profile_Obj_Fan.base.base, + &g_profile_Obj_IceLeaf.base.base, + &g_profile_Obj_zrTuraraRc.base.base, + &g_profile_Tag_RetRoom.base.base, + &g_profile_Obj_WindStone.base.base, + &g_profile_Tag_WaraHowl.base.base, + &g_profile_Obj_SCannon.base.base, + &g_profile_Obj_SmWStone.base.base, + &g_profile_Obj_SCannonCrs.base.base, + &g_profile_Tag_SnowEff.base.base, + &g_profile_Tag_CstaSw.base.base, + &g_profile_Tag_Lv6CstaSw.base.base, + &g_profile_Obj_awaPlar.base.base, + &g_profile_Obj_poTbox.base.base, + &g_profile_Obj_TimeFire.base.base, + &g_profile_Obj_TMoon.base.base, + &g_profile_Obj_GanonWall.base.base, + &g_profile_Obj_Prop.base.base, + &g_profile_CSTATUE.base.base, + &g_profile_Obj_SwBallA.base.base, + &g_profile_Obj_SwBallB.base.base, + &g_profile_Obj_SnowSoup.base.base, + &g_profile_Obj_Nagaisu.base.base, + &g_profile_Obj_RCircle.base.base, + &g_profile_Obj_Picture.base.base, + &g_profile_Tag_SetBall.base.base, + &g_profile_Tag_SmkEmt.base.base, + &g_profile_SwTime.base.base, + &g_profile_Obj_HFtr.base.base, + &g_profile_Obj_HBarrel.base.base, + &g_profile_Obj_Crystal.base.base, + &g_profile_Obj_SCannonTen.base.base, + &g_profile_Obj_SwBallC.base.base, + &g_profile_SCENE_EXIT2.base.base, + &g_profile_Obj_Hata.base.base, + &g_profile_Obj_ToaruMaki.base.base, + &g_profile_Tag_AttackItem.base.base, + &g_profile_Tag_RmbitSw.base.base, + &g_profile_Obj_Sword.base.base, + &g_profile_Tag_Spring.base.base, + &g_profile_Tag_Statue.base.base, + &g_profile_E_AI.base.base, + &g_profile_E_GS.base.base, + &g_profile_E_GOB.base.base, + &g_profile_E_DD.base.base, + &g_profile_E_DN.base.base, + &g_profile_E_S1.base.base, + &g_profile_E_MF.base.base, + &g_profile_E_SG.base.base, + &g_profile_E_BS.base.base, + &g_profile_E_SF.base.base, + &g_profile_E_SH.base.base, + &g_profile_E_DF.base.base, + &g_profile_E_GM.base.base, + &g_profile_E_MD.base.base, + &g_profile_E_SM.base.base, + &g_profile_E_SM2.base.base, + &g_profile_E_ST.base.base, + &g_profile_E_ST_LINE.base.base, + &g_profile_E_SB.base.base, + &g_profile_E_TH.base.base, + &g_profile_E_CR.base.base, + &g_profile_E_CR_EGG.base.base, + &g_profile_E_DB.base.base, + &g_profile_E_DB_LEAF.base.base, + &g_profile_E_GA.base.base, + &g_profile_E_GB.base.base, + &g_profile_E_HB.base.base, + &g_profile_E_HB_LEAF.base.base, + &g_profile_E_HZELDA.base.base, + &g_profile_E_YD.base.base, + &g_profile_E_YH.base.base, + &g_profile_E_YD_LEAF.base.base, + &g_profile_E_HM.base.base, + &g_profile_E_TK.base.base, + &g_profile_E_TK2.base.base, + &g_profile_E_TK_BALL.base.base, + &g_profile_E_RB.base.base, + &g_profile_E_RD.base.base, + &g_profile_E_RDB.base.base, + &g_profile_E_RDY.base.base, + &g_profile_E_FM.base.base, + &g_profile_E_FS.base.base, + &g_profile_E_PM.base.base, + &g_profile_E_PO.base.base, + &g_profile_E_MB.base.base, + &g_profile_E_MK.base.base, + &g_profile_E_MM.base.base, + &g_profile_E_FZ.base.base, + &g_profile_E_ZS.base.base, + &g_profile_E_KK.base.base, + &g_profile_E_HP.base.base, + &g_profile_E_ZH.base.base, + &g_profile_E_ZM.base.base, + &g_profile_E_PZ.base.base, + &g_profile_E_FB.base.base, + &g_profile_E_FK.base.base, + &g_profile_E_MS.base.base, + &g_profile_E_NEST.base.base, + &g_profile_E_NZ.base.base, + &g_profile_E_BA.base.base, + &g_profile_E_BU.base.base, + &g_profile_E_BUG.base.base, + &g_profile_E_BEE.base.base, + &g_profile_E_IS.base.base, + &g_profile_E_KG.base.base, + &g_profile_E_KR.base.base, + &g_profile_E_SW.base.base, + &g_profile_E_GE.base.base, + &g_profile_Tag_WatchGe.base.base, + &g_profile_E_YM.base.base, + &g_profile_E_YM_TAG.base.base, + &g_profile_E_YMB.base.base, + &g_profile_Tag_FWall.base.base, + &g_profile_Tag_WaterFall.base.base, + &g_profile_E_YK.base.base, + &g_profile_E_YR.base.base, + &g_profile_E_YG.base.base, + &g_profile_E_HZ.base.base, + &g_profile_E_WS.base.base, + &g_profile_E_OC.base.base, + &g_profile_E_OT.base.base, + &g_profile_E_DT.base.base, + &g_profile_E_BG.base.base, + &g_profile_E_OctBg.base.base, + &g_profile_DR.base.base, + &g_profile_L7lowDr.base.base, + &g_profile_L7ODR.base.base, + &g_profile_E_TT.base.base, + &g_profile_E_DK.base.base, + &g_profile_E_VT.base.base, + &g_profile_E_WW.base.base, + &g_profile_E_GI.base.base, + &g_profile_B_BH.base.base, + &g_profile_B_BQ.base.base, + &g_profile_B_GM.base.base, + &g_profile_B_GND.base.base, + &g_profile_B_GO.base.base, + &g_profile_B_OH2.base.base, + &g_profile_B_YO.base.base, + &g_profile_B_YOI.base.base, + &g_profile_B_TN.base.base, + &g_profile_B_GG.base.base, + &g_profile_B_DRE.base.base, + &g_profile_B_MGN.base.base, + &g_profile_E_WAP.base.base, + &g_profile_ITEM.base.base, + &g_profile_Obj_SmallKey.base.base, + &g_profile_Obj_Kantera.base.base, + &g_profile_Obj_LifeContainer.base.base, + &g_profile_Obj_Shield.base.base, + &g_profile_Demo_Item.base.base, + &g_profile_ShopItem.base.base, + &g_profile_Obj_Drop.base.base, + &g_profile_OBJ_RW.base.base, + &g_profile_NBOMB.base.base, + &g_profile_TAG_CSW.base.base, + &g_profile_TAG_QS.base.base, + &g_profile_HOZELDA.base.base, + &g_profile_SWC00.base.base, + &g_profile_KNOB20.base.base, + &g_profile_DBDOOR.base.base, + &g_profile_BOSS_DOOR.base.base, + &g_profile_L1BOSS_DOOR.base.base, + &g_profile_L1MBOSS_DOOR.base.base, + &g_profile_L5BOSS_DOOR.base.base, + &g_profile_DSHUTTER.base.base.base, + &g_profile_SPIRAL_DOOR.base.base, + &g_profile_Tag_ChgRestart.base.base, + &g_profile_Tag_Restart.base.base, + &g_profile_ANDSW.base.base, + &g_profile_ANDSW2.base.base, + &g_profile_MYNA.base.base, + &g_profile_NPC_GND.base.base, + &g_profile_NPC_GRA.base.base, + &g_profile_NPC_GRC.base.base, + &g_profile_NPC_GRD.base.base, + &g_profile_NPC_GRM.base.base, + &g_profile_NPC_GRMC.base.base, + &g_profile_NPC_GRO.base.base, + &g_profile_NPC_GRR.base.base, + &g_profile_NPC_GRS.base.base, + &g_profile_NPC_GRZ.base.base, + &g_profile_NPC_YAMID.base.base, + &g_profile_NPC_YAMIT.base.base, + &g_profile_NPC_YAMIS.base.base, + &g_profile_NPC_BLUENS.base.base, + &g_profile_NPC_KAKASHI.base.base, + &g_profile_NPC_KDK.base.base, + &g_profile_NPC_ARU.base.base, + &g_profile_NPC_BANS.base.base, + &g_profile_NPC_BESU.base.base, + &g_profile_NPC_BOU.base.base, + &g_profile_NPC_BOU_S.base.base, + &g_profile_NPC_CLERKA.base.base, + &g_profile_NPC_CLERKB.base.base, + &g_profile_NPC_CLERKT.base.base, + &g_profile_NPC_WRESTLER.base.base, + &g_profile_Tag_Arena.base.base, + &g_profile_Tag_Instruction.base.base, + &g_profile_NPC_DOC.base.base, + &g_profile_NPC_GWOLF.base.base, + &g_profile_NPC_LEN.base.base, + &g_profile_NPC_LUD.base.base, + &g_profile_NPC_FAIRY_SEIREI.base.base, + &g_profile_NPC_FAIRY.base.base, + &g_profile_NPC_HANJO.base.base, + &g_profile_NPC_HENNA.base.base, + &g_profile_NPC_HENNA0.base.base, + &g_profile_NPC_HOZ.base.base, + &g_profile_NPC_JAGAR.base.base, + &g_profile_NPC_KKRI.base.base, + &g_profile_NPC_KN.base.base, + &g_profile_KN_BULLET.base.base, + &g_profile_NPC_KNJ.base.base, + &g_profile_NPC_KOLIN.base.base, + &g_profile_NPC_KOLINB.base.base, + &g_profile_NPC_KYURY.base.base, + &g_profile_NPC_MARO.base.base, + &g_profile_NPC_MIDP.base.base, + &g_profile_NPC_MOI.base.base, + &g_profile_NPC_RACA.base.base, + &g_profile_NPC_SARU.base.base, + &g_profile_NPC_SEIB.base.base, + &g_profile_NPC_SEIC.base.base, + &g_profile_NPC_SEID.base.base, + &g_profile_NPC_SEIRA.base.base, + &g_profile_NPC_SERA2.base.base, + &g_profile_NPC_SEIREI.base.base, + &g_profile_NPC_SHAMAN.base.base, + &g_profile_NPC_SMARO.base.base, + &g_profile_NPC_SOLA.base.base, + &g_profile_NPC_TARO.base.base, + &g_profile_NPC_PACHI_BESU.base.base, + &g_profile_NPC_PACHI_TARO.base.base, + &g_profile_NPC_PACHI_MARO.base.base, + &g_profile_TAG_PATI.base.base, + &g_profile_NPC_THE.base.base, + &g_profile_NPC_TKJ.base.base, + &g_profile_NPC_TKS.base.base, + &g_profile_NPC_TKC.base.base, + &g_profile_OBJ_TKS.base.base, + &g_profile_NPC_TOBY.base.base, + &g_profile_NPC_URI.base.base, + &g_profile_NPC_YELIA.base.base, + &g_profile_NPC_YKM.base.base, + &g_profile_NPC_YKW.base.base, + &g_profile_NPC_ZANB.base.base, + &g_profile_NPC_ZANT.base.base, + &g_profile_NPC_ZELDA.base.base, + &g_profile_NPC_ZELR.base.base, + &g_profile_NPC_ZELRO.base.base, + &g_profile_OBJ_ZRAFREEZE.base.base, + &g_profile_NPC_ZRC.base.base, + &g_profile_NPC_ZRZ.base.base, + &g_profile_ZRA_MARK.base.base, + &g_profile_MYNA2.base.base, + &g_profile_TAG_MYNA2.base.base, + &g_profile_NPC_CD3.base.base, + &g_profile_Tag_Schedule.base.base, + &g_profile_Tag_Escape.base.base, + &g_profile_NPC_CHAT.base.base, + &g_profile_NPC_SOLDIERa.base.base, + &g_profile_NPC_SOLDIERb.base.base, + &g_profile_PASSER_MNG.base.base, + &g_profile_NPC_PASSER.base.base, + &g_profile_NPC_PASSER2.base.base, + &g_profile_NPC_POST.base.base, + &g_profile_NPC_POUYA.base.base, + &g_profile_FORMATION_MNG.base.base, + &g_profile_NPC_FGUARD.base.base, + &g_profile_GUARD_MNG.base.base, + &g_profile_TAG_GUARD.base.base, + &g_profile_NPC_GUARD.base.base, + &g_profile_NPC_ASH.base.base, + &g_profile_NPC_ASHB.base.base, + &g_profile_NPC_SHAD.base.base, + &g_profile_NPC_RAFREL.base.base, + &g_profile_NPC_MOIR.base.base, + &g_profile_NPC_IMPAL.base.base, + &g_profile_NPC_SHOE.base.base, + &g_profile_NPC_DOORBOY.base.base, + &g_profile_NPC_PRAYER.base.base, + &g_profile_NPC_KASIHANA.base.base, + &g_profile_NPC_KASIKYU.base.base, + &g_profile_NPC_KASIMICH.base.base, + &g_profile_NPC_DRSOL.base.base, + &g_profile_NPC_CHIN.base.base, + &g_profile_NPC_INS.base.base, + &g_profile_NPC_SHOP0.base.base, + &g_profile_NPC_MK.base.base, + &g_profile_NPC_P2.base.base, + &g_profile_KYTAG00.base.base, + &g_profile_KYTAG01.base.base, + &g_profile_KYTAG02.base.base, + &g_profile_KYTAG03.base.base, + &g_profile_KYTAG04.base.base, + &g_profile_KYTAG05.base.base, + &g_profile_KYTAG06.base.base, + &g_profile_KYTAG07.base.base, + &g_profile_KYTAG08.base.base, + &g_profile_KYTAG09.base.base, + &g_profile_KYTAG10.base.base, + &g_profile_KYTAG11.base.base, + &g_profile_KYTAG12.base.base, + &g_profile_KYTAG13.base.base, + &g_profile_KYTAG14.base.base, + &g_profile_KYTAG15.base.base, + &g_profile_KYTAG16.base.base, + &g_profile_KYTAG17.base.base, + &g_profile_Ykgr.base.base, + &g_profile_TALK.base.base, + &g_profile_Obj_Crope.base.base, + &g_profile_Obj_Bombf.base.base, + &g_profile_Obj_BkLeaf.base.base, + &g_profile_Tag_Mhint.base.base, + &g_profile_Tag_Mmsg.base.base, + &g_profile_Tag_Mwait.base.base, + &g_profile_Tag_Mstop.base.base, + &g_profile_Tag_Stream.base.base, + &g_profile_Tag_Sppath.base.base, + &g_profile_Tag_Wljump.base.base, + &g_profile_Tag_TWGate.base.base, + &g_profile_Tag_Lv6Gate.base.base, + &g_profile_Tag_Lv7Gate.base.base, + &g_profile_Tag_Lv8Gate.base.base, + &g_profile_Tag_TheBHint.base.base, + &g_profile_Tag_Assist.base.base, + &g_profile_DEMO00.base.base, + &g_profile_TAG_CAMERA.base.base, + &g_profile_TAG_CHKPOINT.base.base, + &g_profile_TAG_EVENT.base.base, + &g_profile_TAG_EVT.base.base, + &g_profile_TAG_TELOP.base.base, + &g_profile_TAG_HOWL.base.base, + &g_profile_TAG_MSG.base.base, + &g_profile_TAG_LANTERN.base.base, + &g_profile_Tag_Mist.base.base, + &g_profile_DMIDNA.base.base, + &g_profile_KY_THUNDER.base.base, + &g_profile_VRBOX.base.base, + &g_profile_VRBOX2.base.base, + &g_profile_BG.base.base.base, + &g_profile_SET_BG_OBJ.base.base, + &g_profile_BG_OBJ.base.base, + &g_profile_MIRROR.base.base, + &g_profile_MOVIE_PLAYER.base.base, + &g_profile_TITLE.base.base, + &g_profile_FR.base.base, + &g_profile_ECONT.base.base, + &g_profile_MG_ROD.base.base, + &g_profile_E_ARROW.base.base, + &g_profile_BULLET.base.base, + &g_profile_SWHIT0.base.base, + &g_profile_E_TH_BALL.base.base, + &g_profile_TAG_EVTAREA.base.base, + &g_profile_TAG_EVTMSG.base.base, + &g_profile_TAG_KMSG.base.base, + &g_profile_TAG_PUSH.base.base, + &g_profile_E_MK_BO.base.base, + &g_profile_E_MM_MT.base.base, + &g_profile_OBJ_KBOX.base.base, + &g_profile_OBJ_FW.base.base, + &g_profile_B_GOS.base.base, + &g_profile_OBJ_YSTONE.base.base, + &g_profile_MANT.base.base, + &g_profile_CROD.base.base, + &g_profile_OBJ_PLEAF.base.base, + &g_profile_OBJ_KBACKET.base.base, + &g_profile_OBJ_YBAG.base.base, + &g_profile_OBJ_PUMPKIN.base.base, + &g_profile_OBJ_AUTOMATA.base.base, + &g_profile_OBJ_GADGET.base.base, + &g_profile_OBJ_KAGO.base.base, + &g_profile_Obj_Carry.base.base, + &g_profile_Obj_Stone.base.base, + &g_profile_OBJ_HB.base.base, + &g_profile_NPC_INKO.base.base, + &g_profile_BD.base.base, + &g_profile_Obj_Eff.base.base, + &g_profile_WPILLAR.base.base, + &g_profile_WMARK.base.base, + &g_profile_E_BI.base.base, + &g_profile_E_BI_LEAF.base.base, + &g_profile_START_AND_GOAL.base.base, + &g_profile_NPC_DF.base.base, + &g_profile_ARROW.base.base, + &g_profile_PATH_LINE.base.base.base, + &g_profile_TAG_ALLMATO.base.base, + &g_profile_Obj_Timer.base.base, + &g_profile_SCENE_EXIT.base.base.base, + &g_profile_CAMERA.base.base.base, + &g_profile_CAMERA2.base.base.base, + &g_profile_SUSPEND.base.base, + &g_profile_GRASS.base.base, + &g_profile_KYEFF.base.base, + &g_profile_KYEFF2.base.base, + &g_profile_MSG_OBJECT.base.base, + &g_profile_MENUWINDOW.base.base, + &g_profile_TIMER.base.base, + &g_profile_METER2.base.base, + &g_profile_GAMEOVER.base.base, + NULL, +}; +#endif From 5d359236e1af6cbe1dc55782ac9daaad095c8207 Mon Sep 17 00:00:00 2001 From: Jeffrey Crowell Date: Sat, 14 Feb 2026 00:03:10 -0800 Subject: [PATCH 05/46] change ifdef instead of copying function blocks --- CMakeLists.txt | 1 - src/dusk/m_Do_ext_dusk.cpp | 565 ------------------------------------- src/m_Do/m_Do_ext.cpp | 2 +- 3 files changed, 1 insertion(+), 567 deletions(-) delete mode 100644 src/dusk/m_Do_ext_dusk.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 4f7ff4995e..2fa682f07b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1351,7 +1351,6 @@ set(DUSK_FILES src/dusk/globals.cpp src/dusk/mtx.cpp src/dusk/J3DTransforms_C.cpp - src/dusk/m_Do_ext_dusk.cpp ) source_group("dolzel" FILES ${DOLZEL_FILES} ${Z2AUDIOLIB_FILES} ${SSYSTEM_FILES} ${JSYSTEM_FILES} ${REL_FILES}) diff --git a/src/dusk/m_Do_ext_dusk.cpp b/src/dusk/m_Do_ext_dusk.cpp deleted file mode 100644 index 7d16d08439..0000000000 --- a/src/dusk/m_Do_ext_dusk.cpp +++ /dev/null @@ -1,565 +0,0 @@ -// XXX Ripped these from a DEBUG block, rather than changing defines. -/** - * m_Do_ext.cpp - * Model, Animation, and Heap Functions - */ - -#include "d/dolzel.h" // IWYU pragma: keep - -#include -#include -#include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h" -#include "JSystem/J3DGraphBase/J3DDrawBuffer.h" -#include "JSystem/J3DGraphBase/J3DMaterial.h" -#include "JSystem/J3DGraphLoader/J3DMaterialFactory.h" -#include "JSystem/JKernel/JKRAssertHeap.h" -#include "JSystem/JKernel/JKRExpHeap.h" -#include "JSystem/JKernel/JKRSolidHeap.h" -#include "JSystem/JUtility/JUTCacheFont.h" -#include "JSystem/JUtility/JUTResFont.h" -#include "Z2AudioLib/Z2Creature.h" -#include "d/d_com_inf_game.h" -#include "global.h" -#include "m_Do/m_Do_ext.h" -#include "m_Do/m_Do_main.h" -#include "m_Do/m_Do_mtx.h" -#include - -mDoExt_cube8pPacket::mDoExt_cube8pPacket(cXyz* i_points, const GXColor& i_color) { - cXyz* pnt_array = mPoints; - - for (int i = 0; i < 8; i++) { - *(pnt_array)++ = *(i_points)++; - } - - DCStoreRangeNoSync(mPoints, sizeof(cXyz) * 8); - mColor = i_color; -} - -void drawCube(MtxP mtx, cXyz* pos, const GXColor& color) { - GXSetArray(GX_VA_POS, pos, sizeof(cXyz)); - GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); - GXClearVtxDesc(); - GXSetVtxDesc(GX_VA_POS, GX_INDEX8); - GXSetNumChans(1); - GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP, - GX_AF_NONE); - GXSetNumTexGens(0); - GXSetNumTevStages(1); - GXSetTevColor(GX_TEVREG0, color); - GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); - GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0); - GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); - GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); - GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); - GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); - GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); - GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); - GXSetCullMode(GX_CULL_BACK); - GXSetClipMode(GX_CLIP_ENABLE); - GXLoadPosMtxImm(mtx, 0); - GXSetCurrentMtx(0); - - GXBegin(GX_TRIANGLESTRIP, GX_VTXFMT0, 14); - GXPosition1x8(4); - GXPosition1x8(6); - GXPosition1x8(5); - GXPosition1x8(7); - GXPosition1x8(3); - GXPosition1x8(6); - GXPosition1x8(2); - GXPosition1x8(4); - GXPosition1x8(0); - GXPosition1x8(5); - GXPosition1x8(1); - GXPosition1x8(3); - GXPosition1x8(0); - GXPosition1x8(2); - GXEnd(); -} - -void mDoExt_cube8pPacket::draw() { - drawCube(j3dSys.getViewMtx(), mPoints, mColor); -} - -mDoExt_cubePacket::mDoExt_cubePacket(cXyz& i_position, cXyz& i_size, csXyz& i_angle, const GXColor& i_color) { - mPosition = i_position; - mSize = i_size; - mAngle = i_angle; - mColor = i_color; -} - -void mDoExt_cubePacket::draw() { - static cXyz l_pos[8] = { - cXyz(-1.0f, 1.0f, -1.0f), cXyz(1.0f, 1.0f, -1.0f), cXyz(-1.0f, 1.0f, 1.0f), - cXyz(1.0f, 1.0f, 1.0f), cXyz(-1.0f, -1.0f, -1.0f), cXyz(1.0f, -1.0f, -1.0f), - cXyz(-1.0f, -1.0f, 1.0f), cXyz(1.0f, -1.0f, 1.0f), - }; - - mDoMtx_stack_c::transS(mPosition.x, mPosition.y, mPosition.z); - mDoMtx_stack_c::XYZrotM(mAngle.x, mAngle.y, mAngle.z); - mDoMtx_stack_c::scaleM(mSize.x, mSize.y, mSize.z); - mDoMtx_stack_c::revConcat(j3dSys.getViewMtx()); - drawCube(mDoMtx_stack_c::get(), l_pos, mColor); -} - -mDoExt_quadPacket::mDoExt_quadPacket(cXyz* i_points, const GXColor& i_color, u8 i_clipZ) { - cXyz* pnt_array = mPoints; - - for (int i = 0; i < 4; i++) { - *(pnt_array)++ = *(i_points)++; - } - - DCStoreRangeNoSync(mPoints, sizeof(cXyz) * 4); - mColor = i_color; - mClipZ = i_clipZ; -} - -void mDoExt_quadPacket::draw() { - GXSetArray(GX_VA_POS, mPoints, sizeof(cXyz)); - GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); - GXClearVtxDesc(); - GXSetVtxDesc(GX_VA_POS, GX_INDEX8); - GXSetNumChans(1); - GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP, - GX_AF_NONE); - GXSetNumTexGens(0); - GXSetNumTevStages(1); - GXSetTevColor(GX_TEVREG0, mColor); - GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); - GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0); - GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); - GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); - GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); - - if (mClipZ) { - GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); - } else { - GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); - } - - GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); - GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); - GXSetCullMode(GX_CULL_BACK); - GXSetClipMode(GX_CLIP_ENABLE); - GXLoadPosMtxImm(j3dSys.getViewMtx(), 0); - GXSetCurrentMtx(0); - - GXBegin(GX_QUADS, GX_VTXFMT0, 4); - GXPosition1x8(0); - GXPosition1x8(1); - GXPosition1x8(2); - GXPosition1x8(3); - GXEnd(); -} - -mDoExt_trianglePacket::mDoExt_trianglePacket(cXyz* i_points, const GXColor& i_color, u8 i_clipZ) { - cXyz* pnt_array = mPoints; - - for (int i = 0; i < 3; i++) { - *(pnt_array)++ = *(i_points)++; - } - - DCStoreRangeNoSync(mPoints, sizeof(cXyz) * 3); - mColor = i_color; - mClipZ = i_clipZ; -} - -void mDoExt_trianglePacket::draw() { - j3dSys.reinitGX(); - - GXSetArray(GX_VA_POS, mPoints, sizeof(cXyz)); - GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); - GXClearVtxDesc(); - GXSetVtxDesc(GX_VA_POS, GX_INDEX8); - GXLoadPosMtxImm(j3dSys.getViewMtx(), 0); - GXSetCurrentMtx(0); - GXSetNumChans(1); - GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP, GX_AF_NONE); - GXSetNumTexGens(0); - GXSetNumTevStages(1); - GXSetTevColor(GX_TEVREG0, mColor); - GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); - GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0); - GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); - GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); - GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); - GXSetZCompLoc(GX_ENABLE); - - if (mClipZ) { - GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); - } else { - GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); - } - - GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); - GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); - GXSetFog(GX_FOG_NONE, 0.0f, 0.0f, 0.0f, 0.0f, g_clearColor); - GXSetFogRangeAdj(GX_DISABLE, 0, NULL); - GXSetCullMode(GX_CULL_NONE); - GXSetDither(GX_ENABLE); - GXSetClipMode(GX_CLIP_ENABLE); - GXSetNumIndStages(0); - - GXBegin(GX_TRIANGLES, GX_VTXFMT0, 3); - GXPosition1x8(0); - GXPosition1x8(1); - GXPosition1x8(2); - GXEnd(); - - J3DShape::resetVcdVatCache(); -} - -mDoExt_linePacket::mDoExt_linePacket(cXyz& i_start, cXyz& i_end, const GXColor& i_color, u8 i_clipZ, u8 i_width) { - mStart = i_start; - mEnd = i_end; - mColor = i_color; - mClipZ = i_clipZ; - mWidth = i_width; -} - -void mDoExt_linePacket::draw() { - j3dSys.reinitGX(); - - GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); - GXClearVtxDesc(); - GXSetVtxDesc(GX_VA_POS, GX_DIRECT); - GXLoadPosMtxImm(j3dSys.getViewMtx(), 0); - GXSetCurrentMtx(0); - GXSetNumChans(1); - GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP, GX_AF_NONE); - GXSetNumTexGens(0); - GXSetNumTevStages(1); - GXSetTevColor(GX_TEVREG0, mColor); - GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); - GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0); - GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); - GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); - GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); - GXSetZCompLoc(GX_ENABLE); - - if (mClipZ) { - GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); - } else { - GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); - } - - GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); - GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); - GXSetFog(GX_FOG_NONE, 0.0f, 0.0f, 0.0f, 0.0f, g_clearColor); - GXSetFogRangeAdj(GX_DISABLE, 0, NULL); - GXSetCullMode(GX_CULL_NONE); - GXSetDither(GX_ENABLE); - GXSetClipMode(GX_CLIP_ENABLE); - GXSetNumIndStages(0); - GXSetLineWidth(mWidth, GX_TO_ZERO); - - GXBegin(GX_LINES, GX_VTXFMT0, 2); - GXPosition3f32(mStart.x, mStart.y, mStart.z); - GXPosition3f32(mEnd.x, mEnd.y, mEnd.z); - GXEnd(); - - J3DShape::resetVcdVatCache(); -} - -mDoExt_ArrowPacket::mDoExt_ArrowPacket(cXyz& i_position, cXyz& param_1, const GXColor& i_color, u8 i_clipZ, u8 i_lineWidth) { - mStart = i_position; - mEnd = param_1; - mColor = i_color; - mClipZ = i_clipZ; - mLineWidth = i_lineWidth; -} - -void mDoExt_ArrowPacket::draw() { - Mtx sp28; - cXyz sp18; - - GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); - GXClearVtxDesc(); - GXSetVtxDesc(GX_VA_POS, GX_DIRECT); - GXSetNumChans(1); - GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP, GX_AF_NONE); - GXSetNumTexGens(0); - GXSetNumTevStages(1); - GXSetTevColor(GX_TEVREG0, mColor); - GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); - GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0); - GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); - GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); - GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); - - if (mClipZ) { - GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); - } else { - GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); - } - - GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); - GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); - GXSetCullMode(GX_CULL_NONE); - GXSetClipMode(GX_CLIP_ENABLE); - GXSetLineWidth(mLineWidth, GX_TO_ZERO); - - sp18 = mEnd - mStart; - MtxTrans(mStart.x, mStart.y, mStart.z, 0); - cMtx_YrotM(*calc_mtx, sp18.atan2sX_Z()); - cMtx_XrotM(*calc_mtx, cM_atan2s(JMAFastSqrt(SQUARE(sp18.x) + SQUARE(sp18.z)), sp18.y)); - cMtx_concat(j3dSys.getViewMtx(), *calc_mtx, sp28); - - GXLoadPosMtxImm(sp28, 0); - GXSetCurrentMtx(0); - - GXBegin(GX_LINES, GX_VTXFMT0, 2); - GXPosition3f32(0.0f, 0.0f, 0.0f); - GXPosition3f32(0.0f, sp18.abs(), 0.0f); - GXEnd(); - - f32 var_f29 = sp18.abs(); - f32 var_f31 = var_f29 * 0.1f; - f32 var_f30 = var_f29 * 0.8f; - - GXBegin(GX_TRIANGLEFAN, GX_VTXFMT0, 6); - GXPosition3f32(0.0f, var_f29, 0.0f); - GXPosition3f32(0.0f, var_f30, var_f31); - GXPosition3f32(var_f31, var_f30, 0.0f); - GXPosition3f32(0.0f, var_f30, -var_f31); - GXPosition3f32(-var_f31, var_f30, 0.0f); - GXPosition3f32(0.0f, var_f30, var_f31); - GXEnd(); -} - -mDoExt_pointPacket::mDoExt_pointPacket(cXyz& i_position, const GXColor& i_color, u8 i_clipZ, u8 i_lineWidth) { - mPosition = i_position; - mColor = i_color; - mClipZ = i_clipZ; - mLineWidth = i_lineWidth; -} - -void mDoExt_pointPacket::draw() { - j3dSys.reinitGX(); - - GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); - GXClearVtxDesc(); - GXSetVtxDesc(GX_VA_POS, GX_DIRECT); - GXSetNumChans(1); - GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP, GX_AF_NONE); - GXSetNumTexGens(0); - GXSetNumTevStages(1); - GXSetTevColor(GX_TEVREG0, mColor); - GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); - GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0); - GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); - GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); - GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); - - if (mClipZ) { - GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); - } else { - GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); - } - - GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); - GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); - GXSetCullMode(GX_CULL_NONE); - GXSetClipMode(GX_CLIP_ENABLE); - GXSetPointSize(mLineWidth, GX_TO_ZERO); - - GXLoadPosMtxImm(j3dSys.getViewMtx(), 0); - GXSetCurrentMtx(0); - - GXBegin(GX_POINTS, GX_VTXFMT0, 1); - GXPosition3f32(mPosition.x, mPosition.y, mPosition.z); - GXEnd(); - - j3dSys.reinitGX(); - J3DShape::resetVcdVatCache(); -} - -mDoExt_circlePacket::mDoExt_circlePacket(cXyz& i_position, f32 i_radius, const GXColor& i_color, u8 i_clipZ, u8 i_lineWidth) { - mPosition = i_position; - mRadius = i_radius; - mColor = i_color; - mClipZ = i_clipZ; - mLineWidth = i_lineWidth; -} - -void mDoExt_circlePacket::draw() { - GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); - GXClearVtxDesc(); - GXSetVtxDesc(GX_VA_POS, GX_DIRECT); - GXSetNumChans(1); - GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP, GX_AF_NONE); - GXSetNumTexGens(0); - GXSetNumTevStages(1); - GXSetTevColor(GX_TEVREG0, mColor); - GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); - GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0); - GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); - GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); - GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); - - if (mClipZ) { - GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); - } else { - GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); - } - - GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); - GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); - GXSetCullMode(GX_CULL_NONE); - GXSetClipMode(GX_CLIP_ENABLE); - GXSetLineWidth(mLineWidth, GX_TO_ZERO); - GXLoadPosMtxImm(j3dSys.getViewMtx(), 0); - GXSetCurrentMtx(0); - - cXyz sp38; - cXyz sp44; - int numEdges = 36; - sp38.y = sp44.y = mPosition.y; - - GXBegin(GX_LINES, GX_VTXFMT0, numEdges * 2); - for (int i = 0; i < numEdges; i++) { - sp38.x = cM_fcos((i * 6.2831855f) / numEdges) * mRadius; - sp38.z = cM_fsin((i * 6.2831855f) / numEdges) * mRadius; - - sp44.x = cM_fcos(((i + 1) * 6.2831855f) / numEdges) * mRadius; - sp44.z = cM_fsin(((i + 1) * 6.2831855f) / numEdges) * mRadius; - - sp38.x += mPosition.x; - sp38.z += mPosition.z; - sp44.x += mPosition.x; - sp44.z += mPosition.z; - GXPosition3f32(sp38.x, sp38.y, sp38.z); - GXPosition3f32(sp44.x, sp44.y, sp44.z); - } - GXEnd(); -} - -mDoExt_spherePacket::mDoExt_spherePacket(cXyz& i_position, f32 i_size, const GXColor& i_color, u8 i_clipZ) { - mPosition = i_position; - mSize = i_size; - mColor = i_color; - mClipZ = i_clipZ; -} - -void mDoExt_spherePacket::draw() { - GXSetNumChans(1); - GXSetChanCtrl(GX_COLOR0, GX_ENABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT0, GX_DF_CLAMP, GX_AF_NONE); - GXSetNumTexGens(0); - GXSetNumTevStages(1); - GXSetTevColor(GX_TEVREG0, mColor); - GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); - GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_RASC, GX_CC_C0, GX_CC_ZERO); - GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); - GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); - GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); - - if (mClipZ) { - GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); - } else { - GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); - } - - GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); - GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); - GXSetCullMode(GX_CULL_BACK); - GXSetClipMode(GX_CLIP_ENABLE); - - mDoMtx_stack_c::copy(j3dSys.getViewMtx()); - mDoMtx_stack_c::transM(mPosition.x, mPosition.y, mPosition.z); - mDoMtx_stack_c::scaleM(mSize, mSize, mSize); - - GXLoadPosMtxImm(mDoMtx_stack_c::get(), 0); - mDoMtx_stack_c::inverseTranspose(); - - GXLoadNrmMtxImm(mDoMtx_stack_c::get(), 0); - GXSetCurrentMtx(0); - - GXDrawSphere(8, 8); -} - -mDoExt_cylinderPacket::mDoExt_cylinderPacket(cXyz& i_position, f32 i_radius, f32 i_height, const GXColor& i_color, u8 i_clipZ) { - mPosition = i_position; - mRadius = i_radius; - mHeight = i_height; - mColor = i_color; - mClipZ = i_clipZ; -} - -void mDoExt_cylinderPacket::draw() { - GXSetNumChans(1); - GXSetChanCtrl(GX_COLOR0, GX_ENABLE, GX_SRC_REG, GX_SRC_REG, 1, GX_DF_CLAMP, GX_AF_NONE); - GXSetNumTexGens(0); - GXSetNumTevStages(1); - GXSetTevColor(GX_TEVREG0, mColor); - GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); - GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_RASC, GX_CC_C0, GX_CC_ZERO); - GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); - GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); - GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); - - if (mClipZ) { - GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); - } else { - GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); - } - - GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); - GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); - GXSetCullMode(GX_CULL_BACK); - GXSetClipMode(GX_CLIP_ENABLE); - - f32 var_f31 = mHeight * 0.5f; - - mDoMtx_stack_c::copy(j3dSys.getViewMtx()); - mDoMtx_stack_c::transM(mPosition.x, mPosition.y + var_f31, mPosition.z); - mDoMtx_stack_c::scaleM(mRadius, var_f31, mRadius); - mDoMtx_stack_c::XrotM(0x4000); - - GXLoadPosMtxImm(mDoMtx_stack_c::get(), 0); - mDoMtx_stack_c::inverseTranspose(); - - GXLoadNrmMtxImm(mDoMtx_stack_c::get(), 0); - GXSetCurrentMtx(0); - GXDrawCylinder(8); -} - -mDoExt_cylinderMPacket::mDoExt_cylinderMPacket(Mtx i_mtx, const GXColor& i_color, u8 i_clipZ) { - cMtx_copy(i_mtx, mMatrix); - mColor = i_color; - mClipZ = i_clipZ; -} - -void mDoExt_cylinderMPacket::draw() { - GXSetNumChans(1); - GXSetChanCtrl(GX_COLOR0, GX_ENABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT0, GX_DF_CLAMP, GX_AF_NONE); - GXSetNumTexGens(0); - GXSetNumTevStages(1); - GXSetTevColor(GX_TEVREG0, mColor); - GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); - GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_RASC, GX_CC_C0, GX_CC_ZERO); - GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); - GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); - GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); - - if (mClipZ) { - GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); - } else { - GXSetZMode(GX_DISABLE, GX_LEQUAL, GX_DISABLE); - } - - GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); - GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); - GXSetCullMode(GX_CULL_BACK); - GXSetClipMode(GX_CLIP_ENABLE); - - cMtx_concat(j3dSys.getViewMtx(), mMatrix, mMatrix); - - GXLoadPosMtxImm(mMatrix, 0); - cMtx_inverseTranspose(mMatrix, mMatrix); - - GXLoadNrmMtxImm(mMatrix, 0); - GXSetCurrentMtx(0); - - GXDrawCylinder(8); -} diff --git a/src/m_Do/m_Do_ext.cpp b/src/m_Do/m_Do_ext.cpp index 7f4bf6f8f9..c8465b60a2 100644 --- a/src/m_Do/m_Do_ext.cpp +++ b/src/m_Do/m_Do_ext.cpp @@ -3006,7 +3006,7 @@ void mDoExt_3DlineMatSortPacket::draw() { J3DShape::resetVcdVatCache(); } -#if DEBUG +#if DEBUG || !__MWERKS__ mDoExt_cube8pPacket::mDoExt_cube8pPacket(cXyz* i_points, const GXColor& i_color) { cXyz* pnt_array = mPoints; From 147b4bdb971dd27c5e4097b2b35b02057c5964bb Mon Sep 17 00:00:00 2001 From: Jeffrey Crowell Date: Sat, 14 Feb 2026 15:55:43 -0800 Subject: [PATCH 06/46] now it links (except for no main!) --- include/d/actor/d_a_b_ds.h | 2 - include/dolphin/os.h | 67 +++++++++++++++---- src/DynamicLink.cpp | 8 --- src/JSystem/J3DGraphAnimator/J3DMtxBuffer.cpp | 4 +- src/d/actor/d_a_b_ds.cpp | 4 ++ src/d/actor/d_a_e_dd.cpp | 2 +- src/d/actor/d_a_e_dn.cpp | 12 ++-- src/d/actor/d_a_e_fb.cpp | 2 +- src/d/actor/d_a_e_mf.cpp | 14 ++-- src/d/actor/d_a_e_mk.cpp | 2 +- src/d/actor/d_a_e_nz.cpp | 2 +- src/d/actor/d_a_e_vt.cpp | 2 +- src/d/actor/d_a_e_yr.cpp | 2 +- src/d/actor/d_a_npc_ash.cpp | 2 +- src/d/actor/d_a_npc_ashB.cpp | 2 +- src/d/actor/d_a_npc_bou.cpp | 2 +- src/d/actor/d_a_npc_clerka.cpp | 2 +- src/d/actor/d_a_npc_clerkb.cpp | 2 +- src/d/actor/d_a_npc_clerkt.cpp | 2 +- src/d/actor/d_a_npc_gnd.cpp | 2 +- src/d/actor/d_a_npc_gra.cpp | 2 +- src/d/actor/d_a_npc_impal.cpp | 2 +- src/d/actor/d_a_npc_knj.cpp | 2 +- src/d/actor/d_a_npc_kyury.cpp | 2 +- src/d/actor/d_a_npc_len.cpp | 2 +- src/d/actor/d_a_npc_lud.cpp | 2 +- src/d/actor/d_a_npc_maro.cpp | 2 +- src/d/actor/d_a_npc_moi.cpp | 2 +- src/d/actor/d_a_npc_pouya.cpp | 2 +- src/d/actor/d_a_npc_shad.cpp | 2 +- src/d/actor/d_a_npc_shoe.cpp | 2 +- src/d/actor/d_a_npc_taro.cpp | 2 +- src/d/actor/d_a_npc_the.cpp | 2 +- src/d/actor/d_a_npc_toby.cpp | 2 +- src/d/actor/d_a_npc_uri.cpp | 2 +- src/d/actor/d_a_obj_brakeeff.cpp | 2 +- src/d/actor/d_a_obj_burnbox.cpp | 2 +- src/d/actor/d_a_obj_ice_l.cpp | 2 +- src/d/actor/d_a_obj_katatsumuri.cpp | 8 +-- src/d/actor/d_a_obj_klift00.cpp | 2 +- src/d/actor/d_a_obj_maki.cpp | 4 +- src/d/actor/d_a_obj_sakuita.cpp | 2 +- src/d/actor/d_a_obj_ss_base.cpp | 4 -- src/d/actor/d_a_obj_thashi.cpp | 2 +- src/d/actor/d_a_obj_tornado.cpp | 2 +- src/d/actor/d_a_obj_waterPillar.cpp | 2 +- src/d/actor/d_a_obj_wdStick.cpp | 2 +- src/d/actor/d_a_tag_CstaSw.cpp | 2 +- src/d/actor/d_a_tag_msg.cpp | 2 +- src/dusk/stubs.cpp | 31 +-------- src/f_op/f_op_msg_mng.cpp | 2 +- 51 files changed, 120 insertions(+), 118 deletions(-) diff --git a/include/d/actor/d_a_b_ds.h b/include/d/actor/d_a_b_ds.h index d7dd03a90b..00bd3cb24a 100644 --- a/include/d/actor/d_a_b_ds.h +++ b/include/d/actor/d_a_b_ds.h @@ -332,8 +332,6 @@ private: /* 0x2EDC */ dMsgFlow_c mMsgFlow; }; -cXyz daB_DS_c::getHandPosR() { return mHandPos[1]; } -cXyz daB_DS_c::getHandPosL() { return mHandPos[0]; } STATIC_ASSERT(sizeof(daB_DS_c) == 0x2F28); diff --git a/include/dolphin/os.h b/include/dolphin/os.h index 07eb305adb..1c083eb815 100644 --- a/include/dolphin/os.h +++ b/include/dolphin/os.h @@ -1,17 +1,15 @@ #ifndef _DOLPHIN_OS_H_ #define _DOLPHIN_OS_H_ -#ifdef __MWERKS__ #include -#else -#include -#endif #ifdef __REVOLUTION_SDK__ #include #else + #include #include + void OSReportInit(void); void OSSwitchFiberEx(u32, u32, u32, u32, u32, u32); void OSVAttention(const char* fmt, va_list args); @@ -45,7 +43,9 @@ typedef u32 OSTick; #include #include #include +#ifdef __MWERKS__ #include +#endif #include #include #include @@ -54,6 +54,18 @@ typedef u32 OSTick; // private macro, maybe shouldn't be defined here? #define OFFSET(addr, align) (((u32)(addr) & ((align)-1))) +#ifndef __MWERKS__ +typedef struct { + BOOL valid; + u32 restartCode; + u32 bootDol; + void* regionStart; + void* regionEnd; + int argsUseDefault; + void* argsAddr; +} OSExecParams; +#endif + #define DOLPHIN_ALIGNMENT 32 // Upper words of the masks, since UIMM is only 16 bits @@ -80,9 +92,11 @@ OSThread* __gUnkThread1 AT_ADDRESS(OS_BASE_CACHED | 0x00D8); int __gUnknown800030C0[2] AT_ADDRESS(OS_BASE_CACHED | 0x30C0); u8 __gUnknown800030E3 AT_ADDRESS(OS_BASE_CACHED | 0x30E3); #else -#define __OSBusClock (*(u32 *)(OS_BASE_CACHED | 0x00F8)) -#define __OSCoreClock (*(u32 *)(OS_BASE_CACHED | 0x00FC)) -#endif + +#define __OSBusClock 486000000 +#define __OSCoreClock (486000000 / 4) + +#endif // __MWERKS__ #define OS_BUS_CLOCK __OSBusClock #define OS_CORE_CLOCK __OSCoreClock @@ -210,7 +224,6 @@ DECL_WEAK void OSReportDisable(void); DECL_WEAK void OSReportEnable(void); DECL_WEAK void OSReportForceEnableOff(void); DECL_WEAK void OSReportForceEnableOn(void); -DECL_WEAK void OSVReport(const char* format, va_list list); #if DEBUG #define OS_REPORT(...) OSReport(__VA_ARGS__) @@ -233,6 +246,30 @@ extern u8 __OSReport_enable; #define OSRoundUp32B(x) (((u32)(x) + 32 - 1) & ~(32 - 1)) #define OSRoundDown32B(x) (((u32)(x)) & ~(32 - 1)) + +#ifdef TARGET_PC + +static inline void* OSPhysicalToCached(u32 paddr) { + return reinterpret_cast(static_cast(paddr)); +} +static inline void* OSPhysicalToUncached(u32 paddr) { + return reinterpret_cast(static_cast(paddr)); +} +static inline u32 OSCachedToPhysical(void* caddr) { + return static_cast(reinterpret_cast(caddr)); +} +static inline u32 OSUncachedToPhysical(void* ucaddr) { + return static_cast(reinterpret_cast(ucaddr)); +} +static inline void* OSCachedToUncached(void* caddr) { + return caddr; +} +static inline void* OSUncachedToCached(void* ucaddr) { + return ucaddr; +} + +#else // non-TARGET_PC + void* OSPhysicalToCached(u32 paddr); void* OSPhysicalToUncached(u32 paddr); u32 OSCachedToPhysical(void* caddr); @@ -240,7 +277,9 @@ u32 OSUncachedToPhysical(void* ucaddr); void* OSCachedToUncached(void* caddr); void* OSUncachedToCached(void* ucaddr); -#if !DEBUG +#endif // TARGET_PC + +#if !DEBUG && !defined(TARGET_PC) #define OSPhysicalToCached(paddr) ((void*) ((u32)(OS_BASE_CACHED + (u32)(paddr)))) #define OSPhysicalToUncached(paddr) ((void*) ((u32)(OS_BASE_UNCACHED + (u32)(paddr)))) #define OSCachedToPhysical(caddr) ((u32) ((u32)(caddr) - OS_BASE_CACHED)) @@ -257,6 +296,10 @@ extern OSTime __OSStartTime; extern int __OSInIPL; // helper for assert line numbers in different revisions +#ifndef SDK_REVISION +#define SDK_REVISION 0 +#endif + #if SDK_REVISION < 1 #define LINE(l0, l1, l2) (l0) #elif SDK_REVISION < 2 @@ -275,7 +318,6 @@ extern int __OSInIPL; // This is dumb but we dont have a Metrowerks way to do variadic macros in the macro to make this done in a not scrubby way. #define ASSERTMSG1LINE(line, cond, msg, arg1) \ ((cond) || (OSPanic(__FILE__, line, msg, arg1), 0)) - #define ASSERTMSG2LINE(line, cond, msg, arg1, arg2) \ ((cond) || (OSPanic(__FILE__, line, msg, arg1, arg2), 0)) @@ -289,7 +331,6 @@ extern int __OSInIPL; #define ASSERTMSG2LINE(line, cond, msg, arg1, arg2) (void)0 #define ASSERTMSGLINEV(line, cond, ...) (void)0 #endif - #define ASSERT(cond) ASSERTLINE(__LINE__, cond) inline s16 __OSf32tos16(__REGISTER f32 inF) { @@ -357,5 +398,5 @@ static inline void OSInitFastCast(void) { } #endif -#endif -#endif +#endif // __REVOLUTION_SDK__ +#endif // _DOLPHIN_OS_H_ diff --git a/src/DynamicLink.cpp b/src/DynamicLink.cpp index 52cf257970..c05fa23458 100644 --- a/src/DynamicLink.cpp +++ b/src/DynamicLink.cpp @@ -453,14 +453,6 @@ const char* DynamicModuleControl::getModuleTypeString() const { return strings[mResourceType & 3]; } -extern "C" void ModuleProlog() { - /* empty function */ -} - -extern "C" void ModuleEpilog() { - /* empty function */ -} - extern "C" void ModuleUnresolved() { // "\nError: Unlinked function was called.\n" OSReport_Error("\nError: リンクされていない関数が呼び出されました.\n"); diff --git a/src/JSystem/J3DGraphAnimator/J3DMtxBuffer.cpp b/src/JSystem/J3DGraphAnimator/J3DMtxBuffer.cpp index a1e9ba0243..8b881d27d0 100644 --- a/src/JSystem/J3DGraphAnimator/J3DMtxBuffer.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DMtxBuffer.cpp @@ -15,11 +15,11 @@ Mtx* J3DMtxBuffer::sNoUseDrawMtxPtr = &J3DMtxBuffer::sNoUseDrawMtx; Mtx33* J3DMtxBuffer::sNoUseNrmMtxPtr = &J3DMtxBuffer::sNoUseNrmMtx; // force .sdata2 order -f32 dummy1() { +static f32 dummy1() { return 1.0f; } -f32 dummy0() { +static f32 dummy0() { return 0.0f; } diff --git a/src/d/actor/d_a_b_ds.cpp b/src/d/actor/d_a_b_ds.cpp index 88b5c8042a..5d5c05d3a2 100644 --- a/src/d/actor/d_a_b_ds.cpp +++ b/src/d/actor/d_a_b_ds.cpp @@ -5426,6 +5426,10 @@ static int useHeapInit(fopAc_ac_c* i_this) { return static_cast(i_this)->CreateHeap(); } + +cXyz daB_DS_c::getHandPosR() { return mHandPos[1]; } +cXyz daB_DS_c::getHandPosL() { return mHandPos[0]; } + cPhs_Step daB_DS_c::create() { fopAcM_ct(this, daB_DS_c); diff --git a/src/d/actor/d_a_e_dd.cpp b/src/d/actor/d_a_e_dd.cpp index e0de6cb03f..1094366738 100644 --- a/src/d/actor/d_a_e_dd.cpp +++ b/src/d/actor/d_a_e_dd.cpp @@ -336,7 +336,7 @@ static BOOL way_bg_check(e_dd_class* i_this, f32 param_2) { return FALSE; } -u8 hio_set; +static u8 hio_set; static daE_DD_HIO_c l_HIO; diff --git a/src/d/actor/d_a_e_dn.cpp b/src/d/actor/d_a_e_dn.cpp index 794458bbe6..649dfe2895 100644 --- a/src/d/actor/d_a_e_dn.cpp +++ b/src/d/actor/d_a_e_dn.cpp @@ -354,13 +354,13 @@ static BOOL other_bg_check2(e_dn_class* i_this, cXyz* i_pos) { return FALSE; } -u8 hio_set; +static u8 hio_set; -daE_DN_HIO_c l_HIO; +static daE_DN_HIO_c l_HIO; fopAc_ac_c* target_info[10]; -int target_info_count; +static int target_info_count; static void* s_b_sub(void* i_actor, void* i_data) { if (fopAcM_IsActor(i_actor) && dBomb_c::checkBombActor((fopAc_ac_c*)i_actor) && !((dBomb_c*)i_actor)->checkStateExplode() && target_info_count < 10) { @@ -2978,7 +2978,7 @@ static void anm_se_set(e_dn_class* i_this) { } } -int c_start; +static int c_start; static int daE_DN_Execute(e_dn_class* i_this) { if (i_this->status != 0) { @@ -3298,9 +3298,9 @@ static int daE_DN_Delete(e_dn_class* i_this) { return 1; } -Vec jv_offset = { 0.0f, 0.0f, 0.0f }; +static Vec jv_offset = { 0.0f, 0.0f, 0.0f }; -dJntColData_c jc_data[12] = { +static dJntColData_c jc_data[12] = { {0, 1, 2, 40.0f, &jv_offset}, {0, 1, 3, 30.0f, &jv_offset}, {0, 1, 22, 40.0f, &jv_offset}, {0, 1, 11, 15.0f, &jv_offset}, {0, 1, 12, 10.0f, &jv_offset}, {0, 1, 17, 15.0f, &jv_offset}, diff --git a/src/d/actor/d_a_e_fb.cpp b/src/d/actor/d_a_e_fb.cpp index 1fbbbc2410..877e43d537 100644 --- a/src/d/actor/d_a_e_fb.cpp +++ b/src/d/actor/d_a_e_fb.cpp @@ -127,7 +127,7 @@ static f32 dummy_117095() { } #endif -bool hio_set; +static bool hio_set; static daE_FB_HIO_c l_HIO; diff --git a/src/d/actor/d_a_e_mf.cpp b/src/d/actor/d_a_e_mf.cpp index 42ad76cfd7..0c3c101416 100644 --- a/src/d/actor/d_a_e_mf.cpp +++ b/src/d/actor/d_a_e_mf.cpp @@ -289,13 +289,13 @@ static BOOL other_bg_check2(e_mf_class* i_this, cXyz* param_2) { return FALSE; } -u8 hio_set; +static u8 hio_set; -daE_MF_HIO_c l_HIO; +static daE_MF_HIO_c l_HIO; -fopAc_ac_c* target_info[10]; +static fopAc_ac_c* target_info[10]; -int target_info_count; +static int target_info_count; static void* s_b_sub(void* i_actor, void* i_data) { if (fopAcM_IsActor(i_actor) && dBomb_c::checkBombActor((fopAc_ac_c*)i_actor) && !((dBomb_c*)i_actor)->checkStateExplode() && target_info_count < 10) { @@ -2773,7 +2773,7 @@ static void anm_se_set(e_mf_class* i_this) { } } -int c_start; +static int c_start; static int daE_MF_Execute(e_mf_class* i_this) { fopEn_enemy_c* a_this = (fopEn_enemy_c*)&i_this->actor; @@ -3085,9 +3085,9 @@ static int daE_MF_Delete(e_mf_class* i_this) { return 1; } -Vec jv_offset = { 0.0f, 0.0f, 0.0f }; +static Vec jv_offset = { 0.0f, 0.0f, 0.0f }; -dJntColData_c jc_data[12] = { +static dJntColData_c jc_data[12] = { {0, 1, 2, 40.0f, &jv_offset}, {0, 1, 3, 30.0f, &jv_offset}, {0, 1, 22, 40.0f, &jv_offset}, {0, 1, 11, 15.0f, &jv_offset}, {0, 1, 12, 10.0f, &jv_offset}, {0, 1, 17, 15.0f, &jv_offset}, diff --git a/src/d/actor/d_a_e_mk.cpp b/src/d/actor/d_a_e_mk.cpp index fef3a86675..c5b4b7a34c 100644 --- a/src/d/actor/d_a_e_mk.cpp +++ b/src/d/actor/d_a_e_mk.cpp @@ -137,7 +137,7 @@ static cXyz STAGE_CENTER_POS; static s16 STAGE_ANGLE_Y; -u8 hio_set; +static u8 hio_set; static daE_MK_HIO_c l_HIO; diff --git a/src/d/actor/d_a_e_nz.cpp b/src/d/actor/d_a_e_nz.cpp index 738d01b3bf..59f4258f7e 100644 --- a/src/d/actor/d_a_e_nz.cpp +++ b/src/d/actor/d_a_e_nz.cpp @@ -129,7 +129,7 @@ static int daE_NZ_Draw(e_nz_class* i_this) { return 1; } -bool hio_set; +static bool hio_set; static daE_NZ_HIO_c l_HIO; diff --git a/src/d/actor/d_a_e_vt.cpp b/src/d/actor/d_a_e_vt.cpp index a9d716acd0..a0fc8b926c 100644 --- a/src/d/actor/d_a_e_vt.cpp +++ b/src/d/actor/d_a_e_vt.cpp @@ -873,7 +873,7 @@ void daE_VA_c::setFireEffect(int param_0) { dComIfGp_particle_set(field_0x10f80[idx + 2], 0x3AE, &field_0x1140[param_0], NULL, &scale); } -f32 dummy() { +static f32 dummy() { return 3.2f; } diff --git a/src/d/actor/d_a_e_yr.cpp b/src/d/actor/d_a_e_yr.cpp index f329c48a9a..a5dfd55d9d 100644 --- a/src/d/actor/d_a_e_yr.cpp +++ b/src/d/actor/d_a_e_yr.cpp @@ -1716,7 +1716,7 @@ static void e_yr_su_wait_move(e_yr_class* i_this) { } } -f32 dummy() { +static f32 dummy() { return -50.0f; } diff --git a/src/d/actor/d_a_npc_ash.cpp b/src/d/actor/d_a_npc_ash.cpp index 5f285ace08..d4cd04573a 100644 --- a/src/d/actor/d_a_npc_ash.cpp +++ b/src/d/actor/d_a_npc_ash.cpp @@ -57,7 +57,7 @@ void daNpcAsh_HIO_c::genMessage(JORMContext* ctext) { } #endif -NPC_ASH_HIO_CLASS l_HIO; +static NPC_ASH_HIO_CLASS l_HIO; void daNpcAsh_c::setLookMode(int i_lookMode, fopAc_ac_c* i_talkPartner) { if (i_lookMode != mLookMode || i_talkPartner != mTalkPartner) { diff --git a/src/d/actor/d_a_npc_ashB.cpp b/src/d/actor/d_a_npc_ashB.cpp index 237c93aa58..ec241ac46a 100644 --- a/src/d/actor/d_a_npc_ashB.cpp +++ b/src/d/actor/d_a_npc_ashB.cpp @@ -46,7 +46,7 @@ const daNpcAshB_HIOParam daNpcAshB_Param_c::m = { 400.0f, // field_0x6c }; -NPC_ASHB_HIO_CLASS l_HIO; +static NPC_ASHB_HIO_CLASS l_HIO; static daNpc_GetParam2 l_bckGetParamList[21] = { {-1, 2, 0}, {13, 0, 0}, {14, 0, 0}, {11, 0, 0}, {10, 0, 0}, {9, 0, 0}, {12, 0, 0}, diff --git a/src/d/actor/d_a_npc_bou.cpp b/src/d/actor/d_a_npc_bou.cpp index fe6f44846e..23640f7a09 100644 --- a/src/d/actor/d_a_npc_bou.cpp +++ b/src/d/actor/d_a_npc_bou.cpp @@ -16,7 +16,7 @@ static int l_bmdData[1][2] = { {11, 1}, }; -daNpcT_evtData_c l_evtList[11] = { +static daNpcT_evtData_c l_evtList[11] = { {"", 0}, {"NO_RESPONSE", 0}, {"WILDGOAT", 2}, diff --git a/src/d/actor/d_a_npc_clerka.cpp b/src/d/actor/d_a_npc_clerka.cpp index 21b089eb67..e3175bb4cd 100644 --- a/src/d/actor/d_a_npc_clerka.cpp +++ b/src/d/actor/d_a_npc_clerka.cpp @@ -780,7 +780,7 @@ static int daNpc_clerkA_IsDelete(void* i_this) { return 1; } -NPC_CLERKA_HIO_CLASS l_HIO; +static NPC_CLERKA_HIO_CLASS l_HIO; static actor_method_class daNpc_clerkA_MethodTable = { (process_method_func)daNpc_clerkA_Create, (process_method_func)daNpc_clerkA_Delete, diff --git a/src/d/actor/d_a_npc_clerkb.cpp b/src/d/actor/d_a_npc_clerkb.cpp index c6400f90a0..41ec390d4a 100644 --- a/src/d/actor/d_a_npc_clerkb.cpp +++ b/src/d/actor/d_a_npc_clerkb.cpp @@ -932,7 +932,7 @@ static int daNpc_clerkB_IsDelete(void* i_this) { return 1; } -NPC_CLERKB_HIO_CLASS l_HIO; +static NPC_CLERKB_HIO_CLASS l_HIO; static actor_method_class daNpc_clerkB_MethodTable = { (process_method_func)daNpc_clerkB_Create, (process_method_func)daNpc_clerkB_Delete, diff --git a/src/d/actor/d_a_npc_clerkt.cpp b/src/d/actor/d_a_npc_clerkt.cpp index 21398595be..43544cd533 100644 --- a/src/d/actor/d_a_npc_clerkt.cpp +++ b/src/d/actor/d_a_npc_clerkt.cpp @@ -693,7 +693,7 @@ void daNpcClerkT_c::setCollision() { mCyl.ClrTgHit(); } -NPC_CLERKT_HIO_CLASS l_HIO; +static NPC_CLERKT_HIO_CLASS l_HIO; static actor_method_class daNpcClerkt_MethodTable = { (process_method_func)daNpcClerkt_Create, (process_method_func)daNpcClerkt_Delete, diff --git a/src/d/actor/d_a_npc_gnd.cpp b/src/d/actor/d_a_npc_gnd.cpp index 8856e476d0..bc34c405af 100644 --- a/src/d/actor/d_a_npc_gnd.cpp +++ b/src/d/actor/d_a_npc_gnd.cpp @@ -96,7 +96,7 @@ const daNpc_Gnd_HIOParam daNpc_Gnd_Param_c::m = { 0.0f, }; -NPC_GND_HIO_CLASS l_HIO; +static NPC_GND_HIO_CLASS l_HIO; daNpc_Gnd_c::~daNpc_Gnd_c() { OS_REPORT("|%06d:%x|daNpc_Gnd_c -> デストラクト\n", g_Counter.mCounter0, this); diff --git a/src/d/actor/d_a_npc_gra.cpp b/src/d/actor/d_a_npc_gra.cpp index d6978ec3cb..65c2e6baa2 100644 --- a/src/d/actor/d_a_npc_gra.cpp +++ b/src/d/actor/d_a_npc_gra.cpp @@ -129,7 +129,7 @@ daNpc_grA_HIO_c::daNpc_grA_HIO_c() { } #endif -NPC_GRA_HIO_CLASS l_HIO; +static NPC_GRA_HIO_CLASS l_HIO; static char* l_evtNames[11] = { NULL, diff --git a/src/d/actor/d_a_npc_impal.cpp b/src/d/actor/d_a_npc_impal.cpp index 00e9a02905..7241c9c87f 100644 --- a/src/d/actor/d_a_npc_impal.cpp +++ b/src/d/actor/d_a_npc_impal.cpp @@ -45,7 +45,7 @@ daNpcImpal_HIOParam const daNpcImpal_Param_c::m = { 300.0f, // demo_start_dist }; -NPC_IMPAL_HIO_CLASS l_HIO; +static NPC_IMPAL_HIO_CLASS l_HIO; static daNpc_GetParam2 l_bckGetParamList[18] = { {-1, 2, 0}, {14, 0, 0}, {8, 0, 0}, {7, 2, 0}, {11, 0, 0}, {13, 0, 0}, diff --git a/src/d/actor/d_a_npc_knj.cpp b/src/d/actor/d_a_npc_knj.cpp index 7a6993223f..51d8b5020b 100644 --- a/src/d/actor/d_a_npc_knj.cpp +++ b/src/d/actor/d_a_npc_knj.cpp @@ -130,7 +130,7 @@ daNpc_Knj_c::cutFunc daNpc_Knj_c::mCutList[1] = { NULL, }; -NPC_KNJ_HIO_CLASS l_HIO; +static NPC_KNJ_HIO_CLASS l_HIO; daNpc_Knj_c::~daNpc_Knj_c() { if (heap != NULL) { diff --git a/src/d/actor/d_a_npc_kyury.cpp b/src/d/actor/d_a_npc_kyury.cpp index fc17e0fa54..84c497373e 100644 --- a/src/d/actor/d_a_npc_kyury.cpp +++ b/src/d/actor/d_a_npc_kyury.cpp @@ -136,7 +136,7 @@ daNpc_Kyury_c::cutFunc daNpc_Kyury_c::mCutList[2] = { &daNpc_Kyury_c::cutConversation, }; -NPC_KYURY_HIO_CLASS l_HIO; +static NPC_KYURY_HIO_CLASS l_HIO; #if DEBUG daNpc_Kyury_HIO_c::daNpc_Kyury_HIO_c() { diff --git a/src/d/actor/d_a_npc_len.cpp b/src/d/actor/d_a_npc_len.cpp index 6d3586be20..511dcf969f 100644 --- a/src/d/actor/d_a_npc_len.cpp +++ b/src/d/actor/d_a_npc_len.cpp @@ -652,7 +652,7 @@ void daNpc_Len_c::beforeMove() { } } -NPC_LEN_HIO_CLASS l_HIO; +static NPC_LEN_HIO_CLASS l_HIO; void daNpc_Len_c::setAttnPos() { cXyz acStack_40(-30.0f, 15.0f, 0.0f); diff --git a/src/d/actor/d_a_npc_lud.cpp b/src/d/actor/d_a_npc_lud.cpp index b15297f89d..4573edf91c 100644 --- a/src/d/actor/d_a_npc_lud.cpp +++ b/src/d/actor/d_a_npc_lud.cpp @@ -693,7 +693,7 @@ void daNpc_Lud_c::beforeMove() { } } -NPC_LUD_HIO_CLASS l_HIO; +static NPC_LUD_HIO_CLASS l_HIO; void daNpc_Lud_c::setAttnPos() { cXyz cStack_70(5.0f, 30.0f, 0.0f); diff --git a/src/d/actor/d_a_npc_maro.cpp b/src/d/actor/d_a_npc_maro.cpp index 709e27cb5c..492d83527e 100644 --- a/src/d/actor/d_a_npc_maro.cpp +++ b/src/d/actor/d_a_npc_maro.cpp @@ -116,7 +116,7 @@ static int l_bmdData[2][2] = { {11, 1}, {5, 2}, }; -daNpcT_evtData_c l_evtList[15] = { +static daNpcT_evtData_c l_evtList[15] = { {"", 0}, {"DEFAULT_GETITEM", 0}, {"NO_RESPONSE", 0}, diff --git a/src/d/actor/d_a_npc_moi.cpp b/src/d/actor/d_a_npc_moi.cpp index 50462a6f25..e901cb4248 100644 --- a/src/d/actor/d_a_npc_moi.cpp +++ b/src/d/actor/d_a_npc_moi.cpp @@ -244,7 +244,7 @@ enum Motion { /* 0x2F */ MOT_UNK_47 = 47, }; -NPC_MOI_HIO_CLASS l_HIO; +static NPC_MOI_HIO_CLASS l_HIO; daNpc_Moi_c::~daNpc_Moi_c() { if (mpMorf[0] != 0) { diff --git a/src/d/actor/d_a_npc_pouya.cpp b/src/d/actor/d_a_npc_pouya.cpp index 2129c5c52f..5d36a5992a 100644 --- a/src/d/actor/d_a_npc_pouya.cpp +++ b/src/d/actor/d_a_npc_pouya.cpp @@ -1189,7 +1189,7 @@ static bool daNpc_Pouya_IsDelete(void* i_this) { return 1; } -NPC_POUYA_HIO_CLASS l_HIO; +static NPC_POUYA_HIO_CLASS l_HIO; static actor_method_class daNpc_Pouya_MethodTable = { (process_method_func)daNpc_Pouya_Create, (process_method_func)daNpc_Pouya_Delete, diff --git a/src/d/actor/d_a_npc_shad.cpp b/src/d/actor/d_a_npc_shad.cpp index bffc93e883..ec87bf930f 100644 --- a/src/d/actor/d_a_npc_shad.cpp +++ b/src/d/actor/d_a_npc_shad.cpp @@ -307,7 +307,7 @@ static char* l_evtArcs[14] = { static char* l_myName = "Shad"; -NPC_SHAD_HIO_CLASS l_HIO; +static NPC_SHAD_HIO_CLASS l_HIO; daNpcShad_c::EventFn daNpcShad_c::mEvtSeqList[14] = { NULL, diff --git a/src/d/actor/d_a_npc_shoe.cpp b/src/d/actor/d_a_npc_shoe.cpp index 1639f2ee86..06b63797a7 100644 --- a/src/d/actor/d_a_npc_shoe.cpp +++ b/src/d/actor/d_a_npc_shoe.cpp @@ -54,7 +54,7 @@ void daNpcShoe_HIO_c::genMessage(JORMContext* ctext) { } #endif -NPC_SHOE_HIO_CLASS l_HIO; +static NPC_SHOE_HIO_CLASS l_HIO; void daNpcShoe_c::setLookMode(int i_lookMode) { if (mLookMode != i_lookMode) { diff --git a/src/d/actor/d_a_npc_taro.cpp b/src/d/actor/d_a_npc_taro.cpp index 32956de232..4bcfb6a0d8 100644 --- a/src/d/actor/d_a_npc_taro.cpp +++ b/src/d/actor/d_a_npc_taro.cpp @@ -20,7 +20,7 @@ #include "f_op/f_op_camera_mng.h" #include -daNpc_Maro_c::actionFunc dummy_lit_3931() { +static daNpc_Maro_c::actionFunc dummy_lit_3931() { return &daNpc_Maro_c::choccai; } diff --git a/src/d/actor/d_a_npc_the.cpp b/src/d/actor/d_a_npc_the.cpp index 79c169935d..7d63b43c42 100644 --- a/src/d/actor/d_a_npc_the.cpp +++ b/src/d/actor/d_a_npc_the.cpp @@ -61,7 +61,7 @@ void daNpcThe_HIO_c::genMessage(JORMContext* ctext) { } #endif -NPC_THE_HIO_CLASS l_HIO; +static NPC_THE_HIO_CLASS l_HIO; static daNpc_GetParam1 l_bmdGetParamList[2] = { {23, 0}, // the diff --git a/src/d/actor/d_a_npc_toby.cpp b/src/d/actor/d_a_npc_toby.cpp index 232d107471..1d934e3ada 100644 --- a/src/d/actor/d_a_npc_toby.cpp +++ b/src/d/actor/d_a_npc_toby.cpp @@ -265,7 +265,7 @@ daNpc_Toby_c::cutFunc daNpc_Toby_c::mCutList[7] = { &daNpc_Toby_c::cutConversationAboutZra, }; -NPC_TOBY_HIO_CLASS l_HIO; +static NPC_TOBY_HIO_CLASS l_HIO; daNpc_Toby_c::~daNpc_Toby_c() { OS_REPORT("|%06d:%x|daNpc_Toby_c -> デストラクト\n", g_Counter.mCounter0, this); diff --git a/src/d/actor/d_a_npc_uri.cpp b/src/d/actor/d_a_npc_uri.cpp index c3d835e6a3..d61729efee 100644 --- a/src/d/actor/d_a_npc_uri.cpp +++ b/src/d/actor/d_a_npc_uri.cpp @@ -209,7 +209,7 @@ daNpc_Uri_c::cutFunc daNpc_Uri_c::mCutList[7] = { &daNpc_Uri_c::cutMeetingAgain, }; -NPC_URI_HIO_CLASS l_HIO; +static NPC_URI_HIO_CLASS l_HIO; daNpc_Uri_c::~daNpc_Uri_c() { if (mpMorf[0] != 0) { diff --git a/src/d/actor/d_a_obj_brakeeff.cpp b/src/d/actor/d_a_obj_brakeeff.cpp index d9299694f9..6a43938f72 100644 --- a/src/d/actor/d_a_obj_brakeeff.cpp +++ b/src/d/actor/d_a_obj_brakeeff.cpp @@ -141,7 +141,7 @@ u32 bef_brk[2] = { 10, }; -int useHeapInit(fopAc_ac_c* i_this) { +static int useHeapInit(fopAc_ac_c* i_this) { obj_brakeeff_class* a_this = static_cast(i_this); J3DModelData* modelData = diff --git a/src/d/actor/d_a_obj_burnbox.cpp b/src/d/actor/d_a_obj_burnbox.cpp index b7b47b5357..b1c3f2a9c7 100644 --- a/src/d/actor/d_a_obj_burnbox.cpp +++ b/src/d/actor/d_a_obj_burnbox.cpp @@ -81,7 +81,7 @@ int daObjBurnBox_c::Create() { return 1; } -const char* l_arcName[3] = { +static const char* l_arcName[3] = { "Kkiba_00", // crate "Kkiba_00", "J_taru00", // barrel diff --git a/src/d/actor/d_a_obj_ice_l.cpp b/src/d/actor/d_a_obj_ice_l.cpp index 34d489308c..7048eb3a18 100644 --- a/src/d/actor/d_a_obj_ice_l.cpp +++ b/src/d/actor/d_a_obj_ice_l.cpp @@ -14,7 +14,7 @@ #include "d/d_s_play.h" #include -f32 dummyLiteral() { +static f32 dummyLiteral() { return 0.0f; } diff --git a/src/d/actor/d_a_obj_katatsumuri.cpp b/src/d/actor/d_a_obj_katatsumuri.cpp index 115d0dfadd..1cb47bd8c8 100644 --- a/src/d/actor/d_a_obj_katatsumuri.cpp +++ b/src/d/actor/d_a_obj_katatsumuri.cpp @@ -149,19 +149,19 @@ static int daObjKAT_Delete(daObjKAT_c* i_this) { return 1; } -f32 dummy0() { +static f32 dummy0() { return 0.0f; } -f32 dummy1() { +static f32 dummy1() { return 0.4f; } -f32 dummy2() { +static f32 dummy2() { return 10.0f; } -f32 dummy3() { +static f32 dummy3() { return 0.02f; } diff --git a/src/d/actor/d_a_obj_klift00.cpp b/src/d/actor/d_a_obj_klift00.cpp index 739c7fe7f8..221e4f8812 100644 --- a/src/d/actor/d_a_obj_klift00.cpp +++ b/src/d/actor/d_a_obj_klift00.cpp @@ -109,7 +109,7 @@ static const int l_dzbidx[] = {9}; #endif // force dCcD_Sph::~dCcD_Sph to be emitted earlier than it otherwise would -void dummy() { +static void dummy() { delete (dCcD_Sph*)NULL; delete (dCcD_Cyl*)NULL; } diff --git a/src/d/actor/d_a_obj_maki.cpp b/src/d/actor/d_a_obj_maki.cpp index c555335745..8c36b8bd2c 100644 --- a/src/d/actor/d_a_obj_maki.cpp +++ b/src/d/actor/d_a_obj_maki.cpp @@ -146,7 +146,7 @@ int daObj_Maki_Delete(obj_maki_class* i_this) { return 1; } -int useHeapInit(fopAc_ac_c* i_this) { +static int useHeapInit(fopAc_ac_c* i_this) { obj_maki_class* a_this = (obj_maki_class*)i_this; J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("Obj_maki", 4); @@ -176,7 +176,7 @@ int useHeapInit(fopAc_ac_c* i_this) { return 1; } -daObj_Maki_HIO_c l_HIO; +static daObj_Maki_HIO_c l_HIO; cPhs_Step daObj_Maki_Create(fopAc_ac_c* i_this) { fopAcM_ct(i_this, obj_maki_class); diff --git a/src/d/actor/d_a_obj_sakuita.cpp b/src/d/actor/d_a_obj_sakuita.cpp index 0f828d4d73..87073326d1 100644 --- a/src/d/actor/d_a_obj_sakuita.cpp +++ b/src/d/actor/d_a_obj_sakuita.cpp @@ -89,7 +89,7 @@ void daObjSakuita_c::setBaseMtx() { cMtx_copy(mDoMtx_stack_c::get(), mMtx); } -f32 dummyLiteral() { return 0.5f; } +static f32 dummyLiteral() { return 0.5f; } void daObjSakuita_c::setPlatePos() { cXyz cStack_24; diff --git a/src/d/actor/d_a_obj_ss_base.cpp b/src/d/actor/d_a_obj_ss_base.cpp index e4712d3813..92db022b60 100644 --- a/src/d/actor/d_a_obj_ss_base.cpp +++ b/src/d/actor/d_a_obj_ss_base.cpp @@ -15,7 +15,3 @@ daObj_SSBase_c::~daObj_SSBase_c() {} u32 daObj_SSBase_c::getProcessID() { return fopAcM_GetID(this); } - -void daObj_SSBase_c::setSoldOut() { - /* empty function */ -} diff --git a/src/d/actor/d_a_obj_thashi.cpp b/src/d/actor/d_a_obj_thashi.cpp index a702266dd4..0d0e8495a5 100644 --- a/src/d/actor/d_a_obj_thashi.cpp +++ b/src/d/actor/d_a_obj_thashi.cpp @@ -9,7 +9,7 @@ #include "d/d_cc_d.h" #include "d/d_s_play.h" -char* l_arcName = "S_thashi"; +static const char* l_arcName = "S_thashi"; static void dataStripping() { const static u32 ccCylSrc[] = {0, 0x100000, 0, 0x13, 0x100000, 0x1f, 0x75, 0, diff --git a/src/d/actor/d_a_obj_tornado.cpp b/src/d/actor/d_a_obj_tornado.cpp index 3b6c837f73..6761f0a329 100644 --- a/src/d/actor/d_a_obj_tornado.cpp +++ b/src/d/actor/d_a_obj_tornado.cpp @@ -216,7 +216,7 @@ static int daObjTrnd_Create(daObjTrnd_c* i_this) { return i_this->create(); } -void dummyString() { +static void dummyString() { DEAD_STRING(""); } diff --git a/src/d/actor/d_a_obj_waterPillar.cpp b/src/d/actor/d_a_obj_waterPillar.cpp index 65abe22e5c..47e2aecf16 100644 --- a/src/d/actor/d_a_obj_waterPillar.cpp +++ b/src/d/actor/d_a_obj_waterPillar.cpp @@ -110,7 +110,7 @@ const dCcD_SrcGObjInf daWtPillar_c::mCcDObjCoInfo = { {}, // mGObjCo }; -daWtPillar_HIO_c l_HIO; +static daWtPillar_HIO_c l_HIO; dCcD_SrcCps daWtPillar_c::mCcDCps = { daWtPillar_c::mCcDObjInfo, diff --git a/src/d/actor/d_a_obj_wdStick.cpp b/src/d/actor/d_a_obj_wdStick.cpp index d7e5275460..be060df460 100644 --- a/src/d/actor/d_a_obj_wdStick.cpp +++ b/src/d/actor/d_a_obj_wdStick.cpp @@ -435,7 +435,7 @@ void daWdStick_c::mode_proc_roll() { bgCheck(); } -f32 dummyLiteral() { return 100.0f; } +static f32 dummyLiteral() { return 100.0f; } BOOL daWdStick_c::chkWaterLineIn() { return mAcch.m_wtr.GetHeight() > current.pos.y + 40.0f; diff --git a/src/d/actor/d_a_tag_CstaSw.cpp b/src/d/actor/d_a_tag_CstaSw.cpp index 6974c3d5d3..03a07e7a99 100644 --- a/src/d/actor/d_a_tag_CstaSw.cpp +++ b/src/d/actor/d_a_tag_CstaSw.cpp @@ -10,7 +10,7 @@ #include "d/d_debug_viewer.h" #include "d/d_procname.h" -daTagCstaSw_HIO_c l_HIO; + static daTagCstaSw_HIO_c l_HIO; daTagCstaSw_HIO_c::daTagCstaSw_HIO_c() { show_range = 0; diff --git a/src/d/actor/d_a_tag_msg.cpp b/src/d/actor/d_a_tag_msg.cpp index d9cbd2bf66..25cf35e224 100644 --- a/src/d/actor/d_a_tag_msg.cpp +++ b/src/d/actor/d_a_tag_msg.cpp @@ -264,7 +264,7 @@ void daTag_Msg_HIO_c::genMessage(JORMContext* ctx) { } #endif -void dummyString() { +static void dummyString() { DEAD_STRING("Timer"); } diff --git a/src/dusk/stubs.cpp b/src/dusk/stubs.cpp index 8590df30eb..29e5a198dc 100644 --- a/src/dusk/stubs.cpp +++ b/src/dusk/stubs.cpp @@ -673,25 +673,6 @@ void Z2AudioCS::extensionProcess(s32, s32) { # pragma mark JORServer #include -void JORServer::releaseMCTX(JORMContext*) { - puts("releaseMCTX is a stub"); -} - -JORMContext* JORServer::attachMCTX(u32) { - puts("attachMCTX is a stub"); - return NULL; -} - -JORServer* JORServer::instance; - -void JORMContext::genCheckBoxSub(u32 kind, const char* label, u32 id, u32 style, u16 initValue, u16 mask, - JOREventListener* pListener, u16 posX, u16 posY, u16 width, - u16 height) { - puts("JORServer::genCheckBoxSub is a stub"); -} -void JORMContext::updateCheckBoxSub(u32 mode, u32 id, u16 value, u16 mask, u32 param_4) { - puts("JORServer::updateCheckBoxSub is a stub"); -} int JOREventCallbackListNode::JORAct(u32, const char*) { return 0; @@ -728,13 +709,6 @@ mDoExt_onCupOffAupPacket::~mDoExt_onCupOffAupPacket() { puts("mDoExt_onCupOffAupPacket_c destructor is a stub"); } -# pragma mark mDoExt -namespace mDoExt { - u8 CurrentHeapAdjustVerbose; - u8 HeapAdjustVerbose; - u8 HeapAdjustQuiet; -}; - # pragma mark dKankyo_vrboxHIO_c #include void dKankyo_vrboxHIO_c::dKankyo_vrboxHIOInfoUpDateF() { @@ -1513,7 +1487,7 @@ void GXInitTexCacheRegion(GXTexRegion* region, u8 is_32b_mipmap, u32 tmem_even, puts("GXInitTexCacheRegion is a stub"); } // XXX, this should be some struct? -GXRenderModeObj GXNtsc480IntDf; +// GXRenderModeObj GXNtsc480IntDf; GXRenderModeObj GXNtsc480Int; void GXPeekZ(u16 x, u16 y, u32* z) { puts("GXPeekZ is a stub"); @@ -1643,9 +1617,6 @@ u8 fapGm_HIO_c::mCaptureScreenDivH = 1; # pragma mark dMsgObject #include -void dMsgObject_c::setSelectWordFlag(u8 flag) { - puts("dMsgObject_c::setSelectWordFlag is a stub"); -} void dMsgObject_c::setWord(const char* i_word) { puts("dMsgObject_c::setWord is a stub"); } diff --git a/src/f_op/f_op_msg_mng.cpp b/src/f_op/f_op_msg_mng.cpp index 9442a807a6..c0b6dd060a 100644 --- a/src/f_op/f_op_msg_mng.cpp +++ b/src/f_op/f_op_msg_mng.cpp @@ -248,7 +248,7 @@ u8 fopMsgM_itemNumIdx(u8 i_no) { return itemicon[i_no] & 0xFF; } -f32 dummy() { +static f32 dummy() { J2DPane* dummyPlane = NULL; dummyPlane->getAlpha(); dummyPlane->getHeight(); From 833db377afb705efb2e3ab6a9c0eafecaa0382d2 Mon Sep 17 00:00:00 2001 From: Jeffrey Crowell Date: Sat, 14 Feb 2026 16:04:12 -0800 Subject: [PATCH 07/46] call game_main --- CMakeLists.txt | 1 + src/m_Do/m_Do_main.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2fa682f07b..6265f62ab8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1351,6 +1351,7 @@ set(DUSK_FILES src/dusk/globals.cpp src/dusk/mtx.cpp src/dusk/J3DTransforms_C.cpp + src/m_Do/m_Do_main.cpp # TODO: move this to a more appropriate location, it's not really dusk-specific ) source_group("dolzel" FILES ${DOLZEL_FILES} ${Z2AUDIOLIB_FILES} ${SSYSTEM_FILES} ${JSYSTEM_FILES} ${REL_FILES}) diff --git a/src/m_Do/m_Do_main.cpp b/src/m_Do/m_Do_main.cpp index 9f753ef4a9..2f337e254b 100644 --- a/src/m_Do/m_Do_main.cpp +++ b/src/m_Do/m_Do_main.cpp @@ -872,7 +872,7 @@ static u8 mainThreadStack[32768]; OSThread mainThread; -void game_main(int argc, const char* argv[]) { +extern "C" void game_main(int argc, const char* argv[]) { OSThread* current_thread = OSGetCurrentThread(); u8* stack = mainThreadStack; mDoMain::sPowerOnTime = OSGetTime(); From c86a2208d21f83f0d7eac1a8f3ffbd0ffca1ae09 Mon Sep 17 00:00:00 2001 From: Lurs <2795933+Lurs@users.noreply.github.com> Date: Tue, 17 Feb 2026 22:28:42 +0100 Subject: [PATCH 08/46] first start with aurora after linking on MSVC --- CMakeLists.txt | 7 +- include/dusk/dvd_emu.h | 45 ++ include/dusk/endian.h | 57 ++ src/JSystem/JKernel/JKRHeap.cpp | 106 ++- src/d/actor/d_a_obj_ss_base.cpp | 2 + src/dusk/dvd_emu.cpp | 217 ++++++ src/dusk/extras.c | 4 + src/dusk/jsystem_stubs.cpp | 7 +- src/dusk/main.cpp | 4 +- src/dusk/stubs.cpp | 232 +++---- src/m_Do/m_Do_main.cpp | 1086 ++++++------------------------- 11 files changed, 762 insertions(+), 1005 deletions(-) create mode 100644 include/dusk/dvd_emu.h create mode 100644 include/dusk/endian.h create mode 100644 src/dusk/dvd_emu.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 2057fcdcb2..bdfd4978ab 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,6 +24,8 @@ elseif (APPLE) elseif (MSVC) add_compile_options(/bigobj) add_compile_options(/Zc:strictStrings-) + add_compile_options(/MP) + add_compile_options(/W0) endif () if (NOT MSVC) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-error -Wno-c++11-narrowing") @@ -1353,14 +1355,15 @@ set(DUSK_FILES src/dusk/globals.cpp src/dusk/mtx.cpp src/dusk/J3DTransforms_C.cpp - src/dusk/m_Do_ext_dusk.cpp + #src/dusk/m_Do_ext_dusk.cpp src/dusk/jsystem_stubs.cpp - src/m_Do/m_Do_main.cpp # TODO: move this to a more appropriate location, it's not really dusk-specific + src/dusk/dvd_emu.cpp ) source_group("dolzel" FILES ${DOLZEL_FILES} ${Z2AUDIOLIB_FILES} ${SSYSTEM_FILES} ${JSYSTEM_FILES} ${REL_FILES}) source_group("dusk" FILES ${DUSK_FILES}) +set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) add_library(game SHARED ${DOLZEL_FILES} ${Z2AUDIOLIB_FILES} ${SSYSTEM_FILES} ${JSYSTEM_FILES} ${REL_FILES} ${DUSK_FILES}) target_compile_definitions(game PRIVATE TARGET_PC VERSION=0 NDEBUG=1 NDEBUG_DEFINED=1 DEBUG_DEFINED=0) # TODO: version handling for res includes diff --git a/include/dusk/dvd_emu.h b/include/dusk/dvd_emu.h new file mode 100644 index 0000000000..8366b2b37b --- /dev/null +++ b/include/dusk/dvd_emu.h @@ -0,0 +1,45 @@ +#ifndef DOLPHIN_DVD_EMU_H +#define DOLPHIN_DVD_EMU_H + +#include "dolphin/types.h" +#include + +// PC-Emulation der DVD-Funktionen +namespace DvdEmu { + +// Basis-Pfad zum Datenordner (relativ zur .exe) +void setBasePath(const char* path); +const char* getBasePath(); + +// Konvertiert GameCube-Pfad zu PC-Pfad +// z.B. "/res/Object/LogoUs.arc" -> "C:/Games/Dusk/data/res/Object/LogoUs.arc" +std::string convertPath(const char* gcPath); + +// Prüft ob Datei existiert +bool fileExists(const char* gcPath); + +// Lädt Datei komplett in Speicher +// Gibt Pointer zurück, Größe wird in outSize geschrieben +// Caller muss Speicher mit free() freigeben +void* loadFile(const char* gcPath, u32* outSize, void* heap = nullptr); + +// Lädt Datei in vorhandenen Buffer +// Gibt gelesene Bytes zurück +u32 loadFileToBuffer(const char* gcPath, void* buffer, u32 bufferSize, u32 offset = 0); + +// Datei-Größe abfragen +u32 getFileSize(const char* gcPath); + +} // namespace DvdEmu + +// Ersatz für DVDConvertPathToEntrynum +// Gibt einen "Fake" Entry-Number zurück (Hash des Pfads) oder -1 wenn nicht gefunden +s32 DVDConvertPathToEntrynum_Emu(const char* path); + +// Speichert Pfad für Entry-Number (für späteres Laden) +void DVDRegisterPath(s32 entryNum, const char* path); + +// Holt Pfad für Entry-Number +const char* DVDGetPathForEntry(s32 entryNum); + +#endif // DOLPHIN_DVD_EMU_H diff --git a/include/dusk/endian.h b/include/dusk/endian.h new file mode 100644 index 0000000000..25e5df70ff --- /dev/null +++ b/include/dusk/endian.h @@ -0,0 +1,57 @@ +#ifndef DOLPHIN_ENDIAN_H +#define DOLPHIN_ENDIAN_H + +#include "dolphin/types.h" + +// Platform detection - Little Endian targets +#if defined(_WIN32) || defined(__x86_64__) || defined(__i386__) || defined(__aarch64__) || defined(_M_X64) || defined(_M_IX86) + #define TARGET_LITTLE_ENDIAN 1 +#else + #define TARGET_LITTLE_ENDIAN 0 +#endif + +#if TARGET_LITTLE_ENDIAN + #ifdef _MSC_VER + #include + #define BSWAP16(x) _byteswap_ushort(x) + #define BSWAP32(x) _byteswap_ulong(x) + #else + #define BSWAP16(x) __builtin_bswap16(x) + #define BSWAP32(x) __builtin_bswap32(x) + #endif +#else + #define BSWAP16(x) (x) + #define BSWAP32(x) (x) +#endif + +// Big-Endian to Host conversion +inline u16 be16(u16 val) { return BSWAP16(val); } +inline s16 be16s(s16 val) { return (s16)BSWAP16((u16)val); } +inline u32 be32(u32 val) { return BSWAP32(val); } + +inline s32 be32s(s32 val) { return (s32)BSWAP32((u32)val); } + +#ifdef TARGET_PC +// Helper wrappers so code below reads nicely: +static inline u16 RES_U16(u16 v) { + return be16(v); +} +static inline s16 RES_S16(s16 v) { + return be16s(v); +} +static inline u32 RES_U32(u32 v) { + return be32(v); +} +static inline s32 RES_S32(s32 v) { + return be32s(v); +} +#else +// On GameCube host-endian == file-endian, these are no-ops (keep as macros to allow compile in +// original code paths) +#define RES_U16(x) (x) +#define RES_S16(x) (x) +#define RES_U32(x) (x) +#define RES_S32(x) (x) +#endif + +#endif // DOLPHIN_ENDIAN_H diff --git a/src/JSystem/JKernel/JKRHeap.cpp b/src/JSystem/JKernel/JKRHeap.cpp index 720166455a..2ebafc2613 100644 --- a/src/JSystem/JKernel/JKRHeap.cpp +++ b/src/JSystem/JKernel/JKRHeap.cpp @@ -8,8 +8,15 @@ #include "JSystem/JKernel/JKRHeap.h" #include "JSystem/JUtility/JUTAssert.h" #include "JSystem/JUtility/JUTException.h" +#ifdef __MWERKS__ #include +#else +#include +#include +#include +#endif #include +#include #if DEBUG u8 JKRValue_DEBUGFILL_NOTUSE = 0xFD; @@ -95,12 +102,28 @@ JKRHeap::JKRFreeCallback JKRHeap::sFreeCallback; bool JKRHeap::initArena(char** memory, u32* size, int maxHeaps) { void* arenaLo = OSGetArenaLo(); void* arenaHi = OSGetArenaHi(); -#if !PLATFORM_GCN - OSReport("original arenaLo = %p arenaHi = %p\n", arenaLo, arenaHi); -#endif + + OSReport("[JKRHeap] initArena: Lo=%p Hi=%p Size=0x%X\n", arenaLo, arenaHi, + (uintptr_t)arenaHi - (uintptr_t)arenaLo); + if (arenaLo == arenaHi) return false; +#ifdef TARGET_PC + // PC: Simple arena setup without GameCube-specific memory management + arenaLo = (void*)ALIGN_NEXT((uintptr_t)arenaLo, 0x20); + arenaHi = (void*)ALIGN_PREV((uintptr_t)arenaHi, 0x20); + + mCodeStart = nullptr; + mCodeEnd = nullptr; + mUserRamStart = arenaLo; + mUserRamEnd = arenaHi; + mMemorySize = (uintptr_t)arenaHi - (uintptr_t)arenaLo; + + *memory = (char*)arenaLo; + *size = (uintptr_t)arenaHi - (uintptr_t)arenaLo; + return true; +#else arenaLo = OSInitAlloc(arenaLo, arenaHi, maxHeaps); arenaLo = (void*)ALIGN_NEXT((uintptr_t)arenaLo, 0x20); arenaHi = (void*)ALIGN_PREV((uintptr_t)arenaHi, 0x20); @@ -119,6 +142,7 @@ bool JKRHeap::initArena(char** memory, u32* size, int maxHeaps) { *memory = (char*)arenaLo; *size = (uintptr_t)arenaHi - (uintptr_t)arenaLo; return true; +#endif } #if PLATFORM_WII || PLATFORM_SHIELD @@ -468,37 +492,113 @@ bool JKRHeap::isSubHeap(JKRHeap* heap) const { return false; } +#ifdef __MWERKS__ void* operator new(size_t size) { return JKRHeap::alloc(size, 4, NULL); } +#else +void* operator new(size_t size) { + if (JKRHeap::sCurrentHeap == NULL) { + return malloc(size); + } + void* mem = JKRHeap::alloc(size, 4, NULL); + if (mem == NULL) { + OSReport("[NEW] JKRHeap FULL! Fallback to malloc for size %u\n", (unsigned)size); + mem = malloc(size); + } + return mem; +} +#endif +#ifdef __MWERKS__ void* operator new(size_t size, int alignment) { return JKRHeap::alloc(size, alignment, NULL); } +#else +void* operator new(size_t size, int alignment) { + if (JKRHeap::sCurrentHeap == nullptr) + return _aligned_malloc(size, alignment); + void* mem = JKRHeap::alloc(size, alignment, nullptr); + if (mem == nullptr) { + OSReport("[NEW] JKRHeap FULL! Fallback to aligned_malloc size %u\n", (unsigned)size); + return _aligned_malloc(size, alignment); + } + return mem; +} +#endif void* operator new(size_t size, JKRHeap* heap, int alignment) { return JKRHeap::alloc(size, alignment, heap); } +#ifdef __MWERKS__ void* operator new[](size_t size) { return JKRHeap::alloc(size, 4, NULL); } +#else +void* operator new[](size_t size) { + if (JKRHeap::sCurrentHeap == NULL) + return malloc(size); + void* mem = JKRHeap::alloc(size, 4, NULL); + if (mem == NULL) { + mem = malloc(size); + } + return mem; +} +#endif +#ifdef __MWERKS__ void* operator new[](size_t size, int alignment) { return JKRHeap::alloc(size, alignment, NULL); } +#else +void* operator new[](size_t size, int alignment) { + if (JKRHeap::sCurrentHeap == nullptr) + return _aligned_malloc(size, alignment); + void* mem = JKRHeap::alloc(size, alignment, nullptr); + if (mem == nullptr) + return _aligned_malloc(size, alignment); + return mem; +} +#endif void* operator new[](size_t size, JKRHeap* heap, int alignment) { return JKRHeap::alloc(size, alignment, heap); } +#ifdef __MWERKS__ void operator delete(void* ptr) { JKRHeap::free(ptr, NULL); } +#else +void operator delete(void* ptr) { + if (ptr == NULL) + return; + JKRHeap* heap = JKRHeap::findFromRoot(ptr); + if (heap == NULL) { + free(ptr); + return; + } + JKRHeap::free(ptr, NULL); +} +#endif +#ifdef __MWERKS__ void operator delete[](void* ptr) { JKRHeap::free(ptr, NULL); } +#else +void operator delete[](void* ptr) { + if (ptr == NULL) + return; + JKRHeap* heap = JKRHeap::findFromRoot(ptr); + if (heap == NULL) { + free(ptr); + return; + } + JKRHeap::free(ptr, NULL); +} +#endif s32 fillcheck_dispcount = 100; bool data_8074A8D0_debug = true; diff --git a/src/d/actor/d_a_obj_ss_base.cpp b/src/d/actor/d_a_obj_ss_base.cpp index 92db022b60..3279a88b3e 100644 --- a/src/d/actor/d_a_obj_ss_base.cpp +++ b/src/d/actor/d_a_obj_ss_base.cpp @@ -12,6 +12,8 @@ daObj_SSBase_c::daObj_SSBase_c() { daObj_SSBase_c::~daObj_SSBase_c() {} +void daObj_SSBase_c::setSoldOut() {} + u32 daObj_SSBase_c::getProcessID() { return fopAcM_GetID(this); } diff --git a/src/dusk/dvd_emu.cpp b/src/dusk/dvd_emu.cpp new file mode 100644 index 0000000000..67a541c62d --- /dev/null +++ b/src/dusk/dvd_emu.cpp @@ -0,0 +1,217 @@ +#include "dusk/dvd_emu.h" +#include +#include +#include +#include +#include "dolphin/os.h" + +#ifdef _WIN32 +#include +#include +#define PATH_SEP '\\' +#else +#include +#include +#define PATH_SEP '/' +#endif + +namespace { +s32 g_nextEntryNum = 1; + +// Lazy-init to avoid crash during DLL static initialization +std::string& g_basePath() { + static std::string instance = "data"; + return instance; +} + +std::unordered_map& getEntryPaths() { + static std::unordered_map instance; + return instance; +} +} // namespace + +namespace DvdEmu { + +void setBasePath(const char* path) { +#ifdef _WIN32 + char exePath[MAX_PATH]; + GetModuleFileNameA(NULL, exePath, MAX_PATH); + + // Get the directory of the .exe + char* lastSlash = strrchr(exePath, '\\'); + if (lastSlash) { + *lastSlash = '\0'; + } + + // exeDir + "/" + path + g_basePath() = exePath; + g_basePath() += PATH_SEP; + g_basePath() += path; +#else + g_basePath() = path; +#endif + + OSReport("[DvdEmu] Base path set to: %s\n", g_basePath().c_str()); +} + +const char* getBasePath() { + return g_basePath().c_str(); +} + +std::string convertPath(const char* gcPath) { + std::string result = g_basePath(); + + // Skip leading slashes + const char* p = gcPath; + while (*p == '/' || *p == '\\') + p++; + + result += PATH_SEP; + + // Append path, converting slashes + while (*p) { + if (*p == '/' || *p == '\\') { + result += PATH_SEP; + } else { + result += *p; + } + p++; + } + + return result; +} + +bool fileExists(const char* gcPath) { + std::string fullPath = convertPath(gcPath); + +#ifdef _WIN32 + DWORD attrib = GetFileAttributesA(fullPath.c_str()); + bool exists = (attrib != INVALID_FILE_ATTRIBUTES && !(attrib & FILE_ATTRIBUTE_DIRECTORY)); +#else + struct stat st; + bool exists = (stat(fullPath.c_str(), &st) == 0 && S_ISREG(st.st_mode)); +#endif + + if (exists) { + OSReport("[DvdEmu] FOUND: %s\n", gcPath); + } else { + OSReport("[DvdEmu] MISSING: %s\n", gcPath); + } + + return exists; +} + +u32 getFileSize(const char* gcPath) { + std::string fullPath = convertPath(gcPath); + FILE* f = fopen(fullPath.c_str(), "rb"); + if (!f) + return 0; + + fseek(f, 0, SEEK_END); + u32 size = (u32)ftell(f); + fclose(f); + return size; +} + +void* loadFile(const char* gcPath, u32* outSize, void* heap) { + std::string fullPath = convertPath(gcPath); + + OSReport("[DvdEmu] Loading request: '%s'\n", gcPath); + + FILE* f = fopen(fullPath.c_str(), "rb"); + if (!f) { + OSReport("[DvdEmu] ERROR: Failed to open file at physical path: %s\n", fullPath.c_str()); + if (outSize) + *outSize = 0; + return nullptr; + } + + fseek(f, 0, SEEK_END); + u32 size = (u32)ftell(f); + fseek(f, 0, SEEK_SET); + + // Allocate with 32-byte alignment (matching GameCube) + void* data; +#ifdef _WIN32 + data = _aligned_malloc(size, 32); +#else + data = aligned_alloc(32, (size + 31) & ~31); +#endif + + if (!data) { + OSReport("[DvdEmu] FATAL: Failed to allocate %u bytes for %s\n", size, gcPath); + fclose(f); + if (outSize) + *outSize = 0; + return nullptr; + } + + u32 bytesRead = (u32)fread(data, 1, size, f); + fclose(f); + + if (bytesRead != size) { + OSReport("[DvdEmu] WARNING: Read error: expected %u, got %u for %s\n", size, bytesRead, + gcPath); + } + + if (outSize) + *outSize = bytesRead; + + OSReport("[DvdEmu] SUCCESS: Loaded %s (%u bytes)\n", gcPath, bytesRead); + return data; +} + +u32 loadFileToBuffer(const char* gcPath, void* buffer, u32 bufferSize, u32 offset) { + std::string fullPath = convertPath(gcPath); + + FILE* f = fopen(fullPath.c_str(), "rb"); + if (!f) { + OSReport("[DvdEmu] Failed to open file for buffer load: %s\n", fullPath.c_str()); + return 0; + } + + if (offset > 0) { + fseek(f, offset, SEEK_SET); + } + + u32 bytesRead = (u32)fread(buffer, 1, bufferSize, f); + fclose(f); + + return bytesRead; +} + +} // namespace DvdEmu + +// Entry-Number System (emulates DVD's entry system) + +s32 DVDConvertPathToEntrynum_Emu(const char* path) { + if (!DvdEmu::fileExists(path)) { + OSReport("[DVD] Error: File not found for entrynum conversion: %s\n", path); + return -1; + } + + // Check if already registered + for (const auto& pair : getEntryPaths()) { + if (pair.second == path) { + return pair.first; + } + } + + // Assign new entry number + s32 entryNum = g_nextEntryNum++; + getEntryPaths()[entryNum] = path; + + return entryNum; +} + +void DVDRegisterPath(s32 entryNum, const char* path) { + getEntryPaths()[entryNum] = path; +} + +const char* DVDGetPathForEntry(s32 entryNum) { + auto it = getEntryPaths().find(entryNum); + if (it != getEntryPaths().end()) { + return it->second.c_str(); + } + return nullptr; +} diff --git a/src/dusk/extras.c b/src/dusk/extras.c index 85a08394a6..a64296eed3 100644 --- a/src/dusk/extras.c +++ b/src/dusk/extras.c @@ -54,5 +54,9 @@ void *_memcpy(void* dest, void const* src, int n) { } void DCZeroRange(void* addr, uint32_t nBytes) { +#ifdef _MSC_VER + memset(addr, 0, nBytes); +#else bzero(addr, nBytes); +#endif } diff --git a/src/dusk/jsystem_stubs.cpp b/src/dusk/jsystem_stubs.cpp index 2987e39df3..1ca727fe00 100644 --- a/src/dusk/jsystem_stubs.cpp +++ b/src/dusk/jsystem_stubs.cpp @@ -1,6 +1,7 @@ +/* #include #include - +*/ #pragma mark J3DShapeTable #include "JSystem/J3DGraphAnimator/J3DShapeTable.h" @@ -46,7 +47,7 @@ bool JASVoiceBank::getInstParam(int a, int b, int c, JASInstParam* param) const } // JASSeqParser::sCallBackFunc is compiled from JASSeqParser.obj - +/* #pragma mark JHICommBuf #include "JSystem/JHostIO/JHIComm.h" @@ -137,7 +138,7 @@ int JOREventCallbackListNode::JORAct(u32 eventID, const char* eventName) { puts("JOREventCallbackListNode::JORAct is a stub"); return 0; } - +*/ #pragma mark J3DPSMtxArrayConcat void J3DPSMtxArrayConcat(float (*a)[4], float (*b)[4], float (*out)[4], unsigned long count) { puts("J3DPSMtxArrayConcat is a stub"); diff --git a/src/dusk/main.cpp b/src/dusk/main.cpp index f8475c1e68..d424bf2b56 100644 --- a/src/dusk/main.cpp +++ b/src/dusk/main.cpp @@ -1,5 +1,5 @@ -extern "C" void game_main(int argc, char* argv[]); +int game_main(int argc, char* argv[]); int main(int argc, char* argv[]) { - game_main(argc, argv); + return game_main(argc, argv); } diff --git a/src/dusk/stubs.cpp b/src/dusk/stubs.cpp index 329f5c2c57..670c718c1d 100644 --- a/src/dusk/stubs.cpp +++ b/src/dusk/stubs.cpp @@ -5,14 +5,14 @@ // Credits: Super Monkey Ball -#pragma mark OS /* void OSReport(const char* msg, ...) { va_list args; va_start(args, msg); vprintf(msg, args); va_end(args); -}*/ +} +*/ u32 OSGetConsoleType() { return OS_CONSOLE_RETAIL1; @@ -76,6 +76,7 @@ void OSCancelAlarm(OSAlarm* alarm) { s32 OSCheckActiveThreads(void) { puts("OSCheckActiveThreads is a stub"); + return 0; } @@ -235,14 +236,15 @@ void OSExitThread(void* val) { puts("OSExitThread is a stub"); } +static void* sArenaLo = nullptr; +static void* sArenaHi = nullptr; + void* OSGetArenaHi(void) { - puts("OSGetArenaHi is a stub"); - return NULL; + return sArenaHi; } void* OSGetArenaLo(void) { - puts("OSGetArenaLo is a stub"); - return NULL; + return sArenaLo; } OSContext* OSGetCurrentContext(void) { @@ -326,11 +328,11 @@ int OSSendMessage(OSMessageQueue* mq, void* msg, s32 flags) { } void OSSetArenaHi(void* newHi) { - puts("OSSetArenaHi is a stub"); + sArenaHi = newHi; } void OSSetArenaLo(void* newLo) { - puts("OSSetArenaLo is a stub"); + sArenaLo = newLo; } void OSSetPeriodicAlarm(OSAlarm* alarm, OSTime start, OSTime period, OSAlarmHandler handler) { @@ -631,100 +633,42 @@ u32 VIGetRetraceCount() { } u32 VIGetNextField() { - puts("VIGetNextField is a stub"); - return 0; + puts("VIGetNextField is a stub"); + return 0; } -void VISetBlack(BOOL black) { puts("VISetBlack is a stub"); } +void VISetBlack(BOOL black) { + puts("VISetBlack is a stub"); +} -void VISetNextFrameBuffer(void *fb) { - // puts("VISetNextFrameBuffer is a stub"); +void VISetNextFrameBuffer(void* fb) { + // puts("VISetNextFrameBuffer is a stub"); } void VIWaitForRetrace() { - if (sVIRetraceCallback) { - sVIRetraceCallback(0); - } + if (sVIRetraceCallback) { + sVIRetraceCallback(0); + } } void* VIGetCurrentFrameBuffer(void) { - puts("VIGetCurrentFrameBuffer is a stub"); - return NULL; + puts("VIGetCurrentFrameBuffer is a stub"); + return NULL; } u32 VIGetDTVStatus(void) { - puts("VIGetDTVStatus is a stub"); - return 0; + puts("VIGetDTVStatus is a stub"); + return 0; } void* VIGetNextFrameBuffer(void) { - puts("VIGetNextFrameBuffer is a stub"); - return NULL; + puts("VIGetNextFrameBuffer is a stub"); + return NULL; } VIRetraceCallback VISetPostRetraceCallback(VIRetraceCallback callback) { - sVIRetraceCallback = callback; - return callback; -} - -VIRetraceCallback VISetPreRetraceCallback(VIRetraceCallback cb) { - puts("VISetPreRetraceCallback is a stub"); - return cb; -} - -} // extern "C" - -# pragma mark DSP -#include -extern "C" void __DSP_insert_task(DSPTaskInfo* task) { - puts("__DSP_insert_task is a stub"); -} - -extern "C" void __DSP_boot_task(DSPTaskInfo*) { - puts("__DSP_boot_task is a stub"); -} - -extern "C" void __DSP_exec_task(DSPTaskInfo*, DSPTaskInfo*) { - puts("__DSP_exec_task is a stub"); -} - -extern "C" void __DSP_remove_task(DSPTaskInfo* task) { - puts("__DSP_remove_task is a stub"); -} - -void DSPAssertInt(void) { - puts("DSPAssertInt is a stub"); -} -u32 DSPCheckMailFromDSP(void) { - puts("DSPCheckMailFromDSP is a stub"); - return 0; -} -u32 DSPCheckMailToDSP(void) { - puts("DSPCheckMailToDSP is a stub"); - return 0; -} -void DSPInit(void) { - puts("DSPInit is a stub"); -} -u32 DSPReadMailFromDSP(void) { - puts("DSPReadMailFromDSP is a stub"); - return 0; -} -void DSPSendMailToDSP(u32 mail) { - puts("DSPSendMailToDSP is a stub"); -} - -# pragma mark Z2Audio -#include -void Z2AudioCS::extensionProcess(s32, s32) { - puts("Z2AudioMgr::play is a stub"); -} - -# pragma mark JORServer -#include - -int JOREventCallbackListNode::JORAct(u32, const char*) { - return 0; + sVIRetraceCallback = callback; + return callback; } VIRetraceCallback VISetPreRetraceCallback(VIRetraceCallback cb) { @@ -780,27 +724,12 @@ void Z2AudioCS::extensionProcess(s32, s32) { puts("Z2AudioMgr::play is a stub"); } -// #pragma mark JORServer -// #include -// void JORServer::releaseMCTX(JORMContext*) { -// puts("releaseMCTX is a stub"); -// } -// -// JORMContext* JORServer::attachMCTX(u32) { -// puts("attachMCTX is a stub"); -// return NULL; -// } -// -// JORServer* JORServer::instance; -// -// void JORMContext::genCheckBoxSub(u32 kind, const char* label, u32 id, u32 style, u16 initValue, -// u16 mask, JOREventListener* pListener, u16 posX, u16 posY, -// u16 width, u16 height) { -// puts("JORServer::genCheckBoxSub is a stub"); -// } -// void JORMContext::updateCheckBoxSub(u32 mode, u32 id, u16 value, u16 mask, u32 param_4) { -// puts("JORServer::updateCheckBoxSub is a stub"); -// } +#pragma mark JORServer +#include + +int JOREventCallbackListNode::JORAct(u32, const char*) { + return 0; +} #pragma mark JSUMemoryOutputStream #include @@ -834,7 +763,7 @@ mDoExt_onCupOffAupPacket::~mDoExt_onCupOffAupPacket() { puts("mDoExt_onCupOffAupPacket_c destructor is a stub"); } -# pragma mark dKankyo_vrboxHIO_c +#pragma mark dKankyo_vrboxHIO_c #include void dKankyo_vrboxHIO_c::dKankyo_vrboxHIOInfoUpDateF() { puts("dKankyo_vrboxHIO_c::dKankyo_vrboxHIOInfoUpDateF is a stub"); @@ -1755,6 +1684,92 @@ void dMsgObject_c::setSelectWord(int i_no, const char* i_word) { puts("dMsgObject_c::setSelectWord is a stub"); } +#pragma mark HIO +#include +#include +BOOL HIO2Close(s32 handle) { + puts("HIO2Close is a stub"); + return FALSE; +} + +BOOL HIO2EnumDevices(HIO2EnumCallback callback) { + puts("HIO2EnumDevices is a stub"); + return FALSE; +} + +BOOL HIO2Init(void) { + puts("HIO2Init is a stub"); + return FALSE; +} + +s32 HIO2Open(HIO2DeviceType type, HIO2UnkCallback exiCb, HIO2DisconnectCallback disconnectCb) { + puts("HIO2Open is a stub"); + return 0; +} + +BOOL HIO2Read(s32 handle, u32 addr, void* buffer, s32 size) { + puts("HIO2Read is a stub"); + return FALSE; +} + +BOOL HIO2Write(s32 handle, u32 addr, void* buffer, s32 size) { + puts("HIO2Write is a stub"); + return FALSE; +} + +BOOL HIORead(u32 addr, void* buffer, s32 size) { + puts("HIORead is a stub"); + return FALSE; +} + +BOOL HIOWrite(u32 addr, void* buffer, s32 size) { + puts("HIOWrite is a stub"); + return FALSE; +} + +#pragma mark JHICommBuf +#include +void JHICommBufHeader::init() { + puts("JHICommBufHeader::init is a stub"); +} + +int JHICommBufHeader::load() { + puts("JHICommBufHeader::load is a stub"); + return 0; +} + +int JHICommBufReader::read(void*, int) { + puts("JHICommBufReader::read is a stub"); + return 0; +} +void JHICommBufReader::readEnd() { + puts("JHICommBufReader::readEnd is a stub"); +} + +int JHICommBufReader::readBegin() { + puts("JHICommBufReader::readBegin is a stub"); + return 0; +} + +int JHICommBufWriter::writeBegin() { + puts("JHICommBufWriter::writeBegin is a stub"); + return 0; +} + +int JHICommBufWriter::write(void*, int) { + puts("JHICommBufWriter::write is a stub"); + return 0; +} + +void JHICommBufWriter::writeEnd() { + puts("JHICommBufWriter::writeEnd is a stub"); +} + +u32 JHICommBufReader::Header::getReadableSize() const { + puts("JHICommBufReader::Header::getReadableSize is a stub"); + return 0; +} + #pragma mark dMeter2Info #include void dMeter2Info_c::getString(u32 i_stringID, char* o_string, JMSMesgEntry_c* i_msgEntry) { @@ -1764,7 +1779,4 @@ void dMeter2Info_c::getStringKanji(u32 i_stringID, char* o_string, JMSMesgEntry_ puts("dMeter2Info_c::getStringKanji is a stub"); } -dPa_particleTracePcallBack_c JPTracePCB4; - - - +dPa_particleTracePcallBack_c JPTracePCB4; \ No newline at end of file diff --git a/src/m_Do/m_Do_main.cpp b/src/m_Do/m_Do_main.cpp index 2f337e254b..27e7e87026 100644 --- a/src/m_Do/m_Do_main.cpp +++ b/src/m_Do/m_Do_main.cpp @@ -1,949 +1,265 @@ /** * m_Do_main.cpp * Main Initialization + * PC Port Version - based on Aurora integration from Vorversion */ #include "m_Do/m_Do_main.h" +#include #include "DynamicLink.h" #include "JSystem/JAudio2/JASAudioThread.h" #include "JSystem/JAudio2/JAUSoundTable.h" #include "JSystem/JFramework/JFWSystem.h" +#include "JSystem/JHostIO/JORServer.h" #include "JSystem/JKernel/JKRAram.h" #include "JSystem/JKernel/JKRSolidHeap.h" #include "JSystem/JUtility/JUTConsole.h" -#include "JSystem/JUtility/JUTReport.h" #include "JSystem/JUtility/JUTException.h" #include "JSystem/JUtility/JUTProcBar.h" -#include "JSystem/JHostIO/JORServer.h" +#include "JSystem/JUtility/JUTReport.h" +#include "SSystem/SComponent/c_counter.h" #include "Z2AudioLib/Z2WolfHowlMgr.h" #include "c/c_dylink.h" #include "d/d_com_inf_game.h" +#include "d/d_debug_pad.h" #include "d/d_s_logo.h" #include "d/d_s_menu.h" #include "d/d_s_play.h" -#include "d/d_debug_pad.h" #include "f_ap/f_ap_game.h" #include "f_op/f_op_msg.h" #include "m_Do/m_Do_MemCard.h" #include "m_Do/m_Do_Reset.h" #include "m_Do/m_Do_controller_pad.h" #include "m_Do/m_Do_dvd_thread.h" +#include "m_Do/m_Do_ext2.h" #include "m_Do/m_Do_graphic.h" #include "m_Do/m_Do_machine.h" #include "m_Do/m_Do_printf.h" -#include "m_Do/m_Do_ext2.h" -#include "SSystem/SComponent/c_counter.h" -#include -#if PLATFORM_WII || PLATFORM_SHIELD -#include -#endif +#include +#include +#include "dusk/dvd_emu.h" +#include "SSystem/SComponent/c_API.h" -class mDoMain_HIO_c : public mDoHIO_entry_c { -public: - void listenPropertyEvent(const JORPropertyEvent*); - void genMessage(JORMContext*); -}; - -void version_check() { -#if !PLATFORM_SHIELD - if (!strcmp("20Apr2004", "20Apr2004") && !strcmp("Patch2", "Patch2")) { - return; - } - - // "SDK version doesn't match. Stopping\n" - OSReport_Error("SDKのバージョンが一致しません。停止します\n"); - do { - } while (true); -#endif -} +#include +#include +#include +// --- GLOBALS --- +s8 mDoMain::developmentMode = -1; +OSTime mDoMain::sPowerOnTime; +OSTime mDoMain::sHungUpTime; +u32 mDoMain::memMargin = 0xFFFFFFFF; char mDoMain::COPYDATE_STRING[18] = "??/??/?? ??:??:??"; -// static HeapCheck RootHeapCheck; -static HeapCheck RootHeapCheck = HeapCheck(0,"Root","ルート"); - -// static HeapCheck SystemHeapCheck; -static HeapCheck SystemHeapCheck = HeapCheck(0,"System","システム"); - -// static HeapCheck ZeldaHeapCheck; -static HeapCheck ZeldaHeapCheck = HeapCheck(0,"Zelda","ゼルダ"); - -// static HeapCheck GameHeapCheck; -static HeapCheck GameHeapCheck = HeapCheck(0,"Game","ゲーム"); - -// static HeapCheck ArchiveHeapCheck; -static HeapCheck ArchiveHeapCheck = HeapCheck(0,"Archive","アーカイブ"); - -// static HeapCheck J2dHeapCheck; -static HeapCheck J2dHeapCheck = HeapCheck(0,"J2d","J2D"); - -// static HeapCheck HostioHeapCheck; -static HeapCheck HostioHeapCheck = HeapCheck(0,"Hostio","ホストIO"); - -// static HeapCheck CommandHeapCheck; -static HeapCheck CommandHeapCheck = HeapCheck(0,"Command","コマンド"); - -static HeapCheck* HeapCheckTable[8] = { - &RootHeapCheck, &SystemHeapCheck, &ZeldaHeapCheck, &GameHeapCheck, - &ArchiveHeapCheck, &J2dHeapCheck, &HostioHeapCheck, &CommandHeapCheck, -}; - -void printFrameLine() { - OSCalendarTime calendar; - OSTime time = OSGetTime(); - u32 retrace = VIGetRetraceCount(); - OSTicksToCalendarTime(time, &calendar); - - OS_REPORT("\x1b[44m-- %5d - %5d - %3d %d %04d/%02d/%02d %02d:%02d:%02d\'%03d\'\'%03d\n\x1b[m", - g_Counter.mCounter0, retrace, - calendar.yday, calendar.wday, calendar.year, calendar.mon, calendar.mday, - calendar.hour, calendar.min, calendar.sec, calendar.msec, calendar.usec); -} - -void HeapCheck::CheckHeap1() { - s32 totalUsedSize = mHeap->getTotalUsedSize(); - s32 freeSize = mHeap->getFreeSize(); - - if (mMaxTotalUsedSize < totalUsedSize) - mMaxTotalUsedSize = totalUsedSize; - - if (mMaxTotalFreeSize > freeSize) - mMaxTotalFreeSize = freeSize; -} - -void CheckHeap(u32 i_padNo) { - mDoMch_HeapCheckAll(); - OSCheckActiveThreads(); - - int saveRel = (mDoCPd_c::getHold(i_padNo) & ~PAD_TRIGGER_Z) == (PAD_TRIGGER_L + PAD_TRIGGER_R) && mDoCPd_c::getTrig(i_padNo) & PAD_TRIGGER_Z; - - for (int i = 0; i < 8; i++) { - HeapCheckTable[i]->CheckHeap1(); - if (saveRel) { - HeapCheckTable[i]->saveRelBase(); - } +// --- PC LOGGING CALLBACK --- +void aurora_log_callback(AuroraLogLevel level, const char* module, const char* message, + unsigned int len) { + const char* levelStr = "??"; + FILE* out = stdout; + switch (level) { + case LOG_DEBUG: + levelStr = "DEBUG"; + break; + case LOG_INFO: + levelStr = "INFO"; + break; + case LOG_WARNING: + levelStr = "WARNING"; + break; + case LOG_ERROR: + levelStr = "ERROR"; + out = stderr; + break; + case LOG_FATAL: + levelStr = "FATAL"; + out = stderr; + break; + } + fprintf(out, "[%s | %s] %s\n", levelStr, module, message); + if (level == LOG_FATAL) { + fflush(out); + abort(); } } -static int countUsed(JKRExpHeap* heap) { - OSDisableScheduler(); +// ========================================================================= +// LOAD_COPYDATE - PC Version using DvdEmu +// ========================================================================= +#define COPYDATE_PATH "/str/Final/Release/COPYDATE" - int counter = 0; - JKRExpHeap::CMemBlock* used_blocks_head = heap->getUsedFirst(); - while (used_blocks_head) { - counter++; - used_blocks_head = used_blocks_head->getNextBlock(); +s32 LOAD_COPYDATE(void*) { + char buffer[32]; + memset(buffer, 0, sizeof(buffer)); + + u32 size = 0; + void* data = DvdEmu::loadFile(COPYDATE_PATH, &size, nullptr); + + // Fallback: Try root if not found + if (!data) { + data = DvdEmu::loadFile("/COPYDATE", &size, nullptr); } - OSEnableScheduler(); - return counter; -} + if (data) { + u32 copyLen = (size < sizeof(buffer) - 1) ? size : sizeof(buffer) - 1; + memcpy(buffer, data, copyLen); + buffer[copyLen] = '\0'; -s32 HeapCheck::getUsedCount() const { - return countUsed(mHeap); -} - -void HeapCheck::heapDisplay() const { - s32 heap_size = mHeap->getHeapSize(); - s32 used_count = heap_size - getTargetHeapSize(); - - s32 total_used_size = mHeap->getTotalUsedSize(); - s32 total_free_size = mHeap->getTotalFreeSize(); - s32 heap_free_size = mHeap->getFreeSize(); - - JUTReport(100, 212, "[%sName]", mName); - JUTReport(100, 227, "HeapSize %8ld", heap_size); - JUTReport(100, 240, "TargetHeapSize %8ld", getTargetHeapSize()); - JUTReport(100, 253, "TotalFree %8ld", total_free_size - used_count); - JUTReport(100, 266, "FreeSize %8ld", heap_free_size - used_count); - JUTReport(100, 279, "TotalUsedSize %8ld", total_used_size); - JUTReport(100, 292, "TotalUsedRate %3ld%%", (int)(total_used_size * 100) / (int)getTargetHeapSize()); - JUTReport(100, 305, "MaxTotalUsedSize %8ld", mMaxTotalUsedSize); - JUTReport(100, 318, "MaxTotalUsedRate %3ld%%", (mMaxTotalUsedSize * 100) / (int)getTargetHeapSize()); - JUTReport(100, 331, "MinFreeSize %8ld", mMaxTotalFreeSize - used_count); - JUTReport(100, 344, "MinFreeRate %3ld%%", ((mMaxTotalFreeSize - used_count) * 100) / (int)getTargetHeapSize()); - JUTReport(100, 357, "UsedCount %3ld%", countUsed(mHeap)); -} - -#if DEBUG -int mDoMain::argument = -1; +#ifdef _WIN32 + _aligned_free(data); +#else + free(data); #endif - -s8 mDoMain::developmentMode = -1; - -#if DEBUG -u32 mDoMain::gameHeapSize = 0xFFFFFFFF; -u32 mDoMain::archiveHeapSize = 0xFFFFFFFF; -#endif - -u32 mDoMain::memMargin = 0xFFFFFFFF; - -#if DEBUG -int mDoMain::e3menu_no = -1; -#endif - -u8 mHeapBriefType = 4; - -#if DEBUG -static u8 memorycheck_check_frame; -#endif - -static u8 fillcheck_check_frame; - -OSTime mDoMain::sPowerOnTime; - -OSTime mDoMain::sHungUpTime; - -static u8 mDisplayHeapSize; - -#if DEBUG -static u8 mReportDisable; -#endif - -static u8 mSelectHeapBar; - -#if DEBUG -static u8 mVisibleHeapBar; -static u8 mPrintFrameLine; -#endif - -static u8 mCheckHeap; - -#if DEBUG -mDoMain_HIO_c mDoMain_HIO; -#endif - -void debugDisplay() { - static const char* desc1[5] = { - "", "TotalFree", "MaxUsed ", "Used ", "RelUsed ", - }; - - static const char* desc2[5] = { - "", "/ MaxFree", "/HeapSize", "Blk/Bytes", "Blk/Bytes", - }; - - if (mSelectHeapBar >= 1 && mSelectHeapBar <= 6) { - HeapCheckTable[mSelectHeapBar - 1]->heapDisplay(); - } - - if (mHeapBriefType == 5) { - JKRAramHeap* heap = JKRAram::getAramHeap(); - if (heap != NULL) { - JUTReport(475, 100, "ARAM Free"); - JUTReport(475, 114, "%d", heap->getFreeSize()); - JUTReport(475, 128, "TotalFree"); - JUTReport(475, 142, "%d", heap->getTotalFreeSize()); - } - return; - } - - if (mHeapBriefType != 0) { - JUT_ASSERT(596, mHeapBriefType < HeapCheckTableNum); - JUTReport(475, 100, "%s", desc1[mHeapBriefType]); - JUTReport(475, 114, "%s", desc2[mHeapBriefType]); - - for (int i = 0; i < 8; i++) { - HeapCheck* heap_check = HeapCheckTable[i]; - JKRExpHeap* expHeap = heap_check->getHeap(); - - s32 check1; - s32 check2; - switch (mHeapBriefType) { - case 1: - check1 = expHeap->getTotalFreeSize(); - check2 = expHeap->getFreeSize(); - break; - case 2: - check1 = heap_check->getMaxTotalUsedSize(); - check2 = expHeap->getHeapSize(); - break; - case 3: - check1 = heap_check->getUsedCount(); - check2 = expHeap->getTotalUsedSize(); - break; - case 4: - check1 = heap_check->getRelUsedCount(); - check2 = heap_check->getRelTotalUsedSize(); - break; - } - - JUTReport(475, (i * 44) + 150, " [%s]", heap_check->getName()); - JUTReport(475, (i * 44) + 164, "%10d", check1); - JUTReport(475, (i * 44) + 178, "%10d", check2); - } - } -} - -void my_genCheckBox(JORMContext* mctx, const char* label, u8* pSrc, u8 mask) { - mctx->genCheckBox(label, pSrc, mask); -} - -#if DEBUG -void mDoMain_HIO_c::genMessage(JORMContext* mctx) { - mctx->genSlider("コード破壊チェックフレーム", &memorycheck_check_frame, 0, 0xFF); - mctx->genButton("コード破壊チェックcheck", 0); - mctx->genButton("コード破壊チェックsave", 1); - mctx->genButton("コード破壊チェックdiff", 2); - mctx->genCheckBox("デバッグフィル", &mDoMch::mDebugFill, 0x1); - mctx->genSlider("ヒープ破壊チェックフレーム", &fillcheck_check_frame, 0, 0xFF); - mctx->genButton("ヒープ破壊チェック", 3); - mctx->genButton("ヒープFree領域フィル", 4); - mctx->genButton("浮動小数点例外を(再び)有効にする", 5); - mctx->genCheckBox("◎無効演算", &mDoMch::FpscrEnableBits, 0x80); - mctx->genCheckBox("○オーバー", &mDoMch::FpscrEnableBits, 0x40); - mctx->genCheckBox("△アンダー", &mDoMch::FpscrEnableBits, 0x20); - mctx->genCheckBox("○ゼロ除算", &mDoMch::FpscrEnableBits, 0x10); - mctx->genCheckBox("▲不正確 ", &mDoMch::FpscrEnableBits, 0x8); - - mctx->genLabel("ソースファイル:m_Do_main.cpp", 0); - mctx->genCheckBox("OSReport 表示しない", &mReportDisable, 0x1); - mctx->genCheckBox("OSReport 優先度最高", &print_highPriority, 0x1); - mctx->genCheckBox("OSReport スレッド表示", &print_threadID, 0x1); - mctx->genCheckBox("OSReport CallerPC表示", &print_callerPC, 0x1); - mctx->genSlider("レベル", &print_callerPCLevel, 3, 10); - - mctx->startComboBox("簡易ヒープ表示", &mHeapBriefType); - mctx->genComboBoxItem("なし", 0); - mctx->genComboBoxItem("合計空き・最大空き", 1); - mctx->genComboBoxItem("最大使用量・ヒープサイズ元使用量", 2); - mctx->genComboBoxItem("使用ブロック数・元使用量", 3); - mctx->genComboBoxItem("相対 使用ブロック数・元使用量", 4); - mctx->endComboBox(); - - my_genCheckBox(mctx, "ヒープサイズ表示を行う", &mDisplayHeapSize, 1); - mctx->genCheckBox("ヒープバーを表示する", &mVisibleHeapBar, 0x1); - - mctx->startComboBox("ヒープバーの種類", &mSelectHeapBar); - mctx->genComboBoxItem("カレント", 0); - for (int i = 0; i < 8; i++) { - mctx->genComboBoxItem(HeapCheckTable[i]->getJName(), i + 1); - } - mctx->endComboBox(); - - mctx->genCheckBox("ヒープチェック", &mCheckHeap, 0x1); - mctx->genCheckBox("フレームバー表示", &mPrintFrameLine, 0x1); - - mctx->startComboBox("GX警告レベル", &mDoMch::GXWarningLevel); - mctx->genComboBoxItem("エラー&警告なし", 0); - mctx->genComboBoxItem("致命的なエラー", 1); - mctx->genComboBoxItem("中警告と全エラー", 2); - mctx->genComboBoxItem("すべての警告", 3); - mctx->endComboBox(); - - mctx->genButton("GX警告を1フレームだけ実行", 9); - mctx->genButton("ダイナミックリンク状況をダンプ", 7); - mctx->genButton("ダイナミックリンクカウンタをリセット", 8); - mctx->genButton("ARAMヒープをダンプ", 10); - mctx->genButton("ゲームリソースをダンプ", 11); - mctx->genButton("RES_CONTROLをダンプ", 12); - mctx->genButton("ルートヒープをダンプ", 13); - mctx->genButton("システムヒープをダンプ", 14); - mctx->genButton("ゼルダヒープをダンプ", 15); - mctx->genButton("ゲームヒープをダンプ", 16); - mctx->genButton("アーカイブヒープをダンプ", 17); - mctx->genButton("J2Dヒープをダンプ", 18); - mctx->genButton("ホストIOヒープをダンプ", 19); - mctx->genButton("コマンドヒープをダンプ", 20); - - mctx->genCheckBox("ダイナミックリンク冗長表示", &DynamicModuleControlBase::verbose, 0x1); - mctx->genCheckBox("ヒープコールバック冗長表示", &mDoMch::myHeapVerbose, 0x1); - mctx->genCheckBox("ヒープコールバックチェック", &mDoMch::myHeapCallbackCheck, 0x1); - mctx->genCheckBox("mDoDvdThd::verbose冗長表示", &mDoDvdThd::verbose, 0x1); - mctx->genCheckBox("mDoDvdThd::DVDRead冗長表示", &mDoDvdThd::Report_DVDRead, 0x1); - mctx->genCheckBox("mDoDvdThd::DVDログモード", &mDoDvdThd::DVDLogoMode, 0x1); - mctx->genCheckBox("fopMsg::MemCheck ヒープチェック", &fopMsg::MemCheck, 0x1); -} - -void mDoMain_HIO_c::listenPropertyEvent(const JORPropertyEvent* property) { - JORMContext* mctx = attachJORMContext(8); - JORReflexible::listenPropertyEvent(property); - - if ((u32)property->id >= 13 && (u32)property->id <= 20) { - int sp14 = (u32)property->id - 13; - HeapCheck* heapCheck = HeapCheckTable[sp14]; - JUTReportConsole_f("\n[%sHeap]\n", heapCheck->getName()); - heapCheck->getHeap()->dump_sort(); } else { - switch ((u32)property->id) { - case 0: - FixedMemoryCheck::checkAll(); - break; - case 1: - FixedMemoryCheck::saveAll(); - break; - case 2: - FixedMemoryCheck::diffAll(); - break; - case 3: - mDoMch_HeapCheckAll(); - break; - case 4: - mDoMch_HeapFreeFillAll(); - break; - case 5: { - u32 fpscr = PPCMffpscr(); - JUTException::setFPException(0); - JUTException::setFPException(mDoMch::FpscrEnableBits); - PPCMtfpscr(fpscr); - break; - } - case 9: - GXSetVerifyLevel(GX_WARN_ALL); - mDoMch::GXWarningExecuteFrame = TRUE; - break; - case 7: { - int RoomId = dComIfGp_roomControl_getStayNo(); - JUTReportConsole_f("\nRoomId = %d\n", RoomId); - - JUTReportConsole_f("\nDynamicModule\n"); - DynamicModuleControlBase::dump(); - break; - } - case 8: - DynamicModuleControlBase::resetDoLinkCount(); - break; - case 10: { - JUTReportConsole_f("\nAramHeap\n"); - JKRAramHeap* aramHeap = JKRAram::getAramHeap(); - if (aramHeap != NULL) { - aramHeap->dump(); - } - break; - } - case 11: - JUTReportConsole_f("\nGameResource\n"); - g_dComIfG_gameInfo.mResControl.dump(); - break; - case 12: - JUTReportConsole_f("\nResControl\n"); - dComIfG_dumpResControl(); - break; - case 6: - default: - if ((u8*)property->id == &mDisplayHeapSize) { - mctx->startUpdateNode(this); - mctx->endUpdateNode(); - } - - if ((u8*)property->id == &mReportDisable) { - if (mReportDisable == 0) { - OSReportEnable(); - } else { - OSReportDisable(); - } - } - - if ((u8*)property->id == &mSelectHeapBar) { - JKRHeap* heap = NULL; - u32 select_heap = mSelectHeapBar - 1; - if (select_heap < 8) { - heap = HeapCheckTable[select_heap]->getHeap(); - } - - JUTProcBar::getManager()->setWatchHeap(heap); - } - - if ((u8*)property->id == &mVisibleHeapBar) { - JUTProcBar::getManager()->setVisibleHeapBar(mVisibleHeapBar); - } - - if ((u8*)property->id == &mDoMch::GXWarningLevel) { - GXSetVerifyLevel((GXWarningLevel)mDoMch::GXWarningLevel); - } - - if ((u8*)property->id == &mDoMch::mDebugFill) { - JKRHeap::setDefaultDebugFill(mDoMch::mDebugFill); - - for (JSUTree* i = JKRGetRootHeap()->getHeapTree().getFirstChild(); i != NULL; i = i->getNextChild()) { - JKRHeap* heap = i->getObject(); - heap->setDebugFill(mDoMch::mDebugFill); - } - } - - JKRSetDebugFillNotuse(mDoMch::mDebugFillNotUse); - JKRSetDebugFillNew(mDoMch::mDebugFillNew); - JKRSetDebugFillDelete(mDoMch::mDebugFillDelete); - } + strcpy(buffer, "PC PORT BUILD"); + OSReport("Warning: COPYDATE file not found at %s\n", COPYDATE_PATH); } - releaseJORMContext(mctx); + memcpy(mDoMain::COPYDATE_STRING, buffer, sizeof(mDoMain::COPYDATE_STRING) - 1); + mDoMain::COPYDATE_STRING[sizeof(mDoMain::COPYDATE_STRING) - 1] = '\0'; + + OS_REPORT("\x1b[36mCOPYDATE=[%s]\n\x1b[m", mDoMain::COPYDATE_STRING); + return 1; } -#endif -bool Debug_console(u32 i_padNo) { +// ========================================================================= +// MAIN01 - THE GAME LOOP +// ========================================================================= +void main01(void) { + OS_REPORT("\x1b[m"); + + // 1. Setup heaps, RNG, Threads + // Nutzt den Speicher, den wir in game_main() per OSSetArena gesetzt haben + mDoMch_Create(); + + // 2. Setup GFX (FrameBuffer, ZBuffer) + mDoGph_Create(); + + // 3. Setup Pads + //mDoCPd_c::create(); + + // 4. Console Setup JUTConsole* console = JFWSystem::getSystemConsole(); - if (console != NULL) { - static f32 console_position_x = 20.0f; - static f32 console_position_y = 30.0f; - static f32 console_scroll = 0.0f; - - if (mDoCPd_c::getTrig(i_padNo) & PAD_TRIGGER_Z && !(mDoCPd_c::getHold(i_padNo) & ~PAD_TRIGGER_Z)) { - console->setVisible(console->isVisible() == false); - JUTAssertion::setMessageCount(0); - } - - if (console->isVisible()) { - if ((mDoCPd_c::getHold(i_padNo) & PAD_TRIGGER_L && mDoCPd_c::getHold(i_padNo) & PAD_TRIGGER_R) || - ((mDoCPd_c::getAnalogL(i_padNo) > 0.0f && mDoCPd_c::getAnalogR(i_padNo) > 0.0f))) - { - f32 stick_x = mDoCPd_c::getStickX(i_padNo); - f32 stick_y = mDoCPd_c::getStickY(i_padNo); - - if (mDoCPd_c::getHold(i_padNo) & (PAD_BUTTON_Y | PAD_BUTTON_X) && - mDoCPd_c::getTrig(i_padNo) & PAD_BUTTON_START) - { - console->clear(); - } - - if (!(mDoCPd_c::getHold(i_padNo) & (PAD_BUTTON_Y | PAD_BUTTON_X))) { - console_scroll -= stick_y; - - int scrollAmount; - if (console_scroll > 1.0f) { - scrollAmount = console_scroll; - } else if (console_scroll < -1.0f) { - scrollAmount = -(int)-console_scroll; - } else { - scrollAmount = 0; - } - - if (scrollAmount != 0) { - console_scroll -= scrollAmount; - console->scroll(scrollAmount); - } - } else { - if (mDoCPd_c::getHold(i_padNo) & PAD_BUTTON_X) { - console_position_x += stick_x; - } - - if (mDoCPd_c::getHold(i_padNo) & PAD_BUTTON_Y) { - console_position_y -= stick_y; - } - } - - if (mDoCPd_c::getTrig(i_padNo) & PAD_BUTTON_A) { - console->dumpToTerminal(0xFFFFFFFF); - console->setOutput(JUTConsole::OUTPUT_OSREPORT | JUTConsole::OUTPUT_CONSOLE); - } - - JUTReport(30, 390, 1, "Press X+Y+START to CLEAR console."); - JUTReport(30, 400, 1, "3DStick UP/Down to scroll"); - JUTReport(30, 410, 1, "Press A to output terminal from console."); - JUTReport(30, 420, 1, "SCROLL:%3d %3d %3d Output=%1x", console->getLineOffset(), - console->getPositionX(), console->getPositionY(), console->getOutput()); - } else { - if (mDoCPd_c::getTrig(i_padNo) & PAD_BUTTON_DOWN) { - g_HIO.mDisplayMeter ^= (u8)1; - } - - if (mDoCPd_c::getTrig(i_padNo) & PAD_BUTTON_LEFT) { - JKRAramHeap* aram = JKRAram::getAramHeap(); - if (aram != NULL) { - aram->dump(); - } - - DynamicModuleControlBase::dump(); - g_dComIfG_gameInfo.mResControl.dump(); - } - - if (mDoCPd_c::getTrig(i_padNo) & PAD_BUTTON_RIGHT) { - JKRGetSystemHeap()->dump_sort(); - } - - if (mDoCPd_c::getTrig(i_padNo) & PAD_BUTTON_UP) { - zeldaHeap->dump_sort(); - gameHeap->dump_sort(); - archiveHeap->dump_sort(); - } - - JUTReport(30, 440, 1, "Press L+R trigger to control console."); - JUTReport(30, 450, 1, "Press [Z] trigger to close this window."); - } - - console->setPosition(console_position_x, console_position_y); - return 1; - } + if (console) { + console->setOutput(mDoMain::developmentMode ? JUTConsole::OUTPUT_OSR_AND_CONSOLE : + JUTConsole::OUTPUT_NONE); + console->setPosition(32, 42); } + // 5. Init Framework & Loader + mDoDvdThd_callback_c::create((mDoDvdThd_callback_func)LOAD_COPYDATE, NULL); + + OSReport("Calling fapGm_Create()...\n"); + fapGm_Create(); + + OSReport("Calling fopAcM_initManager()...\n"); + fopAcM_initManager(); + + OSReport("Calling cDyl_InitAsync()...\n"); + cDyl_InitAsync(); + + // ----------------------------------------------------------- + // THE GAME LOOP + // ----------------------------------------------------------- + OSReport("Entering Main Loop (main01)...\n"); + do { + // --- Window Events & Frame Start --- + const AuroraEvent* event = aurora_update(); + if (event && event->type == AURORA_EXIT) + break; + + if (!aurora_begin_frame()) { + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + continue; + } + + static u32 frame; + frame++; + + mDoCPd_c::read(); // Read Controller + + // --- EXECUTE GAME LOGIC & RENDER --- + fapGm_Execute(); + + // --- Frame End & Limiter --- + aurora_end_frame(); + std::this_thread::sleep_for(std::chrono::milliseconds(16)); // ~60 FPS Cap + + } while (true); +} + +// ========================================================================= +// PC ENTRY POINT +// ========================================================================= +int game_main(int argc, char* argv[]) { + // 1. Aurora Init + AuroraConfig config{}; + config.appName = "Zelda: Twilight Princess"; + config.desiredBackend = BACKEND_VULKAN; + config.windowPosX = 100; + config.windowPosY = 100; + config.windowWidth = 640; + config.windowHeight = 480; + config.configPath = "."; + config.logCallback = &aurora_log_callback; + + aurora_initialize(argc, argv, &config); + + // 2. Setup Virtual Game RAM + // Simuliert den GameCube RAM (24MB + Audio etc, nehmen wir 256MB) +#define GAME_RAM_SIZE (256 * 1024 * 1024) + void* virtualGameRam = malloc(GAME_RAM_SIZE); + if (!virtualGameRam) { + printf("Fatal: Failed to allocate game RAM\n"); + return -1; + } + memset(virtualGameRam, 0, GAME_RAM_SIZE); + OSSetArenaLo(virtualGameRam); + OSSetArenaHi((char*)virtualGameRam + GAME_RAM_SIZE); + + // 3. Init DVD Emulation + DvdEmu::setBasePath("data"); + + mDoMain::sPowerOnTime = OSGetTime(); + + // Reset Data + static mDoRstData sResetData = {0}; + mDoRst::setResetData(&sResetData); + mDoRst::offReset(); + mDoRst::setLogoScnFlag(0); + + // Global Context Init + dComIfG_ct(); + + // Development Mode + mDoMain::developmentMode = 1; // Force Dev Mode for Debugging + + // START GAME + OSReport("Starting main01 (Game Loop)...\n"); + + // Auf PC rufen wir main01 direkt im Main Thread auf. + // Kein OSCreateThread noetig (und auch gefaehrlich wegen Window-Loop). + main01(); + + // Cleanup (Erreicht nur bei Break der Loop) + aurora_shutdown(); + free(virtualGameRam); + return 0; } -#if PLATFORM_GCN -#define COPYDATE_PATH "/str/Final/Release/COPYDATE" -#else -#define COPYDATE_PATH "/str/RVL/Debug/COPYDATE" -#endif - -s32 LOAD_COPYDATE(void*) { - DVDFileInfo ATTRIBUTE_ALIGN(32) fileInfo; - u8 buffer[32]; - - BOOL status = DVDOpen(COPYDATE_PATH, &fileInfo); - if (status) { - s32 rt = DVDReadPrio(&fileInfo, &buffer, sizeof(buffer), 0, 2); - memcpy(mDoMain::COPYDATE_STRING, buffer, sizeof(mDoMain::COPYDATE_STRING) - 1); - status = DVDClose(&fileInfo); - } - - OS_REPORT("\x1b[36mCOPYDATE=[%s]\n\x1b[m", mDoMain::COPYDATE_STRING); - return status; +// ========================================================================= +// STUBS & TEMPLATE INSTANTIATIONS +// ========================================================================= +bool JKRHeap::dump_sort() { + return true; } -static void debug() { - #if DEBUG - if (mPrintFrameLine) { - printFrameLine(); - } - #endif - - if (mDoMain::developmentMode) { - if (mCheckHeap) { - CheckHeap(PAD_3); - } - - if ((mDoCPd_c::getGamePad(PAD_3)->getButton() & ~PAD_TRIGGER_Z) == PAD_TRIGGER_R && - mDoCPd_c::getGamePad(PAD_3)->testTrigger(PAD_TRIGGER_Z)) - { - mDisplayHeapSize ^= (u8)1; - } - - if (mDisplayHeapSize) { - if ((mDoCPd_c::getGamePad(PAD_3)->getButton() & ~PAD_TRIGGER_Z) == PAD_TRIGGER_L && - mDoCPd_c::getGamePad(PAD_3)->testTrigger(PAD_TRIGGER_Z)) - { - if (mHeapBriefType < 5) { - mHeapBriefType++; - } else { - mHeapBriefType = 1; - } - } - - debugDisplay(); - } - - #if DEBUG - if (!dDebugPad.Active()) { - Debug_console(PAD_3); - } - #else - Debug_console(PAD_3); - #endif - - #if DEBUG - fapGm_HIO_c::startCpuTimer(); - - if (fapGmHIO_getHostIO()) { - JKRHeap* var_r30 = mDoExt_getHostIOHeap(); - JKRHeap* var_r29 = mDoExt_setCurrentHeap(var_r30); - JOR_MESSAGELOOP(); - mDoExt_setCurrentHeap(var_r29); - } - - fapGm_HIO_c::printCpuTimer(""); - fapGm_HIO_c::stopCpuTimer("ホストIO"); - fapGm_HIO_c::printCpuTimer("\n↑↑↑↑↑↑↑↑↑↑ CPU時間計測終了 ↑↑↑↑↑↑↑↑↑↑\n"); - fapGm_HIO_c::offCpuTimer(); - #endif - } -} - -// 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"); - - // Setup heaps, setup exception manager, set RNG seed, setup DVDError Thread, setup Memory card Thread - mDoMch_Create(); - - #if DEBUG - 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 - mDoGph_Create(); - - // Setup control pad - mDoCPd_c::create(); - - RootHeapCheck.setHeap((JKRExpHeap*)JKRGetRootHeap()); - SystemHeapCheck.setHeap((JKRExpHeap*)JKRGetSystemHeap()); - ZeldaHeapCheck.setHeap(mDoExt_getZeldaHeap()); - GameHeapCheck.setHeap(mDoExt_getGameHeap()); - ArchiveHeapCheck.setHeap(mDoExt_getArchiveHeap()); - J2dHeapCheck.setHeap(mDoExt_getJ2dHeap()); - HostioHeapCheck.setHeap(mDoExt_getHostIOHeap()); - CommandHeapCheck.setHeap(mDoExt_getCommandHeap()); - - #if DEBUG - JKRHeap* var_r28 = mDoExt_getHostIOHeap(); - JKRHeap* sp10 = mDoExt_setCurrentHeap(var_r28); - JOR_INIT(); - JOR_SETROOTNODE("root", &mDoHIO_root, 4, 3); - mDoExt_setCurrentHeap(sp10); - - var_r28->dump_sort(); - s32 local_34 = var_r28->getTotalFreeSize(); - OSReport("\x1b[36mHOSTIOヒープ残り %u Bytes\n\x1b[m", local_34); - #endif - - JUTConsole* console = JFWSystem::getSystemConsole(); - console->setOutput(mDoMain::developmentMode ? JUTConsole::OUTPUT_OSR_AND_CONSOLE : - JUTConsole::OUTPUT_NONE); - console->setPosition(32, 42); - - mDoDvdThd_callback_c::create((mDoDvdThd_callback_func)LOAD_COPYDATE, NULL); - fapGm_Create(); // init framework - - #if DEBUG - mDoMain_HIO.entryHIO("メイン"); - g_regHIO.id = mDoHIO_createChild("レジスタ", &g_regHIO); - g_presetHIO.field_0x4 = mDoHIO_createChild("状況ファイル", &g_presetHIO); - #endif - - fopAcM_initManager(); - mDisplayHeapSize = 0; - cDyl_InitAsync(); // init RELs - - g_mDoAud_audioHeap = JKRCreateSolidHeap(audioHeapSize, JKRGetCurrentHeap(), false); - - do { - static u32 frame; - frame++; - - #if DEBUG - if (memorycheck_check_frame != 0 && frame % memorycheck_check_frame == 0) { - FixedMemoryCheck::checkAll(); - } - #endif - - if (fillcheck_check_frame != 0 && frame % fillcheck_check_frame == 0) { - mDoMch_HeapCheckAll(); - } - - if (mDoDvdThd::SyncWidthSound) { - mDoMemCd_UpDate(); - } - - mDoCPd_c::read(); // read controller input - - #if DEBUG - if (mDoMch::GXWarningExecuteFrame) { - GXSetVerifyLevel(GX_WARN_ALL); - } - #endif - - fapGm_Execute(); // handle game execution - - #if DEBUG - if (mDoMch::GXWarningExecuteFrame) { - mDoMch::GXWarningExecuteFrame = 0; - GXSetVerifyLevel((GXWarningLevel)mDoMch::GXWarningLevel); - } - #endif - - #if DEBUG - fapGm_HIO_c::startCpuTimer(); - #endif - - mDoAud_Execute(); // handle audio execution - - #if DEBUG - fapGm_HIO_c::printCpuTimer(""); - fapGm_HIO_c::stopCpuTimer("オーディオ"); - #endif - - debug(); // run debugger - } while (true); -} - -#if !__MWERKS__ template JHIComPortManager* JHIComPortManager::instance = nullptr; template<> JHIComPortManager* JHIComPortManager::instance = nullptr; -#endif - -#if DEBUG -JHIComPortManager* JHIComPortManager:: instance; -// DEBUG NONMATCHING -void parse_args(int argc, const char* argv[]) { - int i; - - OS_REPORT("argc = %d\n", argc); - for (i = 0; i < argc; i++) { - OS_REPORT("argv[%d] = %s\n", i, argv[i]); - } - - for (i = 1; i < argc; i++) { - if (strcmp(argv[i], "--noopening") == 0) { - dScnLogo_c::onOpeningCut(); - } else if (strcmp(argv[i], "--nobank") == 0) { - dStage_roomControl_c::onNoArcBank(); - OS_REPORT("\x1b[33mアーカイブバンクを無効にしました\n\x1b[m"); - } else if (strcmp(argv[i], "--particle254") == 0) { - fapGm_HIO_c::mParticle254Fix = 1; - OSReport_Warning("パーティクル254固定にしました\n"); - } else if (strncmp(argv[i], "--menu=", sizeof("--menu=") - 1) == 0) { - char* var_r27 = strchr(argv[i] + 7, ','); - if (var_r27 != NULL) { - *var_r27 = 0; - var_r27++; - - char* var_r26 = std::strchr(var_r27, ','); - if (var_r26 != NULL) { - *var_r26 = 0; - var_r26++; - - char* spC = std::strchr(var_r26, ','); - if (spC != NULL) { - *spC = 0; - spC++; - sscanf(spC, "%d", &dScnMenu_c::cursolPoint); - dScnMenu_c::m_error_flags |= (u8)8; - } - - sscanf(var_r26, "%d", &dScnMenu_c::cursolLayer); - dScnMenu_c::m_error_flags |= (u8)4; - } - - sscanf(var_r27, "%d", &dScnMenu_c::cursolRoomNo); - dScnMenu_c::m_error_flags |= (u8)2; - } - - strcpy(dScnMenu_c::cursolStageName, argv[i] + 7); - dScnMenu_c::m_error_flags |= (u8)1; - - OS_REPORT("\n\n\ndScnMenu_c::cursolLayer=[%x]", dScnMenu_c::cursolLayer); - OS_REPORT("\ndScnMenu_c::cursolRoomNo=[%x]", dScnMenu_c::cursolRoomNo); - OS_REPORT("\ndScnMenu_c::cursolStageName=[%s]\n\n", dScnMenu_c::cursolStageName); - } else if (strncmp(argv[i], "--situation=", sizeof("--situation=") - 1) == 0) { - for (int j = 0; j < 100; j++) { - if (argv[i][12 + j] <= ' ') { - break; - } - - g_presetHIO.filename_buf[j] = argv[i][12 + j]; - } - - OS_REPORT("\n11 g_presetHIO.filename_buf[0]=[%-100.100s]", g_presetHIO.filename_buf); - } else if (strcmp(argv[i], "--noprint") == 0) { - OSReportDisable(); - } else if (strcmp(argv[i], "--develop") == 0) { - mDoMain::developmentMode = 1; - } else if (strcmp(argv[i], "--nodevelop") == 0) { - mDoMain::developmentMode = 0; - } else if (strncmp(argv[i], "--e3argument=", sizeof("--e3argument=") - 1) == 0) { - sscanf(argv[i] + sizeof("--e3argument=") - 1, "%d", &mDoMain::argument); - } else if (strncmp(argv[i], "--gameheapsize=0x", sizeof("--gameheapsize=0x") - 1) == 0) { - sscanf(argv[i] + sizeof("--gameheapsize=0x") - 1, "%x", &mDoMain::gameHeapSize); - } else if (strncmp(argv[i], "--archiveheapsize=0x", sizeof("--archiveheapsize=0x") - 1) == 0) { - sscanf(argv[i] + sizeof("--archiveheapsize=0x") - 1, "%x", &mDoMain::archiveHeapSize); - } else if (strncmp(argv[i], "--memmargin=0x", sizeof("--memmargin=0x") - 1) == 0) { - sscanf(argv[i] + sizeof("--memmargin=0x") - 1, "%x", &mDoMain::memMargin); - } else if (strncmp(argv[i], "--e3menu=0x", sizeof("--e3menu=0x") - 1) == 0) { - sscanf(argv[i] + sizeof("--e3menu=0x") - 1, "%x", &mDoMain::e3menu_no); - } else { - OSReport_Error("unknown argument %d, %s\n", i, argv[i]); - } - } -} -#endif - -static u8 mainThreadStack[32768]; - -OSThread mainThread; - -extern "C" void game_main(int argc, const char* argv[]) { - OSThread* current_thread = OSGetCurrentThread(); - u8* stack = mainThreadStack; - mDoMain::sPowerOnTime = OSGetTime(); - OSReportInit(); - version_check(); - - #if PLATFORM_WII || PLATFORM_SHIELD - mDoRst::setResetData((mDoRstData*)OSAllocFromMEM1ArenaLo(0x18, 4)); - #else - mDoRst::setResetData((mDoRstData*)OSAllocFromArenaLo(0x18, 4)); - #endif - - if (!mDoRst::getResetData()) { - do { - } while (true); - } - - if (!((OSGetResetCode() & 0x80000000) ? 1 : 0)) { - mDoRst::offReset(); - mDoRst::offResetPrepare(); - mDoRst::off3ButtonReset(); - mDoRst::set3ButtonResetPort(-1); - mDoRst::setLogoScnFlag(0); - mDoRst::setProgSeqFlag(0); - mDoRst::setProgChgFlag(0); - mDoRst::setWarningDispFlag(0); - mDoRst::offShutdown(); - mDoRst::offReturnToMenu(); - } - - #if PLATFORM_WII || PLATFORM_SHIELD - SCInit(); - #endif - - dComIfG_ct(); - - #if PLATFORM_WII || PLATFORM_SHIELD - u32 status; - do { - status = SCCheckStatus(); - } while (status != 0); - JUT_ASSERT(1785, status != 2); - #endif - - #if DEBUG - parse_args(argc, argv); - #endif - - if (mDoMain::developmentMode < 0) { - DVDDiskID* disk_id = DVDGetCurrentDiskID(); - - if (disk_id->gameVersion > 0x90) { - mDoMain::developmentMode = 1; - } else if (disk_id->gameVersion > 0x80) { - mDoMain::developmentMode = (OSGetConsoleType() & OS_CONSOLE_DEVELOPMENT) != 0; - } else { - mDoMain::developmentMode = 0; - } - } - - OS_REPORT("メインスレッドを作成します\n"); - OSCreateThread(&mainThread, (void*(*)(void*))main01, 0, stack + sizeof(mainThreadStack), sizeof(mainThreadStack), OSGetThreadPriority(current_thread), 0); - OSResumeThread(&mainThread); - OS_REPORT("メインスレッドを起動しました <%x>\n", &mainThread); - OSSetThreadPriority(current_thread, 0x1F); - OSSuspendThread(current_thread); -} - -bool JKRHeap::dump_sort() { - return true; -} template<> Z2WolfHowlMgr* JASGlobalInstance::sInstance; From a4d72437ef877fa6e27c04d66877e0b97ac33e04 Mon Sep 17 00:00:00 2001 From: Lurs <2795933+Lurs@users.noreply.github.com> Date: Thu, 19 Feb 2026 10:35:42 +0100 Subject: [PATCH 09/46] OS threading, DVD I/O, Endianness fixes, ARAM emulation, GX vertex fix Major changes: - Implement Big-Endian to Little-Endian byte-swapping for all RARC archive types (JKRCompArchive, JKRMemArchive, JKRDvdArchive, JKRAramArchive) - Implement DVD file I/O via DvdEmu (DVDOpen, DVDFastOpen, DVDReadPrio, DVDReadAsyncPrio, DVDConvertPathToEntrynum) - Fix YAZ0 decompression endianness in JKRDvdRipper, JKRDecomp, JKRAram, and JKRDvdAramRipper (use JKRDecompExpandSize instead of direct header read) - Emulate ARAM with 16MB malloc buffer and synchronous memcpy in ARQPostRequest instead of hardware DMA transfers that hang on PC - Add real OS threading implementation (OSContext, OSThread, OSMutex) using native Windows threads with side-table pattern for GC struct compatibility - Fix font endianness for JUTResFont and JUTCacheFont - Redirect GXVert.h to Aurora's PC implementation to prevent FIFO writes to the GameCube hardware address 0xCC008000 - Add Z-buffer texture format support (GX_TF_Z24X8, GX_TF_Z16, GX_TF_Z8) in Aurora's texture converter --- CMakeLists.txt | 3 + include/JSystem/JKernel/JKRArchive.h | 73 ++- include/dolphin/gx/GXVert.h | 4 + src/JSystem/JKernel/JKRAram.cpp | 3 +- src/JSystem/JKernel/JKRAramArchive.cpp | 2 + src/JSystem/JKernel/JKRCompArchive.cpp | 3 + src/JSystem/JKernel/JKRDecomp.cpp | 2 +- src/JSystem/JKernel/JKRDvdAramRipper.cpp | 3 +- src/JSystem/JKernel/JKRDvdArchive.cpp | 2 + src/JSystem/JKernel/JKRDvdRipper.cpp | 3 +- src/JSystem/JKernel/JKRMemArchive.cpp | 4 + src/JSystem/JUtility/JUTCacheFont.cpp | 74 +-- src/JSystem/JUtility/JUTResFont.cpp | 114 ++-- src/dolphin/os/OSContext.cpp | 92 ++++ src/dolphin/os/OSMutex.cpp | 243 +++++++++ src/dolphin/os/OSThread.cpp | 650 +++++++++++++++++++++++ src/dusk/stubs.cpp | 633 +++++++++++----------- 17 files changed, 1509 insertions(+), 399 deletions(-) create mode 100644 src/dolphin/os/OSContext.cpp create mode 100644 src/dolphin/os/OSMutex.cpp create mode 100644 src/dolphin/os/OSThread.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index bdfd4978ab..058256da6c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1358,6 +1358,9 @@ set(DUSK_FILES #src/dusk/m_Do_ext_dusk.cpp src/dusk/jsystem_stubs.cpp src/dusk/dvd_emu.cpp + src/dolphin/os/OSContext.cpp + src/dolphin/os/OSThread.cpp + src/dolphin/os/OSMutex.cpp ) source_group("dolzel" FILES ${DOLZEL_FILES} ${Z2AUDIOLIB_FILES} ${SSYSTEM_FILES} ${JSYSTEM_FILES} ${REL_FILES}) diff --git a/include/JSystem/JKernel/JKRArchive.h b/include/JSystem/JKernel/JKRArchive.h index cf4b3ef045..7d49a595b8 100644 --- a/include/JSystem/JKernel/JKRArchive.h +++ b/include/JSystem/JKernel/JKRArchive.h @@ -1,4 +1,4 @@ -#ifndef JKRARCHIVE_H +#ifndef JKRARCHIVE_H -j n #define JKRARCHIVE_H #include "JSystem/JKernel/JKRCompression.h" @@ -7,7 +7,7 @@ class JKRHeap; -/** +/** m * @ingroup jsystem-jkernel * */ @@ -220,6 +220,75 @@ protected: static u32 sCurrentDirID; }; +#ifdef TARGET_PC +#include "dusk/endian.h" + +// Byte-swap archive header from Big-Endian to host after loading from disk +inline void JKRSwapArcHeader(SArcHeader* h) { + h->signature = be32(h->signature); + h->file_length = be32(h->file_length); + h->header_length = be32(h->header_length); + h->file_data_offset = be32(h->file_data_offset); + h->file_data_length = be32(h->file_data_length); + h->field_0x14 = be32(h->field_0x14); + h->field_0x18 = be32(h->field_0x18); + h->field_0x1c = be32(h->field_0x1c); +} + +// Byte-swap archive data info block from Big-Endian to host +inline void JKRSwapArcDataInfo(SArcDataInfo* info) { + info->num_nodes = be32(info->num_nodes); + info->node_offset = be32(info->node_offset); + info->num_file_entries = be32(info->num_file_entries); + info->file_entry_offset = be32(info->file_entry_offset); + info->string_table_length = be32(info->string_table_length); + info->string_table_offset = be32(info->string_table_offset); + info->next_free_file_id = be16(info->next_free_file_id); +} + +// Byte-swap all directory entries +inline void JKRSwapDirEntries(JKRArchive::SDIDirEntry* nodes, u32 count) { + for (u32 i = 0; i < count; i++) { + nodes[i].type = be32(nodes[i].type); + nodes[i].name_offset = be32(nodes[i].name_offset); + nodes[i].field_0x8 = be16(nodes[i].field_0x8); + nodes[i].num_entries = be16(nodes[i].num_entries); + nodes[i].first_file_index = be32(nodes[i].first_file_index); + } +} + +// Byte-swap all file entries +inline void JKRSwapFileEntries(JKRArchive::SDIFileEntry* files, u32 count) { + for (u32 i = 0; i < count; i++) { + files[i].file_id = be16(files[i].file_id); + files[i].name_hash = be16(files[i].name_hash); + files[i].type_flags_and_name_offset = be32(files[i].type_flags_and_name_offset); + files[i].data_offset = be32(files[i].data_offset); + files[i].data_size = be32(files[i].data_size); + // data pointer is runtime-only, no swap needed + } +} + +// Swap all archive structures after loading from disk +inline void JKRSwapArchiveMemory(SArcDataInfo* arcInfo) { + // First swap the info block itself to read offsets + JKRSwapArcDataInfo(arcInfo); + + // Then swap directory and file entries using the now-native offsets + JKRArchive::SDIDirEntry* nodes = (JKRArchive::SDIDirEntry*)((u8*)arcInfo + arcInfo->node_offset); + JKRArchive::SDIFileEntry* files = (JKRArchive::SDIFileEntry*)((u8*)arcInfo + arcInfo->file_entry_offset); + + JKRSwapDirEntries(nodes, arcInfo->num_nodes); + JKRSwapFileEntries(files, arcInfo->num_file_entries); +} +#else +inline void JKRSwapArcHeader(SArcHeader*) {} +inline void JKRSwapArcDataInfo(SArcDataInfo*) {} +inline void JKRSwapDirEntries(JKRArchive::SDIDirEntry*, u32) {} +inline void JKRSwapFileEntries(JKRArchive::SDIFileEntry*, u32) {} +inline void JKRSwapArchiveMemory(SArcDataInfo*) {} +#endif + inline JKRCompression JKRConvertAttrToCompressionType(int attr) { return JKRArchive::convertAttrToCompressionType(attr); } diff --git a/include/dolphin/gx/GXVert.h b/include/dolphin/gx/GXVert.h index c508e164bb..374b87af6f 100644 --- a/include/dolphin/gx/GXVert.h +++ b/include/dolphin/gx/GXVert.h @@ -3,6 +3,10 @@ #ifdef __REVOLUTION_SDK__ #include +#elif defined(TARGET_PC) +// On PC, use Aurora's GXVert declarations (extern functions implemented in +// GXVert.cpp, no hardware FIFO writes to 0xCC008000) +#include "../../../extern/aurora/include/dolphin/gx/GXVert.h" #else #include #include diff --git a/src/JSystem/JKernel/JKRAram.cpp b/src/JSystem/JKernel/JKRAram.cpp index ffea3d9af7..a69ac99fba 100644 --- a/src/JSystem/JKernel/JKRAram.cpp +++ b/src/JSystem/JKernel/JKRAram.cpp @@ -351,7 +351,8 @@ int decompSZS_subroutine(u8* src, u8* dest) { } SYaz0Header* header = (SYaz0Header*)src; - endPtr = dest + (header->length - fileOffset); + u32 decompressedLength = JKRDecompExpandSize(src); + endPtr = dest + (decompressedLength - fileOffset); if (endPtr > dest + maxDest) { endPtr = dest + maxDest; } diff --git a/src/JSystem/JKernel/JKRAramArchive.cpp b/src/JSystem/JKernel/JKRAramArchive.cpp index 811978caa0..fd5ddbbf48 100644 --- a/src/JSystem/JKernel/JKRAramArchive.cpp +++ b/src/JSystem/JKernel/JKRAramArchive.cpp @@ -121,6 +121,7 @@ bool JKRAramArchive::open(s32 entryNum) { JKRDvdToMainRam(entryNum, (u8*)mem, EXPAND_SWITCH_UNKNOWN1, 32, NULL, JKRDvdRipper::ALLOC_DIRECTION_FORWARD, 0, &mCompression, NULL); DCInvalidateRange(mem, 32); + JKRSwapArcHeader(mem); int alignment = mMountDirection == MOUNT_DIRECTION_HEAD ? 32 : -32; u32 alignedSize = ALIGN_NEXT(mem->file_data_offset, 32); mArcInfoBlock = (SArcDataInfo*)JKRAllocFromHeap(mHeap, alignedSize, alignment); @@ -130,6 +131,7 @@ bool JKRAramArchive::open(s32 entryNum) { JKRDvdToMainRam(entryNum, (u8*)mArcInfoBlock, EXPAND_SWITCH_UNKNOWN1, alignedSize, NULL, JKRDvdRipper::ALLOC_DIRECTION_FORWARD, 32, NULL, NULL); DCInvalidateRange(mArcInfoBlock, alignedSize); + JKRSwapArchiveMemory(mArcInfoBlock); mNodes = (SDIDirEntry*)((u8*)mArcInfoBlock + mArcInfoBlock->node_offset); mFiles = (SDIFileEntry*)((u8*)mArcInfoBlock + mArcInfoBlock->file_entry_offset); diff --git a/src/JSystem/JKernel/JKRCompArchive.cpp b/src/JSystem/JKernel/JKRCompArchive.cpp index 8a1577f592..7666cd8820 100644 --- a/src/JSystem/JKernel/JKRCompArchive.cpp +++ b/src/JSystem/JKernel/JKRCompArchive.cpp @@ -88,6 +88,7 @@ bool JKRCompArchive::open(s32 entryNum) { JKRDvdToMainRam(entryNum, (u8 *)arcHeader, EXPAND_SWITCH_UNKNOWN1, 32, NULL, JKRDvdRipper::ALLOC_DIRECTION_FORWARD, 0, &mCompression, NULL); DCInvalidateRange(arcHeader, 32); + JKRSwapArcHeader(arcHeader); mSizeOfMemPart = arcHeader->field_0x14; mSizeOfAramPart = arcHeader->field_0x18; @@ -108,6 +109,7 @@ bool JKRCompArchive::open(s32 entryNum) { JKRDvdToMainRam(entryNum, (u8 *)mArcInfoBlock, EXPAND_SWITCH_UNKNOWN1, (uintptr_t)arcHeader->file_data_offset + mSizeOfMemPart, NULL, JKRDvdRipper::ALLOC_DIRECTION_FORWARD, 0x20, NULL, NULL); DCInvalidateRange(mArcInfoBlock, (uintptr_t)arcHeader->file_data_offset + mSizeOfMemPart); + JKRSwapArchiveMemory(mArcInfoBlock); field_0x64 = (uintptr_t)mArcInfoBlock + arcHeader->file_data_offset; if (mSizeOfAramPart != 0) { @@ -156,6 +158,7 @@ bool JKRCompArchive::open(s32 entryNum) { else { // arcHeader + 1 should lead to 0x20, which is the data after the header JKRHeap::copyMemory((u8 *)mArcInfoBlock, arcHeader + 1, (arcHeader->file_data_offset + mSizeOfMemPart)); + JKRSwapArchiveMemory(mArcInfoBlock); field_0x64 = (uintptr_t)mArcInfoBlock + arcHeader->file_data_offset; if (mSizeOfAramPart != 0) { mAramPart = (JKRAramBlock*)JKRAllocFromAram(mSizeOfAramPart, JKRAramHeap::HEAD); diff --git a/src/JSystem/JKernel/JKRDecomp.cpp b/src/JSystem/JKernel/JKRDecomp.cpp index 87557d65bf..e14b285edd 100644 --- a/src/JSystem/JKernel/JKRDecomp.cpp +++ b/src/JSystem/JKernel/JKRDecomp.cpp @@ -206,7 +206,7 @@ void JKRDecomp::decodeSZS(u8* src_buffer, u8* dst_buffer, u32 srcSize, u32 dstSi s32 chunkBitsLeft = 0; s32 chunkBits; - decompEnd = dst_buffer + *(int*)(src_buffer + 4) - dstSize; + decompEnd = dst_buffer + JKRDecompExpandSize(src_buffer) - dstSize; if (srcSize == 0) { return; diff --git a/src/JSystem/JKernel/JKRDvdAramRipper.cpp b/src/JSystem/JKernel/JKRDvdAramRipper.cpp index 3ca276e050..3e07727a58 100644 --- a/src/JSystem/JKernel/JKRDvdAramRipper.cpp +++ b/src/JSystem/JKernel/JKRDvdAramRipper.cpp @@ -329,7 +329,8 @@ static int decompSZS_subroutine(u8* src, u32 dest) { } SYaz0Header* header = (SYaz0Header*)src; - endAddr = dest + (header->length - fileOffset); + u32 decompressedLength = JKRDecompExpandSize(src); + endAddr = dest + (decompressedLength - fileOffset); if (endAddr > dest + maxDest) { endAddr = dest + maxDest; } diff --git a/src/JSystem/JKernel/JKRDvdArchive.cpp b/src/JSystem/JKernel/JKRDvdArchive.cpp index ed88d791e7..0bf2b5017a 100644 --- a/src/JSystem/JKernel/JKRDvdArchive.cpp +++ b/src/JSystem/JKernel/JKRDvdArchive.cpp @@ -76,6 +76,7 @@ bool JKRDvdArchive::open(s32 entryNum) { JKRDvdToMainRam(entryNum, (u8*)arcHeader, EXPAND_SWITCH_UNKNOWN1, sizeof(SArcHeader), NULL, JKRDvdRipper::ALLOC_DIRECTION_FORWARD, 0, &mCompression, NULL); DCInvalidateRange(arcHeader, sizeof(SArcHeader)); + JKRSwapArcHeader(arcHeader); int alignment; alignment = mMountDirection == MOUNT_DIRECTION_HEAD ? 0x20 : -0x20; @@ -90,6 +91,7 @@ bool JKRDvdArchive::open(s32 entryNum) { arcHeader->file_data_offset, NULL, JKRDvdRipper::ALLOC_DIRECTION_FORWARD, sizeof(SArcHeader), NULL, NULL); DCInvalidateRange(mArcInfoBlock, arcHeader->file_data_offset); + JKRSwapArchiveMemory(mArcInfoBlock); mNodes = (SDIDirEntry*)((intptr_t)&mArcInfoBlock->num_nodes + mArcInfoBlock->node_offset); mFiles = (SDIFileEntry*)((intptr_t)&mArcInfoBlock->num_nodes + mArcInfoBlock->file_entry_offset); diff --git a/src/JSystem/JKernel/JKRDvdRipper.cpp b/src/JSystem/JKernel/JKRDvdRipper.cpp index cf84ef9eec..0017119c2b 100644 --- a/src/JSystem/JKernel/JKRDvdRipper.cpp +++ b/src/JSystem/JKernel/JKRDvdRipper.cpp @@ -329,7 +329,8 @@ int decompSZS_subroutine(u8* src, u8* dest) { } SYaz0Header* header = (SYaz0Header*)src; - endPtr = dest + (header->length - fileOffset); + u32 decompressedLength = JKRDecompExpandSize(src); + endPtr = dest + (decompressedLength - fileOffset); if (endPtr > dest + maxDest) { endPtr = dest + maxDest; } diff --git a/src/JSystem/JKernel/JKRMemArchive.cpp b/src/JSystem/JKernel/JKRMemArchive.cpp index 0c0ef4887c..1bc4b2877d 100644 --- a/src/JSystem/JKernel/JKRMemArchive.cpp +++ b/src/JSystem/JKernel/JKRMemArchive.cpp @@ -89,8 +89,10 @@ bool JKRMemArchive::open(s32 entryNum, JKRArchive::EMountDirection mountDirectio mMountMode = UNKNOWN_MOUNT_MODE; } else { + JKRSwapArcHeader(mArcHeader); JUT_ASSERT(438, mArcHeader->signature == 'RARC'); mArcInfoBlock = (SArcDataInfo *)((u8 *)mArcHeader + mArcHeader->header_length); + JKRSwapArchiveMemory(mArcInfoBlock); mNodes = (SDIDirEntry *)((u8 *)&mArcInfoBlock->num_nodes + mArcInfoBlock->node_offset); mFiles = (SDIFileEntry *)((u8 *)&mArcInfoBlock->num_nodes + mArcInfoBlock->file_entry_offset); mStringTable = (char *)((u8 *)&mArcInfoBlock->num_nodes + mArcInfoBlock->string_table_offset); @@ -111,8 +113,10 @@ bool JKRMemArchive::open(s32 entryNum, JKRArchive::EMountDirection mountDirectio bool JKRMemArchive::open(void* buffer, u32 bufferSize, JKRMemBreakFlag flag) { mArcHeader = (SArcHeader *)buffer; + JKRSwapArcHeader(mArcHeader); JUT_ASSERT(491, mArcHeader->signature == 'RARC'); mArcInfoBlock = (SArcDataInfo *)((u8 *)mArcHeader + mArcHeader->header_length); + JKRSwapArchiveMemory(mArcInfoBlock); mNodes = (SDIDirEntry *)((u8 *)&mArcInfoBlock->num_nodes + mArcInfoBlock->node_offset); mFiles = (SDIFileEntry *)((u8 *)&mArcInfoBlock->num_nodes + mArcInfoBlock->file_entry_offset); mStringTable = (char *)((u8 *)&mArcInfoBlock->num_nodes + mArcInfoBlock->string_table_offset); diff --git a/src/JSystem/JUtility/JUTCacheFont.cpp b/src/JSystem/JUtility/JUTCacheFont.cpp index a4f22ab3d6..a47dcb4eb0 100644 --- a/src/JSystem/JUtility/JUTCacheFont.cpp +++ b/src/JSystem/JUtility/JUTCacheFont.cpp @@ -8,6 +8,15 @@ #include #include +#ifdef TARGET_PC +#include "dusk/endian.h" +static inline u32 R32(u32 v) { return be32(v); } +static inline u16 R16(u16 v) { return be16(v); } +#else +static inline u32 R32(u32 v) { return v; } +static inline u16 R16(u16 v) { return v; } +#endif + JUTCacheFont::JUTCacheFont(ResFONT const* p_fontRes, u32 cacheSize, JKRHeap* p_heap) { initialize_state(); JUTResFont::initialize_state(); @@ -73,24 +82,26 @@ int JUTCacheFont::getMemorySize(ResFONT const* p_font, u16* o_widCount, u32* o_w u32 glyTexSize; u8* fontInf = (u8*)p_font->data; - for (int i = 0; i < p_font->numBlocks; i++) { - switch (((BlockHeader*)fontInf)->magic) { + for (int i = 0; i < (int)R32(p_font->numBlocks); i++) { + u32 blkMagic = R32(((BlockHeader*)fontInf)->magic); + u32 blkSize = R32(((BlockHeader*)fontInf)->size); + switch (blkMagic) { case 'INF1': break; case 'WID1': - totalWidSize += ((BlockHeader*)fontInf)->size; + totalWidSize += blkSize; widBlockCount++; break; case 'GLY1': - totalGlySize += ((BlockHeader*)fontInf)->size; - glyTexSize = ((ResFONT::GLY1*)fontInf)->textureSize; + totalGlySize += blkSize; + glyTexSize = R32(((ResFONT::GLY1*)fontInf)->textureSize); glyBlockCount++; if (glyTexSize > maxGlyTexSize) { maxGlyTexSize = glyTexSize; } break; case 'MAP1': - totalMapSize += ((BlockHeader*)fontInf)->size; + totalMapSize += blkSize; mapBlockCount++; break; default: @@ -98,7 +109,7 @@ int JUTCacheFont::getMemorySize(ResFONT const* p_font, u16* o_widCount, u32* o_w break; } - fontInf += ((BlockHeader*)fontInf)->size; + fontInf += blkSize; } if (o_widCount != NULL) { @@ -257,56 +268,59 @@ void JUTCacheFont::setBlock() { ResFONT::MAP1* pMap = (ResFONT::MAP1*)field_0x84; u32 aramAddress = field_0xac->getAddress(); mMaxCode = 0xffff; - const int* pData = (int*)mResFont->data; + const u8* pData = (const u8*)mResFont->data; - for (int i = 0; i < mResFont->numBlocks; i++) { + for (int i = 0; i < (int)R32(mResFont->numBlocks); i++) { + u32 blkMagic = R32(((BlockHeader*)pData)->magic); + u32 blkSize = R32(((BlockHeader*)pData)->size); u32 u; - switch (*pData) { + switch (blkMagic) { case 'INF1': memcpy(mInf1Ptr, pData, 0x20); - u = mInf1Ptr->fontType; + u = R16(mInf1Ptr->fontType); JUT_ASSERT(448, u < suAboutEncoding_); mIsLeadByte = &JUTResFont::saoAboutEncoding_[u]; break; case 'WID1': - memcpy(pWidth, pData, pData[1]); + memcpy(pWidth, pData, blkSize); mpWidthBlocks[widthNum] = (ResFONT::WID1*)pWidth; widthNum++; - pWidth += pData[1]; + pWidth += blkSize; break; - case 'GLY1': + case 'GLY1': { memcpy(piVar5, pData, 0x20); JKRAramBlock* iVar1; - iVar1 = JKRMainRamToAram((u8*)pData + 0x20, aramAddress, pData[1] - 0x20, + iVar1 = JKRMainRamToAram((u8*)pData + 0x20, aramAddress, blkSize - 0x20, EXPAND_SWITCH_UNKNOWN0, 0, NULL, 0xffffffff, NULL); if (iVar1 == NULL) { JUTException::panic("JUTCacheFont.cpp", 0x1dd, "trouble occurred in JKRMainRamToAram."); } piVar5->magic = aramAddress; - if (piVar5->textureSize > mMaxSheetSize) { - mMaxSheetSize = piVar5->textureSize; + if (R32(piVar5->textureSize) > mMaxSheetSize) { + mMaxSheetSize = R32(piVar5->textureSize); } mpGlyphBlocks[gylphNum] = piVar5; gylphNum++; piVar5++; - aramAddress += pData[1] - 0x20; + aramAddress += blkSize - 0x20; break; + } case 'MAP1': - memcpy(pMap, pData, pData[1]); + memcpy(pMap, pData, blkSize); mpMapBlocks[mapNum] = pMap; - if (mMaxCode > mpMapBlocks[mapNum]->startCode) { - mMaxCode = mpMapBlocks[mapNum]->startCode; + if (mMaxCode > R16(mpMapBlocks[mapNum]->startCode)) { + mMaxCode = R16(mpMapBlocks[mapNum]->startCode); } mapNum++; - pMap = (ResFONT::MAP1*)((u8*)pMap + pData[1]); + pMap = (ResFONT::MAP1*)((u8*)pMap + blkSize); break; default: JUTReportConsole("Unknown data block\n"); break; } - pData = (int*)((u8*)pData + pData[1]); + pData = pData + blkSize; } } @@ -390,8 +404,8 @@ JUTCacheFont::TCachePage* JUTCacheFont::loadCache_char_subroutine(int* param_0, rv = NULL; int i = 0; for (; i < mGly1BlockNum; i++) { - if (mpGlyphBlocks[i]->startCode <= *r29 && *r29 <= mpGlyphBlocks[i]->endCode) { - *r29 -= mpGlyphBlocks[i]->startCode; + if (R16(mpGlyphBlocks[i]->startCode) <= *r29 && *r29 <= R16(mpGlyphBlocks[i]->endCode)) { + *r29 -= R16(mpGlyphBlocks[i]->startCode); break; } } @@ -461,23 +475,23 @@ ResFONT* JUTResFont::getResFont() const { } int JUTResFont::getFontType() const { - return mInf1Ptr->fontType; + return R16(mInf1Ptr->fontType); } int JUTResFont::getLeading() const { - return mInf1Ptr->leading; + return R16(mInf1Ptr->leading); } s32 JUTResFont::getWidth() const { - return mInf1Ptr->width; + return R16(mInf1Ptr->width); } s32 JUTResFont::getAscent() const { - return mInf1Ptr->ascent; + return R16(mInf1Ptr->ascent); } s32 JUTResFont::getDescent() const { - return mInf1Ptr->descent; + return R16(mInf1Ptr->descent); } s32 JUTResFont::getHeight() const { diff --git a/src/JSystem/JUtility/JUTResFont.cpp b/src/JSystem/JUtility/JUTResFont.cpp index 62abfbd213..ad3aae4d30 100644 --- a/src/JSystem/JUtility/JUTResFont.cpp +++ b/src/JSystem/JUtility/JUTResFont.cpp @@ -7,6 +7,19 @@ #include "JSystem/JUtility/JUTConsole.h" #include +#ifdef TARGET_PC +#include "dusk/endian.h" +// Font resource data is embedded as Big-Endian (GameCube format). +// Wrap all multi-byte field accesses through these helpers. +static inline u32 R32(u32 v) { return be32(v); } +static inline u16 R16(u16 v) { return be16(v); } +static inline s16 RS16(s16 v) { return be16s(v); } +#else +static inline u32 R32(u32 v) { return v; } +static inline u16 R16(u16 v) { return v; } +static inline s16 RS16(s16 v) { return v; } +#endif + JUTResFont::JUTResFont() { initialize_state(); JUTFont::initialize_state(); @@ -90,8 +103,8 @@ void JUTResFont::countBlock() { mMap1BlockNum = 0; u8* pData = (u8*)&mResFont->data; - for (u32 i = 0; i < mResFont->numBlocks; i++, pData += ((BlockHeader*)pData)->size) { - int magic = ((BlockHeader*)pData)->magic; + for (u32 i = 0; i < R32(mResFont->numBlocks); i++, pData += R32(((BlockHeader*)pData)->size)) { + u32 magic = R32(((BlockHeader*)pData)->magic); switch (magic) { case 'WID1': mWid1BlockNum++; @@ -124,11 +137,13 @@ void JUTResFont::setBlock() { mMaxCode = -1; BlockHeader* data = (BlockHeader*)mResFont->data; - for (u32 i = 0; i < mResFont->numBlocks; data = (BlockHeader*)data->getNext(), i++) { - switch (data->magic) { + for (u32 i = 0; i < R32(mResFont->numBlocks); + data = (BlockHeader*)((u8*)data + R32(data->size)), i++) { + u32 magic = R32(data->magic); + switch (magic) { case 'INF1': { mInf1Ptr = (ResFONT::INF1*)data; - u32 u = mInf1Ptr->fontType; + u32 u = R16(mInf1Ptr->fontType); JUT_ASSERT(244, u < suAboutEncoding_); mIsLeadByte = &saoAboutEncoding_[u]; break; @@ -146,8 +161,8 @@ void JUTResFont::setBlock() { case 'MAP1': mpMapBlocks[mapNum] = (ResFONT::MAP1*)data; - if (mMaxCode > mpMapBlocks[mapNum]->startCode) { - mMaxCode = mpMapBlocks[mapNum]->startCode; + if (mMaxCode > R16(mpMapBlocks[mapNum]->startCode)) { + mMaxCode = R16(mpMapBlocks[mapNum]->startCode); } mapNum++; break; @@ -236,10 +251,14 @@ f32 JUTResFont::drawChar_scale(f32 pos_x, f32 pos_y, f32 scale_x, f32 scale_y, i y1 = pos_y - getAscent() * (scale_y / getHeight()); f32 y2 = getDescent() * (scale_y / getHeight()) + pos_y; - s32 u1 = (mWidth * 0x8000) / mpGlyphBlocks[field_0x66]->textureWidth; - s32 v1 = (mHeight * 0x8000) / mpGlyphBlocks[field_0x66]->textureHeight; - s32 u2 = ((mWidth + mpGlyphBlocks[field_0x66]->cellWidth) * 0x8000) / mpGlyphBlocks[field_0x66]->textureWidth; - s32 v2 = ((mHeight + mpGlyphBlocks[field_0x66]->cellHeight) * 0x8000) / mpGlyphBlocks[field_0x66]->textureHeight; + u16 texW = R16(mpGlyphBlocks[field_0x66]->textureWidth); + u16 texH = R16(mpGlyphBlocks[field_0x66]->textureHeight); + u16 cellW = R16(mpGlyphBlocks[field_0x66]->cellWidth); + u16 cellH = R16(mpGlyphBlocks[field_0x66]->cellHeight); + s32 u1 = (mWidth * 0x8000) / texW; + s32 v1 = (mHeight * 0x8000) / texH; + s32 u2 = ((mWidth + cellW) * 0x8000) / texW; + s32 v2 = ((mHeight + cellH) * 0x8000) / texH; GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); GXBegin(GX_QUADS, GX_VTXFMT0, 4); @@ -282,11 +301,14 @@ void JUTResFont::loadFont(int code, GXTexMapID texMapID, JUTFont::TWidth* pDstWi void JUTResFont::getWidthEntry(int code, JUTFont::TWidth* i_width) const { int fontCode = getFontCode(code); i_width->field_0x0 = 0; - i_width->field_0x1 = mInf1Ptr->width; + i_width->field_0x1 = R16(mInf1Ptr->width); for (int i = 0; i < mWid1BlockNum; i++) { - if (mpWidthBlocks[i]->startCode <= fontCode && fontCode <= mpWidthBlocks[i]->endCode) { - *i_width = *(JUTFont::TWidth*)&mpWidthBlocks[i]->mChunkNum[(fontCode - mpWidthBlocks[i]->startCode) * 2]; + u16 sc = R16(mpWidthBlocks[i]->startCode); + u16 ec = R16(mpWidthBlocks[i]->endCode); + if (sc <= fontCode && fontCode <= ec) { + // TWidth is two u8 fields, no byte-swap needed + *i_width = *(JUTFont::TWidth*)&mpWidthBlocks[i]->mChunkNum[(fontCode - sc) * 2]; break; } } @@ -295,7 +317,7 @@ void JUTResFont::getWidthEntry(int code, JUTFont::TWidth* i_width) const { s32 JUTResFont::getCellWidth() const { if (mpGlyphBlocks) { if (mpGlyphBlocks[0]) { - return mpGlyphBlocks[0]->cellWidth; + return R16(mpGlyphBlocks[0]->cellWidth); } } @@ -305,7 +327,7 @@ s32 JUTResFont::getCellWidth() const { s32 JUTResFont::getCellHeight() const { if (mpGlyphBlocks) { if (mpGlyphBlocks[0]) { - return mpGlyphBlocks[0]->cellHeight; + return R16(mpGlyphBlocks[0]->cellHeight); } } @@ -328,43 +350,46 @@ int JUTResFont::getFontCode(int chr) const { 0x8294, 0x8295, 0x8296, 0x8297, 0x8298, 0x8299, 0x829A, 0x816F, 0x8162, 0x8170, 0x8160, }; - int ret = mInf1Ptr->defaultCode; + int ret = R16(mInf1Ptr->defaultCode); if ((getFontType() == 2) && (mMaxCode >= 0x8000U) && (chr >= 0x20) && (chr < 0x7FU)) { chr = halftofull[chr - 32]; } for (int i = 0; i < mMap1BlockNum; i++) { - if ((mpMapBlocks[i]->startCode <= chr) && (chr <= mpMapBlocks[i]->endCode)) { - if (mpMapBlocks[i]->mappingMethod == 0) { - ret = chr - mpMapBlocks[i]->startCode; + u16 sc = R16(mpMapBlocks[i]->startCode); + u16 ec = R16(mpMapBlocks[i]->endCode); + u16 mm = R16(mpMapBlocks[i]->mappingMethod); + if ((sc <= chr) && (chr <= ec)) { + if (mm == 0) { + ret = chr - sc; break; - } else if (mpMapBlocks[i]->mappingMethod == 2) { + } else if (mm == 2) { u16* leading_temp = &mpMapBlocks[i]->mLeading; - ret = leading_temp[chr - mpMapBlocks[i]->startCode]; + ret = R16(leading_temp[chr - sc]); break; - } else if (mpMapBlocks[i]->mappingMethod == 3) { + } else if (mm == 3) { u16* leading_temp = &mpMapBlocks[i]->mLeading; int phi_r5 = 0; - int phi_r6_2 = mpMapBlocks[i]->numEntries - 1; + int phi_r6_2 = R16(mpMapBlocks[i]->numEntries) - 1; while (phi_r6_2 >= phi_r5) { int temp_r7 = (phi_r6_2 + phi_r5) / 2; - if (chr < leading_temp[temp_r7 * 2]) { + if (chr < R16(leading_temp[temp_r7 * 2])) { phi_r6_2 = temp_r7 - 1; continue; } - if (chr > leading_temp[temp_r7 * 2]) { + if (chr > R16(leading_temp[temp_r7 * 2])) { phi_r5 = temp_r7 + 1; continue; } - ret = leading_temp[temp_r7 * 2 + 1]; + ret = R16(leading_temp[temp_r7 * 2 + 1]); break; } - } else if (mpMapBlocks[i]->mappingMethod == 1) { + } else if (mm == 1) { u16* phi_r5_2 = NULL; - if (mpMapBlocks[i]->numEntries == 1) { + if (R16(mpMapBlocks[i]->numEntries) == 1) { phi_r5_2 = &mpMapBlocks[i]->mLeading; } ret = convertSjis(chr, phi_r5_2); @@ -380,26 +405,37 @@ void JUTResFont::loadImage(int code, GXTexMapID id){ int i = 0; for (; i < mGly1BlockNum; i++) { - if (mpGlyphBlocks[i]->startCode <= code && code <= mpGlyphBlocks[i]->endCode) + u16 sc = R16(mpGlyphBlocks[i]->startCode); + u16 ec = R16(mpGlyphBlocks[i]->endCode); + if (sc <= code && code <= ec) { - code -= mpGlyphBlocks[i]->startCode; + code -= sc; break; } } if (i != mGly1BlockNum) { - s32 pageNumCells = mpGlyphBlocks[i]->numRows * mpGlyphBlocks[i]->numColumns; + u16 numRows = R16(mpGlyphBlocks[i]->numRows); + u16 numCols = R16(mpGlyphBlocks[i]->numColumns); + u16 cellW = R16(mpGlyphBlocks[i]->cellWidth); + u16 cellH = R16(mpGlyphBlocks[i]->cellHeight); + u32 texSize = R32(mpGlyphBlocks[i]->textureSize); + u16 texW = R16(mpGlyphBlocks[i]->textureWidth); + u16 texH = R16(mpGlyphBlocks[i]->textureHeight); + u16 texFmt = R16(mpGlyphBlocks[i]->textureFormat); + + s32 pageNumCells = numRows * numCols; s32 pageIdx = code / pageNumCells; s32 cellIdxInPage = code - pageIdx * pageNumCells; - s32 cellRow = (cellIdxInPage / mpGlyphBlocks[i]->numRows); - s32 cellCol = (cellIdxInPage - cellRow * mpGlyphBlocks[i]->numRows); - mWidth = cellCol * mpGlyphBlocks[i]->cellWidth; - mHeight = cellRow * mpGlyphBlocks[i]->cellHeight; + s32 cellRow = (cellIdxInPage / numRows); + s32 cellCol = (cellIdxInPage - cellRow * numRows); + mWidth = cellCol * cellW; + mHeight = cellRow * cellH; if (pageIdx != mTexPageIdx || i != field_0x66) { - GXInitTexObj(&mTexObj, &mpGlyphBlocks[i]->data[pageIdx * mpGlyphBlocks[i]->textureSize], mpGlyphBlocks[i]->textureWidth, - mpGlyphBlocks[i]->textureHeight, (GXTexFmt)mpGlyphBlocks[i]->textureFormat, GX_CLAMP, GX_CLAMP, 0); + GXInitTexObj(&mTexObj, &mpGlyphBlocks[i]->data[pageIdx * texSize], texW, + texH, (GXTexFmt)texFmt, GX_CLAMP, GX_CLAMP, 0); GXInitTexObjLOD(&mTexObj, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, 0U, 0U, GX_ANISO_1); mTexPageIdx = pageIdx; @@ -422,7 +458,7 @@ int JUTResFont::convertSjis(int inChr, u16* inLead) const { u16 lead = 0x31c; if (inLead) { - lead = *inLead; + lead = R16(*inLead); } r29 = tmp2 + (tmp - 0x88) * 0xbc + -0x5e + lead; diff --git a/src/dolphin/os/OSContext.cpp b/src/dolphin/os/OSContext.cpp new file mode 100644 index 0000000000..4f54b8b963 --- /dev/null +++ b/src/dolphin/os/OSContext.cpp @@ -0,0 +1,92 @@ +// OSContext.cpp - PC implementation of GameCube OSContext API +// Replaces PowerPC assembly context switching with minimal PC stubs. +// On PC there is no register-level context save/restore; the OS handles +// thread contexts natively via std::thread. + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +// --- Current context pointer (per-process, not per-thread) --- +static OSContext* sCurrentContext = nullptr; + +OSContext* OSGetCurrentContext(void) { + return sCurrentContext; +} + +void OSSetCurrentContext(OSContext* context) { + sCurrentContext = context; +} + +void OSClearContext(OSContext* context) { + if (!context) return; + context->mode = 0; + context->state = 0; +} + +void OSInitContext(OSContext* context, u32 pc, u32 newsp) { + if (!context) return; + memset(context, 0, sizeof(OSContext)); + context->srr0 = pc; + context->gpr[1] = newsp; +} + +u32 OSSaveContext(OSContext* context) { + // On PC we don't save PowerPC registers. + // Return 0 = "context was just saved" (as opposed to 1 = "restored from save"). + return 0; +} + +void OSLoadContext(OSContext* context) { + // No-op on PC (no PowerPC register restore) +} + +void OSDumpContext(OSContext* context) { + if (!context) { + OSReport("[PC] OSDumpContext: NULL context\n"); + return; + } + OSReport("[PC] OSDumpContext: context at %p (no register info on PC)\n", context); +} + +void OSFillFPUContext(OSContext* context) { + // No-op on PC (no PowerPC FPU state) +} + +void OSLoadFPUContext(OSContext* fpucontext) { + // No-op on PC +} + +void OSSaveFPUContext(OSContext* fpucontext) { + // No-op on PC +} + +u32 OSGetStackPointer(void) { + // Return approximate stack pointer + volatile u32 dummy; + return (u32)(uintptr_t)&dummy; +} + +u32 OSSwitchStack(u32 newsp) { + // Not meaningful on PC - return current sp + return OSGetStackPointer(); +} + +int OSSwitchFiber(u32 pc, u32 newsp) { + // Not meaningful on PC + OSReport("[PC] OSSwitchFiber: not supported on PC\n"); + return 0; +} + +void __OSContextInit(void) { + // On GC this installs the FPU exception handler. + // On PC nothing to do. +} + +#ifdef __cplusplus +} +#endif diff --git a/src/dolphin/os/OSMutex.cpp b/src/dolphin/os/OSMutex.cpp new file mode 100644 index 0000000000..9ec3197cb1 --- /dev/null +++ b/src/dolphin/os/OSMutex.cpp @@ -0,0 +1,243 @@ +// OSMutex.cpp - PC implementation of GameCube OSMutex/OSCond API +// Uses std::recursive_mutex and std::condition_variable_any behind the +// unchanged GameCube C API. The OSMutex struct layout is preserved so +// game code can read its fields. + +#include +#include + +#include +#include +#include +#include +#include + +// ============================================================================ +// Malloc-based allocator to bypass JKRHeap operator new/delete +// Without this, side-table allocations call operator new -> JKRHeap::alloc +// -> OSLockMutex -> GetMutexData -> operator new ... infinite recursion. +// ============================================================================ + +template +struct MallocAllocator { + using value_type = T; + MallocAllocator() = default; + template MallocAllocator(const MallocAllocator&) noexcept {} + T* allocate(std::size_t n) { + void* p = std::malloc(n * sizeof(T)); + if (!p) throw std::bad_alloc(); + return static_cast(p); + } + void deallocate(T* p, std::size_t) noexcept { std::free(p); } + template bool operator==(const MallocAllocator&) const noexcept { return true; } + template bool operator!=(const MallocAllocator&) const noexcept { return false; } +}; + +template +struct MallocDeleter { + void operator()(T* p) const { + p->~T(); + std::free(p); + } +}; + +template +std::unique_ptr> make_malloc_unique(Args&&... args) { + void* mem = std::malloc(sizeof(T)); + if (!mem) throw std::bad_alloc(); + T* obj = new (mem) T(std::forward(args)...); + return std::unique_ptr>(obj); +} + +// ============================================================================ +// Side-table: native mutex per OSMutex +// ============================================================================ + +struct PCMutexData { + std::recursive_mutex nativeMutex; +}; + +template +using MallocMap = std::unordered_map, std::equal_to, + MallocAllocator>>; + +// Lazy-initialized to avoid DLL static init crashes +static std::mutex& GetMutexMapMutex() { + static std::mutex mtx; + return mtx; +} +static MallocMap>>& GetMutexMap() { + static MallocMap>> map; + return map; +} + +static PCMutexData& GetMutexData(OSMutex* mutex) { + std::lock_guard lock(GetMutexMapMutex()); + auto& map = GetMutexMap(); + auto it = map.find(mutex); + if (it == map.end()) { + auto result = map.emplace(mutex, make_malloc_unique()); + return *result.first->second; + } + return *it->second; +} + +// ============================================================================ +// Side-table: native condition variable per OSCond +// ============================================================================ + +struct PCCondData { + std::condition_variable_any cv; +}; + +// Lazy-initialized to avoid DLL static init crashes +static std::mutex& GetCondMapMutex() { + static std::mutex mtx; + return mtx; +} +static MallocMap>>& GetCondMap() { + static MallocMap>> map; + return map; +} + +static PCCondData& GetCondData(OSCond* cond) { + std::lock_guard lock(GetCondMapMutex()); + auto& map = GetCondMap(); + auto it = map.find(cond); + if (it == map.end()) { + auto result = map.emplace(cond, make_malloc_unique()); + return *result.first->second; + } + return *it->second; +} + +// ============================================================================ +// C API functions +// ============================================================================ + +extern "C" { + +void OSInitMutex(OSMutex* mutex) { + if (!mutex) return; + OSInitThreadQueue(&mutex->queue); + mutex->thread = nullptr; + mutex->count = 0; + + // Create/reset side-table entry + GetMutexData(mutex); +} + +void OSLockMutex(OSMutex* mutex) { + if (!mutex) return; + + PCMutexData& data = GetMutexData(mutex); + data.nativeMutex.lock(); + + // Update GC-visible fields + OSThread* currentThread = OSGetCurrentThread(); + mutex->thread = currentThread; + mutex->count++; +} + +void OSUnlockMutex(OSMutex* mutex) { + if (!mutex) return; + + OSThread* currentThread = OSGetCurrentThread(); + if (mutex->thread != currentThread) return; + + mutex->count--; + if (mutex->count == 0) { + mutex->thread = nullptr; + } + + PCMutexData& data = GetMutexData(mutex); + data.nativeMutex.unlock(); +} + +BOOL OSTryLockMutex(OSMutex* mutex) { + if (!mutex) return FALSE; + + PCMutexData& data = GetMutexData(mutex); + if (data.nativeMutex.try_lock()) { + OSThread* currentThread = OSGetCurrentThread(); + mutex->thread = currentThread; + mutex->count++; + return TRUE; + } + return FALSE; +} + +// ============================================================================ +// Internal: unlock all mutexes held by a thread (called on thread exit) +// ============================================================================ + +void __OSUnlockAllMutex(OSThread* thread) { + // On GC this walks the thread's mutex queue. + // On PC the native mutexes are cleaned up when threads exit. + // Clear the GC-visible queue. + if (!thread) return; + thread->queueMutex.head = nullptr; + thread->queueMutex.tail = nullptr; +} + +int __OSCheckDeadLock(OSThread* thread) { + // Simplified: native OS handles deadlock detection. + return 0; +} + +int __OSCheckMutexes(OSThread* thread) { + return 1; +} + +// ============================================================================ +// Condition Variable API +// ============================================================================ + +void OSInitCond(OSCond* cond) { + if (!cond) return; + OSInitThreadQueue(&cond->queue); + GetCondData(cond); +} + +void OSWaitCond(OSCond* cond, OSMutex* mutex) { + if (!cond || !mutex) return; + + PCCondData& condData = GetCondData(cond); + PCMutexData& mutexData = GetMutexData(mutex); + + // Save and clear the GC mutex state + OSThread* currentThread = OSGetCurrentThread(); + s32 savedCount = mutex->count; + mutex->count = 0; + mutex->thread = nullptr; + + // Unlock the recursive mutex the same number of times it was locked + for (s32 i = 0; i < savedCount; i++) { + mutexData.nativeMutex.unlock(); + } + + // Wait on the condition variable + { + std::unique_lock lock(mutexData.nativeMutex); + condData.cv.wait(lock); + } + + // Re-lock the recursive mutex the same number of times + for (s32 i = 0; i < savedCount; i++) { + mutexData.nativeMutex.lock(); + } + + // Restore GC mutex state + mutex->thread = currentThread; + mutex->count = savedCount; +} + +void OSSignalCond(OSCond* cond) { + if (!cond) return; + PCCondData& condData = GetCondData(cond); + condData.cv.notify_all(); +} + +#ifdef __cplusplus +} +#endif diff --git a/src/dolphin/os/OSThread.cpp b/src/dolphin/os/OSThread.cpp new file mode 100644 index 0000000000..74fffaa4e5 --- /dev/null +++ b/src/dolphin/os/OSThread.cpp @@ -0,0 +1,650 @@ +// OSThread.cpp - PC implementation of GameCube OSThread API +// Maps GameCube cooperative threading to native OS threads via std::thread. +// The OSThread struct layout is preserved so game code can read its fields. +// A side-table stores the native std::thread and synchronization primitives. + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// ============================================================================ +// Malloc-based allocator to bypass JKRHeap operator new/delete +// ============================================================================ + +template +struct MallocAllocator { + using value_type = T; + MallocAllocator() = default; + template MallocAllocator(const MallocAllocator&) noexcept {} + T* allocate(std::size_t n) { + void* p = std::malloc(n * sizeof(T)); + if (!p) throw std::bad_alloc(); + return static_cast(p); + } + void deallocate(T* p, std::size_t) noexcept { std::free(p); } + template bool operator==(const MallocAllocator&) const noexcept { return true; } + template bool operator!=(const MallocAllocator&) const noexcept { return false; } +}; + +template +struct MallocDeleter { + void operator()(T* p) const { + p->~T(); + std::free(p); + } +}; + +template +std::unique_ptr> make_malloc_unique(Args&&... args) { + void* mem = std::malloc(sizeof(T)); + if (!mem) throw std::bad_alloc(); + T* obj = new (mem) T(std::forward(args)...); + return std::unique_ptr>(obj); +} + +template +using MallocMap = std::unordered_map, std::equal_to, + MallocAllocator>>; + +// ============================================================================ +// Side-table: native thread data per OSThread +// ============================================================================ + +struct PCThreadData { + std::thread nativeThread; + std::mutex mtx; + std::condition_variable cv; + void* (*func)(void*); + void* param; + bool started = false; + bool suspended = false; +}; + +// Lazy-initialized to avoid DLL static init crashes (used before DllMain completes) +static std::mutex& GetThreadDataMutex() { + static std::mutex mtx; + return mtx; +} +static MallocMap>>& GetThreadDataMap() { + static MallocMap>> map; + return map; +} + +// Side-table for OSThreadQueue -> condition_variable (for OSSleepThread/OSWakeupThread) +static std::mutex& GetQueueCvMutex() { + static std::mutex mtx; + return mtx; +} +static MallocMap>>& GetQueueCvMap() { + static MallocMap>> map; + return map; +} + +static std::condition_variable& GetQueueCV(OSThreadQueue* queue) { + std::lock_guard lock(GetQueueCvMutex()); + auto& map = GetQueueCvMap(); + auto it = map.find(queue); + if (it == map.end()) { + auto result = map.emplace(queue, make_malloc_unique()); + return *result.first->second; + } + return *it->second; +} + +// ============================================================================ +// Thread-local current thread pointer +// ============================================================================ + +static thread_local OSThread* tls_currentThread = nullptr; + +// ============================================================================ +// Global state +// ============================================================================ + +static OSThread sDefaultThread; +static u8 sDefaultStack[64 * 1024]; +static u32 sDefaultStackEnd = OS_THREAD_STACK_MAGIC; + +OSThreadQueue __OSActiveThreadQueue; + +// Global interrupt mutex (coarse-grained lock replacing interrupt disable) +// Lazy-initialized to avoid DLL static init crashes +static std::recursive_mutex& GetInterruptMutex() { + static std::recursive_mutex mtx; + return mtx; +} +static thread_local int sInterruptLockCount = 0; + +// Scheduler suspend count +static std::atomic sSchedulerSuspendCount{0}; + +// Active thread count +static std::atomic sActiveThreadCount{0}; + +// Switch thread callback +static OSSwitchThreadCallback sSwitchThreadCallback = nullptr; + +// ============================================================================ +// Internal helpers +// ============================================================================ + +// Linked list macros for the active thread queue +static void EnqueueActive(OSThread* thread) { + OSThread* prev = __OSActiveThreadQueue.tail; + if (prev == nullptr) { + __OSActiveThreadQueue.head = thread; + } else { + prev->linkActive.next = thread; + } + thread->linkActive.prev = prev; + thread->linkActive.next = nullptr; + __OSActiveThreadQueue.tail = thread; +} + +static void DequeueActive(OSThread* thread) { + OSThread* next = thread->linkActive.next; + OSThread* prev = thread->linkActive.prev; + if (next == nullptr) { + __OSActiveThreadQueue.tail = prev; + } else { + next->linkActive.prev = prev; + } + if (prev == nullptr) { + __OSActiveThreadQueue.head = next; + } else { + prev->linkActive.next = next; + } + thread->linkActive.next = nullptr; + thread->linkActive.prev = nullptr; +} + +// Thread entry wrapper - runs on the new std::thread +static void ThreadEntryWrapper(OSThread* thread, PCThreadData* data) { + // Set thread-local pointer + tls_currentThread = thread; + + // Set context pointers for this thread + OSClearContext(&thread->context); + OSSetCurrentContext(&thread->context); + + thread->state = OS_THREAD_STATE_RUNNING; + + // Call the actual thread function + void* result = data->func(data->param); + + // Thread returned - equivalent to OSExitThread + thread->val = result; + thread->state = OS_THREAD_STATE_MORIBUND; +} + +// ============================================================================ +// C API functions +// ============================================================================ + +extern "C" { + +void __OSThreadInit(void) { + memset(&sDefaultThread, 0, sizeof(OSThread)); + + sDefaultThread.state = OS_THREAD_STATE_RUNNING; + sDefaultThread.attr = OS_THREAD_ATTR_DETACH; + sDefaultThread.priority = 16; + sDefaultThread.base = 16; + sDefaultThread.suspend = 0; + sDefaultThread.val = (void*)(intptr_t)-1; + sDefaultThread.mutex = nullptr; + sDefaultThread.queue = nullptr; + + OSInitThreadQueue(&sDefaultThread.queueJoin); + sDefaultThread.queueMutex.head = sDefaultThread.queueMutex.tail = nullptr; + sDefaultThread.link.next = sDefaultThread.link.prev = nullptr; + sDefaultThread.linkActive.next = sDefaultThread.linkActive.prev = nullptr; + + // Stack pointers (JKRThread reads these) + sDefaultThread.stackBase = sDefaultStack + sizeof(sDefaultStack); + sDefaultThread.stackEnd = &sDefaultStackEnd; + sDefaultStackEnd = OS_THREAD_STACK_MAGIC; + + OSClearContext(&sDefaultThread.context); + + sDefaultThread.error = 0; + sDefaultThread.specific[0] = nullptr; + sDefaultThread.specific[1] = nullptr; + + // Set as current thread for main thread + tls_currentThread = &sDefaultThread; + + // Active queue + OSInitThreadQueue(&__OSActiveThreadQueue); + EnqueueActive(&sDefaultThread); + sActiveThreadCount = 1; + + OSReport("[PC-OSThread] Thread system initialized (multi-threaded mode)\n"); +} + +// ============================================================================ +// Thread Queue +// ============================================================================ + +void OSInitThreadQueue(OSThreadQueue* queue) { + if (queue) { + queue->head = queue->tail = nullptr; + } +} + +// ============================================================================ +// Current Thread +// ============================================================================ + +OSThread* OSGetCurrentThread(void) { + // Lazy-init for main thread if __OSThreadInit hasn't been called yet + if (tls_currentThread == nullptr) { + __OSThreadInit(); + } + return tls_currentThread; +} + +// ============================================================================ +// Thread Creation +// ============================================================================ + +int OSCreateThread(OSThread* thread, void* (*func)(void*), void* param, + void* stack, u32 stackSize, OSPriority priority, u16 attr) { + if (!thread) return 0; + if (priority < OS_PRIORITY_MIN || priority > OS_PRIORITY_MAX) return 0; + + // Ensure thread system is initialized + OSGetCurrentThread(); + + memset(thread, 0, sizeof(OSThread)); + + thread->state = OS_THREAD_STATE_READY; + thread->attr = attr & 1u; + thread->base = priority; + thread->priority = priority; + thread->suspend = 1; // Created suspended (GC behavior) + thread->val = (void*)(intptr_t)-1; + thread->mutex = nullptr; + + OSInitThreadQueue(&thread->queueJoin); + thread->queueMutex.head = thread->queueMutex.tail = nullptr; + thread->link.next = thread->link.prev = nullptr; + thread->linkActive.next = thread->linkActive.prev = nullptr; + + // Stack (stack points to TOP on GameCube) + thread->stackBase = (u8*)stack; + thread->stackEnd = (u32*)((uintptr_t)stack - stackSize); + *thread->stackEnd = OS_THREAD_STACK_MAGIC; + + OSClearContext(&thread->context); + + thread->error = 0; + thread->specific[0] = nullptr; + thread->specific[1] = nullptr; + + // Create side-table entry (but don't start the thread yet) + { + auto data = make_malloc_unique(); + data->func = func; + data->param = param; + + std::lock_guard lock(GetThreadDataMutex()); + GetThreadDataMap()[thread] = std::move(data); + } + + // Add to active queue + EnqueueActive(thread); + sActiveThreadCount++; + + OSReport("[PC-OSThread] Created thread %p (priority=%d, stackSize=%u)\n", + thread, priority, stackSize); + return 1; +} + +// ============================================================================ +// Resume / Suspend +// ============================================================================ + +s32 OSResumeThread(OSThread* thread) { + if (!thread) return 0; + + s32 prevSuspend = thread->suspend; + if (thread->suspend > 0) { + thread->suspend--; + } + + if (thread->suspend == 0) { + std::lock_guard lock(GetThreadDataMutex()); + auto it = GetThreadDataMap().find(thread); + if (it != GetThreadDataMap().end()) { + PCThreadData* data = it->second.get(); + if (!data->started) { + // First resume: launch the native thread + data->started = true; + data->suspended = false; + data->nativeThread = std::thread(ThreadEntryWrapper, thread, data); + data->nativeThread.detach(); + OSReport("[PC-OSThread] Started thread %p\n", thread); + } else if (data->suspended) { + // Resume from suspension: signal the CV + data->suspended = false; + data->cv.notify_one(); + } + } + } + + return prevSuspend; +} + +s32 OSSuspendThread(OSThread* thread) { + if (!thread) return 0; + + s32 prevSuspend = thread->suspend; + thread->suspend++; + + if (prevSuspend == 0) { + std::lock_guard lock(GetThreadDataMutex()); + auto it = GetThreadDataMap().find(thread); + if (it != GetThreadDataMap().end()) { + PCThreadData* data = it->second.get(); + if (data->started) { + data->suspended = true; + // The thread must check its suspended flag and wait + } + } + } + + return prevSuspend; +} + +// ============================================================================ +// Sleep / Wakeup (thread queue based) +// ============================================================================ + +void OSSleepThread(OSThreadQueue* queue) { + if (!queue) return; + + OSThread* currentThread = OSGetCurrentThread(); + if (!currentThread) return; + + currentThread->state = OS_THREAD_STATE_WAITING; + currentThread->queue = queue; + + // Enqueue into the thread queue + OSThread* prev = queue->tail; + if (prev == nullptr) { + queue->head = currentThread; + } else { + prev->link.next = currentThread; + } + currentThread->link.prev = prev; + currentThread->link.next = nullptr; + queue->tail = currentThread; + + // Wait on the condition variable for this queue + std::condition_variable& cv = GetQueueCV(queue); + std::unique_lock lock(GetQueueCvMutex()); + cv.wait(lock, [currentThread]() { + return currentThread->state != OS_THREAD_STATE_WAITING; + }); +} + +void OSWakeupThread(OSThreadQueue* queue) { + if (!queue) return; + + // Wake all threads in the queue + OSThread* thread = queue->head; + while (thread) { + OSThread* next = thread->link.next; + thread->state = OS_THREAD_STATE_READY; + thread->link.next = nullptr; + thread->link.prev = nullptr; + thread->queue = nullptr; + thread = next; + } + queue->head = queue->tail = nullptr; + + // Notify all waiters + std::condition_variable& cv = GetQueueCV(queue); + cv.notify_all(); +} + +// ============================================================================ +// Exit / Cancel / Detach / Join +// ============================================================================ + +void OSExitThread(void* val) { + OSThread* currentThread = OSGetCurrentThread(); + if (!currentThread) return; + + currentThread->val = val; + + if (currentThread->attr & OS_THREAD_ATTR_DETACH) { + DequeueActive(currentThread); + currentThread->state = 0; + } else { + currentThread->state = OS_THREAD_STATE_MORIBUND; + } + + // Wake anyone waiting to join + OSWakeupThread(¤tThread->queueJoin); + sActiveThreadCount--; +} + +void OSCancelThread(OSThread* thread) { + if (!thread) return; + + if (thread->attr & OS_THREAD_ATTR_DETACH) { + DequeueActive(thread); + thread->state = 0; + } else { + thread->state = OS_THREAD_STATE_MORIBUND; + } + + OSWakeupThread(&thread->queueJoin); + sActiveThreadCount--; +} + +void OSDetachThread(OSThread* thread) { + if (!thread) return; + thread->attr |= OS_THREAD_ATTR_DETACH; + + if (thread->state == OS_THREAD_STATE_MORIBUND) { + DequeueActive(thread); + thread->state = 0; + } + OSWakeupThread(&thread->queueJoin); +} + +int OSJoinThread(OSThread* thread, void* val) { + if (!thread) return 0; + + if (!(thread->attr & OS_THREAD_ATTR_DETACH) && + thread->state != OS_THREAD_STATE_MORIBUND && + thread->queueJoin.head == nullptr) { + OSSleepThread(&thread->queueJoin); + } + + if (thread->state == OS_THREAD_STATE_MORIBUND) { + if (val) { + *(s32*)val = (s32)(intptr_t)thread->val; + } + DequeueActive(thread); + thread->state = 0; + return 1; + } + return 0; +} + +// ============================================================================ +// Yield / Terminated / Active +// ============================================================================ + +void OSYieldThread(void) { + std::this_thread::yield(); +} + +BOOL OSIsThreadSuspended(OSThread* thread) { + return (thread && thread->suspend > 0) ? TRUE : FALSE; +} + +BOOL OSIsThreadTerminated(OSThread* thread) { + if (!thread) return TRUE; + return (thread->state == OS_THREAD_STATE_MORIBUND || thread->state == 0) ? TRUE : FALSE; +} + +s32 OSCheckActiveThreads(void) { + return sActiveThreadCount.load(); +} + +// ============================================================================ +// Priority +// ============================================================================ + +int OSSetThreadPriority(OSThread* thread, OSPriority priority) { + if (!thread) return 0; + if (priority < OS_PRIORITY_MIN || priority > OS_PRIORITY_MAX) return 0; + thread->base = priority; + thread->priority = priority; + return 1; +} + +s32 OSGetThreadPriority(OSThread* thread) { + if (!thread) return 16; + return thread->base; +} + +// ============================================================================ +// Switch Thread Callback +// ============================================================================ + +OSSwitchThreadCallback OSSetSwitchThreadCallback(OSSwitchThreadCallback callback) { + OSSwitchThreadCallback prev = sSwitchThreadCallback; + sSwitchThreadCallback = callback; + return prev; +} + +// ============================================================================ +// Scheduler (atomic counter, no real effect with native OS threads) +// ============================================================================ + +s32 OSDisableScheduler(void) { + return sSchedulerSuspendCount.fetch_add(1); +} + +s32 OSEnableScheduler(void) { + return sSchedulerSuspendCount.fetch_sub(1); +} + +// ============================================================================ +// Interrupts (global recursive mutex for mutual exclusion) +// ============================================================================ + +BOOL OSDisableInterrupts(void) { + GetInterruptMutex().lock(); + sInterruptLockCount++; + return (BOOL)(sInterruptLockCount > 1); // TRUE if was already locked +} + +BOOL OSRestoreInterrupts(BOOL level) { + if (sInterruptLockCount > 0) { + sInterruptLockCount--; + GetInterruptMutex().unlock(); + } + return level; +} + +BOOL OSEnableInterrupts(void) { + if (sInterruptLockCount > 0) { + sInterruptLockCount--; + GetInterruptMutex().unlock(); + } + return FALSE; +} + +// ============================================================================ +// Idle function (stub on PC) +// ============================================================================ + +OSThread* OSSetIdleFunction(OSIdleFunction idleFunction, void* param, void* stack, u32 stackSize) { + return nullptr; +} + +OSThread* OSGetIdleFunction(void) { + return nullptr; +} + +// ============================================================================ +// Thread-specific storage +// ============================================================================ + +void OSSetThreadSpecific(s32 index, void* ptr) { + OSThread* thread = OSGetCurrentThread(); + if (thread && index >= 0 && index < OS_THREAD_SPECIFIC_MAX) { + thread->specific[index] = ptr; + } +} + +void* OSGetThreadSpecific(s32 index) { + OSThread* thread = OSGetCurrentThread(); + if (thread && index >= 0 && index < OS_THREAD_SPECIFIC_MAX) { + return thread->specific[index]; + } + return nullptr; +} + +// ============================================================================ +// Clear stack (minimal implementation) +// ============================================================================ + +void OSClearStack(u8 val) { + // On PC we don't clear the stack - it's managed by the OS +} + +// ============================================================================ +// Internal functions used by OSMutex +// ============================================================================ + +s32 __OSGetEffectivePriority(OSThread* thread) { + // On PC with native threads, priority inversion handling is simplified. + // Just return the base priority. + return thread ? thread->base : 16; +} + +void __OSPromoteThread(OSThread* thread, s32 priority) { + // Simplified: no real priority inheritance on PC + if (thread && priority < thread->priority) { + thread->priority = priority; + } +} + +void __OSReschedule(void) { + // With native OS threads, rescheduling is handled by the OS. + // Nothing to do here. +} + +// ============================================================================ +// Interrupt handler registration (stub) +// ============================================================================ + +__OSInterruptHandler __OSSetInterruptHandler(__OSInterrupt interrupt, + __OSInterruptHandler handler) { + return nullptr; +} + +OSInterruptMask __OSUnmaskInterrupts(OSInterruptMask mask) { + return 0; +} + +#ifdef __cplusplus +} +#endif diff --git a/src/dusk/stubs.cpp b/src/dusk/stubs.cpp index 670c718c1d..95df5128e5 100644 --- a/src/dusk/stubs.cpp +++ b/src/dusk/stubs.cpp @@ -2,17 +2,18 @@ #include #include #include +#include +#include +#include +#include +#include +#include +#include +#include -// Credits: Super Monkey Ball - -/* -void OSReport(const char* msg, ...) { - va_list args; - va_start(args, msg); - vprintf(msg, args); - va_end(args); -} -*/ +// ========================================================================== +// General OS +// ========================================================================== u32 OSGetConsoleType() { return OS_CONSOLE_RETAIL1; @@ -22,219 +23,155 @@ u32 OSGetSoundMode() { return 2; } -// Consolidated OS functions (moved from other sections) -void OSClearContext(OSContext* context) { - puts("OSClearContext is a stub"); -} - void OSInit() { - puts("OSInit is a stub"); + // Thread system is lazy-initialized via OSGetCurrentThread() } -void OSInitMutex(OSMutex* mutex) { - puts("OSInitMutex is a stub"); +// ========================================================================== +// Message Queue (thread-safe implementation) +// ========================================================================== + +// Malloc-based allocator to bypass JKRHeap operator new/delete +template +struct MallocAllocator { + using value_type = T; + MallocAllocator() = default; + template MallocAllocator(const MallocAllocator&) noexcept {} + T* allocate(std::size_t n) { + void* p = std::malloc(n * sizeof(T)); + if (!p) throw std::bad_alloc(); + return static_cast(p); + } + void deallocate(T* p, std::size_t) noexcept { std::free(p); } + template bool operator==(const MallocAllocator&) const noexcept { return true; } + template bool operator!=(const MallocAllocator&) const noexcept { return false; } +}; + +template +struct MallocDeleter { + void operator()(T* p) const { + p->~T(); + std::free(p); + } +}; + +template +std::unique_ptr> make_malloc_unique(Args&&... args) { + void* mem = std::malloc(sizeof(T)); + if (!mem) throw std::bad_alloc(); + T* obj = new (mem) T(std::forward(args)...); + return std::unique_ptr>(obj); } -void OSUnlockMutex(OSMutex* mutex) { - puts("OSUnlockMutex is a stub"); +template +using MallocMap = std::unordered_map, std::equal_to, + MallocAllocator>>; + +// Side-table for native synchronization per OSMessageQueue +struct PCMessageQueueData { + std::mutex mtx; + std::condition_variable cvSend; // Notified when space becomes available + std::condition_variable cvReceive; // Notified when a message arrives +}; + +// Lazy-initialized to avoid DLL static init crashes +static std::mutex& GetMsgQueueMapMutex() { + static std::mutex mtx; + return mtx; +} +static MallocMap>>& GetMsgQueueMap() { + static MallocMap>> map; + return map; } -BOOL OSTryLockMutex(OSMutex* mutex) { - puts("OSTryLockMutex is a stub"); - return FALSE; +static PCMessageQueueData& GetMsgQueueData(OSMessageQueue* mq) { + std::lock_guard lock(GetMsgQueueMapMutex()); + auto& map = GetMsgQueueMap(); + auto it = map.find(mq); + if (it == map.end()) { + auto result = map.emplace(mq, make_malloc_unique()); + return *result.first->second; + } + return *it->second; } -void* OSAllocFromArenaLo(u32 size, u32 align) { - puts("OSAllocFromArenaLo is a stub"); - return NULL; +void OSInitMessageQueue(OSMessageQueue* mq, void* msgArray, s32 msgCount) { + if (!mq) return; + mq->queueSend.head = mq->queueSend.tail = nullptr; + mq->queueReceive.head = mq->queueReceive.tail = nullptr; + mq->msgArray = msgArray; + mq->msgCount = msgCount; + mq->firstIndex = 0; + mq->usedCount = 0; + GetMsgQueueData(mq); // Ensure side-table entry exists } -BOOL OSDisableInterrupts() { - puts("OSDisableInterrupts is a stub"); - return FALSE; +int OSSendMessage(OSMessageQueue* mq, void* msg, s32 flags) { + if (!mq) return 0; + + PCMessageQueueData& data = GetMsgQueueData(mq); + std::unique_lock lock(data.mtx); + + if (mq->usedCount >= mq->msgCount) { + if (flags == OS_MESSAGE_NOBLOCK) return 0; + // BLOCK: wait until space is available + data.cvSend.wait(lock, [mq]() { return mq->usedCount < mq->msgCount; }); + } + + s32 idx = (mq->firstIndex + mq->usedCount) % mq->msgCount; + ((OSMessage*)mq->msgArray)[idx] = msg; + mq->usedCount++; + + data.cvReceive.notify_one(); + return 1; } -void OSSleepThread(OSThreadQueue* queue) { - puts("OSSleepThread is a stub"); +int OSReceiveMessage(OSMessageQueue* mq, void* msg, s32 flags) { + if (!mq) return 0; + + PCMessageQueueData& data = GetMsgQueueData(mq); + std::unique_lock lock(data.mtx); + + if (mq->usedCount == 0) { + if (flags == OS_MESSAGE_NOBLOCK) return 0; + // BLOCK: wait until a message arrives + data.cvReceive.wait(lock, [mq]() { return mq->usedCount > 0; }); + } + + if (msg) { + *(OSMessage*)msg = ((OSMessage*)mq->msgArray)[mq->firstIndex]; + } + mq->firstIndex = (mq->firstIndex + 1) % mq->msgCount; + mq->usedCount--; + + data.cvSend.notify_one(); + return 1; } -void OSDumpContext(OSContext* context) { - puts("OSDumpContext is a stub"); +int OSJamMessage(OSMessageQueue* mq, void* msg, s32 flags) { + if (!mq) return 0; + + PCMessageQueueData& data = GetMsgQueueData(mq); + std::unique_lock lock(data.mtx); + + if (mq->usedCount >= mq->msgCount) { + if (flags == OS_MESSAGE_NOBLOCK) return 0; + // BLOCK: wait until space is available + data.cvSend.wait(lock, [mq]() { return mq->usedCount < mq->msgCount; }); + } + + // Jam inserts at the front of the queue + mq->firstIndex = (mq->firstIndex - 1 + mq->msgCount) % mq->msgCount; + ((OSMessage*)mq->msgArray)[mq->firstIndex] = msg; + mq->usedCount++; + + data.cvReceive.notify_one(); + return 1; } -void OSSignalCond(OSCond* cond) { - puts("OSSignalCond is a stub"); -} - -void OSCreateAlarm(OSAlarm* alarm) { - puts("OSCreateAlarm is a stub"); -} - -void OSCancelAlarm(OSAlarm* alarm) { - puts("OSCancelAlarm is a stub"); -} - -s32 OSCheckActiveThreads(void) { - puts("OSCheckActiveThreads is a stub"); - - return 0; -} - -int OSCreateThread(OSThread* thread, void* (*func)(void*), void* param, void* stack, u32 stackSize, - OSPriority priority, u16 attr) { - puts("OSCreateThread is a stub"); - return 0; -} - -s32 OSDisableScheduler() { - puts("OSDisableScheduler is a stub"); - return 0; -} - -void OSDetachThread(OSThread* thread) { - puts("OSDetachThread is a stub"); -} - -OSThread* OSGetCurrentThread() { - puts("OSGetCurrentThread is a stub"); - return 0; -} - -u16 OSGetFontEncode() { - puts("OSGetFontEncode is a stub"); - return 0; -} - -char* OSGetFontTexture(char* string, void** image, s32* x, s32* y, s32* width) { - puts("OSGetFontTexture is a stub"); - return 0; -} - -char* OSGetFontWidth(char* string, s32* width) { - puts("OSGetFontWidth is a stub"); - return 0; -} - -BOOL OSGetResetButtonState() { - puts("OSGetResetButtonState is a stub"); - return FALSE; -} - -u32 OSGetStackPointer() { - puts("OSGetStackPointer is a stub"); - return 0; -} - -BOOL OSInitFont(OSFontHeader* fontData) { - puts("OSInitFont is a stub"); - return FALSE; -} - -BOOL OSLink(OSModuleInfo* newModule, void* bss) { - puts("OSLink is a stub"); - return TRUE; -} - -void OSLoadContext(OSContext* context) { - puts("OSLoadContext is a stub"); -} - -void OSResetSystem(int reset, u32 resetCode, BOOL forceMenu) { - puts("OSResetSystem is a stub"); -} - -BOOL OSRestoreInterrupts(BOOL level) { - puts("OSRestoreInterrupts is a stub"); - return FALSE; -} - -s32 OSResumeThread(OSThread* thread) { - puts("OSResumeThread is a stub"); - return 0; -} - -void OSSetCurrentContext(OSContext* context) { - puts("OSSetCurrentContext is a stub"); -} - -void OSSetStringTable(void* stringTable) { - puts("OSSetStringTable is a stub"); -} - -OSSwitchThreadCallback OSSetSwitchThreadCallback(OSSwitchThreadCallback callback) { - puts("OSSetSwitchThreadCallback is a stub"); - return NULL; -} - -int OSSetThreadPriority(OSThread* thread, s32 priority) { - puts("OSSetThreadPriority is a stub"); - return 0; -} - -void OSWaitCond(OSCond* cond, OSMutex* mutex) { - puts("OSWaitCond is a stub"); -} - -void OSYieldThread(void) { - puts("OSYieldThread is a stub"); -} - -s32 OSSuspendThread(OSThread* thread) { - puts("OSSuspendThread is a stub"); - return 0; -} - -void OSCancelThread(OSThread* thread) { - puts("OSCancelThread is a stub"); -} - -void OSTicksToCalendarTime(OSTime ticks, OSCalendarTime* td) { - puts("OSTicksToCalendarTime is a stub"); -} - -BOOL OSUnlink(OSModuleInfo* oldModule) { - puts("OSUnlink is a stub"); - return FALSE; -} - -void OSSwitchFiberEx(__REGISTER u32 param_0, __REGISTER u32 param_1, __REGISTER u32 param_2, - __REGISTER u32 param_3, __REGISTER u32 code, __REGISTER u32 stack) { - puts("OSSwitchFiberEx is a stub"); -} - -void OSWakeupThread(OSThreadQueue* queue) { - puts("OSWakeupThread is a stub"); -} - -u32 __OSGetDIConfig() { - puts("__OSGetDIConfig is a stub"); - return 0; -} - -__OSInterruptHandler __OSSetInterruptHandler(__OSInterrupt interrupt, - __OSInterruptHandler handler) { - puts("__OSSetInterruptHandler is a stub"); - return 0; -} - -OSInterruptMask __OSUnmaskInterrupts(OSInterruptMask mask) { - puts("__OSUnmaskInterrupts is a stub"); - return 0; -} - -BOOL OSEnableInterrupts() { - puts("OSEnableInterrupts is a stub"); - return FALSE; -} - -s32 OSEnableScheduler() { - puts("OSEnableScheduler is a stub"); - return 0; -} - -void OSExitThread(void* val) { - puts("OSExitThread is a stub"); -} +// ========================================================================== +// Arena Functions +// ========================================================================== static void* sArenaLo = nullptr; static void* sArenaHi = nullptr; @@ -247,86 +184,6 @@ void* OSGetArenaLo(void) { return sArenaLo; } -OSContext* OSGetCurrentContext(void) { - puts("OSGetCurrentContext is a stub"); - return NULL; -} - -u32 OSGetProgressiveMode(void) { - puts("OSGetProgressiveMode is a stub"); - return 0; -} - -u32 OSGetResetCode(void) { - puts("OSGetResetCode is a stub"); - return 0; -} - -BOOL OSGetResetSwitchState() { - puts("OSGetResetSwitchState is a stub"); - return FALSE; -} - -s32 OSGetThreadPriority(OSThread* thread) { - puts("OSGetThreadPriority is a stub"); - return 0; -} - -OSTick OSGetTick(void) { - puts("OSGetTick is a stub"); - return 0; -} - -OSTime OSGetTime(void) { - puts("OSGetTime is a stub"); - return 0; -} - -void OSInitCond(OSCond* cond) { - puts("OSInitCond is a stub"); -} - -void OSInitMessageQueue(OSMessageQueue* mq, void* msgArray, s32 msgCount) { - puts("OSInitMessageQueue is a stub"); -} - -void OSInitThreadQueue(OSThreadQueue* queue) { - puts("OSInitThreadQueue is a stub"); -} - -BOOL OSIsThreadTerminated(OSThread* thread) { - puts("OSIsThreadTerminated is a stub"); - return FALSE; -} - -int OSJamMessage(OSMessageQueue* mq, void* msg, s32 flags) { - puts("OSJamMessage is a stub"); - return 0; -} - -BOOL OSLinkFixed(OSModuleInfo* newModule, void* bss) { - puts("OSLinkFixed is a stub"); - return TRUE; -} - -void OSLockMutex(OSMutex* mutex) { - puts("OSLockMutex is a stub"); -} - -void OSProtectRange(u32 chan, void* addr, u32 nBytes, u32 control) { - puts("OSProtectRange is a stub"); -} - -int OSReceiveMessage(OSMessageQueue* mq, void* msg, s32 flags) { - puts("OSReceiveMessage is a stub"); - return 0; -} - -int OSSendMessage(OSMessageQueue* mq, void* msg, s32 flags) { - puts("OSSendMessage is a stub"); - return 0; -} - void OSSetArenaHi(void* newHi) { sArenaHi = newHi; } @@ -335,38 +192,78 @@ void OSSetArenaLo(void* newLo) { sArenaLo = newLo; } -void OSSetPeriodicAlarm(OSAlarm* alarm, OSTime start, OSTime period, OSAlarmHandler handler) { - puts("OSSetPeriodicAlarm is a stub"); -} +void* OSAllocFromArenaLo(u32 size, u32 align) { + if (!sArenaLo || !sArenaHi) return nullptr; -void OSSetProgressiveMode(u32 on) { - puts("OSSetProgressiveMode is a stub"); -} + uintptr_t lo = (uintptr_t)sArenaLo; + if (align > 0) { + lo = (lo + align - 1) & ~((uintptr_t)align - 1); + } -void OSSetSaveRegion(void* start, void* end) { - puts("OSSetSaveRegion is a stub"); -} + uintptr_t hi = (uintptr_t)sArenaHi; + if (lo + size > hi) { + OSReport("[PC-Arena] OSAllocFromArenaLo: out of arena space (need %u, have %u)\n", + size, (u32)(hi - lo)); + return nullptr; + } -OSErrorHandler OSSetErrorHandler(OSError error, OSErrorHandler handler) { - puts("OSSetErrorHandler is a stub"); - return NULL; -} - -void OSSetAlarm(OSAlarm* alarm, OSTime tick, OSAlarmHandler handler) { - puts("OSSetAlarm is a stub"); + void* result = (void*)lo; + sArenaLo = (void*)(lo + size); + return result; } void* OSInitAlloc(void* arenaStart, void* arenaEnd, int maxHeaps) { - puts("OSInitAlloc is a stub"); - return NULL; + return arenaStart; } -void OSFillFPUContext(__REGISTER OSContext* context) { - puts("OSFillFPUContext is a stub"); -} +// ========================================================================== +// Remaining OS Stubs +// ========================================================================== void OSSetSoundMode(u32 mode) {} +void OSCreateAlarm(OSAlarm* alarm) {} + +void OSCancelAlarm(OSAlarm* alarm) {} + +void OSTicksToCalendarTime(OSTime ticks, OSCalendarTime* td) { + if (td) memset(td, 0, sizeof(OSCalendarTime)); +} + +OSTick OSGetTick(void) { return 0; } +OSTime OSGetTime(void) { return 0; } + +u16 OSGetFontEncode() { return 0; } + +char* OSGetFontTexture(char* string, void** image, s32* x, s32* y, s32* width) { return 0; } +char* OSGetFontWidth(char* string, s32* width) { return 0; } + +BOOL OSGetResetButtonState() { return FALSE; } +BOOL OSInitFont(OSFontHeader* fontData) { return FALSE; } +BOOL OSLink(OSModuleInfo* newModule, void* bss) { return TRUE; } + +void OSResetSystem(int reset, u32 resetCode, BOOL forceMenu) { + OSReport("[PC] OSResetSystem called (reset=%d, code=%u)\n", reset, resetCode); +} + +void OSSetStringTable(void* stringTable) {} +BOOL OSUnlink(OSModuleInfo* oldModule) { return FALSE; } + +void OSSwitchFiberEx(__REGISTER u32 param_0, __REGISTER u32 param_1, __REGISTER u32 param_2, + __REGISTER u32 param_3, __REGISTER u32 code, __REGISTER u32 stack) {} + +u32 __OSGetDIConfig() { return 0; } +u32 OSGetProgressiveMode(void) { return 0; } +u32 OSGetResetCode(void) { return 0; } +BOOL OSGetResetSwitchState() { return FALSE; } +BOOL OSLinkFixed(OSModuleInfo* newModule, void* bss) { return TRUE; } +void OSProtectRange(u32 chan, void* addr, u32 nBytes, u32 control) {} +void OSSetPeriodicAlarm(OSAlarm* alarm, OSTime start, OSTime period, OSAlarmHandler handler) {} +void OSSetProgressiveMode(u32 on) {} +void OSSetSaveRegion(void* start, void* end) {} +OSErrorHandler OSSetErrorHandler(OSError error, OSErrorHandler handler) { return NULL; } +void OSSetAlarm(OSAlarm* alarm, OSTime tick, OSAlarmHandler handler) {} + #pragma mark SOUND void SoundChoID(int a, int b) { puts("SoundChoID is a stub"); @@ -1274,30 +1171,84 @@ void AIStopDMA(void) { #pragma mark AR #include -// Auxilary RAM doesn't exist on PC platforms, do we need to call malloc/free for these instead? -// For now, we will just stub these functions. + +// ARAM emulation: allocate a large buffer to simulate the GameCube's Auxiliary RAM. +// ARAM "addresses" are offsets into this buffer. On GameCube, ARAM is 16 MB starting +// at a base address returned by ARInit. We emulate this by malloc'ing a 16 MB buffer +// and using a simple bump allocator (matching ARAlloc behavior on real hardware). +static const u32 ARAM_EMU_SIZE = 16 * 1024 * 1024; // 16 MB (GameCube ARAM size) +static u8* sAramBuffer = nullptr; +static u32 sAramAllocPtr = 0; // bump allocator offset into sAramBuffer + +// Convert an ARAM "address" (offset) to a real host pointer +static u8* aramToHost(u32 aramAddr) { + if (!sAramBuffer || aramAddr >= ARAM_EMU_SIZE) { + return nullptr; + } + return sAramBuffer + aramAddr; +} + u32 ARAlloc(u32 length) { - puts("ARAlloc is a stub"); - return 0; + // Simple bump allocator (matching GameCube behavior - ARAlloc never frees) + u32 addr = sAramAllocPtr; + sAramAllocPtr += (length + 31) & ~31; // 32-byte align + if (sAramAllocPtr > ARAM_EMU_SIZE) { + OSReport("[ARAM] ERROR: ARAlloc overflow! Requested %u, used %u/%u\n", + length, sAramAllocPtr, ARAM_EMU_SIZE); + return 0; + } + OSReport("[ARAM] ARAlloc(%u) -> 0x%08X\n", length, addr); + return addr; } u32 ARGetSize(void) { - return 0x10000; // 64KB, this is the size of the AR memory region + return ARAM_EMU_SIZE; } u32 ARInit(u32* stack_index_addr, u32 num_entries) { - puts("ARInit is a stub"); + if (!sAramBuffer) { + sAramBuffer = (u8*)malloc(ARAM_EMU_SIZE); + if (sAramBuffer) { + memset(sAramBuffer, 0, ARAM_EMU_SIZE); + OSReport("[ARAM] Initialized %u bytes of emulated ARAM\n", ARAM_EMU_SIZE); + } else { + OSReport("[ARAM] FATAL: Failed to allocate ARAM emulation buffer!\n"); + } + } + // Return base address (start of usable ARAM, after stack entries) + sAramAllocPtr = 0; return 0; } #pragma mark ARQ void ARQPostRequest(ARQRequest* request, u32 owner, u32 type, u32 priority, u32 source, u32 dest, u32 length, ARQCallback callback) { - puts("ARQPostRequest is a stub"); + // Emulate ARAM DMA transfers using memcpy. + // type 0 = MRAM -> ARAM, type 1 = ARAM -> MRAM + if (type == ARAM_DIR_MRAM_TO_ARAM) { + // Main RAM -> ARAM: source is a host pointer (cast to u32), dest is an ARAM offset + u8* hostSrc = (u8*)(uintptr_t)source; + u8* aramDst = aramToHost(dest); + if (aramDst && hostSrc) { + memcpy(aramDst, hostSrc, length); + } + } else { + // ARAM -> Main RAM: source is an ARAM offset, dest is a host pointer (cast to u32) + u8* aramSrc = aramToHost(source); + u8* hostDst = (u8*)(uintptr_t)dest; + if (aramSrc && hostDst) { + memcpy(hostDst, aramSrc, length); + } + } + + // Immediately invoke the callback (synchronous on PC, no DMA latency) + if (callback) { + callback((u32)(uintptr_t)request); + } } void ARQInit() { - puts("ARQInit is a stub"); + // Nothing to do on PC - ARAM is initialized in ARInit } #pragma mark DVD @@ -1327,11 +1278,24 @@ int DVDCloseDir(DVDDir* dir) { return 0; } s32 DVDConvertPathToEntrynum(const char* pathPtr) { - puts("DVDConvertPathToEntrynum is a stub"); - return 0; + return DVDConvertPathToEntrynum_Emu(pathPtr); } BOOL DVDFastOpen(s32 entrynum, DVDFileInfo* fileInfo) { - puts("DVDFastOpen is a stub"); + const char* path = DVDGetPathForEntry(entrynum); + if (!path) { + OSReport("[DVD] DVDFastOpen: no path for entry %d\n", entrynum); + return FALSE; + } + u32 fileSize = DvdEmu::getFileSize(path); + if (fileSize == 0) { + OSReport("[DVD] DVDFastOpen: file not found or empty for entry %d (%s)\n", entrynum, path); + return FALSE; + } + // Repurpose startAddr to store entrynum for later DVDReadPrio lookups + fileInfo->startAddr = (u32)entrynum; + fileInfo->length = fileSize; + fileInfo->callback = NULL; + fileInfo->cb.state = 0; return TRUE; } s32 DVDGetCommandBlockStatus(const DVDCommandBlock* block) { @@ -1343,15 +1307,19 @@ DVDDiskID* DVDGetCurrentDiskID(void) { return NULL; } s32 DVDGetDriveStatus(void) { - puts("DVDGetDriveStatus is a stub"); + //puts("DVDGetDriveStatus is a stub"); return 0; } void DVDInit(void) { puts("DVDInit is a stub"); } BOOL DVDOpen(const char* fileName, DVDFileInfo* fileInfo) { - puts("DVDOpen is a stub"); - return TRUE; + s32 entryNum = DVDConvertPathToEntrynum(fileName); + if (entryNum < 0) { + OSReport("[DVD] DVDOpen: file not found: %s\n", fileName); + return FALSE; + } + return DVDFastOpen(entryNum, fileInfo); } int DVDOpenDir(const char* dirName, DVDDir* dir) { puts("DVDOpenDir is a stub"); @@ -1359,7 +1327,18 @@ int DVDOpenDir(const char* dirName, DVDDir* dir) { } BOOL DVDReadAsyncPrio(DVDFileInfo* fileInfo, void* addr, s32 length, s32 offset, DVDCallback callback, s32 prio) { - puts("DVDReadAsyncPrio is a stub"); + // Synchronous read, then invoke callback with result + s32 entryNum = (s32)fileInfo->startAddr; + const char* path = DVDGetPathForEntry(entryNum); + if (!path) { + OSReport("[DVD] DVDReadAsyncPrio: no path for entry %d\n", entryNum); + if (callback) callback(-1, fileInfo); + return FALSE; + } + u32 bytesRead = DvdEmu::loadFileToBuffer(path, addr, (u32)length, (u32)offset); + if (callback) { + callback((s32)bytesRead, fileInfo); + } return TRUE; } int DVDReadDir(DVDDir* dir, DVDDirEntry* dirent) { @@ -1367,8 +1346,14 @@ int DVDReadDir(DVDDir* dir, DVDDirEntry* dirent) { return 0; } s32 DVDReadPrio(DVDFileInfo* fileInfo, void* addr, s32 length, s32 offset, s32 prio) { - puts("DVDReadPrio is a stub"); - return 0; + s32 entryNum = (s32)fileInfo->startAddr; + const char* path = DVDGetPathForEntry(entryNum); + if (!path) { + OSReport("[DVD] DVDReadPrio: no path for entry %d\n", entryNum); + return -1; + } + u32 bytesRead = DvdEmu::loadFileToBuffer(path, addr, (u32)length, (u32)offset); + return (s32)bytesRead; } void DVDReadAbsAsyncForBS(void* a, struct bb2struct* b, int c, int d, void (*e)()) { From 97e7a8b14533318c78cdd0d9d4680ab95eccb548 Mon Sep 17 00:00:00 2001 From: Lurs <2795933+Lurs@users.noreply.github.com> Date: Fri, 20 Feb 2026 21:13:50 +0100 Subject: [PATCH 10/46] first try to draw first logo --- CMakeLists.txt | 2 + extern/aurora | 2 +- include/JSystem/J3DGraphBase/J3DFifo.h | 18 +++ include/JSystem/J3DU/J3DUClipper.h | 4 +- include/dolphin/gx/GXStruct.h | 8 ++ include/dolphin/gx/GXVert.h | 40 +++++- src/DynamicLink.cpp | 3 + src/JSystem/JFramework/JFWDisplay.cpp | 5 + src/c/c_dylink.cpp | 23 ++++ src/d/d_s_logo.cpp | 13 ++ src/dolphin/gx/GXMisc.c | 17 +++ src/dolphin/os/OSThread.cpp | 99 +++++++++++++- src/dusk/dvd_emu.cpp | 22 ++-- src/dusk/stubs.cpp | 170 ++++++++++++++++++++----- src/f_ap/f_ap_game.cpp | 11 +- src/f_op/f_op_scene_mng.cpp | 6 +- src/f_op/f_op_scene_req.cpp | 9 +- src/f_pc/f_pc_base.cpp | 4 + src/f_pc/f_pc_create_req.cpp | 7 + src/f_pc/f_pc_draw.cpp | 7 + src/f_pc/f_pc_manager.cpp | 34 ++++- src/f_pc/f_pc_node_req.cpp | 9 ++ src/f_pc/f_pc_stdcreate_req.cpp | 10 ++ src/m_Do/m_Do_DVDError.cpp | 41 ++++-- src/m_Do/m_Do_graphic.cpp | 10 ++ src/m_Do/m_Do_main.cpp | 8 ++ 26 files changed, 517 insertions(+), 65 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 058256da6c..e328369216 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,6 +7,7 @@ endif () set(CMAKE_C_STANDARD 11) set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_REQUIRED ON) if (CMAKE_SYSTEM_NAME STREQUAL Linux) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unknown-pragmas -Wno-unused-variable -Wno-unused-parameter") @@ -26,6 +27,7 @@ elseif (MSVC) add_compile_options(/Zc:strictStrings-) add_compile_options(/MP) add_compile_options(/W0) + add_compile_options(/std:c++20) endif () if (NOT MSVC) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-error -Wno-c++11-narrowing") diff --git a/extern/aurora b/extern/aurora index 223bcf39b8..928834269d 160000 --- a/extern/aurora +++ b/extern/aurora @@ -1 +1 @@ -Subproject commit 223bcf39b806f52021263d86ebe11eeffa7007f1 +Subproject commit 928834269d989109f2726fa61c66c07fc49e6475 diff --git a/include/JSystem/J3DGraphBase/J3DFifo.h b/include/JSystem/J3DGraphBase/J3DFifo.h index c93943864c..a1cd2ff5b8 100644 --- a/include/JSystem/J3DGraphBase/J3DFifo.h +++ b/include/JSystem/J3DGraphBase/J3DFifo.h @@ -16,15 +16,27 @@ inline void J3DFifoWriteXFCmdHdr(u16 addr, u8 len) { } inline void J3DFifoLoadIndx(u8 cmd, u16 indx, u16 addr) { +#ifdef TARGET_PC + GXCmd1u8(cmd); + GXCmd1u16(indx); + GXCmd1u16(addr); +#else GXWGFifo.u8 = cmd; GXWGFifo.u16 = indx; GXWGFifo.u16 = addr; +#endif } inline void J3DFifoWriteCPCmd(u8 cmd, u32 param) { +#ifdef TARGET_PC + GXCmd1u8(GX_LOAD_CP_REG); + GXCmd1u8(cmd); + GXCmd1u32(param); +#else GXWGFifo.u8 = GX_LOAD_CP_REG; GXWGFifo.u8 = cmd; GXWGFifo.u32 = param; +#endif } inline void J3DFifoLoadCPCmd(u8 reg, u32 value) { @@ -34,9 +46,15 @@ inline void J3DFifoLoadCPCmd(u8 reg, u32 value) { } inline void J3DFifoWriteXFCmd(u16 cmd, u16 len) { +#ifdef TARGET_PC + GXCmd1u8(GX_LOAD_XF_REG); + GXCmd1u16(len - 1); + GXCmd1u16(cmd); +#else GXWGFifo.u8 = GX_LOAD_XF_REG; GXWGFifo.u16 = (len - 1); GXWGFifo.u16 = cmd; +#endif } inline void J3DFifoLoadXFCmdHdr(u16 addr, u8 len) { diff --git a/include/JSystem/J3DU/J3DUClipper.h b/include/JSystem/J3DU/J3DUClipper.h index c8417b2a69..af5d655f12 100644 --- a/include/JSystem/J3DU/J3DUClipper.h +++ b/include/JSystem/J3DU/J3DUClipper.h @@ -18,8 +18,8 @@ public: void setFovy(f32 fovy) { mFovY = fovy; } void setAspect(f32 aspect) { mAspect = aspect; } - void setNear(f32 near) { mNear = near; } - void setFar(f32 far) { mFar = far; } + void setNear(f32 near_) { mNear = near_; } + void setFar(f32 far_) { mFar = far_; } f32 getFar() { return mFar; } diff --git a/include/dolphin/gx/GXStruct.h b/include/dolphin/gx/GXStruct.h index faba188d24..d460f76d55 100644 --- a/include/dolphin/gx/GXStruct.h +++ b/include/dolphin/gx/GXStruct.h @@ -36,7 +36,11 @@ typedef struct _GXColorS10 { } GXColorS10; typedef struct _GXTexObj { +#ifdef TARGET_PC + u32 dummy[22]; // Aurora's GXTexObj_ contains std::shared_ptr + many fields (~80 bytes) +#else u32 dummy[8]; +#endif } GXTexObj; typedef struct _GXLightObj { @@ -48,7 +52,11 @@ typedef struct _GXTexRegion { } GXTexRegion; typedef struct _GXTlutObj { +#ifdef TARGET_PC + u32 dummy[4]; // Aurora's GXTlutObj_ contains std::shared_ptr (8+ bytes) +#else u32 dummy[3]; +#endif } GXTlutObj; typedef struct _GXTlutRegion { diff --git a/include/dolphin/gx/GXVert.h b/include/dolphin/gx/GXVert.h index 374b87af6f..ddf01179bf 100644 --- a/include/dolphin/gx/GXVert.h +++ b/include/dolphin/gx/GXVert.h @@ -4,9 +4,45 @@ #ifdef __REVOLUTION_SDK__ #include #elif defined(TARGET_PC) -// On PC, use Aurora's GXVert declarations (extern functions implemented in -// GXVert.cpp, no hardware FIFO writes to 0xCC008000) +// On PC, include Aurora's GXVert for GXPosition/GXNormal/GXColor/GXTexCoord/GXEnd +// (extern functions implemented in Aurora's GXVert.cpp, stream-based vertex buffers) #include "../../../extern/aurora/include/dolphin/gx/GXVert.h" + +// Aurora's GXVert.h does not provide GXCmd, GXParam, GXMatrixIndex, or a valid +// GXWGFifo target. J3D code uses these for low-level display list writes. +// We declare them as extern (implemented in stubs.cpp) and provide a dummy +// GXWGFifo that writes into a throw-away buffer so direct FIFO writes don't crash. + +// Replace Aurora's GXWGFifo macro (pointing to 0xCC008000) with an extern variable +#undef GXWGFifo +#ifdef __cplusplus +extern "C" { +#endif + +// PPCWGPipe is already typedef'd by Aurora's GXVert.h above. +// Dummy FIFO sink: direct GXWGFifo writes in J3DFifo.h land here harmlessly. +extern volatile PPCWGPipe GXWGFifo; + +void GXCmd1u8(const u8 x); +void GXCmd1u16(const u16 x); +void GXCmd1u32(const u32 x); + +void GXParam1u8(const u8 x); +void GXParam1u16(const u16 x); +void GXParam1u32(const u32 x); +void GXParam1s8(const s8 x); +void GXParam1s16(const s16 x); +void GXParam1s32(const s32 x); +void GXParam1f32(const f32 x); +void GXParam3f32(const f32 x, const f32 y, const f32 z); +void GXParam4f32(const f32 x, const f32 y, const f32 z, const f32 w); + +void GXMatrixIndex1u8(const u8 x); + +#ifdef __cplusplus +} +#endif + #else #include #include diff --git a/src/DynamicLink.cpp b/src/DynamicLink.cpp index c05fa23458..83316581e5 100644 --- a/src/DynamicLink.cpp +++ b/src/DynamicLink.cpp @@ -184,8 +184,10 @@ static u32 calcSum2(u16 const* data, u32 size) { bool DynamicModuleControl::do_load() { if (mModule != NULL) { + printf("[DIAG] DynamicModuleControl::do_load(%s) already loaded\n", mName); fflush(stdout); return true; } + printf("[DIAG] DynamicModuleControl::do_load(%s) loading... sArchive=%p sFileCache=%p\n", mName, sArchive, sFileCache); fflush(stdout); JKRExpHeap* heap = mDoExt_getArchiveHeap(); s32 i = 0; while (true) { @@ -278,6 +280,7 @@ bool DynamicModuleControl::do_load() { break; } } + printf("[DIAG] DynamicModuleControl::do_load(%s) SUCCESS mModule=%p type=%d size=%d\n", mName, mModule, mResourceType, mSize); fflush(stdout); return true; } diff --git a/src/JSystem/JFramework/JFWDisplay.cpp b/src/JSystem/JFramework/JFWDisplay.cpp index eb40c484e4..7d129c4d45 100644 --- a/src/JSystem/JFramework/JFWDisplay.cpp +++ b/src/JSystem/JFramework/JFWDisplay.cpp @@ -520,8 +520,13 @@ static void JFWDrawDoneAlarm() { static void JFWGXAbortAlarmHandler(OSAlarm* param_0, OSContext* param_1) { diagnoseGpHang(); GXAbortFrame(); +#ifdef TARGET_PC + GXCmd1u8(0x61); + GXCmd1u32(0x5800000F); +#else GXWGFifo.u8 = 0x61; GXWGFifo.u32 = 0x5800000F; +#endif GXFifoObj* fifo = GXGetCPUFifo(); if (fifo != NULL) { diff --git a/src/c/c_dylink.cpp b/src/c/c_dylink.cpp index 27113d7a2a..37be56f20b 100644 --- a/src/c/c_dylink.cpp +++ b/src/c/c_dylink.cpp @@ -2,6 +2,8 @@ * c_dylink.cpp * REL to process name definitions and REL init functions */ +#include + #include "c/c_dylink.h" #include "DynamicLink.h" #include "JSystem/JKernel/JKRExpHeap.h" @@ -912,6 +914,7 @@ int cDyl_LinkASync(s16 i_ProfName) { JUT_ASSERT(266, DMC_initialized); if (!cDyl_Initialized) { + printf("[DIAG] cDyl_LinkASync: NOT initialized yet, profName=%d\n", i_ProfName); fflush(stdout); OS_REPORT_ERROR("初期化が終わってないのに呼んでもらっても困ります %d %s\n", i_ProfName, fpcDbSv_getNameString(i_ProfName)); return cPhs_INIT_e; } @@ -932,10 +935,12 @@ int cDyl_LinkASync(s16 i_ProfName) { return cPhs_COMPLEATE_e; } else { // "cDyl_LinkASync: Link failed. Returning\n" + printf("[DIAG] cDyl_LinkASync: link FAILED for profName=%d\n", i_ProfName); fflush(stdout); OSReport_Error("cDyl_LinkASync: リンクに失敗しました。諦めます\n"); return cPhs_ERROR_e; } } else { + printf("[DIAG] cDyl_LinkASync: load_async not ready for profName=%d\n", i_ProfName); fflush(stdout); return cPhs_INIT_e; } } @@ -944,16 +949,29 @@ int cDyl_LinkASync(s16 i_ProfName) { } static int cDyl_InitCallback(void* param_0) { + printf("[DIAG] cDyl_InitCallback: START\n"); fflush(stdout); JUT_ASSERT(335, !cDyl_Initialized); +#ifdef TARGET_PC + // On PC, the profile list is statically linked (g_fpcPf_ProfileList_p in f_pc_profile.cpp). + // Skip DVD-based REL loading and string table — OSLink/OSLinkFixed are stubs. + cDyl_Initialized = true; + fopScnM_CreateReq(PROC_LOGO_SCENE, 0x7FFF, 0, 0); + printf("[DIAG] cDyl_InitCallback: PROC_LOGO_SCENE created (PC path), DONE\n"); fflush(stdout); + return 1; +#else #if PLATFORM_GCN JKRHeap* parentHeap = mDoExt_getArchiveHeap(); #else JKRHeap* parentHeap = DynamicModuleControlBase::getHeap(); #endif + printf("[DIAG] cDyl_InitCallback: parentHeap=%p\n", parentHeap); fflush(stdout); JKRFileCache* loader = JKRMountDvdDrive("/", parentHeap, NULL); + printf("[DIAG] cDyl_InitCallback: JKRMountDvdDrive loader=%p\n", loader); fflush(stdout); + DynamicModuleControl::initialize(); + printf("[DIAG] cDyl_InitCallback: DynamicModuleControl::initialize done\n"); fflush(stdout); #if PLATFORM_GCN void* strTbl = JKRGetResource("/dvd/str/Final/Release/frameworkF.str"); @@ -962,17 +980,22 @@ static int cDyl_InitCallback(void* param_0) { #else void* strTbl = JKRGetResource("/dvd/str/Final/Release/frameworkF.str"); #endif + printf("[DIAG] cDyl_InitCallback: frameworkF.str=%p\n", strTbl); fflush(stdout); JKRDetachResource(strTbl, loader); JKRUnmountDvdDrive(loader); OSSetStringTable(strTbl); DynamicModuleControl dmc("f_pc_profile_lst"); + printf("[DIAG] cDyl_InitCallback: linking f_pc_profile_lst...\n"); fflush(stdout); dmc.link(); + printf("[DIAG] cDyl_InitCallback: link done\n"); fflush(stdout); cDyl_Initialized = true; fopScnM_CreateReq(PROC_LOGO_SCENE, 0x7FFF, 0, 0); + printf("[DIAG] cDyl_InitCallback: PROC_LOGO_SCENE created, DONE\n"); fflush(stdout); return 1; +#endif } static mDoDvdThd_callback_c* cDyl_DVD; diff --git a/src/d/d_s_logo.cpp b/src/d/d_s_logo.cpp index e905222717..46dbcc8a0f 100644 --- a/src/d/d_s_logo.cpp +++ b/src/d/d_s_logo.cpp @@ -3,6 +3,8 @@ * Game Boot Logo's Display */ +#include + #include "d/dolzel.h" // IWYU pragma: keep #include "d/d_s_logo.h" @@ -589,11 +591,21 @@ static int resLoad(request_of_phase_process_class* i_phase, dScnLogo_c* i_this) } int dScnLogo_c::create() { + static bool sDiagLogged = false; + if (!sDiagLogged) { + printf("[DIAG] dScnLogo_c::create START\n"); fflush(stdout); + } int phase_state = resLoad(&field_0x1c4, this); + if (!sDiagLogged) { + printf("[DIAG] dScnLogo_c::create resLoad=%d (need %d for complete)\n", phase_state, cPhs_COMPLEATE_e); fflush(stdout); + sDiagLogged = true; + } if (phase_state != cPhs_COMPLEATE_e) { return phase_state; } + printf("[DIAG] dScnLogo_c::create resLoad COMPLETE, continuing init...\n"); fflush(stdout); + #if PLATFORM_WII data_8053a730 = 1; #endif @@ -853,6 +865,7 @@ void dScnLogo_c::dvdDataLoad() { } static int dScnLogo_Create(scene_class* i_this) { + printf("[DIAG] dScnLogo_Create: entry i_this=%p\n", i_this); fflush(stdout); return (new (i_this) dScnLogo_c())->create(); } diff --git a/src/dolphin/gx/GXMisc.c b/src/dolphin/gx/GXMisc.c index 1200461d79..a3bd8c6cfb 100644 --- a/src/dolphin/gx/GXMisc.c +++ b/src/dolphin/gx/GXMisc.c @@ -135,10 +135,16 @@ void GXSetDrawDone(void) { CHECK_GXBEGIN(488, "GXSetDrawDone"); enabled = OSDisableInterrupts(); +#ifdef TARGET_PC + // On PC there is no GX GPU, so draw is always immediately done. + // Without the hardware finish interrupt, GXWaitDrawDone would deadlock. + DrawDone = 1; +#else reg = 0x45000002; GX_WRITE_RAS_REG(reg); GXFlush(); DrawDone = 0; +#endif OSRestoreInterrupts(enabled); } @@ -147,6 +153,12 @@ void GXWaitDrawDone(void) { CHECK_GXBEGIN(534, "GXWaitDrawDone"); +#ifdef TARGET_PC + // On PC there is no GX hardware — draw is always done immediately. + DrawDone = 1; + return; +#endif + enabled = OSDisableInterrupts(); while (!DrawDone) { OSSleepThread(&FinishQueue); @@ -156,6 +168,11 @@ void GXWaitDrawDone(void) { void GXDrawDone(void) { CHECK_GXBEGIN(566, "GXDrawDone"); +#ifdef TARGET_PC + // On PC, no GPU to wait for — return immediately. + DrawDone = 1; + return; +#endif GXSetDrawDone(); GXWaitDrawDone(); } diff --git a/src/dolphin/os/OSThread.cpp b/src/dolphin/os/OSThread.cpp index 74fffaa4e5..96ef2bcfff 100644 --- a/src/dolphin/os/OSThread.cpp +++ b/src/dolphin/os/OSThread.cpp @@ -313,7 +313,7 @@ int OSCreateThread(OSThread* thread, void* (*func)(void*), void* param, // ============================================================================ // Resume / Suspend // ============================================================================ - +/* s32 OSResumeThread(OSThread* thread) { if (!thread) return 0; @@ -365,6 +365,103 @@ s32 OSSuspendThread(OSThread* thread) { return prevSuspend; } +*/ + +// ============================================================================ +// Resume / Suspend +// ============================================================================ + +s32 OSResumeThread(OSThread* thread) { + if (!thread) + return 0; + + s32 prevSuspend = thread->suspend; + if (thread->suspend > 0) { + thread->suspend--; + } + + // Only wake up if suspend count drops to 0 + if (thread->suspend == 0) { + PCThreadData* data = nullptr; + + // Lock the global map to safely retrieve our thread data pointer + { + std::lock_guard mapLock(GetThreadDataMutex()); + auto it = GetThreadDataMap().find(thread); + if (it != GetThreadDataMap().end()) { + data = it->second.get(); + } + } + + if (data) { + // Lock the specific thread mutex to safely modify state and notify + std::unique_lock threadLock(data->mtx); + + if (!data->started) { + // First resume: launch the native thread + data->started = true; + data->suspended = false; + + // Unlock before launching to avoid potential deadlocks in thread initialization + threadLock.unlock(); + + data->nativeThread = std::thread(ThreadEntryWrapper, thread, data); + data->nativeThread.detach(); + OSReport("[PC-OSThread] Started thread %p\n", thread); + } else { + // Resume from suspension: signal the condition variable + // IMPORTANT: Set suspended to false BEFORE notifying to pass the wait predicate + data->suspended = false; + data->cv.notify_all(); + } + } + } + + return prevSuspend; +} + +s32 OSSuspendThread(OSThread* thread) { + if (!thread) + return 0; + + s32 prevSuspend = thread->suspend; + thread->suspend++; + + // If transitioning from running (0) to suspended (1) + if (prevSuspend == 0) { + PCThreadData* data = nullptr; + + // Lock the global map to find our thread data + { + std::lock_guard mapLock(GetThreadDataMutex()); + auto it = GetThreadDataMap().find(thread); + if (it != GetThreadDataMap().end()) { + data = it->second.get(); + } + } + + if (data && data->started) { + std::unique_lock threadLock(data->mtx); + data->suspended = true; + + // FIX: If the thread is suspending ITSELF, we must block execution here. + // This replicates the GameCube behavior where OSSuspendThread yields the CPU + // immediately. + if (thread == OSGetCurrentThread()) { + // Block until 'suspended' becomes false (set by OSResumeThread) + // The predicate protects against spurious wakeups. + data->cv.wait(threadLock, [data] { return !data->suspended; }); + } else { + // NOTE: Suspending *other* threads is difficult in C++ std::thread + // without cooperative checkpoints or platform-specific hacks. + // For now, we only set the flag. The target thread would need to check 'suspended' + // periodically. + } + } + } + + return prevSuspend; +} // ============================================================================ // Sleep / Wakeup (thread queue based) diff --git a/src/dusk/dvd_emu.cpp b/src/dusk/dvd_emu.cpp index 67a541c62d..6c886a4372 100644 --- a/src/dusk/dvd_emu.cpp +++ b/src/dusk/dvd_emu.cpp @@ -51,7 +51,7 @@ void setBasePath(const char* path) { g_basePath() = path; #endif - OSReport("[DvdEmu] Base path set to: %s\n", g_basePath().c_str()); + printf("[DvdEmu] Base path set to: %s\n", g_basePath().c_str()); fflush(stdout); } const char* getBasePath() { @@ -93,9 +93,9 @@ bool fileExists(const char* gcPath) { #endif if (exists) { - OSReport("[DvdEmu] FOUND: %s\n", gcPath); + printf("[DvdEmu] FOUND: %s\n", gcPath); fflush(stdout); } else { - OSReport("[DvdEmu] MISSING: %s\n", gcPath); + printf("[DvdEmu] MISSING: %s\n", gcPath); fflush(stdout); } return exists; @@ -116,11 +116,11 @@ u32 getFileSize(const char* gcPath) { void* loadFile(const char* gcPath, u32* outSize, void* heap) { std::string fullPath = convertPath(gcPath); - OSReport("[DvdEmu] Loading request: '%s'\n", gcPath); + printf("[DvdEmu] Loading request: '%s'\n", gcPath); fflush(stdout); FILE* f = fopen(fullPath.c_str(), "rb"); if (!f) { - OSReport("[DvdEmu] ERROR: Failed to open file at physical path: %s\n", fullPath.c_str()); + printf("[DvdEmu] ERROR: Failed to open file at physical path: %s\n", fullPath.c_str()); fflush(stdout); if (outSize) *outSize = 0; return nullptr; @@ -139,7 +139,7 @@ void* loadFile(const char* gcPath, u32* outSize, void* heap) { #endif if (!data) { - OSReport("[DvdEmu] FATAL: Failed to allocate %u bytes for %s\n", size, gcPath); + printf("[DvdEmu] FATAL: Failed to allocate %u bytes for %s\n", size, gcPath); fflush(stdout); fclose(f); if (outSize) *outSize = 0; @@ -150,14 +150,14 @@ void* loadFile(const char* gcPath, u32* outSize, void* heap) { fclose(f); if (bytesRead != size) { - OSReport("[DvdEmu] WARNING: Read error: expected %u, got %u for %s\n", size, bytesRead, - gcPath); + printf("[DvdEmu] WARNING: Read error: expected %u, got %u for %s\n", size, bytesRead, + gcPath); fflush(stdout); } if (outSize) *outSize = bytesRead; - OSReport("[DvdEmu] SUCCESS: Loaded %s (%u bytes)\n", gcPath, bytesRead); + printf("[DvdEmu] SUCCESS: Loaded %s (%u bytes)\n", gcPath, bytesRead); fflush(stdout); return data; } @@ -166,7 +166,7 @@ u32 loadFileToBuffer(const char* gcPath, void* buffer, u32 bufferSize, u32 offse FILE* f = fopen(fullPath.c_str(), "rb"); if (!f) { - OSReport("[DvdEmu] Failed to open file for buffer load: %s\n", fullPath.c_str()); + printf("[DvdEmu] Failed to open file for buffer load: %s\n", fullPath.c_str()); fflush(stdout); return 0; } @@ -186,7 +186,7 @@ u32 loadFileToBuffer(const char* gcPath, void* buffer, u32 bufferSize, u32 offse s32 DVDConvertPathToEntrynum_Emu(const char* path) { if (!DvdEmu::fileExists(path)) { - OSReport("[DVD] Error: File not found for entrynum conversion: %s\n", path); + printf("[DVD] Error: File not found for entrynum conversion: %s\n", path); fflush(stdout); return -1; } diff --git a/src/dusk/stubs.cpp b/src/dusk/stubs.cpp index 95df5128e5..722a005989 100644 --- a/src/dusk/stubs.cpp +++ b/src/dusk/stubs.cpp @@ -11,10 +11,60 @@ #include #include +/* +#ifndef _WIN32 +#include +#include +#include +#if __APPLE__ +#include +#endif +#endif + +#ifdef _WIN32 +#define WIN32_LEAN_AND_MEAN +#define NOMINMAX +#include + +#undef IN +#undef OUT +#endif + +#if __APPLE__ +static u64 MachToDolphinNum; +static u64 MachToDolphinDenom; +#elif _WIN32 +static LARGE_INTEGER PerfFrequency; +#endif + +*/ + // ========================================================================== // General OS // ========================================================================== + +// Credits: Super Monkey Ball +/* +static u64 GetGCTicks() { +#if __APPLE__ + return mach_absolute_time() * MachToDolphinNum / MachToDolphinDenom; +#elif __linux__ || __FreeBSD__ + struct timespec tp; + clock_gettime(CLOCK_MONOTONIC, &tp); + + return ((tp.tv_sec * 1000000000ull) + tp.tv_nsec) * OS_CORE_CLOCK / 1000000000ull; +#elif _WIN32 + LARGE_INTEGER perf; + QueryPerformanceCounter(&perf); + perf.QuadPart *= OS_CORE_CLOCK; + perf.QuadPart /= PerfFrequency.QuadPart; + return perf.QuadPart; +#else + return 0; +#endif +} */ + u32 OSGetConsoleType() { return OS_CONSOLE_RETAIL1; } @@ -230,8 +280,15 @@ void OSTicksToCalendarTime(OSTime ticks, OSCalendarTime* td) { if (td) memset(td, 0, sizeof(OSCalendarTime)); } -OSTick OSGetTick(void) { return 0; } -OSTime OSGetTime(void) { return 0; } +OSTime OSGetTime(void) { + //return (OSTime)GetGCTicks(); + return 0; +} + +OSTick OSGetTick(void) { + //return (OSTick)GetGCTicks(); + return 0; +} u16 OSGetFontEncode() { return 0; } @@ -250,7 +307,13 @@ void OSSetStringTable(void* stringTable) {} BOOL OSUnlink(OSModuleInfo* oldModule) { return FALSE; } void OSSwitchFiberEx(__REGISTER u32 param_0, __REGISTER u32 param_1, __REGISTER u32 param_2, - __REGISTER u32 param_3, __REGISTER u32 code, __REGISTER u32 stack) {} + __REGISTER u32 param_3, __REGISTER u32 code, __REGISTER u32 stack) { + // On PC, call the function directly instead of switching stacks. + // The PPC version switches to 'stack' and calls code(param_0, param_1). + // Only caller is mDoPrintf_vprintf_Interrupt: OSSwitchFiberEx(fmt, args, 0, 0, vprintf, sp) + typedef void (*Func2)(u32, u32); + ((Func2)(uintptr_t)code)(param_0, param_1); +} u32 __OSGetDIConfig() { return 0; } u32 OSGetProgressiveMode(void) { return 0; } @@ -512,30 +575,35 @@ void LCEnable() { #pragma mark VI -static VIRetraceCallback sVIRetraceCallback = NULL; +// VI retrace emulation: on GameCube, the VI chip fires a hardware interrupt at +// every VSync (~60Hz). This triggers pre/post retrace callbacks, which in turn +// send messages to JUTVideo's message queue. waitForTick() blocks on that queue. +// On PC, we simulate this by calling VIWaitForRetrace() once per frame in the +// main loop, which increments the retrace counter and fires the callbacks. +static u32 sRetraceCount = 0; +static VIRetraceCallback sVIPreRetraceCallback = NULL; +static VIRetraceCallback sVIPostRetraceCallback = NULL; extern "C" { void VIConfigure(const GXRenderModeObj* rm) { - puts("VIConfigure is a stub"); + // puts("VIConfigure is a stub"); } void VIConfigurePan(u16 xOrg, u16 yOrg, u16 width, u16 height) { - puts("VIConfigurePan is a stub"); + // puts("VIConfigurePan is a stub"); } u32 VIGetRetraceCount() { - // puts("VIGetRetraceCount is a stub"); - return 0; // TODO this might be important + return sRetraceCount; } u32 VIGetNextField() { - puts("VIGetNextField is a stub"); return 0; } void VISetBlack(BOOL black) { - puts("VISetBlack is a stub"); + // puts("VISetBlack is a stub"); } void VISetNextFrameBuffer(void* fb) { @@ -543,34 +611,37 @@ void VISetNextFrameBuffer(void* fb) { } void VIWaitForRetrace() { - if (sVIRetraceCallback) { - sVIRetraceCallback(0); + sRetraceCount++; + if (sVIPreRetraceCallback) { + sVIPreRetraceCallback(sRetraceCount); + } + if (sVIPostRetraceCallback) { + sVIPostRetraceCallback(sRetraceCount); } } void* VIGetCurrentFrameBuffer(void) { - puts("VIGetCurrentFrameBuffer is a stub"); return NULL; } u32 VIGetDTVStatus(void) { - puts("VIGetDTVStatus is a stub"); return 0; } void* VIGetNextFrameBuffer(void) { - puts("VIGetNextFrameBuffer is a stub"); return NULL; } VIRetraceCallback VISetPostRetraceCallback(VIRetraceCallback callback) { - sVIRetraceCallback = callback; - return callback; + VIRetraceCallback old = sVIPostRetraceCallback; + sVIPostRetraceCallback = callback; + return old; } VIRetraceCallback VISetPreRetraceCallback(VIRetraceCallback cb) { - puts("VISetPreRetraceCallback is a stub"); - return cb; + VIRetraceCallback old = sVIPreRetraceCallback; + sVIPreRetraceCallback = cb; + return old; } } // extern "C" @@ -1396,19 +1467,58 @@ void GDSetVtxDescv(const GXVtxDescList* attrPtr) { #pragma mark GX #include +// Dummy FIFO sink for direct GXWGFifo writes in J3D code (e.g. J3DFifo.h). +// On GameCube these write to the GX command processor at 0xCC008000. +// On PC, writes land here harmlessly and are discarded. +volatile PPCWGPipe GXWGFifo; + +// GXCmd/GXParam/GXMatrixIndex: low-level command FIFO functions used by J3D. +// Route through Aurora's software FIFO so display list data is actually recorded. +// +// We forward-declare Aurora's FIFO functions with explicit stdint types instead of +// including fifo.hpp, because the game's u32 (unsigned long) differs from Aurora's +// u32 (uint32_t = unsigned int on MSVC). Including fifo.hpp would resolve its u32 +// parameter types to the game's unsigned long (since game headers are included first +// and set the include guards), causing MSVC name mangling mismatches at link time. +namespace aurora::gfx::fifo { + void write_u8(uint8_t val); + void write_u16(uint16_t val); + void write_u32(uint32_t val); + void write_f32(float val); +} + +// Cast to stdint types: game headers define u32=unsigned long, but Aurora uses +// uint32_t=unsigned int. Both are 32-bit on Win32 but have different MSVC name mangling. +void GXCmd1u8(const u8 x) { aurora::gfx::fifo::write_u8(static_cast(x)); } +void GXCmd1u16(const u16 x) { aurora::gfx::fifo::write_u16(static_cast(x)); } +void GXCmd1u32(const u32 x) { aurora::gfx::fifo::write_u32(static_cast(x)); } + +void GXParam1u8(const u8 x) { aurora::gfx::fifo::write_u8(static_cast(x)); } +void GXParam1u16(const u16 x) { aurora::gfx::fifo::write_u16(static_cast(x)); } +void GXParam1u32(const u32 x) { aurora::gfx::fifo::write_u32(static_cast(x)); } +void GXParam1s8(const s8 x) { aurora::gfx::fifo::write_u8(static_cast(x)); } +void GXParam1s16(const s16 x) { aurora::gfx::fifo::write_u16(static_cast(x)); } +void GXParam1s32(const s32 x) { aurora::gfx::fifo::write_u32(static_cast(x)); } +void GXParam1f32(const f32 x) { aurora::gfx::fifo::write_f32(x); } +void GXParam3f32(const f32 x, const f32 y, const f32 z) { + aurora::gfx::fifo::write_f32(x); + aurora::gfx::fifo::write_f32(y); + aurora::gfx::fifo::write_f32(z); +} +void GXParam4f32(const f32 x, const f32 y, const f32 z, const f32 w) { + aurora::gfx::fifo::write_f32(x); + aurora::gfx::fifo::write_f32(y); + aurora::gfx::fifo::write_f32(z); + aurora::gfx::fifo::write_f32(w); +} + +void GXMatrixIndex1u8(const u8 x) { aurora::gfx::fifo::write_u8(static_cast(x)); } + // Moved-in GX helpers and helpers for metrics/project void __GXSetSUTexSize() { puts("__GXSetSUTexSize is a stub"); } -void __GXSetVAT() { - puts("__GXSetVAT is a stub"); -} -void __GXSetVCD() { - puts("__GXSetVCD is a stub"); -} -void __GXUpdateBPMask() { - puts("__GXUpdateBPMask is a stub"); -} +// __GXSetVAT, __GXSetVCD, __GXUpdateBPMask: now provided by Aurora's GXManage.cpp (fifo branch) void GXSetGPMetric(GXPerf0 perf0, GXPerf1 perf1) { // puts("GXSetGPMetric is a stub"); @@ -1494,9 +1604,7 @@ void GXProject(f32 x, f32 y, f32 z, const f32 mtx[3][4], const f32* pm, const f3 void GXAbortFrame(void) { puts("GXAbortFrame is a stub"); } -void GXEnableTexOffsets(GXTexCoordID coord, u8 line_enable, u8 point_enable) { - puts("GXEnableTexOffsets is a stub"); -} +// GXEnableTexOffsets: now provided by Aurora's GXGeometry.cpp (fifo branch) OSThread* GXGetCurrentGXThread(void) { puts("GXGetCurrentGXThread is a stub"); return NULL; diff --git a/src/f_ap/f_ap_game.cpp b/src/f_ap/f_ap_game.cpp index b03bdc2561..2db1399d2b 100644 --- a/src/f_ap/f_ap_game.cpp +++ b/src/f_ap/f_ap_game.cpp @@ -720,11 +720,20 @@ void fapGm_After() { } void fapGm_Execute() { + static u32 sExecCount = 0; + if (sExecCount < 10 || (sExecCount % 300 == 0)) { + printf("[DIAG] fapGm_Execute frame=%d\n", sExecCount); + fflush(stdout); + } + sExecCount++; + #if DEBUG JUTDbPrint::getManager()->setCharColor(g_HIO.mColor); #endif - fpcM_Management(NULL, fapGm_After); + printf("[DIAG] fapGm_Execute: entering fpcM_Management...\n"); fflush(stdout); + fpcM_Management(NULL, fapGm_After); + printf("[DIAG] fapGm_Execute: fpcM_Management returned\n"); fflush(stdout); cCt_Counter(0); } diff --git a/src/f_op/f_op_scene_mng.cpp b/src/f_op/f_op_scene_mng.cpp index ba1f322139..7f40ccd845 100644 --- a/src/f_op/f_op_scene_mng.cpp +++ b/src/f_op/f_op_scene_mng.cpp @@ -7,6 +7,7 @@ #include "JSystem/JUtility/JUTAssert.h" #include "f_op/f_op_scene_iter.h" #include "f_op/f_op_scene_req.h" +#include scene_class* fopScnM_SearchByID(fpc_ProcID id) { return (scene_class*)fopScnIt_Judge((fop_ScnItFunc)fpcSch_JudgeByID, &id); @@ -29,7 +30,10 @@ fpc_ProcID fopScnM_DeleteReq(scene_class* i_scene) { } int fopScnM_CreateReq(s16 i_procName, s16 param_2, u16 param_3, u32 i_data) { - return fopScnRq_Request(0, 0, i_procName, (void*)i_data, param_2, param_3) != fpcM_ERROR_PROCESS_ID_e; + printf("[DIAG] fopScnM_CreateReq: procName=%d fade=%d\n", i_procName, param_2); fflush(stdout); + fpc_ProcID result = fopScnRq_Request(0, 0, i_procName, (void*)i_data, param_2, param_3); + printf("[DIAG] fopScnM_CreateReq: result=%d (error=%d)\n", result, fpcM_ERROR_PROCESS_ID_e); fflush(stdout); + return result != fpcM_ERROR_PROCESS_ID_e; } u32 fopScnM_ReRequest(s16 i_procName, u32 i_data) { diff --git a/src/f_op/f_op_scene_req.cpp b/src/f_op/f_op_scene_req.cpp index 17dd3c4059..05a44e10f1 100644 --- a/src/f_op/f_op_scene_req.cpp +++ b/src/f_op/f_op_scene_req.cpp @@ -9,6 +9,7 @@ #include "f_op/f_op_scene_pause.h" #include "f_pc/f_pc_executor.h" #include "f_pc/f_pc_manager.h" +#include static cPhs_Step fopScnRq_phase_ClearOverlap(scene_request_class* i_sceneReq) { return fopOvlpM_ClearOfReq() == 1 ? cPhs_NEXT_e : cPhs_INIT_e; @@ -16,7 +17,13 @@ static cPhs_Step fopScnRq_phase_ClearOverlap(scene_request_class* i_sceneReq) { } static cPhs_Step fopScnRq_phase_Execute(scene_request_class* i_sceneReq) { - return fpcNdRq_Execute(&i_sceneReq->create_request); + static int sExecLogCount = 0; + cPhs_Step ret = (cPhs_Step)fpcNdRq_Execute(&i_sceneReq->create_request); + if (sExecLogCount < 30) { + printf("[DIAG] fopScnRq_phase_Execute: ret=%d name=%d\n", ret, i_sceneReq->create_request.name); fflush(stdout); + sExecLogCount++; + } + return ret; } static cPhs_Step fopScnRq_phase_IsDoingOverlap(scene_request_class* i_sceneReq) { diff --git a/src/f_pc/f_pc_base.cpp b/src/f_pc/f_pc_base.cpp index 36af52f905..8e2e3f6a5e 100644 --- a/src/f_pc/f_pc_base.cpp +++ b/src/f_pc/f_pc_base.cpp @@ -14,6 +14,7 @@ #include "f_pc/f_pc_profile.h" #include "f_pc/f_pc_debug_sv.h" #include "Z2AudioLib/Z2AudioMgr.h" +#include BOOL fpcBs_Is_JustOfType(int i_typeA, int i_typeB) { if (i_typeB == i_typeA) { @@ -118,10 +119,13 @@ base_process_class* fpcBs_Create(s16 i_profname, fpc_ProcID i_procID, void* i_ap u32 size; pprofile = (process_profile_definition*)fpcPf_Get(i_profname); + printf("[DIAG] fpcBs_Create: profname=%d profile=%p procSize=%d unkSize=%d\n", + i_profname, pprofile, pprofile->process_size, pprofile->unk_size); fflush(stdout); size = pprofile->process_size + pprofile->unk_size; pprocess = (base_process_class*)cMl::memalignB(-4, size); if (pprocess == NULL) { + printf("[DIAG] fpcBs_Create: memalignB FAILED for size=%u\n", size); fflush(stdout); return NULL; } diff --git a/src/f_pc/f_pc_create_req.cpp b/src/f_pc/f_pc_create_req.cpp index 5e54f21ea4..3ea29645ae 100644 --- a/src/f_pc/f_pc_create_req.cpp +++ b/src/f_pc/f_pc_create_req.cpp @@ -11,6 +11,7 @@ #include "f_pc/f_pc_executor.h" #include "f_pc/f_pc_layer.h" #include "f_pc/f_pc_debug_sv.h" +#include BOOL fpcCtRq_isCreatingByID(create_tag* i_createTag, fpc_ProcID* i_id) { fpc_ProcID id = ((create_request*)i_createTag->base.mpTagData)->id; @@ -91,6 +92,12 @@ BOOL fpcCtRq_Do(create_request* i_request) { } } + static int sCtRqDoLogCount = 0; + if (sCtRqDoLogCount < 30) { + printf("[DIAG] fpcCtRq_Do: phase=%d process=%p\n", phase, i_request->process); fflush(stdout); + sCtRqDoLogCount++; + } + switch (phase) { case cPhs_COMPLEATE_e: { if (fpcEx_ToExecuteQ(i_request->process) == 0) diff --git a/src/f_pc/f_pc_draw.cpp b/src/f_pc/f_pc_draw.cpp index 5a5b220f82..0a3162793a 100644 --- a/src/f_pc/f_pc_draw.cpp +++ b/src/f_pc/f_pc_draw.cpp @@ -8,6 +8,7 @@ #include "f_pc/f_pc_leaf.h" #include "f_pc/f_pc_node.h" #include "f_pc/f_pc_pause.h" +#include int fpcDw_Execute(base_process_class* i_proc) { if (!fpcPause_IsEnable(i_proc, 2)) { @@ -32,9 +33,15 @@ int fpcDw_Execute(base_process_class* i_proc) { } int fpcDw_Handler(fpcDw_HandlerFuncFunc i_iterHandler, fpcDw_HandlerFunc i_func) { + static int sDwLogCount = 0; int ret; + if (sDwLogCount < 5) { printf("[DIAG] fpcDw_Handler: before BeforeOfDraw\n"); fflush(stdout); } cAPIGph_BeforeOfDraw(); + if (sDwLogCount < 5) { printf("[DIAG] fpcDw_Handler: before draw iteration\n"); fflush(stdout); } ret = i_iterHandler(i_func); + if (sDwLogCount < 5) { printf("[DIAG] fpcDw_Handler: before AfterOfDraw\n"); fflush(stdout); } cAPIGph_AfterOfDraw(); + if (sDwLogCount < 5) { printf("[DIAG] fpcDw_Handler: done\n"); fflush(stdout); } + sDwLogCount++; return ret; } diff --git a/src/f_pc/f_pc_manager.cpp b/src/f_pc/f_pc_manager.cpp index 612c4d9a6e..1ecb2b7473 100644 --- a/src/f_pc/f_pc_manager.cpp +++ b/src/f_pc/f_pc_manager.cpp @@ -20,6 +20,7 @@ #include "f_pc/f_pc_pause.h" #include "f_pc/f_pc_priority.h" #include "m_Do/m_Do_controller_pad.h" +#include void fpcM_Draw(void* i_proc) { fpcDw_Execute((base_process_class*)i_proc); @@ -42,16 +43,26 @@ BOOL fpcM_IsCreating(fpc_ProcID i_id) { } void fpcM_Management(fpcM_ManagementFunc i_preExecuteFn, fpcM_ManagementFunc i_postExecuteFn) { + static int sMgmtLogCount = 0; + MtxInit(); if (!fapGm_HIO_c::isCaptureScreen()) { dComIfGd_peekZdata(); } fapGm_HIO_c::executeCaptureScreen(); - if (!dShutdownErrorMsg_c::execute()) { + bool shutdownRet = dShutdownErrorMsg_c::execute(); + if (sMgmtLogCount < 10) { + printf("[DIAG] fpcM_Management: shutdown=%d\n", shutdownRet); fflush(stdout); + } + if (!shutdownRet) { static bool l_dvdError = false; - if (!dDvdErrorMsg_c::execute()) { + bool dvdErrRet = dDvdErrorMsg_c::execute(); + if (sMgmtLogCount < 10) { + printf("[DIAG] fpcM_Management: dvdError=%d\n", dvdErrRet); fflush(stdout); + } + if (!dvdErrRet) { if (l_dvdError) { dLib_time_c::startTime(); Z2GetSoundMgr()->pauseAllGameSound(false); @@ -60,36 +71,55 @@ void fpcM_Management(fpcM_ManagementFunc i_preExecuteFn, fpcM_ManagementFunc i_p cAPIGph_Painter(); + if (sMgmtLogCount < 10) { printf("[DIAG] fpcM_Management: after cAPIGph_Painter\n"); fflush(stdout); } + if (!dPa_control_c::isStatus(1)) { fpcDt_Handler(); } else { dPa_control_c::offStatus(1); } + if (sMgmtLogCount < 10) { printf("[DIAG] fpcM_Management: after fpcDt_Handler\n"); fflush(stdout); } + if (!fpcPi_Handler()) { JUT_ASSERT(353, FALSE); } + if (sMgmtLogCount < 10) { printf("[DIAG] fpcM_Management: after fpcPi_Handler\n"); fflush(stdout); } + if (!fpcCt_Handler()) { JUT_ASSERT(357, FALSE); } + if (sMgmtLogCount < 10) { printf("[DIAG] fpcM_Management: after fpcCt_Handler\n"); fflush(stdout); } + if (i_preExecuteFn != NULL) { i_preExecuteFn(); } + if (sMgmtLogCount < 10) { printf("[DIAG] fpcM_Management: after preExecute\n"); fflush(stdout); } + if (!fapGm_HIO_c::isCaptureScreen()) { fpcEx_Handler((fpcLnIt_QueueFunc)fpcM_Execute); } + + if (sMgmtLogCount < 10) { printf("[DIAG] fpcM_Management: after fpcEx_Handler\n"); fflush(stdout); } + if (!fapGm_HIO_c::isCaptureScreen() || fapGm_HIO_c::getCaptureScreenDivH() != 1) { fpcDw_Handler((fpcDw_HandlerFuncFunc)fpcM_DrawIterater, (fpcDw_HandlerFunc)fpcM_Draw); } + if (sMgmtLogCount < 10) { printf("[DIAG] fpcM_Management: after fpcDw_Handler\n"); fflush(stdout); } + if (i_postExecuteFn != NULL) { + if (sMgmtLogCount < 10) { + printf("[DIAG] fpcM_Management: calling postExecuteFn (fapGm_After)\n"); fflush(stdout); + } i_postExecuteFn(); } dComIfGp_drawSimpleModel(); + sMgmtLogCount++; } else if (!l_dvdError) { dLib_time_c::stopTime(); Z2GetSoundMgr()->pauseAllGameSound(true); diff --git a/src/f_pc/f_pc_node_req.cpp b/src/f_pc/f_pc_node_req.cpp index 34be4b85ff..7ecf1ea7e1 100644 --- a/src/f_pc/f_pc_node_req.cpp +++ b/src/f_pc/f_pc_node_req.cpp @@ -12,6 +12,7 @@ #include "f_pc/f_pc_stdcreate_req.h" #include "f_pc/f_pc_manager.h" #include "f_pc/f_pc_debug_sv.h" +#include void fpcNdRq_RequestQTo(node_create_request* i_request) { fpcLy_CreatedMesg(i_request->layer); @@ -47,10 +48,12 @@ int fpcNdRq_phase_IsCreated(node_create_request* i_request) { } int fpcNdRq_phase_Create(node_create_request* i_request) { + printf("[DIAG] fpcNdRq_phase_Create: name=%d layer=%p\n", i_request->name, i_request->layer); fflush(stdout); i_request->creating_id = fpcSCtRq_Request(i_request->layer, i_request->name, (stdCreateFunc)i_request->create_req_methods->post_method, i_request, i_request->data); + printf("[DIAG] fpcNdRq_phase_Create: creating_id=%d (error=%d)\n", i_request->creating_id, fpcM_ERROR_PROCESS_ID_e); fflush(stdout); if (i_request->creating_id == fpcM_ERROR_PROCESS_ID_e) { return cPhs_UNK3_e; } @@ -140,6 +143,12 @@ int fpcNdRq_Cancel(node_create_request* i_request) { int fpcNdRq_Handler() { node_class* node = l_fpcNdRq_Queue.mpHead; + static int sNdRqLogCount = 0; + if (l_fpcNdRq_Queue.mSize > 0 && sNdRqLogCount < 30) { + printf("[DIAG] fpcNdRq_Handler: queue size=%d\n", l_fpcNdRq_Queue.mSize); fflush(stdout); + sNdRqLogCount++; + } + #if DEBUG if (g_fpcDbSv_service[9] != NULL) { g_fpcDbSv_service[9](&l_fpcNdRq_Queue.mSize); diff --git a/src/f_pc/f_pc_stdcreate_req.cpp b/src/f_pc/f_pc_stdcreate_req.cpp index 9f56391dd2..4600ee2ba5 100644 --- a/src/f_pc/f_pc_stdcreate_req.cpp +++ b/src/f_pc/f_pc_stdcreate_req.cpp @@ -9,9 +9,11 @@ #include "f_pc/f_pc_manager.h" #include "f_pc/f_pc_debug_sv.h" #include +#include int fpcSCtRq_phase_Load(standard_create_request_class* i_request) { int ret = fpcLd_Load(i_request->process_name); + printf("[DIAG] fpcSCtRq_phase_Load: procName=%d ret=%d\n", i_request->process_name, ret); fflush(stdout); switch (ret) { case cPhs_INIT_e: @@ -26,15 +28,18 @@ int fpcSCtRq_phase_Load(standard_create_request_class* i_request) { } int fpcSCtRq_phase_CreateProcess(standard_create_request_class* i_request) { + printf("[DIAG] fpcSCtRq_phase_CreateProcess: procName=%d\n", i_request->process_name); fflush(stdout); fpcLy_SetCurrentLayer(i_request->base.layer); i_request->base.process = fpcBs_Create(i_request->process_name, i_request->base.id, i_request->process_append); if (i_request->base.process == NULL) { + printf("[DIAG] fpcSCtRq_phase_CreateProcess: fpcBs_Create FAILED for procName=%d\n", i_request->process_name); fflush(stdout); OS_REPORT("fpcSCtRq_phase_CreateProcess %d\n", i_request->process_name); fpcLd_Free(i_request->process_name); return cPhs_ERROR_e; } else { + printf("[DIAG] fpcSCtRq_phase_CreateProcess: fpcBs_Create OK proc=%p\n", i_request->base.process); fflush(stdout); i_request->base.process->create_req = &i_request->base; return cPhs_NEXT_e; } @@ -43,6 +48,11 @@ int fpcSCtRq_phase_CreateProcess(standard_create_request_class* i_request) { int fpcSCtRq_phase_SubCreateProcess(standard_create_request_class* i_request) { fpcLy_SetCurrentLayer(i_request->base.layer); int ret = fpcBs_SubCreate(i_request->base.process); + static int sSubCreateLogCount = 0; + if (sSubCreateLogCount < 20) { + printf("[DIAG] fpcSCtRq_phase_SubCreateProcess: procName=%d ret=%d\n", i_request->process_name, ret); fflush(stdout); + sSubCreateLogCount++; + } #if DEBUG if (ret == 0 && i_request->unk_0x60-- <= 0) { diff --git a/src/m_Do/m_Do_DVDError.cpp b/src/m_Do/m_Do_DVDError.cpp index d4884aeb1c..e5c6e524a1 100644 --- a/src/m_Do/m_Do_DVDError.cpp +++ b/src/m_Do/m_Do_DVDError.cpp @@ -4,11 +4,15 @@ */ #include "m_Do/m_Do_DVDError.h" -#include "JSystem/JKernel/JKRAssertHeap.h" #include +#include "JSystem/JKernel/JKRAssertHeap.h" +#include "m_Do/m_Do_Reset.h" #include "m_Do/m_Do_dvd_thread.h" #include "m_Do/m_Do_ext.h" -#include "m_Do/m_Do_Reset.h" + +// Added for the sleep workaround +#include +#include #if PLATFORM_GCN const int stack_size = 3072; @@ -16,7 +20,6 @@ const int stack_size = 3072; const int stack_size = 8192; #endif - bool mDoDvdErr_initialized; static OSThread DvdErr_thread; @@ -26,20 +29,24 @@ static OSThread DvdErr_thread; static u8 DvdErr_stack[stack_size] ATTRIBUTE_ALIGN(16); #pragma pop -static OSAlarm Alarm; +// Alarm is not needed for the PC workaround +// static OSAlarm Alarm; void mDoDvdErr_ThdInit() { if (mDoDvdErr_initialized) { return; } - OSTime time = OSGetTime(); + // OSTime time = OSGetTime(); // Unused in workaround - OSCreateThread(&DvdErr_thread, (void*(*)(void*))mDoDvdErr_Watch, NULL, DvdErr_stack + sizeof(DvdErr_stack), - sizeof(DvdErr_stack), OSGetThreadPriority(OSGetCurrentThread()) - 3, 1); + OSCreateThread(&DvdErr_thread, (void* (*)(void*))mDoDvdErr_Watch, NULL, + DvdErr_stack + sizeof(DvdErr_stack), sizeof(DvdErr_stack), + OSGetThreadPriority(OSGetCurrentThread()) - 3, 1); OSResumeThread(&DvdErr_thread); - OSCreateAlarm(&Alarm); - OSSetPeriodicAlarm(&Alarm, time, OS_BUS_CLOCK / 4, AlarmHandler); + + // PC Workaround: Disable Alarm logic. The thread will sleep itself. + // OSCreateAlarm(&Alarm); + // OSSetPeriodicAlarm(&Alarm, time, OS_BUS_CLOCK / 4, AlarmHandler); mDoDvdErr_initialized = true; } @@ -47,7 +54,7 @@ void mDoDvdErr_ThdInit() { void mDoDvdErr_ThdCleanup() { if (mDoDvdErr_initialized) { OSCancelThread(&DvdErr_thread); - OSCancelAlarm(&Alarm); + // OSCancelAlarm(&Alarm); // Disable Alarm cancel mDoDvdErr_initialized = false; } } @@ -66,10 +73,20 @@ static void mDoDvdErr_Watch(void*) { if (status == DVD_STATE_FATAL_ERROR) { mDoDvdThd::suspend(); } - OSSuspendThread(&DvdErr_thread); + + // PC Workaround: + // Instead of suspending and waiting for an Alarm (which might not be implemented), + // we simply sleep for a short duration. + // OS_BUS_CLOCK / 4 corresponds to roughly 1/4th of a second on GC. + // We use 250ms here to simulate the periodic check. + + // OSSuspendThread(&DvdErr_thread); // <-- Original causing deadlock without Alarm + std::this_thread::sleep_for(std::chrono::milliseconds(250)); + } while (true); } static void AlarmHandler(OSAlarm*, OSContext*) { + // This handler is no longer called in the PC workaround OSResumeThread(&DvdErr_thread); -} +} \ No newline at end of file diff --git a/src/m_Do/m_Do_graphic.cpp b/src/m_Do/m_Do_graphic.cpp index 3cc285fd64..8eece7b783 100644 --- a/src/m_Do/m_Do_graphic.cpp +++ b/src/m_Do/m_Do_graphic.cpp @@ -3,6 +3,8 @@ * Graphics Management Functions */ +#include + #include "d/dolzel.h" // IWYU pragma: keep #include "JSystem/J2DGraph/J2DOrthoGraph.h" @@ -1511,6 +1513,14 @@ static void drawItem3D() { } int mDoGph_Painter() { + // Diagnostic: log windowNum to track game state machine progress + static bool sDiagLoggedWindow = false; + if (!sDiagLoggedWindow) { + int wn = dComIfGp_getWindowNum(); + printf("[DIAG] mDoGph_Painter: windowNum=%d\n", wn); fflush(stdout); + if (wn != 0) sDiagLoggedWindow = true; + } + #if DEBUG drawHeapMap(); #endif diff --git a/src/m_Do/m_Do_main.cpp b/src/m_Do/m_Do_main.cpp index 27e7e87026..bc13bacdae 100644 --- a/src/m_Do/m_Do_main.cpp +++ b/src/m_Do/m_Do_main.cpp @@ -5,6 +5,7 @@ */ #include "m_Do/m_Do_main.h" +#include #include #include "DynamicLink.h" #include "JSystem/JAudio2/JASAudioThread.h" @@ -178,11 +179,18 @@ void main01(void) { mDoCPd_c::read(); // Read Controller + // Simulate VI retrace interrupt — fires post-retrace callback which sends + // a message to JUTVideo's queue, unblocking waitForTick() in beginRender() + VIWaitForRetrace(); + // --- EXECUTE GAME LOGIC & RENDER --- + printf("[DIAG] main01: before fapGm_Execute (frame %d)\n", frame); fflush(stdout); fapGm_Execute(); + printf("[DIAG] main01: after fapGm_Execute\n"); fflush(stdout); // --- Frame End & Limiter --- aurora_end_frame(); + printf("[DIAG] main01: after aurora_end_frame\n"); fflush(stdout); std::this_thread::sleep_for(std::chrono::milliseconds(16)); // ~60 FPS Cap } while (true); From 8599684faed2b733dee15e28e5e794d89523dff5 Mon Sep 17 00:00:00 2001 From: Lurs <2795933+Lurs@users.noreply.github.com> Date: Sat, 21 Feb 2026 22:15:39 +0100 Subject: [PATCH 11/46] First pink screen! --- extern/aurora | 2 +- include/JSystem/JUtility/JUTTexture.h | 9 +- include/f_op/f_op_camera_mng.h | 8 +- include/f_op/f_op_view.h | 4 +- include/m_Do/m_Do_graphic.h | 5 +- include/m_Do/m_Do_lib.h | 4 +- src/JSystem/JFramework/JFWDisplay.cpp | 114 +++++++++----------------- src/JSystem/JUtility/JUTGraphFifo.cpp | 1 + src/JSystem/JUtility/JUTPalette.cpp | 5 +- src/JSystem/JUtility/JUTTexture.cpp | 45 ++++++---- src/Z2AudioLib/Z2SceneMgr.cpp | 13 ++- src/d/actor/d_a_alink_kandelaar.inc | 6 +- src/d/actor/d_a_midna.cpp | 6 +- src/d/actor/d_a_mirror.cpp | 6 +- src/d/actor/d_a_obj_ari.cpp | 6 +- src/d/actor/d_a_obj_cho.cpp | 6 +- src/d/actor/d_a_obj_dan.cpp | 6 +- src/d/actor/d_a_obj_kabuto.cpp | 6 +- src/d/actor/d_a_obj_kamakiri.cpp | 6 +- src/d/actor/d_a_obj_katatsumuri.cpp | 6 +- src/d/actor/d_a_obj_kuwagata.cpp | 4 +- src/d/actor/d_a_obj_mirror_chain.cpp | 2 +- src/d/actor/d_a_obj_ten.cpp | 6 +- src/d/actor/d_a_obj_tombo.cpp | 6 +- src/d/d_camera.cpp | 10 +-- src/d/d_demo.cpp | 4 +- src/d/d_insect.cpp | 4 +- src/d/d_kankyo.cpp | 28 +++---- src/d/d_s_name.cpp | 8 +- src/dusk/stubs.cpp | 21 +++-- src/m_Do/m_Do_DVDError.cpp | 2 + src/m_Do/m_Do_graphic.cpp | 9 +- src/m_Do/m_Do_lib.cpp | 8 +- src/m_Do/m_Do_main.cpp | 108 ++++++++++++------------ 34 files changed, 238 insertions(+), 246 deletions(-) diff --git a/extern/aurora b/extern/aurora index 928834269d..a463669faa 160000 --- a/extern/aurora +++ b/extern/aurora @@ -1 +1 @@ -Subproject commit 928834269d989109f2726fa61c66c07fc49e6475 +Subproject commit a463669faa203fff7ec467666902f053763305ad diff --git a/include/JSystem/JUtility/JUTTexture.h b/include/JSystem/JUtility/JUTTexture.h index b5965eb185..370129fcc8 100644 --- a/include/JSystem/JUtility/JUTTexture.h +++ b/include/JSystem/JUtility/JUTTexture.h @@ -3,6 +3,7 @@ #include #include +#include "dusk/endian.h" class JUTPalette; @@ -25,7 +26,7 @@ struct ResTIMG { /* 0x08 */ u8 indexTexture; /* 0x09 */ u8 colorFormat; /* 0x0A */ u16 numColors; - /* 0x0C */ uintptr_t paletteOffset; + /* 0x0C */ u32 paletteOffset; /* 0x10 */ u8 mipmapEnabled; /* 0x11 */ u8 doEdgeLOD; /* 0x12 */ u8 biasClamp; @@ -37,7 +38,7 @@ struct ResTIMG { /* 0x18 */ u8 mipmapCount; /* 0x19 */ u8 unknown; /* 0x1A */ s16 LODBias; - /* 0x1C */ uintptr_t imageOffset; + /* 0x1C */ u32 imageOffset; }; // Size: 0x20 /** @@ -71,8 +72,8 @@ public: const ResTIMG* getTexInfo() const { return mTexInfo; } s32 getFormat() const { return mTexInfo->format; } s32 getTransparency() const { return mTexInfo->alphaEnabled; } - s32 getWidth() const { return mTexInfo->width; } - s32 getHeight() const { return mTexInfo->height; } + s32 getWidth() const { return RES_U16(mTexInfo->width); } + s32 getHeight() const { return RES_U16(mTexInfo->height); } void setCaptureFlag(bool flag) { mFlags &= 2 | flag; } bool getCaptureFlag() const { return mFlags & 1; } bool getEmbPaletteDelFlag() const { return mFlags & 2; } diff --git a/include/f_op/f_op_camera_mng.h b/include/f_op/f_op_camera_mng.h index c722784386..38ee6e8d07 100644 --- a/include/f_op/f_op_camera_mng.h +++ b/include/f_op/f_op_camera_mng.h @@ -38,12 +38,12 @@ inline void fopCamM_SetAngleY(camera_class* i_camera, s16 angle) { i_camera->angle.y = angle; } -inline void fopCamM_SetNear(camera_class* i_this, f32 near) { - i_this->near = near; +inline void fopCamM_SetNear(camera_class* i_this, f32 near_) { + i_this->near_ = near_; } -inline void fopCamM_SetFar(camera_class* i_this, f32 far) { - i_this->far = far; +inline void fopCamM_SetFar(camera_class* i_this, f32 far_) { + i_this->far_ = far_; } inline void fopCamM_SetFovy(camera_class* i_this, f32 fovy) { diff --git a/include/f_op/f_op_view.h b/include/f_op/f_op_view.h index 07971a7642..cd6aeccbbc 100644 --- a/include/f_op/f_op_view.h +++ b/include/f_op/f_op_view.h @@ -43,8 +43,8 @@ struct view_class { /* 0x000 */ leafdraw_class base; /* 0x0C0 */ leafdraw_method_class* sub_method; /* 0x0C4 */ u8 field_0xc4; - /* 0x0C8 */ f32 near; - /* 0x0CC */ f32 far; + /* 0x0C8 */ f32 near_; + /* 0x0CC */ f32 far_; /* 0x0D0 */ f32 fovy; /* 0x0D4 */ f32 aspect; /* 0x0D8 */ lookat_class lookat; diff --git a/include/m_Do/m_Do_graphic.h b/include/m_Do/m_Do_graphic.h index 861575787b..9e1cb18436 100644 --- a/include/m_Do/m_Do_graphic.h +++ b/include/m_Do/m_Do_graphic.h @@ -93,7 +93,10 @@ public: } static int startFadeOut(int param_0) { return JFWDisplay::getManager()->startFadeOut(param_0); } - static int startFadeIn(int param_0) { return JFWDisplay::getManager()->startFadeIn(param_0); } + static int startFadeIn(int param_0) { + printf("[DIAG] mDoGph_gInf_c::startFadeIn START\n"); + fflush(stdout); + return JFWDisplay::getManager()->startFadeIn(param_0); } static void setFadeColor(JUtility::TColor& color) { mFader->setColor(color); } static void setClearColor(JUtility::TColor color) { JFWDisplay::getManager()->setClearColor(color); } static void setBackColor(GXColor& color) { mBackColor = color; } diff --git a/include/m_Do/m_Do_lib.h b/include/m_Do/m_Do_lib.h index 31b5b5f700..660f96274e 100644 --- a/include/m_Do/m_Do_lib.h +++ b/include/m_Do/m_Do_lib.h @@ -11,8 +11,8 @@ struct ResTIMG; struct mDoLib_clipper { static void setup(f32, f32, f32, f32); - static void changeFar(f32 far) { - mClipper.setFar(far); + static void changeFar(f32 far_) { + mClipper.setFar(far_); mClipper.calcViewFrustum(); } diff --git a/src/JSystem/JFramework/JFWDisplay.cpp b/src/JSystem/JFramework/JFWDisplay.cpp index 7d129c4d45..45829a2dac 100644 --- a/src/JSystem/JFramework/JFWDisplay.cpp +++ b/src/JSystem/JFramework/JFWDisplay.cpp @@ -1,20 +1,21 @@ -#include "JSystem/JSystem.h" // IWYU pragma: keep +#include "JSystem/JSystem.h" // IWYU pragma: keep -#include "JSystem/JFramework/JFWDisplay.h" +#include +#include +#include #include "JSystem/J2DGraph/J2DOrthoGraph.h" +#include "JSystem/JFramework/JFWDisplay.h" #include "JSystem/JUtility/JUTAssert.h" #include "JSystem/JUtility/JUTConsole.h" #include "JSystem/JUtility/JUTDbPrint.h" #include "JSystem/JUtility/JUTProcBar.h" -#include -#include #include "global.h" -#include +#include "aurora/aurora.h" void JFWDisplay::ctor_subroutine(bool enableAlpha) { mEnableAlpha = enableAlpha; mClamp = GX_CLAMP_TOP | GX_CLAMP_BOTTOM; - mClearColor = JUtility::TColor(0, 0, 0, 0); + mClearColor = JUtility::TColor(255, 0, 128, 255); mZClear = 0xFFFFFF; mGamma = 0; mFader = NULL; @@ -199,10 +200,10 @@ void JFWDisplay::endGX() { J2DOrthoGraph ortho(0.0f, 0.0f, width, height, -1.0f, 1.0f); - if (mFader != NULL) { - ortho.setPort(); - mFader->control(); - } + //if (mFader != NULL) { + // ortho.setPort(); + // mFader->control(); + //} ortho.setPort(); JUTDbPrint::getManager()->flush(); @@ -221,6 +222,7 @@ void JFWDisplay::endGX() { } void JFWDisplay::beginRender() { + //aurora_begin_frame(); if (field_0x40) { JUTProcBar::getManager()->wholeLoopEnd(); } @@ -298,6 +300,7 @@ void JFWDisplay::endRender() { JUTProcBar::getManager()->cpuStart(); calcCombinationRatio(); + //aurora_end_frame(); } void JFWDisplay::endFrame() { @@ -325,7 +328,8 @@ void JFWDisplay::endFrame() { } if (field_0x40) { - static u32 prevFrame = VIGetRetraceCount();; + static u32 prevFrame = VIGetRetraceCount(); + ; u32 retrace_cnt = VIGetRetraceCount(); u32 r28 = retrace_cnt - prevFrame; JUTProcBar::getManager()->setCostFrame(retrace_cnt - prevFrame); @@ -340,7 +344,10 @@ void JFWDisplay::waitBlanking(int param_0) { } static void waitForTick(u32 p1, u16 p2) { - if (p1 != 0) { + + + if (p1 != 0) + { static OSTime nextTick = OSGetTime(); OSTime time = OSGetTime(); while (time < nextTick) { @@ -348,18 +355,19 @@ static void waitForTick(u32 p1, u16 p2) { time = OSGetTime(); } nextTick = time + p1; - } - else { + } else { static u32 nextCount = VIGetRetraceCount(); u32 uVar1 = (p2 == 0) ? 1 : p2; OSMessage msg; do { - if (!OSReceiveMessage(JUTVideo::getManager()->getMessageQueue(), &msg, OS_MESSAGE_BLOCK)) { + if (!OSReceiveMessage(JUTVideo::getManager()->getMessageQueue(), &msg, + OS_MESSAGE_BLOCK)) + { msg = 0; } } while (((intptr_t)msg - (intptr_t)nextCount) < 0); nextCount = (intptr_t)msg + uVar1; - } + } } JSUList JFWAlarm::sList(false); @@ -419,70 +427,24 @@ void JFWDisplay::clearEfb(GXColor color) { } void JFWDisplay::clearEfb(int param_0, int param_1, int param_2, int param_3, GXColor color) { - u16 width; - u16 height; - Mtx44 mtx; + // --- FORCE PINK DEBUG --- + // Das Spiel bergibt hier "Schwarz". Wir ignorieren das und erzwingen Pink. + // So sehen wir sofort, ob dieser Code ausgefhrt wird. + GXColor debugPink = {255, 0, 128, 255}; + // Setze Pink als Clear-Farbe und Z auf Max + GXSetCopyClear(debugPink, 0x00FFFFFF); + + // Viewport Safety + u16 width, height; JUTVideo::getManager()->getBounds(width, height); + GXSetViewport(0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f); + GXSetScissor(0, 0, 640, 480); - C_MTXOrtho(mtx, 0.0f, height, 0.0f, width, 0.0f, 1.0f); - GXSetProjection(mtx, GX_ORTHOGRAPHIC); - GXSetViewport(0.0f, 0.0f, width, height, 0.0f, 1.0f); - GXSetScissor(0, 0, width, height); - - GXLoadPosMtxImm(e_mtx, GX_PNMTX0); - GXSetCurrentMtx(0); - GXClearVtxDesc(); - GXSetVtxDesc(GX_VA_POS, GX_DIRECT); - GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT); - GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGB, GX_RGBX8, 0); - GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGB565, 0); - GXSetNumChans(0); - GXSetChanCtrl(GX_COLOR0A0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_NONE, - GX_AF_NONE); - GXSetChanCtrl(GX_COLOR1A1, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_NONE, - GX_AF_NONE); - GXSetNumTexGens(1); - GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 60); - GXLoadTexObj(&clear_z_tobj, GX_TEXMAP0); - GXSetNumTevStages(1); - GXSetTevColor(GX_TEVREG0, color); - GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL); - GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0); - GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); - GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); - GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); - GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); - GXSetZTexture(GX_ZT_REPLACE, GX_TF_Z24X8, 0); - GXSetZCompLoc(GX_DISABLE); - GXSetBlendMode(GX_BM_NONE, GX_BL_ZERO, GX_BL_ZERO, GX_LO_NOOP); - - if (mEnableAlpha) { - GXSetAlphaUpdate(GX_ENABLE); - GXSetDstAlpha(GX_ENABLE, color.a); - } - GXSetZMode(GX_ENABLE, GX_ALWAYS, GX_ENABLE); - GXSetCullMode(GX_CULL_BACK); - - GXBegin(GX_QUADS, GX_VTXFMT0, 4); - GXPosition2u16(param_0, param_1); - GXTexCoord2u8(0, 0); - - GXPosition2u16(param_0 + param_2, param_1); - GXTexCoord2u8(1, 0); - - GXPosition2u16(param_0 + param_2, param_1 + param_3); - GXTexCoord2u8(1, 1); - - GXPosition2u16(param_0, param_1 + param_3); - GXTexCoord2u8(0, 1); - GXEnd(); - - GXSetZTexture(GX_ZT_DISABLE, GX_TF_Z24X8, 0); + // State Reset + GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); GXSetZCompLoc(GX_ENABLE); - if (mEnableAlpha) { - GXSetDstAlpha(GX_DISABLE, color.a); - } + GXSetAlphaUpdate(GX_ENABLE); } void JFWDisplay::calcCombinationRatio() { diff --git a/src/JSystem/JUtility/JUTGraphFifo.cpp b/src/JSystem/JUtility/JUTGraphFifo.cpp index a30a0aeace..a68a4745b1 100644 --- a/src/JSystem/JUtility/JUTGraphFifo.cpp +++ b/src/JSystem/JUtility/JUTGraphFifo.cpp @@ -20,6 +20,7 @@ JUTGraphFifo::JUTGraphFifo(u32 size) { mBase = JKRAllocFromSysHeap(mSize + 0xA0, 32); mBase = (void*)((intptr_t)mBase + 0x1F & ~0x1F); mFifo = GXInit(mBase, mSize); + GXSetColorUpdate(GX_ENABLE); data_804514B8 = true; sCurrentFifo = this; } diff --git a/src/JSystem/JUtility/JUTPalette.cpp b/src/JSystem/JUtility/JUTPalette.cpp index 23d2aa41c6..8e34766d0f 100644 --- a/src/JSystem/JUtility/JUTPalette.cpp +++ b/src/JSystem/JUtility/JUTPalette.cpp @@ -3,6 +3,7 @@ #include "JSystem/JUtility/JUTPalette.h" #include #include +#include "dusk/endian.h" void JUTPalette::storeTLUT(GXTlut param_0, ResTLUT* tlut) { if (tlut == NULL) { @@ -11,8 +12,8 @@ void JUTPalette::storeTLUT(GXTlut param_0, ResTLUT* tlut) { mTlutName = param_0; mFormat = tlut->format; mTransparency = tlut->transparency; - mNumColors = tlut->numColors; - mColorTable = tlut + 8; + mNumColors = RES_U16(tlut->numColors); + mColorTable = (ResTLUT*)((u8*)tlut + 0x20); GXInitTlutObj(&mTlutObj, (void*)mColorTable, (GXTlutFmt)mFormat, mNumColors); } diff --git a/src/JSystem/JUtility/JUTTexture.cpp b/src/JSystem/JUtility/JUTTexture.cpp index 985ea6499b..5dd17f17e5 100644 --- a/src/JSystem/JUtility/JUTTexture.cpp +++ b/src/JSystem/JUtility/JUTTexture.cpp @@ -16,7 +16,8 @@ JUTTexture::~JUTTexture() { void JUTTexture::storeTIMG(ResTIMG const* param_0, u8 param_1) { if (param_0 && param_1 < 0x10) { mTexInfo = param_0; - mTexData = (void*)((intptr_t)mTexInfo + mTexInfo->imageOffset); + u32 imgOffset = RES_U32(mTexInfo->imageOffset); + mTexData = (void*)((intptr_t)mTexInfo + imgOffset); if (mTexInfo->imageOffset == 0) { mTexData = (void*)((intptr_t)mTexInfo + 0x20); @@ -30,27 +31,33 @@ void JUTTexture::storeTIMG(ResTIMG const* param_0, u8 param_1) { mMagFilter = mTexInfo->magFilter; mMinLOD = (s8)mTexInfo->minLOD; mMaxLOD = (s8)mTexInfo->maxLOD; - mLODBias = mTexInfo->LODBias; + mLODBias = RES_S16(mTexInfo->LODBias); - if (mTexInfo->numColors == 0) { + u16 numColors = RES_U16(mTexInfo->numColors); + + if (numColors == 0) { initTexObj(); } else { GXTlut tlut; - if (mTexInfo->numColors > 0x100) { + if (numColors > 0x100) { tlut = (GXTlut)((param_1 % 4) + GX_BIGTLUT0); } else { tlut = (GXTlut)param_1; } + u32 palOffset = RES_U32(mTexInfo->paletteOffset); + if (mEmbPalette == NULL || !getEmbPaletteDelFlag()) { mEmbPalette = new JUTPalette(tlut, (GXTlutFmt)mTexInfo->colorFormat, - (JUTTransparency)mTexInfo->alphaEnabled, mTexInfo->numColors, - (void*)(&mTexInfo->format + mTexInfo->paletteOffset)); + (JUTTransparency)mTexInfo->alphaEnabled, + numColors, + (void*)((intptr_t)mTexInfo + palOffset)); setEmbPaletteDelFlag(true); } else { mEmbPalette->storeTLUT(tlut, (GXTlutFmt)mTexInfo->colorFormat, - (JUTTransparency)mTexInfo->alphaEnabled, mTexInfo->numColors, - (void*)(&mTexInfo->format + mTexInfo->paletteOffset)); + (JUTTransparency)mTexInfo->alphaEnabled, + numColors, + (void*)((intptr_t)mTexInfo + palOffset)); } attachPalette(mEmbPalette); } @@ -139,12 +146,13 @@ void JUTTexture::initTexObj() { mipmapEnabled = 0; } u8* image = ((u8*)mTexInfo); - image += (mTexInfo->imageOffset ? mTexInfo->imageOffset : 0x20); - GXInitTexObj(&mTexObj, image, mTexInfo->width, mTexInfo->height, - (GXTexFmt)mTexInfo->format, (GXTexWrapMode)mWrapS, - (GXTexWrapMode)mWrapT, mipmapEnabled); - GXInitTexObjLOD(&mTexObj, (GXTexFilter)mMinFilter, (GXTexFilter)mMagFilter, - mMinLOD / 8.0f, mMaxLOD / 8.0f, mLODBias / 100.0f, mTexInfo->biasClamp, + u32 imgOffset = RES_U32(mTexInfo->imageOffset); + image += (imgOffset ? imgOffset : 0x20); + GXInitTexObj(&mTexObj, image, RES_U16(mTexInfo->width), RES_U16(mTexInfo->height), + (GXTexFmt)mTexInfo->format, (GXTexWrapMode)mWrapS, (GXTexWrapMode)mWrapT, + mipmapEnabled); + GXInitTexObjLOD(&mTexObj, (GXTexFilter)mMinFilter, (GXTexFilter)mMagFilter, mMinLOD / 8.0f, + mMaxLOD / 8.0f, RES_S16(mLODBias) / 100.0f, mTexInfo->biasClamp, mTexInfo->doEdgeLOD, (GXAnisotropy)mTexInfo->maxAnisotropy); } @@ -157,12 +165,13 @@ void JUTTexture::initTexObj(GXTlut param_0) { } mTlutName = param_0; u8* image = ((u8*)mTexInfo); - image += (mTexInfo->imageOffset ? mTexInfo->imageOffset : 0x20); - GXInitTexObjCI(&mTexObj, image, mTexInfo->width, mTexInfo->height, + u32 imgOffset = RES_U32(mTexInfo->imageOffset); // Swap! + image += (imgOffset ? imgOffset : 0x20); + GXInitTexObjCI(&mTexObj, image, RES_U16(mTexInfo->width), RES_U16(mTexInfo->height), (GXCITexFmt)mTexInfo->format, (GXTexWrapMode)mWrapS, (GXTexWrapMode)mWrapT, mipmapEnabled, param_0); - GXInitTexObjLOD(&mTexObj, (GXTexFilter)mMinFilter, (GXTexFilter)mMagFilter, - mMinLOD / 8.0f, mMaxLOD / 8.0f, mLODBias / 100.0f, mTexInfo->biasClamp, + GXInitTexObjLOD(&mTexObj, (GXTexFilter)mMinFilter, (GXTexFilter)mMagFilter, mMinLOD / 8.0f, + mMaxLOD / 8.0f, RES_S16(mLODBias) / 100.0f, mTexInfo->biasClamp, mTexInfo->doEdgeLOD, (GXAnisotropy)mTexInfo->maxAnisotropy); } diff --git a/src/Z2AudioLib/Z2SceneMgr.cpp b/src/Z2AudioLib/Z2SceneMgr.cpp index 3aa7e99950..1bdc2e4412 100644 --- a/src/Z2AudioLib/Z2SceneMgr.cpp +++ b/src/Z2AudioLib/Z2SceneMgr.cpp @@ -2095,6 +2095,10 @@ bool Z2SceneMgr::loadSceneWave(u32 wave, u32 bank) { #endif bool Z2SceneMgr::loadSeWave(u32 wave) { + return 0; +} + +/* //lw stub lw JAUSectionHeap* sectionHeap = JASGlobalInstance::getInstance(); JUT_ASSERT(3030, sectionHeap); @@ -2109,8 +2113,13 @@ bool Z2SceneMgr::loadSeWave(u32 wave) { JUT_WARN_DEVICE(3038, 1, "Z2SceneMgr::cannot load SE wave:%d\n", wave); return false; } - +*/ bool Z2SceneMgr::loadBgmWave(u32 wave) { + return true; +} + + /* //lw stub lw + JAUSectionHeap* sectionHeap = JASGlobalInstance::getInstance(); JUT_ASSERT(3047, sectionHeap); @@ -2124,4 +2133,4 @@ bool Z2SceneMgr::loadBgmWave(u32 wave) { JUT_WARN_DEVICE(3055, 1, "Z2SceneMgr::cannot load BGM wave:%d\n", wave); return false; -} +} */ diff --git a/src/d/actor/d_a_alink_kandelaar.inc b/src/d/actor/d_a_alink_kandelaar.inc index d2769b7f24..1971358990 100644 --- a/src/d/actor/d_a_alink_kandelaar.inc +++ b/src/d/actor/d_a_alink_kandelaar.inc @@ -196,8 +196,8 @@ void daAlink_c::preKandelaarDraw() { field_0x32c8 = 0; } - f32 near = dComIfGd_getView()->near; - f32 far = dComIfGd_getView()->far; + f32 near_ = dComIfGd_getView()->near_; + f32 far_ = dComIfGd_getView()->far_; mDoLib_pos2camera(&mKandelaarFlamePos, &proj); proj.z += 30.0f; @@ -205,7 +205,7 @@ void daAlink_c::preKandelaarDraw() { proj.z = -0.01f; } - field_0x344c = ((near + (far * near) / proj.z) / (far - near) + 1.0f) * 1.6777215E7f; + field_0x344c = ((near_ + (far_ * near_) / proj.z) / (far_ - near_) + 1.0f) * 1.6777215E7f; } void daAlink_c::setKandelaarModel() { diff --git a/src/d/actor/d_a_midna.cpp b/src/d/actor/d_a_midna.cpp index afaccaf13b..1134047179 100644 --- a/src/d/actor/d_a_midna.cpp +++ b/src/d/actor/d_a_midna.cpp @@ -3234,9 +3234,9 @@ int daMidna_c::execute() { if (!checkShadowModeTalkWait() || fopAcM_getTalkEventPartner(link) == this) { if (!checkStateFlg0(FLG0_UNK_8000)) { offStateFlg0((daMidna_FLG0)(FLG0_NPC_NEAR | FLG0_NPC_FAR)); - BOOL far; - if (fopAcIt_Judge((fopAcIt_JudgeFunc)daMidna_searchNpc, &far)) { - if (!far) { + BOOL far_; + if (fopAcIt_Judge((fopAcIt_JudgeFunc)daMidna_searchNpc, &far_)) { + if (!far_) { onStateFlg0(FLG0_NPC_NEAR); } else { onStateFlg0(FLG0_NPC_FAR); diff --git a/src/d/actor/d_a_mirror.cpp b/src/d/actor/d_a_mirror.cpp index 822ea0f314..5dc2f871df 100644 --- a/src/d/actor/d_a_mirror.cpp +++ b/src/d/actor/d_a_mirror.cpp @@ -270,7 +270,7 @@ void dMirror_packet_c::mainDraw() { int prjPosNum = 4; view_class* view = dComIfGd_getView(); - f32 temp_f22 = -view->near; + f32 temp_f22 = -view->near_; cXyz* var_r21 = mQuad; cXyz* var_r22 = sp19C; int var_r23 = 0; @@ -427,12 +427,12 @@ void dMirror_packet_c::mainDraw() { j3dSys.reinitGX(); GXSetScissor(scissor[0], scissor[1], scissor[2], scissor[3]); - mirrorZdraw(sp150, sp138, view->far, var_f31, var_f30, var_f29, var_f28, var_f27); + mirrorZdraw(sp150, sp138, view->far_, var_f31, var_f30, var_f29, var_f28, var_f27); } } void dMirror_packet_c::draw() { - mDoLib_clipper::changeFar(dComIfGd_getView()->far); + mDoLib_clipper::changeFar(dComIfGd_getView()->far_); if (!mDoLib_clipper::clip(j3dSys.getViewMtx(), &mMaxVal, &mMinVal)) { mainDraw(); } diff --git a/src/d/actor/d_a_obj_ari.cpp b/src/d/actor/d_a_obj_ari.cpp index f97e72aa49..beb5e8524a 100644 --- a/src/d/actor/d_a_obj_ari.cpp +++ b/src/d/actor/d_a_obj_ari.cpp @@ -510,14 +510,14 @@ void daObjARI_c::Z_BufferChk() { dComIfGd_peekZ(vec2.x, vec2.y, &mBufferZ); } - f32 near = dComIfGd_getView()->near; - f32 far = dComIfGd_getView()->far; + f32 near_ = dComIfGd_getView()->near_; + f32 far_ = dComIfGd_getView()->far_; mDoLib_pos2camera(&vec1, &vec2); vec2.z += 50.0f; if (vec2.z > 0.0f) { vec2.z = 0.0f; } - mScreenZ = ((near + far * near / vec2.z) / (far - near) + 1.0f) * 0xffffff; + mScreenZ = ((near_ + far_ * near_ / vec2.z) / (far_ - near_) + 1.0f) * 0xffffff; } int daObjARI_c::Delete() { diff --git a/src/d/actor/d_a_obj_cho.cpp b/src/d/actor/d_a_obj_cho.cpp index 33088afbdd..a6f8fc56bb 100644 --- a/src/d/actor/d_a_obj_cho.cpp +++ b/src/d/actor/d_a_obj_cho.cpp @@ -300,14 +300,14 @@ void daObjCHO_c::Z_BufferChk() { dComIfGd_peekZ(vec2.x, vec2.y, &mBufferZ); } - f32 near = dComIfGd_getView()->near; - f32 far = dComIfGd_getView()->far; + f32 near_ = dComIfGd_getView()->near_; + f32 far_ = dComIfGd_getView()->far_; mDoLib_pos2camera(&vec1, &vec2); vec2.z += 50.0f; if (vec2.z > 0.0f) { vec2.z = 0.0f; } - mScreenZ = ((near + far * near / vec2.z) / (far - near) + 1.0f) * 0xffffff; + mScreenZ = ((near_ + far_ * near_ / vec2.z) / (far_ - near_) + 1.0f) * 0xffffff; } void daObjCHO_c::ParticleSet() { diff --git a/src/d/actor/d_a_obj_dan.cpp b/src/d/actor/d_a_obj_dan.cpp index 3c5f1cc226..84446f5cb3 100644 --- a/src/d/actor/d_a_obj_dan.cpp +++ b/src/d/actor/d_a_obj_dan.cpp @@ -278,14 +278,14 @@ void daObjDAN_c::Z_BufferChk() { dComIfGd_peekZ(vec2.x, vec2.y, &mBufferZ); } - f32 near = dComIfGd_getView()->near; - f32 far = dComIfGd_getView()->far; + f32 near_ = dComIfGd_getView()->near_; + f32 far_ = dComIfGd_getView()->far_; mDoLib_pos2camera(&vec1, &vec2); vec2.z += 50.0f; if (vec2.z > 0.0f) { vec2.z = 0.0f; } - mScreenZ = ((near + far * near / vec2.z) / (far - near) + 1.0f) * 0xffffff; + mScreenZ = ((near_ + far_ * near_ / vec2.z) / (far_ - near_) + 1.0f) * 0xffffff; } void daObjDAN_c::ParticleSet() { diff --git a/src/d/actor/d_a_obj_kabuto.cpp b/src/d/actor/d_a_obj_kabuto.cpp index 4e5413fa63..7a298a1aad 100644 --- a/src/d/actor/d_a_obj_kabuto.cpp +++ b/src/d/actor/d_a_obj_kabuto.cpp @@ -444,14 +444,14 @@ void daObjKABUTO_c::Z_BufferChk() { dComIfGd_peekZ(vec2.x, vec2.y, &mBufferZ); } - f32 near = dComIfGd_getView()->near; - f32 far = dComIfGd_getView()->far; + f32 near_ = dComIfGd_getView()->near_; + f32 far_ = dComIfGd_getView()->far_; mDoLib_pos2camera(&vec1, &vec2); vec2.z += 50.0f; if (vec2.z > 0.0f) { vec2.z = 0.0f; } - mScreenZ = ((near + far * near / vec2.z) / (far - near) + 1.0f) * 0xffffff; + mScreenZ = ((near_ + far_ * near_ / vec2.z) / (far_ - near_) + 1.0f) * 0xffffff; } void daObjKABUTO_c::Action() { diff --git a/src/d/actor/d_a_obj_kamakiri.cpp b/src/d/actor/d_a_obj_kamakiri.cpp index 91139f6587..41cf54d343 100644 --- a/src/d/actor/d_a_obj_kamakiri.cpp +++ b/src/d/actor/d_a_obj_kamakiri.cpp @@ -536,14 +536,14 @@ void daObjKAM_c::Z_BufferChk() { { dComIfGd_peekZ(currentProj.x, currentProj.y, &field_0x9bc); } - f32 near = dComIfGd_getView()->near; - f32 far = dComIfGd_getView()->far; + f32 near_ = dComIfGd_getView()->near_; + f32 far_ = dComIfGd_getView()->far_; mDoLib_pos2camera(¤tOffset, ¤tProj); currentProj.z += 50.0f; if (currentProj.z > 0.0f) { currentProj.z = 0.0f; } - field_0x9b8 = ((near + (far * near) / currentProj.z) / (far - near) + 1.0f) * 16777215.0f; + field_0x9b8 = ((near_ + (far_ * near_) / currentProj.z) / (far_ - near_) + 1.0f) * 16777215.0f; } void daObjKAM_c::ParticleSet() { diff --git a/src/d/actor/d_a_obj_katatsumuri.cpp b/src/d/actor/d_a_obj_katatsumuri.cpp index 1cb47bd8c8..17316f9618 100644 --- a/src/d/actor/d_a_obj_katatsumuri.cpp +++ b/src/d/actor/d_a_obj_katatsumuri.cpp @@ -610,8 +610,8 @@ void daObjKAT_c::Z_BufferChk() { dComIfGd_peekZ(projected.x,projected.y, &field_0x804); } - f32 near = dComIfGd_getView()->near; - f32 far = dComIfGd_getView()->far; + f32 near_ = dComIfGd_getView()->near_; + f32 far_ = dComIfGd_getView()->far_; mDoLib_pos2camera(&curWithOff, &projected); projected.z += 50.0f; @@ -619,7 +619,7 @@ void daObjKAT_c::Z_BufferChk() { projected.z = 0.0f; } - field_0x800 = ((near + far * near / projected.z) / (far - near) + 1.0f) * 16777215.0f; + field_0x800 = ((near_ + far_ * near_ / projected.z) / (far_ - near_) + 1.0f) * 16777215.0f; } int daObjKAT_c::Delete() { diff --git a/src/d/actor/d_a_obj_kuwagata.cpp b/src/d/actor/d_a_obj_kuwagata.cpp index fd99731c64..7d3f399ea6 100644 --- a/src/d/actor/d_a_obj_kuwagata.cpp +++ b/src/d/actor/d_a_obj_kuwagata.cpp @@ -543,8 +543,8 @@ void daObjKUW_c::Z_BufferChk() { } view_class* view = dComIfGd_getView(); - f32 nearPlane = view->near; - f32 farPlane = view->far; + f32 nearPlane = view->near_; + f32 farPlane = view->far_; mDoLib_pos2camera(&cStack_68, &local_5c); local_5c.z += 50.0f; diff --git a/src/d/actor/d_a_obj_mirror_chain.cpp b/src/d/actor/d_a_obj_mirror_chain.cpp index 83285c0c80..47cec7b99f 100644 --- a/src/d/actor/d_a_obj_mirror_chain.cpp +++ b/src/d/actor/d_a_obj_mirror_chain.cpp @@ -38,7 +38,7 @@ void dScissorBegin_packet_c::draw() { cXyz spEC[5]; int sp60 = 4; view_class* view_p = dComIfGd_getView(); - f32 sp58 = -view_p->near; + f32 sp58 = -view_p->near_; cXyz* sp54 = mQuad; cXyz* var_r30 = spEC; diff --git a/src/d/actor/d_a_obj_ten.cpp b/src/d/actor/d_a_obj_ten.cpp index 1404757c2c..68c81bf8f4 100644 --- a/src/d/actor/d_a_obj_ten.cpp +++ b/src/d/actor/d_a_obj_ten.cpp @@ -605,14 +605,14 @@ void daObjTEN_c::Z_BufferChk() { { dComIfGd_peekZ(local_5c.x, local_5c.y, &field_0x61c); } - f32 near = dComIfGd_getView()->near; - f32 far = dComIfGd_getView()->far; + f32 near_ = dComIfGd_getView()->near_; + f32 far_ = dComIfGd_getView()->far_; mDoLib_pos2camera(&cStack_68, &local_5c); local_5c.z += 50.0f; if (local_5c.z > 0.0f) { local_5c.z = 0.0f; } - field_0x618 = ((near + ((far * near) / local_5c.z)) / (far - near) + 1.0f) * 16777215.0f; + field_0x618 = ((near_ + ((far_ * near_) / local_5c.z)) / (far_ - near_) + 1.0f) * 16777215.0f; } static u8 hio_set; diff --git a/src/d/actor/d_a_obj_tombo.cpp b/src/d/actor/d_a_obj_tombo.cpp index 4dcf667b72..16b6edddf7 100644 --- a/src/d/actor/d_a_obj_tombo.cpp +++ b/src/d/actor/d_a_obj_tombo.cpp @@ -516,15 +516,15 @@ void daObjTOMBO_c::Z_BufferChk() { { dComIfGd_peekZ(local_5c.x, local_5c.y, &field_0x754); } - f32 near = dComIfGd_getView()->near; - f32 far = dComIfGd_getView()->far; + f32 near_ = dComIfGd_getView()->near_; + f32 far_ = dComIfGd_getView()->far_; mDoLib_pos2camera(&cStack_68, &local_5c); local_5c.z += 50.0f; if (local_5c.z > 0.0f) { local_5c.z = 0.0f; } field_0x750 = - ((near + ((far * near) / local_5c.z)) / (far - near) + 1.0f) * 16777215.0f; + ((near_ + ((far_ * near_) / local_5c.z)) / (far_ - near_) + 1.0f) * 16777215.0f; } int daObjTOMBO_c::Delete() { diff --git a/src/d/d_camera.cpp b/src/d/d_camera.cpp index 9e7bf7c9d2..cd2c187a20 100644 --- a/src/d/d_camera.cpp +++ b/src/d/d_camera.cpp @@ -10763,10 +10763,10 @@ static void view_setup(camera_process_class* i_this) { dComIfGd_setViewport(viewport); dComIfGd_setView(view); - f32 far; + f32 far_; f32 var_f30; if (getComStat(8)) { - far = view->far; + far_ = view->far_; } else { #if DEBUG if (g_envHIO.mOther.mAdjustCullFar != 0) { @@ -10776,10 +10776,10 @@ static void view_setup(camera_process_class* i_this) { { var_f30 = dStage_stagInfo_GetCullPoint(dComIfGp_getStageStagInfo()); } - far = var_f30; + far_ = var_f30; } - mDoLib_clipper::setup(view->fovy, view->aspect, view->near, far); + mDoLib_clipper::setup(view->fovy, view->aspect, view->near_, far_); } static void store(camera_process_class* i_camera) { @@ -10990,7 +10990,7 @@ static int camera_draw(camera_process_class* i_this) { int trim_height = body->TrimHeight(); window->setScissor(0.0f, trim_height, FB_WIDTH, FB_HEIGHT - trim_height * 2.0f); - C_MTXPerspective(process->projMtx, process->fovy, process->aspect, process->near, process->far); + C_MTXPerspective(process->projMtx, process->fovy, process->aspect, process->near_, process->far_); mDoMtx_lookAt(process->viewMtx, &process->lookat.eye, &process->lookat.center, &process->lookat.up, process->bank); diff --git a/src/d/d_demo.cpp b/src/d/d_demo.cpp index 2a7c74f40b..1181ce2abf 100644 --- a/src/d/d_demo.cpp +++ b/src/d/d_demo.cpp @@ -450,7 +450,7 @@ f32 dDemo_camera_c::JSGGetProjectionNear() const { return 0.0f; } - return view->near; + return view->near_; } void dDemo_camera_c::JSGSetProjectionNear(f32 i_projNear) { @@ -465,7 +465,7 @@ f32 dDemo_camera_c::JSGGetProjectionFar() const { return 1.0f; } - return view->far; + return view->far_; } void dDemo_camera_c::JSGSetProjectionFar(f32 i_projFar) { diff --git a/src/d/d_insect.cpp b/src/d/d_insect.cpp index f69e648c67..bed8ca1ed6 100644 --- a/src/d/d_insect.cpp +++ b/src/d/d_insect.cpp @@ -98,8 +98,8 @@ void dInsect_c::CalcZBuffer(f32 param_0) { field_0x578 = 0; } - f32 view_near = dComIfGd_getView()->near; - f32 view_far = dComIfGd_getView()->far; + f32 view_near = dComIfGd_getView()->near_; + f32 view_far = dComIfGd_getView()->far_; mDoLib_pos2camera(&pos, &pos_projected); pos_projected.z += param_0; diff --git a/src/d/d_kankyo.cpp b/src/d/d_kankyo.cpp index 429a8bd5ae..028e2d6229 100644 --- a/src/d/d_kankyo.cpp +++ b/src/d/d_kankyo.cpp @@ -4398,8 +4398,8 @@ static void setLightTevColorType_MAJI_sub(J3DMaterial* material_p, dKy_tevstr_c* fog_info->mEndZ = tevstr_p->mFogEndZ; if (dComIfGd_getView() != NULL) { - fog_info->mNearZ = dComIfGd_getView()->near; - fog_info->mFarZ = dComIfGd_getView()->far; + fog_info->mNearZ = dComIfGd_getView()->near_; + fog_info->mFarZ = dComIfGd_getView()->far_; } if (fog_info->mType == 7) { @@ -9326,10 +9326,10 @@ static void GxFogSet_Sub(GXColor* fog_col_p) { color = *fog_col_p; if (dComIfGd_getView() != NULL) { - if (dComIfGd_getView()->near >= 0.0f && dComIfGd_getView()->far >= 0.0f) { - if (dComIfGd_getView()->near < dComIfGd_getView()->far) { - near_z = dComIfGd_getView()->near; - far_z = dComIfGd_getView()->far; + if (dComIfGd_getView()->near_ >= 0.0f && dComIfGd_getView()->far_ >= 0.0f) { + if (dComIfGd_getView()->near_ < dComIfGd_getView()->far_) { + near_z = dComIfGd_getView()->near_; + far_z = dComIfGd_getView()->far_; } } } @@ -9361,10 +9361,10 @@ void dKy_GxFog_tevstr_set(dKy_tevstr_c* tevstr_p) { color.b = tevstr_p->FogCol.b; if (dComIfGd_getView() != NULL) { - if (dComIfGd_getView()->near >= 0.0f && dComIfGd_getView()->far >= 0.0f) { - if (dComIfGd_getView()->near < dComIfGd_getView()->far) { - near_z = dComIfGd_getView()->near; - far_z = dComIfGd_getView()->far; + if (dComIfGd_getView()->near_ >= 0.0f && dComIfGd_getView()->far_ >= 0.0f) { + if (dComIfGd_getView()->near_ < dComIfGd_getView()->far_) { + near_z = dComIfGd_getView()->near_; + far_z = dComIfGd_getView()->far_; } } } @@ -9383,10 +9383,10 @@ void dKy_GfFog_tevstr_set(dKy_tevstr_c* tevstr_p) { color.b = tevstr_p->FogCol.b; if (dComIfGd_getView() != NULL) { - if (dComIfGd_getView()->near >= 0.0f && dComIfGd_getView()->far >= 0.0f) { - if (dComIfGd_getView()->near < dComIfGd_getView()->far) { - near_z = dComIfGd_getView()->near; - far_z = dComIfGd_getView()->far; + if (dComIfGd_getView()->near_ >= 0.0f && dComIfGd_getView()->far_ >= 0.0f) { + if (dComIfGd_getView()->near_ < dComIfGd_getView()->far_) { + near_z = dComIfGd_getView()->near_; + far_z = dComIfGd_getView()->far_; } } } diff --git a/src/d/d_s_name.cpp b/src/d/d_s_name.cpp index 6ba2f9247b..a59d7d2d06 100644 --- a/src/d/d_s_name.cpp +++ b/src/d/d_s_name.cpp @@ -96,8 +96,8 @@ s32 dScnName_c::create() { dDlst_window_c* window = dComIfGp_getWindow(0); dComIfGp_setCamera(0, (camera_class*)&mCamera); - mCamera.near = 1.0f; - mCamera.far = 100000.0f; + mCamera.near_ = 1.0f; + mCamera.far_ = 100000.0f; mCamera.fovy = 45.0f; mCamera.aspect = mDoGph_gInf_c::getWidthF() / mDoGph_gInf_c::getHeightF(); mCamera.lookat.eye.set(0.0f, 0.0f, -1000.0f); @@ -139,8 +139,8 @@ static const char* dummyString(int i) { #endif void dScnName_c::setView() { - C_MTXPerspective(mCamera.projMtx, mCamera.fovy, mCamera.aspect, mCamera.near, - mCamera.far); + C_MTXPerspective(mCamera.projMtx, mCamera.fovy, mCamera.aspect, mCamera.near_, + mCamera.far_); mDoMtx_lookAt(mCamera.viewMtx, &mCamera.lookat.eye, &mCamera.lookat.center, mCamera.bank); MTXInverse(mCamera.viewMtx, mCamera.invViewMtx); diff --git a/src/dusk/stubs.cpp b/src/dusk/stubs.cpp index 722a005989..492c79990c 100644 --- a/src/dusk/stubs.cpp +++ b/src/dusk/stubs.cpp @@ -11,7 +11,7 @@ #include #include -/* + #ifndef _WIN32 #include #include @@ -35,9 +35,10 @@ static u64 MachToDolphinNum; static u64 MachToDolphinDenom; #elif _WIN32 static LARGE_INTEGER PerfFrequency; +static bool PerfInitialized = false; #endif -*/ + // ========================================================================== // General OS @@ -45,7 +46,7 @@ static LARGE_INTEGER PerfFrequency; // Credits: Super Monkey Ball -/* + static u64 GetGCTicks() { #if __APPLE__ return mach_absolute_time() * MachToDolphinNum / MachToDolphinDenom; @@ -55,15 +56,21 @@ static u64 GetGCTicks() { return ((tp.tv_sec * 1000000000ull) + tp.tv_nsec) * OS_CORE_CLOCK / 1000000000ull; #elif _WIN32 + if (!PerfInitialized) { + QueryPerformanceFrequency(&PerfFrequency); + PerfInitialized = true; + } LARGE_INTEGER perf; QueryPerformanceCounter(&perf); + perf.QuadPart *= OS_CORE_CLOCK; perf.QuadPart /= PerfFrequency.QuadPart; + return perf.QuadPart; #else return 0; #endif -} */ +} u32 OSGetConsoleType() { return OS_CONSOLE_RETAIL1; @@ -281,13 +288,11 @@ void OSTicksToCalendarTime(OSTime ticks, OSCalendarTime* td) { } OSTime OSGetTime(void) { - //return (OSTime)GetGCTicks(); - return 0; + return (OSTime)GetGCTicks(); } OSTick OSGetTick(void) { - //return (OSTick)GetGCTicks(); - return 0; + return (OSTick)GetGCTicks(); } u16 OSGetFontEncode() { return 0; } diff --git a/src/m_Do/m_Do_DVDError.cpp b/src/m_Do/m_Do_DVDError.cpp index e5c6e524a1..0706d0a851 100644 --- a/src/m_Do/m_Do_DVDError.cpp +++ b/src/m_Do/m_Do_DVDError.cpp @@ -61,7 +61,9 @@ void mDoDvdErr_ThdCleanup() { static void mDoDvdErr_Watch(void*) { #if PLATFORM_GCN +#ifndef TARGET_PC OSDisableInterrupts(); +#endif #endif JKRThread(OSGetCurrentThread(), 0); diff --git a/src/m_Do/m_Do_graphic.cpp b/src/m_Do/m_Do_graphic.cpp index 8eece7b783..39a28d0d16 100644 --- a/src/m_Do/m_Do_graphic.cpp +++ b/src/m_Do/m_Do_graphic.cpp @@ -33,6 +33,7 @@ #include "d/d_meter2_info.h" #include "d/d_s_play.h" #include "DynamicLink.h" +#include "dusk/endian.h" #if PLATFORM_WII || PLATFORM_SHIELD #include @@ -239,12 +240,12 @@ static ResTIMG* createTimg(u16 width, u16 height, u32 format) { cLib_memSet(timg, 0, bufferSize); timg->format = format; timg->alphaEnabled = false; - timg->width = width; - timg->height = height; + timg->width = RES_U16(width); + timg->height = RES_U16(height); timg->minFilter = GX_LINEAR; timg->magFilter = GX_LINEAR; timg->mipmapCount = 1; - timg->imageOffset = 0x20; + timg->imageOffset = RES_U32(0x20); return timg; } @@ -467,7 +468,7 @@ void mDoGph_gInf_c::calcFade() { } if (mFadeColor.a != 0) { - darwFilter(mFadeColor); + //darwFilter(mFadeColor); } } diff --git a/src/m_Do/m_Do_lib.cpp b/src/m_Do/m_Do_lib.cpp index 9910e20997..9acf9a3260 100644 --- a/src/m_Do/m_Do_lib.cpp +++ b/src/m_Do/m_Do_lib.cpp @@ -38,12 +38,12 @@ f32 mDoLib_clipper::mSystemFar; f32 mDoLib_clipper::mFovyRate; -void mDoLib_clipper::setup(f32 fovy, f32 aspect, f32 near, f32 far) { +void mDoLib_clipper::setup(f32 fovy, f32 aspect, f32 near_, f32 far_) { mClipper.setFovy(fovy); mClipper.setAspect(aspect); - mClipper.setNear(near); - mClipper.setFar(far); - mSystemFar = far; + mClipper.setNear(near_); + mClipper.setFar(far_); + mSystemFar = far_; mClipper.calcViewFrustum(); s16 tmp = DEG2S(fovy); diff --git a/src/m_Do/m_Do_main.cpp b/src/m_Do/m_Do_main.cpp index bc13bacdae..dc8b8ea370 100644 --- a/src/m_Do/m_Do_main.cpp +++ b/src/m_Do/m_Do_main.cpp @@ -39,8 +39,8 @@ #include #include -#include "dusk/dvd_emu.h" #include "SSystem/SComponent/c_API.h" +#include "dusk/dvd_emu.h" #include #include @@ -52,6 +52,7 @@ OSTime mDoMain::sPowerOnTime; OSTime mDoMain::sHungUpTime; u32 mDoMain::memMargin = 0xFFFFFFFF; char mDoMain::COPYDATE_STRING[18] = "??/??/?? ??:??:??"; +const int audioHeapSize = 0x14D800; // --- PC LOGGING CALLBACK --- void aurora_log_callback(AuroraLogLevel level, const char* module, const char* message, @@ -123,23 +124,14 @@ s32 LOAD_COPYDATE(void*) { return 1; } -// ========================================================================= -// MAIN01 - THE GAME LOOP -// ========================================================================= void main01(void) { OS_REPORT("\x1b[m"); - // 1. Setup heaps, RNG, Threads - // Nutzt den Speicher, den wir in game_main() per OSSetArena gesetzt haben + // 1. Setup mDoMch_Create(); - - // 2. Setup GFX (FrameBuffer, ZBuffer) mDoGph_Create(); - // 3. Setup Pads - //mDoCPd_c::create(); - - // 4. Console Setup + // Console Setup JUTConsole* console = JFWSystem::getSystemConsole(); if (console) { console->setOutput(mDoMain::developmentMode ? JUTConsole::OUTPUT_OSR_AND_CONSOLE : @@ -147,7 +139,7 @@ void main01(void) { console->setPosition(32, 42); } - // 5. Init Framework & Loader + // Loader Init mDoDvdThd_callback_c::create((mDoDvdThd_callback_func)LOAD_COPYDATE, NULL); OSReport("Calling fapGm_Create()...\n"); @@ -159,39 +151,45 @@ void main01(void) { OSReport("Calling cDyl_InitAsync()...\n"); cDyl_InitAsync(); - // ----------------------------------------------------------- - // THE GAME LOOP - // ----------------------------------------------------------- + mDoAud_zelAudio_c::onInitFlag(); + OSReport("Entering Main Loop (main01)...\n"); + + // ----------------------------------------------------------- + // THE GAME LOOP (RESTORED) + // ----------------------------------------------------------- do { - // --- Window Events & Frame Start --- + // 1. Update Window Events const AuroraEvent* event = aurora_update(); if (event && event->type == AURORA_EXIT) break; + static u32 frame = 0; + frame++; + + // 2. Start Frame (REQUIRED for Vulkan) if (!aurora_begin_frame()) { std::this_thread::sleep_for(std::chrono::milliseconds(1)); continue; } - static u32 frame; - frame++; + // 3. Game Inputs + mDoCPd_c::read(); - mDoCPd_c::read(); // Read Controller - - // Simulate VI retrace interrupt — fires post-retrace callback which sends - // a message to JUTVideo's queue, unblocking waitForTick() in beginRender() + // Simulate VI (can remain empty/stubbed for now if waitForTick is disabled) VIWaitForRetrace(); - // --- EXECUTE GAME LOGIC & RENDER --- - printf("[DIAG] main01: before fapGm_Execute (frame %d)\n", frame); fflush(stdout); + // 4. EXECUTE GAME LOGIC & RENDER + // This calls mDoGph_Painter -> JFWDisplay -> GX Functions fapGm_Execute(); - printf("[DIAG] main01: after fapGm_Execute\n"); fflush(stdout); - // --- Frame End & Limiter --- + mDoAud_Execute(); + + // 5. Present Frame (REQUIRED to see anything) aurora_end_frame(); - printf("[DIAG] main01: after aurora_end_frame\n"); fflush(stdout); - std::this_thread::sleep_for(std::chrono::milliseconds(16)); // ~60 FPS Cap + + // Limiter + std::this_thread::sleep_for(std::chrono::milliseconds(16)); } while (true); } @@ -241,7 +239,7 @@ int game_main(int argc, char* argv[]) { // Development Mode mDoMain::developmentMode = 1; // Force Dev Mode for Debugging - + mDoDvdThd::SyncWidthSound = false; // START GAME OSReport("Starting main01 (Game Loop)...\n"); @@ -263,77 +261,77 @@ bool JKRHeap::dump_sort() { return true; } -template +template JHIComPortManager* JHIComPortManager::instance = nullptr; -template<> +template <> JHIComPortManager* JHIComPortManager::instance = nullptr; -template<> +template <> Z2WolfHowlMgr* JASGlobalInstance::sInstance; -template<> +template <> Z2EnvSeMgr* JASGlobalInstance::sInstance; -template<> +template <> Z2FxLineMgr* JASGlobalInstance::sInstance; -template<> +template <> Z2Audience* JASGlobalInstance::sInstance; -template<> +template <> Z2SoundObjMgr* JASGlobalInstance::sInstance; -template<> +template <> Z2SoundInfo* JASGlobalInstance::sInstance; -template<> +template <> JAUSoundInfo* JASGlobalInstance::sInstance; -template<> +template <> JAUSoundNameTable* JASGlobalInstance::sInstance; -template<> +template <> JAUSoundTable* JASGlobalInstance::sInstance; -template<> +template <> JAISoundInfo* JASGlobalInstance::sInstance; -template<> +template <> Z2SoundMgr* JASGlobalInstance::sInstance; -template<> +template <> JAIStreamMgr* JASGlobalInstance::sInstance; -template<> +template <> JAISeqMgr* JASGlobalInstance::sInstance; -template<> +template <> JAISeMgr* JASGlobalInstance::sInstance; -template<> +template <> Z2SpeechMgr2* JASGlobalInstance::sInstance; -template<> +template <> Z2SoundStarter* JASGlobalInstance::sInstance; -template<> +template <> JAISoundStarter* JASGlobalInstance::sInstance; -template<> +template <> Z2StatusMgr* JASGlobalInstance::sInstance; -template<> +template <> Z2SceneMgr* JASGlobalInstance::sInstance; -template<> +template <> Z2SeqMgr* JASGlobalInstance::sInstance; -template<> +template <> Z2SeMgr* JASGlobalInstance::sInstance; -template<> +template <> JASAudioThread* JASGlobalInstance::sInstance; -template<> +template <> JASDefaultBankTable* JASGlobalInstance::sInstance; From d66e35eefcf29dc7c958d049d2d56c0646333d55 Mon Sep 17 00:00:00 2001 From: Lurs <2795933+Lurs@users.noreply.github.com> Date: Sun, 22 Feb 2026 07:06:54 +0100 Subject: [PATCH 12/46] tests with edited aurora --- extern/aurora | 2 +- src/JSystem/JFramework/JFWDisplay.cpp | 4 ++-- src/dusk/stubs.cpp | 18 +++++++-------- src/m_Do/m_Do_main.cpp | 33 +++++++++------------------ 4 files changed, 23 insertions(+), 34 deletions(-) diff --git a/extern/aurora b/extern/aurora index a463669faa..5aa41bf53e 160000 --- a/extern/aurora +++ b/extern/aurora @@ -1 +1 @@ -Subproject commit a463669faa203fff7ec467666902f053763305ad +Subproject commit 5aa41bf53e86950886d33acb5100467397d518e0 diff --git a/src/JSystem/JFramework/JFWDisplay.cpp b/src/JSystem/JFramework/JFWDisplay.cpp index 45829a2dac..c47974710b 100644 --- a/src/JSystem/JFramework/JFWDisplay.cpp +++ b/src/JSystem/JFramework/JFWDisplay.cpp @@ -222,7 +222,7 @@ void JFWDisplay::endGX() { } void JFWDisplay::beginRender() { - //aurora_begin_frame(); + aurora_begin_frame(); if (field_0x40) { JUTProcBar::getManager()->wholeLoopEnd(); } @@ -300,7 +300,7 @@ void JFWDisplay::endRender() { JUTProcBar::getManager()->cpuStart(); calcCombinationRatio(); - //aurora_end_frame(); + aurora_end_frame(); } void JFWDisplay::endFrame() { diff --git a/src/dusk/stubs.cpp b/src/dusk/stubs.cpp index 492c79990c..a722092eaf 100644 --- a/src/dusk/stubs.cpp +++ b/src/dusk/stubs.cpp @@ -1658,12 +1658,12 @@ void GXReadXfRasMetric(u32* xf_wait_in, u32* xf_wait_out, u32* ras_busy, u32* cl *ras_busy = 0; *clocks = 0; } -void GXSetClipMode(GXClipMode mode) { - puts("GXSetClipMode is a stub"); -} -void GXSetCoPlanar(GXBool enable) { - puts("GXSetCoPlanar is a stub"); -} +//void GXSetClipMode(GXClipMode mode) { +// puts("GXSetClipMode is a stub"); +//} +//void GXSetCoPlanar(GXBool enable) { +// puts("GXSetCoPlanar is a stub"); +//} void GXSetCopyClamp(GXFBClamp clamp) { puts("GXSetCopyClamp is a stub"); } @@ -1680,9 +1680,9 @@ void GXSetMisc(GXMiscToken token, u32 val) { void GXSetPointSize(u8 pointSize, GXTexOffset texOffsets) { puts("GXSetPointSize is a stub"); } -void GXSetProjectionv(const f32* ptr) { - puts("GXSetProjectionv is a stub"); -} +//void GXSetProjectionv(const f32* ptr) { +// puts("GXSetProjectionv is a stub"); +//} void GXSetVtxAttrFmtv(GXVtxFmt vtxfmt, const GXVtxAttrFmtList* list) { puts("GXSetVtxAttrFmtv is a stub"); } diff --git a/src/m_Do/m_Do_main.cpp b/src/m_Do/m_Do_main.cpp index dc8b8ea370..44984610ab 100644 --- a/src/m_Do/m_Do_main.cpp +++ b/src/m_Do/m_Do_main.cpp @@ -126,7 +126,7 @@ s32 LOAD_COPYDATE(void*) { void main01(void) { OS_REPORT("\x1b[m"); - + GXSetColorUpdate(GX_ENABLE); // 1. Setup mDoMch_Create(); mDoGph_Create(); @@ -155,9 +155,7 @@ void main01(void) { OSReport("Entering Main Loop (main01)...\n"); - // ----------------------------------------------------------- - // THE GAME LOOP (RESTORED) - // ----------------------------------------------------------- + do { // 1. Update Window Events const AuroraEvent* event = aurora_update(); @@ -167,26 +165,21 @@ void main01(void) { static u32 frame = 0; frame++; - // 2. Start Frame (REQUIRED for Vulkan) - if (!aurora_begin_frame()) { - std::this_thread::sleep_for(std::chrono::milliseconds(1)); - continue; - } - // 3. Game Inputs + + // Game Inputs mDoCPd_c::read(); - // Simulate VI (can remain empty/stubbed for now if waitForTick is disabled) VIWaitForRetrace(); - // 4. EXECUTE GAME LOGIC & RENDER + // EXECUTE GAME LOGIC & RENDER // This calls mDoGph_Painter -> JFWDisplay -> GX Functions fapGm_Execute(); mDoAud_Execute(); - // 5. Present Frame (REQUIRED to see anything) - aurora_end_frame(); + + //aurora_end_frame(); // Limiter std::this_thread::sleep_for(std::chrono::milliseconds(16)); @@ -212,7 +205,7 @@ int game_main(int argc, char* argv[]) { aurora_initialize(argc, argv, &config); // 2. Setup Virtual Game RAM - // Simuliert den GameCube RAM (24MB + Audio etc, nehmen wir 256MB) + // Simulates Gamecube RAM (24MB + Audio etc, we take 256MB) #define GAME_RAM_SIZE (256 * 1024 * 1024) void* virtualGameRam = malloc(GAME_RAM_SIZE); if (!virtualGameRam) { @@ -240,23 +233,19 @@ int game_main(int argc, char* argv[]) { // Development Mode mDoMain::developmentMode = 1; // Force Dev Mode for Debugging mDoDvdThd::SyncWidthSound = false; - // START GAME + OSReport("Starting main01 (Game Loop)...\n"); - // Auf PC rufen wir main01 direkt im Main Thread auf. - // Kein OSCreateThread noetig (und auch gefaehrlich wegen Window-Loop). + main01(); - // Cleanup (Erreicht nur bei Break der Loop) aurora_shutdown(); free(virtualGameRam); return 0; } -// ========================================================================= -// STUBS & TEMPLATE INSTANTIATIONS -// ========================================================================= + bool JKRHeap::dump_sort() { return true; } From 133842b4c5e5e86f654933343ad1dadbe11abedc Mon Sep 17 00:00:00 2001 From: Lurs <2795933+Lurs@users.noreply.github.com> Date: Sun, 22 Feb 2026 07:18:58 +0100 Subject: [PATCH 13/46] Update aurora --- extern/aurora | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/aurora b/extern/aurora index 5aa41bf53e..bd20b65d59 160000 --- a/extern/aurora +++ b/extern/aurora @@ -1 +1 @@ -Subproject commit 5aa41bf53e86950886d33acb5100467397d518e0 +Subproject commit bd20b65d59c2bd119e078ee87a8b896cc82994d2 From 43ea7786b9e28b3d2d77e1fff4c5f575dc488d91 Mon Sep 17 00:00:00 2001 From: Lurs <2795933+Lurs@users.noreply.github.com> Date: Sun, 22 Feb 2026 07:31:22 +0100 Subject: [PATCH 14/46] stubbed unresolved symbols again after updating aurora --- src/JSystem/JFramework/JFWDisplay.cpp | 4 +--- src/dusk/stubs.cpp | 18 +++++++++--------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/src/JSystem/JFramework/JFWDisplay.cpp b/src/JSystem/JFramework/JFWDisplay.cpp index c47974710b..713e629f7d 100644 --- a/src/JSystem/JFramework/JFWDisplay.cpp +++ b/src/JSystem/JFramework/JFWDisplay.cpp @@ -428,11 +428,9 @@ void JFWDisplay::clearEfb(GXColor color) { void JFWDisplay::clearEfb(int param_0, int param_1, int param_2, int param_3, GXColor color) { // --- FORCE PINK DEBUG --- - // Das Spiel bergibt hier "Schwarz". Wir ignorieren das und erzwingen Pink. - // So sehen wir sofort, ob dieser Code ausgefhrt wird. GXColor debugPink = {255, 0, 128, 255}; - // Setze Pink als Clear-Farbe und Z auf Max + // Set pink as Clear-Farbe and Z to max GXSetCopyClear(debugPink, 0x00FFFFFF); // Viewport Safety diff --git a/src/dusk/stubs.cpp b/src/dusk/stubs.cpp index a722092eaf..2cf4e4f671 100644 --- a/src/dusk/stubs.cpp +++ b/src/dusk/stubs.cpp @@ -1658,12 +1658,12 @@ void GXReadXfRasMetric(u32* xf_wait_in, u32* xf_wait_out, u32* ras_busy, u32* cl *ras_busy = 0; *clocks = 0; } -//void GXSetClipMode(GXClipMode mode) { -// puts("GXSetClipMode is a stub"); -//} -//void GXSetCoPlanar(GXBool enable) { -// puts("GXSetCoPlanar is a stub"); -//} +void GXSetClipMode(GXClipMode mode) { + puts("GXSetClipMode is a stub"); +} +void GXSetCoPlanar(GXBool enable) { + puts("GXSetCoPlanar is a stub"); +} void GXSetCopyClamp(GXFBClamp clamp) { puts("GXSetCopyClamp is a stub"); } @@ -1680,9 +1680,9 @@ void GXSetMisc(GXMiscToken token, u32 val) { void GXSetPointSize(u8 pointSize, GXTexOffset texOffsets) { puts("GXSetPointSize is a stub"); } -//void GXSetProjectionv(const f32* ptr) { -// puts("GXSetProjectionv is a stub"); -//} +void GXSetProjectionv(const f32* ptr) { + puts("GXSetProjectionv is a stub"); +} void GXSetVtxAttrFmtv(GXVtxFmt vtxfmt, const GXVtxAttrFmtList* list) { puts("GXSetVtxAttrFmtv is a stub"); } From f710f30702bb0f9077c2f48b63609f23093d1f17 Mon Sep 17 00:00:00 2001 From: Lurs <2795933+Lurs@users.noreply.github.com> Date: Mon, 23 Feb 2026 14:33:29 +0100 Subject: [PATCH 15/46] Added a bunch of Diag functions to diagnose the black screen issue (was a bug in GXGeometry.h). Resumed to old ClearEfb function, no pink screen anymore. Updated aurora with local changes for TP --- extern/aurora | 2 +- include/dolphin/gx/GXGeometry.h | 5 ++ src/JSystem/JFramework/JFWDisplay.cpp | 72 ++++++++++++++++++++++----- src/JSystem/JUtility/JUTTexture.cpp | 3 ++ src/d/d_drawlist.cpp | 8 +++ src/d/d_s_logo.cpp | 6 +++ src/dusk/stubs.cpp | 3 +- src/m_Do/m_Do_graphic.cpp | 13 +++++ 8 files changed, 98 insertions(+), 14 deletions(-) diff --git a/extern/aurora b/extern/aurora index bd20b65d59..6f31dd1719 160000 --- a/extern/aurora +++ b/extern/aurora @@ -1 +1 @@ -Subproject commit bd20b65d59c2bd119e078ee87a8b896cc82994d2 +Subproject commit 6f31dd1719a11ac71164267bdffffbce0340b270 diff --git a/include/dolphin/gx/GXGeometry.h b/include/dolphin/gx/GXGeometry.h index f2e9965ad0..3b49a3ff37 100644 --- a/include/dolphin/gx/GXGeometry.h +++ b/include/dolphin/gx/GXGeometry.h @@ -28,6 +28,10 @@ static inline void GXSetTexCoordGen(GXTexCoordID dst_coord, GXTexGenType func, G void GXBegin(GXPrimitive type, GXVtxFmt vtxfmt, u16 nverts); +#ifndef TARGET_PC +// On GameCube, GXEnd is a no-op (hardware reads FIFO directly). +// On PC, Aurora provides an extern GXEnd() that drains the software FIFO +// (declared in extern/aurora/include/dolphin/gx/GXVert.h). static inline void GXEnd(void) { #if DEBUG extern GXBool __GXinBegin; @@ -38,6 +42,7 @@ static inline void GXEnd(void) { __GXinBegin = GX_FALSE; #endif } +#endif void GXSetLineWidth(u8 width, GXTexOffset texOffsets); void GXSetPointSize(u8 pointSize, GXTexOffset texOffsets); diff --git a/src/JSystem/JFramework/JFWDisplay.cpp b/src/JSystem/JFramework/JFWDisplay.cpp index 713e629f7d..41f53b1a01 100644 --- a/src/JSystem/JFramework/JFWDisplay.cpp +++ b/src/JSystem/JFramework/JFWDisplay.cpp @@ -427,22 +427,70 @@ void JFWDisplay::clearEfb(GXColor color) { } void JFWDisplay::clearEfb(int param_0, int param_1, int param_2, int param_3, GXColor color) { - // --- FORCE PINK DEBUG --- - GXColor debugPink = {255, 0, 128, 255}; + u16 width; + u16 height; + Mtx44 mtx; - // Set pink as Clear-Farbe and Z to max - GXSetCopyClear(debugPink, 0x00FFFFFF); - - // Viewport Safety - u16 width, height; JUTVideo::getManager()->getBounds(width, height); - GXSetViewport(0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f); - GXSetScissor(0, 0, 640, 480); - // State Reset - GXSetZMode(GX_ENABLE, GX_LEQUAL, GX_ENABLE); + C_MTXOrtho(mtx, 0.0f, height, 0.0f, width, 0.0f, 1.0f); + GXSetProjection(mtx, GX_ORTHOGRAPHIC); + GXSetViewport(0.0f, 0.0f, width, height, 0.0f, 1.0f); + GXSetScissor(0, 0, width, height); + + GXLoadPosMtxImm(e_mtx, GX_PNMTX0); + GXSetCurrentMtx(0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGB, GX_RGBX8, 0); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGB565, 0); + GXSetNumChans(0); + GXSetChanCtrl(GX_COLOR0A0, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_NONE, + GX_AF_NONE); + GXSetChanCtrl(GX_COLOR1A1, GX_DISABLE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_NONE, + GX_AF_NONE); + GXSetNumTexGens(1); + GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 60); + GXLoadTexObj(&clear_z_tobj, GX_TEXMAP0); + GXSetNumTevStages(1); + GXSetTevColor(GX_TEVREG0, color); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C0); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_ENABLE, GX_TEVPREV); + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); + GXSetZTexture(GX_ZT_REPLACE, GX_TF_Z24X8, 0); + GXSetZCompLoc(GX_DISABLE); + GXSetBlendMode(GX_BM_NONE, GX_BL_ZERO, GX_BL_ZERO, GX_LO_NOOP); + + if (mEnableAlpha) { + GXSetAlphaUpdate(GX_ENABLE); + GXSetDstAlpha(GX_ENABLE, color.a); + } + GXSetZMode(GX_ENABLE, GX_ALWAYS, GX_ENABLE); + GXSetCullMode(GX_CULL_BACK); + + GXBegin(GX_QUADS, GX_VTXFMT0, 4); + GXPosition2u16(param_0, param_1); + GXTexCoord2u8(0, 0); + + GXPosition2u16(param_0 + param_2, param_1); + GXTexCoord2u8(1, 0); + + GXPosition2u16(param_0 + param_2, param_1 + param_3); + GXTexCoord2u8(1, 1); + + GXPosition2u16(param_0, param_1 + param_3); + GXTexCoord2u8(0, 1); + GXEnd(); + + GXSetZTexture(GX_ZT_DISABLE, GX_TF_Z24X8, 0); GXSetZCompLoc(GX_ENABLE); - GXSetAlphaUpdate(GX_ENABLE); + if (mEnableAlpha) { + GXSetDstAlpha(GX_DISABLE, color.a); + } } void JFWDisplay::calcCombinationRatio() { diff --git a/src/JSystem/JUtility/JUTTexture.cpp b/src/JSystem/JUtility/JUTTexture.cpp index 5dd17f17e5..e048ad101a 100644 --- a/src/JSystem/JUtility/JUTTexture.cpp +++ b/src/JSystem/JUtility/JUTTexture.cpp @@ -166,6 +166,9 @@ void JUTTexture::initTexObj(GXTlut param_0) { mTlutName = param_0; u8* image = ((u8*)mTexInfo); u32 imgOffset = RES_U32(mTexInfo->imageOffset); // Swap! + printf("[DIAG] initTexObj: Offset=%u, W=%u, H=%u, Ptr=%p\n", imgOffset, mTexInfo->width, + mTexInfo->height, + mTexInfo); image += (imgOffset ? imgOffset : 0x20); GXInitTexObjCI(&mTexObj, image, RES_U16(mTexInfo->width), RES_U16(mTexInfo->height), (GXCITexFmt)mTexInfo->format, (GXTexWrapMode)mWrapS, diff --git a/src/d/d_drawlist.cpp b/src/d/d_drawlist.cpp index 381b46051a..855566b7c7 100644 --- a/src/d/d_drawlist.cpp +++ b/src/d/d_drawlist.cpp @@ -1,5 +1,6 @@ #include "d/dolzel.h" // IWYU pragma: keep +#include #include "JSystem/J2DGraph/J2DAnimation.h" #include "JSystem/J2DGraph/J2DGrafContext.h" #include "JSystem/J2DGraph/J2DScreen.h" @@ -865,6 +866,13 @@ dDlst_2D_c::dDlst_2D_c(ResTIMG* i_timg, s16 i_posX, s16 i_posY, s16 i_sizeX, s16 } void dDlst_2D_c::draw() { + static int s2DDrawLogCount = 0; + if (s2DDrawLogCount < 10) { + printf("[DIAG] dDlst_2D_c::draw: pos=(%d,%d) size=(%d,%d) alpha=%d\n", + mPosX, mPosY, mSizeX, mSizeY, mAlpha); + fflush(stdout); + s2DDrawLogCount++; + } mpPicture.setAlpha(mAlpha); mpPicture.draw(mPosX, mPosY, mSizeX, mSizeY, false, false, false); } diff --git a/src/d/d_s_logo.cpp b/src/d/d_s_logo.cpp index 46dbcc8a0f..0291ac5463 100644 --- a/src/d/d_s_logo.cpp +++ b/src/d/d_s_logo.cpp @@ -107,8 +107,14 @@ void dScnLogo_c::checkProgSelect() { } int dScnLogo_c::draw() { + static int sDrawLogCount = 0; + if (sDrawLogCount < 10) { + printf("[DIAG] dScnLogo_c::draw: mExecCommand=%d mTimer=%d\n", mExecCommand, mTimer); + fflush(stdout); + } cLib_calcTimer(&mTimer); (this->*l_execFunc[mExecCommand])(); + sDrawLogCount++; return 1; } diff --git a/src/dusk/stubs.cpp b/src/dusk/stubs.cpp index 2cf4e4f671..aa91134f39 100644 --- a/src/dusk/stubs.cpp +++ b/src/dusk/stubs.cpp @@ -1640,10 +1640,11 @@ f32 GXGetYScaleFactor(u16 efbHeight, u16 xfbHeight) { puts("GXGetYScaleFactor is a stub"); return 0.0f; } + void GXInitTexCacheRegion(GXTexRegion* region, u8 is_32b_mipmap, u32 tmem_even, GXTexCacheSize size_even, u32 tmem_odd, GXTexCacheSize size_odd) { puts("GXInitTexCacheRegion is a stub"); -} +} // XXX, this should be some struct? // GXRenderModeObj GXNtsc480IntDf; GXRenderModeObj GXNtsc480Int; diff --git a/src/m_Do/m_Do_graphic.cpp b/src/m_Do/m_Do_graphic.cpp index 39a28d0d16..be577e7b12 100644 --- a/src/m_Do/m_Do_graphic.cpp +++ b/src/m_Do/m_Do_graphic.cpp @@ -2090,6 +2090,19 @@ int mDoGph_Painter() { dComIfGp_particle_draw2DmenuFore(&draw_info3); j3dSys.setViewMtx(m4); + } else { + // No camera window active — still draw 2D display lists + // (needed for logo scene, which has no 3D camera) + static int sElseLogCount = 0; + if (sElseLogCount < 10) { + printf("[DIAG] mDoGph_Painter else: drawing 2D lists (frame %d)\n", sElseLogCount); + fflush(stdout); + sElseLogCount++; + } + ortho.setPort(); + dComIfGd_draw2DOpa(); + dComIfGd_draw2DOpaTop(); + dComIfGd_draw2DXlu(); } #if DEBUG From ac411e84890e0032366827446cf8dd85d43eafb9 Mon Sep 17 00:00:00 2001 From: Lurs <2795933+Lurs@users.noreply.github.com> Date: Mon, 23 Feb 2026 21:47:34 +0100 Subject: [PATCH 16/46] Bringing aurora to remote origin again --- extern/aurora | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/aurora b/extern/aurora index 6f31dd1719..08e965bbe8 160000 --- a/extern/aurora +++ b/extern/aurora @@ -1 +1 @@ -Subproject commit 6f31dd1719a11ac71164267bdffffbce0340b270 +Subproject commit 08e965bbe8aa3dc502a026efa14d749e6f6d2794 From 0e3f7f10bd5482ee8d6051977b3595f88edf9ccb Mon Sep 17 00:00:00 2001 From: PJB3005 Date: Tue, 24 Feb 2026 13:11:35 +0100 Subject: [PATCH 17/46] Remove manual C++20 compile option from MSVC Not necessary, we already set CMAKE_CXX_STANDARD --- CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e328369216..f3b3b04c52 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,7 +27,6 @@ elseif (MSVC) add_compile_options(/Zc:strictStrings-) add_compile_options(/MP) add_compile_options(/W0) - add_compile_options(/std:c++20) endif () if (NOT MSVC) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-error -Wno-c++11-narrowing") From 5185613b718f07240717d9eca12d25adbd7bf784 Mon Sep 17 00:00:00 2001 From: PJB3005 Date: Tue, 24 Feb 2026 13:13:32 +0100 Subject: [PATCH 18/46] Move Aurora include before setting compile options Fixes our compile options breaking Aurora build --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f3b3b04c52..351c2df698 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,6 +9,8 @@ set(CMAKE_C_STANDARD 11) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) +add_subdirectory(extern/aurora EXCLUDE_FROM_ALL) + if (CMAKE_SYSTEM_NAME STREQUAL Linux) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unknown-pragmas -Wno-unused-variable -Wno-unused-parameter") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x -stdlib=libc++ -Wno-register -fPIC") @@ -32,8 +34,6 @@ if (NOT MSVC) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-error -Wno-c++11-narrowing") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error -Wno-c++11-narrowing") endif () -add_subdirectory(extern/aurora EXCLUDE_FROM_ALL) - set(DOLZEL_FILES src/m_Do/m_Do_main.cpp src/m_Do/m_Do_printf.cpp From 00b193b12179bd41597187a5287275e87bc83f9b Mon Sep 17 00:00:00 2001 From: PJB3005 Date: Tue, 24 Feb 2026 13:13:46 +0100 Subject: [PATCH 19/46] Remove some GX stubs now implemented by Aurora --- src/dusk/stubs.cpp | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/src/dusk/stubs.cpp b/src/dusk/stubs.cpp index aa91134f39..3063b4bccf 100644 --- a/src/dusk/stubs.cpp +++ b/src/dusk/stubs.cpp @@ -1645,9 +1645,6 @@ void GXInitTexCacheRegion(GXTexRegion* region, u8 is_32b_mipmap, u32 tmem_even, GXTexCacheSize size_even, u32 tmem_odd, GXTexCacheSize size_odd) { puts("GXInitTexCacheRegion is a stub"); } -// XXX, this should be some struct? -// GXRenderModeObj GXNtsc480IntDf; -GXRenderModeObj GXNtsc480Int; void GXPeekZ(u16 x, u16 y, u32* z) { puts("GXPeekZ is a stub"); *z = 0; @@ -1659,12 +1656,6 @@ void GXReadXfRasMetric(u32* xf_wait_in, u32* xf_wait_out, u32* ras_busy, u32* cl *ras_busy = 0; *clocks = 0; } -void GXSetClipMode(GXClipMode mode) { - puts("GXSetClipMode is a stub"); -} -void GXSetCoPlanar(GXBool enable) { - puts("GXSetCoPlanar is a stub"); -} void GXSetCopyClamp(GXFBClamp clamp) { puts("GXSetCopyClamp is a stub"); } @@ -1672,15 +1663,9 @@ OSThread* GXSetCurrentGXThread(void) { puts("GXSetCurrentGXThread is a stub"); return NULL; } -void GXSetFogRangeAdj(GXBool enable, u16 center, const GXFogAdjTable* table) { - puts("GXSetFogRangeAdj is a stub"); -} void GXSetMisc(GXMiscToken token, u32 val) { puts("GXSetMisc is a stub"); } -void GXSetPointSize(u8 pointSize, GXTexOffset texOffsets) { - puts("GXSetPointSize is a stub"); -} void GXSetProjectionv(const f32* ptr) { puts("GXSetProjectionv is a stub"); } From 33eec2d3d9b0dbc62d1cbce035524bd1fa0c7e64 Mon Sep 17 00:00:00 2001 From: PJB3005 Date: Tue, 24 Feb 2026 13:14:12 +0100 Subject: [PATCH 20/46] Move source file listing to separate CMake file Huge --- CMakeLists.txt | 1329 +---------------------------------------------- files.cmake | 1330 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1331 insertions(+), 1328 deletions(-) create mode 100644 files.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 351c2df698..f734ec60fe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,1335 +34,8 @@ if (NOT MSVC) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-error -Wno-c++11-narrowing") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error -Wno-c++11-narrowing") endif () -set(DOLZEL_FILES - src/m_Do/m_Do_main.cpp - src/m_Do/m_Do_printf.cpp - src/m_Do/m_Do_audio.cpp - src/m_Do/m_Do_controller_pad.cpp - #src/m_Do/m_Re_controller_pad.cpp - src/m_Do/m_Do_graphic.cpp - src/m_Do/m_Do_machine.cpp - src/m_Do/m_Do_mtx.cpp - src/m_Do/m_Do_ext.cpp - src/m_Do/m_Do_lib.cpp - src/m_Do/m_Do_Reset.cpp - src/m_Do/m_Do_dvd_thread.cpp - src/m_Do/m_Do_DVDError.cpp - src/m_Do/m_Do_MemCard.cpp - src/m_Do/m_Do_MemCardRWmng.cpp - src/m_Do/m_Do_machine_exception.cpp - src/m_Do/m_Do_hostIO.cpp - src/c/c_damagereaction.cpp - src/c/c_dylink.cpp - src/f_ap/f_ap_game.cpp - src/f_op/f_op_actor.cpp - src/f_op/f_op_actor_iter.cpp - src/f_op/f_op_actor_tag.cpp - src/f_op/f_op_camera.cpp - src/f_op/f_op_actor_mng.cpp - src/f_op/f_op_camera_mng.cpp - src/f_op/f_op_overlap.cpp - src/f_op/f_op_overlap_mng.cpp - src/f_op/f_op_overlap_req.cpp - src/f_op/f_op_scene.cpp - src/f_op/f_op_scene_iter.cpp - src/f_op/f_op_scene_mng.cpp - src/f_op/f_op_scene_req.cpp - src/f_op/f_op_scene_tag.cpp - src/f_op/f_op_view.cpp - src/f_op/f_op_kankyo.cpp - src/f_op/f_op_msg.cpp - src/f_op/f_op_kankyo_mng.cpp - src/f_op/f_op_msg_mng.cpp - src/f_op/f_op_draw_iter.cpp - src/f_op/f_op_draw_tag.cpp - src/f_op/f_op_scene_pause.cpp - src/f_pc/f_pc_base.cpp - src/f_pc/f_pc_create_iter.cpp - src/f_pc/f_pc_create_req.cpp - src/f_pc/f_pc_create_tag.cpp - src/f_pc/f_pc_creator.cpp - src/f_pc/f_pc_delete_tag.cpp - src/f_pc/f_pc_deletor.cpp - src/f_pc/f_pc_draw_priority.cpp - src/f_pc/f_pc_executor.cpp - src/f_pc/f_pc_layer.cpp - src/f_pc/f_pc_leaf.cpp - src/f_pc/f_pc_layer_iter.cpp - src/f_pc/f_pc_layer_tag.cpp - src/f_pc/f_pc_line.cpp - src/f_pc/f_pc_load.cpp - src/f_pc/f_pc_manager.cpp - src/f_pc/f_pc_method.cpp - src/f_pc/f_pc_node.cpp - src/f_pc/f_pc_node_req.cpp - src/f_pc/f_pc_priority.cpp - src/f_pc/f_pc_profile.cpp - src/f_pc/f_pc_searcher.cpp - src/f_pc/f_pc_line_tag.cpp - src/f_pc/f_pc_line_iter.cpp - src/f_pc/f_pc_method_iter.cpp - src/f_pc/f_pc_method_tag.cpp - src/f_pc/f_pc_pause.cpp - src/f_pc/f_pc_draw.cpp - src/f_pc/f_pc_fstcreate_req.cpp - src/f_pc/f_pc_stdcreate_req.cpp - src/f_pc/f_pc_debug_sv.cpp - src/d/d_stage.cpp - src/d/d_map.cpp - src/d/d_com_inf_game.cpp - src/d/d_com_static.cpp - src/d/d_com_inf_actor.cpp - src/d/d_bomb.cpp - src/d/d_lib.cpp - src/d/d_save.cpp - src/d/d_save_init.cpp - src/d/d_jnt_col.cpp - src/d/d_a_obj.cpp - src/d/d_a_itembase_static.cpp - src/d/d_a_item_static.cpp - src/d/d_a_shop_item_static.cpp - src/d/d_a_horse_static.cpp - src/d/d_demo.cpp - src/d/d_door_param2.cpp - src/d/d_resorce.cpp - src/d/d_map_path.cpp - src/d/d_map_path_fmap.cpp - src/d/d_map_path_dmap.cpp - src/d/d_event.cpp - src/d/d_event_data.cpp - src/d/d_event_manager.cpp - src/d/d_event_lib.cpp - src/d/d_simple_model.cpp - src/d/d_particle.cpp - src/d/d_particle_name.cpp - src/d/d_particle_copoly.cpp - src/d/d_path.cpp - src/d/d_drawlist.cpp - src/d/d_kankyo_data.cpp - src/d/d_kankyo_wether.cpp - src/d/d_kankyo_rain.cpp - src/d/d_kankyo_debug.cpp - src/d/d_vibration.cpp - src/d/d_vib_pattern.cpp - src/d/d_attention.cpp - src/d/d_bg_parts.cpp - src/d/d_bg_pc.cpp - src/d/d_att_dist.cpp - src/d/d_bg_plc.cpp - src/d/d_bg_s.cpp - src/d/d_bg_s_acch.cpp - src/d/d_bg_s_chk.cpp - src/d/d_bg_s_gnd_chk.cpp - src/d/d_bg_s_grp_pass_chk.cpp - src/d/d_bg_s_lin_chk.cpp - src/d/d_bg_s_movebg_actor.cpp - src/d/d_bg_s_sph_chk.cpp - src/d/d_bg_s_spl_grp_chk.cpp - src/d/d_bg_s_poly_pass_chk.cpp - src/d/d_bg_s_roof_chk.cpp - src/d/d_bg_s_wtr_chk.cpp - src/d/d_bg_w.cpp - src/d/d_bg_w_base.cpp - src/d/d_bg_w_kcol.cpp - src/d/d_bg_w_sv.cpp - src/d/d_cc_d.cpp - src/d/d_cc_mass_s.cpp - src/d/d_cc_s.cpp - src/d/d_cc_uty.cpp - src/d/d_cam_param.cpp - src/d/d_ev_camera.cpp - src/d/d_spline_path.cpp - src/d/d_item_data.cpp - src/d/d_item.cpp - src/d/d_tresure.cpp - src/d/d_model.cpp - src/d/d_eye_hl.cpp - src/d/d_error_msg.cpp - src/d/d_debug_viewer.cpp - src/d/d_debug_camera.cpp - src/d/actor/d_a_alink.cpp - src/d/actor/d_a_itembase.cpp - src/d/actor/d_a_no_chg_room.cpp - src/d/actor/d_a_npc.cpp - src/d/actor/d_a_npc_cd.cpp - src/d/actor/d_a_npc_cd2.cpp - src/d/actor/d_a_obj_item.cpp - src/d/d_insect.cpp - src/d/actor/d_a_obj_ss_base.cpp - src/d/actor/d_a_player.cpp - src/d/d_camera.cpp - src/d/d_envse.cpp - src/d/d_file_select.cpp - src/d/d_file_sel_warning.cpp - src/d/d_file_sel_info.cpp - src/d/d_bright_check.cpp - src/d/d_scope.cpp - src/d/d_select_cursor.cpp - src/d/d_select_icon.cpp - src/d/d_shop_camera.cpp - src/d/d_shop_item_ctrl.cpp - src/d/d_shop_system.cpp - src/d/d_gameover.cpp - src/d/d_kankyo.cpp - src/d/d_kyeff.cpp - src/d/d_kyeff2.cpp - src/d/d_ky_thunder.cpp - src/d/d_kantera_icon_meter.cpp - src/d/d_menu_calibration.cpp - src/d/d_menu_collect.cpp - src/d/d_menu_dmap.cpp - src/d/d_menu_dmap_map.cpp - src/d/d_menu_map_common.cpp - src/d/d_menu_fishing.cpp - src/d/d_menu_fmap.cpp - src/d/d_menu_fmap_map.cpp - src/d/d_menu_fmap2D.cpp - src/d/d_menu_insect.cpp - src/d/d_menu_item_explain.cpp - src/d/d_menu_letter.cpp - src/d/d_menu_option.cpp - src/d/d_menu_ring.cpp - src/d/d_menu_save.cpp - src/d/d_menu_skill.cpp - src/d/d_menu_window_HIO.cpp - src/d/d_menu_window.cpp - src/d/d_meter_HIO.cpp - src/d/d_meter_button.cpp - src/d/d_meter_haihai.cpp - src/d/d_meter_hakusha.cpp - src/d/d_meter_map.cpp - src/d/d_meter_string.cpp - src/d/d_meter2_draw.cpp - src/d/d_meter2_info.cpp - src/d/d_meter2.cpp - src/d/d_msg_out_font.cpp - src/d/d_msg_class.cpp - src/d/d_msg_object.cpp - src/d/d_msg_unit.cpp - src/d/d_msg_scrn_3select.cpp - src/d/d_msg_scrn_arrow.cpp - src/d/d_msg_scrn_base.cpp - src/d/d_msg_scrn_boss.cpp - src/d/d_msg_scrn_explain.cpp - src/d/d_msg_scrn_item.cpp - src/d/d_msg_scrn_howl.cpp - src/d/d_msg_scrn_jimaku.cpp - src/d/d_msg_scrn_kanban.cpp - src/d/d_msg_scrn_light.cpp - src/d/d_msg_scrn_place.cpp - src/d/d_msg_scrn_staff.cpp - src/d/d_msg_scrn_talk.cpp - src/d/d_msg_scrn_tree.cpp - src/d/d_msg_string_base.cpp - src/d/d_msg_string.cpp - src/d/d_msg_flow.cpp - src/d/d_name.cpp - src/d/d_npc_lib.cpp - src/d/d_ovlp_fade.cpp - src/d/d_ovlp_fade2.cpp - src/d/d_ovlp_fade3.cpp - src/d/d_pane_class.cpp - src/d/d_pane_class_alpha.cpp - src/d/d_pane_class_ex.cpp - src/d/d_s_logo.cpp - src/d/d_s_menu.cpp - src/d/d_s_name.cpp - src/d/d_s_play.cpp - src/d/d_s_room.cpp - src/d/d_s_title.cpp - src/d/d_save_HIO.cpp - src/d/d_timer.cpp - src/d/d_k_wmark.cpp - src/d/d_k_wpillar.cpp - src/DynamicLink.cpp - src/CaptureScreen.cpp - ) -if(DEBUG) -list(APPEND DOLZEL_FILES src/d/d_event_debug.cpp) -endif(DEBUG) -set(Z2AUDIOLIB_FILES - src/Z2AudioLib/Z2Calc.cpp - src/Z2AudioLib/Z2AudioArcLoader.cpp - src/Z2AudioLib/Z2Param.cpp - src/Z2AudioLib/Z2SoundMgr.cpp - src/Z2AudioLib/Z2SoundStarter.cpp - src/Z2AudioLib/Z2SoundHandles.cpp - src/Z2AudioLib/Z2SeMgr.cpp - src/Z2AudioLib/Z2SeqMgr.cpp - src/Z2AudioLib/Z2StatusMgr.cpp - src/Z2AudioLib/Z2SceneMgr.cpp - src/Z2AudioLib/Z2FxLineMgr.cpp - src/Z2AudioLib/Z2SoundInfo.cpp - src/Z2AudioLib/Z2Audience.cpp - src/Z2AudioLib/Z2SoundObject.cpp - src/Z2AudioLib/Z2SoundObjMgr.cpp - src/Z2AudioLib/Z2Creature.cpp - src/Z2AudioLib/Z2LinkMgr.cpp - src/Z2AudioLib/Z2EnvSeMgr.cpp - src/Z2AudioLib/Z2WolfHowlMgr.cpp - src/Z2AudioLib/Z2SpeechMgr2.cpp - src/Z2AudioLib/Z2AudioMgr.cpp - ) - -set(SSYSTEM_FILES - src/SSystem/SComponent/c_malloc.cpp - src/SSystem/SComponent/c_API.cpp - src/SSystem/SComponent/c_API_controller_pad.cpp - src/SSystem/SComponent/c_API_graphic.cpp - src/SSystem/SComponent/c_cc_d.cpp - src/SSystem/SComponent/c_cc_s.cpp - src/SSystem/SComponent/c_counter.cpp - src/SSystem/SComponent/c_list.cpp - src/SSystem/SComponent/c_list_iter.cpp - src/SSystem/SComponent/c_node.cpp - src/SSystem/SComponent/c_node_iter.cpp - src/SSystem/SComponent/c_tree.cpp - src/SSystem/SComponent/c_tree_iter.cpp - src/SSystem/SComponent/c_phase.cpp - src/SSystem/SComponent/c_request.cpp - src/SSystem/SComponent/c_tag.cpp - src/SSystem/SComponent/c_tag_iter.cpp - src/SSystem/SComponent/c_xyz.cpp - src/SSystem/SComponent/c_sxyz.cpp - src/SSystem/SComponent/c_math.cpp - src/SSystem/SComponent/c_bg_s_chk.cpp - src/SSystem/SComponent/c_bg_s_gnd_chk.cpp - src/SSystem/SComponent/c_bg_s_lin_chk.cpp - src/SSystem/SComponent/c_bg_s_shdw_draw.cpp - src/SSystem/SComponent/c_bg_s_poly_info.cpp - src/SSystem/SComponent/c_bg_w.cpp - src/SSystem/SComponent/c_m2d.cpp - src/SSystem/SComponent/c_m3d.cpp - src/SSystem/SComponent/c_m3d_g_aab.cpp - src/SSystem/SComponent/c_m3d_g_cir.cpp - src/SSystem/SComponent/c_m3d_g_cps.cpp - src/SSystem/SComponent/c_m3d_g_cyl.cpp - src/SSystem/SComponent/c_m3d_g_lin.cpp - src/SSystem/SComponent/c_m3d_g_pla.cpp - src/SSystem/SComponent/c_m3d_g_sph.cpp - src/SSystem/SComponent/c_m3d_g_tri.cpp - src/SSystem/SComponent/c_m3d_g_vtx.cpp - src/SSystem/SComponent/c_lib.cpp - src/SSystem/SComponent/c_angle.cpp - src/SSystem/SStandard/s_basic.cpp - ) - -set(JSYSTEM_FILES - src/JSystem/JFramework/JFWSystem.cpp - src/JSystem/JFramework/JFWDisplay.cpp - src/JSystem/J3DU/J3DUClipper.cpp - src/JSystem/J3DU/J3DUDL.cpp - src/JSystem/JParticle/JPAResourceManager.cpp - src/JSystem/JParticle/JPAResource.cpp - src/JSystem/JParticle/JPABaseShape.cpp - src/JSystem/JParticle/JPAExtraShape.cpp - src/JSystem/JParticle/JPAChildShape.cpp - src/JSystem/JParticle/JPAExTexShape.cpp - src/JSystem/JParticle/JPADynamicsBlock.cpp - src/JSystem/JParticle/JPAFieldBlock.cpp - src/JSystem/JParticle/JPAKeyBlock.cpp - src/JSystem/JParticle/JPATexture.cpp - src/JSystem/JParticle/JPAResourceLoader.cpp - src/JSystem/JParticle/JPAEmitterManager.cpp - src/JSystem/JParticle/JPAEmitter.cpp - src/JSystem/JParticle/JPAParticle.cpp - src/JSystem/JParticle/JPAMath.cpp - src/JSystem/JStage/JSGActor.cpp - src/JSystem/JStage/JSGAmbientLight.cpp - src/JSystem/JStage/JSGCamera.cpp - src/JSystem/JStage/JSGFog.cpp - src/JSystem/JStage/JSGLight.cpp - src/JSystem/JStage/JSGObject.cpp - src/JSystem/JStage/JSGSystem.cpp - src/JSystem/JStudio/JStudio/ctb.cpp - src/JSystem/JStudio/JStudio/ctb-data.cpp - src/JSystem/JStudio/JStudio/functionvalue.cpp - src/JSystem/JStudio/JStudio/fvb.cpp - src/JSystem/JStudio/JStudio/fvb-data.cpp - src/JSystem/JStudio/JStudio/fvb-data-parse.cpp - src/JSystem/JStudio/JStudio/jstudio-control.cpp - src/JSystem/JStudio/JStudio/jstudio-data.cpp - src/JSystem/JStudio/JStudio/jstudio-math.cpp - src/JSystem/JStudio/JStudio/jstudio-object.cpp - src/JSystem/JStudio/JStudio/object-id.cpp - src/JSystem/JStudio/JStudio/stb.cpp - src/JSystem/JStudio/JStudio/stb-data-parse.cpp - src/JSystem/JStudio/JStudio/stb-data.cpp - src/JSystem/JStudio/JStudio_JStage/control.cpp - src/JSystem/JStudio/JStudio_JStage/object.cpp - src/JSystem/JStudio/JStudio_JStage/object-actor.cpp - src/JSystem/JStudio/JStudio_JStage/object-ambientlight.cpp - src/JSystem/JStudio/JStudio_JStage/object-camera.cpp - src/JSystem/JStudio/JStudio_JStage/object-fog.cpp - src/JSystem/JStudio/JStudio_JStage/object-light.cpp - src/JSystem/JStudio/JStudio_JAudio2/control.cpp - src/JSystem/JStudio/JStudio_JAudio2/object-sound.cpp - src/JSystem/JStudio/JStudio_JParticle/control.cpp - src/JSystem/JStudio/JStudio_JParticle/object-particle.cpp - src/JSystem/JAudio2/JASCalc.cpp - src/JSystem/JAudio2/JASTaskThread.cpp - src/JSystem/JAudio2/JASDvdThread.cpp - src/JSystem/JAudio2/JASCallback.cpp - src/JSystem/JAudio2/JASHeapCtrl.cpp - src/JSystem/JAudio2/JASResArcLoader.cpp - src/JSystem/JAudio2/JASProbe.cpp - src/JSystem/JAudio2/JASReport.cpp - src/JSystem/JAudio2/JASCmdStack.cpp - src/JSystem/JAudio2/JASTrack.cpp - src/JSystem/JAudio2/JASTrackPort.cpp - src/JSystem/JAudio2/JASRegisterParam.cpp - src/JSystem/JAudio2/JASSeqCtrl.cpp - src/JSystem/JAudio2/JASSeqParser.cpp - src/JSystem/JAudio2/JASSeqReader.cpp - src/JSystem/JAudio2/JASAramStream.cpp - src/JSystem/JAudio2/JASBank.cpp - src/JSystem/JAudio2/JASBasicBank.cpp - src/JSystem/JAudio2/JASVoiceBank.cpp - src/JSystem/JAudio2/JASBasicInst.cpp - src/JSystem/JAudio2/JASDrumSet.cpp - src/JSystem/JAudio2/JASBasicWaveBank.cpp - src/JSystem/JAudio2/JASSimpleWaveBank.cpp - src/JSystem/JAudio2/JASWSParser.cpp - src/JSystem/JAudio2/JASBNKParser.cpp - src/JSystem/JAudio2/JASWaveArcLoader.cpp - src/JSystem/JAudio2/JASChannel.cpp - src/JSystem/JAudio2/JASLfo.cpp - src/JSystem/JAudio2/JASOscillator.cpp - src/JSystem/JAudio2/JASAiCtrl.cpp - src/JSystem/JAudio2/JASAudioThread.cpp - src/JSystem/JAudio2/JASAudioReseter.cpp - src/JSystem/JAudio2/JASDSPChannel.cpp - src/JSystem/JAudio2/JASDSPInterface.cpp - src/JSystem/JAudio2/JASDriverIF.cpp - src/JSystem/JAudio2/JASSoundParams.cpp - src/JSystem/JAudio2/dspproc.cpp - src/JSystem/JAudio2/dsptask.cpp - src/JSystem/JAudio2/osdsp.cpp - src/JSystem/JAudio2/osdsp_task.cpp - src/JSystem/JAudio2/JAIAudible.cpp - src/JSystem/JAudio2/JAIAudience.cpp - src/JSystem/JAudio2/JAISe.cpp - src/JSystem/JAudio2/JAISeMgr.cpp - src/JSystem/JAudio2/JAISeq.cpp - src/JSystem/JAudio2/JAISeqDataMgr.cpp - src/JSystem/JAudio2/JAISeqMgr.cpp - src/JSystem/JAudio2/JAISound.cpp - src/JSystem/JAudio2/JAISoundChild.cpp - src/JSystem/JAudio2/JAISoundHandles.cpp - src/JSystem/JAudio2/JAISoundInfo.cpp - src/JSystem/JAudio2/JAISoundParams.cpp - src/JSystem/JAudio2/JAISoundStarter.cpp - src/JSystem/JAudio2/JAIStream.cpp - src/JSystem/JAudio2/JAIStreamDataMgr.cpp - src/JSystem/JAudio2/JAIStreamMgr.cpp - src/JSystem/JAudio2/JAUAudioArcInterpreter.cpp - src/JSystem/JAudio2/JAUAudioArcLoader.cpp - src/JSystem/JAudio2/JAUAudioMgr.cpp - src/JSystem/JAudio2/JAUBankTable.cpp - src/JSystem/JAudio2/JAUClusterSound.cpp - src/JSystem/JAudio2/JAUInitializer.cpp - src/JSystem/JAudio2/JAUSectionHeap.cpp - src/JSystem/JAudio2/JAUSeqCollection.cpp - src/JSystem/JAudio2/JAUSeqDataBlockMgr.cpp - src/JSystem/JAudio2/JAUSoundAnimator.cpp - src/JSystem/JAudio2/JAUSoundTable.cpp - src/JSystem/JAudio2/JAUStreamFileTable.cpp - src/JSystem/JMessage/control.cpp - src/JSystem/JMessage/data.cpp - src/JSystem/JMessage/processor.cpp - src/JSystem/JMessage/resource.cpp - src/JSystem/JMessage/locale.cpp - src/JSystem/JKernel/JKRHeap.cpp - src/JSystem/JKernel/JKRExpHeap.cpp - src/JSystem/JKernel/JKRSolidHeap.cpp - src/JSystem/JKernel/JKRAssertHeap.cpp - src/JSystem/JKernel/JKRDisposer.cpp - src/JSystem/JKernel/JKRThread.cpp - src/JSystem/JKernel/JKRAram.cpp - src/JSystem/JKernel/JKRAramHeap.cpp - src/JSystem/JKernel/JKRAramBlock.cpp - src/JSystem/JKernel/JKRAramPiece.cpp - src/JSystem/JKernel/JKRAramStream.cpp - src/JSystem/JKernel/JKRFileLoader.cpp - src/JSystem/JKernel/JKRFileFinder.cpp - src/JSystem/JKernel/JKRFileCache.cpp - src/JSystem/JKernel/JKRArchivePub.cpp - src/JSystem/JKernel/JKRArchivePri.cpp - src/JSystem/JKernel/JKRMemArchive.cpp - src/JSystem/JKernel/JKRAramArchive.cpp - src/JSystem/JKernel/JKRDvdArchive.cpp - src/JSystem/JKernel/JKRCompArchive.cpp - src/JSystem/JKernel/JKRFile.cpp - src/JSystem/JKernel/JKRDvdFile.cpp - src/JSystem/JKernel/JKRDvdRipper.cpp - src/JSystem/JKernel/JKRDvdAramRipper.cpp - src/JSystem/JKernel/JKRDecomp.cpp - src/JSystem/JSupport/JSUList.cpp - src/JSystem/JSupport/JSUInputStream.cpp - src/JSystem/JSupport/JSUOutputStream.cpp - src/JSystem/JSupport/JSUMemoryStream.cpp - src/JSystem/JSupport/JSUFileStream.cpp - src/JSystem/JGadget/binary.cpp - src/JSystem/JGadget/linklist.cpp - src/JSystem/JGadget/std-vector.cpp - src/JSystem/JUtility/JUTCacheFont.cpp - src/JSystem/JUtility/JUTResource.cpp - src/JSystem/JUtility/JUTTexture.cpp - src/JSystem/JUtility/JUTPalette.cpp - src/JSystem/JUtility/JUTNameTab.cpp - src/JSystem/JUtility/JUTGraphFifo.cpp - src/JSystem/JUtility/JUTFont.cpp - src/JSystem/JUtility/JUTResFont.cpp - src/JSystem/JUtility/JUTDbPrint.cpp - src/JSystem/JUtility/JUTGamePad.cpp - src/JSystem/JUtility/JUTException.cpp - src/JSystem/JUtility/JUTDirectPrint.cpp - src/JSystem/JUtility/JUTAssert.cpp - src/JSystem/JUtility/JUTVideo.cpp - src/JSystem/JUtility/JUTXfb.cpp - src/JSystem/JUtility/JUTFader.cpp - src/JSystem/JUtility/JUTProcBar.cpp - src/JSystem/JUtility/JUTConsole.cpp - src/JSystem/JUtility/JUTDirectFile.cpp - src/JSystem/JUtility/JUTFontData_Ascfont_fix12.cpp - src/JSystem/J2DGraph/J2DGrafContext.cpp - src/JSystem/J2DGraph/J2DOrthoGraph.cpp - src/JSystem/J2DGraph/J2DTevs.cpp - src/JSystem/J2DGraph/J2DMaterial.cpp - src/JSystem/J2DGraph/J2DMatBlock.cpp - src/JSystem/J2DGraph/J2DMaterialFactory.cpp - src/JSystem/J2DGraph/J2DPrint.cpp - src/JSystem/J2DGraph/J2DPane.cpp - src/JSystem/J2DGraph/J2DScreen.cpp - src/JSystem/J2DGraph/J2DWindow.cpp - src/JSystem/J2DGraph/J2DPicture.cpp - src/JSystem/J2DGraph/J2DTextBox.cpp - src/JSystem/J2DGraph/J2DWindowEx.cpp - src/JSystem/J2DGraph/J2DPictureEx.cpp - src/JSystem/J2DGraph/J2DTextBoxEx.cpp - src/JSystem/J2DGraph/J2DAnmLoader.cpp - src/JSystem/J2DGraph/J2DAnimation.cpp - src/JSystem/J2DGraph/J2DManage.cpp - src/JSystem/J3DGraphBase/J3DGD.cpp - src/JSystem/J3DGraphBase/J3DSys.cpp - src/JSystem/J3DGraphBase/J3DVertex.cpp - src/JSystem/J3DGraphBase/J3DTransform.cpp - src/JSystem/J3DGraphBase/J3DTexture.cpp - src/JSystem/J3DGraphBase/J3DPacket.cpp - src/JSystem/J3DGraphBase/J3DShapeMtx.cpp - src/JSystem/J3DGraphBase/J3DShapeDraw.cpp - src/JSystem/J3DGraphBase/J3DShape.cpp - src/JSystem/J3DGraphBase/J3DMaterial.cpp - src/JSystem/J3DGraphBase/J3DMatBlock.cpp - src/JSystem/J3DGraphBase/J3DTevs.cpp - src/JSystem/J3DGraphBase/J3DDrawBuffer.cpp - src/JSystem/J3DGraphBase/J3DStruct.cpp - src/JSystem/J3DGraphAnimator/J3DShapeTable.cpp - src/JSystem/J3DGraphAnimator/J3DJointTree.cpp - src/JSystem/J3DGraphAnimator/J3DModelData.cpp - src/JSystem/J3DGraphAnimator/J3DMtxBuffer.cpp - src/JSystem/J3DGraphAnimator/J3DModel.cpp - src/JSystem/J3DGraphAnimator/J3DAnimation.cpp - src/JSystem/J3DGraphAnimator/J3DMaterialAnm.cpp - src/JSystem/J3DGraphAnimator/J3DSkinDeform.cpp - src/JSystem/J3DGraphAnimator/J3DCluster.cpp - src/JSystem/J3DGraphAnimator/J3DJoint.cpp - src/JSystem/J3DGraphAnimator/J3DMaterialAttach.cpp - src/JSystem/J3DGraphLoader/J3DMaterialFactory.cpp - src/JSystem/J3DGraphLoader/J3DMaterialFactory_v21.cpp - src/JSystem/J3DGraphLoader/J3DClusterLoader.cpp - src/JSystem/J3DGraphLoader/J3DModelLoader.cpp - src/JSystem/J3DGraphLoader/J3DModelLoaderCalcSize.cpp - src/JSystem/J3DGraphLoader/J3DJointFactory.cpp - src/JSystem/J3DGraphLoader/J3DShapeFactory.cpp - src/JSystem/J3DGraphLoader/J3DAnmLoader.cpp - src/JSystem/JMath/JMath.cpp - src/JSystem/JMath/random.cpp - src/JSystem/JMath/JMATrigonometric.cpp - src/JSystem/JHostIO/JORHostInfo.cpp - src/JSystem/JHostIO/JORServer.cpp - src/JSystem/JHostIO/JHIhioASync.cpp - src/JSystem/JHostIO/JHIRMcc.cpp - src/JSystem/JHostIO/JHIMccBuf.cpp - ) - -set(REL_FILES - src/f_pc/f_pc_profile_lst.cpp - src/d/actor/d_a_andsw.cpp - src/d/actor/d_a_bg.cpp - src/d/actor/d_a_bg_obj.cpp - src/d/actor/d_a_dmidna.cpp - src/d/actor/d_a_door_dbdoor00.cpp - src/d/actor/d_a_door_knob00.cpp - src/d/actor/d_a_door_shutter.cpp - src/d/actor/d_a_door_spiral.cpp - src/d/actor/d_a_dshutter.cpp - src/d/actor/d_a_ep.cpp - src/d/actor/d_a_hitobj.cpp - src/d/actor/d_a_kytag00.cpp - src/d/actor/d_a_kytag04.cpp - src/d/actor/d_a_kytag17.cpp - src/d/actor/d_a_obj_brakeeff.cpp - src/d/actor/d_a_obj_burnbox.cpp - src/d/actor/d_a_obj_carry.cpp - src/d/actor/d_a_obj_ito.cpp - src/d/actor/d_a_obj_movebox.cpp - src/d/actor/d_a_obj_swpush.cpp - src/d/actor/d_a_obj_timer.cpp - src/d/actor/d_a_path_line.cpp - src/d/actor/d_a_scene_exit.cpp - src/d/actor/d_a_set_bgobj.cpp - src/d/actor/d_a_swhit0.cpp - src/d/actor/d_a_tag_allmato.cpp - src/d/actor/d_a_tag_camera.cpp - src/d/actor/d_a_tag_chkpoint.cpp - src/d/actor/d_a_tag_event.cpp - src/d/actor/d_a_tag_evt.cpp - src/d/actor/d_a_tag_evtarea.cpp - src/d/actor/d_a_tag_evtmsg.cpp - src/d/actor/d_a_tag_howl.cpp - src/d/actor/d_a_tag_kmsg.cpp - src/d/actor/d_a_tag_lantern.cpp - src/d/actor/d_a_tag_mist.cpp - src/d/actor/d_a_tag_msg.cpp - src/d/actor/d_a_tag_push.cpp - src/d/actor/d_a_tag_telop.cpp - src/d/actor/d_a_tbox.cpp - src/d/actor/d_a_tbox2.cpp - src/d/actor/d_a_vrbox.cpp - src/d/actor/d_a_vrbox2.cpp - src/d/actor/d_a_arrow.cpp - src/d/actor/d_a_boomerang.cpp - src/d/actor/d_a_crod.cpp - src/d/actor/d_a_demo00.cpp - src/d/actor/d_a_disappear.cpp - src/d/actor/d_a_mg_rod.cpp - src/d/actor/d_a_midna.cpp - src/d/actor/d_a_nbomb.cpp - src/d/actor/d_a_obj_life_container.cpp - src/d/actor/d_a_obj_yousei.cpp - src/d/actor/d_a_spinner.cpp - src/d/actor/d_a_suspend.cpp - src/d/actor/d_a_tag_attention.cpp - src/d/actor/d_a_alldie.cpp - src/d/actor/d_a_andsw2.cpp - src/d/actor/d_a_bd.cpp - src/d/actor/d_a_canoe.cpp - src/d/actor/d_a_cstaF.cpp - src/d/actor/d_a_demo_item.cpp - src/d/actor/d_a_door_bossL1.cpp - src/d/actor/d_a_e_dn.cpp - src/d/actor/d_a_e_fm.cpp - src/d/actor/d_a_e_ga.cpp - src/d/actor/d_a_e_hb.cpp - src/d/actor/d_a_e_nest.cpp - src/d/actor/d_a_e_rd.cpp - src/d/actor/d_a_econt.cpp - src/d/actor/d_a_fr.cpp - src/d/actor/d_a_grass.cpp - src/d/actor/d_a_kytag05.cpp - src/d/actor/d_a_kytag10.cpp - src/d/actor/d_a_kytag11.cpp - src/d/actor/d_a_kytag14.cpp - src/d/actor/d_a_mg_fish.cpp - src/d/actor/d_a_npc_besu.cpp - src/d/actor/d_a_npc_fairy_seirei.cpp - src/d/actor/d_a_npc_fish.cpp - src/d/actor/d_a_npc_henna.cpp - src/d/actor/d_a_npc_kakashi.cpp - src/d/actor/d_a_npc_kkri.cpp - src/d/actor/d_a_npc_kolin.cpp - src/d/actor/d_a_npc_maro.cpp - src/d/actor/d_a_npc_taro.cpp - src/d/actor/d_a_npc_tkj.cpp - src/d/actor/d_a_obj_bhashi.cpp - src/d/actor/d_a_obj_bkdoor.cpp - src/d/actor/d_a_obj_bosswarp.cpp - src/d/actor/d_a_obj_cboard.cpp - src/d/actor/d_a_obj_digplace.cpp - src/d/actor/d_a_obj_eff.cpp - src/d/actor/d_a_obj_fmobj.cpp - src/d/actor/d_a_obj_gpTaru.cpp - src/d/actor/d_a_obj_hhashi.cpp - src/d/actor/d_a_obj_kanban2.cpp - src/d/actor/d_a_obj_kbacket.cpp - src/d/actor/d_a_obj_kgate.cpp - src/d/actor/d_a_obj_klift00.cpp - src/d/actor/d_a_obj_ktOnFire.cpp - src/d/actor/d_a_obj_ladder.cpp - src/d/actor/d_a_obj_lv2Candle.cpp - src/d/actor/d_a_obj_magne_arm.cpp - src/d/actor/d_a_obj_metalbox.cpp - src/d/actor/d_a_obj_mgate.cpp - src/d/actor/d_a_obj_nameplate.cpp - src/d/actor/d_a_obj_ornament_cloth.cpp - src/d/actor/d_a_obj_rope_bridge.cpp - src/d/actor/d_a_obj_sWallShutter.cpp - src/d/actor/d_a_obj_stick.cpp - src/d/actor/d_a_obj_stoneMark.cpp - src/d/actor/d_a_obj_swpropeller.cpp - src/d/actor/d_a_obj_swpush5.cpp - src/d/actor/d_a_obj_yobikusa.cpp - src/d/actor/d_a_scene_exit2.cpp - src/d/actor/d_a_shop_item.cpp - src/d/actor/d_a_sq.cpp - src/d/actor/d_a_swc00.cpp - src/d/actor/d_a_tag_CstaSw.cpp - src/d/actor/d_a_tag_ajnot.cpp - src/d/actor/d_a_tag_attack_item.cpp - src/d/actor/d_a_tag_gstart.cpp - src/d/actor/d_a_tag_hinit.cpp - src/d/actor/d_a_tag_hjump.cpp - src/d/actor/d_a_tag_hstop.cpp - src/d/actor/d_a_tag_lv2prchk.cpp - src/d/actor/d_a_tag_magne.cpp - src/d/actor/d_a_tag_mhint.cpp - src/d/actor/d_a_tag_mstop.cpp - src/d/actor/d_a_tag_spring.cpp - src/d/actor/d_a_tag_statue_evt.cpp - src/d/actor/d_a_ykgr.cpp - src/d/actor/d_a_L7demo_dr.cpp - src/d/actor/d_a_L7low_dr.cpp - src/d/actor/d_a_L7op_demo_dr.cpp - src/d/actor/d_a_b_bh.cpp - src/d/actor/d_a_b_bq.cpp - src/d/actor/d_a_b_dr.cpp - src/d/actor/d_a_b_dre.cpp - src/d/actor/d_a_b_ds.cpp - src/d/actor/d_a_b_gg.cpp - src/d/actor/d_a_b_gm.cpp - src/d/actor/d_a_b_gnd.cpp - src/d/actor/d_a_b_go.cpp - src/d/actor/d_a_b_gos.cpp - src/d/actor/d_a_b_mgn.cpp - src/d/actor/d_a_b_ob.cpp - src/d/actor/d_a_b_oh.cpp - src/d/actor/d_a_b_oh2.cpp - src/d/actor/d_a_b_tn.cpp - src/d/actor/d_a_b_yo.cpp - src/d/actor/d_a_b_yo_ice.cpp - src/d/actor/d_a_b_zant.cpp - src/d/actor/d_a_b_zant_magic.cpp - src/d/actor/d_a_b_zant_mobile.cpp - src/d/actor/d_a_b_zant_sima.cpp - src/d/actor/d_a_balloon_2D.cpp - src/d/actor/d_a_bullet.cpp - src/d/actor/d_a_coach_2D.cpp - src/d/actor/d_a_coach_fire.cpp - src/d/actor/d_a_cow.cpp - src/d/actor/d_a_cstatue.cpp - src/d/actor/d_a_do.cpp - src/d/actor/d_a_door_boss.cpp - src/d/actor/d_a_door_bossL5.cpp - src/d/actor/d_a_door_mbossL1.cpp - src/d/actor/d_a_door_push.cpp - src/d/actor/d_a_e_ai.cpp - src/d/actor/d_a_e_arrow.cpp - src/d/actor/d_a_e_ba.cpp - src/d/actor/d_a_e_bee.cpp - src/d/actor/d_a_e_bg.cpp - src/d/actor/d_a_e_bi.cpp - src/d/actor/d_a_e_bi_leaf.cpp - src/d/actor/d_a_e_bs.cpp - src/d/actor/d_a_e_bu.cpp - src/d/actor/d_a_e_bug.cpp - src/d/actor/d_a_e_cr.cpp - src/d/actor/d_a_e_cr_egg.cpp - src/d/actor/d_a_e_db.cpp - src/d/actor/d_a_e_db_leaf.cpp - src/d/actor/d_a_e_dd.cpp - src/d/actor/d_a_e_df.cpp - src/d/actor/d_a_e_dk.cpp - src/d/actor/d_a_e_dt.cpp - src/d/actor/d_a_e_fb.cpp - src/d/actor/d_a_e_fk.cpp - src/d/actor/d_a_e_fs.cpp - src/d/actor/d_a_e_fz.cpp - src/d/actor/d_a_e_gb.cpp - src/d/actor/d_a_e_ge.cpp - src/d/actor/d_a_e_gi.cpp - src/d/actor/d_a_e_gm.cpp - src/d/actor/d_a_e_gob.cpp - src/d/actor/d_a_e_gs.cpp - src/d/actor/d_a_e_hb_leaf.cpp - src/d/actor/d_a_e_hm.cpp - src/d/actor/d_a_e_hp.cpp - src/d/actor/d_a_e_hz.cpp - src/d/actor/d_a_e_hzelda.cpp - src/d/actor/d_a_e_is.cpp - src/d/actor/d_a_e_kg.cpp - src/d/actor/d_a_e_kk.cpp - src/d/actor/d_a_e_kr.cpp - src/d/actor/d_a_e_mb.cpp - src/d/actor/d_a_e_md.cpp - src/d/actor/d_a_e_mf.cpp - src/d/actor/d_a_e_mk.cpp - src/d/actor/d_a_e_mk_bo.cpp - src/d/actor/d_a_e_mm.cpp - src/d/actor/d_a_e_mm_mt.cpp - src/d/actor/d_a_e_ms.cpp - src/d/actor/d_a_e_nz.cpp - src/d/actor/d_a_e_oc.cpp - src/d/actor/d_a_e_oct_bg.cpp - src/d/actor/d_a_e_ot.cpp - src/d/actor/d_a_e_ph.cpp - src/d/actor/d_a_e_pm.cpp - src/d/actor/d_a_e_po.cpp - src/d/actor/d_a_e_pz.cpp - src/d/actor/d_a_e_rb.cpp - src/d/actor/d_a_e_rdb.cpp - src/d/actor/d_a_e_rdy.cpp - src/d/actor/d_a_e_s1.cpp - src/d/actor/d_a_e_sb.cpp - src/d/actor/d_a_e_sf.cpp - src/d/actor/d_a_e_sg.cpp - src/d/actor/d_a_e_sh.cpp - src/d/actor/d_a_e_sm.cpp - src/d/actor/d_a_e_sm2.cpp - src/d/actor/d_a_e_st.cpp - src/d/actor/d_a_e_st_line.cpp - src/d/actor/d_a_e_sw.cpp - src/d/actor/d_a_e_th.cpp - src/d/actor/d_a_e_th_ball.cpp - src/d/actor/d_a_e_tk.cpp - src/d/actor/d_a_e_tk2.cpp - src/d/actor/d_a_e_tk_ball.cpp - src/d/actor/d_a_e_tt.cpp - src/d/actor/d_a_e_vt.cpp - src/d/actor/d_a_e_warpappear.cpp - src/d/actor/d_a_e_wb.cpp - src/d/actor/d_a_e_ws.cpp - src/d/actor/d_a_e_ww.cpp - src/d/actor/d_a_e_yc.cpp - src/d/actor/d_a_e_yd.cpp - src/d/actor/d_a_e_yd_leaf.cpp - src/d/actor/d_a_e_yg.cpp - src/d/actor/d_a_e_yh.cpp - src/d/actor/d_a_e_yk.cpp - src/d/actor/d_a_e_ym.cpp - src/d/actor/d_a_e_ym_tag.cpp - src/d/actor/d_a_e_ymb.cpp - src/d/actor/d_a_e_yr.cpp - src/d/actor/d_a_e_zh.cpp - src/d/actor/d_a_e_zm.cpp - src/d/actor/d_a_e_zs.cpp - src/d/actor/d_a_formation_mng.cpp - src/d/actor/d_a_guard_mng.cpp - src/d/actor/d_a_horse.cpp - src/d/actor/d_a_hozelda.cpp - src/d/actor/d_a_izumi_gate.cpp - src/d/actor/d_a_kago.cpp - src/d/actor/d_a_kytag01.cpp - src/d/actor/d_a_kytag02.cpp - src/d/actor/d_a_kytag03.cpp - src/d/actor/d_a_kytag06.cpp - src/d/actor/d_a_kytag07.cpp - src/d/actor/d_a_kytag08.cpp - src/d/actor/d_a_kytag09.cpp - src/d/actor/d_a_kytag12.cpp - src/d/actor/d_a_kytag13.cpp - src/d/actor/d_a_kytag15.cpp - src/d/actor/d_a_kytag16.cpp - src/d/actor/d_a_mant.cpp - src/d/actor/d_a_mg_fshop.cpp - src/d/actor/d_a_mirror.cpp - src/d/actor/d_a_movie_player.cpp - src/d/actor/d_a_myna.cpp - src/d/actor/d_a_ni.cpp - src/d/actor/d_a_npc_aru.cpp - src/d/actor/d_a_npc_ash.cpp - src/d/actor/d_a_npc_ashB.cpp - src/d/actor/d_a_npc_bans.cpp - src/d/actor/d_a_npc_blue_ns.cpp - src/d/actor/d_a_npc_bou.cpp - src/d/actor/d_a_npc_bouS.cpp - src/d/actor/d_a_npc_cdn3.cpp - src/d/actor/d_a_npc_chat.cpp - src/d/actor/d_a_npc_chin.cpp - src/d/actor/d_a_npc_clerka.cpp - src/d/actor/d_a_npc_clerkb.cpp - src/d/actor/d_a_npc_clerkt.cpp - src/d/actor/d_a_npc_coach.cpp - src/d/actor/d_a_npc_df.cpp - src/d/actor/d_a_npc_doc.cpp - src/d/actor/d_a_npc_doorboy.cpp - src/d/actor/d_a_npc_drainSol.cpp - src/d/actor/d_a_npc_du.cpp - src/d/actor/d_a_npc_fairy.cpp - src/d/actor/d_a_npc_fguard.cpp - src/d/actor/d_a_npc_gnd.cpp - src/d/actor/d_a_npc_gra.cpp - src/d/actor/d_a_npc_grc.cpp - src/d/actor/d_a_npc_grd.cpp - src/d/actor/d_a_npc_grm.cpp - src/d/actor/d_a_npc_grmc.cpp - src/d/actor/d_a_npc_gro.cpp - src/d/actor/d_a_npc_grr.cpp - src/d/actor/d_a_npc_grs.cpp - src/d/actor/d_a_npc_grz.cpp - src/d/actor/d_a_npc_guard.cpp - src/d/actor/d_a_npc_gwolf.cpp - src/d/actor/d_a_npc_hanjo.cpp - src/d/actor/d_a_npc_henna0.cpp - src/d/actor/d_a_npc_hoz.cpp - src/d/actor/d_a_npc_impal.cpp - src/d/actor/d_a_npc_inko.cpp - src/d/actor/d_a_npc_ins.cpp - src/d/actor/d_a_npc_jagar.cpp - src/d/actor/d_a_npc_kasi_hana.cpp - src/d/actor/d_a_npc_kasi_kyu.cpp - src/d/actor/d_a_npc_kasi_mich.cpp - src/d/actor/d_a_npc_kdk.cpp - src/d/actor/d_a_npc_kn.cpp - src/d/actor/d_a_npc_knj.cpp - src/d/actor/d_a_npc_kolinb.cpp - src/d/actor/d_a_npc_ks.cpp - src/d/actor/d_a_npc_kyury.cpp - src/d/actor/d_a_npc_len.cpp - src/d/actor/d_a_npc_lf.cpp - src/d/actor/d_a_npc_lud.cpp - src/d/actor/d_a_npc_midp.cpp - src/d/actor/d_a_npc_mk.cpp - src/d/actor/d_a_npc_moi.cpp - src/d/actor/d_a_npc_moir.cpp - src/d/actor/d_a_npc_myna2.cpp - src/d/actor/d_a_npc_ne.cpp - src/d/actor/d_a_npc_p2.cpp - src/d/actor/d_a_npc_pachi_besu.cpp - src/d/actor/d_a_npc_pachi_maro.cpp - src/d/actor/d_a_npc_pachi_taro.cpp - src/d/actor/d_a_npc_passer.cpp - src/d/actor/d_a_npc_passer2.cpp - src/d/actor/d_a_npc_post.cpp - src/d/actor/d_a_npc_pouya.cpp - src/d/actor/d_a_npc_prayer.cpp - src/d/actor/d_a_npc_raca.cpp - src/d/actor/d_a_npc_rafrel.cpp - src/d/actor/d_a_npc_saru.cpp - src/d/actor/d_a_npc_seib.cpp - src/d/actor/d_a_npc_seic.cpp - src/d/actor/d_a_npc_seid.cpp - src/d/actor/d_a_npc_seira.cpp - src/d/actor/d_a_npc_seira2.cpp - src/d/actor/d_a_npc_seirei.cpp - src/d/actor/d_a_npc_shad.cpp - src/d/actor/d_a_npc_shaman.cpp - src/d/actor/d_a_npc_shoe.cpp - src/d/actor/d_a_npc_shop0.cpp - src/d/actor/d_a_npc_shop_maro.cpp - src/d/actor/d_a_npc_sola.cpp - src/d/actor/d_a_npc_soldierA.cpp - src/d/actor/d_a_npc_soldierB.cpp - src/d/actor/d_a_npc_sq.cpp - src/d/actor/d_a_npc_the.cpp - src/d/actor/d_a_npc_theB.cpp - src/d/actor/d_a_npc_tk.cpp - src/d/actor/d_a_npc_tkc.cpp - src/d/actor/d_a_npc_tkj2.cpp - src/d/actor/d_a_npc_tks.cpp - src/d/actor/d_a_npc_toby.cpp - src/d/actor/d_a_npc_tr.cpp - src/d/actor/d_a_npc_uri.cpp - src/d/actor/d_a_npc_worm.cpp - src/d/actor/d_a_npc_wrestler.cpp - src/d/actor/d_a_npc_yamid.cpp - src/d/actor/d_a_npc_yamis.cpp - src/d/actor/d_a_npc_yamit.cpp - src/d/actor/d_a_npc_yelia.cpp - src/d/actor/d_a_npc_ykm.cpp - src/d/actor/d_a_npc_ykw.cpp - src/d/actor/d_a_npc_zanb.cpp - src/d/actor/d_a_npc_zant.cpp - src/d/actor/d_a_npc_zelR.cpp - src/d/actor/d_a_npc_zelRo.cpp - src/d/actor/d_a_npc_zelda.cpp - src/d/actor/d_a_npc_zra.cpp - src/d/actor/d_a_npc_zrc.cpp - src/d/actor/d_a_npc_zrz.cpp - src/d/actor/d_a_obj_Lv5Key.cpp - src/d/actor/d_a_obj_Turara.cpp - src/d/actor/d_a_obj_TvCdlst.cpp - src/d/actor/d_a_obj_Y_taihou.cpp - src/d/actor/d_a_obj_amiShutter.cpp - src/d/actor/d_a_obj_ari.cpp - src/d/actor/d_a_obj_automata.cpp - src/d/actor/d_a_obj_avalanche.cpp - src/d/actor/d_a_obj_balloon.cpp - src/d/actor/d_a_obj_barDesk.cpp - src/d/actor/d_a_obj_batta.cpp - src/d/actor/d_a_obj_bbox.cpp - src/d/actor/d_a_obj_bed.cpp - src/d/actor/d_a_obj_bemos.cpp - src/d/actor/d_a_obj_bhbridge.cpp - src/d/actor/d_a_obj_bk_leaf.cpp - src/d/actor/d_a_obj_bky_rock.cpp - src/d/actor/d_a_obj_bmWindow.cpp - src/d/actor/d_a_obj_bmshutter.cpp - src/d/actor/d_a_obj_bombf.cpp - src/d/actor/d_a_obj_boumato.cpp - src/d/actor/d_a_obj_brg.cpp - src/d/actor/d_a_obj_bsGate.cpp - src/d/actor/d_a_obj_bubblePilar.cpp - src/d/actor/d_a_obj_catdoor.cpp - src/d/actor/d_a_obj_cb.cpp - src/d/actor/d_a_obj_cblock.cpp - src/d/actor/d_a_obj_cdoor.cpp - src/d/actor/d_a_obj_chandelier.cpp - src/d/actor/d_a_obj_chest.cpp - src/d/actor/d_a_obj_cho.cpp - src/d/actor/d_a_obj_cowdoor.cpp - src/d/actor/d_a_obj_crope.cpp - src/d/actor/d_a_obj_crvfence.cpp - src/d/actor/d_a_obj_crvgate.cpp - src/d/actor/d_a_obj_crvhahen.cpp - src/d/actor/d_a_obj_crvlh_down.cpp - src/d/actor/d_a_obj_crvlh_up.cpp - src/d/actor/d_a_obj_crvsteel.cpp - src/d/actor/d_a_obj_crystal.cpp - src/d/actor/d_a_obj_cwall.cpp - src/d/actor/d_a_obj_damCps.cpp - src/d/actor/d_a_obj_dan.cpp - src/d/actor/d_a_obj_digholl.cpp - src/d/actor/d_a_obj_digsnow.cpp - src/d/actor/d_a_obj_dmelevator.cpp - src/d/actor/d_a_obj_drop.cpp - src/d/actor/d_a_obj_dust.cpp - src/d/actor/d_a_obj_enemy_create.cpp - src/d/actor/d_a_obj_fallobj.cpp - src/d/actor/d_a_obj_fan.cpp - src/d/actor/d_a_obj_fchain.cpp - src/d/actor/d_a_obj_fireWood.cpp - src/d/actor/d_a_obj_fireWood2.cpp - src/d/actor/d_a_obj_firepillar.cpp - src/d/actor/d_a_obj_firepillar2.cpp - src/d/actor/d_a_obj_flag.cpp - src/d/actor/d_a_obj_flag2.cpp - src/d/actor/d_a_obj_flag3.cpp - src/d/actor/d_a_obj_food.cpp - src/d/actor/d_a_obj_fw.cpp - src/d/actor/d_a_obj_gadget.cpp - src/d/actor/d_a_obj_ganonwall.cpp - src/d/actor/d_a_obj_ganonwall2.cpp - src/d/actor/d_a_obj_gb.cpp - src/d/actor/d_a_obj_geyser.cpp - src/d/actor/d_a_obj_glowSphere.cpp - src/d/actor/d_a_obj_gm.cpp - src/d/actor/d_a_obj_goGate.cpp - src/d/actor/d_a_obj_gomikabe.cpp - src/d/actor/d_a_obj_gra2.cpp - src/d/actor/d_a_obj_graWall.cpp - src/d/actor/d_a_obj_gra_rock.cpp - src/d/actor/d_a_obj_grave_stone.cpp - src/d/actor/d_a_obj_groundwater.cpp - src/d/actor/d_a_obj_grz_rock.cpp - src/d/actor/d_a_obj_h_saku.cpp - src/d/actor/d_a_obj_hakai_brl.cpp - src/d/actor/d_a_obj_hakai_ftr.cpp - src/d/actor/d_a_obj_hasu2.cpp - src/d/actor/d_a_obj_hata.cpp - src/d/actor/d_a_obj_hb.cpp - src/d/actor/d_a_obj_hbombkoya.cpp - src/d/actor/d_a_obj_heavySw.cpp - src/d/actor/d_a_obj_hfuta.cpp - src/d/actor/d_a_obj_hsTarget.cpp - src/d/actor/d_a_obj_ice_l.cpp - src/d/actor/d_a_obj_ice_s.cpp - src/d/actor/d_a_obj_iceblock.cpp - src/d/actor/d_a_obj_iceleaf.cpp - src/d/actor/d_a_obj_ihasi.cpp - src/d/actor/d_a_obj_ikada.cpp - src/d/actor/d_a_obj_inobone.cpp - src/d/actor/d_a_obj_ita.cpp - src/d/actor/d_a_obj_itamato.cpp - src/d/actor/d_a_obj_kabuto.cpp - src/d/actor/d_a_obj_kag.cpp - src/d/actor/d_a_obj_kage.cpp - src/d/actor/d_a_obj_kago.cpp - src/d/actor/d_a_obj_kaisou.cpp - src/d/actor/d_a_obj_kamakiri.cpp - src/d/actor/d_a_obj_kantera.cpp - src/d/actor/d_a_obj_katatsumuri.cpp - src/d/actor/d_a_obj_kazeneko.cpp - src/d/actor/d_a_obj_kbox.cpp - src/d/actor/d_a_obj_key.cpp - src/d/actor/d_a_obj_keyhole.cpp - src/d/actor/d_a_obj_ki.cpp - src/d/actor/d_a_obj_kiPot.cpp - src/d/actor/d_a_obj_kita.cpp - src/d/actor/d_a_obj_kjgjs.cpp - src/d/actor/d_a_obj_kkanban.cpp - src/d/actor/d_a_obj_knBullet.cpp - src/d/actor/d_a_obj_kshutter.cpp - src/d/actor/d_a_obj_kuwagata.cpp - src/d/actor/d_a_obj_kwheel00.cpp - src/d/actor/d_a_obj_kwheel01.cpp - src/d/actor/d_a_obj_kznkarm.cpp - src/d/actor/d_a_obj_laundry.cpp - src/d/actor/d_a_obj_laundry_rope.cpp - src/d/actor/d_a_obj_lbox.cpp - src/d/actor/d_a_obj_lp.cpp - src/d/actor/d_a_obj_lv1Candle00.cpp - src/d/actor/d_a_obj_lv1Candle01.cpp - src/d/actor/d_a_obj_lv3Candle.cpp - src/d/actor/d_a_obj_lv3Water.cpp - src/d/actor/d_a_obj_lv3Water2.cpp - src/d/actor/d_a_obj_lv3WaterB.cpp - src/d/actor/d_a_obj_lv3saka00.cpp - src/d/actor/d_a_obj_lv3waterEff.cpp - src/d/actor/d_a_obj_lv4CandleDemoTag.cpp - src/d/actor/d_a_obj_lv4CandleTag.cpp - src/d/actor/d_a_obj_lv4EdShutter.cpp - src/d/actor/d_a_obj_lv4Gate.cpp - src/d/actor/d_a_obj_lv4HsTarget.cpp - src/d/actor/d_a_obj_lv4PoGate.cpp - src/d/actor/d_a_obj_lv4RailWall.cpp - src/d/actor/d_a_obj_lv4SlideWall.cpp - src/d/actor/d_a_obj_lv4bridge.cpp - src/d/actor/d_a_obj_lv4chandelier.cpp - src/d/actor/d_a_obj_lv4digsand.cpp - src/d/actor/d_a_obj_lv4floor.cpp - src/d/actor/d_a_obj_lv4gear.cpp - src/d/actor/d_a_obj_lv4prelvtr.cpp - src/d/actor/d_a_obj_lv4prwall.cpp - src/d/actor/d_a_obj_lv4sand.cpp - src/d/actor/d_a_obj_lv5FloorBoard.cpp - src/d/actor/d_a_obj_lv5IceWall.cpp - src/d/actor/d_a_obj_lv5SwIce.cpp - src/d/actor/d_a_obj_lv5ychndlr.cpp - src/d/actor/d_a_obj_lv5yiblltray.cpp - src/d/actor/d_a_obj_lv6ChangeGate.cpp - src/d/actor/d_a_obj_lv6FurikoTrap.cpp - src/d/actor/d_a_obj_lv6Lblock.cpp - src/d/actor/d_a_obj_lv6SwGate.cpp - src/d/actor/d_a_obj_lv6SzGate.cpp - src/d/actor/d_a_obj_lv6Tenbin.cpp - src/d/actor/d_a_obj_lv6TogeRoll.cpp - src/d/actor/d_a_obj_lv6TogeTrap.cpp - src/d/actor/d_a_obj_lv6bemos.cpp - src/d/actor/d_a_obj_lv6bemos2.cpp - src/d/actor/d_a_obj_lv6egate.cpp - src/d/actor/d_a_obj_lv6elevta.cpp - src/d/actor/d_a_obj_lv6swturn.cpp - src/d/actor/d_a_obj_lv7BsGate.cpp - src/d/actor/d_a_obj_lv7PropellerY.cpp - src/d/actor/d_a_obj_lv7bridge.cpp - src/d/actor/d_a_obj_lv8KekkaiTrap.cpp - src/d/actor/d_a_obj_lv8Lift.cpp - src/d/actor/d_a_obj_lv8OptiLift.cpp - src/d/actor/d_a_obj_lv8UdFloor.cpp - src/d/actor/d_a_obj_lv9SwShutter.cpp - src/d/actor/d_a_obj_magLift.cpp - src/d/actor/d_a_obj_magLiftRot.cpp - src/d/actor/d_a_obj_maki.cpp - src/d/actor/d_a_obj_master_sword.cpp - src/d/actor/d_a_obj_mato.cpp - src/d/actor/d_a_obj_mhole.cpp - src/d/actor/d_a_obj_mie.cpp - src/d/actor/d_a_obj_mirror_6pole.cpp - src/d/actor/d_a_obj_mirror_chain.cpp - src/d/actor/d_a_obj_mirror_sand.cpp - src/d/actor/d_a_obj_mirror_screw.cpp - src/d/actor/d_a_obj_mirror_table.cpp - src/d/actor/d_a_obj_msima.cpp - src/d/actor/d_a_obj_mvstair.cpp - src/d/actor/d_a_obj_myogan.cpp - src/d/actor/d_a_obj_nagaisu.cpp - src/d/actor/d_a_obj_nan.cpp - src/d/actor/d_a_obj_ndoor.cpp - src/d/actor/d_a_obj_nougu.cpp - src/d/actor/d_a_obj_octhashi.cpp - src/d/actor/d_a_obj_oiltubo.cpp - src/d/actor/d_a_obj_onsen.cpp - src/d/actor/d_a_obj_onsenFire.cpp - src/d/actor/d_a_obj_onsenTaru.cpp - src/d/actor/d_a_obj_pdoor.cpp - src/d/actor/d_a_obj_pdtile.cpp - src/d/actor/d_a_obj_pdwall.cpp - src/d/actor/d_a_obj_picture.cpp - src/d/actor/d_a_obj_pillar.cpp - src/d/actor/d_a_obj_pleaf.cpp - src/d/actor/d_a_obj_poCandle.cpp - src/d/actor/d_a_obj_poFire.cpp - src/d/actor/d_a_obj_poTbox.cpp - src/d/actor/d_a_obj_prop.cpp - src/d/actor/d_a_obj_pumpkin.cpp - src/d/actor/d_a_obj_rcircle.cpp - src/d/actor/d_a_obj_rfHole.cpp - src/d/actor/d_a_obj_rgate.cpp - src/d/actor/d_a_obj_riverrock.cpp - src/d/actor/d_a_obj_rock.cpp - src/d/actor/d_a_obj_rotBridge.cpp - src/d/actor/d_a_obj_rotTrap.cpp - src/d/actor/d_a_obj_roten.cpp - src/d/actor/d_a_obj_rstair.cpp - src/d/actor/d_a_obj_rw.cpp - src/d/actor/d_a_obj_saidan.cpp - src/d/actor/d_a_obj_sakuita.cpp - src/d/actor/d_a_obj_sakuita_rope.cpp - src/d/actor/d_a_obj_scannon.cpp - src/d/actor/d_a_obj_scannon_crs.cpp - src/d/actor/d_a_obj_scannon_ten.cpp - src/d/actor/d_a_obj_sekidoor.cpp - src/d/actor/d_a_obj_sekizo.cpp - src/d/actor/d_a_obj_sekizoa.cpp - src/d/actor/d_a_obj_shield.cpp - src/d/actor/d_a_obj_sm_door.cpp - src/d/actor/d_a_obj_smallkey.cpp - src/d/actor/d_a_obj_smgdoor.cpp - src/d/actor/d_a_obj_smoke.cpp - src/d/actor/d_a_obj_smtile.cpp - src/d/actor/d_a_obj_smw_stone.cpp - src/d/actor/d_a_obj_snowEffTag.cpp - src/d/actor/d_a_obj_snow_soup.cpp - src/d/actor/d_a_obj_so.cpp - src/d/actor/d_a_obj_spinLift.cpp - src/d/actor/d_a_obj_ss_drink.cpp - src/d/actor/d_a_obj_ss_item.cpp - src/d/actor/d_a_obj_stairBlock.cpp - src/d/actor/d_a_obj_stone.cpp - src/d/actor/d_a_obj_stopper.cpp - src/d/actor/d_a_obj_stopper2.cpp - src/d/actor/d_a_obj_suisya.cpp - src/d/actor/d_a_obj_sw.cpp - src/d/actor/d_a_obj_swBallA.cpp - src/d/actor/d_a_obj_swBallB.cpp - src/d/actor/d_a_obj_swBallC.cpp - src/d/actor/d_a_obj_swLight.cpp - src/d/actor/d_a_obj_swchain.cpp - src/d/actor/d_a_obj_swhang.cpp - src/d/actor/d_a_obj_sword.cpp - src/d/actor/d_a_obj_swpush2.cpp - src/d/actor/d_a_obj_swspinner.cpp - src/d/actor/d_a_obj_swturn.cpp - src/d/actor/d_a_obj_syRock.cpp - src/d/actor/d_a_obj_szbridge.cpp - src/d/actor/d_a_obj_taFence.cpp - src/d/actor/d_a_obj_table.cpp - src/d/actor/d_a_obj_takaraDai.cpp - src/d/actor/d_a_obj_tatigi.cpp - src/d/actor/d_a_obj_ten.cpp - src/d/actor/d_a_obj_testcube.cpp - src/d/actor/d_a_obj_tgake.cpp - src/d/actor/d_a_obj_thashi.cpp - src/d/actor/d_a_obj_thdoor.cpp - src/d/actor/d_a_obj_timeFire.cpp - src/d/actor/d_a_obj_tks.cpp - src/d/actor/d_a_obj_tmoon.cpp - src/d/actor/d_a_obj_toaru_maki.cpp - src/d/actor/d_a_obj_toby.cpp - src/d/actor/d_a_obj_tobyhouse.cpp - src/d/actor/d_a_obj_togeTrap.cpp - src/d/actor/d_a_obj_tombo.cpp - src/d/actor/d_a_obj_tornado.cpp - src/d/actor/d_a_obj_tornado2.cpp - src/d/actor/d_a_obj_tp.cpp - src/d/actor/d_a_obj_treesh.cpp - src/d/actor/d_a_obj_twGate.cpp - src/d/actor/d_a_obj_udoor.cpp - src/d/actor/d_a_obj_usaku.cpp - src/d/actor/d_a_obj_vground.cpp - src/d/actor/d_a_obj_volcball.cpp - src/d/actor/d_a_obj_volcbom.cpp - src/d/actor/d_a_obj_warp_kbrg.cpp - src/d/actor/d_a_obj_warp_obrg.cpp - src/d/actor/d_a_obj_waterGate.cpp - src/d/actor/d_a_obj_waterPillar.cpp - src/d/actor/d_a_obj_waterfall.cpp - src/d/actor/d_a_obj_wchain.cpp - src/d/actor/d_a_obj_wdStick.cpp - src/d/actor/d_a_obj_web0.cpp - src/d/actor/d_a_obj_web1.cpp - src/d/actor/d_a_obj_well_cover.cpp - src/d/actor/d_a_obj_wflag.cpp - src/d/actor/d_a_obj_wind_stone.cpp - src/d/actor/d_a_obj_window.cpp - src/d/actor/d_a_obj_wood_pendulum.cpp - src/d/actor/d_a_obj_wood_statue.cpp - src/d/actor/d_a_obj_wsword.cpp - src/d/actor/d_a_obj_yel_bag.cpp - src/d/actor/d_a_obj_ystone.cpp - src/d/actor/d_a_obj_zcloth.cpp - src/d/actor/d_a_obj_zdoor.cpp - src/d/actor/d_a_obj_zrTurara.cpp - src/d/actor/d_a_obj_zrTuraraRock.cpp - src/d/actor/d_a_obj_zraMark.cpp - src/d/actor/d_a_obj_zra_freeze.cpp - src/d/actor/d_a_obj_zra_rock.cpp - src/d/actor/d_a_passer_mng.cpp - src/d/actor/d_a_tag_arena.cpp - src/d/actor/d_a_peru.cpp - src/d/actor/d_a_ppolamp.cpp - src/d/actor/d_a_skip_2D.cpp - src/d/actor/d_a_startAndGoal.cpp - src/d/actor/d_a_swBall.cpp - src/d/actor/d_a_swLBall.cpp - src/d/actor/d_a_swTime.cpp - src/d/actor/d_a_tag_Lv6Gate.cpp - src/d/actor/d_a_tag_Lv7Gate.cpp - src/d/actor/d_a_tag_Lv8Gate.cpp - src/d/actor/d_a_tag_TWgate.cpp - src/d/actor/d_a_tag_lv6CstaSw.cpp - src/d/actor/d_a_tag_assistance.cpp - src/d/actor/d_a_tag_bottle_item.cpp - src/d/actor/d_a_tag_chgrestart.cpp - src/d/actor/d_a_tag_csw.cpp - src/d/actor/d_a_tag_escape.cpp - src/d/actor/d_a_tag_firewall.cpp - src/d/actor/d_a_tag_gra.cpp - src/d/actor/d_a_tag_guard.cpp - src/d/actor/d_a_tag_instruction.cpp - src/d/actor/d_a_tag_kago_fall.cpp - src/d/actor/d_a_tag_lightball.cpp - src/d/actor/d_a_tag_lv5soup.cpp - src/d/actor/d_a_tag_mmsg.cpp - src/d/actor/d_a_tag_mwait.cpp - src/d/actor/d_a_tag_myna2.cpp - src/d/actor/d_a_tag_myna_light.cpp - src/d/actor/d_a_tag_pachi.cpp - src/d/actor/d_a_tag_poFire.cpp - src/d/actor/d_a_tag_qs.cpp - src/d/actor/d_a_tag_ret_room.cpp - src/d/actor/d_a_tag_river_back.cpp - src/d/actor/d_a_tag_rmbit_sw.cpp - src/d/actor/d_a_tag_schedule.cpp - src/d/actor/d_a_tag_setBall.cpp - src/d/actor/d_a_tag_setrestart.cpp - src/d/actor/d_a_tag_shop_camera.cpp - src/d/actor/d_a_tag_shop_item.cpp - src/d/actor/d_a_tag_smk_emt.cpp - src/d/actor/d_a_tag_spinner.cpp - src/d/actor/d_a_tag_sppath.cpp - src/d/actor/d_a_tag_ss_drink.cpp - src/d/actor/d_a_tag_stream.cpp - src/d/actor/d_a_tag_theB_hint.cpp - src/d/actor/d_a_tag_wara_howl.cpp - src/d/actor/d_a_tag_watchge.cpp - src/d/actor/d_a_tag_waterfall.cpp - src/d/actor/d_a_tag_wljump.cpp - src/d/actor/d_a_tag_yami.cpp - src/d/actor/d_a_talk.cpp - src/d/actor/d_a_tboxSw.cpp - src/d/actor/d_a_title.cpp - src/d/actor/d_a_warp_bug.cpp - ) - -set(DUSK_FILES - src/dusk/imgui.cpp - src/dusk/stubs.cpp - src/dusk/extras.c - src/dusk/extras.cpp - src/dusk/globals.cpp - src/dusk/mtx.cpp - src/dusk/J3DTransforms_C.cpp - #src/dusk/m_Do_ext_dusk.cpp - src/dusk/jsystem_stubs.cpp - src/dusk/dvd_emu.cpp - src/dolphin/os/OSContext.cpp - src/dolphin/os/OSThread.cpp - src/dolphin/os/OSMutex.cpp - ) +include(files.cmake) source_group("dolzel" FILES ${DOLZEL_FILES} ${Z2AUDIOLIB_FILES} ${SSYSTEM_FILES} ${JSYSTEM_FILES} ${REL_FILES}) source_group("dusk" FILES ${DUSK_FILES}) diff --git a/files.cmake b/files.cmake new file mode 100644 index 0000000000..f260b3435e --- /dev/null +++ b/files.cmake @@ -0,0 +1,1330 @@ + +set(DOLZEL_FILES + src/m_Do/m_Do_main.cpp + src/m_Do/m_Do_printf.cpp + src/m_Do/m_Do_audio.cpp + src/m_Do/m_Do_controller_pad.cpp + #src/m_Do/m_Re_controller_pad.cpp + src/m_Do/m_Do_graphic.cpp + src/m_Do/m_Do_machine.cpp + src/m_Do/m_Do_mtx.cpp + src/m_Do/m_Do_ext.cpp + src/m_Do/m_Do_lib.cpp + src/m_Do/m_Do_Reset.cpp + src/m_Do/m_Do_dvd_thread.cpp + src/m_Do/m_Do_DVDError.cpp + src/m_Do/m_Do_MemCard.cpp + src/m_Do/m_Do_MemCardRWmng.cpp + src/m_Do/m_Do_machine_exception.cpp + src/m_Do/m_Do_hostIO.cpp + src/c/c_damagereaction.cpp + src/c/c_dylink.cpp + src/f_ap/f_ap_game.cpp + src/f_op/f_op_actor.cpp + src/f_op/f_op_actor_iter.cpp + src/f_op/f_op_actor_tag.cpp + src/f_op/f_op_camera.cpp + src/f_op/f_op_actor_mng.cpp + src/f_op/f_op_camera_mng.cpp + src/f_op/f_op_overlap.cpp + src/f_op/f_op_overlap_mng.cpp + src/f_op/f_op_overlap_req.cpp + src/f_op/f_op_scene.cpp + src/f_op/f_op_scene_iter.cpp + src/f_op/f_op_scene_mng.cpp + src/f_op/f_op_scene_req.cpp + src/f_op/f_op_scene_tag.cpp + src/f_op/f_op_view.cpp + src/f_op/f_op_kankyo.cpp + src/f_op/f_op_msg.cpp + src/f_op/f_op_kankyo_mng.cpp + src/f_op/f_op_msg_mng.cpp + src/f_op/f_op_draw_iter.cpp + src/f_op/f_op_draw_tag.cpp + src/f_op/f_op_scene_pause.cpp + src/f_pc/f_pc_base.cpp + src/f_pc/f_pc_create_iter.cpp + src/f_pc/f_pc_create_req.cpp + src/f_pc/f_pc_create_tag.cpp + src/f_pc/f_pc_creator.cpp + src/f_pc/f_pc_delete_tag.cpp + src/f_pc/f_pc_deletor.cpp + src/f_pc/f_pc_draw_priority.cpp + src/f_pc/f_pc_executor.cpp + src/f_pc/f_pc_layer.cpp + src/f_pc/f_pc_leaf.cpp + src/f_pc/f_pc_layer_iter.cpp + src/f_pc/f_pc_layer_tag.cpp + src/f_pc/f_pc_line.cpp + src/f_pc/f_pc_load.cpp + src/f_pc/f_pc_manager.cpp + src/f_pc/f_pc_method.cpp + src/f_pc/f_pc_node.cpp + src/f_pc/f_pc_node_req.cpp + src/f_pc/f_pc_priority.cpp + src/f_pc/f_pc_profile.cpp + src/f_pc/f_pc_searcher.cpp + src/f_pc/f_pc_line_tag.cpp + src/f_pc/f_pc_line_iter.cpp + src/f_pc/f_pc_method_iter.cpp + src/f_pc/f_pc_method_tag.cpp + src/f_pc/f_pc_pause.cpp + src/f_pc/f_pc_draw.cpp + src/f_pc/f_pc_fstcreate_req.cpp + src/f_pc/f_pc_stdcreate_req.cpp + src/f_pc/f_pc_debug_sv.cpp + src/d/d_stage.cpp + src/d/d_map.cpp + src/d/d_com_inf_game.cpp + src/d/d_com_static.cpp + src/d/d_com_inf_actor.cpp + src/d/d_bomb.cpp + src/d/d_lib.cpp + src/d/d_save.cpp + src/d/d_save_init.cpp + src/d/d_jnt_col.cpp + src/d/d_a_obj.cpp + src/d/d_a_itembase_static.cpp + src/d/d_a_item_static.cpp + src/d/d_a_shop_item_static.cpp + src/d/d_a_horse_static.cpp + src/d/d_demo.cpp + src/d/d_door_param2.cpp + src/d/d_resorce.cpp + src/d/d_map_path.cpp + src/d/d_map_path_fmap.cpp + src/d/d_map_path_dmap.cpp + src/d/d_event.cpp + src/d/d_event_data.cpp + src/d/d_event_manager.cpp + src/d/d_event_lib.cpp + src/d/d_simple_model.cpp + src/d/d_particle.cpp + src/d/d_particle_name.cpp + src/d/d_particle_copoly.cpp + src/d/d_path.cpp + src/d/d_drawlist.cpp + src/d/d_kankyo_data.cpp + src/d/d_kankyo_wether.cpp + src/d/d_kankyo_rain.cpp + src/d/d_kankyo_debug.cpp + src/d/d_vibration.cpp + src/d/d_vib_pattern.cpp + src/d/d_attention.cpp + src/d/d_bg_parts.cpp + src/d/d_bg_pc.cpp + src/d/d_att_dist.cpp + src/d/d_bg_plc.cpp + src/d/d_bg_s.cpp + src/d/d_bg_s_acch.cpp + src/d/d_bg_s_chk.cpp + src/d/d_bg_s_gnd_chk.cpp + src/d/d_bg_s_grp_pass_chk.cpp + src/d/d_bg_s_lin_chk.cpp + src/d/d_bg_s_movebg_actor.cpp + src/d/d_bg_s_sph_chk.cpp + src/d/d_bg_s_spl_grp_chk.cpp + src/d/d_bg_s_poly_pass_chk.cpp + src/d/d_bg_s_roof_chk.cpp + src/d/d_bg_s_wtr_chk.cpp + src/d/d_bg_w.cpp + src/d/d_bg_w_base.cpp + src/d/d_bg_w_kcol.cpp + src/d/d_bg_w_sv.cpp + src/d/d_cc_d.cpp + src/d/d_cc_mass_s.cpp + src/d/d_cc_s.cpp + src/d/d_cc_uty.cpp + src/d/d_cam_param.cpp + src/d/d_ev_camera.cpp + src/d/d_spline_path.cpp + src/d/d_item_data.cpp + src/d/d_item.cpp + src/d/d_tresure.cpp + src/d/d_model.cpp + src/d/d_eye_hl.cpp + src/d/d_error_msg.cpp + src/d/d_debug_viewer.cpp + src/d/d_debug_camera.cpp + src/d/actor/d_a_alink.cpp + src/d/actor/d_a_itembase.cpp + src/d/actor/d_a_no_chg_room.cpp + src/d/actor/d_a_npc.cpp + src/d/actor/d_a_npc_cd.cpp + src/d/actor/d_a_npc_cd2.cpp + src/d/actor/d_a_obj_item.cpp + src/d/d_insect.cpp + src/d/actor/d_a_obj_ss_base.cpp + src/d/actor/d_a_player.cpp + src/d/d_camera.cpp + src/d/d_envse.cpp + src/d/d_file_select.cpp + src/d/d_file_sel_warning.cpp + src/d/d_file_sel_info.cpp + src/d/d_bright_check.cpp + src/d/d_scope.cpp + src/d/d_select_cursor.cpp + src/d/d_select_icon.cpp + src/d/d_shop_camera.cpp + src/d/d_shop_item_ctrl.cpp + src/d/d_shop_system.cpp + src/d/d_gameover.cpp + src/d/d_kankyo.cpp + src/d/d_kyeff.cpp + src/d/d_kyeff2.cpp + src/d/d_ky_thunder.cpp + src/d/d_kantera_icon_meter.cpp + src/d/d_menu_calibration.cpp + src/d/d_menu_collect.cpp + src/d/d_menu_dmap.cpp + src/d/d_menu_dmap_map.cpp + src/d/d_menu_map_common.cpp + src/d/d_menu_fishing.cpp + src/d/d_menu_fmap.cpp + src/d/d_menu_fmap_map.cpp + src/d/d_menu_fmap2D.cpp + src/d/d_menu_insect.cpp + src/d/d_menu_item_explain.cpp + src/d/d_menu_letter.cpp + src/d/d_menu_option.cpp + src/d/d_menu_ring.cpp + src/d/d_menu_save.cpp + src/d/d_menu_skill.cpp + src/d/d_menu_window_HIO.cpp + src/d/d_menu_window.cpp + src/d/d_meter_HIO.cpp + src/d/d_meter_button.cpp + src/d/d_meter_haihai.cpp + src/d/d_meter_hakusha.cpp + src/d/d_meter_map.cpp + src/d/d_meter_string.cpp + src/d/d_meter2_draw.cpp + src/d/d_meter2_info.cpp + src/d/d_meter2.cpp + src/d/d_msg_out_font.cpp + src/d/d_msg_class.cpp + src/d/d_msg_object.cpp + src/d/d_msg_unit.cpp + src/d/d_msg_scrn_3select.cpp + src/d/d_msg_scrn_arrow.cpp + src/d/d_msg_scrn_base.cpp + src/d/d_msg_scrn_boss.cpp + src/d/d_msg_scrn_explain.cpp + src/d/d_msg_scrn_item.cpp + src/d/d_msg_scrn_howl.cpp + src/d/d_msg_scrn_jimaku.cpp + src/d/d_msg_scrn_kanban.cpp + src/d/d_msg_scrn_light.cpp + src/d/d_msg_scrn_place.cpp + src/d/d_msg_scrn_staff.cpp + src/d/d_msg_scrn_talk.cpp + src/d/d_msg_scrn_tree.cpp + src/d/d_msg_string_base.cpp + src/d/d_msg_string.cpp + src/d/d_msg_flow.cpp + src/d/d_name.cpp + src/d/d_npc_lib.cpp + src/d/d_ovlp_fade.cpp + src/d/d_ovlp_fade2.cpp + src/d/d_ovlp_fade3.cpp + src/d/d_pane_class.cpp + src/d/d_pane_class_alpha.cpp + src/d/d_pane_class_ex.cpp + src/d/d_s_logo.cpp + src/d/d_s_menu.cpp + src/d/d_s_name.cpp + src/d/d_s_play.cpp + src/d/d_s_room.cpp + src/d/d_s_title.cpp + src/d/d_save_HIO.cpp + src/d/d_timer.cpp + src/d/d_k_wmark.cpp + src/d/d_k_wpillar.cpp + src/DynamicLink.cpp + src/CaptureScreen.cpp +) +if(DEBUG) + list(APPEND DOLZEL_FILES src/d/d_event_debug.cpp) +endif(DEBUG) + +set(Z2AUDIOLIB_FILES + src/Z2AudioLib/Z2Calc.cpp + src/Z2AudioLib/Z2AudioArcLoader.cpp + src/Z2AudioLib/Z2Param.cpp + src/Z2AudioLib/Z2SoundMgr.cpp + src/Z2AudioLib/Z2SoundStarter.cpp + src/Z2AudioLib/Z2SoundHandles.cpp + src/Z2AudioLib/Z2SeMgr.cpp + src/Z2AudioLib/Z2SeqMgr.cpp + src/Z2AudioLib/Z2StatusMgr.cpp + src/Z2AudioLib/Z2SceneMgr.cpp + src/Z2AudioLib/Z2FxLineMgr.cpp + src/Z2AudioLib/Z2SoundInfo.cpp + src/Z2AudioLib/Z2Audience.cpp + src/Z2AudioLib/Z2SoundObject.cpp + src/Z2AudioLib/Z2SoundObjMgr.cpp + src/Z2AudioLib/Z2Creature.cpp + src/Z2AudioLib/Z2LinkMgr.cpp + src/Z2AudioLib/Z2EnvSeMgr.cpp + src/Z2AudioLib/Z2WolfHowlMgr.cpp + src/Z2AudioLib/Z2SpeechMgr2.cpp + src/Z2AudioLib/Z2AudioMgr.cpp +) + +set(SSYSTEM_FILES + src/SSystem/SComponent/c_malloc.cpp + src/SSystem/SComponent/c_API.cpp + src/SSystem/SComponent/c_API_controller_pad.cpp + src/SSystem/SComponent/c_API_graphic.cpp + src/SSystem/SComponent/c_cc_d.cpp + src/SSystem/SComponent/c_cc_s.cpp + src/SSystem/SComponent/c_counter.cpp + src/SSystem/SComponent/c_list.cpp + src/SSystem/SComponent/c_list_iter.cpp + src/SSystem/SComponent/c_node.cpp + src/SSystem/SComponent/c_node_iter.cpp + src/SSystem/SComponent/c_tree.cpp + src/SSystem/SComponent/c_tree_iter.cpp + src/SSystem/SComponent/c_phase.cpp + src/SSystem/SComponent/c_request.cpp + src/SSystem/SComponent/c_tag.cpp + src/SSystem/SComponent/c_tag_iter.cpp + src/SSystem/SComponent/c_xyz.cpp + src/SSystem/SComponent/c_sxyz.cpp + src/SSystem/SComponent/c_math.cpp + src/SSystem/SComponent/c_bg_s_chk.cpp + src/SSystem/SComponent/c_bg_s_gnd_chk.cpp + src/SSystem/SComponent/c_bg_s_lin_chk.cpp + src/SSystem/SComponent/c_bg_s_shdw_draw.cpp + src/SSystem/SComponent/c_bg_s_poly_info.cpp + src/SSystem/SComponent/c_bg_w.cpp + src/SSystem/SComponent/c_m2d.cpp + src/SSystem/SComponent/c_m3d.cpp + src/SSystem/SComponent/c_m3d_g_aab.cpp + src/SSystem/SComponent/c_m3d_g_cir.cpp + src/SSystem/SComponent/c_m3d_g_cps.cpp + src/SSystem/SComponent/c_m3d_g_cyl.cpp + src/SSystem/SComponent/c_m3d_g_lin.cpp + src/SSystem/SComponent/c_m3d_g_pla.cpp + src/SSystem/SComponent/c_m3d_g_sph.cpp + src/SSystem/SComponent/c_m3d_g_tri.cpp + src/SSystem/SComponent/c_m3d_g_vtx.cpp + src/SSystem/SComponent/c_lib.cpp + src/SSystem/SComponent/c_angle.cpp + src/SSystem/SStandard/s_basic.cpp +) + +set(JSYSTEM_FILES + src/JSystem/JFramework/JFWSystem.cpp + src/JSystem/JFramework/JFWDisplay.cpp + src/JSystem/J3DU/J3DUClipper.cpp + src/JSystem/J3DU/J3DUDL.cpp + src/JSystem/JParticle/JPAResourceManager.cpp + src/JSystem/JParticle/JPAResource.cpp + src/JSystem/JParticle/JPABaseShape.cpp + src/JSystem/JParticle/JPAExtraShape.cpp + src/JSystem/JParticle/JPAChildShape.cpp + src/JSystem/JParticle/JPAExTexShape.cpp + src/JSystem/JParticle/JPADynamicsBlock.cpp + src/JSystem/JParticle/JPAFieldBlock.cpp + src/JSystem/JParticle/JPAKeyBlock.cpp + src/JSystem/JParticle/JPATexture.cpp + src/JSystem/JParticle/JPAResourceLoader.cpp + src/JSystem/JParticle/JPAEmitterManager.cpp + src/JSystem/JParticle/JPAEmitter.cpp + src/JSystem/JParticle/JPAParticle.cpp + src/JSystem/JParticle/JPAMath.cpp + src/JSystem/JStage/JSGActor.cpp + src/JSystem/JStage/JSGAmbientLight.cpp + src/JSystem/JStage/JSGCamera.cpp + src/JSystem/JStage/JSGFog.cpp + src/JSystem/JStage/JSGLight.cpp + src/JSystem/JStage/JSGObject.cpp + src/JSystem/JStage/JSGSystem.cpp + src/JSystem/JStudio/JStudio/ctb.cpp + src/JSystem/JStudio/JStudio/ctb-data.cpp + src/JSystem/JStudio/JStudio/functionvalue.cpp + src/JSystem/JStudio/JStudio/fvb.cpp + src/JSystem/JStudio/JStudio/fvb-data.cpp + src/JSystem/JStudio/JStudio/fvb-data-parse.cpp + src/JSystem/JStudio/JStudio/jstudio-control.cpp + src/JSystem/JStudio/JStudio/jstudio-data.cpp + src/JSystem/JStudio/JStudio/jstudio-math.cpp + src/JSystem/JStudio/JStudio/jstudio-object.cpp + src/JSystem/JStudio/JStudio/object-id.cpp + src/JSystem/JStudio/JStudio/stb.cpp + src/JSystem/JStudio/JStudio/stb-data-parse.cpp + src/JSystem/JStudio/JStudio/stb-data.cpp + src/JSystem/JStudio/JStudio_JStage/control.cpp + src/JSystem/JStudio/JStudio_JStage/object.cpp + src/JSystem/JStudio/JStudio_JStage/object-actor.cpp + src/JSystem/JStudio/JStudio_JStage/object-ambientlight.cpp + src/JSystem/JStudio/JStudio_JStage/object-camera.cpp + src/JSystem/JStudio/JStudio_JStage/object-fog.cpp + src/JSystem/JStudio/JStudio_JStage/object-light.cpp + src/JSystem/JStudio/JStudio_JAudio2/control.cpp + src/JSystem/JStudio/JStudio_JAudio2/object-sound.cpp + src/JSystem/JStudio/JStudio_JParticle/control.cpp + src/JSystem/JStudio/JStudio_JParticle/object-particle.cpp + src/JSystem/JAudio2/JASCalc.cpp + src/JSystem/JAudio2/JASTaskThread.cpp + src/JSystem/JAudio2/JASDvdThread.cpp + src/JSystem/JAudio2/JASCallback.cpp + src/JSystem/JAudio2/JASHeapCtrl.cpp + src/JSystem/JAudio2/JASResArcLoader.cpp + src/JSystem/JAudio2/JASProbe.cpp + src/JSystem/JAudio2/JASReport.cpp + src/JSystem/JAudio2/JASCmdStack.cpp + src/JSystem/JAudio2/JASTrack.cpp + src/JSystem/JAudio2/JASTrackPort.cpp + src/JSystem/JAudio2/JASRegisterParam.cpp + src/JSystem/JAudio2/JASSeqCtrl.cpp + src/JSystem/JAudio2/JASSeqParser.cpp + src/JSystem/JAudio2/JASSeqReader.cpp + src/JSystem/JAudio2/JASAramStream.cpp + src/JSystem/JAudio2/JASBank.cpp + src/JSystem/JAudio2/JASBasicBank.cpp + src/JSystem/JAudio2/JASVoiceBank.cpp + src/JSystem/JAudio2/JASBasicInst.cpp + src/JSystem/JAudio2/JASDrumSet.cpp + src/JSystem/JAudio2/JASBasicWaveBank.cpp + src/JSystem/JAudio2/JASSimpleWaveBank.cpp + src/JSystem/JAudio2/JASWSParser.cpp + src/JSystem/JAudio2/JASBNKParser.cpp + src/JSystem/JAudio2/JASWaveArcLoader.cpp + src/JSystem/JAudio2/JASChannel.cpp + src/JSystem/JAudio2/JASLfo.cpp + src/JSystem/JAudio2/JASOscillator.cpp + src/JSystem/JAudio2/JASAiCtrl.cpp + src/JSystem/JAudio2/JASAudioThread.cpp + src/JSystem/JAudio2/JASAudioReseter.cpp + src/JSystem/JAudio2/JASDSPChannel.cpp + src/JSystem/JAudio2/JASDSPInterface.cpp + src/JSystem/JAudio2/JASDriverIF.cpp + src/JSystem/JAudio2/JASSoundParams.cpp + src/JSystem/JAudio2/dspproc.cpp + src/JSystem/JAudio2/dsptask.cpp + src/JSystem/JAudio2/osdsp.cpp + src/JSystem/JAudio2/osdsp_task.cpp + src/JSystem/JAudio2/JAIAudible.cpp + src/JSystem/JAudio2/JAIAudience.cpp + src/JSystem/JAudio2/JAISe.cpp + src/JSystem/JAudio2/JAISeMgr.cpp + src/JSystem/JAudio2/JAISeq.cpp + src/JSystem/JAudio2/JAISeqDataMgr.cpp + src/JSystem/JAudio2/JAISeqMgr.cpp + src/JSystem/JAudio2/JAISound.cpp + src/JSystem/JAudio2/JAISoundChild.cpp + src/JSystem/JAudio2/JAISoundHandles.cpp + src/JSystem/JAudio2/JAISoundInfo.cpp + src/JSystem/JAudio2/JAISoundParams.cpp + src/JSystem/JAudio2/JAISoundStarter.cpp + src/JSystem/JAudio2/JAIStream.cpp + src/JSystem/JAudio2/JAIStreamDataMgr.cpp + src/JSystem/JAudio2/JAIStreamMgr.cpp + src/JSystem/JAudio2/JAUAudioArcInterpreter.cpp + src/JSystem/JAudio2/JAUAudioArcLoader.cpp + src/JSystem/JAudio2/JAUAudioMgr.cpp + src/JSystem/JAudio2/JAUBankTable.cpp + src/JSystem/JAudio2/JAUClusterSound.cpp + src/JSystem/JAudio2/JAUInitializer.cpp + src/JSystem/JAudio2/JAUSectionHeap.cpp + src/JSystem/JAudio2/JAUSeqCollection.cpp + src/JSystem/JAudio2/JAUSeqDataBlockMgr.cpp + src/JSystem/JAudio2/JAUSoundAnimator.cpp + src/JSystem/JAudio2/JAUSoundTable.cpp + src/JSystem/JAudio2/JAUStreamFileTable.cpp + src/JSystem/JMessage/control.cpp + src/JSystem/JMessage/data.cpp + src/JSystem/JMessage/processor.cpp + src/JSystem/JMessage/resource.cpp + src/JSystem/JMessage/locale.cpp + src/JSystem/JKernel/JKRHeap.cpp + src/JSystem/JKernel/JKRExpHeap.cpp + src/JSystem/JKernel/JKRSolidHeap.cpp + src/JSystem/JKernel/JKRAssertHeap.cpp + src/JSystem/JKernel/JKRDisposer.cpp + src/JSystem/JKernel/JKRThread.cpp + src/JSystem/JKernel/JKRAram.cpp + src/JSystem/JKernel/JKRAramHeap.cpp + src/JSystem/JKernel/JKRAramBlock.cpp + src/JSystem/JKernel/JKRAramPiece.cpp + src/JSystem/JKernel/JKRAramStream.cpp + src/JSystem/JKernel/JKRFileLoader.cpp + src/JSystem/JKernel/JKRFileFinder.cpp + src/JSystem/JKernel/JKRFileCache.cpp + src/JSystem/JKernel/JKRArchivePub.cpp + src/JSystem/JKernel/JKRArchivePri.cpp + src/JSystem/JKernel/JKRMemArchive.cpp + src/JSystem/JKernel/JKRAramArchive.cpp + src/JSystem/JKernel/JKRDvdArchive.cpp + src/JSystem/JKernel/JKRCompArchive.cpp + src/JSystem/JKernel/JKRFile.cpp + src/JSystem/JKernel/JKRDvdFile.cpp + src/JSystem/JKernel/JKRDvdRipper.cpp + src/JSystem/JKernel/JKRDvdAramRipper.cpp + src/JSystem/JKernel/JKRDecomp.cpp + src/JSystem/JSupport/JSUList.cpp + src/JSystem/JSupport/JSUInputStream.cpp + src/JSystem/JSupport/JSUOutputStream.cpp + src/JSystem/JSupport/JSUMemoryStream.cpp + src/JSystem/JSupport/JSUFileStream.cpp + src/JSystem/JGadget/binary.cpp + src/JSystem/JGadget/linklist.cpp + src/JSystem/JGadget/std-vector.cpp + src/JSystem/JUtility/JUTCacheFont.cpp + src/JSystem/JUtility/JUTResource.cpp + src/JSystem/JUtility/JUTTexture.cpp + src/JSystem/JUtility/JUTPalette.cpp + src/JSystem/JUtility/JUTNameTab.cpp + src/JSystem/JUtility/JUTGraphFifo.cpp + src/JSystem/JUtility/JUTFont.cpp + src/JSystem/JUtility/JUTResFont.cpp + src/JSystem/JUtility/JUTDbPrint.cpp + src/JSystem/JUtility/JUTGamePad.cpp + src/JSystem/JUtility/JUTException.cpp + src/JSystem/JUtility/JUTDirectPrint.cpp + src/JSystem/JUtility/JUTAssert.cpp + src/JSystem/JUtility/JUTVideo.cpp + src/JSystem/JUtility/JUTXfb.cpp + src/JSystem/JUtility/JUTFader.cpp + src/JSystem/JUtility/JUTProcBar.cpp + src/JSystem/JUtility/JUTConsole.cpp + src/JSystem/JUtility/JUTDirectFile.cpp + src/JSystem/JUtility/JUTFontData_Ascfont_fix12.cpp + src/JSystem/J2DGraph/J2DGrafContext.cpp + src/JSystem/J2DGraph/J2DOrthoGraph.cpp + src/JSystem/J2DGraph/J2DTevs.cpp + src/JSystem/J2DGraph/J2DMaterial.cpp + src/JSystem/J2DGraph/J2DMatBlock.cpp + src/JSystem/J2DGraph/J2DMaterialFactory.cpp + src/JSystem/J2DGraph/J2DPrint.cpp + src/JSystem/J2DGraph/J2DPane.cpp + src/JSystem/J2DGraph/J2DScreen.cpp + src/JSystem/J2DGraph/J2DWindow.cpp + src/JSystem/J2DGraph/J2DPicture.cpp + src/JSystem/J2DGraph/J2DTextBox.cpp + src/JSystem/J2DGraph/J2DWindowEx.cpp + src/JSystem/J2DGraph/J2DPictureEx.cpp + src/JSystem/J2DGraph/J2DTextBoxEx.cpp + src/JSystem/J2DGraph/J2DAnmLoader.cpp + src/JSystem/J2DGraph/J2DAnimation.cpp + src/JSystem/J2DGraph/J2DManage.cpp + src/JSystem/J3DGraphBase/J3DGD.cpp + src/JSystem/J3DGraphBase/J3DSys.cpp + src/JSystem/J3DGraphBase/J3DVertex.cpp + src/JSystem/J3DGraphBase/J3DTransform.cpp + src/JSystem/J3DGraphBase/J3DTexture.cpp + src/JSystem/J3DGraphBase/J3DPacket.cpp + src/JSystem/J3DGraphBase/J3DShapeMtx.cpp + src/JSystem/J3DGraphBase/J3DShapeDraw.cpp + src/JSystem/J3DGraphBase/J3DShape.cpp + src/JSystem/J3DGraphBase/J3DMaterial.cpp + src/JSystem/J3DGraphBase/J3DMatBlock.cpp + src/JSystem/J3DGraphBase/J3DTevs.cpp + src/JSystem/J3DGraphBase/J3DDrawBuffer.cpp + src/JSystem/J3DGraphBase/J3DStruct.cpp + src/JSystem/J3DGraphAnimator/J3DShapeTable.cpp + src/JSystem/J3DGraphAnimator/J3DJointTree.cpp + src/JSystem/J3DGraphAnimator/J3DModelData.cpp + src/JSystem/J3DGraphAnimator/J3DMtxBuffer.cpp + src/JSystem/J3DGraphAnimator/J3DModel.cpp + src/JSystem/J3DGraphAnimator/J3DAnimation.cpp + src/JSystem/J3DGraphAnimator/J3DMaterialAnm.cpp + src/JSystem/J3DGraphAnimator/J3DSkinDeform.cpp + src/JSystem/J3DGraphAnimator/J3DCluster.cpp + src/JSystem/J3DGraphAnimator/J3DJoint.cpp + src/JSystem/J3DGraphAnimator/J3DMaterialAttach.cpp + src/JSystem/J3DGraphLoader/J3DMaterialFactory.cpp + src/JSystem/J3DGraphLoader/J3DMaterialFactory_v21.cpp + src/JSystem/J3DGraphLoader/J3DClusterLoader.cpp + src/JSystem/J3DGraphLoader/J3DModelLoader.cpp + src/JSystem/J3DGraphLoader/J3DModelLoaderCalcSize.cpp + src/JSystem/J3DGraphLoader/J3DJointFactory.cpp + src/JSystem/J3DGraphLoader/J3DShapeFactory.cpp + src/JSystem/J3DGraphLoader/J3DAnmLoader.cpp + src/JSystem/JMath/JMath.cpp + src/JSystem/JMath/random.cpp + src/JSystem/JMath/JMATrigonometric.cpp + src/JSystem/JHostIO/JORHostInfo.cpp + src/JSystem/JHostIO/JORServer.cpp + src/JSystem/JHostIO/JHIhioASync.cpp + src/JSystem/JHostIO/JHIRMcc.cpp + src/JSystem/JHostIO/JHIMccBuf.cpp +) + +set(REL_FILES + src/f_pc/f_pc_profile_lst.cpp + src/d/actor/d_a_andsw.cpp + src/d/actor/d_a_bg.cpp + src/d/actor/d_a_bg_obj.cpp + src/d/actor/d_a_dmidna.cpp + src/d/actor/d_a_door_dbdoor00.cpp + src/d/actor/d_a_door_knob00.cpp + src/d/actor/d_a_door_shutter.cpp + src/d/actor/d_a_door_spiral.cpp + src/d/actor/d_a_dshutter.cpp + src/d/actor/d_a_ep.cpp + src/d/actor/d_a_hitobj.cpp + src/d/actor/d_a_kytag00.cpp + src/d/actor/d_a_kytag04.cpp + src/d/actor/d_a_kytag17.cpp + src/d/actor/d_a_obj_brakeeff.cpp + src/d/actor/d_a_obj_burnbox.cpp + src/d/actor/d_a_obj_carry.cpp + src/d/actor/d_a_obj_ito.cpp + src/d/actor/d_a_obj_movebox.cpp + src/d/actor/d_a_obj_swpush.cpp + src/d/actor/d_a_obj_timer.cpp + src/d/actor/d_a_path_line.cpp + src/d/actor/d_a_scene_exit.cpp + src/d/actor/d_a_set_bgobj.cpp + src/d/actor/d_a_swhit0.cpp + src/d/actor/d_a_tag_allmato.cpp + src/d/actor/d_a_tag_camera.cpp + src/d/actor/d_a_tag_chkpoint.cpp + src/d/actor/d_a_tag_event.cpp + src/d/actor/d_a_tag_evt.cpp + src/d/actor/d_a_tag_evtarea.cpp + src/d/actor/d_a_tag_evtmsg.cpp + src/d/actor/d_a_tag_howl.cpp + src/d/actor/d_a_tag_kmsg.cpp + src/d/actor/d_a_tag_lantern.cpp + src/d/actor/d_a_tag_mist.cpp + src/d/actor/d_a_tag_msg.cpp + src/d/actor/d_a_tag_push.cpp + src/d/actor/d_a_tag_telop.cpp + src/d/actor/d_a_tbox.cpp + src/d/actor/d_a_tbox2.cpp + src/d/actor/d_a_vrbox.cpp + src/d/actor/d_a_vrbox2.cpp + src/d/actor/d_a_arrow.cpp + src/d/actor/d_a_boomerang.cpp + src/d/actor/d_a_crod.cpp + src/d/actor/d_a_demo00.cpp + src/d/actor/d_a_disappear.cpp + src/d/actor/d_a_mg_rod.cpp + src/d/actor/d_a_midna.cpp + src/d/actor/d_a_nbomb.cpp + src/d/actor/d_a_obj_life_container.cpp + src/d/actor/d_a_obj_yousei.cpp + src/d/actor/d_a_spinner.cpp + src/d/actor/d_a_suspend.cpp + src/d/actor/d_a_tag_attention.cpp + src/d/actor/d_a_alldie.cpp + src/d/actor/d_a_andsw2.cpp + src/d/actor/d_a_bd.cpp + src/d/actor/d_a_canoe.cpp + src/d/actor/d_a_cstaF.cpp + src/d/actor/d_a_demo_item.cpp + src/d/actor/d_a_door_bossL1.cpp + src/d/actor/d_a_e_dn.cpp + src/d/actor/d_a_e_fm.cpp + src/d/actor/d_a_e_ga.cpp + src/d/actor/d_a_e_hb.cpp + src/d/actor/d_a_e_nest.cpp + src/d/actor/d_a_e_rd.cpp + src/d/actor/d_a_econt.cpp + src/d/actor/d_a_fr.cpp + src/d/actor/d_a_grass.cpp + src/d/actor/d_a_kytag05.cpp + src/d/actor/d_a_kytag10.cpp + src/d/actor/d_a_kytag11.cpp + src/d/actor/d_a_kytag14.cpp + src/d/actor/d_a_mg_fish.cpp + src/d/actor/d_a_npc_besu.cpp + src/d/actor/d_a_npc_fairy_seirei.cpp + src/d/actor/d_a_npc_fish.cpp + src/d/actor/d_a_npc_henna.cpp + src/d/actor/d_a_npc_kakashi.cpp + src/d/actor/d_a_npc_kkri.cpp + src/d/actor/d_a_npc_kolin.cpp + src/d/actor/d_a_npc_maro.cpp + src/d/actor/d_a_npc_taro.cpp + src/d/actor/d_a_npc_tkj.cpp + src/d/actor/d_a_obj_bhashi.cpp + src/d/actor/d_a_obj_bkdoor.cpp + src/d/actor/d_a_obj_bosswarp.cpp + src/d/actor/d_a_obj_cboard.cpp + src/d/actor/d_a_obj_digplace.cpp + src/d/actor/d_a_obj_eff.cpp + src/d/actor/d_a_obj_fmobj.cpp + src/d/actor/d_a_obj_gpTaru.cpp + src/d/actor/d_a_obj_hhashi.cpp + src/d/actor/d_a_obj_kanban2.cpp + src/d/actor/d_a_obj_kbacket.cpp + src/d/actor/d_a_obj_kgate.cpp + src/d/actor/d_a_obj_klift00.cpp + src/d/actor/d_a_obj_ktOnFire.cpp + src/d/actor/d_a_obj_ladder.cpp + src/d/actor/d_a_obj_lv2Candle.cpp + src/d/actor/d_a_obj_magne_arm.cpp + src/d/actor/d_a_obj_metalbox.cpp + src/d/actor/d_a_obj_mgate.cpp + src/d/actor/d_a_obj_nameplate.cpp + src/d/actor/d_a_obj_ornament_cloth.cpp + src/d/actor/d_a_obj_rope_bridge.cpp + src/d/actor/d_a_obj_sWallShutter.cpp + src/d/actor/d_a_obj_stick.cpp + src/d/actor/d_a_obj_stoneMark.cpp + src/d/actor/d_a_obj_swpropeller.cpp + src/d/actor/d_a_obj_swpush5.cpp + src/d/actor/d_a_obj_yobikusa.cpp + src/d/actor/d_a_scene_exit2.cpp + src/d/actor/d_a_shop_item.cpp + src/d/actor/d_a_sq.cpp + src/d/actor/d_a_swc00.cpp + src/d/actor/d_a_tag_CstaSw.cpp + src/d/actor/d_a_tag_ajnot.cpp + src/d/actor/d_a_tag_attack_item.cpp + src/d/actor/d_a_tag_gstart.cpp + src/d/actor/d_a_tag_hinit.cpp + src/d/actor/d_a_tag_hjump.cpp + src/d/actor/d_a_tag_hstop.cpp + src/d/actor/d_a_tag_lv2prchk.cpp + src/d/actor/d_a_tag_magne.cpp + src/d/actor/d_a_tag_mhint.cpp + src/d/actor/d_a_tag_mstop.cpp + src/d/actor/d_a_tag_spring.cpp + src/d/actor/d_a_tag_statue_evt.cpp + src/d/actor/d_a_ykgr.cpp + src/d/actor/d_a_L7demo_dr.cpp + src/d/actor/d_a_L7low_dr.cpp + src/d/actor/d_a_L7op_demo_dr.cpp + src/d/actor/d_a_b_bh.cpp + src/d/actor/d_a_b_bq.cpp + src/d/actor/d_a_b_dr.cpp + src/d/actor/d_a_b_dre.cpp + src/d/actor/d_a_b_ds.cpp + src/d/actor/d_a_b_gg.cpp + src/d/actor/d_a_b_gm.cpp + src/d/actor/d_a_b_gnd.cpp + src/d/actor/d_a_b_go.cpp + src/d/actor/d_a_b_gos.cpp + src/d/actor/d_a_b_mgn.cpp + src/d/actor/d_a_b_ob.cpp + src/d/actor/d_a_b_oh.cpp + src/d/actor/d_a_b_oh2.cpp + src/d/actor/d_a_b_tn.cpp + src/d/actor/d_a_b_yo.cpp + src/d/actor/d_a_b_yo_ice.cpp + src/d/actor/d_a_b_zant.cpp + src/d/actor/d_a_b_zant_magic.cpp + src/d/actor/d_a_b_zant_mobile.cpp + src/d/actor/d_a_b_zant_sima.cpp + src/d/actor/d_a_balloon_2D.cpp + src/d/actor/d_a_bullet.cpp + src/d/actor/d_a_coach_2D.cpp + src/d/actor/d_a_coach_fire.cpp + src/d/actor/d_a_cow.cpp + src/d/actor/d_a_cstatue.cpp + src/d/actor/d_a_do.cpp + src/d/actor/d_a_door_boss.cpp + src/d/actor/d_a_door_bossL5.cpp + src/d/actor/d_a_door_mbossL1.cpp + src/d/actor/d_a_door_push.cpp + src/d/actor/d_a_e_ai.cpp + src/d/actor/d_a_e_arrow.cpp + src/d/actor/d_a_e_ba.cpp + src/d/actor/d_a_e_bee.cpp + src/d/actor/d_a_e_bg.cpp + src/d/actor/d_a_e_bi.cpp + src/d/actor/d_a_e_bi_leaf.cpp + src/d/actor/d_a_e_bs.cpp + src/d/actor/d_a_e_bu.cpp + src/d/actor/d_a_e_bug.cpp + src/d/actor/d_a_e_cr.cpp + src/d/actor/d_a_e_cr_egg.cpp + src/d/actor/d_a_e_db.cpp + src/d/actor/d_a_e_db_leaf.cpp + src/d/actor/d_a_e_dd.cpp + src/d/actor/d_a_e_df.cpp + src/d/actor/d_a_e_dk.cpp + src/d/actor/d_a_e_dt.cpp + src/d/actor/d_a_e_fb.cpp + src/d/actor/d_a_e_fk.cpp + src/d/actor/d_a_e_fs.cpp + src/d/actor/d_a_e_fz.cpp + src/d/actor/d_a_e_gb.cpp + src/d/actor/d_a_e_ge.cpp + src/d/actor/d_a_e_gi.cpp + src/d/actor/d_a_e_gm.cpp + src/d/actor/d_a_e_gob.cpp + src/d/actor/d_a_e_gs.cpp + src/d/actor/d_a_e_hb_leaf.cpp + src/d/actor/d_a_e_hm.cpp + src/d/actor/d_a_e_hp.cpp + src/d/actor/d_a_e_hz.cpp + src/d/actor/d_a_e_hzelda.cpp + src/d/actor/d_a_e_is.cpp + src/d/actor/d_a_e_kg.cpp + src/d/actor/d_a_e_kk.cpp + src/d/actor/d_a_e_kr.cpp + src/d/actor/d_a_e_mb.cpp + src/d/actor/d_a_e_md.cpp + src/d/actor/d_a_e_mf.cpp + src/d/actor/d_a_e_mk.cpp + src/d/actor/d_a_e_mk_bo.cpp + src/d/actor/d_a_e_mm.cpp + src/d/actor/d_a_e_mm_mt.cpp + src/d/actor/d_a_e_ms.cpp + src/d/actor/d_a_e_nz.cpp + src/d/actor/d_a_e_oc.cpp + src/d/actor/d_a_e_oct_bg.cpp + src/d/actor/d_a_e_ot.cpp + src/d/actor/d_a_e_ph.cpp + src/d/actor/d_a_e_pm.cpp + src/d/actor/d_a_e_po.cpp + src/d/actor/d_a_e_pz.cpp + src/d/actor/d_a_e_rb.cpp + src/d/actor/d_a_e_rdb.cpp + src/d/actor/d_a_e_rdy.cpp + src/d/actor/d_a_e_s1.cpp + src/d/actor/d_a_e_sb.cpp + src/d/actor/d_a_e_sf.cpp + src/d/actor/d_a_e_sg.cpp + src/d/actor/d_a_e_sh.cpp + src/d/actor/d_a_e_sm.cpp + src/d/actor/d_a_e_sm2.cpp + src/d/actor/d_a_e_st.cpp + src/d/actor/d_a_e_st_line.cpp + src/d/actor/d_a_e_sw.cpp + src/d/actor/d_a_e_th.cpp + src/d/actor/d_a_e_th_ball.cpp + src/d/actor/d_a_e_tk.cpp + src/d/actor/d_a_e_tk2.cpp + src/d/actor/d_a_e_tk_ball.cpp + src/d/actor/d_a_e_tt.cpp + src/d/actor/d_a_e_vt.cpp + src/d/actor/d_a_e_warpappear.cpp + src/d/actor/d_a_e_wb.cpp + src/d/actor/d_a_e_ws.cpp + src/d/actor/d_a_e_ww.cpp + src/d/actor/d_a_e_yc.cpp + src/d/actor/d_a_e_yd.cpp + src/d/actor/d_a_e_yd_leaf.cpp + src/d/actor/d_a_e_yg.cpp + src/d/actor/d_a_e_yh.cpp + src/d/actor/d_a_e_yk.cpp + src/d/actor/d_a_e_ym.cpp + src/d/actor/d_a_e_ym_tag.cpp + src/d/actor/d_a_e_ymb.cpp + src/d/actor/d_a_e_yr.cpp + src/d/actor/d_a_e_zh.cpp + src/d/actor/d_a_e_zm.cpp + src/d/actor/d_a_e_zs.cpp + src/d/actor/d_a_formation_mng.cpp + src/d/actor/d_a_guard_mng.cpp + src/d/actor/d_a_horse.cpp + src/d/actor/d_a_hozelda.cpp + src/d/actor/d_a_izumi_gate.cpp + src/d/actor/d_a_kago.cpp + src/d/actor/d_a_kytag01.cpp + src/d/actor/d_a_kytag02.cpp + src/d/actor/d_a_kytag03.cpp + src/d/actor/d_a_kytag06.cpp + src/d/actor/d_a_kytag07.cpp + src/d/actor/d_a_kytag08.cpp + src/d/actor/d_a_kytag09.cpp + src/d/actor/d_a_kytag12.cpp + src/d/actor/d_a_kytag13.cpp + src/d/actor/d_a_kytag15.cpp + src/d/actor/d_a_kytag16.cpp + src/d/actor/d_a_mant.cpp + src/d/actor/d_a_mg_fshop.cpp + src/d/actor/d_a_mirror.cpp + src/d/actor/d_a_movie_player.cpp + src/d/actor/d_a_myna.cpp + src/d/actor/d_a_ni.cpp + src/d/actor/d_a_npc_aru.cpp + src/d/actor/d_a_npc_ash.cpp + src/d/actor/d_a_npc_ashB.cpp + src/d/actor/d_a_npc_bans.cpp + src/d/actor/d_a_npc_blue_ns.cpp + src/d/actor/d_a_npc_bou.cpp + src/d/actor/d_a_npc_bouS.cpp + src/d/actor/d_a_npc_cdn3.cpp + src/d/actor/d_a_npc_chat.cpp + src/d/actor/d_a_npc_chin.cpp + src/d/actor/d_a_npc_clerka.cpp + src/d/actor/d_a_npc_clerkb.cpp + src/d/actor/d_a_npc_clerkt.cpp + src/d/actor/d_a_npc_coach.cpp + src/d/actor/d_a_npc_df.cpp + src/d/actor/d_a_npc_doc.cpp + src/d/actor/d_a_npc_doorboy.cpp + src/d/actor/d_a_npc_drainSol.cpp + src/d/actor/d_a_npc_du.cpp + src/d/actor/d_a_npc_fairy.cpp + src/d/actor/d_a_npc_fguard.cpp + src/d/actor/d_a_npc_gnd.cpp + src/d/actor/d_a_npc_gra.cpp + src/d/actor/d_a_npc_grc.cpp + src/d/actor/d_a_npc_grd.cpp + src/d/actor/d_a_npc_grm.cpp + src/d/actor/d_a_npc_grmc.cpp + src/d/actor/d_a_npc_gro.cpp + src/d/actor/d_a_npc_grr.cpp + src/d/actor/d_a_npc_grs.cpp + src/d/actor/d_a_npc_grz.cpp + src/d/actor/d_a_npc_guard.cpp + src/d/actor/d_a_npc_gwolf.cpp + src/d/actor/d_a_npc_hanjo.cpp + src/d/actor/d_a_npc_henna0.cpp + src/d/actor/d_a_npc_hoz.cpp + src/d/actor/d_a_npc_impal.cpp + src/d/actor/d_a_npc_inko.cpp + src/d/actor/d_a_npc_ins.cpp + src/d/actor/d_a_npc_jagar.cpp + src/d/actor/d_a_npc_kasi_hana.cpp + src/d/actor/d_a_npc_kasi_kyu.cpp + src/d/actor/d_a_npc_kasi_mich.cpp + src/d/actor/d_a_npc_kdk.cpp + src/d/actor/d_a_npc_kn.cpp + src/d/actor/d_a_npc_knj.cpp + src/d/actor/d_a_npc_kolinb.cpp + src/d/actor/d_a_npc_ks.cpp + src/d/actor/d_a_npc_kyury.cpp + src/d/actor/d_a_npc_len.cpp + src/d/actor/d_a_npc_lf.cpp + src/d/actor/d_a_npc_lud.cpp + src/d/actor/d_a_npc_midp.cpp + src/d/actor/d_a_npc_mk.cpp + src/d/actor/d_a_npc_moi.cpp + src/d/actor/d_a_npc_moir.cpp + src/d/actor/d_a_npc_myna2.cpp + src/d/actor/d_a_npc_ne.cpp + src/d/actor/d_a_npc_p2.cpp + src/d/actor/d_a_npc_pachi_besu.cpp + src/d/actor/d_a_npc_pachi_maro.cpp + src/d/actor/d_a_npc_pachi_taro.cpp + src/d/actor/d_a_npc_passer.cpp + src/d/actor/d_a_npc_passer2.cpp + src/d/actor/d_a_npc_post.cpp + src/d/actor/d_a_npc_pouya.cpp + src/d/actor/d_a_npc_prayer.cpp + src/d/actor/d_a_npc_raca.cpp + src/d/actor/d_a_npc_rafrel.cpp + src/d/actor/d_a_npc_saru.cpp + src/d/actor/d_a_npc_seib.cpp + src/d/actor/d_a_npc_seic.cpp + src/d/actor/d_a_npc_seid.cpp + src/d/actor/d_a_npc_seira.cpp + src/d/actor/d_a_npc_seira2.cpp + src/d/actor/d_a_npc_seirei.cpp + src/d/actor/d_a_npc_shad.cpp + src/d/actor/d_a_npc_shaman.cpp + src/d/actor/d_a_npc_shoe.cpp + src/d/actor/d_a_npc_shop0.cpp + src/d/actor/d_a_npc_shop_maro.cpp + src/d/actor/d_a_npc_sola.cpp + src/d/actor/d_a_npc_soldierA.cpp + src/d/actor/d_a_npc_soldierB.cpp + src/d/actor/d_a_npc_sq.cpp + src/d/actor/d_a_npc_the.cpp + src/d/actor/d_a_npc_theB.cpp + src/d/actor/d_a_npc_tk.cpp + src/d/actor/d_a_npc_tkc.cpp + src/d/actor/d_a_npc_tkj2.cpp + src/d/actor/d_a_npc_tks.cpp + src/d/actor/d_a_npc_toby.cpp + src/d/actor/d_a_npc_tr.cpp + src/d/actor/d_a_npc_uri.cpp + src/d/actor/d_a_npc_worm.cpp + src/d/actor/d_a_npc_wrestler.cpp + src/d/actor/d_a_npc_yamid.cpp + src/d/actor/d_a_npc_yamis.cpp + src/d/actor/d_a_npc_yamit.cpp + src/d/actor/d_a_npc_yelia.cpp + src/d/actor/d_a_npc_ykm.cpp + src/d/actor/d_a_npc_ykw.cpp + src/d/actor/d_a_npc_zanb.cpp + src/d/actor/d_a_npc_zant.cpp + src/d/actor/d_a_npc_zelR.cpp + src/d/actor/d_a_npc_zelRo.cpp + src/d/actor/d_a_npc_zelda.cpp + src/d/actor/d_a_npc_zra.cpp + src/d/actor/d_a_npc_zrc.cpp + src/d/actor/d_a_npc_zrz.cpp + src/d/actor/d_a_obj_Lv5Key.cpp + src/d/actor/d_a_obj_Turara.cpp + src/d/actor/d_a_obj_TvCdlst.cpp + src/d/actor/d_a_obj_Y_taihou.cpp + src/d/actor/d_a_obj_amiShutter.cpp + src/d/actor/d_a_obj_ari.cpp + src/d/actor/d_a_obj_automata.cpp + src/d/actor/d_a_obj_avalanche.cpp + src/d/actor/d_a_obj_balloon.cpp + src/d/actor/d_a_obj_barDesk.cpp + src/d/actor/d_a_obj_batta.cpp + src/d/actor/d_a_obj_bbox.cpp + src/d/actor/d_a_obj_bed.cpp + src/d/actor/d_a_obj_bemos.cpp + src/d/actor/d_a_obj_bhbridge.cpp + src/d/actor/d_a_obj_bk_leaf.cpp + src/d/actor/d_a_obj_bky_rock.cpp + src/d/actor/d_a_obj_bmWindow.cpp + src/d/actor/d_a_obj_bmshutter.cpp + src/d/actor/d_a_obj_bombf.cpp + src/d/actor/d_a_obj_boumato.cpp + src/d/actor/d_a_obj_brg.cpp + src/d/actor/d_a_obj_bsGate.cpp + src/d/actor/d_a_obj_bubblePilar.cpp + src/d/actor/d_a_obj_catdoor.cpp + src/d/actor/d_a_obj_cb.cpp + src/d/actor/d_a_obj_cblock.cpp + src/d/actor/d_a_obj_cdoor.cpp + src/d/actor/d_a_obj_chandelier.cpp + src/d/actor/d_a_obj_chest.cpp + src/d/actor/d_a_obj_cho.cpp + src/d/actor/d_a_obj_cowdoor.cpp + src/d/actor/d_a_obj_crope.cpp + src/d/actor/d_a_obj_crvfence.cpp + src/d/actor/d_a_obj_crvgate.cpp + src/d/actor/d_a_obj_crvhahen.cpp + src/d/actor/d_a_obj_crvlh_down.cpp + src/d/actor/d_a_obj_crvlh_up.cpp + src/d/actor/d_a_obj_crvsteel.cpp + src/d/actor/d_a_obj_crystal.cpp + src/d/actor/d_a_obj_cwall.cpp + src/d/actor/d_a_obj_damCps.cpp + src/d/actor/d_a_obj_dan.cpp + src/d/actor/d_a_obj_digholl.cpp + src/d/actor/d_a_obj_digsnow.cpp + src/d/actor/d_a_obj_dmelevator.cpp + src/d/actor/d_a_obj_drop.cpp + src/d/actor/d_a_obj_dust.cpp + src/d/actor/d_a_obj_enemy_create.cpp + src/d/actor/d_a_obj_fallobj.cpp + src/d/actor/d_a_obj_fan.cpp + src/d/actor/d_a_obj_fchain.cpp + src/d/actor/d_a_obj_fireWood.cpp + src/d/actor/d_a_obj_fireWood2.cpp + src/d/actor/d_a_obj_firepillar.cpp + src/d/actor/d_a_obj_firepillar2.cpp + src/d/actor/d_a_obj_flag.cpp + src/d/actor/d_a_obj_flag2.cpp + src/d/actor/d_a_obj_flag3.cpp + src/d/actor/d_a_obj_food.cpp + src/d/actor/d_a_obj_fw.cpp + src/d/actor/d_a_obj_gadget.cpp + src/d/actor/d_a_obj_ganonwall.cpp + src/d/actor/d_a_obj_ganonwall2.cpp + src/d/actor/d_a_obj_gb.cpp + src/d/actor/d_a_obj_geyser.cpp + src/d/actor/d_a_obj_glowSphere.cpp + src/d/actor/d_a_obj_gm.cpp + src/d/actor/d_a_obj_goGate.cpp + src/d/actor/d_a_obj_gomikabe.cpp + src/d/actor/d_a_obj_gra2.cpp + src/d/actor/d_a_obj_graWall.cpp + src/d/actor/d_a_obj_gra_rock.cpp + src/d/actor/d_a_obj_grave_stone.cpp + src/d/actor/d_a_obj_groundwater.cpp + src/d/actor/d_a_obj_grz_rock.cpp + src/d/actor/d_a_obj_h_saku.cpp + src/d/actor/d_a_obj_hakai_brl.cpp + src/d/actor/d_a_obj_hakai_ftr.cpp + src/d/actor/d_a_obj_hasu2.cpp + src/d/actor/d_a_obj_hata.cpp + src/d/actor/d_a_obj_hb.cpp + src/d/actor/d_a_obj_hbombkoya.cpp + src/d/actor/d_a_obj_heavySw.cpp + src/d/actor/d_a_obj_hfuta.cpp + src/d/actor/d_a_obj_hsTarget.cpp + src/d/actor/d_a_obj_ice_l.cpp + src/d/actor/d_a_obj_ice_s.cpp + src/d/actor/d_a_obj_iceblock.cpp + src/d/actor/d_a_obj_iceleaf.cpp + src/d/actor/d_a_obj_ihasi.cpp + src/d/actor/d_a_obj_ikada.cpp + src/d/actor/d_a_obj_inobone.cpp + src/d/actor/d_a_obj_ita.cpp + src/d/actor/d_a_obj_itamato.cpp + src/d/actor/d_a_obj_kabuto.cpp + src/d/actor/d_a_obj_kag.cpp + src/d/actor/d_a_obj_kage.cpp + src/d/actor/d_a_obj_kago.cpp + src/d/actor/d_a_obj_kaisou.cpp + src/d/actor/d_a_obj_kamakiri.cpp + src/d/actor/d_a_obj_kantera.cpp + src/d/actor/d_a_obj_katatsumuri.cpp + src/d/actor/d_a_obj_kazeneko.cpp + src/d/actor/d_a_obj_kbox.cpp + src/d/actor/d_a_obj_key.cpp + src/d/actor/d_a_obj_keyhole.cpp + src/d/actor/d_a_obj_ki.cpp + src/d/actor/d_a_obj_kiPot.cpp + src/d/actor/d_a_obj_kita.cpp + src/d/actor/d_a_obj_kjgjs.cpp + src/d/actor/d_a_obj_kkanban.cpp + src/d/actor/d_a_obj_knBullet.cpp + src/d/actor/d_a_obj_kshutter.cpp + src/d/actor/d_a_obj_kuwagata.cpp + src/d/actor/d_a_obj_kwheel00.cpp + src/d/actor/d_a_obj_kwheel01.cpp + src/d/actor/d_a_obj_kznkarm.cpp + src/d/actor/d_a_obj_laundry.cpp + src/d/actor/d_a_obj_laundry_rope.cpp + src/d/actor/d_a_obj_lbox.cpp + src/d/actor/d_a_obj_lp.cpp + src/d/actor/d_a_obj_lv1Candle00.cpp + src/d/actor/d_a_obj_lv1Candle01.cpp + src/d/actor/d_a_obj_lv3Candle.cpp + src/d/actor/d_a_obj_lv3Water.cpp + src/d/actor/d_a_obj_lv3Water2.cpp + src/d/actor/d_a_obj_lv3WaterB.cpp + src/d/actor/d_a_obj_lv3saka00.cpp + src/d/actor/d_a_obj_lv3waterEff.cpp + src/d/actor/d_a_obj_lv4CandleDemoTag.cpp + src/d/actor/d_a_obj_lv4CandleTag.cpp + src/d/actor/d_a_obj_lv4EdShutter.cpp + src/d/actor/d_a_obj_lv4Gate.cpp + src/d/actor/d_a_obj_lv4HsTarget.cpp + src/d/actor/d_a_obj_lv4PoGate.cpp + src/d/actor/d_a_obj_lv4RailWall.cpp + src/d/actor/d_a_obj_lv4SlideWall.cpp + src/d/actor/d_a_obj_lv4bridge.cpp + src/d/actor/d_a_obj_lv4chandelier.cpp + src/d/actor/d_a_obj_lv4digsand.cpp + src/d/actor/d_a_obj_lv4floor.cpp + src/d/actor/d_a_obj_lv4gear.cpp + src/d/actor/d_a_obj_lv4prelvtr.cpp + src/d/actor/d_a_obj_lv4prwall.cpp + src/d/actor/d_a_obj_lv4sand.cpp + src/d/actor/d_a_obj_lv5FloorBoard.cpp + src/d/actor/d_a_obj_lv5IceWall.cpp + src/d/actor/d_a_obj_lv5SwIce.cpp + src/d/actor/d_a_obj_lv5ychndlr.cpp + src/d/actor/d_a_obj_lv5yiblltray.cpp + src/d/actor/d_a_obj_lv6ChangeGate.cpp + src/d/actor/d_a_obj_lv6FurikoTrap.cpp + src/d/actor/d_a_obj_lv6Lblock.cpp + src/d/actor/d_a_obj_lv6SwGate.cpp + src/d/actor/d_a_obj_lv6SzGate.cpp + src/d/actor/d_a_obj_lv6Tenbin.cpp + src/d/actor/d_a_obj_lv6TogeRoll.cpp + src/d/actor/d_a_obj_lv6TogeTrap.cpp + src/d/actor/d_a_obj_lv6bemos.cpp + src/d/actor/d_a_obj_lv6bemos2.cpp + src/d/actor/d_a_obj_lv6egate.cpp + src/d/actor/d_a_obj_lv6elevta.cpp + src/d/actor/d_a_obj_lv6swturn.cpp + src/d/actor/d_a_obj_lv7BsGate.cpp + src/d/actor/d_a_obj_lv7PropellerY.cpp + src/d/actor/d_a_obj_lv7bridge.cpp + src/d/actor/d_a_obj_lv8KekkaiTrap.cpp + src/d/actor/d_a_obj_lv8Lift.cpp + src/d/actor/d_a_obj_lv8OptiLift.cpp + src/d/actor/d_a_obj_lv8UdFloor.cpp + src/d/actor/d_a_obj_lv9SwShutter.cpp + src/d/actor/d_a_obj_magLift.cpp + src/d/actor/d_a_obj_magLiftRot.cpp + src/d/actor/d_a_obj_maki.cpp + src/d/actor/d_a_obj_master_sword.cpp + src/d/actor/d_a_obj_mato.cpp + src/d/actor/d_a_obj_mhole.cpp + src/d/actor/d_a_obj_mie.cpp + src/d/actor/d_a_obj_mirror_6pole.cpp + src/d/actor/d_a_obj_mirror_chain.cpp + src/d/actor/d_a_obj_mirror_sand.cpp + src/d/actor/d_a_obj_mirror_screw.cpp + src/d/actor/d_a_obj_mirror_table.cpp + src/d/actor/d_a_obj_msima.cpp + src/d/actor/d_a_obj_mvstair.cpp + src/d/actor/d_a_obj_myogan.cpp + src/d/actor/d_a_obj_nagaisu.cpp + src/d/actor/d_a_obj_nan.cpp + src/d/actor/d_a_obj_ndoor.cpp + src/d/actor/d_a_obj_nougu.cpp + src/d/actor/d_a_obj_octhashi.cpp + src/d/actor/d_a_obj_oiltubo.cpp + src/d/actor/d_a_obj_onsen.cpp + src/d/actor/d_a_obj_onsenFire.cpp + src/d/actor/d_a_obj_onsenTaru.cpp + src/d/actor/d_a_obj_pdoor.cpp + src/d/actor/d_a_obj_pdtile.cpp + src/d/actor/d_a_obj_pdwall.cpp + src/d/actor/d_a_obj_picture.cpp + src/d/actor/d_a_obj_pillar.cpp + src/d/actor/d_a_obj_pleaf.cpp + src/d/actor/d_a_obj_poCandle.cpp + src/d/actor/d_a_obj_poFire.cpp + src/d/actor/d_a_obj_poTbox.cpp + src/d/actor/d_a_obj_prop.cpp + src/d/actor/d_a_obj_pumpkin.cpp + src/d/actor/d_a_obj_rcircle.cpp + src/d/actor/d_a_obj_rfHole.cpp + src/d/actor/d_a_obj_rgate.cpp + src/d/actor/d_a_obj_riverrock.cpp + src/d/actor/d_a_obj_rock.cpp + src/d/actor/d_a_obj_rotBridge.cpp + src/d/actor/d_a_obj_rotTrap.cpp + src/d/actor/d_a_obj_roten.cpp + src/d/actor/d_a_obj_rstair.cpp + src/d/actor/d_a_obj_rw.cpp + src/d/actor/d_a_obj_saidan.cpp + src/d/actor/d_a_obj_sakuita.cpp + src/d/actor/d_a_obj_sakuita_rope.cpp + src/d/actor/d_a_obj_scannon.cpp + src/d/actor/d_a_obj_scannon_crs.cpp + src/d/actor/d_a_obj_scannon_ten.cpp + src/d/actor/d_a_obj_sekidoor.cpp + src/d/actor/d_a_obj_sekizo.cpp + src/d/actor/d_a_obj_sekizoa.cpp + src/d/actor/d_a_obj_shield.cpp + src/d/actor/d_a_obj_sm_door.cpp + src/d/actor/d_a_obj_smallkey.cpp + src/d/actor/d_a_obj_smgdoor.cpp + src/d/actor/d_a_obj_smoke.cpp + src/d/actor/d_a_obj_smtile.cpp + src/d/actor/d_a_obj_smw_stone.cpp + src/d/actor/d_a_obj_snowEffTag.cpp + src/d/actor/d_a_obj_snow_soup.cpp + src/d/actor/d_a_obj_so.cpp + src/d/actor/d_a_obj_spinLift.cpp + src/d/actor/d_a_obj_ss_drink.cpp + src/d/actor/d_a_obj_ss_item.cpp + src/d/actor/d_a_obj_stairBlock.cpp + src/d/actor/d_a_obj_stone.cpp + src/d/actor/d_a_obj_stopper.cpp + src/d/actor/d_a_obj_stopper2.cpp + src/d/actor/d_a_obj_suisya.cpp + src/d/actor/d_a_obj_sw.cpp + src/d/actor/d_a_obj_swBallA.cpp + src/d/actor/d_a_obj_swBallB.cpp + src/d/actor/d_a_obj_swBallC.cpp + src/d/actor/d_a_obj_swLight.cpp + src/d/actor/d_a_obj_swchain.cpp + src/d/actor/d_a_obj_swhang.cpp + src/d/actor/d_a_obj_sword.cpp + src/d/actor/d_a_obj_swpush2.cpp + src/d/actor/d_a_obj_swspinner.cpp + src/d/actor/d_a_obj_swturn.cpp + src/d/actor/d_a_obj_syRock.cpp + src/d/actor/d_a_obj_szbridge.cpp + src/d/actor/d_a_obj_taFence.cpp + src/d/actor/d_a_obj_table.cpp + src/d/actor/d_a_obj_takaraDai.cpp + src/d/actor/d_a_obj_tatigi.cpp + src/d/actor/d_a_obj_ten.cpp + src/d/actor/d_a_obj_testcube.cpp + src/d/actor/d_a_obj_tgake.cpp + src/d/actor/d_a_obj_thashi.cpp + src/d/actor/d_a_obj_thdoor.cpp + src/d/actor/d_a_obj_timeFire.cpp + src/d/actor/d_a_obj_tks.cpp + src/d/actor/d_a_obj_tmoon.cpp + src/d/actor/d_a_obj_toaru_maki.cpp + src/d/actor/d_a_obj_toby.cpp + src/d/actor/d_a_obj_tobyhouse.cpp + src/d/actor/d_a_obj_togeTrap.cpp + src/d/actor/d_a_obj_tombo.cpp + src/d/actor/d_a_obj_tornado.cpp + src/d/actor/d_a_obj_tornado2.cpp + src/d/actor/d_a_obj_tp.cpp + src/d/actor/d_a_obj_treesh.cpp + src/d/actor/d_a_obj_twGate.cpp + src/d/actor/d_a_obj_udoor.cpp + src/d/actor/d_a_obj_usaku.cpp + src/d/actor/d_a_obj_vground.cpp + src/d/actor/d_a_obj_volcball.cpp + src/d/actor/d_a_obj_volcbom.cpp + src/d/actor/d_a_obj_warp_kbrg.cpp + src/d/actor/d_a_obj_warp_obrg.cpp + src/d/actor/d_a_obj_waterGate.cpp + src/d/actor/d_a_obj_waterPillar.cpp + src/d/actor/d_a_obj_waterfall.cpp + src/d/actor/d_a_obj_wchain.cpp + src/d/actor/d_a_obj_wdStick.cpp + src/d/actor/d_a_obj_web0.cpp + src/d/actor/d_a_obj_web1.cpp + src/d/actor/d_a_obj_well_cover.cpp + src/d/actor/d_a_obj_wflag.cpp + src/d/actor/d_a_obj_wind_stone.cpp + src/d/actor/d_a_obj_window.cpp + src/d/actor/d_a_obj_wood_pendulum.cpp + src/d/actor/d_a_obj_wood_statue.cpp + src/d/actor/d_a_obj_wsword.cpp + src/d/actor/d_a_obj_yel_bag.cpp + src/d/actor/d_a_obj_ystone.cpp + src/d/actor/d_a_obj_zcloth.cpp + src/d/actor/d_a_obj_zdoor.cpp + src/d/actor/d_a_obj_zrTurara.cpp + src/d/actor/d_a_obj_zrTuraraRock.cpp + src/d/actor/d_a_obj_zraMark.cpp + src/d/actor/d_a_obj_zra_freeze.cpp + src/d/actor/d_a_obj_zra_rock.cpp + src/d/actor/d_a_passer_mng.cpp + src/d/actor/d_a_tag_arena.cpp + src/d/actor/d_a_peru.cpp + src/d/actor/d_a_ppolamp.cpp + src/d/actor/d_a_skip_2D.cpp + src/d/actor/d_a_startAndGoal.cpp + src/d/actor/d_a_swBall.cpp + src/d/actor/d_a_swLBall.cpp + src/d/actor/d_a_swTime.cpp + src/d/actor/d_a_tag_Lv6Gate.cpp + src/d/actor/d_a_tag_Lv7Gate.cpp + src/d/actor/d_a_tag_Lv8Gate.cpp + src/d/actor/d_a_tag_TWgate.cpp + src/d/actor/d_a_tag_lv6CstaSw.cpp + src/d/actor/d_a_tag_assistance.cpp + src/d/actor/d_a_tag_bottle_item.cpp + src/d/actor/d_a_tag_chgrestart.cpp + src/d/actor/d_a_tag_csw.cpp + src/d/actor/d_a_tag_escape.cpp + src/d/actor/d_a_tag_firewall.cpp + src/d/actor/d_a_tag_gra.cpp + src/d/actor/d_a_tag_guard.cpp + src/d/actor/d_a_tag_instruction.cpp + src/d/actor/d_a_tag_kago_fall.cpp + src/d/actor/d_a_tag_lightball.cpp + src/d/actor/d_a_tag_lv5soup.cpp + src/d/actor/d_a_tag_mmsg.cpp + src/d/actor/d_a_tag_mwait.cpp + src/d/actor/d_a_tag_myna2.cpp + src/d/actor/d_a_tag_myna_light.cpp + src/d/actor/d_a_tag_pachi.cpp + src/d/actor/d_a_tag_poFire.cpp + src/d/actor/d_a_tag_qs.cpp + src/d/actor/d_a_tag_ret_room.cpp + src/d/actor/d_a_tag_river_back.cpp + src/d/actor/d_a_tag_rmbit_sw.cpp + src/d/actor/d_a_tag_schedule.cpp + src/d/actor/d_a_tag_setBall.cpp + src/d/actor/d_a_tag_setrestart.cpp + src/d/actor/d_a_tag_shop_camera.cpp + src/d/actor/d_a_tag_shop_item.cpp + src/d/actor/d_a_tag_smk_emt.cpp + src/d/actor/d_a_tag_spinner.cpp + src/d/actor/d_a_tag_sppath.cpp + src/d/actor/d_a_tag_ss_drink.cpp + src/d/actor/d_a_tag_stream.cpp + src/d/actor/d_a_tag_theB_hint.cpp + src/d/actor/d_a_tag_wara_howl.cpp + src/d/actor/d_a_tag_watchge.cpp + src/d/actor/d_a_tag_waterfall.cpp + src/d/actor/d_a_tag_wljump.cpp + src/d/actor/d_a_tag_yami.cpp + src/d/actor/d_a_talk.cpp + src/d/actor/d_a_tboxSw.cpp + src/d/actor/d_a_title.cpp + src/d/actor/d_a_warp_bug.cpp +) + +set(DUSK_FILES + src/dusk/imgui.cpp + src/dusk/stubs.cpp + src/dusk/extras.c + src/dusk/extras.cpp + src/dusk/globals.cpp + src/dusk/mtx.cpp + src/dusk/J3DTransforms_C.cpp + #src/dusk/m_Do_ext_dusk.cpp + src/dusk/jsystem_stubs.cpp + src/dusk/dvd_emu.cpp + src/dolphin/os/OSContext.cpp + src/dolphin/os/OSThread.cpp + src/dolphin/os/OSMutex.cpp +) From 449900d2bf071ee7b73204e2c44b1a2c3cc194ab Mon Sep 17 00:00:00 2001 From: PJB3005 Date: Tue, 24 Feb 2026 13:15:21 +0100 Subject: [PATCH 21/46] Fix compile with Dusk's mtx lib Move Mtx33 and similar types to JMath Rename mtx.h in decomp to _mtx.h so Aurora's header is used instead. --- files.cmake | 1 - include/JSystem/J3DGraphBase/J3DStruct.h | 1 + include/JSystem/J3DGraphBase/J3DSys.h | 1 + include/JSystem/J3DGraphBase/J3DTransform.h | 1 + include/JSystem/JMath/JMath.h | 7 + include/dolphin/{mtx.h => _mtx.h} | 8 - include/m_Do/m_Do_mtx.h | 1 + src/dusk/mtx.cpp | 730 -------------------- 8 files changed, 11 insertions(+), 739 deletions(-) rename include/dolphin/{mtx.h => _mtx.h} (98%) delete mode 100644 src/dusk/mtx.cpp diff --git a/files.cmake b/files.cmake index f260b3435e..f00741e0a0 100644 --- a/files.cmake +++ b/files.cmake @@ -1319,7 +1319,6 @@ set(DUSK_FILES src/dusk/extras.c src/dusk/extras.cpp src/dusk/globals.cpp - src/dusk/mtx.cpp src/dusk/J3DTransforms_C.cpp #src/dusk/m_Do_ext_dusk.cpp src/dusk/jsystem_stubs.cpp diff --git a/include/JSystem/J3DGraphBase/J3DStruct.h b/include/JSystem/J3DGraphBase/J3DStruct.h index cd41270401..3faf248d84 100644 --- a/include/JSystem/J3DGraphBase/J3DStruct.h +++ b/include/JSystem/J3DGraphBase/J3DStruct.h @@ -5,6 +5,7 @@ #include #include #include "global.h" +#include "JSystem/JMath/JMath.h" /** * @ingroup jsystem-j3d diff --git a/include/JSystem/J3DGraphBase/J3DSys.h b/include/JSystem/J3DGraphBase/J3DSys.h index 2f6c692e02..cc19cda7e6 100644 --- a/include/JSystem/J3DGraphBase/J3DSys.h +++ b/include/JSystem/J3DGraphBase/J3DSys.h @@ -4,6 +4,7 @@ #include #include #include "JSystem/J3DAssert.h" +#include "JSystem/JMath/JMath.h" enum J3DSysDrawBuf { /* 0x0 */ J3DSysDrawBuf_Opa, diff --git a/include/JSystem/J3DGraphBase/J3DTransform.h b/include/JSystem/J3DGraphBase/J3DTransform.h index 5dccb2bc9b..07b717a9ab 100644 --- a/include/JSystem/J3DGraphBase/J3DTransform.h +++ b/include/JSystem/J3DGraphBase/J3DTransform.h @@ -2,6 +2,7 @@ #define J3DTRANSFORM_H #include +#include "JSystem/JMath/JMath.h" struct J3DTextureSRTInfo; diff --git a/include/JSystem/JMath/JMath.h b/include/JSystem/JMath/JMath.h index e121253c65..1bd1322063 100644 --- a/include/JSystem/JMath/JMath.h +++ b/include/JSystem/JMath/JMath.h @@ -4,6 +4,13 @@ #include "dolphin/mtx.h" #include +typedef f32 Mtx33[3][3]; +typedef f32 Mtx23[2][3]; +typedef f32 (*Mtx3P)[3]; +typedef f32 (*MtxP)[4]; +typedef const f32 (*CMtxP)[4]; +typedef f32 QuaternionP[4]; + void JMAMTXApplyScale(const Mtx, Mtx, f32, f32, f32); void JMAEulerToQuat(s16 param_0, s16 param_1, s16 param_2, Quaternion* param_3); void JMAQuatLerp(const Quaternion*, const Quaternion*, f32, Quaternion*); diff --git a/include/dolphin/mtx.h b/include/dolphin/_mtx.h similarity index 98% rename from include/dolphin/mtx.h rename to include/dolphin/_mtx.h index da308658ab..4201269dc8 100644 --- a/include/dolphin/mtx.h +++ b/include/dolphin/_mtx.h @@ -31,14 +31,6 @@ typedef f32 (*Mtx44Ptr)[4]; typedef f32 ROMtx[4][3]; typedef f32 (*ROMtxPtr)[4]; -// do these belong in the sdk? -typedef f32 Mtx33[3][3]; -typedef f32 Mtx23[2][3]; -typedef f32 (*Mtx3P)[3]; -typedef f32 (*MtxP)[4]; -typedef const f32 (*CMtxP)[4]; -typedef f32 QuaternionP[4]; - typedef struct { u32 numMtx; MtxPtr stackBase; diff --git a/include/m_Do/m_Do_mtx.h b/include/m_Do/m_Do_mtx.h index aa8e3c7eca..01acd05b50 100644 --- a/include/m_Do/m_Do_mtx.h +++ b/include/m_Do/m_Do_mtx.h @@ -4,6 +4,7 @@ #include "SSystem/SComponent/c_sxyz.h" #include "SSystem/SComponent/c_xyz.h" #include +#include "JSystem/JMath/JMath.h" extern u8 g_printCurrentHeapDebug; extern u8 g_printOtherHeapDebug; diff --git a/src/dusk/mtx.cpp b/src/dusk/mtx.cpp deleted file mode 100644 index 19016ec781..0000000000 --- a/src/dusk/mtx.cpp +++ /dev/null @@ -1,730 +0,0 @@ -// This should go into aurora, but for now we'll place it here: -#include -#include -#include - -#define ASSERTLINE(line, cond) (void)0 -#define ASSERTMSGLINE(line, cond, msg) (void)0 -#define ASSERTMSG1LINE(line, cond, msg, arg1) (void)0 -#define ASSERTMSG2LINE(line, cond, msg, arg1, arg2) (void)0 -#define ASSERTMSGLINEV(line, cond, ...) (void)0 - -// SNIP : after here, place it into aurora - -void C_MTXLightOrtho(Mtx m, f32 t, f32 b, f32 l, f32 r, f32 scaleS, f32 scaleT, f32 transS, f32 transT) { - f32 tmp; - - ASSERTMSGLINE(2672, m, "MTXLightOrtho(): NULL MtxPtr 'm' "); - ASSERTMSGLINE(2673, (t != b), "MTXLightOrtho(): 't' and 'b' clipping planes are equal "); - ASSERTMSGLINE(2674, (l != r), "MTXLightOrtho(): 'l' and 'r' clipping planes are equal "); - tmp = 1 / (r - l); - m[0][0] = (2 * tmp * scaleS); - m[0][1] = 0; - m[0][2] = 0; - m[0][3] = (transS + (scaleS * (tmp * -(r + l)))); - tmp = 1/ (t - b); - m[1][0] = 0; - m[1][1] = (2 * tmp * scaleT); - m[1][2] = 0; - m[1][3] = (transT + (scaleT * (tmp * -(t + b)))); - m[2][0] = 0; - m[2][1] = 0; - m[2][2] = 0; - m[2][3] = 1; -} - -void C_MTXLightPerspective(Mtx m, f32 fovY, f32 aspect, f32 scaleS, f32 scaleT, f32 transS, f32 transT) { - f32 angle; - f32 cot; - - ASSERTMSGLINE(2604, m, "MTXLightPerspective(): NULL MtxPtr 'm' "); - ASSERTMSGLINE(2605, (fovY > 0.0) && (fovY < 180.0), "MTXLightPerspective(): 'fovY' out of range "); - ASSERTMSGLINE(2606, 0 != aspect, "MTXLightPerspective(): 'aspect' is 0 "); - - angle = (0.5f * fovY); - angle = MTXDegToRad(angle); - cot = 1 / tanf(angle); - m[0][0] = (scaleS * (cot / aspect)); - m[0][1] = 0; - m[0][2] = -transS; - m[0][3] = 0; - m[1][0] = 0; - m[1][1] = (cot * scaleT); - m[1][2] = -transT; - m[1][3] = 0; - m[2][0] = 0; - m[2][1] = 0; - m[2][2] = -1; - m[2][3] = 0; -} - -void C_MTXLookAt(Mtx m, const Point3d* camPos, const Vec* camUp, const Point3d* target) { - Vec vLook; - Vec vRight; - Vec vUp; - - ASSERTMSGLINE(2437, m, "MTXLookAt(): NULL MtxPtr 'm' "); - ASSERTMSGLINE(2438, camPos, "MTXLookAt(): NULL VecPtr 'camPos' "); - ASSERTMSGLINE(2439, camUp, "MTXLookAt(): NULL VecPtr 'camUp' "); - ASSERTMSGLINE(2440, target, "MTXLookAt(): NULL Point3dPtr 'target' "); - - vLook.x = camPos->x - target->x; - vLook.y = camPos->y - target->y; - vLook.z = camPos->z - target->z; - VECNormalize(&vLook, &vLook); - VECCrossProduct(camUp, &vLook, &vRight); - VECNormalize(&vRight, &vRight); - VECCrossProduct(&vLook, &vRight, &vUp); - m[0][0] = vRight.x; - m[0][1] = vRight.y; - m[0][2] = vRight.z; - m[0][3] = -((camPos->z * vRight.z) + ((camPos->x * vRight.x) + (camPos->y * vRight.y))); - m[1][0] = vUp.x; - m[1][1] = vUp.y; - m[1][2] = vUp.z; - m[1][3] = -((camPos->z * vUp.z) + ((camPos->x * vUp.x) + (camPos->y * vUp.y))); - m[2][0] = vLook.x; - m[2][1] = vLook.y; - m[2][2] = vLook.z; - m[2][3] = -((camPos->z * vLook.z) + ((camPos->x * vLook.x) + (camPos->y * vLook.y))); -} - -void C_MTXPerspective(Mtx44 m, f32 fovY, f32 aspect, f32 n, f32 f) { - f32 angle; - f32 cot; - f32 tmp; - - ASSERTMSGLINE(179, m, "MTXPerspective(): NULL Mtx44Ptr 'm' "); - ASSERTMSGLINE(180, (fovY > 0.0) && (fovY < 180.0), "MTXPerspective(): 'fovY' out of range "); - ASSERTMSGLINE(181, 0.0f != aspect, "MTXPerspective(): 'aspect' is 0 "); - - angle = (0.5f * fovY); - angle = MTXDegToRad(angle); - cot = 1 / tanf(angle); - m[0][0] = (cot / aspect); - m[0][1] = 0; - m[0][2] = 0; - m[0][3] = 0; - m[1][0] = 0; - m[1][1] = (cot); - m[1][2] = 0; - m[1][3] = 0; - m[2][0] = 0; - m[2][1] = 0; - tmp = 1 / (f - n); - m[2][2] = (-n * tmp); - m[2][3] = (tmp * -(f * n)); - m[3][0] = 0; - m[3][1] = 0; - m[3][2] = -1; - m[3][3] = 0; -} - -void C_MTXRotRad(Mtx m, char axis, f32 rad) { - f32 sinA; - f32 cosA; - - ASSERTMSGLINE(1447, m, "MTXRotRad(): NULL MtxPtr 'm' "); - sinA = sinf(rad); - cosA = cosf(rad); - C_MTXRotTrig(m, axis, sinA, cosA); -} - -void C_MTXScale(Mtx m, f32 xS, f32 yS, f32 zS) { - ASSERTMSGLINE(2008, m, "MTXScale(): NULL MtxPtr 'm' "); - m[0][0] = xS; - m[0][1] = 0; - m[0][2] = 0; - m[0][3] = 0; - m[1][0] = 0; - m[1][1] = yS; - m[1][2] = 0; - m[1][3] = 0; - m[2][0] = 0; - m[2][1] = 0; - m[2][2] = zS; - m[2][3] = 0; -} - -void C_MTXScaleApply(const Mtx src, Mtx dst, f32 xS, f32 yS, f32 zS) { - ASSERTMSGLINE(2070, src, "MTXScaleApply(): NULL MtxPtr 'src' "); - ASSERTMSGLINE(2071, dst, "MTXScaleApply(): NULL MtxPtr 'dst' "); - dst[0][0] = (src[0][0] * xS); - dst[0][1] = (src[0][1] * xS); - dst[0][2] = (src[0][2] * xS); - dst[0][3] = (src[0][3] * xS); - dst[1][0] = (src[1][0] * yS); - dst[1][1] = (src[1][1] * yS); - dst[1][2] = (src[1][2] * yS); - dst[1][3] = (src[1][3] * yS); - dst[2][0] = (src[2][0] * zS); - dst[2][1] = (src[2][1] * zS); - dst[2][2] = (src[2][2] * zS); - dst[2][3] = (src[2][3] * zS); -} - -void C_MTXTransApply(const Mtx src, Mtx dst, f32 xT, f32 yT, f32 zT) { - ASSERTMSGLINE(1933, src, "MTXTransApply(): NULL MtxPtr 'src' "); - ASSERTMSGLINE(1934, dst, "MTXTransApply(): NULL MtxPtr 'src' "); //! wrong assert string - - if (src != dst) { - dst[0][0] = src[0][0]; - dst[0][1] = src[0][1]; - dst[0][2] = src[0][2]; - dst[1][0] = src[1][0]; - dst[1][1] = src[1][1]; - dst[1][2] = src[1][2]; - dst[2][0] = src[2][0]; - dst[2][1] = src[2][1]; - dst[2][2] = src[2][2]; - } - - dst[0][3] = (src[0][3] + xT); - dst[1][3] = (src[1][3] + yT); - dst[2][3] = (src[2][3] + zT); -} - -void C_MTXRotTrig(Mtx m, char axis, f32 sinA, f32 cosA) { - ASSERTMSGLINE(1502, m, "MTXRotTrig(): NULL MtxPtr 'm' "); - switch(axis) { - case 'x': - case 'X': - m[0][0] = 1; - m[0][1] = 0; - m[0][2] = 0; - m[0][3] = 0; - m[1][0] = 0; - m[1][1] = cosA; - m[1][2] = -sinA; - m[1][3] = 0; - m[2][0] = 0; - m[2][1] = sinA; - m[2][2] = cosA; - m[2][3] = 0; - break; - case 'y': - case 'Y': - m[0][0] = cosA; - m[0][1] = 0; - m[0][2] = sinA; - m[0][3] = 0; - m[1][0] = 0; - m[1][1] = 1; - m[1][2] = 0; - m[1][3] = 0; - m[2][0] = -sinA; - m[2][1] = 0; - m[2][2] = cosA; - m[2][3] = 0; - break; - case 'z': - case 'Z': - m[0][0] = cosA; - m[0][1] = -sinA; - m[0][2] = 0; - m[0][3] = 0; - m[1][0] = sinA; - m[1][1] = cosA; - m[1][2] = 0; - m[1][3] = 0; - m[2][0] = 0; - m[2][1] = 0; - m[2][2] = 1; - m[2][3] = 0; - break; - default: - ASSERTMSGLINE(1529, FALSE, "MTXRotTrig(): invalid 'axis' value "); - break; - } -} - -void C_VECAdd(const Vec* a, const Vec* b, Vec* ab) { - ASSERTMSGLINE(114, a, "VECAdd(): NULL VecPtr 'a' "); - ASSERTMSGLINE(115, b, "VECAdd(): NULL VecPtr 'b' "); - ASSERTMSGLINE(116, ab, "VECAdd(): NULL VecPtr 'ab' "); - ab->x = a->x + b->x; - ab->y = a->y + b->y; - ab->z = a->z + b->z; -} - -// MTX QUAT - -void C_QUATMultiply(const Quaternion* p, const Quaternion* q, Quaternion* pq) { - Quaternion* r; - Quaternion pqTmp; - - ASSERTMSGLINE(193, p, "QUATMultiply(): NULL QuaternionPtr 'p' "); - ASSERTMSGLINE(194, q, "QUATMultiply(): NULL QuaternionPtr 'q' "); - ASSERTMSGLINE(195, pq, "QUATMultiply(): NULL QuaternionPtr 'pq' "); - - if (p == pq || q == pq){ - r = &pqTmp; - } else { - r = pq; - } - - r->w = (p->w * q->w) - (p->x * q->x) - (p->y * q->y) - (p->z * q->z); - r->x = (p->w * q->x) + (p->x * q->w) + (p->y * q->z) - (p->z * q->y); - r->y = (p->w * q->y) + (p->y * q->w) + (p->z * q->x) - (p->x * q->z); - r->z = (p->w * q->z) + (p->z * q->w) + (p->x * q->y) - (p->y * q->x); - - if (r == &pqTmp) { - *pq = pqTmp; - } -} - -void C_QUATRotAxisRad(Quaternion* r, const Vec* axis, f32 rad) { - f32 half, sh, ch; - Vec nAxis; - - ASSERTMSGLINE(758, r, "QUATRotAxisRad(): NULL QuaternionPtr 'r' "); - ASSERTMSGLINE(759, axis, "QUATRotAxisRad(): NULL VecPtr 'axis' "); - - VECNormalize(axis, &nAxis); - - half = rad * 0.5f; - sh = sinf(half); - ch = cosf(half); - - r->x = sh * nAxis.x; - r->y = sh * nAxis.y; - r->z = sh * nAxis.z; - r->w = ch; -} - -void C_QUATSlerp(const Quaternion* p, const Quaternion* q, Quaternion* r, f32 t) { - f32 theta, sin_th, cos_th; - f32 tp, tq; - - ASSERTMSGLINE(869, p, "QUATSlerp(): NULL QuaternionPtr 'p' "); - ASSERTMSGLINE(870, q, "QUATSlerp(): NULL QuaternionPtr 'q' "); - ASSERTMSGLINE(871, r, "QUATSlerp(): NULL QuaternionPtr 'r' "); - - cos_th = p->x * q->x + p->y * q->y + p->z * q->z + p->w * q->w; - tq = 1.0f; - - if (cos_th < 0.0f) { - cos_th = -cos_th; - tq = -tq; - } - - if (cos_th <= 0.99999f) { - theta = acosf(cos_th); - sin_th = sinf(theta); - - tp = sinf((1.0f - t) * theta) / sin_th; - tq *= sinf(t * theta) / sin_th; - } else { - tp = 1.0f - t; - tq *= t; - } - - r->x = (tp * p->x) + (tq * q->x); - r->y = (tp * p->y) + (tq * q->y); - r->z = (tp * p->z) + (tq * q->z); - r->w = (tp * p->w) + (tq * q->w); -} - -void C_VECHalfAngle(const Vec* a, const Vec* b, Vec* half) { - Vec aTmp; - Vec bTmp; - Vec hTmp; - - ASSERTMSGLINE(713, a, "VECHalfAngle(): NULL VecPtr 'a' "); - ASSERTMSGLINE(714, b, "VECHalfAngle(): NULL VecPtr 'b' "); - ASSERTMSGLINE(715, half, "VECHalfAngle(): NULL VecPtr 'half' "); - - aTmp.x = -a->x; - aTmp.y = -a->y; - aTmp.z = -a->z; - bTmp.x = -b->x; - bTmp.y = -b->y; - bTmp.z = -b->z; - - VECNormalize(&aTmp, &aTmp); - VECNormalize(&bTmp, &bTmp); - VECAdd(&aTmp, &bTmp, &hTmp); - - if (VECDotProduct(&hTmp, &hTmp) > 0.0f) { - VECNormalize(&hTmp, half); - return; - } - *half = hTmp; -} - -void C_VECNormalize(const Vec* src, Vec* unit) { - f32 mag; - - ASSERTMSGLINE(321, src, "VECNormalize(): NULL VecPtr 'src' "); - ASSERTMSGLINE(322, unit, "VECNormalize(): NULL VecPtr 'unit' "); - - mag = (src->z * src->z) + ((src->x * src->x) + (src->y * src->y)); - ASSERTMSGLINE(327, 0.0f != mag, "VECNormalize(): zero magnitude vector "); - - mag = 1.0f/ sqrtf(mag); - unit->x = src->x * mag; - unit->y = src->y * mag; - unit->z = src->z * mag; -} - -void C_VECReflect(const Vec* src, const Vec* normal, Vec* dst) { - f32 cosA; - Vec uI; - Vec uN; - - ASSERTMSGLINE(769, src, "VECReflect(): NULL VecPtr 'src' "); - ASSERTMSGLINE(770, normal, "VECReflect(): NULL VecPtr 'normal' "); - ASSERTMSGLINE(771, dst, "VECReflect(): NULL VecPtr 'dst' "); - - uI.x = -src->x; - uI.y = -src->y; - uI.z = -src->z; - - VECNormalize(&uI, &uI); - VECNormalize(normal, &uN); - - cosA = VECDotProduct(&uI, &uN); - dst->x = (2.0f * uN.x * cosA) - uI.x; - dst->y = (2.0f * uN.y * cosA) - uI.y; - dst->z = (2.0f * uN.z * cosA) - uI.z; - VECNormalize(dst, dst); -} - -u32 C_MTXInverse(const Mtx src, Mtx inv) { - Mtx mTmp; - MtxPtr m; - f32 det; - - ASSERTMSGLINE(950, src, "MTXInverse(): NULL MtxPtr 'src' "); - ASSERTMSGLINE(951, inv, "MTXInverse(): NULL MtxPtr 'inv' "); - - if (src == inv) { - m = mTmp; - } else { - m = inv; - } - det = ((((src[2][1] * (src[0][2] * src[1][0])) - + ((src[2][2] * (src[0][0] * src[1][1])) - + (src[2][0] * (src[0][1] * src[1][2])))) - - (src[0][2] * (src[2][0] * src[1][1]))) - - (src[2][2] * (src[1][0] * src[0][1]))) - - (src[1][2] * (src[0][0] * src[2][1])); - if (0 == det) { - return 0; - } - det = 1 / det; - m[0][0] = (det * +((src[1][1] * src[2][2]) - (src[2][1] * src[1][2]))); - m[0][1] = (det * -((src[0][1] * src[2][2]) - (src[2][1] * src[0][2]))); - m[0][2] = (det * +((src[0][1] * src[1][2]) - (src[1][1] * src[0][2]))); - - m[1][0] = (det * -((src[1][0] * src[2][2]) - (src[2][0] * src[1][2]))); - m[1][1] = (det * +((src[0][0] * src[2][2]) - (src[2][0] * src[0][2]))); - m[1][2] = (det * -((src[0][0] * src[1][2]) - (src[1][0] * src[0][2]))); - - m[2][0] = (det * +((src[1][0] * src[2][1]) - (src[2][0] * src[1][1]))); - m[2][1] = (det * -((src[0][0] * src[2][1]) - (src[2][0] * src[0][1]))); - m[2][2] = (det * +((src[0][0] * src[1][1]) - (src[1][0] * src[0][1]))); - - m[0][3] = ((-m[0][0] * src[0][3]) - (m[0][1] * src[1][3])) - (m[0][2] * src[2][3]); - m[1][3] = ((-m[1][0] * src[0][3]) - (m[1][1] * src[1][3])) - (m[1][2] * src[2][3]); - m[2][3] = ((-m[2][0] * src[0][3]) - (m[2][1] * src[1][3])) - (m[2][2] * src[2][3]); - - if (m == mTmp) { - C_MTXCopy(mTmp, inv); - } - return 1; -} - -void C_MTXConcatArray(const Mtx a, const Mtx* srcBase, Mtx* dstBase, u32 count) { - u32 i; - - ASSERTMSGLINE(580, a != 0, "MTXConcatArray(): NULL MtxPtr 'a' "); - ASSERTMSGLINE(581, srcBase != 0, "MTXConcatArray(): NULL MtxPtr 'srcBase' "); - ASSERTMSGLINE(582, dstBase != 0, "MTXConcatArray(): NULL MtxPtr 'dstBase' "); - ASSERTMSGLINE(583, count > 1, "MTXConcatArray(): count must be greater than 1."); - - for (i = 0; i < count; i++) { - C_MTXConcat(a, *srcBase, *dstBase); - srcBase++; - dstBase++; - } -} - -void C_MTXMultVecArray(const Mtx m, const Vec* srcBase, Vec* dstBase, u32 count) { - u32 i; - Vec vTmp; - - ASSERTMSGLINE(168, m, "MTXMultVecArray(): NULL MtxPtr 'm' "); - ASSERTMSGLINE(169, srcBase, "MTXMultVecArray(): NULL VecPtr 'srcBase' "); - ASSERTMSGLINE(170, dstBase, "MTXMultVecArray(): NULL VecPtr 'dstBase' "); - ASSERTMSGLINE(171, count > 1, "MTXMultVecArray(): count must be greater than 1."); - - for(i = 0; i < count; i++) { - vTmp.x = m[0][3] + ((m[0][2] * srcBase->z) + ((m[0][0] * srcBase->x) + (m[0][1] * srcBase->y))); - vTmp.y = m[1][3] + ((m[1][2] * srcBase->z) + ((m[1][0] * srcBase->x) + (m[1][1] * srcBase->y))); - vTmp.z = m[2][3] + ((m[2][2] * srcBase->z) + ((m[2][0] * srcBase->x) + (m[2][1] * srcBase->y))); - dstBase->x = vTmp.x; - dstBase->y = vTmp.y; - dstBase->z = vTmp.z; - srcBase++; - dstBase++; - } -} - -void C_MTXMultVecArraySR(const Mtx m, const Vec* srcBase, Vec* dstBase, u32 count) { - u32 i; - Vec vTmp; - - ASSERTMSGLINE(410, m, "MTXMultVecArraySR(): NULL MtxPtr 'm' "); - ASSERTMSGLINE(411, srcBase, "MTXMultVecArraySR(): NULL VecPtr 'srcBase' "); - ASSERTMSGLINE(412, dstBase, "MTXMultVecArraySR(): NULL VecPtr 'dstBase' "); - ASSERTMSGLINE(413, count > 1, "MTXMultVecArraySR(): count must be greater than 1."); - - for(i = 0; i < count; i++) { - vTmp.x = (m[0][2] * srcBase->z) + ((m[0][0] * srcBase->x) + (m[0][1] * srcBase->y)); - vTmp.y = (m[1][2] * srcBase->z) + ((m[1][0] * srcBase->x) + (m[1][1] * srcBase->y)); - vTmp.z = (m[2][2] * srcBase->z) + ((m[2][0] * srcBase->x) + (m[2][1] * srcBase->y)); - dstBase->x = vTmp.x; - dstBase->y = vTmp.y; - dstBase->z = vTmp.z; - srcBase++; - dstBase++; - } -} - -void C_MTXQuat(Mtx m, const Quaternion* q) { - f32 s; - f32 xs; - f32 ys; - f32 zs; - f32 wx; - f32 wy; - f32 wz; - f32 xx; - f32 xy; - f32 xz; - f32 yy; - f32 yz; - f32 zz; - - ASSERTMSGLINE(2145, m, "MTXQuat(): NULL MtxPtr 'm' "); - ASSERTMSGLINE(2146, q, "MTXQuat(): NULL QuaternionPtr 'q' "); - ASSERTMSGLINE(2147, q->x || q->y || q->z || q->w, "MTXQuat(): zero-value quaternion "); - s = 2 / ((q->w * q->w) + ((q->z * q->z) + ((q->x * q->x) + (q->y * q->y)))); - xs = q->x * s; - ys = q->y * s; - zs = q->z * s; - wx = q->w * xs; - wy = q->w * ys; - wz = q->w * zs; - xx = q->x * xs; - xy = q->x * ys; - xz = q->x * zs; - yy = q->y * ys; - yz = q->y * zs; - zz = q->z * zs; - m[0][0] = (1 - (yy + zz)); - m[0][1] = (xy - wz); - m[0][2] = (xz + wy); - m[0][3] = 0; - m[1][0] = (xy + wz); - m[1][1] = (1 - (xx + zz)); - m[1][2] = (yz - wx); - m[1][3] = 0; - m[2][0] = (xz - wy); - m[2][1] = (yz + wx); - m[2][2] = (1 - (xx + yy)); - m[2][3] = 0; -} -void C_MTXRotAxisRad(Mtx m, const Vec* axis, f32 rad) { - Vec vN; - f32 s; - f32 c; - f32 t; - f32 x; - f32 y; - f32 z; - f32 xSq; - f32 ySq; - f32 zSq; - - ASSERTMSGLINE(1677, m, "MTXRotAxisRad(): NULL MtxPtr 'm' "); - ASSERTMSGLINE(1678, axis, "MTXRotAxisRad(): NULL VecPtr 'axis' "); - - s = sinf(rad); - c = cosf(rad); - t = 1 - c; - C_VECNormalize(axis, &vN); - x = vN.x; - y = vN.y; - z = vN.z; - xSq = (x * x); - ySq = (y * y); - zSq = (z * z); - m[0][0] = (c + (t * xSq)); - m[0][1] = (y * (t * x)) - (s * z); - m[0][2] = (z * (t * x)) + (s * y); - m[0][3] = 0; - m[1][0] = ((y * (t * x)) + (s * z)); - m[1][1] = (c + (t * ySq)); - m[1][2] = ((z * (t * y)) - (s * x)); - m[1][3] = 0; - m[2][0] = ((z * (t * x)) - (s * y)); - m[2][1] = ((z * (t * y)) + (s * x)); - m[2][2] = (c + (t * zSq)); - m[2][3] = 0; -} - -// VEC -void C_VECCrossProduct(const Vec* a, const Vec* b, Vec* axb) { - Vec vTmp; - - ASSERTMSGLINE(608, a, "VECCrossProduct(): NULL VecPtr 'a' "); - ASSERTMSGLINE(609, b, "VECCrossProduct(): NULL VecPtr 'b' "); - ASSERTMSGLINE(610, axb, "VECCrossProduct(): NULL VecPtr 'axb' "); - - vTmp.x = (a->y * b->z) - (a->z * b->y); - vTmp.y = (a->z * b->x) - (a->x * b->z); - vTmp.z = (a->x * b->y) - (a->y * b->x); - axb->x = vTmp.x; - axb->y = vTmp.y; - axb->z = vTmp.z; -} - -f32 C_VECDistance(const Vec* a, const Vec* b) { - return sqrtf(C_VECSquareDistance(a, b)); -} - -f32 C_VECDotProduct(const Vec* a, const Vec* b) { - f32 dot; - - ASSERTMSGLINE(546, a, "VECDotProduct(): NULL VecPtr 'a' "); - ASSERTMSGLINE(547, b, "VECDotProduct(): NULL VecPtr 'b' "); - dot = (a->z * b->z) + ((a->x * b->x) + (a->y * b->y)); - return dot; -} - -f32 C_VECMag(const Vec* v) { - return sqrtf(C_VECSquareMag(v)); -} - -void C_VECScale(const Vec* src, Vec* dst, f32 scale) { - ASSERTMSGLINE(253, src, "VECScale(): NULL VecPtr 'src' "); - ASSERTMSGLINE(254, dst, "VECScale(): NULL VecPtr 'dst' "); - dst->x = (src->x * scale); - dst->y = (src->y * scale); - dst->z = (src->z * scale); -} - -f32 C_VECSquareDistance(const Vec* a, const Vec* b) { - Vec diff; - - diff.x = a->x - b->x; - diff.y = a->y - b->y; - diff.z = a->z - b->z; - return (diff.z * diff.z) + ((diff.x * diff.x) + (diff.y * diff.y)); -} - -f32 C_VECSquareMag(const Vec* v) { - f32 sqmag; - - ASSERTMSGLINE(411, v, "VECMag(): NULL VecPtr 'v' "); - - sqmag = v->z * v->z + ((v->x * v->x) + (v->y * v->y)); - return sqmag; -} - -void C_VECSubtract(const Vec* a, const Vec* b, Vec* a_b) { - ASSERTMSGLINE(183, a, "VECSubtract(): NULL VecPtr 'a' "); - ASSERTMSGLINE(184, b, "VECSubtract(): NULL VecPtr 'b' "); - ASSERTMSGLINE(185, a_b, "VECSubtract(): NULL VecPtr 'a_b' "); - a_b->x = a->x - b->x; - a_b->y = a->y - b->y; - a_b->z = a->z - b->z; -} - -#pragma mark PSMTX -// I think these are PPC ASM implemntations? -// this can be done just with defining DEBUG, but that has some other -// implecations, so we'll just define them here for now. These are all just wrappers around the C versions, so we can just call those directly. -void PSMTXConcatArray(const __REGISTER Mtx a, const __REGISTER Mtx* srcBase, __REGISTER Mtx* dstBase, __REGISTER u32 count) { - C_MTXConcatArray(a, srcBase, dstBase, count); -} -void PSMTXCopy(const __REGISTER Mtx src, __REGISTER Mtx dst) { - C_MTXCopy(src, dst); -} -void PSMTXIdentity(__REGISTER Mtx m) { - C_MTXIdentity(m); -} -u32 PSMTXInverse(const __REGISTER Mtx src, __REGISTER Mtx inv) { - return C_MTXInverse(src, inv); -} -void PSMTXMultVec(const __REGISTER Mtx m, const __REGISTER Vec* src, __REGISTER Vec* dst) { - C_MTXMultVec(m, src, dst); -} -void PSMTXConcat(const __REGISTER Mtx a, const __REGISTER Mtx b, __REGISTER Mtx ab) { - C_MTXConcat(a, b, ab); -} -void PSMTXMultVecArray(const Mtx m, const Vec* srcBase, Vec* dstBase, u32 count) { - C_MTXMultVecArray(m, srcBase, dstBase, count); -} -void PSMTXMultVecArraySR(const __REGISTER Mtx m, const __REGISTER Vec* srcBase, __REGISTER Vec* dstBase, __REGISTER u32 count) { - C_MTXMultVecArraySR(m, srcBase, dstBase, count); -} -void PSMTXMultVecSR(const __REGISTER Mtx m, const __REGISTER Vec* src, __REGISTER Vec* dst) { - C_MTXMultVecSR(m, src, dst); -} -void PSMTXQuat(__REGISTER Mtx m, const __REGISTER Quaternion* q) { - C_MTXQuat(m, q); -} -void PSMTXRotAxisRad(Mtx m, const Vec* axis, f32 rad) { - C_MTXRotAxisRad(m, axis, rad); -} -void PSMTXRotRad(Mtx m, char axis, f32 rad) { - C_MTXRotRad(m, axis, rad); -} -void PSMTXScale(__REGISTER Mtx m, __REGISTER f32 xS, __REGISTER f32 yS, __REGISTER f32 zS) { - C_MTXScale(m, xS, yS, zS); -} -void PSMTXScaleApply(const __REGISTER Mtx src, __REGISTER Mtx dst, __REGISTER f32 xS, __REGISTER f32 yS, __REGISTER f32 zS) { - C_MTXScaleApply(src, dst, xS, yS, zS); -} -void PSMTXTrans(__REGISTER Mtx m, __REGISTER f32 xT, __REGISTER f32 yT, __REGISTER f32 zT) { - C_MTXTrans(m, xT, yT, zT); -} -void PSMTXTransApply(const __REGISTER Mtx src, __REGISTER Mtx dst, __REGISTER f32 xT, __REGISTER f32 yT, __REGISTER f32 zT) { - C_MTXTransApply(src, dst, xT, yT, zT); -} -void PSQUATMultiply(const __REGISTER Quaternion* p, const __REGISTER Quaternion* q, __REGISTER Quaternion* pq) { - C_QUATMultiply(p, q, pq); -} -void PSVECAdd(const __REGISTER Vec* a, const __REGISTER Vec* b, __REGISTER Vec* ab) { - C_VECAdd(a, b, ab); -} -void PSVECCrossProduct(const __REGISTER Vec* a, const __REGISTER Vec* b, __REGISTER Vec* axb) { - C_VECCrossProduct(a, b, axb); -} -f32 PSVECDistance(const __REGISTER Vec* a, const __REGISTER Vec* b) { - return C_VECDistance(a, b); -} -f32 PSVECDotProduct(const __REGISTER Vec* a, const __REGISTER Vec* b) { - return C_VECDotProduct(a, b); -} -f32 PSVECMag(const __REGISTER Vec* v) { - return C_VECMag(v); -} -void PSVECNormalize(const __REGISTER Vec* src, __REGISTER Vec* unit) { - C_VECNormalize(src, unit); -} -void PSVECScale(const __REGISTER Vec* src, __REGISTER Vec* dst, __REGISTER f32 scale) { - C_VECScale(src, dst, scale); -} -f32 PSVECSquareDistance(const __REGISTER Vec* a, const __REGISTER Vec* b) { - return C_VECSquareDistance(a, b); -} -f32 PSVECSquareMag(const __REGISTER Vec* v) { - return C_VECSquareMag(v); -} -void PSVECSubtract(const __REGISTER Vec* a, const __REGISTER Vec* b, __REGISTER Vec* a_b) { - C_VECSubtract(a, b, a_b); -} From 04fdee9d5a8883669f24e43d3a58c864757d67d6 Mon Sep 17 00:00:00 2001 From: PJB3005 Date: Tue, 24 Feb 2026 14:08:15 +0100 Subject: [PATCH 22/46] Fix mDoPrintf_vprintf_Interrupt on 64-bit This is an ABI hazard so I'm just gonna call vprintf directly. --- src/m_Do/m_Do_printf.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/m_Do/m_Do_printf.cpp b/src/m_Do/m_Do_printf.cpp index 154d54c737..13b2d070ce 100644 --- a/src/m_Do/m_Do_printf.cpp +++ b/src/m_Do/m_Do_printf.cpp @@ -124,9 +124,13 @@ void mDoPrintf_vprintf_Interrupt(char const* fmt, va_list args) { BOOL interruptStatus = OSDisableInterrupts(); if (!data_80450BB5) { data_80450BB5 = true; +#if TARGET_PC + vprintf(fmt, args); +#else uintptr_t var_r29 = (uintptr_t)&mDoPrintf_FiberStack + sizeof(mDoPrintf_FiberStack); OSSwitchFiberEx((uintptr_t)fmt, (uintptr_t)args, 0, 0, (uintptr_t)vprintf, var_r29); +#endif data_80450BB5 = false; } OSRestoreInterrupts(interruptStatus); From bc8d5a2dced549b9ebf47ee2bb58677f40c4146c Mon Sep 17 00:00:00 2001 From: PJB3005 Date: Tue, 24 Feb 2026 14:54:53 +0100 Subject: [PATCH 23/46] Make console UTF-8 & VT sequences work reliably on Windows --- CMakeLists.txt | 1 + src/dusk/main.cpp | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index f734ec60fe..b653f008f9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -29,6 +29,7 @@ elseif (MSVC) add_compile_options(/Zc:strictStrings-) add_compile_options(/MP) add_compile_options(/W0) + add_compile_options(/utf-8) endif () if (NOT MSVC) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-error -Wno-c++11-narrowing") diff --git a/src/dusk/main.cpp b/src/dusk/main.cpp index d424bf2b56..4155482488 100644 --- a/src/dusk/main.cpp +++ b/src/dusk/main.cpp @@ -1,5 +1,24 @@ +#if _WIN32 +#define WINDOWS_LEAN_AND_MEAN +#include +#endif + int game_main(int argc, char* argv[]); +void WindowsSetupConsole(); + int main(int argc, char* argv[]) { + WindowsSetupConsole(); return game_main(argc, argv); } + +void WindowsSetupConsole() { +#if _WIN32 + SetConsoleOutputCP(CP_UTF8); + + auto stdout = GetStdHandle(STD_OUTPUT_HANDLE); + DWORD consoleMode; + GetConsoleMode(stdout, &consoleMode); + SetConsoleMode(stdout, consoleMode | ENABLE_PROCESSED_OUTPUT | ENABLE_VIRTUAL_TERMINAL_PROCESSING); +#endif +} \ No newline at end of file From 818b190bb5cb83e98d439bf69a92f74a8f960d37 Mon Sep 17 00:00:00 2001 From: PJB3005 Date: Tue, 24 Feb 2026 15:14:46 +0100 Subject: [PATCH 24/46] Make heap init work on 64-bit Larger pointer sizes means the normal heap limits don't work. Expand them even when on 32-bit because we're already allocating 256 MB of MEM1 anyways --- src/m_Do/m_Do_machine.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/m_Do/m_Do_machine.cpp b/src/m_Do/m_Do_machine.cpp index 08ede9161a..0dcee93d4a 100644 --- a/src/m_Do/m_Do_machine.cpp +++ b/src/m_Do/m_Do_machine.cpp @@ -831,6 +831,19 @@ int mDoMch_Create() { arenaSize -= 0x6C00; arenaSize -= 0xC800; #endif + +#if TARGET_PC + // Change heap sizes to account for 64bit pointers & extra memory available. + arenaSize = 32 * 1024 * 1024; + commandHeapSize *= 2; +#if DEBUG + dynamicLinkHeapSize *= 2; +#endif + archiveHeapSize *= 2; + j2dHeapSize *= 2; + gameHeapSize *= 2; +#endif + JFWSystem::setSysHeapSize(arenaSize); my_PrintHeap("システムヒープ", arenaSize); From e5cfe0e6b4345b8df749cc859b9502b190db43d3 Mon Sep 17 00:00:00 2001 From: PJB3005 Date: Tue, 24 Feb 2026 15:17:47 +0100 Subject: [PATCH 25/46] Use calloc instead of malloc followed by memset Avoids forcing pages to be allocated until actually needed. --- src/m_Do/m_Do_main.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/m_Do/m_Do_main.cpp b/src/m_Do/m_Do_main.cpp index 44984610ab..5a3b6c5f39 100644 --- a/src/m_Do/m_Do_main.cpp +++ b/src/m_Do/m_Do_main.cpp @@ -207,12 +207,11 @@ int game_main(int argc, char* argv[]) { // 2. Setup Virtual Game RAM // Simulates Gamecube RAM (24MB + Audio etc, we take 256MB) #define GAME_RAM_SIZE (256 * 1024 * 1024) - void* virtualGameRam = malloc(GAME_RAM_SIZE); + void* virtualGameRam = calloc(1, GAME_RAM_SIZE); if (!virtualGameRam) { printf("Fatal: Failed to allocate game RAM\n"); return -1; } - memset(virtualGameRam, 0, GAME_RAM_SIZE); OSSetArenaLo(virtualGameRam); OSSetArenaHi((char*)virtualGameRam + GAME_RAM_SIZE); From e9b3df4d61da2e15966f1b5c4a9528d89caa43c6 Mon Sep 17 00:00:00 2001 From: PJB3005 Date: Tue, 24 Feb 2026 15:23:52 +0100 Subject: [PATCH 26/46] Fix primitive int types on 64-bit non-Windows targets `long` is variable-sized on non-Windows targets, so don't use it. Added some static_asserts to confirm this is the case. --- files.cmake | 1 + include/dolphin/types.h | 5 +++++ src/dusk/asserts.cpp | 11 +++++++++++ 3 files changed, 17 insertions(+) create mode 100644 src/dusk/asserts.cpp diff --git a/files.cmake b/files.cmake index f00741e0a0..b7cf5802da 100644 --- a/files.cmake +++ b/files.cmake @@ -1314,6 +1314,7 @@ set(REL_FILES ) set(DUSK_FILES + src/dusk/asserts.cpp src/dusk/imgui.cpp src/dusk/stubs.cpp src/dusk/extras.c diff --git a/include/dolphin/types.h b/include/dolphin/types.h index b957324094..17d63b4a76 100644 --- a/include/dolphin/types.h +++ b/include/dolphin/types.h @@ -8,8 +8,13 @@ typedef signed char s8; typedef unsigned char u8; typedef signed short int s16; typedef unsigned short int u16; +#if TARGET_PC +typedef signed int s32; +typedef unsigned int u32; +#else typedef signed long s32; typedef unsigned long u32; +#endif typedef signed long long int s64; typedef unsigned long long int u64; diff --git a/src/dusk/asserts.cpp b/src/dusk/asserts.cpp new file mode 100644 index 0000000000..8843970f3a --- /dev/null +++ b/src/dusk/asserts.cpp @@ -0,0 +1,11 @@ +#include +#include + +static_assert(sizeof(u8) == sizeof(uint8_t)); +static_assert(sizeof(s8) == sizeof(int8_t)); +static_assert(sizeof(u16) == sizeof(uint16_t)); +static_assert(sizeof(s16) == sizeof(int16_t)); +static_assert(sizeof(u32) == sizeof(uint32_t)); +static_assert(sizeof(s32) == sizeof(int32_t)); +static_assert(sizeof(u64) == sizeof(uint64_t)); +static_assert(sizeof(s64) == sizeof(int64_t)); From 750f9a044db4838e9c02933f34b8e1a62bf84390 Mon Sep 17 00:00:00 2001 From: PJB3005 Date: Tue, 24 Feb 2026 15:29:08 +0100 Subject: [PATCH 27/46] Compile fixes for previous commit oops --- include/JSystem/JGadget/define.h | 4 +++- include/revolution/types.h | 5 +++++ src/dusk/jsystem_stubs.cpp | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/include/JSystem/JGadget/define.h b/include/JSystem/JGadget/define.h index a8c7323e8f..3a1548e364 100644 --- a/include/JSystem/JGadget/define.h +++ b/include/JSystem/JGadget/define.h @@ -15,9 +15,11 @@ public: JGadget_outMessage(MessageFunc fn, const char* file, int line); ~JGadget_outMessage(); +#if !TARGET_PC JGadget_outMessage& operator<<(int param_1) { return *this << (s32)param_1; } - JGadget_outMessage& operator<<(u16); JGadget_outMessage& operator<<(uint); +#endif + JGadget_outMessage& operator<<(u16); JGadget_outMessage& operator<<(u8 param_1) { return *this << (char)param_1; } JGadget_outMessage& operator<<(const char* str); JGadget_outMessage& operator<<(char); diff --git a/include/revolution/types.h b/include/revolution/types.h index 2434b54085..355768087e 100644 --- a/include/revolution/types.h +++ b/include/revolution/types.h @@ -5,8 +5,13 @@ typedef signed char s8; typedef unsigned char u8; typedef signed short int s16; typedef unsigned short int u16; +#if TARGET_PC +typedef signed int s32; +typedef unsigned int u32; +#else typedef signed long s32; typedef unsigned long u32; +#endif typedef signed long long int s64; typedef unsigned long long int u64; diff --git a/src/dusk/jsystem_stubs.cpp b/src/dusk/jsystem_stubs.cpp index 1ca727fe00..3a1b18fbab 100644 --- a/src/dusk/jsystem_stubs.cpp +++ b/src/dusk/jsystem_stubs.cpp @@ -140,6 +140,6 @@ int JOREventCallbackListNode::JORAct(u32 eventID, const char* eventName) { } */ #pragma mark J3DPSMtxArrayConcat -void J3DPSMtxArrayConcat(float (*a)[4], float (*b)[4], float (*out)[4], unsigned long count) { +void J3DPSMtxArrayConcat(float (*a)[4], float (*b)[4], float (*out)[4], u32 count) { puts("J3DPSMtxArrayConcat is a stub"); } From 32e83a26a1d9e3e37f4dc29a59283c00ccf202c2 Mon Sep 17 00:00:00 2001 From: PJB3005 Date: Tue, 24 Feb 2026 15:40:26 +0100 Subject: [PATCH 28/46] Add CMake option to re-enable warnings in game build --- CMakeLists.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b653f008f9..bbe0800273 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,6 +11,8 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) add_subdirectory(extern/aurora EXCLUDE_FROM_ALL) +option(DUSK_BUILD_WARNINGS "If off, compiler warnings will be suppressed") + if (CMAKE_SYSTEM_NAME STREQUAL Linux) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unknown-pragmas -Wno-unused-variable -Wno-unused-parameter") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x -stdlib=libc++ -Wno-register -fPIC") @@ -28,7 +30,9 @@ elseif (MSVC) add_compile_options(/bigobj) add_compile_options(/Zc:strictStrings-) add_compile_options(/MP) - add_compile_options(/W0) + if (NOT DUSK_BUILD_WARNINGS) + add_compile_options(/W0) + endif () add_compile_options(/utf-8) endif () if (NOT MSVC) From d05478cfaa0f29c951067eda18d928e3154752f9 Mon Sep 17 00:00:00 2001 From: PJB3005 Date: Tue, 24 Feb 2026 15:49:28 +0100 Subject: [PATCH 29/46] Fix JKRSolidHeap on 64-bit --- src/JSystem/JKernel/JKRSolidHeap.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/JSystem/JKernel/JKRSolidHeap.cpp b/src/JSystem/JKernel/JKRSolidHeap.cpp index 01ead7728b..a12cb8835a 100644 --- a/src/JSystem/JKernel/JKRSolidHeap.cpp +++ b/src/JSystem/JKernel/JKRSolidHeap.cpp @@ -106,9 +106,9 @@ void* JKRSolidHeap::do_alloc(u32 size, int alignment) { } void* JKRSolidHeap::allocFromHead(u32 size, int alignment) { - size = ALIGN_NEXT(size, 0x4); + size = ALIGN_NEXT(size, sizeof(void*)); void* ptr = NULL; - u32 alignedStart = (alignment - 1 + (uintptr_t)mSolidHead) & ~(alignment - 1); + uintptr_t alignedStart = (alignment - 1 + (uintptr_t)mSolidHead) & ~(alignment - 1); u32 totalSize = size + (alignedStart - (uintptr_t)mSolidHead); if (totalSize <= mFreeSize) { #if DEBUG @@ -133,9 +133,9 @@ void* JKRSolidHeap::allocFromHead(u32 size, int alignment) { } void* JKRSolidHeap::allocFromTail(u32 size, int alignment) { - size = ALIGN_NEXT(size, 4); + size = ALIGN_NEXT(size, sizeof(void*)); void* ptr = NULL; - u32 alignedStart = ALIGN_PREV((uintptr_t)mSolidTail - size, alignment); + uintptr_t alignedStart = ALIGN_PREV((uintptr_t)mSolidTail - size, alignment); u32 totalSize = (uintptr_t)mSolidTail - (uintptr_t)alignedStart; if (totalSize <= mFreeSize) { ptr = (void*)alignedStart; From 1b6a118eaedad2a6de9810c9ad5da0012461ff2e Mon Sep 17 00:00:00 2001 From: PJB3005 Date: Tue, 24 Feb 2026 16:04:53 +0100 Subject: [PATCH 30/46] Replace some hardcoded 4 -> alignof(max_align_t) Hope this fixes the allocator issues --- src/JSystem/JKernel/JKRHeap.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/JSystem/JKernel/JKRHeap.cpp b/src/JSystem/JKernel/JKRHeap.cpp index 2ebafc2613..8960b58c7a 100644 --- a/src/JSystem/JKernel/JKRHeap.cpp +++ b/src/JSystem/JKernel/JKRHeap.cpp @@ -501,7 +501,7 @@ void* operator new(size_t size) { if (JKRHeap::sCurrentHeap == NULL) { return malloc(size); } - void* mem = JKRHeap::alloc(size, 4, NULL); + void* mem = JKRHeap::alloc(size, alignof(max_align_t), NULL); if (mem == NULL) { OSReport("[NEW] JKRHeap FULL! Fallback to malloc for size %u\n", (unsigned)size); mem = malloc(size); @@ -539,7 +539,7 @@ void* operator new[](size_t size) { void* operator new[](size_t size) { if (JKRHeap::sCurrentHeap == NULL) return malloc(size); - void* mem = JKRHeap::alloc(size, 4, NULL); + void* mem = JKRHeap::alloc(size, alignof(max_align_t), NULL); if (mem == NULL) { mem = malloc(size); } From 36895ee3b6ba3513a96dc901bee199bfdd9d01d7 Mon Sep 17 00:00:00 2001 From: PJB3005 Date: Tue, 24 Feb 2026 16:29:00 +0100 Subject: [PATCH 31/46] Add template-based BE(T) endianness conversion helper types Doesn't require modification at the call sites thanks to the implicit conversion operator. --- include/dusk/endian.h | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/include/dusk/endian.h b/include/dusk/endian.h index 25e5df70ff..6623f2f0b2 100644 --- a/include/dusk/endian.h +++ b/include/dusk/endian.h @@ -54,4 +54,41 @@ static inline s32 RES_S32(s32 v) { #define RES_S32(x) (x) #endif +#ifdef TARGET_PC + +/* + * Declares a big-endian integer type. + */ +template +struct BE { + T inner; + operator T() const; +}; + +template<> +inline BE::operator u16() const { + return RES_U16(inner); +} + +template<> +inline BE::operator s16() const { + return RES_S16(inner); +} + +template<> +inline BE::operator u32() const { + return RES_U32(inner); +} + +template<> +inline BE::operator s32() const { + return RES_S32(inner); +} + +#define BE(T) BE +#else +#define BE(T) T +#endif + + #endif // DOLPHIN_ENDIAN_H From 9e02e3cfced9154519c0a2973c0506a8e127a451 Mon Sep 17 00:00:00 2001 From: PJB3005 Date: Tue, 24 Feb 2026 16:29:13 +0100 Subject: [PATCH 32/46] Use BE(T) for JUTFont --- include/JSystem/JUtility/JUTFont.h | 71 ++++++++++---------- include/JSystem/JUtility/JUTResFont.h | 6 +- src/JSystem/JUtility/JUTResFont.cpp | 97 ++++++++++++--------------- 3 files changed, 81 insertions(+), 93 deletions(-) diff --git a/include/JSystem/JUtility/JUTFont.h b/include/JSystem/JUtility/JUTFont.h index 4ebaadb7fa..dcccf68dde 100644 --- a/include/JSystem/JUtility/JUTFont.h +++ b/include/JSystem/JUtility/JUTFont.h @@ -3,6 +3,7 @@ #include "JSystem/JUtility/TColor.h" #include +#include "dusk/endian.h" /** * @ingroup jsystem-jutility @@ -10,48 +11,48 @@ */ struct ResFONT { struct INF1 { - /* 0x00 */ u32 magic; - /* 0x04 */ u32 size; - /* 0x08 */ u16 fontType; - /* 0x0A */ u16 ascent; - /* 0x0C */ u16 descent; - /* 0x0E */ u16 width; - /* 0x10 */ u16 leading; - /* 0x12 */ u16 defaultCode; + /* 0x00 */ BE(u32) magic; + /* 0x04 */ BE(u32) size; + /* 0x08 */ BE(u16) fontType; + /* 0x0A */ BE(u16) ascent; + /* 0x0C */ BE(u16) descent; + /* 0x0E */ BE(u16) width; + /* 0x10 */ BE(u16) leading; + /* 0x12 */ BE(u16) defaultCode; }; struct WID1 { - /* 0x00 */ u32 magic; - /* 0x04 */ u32 size; - /* 0x08 */ u16 startCode; - /* 0x0A */ u16 endCode; + /* 0x00 */ BE(u32) magic; + /* 0x04 */ BE(u32) size; + /* 0x08 */ BE(u16) startCode; + /* 0x0A */ BE(u16) endCode; /* 0x0C */ u8 mChunkNum[4]; }; struct MAP1 { - /* 0x00 */ u32 magic; - /* 0x04 */ u32 size; - /* 0x08 */ u16 mappingMethod; - /* 0x0A */ u16 startCode; - /* 0x0C */ u16 endCode; - /* 0x0E */ u16 numEntries; - /* 0x10 */ u16 mLeading; + /* 0x00 */ BE(u32) magic; + /* 0x04 */ BE(u32) size; + /* 0x08 */ BE(u16) mappingMethod; + /* 0x0A */ BE(u16) startCode; + /* 0x0C */ BE(u16) endCode; + /* 0x0E */ BE(u16) numEntries; + /* 0x10 */ BE(u16) mLeading; }; struct GLY1 { - /* 0x00 */ u32 magic; - /* 0x04 */ u32 size; - /* 0x08 */ u16 startCode; - /* 0x0A */ u16 endCode; - /* 0x0C */ u16 cellWidth; - /* 0x0E */ u16 cellHeight; - /* 0x10 */ u32 textureSize; - /* 0x14 */ u16 textureFormat; - /* 0x16 */ u16 numRows; - /* 0x18 */ u16 numColumns; - /* 0x1A */ u16 textureWidth; - /* 0x1C */ u16 textureHeight; - /* 0x1E */ u16 padding; + /* 0x00 */ u32 magic; // Don't mark BE (seemingly only written by code) + /* 0x04 */ BE(u32) size; + /* 0x08 */ BE(u16) startCode; + /* 0x0A */ BE(u16) endCode; + /* 0x0C */ BE(u16) cellWidth; + /* 0x0E */ BE(u16) cellHeight; + /* 0x10 */ BE(u32) textureSize; + /* 0x14 */ BE(u16) textureFormat; + /* 0x16 */ BE(u16) numRows; + /* 0x18 */ BE(u16) numColumns; + /* 0x1A */ BE(u16) textureWidth; + /* 0x1C */ BE(u16) textureHeight; + /* 0x1E */ BE(u16) padding; #ifdef _MSVC_LANG u8* __get_data() const { return (u8*)(this + 1); } __declspec(property(get = __get_data)) u8* data; @@ -60,9 +61,9 @@ struct ResFONT { #endif }; - /* 0x00 */ u64 magic; - /* 0x08 */ u32 filesize; - /* 0x0C */ u32 numBlocks; + /* 0x00 */ BE(u64) magic; + /* 0x08 */ BE(u32) filesize; + /* 0x0C */ BE(u32) numBlocks; /* 0x10 */ u8 padding[0x10]; /* 0x20 */ u8 data[]; }; diff --git a/include/JSystem/JUtility/JUTResFont.h b/include/JSystem/JUtility/JUTResFont.h index 473a8e8f99..7b6ec796da 100644 --- a/include/JSystem/JUtility/JUTResFont.h +++ b/include/JSystem/JUtility/JUTResFont.h @@ -13,8 +13,8 @@ typedef bool (*IsLeadByte_func)(int); */ struct BlockHeader { const BlockHeader* getNext() const { return reinterpret_cast(reinterpret_cast(this) + size); } - u32 magic; - u32 size; + BE(u32) magic; + BE(u32) size; }; /** @@ -50,7 +50,7 @@ public: void countBlock(); void loadFont(int, _GXTexMapID, JUTFont::TWidth*); int getFontCode(int) const; - int convertSjis(int, u16*) const; + int convertSjis(int, BE(u16)*) const; inline void delete_and_initialize() { deleteMemBlocks_ResFont(); diff --git a/src/JSystem/JUtility/JUTResFont.cpp b/src/JSystem/JUtility/JUTResFont.cpp index ad3aae4d30..6b6a52f524 100644 --- a/src/JSystem/JUtility/JUTResFont.cpp +++ b/src/JSystem/JUtility/JUTResFont.cpp @@ -7,19 +7,6 @@ #include "JSystem/JUtility/JUTConsole.h" #include -#ifdef TARGET_PC -#include "dusk/endian.h" -// Font resource data is embedded as Big-Endian (GameCube format). -// Wrap all multi-byte field accesses through these helpers. -static inline u32 R32(u32 v) { return be32(v); } -static inline u16 R16(u16 v) { return be16(v); } -static inline s16 RS16(s16 v) { return be16s(v); } -#else -static inline u32 R32(u32 v) { return v; } -static inline u16 R16(u16 v) { return v; } -static inline s16 RS16(s16 v) { return v; } -#endif - JUTResFont::JUTResFont() { initialize_state(); JUTFont::initialize_state(); @@ -103,8 +90,8 @@ void JUTResFont::countBlock() { mMap1BlockNum = 0; u8* pData = (u8*)&mResFont->data; - for (u32 i = 0; i < R32(mResFont->numBlocks); i++, pData += R32(((BlockHeader*)pData)->size)) { - u32 magic = R32(((BlockHeader*)pData)->magic); + for (u32 i = 0; i < mResFont->numBlocks; i++, pData += ((BlockHeader*)pData)->size) { + u32 magic = ((BlockHeader*)pData)->magic; switch (magic) { case 'WID1': mWid1BlockNum++; @@ -137,13 +124,13 @@ void JUTResFont::setBlock() { mMaxCode = -1; BlockHeader* data = (BlockHeader*)mResFont->data; - for (u32 i = 0; i < R32(mResFont->numBlocks); - data = (BlockHeader*)((u8*)data + R32(data->size)), i++) { - u32 magic = R32(data->magic); + for (u32 i = 0; i < mResFont->numBlocks; + data = (BlockHeader*)((u8*)data + data->size), i++) { + u32 magic = data->magic; switch (magic) { case 'INF1': { mInf1Ptr = (ResFONT::INF1*)data; - u32 u = R16(mInf1Ptr->fontType); + u32 u = mInf1Ptr->fontType; JUT_ASSERT(244, u < suAboutEncoding_); mIsLeadByte = &saoAboutEncoding_[u]; break; @@ -161,8 +148,8 @@ void JUTResFont::setBlock() { case 'MAP1': mpMapBlocks[mapNum] = (ResFONT::MAP1*)data; - if (mMaxCode > R16(mpMapBlocks[mapNum]->startCode)) { - mMaxCode = R16(mpMapBlocks[mapNum]->startCode); + if (mMaxCode > mpMapBlocks[mapNum]->startCode) { + mMaxCode = mpMapBlocks[mapNum]->startCode; } mapNum++; break; @@ -251,10 +238,10 @@ f32 JUTResFont::drawChar_scale(f32 pos_x, f32 pos_y, f32 scale_x, f32 scale_y, i y1 = pos_y - getAscent() * (scale_y / getHeight()); f32 y2 = getDescent() * (scale_y / getHeight()) + pos_y; - u16 texW = R16(mpGlyphBlocks[field_0x66]->textureWidth); - u16 texH = R16(mpGlyphBlocks[field_0x66]->textureHeight); - u16 cellW = R16(mpGlyphBlocks[field_0x66]->cellWidth); - u16 cellH = R16(mpGlyphBlocks[field_0x66]->cellHeight); + u16 texW = mpGlyphBlocks[field_0x66]->textureWidth; + u16 texH = mpGlyphBlocks[field_0x66]->textureHeight; + u16 cellW = mpGlyphBlocks[field_0x66]->cellWidth; + u16 cellH = mpGlyphBlocks[field_0x66]->cellHeight; s32 u1 = (mWidth * 0x8000) / texW; s32 v1 = (mHeight * 0x8000) / texH; s32 u2 = ((mWidth + cellW) * 0x8000) / texW; @@ -301,11 +288,11 @@ void JUTResFont::loadFont(int code, GXTexMapID texMapID, JUTFont::TWidth* pDstWi void JUTResFont::getWidthEntry(int code, JUTFont::TWidth* i_width) const { int fontCode = getFontCode(code); i_width->field_0x0 = 0; - i_width->field_0x1 = R16(mInf1Ptr->width); + i_width->field_0x1 = mInf1Ptr->width; for (int i = 0; i < mWid1BlockNum; i++) { - u16 sc = R16(mpWidthBlocks[i]->startCode); - u16 ec = R16(mpWidthBlocks[i]->endCode); + u16 sc = mpWidthBlocks[i]->startCode; + u16 ec = mpWidthBlocks[i]->endCode; if (sc <= fontCode && fontCode <= ec) { // TWidth is two u8 fields, no byte-swap needed *i_width = *(JUTFont::TWidth*)&mpWidthBlocks[i]->mChunkNum[(fontCode - sc) * 2]; @@ -317,7 +304,7 @@ void JUTResFont::getWidthEntry(int code, JUTFont::TWidth* i_width) const { s32 JUTResFont::getCellWidth() const { if (mpGlyphBlocks) { if (mpGlyphBlocks[0]) { - return R16(mpGlyphBlocks[0]->cellWidth); + return mpGlyphBlocks[0]->cellWidth; } } @@ -327,7 +314,7 @@ s32 JUTResFont::getCellWidth() const { s32 JUTResFont::getCellHeight() const { if (mpGlyphBlocks) { if (mpGlyphBlocks[0]) { - return R16(mpGlyphBlocks[0]->cellHeight); + return mpGlyphBlocks[0]->cellHeight; } } @@ -350,46 +337,46 @@ int JUTResFont::getFontCode(int chr) const { 0x8294, 0x8295, 0x8296, 0x8297, 0x8298, 0x8299, 0x829A, 0x816F, 0x8162, 0x8170, 0x8160, }; - int ret = R16(mInf1Ptr->defaultCode); + int ret = mInf1Ptr->defaultCode; if ((getFontType() == 2) && (mMaxCode >= 0x8000U) && (chr >= 0x20) && (chr < 0x7FU)) { chr = halftofull[chr - 32]; } for (int i = 0; i < mMap1BlockNum; i++) { - u16 sc = R16(mpMapBlocks[i]->startCode); - u16 ec = R16(mpMapBlocks[i]->endCode); - u16 mm = R16(mpMapBlocks[i]->mappingMethod); + u16 sc = mpMapBlocks[i]->startCode; + u16 ec = mpMapBlocks[i]->endCode; + u16 mm = mpMapBlocks[i]->mappingMethod; if ((sc <= chr) && (chr <= ec)) { if (mm == 0) { ret = chr - sc; break; } else if (mm == 2) { - u16* leading_temp = &mpMapBlocks[i]->mLeading; - ret = R16(leading_temp[chr - sc]); + BE(u16)* leading_temp = &mpMapBlocks[i]->mLeading; + ret = leading_temp[chr - sc]; break; } else if (mm == 3) { - u16* leading_temp = &mpMapBlocks[i]->mLeading; + BE(u16)* leading_temp = &mpMapBlocks[i]->mLeading; int phi_r5 = 0; - int phi_r6_2 = R16(mpMapBlocks[i]->numEntries) - 1; + int phi_r6_2 = mpMapBlocks[i]->numEntries - 1; while (phi_r6_2 >= phi_r5) { int temp_r7 = (phi_r6_2 + phi_r5) / 2; - if (chr < R16(leading_temp[temp_r7 * 2])) { + if (chr < leading_temp[temp_r7 * 2]) { phi_r6_2 = temp_r7 - 1; continue; } - if (chr > R16(leading_temp[temp_r7 * 2])) { + if (chr > leading_temp[temp_r7 * 2]) { phi_r5 = temp_r7 + 1; continue; } - ret = R16(leading_temp[temp_r7 * 2 + 1]); + ret = leading_temp[temp_r7 * 2 + 1]; break; } } else if (mm == 1) { - u16* phi_r5_2 = NULL; - if (R16(mpMapBlocks[i]->numEntries) == 1) { + BE(u16)* phi_r5_2 = NULL; + if (mpMapBlocks[i]->numEntries == 1) { phi_r5_2 = &mpMapBlocks[i]->mLeading; } ret = convertSjis(chr, phi_r5_2); @@ -405,8 +392,8 @@ void JUTResFont::loadImage(int code, GXTexMapID id){ int i = 0; for (; i < mGly1BlockNum; i++) { - u16 sc = R16(mpGlyphBlocks[i]->startCode); - u16 ec = R16(mpGlyphBlocks[i]->endCode); + u16 sc = mpGlyphBlocks[i]->startCode; + u16 ec = mpGlyphBlocks[i]->endCode; if (sc <= code && code <= ec) { code -= sc; @@ -415,14 +402,14 @@ void JUTResFont::loadImage(int code, GXTexMapID id){ } if (i != mGly1BlockNum) { - u16 numRows = R16(mpGlyphBlocks[i]->numRows); - u16 numCols = R16(mpGlyphBlocks[i]->numColumns); - u16 cellW = R16(mpGlyphBlocks[i]->cellWidth); - u16 cellH = R16(mpGlyphBlocks[i]->cellHeight); - u32 texSize = R32(mpGlyphBlocks[i]->textureSize); - u16 texW = R16(mpGlyphBlocks[i]->textureWidth); - u16 texH = R16(mpGlyphBlocks[i]->textureHeight); - u16 texFmt = R16(mpGlyphBlocks[i]->textureFormat); + u16 numRows = mpGlyphBlocks[i]->numRows; + u16 numCols = mpGlyphBlocks[i]->numColumns; + u16 cellW = mpGlyphBlocks[i]->cellWidth; + u16 cellH = mpGlyphBlocks[i]->cellHeight; + u32 texSize = mpGlyphBlocks[i]->textureSize; + u16 texW = mpGlyphBlocks[i]->textureWidth; + u16 texH = mpGlyphBlocks[i]->textureHeight; + u16 texFmt = mpGlyphBlocks[i]->textureFormat; s32 pageNumCells = numRows * numCols; s32 pageIdx = code / pageNumCells; @@ -446,7 +433,7 @@ void JUTResFont::loadImage(int code, GXTexMapID id){ } } -int JUTResFont::convertSjis(int inChr, u16* inLead) const { +int JUTResFont::convertSjis(int inChr, BE(u16)* inLead) const { int r29; int tmp = JSUHiByte(inChr); int tmp2 = JSULoByte(inChr) - 0x40; @@ -458,7 +445,7 @@ int JUTResFont::convertSjis(int inChr, u16* inLead) const { u16 lead = 0x31c; if (inLead) { - lead = R16(*inLead); + lead = *inLead; } r29 = tmp2 + (tmp - 0x88) * 0xbc + -0x5e + lead; From f3ca75b3b7884b7ff3e238ad54ac67d23699c051 Mon Sep 17 00:00:00 2001 From: PJB3005 Date: Tue, 24 Feb 2026 16:35:45 +0100 Subject: [PATCH 33/46] Use BE(T) for JUTPalette --- include/JSystem/JUtility/JUTPalette.h | 4 +++- src/JSystem/JUtility/JUTPalette.cpp | 3 +-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/include/JSystem/JUtility/JUTPalette.h b/include/JSystem/JUtility/JUTPalette.h index 0053913630..95de8a995a 100644 --- a/include/JSystem/JUtility/JUTPalette.h +++ b/include/JSystem/JUtility/JUTPalette.h @@ -3,6 +3,8 @@ #include +#include "dusk/endian.h" + enum JUTTransparency { UNK0, UNK1 }; /** @@ -12,7 +14,7 @@ enum JUTTransparency { UNK0, UNK1 }; struct ResTLUT { u8 format; u8 transparency; - u16 numColors; + BE(u16) numColors; }; /** diff --git a/src/JSystem/JUtility/JUTPalette.cpp b/src/JSystem/JUtility/JUTPalette.cpp index 8e34766d0f..04b5841b16 100644 --- a/src/JSystem/JUtility/JUTPalette.cpp +++ b/src/JSystem/JUtility/JUTPalette.cpp @@ -3,7 +3,6 @@ #include "JSystem/JUtility/JUTPalette.h" #include #include -#include "dusk/endian.h" void JUTPalette::storeTLUT(GXTlut param_0, ResTLUT* tlut) { if (tlut == NULL) { @@ -12,7 +11,7 @@ void JUTPalette::storeTLUT(GXTlut param_0, ResTLUT* tlut) { mTlutName = param_0; mFormat = tlut->format; mTransparency = tlut->transparency; - mNumColors = RES_U16(tlut->numColors); + mNumColors = tlut->numColors; mColorTable = (ResTLUT*)((u8*)tlut + 0x20); GXInitTlutObj(&mTlutObj, (void*)mColorTable, (GXTlutFmt)mFormat, mNumColors); } From 29375d2b794656ee0bcdeada19dca87165bc7c60 Mon Sep 17 00:00:00 2001 From: PJB3005 Date: Tue, 24 Feb 2026 16:36:16 +0100 Subject: [PATCH 34/46] I apparently missed JUTCacheFont --- src/JSystem/JUtility/JUTCacheFont.cpp | 47 +++++++++++---------------- 1 file changed, 19 insertions(+), 28 deletions(-) diff --git a/src/JSystem/JUtility/JUTCacheFont.cpp b/src/JSystem/JUtility/JUTCacheFont.cpp index a47dcb4eb0..ed886050e8 100644 --- a/src/JSystem/JUtility/JUTCacheFont.cpp +++ b/src/JSystem/JUtility/JUTCacheFont.cpp @@ -8,15 +8,6 @@ #include #include -#ifdef TARGET_PC -#include "dusk/endian.h" -static inline u32 R32(u32 v) { return be32(v); } -static inline u16 R16(u16 v) { return be16(v); } -#else -static inline u32 R32(u32 v) { return v; } -static inline u16 R16(u16 v) { return v; } -#endif - JUTCacheFont::JUTCacheFont(ResFONT const* p_fontRes, u32 cacheSize, JKRHeap* p_heap) { initialize_state(); JUTResFont::initialize_state(); @@ -82,9 +73,9 @@ int JUTCacheFont::getMemorySize(ResFONT const* p_font, u16* o_widCount, u32* o_w u32 glyTexSize; u8* fontInf = (u8*)p_font->data; - for (int i = 0; i < (int)R32(p_font->numBlocks); i++) { - u32 blkMagic = R32(((BlockHeader*)fontInf)->magic); - u32 blkSize = R32(((BlockHeader*)fontInf)->size); + for (int i = 0; i < (int)p_font->numBlocks; i++) { + u32 blkMagic = ((BlockHeader*)fontInf)->magic; + u32 blkSize = ((BlockHeader*)fontInf)->size; switch (blkMagic) { case 'INF1': break; @@ -94,7 +85,7 @@ int JUTCacheFont::getMemorySize(ResFONT const* p_font, u16* o_widCount, u32* o_w break; case 'GLY1': totalGlySize += blkSize; - glyTexSize = R32(((ResFONT::GLY1*)fontInf)->textureSize); + glyTexSize = ((ResFONT::GLY1*)fontInf)->textureSize; glyBlockCount++; if (glyTexSize > maxGlyTexSize) { maxGlyTexSize = glyTexSize; @@ -270,14 +261,14 @@ void JUTCacheFont::setBlock() { mMaxCode = 0xffff; const u8* pData = (const u8*)mResFont->data; - for (int i = 0; i < (int)R32(mResFont->numBlocks); i++) { - u32 blkMagic = R32(((BlockHeader*)pData)->magic); - u32 blkSize = R32(((BlockHeader*)pData)->size); + for (int i = 0; i < (int)mResFont->numBlocks; i++) { + u32 blkMagic = ((BlockHeader*)pData)->magic; + u32 blkSize = ((BlockHeader*)pData)->size; u32 u; switch (blkMagic) { case 'INF1': memcpy(mInf1Ptr, pData, 0x20); - u = R16(mInf1Ptr->fontType); + u = mInf1Ptr->fontType; JUT_ASSERT(448, u < suAboutEncoding_); mIsLeadByte = &JUTResFont::saoAboutEncoding_[u]; break; @@ -297,8 +288,8 @@ void JUTCacheFont::setBlock() { "trouble occurred in JKRMainRamToAram."); } piVar5->magic = aramAddress; - if (R32(piVar5->textureSize) > mMaxSheetSize) { - mMaxSheetSize = R32(piVar5->textureSize); + if (piVar5->textureSize > mMaxSheetSize) { + mMaxSheetSize = piVar5->textureSize; } mpGlyphBlocks[gylphNum] = piVar5; gylphNum++; @@ -309,8 +300,8 @@ void JUTCacheFont::setBlock() { case 'MAP1': memcpy(pMap, pData, blkSize); mpMapBlocks[mapNum] = pMap; - if (mMaxCode > R16(mpMapBlocks[mapNum]->startCode)) { - mMaxCode = R16(mpMapBlocks[mapNum]->startCode); + if (mMaxCode > mpMapBlocks[mapNum]->startCode) { + mMaxCode = mpMapBlocks[mapNum]->startCode; } mapNum++; pMap = (ResFONT::MAP1*)((u8*)pMap + blkSize); @@ -404,8 +395,8 @@ JUTCacheFont::TCachePage* JUTCacheFont::loadCache_char_subroutine(int* param_0, rv = NULL; int i = 0; for (; i < mGly1BlockNum; i++) { - if (R16(mpGlyphBlocks[i]->startCode) <= *r29 && *r29 <= R16(mpGlyphBlocks[i]->endCode)) { - *r29 -= R16(mpGlyphBlocks[i]->startCode); + if (mpGlyphBlocks[i]->startCode <= *r29 && *r29 <= mpGlyphBlocks[i]->endCode) { + *r29 -= mpGlyphBlocks[i]->startCode; break; } } @@ -475,23 +466,23 @@ ResFONT* JUTResFont::getResFont() const { } int JUTResFont::getFontType() const { - return R16(mInf1Ptr->fontType); + return mInf1Ptr->fontType; } int JUTResFont::getLeading() const { - return R16(mInf1Ptr->leading); + return mInf1Ptr->leading; } s32 JUTResFont::getWidth() const { - return R16(mInf1Ptr->width); + return mInf1Ptr->width; } s32 JUTResFont::getAscent() const { - return R16(mInf1Ptr->ascent); + return mInf1Ptr->ascent; } s32 JUTResFont::getDescent() const { - return R16(mInf1Ptr->descent); + return mInf1Ptr->descent; } s32 JUTResFont::getHeight() const { From a36f3aaef9c9e43cdeb9e3ce7c4396daaba2146d Mon Sep 17 00:00:00 2001 From: PJB3005 Date: Tue, 24 Feb 2026 16:51:27 +0100 Subject: [PATCH 35/46] Revert accidental changes to JKRArchive.h (not mine) --- include/JSystem/JKernel/JKRArchive.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/JSystem/JKernel/JKRArchive.h b/include/JSystem/JKernel/JKRArchive.h index 7d49a595b8..33854b6fba 100644 --- a/include/JSystem/JKernel/JKRArchive.h +++ b/include/JSystem/JKernel/JKRArchive.h @@ -1,4 +1,4 @@ -#ifndef JKRARCHIVE_H -j n +#ifndef JKRARCHIVE_H #define JKRARCHIVE_H #include "JSystem/JKernel/JKRCompression.h" @@ -7,7 +7,7 @@ class JKRHeap; -/** m +/** * @ingroup jsystem-jkernel * */ From 79e9fa257f43b6c1b052a6124e597745c830956a Mon Sep 17 00:00:00 2001 From: PJB3005 Date: Tue, 24 Feb 2026 16:55:08 +0100 Subject: [PATCH 36/46] Use BE(T) for JKRArchive --- include/JSystem/JKernel/JKRArchive.h | 120 ++++++------------------- src/JSystem/JKernel/JKRAramArchive.cpp | 2 - src/JSystem/JKernel/JKRCompArchive.cpp | 3 - src/JSystem/JKernel/JKRDvdArchive.cpp | 2 - src/JSystem/JKernel/JKRMemArchive.cpp | 4 - 5 files changed, 26 insertions(+), 105 deletions(-) diff --git a/include/JSystem/JKernel/JKRArchive.h b/include/JSystem/JKernel/JKRArchive.h index 33854b6fba..2a2212efb5 100644 --- a/include/JSystem/JKernel/JKRArchive.h +++ b/include/JSystem/JKernel/JKRArchive.h @@ -4,6 +4,7 @@ #include "JSystem/JKernel/JKRCompression.h" #include "JSystem/JKernel/JKRFileLoader.h" #include "global.h" +#include "dusk/endian.h" class JKRHeap; @@ -12,14 +13,14 @@ class JKRHeap; * */ struct SArcHeader { - /* 0x00 */ u32 signature; - /* 0x04 */ u32 file_length; - /* 0x08 */ u32 header_length; - /* 0x0C */ u32 file_data_offset; - /* 0x10 */ u32 file_data_length; - /* 0x14 */ u32 field_0x14; - /* 0x18 */ u32 field_0x18; - /* 0x1C */ u32 field_0x1c; + /* 0x00 */ BE(u32) signature; + /* 0x04 */ BE(u32) file_length; + /* 0x08 */ BE(u32) header_length; + /* 0x0C */ BE(u32) file_data_offset; + /* 0x10 */ BE(u32) file_data_length; + /* 0x14 */ BE(u32) field_0x14; + /* 0x18 */ BE(u32) field_0x18; + /* 0x1C */ BE(u32) field_0x1c; }; /** @@ -27,13 +28,13 @@ struct SArcHeader { * */ struct SArcDataInfo { - /* 0x00 */ u32 num_nodes; - /* 0x04 */ u32 node_offset; - /* 0x08 */ u32 num_file_entries; - /* 0x0C */ u32 file_entry_offset; - /* 0x10 */ u32 string_table_length; - /* 0x14 */ u32 string_table_offset; - /* 0x18 */ u16 next_free_file_id; + /* 0x00 */ BE(u32) num_nodes; + /* 0x04 */ BE(u32) node_offset; + /* 0x08 */ BE(u32) num_file_entries; + /* 0x0C */ BE(u32) file_entry_offset; + /* 0x10 */ BE(u32) string_table_length; + /* 0x14 */ BE(u32) string_table_offset; + /* 0x18 */ BE(u16) next_free_file_id; /* 0x1A */ bool sync_file_ids_and_indices; /* 0x1B */ u8 field_1b[5]; }; @@ -64,19 +65,19 @@ public: }; struct SDIDirEntry { - u32 type; - u32 name_offset; - u16 field_0x8; - u16 num_entries; - u32 first_file_index; + BE(u32) type; + BE(u32) name_offset; + BE(u16) field_0x8; + BE(u16) num_entries; + BE(u32) first_file_index; }; struct SDIFileEntry { - u16 file_id; - u16 name_hash; - u32 type_flags_and_name_offset; - u32 data_offset; - u32 data_size; + BE(u16) file_id; + BE(u16) name_hash; + BE(u32) type_flags_and_name_offset; + BE(u32) data_offset; + BE(u32) data_size; void* data; u32 getNameOffset() const { return type_flags_and_name_offset & 0xFFFFFF; } @@ -220,75 +221,6 @@ protected: static u32 sCurrentDirID; }; -#ifdef TARGET_PC -#include "dusk/endian.h" - -// Byte-swap archive header from Big-Endian to host after loading from disk -inline void JKRSwapArcHeader(SArcHeader* h) { - h->signature = be32(h->signature); - h->file_length = be32(h->file_length); - h->header_length = be32(h->header_length); - h->file_data_offset = be32(h->file_data_offset); - h->file_data_length = be32(h->file_data_length); - h->field_0x14 = be32(h->field_0x14); - h->field_0x18 = be32(h->field_0x18); - h->field_0x1c = be32(h->field_0x1c); -} - -// Byte-swap archive data info block from Big-Endian to host -inline void JKRSwapArcDataInfo(SArcDataInfo* info) { - info->num_nodes = be32(info->num_nodes); - info->node_offset = be32(info->node_offset); - info->num_file_entries = be32(info->num_file_entries); - info->file_entry_offset = be32(info->file_entry_offset); - info->string_table_length = be32(info->string_table_length); - info->string_table_offset = be32(info->string_table_offset); - info->next_free_file_id = be16(info->next_free_file_id); -} - -// Byte-swap all directory entries -inline void JKRSwapDirEntries(JKRArchive::SDIDirEntry* nodes, u32 count) { - for (u32 i = 0; i < count; i++) { - nodes[i].type = be32(nodes[i].type); - nodes[i].name_offset = be32(nodes[i].name_offset); - nodes[i].field_0x8 = be16(nodes[i].field_0x8); - nodes[i].num_entries = be16(nodes[i].num_entries); - nodes[i].first_file_index = be32(nodes[i].first_file_index); - } -} - -// Byte-swap all file entries -inline void JKRSwapFileEntries(JKRArchive::SDIFileEntry* files, u32 count) { - for (u32 i = 0; i < count; i++) { - files[i].file_id = be16(files[i].file_id); - files[i].name_hash = be16(files[i].name_hash); - files[i].type_flags_and_name_offset = be32(files[i].type_flags_and_name_offset); - files[i].data_offset = be32(files[i].data_offset); - files[i].data_size = be32(files[i].data_size); - // data pointer is runtime-only, no swap needed - } -} - -// Swap all archive structures after loading from disk -inline void JKRSwapArchiveMemory(SArcDataInfo* arcInfo) { - // First swap the info block itself to read offsets - JKRSwapArcDataInfo(arcInfo); - - // Then swap directory and file entries using the now-native offsets - JKRArchive::SDIDirEntry* nodes = (JKRArchive::SDIDirEntry*)((u8*)arcInfo + arcInfo->node_offset); - JKRArchive::SDIFileEntry* files = (JKRArchive::SDIFileEntry*)((u8*)arcInfo + arcInfo->file_entry_offset); - - JKRSwapDirEntries(nodes, arcInfo->num_nodes); - JKRSwapFileEntries(files, arcInfo->num_file_entries); -} -#else -inline void JKRSwapArcHeader(SArcHeader*) {} -inline void JKRSwapArcDataInfo(SArcDataInfo*) {} -inline void JKRSwapDirEntries(JKRArchive::SDIDirEntry*, u32) {} -inline void JKRSwapFileEntries(JKRArchive::SDIFileEntry*, u32) {} -inline void JKRSwapArchiveMemory(SArcDataInfo*) {} -#endif - inline JKRCompression JKRConvertAttrToCompressionType(int attr) { return JKRArchive::convertAttrToCompressionType(attr); } diff --git a/src/JSystem/JKernel/JKRAramArchive.cpp b/src/JSystem/JKernel/JKRAramArchive.cpp index fd5ddbbf48..811978caa0 100644 --- a/src/JSystem/JKernel/JKRAramArchive.cpp +++ b/src/JSystem/JKernel/JKRAramArchive.cpp @@ -121,7 +121,6 @@ bool JKRAramArchive::open(s32 entryNum) { JKRDvdToMainRam(entryNum, (u8*)mem, EXPAND_SWITCH_UNKNOWN1, 32, NULL, JKRDvdRipper::ALLOC_DIRECTION_FORWARD, 0, &mCompression, NULL); DCInvalidateRange(mem, 32); - JKRSwapArcHeader(mem); int alignment = mMountDirection == MOUNT_DIRECTION_HEAD ? 32 : -32; u32 alignedSize = ALIGN_NEXT(mem->file_data_offset, 32); mArcInfoBlock = (SArcDataInfo*)JKRAllocFromHeap(mHeap, alignedSize, alignment); @@ -131,7 +130,6 @@ bool JKRAramArchive::open(s32 entryNum) { JKRDvdToMainRam(entryNum, (u8*)mArcInfoBlock, EXPAND_SWITCH_UNKNOWN1, alignedSize, NULL, JKRDvdRipper::ALLOC_DIRECTION_FORWARD, 32, NULL, NULL); DCInvalidateRange(mArcInfoBlock, alignedSize); - JKRSwapArchiveMemory(mArcInfoBlock); mNodes = (SDIDirEntry*)((u8*)mArcInfoBlock + mArcInfoBlock->node_offset); mFiles = (SDIFileEntry*)((u8*)mArcInfoBlock + mArcInfoBlock->file_entry_offset); diff --git a/src/JSystem/JKernel/JKRCompArchive.cpp b/src/JSystem/JKernel/JKRCompArchive.cpp index 7666cd8820..8a1577f592 100644 --- a/src/JSystem/JKernel/JKRCompArchive.cpp +++ b/src/JSystem/JKernel/JKRCompArchive.cpp @@ -88,7 +88,6 @@ bool JKRCompArchive::open(s32 entryNum) { JKRDvdToMainRam(entryNum, (u8 *)arcHeader, EXPAND_SWITCH_UNKNOWN1, 32, NULL, JKRDvdRipper::ALLOC_DIRECTION_FORWARD, 0, &mCompression, NULL); DCInvalidateRange(arcHeader, 32); - JKRSwapArcHeader(arcHeader); mSizeOfMemPart = arcHeader->field_0x14; mSizeOfAramPart = arcHeader->field_0x18; @@ -109,7 +108,6 @@ bool JKRCompArchive::open(s32 entryNum) { JKRDvdToMainRam(entryNum, (u8 *)mArcInfoBlock, EXPAND_SWITCH_UNKNOWN1, (uintptr_t)arcHeader->file_data_offset + mSizeOfMemPart, NULL, JKRDvdRipper::ALLOC_DIRECTION_FORWARD, 0x20, NULL, NULL); DCInvalidateRange(mArcInfoBlock, (uintptr_t)arcHeader->file_data_offset + mSizeOfMemPart); - JKRSwapArchiveMemory(mArcInfoBlock); field_0x64 = (uintptr_t)mArcInfoBlock + arcHeader->file_data_offset; if (mSizeOfAramPart != 0) { @@ -158,7 +156,6 @@ bool JKRCompArchive::open(s32 entryNum) { else { // arcHeader + 1 should lead to 0x20, which is the data after the header JKRHeap::copyMemory((u8 *)mArcInfoBlock, arcHeader + 1, (arcHeader->file_data_offset + mSizeOfMemPart)); - JKRSwapArchiveMemory(mArcInfoBlock); field_0x64 = (uintptr_t)mArcInfoBlock + arcHeader->file_data_offset; if (mSizeOfAramPart != 0) { mAramPart = (JKRAramBlock*)JKRAllocFromAram(mSizeOfAramPart, JKRAramHeap::HEAD); diff --git a/src/JSystem/JKernel/JKRDvdArchive.cpp b/src/JSystem/JKernel/JKRDvdArchive.cpp index 0bf2b5017a..ed88d791e7 100644 --- a/src/JSystem/JKernel/JKRDvdArchive.cpp +++ b/src/JSystem/JKernel/JKRDvdArchive.cpp @@ -76,7 +76,6 @@ bool JKRDvdArchive::open(s32 entryNum) { JKRDvdToMainRam(entryNum, (u8*)arcHeader, EXPAND_SWITCH_UNKNOWN1, sizeof(SArcHeader), NULL, JKRDvdRipper::ALLOC_DIRECTION_FORWARD, 0, &mCompression, NULL); DCInvalidateRange(arcHeader, sizeof(SArcHeader)); - JKRSwapArcHeader(arcHeader); int alignment; alignment = mMountDirection == MOUNT_DIRECTION_HEAD ? 0x20 : -0x20; @@ -91,7 +90,6 @@ bool JKRDvdArchive::open(s32 entryNum) { arcHeader->file_data_offset, NULL, JKRDvdRipper::ALLOC_DIRECTION_FORWARD, sizeof(SArcHeader), NULL, NULL); DCInvalidateRange(mArcInfoBlock, arcHeader->file_data_offset); - JKRSwapArchiveMemory(mArcInfoBlock); mNodes = (SDIDirEntry*)((intptr_t)&mArcInfoBlock->num_nodes + mArcInfoBlock->node_offset); mFiles = (SDIFileEntry*)((intptr_t)&mArcInfoBlock->num_nodes + mArcInfoBlock->file_entry_offset); diff --git a/src/JSystem/JKernel/JKRMemArchive.cpp b/src/JSystem/JKernel/JKRMemArchive.cpp index 1bc4b2877d..0c0ef4887c 100644 --- a/src/JSystem/JKernel/JKRMemArchive.cpp +++ b/src/JSystem/JKernel/JKRMemArchive.cpp @@ -89,10 +89,8 @@ bool JKRMemArchive::open(s32 entryNum, JKRArchive::EMountDirection mountDirectio mMountMode = UNKNOWN_MOUNT_MODE; } else { - JKRSwapArcHeader(mArcHeader); JUT_ASSERT(438, mArcHeader->signature == 'RARC'); mArcInfoBlock = (SArcDataInfo *)((u8 *)mArcHeader + mArcHeader->header_length); - JKRSwapArchiveMemory(mArcInfoBlock); mNodes = (SDIDirEntry *)((u8 *)&mArcInfoBlock->num_nodes + mArcInfoBlock->node_offset); mFiles = (SDIFileEntry *)((u8 *)&mArcInfoBlock->num_nodes + mArcInfoBlock->file_entry_offset); mStringTable = (char *)((u8 *)&mArcInfoBlock->num_nodes + mArcInfoBlock->string_table_offset); @@ -113,10 +111,8 @@ bool JKRMemArchive::open(s32 entryNum, JKRArchive::EMountDirection mountDirectio bool JKRMemArchive::open(void* buffer, u32 bufferSize, JKRMemBreakFlag flag) { mArcHeader = (SArcHeader *)buffer; - JKRSwapArcHeader(mArcHeader); JUT_ASSERT(491, mArcHeader->signature == 'RARC'); mArcInfoBlock = (SArcDataInfo *)((u8 *)mArcHeader + mArcHeader->header_length); - JKRSwapArchiveMemory(mArcInfoBlock); mNodes = (SDIDirEntry *)((u8 *)&mArcInfoBlock->num_nodes + mArcInfoBlock->node_offset); mFiles = (SDIFileEntry *)((u8 *)&mArcInfoBlock->num_nodes + mArcInfoBlock->file_entry_offset); mStringTable = (char *)((u8 *)&mArcInfoBlock->num_nodes + mArcInfoBlock->string_table_offset); From fcf1f4bed108d23bab4177906375e31947a0f7aa Mon Sep 17 00:00:00 2001 From: PJB3005 Date: Tue, 24 Feb 2026 16:56:49 +0100 Subject: [PATCH 37/46] Fix wrong forward declares (struct/class) Requires removing the now-matching symbols from jsystem_stubs.cpp --- include/JSystem/J3DGraphBase/J3DShape.h | 2 +- include/JSystem/JAWExtSystem/JAWExtSystem.h | 2 +- include/JSystem/JAWExtSystem/JAWWindow.h | 2 +- include/JSystem/JAWWinLib/JAWHioReceiver.h | 2 +- include/JSystem/JAudio2/JAIStreamMgr.h | 2 +- include/JSystem/JAudio2/JASAramStream.h | 2 +- include/JSystem/JAudio2/JASBank.h | 2 +- include/JSystem/JAudio2/JASTrack.h | 2 +- include/JSystem/JAudio2/JAUSectionHeap.h | 8 ++++---- include/JSystem/JAudio2/JAUSeqCollection.h | 4 ++-- include/JSystem/JAudio2/JAUSeqDataBlockMgr.h | 4 ++-- include/JSystem/JHostIO/JORReflexible.h | 4 ++-- include/JSystem/JParticle/JPABaseShape.h | 2 +- include/JSystem/JParticle/JPAChildShape.h | 2 +- include/JSystem/JParticle/JPADynamicsBlock.h | 2 +- include/JSystem/JParticle/JPAExTexShape.h | 2 +- include/JSystem/JParticle/JPAExtraShape.h | 2 +- include/JSystem/JParticle/JPAFieldBlock.h | 2 +- include/JSystem/JParticle/JPAResource.h | 2 +- .../JSystem/JStudio/JStudio_JPreviewer/control.h | 2 +- include/SSystem/SComponent/c_m3d.h | 2 +- include/Z2AudioLib/Z2LinkMgr.h | 2 +- include/Z2AudioLib/Z2SoundObject.h | 2 +- include/d/actor/d_a_b_yo.h | 2 +- include/d/d_event_data.h | 2 +- include/d/d_jcam_editor.h | 2 +- include/d/d_jpreviewer.h | 2 +- include/d/d_kankyo.h | 14 +++++++------- include/d/d_kankyo_wether.h | 2 +- include/d/d_msg_flow.h | 2 +- include/f_op/f_op_msg_mng.h | 2 +- include/m_Do/m_Do_ext.h | 4 ++-- src/dusk/jsystem_stubs.cpp | 9 --------- 33 files changed, 45 insertions(+), 54 deletions(-) diff --git a/include/JSystem/J3DGraphBase/J3DShape.h b/include/JSystem/J3DGraphBase/J3DShape.h index 151f4235ab..8687b2b794 100644 --- a/include/JSystem/J3DGraphBase/J3DShape.h +++ b/include/JSystem/J3DGraphBase/J3DShape.h @@ -100,7 +100,7 @@ protected: class J3DMaterial; class J3DVertexData; -class J3DDrawMtxData; +struct J3DDrawMtxData; enum J3DShpFlag { J3DShpFlag_Visible = 0x0001, diff --git a/include/JSystem/JAWExtSystem/JAWExtSystem.h b/include/JSystem/JAWExtSystem/JAWExtSystem.h index 609592d832..a0a9fce32b 100644 --- a/include/JSystem/JAWExtSystem/JAWExtSystem.h +++ b/include/JSystem/JAWExtSystem/JAWExtSystem.h @@ -5,7 +5,7 @@ #include "JSystem/JGadget/std-list.h" class JAWWindow; -class JUTGamePad; +struct JUTGamePad; namespace JAWExtSystem { BOOL registWindow(u32, JAWWindow*, int, int); diff --git a/include/JSystem/JAWExtSystem/JAWWindow.h b/include/JSystem/JAWExtSystem/JAWWindow.h index 6228c10376..7a570565cd 100644 --- a/include/JSystem/JAWExtSystem/JAWWindow.h +++ b/include/JSystem/JAWExtSystem/JAWWindow.h @@ -7,7 +7,7 @@ #include "JSystem/JGeometry.h" class JAWGraphContext; -class JUTGamePad; +struct JUTGamePad; class JUTPoint { public: diff --git a/include/JSystem/JAWWinLib/JAWHioReceiver.h b/include/JSystem/JAWWinLib/JAWHioReceiver.h index bf89b70040..a38506f6af 100644 --- a/include/JSystem/JAWWinLib/JAWHioReceiver.h +++ b/include/JSystem/JAWWinLib/JAWHioReceiver.h @@ -6,7 +6,7 @@ #include "JSystem/JHostIO/JHICommonMem.h" #include "JSystem/JAudio2/JAISound.h" -class JAISeqData; +struct JAISeqData; class JADHioReceiver : JHITag { public: diff --git a/include/JSystem/JAudio2/JAIStreamMgr.h b/include/JSystem/JAudio2/JAIStreamMgr.h index 3b2b9c7f42..7c8e68a852 100644 --- a/include/JSystem/JAudio2/JAIStreamMgr.h +++ b/include/JSystem/JAudio2/JAIStreamMgr.h @@ -6,7 +6,7 @@ #include "JSystem/JUtility/JUTAssert.h" class JAIStreamAramMgr; -class JAIStreamDataMgr; +struct JAIStreamDataMgr; /** * @ingroup jsystem-jaudio diff --git a/include/JSystem/JAudio2/JASAramStream.h b/include/JSystem/JAudio2/JASAramStream.h index f737f76cd3..385b47f627 100644 --- a/include/JSystem/JAudio2/JASAramStream.h +++ b/include/JSystem/JAudio2/JASAramStream.h @@ -8,7 +8,7 @@ class JASChannel; namespace JASDsp { - class TChannel; + struct TChannel; } /** diff --git a/include/JSystem/JAudio2/JASBank.h b/include/JSystem/JAudio2/JASBank.h index f99d245d89..9c2fae3dfa 100644 --- a/include/JSystem/JAudio2/JASBank.h +++ b/include/JSystem/JAudio2/JASBank.h @@ -8,7 +8,7 @@ class JASInstParam; class JASWaveBank; namespace JASDsp { - class TChannel; + struct TChannel; } /** diff --git a/include/JSystem/JAudio2/JASTrack.h b/include/JSystem/JAudio2/JASTrack.h index 4b0d3ea0fa..06a54ebec8 100644 --- a/include/JSystem/JAudio2/JASTrack.h +++ b/include/JSystem/JAudio2/JASTrack.h @@ -12,7 +12,7 @@ struct JASSoundParams; namespace JASDsp { - class TChannel; + struct TChannel; extern const u32 FILTER_MODE_IIR; }; diff --git a/include/JSystem/JAudio2/JAUSectionHeap.h b/include/JSystem/JAudio2/JAUSectionHeap.h index a7535500a4..b6aec38a31 100644 --- a/include/JSystem/JAudio2/JAUSectionHeap.h +++ b/include/JSystem/JAudio2/JAUSectionHeap.h @@ -6,10 +6,10 @@ #include "JSystem/JKernel/JKRDisposer.h" #include -class JAISeqData; -class JAISeqDataMgr; -class JAISeqDataUser; -class JAIStreamDataMgr; +struct JAISeqData; +struct JAISeqDataMgr; +struct JAISeqDataUser; +struct JAIStreamDataMgr; class JASVoiceBank; class JAUBankTableLink; class JAUDisposer_; diff --git a/include/JSystem/JAudio2/JAUSeqCollection.h b/include/JSystem/JAudio2/JAUSeqCollection.h index fae2688bed..37c5afc6d3 100644 --- a/include/JSystem/JAudio2/JAUSeqCollection.h +++ b/include/JSystem/JAudio2/JAUSeqCollection.h @@ -3,8 +3,8 @@ #include "JSystem/JAudio2/JAISeqDataMgr.h" -class JAISeqData; -class JAISeqDataRegion; +struct JAISeqData; +struct JAISeqDataRegion; /** * @ingroup jsystem-jaudio diff --git a/include/JSystem/JAudio2/JAUSeqDataBlockMgr.h b/include/JSystem/JAudio2/JAUSeqDataBlockMgr.h index aa77383a4f..5c04bf66d3 100644 --- a/include/JSystem/JAudio2/JAUSeqDataBlockMgr.h +++ b/include/JSystem/JAudio2/JAUSeqDataBlockMgr.h @@ -4,8 +4,8 @@ #include "JSystem/JAudio2/JAISeqDataMgr.h" #include "JSystem/JSupport/JSUList.h" -class JAISeqData; -class JAISeqDataUser; +struct JAISeqData; +struct JAISeqDataUser; class JKRArchive; /** diff --git a/include/JSystem/JHostIO/JORReflexible.h b/include/JSystem/JHostIO/JORReflexible.h index a0e0aeaaa3..6af8780515 100644 --- a/include/JSystem/JHostIO/JORReflexible.h +++ b/include/JSystem/JHostIO/JORReflexible.h @@ -33,8 +33,8 @@ struct JORNodeEvent : JOREvent { /* 0x00 */ u32 field_0x0; }; -struct JORMContext; -struct JORServer; +class JORMContext; +class JORServer; class JOREventListener { public: diff --git a/include/JSystem/JParticle/JPABaseShape.h b/include/JSystem/JParticle/JPABaseShape.h index 35dcbb83ad..d02ac150bc 100644 --- a/include/JSystem/JParticle/JPABaseShape.h +++ b/include/JSystem/JParticle/JPABaseShape.h @@ -3,7 +3,7 @@ #include -class JPAEmitterWorkData; +struct JPAEmitterWorkData; class JPABaseParticle; class JKRHeap; diff --git a/include/JSystem/JParticle/JPAChildShape.h b/include/JSystem/JParticle/JPAChildShape.h index 9cfc484460..ff22d2d69e 100644 --- a/include/JSystem/JParticle/JPAChildShape.h +++ b/include/JSystem/JParticle/JPAChildShape.h @@ -3,7 +3,7 @@ #include -class JPAEmitterWorkData; +struct JPAEmitterWorkData; class JPABaseParticle; /** diff --git a/include/JSystem/JParticle/JPADynamicsBlock.h b/include/JSystem/JParticle/JPADynamicsBlock.h index a27922913e..fa3e9012b3 100644 --- a/include/JSystem/JParticle/JPADynamicsBlock.h +++ b/include/JSystem/JParticle/JPADynamicsBlock.h @@ -5,7 +5,7 @@ #include -class JPAEmitterWorkData; +struct JPAEmitterWorkData; /** * @ingroup jsystem-jparticle diff --git a/include/JSystem/JParticle/JPAExTexShape.h b/include/JSystem/JParticle/JPAExTexShape.h index 43175517ec..610a516290 100644 --- a/include/JSystem/JParticle/JPAExTexShape.h +++ b/include/JSystem/JParticle/JPAExTexShape.h @@ -3,7 +3,7 @@ #include -class JPAEmitterWorkData; +struct JPAEmitterWorkData; /** * @ingroup jsystem-jparticle diff --git a/include/JSystem/JParticle/JPAExtraShape.h b/include/JSystem/JParticle/JPAExtraShape.h index 9e9f315ff5..613413711c 100644 --- a/include/JSystem/JParticle/JPAExtraShape.h +++ b/include/JSystem/JParticle/JPAExtraShape.h @@ -3,7 +3,7 @@ #include -class JPAEmitterWorkData; +struct JPAEmitterWorkData; class JPABaseParticle; /** diff --git a/include/JSystem/JParticle/JPAFieldBlock.h b/include/JSystem/JParticle/JPAFieldBlock.h index 56a2de1d15..59186439ab 100644 --- a/include/JSystem/JParticle/JPAFieldBlock.h +++ b/include/JSystem/JParticle/JPAFieldBlock.h @@ -5,7 +5,7 @@ #include class JKRHeap; -class JPAEmitterWorkData; +struct JPAEmitterWorkData; class JPABaseParticle; class JPAFieldBlock; diff --git a/include/JSystem/JParticle/JPAResource.h b/include/JSystem/JParticle/JPAResource.h index f07868208d..2d9aec49ef 100644 --- a/include/JSystem/JParticle/JPAResource.h +++ b/include/JSystem/JParticle/JPAResource.h @@ -4,7 +4,7 @@ #include class JKRHeap; -class JPAEmitterWorkData; +struct JPAEmitterWorkData; class JPABaseEmitter; class JPABaseParticle; diff --git a/include/JSystem/JStudio/JStudio_JPreviewer/control.h b/include/JSystem/JStudio/JStudio_JPreviewer/control.h index 5d19028ca9..0957620168 100644 --- a/include/JSystem/JStudio/JStudio_JPreviewer/control.h +++ b/include/JSystem/JStudio/JStudio_JPreviewer/control.h @@ -8,7 +8,7 @@ class J2DOrthoGraph; class JUTFont; -class JUTGamePad; +struct JUTGamePad; namespace JStudio { class TControl; diff --git a/include/SSystem/SComponent/c_m3d.h b/include/SSystem/SComponent/c_m3d.h index 12303b9a65..58f0e28753 100644 --- a/include/SSystem/SComponent/c_m3d.h +++ b/include/SSystem/SComponent/c_m3d.h @@ -12,7 +12,7 @@ class cM3dGPla; class cM3dGSph; class cM3dGTri; class csXyz; -class cXyz; +struct cXyz; struct cM3d_Range { /* 0x0 */ f32 mMin; diff --git a/include/Z2AudioLib/Z2LinkMgr.h b/include/Z2AudioLib/Z2LinkMgr.h index 7432a2bc82..cf05ed14d9 100644 --- a/include/Z2AudioLib/Z2LinkMgr.h +++ b/include/Z2AudioLib/Z2LinkMgr.h @@ -61,7 +61,7 @@ public: static Z2CreatureLink* getLink() { return mLinkPtr; } friend class Z2LinkSoundStarter; - friend class Z2RideSoundStarter; + friend struct Z2RideSoundStarter; private: /* 0x90 Z2LinkSoundStarter */ diff --git a/include/Z2AudioLib/Z2SoundObject.h b/include/Z2AudioLib/Z2SoundObject.h index 46256aeda7..ca4b69a520 100644 --- a/include/Z2AudioLib/Z2SoundObject.h +++ b/include/Z2AudioLib/Z2SoundObject.h @@ -4,7 +4,7 @@ #include "Z2AudioLib/Z2SoundHandles.h" #include "JSystem/JAudio2/JAUSoundAnimator.h" -class Z2SoundStarter; +struct Z2SoundStarter; class Z2SoundObjBase : public Z2SoundHandles #if DEBUG diff --git a/include/d/actor/d_a_b_yo.h b/include/d/actor/d_a_b_yo.h index b4cef6d648..a133d364d6 100644 --- a/include/d/actor/d_a_b_yo.h +++ b/include/d/actor/d_a_b_yo.h @@ -8,7 +8,7 @@ #include "d/d_bg_s_acch.h" class dBgW; -class msg_class; +struct msg_class; /** * @ingroup actors-enemies diff --git a/include/d/d_event_data.h b/include/d/d_event_data.h index 17549363c1..22a835ec24 100644 --- a/include/d/d_event_data.h +++ b/include/d/d_event_data.h @@ -4,7 +4,7 @@ #include "global.h" #include "f_pc/f_pc_base.h" -class msg_class; +struct msg_class; struct event_binary_data_header { /* 0x00 */ u32 eventTop; // offset to Event chunk diff --git a/include/d/d_jcam_editor.h b/include/d/d_jcam_editor.h index 87f0c890b0..3662f1c956 100644 --- a/include/d/d_jcam_editor.h +++ b/include/d/d_jcam_editor.h @@ -6,7 +6,7 @@ #include "JSystem/JUtility/JUTResFont.h" #include "JSystem/JKernel/JKRExpHeap.h" -class JUTGamePad; +struct JUTGamePad; class dJcame_c { public: diff --git a/include/d/d_jpreviewer.h b/include/d/d_jpreviewer.h index b34880c1c0..9971fa6674 100644 --- a/include/d/d_jpreviewer.h +++ b/include/d/d_jpreviewer.h @@ -10,7 +10,7 @@ namespace JStudio { class J2DOrthoGraph; class JKRExpHeap; -class JUTGamePad; +struct JUTGamePad; class JUTResFont; class tParse_; diff --git a/include/d/d_kankyo.h b/include/d/d_kankyo.h index 277e6d6dbc..3c81f08d10 100644 --- a/include/d/d_kankyo.h +++ b/include/d/d_kankyo.h @@ -12,7 +12,7 @@ class JPABaseEmitter; class cBgS_PolyInfo; -class color_RGB_class; +struct color_RGB_class; struct LIGHT_INFLUENCE { /* 0x00 */ cXyz mPosition; @@ -148,12 +148,12 @@ struct LightStatus { }; // Size: 0xE8 class fopAc_ac_c; -class dKyd_lightSchejule; -class stage_palette_info_class; -class stage_pselect_info_class; -class stage_envr_info_class; -class stage_vrboxcol_info_class; -class stage_plight_info_class; +struct dKyd_lightSchejule; +struct stage_palette_info_class; +struct stage_pselect_info_class; +struct stage_envr_info_class; +struct stage_vrboxcol_info_class; +struct stage_plight_info_class; class kytag08_class; struct dKy_pol_arg_struct { diff --git a/include/d/d_kankyo_wether.h b/include/d/d_kankyo_wether.h index 14a8d00657..31aa1fd8e3 100644 --- a/include/d/d_kankyo_wether.h +++ b/include/d/d_kankyo_wether.h @@ -5,7 +5,7 @@ #include "SSystem/SComponent/c_sxyz.h" #include "SSystem/SComponent/c_xyz.h" -class WIND_INFLUENCE; +struct WIND_INFLUENCE; void dKyw_wether_draw(); void dKyw_wether_delete(); diff --git a/include/d/d_msg_flow.h b/include/d/d_msg_flow.h index 89037d78cb..8f242f3eec 100644 --- a/include/d/d_msg_flow.h +++ b/include/d/d_msg_flow.h @@ -16,7 +16,7 @@ enum { }; class fopAc_ac_c; -class msg_class; +struct msg_class; // all mesg_flow_node structs members might be wrong struct mesg_flow_node { diff --git a/include/f_op/f_op_msg_mng.h b/include/f_op/f_op_msg_mng.h index 214d38da8e..9bb8bc0ff3 100644 --- a/include/f_op/f_op_msg_mng.h +++ b/include/f_op/f_op_msg_mng.h @@ -8,7 +8,7 @@ class JKRExpHeap; class JKRHeap; class fopAc_ac_c; -class msg_class; +struct msg_class; struct msg_process_profile_definition { /* 0x00 */ leaf_process_profile_definition base; diff --git a/include/m_Do/m_Do_ext.h b/include/m_Do/m_Do_ext.h index 35e81f0059..4478098064 100644 --- a/include/m_Do/m_Do_ext.h +++ b/include/m_Do/m_Do_ext.h @@ -221,7 +221,7 @@ private: /* 0x14 */ J3DAnmCluster* mpAnm; }; -class J3DTransformInfo; +struct J3DTransformInfo; class mDoExt_AnmRatioPack { public: @@ -832,7 +832,7 @@ intptr_t mDoExt_getSafeZeldaHeapSize(); JKRHeap* mDoExt_createHostIOHeap(u32, JKRHeap*); #endif -struct JUTFont; +class JUTFont; JUTFont* mDoExt_getMesgFont(); JUTFont* mDoExt_getSubFont(); JUTFont* mDoExt_getRubyFont(); diff --git a/src/dusk/jsystem_stubs.cpp b/src/dusk/jsystem_stubs.cpp index 3a1b18fbab..54f870ba56 100644 --- a/src/dusk/jsystem_stubs.cpp +++ b/src/dusk/jsystem_stubs.cpp @@ -5,10 +5,6 @@ #pragma mark J3DShapeTable #include "JSystem/J3DGraphAnimator/J3DShapeTable.h" -void J3DShapeTable::initShapeNodes(J3DDrawMtxData* mtxData, J3DVertexData* vtxData) { - puts("J3DShapeTable::initShapeNodes is a stub"); -} - // JAISe::JAISeMgr_startID_, JAISeq::JAISeqMgr_startID_, JAIStream::JAIStreamMgr_startID_ // are compiled from their real source files (JAISe.obj, JAISeq.obj, JAIStream.obj) @@ -25,11 +21,6 @@ JAUSoundNameTable* JAUSection::newSoundNameTable(void const* data, u32 size, boo return nullptr; } -JAIStreamDataMgr* JAUSection::newStreamFileTable(void const* data, bool flag) { - puts("JAUSection::newStreamFileTable is a stub"); - return nullptr; -} - #pragma mark JASHeap #include "JSystem/JAudio2/JASHeapCtrl.h" From 6d47b437669edd22265498e8da1fea85f5616f5d Mon Sep 17 00:00:00 2001 From: PJB3005 Date: Tue, 24 Feb 2026 18:16:45 +0100 Subject: [PATCH 38/46] Fix JKRExpHeap on 64 bit --- src/JSystem/JKernel/JKRExpHeap.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/JSystem/JKernel/JKRExpHeap.cpp b/src/JSystem/JKernel/JKRExpHeap.cpp index 1c6d16c1a9..a4f2bbad8c 100644 --- a/src/JSystem/JKernel/JKRExpHeap.cpp +++ b/src/JSystem/JKernel/JKRExpHeap.cpp @@ -373,7 +373,7 @@ void* JKRExpHeap::allocFromTail(u32 size, int align) { CMemBlock* foundBlock = NULL; CMemBlock* newBlock = NULL; u32 usedSize; - u32 start; + uintptr_t start; for (CMemBlock* block = mTailFreeList; block; block = block->mPrev) { start = ALIGN_PREV((uintptr_t)block->getContent() + block->size - size, align); From e2dacba2621e90c8728b8617da37d6f8de4869b7 Mon Sep 17 00:00:00 2001 From: PJB3005 Date: Tue, 24 Feb 2026 19:55:15 +0100 Subject: [PATCH 39/46] Fix JKRArchive on 64-bit They store the data address in the same struct that's directly loaded from archive files. This means it's impossible to expand to 64-bit directly, and instead we need to allocate the data pointers in a separate array. --- include/JSystem/JKernel/JKRArchive.h | 24 +++++++++++++ include/JSystem/JKernel/JKRCompArchive.h | 2 +- src/JSystem/JKernel/JKRAramArchive.cpp | 17 ++++++---- src/JSystem/JKernel/JKRArchivePri.cpp | 43 ++++++++++++++++++++++-- src/JSystem/JKernel/JKRArchivePub.cpp | 10 +++--- src/JSystem/JKernel/JKRCompArchive.cpp | 31 ++++++++++------- src/JSystem/JKernel/JKRDvdArchive.cpp | 18 ++++++---- src/JSystem/JKernel/JKRMemArchive.cpp | 25 +++++++++----- 8 files changed, 127 insertions(+), 43 deletions(-) diff --git a/include/JSystem/JKernel/JKRArchive.h b/include/JSystem/JKernel/JKRArchive.h index 2a2212efb5..c9cdd97f72 100644 --- a/include/JSystem/JKernel/JKRArchive.h +++ b/include/JSystem/JKernel/JKRArchive.h @@ -51,6 +51,12 @@ inline u16 read_big_endian_u16(void* ptr) { extern u32 sCurrentDirID__10JKRArchive; // JKRArchive::sCurrentDirID +#if TARGET_PC +#define JKAR_DATA(entry) getFileDataPointer(entry->index) +#else +#define JKAR_DATA(entry) entry->data +#endif + /** * @ingroup jsystem-jkernel * @@ -78,7 +84,16 @@ public: BE(u32) type_flags_and_name_offset; BE(u32) data_offset; BE(u32) data_size; +#if TARGET_PC + // Yes, they store the data pointer in the datastructure that's directly loaded from + // archive files. + // We can't expand this struct to fit a 64-bit pointer, so instead + // we'll need to store this data in a separate array. + // Store the *index* of this entry (!= file_id), so we can look up the real pointer easily. + u32 index; +#else void* data; +#endif u32 getNameOffset() const { return type_flags_and_name_offset & 0xFFFFFF; } u16 getNameHash() const { return name_hash; } @@ -131,6 +146,11 @@ protected: JKRArchive(); JKRArchive(s32, EMountMode); +#if TARGET_PC + void*& getFileDataPointer(int idx) const; + void initFileDataPointers(); +#endif + public: bool getDirEntry(SDirEntry*, u32) const; void* getIdxResource(u32); @@ -189,6 +209,10 @@ public: /* 0x50 */ s32* mExpandedSize; /* 0x54 */ const char* mStringTable; +#if TARGET_PC + void** mFileData; +#endif + protected: /* 0x58 */ u32 field_0x58; /* 0x5C */ JKRCompression mCompression; diff --git a/include/JSystem/JKernel/JKRCompArchive.h b/include/JSystem/JKernel/JKRCompArchive.h index d5eb60448b..dd6dc5e1fc 100644 --- a/include/JSystem/JKernel/JKRCompArchive.h +++ b/include/JSystem/JKernel/JKRCompArchive.h @@ -28,7 +28,7 @@ public: private: /* 0x00 */ // vtable /* 0x04 */ // JKRArchive - /* 0x64 */ int field_0x64; + /* 0x64 */ intptr_t field_0x64; /* 0x68 */ JKRAramBlock* mAramPart; /* 0x6C */ int field_0x6c; /* 0x70 */ JKRDvdFile* mDvdFile; diff --git a/src/JSystem/JKernel/JKRAramArchive.cpp b/src/JSystem/JKernel/JKRAramArchive.cpp index 811978caa0..f8818c7eca 100644 --- a/src/JSystem/JKernel/JKRAramArchive.cpp +++ b/src/JSystem/JKernel/JKRAramArchive.cpp @@ -31,8 +31,8 @@ JKRAramArchive::~JKRAramArchive() { if (mArcInfoBlock != NULL) { SDIFileEntry* entry = mFiles; for (int i = 0; i < mArcInfoBlock->num_file_entries; i++) { - if (entry->data != NULL) { - JKRFreeToHeap(mHeap, entry->data); + if (JKAR_DATA(entry) != NULL) { + JKRFreeToHeap(mHeap, JKAR_DATA(entry)); } entry++; } @@ -135,6 +135,9 @@ bool JKRAramArchive::open(s32 entryNum) { mFiles = (SDIFileEntry*)((u8*)mArcInfoBlock + mArcInfoBlock->file_entry_offset); mStringTable = (char*)((u8*)mArcInfoBlock + mArcInfoBlock->string_table_offset); mExpandedSize = NULL; +#if TARGET_PC + initFileDataPointers(); +#endif u8 compressedFiles = 0; // maybe a check for if the last file is compressed? @@ -199,7 +202,7 @@ void* JKRAramArchive::fetchResource(SDIFileEntry* pEntry, u32* pOutSize) { } JKRCompression compression = JKRConvertAttrToCompressionType(u8(pEntry->type_flags_and_name_offset >> 24)); - if (pEntry->data == NULL) { + if (JKAR_DATA(pEntry) == NULL) { u32 size = JKRAramArchive::fetchResource_subroutine( pEntry->data_offset + mBlock->getAddress(), pEntry->data_size, mHeap, compression, &outBuf); @@ -209,7 +212,7 @@ void* JKRAramArchive::fetchResource(SDIFileEntry* pEntry, u32* pOutSize) { return NULL; } - pEntry->data = outBuf; + JKAR_DATA(pEntry) = outBuf; if (compression == COMPRESSION_YAZ0) { this->setExpandSize(pEntry, *pOutSize); } @@ -221,7 +224,7 @@ void* JKRAramArchive::fetchResource(SDIFileEntry* pEntry, u32* pOutSize) { } } - return pEntry->data; + return JKAR_DATA(pEntry); } void* JKRAramArchive::fetchResource(void* buffer, u32 bufferSize, SDIFileEntry* pEntry, @@ -233,7 +236,7 @@ void* JKRAramArchive::fetchResource(void* buffer, u32 bufferSize, SDIFileEntry* } JKRCompression compression = JKRConvertAttrToCompressionType(u8(pEntry->type_flags_and_name_offset >> 24)); - if (pEntry->data == NULL) { + if (JKAR_DATA(pEntry) == NULL) { bufferSize = (s32)ALIGN_PREV(bufferSize, 0x20); size = JKRAramArchive::fetchResource_subroutine(pEntry->data_offset + mBlock->getAddress(), size, (u8*)buffer, bufferSize, compression); @@ -247,7 +250,7 @@ void* JKRAramArchive::fetchResource(void* buffer, u32 bufferSize, SDIFileEntry* if (size > bufferSize) { size = bufferSize; } - JKRHeap::copyMemory(buffer, pEntry->data, size); + JKRHeap::copyMemory(buffer, JKAR_DATA(pEntry), size); } if (resourceSize != NULL) { diff --git a/src/JSystem/JKernel/JKRArchivePri.cpp b/src/JSystem/JKernel/JKRArchivePri.cpp index 375e297c37..21ad688a44 100644 --- a/src/JSystem/JKernel/JKRArchivePri.cpp +++ b/src/JSystem/JKernel/JKRArchivePri.cpp @@ -5,6 +5,10 @@ #include #include +#if TARGET_PC +#include +#endif + u32 JKRArchive::sCurrentDirID; JKRArchive::JKRArchive() { @@ -30,7 +34,14 @@ JKRArchive::JKRArchive(s32 entryNumber, JKRArchive::EMountMode mountMode) { } } -JKRArchive::~JKRArchive() {} +JKRArchive::~JKRArchive() { +#if TARGET_PC + if (mFileData != nullptr) { + mHeap->free(mFileData); + mFileData = nullptr; + } +#endif +} bool JKRArchive::isSameName(JKRArchive::CArcName& name, u32 nameOffset, u16 nameHash) const { u16 hash = name.getHash(); @@ -143,7 +154,7 @@ JKRArchive::SDIFileEntry* JKRArchive::findNameResource(const char* name) const { JKRArchive::SDIFileEntry* JKRArchive::findPtrResource(const void* resource) const { SDIFileEntry* fileEntry = mFiles; for (int i = 0; i < mArcInfoBlock->num_file_entries; i++) { - if (fileEntry->data == resource) { + if (JKAR_DATA(fileEntry) == resource) { return fileEntry; } fileEntry++; @@ -225,3 +236,31 @@ u32 JKRArchive::getExpandSize(SDIFileEntry* fileEntry) const { return mExpandedSize[index]; } + +#if TARGET_PC +void*& JKRArchive::getFileDataPointer(int idx) const { + assert(mArcInfoBlock); + assert(idx < mArcInfoBlock->num_file_entries); + assert(mFileData); + + return mFileData[idx]; +} + +void JKRArchive::initFileDataPointers() { + assert(mArcInfoBlock); + assert(mFiles); + + if (mFileData != nullptr) { + mHeap->free(mFileData); + } + + mFileData = static_cast( + mHeap->alloc(mArcInfoBlock->num_file_entries * sizeof(void*), alignof(void*))); + + memset(mFileData, 0, mArcInfoBlock->num_file_entries * sizeof(void*)); + + for (u32 i = 0; i < mArcInfoBlock->num_file_entries; i++) { + mFiles[i].index = i; + } +} +#endif \ No newline at end of file diff --git a/src/JSystem/JKernel/JKRArchivePub.cpp b/src/JSystem/JKernel/JKRArchivePub.cpp index 1d7f2accba..912fb16c6b 100644 --- a/src/JSystem/JKernel/JKRArchivePub.cpp +++ b/src/JSystem/JKernel/JKRArchivePub.cpp @@ -248,9 +248,9 @@ void JKRArchive::removeResourceAll() { if (mArcInfoBlock && mMountMode != MOUNT_MEM) { SDIFileEntry* fileEntry = mFiles; for (int i = 0; i < mArcInfoBlock->num_file_entries; i++) { - if (fileEntry->data) { - JKRFreeToHeap(mHeap, fileEntry->data); - fileEntry->data = NULL; + if (JKAR_DATA(fileEntry)) { + JKRFreeToHeap(mHeap, JKAR_DATA(fileEntry)); + JKAR_DATA(fileEntry) = NULL; } fileEntry++; } @@ -263,7 +263,7 @@ bool JKRArchive::removeResource(void* resource) { if (fileEntry == NULL) return false; - fileEntry->data = NULL; + JKAR_DATA(fileEntry) = NULL; JKRFreeToHeap(mHeap, resource); return true; } @@ -274,7 +274,7 @@ bool JKRArchive::detachResource(void* resource) { if (fileEntry == NULL) return false; - fileEntry->data = NULL; + JKAR_DATA(fileEntry) = NULL; return true; } diff --git a/src/JSystem/JKernel/JKRCompArchive.cpp b/src/JSystem/JKernel/JKRCompArchive.cpp index 8a1577f592..7c5217684b 100644 --- a/src/JSystem/JKernel/JKRCompArchive.cpp +++ b/src/JSystem/JKernel/JKRCompArchive.cpp @@ -33,8 +33,8 @@ JKRCompArchive::~JKRCompArchive() { SDIFileEntry* file = mFiles; for (int i = 0; i < mArcInfoBlock->num_file_entries; i++) { u32 flags = file->type_flags_and_name_offset >> 24; - if ((flags & 16) == 0 && file->data != NULL) { - JKRFreeToHeap(mHeap, file->data); + if ((flags & 16) == 0 && JKAR_DATA(file) != NULL) { + JKRFreeToHeap(mHeap, JKAR_DATA(file)); } file++; @@ -176,6 +176,11 @@ bool JKRCompArchive::open(s32 entryNum) { field_0x6c = arcHeader->header_length + arcHeader->file_data_offset; break; } + +#if TARGET_PC + initFileDataPointers(); +#endif + mExpandedSize = NULL; u8 compressedFiles = 0; SDIFileEntry *fileEntry = mFiles; @@ -229,17 +234,17 @@ void* JKRCompArchive::fetchResource(SDIFileEntry *fileEntry, u32 *pSize) { pSize = &ptrSize; // this makes barely any sense but ok } - if (fileEntry->data == NULL) { + if (JKAR_DATA(fileEntry) == NULL) { u32 flag = fileEntry->type_flags_and_name_offset >> 0x18; if(flag & 0x10) { - fileEntry->data = (void *)(field_0x64 + fileEntry->data_offset); + JKAR_DATA(fileEntry) = (void *)(field_0x64 + fileEntry->data_offset); *pSize = size; } else if (flag & 0x20) { u8 *data; size = JKRAramArchive::fetchResource_subroutine(fileEntry->data_offset + mAramPart->getAddress() - mSizeOfMemPart, size, mHeap, compression, &data); *pSize = size; - fileEntry->data = data; + JKAR_DATA(fileEntry) = data; if(compression == COMPRESSION_YAZ0) { setExpandSize(fileEntry, *pSize); } @@ -250,7 +255,7 @@ void* JKRCompArchive::fetchResource(SDIFileEntry *fileEntry, u32 *pSize) { if (pSize != NULL) { *pSize = resSize; } - fileEntry->data = data; + JKAR_DATA(fileEntry) = data; if (compression == COMPRESSION_YAZ0) { setExpandSize(fileEntry, *pSize); } @@ -261,7 +266,7 @@ void* JKRCompArchive::fetchResource(SDIFileEntry *fileEntry, u32 *pSize) { *pSize = fileEntry->data_size; } } - return fileEntry->data; + return JKAR_DATA(fileEntry); } @@ -274,7 +279,7 @@ void *JKRCompArchive::fetchResource(void *data, u32 compressedSize, SDIFileEntry u32 fileFlag = fileEntry->type_flags_and_name_offset >> 0x18; int compression = JKRConvertAttrToCompressionType(u8(fileFlag)); - if(fileEntry->data != NULL) { + if(JKAR_DATA(fileEntry) != NULL) { if (compression == COMPRESSION_YAZ0) { u32 expandSize = getExpandSize(fileEntry); if (expandSize != 0) { @@ -286,7 +291,7 @@ void *JKRCompArchive::fetchResource(void *data, u32 compressedSize, SDIFileEntry fileSize = compressedSize; } - JKRHeap::copyMemory(data, fileEntry->data, fileSize); + JKRHeap::copyMemory(data, JKAR_DATA(fileEntry), fileSize); size = fileSize; } else { @@ -318,12 +323,12 @@ void JKRCompArchive::removeResourceAll() { for (int i = 0; i < mArcInfoBlock->num_file_entries; i++) { int tmp = fileEntry->type_flags_and_name_offset >> 0x18; - if (fileEntry->data != NULL) { + if (JKAR_DATA(fileEntry) != NULL) { if (!(tmp & 0x10)) { - JKRFreeToHeap(mHeap, fileEntry->data); + JKRFreeToHeap(mHeap, JKAR_DATA(fileEntry)); } - fileEntry->data = NULL; + JKAR_DATA(fileEntry) = NULL; } } fileEntry++; @@ -340,7 +345,7 @@ bool JKRCompArchive::removeResource(void* resource) { JKRFreeToHeap(mHeap, resource); } - fileEntry->data = NULL; + JKAR_DATA(fileEntry) = NULL; return true; } diff --git a/src/JSystem/JKernel/JKRDvdArchive.cpp b/src/JSystem/JKernel/JKRDvdArchive.cpp index ed88d791e7..dd4d504868 100644 --- a/src/JSystem/JKernel/JKRDvdArchive.cpp +++ b/src/JSystem/JKernel/JKRDvdArchive.cpp @@ -29,8 +29,8 @@ JKRDvdArchive::~JKRDvdArchive() { SDIFileEntry* fileEntry = mFiles; int i = 0; for (; i < mArcInfoBlock->num_file_entries; i++) { - if (fileEntry->data) { - JKRFreeToHeap(mHeap, fileEntry->data); + if (JKAR_DATA(fileEntry)) { + JKRFreeToHeap(mHeap, JKAR_DATA(fileEntry)); } fileEntry++; } @@ -96,6 +96,10 @@ bool JKRDvdArchive::open(s32 entryNum) { mStringTable = (char*)((intptr_t)&mArcInfoBlock->num_nodes + mArcInfoBlock->string_table_offset); mExpandedSize = NULL; +#if TARGET_PC + initFileDataPointers(); +#endif + u8 useCompression; useCompression = 0; SDIFileEntry* fileEntry; @@ -148,7 +152,7 @@ void* JKRDvdArchive::fetchResource(SDIFileEntry* fileEntry, u32* returnSize) { } JKRCompression fileCompression = JKRConvertAttrToCompressionType(u8(fileEntry->type_flags_and_name_offset >> 24)); - if (!fileEntry->data) { + if (!JKAR_DATA(fileEntry)) { u8* resourcePtr; u32 resourceSize = fetchResource_subroutine( mEntryNum, mDataOffset + fileEntry->data_offset, fileEntry->data_size, mHeap, @@ -158,7 +162,7 @@ void* JKRDvdArchive::fetchResource(SDIFileEntry* fileEntry, u32* returnSize) { return NULL; } - fileEntry->data = resourcePtr; + JKAR_DATA(fileEntry) = resourcePtr; if (fileCompression == COMPRESSION_YAZ0) { setExpandSize(fileEntry, *returnSize); } @@ -170,7 +174,7 @@ void* JKRDvdArchive::fetchResource(SDIFileEntry* fileEntry, u32* returnSize) { } } - return fileEntry->data; + return JKAR_DATA(fileEntry); } void* JKRDvdArchive::fetchResource(void* buffer, u32 bufferSize, SDIFileEntry* fileEntry, @@ -179,7 +183,7 @@ void* JKRDvdArchive::fetchResource(void* buffer, u32 bufferSize, SDIFileEntry* f u32 size = fileEntry->data_size; JKRCompression fileCompression = JKRConvertAttrToCompressionType(u8(fileEntry->type_flags_and_name_offset >> 24)); - if (!fileEntry->data) { + if (!JKAR_DATA(fileEntry)) { bufferSize = (s32)ALIGN_PREV(bufferSize, 0x20); size = fetchResource_subroutine(mEntryNum, mDataOffset + fileEntry->data_offset, fileEntry->data_size, (u8*)buffer, bufferSize, fileCompression, @@ -196,7 +200,7 @@ void* JKRDvdArchive::fetchResource(void* buffer, u32 bufferSize, SDIFileEntry* f size = bufferSize; } - JKRHeap::copyMemory(buffer, fileEntry->data, size); + JKRHeap::copyMemory(buffer, JKAR_DATA(fileEntry), size); } if (returnSize) { diff --git a/src/JSystem/JKernel/JKRMemArchive.cpp b/src/JSystem/JKernel/JKRMemArchive.cpp index 0c0ef4887c..9a594cd6f8 100644 --- a/src/JSystem/JKernel/JKRMemArchive.cpp +++ b/src/JSystem/JKernel/JKRMemArchive.cpp @@ -95,6 +95,10 @@ bool JKRMemArchive::open(s32 entryNum, JKRArchive::EMountDirection mountDirectio mFiles = (SDIFileEntry *)((u8 *)&mArcInfoBlock->num_nodes + mArcInfoBlock->file_entry_offset); mStringTable = (char *)((u8 *)&mArcInfoBlock->num_nodes + mArcInfoBlock->string_table_offset); +#if TARGET_PC + initFileDataPointers(); +#endif + mArchiveData = (u8 *)((uintptr_t)mArcHeader + mArcHeader->header_length + mArcHeader->file_data_offset); mIsOpen = true; @@ -120,20 +124,25 @@ bool JKRMemArchive::open(void* buffer, u32 bufferSize, JKRMemBreakFlag flag) { mIsOpen = (flag == JKRMEMBREAK_FLAG_UNKNOWN1) ? true : false; // mIsOpen might be u8 mHeap = JKRHeap::findFromRoot(buffer); mCompression = COMPRESSION_NONE; + +#if TARGET_PC + initFileDataPointers(); +#endif + return true; } void* JKRMemArchive::fetchResource(SDIFileEntry* fileEntry, u32* resourceSize) { JUT_ASSERT(555, isMounted()); - if (!fileEntry->data) { - fileEntry->data = mArchiveData + fileEntry->data_offset; + if (!JKAR_DATA(fileEntry)) { + JKAR_DATA(fileEntry) = mArchiveData + fileEntry->data_offset; } if (resourceSize) { *resourceSize = fileEntry->data_size; } - return fileEntry->data; + return JKAR_DATA(fileEntry); } void* JKRMemArchive::fetchResource(void* buffer, u32 bufferSize, SDIFileEntry* fileEntry, @@ -144,8 +153,8 @@ void* JKRMemArchive::fetchResource(void* buffer, u32 bufferSize, SDIFileEntry* f srcLength = bufferSize; } - if (fileEntry->data != NULL) { - memcpy(buffer, fileEntry->data, srcLength); + if (JKAR_DATA(fileEntry) != NULL) { + memcpy(buffer, JKAR_DATA(fileEntry), srcLength); } else { u8 flags = fileEntry->type_flags_and_name_offset >> 24; JKRCompression compression = JKRConvertAttrToCompressionType(flags); @@ -172,8 +181,8 @@ void JKRMemArchive::removeResourceAll(void) { // first fileEntry will clear/remove the resource data. SDIFileEntry* fileEntry = mFiles; for (int i = 0; i < mArcInfoBlock->num_file_entries; i++) { - if (fileEntry->data) { - fileEntry->data = NULL; + if (JKAR_DATA(fileEntry)) { + JKAR_DATA(fileEntry) = NULL; } } fileEntry++; @@ -186,7 +195,7 @@ bool JKRMemArchive::removeResource(void* resource) { if (!fileEntry) return false; - fileEntry->data = NULL; + JKAR_DATA(fileEntry) = NULL; return true; } From 2b78bb33753ce9b2d994676b1d8efff23675761f Mon Sep 17 00:00:00 2001 From: Lurs <2795933+Lurs@users.noreply.github.com> Date: Tue, 24 Feb 2026 20:42:45 +0100 Subject: [PATCH 40/46] Changed loading for already static loaded .rel files. Added gamepad init --- src/c/c_dylink.cpp | 57 ++++++++++++++++++++++++++++++++++++++++++ src/dusk/stubs.cpp | 6 +++++ src/m_Do/m_Do_main.cpp | 1 + 3 files changed, 64 insertions(+) diff --git a/src/c/c_dylink.cpp b/src/c/c_dylink.cpp index 37be56f20b..fdf3e67ea2 100644 --- a/src/c/c_dylink.cpp +++ b/src/c/c_dylink.cpp @@ -19,7 +19,9 @@ static DynamicNameTableEntry const DynamicNameTable[] = { {PROC_ALLDIE, "d_a_alldie"}, +#ifndef TARGET_PC {PROC_Obj_Swpush, "d_a_obj_swpush"}, +#endif // TARGET_PC {PROC_Obj_Swpush2, "d_a_obj_swpush2"}, {PROC_Obj_Swpush5, "d_a_obj_swpush5"}, {PROC_Tag_Gstart, "d_a_tag_gstart"}, @@ -28,7 +30,9 @@ static DynamicNameTableEntry const DynamicNameTable[] = { #endif {PROC_Obj_Lv6ElevtA, "d_a_obj_lv6elevta"}, {PROC_OBJ_SO, "d_a_obj_so"}, +#ifndef TARGET_PC {PROC_Obj_Movebox, "d_a_obj_movebox"}, +#endif // TARGET_PC {PROC_Obj_SwTurn, "d_a_obj_swturn"}, {PROC_Obj_Lv6SwTurn, "d_a_obj_lv6swturn"}, {PROC_OBJ_SEKIZOA, "d_a_obj_sekizoa"}, @@ -36,7 +40,9 @@ static DynamicNameTableEntry const DynamicNameTable[] = { {PROC_TAG_GRA, "d_a_tag_gra"}, {PROC_TAG_YAMI, "d_a_tag_yami"}, {PROC_Obj_Ladder, "d_a_obj_ladder"}, +#ifndef TARGET_PC {PROC_OBJ_BEF, "d_a_obj_brakeeff"}, +#endif // TARGET_PC {PROC_OBJ_FMOBJ, "d_a_obj_fmobj"}, {PROC_OBJ_LBOX, "d_a_obj_lbox"}, {PROC_OBJ_WEB0, "d_a_obj_web0"}, @@ -221,7 +227,9 @@ static DynamicNameTableEntry const DynamicNameTable[] = { {PROC_Obj_SZbridge, "d_a_obj_szbridge"}, {PROC_Obj_KakarikoBrg, "d_a_obj_warp_kbrg"}, {PROC_Obj_OrdinBrg, "d_a_obj_warp_obrg"}, +#ifndef TARGET_PC {PROC_Obj_BurnBox, "d_a_obj_burnbox"}, +#endif // TARGET_PC {PROC_Obj_KJgjs, "d_a_obj_kjgjs"}, {PROC_OBJ_IHASI, "d_a_obj_ihasi"}, {PROC_Obj_IceBlock, "d_a_obj_iceblock"}, @@ -233,7 +241,9 @@ static DynamicNameTableEntry const DynamicNameTable[] = { {PROC_NPC_ZRA, "d_a_npc_zra"}, {PROC_Obj_Chandelier, "d_a_obj_chandelier"}, {PROC_Obj_Stopper2, "d_a_obj_stopper2"}, +#ifndef TARGET_PC {PROC_DOOR20, "d_a_door_shutter"}, +#endif // TARGET_PC {PROC_Tag_Hinit, "d_a_tag_hinit"}, {PROC_Tag_Hjump, "d_a_tag_hjump"}, {PROC_Tag_AJnot, "d_a_tag_ajnot"}, @@ -241,9 +251,13 @@ static DynamicNameTableEntry const DynamicNameTable[] = { {PROC_CANOE, "d_a_canoe"}, {PROC_HORSE, "d_a_horse"}, {PROC_E_WB, "d_a_e_wb"}, +#ifndef TARGET_PC {PROC_OBJ_ITO, "d_a_obj_ito"}, +#endif // TARGET_PC {PROC_OBJ_SW, "d_a_obj_sw"}, +#ifndef TARGET_PC {PROC_SPINNER, "d_a_spinner"}, +#endif // TARGET_PC {PROC_B_OB, "d_a_b_ob"}, {PROC_KAGO, "d_a_kago"}, {PROC_E_YC, "d_a_e_yc"}, @@ -252,16 +266,20 @@ static DynamicNameTableEntry const DynamicNameTable[] = { {PROC_B_ZANTZ, "d_a_b_zant_mobile"}, {PROC_B_ZANT, "d_a_b_zant"}, {PROC_B_ZANTM, "d_a_b_zant_magic"}, +#ifndef TARGET_PC {PROC_TBOX, "d_a_tbox"}, {PROC_TBOX2, "d_a_tbox2"}, {PROC_BOOMERANG, "d_a_boomerang"}, {PROC_MIDNA, "d_a_midna"}, +#endif // TARGET_PC {PROC_NPC_TK, "d_a_npc_tk"}, {PROC_NPC_WORM, "d_a_npc_worm"}, {PROC_PPolamp, "d_a_ppolamp"}, {PROC_BkyRock, "d_a_obj_bky_rock"}, +#ifndef TARGET_PC {PROC_HITOBJ, "d_a_hitobj"}, {PROC_EP, "d_a_ep"}, +#endif // TARGET_PC {PROC_COW, "d_a_cow"}, {PROC_PERU, "d_a_peru"}, {PROC_NI, "d_a_ni"}, @@ -313,13 +331,17 @@ static DynamicNameTableEntry const DynamicNameTable[] = { {PROC_MG_FISH, "d_a_mg_fish"}, {PROC_FSHOP, "d_a_mg_fshop"}, {PROC_NPC_DU, "d_a_npc_du"}, +#ifndef TARGET_PC {PROC_DISAPPEAR, "d_a_disappear"}, +#endif // TARGET_PC {PROC_Obj_Mato, "d_a_obj_mato"}, {PROC_Obj_Flag, "d_a_obj_flag"}, {PROC_Obj_Flag2, "d_a_obj_flag2"}, {PROC_Obj_Flag3, "d_a_obj_flag3"}, {PROC_Obj_GOMIKABE, "d_a_obj_gomikabe"}, +#ifndef TARGET_PC {PROC_Obj_Yousei, "d_a_obj_yousei"}, +#endif // TARGET_PC {PROC_Obj_Kabuto, "d_a_obj_kabuto"}, {PROC_Obj_Cho, "d_a_obj_cho"}, {PROC_Obj_Kuw, "d_a_obj_kuwagata"}, @@ -346,7 +368,9 @@ static DynamicNameTableEntry const DynamicNameTable[] = { {PROC_Izumi_Gate, "d_a_izumi_gate"}, {PROC_Obj_Fchain, "d_a_obj_fchain"}, {PROC_Obj_Wchain, "d_a_obj_wchain"}, +#ifndef TARGET_PC {PROC_Tag_Attp, "d_a_tag_attention"}, +#endif // TARGET_PC {PROC_Obj_Tornado, "d_a_obj_tornado"}, {PROC_Obj_Tornado2, "d_a_obj_tornado2"}, {PROC_Obj_FirePillar, "d_a_obj_firepillar"}, @@ -538,7 +562,9 @@ static DynamicNameTableEntry const DynamicNameTable[] = { {PROC_E_WAP, "d_a_e_warpappear"}, {PROC_Obj_SmallKey, "d_a_obj_smallkey"}, {PROC_Obj_Kantera, "d_a_obj_kantera"}, +#ifndef TARGET_PC {PROC_Obj_LifeContainer, "d_a_obj_life_container"}, +#endif // TARGET_PC {PROC_Obj_Shield, "d_a_obj_shield"}, {PROC_Demo_Item, "d_a_demo_item"}, #if !PLATFORM_SHIELD @@ -546,24 +572,32 @@ static DynamicNameTableEntry const DynamicNameTable[] = { #endif {PROC_Obj_Drop, "d_a_obj_drop"}, {PROC_OBJ_RW, "d_a_obj_rw"}, +#ifndef TARGET_PC {PROC_NBOMB, "d_a_nbomb"}, +#endif // TARGET_PC {PROC_TAG_CSW, "d_a_tag_csw"}, {PROC_TAG_QS, "d_a_tag_qs"}, {PROC_HOZELDA, "d_a_hozelda"}, #if !PLATFORM_SHIELD {PROC_SWC00, "d_a_swc00"}, #endif +#ifndef TARGET_PC {PROC_KNOB20, "d_a_door_knob00"}, {PROC_DBDOOR, "d_a_door_dbdoor00"}, +#endif // TARGET_PC {PROC_BOSS_DOOR, "d_a_door_boss"}, {PROC_L1BOSS_DOOR, "d_a_door_bossL1"}, {PROC_L1MBOSS_DOOR, "d_a_door_mbossL1"}, {PROC_L5BOSS_DOOR, "d_a_door_bossL5"}, +#ifndef TARGET_PC {PROC_DSHUTTER, "d_a_dshutter"}, {PROC_SPIRAL_DOOR, "d_a_door_spiral"}, +#endif // TARGET_PC {PROC_Tag_ChgRestart, "d_a_tag_chgrestart"}, {PROC_Tag_Restart, "d_a_tag_setrestart"}, +#ifndef TARGET_PC {PROC_ANDSW, "d_a_andsw"}, +#endif // TARGET_PC #if !PLATFORM_SHIELD {PROC_ANDSW2, "d_a_andsw2"}, #endif @@ -689,13 +723,17 @@ static DynamicNameTableEntry const DynamicNameTable[] = { {PROC_NPC_MK, "d_a_npc_mk"}, #endif {PROC_NPC_P2, "d_a_npc_p2"}, +#ifndef TARGET_PC {PROC_KYTAG00, "d_a_kytag00"}, +#endif // TARGET_PC #if !PLATFORM_SHIELD {PROC_KYTAG01, "d_a_kytag01"}, #endif {PROC_KYTAG02, "d_a_kytag02"}, {PROC_KYTAG03, "d_a_kytag03"}, +#ifndef TARGET_PC {PROC_KYTAG04, "d_a_kytag04"}, +#endif // TARGET_PC {PROC_KYTAG05, "d_a_kytag05"}, {PROC_KYTAG06, "d_a_kytag06"}, {PROC_KYTAG07, "d_a_kytag07"}, @@ -708,7 +746,9 @@ static DynamicNameTableEntry const DynamicNameTable[] = { {PROC_KYTAG14, "d_a_kytag14"}, {PROC_KYTAG15, "d_a_kytag15"}, {PROC_KYTAG16, "d_a_kytag16"}, +#ifndef TARGET_PC {PROC_KYTAG17, "d_a_kytag17"}, +#endif // TARGET_PC {PROC_Ykgr, "d_a_ykgr"}, {PROC_TALK, "d_a_talk"}, {PROC_Obj_Crope, "d_a_obj_crope"}, @@ -727,17 +767,21 @@ static DynamicNameTableEntry const DynamicNameTable[] = { {PROC_Tag_Lv8Gate, "d_a_tag_Lv8Gate"}, {PROC_Tag_TheBHint, "d_a_tag_theB_hint"}, {PROC_Tag_Assist, "d_a_tag_assistance"}, +#ifndef TARGET_PC {PROC_DEMO00, "d_a_demo00"}, +#endif {PROC_TAG_CAMERA, "d_a_tag_camera"}, {PROC_TAG_CHKPOINT, "d_a_tag_chkpoint"}, #if !PLATFORM_SHIELD {PROC_TAG_EVENT, "d_a_tag_event"}, #endif +#ifndef TARGET_PC {PROC_TAG_EVT, "d_a_tag_evt"}, {PROC_TAG_TELOP, "d_a_tag_telop"}, {PROC_TAG_HOWL, "d_a_tag_howl"}, #if !PLATFORM_SHIELD {PROC_TAG_MSG, "d_a_tag_msg"}, + #endif {PROC_TAG_LANTERN, "d_a_tag_lantern"}, {PROC_Tag_Mist, "d_a_tag_mist"}, @@ -747,6 +791,7 @@ static DynamicNameTableEntry const DynamicNameTable[] = { {PROC_BG, "d_a_bg"}, {PROC_SET_BG_OBJ, "d_a_set_bgobj"}, {PROC_BG_OBJ, "d_a_bg_obj"}, +#endif {PROC_MIRROR, "d_a_mirror"}, {PROC_MOVIE_PLAYER, "d_a_movie_player"}, #if !PLATFORM_SHIELD @@ -754,15 +799,21 @@ static DynamicNameTableEntry const DynamicNameTable[] = { #endif {PROC_FR, "d_a_fr"}, {PROC_ECONT, "d_a_econt"}, +#ifndef TARGET_PC {PROC_MG_ROD, "d_a_mg_rod"}, +#endif // TARGET_PC {PROC_E_ARROW, "d_a_e_arrow"}, {PROC_BULLET, "d_a_bullet"}, +#ifndef TARGET_PC {PROC_SWHIT0, "d_a_swhit0"}, +#endif // TARGET_PC {PROC_E_TH_BALL, "d_a_e_th_ball"}, +#ifndef TARGET_PC {PROC_TAG_EVTAREA, "d_a_tag_evtarea"}, {PROC_TAG_EVTMSG, "d_a_tag_evtmsg"}, {PROC_TAG_KMSG, "d_a_tag_kmsg"}, {PROC_TAG_PUSH, "d_a_tag_push"}, +#endif // TARGET_PC {PROC_E_MK_BO, "d_a_e_mk_bo"}, {PROC_E_MM_MT, "d_a_e_mm_mt"}, {PROC_OBJ_KBOX, "d_a_obj_kbox"}, @@ -770,7 +821,9 @@ static DynamicNameTableEntry const DynamicNameTable[] = { {PROC_B_GOS, "d_a_b_gos"}, {PROC_OBJ_YSTONE, "d_a_obj_ystone"}, {PROC_MANT, "d_a_mant"}, +#ifndef TARGET_PC {PROC_CROD, "d_a_crod"}, +#endif // TARGET_PC {PROC_OBJ_PLEAF, "d_a_obj_pleaf"}, {PROC_OBJ_KBACKET, "d_a_obj_kbacket"}, {PROC_OBJ_YBAG, "d_a_obj_yel_bag"}, @@ -778,7 +831,9 @@ static DynamicNameTableEntry const DynamicNameTable[] = { {PROC_OBJ_AUTOMATA, "d_a_obj_automata"}, {PROC_OBJ_GADGET, "d_a_obj_gadget"}, {PROC_OBJ_KAGO, "d_a_obj_kago"}, +#ifndef TARGET_PC {PROC_Obj_Carry, "d_a_obj_carry"}, +#endif // TARGET_PC {PROC_Obj_Stone, "d_a_obj_stone"}, {PROC_OBJ_HB, "d_a_obj_hb"}, {PROC_NPC_INKO, "d_a_npc_inko"}, @@ -788,12 +843,14 @@ static DynamicNameTableEntry const DynamicNameTable[] = { {PROC_E_BI_LEAF, "d_a_e_bi_leaf"}, {PROC_START_AND_GOAL, "d_a_startAndGoal"}, {PROC_NPC_DF, "d_a_npc_df"}, +#ifndef TARGET_PC {PROC_ARROW, "d_a_arrow"}, {PROC_PATH_LINE, "d_a_path_line"}, {PROC_TAG_ALLMATO, "d_a_tag_allmato"}, {PROC_Obj_Timer, "d_a_obj_timer"}, {PROC_SCENE_EXIT, "d_a_scene_exit"}, {PROC_SUSPEND, "d_a_suspend"}, +#endif // TARGET_PC #if !PLATFORM_SHIELD {PROC_GRASS, "d_a_grass"}, #endif diff --git a/src/dusk/stubs.cpp b/src/dusk/stubs.cpp index 3063b4bccf..38e6b2716b 100644 --- a/src/dusk/stubs.cpp +++ b/src/dusk/stubs.cpp @@ -1645,6 +1645,9 @@ void GXInitTexCacheRegion(GXTexRegion* region, u8 is_32b_mipmap, u32 tmem_even, GXTexCacheSize size_even, u32 tmem_odd, GXTexCacheSize size_odd) { puts("GXInitTexCacheRegion is a stub"); } +// XXX, this should be some struct? +// GXRenderModeObj GXNtsc480IntDf; +//GXRenderModeObj GXNtsc480Int; void GXPeekZ(u16 x, u16 y, u32* z) { puts("GXPeekZ is a stub"); *z = 0; @@ -1656,6 +1659,7 @@ void GXReadXfRasMetric(u32* xf_wait_in, u32* xf_wait_out, u32* ras_busy, u32* cl *ras_busy = 0; *clocks = 0; } + void GXSetCopyClamp(GXFBClamp clamp) { puts("GXSetCopyClamp is a stub"); } @@ -1663,9 +1667,11 @@ OSThread* GXSetCurrentGXThread(void) { puts("GXSetCurrentGXThread is a stub"); return NULL; } + void GXSetMisc(GXMiscToken token, u32 val) { puts("GXSetMisc is a stub"); } + void GXSetProjectionv(const f32* ptr) { puts("GXSetProjectionv is a stub"); } diff --git a/src/m_Do/m_Do_main.cpp b/src/m_Do/m_Do_main.cpp index 5a3b6c5f39..49a52cd8f4 100644 --- a/src/m_Do/m_Do_main.cpp +++ b/src/m_Do/m_Do_main.cpp @@ -130,6 +130,7 @@ void main01(void) { // 1. Setup mDoMch_Create(); mDoGph_Create(); + mDoCPd_c::create(); // Console Setup JUTConsole* console = JFWSystem::getSystemConsole(); From 3cfef81753a087c057d217ab8e9ff36d75a93358 Mon Sep 17 00:00:00 2001 From: Lurs <2795933+Lurs@users.noreply.github.com> Date: Tue, 24 Feb 2026 20:18:21 +0100 Subject: [PATCH 41/46] Fix JSUOutputStream uintptr_t operator conflict on MSVC x86. uintptr_t == u32 == unsigned int on 32-bit MSVC since u32 was changed from unsigned long to unsigned int for TARGET_PC. Guard the uintptr_t overload to x64 only where uintptr_t != u32. --- include/JSystem/JSupport/JSUOutputStream.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/JSystem/JSupport/JSUOutputStream.h b/include/JSystem/JSupport/JSUOutputStream.h index 81c8f9d24d..570ed1e9db 100644 --- a/include/JSystem/JSupport/JSUOutputStream.h +++ b/include/JSystem/JSupport/JSUOutputStream.h @@ -18,7 +18,7 @@ public: s32 write(const void*, s32); void write(const char*); -#ifdef _MSVC_LANG +#if defined(_MSVC_LANG) && defined(_WIN64) JSUOutputStream& operator<<(uintptr_t param_0) { write(¶m_0, sizeof(uintptr_t)); return *this; From 77581bace444606d01c7b5a66d67a82a11b57f8b Mon Sep 17 00:00:00 2001 From: PJB3005 Date: Tue, 24 Feb 2026 20:47:55 +0100 Subject: [PATCH 42/46] Fix AR DMAs & async DVD reads on 64-bit We get to the health and safety screen!! --- include/JSystem/JKernel/JKRAramPiece.h | 14 +++++++------- include/dolphin/ar.h | 4 ++-- src/JSystem/JKernel/JKRAramPiece.cpp | 8 ++++---- src/JSystem/JKernel/JKRDvdAramRipper.cpp | 4 ++-- src/JSystem/JKernel/JKRDvdFile.cpp | 2 +- src/dusk/stubs.cpp | 4 ++-- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/include/JSystem/JKernel/JKRAramPiece.h b/include/JSystem/JKernel/JKRAramPiece.h index 25f304f02b..130f81203b 100644 --- a/include/JSystem/JKernel/JKRAramPiece.h +++ b/include/JSystem/JKernel/JKRAramPiece.h @@ -27,8 +27,8 @@ public: /* 0x40 */ s32 mTransferDirection; /* 0x44 */ u32 mDataLength; - /* 0x48 */ u32 mSrc; - /* 0x4C */ u32 mDst; + /* 0x48 */ uintptr_t mSrc; + /* 0x4C */ uintptr_t mDst; /* 0x50 */ JKRAramBlock* mAramBlock; /* 0x54 */ u32 field_0x54; /* 0x58 */ AsyncCallback mCallback; @@ -63,15 +63,15 @@ public: static JSUList sAramPieceCommandList; public: - static JKRAMCommand* prepareCommand(int, u32, u32, u32, JKRAramBlock*, + static JKRAMCommand* prepareCommand(int, uintptr_t, uintptr_t, u32, JKRAramBlock*, JKRAMCommand::AsyncCallback); static void sendCommand(JKRAMCommand*); - static JKRAMCommand* orderAsync(int, u32, u32, u32, JKRAramBlock*, JKRAMCommand::AsyncCallback); + static JKRAMCommand* orderAsync(int, uintptr_t, uintptr_t, u32, JKRAramBlock*, JKRAMCommand::AsyncCallback); static BOOL sync(JKRAMCommand*, int); - static BOOL orderSync(int, u32, u32, u32, JKRAramBlock*); + static BOOL orderSync(int, uintptr_t, uintptr_t, u32, JKRAramBlock*); static void startDMA(JKRAMCommand*); - static void doneDMA(u32); + static void doneDMA(uintptr_t); private: static void lock() { OSLockMutex(&mMutex); } @@ -82,7 +82,7 @@ inline void JKRAramPcs_SendCommand(JKRAMCommand* command) { JKRAramPiece::sendCommand(command); } -inline BOOL JKRAramPcs(int direction, u32 source, u32 destination, u32 length, +inline BOOL JKRAramPcs(int direction, uintptr_t source, uintptr_t destination, u32 length, JKRAramBlock* block) { return JKRAramPiece::orderSync(direction, source, destination, length, block); } diff --git a/include/dolphin/ar.h b/include/dolphin/ar.h index 0a5d781a8f..46f163aef9 100644 --- a/include/dolphin/ar.h +++ b/include/dolphin/ar.h @@ -10,7 +10,7 @@ extern "C" { #endif -typedef void (*ARQCallback)(u32 pointerToARQRequest); +typedef void (*ARQCallback)(uintptr_t pointerToARQRequest); struct ARQRequest { /* 0x00 */ struct ARQRequest *next; @@ -59,7 +59,7 @@ void ARClear(u32 flag); // ARQ void ARQInit(void); void ARQReset(void); -void ARQPostRequest(ARQRequest* request, u32 owner, u32 type, u32 priority, u32 source, u32 dest, u32 length, ARQCallback callback); +void ARQPostRequest(ARQRequest* request, u32 owner, u32 type, u32 priority, uintptr_t source, uintptr_t dest, u32 length, ARQCallback callback); void ARQRemoveRequest(ARQRequest* request); void ARQRemoveOwnerRequest(u32 owner); void ARQFlushQueue(void); diff --git a/src/JSystem/JKernel/JKRAramPiece.cpp b/src/JSystem/JKernel/JKRAramPiece.cpp index e74cf5d5c7..d0b55ba07b 100644 --- a/src/JSystem/JKernel/JKRAramPiece.cpp +++ b/src/JSystem/JKernel/JKRAramPiece.cpp @@ -6,7 +6,7 @@ #include "JSystem/JUtility/JUTException.h" #include -JKRAMCommand* JKRAramPiece::prepareCommand(int direction, u32 src, u32 dst, u32 length, +JKRAMCommand* JKRAramPiece::prepareCommand(int direction, uintptr_t src, uintptr_t dst, u32 length, JKRAramBlock* block, JKRAMCommand::AsyncCallback callback) { JKRAMCommand* command = new (JKRGetSystemHeap(), -4) JKRAMCommand(); @@ -27,7 +27,7 @@ JSUList JKRAramPiece::sAramPieceCommandList; OSMutex JKRAramPiece::mMutex; -JKRAMCommand* JKRAramPiece::orderAsync(int direction, u32 source, u32 destination, u32 length, +JKRAMCommand* JKRAramPiece::orderAsync(int direction, uintptr_t source, uintptr_t destination, u32 length, JKRAramBlock* block, JKRAMCommand::AsyncCallback callback) { lock(); if ((source & 0x1f) != 0 || (destination & 0x1f) != 0) { @@ -73,7 +73,7 @@ BOOL JKRAramPiece::sync(JKRAMCommand* command, int is_non_blocking) { return TRUE; } -BOOL JKRAramPiece::orderSync(int direction, u32 source, u32 destination, u32 length, +BOOL JKRAramPiece::orderSync(int direction, uintptr_t source, uintptr_t destination, u32 length, JKRAramBlock* block) { lock(); @@ -97,7 +97,7 @@ void JKRAramPiece::startDMA(JKRAMCommand* command) { command->mDst, command->mDataLength, JKRAramPiece::doneDMA); } -void JKRAramPiece::doneDMA(u32 requestAddress) { +void JKRAramPiece::doneDMA(uintptr_t requestAddress) { JKRAMCommand* command = (JKRAMCommand*)requestAddress; if (command->mTransferDirection == 1) { diff --git a/src/JSystem/JKernel/JKRDvdAramRipper.cpp b/src/JSystem/JKernel/JKRDvdAramRipper.cpp index 3e07727a58..8b29459a9a 100644 --- a/src/JSystem/JKernel/JKRDvdAramRipper.cpp +++ b/src/JSystem/JKernel/JKRDvdAramRipper.cpp @@ -103,7 +103,7 @@ JKRADCommand* JKRDvdAramRipper::callCommand_Async(JKRADCommand* command) { fileSize = ALIGN_NEXT(fileSize, 0x20); if (command->mExpandSwitch == 1) { u8 buffer[0x40]; - u8* bufPtr = (u8*)ALIGN_NEXT((u32)&buffer, 0x20); + u8* bufPtr = (u8*)ALIGN_NEXT((uintptr_t)&buffer, 0x20); while (true) { s32 result = DVDReadPrio(dvdFile->getFileInfo(), bufPtr, 0x20, 0, 2); if (result >= 0) { @@ -472,7 +472,7 @@ static u32 dmaBufferFlush(u32 param_1) { return 0; } u32 size = ALIGN_NEXT(dmaCurrent - dmaBuf, 0x20); - JKRAramPcs(0, (u32)dmaBuf, param_1, size, NULL); + JKRAramPcs(0, (uintptr_t)dmaBuf, param_1, size, NULL); dmaCurrent = dmaBuf; return size; } diff --git a/src/JSystem/JKernel/JKRDvdFile.cpp b/src/JSystem/JKernel/JKRDvdFile.cpp index 07bd9505a5..41eec5809d 100644 --- a/src/JSystem/JKernel/JKRDvdFile.cpp +++ b/src/JSystem/JKernel/JKRDvdFile.cpp @@ -124,7 +124,7 @@ s32 JKRDvdFile::sync(void) { void JKRDvdFile::doneProcess(s32 id, DVDFileInfo* fileInfo) { // fileInfo->field_0x3c looks like some kind of user pointer? - JKRDvdFile* dvdFile = *(JKRDvdFile**)((u8*)fileInfo + 0x3c); + JKRDvdFile* dvdFile = *(JKRDvdFile**)((u8*)fileInfo + (offsetof(JKRDvdFile, mDvdFile) - offsetof(JKRDvdFile, mFileInfo))); OSSendMessage(&dvdFile->mMessageQueue2, (OSMessage)id, OS_MESSAGE_NOBLOCK); } diff --git a/src/dusk/stubs.cpp b/src/dusk/stubs.cpp index 38e6b2716b..f8c84d498a 100644 --- a/src/dusk/stubs.cpp +++ b/src/dusk/stubs.cpp @@ -1297,7 +1297,7 @@ u32 ARInit(u32* stack_index_addr, u32 num_entries) { } #pragma mark ARQ -void ARQPostRequest(ARQRequest* request, u32 owner, u32 type, u32 priority, u32 source, u32 dest, +void ARQPostRequest(ARQRequest* request, u32 owner, u32 type, u32 priority, uintptr_t source, uintptr_t dest, u32 length, ARQCallback callback) { // Emulate ARAM DMA transfers using memcpy. // type 0 = MRAM -> ARAM, type 1 = ARAM -> MRAM @@ -1319,7 +1319,7 @@ void ARQPostRequest(ARQRequest* request, u32 owner, u32 type, u32 priority, u32 // Immediately invoke the callback (synchronous on PC, no DMA latency) if (callback) { - callback((u32)(uintptr_t)request); + callback((uintptr_t)request); } } From e4104cadad39f40bc3bf5736c3867c76c613fe87 Mon Sep 17 00:00:00 2001 From: PJB3005 Date: Tue, 24 Feb 2026 21:03:05 +0100 Subject: [PATCH 43/46] Make OSReport_Error less hideous to look at --- src/m_Do/m_Do_printf.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/m_Do/m_Do_printf.cpp b/src/m_Do/m_Do_printf.cpp index 13b2d070ce..0350811da9 100644 --- a/src/m_Do/m_Do_printf.cpp +++ b/src/m_Do/m_Do_printf.cpp @@ -232,9 +232,14 @@ void OSReport_Error(const char* fmt, ...) { va_list args; va_start(args, fmt); OSReportForceEnableOn(); +#if TARGET_PC + my_PutString("\x1B[31m[ERROR]\x1B[m "); + OSVReport(fmt, args); +#else my_PutString("\x1B[41;37m[ERROR]"); OSVReport(fmt, args); my_PutString("\x1B[m"); +#endif OSReportForceEnableOff(); fflush(stdout); va_end(args); From 513b86f8ed6026b8d13702f6de82c1a7edfc5e6c Mon Sep 17 00:00:00 2001 From: PJB3005 Date: Tue, 24 Feb 2026 21:04:48 +0100 Subject: [PATCH 44/46] Translate memory allocation failure error --- src/m_Do/m_Do_machine.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/m_Do/m_Do_machine.cpp b/src/m_Do/m_Do_machine.cpp index 0dcee93d4a..2811cff7b1 100644 --- a/src/m_Do/m_Do_machine.cpp +++ b/src/m_Do/m_Do_machine.cpp @@ -344,9 +344,15 @@ static void myMemoryErrorRoutine(void* p_heap, u32 size, int alignment) { if (notSolidHeap) { // "Error: Can't allocate memory %d(0x%x)Bytes, %d Byte Alignment from %08x\n" +#if TARGET_PC + OSReport_Error( + "Error: Can't allocate memory %d(0x%x)Bytes, %d Byte Alignment from %08x\n", + size, size, alignment, p_heap); +#else OSReport_Error( "エラー: メモリを確保できません %d(0x%x)バイト、 %d バイトアライメント from %08x\n", size, size, alignment, p_heap); +#endif } union { From a4f66b989279607ad3062a2a77757f40c9869304 Mon Sep 17 00:00:00 2001 From: PJB3005 Date: Tue, 24 Feb 2026 21:39:11 +0100 Subject: [PATCH 45/46] Add BIT_64 define to types.h I'll be using this --- include/dolphin/types.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/include/dolphin/types.h b/include/dolphin/types.h index 17d63b4a76..e8c3df7861 100644 --- a/include/dolphin/types.h +++ b/include/dolphin/types.h @@ -4,6 +4,13 @@ #ifdef __REVOLUTION_SDK__ #include #else + +#if _WIN64 || __LP64__ +#define BIT_64 1 +#else +#define BIT_64 0 +#endif + typedef signed char s8; typedef unsigned char u8; typedef signed short int s16; From d9e39c8786af3b66b90c3f4809a93467d514f086 Mon Sep 17 00:00:00 2001 From: PJB3005 Date: Tue, 24 Feb 2026 21:39:45 +0100 Subject: [PATCH 46/46] Fix getMaxAllocatableSize & CMemBlock::getBlock on 64-bit --- include/JSystem/JKernel/JKRExpHeap.h | 10 +++++++++- include/JSystem/JKernel/JKRHeap.h | 6 ++++++ src/JSystem/JKernel/JKRHeap.cpp | 4 ++-- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/include/JSystem/JKernel/JKRExpHeap.h b/include/JSystem/JKernel/JKRExpHeap.h index 1535ba757b..a31b2c5e84 100644 --- a/include/JSystem/JKernel/JKRExpHeap.h +++ b/include/JSystem/JKernel/JKRExpHeap.h @@ -35,7 +35,7 @@ public: CMemBlock* getNextBlock() const { return mNext; } u32 getSize() const { return size; } u8 getGroupId() const { return mGroupId; } - static CMemBlock* getBlock(void* data) { return (CMemBlock*)((uintptr_t)data + -0x10); } + static CMemBlock* getBlock(void* data) { return (CMemBlock*)((uintptr_t)data + -sizeof(CMemBlock)); } private: /* 0x0 */ u16 mMagic; @@ -44,9 +44,17 @@ public: /* 0x4 */ u32 size; /* 0x8 */ CMemBlock* mPrev; /* 0xC */ CMemBlock* mNext; +#if BIT_64 + // Ensure padded to 0x20 bytes on 64-bit + void* _pad; +#endif }; // Size: 0x10 friend class CMemBlock; +#if TARGET_PC + static_assert(sizeof(CMemBlock) == MEM_BLOCK_SIZE); +#endif + protected: JKRExpHeap(void* data, u32 size, JKRHeap* parent, bool errorFlag); virtual ~JKRExpHeap(); diff --git a/include/JSystem/JKernel/JKRHeap.h b/include/JSystem/JKernel/JKRHeap.h index c23b72180f..67fb6b8e6d 100644 --- a/include/JSystem/JKernel/JKRHeap.h +++ b/include/JSystem/JKernel/JKRHeap.h @@ -16,6 +16,12 @@ extern u8 JKRValue_DEBUGFILL_DELETE; extern s32 fillcheck_dispcount; extern bool data_8074A8D0_debug; +#if BIT_64 +#define MEM_BLOCK_SIZE 0x20 +#else +#define MEM_BLOCK_SIZE 0x10 +#endif + /** * @ingroup jsystem-jkernel * diff --git a/src/JSystem/JKernel/JKRHeap.cpp b/src/JSystem/JKernel/JKRHeap.cpp index 8960b58c7a..1ad3eedceb 100644 --- a/src/JSystem/JKernel/JKRHeap.cpp +++ b/src/JSystem/JKernel/JKRHeap.cpp @@ -313,8 +313,8 @@ u8 JKRHeap::getCurrentGroupId() { } u32 JKRHeap::getMaxAllocatableSize(int alignment) { - u32 maxFreeBlock = (uintptr_t)getMaxFreeBlock(); - u32 ptrOffset = (alignment - 1) & alignment - (maxFreeBlock & 0xf); + uintptr_t maxFreeBlock = (uintptr_t)getMaxFreeBlock(); + uintptr_t ptrOffset = (alignment - 1) & alignment - (maxFreeBlock & (MEM_BLOCK_SIZE - 1)); return ~(alignment - 1) & (getFreeSize() - ptrOffset); }