diff --git a/config/ShieldD/splits.txt b/config/ShieldD/splits.txt index 453eb67a2b..a6ef320d93 100644 --- a/config/ShieldD/splits.txt +++ b/config/ShieldD/splits.txt @@ -65,7 +65,7 @@ m_Do/m_Do_mtx.cpp: .ctors start:0x8062F7D0 end:0x8062F7D4 .data start:0x80661ED0 end:0x80661FC0 .sdata start:0x8073F3E8 end:0x8073F3F8 - .sbss start:0x8074C3B0 end:0x8074C3BC + .sbss start:0x8074C3B0 end:0x8074C3B8 .sdata2 start:0x8074D878 end:0x8074D888 .bss start:0x807558E0 end:0x80755D30 @@ -74,7 +74,7 @@ m_Do/m_Do_ext.cpp: .rodata start:0x8062FA30 end:0x8062FA70 .data start:0x80661FC0 end:0x80663DB0 .sdata start:0x8073F3F8 end:0x8073F600 - .sbss start:0x8074C3BC end:0x8074C418 + .sbss start:0x8074C3B8 end:0x8074C418 .sdata2 start:0x8074D888 end:0x8074D8D0 .bss start:0x80755D30 end:0x80755D90 diff --git a/config/ShieldD/symbols.txt b/config/ShieldD/symbols.txt index 45a62b4b3b..dc8edc3c01 100644 --- a/config/ShieldD/symbols.txt +++ b/config/ShieldD/symbols.txt @@ -64187,9 +64187,9 @@ lbl_8074C3AA = .sbss:0x8074C3AA; // type:object size:0x1 data:byte hash:0xFDF68E lbl_8074C3AB = .sbss:0x8074C3AB; // type:object size:0x1 data:byte hash:0x15E8B591 dhash:0xC99D7D59 @LOCAL@exceptionNNGCReadPad__FPUlPUl@l_oldButton@0 = .sbss:0x8074C3AC; // type:object size:0x4 scope:local data:4byte hash:0x50F85B88 dhash:0x8D7B3DDD mDoMtx_stack = .sbss:0x8074C3B0; // type:object size:0x1 scope:global hash:0x2AB168B3 -lbl_8074C3B8 = .sbss:0x8074C3B8; // type:object size:0x1 data:byte hash:0x60980213 dhash:0x3EBAE505 +CurrentHeapAdjustVerbose__6mDoExt = .sbss:0x8074C3B8; // type:object size:0x1 data:byte hash:0x60980213 dhash:0x3EBAE505 HeapAdjustVerbose__6mDoExt = .sbss:0x8074C3B9; // type:object size:0x1 data:byte hash:0xDD10CA27 dhash:0x25FFD851 -HeapAdjustQuiet__6mDoExt = .sbss:0x8074C3BA; // type:object size:0x2 hash:0x364A3DE1 dhash:0xAED09ED7 +HeapAdjustQuiet__6mDoExt = .sbss:0x8074C3BA; // type:object size:0x1 hash:0x364A3DE1 dhash:0xAED09ED7 AssertHeap = .sbss:0x8074C3BC; // type:object size:0x4 scope:global data:4byte hash:0x0726E63B DbPrintHeap = .sbss:0x8074C3C0; // type:object size:0x4 scope:global data:4byte hash:0x114A8B4E gameHeap = .sbss:0x8074C3C4; // type:object size:0x4 scope:global data:4byte hash:0x31D7CBD7 @@ -64199,8 +64199,8 @@ archiveHeap = .sbss:0x8074C3D0; // type:object size:0x4 scope:global data:4byte j2dHeap = .sbss:0x8074C3D4; // type:object size:0x4 scope:global data:4byte hash:0x7CA37505 HostIOHeap = .sbss:0x8074C3D8; // type:object size:0x4 scope:global data:4byte hash:0x8D1A0E3F mDoExt_SaveCurrentHeap = .sbss:0x8074C3DC; // type:object size:0x4 scope:global data:4byte hash:0x44FDA9E1 -@LOCAL@mDoExt_createSolidHeap__FUlP7JKRHeapUl@displayed@0 = .sbss:0x8074C3E0; // type:object size:0x4 scope:local data:4byte hash:0x1928D6B8 dhash:0xF0ED4395 -lbl_8074C3E4 = .sbss:0x8074C3E4; // type:object size:0x1 data:byte hash:0x74053100 dhash:0xCB66AA90 +@LOCAL@mDoExt_createSolidHeap__FUlP7JKRHeapUl@displayed = .sbss:0x8074C3E0; // type:object size:0x4 scope:local data:4byte hash:0x1928D6B8 dhash:0xF0ED4395 +@GUARD@draw__17mDoExt_cubePacketFv@l_pos = .sbss:0x8074C3E4; // type:object size:0x1 data:byte hash:0x74053100 dhash:0xCB66AA90 mDoExt_font0 = .sbss:0x8074C3E8; // type:object size:0x4 scope:global data:4byte hash:0xA93F74F6 mDoExt_font0_getCount = .sbss:0x8074C3EC; // type:object size:0x4 scope:global data:4byte hash:0xCC867BDC mDoExt_resfont0 = .sbss:0x8074C3F0; // type:object size:0x4 scope:global data:4byte hash:0xFFCF2592 diff --git a/configure.py b/configure.py index 8fb5950bba..d4f49b7ee7 100755 --- a/configure.py +++ b/configure.py @@ -570,7 +570,7 @@ config.libs = [ Object(MatchingFor(ALL_GCN), "m_Do/m_Do_graphic.cpp"), Object(MatchingFor(ALL_GCN), "m_Do/m_Do_machine.cpp"), Object(MatchingFor(ALL_GCN), "m_Do/m_Do_mtx.cpp"), - Object(Equivalent, "m_Do/m_Do_ext.cpp"), # weak func order + Object(MatchingFor(ALL_GCN), "m_Do/m_Do_ext.cpp"), Object(NonMatching, "m_Do/m_Do_ext2.cpp"), Object(MatchingFor(ALL_GCN), "m_Do/m_Do_lib.cpp"), Object(MatchingFor(ALL_GCN), "m_Do/m_Do_Reset.cpp"), diff --git a/include/JSystem/J3DGraphBase/J3DMaterial.h b/include/JSystem/J3DGraphBase/J3DMaterial.h index 39b8be99c2..dcb74c1f46 100644 --- a/include/JSystem/J3DGraphBase/J3DMaterial.h +++ b/include/JSystem/J3DGraphBase/J3DMaterial.h @@ -56,12 +56,9 @@ public: J3DIndBlock* getIndBlock() { return mIndBlock; } J3DJoint* getJoint() { return mJoint; } J3DMaterialAnm* getMaterialAnm() { - if ((uintptr_t)mMaterialAnm < 0xC0000000) { - return mMaterialAnm; - } else { - return NULL; - } + return (uintptr_t)mMaterialAnm < 0xC0000000 ? mMaterialAnm : NULL; } + u32 getMaterialMode() { return mMaterialMode; } J3DNBTScale* getNBTScale() { return mTexGenBlock->getNBTScale(); } u16 getTexNo(u32 idx) { return mTevBlock->getTexNo(idx); } J3DGXColor* getTevKColor(u32 param_0) { return mTevBlock->getTevKColor(param_0); } diff --git a/include/JSystem/J3DGraphBase/J3DSys.h b/include/JSystem/J3DGraphBase/J3DSys.h index 57e3613ea2..1429ca22fe 100644 --- a/include/JSystem/J3DGraphBase/J3DSys.h +++ b/include/JSystem/J3DGraphBase/J3DSys.h @@ -139,7 +139,10 @@ struct J3DSys { J3DMtxCalc * getCurrentMtxCalc() const { return mCurrentMtxCalc; } - void setTexture(J3DTexture* pTex) { mTexture = pTex; } + void setTexture(J3DTexture* pTex) { + JUT_ASSERT_MSG(220, pTex != NULL, "Error : null pointer."); + mTexture = pTex; + } J3DTexture* getTexture() { return mTexture; } void setNBTScale(Vec* scale) { mNBTScale = scale; } diff --git a/include/JSystem/J3DGraphBase/J3DTexture.h b/include/JSystem/J3DGraphBase/J3DTexture.h index 0927e08a47..72a165645b 100644 --- a/include/JSystem/J3DGraphBase/J3DTexture.h +++ b/include/JSystem/J3DGraphBase/J3DTexture.h @@ -33,6 +33,7 @@ public: } void setResTIMG(u16 index, const ResTIMG& timg) { + JUT_ASSERT_MSG(81, (bool)(index < mNum), "Error : range over."); mpRes[index] = timg; mpRes[index].imageOffset = ((mpRes[index].imageOffset + (uintptr_t)&timg - (uintptr_t)(mpRes + index))); mpRes[index].paletteOffset = ((mpRes[index].paletteOffset + (uintptr_t)&timg - (uintptr_t)(mpRes + index))); diff --git a/include/JSystem/JKernel/JKRExpHeap.h b/include/JSystem/JKernel/JKRExpHeap.h index 224d4cbe1e..c52211c559 100644 --- a/include/JSystem/JKernel/JKRExpHeap.h +++ b/include/JSystem/JKernel/JKRExpHeap.h @@ -116,4 +116,8 @@ inline JKRExpHeap* JKRCreateExpHeap(u32 size, JKRHeap* parent, bool errorFlag) { return JKRExpHeap::create(size, parent, errorFlag); } +inline void JKRDestroyExpHeap(JKRHeap* heap) { + heap->destroy(); +} + #endif /* JKREXPHEAP_H */ diff --git a/include/JSystem/JKernel/JKRHeap.h b/include/JSystem/JKernel/JKRHeap.h index 0f149dc7b9..d44088bc1b 100644 --- a/include/JSystem/JKernel/JKRHeap.h +++ b/include/JSystem/JKernel/JKRHeap.h @@ -36,6 +36,7 @@ public: }; public: + JKRHeap(u32 size, JKRHeap* parent, bool errorFlag); JKRHeap(void* data, u32 size, JKRHeap* parent, bool errorFlag); virtual ~JKRHeap(); @@ -112,6 +113,7 @@ public: void lock() { OSLockMutex(&mMutex); } void unlock() { OSUnlockMutex(&mMutex); } u32 getHeapSize() { return mSize; } + u8 getCurrentGroupId() { return 0; } protected: /* 0x00 */ // vtable @@ -151,9 +153,7 @@ public: static u32 getMemorySize(void) { return mMemorySize; } static JKRHeap* getRootHeap() { return sRootHeap; } -#if PLATFORM_WII || PLATFORM_SHIELD static JKRHeap* getRootHeap2() { return sRootHeap2; } -#endif static JKRHeap* getSystemHeap() { return sSystemHeap; } static JKRHeap* getCurrentHeap() { return sCurrentHeap; } @@ -176,9 +176,7 @@ public: static JKRHeap* sRootHeap; -#if PLATFORM_WII || PLATFORM_SHIELD static JKRHeap* sRootHeap2; -#endif static JKRHeap* sSystemHeap; static JKRHeap* sCurrentHeap; @@ -241,6 +239,10 @@ inline u32 JKRGetMemBlockSize(JKRHeap* heap, void* block) { return JKRHeap::getSize(block, heap); } +inline u32 JKRGetFreeSize(JKRHeap* heap) { + return heap->getFreeSize(); +} + inline void* JKRAlloc(u32 size, int alignment) { return JKRHeap::alloc(size, alignment, NULL); } @@ -261,11 +263,9 @@ inline bool JKRSetErrorFlag(JKRHeap* heap, bool flag) { return heap->setErrorFlag(flag); } -#if PLATFORM_WII || PLATFORM_SHIELD inline JKRHeap* JKRGetRootHeap2() { return JKRHeap::getRootHeap2(); } -#endif #if DEBUG inline void JKRSetDebugFillNotuse(u8 status) { data_804508B1 = status; } diff --git a/include/JSystem/JKernel/JKRSolidHeap.h b/include/JSystem/JKernel/JKRSolidHeap.h index 661148cd27..bc2a1ffc15 100644 --- a/include/JSystem/JKernel/JKRSolidHeap.h +++ b/include/JSystem/JKernel/JKRSolidHeap.h @@ -65,4 +65,8 @@ inline JKRSolidHeap* JKRCreateSolidHeap(u32 param_0, JKRHeap* heap, bool param_2 return JKRSolidHeap::create(param_0, heap, param_2); } +inline void JKRDestroySolidHeap(JKRHeap* heap) { + heap->destroy(); +} + #endif /* JKRSOLIDHEAP_H */ diff --git a/include/JSystem/JUtility/JUTCacheFont.h b/include/JSystem/JUtility/JUTCacheFont.h index 1e05200766..4eafcaa255 100644 --- a/include/JSystem/JUtility/JUTCacheFont.h +++ b/include/JSystem/JUtility/JUTCacheFont.h @@ -63,6 +63,14 @@ public: static u32 calcCacheSize(u32 param_0, int param_1) { return (ALIGN_NEXT(param_0, 0x20) + 0x40) * param_1; } GXTexObj* getTexObj(void* buffer) { return &((TCachePage*)buffer)->mTexObj; } + u32 getCachePage() const { + return mCachePage; + } + + int getMaxSheetSize() const { + return mMaxSheetSize; + } + private: /* 0x70 */ u32 mTotalWidSize; /* 0x74 */ u32 mTotalGlySize; diff --git a/include/d/dolzel_base.pch b/include/d/dolzel_base.pch index 46c707b504..ddbcc3da7d 100644 --- a/include/d/dolzel_base.pch +++ b/include/d/dolzel_base.pch @@ -12,6 +12,11 @@ // Fixes weak function ordering #include "math.h" // IWYU pragma: export #include "cstring.h" // IWYU pragma: export +#include "JSystem/JKernel/JKRDisposer.h" // IWYU pragma: export +#include "JSystem/J3DGraphBase/J3DPacket.h" // IWYU pragma: export +#include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h" // IWYU pragma: export +#include "JSystem/J3DGraphAnimator/J3DJoint.h" // IWYU pragma: export +#include "JSystem/J3DGraphAnimator/J3DAnimation.h" // IWYU pragma: export #include "JSystem/JUtility/JUTGamePad.h" // IWYU pragma: export #include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h" // IWYU pragma: export #include "JSystem/JHostIO/JORReflexible.h" // IWYU pragma: export diff --git a/include/m_Do/m_Do_ext.h b/include/m_Do/m_Do_ext.h index 00a8144bc3..14c3f36e37 100644 --- a/include/m_Do/m_Do_ext.h +++ b/include/m_Do/m_Do_ext.h @@ -2,8 +2,10 @@ #define M_DO_M_DO_EXT_H #include "JSystem/J3DGraphAnimator/J3DAnimation.h" +#include "JSystem/J3DGraphAnimator/J3DJoint.h" #include "JSystem/J3DGraphAnimator/J3DModel.h" #include "Z2AudioLib/Z2SoundObject.h" +#include "d/d_kankyo_tev_str.h" #include "m_Do/m_Do_audio.h" #include "m_Do/m_Do_mtx.h" @@ -16,16 +18,11 @@ struct ResTIMG; class Z2Creature; namespace mDoExt { + extern u8 CurrentHeapAdjustVerbose; extern u8 HeapAdjustVerbose; extern u8 HeapAdjustQuiet; }; -#if DEBUG -void DummyCheckHeap_init(); -void DummyCheckHeap_create(); -void DummyCheckHeap_destroy(); -#endif - class mDoExt_baseAnm { public: mDoExt_baseAnm() {} @@ -244,41 +241,6 @@ private: /* 0x4 */ J3DAnmTransform* mAnmTransform; }; // Size: 0x8 -class mDoExt_invJntPacket : public J3DPacket { -public: - mDoExt_invJntPacket() {} - - virtual void draw(); - virtual ~mDoExt_invJntPacket() {} - - void setJoint(J3DModel* i_model, u16 param_1, u8 param_2) { - field_0x10 = i_model; - field_0x14 = param_1; - field_0x16 = param_2; - } - -private: - /* 0x10 */ J3DModel* field_0x10; - /* 0x14 */ u16 field_0x14; - /* 0x16 */ u8 field_0x16; -}; // Size: 0x18 - -class mDoExt_invisibleModel { -public: - mDoExt_invisibleModel() {} - int create(J3DModel* i_model, u8 param_1); - void entryJoint(cXyz*); - void entryDL(cXyz*); - - /* 0x0 */ J3DModel* mModel; - /* 0x4 */ mDoExt_invJntPacket* mpPackets; -}; - -class mDoExt_zelAnime : public Z2SoundObjAnime { -public: - void* field_0x48; -}; - class mDoExt_McaMorfCallBack1_c { public: virtual int execute(u16, J3DTransformInfo*) = 0; @@ -289,146 +251,6 @@ public: virtual void execute(u16) = 0; }; -class mDoExt_morf_c - : public J3DMtxCalcNoAnm { -public: - mDoExt_morf_c(); - void setMorf(f32 i_morf); - void frameUpdate(); - - virtual ~mDoExt_morf_c(); - - J3DAnmTransform* getAnm() { return mpAnm; } - void changeAnm(J3DAnmTransform* anm) { mpAnm = anm; } - int getPlayMode() { return mFrameCtrl.getAttribute(); } - void setPlayMode(int mode) { mFrameCtrl.setAttribute(mode); } - BOOL isStop() { return mFrameCtrl.checkState(1) || mFrameCtrl.getRate() == 0.0f; } - bool isLoop() { return mFrameCtrl.checkState(2); } - f32 getStartFrame() { return mFrameCtrl.getStart(); } - void setStartFrame(f32 frame) { mFrameCtrl.setStart(frame); } - f32 getEndFrame() { return mFrameCtrl.getEnd(); } - void setEndFrame(f32 frame) { mFrameCtrl.setEnd(frame); } - f32 getLoopFrame() { return mFrameCtrl.getLoop(); } - void setLoopFrame(f32 frame) { mFrameCtrl.setLoop(frame); } - f32 getPlaySpeed() { return mFrameCtrl.getRate(); } - void setPlaySpeed(f32 speed) { mFrameCtrl.setRate(speed); } - f32 getFrame() { return mFrameCtrl.getFrame(); } - void setFrame(f32 frame) { mFrameCtrl.setFrame((s16)frame); } - void setFrameF(f32 frame) { mFrameCtrl.setFrame(frame); } - BOOL checkFrame(f32 frame) { return mFrameCtrl.checkPass(frame); } - f32 getMorfRatio() { return mCurMorf; } - - /* 0x04 */ J3DModel* mpModel; - /* 0x08 */ J3DAnmTransform* mpAnm; - /* 0x0C */ J3DFrameCtrl mFrameCtrl; - /* 0x20 */ J3DTransformInfo* mpTransformInfo; - /* 0x24 */ Quaternion* mpQuat; - /* 0x28 */ f32 mCurMorf; - /* 0x2C */ f32 mPrevMorf; - /* 0x30 */ f32 mMorfStep; - /* 0x34 */ f32 field_0x34; -}; - -class mDoExt_McaMorfSO : public mDoExt_morf_c { -public: - mDoExt_McaMorfSO(J3DModelData*, mDoExt_McaMorfCallBack1_c*, - mDoExt_McaMorfCallBack2_c*, J3DAnmTransform*, int, f32, int, - int, Z2Creature*, u32, u32); - int create(J3DModelData*, mDoExt_McaMorfCallBack1_c*, mDoExt_McaMorfCallBack2_c*, - J3DAnmTransform*, int, f32, int, int, Z2Creature*, u32, u32); - void setAnm(J3DAnmTransform* i_anm, int i_attr, f32 i_morf, f32 i_rate, - f32 i_start, f32 i_end); - int play(u32, s8); - void updateDL(); - void entryDL(); - void modelCalc(); - void getTransform(u16, J3DTransformInfo*); - void stopZelAnime(); - - virtual ~mDoExt_McaMorfSO(); - virtual void calc(); - - J3DModel* getModel() { return mpModel; } - void offMorfNone() { mMorfNone = false; } - void onMorfNone() { mMorfNone = true; } - inline void setTranslateScale(cXyz& i_scale) { mTranslateScale = i_scale; } - J3DTransformInfo* getOldTransInfo() { return mpTransformInfo; } - Quaternion* getOldQuaternion() { return mpQuat; } - void offTranslate() { mTranslate = true; } - void setTranslateScale(const cXyz& scale) { mTranslateScale = scale; } - -private: - /* 0x38 */ mDoExt_McaMorfCallBack1_c* mpCallback1; - /* 0x3C */ mDoExt_McaMorfCallBack2_c* mpCallback2; - /* 0x40 */ cXyz mTranslateScale; - /* 0x4C */ Z2Creature* mpSound; - /* 0x50 */ void* mpBas; - /* 0x54 */ bool mTranslate; - /* 0x55 */ bool mMorfNone; -}; - -class mDoExt_McaMorf : public mDoExt_morf_c { -public: - mDoExt_McaMorf(J3DModelData*, mDoExt_McaMorfCallBack1_c*, - mDoExt_McaMorfCallBack2_c*, J3DAnmTransform*, int, f32, int, int, - int, void*, u32, u32); - int create(J3DModelData*, mDoExt_McaMorfCallBack1_c*, mDoExt_McaMorfCallBack2_c*, - J3DAnmTransform*, int, f32, int, int, int, void*, u32, u32); - void setAnm(J3DAnmTransform* i_bck, int i_mode, f32 i_morf, f32 i_speed, f32 i_startF, f32 i_endF, void* i_bas); - u32 play(Vec*, u32, s8); - void entryDL(); - void modelCalc(); - void getTransform(u16, J3DTransformInfo*); - - virtual ~mDoExt_McaMorf(); - virtual void calc(); - - J3DModel* getModel() { return mpModel; } - -private: - /* 0x38 */ mDoExt_McaMorfCallBack1_c* mpCallback1; - /* 0x3C */ mDoExt_McaMorfCallBack2_c* mpCallback2; - /* 0x40 */ cXyz mTranslateScale; - /* 0x4C */ mDoExt_zelAnime* mpSound; - /* 0x50 */ bool field_0x50; - /* 0x51 */ bool field_0x51; - /* 0x52 */ bool field_0x52; -}; - -class mDoExt_McaMorf2 : public mDoExt_morf_c { -public: - mDoExt_McaMorf2(J3DModelData*, mDoExt_McaMorfCallBack1_c*, - mDoExt_McaMorfCallBack2_c*, J3DAnmTransform*, J3DAnmTransform*, - int, f32, int, int, Z2Creature*, u32, u32); - int create(J3DModelData*, mDoExt_McaMorfCallBack1_c*, - mDoExt_McaMorfCallBack2_c*, J3DAnmTransform*, J3DAnmTransform*, int, - f32, int, int, Z2Creature*, u32, u32); - void ERROR_EXIT(); - void setAnm(J3DAnmTransform*, J3DAnmTransform*, f32, int, f32, f32, f32, f32); - void setAnmRate(f32); - int play(u32, s8); - void entryDL(); - void modelCalc(); - void stopZelAnime(); - - virtual ~mDoExt_McaMorf2(); - virtual void calc(); - - inline f32 getAnmRate() { return mAnmRate; } - inline void changeAnm(J3DAnmTransform* anm, J3DAnmTransform* anm2) { - mpAnm = anm; - field_0x40 = anm2; - } - inline J3DModel* getModel() { return mpModel; } -private: - /* 0x38 */ mDoExt_McaMorfCallBack1_c* mpCallback1; - /* 0x3C */ mDoExt_McaMorfCallBack2_c* mpCallback2; - /* 0x40 */ J3DAnmTransform* field_0x40; - /* 0x44 */ f32 mAnmRate; - /* 0x48 */ Z2Creature* mpSound; - /* 0x4C */ void* mpBas; -}; - class mDoExt_MtxCalcOldFrame { public: void initOldFrameMorf(f32, u16, u16); @@ -508,6 +330,151 @@ struct mDoExt_MtxCalcAnmBlendTblOld : public mDoExt_MtxCalcAnmBlendTbl { STATIC_ASSERT(sizeof(mDoExt_MtxCalcAnmBlendTblOld) == 0x10); +class mDoExt_zelAnime : public Z2SoundObjAnime { +public: + void* field_0x48; +}; + +class mDoExt_morf_c + : public J3DMtxCalcNoAnm { +public: + mDoExt_morf_c(); + void setMorf(f32 i_morf); + void frameUpdate(); + + virtual ~mDoExt_morf_c(); + + J3DAnmTransform* getAnm() { return mpAnm; } + void changeAnm(J3DAnmTransform* anm) { mpAnm = anm; } + int getPlayMode() { return mFrameCtrl.getAttribute(); } + void setPlayMode(int mode) { mFrameCtrl.setAttribute(mode); } + BOOL isStop() { return mFrameCtrl.checkState(1) || mFrameCtrl.getRate() == 0.0f; } + bool isLoop() { return mFrameCtrl.checkState(2); } + f32 getStartFrame() { return mFrameCtrl.getStart(); } + void setStartFrame(f32 frame) { mFrameCtrl.setStart(frame); } + f32 getEndFrame() { return mFrameCtrl.getEnd(); } + void setEndFrame(f32 frame) { mFrameCtrl.setEnd(frame); } + f32 getLoopFrame() { return mFrameCtrl.getLoop(); } + void setLoopFrame(f32 frame) { mFrameCtrl.setLoop(frame); } + f32 getPlaySpeed() { return mFrameCtrl.getRate(); } + void setPlaySpeed(f32 speed) { mFrameCtrl.setRate(speed); } + f32 getFrame() { return mFrameCtrl.getFrame(); } + void setFrame(f32 frame) { mFrameCtrl.setFrame((s16)frame); } + void setFrameF(f32 frame) { mFrameCtrl.setFrame(frame); } + BOOL checkFrame(f32 frame) { return mFrameCtrl.checkPass(frame); } + f32 getMorfRatio() { return mCurMorf; } + + /* 0x04 */ J3DModel* mpModel; + /* 0x08 */ J3DAnmTransform* mpAnm; + /* 0x0C */ J3DFrameCtrl mFrameCtrl; + /* 0x20 */ J3DTransformInfo* mpTransformInfo; + /* 0x24 */ Quaternion* mpQuat; + /* 0x28 */ f32 mCurMorf; + /* 0x2C */ f32 mPrevMorf; + /* 0x30 */ f32 mMorfStep; + /* 0x34 */ f32 field_0x34; +}; + +class mDoExt_McaMorf : public mDoExt_morf_c { +public: + mDoExt_McaMorf(J3DModelData*, mDoExt_McaMorfCallBack1_c*, + mDoExt_McaMorfCallBack2_c*, J3DAnmTransform*, int, f32, int, int, + int, void*, u32, u32); + int create(J3DModelData*, mDoExt_McaMorfCallBack1_c*, mDoExt_McaMorfCallBack2_c*, + J3DAnmTransform*, int, f32, int, int, int, void*, u32, u32); + void setAnm(J3DAnmTransform* i_bck, int i_mode, f32 i_morf, f32 i_speed, f32 i_startF, f32 i_endF, void* i_bas); + u32 play(Vec*, u32, s8); + void entryDL(); + void modelCalc(); + void getTransform(u16, J3DTransformInfo*); + + virtual ~mDoExt_McaMorf(); + virtual void calc(); + + J3DModel* getModel() { return mpModel; } + +private: + /* 0x38 */ mDoExt_McaMorfCallBack1_c* mpCallback1; + /* 0x3C */ mDoExt_McaMorfCallBack2_c* mpCallback2; + /* 0x40 */ cXyz mTranslateScale; + /* 0x4C */ mDoExt_zelAnime* mpSound; + /* 0x50 */ bool field_0x50; + /* 0x51 */ bool field_0x51; + /* 0x52 */ bool field_0x52; +}; + +class mDoExt_McaMorfSO : public mDoExt_morf_c { +public: + mDoExt_McaMorfSO(J3DModelData*, mDoExt_McaMorfCallBack1_c*, + mDoExt_McaMorfCallBack2_c*, J3DAnmTransform*, int, f32, int, + int, Z2Creature*, u32, u32); + int create(J3DModelData*, mDoExt_McaMorfCallBack1_c*, mDoExt_McaMorfCallBack2_c*, + J3DAnmTransform*, int, f32, int, int, Z2Creature*, u32, u32); + void setAnm(J3DAnmTransform* i_anm, int i_attr, f32 i_morf, f32 i_rate, + f32 i_start, f32 i_end); + int play(u32, s8); + void updateDL(); + void entryDL(); + void modelCalc(); + void getTransform(u16, J3DTransformInfo*); + void stopZelAnime(); + + virtual ~mDoExt_McaMorfSO(); + virtual void calc(); + + J3DModel* getModel() { return mpModel; } + void offMorfNone() { mMorfNone = false; } + void onMorfNone() { mMorfNone = true; } + inline void setTranslateScale(cXyz& i_scale) { mTranslateScale = i_scale; } + J3DTransformInfo* getOldTransInfo() { return mpTransformInfo; } + Quaternion* getOldQuaternion() { return mpQuat; } + void offTranslate() { mTranslate = true; } + void setTranslateScale(const cXyz& scale) { mTranslateScale = scale; } + +private: + /* 0x38 */ mDoExt_McaMorfCallBack1_c* mpCallback1; + /* 0x3C */ mDoExt_McaMorfCallBack2_c* mpCallback2; + /* 0x40 */ cXyz mTranslateScale; + /* 0x4C */ Z2Creature* mpSound; + /* 0x50 */ void* mpBas; + /* 0x54 */ bool mTranslate; + /* 0x55 */ bool mMorfNone; +}; + +class mDoExt_McaMorf2 : public mDoExt_morf_c { +public: + mDoExt_McaMorf2(J3DModelData*, mDoExt_McaMorfCallBack1_c*, + mDoExt_McaMorfCallBack2_c*, J3DAnmTransform*, J3DAnmTransform*, + int, f32, int, int, Z2Creature*, u32, u32); + int create(J3DModelData*, mDoExt_McaMorfCallBack1_c*, + mDoExt_McaMorfCallBack2_c*, J3DAnmTransform*, J3DAnmTransform*, int, + f32, int, int, Z2Creature*, u32, u32); + void ERROR_EXIT(); + void setAnm(J3DAnmTransform*, J3DAnmTransform*, f32, int, f32, f32, f32, f32); + void setAnmRate(f32); + int play(u32, s8); + void entryDL(); + void modelCalc(); + void stopZelAnime(); + + virtual ~mDoExt_McaMorf2(); + virtual void calc(); + + inline f32 getAnmRate() { return mAnmRate; } + inline void changeAnm(J3DAnmTransform* anm, J3DAnmTransform* anm2) { + mpAnm = anm; + field_0x40 = anm2; + } + inline J3DModel* getModel() { return mpModel; } +private: + /* 0x38 */ mDoExt_McaMorfCallBack1_c* mpCallback1; + /* 0x3C */ mDoExt_McaMorfCallBack2_c* mpCallback2; + /* 0x40 */ J3DAnmTransform* field_0x40; + /* 0x44 */ f32 mAnmRate; + /* 0x48 */ Z2Creature* mpSound; + /* 0x4C */ void* mpBas; +}; + struct mDoExt_3Dline_field_0x10_c { s8 x; s8 y; @@ -534,6 +501,46 @@ public: /* 0x1C */ mDoExt_3Dline_field_0x18_c* field_0x1c; }; +class mDoExt_offCupOnAupPacket : public J3DPacket { + virtual void draw(); + virtual ~mDoExt_offCupOnAupPacket(); +}; + +class mDoExt_onCupOffAupPacket : public J3DPacket { + virtual void draw(); + virtual ~mDoExt_onCupOffAupPacket(); +}; + +class mDoExt_invJntPacket : public J3DPacket { +public: + mDoExt_invJntPacket() {} + + virtual void draw(); + virtual ~mDoExt_invJntPacket() {} + + void setJoint(J3DModel* i_model, u16 param_1, u8 param_2) { + field_0x10 = i_model; + field_0x14 = param_1; + field_0x16 = param_2; + } + +private: + /* 0x10 */ J3DModel* field_0x10; + /* 0x14 */ u16 field_0x14; + /* 0x16 */ u8 field_0x16; +}; // Size: 0x18 + +class mDoExt_invisibleModel { +public: + mDoExt_invisibleModel() {} + int create(J3DModel* i_model, u8 param_1); + void entryJoint(cXyz*); + void entryDL(cXyz*); + + /* 0x0 */ J3DModel* mModel; + /* 0x4 */ mDoExt_invJntPacket* mpPackets; +}; + class mDoExt_3DlineMat_c { public: virtual int getMaterialID() = 0; @@ -543,19 +550,27 @@ public: /* 0x4 */ mDoExt_3DlineMat_c* field_0x4; }; -class mDoExt_3DlineMatSortPacket : public J3DPacket { +class mDoExt_3DlineMat0_c : public mDoExt_3DlineMat_c { public: - mDoExt_3DlineMatSortPacket() { mp3DlineMat = NULL; } + int init(u16, u16, int); + void update(int, f32, _GXColor&, u16, dKy_tevstr_c*); + void update(int, _GXColor&, dKy_tevstr_c*); - void reset() { mp3DlineMat = NULL; } - void setMatDark(mDoExt_3DlineMat_c* i_mat) { setMat(i_mat); } - - void setMat(mDoExt_3DlineMat_c*); + virtual int getMaterialID() { return 0; } + virtual void setMaterial(); virtual void draw(); - virtual ~mDoExt_3DlineMatSortPacket() {} + + cXyz* getPos(int param_0) { return field_0x18[param_0].field_0x0; } + f32* getSize(int param_0) { return field_0x18[param_0].field_0x4; } private: - /* 0x10 */ mDoExt_3DlineMat_c* mp3DlineMat; + /* 0x08 */ GXColor field_0x8; + /* 0x0C */ dKy_tevstr_c* field_0xc; + /* 0x10 */ u16 field_0x10; + /* 0x12 */ u16 field_0x12; + /* 0x14 */ u16 field_0x14; + /* 0x16 */ u8 field_0x16; + /* 0x18 */ mDoExt_3Dline_c* field_0x18; }; class dKy_tevstr_c; @@ -582,27 +597,36 @@ private: /* 0x38 */ mDoExt_3Dline_c* mpLines; }; -class mDoExt_3DlineMat0_c : public mDoExt_3DlineMat_c { +class mDoExt_3DlineMat2_c : public mDoExt_3DlineMat_c { public: - int init(u16, u16, int); - void update(int, f32, _GXColor&, u16, dKy_tevstr_c*); - void update(int, _GXColor&, dKy_tevstr_c*); + int getMaterialID() { return 2; } + void setMaterial(); +}; - virtual int getMaterialID() { return 0; } - virtual void setMaterial(); +class mDoExt_3DlineMatSortPacket : public J3DPacket { +public: + mDoExt_3DlineMatSortPacket() { mp3DlineMat = NULL; } + + void reset() { mp3DlineMat = NULL; } + void setMatDark(mDoExt_3DlineMat_c* i_mat) { setMat(i_mat); } + + void setMat(mDoExt_3DlineMat_c*); virtual void draw(); - - cXyz* getPos(int param_0) { return field_0x18[param_0].field_0x0; } - f32* getSize(int param_0) { return field_0x18[param_0].field_0x4; } + virtual ~mDoExt_3DlineMatSortPacket() {} private: - /* 0x08 */ GXColor field_0x8; - /* 0x0C */ dKy_tevstr_c* field_0xc; - /* 0x10 */ u16 field_0x10; - /* 0x12 */ u16 field_0x12; - /* 0x14 */ u16 field_0x14; - /* 0x16 */ u8 field_0x16; - /* 0x18 */ mDoExt_3Dline_c* field_0x18; + /* 0x10 */ mDoExt_3DlineMat_c* mp3DlineMat; +}; + +class mDoExt_cube8pPacket : public J3DPacket { +public: + mDoExt_cube8pPacket(cXyz* i_points, const GXColor& i_color); + + virtual void draw(); + virtual ~mDoExt_cube8pPacket() {} + + /* 0x10 */ cXyz mPoints[8]; + /* 0x70 */ GXColor mColor; }; class mDoExt_cubePacket : public J3DPacket { @@ -618,44 +642,6 @@ public: /* 0x2E */ GXColor mColor; }; -class mDoExt_cylinderPacket : public J3DPacket { -public: - mDoExt_cylinderPacket(cXyz& i_position, f32 i_radius, f32 i_height, const GXColor& i_color, u8 i_clipZ); - - virtual void draw(); - virtual ~mDoExt_cylinderPacket() {} - - /* 0x10 */ cXyz mPosition; - /* 0x1C */ f32 mRadius; - /* 0x20 */ f32 mHeight; - /* 0x24 */ GXColor mColor; - /* 0x28 */ u8 mClipZ; -}; - -class mDoExt_spherePacket : public J3DPacket { -public: - mDoExt_spherePacket(cXyz& i_position, f32 i_size, const GXColor& i_color, u8 i_clipZ); - - virtual void draw(); - virtual ~mDoExt_spherePacket() {} - - /* 0x10 */ cXyz mPosition; - /* 0x1C */ f32 mSize; - /* 0x20 */ GXColor mColor; - /* 0x24 */ u8 mClipZ; -}; - -class mDoExt_cube8pPacket : public J3DPacket { -public: - mDoExt_cube8pPacket(cXyz* i_points, const GXColor& i_color); - - virtual void draw(); - virtual ~mDoExt_cube8pPacket() {} - - /* 0x10 */ cXyz mPoints[8]; - /* 0x70 */ GXColor mColor; -}; - class mDoExt_trianglePacket : public J3DPacket { public: mDoExt_trianglePacket(cXyz* i_points, const GXColor& i_color, u8 i_clipZ); @@ -694,32 +680,6 @@ public: /* 0x2D */ u8 mWidth; }; -class mDoExt_cylinderMPacket : public J3DPacket { -public: - mDoExt_cylinderMPacket(Mtx i_mtx, const GXColor& i_color, u8 i_clipZ); - - virtual void draw(); - virtual ~mDoExt_cylinderMPacket() {} - - /* 0x10 */ Mtx mMatrix; - /* 0x40 */ GXColor mColor; - /* 0x44 */ u8 mClipZ; -}; - -class mDoExt_circlePacket : public J3DPacket { -public: - mDoExt_circlePacket(cXyz& i_position, f32 i_radius, const GXColor& i_color, u8 i_clipZ, u8 i_lineWidth); - - virtual void draw(); - virtual ~mDoExt_circlePacket() {} - - /* 0x10 */ cXyz mPosition; - /* 0x1C */ f32 mRadius; - /* 0x20 */ GXColor mColor; - /* 0x24 */ u8 mClipZ; - /* 0x25 */ u8 mLineWidth; -}; - class mDoExt_ArrowPacket : public J3DPacket { public: mDoExt_ArrowPacket(cXyz& i_position, cXyz& param_1, const GXColor& i_color, u8 i_clipZ, u8 i_lineWidth); @@ -747,6 +707,59 @@ public: /* 0x21 */ u8 mLineWidth; }; +class mDoExt_circlePacket : public J3DPacket { +public: + mDoExt_circlePacket(cXyz& i_position, f32 i_radius, const GXColor& i_color, u8 i_clipZ, u8 i_lineWidth); + + virtual void draw(); + virtual ~mDoExt_circlePacket() {} + + /* 0x10 */ cXyz mPosition; + /* 0x1C */ f32 mRadius; + /* 0x20 */ GXColor mColor; + /* 0x24 */ u8 mClipZ; + /* 0x25 */ u8 mLineWidth; +}; + +class mDoExt_spherePacket : public J3DPacket { +public: + mDoExt_spherePacket(cXyz& i_position, f32 i_size, const GXColor& i_color, u8 i_clipZ); + + virtual void draw(); + virtual ~mDoExt_spherePacket() {} + + /* 0x10 */ cXyz mPosition; + /* 0x1C */ f32 mSize; + /* 0x20 */ GXColor mColor; + /* 0x24 */ u8 mClipZ; +}; + +class mDoExt_cylinderPacket : public J3DPacket { +public: + mDoExt_cylinderPacket(cXyz& i_position, f32 i_radius, f32 i_height, const GXColor& i_color, u8 i_clipZ); + + virtual void draw(); + virtual ~mDoExt_cylinderPacket() {} + + /* 0x10 */ cXyz mPosition; + /* 0x1C */ f32 mRadius; + /* 0x20 */ f32 mHeight; + /* 0x24 */ GXColor mColor; + /* 0x28 */ u8 mClipZ; +}; + +class mDoExt_cylinderMPacket : public J3DPacket { +public: + mDoExt_cylinderMPacket(Mtx i_mtx, const GXColor& i_color, u8 i_clipZ); + + virtual void draw(); + virtual ~mDoExt_cylinderMPacket() {} + + /* 0x10 */ Mtx mMatrix; + /* 0x40 */ GXColor mColor; + /* 0x44 */ u8 mClipZ; +}; + inline void mDoExt_bckAnmRemove(J3DModelData* i_modelData) { i_modelData->getJointNodePointer(0)->setMtxCalc(NULL); } @@ -757,6 +770,8 @@ void mDoExt_destroySolidHeap(JKRSolidHeap* i_heap); u32 mDoExt_adjustSolidHeap(JKRSolidHeap* i_heap); void mDoExt_restoreCurrentHeap(); JKRExpHeap* mDoExt_getGameHeap(); +void mDoExt_setSafeGameHeapSize(); +size_t mDoExt_getSafeGameHeapSize(); void mDoExt_destroySolidHeap(JKRSolidHeap* i_heap); JKRHeap* mDoExt_setCurrentHeap(JKRHeap* i_heap); JKRExpHeap* mDoExt_getArchiveHeap(); @@ -768,13 +783,13 @@ JKRExpHeap* mDoExt_getZeldaHeap(); JKRExpHeap* mDoExt_getJ2dHeap(); JKRExpHeap* mDoExt_getHostIOHeap(); JKRExpHeap* mDoExt_getDbPrintHeap(); -JKRExpHeap* mDoExt_createDbPrintHeap(u32 heapSize, JKRHeap* i_heap); -JKRAssertHeap* mDoExt_createAssertHeap(JKRHeap* i_heap); -JKRExpHeap* mDoExt_createCommandHeap(u32 heapSize, JKRHeap* i_heap); -JKRExpHeap* mDoExt_createArchiveHeap(u32 heapSize, JKRHeap* i_heap); -JKRExpHeap* mDoExt_createJ2dHeap(u32 heapSize, JKRHeap* i_heap); -JKRExpHeap* mDoExt_createZeldaHeap(u32 heapSize, JKRHeap* i_heap); -JKRExpHeap* mDoExt_createGameHeap(u32 heapSize, JKRHeap* i_heap); +JKRExpHeap* mDoExt_createDbPrintHeap(u32 heapSize, JKRHeap* parentHeap); +JKRAssertHeap* mDoExt_createAssertHeap(JKRHeap* parentHeap); +JKRExpHeap* mDoExt_createCommandHeap(u32 heapSize, JKRHeap* parentHeap); +JKRExpHeap* mDoExt_createArchiveHeap(u32 heapSize, JKRHeap* parentHeap); +JKRExpHeap* mDoExt_createJ2dHeap(u32 heapSize, JKRHeap* parentHeap); +JKRExpHeap* mDoExt_createZeldaHeap(u32 heapSize, JKRHeap* parentHeap); +JKRExpHeap* mDoExt_createGameHeap(u32 heapSize, JKRHeap* parentHeap); JKRSolidHeap* mDoExt_createSolidHeapToCurrent(JKRHeap** o_heap, u32 i_size, JKRHeap* i_parent, u32 i_alignment); JKRSolidHeap* mDoExt_createSolidHeapToCurrent(u32 i_size, JKRHeap* i_parent, u32 i_alignment); @@ -810,9 +825,10 @@ void mDoExt_setupShareTexture(J3DModelData* i_modelData, J3DModelData* i_shareMo void mDoExt_btkAnmRemove(J3DModelData* i_modelData); void mDoExt_modelTexturePatch(J3DModelData* i_modelData); -#if VERSION == VERSION_SHIELD_DEBUG -s32 mDoExt_getSafeZeldaHeapSize(); -void mDoExt_addSafeZeldaHeapSize(s32); +void mDoExt_setSafeZeldaHeapSize(); +void mDoExt_addSafeZeldaHeapSize(intptr_t); +intptr_t mDoExt_getSafeZeldaHeapSize(); +#if DEBUG JKRHeap* mDoExt_createHostIOHeap(u32, JKRHeap*); #endif @@ -822,9 +838,33 @@ JUTFont* mDoExt_getSubFont(); JUTFont* mDoExt_getRubyFont(); void mDoExt_removeSubFont(); +class DummyCheckHeap : public JKRDisposer { +public: + DummyCheckHeap(); + ~DummyCheckHeap(); + int isVirgin(); + JKRHeap* getHeap(); + void setHeap(JKRHeap*); + + /* 0x18 */ void* mAlloc; + /* 0x18 */ int mSize; + /* 0x20 */ JKRHeap* mHeap; +}; + +int DummyCheckHeap_init(); + +int DummyCheckHeap_create(); + +void DummyCheckHeap_destroy(); + +int DummyCheckHeap_isVirgin(); + +void DummyCheckHeap_check(); + extern JKRExpHeap* zeldaHeap; extern JKRExpHeap* gameHeap; extern JKRExpHeap* archiveHeap; extern JKRExpHeap* commandHeap; +extern DummyCheckHeap* dch; #endif /* M_DO_M_DO_EXT_H */ diff --git a/include/m_Do/m_Do_main.h b/include/m_Do/m_Do_main.h index 1229687094..99dc3876b8 100644 --- a/include/m_Do/m_Do_main.h +++ b/include/m_Do/m_Do_main.h @@ -6,6 +6,8 @@ class JKRExpHeap; +extern OSThread mainThread; + void version_check(); s32 LOAD_COPYDATE(void*); diff --git a/include/m_Do/m_Do_mtx.h b/include/m_Do/m_Do_mtx.h index 793416ca4e..01085fb9a0 100644 --- a/include/m_Do/m_Do_mtx.h +++ b/include/m_Do/m_Do_mtx.h @@ -5,6 +5,9 @@ #include "SSystem/SComponent/c_xyz.h" #include +extern u8 g_printCurrentHeapDebug; +extern u8 g_printOtherHeapDebug; + void mDoMtx_XYZrotS(Mtx, s16, s16, s16); void mDoMtx_XYZrotM(Mtx, s16, s16, s16); void mDoMtx_ZXYrotS(Mtx, s16, s16, s16); diff --git a/src/f_op/f_op_actor_mng.cpp b/src/f_op/f_op_actor_mng.cpp index c56d92c086..c288353949 100644 --- a/src/f_op/f_op_actor_mng.cpp +++ b/src/f_op/f_op_actor_mng.cpp @@ -392,15 +392,6 @@ int fopAcM::HeapAdjustMargin = 0x10000; #endif -struct DummyCheckHeap { - JKRHeap* getHeap(); - void setHeap(JKRHeap* heap); - - /* 0x0 */ JKRHeap* dummyHeap; -}; - -static DummyCheckHeap* dch = NULL; - bool fopAcM_entrySolidHeap_(fopAc_ac_c* i_actor, heapCallbackFunc i_heapCallback, u32 i_size) { #if DEBUG s16 procProfName = fopAcM_GetProfName(i_actor); diff --git a/src/m_Do/m_Do_ext.cpp b/src/m_Do/m_Do_ext.cpp index 2a0794cc35..ab4a10c357 100644 --- a/src/m_Do/m_Do_ext.cpp +++ b/src/m_Do/m_Do_ext.cpp @@ -20,9 +20,18 @@ #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 +namespace m_Do_ext { +u8 CurrentHeapAdjustVerbose; +u8 HeapAdjustVerbose; +u8 HeapAdjustQuiet; +} + +static intptr_t safeGameHeapSize = -1; + static void mDoExt_setJ3DData(Mtx mtx, const J3DTransformInfo* transformInfo, u16 param_2) { bool local_28; if (cM3d_IsZero(transformInfo->mScale.x - 1.0f) && cM3d_IsZero(transformInfo->mScale.y - 1.0f) && cM3d_IsZero(transformInfo->mScale.z - 1.0f)) { @@ -37,29 +46,42 @@ static void mDoExt_setJ3DData(Mtx mtx, const J3DTransformInfo* transformInfo, u1 mtx[2][3] = transformInfo->mTranslate.z; if (!local_28) { - mtx[0][0] *= transformInfo->mScale.x; - mtx[0][1] *= transformInfo->mScale.y; - mtx[0][2] *= transformInfo->mScale.z; - mtx[1][0] *= transformInfo->mScale.x; - mtx[1][1] *= transformInfo->mScale.y; - mtx[1][2] *= transformInfo->mScale.z; - mtx[2][0] *= transformInfo->mScale.x; - mtx[2][1] *= transformInfo->mScale.y; - mtx[2][2] *= transformInfo->mScale.z; + f32* mtx_p = (f32*)mtx; + *mtx_p *= transformInfo->mScale.x; + mtx_p++; + *mtx_p *= transformInfo->mScale.y; + mtx_p++; + *mtx_p *= transformInfo->mScale.z; + mtx_p += 2; + *mtx_p *= transformInfo->mScale.x; + mtx_p++; + *mtx_p *= transformInfo->mScale.y; + mtx_p++; + *mtx_p *= transformInfo->mScale.z; + mtx_p += 2; + *mtx_p *= transformInfo->mScale.x; + mtx_p++; + *mtx_p *= transformInfo->mScale.y; + mtx_p++; + *mtx_p *= transformInfo->mScale.z; } if (j3dSys.getModel()->getModelData()->getJointNodePointer(param_2)->getScaleCompensate() == 1) { - f32 x = 1.0f / J3DSys::mParentS.x; - f32 y = 1.0f / J3DSys::mParentS.y; - f32 z = 1.0f / J3DSys::mParentS.z; - mtx[0][0] *= x; - mtx[0][1] *= x; - mtx[0][2] *= x; - mtx[1][0] *= y; - mtx[1][1] *= y; - mtx[1][2] *= y; - mtx[2][0] *= z; - mtx[2][1] *= z; - mtx[2][2] *= z; + f32* mtx_p = (f32*)mtx; + Vec sp0C; + sp0C.x = 1.0f / J3DSys::mParentS.x; + sp0C.y = 1.0f / J3DSys::mParentS.y; + sp0C.z = 1.0f / J3DSys::mParentS.z; + *mtx_p++ *= sp0C.x; + *mtx_p++ *= sp0C.x; + *mtx_p++ *= sp0C.x; + *mtx_p++; + *mtx_p++ *= sp0C.y; + *mtx_p++ *= sp0C.y; + *mtx_p++ *= sp0C.y; + *mtx_p++; + *mtx_p++ *= sp0C.z; + *mtx_p++ *= sp0C.z; + *mtx_p++ *= sp0C.z; } mDoMtx_concat(J3DSys::mCurrentMtx, mtx, J3DSys::mCurrentMtx); j3dSys.getModel()->setAnmMtx(param_2, J3DSys::mCurrentMtx); @@ -108,18 +130,14 @@ int mDoExt_baseAnm::play() { int mDoExt_bpkAnm::init(J3DMaterialTable* i_matTable, J3DAnmColor* i_bpk, int i_anmPlay, int i_attribute, f32 i_rate, s16 i_startF, s16 i_endF) { + JUT_ASSERT(371, (i_anmPlay == FALSE || getFrameCtrl() != NULL || isCurrentSolidHeap()) && i_matTable != NULL && i_bpk != NULL); + mpAnm = i_bpk; mpAnm->searchUpdateMaterialID(i_matTable); if (i_anmPlay) { - int attribute; - if (i_attribute < 0) { - attribute = mpAnm->getAttribute(); - } else { - attribute = i_attribute; - } - - return initPlay(mpAnm->getFrameMax(), attribute, i_rate, i_startF, i_endF); + return initPlay(mpAnm->getFrameMax(), i_attribute < 0 ? mpAnm->getAttribute() : i_attribute, + i_rate, i_startF, i_endF); } return 1; @@ -132,18 +150,13 @@ void mDoExt_bpkAnm::entry(J3DMaterialTable* i_matTable, f32 i_frame) { int mDoExt_btpAnm::init(J3DMaterialTable* i_matTable, J3DAnmTexPattern* i_btp, int i_anmPlay, int i_attribute, f32 i_rate, s16 i_startF, s16 i_endF) { + JUT_ASSERT(420, (i_anmPlay == FALSE || getFrameCtrl() != NULL || isCurrentSolidHeap()) && i_matTable != NULL && i_btp != NULL); + mpAnm = i_btp; mpAnm->searchUpdateMaterialID(i_matTable); if (i_anmPlay) { - int attribute; - if (i_attribute < 0) { - attribute = mpAnm->getAttribute(); - } else { - attribute = i_attribute; - } - - return initPlay(mpAnm->getFrameMax(), attribute, i_rate, i_startF, i_endF); + return initPlay(mpAnm->getFrameMax(), i_attribute < 0 ? mpAnm->getAttribute() : i_attribute, i_rate, i_startF, i_endF); } return 1; @@ -156,18 +169,13 @@ void mDoExt_btpAnm::entry(J3DMaterialTable* i_matTable, s16 i_frame) { int mDoExt_btkAnm::init(J3DMaterialTable* i_matTable, J3DAnmTextureSRTKey* i_btk, int i_anmPlay, int i_attribute, f32 i_rate, s16 i_startF, s16 i_endF) { + JUT_ASSERT(468, (i_anmPlay == FALSE || getFrameCtrl() != NULL || isCurrentSolidHeap()) && i_matTable != NULL && i_btk != NULL); + mpAnm = i_btk; mpAnm->searchUpdateMaterialID(i_matTable); if (i_anmPlay) { - int attribute; - if (i_attribute < 0) { - attribute = mpAnm->getAttribute(); - } else { - attribute = i_attribute; - } - - return initPlay(mpAnm->getFrameMax(), attribute, i_rate, i_startF, i_endF); + return initPlay(mpAnm->getFrameMax(), i_attribute < 0 ? mpAnm->getAttribute() : i_attribute, i_rate, i_startF, i_endF); } return 1; @@ -180,18 +188,13 @@ void mDoExt_btkAnm::entry(J3DMaterialTable* i_matTable, f32 i_frame) { int mDoExt_brkAnm::init(J3DMaterialTable* i_matTable, J3DAnmTevRegKey* i_brk, int i_anmPlay, int i_attribute, f32 i_rate, s16 i_startF, s16 i_endF) { + JUT_ASSERT(516, (i_anmPlay == FALSE || getFrameCtrl() != NULL || isCurrentSolidHeap()) && i_matTable != NULL && i_brk != NULL); + mpAnm = i_brk; mpAnm->searchUpdateMaterialID(i_matTable); if (i_anmPlay) { - int attribute; - if (i_attribute < 0) { - attribute = mpAnm->getAttribute(); - } else { - attribute = i_attribute; - } - - return initPlay(mpAnm->getFrameMax(), attribute, i_rate, i_startF, i_endF); + return initPlay(mpAnm->getFrameMax(), i_attribute < 0 ? mpAnm->getAttribute() : i_attribute, i_rate, i_startF, i_endF); } return 1; @@ -202,9 +205,14 @@ void mDoExt_brkAnm::entry(J3DMaterialTable* i_matTable, f32 i_frame) { i_matTable->entryTevRegAnimator(mpAnm); } +void dummy3(J3DModel* i_model, void* i_bva, bool i_modify) { + JUT_ASSERT(0, (i_modify || isCurrentSolidHeap()) && i_model != NULL && i_bva != NULL); +} + int mDoExt_bckAnm::init(J3DAnmTransform* i_bck, int i_play, int i_attr, f32 i_rate, s16 i_startF, s16 i_endF, bool i_modify) { JUT_ASSERT(614, (i_modify || isCurrentSolidHeap()) && i_bck != NULL); + mAnm = i_bck; if (!i_modify) { mpMtxCalc = new J3DMtxCalcAnimation, J3DMtxCalcJ3DSysInitMaya>(mAnm); @@ -215,17 +223,21 @@ int mDoExt_bckAnm::init(J3DAnmTransform* i_bck, int i_play, int i_attr, f32 i_ra mpMtxCalc->setAnmTransform(mAnm); } if (i_play) { - i_attr = i_attr < 0 ? mAnm->getAttribute() : i_attr; - return initPlay(mAnm->getFrameMax(), i_attr, i_rate, i_startF, i_endF); + return initPlay(mAnm->getFrameMax(), i_attr < 0 ? mAnm->getAttribute() : i_attr, i_rate, i_startF, i_endF); } return 1; } void mDoExt_bckAnm::changeBckOnly(J3DAnmTransform* i_bck) { mAnm = i_bck; + JUT_ASSERT(646, mAnm != NULL); mpMtxCalc->setAnmTransform(mAnm); } +void dummy4(J3DModel* i_model, void* i_bxa, bool i_modify) { + JUT_ASSERT(0, (i_modify || isCurrentSolidHeap()) && i_model != NULL && i_bxa != NULL); +} + void mDoExt_bckAnm::entry(J3DModelData* i_modelData, f32 i_frame) { mAnm->setFrame(i_frame); i_modelData->getJointNodePointer(0)->setMtxCalc(mpMtxCalc); @@ -238,18 +250,13 @@ void mDoExt_bckAnm::entryJoint(J3DModelData* i_modelData, u16 i_jntNo, f32 i_fra int mDoExt_blkAnm::init(J3DDeformData* i_deformData, J3DAnmCluster* i_blk, int i_anmPlay, int i_attribute, f32 i_rate, s16 i_start, s16 param_6) { + JUT_ASSERT(747, (i_anmPlay == FALSE || getFrameCtrl() != NULL || isCurrentSolidHeap()) && i_deformData != NULL && i_blk != NULL); + mpAnm = i_blk; i_deformData->setAnm(mpAnm); if (i_anmPlay) { - int attribute; - if (i_attribute < 0) { - attribute = mpAnm->getAttribute(); - } else { - attribute = i_attribute; - } - - return initPlay(mpAnm->getFrameMax(), attribute, i_rate, i_start, param_6); + return initPlay(mpAnm->getFrameMax(), i_attribute < 0 ? mpAnm->getAttribute() : i_attribute, i_rate, i_start, param_6); } return 1; @@ -282,18 +289,34 @@ void mDoExt_modelTexturePatch(J3DModelData* i_modelData) { } static void dummy1() { + ((J3DDrawPacket*)NULL)->beginPatch(); ((J3DTevBlock*)NULL)->patch(); - ((J3DColorBlock*)NULL)->patchLight(); + ((J3DMaterial*)NULL)->getPEBlock(); + ((J3DMaterial*)NULL)->getTexGenBlock(); + ((J3DMaterial*)NULL)->getColorBlock()->patchLight(); ((J3DPEBlock*)NULL)->patch(); + ((J3DDrawPacket*)NULL)->endPatch(); +} + +static inline void modelMtxErrorCheck(J3DModel* i_model) { +#if DEBUG + if (i_model->getBaseTRMtx()[0][0] == 3.4028235e38f) { + i_model->getBaseTRMtx()[0][0] = 1.0f; + JUT_WARN(883, "%s", "Model Matrix Not Initialize !\n"); + } +#endif } static void mDoExt_modelDiff(J3DModel* i_model) { + modelMtxErrorCheck(i_model); i_model->calcMaterial(); i_model->diff(); i_model->entry(); } void mDoExt_modelUpdate(J3DModel* i_model) { + modelMtxErrorCheck(i_model); + J3DModelData* model_data = i_model->getModelData(); if (model_data->getMaterialNodePointer(0)->getSharedDisplayListObj() != NULL && @@ -310,6 +333,8 @@ void mDoExt_modelUpdate(J3DModel* i_model) { } void mDoExt_modelUpdateDL(J3DModel* i_model) { + modelMtxErrorCheck(i_model); + J3DModelData* model_data = i_model->getModelData(); if (model_data->getMaterialNodePointer(0)->getSharedDisplayListObj() != NULL && @@ -327,6 +352,8 @@ void mDoExt_modelUpdateDL(J3DModel* i_model) { } void mDoExt_modelEntryDL(J3DModel* i_model) { + modelMtxErrorCheck(i_model); + J3DModelData* model_data = i_model->getModelData(); if (model_data->getMaterialNodePointer(0)->getSharedDisplayListObj() != NULL && @@ -384,20 +411,24 @@ static void dummy2() { FORCE_DONT_INLINE; FORCE_DONT_INLINE; + ((J3DMaterial*)NULL)->getMaterialMode(); + J3DGXColor gxColor; J3DColorChan colorChan; J3DTexCoord texCoord; J3DGXColorS10 gxColorS10; + J3DTevStageInfo tevStageInfo; + J3DTevStage* stage_p = NULL; + stage_p->setTevStageInfo(tevStageInfo); + J3DTevStage tevStage; + J3DIndTevStage indStage; J3DIndTevStage indTevStage; J3DTevOrder tevOrder; J3DTevSwapModeTable tevSwapModeTable; J3DIndTexOrder indTexOrder; - J3DTevStage* tevStage_p = NULL; - J3DTevStageInfo tevStageInfo; - tevStage_p->setTevStageInfo(tevStageInfo); - J3DTevStage tevStage; - + J3DIndTexMtx* indTexMtx = new J3DIndTexMtx(); + J3DIndTexCoordScale* indTexCoordScale = new J3DIndTexCoordScale(); J3DColorBlock* colorBlock = NULL; colorBlock->setColorChanNum((u8)NULL); colorBlock->setMatColor(0, gxColor); @@ -422,10 +453,8 @@ static void dummy2() { J3DIndBlock* indBlock = NULL; indBlock->setIndTexStageNum(0); - J3DIndTexMtx indTexMtx; - indBlock->setIndTexMtx(0, indTexMtx); - J3DIndTexCoordScale indTexCoordScale; - indBlock->setIndTexCoordScale(0, indTexCoordScale); + indBlock->setIndTexMtx(0, *indTexMtx); + indBlock->setIndTexCoordScale(0, *indTexCoordScale); J3DPEBlock* peBlock = NULL; J3DAlphaComp alphaComp; @@ -463,12 +492,17 @@ static void dummy2() { indBlock->getIndTexMtx(0); indBlock->getIndTexCoordScale(0); + indTexOrder.getMap(); + indTexOrder.getCoord(); + peBlock = NULL; peBlock->getFog(); peBlock->getAlphaComp(); peBlock->getBlend(); peBlock->getZMode(); peBlock->getZCompLoc(); + + ((J3DMaterial*)NULL)->setMaterialAnm(NULL); } int mDoExt_invisibleModel::create(J3DModel* i_model, u8 param_1) { @@ -533,8 +567,7 @@ void mDoExt_setupShareTexture(J3DModelData* i_modelData, J3DModelData* i_shareMo bool bvar = false; for (u16 i = 0; i < texture->getNum(); i++) { - ResTIMG* res = texture->getResTIMG(i); - if (res->imageOffset == 0) { + if (texture->getResTIMG(i)->imageOffset == 0) { for (u16 j = 0; j < shareTexture->getNum(); j++) { if (!strcmp(textureName->getName(i), shareTextureName->getName(j))) { JUT_ASSERT(1564, shareTexture->getResTIMG(j)->imageOffset != 0); @@ -584,12 +617,13 @@ void mDoExt_setupStageTexture(J3DModelData* i_modelData) { bool set_timg = false; for (u16 i = 0; i < texture_p->getNum(); i++) { - ResTIMG* img = texture_p->getResTIMG(i); - if (img->imageOffset == 0) { + if (texture_p->getResTIMG(i)->imageOffset == 0) { char res_name[64]; snprintf(res_name, sizeof(res_name), "%s.bti", tex_name_p->getName(i)); + OS_REPORT("%d:設定テクスチャー名<%s>\n", i, res_name); ResTIMG* timg = (ResTIMG*)dComIfG_getStageRes(res_name); + JUT_ASSERT(1623, timg != NULL); texture_p->setResTIMG(i, *timg); set_timg = true; } @@ -625,8 +659,10 @@ void mDoExt_setupStageTexture(J3DModelData* i_modelData) { static JKRAssertHeap* AssertHeap; -JKRAssertHeap* mDoExt_createAssertHeap(JKRHeap* i_heap) { - return AssertHeap = JKRAssertHeap::create(i_heap); +JKRAssertHeap* mDoExt_createAssertHeap(JKRHeap* parentHeap) { + JUT_ASSERT(1666, AssertHeap == NULL); + AssertHeap = JKRAssertHeap::create(parentHeap); + return AssertHeap; } JKRAssertHeap* mDoExt_getAssertHeap() { @@ -635,8 +671,10 @@ JKRAssertHeap* mDoExt_getAssertHeap() { static JKRExpHeap* DbPrintHeap; -JKRExpHeap* mDoExt_createDbPrintHeap(u32 heapSize, JKRHeap* i_heap) { - return DbPrintHeap = JKRExpHeap::create(heapSize, i_heap, true); +JKRExpHeap* mDoExt_createDbPrintHeap(u32 heapSize, JKRHeap* parentHeap) { + JUT_ASSERT(1693, DbPrintHeap == NULL || heapSize == 0); + DbPrintHeap = JKRExpHeap::create(heapSize, parentHeap, true); + return DbPrintHeap; } JKRExpHeap* mDoExt_getDbPrintHeap() { @@ -645,8 +683,9 @@ JKRExpHeap* mDoExt_getDbPrintHeap() { JKRExpHeap* gameHeap; -JKRExpHeap* mDoExt_createGameHeap(u32 heapSize, JKRHeap* i_heap) { - gameHeap = JKRExpHeap::create(heapSize, i_heap, true); +JKRExpHeap* mDoExt_createGameHeap(u32 heapSize, JKRHeap* parentHeap) { + JUT_ASSERT(1739, gameHeap == NULL || heapSize == 0); + gameHeap = JKRExpHeap::create(heapSize, parentHeap, true); gameHeap->setAllocationMode(JKRExpHeap::ALLOC_MODE_1); return gameHeap; } @@ -655,44 +694,114 @@ JKRExpHeap* mDoExt_getGameHeap() { return gameHeap; } -JKRExpHeap* zeldaHeap; +void mDoExt_setSafeGameHeapSize() { + if (safeGameHeapSize < 0) { + safeGameHeapSize = mDoExt_getGameHeap()->getTotalUsedSize(); + OS_REPORT("++++++++++++++++++++++++++++++ GameHeap Rock !!\n"); + mDoExt_getGameHeap()->dump(); + mDoExt_getGameHeap()->changeGroupID(7); + } +} -JKRExpHeap* mDoExt_createZeldaHeap(u32 heapSize, JKRHeap* i_heap) { - return zeldaHeap = JKRExpHeap::create(heapSize, i_heap, true); +void dummy5() { + JUT_ASSERT(0, safeGameHeapSize >= 0); + OS_REPORT("++++++++++++++++++++++++++++++ safeGameHeapSize <%x>\n", safeGameHeapSize); +} + +size_t mDoExt_getSafeGameHeapSize() { + return safeGameHeapSize; +} + +JKRExpHeap* zeldaHeap; +intptr_t safeZeldaHeapSize = -1; + +JKRExpHeap* mDoExt_createZeldaHeap(u32 heapSize, JKRHeap* parentHeap) { + JUT_ASSERT(1815, zeldaHeap == NULL || heapSize == 0); + zeldaHeap = JKRExpHeap::create(heapSize, parentHeap, true); + return zeldaHeap; } JKRExpHeap* mDoExt_getZeldaHeap() { return zeldaHeap; } -#if DEBUG -s32 safeZeldaHeapSize = -1; +void mDoExt_setSafeZeldaHeapSize() { + if (safeGameHeapSize < 0) { + safeGameHeapSize = mDoExt_getGameHeap()->getTotalUsedSize(); + OS_REPORT("++++++++++++++++++++++++++++++ ZeldaHeap Rock !!\n"); + mDoExt_getGameHeap()->dump(); + mDoExt_getGameHeap()->changeGroupID(7); + } +} -s32 mDoExt_getSafeZeldaHeapSize() { +void mDoExt_addSafeZeldaHeapSize(intptr_t size) { + JUT_ASSERT(1869, safeZeldaHeapSize >= 0); + safeZeldaHeapSize -= size; + OS_REPORT("++++++++++++++++++++++++++++++ addSafeZeldaHeapSize <%x>\n", -size); + mDoExt_getZeldaHeap()->changeGroupID(mDoExt_getZeldaHeap()->getCurrentGroupId() + 1); +} + +intptr_t mDoExt_getSafeZeldaHeapSize() { return safeZeldaHeapSize; } -#endif JKRExpHeap* commandHeap; +intptr_t safeCommandHeapSize = -1; -JKRExpHeap* mDoExt_createCommandHeap(u32 heapSize, JKRHeap* i_heap) { - return commandHeap = JKRExpHeap::create(heapSize, i_heap, true); +JKRExpHeap* mDoExt_createCommandHeap(u32 heapSize, JKRHeap* parentHeap) { + JUT_ASSERT(1894, commandHeap == 0 || heapSize == 0); + commandHeap = JKRExpHeap::create(heapSize, parentHeap, true); + return commandHeap; } JKRExpHeap* mDoExt_getCommandHeap() { return commandHeap; } -JKRExpHeap* archiveHeap; +void mDoExt_setSafeCommandHeapSize() { + if (safeCommandHeapSize < 0) { + safeCommandHeapSize = mDoExt_getGameHeap()->getTotalUsedSize(); + OS_REPORT("++++++++++++++++++++++++++++++ CommandHeap Rock !!\n"); + mDoExt_getGameHeap()->dump(); + mDoExt_getGameHeap()->changeGroupID(7); + } +} -JKRExpHeap* mDoExt_createArchiveHeap(u32 heapSize, JKRHeap* i_heap) { - archiveHeap = JKRExpHeap::create(heapSize, i_heap, true); +intptr_t mDoExt_getSafeCommandHeapSize() { + return safeCommandHeapSize; +} + +JKRExpHeap* archiveHeap; +intptr_t safeArchiveHeapSize = -1; + +JKRExpHeap* mDoExt_createArchiveHeap(u32 heapSize, JKRHeap* parentHeap) { + JUT_ASSERT(1966, archiveHeap == 0 || heapSize == 0); + archiveHeap = JKRExpHeap::create(heapSize, parentHeap, true); archiveHeap->setAllocationMode(JKRExpHeap::ALLOC_MODE_1); return archiveHeap; } +void mDoExt_setSafeArchiveHeapSize() { + if (safeArchiveHeapSize < 0) { + safeArchiveHeapSize = mDoExt_getArchiveHeap()->getTotalUsedSize(); + OS_REPORT("++++++++++++++++++++++++++++++ ArchiveHeap Rock !!\n"); + mDoExt_getArchiveHeap()->dump(); + mDoExt_getArchiveHeap()->changeGroupID(7); + } +} + +void dummy6() { + JUT_ASSERT(0, safeArchiveHeapSize >= 0); + OS_REPORT("++++++++++++++++++++++++++++++ safeArchiveHeapSize <%x>\n", safeArchiveHeapSize); +} + +intptr_t mDoExt_getSafeArchiveHeapSize() { + return safeArchiveHeapSize; +} + JKRExpHeap* mDoExt_getArchiveHeap() { - return archiveHeap; + JKRExpHeap* heap = archiveHeap; + return heap; } JKRExpHeap* mDoExt_getArchiveHeapPtr() { @@ -700,37 +809,80 @@ JKRExpHeap* mDoExt_getArchiveHeapPtr() { } static JKRExpHeap* j2dHeap; +intptr_t safeJ2dHeapSize = -1; -JKRExpHeap* mDoExt_createJ2dHeap(u32 heapSize, JKRHeap* i_heap) { - j2dHeap = JKRExpHeap::create(heapSize, i_heap, true); +JKRExpHeap* mDoExt_createJ2dHeap(u32 heapSize, JKRHeap* parentHeap) { + JUT_ASSERT(2059, j2dHeap == 0 || heapSize == 0); + j2dHeap = JKRExpHeap::create(heapSize, parentHeap, true); j2dHeap->setAllocationMode(JKRExpHeap::ALLOC_MODE_1); return j2dHeap; } +void mDoExt_setSafeJ2dHeapSize() { + if (safeJ2dHeapSize < 0) { + safeJ2dHeapSize = mDoExt_getJ2dHeap()->getTotalUsedSize(); + OS_REPORT("++++++++++++++++++++++++++++++ j2dHeap Rock !!\n"); + mDoExt_getJ2dHeap()->dump(); + mDoExt_getJ2dHeap()->changeGroupID(7); + } +} + +void dummy7() { + JUT_ASSERT(0, safeJ2dHeapSize >= 0); + OS_REPORT("++++++++++++++++++++++++++++++ safeJ2dHeapSize <%x>\n", safeJ2dHeapSize); +} + +intptr_t mDoExt_getSafeJ2dHeapSize() { + return safeJ2dHeapSize; +} + JKRExpHeap* mDoExt_getJ2dHeap() { - return j2dHeap; + JKRExpHeap* heap = j2dHeap; + return heap; } static JKRExpHeap* HostIOHeap; +JKRHeap* mDoExt_createHostIOHeap(u32 heapSize, JKRHeap* parentHeap) { + JUT_ASSERT(2142, HostIOHeap == 0 || heapSize == 0); + HostIOHeap = JKRExpHeap::create(heapSize, parentHeap, true); + return HostIOHeap; +} + JKRExpHeap* mDoExt_getHostIOHeap() { return HostIOHeap; } -JKRSolidHeap* mDoExt_createSolidHeap(u32 i_size, JKRHeap* i_heap, u32 i_alignment) { - if (i_heap == NULL) { - i_heap = JKRGetCurrentHeap(); +static JKRHeap* situationHeap; + +void dummy8(u32 heapSize) { + int situationHeapLocked = 0; + JUT_ASSERT(0, situationHeap == 0 || heapSize == 0); + JUT_ASSERT(0, situationHeapLocked == 0); + JUT_ASSERT(0, situationHeap); + JUT_ASSERT(0, situationHeapLocked); + JKRHeap* heap = NULL; + JUT_ASSERT(0, heap == situationHeap); +} + +static JKRHeap* mDoExt_SaveCurrentHeap; + +JKRSolidHeap* mDoExt_createSolidHeap(u32 i_size, JKRHeap* i_parent, u32 i_alignment) { + if (i_parent == NULL) { + i_parent = JKRGetCurrentHeap(); } JKRSolidHeap* createdHeap; if (i_size == 0 || i_size == -1) { #if DEBUG - if (mDoExt::HeapAdjustVerbose != 0) { + if (mDoExt::HeapAdjustVerbose) { + // "mDoExt_createSolidHeap size not set" OS_REPORT("\x1b[44mmDoExt_createSolidHeap サイズ未設定\n\x1b[m"); - OS_REPORT("最大空き容量確保します %08x\n\x1b[m", i_heap->getFreeSize()); + // "Ensure that the maximum available space is allocated %08x" + OS_REPORT("最大空き容量確保します %08x\n\x1b[m", i_parent->getFreeSize()); } #endif - createdHeap = JKRCreateSolidHeap(-1, i_heap, false); + createdHeap = JKRCreateSolidHeap(-1, i_parent, false); } else { u32 solidHeapSize = ALIGN_NEXT(sizeof(JKRSolidHeap), 0x10); i_size = ALIGN_NEXT(i_size, 0x10); @@ -739,19 +891,19 @@ JKRSolidHeap* mDoExt_createSolidHeap(u32 i_size, JKRHeap* i_heap, u32 i_alignmen if (0x10 < i_alignment) { i_size = (i_alignment - 0x10 + i_size); } - createdHeap = JKRCreateSolidHeap(i_size, i_heap, false); + createdHeap = JKRCreateSolidHeap(i_size, i_parent, false); } if (createdHeap != NULL) { JKRSetErrorFlag(createdHeap, true); #if DEBUG if (mDoExt::HeapAdjustVerbose != 0) { - u32 heapSize = createdHeap->getHeapSize(); + u32 solidHeapSize = createdHeap->getHeapSize(); OS_REPORT( "JKRCreateSolidHeap %08x i_size=%08x solidHeapSize=%08x\n", createdHeap, i_size, - heapSize + solidHeapSize ); } #endif @@ -762,13 +914,13 @@ JKRSolidHeap* mDoExt_createSolidHeap(u32 i_size, JKRHeap* i_heap, u32 i_alignmen OS_WARNING( "mDoExt_createMaxSolidHeap : ソリッドヒープ%fKの確保に失敗 連続空き容量=%fK 残り空き容量=%f\n", i_size / 1024.0f, - i_heap->getFreeSize() / 1024.0f, - i_heap->getTotalFreeSize() / 1024.0f + i_parent->getFreeSize() / 1024.0f, + i_parent->getTotalFreeSize() / 1024.0f ); - static BOOL dumped = FALSE; - if (dumped == FALSE) { - dumped = TRUE; - i_heap->dump_sort(); + static BOOL displayed = FALSE; + if (displayed == FALSE) { + displayed = TRUE; + i_parent->dump_sort(); } return createdHeap; } @@ -788,7 +940,7 @@ JKRSolidHeap* mDoExt_createSolidHeapFromSystem(u32 i_size, u32 i_alignment) { JKRSolidHeap* mDoExt_createSolidHeapToCurrent(JKRHeap** o_heap, u32 i_size, JKRHeap* i_parent, u32 i_alignment) { if (o_heap != NULL) { - *o_heap = JKRHeap::getCurrentHeap(); + *o_heap = JKRGetCurrentHeap(); } JKRSolidHeap* resultHeap = mDoExt_createSolidHeap(i_size, i_parent, i_alignment); @@ -799,19 +951,30 @@ JKRSolidHeap* mDoExt_createSolidHeapToCurrent(JKRHeap** o_heap, u32 i_size, JKRH return resultHeap; } -static JKRHeap* mDoExt_SaveCurrentHeap; - JKRSolidHeap* mDoExt_createSolidHeapToCurrent(u32 i_size, JKRHeap* i_parent, u32 i_alignment) { - return mDoExt_createSolidHeapToCurrent(&mDoExt_SaveCurrentHeap, i_size, i_parent, i_alignment); + JUT_ASSERT(2427, OSGetCurrentThread() == &mainThread); + JUT_ASSERT(2428, mDoExt_SaveCurrentHeap == 0); + JKRSolidHeap* heap = + mDoExt_createSolidHeapToCurrent(&mDoExt_SaveCurrentHeap, i_size, i_parent, i_alignment); + if (mDoExt::CurrentHeapAdjustVerbose) { + // "Saving the current heap %08x" + OS_REPORT("カレントヒープを保存 %08x\n", mDoExt_SaveCurrentHeap); + } + return heap; } JKRSolidHeap* mDoExt_createSolidHeapFromGameToCurrent(JKRHeap** o_heap, u32 i_size, u32 i_alignment) { - return mDoExt_createSolidHeapToCurrent(o_heap, i_size, mDoExt_getGameHeap(), i_alignment); + JKRExpHeap* gameHeap = mDoExt_getGameHeap(); + JKRSolidHeap* solidHeap = + mDoExt_createSolidHeapToCurrent(o_heap, i_size, gameHeap, i_alignment); + return solidHeap; } JKRSolidHeap* mDoExt_createSolidHeapFromGameToCurrent(u32 i_size, u32 i_alignment) { - return mDoExt_createSolidHeapToCurrent(i_size, mDoExt_getGameHeap(), i_alignment); + JKRExpHeap* gameHeap = mDoExt_getGameHeap(); + JKRSolidHeap* solidHeap = mDoExt_createSolidHeapToCurrent(i_size, gameHeap, i_alignment); + return solidHeap; } u32 mDoExt_adjustSolidHeap(JKRSolidHeap* i_heap) { @@ -875,23 +1038,54 @@ u32 mDoExt_adjustSolidHeapToSystem(JKRSolidHeap* i_heap) { } void mDoExt_destroySolidHeap(JKRSolidHeap* i_heap) { - i_heap->destroy(); + JKRDestroySolidHeap(i_heap); + if (g_printOtherHeapDebug) { + // "Solid heap destruction" + OS_REPORT("mDoExt_destroySolidHeap ソリッドヒープ破壊 %08x\n", i_heap); + } } void mDoExt_destroyExpHeap(JKRExpHeap* i_heap) { - i_heap->destroy(); + bool var_r30 = true; + bool var_r28; +#if DEBUG + if (i_heap == mDoExt_getCurrentHeap()) { + OS_PANIC(2576, "Failed assertion i_heap != mDoExt_getCurrentHeap()"); + var_r28 = false; + if (!var_r28) { + var_r30 = false; + } + } +#endif + JKRDestroyExpHeap(i_heap); + if (g_printOtherHeapDebug) { + // "mDoExt_destroyExpHeap Exp heap destruction" + OS_REPORT("mDoExt_destroyExpHeap Expヒープ破壊 %08x\n", i_heap); + } } JKRHeap* mDoExt_setCurrentHeap(JKRHeap* heap) { - return heap->becomeCurrentHeap(); + JUT_ASSERT(2594, heap != NULL); + JKRHeap* result = JKRSetCurrentHeap(heap); + if (mDoExt::CurrentHeapAdjustVerbose) { + // "Changing the current heap to the specified heap %08x->%08x" + OS_REPORT("カレントヒープを指定ヒープに変更 %08x->%08x\n", result, heap); + } + return result; } JKRHeap* mDoExt_getCurrentHeap() { - return JKRHeap::getCurrentHeap(); + return JKRGetCurrentHeap(); } void mDoExt_restoreCurrentHeap() { - mDoExt_SaveCurrentHeap->becomeCurrentHeap(); + JUT_ASSERT(2711, OSGetCurrentThread() == &mainThread); + JUT_ASSERT(2712, mDoExt_SaveCurrentHeap != FALSE); + JKRHeap* result = JKRSetCurrentHeap(mDoExt_SaveCurrentHeap); + if (mDoExt::CurrentHeapAdjustVerbose) { + // "The current heap has been restored %08x->%08x" + OS_REPORT("カレントヒープを復帰しました %08x->%08x\n", result, mDoExt_SaveCurrentHeap); + } mDoExt_SaveCurrentHeap = NULL; } @@ -920,14 +1114,14 @@ void mDoExt_MtxCalcAnmBlendTbl::calc() { Quaternion quat3; mAnmRatio->getAnmTransform()->getTransform(jntNo, &info2); JMAEulerToQuat(info2.mRotation.x, info2.mRotation.y, info2.mRotation.z, &quat1); + f32 f30 = mAnmRatio->getRatio(); quat3 = quat1; for (int i = 1; i < mNum; i++) { - J3DAnmTransform* transform = mAnmRatio[i].getAnmTransform(); - if (transform) { + if (mAnmRatio[i].getAnmTransform() != NULL) { J3DTransformInfo info3; - transform->getTransform(jntNo, &info3); + mAnmRatio[i].getAnmTransform()->getTransform(jntNo, &info3); f32 ratio = mAnmRatio[i].getRatio(); - f32 f30 = 1.0f - ratio; + f30 = 1.0f - ratio; JMAEulerToQuat(info3.mRotation.x, info3.mRotation.y, info3.mRotation.z, &quat2); JMAQuatLerp(&quat1, &quat2, ratio, &quat3); quat1 = quat3; @@ -940,7 +1134,7 @@ void mDoExt_MtxCalcAnmBlendTbl::calc() { } } Mtx mtx; - MTXQuat(mtx, &quat3); + mDoMtx_quat(mtx, &quat3); mDoExt_setJ3DData(mtx, &info2, jntNo); } @@ -955,23 +1149,24 @@ void mDoExt_MtxCalcAnmBlendTblOld::calc() { Quaternion quat3; mAnmRatio->getAnmTransform()->getTransform(jntNo, &info1); JMAEulerToQuat(info1.mRotation.x, info1.mRotation.y, info1.mRotation.z, &quat1); + f32 var_f31; + f32 var_f30 = mAnmRatio[0].getRatio(); quat3 = quat1; for (int i = 1; i < mNum; i++) { if (mAnmRatio[i].getAnmTransform()) { - J3DAnmTransform* transform = mAnmRatio[i].getAnmTransform(); J3DTransformInfo info2; - transform->getTransform(jntNo, &info2); - f32 ratio = mAnmRatio[i].getRatio(); - f32 f30 = 1.0f - ratio; + mAnmRatio[i].getAnmTransform()->getTransform(jntNo, &info2); + var_f31 = mAnmRatio[i].getRatio(); + var_f30 = 1.0f - var_f31; JMAEulerToQuat(info2.mRotation.x, info2.mRotation.y, info2.mRotation.z, &quat2); - JMAQuatLerp(&quat1, &quat2, ratio, &quat3); + JMAQuatLerp(&quat1, &quat2, var_f31, &quat3); quat1 = quat3; - info1.mTranslate.x = info1.mTranslate.x * f30 + info2.mTranslate.x * ratio; - info1.mTranslate.y = info1.mTranslate.y * f30 + info2.mTranslate.y * ratio; - info1.mTranslate.z = info1.mTranslate.z * f30 + info2.mTranslate.z * ratio; - info1.mScale.x = info1.mScale.x * f30 + info2.mScale.x * ratio; - info1.mScale.y = info1.mScale.y * f30 + info2.mScale.y * ratio; - info1.mScale.z = info1.mScale.z * f30 + info2.mScale.z * ratio; + info1.mTranslate.x = info1.mTranslate.x * var_f30 + info2.mTranslate.x * var_f31; + info1.mTranslate.y = info1.mTranslate.y * var_f30 + info2.mTranslate.y * var_f31; + info1.mTranslate.z = info1.mTranslate.z * var_f30 + info2.mTranslate.z * var_f31; + info1.mScale.x = info1.mScale.x * var_f30 + info2.mScale.x * var_f31; + info1.mScale.y = info1.mScale.y * var_f30 + info2.mScale.y * var_f31; + info1.mScale.z = info1.mScale.z * var_f30 + info2.mScale.z * var_f31; } } @@ -979,15 +1174,15 @@ void mDoExt_MtxCalcAnmBlendTblOld::calc() { Quaternion* oldQuat = mOldFrame->getOldFrameQuaternion(jntNo); if (mOldFrame->getOldFrameFlg()) { if (mOldFrame->getOldFrameRate() > 0.0f && mOldFrame->getOldFrameStartJoint() <= jntNo && mOldFrame->getOldFrameEndJoint() > jntNo) { - f32 oldFrameRate = mOldFrame->getOldFrameRate(); - f32 f31 = 1.0f - oldFrameRate; - JMAQuatLerp(oldQuat, &quat1, f31, &quat3); - info1.mTranslate.x = info1.mTranslate.x * f31 + oldTransInfo->mTranslate.x * oldFrameRate; - info1.mTranslate.y = info1.mTranslate.y * f31 + oldTransInfo->mTranslate.y * oldFrameRate; - info1.mTranslate.z = info1.mTranslate.z * f31 + oldTransInfo->mTranslate.z * oldFrameRate; - info1.mScale.x = info1.mScale.x * f31 + oldTransInfo->mScale.x * oldFrameRate; - info1.mScale.y = info1.mScale.y * f31 + oldTransInfo->mScale.y * oldFrameRate; - info1.mScale.z = info1.mScale.z * f31 + oldTransInfo->mScale.z * oldFrameRate; + var_f30 = mOldFrame->getOldFrameRate(); + var_f31 = 1.0f - var_f30; + JMAQuatLerp(oldQuat, &quat1, var_f31, &quat3); + info1.mTranslate.x = info1.mTranslate.x * var_f31 + oldTransInfo->mTranslate.x * var_f30; + info1.mTranslate.y = info1.mTranslate.y * var_f31 + oldTransInfo->mTranslate.y * var_f30; + info1.mTranslate.z = info1.mTranslate.z * var_f31 + oldTransInfo->mTranslate.z * var_f30; + info1.mScale.x = info1.mScale.x * var_f31 + oldTransInfo->mScale.x * var_f30; + info1.mScale.y = info1.mScale.y * var_f31 + oldTransInfo->mScale.y * var_f30; + info1.mScale.z = info1.mScale.z * var_f31 + oldTransInfo->mScale.z * var_f30; } } else if (jntNo == modelData->getJointNum() - 1) { mOldFrame->onOldFrameFlg(); @@ -1141,10 +1336,7 @@ int mDoExt_McaMorf::create(J3DModelData* modelData, mDoExt_McaMorfCallBack1_c* c goto cleanup; } mpQuat = new Quaternion[modelData->getJointNum()]; - if (!mpQuat) { - goto cleanup; - } - { + if (mpQuat) { J3DTransformInfo* info = mpTransformInfo; Quaternion* quat = mpQuat; J3DModelData* r23 = mpModel->getModelData(); @@ -1996,6 +2188,14 @@ void mDoExt_McaMorf2::stopZelAnime() { } } +void mDoExt_offCupOnAupPacket::draw() { + GFSetBlendModeEtc(GX_BM_NONE, GX_BL_ZERO, GX_BL_ZERO, GX_LO_CLEAR, 0, 1, 1); +} + +void mDoExt_onCupOffAupPacket::draw() { + GFSetBlendModeEtc(GX_BM_NONE, GX_BL_ZERO, GX_BL_ZERO, GX_LO_CLEAR, 1, 0, 1); +} + void mDoExt_invJntPacket::draw() { J3DShape::resetVcdVatCache(); @@ -2360,14 +2560,14 @@ void mDoExt_3DlineMat0_c::update(int param_0, GXColor& param_2, dKy_tevstr_c* pa mDoExt_3Dline_field_0x10_c* local_r30; mDoExt_3Dline_field_0x10_c* local_r29; mDoExt_3Dline_field_0x10_c* sp_1c; - f32* sp_18; + f32* size_p; for (s32 sp_14 = 0; sp_14 < field_0x10; sp_14++) { local_r27 = sp_30->field_0x0; - sp_18 = sp_30->field_0x4; + size_p = sp_30->field_0x4; - JUT_ASSERT(0x1545, sp_18 != NULL); + JUT_ASSERT(5445, size_p != NULL); sp_20 = ((mDoExt_3Dline_c*)((intptr_t)sp_30 + (field_0x16 << 2)))->field_0x8; sp_24 = sp_20; @@ -2388,11 +2588,11 @@ void mDoExt_3DlineMat0_c::update(int param_0, GXColor& param_2, dKy_tevstr_c* pa local_r29->y = -local_r30->y; local_r29->z = -local_r30->z; - sp_120 *= *sp_18; + sp_120 *= *size_p; *sp_24++ = *local_r27 + sp_120; *sp_24++ = *local_r27 - sp_120; local_r27++; - sp_18++; + size_p++; sp_114 = *local_r27 + sp_120; sp_108 = *local_r27 - sp_120; @@ -2412,14 +2612,14 @@ void mDoExt_3DlineMat0_c::update(int param_0, GXColor& param_2, dKy_tevstr_c* pa local_r29->y = -local_r30->y; local_r29->z = -local_r30->z; - sp_120 *= *sp_18; + sp_120 *= *size_p; sp_114 += *local_r27 + sp_120; sp_108 += *local_r27 - sp_120; *sp_24++ = sp_114 * 0.5f; *sp_24++ = sp_108 * 0.5f; local_r27++; - sp_18++; + size_p++; sp_114 = *local_r27 + sp_120; sp_108 = *local_r27 - sp_120; @@ -2483,7 +2683,7 @@ void mDoExt_3DlineMat1_c::setMaterial() { dKy_GxFog_set(); GXCallDisplayList(l_mat1DL, 0x80); GXLoadPosMtxImm(j3dSys.getViewMtx(), GX_PNMTX0); - GXLoadNrmMtxImm(g_mDoMtx_identity, GX_PNMTX0); + GXLoadNrmMtxImm(cMtx_getIdentity(), GX_PNMTX0); } void mDoExt_3DlineMat1_c::draw() { @@ -2531,16 +2731,7 @@ void mDoExt_3DlineMat1_c::update(int param_0, f32 param_1, _GXColor& param_2, u1 } view_class* sp_3c = dComIfGd_getView(); mDoExt_3Dline_c* sp_38 = mpLines; - f32 local_f30; - f32 local_f26; - f32 local_f29; - f32 local_f27; - if (param_3 != 0) { - local_f26 = param_1 / param_3; - } else { - local_f26 = 0.0f; - } - local_f27 = local_f26; + f32 local_f27 = param_3 != 0 ? param_1 / param_3 : 0.0f; u32 sp_34 = (field_0x34 << 1) * 12; u32 sp_30 = (field_0x34 << 1) * 3; @@ -2563,6 +2754,7 @@ void mDoExt_3DlineMat1_c::update(int param_0, f32 param_1, _GXColor& param_2, u1 mDoExt_3Dline_field_0x18_c* sp_18; + f32 local_f29; f32 local_f31 = 0.0f; for (s32 sp_14 = 0; sp_14 < mNumLines; sp_14++) { @@ -2583,7 +2775,7 @@ void mDoExt_3DlineMat1_c::update(int param_0, f32 param_1, _GXColor& param_2, u1 sp_1c++->field_0x4 = local_f31; sp_130 = local_r27[1] - local_r27[0]; - local_f30 = sp_130.abs(); + f32 local_f30 = sp_130.abs(); if (param_1 < 8.0f) { local_f31 += local_f30 * 0.1f; @@ -2602,7 +2794,7 @@ void mDoExt_3DlineMat1_c::update(int param_0, f32 param_1, _GXColor& param_2, u1 local_r28->y = -local_r30->y; local_r28->z = -local_r30->z; - sp_130 *= param_1; + sp_130 *= local_f29; *sp_28++ = *local_r27 + sp_130; *sp_28++ = *local_r27 - sp_130; local_r27++; @@ -2677,6 +2869,23 @@ void mDoExt_3DlineMat1_c::update(int param_0, f32 param_1, _GXColor& param_2, u1 sp_38++; } } +#include "assets/l_mat2DL__d_a_grass.h" + +void mDoExt_3DlineMat2_c::setMaterial() { + j3dSys.reinitGX(); + GXSetNumIndStages(0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_INDEX16); + GXSetVtxDesc(GX_VA_NRM, GX_INDEX16); + GXSetVtxDesc(GX_VA_TEX0, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_NRM_XYZ, GX_RGB8, 6); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_F32, 0); + dKy_GxFog_set(); + GXCallDisplayList(NULL, 0x80); // DEBUG NONMATCHING - this is supposed to reference l_mat2DL + GXLoadPosMtxImm(j3dSys.getViewMtx(), 0); + GXLoadNrmMtxImm(cMtx_getIdentity(), 0); +} void mDoExt_3DlineMat1_c::update(int param_0, _GXColor& param_2, dKy_tevstr_c* param_4) { mColor = param_2; @@ -2709,11 +2918,11 @@ void mDoExt_3DlineMat1_c::update(int param_0, _GXColor& param_2, dKy_tevstr_c* p mDoExt_3Dline_field_0x18_c* sp_1c; mDoExt_3Dline_field_0x18_c* sp_18; f32 local_f31 = 0.0f; - f32* local_r18; + f32* size_p; for (s32 sp_14 = 0; sp_14 < mNumLines; sp_14++) { local_r27 = sp_38[0].field_0x0; - local_r18 = sp_38->field_0x4; - JUT_ASSERT(0x16f3, sp_18 != NULL); + size_p = sp_38->field_0x4; + JUT_ASSERT(5875, size_p != NULL); sp_24 = ((mDoExt_3Dline_c*)((intptr_t)sp_38 + (mIsDrawn << 2)))->field_0x8; sp_28 = sp_24; sp_20 = ((mDoExt_3Dline_c*)((intptr_t)sp_38 + (mIsDrawn << 2)))->field_0x10; @@ -2735,11 +2944,11 @@ void mDoExt_3DlineMat1_c::update(int param_0, _GXColor& param_2, dKy_tevstr_c* p local_r28->x = -local_r30->x; local_r28->y = -local_r30->y; local_r28->z = -local_r30->z; - sp_130 *= *local_r18; + sp_130 *= *size_p; *sp_28++ = local_r27[0] + sp_130; *sp_28++ = local_r27[0] - sp_130; local_r27++; - local_r18++; + size_p++; sp_124 = local_r27[0] + sp_130; sp_118 = local_r27[0] - sp_130; for (s32 sp_10 = field_0x34 - 2; sp_10 > 0; sp_10--) { @@ -2759,13 +2968,13 @@ void mDoExt_3DlineMat1_c::update(int param_0, _GXColor& param_2, dKy_tevstr_c* p local_r28->x = -local_r30->x; local_r28->y = -local_r30->y; local_r28->z = -local_r30->z; - sp_130 *= *local_r18; + sp_130 *= *size_p; sp_124 += local_r27[0] + sp_130; sp_118 += local_r27[0] - sp_130; *sp_28++ = sp_124 * 0.5f; *sp_28++ = sp_118 * 0.5f; local_r27++; - local_r18++; + size_p++; sp_124 = local_r27[0] + sp_130; sp_118 = local_r27[0] - sp_130; } @@ -3351,33 +3560,50 @@ void mDoExt_cylinderMPacket::draw() { } #endif -static void mDoExt_initFontCommon(JUTFont** mDoExt_font, ResFONT** mDoExt_resfont, JKRHeap* param_2, +static void mDoExt_initFontCommon(JUTFont** mDoExt_font_p, ResFONT** mDoExt_resfont_p, JKRHeap* param_2, char const* param_3, JKRArchive* param_4, u8 param_5, u32 param_6, u32 param_7) { - JUT_ASSERT(7141, mDoExt_font == NULL); - JUT_ASSERT(7142, mDoExt_resfont == NULL); + JUTFont** mDoExt_font = mDoExt_font_p; + ResFONT** mDoExt_resfont = mDoExt_resfont_p; + // these assertion messages are fakematches, not quite sure what's going on here - + // the assembly indicates the parameters are dereferenced inline into compiler temps, + // but the messages don't show a dereference + JUT_ASSERT_MSG(7141, *mDoExt_font == NULL, "mDoExt_font == 0"); + JUT_ASSERT_MSG(7142, *mDoExt_resfont == NULL, "mDoExt_resfont == 0"); *mDoExt_resfont = (ResFONT*)JKRGetResource('ROOT', param_3, param_4); - JUT_ASSERT(7144, *mDoExt_resfont != NULL); + JUT_ASSERT_MSG(7144, *mDoExt_resfont != NULL, "mDoExt_resfont != 0"); if (param_5 == 0) { u32 cacheSize = JUTCacheFont::calcCacheSize(param_7, param_6); JUTCacheFont* cacheFont = new (param_2, 0) JUTCacheFont(*mDoExt_resfont, cacheSize, param_2); if (cacheFont->isValid()) { + // "Allocated %d bytes for font cache buffer size" + OS_REPORT("\nキャッシュフォントバッファサイズとして %d バイト確保しました\n", cacheSize); + // "The size of the JUTCacheFont class is %d bytes." + OS_REPORT("JUTCacheFontクラスサイズは %d バイトです。\n", sizeof(JUTCacheFont)); + // "The number of cached pages is %d." + OS_REPORT("キャッシュページ数は %d です。\n\n", cacheFont->getCachePage()); + // "The maximum sheet size is %d." + OS_REPORT("シートサイズ(最大)は %d です。\n\n", cacheFont->getMaxSheetSize()); *mDoExt_font = cacheFont; cacheFont->setPagingType(JUTCacheFont::PAGE_TYPE_1); } JKRRemoveResource(*mDoExt_resfont, NULL); *mDoExt_resfont = NULL; } else { - JUTResFont* local_28 = new JUTResFont(*mDoExt_resfont, param_2); - *mDoExt_font = local_28; + *mDoExt_font = new JUTResFont(*mDoExt_resfont, param_2); + // "Allocated %d bytes for the font buffer size" + OS_REPORT("\nフォントバッファサイズとして %d バイト確保しました\n", + JKRGetMemBlockSize(param_2, *mDoExt_font)); + // "The size of the JUTResFont class is %d bytes." + OS_REPORT("JUTResFontクラスサイズは %d バイトです。\n", sizeof(JUTResFont)); } if (*mDoExt_font != NULL && !(*mDoExt_font)->isValid()) { - // Failed to create cache font class + // "Failed to create cache font class" OSReport_FatalError("\nキャッシュフォントクラス作成に失敗しました\n"); delete *mDoExt_font; *mDoExt_font = NULL; } - JUT_ASSERT(7183, mDoExt_font != NULL); + JUT_ASSERT_MSG(7183, *mDoExt_font != NULL, "mDoExt_font != 0"); } static JUTFont* mDoExt_font0; @@ -3468,6 +3694,10 @@ JUTFont* mDoExt_getSubFont() { return mDoExt_font2; } +void dummy9() { + JUT_ASSERT(0, mDoExt_font1_getCount > 0); +} + void mDoExt_removeSubFont() { JUT_ASSERT(7354, mDoExt_font2_getCount > 0); if (mDoExt_font2_getCount > 0) { @@ -3489,8 +3719,13 @@ J3DModel* mDoExt_J3DModel__create(J3DModelData* i_modelData, u32 i_modelFlag, u3 J3DModel* model = new J3DModel(); if (model != NULL) { +#if DEBUG + model->getBaseTRMtx()[0][0] = MAXFLOAT; +#endif + bool hasSharedDlistObj = + i_modelData->getMaterialNodePointer(0)->getSharedDisplayListObj() != NULL; // Update the modelFlag if the model data passed in has a shared dlist object - if (i_modelData->getMaterialNodePointer(0)->getSharedDisplayListObj() != NULL) { + if (hasSharedDlistObj != NULL) { if (i_modelData->isLocked()) { i_modelFlag = J3DMdlFlag_UseSharedDL; } else if (i_modelFlag == J3DMdlFlag_UseSharedDL) { @@ -3501,7 +3736,8 @@ J3DModel* mDoExt_J3DModel__create(J3DModelData* i_modelData, u32 i_modelFlag, u3 } // Set up the model - if (model->entryModelData(i_modelData, i_modelFlag, 1) == kJ3DError_Success) { + s32 entryModelData = model->entryModelData(i_modelData, i_modelFlag, 1); + if (entryModelData == kJ3DError_Success) { if (i_modelFlag == J3DMdlFlag_DifferedDLBuffer && model->newDifferedDisplayList(i_differedDlistFlag) != kJ3DError_Success) { @@ -3517,6 +3753,114 @@ J3DModel* mDoExt_J3DModel__create(J3DModelData* i_modelData, u32 i_modelFlag, u3 return NULL; } +DummyCheckHeap* dch; + +DummyCheckHeap::DummyCheckHeap() { + mAlloc = NULL; + mSize = 0; + mHeap = NULL; +} + +DummyCheckHeap::~DummyCheckHeap() { + if (mHeap != NULL) { + mHeap->destroy(); + } +} + +int DummyCheckHeap::isVirgin() { + if (mAlloc != NULL && mSize > 0) { + for (int i = 0; i < mSize; i++) { + if (((u8*)mAlloc)[i] != 0xdd) { + u8* off = (u8*)mAlloc + i; + // "DummyCheckHeap: Heap corruption detected" + OS_REPORT_ERROR("DummyCheckHeap 領域破壊発見 %08x+%08x=%08x\n", mAlloc, i, off); + return false; + } + } + } + return true; +} + +JKRHeap* DummyCheckHeap::getHeap() { + if (mHeap != NULL) { + JUT_ASSERT(7604, mHeap); + JUT_ASSERT(7605, mAlloc); + JKRHeap* heap = mHeap; + JUT_ASSERT(7607, mSize > 0); + isVirgin(); + JKRFreeToHeap(mHeap, mAlloc); + mHeap = NULL; + mAlloc = NULL; + return heap; + } else { + return NULL; + } +} + +void DummyCheckHeap::setHeap(JKRHeap* heap) { + JUT_ASSERT(7620, heap != NULL); + JUT_ASSERT(7621, mHeap == NULL); + JUT_ASSERT(7622, mAlloc == NULL); + mHeap = heap; + mSize = JKRGetFreeSize(mHeap); + JUT_ASSERT(7625, mSize > 0); + mAlloc = JKRAllocFromHeap(mHeap, mSize, 0); + JUT_ASSERT(7627, mAlloc); + memset(mAlloc, 0xdd, mSize); +} + +int DummyCheckHeap_init() { + JUT_ASSERT(7634, dch == NULL); + dch = new((JKRHeap*)mDoExt_getZeldaHeap(), 0) DummyCheckHeap(); + if (dch == NULL) { + return false; + } + + return true; +} + +int DummyCheckHeap_create() { + if (dch != NULL) { + if (dch->mHeap == NULL) { + JKRHeap* rootHeap = JKRGetRootHeap2(); + JKRHeap* heap = JKRCreateExpHeap(0x60000, rootHeap, false); + if (heap == NULL) { + // "DummyCheckHeap allocation failure" + OS_REPORT_ERROR("DummyCheckHeap_create 領域確保失敗\n"); + return 0; + } + dch->setHeap(heap); + } + return 1; + } + return 0; +} + +void DummyCheckHeap_destroy() { + if (dch != NULL && dch->mHeap != NULL) { + JKRHeap* heap = dch->getHeap(); + if (heap != NULL) { + heap->destroy(); + } + } +} + +int DummyCheckHeap_isVirgin() { + int retval; + if (dch != NULL) { + retval = dch->isVirgin(); + } else { + retval = 1; + } + return retval; +} + +void DummyCheckHeap_check() { + if (dch != NULL) { + DummyCheckHeap_isVirgin(); + } +} + u32 aram_cache_size; void mDoExt_setAraCacheSize(u32 size) { diff --git a/src/m_Do/m_Do_main.cpp b/src/m_Do/m_Do_main.cpp index 430bbadc9b..4525bbb97e 100644 --- a/src/m_Do/m_Do_main.cpp +++ b/src/m_Do/m_Do_main.cpp @@ -864,7 +864,7 @@ void parse_args(int argc, const char* argv[]) { static u8 mainThreadStack[32768]; -static OSThread mainThread; +OSThread mainThread; void main(int argc, const char* argv[]) { OSThread* current_thread = OSGetCurrentThread();