summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTakaRikka <38417346+TakaRikka@users.noreply.github.com>2026-06-28 15:40:28 -0700
committerGitHub <noreply@github.com>2026-06-28 18:40:28 -0400
commit88a753265e537c7ee9b9b620f31e69f776b124ae (patch)
treebd4568a88e8d5034470a0d1e632288e77fef8f49 /src
parent1eb337da18c1001def3c91746fbaf4be8e045c1e (diff)
water_mark / wpillar done, minigame_starter wip (#1069)
* d_minigame_starter attempt * water_mark / wpillar done * review changes
Diffstat (limited to 'src')
-rw-r--r--src/d/d_minigame_starter.cpp367
-rw-r--r--src/d/d_water_mark.cpp173
-rw-r--r--src/d/d_wpillar.cpp177
3 files changed, 649 insertions, 68 deletions
diff --git a/src/d/d_minigame_starter.cpp b/src/d/d_minigame_starter.cpp
index b383c345..0f3a23a5 100644
--- a/src/d/d_minigame_starter.cpp
+++ b/src/d/d_minigame_starter.cpp
@@ -7,88 +7,393 @@
#include "d/d_minigame_starter.h"
#include "f_op/f_op_msg.h"
#include "f_op/f_op_msg_mng.h"
+#include "JSystem/J2DGraph/J2DOrthoGraph.h"
+#include "d/d_meter.h"
+#include "stdio.h"
+
+static s16 cdFrame0 = 7;
+static s16 cdFrame1 = 3;
+static s16 tmFrame = 5;
+static s16 cdFrame2 = 15;
+static s16 cdFrame3 = 5;
+static s16 cdFrame4 = 7;
+static s16 cdFrame5 = 3;
+static s16 cdFrame6 = 4;
+static s16 cdFrame7 = 4;
+static s16 cdFrame8 = 6;
+
+#if VERSION > VERSION_JPN
+static s16 dMinigame_Starter_tex_number = 3;
+#endif
/* 80205FE8-80206124 .text _create__19dMinigame_Starter_cFv */
-void dMinigame_Starter_c::_create() {
- /* Nonmatching */
+// NONMATCHING - missing b
+cPhs_State dMinigame_Starter_c::_create() {
+ if (dComIfG_resLoad(&mPhase, "Mgst") == cPhs_COMPLEATE_e) {
+ dRes_info_c* resInfo = dComIfG_getObjectResInfo("Mgst");
+ JUT_ASSERT(VERSION_SELECT(80, 80, 86, 86), resInfo != NULL);
+
+ mHeap = mDoExt_createSolidHeapFromGameToCurrent(VERSION_SELECT(0x13E0, 0x13E0, 0x14C0, 0x1AC0), 0x20);
+ if (mHeap != NULL) {
+ mStarterScrn = new dDlst_StarterScrnDraw_c();
+
+#if VERSION == VERSION_PAL
+ char resname[32];
+ sprintf(resname, "ship_race1_%d.blo", dComIfGs_getPalLanguage());
+ mStarterScrn->setScreen(resname, resInfo->getArchive());
+#else
+ mStarterScrn->setScreen("ship_race1.blo", resInfo->getArchive());
+#endif
+ mDoExt_restoreCurrentHeap();
+ mDoExt_adjustSolidHeap(mHeap);
+ } else {
+ return cPhs_ERROR_e;
+ }
+
+ mStatus = 0;
+ mTimer = 0;
+ field_0x10e = 3;
+ }
+
+ return cPhs_COMPLEATE_e;
}
/* 80206124-8020629C .text _execute__19dMinigame_Starter_cFv */
-void dMinigame_Starter_c::_execute() {
- /* Nonmatching */
+// NONMATCHING - instruction ordering
+BOOL dMinigame_Starter_c::_execute() {
+ int var_r30 = (cdFrame0 + cdFrame1 + tmFrame + cdFrame2 + cdFrame3) - 30;
+ int var_r29 = (cdFrame4 + cdFrame5 + cdFrame6 + cdFrame7 + cdFrame8) - 23;
+
+ if (mStatus == 0) {
+ return FALSE;
+ }
+
+ int var_r31 = var_r30 * 3;
+
+ if (mTimer < (var_r31 + var_r29) + 137) {
+ mTimer++;
+ if (mTimer >= (var_r31 + var_r29) + 89) {
+ mStatus = 2;
+ }
+ } else {
+ mStatus = 3;
+ }
+
+ if (mTimer <= var_r30 + 30) {
+ mStarterScrn->anime1(2);
+ }
+
+ if (mTimer >= var_r30 + 28 && mTimer <= (var_r30 * 2) + 57) {
+ mStarterScrn->anime1(1);
+ }
+
+ if (mTimer >= (var_r30 * 2) + 55 && mTimer <= var_r31 + 84) {
+ mStarterScrn->anime1(0);
+ }
+
+ if (mTimer >= var_r31 + 84 && mTimer <= (var_r31 + var_r29) + 107) {
+ mStarterScrn->anime2();
+ }
+
+ return TRUE;
}
/* 8020629C-802062DC .text _draw__19dMinigame_Starter_cFv */
-void dMinigame_Starter_c::_draw() {
- /* Nonmatching */
+BOOL dMinigame_Starter_c::_draw() {
+ dComIfGd_set2DOpa(mStarterScrn);
+ return TRUE;
}
/* 802062DC-80206328 .text _delete__19dMinigame_Starter_cFv */
-void dMinigame_Starter_c::_delete() {
- /* Nonmatching */
+BOOL dMinigame_Starter_c::_delete() {
+ if (mHeap != NULL) {
+ mDoExt_destroySolidHeap(mHeap);
+ }
+
+ dComIfG_resDelete(&mPhase, "Mgst");
+ return TRUE;
}
/* 80206328-8020634C .text startCheck__19dMinigame_Starter_cFv */
BOOL dMinigame_Starter_c::startCheck() {
- /* Nonmatching */
+ return mStatus == 3 || mStatus == 2;
}
/* 8020634C-80206360 .text deleteCheck__19dMinigame_Starter_cFv */
BOOL dMinigame_Starter_c::deleteCheck() {
- /* Nonmatching */
+ return mStatus == 3;
}
/* 80206360-802064DC .text setScreen__23dDlst_StarterScrnDraw_cFPCcP10JKRArchive */
-void dDlst_StarterScrnDraw_c::setScreen(const char*, JKRArchive*) {
- /* Nonmatching */
+void dDlst_StarterScrnDraw_c::setScreen(const char* i_layoutName, JKRArchive* i_archive) {
+ mpScrn = new J2DScreen();
+ mpScrn->set(i_layoutName, i_archive);
+
+#if VERSION == VERSION_PAL
+ if (dComIfGs_getPalLanguage() == 2) {
+ dMinigame_Starter_tex_number = 7;
+ for (int i = 0; i < dMinigame_Starter_tex_number; i++) {
+ static u32 label_t_fr[] = {
+ 'gog',
+ 'goo',
+ 'goex',
+ 'got',
+ 'goe2',
+ 'goz',
+ 'goe3',
+ };
+ fopMsgM_setPaneData(&field_0x008[i], mpScrn, label_t_fr[i]);
+ }
+ } else if (dComIfGs_getPalLanguage() == 0) {
+ dMinigame_Starter_tex_number = 3;
+ for (int i = 0; i < dMinigame_Starter_tex_number; i++) {
+ static u32 label_t_uk[] = {
+ 'gog',
+ 'goo',
+ 'goex',
+ };
+ fopMsgM_setPaneData(&field_0x008[i], mpScrn, label_t_uk[i]);
+ }
+ } else {
+ dMinigame_Starter_tex_number = 4;
+ for (int i = 0; i < dMinigame_Starter_tex_number; i++) {
+ static u32 label_t[] = {
+ 'gog',
+ 'goo',
+ 'goex',
+ 'goe2',
+ };
+ fopMsgM_setPaneData(&field_0x008[i], mpScrn, label_t[i]);
+ }
+ }
+#elif VERSION == VERSION_USA
+ for (int i = 0; i < dMinigame_Starter_tex_number; i++) {
+ static u32 label_t[] = {
+ 'gog',
+ 'goo',
+ 'goex',
+ };
+ fopMsgM_setPaneData(&field_0x008[i], mpScrn, label_t[i]);
+ }
+#else
+ fopMsgM_setPaneData(&field_0x008[0], mpScrn, 'gog');
+ fopMsgM_setPaneData(&field_0x008[1], mpScrn, 'goo');
+ fopMsgM_setPaneData(&field_0x008[2], mpScrn, 'goex');
+#endif
+
+ fopMsgM_setPaneData(&field_0x190, mpScrn, 'dmgo');
+ fopMsgM_setPaneData(&field_0x1c8[0], mpScrn, 'go1');
+ fopMsgM_setPaneData(&field_0x1c8[1], mpScrn, 'go2');
+ fopMsgM_setPaneData(&field_0x1c8[2], mpScrn, 'go3');
+ fopMsgM_setPaneData(&field_0x270[0], mpScrn, 'go12');
+ fopMsgM_setPaneData(&field_0x270[1], mpScrn, 'go22');
+ fopMsgM_setPaneData(&field_0x270[2], mpScrn, 'go32');
}
/* 802064DC-80206908 .text anime1__23dDlst_StarterScrnDraw_cFi */
-void dDlst_StarterScrnDraw_c::anime1(int) {
- /* Nonmatching */
+// NONMATCHING - a lot of float math stuff
+BOOL dDlst_StarterScrnDraw_c::anime1(int i_no) {
+ f32 temp_f1 = -8.0f;
+ int rt = 0;
+
+ s16 var_r30 = cdFrame0;
+ s16 var_r31 = cdFrame0 + cdFrame1;
+ s16 temp_r6 = cdFrame0 + cdFrame1 + tmFrame;
+ s16 var_r27 = cdFrame2 + temp_r6;
+ s16 temp_r7 = cdFrame3 + var_r27;
+
+ field_0x1c8[i_no].mUserArea++;
+
+ s16 temp_r0 = field_0x1c8[i_no].mUserArea;
+ if (temp_r0 <= var_r30) {
+ fopMsgM_paneScaleXY(&field_0x270[i_no], ((f32)field_0x1c8[i_no].mUserArea * (f32)field_0x1c8[i_no].mUserArea) / ((f32)var_r31 * (f32)var_r31) * 0.3f + 0.7f);
+ fopMsgM_setNowAlpha(&field_0x270[i_no], ((f32)field_0x1c8[i_no].mUserArea * (f32)field_0x1c8[i_no].mUserArea) / ((f32)var_r30 * (f32)var_r30));
+ } else if (temp_r0 <= var_r31) {
+ f32 var_f31 = ((f32)(temp_r0 - var_r30) * (f32)(temp_r0 - var_r30)) / ((f32)(var_r31 - var_r30) * (f32)(var_r31 - var_r30));
+ fopMsgM_paneScaleXY(&field_0x1c8[i_no], var_f31 * 0.3f + 0.7f);
+ fopMsgM_setNowAlpha(&field_0x1c8[i_no], var_f31);
+
+ fopMsgM_paneScaleXY(&field_0x270[i_no], ((f32)field_0x1c8[i_no].mUserArea * (f32)field_0x1c8[i_no].mUserArea) / ((f32)var_r31 * (f32)var_r31) * 0.3f + 0.7f);
+ fopMsgM_setNowAlpha(&field_0x270[i_no], 1.0f - var_f31);
+
+ if (field_0x1c8[i_no].mUserArea == var_r31) {
+ mDoAud_seStart(JA_SE_SGAME_COUNTDOWN, NULL);
+ }
+ } else if (temp_r6 > temp_r0) {
+ if (temp_r0 <= var_r27) {
+ if (((temp_r6 - temp_r0) / ((var_r27 - temp_r0) / 4)) % 2)
+ temp_f1 *= -1.0f;
+ setRotate(&field_0x1c8[i_no], temp_f1);
+ } else if (temp_r0 < temp_r7) {
+ f32 var_f31 = temp_r0 - var_r27;
+ fopMsgM_paneScaleXY(&field_0x1c8[i_no], ((((f32)temp_r0 - var_r27) * ((f32)temp_r0 - var_r27)) / var_f31) * 2.0f + 1.0f);
+
+ f32 temp_f1_2 = ((f32)(field_0x1c8[i_no].mUserArea - var_r27) * (f32)(field_0x1c8[i_no].mUserArea - var_r27)) / var_f31;
+ fopMsgM_setNowAlpha(&field_0x1c8[i_no], 1.0f - temp_f1_2);
+ } else {
+ fopMsgM_paneScaleXY(&field_0x1c8[i_no], 3.0f);
+ fopMsgM_setNowAlphaZero(&field_0x1c8[i_no]);
+ rt = 1;
+ }
+ }
+
+ return rt;
}
/* 80206908-80206CB0 .text anime2__23dDlst_StarterScrnDraw_cFv */
-void dDlst_StarterScrnDraw_c::anime2() {
- /* Nonmatching */
+// NONMATCHING - a lot of float math stuff
+BOOL dDlst_StarterScrnDraw_c::anime2() {
+ int rt = 0;
+
+ s16 var_r30 = cdFrame4;
+ s16 var_r31 = cdFrame4 + cdFrame5;
+ s16 temp_r6 = cdFrame4 + cdFrame5 + cdFrame6;
+ s16 var_r27 = cdFrame7 + temp_r6;
+ s16 temp_r7 = cdFrame8 + var_r27;
+
+ field_0x008[0].mUserArea++;
+
+ s16 temp_r0 = field_0x008[0].mUserArea;
+ if (temp_r0 <= var_r30) {
+ f32 var_f31 = ((f32)field_0x008[0].mUserArea * (f32)field_0x008[0].mUserArea) / ((f32)var_r30 * (f32)var_r30);
+ scaleAnime((3.0f - var_f31 * 2.2f) * g_menuHIO.field_0x14);
+ setRotate(&field_0x190, 90.0f - var_f31 * 65.0f);
+ fopMsgM_setNowAlpha(&field_0x008[0], var_f31);
+ } else if (temp_r0 <= var_r31) {
+ f32 var_f31 = ((f32)(temp_r0 - var_r30) * (f32)(temp_r0 - var_r30)) / ((f32)(var_r31 - var_r30) * (f32)(var_r31 - var_r30));
+ scaleAnime((0.8f - var_f31 * -0.2f) * g_menuHIO.field_0x14);
+
+ if (field_0x008[0].mUserArea == var_r31) {
+ mDoAud_seStart(JA_SE_SGAME_COUNT_GO, NULL);
+ }
+ } else if (temp_r6 > temp_r0) {
+ if (temp_r0 <= var_r27) {
+ f32 var_f31 = ((f32)(temp_r0 - temp_r6) * (f32)(temp_r0 - temp_r6)) / ((f32)(var_r27 - temp_r6) * (f32)(var_r27 - temp_r6));
+ setRotate(&field_0x190, 25.0f - var_f31 * -35.0f);
+ } else if (temp_r0 < temp_r7) {
+ f32 var_f31 = ((f32)(temp_r0 - var_r27) * (f32)(temp_r0 - var_r27)) / ((f32)(temp_r0 - temp_r7) * (f32)(temp_r0 - temp_r7));
+ f32 var_f30 = 1.0f - var_f31;
+ scaleAnime((1.0f - var_f31 * 0.5f) * g_menuHIO.field_0x14);
+ setRotate(&field_0x190, 60.0f - var_f31 * -210.0f);
+ fopMsgM_setNowAlpha(&field_0x008[0], var_f30);
+ } else {
+ scaleAnime(g_menuHIO.field_0x14 * 0.5f);
+ setRotate(&field_0x190, -90.0f);
+ fopMsgM_setNowAlphaZero(&field_0x008[0]);
+ rt = 1;
+ }
+ }
+
+ return rt;
}
/* 80206CB0-80206DA4 .text scaleAnime__23dDlst_StarterScrnDraw_cFf */
-void dDlst_StarterScrnDraw_c::scaleAnime(f32) {
- /* Nonmatching */
+void dDlst_StarterScrnDraw_c::scaleAnime(f32 i_scale) {
+ field_0x190.mSize.x = field_0x190.mSizeOrig.x * i_scale;
+ field_0x190.mSize.y = field_0x190.mSizeOrig.y * i_scale;
+
+ #if VERSION > VERSION_JPN
+ for (int i = 0; i < dMinigame_Starter_tex_number; i++) {
+ field_0x008[i].mSize.x = field_0x008[i].mSizeOrig.x * i_scale;
+ field_0x008[i].mSize.y = field_0x008[i].mSizeOrig.y * i_scale;
+ }
+ #else
+ field_0x008[0].mSize.x = field_0x008[0].mSizeOrig.x * i_scale;
+ field_0x008[0].mSize.y = field_0x008[0].mSizeOrig.y * i_scale;
+ field_0x008[1].mSize.x = field_0x008[1].mSizeOrig.x * i_scale;
+ field_0x008[1].mSize.y = field_0x008[1].mSizeOrig.y * i_scale;
+ field_0x008[2].mSize.x = field_0x008[2].mSizeOrig.x * i_scale;
+ field_0x008[2].mSize.y = field_0x008[2].mSizeOrig.y * i_scale;
+ #endif
+
+ field_0x190.mPosCenter.x = field_0x190.mPosCenterOrig.x;
+ field_0x190.mPosCenter.y = field_0x190.mPosCenterOrig.y;
+ fopMsgM_cposMove(&field_0x190);
+
+ #if VERSION > VERSION_JPN
+ for (int i = 0; i < dMinigame_Starter_tex_number; i++) {
+ field_0x008[i].mPosCenter.x = field_0x008[i].mPosCenterOrig.x * i_scale;
+ field_0x008[i].mPosCenter.y = field_0x008[i].mPosCenterOrig.y * i_scale;
+ fopMsgM_cposMove(&field_0x008[i]);
+ }
+ #else
+ field_0x008[0].mPosCenter.x = field_0x008[0].mPosCenterOrig.x * i_scale;
+ field_0x008[0].mPosCenter.y = field_0x008[0].mPosCenterOrig.y * i_scale;
+ fopMsgM_cposMove(&field_0x008[0]);
+
+ field_0x008[1].mPosCenter.x = field_0x008[1].mPosCenterOrig.x * i_scale;
+ field_0x008[1].mPosCenter.y = field_0x008[1].mPosCenterOrig.y * i_scale;
+ fopMsgM_cposMove(&field_0x008[1]);
+
+ field_0x008[2].mPosCenter.x = field_0x008[2].mPosCenterOrig.x * i_scale;
+ field_0x008[2].mPosCenter.y = field_0x008[2].mPosCenterOrig.y * i_scale;
+ fopMsgM_cposMove(&field_0x008[2]);
+ #endif
}
/* 80206DA4-80206E44 .text setRotate__23dDlst_StarterScrnDraw_cFP18fopMsgM_pane_classf */
-void dDlst_StarterScrnDraw_c::setRotate(fopMsgM_pane_class*, f32) {
- /* Nonmatching */
+void dDlst_StarterScrnDraw_c::setRotate(fopMsgM_pane_class* i_pane, f32 i_angle) {
+ i_pane->pane->rotate((int)(i_pane->mSize.x / 2), (int)(i_pane->mSize.y / 2), ROTATE_Z, i_angle);
}
/* 80206E44-80206EDC .text draw__23dDlst_StarterScrnDraw_cFv */
void dDlst_StarterScrnDraw_c::draw() {
- /* Nonmatching */
+ fopMsgM_setAlpha(&field_0x008[0]);
+
+ for (int i = 0; i < 3; i++) {
+ fopMsgM_setAlpha(&field_0x1c8[i]);
+ fopMsgM_setAlpha(&field_0x270[i]);
+ }
+
+ J2DOrthoGraph* graf = dComIfGp_getCurrentGrafPort();
+ graf->setPort();
+ mpScrn->draw(0.0f, 0.0f, graf);
}
/* 80206EDC-80206EFC .text dMinigame_Starter_Draw__FP19dMinigame_Starter_c */
-static BOOL dMinigame_Starter_Draw(dMinigame_Starter_c*) {
- /* Nonmatching */
+static BOOL dMinigame_Starter_Draw(dMinigame_Starter_c* i_this) {
+ return i_this->_draw();
}
/* 80206EFC-80206F1C .text dMinigame_Starter_Execute__FP19dMinigame_Starter_c */
-static BOOL dMinigame_Starter_Execute(dMinigame_Starter_c*) {
- /* Nonmatching */
+static BOOL dMinigame_Starter_Execute(dMinigame_Starter_c* i_this) {
+ return i_this->_execute();
}
/* 80206F1C-80206F24 .text dMinigame_Starter_IsDelete__FP19dMinigame_Starter_c */
-static BOOL dMinigame_Starter_IsDelete(dMinigame_Starter_c*) {
- /* Nonmatching */
+static BOOL dMinigame_Starter_IsDelete(dMinigame_Starter_c* i_this) {
+ return TRUE;
}
/* 80206F24-80206F44 .text dMinigame_Starter_Delete__FP19dMinigame_Starter_c */
-static BOOL dMinigame_Starter_Delete(dMinigame_Starter_c*) {
- /* Nonmatching */
+static BOOL dMinigame_Starter_Delete(dMinigame_Starter_c* i_this) {
+ return i_this->_delete();
}
/* 80206F44-80206F64 .text dMinigame_Starter_Create__FP9msg_class */
-static cPhs_State dMinigame_Starter_Create(msg_class*) {
- /* Nonmatching */
+static cPhs_State dMinigame_Starter_Create(msg_class* msg) {
+ dMinigame_Starter_c* i_this = (dMinigame_Starter_c*)msg;
+ return i_this->_create();
}
+
+msg_method_class l_dMinigame_Starter_Method = {
+ (process_method_func)dMinigame_Starter_Create,
+ (process_method_func)dMinigame_Starter_Delete,
+ (process_method_func)dMinigame_Starter_Execute,
+ (process_method_func)dMinigame_Starter_IsDelete,
+ (process_method_func)dMinigame_Starter_Draw,
+};
+
+msg_process_profile_definition g_profile_MINIGAME_STARTER = {
+ /* Layer ID */ fpcLy_CURRENT_e,
+ /* List ID */ 12,
+ /* List Prio */ fpcPi_CURRENT_e,
+ /* Proc Name */ fpcNm_MINIGAME_STARTER_e,
+ /* Proc SubMtd */ &g_fpcLf_Method.base,
+ /* Size */ sizeof(dMinigame_Starter_c),
+ /* Size Other */ 0,
+ /* Parameters */ 0,
+ /* Leaf SubMtd */ &g_fopMsg_Method,
+ /* Draw Prio */ fpcDwPi_MINIGAME_STARTER_e,
+ /* Msg SubMtd */ &l_dMinigame_Starter_Method,
+};
diff --git a/src/d/d_water_mark.cpp b/src/d/d_water_mark.cpp
index 77a00dca..f42cd3e9 100644
--- a/src/d/d_water_mark.cpp
+++ b/src/d/d_water_mark.cpp
@@ -1,61 +1,192 @@
-//
-// Generated by dtk
-// Translation Unit: d_water_mark.cpp
-//
-
#include "d/dolzel.h" // IWYU pragma: keep
#include "d/d_water_mark.h"
-#include "f_op/f_op_kankyo.h"
+#include "m_Do/m_Do_lib.h"
+
+s16 dWaterMark_c::m_circle_cnt;
+
+s16 dWaterMark_c::m_player_foot_now_id;
+
+dBgS_ObjGndChk dWaterMark_c::m_ground_check;
BOOL dWaterMark_c::draw() {
- /* Nonmatching */
+ if (mDoLib_clipper::clip(j3dSys.getViewMtx(), mPos, mScale.x * 50.0f)) {
+ return TRUE;
+ }
+
+ J3DModelData* modelData = mpModel->getModelData();
+ mBrk.entry(modelData, mBrk.getFrame());
+ mBtp.entry(mpModel->getModelData(), mParam);
+ mDoExt_modelUpdateDL(mpModel);
+ return TRUE;
}
/* 8023DB48-8023DBF8 .text dWaterMark_Draw__FP12dWaterMark_c */
static BOOL dWaterMark_Draw(dWaterMark_c* i_this) {
- /* Nonmatching */
return i_this->draw();
}
/* 8023DBF8-8023DE2C .text setMatrix__12dWaterMark_cFv */
-void dWaterMark_c::setMatrix() {
- /* Nonmatching */
+BOOL dWaterMark_c::setMatrix() {
+ cXyz chk_pos(mPos.x, mPos.y + 10.0f, mPos.z);
+ m_ground_check.SetPos(&chk_pos);
+
+ mPos.y = dComIfG_Bgsp()->GroundCross(&m_ground_check);
+ if (mPos.y != -G_CM3D_F_INF) {
+ cM3dGPla* tri = dComIfG_Bgsp()->GetTriPla(m_ground_check.GetBgIndex(), m_ground_check.GetPolyIndex());
+ s16 tri_angle = cM_atan2s(tri->mNormal.x, tri->mNormal.z) - field_0x12e;
+ f32 norm_xz_mag = tri->mNormal.absXZ();
+
+ mDoMtx_stack_c::transS(mPos.x, mPos.y + 0.1f, mPos.z);
+ mDoMtx_stack_c::ZXYrotM(
+ cM_atan2s(norm_xz_mag * cM_scos(tri_angle), tri->mNormal.y),
+ field_0x12e,
+ cM_atan2s(norm_xz_mag * -cM_ssin(tri_angle), tri->mNormal.y)
+ );
+ mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
+
+ bool is_move_bg = dComIfG_Bgsp()->ChkMoveBG(m_ground_check);
+ if (is_move_bg) {
+ field_0x12c = 1;
+ } else {
+ field_0x12c = 0;
+ }
+ } else {
+ return FALSE;
+ }
+
+ return TRUE;
}
BOOL dWaterMark_c::execute() {
- /* Nonmatching */
+ if (field_0x134 != -1) {
+ if (field_0x130 < field_0x132) {
+ if (field_0x130 <= dWaterMark_c::m_player_foot_now_id && field_0x132 > dWaterMark_c::m_player_foot_now_id) {
+ field_0x134 = -1;
+ }
+ } else {
+ if (field_0x130 <= dWaterMark_c::m_player_foot_now_id || field_0x132 > dWaterMark_c::m_player_foot_now_id) {
+ field_0x134 = -1;
+ }
+ }
+ }
+
+ if (field_0x134 == -1) {
+ mBrk.play();
+ }
+
+ if (mBrk.isStop()) {
+ fopKyM_Delete(this);
+ } else if (field_0x12c == 1 && !setMatrix()) {
+ fopKyM_Delete(this);
+ }
+
+ return TRUE;
}
/* 8023DE2C-8023DF24 .text dWaterMark_Execute__FP12dWaterMark_c */
-static BOOL dWaterMark_Execute(dWaterMark_c* i_this) {
- /* Nonmatching */
+static BOOL dWaterMark_Execute(dWaterMark_c* i_this) {
return i_this->execute();
}
/* 8023DF24-8023DF2C .text dWaterMark_IsDelete__FP12dWaterMark_c */
-static BOOL dWaterMark_IsDelete(dWaterMark_c*) {
+static BOOL dWaterMark_IsDelete(dWaterMark_c* i_this) {
return TRUE;
}
BOOL dWaterMark_c::wm_delete() {
- /* Nonmatching */
+ if (mpHeap != NULL) {
+ mDoExt_destroySolidHeap(mpHeap);
+ }
+
+ if ((int)mParam == 1) {
+ dWaterMark_c::m_circle_cnt--;
+ }
+
+ return TRUE;
}
/* 8023DF2C-8023DF80 .text dWaterMark_Delete__FP12dWaterMark_c */
static BOOL dWaterMark_Delete(dWaterMark_c* i_this) {
- /* Nonmatching */
return i_this->wm_delete();
}
/* 8023DF80-8023DFA0 .text dWaterMark_Create__FP12kankyo_class */
-static cPhs_State dWaterMark_Create(kankyo_class* i_this) {
- dWaterMark_c* a_this = (dWaterMark_c*)i_this;
- return a_this->create();
+static cPhs_State dWaterMark_Create(kankyo_class* kankyo) {
+ dWaterMark_c* i_this = (dWaterMark_c*)kankyo;
+ return i_this->create();
}
/* 8023DFA0-8023E29C .text create__12dWaterMark_cFv */
cPhs_State dWaterMark_c::create() {
- /* Nonmatching */
+ new (this) dWaterMark_c();
+
+ field_0x12e = mParam >> 0x10;
+ mParam &= 0xFFFF;
+
+ if ((int)mParam != 0 && (int)mParam != 1 && (int)mParam != 2) {
+ return cPhs_ERROR_e;
+ }
+
+ if ((int)mParam == 1 && ++m_circle_cnt > 10) {
+ return cPhs_ERROR_e;
+ }
+
+ JKRSolidHeap* heap = mDoExt_createSolidHeapFromGameToCurrent(0x12A0, 0x20);
+ mpHeap = heap;
+
+ BOOL is_anm_init;
+ if (mpHeap != NULL) {
+ J3DModelData* modelData = static_cast<J3DModelData*>(dComIfG_getObjectRes("Always", dRes_INDEX_ALWAYS_BDL_MPA_SIMI_e));
+ JUT_ASSERT(304, modelData != NULL);
+ mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11020022);
+
+ J3DAnmTevRegKey* brk = (J3DAnmTevRegKey*)dComIfG_getObjectRes("Always", dRes_INDEX_ALWAYS_BRK_MPA_SIMI_e);
+ int brk_rt = mBrk.init(modelData, brk, TRUE, J3DFrameCtrl::EMode_NONE);
+
+ J3DAnmTexPattern* btp = (J3DAnmTexPattern*)dComIfG_getObjectRes("Always", dRes_INDEX_ALWAYS_BTP_MPA_SIMI_e);
+ int btp_rt = mBtp.init(modelData, btp, FALSE, J3DFrameCtrl::EMode_NONE);
+
+ is_anm_init = (brk_rt & btp_rt);
+
+ mDoExt_restoreCurrentHeap();
+ mDoExt_adjustSolidHeap(mpHeap);
+ } else {
+ return cPhs_ERROR_e;
+ }
+
+ if (mpModel == NULL || !is_anm_init) {
+ return cPhs_ERROR_e;
+ }
+
+ mpModel->setBaseScale(mScale);
+
+ if (!setMatrix()) {
+ return cPhs_ERROR_e;
+ }
+
+ if ((int)mParam == 2) {
+ field_0x134 = m_player_foot_now_id;
+ m_player_foot_now_id++;
+ if (m_player_foot_now_id == 40) {
+ m_player_foot_now_id = 0;
+ }
+
+ field_0x130 = field_0x134 + 20;
+ if (field_0x130 >= 40) {
+ field_0x130 -= 40;
+ }
+
+ field_0x132 = field_0x130 + 20;
+ if (field_0x132 >= 40) {
+ field_0x132 -= 40;
+ }
+
+ mParam = 0;
+ } else {
+ field_0x134 = -1;
+ }
+
+ return cPhs_COMPLEATE_e;
}
static kankyo_method_class l_dWaterMark_Method = {
@@ -68,7 +199,7 @@ static kankyo_method_class l_dWaterMark_Method = {
kankyo_process_profile_definition g_profile_WATER_MARK = {
/* Layer ID */ fpcLy_CURRENT_e,
- /* List ID */ 0x0009,
+ /* List ID */ 9,
/* List Prio */ fpcPi_CURRENT_e,
/* Proc Name */ fpcNm_WATER_MARK_e,
/* Proc SubMtd */ &g_fpcLf_Method.base,
diff --git a/src/d/d_wpillar.cpp b/src/d/d_wpillar.cpp
index d04334a4..d5a9b024 100644
--- a/src/d/d_wpillar.cpp
+++ b/src/d/d_wpillar.cpp
@@ -1,27 +1,84 @@
-//
-// Generated by dtk
-// Translation Unit: d_wpillar.cpp
-//
-
#include "d/dolzel.h" // IWYU pragma: keep
#include "d/d_wpillar.h"
#include "f_op/f_op_kankyo.h"
-
-class J3DNode;
+#include "d/actor/d_a_player_main.h"
+#include "cstdint.h"
/* 8023E968-8023E9E4 .text jointCallBack__10dWpillar_cFi */
-void dWpillar_c::jointCallBack(int) {
- /* Nonmatching */
+int dWpillar_c::jointCallBack(int i_jointNo) {
+ static const f32 min_y[] = {
+ 0.1418457f,
+ 18.307327f,
+ 16.280472f,
+ };
+
+ MtxP m = mpModel->getAnmMtx(i_jointNo);
+ f32 var_f2 = mPos.y + mScale.x * min_y[i_jointNo - 1];
+ m[1][3] = var_f2 + mHeight * (m[1][3] - var_f2);
+ cMtx_copy(m, J3DSys::mCurrentMtx);
+ return 1;
}
/* 8023E9E4-8023EA28 .text dWpillar_jointCallBack__FP7J3DNodei */
-static BOOL dWpillar_jointCallBack(J3DNode*, int) {
- /* Nonmatching */
+static BOOL dWpillar_jointCallBack(J3DNode* i_node, int param_1) {
+ if (param_1 == 0) {
+ J3DJoint* joint = (J3DJoint*)i_node;
+ int jntNo = joint->getJntNo();
+ J3DModel* model = j3dSys.getModel();
+
+ dWpillar_c* i_this = (dWpillar_c*)model->getUserArea();
+ i_this->jointCallBack(jntNo);
+ }
+
+ return TRUE;
}
/* 8023EA28-8023ECF8 .text draw__10dWpillar_cFv */
BOOL dWpillar_c::draw() {
- /* Nonmatching */
+ int matNo;
+
+ g_env_light.settingTevStruct(TEV_TYPE_BG1, &mPos, &mTevstr);
+ g_env_light.setLightTevColorType(mpModel, &mTevstr);
+
+ mBck.entry(mpModel->getModelData());
+
+ if ((int)mParam == 1) {
+ matNo = mpModel->getModelData()->getMaterialNum() - 1;
+ while (matNo >= 0) {
+ J3DMaterial* material = mpModel->getModelData()->getMaterialNodePointer(matNo);
+
+ static const GXColorS10 calc_col = {0x00, 0x00, 0x00, 0x3C};
+ material->setTevColor(2, (const J3DGXColorS10*)&calc_col);
+ matNo--;
+ }
+
+ daPy_getPlayerLinkActorClass()->getBombWaterPillarBrk()->setFrame(mBck.getFrame());
+ daPy_getPlayerLinkActorClass()->getBombWaterPillarBtk()->setFrame(mBck.getFrame());
+ } else {
+ GXColorS10 color;
+ color.r = (u8)(mTevstr.mColorC0.r * 0.23529412f + 195.0f);
+ color.g = (u8)(mTevstr.mColorC0.g * 0.23529412f + 195.0f);
+ color.b = (u8)(mTevstr.mColorC0.b * 0.23529412f + 195.0f);
+
+ GXColor kcolor;
+ kcolor.r = mTevstr.mColorK0.r * 0.92156863f + 20.0f;
+ kcolor.g = mTevstr.mColorK0.g * 0.92156863f + 20.0f;
+ kcolor.b = mTevstr.mColorK0.b * 0.92156863f + 20.0f;
+
+ mBtk.entry(mpModel->getModelData(), mBck.getFrame());
+
+ matNo = mpModel->getModelData()->getMaterialNum() - 1;
+ while (matNo >= 0) {
+ J3DMaterial* material = mpModel->getModelData()->getMaterialNodePointer(matNo);
+
+ material->setTevColor(0, (const J3DGXColorS10*)&color);
+ material->setTevKColor(0, (const J3DGXColor*)&kcolor);
+ matNo--;
+ }
+ }
+
+ mDoExt_modelUpdateDL(mpModel);
+ return 1;
}
/* 8023ECF8-8023ED18 .text dWpillar_Draw__FP10dWpillar_c */
@@ -31,7 +88,19 @@ static BOOL dWpillar_Draw(dWpillar_c* i_this) {
/* 8023ED18-8023EDB0 .text execute__10dWpillar_cFv */
BOOL dWpillar_c::execute() {
- /* Nonmatching */
+ mBck.play();
+
+ if (mBck.isStop()) {
+ fopKyM_Delete(this);
+ } else {
+ f32 water_y;
+ if (fopAcM_getWaterY(&mPos, &water_y)) {
+ mpModel->getBaseTRMtx()[1][3] = water_y;
+ mPos.y = water_y;
+ }
+ }
+
+ return 1;
}
/* 8023EDB0-8023EDD0 .text dWpillar_Execute__FP10dWpillar_c */
@@ -46,7 +115,11 @@ static BOOL dWpillar_IsDelete(dWpillar_c*) {
/* 8023EDD8-8023EE08 .text wp_delete__10dWpillar_cFv */
BOOL dWpillar_c::wp_delete() {
- /* Nonmatching */
+ if (mpHeap != NULL) {
+ mDoExt_destroySolidHeap(mpHeap);
+ }
+
+ return TRUE;
}
/* 8023EE08-8023EE28 .text dWpillar_Delete__FP10dWpillar_c */
@@ -56,7 +129,79 @@ static BOOL dWpillar_Delete(dWpillar_c* i_this) {
/* 8023EE28-8023F5B0 .text create__10dWpillar_cFv */
cPhs_State dWpillar_c::create() {
- /* Nonmatching */
+ new (this) dWpillar_c();
+
+ J3DModelData* modelData;
+ BOOL is_anm_init;
+ mpHeap = mDoExt_createSolidHeapFromGameToCurrent(0x3440, 0x20);
+ if (mpHeap != NULL) {
+ if ((int)mParam == 0) {
+ modelData = (J3DModelData*)dComIfG_getObjectRes("Always", dRes_INDEX_ALWAYS_BDL_W_PILLAR_A_e);
+ JUT_ASSERT(293, modelData != NULL);
+ mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000202);
+
+ J3DAnmTransform* bck = (J3DAnmTransform*)dComIfG_getObjectRes("Always", dRes_INDEX_ALWAYS_BCK_W_PILLAR_A_e);
+ is_anm_init = mBck.init(modelData, bck, TRUE, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, false);
+
+ J3DAnmTextureSRTKey* btk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("Always", dRes_INDEX_ALWAYS_BTK_W_PILLAR_A_e);
+ is_anm_init &= mBtk.init(modelData, btk, FALSE, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1);
+ } else {
+ modelData = static_cast<J3DModelData*>(dComIfG_getObjectRes("Link", dRes_INDEX_LINK_BDL_GWP00_e));
+ JUT_ASSERT(320, modelData != NULL);
+ mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000202);
+
+ J3DAnmTransform* bck = (J3DAnmTransform*)dComIfG_getObjectRes("Link", dRes_INDEX_LINK_BCK_GWP00_e);
+ is_anm_init = mBck.init(modelData, bck, TRUE, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, false);
+ }
+
+ mDoExt_restoreCurrentHeap();
+ mDoExt_adjustSolidHeap(mpHeap);
+ } else {
+ return cPhs_ERROR_e;
+ }
+
+ if (mpModel == NULL || !is_anm_init) {
+ return cPhs_ERROR_e;
+ }
+
+ mHeight = mScale.y;
+ mScale.y = mScale.x;
+ mpModel->setBaseScale(mScale);
+ mDoMtx_stack_c::transS(mPos.x, mPos.y, mPos.z);
+ mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
+
+ if ((int)mParam == 0) {
+ for (u16 i = 1; i < modelData->getJointNum(); i++) {
+ modelData->getJointNodePointer(i)->setCallBack(dWpillar_jointCallBack);
+ }
+
+ mpModel->setUserArea((std::uintptr_t)this);
+ dComIfGp_particle_setShipTail(dPa_name::ID_IT_JN_WP_HAMON01, &mPos, NULL, &mScale, 0xFF, &dPa_control_c::mSingleRippleEcallBack);
+ dComIfGp_particle_setShipTail(dPa_name::ID_IT_JN_WP_HAMON02, &mPos, NULL, &mScale, 0xFF, &dPa_control_c::mSingleRippleEcallBack);
+ dComIfGp_particle_setShipTail(dPa_name::ID_IT_JN_WP_HAMON03, &mPos, NULL, &mScale, 0xFF, &dPa_control_c::mSingleRippleEcallBack);
+ dComIfGp_particle_set(dPa_name::ID_IT_JN_WP_SHIBUKI, &mPos, NULL, &mScale, 0xFF, NULL);
+ } else {
+ dComIfGp_particle_setBombSmoke(dPa_name::ID_IT_JT_BMEX_SMOKE02, &mPos);
+ dComIfGp_particle_setToonP1(dPa_name::ID_IT_JT_WATERSMOKE00, &mPos);
+ dComIfGp_particle_setP1(dPa_name::ID_IT_JN_MIZUSHIBUKI_A, &mPos);
+ }
+
+ dBgS_ObjGndChk gndchk;
+ gndchk.SetPos(&mPos);
+
+ int roomNo;
+ u8 polyColor;
+ f32 y = dComIfG_Bgsp()->GroundCross(&gndchk);
+ if (y != -G_CM3D_F_INF) {
+ roomNo = dComIfG_Bgsp()->GetRoomId(gndchk);
+ polyColor = dComIfG_Bgsp()->GetPolyColor(gndchk);
+ } else {
+ roomNo = dComIfGp_roomControl_getStayNo();
+ polyColor = 0xFF;
+ }
+
+ dKy_tevstr_init(&mTevstr, roomNo, polyColor);
+ return cPhs_COMPLEATE_e;
}
/* 8023F5B0-8023F5D0 .text dWpillar_Create__FP12kankyo_class */
@@ -75,7 +220,7 @@ static kankyo_method_class l_dWpillar_Method = {
kankyo_process_profile_definition g_profile_WPILLAR = {
/* Layer ID */ fpcLy_CURRENT_e,
- /* List ID */ 0x0008,
+ /* List ID */ 8,
/* List Prio */ fpcPi_CURRENT_e,
/* Proc Name */ fpcNm_WPILLAR_e,
/* Proc SubMtd */ &g_fpcLf_Method.base,