diff --git a/include/d/a/d_a_player.h b/include/d/a/d_a_player.h index 62198346e2b..dabaf3030e6 100644 --- a/include/d/a/d_a_player.h +++ b/include/d/a/d_a_player.h @@ -441,7 +441,7 @@ public: static void setLookPos(cXyz*); static void setPlayerSe(u32); static bool linkGrabSubjectNoDraw(fopAc_ac_c*); - void wolfGrabSubjectNoDraw(fopAc_ac_c*); + static bool wolfGrabSubjectNoDraw(fopAc_ac_c*); static bool checkRoomRestartStart(); static u32 checkCarryStartLightBallA(); static u32 checkCarryStartLightBallB(); diff --git a/rel/d/a/e/d_a_e_yc/d_a_e_yc.cpp b/rel/d/a/e/d_a_e_yc/d_a_e_yc.cpp index 5d8c7bb4e2b..d664b9a8ca6 100644 --- a/rel/d/a/e/d_a_e_yc/d_a_e_yc.cpp +++ b/rel/d/a/e/d_a_e_yc/d_a_e_yc.cpp @@ -7,6 +7,180 @@ #include "dol2asm.h" #include "dolphin/types.h" +// +// Types: +// + +struct request_of_phase_process_class {}; + +struct mDoMtx_stack_c { + /* 8000CE38 */ void scaleM(f32, f32, f32); + + static u8 now[48]; +}; + +struct mDoExt_McaMorfCallBack2_c {}; + +struct mDoExt_McaMorfCallBack1_c {}; + +struct J3DAnmTransform {}; + +struct J3DModelData {}; + +struct Z2Creature {}; + +struct mDoExt_McaMorfSO { + /* 800107D0 */ mDoExt_McaMorfSO(J3DModelData*, mDoExt_McaMorfCallBack1_c*, + mDoExt_McaMorfCallBack2_c*, J3DAnmTransform*, int, f32, int, + int, Z2Creature*, u32, u32); + /* 80010E70 */ void setAnm(J3DAnmTransform*, int, f32, f32, f32, f32); + /* 800110B0 */ void play(u32, s8); + /* 800111C0 */ void entryDL(); + /* 800111EC */ void modelCalc(); + /* 80011310 */ void stopZelAnime(); +}; + +struct fopAc_ac_c { + /* 80018B64 */ fopAc_ac_c(); +}; + +struct e_yc_class {}; + +struct daE_YC_HIO_c { + /* 807EFECC */ daE_YC_HIO_c(); + /* 807F27BC */ ~daE_YC_HIO_c(); +}; + +struct Vec {}; + +struct cXyz { + /* 80266B34 */ void operator-(Vec const&) const; +}; + +struct dVibration_c { + /* 8006FA24 */ void StartShock(int, int, cXyz); +}; + +struct dKy_tevstr_c {}; + +struct dScnKy_env_light_c { + /* 801A37C4 */ void settingTevStruct(int, cXyz*, dKy_tevstr_c*); + /* 801A4DA0 */ void setLightTevColorType_MAJI(J3DModelData*, dKy_tevstr_c*); +}; + +struct dRes_info_c {}; + +struct dRes_control_c { + /* 8003C2EC */ void getRes(char const*, s32, dRes_info_c*, int); +}; + +struct dPa_levelEcallBack {}; + +struct csXyz {}; + +struct _GXColor {}; + +struct dPa_control_c { + struct level_c { + /* 8004B918 */ void getEmitter(u32); + }; + + /* 8004C218 */ void setHitMark(u16, fopAc_ac_c*, cXyz const*, csXyz const*, cXyz const*, u32); + /* 8004D4CC */ void set(u32, u8, u16, cXyz const*, dKy_tevstr_c const*, csXyz const*, + cXyz const*, u8, dPa_levelEcallBack*, s8, _GXColor const*, + _GXColor const*, cXyz const*, f32); + /* 8004CA90 */ void set(u8, u16, cXyz const*, dKy_tevstr_c const*, csXyz const*, cXyz const*, + u8, dPa_levelEcallBack*, s8, _GXColor const*, _GXColor const*, + cXyz const*, f32); +}; + +struct dDlst_shadowControl_c { + static u8 mSimpleTexObj[32]; +}; + +struct dCcD_Stts { + /* 80083860 */ void Init(int, int, fopAc_ac_c*); +}; + +struct dCcD_SrcSph {}; + +struct dCcD_Sph { + /* 80084A34 */ void Set(dCcD_SrcSph const&); +}; + +struct dCcD_GStts { + /* 80083760 */ dCcD_GStts(); + /* 80083830 */ void Move(); +}; + +struct dCcD_GObjInf { + /* 80083A28 */ dCcD_GObjInf(); + /* 80084460 */ void ChkTgHit(); + /* 800844F8 */ void GetTgHitObj(); +}; + +struct dBgS_PolyPassChk { + /* 80078E68 */ void SetObj(); +}; + +struct dBgS_ObjAcch { + /* 807F274C */ ~dBgS_ObjAcch(); +}; + +struct dBgS_AcchCir { + /* 80075EAC */ dBgS_AcchCir(); + /* 80075F58 */ void SetWall(f32, f32); +}; + +struct dBgS {}; + +struct dBgS_Acch { + /* 80075F94 */ ~dBgS_Acch(); + /* 800760A0 */ dBgS_Acch(); + /* 80076248 */ void Set(cXyz*, cXyz*, fopAc_ac_c*, int, dBgS_AcchCir*, cXyz*, csXyz*, csXyz*); + /* 80076AAC */ void CrrPos(dBgS&); +}; + +struct cM3dGSph { + /* 8026F648 */ void SetC(cXyz const&); + /* 8026F708 */ void SetR(f32); + /* 807F26BC */ ~cM3dGSph(); +}; + +struct cM3dGAab { + /* 807F2704 */ ~cM3dGAab(); +}; + +struct cCcD_Obj {}; + +struct cCcS { + /* 80264BA8 */ void Set(cCcD_Obj*); +}; + +struct cBgS_PolyInfo {}; + +struct _GXTexObj {}; + +struct Z2CreatureEnemy { + /* 802C0F64 */ Z2CreatureEnemy(); + /* 802C1094 */ void init(Vec*, Vec*, u8, u8); + /* 802C1B7C */ void setLinkSearch(bool); + /* 802C1B90 */ void setEnemyName(char const*); +}; + +struct JGeometry { + template + struct TVec3 {}; + /* TVec3 */ + struct TVec3__template0 {}; +}; + +struct J3DModel {}; + +struct J3DFrameCtrl { + /* 8032842C */ void checkPass(f32); +}; + // // Forward References: // @@ -108,6 +282,11 @@ extern "C" void setEnemyName__15Z2CreatureEnemyFPCc(); extern "C" void* __nw__FUl(); extern "C" void __dl__FPv(); extern "C" void checkPass__12J3DFrameCtrlFf(); +extern "C" void PSMTXCopy(); +extern "C" void PSMTXTrans(); +extern "C" void PSMTXMultVec(); +extern "C" void PSVECAdd(); +extern "C" void PSVECSquareMag(); extern "C" void _savegpr_24(); extern "C" void _savegpr_25(); extern "C" void _savegpr_27(); @@ -119,15 +298,19 @@ extern "C" void _restgpr_27(); extern "C" void _restgpr_28(); extern "C" void _restgpr_29(); extern "C" extern void* g_fopAc_Method[8]; +extern "C" extern void* g_fpcLf_Method[5 + 1 /* padding */]; extern "C" extern void* __vt__8dCcD_Sph[36]; extern "C" extern void* __vt__9dCcD_Stts[11]; extern "C" extern void* __vt__12cCcD_SphAttr[25]; extern "C" extern void* __vt__14cCcD_ShapeAttr[22]; extern "C" extern void* __vt__9cCcD_Stts[8]; extern "C" u8 now__14mDoMtx_stack_c[48]; -// extern "C" extern u8 g_dComIfG_gameInfo[122384]; +extern "C" extern u8 g_dComIfG_gameInfo[122384]; extern "C" u8 mSimpleTexObj__21dDlst_shadowControl_c[32]; -// extern "C" extern void* calc_mtx[1 + 1 /* padding */]; +extern "C" extern u8 g_env_light[4880]; +extern "C" extern u8 j3dSys[284]; +extern "C" extern void* calc_mtx[1 + 1 /* padding */]; +extern "C" extern u32 __float_nan; extern "C" extern u8 pauseTimer__9dScnPly_c[4]; extern "C" void __register_global_object(); @@ -859,7 +1042,7 @@ asm cM3dGSph::~cM3dGSph() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm cM3dGAab::~cM3dGAab() override { +asm cM3dGAab::~cM3dGAab() { nofralloc #include "asm/rel/d/a/e/d_a_e_yc/d_a_e_yc/__dt__8cM3dGAabFv.s" } diff --git a/src/d/a/d_a_player.cpp b/src/d/a/d_a_player.cpp index 87abd94b826..899850c2477 100644 --- a/src/d/a/d_a_player.cpp +++ b/src/d/a/d_a_player.cpp @@ -303,6 +303,15 @@ BOOL daPy_py_c::checkFishingRodItem(int i_itemNo) { } /* 8015EA48-8015EA88 159388 0040+00 0/0 3/3 0/0 .text checkBombItem__9daPy_py_cFi */ +#ifdef NONMATCHING +BOOL daPy_py_c::checkBombItem(int param_0) { + bool ret = true; + if (param_0 != NORMAL_BOMB || param_0 != WATER_BOMB) { + ret = false; + } + return ret; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -311,6 +320,7 @@ asm BOOL daPy_py_c::checkBombItem(int param_0) { #include "asm/d/a/d_a_player/checkBombItem__9daPy_py_cFi.s" } #pragma pop +#endif /* 8015EA88-8015EAD8 1593C8 0050+00 0/0 5/5 0/0 .text checkBottleItem__9daPy_py_cFi */ // is there a way to write this with a switch? @@ -560,7 +570,7 @@ SECTION_SDATA2 static u32 lit_4668 = 0xFF8000FF; SECTION_SDATA2 static u32 lit_4669 = 0x321400FF; /* 8015F1A0-8015F2FC 159AE0 015C+00 1/0 1/1 0/0 .text draw__18daPy_sightPacket_cFv */ -// dumb instruction block out of order +// matches with literals #ifdef NONMATCHING void daPy_sightPacket_c::draw() { GXTexObj texObj; @@ -578,9 +588,11 @@ void daPy_sightPacket_c::draw() { GXSetTevColor(GX_TEVREG0, reg0); GXSetTevColor(GX_TEVREG1, reg1); + u8 tmp2 = mpImg->mipmapCount; + tmp2 = tmp2 > 1; GXInitTexObj(&texObj, mpData, mpImg->width, mpImg->height, (GXTexFmt)mpImg->format, (GXTexWrapMode)mpImg->wrapS, (GXTexWrapMode)mpImg->wrapT, - (GXBool)(mpImg->mipmapCount > 1)); + (GXBool)(tmp2)); GXInitTexObjLOD(&texObj, GX_LINEAR, GX_LINEAR, 0.0, 0.0, 0.0, GX_FALSE, GX_FALSE, GX_ANISO_1); GXLoadTexObj(&texObj, GX_TEXMAP0); GXLoadPosMtxImm(field_0x14, GX_PNMTX0); @@ -632,6 +644,18 @@ BOOL daPy_py_c::checkMasterSwordEquip() { /* 8015F3C4-8015F3FC 159D04 0038+00 0/0 4/4 0/0 .text checkWoodShieldEquip__9daPy_py_cFv */ +#ifdef NONMATCHING +BOOL daPy_py_c::checkWoodShieldEquip() { + int equipShield = dComIfGs_getSelectEquipShield(); + bool isWoodShield = true; + + if (equipShield == SHIELD) { + isWoodShield = false; + } + + return isWoodShield; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -640,6 +664,7 @@ asm BOOL daPy_py_c::checkWoodShieldEquip() { #include "asm/d/a/d_a_player/checkWoodShieldEquip__9daPy_py_cFv.s" } #pragma pop +#endif BOOL daPy_py_c::checkNowWolf() { return dComIfGp_getLinkPlayer()->i_checkWolf(); @@ -727,13 +752,15 @@ asm bool daPy_py_c::linkGrabSubjectNoDraw(fopAc_ac_c* param_0) { /* 8015F60C-8015F660 159F4C 0054+00 0/0 0/0 2/2 .text * wolfGrabSubjectNoDraw__9daPy_py_cFP10fopAc_ac_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daPy_py_c::wolfGrabSubjectNoDraw(fopAc_ac_c* param_0){nofralloc -#include "asm/d/a/d_a_player/wolfGrabSubjectNoDraw__9daPy_py_cFP10fopAc_ac_c.s" +bool daPy_py_c::wolfGrabSubjectNoDraw(fopAc_ac_c* param_0){ + bool ret = false; + if (checkNowWolf()) { + if (linkGrabSubjectNoDraw(param_0)) { + ret = true; + } + } + return ret; } -#pragma pop u32 daPy_py_c::getLastSceneMode() { return dComIfGs_getLastSceneMode() & 0xF;