summaryrefslogtreecommitdiff
path: root/src/d/actor/d_a_obj_hha.cpp
diff options
context:
space:
mode:
authorAzurpourpre <100833633+Azurpourpre@users.noreply.github.com>2025-02-01 21:44:48 +0100
committerGitHub <noreply@github.com>2025-02-01 15:44:48 -0500
commit39aace2c919fae101c464e9164d6ed5c274a6cc8 (patch)
treefca303867257566f90e81fbeade0fa7c29979478 /src/d/actor/d_a_obj_hha.cpp
parenta52bb789da04827e7a2723dbb2659d9056582630 (diff)
d_a_obj_hha 100% (#688)
* daObjHhaPart_c : progress on init_data, set_mdl_area, set_bgw, init_mtx * daObjHhaSplash_c::create_s match * daObjHhaYgush_c::create_area match * daObjHhaYgush_c::init_data match * daObjHhaYgush_c::init_mtx match * daObjHhaYgush_c::draw match * daObjHha_c class definition * exe_normal & draw_normal match * daObjHha_c::create_heap match * daObjHha_c::_create match * daObjHha_c::_delete almost match * daObjHha_c::check_sw * daObjHha_c::set_tex match * daObjHha_c::init_mtx match * daObjHha_c::get_water_h * daObjHha_c::set_splash_bottom_* & daObjHha_get_r match * daObjHha_c::set_splash_bottom_stop_r match * daObjHha_c::part_manager almost match * daObjHha_c::ygush_manager match * daObjHha_c::_execute almost match * daObjHha_c::_draw match * daObjHha_c::water_manager match * Mthd match * da_a_obj_hha object file match * Cleaning & adding variable names * Updating configure.py & cleaning * fixing d_a_obj_hha constants symbol name * Adding suggestions (zeldaret/tww/#688) * Fixing d_a_obj_hha Mthd (as suggested in PR zeldaret/tww/#688) * Reverting configure.py
Diffstat (limited to 'src/d/actor/d_a_obj_hha.cpp')
-rw-r--r--src/d/actor/d_a_obj_hha.cpp630
1 files changed, 570 insertions, 60 deletions
diff --git a/src/d/actor/d_a_obj_hha.cpp b/src/d/actor/d_a_obj_hha.cpp
index 54f36409..11891bc2 100644
--- a/src/d/actor/d_a_obj_hha.cpp
+++ b/src/d/actor/d_a_obj_hha.cpp
@@ -4,182 +4,692 @@
//
#include "d/actor/d_a_obj_hha.h"
+#include "d/actor/d_a_tag_waterlevel.h"
+#include "d/d_bg_s_func.h"
+#include "d/d_bg_s_wtr_chk.h"
+#include "d/d_com_inf_game.h"
#include "d/d_procname.h"
+#include "d/res/res_hha.h"
+
+const dCcD_SrcCyl daObjHha_c::M_cyl_data = {
+ // dCcD_SrcGObjInf
+ {
+ /* Flags */ 0,
+ /* SrcObjAt Type */ 0,
+ /* SrcObjAt Atp */ 0,
+ /* SrcObjAt SPrm */ 0,
+ /* SrcObjTg Type */ 0,
+ /* SrcObjTg SPrm */ 0,
+ /* SrcObjCo SPrm */ cCcD_CoSPrm_Set_e | cCcD_CoSPrm_IsOther_e | cCcD_CoSPrm_VsEnemy_e | cCcD_CoSPrm_VsOther_e,
+ /* 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 */ dCcG_TgSPrm_NoHitMark_e,
+ /* SrcGObjCo SPrm */ 0,
+ },
+ // cM3dGCylS
+ {
+ /* Center */ 0.0f, 0.0f, 0.0f,
+ /* Radius */ 570.0f,
+ /* Height */ 100.0f,
+ },
+};
+
+const dCcD_SrcSph daObjHha_c::M_sph_data = {
+ // dCcD_SrcGObjInf
+ {
+ /* Flags */ 0,
+ /* SrcObjAt Type */ 0,
+ /* SrcObjAt Atp */ 0,
+ /* SrcObjAt SPrm */ 0,
+ /* SrcObjTg Type */ 0,
+ /* SrcObjTg SPrm */ 0,
+ /* SrcObjCo SPrm */ cCcD_CoSPrm_Set_e | cCcD_CoSPrm_IsOther_e | cCcD_CoSPrm_VsEnemy_e,
+ /* 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 */ dCcG_TgSPrm_NoHitMark_e,
+ /* SrcGObjCo SPrm */ 0,
+ },
+ // cM3dGSphS
+ {
+ /* Center */ 0.0f, 0.0f, 0.0f,
+ /* Radius */ 220.0f,
+ },
+};
+
+const HHA_RES_FILE_ID l_daObjHha_bdl_idx_table[2] = {HHA_BDL_HHA1, HHA_BDL_HHA2};
+const HHA_RES_FILE_ID l_daObjHha_dzb_idx_table[2] = {HHA_DZB_HHA1, HHA_DZB_HHA2};
+const HHA_RES_FILE_ID l_daObjHha_btk_idx_table[2] = {HHA_BTK_YSWTR00_01, HHA_BTK_YSWTR00_02};
+const J3DFrameCtrl::Attribute_e l_daObjHha_btk_mode_table[2] = {J3DFrameCtrl::LOOP_REPEAT_e, J3DFrameCtrl::LOOP_ONCE_e};
+const u16 l_daObjHha_splash_id_table[2] = {0x810D, 0x810E};
/* 00000078-00000170 .text init_data__14daObjHhaPart_cFffUsUcUc */
-void daObjHhaPart_c::init_data(float, float, unsigned short, unsigned char, unsigned char) {
- /* Nonmatching */
+void daObjHhaPart_c::init_data(float yPos, float yTar, u16 speed, u8 i, u8 IsMiddle) {
+ mPos.set(0, yPos, 0);
+ mPosTarget.set(0, yTar, 0);
+ partIdx = i;
+ mDeltaY = (yTar - yPos) / speed;
+ mPosDeltaDir = mPosTarget - mPos;
+ mPosDeltaDir.normalizeRS();
+ setExeProc(&daObjHhaPart_c::exe_normal);
+ cbDraw = &daObjHhaPart_c::draw_normal;
+ bMid = IsMiddle;
}
/* 00000170-00000224 .text set_mdl_area__14daObjHhaPart_cFPCci */
-void daObjHhaPart_c::set_mdl_area(const char*, int) {
- /* Nonmatching */
+BOOL daObjHhaPart_c::set_mdl_area(const char* arcname, int index) {
+ BOOL ret = FALSE;
+ J3DModelData* mdl_data = static_cast<J3DModelData*>(dComIfG_getObjectRes(arcname, index));
+ JUT_ASSERT(0x1d9, mdl_data != NULL);
+ if(mdl_data != NULL){
+ mpModel = mDoExt_J3DModel__create(mdl_data, 0, 0x11020203);
+ ret = TRUE;
+ }
+
+ return ret;
}
/* 00000224-000002A4 .text set_bgw__14daObjHhaPart_cFPCci */
-void daObjHhaPart_c::set_bgw(const char*, int) {
- /* Nonmatching */
+BOOL daObjHhaPart_c::set_bgw(const char* arcname, int index) {
+ BOOL ret = TRUE;
+ mpBgw = dBgW_NewSet(
+ static_cast<cBgD_t*>(dComIfG_getObjectRes(arcname, index)),
+ 1,
+ &mpModel->getBaseTRMtx()
+ );
+
+ if(mpBgw == NULL){
+ ret = FALSE;
+ }
+
+ return ret;
}
/* 000002A4-0000035C .text init_mtx__14daObjHhaPart_cF4cXyz5csXyz4cXyz */
-void daObjHhaPart_c::init_mtx(cXyz, csXyz, cXyz) {
- /* Nonmatching */
+void daObjHhaPart_c::init_mtx(cXyz currentPos, csXyz shapeAngle, cXyz scale) {
+ mpModel->setBaseScale(scale);
+ mDoMtx_stack_c::transS(currentPos);
+ mDoMtx_stack_c::ZXYrotM(shapeAngle);
+ mDoMtx_stack_c::transM(mPos);
+ mpModel->setBaseTRMtx(mDoMtx_stack_c::now);
+ mpModel->calc();
}
/* 0000035C-0000040C .text exe_normal__14daObjHhaPart_cFP10daObjHha_c */
-void daObjHhaPart_c::exe_normal(daObjHha_c*) {
- /* Nonmatching */
+void daObjHhaPart_c::exe_normal(daObjHha_c* parent) {
+ init_mtx(parent->current.pos, parent->shape_angle, parent->scale);
+
+ bool doMove;
+ if(mpBgw != NULL){
+ if(0 <= mpBgw->GetId() && mpBgw->GetId() < 0x100){
+ doMove = true;
+ }
+ else {
+ doMove = false;
+ }
+
+ if(doMove){
+ mpBgw->Move();
+ }
+ }
+
}
/* 0000040C-00000524 .text exe_move__14daObjHhaPart_cFP10daObjHha_c */
-void daObjHhaPart_c::exe_move(daObjHha_c*) {
- /* Nonmatching */
+void daObjHhaPart_c::exe_move(daObjHha_c* parent) {
+ mPos.y += mDeltaY;
+ cXyz positionDelta = mPosTarget - mPos;
+ if(mPosDeltaDir.getDotProduct(positionDelta) <= 0.0f){
+ mPos = mPosTarget;
+ setExeProc(&daObjHhaPart_c::exe_normal);
+ if(bMid == 0 && partIdx == 0){
+ dComIfGp_getVibration().StartShock(4, -0x21, cXyz(0.0,1.0,0.0));
+ }
+ }
+ exe_normal(parent);
}
/* 00000524-0000056C .text draw_normal__14daObjHhaPart_cFP10daObjHha_c */
-void daObjHhaPart_c::draw_normal(daObjHha_c*) {
- /* Nonmatching */
+void daObjHhaPart_c::draw_normal(daObjHha_c* parent) {
+ dKy_getEnvlight().setLightTevColorType(mpModel, &parent->tevStr);
+ mDoExt_modelUpdateDL(mpModel);
}
/* 0000056C-00000698 .text create_s__16daObjHhaSplash_cFUsP4cXyzffP5csXyz */
-void daObjHhaSplash_c::create_s(unsigned short, cXyz*, float, float, csXyz*) {
- /* Nonmatching */
+void daObjHhaSplash_c::create_s(unsigned short id, cXyz* pPos, float offsetY, float offsetZ, csXyz* pAngle) {
+ cXyz calcVec;
+
+ mPos.set(pPos->x, pPos->y + offsetY, pPos->z);
+ mDoMtx_stack_c::YrotS(pAngle->y);
+ mDoMtx_stack_c::multVec(&cXyz::BaseZ, &calcVec);
+ calcVec *= offsetZ;
+ mPos += calcVec;
+ mBasePos = mPos;
+ mAngle = *pAngle;
+ dComIfGp_particle_set(id, &mPos, &mAngle, NULL, 255, &mEcallBack);
+ bIsActive = true;
}
/* 00000698-000008AC .text create_area__15daObjHhaYgush_cFPCc */
-void daObjHhaYgush_c::create_area(const char*) {
- /* Nonmatching */
+BOOL daObjHhaYgush_c::create_area(const char* arcname) {
+ BOOL ret = FALSE;
+
+ J3DModelData* mdl_data = static_cast<J3DModelData*>(dComIfG_getObjectRes(arcname, HHA_BDL_YGSTP00));
+ JUT_ASSERT(0x280, mdl_data != NULL);
+
+ if(mdl_data != NULL){
+ mpModel = mDoExt_J3DModel__create(mdl_data, 0x80000, 0x11000222);
+ J3DModel* M_mdl = mpModel; // Renaming for assertion to match
+ JUT_ASSERT(0x289, M_mdl != NULL);
+
+ if((mpModel != 0)){
+ J3DAnmTextureSRTKey* btk_data = static_cast<J3DAnmTextureSRTKey*>(dComIfG_getObjectRes(arcname, HHA_BTK_YGSTP00));
+ JUT_ASSERT(0x290, btk_data != NULL);
+
+ if(mBtk.init(mpModel->getModelData(), btk_data, true, J3DFrameCtrl::LOOP_REPEAT_e, 1.0, 0, -1, false, 0) != false){
+ J3DAnmTransform* bck_data = static_cast<J3DAnmTransform*>(dComIfG_getObjectRes(arcname, HHA_BCK_YGSTP00));
+ JUT_ASSERT(0x295, bck_data != NULL);
+
+ if(mBck.init(mpModel->getModelData(), bck_data, true, J3DFrameCtrl::LOOP_REPEAT_e, 1.0, 0, -1, false) != false){
+ ret = TRUE;
+ }
+ }
+ }
+ }
+
+ return ret;
}
/* 000008AC-00000AD8 .text init_data__15daObjHhaYgush_cFP4cXyzfP5csXyzP4cXyzP12dKy_tevstr_cUc */
-void daObjHhaYgush_c::init_data(cXyz*, float, csXyz*, cXyz*, dKy_tevstr_c*, unsigned char) {
- /* Nonmatching */
+void daObjHhaYgush_c::init_data(cXyz* pPos, f32 zScale, csXyz* pAngle, cXyz* pScale, dKy_tevstr_c* tev, u8 isVisible) {
+ cXyz calcVec;
+ mDoMtx_stack_c::YrotS(pAngle->y);
+ mDoMtx_stack_c::multVec(&cXyz::BaseZ, &calcVec);
+ calcVec *= zScale;
+ mBasePos = *pPos + calcVec;
+ mPos = mBasePos;
+ mRot = *pAngle;
+ mScale = *pScale;
+ mTev = *tev;
+ bVisible = isVisible;
}
/* 00000AD8-00000B88 .text init_mtx__15daObjHhaYgush_cFv */
void daObjHhaYgush_c::init_mtx() {
- /* Nonmatching */
+ J3DModel* pModel = mpModel;
+ if(pModel != NULL){
+ pModel->setBaseScale(mScale);
+ mDoMtx_stack_c::transS(mPos);
+ mDoMtx_stack_c::ZXYrotM(mRot);
+ mDoMtx_stack_c::scaleM(13.0f, 1.0f, 11.0f);
+ mpModel->setBaseTRMtx(mDoMtx_stack_c::now);
+ }
}
/* 00000B88-00000C2C .text draw__15daObjHhaYgush_cFv */
-BOOL daObjHhaYgush_c::draw() {
- /* Nonmatching */
+void daObjHhaYgush_c::draw() {
+ if(check_draw() && mpModel != NULL){
+ dKy_getEnvlight().settingTevStruct(TEV_TYPE_BG1, &mPos, &mTev);
+ dKy_getEnvlight().setLightTevColorType(mpModel, &mTev);
+ mBtk.entry(mpModel->getModelData());
+ mBck.entry(mpModel->getModelData());
+ mDoExt_modelUpdateDL(mpModel);
+ }
}
+const char daObjHha_c::M_arcname[4] = "Hha";
+
/* 00000C2C-00000C4C .text solidHeapCB__10daObjHha_cFP10fopAc_ac_c */
-void daObjHha_c::solidHeapCB(fopAc_ac_c*) {
- /* Nonmatching */
+int daObjHha_c::solidHeapCB(fopAc_ac_c* this_i) {
+ return static_cast<daObjHha_c*>(this_i)->create_heap();
}
/* 00000C4C-00000E48 .text create_heap__10daObjHha_cFv */
-void daObjHha_c::create_heap() {
- /* Nonmatching */
+BOOL daObjHha_c::create_heap() {
+ int i;
+ BOOL ret = TRUE;
+
+ for(i = 0; i < 2; i++){
+ if( (mPartA[i].set_mdl_area(M_arcname, l_daObjHha_bdl_idx_table[i]) == FALSE) || (mPartA[i].set_bgw(M_arcname, l_daObjHha_dzb_idx_table[i]) == FALSE) ){
+ ret = FALSE;
+ break;
+ }
+ }
+
+ if(ret != FALSE){
+ J3DModelData* mdl_data = static_cast<J3DModelData*>(dComIfG_getObjectRes(M_arcname, HHA_BDL_YSWTR00));
+ JUT_ASSERT(0x324, mdl_data != NULL);
+ if(mdl_data != 0){
+ mpModel = mDoExt_J3DModel__create(mdl_data, 0x80000, 0x11000222);
+ for(i = 0; i < 2; i++){
+ J3DAnmTextureSRTKey* btk_data = static_cast<J3DAnmTextureSRTKey*>(dComIfG_getObjectRes(M_arcname, l_daObjHha_btk_idx_table[i]));
+ JUT_ASSERT(0x32f, btk_data != NULL);
+ if(mBtkA[i].init(mdl_data, btk_data, true, l_daObjHha_btk_mode_table[i], 1.0, 0, -1, false, 0) == FALSE){
+ ret = FALSE;
+ break;
+ }
+ }
+ }
+ }
+
+ if(ret != FALSE){
+ ret = mYgush.create_area(M_arcname);
+ }
+
+ return ret;
}
/* 00000E48-000011AC .text _create__10daObjHha_cFv */
s32 daObjHha_c::_create() {
- /* Nonmatching */
+ static const float pos_y[4] = {150.0f, -150.0f, 0.0f, 0.0f};
+ static const float tar_y[4] = {0.0f, 0.0f, 150.0f, -150.0f};
+ static const u16 move_frame[2] = {55, 30};
+ static const float splash_y[2] = {-1400.0f, -1450.0f};
+ static const float splash_z[2] = {0.0f, 100.0f};
+
+
+ fopAcM_SetupActor(this, daObjHha_c);
+ s32 ret = dComIfG_resLoad(&mPhs, M_arcname);
+ if(ret == cPhs_COMPLEATE_e){
+ ret = cPhs_ERROR_e;
+ if(fopAcM_entrySolidHeap(this, &solidHeapCB, 0x3C80) != false){
+ mSwitchNo = fpcM_GetParam(this) & 0xFF;
+ mIsMiddle = fpcM_GetParam(this) >> 8;
+ mEventIdx = dComIfGp_evmng_getEventIdx("hha_close");
+
+ if(mIsMiddle == 0xf)
+ mIsMiddle = 0;
+
+ if(check_sw() != FALSE){
+ mIsMiddle = (mIsMiddle + 1) & 1; // Negate and make sure that mIsMiddle is just 0 or 1
+ mState = State_CLOSED;
+ }
+ mPartTimer = -1;
+
+ int posIdx = 2 * (mIsMiddle & 1);
+ for(int i = 0; i < 2; i++){
+ mPartA[i].init_data(pos_y[posIdx], tar_y[posIdx], move_frame[mIsMiddle], i, mIsMiddle);
+ dComIfG_Bgsp()->Regist(mPartA[i].mpBgw, this);
+ mPartA[i].init_mtx(current.pos, shape_angle, scale);
+ posIdx++;
+ }
+
+ mPosOffset.set(0.0f, -1400.0f, 50.0f);
+ fWtrScale = 1.0f;
+
+ for(int i = 0; i < 2; i++){
+ mSplashA[i].create_s(l_daObjHha_splash_id_table[i], &current.pos, splash_y[i], splash_z[i], &current.angle);
+ }
+
+ if(mIsMiddle == 0){
+ set_tex(36.0f, 0.0f, 1);
+ mHitboxActive = true;
+ mYgush.init_data(&current.pos, 600.0f, &current.angle, &scale, &tevStr, true);
+ mWaterSound = true;
+ }
+ else {
+ set_tex(0.0f, 0.0f, 1);
+ mSplashA[0].stop_particle();
+ mSplashA[1].stop_particle();
+ mYgush.init_data(&current.pos, 600.0f, &current.angle, &scale, &tevStr, false);
+ mWaterSound = false;
+ }
+ mYgush.init_mtx();
+ init_mtx();
+ init_co();
+ fopAcM_SetMtx(this, mPartA[0].mpModel->getBaseTRMtx());
+ fopAcM_setCullSizeBox(this, -700.0f, -1600.0f, -400.0f, 700.0f, 120.0f, 1000.0f);
+ ret = cPhs_COMPLEATE_e;
+ }
+ }
+
+ return ret;
}
/* 000018EC-000019EC .text _delete__10daObjHha_cFv */
-BOOL daObjHha_c::_delete() {
- /* Nonmatching */
+bool daObjHha_c::_delete() {
+ int i;
+ if(heap != NULL){
+ for(i = 0; i < 2; i++){
+ cBgW* bgw = mPartA[i].mpBgw;
+ if(bgw != NULL){
+ bool toErase;
+ if(bgw->GetId() >= 0 && bgw->GetId() < 0x100){
+ toErase = true;
+ }
+ else {
+ toErase = false;
+ }
+
+ if(toErase){
+ dComIfG_Bgsp()->Release(bgw);
+ mPartA[i].mpBgw = NULL;
+ }
+ }
+ }
+ }
+
+ for(i = 0; i < 2; i++){
+ mSplashA[i].delete_s();
+ }
+
+ dComIfG_resDelete(&mPhs, M_arcname);
+
+ return TRUE;
}
/* 000019EC-00001A24 .text check_sw__10daObjHha_cFv */
-void daObjHha_c::check_sw() {
- /* Nonmatching */
+inline BOOL daObjHha_c::check_sw() {
+ return fopAcM_isSwitch(this, mSwitchNo);
}
/* 00001A24-00001A40 .text set_tex__10daObjHha_cFffi */
-void daObjHha_c::set_tex(float, float, int) {
- /* Nonmatching */
+void daObjHha_c::set_tex(float frame, float speed, int idx) {
+ mBtkA[idx].setFrame(frame);
+ mBtkA[idx].setPlaySpeed(speed);
}
/* 00001A40-00001B00 .text init_mtx__10daObjHha_cFv */
void daObjHha_c::init_mtx() {
- /* Nonmatching */
+ mpModel->setBaseScale(scale);
+ mDoMtx_stack_c::transS( current.pos);
+ mDoMtx_stack_c::ZXYrotM(shape_angle);
+ mDoMtx_stack_c::transM(mPosOffset);
+ mDoMtx_stack_c::scaleM(1.0, 1.0, fWtrScale);
+ mpModel->setBaseTRMtx(mDoMtx_stack_c::now);
+ mpModel->calc();
}
/* 00001B00-00001C64 .text init_co__10daObjHha_cFv */
void daObjHha_c::init_co() {
- /* Nonmatching */
+ const float yOffset = -400.0f, zOffset = -110.0f;
+ cXyz center;
+
+ mDoMtx_stack_c::YrotS(current.angle.y);
+ mDoMtx_stack_c::multVec(&cXyz::BaseZ, &center);
+ center *= 460.0f;
+ center.y = get_water_h();
+ center += current.pos;
+
+ mCylStts.Init(0xff, 0xff, this);
+ mCyl.SetStts(&mCylStts);
+ mCyl.Set(M_cyl_data);
+ mCyl.SetC(center);
+
+ bool doSphInit = false;
+ if(!check_sw() && mIsMiddle == 0){
+ doSphInit = true;
+ }
+
+ if(doSphInit){
+ mSphStts.Init(0xff, 0xff, this);
+ mSph.SetStts(&mSphStts);
+ mSph.Set(M_sph_data);
+ center.set(current.pos.x, current.pos.y + yOffset, current.pos.z + zOffset);
+ mSph.SetC(center);
+ mSph.SetR(220.0f);
+ }
}
/* 00001C64-00001E14 .text get_water_h__10daObjHha_cFv */
-void daObjHha_c::get_water_h() {
- /* Nonmatching */
+float daObjHha_c::get_water_h() {
+ dBgS_WtrChk waterChk;
+ cXyz chkPos = current.pos;
+ float ret = current.pos.y;
+
+ cXyz offVec = cXyz::BaseZ;
+ mDoMtx_stack_c::YrotS(current.angle.y);
+ mDoMtx_stack_c::multVec(&cXyz::BaseZ, &offVec);
+ offVec *= 400.0f;
+ chkPos += offVec;
+ if((dBgS_SplGrpChk_In_ObjGnd(chkPos, &waterChk, 1.0) & 0xff) != false){
+ ret = waterChk.GetHeight();
+ }
+ return ret;
}
/* 00001F38-00001F68 .text set_splash_bottom_h__10daObjHha_cFv */
void daObjHha_c::set_splash_bottom_h() {
- /* Nonmatching */
+ mSplashA[0].set_pos_y(get_water_h());
}
/* 00001F68-0000201C .text daObjHha_get_r__Fs */
-void daObjHha_get_r(short) {
- /* Nonmatching */
+cXyz daObjHha_get_r(short yAngle) {
+ cXyz calcVec = cXyz::BaseZ;
+ float waterLevel = daTagWaterlevel::Act_c::get_now() * -190.0f;
+ mDoMtx_stack_c::YrotS(yAngle);
+ mDoMtx_stack_c::multVec(&cXyz::BaseZ, &calcVec);
+ calcVec *= waterLevel;
+ return calcVec;
}
/* 0000201C-000020C0 .text set_splash_bottom_r__10daObjHha_cFv */
void daObjHha_c::set_splash_bottom_r() {
- /* Nonmatching */
+ cXyz pos = cXyz::BaseZ;
+ pos = daObjHha_get_r(current.angle.y);
+ pos += mSplashA[0].get_base_pos();
+ pos.y = mSplashA[0].get_pos_y();
+ mSplashA[0].set_pos(pos);
}
/* 000020C0-000021CC .text set_splash_bottom_stop_r__10daObjHha_cFv */
void daObjHha_c::set_splash_bottom_stop_r() {
- /* Nonmatching */
+ cXyz calcVec = cXyz::BaseZ;
+ float scaling = (1.0f - (mWtrTimer - 15) / 75.0f) * -300.0f;
+ mDoMtx_stack_c::YrotS(current.angle.y);
+ mDoMtx_stack_c::multVec(&cXyz::BaseZ, &calcVec);
+ calcVec *= scaling;
+ calcVec += mSplashA[0].get_pos();
+ calcVec.y = mSplashA[0].get_pos_y();
+ mSplashA[0].set_pos(calcVec);
}
/* 000021CC-00002470 .text water_manager__10daObjHha_cFv */
void daObjHha_c::water_manager() {
- /* Nonmatching */
+ set_splash_bottom_h();
+ set_splash_bottom_r();
+ switch(mWtrState){
+ case 0:
+ break;
+
+ case 1:
+ fWtrScale -= 11.0f/1800;
+ if(fWtrScale < fWtrScaleMin){
+ fWtrScale = fWtrScaleMin;
+ }
+ if(mWtrTimer == 34){
+ set_tex(37.0f,1.0f,1);
+ }
+ if(mWtrTimer == 15){
+ mSplashA[1].stop_particle();
+ mSplashA[1].delete_s();
+ }
+ else if(mWtrTimer > 15){
+ set_splash_bottom_stop_r();
+ }
+ mWtrTimer--;
+ if(mWtrTimer == 0){
+ mWtrState = 0;
+ mSplashA[0].stop_particle();
+ mSplashA[0].delete_s();
+ mHitboxActive = false;
+ mYgush.disp_off();
+ mWaterSound = false;
+ }
+ break;
+
+ case 2:
+ if(mWtrTimer == 35){
+ mSplashA[1].play_particle();
+ set_tex(0.0f,1.0f,1);
+ }
+ mWtrTimer--;
+ if( mSplashA[0].chk_stop() && mWtrTimer <= daTagWaterlevel::Act_c::get_now() * 5.0f + 10.0f){
+ mSplashA[0].play_particle();
+ mYgush.disp_on();
+ mWaterSound = true;
+ }
+ if(mWtrTimer == 0){
+ set_tex(36.0, 0.0, 1);
+ mWtrState = 0;
+ mHitboxActive = true;
+ }
+ break;
+ }
+
+ for(int i = 0; i < 2; i++){
+ mBtkA[i].play();
+ }
+ init_mtx();
}
/* 00002470-0000259C .text part_manager__10daObjHha_cFv */
void daObjHha_c::part_manager() {
- /* Nonmatching */
+ if(mPartTimer == 0){
+ mPartA[0].start_move();
+ mPartA[1].start_move();
+ mPartTimer = -1;
+ if(mIsMiddle == 0){
+ fopAcM_seStartCurrent(this, JA_SE_OBJ_F_WATERGATE_CL, 0);
+ }
+ }
+ else if(mPartTimer > 0)
+ mPartTimer -= 1;
+
+ for(int i = 0; i < 2; i++){
+ mPartA[i].execute(this);
+ }
}
/* 0000259C-00002658 .text ygush_manager__10daObjHha_cFv */
void daObjHha_c::ygush_manager() {
- /* Nonmatching */
+ cXyz ygushPos;
+ // Weird to cast "bVisible" here, but i can't get things to match otherwise
+ if( static_cast<BOOL>(mYgush.bVisible) != FALSE ){
+ ygushPos = daObjHha_get_r(current.angle.y);
+ ygushPos += mYgush.get_base_pos();
+ ygushPos.y = get_water_h();
+ mYgush.anm_play(ygushPos);
+ }
}
/* 00002658-000028E4 .text _execute__10daObjHha_cFv */
-BOOL daObjHha_c::_execute() {
- /* Nonmatching */
+bool daObjHha_c::_execute() {
+ switch(mState){
+ case State_OPEN: if(check_sw()){
+ if(mIsMiddle == 0){
+ if(eventInfo.mCommand != dEvtCmd_INDEMO_e){
+ fopAcM_orderOtherEventId(this, mEventIdx);
+ eventInfo.onCondition(2);
+ }
+ else {
+ mDoAud_seStart(JA_SE_READ_RIDDLE_1);
+ mWtrState = 1;
+ mWtrTimer = 90;
+ mPartTimer = 65;
+ mState = State_SWITCHING;
+ }
+ }
+ else {
+ if(dComIfGp_evmng_startCheck(mEventIdx) != FALSE){
+ mWtrState = 2;
+ mWtrTimer = 35;
+ mPartTimer = 0;
+ mState = State_CLOSED;
+ }
+ }
+ } break;
+
+
+ case State_SWITCHING: if(dComIfGp_evmng_endCheck(mEventIdx)){
+ dComIfGp_event_reset();
+ mState = State_CLOSED;
+ }
+ break;
+
+ case State_CLOSED:
+ break;
+ }
+
+ part_manager();
+ water_manager();
+ ygush_manager();
+
+ if(mWaterSound != false)
+ fopAcM_seStartCurrent(this, JA_SE_ATM_WATER_GATE,0);
+
+ if(mHitboxActive != false){
+ cXyz calcVec = mCyl.GetC();
+ calcVec.y = get_water_h();
+ mCyl.SetC(calcVec);
+ dComIfG_Ccsp()->Set(&mCyl);
+ bool isSphActive = (!check_sw() && mIsMiddle == 0);
+ if(isSphActive){
+ dComIfG_Ccsp()->Set(&mSph);
+ }
+ }
+
+ return TRUE;
}
/* 000028E4-000029F4 .text _draw__10daObjHha_cFv */
-BOOL daObjHha_c::_draw() {
- /* Nonmatching */
+bool daObjHha_c::_draw() {
+ int i;
+
+ dKy_getEnvlight().settingTevStruct(TEV_TYPE_BG0, &current.pos, &tevStr);
+ for(i = 0; i < 2; i++){
+ mPartA[i].draw(this);
+ }
+
+ if(mpModel != NULL){
+ dKy_getEnvlight().settingTevStruct(TEV_TYPE_ACTOR, &current.pos, &tevStr);
+ dKy_getEnvlight().setLightTevColorType(mpModel, &tevStr);
+ for(i = 0; i < 2; i++){
+ mBtkA[i].entry(mpModel->getModelData());
+ }
+ mDoExt_modelUpdateDL(mpModel);
+ }
+ mYgush.draw();
+ return TRUE;
}
namespace {
/* 000029F4-00002A14 .text Mthd_Create__25@unnamed@d_a_obj_hha_cpp@FPv */
-void Mthd_Create(void*) {
- /* Nonmatching */
+s32 Mthd_Create(void* this_i) {
+ return static_cast<daObjHha_c*>(this_i)->_create();
}
/* 00002A14-00002A38 .text Mthd_Delete__25@unnamed@d_a_obj_hha_cpp@FPv */
-void Mthd_Delete(void*) {
- /* Nonmatching */
+BOOL Mthd_Delete(void* this_i) {
+ return static_cast<daObjHha_c*>(this_i)->_delete();
}
/* 00002A38-00002A5C .text Mthd_Execute__25@unnamed@d_a_obj_hha_cpp@FPv */
-void Mthd_Execute(void*) {
- /* Nonmatching */
+BOOL Mthd_Execute(void* this_i) {
+ return static_cast<daObjHha_c*>(this_i)->_execute();
}
/* 00002A5C-00002A80 .text Mthd_Draw__25@unnamed@d_a_obj_hha_cpp@FPv */
-void Mthd_Draw(void*) {
- /* Nonmatching */
+BOOL Mthd_Draw(void* this_i) {
+ return static_cast<daObjHha_c*>(this_i)->_draw();
}
/* 00002A80-00002A88 .text Mthd_IsDelete__25@unnamed@d_a_obj_hha_cpp@FPv */
-void Mthd_IsDelete(void*) {
- /* Nonmatching */
+BOOL Mthd_IsDelete(void*) {
+ return TRUE;
}
static actor_method_class Hha_Mthd_Table = {