diff --git a/configure.py b/configure.py index ddd8311ad..85e746ca1 100755 --- a/configure.py +++ b/configure.py @@ -1485,7 +1485,7 @@ config.libs = [ ActorRel(NonMatching, "d_a_tag_ba1"), ActorRel(Matching, "d_a_tag_event"), ActorRel(Matching, "d_a_tag_evsw"), - ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_tag_ghostship"), + ActorRel(Matching, "d_a_tag_ghostship"), ActorRel(Matching, "d_a_tag_hint"), ActorRel(Matching, "d_a_tag_kb_item"), ActorRel(Matching, "d_a_tag_kk1"), @@ -1508,24 +1508,24 @@ config.libs = [ ActorRel(Matching, "d_a_arrow_iceeff"), ActorRel(Matching, "d_a_arrow_lighteff"), ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_beam"), - ActorRel(NonMatching, "d_a_boko"), + ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_boko"), ActorRel(Matching, "d_a_canon"), ActorRel(Matching, "d_a_cc"), ActorRel(Matching, "d_a_dai"), - ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_demo_item"), + ActorRel(Matching, "d_a_demo_item"), ActorRel(Matching, "d_a_door12"), ActorRel(Matching, "d_a_fallrock"), ActorRel(Matching, "d_a_ff"), ActorRel(Matching, "d_a_gy_ctrl"), ActorRel(Equivalent, "d_a_himo3"), ActorRel(NonMatching, "d_a_hmlif"), - ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_hys"), + ActorRel(Matching, "d_a_hys"), ActorRel(Equivalent, "d_a_kamome"), ActorRel(Matching, "d_a_kamome2"), # Demo-only ActorRel(NonMatching, "d_a_kantera"), ActorRel(Matching, "d_a_kn"), ActorRel(Matching, "d_a_kokiie"), - ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_ks"), + ActorRel(Matching, "d_a_ks"), ActorRel(NonMatching, "d_a_kt"), # regalloc ActorRel(Matching, "d_a_mflft"), ActorRel(NonMatching, "d_a_npc_cb1"), @@ -1560,7 +1560,7 @@ config.libs = [ ActorRel(NonMatching, "d_a_tag_md_cb"), ActorRel(NonMatching, "d_a_tag_mk"), ActorRel(Matching, "d_a_tag_so"), - ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_tornado"), + ActorRel(Matching, "d_a_tornado"), ActorRel(NonMatching, "d_a_warpf"), ActorRel(Matching, "d_a_wind_tag"), ActorRel(Matching, "d_a_acorn_leaf"), @@ -1609,7 +1609,7 @@ config.libs = [ ActorRel(Matching, "d_a_kmon"), ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_komore"), ActorRel(Matching, "d_a_lbridge"), - ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_leaflift"), + ActorRel(Matching, "d_a_leaflift"), ActorRel(NonMatching, "d_a_lstair"), ActorRel(Matching, "d_a_machine"), ActorRel(NonMatching, "d_a_mant"), @@ -1706,12 +1706,12 @@ config.libs = [ ActorRel(Matching, "d_a_obj_gnnbtltaki"), ActorRel(Matching, "d_a_obj_gnndemotakie"), ActorRel(NonMatching, "d_a_obj_gnndemotakis"), - ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_obj_gong"), + ActorRel(Matching, "d_a_obj_gong"), ActorRel(Matching, "d_a_obj_gtaki"), ActorRel(NonMatching, "d_a_obj_hami2"), ActorRel(Matching, "d_a_obj_hami3"), ActorRel(Matching, "d_a_obj_hami4"), - ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_obj_hat"), + ActorRel(Matching, "d_a_obj_hat"), ActorRel(Matching, "d_a_obj_hbrf1"), ActorRel(NonMatching, "d_a_obj_hcbh"), ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_obj_hha"), @@ -1739,7 +1739,7 @@ config.libs = [ ActorRel(Matching, "d_a_obj_ospbox"), ActorRel(Matching, "d_a_obj_paper"), ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_obj_pbka"), - ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_obj_pfall"), + ActorRel(Matching, "d_a_obj_pfall"), ActorRel(Matching, "d_a_obj_plant"), ActorRel(Matching, "d_a_obj_rflw"), ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_obj_rforce"), @@ -1776,7 +1776,7 @@ config.libs = [ ActorRel(Matching, "d_a_swattack"), ActorRel(Matching, "d_a_switem"), ActorRel(NonMatching, "d_a_swpropeller"), - ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_swtact"), + ActorRel(Matching, "d_a_swtact"), ActorRel(Matching, "d_a_tag_etc"), ActorRel(Matching, "d_a_tag_island"), ActorRel(NonMatching, "d_a_tag_kf1"), diff --git a/include/JSystem/J3DGraphAnimator/J3DModel.h b/include/JSystem/J3DGraphAnimator/J3DModel.h index b82e5fc34..20d4d8027 100644 --- a/include/JSystem/J3DGraphAnimator/J3DModel.h +++ b/include/JSystem/J3DGraphAnimator/J3DModel.h @@ -5,7 +5,6 @@ #include "JSystem/J3DGraphBase/J3DPacket.h" #include "JSystem/J3DGraphBase/J3DVertex.h" #include "dolphin/mtx/mtx.h" -#include "dolphin/mtx/mtxvec.h" #include "dolphin/types.h" enum J3DMdlFlag { diff --git a/include/d/actor/d_a_himo3.h b/include/d/actor/d_a_himo3.h index 51c8b561c..ac4ed1b06 100644 --- a/include/d/actor/d_a_himo3.h +++ b/include/d/actor/d_a_himo3.h @@ -27,13 +27,14 @@ struct h3_ga_s { /* 0x2F */ u8 m2F; }; // size = 0x30 -class himo3_class : public fopAc_ac_c { +class himo3_class { public: void getPlayerMoveLength() {} void setActorHang(cXyz, short); public: + /* 0x0000 */ fopAc_ac_c actor; /* 0x0290 */ request_of_phase_process_class mPhase; /* 0x0298 */ u8 m0298; /* 0x0299 */ u8 m0299; @@ -51,7 +52,7 @@ public: /* 0x02C0 */ himo3_s m02C0[200]; /* 0x1580 */ mDoExt_3DlineMat1_c mLineMat; /* 0x15BC */ u8 m15BC[0x15C0 - 0x15BC]; - /* 0x15C0 */ s32 m15C0; + /* 0x15C0 */ int m15C0; /* 0x15C4 */ cXyz m15C4; /* 0x15D0 */ f32 m15D0; /* 0x15D4 */ f32 m15D4; diff --git a/include/d/actor/d_a_mbdoor.h b/include/d/actor/d_a_mbdoor.h index 79d1336dd..38b66eeba 100644 --- a/include/d/actor/d_a_mbdoor.h +++ b/include/d/actor/d_a_mbdoor.h @@ -30,7 +30,7 @@ public: BOOL CreateHeap(); void calcMtx(); BOOL CreateInit(); - s32 getDemoAction(); + int getDemoAction(); void demoProc(); BOOL checkArea(); BOOL checkUnlock(); @@ -53,8 +53,8 @@ public: /* 0x2B7 */ u8 field_0x2B7[0x2B8 - 0x2B7]; /* 0x2B8 */ s16 mAdjustmentTimer; /* 0x2BA */ u8 field_0x2BA[0x2BC - 0x2BA]; - /* 0x2BC */ s32 field_0x2bc; - /* 0x2C0 */ s32 mEvtStaffId; + /* 0x2BC */ int field_0x2bc; + /* 0x2C0 */ int mEvtStaffId; /* 0x2C4 */ cXyz field_0x2c4; /* 0x2D0 */ cXyz mGoalPos; /* 0x2DC */ cXyz mGoal2Pos; diff --git a/include/d/actor/d_a_obj_search.h b/include/d/actor/d_a_obj_search.h index 3d6d8ccf1..422355cf3 100644 --- a/include/d/actor/d_a_obj_search.h +++ b/include/d/actor/d_a_obj_search.h @@ -69,6 +69,9 @@ namespace daObj_Search { /* 0x290 */ u8 m290[0x664 - 0x290]; /* 0x664 */ bool mBkControl; /* 0x665 */ u8 m665[0x84C - 0x665]; +#if VERSION == VERSION_DEMO + u8 pad84C; +#endif /* 0x84C */ fpc_ProcID mChildId; }; diff --git a/include/global.h b/include/global.h index b3ce236fe..ff4ac7d1c 100644 --- a/include/global.h +++ b/include/global.h @@ -4,7 +4,7 @@ #include "dolphin/types.h" #define ARRAY_SIZE(o) (sizeof(o) / sizeof(o[0])) -#define ARRAY_SSIZE(o) ((s32)(sizeof(o) / sizeof(o[0]))) +#define ARRAY_SSIZE(o) ((int)(sizeof(o) / sizeof(o[0]))) // Align X to the previous N bytes (N must be power of two) #define ALIGN_PREV(X, N) ((X) & ~((N)-1)) diff --git a/src/d/actor/d_a_bk.cpp b/src/d/actor/d_a_bk.cpp index f2a5de646..7b9ebf48f 100644 --- a/src/d/actor/d_a_bk.cpp +++ b/src/d/actor/d_a_bk.cpp @@ -101,33 +101,36 @@ static void anm_init(bk_class* i_this, int bckFileIdx, f32 morf, u8 loopMode, f3 /* 00000234-000005A8 .text yari_off_check__FP8bk_class */ static void yari_off_check(bk_class* i_this) { + fopAc_ac_c* actor = i_this; + if (i_this->m0B34 == 0) { return; } - daBoko_c* boko = (daBoko_c*)fopAcM_SearchByID(i_this->m1200); + fopAc_ac_c* boko_actor = fopAcM_SearchByID(i_this->m1200); + daBoko_c* boko = (daBoko_c*)boko_actor; if (boko) { daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); - fopAcM_cancelCarryNow(boko); + fopAcM_cancelCarryNow(boko_actor); if (i_this->m0B34 != 2) { boko->setRotAngleSpeed(cM_rndFX(2000.0f)); - s16 angleY = i_this->shape_angle.y + 0x8000 + (s16)cM_rndFX(8000.0f); + s16 angleY = actor->shape_angle.y + 0x8000 + (s16)cM_rndFX(8000.0f); f32 speedY = 20.0f + cM_rndF(20.0f); f32 speedForward = 20.0f + cM_rndF(10.0f); boko->moveStateInit(speedForward, speedY, angleY); } - boko->current.angle.y = player->shape_angle.y; + boko_actor->current.angle.y = player->shape_angle.y; cXyz offset; dBgS_LinChk linChk; - linChk.Set(&i_this->eyePos, &boko->current.pos, i_this); + linChk.Set(&actor->eyePos, &boko_actor->current.pos, i_this); if (dComIfG_Bgsp()->LineCross(&linChk)) { MtxP mtx = i_this->mpMorf->getModel()->getAnmMtx(0x10); // mune (chest) joint MTXCopy(mtx, *calc_mtx); boko->setMatrix(*calc_mtx); offset.set(0.0f, 0.0f, 0.0f); - MtxPosition(&offset, &boko->current.pos); + MtxPosition(&offset, &boko_actor->current.pos); } } @@ -275,13 +278,13 @@ static BOOL nodeCallBack(J3DNode* node, int calcTiming) { if (i_this) { MTXCopy(model->getAnmMtx(jntNo), *calc_mtx); if (jntNo == 0x13) { // ago joint - mDoMtx_ZrotM(*calc_mtx, i_this->m11F4); + cMtx_ZrotM(*calc_mtx, i_this->m11F4); model->setAnmMtx(jntNo, *calc_mtx); MTXCopy(*calc_mtx, J3DSys::mCurrentMtx); } else { - mDoMtx_YrotM(*calc_mtx, i_this->dr.m088[r28].y); - mDoMtx_XrotM(*calc_mtx, i_this->dr.m088[r28].x); - mDoMtx_ZrotM(*calc_mtx, i_this->dr.m088[r28].z); + cMtx_YrotM(*calc_mtx, i_this->dr.m088[r28].y); + cMtx_XrotM(*calc_mtx, i_this->dr.m088[r28].x); + cMtx_ZrotM(*calc_mtx, i_this->dr.m088[r28].z); model->setAnmMtx(jntNo, *calc_mtx); MTXCopy(*calc_mtx, J3DSys::mCurrentMtx); @@ -368,17 +371,17 @@ static void search_check_draw(bk_class* i_this) { s16 r26 = 0; for (i = 0; i < 0x10; i++, r26 += 0x1000) { MtxTrans(i_this->current.pos.x, 2.5f + i_this->dr.mSpawnY, i_this->current.pos.z, 0); - mDoMtx_YrotM(*calc_mtx, r26); + cMtx_YrotM(*calc_mtx, r26); MtxPosition(&sp08, &sp14[0]); - mDoMtx_YrotM(*calc_mtx, 0x1000); + cMtx_YrotM(*calc_mtx, 0x1000); MtxPosition(&sp08, &sp14[1]); } sp08.z = l_bkHIO.m02C; for (i = 0; i < 0x10; i++, r26 += 0x1000) { MtxTrans(i_this->current.pos.x, 2.5f + i_this->dr.mSpawnY, i_this->current.pos.z, 0); - mDoMtx_YrotM(*calc_mtx, (int)r26); + cMtx_YrotM(*calc_mtx, (int)r26); MtxPosition(&sp08, &sp14[0]); - mDoMtx_YrotM(*calc_mtx, 0x1000); + cMtx_YrotM(*calc_mtx, 0x1000); MtxPosition(&sp08, &sp14[1]); } @@ -387,25 +390,25 @@ static void search_check_draw(bk_class* i_this) { MtxTrans(i_this->eyePos.x, i_this->eyePos.y, i_this->eyePos.z, 0); MtxPush(); - mDoMtx_YrotM(*calc_mtx, i_this->m0330 - l_bkHIO.m034); + cMtx_YrotM(*calc_mtx, i_this->m0330 - l_bkHIO.m034); sp08.y = l_bkHIO.m038; MtxPosition(&sp08, &sp14[1]); MtxPull(); MtxPush(); sp08.y = l_bkHIO.m038; - mDoMtx_YrotM(*calc_mtx, i_this->m0330 + l_bkHIO.m034); + cMtx_YrotM(*calc_mtx, i_this->m0330 + l_bkHIO.m034); MtxPosition(&sp08, &sp14[2]); MtxPull(); MtxPush(); - mDoMtx_YrotM(*calc_mtx, i_this->m0330 - l_bkHIO.m034); + cMtx_YrotM(*calc_mtx, i_this->m0330 - l_bkHIO.m034); sp08.y = -l_bkHIO.m038; MtxPosition(&sp08, &sp14[4]); MtxPull(); sp08.y = -l_bkHIO.m038; - mDoMtx_YrotM(*calc_mtx, i_this->m0330 + l_bkHIO.m034); + cMtx_YrotM(*calc_mtx, i_this->m0330 + l_bkHIO.m034); MtxPosition(&sp08, &sp14[5]); sp14[0] = i_this->eyePos; @@ -415,7 +418,7 @@ static void search_check_draw(bk_class* i_this) { sp08.x = 0.0f; sp08.z = l_bkHIO.m02C; MtxTrans(i_this->eyePos.x, i_this->eyePos.y, i_this->eyePos.z, 0); - mDoMtx_YrotM(*calc_mtx, i_this->current.angle.y); + cMtx_YrotM(*calc_mtx, i_this->current.angle.y); sp08.x = l_bkHIO.m03C; sp08.y = l_bkHIO.m040; @@ -1216,7 +1219,9 @@ static void stand(bk_class* i_this) { anm_init(i_this, BK_BCK_BK_WAIT, 10.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, BK_BAS_BK_WAIT); i_this->dr.mMode = -19; i_this->m0300[1] = 20; + #if VERSION > VERSION_DEMO i_this->m02B5 = 0; + #endif // Fall-through case -19: if (i_this->m0300[1] == 0) { @@ -1802,14 +1807,15 @@ static void fight_run(bk_class* i_this) { break; } // Fall-through - case 1: + case 1: { f32 scaleMag; if (i_this->m0B30 != 0 || i_this->m11F3 != 0) { scaleMag = l_bkHIO.m054; } else { scaleMag = l_bkHIO.m058; } - cLib_addCalc2(&i_this->speedF, scaleMag, 1.0f, 5.0f); + f32 f3 = 5.0f; + cLib_addCalc2(&i_this->speedF, scaleMag, 1.0f, f3); i_this->m1212++; if (daBk_player_way_check(i_this) && (i_this->m1212 & 0x30) && !r29) { if (i_this->m120C != 0) { @@ -1869,6 +1875,7 @@ static void fight_run(bk_class* i_this) { return; } break; + } case 2: i_this->m120C = 0; @@ -2043,8 +2050,7 @@ static void fight_run(bk_class* i_this) { daBk_player_view_check(i_this, &i_this->dr.m714->current.pos, i_this->m0332, l_bkHIO.m034) ) { i_this->m02FC++; - s16 temp = 0x19 + REG0_S(0); - if (i_this->m02FC >= temp) { + if (i_this->m02FC >= (s16)(0x19 + REG0_S(0))) { if (cM_rndF(1.0f) < 0.5f + REG0_F(0) && (ground_4_check(i_this, 4, i_this->current.angle.y, 200.0f) & 0xD) == 0 ) { @@ -2228,7 +2234,6 @@ temp_1B8: u8 attackType = 0; f32 startFrame = 1000.0f; f32 endFrame = 1000.0f; - f32 maxDist = 10000.0f; if (i_this->m0B5C == 0) { startFrame = 12.0f + REG0_F(8); endFrame = 25.0f + REG0_F(9); @@ -2238,7 +2243,7 @@ temp_1B8: endFrame = 10.0f + REG0_F(11); attackType = 2; } - i_this->setBtAttackData(startFrame, endFrame, maxDist, attackType); + i_this->setBtAttackData(startFrame, endFrame, 10000.0f, attackType); i_this->setBtMaxDis(l_bkHIO.m014); i_this->setBtNowFrame(i_this->m0B64); @@ -2486,8 +2491,8 @@ static void hukki(bk_class* i_this) { daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); cXyz sp24 = i_this->dr.m100[10] - i_this->dr.m100[13]; cXyz sp18; - mDoMtx_YrotS(*calc_mtx, cM_atan2s(sp24.x, sp24.z)); - mDoMtx_XrotM(*calc_mtx, -cM_atan2s(sp24.y, std::sqrtf(sp24.x*sp24.x + sp24.z*sp24.z))); + cMtx_YrotS(*calc_mtx, cM_atan2s(sp24.x, sp24.z)); + cMtx_XrotM(*calc_mtx, -cM_atan2s(sp24.y, std::sqrtf(sp24.x*sp24.x + sp24.z*sp24.z))); sp24.x = sp24.y = 0.0f; i_this->m030E = 2; @@ -2640,7 +2645,7 @@ static void fail(bk_class* i_this) { } if (i_this->m02B8 != 0) { - dComIfGs_onSwitch(i_this->m02B8, i_this->current.roomNo); + dComIfGs_onSwitch(i_this->m02B8, fopAcM_GetRoomNo(i_this)); } fopAcM_onActor(i_this); @@ -2698,17 +2703,19 @@ static void yogan_fail(bk_class* i_this) { /* 000090E0-0000924C .text water_fail__FP8bk_class */ static void water_fail(bk_class* i_this) { + fopAc_ac_c* actor = i_this; + i_this->dr.m71E = 5; i_this->m030E = 5; - fopAcM_OffStatus(i_this, 0); - i_this->attention_info.flags = 0; - i_this->speedF = 0.0f; + fopAcM_OffStatus(actor, 0); + actor->attention_info.flags = 0; + actor->speedF = 0.0f; switch (i_this->dr.mMode) { case 0: anm_init(i_this, BK_BCK_BK_NIGERU, 5.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, BK_BAS_BK_NIGERU); i_this->dr.mMode = 1; - fopAcM_monsSeStart(i_this, JA_SE_CV_BK_SURPRISE, 0); + fopAcM_monsSeStart(actor, JA_SE_CV_BK_SURPRISE, 0); i_this->dr.m458.y = 0.0f; i_this->dr.m44C.y = 0.0f; i_this->dr.m480 = 0; @@ -2718,13 +2725,13 @@ static void water_fail(bk_class* i_this) { i_this->m0300[3] = 120; // Fall-through case 1: - i_this->speed.y = 0.0f; - i_this->current.pos.y -= 1.0f; - cLib_addCalcAngleS2(&i_this->current.angle.x, 0, 8, 0x800); + actor->speed.y = 0.0f; + actor->current.pos.y -= 1.0f; + cLib_addCalcAngleS2(&actor->current.angle.x, 0, 8, 0x800); if (i_this->m0300[3] == 0) { - fopAcM_delete(i_this); + fopAcM_delete(actor); if (i_this->m02B8 != 0) { - dComIfGs_onSwitch(i_this->m02B8, i_this->current.roomNo); + dComIfGs_onSwitch(i_this->m02B8, fopAcM_GetRoomNo(actor)); } } break; @@ -2815,6 +2822,7 @@ static void wepon_search(bk_class* i_this) { if (i_this->m0300[1] == 24) { if (boko != NULL && !fopAcM_checkCarryNow(boko)) { i_this->m0B30 = 2; + #if VERSION > VERSION_DEMO if (fopAcM_GetParam(boko) == daBoko_c::Type_BOKO_STICK_e) { i_this->m02D5 = 0; i_this->m1040.SetAtType(AT_TYPE_UNK2000); @@ -2824,6 +2832,7 @@ static void wepon_search(bk_class* i_this) { i_this->m1040.SetAtType(AT_TYPE_UNK800); i_this->m1040.SetAtSe(dCcG_SE_UNK2); } + #endif fopAcM_setCarryNow(boko, FALSE); } else { i_this->dr.mAction = 0; @@ -3249,6 +3258,8 @@ static void b_hang(bk_class* i_this) { /* 0000A9BC-0000AC6C .text rope_on__FP8bk_class */ static void rope_on(bk_class* i_this) { + daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); + i_this->dr.m710 = 1; i_this->m030E = 2; @@ -3893,7 +3904,7 @@ static void waki_set(bk_class* i_this) { } else { params->base.parameters = (i_this->m02B6 << 0x10) | 0xFF00FF39; // TODO clean up parameters } - params->room_no = actor->current.roomNo; + params->room_no = fopAcM_GetRoomNo(actor); fopAcM_Create(PROC_BK, NULL, params); i_this->m1212++; } @@ -3902,6 +3913,7 @@ static void waki_set(bk_class* i_this) { /* 0000C2D0-0000CC68 .text demo_camera__FP8bk_class */ static void demo_camera(bk_class* i_this) { fopAc_ac_c* actor = i_this; + fopAc_ac_c* player_actor = dComIfGp_getPlayer(0); daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); @@ -3926,17 +3938,17 @@ static void demo_camera(bk_class* i_this) { // Fall-through case 2: sp80.x = 1884.0f; - sp80.y = player->current.pos.y; + sp80.y = player_actor->current.pos.y; sp80.z = -4100.0f; player->setPlayerPosAndAngle(&sp80, REG8_S(4) + 0x61A8); - i_this->m1244 = player->current.pos; + i_this->m1244 = player_actor->current.pos; i_this->m1244.y += REG13_F(6) + 100.0f; - cMtx_YrotS(*calc_mtx, player->shape_angle.y); + cMtx_YrotS(*calc_mtx, player_actor->shape_angle.y); sp8C.x = 0.0f; sp8C.y = REG13_F(7) + 50.0f; sp8C.z = REG13_F(8) + 150.0f; MtxPosition(&sp8C, &sp80); - i_this->m1238 = player->current.pos + sp80; + i_this->m1238 = player_actor->current.pos + sp80; i_this->m1260 = REG13_F(9) + 45.0f; if (i_this->m1236 == 30) { player->changeOriginalDemo(); @@ -3955,7 +3967,7 @@ static void demo_camera(bk_class* i_this) { sp8C.y = 100.0f; sp8C.z = REG8_F(18) + 30.0f; MtxPosition(&sp8C, &sp80); - i_this->m1238 = player->current.pos + sp80; + i_this->m1238 = player_actor->current.pos + sp80; i_this->m1244 = ken->current.pos; i_this->m1244.y += REG8_F(4); if (i_this->m1236 > 10) { @@ -3971,18 +3983,18 @@ static void demo_camera(bk_class* i_this) { player->changeDemoMode(29); player->voiceStart(0x1F); } - i_this->m1244 = player->current.pos; + i_this->m1244 = player_actor->current.pos; i_this->m1244.y += REG8_F(6) + 90.0f; - cMtx_YrotS(*calc_mtx, player->shape_angle.y); + cMtx_YrotS(*calc_mtx, player_actor->shape_angle.y); sp8C.x = 0.0f; sp8C.y = REG8_F(7) + 50.0f; sp8C.z = REG8_F(8) + 200.0f; MtxPosition(&sp8C, &sp80); - i_this->m1238 = player->current.pos + sp80; + i_this->m1238 = player_actor->current.pos + sp80; i_this->m1260 = REG8_F(9) + 55.0f; if (i_this->m1236 == 30) { - dComIfGs_onSwitch(0xE0, actor->current.roomNo); + dComIfGs_onSwitch(0xE0, fopAcM_GetRoomNo(actor)); mDoAud_bgmAllMute(30); } if (i_this->m1236 == 50) { @@ -4051,7 +4063,7 @@ static void demo_camera(bk_class* i_this) { camera->mCamera.Start(); camera->mCamera.SetTrimSize(0); dComIfGp_event_reset(); - dComIfGs_onSwitch(0xE1, actor->current.roomNo); + dComIfGs_onSwitch(0xE1, fopAcM_GetRoomNo(actor)); } break; case 50: @@ -4095,8 +4107,7 @@ static void demo_camera(bk_class* i_this) { /* 0000CC68-0000CD00 .text tate_mtx_set__FP8bk_class */ static void tate_mtx_set(bk_class* i_this) { if (i_this->m02D4 != 0) { - int jointIdx = 0x25; // tate joint - MTXCopy(i_this->mpMorf->getModel()->getAnmMtx(jointIdx), *calc_mtx); + MTXCopy(i_this->mpMorf->getModel()->getAnmMtx(0x25), *calc_mtx); // tate joint i_this->m02D0->setBaseTRMtx(*calc_mtx); cXyz sp08; sp08.x = REG8_F(12); @@ -4129,6 +4140,8 @@ static void bou_mtx_set(bk_class* i_this) { /* 0000CE18-0000DD1C .text daBk_Execute__FP8bk_class */ static BOOL daBk_Execute(bk_class* i_this) { + daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); + another_hit = 0; if (i_this->mpSearchLight != NULL) { @@ -4150,7 +4163,8 @@ static BOOL daBk_Execute(bk_class* i_this) { i_this->mpMorf->setPlayMode(J3DFrameCtrl::EMode_NONE); i_this->mpMorf->setPlaySpeed(3.0f); i_this->mpMorf->play(&i_this->eyePos, 0, 0); - i_this->mpMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get()); + J3DModel* model = i_this->mpMorf->getModel(); + model->setBaseTRMtx(mDoMtx_stack_c::get()); i_this->mpMorf->calc(); tate_mtx_set(i_this); bou_mtx_set(i_this); @@ -4362,8 +4376,7 @@ static BOOL daBk_Execute(bk_class* i_this) { if (boko != NULL) { if (fopAcM_checkCarryNow(boko)) { if (i_this->m0B7B == 0) { - int jointIdx = 0x2C; // buki joint - MTXCopy(i_this->mpMorf->getModel()->getAnmMtx(jointIdx), *calc_mtx); + MTXCopy(i_this->mpMorf->getModel()->getAnmMtx(0x2C), *calc_mtx); // buki joint s16 angleY = 0x3E80 + REG8_S(1); cMtx_YrotM(*calc_mtx, angleY); s16 angleX = REG8_S(2); @@ -4496,10 +4509,12 @@ static BOOL daBk_IsDelete(bk_class* i_this) { /* 0000DD24-0000DDD8 .text daBk_Delete__FP8bk_class */ static BOOL daBk_Delete(bk_class* i_this) { - dComIfG_resDelete(&i_this->mPhase, "Bk"); + dComIfG_resDeleteDemo(&i_this->mPhase, "Bk"); +#if VERSION > VERSION_DEMO if (i_this->heap) { i_this->mpMorf->stopZelAnime(); } +#endif if (i_this->m121D) { hio_set = 0; mDoHIO_deleteChild(l_bkHIO.mNo); @@ -4510,6 +4525,7 @@ static BOOL daBk_Delete(bk_class* i_this) { return TRUE; } +#if VERSION > VERSION_DEMO /* 0000DDD8-0000E2C8 .text useHeapInit__FP10fopAc_ac_c */ static BOOL useHeapInit(fopAc_ac_c* i_actor) { bk_class* i_this = (bk_class*)i_actor; @@ -4549,6 +4565,8 @@ static BOOL useHeapInit(fopAc_ac_c* i_actor) { i_this->m02C4 = new mDoExt_btpAnm(); if (i_this->m02C4 == NULL) { // Bug: This function is supposed to return a boolean but here it returns a phase state instead. + // This is because the contents of this function were originally written in daBk_Create (which returns + // a phase state) for the demo version and were cut and pasted into a separate function for retail. // TODO: Check what happens when this bug occurs. return cPhs_ERROR_e; } @@ -4561,7 +4579,7 @@ static BOOL useHeapInit(fopAc_ac_c* i_actor) { J3DModelData* modelData; modelData = (J3DModelData*)dComIfG_getObjectRes("Bk", BK_BMD_BK_KB); - JUT_ASSERT(VERSION_SELECT(9398, 9398, 9418, 9418), modelData != NULL); + JUT_ASSERT(VERSION_SELECT(9459, 9398, 9418, 9418), modelData != NULL); if (i_this->m02D5 & 0x40) { J3DMaterialTable* bmt = (J3DMaterialTable*)dComIfG_getObjectRes("Bk", BK_BMT_BK_KEN); modelData->setMaterialTable(bmt, J3DMatCopyFlag_Material); @@ -4580,13 +4598,13 @@ static BOOL useHeapInit(fopAc_ac_c* i_actor) { if (i_this->m02D4 != 0) { modelData = (J3DModelData*)dComIfG_getObjectRes("Bk", BK_BMD_BK_TATE); i_this->m02D0 = mDoExt_J3DModel__create(modelData, 0, 0x11020203); - JUT_ASSERT(VERSION_SELECT(9425, 9425, 9445, 9445), modelData != NULL); + JUT_ASSERT(VERSION_SELECT(9486, 9425, 9445, 9445), modelData != NULL); } if (i_this->m02DC != 0) { modelData = (J3DModelData*)dComIfG_getObjectRes("Bk", BK_BDL_BOUEN); i_this->m02D8 = mDoExt_J3DModel__create(modelData, 0, 0x11020203); - JUT_ASSERT(VERSION_SELECT(9434, 9434, 9454, 9454), modelData != NULL); + JUT_ASSERT(VERSION_SELECT(9496, 9434, 9454, 9454), modelData != NULL); } static Vec hip_offset[] = { @@ -4721,6 +4739,7 @@ static BOOL useHeapInit(fopAc_ac_c* i_actor) { return TRUE; } +#endif /* 0000E310-0000EA2C .text daBk_Create__FP10fopAc_ac_c */ static cPhs_State daBk_Create(fopAc_ac_c* i_actor) { @@ -4729,7 +4748,7 @@ static cPhs_State daBk_Create(fopAc_ac_c* i_actor) { cPhs_State phase_state = dComIfG_resLoad(&i_this->mPhase, "Bk"); if (phase_state == cPhs_COMPLEATE_e) { - i_this->gbaName = 1; + i_actor->gbaName = 1; if (strcmp(dComIfGp_getStartStageName(), "ITest63") == 0 || strcmp(dComIfGp_getStartStageName(), "GanonJ") == 0) @@ -4739,42 +4758,246 @@ static cPhs_State daBk_Create(fopAc_ac_c* i_actor) { search_sp = 0; } - i_this->mType = fopAcM_GetParam(i_this) & 0xF; - i_this->m02B9 = fopAcM_GetParam(i_this) & 0x10; - i_this->m02D4 = fopAcM_GetParam(i_this) & 0x20; + i_this->mType = fopAcM_GetParam(i_actor) & 0xF; + i_this->m02B9 = fopAcM_GetParam(i_actor) & 0x10; + i_this->m02D4 = fopAcM_GetParam(i_actor) & 0x20; if (i_this->mType == 0xB) { i_this->m02D4 = 0; i_this->m02DC = 1; i_this->mType = 4; } - i_this->m02D5 = fopAcM_GetParam(i_this) & 0xC0; - i_this->m02B5 = fopAcM_GetParam(i_this) >> 8 & 0xFF; - i_this->m02B6 = fopAcM_GetParam(i_this) >> 16 & 0xFF; - i_this->m02B7 = fopAcM_GetParam(i_this) >> 24 & 0xFF; - i_this->m02B8 = i_this->current.angle.z; - i_this->current.angle.x = i_this->current.angle.z = 0; + i_this->m02D5 = fopAcM_GetParam(i_actor) & 0xC0; + i_this->m02B5 = fopAcM_GetParam(i_actor) >> 8 & 0xFF; + i_this->m02B6 = fopAcM_GetParam(i_actor) >> 16 & 0xFF; + i_this->m02B7 = fopAcM_GetParam(i_actor) >> 24 & 0xFF; + i_this->m02B8 = i_actor->current.angle.z; + i_actor->current.angle.x = i_actor->current.angle.z = 0; if (i_this->m02B8 == 0xFF) { i_this->m02B8 = 0; } if (i_this->m02B8 != 0) { - if (dComIfGs_isSwitch(i_this->m02B8, fopAcM_GetRoomNo(i_this))) { + if (dComIfGs_isSwitch(i_this->m02B8, fopAcM_GetRoomNo(i_actor))) { return cPhs_ERROR_e; } } if (i_this->m02B9 != 0) { - if (dComIfGs_isSwitch(i_this->m02B7, fopAcM_GetRoomNo(i_this))) { + if (dComIfGs_isSwitch(i_this->m02B7, fopAcM_GetRoomNo(i_actor))) { return cPhs_ERROR_e; } i_this->m02B7 = 0xFF; } - i_this->itemTableIdx = dComIfGp_CharTbl()->GetNameIndex("Bk", 0); + i_actor->itemTableIdx = dComIfGp_CharTbl()->GetNameIndex("Bk", 0); - if (!fopAcM_entrySolidHeap(i_this, useHeapInit, 0x17B20)) { +#if VERSION == VERSION_DEMO + u32 heap_size = 0x16D00; + if (fopAcM_createHeap(i_actor, heap_size, 0) == NULL) { return cPhs_ERROR_e; } + i_this->mpMorf = new mDoExt_McaMorf( + (J3DModelData*)dComIfG_getObjectRes("Bk", BK_BDL_BK), + NULL, NULL, + (J3DAnmTransformKey*)dComIfG_getObjectRes("Bk", BK_BCK_BK_SUWARI), + J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, 1, + dComIfG_getObjectRes("Bk", BK_BAS_BK_SUWARI), + 0x00080000, + 0x37221203 + ); + + J3DModel* model = i_this->mpMorf->getModel(); + for (u16 i = 0; i < model->getModelData()->getJointNum(); i++) { + s32 r3 = joint_check[i]; + if (r3 < 0) { + continue; + } + if (r3 == 0x0E || r3 == 0x0F || r3 == 0x10 || r3 == 0x11 || r3 == 0x14) { + model->getModelData()->getJointNodePointer(i)->setCallBack(nodeCallBack_P); + } else { + model->getModelData()->getJointNodePointer(i)->setCallBack(nodeCallBack); + } + } + + if (i_this->m02DC != 0) { + i_this->m1230 = (J3DMaterialTable*)dComIfG_getObjectRes("Bk", BK_BMT_PINK); + } else if (i_this->m02D4 != 0) { + i_this->m1230 = (J3DMaterialTable*)dComIfG_getObjectRes("Bk", BK_BMT_GREEN); + } + + i_this->m02C4 = new mDoExt_btpAnm(); + if (i_this->m02C4 == NULL) { + return cPhs_ERROR_e; + } + J3DAnmTexPattern* btp = (J3DAnmTexPattern*)dComIfG_getObjectRes("Bk", BK_BTP_TMABATAKI); + if (!i_this->m02C4->init(model->getModelData(), btp, TRUE, J3DFrameCtrl::EMode_NONE)) { + return cPhs_ERROR_e; + } + + J3DModelData* modelData; + modelData = (J3DModelData*)dComIfG_getObjectRes("Bk", BK_BMD_BK_KB); + JUT_ASSERT(VERSION_SELECT(9459, 9398, 9418, 9418), modelData != NULL); + if (i_this->m02D5 & 0x40) { + J3DMaterialTable* bmt = (J3DMaterialTable*)dComIfG_getObjectRes("Bk", BK_BMT_BK_KEN); + modelData->setMaterialTable(bmt, J3DMatCopyFlag_Material); + } else { + J3DMaterialTable* bmt = (J3DMaterialTable*)dComIfG_getObjectRes("Bk", BK_BMT_BK_BOKO); + modelData->setMaterialTable(bmt, J3DMatCopyFlag_Material); + } + i_this->m02E8 = mDoExt_J3DModel__create(modelData, 0, 0x11020203); + if (i_this->m02E8 == NULL) { + phase_state = cPhs_ERROR_e; + } else { + i_this->m02E8->setBaseScale(i_actor->scale); + } + + if (i_this->m02D4 != 0) { + modelData = (J3DModelData*)dComIfG_getObjectRes("Bk", BK_BMD_BK_TATE); + i_this->m02D0 = mDoExt_J3DModel__create(modelData, 0, 0x11020203); + JUT_ASSERT(VERSION_SELECT(9486, 9425, 9445, 9445), modelData != NULL); + } + + if (i_this->m02DC != 0) { + modelData = (J3DModelData*)dComIfG_getObjectRes("Bk", BK_BDL_BOUEN); + i_this->m02D8 = mDoExt_J3DModel__create(modelData, 0, 0x11020203); + JUT_ASSERT(VERSION_SELECT(9496, 9434, 9454, 9454), modelData != NULL); + } + + static Vec hip_offset[] = { + {0.0f, 0.0f, 0.0f}, + }; + static Vec momo_offset[] = { + {-10.0f, 0.0f, 0.0f}, + {20.0f, 0.0f, 0.0f}, + }; + static Vec sune_offset[] = { + {0.0f, -2.0f, 0.0f}, + {15.0f, -2.0f, 0.0f}, + }; + static Vec shipo_offset[] = { + {0.0f, -1.0f, 0.0f}, + {22.0f, -1.0f, 0.0f}, + }; + static Vec mune1_offset[] = { + {15.0f, 0.0f, 0.0f}, + {40.0f, 0.0f, 0.0f}, + }; + static Vec mune2_offset[] = { + {40.0f, 0.0f, 0.0f}, + {60.0f, 0.0f, 0.0f}, + }; + static Vec udeL_offset[] = { + {0.0f, 0.0f, 0.0f}, + {45.0f, 0.0f, 0.0f}, + }; + static Vec udeR_offset[] = { + {0.0f, 0.0f, 0.0f}, + {-45.0f, 0.0f, 0.0f}, + }; + static __jnt_hit_data_c search_data[] = { + { + /* mShapeType */ JntHitType_SPH_e, + /* mJointIndex */ 0x01, // hip1 joint + /* mRadius */ 20.0f, + /* mpOffsets */ hip_offset, + }, + { + /* mShapeType */ JntHitType_CYL_e, + /* mJointIndex */ 0x03, // momoL joint + /* mRadius */ 5.0f, + /* mpOffsets */ momo_offset, + }, + { + /* mShapeType */ JntHitType_CYL_e, + /* mJointIndex */ 0x04, // suneL1 joint + /* mRadius */ 2.5f, + /* mpOffsets */ sune_offset, + }, + { + /* mShapeType */ JntHitType_CYL_e, + /* mJointIndex */ 0x08, // momorR joint + /* mRadius */ 5.0f, + /* mpOffsets */ momo_offset, + }, + { + /* mShapeType */ JntHitType_CYL_e, + /* mJointIndex */ 0x09, // suneR1 joint + /* mRadius */ 2.5f, + /* mpOffsets */ sune_offset, + }, + { + /* mShapeType */ JntHitType_CYL_e, + /* mJointIndex */ 0x0C, // sippo1 joint + /* mRadius */ 3.0f, + /* mpOffsets */ shipo_offset, + }, + { + /* mShapeType */ JntHitType_CYL_e, + /* mJointIndex */ 0x0D, // sippo2 joint + /* mRadius */ 2.5f, + /* mpOffsets */ shipo_offset, + }, + { + /* mShapeType */ JntHitType_CYL_e, + /* mJointIndex */ 0x0E, // sippo3 joint + /* mRadius */ 1.5f, + /* mpOffsets */ shipo_offset, + }, + { + /* mShapeType */ JntHitType_CYL_e, + /* mJointIndex */ 0x0F, // sippo4 joint + /* mRadius */ 2.5f, + /* mpOffsets */ shipo_offset, + }, + { + /* mShapeType */ JntHitType_CYL_e, + /* mJointIndex */ 0x10, // mune joint + /* mRadius */ 20.0f, + /* mpOffsets */ mune1_offset, + }, + { + /* mShapeType */ JntHitType_CYL_e, + /* mJointIndex */ 0x10, // mune joint + /* mRadius */ 15.0f, + /* mpOffsets */ mune2_offset, + }, + { + /* mShapeType */ JntHitType_CYL_e, + /* mJointIndex */ 0x21, // udeL2 joint + /* mRadius */ 6.0f, + /* mpOffsets */ udeL_offset, + }, + { + /* mShapeType */ JntHitType_CYL_e, + /* mJointIndex */ 0x22, // udeL3 joint + /* mRadius */ 3.0f, + /* mpOffsets */ udeL_offset, + }, + { + /* mShapeType */ JntHitType_CYL_e, + /* mJointIndex */ 0x29, // udeR2 joint + /* mRadius */ 6.0f, + /* mpOffsets */ udeR_offset, + }, + { + /* mShapeType */ JntHitType_CYL_e, + /* mJointIndex */ 0x2A, // udeR3 joint + /* mRadius */ 3.0f, + /* mpOffsets */ udeR_offset, + }, + }; + i_this->mpJntHit = JntHit_create(i_this->mpMorf->getModel(), search_data, ARRAY_SIZE(search_data)); + + if (i_this->mpJntHit) { + i_actor->jntHit = i_this->mpJntHit; + } + fopAcM_adjustHeap(i_actor); +#else + if (!fopAcM_entrySolidHeap(i_actor, useHeapInit, 0x17B20)) { + return cPhs_ERROR_e; + } +#endif + if (!hio_set) { l_bkHIO.mNo = mDoHIO_createChild("ボコちゃん", &l_bkHIO); // "Boko-chan" i_this->m121D = 1; @@ -4787,18 +5010,18 @@ static cPhs_State daBk_Create(fopAc_ac_c* i_actor) { return cPhs_ERROR_e; } - fopAcM_SetMin(i_this, -200.0f, -50.0f, -100.0f); - fopAcM_SetMax(i_this, 125.0f, 250.0f, 250.0f); - fopAcM_SetMtx(i_this, i_this->mpMorf->getModel()->getBaseTRMtx()); + fopAcM_SetMin(i_actor, -200.0f, -50.0f, -100.0f); + fopAcM_SetMax(i_actor, 125.0f, 250.0f, 250.0f); + fopAcM_SetMtx(i_actor, i_this->mpMorf->getModel()->getBaseTRMtx()); i_this->mpMorf->getModel()->setUserArea((u32)i_this); i_this->initBt(162.5f, 125.0f); i_this->dr.m70C = 1; - i_this->dr.mSpawnY = i_this->current.pos.y; + i_this->dr.mSpawnY = i_actor->current.pos.y; i_this->dr.mMaxFallDistance = 1000.0f; if (i_this->m02B6 != 0xFF) { - i_this->ppd = dPath_GetRoomPath(i_this->m02B6, fopAcM_GetRoomNo(i_this)); + i_this->ppd = dPath_GetRoomPath(i_this->m02B6, fopAcM_GetRoomNo(i_actor)); if (i_this->ppd == NULL) { return cPhs_ERROR_e; } @@ -4810,7 +5033,7 @@ static cPhs_State daBk_Create(fopAc_ac_c* i_actor) { i_this->dr.mAction = 1; if (i_this->mType == 0xA) { i_this->dr.mMode = -20; - fopAcM_OnStatus(i_this, fopAcStts_BOSS_e); + fopAcM_OnStatus(i_actor, fopAcStts_BOSS_e); #if VERSION != VERSION_USA search_sp = 1; #endif @@ -4834,10 +5057,10 @@ static cPhs_State daBk_Create(fopAc_ac_c* i_actor) { i_this->m030E = 0xA; } else if (i_this->mType == 9) { i_this->dr.mAction = 3; - i_this->m1216 = i_this->current.angle.z; - i_this->m1217 = i_this->current.angle.y; - i_this->current.angle.z = 0; - i_this->current.angle.y = 0; + i_this->m1216 = i_actor->current.angle.z; + i_this->m1217 = i_actor->current.angle.y; + i_actor->current.angle.z = 0; + i_actor->current.angle.y = 0; } if (i_this->m02B7 != 0xFF) { @@ -4862,17 +5085,20 @@ static cPhs_State daBk_Create(fopAc_ac_c* i_actor) { } else { weaponType = 0; } - i_this->m1200 = fopAcM_create(PROC_BOKO, weaponType, &i_this->current.pos, fopAcM_GetRoomNo(i_this)); + i_this->m1200 = fopAcM_create(PROC_BOKO, weaponType, &i_actor->current.pos, fopAcM_GetRoomNo(i_actor)); i_this->m1214 = 1; i_this->m02D5 &= 0x40; - } else { + } + #if VERSION > VERSION_DEMO + else { i_this->m11F3 = 1; } + #endif i_this->dr.mAcch.Set( - fopAcM_GetPosition_p(i_this), fopAcM_GetOldPosition_p(i_this), + fopAcM_GetPosition_p(i_actor), fopAcM_GetOldPosition_p(i_actor), i_this, 1, &i_this->dr.mAcchCir, - fopAcM_GetSpeed_p(i_this) + fopAcM_GetSpeed_p(i_actor) ); i_this->dr.mAcchCir.SetWall(40.0f, 40.0f); i_this->dr.mAcch.ClrRoofNone(); @@ -4881,9 +5107,9 @@ static cPhs_State daBk_Create(fopAc_ac_c* i_actor) { i_this->dr.mInvincibleTimer = 5; if (i_this->m02D4 != 0) { - i_this->max_health = i_this->health = 7; + i_actor->max_health = i_actor->health = 7; } else { - i_this->max_health = i_this->health = 5; + i_actor->max_health = i_actor->health = 5; } i_this->dr.mStts.Init(200, 0xFF, i_this); @@ -5079,7 +5305,7 @@ static cPhs_State daBk_Create(fopAc_ac_c* i_actor) { i_this->mEnemyFire.mParticleScale[i] = fire_sc[i]; } - i_this->stealItemLeft = 3; + i_actor->stealItemLeft = 3; daBk_Execute(i_this); } diff --git a/src/d/actor/d_a_boko.cpp b/src/d/actor/d_a_boko.cpp index 9d90381f2..8218e033f 100644 --- a/src/d/actor/d_a_boko.cpp +++ b/src/d/actor/d_a_boko.cpp @@ -86,7 +86,7 @@ void daBoko_c::keDraw() { /* 0000017C-00000620 .text keCalc1__8daBoko_cFP6ke_c_si */ void daBoko_c::keCalc1(ke_c_s* arg1, int arg2) { - s32 i; + int i; cXyz* pcVar11 = &arg1->m000[1]; cXyz* pcVar10 = &arg1->m078[1]; cXyz sp18(0.0f, 0.0f, 21.875f); @@ -97,7 +97,12 @@ void daBoko_c::keCalc1(ke_c_s* arg1, int arg2) { f32 fVar6; dBgS_GndChk gndChk; - gndChk.m_pos.set(pcVar11->x, pcVar11->y + 100.0f, pcVar11->z); + Vec temp; + temp.x = pcVar11->x; + temp.y = pcVar11->y; + temp.z = pcVar11->z; + temp.y += 100.0f; + gndChk.m_pos.set(temp); f32 fVar14 = dComIfG_Bgsp()->GroundCross(&gndChk) + 3.0f; if (fVar14 == -G_CM3D_F_INF) { @@ -122,7 +127,7 @@ void daBoko_c::keCalc1(ke_c_s* arg1, int arg2) { fVar5 = fVar5tmp - pcVar11[-1].y; s16 iVar7 = -cM_atan2s(fVar5, fVar6); - s32 iVar8 = cM_atan2s(fVar7, std::sqrtf(SQUARE(fVar5) + SQUARE(fVar6))); + int iVar8 = cM_atan2s(fVar7, std::sqrtf(SQUARE(fVar5) + SQUARE(fVar6))); mDoMtx_XrotS(*calc_mtx, iVar7); mDoMtx_YrotM(*calc_mtx, iVar8); cXyz sp0C; @@ -142,7 +147,7 @@ void daBoko_c::keCalc1(ke_c_s* arg1, int arg2) { } cXyz* segments = mpLineKe->lineMat.getPos(arg2); - for (s32 i = 0; i < 10; i++) { + for (int i = 0; i < 10; i++) { *segments++ = arg1->m000[i]; } } @@ -153,7 +158,7 @@ void daBoko_c::keCalc() { MTXCopy(mpModel->getBaseTRMtx(), *calc_mtx); - for (s32 i = 0; i < ARRAY_SSIZE(mpLineKe->m001C); i++, ke++) { + for (int i = 0; i < ARRAY_SSIZE(mpLineKe->m001C); i++, ke++) { MtxPush(); cXyz sp08; sp08.x = cM_ssin(15000 * i) * 12.0f; @@ -186,13 +191,13 @@ BOOL daBoko_c::draw() { GXColor color = {0xEB, 0x7D, 0, 0}; dComIfGd_setAlphaModelColor(color); - s32 i; + int i; for (i = 0; i < 2; i++) { dComIfGd_setAlphaModel(dDlst_alphaModel_c::TYPE_SPHERE, mAlphaModelMtx[i], dark_stts->getBokoAlpha(i)); } if (getNowMode() == Mode_PLAYER_CARRY_e && dStage_roomControl_c::getDarkMode() != 0) { - for (s32 j = i; j < 4; j++) { + for (int j = i; j < 4; j++) { dComIfGd_setSpotModel(dDlst_alphaModel_c::TYPE_SPHERE, mAlphaModelMtx[j], dark_stts->getBokoAlpha(j)); } } @@ -235,7 +240,7 @@ static BOOL daBoko_Draw(daBoko_c* i_this) { /* 00000DE4-00000EB0 .text setTopRootPos__8daBoko_cFi */ void daBoko_c::setTopRootPos(int arg1) { - s32 type = fopAcM_GetParam(this); + int type = fopAcM_GetParam(this); if (arg1 != 0) { mDoMtx_stack_c::transS(current.pos.x, current.pos.y + 5.0f, current.pos.z); mDoMtx_stack_c::ZXYrotM(shape_angle.x, shape_angle.y, shape_angle.z); @@ -272,7 +277,7 @@ void daBoko_c::setFlameEffect() { dStage_darkStatus_c* dark_stts = dStage_roomControl_c::getDarkStatus(); if (dark_stts != NULL) { - for (s32 i = 0; i < 4; i++) { + for (int i = 0; i < 4; i++) { cLib_addCalc2(&m7E4, cM_rndF(0.2f) + 1.0f, 0.5f, 0.01f); f32 scale = m7E4 * dark_stts->getBokoScale(i); s16 y = g_Counter.mTimer * base_angle[i]; @@ -290,30 +295,33 @@ void daBoko_c::setFlameEffect() { JPABaseEmitter* pJVar5 = mParticleCallBack.getEmitter(); if (pJVar5 != NULL) { - f32 fVar1 = (REG0_F(4) + -0.03f) * (m2D0.x - m320.x); - if (fVar1 > 1.0f) { - fVar1 = 1.0f; - } else if (fVar1 < -1.0f) { - fVar1 = -1.0f; + Vec temp; + + temp.x = (REG0_F(4) + -0.03f) * (m2D0.x - m320.x); + if (temp.x > 1.0f) { + temp.x = 1.0f; + } else if (temp.x < -1.0f) { + temp.x = -1.0f; } - f32 fVar2 = (REG0_F(4) + -0.03f) * (m2D0.z - m320.z); - if (fVar2 > 1.0f) { - fVar2 = 1.0f; - } else if (fVar2 < -1.0f) { - fVar2 = -1.0f; + temp.z = (REG0_F(4) + -0.03f) * (m2D0.z - m320.z); + if (temp.z > 1.0f) { + temp.z = 1.0f; + } else if (temp.z < -1.0f) { + temp.z = -1.0f; } - JGeometry::TVec3 s(fVar1, 0.1f, fVar2); + JGeometry::TVec3 s(temp.x, 0.1f, temp.z); pJVar5->setDirection(s); s = current.pos - old.pos; + const f32 f5 = 1.0f; // TODO: nonmatching for demo f32 fVar11 = (REG0_F(12) + 0.05f) * std::sqrtf(SQUARE(s.x) + SQUARE(s.y) + SQUARE(s.z)) + 1.0f; if (fVar11 > REG0_F(13) + 2.0f) { fVar11 = REG0_F(13) + 2.0f; } - JGeometry::TVec3 s2(1.0f, fVar11, 1.0f); + JGeometry::TVec3 s2(f5, fVar11, f5); pJVar5->setGlobalParticleScale(s2); m320 = m2D0; mDoAud_seStart(JA_SE_OBJ_TORCH_BURNING, &m2D0, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); @@ -354,7 +362,7 @@ void daBoko_c::setThrowReverse(s16 arg1) { speedF *= 0.25f; current.angle.y = arg1 + cM_rndFX(12288.0f); - s32 sVar1 = cLib_distanceAngleS(current.angle.y, shape_angle.y); + int sVar1 = cLib_distanceAngleS(current.angle.y, shape_angle.y); if (sVar1 >= 0x4000) { m2C2 = -(cM_rndFX(500.0f) + 3500.0f); shape_angle.y = current.angle.y - -0x8000; @@ -425,21 +433,23 @@ BOOL daBoko_c::procMove() { cXyz sp1C(m2DC.x, fVar14_2, m2DC.z); m_ground_check.SetPos(&sp1C); - f32 fVar14 = dComIfG_Bgsp()->GroundCross(&m_ground_check); - if (fVar14 == -G_CM3D_F_INF) { - fVar14 = mAcch.GetGroundH(); + f32 f31; + f32 f30; + f30 = dComIfG_Bgsp()->GroundCross(&m_ground_check); + if (f30 == -G_CM3D_F_INF) { + f30 = mAcch.GetGroundH(); } - f32 fVar2 = m2DC.y - fVar14; + f31 = m2DC.y - f30; sp1C.set(m2D0.x, fVar15_2, m2D0.z); m_ground_check.SetPos(&sp1C); - f32 fVar15 = dComIfG_Bgsp()->GroundCross(&m_ground_check); - if (fVar15 == -G_CM3D_F_INF) { - fVar15 = mAcch.GetGroundH(); + f32 f1 = dComIfG_Bgsp()->GroundCross(&m_ground_check); + if (f1 == -G_CM3D_F_INF) { + f1 = mAcch.GetGroundH(); } - f32 fVar3 = m2D0.y - fVar15; - if ((fVar2 < fVar3 && fVar2 < 0.0f) || (fVar3 < fVar2 && fVar3 < 0.0f)) { + f32 f3 = m2D0.y - f1; + if ((f31 < f3 && f31 < 0.0f) || (f3 < f31 && f3 < 0.0f)) { if (speed.y < -10.0f) { speed.y *= -0.5f; if (speed.y > 20.0f) { @@ -448,15 +458,15 @@ BOOL daBoko_c::procMove() { } if (m2BB != 0) { - if (fVar2 < fVar3) { - current.pos.y -= fVar2; + if (f31 < f3) { + current.pos.y -= f31; } else { - current.pos.y -= fVar3; + current.pos.y -= f3; } m2BB--; } - sp1C.set(m2D0.x - m2DC.x, fVar15 - fVar14, m2D0.z - m2DC.z); + sp1C.set(m2D0.x - m2DC.x, f1 - f30, m2D0.z - m2DC.z); s16 sVar5 = shape_angle.x - cM_atan2s(-sp1C.y, sp1C.absXZ()); m2C0 = sVar5 * -0.2f; if (m2C0 == 0 && sVar5 != 0) { @@ -489,8 +499,8 @@ BOOL daBoko_c::procMove() { bVar4 = TRUE; } - s32 iVar6 = abs(m2C0); - s32 iVar8 = abs(m2C2); + int iVar6 = abs(m2C0); + int iVar8 = abs(m2C2); if (iVar8 > iVar6) { shape_angle.x += m2C2; } else { @@ -519,7 +529,7 @@ BOOL daBoko_c::procMove() { mAcch.CrrPos(*dComIfG_Bgsp()); setRoomInfo(); - if (mAcch.ChkGroundHit() && fVar14 <= 2.5f) { + if (mAcch.ChkGroundHit() && fVar14_3 <= 2.5f) { if (dComIfG_Bgsp()->ChkMoveBG(mAcch.m_gnd) && fopAcM_GetName(dComIfG_Bgsp()->GetActorPointer(mAcch.m_gnd)) == PROC_TBOX) { if (speedF < 15.0f) { speedF = 15.0f; @@ -527,10 +537,9 @@ BOOL daBoko_c::procMove() { speed.y = 20.0f; } else { cM3dGPla* pcVar10 = dComIfG_Bgsp()->GetTriPla(mAcch.m_gnd); - s16 iVar6 = cM_atan2s(pcVar10->mNormal.x, pcVar10->mNormal.z); - s16 tmp = iVar6 - shape_angle.y; - iVar6 = cM_atan2s(std::sqrtf(SQUARE(pcVar10->mNormal.x) + SQUARE(pcVar10->mNormal.z)) * cM_scos(tmp), pcVar10->mNormal.y); - s16 __x = iVar6 - shape_angle.x; + s16 r0 = cM_atan2s(pcVar10->mNormal.x, pcVar10->mNormal.z) - shape_angle.y; + s16 r30 = cM_atan2s(std::sqrtf(SQUARE(pcVar10->mNormal.x) + SQUARE(pcVar10->mNormal.z)) * cM_scos(r0), pcVar10->mNormal.y); + s16 __x = r30 - shape_angle.x; if (abs(__x) > 0x1000 && m2BB != 0) { speed.y = 15.0f; @@ -545,7 +554,7 @@ BOOL daBoko_c::procMove() { m2BB = 0; } } else { - shape_angle.x = iVar6; + shape_angle.x = r30; shape_angle.z = 0; procWait_init(); } @@ -692,7 +701,7 @@ BOOL daBoko_c::procCarry() { procMove_init(); - s32 i; + int i; for (i = 0; i < 3; i++) { m_ground_check.SetPos(¤t.pos); if (dComIfG_Bgsp()->GroundCross(&m_ground_check) != -G_CM3D_F_INF) { @@ -838,7 +847,7 @@ static BOOL daBoko_createHeap(fopAc_ac_c* i_this) { /* 00002AE8-00002CFC .text createHeap__8daBoko_cFv */ BOOL daBoko_c::createHeap() { - static const s32 model_idx[] = {BOKO_BDL_BOKO, NATA_BDL_BK_NATA, CLUB_BDL_ST_BUKI, TKWN_BDL_TN_KEN1, SPEAR_BDL_MO_YARI, PGSW_BDL_BPG_KEN1}; + static const int model_idx[] = {BOKO_BDL_BOKO, NATA_BDL_BK_NATA, CLUB_BDL_ST_BUKI, TKWN_BDL_TN_KEN1, SPEAR_BDL_MO_YARI, PGSW_BDL_BPG_KEN1}; u32 type = fopAcM_GetParam(this); if (type >= Type_COUNT_e) { @@ -850,7 +859,7 @@ BOOL daBoko_c::createHeap() { J3DModelData* modelData = static_cast(dComIfG_getObjectRes(m_arc_name[type], model_idx[type])); JUT_ASSERT(DEMO_SELECT(1708, 1746), modelData != NULL); - mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000002); + mpModel = mDoExt_J3DModel__create(modelData, 0x80000, type == Type_PGANON_SWORD_e ? 0x11000002 : 0x11000002); if (mpModel == NULL) { return FALSE; } diff --git a/src/d/actor/d_a_bwdg.cpp b/src/d/actor/d_a_bwdg.cpp index 0afd5441a..19b0d9445 100644 --- a/src/d/actor/d_a_bwdg.cpp +++ b/src/d/actor/d_a_bwdg.cpp @@ -67,7 +67,8 @@ void daBwdg_packet_c::draw() { /* 000001C4-00000260 .text daBwdg_Draw__FP10bwdg_class */ static BOOL daBwdg_Draw(bwdg_class* i_this) { g_env_light.settingTevStruct(TEV_TYPE_BG0_FULL, &i_this->current.pos, &i_this->tevStr); - MtxTrans(0.0f, 10.0f, 0.0f, 0); + f32 f1 = 0.0f; + MtxTrans(0.0f, 10.0f + f1, 0.0f, 0); cMtx_concat(j3dSys.getViewMtx(), *calc_mtx, i_this->mBwdgPacket.getMtx()); i_this->mBwdgPacket.setTevStr(&i_this->tevStr); j3dSys.getDrawBuffer(0)->entryImm(&i_this->mBwdgPacket, 0); @@ -138,7 +139,11 @@ static void wave_cont(bwdg_class* i_this, u8 r4) { cXyz* nrmVtx = i_this->mBwdgPacket.getNrm(); posVtx = i_this->mBwdgPacket.getPos(); cXyz sp18(0.0f, 0.0f, 1.0f); +#if VERSION == VERSION_DEMO + cMtx_XrotM(*calc_mtx, -0x4A38); +#else cMtx_XrotS(*calc_mtx, -0x4A38); +#endif cXyz sp0C; MtxPosition(&sp18, &sp0C); @@ -185,7 +190,10 @@ static BOOL daBwdg_IsDelete(bwdg_class* i_this) { /* 00000854-000008B0 .text daBwdg_Delete__FP10bwdg_class */ static BOOL daBwdg_Delete(bwdg_class* i_this) { dComIfG_resDeleteDemo(&i_this->mPhase, "Bwdg"); - if (i_this->heap) { +#if VERSION > VERSION_DEMO + if (i_this->heap) +#endif + { dComIfG_Bgsp()->Release(i_this->mpBgW); } return TRUE; diff --git a/src/d/actor/d_a_cc.cpp b/src/d/actor/d_a_cc.cpp index a0028881f..76b69ccd1 100644 --- a/src/d/actor/d_a_cc.cpp +++ b/src/d/actor/d_a_cc.cpp @@ -23,7 +23,7 @@ static u8 DEMO_COME_START_FLAG; static u8 DEMO_RET_START_FLAG; static u8 DEMO_SHORT_CUT_FLAG; static fopAc_ac_c* target_info[10]; -static s32 target_info_count; +static int target_info_count; /* 00000078-000002AC .text nodeCallBack__FP7J3DNodei */ static BOOL nodeCallBack(J3DNode* node, int calcTiming) { diff --git a/src/d/actor/d_a_demo_item.cpp b/src/d/actor/d_a_demo_item.cpp index 2a42e87cb..99ac20da7 100644 --- a/src/d/actor/d_a_demo_item.cpp +++ b/src/d/actor/d_a_demo_item.cpp @@ -26,7 +26,7 @@ u8 daDitem_c::m_effect_type[0x100] = { 0x03, // dItem_RED_RUPEE_e 0x03, // dItem_PURPLE_RUPEE_e 0x03, // dItem_ORANGE_RUPEE_e - 0x00, // dItem_HEART_PIECE_e + DEMO_SELECT(0x01, 0x00), // dItem_HEART_PIECE_e 0x00, // dItem_HEART_CONTAINER_e 0x04, // dItem_SMALL_MAGIC_e 0x04, // dItem_LARGE_MAGIC_e @@ -34,7 +34,7 @@ u8 daDitem_c::m_effect_type[0x100] = { 0x04, // dItem_BOMB_10_e 0x04, // dItem_BOMB_20_e 0x04, // dItem_BOMB_30_e - 0x03, // dItem_SILVER_RUPEE_e + DEMO_SELECT(0x04, 0x03), // dItem_SILVER_RUPEE_e 0x04, // dItem_ARROW_10_e 0x04, // dItem_ARROW_20_e 0x04, // dItem_ARROW_30_e @@ -80,7 +80,7 @@ u8 daDitem_c::m_effect_type[0x100] = { 0x04, // dItem_MASTER_SWORD_2_e 0x00, // dItem_SHIELD_e 0x00, // dItem_MIRROR_SHIELD_e - 0x00, // dItem_DROPPED_SWORD_e + DEMO_SELECT(0x04, 0x00), // dItem_DROPPED_SWORD_e 0x04, // dItem_MASTER_SWORD_3_e 0x01, // KAKERA_HEART2 0x04, // noentry64 @@ -103,7 +103,7 @@ u8 daDitem_c::m_effect_type[0x100] = { 0x02, // dItem_RED_POTION_e 0x02, // dItem_GREEN_POTION_e 0x02, // dItem_BLUE_POTION_e - 0x00, // dItem_HALF_SOUP_BOTTLE_e + DEMO_SELECT(0x04, 0x00), // dItem_HALF_SOUP_BOTTLE_e 0x00, // dItem_SOUP_BOTTLE_e 0x02, // dItem_WATER_BOTTLE_e 0x02, // dItem_FAIRY_BOTTLE_e @@ -175,10 +175,10 @@ u8 daDitem_c::m_effect_type[0x100] = { 0x02, // dItem_NOTE_TO_MOM_e 0x02, // MAGYS_LETTER 0x02, // MO_LETTER - 0x00, // COTTAGE_PAPER + DEMO_SELECT(0x04, 0x00), // COTTAGE_PAPER 0x02, // KAISEN_PRESENT1 0x02, // KAISEN_PRESENT2 - 0x00, // SALVAGE_ITEM1 + DEMO_SELECT(0x04, 0x00), // SALVAGE_ITEM1 0x04, // SALVAGE_ITEM2 0x04, // SALVAGE_ITEM3 0x04, // XXX_039 diff --git a/src/d/actor/d_a_fganon.cpp b/src/d/actor/d_a_fganon.cpp index c84083c79..545db948a 100644 --- a/src/d/actor/d_a_fganon.cpp +++ b/src/d/actor/d_a_fganon.cpp @@ -2371,9 +2371,6 @@ void* mahou_se_set(void* i_act, void* i_other) { return NULL; } -static u32 jno[2] = {0x7, 0xD}; -static u16 eno[2] = {dPa_name::ID_AK_SN_BPGLEGSMOKE00, dPa_name::ID_AK_SN_BPGARMSMOKE00}; - /* 000086B4-0000924C .text daFganon_Execute__FP12fganon_class */ static BOOL daFganon_Execute(fganon_class* i_this) { fopEn_enemy_c* a_this = &i_this->actor; @@ -2509,9 +2506,11 @@ static BOOL daFganon_Execute(fganon_class* i_this) { for (int i = 0; i < 2; i++) { if ((i_this->mbIsMaterialized != 0) && (i_this->mAction != 22)) { if (i_this->mEmitters1[i] != NULL) { + static u32 jno[2] = {0x7, 0xD}; i_this->mEmitters1[i]->setGlobalRTMatrix(i_this->mpMorf->getModel()->getAnmMtx(jno[i])); } else { + static u16 eno[2] = {dPa_name::ID_AK_SN_BPGLEGSMOKE00, dPa_name::ID_AK_SN_BPGARMSMOKE00}; i_this->mEmitters1[i] = dComIfGp_particle_set(eno[i], &a_this->current.pos, NULL); } } @@ -2732,123 +2731,6 @@ static BOOL useHeapInit(fopAc_ac_c* i_act) { return TRUE; } -static dCcD_SrcCyl cc_cyl_src = { - // dCcD_SrcGObjInf - { - /* Flags */ 0, - /* SrcObjAt Type */ 0, - /* SrcObjAt Atp */ 0, - /* SrcObjAt SPrm */ 0, - /* SrcObjTg Type */ ~(AT_TYPE_UNK8 | AT_TYPE_WATER | AT_TYPE_UNK20000 | AT_TYPE_WIND | AT_TYPE_UNK400000 | AT_TYPE_LIGHT), - /* SrcObjTg SPrm */ cCcD_TgSPrm_Set_e | cCcD_TgSPrm_IsEnemy_e, - /* SrcObjCo SPrm */ cCcD_CoSPrm_Set_e | cCcD_CoSPrm_IsPlayer_e | cCcD_CoSPrm_VsGrpAll_e, - /* SrcGObjAt Se */ 0, - /* SrcGObjAt HitMark */ 0, - /* SrcGObjAt Spl */ 0, - /* SrcGObjAt Mtrl */ 0, - /* SrcGObjAt SPrm */ 0, - /* SrcGObjTg Se */ 0, - /* SrcGObjTg HitMark */ dCcG_TgHitMark_Nrm_e, - /* SrcGObjTg Spl */ 0, - /* SrcGObjTg Mtrl */ 0, - /* SrcGObjTg SPrm */ dCcG_TgSPrm_NoConHit_e, - /* SrcGObjCo SPrm */ 0, - }, - // cM3dGCylS - {{ - /* Center */ {0.0f, -150.0f, 0.0f}, - /* Radius */ 100.0f, - /* Height */ 100.0f, - }}, -}; - -static dCcD_SrcSph wepon_sph_src = { - // dCcD_SrcGObjInf - { - /* Flags */ 0, - /* SrcObjAt Type */ AT_TYPE_UNK8, - /* SrcObjAt Atp */ 0, - /* SrcObjAt SPrm */ cCcD_AtSPrm_Set_e | cCcD_AtSPrm_GrpAll_e, - /* SrcObjTg Type */ 0, - /* SrcObjTg SPrm */ 0, - /* SrcObjCo SPrm */ 0, - /* SrcGObjAt Se */ 0, - /* SrcGObjAt HitMark */ dCcG_AtHitMark_Nrm_e, - /* SrcGObjAt Spl */ dCcG_At_Spl_UNK7, - /* SrcGObjAt Mtrl */ 0, - /* SrcGObjAt SPrm */ dCcG_AtSPrm_NoConHit_e, - /* SrcGObjTg Se */ 0, - /* SrcGObjTg HitMark */ 0, - /* SrcGObjTg Spl */ 0, - /* SrcGObjTg Mtrl */ 0, - /* SrcGObjTg SPrm */ dCcG_TgSPrm_NoConHit_e, - /* SrcGObjCo SPrm */ 0, - }, - // cM3dGSphS - {{ - /* Center */ {0.0f, 0.0f, 0.0f}, - /* Radius */ 200.0f, - }}, -}; - -static dCcD_SrcSph ball_tg_sph_src = { - // dCcD_SrcGObjInf - { - /* Flags */ 0, - /* SrcObjAt Type */ 0, - /* SrcObjAt Atp */ 0, - /* SrcObjAt SPrm */ 0, - /* SrcObjTg Type */ ~(AT_TYPE_WATER | AT_TYPE_UNK20000 | AT_TYPE_WIND | AT_TYPE_UNK400000 | AT_TYPE_LIGHT), - /* SrcObjTg SPrm */ cCcD_TgSPrm_Set_e | cCcD_TgSPrm_IsEnemy_e, - /* SrcObjCo SPrm */ 0, - /* SrcGObjAt Se */ 0, - /* SrcGObjAt HitMark */ 0, - /* SrcGObjAt Spl */ 0, - /* SrcGObjAt Mtrl */ 0, - /* SrcGObjAt SPrm */ 0, - /* SrcGObjTg Se */ 0, - /* SrcGObjTg HitMark */ 0, - /* SrcGObjTg Spl */ 0, - /* SrcGObjTg Mtrl */ 0, - /* SrcGObjTg SPrm */ 0, - /* SrcGObjCo SPrm */ 0, - }, - // cM3dGSphS - {{ - /* Center */ {0.0f, 0.0f, 0.0f}, - /* Radius */ 60.0f, - }}, -}; - -static dCcD_SrcSph ball_at_sph_src = { - // dCcD_SrcGObjInf - { - /* Flags */ 0, - /* SrcObjAt Type */ AT_TYPE_UNK800, - /* SrcObjAt Atp */ 0x2, - /* SrcObjAt SPrm */ cCcD_AtSPrm_Set_e | cCcD_AtSPrm_GrpAll_e, - /* SrcObjTg Type */ 0, - /* SrcObjTg SPrm */ 0, - /* SrcObjCo SPrm */ 0, - /* SrcGObjAt Se */ 0, - /* SrcGObjAt HitMark */ 0, - /* SrcGObjAt Spl */ dCcG_At_Spl_UNKA, - /* SrcGObjAt Mtrl */ 0, - /* SrcGObjAt SPrm */ 0, - /* SrcGObjTg Se */ 0, - /* SrcGObjTg HitMark */ 0, - /* SrcGObjTg Spl */ 0, - /* SrcGObjTg Mtrl */ 0, - /* SrcGObjTg SPrm */ 0, - /* SrcGObjCo SPrm */ 0, - }, - // cM3dGSphS - {{ - /* Center */ {0.0f, 0.0f, 0.0f}, - /* Radius */ 30.0f, - }}, -}; - /* 00009844-00009C70 .text daFganon_Create__FP10fopAc_ac_c */ static cPhs_State daFganon_Create(fopAc_ac_c* a_this) { fganon_class* i_this = (fganon_class*)a_this; @@ -2911,6 +2793,123 @@ static cPhs_State daFganon_Create(fopAc_ac_c* a_this) { i_this->mStts.Init(0xFA, 0xFF, a_this); + static dCcD_SrcCyl cc_cyl_src = { + // dCcD_SrcGObjInf + { + /* Flags */ 0, + /* SrcObjAt Type */ 0, + /* SrcObjAt Atp */ 0, + /* SrcObjAt SPrm */ 0, + /* SrcObjTg Type */ ~(AT_TYPE_UNK8 | AT_TYPE_WATER | AT_TYPE_UNK20000 | AT_TYPE_WIND | AT_TYPE_UNK400000 | AT_TYPE_LIGHT), + /* SrcObjTg SPrm */ cCcD_TgSPrm_Set_e | cCcD_TgSPrm_IsEnemy_e, + /* SrcObjCo SPrm */ cCcD_CoSPrm_Set_e | cCcD_CoSPrm_IsPlayer_e | cCcD_CoSPrm_VsGrpAll_e, + /* SrcGObjAt Se */ 0, + /* SrcGObjAt HitMark */ 0, + /* SrcGObjAt Spl */ 0, + /* SrcGObjAt Mtrl */ 0, + /* SrcGObjAt SPrm */ 0, + /* SrcGObjTg Se */ 0, + /* SrcGObjTg HitMark */ dCcG_TgHitMark_Nrm_e, + /* SrcGObjTg Spl */ 0, + /* SrcGObjTg Mtrl */ 0, + /* SrcGObjTg SPrm */ dCcG_TgSPrm_NoConHit_e, + /* SrcGObjCo SPrm */ 0, + }, + // cM3dGCylS + {{ + /* Center */ {0.0f, -150.0f, 0.0f}, + /* Radius */ 100.0f, + /* Height */ 100.0f, + }}, + }; + + static dCcD_SrcSph wepon_sph_src = { + // dCcD_SrcGObjInf + { + /* Flags */ 0, + /* SrcObjAt Type */ AT_TYPE_UNK8, + /* SrcObjAt Atp */ 0, + /* SrcObjAt SPrm */ cCcD_AtSPrm_Set_e | cCcD_AtSPrm_GrpAll_e, + /* SrcObjTg Type */ 0, + /* SrcObjTg SPrm */ 0, + /* SrcObjCo SPrm */ 0, + /* SrcGObjAt Se */ 0, + /* SrcGObjAt HitMark */ dCcG_AtHitMark_Nrm_e, + /* SrcGObjAt Spl */ dCcG_At_Spl_UNK7, + /* SrcGObjAt Mtrl */ 0, + /* SrcGObjAt SPrm */ dCcG_AtSPrm_NoConHit_e, + /* SrcGObjTg Se */ 0, + /* SrcGObjTg HitMark */ 0, + /* SrcGObjTg Spl */ 0, + /* SrcGObjTg Mtrl */ 0, + /* SrcGObjTg SPrm */ dCcG_TgSPrm_NoConHit_e, + /* SrcGObjCo SPrm */ 0, + }, + // cM3dGSphS + {{ + /* Center */ {0.0f, 0.0f, 0.0f}, + /* Radius */ 200.0f, + }}, + }; + + static dCcD_SrcSph ball_tg_sph_src = { + // dCcD_SrcGObjInf + { + /* Flags */ 0, + /* SrcObjAt Type */ 0, + /* SrcObjAt Atp */ 0, + /* SrcObjAt SPrm */ 0, + /* SrcObjTg Type */ ~(AT_TYPE_WATER | AT_TYPE_UNK20000 | AT_TYPE_WIND | AT_TYPE_UNK400000 | AT_TYPE_LIGHT), + /* SrcObjTg SPrm */ cCcD_TgSPrm_Set_e | cCcD_TgSPrm_IsEnemy_e, + /* SrcObjCo SPrm */ 0, + /* SrcGObjAt Se */ 0, + /* SrcGObjAt HitMark */ 0, + /* SrcGObjAt Spl */ 0, + /* SrcGObjAt Mtrl */ 0, + /* SrcGObjAt SPrm */ 0, + /* SrcGObjTg Se */ 0, + /* SrcGObjTg HitMark */ 0, + /* SrcGObjTg Spl */ 0, + /* SrcGObjTg Mtrl */ 0, + /* SrcGObjTg SPrm */ 0, + /* SrcGObjCo SPrm */ 0, + }, + // cM3dGSphS + {{ + /* Center */ {0.0f, 0.0f, 0.0f}, + /* Radius */ 60.0f, + }}, + }; + + static dCcD_SrcSph ball_at_sph_src = { + // dCcD_SrcGObjInf + { + /* Flags */ 0, + /* SrcObjAt Type */ AT_TYPE_UNK800, + /* SrcObjAt Atp */ 0x2, + /* SrcObjAt SPrm */ cCcD_AtSPrm_Set_e | cCcD_AtSPrm_GrpAll_e, + /* SrcObjTg Type */ 0, + /* SrcObjTg SPrm */ 0, + /* SrcObjCo SPrm */ 0, + /* SrcGObjAt Se */ 0, + /* SrcGObjAt HitMark */ 0, + /* SrcGObjAt Spl */ dCcG_At_Spl_UNKA, + /* SrcGObjAt Mtrl */ 0, + /* SrcGObjAt SPrm */ 0, + /* SrcGObjTg Se */ 0, + /* SrcGObjTg HitMark */ 0, + /* SrcGObjTg Spl */ 0, + /* SrcGObjTg Mtrl */ 0, + /* SrcGObjTg SPrm */ 0, + /* SrcGObjCo SPrm */ 0, + }, + // cM3dGSphS + {{ + /* Center */ {0.0f, 0.0f, 0.0f}, + /* Radius */ 30.0f, + }}, + }; + i_this->mCyl.Set(cc_cyl_src); i_this->mCyl.SetStts(&i_this->mStts); i_this->mCyl.OnTgNoHitMark(); diff --git a/src/d/actor/d_a_fgmahou.cpp b/src/d/actor/d_a_fgmahou.cpp index 9c202b4dd..95466bd2b 100644 --- a/src/d/actor/d_a_fgmahou.cpp +++ b/src/d/actor/d_a_fgmahou.cpp @@ -119,7 +119,9 @@ static void move(fgmahou_class* i_this) { } dComIfGp_particle_set(dPa_name::ID_AK_SN_BPGSMASHDARKSHOT00, &i_this->current.pos, &i_this->home.angle); + #if VERSION > VERSION_DEMO fopAcM_seStartCurrent(i_this, JA_SE_LK_PG_BOMB_STRIKE, 0); + #endif i_this->mState = 5; case 5: @@ -178,16 +180,16 @@ static void move(fgmahou_class* i_this) { i_this->field_0x2D4 += REG0_S(6) + 0xDAC; i_this->field_0x2D6 += REG0_S(7) + 0xCE4; - f32 temp5 = cM_ssin(i_this->field_0x2D4); - f32 temp7 = cM_ssin(i_this->field_0x2D6); - i_this->shape_angle.y = i_this->home.angle.y + (s16)(temp4 * temp5); - i_this->shape_angle.x = i_this->home.angle.x + (s16)(temp4 * temp7 * 0.75f); + s16 temp5 = (s16)(temp4 * cM_ssin(i_this->field_0x2D4)); + s16 temp7 = (s16)(temp4 * cM_ssin(i_this->field_0x2D6) * 0.75f); + i_this->shape_angle.y = i_this->home.angle.y + temp5; + i_this->shape_angle.x = i_this->home.angle.x + temp7; diff2.x = 0.0f; diff2.y = 0.0f; diff2.z = i_this->speedF; - mDoMtx_YrotS(*calc_mtx, i_this->shape_angle.y); - mDoMtx_XrotM(*calc_mtx, i_this->shape_angle.x); + cMtx_YrotS(*calc_mtx, i_this->shape_angle.y); + cMtx_XrotM(*calc_mtx, i_this->shape_angle.x); MtxPosition(&diff2, &i_this->speed); if(temp2 <= 1) { @@ -288,7 +290,7 @@ static BOOL daFgmahou_IsDelete(fgmahou_class* i_this) { /* 00000DE0-00000E3C .text daFgmahou_Delete__FP13fgmahou_class */ static BOOL daFgmahou_Delete(fgmahou_class* i_this) { - dComIfG_resDelete(&i_this->mPhs, "Fganon"); + dComIfG_resDeleteDemo(&i_this->mPhs, "Fganon"); if(i_this->mpEmitter) { i_this->mpEmitter->becomeInvalidEmitter(); @@ -398,10 +400,16 @@ static cPhs_State daFgmahou_Create(fopAc_ac_c* a_this) { fgmahou_class* i_this = static_cast(a_this); +#if VERSION > VERSION_DEMO fopAcM_SetupActor(i_this, fgmahou_class); +#endif cPhs_State phase_state = dComIfG_resLoad(&i_this->mPhs, "Fganon"); if(phase_state == cPhs_COMPLEATE_e) { + #if VERSION == VERSION_DEMO + fopAcM_SetupActor(i_this, fgmahou_class); + #endif + i_this->mOrbNumber = fopAcM_GetParam(i_this) & 0xF; if(!fopAcM_entrySolidHeap(i_this, useHeapInit, 0x19000)) { diff --git a/src/d/actor/d_a_himo3.cpp b/src/d/actor/d_a_himo3.cpp index 23a7a670d..39f3d9a23 100644 --- a/src/d/actor/d_a_himo3.cpp +++ b/src/d/actor/d_a_himo3.cpp @@ -7,7 +7,9 @@ #include "d/actor/d_a_himo3.h" #include "d/actor/d_a_player.h" #include "d/res/res_always.h" +#if VERSION > VERSION_DEMO #include "d/res/res_bgn.h" +#endif #include "d/res/res_link.h" #include "d/res/res_himo3.h" #include "d/d_s_play.h" @@ -48,14 +50,19 @@ static bool hio_set; static himo3HIO_c l_HIO; /* 000000EC-00000C58 .text himo3_control__FP11himo3_classP7himo3_s */ -void himo3_control(himo3_class* i_this, himo3_s* arg1) { +void himo3_control(himo3_class* i_this, himo3_s* r31) { + fopAc_ac_c* actor = &i_this->actor; daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); - s32 i = 1; + int i = 1; cXyz spAC; cXyz spA0; cXyz sp94; - f32 unaff_f28; - himo3_s* pcVar11 = &arg1[1]; + f32 tmp200; + f32 tmpReg; + f32 f28; + f32 f27; + + r31 += 1; if (i_this->m02BE != 0) { s16 target; @@ -75,24 +82,24 @@ void himo3_control(himo3_class* i_this, himo3_s* arg1) { i_this->m15C4 = spAC; } - cXyz sp88 = spAC - i_this->current.pos; + cXyz sp88 = spAC - actor->current.pos; f32 sqrt = sp88.abs(); - s32 iVar8 = sqrt / HIMO3_SCALE; - unaff_f28 = sqrt / HIMO3_SCALE - iVar8; + int iVar8 = sqrt / HIMO3_SCALE; + f28 = sqrt / HIMO3_SCALE - iVar8; if (iVar8 >= i_this->m15C0 - 1) { iVar8 = i_this->m15C0 - 1; } if (iVar8 > 1) { - for (i = 1; i < iVar8; i++, pcVar11++) { - f32 fVar12 = (f32)i / iVar8; - pcVar11->m00.x = i_this->current.pos.x + sp88.x * fVar12; - pcVar11->m00.y = i_this->current.pos.y + sp88.y * fVar12; - pcVar11->m00.z = i_this->current.pos.z + sp88.z * fVar12; + for (i = 1; i < iVar8; i++, r31++) { + f32 fVar12 = (f32)i / (iVar8 - 1); + r31->m00.x = actor->current.pos.x + sp88.x * fVar12; + r31->m00.y = actor->current.pos.y + sp88.y * fVar12; + r31->m00.z = actor->current.pos.z + sp88.z * fVar12; } } - cLib_addCalcAngleS2(&i_this->current.angle.y, target, 2, 0x2000); + cLib_addCalcAngleS2(&actor->current.angle.y, target, 2, 0x2000); spA0 = spAC - i_this->m15C4; cMtx_YrotS(*calc_mtx, -target); @@ -101,9 +108,12 @@ void himo3_control(himo3_class* i_this, himo3_s* arg1) { f32 tmp2 = DEMO_SELECT(REG0_F(6) + 10.0f, 10.0f); cLib_addCalc2(&i_this->m15D0, tmp1, 0.1f, tmp2 * i_this->m15E4); - tmp1 = sp94.x * DEMO_SELECT(REG0_F(5) + -10.0f, -10.0f); + f32 f1 = sp94.x * DEMO_SELECT(REG0_F(5) + -10.0f, -10.0f); tmp2 = DEMO_SELECT(REG0_F(6) + 10.0f, 10.0f); - cLib_addCalc2(&i_this->m15D8, tmp1, 0.1f, tmp2 * i_this->m15E4); + cLib_addCalc2(&i_this->m15D8, f1, 0.1f, tmp2 * i_this->m15E4); + // TODO: fakematch + f32 fake1 = tmp1; + f32 fake2 = f1; if (std::fabsf(sp94.z) > 1.0f || std::fabsf(sp94.x) > 1.0f) { cLib_addCalc2(&i_this->m15E4, 1.0f, 1.0f, 0.05f); @@ -142,7 +152,7 @@ void himo3_control(himo3_class* i_this, himo3_s* arg1) { i_this->m15C4.y = -23535.0f; } - cMtx_YrotS(*calc_mtx, i_this->current.angle.y); + cMtx_YrotS(*calc_mtx, actor->current.angle.y); spA0.x = i_this->m15D8; spA0.y = 0.0f; spA0.z = i_this->m15D0; @@ -179,62 +189,62 @@ void himo3_control(himo3_class* i_this, himo3_s* arg1) { cXyz sp64; MtxPosition(&spA0, &sp64); sp64 += sp70; - f32 tmpReg = DEMO_SELECT(REG0_F(1), 0.0f); + tmpReg = DEMO_SELECT(REG0_F(1), 0.0f); spA0.x = 0.0f; spA0.y = 0.0f; - f32 tmp200 = DEMO_SELECT(REG0_F(8) + -200.0f, -200.0f); + tmp200 = DEMO_SELECT(REG0_F(8) + -200.0f, -200.0f); - s32 j = 0; + int j = 0; - f32 fVar12; if ((i_this->m02BE == 0) && (i_this->m02BC == 0)) { - fVar12 = DEMO_SELECT(REG0_F(2) + 30.0f + 20.0f - 20.0f, 30.0f); + f27 = DEMO_SELECT(REG0_F(2) + 30.0f + 20.0f - 20.0f, 30.0f); } else { - fVar12 = -200.0f; + f27 = -200.0f; } - u8 bVar4 = 0; s16 unaff_r24; s16 unaff_r23; + u8 bVar4 = 0; - for (; i < i_this->m15C0; i++, pcVar11++) { + for (; i < i_this->m15C0; i++, r31++) { cXyz sp60; sp60.z = 0.0f; sp60.y = 0.0f; sp60.x = 0.0f; - f32 fVar1 = pcVar11->m00.x - pcVar11[-1].m00.x + pcVar11->m0C.x + sp7C.x + sp64.x + sp60.x; - f32 fVar2 = pcVar11->m00.y - pcVar11[-1].m00.y + tmp200 + pcVar11->m0C.y + sp60.y; - f32 fVar3 = pcVar11->m00.z - pcVar11[-1].m00.z + pcVar11->m0C.z + sp7C.z + sp64.z + sp60.z; + Vec f29_f26_f25; + f29_f26_f25.x = r31->m00.x - r31[-1].m00.x + r31->m0C.x + sp7C.x + sp64.x + sp60.x; + f29_f26_f25.y = r31->m00.y - r31[-1].m00.y + tmp200 + r31->m0C.y + sp60.y; + f29_f26_f25.z = r31->m00.z - r31[-1].m00.z + r31->m0C.z + sp7C.z + sp64.z + sp60.z; - unaff_r24 = -cM_atan2s(fVar2, fVar3); - unaff_r23 = (s16)cM_atan2s(fVar1 + 0.0f, std::sqrtf(SQUARE(fVar2) + SQUARE(fVar3))); + unaff_r24 = -cM_atan2s(f29_f26_f25.y, f29_f26_f25.z); + unaff_r23 = (s16)cM_atan2s(f29_f26_f25.x + 0.0f, std::sqrtf(SQUARE(f29_f26_f25.y) + SQUARE(f29_f26_f25.z))); cMtx_XrotS(*calc_mtx, unaff_r24); cMtx_YrotM(*calc_mtx, unaff_r23); spA0.z = HIMO3_SCALE; if (bVar4 == 0) { - spA0.z = HIMO3_SCALE - unaff_f28 * HIMO3_SCALE; + spA0.z -= f28 * HIMO3_SCALE; bVar4++; } MtxPosition(&spA0, &sp94); - pcVar11->m0C = pcVar11->m00; - pcVar11->m00 = pcVar11[-1].m00 + sp94; - pcVar11->m0C.x = (pcVar11->m00.x - pcVar11->m0C.x) * tmpReg; - pcVar11->m0C.y = (pcVar11->m00.y - pcVar11->m0C.y) * tmpReg; - pcVar11->m0C.z = (pcVar11->m00.z - pcVar11->m0C.z) * tmpReg; + r31->m0C = r31->m00; + r31->m00 = r31[-1].m00 + sp94; + r31->m0C.x = (r31->m00.x - r31->m0C.x) * tmpReg; + r31->m0C.y = (r31->m00.y - r31->m0C.y) * tmpReg; + r31->m0C.z = (r31->m00.z - r31->m0C.z) * tmpReg; if ((i_this->m0298 == 0xf) && (i == i_this->m15C0 - 1)) { if (i_this->m02BE == 0) { - i_this->mCyl.SetC(pcVar11->m00); + i_this->mCyl.SetC(r31->m00); } else { cXyz sp4C(-10000.0f, -10000.0f, 0.0f); i_this->mCyl.SetC(sp4C); } dComIfG_Ccsp()->Set(&i_this->mCyl); } else if (((i + i_this->m02BA * 3 & 0xf) == 0) && (j < 5)) { - i_this->mSphs[j].SetR(fVar12); - i_this->mSphs[j].SetC(pcVar11->m00); + i_this->mSphs[j].SetR(f27); + i_this->mSphs[j].SetC(r31->m00); dComIfG_Ccsp()->Set(&i_this->mSphs[j]); j++; } @@ -242,7 +252,7 @@ void himo3_control(himo3_class* i_this, himo3_s* arg1) { cXyz* pcVar10 = i_this->mLineMat.getPos(0); himo3_s* phVar11 = i_this->m02C0; - for (s32 i = 0; i < i_this->m15C0; i++, phVar11++, pcVar10++) { + for (int i = 0; i < i_this->m15C0; i++, phVar11++, pcVar10++) { if (i_this->m15E0 >= 0.999f) { *pcVar10 = phVar11->m00; } else { @@ -272,7 +282,7 @@ void himo3_control(himo3_class* i_this, himo3_s* arg1) { void ga_draw(himo3_class* i_this) { h3_ga_s* ga = &i_this->m2114[0]; - for (s32 i = 0; i < ARRAY_SSIZE(i_this->m2114); i++, ga++) { + for (int i = 0; i < ARRAY_SSIZE(i_this->m2114); i++, ga++) { if (ga->m2E == 1) { MtxTrans(ga->mPos.x, ga->mPos.y, ga->mPos.z, 0); cMtx_YrotM(*calc_mtx, ga->m1E); @@ -287,7 +297,8 @@ void ga_draw(himo3_class* i_this) { /* 00000D1C-00000EF8 .text daHimo3_Draw__FP11himo3_class */ static BOOL daHimo3_Draw(himo3_class* i_this) { - g_env_light.settingTevStruct(TEV_TYPE_BG0, &i_this->current.pos, &i_this->tevStr); + fopAc_ac_c* actor = &i_this->actor; + g_env_light.settingTevStruct(TEV_TYPE_BG0, &actor->current.pos, &actor->tevStr); f32 fVar1; if (i_this->m0298 == 0xf) { fVar1 = DEMO_SELECT(REG0_F(0) + 4.625f, 4.625f); @@ -296,16 +307,16 @@ static BOOL daHimo3_Draw(himo3_class* i_this) { } #ifdef __MWERKS__ - i_this->mLineMat.update(i_this->m15C0, fVar1, (GXColor){200, 150, 50, 255}, 0, &i_this->tevStr); + i_this->mLineMat.update(i_this->m15C0, fVar1, (GXColor){200, 150, 50, 255}, 0, &actor->tevStr); #else GXColor color = (GXColor){200, 150, 50, 255}; - i_this->mLineMat.update(i_this->m15C0, fVar1, color, 0, &i_this->tevStr); + i_this->mLineMat.update(i_this->m15C0, fVar1, color, 0, &actor->tevStr); #endif dComIfGd_set3DlineMat(&i_this->mLineMat); if (i_this->m0298 != 0xf) { J3DModel* model = i_this->mpModel; - g_env_light.setLightTevColorType(model, &i_this->tevStr); + g_env_light.setLightTevColorType(model, &actor->tevStr); mDoExt_modelUpdateDL(model); if (i_this->m0298 == 0) { @@ -367,6 +378,7 @@ void himo3_class::setActorHang(cXyz arg1, short arg2) { /* 00001128-000014F8 .text path_move__FP11himo3_class */ void path_move(himo3_class* i_this) { + fopAc_ac_c* actor = &i_this->actor; cXyz sp28; cXyz sp10; dPnt* pnt; @@ -382,8 +394,8 @@ void path_move(himo3_class* i_this) { i_this->m029C = i_this->ppd->m_num - 2; } - if ((s32)i_this->ppd->m_nextID != 0xFFFF) { - i_this->ppd = dPath_GetRoomPath(i_this->ppd->m_nextID, fopAcM_GetRoomNo(i_this)); + if ((int)i_this->ppd->m_nextID != 0xFFFF) { + i_this->ppd = dPath_GetRoomPath(i_this->ppd->m_nextID, fopAcM_GetRoomNo(actor)); JUT_ASSERT(DEMO_SELECT(890, 891), i_this->ppd != NULL); } } else if (i_this->m029C < 0) { @@ -396,28 +408,28 @@ void path_move(himo3_class* i_this) { i_this->m02A8 = pnt->m_position; case 1: - sp10 = i_this->m02A8 - i_this->current.pos; + sp10 = i_this->m02A8 - actor->current.pos; if (i_this->m02BE == 0) { u8 uStack_14 = i_this->ppd->m_points[i_this->m029C].mArg3; if (uStack_14 != 0 && uStack_14 != 0xff) { - cLib_addCalc2(&i_this->speedF, uStack_14, 1.0f, uStack_14 * 0.1f); + cLib_addCalc2(&actor->speedF, uStack_14, 1.0f, uStack_14 * 0.1f); } else { uStack_14 = i_this->m0299; - cLib_addCalc2(&i_this->speedF, uStack_14, 1.0f, uStack_14 * 0.1f); + cLib_addCalc2(&actor->speedF, uStack_14, 1.0f, uStack_14 * 0.1f); } } else { - cLib_addCalc0(&i_this->speedF, 1.0f, 1.0f); + cLib_addCalc0(&actor->speedF, 1.0f, 1.0f); } sp28.x = 0.0f; sp28.y = 0.0f; - sp28.z = i_this->speedF; + sp28.z = actor->speedF; cMtx_YrotS(*calc_mtx, cM_atan2s(sp10.x, sp10.z)); f32 fVar8 = std::sqrtf(SQUARE(sp10.x) + SQUARE(sp10.z)); cMtx_XrotM(*calc_mtx, -cM_atan2s(sp10.y, fVar8)); - MtxPosition(&sp28, &i_this->speed); - i_this->current.pos += i_this->speed; - if (sp10.abs() < i_this->speedF * 2.0f) { + MtxPosition(&sp28, &actor->speed); + actor->current.pos += actor->speed; + if (sp10.abs() < actor->speedF * 2.0f) { i_this->m02A4 = 0; } break; @@ -426,6 +438,7 @@ void path_move(himo3_class* i_this) { /* 000014F8-00001A3C .text daHimo3_Execute__FP11himo3_class */ static BOOL daHimo3_Execute(himo3_class* i_this) { + fopAc_ac_c* actor = &i_this->actor; fopAc_ac_c* player = dComIfGp_getPlayer(0); if (i_this->m02BC != 0) { @@ -437,7 +450,7 @@ static BOOL daHimo3_Execute(himo3_class* i_this) { } i_this->m02BA++; - i_this->m02C0[0].m00 = i_this->current.pos; + i_this->m02C0[0].m00 = actor->current.pos; himo3_control(i_this, i_this->m02C0); if (i_this->m0298 != 0xf) { @@ -471,7 +484,7 @@ static BOOL daHimo3_Execute(himo3_class* i_this) { dComIfG_Ccsp()->Set(&i_this->mSph); if (i_this->m0298 == 0) { - for (s32 i = 0; i < ARRAY_SSIZE(i_this->m02B4); i++) { + for (int i = 0; i < ARRAY_SSIZE(i_this->m02B4); i++) { if (i_this->m02B4[i]) { i_this->m02B4[i]--; } @@ -509,43 +522,46 @@ static BOOL daHimo3_Execute(himo3_class* i_this) { JPABaseEmitter* pJVar6 = i_this->m20FC.getEmitter(); #endif if (pJVar6 != NULL) { - f32 fVar3 = DEMO_SELECT(REG0_F(3) + -0.03f, -0.03f); - f32 fVar1 = (i_this->m1624.x - i_this->m1630.x) * fVar3; - if (fVar1 > 1.0f) { - fVar1 = 1.0f; - } else if (fVar1 < -1.0f) { - fVar1 = -1.0f; + Vec vec1; + f32 f3; + f3 = DEMO_SELECT(REG0_F(3) + -0.03f, -0.03f); + vec1.x = f3 * (i_this->m1624.x - i_this->m1630.x); + if (vec1.x > 1.0f) { + vec1.x = 1.0f; + } else if (vec1.x < -1.0f) { + vec1.x = -1.0f; } - f32 fVar4 = fVar3 * ((i_this->m1624).z - (i_this->m1630).z); - if (fVar4 > 1.0f) { - fVar4 = 1.0f; - } else if (fVar4 < -1.0f) { - fVar4 = -1.0f; + vec1.z = f3 * (i_this->m1624.z - i_this->m1630.z); + if (vec1.z > 1.0f) { + vec1.z = 1.0f; + } else if (vec1.z < -1.0f) { + vec1.z = -1.0f; } - JGeometry::TVec3 s; - s.x = fVar1; - s.y = 0.1f; - s.z = fVar4; - pJVar6->setDirection(s); + JGeometry::TVec3 dir; + dir.x = vec1.x; + dir.y = 0.1f; + dir.z = vec1.z; + pJVar6->setDirection(dir); - f32 tmp = 1.0f; - f32 sqrt = std::sqrtf(SQUARE(fVar1) + SQUARE(fVar4)); - f32 sqrt2 = 1.0f + sqrt * DEMO_SELECT(REG0_F(12) + 2.0f, 2.0f); - if (sqrt2 > DEMO_SELECT(REG0_F(13) + 4.0f, 4.0f)) { - sqrt2 = DEMO_SELECT(REG0_F(13) + 4.0f, 4.0f); + Vec vec2; + vec2.x = 1.0f; + vec2.y = 1.0f + std::sqrtf(SQUARE(vec1.x) + SQUARE(vec1.z)) * DEMO_SELECT(REG0_F(12) + 2.0f, 2.0f); + f32 f0 = DEMO_SELECT(REG0_F(13) + 4.0f, 4.0f); + if (vec2.y > f0) { + vec2.y = f0; } - JGeometry::TVec3 s2; - s2.x = tmp; - s2.y = sqrt2; - s2.z = tmp; + JGeometry::TVec3 scale; + scale.x = vec2.x; + scale.y = vec2.y; + scale.z = vec2.x; #if VERSION == VERSION_DEMO pJVar6 = i_this->demo_m20FC; #endif - pJVar6->setGlobalParticleScale(s2); + pJVar6->setGlobalParticleScale(scale); cLib_addCalc2(&i_this->m1620, cM_rndF(0.2f) + 1.0f, 0.5f, 0.02f); } else { i_this->m1620 = 0.0f; @@ -562,7 +578,9 @@ static BOOL daHimo3_Execute(himo3_class* i_this) { ga_move(i_this); } } + i_this->m1630 = i_this->m1624; + return TRUE; } @@ -596,7 +614,8 @@ static BOOL daHimo3_Delete(himo3_class* i_this) { /* 00001AE0-00001DD4 .text useHeapInit__FP11himo3_class */ cPhs_State useHeapInit(himo3_class* i_this) { - static s32 hook_bmd[] = {HIMO3_BMD_SLAMP_00, LINK_BDL_ROPEEND, HIMO3_BMD_SLAMP_00, HIMO3_BMD_SLAMP_00, HIMO3_BMD_SLAMP_00}; + fopAc_ac_c* actor = &i_this->actor; + static int hook_bmd[] = {HIMO3_BMD_SLAMP_00, LINK_BDL_ROPEEND, HIMO3_BMD_SLAMP_00, HIMO3_BMD_SLAMP_00, HIMO3_BMD_SLAMP_00}; #if VERSION == VERSION_DEMO if (!i_this->mLineMat.init(1, 200, (ResTIMG*)dComIfG_getObjectRes("Always", i_this->m0298 == 0xf ? ALWAYS_BTI_TXM_ROPE1 : ALWAYS_BTI_ROPE), 0)) { @@ -633,7 +652,7 @@ cPhs_State useHeapInit(himo3_class* i_this) { JUT_ASSERT(DEMO_SELECT(1264, 1298), modelData != NULL); s32 tmp = 0; - for (s32 i = 0; i < ARRAY_SSIZE(i_this->m2114); i++) { + for (int i = 0; i < ARRAY_SSIZE(i_this->m2114); i++) { i_this->m2114[i].mpModel = mDoExt_J3DModel__create(modelData, 0, 0x11020203); if (i_this->m2114[i].mpModel == NULL) { return cPhs_INIT_e; @@ -641,7 +660,7 @@ cPhs_State useHeapInit(himo3_class* i_this) { if (tmp == 0 || cM_rndF(1.0f) < 0.5f) { i_this->m2114[i].m2E = true; - i_this->m2114[i].mPos = i_this->current.pos; + i_this->m2114[i].mPos = actor->current.pos; i_this->m2114[i].m24 = cM_rndF(0.3f) + 0.3f; i_this->m2114[i].m2C = cM_rndF(30000.0f); } @@ -753,7 +772,7 @@ static cPhs_State daHimo3_Create(fopAc_ac_c* a_this) { i_this->m0298 = 0; } - if (fopAcM_createHeap(i_this, 0xa220, 0) == 0) { + if (fopAcM_createHeap(a_this, 0xa220, 0) == 0) { return cPhs_ERROR_e; } @@ -792,20 +811,20 @@ static cPhs_State daHimo3_Create(fopAc_ac_c* a_this) { } i_this->m15E0 = 1.0f; - i_this->mStts.Init(0xff, 0xff, i_this); + i_this->mStts.Init(0xff, 0xff, a_this); if (i_this->m0298 == 0xf) { i_this->mCyl.Set(cc_cyl_src); i_this->mCyl.SetStts(&i_this->mStts); } else { - for (s32 i = 0; i < ARRAY_SSIZE(i_this->mSphs); i++) { + for (int i = 0; i < ARRAY_SSIZE(i_this->mSphs); i++) { i_this->mSphs[i].Set(sph_src); i_this->mSphs[i].SetStts(&i_this->mStts); } i_this->mSph.Set(sph2_src); i_this->mSph.SetStts(&i_this->mStts); - i_this->mAcch.Set(&i_this->m1624, &i_this->m1630, i_this, 1, &i_this->mAcchCir, fopAcM_GetSpeed_p(i_this)); + i_this->mAcch.Set(&i_this->m1624, &i_this->m1630, a_this, 1, &i_this->mAcchCir, fopAcM_GetSpeed_p(a_this)); if (i_this->m0298 == 0) { i_this->mAcchCir.SetWall(40.0f, 50.0f); @@ -824,7 +843,7 @@ static cPhs_State daHimo3_Create(fopAc_ac_c* a_this) { l_HIO.mNo = mDoHIO_createChild("ぶら下がりロープ", &l_HIO); } - for (s32 i = 0; i < 10; i++) { + for (int i = 0; i < 10; i++) { daHimo3_Execute(i_this); } } diff --git a/src/d/actor/d_a_hys.cpp b/src/d/actor/d_a_hys.cpp index 302400ba5..f3adc409c 100644 --- a/src/d/actor/d_a_hys.cpp +++ b/src/d/actor/d_a_hys.cpp @@ -53,14 +53,14 @@ static dCcD_SrcSph l_sph_src = { /* 00000078-000000B8 .text Delete__7daHys_cFv */ BOOL daHys_c::Delete() { - dComIfG_resDelete(&mPhs, m_arcname[mType]); + dComIfG_resDeleteDemo(&mPhs, m_arcname[mType]); return TRUE; } /* 000000B8-00000250 .text CreateHeap__7daHys_cFv */ BOOL daHys_c::CreateHeap() { J3DModelData* modelData = (J3DModelData *)dComIfG_getObjectRes(m_arcname[mType], m_bdlidx[mType]); - JUT_ASSERT(0x106, modelData != NULL); + JUT_ASSERT(DEMO_SELECT(258, 262), modelData != NULL); mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11020022); if (mpModel == NULL) { @@ -68,7 +68,7 @@ BOOL daHys_c::CreateHeap() { } J3DAnmTexPattern* pbtp = (J3DAnmTexPattern *)dComIfG_getObjectRes(m_arcname[mType], m_btpidx[mType]); - JUT_ASSERT(0x114, pbtp != NULL); + JUT_ASSERT(DEMO_SELECT(272, 276), pbtp != NULL); if (!mBtpAnm.init(modelData, pbtp, FALSE, J3DFrameCtrl::EMode_NONE)) { return FALSE; diff --git a/src/d/actor/d_a_kita.cpp b/src/d/actor/d_a_kita.cpp index ceb6b09c4..81da4ef63 100644 --- a/src/d/actor/d_a_kita.cpp +++ b/src/d/actor/d_a_kita.cpp @@ -25,7 +25,7 @@ void ride_call_back(dBgW* bgw, fopAc_ac_c* i_ac, fopAc_ac_c* i_pt) { cXyz delta_pos, local_44, local_50; if (!pActor->field_29A || (pActor->field_360 != 0)) { - mDoMtx_YrotS(*calc_mtx, -pActor->current.angle.y); + cMtx_YrotS(*calc_mtx, -pActor->current.angle.y); delta_pos = i_pt->current.pos - pActor->current.pos; MtxPosition(&delta_pos,&local_44); delta_pos = i_pt->old.pos - pActor->current.pos; @@ -33,8 +33,8 @@ void ride_call_back(dBgW* bgw, fopAc_ac_c* i_ac, fopAc_ac_c* i_pt) { if (fopAcM_GetName(i_pt) == PROC_PLAYER) { pActor->mExecuteCount = 10; } - short zAngle_target = -local_44.x * ((REG0_F(0) + 10.0f) / pActor->scale.x); - short xAngle_target = local_44.z * ((REG0_F(0) + 10.0f) / pActor->scale.z); + s16 xAngle_target = local_44.z * ((REG0_F(0) + 10.0f) / pActor->scale.z); + s16 zAngle_target = -local_44.x * ((REG0_F(0) + 10.0f) / pActor->scale.x); cLib_addCalcAngleS2(&pActor->current.angle.x,xAngle_target,10,0x800); cLib_addCalcAngleS2(&pActor->current.angle.z,zAngle_target,10,0x800); @@ -44,7 +44,7 @@ void ride_call_back(dBgW* bgw, fopAc_ac_c* i_ac, fopAc_ac_c* i_pt) { f32 min_val_z = (REG0_F(4) + 50.0f) * std::abs(local_44.x - local_50.x); if(pActor->field_2BC.z < min_val_z) pActor->field_2BC.z = min_val_z; - float fVar1 = (REG0_F(8) + 5.0f) * std::abs(local_44.x - local_50.x); + f32 fVar1 = (REG0_F(8) + 5.0f) * std::abs(local_44.x - local_50.x); if (fVar1 > 10.0f && pActor->field_2B0.x < fVar1) { cLib_addCalc2(&pActor->field_2B0.x,fVar1,1.0,REG0_F(7) + 1.2f); } @@ -70,9 +70,9 @@ static BOOL daKita_Draw(kita_class* i_this) { void kita_move(kita_class* i_this) { fopAc_ac_c* actor = static_cast(i_this); static u8 himo_off_check[4] = {1,2,4, 8}; - static short himo_off_ya[16] = {1, 0xA000, 0x6000, 0x8000, 0xE000, 0xC000, 0xE000, 0xA000, 0x2000, 0x2000, 0x4000, 0x6000, 0, 0xE000, 0x2000, 1}; - static short himo_off_xa[16] = {0, 0xF000, 0xF000, 0xC800, 0xF000, 0xC800, 0, 0xC000, 0xF000, 0, 0xC800, 0xC000, 0xC800, 0xC000, 0xC000, 0}; - static short himo_off_yp[16] = {0, 0x96, 0x96, 0x190, 0x96, 0x190, 0x190,0x1F4, 0x96, 0x190, 0x190, 0x1F4, 0x190, 0x1F4, 0x1F4, 0}; + static s16 himo_off_ya[16] = {1, 0xA000, 0x6000, 0x8000, 0xE000, 0xC000, 0xE000, 0xA000, 0x2000, 0x2000, 0x4000, 0x6000, 0, 0xE000, 0x2000, 1}; + static s16 himo_off_xa[16] = {0, 0xF000, 0xF000, 0xC800, 0xF000, 0xC800, 0, 0xC000, 0xF000, 0, 0xC800, 0xC000, 0xC800, 0xC000, 0xC000, 0}; + static s16 himo_off_yp[16] = {0, 0x96, 0x96, 0x190, 0x96, 0x190, 0x190,0x1F4, 0x96, 0x190, 0x190, 0x1F4, 0x190, 0x1F4, 0x1F4, 0}; daPy_py_c* player_actor = daPy_getPlayerActorClass(); i_this->mMoveCounter++; @@ -96,7 +96,7 @@ void kita_move(kita_class* i_this) { s16 xa_offset, ya_offset; ya_offset = himo_off_ya[mask]; xa_offset = himo_off_xa[mask]; - cLib_addCalc2(&i_this->mHeight, REG0_F(4) + (-static_cast(himo_off_yp[mask]) * 0.3f), 0.05, i_this->field_320 * 250.0f); + cLib_addCalc2(&i_this->mHeight, REG0_F(4) + (-(f32)(himo_off_yp[mask]) * 0.3f), 0.05, i_this->field_320 * 250.0f); if(mask == 0b1111){ i_this->field_29A = 1; @@ -122,7 +122,7 @@ void kita_move(kita_class* i_this) { } actor->health = 0; } - short maxSpeed = i_this->field_320 * 10000.0f; + s16 maxSpeed = i_this->field_320 * 10000.0f; cLib_addCalcAngleS2(&i_this->mRotX, xa_offset, 16, maxSpeed); if(xa_offset != 0) cLib_addCalcAngleS2(&i_this->mRotY, ya_offset, 4, maxSpeed * 2); cLib_addCalc2(&i_this->field_320, 1.0, 1.0, REG0_F(14) + 0.001f); @@ -151,14 +151,14 @@ void kita_move(kita_class* i_this) { if(i_this->mExecuteCount != 0){ s16 angleY_kita_player = fopAcM_searchPlayerAngleY(actor) - player_actor->shape_angle.y; i_this->field_36C = (REG0_F(2) + -6.0f) * JMASCos(angleY_kita_player); - float fVar3 = fopAcM_searchPlayerDistance(actor) * 0.003f; + f32 fVar3 = fopAcM_searchPlayerDistance(actor) * 0.003f; if(fVar3 > 1.0f) fVar3 = 1.0f; i_this->field_370 = (REG0_F(3) + 200.0f) * JMASSin(angleY_kita_player) * fVar3; i_this->mPlayerAngle = fopAcM_searchPlayerAngleY(actor); i_this->field_374 = 20; } else { - short angle = fopAcM_searchPlayerAngleY(actor) - player_actor->shape_angle.y; + s16 angle = fopAcM_searchPlayerAngleY(actor) - player_actor->shape_angle.y; i_this->field_36C = (REG0_F(12) + 6.0f) * JMASCos(angle); i_this->field_370 = cM_rndFX(100.0); i_this->mPlayerAngle = fopAcM_searchPlayerAngleY(actor); @@ -166,14 +166,14 @@ void kita_move(kita_class* i_this) { } fopAcM_seStartCurrent(actor, JA_SE_LK_FLIFT_GO_WATER, 0); } - mDoMtx_YrotS(*calc_mtx, i_this->mPlayerAngle); + cMtx_YrotS(*calc_mtx, i_this->mPlayerAngle); cXyz pos_offset2, pos_offset; pos_offset2.x = 0.0f; pos_offset2.y = 0.0f; pos_offset2.z = i_this->field_364 * 2.0f; MtxPosition(&pos_offset2, &pos_offset); i_this->current.pos += pos_offset; - i_this->current.angle.y += static_cast(i_this->mAngleYSpeed); + i_this->current.angle.y += (s16)(i_this->mAngleYSpeed); if(i_this->field_374 != 0){ i_this->field_374--; cLib_addCalc2(&i_this->field_364, i_this->field_36C, 1.0, REG0_F(5) + 0.3f); @@ -192,8 +192,8 @@ void kita_move(kita_class* i_this) { cLib_addCalcAngleS2(&actor->current.angle.z, 0, 10, 0x300); cLib_addCalcAngleS2(&i_this->mRotX, 0, 4, 0x200); - float fVar4; - short local29A; + f32 fVar4; + s16 local29A; if(i_this->field_360 == 2){ fVar4 = 1.0; local29A = 800; @@ -240,9 +240,14 @@ void kita_move(kita_class* i_this) { } } +#if VERSION == VERSION_DEMO +void himo_create(kita_class* i_this) +#else /* 00001894-000019F8 .text himo_create__FP10kita_class */ -cPhs_State himo_create(kita_class* i_this) { - static short yad[4] = {0x2000, 0xE000, 0x6000, 0xA000}; +BOOL himo_create(kita_class* i_this) +#endif +{ + static s16 yad[4] = {0x2000, 0xE000, 0x6000, 0xA000}; int shand_count = 0; fopAcM_prm_class *param; shand_class* shand_i; @@ -274,44 +279,58 @@ cPhs_State himo_create(kita_class* i_this) { } } - return (shand_count < 4); +#if VERSION > VERSION_DEMO + if (shand_count < 4) { + return TRUE; + } + return FALSE; +#endif } /* 000019F8-00001CB8 .text daKita_Execute__FP10kita_class */ static BOOL daKita_Execute(kita_class* i_this) { - static float xd[4] = {130, -130, 130, -130}; - static float zd[4] = {130, 130, -130, -130}; + fopAc_ac_c* actor = i_this; + + static f32 xd[4] = {130.0f, -130.0f, 130.0f, -130.0f}; + static f32 zd[4] = {130.0f, 130.0f, -130.0f, -130.0f}; if(i_this->mExecuteCount != 0) i_this->mExecuteCount--; kita_move(i_this); - MtxTrans(i_this->current.pos.x, i_this->current.pos.y, i_this->current.pos.z, false); - mDoMtx_YrotM(*calc_mtx, i_this->shape_angle.y); - mDoMtx_YrotM(*calc_mtx, i_this->mRotY); + MtxTrans(actor->current.pos.x, actor->current.pos.y, actor->current.pos.z, false); + cMtx_YrotM(*calc_mtx, actor->shape_angle.y); + cMtx_YrotM(*calc_mtx, i_this->mRotY); MtxTrans(0.0f, 0.0f, (REG0_F(11) + -150.0f) * JMASSin(i_this->mRotX), true); - mDoMtx_XrotM(*calc_mtx, i_this->mRotX); - mDoMtx_YrotM(*calc_mtx, -i_this->mRotY); - mDoMtx_XrotM(*calc_mtx, i_this->shape_angle.x); - mDoMtx_ZrotM(*calc_mtx, i_this->shape_angle.z); + cMtx_XrotM(*calc_mtx, i_this->mRotX); + cMtx_YrotM(*calc_mtx, -i_this->mRotY); + cMtx_XrotM(*calc_mtx, actor->shape_angle.x); + cMtx_ZrotM(*calc_mtx, actor->shape_angle.z); i_this->mModel->setBaseTRMtx(*calc_mtx); cXyz local48[1]; for(int i = 0; i < 4; i++){ MtxPush(); - local48->x = i_this->scale.x * xd[i]; + local48->x = actor->scale.x * xd[i]; local48->y = REG0_F(5) + -15.0f; - local48->z = i_this->scale.z * zd[i]; + local48->z = actor->scale.z * zd[i]; MtxPosition(local48, &i_this->field_2E8[i]); MtxPull(); } - mDoMtx_copy(*calc_mtx, i_this->mBgwMtx); + cMtx_copy(*calc_mtx, i_this->mBgwMtx); i_this->pm_bgw->Move(); + +#if VERSION == VERSION_DEMO + if (i_this->field_2A1 != 1) { + himo_create(i_this); + } +#endif + if(i_this->field_360 == 2){ if(i_this->mBaseEmitter == NULL){ - i_this->mBaseEmitter = dComIfGp_particle_set(dPa_name::ID_AK_SN_FFHAMON00, &i_this->current.pos); + i_this->mBaseEmitter = dComIfGp_particle_set(dPa_name::ID_AK_SN_FFHAMON00, &actor->current.pos); } else { - i_this->mBaseEmitter->setGlobalTranslation(i_this->current.pos.x, i_this->current.pos.y - (REG0_F(17) + 40.0f), i_this->current.pos.z); + i_this->mBaseEmitter->setGlobalTranslation(actor->current.pos.x, actor->current.pos.y - (REG0_F(17) + 40.0f), actor->current.pos.z); } } else { @@ -331,8 +350,11 @@ static BOOL daKita_IsDelete(kita_class*) { /* 00001CC0-00001D3C .text daKita_Delete__FP10kita_class */ static BOOL daKita_Delete(kita_class* i_this) { - dComIfG_resDelete(&i_this->mPhs, "Kita"); - if(i_this->heap != NULL){ + dComIfG_resDeleteDemo(&i_this->mPhs, "Kita"); +#if VERSION > VERSION_DEMO + if(i_this->heap != NULL) +#endif + { dComIfG_Bgsp()->Release(i_this->pm_bgw); } if(i_this->mBaseEmitter != NULL){ @@ -354,9 +376,9 @@ static BOOL CallbackCreateHeap(fopAc_ac_c* i_this) { ret = FALSE; } else { - JUT_ASSERT(0x3b2, modelData != NULL); + JUT_ASSERT(DEMO_SELECT(928, 946), modelData != NULL); actor->pm_bgw = new dBgW(); - JUT_ASSERT(0x3b7, actor->pm_bgw != NULL); + JUT_ASSERT(DEMO_SELECT(933, 951), actor->pm_bgw != NULL); actor->pm_bgw->Set(static_cast(dComIfG_getObjectRes("Kita", KITA_DZB_HLIF_00)), cBgW::MOVE_BG_e, &actor->mBgwMtx); actor->pm_bgw->SetCrrFunc(dBgS_MoveBGProc_Typical); actor->pm_bgw->SetRideCallback(ride_call_back); @@ -368,7 +390,6 @@ static BOOL CallbackCreateHeap(fopAc_ac_c* i_this) { /* 00001EB0-00002224 .text daKita_Create__FP10fopAc_ac_c */ static cPhs_State daKita_Create(fopAc_ac_c* a_this) { - /* Nonmatching - regalloc */ static dCcD_SrcSph utiwa_sph_src = { // dCcD_SrcGObjInf { @@ -403,61 +424,65 @@ static cPhs_State daKita_Create(fopAc_ac_c* a_this) { cPhs_State ret; ret = dComIfG_resLoad(&i_this->mPhs, "Kita"); - if(ret != cPhs_COMPLEATE_e) + if(ret != cPhs_COMPLEATE_e) { +#if VERSION > VERSION_DEMO return ret; - - i_this->field_2A0 = fopAcM_GetParam(a_this); - i_this->field_2A1 = fopAcM_GetParam(a_this) >> 8; - - if(i_this->field_2A1 == 1){ - i_this->field_29A = 1; - i_this->field_360 = 1; - i_this->field_35C = a_this->current.pos.y + 70.0f + REG0_F(17); - } - else if(himo_create(i_this) != cPhs_INIT_e) +#endif + } else { + i_this->field_2A0 = fopAcM_GetParam(a_this); + i_this->field_2A1 = fopAcM_GetParam(a_this) >> 8; + + if(i_this->field_2A1 == 1){ + i_this->field_29A = 1; + i_this->field_360 = 1; + i_this->field_35C = a_this->current.pos.y + 70.0f + REG0_F(17); + } +#if VERSION > VERSION_DEMO + else if(himo_create(i_this)) return cPhs_INIT_e; - - if(i_this->field_2A0 == 0xff) - i_this->field_2A0 = 0; +#endif + + if(i_this->field_2A0 == 0xff) + i_this->field_2A0 = 0; - if(fopAcM_entrySolidHeap(i_this, CallbackCreateHeap, 0x10000) == false) - return cPhs_ERROR_e; + if(fopAcM_entrySolidHeap(i_this, CallbackCreateHeap, 0x10000) == false) + return cPhs_ERROR_e; - if(i_this->pm_bgw != NULL && dComIfG_Bgsp()->Regist(i_this->pm_bgw, i_this) != 0) - return cPhs_ERROR_e; + if(i_this->pm_bgw != NULL && dComIfG_Bgsp()->Regist(i_this->pm_bgw, i_this) != 0) + return cPhs_ERROR_e; - switch(i_this->field_2A0){ - case 1: - i_this->scale.x = 1.25f; - i_this->scale.z = 1.25f; - break; + switch(i_this->field_2A0){ + case 1: + i_this->scale.x = 1.25f; + i_this->scale.z = 1.25f; + break; - case 2: - i_this->scale.x = 1.5f; - i_this->scale.z = 1.5f; - break; + case 2: + i_this->scale.x = 1.5f; + i_this->scale.z = 1.5f; + break; - default: - i_this->scale.z = 1.0f; - i_this->scale.x = 1.0f; - break; + default: + i_this->scale.z = 1.0f; + i_this->scale.x = 1.0f; + break; + } + i_this->scale.y = 1.0f; + fopAcM_SetMtx(i_this, i_this->mModel->getBaseTRMtx()); + fopAcM_SetMin( i_this, i_this->scale.x * -200.0f, -200.0f, i_this->scale.z * -200.0f); + fopAcM_SetMax(i_this, i_this->scale.x * 200.0f, 200.0f, i_this->scale.z * 200.0f); + i_this->mModel->setBaseScale(i_this->scale); + i_this->health = 1; + i_this->mAcch.Set(fopAcM_GetPosition_p(i_this), fopAcM_GetOldPosition_p(i_this), i_this, 1, &i_this->mAcchCir, fopAcM_GetSpeed_p(i_this)); + i_this->mAcchCir.SetWall(50.0f, 300.0f); + i_this->mStts.Init(0xff, 0xff, i_this); + i_this->mSph.Set(utiwa_sph_src); + i_this->mSph.SetStts(&i_this->mStts); + + for(int i = 0; i < 2; i++) + daKita_Execute(i_this); } - i_this->scale.y = 1.0f; - fopAcM_SetMtx(i_this, i_this->mModel->getBaseTRMtx()); - fopAcM_SetMin( i_this, i_this->scale.x * -200.0f, -200.0f, i_this->scale.z * -200.0f); - fopAcM_SetMax(i_this, i_this->scale.x * 200.0f, 200.0f, i_this->scale.z * 200.0f); - i_this->mModel->setBaseScale(i_this->scale); - i_this->health = 1; - i_this->mAcch.Set(fopAcM_GetPosition_p(i_this), fopAcM_GetOldPosition_p(i_this), i_this, 1, &i_this->mAcchCir, fopAcM_GetSpeed_p(i_this)); - i_this->mAcchCir.SetWall(50.0f, 300.0f); - i_this->mStts.Init(0xff, 0xff, i_this); - i_this->mSph.Set(utiwa_sph_src); - i_this->mSph.SetStts(&i_this->mStts); - - // Regalloc for i - for(int i = 0; i < 2; i++) - daKita_Execute(i_this); return ret; } diff --git a/src/d/actor/d_a_ks.cpp b/src/d/actor/d_a_ks.cpp index bd6a36640..9d3dc6c83 100644 --- a/src/d/actor/d_a_ks.cpp +++ b/src/d/actor/d_a_ks.cpp @@ -185,7 +185,8 @@ BOOL tyaku_check(ks_class* i_this) { } /* 00000788-0000087C .text ks_kuttuki_check__FP8ks_class */ -BOOL ks_kuttuki_check(ks_class* i_this) { +BOOL ks_kuttuki_check(ks_class* i_this) { + daPy_lk_c* link = daPy_getPlayerLinkActorClass(); if (i_this->mSph.ChkAtHit() && !i_this->mSph.ChkAtShieldHit()) { fopAc_ac_c* hit_actor = i_this->mSph.GetAtHitAc(); if (hit_actor && hit_actor == daPy_getPlayerLinkActorClass() && KUTTUKU_ALL_COUNT >= 0 && KUTTUKU_ALL_COUNT < 20 && GORON_COUNT == 0) { @@ -387,8 +388,9 @@ void speed_keisan(ks_class* i_this, short i_speed) { } /* 00000EBC-00001314 .text action_dousa_move__FP8ks_class */ -void action_dousa_move(ks_class* i_this) { +void action_dousa_move(ks_class* i_this) { fopAc_ac_c* actor = &i_this->actor; + daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); daPy_lk_c* link = daPy_getPlayerLinkActorClass(); switch (i_this->mMode) { @@ -403,10 +405,11 @@ void action_dousa_move(ks_class* i_this) { i_this->mMode++; // Fall-through - case 1: + case 1: { cLib_addCalcAngleS2(&actor->shape_angle.z, 0, 1, 0x1000); - if (fopAcM_searchPlayerDistance(actor) > 10000.0f) { + f32 max_dist = 10000.0f; + if (fopAcM_searchPlayerDistance(actor) > max_dist) { break; } @@ -429,14 +432,16 @@ void action_dousa_move(ks_class* i_this) { i_this->mMode++; // Fall-through - case 2: + } + case 2: { if (i_this->mAcch.ChkGroundHit()) { actor->current.angle.y = i_this->m2FC + fopAcM_searchPlayerAngleY(actor); } + f32 max_dist = 500.0f; if (KUTTUKU_ALL_COUNT >= 0 && KUTTUKU_ALL_COUNT < 0x14 && (link->getSpeedF() > 12.0f || HEAVY_IN) && - fopAcM_searchPlayerDistance(actor) < 500.0f && + fopAcM_searchPlayerDistance(actor) < max_dist && !dComIfGp_checkPlayerStatus0(0, daPyStts0_SWIM_e) && tyaku_check(i_this)) { @@ -478,11 +483,14 @@ void action_dousa_move(ks_class* i_this) { actor->speed.y += cM_rndF(5.0f); } break; - case 3: - if (fopAcM_searchPlayerDistance(actor) < 500.0f) { + } + case 3: { + f32 max_dist = 500.0f; + if (fopAcM_searchPlayerDistance(actor) < max_dist) { actor->current.angle.y = fopAcM_searchPlayerAngleY(actor); } break; + } } if (i_this->mMode == 2 || i_this->mMode == 3) { @@ -647,8 +655,6 @@ void action_kaze_move(ks_class* i_this) { } } -static u8 item_tbl[4] = {0xA, 0xB, 0xC, 0xA}; - #if VERSION > VERSION_DEMO /* 00001874-00001A14 .text dead_eff_set__FP8ks_classP4cXyz */ void dead_eff_set(ks_class* i_this, cXyz* i_pos) { @@ -669,6 +675,12 @@ void dead_eff_set(ks_class* i_this, cXyz* i_pos) { drop_type = daDisItem_ARROW_e; } else { + static u8 item_tbl[] = { + daDisItem_HEART_e, + daDisItem_MAGIC_e, + daDisItem_ARROW_e, + daDisItem_HEART_e, + }; drop_type = item_tbl[(int)cM_rndF(2.99f)]; } } @@ -827,20 +839,42 @@ void action_omoi(ks_class* i_this) { i_this->m2F0[i] = 0; } + #if VERSION == VERSION_DEMO + if (KUTTUKU_ALL_COUNT >= 0x14) { + i_this->m528 = NULL; + } else { + i_this->m528 = link->getModelJointMtx(pl_harituki_joint_dt[KUTTUKU_ALL_COUNT]); + } + + i_this->m52C.remove(); + if (i_this->m528 == NULL) { + fopAcM_OffStatus(actor, fopAcStts_UNK4000_e); + i_this->mMode = 42; + break; + } else { + i_this->m300 = KUTTUKU_ALL_COUNT; + if (i_this->m300 > KUTTUKU_ALL_COUNT - 1) { + i_this->m300 = KUTTUKU_ALL_COUNT - 1; + } else if (i_this->m300 < 0) { + i_this->m300 = 0; + } + actor->speedF = 0.0f; + actor->gravity = 0.0f; + actor->speed.setall(0.0f); + } + #else if (KUTTUKU_ALL_COUNT >= 0x14) { i_this->m300 = 0x13; } - - #if VERSION > VERSION_DEMO if (KUTTUKU_ALL_COUNT < 0) { i_this->m300 = 0; } else { i_this->m300 = KUTTUKU_ALL_COUNT; } - #endif i_this->m528 = link->getModelJointMtx(pl_harituki_joint_dt[i_this->m300]); + #endif if (KUTTUKU_ALL_COUNT == 0) { GORON_COUNT = 0; @@ -850,9 +884,20 @@ void action_omoi(ks_class* i_this) { KUTTUKU_ALL_COUNT++; - if (HEAVY_IN == FALSE && KUTTUKU_ALL_COUNT >= 5) { - link->onHeavyState(); - HEAVY_IN = TRUE; + #if VERSION == VERSION_DEMO + if (KUTTUKU_ALL_COUNT >= 0x14) { + KUTTUKU_ALL_COUNT = 0x14; + } + #endif + + if (HEAVY_IN == FALSE) { + int r0; + int r3 = KUTTUKU_ALL_COUNT; + r0 = 5; + if (r3 >= r0) { + link->onHeavyState(); + HEAVY_IN = TRUE; + } } i_this->m2D2 = 0; @@ -868,6 +913,16 @@ void action_omoi(ks_class* i_this) { // Fall-through } case 0x29: { + #if VERSION == VERSION_DEMO + if (i_this->m528 == NULL) { + if (KUTTUKU_ALL_COUNT > 0) { + KUTTUKU_ALL_COUNT--; + } + i_this->mMode = 42; + break; + } + #endif + fopAcM_SetRoomNo(actor, fopAcM_GetRoomNo(mpCurPlayerActor)); if (!(fopAcM_GetID(actor) & 1)) { @@ -877,7 +932,7 @@ void action_omoi(ks_class* i_this) { actor->shape_angle.y -= i_this->m2FE * 0.25f; } - if (i_this->m528) { + if (VERSION == VERSION_DEMO || i_this->m528) { local_10.x = i_this->m528[0][3]; local_10.y = i_this->m528[1][3]; local_10.z = i_this->m528[2][3]; @@ -887,7 +942,15 @@ void action_omoi(ks_class* i_this) { } if (!(local_10.x || local_10.y || local_10.z)) { + #if VERSION == VERSION_DEMO + if (KUTTUKU_ALL_COUNT > 0) { + KUTTUKU_ALL_COUNT--; + } + i_this->mMode = 42; + break; + #else local_10 = mpCurPlayerActor->current.pos; + #endif } local_1c.x = std::fabsf(mpCurPlayerActor->speed.x * 10.0f); @@ -946,6 +1009,16 @@ void action_omoi(ks_class* i_this) { } i_this->m528 = link->getModelJointMtx(pl_harituki_joint_dt[i_this->m300]); + + #if VERSION == VERSION_DEMO + if (i_this->m528 == NULL) { + if (KUTTUKU_ALL_COUNT > 0) { + KUTTUKU_ALL_COUNT--; + } + i_this->mMode = 42; + break; + } + #endif } } @@ -957,7 +1030,14 @@ void action_omoi(ks_class* i_this) { cLib_addCalc2(&actor->current.pos.y, local_10.y, 1.0f, local_1c.y); cLib_addCalc2(&actor->current.pos.z, local_10.z, 1.0f, local_1c.z); - if (link->checkFrontRollCrash() || link->getCutType() == 8 || link->getCutType() == 9 || dComIfGp_checkPlayerStatus0(0, daPyStts0_SWIM_e)) { + if ( + link->checkFrontRollCrash() || + link->getCutType() == 8 || + #if VERSION > VERSION_DEMO + link->getCutType() == 9 || + #endif + dComIfGp_checkPlayerStatus0(0, daPyStts0_SWIM_e) + ) { i_this->mSph.OnCoSetBit(); i_this->mSph.OnTgSetBit(); @@ -1050,9 +1130,12 @@ void action_omoi(ks_class* i_this) { GORON_COUNT--; KUTTUKU_ALL_COUNT--; - if (HEAVY_IN && KUTTUKU_ALL_COUNT < 5) { - HEAVY_IN = FALSE; - link->offHeavyState(); + if (HEAVY_IN) { + int r0 = 5; + if (KUTTUKU_ALL_COUNT < r0) { + HEAVY_IN = FALSE; + link->offHeavyState(); + } } i_this->mMode = 42; @@ -1064,7 +1147,7 @@ void action_omoi(ks_class* i_this) { if (i_this->m528) { fopAcM_OffStatus(actor, fopAcStts_UNK4000_e); - fopAcM_setRoomLayer(actor, fopAcM_GetRoomNo(actor)); + fopAcM_setRoomLayer(actor, actor->current.roomNo); i_this->m528 = 0; } @@ -1103,7 +1186,8 @@ void action_omoi(ks_class* i_this) { void* tsubo_search(void* param_1, void* i_data) { ks_class* i_this = (ks_class*)i_data; fopAc_ac_c* actor = &i_this->actor; - if (fopAc_IsActor(param_1) && (fopAcM_GetName(param_1) == PROC_TSUBO)) { + int r0 = 0; + if (r0 < 100 && fopAc_IsActor(param_1) && (fopAcM_GetName(param_1) == PROC_TSUBO)) { fopAc_ac_c* tsubo_actor = (fopAc_ac_c*)param_1; if (std::fabsf(tsubo_actor->current.pos.x - actor->current.pos.x) < 20.0f && @@ -1253,8 +1337,11 @@ static BOOL daKS_Execute(ks_class* i_this) { fopAc_ac_c* actor = &i_this->actor; if (enemy_ice(&i_this->mEnemyIce)) { - i_this->mpBodyMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get()); - i_this->mpEyeMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get()); + J3DModel* model; + model = i_this->mpBodyMorf->getModel(); + model->setBaseTRMtx(mDoMtx_stack_c::get()); + model = i_this->mpEyeMorf->getModel(); + model->setBaseTRMtx(mDoMtx_stack_c::get()); if (i_this->m2D0 && (i_this->m320++, i_this->m320 > 7.0f)) { i_this->m320 = 7.0f; } @@ -1463,62 +1550,6 @@ static BOOL useHeapInit(fopAc_ac_c* i_act) { return TRUE; } -static dCcD_SrcSph body_co_sph_src = { - // dCcD_SrcGObjInf - { - /* Flags */ 0, - /* SrcObjAt Type */ AT_TYPE_STALFOS_MACE, - /* SrcObjAt Atp */ 0, - /* SrcObjAt SPrm */ cCcD_AtSPrm_Set_e | cCcD_AtSPrm_VsPlayer_e | cCcD_AtSPrm_NoTgHitInfSet_e, - /* SrcObjTg Type */ ~(AT_TYPE_WATER | AT_TYPE_UNK20000 | AT_TYPE_UNK400000 | AT_TYPE_LIGHT), - /* SrcObjTg SPrm */ cCcD_TgSPrm_Set_e | cCcD_TgSPrm_IsEnemy_e, - /* SrcObjCo SPrm */ cCcD_CoSPrm_Set_e | cCcD_CoSPrm_IsPlayer_e | cCcD_CoSPrm_VsPlayer_e | cCcD_CoSPrm_VsOther_e, - /* SrcGObjAt Se */ dCcG_SE_UNK6, - /* SrcGObjAt HitMark */ 0, - /* SrcGObjAt Spl */ 0, - /* SrcGObjAt Mtrl */ 0, - /* SrcGObjAt SPrm */ 0, - /* SrcGObjTg Se */ 0, - /* SrcGObjTg HitMark */ 0, - /* SrcGObjTg Spl */ 0, - /* SrcGObjTg Mtrl */ 0, - /* SrcGObjTg SPrm */ dCcG_TgSPrm_NoConHit_e | dCcG_TgSPrm_NoHitMark_e, - /* SrcGObjCo SPrm */ 0, - }, - // cM3dGSphS - {{ - /* Center */ {0.0f, 0.0f, 0.0f}, - /* Radius */ 15.0f, - }}, -}; - -static s8 fire_j[10] = { - 0, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -}; - -static f32 fire_sc[10] = { - 1.0f, - 1.0f, - 1.0f, - 1.0f, - 1.0f, - 1.0f, - 1.0f, - 1.0f, - 1.0f, - 1.0f, -}; - /* 000034F8-00003A94 .text daKS_Create__FP10fopAc_ac_c */ static cPhs_State daKS_Create(fopAc_ac_c* i_this) { #if VERSION > VERSION_DEMO @@ -1612,6 +1643,35 @@ static cPhs_State daKS_Create(fopAc_ac_c* i_this) { a_this->m2FE = (fopAcM_GetID(i_this) & 7) * 0x32 + 1000; + static dCcD_SrcSph body_co_sph_src = { + // dCcD_SrcGObjInf + { + /* Flags */ 0, + /* SrcObjAt Type */ AT_TYPE_STALFOS_MACE, + /* SrcObjAt Atp */ 0, + /* SrcObjAt SPrm */ cCcD_AtSPrm_Set_e | cCcD_AtSPrm_VsPlayer_e | cCcD_AtSPrm_NoTgHitInfSet_e, + /* SrcObjTg Type */ ~(AT_TYPE_WATER | AT_TYPE_UNK20000 | AT_TYPE_UNK400000 | AT_TYPE_LIGHT), + /* SrcObjTg SPrm */ cCcD_TgSPrm_Set_e | cCcD_TgSPrm_IsEnemy_e, + /* SrcObjCo SPrm */ cCcD_CoSPrm_Set_e | cCcD_CoSPrm_IsPlayer_e | cCcD_CoSPrm_VsPlayer_e | cCcD_CoSPrm_VsOther_e, + /* SrcGObjAt Se */ dCcG_SE_UNK6, + /* SrcGObjAt HitMark */ 0, + /* SrcGObjAt Spl */ 0, + /* SrcGObjAt Mtrl */ 0, + /* SrcGObjAt SPrm */ 0, + /* SrcGObjTg Se */ 0, + /* SrcGObjTg HitMark */ 0, + /* SrcGObjTg Spl */ 0, + /* SrcGObjTg Mtrl */ 0, + /* SrcGObjTg SPrm */ dCcG_TgSPrm_NoConHit_e | dCcG_TgSPrm_NoHitMark_e, + /* SrcGObjCo SPrm */ 0, + }, + // cM3dGSphS + {{ + /* Center */ {0.0f, 0.0f, 0.0f}, + /* Radius */ 15.0f, + }}, + }; + a_this->mSph.Set(body_co_sph_src); a_this->mSph.SetStts(&a_this->mStts); @@ -1623,6 +1683,32 @@ static cPhs_State daKS_Create(fopAc_ac_c* i_this) { a_this->mEnemyFire.mpMcaMorf = a_this->mpBodyMorf; a_this->mEnemyFire.mpActor = i_this; + static s8 fire_j[10] = { + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + + }; + static f32 fire_sc[10] = { + 1.0f, + 1.0f, + 1.0f, + 1.0f, + 1.0f, + 1.0f, + 1.0f, + 1.0f, + 1.0f, + 1.0f, + }; + for (int i = 0; i < 10; i++) { a_this->mEnemyFire.mFlameJntIdxs[i] = fire_j[i]; a_this->mEnemyFire.mParticleScale[i] = fire_sc[i]; diff --git a/src/d/actor/d_a_leaflift.cpp b/src/d/actor/d_a_leaflift.cpp index 0a1139cf6..b9f76db5e 100644 --- a/src/d/actor/d_a_leaflift.cpp +++ b/src/d/actor/d_a_leaflift.cpp @@ -62,9 +62,13 @@ bool daLlift_c::_delete() { mEmitter3->becomeInvalidEmitter(); mEmitter3 = NULL; } +#if VERSION > VERSION_DEMO if (heap) +#endif + { dComIfG_Bgsp()->Release(mpBgW); - dComIfG_resDelete(&mPhs, m_arcname); + } + dComIfG_resDeleteDemo(&mPhs, m_arcname); return TRUE; } @@ -78,7 +82,7 @@ static void rideCallBack(dBgW* param1, fopAc_ac_c* i_this, fopAc_ac_c* i_other); /* 000001E0-00000338 .text CreateHeap__9daLlift_cFv */ BOOL daLlift_c::CreateHeap() { J3DModelData* modelData = (J3DModelData *)dComIfG_getObjectRes(m_arcname, OLIFT_BDL_OLIFT); - JUT_ASSERT(0x14e, modelData != NULL); + JUT_ASSERT(DEMO_SELECT(327, 334), modelData != NULL); mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000022); if (!mpModel) { @@ -204,13 +208,14 @@ static void rideCallBack(dBgW* param1, fopAc_ac_c* i_act, fopAc_ac_c* i_other) { mDoMtx_stack_c::YrotS(-i_this->current.angle.y); mDoMtx_stack_c::multVec(&posOffset, &posOffset); s16 angle = (i_this->mActorLifetimeFrameCount % 32U) * (0x10000 / 32); - tiltFactor = cM_ssin(angle) * 2.0f * 0.25f * (cM_rndFX(0.2f) + 1.0f); + tiltFactor = cM_ssin(angle) * tiltFactor * 0.25f * (cM_rndFX(0.2f) + 1.0f); } offsetMagnitude = posOffset.abs(); if (!posOffset.normalizeRS() ) { return; } - cLib_addCalcAngleS2(&i_this->mTiltAngle, -offsetMagnitude * tiltFactor, 8, 0x200); + s16 temp = -offsetMagnitude * tiltFactor; + cLib_addCalcAngleS2(&i_this->mTiltAngle, temp, 8, 0x200); tiltFactor = cM_ssin(i_this->mTiltAngle); i_this->mTargetRotation.x = posOffset.x * tiltFactor; i_this->mTargetRotation.y = posOffset.y * tiltFactor; @@ -240,7 +245,8 @@ void daLlift_c::setMoveBGMtx() { bool daLlift_c::_execute() { Quaternion interpolatedRotation; cXyz adjustedPosition; - float distXZ = fopAcM_searchActorDistanceXZ(this, dComIfGp_getPlayer(0)); + f32 distXZ = fopAcM_searchActorDistanceXZ(this, dComIfGp_getPlayer(0)); + f32 f2 = 270.0f; mActorLifetimeFrameCount++; if (m43F > 0) { m43F--; @@ -250,7 +256,7 @@ bool daLlift_c::_execute() { } if ((!m43C) && (m43E)) { mTargetRotation = ZeroQuat; - if (distXZ > 270.0f) { + if (distXZ > f2) { mbIsDescending = TRUE; } } diff --git a/src/d/actor/d_a_mbdoor.cpp b/src/d/actor/d_a_mbdoor.cpp index f4c0ee06c..66a7dbddb 100644 --- a/src/d/actor/d_a_mbdoor.cpp +++ b/src/d/actor/d_a_mbdoor.cpp @@ -219,8 +219,8 @@ void daMbdoor_c::calcMtx() { /* 00000898-00000A44 .text CreateInit__10daMbdoor_cFv */ BOOL daMbdoor_c::CreateInit() { - s32 swbit = getSwbit(); - s32 type = getType(); + int swbit = getSwbit(); + int type = getType(); if (dComIfG_Bgsp()->Regist(mpBgW, this)) { JUT_ASSERT(334, FALSE); @@ -257,12 +257,18 @@ BOOL daMbdoor_c::CreateInit() { /* 00000A44-00000AF4 .text create__10daMbdoor_cFv */ cPhs_State daMbdoor_c::create() { cPhs_State phase_state = dComIfG_resLoad(&mPhs, getArcName()); - +#if VERSION > VERSION_DEMO fopAcM_SetupActor(this, daMbdoor_c); +#endif if (phase_state != cPhs_COMPLEATE_e) { return phase_state; } + +#if VERSION == VERSION_DEMO + fopAcM_SetupActor(this, daMbdoor_c); +#endif + if (!fopAcM_entrySolidHeap(this, CheckCreateHeap, 0x8200)) { return cPhs_ERROR_e; } @@ -273,7 +279,7 @@ cPhs_State daMbdoor_c::create() { } /* 00000AF4-00000B3C .text getDemoAction__10daMbdoor_cFv */ -s32 daMbdoor_c::getDemoAction() { +int daMbdoor_c::getDemoAction() { static char* action_table[] = { "WAIT", "SET_START", @@ -293,7 +299,7 @@ s32 daMbdoor_c::getDemoAction() { void daMbdoor_c::demoProc() { // Explicit cast from daPy_py_c to daPy_py_c necessary for matching regalloc. daPy_py_c* player = (daPy_py_c*)daPy_getPlayerActorClass(); - s32 actIdx = getDemoAction(); + int actIdx = getDemoAction(); cXyz goal; s16 angle; @@ -343,7 +349,7 @@ void daMbdoor_c::demoProc() { if (field_0x2b4 < 250) { field_0x2b4 += 50; } - s32 temp = field_0x2b2 - field_0x2b4; + int temp = field_0x2b2 - field_0x2b4; if (temp < -0x1C71) { field_0x2b2 = -0x1C71; dComIfGp_evmng_cutEnd(mEvtStaffId); @@ -364,7 +370,7 @@ void daMbdoor_c::demoProc() { if (field_0x2b4 < 400) { field_0x2b4 += 40; } - s32 temp = field_0x2b0 - field_0x2b4; + int temp = field_0x2b0 - field_0x2b4; if (temp < -0x3F65) { field_0x2b0 = -0x3F65; dComIfGp_evmng_cutEnd(mEvtStaffId); @@ -378,9 +384,10 @@ void daMbdoor_c::demoProc() { dComIfGp_evmng_cutEnd(mEvtStaffId); } break; - case ACT_ADJUSTMENT: + case ACT_ADJUSTMENT: { angle = player->shape_angle.y; - cLib_addCalcAngleS2(&angle, current.angle.y + 0x7FFF, 10, 0x800); + s16 r4 = current.angle.y + 0x7FFF; + cLib_addCalcAngleS2(&angle, r4, 10, 0x800); goal = player->current.pos; goal.x = goal.x*0.9f + field_0x2c4.x*0.1f; goal.z = goal.z*0.9f + field_0x2c4.z*0.1f; @@ -391,6 +398,7 @@ void daMbdoor_c::demoProc() { dComIfGp_evmng_cutEnd(mEvtStaffId); } break; + } default: dComIfGp_evmng_cutEnd(mEvtStaffId); break; @@ -426,7 +434,7 @@ BOOL daMbdoor_c::checkArea() { /* 000010CC-00001198 .text checkUnlock__10daMbdoor_cFv */ BOOL daMbdoor_c::checkUnlock() { - s32 swbit = getSwbit(); + int swbit = getSwbit(); switch (getType()) { case 0: return dComIfGs_isSwitch(swbit, fopAcM_GetRoomNo(this)); @@ -446,13 +454,13 @@ BOOL daMbdoor_c::checkUnlock() { } /* 00001198-000011BC .text daMbdoor_actionWait__FP10daMbdoor_c */ -BOOL daMbdoor_actionWait(daMbdoor_c* i_this) { +static BOOL daMbdoor_actionWait(daMbdoor_c* i_this) { i_this->calcMtx(); return TRUE; } /* 000011BC-0000121C .text daMbdoor_actionLockWait__FP10daMbdoor_c */ -BOOL daMbdoor_actionLockWait(daMbdoor_c* i_this) { +static BOOL daMbdoor_actionLockWait(daMbdoor_c* i_this) { if (i_this->checkUnlock()) { i_this->setAction(2); fopAcM_orderOtherEvent(i_this, "MBDOOR_STOP_OPEN"); @@ -461,7 +469,7 @@ BOOL daMbdoor_actionLockWait(daMbdoor_c* i_this) { } /* 0000121C-000012AC .text daMbdoor_actionLockOff__FP10daMbdoor_c */ -BOOL daMbdoor_actionLockOff(daMbdoor_c* i_this) { +static BOOL daMbdoor_actionLockOff(daMbdoor_c* i_this) { if (i_this->eventInfo.checkCommandDemoAccrpt()) { i_this->mEvtStaffId = dComIfGp_evmng_getMyStaffId("MBDOOR"); i_this->demoProc(); @@ -473,7 +481,7 @@ BOOL daMbdoor_actionLockOff(daMbdoor_c* i_this) { } /* 000012AC-00001324 .text daMbdoor_actionLockDemo__FP10daMbdoor_c */ -BOOL daMbdoor_actionLockDemo(daMbdoor_c* i_this) { +static BOOL daMbdoor_actionLockDemo(daMbdoor_c* i_this) { if (dComIfGp_evmng_endCheck("MBDOOR_STOP_OPEN")) { dComIfGp_event_reset(); i_this->setAction(4); @@ -484,7 +492,7 @@ BOOL daMbdoor_actionLockDemo(daMbdoor_c* i_this) { } /* 00001324-000013E4 .text daMbdoor_actionCloseWait__FP10daMbdoor_c */ -BOOL daMbdoor_actionCloseWait(daMbdoor_c* i_this) { +static BOOL daMbdoor_actionCloseWait(daMbdoor_c* i_this) { if (i_this->eventInfo.checkCommandDoor()) { i_this->mEvtStaffId = dComIfGp_evmng_getMyStaffId("MBDOOR"); i_this->demoProc(); @@ -501,7 +509,7 @@ BOOL daMbdoor_actionCloseWait(daMbdoor_c* i_this) { } /* 000013E4-00001408 .text daMbdoor_actionOpen__FP10daMbdoor_c */ -BOOL daMbdoor_actionOpen(daMbdoor_c* i_this) { +static BOOL daMbdoor_actionOpen(daMbdoor_c* i_this) { i_this->demoProc(); return TRUE; } @@ -565,7 +573,12 @@ static BOOL daMbdoor_IsDelete(daMbdoor_c* i_this) { /* 00001560-000015D4 .text daMbdoor_Delete__FP10daMbdoor_c */ static BOOL daMbdoor_Delete(daMbdoor_c* i_this) { - if (i_this->heap) { +#if VERSION == VERSION_DEMO + if (i_this->field_0x2ac) +#else + if (i_this->heap) +#endif + { dComIfG_Bgsp()->Release(i_this->mpBgW); } dComIfG_resDelete(&i_this->mPhs, i_this->getArcName()); diff --git a/src/d/actor/d_a_obj_gong.cpp b/src/d/actor/d_a_obj_gong.cpp index a0d842ef7..899bca6e9 100644 --- a/src/d/actor/d_a_obj_gong.cpp +++ b/src/d/actor/d_a_obj_gong.cpp @@ -92,7 +92,7 @@ cPhs_State daObjGong::Act_c::_create() { /* 00000374-000003A4 .text _delete__Q29daObjGong5Act_cFv */ bool daObjGong::Act_c::_delete() { - dComIfG_resDelete(&mPhs, M_arcname); + dComIfG_resDeleteDemo(&mPhs, M_arcname); return true; } diff --git a/src/d/actor/d_a_obj_hat.cpp b/src/d/actor/d_a_obj_hat.cpp index 1eae5829a..b1649ee27 100644 --- a/src/d/actor/d_a_obj_hat.cpp +++ b/src/d/actor/d_a_obj_hat.cpp @@ -128,7 +128,7 @@ cPhs_State daObjHat_c::createInit() { /* 000006AC-000006DC .text _delete__10daObjHat_cFv */ BOOL daObjHat_c::_delete() { - dComIfG_resDelete(&mPhs, "Ro"); + dComIfG_resDeleteDemo(&mPhs, "Ro"); return TRUE; } diff --git a/src/d/actor/d_a_obj_iceisland.cpp b/src/d/actor/d_a_obj_iceisland.cpp index ef496b780..82aac051d 100644 --- a/src/d/actor/d_a_obj_iceisland.cpp +++ b/src/d/actor/d_a_obj_iceisland.cpp @@ -53,7 +53,7 @@ void daObjIceisland_c::CreateInit() { fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); fopAcM_setCullSizeFar(this, 1.0f); set_mtx(); - dKy_tevstr_init(&mTevStr, fopAcM_GetHomeRoomNo(this), 0xFF); + dKy_tevstr_init(&mTevStr, home.roomNo, 0xFF); g_env_light.settingTevStruct(TEV_TYPE_BG0, ¤t.pos, &mTevStr); mEmitter1 = NULL; mEmitter2 = NULL; @@ -171,7 +171,7 @@ cPhs_State daObjIceisland_c::_create(){ fopAcM_SetupActor(this, daObjIceisland_c); cPhs_State phase_state = dComIfG_resLoad(&mPhs, "GiceL"); if (phase_state == cPhs_COMPLEATE_e) { - if (!fopAcM_entrySolidHeap(this, CheckCreateHeap, 0x13D0)) { + if (!fopAcM_entrySolidHeap(this, CheckCreateHeap, DEMO_SELECT(0x300, 0x13D0))) { return cPhs_ERROR_e; } else { CreateInit(); @@ -181,7 +181,7 @@ cPhs_State daObjIceisland_c::_create(){ } bool daObjIceisland_c::_delete(){ - dComIfG_resDelete(&mPhs, "GiceL"); + dComIfG_resDeleteDemo(&mPhs, "GiceL"); return true; } diff --git a/src/d/actor/d_a_obj_pfall.cpp b/src/d/actor/d_a_obj_pfall.cpp index 113ef34e3..74d123e13 100644 --- a/src/d/actor/d_a_obj_pfall.cpp +++ b/src/d/actor/d_a_obj_pfall.cpp @@ -183,10 +183,17 @@ void daObj_Pfall_c::CreateInit() { /* 000008CC-000009E8 .text _create__13daObj_Pfall_cFv */ cPhs_State daObj_Pfall_c::_create() { +#if VERSION > VERSION_DEMO fopAcM_SetupActor(this, daObj_Pfall_c); +#endif + cPhs_State phase = dComIfG_resLoad(&mPhsPfall, "Pfall"); if (phase == cPhs_COMPLEATE_e) { +#if VERSION == VERSION_DEMO + fopAcM_SetupActor(this, daObj_Pfall_c); +#endif + if (!fopAcM_entrySolidHeap(this, CallbackCreateHeap, 0x38E0)) { return cPhs_ERROR_e; } else { @@ -198,7 +205,7 @@ cPhs_State daObj_Pfall_c::_create() { /* 000009EC-00000AB0 .text _delete__13daObj_Pfall_cFv */ bool daObj_Pfall_c::_delete() { - dComIfG_resDelete(&mPhsPfall, "Pfall"); + dComIfG_resDeleteDemo(&mPhsPfall, "Pfall"); if(mpBgW && mpBgW->ChkUsed()) { dComIfG_Bgsp()->Release(mpBgW); } @@ -322,10 +329,13 @@ void daObj_Pfall_c::mode_wait_init() { /* 00000F1C-00000FC0 .text mode_wait__13daObj_Pfall_cFv */ void daObj_Pfall_c::mode_wait() { - if(dLib_checkPlayerInCircle(current.pos, 100.0f, 100.0f) - && dComIfGp_getPlayer(0)->speedF == 0.0f - && cLib_calcTimer(&field_0x3B8) == 0) { - mode_event_init(); + if(dLib_checkPlayerInCircle(current.pos, 100.0f, 100.0f)) { + daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); + if (player->getSpeedF() == 0.0f) { + if (cLib_calcTimer(&field_0x3B8) == 0) { + mode_event_init(); + } + } } mpBgW->Move(); mpBgW2->Move(); @@ -377,17 +387,15 @@ bool daObj_Pfall_c::_execute() { if(mpMorf->getFrame() == 6.0f) { fopAcM_seStart(this, JA_SE_OBJ_TC_JAIL_STRING, 0); } - f32 frame = mpMorf->getFrame(); - if (!(frame > 0.0f && frame <= 6.0f)) { - if (frame > 6.0f && frame <= 10.0f) { - field_0x438 += 1.0f; - } - else { - if (!(frame > 10.0f && frame <= 23.0f) && frame > 23.0f && frame <= 29.0f) { - field_0x438 -= 3.0f; - } - } - } + if (mpMorf->getFrame() > 0.0f && mpMorf->getFrame() <= 6.0f) { + // Do nothing + } else if (mpMorf->getFrame() > 6.0f && mpMorf->getFrame() <= 10.0f) { + field_0x438 += 1.0f; + } else if (mpMorf->getFrame() > 10.0f && mpMorf->getFrame() <= 23.0f) { + // Do nothing + } else if (mpMorf->getFrame() > 23.0f && mpMorf->getFrame() <= 29.0f) { + field_0x438 -= 3.0f; + } } else { field_0x438 = 0.0f; } diff --git a/src/d/actor/d_a_shutter.cpp b/src/d/actor/d_a_shutter.cpp index cd9f6f199..606b156fd 100644 --- a/src/d/actor/d_a_shutter.cpp +++ b/src/d/actor/d_a_shutter.cpp @@ -29,8 +29,11 @@ char* daShutter_c::m_staff_name[2] = {"Htobi1", "Htobi2"}; /* 00000078-00000108 .text _delete__11daShutter_cFv */ bool daShutter_c::_delete() { - dComIfG_resDelete(&mPhs, m_arcname[mType]); - if (heap != NULL) { + dComIfG_resDeleteDemo(&mPhs, m_arcname[mType]); +#if VERSION > VERSION_DEMO + if (heap != NULL) +#endif + { for (int i = 0; i < (int)ARRAY_SIZE(mMtx); i++) { dComIfG_Bgsp()->Release(mdBgW[i]); }; diff --git a/src/d/actor/d_a_swtact.cpp b/src/d/actor/d_a_swtact.cpp index 48ba8cdbe..dd05caa97 100644 --- a/src/d/actor/d_a_swtact.cpp +++ b/src/d/actor/d_a_swtact.cpp @@ -121,7 +121,8 @@ bool daSwTact_c::_execute() { if (player == NULL || dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e)) return true; - if ((player->current.pos - current.pos).absXZ() <= getR()) { + f32 dist = (player->current.pos - current.pos).absXZ(); + if (dist <= getR()) { if (mPlayerStatus != stts1 && stts1 != 0) { player->setTactZev(fopAcM_GetID(this), getAnswer(), NULL); } @@ -160,7 +161,7 @@ bool daSwTact_c::_execute() { } if (mTrigger != 0 && !dComIfGp_event_runCheck()) { - dComIfGs_onSwitch(mSwitchNo, fopAcM_GetHomeRoomNo(this)); + fopAcM_onSwitch(this, mSwitchNo); mTrigger = 0; } diff --git a/src/d/actor/d_a_tag_ghostship.cpp b/src/d/actor/d_a_tag_ghostship.cpp index ef1d7d50c..738d5ee44 100644 --- a/src/d/actor/d_a_tag_ghostship.cpp +++ b/src/d/actor/d_a_tag_ghostship.cpp @@ -31,8 +31,13 @@ void daTag_Gship_c::modeClearWait() { /* 000001C0-00000214 .text modeClearEventInit__13daTag_Gship_cFv */ void daTag_Gship_c::modeClearEventInit() { - dComIfGs_getEventReg(dSv_event_flag_c::UNK_8803); - dComIfGs_setEventReg(dSv_event_flag_c::UNK_8803, 3); + u8 reg = dComIfGs_getEventReg(dSv_event_flag_c::UNK_8803); +#if VERSION == VERSION_DEMO + reg += 1; +#else + reg = 3; +#endif + dComIfGs_setEventReg(dSv_event_flag_c::UNK_8803, reg); } /* 00000214-00000418 .text modeClearEvent__13daTag_Gship_cFv */ diff --git a/src/d/actor/d_a_tag_light.cpp b/src/d/actor/d_a_tag_light.cpp index 10264affb..597c0f191 100644 --- a/src/d/actor/d_a_tag_light.cpp +++ b/src/d/actor/d_a_tag_light.cpp @@ -498,7 +498,7 @@ bool Act_c::_execute() { } /* 00001C90-00001D20 .text set_material__Q210daTagLight5Act_cFP11J3DMaterialUc */ -void Act_c::set_material(J3DMaterial* material, unsigned char alpha) { +void Act_c::set_material(J3DMaterial* material, u8 alpha) { while (material != NULL) { if (alpha == 0) { material->getShape()->hide(); @@ -534,9 +534,11 @@ bool Act_c::_draw() { } J3DModelData* modelData = mpModel->getModelData(); - u8 tmp = (s8)(m308 * 255.5f); - set_material(modelData->getJointNodePointer(1)->getMesh(), tmp); - set_material(modelData->getJointNodePointer(2)->getMesh(), tmp); + s8 tmp = (m308 * 255.5f); + // Fakematch? + u8 tmp2 = tmp; + set_material(modelData->getJointNodePointer(1)->getMesh(), (u8)tmp2); + set_material(modelData->getJointNodePointer(2)->getMesh(), (u8)tmp2); mDoExt_modelUpdateDL(mpModel); } return true; diff --git a/src/d/actor/d_a_tornado.cpp b/src/d/actor/d_a_tornado.cpp index e2175e056..ee08690a8 100644 --- a/src/d/actor/d_a_tornado.cpp +++ b/src/d/actor/d_a_tornado.cpp @@ -44,7 +44,6 @@ BOOL daTornado_c::jointCallBack(int jntNo) { } static const float l_joint_scale[11] = { 0.1f, 0.4f, 0.7f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f }; -static const float joint_offset[11] = { 100.0f, 200.0f, 300.0f, 400.0f, 300.0f, 300.0f, 400.0f, 500.0f, 400.0f, 500.0f, 600.0f }; static daTornado_HIO_c0 l_HIO; @@ -137,9 +136,8 @@ BOOL daTornado_c::execute() { } for (int i = 0; i < 11; i++) { - f32 sin = cM_ssin(mAngle1 - 0x1000 * i); - f32 tmp1 = fVar8 * joint_offset[i]; - f32 fVar1 = tmp1 * (sin + 1.0f); + static const f32 joint_offset[11] = { 100.0f, 200.0f, 300.0f, 400.0f, 300.0f, 300.0f, 400.0f, 500.0f, 400.0f, 500.0f, 600.0f }; + f32 fVar1 = (fVar8 * joint_offset[i]) * ((cM_ssin(mAngle1 - 0x1000 * i)) + 1.0f); s16 angle2 = mAngle2 - 0x1800 * i; mJointX[i] = cM_ssin(angle2) * fVar1 * scale.x; mJointZ[i] = cM_scos(angle2) * fVar1 * scale.x;