Merge branch 'main' into menu_cloth

This commit is contained in:
Briggs Baltzell
2026-03-04 16:23:51 -06:00
41 changed files with 7013 additions and 742 deletions
+5
View File
@@ -3197,6 +3197,11 @@ extract:
binary: assets/l_sightDL__d_a_boomerang.bin
header: assets/l_sightDL__d_a_boomerang.h
- symbol: l_matDL$4433
binary: assets/l_matDL__draw__18daBoomerang_blur_cFv.bin
header: assets/l_matDL__draw__18daBoomerang_blur_cFv.h
rename: l_matDL
- symbol: l_sightDL!.data:0x80383e00
binary: assets/l_sightDL__d_a_player_main.bin
header: assets/l_sightDL__d_a_player_main.h
+5
View File
@@ -2775,6 +2775,11 @@ extract:
binary: assets/l_sightDL__d_a_boomerang.bin
header: assets/l_sightDL__d_a_boomerang.h
- symbol: l_matDL$4438
binary: assets/l_matDL__draw__18daBoomerang_blur_cFv.bin
header: assets/l_matDL__draw__18daBoomerang_blur_cFv.h
rename: l_matDL
- symbol: l_sightDL!.data:0x8038fc80
binary: assets/l_sightDL__d_a_player_main.bin
header: assets/l_sightDL__d_a_player_main.h
+5
View File
@@ -2359,6 +2359,11 @@ extract:
binary: assets/l_sightDL__d_a_boomerang.bin
header: assets/l_sightDL__d_a_boomerang.h
- symbol: l_matDL$4438
binary: assets/l_matDL__draw__18daBoomerang_blur_cFv.bin
header: assets/l_matDL__draw__18daBoomerang_blur_cFv.h
rename: l_matDL
- symbol: l_sightDL!.data:0x80383320
binary: assets/l_sightDL__d_a_player_main.bin
header: assets/l_sightDL__d_a_player_main.h
+5
View File
@@ -2371,6 +2371,11 @@ extract:
binary: assets/l_sightDL__d_a_boomerang.bin
header: assets/l_sightDL__d_a_boomerang.h
- symbol: l_matDL$4438
binary: assets/l_matDL__draw__18daBoomerang_blur_cFv.bin
header: assets/l_matDL__draw__18daBoomerang_blur_cFv.h
rename: l_matDL
- symbol: l_sightDL!.data:0x80396960
binary: assets/l_sightDL__d_a_player_main.bin
header: assets/l_sightDL__d_a_player_main.h
+7 -7
View File
@@ -573,7 +573,7 @@ config.libs = [
Object(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d/actor/d_a_bg.cpp"),
Object(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d/actor/d_a_bomb.cpp"),
Object(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d/actor/d_a_bomb2.cpp"),
Object(NonMatching, "d/actor/d_a_boomerang.cpp"),
Object(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d/actor/d_a_boomerang.cpp"),
Object(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d/actor/d_a_dai_item.cpp"),
Object(NonMatching, "d/actor/d_a_demo00.cpp"),
Object(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d/actor/d_a_disappear.cpp"),
@@ -1586,15 +1586,15 @@ config.libs = [
ActorRel(NonMatching, "d_a_bwd"),
ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_bwdg"),
ActorRel(NonMatching, "d_a_bwds"),
ActorRel(NonMatching, "d_a_daiocta"),
ActorRel(NonMatching, "d_a_daiocta_eye"),
ActorRel(Matching, "d_a_daiocta"),
ActorRel(Matching, "d_a_daiocta_eye"),
ActorRel(Matching, "d_a_deku_item"),
ActorRel(NonMatching, "d_a_dk"),
ActorRel(Matching, "d_a_dummy"),
ActorRel(NonMatching, "d_a_fallrock_tag"),
ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_fan"),
ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_fganon"),
ActorRel(NonMatching, "d_a_fgmahou"),
ActorRel(MatchingFor("GZLE01"), "d_a_fgmahou"),
ActorRel(Matching, "d_a_fire"),
ActorRel(NonMatching, "d_a_fm"),
ActorRel(NonMatching, "d_a_gm"),
@@ -1667,7 +1667,7 @@ config.libs = [
ActorRel(Matching, "d_a_npc_rsh1"),
ActorRel(NonMatching, "d_a_npc_sarace"),
ActorRel(NonMatching, "d_a_npc_sv"),
ActorRel(NonMatching, "d_a_npc_tc"),
ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_npc_tc"),
ActorRel(NonMatching, "d_a_npc_tt"),
ActorRel(NonMatching, "d_a_npc_uk"),
ActorRel(NonMatching, "d_a_npc_ym1"),
@@ -1684,7 +1684,7 @@ config.libs = [
ActorRel(Matching, "d_a_obj_ajav"),
ActorRel(NonMatching, "d_a_obj_apzl"),
ActorRel(NonMatching, "d_a_obj_ashut"),
ActorRel(NonMatching, "d_a_obj_auzu"),
ActorRel(Matching, "d_a_obj_auzu"),
ActorRel(NonMatching, "d_a_obj_buoyflag"),
ActorRel(Matching, "d_a_obj_buoyrace"),
ActorRel(Matching, "d_a_obj_correct"),
@@ -1725,7 +1725,7 @@ config.libs = [
ActorRel(NonMatching, "d_a_obj_kanoke"),
ActorRel(Matching, "d_a_obj_ladder"),
ActorRel(NonMatching, "d_a_obj_light"),
ActorRel(NonMatching, "d_a_obj_mkie"),
ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_obj_mkie"),
ActorRel(Matching, "d_a_obj_mkiek"),
ActorRel(MatchingFor("GZLJ01", "GZLE01", "GZLP01"), "d_a_obj_mknjd"),
ActorRel(NonMatching, "d_a_obj_mmrr"),
+91 -20
View File
@@ -3,9 +3,65 @@
#include "f_op/f_op_actor.h"
#include "d/d_cc_d.h"
#include "JSystem/J3DGraphBase/J3DPacket.h"
#include "d/d_bg_s_lin_chk.h"
#include "d/d_bg_s_gnd_chk.h"
#include "d/d_drawlist.h"
#define BOOMERANG_LOCK_MAX 5
class daBoomerang_blur_c : public J3DPacket {
public:
virtual ~daBoomerang_blur_c() {}
void initBlur(MtxP, s16);
void copyBlur(MtxP, s16);
virtual void draw();
static const s32 SEGMENTS_PER_STEP = 5;
public:
/* 0x010 */ void* imageData;
/* 0x014 */ s32 numTrailSegments;
/* 0x018 */ cXyz pos;
/* 0x024 */ cXyz trail0_vtxArr0[12 * SEGMENTS_PER_STEP];
/* 0x2F4 */ cXyz trail0_vtxArr1[12 * SEGMENTS_PER_STEP];
/* 0x5C4 */ cXyz trail1_vtxArr0[12 * SEGMENTS_PER_STEP];
/* 0x894 */ cXyz trail1_vtxArr1[12 * SEGMENTS_PER_STEP];
};
class daBoomerang_sightPacket_c : public dDlst_base_c {
public:
virtual ~daBoomerang_sightPacket_c() {}
virtual void draw();
void setSight(cXyz*, int);
void play(int);
void initFrame(int n) { mFrameArr[n] = 0; }
void resetSightOn() { mSightOnFlg = 0; }
void setImage(ResTIMG* i_img) { mImage = i_img; }
void setTex(void* data) { mTex = data; }
static const s32 ANIM_LENGTH = 26;
static const s32 HALF_ANIM_LENGTH = ANIM_LENGTH / 2;
private:
/* 0x004 */ Mtx mMtxArr[BOOMERANG_LOCK_MAX];
/* 0x0F4 */ u8 mFrameArr[BOOMERANG_LOCK_MAX];
/* 0x0F9 */ u8 mScaleArr[BOOMERANG_LOCK_MAX];
/* 0x100 */ u32 mSightOnFlg;
/* 0x104 */ void* mTex;
/* 0x108 */ ResTIMG* mImage;
};
class daBoomerang_c : public fopAc_ac_c {
public:
typedef BOOL (daBoomerang_c::*daBoomerang_c_ProcFunc)();
enum Mode {
Mode_Wait = 0x0,
Mode_Throw = 0x1,
};
void onCancelFlg() { mCancelFlg = true; }
daBoomerang_c();
@@ -15,34 +71,49 @@ public:
float getFlyMax();
void rockLineCallback(fopAc_ac_c*);
void setAimActor(fopAc_ac_c*);
void setLockActor(fopAc_ac_c*, int);
BOOL setLockActor(fopAc_ac_c* i_actor, BOOL doSoundEffect);
void resetLockActor();
void setRoomInfo();
void setKeepMatrix();
void setAimPos();
void checkBgHit(cXyz*, cXyz*);
void procWait();
void procMove();
void createHeap();
BOOL procWait();
BOOL procMove();
BOOL createHeap();
public:
/* Place member variables here */
/* 0x290 */ u8 m290[0xF34 - 0x290];
/* 0xF34 */ bool mCancelFlg;
/* 0x0290 */ J3DModel* mpModel;
/* 0x0294 */ daBoomerang_sightPacket_c mSightPacket;
/* 0x03A0 */ daBoomerang_blur_c mBlur;
/* 0x0F04 */ fpc_ProcID mLockActorIDs[BOOMERANG_LOCK_MAX];
/* 0x0F18 */ fopAc_ac_c* mLockActors[BOOMERANG_LOCK_MAX];
/* 0x0F2C */ bool mIsReturning;
/* 0x0F2D */ bool unused_0xF2D;
/* 0x0F2E */ bool mJustHit;
/* 0x0F2F */ bool mCatchAndDelete;
/* 0x0F30 */ u8 unused_0xF30;
/* 0x0F31 */ u8 mLockCnt;
/* 0x0F32 */ u8 mCurLockIdx;
/* 0x0F33 */ bool mThirdPerson;
/* 0x0F34 */ bool mCancelFlg;
/* 0x0F35 */ u8 mInWater;
/* 0x0F36 */ bool mFreeFlyOut;
/* 0x0F38 */ s16 mModelRotZ;
/* 0x0F3A */ s16 mModelRotY;
/* 0x0F3C */ f32 mGroundY;
/* 0x0F40 */ cXyz mTargetPos;
/* 0x0F4C */ dCcD_Stts mStts;
/* 0x0F88 */ dCcD_Cps mCps;
/* 0x10C0 */ dBgS_BoomerangLinChk mLinChk;
/* 0x112C */ dBgS_ObjGndChk mGndChk;
/* 0x1180 */ daBoomerang_c_ProcFunc mProcFunc;
};
class daBoomerang_blur_c {
public:
void initBlur(MtxP, s16);
void copyBlur(MtxP, s16);
void draw();
};
class daBoomerang_sightPacket_c {
public:
void draw();
void setSight(cXyz*, int);
void play(int);
};
STATIC_ASSERT(offsetof(daBoomerang_c, mSightPacket) == 0x294);
STATIC_ASSERT(offsetof(daBoomerang_c, mBlur) == 0x3A0);
STATIC_ASSERT(offsetof(daBoomerang_c, mCancelFlg) == 0xF34);
STATIC_ASSERT(offsetof(daBoomerang_c, mStts) == 0xF4C);
STATIC_ASSERT(offsetof(daBoomerang_c, mCps) == 0xF88);
STATIC_ASSERT(sizeof(daBoomerang_c) == 0x118C);
#endif /* D_A_BOOMERANG_H */
+150 -17
View File
@@ -1,7 +1,12 @@
#ifndef D_A_DAIOCTA_H
#define D_A_DAIOCTA_H
#include "d/d_bg_s_acch.h"
#include "d/d_cc_d.h"
#include "d/d_particle.h"
#include "f_op/f_op_actor.h"
#include "m_Do/m_Do_ext.h"
#include "m_Do/m_Do_hostIO.h"
class J3DNode;
class dCcD_SrcSph;
@@ -9,23 +14,44 @@ class dCcD_SrcCps;
class daDaiocta_c : public fopAc_ac_c {
public:
enum OctoType_e {
FOUR_EYED = 0,
EIGHT_EYED = 1,
TWELVE_EYED = 2
};
enum Proc_e {
PROC_INIT = 0,
PROC_EXEC = 1
};
enum Mode_e {
MODE_HIDE = 0,
MODE_APPEAR = 1,
MODE_WAIT = 2,
MODE_DAMAGE = 3,
MODE_DAMAGE_BOMB = 4,
MODE_DELETE = 5,
MODE_DEMO = 6,
MODE_NULL
};
struct ModeEntry {
typedef void (daDaiocta_c::*ModeProcFunc)(void);
ModeProcFunc mInitFunc;
ModeProcFunc mUpdFunc;
char* mModeName;
};
u8 getSw() { return mSwitchNo; }
void _coHit(fopAc_ac_c*);
void _nodeControl(J3DNode*, J3DModel*);
void _createHeap();
void createAwaHeap();
void createSuikomiHeap();
void createBodyHeap();
void createArrowHitHeap();
BOOL _createHeap();
BOOL createAwaHeap();
BOOL createSuikomiHeap();
BOOL createBodyHeap();
BOOL createArrowHitHeap();
void setMtx();
void setSuikomiMtx();
void setAwaMtx();
@@ -34,10 +60,10 @@ public:
void setAwaRandom(int);
void initAwa();
void execAwa();
void isLivingEye();
void isDead();
void isDamageEye();
void isDamageBombEye();
bool isLivingEye();
bool isDead();
bool isDamageEye();
bool isDamageBombEye();
void setRotEye();
void setCollision();
void modeHideInit();
@@ -67,20 +93,127 @@ public:
cPhs_State _create();
bool _delete();
static const s32 m_heapsize;
static const char m_arc_name[];
static const dCcD_SrcSph m_sph_src;
static const dCcD_SrcCps m_cps_src;
public:
/* 0x290 */ u8 field_0x290[0x574 - 0x290];
/* 0x574 */ u8 mSwitchNo;
};
// Offsets shown are for retail
/* 0x0290 */ cXyz mSphCenters[37];
/* 0x044C */ u8 m044C[0x04E0 - 0x044C];
/* 0x04E0 */ u32 mAnmMtxIndices[12];
/* 0x0510 */ u8 m0510[0x056C - 0x0510];
/* 0x056C */ s32 mMode;
/* 0x0570 */ s8 mAnmIdx;
/* 0x0571 */ s8 mPrmIdx;
/* 0x0572 */ s8 mOldPrmIdx;
/* 0x0573 */ u8 mOctoType;
/* 0x0574 */ u8 mSwitchNo;
/* 0x0575 */ u8 m575;
/* 0x0576 */ u8 m0576[0x0578 - 0x0576];
/* 0x0578 */ f32 mAppearRadius;
/* 0x057C */ u8 m057C;
/* 0x057D */ u8 m057D[0x0580 - 0x057D];
/* 0x0580 */ request_of_phase_process_class mPhs;
/* 0x0588 */ mDoExt_McaMorf* mpMorf;
/* 0x058C */ mDoExt_brkAnm mBrkAnm1;
/* 0x05A4 */ dCcD_Sph mSph[6];
/* 0x0CAC */ dCcD_Cps mCps[17];
/* 0x2164 */ dCcD_Stts mStts;
/* 0x21A0 */ cXyz m21A0;
/* 0x21AC */ cXyz m21AC;
/* 0x21B8 */ cXyz m21B8;
/* 0x21C4 */ cXyz m21C4;
/* 0x21D0 */ cXyz m21D0;
/* 0x21DC */ cXyz m21DC;
/* 0x21E8 */ cXyz m21E8;
/* 0x21F4 */ cXyz m21F4;
/* 0x2200 */ csXyz m2200;
/* 0x2206 */ u8 m2206[0x2208 - 0x2206];
/* 0x2208 */ f32 m2208;
/* 0x220C */ cXyz m220C;
/* 0x2218 */ dBgS_ObjAcch mAcch;
/* 0x23DC */ dBgS_AcchCir mAcchCir;
#if VERSION > VERSION_DEMO
/* 0x241C */ dPa_followEcallBack mParticleCallback;
#else
JPABaseEmitter* mpEmitter;
#endif
/* 0x2430 */ f32 mWaterY;
/* 0x2434 */ cXyz m2434;
/* 0x2440 */ fpc_ProcID mDaioctaEyePcId[12];
/* 0x2470 */ bool mEyeAlloc[12];
/* 0x247C */ u8 m247C[0x26BC - 0x247C];
/* 0x26BC */ int mRotEyeTimer;
/* 0x26C0 */ u8 m26C0;
/* 0x26C1 */ u8 m26C1;
/* 0x26C2 */ u8 m26C2[0x26C4 - 0x26C2];
/* 0x26C4 */ fpc_ProcID mpAuzu;
/* 0x26C8 */ JntHit_c* mpJntHit;
/* 0x26CC */ J3DModel* mpSuikomiModel;
/* 0x26D0 */ mDoExt_brkAnm mBrkAnm2;
/* 0x26E8 */ mDoExt_btkAnm mBtkAnm;
/* 0x26FC */ J3DModel* mpAwaModels[30];
/* 0x2774 */ mDoExt_bckAnm mAwaBckAnms[30];
/* 0x2954 */ mDoExt_btkAnm mAwaBtkAnms[30];
/* 0x2BAC */ mDoExt_brkAnm mAwaBrkAnms[30];
/* 0x2E7C */ int mAwaTimers[30];
/* 0x2EF4 */ cXyz mAwaTranslation[30];
/* 0x305C */ cXyz mAwaScale[30];
/* 0x31C4 */ u8 m31C4;
/* 0x31C5 */ u8 m31C5[0x31C8 - 0x31C5];
}; // Size: 0x31C8
STATIC_ASSERT(sizeof(daDaiocta_c) == DEMO_SELECT(0x31B8, 0x31C8));
class daDaiocta_HIO_c {
class daDaiocta_HIO_c : public mDoHIO_entry_c {
public:
daDaiocta_HIO_c();
public:
/* Place member variables here */
};
/* 0x004 */ u8 m004;
/* 0x005 */ u8 m005;
/* 0x006 */ u8 m006;
/* 0x007 */ u8 m007;
/* 0x008 */ u8 m008;
/* 0x009 */ u8 m009[0x00A - 0x009];
/* 0x00A */ s16 m00A;
/* 0x00C */ s16 mRotEyeTimerMin;
/* 0x00E */ s16 mRotEyeTimerAddMax;
/* 0x010 */ s16 m010;
/* 0x012 */ s16 m012;
/* 0x014 */ s16 m014;
/* 0x016 */ s16 m016;
/* 0x018 */ s16 m018;
/* 0x01A */ u8 m01A[0x01C - 0x01A];
/* 0x01C */ f32 mSphRadii[6];
/* 0x034 */ f32 mCpsRadii[10];
/* 0x05C */ f32 m05C;
/* 0x060 */ f32 m060;
/* 0x064 */ f32 m064;
/* 0x068 */ f32 m068;
/* 0x06C */ f32 m06C;
/* 0x070 */ f32 m070;
/* 0x074 */ f32 m074;
/* 0x078 */ f32 mDefaultAppearRadius;
/* 0x07C */ f32 mMinAppearRadius;
/* 0x080 */ f32 m080;
/* 0x084 */ f32 m084;
/* 0x088 */ f32 m088;
/* 0x08C */ f32 m08C;
/* 0x090 */ f32 m090;
/* 0x094 */ f32 m094;
/* 0x098 */ f32 m098[9];
/* 0x0BC */ f32 m0BC[9];
/* 0x0E0 */ f32 m0E0;
/* 0x0E4 */ f32 m0E4;
/* 0x0E8 */ f32 m0E8;
/* 0x0EC */ f32 m0EC;
/* 0x0F0 */ f32 m0F0;
/* 0x0F4 */ f32 m0F4;
/* 0x0F8 */ f32 m0F8;
/* 0x0FC */ cXyz m0FC;
}; // Size: 0x108
STATIC_ASSERT(sizeof(daDaiocta_HIO_c) == DEMO_SELECT(0x10C, 0x108));
#endif /* D_A_DAIOCTA_H */
+90 -7
View File
@@ -1,16 +1,47 @@
#ifndef D_A_DAIOCTA_EYE_H
#define D_A_DAIOCTA_EYE_H
#include "SSystem/SComponent/c_math.h"
#include "d/d_cc_d.h"
#include "d/d_jnt_hit.h"
#include "d/d_particle.h"
#include "f_op/f_op_actor.h"
#include "m_Do/m_Do_ext.h"
#include "m_Do/m_Do_hostIO.h"
class J3DNode;
class daDaiocta_c;
class daDaiocta_Eye_c : public fopAc_ac_c {
public:
void rndRotEye() {}
enum Mode_e {
MODE_WAIT = 0,
MODE_DAMAGE = 1,
MODE_DEATH = 2
};
typedef void (daDaiocta_Eye_c::*ModeProcFunc)(void);
public:
void rndRotEye() {
mEyeRotTargetX = cM_rndF(mEyeRndRotMaxX);
if (std::fabsf(mEyeRotTargetX - mCurEyeRot.x) < m2EC) {
mEyeRotTargetX += m2EC;
}
mEyeRotTargetY = cM_rndF(mEyeRndRotMaxY);
if (std::fabsf(mEyeRotTargetY - mCurEyeRot.y) < m2EE) {
mEyeRotTargetY += m2EE;
}
mEyeRotTargetZ = cM_rndF(mEyeRndRotMaxZ);
if (std::fabsf(mEyeRotTargetZ - mCurEyeRot.z) < m2F0) {
mEyeRotTargetZ += m2F0;
}
}
void _nodeControl(J3DNode*, J3DModel*);
void _createHeap();
BOOL _createHeap();
void _coHit(fopAc_ac_c*);
void setMtx();
void checkTgHit();
@@ -27,16 +58,68 @@ public:
cPhs_State _create();
bool _delete();
static const s32 m_heapsize;
static const char m_arc_name[];
static const s32 m_scale_damage_time;
public:
/* Place member variables here */
};
/* 0x290 */ s32 mEyeNo;
/* 0x294 */ bool mbIsDead;
/* 0x295 */ bool m295;
/* 0x296 */ bool mbIsDamaged;
/* 0x297 */ bool mbIsDamagedBomb;
/* 0x298 */ bool mbAppear;
/* 0x299 */ u8 m299[0x29C - 0x299];
/* 0x29C */ s32 mMode;
/* 0x2A0 */ request_of_phase_process_class mPhs;
/* 0x2A8 */ J3DModel* mpModel;
/* 0x2AC */ J3DAnmTevRegKey* mpBrk;
/* 0x2B0 */ mDoExt_brkAnm mBrkAnm;
/* 0x2C8 */ J3DAnmTextureSRTKey* mpBtk;
/* 0x2CC */ mDoExt_btkAnm mBtkAnm;
/* 0x2E0 */ s16 mEyeRotTargetX;
/* 0x2E2 */ s16 mEyeRotTargetY;
/* 0x2E4 */ s16 mEyeRotTargetZ;
/* 0x2E6 */ csXyz mCurEyeRot;
/* 0x2EC */ s16 m2EC;
/* 0x2EE */ s16 m2EE;
/* 0x2F0 */ s16 m2F0;
/* 0x2F2 */ s16 mEyeRndRotMaxX;
/* 0x2F4 */ s16 mEyeRndRotMaxY;
/* 0x2F6 */ s16 mEyeRndRotMaxZ;
/* 0x2F8 */ dCcD_Sph mSph;
/* 0x424 */ dCcD_Stts mStts;
/* 0x460 */ cXyz mEyeScale;
/* 0x46C */ int mScaleAnimeIdx;
/* 0x470 */ JntHit_c* mpJntHit;
/* 0x474 */ daDaiocta_c* mpParentActor;
/* 0x478 */ dPa_followEcallBack mParticleCallback;
/* 0x48C */ cXyz mParticlePos;
/* 0x48C */ csXyz m498;
/* 0x49E */ u8 m49E[0x4A0 - 0x49E];
}; // Size: 0x4A0
STATIC_ASSERT(sizeof(daDaiocta_Eye_c) == 0x4A0);
class daDaiocta_Eye_HIO_c {
class daDaiocta_Eye_HIO_c : public mDoHIO_entry_c {
public:
daDaiocta_Eye_HIO_c();
public:
/* Place member variables here */
s16 m04;
u8 m06[0x08 - 0x06];
f32 m08;
f32 m0C;
f32 mParticleTranslationX;
f32 mParticleTranslationY;
f32 mParticleTranslationZ;
f32 mSphRadius;
s16 mEyeRotStep;
s16 mEyeRotScale;
s16 m24;
s16 m26;
s16 m28;
s16 mEyeRndRotMaxX;
s16 mEyeRndRotMaxY;
s16 mEyeRndRotMaxZ;
JntHit_HIO_c m30;
};
#endif /* D_A_DAIOCTA_EYE_H */
+28 -2
View File
@@ -2,10 +2,36 @@
#define D_A_FGMAHOU_H
#include "f_op/f_op_actor.h"
#include "d/d_bg_s_acch.h"
#include "d/d_cc_d.h"
#include "m_Do/m_Do_ext.h"
#include "d/d_particle.h"
class fgmahou_class : public fopAc_ac_c {
public:
/* Place member variables here */
};
/* 0x290 */ u8 field_0x290[0x2AC - 0x290];
/* 0x2AC */ request_of_phase_process_class mPhs;
/* 0x2B4 */ u8 mOrbNumber; // which of Phantom Ganon's 8 orbs this is
/* 0x2B8 */ mDoExt_McaMorf* mpMorf;
/* 0x2BC */ mDoExt_btkAnm* mpBtk;
/* 0x2C0 */ mDoExt_brkAnm* mpBrk;
/* 0x2C4 */ s16 mAge;
/* 0x2C6 */ s16 mState;
/* 0x2C8 */ cXyz mTargetPos;
/* 0x2D4 */ s16 field_0x2D4;
/* 0x2D6 */ s16 field_0x2D6;
/* 0x2D8 */ s16 field_0x2D8;
/* 0x2DA */ s16 mTimers[2];
/* 0x2DE */ s16 field_0x2DE;
/* 0x2E0 */ s16 field_0x2E0;
/* 0x2E2 */ s16 field_0x2E2;
/* 0x2E4 */ JPABaseEmitter* mpEmitter;
/* 0x2E8 */ dBgS_AcchCir mCir;
/* 0x328 */ dBgS_ObjAcch mAcch;
/* 0x4EC */ dCcD_Stts mStts;
/* 0x528 */ dCcD_Sph mAtSph;
/* 0x654 */ dCcD_Sph mTgSph;
/* 0x780 */ s8 field_0x780;
}; // Size: 0x784
#endif /* D_A_FGMAHOU_H */
+224 -49
View File
@@ -2,37 +2,144 @@
#define D_A_NPC_TC_H
#include "f_op/f_op_actor.h"
#include "d/d_npc.h"
#include "d/d_particle.h"
class daNpc_Tc_c : public fopAc_ac_c {
namespace daObjSmplbg { class Act_c; };
class daNpc_Tc_c : public fopNpc_npc_c {
public:
void getAttentionBasePos() {}
void getEyePos() {}
void incAttnSetCount() {}
void setAction(int (daNpc_Tc_c::*)(void*), void*) {}
void _searchTower(fopAc_ac_c*);
void initTexPatternAnm(bool);
enum Status {
STATUS_WAIT = 1,
STATUS_SIT = 2,
STATUS_TALK = 3,
STATUS_JUMP = 4,
STATUS_WALK_TO_JAIL = 5,
STATUS_TALK_NEAR_JAIL = 6,
STATUS_WAIT_NEAR_JAIL = 7,
STATUS_WALK_TO_STOOL = 8,
STATUS_SIT_TO_STOOL = 9,
STATUS_DEMO_JUMP = 10,
STATUS_DEMO_RESCUE = 11,
STATUS_DEMO_TALK = 12,
STATUS_PAY_RUPEE = 13,
STATUS_DEMO_PAY_RUPEE = 14,
STATUS_GET_RUPEE = 15,
STATUS_DEMO_GET_RUPEE = 16,
STATUS_MONUMENT_COMPLETE = 17,
STATUS_DEMO_MONUMENT_COMPLETE = 18,
};
enum ActionStatus {
ACTION_STARTING = 0,
ACTION_ONGOING = 1,
ACTION_ENDING = -1,
};
enum Type {
TYPE_NORMAL2 = 0,
TYPE_RED = 1,
TYPE_WHITE = 2,
TYPE_BLUE = 3,
TYPE_NORMAL = 4,
};
enum BckIdx {
BCK_IDX_WAIT01 = 0,
BCK_IDX_WAIT03 = 1,
BCK_IDX_WAIT02 = 2,
BCK_IDX_TALK01 = 3,
BCK_IDX_WALK01 = 4,
BCK_IDX_JAMP_A = 5,
BCK_IDX_JAMP_B = 6,
BCK_IDX_JAMP_C = 7,
BCK_IDX_GUARD = 8,
BCK_IDX_JTBT = 9,
BCK_IDX_HAPPY = 10,
BCK_IDX_DANCE01 = 11,
BCK_IDX_DANCE02 = 12,
BCK_IDX_GET = 13,
BCK_IDX_MAWASU = 14,
BCK_IDX_WAIT04 = 15,
BCK_IDX_TALK02 = 16,
};
enum AnmPrmIdx {
ANM_PRM_IDX_NONE = 0,
ANM_PRM_IDX_WAIT01 = 1,
ANM_PRM_IDX_WAIT03 = 2,
ANM_PRM_IDX_WAIT02 = 3,
ANM_PRM_IDX_TALK01 = 4,
ANM_PRM_IDX_WALK01 = 5,
ANM_PRM_IDX_JAMP_A = 6,
ANM_PRM_IDX_JAMP_B = 7,
ANM_PRM_IDX_JAMP_C1 = 8,
ANM_PRM_IDX_JAMP_C2 = 9,
ANM_PRM_IDX_GUARD = 10,
ANM_PRM_IDX_JTBT = 11,
ANM_PRM_IDX_HAPPY = 12,
ANM_PRM_IDX_DANCE01 = 13,
ANM_PRM_IDX_DANCE02 = 14,
ANM_PRM_IDX_GET = 15,
ANM_PRM_IDX_HAPPY2 = 16, // ANM_PRM_IDX_HAPPY gets set to this
ANM_PRM_IDX_DANCE01_TO_TALK01 = 17,
ANM_PRM_IDX_DANCE02_TO_WAIT03 = 18,
ANM_PRM_IDX_MAWASU = 19,
ANM_PRM_IDX_WAIT04 = 20,
ANM_PRM_IDX_TALK02 = 21,
ANM_PRM_IDX_TALK01_WAIT01 = 22, // loops 3x then -> WAIT01
ANM_PRM_IDX_TALK01_TALK02 = 23, // loops 5x then -> TALK02
};
typedef int (daNpc_Tc_c::*ActionFunc)(void*);
daNpc_Tc_c();
cXyz& getAttentionBasePos() { return mAttPos; }
cXyz& getEyePos() { return mEyePos; }
void incAttnSetCount() {
if (mAttnSetCount != 0xff) {
mAttnSetCount++;
}
}
BOOL setAction(ActionFunc actionFunc, void* arg) {
if (mCurrActionFunc != actionFunc) {
if (mCurrActionFunc != NULL) {
mActionStatus = ACTION_ENDING;
(this->*mCurrActionFunc)(arg);
}
mCurrActionFunc = actionFunc;
mActionStatus = ACTION_STARTING;
(this->*mCurrActionFunc)(arg);
}
return TRUE;
}
fopAc_ac_c* _searchTower(fopAc_ac_c*);
BOOL initTexPatternAnm(bool);
void playTexPatternAnm();
void smoke_set(float, float, float, float, float);
void smoke_set(f32, f32, f32, f32, f32);
void setAnm();
void setTexAnm();
void chkAttention(cXyz, short);
bool chkAttention(cXyz, s16);
void eventOrder();
void checkOrder();
void existTcMonument();
void anmAtr(unsigned short);
bool existTcMonument();
void anmAtr(u16);
void stopTower();
void startTower();
void next_msgStatusBlue(unsigned long*);
void next_msgStatusNormal(unsigned long*);
void next_msgStatus(unsigned long*);
void setFirstMsg(bool*, unsigned long, unsigned long);
void getMsgNormal();
void getMsgBlue();
void getMsg();
u16 next_msgStatusBlue(u32*);
u16 next_msgStatusNormal(u32*);
u16 next_msgStatus(u32*);
u32 setFirstMsg(bool*, u32, u32);
u32 getMsgNormal();
u32 getMsgBlue();
u32 getMsg();
void getArg();
void createInit();
void searchStoolPos(void*, void*);
static void* searchStoolPos(void*, void*);
void setAttention();
void calcMove();
void lookBack();
@@ -54,32 +161,37 @@ public:
void statusDemoJump();
void statusDemoRescue();
void statusDemoTalk();
void help_action(void*);
void wait_action(void*);
BOOL help_action(void*);
BOOL wait_action(void*);
void calc_sitpos();
void set_mtx();
BOOL _draw();
void setTower();
BOOL _execute();
BOOL _delete();
void isCreate();
bool isCreate();
cPhs_State _create();
void _createHeap();
void next_msgStatusNormal2(unsigned long*);
void getMsgNormal2();
void setRupeeSizeMsg();
void existUnknownCollectMap();
void analysisCollectMap();
void existKnownCollectMap();
void next_msgStatusWhite(unsigned long*);
void getMsgWhite();
void next_msgStatusRed(unsigned long*);
void setFinishMsg();
void getMsgRed();
void checkMonumentFee(unsigned short, unsigned short);
void checkAllMonumentFee();
void checkAllMonumentPay();
void checkMonumentPay(unsigned short, unsigned short);
BOOL _createHeap();
u16 next_msgStatusNormal2(u32*);
u32 getMsgNormal2();
#if VERSION != VERSION_DEMO
u32 setRupeeSizeMsg();
#endif
bool existUnknownCollectMap();
int analysisCollectMap();
bool existKnownCollectMap();
u16 next_msgStatusWhite(u32*);
u32 getMsgWhite();
u16 next_msgStatusRed(u32*);
u32 setFinishMsg();
u32 getMsgRed();
bool checkMonumentFee(u16, u16);
bool checkAllMonumentFee();
#if VERSION == VERSION_DEMO
bool checkOneMonumentGet();
#endif
int checkAllMonumentPay();
bool checkMonumentPay(u16, u16);
void cutProc();
void cutSitToJumpStart(int);
void cutSitToJumpProc(int);
@@ -101,15 +213,78 @@ public:
void cutPayProc(int);
public:
/* Place member variables here */
};
class daNpc_Tc_HIO_c {
public:
daNpc_Tc_HIO_c();
public:
/* Place member variables here */
};
/* 0x6C4 */ u8 field_0x6C4[0x6C8 - 0x6C4];
/* 0x6C8 */ BOOL field_0x6C8;
/* 0x6CC */ u8 mJtbtTimer;
/* 0x6CD */ u8 mTalk01Wait01Timer;
/* 0x6CE */ u8 mTalk01Talk02Timer;
/* 0x6CF */ s8 mStatus;
/* 0x6D0 */ ActionFunc mCurrActionFunc;
/* 0x6DC */ s8 mActionStatus;
/* 0x6DD */ u8 field_0x6DD[0x6E0 - 0x6DD];
/* 0x6E0 */ cXyz mSmokePos;
/* 0x6EC */ csXyz mSmokeAngle;
/* 0x6F2 */ u8 field_0x6F2[0x6F4 - 0x6F2];
/* 0x6F4 */ dPa_smokeEcallBack mSmokeCallBack;
/* 0x714 */ dPa_followEcallBack field_0x714;
/* 0x728 */ dPa_followEcallBack field_0x728;
/* 0x73C */ request_of_phase_process_class mPhs;
/* 0x744 */ u32 mShadowId;
#if VERSION == VERSION_DEMO
/* 0x748 */ J3DModel* mpModel;
#endif
/* 0x748 */ J3DAnmTexPattern* m_head_tex_pattern;
/* 0x74C */ mDoExt_btpAnm mBtpAnm;
/* 0x760 */ u8 mBlinkFrame;
/* 0x761 */ u8 field_0x761[0x762 - 0x761];
/* 0x762 */ s16 mBlinkTimer;
/* 0x764 */ cXyz mEyePos;
/* 0x770 */ cXyz mAttPos;
/* 0x77C */ u8 mAttnSetCount;
/* 0x77D */ u8 field_0x77D[0x780 - 0x77D];
/* 0x780 */ cXyz mStoolLookPos;
/* 0x78C */ s16 mMaxHeadTurnVelocity;
/* 0x78E */ u8 field_0x78E[0x790 - 0x78E];
/* 0x790 */ csXyz field_0x790;
/* 0x796 */ u8 field_0x796[0x798 - 0x796];
/* 0x798 */ s8 field_0x798;
/* 0x799 */ u8 field_0x799[0x79C - 0x799];
/* 0x79C */ f32 mTargetSpeed;
/* 0x7A0 */ cXyz mStoolPos;
/* 0x7AC */ cXyz mSitPos;
/* 0x7B8 */ cXyz mWalkToStoolPos;
/* 0x7C4 */ cXyz mDeltaPos;
/* 0x7D0 */ u8 field_0x7D0[0x7DC - 0x7D0];
/* 0x7DC */ cXyz mParticlePos;
/* 0x7E8 */ bool mHasAttention;
/* 0x7E9 */ bool mTalkingNearJail;
/* 0x7EA */ u8 field_0x7EA[0x7F1 - 0x7EA];
/* 0x7F1 */ bool mHasTalkedNearJail;
/* 0x7F2 */ bool mHasEnteredSitRadius;
/* 0x7F3 */ s8 mJumpLandingTimer;
/* 0x7F4 */ u8 field_0x7F4[0x7F6 - 0x7F4];
/* 0x7F6 */ s8 mTexPatternNum;
/* 0x7F7 */ s8 mTexPatternNumIdx;
/* 0x7F8 */ s8 mBckIdx;
/* 0x7F9 */ s8 mAnmPrmIdx;
/* 0x7FA */ s8 mOldAnmPrmIdx;
/* 0x7FB */ s8 mEventIdx;
/* 0x7FC */ u8 mType;
/* 0x7FD */ u8 field_0x7FD[0x804 - 0x7FD];
/* 0x804 */ daObjSmplbg::Act_c* m_tower_actor;
/* 0x808 */ bool field_0x808;
/* 0x809 */ bool field_0x809;
/* 0x80A */ u8 field_0x80A[0x80B - 0x80A];
/* 0x80B */ bool field_0x80B;
/* 0x80C */ u8 field_0x80C;
/* 0x80D */ bool field_0x80D;
/* 0x80E */ bool field_0x80E;
/* 0x80F */ bool field_0x80F;
/* 0x810 */ bool field_0x810;
/* 0x811 */ bool field_0x811;
/* 0x812 */ bool field_0x812;
/* 0x813 */ bool field_0x813;
/* 0x814 */ bool field_0x814;
/* 0x815 */ u8 field_0x815[0x81C - 0x815];
}; // Size: 0x81C
#endif /* D_A_NPC_TC_H */
+55 -16
View File
@@ -1,40 +1,79 @@
#ifndef D_A_OBJ_AUZU_H
#define D_A_OBJ_AUZU_H
#include "d/d_a_obj.h"
#include "f_op/f_op_actor.h"
#include "m_Do/m_Do_ext.h"
class J3DMaterial;
namespace daObjAuzu {
struct Attr_c {
/* 0x00 */ f32 mRadiusMult;
/* 0x04 */ f32 mOuterActivationMult;
/* 0x08 */ f32 mInnerActivationMult;
/* 0x0C */ f32 mAnmSpeed;
};
class Act_c : public fopAc_ac_c {
public:
void attr() const {}
void is_appear() const {}
void prm_get_appear() const {}
void prm_get_linkID() const {}
void prm_get_swSave() const {}
void prm_get_type() const {}
void prm_make_squid() {}
void to_appear() {}
void to_disappear() {}
enum Prm_e {
PRM_APPEAR_W = 0x1,
PRM_APPEAR_S = 0x10,
PRM_LINK_ID_W = 0x8,
PRM_LINK_ID_S = 0x8,
PRM_SWSAVE_W = 0x8,
PRM_SWSAVE_S = 0x0,
PRM_TYPE_W = 0x4,
PRM_TYPE_S = 0x14
};
public:
const Attr_c& attr() const { return M_attr[mType]; }
bool is_appear() const { return mScaleAnimFactor > 0.999f; }
s32 prm_get_appear() const { return daObj::PrmAbstract(this, PRM_APPEAR_W, PRM_APPEAR_S); }
s32 prm_get_linkID() const { return daObj::PrmAbstract(this, PRM_LINK_ID_W, PRM_LINK_ID_S); }
s32 prm_get_swSave() const { return daObj::PrmAbstract(this, PRM_SWSAVE_W, PRM_SWSAVE_S); }
s32 prm_get_type() const { return daObj::PrmAbstract(this, PRM_TYPE_W, PRM_TYPE_S); }
static s32 prm_make_squid() {
return
0x1 << 20 | // type
0x1 << 16 | // appear
0x00 << 8 | // linkID
0xFF << 0; // swSave
}
void to_appear() { mbToAppear = true; }
void to_disappear() { mbToAppear = false; }
void solidHeapCB(fopAc_ac_c*);
void create_heap();
bool create_heap();
cPhs_State _create();
bool _delete();
void is_exist() const;
bool is_exist() const;
void set_mtx();
void init_mtx();
void set_state_map();
void ship_whirl();
void bgm_start();
bool _execute();
void set_material(J3DMaterial*, unsigned char);
bool _draw();
static BOOL solidHeapCB(fopAc_ac_c*);
static void set_material(J3DMaterial*, u8);
static const char M_arcname[];
static const Attr_c M_attr[2];
public:
/* Place member variables here */
};
/* 0x290 */ request_of_phase_process_class mPhs;
/* 0x298 */ J3DModel* mpModel;
/* 0x29C */ mDoExt_btkAnm mBtkAnm;
/* 0x2B0 */ s32 mType;
/* 0x2B4 */ f32 mScaleAnimFactor;
/* 0x2B8 */ bool mbToAppear;
/* 0x2B9 */ bool mbIsExist;
/* 0x2BA */ bool mbBgmStarted;
/* 0x2BB */ /* 1 byte of alignment padding */
/* 0x2BC */ fpc_ProcID mKytagPcId;
}; // Size: 0x2C0
};
#endif /* D_A_OBJ_AUZU_H */
+85 -44
View File
@@ -2,52 +2,93 @@
#define D_A_OBJ_MKIE_H
#include "d/d_bg_s_movebg_actor.h"
#include "m_Do/m_Do_ext.h"
namespace daObjMkie {
class Act_c : public dBgS_MoveBgActor {
public:
static u32 prm_make(u8 eventId, int swNo) {
return swNo << 0x10 | (eventId | 0x3000);
}
void setup(const cXyz* pos) {
current.pos = *pos;
mF58 = 1;
}
void attr() const {}
void prm_get_correct() const {}
void prm_get_evId() const {}
void prm_get_swSave() const {}
void prm_get_type() const {}
virtual BOOL CreateHeap();
void init_cc();
void set_cc_pos();
virtual BOOL Create();
cPhs_State Mthd_Create();
virtual BOOL Delete();
BOOL Mthd_Delete();
void set_mtx();
void init_mtx();
void chk_light();
void eff_break();
void sound_melt();
void sound_break();
void vib_break();
void mode_wait();
void mode_demoWait_init();
void mode_demoWait();
void mode_demo_init();
void mode_demo();
void mode_proc_call();
virtual BOOL Execute(Mtx**);
virtual BOOL Draw();
public:
/* 0x2C8 */ u8 m2C8[0xF58 - 0x2C8];
/* 0xF58 */ u8 mF58;
/* 0xF59 */ u8 mF59[0xF64 - 0xF59];
class Act_c : public dBgS_MoveBgActor {
public:
static Mtx M_tmp_mtx;
static u32 prm_make(u8 eventId, int swNo) { return swNo << 0x10 | (eventId | 0x3000); };
void setup(const cXyz* pos) {
current.pos = *pos;
mCcInit = 1;
};
};
struct Attr_c {
const char* name;
float mScale;
Vec table[8][3];
};
enum Prm_e {
PRM_CORRECT_W = 0x01,
PRM_CORRECT_S = 0xc,
PRM_EVID_W = 0x08,
PRM_EVID_S = 0x0,
PRM_SWSAVE_W = 0x08,
PRM_SWSAVE_S = 0x10,
PRM_TYPE_W = 0x01,
PRM_TYPE_S = 0x08,
PRM_FLAG_W = 0x01,
PRM_FLAG_S = 0x0d,
};
BOOL prm_get_correct() const { return daObj::PrmAbstract<Prm_e>(this, PRM_CORRECT_W, PRM_CORRECT_S); }
u8 prm_get_evId() const { return daObj::PrmAbstract<Prm_e>(this, PRM_EVID_W, PRM_EVID_S); }
int prm_get_swSave() const { return daObj::PrmAbstract<Prm_e>(this, PRM_SWSAVE_W, PRM_SWSAVE_S); }
int prm_get_type() const { return daObj::PrmAbstract<Prm_e>(this, PRM_TYPE_W, PRM_TYPE_S); }
virtual BOOL CreateHeap();
void init_cc();
void set_cc_pos();
virtual BOOL Create();
cPhs_State Mthd_Create();
virtual BOOL Delete();
BOOL Mthd_Delete();
void set_mtx();
void init_mtx();
BOOL chk_light();
void eff_break();
void sound_melt();
void sound_break();
void vib_break();
void mode_wait();
void mode_demoWait_init();
void mode_demoWait();
void mode_demo_init();
void mode_demo();
void mode_proc_call();
virtual BOOL Execute(Mtx**);
virtual BOOL Draw();
static const char M_arcname[];
static const dCcD_SrcTri M_tri_src;
static const Attr_c M_attr[];
public:
/* 0x2C8 */ request_of_phase_process_class mPhs;
/* 0x2D0 */ J3DModel* mModelBase;
/* 0x2D4 */ J3DModel* mModelVan;
/* 0x2D8 */ mDoExt_brkAnm mBrkVan;
/* 0x2F0 */ dCcD_Tri mTri[8];
/* 0xD70 */ dCcD_Stts mStts[8];
/* 0xF50 */ int mModeProc;
/* 0xF54 */ int mType;
/* 0xF58 */ bool mCcInit;
/* 0xF59 */ bool mStatueDelete;
/* 0xF5A */ bool mEvtPlaying;
/* 0xF5B */ bool mBaseAnmPlaying;
/* 0xF5C */ s16 mState;
/* 0xF5E */ s16 mLightCnt;
/* 0xF60 */ s16 mEvtIdx;
/* 0xF62 */ bool mSwitch;
/* 0xF63 */ bool mBroken;
}; // Size: 0xF64
}; // namespace daObjMkie
#endif /* D_A_OBJ_MKIE_H */
+4 -4
View File
@@ -33,9 +33,9 @@ namespace daObjSmplbg {
static const Attr_c M_attr[];
inline const Attr_c& attr() const { return M_attr[mType]; }
void isStop() {}
void offStop() {}
void onStop() {}
bool isStop() { return mIsStop; }
void offStop() { mIsStop = false; }
void onStop() { mIsStop = true; }
int prm_get_type() const { return daObj::PrmAbstract(this, PRM_TYPE_W , PRM_TYPE_S);}
virtual BOOL CreateHeap();
@@ -53,7 +53,7 @@ namespace daObjSmplbg {
/* 0x2C8 */ request_of_phase_process_class mPhs;
/* 0x2D0 */ J3DModel* mpModel;
/* 0x2D4 */ int mType;
/* 0x2D8 */ u8 field_0x2D8;
/* 0x2D8 */ bool mIsStop;
/* 0x2D9 */ u8 field_0x2D9[0x2DC - 0x2D9];
}; // Size: 0x2DC
};
+7 -5
View File
@@ -58,6 +58,8 @@ public:
}
}
cXyz getPos() { return mPos; }
private:
/* 0x04 */ bool mDrawFlag;
/* 0x05 */ bool mLockFlag;
@@ -1276,7 +1278,7 @@ public:
void setDamageEmitter();
void endFlameDamageEmitter();
void endDamageEmitter();
static u32 setItemWaterEffect(fopAc_ac_c*, int, int);
static BOOL setItemWaterEffect(fopAc_ac_c* i_actor, BOOL inWater, BOOL triggerOnExit);
fopAc_ac_c* getDemoLookActor();
void setTinkleCeiverModel();
void setTalismanModel();
@@ -1608,7 +1610,7 @@ public:
BOOL procRopeUpHang();
BOOL checkBoomerangAnime() const;
void throwBoomerang();
int returnBoomerang();
BOOL returnBoomerang();
BOOL checkNextActionBoomerangReady();
void checkNextActionBoomerangFly();
BOOL checkNextBoomerangMode();
@@ -1846,8 +1848,8 @@ public:
BOOL checkNoControll() const { return dComIfGp_getPlayer(0) != this; }
void exchangeGrabActor(fopAc_ac_c* actor) { mActorKeepGrab.setData(actor); }
void getDekuLeafWindPos() const {}
void getBoomerangCatchPos() const {}
void getLineTopPos() {}
cXyz getBoomerangCatchPos() const { return mBoomerangCatchPos; }
cXyz getLineTopPos() { return mSightPacket.getPos(); }
cXyz getHookshotRootPos() const { return mHookshotRootPos; }
void getIceParticleBtk() {}
void getIceWaterParticleBtk() {}
@@ -2294,7 +2296,7 @@ public:
/* 0x36D0 */ cXyz m36D0;
/* 0x36DC */ cXyz m36DC;
/* 0x36E8 */ cXyz mHookshotRootPos;
/* 0x36F4 */ cXyz m36F4;
/* 0x36F4 */ cXyz mBoomerangCatchPos;
/* 0x3700 */ cXyz m3700;
/* 0x370C */ cXyz m370C;
/* 0x3718 */ cXyz m3718;
+10 -2
View File
@@ -186,8 +186,16 @@ public:
void onShortHitFlg() { onStateFlg(daSFLG_UNK20_e); }
void onStateFlg(daSHIP_SFLG flag) { mStateFlag |= flag; }
void onTornadoFlg(u32 tornadoID) { mTornadoID = tornadoID; }
void onWhirlFlg(u32, s16) {}
void onWhirlFlgDirect(u32, s16) {}
void onWhirlFlg(u32 whirlID, s16 linkID) {
mWhirlID = whirlID;
m03B2 = linkID;
m0352 = 1;
}
void onWhirlFlgDirect(u32 whirlID, s16 linkID) {
mWhirlID = whirlID;
m03B2 = linkID;
m0352 = 0;
}
void setAtnPos(const cXyz* pPos) {
onStateFlg(daSFLG_UNK1000000_e);
m1068 = *pPos;
+4
View File
@@ -1108,6 +1108,10 @@ inline BOOL dComIfGs_isCollectMapTriforce(int i_no) {
return g_dComIfG_gameInfo.save.getPlayer().getMap().isTriforce(i_no - 1);
}
inline void dComIfGs_onCollectMapTriforce(int i_no) {
g_dComIfG_gameInfo.save.getPlayer().getMap().onTriforce(i_no -1);
}
inline void dComIfGs_offCollectMapTriforce(int i_no) {
g_dComIfG_gameInfo.save.getPlayer().getMap().offTriforce(i_no - 1);
}
+12
View File
@@ -161,6 +161,10 @@ public:
return mpEvtStaffName;
}
int getNowCut() {
return mCurActIdx;
}
bool getAttnFlag() {
return mbAttention;
}
@@ -169,6 +173,14 @@ public:
mbAttention = flag;
}
void setAttnNoTurnFlag(bool flag) {
mbNoTurn = flag;
}
f32 getMoveSpeed() {
return mSpeed;
}
cXyz getAttnPos() {
return mPos;
}
+4 -4
View File
@@ -126,10 +126,10 @@ enum {
/* 0x76 */ DSNAP_TYPE_UNK76,
/* 0x77 */ DSNAP_TYPE_UNK77,
/* 0x78 */ DSNAP_TYPE_UNK78,
/* 0x79 */ DSNAP_TYPE_UNK79,
/* 0x7A */ DSNAP_TYPE_UNK7A,
/* 0x7B */ DSNAP_TYPE_UNK7B,
/* 0x7C */ DSNAP_TYPE_UNK7C,
/* 0x79 */ DSNAP_TYPE_TC_NORMAL,
/* 0x7A */ DSNAP_TYPE_TC_RED,
/* 0x7B */ DSNAP_TYPE_TC_BLUE,
/* 0x7C */ DSNAP_TYPE_TC_WHITE,
/* 0x7D */ DSNAP_TYPE_UNK7D,
/* 0x7E */ DSNAP_TYPE_ROTEN,
/* 0x7F */ DSNAP_TYPE_UNK7F,
+26
View File
@@ -8,4 +8,30 @@ void GFSetVtxAttrFmtv(GXVtxFmt, GXVtxAttrFmtList*);
void GFSetArray(GXAttr, void*, u8);
void GFSetCullMode(GXCullMode);
inline void GFBegin(GXPrimitive type, GXVtxFmt fmt, u16 vert_num) {
GXFIFO.u8 = fmt | type;
GXFIFO.u16 = vert_num;
}
inline void GFEnd() {}
inline void GFWrite_f32(f32 f) {
GX_WRITE_U32(*reinterpret_cast<u32*>(&f));
}
inline void GFWrite_s16(s16 s) {
GXFIFO.s16 = s;
}
inline void GFPosition3f32(f32 x, f32 y, f32 z) {
GFWrite_f32(x);
GFWrite_f32(y);
GFWrite_f32(z);
}
inline void GFTexCoord2s16(s16 u, s16 v) {
GFWrite_s16(u);
GFWrite_s16(v);
}
#endif /* GFGEOMETRY_H */
+3
View File
@@ -18,6 +18,9 @@ typedef int (*fpcM_DrawIteraterFunc)(void*, void*);
inline fpc_ProcID fpcM_GetID(void* pProc) {
return pProc != NULL ? ((base_process_class*)pProc)->mBsPcId : fpcM_ERROR_PROCESS_ID_e;
}
inline BOOL fpcM_IsErrorID(fpc_ProcID id) {
return id == fpcM_ERROR_PROCESS_ID_e ? TRUE : FALSE;
}
inline s16 fpcM_GetName(void* pProc) {
return ((base_process_class*)pProc)->mProcName;
}
+1 -1
View File
@@ -370,7 +370,7 @@ public:
void changeAnm(J3DAnmTransform* bckAnm) { mpAnm = bckAnm; }
J3DAnmTransform* getAnm() { return mpAnm; }
f32 getMorfRatio() { return mCurMorf; }
BOOL isLoop() { return mFrameCtrl.checkState(J3DFrameCtrl::STATE_LOOP_E); }
bool isLoop() { return mFrameCtrl.checkState(J3DFrameCtrl::STATE_LOOP_E); }
BOOL isMorf() { return mCurMorf < 1.0f; }
private:
+1 -1
View File
@@ -263,7 +263,7 @@ cPhs_State daBeam_c::CreateInit() {
fopAcM_SetMtx(this, M_mdl->getBaseTRMtx());
fopAcM_setCullSizeBox(this, -50.0f, -50.0f, 0.0f, 50.0f, 50.0f, 2000.0f);
if (parentActorID == -1) {
if (parentActorID == fpcM_ERROR_PROCESS_ID_e) {
u8 params1 = fopAcM_GetParam(this) & 0xFF;
s8 params2 = (fopAcM_GetParam(this) >> 8) & 0xFF;
params1 = cLib_maxLimit<u8>(params1, 2);
+799 -132
View File
@@ -5,13 +5,766 @@
#include "d/dolzel.h" // IWYU pragma: keep
#include "d/actor/d_a_boomerang.h"
#include "d/d_camera.h"
#include "d/d_procname.h"
#include "d/d_priority.h"
#include "d/d_cc_d.h"
#include "d/d_material.h"
#include "d/actor/d_a_player_main.h"
#include "d/res/res_link.h"
#include "dolphin/gf/GF.h"
#include "f_op/f_op_camera.h"
#include "f_op/f_op_camera_mng.h"
#include "m_Do/m_Do_lib.h"
static cXyz l_blur_top(40.0f, 0.0f, 0.0f);
static cXyz l_blur_root(-40.0f, 0.0f, 0.0f);
/* 800E0C08-800E0D44 .text initBlur__18daBoomerang_blur_cFPA4_fs */
void daBoomerang_blur_c::initBlur(MtxP mtx, s16 yRot) {
cMtx_multVec(mtx, &l_blur_top, &trail0_vtxArr0[0]);
cMtx_multVec(mtx, &l_blur_root, &trail0_vtxArr1[0]);
trail0_vtxArr0[1] = trail0_vtxArr0[0];
trail0_vtxArr1[1] = trail0_vtxArr1[0];
numTrailSegments = 0;
pos.x = mtx[0][3];
pos.y = mtx[1][3];
pos.z = mtx[2][3];
mDoMtx_stack_c::copy(mtx);
mDoMtx_stack_c::YrotM(-(yRot * 2));
mDoMtx_stack_c::multVec(&l_blur_top, &trail1_vtxArr0[0]);
mDoMtx_stack_c::multVec(&l_blur_root, &trail1_vtxArr1[0]);
trail1_vtxArr0[1] = trail1_vtxArr0[0];
trail1_vtxArr1[1] = trail1_vtxArr1[0];
}
/* 800E0D44-800E101C .text copyBlur__18daBoomerang_blur_cFPA4_fs */
void daBoomerang_blur_c::copyBlur(MtxP mtx, s16 yRot) {
for (int i = 54; i >= 0; i--) {
trail0_vtxArr0[SEGMENTS_PER_STEP + i] = trail0_vtxArr0[i];
trail0_vtxArr1[SEGMENTS_PER_STEP + i] = trail0_vtxArr1[i];
trail1_vtxArr0[SEGMENTS_PER_STEP + i] = trail1_vtxArr0[i];
trail1_vtxArr1[SEGMENTS_PER_STEP + i] = trail1_vtxArr1[i];
}
float t = 0.0f;
cXyz inPos;
inPos.x = mtx[0][3];
inPos.y = mtx[1][3];
inPos.z = mtx[2][3];
cXyz diff = pos - inPos;
pos = inPos;
mDoMtx_stack_c::push();
s16 yRotPerStep = 0x633;
int i;
for (i = 0; i < SEGMENTS_PER_STEP; i++) {
mDoMtx_stack_c::multVec(&l_blur_top, &trail0_vtxArr0[i]);
mDoMtx_stack_c::multVec(&l_blur_root, &trail0_vtxArr1[i]);
trail0_vtxArr0[i] += diff * t;
trail0_vtxArr1[i] += diff * t;
t += 1.0f / SEGMENTS_PER_STEP;
mDoMtx_stack_c::YrotM(yRotPerStep);
}
t = 0.0f;
mDoMtx_stack_c::pop();
mDoMtx_stack_c::YrotM(-(yRot * 2));
for (i = 0; i < SEGMENTS_PER_STEP; i++) {
mDoMtx_stack_c::multVec(&l_blur_top, &trail1_vtxArr0[i]);
mDoMtx_stack_c::multVec(&l_blur_root, &trail1_vtxArr1[i]);
trail1_vtxArr0[i] += diff * t;
trail1_vtxArr1[i] += diff * t;
t += 1.0f / SEGMENTS_PER_STEP;
mDoMtx_stack_c::YrotM(-yRotPerStep);
}
numTrailSegments += SEGMENTS_PER_STEP;
if (numTrailSegments >= 59) {
numTrailSegments = 58;
}
}
/* 800E101C-800E13A4 .text draw__18daBoomerang_blur_cFv */
void daBoomerang_blur_c::draw() {
#include "assets/l_matDL__draw__18daBoomerang_blur_cFv.h"
static GXVtxDescList l_vtxDescList[] ALIGN_DECL(32) = {
{GX_VA_POS, GX_DIRECT},
{GX_VA_TEX0, GX_DIRECT},
{GX_VA_NULL, GX_NONE},
};
static GXVtxAttrFmtList l_vtxAttrFmtList[] ALIGN_DECL(32) = {
{GX_VA_POS, GX_POS_XYZ, GX_F32, 0x00},
{GX_VA_TEX0, GX_TEX_ST, GX_S16, 0x08},
{GX_VA_NULL, GX_POS_XYZ, GX_F32, 0x00},
};
static GXTexObj texObj;
#if VERSION > VERSION_JPN
j3dSys.reinitGX();
GXSetNumIndStages(0);
#endif
GXInitTexObj(&texObj, imageData, 16, 4, GX_TF_I4, GX_CLAMP, GX_CLAMP, FALSE);
GXInitTexObjLOD(&texObj, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, FALSE, FALSE, GX_ANISO_1);
GXLoadTexObj(&texObj, GX_TEXMAP0);
GXCallDisplayList(l_matDL, 0x80);
// Light yellow color for the trail.
static GXColor color0 = {0xFF, 0xFF, 0x7B, 0x96};
GFSetTevColor(GX_TEVREG0, color0);
const s32 uCoordStep = 0xFF / ((numTrailSegments >> 1) + 1);
s16 uCoord1 = uCoordStep;
s16 uCoord0 = 0;
GFSetVtxDescv(l_vtxDescList);
GFSetVtxAttrFmtv(GX_VTXFMT0, l_vtxAttrFmtList);
GFLoadPosMtxImm(j3dSys.getViewMtx(), GX_PNMTX0);
#define QUAD_VTX(xyz, u, v) \
GFPosition3f32((xyz).x, (xyz).y, (xyz).z); \
GFTexCoord2s16((u), (v))
{
GFBegin(GX_QUADS, GX_VTXFMT0, numTrailSegments * 4 + 4);
for (int i = numTrailSegments; i >= 0; i--) {
QUAD_VTX(trail0_vtxArr0[i], uCoord1, 0x00);
QUAD_VTX(trail0_vtxArr1[i], uCoord1, 0xFF);
QUAD_VTX(trail0_vtxArr1[i + 1], uCoord0, 0xFF);
QUAD_VTX(trail0_vtxArr0[i + 1], uCoord0, 0x00);
uCoord0 = uCoord1;
uCoord1 += uCoordStep;
}
GFEnd();
}
{
uCoord1 = uCoordStep;
uCoord0 = 0;
GFBegin(GX_QUADS, GX_VTXFMT0, numTrailSegments * 4 + 4);
for (int i = numTrailSegments; i >= 0; i--) {
QUAD_VTX(trail1_vtxArr0[i], uCoord1, 0x00);
QUAD_VTX(trail1_vtxArr1[i], uCoord1, 0xFF);
QUAD_VTX(trail1_vtxArr1[i + 1], uCoord0, 0xFF);
QUAD_VTX(trail1_vtxArr0[i + 1], uCoord0, 0x00);
uCoord0 = uCoord1;
uCoord1 += uCoordStep;
}
GFEnd();
}
#if VERSION > VERSION_JPN
J3DShape::resetVcdVatCache();
#endif
}
#include "assets/l_sightMatDL.h"
#include "assets/l_sightDL__d_a_boomerang.h"
/* 800E13A4-800E14F0 .text draw__25daBoomerang_sightPacket_cFv */
void daBoomerang_sightPacket_c::draw() {
static GXVtxDescList l_vtxDescList[] ALIGN_DECL(32) = {
{GX_VA_POS, GX_DIRECT},
{GX_VA_TEX0, GX_DIRECT},
{GX_VA_NULL, GX_NONE},
};
static GXVtxAttrFmtList l_vtxAttrFmtList[] ALIGN_DECL(32) = {
{GX_VA_POS, GX_POS_XYZ, GX_S8, 0x00},
{GX_VA_TEX0, GX_TEX_ST, GX_U8, 0x00},
{GX_VA_NULL, GX_POS_XYZ, GX_F32, 0x00},
};
GXTexObj texObj;
const GXBool mipmap = mImage->mipmapCount > 1 ? TRUE : FALSE;
GXInitTexObj(&texObj, mTex, mImage->width, mImage->height, GXTexFmt(mImage->format), GXTexWrapMode(mImage->wrapS), GXTexWrapMode(mImage->wrapT), mipmap);
GXInitTexObjLOD(&texObj, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, FALSE, FALSE, GX_ANISO_1);
GXLoadTexObj(&texObj, GX_TEXMAP0);
GXCallDisplayList(l_sightMatDL, 0x60);
GFSetVtxDescv(l_vtxDescList);
GFSetVtxAttrFmtv(GX_VTXFMT0, l_vtxAttrFmtList);
GXColor color0 = {0xFF, 0xFF, 0x32, 0xFF};
GXColor color1 = {0xFF, 0xFF, 0x32, 0xFF};
for (int i = 0; i < BOOMERANG_LOCK_MAX; i++) {
if (mSightOnFlg & (1 << i)) {
color0.a = mScaleArr[i];
color1.a = mScaleArr[i];
GFSetTevColor(GX_TEVREG0, color0);
GFSetTevColor(GX_TEVREG1, color1);
GFLoadPosMtxImm(mMtxArr[i], GX_PNMTX0);
GXCallDisplayList(l_sightDL, 0x20);
}
}
}
/* 800E14F0-800E1718 .text setSight__25daBoomerang_sightPacket_cFP4cXyzi */
void daBoomerang_sightPacket_c::setSight(cXyz* pPos, int n) {
if (pPos != NULL) {
s32 animFrame = mFrameArr[n];
f32 pingPongAnim;
f32 imageRot;
if (animFrame < (u32)HALF_ANIM_LENGTH) {
pingPongAnim = 1.0f - animFrame / (f32)HALF_ANIM_LENGTH;
imageRot = -pingPongAnim;
} else {
pingPongAnim = (animFrame - HALF_ANIM_LENGTH) / (f32)HALF_ANIM_LENGTH;
imageRot = pingPongAnim;
}
mScaleArr[n] = pingPongAnim * 30.0f + 150.0f;
f32 scale = (pingPongAnim * 35.0f + 65.0f) * 0.01f;
f32 scaleX = scale * mImage->width;
f32 scaleY = scale * mImage->height;
cXyz proj;
mDoLib_project(pPos, &proj);
mDoMtx_stack_c::transS(proj);
mDoMtx_stack_c::scaleM(scaleX, scaleY, scale);
mDoMtx_stack_c::ZrotM(cM_ssin(imageRot * 16384.0f) * 32768.0f);
MTXCopy(mDoMtx_stack_c::get(), mMtxArr[n]);
mSightOnFlg |= 1 << n;
} else {
mSightOnFlg &= ~(1 << n);
}
}
/* 800E1718-800E1754 .text play__25daBoomerang_sightPacket_cFi */
void daBoomerang_sightPacket_c::play(int n) {
u8* p = &mFrameArr[0];
for (int i = 0; i < n; i++) {
*p = *p + 1;
if (*p == ANIM_LENGTH) {
*p = 0;
}
p++;
}
}
/* 800E1754-800E1998 .text draw__13daBoomerang_cFv */
BOOL daBoomerang_c::draw() {
dComIfGd_setListP1();
if (!mThirdPerson && mLockCnt != 0) {
mSightPacket.resetSightOn();
for (int i = mCurLockIdx; i < mLockCnt; i++) {
fopAc_ac_c* pActor = mLockActors[i];
if (pActor) {
mSightPacket.setSight(&pActor->eyePos, i);
} else {
mSightPacket.setSight(NULL, i);
}
}
dComIfGd_set2DXlu(&mSightPacket);
}
if (mBlur.numTrailSegments > 0) {
dComIfGd_entryZSortXluList(&mBlur, current.pos);
}
if (daPy_getPlayerActorClass()->checkPlayerNoDraw() && fopAcM_GetParam(this) == Mode_Wait) {
dComIfGd_setList();
return TRUE;
}
dKy_getEnvlight().settingTevStruct(TEV_TYPE_ACTOR, &current.pos, &tevStr);
dKy_getEnvlight().setLightTevColorType(mpModel, &tevStr);
if (fopAcM_GetParam(this) == Mode_Wait && daPy_getPlayerLinkActorClass()->checkFreezeState()) {
dMat_control_c::iceUpdateDL(mpModel, -1, NULL);
} else {
mDoExt_modelUpdateDL(mpModel);
}
dComIfGd_setList();
if (mGroundY != -G_CM3D_F_INF && fopAcM_GetParam(this) == Mode_Throw) {
cXyz* pFloorNrm = dComIfG_Bgsp()->GetTriPla(mGndChk)->GetNP();
if (pFloorNrm) {
dComIfGd_setSimpleShadow(&current.pos, mGroundY, 30.0f, pFloorNrm);
}
}
return TRUE;
}
/* 800E1998-800E19B8 .text daBoomerang_Draw__FP13daBoomerang_c */
static BOOL daBoomerang_Draw(daBoomerang_c* i_this) {
return i_this->draw();
}
/* 800E19B8-800E1A14 .text getFlyMax__13daBoomerang_cFv */
float daBoomerang_c::getFlyMax() {
if (dComIfGp_checkPlayerStatus0(0, 0x10000) != 0) {
return 5000.0f;
}
if (strcmp(dComIfGp_getStartStageName(), "GanonK") != 0) {
return 2500.0f;
}
return 5000.0f;
}
/* 800E1A14-800E1AAC .text rockLineCallback__13daBoomerang_cFP10fopAc_ac_c */
void daBoomerang_c::rockLineCallback(fopAc_ac_c* pHitActor) {
if (fopAcM_GetParam(this) == Mode_Wait) {
if (pHitActor) {
setLockActor(pHitActor, TRUE);
}
} else {
for (int i = 0; i < BOOMERANG_LOCK_MAX; i++) {
if (mLockActors[i] == pHitActor) {
mLockActorIDs[i] = -1;
mLockActors[i] = NULL;
if (i == mCurLockIdx) {
mJustHit = true;
mCurLockIdx++;
}
}
}
}
}
/* 800E1AAC-800E1AD0 .text daBoomerang_rockLineCallback__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf */
void daBoomerang_rockLineCallback(fopAc_ac_c* i_actor, dCcD_GObjInf*, fopAc_ac_c* i_hit, dCcD_GObjInf*) {
((daBoomerang_c*)i_actor)->rockLineCallback(i_hit);
}
/* 800E1AD0-800E1B20 .text setAimActor__13daBoomerang_cFP10fopAc_ac_c */
void daBoomerang_c::setAimActor(fopAc_ac_c* i_actor) {
resetLockActor();
mThirdPerson = true;
setLockActor(i_actor, FALSE);
}
/* 800E1B20-800E1C20 .text setLockActor__13daBoomerang_cFP10fopAc_ac_ci */
BOOL daBoomerang_c::setLockActor(fopAc_ac_c* i_actor, BOOL doSoundEffect) {
if (mLockCnt >= BOOMERANG_LOCK_MAX) {
return FALSE;
}
fpc_ProcID id = fopAcM_GetID(i_actor);
for (int i = 0; i < mLockCnt; i++) {
if (mLockActorIDs[i] == id) {
return FALSE;
}
}
mLockActorIDs[mLockCnt] = id;
mLockActors[mLockCnt] = i_actor;
mSightPacket.initFrame(mLockCnt);
if (doSoundEffect) {
static const u32 se_flg[BOOMERANG_LOCK_MAX] = {
JA_SE_BOOM_LOCK_ON_1,
JA_SE_BOOM_LOCK_ON_2,
JA_SE_BOOM_LOCK_ON_3,
JA_SE_BOOM_LOCK_ON_4,
JA_SE_BOOM_LOCK_ON_5,
};
mDoAud_seStart(se_flg[mLockCnt]);
}
mLockCnt++;
return TRUE;
}
/* 800E1C20-800E1C58 .text resetLockActor__13daBoomerang_cFv */
void daBoomerang_c::resetLockActor() {
for (int i = 0; i < BOOMERANG_LOCK_MAX; i++) {
mLockActorIDs[i] = fpcM_ERROR_PROCESS_ID_e;
mLockActors[i] = NULL;
}
mLockCnt = 0;
mCurLockIdx = 0;
}
/* 800E1C58-800E1CFC .text setRoomInfo__13daBoomerang_cFv */
void daBoomerang_c::setRoomInfo() {
mGndChk.SetPos(&current.pos);
f32 groundY = dComIfG_Bgsp()->GroundCross(&mGndChk);
s32 roomNo;
if (groundY != -G_CM3D_F_INF) {
roomNo = dComIfG_Bgsp()->GetRoomId(mGndChk);
tevStr.mEnvrIdxOverride = dComIfG_Bgsp()->GetPolyColor(mGndChk);
} else {
roomNo = dComIfGp_roomControl_getStayNo();
}
tevStr.mRoomNo = roomNo;
mStts.SetRoomId(roomNo);
current.roomNo = roomNo;
}
/* 800E1CFC-800E1DA8 .text setKeepMatrix__13daBoomerang_cFv */
void daBoomerang_c::setKeepMatrix() {
// Transform the boomerang to Link's hand.
mDoMtx_stack_c::copy(daPy_getPlayerActorClass()->getLeftHandMatrix());
mDoMtx_stack_c::transM(10.3f, 36.6f, 1.1f);
mDoMtx_stack_c::XYZrotM(-0x39f4, -0x357, -0x2af3);
MtxP mtx = mDoMtx_stack_c::get();
mpModel->setBaseTRMtx(mtx);
current.pos.set(mtx[0][3], mtx[1][3], mtx[2][3]);
}
/* 800E1DA8-800E1E6C .text setAimPos__13daBoomerang_cFv */
void daBoomerang_c::setAimPos() {
if (mIsReturning) {
mTargetPos = daPy_getPlayerLinkActorClass()->getBoomerangCatchPos();
} else {
for (int i = mCurLockIdx; i < mLockCnt; i++) {
if (mLockActors[i] != NULL) {
mTargetPos = mLockActors[i]->eyePos;
return;
}
mCurLockIdx++;
}
}
}
/* 800E1E6C-800E1F94 .text checkBgHit__13daBoomerang_cFP4cXyzP4cXyz */
void daBoomerang_c::checkBgHit(cXyz* pi_start, cXyz* pi_end) {
mLinChk.Set(pi_start, pi_end, this);
if (dComIfG_Bgsp()->LineCross(&mLinChk)) {
current.pos.set(mLinChk.GetCross());
dComIfGp_particle_setP1(dPa_name::ID_COMMON_PURPLE_HIT, &current.pos);
mIsReturning = true;
current.angle.y += 0x8000;
shape_angle.y = current.angle.y;
resetLockActor();
u32 mtrlSndId = dComIfG_Bgsp()->GetMtrlSndId(mLinChk);
s8 roomNo = current.roomNo;
s8 reverb = dComIfGp_getReverb(roomNo);
mDoAud_seStart(JA_SE_LK_W_WEP_HIT, &eyePos, mtrlSndId, reverb);
}
}
/* 800E1F94-800E239C .text procWait__13daBoomerang_cFv */
BOOL daBoomerang_c::procWait() {
daPy_lk_c* pPlayer = daPy_getPlayerLinkActorClass();
speedF = 0.0f;
setKeepMatrix();
if (mBlur.numTrailSegments > 0) {
mBlur.numTrailSegments -= daBoomerang_blur_c::SEGMENTS_PER_STEP;
}
if (fopAcM_GetParam(this) == Mode_Throw) {
speedF = 60.0f;
mCps.ResetAtHit();
mCps.OffAtNoTgHitInfSet();
mIsReturning = false;
unused_0xF2D = true;
mJustHit = false;
mCurLockIdx = 0;
setAimPos();
if (mCurLockIdx == mLockCnt) {
resetLockActor();
s16 angleY = pPlayer->getBodyAngleY() + pPlayer->shape_angle.y;
s16 angleX = pPlayer->getBodyAngleX();
f32 flyMax = getFlyMax();
mTargetPos.set(
current.pos.x + flyMax * cM_ssin(angleY) * cM_scos(angleX),
current.pos.y - flyMax * cM_ssin(angleX),
current.pos.z + flyMax * cM_scos(angleY) * cM_scos(angleX)
);
}
mModelRotY = 0;
cXyz diff = mTargetPos - current.pos;
s16 angle = cM_atan2s(-diff.y, diff.absXZ());
current.angle.x = angle;
if (mLockCnt == 0) {
current.angle.y = cM_atan2s(diff.x, diff.z) + 0x3000;
if (mThirdPerson) {
mFreeFlyOut = false;
} else {
mFreeFlyOut = true;
}
} else {
current.angle.y = cM_atan2s(diff.x, diff.z);
mFreeFlyOut = false;
}
shape_angle.x = current.angle.x;
shape_angle.y = current.angle.y;
shape_angle.z = 0x2000;
mModelRotZ = 0x2000;
mProcFunc = &daBoomerang_c::procMove;
mCancelFlg = false;
mBlur.initBlur(mpModel->getBaseTRMtx(), mModelRotY);
cXyz bgHitPos(pPlayer->current.pos.x, pPlayer->current.pos.y + 60.0f, pPlayer->current.pos.z);
checkBgHit(&bgHitPos, &current.pos);
procMove();
} else {
if (dCam_getBody()->mCurMode != 0xB) {
resetLockActor();
} else {
bool isAiming = (pPlayer->mCurProc == daPy_lk_c::daPyProc_BOOMERANG_SUBJECT_e || pPlayer->mCurProc == daPy_lk_c::daPyProc_SHIP_BOOMERANG_e) &&
pPlayer->mSightPacket.getDrawFlg();
if (isAiming) {
camera_class* pCamera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0));
cXyz eyePos = *fopCamM_GetEye_p(pCamera);
cXyz topPos = pPlayer->getLineTopPos();
mCps.OnAtNoTgHitInfSet();
mCps.cM3dGCps::Set(eyePos, topPos, 3.0f);
mCps.CalcAtVec();
mCps.SetAtHitCallback(&daBoomerang_rockLineCallback);
dComIfG_Ccsp()->Set(&mCps);
}
}
}
return TRUE;
}
/* 800E239C-800E2AF4 .text procMove__13daBoomerang_cFv */
BOOL daBoomerang_c::procMove() {
static cXyz at_offset; // Never used.
if (mCatchAndDelete) {
fopAcM_delete(this);
return TRUE;
}
if (dComIfGp_event_getMode() == dEvtMode_NONE_e) {
daPy_lk_c* pPlayer = daPy_getPlayerLinkActorClass();
s16 s = mModelRotY;
mModelRotY -= 0x1F00;
if (s >= 0 && mModelRotY < 0) {
s8 roomNo = current.roomNo;
mDoAud_seStart(JA_SE_LK_BOOM_FLY, &eyePos, 0, dComIfGp_getReverb(roomNo));
}
setAimPos();
cXyz diff = mTargetPos - current.pos;
f32 dist = diff.abs();
cXyz norm;
if (dist > 0.1f) {
norm = diff / dist;
} else {
norm = diff;
}
s16 angle = cM_atan2s(norm.x, norm.z);
s16 currentAngle = angle - current.angle.y;
if (mJustHit) {
mJustHit = false;
if (s16(angle - current.angle.y) > 0) {
current.angle.y = angle - 0x3000;
} else {
current.angle.y = angle + 0x3000;
}
currentAngle = angle - current.angle.y;
}
if (mIsReturning) {
if (dist < speedF * 2.0f) {
if (pPlayer->returnBoomerang()) {
fopAcM_SetParam(this, Mode_Wait);
mThirdPerson = false;
mProcFunc = &daBoomerang_c::procWait;
mCps.SetAtHitCallback(NULL);
} else {
mCatchAndDelete = true;
}
}
} else {
if (dist < speedF || (mCps.ChkAtHit() && mCps.GetAtHitAc() == mLockActors[mCurLockIdx])) {
// Boomerang hit its current target.
mJustHit = true;
mLockActors[mCurLockIdx] = NULL;
mLockActorIDs[mCurLockIdx] = fpcM_ERROR_PROCESS_ID_e;
mCurLockIdx++;
mFreeFlyOut = false;
}
}
if (!mIsReturning && (mCancelFlg || (!mFreeFlyOut && mLockCnt <= mCurLockIdx) || mCps.ChkAtShieldHit())) {
// Boomerang should return. It either was canceled, hit its last target, or hit a shield.
mJustHit = true;
mIsReturning = true;
resetLockActor();
mCancelFlg = false;
mFreeFlyOut = false;
}
if (mJustHit) {
current.angle.y = angle;
} else {
s16 newAngle;
if (!mThirdPerson) {
f32 a = 20.0f - dist * 2.0f / speedF;
if (a < 0.0f) {
a = 0.0f;
} else if (a > 18.0f) {
a = 20.0f + 40.0f * (a - 18.0f);
}
newAngle = a * 256.0f + 1024.0f;
} else {
newAngle = 0x4000;
}
if (currentAngle > newAngle) {
currentAngle = newAngle;
} else if (currentAngle < -newAngle) {
currentAngle = -newAngle;
}
current.angle.y += currentAngle;
}
angle = cM_atan2s(-norm.y, norm.absXZ());
current.angle.x = angle;
current.pos.x += speedF * cM_scos(current.angle.x) * cM_ssin(current.angle.y);
current.pos.y -= speedF * cM_ssin(current.angle.x);
current.pos.z += speedF * cM_scos(current.angle.x) * cM_scos(current.angle.y);
shape_angle.y = current.angle.y;
shape_angle.x = current.angle.x;
if (!mIsReturning) {
checkBgHit(&old.pos, &current.pos);
}
currentAngle = -(currentAngle * 2);
if (currentAngle > 0x100) {
currentAngle = 0x2000;
} else if (currentAngle < -0x100) {
currentAngle = -0x2000;
} else {
currentAngle = mModelRotZ;
}
mModelRotZ = currentAngle;
cLib_addCalcAngleS(&shape_angle.z, currentAngle, 0x10, 0x1000, 0x10);
}
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::ZXYrotM(shape_angle.x, shape_angle.y, shape_angle.z);
mDoMtx_stack_c::YrotM(mModelRotY);
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
mCps.cM3dGCps::Set(old.pos, current.pos, 30.0f);
mCps.CalcAtVec();
if (dComIfGp_event_getMode() == dEvtMode_NONE_e) {
mBlur.copyBlur(mDoMtx_stack_c::get(), mModelRotY);
dComIfG_Ccsp()->Set(&mCps);
dComIfG_Ccsp()->SetMass(&mCps, 1);
} else {
mBlur.copyBlur(mDoMtx_stack_c::get(), 0);
mCps.ResetAtHit();
}
mInWater = daPy_lk_c::setItemWaterEffect(this, mInWater, TRUE);
return TRUE;
}
/* 800E2AF4-800E2BD0 .text execute__13daBoomerang_cFv */
BOOL daBoomerang_c::execute() {
for (int i = 0; i < mLockCnt; i++) {
mLockActors[i] = fopAcM_SearchByID(mLockActorIDs[i]);
}
if (mProcFunc) {
(this->*mProcFunc)();
}
attention_info.position = current.pos;
eyePos = current.pos;
setRoomInfo();
mSightPacket.play(mLockCnt);
return TRUE;
}
/* 800E2BD0-800E2BF0 .text daBoomerang_Execute__FP13daBoomerang_c */
static BOOL daBoomerang_Execute(daBoomerang_c* i_this) {
return i_this->execute();
}
/* 800E2BF0-800E2BF8 .text daBoomerang_IsDelete__FP13daBoomerang_c */
static BOOL daBoomerang_IsDelete(daBoomerang_c*) {
return TRUE;
}
/* 800E2BF8-800E2C00 .text daBoomerang_Delete__FP13daBoomerang_c */
static BOOL daBoomerang_Delete(daBoomerang_c*) {
return TRUE;
}
/* 800E2C00-800E2CC8 .text createHeap__13daBoomerang_cFv */
BOOL daBoomerang_c::createHeap() {
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("Link", LINK_BDL_BOOMERANG);
JUT_ASSERT(VERSION_SELECT(1543, 1539, 1546, 1546), modelData != NULL);
mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x37220202);
if (mpModel == NULL)
return FALSE;
return TRUE;
}
/* 800E2CC8-800E2CE8 .text daBoomerang_createHeap__FP10fopAc_ac_c */
static BOOL daBoomerang_createHeap(fopAc_ac_c* i_this) {
return static_cast<daBoomerang_c*>(i_this)->createHeap();
}
static dCcD_SrcCps l_at_cps_src = {
// dCcD_SrcGObjInf
{
@@ -42,140 +795,54 @@ static dCcD_SrcCps l_at_cps_src = {
}},
};
/* 800E0C08-800E0D44 .text initBlur__18daBoomerang_blur_cFPA4_fs */
void daBoomerang_blur_c::initBlur(MtxP, s16) {
/* Nonmatching */
}
/* 800E0D44-800E101C .text copyBlur__18daBoomerang_blur_cFPA4_fs */
void daBoomerang_blur_c::copyBlur(MtxP, s16) {
/* Nonmatching */
}
/* 800E101C-800E13A4 .text draw__18daBoomerang_blur_cFv */
void daBoomerang_blur_c::draw() {
/* Nonmatching */
}
/* 800E13A4-800E14F0 .text draw__25daBoomerang_sightPacket_cFv */
void daBoomerang_sightPacket_c::draw() {
/* Nonmatching */
}
/* 800E14F0-800E1718 .text setSight__25daBoomerang_sightPacket_cFP4cXyzi */
void daBoomerang_sightPacket_c::setSight(cXyz*, int) {
/* Nonmatching */
}
/* 800E1718-800E1754 .text play__25daBoomerang_sightPacket_cFi */
void daBoomerang_sightPacket_c::play(int) {
/* Nonmatching */
}
/* 800E1754-800E1998 .text draw__13daBoomerang_cFv */
BOOL daBoomerang_c::draw() {
/* Nonmatching */
}
/* 800E1998-800E19B8 .text daBoomerang_Draw__FP13daBoomerang_c */
static BOOL daBoomerang_Draw(daBoomerang_c* i_this) {
return ((daBoomerang_c*)i_this)->draw();
}
/* 800E19B8-800E1A14 .text getFlyMax__13daBoomerang_cFv */
float daBoomerang_c::getFlyMax() {
/* Nonmatching */
}
/* 800E1A14-800E1AAC .text rockLineCallback__13daBoomerang_cFP10fopAc_ac_c */
void daBoomerang_c::rockLineCallback(fopAc_ac_c*) {
/* Nonmatching */
}
/* 800E1AAC-800E1AD0 .text daBoomerang_rockLineCallback__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf */
void daBoomerang_rockLineCallback(fopAc_ac_c*, dCcD_GObjInf*, fopAc_ac_c*, dCcD_GObjInf*) {
/* Nonmatching */
}
/* 800E1AD0-800E1B20 .text setAimActor__13daBoomerang_cFP10fopAc_ac_c */
void daBoomerang_c::setAimActor(fopAc_ac_c*) {
/* Nonmatching */
}
/* 800E1B20-800E1C20 .text setLockActor__13daBoomerang_cFP10fopAc_ac_ci */
void daBoomerang_c::setLockActor(fopAc_ac_c*, int) {
/* Nonmatching */
}
/* 800E1C20-800E1C58 .text resetLockActor__13daBoomerang_cFv */
void daBoomerang_c::resetLockActor() {
/* Nonmatching */
}
/* 800E1C58-800E1CFC .text setRoomInfo__13daBoomerang_cFv */
void daBoomerang_c::setRoomInfo() {
/* Nonmatching */
}
/* 800E1CFC-800E1DA8 .text setKeepMatrix__13daBoomerang_cFv */
void daBoomerang_c::setKeepMatrix() {
/* Nonmatching */
}
/* 800E1DA8-800E1E6C .text setAimPos__13daBoomerang_cFv */
void daBoomerang_c::setAimPos() {
/* Nonmatching */
}
/* 800E1E6C-800E1F94 .text checkBgHit__13daBoomerang_cFP4cXyzP4cXyz */
void daBoomerang_c::checkBgHit(cXyz*, cXyz*) {
/* Nonmatching */
}
/* 800E1F94-800E239C .text procWait__13daBoomerang_cFv */
void daBoomerang_c::procWait() {
/* Nonmatching */
}
/* 800E239C-800E2AF4 .text procMove__13daBoomerang_cFv */
void daBoomerang_c::procMove() {
/* Nonmatching */
}
/* 800E2AF4-800E2BD0 .text execute__13daBoomerang_cFv */
BOOL daBoomerang_c::execute() {
/* Nonmatching */
}
/* 800E2BD0-800E2BF0 .text daBoomerang_Execute__FP13daBoomerang_c */
static BOOL daBoomerang_Execute(daBoomerang_c* i_this) {
return ((daBoomerang_c*)i_this)->execute();
}
/* 800E2BF0-800E2BF8 .text daBoomerang_IsDelete__FP13daBoomerang_c */
static BOOL daBoomerang_IsDelete(daBoomerang_c*) {
return TRUE;
}
/* 800E2BF8-800E2C00 .text daBoomerang_Delete__FP13daBoomerang_c */
static BOOL daBoomerang_Delete(daBoomerang_c*) {
return TRUE;
}
/* 800E2C00-800E2CC8 .text createHeap__13daBoomerang_cFv */
void daBoomerang_c::createHeap() {
/* Nonmatching */
}
/* 800E2CC8-800E2CE8 .text daBoomerang_createHeap__FP10fopAc_ac_c */
static BOOL daBoomerang_createHeap(fopAc_ac_c*) {
/* Nonmatching */
}
/* 800E2CE8-800E2EF0 .text create__13daBoomerang_cFv */
cPhs_State daBoomerang_c::create() {
/* Nonmatching */
fopAcM_SetupActor(this, daBoomerang_c);
if (!fopAcM_entrySolidHeap(this, daBoomerang_createHeap, 0xD40)) {
return cPhs_ERROR_e;
}
setKeepMatrix();
fopAcM_SetMtx(this, mpModel->getBaseTRMtx());
mProcFunc = &daBoomerang_c::procWait;
mStts.Init(0x3C, 0xFF, this);
mCps.Set(l_at_cps_src);
mCps.SetStts(&mStts);
mCps.SetAtHitCallback(&daBoomerang_rockLineCallback);
mLinChk.ClrSttsRoofOff();
for (int i = 0; i < BOOMERANG_LOCK_MAX; i++) {
mLockActorIDs[i] = fpcM_ERROR_PROCESS_ID_e;
}
{
ResTIMG* tmp_img = (ResTIMG*)dComIfG_getObjectRes("Link", LINK_BTI_BLUR);
JUT_ASSERT(VERSION_SELECT(1626, 1622, 1629, 1629), tmp_img != NULL);
mBlur.imageData = (u8*)tmp_img + tmp_img->imageOffset;
}
{
ResTIMG* tmp_img = (ResTIMG*)dComIfG_getObjectRes("Link", LINK_BTI_ROCK_MARK);
JUT_ASSERT(VERSION_SELECT(1634, 1630, 1637, 1637), tmp_img != NULL);
mSightPacket.setTex((u8*)tmp_img + tmp_img->imageOffset);
mSightPacket.setImage(tmp_img);
}
setRoomInfo();
model = mpModel;
return cPhs_COMPLEATE_e;
}
/* 800E2EF0-800E329C .text __ct__13daBoomerang_cFv */
daBoomerang_c::daBoomerang_c() {
}
/* 800E33F0-800E3410 .text daBoomerang_Create__FP10fopAc_ac_c */
+1 -1
View File
@@ -268,7 +268,7 @@ void daDai_c::proc() {
}
}
if ((m84C != 0) && talk(1) == 0x12) {
if ((m84C != 0) && talk(1) == fopMsgStts_BOX_CLOSED_e) {
dComIfGp_event_reset();
m84C = 0;
}
File diff suppressed because it is too large Load Diff
+370 -27
View File
@@ -5,9 +5,19 @@
#include "d/dolzel_rel.h" // IWYU pragma: keep
#include "d/actor/d_a_daiocta_eye.h"
#include "d/actor/d_a_daiocta.h"
#include "d/actor/d_a_bomb.h"
#include "d/actor/d_a_player.h"
#include "d/d_bg_s_func.h"
#include "d/d_cc_d.h"
#include "d/d_lib.h"
#include "d/d_procname.h"
#include "d/d_priority.h"
#include "d/res/res_daiocta.h"
const s32 daDaiocta_Eye_c::m_heapsize = 2848;
const char daDaiocta_Eye_c::m_arc_name[] = "daiocta";
const s32 daDaiocta_Eye_c::m_scale_damage_time = 8;
static dCcD_SrcSph l_sph_src = {
// dCcD_SrcGObjInf
@@ -38,110 +48,443 @@ static dCcD_SrcSph l_sph_src = {
}},
};
static daDaiocta_Eye_HIO_c l_HIO;
/* 000000EC-000001B0 .text __ct__19daDaiocta_Eye_HIO_cFv */
daDaiocta_Eye_HIO_c::daDaiocta_Eye_HIO_c() {
/* Nonmatching */
mSphRadius = 195.0f;
m04 = 0xF; // unused
m08 = 5.0f; // unused
m0C = 8.0f; // unused
mParticleTranslationX = 0.0f;
mParticleTranslationY = 0.0f;
mParticleTranslationZ = 30.0f;
mEyeRotStep = 0x1000;
mEyeRotScale = 0x4;
m24 = 0x4000;
m26 = 0x1000;
m28 = 0x1000;
mEyeRndRotMaxX = 0x7FFF;
mEyeRndRotMaxY = 0x2000;
mEyeRndRotMaxZ = 0x2000;
}
/* 000001B0-000001FC .text nodeControl_CB__FP7J3DNodei */
static BOOL nodeControl_CB(J3DNode*, int) {
/* Nonmatching */
static BOOL nodeControl_CB(J3DNode* i_nodeP, int i_calcTiming) {
if (i_calcTiming == J3DNodeCBCalcTiming_In) {
J3DModel* model_p = j3dSys.getModel();
daDaiocta_Eye_c* this_p = (daDaiocta_Eye_c *) model_p->getUserArea();
if (this_p) {
this_p->_nodeControl(i_nodeP, model_p);
}
}
return TRUE;
}
/* 000001FC-000002B8 .text _nodeControl__15daDaiocta_Eye_cFP7J3DNodeP8J3DModel */
void daDaiocta_Eye_c::_nodeControl(J3DNode*, J3DModel*) {
/* Nonmatching */
void daDaiocta_Eye_c::_nodeControl(J3DNode* i_nodeP, J3DModel* i_modelP) {
J3DJoint* jnt_p = (J3DJoint *) i_nodeP;
s32 jnt_no = jnt_p->getJntNo();
cXyz dummy(0.0f, 0.0f, 0.0f);
mDoMtx_stack_c::copy(i_modelP->getAnmMtx(jnt_no));
if (jnt_no == 2) {
mDoMtx_stack_c::ZXYrotM(mCurEyeRot);
mDoMtx_stack_c::scaleM(mEyeScale);
}
cMtx_copy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx);
i_modelP->setAnmMtx(jnt_no, mDoMtx_stack_c::get());
}
/* 000002B8-000002D8 .text createHeap_CB__FP10fopAc_ac_c */
static BOOL createHeap_CB(fopAc_ac_c*) {
/* Nonmatching */
static BOOL createHeap_CB(fopAc_ac_c* i_this) {
return ((daDaiocta_Eye_c *)i_this)->_createHeap();
}
/* 000002D8-000004E4 .text _createHeap__15daDaiocta_Eye_cFv */
void daDaiocta_Eye_c::_createHeap() {
/* Nonmatching */
BOOL daDaiocta_Eye_c::_createHeap() {
static Vec eye_sph_offset[] = {
{ 0.0f, 0.0f, 0.0f },
};
static __jnt_hit_data_c search_data[] = {
{
/* mShapeType */ JntHitType_SPH_e,
/* mJointIndex */ 2,
/* mRadius */ 110.0f,
/* mpOffsets */ eye_sph_offset
}
};
J3DModelData* modelData = static_cast<J3DModelData *>(dComIfG_getObjectRes(m_arc_name, DAIOCTA_BDL_DO_EYE1));
JUT_ASSERT(0xE9, modelData != NULL);
mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000222);
if (!mpModel) {
return FALSE;
}
mpModel->setUserArea((u32)this);
mpBrk = static_cast<J3DAnmTevRegKey *>(dComIfG_getObjectRes(m_arc_name, DAIOCTA_BRK_DAMAGE_EYE_A1));
if (!mpBrk) {
return FALSE;
}
int init_result = init_result = mBrkAnm.init(
modelData, mpBrk, TRUE,
J3DFrameCtrl::EMode_NONE, 1.0f,
0, -1, false, FALSE
);
if (init_result == 0) {
return FALSE;
}
mpBtk = static_cast<J3DAnmTextureSRTKey *>(dComIfG_getObjectRes(m_arc_name, DAIOCTA_BTK_DAMAGE_EYE_A1));
if (!mpBtk) {
return FALSE;
}
init_result = mBtkAnm.init(
modelData, mpBtk, TRUE,
J3DFrameCtrl::EMode_NONE, 1.0f,
0, -1, false, FALSE
);
if (init_result == 0) {
return FALSE;
}
for (int i = 0; i < 3; i++) {
if (i == 2) modelData->getJointNodePointer(i)->setCallBack(nodeControl_CB);
}
mpJntHit = JntHit_create(mpModel, search_data, ARRAY_SSIZE(search_data));
if (mpJntHit) {
jntHit = mpJntHit;
} else {
return FALSE;
}
return TRUE;
}
/* 000004E4-00000510 .text coHit_CB__FP10fopAc_ac_cP12dCcD_GObjInfP10fopAc_ac_cP12dCcD_GObjInf */
void coHit_CB(fopAc_ac_c*, dCcD_GObjInf*, fopAc_ac_c*, dCcD_GObjInf*) {
/* Nonmatching */
void coHit_CB(fopAc_ac_c* i_this, dCcD_GObjInf*, fopAc_ac_c* i_actor, dCcD_GObjInf*) {
if(i_actor) {
((daDaiocta_Eye_c *)i_this)->_coHit(i_actor);
}
}
/* 00000510-000005D0 .text _coHit__15daDaiocta_Eye_cFP10fopAc_ac_c */
void daDaiocta_Eye_c::_coHit(fopAc_ac_c*) {
/* Nonmatching */
void daDaiocta_Eye_c::_coHit(fopAc_ac_c* i_actor) {
if (fpcM_GetName(i_actor) == PROC_BOMB) {
daBomb_c* bomb_p = (daBomb_c *) i_actor;
if (bomb_p->chk_state(daBomb_c::STATE_4)) {
if (!mbIsDead) {
health = 0;
mbIsDead = true;
m295 = true;
dComIfGp_particle_set(
dPa_name::ID_SCENE_8206, &mParticlePos, &shape_angle,
NULL, 0xFF, &mParticleCallback, fopAcM_GetRoomNo(this)
);
modeDeathInit();
} else {
mbIsDamagedBomb = true;
}
}
}
}
/* 000005D0-000006C0 .text setMtx__15daDaiocta_Eye_cFv */
void daDaiocta_Eye_c::setMtx() {
/* Nonmatching */
mpModel->setBaseScale(scale);
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::ZXYrotM(shape_angle);
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::ZXYrotM(shape_angle);
mDoMtx_stack_c::transM(
l_HIO.mParticleTranslationX,
l_HIO.mParticleTranslationY,
l_HIO.mParticleTranslationZ
);
mDoMtx_stack_c::multVecZero(&mParticlePos);
}
/* 000006C0-00000A6C .text checkTgHit__15daDaiocta_Eye_cFv */
void daDaiocta_Eye_c::checkTgHit() {
/* Nonmatching */
mStts.Move();
cCcD_Obj* tg_hit_obj_p = mSph.GetTgHitObj();
if (tg_hit_obj_p) {
mDoAud_onEnemyDamage();
bool damaged = false;
if (tg_hit_obj_p->ChkAtType(AT_TYPE_NORMAL_ARROW)) {
fopAcM_seStart(this, JA_SE_LK_MS_WEP_HIT, 32);
health -= 2;
damaged = true;
} else if (tg_hit_obj_p->ChkAtType(AT_TYPE_ICE_ARROW)) {
fopAcM_seStart(this, JA_SE_LK_MS_WEP_HIT, 32);
health -= 2;
damaged = true;
} else if (tg_hit_obj_p->ChkAtType(AT_TYPE_FIRE_ARROW)) {
fopAcM_seStart(this, JA_SE_LK_MS_WEP_HIT, 32);
health -= 2;
damaged = true;
} else if (tg_hit_obj_p->ChkAtType(AT_TYPE_LIGHT_ARROW)) {
fopAcM_seStart(this, JA_SE_LK_MS_WEP_HIT, 32);
health -= 4;
damaged = true;
} else if (tg_hit_obj_p->ChkAtType(AT_TYPE_HOOKSHOT)) {
fopAcM_seStart(this, JA_SE_LK_MS_WEP_HIT, 32);
health -= 2;
damaged = true;
} else if (tg_hit_obj_p->ChkAtType(AT_TYPE_BOOMERANG)) {
fopAcM_seStart(this, JA_SE_LK_W_WEP_HIT, 32);
health--;
damaged = true;
}
if (damaged == true) {
daPy_py_c* player_p = daPy_getPlayerActorClass();
cXyz tg_hit_pos = *mSph.GetTgHitPosP();
dComIfGp_particle_set(dPa_name::ID_COMMON_0010, &tg_hit_pos);
if (health <= 0) {
cXyz hit_particle_scale(2.0f, 2.0f, 2.0f);
dComIfGp_particle_set(
dPa_name::ID_COMMON_BIG_HIT,
&tg_hit_pos,
&player_p->shape_angle,
&hit_particle_scale
);
fopAcM_seStart(this, JA_SE_LK_LAST_HIT, 0);
health = 0;
modeDeathInit();
} else {
modeDamageInit();
}
}
}
}
/* 00000A6C-00000A78 .text modeWaitInit__15daDaiocta_Eye_cFv */
void daDaiocta_Eye_c::modeWaitInit() {
/* Nonmatching */
mMode = MODE_WAIT;
}
/* 00000A78-00000A98 .text modeWait__15daDaiocta_Eye_cFv */
void daDaiocta_Eye_c::modeWait() {
/* Nonmatching */
checkTgHit();
}
/* 00000A98-00000BD8 .text modeDamageInit__15daDaiocta_Eye_cFv */
void daDaiocta_Eye_c::modeDamageInit() {
/* Nonmatching */
mMode = MODE_DAMAGE;
mScaleAnimeIdx = m_scale_damage_time;
mbIsDamaged = true;
J3DModelData* model_data_p = mpModel->getModelData();
mpBrk = (J3DAnmTevRegKey *) dComIfG_getObjectRes(m_arc_name, DAIOCTA_BRK_DAMAGE_EYE_A1);
mBrkAnm.init(
model_data_p, mpBrk, TRUE,
J3DFrameCtrl::EMode_NONE, 1.0f,
0, -1, true, FALSE
);
mpBtk = (J3DAnmTextureSRTKey *) dComIfG_getObjectRes(m_arc_name, DAIOCTA_BTK_DAMAGE_EYE_A1);
mBtkAnm.init(
model_data_p, mpBtk, TRUE,
J3DFrameCtrl::EMode_NONE, 1.0f,
0, -1, true, FALSE
);
fopAcM_monsSeStart(mpParentActor, JA_SE_CV_DO_DAMAGE, 0);
}
/* 00000BD8-00000CD0 .text modeDamage__15daDaiocta_Eye_cFv */
void daDaiocta_Eye_c::modeDamage() {
/* Nonmatching */
static float scale_table[] = {
1.0f, 0.975f,
1.0f, 0.95f,
1.0f, 0.9f,
1.0f, 0.85f
};
dLib_scaleAnime(
&mEyeScale.x, scale_table,
ARRAY_SSIZE(scale_table), &mScaleAnimeIdx,
0.2f, 10.0f, 0.025f
);
mEyeScale.y = mEyeScale.x;
mEyeScale.z = mEyeScale.x;
if (mBtkAnm.isStop() && mBrkAnm.isStop() && mScaleAnimeIdx == 0) {
modeWaitInit();
} else if (mScaleAnimeIdx == 0) {
mScaleAnimeIdx = m_scale_damage_time;
}
}
/* 00000CD0-00000E20 .text modeDeathInit__15daDaiocta_Eye_cFv */
void daDaiocta_Eye_c::modeDeathInit() {
/* Nonmatching */
mMode = MODE_DEATH;
mbIsDamaged = true;
mEyeScale.setall(1.0f);
mpBrk = (J3DAnmTevRegKey *) dComIfG_getObjectRes(m_arc_name, DAIOCTA_BRK_DAMAGE_EYE_B1);
mBrkAnm.init(
mpModel->getModelData(), mpBrk, TRUE,
J3DFrameCtrl::EMode_NONE, 1.0f,
0, -1, true, FALSE
);
mpBtk = (J3DAnmTextureSRTKey *) dComIfG_getObjectRes(m_arc_name, DAIOCTA_BTK_DAMAGE_EYE_B1);
mBtkAnm.init(
mpModel->getModelData(), mpBtk, TRUE,
J3DFrameCtrl::EMode_NONE, 1.0f,
0, -1, true, FALSE
);
fopAcM_monsSeStart(mpParentActor, JA_SE_CV_DO_EYE_LOSE, 0);
}
/* 00000E20-00000E2C .text modeDeath__15daDaiocta_Eye_cFv */
void daDaiocta_Eye_c::modeDeath() {
/* Nonmatching */
mbIsDead = true;
}
/* 00000E2C-00000ED0 .text modeProcCall__15daDaiocta_Eye_cFv */
void daDaiocta_Eye_c::modeProcCall() {
/* Nonmatching */
static ModeProcFunc mode_proc[] = {
&daDaiocta_Eye_c::modeWait,
&daDaiocta_Eye_c::modeDamage,
&daDaiocta_Eye_c::modeDeath,
};
(this->*mode_proc[mMode])();
}
/* 00000ED0-00001120 .text _execute__15daDaiocta_Eye_cFv */
bool daDaiocta_Eye_c::_execute() {
/* Nonmatching */
if (!mbAppear) {
return false;
}
if (mbIsDead == true) {
mSph.OffTgSPrmBit(cCcD_TgSPrm_Set_e);
}
m2EC = l_HIO.m24;
m2EE = l_HIO.m26;
m2F0 = l_HIO.m28;
mEyeRndRotMaxX = l_HIO.mEyeRndRotMaxX;
mEyeRndRotMaxY = l_HIO.mEyeRndRotMaxY;
mEyeRndRotMaxZ = l_HIO.mEyeRndRotMaxZ;
mBrkAnm.play();
mBtkAnm.play();
mbIsDamaged = false;
mbIsDamagedBomb = false;
modeProcCall();
setMtx();
attention_info.position = current.pos;
attention_info.position.y += 100.0f;
eyePos = current.pos;
cLib_addCalcAngleS2(&mCurEyeRot.x, mEyeRotTargetX, l_HIO.mEyeRotScale + 1, l_HIO.mEyeRotStep);
cLib_addCalcAngleS2(&mCurEyeRot.y, mEyeRotTargetY, l_HIO.mEyeRotScale + 1, l_HIO.mEyeRotStep);
cLib_addCalcAngleS2(&mCurEyeRot.z, mEyeRotTargetZ, l_HIO.mEyeRotScale + 1, l_HIO.mEyeRotStep);
mSph.SetR(l_HIO.mSphRadius);
mSph.SetC(current.pos);
dComIfG_Ccsp()->Set(&mSph);
m498.set(0, shape_angle.y, 0);
cXyz current_pos = current.pos;
current_pos.y += 1000.0f;
f32 water_height = dBgS_GetWaterHeight(current_pos);
if (current.pos.y < water_height) {
if (mParticleCallback.getEmitter()) {
mParticleCallback.end();
}
} else if (mMode != MODE_DEATH) {
attention_info.flags = fopAc_Attn_LOCKON_BATTLE_e;
attention_info.distances[fopAc_Attn_TYPE_BATTLE_e] = 34;
}
if (mMode == MODE_DEATH || dComIfGp_event_runCheck()) {
attention_info.flags = 0;
}
return false;
}
/* 00001120-000011EC .text _draw__15daDaiocta_Eye_cFv */
bool daDaiocta_Eye_c::_draw() {
/* Nonmatching */
if (!mbAppear) {
return false;
}
g_env_light.settingTevStruct(TEV_TYPE_ACTOR, &current.pos, &tevStr);
g_env_light.setLightTevColorType(mpModel, &tevStr);
mBtkAnm.entry(mpModel->getModelData());
mBrkAnm.entry(mpModel->getModelData());
mDoExt_modelUpdateDL(mpModel);
mBtkAnm.remove(mpModel->getModelData());
mBrkAnm.remove(mpModel->getModelData());
return true;
}
/* 000011EC-000012D4 .text createInit__15daDaiocta_Eye_cFv */
void daDaiocta_Eye_c::createInit() {
/* Nonmatching */
mbAppear = false;
fopAcM_SetMtx(this, mpModel->getBaseTRMtx());
mStts.Init(0, 0, this);
mSph.Set(l_sph_src);
mSph.SetStts(&mStts);
mSph.SetCoHitCallback(coHit_CB);
max_health = 4;
health = max_health;
mEyeScale.setall(1.0f);
if (parentActorID != fpcM_ERROR_PROCESS_ID_e) {
fopAc_ac_c* parent_p = fopAcM_SearchByID(parentActorID);
if (parent_p && fopAc_IsActor(parent_p) && fpcM_GetName(parent_p) == PROC_DAIOCTA) {
mpParentActor = (daDaiocta_c *) parent_p;
}
}
}
/* 000012D4-00001450 .text _create__15daDaiocta_Eye_cFv */
cPhs_State daDaiocta_Eye_c::_create() {
/* Nonmatching */
fopAcM_SetupActor(this, daDaiocta_Eye_c);
cPhs_State result = dComIfG_resLoad(&mPhs, m_arc_name);
if (result == cPhs_COMPLEATE_e) {
if (!fopAcM_entrySolidHeap(this, createHeap_CB, m_heapsize)) {
return cPhs_ERROR_e;
}
createInit();
}
return result;
}
/* 00001764-000017B4 .text _delete__15daDaiocta_Eye_cFv */
bool daDaiocta_Eye_c::_delete() {
/* Nonmatching */
dComIfG_resDelete(&mPhs, m_arc_name);
mParticleCallback.remove();
return true;
}
/* 000017B4-000017D4 .text daDaiocta_EyeCreate__FPv */
+332 -15
View File
@@ -8,45 +8,337 @@
#include "d/d_procname.h"
#include "d/d_priority.h"
#include "d/d_cc_d.h"
#include "d/d_s_play.h"
#include "d/d_particle_name.h"
#include "d/actor/d_a_fganon.h"
#include "d/res/res_fganon.h"
/* 00000078-000000E4 .text daFgmahou_Draw__FP13fgmahou_class */
static BOOL daFgmahou_Draw(fgmahou_class*) {
/* Nonmatching */
static BOOL daFgmahou_Draw(fgmahou_class* i_this) {
J3DModel* pModel = i_this->mpMorf->getModel();
i_this->mpBrk->entry(pModel->getModelData());
i_this->mpBtk->entry(pModel->getModelData());
i_this->mpMorf->entryDL();
return TRUE;
}
/* 000000E4-00000130 .text boss_s_sub__FPvPv */
void boss_s_sub(void*, void*) {
/* Nonmatching */
static void* boss_s_sub(void* param_1, void*) {
if(fopAc_IsActor(param_1) && fopAcM_GetName(param_1) == PROC_FGANON) {
return param_1;
}
return NULL;
}
/* 00000130-00000C14 .text move__FP13fgmahou_class */
void move(fgmahou_class*) {
/* Nonmatching */
static void move(fgmahou_class* i_this) {
static float spdd[] = {
0.65f,
0.3f,
0.1f,
0.0f,
0.0f,
0.1f,
0.3f,
0.65f,
};
static s16 angXd[] = {
0x0000,
0xF400,
0xE800,
0xE000,
0xE000,
0xE800,
0xF400,
0x0000
};
fopAc_ac_c* pPlayer = dComIfGp_getPlayer(0);
cXyz diff2;
cXyz diff3;
int temp2 = 1;
f32 temp3;
fganon_class* fganon2;
i_this->mStts.Move();
switch(i_this->mState) {
case 0:
i_this->mState = 1;
i_this->field_0x2D4 = i_this->mOrbNumber * REG6_S(2) - REG6_S(3);
i_this->field_0x2D6 = cM_rndF(65536.0f);
i_this->speedF = REG0_F(0xD) + 50.0f;
i_this->speedF *= (0.2f + REG0_F(4)) * spdd[i_this->mOrbNumber] + 1.0f;
i_this->mTargetPos = pPlayer->eyePos;
diff2 = i_this->mTargetPos - i_this->current.pos;
i_this->home.angle.y = i_this->mOrbNumber * (REG8_S(2) + 0x1400) - (REG8_S(3) + 0x4000) + cM_atan2s(diff2.x, diff2.z);
i_this->home.angle.x = angXd[i_this->mOrbNumber];
i_this->shape_angle = i_this->home.angle;
i_this->mTimers[0] = REG8_S(9) + 5;
i_this->mTimers[1] = 0x14;
i_this->mpEmitter = dComIfGp_particle_set(dPa_name::ID_SCENE_821E, &i_this->current.pos);
i_this->mTgSph.SetR(REG6_F(5) + 110.0f);
temp2 = REG0_S(2) + 2;
case 1:
case 2:
diff3 = i_this->mTargetPos - i_this->current.pos;
temp3 = diff3.abs();
if(i_this->mTimers[0] != 0) {
break;
}
if(temp3 > REG0_F(0x11) + 500.0f && i_this->mState < 2) {
diff2 = i_this->mTargetPos - i_this->current.pos;
cLib_addCalcAngleS2(&i_this->home.angle.y, cM_atan2s(diff2.x, diff2.z), 2, REG8_S(4) + 0x500);
cLib_addCalcAngleS2(&i_this->home.angle.x, -cM_atan2s(diff2.y, std::sqrtf(diff2.x * diff2.x + diff2.z * diff2.z)), 2, REG8_S(4) + 0x500);
}
else {
i_this->mState = 2;
}
if(i_this->mAtSph.ChkAtHit()) {
i_this->mAtSph.GetAtHitObj();
fganon_class* fganon = (fganon_class*)fpcEx_Search(boss_s_sub, i_this);
if(fganon != NULL) {
fganon->m68B = 1;
break;
}
}
if(!i_this->mTgSph.ChkTgHit()) {
break;
}
dComIfGp_particle_set(dPa_name::ID_SCENE_8244, &i_this->current.pos, &i_this->home.angle);
fopAcM_seStartCurrent(i_this, JA_SE_LK_PG_BOMB_STRIKE, 0);
i_this->mState = 5;
case 5:
fganon2 = (fganon_class*)fpcEx_Search(boss_s_sub, i_this);
if(fganon2 == NULL) {
i_this->field_0x780 = 0x32;
break;
}
i_this->mTargetPos = fganon2->eyePos;
i_this->mTargetPos.y -= cM_rndFX(50.0f) + 50.0f;
i_this->home.angle.y -= 0x8000;
i_this->home.angle.x *= -1;
i_this->mTimers[0] = REG8_S(9) + 5;
i_this->field_0x2E0 = 1;
i_this->field_0x2E2 = 0x8000;
i_this->shape_angle = i_this->home.angle;
i_this->mState = 6;
i_this->mAtSph.SetR(60.0f);
case 6:
case 7:
diff3 = i_this->mTargetPos - i_this->current.pos;
temp3 = diff3.abs();
if(i_this->mTimers[0] != 0) {
break;
}
if(temp3 > REG0_F(0x11) + 500.0f && i_this->mState < 7) {
diff2 = i_this->mTargetPos - i_this->current.pos;
cLib_addCalcAngleS2(&i_this->home.angle.y, cM_atan2s(diff2.x, diff2.z), 2, REG8_S(4) + 0x500);
cLib_addCalcAngleS2(&i_this->home.angle.x, -cM_atan2s(diff2.y, std::sqrtf(diff2.x * diff2.x + diff2.z * diff2.z)), 2, REG8_S(4) + 0x500);
}
else {
i_this->mState = 7;
}
break;
case 10:
if(i_this->mTimers[0] == 0) {
fopAcM_delete(i_this);
}
return;
case 3:
case 4:
case 8:
case 9:
break;
}
f32 temp4 = temp3 * (REG0_F(3) + 3.0f);
if(temp4 > REG0_F(8) + 8000.0f) {
temp4 = REG0_F(8) + 8000.0f;
}
i_this->field_0x2D4 += REG0_S(6) + 0xDAC;
i_this->field_0x2D6 += REG0_S(7) + 0xCE4;
f32 temp5 = cM_ssin(i_this->field_0x2D4);
f32 temp7 = cM_ssin(i_this->field_0x2D6);
i_this->shape_angle.y = i_this->home.angle.y + (s16)(temp4 * temp5);
i_this->shape_angle.x = i_this->home.angle.x + (s16)(temp4 * temp7 * 0.75f);
diff2.x = 0.0f;
diff2.y = 0.0f;
diff2.z = i_this->speedF;
mDoMtx_YrotS(*calc_mtx, i_this->shape_angle.y);
mDoMtx_XrotM(*calc_mtx, i_this->shape_angle.x);
MtxPosition(&diff2, &i_this->speed);
if(temp2 <= 1) {
i_this->current.pos += i_this->speed;
}
else {
for(int i = 0; i < temp2; i++) {
i_this->current.pos += i_this->speed;
}
}
cXyz temp6 = i_this->current.pos;
if(i_this->mTimers[1] == 0) {
i_this->mTgSph.SetC(temp6);
dComIfG_Ccsp()->Set(&i_this->mTgSph);
i_this->mAtSph.SetC(temp6);
dComIfG_Ccsp()->Set(&i_this->mAtSph);
i_this->mAcch.CrrPos(*dComIfG_Bgsp());
if(fopAcM_searchPlayerDistance(i_this) > 5000.0f || i_this->mAtSph.ChkAtHit() || i_this->mAcch.ChkGroundHit() || i_this->mAcch.ChkWallHit() || i_this->mAcch.ChkRoofHit()) {
i_this->field_0x780 = 0x32;
i_this->health = 1;
JPABaseEmitter* pEmtr = dComIfGp_particle_set(dPa_name::ID_SCENE_8245, &i_this->current.pos);
pEmtr->setGlobalRTMatrix(i_this->mpMorf->getModel()->getAnmMtx(1));
JPABaseEmitter* pEmtr2 = dComIfGp_particle_set(dPa_name::ID_SCENE_8246, &i_this->current.pos);
pEmtr2->setGlobalRTMatrix(i_this->mpMorf->getModel()->getAnmMtx(1));
fopAcM_seStartCurrent(i_this, JA_SE_OBJ_PG_EBALL_EXP_L, 0);
}
}
if(i_this->field_0x2E0 != 0) {
i_this->field_0x2E0++;
if(i_this->field_0x2E0 > 8) {
i_this->field_0x2E0 = 0;
}
}
}
/* 00000C14-00000DD8 .text daFgmahou_Execute__FP13fgmahou_class */
static BOOL daFgmahou_Execute(fgmahou_class*) {
/* Nonmatching */
static BOOL daFgmahou_Execute(fgmahou_class* i_this) {
cXyz temp(0.0f, 0.0f, 0.0f);
i_this->mAge++;
for(int i = 0; i < 2; i++) {
if(i_this->mTimers[i]) {
i_this->mTimers[i]--;
}
}
if(i_this->field_0x2DE) {
i_this->field_0x2DE--;
}
if(i_this->field_0x780 == 0) {
move(i_this);
}
else {
i_this->field_0x780--;
if(i_this->field_0x780 == 0) {
fopAcM_delete(i_this);
return TRUE;
}
}
i_this->mpBrk->play();
i_this->mpBtk->play();
J3DModel* pModel = i_this->mpMorf->getModel();
mDoMtx_stack_c::transS(i_this->current.pos.x, i_this->current.pos.y, i_this->current.pos.z);
mDoMtx_stack_c::YrotM(i_this->shape_angle.y);
mDoMtx_stack_c::XrotM(i_this->shape_angle.x);
pModel->setBaseTRMtx(mDoMtx_stack_c::get());
i_this->mpMorf->calc();
if(i_this->mpEmitter) {
i_this->mpEmitter->setGlobalRTMatrix(i_this->mpMorf->getModel()->getAnmMtx(1));
if(i_this->field_0x780 != 0 && i_this->field_0x780 == 0x32) {
i_this->mpEmitter->becomeInvalidEmitter();
i_this->mpEmitter = NULL;
i_this->mpBrk->setPlaySpeed(-1.0f);
}
}
i_this->eyePos = i_this->current.pos;
return TRUE;
}
/* 00000DD8-00000DE0 .text daFgmahou_IsDelete__FP13fgmahou_class */
static BOOL daFgmahou_IsDelete(fgmahou_class*) {
static BOOL daFgmahou_IsDelete(fgmahou_class* i_this) {
return TRUE;
}
/* 00000DE0-00000E3C .text daFgmahou_Delete__FP13fgmahou_class */
static BOOL daFgmahou_Delete(fgmahou_class*) {
/* Nonmatching */
static BOOL daFgmahou_Delete(fgmahou_class* i_this) {
dComIfG_resDelete(&i_this->mPhs, "Fganon");
if(i_this->mpEmitter) {
i_this->mpEmitter->becomeInvalidEmitter();
}
return TRUE;
}
/* 00000E3C-0000109C .text useHeapInit__FP10fopAc_ac_c */
static BOOL useHeapInit(fopAc_ac_c*) {
/* Nonmatching */
static BOOL useHeapInit(fopAc_ac_c* a_this) {
fgmahou_class* i_this = static_cast<fgmahou_class*>(a_this);
i_this->mpMorf = new mDoExt_McaMorf(
(J3DModelData*)dComIfG_getObjectRes("Fganon", FGANON_BDL_YDKSP00),
NULL, NULL,
NULL,
J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, 1,
NULL,
0,
0x11020203
);
if(i_this->mpMorf == NULL || i_this->mpMorf->getModel() == NULL) {
return FALSE;
}
J3DModelData* pModelData = i_this->mpMorf->getModel()->getModelData();
i_this->mpBtk = new mDoExt_btkAnm();
if(i_this->mpBtk == NULL) {
return FALSE;
}
if(!i_this->mpBtk->init(pModelData, (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("Fganon", FGANON_BTK_YDKSP00), true, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, false, 0)) {
return FALSE;
}
i_this->mpBrk = new mDoExt_brkAnm();
if(i_this->mpBrk == NULL) {
return FALSE;
}
if(!i_this->mpBrk->init(pModelData, (J3DAnmTevRegKey*)dComIfG_getObjectRes("Fganon", FGANON_BRK_YDKSP00), true, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, false, 0)) {
return FALSE;
}
i_this->mpBrk->setFrame(6.999f);
return TRUE;
}
/* 000010E4-0000135C .text daFgmahou_Create__FP10fopAc_ac_c */
static cPhs_State daFgmahou_Create(fopAc_ac_c*) {
/* Nonmatching */
static cPhs_State daFgmahou_Create(fopAc_ac_c* a_this) {
static dCcD_SrcSph tg_sph_src = {
// dCcD_SrcGObjInf
{
@@ -103,6 +395,31 @@ static cPhs_State daFgmahou_Create(fopAc_ac_c*) {
/* Radius */ 30.0f,
}},
};
fgmahou_class* i_this = static_cast<fgmahou_class*>(a_this);
fopAcM_SetupActor(i_this, fgmahou_class);
cPhs_State phase_state = dComIfG_resLoad(&i_this->mPhs, "Fganon");
if(phase_state == cPhs_COMPLEATE_e) {
i_this->mOrbNumber = fopAcM_GetParam(i_this) & 0xF;
if(!fopAcM_entrySolidHeap(i_this, useHeapInit, 0x19000)) {
return cPhs_ERROR_e;
}
i_this->mAcch.Set(fopAcM_GetPosition_p(i_this), fopAcM_GetOldPosition_p(i_this), i_this, 1, &i_this->mCir, fopAcM_GetSpeed_p(i_this));
i_this->mCir.SetWall(50.0f, 50.0f);
i_this->mAcch.ClrRoofNone();
i_this->mAcch.SetRoofCrrHeight(REG0_F(7) + 70.0f);
i_this->mStts.Init(0xFA, 0xFF, i_this);
i_this->mTgSph.Set(tg_sph_src);
i_this->mTgSph.SetStts(&i_this->mStts);
i_this->mTgSph.OnTgNoHitMark();
i_this->mAtSph.Set(at_sph_src);
i_this->mAtSph.SetStts(&i_this->mStts);
}
return phase_state;
}
static actor_method_class l_daFgmahou_Method = {
+4 -4
View File
@@ -879,7 +879,7 @@ u16 daNpc_Rsh1_c::shop_talk() {
/* 00001DE4-00001FE0 .text talk__12daNpc_Rsh1_cFv */
u16 daNpc_Rsh1_c::talk() {
u16 result = 0xFF;
u16 status = 0xFF;
if (m961 == 0) {
l_msgId = fpcM_ERROR_PROCESS_ID_e;
@@ -904,10 +904,10 @@ u16 daNpc_Rsh1_c::talk() {
setAnmFromMsgTag();
switch (m961) {
case 2:
result = normal_talk();
status = normal_talk();
break;
case 3:
result = shop_talk();
status = shop_talk();
break;
}
if (dComIfGp_checkMesgSendButton()) {
@@ -933,7 +933,7 @@ u16 daNpc_Rsh1_c::talk() {
mShopCamAct.m54 = mpShopItems->mSelectedItemIdx;
}
return result;
return status;
}
/* 00001FE0-00002358 .text CreateInit__12daNpc_Rsh1_cFv */
+1709 -249
View File
File diff suppressed because it is too large Load Diff
+312
View File
@@ -0,0 +1,312 @@
// The original name of this file is unknown, but it must exist because d_a_npc_tc's "cut" functions
// are in a separate .text section from the rest of its functions.
/* 00005C58-00005E60 .text cutProc__10daNpc_Tc_cFv */
void daNpc_Tc_c::cutProc() {
static char* action_table[] = {
"SIT_TO_JUMP",
"PRESENT",
"SET_ANM",
"BACKJUMP",
"EFFECT",
"DOOR_OPEN",
"DOOR_CLOSE",
"DOOR_CLOSE2",
"PAY",
};
int staffIdx = dComIfGp_evmng_getMyStaffId("Tc");
if (staffIdx != -1) {
int actIdx = dComIfGp_evmng_getMyActIdx(staffIdx, action_table, ARRAY_SIZE(action_table), TRUE, 0);
if (actIdx == -1) {
dComIfGp_evmng_cutEnd(staffIdx);
} else {
if (dComIfGp_evmng_getIsAddvance(staffIdx)) {
switch(actIdx) {
case 0:
cutSitToJumpStart(staffIdx);
break;
case 1:
cutPresentStart(staffIdx);
break;
case 2:
cutSetAnmStart(staffIdx);
break;
case 3:
cutBackJumpStart(staffIdx);
break;
case 4:
cutEffectStart(staffIdx);
break;
case 5:
cutDoorOpenStart(staffIdx);
break;
case 6:
cutDoorCloseStart(staffIdx);
break;
case 7:
cutDoorClose2Start(staffIdx);
break;
case 8:
cutPayStart(staffIdx);
break;
}
}
switch(actIdx) {
case 0:
cutSitToJumpProc(staffIdx);
break;
case 1:
cutPresentProc(staffIdx);
break;
case 2:
cutSetAnmProc(staffIdx);
break;
case 3:
cutBackJumpProc(staffIdx);
break;
case 4:
cutEffectProc(staffIdx);
break;
case 5:
cutDoorOpenProc(staffIdx);
break;
case 6:
cutDoorCloseProc(staffIdx);
break;
case 7:
cutDoorClose2Proc(staffIdx);
break;
case 8:
cutPayProc(staffIdx);
}
}
}
}
/* 00005E60-00005E6C .text cutSitToJumpStart__10daNpc_Tc_cFi */
void daNpc_Tc_c::cutSitToJumpStart(int) {
mAnmPrmIdx = ANM_PRM_IDX_JAMP_A;
}
/* 00005E6C-00005FA4 .text cutSitToJumpProc__10daNpc_Tc_cFi */
void daNpc_Tc_c::cutSitToJumpProc(int i_staffIdx) {
if (mpMorf->isStop() && mAnmPrmIdx == ANM_PRM_IDX_JAMP_A) {
speedF = l_HIO.field_0x38;
speed.y = l_HIO.field_0x40;
gravity = l_HIO.field_0x3C;
mAnmPrmIdx = ANM_PRM_IDX_JAMP_B;
}
if(speed.y <= 0.0f && mAnmPrmIdx == ANM_PRM_IDX_JAMP_B) {
mAnmPrmIdx = ANM_PRM_IDX_JAMP_C1;
}
if(mObjAcch.ChkGroundHit() && mAnmPrmIdx == ANM_PRM_IDX_JAMP_C1) {
speedF = 0.0f;
mAnmPrmIdx = ANM_PRM_IDX_JAMP_C2;
mJumpLandingTimer = 0x33;
return;
}
if (cLib_calcTimer(&mJumpLandingTimer) == 0 && mAnmPrmIdx == ANM_PRM_IDX_JAMP_C2) {
mAnmPrmIdx = ANM_PRM_IDX_WAIT01;
dComIfGp_evmng_cutEnd(i_staffIdx);
}
}
/* 00005FA4-00005FA8 .text cutPresentStart__10daNpc_Tc_cFi */
void daNpc_Tc_c::cutPresentStart(int) {
}
/* 00005FA8-00006174 .text cutPresentProc__10daNpc_Tc_cFi */
void daNpc_Tc_c::cutPresentProc(int i_staffIdx) {
int* pItemType = dComIfGp_evmng_getMyIntegerP(i_staffIdx, "ItemType");
int temp;
if(pItemType == NULL) {
temp = 0;
} else {
temp = *pItemType;
}
int itemNo;
switch(temp) {
case 0:
itemNo = dItem_TINGLE_TUNER_e;
break;
case 1:
itemNo = dItem_COLLECT_MAP_35_e;
break;
case 2:
if (mType == TYPE_RED) {
if (checkAllMonumentFee()) {
itemNo = TINCLE_RUPEE6;
} else {
switch (checkAllMonumentPay()) {
case 1:
itemNo = TINCLE_RUPEE1;
break;
case 2:
itemNo = TINCLE_RUPEE2;
break;
case 3:
itemNo = TINCLE_RUPEE3;
break;
case 4:
itemNo = TINCLE_RUPEE4;
break;
case 5:
itemNo = TINCLE_RUPEE5;
break;
}
}
} else if (mType == TYPE_NORMAL2) {
switch (analysisCollectMap()) {
case 1:
itemNo = TRIFORCE_MAP1;
break;
case 2:
itemNo = TRIFORCE_MAP2;
break;
case 3:
itemNo = TRIFORCE_MAP3;
break;
case 4:
itemNo = TRIFORCE_MAP4;
break;
case 5:
itemNo = TRIFORCE_MAP5;
break;
case 6:
itemNo = TRIFORCE_MAP6;
break;
case 7:
itemNo = TRIFORCE_MAP7;
break;
case 8:
itemNo = TRIFORCE_MAP8;
break;
}
}
break;
}
#if VERSION == VERSION_DEMO
fpc_ProcID itemPID = fopAcM_createItemForPresentDemo(&current.pos, itemNo, 0, -1);
#else
fpc_ProcID itemPID = fopAcM_createItemForPresentDemo(&current.pos, itemNo, 0, -1, current.roomNo);
#endif
if(itemPID != fpcM_ERROR_PROCESS_ID_e) {
dComIfGp_event_setItemPartnerId(itemPID);
dComIfGp_evmng_cutEnd(i_staffIdx);
}
}
/* 00006174-000061F0 .text cutSetAnmStart__10daNpc_Tc_cFi */
void daNpc_Tc_c::cutSetAnmStart(int i_staffIdx) {
const char* pName = dComIfGp_evmng_getMyStringP(i_staffIdx, "Name");
if(pName != NULL && strcmp(pName, "GET") == 0) {
mAnmPrmIdx = ANM_PRM_IDX_GET;
} else {
mAnmPrmIdx = ANM_PRM_IDX_WAIT01;
}
}
/* 000061F0-000062A0 .text cutSetAnmProc__10daNpc_Tc_cFi */
void daNpc_Tc_c::cutSetAnmProc(int i_staffIdx) {
dComIfGp_evmng_getMyStringP(i_staffIdx, "Name");
if (mAnmPrmIdx == ANM_PRM_IDX_GET) {
dComIfGp_evmng_cutEnd(i_staffIdx);
}
if(mpMorf->isStop()) {
dComIfGp_evmng_cutEnd(i_staffIdx);
}
}
/* 000062A0-000062D8 .text cutBackJumpStart__10daNpc_Tc_cFi */
void daNpc_Tc_c::cutBackJumpStart(int) {
mTargetSpeed = 0.0f;
speedF = l_HIO.field_0x48;
speed.y = l_HIO.field_0x50;
gravity = l_HIO.field_0x4C;
mAnmPrmIdx = ANM_PRM_IDX_GUARD;
}
/* 000062D8-000063BC .text cutBackJumpProc__10daNpc_Tc_cFi */
void daNpc_Tc_c::cutBackJumpProc(int i_staffIdx) {
mSmokeCallBack.end();
if (mObjAcch.ChkGroundLanding()) {
speedF = 0.0f;
speed.y = 0.0f;
mSmokePos.set(current.pos);
mSmokeAngle = current.angle;
smoke_set(2.0f, 0.25f, 0.0f, 5.0f, 20.0f);
} else if (mObjAcch.ChkGroundHit() && speed.y == 0.0f){
speedF = 0.0f;
dComIfGp_evmng_cutEnd(i_staffIdx);
}
}
/* 000063BC-000064C8 .text cutEffectStart__10daNpc_Tc_cFi */
void daNpc_Tc_c::cutEffectStart(int) {
// regswap for demo daNpc_Tc_c::setAnm also has a regswap with identical code
cXyz pos;
pos.x = current.pos.x;
pos.y = current.pos.y;
pos.z = current.pos.z;
pos.y -= 80.0f;
cXyz particleScale;
particleScale.setall(1.0f);
JPABaseEmitter* pEmitter = dComIfGp_particle_set(dPa_name::ID_SCENE_8152, &pos, NULL, &particleScale);
pEmitter->setGlobalParticleScale(0.62f, 0.6f);
fopAcM_seStart(this, JA_SE_CM_CMN_NOTICE, 0);
/* Nonmatching */
}
/* 000064C8-000064F4 .text cutEffectProc__10daNpc_Tc_cFi */
void daNpc_Tc_c::cutEffectProc(int i_staffIdx) {
dComIfGp_evmng_cutEnd(i_staffIdx);
}
/* 000064F4-00006564 .text cutDoorOpenStart__10daNpc_Tc_cFi */
void daNpc_Tc_c::cutDoorOpenStart(int) {
fopAcM_seStart(this, JA_SE_OBJ_DOOR_N_OPEN, 0);
}
/* 00006564-00006590 .text cutDoorOpenProc__10daNpc_Tc_cFi */
void daNpc_Tc_c::cutDoorOpenProc(int i_staffIdx) {
dComIfGp_evmng_cutEnd(i_staffIdx);
}
/* 00006590-00006600 .text cutDoorCloseStart__10daNpc_Tc_cFi */
void daNpc_Tc_c::cutDoorCloseStart(int) {
fopAcM_seStart(this, JA_SE_OBJ_DOOR_N_CLOSE_1, 0);
}
/* 00006600-0000662C .text cutDoorCloseProc__10daNpc_Tc_cFi */
void daNpc_Tc_c::cutDoorCloseProc(int i_staffIdx) {
dComIfGp_evmng_cutEnd(i_staffIdx);
}
/* 0000662C-0000669C .text cutDoorClose2Start__10daNpc_Tc_cFi */
void daNpc_Tc_c::cutDoorClose2Start(int) {
fopAcM_seStart(this, JA_SE_OBJ_DOOR_N_CLOSE_2, 0);
}
/* 0000669C-000066C8 .text cutDoorClose2Proc__10daNpc_Tc_cFi */
void daNpc_Tc_c::cutDoorClose2Proc(int i_staffIdx) {
dComIfGp_evmng_cutEnd(i_staffIdx);
}
/* 000066C8-000066E0 .text cutPayStart__10daNpc_Tc_cFi */
void daNpc_Tc_c::cutPayStart(int i_param) {
dComIfGp_setItemRupeeCount(-398);
}
/* 000066E0-0000670C .text cutPayProc__10daNpc_Tc_cFi */
void daNpc_Tc_c::cutPayProc(int i_staffIdx) {
dComIfGp_evmng_cutEnd(i_staffIdx);
}
+205
View File
@@ -0,0 +1,205 @@
// The original name of this file is unknown, but it must exist because d_a_npc_tc's "normal2's" functions
// are in a separate .text section from the rest of its functions.
#include "d/actor/d_a_npc_tc.h"
#include "d/d_com_inf_game.h"
/* 00004BAC-00004E6C .text next_msgStatusNormal2__10daNpc_Tc_cFPUl */
u16 daNpc_Tc_c::next_msgStatusNormal2(u32* pMsgNo) {
u16 msgStatus = fopMsgStts_MSG_CONTINUES_e;
if ((mAnmPrmIdx == ANM_PRM_IDX_DANCE01_TO_TALK01 || mAnmPrmIdx == ANM_PRM_IDX_DANCE02_TO_WAIT03) && !mpMorf->isStop()) {
msgStatus = fopMsgStts_MSG_DISPLAYED_e;
} else {
switch (*pMsgNo) {
#if VERSION > VERSION_JPN
case 0x38AA:
case 0x38AB:
if (dComIfGs_isEventBit(dSv_event_flag_c::UNK_3020)) {
*pMsgNo = 0x38AC;
} else {
*pMsgNo = 0x38AD;
}
break;
case 0x38AC:
case 0x38AD:
if (existKnownCollectMap()) {
*pMsgNo = 0xDBA;
} else {
*pMsgNo = 0xDB5;
}
break;
#endif
case 0xDB2:
case 0xDB3:
case 0xDFB:
*pMsgNo = 0xDB4;
break;
case 0xDB4:
*pMsgNo = getMsgNormal2();
break;
case 0xDB5:
*pMsgNo = 0xDBA;
break;
case 0xDBB:
*pMsgNo = 0xDBC;
break;
case 0xDBC:
*pMsgNo = 0xDBD;
break;
case 0xDBD:
*pMsgNo = 0xDBE;
break;
case 0xDBE:
if (mpCurrMsg->mSelectNum == 0) {
if ((u16)dComIfGs_getRupee() >= 398) {
mStatus = STATUS_PAY_RUPEE;
field_0x80D = true;
field_0x80C = true;
msgStatus = fopMsgStts_MSG_ENDS_e;
} else {
*pMsgNo = 0xDC0;
}
} else {
*pMsgNo = 0xDBF;
}
break;
case 0xDC0:
if (field_0x80B) {
*pMsgNo = 0xDC4;
} else {
*pMsgNo = 0xDC1;
}
break;
case 0xDBF:
*pMsgNo = 0xDC1;
break;
case 0xDC3:
if (mpCurrMsg->mSelectNum == 0) {
if ((u16)dComIfGs_getRupee() >= 398) {
mStatus = STATUS_PAY_RUPEE;
field_0x80D = true;
field_0x80C = true;
msgStatus = fopMsgStts_MSG_ENDS_e;
} else {
field_0x80B = true;
*pMsgNo = 0xDC0;
}
} else {
*pMsgNo = 0xDC4;
}
break;
case 0xDC4:
field_0x80D = false;
field_0x80B = false;
// fallthrough
default:
msgStatus = fopMsgStts_MSG_ENDS_e;
break;
}
}
return msgStatus;
}
/* 00004E6C-00004F68 .text getMsgNormal2__10daNpc_Tc_cFv */
u32 daNpc_Tc_c::getMsgNormal2() {
u32 msg;
stopTower();
if (field_0x80D) {
if (existUnknownCollectMap()) {
msg = 0xDC3;
field_0x80D = false;
} else {
msg = 0xDC4;
}
} else if (!field_0x808) {
field_0x808 = true;
if (dComIfGs_isEventBit(dSv_event_flag_c::UNK_1A20)) {
if (dComIfGs_isEventBit(dSv_event_flag_c::UNK_1708)) {
msg = 0xDB3;
} else {
msg = 0xDFB;
}
} else {
msg = 0xDB2;
}
} else if (existUnknownCollectMap()) {
if (!field_0x809) {
field_0x809 = true;
msg = 0xDBB;
} else {
msg = 0xDBE;
}
} else {
#if VERSION <= VERSION_JPN
if(existKnownCollectMap()) {
msg = 0xDBA;
} else {
msg = 0xDB5;
}
#else
msg = setRupeeSizeMsg();
#endif
}
return msg;
}
#if VERSION > VERSION_JPN
/* 00004F68-00004FD8 .text setRupeeSizeMsg__10daNpc_Tc_cFv */
u32 daNpc_Tc_c::setRupeeSizeMsg() {
u32 msgNo = 0xDB5;
if (dComIfGs_getWalletSize() == 0) {
msgNo = 0x38AA;
} else if (dComIfGs_getWalletSize() == 1) {
msgNo = 0x38AB;
}
else if (dComIfGs_getWalletSize() == 2) {
if (existKnownCollectMap()) {
msgNo = 0xDBA;
} else {
msgNo = 0xDB5;
}
}
return msgNo;
}
#endif
/* 00004FD8-00005054 .text existUnknownCollectMap__10daNpc_Tc_cFv */
bool daNpc_Tc_c::existUnknownCollectMap() {
for(int i = 1; i <= 8; i++) {
if(!dComIfGs_isCollectMapTriforce(i) && dComIfGs_isGetCollectMap(i)) {
return true;
}
}
return false;
}
/* 00005054-000050DC .text analysisCollectMap__10daNpc_Tc_cFv */
int daNpc_Tc_c::analysisCollectMap() {
for(int i = 1; i <= 8; i++) {
if(!dComIfGs_isCollectMapTriforce(i) && dComIfGs_isGetCollectMap(i)) {
dComIfGs_onCollectMapTriforce(i);
return i;
}
}
return 0;
}
/* 000050DC-00005158 .text existKnownCollectMap__10daNpc_Tc_cFv */
bool daNpc_Tc_c::existKnownCollectMap() {
for(int i = 1; i <= 8; i++) {
if(dComIfGs_isGetCollectMap(i) && dComIfGs_isCollectMapTriforce(i)) {
return true;
}
}
return false;
}
+251
View File
@@ -0,0 +1,251 @@
// The original name of this file is unknown, but it must exist because d_a_npc_tc's "red's" functions
// are in a separate .text section from the rest of its functions.
#include "d/actor/d_a_npc_tc.h"
#include "d/d_com_inf_game.h"
/* 00005498-00005720 .text next_msgStatusRed__10daNpc_Tc_cFPUl */
u16 daNpc_Tc_c::next_msgStatusRed(u32* pMsgNo) {
u16 msgStatus = fopMsgStts_MSG_CONTINUES_e;
if ((mAnmPrmIdx == ANM_PRM_IDX_DANCE01_TO_TALK01 || mAnmPrmIdx == ANM_PRM_IDX_DANCE02_TO_WAIT03) && !mpMorf->isStop()) {
msgStatus = fopMsgStts_MSG_DISPLAYED_e;
} else {
switch(*pMsgNo) {
case 0xDB7:
case 0xDE1:
*pMsgNo = 0xDE2;
break;
case 0xDE2:
if (dComIfGs_getClearCount() != 0) {
*pMsgNo = 0xDB8;
} else {
*pMsgNo = 0xDE3;
}
break;
case 0xDB8:
case 0xDE3:
*pMsgNo = 0xDE4;
break;
case 0xDE4:
*pMsgNo = setFinishMsg();
break;
case 0xDE5:
*pMsgNo = setFinishMsg();
break;
case 0xDE6:
if (dComIfGs_isEventBit(dSv_event_flag_c::UNK_1A20)) {
*pMsgNo = 0xDEB;
} else {
*pMsgNo = 0xDE7;
}
field_0x814 = true;
break;
case 0xDEB:
if (field_0x814) {
if (dComIfGs_isEventBit(dSv_event_flag_c::UNK_1A20)) {
*pMsgNo = 0xDEC;
} else {
*pMsgNo = setFinishMsg();
}
} else {
*pMsgNo = setFinishMsg();
}
break;
case 0xDEC:
*pMsgNo = 0xDED;
break;
case 0xDED:
*pMsgNo = setFinishMsg();
break;
case 0xDE7:
*pMsgNo = 0xDE8;
break;
case 0xDE8:
*pMsgNo = 0xDE9;
break;
case 0xDE9:
*pMsgNo = 0xDEA;
break;
case 0xDEA:
*pMsgNo = setFinishMsg();
break;
case 0xDEE:
*pMsgNo = 0xDEF;
break;
case 0xDEF:
mStatus = STATUS_GET_RUPEE;
msgStatus = fopMsgStts_MSG_ENDS_e;
break;
case 0xDF1:
*pMsgNo = 0xDF2;
break;
case 0xDF2:
mStatus = STATUS_MONUMENT_COMPLETE;
msgStatus = fopMsgStts_MSG_ENDS_e;
break;
case 0xDF3:
*pMsgNo = 0xDF4;
break;
case 0xDF4:
*pMsgNo = 0xDF5;
break;
case 0xDF5:
*pMsgNo = setFinishMsg();
break;
case 0xDF0:
*pMsgNo = setFinishMsg();
break;
case 0xDC7:
m_jnt.onHeadLock();
msgStatus = fopMsgStts_MSG_ENDS_e;
field_0x814 = false;
break;
default:
msgStatus = fopMsgStts_MSG_ENDS_e;
break;
}
}
return msgStatus;
}
/* 00005720-00005730 .text setFinishMsg__10daNpc_Tc_cFv */
u32 daNpc_Tc_c::setFinishMsg() {
m_jnt.onHeadLock();
return 0xDC7;
}
/* 00005730-00005944 .text getMsgRed__10daNpc_Tc_cFv */
u32 daNpc_Tc_c::getMsgRed() {
stopTower();
if (field_0x813) {
field_0x813 = false;
return 0xDF3;
}
if (field_0x812) {
field_0x812 = false;
switch(checkAllMonumentFee()) { // fake?
default:
return 0xDF1;
case false:
return 0xDF0;
}
}
if (dComIfGs_isEventBit(dSv_event_flag_c::UNK_0B80)) {
if (!field_0x810) {
field_0x810 = true;
#if VERSION == VERSION_DEMO
if(checkAllMonumentFee() || !checkOneMonumentGet()) {
return 0xDE6;
}
return 0xDEE;
#else
if (dComIfGs_isStageTbox(dSv_save_c::STAGE_DRC, 0xF) && !dComIfGs_isEventBit(dSv_event_flag_c::UNK_1240)) {
return 0xDEE;
}
if (dComIfGs_isStageTbox(dSv_save_c::STAGE_FW, 0xF) && !dComIfGs_isEventBit(dSv_event_flag_c::UNK_1D08)) {
return 0xDEE;
}
if (dComIfGs_isStageTbox(dSv_save_c::STAGE_TOTG, 0xF) && !dComIfGs_isEventBit(dSv_event_flag_c::UNK_1D04)) {
return 0xDEE;
}
if (dComIfGs_isStageTbox(dSv_save_c::STAGE_WT, 0xF)&& !dComIfGs_isEventBit(dSv_event_flag_c::UNK_1D02)) {
return 0xDEE;
}
if (dComIfGs_isStageTbox(dSv_save_c::STAGE_ET, 0xF) && !dComIfGs_isEventBit(dSv_event_flag_c::UNK_1D01)) {
return 0xDEE;
}
return 0xDE6;
#endif
}
switch(dComIfGs_isEventBit(dSv_event_flag_c::UNK_1A20)) { // fake?
default:
return 0xDEB;
case false:
return 0xDEA;
}
}
if (dComIfGs_getClearCount() != 0) {
return setFirstMsg(&field_0x811, 0xDB7U, 0xDE5);
}
return setFirstMsg(&field_0x811, 0xDE1U, 0xDE5);
}
/* 00005944-000059A8 .text checkMonumentFee__10daNpc_Tc_cFUsUs */
bool daNpc_Tc_c::checkMonumentFee(u16 i_stageNo, u16 i_eventId) {
if (dComIfGs_isStageTbox(i_stageNo, 0xf)) {
return dComIfGs_isEventBit(i_eventId);
}
return false;
}
/* 000059A8-00005A50 .text checkAllMonumentFee__10daNpc_Tc_cFv */
bool daNpc_Tc_c::checkAllMonumentFee() {
if(checkMonumentFee(dSv_save_c::STAGE_DRC, dSv_event_flag_c::UNK_1240) &&
checkMonumentFee(dSv_save_c::STAGE_FW, dSv_event_flag_c::UNK_1D08) &&
checkMonumentFee(dSv_save_c::STAGE_TOTG, dSv_event_flag_c::UNK_1D04) &&
checkMonumentFee(dSv_save_c::STAGE_WT, dSv_event_flag_c::UNK_1D02) &&
checkMonumentFee(dSv_save_c::STAGE_ET, dSv_event_flag_c::UNK_1D01)) {
return true;
}
return false;
}
#if VERSION == VERSION_DEMO
bool daNpc_Tc_c::checkOneMonumentGet() {
if(dComIfGs_isStageTbox(dSv_save_c::STAGE_DRC, 0xf)) {
return true;
}
if(dComIfGs_isStageTbox(dSv_save_c::STAGE_FW, 0xf)) {
return true;
}
if(dComIfGs_isStageTbox(dSv_save_c::STAGE_TOTG, 0xf)) {
return true;
}
if(dComIfGs_isStageTbox(dSv_save_c::STAGE_WT, 0xf)) {
return true;
}
if(dComIfGs_isStageTbox(dSv_save_c::STAGE_ET, 0xf)) {
return true;
}
return false;
}
#endif
/* 00005A50-00005B10 .text checkAllMonumentPay__10daNpc_Tc_cFv */
int daNpc_Tc_c::checkAllMonumentPay() {
int amountOfMonumentsPaid = 0;
if(checkMonumentPay(dSv_save_c::STAGE_DRC, dSv_event_flag_c::UNK_1240)) {
amountOfMonumentsPaid++;
}
if (checkMonumentPay(dSv_save_c::STAGE_FW, dSv_event_flag_c::UNK_1D08)) {
amountOfMonumentsPaid++;
}
if (checkMonumentPay(dSv_save_c::STAGE_TOTG, dSv_event_flag_c::UNK_1D04)) {
amountOfMonumentsPaid++;
}
if (checkMonumentPay(dSv_save_c::STAGE_WT, dSv_event_flag_c::UNK_1D02)) {
amountOfMonumentsPaid++;
}
if (checkMonumentPay(dSv_save_c::STAGE_ET, dSv_event_flag_c::UNK_1D01)) {
amountOfMonumentsPaid++;
}
return amountOfMonumentsPaid;
}
/* 00005B10-00005B98 .text checkMonumentPay__10daNpc_Tc_cFUsUs */
bool daNpc_Tc_c::checkMonumentPay(u16 i_stageNo, u16 i_eventId) {
if(dComIfGs_isEventBit(i_eventId)) {
return false;
}
if(dComIfGs_isStageTbox(i_stageNo, 0xF)) {
dComIfGs_onEventBit(i_eventId);
return true;
}
return false;
}
+134
View File
@@ -0,0 +1,134 @@
// The original name of this file is unknown, but it must exist because d_a_npc_tc's "white's" functions
// are in a separate .text section from the rest of its functions.
#include "d/actor/d_a_npc_tc.h"
#include "d/d_com_inf_game.h"
/* 00005158-000053D4 .text next_msgStatusWhite__10daNpc_Tc_cFPUl */
u16 daNpc_Tc_c::next_msgStatusWhite(u32* pMsgNo) {
m_jnt.offHeadLock();
u16 msgStatus = fopMsgStts_MSG_CONTINUES_e;
if ((mAnmPrmIdx == ANM_PRM_IDX_DANCE01_TO_TALK01 || mAnmPrmIdx == ANM_PRM_IDX_DANCE02_TO_WAIT03) && !mpMorf->isStop()) {
msgStatus = fopMsgStts_MSG_DISPLAYED_e;
} else {
switch (*pMsgNo) {
case 0xDC5:
*pMsgNo = 0xDC6;
break;
case 0xDC6:
*pMsgNo = setFinishMsg();
break;
case 0xDC8:
if (dComIfGs_isEventBit(dSv_event_flag_c::UNK_0B80)) {
if (!field_0x80E) {
field_0x80E = true;
*pMsgNo = 0xDD7;
}
} else if (!field_0x80F) {
field_0x80F = true;
*pMsgNo = 0xDC9;
}
break;
case 0xDD7:
*pMsgNo = 0xDD8;
break;
case 0xDD8:
*pMsgNo = setFinishMsg();
break;
case 0xDC9:
if (mpCurrMsg->mSelectNum == 0) {
*pMsgNo = 0xDCA;
} else {
*pMsgNo = 0xDD3;
}
break;
case 0xDCA:
*pMsgNo = 0xDCB;
break;
case 0xDCB:
*pMsgNo = 0xDCC;
break;
case 0xDCC:
*pMsgNo = 0xDCD;
break;
case 0xDCD:
*pMsgNo = 0xDCE;
break;
case 0xDCE:
*pMsgNo = 0xDCF;
break;
case 0xDCF:
*pMsgNo = 0xDD0;
break;
case 0xDD0:
*pMsgNo = 0xDD1;
break;
case 0xDD1:
*pMsgNo = 0xDD2;
break;
case 0xDD2:
*pMsgNo = setFinishMsg();
break;
case 0xDD3:
*pMsgNo = 0xDD4;
break;
case 0xDD4:
*pMsgNo = 0xDD5;
break;
case 0xDD5:
*pMsgNo = setFinishMsg();
break;
case 0xDC7:
m_jnt.onHeadLock();
msgStatus = fopMsgStts_MSG_ENDS_e;
break;
case 0xDD9:
*pMsgNo = 0xDDA;
break;
case 0xDDA:
if (existTcMonument()) {
*pMsgNo = setFinishMsg();
} else {
*pMsgNo = 0xDDB;
}
break;
case 0xDDB:
*pMsgNo = 0xDDC;
break;
case 0xDDC:
*pMsgNo = setFinishMsg();
break;
default:
msgStatus = fopMsgStts_MSG_ENDS_e;
break;
}
}
return msgStatus;
}
/* 000053D4-00005498 .text getMsgWhite__10daNpc_Tc_cFv */
u32 daNpc_Tc_c::getMsgWhite() {
u32 msg;
stopTower();
if (dComIfGs_isEventBit(dSv_event_flag_c::UNK_1708)) {
msg = 0xDD9;
m_jnt.onHeadLock();
} else {
if (dComIfGs_isEventBit(dSv_event_flag_c::UNK_0B80)) {
if (!field_0x80E) {
msg = 0xDC8;
m_jnt.onHeadLock();
} else {
msg = 0xDD6;
}
} else if (!field_0x80F) {
msg = 0xDC8;
m_jnt.onHeadLock();
} else {
msg = 0xDC5;
m_jnt.onHeadLock();
}
}
return msg;
}
+230 -17
View File
@@ -5,72 +5,285 @@
#include "d/dolzel_rel.h" // IWYU pragma: keep
#include "d/actor/d_a_obj_auzu.h"
#include "d/actor/d_a_kytag01.h"
#include "d/actor/d_a_player_main.h"
#include "d/actor/d_a_ship.h"
#include "d/d_procname.h"
#include "d/d_priority.h"
#include "d/res/res_auzu.h"
namespace daObjAuzu {
namespace {
f32 L_radius = 2500.0f;
};
const char Act_c::M_arcname[] = "Auzu";
const Attr_c Act_c::M_attr[2] = {
{
/* mRadiusMult */ 1.5f,
/* mOuterActivationMult */ 1.5f,
/* mInnerActivationMult */ 1.3f,
/* mAnmSpeed */ 0.5f
},
{
/* mRadiusMult */ 2.0f,
/* mOuterActivationMult */ 2.0f,
/* mInnerActivationMult */ 2.0f,
/* mAnmSpeed */ 1.0f
}
};
};
/* 00000078-0000009C .text solidHeapCB__Q29daObjAuzu5Act_cFP10fopAc_ac_c */
void daObjAuzu::Act_c::solidHeapCB(fopAc_ac_c*) {
/* Nonmatching */
BOOL daObjAuzu::Act_c::solidHeapCB(fopAc_ac_c* i_this) {
return ((Act_c*)i_this)->create_heap();
}
/* 0000009C-000001F8 .text create_heap__Q29daObjAuzu5Act_cFv */
void daObjAuzu::Act_c::create_heap() {
/* Nonmatching */
bool daObjAuzu::Act_c::create_heap() {
bool create_result = false;
J3DModelData* mdl_data = static_cast<J3DModelData *>(dComIfG_getObjectRes(M_arcname, AUZU_BDL_AUZU));
JUT_ASSERT(226, mdl_data != NULL);
mpModel = mDoExt_J3DModel__create(mdl_data, 0x80000, 0x11000222);
J3DAnmTextureSRTKey* btk_data = static_cast<J3DAnmTextureSRTKey *>(dComIfG_getObjectRes(M_arcname, AUZU_BTK_AUZU));
JUT_ASSERT(236, btk_data != NULL);
int init_result = mBtkAnm.init(
mdl_data, btk_data, TRUE,
J3DFrameCtrl::EMode_LOOP, attr().mAnmSpeed,
0, -1, false, FALSE
);
if (mpModel && init_result != 0) {
create_result = true;
}
return create_result;
}
/* 000001F8-000003B8 .text _create__Q29daObjAuzu5Act_cFv */
cPhs_State daObjAuzu::Act_c::_create() {
/* Nonmatching */
cPhs_State state = cPhs_ERROR_e;
mType = prm_get_type();
fopAcM_SetupActor(this, daObjAuzu::Act_c);
mbIsExist = is_exist();
if (mbIsExist != 0) {
state = dComIfG_resLoad(&mPhs, M_arcname);
if (state == cPhs_COMPLEATE_e) {
if (fopAcM_entrySolidHeap(this, solidHeapCB, 3456)) {
fopAcM_SetMtx(this, mpModel->getBaseTRMtx());
init_mtx();
f32 cull_xz = attr().mRadiusMult * 3000.0f;
fopAcM_setCullSizeBox(this,
-cull_xz, -30.0f, -cull_xz,
cull_xz, 30.0f, cull_xz
);
mbToAppear = false;
if (prm_get_appear() == 1) {
mScaleAnimFactor = 0.0f;
} else {
if (fopAcM_isSwitch(this, prm_get_swSave())) {
mScaleAnimFactor = 0.0f;
} else {
mScaleAnimFactor = 1.0f;
}
}
mbBgmStarted = false;
mKytagPcId = fpcM_ERROR_PROCESS_ID_e;
set_state_map();
} else {
state = cPhs_ERROR_e;
}
}
}
return state;
}
/* 0000045C-00000498 .text _delete__Q29daObjAuzu5Act_cFv */
bool daObjAuzu::Act_c::_delete() {
/* Nonmatching */
if (mbIsExist != 0) {
dComIfG_resDeleteDemo(&mPhs, M_arcname);
}
return true;
}
/* 00000498-000004E8 .text is_exist__Q29daObjAuzu5Act_cCFv */
void daObjAuzu::Act_c::is_exist() const {
/* Nonmatching */
bool daObjAuzu::Act_c::is_exist() const {
if (mType == 0) {
return dComIfGs_isEventBit(dSv_event_flag_c::ENDLESS_NIGHT);
}
return true;
}
/* 000004E8-00000554 .text set_mtx__Q29daObjAuzu5Act_cFv */
void daObjAuzu::Act_c::set_mtx() {
/* Nonmatching */
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::ZXYrotM(shape_angle);
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
}
/* 00000554-000005B8 .text init_mtx__Q29daObjAuzu5Act_cFv */
void daObjAuzu::Act_c::init_mtx() {
/* Nonmatching */
mpModel->setBaseScale(
cXyz(
scale.x * attr().mRadiusMult,
scale.y,
scale.z * attr().mRadiusMult
)
);
set_mtx();
}
/* 000005B8-00000624 .text set_state_map__Q29daObjAuzu5Act_cFv */
void daObjAuzu::Act_c::set_state_map() {
/* Nonmatching */
if (prm_get_appear() != 1) {
if (is_appear()) {
fopAcM_OnStatus(this, fopAcStts_SHOWMAP_e);
} else {
fopAcM_OffStatus(this, fopAcStts_SHOWMAP_e);
}
}
}
/* 00000624-00000788 .text ship_whirl__Q29daObjAuzu5Act_cFv */
void daObjAuzu::Act_c::ship_whirl() {
/* Nonmatching */
daShip_c* ship_p = dComIfGp_getShipActor();
if (ship_p && fopAcM_GetName(ship_p) == PROC_SHIP) {
f32 sqr_mag_xz = fopAcM_searchActorDistanceXZ2(this, ship_p);
#if VERSION > VERSION_DEMO
f32 inner_activation = (daObjAuzu::L_radius * attr().mInnerActivationMult) *
(daObjAuzu::L_radius * attr().mInnerActivationMult);
f32 outer_activation = (daObjAuzu::L_radius * attr().mOuterActivationMult) *
(daObjAuzu::L_radius * attr().mOuterActivationMult);
#else
f32 outer_activation = (daObjAuzu::L_radius * attr().mOuterActivationMult) *
(daObjAuzu::L_radius * attr().mOuterActivationMult);
f32 inner_activation = (daObjAuzu::L_radius * attr().mInnerActivationMult) *
(daObjAuzu::L_radius * attr().mInnerActivationMult);
#endif
if (sqr_mag_xz < outer_activation) {
if (mScaleAnimFactor > 0.01f) {
bgm_start();
if (sqr_mag_xz < inner_activation) {
ship_p->onWhirlFlg(fopAcM_GetID(this), prm_get_linkID());
} else {
ship_p->onWhirlFlgDirect(fopAcM_GetID(this), prm_get_linkID());
}
} else {
ship_p->offWhirlFlg();
}
}
}
}
/* 00000788-000007DC .text bgm_start__Q29daObjAuzu5Act_cFv */
void daObjAuzu::Act_c::bgm_start() {
/* Nonmatching */
if (mType == 0 && !mbBgmStarted) {
mbBgmStarted = true;
mDoAud_subBgmStart(JA_BGM_DIOCTA_BATTLE);
}
}
/* 000007DC-00000AF8 .text _execute__Q29daObjAuzu5Act_cFv */
bool daObjAuzu::Act_c::_execute() {
/* Nonmatching */
f32 scale_target;
#if VERSION > VERSION_JPN
set_mtx();
#endif
if (dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e)) {
ship_whirl();
} else {
if (DEMO_SELECT(true, mScaleAnimFactor > 0.01f)) {
daPy_lk_c* link_p = daPy_getPlayerLinkActorClass();
fopAcM_searchActorDistanceXZ2(this, daPy_getPlayerLinkActorClass());
if (
fopAcM_searchActorDistanceXZ2(this, link_p) <
((daObjAuzu::L_radius * attr().mOuterActivationMult) *
(daObjAuzu::L_radius * attr().mOuterActivationMult))
) {
link_p->setWhirlId(fopAcM_GetID(this));
}
}
}
mBtkAnm.play();
if (prm_get_appear() == 1) {
if (mbToAppear) {
scale_target = 1.0f;
} else {
scale_target = 0.0f;
}
} else {
if (fopAcM_isSwitch(this, prm_get_swSave())) {
scale_target = 0.0f;
} else {
scale_target = 1.0f;
}
}
cLib_chaseF(&mScaleAnimFactor, scale_target, 0.02f);
s8 param = s8(100.0f * mScaleAnimFactor);
fopAcM_seStart(this, JA_SE_ATM_SWIRL, param);
if (mScaleAnimFactor > 0.0f && fpcM_IsErrorID(mKytagPcId)) {
cXyz scaleXZ;
scaleXZ.x = (mScaleAnimFactor * (daObjAuzu::L_radius * attr().mRadiusMult)) / 5000.0f;
scaleXZ.z = (mScaleAnimFactor * ((daObjAuzu::L_radius + 500.0f) * attr().mRadiusMult)) / 5000.0f;
mKytagPcId = fopAcM_create(
PROC_KYTAG01, -1, &current.pos,
tevStr.mRoomNo, &current.angle, &scaleXZ
);
} else if (mScaleAnimFactor > 0.0f && fpcM_IsErrorID(mKytagPcId) == FALSE) {
kytag01_class* kytag01_p = (kytag01_class *) fopAcM_SearchByID(mKytagPcId);
if (kytag01_p){
kytag01_p->mWaveInfo.mInnerRadius = mScaleAnimFactor * (daObjAuzu::L_radius * attr().mRadiusMult);
kytag01_p->mWaveInfo.mOuterRadius = mScaleAnimFactor * ((daObjAuzu::L_radius + 500.0f) * attr().mRadiusMult);
}
} else if (mScaleAnimFactor == 0.0f && fpcM_IsErrorID(mKytagPcId) == FALSE) {
kytag01_class* kytag01_p = (kytag01_class *) fopAcM_SearchByID(mKytagPcId);
if (kytag01_p){
fopAcM_delete(kytag01_p);
}
}
set_state_map();
return true;
}
/* 00000AF8-00000B88 .text set_material__Q29daObjAuzu5Act_cFP11J3DMaterialUc */
void daObjAuzu::Act_c::set_material(J3DMaterial*, unsigned char) {
/* Nonmatching */
void daObjAuzu::Act_c::set_material(J3DMaterial* i_materialP, u8 i_alphaVal) {
while (i_materialP != NULL) {
if (i_alphaVal == 0) {
i_materialP->getShape()->hide();
} else {
i_materialP->getShape()->show();
i_materialP->getTevKColor(3)->mColor.a = i_alphaVal;
}
i_materialP = i_materialP->getNext();
}
}
/* 00000B88-00000C38 .text _draw__Q29daObjAuzu5Act_cFv */
bool daObjAuzu::Act_c::_draw() {
/* Nonmatching */
g_env_light.settingTevStruct(TEV_TYPE_BG1, &current.pos, &tevStr);
g_env_light.setLightTevColorType(mpModel, &tevStr);
mBtkAnm.entry(mpModel->getModelData());
J3DModelData* model_data_p = mpModel->getModelData();
u8 alpha = u8(mScaleAnimFactor * 255.5f) & 0xFF;
set_material(
model_data_p->getJointNodePointer(0)->getMesh(),
alpha
);
mDoExt_modelUpdateDL(mpModel);
return true;
}
namespace daObjAuzu {
+350 -29
View File
@@ -1,121 +1,442 @@
//
// Generated by dtk
// Translation Unit: d_a_obj_mkie.cpp
//
/**
* d_a_obj_mkie.cpp
* Elephant statue in Earth Temple, that dissolves when hit with light.
*/
#include "d/dolzel_rel.h" // IWYU pragma: keep
#include "d/actor/d_a_obj_mkie.h"
#include "d/res/res_mkieb.h"
#include "d/d_procname.h"
#include "d/d_priority.h"
Mtx daObjMkie::Act_c::M_tmp_mtx;
const char daObjMkie::Act_c::M_arcname[] = "MkieB";
const dCcD_SrcTri daObjMkie::Act_c::M_tri_src = {
// dCcD_SrcGObjInf
{
/* Flags */ 0,
/* SrcObjAt Type */ 0,
/* SrcObjAt Atp */ 0,
/* SrcObjAt SPrm */ 0,
/* SrcObjTg Type */ AT_TYPE_LIGHT,
/* SrcObjTg SPrm */ dCcG_TgSPrm_Shield_e | dCcG_TgSPrm_ShieldFrontRange_e,
/* SrcObjCo SPrm */ 0,
/* SrcGObjAt Se */ 0,
/* SrcGObjAt HitMark */ 0,
/* SrcGObjAt Spl */ 0,
/* SrcGObjAt Mtrl */ 0,
/* SrcGObjAt SPrm */ 0,
/* SrcGObjTg Se */ 0,
/* SrcGObjTg HitMark */ 0,
/* SrcGObjTg Spl */ 0,
/* SrcGObjTg Mtrl */ 0,
/* SrcGObjTg SPrm */ 0,
/* SrcGObjCo SPrm */ 0,
},
// cM3dGTriS
{{
/* a */ {0.0f, 0.0f, 0.0f},
/* b */ {0.0f, 0.0f, 0.0f},
/* c */ {0.0f, 0.0f, 0.0f},
}},
};
const daObjMkie::Act_c::Attr_c daObjMkie::Act_c::M_attr[2] = {
{
"MkieB_die",
1.0f,
{
{
{-30.0f, 190.0f, 40.0f},
{-65.0f, 50.0f, 75.0f},
{65.0f, 50.0f, 75.0f},
},
{
{-30.0f, 190.0f, 40.0f},
{65.0f, 50.0f, 75.0f},
{30.0f, 190.0f, 40.0f},
},
{
{38.0f, 190.0f, 20.0f},
{75.0f, 50.0f, 65.0f},
{75.0f, 50.0f, -65.0f},
},
{
{38.0f, 190.0f, 20.0f},
{75.0f, 50.0f, -65.0f},
{38.0f, 190.0f, -40.0f},
},
{
{30.0f, 190.0f, -60.0f},
{65.0f, 50.0f, -75.0f},
{-65.0f, 50.0f, -75.0f},
},
{
{30.0f, 190.0f, -60.0f},
{-65.0f, 50.0f, -75.0f},
{-30.0f, 190.0f, -60.0f},
},
{
{-38.0f, 190.0f, -40.0f},
{-75.0f, 50.0f, -65.0f},
{-75.0f, 50.0f, 65.0f},
},
{{-38.0f, 190.0f, -40.0f}, {-75.0f, 50.0f, 65.0f}, {-38.0f, 190.0f, 20.0f}},
},
},
{"MkieBAB_die",
3.0f,
{{
{-90.0f, 570.0f, 170.0f},
{-195.0f, 150.0f, 225.0f},
{195.0f, 150.0f, 225.0f},
},
{
{-90.0f, 570.0f, 170.0f},
{195.0f, 150.0f, 225.0f},
{90.0f, 570.0f, 170.0f},
},
{
{120.0f, 570.0f, 60.0f},
{225.f, 150.0f, 195.0f},
{225.0f, 150.0f, -195.0f},
},
{
{120.0f, 570.0f, 60.0f},
{225.0f, 150.0f, -195.0f},
{120.0f, 570.0f, -120.0f},
},
{
{90.0f, 570.0f, -180.0f},
{195.0f, 150.0f, -225.0f},
{-195.0f, 150.0f, -225.0f},
},
{
{90.0f, 570.0f, -180.0f},
{-195.0f, 150.0f, -225.0f},
{-90.0f, 570.0f, -180.0f},
},
{
{-120.0f, 570.0f, -120.0f},
{-225.0f, 150.0f, -195.0f},
{-225.0f, 150.0f, 195.0f},
},
{{-120.0f, 570.0f, -120.0f}, {-225.0f, 150.0f, 195.0f}, {-120.0f, 570.0f, 60.0f}}}}
};
/* 00000078-00000250 .text CreateHeap__Q29daObjMkie5Act_cFv */
BOOL daObjMkie::Act_c::CreateHeap() {
/* Nonmatching */
J3DModelData* model_data = (J3DModelData*)dComIfG_getObjectRes(M_arcname, MKIEB_BDL_MKIEB);
JUT_ASSERT(0x192, model_data != NULL);
mModelBase = mDoExt_J3DModel__create(model_data, 0x80000, 0x11000022);
J3DModelData* model_data_van = (J3DModelData*)dComIfG_getObjectRes(M_arcname, MKIEB_BDL_YLSMF00);
JUT_ASSERT(0x19b, model_data_van != NULL);
mModelVan = mDoExt_J3DModel__create(model_data_van, 0x80000, 0x11000022);
J3DAnmTevRegKey* brk_van = (J3DAnmTevRegKey*)dComIfG_getObjectRes(M_arcname, MKIEB_BRK_YLSMF00);
JUT_ASSERT(0x1a5, brk_van != NULL);
int init = mBrkVan.init(model_data_van, brk_van, true, 0, 1.0f, 0, -1, false, 0);
bool ret = false;
if (mModelBase != NULL && mModelVan != NULL && init != 0) {
ret = true;
}
return ret;
}
/* 00000250-000002EC .text init_cc__Q29daObjMkie5Act_cFv */
void daObjMkie::Act_c::init_cc() {
/* Nonmatching */
for (int i = 0; i < 8; i++) {
mStts[i].Init(0xff, 0xff, this);
mTri[i].Set(M_tri_src);
mTri[i].SetStts(&mStts[i]);
mTri[i].OnTgNoHitMark();
}
set_cc_pos();
}
/* 000002EC-00000420 .text set_cc_pos__Q29daObjMkie5Act_cFv */
void daObjMkie::Act_c::set_cc_pos() {
/* Nonmatching */
for (int i = 0; i < 8; i++) {
Vec src[3];
Vec dst[3];
src[0] = M_attr[mType].table[i][0];
src[1] = M_attr[mType].table[i][1];
src[2] = M_attr[mType].table[i][2];
mDoMtx_multVecArray(mModelBase->getBaseTRMtx(), src, dst, 3);
mTri[i].setPos(&dst[0], &dst[1], &dst[2]);
}
}
/* 00000420-00000568 .text Create__Q29daObjMkie5Act_cFv */
BOOL daObjMkie::Act_c::Create() {
/* Nonmatching */
fopAcM_SetMtx(this, mModelBase->getBaseTRMtx());
init_mtx();
{
const Attr_c* mAttrPtr = M_attr + mType;
float initialScale = mAttrPtr->mScale;
fopAcM_setCullSizeBox(
this, initialScale * -80.0f, initialScale * -1.0f, initialScale * -80.0f, initialScale * 80.0f, initialScale * 230.0f, initialScale * 80.0f
);
}
init_cc();
if (daObj::PrmAbstract<Prm_e>(this, PRM_FLAG_W, PRM_FLAG_S) != 0) {
actor_status &= ~0x3F;
gbaName = 0;
}
mCcInit = false;
mBaseAnmPlaying = false;
{
const Attr_c* mAttrPtr = M_attr + mType;
attention_info.position.y = current.pos.y + mAttrPtr->mScale * 130.0f;
}
eyePos = attention_info.position;
mEvtIdx = dComIfGp_evmng_getEventIdx(M_attr[mType].name, prm_get_evId());
return true;
}
/* 00000568-00000754 .text Mthd_Create__Q29daObjMkie5Act_cFv */
cPhs_State daObjMkie::Act_c::Mthd_Create() {
/* Nonmatching */
cPhs_State phase_state = cPhs_ERROR_e;
fopAcM_SetupActor(this, daObjMkie::Act_c);
mSwitch = !fopAcM_isSwitch(this, prm_get_swSave());
if (mSwitch && (phase_state = dComIfG_resLoad(&mPhs, M_arcname), phase_state == cPhs_COMPLEATE_e)) {
mType = prm_get_type();
const Attr_c* mAttrPtr = M_attr + mType;
float initialScale = mAttrPtr->mScale;
scale.setall(initialScale);
phase_state = MoveBGCreate(M_arcname, MKIEB_DZB_MKIEB, dBgS_MoveBGProc_Trans, 0x1b20);
JUT_ASSERT(0x216, (phase_state == cPhs_COMPLEATE_e) || (phase_state == cPhs_ERROR_e));
}
return phase_state;
}
/* 00000BF0-00000BF8 .text Delete__Q29daObjMkie5Act_cFv */
BOOL daObjMkie::Act_c::Delete() {
/* Nonmatching */
return true;
}
/* 00000BF8-00000C54 .text Mthd_Delete__Q29daObjMkie5Act_cFv */
BOOL daObjMkie::Act_c::Mthd_Delete() {
/* Nonmatching */
BOOL ret = true;
if (mSwitch != false) {
ret = MoveBGDelete();
dComIfG_resDelete(&mPhs, M_arcname);
}
return ret;
}
/* 00000C54-00000CF8 .text set_mtx__Q29daObjMkie5Act_cFv */
void daObjMkie::Act_c::set_mtx() {
/* Nonmatching */
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::ZXYrotM(shape_angle);
mModelBase->setBaseTRMtx(mDoMtx_stack_c::get());
mModelVan->setBaseTRMtx(mDoMtx_stack_c::get());
mDoMtx_stack_c::scaleM(scale);
cMtx_copy(mDoMtx_stack_c::now, M_tmp_mtx);
}
/* 00000CF8-00000D50 .text init_mtx__Q29daObjMkie5Act_cFv */
void daObjMkie::Act_c::init_mtx() {
/* Nonmatching */
mModelBase->setBaseScale(scale);
mModelVan->setBaseScale(scale);
set_mtx();
}
/* 00000D50-00000DF4 .text chk_light__Q29daObjMkie5Act_cFv */
void daObjMkie::Act_c::chk_light() {
/* Nonmatching */
BOOL daObjMkie::Act_c::chk_light() {
BOOL ret = false;
if (dComIfGp_getDetect().chk_light(&eyePos)) {
ret = true;
} else {
for (int i = 0; i < 8; i++) {
if (mTri[i].ChkTgHit()) {
mTri[i].ClrTgHit();
ret = true;
}
}
}
return ret;
}
/* 00000DF4-00000E84 .text eff_break__Q29daObjMkie5Act_cFv */
void daObjMkie::Act_c::eff_break() {
/* Nonmatching */
_GXColor envColor;
envColor.r = (u8)tevStr.mColorC0.r;
envColor.g = (u8)tevStr.mColorC0.g;
envColor.b = (u8)tevStr.mColorC0.b;
envColor.a = (u8)tevStr.mColorC0.a;
dComIfGp_particle_set(dPa_name::ID_SCENE_81A0, &current.pos, &shape_angle, &scale, 0xff, NULL, -1, &tevStr.mColorK0, &envColor, NULL);
}
/* 00000E84-00000EF4 .text sound_melt__Q29daObjMkie5Act_cFv */
void daObjMkie::Act_c::sound_melt() {
/* Nonmatching */
fopAcM_seStart(this, JA_SE_OBJ_L_OBJ_BRK_TAME, 0);
}
/* 00000EF4-00000F7C .text sound_break__Q29daObjMkie5Act_cFv */
void daObjMkie::Act_c::sound_break() {
/* Nonmatching */
static const u32 se_break[] = {
JA_SE_OBJ_L_STATUE_BREAK,
JA_SE_OBJ_L_STATUE_L_BREAK,
};
fopAcM_seStart(this, se_break[mType], 0);
}
/* 00000F7C-00000FD0 .text vib_break__Q29daObjMkie5Act_cFv */
void daObjMkie::Act_c::vib_break() {
/* Nonmatching */
dComIfGp_getVibration().StartShock(4, -0x21, cXyz(0.0f, 1.0f, 0.0f));
}
/* 00000FD0-00001094 .text mode_wait__Q29daObjMkie5Act_cFv */
void daObjMkie::Act_c::mode_wait() {
/* Nonmatching */
if (chk_light() & 0xff) {
mLightCnt += 1;
} else {
mLightCnt = 0;
}
if (mLightCnt > 20) {
mode_demoWait_init();
} else {
if (mCcInit != false) {
set_cc_pos();
}
if (!fopAcM_cullingCheck(this)) {
for (int i = 0; i < 8; i++) {
dComIfG_Ccsp()->Set(&mTri[i]);
}
}
}
}
/* 00001094-000010A8 .text mode_demoWait_init__Q29daObjMkie5Act_cFv */
void daObjMkie::Act_c::mode_demoWait_init() {
/* Nonmatching */
mEvtPlaying = false;
mModeProc = 1;
}
/* 000010A8-00001168 .text mode_demoWait__Q29daObjMkie5Act_cFv */
void daObjMkie::Act_c::mode_demoWait() {
/* Nonmatching */
bool demo = false;
if (dComIfGp_evmng_existence(mEvtIdx)) {
if (eventInfo.checkCommandDemoAccrpt()) {
demo = true;
mEvtPlaying = true;
} else {
fopAcM_orderOtherEventId(this, mEvtIdx, prm_get_evId());
eventInfo.onCondition(2);
}
} else {
demo = true;
}
if (demo) {
mode_demo_init();
}
}
/* 00001168-000011FC .text mode_demo_init__Q29daObjMkie5Act_cFv */
void daObjMkie::Act_c::mode_demo_init() {
/* Nonmatching */
mModeProc = 2;
mState = 10;
if (!prm_get_correct()) {
mDoAud_seStart(JA_SE_READ_RIDDLE_1);
}
mBroken = false;
mBaseAnmPlaying = false;
}
/* 000011FC-00001338 .text mode_demo__Q29daObjMkie5Act_cFv */
void daObjMkie::Act_c::mode_demo() {
/* Nonmatching */
if (mState > 0 && (mState -= 1, mState == 0)) {
eff_break();
sound_melt();
fopAcM_onSwitch(this, prm_get_swSave());
}
if (mState == 0) {
mBaseAnmPlaying = mBrkVan.play();
if (!mBroken && mBaseAnmPlaying) {
sound_break();
vib_break();
mBroken = true;
}
}
if (mEvtPlaying && dComIfGp_evmng_endCheck(mEvtIdx)) {
dComIfGp_event_reset();
mEvtPlaying = false;
}
if (!mEvtPlaying && mState == 0 && mBaseAnmPlaying) {
mStatueDelete = true;
}
}
/* 00001338-000013DC .text mode_proc_call__Q29daObjMkie5Act_cFv */
void daObjMkie::Act_c::mode_proc_call() {
/* Nonmatching */
static void (Act_c::* mode_proc[])() = {
&Act_c::mode_wait,
&Act_c::mode_demoWait,
&Act_c::mode_demo,
};
(this->*mode_proc[mModeProc])();
}
/* 000013DC-000014A0 .text Execute__Q29daObjMkie5Act_cFPPA3_A4_f */
BOOL daObjMkie::Act_c::Execute(Mtx**) {
/* Nonmatching */
BOOL daObjMkie::Act_c::Execute(Mtx** pMtx) {
attention_info.position.x = current.pos.x;
const Attr_c* mAttrPtr = M_attr + mType;
attention_info.position.y = current.pos.y + mAttrPtr->mScale * 130.0f;
attention_info.position.z = current.pos.z;
eyePos = attention_info.position;
mode_proc_call();
if (mStatueDelete) {
fopAcM_delete(this);
}
mCcInit = false;
set_mtx();
*pMtx = &M_tmp_mtx;
return true;
}
/* 000014A0-000015B8 .text Draw__Q29daObjMkie5Act_cFv */
BOOL daObjMkie::Act_c::Draw() {
/* Nonmatching */
if (!mBaseAnmPlaying) {
bool flagVan = false;
if (mModeProc == 2) {
if (mState == 0) {
flagVan = true;
}
}
g_env_light.settingTevStruct(0, &current.pos, &tevStr);
if (flagVan) {
g_env_light.setLightTevColorType(mModelVan, &tevStr);
J3DModelData* modelData = mModelVan->getModelData();
mBrkVan.entry(modelData, mBrkVan.getFrame());
} else {
g_env_light.setLightTevColorType(mModelBase, &tevStr);
}
dComIfGd_setListBG();
if (flagVan) {
mDoExt_modelUpdateDL(mModelVan);
} else {
mDoExt_modelUpdateDL(mModelBase);
}
dComIfGd_setList();
}
return true;
}
namespace daObjMkie {
@@ -137,7 +458,7 @@ BOOL Mthd_Execute(void* i_this) {
/* 00001618-00001644 .text Mthd_Draw__Q29daObjMkie26@unnamed@d_a_obj_mkie_cpp@FPv */
BOOL Mthd_Draw(void* i_this) {
return ((daObjMkie::Act_c*)i_this)->Draw();
return ((daObjMkie::Act_c*)i_this)->MoveBGDraw();
}
/* 00001644-00001670 .text Mthd_IsDelete__Q29daObjMkie26@unnamed@d_a_obj_mkie_cpp@FPv */
+1 -1
View File
@@ -99,7 +99,7 @@ void daObjSmplbg::Act_c::init_mtx() {
/* 00000594-0000061C .text exec_qtkhd__Q211daObjSmplbg5Act_cFv */
void daObjSmplbg::Act_c::exec_qtkhd() {
if(field_0x2D8 == 0){
if(!mIsStop) {
shape_angle.y += 0x5b;
fopAcM_seStart(this, JA_SE_OBJ_TC_TOWER_ROUND, 0);
}
+2 -2
View File
@@ -24,7 +24,7 @@ BOOL daPy_lk_c::checkBoomerangAnime() const {
void daPy_lk_c::throwBoomerang() {
daBoomerang_c* boomerang = (daBoomerang_c*)mActorKeepEquip.getActor();
fopAcM_SetParam(boomerang, 1);
fopAcM_SetParam(boomerang, daBoomerang_c::Mode_Throw);
if (mpAttnActorLockOn != NULL) {
boomerang->setAimActor(mpAttnActorLockOn);
}
@@ -47,7 +47,7 @@ void daPy_lk_c::throwBoomerang() {
}
/* 80149698-801497A4 .text returnBoomerang__9daPy_lk_cFv */
int daPy_lk_c::returnBoomerang() {
BOOL daPy_lk_c::returnBoomerang() {
dComIfGp_clearPlayerStatus0(0, daPyStts0_BOOMERANG_WAIT_e);
if (mEquipItem == daPyItem_NONE_e && !checkNoControll() && !dComIfGp_event_runCheck() && mDemo.getDemoType() == 0 &&
+1 -1
View File
@@ -11650,7 +11650,7 @@ BOOL daPy_lk_c::execute() {
checkRoofRestart();
mDoMtx_multVecZero(mpCLModel->getAnmMtx(0x08), &mLeftHandPos);
mDoMtx_multVecZero(mpCLModel->getAnmMtx(0x0C), &mRightHandPos);
cMtx_multVec(mpCLModel->getAnmMtx(0x00), &boomerang_catch, &m36F4);
cMtx_multVec(mpCLModel->getAnmMtx(0x00), &boomerang_catch, &mBoomerangCatchPos);
cMtx_multVec(mpCLModel->getAnmMtx(0x08), &hookshot_root, &mHookshotRootPos);
mpKatsuraModel->setBaseTRMtx(mpCLModel->getAnmMtx(0x0F));
mpKatsuraModel->calc();
+9 -6
View File
@@ -1276,16 +1276,19 @@ void daPy_lk_c::endDamageEmitter() {
}
/* 8012CA44-8012CD60 .text setItemWaterEffect__9daPy_lk_cFP10fopAc_ac_cii */
u32 daPy_lk_c::setItemWaterEffect(fopAc_ac_c* i_actor, int param_1, int param_2) {
BOOL daPy_lk_c::setItemWaterEffect(fopAc_ac_c* i_actor, BOOL inWater, BOOL triggerOnExit) {
static cXyz eff_scale0(0.5f, 0.5f, 0.5f);
static cXyz eff_scale2(0.13f, 0.13f, 0.13f);
static JGeometry::TVec3<f32> direction(0.0f, 1.0f, 0.0f);
f32 waterY;
if (fopAcM_getWaterY(&i_actor->current.pos, &waterY) && ((param_1 != 0 && i_actor->current.pos.y > waterY) || (param_1 == 0 && waterY >= i_actor->current.pos.y))) {
param_1 ^= 1;
if (param_1 == 0 && param_2 == 0) {
return param_1;
if (fopAcM_getWaterY(&i_actor->current.pos, &waterY) &&
((inWater && i_actor->current.pos.y > waterY) || (!inWater && waterY >= i_actor->current.pos.y)))
{
// Item entered or exited the water.
inWater ^= 1;
if (!inWater && !triggerOnExit) {
return inWater;
}
f32 deltaY = std::fabsf(i_actor->old.pos.y - i_actor->current.pos.y);
@@ -1321,5 +1324,5 @@ u32 daPy_lk_c::setItemWaterEffect(fopAc_ac_c* i_actor, int param_1, int param_2)
}
}
return param_1;
return inWater;
}
+6 -6
View File
@@ -496,7 +496,7 @@ void daTag_Hint_c::talkInit() {
/* 000018C0-00001A00 .text talk__12daTag_Hint_cFv */
u16 daTag_Hint_c::talk() {
u16 sVar3 = 0xff;
u16 status = 0xff;
if (m294 == 0) {
l_msgId = fpcM_ERROR_PROCESS_ID_e;
m290 = getMsg();
@@ -513,13 +513,13 @@ u16 daTag_Hint_c::talk() {
}
break;
case 2:
sVar3 = l_msg->mStatus;
if (sVar3 == fopMsgStts_MSG_DISPLAYED_e) {
status = l_msg->mStatus;
if (status == fopMsgStts_MSG_DISPLAYED_e) {
l_msg->mStatus = next_msgStatus(&m290);
if (l_msg->mStatus == fopMsgStts_MSG_CONTINUES_e) {
fopMsgM_messageSet(m290);
}
} else if (sVar3 == fopMsgStts_BOX_CLOSED_e) {
} else if (status == fopMsgStts_BOX_CLOSED_e) {
l_msg->mStatus = fopMsgStts_MSG_DESTROYED_e;
m294 = -1;
}
@@ -527,7 +527,7 @@ u16 daTag_Hint_c::talk() {
}
}
}
return sVar3;
return status;
}
/* 00001A00-00001D98 .text actionEvent__12daTag_Hint_cFv */
@@ -573,7 +573,7 @@ BOOL daTag_Hint_c::actionEvent() {
switch (iVar2) {
case 1:
sVar3 = talk();
if (sVar3 == 0x12) {
if (sVar3 == fopMsgStts_BOX_CLOSED_e) {
mDoAud_seStart(JA_SE_ITM_OMAMORI_ED_TALK);
dComIfGp_evmng_cutEnd(m29C);
setActio(1);
+5 -5
View File
@@ -154,7 +154,7 @@ void daTag_Island_c::talkInit() {
/* 0000056C-000006AC .text talk__14daTag_Island_cFv */
u16 daTag_Island_c::talk() {
u16 ret = 0xFF;
u16 status = 0xFF;
if (mTalkState == 0) {
l_msgId = fpcM_ERROR_PROCESS_ID_e;
@@ -171,13 +171,13 @@ u16 daTag_Island_c::talk() {
mTalkState = 2;
break;
case 2:
ret = l_msg->mStatus;
if (ret == fopMsgStts_MSG_DISPLAYED_e) {
status = l_msg->mStatus;
if (status == fopMsgStts_MSG_DISPLAYED_e) {
l_msg->mStatus = next_msgStatus(&mMsg);
if (l_msg->mStatus == fopMsgStts_MSG_CONTINUES_e) {
fopMsgM_messageSet(mMsg);
}
} else if (ret == fopMsgStts_BOX_CLOSED_e) {
} else if (status == fopMsgStts_BOX_CLOSED_e) {
l_msg->mStatus = fopMsgStts_MSG_DESTROYED_e;
mTalkState = -1;
}
@@ -186,7 +186,7 @@ u16 daTag_Island_c::talk() {
}
}
return ret;
return status;
}
/* 000006AC-00000778 .text demoInitTact_Bf__14daTag_Island_cFv */