diff options
| author | LagoLunatic <LagoLunatic@users.noreply.github.com> | 2023-10-28 15:53:28 -0400 |
|---|---|---|
| committer | LagoLunatic <LagoLunatic@users.noreply.github.com> | 2023-10-28 15:53:28 -0400 |
| commit | f84a7bdadbee4e99b8ff63e0ab72b4966a7888de (patch) | |
| tree | 895cd687731e8e7a79db4a3b7571a134b0ac67b5 /src | |
| parent | 1537369adcf3b53775672ff998227e10b50b1829 (diff) | |
d_a_player_main work, playerInit match
Diffstat (limited to 'src')
| -rw-r--r-- | src/SSystem/SComponent/c_bg_s.cpp | 20 | ||||
| -rw-r--r-- | src/d/actor/d_a_player_HIO.inc | 45 | ||||
| -rw-r--r-- | src/d/actor/d_a_player_main.cpp | 562 | ||||
| -rw-r--r-- | src/d/d_bg_s_acch.cpp | 8 | ||||
| -rw-r--r-- | src/m_Do/m_Do_ext.cpp | 4 |
5 files changed, 599 insertions, 40 deletions
diff --git a/src/SSystem/SComponent/c_bg_s.cpp b/src/SSystem/SComponent/c_bg_s.cpp index f3063b02..7c68320e 100644 --- a/src/SSystem/SComponent/c_bg_s.cpp +++ b/src/SSystem/SComponent/c_bg_s.cpp @@ -126,15 +126,19 @@ void* cBgS::ConvDzb(void* work) { JUT_ASSERT(0x219, ((int)pbgd->m_ti_tbl % 4) == 0); if (pbgd->m_v_tbl != NULL) - pbgd->m_v_tbl = (cBgD_Vtx_t*)((u32)pbgd + (u32)pbgd->m_v_tbl); - pbgd->m_t_tbl = (cBgD_Tri_t*)((u32)pbgd + (u32)pbgd->m_t_tbl); - pbgd->m_b_tbl = (cBgD_Blk_t*)((u32)pbgd + (u32)pbgd->m_b_tbl); - pbgd->m_tree_tbl = (void*)((u32)pbgd + (u32)pbgd->m_tree_tbl); - pbgd->m_g_tbl = (cBgD_Grp_t*)((u32)pbgd + (u32)pbgd->m_g_tbl); - pbgd->m_ti_tbl = (void*)((u32)pbgd + (u32)pbgd->m_ti_tbl); - - for (s32 i = 0; i < pbgd->m_g_num; i++) + pbgd->m_v_tbl = (cBgD_Vtx_t*)((u32)pbgd->m_v_tbl + (u32)pbgd); + + pbgd->m_t_tbl = (cBgD_Tri_t*)((u32)pbgd->m_t_tbl + (u32)pbgd); + pbgd->m_b_tbl = (cBgD_Blk_t*)((u32)pbgd->m_b_tbl + (u32)pbgd); + pbgd->m_tree_tbl = (void*)((u32)pbgd->m_tree_tbl + (u32)pbgd); + pbgd->m_g_tbl = (cBgD_Grp_t*)((u32)pbgd->m_g_tbl + (u32)pbgd); + pbgd->m_ti_tbl = (void*)((u32)pbgd->m_ti_tbl + (u32)pbgd); + + for (s32 i = 0; i < pbgd->m_g_num; i++) { pbgd->m_g_tbl[i].m_name = (char*)((u32)pbgd + (u32)pbgd->m_g_tbl[i].m_name); + } + + return pbgd; } /* 80246C98-80246D24 .text GetActorPointer__4cBgSCFi */ diff --git a/src/d/actor/d_a_player_HIO.inc b/src/d/actor/d_a_player_HIO.inc index 9173b2ab..78145bce 100644 --- a/src/d/actor/d_a_player_HIO.inc +++ b/src/d/actor/d_a_player_HIO.inc @@ -2036,3 +2036,48 @@ public: const daPy_HIO_warp_c1 daPy_HIO_warp_c0::m = { 53, 12, 28, 4, 1.2f, 1.6f, 0.5f, 0.1f, 1.35f, }; + +class daPy_HIO_battle_c1 { +public: + /* 0x00 */ f32 field_0x0; + /* 0x04 */ f32 field_0x4; +}; + +class daPy_HIO_battle_c0 { +public: + static daPy_HIO_battle_c1 const m; +}; + +const daPy_HIO_battle_c1 daPy_HIO_battle_c0::m = { + 0.0f, 1.5f, +}; + +class daPy_HIO_dam_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; +}; + +class daPy_HIO_dam_c0 { +public: + static daPy_HIO_dam_c1 const m; +}; + +const daPy_HIO_dam_c1 daPy_HIO_dam_c0::m = { + 30, 20, +}; + +class daPy_HIO_magicShield_c1 { +public: + /* 0x00 */ s16 field_0x0; + /* 0x02 */ s16 field_0x2; +}; + +class daPy_HIO_magicShield_c0 { +public: + static daPy_HIO_magicShield_c1 const m; +}; + +const daPy_HIO_magicShield_c1 daPy_HIO_magicShield_c0::m = { + 60, 0, +}; diff --git a/src/d/actor/d_a_player_main.cpp b/src/d/actor/d_a_player_main.cpp index 4b5541d1..8a756c72 100644 --- a/src/d/actor/d_a_player_main.cpp +++ b/src/d/actor/d_a_player_main.cpp @@ -21,8 +21,196 @@ #include "d/actor/d_a_player_HIO.inc" +// Needed for the .data section to match. +static f32 dummy1[3] = {1.0f, 1.0f, 1.0f}; +static f32 dummy2[3] = {1.0f, 1.0f, 1.0f}; + char l_arcName[] = "Link"; +char l_tact_event_label[] = "OPTION_CHAR_START"; +char l_tact_night_event_label[] = "TIMEWARP"; +char l_tact_wind_change_event_label[] = "TACT_WINDOW2"; +char l_tact_wind_change_event_label2[] = "TACT_WINDOW2_SHIP"; + +static dCcD_SrcCyl l_cyl_src = { + // dCcD_SrcGObjInf + { + /* Flags */ 0, + /* SrcObjAt Type */ 0, + /* SrcObjAt Atp */ 0, + /* SrcObjAt SPrm */ 0, + /* SrcObjTg Type */ ~(AT_TYPE_WATER | AT_TYPE_UNK20000 | AT_TYPE_LEAF_WIND | AT_TYPE_UNK400000 | AT_TYPE_LIGHT), + /* SrcObjTg SPrm */ 0x05, + /* SrcObjCo SPrm */ 0x73, + /* SrcGObjAt Se */ 0, + /* SrcGObjAt HitMark */ 0, + /* SrcGObjAt Spl */ 0, + /* SrcGObjAt Mtrl */ 0, + /* SrcGObjAt GFlag */ 0, + /* SrcGObjTg Se */ 0x25, + /* SrcGObjTg HitMark */ 0x0C, + /* SrcGObjTg Spl */ 0, + /* SrcGObjTg Mtrl */ 0, + /* SrcGObjTg GFlag */ 0, + /* SrcGObjCo GFlag */ 0, + }, + // cM3dGCylS + { + /* Center */ 0.0f, 0.0f, 0.0f, + /* Radius */ 30.0f, + /* Height */ 125.0f, + }, +}; + +static dCcD_SrcCyl l_wind_cyl_src = { + // dCcD_SrcGObjInf + { + /* Flags */ 0, + /* SrcObjAt Type */ 0, + /* SrcObjAt Atp */ 0, + /* SrcObjAt SPrm */ 0, + /* SrcObjTg Type */ AT_TYPE_LEAF_WIND, + /* SrcObjTg SPrm */ 0x05, + /* SrcObjCo SPrm */ 0, + /* SrcGObjAt Se */ 0, + /* SrcGObjAt HitMark */ 0, + /* SrcGObjAt Spl */ 0, + /* SrcGObjAt Mtrl */ 0, + /* SrcGObjAt GFlag */ 0x02, + /* SrcGObjTg Se */ 0, + /* SrcGObjTg HitMark */ 0, + /* SrcGObjTg Spl */ 0, + /* SrcGObjTg Mtrl */ 0, + /* SrcGObjTg GFlag */ 0, + /* SrcGObjCo GFlag */ 0, + }, + // cM3dGCylS + { + /* Center */ 0.0f, 0.0f, 0.0f, + /* Radius */ 30.0f, + /* Height */ 125.0f, + }, +}; + +static dCcD_SrcCyl l_at_cyl_src = { + // dCcD_SrcGObjInf + { + /* Flags */ 0, + /* SrcObjAt Type */ AT_TYPE_SWORD, + /* SrcObjAt Atp */ 0x02, + /* SrcObjAt SPrm */ 0x0B, + /* SrcObjTg Type */ 0, + /* SrcObjTg SPrm */ 0, + /* SrcObjCo SPrm */ 0, + /* SrcGObjAt Se */ 0, + /* SrcGObjAt HitMark */ 0x0F, + /* SrcGObjAt Spl */ 0x01, + /* SrcGObjAt Mtrl */ 0, + /* SrcGObjAt GFlag */ 0, + /* SrcGObjTg Se */ 0, + /* SrcGObjTg HitMark */ 0, + /* SrcGObjTg Spl */ 0, + /* SrcGObjTg Mtrl */ 0, + /* SrcGObjTg GFlag */ 0, + /* SrcGObjCo GFlag */ 0, + }, + // cM3dGCylS + { + /* Center */ 0.0f, 0.0f, 0.0f, + /* Radius */ 180.0f, + /* Height */ 75.0f, + }, +}; + +static dCcD_SrcCps l_at_cps_src = { + // dCcD_SrcGObjInf + { + /* Flags */ 0, + /* SrcObjAt Type */ AT_TYPE_SWORD, + /* SrcObjAt Atp */ 0x01, + /* SrcObjAt SPrm */ 0x0B, + /* SrcObjTg Type */ 0, + /* SrcObjTg SPrm */ 0, + /* SrcObjCo SPrm */ 0, + /* SrcGObjAt Se */ 0x01, + /* SrcGObjAt HitMark */ 0x0D, + /* SrcGObjAt Spl */ 0, + /* SrcGObjAt Mtrl */ 0, + /* SrcGObjAt GFlag */ 0, + /* SrcGObjTg Se */ 0, + /* SrcGObjTg HitMark */ 0, + /* SrcGObjTg Spl */ 0, + /* SrcGObjTg Mtrl */ 0, + /* SrcGObjTg GFlag */ 0, + /* SrcGObjCo GFlag */ 0, + }, + // cM3dGCpsS + { + /* Start */ 0.0f, 0.0f, 0.0f, + /* End */ 0.0f, 0.0f, 0.0f, + /* Radius */ 20.0f, + }, +}; + +static dCcD_SrcCps l_fan_wind_cps_src = { + // dCcD_SrcGObjInf + { + /* Flags */ 0, + /* SrcObjAt Type */ AT_TYPE_LEAF_WIND, + /* SrcObjAt Atp */ 0, + /* SrcObjAt SPrm */ 0x0B, + /* SrcObjTg Type */ 0, + /* SrcObjTg SPrm */ 0, + /* SrcObjCo SPrm */ 0, + /* SrcGObjAt Se */ 0, + /* SrcGObjAt HitMark */ 0, + /* SrcGObjAt Spl */ 0, + /* SrcGObjAt Mtrl */ 0, + /* SrcGObjAt GFlag */ 0x02, + /* SrcGObjTg Se */ 0, + /* SrcGObjTg HitMark */ 0, + /* SrcGObjTg Spl */ 0, + /* SrcGObjTg Mtrl */ 0, + /* SrcGObjTg GFlag */ 0, + /* SrcGObjCo GFlag */ 0, + }, + // cM3dGCpsS + { + /* Start */ 0.0f, 0.0f, 0.0f, + /* End */ 0.0f, 0.0f, 0.0f, + /* Radius */ 70.0f, + }, +}; + +static dCcD_SrcSph l_fan_wind_sph_src = { + // dCcD_SrcGObjInf + { + /* Flags */ 0, + /* SrcObjAt Type */ AT_TYPE_LEAF_WIND, + /* SrcObjAt Atp */ 0, + /* SrcObjAt SPrm */ 0x0B, + /* SrcObjTg Type */ 0, + /* SrcObjTg SPrm */ 0, + /* SrcObjCo SPrm */ 0, + /* SrcGObjAt Se */ 0, + /* SrcGObjAt HitMark */ 0, + /* SrcGObjAt Spl */ 0, + /* SrcGObjAt Mtrl */ 0, + /* SrcGObjAt GFlag */ 0, + /* SrcGObjTg Se */ 0, + /* SrcGObjTg HitMark */ 0, + /* SrcGObjTg Spl */ 0, + /* SrcGObjTg Mtrl */ 0, + /* SrcGObjTg GFlag */ 0, + /* SrcGObjCo GFlag */ 0, + }, + // cM3dGSphS + { + /* Center */ 0.0f, 0.0f, 0.0f, + /* Radius */ 150.0f, + }, +}; + daPy_lk_c::ProcInitTableEntry daPy_lk_c::mProcInitTable[0xDB] = { /* 0x00 */ {&daPy_lk_c::procScope, 0x00000001}, /* 0x01 */ {&daPy_lk_c::procSubjectivity, 0x20001005}, @@ -325,7 +513,7 @@ daPy_lk_c::daPy_ProcFunc daPy_lk_c::mDemoProcInitFuncTable[0x4B] = { /* 80102E8C-80102EAC .text daPy_createHeap__FP10fopAc_ac_c */ static BOOL daPy_createHeap(fopAc_ac_c* i_this) { - return ((daPy_lk_c*)i_this)->createHeap(); + return static_cast<daPy_lk_c*>(i_this)->createHeap(); } /* 80102F64-80103074 .text calc__13daPy_matAnm_cCFP11J3DMaterial */ @@ -407,23 +595,23 @@ static BOOL daPy_auraCallback(J3DNode*, int) { } /* 80103494-80103A88 .text jointBeforeCB__9daPy_lk_cFiP16J3DTransformInfoP10Quaternion */ -void daPy_lk_c::jointBeforeCB(int, J3DTransformInfo*, Quaternion*) { +BOOL daPy_lk_c::jointBeforeCB(int, J3DTransformInfo*, Quaternion*) { /* Nonmatching */ } /* 80103A88-80103AAC .text daPy_jointBeforeCallback__FUlUsP16J3DTransformInfoP10Quaternion */ -static BOOL daPy_jointBeforeCallback(u32 i_this, u16 param_1, J3DTransformInfo* param_2, Quaternion* param_3) { - ((daPy_lk_c*)i_this)->jointBeforeCB(param_1, param_2, param_3); +static BOOL daPy_jointBeforeCallback(u32 userArea, u16 param_1, J3DTransformInfo* param_2, Quaternion* param_3) { + return reinterpret_cast<daPy_lk_c*>(userArea)->jointBeforeCB(param_1, param_2, param_3); } /* 80103AAC-80103C1C .text jointAfterCB__9daPy_lk_cFiP16J3DTransformInfoP10Quaternion */ -void daPy_lk_c::jointAfterCB(int, J3DTransformInfo*, Quaternion*) { +BOOL daPy_lk_c::jointAfterCB(int, J3DTransformInfo*, Quaternion*) { /* Nonmatching */ } /* 80103C1C-80103C40 .text daPy_jointAfterCallback__FUlUsP16J3DTransformInfoP10Quaternion */ -static BOOL daPy_jointAfterCallback(u32 i_this, u16 param_1, J3DTransformInfo* param_2, Quaternion* param_3) { - ((daPy_lk_c*)i_this)->jointAfterCB(param_1, param_2, param_3); +static BOOL daPy_jointAfterCallback(u32 userArea, u16 param_1, J3DTransformInfo* param_2, Quaternion* param_3) { + return reinterpret_cast<daPy_lk_c*>(userArea)->jointAfterCB(param_1, param_2, param_3); } /* 80103C40-80103EE4 .text jointCB0__9daPy_lk_cFi */ @@ -633,7 +821,7 @@ BOOL daPy_lk_c::draw() { /* 80108204-80108224 .text daPy_Draw__FP9daPy_lk_c */ static BOOL daPy_Draw(daPy_lk_c* i_this) { - return ((daPy_lk_c*)i_this)->draw(); + return static_cast<daPy_lk_c*>(i_this)->draw(); } /* 80108224-8010841C .text setAtnList__9daPy_lk_cFv */ @@ -812,7 +1000,7 @@ void daPy_lk_c::setAnimeUnequip() { } /* 8010C430-8010C4A4 .text checkBossGomaStage__9daPy_lk_cFv */ -void daPy_lk_c::checkBossGomaStage() { +BOOL daPy_lk_c::checkBossGomaStage() { /* Nonmatching */ } @@ -842,13 +1030,37 @@ void daPy_lk_c::setFallVoice() { } /* 8010C7F4-8010C854 .text keepItemData__9daPy_lk_cFv */ +/* Saves which item the player was holding in their hand so it can be restored later. */ void daPy_lk_c::keepItemData() { - /* Nonmatching */ + mKeepItemType = mHeldItemType; + + deleteEquipItem(0); + + if (mKeepItemType == 0x101) { + mKeepItemType = 0x100; + } else if (mKeepItemType == 0x100) { + mKeepItemType = 0x10B; + } } /* 8010C854-8010C8D4 .text returnKeepItemData__9daPy_lk_cFv */ +/* Restores which item the player was holding in their hand. */ void daPy_lk_c::returnKeepItemData() { - /* Nonmatching */ + if (mKeepItemType == 0x100) { + return; + } + + deleteEquipItem(0); + mHeldItemType = mKeepItemType; + mKeepItemType = 0x100; + + if (mHeldItemType == 0x10B) { + mHeldItemType = 0x100; + } else if (mHeldItemType == 0x103) { + setSwordModel(1); + } else { + makeItemType(); + } } /* 8010C8D4-8010CB70 .text makeItemType__9daPy_lk_cFv */ @@ -1914,13 +2126,44 @@ void daPy_lk_c::setBgCheckParam() { } /* 801200F8-8012010C .text setParamData__9daPy_lk_cFiiii */ -u32 daPy_lk_c::setParamData(int roomNo, int spawnType, int evntIdx, int extraParams) { - return roomNo & 0x3F | (spawnType & 0xF) << 0xC | evntIdx << 0x18 | extraParams; +u32 daPy_lk_c::setParamData(int roomNo, int spawnType, int eventInfoIdx, int extraParams) { + return roomNo & 0x3F | (spawnType & 0xF) << 0xC | eventInfoIdx << 0x18 | extraParams; } /* 8012010C-8012024C .text checkLavaFace__9daPy_lk_cFP4cXyzi */ -void daPy_lk_c::checkLavaFace(cXyz*, int) { - /* Nonmatching */ +BOOL daPy_lk_c::checkLavaFace(cXyz* param_1, int attributeCode) { + if (mDemo.getDemoType() == 5) { + return FALSE; + } + + if (param_1) { + cXyz temp(current.pos.x, param_1->y + 20.0f, current.pos.z); + m08EC.SetPos(&temp); + m35D4 = dComIfG_Bgsp()->GroundCross(&m08EC); + if (mAcch.GetGroundH() > m35D4) { + m35D4 = -1000000000.0f; + } + if (m35D4 > current.pos.y) { + attributeCode = dComIfG_Bgsp()->GetAttributeCode(m08EC); + } else { + return FALSE; + } + } + + if (attributeCode == 6) { + if (param_1) { + current.pos.y = m35D4; + } + if (checkBossGomaStage()) { + return procLavaDamage_init(); + } else { + return dProcLavaDamage_init(); + } + } else if (attributeCode == 8) { + startRestartRoom(5, 0xC9, -1.0f, 0); + } + + return FALSE; } /* 8012024C-80120724 .text checkFallCode__9daPy_lk_cFv */ @@ -1929,7 +2172,7 @@ void daPy_lk_c::checkFallCode() { } /* 80120724-80120BBC .text startRestartRoom__9daPy_lk_cFUlifi */ -BOOL daPy_lk_c::startRestartRoom(u32 param_1, int param_2, f32 param_3, int i_point) { +BOOL daPy_lk_c::startRestartRoom(u32 param_1, int eventInfoIdx, f32 param_3, int i_point) { /* Nonmatching - npc_sarace */ if (!checkNoResetFlg0(daPyFlg0_UNK4000) && (i_point != 0 || dComIfGp_event_compulsory(this, NULL, -1))) { mDemo.setOriginalDemoType(); @@ -1952,7 +2195,7 @@ BOOL daPy_lk_c::startRestartRoom(u32 param_1, int param_2, f32 param_3, int i_po if (stageType == 7 && !dComIfGs_isEventBit(0x2A08) && (current.roomNo == 11 || current.roomNo == 44) && dStage_chkPlayerId(0x80, current.roomNo)) { dComIfGp_setNextStage(dComIfGp_getStartStageName(), 0x80, current.roomNo, -1, 0.0f, param_1, 1, 0); - u32 roomParam = setParamData(-1, 0, param_2, 0); + u32 roomParam = setParamData(-1, 0, eventInfoIdx, 0); dComIfGs_setRestartRoomParam(roomParam); mDoAud_seStart(JA_SE_FORCE_BACK, NULL, 0, 0); return TRUE; @@ -2002,7 +2245,7 @@ BOOL daPy_lk_c::startRestartRoom(u32 param_1, int param_2, f32 param_3, int i_po dStage_changeScene(0, 0.0f, param_1, -1); } else { int roomNo = dComIfGs_getRestartRoomNo(); - u32 roomParam = setParamData(roomNo, 0, param_2, 0); + u32 roomParam = setParamData(roomNo, 0, eventInfoIdx, 0); dStage_restartRoom(roomParam, param_1); mDoAud_seStart(JA_SE_FORCE_BACK, NULL, 0, 0); } @@ -2015,7 +2258,7 @@ BOOL daPy_lk_c::startRestartRoom(u32 param_1, int param_2, f32 param_3, int i_po } if (mCurProcID != DPROC_DEAD_e) { - u32 roomParam = setParamData(-1, 0, param_2, 0); + u32 roomParam = setParamData(-1, 0, eventInfoIdx, 0); dComIfGs_setRestartRoomParam(roomParam); mDoAud_seStart(JA_SE_FORCE_BACK, NULL, 0, 0); } @@ -2064,7 +2307,7 @@ BOOL daPy_lk_c::execute() { /* 80122D30-80122D50 .text daPy_Execute__FP9daPy_lk_c */ static BOOL daPy_Execute(daPy_lk_c* i_this) { - return ((daPy_lk_c*)i_this)->execute(); + return static_cast<daPy_lk_c*>(i_this)->execute(); } /* 80122D50-80122D58 .text daPy_IsDelete__FP9daPy_lk_c */ @@ -2107,11 +2350,11 @@ BOOL daPy_lk_c::playerDelete() { m3460[1].end(); endDamageEmitter(); - dKy_plight_cut(&m3498); + dKy_plight_cut(&mLightInfluence); mDoAud_seDeleteObject(&mSwordTopPos); mDoAud_seDeleteObject(&mRopePos); mDoAud_seDeleteObject(&m338C.field_0x08); - mDoAud_seDeleteObject(&m488C.GetEndP()); + mDoAud_seDeleteObject(&mFanWindCps1.GetEndP()); for (i = 0; i < (int)ARRAY_SIZE(m_anm_heap_under); i++) { mDoExt_destroySolidHeap(m_anm_heap_under[i].mpAnimeHeap); @@ -2128,8 +2371,8 @@ BOOL daPy_lk_c::playerDelete() { mJAIZelAnime.stop(); - if (checkNoResetFlg1(daPyFlg1_UNK8)) { - *m0338 = m033C; + if (checkNoResetFlg1(daPyFlg1_CASUAL_CLOTHES)) { + *mpCurrLinktex = mOtherLinktex; } dComIfGp_clearPlayerStatus0(0, 0x00400000); // Waiting for the boomerang to come back @@ -2143,7 +2386,7 @@ BOOL daPy_lk_c::playerDelete() { /* 80123058-80123078 .text daPy_Delete__FP9daPy_lk_c */ static BOOL daPy_Delete(daPy_lk_c* i_this) { - return ((daPy_lk_c*)i_this)->playerDelete(); + return static_cast<daPy_lk_c*>(i_this)->playerDelete(); } /* 80123078-80123360 .text initTextureAnime__9daPy_lk_cFv */ @@ -2308,7 +2551,274 @@ J3DAnmTevRegKey* daPy_lk_c::entryBrk(J3DModelData*, int) { /* 80124C98-80125CC8 .text playerInit__9daPy_lk_cFv */ void daPy_lk_c::playerInit() { - /* Nonmatching */ + if (!fopAcM_entrySolidHeap(this, (heapCallbackFunc)&daPy_createHeap, 0xB0000)) { + JUT_ASSERT(0x53B6, 0); + } + + fopAcM_SetMtx(this, mpCLModel->getBaseTRMtx()); + + mpCLModel->setUserArea(reinterpret_cast<u32>(this)); + mpYmgcs00Model->setUserArea(reinterpret_cast<u32>(this)); + for (u16 i = 0; i < mpYmgcs00Model->getModelData()->getJointNum(); i++) { + mpYmgcs00Model->getModelData()->getJointNodePointer(i)->setCallBack(daPy_auraCallback); + } + + mpCLModelData->getJointNodePointer(0x01)->setCallBack(daPy_jointCallback0); + mpCLModelData->getJointNodePointer(0x0D)->setCallBack(daPy_jointCallback0); + mpCLModelData->getJointNodePointer(0x04)->setCallBack(daPy_jointCallback0); + mpCLModelData->getJointNodePointer(0x08)->setCallBack(daPy_jointCallback0); + mpCLModelData->getJointNodePointer(0x0C)->setCallBack(daPy_jointCallback0); + mpCLModelData->getJointNodePointer(0x1C)->setCallBack(daPy_jointCallback0); + mpCLModelData->getJointNodePointer(0x0F)->setCallBack(daPy_jointCallback0); + mpCLModelData->getJointNodePointer(0x00)->setCallBack(daPy_jointCallback0); + mpCLModelData->getJointNodePointer(0x28)->setCallBack(daPy_jointCallback1); + + m_pbCalc[0]->setUserArea(reinterpret_cast<u32>(this)); + m_pbCalc[0]->setBeforeCalc(daPy_jointBeforeCallback); + m_pbCalc[0]->setAfterCalc(daPy_jointAfterCallback); + m_pbCalc[1]->setUserArea(reinterpret_cast<u32>(this)); + m_pbCalc[1]->setBeforeCalc(daPy_jointBeforeCallback); + m_pbCalc[1]->setAfterCalc(daPy_jointAfterCallback); + + int i; + J3DMaterial* mat = mpCLModelData->getJointNodePointer(0x13)->getMesh(); + int zoff_blend_cnt = 0; + int zoff_none_cnt = 0; + int zon_cnt = 0; + for (i = 0; i < 2; i++) { + while (mat) { + mat->setMaterialMode(1); + if (j3dZModeTable[mat->getZMode()->mZModeID].mCompareEnable == 0) { + if (mat->getBlend()->mBlendMode == 1) { + mpZOffBlendShape[zoff_blend_cnt] = mat->getShape(); + zoff_blend_cnt++; + JUT_ASSERT(0x53EE, zoff_blend_cnt <= 4); + } else { + mpZOffNoneShape[zoff_none_cnt] = mat->getShape(); + zoff_none_cnt++; + JUT_ASSERT(0x53F2, zoff_none_cnt <= 4); + } + } else { + mpZOnShape[zon_cnt] = mat->getShape(); + zon_cnt++; + JUT_ASSERT(0x53F6, zon_cnt <= 4); + } + mat = mat->getNext(); + } + mat = mpCLModelData->getJointNodePointer(0x15)->getMesh(); + } + JUT_ASSERT(0x53FD, zon_cnt == 4); + JUT_ASSERT(0x53FE, zoff_none_cnt == 4); + JUT_ASSERT(0x53FF, zoff_blend_cnt == 4); + + m03A4 = mpCLModelData->getJointNodePointer(0x08)->getMesh()->getShape(); + m03A8 = mpCLModelData->getJointNodePointer(0x0C)->getMesh()->getShape(); + J3DModelData* handsModelData = mpHandsModel->getModelData(); + for (u16 i = 0x01; i < 0x0B; i++) { + handsModelData->getJointNodePointer(i)->getMesh()->getShape()->hide(); + } + + u32 buffer_start = reinterpret_cast<u32>(m_anm_heap_under[0].m_buffer) + 0x2400; + m_anm_heap_under[1].m_buffer = reinterpret_cast<void*>(buffer_start); + buffer_start = reinterpret_cast<u32>(m_anm_heap_under[0].m_buffer) + 0x4800; + m_anm_heap_upper[0].m_buffer = reinterpret_cast<void*>(buffer_start); + for (int i = 1; i <= 2; i++) { + buffer_start = reinterpret_cast<u32>(m_anm_heap_upper[0].m_buffer) + i*0x2400; + m_anm_heap_upper[i].m_buffer = reinterpret_cast<void*>(buffer_start); + } + + mAcch.Set(¤t.pos, &next.pos, this, ARRAY_SIZE(mAcchCir), mAcchCir, &speed, ¤t.angle, &shape_angle); + mAcch.ClrWaterNone(); + mAcch.SetWaterCheckOffset(500.0f); + mAcch.OnLineCheck(); + mAcch.ClrRoofNone(); + mAcch.SetRoofCrrHeight(125.0f); + field_0x2a8 = daPy_HIO_move_c0::m.field_0x18; + mGravity = daPy_HIO_autoJump_c0::m.field_0xC; + mMaxFallSpeed = daPy_HIO_autoJump_c0::m.field_0x10; + mAcchCir[0].SetWall(30.1f, 35.0f); + mAcchCir[1].SetWall(89.9f, 35.0f); + mAcchCir[2].SetWall(125.0f, 35.0f); + mHeadTopPos.setall(0.0f); + field_0x2ac = 125.0f; + mHeldItemType = 0x100; + mKeepItemType = 0x100; + mCameraInfoIdx = dComIfGp_getPlayerCameraID(0); + mpAttention = &dComIfGp_getAttention(); + + mStts.Init(0x78, 0xFF, this); + mCyl.Set(l_cyl_src); + mCyl.SetStts(&mStts); + mCyl.OnTgShieldFrontRange(); + mShieldFrontRangeYAngle = shape_angle.y + mBodyAngle.y; + mCyl.SetTgShieldFrontRangeYAngle(&mShieldFrontRangeYAngle); + mWindCyl1.Set(l_wind_cyl_src); + mWindCyl1.SetStts(&mStts); + mWindCyl2.Set(l_wind_cyl_src); + mWindCyl2.SetStts(&mStts); + mWindCyl2.SetTgType(AT_TYPE_LIGHT); + mAtCps[0].Set(l_at_cps_src); + mAtCps[0].SetStts(&mStts); + mAtCps[1].Set(l_at_cps_src); + mAtCps[1].SetStts(&mStts); + mAtCps[2].Set(l_at_cps_src); + mAtCps[2].SetStts(&mStts); + mAtCyl.Set(l_at_cyl_src); + mAtCyl.SetStts(&mStts); + mFanWindCps1.Set(l_fan_wind_cps_src); + mFanWindCps1.SetR(70.0f); + mFanWindCps1.SetStts(&mStts); + mFanWindSph.Set(l_fan_wind_sph_src); + mFanWindSph.SetStts(&mStts); + mFanWindCps2.Set(l_fan_wind_cps_src); + mFanWindCps2.SetStts(&mStts); + mFanWindCps2.SetAtType(AT_TYPE_LIGHT); + mFanWindCps2.SetR(20.0f); + + for (int i = 0; i < (int)ARRAY_SIZE(m_anm_heap_under); i++) { + createAnimeHeap(&m_anm_heap_under[i].mpAnimeHeap, HEAP_TYPE_UNDER_UPPER_e); + m_anm_heap_under[i].mIdx = -1; + m_anm_heap_under[i].field_0x2 = -1; + m_anm_heap_under[i].field_0x4 = -1; + } + for (int i = 0; i < (int)ARRAY_SIZE(m_anm_heap_upper); i++) { + createAnimeHeap(&m_anm_heap_upper[i].mpAnimeHeap, HEAP_TYPE_UNDER_UPPER_e); + m_anm_heap_upper[i].mIdx = -1; + m_anm_heap_upper[i].field_0x2 = -1; + m_anm_heap_upper[i].field_0x4 = -1; + } + createAnimeHeap(&mpTextureAnimeResHeap, HEAP_TYPE_TEXTURE_ANIME_e); + mTexAnimeResIdx = -1; + m31BA = -1; + m31BC = -1; + m31BE = -1; + createAnimeHeap(&mpTextureScrollResHeap, HEAP_TYPE_TEXTURE_SCROLL_e); + mTexScrollResIdx = -1; + m31CA = -1; + m31CC = -1; + m31CE = -1; + m34EE = -1; + m34F0 = -1; + + mpItemHeaps[0] = mDoExt_createSolidHeapFromGameToCurrent(0xE600, 0x20); + u8* dummy_data = new u8[0xE600]; + JUT_ASSERT(0x5493, dummy_data != 0); + mDoExt_restoreCurrentHeap(); + mDoExt_adjustSolidHeap(mpItemHeaps[0]); + + mpItemHeaps[1] = mDoExt_createSolidHeapFromGameToCurrent(0xE600, 0x20); + dummy_data = new u8[0xE600]; + JUT_ASSERT(0x5499, dummy_data != 0); + mDoExt_restoreCurrentHeap(); + mDoExt_adjustSolidHeap(mpItemHeaps[1]); + + createAnimeHeap(&m2ECC, HEAP_TYPE_UNK3_e); + + mActorKeepEquip.clearData(); + mActorKeepThrow.clearData(); + mActorKeepGrab.clearData(); + mActorKeepRope.clearData(); + m3628 = -1; + m3634 = -1; + m362C = -1; + m3630 = -1; + + ResTIMG* blur_img = (ResTIMG*)dComIfG_getObjectRes(l_arcName, LINK_BTI_BLUR); + mSwBlur.mpBlurTex = blur_img; + + current.angle.z = 0; + shape_angle.z = 0; + m3526 = 8; + m3654 = 1.0f; + resetSeAnime(); + + ResTIMG* tmp_tex = (ResTIMG*)dComIfG_getObjectRes("Always", ALWAYS_I4_BALL128B); + JUT_ASSERT(0x54B7, tmp_tex != 0); + mSightPacket.setSightTex(tmp_tex); + ResTIMG* tmp_img = (ResTIMG*)dComIfG_getObjectRes(l_arcName, LINK_BTI_ROCK_MARK); + JUT_ASSERT(0x54BD, tmp_img != 0); + void* tmp_img_data = reinterpret_cast<void*>(reinterpret_cast<u32>(tmp_img) + tmp_img->imageOffset); + mSightPacket.setLockTex(tmp_img_data); + mSightPacket.setImage(tmp_img); + + int startMode = getStartMode(); + u8 lastMode = dComIfGs_getLastSceneMode(); + if (startMode == 0xE) { + mEventIdx = dComIfGp_evmng_startDemo(0xD4); + } else if (startMode == 0xC) { + mEventIdx = dComIfGp_evmng_startDemo(0xD0); + } else if (startMode == 0x6) { + mEventIdx = dComIfGp_evmng_startDemo(0xCF); + } else if (startMode == 0xA) { + mEventIdx = dComIfGp_evmng_startDemo(0xD2); + } else if (startMode == 0xB) { + mEventIdx = dComIfGp_evmng_startDemo(0xD3); + } else if (startMode == 0x9 || lastMode == 0x6) { + mEventIdx = dComIfGp_evmng_startDemo(0xCB); + } else if (startMode == 0x2 && (lastMode == 0x4 || lastMode == 0x5)) { + mEventIdx = dComIfGp_evmng_startDemo(0xC9); + } else if (startMode == 0xF) { + mEventIdx = dComIfGp_evmng_startDemo(0xD5); + } else { + mEventIdx = dComIfGp_evmng_startDemo(getStartEvent()); + } + + onNoResetFlg0(daPyFlg0_UNK100); + m08EC.OffWaterGrp(); + mDemo.setStick(1.0f); + endDamageEmitter(); + mMirrorPacket.init(NULL); + + mLightInfluence.mColor.r = 600; + mLightInfluence.mColor.g = 400; + mLightInfluence.mColor.b = 120; + mLightInfluence.mFluctuation = 250.0f; + mLightInfluence.mPos = current.pos; + mLightInfluence.mPower = 0.0f; + dKy_plight_set(&mLightInfluence); + + m352E = 900; + field_0x298 = 0xAD; + m34DE = shape_angle.y; + + ResTIMG* linktex_casual = (ResTIMG*)dComIfG_getObjectRes(l_arcName, LINK_BTI_LINKTEXBCI4); + int num_linktex_headers_seen = 0; + J3DTexture* texture = mpCLModelData->getTexture(); + JUT_ASSERT(0x5504, texture != 0); + JUTNameTab* textureName = mpCLModelData->getTextureName(); + JUT_ASSERT(0x5506, textureName != 0); + for (u16 i = 0; i < texture->getNum(); i++) { + const char* texName = textureName->getName(i); + if (strcmp(texName, "linktexS3TC") != 0) { + continue; + } + if (num_linktex_headers_seen == 0) { + // Link's model's TEX1 section has two headers for the linktexS3TC texture. + // They seem identical except the first has alpha enabled and the second does not. + // The second is the one that is actually used, so we have to skip over the first one. + num_linktex_headers_seen += 1; + continue; + } + + mpCurrLinktex = texture->getResTIMG(i); + mOtherLinktex = *mpCurrLinktex; + + // Modify the linktexS3TC texture in Link's model to be the casual clothes texture. + texture->setResTIMG(i, *linktex_casual); + + if (!dComIfGs_isEventBit(0x2A80) || dComIfGs_getClearCount() != 0) { + onNoResetFlg1(daPyFlg1_CASUAL_CLOTHES); + } + if (checkNoResetFlg1(daPyFlg1_CASUAL_CLOTHES)) { + break; + } + + // If Link isn't wearing the casual clothes, then load the hero's clothes texture from the backup and swap them. + ResTIMG casualLinktex = *mpCurrLinktex; + *mpCurrLinktex = mOtherLinktex; + mOtherLinktex = casualLinktex; + break; + } } int phase_1(daPy_lk_c* i_this) { diff --git a/src/d/d_bg_s_acch.cpp b/src/d/d_bg_s_acch.cpp index f0c4edb3..fbd019fd 100644 --- a/src/d/d_bg_s_acch.cpp +++ b/src/d/d_bg_s_acch.cpp @@ -53,7 +53,7 @@ dBgS_Acch::dBgS_Acch() { pm_speed = NULL; m_ground_h = -1000000000.0f; m_ground_up_h = 0.0f; - field_0x98 = 60.0f; + m_ground_check_offset = 60.0f; m_ground_up_h_diff = 0.0f; field_0xb0 = 0; field_0xb4 = 0.0f; @@ -63,7 +63,7 @@ dBgS_Acch::dBgS_Acch() { m_roof_y = 0.0f; m_roof_crr_height = 0.0f; m_roof_height = 0.0f; - field_0xc8 = 200.0f; + m_water_check_offset = 200.0f; pm_angle = NULL; pm_shape_angle = NULL; m_my_ac = NULL; @@ -157,12 +157,12 @@ void dBgS_Acch::CrrPos(dBgS& i_bgs) { field_0xb4 = pm_pos->y; f32 oldY = pm_old_pos->y; f32 temp7 = lowH + oldY; - f32 temp8 = field_0x98 + pm_pos->y; + f32 temp8 = m_ground_check_offset + pm_pos->y; bool ranLineCheck = false; OffLineCheckHit(); if (!ChkLineCheckNone() && !cM3d_IsZero(lowH_R)) { - if (distXZ2 > lowH_R*lowH_R || temp7 > temp8 || distY > field_0x98 || ChkLineCheck()) { + if (distXZ2 > lowH_R*lowH_R || temp7 > temp8 || distY > m_ground_check_offset || ChkLineCheck()) { ranLineCheck = true; LineCheck(i_bgs); } diff --git a/src/m_Do/m_Do_ext.cpp b/src/m_Do/m_Do_ext.cpp index 1b622b09..1cef9e1e 100644 --- a/src/m_Do/m_Do_ext.cpp +++ b/src/m_Do/m_Do_ext.cpp @@ -1096,12 +1096,12 @@ void mDoExt_MtxCalcAnmBlendTblOld::calc(u16 param_0) { } Mtx mtx; if (mBeforeCallback) { - mBeforeCallback(field_0x58, param_0, &info1, &quat3); + mBeforeCallback(mUserArea, param_0, &info1, &quat3); } mDoMtx_quat(mtx, &quat3); mDoExt_setJ3DData(mtx, &info1, param_0); if (mAfterCallback) { - mAfterCallback(field_0x58, param_0, &info1, &quat3); + mAfterCallback(mUserArea, param_0, &info1, &quat3); } *oldQuat = quat3; *oldTransInfo = info1; |
