d_a_obj_beamos / d_a_e_wb WIP (#2620)

* WIP

* daE_WB_Draw

* checkpoint

* more matches

* checkpoint

* fixes

* fix debug build

* fix daObjBm_c alignment

* fixes for luz

* fixes for hatal

* manual spacing changes

* run clang-format

* move header back
This commit is contained in:
Howard Luck 2025-08-30 16:11:52 -06:00 committed by GitHub
parent 2036d9c34f
commit abf5f59f0c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
28 changed files with 2912 additions and 4239 deletions

View File

@ -3639,6 +3639,9 @@ public:
BOOL checkCanoeRideOwn(const fopAc_ac_c* param_0) const {
return checkCanoeRide() && mRideAcKeep.getActorConst() == param_0;
}
BOOL checkBoarRideOwn(const fopAc_ac_c* i_actorP) const {
return checkBoarRide() && mRideAcKeep.getActorConst() == i_actorP;
}
bool checkWolfDashMode() const { return checkNoResetFlg1(FLG1_DASH_MODE); }
bool checkWolfLieWaterIn() const { return mWaterY > current.pos.y + 20.5f; }

View File

@ -9,7 +9,7 @@
/**
* @ingroup actors-enemies
* @class daB_GG_c
* @brief Aeralfos
* @brief Aeralfos (Gargoyle)
*
* @details City in the Sky dungeon mini-boss.
*

View File

@ -9,7 +9,7 @@
/**
* @ingroup actors-enemies
* @class e_bs_class
* @brief Stalkin
* @brief Stalkin (Baby Stal)
*
* @details
*

View File

@ -9,7 +9,7 @@
/**
* @ingroup actors-enemies
* @class e_cr_class
* @brief Bombskit
* @brief Bombskit (Crazy Runner)
*
* @details
*

View File

@ -38,7 +38,7 @@ struct chain_s {
/**
* @ingroup actors-enemies
* @class e_fm_class
* @brief Fyrus
* @brief Fyrus (Fire Man)
*
* @details
*

View File

@ -10,7 +10,7 @@
/**
* @ingroup actors-enemies
* @class e_gob_class
* @brief Dangoro
* @brief Dangoro (Goron Boss)
*
* @details
*

View File

@ -9,9 +9,10 @@
/**
* @ingroup actors-enemies
* @class e_is_class
* @brief Armos Titan
* @brief Armos Titan (Idelia Statue)
*
* @details Armos Titans are enemies from early, unreleased versions of the game.
* @details Armos Titans are enemies from early, unreleased versions of the game.
* The name Idelia Statue seems like it might be a reference to the anime Powered Armor Dorvack.
*
*/
class e_is_class {

View File

@ -11,7 +11,7 @@
/**
* @ingroup actors-enemies
* @class daE_KK_c
* @brief Chilfos
* @brief Chilfos (Koori no Kenshi)
*
* @details Enemy - Ice Knight
*

View File

@ -8,7 +8,7 @@
/**
* @ingroup actors-enemies
* @class e_mb_class
* @brief Ook (Diababa Fight)
* @brief Ook - Diababa Fight (Monkey Boomerang)
*
* @details
*

View File

@ -9,7 +9,7 @@
/**
* @ingroup actors-enemies
* @class e_rb_class
* @brief Leever
* @brief Leever (Riiba)
*
* @details
*

View File

@ -172,7 +172,7 @@ public:
/* 0x1297 */ s8 field_0x1297;
/* 0x1298 */ s8 field_0x1298;
/* 0x1299 */ u8 field_0x1299;
/* 0x129A */ s8 field_0x129a;
/* 0x129A */ s8 mBossMode; // 1: Eldin Field, 2 Eldin Bridge, 3 Lake Hylia Bridge, 4 ???
/* 0x129B */ u8 field_0x129b;
/* 0x129C */ s8 field_0x129c;
/* 0x12A0 */ int field_0x12a0;

View File

@ -17,7 +17,7 @@ struct th_ke_s {
/**
* @ingroup actors-enemies
* @class e_th_class
* @brief Darkhammer
* @brief Darkhammer (Tekkyuuhei)
*
* @details
*

View File

@ -6,17 +6,68 @@
#include "SSystem/SComponent/c_phase.h"
#include "d/d_cc_uty.h"
enum daE_wb_ACT {
/* 0x00 */ ACT_WAIT,
/* 0x15 */ ACT_S_DAMAGE = 0x15,
/* 0x65 */ ACT_PL_RIDE = 0x65,
/* 0x67 */ ACT_PL_RIDE_NOW = 0x67,
// copypasta, fix when actual names known
enum daE_WB_ANM {
ANM_APPEAR = 7,
ANM_ATTACK,
ANM_ATTACK_A,
ANM_ATTACK_B,
ANM_ATTACK_C,
ANM_BOMB_DAMAGE,
ANM_CORE_DAMAGE,
ANM_DAMAGE_WAIT,
ANM_DEAD,
ANM_LOOK_M,
ANM_NO_DAMAGE,
ANM_RETURN_01,
ANM_RETURN_02,
ANM_RUNAWAY,
ANM_TEST_MOTION,
ANM_TODOME,
ANM_WAIT_01,
};
enum daE_WB_ACT {
/* 0x00 */ ACT_WAIT,
/* 0x01 */ ACT_WAIT2,
/* 0x04 */ ACT_RIDE = 0x04,
/* 0x05 */ ACT_F_WAIT,
/* 0x06 */ ACT_C_F_RUN,
/* 0x07 */ ACT_A_RUN,
/* 0x08 */ ACT_B_WAIT,
/* 0x09 */ ACT_B_WAIT2,
/* 0x0A */ ACT_B_RUN,
/* 0x0B */ ACT_B_RUN2,
/* 0x0F */ ACT_B_IKKI = 0x0F,
/* 0x10 */ ACT_B_IKKI_END,
/* 0x11 */ ACT_B_IKKI2,
/* 0x12 */ ACT_B_IKKI2_END,
/* 0x13 */ ACT_B_LV9_END,
/* 0x15 */ ACT_S_DAMAGE = 0x15,
/* 0x16 */ ACT_DAMAGE,
/* 0x17 */ ACT_BG_DAMAGE,
/* 0x18 */ ACT_LR_DAMAGE,
/* 0x1E */ ACT_KIBA_START = 0x1E,
/* 0x1F */ ACT_KIBA_END,
/* 0x32 */ ACT_EVENT = 0x32,
/* 0x65 */ ACT_PL_RIDE = 0x65,
/* 0x66 */ ACT_PL_RIDE2,
/* 0x67 */ ACT_PL_RIDE_NOW,
/* 0x6E */ ACT_CRV_WAIT = 0x6E,
};
struct himo_s {
/* 807E1CCC */ ~himo_s();
/* 807E1D2C */ himo_s();
/* 0x0 */ cXyz field_0x0[16];
};
/**
* @ingroup actors-enemies
* @class e_wb_class
* @brief Bullbo
* @brief Bullbo (Wild Boar)
*
* @details
*
@ -49,19 +100,19 @@ public:
public:
/* 0x05AC */ request_of_phase_process_class mPhase;
/* 0x05B4 */ s16 field_0x5b4;
/* 0x05B4 */ s16 mActionMode;
/* 0x05B8 */ char* mResName;
/* 0x05BC */ u8 field_0x5bc;
/* 0x05BD */ u8 field_0x5bd;
/* 0x05BC */ u8 mParam;
/* 0x05BD */ u8 mParam2;
/* 0x05BE */ u8 field_0x5be;
/* 0x05BF */ bool field_0x5bf;
/* 0x05C0 */ u8 field_0x5c0;
/* 0x05C4 */ cXyz field_0x5c4;
/* 0x05D0 */ cXyz field_0x5d0;
/* 0x05DC */ s16 field_0x5dc;
/* 0x05DC */ s16 mAngleTarget;
/* 0x05DE */ s16 field_0x5de;
/* 0x05E0 */ mDoExt_McaMorfSO* mpModelMorf;
/* 0x05E4 */ f32 field_0x5e4;
/* 0x05E4 */ f32 mPlaySpeed;
/* 0x05E8 */ int mAnmID;
/* 0x05EC */ Z2CreatureRide mZ2Ride;
/* 0x0688 */ int field_0x688;
@ -69,13 +120,14 @@ public:
/* 0x068E */ s16 field_0x68e;
/* 0x0690 */ s16 mActionID;
/* 0x0692 */ u16 field_0x692;
/* 0x0694 */ u32 field_0x694;
/* 0x0698 */ s16 field_0x698[4];
/* 0x0694 */ int mShadowKey;
/* 0x0698 */ s16 field_0x698;
/* 0x069A */ s16 field_0x69a;
/* 0x069C */ s16 field_0x69c;
/* 0x069E */ s16 field_0x69e;
/* 0x06A0 */ s16 field_0x6a0;
/* 0x06A2 */ u8 field_0x6a2[0x6ae - 0x6a2];
/* 0x06AE */ s16 field_0x6ae;
/* 0x06B0 */ s16 field_0x6b0;
/* 0x06B2 */ s16 field_0x6b2;
/* 0x06AE */ csXyz field_0x6ae;
/* 0x06B4 */ u8 field_0x6b4[0x6b6 - 0x6b4];
/* 0x06B6 */ s16 field_0x6b6;
/* 0x06B8 */ u8 field_0x6b8[0x6ba - 0x6b8];
@ -84,17 +136,22 @@ public:
/* 0x06BD */ u8 field_0x6bd;
/* 0x06BE */ u16 field_0x6be;
/* 0x06C0 */ s8 field_0x6c0;
/* 0x06C4 */ cXyz field_0x6c4;
/* 0x06C4 */ f32 field_0x6c4;
/* 0x06C8 */ int mBPathIdx; // The b_path indexer
/* 0x06CC */ int mBPathIdxIter; // The amount to change the b_path indexer by
/* 0x06D0 */ s16 field_0x6d0;
/* 0x06D2 */ s16 field_0x6d2;
/* 0x06D2 */ s16 mTargetAngleStep;
/* 0x06D4 */ s16 field_0x6d4;
/* 0x06D6 */ s16 field_0x6d6;
/* 0x06D8 */ u8 field_0x6d8[0x6da - 0x6d8];
/* 0x06D8 */ s16 field_0x6d8;
/* 0x06DA */ s16 field_0x6da;
/* 0x06DC */ s16 field_0x6dc;
/* 0x06DE */ u8 field_0x6de[0x6e4 - 0x6de];
/* 0x06DE */ s16 field_0x6de;
/* 0x06E0 */ s16 field_0x6e0;
/* 0x06E2 */ s16 field_0x6e2;
/* 0x06E4 */ u8 field_0x6e4;
/* 0x06E5 */ u8 field_0x6e5[0x79a - 0x6e5];
/* 0x06E5 */ u8 field_0x6e5[0x6ec - 0x6e5];
/* 0x06EC */ csXyz field_0x6ec[0x1d];
/* 0x079A */ s16 field_0x79a;
/* 0x079C */ u8 field_0x79c;
/* 0x079D */ s8 field_0x79d;
@ -107,7 +164,7 @@ public:
/* 0x07A7 */ s8 field_0x7a7;
/* 0x07A8 */ f32 field_0x7a8;
/* 0x07AC */ dBgS_AcchCir field_0x7ac;
/* 0x07EC */ dBgS_Acch field_0x7ec;
/* 0x07EC */ dBgS_ObjAcch mAcch;
/* 0x09C4 */ dCcD_Stts field_0x9c4;
/* 0x0A00 */ dCcD_Sph field_0xa00[7];
/* 0x1288 */ dCcD_Sph field_0x1288;
@ -134,15 +191,13 @@ public:
/* 0x142F */ s8 field_0x142f;
/* 0x1430 */ s8 field_0x1430;
/* 0x1432 */ s16 field_0x1432;
/* 0x1434 */ fpc_ProcID field_0x1434; // Some actor ID
/* 0x1438 */ cXyz field_0x1438;
/* 0x1444 */ cXyz field_0x1444;
/* 0x1450 */ u8 field_0x1450[0x15d0 - 0x1450];
/* 0x15D0 */ mDoExt_3DlineMat1_c field_0x15d0;
/* 0x160C */ mDoExt_3DlineMat1_c field_0x160c;
/* 0x1434 */ fpc_ProcID field_0x1434; // Rider actor ID?
/* 0x1438 */ cXyz field_0x1438[2];
/* 0x1450 */ himo_s field_0x1450[2];
/* 0x15D0 */ mDoExt_3DlineMat1_c field_0x15d0[2];
/* 0x1648 */ mDoExt_3DlineMat1_c field_0x1648;
/* 0x1684 */ f32 field_0x1684;
/* 0x1688 */ u8 field_0x1688;
/* 0x1688 */ s16 field_0x1688;
/* 0x168A */ u16 field_0x168a;
/* 0x168C */ f32 field_0x168c;
/* 0x1690 */ f32 field_0x1690;
@ -180,15 +235,39 @@ public:
STATIC_ASSERT(sizeof(e_wb_class) == 0x17EC);
struct himo_s {
/* 807E1CCC */ ~himo_s();
/* 807E1D2C */ himo_s();
class daE_WB_HIO_c : public JORReflexible {
public:
/* 807D248C */ daE_WB_HIO_c();
/* 807E20DC */ virtual ~daE_WB_HIO_c() {};
void genMessage(JORMContext*);
/* 0x00 */ // vtable
/* 0x04 */ s8 field_0x04;
/* 0x08 */ f32 mBaseSize;
/* 0x0C */ f32 mLeaderSizeRatio;
/* 0x10 */ f32 mMovementSpeed;
/* 0x14 */ f32 mMaxSpeed;
/* 0x18 */ f32 mCalvaryBattleMaxSpeed;
/* 0x1C */ f32 mNormalSpeedVi;
/* 0x20 */ f32 mMediumSpeedVi;
/* 0x24 */ f32 mMaxSpeedVi;
/* 0x28 */ f32 mLeaderWalkingSpeed;
/* 0x2C */ f32 mLeaderMaxSpeed;
/* 0x30 */ f32 mLeaderCalvaryBattleMaxSpeed;
/* 0x34 */ f32 mSingleRiderSpeed;
/* 0x38 */ f32 mPlayerRecognitionDistance;
/* 0x3C */ f32 mPlayerMountedMaxSpeed;
/* 0x40 */ f32 mPlayerMountedMotionPlaybackSpeed;
/* 0x44 */ s16 mPlayerMountedDashTime;
/* 0x48 */ f32 mSearchIgnoreDistance1;
/* 0x4C */ f32 mSearchIgnoreDistance2;
/* 0x50 */ f32 mGuidanceDisplayDistance1;
/* 0x54 */ f32 mGuidanceDisplayDistance2;
/* 0x58 */ u8 field_0x58;
/* 0x59 */ u8 mNoReins;
};
class daE_WB_HIO_c {
/* 807D248C */ daE_WB_HIO_c();
/* 807E20DC */ ~daE_WB_HIO_c();
};
STATIC_ASSERT(sizeof(daE_WB_HIO_c) == 0x5C);
#endif /* D_A_E_WB_H */

View File

@ -10,7 +10,7 @@
#include "SSystem/SComponent/c_phase.h"
#include "Z2AudioLib/Z2Creature.h"
#include "f_op/f_op_actor.h"
#include "f_op/f_op_actor_mng.h"
#include "d/d_bg_s_acch.h"
#include "d/d_cc_d.h"
#include "d/d_cc_uty.h"
@ -37,7 +37,7 @@ enum daE_YK_Action {
/**
* @ingroup actors-enemies
* @class e_yk_class
* @brief Twilight Keese
* @brief Twilight Keese (Yami Keese)
*
* @details
*

View File

@ -9,7 +9,7 @@
/**
* @ingroup actors-npcs
* @class npc_ks_class
* @brief Monkey NPC
* @brief Monkey NPC (Kozaru)
*
* @details
*

View File

@ -14,7 +14,7 @@ class J3DModel;
/**
* @ingroup actors-npcs
* @class daNPC_TK_c
* @brief Hawk
* @brief Hawk (Taka)
*
* @details
*

View File

@ -9,7 +9,7 @@
/**
* @ingroup actors-objects
* @class daObjBATTA_c
* @brief Insect - Grasshopper
* @brief Insect - Grasshopper (Batta)
*
* @details
*

View File

@ -2,6 +2,10 @@
#define D_A_OBJ_BEMOS_H
#include "f_op/f_op_actor_mng.h"
#include "d/d_bg_s_movebg_actor.h"
#include "d/d_bg_w_base.h"
#include "d/d_cc_d.h"
#include "m_Do/m_Do_ext.h"
/**
* @ingroup actors-objects
@ -11,7 +15,7 @@
* @details
*
*/
class daObjBm_c : public fopAc_ac_c {
class daObjBm_c : public dBgS_MoveBgActor {
public:
class BgcSrc_c {};
@ -28,6 +32,16 @@ public:
static u8 M_wall_work[2576];
};
u32 getSwNo3() { return fopAcM_GetParamBit(this, 16,8); }
u32 getMoveType() { return fopAcM_GetParamBit(this, 24, 4); }
s16 getHeadJoint() { return mHeadJntNo; }
s16 getBigGearJoint() { return mBigGearJntNo; }
s16 getSmallGear0Joint() { return mSmallGear0JntNo; }
s16 getSmallGear1Joint() { return mSmallGear1JntNo; }
s16 getSmallGear2Joint() { return mSmallGear2JntNo; }
s8 getSwNo() { return fopAcM_GetParamBit(this,8,8);}
s8 getSwNo2() { return fopAcM_GetParamBit(this,0,8);}
/* 80BAE36C */ void PPCallBack(fopAc_ac_c*, fopAc_ac_c*, s16, dBgW_Base::PushPullLabel);
/* 80BAE5FC */ void initBaseMtx();
/* 80BAE68C */ void setBaseMtx();
@ -76,8 +90,64 @@ public:
/* 80BB2C8C */ int Delete();
static u8 const M_dir_base[8];
private:
/* 0x568 */ u8 field_0x568[0x1258 - 0x568];
// private:
/* 0x05A0 */ u8 field_0x5a0[0x8];
/* 0x05A8 */ J3DModel* mpModel;
/* 0x05AC */ mDoExt_brkAnm* mpBrkAnm;
/* 0x05B0 */ mDoExt_baseAnm* mpBaseAnm;
/* 0x05B4 */ J3DModel* mpModel2;
/* 0x05B8 */ u8 field_0x5b8[0xa];
/* 0x05C4 */ J3DModel* mpModel3;
/* 0x05C8 */ mDoExt_baseAnm* mpBaseAnm2;
/* 0x05CC */ u8 field_0x5cc[0x7e4 - 0x5cc];
/* 0x07E4 */ dCcD_Stts mStts;
/* 0x0820 */ dCcD_Sph mSph;
/* 0x0958 */ dCcD_Cps mCps;
/* 0x0A9c */ dCcD_Cyl mCyl[4];
/* 0x0F8C */ s16 mHeadJntNo;
/* 0x0F8E */ s16 mBigGearJntNo;
/* 0x0F90 */ s16 mSmallGear0JntNo;
/* 0x0F92 */ s16 mSmallGear1JntNo;
/* 0x0F94 */ s16 mSmallGear2JntNo;
/* 0x0F96 */ s16 field_0xf96;
/* 0x0F96 */ s16 field_0xf98;
/* 0x0F9A */ s16 field_0xf9a;
/* 0x0F9C */ s16 field_0xf9c;
/* 0x0F9E */ s16 field_0xf9e;
/* 0x0FA0 */ s16 field_0xfa0;
/* 0x0FA2 */ s16 field_0xfa2;
/* 0x0FA4 */ s16 field_0xfa4;
/* 0x0FA6 */ s16 field_0xfa6;
/* 0x0FA8 */ u8 field_0xfa8[0xfb4 - 0xfa8];
/* 0x0FB4 */ J3DMaterial* mpMaterial;
/* 0x0FB8 */ cXyz field_0xfb8;
/* 0x0FC4 */ csXyz field_0xfc4;
/* 0x0FCA */ u8 field_0xfca[2];
/* 0x0FCC */ u32 field_0xfcc;
/* 0x0FD0 */ u8 field_0xfd0[0xff0 - 0xfd0];
/* 0x0FF0 */ f32 field_0xff0;
/* 0x0FF4 */ u8 field_0xff4[3];
/* 0x0FF7 */ u8 field_0xff7;
/* 0x0FF8 */ f32 field_0xff8;
/* 0x0FFC */ f32 field_0xffc;
/* 0x1000 */ f32 field_0x1000;
/* 0x1004 */ u8 field_0x1004[0x100c - 0x1004];
/* 0x100C */ f32 field_0x100c;
/* 0x1010 */ u8 field_0x1010[0x1038 - 0x1010];
/* 0x1038 */ u8 field_0x1038;
/* 0x1039 */ u8 field_0x1039;
/* 0x103A */ u8 field_0x103a[0x10a0 - 0x103a];
/* 0x10A0 */ cXyz field_0x10a0;
/* 0x10AC */ u8 field_0x10ac[0x10c0 - 0x10ac];
/* 0x10C0 */ int field_0x10c0;
/* 0x10C4 */ s16 field_0x10c4[4];
/* 0x10D4 */ u8 field_0x10cc[0x10d2 - 0x10cc];
/* 0x10D2 */ u8 field_0x10d2;
/* 0x10D3 */ u8 field_0x10d3;
/* 0x10D4 */ u8 field_0x10d4[0x10e8 - 0x10d4];
/* 0x10E8 */ f32 field_0x10e8;
/* 0x10EC */ f32 field_0x10ec;
/* 0x10F0 */ u8 field_0x10f0[0x1258 - 0x10f0];
};
STATIC_ASSERT(sizeof(daObjBm_c) == 0x1258);

View File

@ -10,7 +10,7 @@
/**
* @ingroup actors-objects
* @class daObjKAM_c
* @brief Insect - Mantis
* @brief Insect - Mantis (Kamakiri)
*
* @details
*

View File

@ -10,7 +10,7 @@
/**
* @ingroup actors-objects
* @class daObj_Kanban2_c
* @brief Sign 2
* @brief Sign 2 (Shredded Sign)
*
* @details
*

View File

@ -10,7 +10,7 @@
/**
* @ingroup actors-objects
* @class daObjKAT_c
* @brief Insect - Snail
* @brief Insect - Snail (Katatsumuri)
*
* @details
*

View File

@ -9,7 +9,7 @@
/**
* @ingroup actors-objects
* @class obj_so_class
* @brief Monkey Cage
* @brief Monkey Cage (Saru Ori)
*
* @details
*

View File

@ -9,7 +9,7 @@
/**
* @ingroup actors-objects
* @class daObjTOMBO_c
* @brief Insect - Dragonfly
* @brief Insect - Dragonfly (Tonbo)
*
* @details
*

View File

@ -253,7 +253,7 @@ static fopAc_ac_c* get_pla(fopAc_ac_c* a_this) {
/* 80504BD4-80504D28 000254 0154+00 36/36 0/0 0/0 .text anm_init__FP10e_rd_classifUcf */
static void anm_init(e_rd_class* i_this, int i_anmID, f32 i_morf, u8 i_mode, f32 i_speed) {
if (i_this->field_0x680 == 0) {
if (i_this->field_0x129a != 0) {
if (i_this->mBossMode != 0) {
if (i_anmID < 73) {
i_this->mpModelMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("E_rdb", i_anmID),
i_mode, i_morf, i_speed, 0.0f, -1.0f);
@ -425,7 +425,7 @@ static int daE_RD_Draw(e_rd_class* i_this) {
g_env_light.settingTevStruct(0, &a_this->current.pos, &a_this->tevStr);
g_env_light.setLightTevColorType_MAJI(model, &a_this->tevStr);
if (i_this->field_0x129a == 0 && i_this->field_0x968 != 0) {
if (i_this->mBossMode == 0 && i_this->field_0x968 != 0) {
modelData = model->getModelData();
for (u16 i = 0; i < modelData->getMaterialNum(); i++) {
matNode_p = modelData->getMaterialNodePointer(i);
@ -435,7 +435,7 @@ static int daE_RD_Draw(e_rd_class* i_this) {
}
}
if (i_this->field_0x129a == 3) {
if (i_this->mBossMode == 3) {
modelData = model->getModelData();
matNode_p = modelData->getMaterialNodePointer(3);
J3DShape* shape = matNode_p->getShape();
@ -446,7 +446,7 @@ static int daE_RD_Draw(e_rd_class* i_this) {
i_this->mpModelMorf->entryDL();
if (i_this->field_0x129a == 0 && i_this->field_0x968 != 0) {
if (i_this->mBossMode == 0 && i_this->field_0x968 != 0) {
modelData = model->getModelData();
for (u16 i = 0; i < modelData->getMaterialNum(); i++) {
matNode_p = modelData->getMaterialNodePointer(i);
@ -469,7 +469,7 @@ static int daE_RD_Draw(e_rd_class* i_this) {
}
}
if (i_this->field_0x129a != 0) {
if (i_this->mBossMode != 0) {
for (int i = 0; i < 14; i++) {
if (i_this->mpBossArmorParts[i] != NULL) {
g_env_light.setLightTevColorType_MAJI(i_this->mpBossArmorParts[i], &a_this->tevStr);
@ -684,18 +684,18 @@ static void ride_off(e_rd_class* i_this) {
bullbo->mActionID = 0;
}
bullbo->field_0x5b4 = 0;
bullbo->mActionMode = 0;
} else if (bullbo->mActionID == 21) {
bullbo->field_0x5b4 = 0;
bullbo->mActionMode = 0;
} else if ((bullbo->field_0x6be & 1) == 0) {
if (bullbo->mActionID == 6 && (bullbo->field_0x5b4 == 2 || bullbo->field_0x5b4 == 3)) {
bullbo->field_0x5b4 = 1;
if (bullbo->mActionID == 6 && (bullbo->mActionMode == 2 || bullbo->mActionMode == 3)) {
bullbo->mActionMode = 1;
} else {
bullbo->field_0x5b4 = 0;
bullbo->mActionMode = 0;
}
bullbo->mActionID = 7;
bullbo->field_0x698[1] = cM_rndF(30.0f) + 80.0f;
bullbo->field_0x69a = cM_rndF(30.0f) + 80.0f;
}
}
@ -718,7 +718,7 @@ static void* s_wb_sub(void* i_actor, void* i_data) {
if (fopAcM_IsActor(i_actor) && fopAcM_GetName(i_actor) == PROC_E_WB && ((e_wb_class*)i_actor)->mActionID != ACTION_DROP &&
((e_wb_class*)i_actor)->mActionID != ACTION_DAMAGE && ((e_wb_class*)i_actor)->mActionID != ACTION_A_DAMAGE && ((e_wb_class*)i_actor)->mActionID != ACTION_STAND) {
e_rd_class* i_this = (e_rd_class*)i_data;
if (i_this->field_0x129a == ((e_wb_class*)i_actor)->field_0x79d &&
if (i_this->mBossMode == ((e_wb_class*)i_actor)->field_0x79d &&
(data_80519230 != 0 || (((e_wb_class*)i_actor)->field_0x6be & 3) != 3) && target_info_count < 10) {
target_info[target_info_count] = (fopAc_ac_c*)i_actor;
target_info_count++;
@ -1835,7 +1835,7 @@ static void e_rd_wb_search(e_rd_class* i_this) {
} else {
if (i_this->mMode >= 2 && bullbo->mActionID != 1) {
bullbo->mActionID = 1;
bullbo->field_0x5b4 = 0;
bullbo->mActionMode = 0;
}
switch (i_this->mMode) {
@ -1977,7 +1977,7 @@ static void e_rd_wb_search(e_rd_class* i_this) {
i_this->mAction = ACTION_WB_RIDE;
i_this->mMode = 0;
bullbo->mActionID = 4;
bullbo->field_0x5b4 = 0;
bullbo->mActionMode = 0;
}
}
@ -2006,29 +2006,29 @@ static void e_rd_wb_ride(e_rd_class* i_this) {
switch (i_this->mMode) {
case 0:
i_this->mMode = 1;
if (i_this->field_0x129a == 0) {
if (i_this->mBossMode == 0) {
anm_init(i_this, BCK_RD_JUMP_C, 1.0f, 0, 1.0f);
}
// fallthrough
case 1:
if (i_this->mpModelMorf->isStop() || i_this->field_0x129a != 0) {
if (i_this->field_0x129a != 0) {
bullbo->field_0x5b4 = 0;
if (i_this->mpModelMorf->isStop() || i_this->mBossMode != 0) {
if (i_this->mBossMode != 0) {
bullbo->mActionMode = 0;
i_this->mMode = 0;
if (i_this->field_0x129a == 3) {
if (i_this->mBossMode == 3) {
bullbo->mActionID = 17;
// Hyrule Field
if (strcmp(dComIfGp_getStartStageName(), "F_SP121") == 0) {
bullbo->field_0x5b4 = -100;
bullbo->mActionMode = -100;
i_this->mAction = ACTION_IKKI2_START;
} else {
i_this->mAction = ACTION_WB_RUN;
}
} else if (i_this->field_0x129a == 2) {
} else if (i_this->mBossMode == 2) {
bullbo->mActionID = 15;
i_this->mAction = ACTION_WB_RUN;
} else if (i_this->field_0x129a == 4) {
} else if (i_this->mBossMode == 4) {
bullbo->mActionID = 19;
i_this->mAction = ACTION_LV9_END;
} else if (cDmr_SkipInfo == 0) {
@ -2042,7 +2042,7 @@ static void e_rd_wb_ride(e_rd_class* i_this) {
}
} else {
bullbo->mActionID = 6;
bullbo->field_0x5b4 = 0;
bullbo->mActionMode = 0;
i_this->mAction = ACTION_WB_RUN;
i_this->mMode = 0;
}
@ -2324,7 +2324,7 @@ static void e_rd_wb_run_B(e_rd_class* i_this) {
dAttention_c* attention;
if (bullbo != NULL) {
if (i_this->field_0x129a == 2 || i_this->field_0x129a == 3) {
if (i_this->mBossMode == 2 || i_this->mBossMode == 3) {
fopAcM_OffStatus(a_this, 0);
a_this->attention_info.flags = 0;
}
@ -2385,11 +2385,13 @@ static void e_rd_wb_run_B(e_rd_class* i_this) {
}
}
if (fpcM_Search(s_wbrun_sub, i_this) != NULL && i_this->field_0x990[3] == 0) {
i_this->field_0x6c2 = 1;
i_this->field_0x990[3] = cM_rndF(100.0f) + 200.0f;
}
// check if we need to jump a fence
if ((bullbo->field_0x6be & 0x100) != 0) {
i_this->mAction = ACTION_WB_BJUMP;
i_this->mMode = 0;
@ -3791,7 +3793,7 @@ static void e_rd_ikki_end(e_rd_class* i_this) {
bullbo->field_0x6be &= ~i_this->field_0x9be;
i_this->field_0x9be = 0;
bullbo->mActionID = 16;
bullbo->field_0x5b4 = 0;
bullbo->mActionMode = 0;
bullbo->field_0x169e = 10;
}
@ -3839,7 +3841,7 @@ static void e_rd_ikki2_end(e_rd_class* i_this) {
anm_init(i_this, BCK_RD_RRUN_BACK, 0.0f, 0, 1.0f);
i_this->mMode = 1;
bullbo->mActionID = 18;
bullbo->field_0x5b4 = 0;
bullbo->mActionMode = 0;
bullbo->field_0x169e = 90;
mDoAud_bgmStop(30);
}
@ -3923,7 +3925,7 @@ static void e_rd_lv9_end(e_rd_class* i_this) {
e_rdb_class* king_bulblin = (e_rdb_class*)fpcM_Search(s_rdb_sub, i_this);
if (king_bulblin != NULL && king_bulblin->mDemoMode == 14) {
anm_init(i_this, e_rdb_class::BCK_RB_RNEIGH, 3.0f, 0, 1.0f);
bullbo->field_0x5b4++;
bullbo->mActionMode++;
i_this->mMode = 4;
}
}
@ -4110,7 +4112,7 @@ static void damage_check(e_rd_class* i_this) {
i_this->mStts.Move();
if (i_this->field_0x998 == 0) {
if (i_this->field_0x129a != 0) {
if (i_this->mBossMode != 0) {
a_this->health = 100;
}
@ -4118,7 +4120,7 @@ static void damage_check(e_rd_class* i_this) {
if (i_this->field_0xd58[i].ChkTgHit() != 0) {
i_this->field_0x998 = 6;
i_this->mAtInfo.mpCollider = i_this->field_0xd58[i].GetTgHitObj();
if (i_this->field_0x129a == 3) {
if (i_this->mBossMode == 3) {
s16 sVar1 = a_this->shape_angle.y - i_this->mPlayerAngleY;
at_power_check(&i_this->mAtInfo);
if (i_this->mAtInfo.mpCollider->ChkAtType(AT_TYPE_ARROW) || i_this->mAtInfo.mpCollider->ChkAtType(AT_TYPE_BOMB)) {
@ -4139,7 +4141,7 @@ static void damage_check(e_rd_class* i_this) {
}
uVar1 = 3;
bullbo->field_0x698[3] = 100;
bullbo->field_0x69e = 100;
dComIfGs_onSaveDunSwitch(7);
} else {
uVar1 = 2;
@ -4255,9 +4257,9 @@ static void damage_check(e_rd_class* i_this) {
small_damage(i_this, i);
i_this->field_0x998 = 3;
} else {
if (i_this->field_0x129a != 0 && bullbo != NULL) {
if (i_this->mBossMode != 0 && bullbo != NULL) {
i_this->field_0x998 = 20;
if (i_this->field_0x129a == 2) {
if (i_this->mBossMode == 2) {
bullbo->field_0x79e++;
if (bullbo->field_0x79e == 1) {
a_this->health = 0;
@ -4316,7 +4318,7 @@ static void damage_check(e_rd_class* i_this) {
i_this->mMode = 0;
mDoAud_seStart(Z2SE_EN_RDB_V_FAINT, 0, 0, 0);
bullbo->mActionID = 31;
bullbo->field_0x5b4 = 0;
bullbo->mActionMode = 0;
mDoAud_bgmStop(30);
return;
}
@ -4958,7 +4960,7 @@ static void action(e_rd_class* i_this) {
break;
case ACTION_WB_RUN:
if (i_this->field_0x129a != 0) {
if (i_this->mBossMode != 0) {
e_rd_wb_run_B(i_this);
} else {
e_rd_wb_run(i_this);
@ -5192,7 +5194,7 @@ static void action(e_rd_class* i_this) {
MTXCopy(bullbo->mpModelMorf->getModel()->getAnmMtx(bullbo->field_0x688 + 16), *calc_mtx);
}
if (i_this->field_0x129a != 0) {
if (i_this->mBossMode != 0) {
sp25c.set(0.0f, BREG_F(4) + -65.0f, 0.0f);
} else {
sp25c.set(0.0f, BREG_F(4) + -45.0f, 0.0f);
@ -6258,7 +6260,7 @@ static int daE_RD_Execute(e_rd_class* i_this) {
i_this->field_0x970++;
if (i_this->field_0x129a == 0) {
if (i_this->mBossMode == 0) {
i_this->field_0x1297 = i_this->field_0x1298;
} else {
fopAc_ac_c* player = dComIfGp_getPlayer(0);
@ -6341,7 +6343,7 @@ static int daE_RD_Execute(e_rd_class* i_this) {
if (!i_this->mObjAcch.ChkGroundHit()) {
if (a_this->speed.y < -10.0f) {
i_this->field_0xaf2++;
if (i_this->field_0xaf2 == 20 && i_this->field_0x129a == 0) {
if (i_this->field_0xaf2 == 20 && i_this->mBossMode == 0) {
i_this->mSound.startCreatureVoice(Z2SE_EN_RD_V_DEATH, -1);
}
}
@ -6378,7 +6380,7 @@ static int daE_RD_Execute(e_rd_class* i_this) {
mDoMtx_stack_c::ZrotM(a_this->shape_angle.z);
f32 fVar1 = l_HIO.model_size * a_this->scale.x;
if (i_this->field_0x129a != 0) {
if (i_this->mBossMode != 0) {
fVar1 *= l_HIO.field_0xc;
}
mDoMtx_stack_c::scaleM(fVar1, fVar1, fVar1);
@ -6409,7 +6411,7 @@ static int daE_RD_Execute(e_rd_class* i_this) {
}
}
if (i_this->field_0x129a != 0) {
if (i_this->mBossMode != 0) {
if (i_this->mAnmID == e_rdb_class::BCK_RB_RCOMEON) {
if (i_this->mpModelMorf->checkFrame(30.0f)) {
i_this->mSound.startCreatureVoice(Z2SE_EN_RDB_V_LAUGH, -1);
@ -6508,7 +6510,7 @@ static int daE_RD_Execute(e_rd_class* i_this) {
spbc.set(-20000.0f, 200000.0f, 30000.0f);
}
if (i_this->field_0x129a != 0) {
if (i_this->mBossMode != 0) {
MTXCopy(model->getAnmMtx(AREG_S(9) + 6), *calc_mtx);
} else {
MTXCopy(model->getAnmMtx(13), *calc_mtx);
@ -6530,7 +6532,7 @@ static int daE_RD_Execute(e_rd_class* i_this) {
a_this->attention_info.position = a_this->current.pos;
a_this->attention_info.position.y += 190.0f;
if (i_this->field_0x129a != 0) {
if (i_this->mBossMode != 0) {
a_this->attention_info.position.y += 120.0f;
}
} else {
@ -6538,10 +6540,10 @@ static int daE_RD_Execute(e_rd_class* i_this) {
a_this->attention_info.position.y += 30.0f;
}
if (i_this->field_0x129a != 0) {
if (i_this->mBossMode != 0) {
f32 fVar2 = 60.0f;
f32 fVar1 = 0.0f;
if (i_this->field_0x129a == 2) {
if (i_this->mBossMode == 2) {
fVar2 = 90.0f;
fVar1 = l_HIO.field_0x3c;
}
@ -6580,13 +6582,13 @@ static int daE_RD_Execute(e_rd_class* i_this) {
dComIfG_Ccsp()->Set(&i_this->field_0xd58[i]);
if (i_this->field_0x129a == 1 && i_this->field_0x9bc == 2) {
if (i_this->mBossMode == 1 && i_this->field_0x9bc == 2) {
i_this->field_0xd58[i].OnTgNoHitMark();
} else {
i_this->field_0xd58[i].OffTgNoHitMark();
}
if (i_this->field_0x129a == 3) {
if (i_this->mBossMode == 3) {
for (int j = 0; j < 3; j++) {
i_this->field_0xd58[j].SetTgType(0x2022);
i_this->field_0xd58[j].OnTgNoHitMark();
@ -6774,11 +6776,11 @@ static int daE_RD_Execute(e_rd_class* i_this) {
0x828E,
};
if (i_this->field_0x129a != 0) {
if (i_this->mBossMode != 0) {
for (int i = 0; i < 14; i++) {
if (i_this->mpBossArmorParts[i] != NULL) {
if (i_this->field_0x70c[i] == 0) {
if (i_this->field_0x129a == 3) {
if (i_this->mBossMode == 3) {
MTXCopy(i_this->mpModelMorf->getModel()->getAnmMtx(ikki2_boss_part_idx[i]), *calc_mtx);
} else {
MTXCopy(i_this->mpModelMorf->getModel()->getAnmMtx(boss_part_idx[i]), *calc_mtx);
@ -6864,7 +6866,7 @@ static int daE_RD_Execute(e_rd_class* i_this) {
}
}
if (i_this->field_0x129a == 0 && i_this->field_0x9bc == 0) {
if (i_this->mBossMode == 0 && i_this->field_0x9bc == 0) {
fopAc_ac_c* player = dComIfGp_getPlayer(0);
MTXCopy(i_this->mpModelMorf->getModel()->getAnmMtx(11), mDoMtx_stack_c::get());
mDoMtx_stack_c::multVecZero(&spa4);
@ -6921,7 +6923,7 @@ static void ride_game_actor_set(e_rd_class* i_this) {
cXyz sp70, i_pos;
csXyz i_angle;
OS_REPORT("E3 2005 ACTOR SET %d\n", i_this->field_0x129a);
OS_REPORT("E3 2005 ACTOR SET %d\n", i_this->mBossMode);
static cXyz set_pos[6] = {
cXyz(0.0f, 1500.0f, 2500.0f),
cXyz(800.0f, 1500.0f, -4800.0f),
@ -6933,13 +6935,13 @@ static void ride_game_actor_set(e_rd_class* i_this) {
dBgS_GndChk gnd_chk;
int iVar1 = 6;
if (i_this->field_0x129a >= 2) {
if (i_this->mBossMode >= 2) {
iVar1 = 1;
}
for (int i = 0; i < iVar1; i++) {
u32 i_parameters;
if (i_this->field_0x129a == 1) {
if (i_this->mBossMode == 1) {
cMtx_YrotS(*calc_mtx, player->shape_angle.y);
sp70 = set_pos[i];
@ -6954,15 +6956,15 @@ static void ride_game_actor_set(e_rd_class* i_this) {
i_angle = player->shape_angle;
i_angle.y += 0x4000;
i_parameters = 0x80000005;
} else if (i_this->field_0x129a == 2) {
} else if (i_this->mBossMode == 2) {
i_pos.set(34789.0f, -290.0f, -36177.0f);
i_angle.set(0, 0, 0);
i_parameters = 0x80000007;
} else if (i_this->field_0x129a == 3) {
} else if (i_this->mBossMode == 3) {
i_pos.set(-93620.0f, -5750.0f, 49650.0f);
i_angle.set(0, -0x8000, 0);
i_parameters = 0x80000008;
} else if (i_this->field_0x129a == 4) {
} else if (i_this->mBossMode == 4) {
i_pos = a_this->home.pos;
i_angle = a_this->home.angle;
i_parameters = 0x80000009;
@ -7012,7 +7014,7 @@ static int useHeapInit(fopAc_ac_c* a_this) {
J3DModel* model;
J3DModelData* modelData;
if (i_this->field_0x129a != 0) {
if (i_this->mBossMode != 0) {
i_this->mpModelMorf = new mDoExt_McaMorfSO((J3DModelData*)dComIfG_getObjectRes("E_rdb", e_rdb_class::BMDR_RB), NULL, NULL,
(J3DAnmTransform*)dComIfG_getObjectRes("E_rdb", e_rdb_class::BCK_RB_RWAIT), 2, 1.0f,
0, -1, &i_this->mSound, 0x80000, 0x11000084);
@ -7027,7 +7029,7 @@ static int useHeapInit(fopAc_ac_c* a_this) {
model->getModelData()->getJointNodePointer(i)->setCallBack(nodeCallBack_B);
}
if (i_this->field_0x129a == 1) {
if (i_this->mBossMode == 1) {
i_this->mpMorfHornAnm = new mDoExt_McaMorf((J3DModelData*)dComIfG_getObjectRes("E_rdb", e_rdb_class::BMDR_RB_HORN),
NULL, NULL, NULL, 2, 1.0f, 0, -1, 1, NULL, 0x80000, 0x11000084);
if (i_this->mpMorfHornAnm == NULL || i_this->mpMorfHornAnm->getModel() == NULL) {
@ -7051,7 +7053,7 @@ static int useHeapInit(fopAc_ac_c* a_this) {
};
for (int i = 0; i < 14; i++) {
if (i_this->field_0x129a == 3) {
if (i_this->mBossMode == 3) {
if (i < 2) {
modelData = (J3DModelData*)dComIfG_getObjectRes("E_rdb", ikki2_boss_part_bmd[i]);
JUT_ASSERT(10672, modelData != 0);
@ -7062,7 +7064,7 @@ static int useHeapInit(fopAc_ac_c* a_this) {
} else {
i_this->field_0x70c[i] = 1;
}
} else if (i_this->field_0x129a == 1 || i == 13) {
} else if (i_this->mBossMode == 1 || i == 13) {
modelData = (J3DModelData*)dComIfG_getObjectRes("E_rdb", boss_part_bmd[i]);
JUT_ASSERT(10687, modelData != 0);
i_this->mpBossArmorParts[i] = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084);
@ -7169,13 +7171,13 @@ static cPhs__Step daE_RD_Create(fopAc_ac_c* a_this) {
if (((i_this->field_0x5b6 == 4 || i_this->field_0x5b6 == 5) || i_this->field_0x5b6 == 11) || i_this->field_0x5b6 == 12) {
if (i_this->field_0x5b6 == 4) {
i_this->field_0x129a = 1;
i_this->mBossMode = 1;
} else if (i_this->field_0x5b6 == 5) {
i_this->field_0x129a = 2;
i_this->mBossMode = 2;
} else if (i_this->field_0x5b6 == 11) {
i_this->field_0x129a = 3;
i_this->mBossMode = 3;
} else if (i_this->field_0x5b6 == 12) {
i_this->field_0x129a = 4;
i_this->mBossMode = 4;
}
i_this->mResName = "E_rdb";
@ -7209,7 +7211,7 @@ static cPhs__Step daE_RD_Create(fopAc_ac_c* a_this) {
return cPhs_ERROR_e;
}
if (i_this->field_0x129a != 0) {
if (i_this->mBossMode != 0) {
boss = i_this;
i_this->field_0x5b6 = 1;
}
@ -7341,11 +7343,11 @@ static cPhs__Step daE_RD_Create(fopAc_ac_c* a_this) {
a_this->home.angle.z = 0;
u32 i_size;
if (i_this->field_0x129a == 1) {
if (i_this->mBossMode == 1) {
i_size = 0xAD60;
} else if (i_this->field_0x129a == 2) {
} else if (i_this->mBossMode == 2) {
i_size = 0x3C00;
} else if (i_this->field_0x129a == 3) {
} else if (i_this->mBossMode == 3) {
i_size = 0x4400;
} else {
i_size = 0x4FF0;
@ -7356,7 +7358,7 @@ static cPhs__Step daE_RD_Create(fopAc_ac_c* a_this) {
return cPhs_ERROR_e;
}
if (i_this->field_0x129a != 0) {
if (i_this->mBossMode != 0) {
ride_game_actor_set(i_this);
}
@ -7393,7 +7395,7 @@ static cPhs__Step daE_RD_Create(fopAc_ac_c* a_this) {
i_this->field_0xd58[i].Set(cc_sph_src);
i_this->field_0xd58[i].SetStts(&i_this->mStts);
if (i_this->field_0x129a != 0) {
if (i_this->mBossMode != 0) {
i_this->field_0xd58[i].SetTgType(0xD8FAFD3F);
}
}
@ -7417,7 +7419,7 @@ static cPhs__Step daE_RD_Create(fopAc_ac_c* a_this) {
i_this->mSound.init(&a_this->current.pos, &a_this->eyePos, 3, 1);
if (i_this->field_0x129a != 0) {
if (i_this->mBossMode != 0) {
i_this->mSound.setEnemyName("E_rdb");
} else {
i_this->mSound.setEnemyName("E_rd");
@ -7440,7 +7442,7 @@ static cPhs__Step daE_RD_Create(fopAc_ac_c* a_this) {
// Lake Hylia or Hyrule Field
fopAcM_OffStatus(a_this, fopAcM_STATUS_UNK_004000);
}
} else if (i_this->field_0x129a != 4) {
} else if (i_this->mBossMode != 4) {
fopAcM_OffStatus(a_this, fopAcM_STATUS_UNK_004000);
}

File diff suppressed because it is too large Load Diff

View File

@ -18,13 +18,15 @@
/**
* @class daE_YK_HIO_c
* @brief Shadow Keese Host Input Output class.
*
*
*/
class daE_YK_HIO_c {
class daE_YK_HIO_c : public JORReflexible {
public:
/* 8080482C */ daE_YK_HIO_c();
/* 808077E0 */ virtual ~daE_YK_HIO_c() {}
void genMessage(JORMContext*);
/* 0x00 */ // vtable
/* 0x04 */ s8 field_0x04; ///< @brief Initialized to -1, appears unused.
/* 0x08 */ f32 mModelScale; ///< @brief Base model scale factor (default: 1.0).
/* 0x0C */ f32 mFlySpeed; ///< @brief Base flying speed (default: 15.0).
@ -33,12 +35,6 @@ public:
/* 0x18 */ f32 mChargeSpeed; ///< @brief Speed when charging at player (default: 40.0).
};
/* 80807EF8-80807EFC 000008 0004+00 2/2 0/0 0/0 .bss None */
static u8 data_80807EF8;
/* 80807F08-80807F24 000018 001C+00 9/9 0/0 0/0 .bss l_HIO */
static daE_YK_HIO_c l_HIO;
/**
* @brief Constructor for Shadow Keese HIO (Host Input Output) configuration class
*
@ -58,6 +54,24 @@ daE_YK_HIO_c::daE_YK_HIO_c() {
mChargeSpeed = 40.0f;
}
/* 80807EF8-80807EFC 000008 0004+00 2/2 0/0 0/0 .bss None */
static u8 data_80807EF8;
/* 80807F08-80807F24 000018 001C+00 9/9 0/0 0/0 .bss l_HIO */
static daE_YK_HIO_c l_HIO;
#ifdef DEBUG
void daE_YK_HIO_c::genMessage(JORMContext* ctx) {
ctx->genLabel("闇キース", 0x80000001, 0, NULL, 0xFFFF, 0xFFFF, 512, 24);
ctx->genSlider("基本サイズ", &mModelScale, 0.0f, 3.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x512, 24);
ctx->genSlider("飛行速度", &mFlySpeed, 0.0f, 50.0f, 0, NULL, 0xFFFF, 0xFFFF, 512, 24);
ctx->genSlider("戦闘開始範囲", &mAttackRange, 0.0f, 600.0f,0, NULL, 0xFFFF, 0xFFFF, 512, 24);
ctx->genSlider("戦闘速度", &mCruiseSpeed, 0.0f, 50.0f, 0, NULL, 0xFFFF, 0xFFFF, 512, 24);
ctx->genSlider("突進速度", &mChargeSpeed, 0.0f, 50.0f, 0, NULL, 0xFFFF, 0xFFFF, 512, 24);
}
#endif
/**
* @brief Makes a Shadow Keese disappear with effects and item drops
*

View File

@ -9,6 +9,8 @@
#include "d/d_cc_d.h"
#include "dol2asm.h"
#include "d/d_camera.h"
#include "d/d_com_inf_game.h"
#include "SSystem/SComponent/c_lib.h"
//
// Forward References:
@ -253,28 +255,104 @@ extern "C" void __register_global_object();
/* 80BAE36C-80BAE4A8 0000EC 013C+00 1/1 0/0 0/0 .text
* PPCallBack__9daObjBm_cFP10fopAc_ac_cP10fopAc_ac_csQ29dBgW_Base13PushPullLabel */
void daObjBm_c::PPCallBack(fopAc_ac_c* param_0, fopAc_ac_c* param_1, s16 param_2,
// NONMATCHING
void daObjBm_c::PPCallBack(fopAc_ac_c* param_0, fopAc_ac_c* i_actorP, s16 param_2,
dBgW_Base::PushPullLabel param_3) {
// NONMATCHING
int tmp = cLib_checkBit((int)param_2, 3);
u32 l_swNo3 = getSwNo3();
u32 l_moveType = getMoveType();
if (tmp && !fopAcM_isSwitch(this,l_swNo3)) {
int tmp2 = cLib_checkBit(tmp,2);
s16 angle = param_2;
if (tmp2) {
angle -= -0x8000;
}
angle -= home.angle.y;
JUT_PANIC(513,"0");
field_0x10c0 = param_2;
if (angle >= -0x2000 && angle < 0x2000) {
tmp = 0;
} else {
if (angle >= 0x2000 && angle < 0x6000) {
tmp = 1;
} else {
if (angle < 0x6000 && angle < -0x6000) {
tmp = 2;
} else {
tmp = 3;
}
}
}
if (l_moveType != 0 || tmp == 0) {
for (int i = 0; i < 4; i++) {
if (tmp == 1) {
field_0x10c4[i] = field_0x10c4[i]+1;
} else {
field_0x10c4[i] = 0;
}
}
field_0x10d2 = 1;
}
}
}
/* 80BAE4A8-80BAE5FC 000228 0154+00 1/1 0/0 0/0 .text nodeCallBack__FP8J3DJointi */
static void nodeCallBack(J3DJoint* param_0, int param_1) {
// NONMATCHING
// NONMATCHING
static int nodeCallBack(J3DJoint* param_0, int param_1) {
if (param_1 == 0) {
u16 jnt_no = param_0->getJntNo();
J3DModel* model = j3dSys.getModel();
daObjBm_c* beamos = (daObjBm_c*)model->getUserArea();
cMtx_copy(model->getAnmMtx(jnt_no), mDoMtx_stack_c::get());
if (jnt_no == beamos->getHeadJoint()) {
mDoMtx_stack_c::XrotM(beamos->field_0xf96 + (beamos->field_0x1000 * cM_scos(beamos->field_0x1000 * beamos->field_0xff0)));
} else {
if (jnt_no == beamos->getBigGearJoint()) {
mDoMtx_stack_c::XrotM(beamos->field_0xf9a);
} else {
if (jnt_no == beamos->getSmallGear0Joint()) {
mDoMtx_stack_c::XrotM(beamos->field_0xf9e);
} else {
if (jnt_no == beamos->getSmallGear1Joint()) {
mDoMtx_stack_c::XrotM(beamos->field_0xfa2);
} else {
if (jnt_no == beamos->getSmallGear2Joint()) {
mDoMtx_stack_c::XrotM(beamos->field_0xfa6);
}
}
}
}
}
cMtx_copy(mDoMtx_stack_c::get(),model->getAnmMtx(jnt_no));
}
}
/* ############################################################################################## */
/* 80BB37B8-80BB37C4 000000 000C+00 13/13 0/0 0/0 .rodata l_eye_offset */
SECTION_RODATA static u8 const l_eye_offset[12] = {
0x00, 0x00, 0x00, 0x00, 0x43, 0xA5, 0x00, 0x00, 0x42, 0x96, 0x00, 0x00,
SECTION_RODATA static f32 const l_eye_offset[4] = {
0.0f,
330.0f,
75.0f,
};
COMPILER_STRIP_GATE(0x80BB37B8, &l_eye_offset);
/* 80BB37C4-80BB37D0 00000C 000C+00 0/1 0/0 0/0 .rodata l_high_beam_offset */
#pragma push
#pragma force_active on
SECTION_RODATA static u8 const l_high_beam_offset[12] = {
0x00, 0x00, 0x00, 0x00, 0x43, 0x7F, 0x00, 0x00, 0x42, 0x82, 0x00, 0x00,
SECTION_RODATA static f32 const l_high_beam_offset[4] = {
0.0f,
255.0f,
65.0f,
};
COMPILER_STRIP_GATE(0x80BB37C4, &l_high_beam_offset);
#pragma pop
@ -282,8 +360,10 @@ COMPILER_STRIP_GATE(0x80BB37C4, &l_high_beam_offset);
/* 80BB37D0-80BB37DC 000018 000C+00 0/1 0/0 0/0 .rodata l_mid_beam_offset */
#pragma push
#pragma force_active on
SECTION_RODATA static u8 const l_mid_beam_offset[12] = {
0x00, 0x00, 0x00, 0x00, 0x43, 0x4D, 0x00, 0x00, 0x42, 0x82, 0x00, 0x00,
SECTION_RODATA static f32 const l_mid_beam_offset[3] = {
0.0f,
205.0f,
65.0f,
};
COMPILER_STRIP_GATE(0x80BB37D0, &l_mid_beam_offset);
#pragma pop
@ -291,17 +371,28 @@ COMPILER_STRIP_GATE(0x80BB37D0, &l_mid_beam_offset);
/* 80BB37DC-80BB37E8 000024 000C+00 0/1 0/0 0/0 .rodata l_low_beam_offset */
#pragma push
#pragma force_active on
SECTION_RODATA static u8 const l_low_beam_offset[12] = {
0x00, 0x00, 0x00, 0x00, 0x43, 0x20, 0x00, 0x00, 0x42, 0x82, 0x00, 0x00,
SECTION_RODATA static f32 const l_low_beam_offset[3] = {
0.0f,
160.0f,
65.0f,
};
COMPILER_STRIP_GATE(0x80BB37DC, &l_low_beam_offset);
#pragma pop
/* 80BB37E8-80BB3818 000030 0030+00 1/1 0/0 0/0 .rodata l_craw_offset */
SECTION_RODATA static u8 const l_craw_offset[48] = {
0xC2, 0xBE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xBE, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xC2, 0xBE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xBE, 0x00, 0x00,
SECTION_RODATA static f32 const l_craw_offset[12] = {
-95.0f,
0.0f,
0.0f,
95.0f,
0.0f,
0.0f,
0.0f,
0.0f,
-95.0f,
0.0f,
0.0f,
95.0f,
};
COMPILER_STRIP_GATE(0x80BB37E8, &l_craw_offset);
@ -321,18 +412,40 @@ COMPILER_STRIP_GATE(0x80BB3824, &lit_3934);
/* 80BAE5FC-80BAE68C 00037C 0090+00 1/1 0/0 0/0 .text initBaseMtx__9daObjBm_cFv */
void daObjBm_c::initBaseMtx() {
// NONMATCHING
field_0x10a0.set(0.5f, 0.5f, 1.0f);
mpModel->setBaseScale(scale);
mpModel3->setBaseScale(scale);
mpModel2->setBaseScale(field_0x10a0);
setBaseMtx();
}
/* 80BAE68C-80BAE778 00040C 00EC+00 2/2 0/0 0/0 .text setBaseMtx__9daObjBm_cFv */
void daObjBm_c::setBaseMtx() {
// NONMATCHING
mDoMtx_stack_c::transS(current.pos.x,current.pos.y,current.pos.z);
mDoMtx_stack_c::YrotM(shape_angle.y);
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
mDoMtx_stack_c::scaleM(1.0f,1.0f,1.0f);
PSMTXCopy(mDoMtx_stack_c::get(),mBgMtx);
#if DEBUG
field_0x10e8 = 0.0f; // change to l_HIO
field_0x10ec = 0.0f; // change to l_HIO
#endif
mpModel2->setBaseScale(field_0x10a0);
mDoMtx_stack_c::transS(field_0xfb8);
mDoMtx_stack_c::ZXYrotM(field_0xfc4);
mpModel2->setBaseTRMtx(mDoMtx_stack_c::get());
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::ZXYrotM(home.angle);
mpModel3->setBaseTRMtx(mDoMtx_stack_c::get());
}
/* ############################################################################################## */
/* 80BB3828-80BB3830 000070 0008+00 2/4 0/0 0/0 .rodata @4106 */
SECTION_RODATA static u8 const lit_4106[8] = {
0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0x43, 0x30, 0x00, 0x00,
0x80, 0x00, 0x00, 0x00,
};
COMPILER_STRIP_GATE(0x80BB3828, &lit_4106);
@ -360,48 +473,58 @@ SECTION_DATA static void* l_eye_matName = (void*)(((char*)&d_a_obj_bemos__string
/* 80BB3A9C-80BB3AA0 -00001 0004+00 0/1 0/0 0/0 .data l_head_joint */
#pragma push
#pragma force_active on
SECTION_DATA static void* l_head_joint = (void*)(((char*)&d_a_obj_bemos__stringBase0) + 0xD);
SECTION_DATA static char* l_head_joint = "head";
#pragma pop
/* 80BB3AA0-80BB3AA4 -00001 0004+00 0/1 0/0 0/0 .data l_bigGear_joint */
#pragma push
#pragma force_active on
SECTION_DATA static void* l_bigGear_joint = (void*)(((char*)&d_a_obj_bemos__stringBase0) + 0x12);
SECTION_DATA static char* l_bigGear_joint = "cogRed";
#pragma pop
/* 80BB3AA4-80BB3AA8 -00001 0004+00 0/1 0/0 0/0 .data l_smallGear0_joint */
#pragma push
#pragma force_active on
SECTION_DATA static void* l_smallGear0_joint = (void*)(((char*)&d_a_obj_bemos__stringBase0) + 0x19);
SECTION_DATA static char* l_smallGear0_joint = "cogBlue";
#pragma pop
/* 80BB3AA8-80BB3AAC -00001 0004+00 0/1 0/0 0/0 .data l_smallGear1_joint */
#pragma push
#pragma force_active on
SECTION_DATA static void* l_smallGear1_joint = (void*)(((char*)&d_a_obj_bemos__stringBase0) + 0x21);
SECTION_DATA static char* l_smallGear1_joint = "cogGreen";
#pragma pop
/* 80BB3AAC-80BB3AB0 -00001 0004+00 0/1 0/0 0/0 .data l_smallGear2_joint */
#pragma push
#pragma force_active on
SECTION_DATA static void* l_smallGear2_joint = (void*)(((char*)&d_a_obj_bemos__stringBase0) + 0x2A);
SECTION_DATA static char* l_smallGear2_joint = "cogYellow";
#pragma pop
/* 80BB3AB0-80BB3AC4 00003C 0014+00 0/2 0/0 0/0 .data l_joint_table */
#pragma push
#pragma force_active on
SECTION_DATA static u8 l_joint_table[20] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
SECTION_DATA static char* l_joint_table[5] = {
l_head_joint,
l_bigGear_joint,
l_smallGear0_joint,
l_smallGear1_joint,
l_smallGear2_joint,
};
#pragma pop
/* 80BB3AC4-80BB3ADC 000050 0018+00 0/1 0/0 0/0 .data l_cull_box */
#pragma push
#pragma force_active on
SECTION_DATA static u8 l_cull_box[24] = {
0xC4, 0x96, 0x00, 0x00, 0xC2, 0xC8, 0x00, 0x00, 0xC4, 0x96, 0x00, 0x00,
0x44, 0x96, 0x00, 0x00, 0x43, 0xC8, 0x00, 0x00, 0x44, 0x96, 0x00, 0x00,
SECTION_DATA static Vec l_cull_box[2] = {
{-1200.0f,
-100.0f,
-1200.0f
},
{
1200.0f,
400.0f,
1200.0f
},
};
#pragma pop
@ -457,7 +580,77 @@ static dCcD_SrcCyl l_cyl_src = {
/* 80BAE778-80BAEADC 0004F8 0364+00 1/0 0/0 0/0 .text Create__9daObjBm_cFv */
int daObjBm_c::Create() {
// NONMATCHING
fopAcM_SetMtx(this,mpModel->getBaseTRMtx());
mStts.Init(0xff, 0xff, this);
mSph.Set(l_sph_src);
mSph.SetStts(&mStts);
mCps.Set(l_cps_src);
mCps.SetStts(&mStts);
for (int i = 0; i < 4; i++) {
mCyl[i].Set(l_cyl_src);
mCyl[i].SetStts(&mStts);
}
fopAcM_setCullSizeBox(this,l_cull_box[0].x,l_cull_box[0].y,l_cull_box[0].z,l_cull_box[1].x, l_cull_box[1].y, l_cull_box[1].z);
JUTNameTab* joint_name = mpModel->getModelData()->getJointTree().getJointName();
for (int i = 0; i < 5; i++) {
if ( mpModel->getModelData()->getJointNum() <= i) break;
if (!strcmp(joint_name->getName(i), l_joint_table[2])) {
mHeadJntNo = i;
mpModel->getModelData()->getJointNodePointer(i)->setCallBack(nodeCallBack);
}
}
mpModel->setUserArea((u32)this);
JUTNameTab* material_name = mpModel->getModelData()->getMaterialTable().getMaterialName();
u32 uVar12 = 0;
while( true ) {
if ( mpModel->getModelData()->getMaterialNum() <= uVar12) break;
if (strcmp(material_name->getName(uVar12),"bmEye") == 0) {
mpMaterial = mpModel->getModelData()->getMaterialNodePointer(uVar12);
}
uVar12 = uVar12 + 1;
}
#if DEBUG
if (field_0xfcc == 0) {
OSReport_Error("ブ[モス]。苔のマテリアルがありません");
return 0;
}
#endif
// (**(code **)(*(int *)(this + 0x10a0) + 0x14))(this + 0x1080,this + 0x1068,1);
// (**(code **)(*(int *)(this + 0x10d0) + 0x14))(this + 0x10b0,this + 0x1074,1);
field_0x1039 = 1;
if (fopAcM_isSwitch(this,getSwNo2())) {
field_0xff7 = 0x0;
if (getMoveType() != 1) {
mpBaseAnm2->setFrame(mpBaseAnm2->getEndFrame());
}
initActionObjBemos();
} else {
initActionEnBemos();
if (getSwNo() != -1) {
if (fopAcM_isSwitch(this,getSwNo())) {
field_0xff7 = 0;
initActionSwWait();
}
}
field_0xff7 = 1;
J3DAnmTevRegKey* model_data = (J3DAnmTevRegKey*)dComIfG_getObjectRes("Obj_bm", 0x14);
mpBrkAnm->init(mpModel->getModelData(),model_data,1,2,1.0f,0,-1);
mpBaseAnm->setFrame(mpBaseAnm->getEndFrame());
initActionWarning();
}
initBaseMtx();
return 1;
}
/* ############################################################################################## */

View File

@ -10,18 +10,18 @@
#include "d/actor/d_a_tag_hstop.h"
BOOL e_wb_class::checkWait() {
return field_0x5b4 == 0x2A;
return mActionMode == 0x2A;
}
void e_wb_class::setPlayerRideNow() {
mActionID = ACT_PL_RIDE_NOW;
field_0x5b4 = 0;
mActionMode = 0;
field_0x6be |= 3;
}
void e_wb_class::setPlayerRide() {
mActionID = ACT_PL_RIDE;
field_0x5b4 = 0;
mActionMode = 0;
field_0x6be |= 3;
mZ2Ride.setLinkRiding(true);
@ -34,7 +34,7 @@ void e_wb_class::getOff() {
field_0x692 = 0;
}
field_0x5b4 = 0;
mActionMode = 0;
field_0x6be &= ~3;
mZ2Ride.setLinkRiding(false);
}
@ -44,12 +44,12 @@ BOOL e_wb_class::checkDownDamage() {
}
BOOL e_wb_class::checkNormalRideMode() const {
return mActionID != 0x66 || field_0x5b4 < 1;
return mActionID != 0x66 || mActionMode < 1;
}
void e_wb_class::setRunRideMode() {
if (mActionID == ACT_PL_RIDE) {
field_0x5b4 = 0;
mActionMode = 0;
mActionID = ACT_S_DAMAGE;
field_0x692 = 0x65;
}