summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhatal175 <hatal175@users.noreply.github.com>2024-12-28 05:16:59 +0200
committerGitHub <noreply@github.com>2024-12-27 19:16:59 -0800
commitc429ce21eb7cf4687da596c51fbc47249fbe4c13 (patch)
treecefe2fbec93fb91fd9f51ad92611aa5803cdc301
parentad2badcd29f53cb6788455d2e7cf12717453770a (diff)
d_a_obj_cwall almost matching (#2270)
* d_a_obj_cwall almost matching * d_a_obj_pdoor OK
-rw-r--r--config/GZ2E01/rels/d_a_obj_pdoor/symbols.txt20
-rw-r--r--configure.py4
-rw-r--r--include/d/actor/d_a_obj_cwall.h73
-rw-r--r--include/d/actor/d_a_obj_pdoor.h39
-rw-r--r--include/d/actor/d_a_player.h4
-rw-r--r--src/d/actor/d_a_obj_cwall.cpp1619
-rw-r--r--src/d/actor/d_a_obj_pdoor.cpp480
-rw-r--r--src/d/actor/d_a_player.cpp4
8 files changed, 1034 insertions, 1209 deletions
diff --git a/config/GZ2E01/rels/d_a_obj_pdoor/symbols.txt b/config/GZ2E01/rels/d_a_obj_pdoor/symbols.txt
index 289a56311c..00d97fe9b7 100644
--- a/config/GZ2E01/rels/d_a_obj_pdoor/symbols.txt
+++ b/config/GZ2E01/rels/d_a_obj_pdoor/symbols.txt
@@ -1,7 +1,7 @@
_prolog = .text:0x00000000; // type:function size:0x2C scope:global
_epilog = .text:0x0000002C; // type:function size:0x2C scope:global
_unresolved = .text:0x00000058; // type:function size:0x20 scope:global
-PPCallBack__FP10fopAc_ac_cP10fopAc_ac_csQ29dBgW_Base13PushPullLabel = .text:0x00000078; // type:function size:0x104 scope:global
+PPCallBack__FP10fopAc_ac_cP10fopAc_ac_csQ29dBgW_Base13PushPullLabel = .text:0x00000078; // type:function size:0x104 scope:local
initBaseMtx__12daObjPDoor_cFv = .text:0x0000017C; // type:function size:0x3C scope:global
setBaseMtx__12daObjPDoor_cFv = .text:0x000001B8; // type:function size:0x64 scope:global
Create__12daObjPDoor_cFv = .text:0x0000021C; // type:function size:0x110 scope:global
@@ -15,10 +15,10 @@ init_modeRotate__12daObjPDoor_cFv = .text:0x00000878; // type:function size:0x1C
modeRotate__12daObjPDoor_cFv = .text:0x00000894; // type:function size:0x2B4 scope:global
Draw__12daObjPDoor_cFv = .text:0x00000B48; // type:function size:0xA4 scope:global
Delete__12daObjPDoor_cFv = .text:0x00000BEC; // type:function size:0x40 scope:global
-daObjPDoor_create1st__FP12daObjPDoor_c = .text:0x00000C2C; // type:function size:0x60 scope:global
-daObjPDoor_MoveBGDelete__FP12daObjPDoor_c = .text:0x00000C8C; // type:function size:0x20 scope:global
-daObjPDoor_MoveBGExecute__FP12daObjPDoor_c = .text:0x00000CAC; // type:function size:0x20 scope:global
-daObjPDoor_MoveBGDraw__FP12daObjPDoor_c = .text:0x00000CCC; // type:function size:0x2C scope:global
+daObjPDoor_create1st__FP12daObjPDoor_c = .text:0x00000C2C; // type:function size:0x60 scope:local
+daObjPDoor_MoveBGDelete__FP12daObjPDoor_c = .text:0x00000C8C; // type:function size:0x20 scope:local
+daObjPDoor_MoveBGExecute__FP12daObjPDoor_c = .text:0x00000CAC; // type:function size:0x20 scope:local
+daObjPDoor_MoveBGDraw__FP12daObjPDoor_c = .text:0x00000CCC; // type:function size:0x2C scope:local
_ctors = .ctors:0x00000000; // type:label scope:global
_dtors = .dtors:0x00000000; // type:label scope:global
...rodata.0 = .rodata:0x00000000; // type:label scope:local
@@ -31,14 +31,14 @@ _dtors = .dtors:0x00000000; // type:label scope:global
@4054 = .rodata:0x0000001C; // type:object size:0x4 scope:local
@stringBase0 = .rodata:0x00000020; // type:object size:0xA scope:local data:string_table
...data.0 = .data:0x00000000; // type:label scope:local
-cNullVec__6Z2Calc = .data:0x00000000; // type:object size:0xC scope:global
+cNullVec__6Z2Calc = .data:0x00000000; // type:object size:0xC scope:local
@1787 = .data:0x0000000C; // type:object size:0x4 scope:local
-l_arcName = .data:0x00000020; // type:object size:0x4 scope:global data:4byte
-l_cull_box = .data:0x00000024; // type:object size:0x18 scope:global data:float
+l_arcName = .data:0x00000020; // type:object size:0x4 scope:local data:4byte
+l_cull_box = .data:0x00000024; // type:object size:0x18 scope:local data:float
@3781 = .data:0x0000003C; // type:object size:0xC scope:local
@3782 = .data:0x00000048; // type:object size:0xC scope:local
l_func$3780 = .data:0x00000054; // type:object size:0x18 scope:local
-daObjPDoor_METHODS = .data:0x0000006C; // type:object size:0x20 scope:global
+daObjPDoor_METHODS = .data:0x0000006C; // type:object size:0x20 scope:local
g_profile_Obj_PushDoor = .data:0x0000008C; // type:object size:0x30 scope:global
__vt__12daObjPDoor_c = .data:0x000000BC; // type:object size:0x28 scope:global
-lbl_589_bss_0 = .bss:0x00000000; // type:object size:0x1 data:byte
+lbl_589_bss_0 = .bss:0x00000000; // type:object size:0x1 scope:local data:byte
diff --git a/configure.py b/configure.py
index 5ad027c576..8ccbe2ae26 100644
--- a/configure.py
+++ b/configure.py
@@ -1798,7 +1798,7 @@ config.libs = [
ActorRel(NonMatching, "d_a_obj_crvlh_up"),
ActorRel(Matching, "d_a_obj_crvsteel"),
ActorRel(Matching, "d_a_obj_crystal"),
- ActorRel(NonMatching, "d_a_obj_cwall"),
+ ActorRel(Equivalent, "d_a_obj_cwall"),
ActorRel(Matching, "d_a_obj_damCps"),
ActorRel(Matching, "d_a_obj_dan"),
ActorRel(Matching, "d_a_obj_digholl"),
@@ -1954,7 +1954,7 @@ config.libs = [
ActorRel(Matching, "d_a_obj_onsen"),
ActorRel(Matching, "d_a_obj_onsenFire"),
ActorRel(Matching, "d_a_obj_onsenTaru"),
- ActorRel(NonMatching, "d_a_obj_pdoor"),
+ ActorRel(Matching, "d_a_obj_pdoor"),
ActorRel(Matching, "d_a_obj_pdtile"),
ActorRel(NonMatching, "d_a_obj_pdwall"),
ActorRel(NonMatching, "d_a_obj_picture"),
diff --git a/include/d/actor/d_a_obj_cwall.h b/include/d/actor/d_a_obj_cwall.h
index 211775286f..5867f80d3d 100644
--- a/include/d/actor/d_a_obj_cwall.h
+++ b/include/d/actor/d_a_obj_cwall.h
@@ -1,6 +1,8 @@
#ifndef D_A_OBJ_CWALL_H
#define D_A_OBJ_CWALL_H
+#include "d/d_bg_s_movebg_actor.h"
+#include "d/d_cc_d.h"
#include "f_op/f_op_actor_mng.h"
/**
@@ -11,21 +13,30 @@
* @details
*
*/
-class daObjCwall_c : public fopAc_ac_c {
+class daObjCwall_c : public dBgS_MoveBgActor {
public:
struct chain_s {
public:
/* 80BD6E94 */ ~chain_s();
/* 80BD6ED0 */ chain_s();
+
+ J3DModel* mModel;
+ cXyz mPos;
+ };
+
+ enum Type {
+ TYPE_0,
+ TYPE_1,
};
+ typedef void (daObjCwall_c::*modeFunc)();
/* 80BD6A4C */ void initBaseMtx();
/* 80BD6A88 */ void setBaseMtx();
- /* 80BD6AEC */ void Create();
- /* 80BD6D08 */ void CreateHeap();
- /* 80BD6ED4 */ void create1st();
- /* 80BD6F80 */ void Execute(f32 (**)[3][4]);
+ /* 80BD6AEC */ int Create();
+ /* 80BD6D08 */ int CreateHeap();
+ /* 80BD6ED4 */ int create1st();
+ /* 80BD6F80 */ int Execute(Mtx**);
/* 80BD7288 */ void setTension();
/* 80BD7718 */ void calcSePos();
/* 80BD7788 */ void getChainBasePos(cXyz*);
@@ -40,14 +51,54 @@ public:
/* 80BD8BC8 */ void initClose();
/* 80BD8BF0 */ void modeClose();
/* 80BD935C */ void setPower(f32, s16*);
- /* 80BD9414 */ void checkWall();
- /* 80BD95A0 */ void checkPullNow();
- /* 80BD977C */ void checkPull();
- /* 80BD9848 */ void Draw();
- /* 80BD9948 */ void Delete();
+ /* 80BD9414 */ BOOL checkWall();
+ /* 80BD95A0 */ BOOL checkPullNow();
+ /* 80BD977C */ BOOL checkPull();
+ /* 80BD9848 */ int Draw();
+ /* 80BD9948 */ int Delete();
+
+ u8 getArg0() { return fopAcM_GetParamBit(this, 0, 4); }
+ u8 getType() { return fopAcM_GetParamBit(this, 4, 4); }
+ u8 getSwbit() { return fopAcM_GetParamBit(this, 8, 8); }
private:
- /* 0x568 */ u8 field_0x568[0xf5c - 0x568];
+ /* 0x5A0 */ request_of_phase_process_class mPhase;
+ /* 0x5A8 */ J3DModel* mWallModel;
+ /* 0x5AC */ dCcD_Stts mStts;
+ /* 0x5E8 */ dCcD_Cyl mCyl;
+ /* 0x724 */ dCcD_Sph mSph;
+ /* 0x85C */ dCcD_Cyl mCyls[4];
+ /* 0xD4C */ dCcD_Cyl mCyl2;
+ /* 0xE88 */ J3DModel* mHandleModel;
+ /* 0xE8C */ chain_s* mChains;
+ /* 0xE90 */ u8 field_0xe90;
+ /* 0xE91 */ u8 field_0xe91;
+ /* 0xE92 */ u8 field_0xe92;
+ /* 0xE93 */ u8 field_0xe93;
+ /* 0xE94 */ cXyz field_0xe94[7];
+ /* 0xEE8*/ f32 field_0xee8[7];
+ /* 0xF04 */ u8 field_0xf04[7];
+ /* 0xF0B */ u8 field_0xf0b;
+ /* 0xF0C */ u8 field_0xf0c;
+ /* 0xF0D */ u8 field_0xf0d;
+ /* 0xF0E */ u8 field_0xf0e;
+ /* 0xF0F */ u8 field_0xf0f;
+ /* 0xF10 */ u8 field_0xf10;
+ /* 0xF11 */ u8 mType;
+ /* 0xF12 */ u8 field_0xf12;
+ /* 0xF14 */ s16 field_0xf14;
+ /* 0xF16 */ s16 field_0xf16;
+ /* 0xF18 */ s16 field_0xf18;
+ /* 0xF1A */ s16 field_0xf1a;
+ /* 0xF1C */ s16 field_0xf1c;
+ /* 0xF20 */ cXyz field_0xf20;
+ /* 0xF2C */ cXyz field_0xf2c;
+ /* 0xF38 */ cXyz field_0xf38;
+ /* 0xF44 */ cXyz field_0xf44;
+ /* 0xF50 */ f32 field_0xf50;
+ /* 0xF54 */ f32 field_0xf54;
+ /* 0xF58 */ u8 field_0xf58;
+ /* 0xF58 */ u8 field_0xf59;
};
STATIC_ASSERT(sizeof(daObjCwall_c) == 0xf5c);
diff --git a/include/d/actor/d_a_obj_pdoor.h b/include/d/actor/d_a_obj_pdoor.h
index feec7aed90..d7fa7813c5 100644
--- a/include/d/actor/d_a_obj_pdoor.h
+++ b/include/d/actor/d_a_obj_pdoor.h
@@ -1,6 +1,7 @@
#ifndef D_A_OBJ_PDOOR_H
#define D_A_OBJ_PDOOR_H
+#include "d/d_bg_s_movebg_actor.h"
#include "f_op/f_op_actor_mng.h"
/**
@@ -11,24 +12,44 @@
* @details
*
*/
-class daObjPDoor_c : public fopAc_ac_c {
+class daObjPDoor_c : public dBgS_MoveBgActor {
public:
+ typedef void (daObjPDoor_c::*modeFunc)();
+
+ enum Mode {
+ MODE_WAIT,
+ MODE_ROTATE,
+ };
+
/* 80CA9F9C */ void initBaseMtx();
/* 80CA9FD8 */ void setBaseMtx();
- /* 80CAA03C */ void Create();
- /* 80CAA14C */ void CreateHeap();
- /* 80CAA1BC */ void create1st();
- /* 80CAA23C */ void Execute(f32 (**)[3][4]);
+ /* 80CAA03C */ int Create();
+ /* 80CAA14C */ int CreateHeap();
+ /* 80CAA1BC */ int create1st();
+ /* 80CAA23C */ int Execute(Mtx**);
/* 80CAA290 */ void mode_proc_call();
/* 80CAA31C */ void init_modeWait();
/* 80CAA354 */ void modeWait();
/* 80CAA698 */ void init_modeRotate();
/* 80CAA6B4 */ void modeRotate();
- /* 80CAA968 */ void Draw();
- /* 80CAAA0C */ void Delete();
+ /* 80CAA968 */ int Draw();
+ /* 80CAAA0C */ int Delete();
+
+ u8 getSwbit() { return fopAcM_GetParamBit(this, 0, 8); }
+ u8 getSwbit2() { return fopAcM_GetParamBit(this, 8, 8); }
-private:
- /* 0x568 */ u8 field_0x568[0x5c4 - 0x568];
+ /* 0x5A0 */ request_of_phase_process_class mPhase;
+ /* 0x5A8 */ J3DModel* mModel;
+ /* 0x5AC */ s8 mDoorDirection;
+ /* 0x5AD */ u8 mMode;
+ /* 0x5B0 */ int field_0x5b0;
+ /* 0x5B4 */ u8 field_0x5b4;
+ /* 0x5B5 */ u8 field_0x5b5;
+ /* 0x5B6 */ u8 field_0x5b6[2];
+ /* 0x5B8 */ s16 field_0x5b8;
+ /* 0x5BA */ s16 field_0x5ba;
+ /* 0x5BC */ s16 field_0x5bc;
+ /* 0x5C0 */ dBgW_Base::PushPullLabel mPushPullLabel;
};
STATIC_ASSERT(sizeof(daObjPDoor_c) == 0x5c4);
diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h
index d044673891..1a8a8814b2 100644
--- a/include/d/actor/d_a_player.h
+++ b/include/d/actor/d_a_player.h
@@ -670,7 +670,7 @@ public:
static f32 getAttentionOffsetY();
static int checkNowWolfEyeUp();
static void forceRestartRoom(int, u32, int);
- static void setFmChainPos(fopAc_ac_c*, cXyz*, int);
+ static BOOL setFmChainPos(fopAc_ac_c*, cXyz*, int);
static void cancelFmChainGrab();
static void setLookPos(cXyz*);
static void setPlayerSe(u32);
@@ -698,7 +698,7 @@ public:
cXyz* getLeftFootPosP() { return &mLeftFootPos; }
BOOL checkCopyRodThrowAfter() const { return checkNoResetFlg3(FLG3_COPY_ROD_THROW_AFTER); }
BOOL checkRide() const { return checkHorseRide() || checkBoarRide() || checkSpinnerRide() || checkCanoeRide() || checkBoardRide(); }
- const cXyz& getRightHandPos() const { return mRightHandPos; }
+ cXyz getRightHandPos() const { return mRightHandPos; }
const cXyz getLeftHandPos() const { return mLeftHandPos; }
const cXyz getItemPos() const { return mItemPos; }
diff --git a/src/d/actor/d_a_obj_cwall.cpp b/src/d/actor/d_a_obj_cwall.cpp
index 26dec0b3f8..9461358a26 100644
--- a/src/d/actor/d_a_obj_cwall.cpp
+++ b/src/d/actor/d_a_obj_cwall.cpp
@@ -4,306 +4,103 @@
*/
#include "d/actor/d_a_obj_cwall.h"
+#include "SSystem/SComponent/c_math.h"
+#include "SSystem/SComponent/c_lib.h"
+#include "d/actor/d_a_player.h"
+#include "Z2AudioLib/Z2Instances.h"
#include "d/d_cc_d.h"
-#include "dol2asm.h"
-
-
-//
-// Forward References:
-//
-
-extern "C" void initBaseMtx__12daObjCwall_cFv();
-extern "C" void setBaseMtx__12daObjCwall_cFv();
-extern "C" void Create__12daObjCwall_cFv();
-extern "C" void __dt__4cXyzFv();
-extern "C" void CreateHeap__12daObjCwall_cFv();
-extern "C" void __dt__Q212daObjCwall_c7chain_sFv();
-extern "C" void __ct__Q212daObjCwall_c7chain_sFv();
-extern "C" void create1st__12daObjCwall_cFv();
-extern "C" void Execute__12daObjCwall_cFPPA3_A4_f();
-extern "C" void setTension__12daObjCwall_cFv();
-extern "C" void calcSePos__12daObjCwall_cFv();
-extern "C" void getChainBasePos__12daObjCwall_cFP4cXyz();
-extern "C" void setChainMtx__12daObjCwall_cFv();
-extern "C" void chain_control__12daObjCwall_cFv();
-extern "C" void chain_control2__12daObjCwall_cFv();
-extern "C" void block_mode_proc_call__12daObjCwall_cFv();
-extern "C" void initWait__12daObjCwall_cFv();
-extern "C" void modeWait__12daObjCwall_cFv();
-extern "C" void initWalk__12daObjCwall_cFv();
-extern "C" void modeWalk__12daObjCwall_cFv();
-extern "C" void initClose__12daObjCwall_cFv();
-extern "C" void modeClose__12daObjCwall_cFv();
-extern "C" void setPower__12daObjCwall_cFfPs();
-extern "C" void checkWall__12daObjCwall_cFv();
-extern "C" void checkPullNow__12daObjCwall_cFv();
-extern "C" void checkPull__12daObjCwall_cFv();
-extern "C" void Draw__12daObjCwall_cFv();
-extern "C" void Delete__12daObjCwall_cFv();
-extern "C" static void daObjCwall_create1st__FP12daObjCwall_c();
-extern "C" void __ct__4cXyzFv();
-extern "C" void __ct__8dCcD_CylFv();
-extern "C" void __dt__8cM3dGSphFv();
-extern "C" void __dt__8dCcD_CylFv();
-extern "C" void __dt__8cM3dGCylFv();
-extern "C" void __dt__8cM3dGAabFv();
-extern "C" void __dt__10dCcD_GSttsFv();
-extern "C" static void daObjCwall_MoveBGDelete__FP12daObjCwall_c();
-extern "C" static void daObjCwall_MoveBGExecute__FP12daObjCwall_c();
-extern "C" static void daObjCwall_MoveBGDraw__FP12daObjCwall_c();
-extern "C" void __dt__10cCcD_GSttsFv();
-extern "C" void func_80BD9EAC(void* _this, s16*);
-extern "C" void func_80BD9EC8(void* _this, u8*);
-extern "C" void __sinit_d_a_obj_cwall_cpp();
-extern "C" void getRightHandPos__9daPy_py_cCFv();
-extern "C" extern char const* const d_a_obj_cwall__stringBase0;
-
-//
-// External References:
-//
-
-extern "C" void mDoMtx_ZXYrotM__FPA4_fsss();
-extern "C" void mDoMtx_XrotM__FPA4_fs();
-extern "C" void mDoMtx_YrotS__FPA4_fs();
-extern "C" void mDoMtx_YrotM__FPA4_fs();
-extern "C" void mDoMtx_ZrotM__FPA4_fs();
-extern "C" void transS__14mDoMtx_stack_cFRC4cXyz();
-extern "C" void mDoExt_modelUpdateDL__FP8J3DModel();
-extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl();
-extern "C" void fopAcM_setCullSizeBox__FP10fopAc_ac_cffffff();
-extern "C" void lineCheck__11fopAcM_lc_cFPC4cXyzPC4cXyzPC10fopAc_ac_c();
-extern "C" void gndCheck__11fopAcM_gc_cFPC4cXyz();
-extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc();
-extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc();
-extern "C" void onSwitch__10dSv_info_cFii();
-extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci();
-extern "C" void StartShock__12dVibration_cFii4cXyz();
-extern "C" void __ct__16dBgS_MoveBgActorFv();
-extern "C" bool IsDelete__16dBgS_MoveBgActorFv();
-extern "C" bool ToFore__16dBgS_MoveBgActorFv();
-extern "C" bool ToBack__16dBgS_MoveBgActorFv();
-extern "C" void
-MoveBGCreate__16dBgS_MoveBgActorFPCciPFP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz_vUlPA3_A4_f();
-extern "C" void MoveBGDelete__16dBgS_MoveBgActorFv();
-extern "C" void MoveBGExecute__16dBgS_MoveBgActorFv();
-extern "C" void __ct__10dCcD_GSttsFv();
-extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c();
-extern "C" void __ct__12dCcD_GObjInfFv();
-extern "C" void __dt__12dCcD_GObjInfFv();
-extern "C" void Set__8dCcD_CylFRC11dCcD_SrcCyl();
-extern "C" void Set__8dCcD_SphFRC11dCcD_SrcSph();
-extern "C" void setFmChainPos__9daPy_py_cFP10fopAc_ac_cP4cXyzi();
-extern "C" void setPlayerSe__9daPy_py_cFUl();
-extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c();
-extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c();
-extern "C" void Set__4cCcSFP8cCcD_Obj();
-extern "C" void __pl__4cXyzCFRC3Vec();
-extern "C" void __mi__4cXyzCFRC3Vec();
-extern "C" void __ml__4cXyzCFf();
-extern "C" void normalizeZP__4cXyzFv();
-extern "C" void atan2sX_Z__4cXyzCFv();
-extern "C" void cM_atan2s__Fff();
-extern "C" void SetC__8cM3dGCylFRC4cXyz();
-extern "C" void SetC__8cM3dGSphFRC4cXyz();
-extern "C" void cLib_addCalcAngleS2__FPssss();
-extern "C" void cLib_chasePos__FP4cXyzRC4cXyzf();
-extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc();
-extern "C" void seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc();
-extern "C" void* __nwa__FUl();
-extern "C" void __dl__FPv();
-extern "C" void __construct_array();
-extern "C" void __construct_new_array();
-extern "C" void __ptmf_scall();
-extern "C" void _savegpr_22();
-extern "C" void _savegpr_25();
-extern "C" void _savegpr_26();
-extern "C" void _savegpr_27();
-extern "C" void _savegpr_28();
-extern "C" void _savegpr_29();
-extern "C" void _restgpr_22();
-extern "C" void _restgpr_25();
-extern "C" void _restgpr_26();
-extern "C" void _restgpr_27();
-extern "C" void _restgpr_28();
-extern "C" void _restgpr_29();
-extern "C" extern void* __vt__8dCcD_Sph[36];
-extern "C" extern void* __vt__8dCcD_Cyl[36];
-extern "C" extern void* __vt__9dCcD_Stts[11];
-extern "C" extern void* __vt__12cCcD_SphAttr[25];
-extern "C" extern void* __vt__12cCcD_CylAttr[25];
-extern "C" extern void* __vt__14cCcD_ShapeAttr[22];
-extern "C" extern void* __vt__9cCcD_Stts[8];
-extern "C" u8 now__14mDoMtx_stack_c[48];
-extern "C" extern u8 g_dComIfG_gameInfo[122384];
-extern "C" f32 Zero__4cXyz[3];
-extern "C" u8 sincosTable___5JMath[65536];
-extern "C" f32 mGroundY__11fopAcM_gc_c;
-extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */];
-extern "C" void __register_global_object();
-
-//
-// Declarations:
-//
+#include "d/d_com_inf_game.h"
+#include "cmath.h"
+
+// NONMATCHING - getRightHandPos is not generated at the end of the TU
/* 80BD6A4C-80BD6A88 0000EC 003C+00 1/1 0/0 0/0 .text initBaseMtx__12daObjCwall_cFv */
void daObjCwall_c::initBaseMtx() {
- // NONMATCHING
+ mWallModel->setBaseScale(scale);
+ setBaseMtx();
}
/* 80BD6A88-80BD6AEC 000128 0064+00 2/2 0/0 0/0 .text setBaseMtx__12daObjCwall_cFv */
void daObjCwall_c::setBaseMtx() {
- // NONMATCHING
+ mDoMtx_stack_c::transS(field_0xf38);
+ mDoMtx_stack_c::YrotM(shape_angle.y);
+ mWallModel->setBaseTRMtx(mDoMtx_stack_c::get());
+ MTXCopy(mDoMtx_stack_c::get(), mBgMtx);
}
-/* ############################################################################################## */
/* 80BD9FA4-80BD9FAC 000000 0008+00 11/11 0/0 0/0 .rodata l_wallBmd */
-SECTION_RODATA static u8 const l_wallBmd[8] = {
- 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05,
+static u32 const l_wallBmd[2] = {
+ 5, 5,
};
-COMPILER_STRIP_GATE(0x80BD9FA4, &l_wallBmd);
/* 80BD9FAC-80BD9FB4 000008 0008+00 0/1 0/0 0/0 .rodata l_chainBmd */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const l_chainBmd[8] = {
- 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04,
+static u32 const l_chainBmd[2] = {
+ 4, 4,
};
-COMPILER_STRIP_GATE(0x80BD9FAC, &l_chainBmd);
-#pragma pop
/* 80BD9FB4-80BD9FBC 000010 0008+00 0/1 0/0 0/0 .rodata l_handleBmd */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const l_handleBmd[8] = {
- 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06,
+static u32 const l_handleBmd[2] = {
+ 6, 6,
};
-COMPILER_STRIP_GATE(0x80BD9FB4, &l_handleBmd);
-#pragma pop
/* 80BD9FBC-80BD9FC4 000018 0008+00 1/1 0/0 0/0 .rodata l_dzb */
-SECTION_RODATA static u8 const l_dzb[8] = {
- 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09,
+static u32 const l_dzb[2] = {
+ 9, 9,
};
-COMPILER_STRIP_GATE(0x80BD9FBC, &l_dzb);
/* 80BD9FC4-80BD9FCC 000020 0008+00 1/1 0/0 0/0 .rodata l_heap_size */
-SECTION_RODATA static u8 const l_heap_size[8] = {
- 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x5F, 0x00,
+static u32 const l_heap_size[2] = {
+ 0x4600, 0x5F00,
};
-COMPILER_STRIP_GATE(0x80BD9FC4, &l_heap_size);
/* 80BD9FCC-80BD9FD8 000028 000C+00 0/1 0/0 0/0 .rodata l_top_co_offset */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const l_top_co_offset[12] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC4, 0x16, 0x00, 0x00,
+static Vec const l_top_co_offset = {
+ 0.0f, 0.0f, -600.0f,
};
-COMPILER_STRIP_GATE(0x80BD9FCC, &l_top_co_offset);
-#pragma pop
/* 80BD9FD8-80BD9FE4 000034 000C+00 0/1 0/0 0/0 .rodata l_check_min */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const l_check_min[12] = {
- 0xC2, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0xA0, 0x00, 0x00,
+static Vec const l_check_min = {
+ -120.0f, 0.0f, -20.0f,
};
-COMPILER_STRIP_GATE(0x80BD9FD8, &l_check_min);
-#pragma pop
/* 80BD9FE4-80BD9FF0 000040 000C+00 0/1 0/0 0/0 .rodata l_check_max */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const l_check_max[12] = {
- 0x42, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xA0, 0x00, 0x00,
+static Vec const l_check_max = {
+ 120.0f, 0.0f, 80.0f,
};
-COMPILER_STRIP_GATE(0x80BD9FE4, &l_check_max);
-#pragma pop
/* 80BD9FF0-80BD9FFC 00004C 000C+00 0/1 0/0 0/0 .rodata l_check_min_wolf */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const l_check_min_wolf[12] = {
- 0xC2, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x48, 0x00, 0x00,
+static Vec const l_check_min_wolf = {
+ -120.0f, 0.0f, 50.0f,
};
-COMPILER_STRIP_GATE(0x80BD9FF0, &l_check_min_wolf);
-#pragma pop
/* 80BD9FFC-80BDA008 000058 000C+00 0/1 0/0 0/0 .rodata l_check_max_wolf */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const l_check_max_wolf[12] = {
- 0x42, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x20, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80BD9FFC, &l_check_max_wolf);
-#pragma pop
-
-/* 80BDA008-80BDA00C 000064 0004+00 7/17 0/0 0/0 .rodata @3829 */
-SECTION_RODATA static u8 const lit_3829[4] = {
- 0x00,
- 0x00,
- 0x00,
- 0x00,
+static Vec const l_check_max_wolf = {
+ 120.0f, 0.0f, 160.0f,
};
-COMPILER_STRIP_GATE(0x80BDA008, &lit_3829);
-/* 80BDA00C-80BDA014 000068 0004+04 1/1 0/0 0/0 .rodata @3830 */
-SECTION_RODATA static f32 const lit_3830[1 + 1 /* padding */] = {
- 50.0f,
- /* padding */
- 0.0f,
-};
-COMPILER_STRIP_GATE(0x80BDA00C, &lit_3830);
-
-/* 80BDA0AC-80BDA0AC 000108 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_80BDA0AC = "P_Cwall";
-SECTION_DEAD static char const* const stringBase_80BDA0B4 = "P_L4Cwall";
-#pragma pop
-
-/* 80BDA0C0-80BDA0CC 000000 000C+00 2/2 0/0 0/0 .data cNullVec__6Z2Calc */
-SECTION_DATA static u8 cNullVec__6Z2Calc[12] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-
-/* 80BDA0CC-80BDA0E0 00000C 0004+10 0/0 0/0 0/0 .data @1787 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static u32 lit_1787[1 + 4 /* padding */] = {
- 0x02000201,
- /* padding */
- 0x40080000,
- 0x00000000,
- 0x3FE00000,
- 0x00000000,
-};
-#pragma pop
+UNK_REL_DATA
/* 80BDA0E0-80BDA0E8 -00001 0008+00 3/3 0/0 0/0 .data l_arcName */
-SECTION_DATA static void* l_arcName[2] = {
- (void*)&d_a_obj_cwall__stringBase0,
- (void*)(((char*)&d_a_obj_cwall__stringBase0) + 0x8),
+static char* l_arcName[2] = {
+ "P_Cwall",
+ "P_L4Cwall",
};
/* 80BDA0E8-80BDA100 000028 0018+00 0/1 0/0 0/0 .data l_cull_box */
-#pragma push
-#pragma force_active on
-SECTION_DATA static u8 l_cull_box[24] = {
- 0xC3, 0x96, 0x00, 0x00, 0xC2, 0xC8, 0x00, 0x00, 0xC4, 0x22, 0x80, 0x00,
- 0x43, 0x96, 0x00, 0x00, 0x43, 0xFA, 0x00, 0x00, 0x43, 0x96, 0x00, 0x00,
+static Vec l_cull_box[2] = {
+ {-300.0f, -100.0f, -650.0f},
+ {300.0f, 500.0f, 300.0f},
};
-#pragma pop
/* 80BDA100-80BDA130 000040 0030+00 1/1 0/0 0/0 .data l_side_co_offset */
-SECTION_DATA static u8 l_side_co_offset[48] = {
- 0xC3, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0xF0, 0x00, 0x00, 0xC3, 0x07, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xC1, 0xF0, 0x00, 0x00, 0x43, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xC1, 0xF0, 0x00, 0x00, 0x43, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0xF0, 0x00, 0x00,
+static Vec l_side_co_offset[4] = {
+ {-255.0f, 0.0f, -30.0f},
+ {-135.0f, 0.0f, -30.0f},
+ {135.0f, 0.0f, -30.0f},
+ {255.0f, 0.0f, -30.0f},
};
/* 80BDA130-80BDA174 000070 0044+00 0/1 0/0 0/0 .data l_cyl_src */
-#pragma push
-#pragma force_active on
static dCcD_SrcCyl l_cyl_src = {
{
{0x0, {{0x0, 0x0, 0x0}, {0x0, 0x0}, 0x79}}, // mObj
@@ -317,11 +114,8 @@ static dCcD_SrcCyl l_cyl_src = {
450.0f // mHeight
} // mCyl
};
-#pragma pop
/* 80BDA174-80BDA1B8 0000B4 0044+00 0/1 0/0 0/0 .data l_cyl_src2 */
-#pragma push
-#pragma force_active on
static dCcD_SrcCyl l_cyl_src2 = {
{
{0x0, {{0x0, 0x0, 0x0}, {0x0, 0x0}, 0x19}}, // mObj
@@ -335,11 +129,8 @@ static dCcD_SrcCyl l_cyl_src2 = {
300.0f // mHeight
} // mCyl
};
-#pragma pop
/* 80BDA1B8-80BDA1F8 0000F8 0040+00 0/1 0/0 0/0 .data l_sph_src */
-#pragma push
-#pragma force_active on
static dCcD_SrcSph l_sph_src = {
{
{0x0, {{0x0, 0x0, 0x0}, {0x4000, 0x11}, 0x58}}, // mObj
@@ -351,107 +142,208 @@ static dCcD_SrcSph l_sph_src = {
{{0.0f, 0.0f, 0.0f}, 50.0f} // mSph
} // mSphAttr
};
-#pragma pop
/* 80BD6AEC-80BD6CCC 00018C 01E0+00 1/0 0/0 0/0 .text Create__12daObjCwall_cFv */
-void daObjCwall_c::Create() {
- // NONMATCHING
-}
-
-/* 80BD6CCC-80BD6D08 00036C 003C+00 2/2 0/0 0/0 .text __dt__4cXyzFv */
-// cXyz::~cXyz() {
-extern "C" void __dt__4cXyzFv() {
- // NONMATCHING
+int daObjCwall_c::Create() {
+ field_0xf38 = current.pos;
+ field_0xf0c = getArg0();
+ initBaseMtx();
+ fopAcM_SetMtx(this, mWallModel->getBaseTRMtx());
+ mStts.Init(0xff, 0xff, this);
+ mCyl.Set(l_cyl_src);
+ mCyl.SetStts(&mStts);
+ for (int i = 0; i < 4; i++) {
+ mCyls[i].Set(l_cyl_src2);
+ mCyls[i].SetStts(&mStts);
+ }
+ mCyl2.Set(l_cyl_src2);
+ mCyl2.SetStts(&mStts);
+ mSph.Set(l_sph_src);
+ mSph.SetStts(&mStts);
+ fopAcM_setCullSizeBox(this, l_cull_box[0].x, l_cull_box[0].y, l_cull_box[0].z, l_cull_box[1].x,
+ l_cull_box[1].y, l_cull_box[1].z);
+ cXyz cStack_30(0.0f, 0.0f, 50.0f);
+ mDoMtx_stack_c::YrotS(current.angle.y);
+ mDoMtx_stack_c::multVec(&cStack_30, &cStack_30);
+ chain_s* pChain = mChains;
+ cXyz* pPos = field_0xe94;
+ getChainBasePos(&pChain->mPos);
+ cXyz cStack_3c(pChain->mPos);
+ for (int i = 0; i < 7; i++, pPos++) {
+ *pPos = cStack_3c + cStack_30;
+ cStack_3c = *pPos;
+ }
+ calcSePos();
+ MoveBGExecute();
+ return 1;
}
/* 80BD6D08-80BD6E94 0003A8 018C+00 1/0 0/0 0/0 .text CreateHeap__12daObjCwall_cFv */
-void daObjCwall_c::CreateHeap() {
- // NONMATCHING
+int daObjCwall_c::CreateHeap() {
+ J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName[mType], l_wallBmd[mType]);
+ JUT_ASSERT(573, modelData != 0);
+ mWallModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084);
+ if (mWallModel == NULL) {
+ return 0;
+ }
+ mChains = new chain_s[6];
+ if (mChains == NULL) {
+ return 0;
+ }
+ modelData =
+ (J3DModelData*)dComIfG_getObjectRes(l_arcName[mType], l_chainBmd[mType]);
+ JUT_ASSERT(592, modelData != 0);
+ chain_s* pChain = mChains;
+ for (int i = 0; i < 6; i++, pChain++) {
+ pChain->mModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084);
+ if (pChain->mModel == NULL) {
+ return 0;
+ }
+ }
+ modelData =
+ (J3DModelData*)dComIfG_getObjectRes(l_arcName[mType], l_handleBmd[mType]);
+ JUT_ASSERT(609, modelData != 0);
+ mHandleModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084);
+ if (mHandleModel == NULL) {
+ return 0;
+ }
+ return 1;
}
/* 80BD6E94-80BD6ED0 000534 003C+00 1/1 0/0 0/0 .text __dt__Q212daObjCwall_c7chain_sFv */
daObjCwall_c::chain_s::~chain_s() {
- // NONMATCHING
}
/* 80BD6ED0-80BD6ED4 000570 0004+00 1/1 0/0 0/0 .text __ct__Q212daObjCwall_c7chain_sFv */
daObjCwall_c::chain_s::chain_s() {
- /* empty function */
}
/* 80BD6ED4-80BD6F80 000574 00AC+00 1/1 0/0 0/0 .text create1st__12daObjCwall_cFv */
-void daObjCwall_c::create1st() {
- // NONMATCHING
+int daObjCwall_c::create1st() {
+ mType = getType();
+ int rv = dComIfG_resLoad(&mPhase, l_arcName[mType]);
+ if (rv == cPhs_COMPLEATE_e) {
+ rv = MoveBGCreate(l_arcName[mType], l_dzb[mType], NULL, l_heap_size[mType], NULL);
+ if (rv == cPhs_ERROR_e) {
+ return rv;
+ }
+ }
+ return rv;
}
/* 80BD6F80-80BD7288 000620 0308+00 1/0 0/0 0/0 .text Execute__12daObjCwall_cFPPA3_A4_f
*/
-void daObjCwall_c::Execute(f32 (**param_0)[3][4]) {
- // NONMATCHING
+int daObjCwall_c::Execute(Mtx** param_1) {
+ field_0xf44 = field_0xf38;
+ field_0xf54 = field_0xf50;
+ chain_control();
+ chain_s* pChain = mChains;
+ if (daPy_py_c::setFmChainPos(this, &mChains[5].mPos, field_0xf0c)) {
+ field_0xe90 = 1;
+ eyePos = home.pos;
+ } else {
+ field_0xe90 = 0;
+ eyePos = mChains[5].mPos;
+ if (fopAcM_checkHookCarryNow(this)) {
+ field_0xf58 = 1;
+ } else {
+ field_0xf58 = 0;
+ current.pos = eyePos;
+ }
+ }
+ if ((field_0xe93 == 0 && field_0xe90 != 0) || (field_0xe93 != 0 && field_0xe90 == 0)) {
+ daPy_py_c::setPlayerSe(Z2SE_AL_GRAB_CHAIN);
+ }
+ chain_control2();
+ if (field_0xe91 != 0) {
+ field_0xf1c = 1000;
+ } else {
+ field_0xf1c = 7000;
+ }
+ setTension();
+ block_mode_proc_call();
+ setChainMtx();
+ if (field_0xe90 != 0) {
+ for (int i = 0; i < 4; i++) {
+ cXyz acStack_30(l_side_co_offset[i]);
+ mDoMtx_stack_c::transS(field_0xf38);
+ mDoMtx_stack_c::YrotM(home.angle.y);
+ mDoMtx_stack_c::multVec(&acStack_30, &acStack_30);
+ mCyls[i].SetC(acStack_30);
+ dComIfG_Ccsp()->Set(&mCyls[i]);
+ }
+ }
+ cXyz cStack_3c(cXyz::Zero);
+ mDoMtx_stack_c::transS(field_0xf38);
+ mDoMtx_stack_c::YrotM(home.angle.y);
+ mDoMtx_stack_c::multVec(&cStack_3c, &cStack_3c);
+ mCyl2.SetC(cStack_3c);
+ dComIfG_Ccsp()->Set(&mCyl2);
+ *param_1 = &mBgMtx;
+ setBaseMtx();
+ calcSePos();
+ field_0xe93 = field_0xe90;
+ cXyz cStack_48 = daPy_getPlayerActorClass()->current.pos - current.pos;
+ s16 angleDiff = cStack_48.atan2sX_Z() - shape_angle.y;
+ if (abs(angleDiff) < 0x2000) {
+ mSph.SetC(pChain[5].mPos);
+ dComIfG_Ccsp()->Set(&mSph);
+ }
+ return 1;
}
-/* ############################################################################################## */
-/* 80BDA014-80BDA01C 000070 0008+00 0/6 0/0 0/0 .rodata @4114 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const lit_4114[8] = {
- 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80BDA014, &lit_4114);
-#pragma pop
-
-/* 80BDA01C-80BDA024 000078 0008+00 0/6 0/0 0/0 .rodata @4115 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const lit_4115[8] = {
- 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80BDA01C, &lit_4115);
-#pragma pop
-
-/* 80BDA024-80BDA02C 000080 0008+00 0/6 0/0 0/0 .rodata @4116 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const lit_4116[8] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80BDA024, &lit_4116);
-#pragma pop
-
-/* 80BDA02C-80BDA030 000088 0004+00 0/1 0/0 0/0 .rodata @4117 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4117 = 338.0f;
-COMPILER_STRIP_GATE(0x80BDA02C, &lit_4117);
-#pragma pop
-
-/* 80BDA030-80BDA034 00008C 0004+00 0/1 0/0 0/0 .rodata @4118 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4118 = 208.0f;
-COMPILER_STRIP_GATE(0x80BDA030, &lit_4118);
-#pragma pop
-
-/* 80BDA034-80BDA038 000090 0004+00 0/1 0/0 0/0 .rodata @4119 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4119 = 168.0f;
-COMPILER_STRIP_GATE(0x80BDA034, &lit_4119);
-#pragma pop
-
/* 80BD7288-80BD7718 000928 0490+00 1/1 0/0 0/0 .text setTension__12daObjCwall_cFv */
void daObjCwall_c::setTension() {
- // NONMATCHING
+ daPy_py_c* player = daPy_getPlayerActorClass();
+ f32 dVar9 = field_0xf54;
+ field_0xe91 = 0;
+ if (field_0xe90 == 0) {
+ field_0xf50 = 0;
+ }
+ cXyz acStack_80;
+ cXyz cStack_8c;
+ getChainBasePos(&acStack_80);
+ cStack_8c = field_0xe94[6];
+ f32 dVar7 = cStack_8c.abs(acStack_80);
+ f32 dVar10 = 188.0f;
+ if (field_0xf58 != 0) {
+ if (current.pos.abs(acStack_80) > dVar10 + 150.0f) {
+ fopAcM_cancelHookCarryNow(this);
+ }
+ } else {
+ if (field_0xe90 != 0) {
+ daPy_getPlayerActorClass()->checkBootsOrArmorHeavy();
+ if ((dVar9 == 0.0f && dVar7 > dVar10 + 20.0f) ||
+ (dVar9 != 0.0f && dVar7 > dVar10 - 20.0f))
+ {
+ field_0xe91 = 1;
+ if (checkPull()) {
+ cXyz local_98;
+ local_98.x = player->getSpeedF() * cM_ssin(player->current.angle.y);
+ local_98.z = player->getSpeedF() * cM_scos(player->current.angle.y);
+ field_0xf50 = local_98.absXZ();
+ } else {
+ field_0xf50 = 0.0f;
+ }
+ } else {
+ field_0xf50 = 0.0f;
+ field_0xe91 = 0;
+ }
+ if (dVar7 > dVar10 - 20.0f) {
+ field_0xf12 = 0;
+ } else {
+ field_0xf12 = 1;
+ }
+ }
+ }
}
-/* ############################################################################################## */
-/* 80BDA038-80BDA03C 000094 0004+00 1/1 0/0 0/0 .rodata @4130 */
-SECTION_RODATA static f32 const lit_4130 = 300.0f;
-COMPILER_STRIP_GATE(0x80BDA038, &lit_4130);
-
/* 80BD7718-80BD7788 000DB8 0070+00 2/2 0/0 0/0 .text calcSePos__12daObjCwall_cFv */
void daObjCwall_c::calcSePos() {
- // NONMATCHING
+ field_0xf2c.set(0.0f, 0.0f, 300.0f);
+ mDoMtx_stack_c::transS(field_0xf38);
+ mDoMtx_stack_c::YrotM(shape_angle.y);
+ mDoMtx_stack_c::multVec(&field_0xf2c, &field_0xf2c);
}
/* ############################################################################################## */
@@ -548,337 +440,542 @@ static u8 lit_1010[1 + 3 /* padding */];
static u8 lit_1009[1 + 3 /* padding */];
#pragma pop
-/* 80BDA340-80BDA34C 000048 000C+00 0/1 0/0 0/0 .bss @3759 */
-#pragma push
-#pragma force_active on
-static u8 lit_3759[12];
-#pragma pop
-
/* 80BDA34C-80BDA358 000054 000C+00 1/2 0/0 0/0 .bss l_chainOffset */
-static u8 l_chainOffset[12];
+static cXyz l_chainOffset(0.0f, 105.0f, 30.0f);
/* 80BD7788-80BD7804 000E28 007C+00 5/5 0/0 0/0 .text getChainBasePos__12daObjCwall_cFP4cXyz */
-void daObjCwall_c::getChainBasePos(cXyz* param_0) {
- // NONMATCHING
+void daObjCwall_c::getChainBasePos(cXyz* pBasePos) {
+ *pBasePos = l_chainOffset;
+ mDoMtx_stack_c::transS(field_0xf38);
+ mDoMtx_stack_c::YrotM(current.angle.y);
+ mDoMtx_stack_c::multVec(pBasePos, pBasePos);
}
/* 80BD7804-80BD7AD4 000EA4 02D0+00 1/1 0/0 0/0 .text setChainMtx__12daObjCwall_cFv */
void daObjCwall_c::setChainMtx() {
- // NONMATCHING
+ chain_s* pChain = mChains;
+ s16 sVar7 = home.angle.y;
+ if (sVar7 == 0x4000 || sVar7 == 0xc000) {
+ sVar7 += 0x4000;
+ }
+ daPy_py_c* player = daPy_getPlayerActorClass();
+ for (int i = 0; i < 6; pChain++, i++) {
+ cXyz local_34 = field_0xe94[i + 1] - field_0xe94[i];
+ s16 sVar3 = cM_atan2s(local_34.x, local_34.z);
+ if (field_0xe90 != 0 && i == 5) {
+ sVar3 = player->shape_angle.y + 0x7fff;
+ }
+ s16 sVar4 = -cM_atan2s(local_34.y, local_34.absXZ());
+ sVar7 += 0x4000;
+ mDoMtx_stack_c::transS(pChain->mPos);
+ mDoMtx_stack_c::ZXYrotM(sVar4, sVar3, sVar7);
+ if (i == 5) {
+ if (field_0xe90 != 0) {
+ sVar3 = player->shape_angle.y + 0x7fff;
+ mDoMtx_stack_c::transS(field_0xf20);
+ mDoMtx_stack_c::YrotM(sVar3);
+ mDoMtx_stack_c::XrotM(-field_0xf1a);
+ mDoMtx_stack_c::ZrotM(0);
+ }
+ mHandleModel->setBaseTRMtx(mDoMtx_stack_c::get());
+ } else {
+ pChain->mModel->setBaseTRMtx(mDoMtx_stack_c::get());
+ }
+ }
+ cLib_addCalcAngleS2(&field_0xf1a, field_0xf1c, 5, 0x800);
}
-/* ############################################################################################## */
-/* 80BDA03C-80BDA040 000098 0004+00 0/1 0/0 0/0 .rodata @4316 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4316 = -6.0f;
-COMPILER_STRIP_GATE(0x80BDA03C, &lit_4316);
-#pragma pop
-
-/* 80BDA040-80BDA044 00009C 0004+00 0/3 0/0 0/0 .rodata @4317 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4317 = 5.0f;
-COMPILER_STRIP_GATE(0x80BDA040, &lit_4317);
-#pragma pop
-
-/* 80BDA044-80BDA048 0000A0 0004+00 0/1 0/0 0/0 .rodata @4318 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4318 = 1.0f / 10.0f;
-COMPILER_STRIP_GATE(0x80BDA044, &lit_4318);
-#pragma pop
-
-/* 80BDA048-80BDA04C 0000A4 0004+00 0/2 0/0 0/0 .rodata @4319 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4319 = 100.0f;
-COMPILER_STRIP_GATE(0x80BDA048, &lit_4319);
-#pragma pop
-
-/* 80BDA04C-80BDA050 0000A8 0004+00 0/2 0/0 0/0 .rodata @4320 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4320 = 15.0f;
-COMPILER_STRIP_GATE(0x80BDA04C, &lit_4320);
-#pragma pop
-
-/* 80BDA050-80BDA054 0000AC 0004+00 0/2 0/0 0/0 .rodata @4321 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4321 = 38.0f;
-COMPILER_STRIP_GATE(0x80BDA050, &lit_4321);
-#pragma pop
-
-/* 80BDA054-80BDA058 0000B0 0004+00 0/2 0/0 0/0 .rodata @4322 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4322 = 8.0f;
-COMPILER_STRIP_GATE(0x80BDA054, &lit_4322);
-#pragma pop
-
-/* 80BDA058-80BDA05C 0000B4 0004+00 0/3 0/0 0/0 .rodata @4323 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4323 = 0.5f;
-COMPILER_STRIP_GATE(0x80BDA058, &lit_4323);
-#pragma pop
-
/* 80BD7AD4-80BD7ED8 001174 0404+00 1/1 0/0 0/0 .text chain_control__12daObjCwall_cFv */
void daObjCwall_c::chain_control() {
- // NONMATCHING
+ cXyz* nextPos;
+ cXyz* pos;
+ nextPos = field_0xe94;
+ chain_s* pChain = mChains;
+ getChainBasePos(field_0xe94);
+ pos = nextPos;
+ f32 dVar10 = -6.0f;
+ nextPos++;
+ for (int i = 1; i < 7; i = i + 1) {
+ if (field_0xe90 != 0) {
+ if (!daPy_getPlayerActorClass()->checkBootsOrArmorHeavy()) {
+ if (field_0xf50 > 5.0f || field_0xf58 != 0) {
+ dVar10 *= 0.1f;
+ } else {
+ dVar10 = -6.0f;
+ }
+ }
+ }
+ field_0xee8[i] = dVar10;
+ f32 dVar9 = nextPos->y;
+ nextPos->y += field_0xee8[i];
+ cXyz acStack_80(*nextPos);
+ acStack_80.y += 100.0f;
+ field_0xf04[i] = 0;
+ if (fopAcM_gc_c::gndCheck(&acStack_80)) {
+ f32 dVar8 = 15.0f + fopAcM_gc_c::getGroundY();
+ if (dVar8 > nextPos->y) {
+ nextPos->y = dVar8;
+ field_0xee8[i] = 0;
+ field_0xf04[i] = 1;
+ }
+ }
+ if (field_0xf04[i] == 0) {
+ if (field_0xf04[i - 1] != 0) {
+ if (pos->y >= nextPos->y) {
+ nextPos->y = dVar9;
+ }
+ }
+ if (i < 6 && field_0xf04[i + 1] != 0) {
+ if (pChain[1].mPos.y >= nextPos->y) {
+ nextPos->y = dVar9;
+ }
+ }
+ }
+ cXyz cStack_8c = *nextPos - *pos;
+ f32 dVar8 = cStack_8c.abs();
+ cStack_8c.normalizeZP();
+ f32 fVar1 = 38.0f;
+ if (i == 6) {
+ fVar1 = 5.0f;
+ }
+ if (dVar8 <= fVar1 - 8.0f) {
+ dVar8 = fVar1 - 8.0f;
+ }
+ if (dVar8 > fVar1) {
+ dVar8 = fVar1;
+ }
+ cStack_8c = cStack_8c * dVar8;
+ *nextPos = *pos + cStack_8c;
+ pChain->mPos.x = (pos->x + nextPos->x) * 0.5f;
+ pChain->mPos.y = (pos->y + nextPos->y) * 0.5f;
+ pChain->mPos.z = (pos->z + nextPos->z) * 0.5f;
+ pChain++;
+ pos = nextPos;
+ nextPos++;
+ }
}
-/* ############################################################################################## */
-/* 80BDA05C-80BDA060 0000B8 0004+00 0/1 0/0 0/0 .rodata @4486 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4486 = 60.0f;
-COMPILER_STRIP_GATE(0x80BDA05C, &lit_4486);
-#pragma pop
-
-/* 80BDA060-80BDA064 0000BC 0004+00 0/1 0/0 0/0 .rodata @4487 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4487 = -10.0f;
-COMPILER_STRIP_GATE(0x80BDA060, &lit_4487);
-#pragma pop
-
-/* 80BDA064-80BDA068 0000C0 0004+00 0/1 0/0 0/0 .rodata @4488 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4488 = 25.0f;
-COMPILER_STRIP_GATE(0x80BDA064, &lit_4488);
-#pragma pop
-
-/* 80BDA068-80BDA06C 0000C4 0004+00 0/1 0/0 0/0 .rodata @4489 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4489 = 10.0f;
-COMPILER_STRIP_GATE(0x80BDA068, &lit_4489);
-#pragma pop
-
-/* 80BDA06C-80BDA070 0000C8 0004+00 0/2 0/0 0/0 .rodata @4490 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4490 = 188.0f;
-COMPILER_STRIP_GATE(0x80BDA06C, &lit_4490);
-#pragma pop
-
-/* 80BDA070-80BDA074 0000CC 0004+00 0/2 0/0 0/0 .rodata @4491 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4491 = 6.0f;
-COMPILER_STRIP_GATE(0x80BDA070, &lit_4491);
-#pragma pop
-
/* 80BD7ED8-80BD84C0 001578 05E8+00 1/1 0/0 0/0 .text chain_control2__12daObjCwall_cFv */
void daObjCwall_c::chain_control2() {
- // NONMATCHING
+ daPy_py_c* player = daPy_getPlayerActorClass();
+ chain_s* local_130 = &mChains[5];
+ cXyz* local_134 = &field_0xe94[6];
+ field_0xf50 = 0.0f;
+ if ((field_0xe90 == 0) && (field_0xf58 == 0)) {
+ field_0xf1c = 0;
+ current.pos = local_130->mPos;
+ } else {
+ cXyz acStack_98;
+ cXyz cStack_a4;
+ if (field_0xe90 != 0) {
+ if (daPy_py_c::i_checkNowWolf()) {
+ mDoMtx_stack_c::copy(player->getWolfMouthMatrix());
+ mDoMtx_stack_c::multVecZero(&acStack_98);
+ cXyz cStack_b0(0.0f, 0.0f, 60.0f);
+ mDoMtx_stack_c::YrotS(player->shape_angle.y);
+ mDoMtx_stack_c::XrotM(field_0xf1a);
+ mDoMtx_stack_c::multVec(&cStack_b0, &cStack_b0);
+ *local_134 = cStack_b0 + acStack_98;
+ field_0xf20 = *local_134;
+ acStack_98.set(0.0f, 0.0f, -10.0f);
+ } else {
+ acStack_98 = player->getRightHandPos();
+ cXyz cStack_bc(25.0f, 10.0f, 60.0f);
+ mDoMtx_stack_c::YrotS(player->shape_angle.y);
+ mDoMtx_stack_c::XrotM(field_0xf1a);
+ mDoMtx_stack_c::multVec(&cStack_bc, &cStack_bc);
+ cStack_bc += acStack_98;
+ *local_134 = cStack_bc;
+ field_0xf20 = *local_134;
+ acStack_98.set(0.0f, 0.0f, -10.0f);
+ }
+ mDoMtx_stack_c::YrotS(player->shape_angle.y + 0x7fff);
+ mDoMtx_stack_c::XrotM(-field_0xf1a);
+ mDoMtx_stack_c::multVec(&acStack_98, &cStack_a4);
+ cStack_a4 += field_0xf20;
+ *local_134 = cStack_a4;
+ } else {
+ if (field_0xf58 != 0) {
+ field_0xf20 = current.pos;
+ *local_134 = current.pos;
+ ;
+ }
+ }
+ f32 dVar12 = 0.0f;
+ cXyz cStack_c8;
+ cXyz cStack_d4;
+ getChainBasePos(&cStack_c8);
+ cStack_d4 = field_0xe94[6];
+ f32 dVar10 = cStack_d4.abs(cStack_c8);
+ f32 dVar11 = 188.0f;
+ if (dVar10 > dVar11) {
+ dVar12 = (dVar10 - dVar11) / 6.0f;
+ }
+ cXyz* pPos = local_134;
+ int i = 5;
+ dVar12 = 38.0f + dVar12;
+ local_134--;
+ for (; i >= 1; i--) {
+ dVar10 = local_134->y;
+ cXyz cStack_e0(*local_134);
+ cStack_e0.y += 100.0f;
+ if (fopAcM_gc_c::gndCheck(&cStack_e0)) {
+ f32 gnd = fopAcM_gc_c::getGroundY() + 15.0f;
+ if (gnd > local_134->y) {
+ local_134->y = gnd;
+ field_0xee8[i] = 0;
+ }
+ }
+ if (field_0xf04[i + 1] != 0) {
+ local_134->y = dVar10;
+ }
+ cXyz cStack_ec = *local_134 - *pPos;
+ cStack_ec.normalizeZP();
+ f32 fVar5 = dVar12;
+ if (i == 5) {
+ fVar5 = 5.0f;
+ }
+ cStack_ec = cStack_ec * fVar5;
+ *local_134 = *pPos + cStack_ec;
+ local_130->mPos.x = (pPos->x + local_134->x) * 0.5f;
+ local_130->mPos.y = (pPos->y + local_134->y) * 0.5f;
+ local_130->mPos.z = (pPos->z + local_134->z) * 0.5f;
+ local_130--;
+ pPos = local_134;
+ local_134--;
+ }
+ }
}
-/* ############################################################################################## */
-/* 80BDA1F8-80BDA204 -00001 000C+00 0/1 0/0 0/0 .data @4501 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_4501[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)modeWait__12daObjCwall_cFv,
-};
-#pragma pop
-
-/* 80BDA204-80BDA210 -00001 000C+00 0/1 0/0 0/0 .data @4502 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_4502[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)modeWalk__12daObjCwall_cFv,
-};
-#pragma pop
-
-/* 80BDA210-80BDA21C -00001 000C+00 0/1 0/0 0/0 .data @4503 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_4503[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)modeClose__12daObjCwall_cFv,
-};
-#pragma pop
-
-/* 80BDA21C-80BDA240 00015C 0024+00 0/1 0/0 0/0 .data l_func$4500 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static u8 l_func[36] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-#pragma pop
-
-/* 80BDA358-80BDA364 000060 000C+00 0/1 0/0 0/0 .bss @3760 */
-#pragma push
-#pragma force_active on
-static u8 lit_3760[12];
-#pragma pop
-
/* 80BDA364-80BDA370 00006C 000C+00 0/1 0/0 0/0 .bss l_smokeSetOffset */
-#pragma push
-#pragma force_active on
-static u8 l_smokeSetOffset[12];
-#pragma pop
-
-/* 80BDA370-80BDA374 000078 0004+00 1/1 0/0 0/0 .bss None */
-static u8 data_80BDA370[4];
+static cXyz l_smokeSetOffset(0.0f,0.0f,-200.0f);
/* 80BD84C0-80BD8594 001B60 00D4+00 1/1 0/0 0/0 .text block_mode_proc_call__12daObjCwall_cFv */
void daObjCwall_c::block_mode_proc_call() {
- // NONMATCHING
+ static daObjCwall_c::modeFunc l_func[3] = {
+ &daObjCwall_c::modeWait,
+ &daObjCwall_c::modeWalk,
+ &daObjCwall_c::modeClose,
+ };
+ (this->*(l_func[field_0xe92]))();
+ if (field_0xf50 != 0.0f) {
+ setPower(field_0xf50, NULL);
+ }
}
/* 80BD8594-80BD85C0 001C34 002C+00 2/2 0/0 0/0 .text initWait__12daObjCwall_cFv */
void daObjCwall_c::initWait() {
- // NONMATCHING
+ speed.setall(0.0f);
+ field_0xf0e = 0;
+ field_0xf10 = 20;
+ field_0xe92 = 0;
}
/* 80BD85C0-80BD8748 001C60 0188+00 1/0 0/0 0/0 .text modeWait__12daObjCwall_cFv */
void daObjCwall_c::modeWait() {
- // NONMATCHING
+ u8 bVar2;
+ daPy_py_c* player = static_cast<daPy_py_c*>(daPy_getPlayerActorClass());
+ u8 dVar1 = field_0xf0e;
+ if (field_0xe90 != 0) {
+ bVar2 = true;
+ if (player->checkBootsOrArmorHeavy() && field_0xf12 == 0) {
+ bVar2 = false;
+ }
+ if (checkPullNow()) {
+ field_0xf0e++;
+ if (field_0xf50 != 0.0f && !checkWall() && player->getBaseAnimeFrame() > 6.0f &&
+ player->getBaseAnimeFrame() < 8.0f && field_0xf0e > 8)
+ {
+ initWalk();
+ }
+ } else {
+ if (bVar2 && cLib_calcTimer(&field_0xf10) == 0 && field_0xf0d != 0) {
+ field_0xf59 = field_0xf0d;
+ initClose();
+ }
+ }
+ } else {
+ field_0xf0e = 0;
+ if (field_0xf0d != 0) {
+ field_0xf59 = field_0xf0d;
+ initClose();
+ }
+ }
+ if (field_0xf0d == 9 || dVar1 == field_0xf0e) {
+ field_0xf0e = 0;
+ }
}
/* 80BD8748-80BD8778 001DE8 0030+00 2/2 0/0 0/0 .text initWalk__12daObjCwall_cFv */
void daObjCwall_c::initWalk() {
- // NONMATCHING
+ speed.setall(0.0f);
+ field_0xf14 = 13;
+ field_0xf16 = 0x9d8;
+ field_0xe92 = 1;
}
-/* ############################################################################################## */
-/* 80BDA074-80BDA078 0000D0 0004+00 0/3 0/0 0/0 .rodata @4665 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4665 = 1.0f;
-COMPILER_STRIP_GATE(0x80BDA074, &lit_4665);
-#pragma pop
-
-/* 80BDA078-80BDA07C 0000D4 0004+00 0/2 0/0 0/0 .rodata @4666 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4666 = 75.0f;
-COMPILER_STRIP_GATE(0x80BDA078, &lit_4666);
-#pragma pop
-
-/* 80BDA07C-80BDA084 0000D8 0004+04 0/2 0/0 0/0 .rodata @4667 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4667[1 + 1 /* padding */] = {
- -1.0f,
- /* padding */
- 0.0f,
-};
-COMPILER_STRIP_GATE(0x80BDA07C, &lit_4667);
-#pragma pop
-
-/* 80BDA084-80BDA08C 0000E0 0008+00 0/1 0/0 0/0 .rodata @4669 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static u8 const lit_4669[8] = {
- 0x43, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80BDA084, &lit_4669);
-#pragma pop
-
/* 80BD8778-80BD8BC8 001E18 0450+00 1/0 0/0 0/0 .text modeWalk__12daObjCwall_cFv */
void daObjCwall_c::modeWalk() {
- // NONMATCHING
+ s16 bVar1 = 13;
+ f32 dVar7 = 75.0f;
+ cLib_calcTimer(&field_0xf14);
+ f32 dVar6 = cM_scos(
+ field_0xf16 * (bVar1 - field_0xf14));
+ dVar6 = (1.0f - dVar6) * 0.5f;
+ cXyz local_78(0.0f, 0.0f, 1.0f);
+ mDoMtx_stack_c::YrotS(home.angle.y);
+ mDoMtx_stack_c::multVec(&local_78, &local_78);
+ field_0xf38.x = home.pos.x + local_78.x * (dVar7 * (field_0xf0d + dVar6));
+ field_0xf38.z = home.pos.z + local_78.z * (dVar7 * (field_0xf0d + dVar6));
+ speed.z = std::fabs(field_0xf38.absXZ(field_0xf44));
+ daPy_py_c* player = daPy_getPlayerActorClass();
+ s16 local_88 = player->current.angle.y + 0x7fff;
+ cXyz local_84;
+ local_84.x = player->getSpeedF() * cM_ssin(player->current.angle.y);
+ local_84.z = (player->getSpeedF() * cM_scos(player->current.angle.y));
+ setPower(std::sqrt(local_84.x * local_84.x + local_84.z * local_84.z), &local_88);
+ setPower(speed.z, &shape_angle.y);
+ field_0xf50 = 0;
+ mDoAud_seStartLevel(Z2SE_OBJ_CWALL_MOVE, &field_0xf2c, 0, 0);
+ if (field_0xf14 == 0) {
+ initWait();
+ field_0xf0d++;
+ if (field_0xf0d == 9) {
+ mDoAud_seStart(Z2SE_OBJ_CWALL_MOVE_STOP, &field_0xf2c, 0, 0);
+ }
+ }
}
/* 80BD8BC8-80BD8BF0 002268 0028+00 1/1 0/0 0/0 .text initClose__12daObjCwall_cFv */
void daObjCwall_c::initClose() {
- // NONMATCHING
+ speed.setall(0.0f);
+ field_0xf0e = 0;
+ field_0xe92 = 2;
}
-/* ############################################################################################## */
-/* 80BDA08C-80BDA090 0000E8 0004+00 0/1 0/0 0/0 .rodata @4884 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4884 = 1.0f / 100.0f;
-COMPILER_STRIP_GATE(0x80BDA08C, &lit_4884);
-#pragma pop
-
-/* 80BDA090-80BDA094 0000EC 0004+00 0/1 0/0 0/0 .rodata @4885 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4885 = 1.5f;
-COMPILER_STRIP_GATE(0x80BDA090, &lit_4885);
-#pragma pop
-
/* 80BD8BF0-80BD935C 002290 076C+00 1/0 0/0 0/0 .text modeClose__12daObjCwall_cFv */
void daObjCwall_c::modeClose() {
- // NONMATCHING
+ daPy_py_c* player = daPy_getPlayerActorClass();
+ f32 dVar11 = field_0xf38.absXZ(home.pos);
+ bool bVar6 = false;
+ u8 dVar1 = field_0xf0e;
+ if (field_0xe90 != 0) {
+ cXyz cStack_a4;
+ cXyz cStack_b0;
+ getChainBasePos(&cStack_a4);
+ cStack_b0 = field_0xe94[6];
+ if (cStack_b0.abs(cStack_a4) > 188.0f) {
+ field_0xe91 = 1;
+ if (player->getSpeedF() == 0.0f) {
+ field_0xf50 = speed.z;
+ } else {
+ if (checkPull()) {
+ field_0xf50 = std::fabs(player->getSpeedF()) + std::fabs(speed.z);
+ } else {
+ field_0xf50 = 0.0f;
+ }
+ }
+ } else {
+ field_0xe91 = 0;
+ }
+ if (field_0xe91 != 0 && checkPullNow()) {
+ field_0xf0e++;
+ } else {
+ field_0xf0e = 0;
+ }
+ if (field_0xf0e >= 8) {
+ bVar6 = true;
+ }
+ }
+ if (dVar1 == field_0xf0e) {
+ field_0xf0e = 0;
+ }
+ speed.z += 0.01f;
+ if (speed.z > 1.5f) {
+ speed.z = 1.5f;
+ }
+ int iVar7 = cLib_chasePos(&field_0xf38, home.pos, std::fabs(speed.z));
+ f32 dVar12 = field_0xf38.absXZ(home.pos);
+ if (iVar7 != 0) {
+ if (bVar6) {
+ field_0xf0d = 0;
+ initWalk();
+ } else {
+ OS_REPORT("引き戸:閉じました!\n");
+ dComIfGp_getVibration().StartShock(4, 0x1f, cXyz(0.0f, 1.0f, 0.0f));
+ field_0xf0d = 0;
+ mDoAud_seStart(Z2SE_OBJ_CWALL_BACK_STOP, &field_0xf2c, 0, 0);
+ initWait();
+ if (field_0xf59 >= 5 && getSwbit() != 0xff) {
+ fopAcM_onSwitch(this, getSwbit());
+ }
+ }
+ field_0xf59 = 0;
+ } else {
+ s32 iVar7 = (int)dVar11 / 75;
+ int temp = (int)dVar12 / 75;
+ if (temp != iVar7) {
+ if (bVar6) {
+ field_0xf0d = iVar7;
+ initWait();
+ field_0xf0e = 8;
+ } else {
+ if (daPy_getPlayerActorClass()->checkBootsOrArmorHeavy()) {
+ mDoAud_seStart(Z2SE_OBJ_CWALL_CHAIN_TENSION, &mChains[0].mPos, 0, 0);
+ field_0xf0d = iVar7;
+ initWait();
+ }
+ }
+ }
+ if (daPy_getPlayerActorClass()->checkBootsOrArmorHeavy()) {
+ mDoAud_seStartLevel(Z2SE_OBJ_CWALL_BACK_SLOW, &field_0xf2c, 0, 0);
+ } else {
+ mDoAud_seStartLevel(Z2SE_OBJ_CWALL_BACK, &field_0xf2c, 0, 0);
+ }
+ }
+ cXyz cStack_bc(l_top_co_offset);
+ mDoMtx_stack_c::transS(field_0xf38);
+ mDoMtx_stack_c::YrotM(home.angle.y);
+ mDoMtx_stack_c::multVec(&cStack_bc,&cStack_bc);
+ mCyl.SetC(cStack_bc);
+ dComIfG_Ccsp()->Set(&mCyl);
}
/* 80BD935C-80BD9414 0029FC 00B8+00 2/2 0/0 0/0 .text setPower__12daObjCwall_cFfPs */
-void daObjCwall_c::setPower(f32 param_0, s16* param_1) {
- // NONMATCHING
+void daObjCwall_c::setPower(f32 param_1, s16* param_2) {
+ daPy_py_c* player = daPy_getPlayerActorClass();
+ s16 sVar3;
+ if (param_2 == NULL) {
+ chain_s* pChain = mChains;
+ cXyz local_28;
+ local_28 = pChain[4].mPos - pChain[5].mPos;
+ sVar3 = cM_atan2s(local_28.x, local_28.z);
+ } else {
+ sVar3 = *param_2;
+ }
+ player->setOutPower(param_1, sVar3, 0);
+ field_0xf0f = 1;
}
-/* ############################################################################################## */
-/* 80BDA094-80BDA098 0000F0 0004+00 0/1 0/0 0/0 .rodata @4961 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4961 = -95.0f;
-COMPILER_STRIP_GATE(0x80BDA094, &lit_4961);
-#pragma pop
-
-/* 80BDA098-80BDA09C 0000F4 0004+00 0/1 0/0 0/0 .rodata @4962 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4962 = 95.0f;
-COMPILER_STRIP_GATE(0x80BDA098, &lit_4962);
-#pragma pop
-
/* 80BD9414-80BD95A0 002AB4 018C+00 1/1 0/0 0/0 .text checkWall__12daObjCwall_cFv */
-void daObjCwall_c::checkWall() {
- // NONMATCHING
+BOOL daObjCwall_c::checkWall() {
+ cXyz acStack_30[2] = {cXyz(-95.0f, 5.0f, 1.0f), cXyz(95.0f, 5.0f, 1.0f)};
+ cXyz cStack_40(0.0f, 0.0f, 1.0f);
+ cStack_40.z = 75.0f;
+ BOOL rv = FALSE;
+ mDoMtx_stack_c::YrotS(current.angle.y);
+ for (int i = 0; i < 2; i = i + 1) {
+ cXyz cStack_4c(acStack_30[i]);
+ cXyz cStack_58(cStack_40);
+ mDoMtx_stack_c::multVec(&cStack_4c, &cStack_4c);
+ cStack_4c += field_0xf38;
+ mDoMtx_stack_c::multVec(&cStack_58, &cStack_58);
+ cStack_58 += cStack_4c;
+ if (fopAcM_lc_c::lineCheck(&cStack_4c, &cStack_58, this)) {
+ rv = TRUE;
+ }
+ }
+ return rv;
}
-/* ############################################################################################## */
-/* 80BDA09C-80BDA0A0 0000F8 0004+00 0/1 0/0 0/0 .rodata @5019 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_5019 = 290.0f;
-COMPILER_STRIP_GATE(0x80BDA09C, &lit_5019);
-#pragma pop
-
/* 80BD95A0-80BD977C 002C40 01DC+00 2/2 0/0 0/0 .text checkPullNow__12daObjCwall_cFv */
-void daObjCwall_c::checkPullNow() {
- // NONMATCHING
+BOOL daObjCwall_c::checkPullNow() {
+ daPy_py_c* player = daPy_getPlayerActorClass();
+ s16 dummy;
+ bool iVar2 = player->getStickAngleFromPlayerShape(&dummy);
+ cXyz cStack_20(0.0f, 0.0f, 290.0f);
+ mDoMtx_stack_c::transS(field_0xf38);
+ mDoMtx_stack_c::YrotM(shape_angle.y);
+ mDoMtx_stack_c::multVec(&cStack_20, &cStack_20);
+ cXyz local_2c = player->current.pos - cStack_20;
+ mDoMtx_stack_c::YrotS(-current.angle.y);
+ mDoMtx_stack_c::multVec(&local_2c, &local_2c);
+ cXyz local_38;
+ cXyz local_44;
+ if (daPy_py_c::i_checkNowWolf()) {
+ local_38 = l_check_min_wolf;
+ local_44 = l_check_max_wolf;
+ } else {
+ local_38 = l_check_min;
+ local_44 = l_check_max;
+ }
+ if (local_38.x <= local_2c.x && local_2c.x <= local_44.x && local_38.z <= local_2c.z &&
+ local_2c.z <= local_44.z && iVar2)
+ {
+ return 1;
+ }
+ return 0;
}
/* 80BD977C-80BD9848 002E1C 00CC+00 2/2 0/0 0/0 .text checkPull__12daObjCwall_cFv */
-void daObjCwall_c::checkPull() {
- // NONMATCHING
+BOOL daObjCwall_c::checkPull() {
+ daPy_py_c* player = daPy_getPlayerActorClass();
+ cXyz local_2c;
+ cXyz cStack_38 = mChains[0].mPos - mChains[5].mPos;
+ local_2c.x = player->getSpeedF() * cM_ssin(player->current.angle.y);
+ local_2c.z = player->getSpeedF() * cM_scos(player->current.angle.y);
+ if (field_0xe90 != 0 && cStack_38.inprodXZ(local_2c) < 0.0f) {
+ return 1;
+ }
+ return 0;
}
/* 80BD9848-80BD9948 002EE8 0100+00 1/0 0/0 0/0 .text Draw__12daObjCwall_cFv */
-void daObjCwall_c::Draw() {
- // NONMATCHING
+int daObjCwall_c::Draw() {
+ g_env_light.settingTevStruct( 0x10,
+ &field_0xf38, &tevStr);
+ g_env_light.setLightTevColorType_MAJI(
+ mWallModel,
+ &tevStr);
+ dComIfGd_setListBG();
+ mDoExt_modelUpdateDL(mWallModel);
+ dComIfGd_setList();
+
+ chain_s* pChain = mChains;
+ for (int i = 0; i < 5; pChain++, i++) {
+ g_env_light.setLightTevColorType_MAJI(pChain->mModel, &tevStr);
+ mDoExt_modelUpdateDL(pChain->mModel);
+ }
+ g_env_light.setLightTevColorType_MAJI(mHandleModel, &tevStr);
+ mDoExt_modelUpdateDL(mHandleModel);
+ return 1;
}
/* 80BD9948-80BD9988 002FE8 0040+00 1/0 0/0 0/0 .text Delete__12daObjCwall_cFv */
-void daObjCwall_c::Delete() {
- // NONMATCHING
+int daObjCwall_c::Delete() {
+ dComIfG_resDelete(&mPhase, l_arcName[mType]);
+ return 1;
+}
+
+/* 80BD9988-80BD9B70 003028 01E8+00 1/0 0/0 0/0 .text daObjCwall_create1st__FP12daObjCwall_c */
+static int daObjCwall_create1st(daObjCwall_c* i_this) {
+ fopAcM_SetupActor(i_this, daObjCwall_c);
+ return i_this->create1st();
+}
+
+/* 80BD9DF8-80BD9E18 003498 0020+00 1/0 0/0 0/0 .text daObjCwall_MoveBGDelete__FP12daObjCwall_c */
+static int daObjCwall_MoveBGDelete(daObjCwall_c* i_this) {
+ return i_this->MoveBGDelete();
+}
+
+/* 80BD9E18-80BD9E38 0034B8 0020+00 1/0 0/0 0/0 .text daObjCwall_MoveBGExecute__FP12daObjCwall_c
+ */
+static int daObjCwall_MoveBGExecute(daObjCwall_c* i_this) {
+ return i_this->MoveBGExecute();
+}
+
+/* 80BD9E38-80BD9E64 0034D8 002C+00 1/0 0/0 0/0 .text daObjCwall_MoveBGDraw__FP12daObjCwall_c */
+static int daObjCwall_MoveBGDraw(daObjCwall_c* i_this) {
+ return i_this->Draw();
}
-/* ############################################################################################## */
/* 80BDA240-80BDA260 -00001 0020+00 1/0 0/0 0/0 .data daObjCwall_METHODS */
static actor_method_class daObjCwall_METHODS = {
- (process_method_func)daObjCwall_create1st__FP12daObjCwall_c,
- (process_method_func)daObjCwall_MoveBGDelete__FP12daObjCwall_c,
- (process_method_func)daObjCwall_MoveBGExecute__FP12daObjCwall_c,
- 0,
- (process_method_func)daObjCwall_MoveBGDraw__FP12daObjCwall_c,
+ (process_method_func)daObjCwall_create1st,
+ (process_method_func)daObjCwall_MoveBGDelete,
+ (process_method_func)daObjCwall_MoveBGExecute,
+ NULL,
+ (process_method_func)daObjCwall_MoveBGDraw,
};
/* 80BDA260-80BDA290 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_ChainWall */
@@ -899,342 +996,6 @@ extern actor_process_profile_definition g_profile_Obj_ChainWall = {
fopAc_CULLBOX_CUSTOM_e, // cullType
};
-/* 80BDA290-80BDA29C 0001D0 000C+00 2/2 0/0 0/0 .data __vt__10cCcD_GStts */
-SECTION_DATA extern void* __vt__10cCcD_GStts[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__10cCcD_GSttsFv,
-};
-
-/* 80BDA29C-80BDA2A8 0001DC 000C+00 1/1 0/0 0/0 .data __vt__10dCcD_GStts */
-SECTION_DATA extern void* __vt__10dCcD_GStts[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__10dCcD_GSttsFv,
-};
-
-/* 80BDA2A8-80BDA2B4 0001E8 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGSph */
-SECTION_DATA extern void* __vt__8cM3dGSph[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__8cM3dGSphFv,
-};
-
-/* 80BDA2B4-80BDA2C0 0001F4 000C+00 4/4 0/0 0/0 .data __vt__8cM3dGCyl */
-SECTION_DATA extern void* __vt__8cM3dGCyl[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__8cM3dGCylFv,
-};
-
-/* 80BDA2C0-80BDA2CC 000200 000C+00 4/4 0/0 0/0 .data __vt__8cM3dGAab */
-SECTION_DATA extern void* __vt__8cM3dGAab[3] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)__dt__8cM3dGAabFv,
-};
-
-/* 80BDA2CC-80BDA2F4 00020C 0028+00 1/1 0/0 0/0 .data __vt__12daObjCwall_c */
-SECTION_DATA extern void* __vt__12daObjCwall_c[10] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)CreateHeap__12daObjCwall_cFv,
- (void*)Create__12daObjCwall_cFv,
- (void*)Execute__12daObjCwall_cFPPA3_A4_f,
- (void*)Draw__12daObjCwall_cFv,
- (void*)Delete__12daObjCwall_cFv,
- (void*)IsDelete__16dBgS_MoveBgActorFv,
- (void*)ToFore__16dBgS_MoveBgActorFv,
- (void*)ToBack__16dBgS_MoveBgActorFv,
-};
-
-/* 80BD9988-80BD9B70 003028 01E8+00 1/0 0/0 0/0 .text daObjCwall_create1st__FP12daObjCwall_c */
-static void daObjCwall_create1st(daObjCwall_c* param_0) {
- // NONMATCHING
-}
-
-/* 80BD9B70-80BD9B74 003210 0004+00 1/1 0/0 0/0 .text __ct__4cXyzFv */
-// cXyz::cXyz() {
-extern "C" void __ct__4cXyzFv() {
- /* empty function */
-}
-
-/* 80BD9B74-80BD9BF8 003214 0084+00 1/1 0/0 0/0 .text __ct__8dCcD_CylFv */
-// dCcD_Cyl::dCcD_Cyl() {
-extern "C" void __ct__8dCcD_CylFv() {
- // NONMATCHING
-}
-
-/* 80BD9BF8-80BD9C40 003298 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGSphFv */
-// cM3dGSph::~cM3dGSph() {
-extern "C" void __dt__8cM3dGSphFv() {
- // NONMATCHING
-}
-
-/* 80BD9C40-80BD9D0C 0032E0 00CC+00 1/1 0/0 0/0 .text __dt__8dCcD_CylFv */
-// dCcD_Cyl::~dCcD_Cyl() {
-extern "C" void __dt__8dCcD_CylFv() {
- // NONMATCHING
-}
-
-/* 80BD9D0C-80BD9D54 0033AC 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGCylFv */
-// cM3dGCyl::~cM3dGCyl() {
-extern "C" void __dt__8cM3dGCylFv() {
- // NONMATCHING
-}
-
-/* 80BD9D54-80BD9D9C 0033F4 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */
-// cM3dGAab::~cM3dGAab() {
-extern "C" void __dt__8cM3dGAabFv() {
- // NONMATCHING
-}
-
-/* 80BD9D9C-80BD9DF8 00343C 005C+00 1/0 0/0 0/0 .text __dt__10dCcD_GSttsFv */
-// dCcD_GStts::~dCcD_GStts() {
-extern "C" void __dt__10dCcD_GSttsFv() {
- // NONMATCHING
-}
-
-/* 80BD9DF8-80BD9E18 003498 0020+00 1/0 0/0 0/0 .text daObjCwall_MoveBGDelete__FP12daObjCwall_c */
-static void daObjCwall_MoveBGDelete(daObjCwall_c* param_0) {
- // NONMATCHING
-}
-
-/* 80BD9E18-80BD9E38 0034B8 0020+00 1/0 0/0 0/0 .text daObjCwall_MoveBGExecute__FP12daObjCwall_c
- */
-static void daObjCwall_MoveBGExecute(daObjCwall_c* param_0) {
- // NONMATCHING
-}
-
-/* 80BD9E38-80BD9E64 0034D8 002C+00 1/0 0/0 0/0 .text daObjCwall_MoveBGDraw__FP12daObjCwall_c */
-static void daObjCwall_MoveBGDraw(daObjCwall_c* param_0) {
- // NONMATCHING
-}
-
-/* 80BD9E64-80BD9EAC 003504 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */
-// cCcD_GStts::~cCcD_GStts() {
-extern "C" void __dt__10cCcD_GSttsFv() {
- // NONMATCHING
-}
-
-/* 80BD9EAC-80BD9EC8 00354C 001C+00 1/1 0/0 0/0 .text cLib_calcTimer<s>__FPs */
-extern "C" void func_80BD9EAC(void* _this, s16* param_0) {
- // NONMATCHING
-}
-
-/* 80BD9EC8-80BD9EE4 003568 001C+00 1/1 0/0 0/0 .text cLib_calcTimer<Uc>__FPUc */
-extern "C" void func_80BD9EC8(void* _this, u8* param_0) {
- // NONMATCHING
-}
-
-/* ############################################################################################## */
-/* 80BDA0A0-80BDA0A4 0000FC 0004+00 0/1 0/0 0/0 .rodata @5316 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_5316 = 105.0f;
-COMPILER_STRIP_GATE(0x80BDA0A0, &lit_5316);
-#pragma pop
-
-/* 80BDA0A4-80BDA0A8 000100 0004+00 0/1 0/0 0/0 .rodata @5317 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_5317 = 30.0f;
-COMPILER_STRIP_GATE(0x80BDA0A4, &lit_5317);
-#pragma pop
-
-/* 80BDA0A8-80BDA0AC 000104 0004+00 0/1 0/0 0/0 .rodata @5318 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_5318 = -200.0f;
-COMPILER_STRIP_GATE(0x80BDA0A8, &lit_5318);
-#pragma pop
-
-/* 80BD9EE4-80BD9F74 003584 0090+00 0/0 1/0 0/0 .text __sinit_d_a_obj_cwall_cpp */
-void __sinit_d_a_obj_cwall_cpp() {
- // NONMATCHING
-}
-
-#pragma push
-#pragma force_active on
-REGISTER_CTORS(0x80BD9EE4, __sinit_d_a_obj_cwall_cpp);
-#pragma pop
-
-/* 80BD9F74-80BD9F90 003614 001C+00 1/1 0/0 0/0 .text getRightHandPos__9daPy_py_cCFv */
-// void daPy_py_c::getRightHandPos() const {
-extern "C" void getRightHandPos__9daPy_py_cCFv() {
- // NONMATCHING
-}
-
-/* ############################################################################################## */
-/* 80BDA374-80BDA378 00007C 0004+00 0/0 0/0 0/0 .bss
- * sInstance__40JASGlobalInstance<19JASDefaultBankTable> */
-#pragma push
-#pragma force_active on
-static u8 data_80BDA374[4];
-#pragma pop
-
-/* 80BDA378-80BDA37C 000080 0004+00 0/0 0/0 0/0 .bss
- * sInstance__35JASGlobalInstance<14JASAudioThread> */
-#pragma push
-#pragma force_active on
-static u8 data_80BDA378[4];
-#pragma pop
-
-/* 80BDA37C-80BDA380 000084 0004+00 0/0 0/0 0/0 .bss sInstance__27JASGlobalInstance<7Z2SeMgr> */
-#pragma push
-#pragma force_active on
-static u8 data_80BDA37C[4];
-#pragma pop
-
-/* 80BDA380-80BDA384 000088 0004+00 0/0 0/0 0/0 .bss sInstance__28JASGlobalInstance<8Z2SeqMgr> */
-#pragma push
-#pragma force_active on
-static u8 data_80BDA380[4];
-#pragma pop
-
-/* 80BDA384-80BDA388 00008C 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2SceneMgr>
- */
-#pragma push
-#pragma force_active on
-static u8 data_80BDA384[4];
-#pragma pop
-
-/* 80BDA388-80BDA38C 000090 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2StatusMgr>
- */
-#pragma push
-#pragma force_active on
-static u8 data_80BDA388[4];
-#pragma pop
-
-/* 80BDA38C-80BDA390 000094 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2DebugSys>
- */
-#pragma push
-#pragma force_active on
-static u8 data_80BDA38C[4];
-#pragma pop
-
-/* 80BDA390-80BDA394 000098 0004+00 0/0 0/0 0/0 .bss
- * sInstance__36JASGlobalInstance<15JAISoundStarter> */
-#pragma push
-#pragma force_active on
-static u8 data_80BDA390[4];
-#pragma pop
-
-/* 80BDA394-80BDA398 00009C 0004+00 0/0 0/0 0/0 .bss
- * sInstance__35JASGlobalInstance<14Z2SoundStarter> */
-#pragma push
-#pragma force_active on
-static u8 data_80BDA394[4];
-#pragma pop
-
-/* 80BDA398-80BDA39C 0000A0 0004+00 0/0 0/0 0/0 .bss
- * sInstance__33JASGlobalInstance<12Z2SpeechMgr2> */
-#pragma push
-#pragma force_active on
-static u8 data_80BDA398[4];
-#pragma pop
-
-/* 80BDA39C-80BDA3A0 0000A4 0004+00 0/0 0/0 0/0 .bss sInstance__28JASGlobalInstance<8JAISeMgr> */
-#pragma push
-#pragma force_active on
-static u8 data_80BDA39C[4];
-#pragma pop
-
-/* 80BDA3A0-80BDA3A4 0000A8 0004+00 0/0 0/0 0/0 .bss sInstance__29JASGlobalInstance<9JAISeqMgr> */
-#pragma push
-#pragma force_active on
-static u8 data_80BDA3A0[4];
-#pragma pop
-
-/* 80BDA3A4-80BDA3A8 0000AC 0004+00 0/0 0/0 0/0 .bss
- * sInstance__33JASGlobalInstance<12JAIStreamMgr> */
-#pragma push
-#pragma force_active on
-static u8 data_80BDA3A4[4];
-#pragma pop
-
-/* 80BDA3A8-80BDA3AC 0000B0 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2SoundMgr>
- */
-#pragma push
-#pragma force_active on
-static u8 data_80BDA3A8[4];
-#pragma pop
-
-/* 80BDA3AC-80BDA3B0 0000B4 0004+00 0/0 0/0 0/0 .bss
- * sInstance__33JASGlobalInstance<12JAISoundInfo> */
-#pragma push
-#pragma force_active on
-static u8 data_80BDA3AC[4];
-#pragma pop
-
-/* 80BDA3B0-80BDA3B4 0000B8 0004+00 0/0 0/0 0/0 .bss
- * sInstance__34JASGlobalInstance<13JAUSoundTable> */
-#pragma push
-#pragma force_active on
-static u8 data_80BDA3B0[4];
-#pragma pop
-
-/* 80BDA3B4-80BDA3B8 0000BC 0004+00 0/0 0/0 0/0 .bss
- * sInstance__38JASGlobalInstance<17JAUSoundNameTable> */
-#pragma push
-#pragma force_active on
-static u8 data_80BDA3B4[4];
-#pragma pop
-
-/* 80BDA3B8-80BDA3BC 0000C0 0004+00 0/0 0/0 0/0 .bss
- * sInstance__33JASGlobalInstance<12JAUSoundInfo> */
-#pragma push
-#pragma force_active on
-static u8 data_80BDA3B8[4];
-#pragma pop
-
-/* 80BDA3BC-80BDA3C0 0000C4 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2SoundInfo>
- */
-#pragma push
-#pragma force_active on
-static u8 data_80BDA3BC[4];
-#pragma pop
-
-/* 80BDA3C0-80BDA3C4 0000C8 0004+00 0/0 0/0 0/0 .bss
- * sInstance__34JASGlobalInstance<13Z2SoundObjMgr> */
-#pragma push
-#pragma force_active on
-static u8 data_80BDA3C0[4];
-#pragma pop
-
-/* 80BDA3C4-80BDA3C8 0000CC 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2Audience>
- */
-#pragma push
-#pragma force_active on
-static u8 data_80BDA3C4[4];
-#pragma pop
-
-/* 80BDA3C8-80BDA3CC 0000D0 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2FxLineMgr>
- */
-#pragma push
-#pragma force_active on
-static u8 data_80BDA3C8[4];
-#pragma pop
-
-/* 80BDA3CC-80BDA3D0 0000D4 0004+00 0/0 0/0 0/0 .bss sInstance__31JASGlobalInstance<10Z2EnvSeMgr>
- */
-#pragma push
-#pragma force_active on
-static u8 data_80BDA3CC[4];
-#pragma pop
-
-/* 80BDA3D0-80BDA3D4 0000D8 0004+00 0/0 0/0 0/0 .bss sInstance__32JASGlobalInstance<11Z2SpeechMgr>
- */
-#pragma push
-#pragma force_active on
-static u8 data_80BDA3D0[4];
-#pragma pop
-
-/* 80BDA3D4-80BDA3D8 0000DC 0004+00 0/0 0/0 0/0 .bss
- * sInstance__34JASGlobalInstance<13Z2WolfHowlMgr> */
-#pragma push
-#pragma force_active on
-static u8 data_80BDA3D4[4];
-#pragma pop
+AUDIO_INSTANCES
/* 80BDA0AC-80BDA0AC 000108 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
diff --git a/src/d/actor/d_a_obj_pdoor.cpp b/src/d/actor/d_a_obj_pdoor.cpp
index 2bcee457cf..236e8a2a8b 100644
--- a/src/d/actor/d_a_obj_pdoor.cpp
+++ b/src/d/actor/d_a_obj_pdoor.cpp
@@ -4,278 +4,304 @@
*/
#include "d/actor/d_a_obj_pdoor.h"
+#include "d/actor/d_a_player.h"
+#include "SSystem/SComponent/c_lib.h"
+#include "SSystem/SComponent/c_math.h"
+#include "cmath.h"
+#include "d/d_com_inf_game.h"
+#include "d/d_bg_w.h"
#include "dol2asm.h"
-
-
-//
-// Forward References:
-//
-
-extern "C" static void PPCallBack__FP10fopAc_ac_cP10fopAc_ac_csQ29dBgW_Base13PushPullLabel();
-extern "C" void initBaseMtx__12daObjPDoor_cFv();
-extern "C" void setBaseMtx__12daObjPDoor_cFv();
-extern "C" void Create__12daObjPDoor_cFv();
-extern "C" void CreateHeap__12daObjPDoor_cFv();
-extern "C" void create1st__12daObjPDoor_cFv();
-extern "C" void Execute__12daObjPDoor_cFPPA3_A4_f();
-extern "C" void mode_proc_call__12daObjPDoor_cFv();
-extern "C" void init_modeWait__12daObjPDoor_cFv();
-extern "C" void modeWait__12daObjPDoor_cFv();
-extern "C" void init_modeRotate__12daObjPDoor_cFv();
-extern "C" void modeRotate__12daObjPDoor_cFv();
-extern "C" void Draw__12daObjPDoor_cFv();
-extern "C" void Delete__12daObjPDoor_cFv();
-extern "C" static void daObjPDoor_create1st__FP12daObjPDoor_c();
-extern "C" static void daObjPDoor_MoveBGDelete__FP12daObjPDoor_c();
-extern "C" static void daObjPDoor_MoveBGExecute__FP12daObjPDoor_c();
-extern "C" static void daObjPDoor_MoveBGDraw__FP12daObjPDoor_c();
-extern "C" extern char const* const d_a_obj_pdoor__stringBase0;
-
-//
-// External References:
-//
-
-extern "C" void mDoMtx_YrotS__FPA4_fs();
-extern "C" void mDoMtx_YrotM__FPA4_fs();
-extern "C" void transS__14mDoMtx_stack_cFRC4cXyz();
-extern "C" void mDoExt_modelUpdateDL__FP8J3DModel();
-extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl();
-extern "C" void fopAcM_setCullSizeBox__FP10fopAc_ac_cffffff();
-extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc();
-extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc();
-extern "C" void dComIfGp_getReverb__Fi();
-extern "C" void onSwitch__10dSv_info_cFii();
-extern "C" void offSwitch__10dSv_info_cFii();
-extern "C" void isSwitch__10dSv_info_cCFii();
-extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci();
-extern "C" void StartShock__12dVibration_cFii4cXyz();
-extern "C" void __ct__16dBgS_MoveBgActorFv();
-extern "C" bool IsDelete__16dBgS_MoveBgActorFv();
-extern "C" bool ToFore__16dBgS_MoveBgActorFv();
-extern "C" bool ToBack__16dBgS_MoveBgActorFv();
-extern "C" void
-MoveBGCreate__16dBgS_MoveBgActorFPCciPFP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz_vUlPA3_A4_f();
-extern "C" void MoveBGDelete__16dBgS_MoveBgActorFv();
-extern "C" void MoveBGExecute__16dBgS_MoveBgActorFv();
-extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c();
-extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c();
-extern "C" void __mi__4cXyzCFRC3Vec();
-extern "C" void cLib_addCalcAngleS__FPsssss();
-extern "C" void cLib_addCalcAngleS2__FPssss();
-extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc();
-extern "C" void seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc();
-extern "C" void __ptmf_scall();
-extern "C" void _savegpr_28();
-extern "C" void _savegpr_29();
-extern "C" void _restgpr_28();
-extern "C" void _restgpr_29();
-extern "C" u8 now__14mDoMtx_stack_c[48];
-extern "C" extern u8 g_dComIfG_gameInfo[122384];
-extern "C" u8 sincosTable___5JMath[65536];
-extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */];
-extern "C" extern u8 data_80CAAC30[4];
-
-//
-// Declarations:
-//
-
-/* ############################################################################################## */
-/* 80CAAB20-80CAAB24 000000 0004+00 3/3 0/0 0/0 .rodata @3695 */
-SECTION_RODATA static u8 const lit_3695[4] = {
- 0x00,
- 0x00,
- 0x00,
- 0x00,
-};
-COMPILER_STRIP_GATE(0x80CAAB20, &lit_3695);
-
/* 80CA9E98-80CA9F9C 000078 0104+00 1/1 0/0 0/0 .text
* PPCallBack__FP10fopAc_ac_cP10fopAc_ac_csQ29dBgW_Base13PushPullLabel */
-static void PPCallBack(fopAc_ac_c* param_0, fopAc_ac_c* param_1, s16 param_2,
- dBgW_Base::PushPullLabel param_3) {
- // NONMATCHING
+static fopAc_ac_c* PPCallBack(fopAc_ac_c* i_this, fopAc_ac_c* param_2, s16 param_3,
+ dBgW_Base::PushPullLabel param_4) {
+ int iVar2 = cLib_checkBit<int>(param_4, 3);
+ if (iVar2) {
+ cXyz acStack_40 = param_2->current.pos - i_this->current.pos;
+ mDoMtx_stack_c::YrotS(-i_this->shape_angle.y);
+ mDoMtx_stack_c::multVec(&acStack_40, &acStack_40);
+ int bVar1;
+ if (acStack_40.z > 0.0f) {
+ bVar1 = cLib_checkBit(iVar2, 1) == 0 ? 1 : 0;
+ } else {
+ bVar1 = cLib_checkBit(iVar2, 1) != 0;
+ }
+ for (int i = 0; i < 2; i++) {
+ if (i == bVar1) {
+ static_cast<daObjPDoor_c*>(i_this)->field_0x5b6[i]++;
+ } else {
+ static_cast<daObjPDoor_c*>(i_this)->field_0x5b6[i] = 0;
+ }
+ }
+ static_cast<daObjPDoor_c*>(i_this)->field_0x5b5 = 1;
+ static_cast<daObjPDoor_c*>(i_this)->mPushPullLabel = param_4;
+ }
+ return i_this;
}
/* 80CA9F9C-80CA9FD8 00017C 003C+00 1/1 0/0 0/0 .text initBaseMtx__12daObjPDoor_cFv */
void daObjPDoor_c::initBaseMtx() {
- // NONMATCHING
+ mModel->setBaseScale(scale);
+ setBaseMtx();
}
/* 80CA9FD8-80CAA03C 0001B8 0064+00 2/2 0/0 0/0 .text setBaseMtx__12daObjPDoor_cFv */
void daObjPDoor_c::setBaseMtx() {
- // NONMATCHING
+ mDoMtx_stack_c::transS(current.pos);
+ mDoMtx_stack_c::YrotM(shape_angle.y);
+ mModel->setBaseTRMtx(mDoMtx_stack_c::get());
+ MTXCopy(mDoMtx_stack_c::get(), mBgMtx);
}
-/* ############################################################################################## */
-/* 80CAAB40-80CAAB40 000020 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
-#pragma push
-#pragma force_active on
-SECTION_DEAD static char const* const stringBase_80CAAB40 = "V_OsuDoor";
-#pragma pop
-
-/* 80CAAB4C-80CAAB58 000000 000C+00 1/1 0/0 0/0 .data cNullVec__6Z2Calc */
-SECTION_DATA static u8 cNullVec__6Z2Calc[12] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-
-/* 80CAAB58-80CAAB6C 00000C 0004+10 0/0 0/0 0/0 .data @1787 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static u32 lit_1787[1 + 4 /* padding */] = {
- 0x02000201,
- /* padding */
- 0x40080000,
- 0x00000000,
- 0x3FE00000,
- 0x00000000,
-};
-#pragma pop
+UNK_REL_DATA
/* 80CAAB6C-80CAAB70 -00001 0004+00 3/3 0/0 0/0 .data l_arcName */
-SECTION_DATA static void* l_arcName = (void*)&d_a_obj_pdoor__stringBase0;
+static char* l_arcName = "V_OsuDoor";
/* 80CAAB70-80CAAB88 000024 0018+00 1/1 0/0 0/0 .data l_cull_box */
-SECTION_DATA static u8 l_cull_box[24] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC4, 0x16, 0x00, 0x00,
- 0x44, 0x16, 0x00, 0x00, 0x44, 0x7A, 0x00, 0x00, 0x44, 0x16, 0x00, 0x00,
+static f32 l_cull_box[6] = {
+ 0.0f, 0.0f, -600.0f,
+ 600.0f, 1000.0f, 600.0f,
};
/* 80CAA03C-80CAA14C 00021C 0110+00 1/0 0/0 0/0 .text Create__12daObjPDoor_cFv */
-void daObjPDoor_c::Create() {
- // NONMATCHING
+int daObjPDoor_c::Create() {
+ BOOL isSw = fopAcM_isSwitch(this, getSwbit());
+ BOOL isSw2 = fopAcM_isSwitch(this, getSwbit2());
+ if (!isSw && !isSw2) {
+ mDoorDirection = 0;
+ } else if (isSw) {
+ mDoorDirection = 1;
+ shape_angle.y = home.angle.y + 0x1555;
+ } else if (!isSw2) {
+ OS_REPORT("城下町押引扉:SW1,SW2共にONになっています!\n")
+ JUT_PANIC(235, "0");
+ } else {
+ mDoorDirection = -1;
+ shape_angle.y = home.angle.y - 0x1555;
+ }
+ initBaseMtx();
+ fopAcM_SetMtx(this, mModel->getBaseTRMtx());
+ mpBgW->SetPushPullCallback(PPCallBack);
+ fopAcM_setCullSizeBox(this, l_cull_box[0], l_cull_box[1], l_cull_box[2], l_cull_box[3],
+ l_cull_box[4], l_cull_box[5]);
+ return 1;
}
/* 80CAA14C-80CAA1BC 00032C 0070+00 1/0 0/0 0/0 .text CreateHeap__12daObjPDoor_cFv */
-void daObjPDoor_c::CreateHeap() {
- // NONMATCHING
+int daObjPDoor_c::CreateHeap() {
+ J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 5);
+ JUT_ASSERT(270, modelData != 0);
+ mModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084);
+ return mModel != NULL ? TRUE : FALSE;
}
/* 80CAA1BC-80CAA23C 00039C 0080+00 1/1 0/0 0/0 .text create1st__12daObjPDoor_cFv */
-void daObjPDoor_c::create1st() {
- // NONMATCHING
+int daObjPDoor_c::create1st() {
+ int rv = dComIfG_resLoad(&mPhase, l_arcName);
+ if (rv == cPhs_COMPLEATE_e) {
+ rv = MoveBGCreate(l_arcName, 8, NULL, 0x4230, NULL);
+ if (rv == cPhs_ERROR_e) {
+ return rv;
+ }
+ }
+ return rv;
}
/* 80CAA23C-80CAA290 00041C 0054+00 1/0 0/0 0/0 .text Execute__12daObjPDoor_cFPPA3_A4_f
*/
-void daObjPDoor_c::Execute(f32 (**param_0)[3][4]) {
- // NONMATCHING
+int daObjPDoor_c::Execute(Mtx** ppMtx) {
+ mode_proc_call();
+ *ppMtx = &mBgMtx;
+ setBaseMtx();
+ field_0x5b5 = 0;
+ return 1;
}
-/* ############################################################################################## */
-/* 80CAAB88-80CAAB94 -00001 000C+00 0/1 0/0 0/0 .data @3781 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_3781[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)modeWait__12daObjPDoor_cFv,
-};
-#pragma pop
-
-/* 80CAAB94-80CAABA0 -00001 000C+00 0/1 0/0 0/0 .data @3782 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* lit_3782[3] = {
- (void*)NULL,
- (void*)0xFFFFFFFF,
- (void*)modeRotate__12daObjPDoor_cFv,
-};
-#pragma pop
-
-/* 80CAABA0-80CAABB8 000054 0018+00 0/1 0/0 0/0 .data l_func$3780 */
-#pragma push
-#pragma force_active on
-SECTION_DATA static u8 l_func[24] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-#pragma pop
-
/* 80CAA290-80CAA31C 000470 008C+00 1/1 0/0 0/0 .text mode_proc_call__12daObjPDoor_cFv */
void daObjPDoor_c::mode_proc_call() {
- // NONMATCHING
+ static daObjPDoor_c::modeFunc l_func[2] = {
+ &daObjPDoor_c::modeWait,
+ &daObjPDoor_c::modeRotate,
+ };
+ (this->*(l_func[mMode]))();
}
/* 80CAA31C-80CAA354 0004FC 0038+00 1/1 0/0 0/0 .text init_modeWait__12daObjPDoor_cFv */
void daObjPDoor_c::init_modeWait() {
- // NONMATCHING
+ field_0x5ba = 0;
+ field_0x5b0 = -1;
+ for (int i = 0; i < 2; i++) {
+ field_0x5b6[i] = 0;
+ }
+ mMode = MODE_WAIT;
}
-/* ############################################################################################## */
-/* 80CAAB24-80CAAB28 000004 0004+00 1/1 0/0 0/0 .rodata @3942 */
-SECTION_RODATA static f32 const lit_3942 = 10.0f;
-COMPILER_STRIP_GATE(0x80CAAB24, &lit_3942);
-
-/* 80CAAB28-80CAAB30 000008 0008+00 1/2 0/0 0/0 .rodata @3944 */
-SECTION_RODATA static u8 const lit_3944[8] = {
- 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
-};
-COMPILER_STRIP_GATE(0x80CAAB28, &lit_3944);
-
/* 80CAA354-80CAA698 000534 0344+00 1/0 0/0 0/0 .text modeWait__12daObjPDoor_cFv */
void daObjPDoor_c::modeWait() {
- // NONMATCHING
+ daPy_py_c* player = daPy_getPlayerActorClass();
+ bool bVar3 = true;
+ int iVar6 = -1;
+ if (field_0x5b5 != 0) {
+ for (int i = 0; i < 2; i++) {
+ if (field_0x5b6[i] == (u8)(cLib_checkBit<int>(mPushPullLabel, dBgW_Base::PPLABEL_4) ? 0x23 : 0x23)) {
+ field_0x5b0 = i;
+ }
+ if (field_0x5b6[i] != 0) {
+ iVar6 = i;
+ }
+ }
+ if ((field_0x5b0 == 0 && mDoorDirection == 1) ||
+ (field_0x5b0 == 1 && mDoorDirection == -1))
+ {
+ field_0x5b0 = -1;
+ } else {
+ bVar3 = false;
+ }
+ bool bVar2 = true;
+ if ((iVar6 == 0 && mDoorDirection == 1) ||
+ (iVar6 == 1 && mDoorDirection == -1))
+ {
+ bVar2 = false;
+ }
+ if (bVar2) {
+ if (iVar6 == 0) {
+ cLib_addCalcAngleS2(&field_0x5bc, 500, 0x3c, 5);
+ } else {
+ cLib_addCalcAngleS2(&field_0x5bc, -500, 0x3c, 5);
+ }
+ field_0x5b4++;
+ f32 dVar8 = std::fabs(cM_ssin(0x3e0 * field_0x5b4));
+ field_0x5ba = ((field_0x5bc * dVar8) + 10.0f);
+ }
+ if (field_0x5b0 != -1) {
+ ((daPy_py_c*)dComIfGp_getPlayer(0))->onPushPullKeep();
+ init_modeRotate();
+ }
+ } else {
+ field_0x5bc = 0;
+ field_0x5b4 = 0;
+ cLib_addCalcAngleS(&field_0x5ba, 0, 4, 0x32, 5);
+ }
+ shape_angle.y = home.angle.y + (mDoorDirection << 14) / 3 + field_0x5ba;
+ if (bVar3) {
+ for (int i = 0; i < 2; i = i + 1) {
+ field_0x5b6[i] = 0;
+ }
+ field_0x5b0 = -1;
+ }
+ if (daPy_py_c::i_checkNowWolf()) {
+ cXyz cStack_44 = player->current.pos - current.pos;
+ mDoMtx_stack_c::YrotS(-shape_angle.y);
+ mDoMtx_stack_c::multVec(&cStack_44, &cStack_44);
+ if (cStack_44.z > 0.0f) {
+ if (mDoorDirection == 1) {
+ mpBgW->OffPushPullOk();
+ } else {
+ mpBgW->OnPushPullOk();
+ }
+ } else {
+ if (mDoorDirection == -1) {
+ mpBgW->OffPushPullOk();
+ } else {
+ mpBgW->OnPushPullOk();
+ }
+ }
+ } else {
+ mpBgW->OnPushPullOk();
+ }
}
/* 80CAA698-80CAA6B4 000878 001C+00 1/1 0/0 0/0 .text init_modeRotate__12daObjPDoor_cFv
*/
void daObjPDoor_c::init_modeRotate() {
- // NONMATCHING
+ field_0x5bc = 0;
+ field_0x5b4 = 0;
+ field_0x5b8 = 0;
+ mMode = MODE_ROTATE;
}
-/* ############################################################################################## */
-/* 80CAAB30-80CAAB34 000010 0004+00 0/1 0/0 0/0 .rodata @4051 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4051 = 5461.0f;
-COMPILER_STRIP_GATE(0x80CAAB30, &lit_4051);
-#pragma pop
-
-/* 80CAAB34-80CAAB38 000014 0004+00 0/1 0/0 0/0 .rodata @4052 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4052 = 60.0f;
-COMPILER_STRIP_GATE(0x80CAAB34, &lit_4052);
-#pragma pop
-
-/* 80CAAB38-80CAAB3C 000018 0004+00 0/1 0/0 0/0 .rodata @4053 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4053 = 1.0f;
-COMPILER_STRIP_GATE(0x80CAAB38, &lit_4053);
-#pragma pop
-
-/* 80CAAB3C-80CAAB40 00001C 0004+00 0/1 0/0 0/0 .rodata @4054 */
-#pragma push
-#pragma force_active on
-SECTION_RODATA static f32 const lit_4054 = -1.0f;
-COMPILER_STRIP_GATE(0x80CAAB3C, &lit_4054);
-#pragma pop
-
/* 80CAA6B4-80CAA968 000894 02B4+00 1/0 0/0 0/0 .text modeRotate__12daObjPDoor_cFv */
void daObjPDoor_c::modeRotate() {
- // NONMATCHING
+ daPy_getPlayerActorClass();
+ field_0x5b8++;
+ shape_angle.y = home.angle.y + (mDoorDirection << 14) / 3;
+ field_0x5ba = ((f32)field_0x5b8 / 60.0f) * 5461.0f;
+ if (field_0x5b0 == 1) {
+ field_0x5ba = -field_0x5ba;
+ }
+ shape_angle.y += field_0x5ba;
+ fopAcM_seStartLevel(this, Z2SE_OBJ_HYRULE_DR_MOVE, 0);
+ if (field_0x5b8 == 60) {
+ if (field_0x5b0 == 0) {
+ mDoorDirection++;
+ } else {
+ mDoorDirection--;
+ }
+ if (mDoorDirection == 1) {
+ fopAcM_onSwitch(this, getSwbit());
+ fopAcM_offSwitch(this, getSwbit2());
+ } else if (mDoorDirection == -1) {
+ fopAcM_offSwitch(this, getSwbit());
+ fopAcM_onSwitch(this, getSwbit2());
+ } else if (mDoorDirection == 0) {
+ fopAcM_offSwitch(this, getSwbit());
+ fopAcM_offSwitch(this, getSwbit2());
+ }
+ ((daPy_py_c*)dComIfGp_getPlayer(0))->offPushPullKeep();
+ dComIfGp_getVibration().StartShock(8, 0x1f, cXyz(0.0f, 1.0f, 0.0f));
+ fopAcM_seStart(this, Z2SE_OBJ_HYRULE_DR_STOP, 0);
+ init_modeWait();
+ }
}
/* 80CAA968-80CAAA0C 000B48 00A4+00 1/0 0/0 0/0 .text Draw__12daObjPDoor_cFv */
-void daObjPDoor_c::Draw() {
- // NONMATCHING
+int daObjPDoor_c::Draw() {
+ g_env_light.settingTevStruct(0x10, &current.pos, &tevStr);
+ g_env_light.setLightTevColorType_MAJI(mModel, &tevStr);
+ dComIfGd_setListBG();
+ mDoExt_modelUpdateDL(mModel);
+ dComIfGd_setList();
+ return 1;
}
/* 80CAAA0C-80CAAA4C 000BEC 0040+00 1/0 0/0 0/0 .text Delete__12daObjPDoor_cFv */
-void daObjPDoor_c::Delete() {
- // NONMATCHING
+int daObjPDoor_c::Delete() {
+ mpBgW->SetPushPullCallback(NULL);
+ dComIfG_resDelete(&mPhase, l_arcName);
+ return 1;
+}
+
+/* 80CAAA4C-80CAAAAC 000C2C 0060+00 1/0 0/0 0/0 .text daObjPDoor_create1st__FP12daObjPDoor_c */
+static int daObjPDoor_create1st(daObjPDoor_c* i_this) {
+ fopAcM_SetupActor(i_this, daObjPDoor_c);
+ return i_this->create1st();
+}
+
+/* 80CAAAAC-80CAAACC 000C8C 0020+00 1/0 0/0 0/0 .text daObjPDoor_MoveBGDelete__FP12daObjPDoor_c */
+static int daObjPDoor_MoveBGDelete(daObjPDoor_c* i_this) {
+ return i_this->MoveBGDelete();
+}
+
+/* 80CAAACC-80CAAAEC 000CAC 0020+00 1/0 0/0 0/0 .text daObjPDoor_MoveBGExecute__FP12daObjPDoor_c
+ */
+static int daObjPDoor_MoveBGExecute(daObjPDoor_c* i_this) {
+ return i_this->MoveBGExecute();
+}
+
+/* 80CAAAEC-80CAAB18 000CCC 002C+00 1/0 0/0 0/0 .text daObjPDoor_MoveBGDraw__FP12daObjPDoor_c */
+static int daObjPDoor_MoveBGDraw(daObjPDoor_c* i_this) {
+ return i_this->Draw();
}
-/* ############################################################################################## */
/* 80CAABB8-80CAABD8 -00001 0020+00 1/0 0/0 0/0 .data daObjPDoor_METHODS */
static actor_method_class daObjPDoor_METHODS = {
- (process_method_func)daObjPDoor_create1st__FP12daObjPDoor_c,
- (process_method_func)daObjPDoor_MoveBGDelete__FP12daObjPDoor_c,
- (process_method_func)daObjPDoor_MoveBGExecute__FP12daObjPDoor_c,
- 0,
- (process_method_func)daObjPDoor_MoveBGDraw__FP12daObjPDoor_c,
+ (process_method_func)daObjPDoor_create1st,
+ (process_method_func)daObjPDoor_MoveBGDelete,
+ (process_method_func)daObjPDoor_MoveBGExecute,
+ NULL,
+ (process_method_func)daObjPDoor_MoveBGDraw,
};
/* 80CAABD8-80CAAC08 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_PushDoor */
@@ -296,39 +322,5 @@ extern actor_process_profile_definition g_profile_Obj_PushDoor = {
fopAc_CULLBOX_CUSTOM_e, // cullType
};
-/* 80CAAC08-80CAAC30 0000BC 0028+00 1/1 0/0 0/0 .data __vt__12daObjPDoor_c */
-SECTION_DATA extern void* __vt__12daObjPDoor_c[10] = {
- (void*)NULL /* RTTI */,
- (void*)NULL,
- (void*)CreateHeap__12daObjPDoor_cFv,
- (void*)Create__12daObjPDoor_cFv,
- (void*)Execute__12daObjPDoor_cFPPA3_A4_f,
- (void*)Draw__12daObjPDoor_cFv,
- (void*)Delete__12daObjPDoor_cFv,
- (void*)IsDelete__16dBgS_MoveBgActorFv,
- (void*)ToFore__16dBgS_MoveBgActorFv,
- (void*)ToBack__16dBgS_MoveBgActorFv,
-};
-
-/* 80CAAA4C-80CAAAAC 000C2C 0060+00 1/0 0/0 0/0 .text daObjPDoor_create1st__FP12daObjPDoor_c */
-static void daObjPDoor_create1st(daObjPDoor_c* param_0) {
- // NONMATCHING
-}
-
-/* 80CAAAAC-80CAAACC 000C8C 0020+00 1/0 0/0 0/0 .text daObjPDoor_MoveBGDelete__FP12daObjPDoor_c */
-static void daObjPDoor_MoveBGDelete(daObjPDoor_c* param_0) {
- // NONMATCHING
-}
-
-/* 80CAAACC-80CAAAEC 000CAC 0020+00 1/0 0/0 0/0 .text daObjPDoor_MoveBGExecute__FP12daObjPDoor_c
- */
-static void daObjPDoor_MoveBGExecute(daObjPDoor_c* param_0) {
- // NONMATCHING
-}
-
-/* 80CAAAEC-80CAAB18 000CCC 002C+00 1/0 0/0 0/0 .text daObjPDoor_MoveBGDraw__FP12daObjPDoor_c */
-static void daObjPDoor_MoveBGDraw(daObjPDoor_c* param_0) {
- // NONMATCHING
-}
/* 80CAAB40-80CAAB40 000020 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
diff --git a/src/d/actor/d_a_player.cpp b/src/d/actor/d_a_player.cpp
index 59fc521ba4..c5becca15e 100644
--- a/src/d/actor/d_a_player.cpp
+++ b/src/d/actor/d_a_player.cpp
@@ -493,8 +493,8 @@ void daPy_py_c::forceRestartRoom(int param_0, u32 param_1, int param_2) {
/* 8015F478-8015F4B8 159DB8 0040+00 0/0 0/0 3/3 .text
* setFmChainPos__9daPy_py_cFP10fopAc_ac_cP4cXyzi */
-void daPy_py_c::setFmChainPos(fopAc_ac_c* param_0, cXyz* param_1, int param_2) {
- daAlink_getAlinkActorClass()->setFmChainPosFromOut(param_0, param_1, param_2);
+BOOL daPy_py_c::setFmChainPos(fopAc_ac_c* param_0, cXyz* param_1, int param_2) {
+ return daAlink_getAlinkActorClass()->setFmChainPosFromOut(param_0, param_1, param_2);
}
/* 8015F4B8-8015F4F0 159DF8 0038+00 0/0 0/0 1/1 .text cancelFmChainGrab__9daPy_py_cFv */