mirror of
https://github.com/zeldaret/ss
synced 2026-05-29 08:42:57 -04:00
@@ -4,22 +4,22 @@ _unresolved = .text:0x00000060; // type:function size:0x4 scope:global
|
||||
__register_global_object = .text:0x00000070; // type:function size:0x1C scope:global
|
||||
__destroy_global_chain = .text:0x00000090; // type:function size:0x54 scope:global
|
||||
dAcOGrave_c_classInit__Fv = .text:0x000000F0; // type:function size:0x10C
|
||||
fn_580_200 = .text:0x00000200; // type:function size:0x58
|
||||
__dt__15dShadowCircle_cFv = .text:0x00000200; // type:function size:0x58
|
||||
__dt__24sFState_c<11dAcOGrave_c>Fv = .text:0x00000260; // type:function size:0x58
|
||||
__dt__27sFStateFct_c<11dAcOGrave_c>Fv = .text:0x000002C0; // type:function size:0x6C
|
||||
__dt__80sStateMgr_c<11dAcOGrave_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000330; // type:function size:0xA0
|
||||
__dt__50sFStateMgr_c<11dAcOGrave_c,20sStateMethodUsr_FI_c>Fv = .text:0x000003D0; // type:function size:0xA4
|
||||
fn_580_480 = .text:0x00000480; // type:function size:0x60
|
||||
fn_580_4E0 = .text:0x000004E0; // type:function size:0x4
|
||||
fn_580_4F0 = .text:0x000004F0; // type:function size:0x58
|
||||
fn_580_550 = .text:0x00000550; // type:function size:0x140
|
||||
fn_580_690 = .text:0x00000690; // type:function size:0x26C
|
||||
fn_580_480__11dAcOGrave_cFP12dAcObjBase_cQ29dBgW_Base13PushPullLabel = .text:0x00000480; // type:function size:0x60
|
||||
pushPullCb__11dAcOGrave_cFP12dAcObjBase_cP12dAcObjBase_cQ29dBgW_Base13PushPullLabel = .text:0x000004E0; // type:function size:0x4
|
||||
unkCb__11dAcOGrave_cFP4dBgWP12dAcObjBase_cP12dAcObjBase_c = .text:0x000004F0; // type:function size:0x58
|
||||
createHeap__11dAcOGrave_cFv = .text:0x00000550; // type:function size:0x140
|
||||
create__11dAcOGrave_cFv = .text:0x00000690; // type:function size:0x26C
|
||||
changeState__80sStateMgr_c<11dAcOGrave_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x00000900; // type:function size:0x10
|
||||
fn_580_910 = .text:0x00000910; // type:function size:0x8
|
||||
fn_580_920 = .text:0x00000920; // type:function size:0x1B4
|
||||
doDelete__11dAcOGrave_cFv = .text:0x00000910; // type:function size:0x8
|
||||
actorExecute__11dAcOGrave_cFv = .text:0x00000920; // type:function size:0x1B4
|
||||
executeState__80sStateMgr_c<11dAcOGrave_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000AE0; // type:function size:0x10
|
||||
fn_580_AF0 = .text:0x00000AF0; // type:function size:0x1C
|
||||
fn_580_B10 = .text:0x00000B10; // type:function size:0xC4
|
||||
calcTimer<Us>__4sLibFPUs_Us = .text:0x00000AF0; // type:function size:0x1C
|
||||
draw__11dAcOGrave_cFv = .text:0x00000B10; // type:function size:0xC4
|
||||
initializeState_Wait__11dAcOGrave_cFv = .text:0x00000BE0; // type:function size:0x4
|
||||
executeState_Wait__11dAcOGrave_cFv = .text:0x00000BF0; // type:function size:0x254
|
||||
finalizeState_Wait__11dAcOGrave_cFv = .text:0x00000E50; // type:function size:0x4
|
||||
@@ -48,24 +48,24 @@ isSameName__26sFStateID_c<11dAcOGrave_c>CFPCc = .text:0x000014A0; // type:functi
|
||||
_ctors = .ctors:0x00000000; // type:label scope:global
|
||||
_dtors = .dtors:0x00000000; // type:label scope:global
|
||||
__destroy_global_chain_reference = .dtors:0x00000000; // type:object size:0x4 scope:global
|
||||
lbl_580_rodata_0 = .rodata:0x00000000; // type:object size:0x8 data:float
|
||||
lbl_580_rodata_8 = .rodata:0x00000008; // type:object size:0x1C align:4 data:float
|
||||
lbl_580_rodata_24 = .rodata:0x00000024; // type:object size:0x4 align:4 data:float
|
||||
lbl_580_rodata_28 = .rodata:0x00000028; // type:object size:0x8 align:4 data:float
|
||||
lbl_580_rodata_30 = .rodata:0x00000030; // type:object size:0x4 align:4 data:float
|
||||
lbl_580_rodata_0 = .rodata:0x00000000; // type:object size:0x8 scope:local data:float
|
||||
lbl_580_rodata_8 = .rodata:0x00000008; // type:object size:0x1C scope:local align:4 data:float
|
||||
lbl_580_rodata_24 = .rodata:0x00000024; // type:object size:0x4 scope:local align:4 data:float
|
||||
lbl_580_rodata_28 = .rodata:0x00000028; // type:object size:0x8 scope:local align:4 data:float
|
||||
lbl_580_rodata_30 = .rodata:0x00000030; // type:object size:0x4 scope:local align:4 data:float
|
||||
g_profile_OBJ_GRAVE = .data:0x00000000; // type:object size:0x10 data:4byte
|
||||
lbl_580_data_10 = .data:0x00000010; // type:object size:0x90
|
||||
lbl_580_data_A0 = .data:0x000000A0; // type:object size:0x20
|
||||
AcOGrave__vtable = .data:0x000000C0; // type:object size:0x80
|
||||
lbl_580_data_140 = .data:0x00000140; // type:object size:0x30
|
||||
lbl_580_data_170 = .data:0x00000170; // type:object size:0x30
|
||||
lbl_580_data_1A0 = .data:0x000001A0; // type:object size:0x18
|
||||
lbl_580_data_1B8 = .data:0x000001B8; // type:object size:0x18
|
||||
lbl_580_data_1D0 = .data:0x000001D0; // type:object size:0x8C
|
||||
lbl_580_data_25C = .data:0x0000025C; // type:object size:0x34
|
||||
lbl_580_data_10 = .data:0x00000010; // type:object size:0x90 scope:local
|
||||
lbl_580_data_A0 = .data:0x000000A0; // type:object size:0x20 scope:local
|
||||
__vt__11dAcOGrave_c = .data:0x000000C0; // type:object size:0x80
|
||||
__vt__50sFStateMgr_c<11dAcOGrave_c,20sStateMethodUsr_FI_c> = .data:0x00000140; // type:object size:0x30
|
||||
__vt__80sStateMgr_c<11dAcOGrave_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x00000170; // type:object size:0x30
|
||||
lbl_580_data_1A0 = .data:0x000001A0; // type:object size:0x18 scope:local
|
||||
lbl_580_data_1B8 = .data:0x000001B8; // type:object size:0x18 scope:local
|
||||
lbl_580_data_1D0 = .data:0x000001D0; // type:object size:0x8C scope:local
|
||||
lbl_580_data_25C = .data:0x0000025C; // type:object size:0x34 scope:local
|
||||
__global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global
|
||||
lbl_580_bss_8 = .bss:0x00000008; // type:object size:0x10 data:4byte
|
||||
lbl_580_bss_18 = .bss:0x00000018; // type:object size:0x40 data:4byte
|
||||
lbl_580_bss_58 = .bss:0x00000058; // type:object size:0x30 data:4byte
|
||||
lbl_580_bss_88 = .bss:0x00000088; // type:object size:0x8 data:byte
|
||||
lbl_580_bss_90 = .bss:0x00000090; // type:object size:0x10 align:4 data:float
|
||||
lbl_580_bss_8 = .bss:0x00000008; // type:object size:0x10 scope:local data:4byte
|
||||
lbl_580_bss_18 = .bss:0x00000018; // type:object size:0x40 scope:local data:4byte
|
||||
lbl_580_bss_58 = .bss:0x00000058; // type:object size:0x30 scope:local data:4byte
|
||||
lbl_580_bss_88 = .bss:0x00000088; // type:object size:0x8 scope:local data:byte
|
||||
lbl_580_bss_90 = .bss:0x00000090; // type:object size:0x10 scope:local align:4 data:float
|
||||
|
||||
@@ -17274,7 +17274,7 @@ addCalcPosXZ__4cLibFP7mVec3_cRC7mVec3_cfff = .text:0x802DFFD0; // type:function
|
||||
cLib__addCalcPos2 = .text:0x802E0190; // type:function size:0x13C
|
||||
cLib__addCalcPosXZ2 = .text:0x802E02D0; // type:function size:0xF8
|
||||
cLib__chasePos = .text:0x802E03D0; // type:function size:0x174
|
||||
cLib__chasePosXZ = .text:0x802E0550; // type:function size:0x124
|
||||
chasePosXZ__4cLibFR7mVec3_cR7mVec3_cf = .text:0x802E0550; // type:function size:0x124
|
||||
targetAngleY__4cLibFRC7mVec3_cRC7mVec3_c = .text:0x802E0680; // type:function size:0x1C
|
||||
targetAngleX__4cLibFRC7mVec3_cRC7mVec3_c = .text:0x802E06A0; // type:function size:0x68
|
||||
cLib__offsetPos = .text:0x802E0710; // type:function size:0xD8
|
||||
@@ -43413,7 +43413,7 @@ lbl_80576FFC = .sdata2:0x80576FFC; // type:object size:0x4 align:4 data:float
|
||||
lbl_80577000 = .sdata2:0x80577000; // type:object size:0x4 align:4 data:float
|
||||
lbl_80577004 = .sdata2:0x80577004; // type:object size:0x4 align:4 data:float
|
||||
@11566 = .sdata2:0x80577008; // type:object size:0x4 scope:local align:4 data:float
|
||||
lbl_80577010 = .sdata2:0x80577010; // type:object size:0x4 align:4 data:float
|
||||
sPushRelatedConstant__17daPlayerActBase_c = .sdata2:0x80577010; // type:object size:0x4 align:4 data:float
|
||||
lbl_80577014 = .sdata2:0x80577014; // type:object size:0x4 align:4 data:float
|
||||
lbl_80577018 = .sdata2:0x80577018; // type:object size:0x4 align:4 data:float
|
||||
@26291 = .sdata2:0x80577020; // type:object size:0x8 scope:local data:string
|
||||
|
||||
+1
-1
@@ -2514,7 +2514,7 @@ config.libs = [
|
||||
),
|
||||
Rel(NonMatching, "d_a_obj_god_mark", "REL/d/a/obj/d_a_obj_god_mark.cpp"),
|
||||
Rel(NonMatching, "d_a_obj_grass_coil", "REL/d/a/obj/d_a_obj_grass_coil.cpp"),
|
||||
Rel(NonMatching, "d_a_obj_grave", "REL/d/a/obj/d_a_obj_grave.cpp"),
|
||||
Rel(Matching, "d_a_obj_grave", "REL/d/a/obj/d_a_obj_grave.cpp"),
|
||||
Rel(NonMatching, "d_a_obj_ground_cover", "REL/d/a/obj/d_a_obj_ground_cover.cpp"),
|
||||
Rel(NonMatching, "d_a_obj_guard_log", "REL/d/a/obj/d_a_obj_guard_log.cpp"),
|
||||
Rel(NonMatching, "d_a_obj_harp_hint", "REL/d/a/obj/d_a_obj_harp_hint.cpp"),
|
||||
|
||||
@@ -11,6 +11,7 @@ s16 targetAngleX(const mVec3_c &target, const mVec3_c &source);
|
||||
void addCalcPos2(mVec3_c *src, const mVec3_c &target, f32 scale, f32 maxStep);
|
||||
f32 addCalcPosXZ(mVec3_c *src, const mVec3_c &target, f32 scale, f32 maxStep, f32 minStep);
|
||||
f32 addCalcPos(mVec3_c *src, const mVec3_c &target, f32 scale, f32 maxStep, f32 minStep);
|
||||
bool chasePosXZ(mVec3_c &, mVec3_c &, f32);
|
||||
|
||||
// made up name
|
||||
f32 easeIn(f32 value, f32 exponent);
|
||||
|
||||
@@ -2,6 +2,13 @@
|
||||
#define D_A_OBJ_GRAVE_H
|
||||
|
||||
#include "d/a/obj/d_a_obj_base.h"
|
||||
#include "d/col/bg/d_bg_w.h"
|
||||
#include "d/col/cc/d_cc_d.h"
|
||||
#include "d/d_shadow.h"
|
||||
#include "m/m3d/m_anmmatclr.h"
|
||||
#include "m/m3d/m_smdl.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "nw4r/g3d/res/g3d_resfile.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "s/s_StateMgr.hpp"
|
||||
|
||||
@@ -10,11 +17,45 @@ public:
|
||||
dAcOGrave_c() : mStateMgr(*this, sStateID::null) {}
|
||||
virtual ~dAcOGrave_c() {}
|
||||
|
||||
virtual bool createHeap();
|
||||
virtual int create();
|
||||
virtual int doDelete();
|
||||
virtual int actorExecute();
|
||||
virtual int draw();
|
||||
|
||||
void fn_580_480(dAcObjBase_c *link, dBgW_Base::PushPullLabel label);
|
||||
|
||||
void executeState() {
|
||||
mStateMgr.executeState();
|
||||
}
|
||||
|
||||
STATE_FUNC_DECLARE(dAcOGrave_c, Wait);
|
||||
STATE_FUNC_DECLARE(dAcOGrave_c, Move);
|
||||
|
||||
private:
|
||||
/* 0x??? */ STATE_MGR_DECLARE(dAcOGrave_c);
|
||||
static dAcObjBase_c *pushPullCb(dAcObjBase_c *grave, dAcObjBase_c *link, dBgW_Base::PushPullLabel label);
|
||||
static bool unkCb(dBgW *bgW, dAcObjBase_c *grave, dAcObjBase_c *link);
|
||||
|
||||
/* 0x330 */ nw4r::g3d::ResFile mResFile;
|
||||
/* 0x334 */ m3d::smdl_c mMdl;
|
||||
/* 0x350 */ dShadowCircle_c mShadow;
|
||||
/* 0x358 */ dBgW mBgW;
|
||||
/* 0x568 */ STATE_MGR_DECLARE(dAcOGrave_c);
|
||||
/* 0x5A4 */ dCcD_Unk mCollider;
|
||||
/* 0x7AC */ m3d::anmMatClr_c mAnmMatClr;
|
||||
/* 0x7D8 */ mVec3_c mOrigPos1;
|
||||
/* 0x7E4 */ mVec3_c mOrigPos2;
|
||||
/* 0x7F0 */ u16 mTimer;
|
||||
/* 0x7F2 */ u8 mSceneflag;
|
||||
/* 0x7F3 */ bool mShouldGlow;
|
||||
/* 0x7F4 */ bool mPush;
|
||||
/* 0x7F5 */ bool mPull;
|
||||
/* 0x7F6 */ bool field_0x7F6;
|
||||
/* 0x7F7 */ bool field_0x7F7;
|
||||
|
||||
static dCcD_SrcUnk sUnkSrc;
|
||||
static const u8 lbl_580_rodata_0;
|
||||
static const f32 lbl_580_rodata_30;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -386,6 +386,9 @@ public:
|
||||
void SetRideCallback(dBgW_RideCallback func) {
|
||||
mpRide_cb = func;
|
||||
}
|
||||
void SetUnkCallback(dBgW_UnkCallback func) {
|
||||
mpUnk_cb = func;
|
||||
}
|
||||
void OnMoveFlag() {
|
||||
mFlags |= 1;
|
||||
}
|
||||
|
||||
@@ -556,6 +556,10 @@ public:
|
||||
field_0x360 |= mask;
|
||||
}
|
||||
|
||||
inline void offFlags_0x360(u32 mask) {
|
||||
field_0x360 &= ~mask;
|
||||
}
|
||||
|
||||
inline void onForceOrPreventActionFlags(u32 mask) {
|
||||
mForceOrPreventActionFlags |= mask;
|
||||
}
|
||||
|
||||
@@ -1,13 +1,207 @@
|
||||
#include "d/a/obj/d_a_obj_grave.h"
|
||||
|
||||
#include "c/c_lib.h"
|
||||
#include "d/a/d_a_player.h"
|
||||
#include "d/a/obj/d_a_obj_base.h"
|
||||
#include "d/col/bg/d_bg_s.h"
|
||||
#include "d/col/bg/d_bg_w_base.h"
|
||||
#include "d/col/cc/d_cc_d.h"
|
||||
#include "d/col/cc/d_cc_s.h"
|
||||
#include "d/d_sc_game.h"
|
||||
#include "d/d_stage.h"
|
||||
#include "d/flag/sceneflag_manager.h"
|
||||
#include "d/snd/d_snd_wzsound.h"
|
||||
#include "f/f_base.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "m/types_m.h"
|
||||
#include "nw4r/g3d/res/g3d_resanmclr.h"
|
||||
#include "nw4r/g3d/res/g3d_resfile.h"
|
||||
#include "nw4r/g3d/res/g3d_resmdl.h"
|
||||
#include "s/s_Math.h"
|
||||
#include "toBeSorted/arc_managers/current_stage_arc_manager.h"
|
||||
|
||||
SPECIAL_ACTOR_PROFILE(OBJ_GRAVE, dAcOGrave_c, fProfile::OBJ_GRAVE, 0x255, 0, 2);
|
||||
|
||||
STATE_DEFINE(dAcOGrave_c, Wait);
|
||||
STATE_DEFINE(dAcOGrave_c, Move);
|
||||
|
||||
dCcD_SrcUnk dAcOGrave_c::sUnkSrc = {
|
||||
{/* mObjAt */ {0, 0, {0, 0, 0}, 0, 0, 0, 0, 0, 0},
|
||||
/* mObjTg */
|
||||
{~(AT_TYPE_BUGNET | AT_TYPE_BEETLE | AT_TYPE_0x80000 | AT_TYPE_0x8000 | AT_TYPE_WIND), 0x111, {0, 6, 0x407}, 0, 0},
|
||||
/* mObjCo */ {0}},
|
||||
{-65.0f, 0.0f, -25.0f, 65.0f, 156.0f, 25.0f},
|
||||
};
|
||||
|
||||
const u8 dAcOGrave_c::lbl_580_rodata_0 = 0xA;
|
||||
const f32 dAcOGrave_c::lbl_580_rodata_30 = 10.f;
|
||||
|
||||
void dAcOGrave_c::fn_580_480(dAcObjBase_c *link, dBgW_Base::PushPullLabel label) {
|
||||
if (label & dBgW_Base::PPLABEL_PUSH) {
|
||||
mAngle.y = link->mRotation.y;
|
||||
if (link == dAcPy_c::GetLink()) {
|
||||
this->mPush = true;
|
||||
}
|
||||
} else if (label & dBgW_Base::PPLABEL_PULL) {
|
||||
mAngle.y = link->mRotation.y.mVal + 0x8000;
|
||||
if (link == dAcPy_c::GetLink()) {
|
||||
this->mPull = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dAcObjBase_c *dAcOGrave_c::pushPullCb(dAcObjBase_c *grave, dAcObjBase_c *link, dBgW_Base::PushPullLabel label) {
|
||||
((dAcOGrave_c *)grave)->fn_580_480(link, label);
|
||||
}
|
||||
|
||||
bool dAcOGrave_c::unkCb(dBgW *bgW, dAcObjBase_c *grave, dAcObjBase_c *link) {
|
||||
if (link->isActorPlayer() && dScGame_c::currentSpawnInfo.isNight()) {
|
||||
((dAcOGrave_c *)grave)->field_0x7F7 = true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dAcOGrave_c::createHeap() {
|
||||
void *data = CurrentStageArcManager::GetInstance()->getData("g3d/stage.brres");
|
||||
mResFile = nw4r::g3d::ResFile(data);
|
||||
dStage_c::bindSkyCmnToResFile(&mResFile);
|
||||
nw4r::g3d::ResMdl mdl = mResFile.GetResMdl("StageF000Grave");
|
||||
TRY_CREATE(mMdl.create(mdl, &mAllocator, 0x128));
|
||||
nw4r::g3d::ResAnmClr anmClr = mResFile.GetResAnmClr("StageF000Grave");
|
||||
TRY_CREATE(mAnmMatClr.create(mdl, anmClr, &mAllocator, nullptr, 1));
|
||||
mMdl.setAnm(mAnmMatClr);
|
||||
void *dzb = CurrentStageArcManager::GetInstance()->getData("dzb/StageF000Grave.dzb");
|
||||
void *plc = CurrentStageArcManager::GetInstance()->getData("dat/StageF000Grave.plc");
|
||||
updateMatrix();
|
||||
return !mBgW.Set((cBgD_t *)dzb, (PLC *)plc, cBgW::MOVE_BG_e, &mWorldMtx, &mScale);
|
||||
}
|
||||
|
||||
// copy from d_a_obj_fairy - TODO move it to a shared file
|
||||
inline static void vecCylCalc(mVec3_c &target, const mAng &rot, f32 factor) {
|
||||
target.x += factor * rot.sin();
|
||||
target.z += factor * rot.cos();
|
||||
}
|
||||
|
||||
int dAcOGrave_c::create() {
|
||||
mShouldGlow = getFromParams(0, 3) == 0;
|
||||
mSceneflag = getFromParams(2, 0xFF);
|
||||
CREATE_ALLOCATOR(dAcOGrave_c);
|
||||
mStts.SetRank(0xD);
|
||||
mCollider.Set(sUnkSrc);
|
||||
mCollider.SetStts(mStts);
|
||||
mBgW.SetCrrFunc(dBgS_MoveBGProc_Typical);
|
||||
mBgW.SetPushPullCallback(pushPullCb);
|
||||
mBgW.SetUnkCallback(unkCb);
|
||||
dBgS::GetInstance()->Regist(&mBgW, this);
|
||||
mAcceleration = 0.f;
|
||||
mMaxSpeed = -40.f;
|
||||
mOrigPos1 = mPosition;
|
||||
field_0x7F6 = true;
|
||||
if (mSceneflag < 0xFF && SceneflagManager::sInstance->checkBoolFlag(mRoomID, mSceneflag)) {
|
||||
if (dScGame_c::currentSpawnInfo.isNight()) {
|
||||
mTimer = 1;
|
||||
}
|
||||
field_0x7F6 = false;
|
||||
mOrigPos2 = mPosition;
|
||||
vecCylCalc(mOrigPos2, mRotation.y.mVal + 0x8000, dAcPy_c::sPushRelatedConstant);
|
||||
mPosition.set(mOrigPos2.x, mOrigPos2.y, mOrigPos2.z);
|
||||
mOldPosition.set(mOrigPos2.x, mOrigPos2.y, mOrigPos2.z);
|
||||
}
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
mBoundingBox.Set(mVec3_c(-100.f, -0.f, -100.f), mVec3_c(100.f, 200.f, 100.f));
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcOGrave_c::doDelete() {
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcOGrave_c::actorExecute() {
|
||||
if (mTimer != 0 && mShouldGlow) {
|
||||
if (mAnmMatClr.getFrame(0) == 0.f || mAnmMatClr.getFrame(0) == 75.f) {
|
||||
startSound(SE_Grave_AKU_MARK);
|
||||
}
|
||||
if (mSceneflag < 0xFF && !SceneflagManager::sInstance->checkBoolFlag(mRoomID, mSceneflag)) {
|
||||
sLib::calcTimer(&mTimer);
|
||||
}
|
||||
mAnmMatClr.play();
|
||||
}
|
||||
if ((mObjectActorFlags & 1) == 0) {
|
||||
mStateMgr.executeState();
|
||||
calcVelocity();
|
||||
mPosition += mVelocity;
|
||||
mPosition += mStts.GetCcMove();
|
||||
updateMatrix();
|
||||
mMdl.setLocalMtx(mWorldMtx);
|
||||
if (mShouldGlow && dScGame_c::currentSpawnInfo.isNight()) {
|
||||
mCollider.Set(mPosition, mRotation.y);
|
||||
dCcS::GetInstance()->Set(&mCollider);
|
||||
}
|
||||
mBgW.Move();
|
||||
mPush = false;
|
||||
mPull = false;
|
||||
field_0x7F7 = false;
|
||||
}
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcOGrave_c::draw() {
|
||||
drawModelType1(&mMdl);
|
||||
static mQuat_c shadowRot(0.f, 50.f, 0.f, 50.f);
|
||||
drawShadow(mShadow, nullptr, mWorldMtx, &shadowRot, -1, -1, -1, -1, -1, 0.f);
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
void dAcOGrave_c::initializeState_Wait() {}
|
||||
void dAcOGrave_c::executeState_Wait() {}
|
||||
|
||||
void dAcOGrave_c::executeState_Wait() {
|
||||
if (mShouldGlow && mTimer == 0) {
|
||||
if ((mCollider.ChkTgHit() &&
|
||||
(mCollider.ChkTgAtHitType(AT_TYPE_SWORD) || mCollider.ChkTgAtHitType(AT_TYPE_BOMB)) ||
|
||||
field_0x7F7)) {
|
||||
mTimer = 300;
|
||||
mAnmMatClr.setFrame(0.f, 0);
|
||||
mAnmMatClr.setRate(1.f, 0);
|
||||
}
|
||||
}
|
||||
mAng ang = getXZAngleToPlayer();
|
||||
s32 diff = sLib::absDiff(ang, mRotation.y);
|
||||
if (field_0x7F6) {
|
||||
mOrigPos2 = mPosition;
|
||||
vecCylCalc(mOrigPos2, mAngle.y, dAcPy_c::sPushRelatedConstant);
|
||||
if ((mPush && (s16)diff < 0x2000) || (mPull && (s16)diff > 0x6000)) {
|
||||
field_0x7F6 = false;
|
||||
mStateMgr.changeState(StateID_Move);
|
||||
}
|
||||
} else {
|
||||
mOrigPos2 = mOrigPos1;
|
||||
if ((mPush && (s16)diff > 0x6000) || (mPull && (s16)diff < 0x2000)) {
|
||||
field_0x7F6 = true;
|
||||
mStateMgr.changeState(StateID_Move);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void dAcOGrave_c::finalizeState_Wait() {}
|
||||
void dAcOGrave_c::initializeState_Move() {}
|
||||
void dAcOGrave_c::executeState_Move() {}
|
||||
void dAcOGrave_c::finalizeState_Move() {}
|
||||
|
||||
void dAcOGrave_c::initializeState_Move() {
|
||||
dAcPy_c::LINK->onFlags_0x360(0x10000);
|
||||
startSound(SE_Grave_MOVE);
|
||||
}
|
||||
|
||||
void dAcOGrave_c::executeState_Move() {
|
||||
if (cLib::chasePosXZ(mPosition, mOrigPos2, lbl_580_rodata_30)) {
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
}
|
||||
}
|
||||
|
||||
void dAcOGrave_c::finalizeState_Move() {
|
||||
dAcPy_c::LINK->offFlags_0x360(0x10000);
|
||||
if (mShouldGlow && mTimer != 0) {
|
||||
if (mSceneflag < 0xFF && !SceneflagManager::sInstance->checkBoolFlag(mRoomID, mSceneflag)) {
|
||||
SceneflagManager::sInstance->setFlag(mRoomID, mSceneflag);
|
||||
}
|
||||
}
|
||||
itemDroppingAndGivingRelated(&mOrigPos1, 0);
|
||||
fillUpperParams2Byte();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user