mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-06-02 01:30:00 -04:00
add debug functionality + close to linking hozelda (#2804)
This commit is contained in:
@@ -13,3 +13,4 @@ d/actor/d_a_hozelda.cpp:
|
||||
.text start:0x00000080 end:0x000035AC
|
||||
.rodata start:0x00000000 end:0x000000E4
|
||||
.data start:0x00000000 end:0x000005DC
|
||||
.bss start:0x00000000 end:0x00000004
|
||||
|
||||
@@ -21,7 +21,7 @@ public:
|
||||
/* 80848D54 */ virtual ~daHoZelda_matAnm_c() {}
|
||||
/* 80845EDC */ virtual void calc(J3DMaterial*) const;
|
||||
|
||||
static bool getEyeMoveFlg() { return mEyeMoveFlg; }
|
||||
static u8 getEyeMoveFlg() { return mEyeMoveFlg; }
|
||||
static void offEyeMoveFlg() { mEyeMoveFlg = false; }
|
||||
static void onEyeMoveFlg() { mEyeMoveFlg = true; }
|
||||
|
||||
@@ -29,7 +29,7 @@ public:
|
||||
static void setMorfFrame(u8 i_frame) { mMorfFrame = i_frame; }
|
||||
static void decMorfFrame() { cLib_calcTimer<u8>(&mMorfFrame); }
|
||||
|
||||
static bool mEyeMoveFlg;
|
||||
static u8 mEyeMoveFlg;
|
||||
static u8 mMorfFrame;
|
||||
|
||||
/* 0x0F4 */ f32 field_0xf4;
|
||||
@@ -38,10 +38,34 @@ public:
|
||||
/* 0x100 */ f32 mNowOffsetY;
|
||||
};
|
||||
|
||||
struct daHoZelda_hio_c1 {
|
||||
/* 0x0 */ s16 bow_search_y_angle;
|
||||
/* 0x2 */ s16 bow_start_angle;
|
||||
/* 0x4 */ s16 bow_end_angle;
|
||||
/* 0x6 */ s16 field_0x6;
|
||||
/* 0x8 */ f32 bow_start_distance;
|
||||
/* 0xC */ f32 bow_end_distance;
|
||||
};
|
||||
|
||||
struct daHoZelda_hio_c0 {
|
||||
static daHoZelda_hio_c1 const m;
|
||||
};
|
||||
|
||||
class daHoZelda_hio_c : public JORReflexible {
|
||||
public:
|
||||
daHoZelda_hio_c() {}
|
||||
daHoZelda_hio_c() {
|
||||
#if DEBUG
|
||||
mParameters = daHoZelda_hio_c0::m;
|
||||
#endif
|
||||
}
|
||||
|
||||
/* 0x4 */ s8 mID;
|
||||
|
||||
#if DEBUG
|
||||
void genMessage(JORMContext*);
|
||||
virtual ~daHoZelda_hio_c() {}
|
||||
/* 0x8 */ daHoZelda_hio_c1 mParameters;
|
||||
#endif
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -935,7 +935,7 @@ public:
|
||||
BOOL checkSpecialHorseRide() { return checkNoResetFlg2(daPy_FLG2(FLG2_HORSE_ZELDA | FLG2_UNK_1000000 | FLG2_BOAR_SINGLE_BATTLE)); }
|
||||
BOOL checkBoardNoFootAngle() const { return checkResetFlg1(RFLG1_UNK_40); }
|
||||
bool checkGrabThrow() const { return checkResetFlg0(RFLG0_GRAB_THROW); }
|
||||
bool checkMidnaAtnPos() const { return checkNoResetFlg1(FLG1_MIDNA_ATN_POS); }
|
||||
BOOL checkMidnaAtnPos() const { return checkNoResetFlg1(FLG1_MIDNA_ATN_POS); }
|
||||
bool checkMidnaHairAtnPos() const { return checkNoResetFlg1(FLG1_MIDNA_HAIR_ATN_POS); }
|
||||
bool checkAttentionLock() const { return checkResetFlg0(RFLG0_UNK_10000); }
|
||||
BOOL checkFishingRodUseStart() const { return checkResetFlg1(RFLG1_UNK_80); }
|
||||
|
||||
+69
-45
@@ -10,20 +10,29 @@
|
||||
#include "d/actor/d_a_b_gnd.h"
|
||||
#include "d/actor/d_a_arrow.h"
|
||||
|
||||
struct daHoZelda_hio_c1 {
|
||||
/* 0x0 */ s16 bow_search_y_angle;
|
||||
/* 0x2 */ s16 bow_start_angle;
|
||||
/* 0x4 */ s16 bow_end_angle;
|
||||
/* 0x8 */ f32 bow_start_distance;
|
||||
/* 0xC */ f32 bow_end_distance;
|
||||
};
|
||||
|
||||
struct daHoZelda_hio_c0 {
|
||||
static daHoZelda_hio_c1 const m;
|
||||
};
|
||||
#if DEBUG
|
||||
#define HIO mpHIO->mParameters
|
||||
#else
|
||||
#define HIO daHoZelda_hio_c0::m
|
||||
#endif
|
||||
|
||||
/* 80848E3C-80848E44 000000 0008+00 15/15 0/0 0/0 .rodata l_arcName */
|
||||
static const char l_arcName[] = "HoZelda";
|
||||
|
||||
#if DEBUG
|
||||
void daHoZelda_hio_c::genMessage(JORMContext* context) {
|
||||
context->genSlider("弓サーチY角度", &mParameters.bow_search_y_angle, 0, 0x7fff, 0, NULL, -1, -1, 0x200, 0x18);
|
||||
context->genSlider("弓開始角度", &mParameters.bow_start_angle, 0, 0x7fff, 0, NULL, -1, -1, 0x200, 0x18);
|
||||
context->genSlider("弓開始距離", &mParameters.bow_start_distance, 0.0f, 10000.0f, 0, NULL, -1, -1, 0x200, 0x18);
|
||||
context->genSlider("弓終了角度", &mParameters.bow_end_angle, 0, 0x7fff, 0, NULL, -1, -1, 0x200, 0x18);
|
||||
context->genSlider("弓終了距離", &mParameters.bow_end_distance, 0.0f, 10000.0f, 0, NULL, -1, -1, 0x200, 0x18);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* 80845E98-80845EAC 000078 0014+00 1/1 0/0 0/0 .text daHoZelda_searchGanon__FP10fopAc_ac_cPv */
|
||||
static void* daHoZelda_searchGanon(fopAc_ac_c* i_actor, void* i_data) {
|
||||
(void)i_data;
|
||||
if (fopAcM_GetName(i_actor) == PROC_B_GND) {
|
||||
return i_actor;
|
||||
}
|
||||
@@ -31,20 +40,18 @@ static void* daHoZelda_searchGanon(fopAc_ac_c* i_actor, void* i_data) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* 80848E3C-80848E44 000000 0008+00 15/15 0/0 0/0 .rodata l_arcName */
|
||||
static char const l_arcName[8] = "HoZelda";
|
||||
|
||||
/* 80848E44-80848E54 000008 0010+00 0/5 0/0 0/0 .rodata m__16daHoZelda_hio_c0 */
|
||||
const daHoZelda_hio_c1 daHoZelda_hio_c0::m = {
|
||||
0x38E,
|
||||
0x2AAA,
|
||||
0x4000,
|
||||
0,
|
||||
3500.0f,
|
||||
4000.0f,
|
||||
};
|
||||
|
||||
#if VERSION != VERSION_GCN_PAL
|
||||
bool daHoZelda_matAnm_c::mEyeMoveFlg;
|
||||
u8 daHoZelda_matAnm_c::mEyeMoveFlg;
|
||||
u8 daHoZelda_matAnm_c::mMorfFrame;
|
||||
#endif
|
||||
|
||||
@@ -66,82 +73,80 @@ void daHoZelda_matAnm_c::calc(J3DMaterial* i_material) const {
|
||||
|
||||
for (u32 i = 0; i < 8; i++) {
|
||||
if (getTexMtxAnm(i).getAnmFlag()) {
|
||||
J3DTexMtxInfo& texmtx = i_material->getTexGenBlock()->getTexMtx(i)->getTexMtxInfo();
|
||||
J3DTextureSRTInfo& texmtx = i_material->getTexGenBlock()->getTexMtx(i)->getTexMtxInfo().mSRT;
|
||||
|
||||
if (mMorfFrame != 0) {
|
||||
f32 var_f31 = 1.0f / (mMorfFrame + 1);
|
||||
texmtx.mSRT.mTranslationX = field_0xf4 * (1.0f - var_f31) + texmtx.mSRT.mTranslationX * var_f31;
|
||||
texmtx.mSRT.mTranslationY = field_0xf8 * (1.0f - var_f31) + texmtx.mSRT.mTranslationY * var_f31;
|
||||
texmtx.mTranslationX = field_0xf4 * (1.0f - var_f31) + texmtx.mTranslationX * var_f31;
|
||||
texmtx.mTranslationY = field_0xf8 * (1.0f - var_f31) + texmtx.mTranslationY * var_f31;
|
||||
} else if (mEyeMoveFlg) {
|
||||
texmtx.mSRT.mTranslationX = mNowOffsetX;
|
||||
texmtx.mSRT.mTranslationY = mNowOffsetY;
|
||||
texmtx.mTranslationX = mNowOffsetX;
|
||||
texmtx.mTranslationY = mNowOffsetY;
|
||||
}
|
||||
|
||||
const_cast<f32&>(field_0xf4) = texmtx.mSRT.mTranslationX;
|
||||
const_cast<f32&>(field_0xf8) = texmtx.mSRT.mTranslationY;
|
||||
const_cast<f32&>(field_0xf4) = texmtx.mTranslationX;
|
||||
const_cast<f32&>(field_0xf8) = texmtx.mTranslationY;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* 80846000-8084642C 0001E0 042C+00 1/1 0/0 0/0 .text createHeap__11daHoZelda_cFv */
|
||||
int daHoZelda_c::createHeap() {
|
||||
BOOL daHoZelda_c::createHeap() {
|
||||
mpZeldaModel = mDoExt_J3DModel__create((J3DModelData*)dComIfG_getObjectRes(l_arcName, 0x23), 0, 0x11020284);
|
||||
if (mpZeldaModel == NULL) {
|
||||
return 0;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
for (int i = 0; i < 2; i++) {
|
||||
mpMatAnm[i] = new daHoZelda_matAnm_c();
|
||||
if (mpMatAnm[i] == NULL) {
|
||||
return 0;
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
J3DTransformInfo* transinfo_buf = new J3DTransformInfo[47];
|
||||
if (transinfo_buf == NULL) {
|
||||
return 0;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
Quaternion* quat_buf = new Quaternion[47];
|
||||
if (quat_buf == NULL) {
|
||||
return 0;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
field_0x5c4 = new mDoExt_MtxCalcOldFrame(transinfo_buf, quat_buf);
|
||||
if (field_0x5c4 == NULL) {
|
||||
return 0;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
field_0x5a8 = new mDoExt_MtxCalcAnmBlendTblOld(field_0x5c4, 3, mAnmRatioPack);
|
||||
if (field_0x5a8 == NULL) {
|
||||
return 0;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void* res = dComIfG_getObjectRes(l_arcName, 0x2F);
|
||||
if (!mEyeBtp.init(mpZeldaModel->getModelData(), (J3DAnmTexPattern*)res, 1, 2, 1.0f, 0, -1)) {
|
||||
return 0;
|
||||
if (!mEyeBtp.init(mpZeldaModel->getModelData(), (J3DAnmTexPattern*)dComIfG_getObjectRes(l_arcName, 0x2F), 1, 2, 1.0f, 0, -1)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
res = dComIfG_getObjectRes(l_arcName, 0x26);
|
||||
if (!mEyeBtk.init(mpZeldaModel->getModelData(), (J3DAnmTextureSRTKey*)res, 1, 0, 1.0f, 0, -1)) {
|
||||
return 0;
|
||||
if (!mEyeBtk.init(mpZeldaModel->getModelData(), (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, 0x26), 1, 0, 1.0f, 0, -1)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
mpBowModel = mDoExt_J3DModel__create((J3DModelData*)dComIfG_getObjectRes(l_arcName, 0x20), 0x80000, 0x11000084);
|
||||
if (mpBowModel == NULL) {
|
||||
return 0;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!mBowBck.init((J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, 0xC), 1, 0, 1.0f, 0, -1, false)) {
|
||||
return 0;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
mpHIO = new daHoZelda_hio_c();
|
||||
if (mpHIO == NULL) {
|
||||
return 0;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return 1;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* 808466F8-80846718 0008D8 0020+00 1/1 0/0 0/0 .text daHoZelda_createHeap__FP10fopAc_ac_c */
|
||||
@@ -197,7 +202,8 @@ void daHoZelda_c::modelCallBack(u16 i_jntNo) {
|
||||
}
|
||||
|
||||
/* 8084696C-808469B0 000B4C 0044+00 1/1 0/0 0/0 .text daHoZelda_modelCallBack__FP8J3DJointi */
|
||||
static int daHoZelda_modelCallBack(J3DJoint* i_joint, int param_1) {
|
||||
static int daHoZelda_modelCallBack(J3DJoint* i_joint2, int param_1) {
|
||||
J3DJoint* i_joint = i_joint2;
|
||||
u16 jnt_no = i_joint->getJntNo();
|
||||
daHoZelda_c* hozelda = (daHoZelda_c*)j3dSys.getModel()->getUserArea();
|
||||
|
||||
@@ -239,6 +245,10 @@ int daHoZelda_c::create() {
|
||||
mpMatAnm[0]->init();
|
||||
mpMatAnm[1]->init();
|
||||
|
||||
#if DEBUG
|
||||
mpHIO->mID = mDoHIO_createChild("馬上ゼルダ", mpHIO);
|
||||
#endif
|
||||
|
||||
setSingleAnime(0x1C, 1.0f, 0.0f, -1, -1.0f);
|
||||
resetUpperAnime();
|
||||
mBowAnmID = 0xC;
|
||||
@@ -260,6 +270,11 @@ static int daHoZelda_Create(fopAc_ac_c* i_this) {
|
||||
|
||||
/* 80846DB0-80846F24 000F90 0174+00 1/1 0/0 0/0 .text __dt__11daHoZelda_cFv */
|
||||
daHoZelda_c::~daHoZelda_c() {
|
||||
#if DEBUG
|
||||
if (mpHIO) {
|
||||
mDoHIO_deleteChild(mpHIO->mID);
|
||||
}
|
||||
#endif
|
||||
dComIfG_resDelete(&mPhase, l_arcName);
|
||||
|
||||
daHorse_c* horse = dComIfGp_getHorseActor();
|
||||
@@ -424,8 +439,8 @@ void daHoZelda_c::animePlay() {
|
||||
|
||||
/* 80847574-808475F0 001754 007C+00 2/2 0/0 0/0 .text setEyeBtp__11daHoZelda_cFUs */
|
||||
void daHoZelda_c::setEyeBtp(u16 i_resNo) {
|
||||
void* btp = dComIfG_getObjectRes(l_arcName, i_resNo);
|
||||
mEyeBtp.init(mpZeldaModel->getModelData(), (J3DAnmTexPattern*)btp, 1, -1, 1.0f, 0, -1);
|
||||
mEyeBtp.init(mpZeldaModel->getModelData(),
|
||||
(J3DAnmTexPattern*)dComIfG_getObjectRes(l_arcName, i_resNo), 1, -1, 1.0f, 0, -1);
|
||||
}
|
||||
|
||||
/* 808475F0-80847670 0017D0 0080+00 2/2 0/0 0/0 .text setEyeBtk__11daHoZelda_cFUsUc */
|
||||
@@ -491,7 +506,7 @@ void daHoZelda_c::setAnm() {
|
||||
}
|
||||
|
||||
if (anm_idx[0] == 0xE && field_0x6da == 0 && !mDamageInit && field_0x6dd == 0 && player->checkHorseRide() && ganondorf != NULL && ganondorf->checkPiyo() != 1 &&
|
||||
((gnd_seen_angleY < daHoZelda_hio_c0::m.bow_start_angle && gnd_lockon) || (mBowMode != 0 && gnd_seen_angleY < daHoZelda_hio_c0::m.bow_end_angle && (gnd_lockon || mArrowAcKeep.getActor() != NULL))))
|
||||
((gnd_seen_angleY < HIO.bow_start_angle && gnd_lockon) || (mBowMode != 0 && gnd_seen_angleY < HIO.bow_end_angle && (gnd_lockon || mArrowAcKeep.getActor() != NULL))))
|
||||
{
|
||||
mBowMode = 1;
|
||||
} else {
|
||||
@@ -853,8 +868,8 @@ void daHoZelda_c::setNeckAngle() {
|
||||
angle_x_target = var_r27;
|
||||
angle_y_target = var_r26;
|
||||
|
||||
var_r27 += (spA - spE);
|
||||
var_r26 += (sp8 - spC);
|
||||
var_r27 += (s16)(spA - spE);
|
||||
var_r26 += (s16)(sp8 - spC);
|
||||
}
|
||||
|
||||
daPy_addCalcShort(&mNeckAngle.x, angle_x_target, 3, 0x1000, 0x100);
|
||||
@@ -883,7 +898,16 @@ void daHoZelda_c::searchBodyAngle() {
|
||||
|
||||
if (sp8.abs() >= 1.0f) {
|
||||
angle_x_target = cLib_minMaxLimit<s16>(sp8.atan2sY_XZ(), -0x800, 0x2000);
|
||||
angle_y_target = cLib_minMaxLimit<s16>((s16)(sp8.atan2sX_Z() - shape_angle.y), -daHoZelda_hio_c0::m.bow_search_y_angle, daHoZelda_hio_c0::m.bow_search_y_angle);
|
||||
#if PLATFORM_SHIELD || PLATFORM_WII
|
||||
angle_y_target =
|
||||
cLib_minMaxLimit<s16>(sp8.atan2sX_Z() - shape_angle.y, -HIO.bow_search_y_angle,
|
||||
(s16)HIO.bow_search_y_angle);
|
||||
#else
|
||||
// needs to load HIO.bow_search_y_angle before calling sp8.atan2sX_Z()
|
||||
int ang1 = (s16)-HIO.bow_search_y_angle;
|
||||
int ang2 = (s16)HIO.bow_search_y_angle;
|
||||
angle_y_target = cLib_minMaxLimit<s16>(sp8.atan2sX_Z() - shape_angle.y, ang1, ang2);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user