mirror of
https://github.com/zeldaret/ss
synced 2026-07-08 13:56:15 -04:00
d_a_obj_seat_sword OK (#107)
* d_a_obj_seat_sword mostly done * ninja apply * symbol cleanup * correct code pattern, not right regs * d_a_obj_seat_sword OK --------- Co-authored-by: robojumper <robojumper@gmail.com>
This commit is contained in:
@@ -17,3 +17,6 @@ REL/global_destructor_chain.c:
|
||||
REL/d/a/obj/d_a_obj_seat_sword.cpp:
|
||||
.text start:0x000000F0 end:0x000015E8
|
||||
.ctors start:0x00000000 end:0x00000004
|
||||
.rodata start:0x00000000 end:0x0000007C
|
||||
.data start:0x00000000 end:0x0000025C
|
||||
.bss start:0x00000008 end:0x00000088
|
||||
|
||||
@@ -8,26 +8,26 @@ __dt__28sFState_c<15dAcOSeatSword_c>Fv = .text:0x000001F0; // type:function size
|
||||
__dt__31sFStateFct_c<15dAcOSeatSword_c>Fv = .text:0x00000250; // type:function size:0x6C
|
||||
__dt__84sStateMgr_c<15dAcOSeatSword_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000002C0; // type:function size:0xA0
|
||||
__dt__54sFStateMgr_c<15dAcOSeatSword_c,20sStateMethodUsr_FI_c>Fv = .text:0x00000360; // type:function size:0xA4
|
||||
AcOSeatSword__initModels = .text:0x00000410; // type:function size:0x25C
|
||||
AcOSeatSword__init = .text:0x00000670; // type:function size:0x1B0
|
||||
createHeap__15dAcOSeatSword_cFv = .text:0x00000410; // type:function size:0x25C
|
||||
create__15dAcOSeatSword_cFv = .text:0x00000670; // type:function size:0x1B0
|
||||
changeState__84sStateMgr_c<15dAcOSeatSword_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x00000820; // type:function size:0x10
|
||||
fn_499_830 = .text:0x00000830; // type:function size:0x8
|
||||
AcOSeatSword__update = .text:0x00000840; // type:function size:0x9C
|
||||
doDelete__15dAcOSeatSword_cFv = .text:0x00000830; // type:function size:0x8
|
||||
actorExecute__15dAcOSeatSword_cFv = .text:0x00000840; // type:function size:0x9C
|
||||
executeState__84sStateMgr_c<15dAcOSeatSword_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000008E0; // type:function size:0x10
|
||||
getStateID__84sStateMgr_c<15dAcOSeatSword_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x000008F0; // type:function size:0x10
|
||||
AcOSeatSword__updateInEvents = .text:0x00000900; // type:function size:0x110
|
||||
AcOSeatSword__performInteraction = .text:0x00000A10; // type:function size:0x84
|
||||
fn_499_AA0 = .text:0x00000AA0; // type:function size:0x164
|
||||
fn_499_C10 = .text:0x00000C10; // type:function size:0x98
|
||||
actorExecuteInEvent__15dAcOSeatSword_cFv = .text:0x00000900; // type:function size:0x110
|
||||
doInteraction__15dAcOSeatSword_cFl = .text:0x00000A10; // type:function size:0x84
|
||||
registerInEvent__15dAcOSeatSword_cFv = .text:0x00000AA0; // type:function size:0x164
|
||||
draw__15dAcOSeatSword_cFv = .text:0x00000C10; // type:function size:0x98
|
||||
initializeState_Wait__15dAcOSeatSword_cFv = .text:0x00000CB0; // type:function size:0x4
|
||||
executeState_Wait__15dAcOSeatSword_cFv = .text:0x00000CC0; // type:function size:0x88
|
||||
finalizeState_Wait__15dAcOSeatSword_cFv = .text:0x00000D50; // type:function size:0x4
|
||||
initializeState_Get__15dAcOSeatSword_cFv = .text:0x00000D60; // type:function size:0xC
|
||||
executeState_Get__15dAcOSeatSword_cFv = .text:0x00000D70; // type:function size:0x4
|
||||
finalizeState_Get__15dAcOSeatSword_cFv = .text:0x00000D80; // type:function size:0x4
|
||||
AcOSeatSword__commonUpdate = .text:0x00000D90; // type:function size:0xE8
|
||||
fn_499_E80 = .text:0x00000E80; // type:function size:0x104
|
||||
AcOSeatSword__checkShouldHaveSword = .text:0x00000F90; // type:function size:0xC4
|
||||
actorExecuteCommon__15dAcOSeatSword_cFv = .text:0x00000D90; // type:function size:0xE8
|
||||
updateSwordMdl__15dAcOSeatSword_cFv = .text:0x00000E80; // type:function size:0x104
|
||||
checkPlayerHasSword__15dAcOSeatSword_cFv = .text:0x00000F90; // type:function size:0xC4
|
||||
__dt__15dAcOSeatSword_cFv = .text:0x00001060; // type:function size:0x114
|
||||
build__31sFStateFct_c<15dAcOSeatSword_c>FRC12sStateIDIf_c = .text:0x00001180; // type:function size:0x60
|
||||
dispose__31sFStateFct_c<15dAcOSeatSword_c>FRP10sStateIf_c = .text:0x000011E0; // type:function size:0xC
|
||||
@@ -49,29 +49,31 @@ isSameName__30sFStateID_c<15dAcOSeatSword_c>CFPCc = .text:0x00001560; // type:fu
|
||||
_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_499_rodata_0 = .rodata:0x00000000; // type:object size:0x10 data:float
|
||||
lbl_499_rodata_10 = .rodata:0x00000010; // type:object size:0x30
|
||||
lbl_499_rodata_40 = .rodata:0x00000040; // type:object size:0x10 data:float
|
||||
lbl_499_rodata_50 = .rodata:0x00000050; // type:object size:0x18 data:float
|
||||
lbl_499_rodata_68 = .rodata:0x00000068; // type:object size:0x4 data:float
|
||||
lbl_499_rodata_6C = .rodata:0x0000006C; // type:object size:0x8 data:float
|
||||
lbl_499_rodata_74 = .rodata:0x00000074; // type:object size:0x4 data:float
|
||||
lbl_499_rodata_78 = .rodata:0x00000078; // type:object size:0x4 data:float
|
||||
sEventName = .rodata:0x00000000; // type:object size:0xE scope:local data:string
|
||||
sInteractionDef__15dAcOSeatSword_c = .rodata:0x00000010; // type:object size:0x30
|
||||
sEffectPos__15dAcOSeatSword_c = .rodata:0x00000040; // type:object size:0xC data:float
|
||||
l_inGroundRot = .rodata:0x0000004C; // type:object size:0x2 data:2byte
|
||||
lbl_499_rodata_50 = .rodata:0x00000050; // type:object size:0x18 scope:local data:float
|
||||
lbl_499_rodata_68 = .rodata:0x00000068; // type:object size:0x4 scope:local data:float
|
||||
lbl_499_rodata_6C = .rodata:0x0000006C; // type:object size:0x8 scope:local data:float
|
||||
lbl_499_rodata_74 = .rodata:0x00000074; // type:object size:0x4 scope:local data:float
|
||||
lbl_499_rodata_78 = .rodata:0x00000078; // type:object size:0x4 scope:local data:float
|
||||
g_profile_OBJ_SEAT_SWORD = .data:0x00000000; // type:object size:0x10 data:4byte
|
||||
lbl_499_data_10 = .data:0x00000010; // type:object size:0x30
|
||||
lbl_499_data_40 = .data:0x00000040; // type:object size:0xC
|
||||
lbl_499_data_4C = .data:0x0000004C; // type:object size:0xC
|
||||
lbl_499_data_58 = .data:0x00000058; // type:object size:0x8
|
||||
lbl_499_data_60 = .data:0x00000060; // type:object size:0xC
|
||||
lbl_499_data_6C = .data:0x0000006C; // type:object size:0x20
|
||||
lbl_499_data_8C = .data:0x0000008C; // type:object size:0x4 data:4byte
|
||||
lbl_499_data_90 = .data:0x00000090; // type:object size:0x80
|
||||
lbl_499_data_110 = .data:0x00000110; // type:object size:0x30
|
||||
lbl_499_data_140 = .data:0x00000140; // type:object size:0x30
|
||||
lbl_499_data_170 = .data:0x00000170; // type:object size:0x18
|
||||
lbl_499_data_188 = .data:0x00000188; // type:object size:0xA0
|
||||
lbl_499_data_228 = .data:0x00000228; // type:object size:0x34
|
||||
sCylSrc__15dAcOSeatSword_c = .data:0x00000010; // type:object size:0x30
|
||||
lbl_499_data_40 = .data:0x00000040; // type:object size:0xC scope:local
|
||||
lbl_499_data_4C = .data:0x0000004C; // type:object size:0xC scope:local
|
||||
SwordSeatNames = .data:0x00000058; // type:object size:0x8
|
||||
lbl_499_data_60 = .data:0x00000060; // type:object size:0xC scope:local
|
||||
lbl_499_data_6C = .data:0x0000006C; // type:object size:0x20 scope:local
|
||||
lbl_499_data_8C = .data:0x0000008C; // type:object size:0x4 scope:local data:4byte
|
||||
__vt__15dAcOSeatSword_c = .data:0x00000090; // type:object size:0x80
|
||||
__vt__54sFStateMgr_c<15dAcOSeatSword_c,20sStateMethodUsr_FI_c> = .data:0x00000110; // type:object size:0x30
|
||||
__vt__84sStateMgr_c<15dAcOSeatSword_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x00000140; // type:object size:0x30
|
||||
__vt__31sFStateFct_c<15dAcOSeatSword_c> = .data:0x00000170; // type:object size:0x14
|
||||
__vt__28sFState_c<15dAcOSeatSword_c> = .data:0x00000188; // type:object size:0x18
|
||||
__vt__30sFStateID_c<15dAcOSeatSword_c> = .data:0x00000228; // type:object size:0x34
|
||||
__global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global
|
||||
lbl_499_bss_8 = .bss:0x00000008; // type:object size:0x10 data:4byte
|
||||
lbl_499_bss_18 = .bss:0x00000018; // type:object size:0x40 data:4byte
|
||||
lbl_499_bss_58 = .bss:0x00000058; // type:object size:0x30 data:4byte
|
||||
lbl_499_bss_8 = .bss:0x00000008; // type:object size:0xC scope:local data:4byte
|
||||
StateID_Wait__15dAcOSeatSword_c = .bss:0x00000018; // type:object size:0x30 data:4byte
|
||||
lbl_499_bss_48 = .bss:0x00000048; // type:object size:0xC scope:local data:4byte
|
||||
StateID_Get__15dAcOSeatSword_c = .bss:0x00000058; // type:object size:0x30 data:4byte
|
||||
|
||||
+1115
-953
File diff suppressed because it is too large
Load Diff
+1
-1
@@ -1532,7 +1532,7 @@ config.libs = [
|
||||
Rel(NonMatching, "d_a_obj_save", "REL/d/a/obj/d_a_obj_save.cpp"),
|
||||
Rel(NonMatching, "d_a_obj_scattersand", "REL/d/a/obj/d_a_obj_scattersand.cpp"),
|
||||
Rel(NonMatching, "d_a_obj_sealed_door", "REL/d/a/obj/d_a_obj_sealed_door.cpp"),
|
||||
Rel(NonMatching, "d_a_obj_seat_sword", "REL/d/a/obj/d_a_obj_seat_sword.cpp"),
|
||||
Rel(Matching, "d_a_obj_seat_sword", "REL/d/a/obj/d_a_obj_seat_sword.cpp"),
|
||||
Rel(NonMatching, "d_a_obj_sea_F301", "REL/d/a/obj/d_a_obj_sea_F301.cpp"),
|
||||
Rel(NonMatching, "d_a_obj_shed", "REL/d/a/obj/d_a_obj_shed.cpp"),
|
||||
Rel(NonMatching, "d_a_obj_ship_window", "REL/d/a/obj/d_a_obj_ship_window.cpp"),
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
#include "common.h"
|
||||
#include "d/a/d_a_base.h"
|
||||
#include "d/a/obj/d_a_obj_base.h"
|
||||
#include "m/m_allocator.h"
|
||||
#include "m/m_angle.h"
|
||||
#include "m/m_mtx.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "nw4r/g3d/g3d_resfile.h"
|
||||
|
||||
class dAcPy_c : public dAcObjBase_c {
|
||||
// See Below for some info
|
||||
@@ -57,7 +62,7 @@ public:
|
||||
/* vt 0x08C */ virtual void set0x43DE();
|
||||
/* vt 0x090 */ virtual f32 vt_0x090();
|
||||
/* vt 0x094 */ virtual void relatedToUsingItem0x11();
|
||||
/* vt 0x098 */ virtual void setPosRot();
|
||||
/* vt 0x098 */ virtual void setPosRot(const mVec3_c &pos, const mAng3_c &ang, UNKWORD, UNKWORD, UNKWORD);
|
||||
/* vt 0x09C */ virtual void isLiftingObject();
|
||||
/* vt 0x0A0 */ virtual void isThrowingOrRollingItem();
|
||||
/* vt 0x0A4 */ virtual void canThrowObject();
|
||||
@@ -118,7 +123,7 @@ public:
|
||||
/* vt 0x180 */ virtual void setWindMillPos();
|
||||
/* vt 0x184 */ virtual void isOffeset0x435eEqual0x20();
|
||||
/* vt 0x188 */ virtual void getVec3F_Z();
|
||||
/* vt 0x18C */ virtual void somethingWithMainBodyModel();
|
||||
/* vt 0x18C */ virtual void getBodyMtx(mMtx_c *out_mtx, int boneIdx);
|
||||
/* vt 0x190 */ virtual void getSheathModelMatrix();
|
||||
/* vt 0x194 */ virtual void getSwordModelMatrix();
|
||||
/* vt 0x198 */ virtual void vt_0x198();
|
||||
@@ -229,6 +234,8 @@ public:
|
||||
/* 0x364 */ u32 mActionFlags;
|
||||
/* 0x368 */ u32 mActionFlagsCont;
|
||||
/* 0x36C */ int mCurrentAction; // TODO (Document Enum)
|
||||
/* 0x370 */ u8 _370[0x3C8 - 0x370];
|
||||
/* 0x3C8 */ nw4r::g3d::ResFile mSwordRes;
|
||||
|
||||
inline bool checkFlags0x340(u32 mask) const {
|
||||
return (someFlags_0x340 & mask) != 0;
|
||||
@@ -253,8 +260,11 @@ public:
|
||||
return (mActionFlagsCont & mask) != 0;
|
||||
}
|
||||
|
||||
static nw4r::g3d::ResFile getItemResFile(const char *name, mAllocator_c &allocator);
|
||||
|
||||
static const dAcPy_c *GetLink() {
|
||||
return LINK;
|
||||
}
|
||||
|
||||
static dAcPy_c *LINK;
|
||||
};
|
||||
|
||||
@@ -1,20 +1,70 @@
|
||||
#ifndef D_A_OBJ_SEAT_SWORD_H
|
||||
#define D_A_OBJ_SEAT_SWORD_H
|
||||
|
||||
#include "common.h"
|
||||
#include "d/a/obj/d_a_obj_base.h"
|
||||
#include "d/col/bg/d_bg_w.h"
|
||||
#include "d/col/c/c_cc_d.h"
|
||||
#include "d/col/cc/d_cc_d.h"
|
||||
#include "d/flag/storyflag_manager.h"
|
||||
#include "m/m3d/m_smdl.h"
|
||||
#include "m/m_mtx.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "nw4r/g3d/g3d_resfile.h"
|
||||
#include "nw4r/math/math_types.h"
|
||||
#include "rvl/MTX/mtx.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "s/s_StateMgr.hpp"
|
||||
#include "toBeSorted/actor_event.h"
|
||||
#include "toBeSorted/attention.h"
|
||||
#include "toBeSorted/effects_struct.h"
|
||||
|
||||
class dAcOSeatSword_c : public dAcObjBase_c {
|
||||
public:
|
||||
dAcOSeatSword_c() : mStateMgr(*this, sStateID::null) {}
|
||||
dAcOSeatSword_c() : mEvent(*this, nullptr), mStateMgr(*this, sStateID::null) {}
|
||||
virtual ~dAcOSeatSword_c() {}
|
||||
|
||||
virtual int create() override;
|
||||
virtual int doDelete() override;
|
||||
virtual int draw() override;
|
||||
virtual bool createHeap() override;
|
||||
virtual int actorExecute() override;
|
||||
virtual int actorExecuteInEvent() override;
|
||||
virtual void registerInEvent() override;
|
||||
virtual void doInteraction(s32) override;
|
||||
|
||||
STATE_FUNC_DECLARE(dAcOSeatSword_c, Wait);
|
||||
STATE_FUNC_DECLARE(dAcOSeatSword_c, Get);
|
||||
|
||||
void actorExecuteCommon();
|
||||
void updateSwordMdl();
|
||||
bool checkPlayerHasSword();
|
||||
|
||||
u8 getSubtype() const {
|
||||
return params & 0x3;
|
||||
}
|
||||
|
||||
private:
|
||||
/* 0x??? */ STATE_MGR_DECLARE(dAcOSeatSword_c);
|
||||
/* 0x330 */ ActorEventRelated mEvent;
|
||||
/* 0x380 */ nw4r::g3d::ResFile mRes;
|
||||
/* 0x384 */ m3d::smdl_c mSwordMdl;
|
||||
/* 0x3A0 */ m3d::smdl_c mPedestalMdl;
|
||||
/* 0x3BC */ m3d::smdl_c mPedestalMdl_s;
|
||||
/* 0x3D8 */ dBgW mBgW;
|
||||
/* 0x5E8 */ dCcD_Cyl mCyl;
|
||||
/* 0x738 */ STATE_MGR_DECLARE(dAcOSeatSword_c);
|
||||
/* 0x774 */ EffectsStruct mEff;
|
||||
/* 0x7A8 */ mMtx_c mSwordMtx;
|
||||
/* 0x7D8 */ mVec3_c mEffPos;
|
||||
/* 0x7E4 */ f32 mField_0x7E4;
|
||||
/* 0x7E8 */ mAng mField_0x7E8;
|
||||
/* 0x7EA */ u8 mField_0x7EA;
|
||||
/* 0x7EB */ u8 mSubtype;
|
||||
/* 0x7EC */ bool mbNoSword;
|
||||
|
||||
static dCcD_SrcCyl sCylSrc;
|
||||
static const InteractionTargetDef sInteractionDef;
|
||||
static const Vec sEffectPos;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -30,6 +30,10 @@ public:
|
||||
return FileManager::sInstance->getStoryFlagsConst();
|
||||
};
|
||||
|
||||
u16 getFlag(u16 flag) const {
|
||||
return getCounterOrFlag(flag);
|
||||
}
|
||||
|
||||
public:
|
||||
static StoryflagManager *sInstance;
|
||||
static u16 sFlags[0x80];
|
||||
|
||||
@@ -23,8 +23,11 @@ public:
|
||||
}
|
||||
|
||||
void remove(bool);
|
||||
void fn_80029929(u16 effect, mVec3_c *pos, void *, void *, void *, void *);
|
||||
void fn_80029A10(u16 effect, mVec3_c *pos, mAng3_c *rot, void *, void *, void *);
|
||||
void fn_80027320(u8);
|
||||
void fn_80029920(u16 effect, mVec3_c *pos, mAng3_c *rot, mVec3_c *scale, void *, void *);
|
||||
void fn_80029980(u16 effect, mVec3_c *pos, mAng3_c *rot, mVec3_c *scale, void *, void *);
|
||||
void fn_800299F0(u16 effect, mMtx_c *mtx, void *, void *);
|
||||
void fn_80029A10(u16 effect, mVec3_c *pos, mAng3_c *rot, mVec3_c *scale, void *, void *);
|
||||
void setMtx(const mMtx_c &);
|
||||
|
||||
bool checkField0x00() const {
|
||||
|
||||
@@ -1,13 +1,260 @@
|
||||
#include "d/a/obj/d_a_obj_seat_sword.h"
|
||||
|
||||
#include "common.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.h"
|
||||
#include "d/col/cc/d_cc_d.h"
|
||||
#include "d/col/cc/d_cc_s.h"
|
||||
#include "f/f_base.h"
|
||||
#include "m/m_angle.h"
|
||||
#include "m/m_mtx.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "nw4r/g3d/g3d_resfile.h"
|
||||
#include "rvl/MTX/mtx.h"
|
||||
#include "s/s_Math.h"
|
||||
#include "toBeSorted/attention.h"
|
||||
#include "toBeSorted/event.h"
|
||||
#include "toBeSorted/event_manager.h"
|
||||
|
||||
SPECIAL_ACTOR_PROFILE(OBJ_SEAT_SWORD, dAcOSeatSword_c, fProfile::OBJ_SEAT_SWORD, 0x249, 0, 3);
|
||||
|
||||
STATE_DEFINE(dAcOSeatSword_c, Wait);
|
||||
STATE_DEFINE(dAcOSeatSword_c, Get);
|
||||
|
||||
dCcD_SrcCyl dAcOSeatSword_c::sCylSrc = {
|
||||
/* mObjInf */
|
||||
{/* mObjAt */ {0, 0, {0, 0, 0}, 0, 0, 0, 0, 0, 0},
|
||||
/* mObjTg */ {0, 0x311, {0, 0x407}, 0x0, 0x0},
|
||||
/* mObjCo */ {0xE9}},
|
||||
/* mCylInf */
|
||||
{20.f, 100.f}
|
||||
};
|
||||
|
||||
const char sEventName[] = "PickSwordSeat";
|
||||
|
||||
char *SwordSeatNames[] = {"SwordSeal", "SwordGrd"};
|
||||
|
||||
const InteractionTargetDef dAcOSeatSword_c::sInteractionDef = {
|
||||
0, 2, 1, EXAMINE_TALK, 0, 200.f, 60.f, 0.f, -100.f, 100.f, 50.f, 1.f,
|
||||
};
|
||||
|
||||
const Vec dAcOSeatSword_c::sEffectPos = {-20.f, 260.f, 30.f};
|
||||
|
||||
extern "C" const char *getSwordName(int);
|
||||
extern "C" u8 EQUIPPED_SWORD;
|
||||
bool dAcOSeatSword_c::createHeap() {
|
||||
if (mSubtype == 0) {
|
||||
const char *goddess_sword = getSwordName(1);
|
||||
mRes = dAcPy_c::getItemResFile(goddess_sword, heap_allocator);
|
||||
TRY_CREATE(mSwordMdl.create(mRes.GetResMdl(goddess_sword), &heap_allocator, 0x120, 1, nullptr));
|
||||
} else if (mSubtype == 1) {
|
||||
mRes = dAcPy_c::LINK->mSwordRes;
|
||||
const char *sword_name = getSwordName(EQUIPPED_SWORD);
|
||||
TRY_CREATE(mSwordMdl.create(mRes.GetResMdl(sword_name), &heap_allocator, 0x120, 1, nullptr));
|
||||
}
|
||||
|
||||
nw4r::g3d::ResFile mPedRes = getOarcResFile(SwordSeatNames[mSubtype]);
|
||||
TRY_CREATE(mPedestalMdl.create(mPedRes.GetResMdl(SwordSeatNames[mSubtype]), &heap_allocator, 0x120, 1, nullptr));
|
||||
void *dzb = getOarcDZB(SwordSeatNames[mSubtype], SwordSeatNames[mSubtype]);
|
||||
void *plc = getOarcPLC(SwordSeatNames[mSubtype], SwordSeatNames[mSubtype]);
|
||||
updateMatrix();
|
||||
mSwordMtx.copyFrom(mWorldMtx);
|
||||
TRY_CREATE(!mBgW.Set((cBgD_t *)dzb, (PLC *)plc, 1, &mWorldMtx, &mScale));
|
||||
if (mSubtype == 1) {
|
||||
TRY_CREATE(mPedestalMdl_s.create(mPedRes.GetResMdl("SwordGrd_s"), &heap_allocator, 0x120, 1, nullptr));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
const s16 l_inGroundRot = {0x71C};
|
||||
int dAcOSeatSword_c::create() {
|
||||
mSubtype = getSubtype();
|
||||
if (mSubtype >= 2) {
|
||||
mSubtype = 0;
|
||||
}
|
||||
|
||||
CREATE_ALLOCATOR(dAcOSeatSword_c);
|
||||
|
||||
mStts.SetRank(0xD);
|
||||
mCyl.Set(sCylSrc);
|
||||
mCyl.SetStts(mStts);
|
||||
dBgS::GetInstance()->Regist(&mBgW, this);
|
||||
|
||||
mPedestalMdl.setLocalMtx(mWorldMtx);
|
||||
if (mSubtype == 1) {
|
||||
mPedestalMdl_s.setLocalMtx(mWorldMtx);
|
||||
mPedestalMdl_s.setPriorityDraw(0x22, 0x9);
|
||||
}
|
||||
|
||||
forwardAccel = 0.f;
|
||||
forwardMaxSpeed = -40.f;
|
||||
|
||||
if (mSubtype == 1) {
|
||||
mField_0x7E8 = l_inGroundRot;
|
||||
}
|
||||
updateSwordMdl();
|
||||
mEff.init(this);
|
||||
mPedestalMdl.setPriorityDraw(0x1C, 0x9);
|
||||
|
||||
if (checkPlayerHasSword()) {
|
||||
mStateMgr.changeState(StateID_Get);
|
||||
} else {
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
}
|
||||
|
||||
boundingBox.Set(mVec3_c(-75.f, -10.f, -75.f), mVec3_c(75.f, 200.f, 75.f));
|
||||
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcOSeatSword_c::doDelete() {
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcOSeatSword_c::actorExecute() {
|
||||
mStateMgr.executeState();
|
||||
|
||||
if (mStateMgr.isState(StateID_Wait)) {
|
||||
actorExecuteCommon();
|
||||
mCyl.SetC(position);
|
||||
dCcS::GetInstance()->Set(&mCyl);
|
||||
}
|
||||
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcOSeatSword_c::actorExecuteInEvent() {
|
||||
if (mbNoSword) {
|
||||
sLib::chase(&mField_0x7E4, 255.f, 8.f);
|
||||
}
|
||||
actorExecuteCommon();
|
||||
|
||||
if (mEvent.isThisActorInEvent()) {
|
||||
switch (mEvent.getCurrentEventCommand()) {
|
||||
case 'act0': {
|
||||
mEvent.advanceNext();
|
||||
} break;
|
||||
case 'act1': {
|
||||
dAcPy_c::LINK->getBodyMtx(&mSwordMtx, 0xF /* weaponR*/);
|
||||
mSwordMdl.setLocalMtx(mSwordMtx);
|
||||
mEvent.advanceNext();
|
||||
} break;
|
||||
case 'act2': {
|
||||
mbNoSword = true;
|
||||
dAcPy_c::LINK->getBodyMtx(&mSwordMtx, 0xF /* weaponR*/);
|
||||
mSwordMdl.setLocalMtx(mSwordMtx);
|
||||
mEvent.advanceNext();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
void dAcOSeatSword_c::doInteraction(s32 param0) {
|
||||
if (param0 == 5) {
|
||||
mField_0x7EA = true;
|
||||
Event evt((char *)sEventName, 0x190, 0x100001, nullptr, nullptr);
|
||||
mEvent.scheduleEvent(evt, 0);
|
||||
} else {
|
||||
mField_0x7EA = false;
|
||||
}
|
||||
}
|
||||
|
||||
u32 someAng = 0x8000;
|
||||
void dAcOSeatSword_c::registerInEvent() {
|
||||
static const u32 rodata_stuff = {0};
|
||||
if (mField_0x7EA == 1 && EventManager::isCurrentEvent(sEventName)) {
|
||||
dAcPy_c *player = dAcPy_c::LINK;
|
||||
mVec3_c vec = mVec3_c::Ez * 78.f;
|
||||
mAng3_c ang = rotation;
|
||||
ang.y += someAng;
|
||||
vec.rotY(rotation.y);
|
||||
vec += position;
|
||||
player->setPosRot(vec, ang, 0, 1, 0);
|
||||
mField_0x7E8 = 0;
|
||||
updateSwordMdl();
|
||||
}
|
||||
}
|
||||
|
||||
int dAcOSeatSword_c::draw() {
|
||||
if (!mStateMgr.isState(StateID_Get)) {
|
||||
drawModelType1(&mSwordMdl);
|
||||
}
|
||||
|
||||
drawModelType1(&mPedestalMdl);
|
||||
if (mSubtype == 1) {
|
||||
drawModelType1(&mPedestalMdl_s);
|
||||
}
|
||||
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
void dAcOSeatSword_c::initializeState_Wait() {}
|
||||
void dAcOSeatSword_c::executeState_Wait() {}
|
||||
void dAcOSeatSword_c::executeState_Wait() {
|
||||
AttentionManager::sInstance->addTarget(*this, sInteractionDef, 0, nullptr);
|
||||
|
||||
if (checkPlayerHasSword()) {
|
||||
mbNoSword = true;
|
||||
}
|
||||
if (mbNoSword) {
|
||||
mStateMgr.changeState(StateID_Get);
|
||||
}
|
||||
}
|
||||
void dAcOSeatSword_c::finalizeState_Wait() {}
|
||||
void dAcOSeatSword_c::initializeState_Get() {}
|
||||
|
||||
// Get state to remove any interaction/effect
|
||||
void dAcOSeatSword_c::initializeState_Get() {
|
||||
mEff.remove(true);
|
||||
}
|
||||
void dAcOSeatSword_c::executeState_Get() {}
|
||||
void dAcOSeatSword_c::finalizeState_Get() {}
|
||||
|
||||
extern "C" const u16 PARTICLE_RESOURCE_ID_MAPPING_76_;
|
||||
void dAcOSeatSword_c::actorExecuteCommon() {
|
||||
if (checkPlayerHasSword()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// ??????? this func
|
||||
|
||||
const dAcPy_c *player = dAcPy_c::LINK;
|
||||
|
||||
mEffPos.x = sEffectPos.x;
|
||||
mEffPos.y = sEffectPos.y;
|
||||
mEffPos.z = sEffectPos.z;
|
||||
|
||||
mEffPos.rotY(player->rotation.y);
|
||||
|
||||
mEffPos += player->position;
|
||||
mEffPos.y = position.y;
|
||||
|
||||
mEff.fn_80029A10(PARTICLE_RESOURCE_ID_MAPPING_76_, &mEffPos, &rotation, &mScale, nullptr, nullptr);
|
||||
mEff.fn_80027320(mField_0x7E4);
|
||||
}
|
||||
|
||||
void dAcOSeatSword_c::updateSwordMdl() {
|
||||
updateMatrix();
|
||||
mSwordMtx.copyFrom(mWorldMtx);
|
||||
|
||||
if (mSubtype == 1) {
|
||||
mSwordMtx.XrotM(mField_0x7E8);
|
||||
}
|
||||
|
||||
mMtx_c mtx;
|
||||
// Weird value for y, but ok
|
||||
mtx.transS(0.f, 87.51f, 0.f);
|
||||
|
||||
mSwordMtx += mtx;
|
||||
mSwordMtx.YrotM(0x4000);
|
||||
mSwordMtx.ZrotM(0xC000);
|
||||
mSwordMdl.setLocalMtx(mSwordMtx);
|
||||
}
|
||||
|
||||
bool dAcOSeatSword_c::checkPlayerHasSword() {
|
||||
// the GetFlag needs to be an inline ... (using getCounterOrFlag doesnt work)
|
||||
return (mSubtype == 0 && StoryflagManager::sInstance->getFlag(0x3)) ||
|
||||
(mSubtype == 1 && !StoryflagManager::sInstance->getFlag(0xA7));
|
||||
}
|
||||
|
||||
@@ -594,11 +594,10 @@ void dAcOTowerHandD101_c::executeState_RemainOpen() {
|
||||
void dAcOTowerHandD101_c::finalizeState_RemainOpen() {}
|
||||
|
||||
extern "C" u16 PARTICLE_RESOURCE_ID_MAPPING_573;
|
||||
// extern "C" void fn_80029929()
|
||||
void dAcOTowerHandD101_c::initializeState_Close() {
|
||||
mMdl.getAnm().setPlayState(m3d::PLAY_MODE_1);
|
||||
mMdl.setRate(getCloseRate());
|
||||
mEffects.fn_80029929(PARTICLE_RESOURCE_ID_MAPPING_573, &position, nullptr, nullptr, nullptr, nullptr);
|
||||
mEffects.fn_80029920(PARTICLE_RESOURCE_ID_MAPPING_573, &position, nullptr, nullptr, nullptr, nullptr);
|
||||
playSound(0xC0C);
|
||||
}
|
||||
void dAcOTowerHandD101_c::executeState_Close() {
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
#include "toBeSorted/attention.h"
|
||||
|
||||
extern "C" void fn_800298B0(u16, mVec3_c *, mVec3_c *, u32, u32, u32, u32, u32);
|
||||
extern "C" u16 PARTICLE_RESOURCE_ID_MAPPING_394_;
|
||||
extern "C" const u16 PARTICLE_RESOURCE_ID_MAPPING_394_;
|
||||
|
||||
void dAcOInsect_c::kill() {
|
||||
// Small Ordering issue between loading particle id and position
|
||||
|
||||
Reference in New Issue
Block a user