water_mark / wpillar done, minigame_starter wip (#1069)

* d_minigame_starter attempt

* water_mark / wpillar done

* review changes
This commit is contained in:
TakaRikka
2026-06-28 15:40:28 -07:00
committed by GitHub
parent 1eb337da18
commit 88a753265e
8 changed files with 711 additions and 92 deletions
+2 -2
View File
@@ -663,9 +663,9 @@ config.libs = [
Object(NonMatching, "d/d_scope.cpp"),
Object(Matching, "d/d_throwstone.cpp"),
Object(Matching, "d/d_timer.cpp"),
Object(NonMatching, "d/d_water_mark.cpp"),
Object(Matching, "d/d_water_mark.cpp"),
Object(Matching, "d/d_wind_arrow.cpp"),
Object(NonMatching, "d/d_wpillar.cpp"),
Object(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d/d_wpillar.cpp"),
Object(Matching, "d/d_wpot_water.cpp"),
],
},
+2 -2
View File
@@ -1865,8 +1865,8 @@ public:
J3DAnmTextureSRTKey* getIceParticleBtk() { return mpGicer00Btk; }
J3DAnmTextureSRTKey* getIceWaterParticleBtk() { return mpGicer01Btk; }
void getBombWaterPillarBrk() {} // mpGwp00BrkData?
void getBombWaterPillarBtk() {} // mpGwp00BtkData?
J3DAnmTevRegKey* getBombWaterPillarBrk() { return mpGwp00BrkData; }
J3DAnmTextureSRTKey* getBombWaterPillarBtk() { return mpGwp00BtkData; }
BOOL checkSwordEquip() const {
return dComIfGs_getSelectEquip(0) != dItemNo_NONE_e || checkSwordMiniGame();
+32 -14
View File
@@ -1,38 +1,56 @@
#ifndef D_MINIGAME_STARTER_H
#define D_MINIGAME_STARTER_H
#include "dolphin/types.h"
#include "f_op/f_op_msg.h"
#include "f_op/f_op_msg_mng.h"
#include "d/d_drawlist.h"
class JKRArchive;
struct fopMsgM_pane_class;
class J2DScreen;
class dDlst_StarterScrnDraw_c {
class dDlst_StarterScrnDraw_c : public dDlst_base_c {
public:
void acc(s16, s16, s16) {}
void setScreen(const char*, JKRArchive*);
void anime1(int);
void anime2();
BOOL anime1(int);
BOOL anime2();
void scaleAnime(f32);
void setRotate(fopMsgM_pane_class*, f32);
void draw();
virtual ~dDlst_StarterScrnDraw_c() {}
virtual void draw();
/* 0x004 */ J2DScreen* mpScrn;
#if VERSION > VERSION_JPN
/* 0x008 */ fopMsgM_pane_class field_0x008[7];
#else
/* 0x008 */ fopMsgM_pane_class field_0x008[3];
#endif
/* 0x190 */ fopMsgM_pane_class field_0x190;
/* 0x1C8 */ fopMsgM_pane_class field_0x1c8[3];
/* 0x270 */ fopMsgM_pane_class field_0x270[3];
};
class dMinigame_Starter_c : public msg_class {
public:
void countStart() { if (!field_0x111) field_0x111 = true; }
void countStart() { if (!mStatus) mStatus = 1; }
void _create();
void _execute();
void _draw();
void _delete();
cPhs_State _create();
BOOL _execute();
BOOL _draw();
BOOL _delete();
BOOL startCheck();
BOOL deleteCheck();
public:
/* 0x0FC */ u8 field_0x0FC[0x111 - 0x0FC];
/* 0x111 */ bool field_0x111;
/* 0x112 */ u8 field_0x112[0x114 - 0x112];
/* 0x0FC */ dDlst_StarterScrnDraw_c* mStarterScrn;
/* 0x100 */ request_of_phase_process_class mPhase;
/* 0x108 */ JKRSolidHeap* mHeap;
/* 0x10C */ s16 mTimer;
/* 0x10E */ s16 field_0x10e;
/* 0x110 */ u8 field_0x110;
/* 0x111 */ u8 mStatus;
}; // Size: 0x114
#endif /* D_MINIGAME_STARTER_H */
+17 -3
View File
@@ -2,19 +2,33 @@
#define D_WATER_MARK_H
#include "SSystem/SComponent/c_phase.h"
#include "dolphin/types.h"
#include "d/d_bg_s_gnd_chk.h"
#include "f_op/f_op_kankyo.h"
#include "m_Do/m_Do_ext.h"
#include "f_op/f_op_kankyo_mng.h"
class dWaterMark_c : public kankyo_class {
public:
inline BOOL draw();
inline BOOL execute();
inline BOOL wm_delete();
void setMatrix();
BOOL setMatrix();
inline cPhs_State create();
static s16 m_circle_cnt;
static s16 m_player_foot_now_id;
static dBgS_ObjGndChk m_ground_check;
public:
/* Place member variables here */
/* 0x0F8 */ JKRSolidHeap* mpHeap;
/* 0x0FC */ J3DModel* mpModel;
/* 0x100 */ mDoExt_brkAnm mBrk;
/* 0x118 */ mDoExt_btpAnm mBtp;
/* 0x12C */ s16 field_0x12c;
/* 0x12E */ s16 field_0x12e;
/* 0x130 */ s16 field_0x130;
/* 0x132 */ s16 field_0x132;
/* 0x134 */ s16 field_0x134;
};
#endif /* D_WATER_MARK_H */
+9 -3
View File
@@ -1,19 +1,25 @@
#ifndef D_WPILLAR_H
#define D_WPILLAR_H
#include "dolphin/types.h"
#include "f_op/f_op_kankyo.h"
#include "m_Do/m_Do_ext.h"
#include "f_op/f_op_kankyo_mng.h"
class dWpillar_c : public kankyo_class {
public:
void jointCallBack(int);
int jointCallBack(int);
BOOL draw();
BOOL execute();
BOOL wp_delete();
cPhs_State create();
public:
/* Place member variables here */
/* 0x0F8 */ J3DModel* mpModel;
/* 0x0FC */ mDoExt_bckAnm mBck;
/* 0x10C */ mDoExt_btkAnm mBtk;
/* 0x120 */ JKRSolidHeap* mpHeap;
/* 0x124 */ dKy_tevstr_c mTevstr;
/* 0x1D4 */ f32 mHeight;
};
#endif /* D_WPILLAR_H */
+336 -31
View File
@@ -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,
};
+152 -21
View File
@@ -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,
+161 -16
View File
@@ -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,