mirror of
https://github.com/zeldaret/tww.git
synced 2026-07-08 05:40:36 -04:00
Merge branch 'main' into menu_cloth
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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"),
|
||||
|
||||
@@ -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
@@ -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 */
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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
@@ -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 */
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
@@ -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,
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
@@ -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, ¤t.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(¤t.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(¤t.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, ¤t.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, ¤t.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, ¤t.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 */
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
+1470
-68
File diff suppressed because it is too large
Load Diff
+370
-27
@@ -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, ¤t.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
@@ -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 = {
|
||||
|
||||
@@ -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
File diff suppressed because it is too large
Load Diff
@@ -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(¤t.pos, itemNo, 0, -1);
|
||||
#else
|
||||
fpc_ProcID itemPID = fopAcM_createItemForPresentDemo(¤t.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);
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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
@@ -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, ¤t.pos,
|
||||
tevStr.mRoomNo, ¤t.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, ¤t.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
@@ -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, ¤t.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, ¤t.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 */
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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 &&
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user