From c4aef79f3f452a3552936ab0c5bbd16a0a001ed1 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Sun, 15 Oct 2023 16:41:19 -0700 Subject: [PATCH] d_drawlist work --- include/JSystem/J3DGraphBase/J3DDrawBuffer.h | 6 +- include/JSystem/J3DGraphBase/J3DPacket.h | 2 + include/SSystem/SComponent/c_rnd.h | 22 ++ include/d/d_cc_mass_s.h | 7 +- include/d/d_drawlist.h | 210 +++++++---- include/d/d_jnt_hit.h | 14 +- include/f_op/f_op_camera.h | 7 +- include/m_Do/m_Do_ext.h | 2 +- src/d/d_com_inf_game.cpp | 21 +- src/d/d_drawlist.cpp | 350 +++++++++---------- src/d/d_jnt_hit.cpp | 14 +- src/d/d_kankyo_rain.cpp | 34 +- 12 files changed, 399 insertions(+), 290 deletions(-) create mode 100644 include/SSystem/SComponent/c_rnd.h diff --git a/include/JSystem/J3DGraphBase/J3DDrawBuffer.h b/include/JSystem/J3DGraphBase/J3DDrawBuffer.h index c9db9a85c..47752c827 100644 --- a/include/JSystem/J3DGraphBase/J3DDrawBuffer.h +++ b/include/JSystem/J3DGraphBase/J3DDrawBuffer.h @@ -31,6 +31,7 @@ public: }; J3DDrawBuffer() { initialize(); } + J3DDrawBuffer(u32 size) { initialize(); allocBuffer(size); } ~J3DDrawBuffer(); void initialize(); J3DError allocBuffer(u32); @@ -49,8 +50,9 @@ public: u32 getEntryTableSize() { return mBufSize; } inline void calcZRatio(); - void setNonSort() { mSortType = 5; } - void setZSort() { mSortType = 2; } + void setNonSort() { mSortType = (u32)SORT_NON; } + void setZSort() { mSortType = (u32)SORT_Z; } + void setInvalidSort() { mSortType = (u32)SORT_INVALID; } void setZMtx(MtxP mtx) { mpZMtx = mtx; } void setCallBackPacket(J3DCallBackPacket* pPacket); diff --git a/include/JSystem/J3DGraphBase/J3DPacket.h b/include/JSystem/J3DGraphBase/J3DPacket.h index 9a76e957c..8423b29f4 100644 --- a/include/JSystem/J3DGraphBase/J3DPacket.h +++ b/include/JSystem/J3DGraphBase/J3DPacket.h @@ -221,6 +221,8 @@ public: class J3DCallBackPacket : public J3DPacket { public: + J3DCallBackPacket() + : mpCallBack(NULL) {} virtual ~J3DCallBackPacket() {} virtual void draw(); diff --git a/include/SSystem/SComponent/c_rnd.h b/include/SSystem/SComponent/c_rnd.h new file mode 100644 index 000000000..535e9d74f --- /dev/null +++ b/include/SSystem/SComponent/c_rnd.h @@ -0,0 +1,22 @@ +#ifndef C_RND_H +#define C_RND_H + +#include "dolphin/types.h" + +struct cM_rnd_c { + /* 0x0 */ int m0; + /* 0x4 */ int m4; + /* 0x8 */ int m8; + + void init(int a, int b, int c) { + m0 = a; + m4 = b; + m8 = c; + } + int get(); + f32 getF(f32); + f32 getFX(f32); + f32 getValue(f32, f32); +}; + +#endif /* C_RND_H */ diff --git a/include/d/d_cc_mass_s.h b/include/d/d_cc_mass_s.h index 3f8e1584d..5b665c90d 100644 --- a/include/d/d_cc_mass_s.h +++ b/include/d/d_cc_mass_s.h @@ -68,7 +68,12 @@ public: dCcMassS_Mng(); virtual ~dCcMassS_Mng() {} void Ct(); - void SetAttr(f32 radius, f32 height, u8 param_2, u8 param_3); + void SetAttr(f32 radius, f32 height, u8 param_2, u8 param_3) { + mCylAttr.SetR(radius); + mCylAttr.SetH(height); + field_0x200 = param_2; + mResultCamBit = param_3; + } void Prepare(); u32 Chk(cXyz* p_xyz, fopAc_ac_c** p_actor, dCcMassS_HitInf* p_hitInf); void Clear(); diff --git a/include/d/d_drawlist.h b/include/d/d_drawlist.h index f8c386fd2..936a9a9cd 100644 --- a/include/d/d_drawlist.h +++ b/include/d/d_drawlist.h @@ -8,6 +8,7 @@ #include "m_Do/m_Do_ext.h" class ResTIMG; +class cM3dGPla; class dDlst_base_c { public: @@ -19,6 +20,8 @@ public: class dDlst_2D_c : public dDlst_base_c { public: dDlst_2D_c(ResTIMG * pTIMG, s16 w, s16 h, u8 alpha); + virtual void draw(); + J2DPicture * getPicture() { return &mPicture; } void setAlpha(u8 alpha) { mAlpha = alpha; } @@ -30,6 +33,52 @@ protected: /* 0x12D */ u8 field_0x12e[3]; }; +class dDlst_2DTri_c : public dDlst_base_c { +public: + virtual void draw(); +}; + +class dDlst_2DPoint_c : public dDlst_base_c { +public: + virtual void draw(); +}; + +class dDlst_2DT_c : public dDlst_base_c { +public: + virtual void draw(); +}; + +class dDlst_2DT2_c : public dDlst_base_c { +public: + void init(ResTIMG* pTimg, f32, f32, f32, f32, u8, u8, u8, f32, f32); + virtual void draw(); +}; + +class dDlst_2DM_c : public dDlst_base_c { +public: + virtual void draw(); +}; + +class dDlst_2Dm_c : public dDlst_base_c { +public: + void init(ResTIMG*, ResTIMG*, f32, f32); + void setPos(s16, s16, s16, s16); + void setScale(f32, f32); + void setScroll(int, s16, s16); + virtual void draw(); +}; + +class dDlst_2DMt_c : public dDlst_base_c { +public: + virtual void draw(); +}; + +class dDlst_effectLine_c : public dDlst_base_c { +public: + void update(cXyz&, GXColor&, u16, u16, u16, u16, f32, f32, f32, f32); + virtual void draw(); +}; + class dDlst_window_c { public: dDlst_window_c() {} @@ -69,7 +118,8 @@ class dDlst_shadowSimple_c { public: void draw(); void set(cXyz*, f32, f32, cXyz*, s16, f32, GXTexObj*); - dDlst_shadowSimple_c(); + dDlst_shadowSimple_c() {} + ~dDlst_shadowSimple_c() {} /* 0x00 */ u8 mAlpha; /* 0x04 */ GXTexObj* mpTexObj; @@ -91,14 +141,15 @@ class dDlst_shadowPoly_c { public: dDlst_shadowPoly_c() { reset(); } + virtual dDlst_shadowTri_c* getTri() = 0; + virtual s32 getTriMax() = 0; + void reset() { mCount = 0; } int set(cBgD_Vtx_t*, u16, u16, u16, cM3dGPla*); + int set(cXyz&, cXyz&, cXyz&); void draw(); - virtual dDlst_shadowTri_c* getTri() = 0; - virtual s32 getTriMax() = 0; - /* 0x4 */ u16 mCount; /* 0x6 */ u8 field_0x6[2]; }; @@ -118,8 +169,10 @@ public: void reset(); void imageDraw(f32 (*)[4]); void draw(); - u32 set(u32, J3DModel*, cXyz*, f32, f32, dKy_tevstr_c*, f32, f32); + u32 set(u32, s8, J3DModel*, cXyz*, f32, f32, dKy_tevstr_c*); + u32 set2(u32, s8, J3DModel*, cXyz*, f32, f32, dKy_tevstr_c*); bool add(J3DModel*); + void init(); ~dDlst_shadowReal_c() {} dDlst_shadowReal_c() { mState = 0; } @@ -127,21 +180,23 @@ public: bool isUse() { return mState == 1; } bool checkKey(u32 i_key) { return mKey == i_key; } + enum { MODEL_MAX = 0x1A }; + private: /* 0x0000 */ u8 mState; /* 0x0001 */ u8 field_0x1; - /* 0x0002 */ u8 mModelNum; - /* 0x0003 */ u8 field_0x3; + /* 0x0002 */ u8 mAlpha; + /* 0x0003 */ u8 mModelNum; /* 0x0004 */ u32 mKey; /* 0x0008 */ Mtx mViewMtx; /* 0x0038 */ Mtx44 mRenderProjMtx; /* 0x0078 */ Mtx mReceiverProjMtx; /* 0x00A8 */ void* mpTexData; /* 0x00AC */ dDlst_shadowRealPoly_c mShadowRealPoly; - /* 0x24B4 */ GXTexObj mTexData; + /* 0x24B4 */ GXTexObj mTexObj; /* 0x24D4 */ J3DDrawBuffer* mpDrawBuffer; - /* 0x24D8 */ J3DCallBackPacket* mpPacket; - /* 0x24DC */ J3DModel* mpModels[26]; + /* 0x24D8 */ J3DCallBackPacket* mpCallBack; + /* 0x24DC */ J3DModel* mpModels[MODEL_MAX]; }; // Size: 0x2544 class dDlst_shadowControl_c { @@ -172,6 +227,10 @@ STATIC_ASSERT(sizeof(dDlst_shadowControl_c) == 0x15E28); class dDlst_mirrorPacket : public J3DPacket { public: + void init(ResTIMG*); + void update(Mtx, u8, f32); + virtual void draw(); + /* 0x0010 */ u8 field_0x0010[0x0040 - 0x0010]; /* 0x0040 */ Mtx mPosMtx; /* 0x0070 */ u8 field_0x0070[0x0080 - 0x0070]; @@ -185,7 +244,13 @@ struct view_port_class; struct view_class; struct camera_class; -struct dDlst_alphaModelData_c; +struct dDlst_alphaModelData_c { +public: + dDlst_alphaModelData_c(); + ~dDlst_alphaModelData_c(); + void set(u8, Mtx, u8); + void draw(Mtx); +}; struct dDlst_alphaModel_c { public: @@ -199,8 +264,8 @@ public: }; dDlst_alphaModel_c(); - void create(int); - void set(u8 type, Mtx mtx, u8 alpha); + static dDlst_alphaModel_c * create(int); + BOOL set(u8 type, Mtx mtx, u8 alpha); void draw(MtxP); s32 getNum() { return mNum; } @@ -211,53 +276,69 @@ public: /* 0x08 */ dDlst_alphaModelData_c* mpData; }; // Size: 0xC +struct dDlst_alphaModelPacket : public J3DPacket { +public: + virtual void draw(); +}; + +struct dDlst_alphaVolPacket : public J3DPacket { +public: + virtual void draw(); +}; + +struct dDlst_alphaInvVolPacket : public J3DPacket { +public: + virtual void draw(); +}; + class dDlst_list_c { public: dDlst_list_c(); ~dDlst_list_c(); - void init(); + bool init(); void reset(); void entryZSortXluDrawList(J3DDrawBuffer*, J3DPacket*, cXyz&); - void set(dDlst_base_c**&, dDlst_base_c**&, dDlst_base_c*); + bool set(dDlst_base_c**&, dDlst_base_c**&, dDlst_base_c*); void draw(dDlst_base_c**, dDlst_base_c**); - void wipeIn(f32, GXColor&); - void wipeIn(f32); + static void wipeIn(f32, GXColor&); + static void wipeIn(f32); void calcWipe(); - J3DDrawBuffer* getOpaListFilter() { return mpWetherFxBuffer; } + J3DDrawBuffer* getOpaListFilter() { return mpOpaListFilter; } void setXluDrawList(J3DDrawBuffer* buffer) { j3dSys.setDrawBuffer(buffer, XLU_BUFFER); } void setOpaDrawList(J3DDrawBuffer* buffer) { j3dSys.setDrawBuffer(buffer, OPA_BUFFER); } - void setOpaList() { setOpaDrawList(mpBufInvisibleModelOpa); } - void setXluList() { setXluDrawList(mpBufInvisibleModelXlu); } - void setOpaListInvisible() { setOpaDrawList(field_0x00030); } - void setXluListInvisible() { setXluDrawList(field_0x00034); } - void setOpaListMaskOff() { setOpaDrawList(mpBufInvisibleModelMaskOffOpa); } - void setXluListMaskOff() { setXluDrawList(mpBufInvisibleModelMaskOffXlu); } - void setOpaListSky() { setOpaDrawList(mpBufSkyOpa); } - void setXluListSky() { setXluDrawList(mpBufSkyXlu); } - void setOpaListP0() { setOpaDrawList(mpLinkBuf); } - void setXluListP0() { setXluDrawList(mpLinkBuf); } - void setOpaListP1() { setOpaDrawList(field_0x0000c); } - void setXluListP1() { setXluDrawList(field_0x00010); } - void setOpaListBG() { setOpaDrawList(mpBufWorldOpa); } - void setXluListBG() { setXluDrawList(mpBufWorldXlu); } - void setOpaListFilter() { setOpaDrawList(mpWetherFxBuffer); } - void setXluListFilter() { setXluDrawList(mpWetherFxBuffer); } - void setOpaList2D() { setOpaDrawList(field_0x00038); } - void setXluList2D() { setXluDrawList(field_0x00038); } + void setOpaList() { setOpaDrawList(mpOpaList); } + void setXluList() { setXluDrawList(mpXluList); } + void setOpaListInvisible() { setOpaDrawList(mpOpaListInvisible); } + void setXluListInvisible() { setXluDrawList(mpXluListInvisible); } + void setOpaListMaskOff() { setOpaDrawList(mpOpaListMaskOff); } + void setXluListMaskOff() { setXluDrawList(mpXluListMaskOff); } + void setOpaListSky() { setOpaDrawList(mpOpaListSky); } + void setXluListSky() { setXluDrawList(mpXluListSky); } + void setOpaListP0() { setOpaDrawList(mpOpaListP0); } + void setXluListP0() { setXluDrawList(mpOpaListP0); } + void setOpaListP1() { setOpaDrawList(mpOpaListP1); } + void setXluListP1() { setXluDrawList(mpXluListP1); } + void setOpaListBG() { setOpaDrawList(mpOpaListBG); } + void setXluListBG() { setXluDrawList(mpXluListBG); } + void setOpaListFilter() { setOpaDrawList(mpOpaListFilter); } + void setXluListFilter() { setXluDrawList(mpOpaListFilter); } + void setOpaList2D() { setOpaDrawList(mpOpaList2D); } + void setXluList2D() { setXluDrawList(mpOpaList2D); } - void entryZSortXluList(J3DPacket* i_packet, cXyz& param_1) { - entryZSortXluDrawList(mpBufInvisibleModelXlu, i_packet, param_1); + void entryZSortXluList(J3DPacket* i_packet, cXyz& pos) { + entryZSortXluDrawList(mpXluList, i_packet, pos); } - void entryZSortXluListMaskOff(J3DPacket* i_packet, cXyz& param_1) { - entryZSortXluDrawList(mpBufInvisibleModelMaskOffXlu, i_packet, param_1); + void entryZSortXluListMaskOff(J3DPacket* i_packet, cXyz& pos) { + entryZSortXluDrawList(mpXluListMaskOff, i_packet, pos); } - void set2DOpa(dDlst_base_c* pList) { set(mp2DOpa, mp2DOpaEnd, pList); } - void set2DXlu(dDlst_base_c* pList) { set(mp2DXlu, mp2DXluEnd, pList); } + void set2DOpaTop(dDlst_base_c* pItem) { set(mp2DOpaTop, mp2DOpaTopEnd, pItem); } + void set2DOpa(dDlst_base_c* pItem) { set(mp2DOpa, mp2DOpaEnd, pItem); } + void set2DXlu(dDlst_base_c* pItem) { set(mp2DXlu, mp2DXluEnd, pItem); } int setSimpleShadow(cXyz* param_0, f32 param_1, f32 param_2, cXyz* param_3, s16 param_4, f32 param_5, _GXTexObj* param_6) { @@ -283,30 +364,31 @@ public: static bool mWipe; - /* 0x00000 */ J3DDrawBuffer* mpBufSkyOpa; - /* 0x00004 */ J3DDrawBuffer* mpBufSkyXlu; - /* 0x00008 */ J3DDrawBuffer* mpLinkBuf; - /* 0x0000C */ J3DDrawBuffer* field_0x0000c; - /* 0x00010 */ J3DDrawBuffer* field_0x00010; - /* 0x00014 */ J3DDrawBuffer* mpBufWorldOpa; - /* 0x00018 */ J3DDrawBuffer* mpBufWorldXlu; - /* 0x0001C */ J3DDrawBuffer* mpBufInvisibleModelOpa; - /* 0x00020 */ J3DDrawBuffer* mpBufInvisibleModelXlu; - /* 0x00024 */ J3DDrawBuffer* mpWetherFxBuffer; - /* 0x00028 */ J3DDrawBuffer* mpBufInvisibleModelMaskOffOpa; - /* 0x0002C */ J3DDrawBuffer* mpBufInvisibleModelMaskOffXlu; - /* 0x00030 */ J3DDrawBuffer* field_0x00030; - /* 0x00034 */ J3DDrawBuffer* field_0x00034; - /* 0x00038 */ J3DDrawBuffer* field_0x00038; - /* 0x0003C */ u8 field_0x0003C[0x00050 - 0x0003C]; - /* 0x00050 */ void* field_0x00050; - /* 0x00054 */ u8 field_0x00054[0x00094 - 0x00054]; - /* 0x00094 */ dDlst_base_c** field_0x00094; - /* 0x00098 */ void* field_0x00098; - /* 0x0009C */ dDlst_base_c* mp2DArr[64]; + /* 0x00000 */ J3DDrawBuffer* mpOpaListSky; + /* 0x00004 */ J3DDrawBuffer* mpXluListSky; + /* 0x00008 */ J3DDrawBuffer* mpOpaListP0; + /* 0x0000C */ J3DDrawBuffer* mpOpaListP1; + /* 0x00010 */ J3DDrawBuffer* mpXluListP1; + /* 0x00014 */ J3DDrawBuffer* mpOpaListBG; + /* 0x00018 */ J3DDrawBuffer* mpXluListBG; + /* 0x0001C */ J3DDrawBuffer* mpOpaList; + /* 0x00020 */ J3DDrawBuffer* mpXluList; + /* 0x00024 */ J3DDrawBuffer* mpOpaListFilter; + /* 0x00028 */ J3DDrawBuffer* mpOpaListMaskOff; + /* 0x0002C */ J3DDrawBuffer* mpXluListMaskOff; + /* 0x00030 */ J3DDrawBuffer* mpOpaListInvisible; + /* 0x00034 */ J3DDrawBuffer* mpXluListInvisible; + /* 0x00038 */ J3DDrawBuffer* mpOpaList2D; + /* 0x0003C */ dDlst_base_c* field_0x3c[4]; + /* 0x0004C */ dDlst_base_c** field_0x4c; + /* 0x00050 */ dDlst_base_c** field_0x50; + /* 0x00054 */ dDlst_base_c* mp2DOpaTopArr[16]; + /* 0x00094 */ dDlst_base_c** mp2DOpaTop; + /* 0x00098 */ dDlst_base_c** mp2DOpaTopEnd; + /* 0x0009C */ dDlst_base_c* mp2DOpaArr[64]; /* 0x0019C */ dDlst_base_c** mp2DOpa; /* 0x001A0 */ dDlst_base_c** mp2DOpaEnd; - /* 0x001A4 */ u8 field_0x001A4[0x00224 - 0x001A4]; + /* 0x001A4 */ dDlst_base_c* mp2DXluArr[32]; /* 0x00224 */ dDlst_base_c** mp2DXlu; /* 0x00228 */ dDlst_base_c** mp2DXluEnd; /* 0x0022C */ dDlst_window_c* mpWindow; diff --git a/include/d/d_jnt_hit.h b/include/d/d_jnt_hit.h index cf5656b4f..e2c5b94c4 100644 --- a/include/d/d_jnt_hit.h +++ b/include/d/d_jnt_hit.h @@ -16,7 +16,14 @@ public: class JntHit_c { public: - void CreateInit(); + JntHit_c() + : mpModel(NULL) + , field_0x08(NULL) + , field_0x0C(NULL) + , field_0x10(NULL) + , field_0x1C(NULL) {} + + BOOL CreateInit(); void CylHitPosAngleOffset(cXyz*, csXyz*, cXyz*, csXyz*, cXyz, cXyz, f32); void Cyl2HitPosAngleOffset(cXyz*, csXyz*, cXyz*, csXyz*, cXyz, cXyz, f32); void SphHitPosAngleOffset(cXyz*, csXyz*, cXyz*, csXyz*, cXyz, f32); @@ -28,11 +35,12 @@ public: /* 0x00 */ __jnt_hit_data_c* mpHitData; /* 0x04 */ J3DModel* mpModel; /* 0x08 */ cXyz* field_0x08; - /* 0x0C */ short* field_0x0c; + /* 0x0C */ short* field_0x0C; /* 0x10 */ short* field_0x10; /* 0x14 */ short* mpJointIndexes; /* 0x18 */ s16 mHitDataCount; - /* 0x1A */ u8 field_0x1A[0x20 - 0x1A]; + /* 0x1A */ u8 field_0x1A[2]; + /* 0x1C */ void* field_0x1C; }; class JntHit_HIO_c { diff --git a/include/f_op/f_op_camera.h b/include/f_op/f_op_camera.h index cbb4fe825..bd49da529 100644 --- a/include/f_op/f_op_camera.h +++ b/include/f_op/f_op_camera.h @@ -5,6 +5,7 @@ #include "SSystem/SComponent/c_sxyz.h" #include "SSystem/SComponent/c_phase.h" #include "SSystem/SComponent/c_angle.h" +#include "SSystem/SComponent/c_rnd.h" #include "d/d_cam_param.h" #include "global.h" @@ -47,12 +48,6 @@ class d2DBSplinePath { /* 0x40 */ void* vtbl; }; -struct cM_rnd_c { - /* 0x0 */ int m0; - /* 0x4 */ int m4; - /* 0x8 */ int m8; -}; - class dCamForcusLine { /* 0x00 */ void* vtbl; /* 0x04 */ cM_rnd_c mRnd; diff --git a/include/m_Do/m_Do_ext.h b/include/m_Do/m_Do_ext.h index 2db74fae2..f0cef8fa6 100644 --- a/include/m_Do/m_Do_ext.h +++ b/include/m_Do/m_Do_ext.h @@ -403,7 +403,7 @@ public: void reset() { mp3DlineMat = NULL; } - void setMat(mDoExt_3DlineMat_c*); + void setMat(mDoExt_3DlineMat_c* pMat) { mp3DlineMat = pMat; } virtual void draw(); virtual ~mDoExt_3DlineMatSortPacket(); diff --git a/src/d/d_com_inf_game.cpp b/src/d/d_com_inf_game.cpp index b5e9e50de..5a793e7c9 100644 --- a/src/d/d_com_inf_game.cpp +++ b/src/d/d_com_inf_game.cpp @@ -532,7 +532,7 @@ int dComIfG_resDelete(request_of_phase_process_class* i_phase, const char* i_res JUT_ASSERT(1048, i_phase->id != 1); if (i_phase->id == cPhs_NEXT_e) { - dComIfG_deleteObjectResMain(i_resName); + dComIfG_deleteObjectRes(i_resName); i_phase->id = cPhs_INIT_e; } @@ -1079,12 +1079,12 @@ int dComIfGd_setShadow(u32 id, s8 param_2, J3DModel* pModel, cXyz* pPos, f32 par return sid; } -static const char * dummy_str[] = { - "0 <= cam_id && cam_id < mapc->num", - "0 <= arrow_id && arrow_id < mapa->num", - "0 <= room_cam_id && room_cam_id < pcam->num", - "0 <= arrow_id && arrow_id < parr->num", -}; +static void dummy() { + OSReport("0 <= cam_id && cam_id < mapc->num"); + OSReport("0 <= arrow_id && arrow_id < mapa->num"); + OSReport("0 <= room_cam_id && room_cam_id < pcam->num"); + OSReport("0 <= arrow_id && arrow_id < parr->num"); +} /* 8005468C-800547BC .text getSceneList__Fi */ stage_scls_info_class* getSceneList(int i_no) { @@ -1205,9 +1205,7 @@ void dComIfGs_setGameStartStage() { room_no = scls_p->mRoom; point = scls_p->mStart; } - } else if (stage_type == 1 || stage_type == 6 || stage_type == 3 || stage_type == 8 || - save_tbl == 9) - { + } else if (stage_type == 1 || stage_type == 6 || stage_type == 3 || stage_type == 8 || save_tbl == 9) { stage_scls_info_class* scls_p = getSceneList(0); strcpy(stage_name, scls_p->mStage); room_no = scls_p->mRoom; @@ -1226,8 +1224,7 @@ void dComIfGs_setGameStartStage() { stage_map_info_class* mapInfo = dComIfGp_getStage().getMapInfo(); JUT_ASSERT(2362, mapInfo != 0); - room_no = dStage_mapInfo_GetOceanX(mapInfo) + - (((dStage_mapInfo_GetOceanZ(mapInfo) + 3) * 7) + 4); + room_no = 4 + dStage_mapInfo_GetOceanX(mapInfo) + ((dStage_mapInfo_GetOceanZ(mapInfo) + 3) * 7); point = 0; } else { strcpy(stage_name, "sea"); diff --git a/src/d/d_drawlist.cpp b/src/d/d_drawlist.cpp index cc53b8f0f..87efbc145 100644 --- a/src/d/d_drawlist.cpp +++ b/src/d/d_drawlist.cpp @@ -3,17 +3,29 @@ // Translation Unit: d_drawlist.cpp // -#include "d_drawlist.h" -#include "dolphin/types.h" +#include "d/d_drawlist.h" +#include "d/d_com_inf_game.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "JSystem/JUtility/JUTAssert.h" +#include "SSystem/SComponent/c_rnd.h" +#include "SSystem/SComponent/c_bg_s_shdw_draw.h" /* 800804A4-800804C0 .text setViewPort__14dDlst_window_cFffffff */ -void dDlst_window_c::setViewPort(f32, f32, f32, f32, f32, f32) { - /* Nonmatching */ +void dDlst_window_c::setViewPort(f32 x, f32 y, f32 w, f32 h, f32 n, f32 f) { + mViewport.mXOrig = x; + mViewport.mYOrig = y; + mViewport.mWidth = w; + mViewport.mHeight = h; + mViewport.mNearZ = n; + mViewport.mFarZ = f; } /* 800804C0-800804D4 .text setScissor__14dDlst_window_cFffff */ -void dDlst_window_c::setScissor(f32, f32, f32, f32) { - /* Nonmatching */ +void dDlst_window_c::setScissor(f32 x, f32 y, f32 w, f32 h) { + mViewport.mScissor.mXOrig = x; + mViewport.mScissor.mYOrig = y; + mViewport.mScissor.mWidth = w; + mViewport.mScissor.mHeight = h; } /* 800804D4-80080694 .text draw__13dDlst_2DTri_cFv */ @@ -86,31 +98,6 @@ void dDlst_2D_c::draw() { /* Nonmatching */ } -/* 80082264-80082274 .text init__8cM_rnd_cFiii */ -void cM_rnd_c::init(int, int, int) { - /* Nonmatching */ -} - -/* 80082274-80082368 .text get__8cM_rnd_cFv */ -void cM_rnd_c::get() { - /* Nonmatching */ -} - -/* 80082368-800823A0 .text getF__8cM_rnd_cFf */ -void cM_rnd_c::getF(f32) { - /* Nonmatching */ -} - -/* 800823A0-800823E8 .text getFX__8cM_rnd_cFf */ -void cM_rnd_c::getFX(f32) { - /* Nonmatching */ -} - -/* 800823E8-80082424 .text getValue__8cM_rnd_cFff */ -void cM_rnd_c::getValue(f32, f32) { - /* Nonmatching */ -} - /* 80082424-80082794 .text draw__18dDlst_effectLine_cFv */ void dDlst_effectLine_c::draw() { /* Nonmatching */ @@ -122,12 +109,12 @@ void dDlst_effectLine_c::update(cXyz&, _GXColor&, u16, u16, u16, u16, f32, f32, } /* 80082828-80082838 .text set__22dDlst_alphaModelData_cFUcPA4_fUc */ -void dDlst_alphaModelData_c::set(u8, f32(*)[4], u8) { +void dDlst_alphaModelData_c::set(u8, Mtx, u8) { /* Nonmatching */ } /* 80082838-80082E44 .text draw__22dDlst_alphaModelData_cFPA4_f */ -void dDlst_alphaModelData_c::draw(f32(*)[4]) { +void dDlst_alphaModelData_c::draw(Mtx) { /* Nonmatching */ } @@ -137,7 +124,7 @@ dDlst_alphaModel_c::dDlst_alphaModel_c() { } /* 80082E58-80082EFC .text create__18dDlst_alphaModel_cFi */ -void dDlst_alphaModel_c::create(int) { +dDlst_alphaModel_c * dDlst_alphaModel_c::create(int) { /* Nonmatching */ } @@ -152,12 +139,12 @@ dDlst_alphaModelData_c::dDlst_alphaModelData_c() { } /* 80082F3C-80082F9C .text set__18dDlst_alphaModel_cFUcPA4_fUc */ -void dDlst_alphaModel_c::set(u8, f32(*)[4], u8) { +BOOL dDlst_alphaModel_c::set(u8 type, Mtx mtx, u8 alpha) { /* Nonmatching */ } /* 80082F9C-80083064 .text draw__18dDlst_alphaModel_cFPA4_f */ -void dDlst_alphaModel_c::draw(f32(*)[4]) { +void dDlst_alphaModel_c::draw(Mtx) { /* Nonmatching */ } @@ -167,12 +154,12 @@ void dDlst_alphaModelPacket::draw() { } /* 800832C4-800833CC .text set__18dDlst_shadowPoly_cFP10cBgD_Vtx_tUsUsUsP8cM3dGPla */ -void dDlst_shadowPoly_c::set(cBgD_Vtx_t*, u16, u16, u16, cM3dGPla*) { +int dDlst_shadowPoly_c::set(cBgD_Vtx_t*, u16, u16, u16, cM3dGPla*) { /* Nonmatching */ } /* 800833CC-800834A4 .text set__18dDlst_shadowPoly_cFR4cXyzR4cXyzR4cXyz */ -void dDlst_shadowPoly_c::set(cXyz&, cXyz&, cXyz&) { +int dDlst_shadowPoly_c::set(cXyz&, cXyz&, cXyz&) { /* Nonmatching */ } @@ -181,33 +168,34 @@ void dDlst_shadowPoly_c::draw() { /* Nonmatching */ } -/* 80083568-80083608 .text __dt__18dDlst_shadowReal_cFv */ -dDlst_shadowReal_c::~dDlst_shadowReal_c() { - /* Nonmatching */ -} - -/* 80083608-80083668 .text __dt__17dDlst_shadowTri_cFv */ -dDlst_shadowTri_c::~dDlst_shadowTri_c() { - /* Nonmatching */ -} - -/* 80083668-800836E0 .text J3DDrawBuffer__create__FUl */ -void J3DDrawBuffer__create__FUl { - /* Nonmatching */ -} - /* 800836E0-800837F0 .text init__18dDlst_shadowReal_cFv */ void dDlst_shadowReal_c::init() { - /* Nonmatching */ + u32 texDataSize = GXGetTexBufferSize(0x80, 0x80, GX_TF_I4, GX_FALSE, 0); + mpTexData = new(0x20) u8[texDataSize]; + + GXInitTexObj(&mTexObj, mpTexData, 0x80, 0x80, GX_TF_I4, GX_CLAMP, GX_CLAMP, GX_FALSE); + GXInitTexObjLOD(&mTexObj, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_ANISO_1); + + mpCallBack = new J3DCallBackPacket(); + mpDrawBuffer = new J3DDrawBuffer(); + mpDrawBuffer->setInvalidSort(); } /* 800837F0-80083850 .text reset__18dDlst_shadowReal_cFv */ void dDlst_shadowReal_c::reset() { - /* Nonmatching */ + if (mState == 1) { + mState = 2; + } else { + mState = 0; + field_0x1 = -1; + } + + mpDrawBuffer->frameInit(); + mModelNum = 0; } /* 80083850-8008398C .text imageDraw__18dDlst_shadowReal_cFPA4_f */ -void dDlst_shadowReal_c::imageDraw(f32(*)[4]) { +void dDlst_shadowReal_c::imageDraw(Mtx) { /* Nonmatching */ } @@ -231,34 +219,34 @@ void realPolygonCheck(cXyz*, f32, f32, cXyz*, dDlst_shadowPoly_c*) { /* Nonmatching */ } -/* 800840B0-80084138 .text __dt__14ShdwDrawPoly_cFv */ -ShdwDrawPoly_c::~ShdwDrawPoly_c() { - /* Nonmatching */ -} - /* 80084138-800841B0 .text __dt__13cBgS_ShdwDrawFv */ cBgS_ShdwDraw::~cBgS_ShdwDraw() { /* Nonmatching */ } /* 800841B0-8008450C .text setShadowRealMtx__FPA4_fPA4_fPA4_fP4cXyzP4cXyzffP18dDlst_shadowPoly_cf */ -void setShadowRealMtx(f32(*)[4], f32(*)[4], f32(*)[4], cXyz*, cXyz*, f32, f32, dDlst_shadowPoly_c*, f32) { +void setShadowRealMtx(Mtx, Mtx, Mtx, cXyz*, cXyz*, f32, f32, dDlst_shadowPoly_c*, f32) { /* Nonmatching */ } /* 8008450C-800846C8 .text set__18dDlst_shadowReal_cFUlScP8J3DModelP4cXyzffP12dKy_tevstr_c */ -void dDlst_shadowReal_c::set(u32, s8, J3DModel*, cXyz*, f32, f32, dKy_tevstr_c*) { +u32 dDlst_shadowReal_c::set(u32, s8, J3DModel*, cXyz*, f32, f32, dKy_tevstr_c*) { /* Nonmatching */ } /* 800846C8-80084844 .text set2__18dDlst_shadowReal_cFUlScP8J3DModelP4cXyzffP12dKy_tevstr_c */ -void dDlst_shadowReal_c::set2(u32, s8, J3DModel*, cXyz*, f32, f32, dKy_tevstr_c*) { +u32 dDlst_shadowReal_c::set2(u32, s8, J3DModel*, cXyz*, f32, f32, dKy_tevstr_c*) { /* Nonmatching */ } /* 80084844-800848E8 .text add__18dDlst_shadowReal_cFP8J3DModel */ -void dDlst_shadowReal_c::add(J3DModel*) { - /* Nonmatching */ +bool dDlst_shadowReal_c::add(J3DModel* model) { + if (mModelNum == 0 || model == NULL) + return false; + + JUT_ASSERT(0xfe0, mModelNum < MODEL_MAX); + mpModels[mModelNum++] = model; + return true; } /* 800848E8-80084AC8 .text draw__20dDlst_shadowSimple_cFv */ @@ -282,32 +270,32 @@ void dDlst_shadowControl_c::reset() { } /* 80084DEC-80084EF0 .text imageDraw__21dDlst_shadowControl_cFPA4_f */ -void dDlst_shadowControl_c::imageDraw(f32(*)[4]) { +void dDlst_shadowControl_c::imageDraw(Mtx) { /* Nonmatching */ } /* 80084EF0-800850D4 .text draw__21dDlst_shadowControl_cFPA4_f */ -void dDlst_shadowControl_c::draw(f32(*)[4]) { +void dDlst_shadowControl_c::draw(Mtx) { /* Nonmatching */ } /* 800850D4-80085170 .text setReal__21dDlst_shadowControl_cFUlScP8J3DModelP4cXyzffP12dKy_tevstr_c */ -void dDlst_shadowControl_c::setReal(u32, s8, J3DModel*, cXyz*, f32, f32, dKy_tevstr_c*) { +int dDlst_shadowControl_c::setReal(u32, s8, J3DModel*, cXyz*, f32, f32, dKy_tevstr_c*) { /* Nonmatching */ } /* 80085170-8008520C .text setReal2__21dDlst_shadowControl_cFUlScP8J3DModelP4cXyzffP12dKy_tevstr_c */ -void dDlst_shadowControl_c::setReal2(u32, s8, J3DModel*, cXyz*, f32, f32, dKy_tevstr_c*) { +int dDlst_shadowControl_c::setReal2(u32, s8, J3DModel*, cXyz*, f32, f32, dKy_tevstr_c*) { /* Nonmatching */ } /* 8008520C-80085274 .text addReal__21dDlst_shadowControl_cFUlP8J3DModel */ -void dDlst_shadowControl_c::addReal(u32, J3DModel*) { +bool dDlst_shadowControl_c::addReal(u32, J3DModel*) { /* Nonmatching */ } /* 80085274-800852D8 .text setSimple__21dDlst_shadowControl_cFP4cXyzffP4cXyzsfP9_GXTexObj */ -void dDlst_shadowControl_c::setSimple(cXyz*, f32, f32, cXyz*, s16, f32, _GXTexObj*) { +int dDlst_shadowControl_c::setSimple(cXyz*, f32, f32, cXyz*, s16, f32, _GXTexObj*) { /* Nonmatching */ } @@ -332,7 +320,7 @@ void mirrorPolygonCheck(cXyz*, cXyz*, f32, dDlst_shadowPoly_c*) { } /* 80085808-800859DC .text update__18dDlst_mirrorPacketFPA4_fUcf */ -void dDlst_mirrorPacket::update(f32(*)[4], u8, f32) { +void dDlst_mirrorPacket::update(Mtx, u8, f32) { /* Nonmatching */ } @@ -347,7 +335,7 @@ void dDlst_alphaInvVolPacket::draw() { } /* 80085BBC-80085BFC .text newData__13dDlst_peekZ_cFssPUl */ -void dDlst_peekZ_c::newData(s16, s16, u32*) { +int dDlst_peekZ_c::newData(s16, s16, u32*) { /* Nonmatching */ } @@ -361,44 +349,57 @@ dDlst_list_c::dDlst_list_c() { /* Nonmatching */ } -/* 80085D74-80085DA4 .text __ct__26mDoExt_3DlineMatSortPacketFv */ -mDoExt_3DlineMatSortPacket::mDoExt_3DlineMatSortPacket() { - /* Nonmatching */ -} - -/* 80085DA4-80085E18 .text __ct__18dDlst_shadowReal_cFv */ -dDlst_shadowReal_c::dDlst_shadowReal_c() { - /* Nonmatching */ -} - -/* 80085E18-80085E9C .text __dt__22dDlst_shadowRealPoly_cFv */ -dDlst_shadowRealPoly_c::~dDlst_shadowRealPoly_c() { - /* Nonmatching */ -} - -/* 80085E9C-80085EE4 .text __ct__17dDlst_shadowTri_cFv */ -dDlst_shadowTri_c::dDlst_shadowTri_c() { - /* Nonmatching */ -} - -/* 80085EE4-80085F2C .text __dt__18dDlst_shadowPoly_cFv */ -dDlst_shadowPoly_c::~dDlst_shadowPoly_c() { - /* Nonmatching */ -} - -/* 80085F2C-80085F68 .text __dt__20dDlst_shadowSimple_cFv */ -dDlst_shadowSimple_c::~dDlst_shadowSimple_c() { - /* Nonmatching */ -} - -/* 80085F68-80085F6C .text __ct__20dDlst_shadowSimple_cFv */ -dDlst_shadowSimple_c::dDlst_shadowSimple_c() { - /* Nonmatching */ +static J3DDrawBuffer * J3DDrawBuffer__create(u32 size) { + return new J3DDrawBuffer(size); } /* 80085F6C-800861F4 .text init__12dDlst_list_cFv */ -void dDlst_list_c::init() { - /* Nonmatching */ +bool dDlst_list_c::init() { + mpOpaListSky = J3DDrawBuffer__create(0x20); + mpXluListSky = J3DDrawBuffer__create(0x20); + mpOpaListP0 = J3DDrawBuffer__create(1); + mpOpaListP1 = J3DDrawBuffer__create(0x20); + mpXluListP1 = J3DDrawBuffer__create(0x20); + mpOpaListBG = J3DDrawBuffer__create(0x80); + mpXluListBG = J3DDrawBuffer__create(0x80); + mpOpaList = J3DDrawBuffer__create(0x100); + mpXluList = J3DDrawBuffer__create(0x100); + mpOpaListFilter = J3DDrawBuffer__create(0x20); + mpOpaListMaskOff = J3DDrawBuffer__create(0x20); + mpXluListMaskOff = J3DDrawBuffer__create(0x100); + mpOpaListInvisible = J3DDrawBuffer__create(0x20); + mpXluListInvisible = J3DDrawBuffer__create(0x20); + mpOpaList2D = J3DDrawBuffer__create(1); + + if (mpOpaListSky == NULL || mpXluListSky == NULL || mpOpaListP0 == NULL || mpOpaListP1 == NULL || mpXluListP1 == NULL || mpOpaListBG == NULL || mpXluListBG == NULL || mpOpaList == NULL || mpXluList == NULL || mpOpaListFilter == NULL || mpOpaListMaskOff == NULL || mpXluListMaskOff == NULL || mpOpaListInvisible == NULL || mpXluListInvisible == NULL || mpOpaList2D == NULL) + return false; + + mpOpaListSky->setNonSort(); + mpXluListSky->setNonSort(); + mpOpaListP0->setNonSort(); + mpOpaListP1->setNonSort(); + mpXluListP1->setNonSort(); + mpXluListBG->setNonSort(); + mpXluList->setZSort(); + mpOpaListFilter->setZSort(); + mpXluListMaskOff->setZSort(); + mpXluListInvisible->setZSort(); + mpOpaList2D->setNonSort(); + setOpaList(); + setXluList(); + field_0x4c = &field_0x3c[0]; + mp2DOpaTop = &mp2DOpaTopArr[0]; + mp2DOpa = &mp2DOpaArr[0]; + mp2DXlu = &mp2DXluArr[0]; + mShadowControl.init(); + mpAlphaModel = dDlst_alphaModel_c::create(0x40); + mpSpotModel = dDlst_alphaModel_c::create(0x08); + mpLightModel = dDlst_alphaModel_c::create(0x10); + + if (mpAlphaModel == NULL || mpSpotModel == NULL || mpLightModel == NULL) + return false; + + return true; } /* 800861F4-80086368 .text __dt__12dDlst_list_cFv */ @@ -408,22 +409,64 @@ dDlst_list_c::~dDlst_list_c() { /* 80086368-80086490 .text reset__12dDlst_list_cFv */ void dDlst_list_c::reset() { - /* Nonmatching */ + mpOpaListSky->frameInit(); + mpXluListSky->frameInit(); + mpOpaListP0->frameInit(); + mpOpaListP1->frameInit(); + mpXluListP1->frameInit(); + mpOpaListBG->frameInit(); + mpXluListBG->frameInit(); + mpOpaList->frameInit(); + mpXluList->frameInit(); + mpOpaListFilter->frameInit(); + mpOpaListMaskOff->frameInit(); + mpXluListMaskOff->frameInit(); + mpOpaListInvisible->frameInit(); + mpXluListInvisible->frameInit(); + mpOpaList2D->frameInit(); + setOpaList(); + setXluList(); + field_0x4c = &field_0x3c[0]; + mp2DOpaTop = &mp2DOpaTopArr[0]; + mp2DOpa = &mp2DOpaArr[0]; + mp2DXlu = &mp2DXluArr[0]; + g_dComIfG_gameInfo.drawlist.mpAlphaModel->mNum = 0; + g_dComIfG_gameInfo.drawlist.mpSpotModel->mNum = 0; + g_dComIfG_gameInfo.drawlist.mpLightModel->mNum = 0; + mShadowControl.reset(); + for (u32 i = 0; i < ARRAY_SIZE(m3DLineMatSortPacket); i++) + m3DLineMatSortPacket[i].setMat(NULL); } /* 80086490-80086540 .text entryZSortXluDrawList__12dDlst_list_cFP13J3DDrawBufferP9J3DPacketR4cXyz */ -void dDlst_list_c::entryZSortXluDrawList(J3DDrawBuffer*, J3DPacket*, cXyz&) { +void dDlst_list_c::entryZSortXluDrawList(J3DDrawBuffer* pBuffer, J3DPacket* pPacket, cXyz& pos) { /* Nonmatching */ + f32 z = -J3DCalcZValue(j3dSys.getViewMtx(), pos); + u16 idx; + if (z <= 40.05859) { + idx = 0; + } else if (z >= 9960.941f) { + idx = 0xFF; + } else { + idx = z / 39.05859; + } + pBuffer->entryImm(pPacket, 0xFF - z); } /* 80086540-80086570 .text set__12dDlst_list_cFRPP12dDlst_base_cRPP12dDlst_base_cP12dDlst_base_c */ -void dDlst_list_c::set(dDlst_base_c**&, dDlst_base_c**&, dDlst_base_c*) { - /* Nonmatching */ +bool dDlst_list_c::set(dDlst_base_c**& pList, dDlst_base_c**& pEnd, dDlst_base_c* pItem) { + if (pList >= pEnd) + return false; + + *pList = pItem; + pList++; + return true; } /* 80086570-800865C8 .text draw__12dDlst_list_cFPP12dDlst_base_cPP12dDlst_base_c */ -void dDlst_list_c::draw(dDlst_base_c**, dDlst_base_c**) { - /* Nonmatching */ +void dDlst_list_c::draw(dDlst_base_c** pList, dDlst_base_c** pEnd) { + for (; pList < pEnd; pList++) + (*pList)->draw(); } /* 800865C8-800866C8 .text wipeIn__12dDlst_list_cFfR8_GXColor */ @@ -432,8 +475,8 @@ void dDlst_list_c::wipeIn(f32, _GXColor&) { } /* 800866C8-800866F0 .text wipeIn__12dDlst_list_cFf */ -void dDlst_list_c::wipeIn(f32) { - /* Nonmatching */ +void dDlst_list_c::wipeIn(f32 time) { + wipeIn(-time, g_blackColor); } /* 800866F0-80086790 .text calcWipe__12dDlst_list_cFv */ @@ -446,77 +489,12 @@ void dDlst_texSpecmapST(const cXyz*, const dKy_tevstr_c*, J3DModelData*, f32) { /* Nonmatching */ } -/* 8008696C-800869C8 .text __dt__23dDlst_alphaInvVolPacketFv */ -dDlst_alphaInvVolPacket::~dDlst_alphaInvVolPacket() { - /* Nonmatching */ -} - -/* 800869C8-80086A24 .text __dt__20dDlst_alphaVolPacketFv */ -dDlst_alphaVolPacket::~dDlst_alphaVolPacket() { - /* Nonmatching */ -} - -/* 80086A24-80086AD0 .text __dt__18dDlst_mirrorPacketFv */ -dDlst_mirrorPacket::~dDlst_mirrorPacket() { - /* Nonmatching */ -} - /* 80086AD0-80086AD8 .text getTri__22dDlst_shadowRealPoly_cFv */ -void dDlst_shadowRealPoly_c::getTri() { - /* Nonmatching */ +dDlst_shadowTri_c * dDlst_shadowRealPoly_c::getTri() { + return mShadowTri; } /* 80086AD8-80086AE0 .text getTriMax__22dDlst_shadowRealPoly_cFv */ -void dDlst_shadowRealPoly_c::getTriMax() { - /* Nonmatching */ -} - -/* 80086AE0-80086B3C .text __dt__22dDlst_alphaModelPacketFv */ -dDlst_alphaModelPacket::~dDlst_alphaModelPacket() { - /* Nonmatching */ -} - -/* 80086B3C-80086B98 .text __dt__18dDlst_effectLine_cFv */ -dDlst_effectLine_c::~dDlst_effectLine_c() { - /* Nonmatching */ -} - -/* 80086B98-80086C10 .text __dt__10dDlst_2D_cFv */ -dDlst_2D_c::~dDlst_2D_c() { - /* Nonmatching */ -} - -/* 80086C10-80086C6C .text __dt__12dDlst_2DMt_cFv */ -dDlst_2DMt_c::~dDlst_2DMt_c() { - /* Nonmatching */ -} - -/* 80086C6C-80086CC8 .text __dt__11dDlst_2Dm_cFv */ -dDlst_2Dm_c::~dDlst_2Dm_c() { - /* Nonmatching */ -} - -/* 80086CC8-80086D24 .text __dt__11dDlst_2DM_cFv */ -dDlst_2DM_c::~dDlst_2DM_c() { - /* Nonmatching */ -} - -/* 80086D24-80086D80 .text __dt__12dDlst_2DT2_cFv */ -dDlst_2DT2_c::~dDlst_2DT2_c() { - /* Nonmatching */ -} - -/* 80086D80-80086DDC .text __dt__11dDlst_2DT_cFv */ -dDlst_2DT_c::~dDlst_2DT_c() { - /* Nonmatching */ -} - -/* 80086DDC-80086E38 .text __dt__15dDlst_2DPoint_cFv */ -dDlst_2DPoint_c::~dDlst_2DPoint_c() { - /* Nonmatching */ -} - -/* 80086E38-80086E94 .text __dt__13dDlst_2DTri_cFv */ -dDlst_2DTri_c::~dDlst_2DTri_c() { - /* Nonmatching */ +s32 dDlst_shadowRealPoly_c::getTriMax() { + return ARRAY_SIZE(mShadowTri); } diff --git a/src/d/d_jnt_hit.cpp b/src/d/d_jnt_hit.cpp index 2b8c197a2..7cc8ba3f6 100644 --- a/src/d/d_jnt_hit.cpp +++ b/src/d/d_jnt_hit.cpp @@ -12,7 +12,7 @@ JntHit_HIO_c::JntHit_HIO_c() { } /* 80060C44-80060EC4 .text CreateInit__8JntHit_cFv */ -void JntHit_c::CreateInit() { +BOOL JntHit_c::CreateInit() { /* Nonmatching */ } @@ -43,7 +43,17 @@ s32 JntHit_c::searchJntHitPosAngleOffset(cXyz*, csXyz*, cXyz*, csXyz*) { /* 800627DC-8006286C .text JntHit_create__FP8J3DModelP16__jnt_hit_data_cs */ JntHit_c* JntHit_create(J3DModel* model, __jnt_hit_data_c* jntHitData, s16 hitDataCount) { - /* Nonmatching */ + JntHit_c * pJntHit = new JntHit_c(); + + if (pJntHit != NULL) { + pJntHit->mpHitData = jntHitData; + pJntHit->mpModel = model; + pJntHit->mHitDataCount = hitDataCount; + if (pJntHit->CreateInit()) + return pJntHit; + } + + return NULL; } /* 8006286C-800628B4 .text __dt__12JntHit_HIO_cFv */ diff --git a/src/d/d_kankyo_rain.cpp b/src/d/d_kankyo_rain.cpp index 3b1d4caec..1e7b84c0e 100644 --- a/src/d/d_kankyo_rain.cpp +++ b/src/d/d_kankyo_rain.cpp @@ -12,7 +12,7 @@ #include "m_Do/m_Do_lib.h" #include "JSystem/JKernel/JKRHeap.h" -static u32 now_room; +static u32 now_room = -1; /* 8008AA30-8008AB3C .text vectle_calc__FP10DOUBLE_POSP4cXyz */ void vectle_calc(DOUBLE_POS* i_pos, cXyz* o_out) { @@ -202,8 +202,9 @@ void dKyr_rain_init() { } /* 8008D0B4-8008D0DC .text rain_bg_chk__FP19dKankyo_rain_Packeti */ -void rain_bg_chk(dKankyo_rain_Packet*, int) { - /* Nonmatching */ +void rain_bg_chk(dKankyo_rain_Packet* pPkt, int idx) { + camera_class * pCamera = g_dComIfG_gameInfo.play.mCameraInfo[0].mpCamera; + pPkt->mRainEff[idx].field_0x30 = pCamera->mLookat.mCenter.y + -800.0f; } /* 8008D0DC-8008D53C .text overhead_bg_chk__Fv */ @@ -236,11 +237,12 @@ void dKyr_snow_init() { } else { g_env_light.mpSnowPacket->mpTexture = (u8*)dComIfG_getStageRes("Stage", "ak_kazanbai00.bti"); } + + for (u32 i = 0; i < ARRAY_SIZE(g_env_light.mpSnowPacket->mEff); i++) + g_env_light.mpSnowPacket->mEff[i].mStatus = 0; + g_env_light.mpSnowPacket->mEffCount = 0; + g_env_light.mpSnowPacket->mOldEyePos = pCamera->mLookat.mEye; } - for (u32 i = 0; i < ARRAY_SIZE(g_env_light.mpSnowPacket->mEff); i++) - g_env_light.mpSnowPacket->mEff[i].mStatus = 0; - g_env_light.mpSnowPacket->mEffCount = 0; - g_env_light.mpSnowPacket->mOldEyePos = pCamera->mLookat.mEye; } /* 8008F23C-8008F9FC .text dKyr_snow_move__Fv */ @@ -297,12 +299,17 @@ void light_at_hit_check(cXyz*) { /* 80092310-80092330 .text dKyr_poison_live_check__Fv */ BOOL dKyr_poison_live_check() { - /* Nonmatching */ + BOOL ret = FALSE; + if (g_env_light.mPoisonCount != 0) + ret = TRUE; + return ret; } /* 80092330-80092448 .text dKyr_poison_light_colision__Fv */ void dKyr_poison_light_colision() { /* Nonmatching */ + if (!dKyr_poison_live_check()) + return; } /* 80092448-8009258C .text poison_init__Fv */ @@ -333,19 +340,20 @@ void vrkumo_move() { /* 800940D4-80094144 .text dKy_wave_chan_init__Fv */ void dKy_wave_chan_init() { + g_env_light.mWaveChan.mWaveCount = 0; g_env_light.mWaveChan.field_0x0 = -1.0f; g_env_light.mWaveChan.field_0x4 = 0.0f; g_env_light.mWaveChan.field_0x8 = 0.0f; - g_env_light.mWaveChan.mWaveSpeed = 0.1f; + g_env_light.mWaveChan.mWaveSpeed = 0.3f; g_env_light.mWaveChan.mWaveSpawnDist = 3000.0f; g_env_light.mWaveChan.mWaveSpawnRadius = 3150.0f; + g_env_light.mWaveChan.mWaveReset = 0; g_env_light.mWaveChan.mWaveScale = 250.0f; + g_env_light.mWaveChan.mWaveScaleBottom = 5.0f; g_env_light.mWaveChan.mWaveScaleRand = 0.217f; g_env_light.mWaveChan.mWaveCounterSpeedScale = 1.6f; - g_env_light.mWaveChan.mWaveScaleBottom = 5.0f; - g_env_light.mWaveChan.mWaveCount = 0; - g_env_light.mWaveChan.mWaveReset = 0; g_env_light.mWaveChan.field_0x2f = 0; + g_env_light.mWaveChan.mWaveSpeed = 0.1f; } /* 80094144-8009428C .text snap_sunmoon_proc__FP4cXyzi */ @@ -466,7 +474,7 @@ void dKyr_drawSibuki(Mtx drawMtx, u8** pImg) { } GXSetClipMode(GX_CLIP_ENABLE); - J3DShape::sOldVcdVatCmd = NULL; + J3DShape::resetVcdVatCache(); } /* 80096D18-800973CC .text drawPoison__FPA4_fPPUc */