d_a_b_yo and d_a_b_yo_ice mostly OK (#2219)

This commit is contained in:
Caroline Madsen 2024-10-19 04:54:40 -04:00 committed by GitHub
parent 0652b2c7b3
commit 69dc7cbbf1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
16 changed files with 4775 additions and 3139 deletions

View File

@ -1501,8 +1501,8 @@ config.libs = [
ActorRel(NonMatching, "d_a_b_oh"),
ActorRel(Matching, "d_a_b_oh2"),
ActorRel(NonMatching, "d_a_b_tn"),
ActorRel(NonMatching, "d_a_b_yo"),
ActorRel(NonMatching, "d_a_b_yo_ice"),
ActorRel(Equivalent, "d_a_b_yo"),
ActorRel(Equivalent, "d_a_b_yo_ice"),
ActorRel(NonMatching, "d_a_b_zant"),
ActorRel(NonMatching, "d_a_b_zant_magic"),
ActorRel(NonMatching, "d_a_b_zant_mobile"),

View File

@ -654,6 +654,10 @@ struct J3DZMode {
mZModeID = calcZModeID(i_compare, j3dZModeTable[mZModeID * 3 + 1], j3dZModeTable[mZModeID * 3 + 2]);
}
void setFunc(u8 i_func) {
mZModeID = calcZModeID(j3dZModeTable[mZModeID * 3], i_func, j3dZModeTable[mZModeID * 3 + 2]);
}
void setUpdateEnable(u8 i_enable) {
mZModeID = calcZModeID(j3dZModeTable[mZModeID * 3], j3dZModeTable[mZModeID * 3 + 1], i_enable);
}
@ -693,6 +697,7 @@ struct J3DBlend : public J3DBlendInfo {
J3DBlend() : J3DBlendInfo(j3dDefaultBlendInfo) {}
J3DBlend(J3DBlendInfo const& info) : J3DBlendInfo(info) {}
void setType(u8 i_type) { mType = i_type; }
void setDstFactor(u8 i_factor) { mDstFactor = i_factor; }
GXBlendMode getBlendMode() const { return (GXBlendMode)mType; }

View File

@ -18,7 +18,7 @@ public:
/* 0x0 */ cBgS_PolyPassChk* mPolyPassChk;
/* 0x4 */ cBgS_GrpPassChk* mGrpPassChk;
/* 0x8 */ fpc_ProcID mActorPid;
/* 0xC */ u8 unk_0x0C;
/* 0xC */ bool mSameActorChk;
/* 0x10 */ // __vtable__
public:
@ -32,6 +32,7 @@ public:
void SetGrpPassChk(cBgS_GrpPassChk* p_chk) { mGrpPassChk = p_chk; }
cBgS_PolyPassChk* GetPolyPassChk() const { return mPolyPassChk; }
cBgS_GrpPassChk* GetGrpPassChk() const { return mGrpPassChk; }
void OffSameActorChk() { mSameActorChk = false; }
virtual ~cBgS_Chk(void);
}; // Size: 0x14

View File

@ -494,6 +494,8 @@ public:
void OffCoSPrmBit(u32 flag) { mObjCo.OffSPrmBit(flag); }
void SetAtType(u32 type) { mObjAt.SetType(type); }
void OnAtSetBit() { mObjAt.OnSPrmBit(1); }
void OnAtNoTgHitInfSet() { mObjAt.OnSPrmBit(0x20); }
void OffAtNoTgHitInfSet() { mObjAt.OffSPrmBit(0x20); }
u32 MskTgSPrm(u32 mask) const { return mObjTg.MskSPrm(mask); }
void SetAtAtp(int atp) { mObjAt.SetAtp(atp); }
void OffCoSetBit() { mObjCo.ClrSet(); }

View File

@ -1,7 +1,14 @@
#ifndef D_A_B_YO_H
#define D_A_B_YO_H
#include "f_op/f_op_actor_mng.h"
#include "Z2AudioLib/Z2Creature.h"
#include "f_op/f_op_actor.h"
#include "d/d_cc_d.h"
#include "d/d_cc_uty.h"
#include "d/d_bg_s_acch.h"
class dBgW;
class msg_class;
/**
* @ingroup actors-enemies
@ -13,7 +20,7 @@
*/
class daB_YO_c : public fopEn_enemy_c {
public:
/* 8062F51C */ s32 draw();
/* 8062F51C */ int draw();
/* 8062FBEC */ void onIceBreak(u16);
/* 8062FC08 */ void setBck(int, u8, f32, f32);
/* 8062FE0C */ void setActionMode(int, int);
@ -30,16 +37,16 @@ public:
/* 80630BF0 */ void setApperEffect();
/* 80630CA0 */ void setApperEffect2();
/* 80630DD8 */ void demo_skip(int);
/* 80630E3C */ void DemoSkipCallBack(void*, int);
/* 80630E3C */ static int DemoSkipCallBack(void*, int);
/* 80630E70 */ void setYoMessage(int);
/* 80630EAC */ void doYoMessage();
/* 80630EAC */ int doYoMessage();
/* 80630F28 */ void executeOpening();
/* 80632598 */ void reflectFreeMove();
/* 80632660 */ void calcFreeMove(f32);
/* 8063290C */ void setReflectAngle();
/* 806329CC */ void executeChase();
/* 806331CC */ void executeSeriousDemo();
/* 80633EDC */ void checkIcecleRevival();
/* 80633EDC */ u8 checkIcecleRevival();
/* 80633F50 */ void createIcecleRevival(u8);
/* 80634040 */ void executeJump();
/* 80634548 */ void executeAttackIce();
@ -54,48 +61,198 @@ public:
/* 806374BC */ void action();
/* 80637990 */ void mtx_set();
/* 80637B30 */ void cc_set();
/* 80637E10 */ void execute();
/* 80637FC8 */ void _delete();
/* 806380F8 */ void CreateHeap();
/* 806388A0 */ void CreateHeap2();
/* 806389C0 */ void create();
/* 80637E10 */ int execute();
/* 80637FC8 */ int _delete();
/* 806380F8 */ int CreateHeap();
/* 806388A0 */ int CreateHeap2();
/* 806389C0 */ cPhs__Step create();
u8 getModelNo() { return mModelNo;}
s16 getFrizadRollAngle() { return mFrizadRollAngle;}
f32 getModeRarius() { return mModeRarius;}
u8 getFrizadAttack() { return mFrizadAttack;}
u8 getModelNo() { return mModelNo; }
s16 getFrizadRollAngle() { return mIceAngle; }
f32 getModeRarius() { return mFreezardRadius; }
u8 getFrizadAttack() { return mFreezardAttack; }
cXyz getIceCenterPos() { return mIceCenterPos; }
f32 getIceRange() { return mIceRange; }
s16 getIceAngle() { return mIceAngle; }
f32 getPlayerXBuf(int param_0) { return mPlayerXBuf[param_0]; }
f32 getPlayerZBuf(int param_0) { return mPlayerZBuf[param_0]; }
void onIceStatus(u16 i_no) { mIceStatus |= (1 << i_no); }
private:
/* 0x5AC */ u8 field_0x5ac[0x5D8 - 0x5AC];
/* 0x5D8 */ mDoExt_btkAnm* mBtk;
/* 0x5DC */ mDoExt_btpAnm* mBtp;
/* 0x5E0 */ mDoExt_brkAnm* mBrk;
/* 0x5E4 */ mDoExt_bckAnm* mBck;
/* 0x5E8 */ mDoExt_McaMorfSO* mpMorf;
/* 0x5EC */ u8 field_0x5f8[0xF54 - 0x5EC];
/* 0xF54 */ f32 mModeRarius;
/* 0xF58 */ u8 field_0xf58[0xF5C - 0xF58];
/* 0xF5C */ s16 mFrizadRollAngle;
/* 0xF5E */ u8 field_0xf5e[0xF6E - 0xF5E];
/* 0xF6E */ u16 mIceBreak;
/* 0xF70 */ u8 field_0xf70[0xFA8 - 0xF70];
/* 0xFA8 */ u8 mModelNo;
/* 0xFA9 */ u8 field_0xfa9[0xFAD - 0xFA9];
/* 0xFAD */ u8 mFrizadAttack;
/* 0xFAE */ u8 field_0xfae[0xFCC - 0xFAE];
/* 0xFCC */ u8 field_0xfcc;
/* 0xFCD */ u8 field_0xfcd[0x1B88 - 0xFCD];
/* 0x05AC */ request_of_phase_process_class mPhase1;
/* 0x05B4 */ request_of_phase_process_class mPhase2;
/* 0x05BC */ request_of_phase_process_class mPhase3;
/* 0x05C4 */ request_of_phase_process_class mPhase4;
/* 0x05CC */ request_of_phase_process_class mPhase5;
/* 0x05D4 */ mDoExt_btkAnm* mpBtkAnm;
/* 0x05D8 */ mDoExt_btkAnm* mpYetaBtkAnm;
/* 0x05DC */ mDoExt_btpAnm* mpYetaBtpAnm;
/* 0x05E0 */ mDoExt_brkAnm* mpYetaBrkAnm;
/* 0x05E4 */ mDoExt_brkAnm* mpYetaWhiteBrkAnm;
/* 0x05E8 */ J3DModel* mpModel[3];
/* 0x05F4 */ mDoExt_McaMorfSO* mpYetaMorf;
/* 0x05F8 */ mDoExt_McaMorfSO* mpYetaRevertedMorf;
/* 0x05FC */ J3DModel* mpRoomModel[2];
/* 0x0604 */ J3DModel* mpFurnitureModel;
/* 0x0608 */ u32 mIcicleID[10];
/* 0x0630 */ u32 mYstoneID;
/* 0x0634 */ Z2CreatureEnemy mCreatureSound;
/* 0x06D8 */ cXyz unk_6D8[5];
/* 0x0714 */ f32 mHensinScale;
/* 0x0718 */ cXyz mCamEye;
/* 0x0724 */ cXyz mCamCenter;
/* 0x0730 */ f32 mCamFovY;
/* 0x0734 */ f32 mCamEyeRange;
/* 0x0738 */ f32 mCamEyeSpeed;
/* 0x073C */ f32 mCamCenterSpeed;
/* 0x0740 */ s16 mCamEyeAngle;
/* 0x0744 */ f32 mScale;
/* 0x0748 */ f32 mPlayerXBuf[200];
/* 0x0A68 */ f32 mPlayerZBuf[200];
/* 0x0D88 */ s16 unk_D88[200];
/* 0x0F18 */ s16 mPlayerAngle;
/* 0x0F1C */ cXyz mOldPlayerPos;
/* 0x0F28 */ cXyz mYstonePos;
/* 0x0F34 */ cXyz mIceCenterPos;
/* 0x0F40 */ u8 unk_F40[0xF4C - 0xF40];
/* 0x0F4C */ f32 mIceRange;
/* 0x0F50 */ f32 mIceCenterSpeed;
/* 0x0F54 */ f32 mFreezardRadius;
/* 0x0F58 */ f32 unk_F58;
/* 0x0F5C */ s16 mIceAngle;
/* 0x0F5E */ s16 mIceAngleSpeed;
/* 0x0F60 */ f32 mYstoneScale;
/* 0x0F64 */ f32 field_0xf64;
/* 0x0F68 */ s16 field_0xf68;
/* 0x0F6A */ s16 field_0xf6a;
/* 0x0F6C */ u16 mIceStatus;
/* 0x0F6E */ u16 mIceBreak;
/* 0x0F70 */ int mAction;
/* 0x0F74 */ int mMode;
/* 0x0F78 */ u32 mShadowKey;
/* 0x0F7C */ u8 unk_F7C[0xF80 - 0xF7C];
/* 0x0F80 */ s16 field_0xf80;
/* 0x0F82 */ s16 mAngleSpeed;
/* 0x0F84 */ s16 mWallAngle;
/* 0x0F86 */ u16 mIFrameTimer;
/* 0x0F88 */ u16 mIFrameIronTimer;
/* 0x0F8C */ int mActionTimer;
/* 0x0F90 */ int mActionTimer2;
/* 0x0F94 */ int mDamageTimer;
/* 0x0F98 */ int mFreezardTimer;
/* 0x0F9C */ int mQuakeTimer;
/* 0x0FA0 */ int mAttentionTimer;
/* 0x0FA4 */ int mCamLockOnTimer;
/* 0x0FA8 */ u8 mModelNo;
/* 0x0FA9 */ u8 mSwNo;
/* 0x0FAA */ u8 mSwNo2;
/* 0x0FAB */ u8 mLastPhaseDamage;
/* 0x0FAC */ bool field_0xfac;
/* 0x0FAD */ u8 mFreezardAttack;
/* 0x0FAE */ u8 field_0xfae;
/* 0x0FAF */ u8 mFreeMoveMode;
/* 0x0FB0 */ u8 field_0xfb0;
/* 0x0FB1 */ u8 field_0xfb1;
/* 0x0FB2 */ u8 field_0xfb2;
/* 0x0FB3 */ u8 field_0xfb3;
/* 0x0FB4 */ u8 field_0xfb4;
/* 0x0FB5 */ u8 field_0xfb5;
/* 0x0FB6 */ u8 mFreezardNo;
/* 0x0FB7 */ u8 mRoomType;
/* 0x0FB8 */ f32 mRoomAlpha[2];
/* 0x0FC0 */ u8 mColorMode;
/* 0x0FC4 */ f32 mColBlend;
/* 0x0FC8 */ f32 mBlureRate;
/* 0x0FCC */ bool field_0xfcc;
/* 0x0FCD */ bool field_0xfcd;
/* 0x0FCE */ u8 mIsInactive;
/* 0x0FCF */ u8 mIsInactive2;
/* 0x0FD0 */ bool mReverted;
/* 0x0FD1 */ bool field_0xfd1;
/* 0x0FD2 */ bool unk_FD2;
/* 0x0FD4 */ s32 mWarpHoleID;
/* 0x0FD8 */ int mMsgIdx;
/* 0x0FDC */ u32 mMsgPcID;
/* 0x0FE0 */ msg_class* mpMsg;
/* 0x0FE4 */ Mtx mBgMtx;
/* 0x1014 */ dBgW* mpRoomNormalBgW;
/* 0x1018 */ dBgW* mpRoomArenaBgW;
/* 0x101C */ dBgS_AcchCir mAcchCir;
/* 0x105C */ dBgS_ObjAcch mAcch;
/* 0x1234 */ dCcD_Stts mCcStts;
/* 0x1270 */ dCcD_Stts mCcIronStts;
/* 0x12AC */ dCcD_Cyl mAtCyl;
/* 0x13E8 */ dCcD_Sph mTgSph[3];
/* 0x1790 */ dCcD_Sph mTgIronSph[3];
/* 0x1B38 */ dCcU_AtInfo mAtInfo;
/* 0x1B5C */ u8 unk_1B5C[0x1B64 - 0x1B5C];
/* 0x1B64 */ u32 mChillKey;
/* 0x1B68 */ u32 mHensinKey[4];
/* 0x1B78 */ u8 unk_1B78[0x1B7C - 0x1B78];
/* 0x1B7C */ u32 mParticleKey;
/* 0x1B80 */ u32 mAppearKey;
/* 0x1B84 */ bool mHIOInit;
enum Action {
/* 0 */ ACT_OPENING,
/* 1 */ ACT_CHASE,
/* 2 */ ACT_SERIOUS_DEMO,
/* 3 */ ACT_JUMP,
/* 4 */ ACT_ATTACK_ICE,
/* 5 */ ACT_ATTACK_YOSE,
/* 6 */ ACT_ATTACK_BODY,
/* 7 */ ACT_DEMO_REVIVAL,
/* 8 */ ACT_DAMAGE,
/* 9 */ ACT_DEATH,
};
enum Animation {
/* 0x00 */ ANM_ANGRY,
/* 0x01 */ ANM_ANGRY_WAIT,
/* 0x02 */ ANM_FLOAT,
/* 0x03 */ ANM_TALK_A,
/* 0x04 */ ANM_TALK_B,
/* 0x05 */ ANM_TO_TALK_B,
/* 0x06 */ ANM_WAIT_A,
/* 0x07 */ ANM_WAIT_B,
/* 0x08 */ ANM_WALK,
/* 0x09 */ ANM_SCREAM,
/* 0x0A */ ANM_SCREAM_WAIT,
/* 0x0B */ ANM_WAIT_C2,
/* 0x0C */ ANM_WAIT_C,
/* 0x0D */ ANM_FLOAT_B,
/* 0x0E */ ANM_WAIT_D,
/* 0x0F */ ANM_DOWN_A,
/* 0x10 */ ANM_DOWN_B,
/* 0x11 */ ANM_DOWN_C,
/* 0x12 */ ANM_DOWN,
};
};
STATIC_ASSERT(sizeof(daB_YO_c) == 0x1B88);
struct daB_YO_HIO_c {
class daB_YO_HIO_c {
public:
/* 8062F46C */ daB_YO_HIO_c();
/* 806395E4 */ ~daB_YO_HIO_c();
/* 806395E4 */ virtual ~daB_YO_HIO_c() {}
/* 0x04 */ s8 field_0x4;
/* 0x08 */ f32 mScale[8];
/* 0x28 */ f32 mFreezardNum;
/* 0x2C */ f32 mMaxFallSpeed;
/* 0x30 */ f32 mReboundSpeedRatio;
/* 0x34 */ f32 mChaseSpeed;
/* 0x38 */ f32 mReboundSpeedMax;
/* 0x3C */ bool field_0x3c;
/* 0x40 */ f32 mGatherTimer;
/* 0x44 */ f32 mAttackTimer;
/* 0x48 */ f32 mFreezardRadius;
/* 0x4C */ f32 field_0x4c;
/* 0x50 */ f32 field_0x50;
/* 0x54 */ bool field_0x54;
/* 0x58 */ f32 field_0x58;
};
struct daB_YOI_c {
/* 8063A480 */ void setOperate(int);
};
STATIC_ASSERT(sizeof(daB_YO_HIO_c) == 0x5C);
#endif /* D_A_B_YO_H */

View File

@ -1,8 +1,14 @@
#ifndef D_A_B_YO_ICE_H
#define D_A_B_YO_ICE_H
#include "dolphin/types.h"
#include "f_op/f_op_actor_mng.h"
#include "SSystem/SComponent/c_phase.h"
#include "Z2AudioLib/Z2Creature.h"
#include "f_op/f_op_actor.h"
#include "d/d_bg_s_gnd_chk.h"
#include "d/d_cc_d.h"
#include "d/d_cc_uty.h"
class daB_YO_c;
/**
* @ingroup actors-enemies
@ -14,7 +20,7 @@
*/
class daB_YOI_c : public fopEn_enemy_c {
public:
/* 8063A17C */ void draw();
/* 8063A17C */ int draw();
/* 8063A2D8 */ void setActionMode(int, int);
/* 8063A2E4 */ void damage_check();
/* 8063A480 */ void setOperate(int);
@ -25,7 +31,7 @@ public:
/* 8063A824 */ void setApperEffect2();
/* 8063A8C8 */ void setLandingEffect();
/* 8063A96C */ void executeFirst();
/* 8063ABC0 */ void getSingleFallPos();
/* 8063ABC0 */ cXyz getSingleFallPos();
/* 8063ACCC */ void executeRiseUp();
/* 8063B238 */ void executeSingleFall();
/* 8063BB40 */ void executeYose();
@ -37,22 +43,75 @@ public:
/* 8063CD90 */ void action();
/* 8063D0C8 */ void mtx_set();
/* 8063D1B0 */ void cc_set();
/* 8063D350 */ void execute();
/* 8063D45C */ void _delete();
/* 8063D4F8 */ void CreateHeap();
/* 8063D5D0 */ void create();
/* 8063D350 */ int execute();
/* 8063D45C */ int _delete();
/* 8063D4F8 */ int CreateHeap();
/* 8063D5D0 */ cPhs__Step create();
/* 8063D8FC */ daB_YOI_c();
void setSubNumber(int i_subNumber) { mSubNumber = i_subNumber; }
private:
/* 0x5ac */ u8 field_0x5ac[0xb3c - 0x5ac];
/* 0x5AC */ request_of_phase_process_class mPhase;
/* 0x5B4 */ J3DModel* mpModel;
/* 0x5B8 */ Z2Creature mCreatureSound;
/* 0x648 */ Z2SoundObjSimple mSoundObj;
/* 0x668 */ daB_YO_c* mpBlizzeta;
/* 0x66C */ cXyz mFallTarget;
/* 0x678 */ csXyz mWobbleAngle;
/* 0x680 */ f32 mScaleF;
/* 0x684 */ f32 mYoseSpeed;
/* 0x688 */ f32 mCcOffset;
/* 0x68C */ int mIcicleNo;
/* 0x690 */ int mSubNumber;
/* 0x694 */ int mAction;
/* 0x698 */ int mMode;
/* 0x69C */ s16 mTargetAngleX;
/* 0x69E */ s16 mAngleSpeedY;
/* 0x6A0 */ u16 mIFrameTimer;
/* 0x6A4 */ int mTimer1;
/* 0x6A8 */ int mTimer2;
/* 0x6AC */ u8 mInitAction;
/* 0x6AD */ bool field_0x6ad;
/* 0x6AE */ u8 mDeleteTimer;
/* 0x6B0 */ J3DModel* mpCrackModel;
/* 0x6B4 */ cXyz mpCrackPos;
/* 0x6C0 */ f32 mCrackAlpha;
/* 0x6C4 */ s16 mpCrackAngleY;
/* 0x6C8 */ dBgS_GndChk mGndChk;
/* 0x71C */ dCcD_Stts mCcStts;
/* 0x758 */ dCcD_Cyl mCcCyl0;
/* 0x894 */ dCcD_Cyl mCcCyl1;
/* 0x9D0 */ dCcD_Cyl mCcCyl2;
/* 0xB0C */ dCcU_AtInfo mAtInfo;
/* 0xB30 */ u32 mParticleKey;
/* 0xB34 */ u32 mAppearKey;
/* 0xB38 */ bool mHIOInit;
enum Action {
/* 0 */ ACT_FIRST,
/* 1 */ ACT_RISE_UP,
/* 2 */ ACT_DEMO_REVIVAL,
/* 3 */ ACT_SINGLE_FALL,
/* 4 */ ACT_YOSE,
/* 5 */ ACT_YOSE_FALL,
/* 6 */ ACT_DAMAGE,
/* 7 */ ACT_DEATH,
};
};
STATIC_ASSERT(sizeof(daB_YOI_c) == 0xb3c);
STATIC_ASSERT(sizeof(daB_YOI_c) == 0xB3C);
class daB_YOI_HIO_c {
public:
/* 8063A14C */ daB_YOI_HIO_c();
/* 8063DBD0 */ ~daB_YOI_HIO_c();
/* 8063DBD0 */ virtual ~daB_YOI_HIO_c() {}
/* 0x4 */ s8 field_0x4;
/* 0x8 */ f32 mScaleY;
/* 0xC */ f32 mScaleXZ;
};
STATIC_ASSERT(sizeof(daB_YOI_HIO_c) == 0x10);
#endif /* D_A_B_YO_ICE_H */

View File

@ -44,7 +44,7 @@ public:
/* 808723E4 */ int execute();
/* 80872560 */ int entryModel(J3DModel*);
/* 8003194C */ static int entry(J3DModel*);
/* 80031990 */ static int remove();
/* 80031990 */ static bool remove();
inline int Delete();
inline int draw();

View File

@ -18,6 +18,14 @@ public:
current.pos = i_pos;
}
void setShapeAngle(csXyz i_angle) {
shape_angle = i_angle;
}
void setScale(f32 i_scale) {
mScaleF = i_scale;
}
void setBaseMtx(MtxP i_mtx) {
field_0x598 = 1;
if (mLevel < 3) {

View File

@ -361,7 +361,7 @@ public:
/* 80181278 */ void SetBlureActor(fopAc_ac_c*);
/* 80181280 */ void blureCamera();
/* 80181490 */ void onHorseDush();
/* 80181500 */ void GetForceLockOnActor();
/* 80181500 */ fopAc_ac_c* GetForceLockOnActor();
/* 80181534 */ void ForceLockOn(fopAc_ac_c*);
/* 80181560 */ void ForceLockOff(fpc_ProcID);
/* 8018159C */ void ForceLockOff(fopAc_ac_c*);

View File

@ -50,6 +50,7 @@ enum dCcD_Material {
enum dCcG_At_Spl {
/* 0x0 */ dCcG_At_Spl_UNK_0,
/* 0x1 */ dCcG_At_Spl_UNK_1,
/* 0xD */ dCcG_At_Spl_UNK_D = 0xD,
};
enum dCcG_Tg_Spl {

View File

@ -7,9 +7,9 @@
/* 80267B4C-80267B70 26248C 0024+00 0/0 7/7 0/0 .text __ct__8cBgS_ChkFv */
cBgS_Chk::cBgS_Chk() {
mPolyPassChk = 0;
mGrpPassChk = 0;
unk_0x0C = 1;
mPolyPassChk = NULL;
mGrpPassChk = NULL;
mSameActorChk = true;
}
/* 80267B70-80267BB8 2624B0 0048+00 1/0 7/7 0/0 .text __dt__8cBgS_ChkFv */
@ -20,12 +20,12 @@ void cBgS_Chk::SetExtChk(cBgS_Chk& other) {
mPolyPassChk = other.mPolyPassChk;
mGrpPassChk = other.mGrpPassChk;
mActorPid = other.mActorPid;
unk_0x0C = other.unk_0x0C;
mSameActorChk = other.mSameActorChk;
}
/* 80267BDC-80267C1C 26251C 0040+00 0/0 7/7 0/0 .text ChkSameActorPid__8cBgS_ChkCFUi */
bool cBgS_Chk::ChkSameActorPid(unsigned int pid) const {
if (mActorPid == -1 || pid == UINT32_MAX || unk_0x0C == 0) {
if (mActorPid == -1 || pid == UINT32_MAX || !mSameActorChk) {
return FALSE;
} else {
return (mActorPid == pid) ? TRUE : FALSE;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -14,26 +14,101 @@
#include "d/actor/d_a_midna.h"
#include "SSystem/SComponent/c_math.h"
#include "SSystem/SComponent/c_xyz.h"
#include "dol2asm.h"
/* 806C1A20-806C1A28 000020 0008+00 0/1 0/0 0/0 .data e_prim$3682 */
static GXColor e_prim[2] = {
{0xFF, 0x78, 0x00, 0x00},
{0xFF, 0x64, 0x78, 0x00},
static u8 cNullVec__6Z2Calc[12] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
/* 806C1A28-806C1A30 000028 0008+00 0/1 0/0 0/0 .data e_env$3683 */
static GXColor e_env[2] = {
{0x5A, 0x2D, 0x2D, 0x00},
{0x3C, 0x1E, 0x1E, 0x00},
static u32 lit_1787[1 + 4 /* padding */] = {
0x02000201,
/* padding */
0x40080000,
0x00000000,
0x3FE00000,
0x00000000,
};
/* 806C1A30-806C1A38 000030 0006+02 0/1 0/0 0/0 .data eff_id$3691 */
static u16 eff_id[3] = {
0x029D,
0x029E,
0x029F,
};
/* 806C14D4-806C18E8 002C74 0414+00 1/1 0/0 0/0 .text
* setMidnaBindEffect__FP13fopEn_enemy_cP15Z2CreatureEnemyP4cXyzP4cXyz */
// NONMATCHING
// gave up on this one, it's a mess.
// it appears to be actually defined in f_op_actor header and is in ~60 enemy actor TUs
// so needs to be solved eventually
// bind_id issue + regalloc (could be related)
static int setMidnaBindEffect(fopEn_enemy_c* i_actorP, Z2CreatureEnemy* i_creatureP, cXyz* i_pos,
cXyz* i_scale) {
static GXColor e_prim[2] = {
{0xFF, 0x78, 0x00, 0x00},
{0xFF, 0x64, 0x78, 0x00},
};
static GXColor e_env[2] = {
{0x5A, 0x2D, 0x2D, 0x00},
{0x3C, 0x1E, 0x1E, 0x00},
};
int darkworld_check;
daPy_py_c* player_actor = daPy_getPlayerActorClass();
if (player_actor->getMidnaActor() && player_actor->checkWolfLock(i_actorP)) {
cXyz pos3;
if (dKy_darkworld_check()) {
darkworld_check = 1;
} else {
darkworld_check = 0;
}
if (i_actorP->getMidnaBindMode() == 0) {
i_actorP->setMidnaBindMode(1);
csXyz angle;
PSMTXCopy(player_actor->getMidnaActor()->getMtxHairTop(), mDoMtx_stack_c::get());
cXyz cStack_54(100.0f, 0.0f, 0.0f);
mDoMtx_stack_c::multVec(&cStack_54, &pos3);
cXyz pos = pos3 - *i_pos;
angle.y = cM_atan2s(pos.x, pos.z);
angle.x = -cM_atan2s(pos.y, JMAFastSqrt(pos.x * pos.x + pos.z * pos.z));
angle.z = 0;
s32 room_no = fopAcM_GetRoomNo(i_actorP);
JPABaseEmitter* emitter = dComIfGp_particle_set(
0x29b, i_pos, &i_actorP->tevStr, &angle, i_scale, 0xff, 0, room_no,
&e_prim[darkworld_check], &e_env[darkworld_check], 0);
if (emitter) {
emitter->setGlobalParticleHeightScale(0.01f * pos.abs());
}
room_no = fopAcM_GetRoomNo(i_actorP);
dComIfGp_particle_set(0x29c, i_pos, &i_actorP->tevStr, &i_actorP->shape_angle,
i_scale, 0xff, 0, room_no, &e_prim[darkworld_check],
&e_env[darkworld_check], 0);
i_creatureP->startCreatureSound(Z2SE_MIDNA_BIND_LOCK_ON, 0, -1);
}
static u16 eff_id[3] = {0x029D, 0x029E, 0x029F};
for (int i = 0; i < 3; i++) {
u32* bind_id = i_actorP->getMidnaBindID(i);
s32 room_no = fopAcM_GetRoomNo(i_actorP);
*bind_id = dComIfGp_particle_set(*bind_id, eff_id[i], i_pos, &i_actorP->tevStr,
&i_actorP->shape_angle, i_scale, 0xff, 0, room_no,
&e_prim[darkworld_check], &e_env[darkworld_check], 0);
}
i_creatureP->startCreatureSound(Z2SE_MIDNA_BIND_LOCK_SUS, 0, -1);
return 1;
}
i_actorP->setMidnaBindMode(0);
return 0;
}
namespace {
/* 806C1A38-806C1A78 000038 0040+00 1/1 0/0 0/0 .data cc_fz_src__22@unnamed@d_a_e_fz_cpp@
*/
@ -62,28 +137,7 @@ static dCcD_SrcSph cc_fz_at_src = {
} // mSphAttr
};
/* 806C1AD4-806C1ADC 0000D4 0006+02 1/1 0/0 0/0 .data ice_name$4578 */
static u16 ice_name[3] = {
0x8221,
0x8222,
0x8223,
};
/* 806C1ADC-806C1AFC -00001 0020+00 1/0 0/0 0/0 .data l_daE_FZ_Method */
// forward references
static void daE_FZ_Create(daE_FZ_c* i_this);
static void daE_FZ_Delete(daE_FZ_c* i_this);
static void daE_FZ_Execute(daE_FZ_c* i_this);
static bool daE_FZ_IsDelete(daE_FZ_c* i_this);
static void daE_FZ_Draw(daE_FZ_c* i_this);
static actor_method_class l_daE_FZ_Method = {
(process_method_func)daE_FZ_Create,
(process_method_func)daE_FZ_Delete,
(process_method_func)daE_FZ_Execute,
(process_method_func)daE_FZ_IsDelete,
(process_method_func)daE_FZ_Draw,
};
} // namespace
/* 806BE94C-806BE9D4 0000EC 0088+00 1/1 0/0 0/0 .text __ct__12daE_FZ_HIO_cFv */
daE_FZ_HIO_c::daE_FZ_HIO_c() {
@ -120,9 +174,9 @@ s32 daE_FZ_c::draw() {
cXyz pos;
pos.set(current.pos.x, current.pos.y + 10.0f, current.pos.z);
field_0x70c = dComIfGd_setShadow(field_0x70c, 1, model, &pos, 0.0f, 1.0f, current.pos.y,
field_0x70c = dComIfGd_setShadow(field_0x70c, 1, model, &pos, 300.0f, 0.0f, current.pos.y,
mObjAcch.GetGroundH(), mObjAcch.m_gnd, &tevStr,
0, 2.0f, &dDlst_shadowControl_c::mSimpleTexObj);
0, 1.0f, &dDlst_shadowControl_c::mSimpleTexObj);
return 1;
}
@ -190,19 +244,12 @@ void daE_FZ_c::deadnextSet(bool param_0) {
}
/* 806C1BA0-806C1BA4 000008 0004+00 2/2 0/0 0/0 .bss None */
static u8 data_806C1BA0[4];
/* 806C1BA4-806C1BB0 00000C 000C+00 1/1 0/0 0/0 .bss @3819 */
static u8 lit_3819[12];
static u8 data_806C1BA0;
/* 806C1BB0-806C1BE8 000018 0038+00 8/8 0/0 0/0 .bss l_HIO */
static daE_FZ_HIO_c l_HIO;
/* 806BED34-806BF444 0004D4 0710+00 1/1 0/0 0/0 .text damage_check__8daE_FZ_cFv */
// fwd ref to function at bottom of TU
static int setMidnaBindEffect(fopEn_enemy_c* param_0, Z2CreatureEnemy* param_1, cXyz* param_2,
cXyz* param_3);
void daE_FZ_c::damage_check() {
csXyz s_pos;
cXyz pos;
@ -400,12 +447,10 @@ bool daE_FZ_c::way_gake_check() {
gnd_chk.SetPos(&field_0x6e8);
field_0x6e8.y = dComIfG_Bgsp().GroundCross(&gnd_chk);
f32 tmp = field_0x6e8.y;
if (tmp == -1e+09f) {
if (field_0x6e8.y == -1e+09f) {
field_0x6e8.y = current.pos.y;
return true;
} else if (current.pos.y - tmp > 100.0f) {
} else if (current.pos.y - field_0x6e8.y > 100.0f) {
return true;
}
@ -502,7 +547,7 @@ void daE_FZ_c::executeMove() {
cLib_addCalcAngleS2(&current.angle.y,mAngleFromPlayer,8,256);
cLib_addCalc2(&speedF,l_HIO.field_0x1c,1.0f,3.0f);
if (fopAcM_wayBgCheck(this, 200.0f,500.0f) != 0 || field_0x710 == 0) {
if (fopAcM_wayBgCheck(this, 200.0f,50.0f) != 0 || field_0x710 == 0) {
setActionMode(ACT_WAIT,0);
}
default:
@ -571,9 +616,9 @@ void daE_FZ_c::executeDamage() {
mActionPhase = 2;
case 2:
if (mObjAcch.ChkGroundHit() && dComIfG_Bgsp().GetPolyAtt0(mObjAcch.m_gnd) == 8) {
tmp = 1.0f;
tmp = 0.2f;
} else {
tmp = 0.3f;
tmp = 1.0f;
}
cLib_addCalc0(&speedF,0.1f,tmp);
@ -670,7 +715,7 @@ void daE_FZ_c::executeRollMove() {
field_0x710 = (20 - field_0x715) * 2;
case 1:
if (field_0x710 == 0) {
cLib_chaseF(&mRadiusBase,0.0f,0.03f);
cLib_chaseF(&mRadiusBase,1.0f,0.03f);
}
cLib_chaseAngleS(&field_0x704,1024,16);
@ -867,7 +912,7 @@ void daE_FZ_c::cc_set() {
mDoMtx_stack_c::multVec(&pos,&pos2);
mAtSph.SetC(pos2);
mAtSph.SetR(mRadiusBase * 0.05f);
mAtSph.SetR(mRadiusBase * 40.0f);
dComIfG_Ccsp()->Set(&mAtSph);
}
@ -904,9 +949,10 @@ s32 daE_FZ_c::execute() {
mCreature.framework(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
mUserWork = current.pos - home.pos;
mUserWork *= 8000.0f;
mUserWork = current.pos - old.pos;
mUserWork *= 0.8f;
static u16 ice_name[3] = {0x8221, 0x8222, 0x8223};
for (int i = 0; i < 3; i++) {
mParticleSet[i] = dComIfGp_particle_set(mParticleSet[i], ice_name[i], &current.pos, 0, 0);
JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mParticleSet[i]);
@ -947,7 +993,7 @@ s32 daE_FZ_c::_delete() {
dComIfG_resDelete(&mPhaseReq,"E_FZ");
if (field_0xc21 != 0) {
data_806C1BA0[0] = 0;
data_806C1BA0 = 0;
}
if (heap) {
@ -988,8 +1034,8 @@ s32 daE_FZ_c::create() {
if (!fopAcM_entrySolidHeap(this,useHeapInit,6480)) {
return cPhs_ERROR_e;
}
if (data_806C1BA0[0] == 0) {
data_806C1BA0[0] = 1;
if (data_806C1BA0 == 0) {
data_806C1BA0 = 1;
field_0xc21 = 1;
l_HIO.field_0x04 = -1;
}
@ -1089,77 +1135,27 @@ static void daE_FZ_Create(daE_FZ_c* i_this) {
i_this->create();
}
/* 806C14D4-806C18E8 002C74 0414+00 1/1 0/0 0/0 .text
* setMidnaBindEffect__FP13fopEn_enemy_cP15Z2CreatureEnemyP4cXyzP4cXyz */
#ifndef NONMATCHING
// gave up on this one, it's a mess.
// it appears to be actually defined in f_op_actor header and is in ~60 enemy actor TUs
// so needs to be solved eventually
// bind_id issue + regalloc (could be related)
static int setMidnaBindEffect(fopEn_enemy_c* i_actorP, Z2CreatureEnemy* i_creatureP, cXyz* param_2,
cXyz* param_3) {
int darkworld_check;
daPy_py_c* player_actor = daPy_getPlayerActorClass();
static actor_method_class l_daE_FZ_Method = {
(process_method_func)daE_FZ_Create,
(process_method_func)daE_FZ_Delete,
(process_method_func)daE_FZ_Execute,
(process_method_func)daE_FZ_IsDelete,
(process_method_func)daE_FZ_Draw,
};
if (player_actor->getMidnaActor() && player_actor->checkWolfLock(i_actorP)) {
cXyz pos3;
if (dKy_darkworld_check()) {
darkworld_check = 1;
} else {
darkworld_check = 0;
}
if (i_actorP->getMidnaBindMode() == 0) {
i_actorP->setMidnaBindMode(1);
csXyz s_pos;
PSMTXCopy(player_actor->getMidnaActor()->getMtxHairTop(), mDoMtx_stack_c::get());
cXyz cStack_54(100.0f, 0.0f, 0.0f);
mDoMtx_stack_c::multVec(&cStack_54, &pos3);
cXyz pos = pos3 - *param_2;
s_pos.y = cM_atan2s(pos.x, pos.z);
s_pos.x = -cM_atan2s(pos.y, JMAFastSqrt(pos.x * pos.x + pos.z * pos.z));
s_pos.z = 0;
s32 room_no = fopAcM_GetRoomNo(i_actorP);
JPABaseEmitter* emitter = dComIfGp_particle_set(
0x29b, param_3, &i_actorP->tevStr, &s_pos, param_3, 0xff, 0, room_no,
&e_prim[darkworld_check], &e_env[darkworld_check], 0);
if (emitter) {
emitter->setGlobalParticleHeightScale(0.01f * pos.abs());
}
room_no = fopAcM_GetRoomNo(i_actorP);
dComIfGp_particle_set(0x29c, param_3, &i_actorP->tevStr, &i_actorP->shape_angle,
param_3, 0xff, 0, room_no, &e_prim[darkworld_check],
&e_env[darkworld_check], 0);
i_creatureP->startCreatureSound(Z2SE_MIDNA_BIND_LOCK_ON, 0, -1);
}
for (int i = 0; i < 3; i++) {
u32* bind_id = i_actorP->getMidnaBindID(i);
s32 room_no = fopAcM_GetRoomNo(i_actorP);
*bind_id = dComIfGp_particle_set(*bind_id, eff_id[i], param_2, &i_actorP->tevStr,
&i_actorP->shape_angle, param_3, 0xff, 0, room_no,
&e_prim[darkworld_check], &e_env[darkworld_check], 0);
}
i_creatureP->startCreatureSound(Z2SE_MIDNA_BIND_LOCK_SUS, 0, -1);
return 1;
}
i_actorP->setMidnaBindMode(0);
return 0;
}
#else
static int setMidnaBindEffect(fopEn_enemy_c* param_0, Z2CreatureEnemy* param_1, cXyz* param_2,
cXyz* param_3) {
// NONMATCHING
}
#endif
extern actor_process_profile_definition g_profile_E_FZ = {
fpcLy_CURRENT_e, // mLayerID
7, // mListID
fpcPi_CURRENT_e, // mListPrio
PROC_E_FZ, // mProcName
&g_fpcLf_Method.mBase, // sub_method
sizeof(daE_FZ_c), // mSize
0, // mSizeOther
0, // mParameters
&g_fopAc_Method.base, // sub_method
169, // mPriority
&l_daE_FZ_Method, // sub_method
0x00040120, // mStatus
fopAc_ENEMY_e, // mActorType
fopAc_CULLBOX_0_e, // cullType
};

View File

@ -4284,7 +4284,7 @@ void dCamera_c::onHorseDush() {
/* 80181500-80181534 17BE40 0034+00 1/1 1/1 5/5 .text GetForceLockOnActor__9dCamera_cFv
*/
void dCamera_c::GetForceLockOnActor() {
fopAc_ac_c* dCamera_c::GetForceLockOnActor() {
// NONMATCHING
}

View File

@ -502,13 +502,13 @@ int daMirror_c::entry(J3DModel* param_0) {
}
/* 80031990-800319C8 02C2D0 0038+00 0/0 0/0 2/2 .text remove__10daMirror_cFv */
int daMirror_c::remove() {
bool daMirror_c::remove() {
if (m_myObj == NULL) {
return 0;
return false;
}
fopAcM_delete(m_myObj);
return 1;
return true;
}
/* ############################################################################################## */