d_a_obj_amiShutter equivalent (#2342)

* init commit

* functions matching progress

* new inline function

added new inline function `OnRoofRegist` to cBgW class

* use of inline function

uses the inline function as in the debug version

* d_a_obj_amiShutter equivalent

* cleanup and field rename

* addressed PR comments
This commit is contained in:
Łukasz Starzyk 2025-03-23 21:29:10 +01:00 committed by GitHub
parent a4cdad86f4
commit 3f67b00c6e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 279 additions and 457 deletions

View File

@ -1834,7 +1834,7 @@ config.libs = [
ActorRel(Equivalent, "d_a_obj_Turara"),
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_TvCdlst"),
ActorRel(Equivalent, "d_a_obj_Y_taihou"), # weak func ordering.
ActorRel(NonMatching, "d_a_obj_amiShutter"),
ActorRel(Equivalent, "d_a_obj_amiShutter"), # function ordr
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_ari"),
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_automata"),
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_avalanche"),

View File

@ -1,8 +1,11 @@
#ifndef D_A_OBJ_AMISHUTTER_H
#define D_A_OBJ_AMISHUTTER_H
#include "d/d_bg_s_movebg_actor.h"
#include "d/d_event_lib.h"
#include "f_op/f_op_actor_mng.h"
/**
* @ingroup actors-objects
* @class daAmiShutter_c
@ -11,19 +14,37 @@
* @details
*
*/
class daAmiShutter_c : public fopAc_ac_c {
struct fakeAmiShutterPadding {
u8 padding[8];
};
class daAmiShutter_c : public dBgS_MoveBgActor, public fakeAmiShutterPadding, public dEvLib_callback_c {
public:
typedef void (daAmiShutter_c::*modeProc)();
enum Mode {
MODE_WAIT = 0,
MODE_WAIT_EVENT = 1,
MODE_CLOSE = 2,
MODE_CLOSE_EVENT = 3,
MODE_CLOSE_END = 4,
MODE_OPEN = 5
};
daAmiShutter_c(): dEvLib_callback_c(this) {}
/* 80BA22E8 */ ~daAmiShutter_c() {};
/* 80BA155C */ void setBaseMtx();
/* 80BA15E4 */ void CreateHeap();
/* 80BA1650 */ void create();
/* 80BA182C */ void Execute(f32 (**)[3][4]);
/* 80BA15E4 */ int CreateHeap();
/* 80BA1650 */ cPhs__Step create();
/* 80BA182C */ int Execute(Mtx**);
/* 80BA1888 */ void moveShutter();
/* 80BA1974 */ void playerAreaCheck();
/* 80BA1974 */ BOOL playerAreaCheck();
/* 80BA1B4C */ void init_modeWait();
/* 80BA1B58 */ void modeWait();
/* 80BA1BCC */ void init_modeWaitEvent();
/* 80BA1BD8 */ void modeWaitEvent();
/* 80BA1C90 */ void eventStart();
/* 80BA1C90 */ BOOL eventStart();
/* 80BA1CB4 */ void init_modeClose();
/* 80BA1D48 */ void modeClose();
/* 80BA1DCC */ void init_modeCloseEvent();
@ -32,22 +53,44 @@ public:
/* 80BA1F7C */ void modeCloseEnd();
/* 80BA1F80 */ void init_modeOpen();
/* 80BA2004 */ void modeOpen();
/* 80BA2080 */ void Draw();
/* 80BA2124 */ void Delete();
/* 80BA22E8 */ ~daAmiShutter_c();
/* 80BA2080 */ int Draw();
/* 80BA2124 */ int Delete();
u8 getType() { return fopAcM_GetParamBit(this, 16, 4); }
u8 getSwBit() { return fopAcM_GetParamBit(this, 8, 8); }
int getEvent() { return fopAcM_GetParamBit(this, 0, 8); }
bool isShutterOpen() { return mOpen; }
private:
/* 0x568 */ u8 field_0x568[0x5d9 - 0x568];
/* 0x5D9 */ bool mOpen;
/* 0x5b8 */ request_of_phase_process_class mPhaseReq;
/* 0x5c0 */ J3DModel* mpModel;
/* 0x5c4 */ u8 mMode;
/* 0x5c5 */ u8 mType;
/* 0x5c6 */ u8 mSwBit;
/* 0x5c7 */ u8 mSwitch;
/* 0x5c8 */ f32 mPosZ;
/* 0x5cc */ cXyz mPos;
/* 0x5d8 */ u8 mWaitTime;
/* 0x5d9 */ bool mOpen;
};
STATIC_ASSERT(sizeof(daAmiShutter_c) == 0x5dc);
class daAmiShutter_HIO_c {
struct daAmiShutter_HIO_c : public mDoHIO_entry_c {
/* 0x04 */ f32 mRange;
/* 0x08 */ f32 mMaxOpenSpeed;
/* 0x0c */ f32 mMaxCloseSpeed;
/* 0x10 */ u8 mWaitTime;
/* 0x11 */ u8 field_0x11;
/* 80BA14CC */ daAmiShutter_HIO_c();
/* 80BA21E0 */ ~daAmiShutter_HIO_c();
/* 80BA21E0 */ ~daAmiShutter_HIO_c() {};
void genMessage(JORMContext*);
};

View File

@ -221,6 +221,7 @@ public:
bool ChkFlush() { return field_0x91 & 8; }
void SetLock() { mFlags |= LOCK_e; }
void OffRoofRegist() { field_0x91 |= 0x4; }
void OnRoofRegist() { field_0x91 &= ~0x04; }
bool ChkRoofRegist() { return field_0x91 & 4;}
cBgD_Vtx_t* GetVtxTbl() const { return pm_vtx_tbl; }
int GetVtxNum() const { return pm_bgd->m_v_num; }

View File

@ -4,570 +4,349 @@
*/
#include "d/actor/d_a_obj_amiShutter.h"
#include "dol2asm.h"
//
// Forward References:
//
extern "C" void __ct__18daAmiShutter_HIO_cFv();
extern "C" void __dt__14mDoHIO_entry_cFv();
extern "C" void setBaseMtx__14daAmiShutter_cFv();
extern "C" void CreateHeap__14daAmiShutter_cFv();
extern "C" void create__14daAmiShutter_cFv();
extern "C" void Execute__14daAmiShutter_cFPPA3_A4_f();
extern "C" void moveShutter__14daAmiShutter_cFv();
extern "C" void playerAreaCheck__14daAmiShutter_cFv();
extern "C" void init_modeWait__14daAmiShutter_cFv();
extern "C" void modeWait__14daAmiShutter_cFv();
extern "C" void init_modeWaitEvent__14daAmiShutter_cFv();
extern "C" void modeWaitEvent__14daAmiShutter_cFv();
extern "C" void eventStart__14daAmiShutter_cFv();
extern "C" void init_modeClose__14daAmiShutter_cFv();
extern "C" void modeClose__14daAmiShutter_cFv();
extern "C" void init_modeCloseEvent__14daAmiShutter_cFv();
extern "C" void modeCloseEvent__14daAmiShutter_cFv();
extern "C" void init_modeCloseEnd__14daAmiShutter_cFv();
extern "C" void modeCloseEnd__14daAmiShutter_cFv();
extern "C" void init_modeOpen__14daAmiShutter_cFv();
extern "C" void modeOpen__14daAmiShutter_cFv();
extern "C" void Draw__14daAmiShutter_cFv();
extern "C" void Delete__14daAmiShutter_cFv();
extern "C" static void daAmiShutter_Draw__FP14daAmiShutter_c();
extern "C" static void daAmiShutter_Execute__FP14daAmiShutter_c();
extern "C" static void daAmiShutter_Delete__FP14daAmiShutter_c();
extern "C" static void daAmiShutter_Create__FP10fopAc_ac_c();
extern "C" void __dt__18daAmiShutter_HIO_cFv();
extern "C" void __sinit_d_a_obj_amiShutter_cpp();
extern "C" static void func_80BA2278();
extern "C" static void func_80BA2280();
extern "C" void __dt__17dEvLib_callback_cFv();
extern "C" bool eventStart__17dEvLib_callback_cFv();
extern "C" bool eventRun__17dEvLib_callback_cFv();
extern "C" bool eventEnd__17dEvLib_callback_cFv();
extern "C" void __dt__14daAmiShutter_cFv();
extern "C" extern char const* const d_a_obj_amiShutter__stringBase0;
//
// External References:
//
extern "C" void mDoMtx_ZXYrotM__FPA4_fsss();
extern "C" void mDoExt_modelUpdateDL__FP8J3DModel();
extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl();
extern "C" void __dt__10fopAc_ac_cFv();
extern "C" void fopAcM_setCullSizeBox2__FP10fopAc_ac_cP12J3DModelData();
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 isSwitch__10dSv_info_cCFii();
extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci();
extern "C" void eventUpdate__17dEvLib_callback_cFv();
extern "C" void orderEvent__17dEvLib_callback_cFiii();
extern "C" void dBgS_MoveBGProc_Typical__FP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz();
extern "C" void __ct__16dBgS_MoveBgActorFv();
extern "C" bool Create__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_addCalc__FPfffff();
extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc();
extern "C" void __dl__FPv();
extern "C" void __ptmf_scall();
extern "C" void _savegpr_28();
extern "C" void _restgpr_28();
extern "C" extern void* __vt__16dBgS_MoveBgActor[10];
extern "C" u8 now__14mDoMtx_stack_c[48];
extern "C" extern u8 g_dComIfG_gameInfo[122384];
extern "C" extern u8 struct_80450C98[4];
extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */];
extern "C" void __register_global_object();
#include "d/actor/d_a_player.h"
#include "c/c_damagereaction.h"
#include "d/d_bg_w.h"
//
// Declarations:
//
/* ############################################################################################## */
/* 80BA2390-80BA2394 000000 0004+00 5/5 0/0 0/0 .rodata @3655 */
SECTION_RODATA static f32 const lit_3655 = 70.0f;
COMPILER_STRIP_GATE(0x80BA2390, &lit_3655);
/* 80BA2394-80BA2398 000004 0004+00 1/1 0/0 0/0 .rodata @3656 */
SECTION_RODATA static f32 const lit_3656 = 400.0f;
COMPILER_STRIP_GATE(0x80BA2394, &lit_3656);
/* 80BA23DC-80BA23E8 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,
};
/* 80BA23E8-80BA23FC 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
/* 80BA23FC-80BA2408 -00001 000C+00 0/1 0/0 0/0 .data @3759 */
#pragma push
#pragma force_active on
SECTION_DATA static void* lit_3759[3] = {
(void*)NULL,
(void*)0xFFFFFFFF,
(void*)modeWait__14daAmiShutter_cFv,
};
#pragma pop
/* 80BA2408-80BA2414 -00001 000C+00 0/1 0/0 0/0 .data @3760 */
#pragma push
#pragma force_active on
SECTION_DATA static void* lit_3760[3] = {
(void*)NULL,
(void*)0xFFFFFFFF,
(void*)modeWaitEvent__14daAmiShutter_cFv,
};
#pragma pop
/* 80BA2414-80BA2420 -00001 000C+00 0/1 0/0 0/0 .data @3761 */
#pragma push
#pragma force_active on
SECTION_DATA static void* lit_3761[3] = {
(void*)NULL,
(void*)0xFFFFFFFF,
(void*)modeClose__14daAmiShutter_cFv,
};
#pragma pop
/* 80BA2420-80BA242C -00001 000C+00 0/1 0/0 0/0 .data @3762 */
#pragma push
#pragma force_active on
SECTION_DATA static void* lit_3762[3] = {
(void*)NULL,
(void*)0xFFFFFFFF,
(void*)modeCloseEvent__14daAmiShutter_cFv,
};
#pragma pop
/* 80BA242C-80BA2438 -00001 000C+00 0/1 0/0 0/0 .data @3763 */
#pragma push
#pragma force_active on
SECTION_DATA static void* lit_3763[3] = {
(void*)NULL,
(void*)0xFFFFFFFF,
(void*)modeCloseEnd__14daAmiShutter_cFv,
};
#pragma pop
/* 80BA2438-80BA2444 -00001 000C+00 0/1 0/0 0/0 .data @3764 */
#pragma push
#pragma force_active on
SECTION_DATA static void* lit_3764[3] = {
(void*)NULL,
(void*)0xFFFFFFFF,
(void*)modeOpen__14daAmiShutter_cFv,
};
#pragma pop
/* 80BA2444-80BA248C 000068 0048+00 0/1 0/0 0/0 .data mode_proc$3758 */
#pragma push
#pragma force_active on
SECTION_DATA static u8 mode_proc[72] = {
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, 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
/* 80BA248C-80BA24AC -00001 0020+00 1/0 0/0 0/0 .data l_daAmiShutter_Method */
static actor_method_class l_daAmiShutter_Method = {
(process_method_func)daAmiShutter_Create__FP10fopAc_ac_c,
(process_method_func)daAmiShutter_Delete__FP14daAmiShutter_c,
(process_method_func)daAmiShutter_Execute__FP14daAmiShutter_c,
0,
(process_method_func)daAmiShutter_Draw__FP14daAmiShutter_c,
};
/* 80BA24AC-80BA24DC -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_AmiShutter */
extern actor_process_profile_definition g_profile_Obj_AmiShutter = {
fpcLy_CURRENT_e, // mLayerID
3, // mListID
fpcPi_CURRENT_e, // mListPrio
PROC_Obj_AmiShutter, // mProcName
&g_fpcLf_Method.base, // sub_method
sizeof(daAmiShutter_c), // mSize
0, // mSizeOther
0, // mParameters
&g_fopAc_Method.base, // sub_method
521, // mPriority
&l_daAmiShutter_Method, // sub_method
0x00044000, // mStatus
fopAc_ACTOR_e, // mActorType
fopAc_CULLBOX_CUSTOM_e, // cullType
};
/* 80BA24DC-80BA24F4 000100 0018+00 3/3 0/0 0/0 .data __vt__17dEvLib_callback_c */
SECTION_DATA extern void* __vt__17dEvLib_callback_c[6] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__17dEvLib_callback_cFv,
(void*)eventStart__17dEvLib_callback_cFv,
(void*)eventRun__17dEvLib_callback_cFv,
(void*)eventEnd__17dEvLib_callback_cFv,
};
/* 80BA24F4-80BA253C 000118 0048+00 2/2 0/0 0/0 .data __vt__14daAmiShutter_c */
SECTION_DATA extern void* __vt__14daAmiShutter_c[18] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)CreateHeap__14daAmiShutter_cFv,
(void*)Create__16dBgS_MoveBgActorFv,
(void*)Execute__14daAmiShutter_cFPPA3_A4_f,
(void*)Draw__14daAmiShutter_cFv,
(void*)Delete__14daAmiShutter_cFv,
(void*)IsDelete__16dBgS_MoveBgActorFv,
(void*)ToFore__16dBgS_MoveBgActorFv,
(void*)ToBack__16dBgS_MoveBgActorFv,
(void*)NULL,
(void*)NULL,
(void*)func_80BA2280,
(void*)func_80BA2278,
(void*)eventRun__17dEvLib_callback_cFv,
(void*)eventEnd__17dEvLib_callback_cFv,
(void*)__dt__14daAmiShutter_cFv,
(void*)eventStart__14daAmiShutter_cFv,
};
/* 80BA253C-80BA2548 000160 000C+00 2/2 0/0 0/0 .data __vt__18daAmiShutter_HIO_c */
SECTION_DATA extern void* __vt__18daAmiShutter_HIO_c[3] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__18daAmiShutter_HIO_cFv,
};
/* 80BA2548-80BA2554 00016C 000C+00 3/3 0/0 0/0 .data __vt__14mDoHIO_entry_c */
SECTION_DATA extern void* __vt__14mDoHIO_entry_c[3] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__14mDoHIO_entry_cFv,
};
UNK_REL_DATA
/* 80BA14CC-80BA1514 0000EC 0048+00 1/1 0/0 0/0 .text __ct__18daAmiShutter_HIO_cFv */
daAmiShutter_HIO_c::daAmiShutter_HIO_c() {
// NONMATCHING
mMaxOpenSpeed = 70.0f;
mMaxCloseSpeed = 70.0f;
field_0x11 = 3;
mRange = 400.f;
mWaitTime = 0;
}
/* 80BA1514-80BA155C 000134 0048+00 1/0 0/0 0/0 .text __dt__14mDoHIO_entry_cFv */
// mDoHIO_entry_c::~mDoHIO_entry_c() {
extern "C" void __dt__14mDoHIO_entry_cFv() {
// NONMATCHING
#ifdef DEBUG
void daAmiShutter_HIO_c::genMessage(JORMContext* i_ctx) {
i_ctx->genSlider("open速度", &mMaxOpenSpeed, 0.1f, 1000.0f,
0, NULL, 0xffff, 0xffff, 512, 24);
i_ctx->genSlider("close速度", &mMaxCloseSpeed, 0.1f, 1000.0f,
0, NULL, 0xffff, 0xffff, 512, 24);
i_ctx->genSlider("range", &mRange, 0.1f, 1000.0f,
0, NULL, 0xffff, 0xffff, 512, 24);
i_ctx->genSlider("waitTime", &mWaitTime, 0, 255,
0, NULL, 0xffff, 0xffff, 512, 24);
}
#endif
/* 80BA256C-80BA2580 000014 0014+00 6/6 0/0 0/0 .bss l_HIO */
static const daAmiShutter_HIO_c l_HIO;
/* 80BA155C-80BA15E4 00017C 0088+00 2/2 0/0 0/0 .text setBaseMtx__14daAmiShutter_cFv */
void daAmiShutter_c::setBaseMtx() {
// NONMATCHING
mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z);
mDoMtx_stack_c::ZXYrotM(shape_angle.x, shape_angle.y, shape_angle.z);
mpModel->setBaseScale(scale);
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
}
/* ############################################################################################## */
/* 80BA23D4-80BA23D4 000044 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
#pragma push
#pragma force_active on
SECTION_DEAD static char const* const stringBase_80BA23D4 = "S_Zami";
#pragma pop
/* 80BA15E4-80BA1650 000204 006C+00 1/0 0/0 0/0 .text CreateHeap__14daAmiShutter_cFv */
void daAmiShutter_c::CreateHeap() {
// NONMATCHING
int daAmiShutter_c::CreateHeap() {
J3DModelData* modelData = (J3DModelData*) dComIfG_getObjectRes("S_Zami", 4);
JUT_ASSERT(167, modelData != 0);
mpModel = mDoExt_J3DModel__create(modelData,
J3DMdlFlag_Unk80000, 0x11000084);
if (mpModel == NULL) {
return 0;
}
return 1;
}
/* ############################################################################################## */
/* 80BA2398-80BA239C 000008 0004+00 1/1 0/0 0/0 .rodata @3739 */
SECTION_RODATA static f32 const lit_3739 = -800.0f;
COMPILER_STRIP_GATE(0x80BA2398, &lit_3739);
/* 80BA239C-80BA23A0 00000C 0004+00 1/2 0/0 0/0 .rodata @3740 */
SECTION_RODATA static f32 const lit_3740 = 600.0f;
COMPILER_STRIP_GATE(0x80BA239C, &lit_3740);
/* 80BA1650-80BA182C 000270 01DC+00 1/1 0/0 0/0 .text create__14daAmiShutter_cFv */
void daAmiShutter_c::create() {
// NONMATCHING
cPhs__Step daAmiShutter_c::create() {
fopAcM_SetupActor(this, daAmiShutter_c);
cPhs__Step phaseStep = (cPhs__Step) dComIfG_resLoad(&mPhaseReq, "S_Zami");
if (phaseStep == cPhs_COMPLEATE_e) {
cPhs__Step res = (cPhs__Step) MoveBGCreate("S_Zami", 7,
dBgS_MoveBGProc_Typical, 0x1a00, NULL);
if (res == cPhs_ERROR_e) {
phaseStep = cPhs_ERROR_e;
return phaseStep;
}
fopAcM_SetMtx(this, mpModel->getBaseTRMtx());
fopAcM_setCullSizeBox2(this, mpModel->getModelData());
mType = getType();
mPosZ = current.pos.z;
if (mType == 0 || mType == 1) {
if (mType == 0 && cDmr_SkipInfo != 0
&& daPy_getPlayerActorClass()->current.pos.y > -800.0f){
mMode = MODE_CLOSE_END;
} else {
mPos = current.pos;
current.pos.z -= 600.0f;
mOpen = true;
init_modeWaitEvent();
}
} else {
mSwBit = getSwBit();
mSwitch = fopAcM_isSwitch(this, mSwBit);
mOpen = false;
init_modeWait();
}
setBaseMtx();
#ifdef DEBUG
l_HIO.entryHIO("アミシャッター")
#endif
}
return phaseStep;
}
/* 80BA182C-80BA1888 00044C 005C+00 1/0 0/0 0/0 .text Execute__14daAmiShutter_cFPPA3_A4_f
*/
void daAmiShutter_c::Execute(f32 (**param_0)[3][4]) {
// NONMATCHING
int daAmiShutter_c::Execute(Mtx** i_mtx) {
eventUpdate();
moveShutter();
*i_mtx = &mpModel->getBaseTRMtx();
setBaseMtx();
return 1;
}
/* ############################################################################################## */
/* 80BA2560-80BA256C 000008 000C+00 1/1 0/0 0/0 .bss @3649 */
static u8 lit_3649[12];
/* 80BA256C-80BA2580 000014 0014+00 6/6 0/0 0/0 .bss l_HIO */
static u8 l_HIO[20];
/* 80BA2580-80BA2584 000028 0004+00 1/1 0/0 0/0 .bss None */
static u8 data_80BA2580[4];
/* 80BA1888-80BA1974 0004A8 00EC+00 1/1 0/0 0/0 .text moveShutter__14daAmiShutter_cFv */
void daAmiShutter_c::moveShutter() {
// NONMATCHING
static daAmiShutter_c::modeProc const mode_proc[6] = {
&daAmiShutter_c::modeWait,
&daAmiShutter_c::modeWaitEvent,
&daAmiShutter_c::modeClose,
&daAmiShutter_c::modeCloseEvent,
&daAmiShutter_c::modeCloseEnd,
&daAmiShutter_c::modeOpen,
};
(this->*mode_proc[mMode])();
}
/* ############################################################################################## */
/* 80BA23A0-80BA23A8 000010 0004+04 0/4 0/0 0/0 .rodata @3822 */
#pragma push
#pragma force_active on
SECTION_RODATA static u8 const lit_3822[4 + 4 /* padding */] = {
0x00,
0x00,
0x00,
0x00,
/* padding */
0x00,
0x00,
0x00,
0x00,
};
COMPILER_STRIP_GATE(0x80BA23A0, &lit_3822);
#pragma pop
/* 80BA23A8-80BA23B0 000018 0008+00 0/1 0/0 0/0 .rodata @3823 */
#pragma push
#pragma force_active on
SECTION_RODATA static u8 const lit_3823[8] = {
0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
COMPILER_STRIP_GATE(0x80BA23A8, &lit_3823);
#pragma pop
/* 80BA23B0-80BA23B8 000020 0008+00 0/1 0/0 0/0 .rodata @3824 */
#pragma push
#pragma force_active on
SECTION_RODATA static u8 const lit_3824[8] = {
0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
COMPILER_STRIP_GATE(0x80BA23B0, &lit_3824);
#pragma pop
/* 80BA23B8-80BA23C0 000028 0008+00 0/1 0/0 0/0 .rodata @3825 */
#pragma push
#pragma force_active on
SECTION_RODATA static u8 const lit_3825[8] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
COMPILER_STRIP_GATE(0x80BA23B8, &lit_3825);
#pragma pop
/* 80BA23C0-80BA23C4 000030 0004+00 0/1 0/0 0/0 .rodata @3826 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3826 = 50.0f;
COMPILER_STRIP_GATE(0x80BA23C0, &lit_3826);
#pragma pop
/* 80BA1974-80BA1B4C 000594 01D8+00 1/1 0/0 0/0 .text playerAreaCheck__14daAmiShutter_cFv
*/
void daAmiShutter_c::playerAreaCheck() {
// NONMATCHING
BOOL daAmiShutter_c::playerAreaCheck() {
BOOL inArea = FALSE;
if (mType == 0) {
fopAc_ac_c* player = dComIfGp_getPlayer(0);
cXyz posDiff = mPos - player->current.pos;
f32 distance = posDiff.absXZ();
if (distance >= l_HIO.mRange
&& player->current.pos.y > current.pos.y
&& player->current.pos.y < current.pos.y + 50.f){
inArea = TRUE;
}
} else if (dComIfGp_getLinkPlayer()->getFootOnGround()) {
inArea = TRUE;
}
return inArea;
}
/* 80BA1B4C-80BA1B58 00076C 000C+00 3/3 0/0 0/0 .text init_modeWait__14daAmiShutter_cFv
*/
void daAmiShutter_c::init_modeWait() {
// NONMATCHING
mMode = MODE_WAIT;
}
/* 80BA1B58-80BA1BCC 000778 0074+00 1/0 0/0 0/0 .text modeWait__14daAmiShutter_cFv */
void daAmiShutter_c::modeWait() {
// NONMATCHING
u8 isSwitch = fopAcM_isSwitch(this, mSwBit);
if (mSwitch != isSwitch) {
mSwitch = isSwitch;
mSwitch == FALSE ? init_modeClose() : init_modeOpen();
}
}
/* 80BA1BCC-80BA1BD8 0007EC 000C+00 1/1 0/0 0/0 .text init_modeWaitEvent__14daAmiShutter_cFv */
void daAmiShutter_c::init_modeWaitEvent() {
// NONMATCHING
mMode = MODE_WAIT_EVENT;
}
/* 80BA1BD8-80BA1C90 0007F8 00B8+00 1/0 0/0 0/0 .text modeWaitEvent__14daAmiShutter_cFv
*/
void daAmiShutter_c::modeWaitEvent() {
// NONMATCHING
if (playerAreaCheck() == TRUE) {
if (getEvent() != 0xff) {
if (mType == 0 && fopAcM_isSwitch(this, 4) == TRUE) {
eventStart();
} else {
orderEvent(getEvent(), 0xff, 1);
}
} else {
eventStart();
}
}
}
/* 80BA1C90-80BA1CB4 0008B0 0024+00 2/1 0/0 0/0 .text eventStart__14daAmiShutter_cFv */
void daAmiShutter_c::eventStart() {
// NONMATCHING
BOOL daAmiShutter_c::eventStart() {
init_modeCloseEvent();
return TRUE;
}
/* ############################################################################################## */
/* 80BA23C4-80BA23C8 000034 0004+00 3/6 0/0 0/0 .rodata @3890 */
SECTION_RODATA static f32 const lit_3890 = 1.0f;
COMPILER_STRIP_GATE(0x80BA23C4, &lit_3890);
/* 80BA23C8-80BA23CC 000038 0004+00 3/3 0/0 0/0 .rodata @3891 */
SECTION_RODATA static f32 const lit_3891 = -1.0f;
COMPILER_STRIP_GATE(0x80BA23C8, &lit_3891);
/* 80BA1CB4-80BA1D48 0008D4 0094+00 1/1 0/0 0/0 .text init_modeClose__14daAmiShutter_cFv
*/
void daAmiShutter_c::init_modeClose() {
// NONMATCHING
mDoAud_seStart(Z2SE_OBJ_NET_SHTR_CL, &current.pos, 0,
dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
mpBgW->OffRoofRegist();
mMode = MODE_CLOSE;
}
/* ############################################################################################## */
/* 80BA23CC-80BA23D0 00003C 0004+00 0/1 0/0 0/0 .rodata @3900 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3900 = 0.5f;
COMPILER_STRIP_GATE(0x80BA23CC, &lit_3900);
#pragma pop
/* 80BA1D48-80BA1DCC 000968 0084+00 1/0 0/0 0/0 .text modeClose__14daAmiShutter_cFv */
void daAmiShutter_c::modeClose() {
// NONMATCHING
f32 distance = cLib_addCalc(&current.pos.z, mPosZ, 0.5f,
l_HIO.mMaxCloseSpeed, 1.0f);
if (distance == 0.0f) {
mpBgW->OnRoofRegist();
mOpen = false;
init_modeWait();
}
}
/* 80BA1DCC-80BA1E60 0009EC 0094+00 1/1 0/0 0/0 .text init_modeCloseEvent__14daAmiShutter_cFv */
void daAmiShutter_c::init_modeCloseEvent() {
// NONMATCHING
mDoAud_seStart(Z2SE_OBJ_NET_L_SHTR_CL, &current.pos, 0,
dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
mWaitTime = l_HIO.mWaitTime;
mMode = MODE_CLOSE_EVENT;
}
/* ############################################################################################## */
/* 80BA23D0-80BA23D4 000040 0004+00 0/2 0/0 0/0 .rodata @3919 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3919 = 1.0f / 5.0f;
COMPILER_STRIP_GATE(0x80BA23D0, &lit_3919);
#pragma pop
/* 80BA1E60-80BA1EEC 000A80 008C+00 1/0 0/0 0/0 .text modeCloseEvent__14daAmiShutter_cFv
*/
void daAmiShutter_c::modeCloseEvent() {
// NONMATCHING
if (mWaitTime != 0) {
mWaitTime -= 1;
return;
}
f32 distance = cLib_addCalc(&current.pos.z, mPosZ, 0.2,
l_HIO.mMaxOpenSpeed, 1.0f);
if (distance == 0.0f) {
mOpen = false;
init_modeCloseEnd();
}
}
/* 80BA1EEC-80BA1F7C 000B0C 0090+00 1/1 0/0 0/0 .text init_modeCloseEnd__14daAmiShutter_cFv */
void daAmiShutter_c::init_modeCloseEnd() {
// NONMATCHING
if (mType == 0 && fopAcM_isSwitch(this, 4) == 0) {
daPy_getPlayerActorClass()->changeOriginalDemo();
daPy_getPlayerActorClass()->changeDemoMode(daPy_demo_c::DEMO_TURN_BACK_e,
0, 0,0);
}
mMode = MODE_CLOSE_END;
}
/* 80BA1F7C-80BA1F80 000B9C 0004+00 1/0 0/0 0/0 .text modeCloseEnd__14daAmiShutter_cFv */
void daAmiShutter_c::modeCloseEnd() {
/* empty function */
// EMPTY METHOD
}
/* 80BA1F80-80BA2004 000BA0 0084+00 1/1 0/0 0/0 .text init_modeOpen__14daAmiShutter_cFv
*/
void daAmiShutter_c::init_modeOpen() {
// NONMATCHING
mDoAud_seStart(Z2SE_OBJ_NET_SHTR_OP, &current.pos, 0,
dComIfGp_getReverb(fopAcM_GetRoomNo(this)));
mMode = MODE_OPEN;
}
/* 80BA2004-80BA2080 000C24 007C+00 1/0 0/0 0/0 .text modeOpen__14daAmiShutter_cFv */
void daAmiShutter_c::modeOpen() {
// NONMATCHING
f32 distance = cLib_addCalc(&current.pos.z, mPosZ - 600.0f, 0.2,
l_HIO.mMaxOpenSpeed, 1.0f);
if (distance == 0.0f) {
mOpen = true;
init_modeWait();
}
}
/* 80BA2080-80BA2124 000CA0 00A4+00 1/0 0/0 0/0 .text Draw__14daAmiShutter_cFv */
void daAmiShutter_c::Draw() {
// NONMATCHING
int daAmiShutter_c::Draw() {
g_env_light.settingTevStruct(16, &current.pos, &tevStr);
g_env_light.setLightTevColorType_MAJI(mpModel, &tevStr);
dComIfGd_setListBG();
mDoExt_modelUpdateDL(mpModel);
dComIfGd_setList();
return 1;
}
/* 80BA2124-80BA2154 000D44 0030+00 1/0 0/0 0/0 .text Delete__14daAmiShutter_cFv */
void daAmiShutter_c::Delete() {
// NONMATCHING
int daAmiShutter_c::Delete() {
dComIfG_resDelete(&mPhaseReq, "S_Zami");
#ifdef DEBUG
l_HIO.removeHIO();
#endif
return 1;
}
/* 80BA2154-80BA2180 000D74 002C+00 1/0 0/0 0/0 .text daAmiShutter_Draw__FP14daAmiShutter_c */
static void daAmiShutter_Draw(daAmiShutter_c* param_0) {
// NONMATCHING
int daAmiShutter_Draw(daAmiShutter_c* i_this) {
return i_this->MoveBGDraw();
}
/* 80BA2180-80BA21A0 000DA0 0020+00 1/0 0/0 0/0 .text daAmiShutter_Execute__FP14daAmiShutter_c */
static void daAmiShutter_Execute(daAmiShutter_c* param_0) {
// NONMATCHING
int daAmiShutter_Execute(daAmiShutter_c* i_this) {
return i_this->MoveBGExecute();
}
/* 80BA21A0-80BA21C0 000DC0 0020+00 1/0 0/0 0/0 .text daAmiShutter_Delete__FP14daAmiShutter_c */
static void daAmiShutter_Delete(daAmiShutter_c* param_0) {
// NONMATCHING
int daAmiShutter_Delete(daAmiShutter_c* i_this) {
fopAcM_GetID(i_this);
return i_this->MoveBGDelete();
}
/* 80BA21C0-80BA21E0 000DE0 0020+00 1/0 0/0 0/0 .text daAmiShutter_Create__FP10fopAc_ac_c
*/
static void daAmiShutter_Create(fopAc_ac_c* param_0) {
// NONMATCHING
int daAmiShutter_Create(fopAc_ac_c* i_this) {
fopAcM_GetID(i_this);
return static_cast<daAmiShutter_c*>(i_this)->create();
}
/* 80BA21E0-80BA223C 000E00 005C+00 2/1 0/0 0/0 .text __dt__18daAmiShutter_HIO_cFv */
daAmiShutter_HIO_c::~daAmiShutter_HIO_c() {
// NONMATCHING
}
/* 80BA248C-80BA24AC -00001 0020+00 1/0 0/0 0/0 .data l_daAmiShutter_Method */
actor_method_class l_daAmiShutter_Method = {
(process_method_func)daAmiShutter_Create,
(process_method_func)daAmiShutter_Delete,
(process_method_func)daAmiShutter_Execute,
NULL,
(process_method_func)daAmiShutter_Draw,
};
/* 80BA223C-80BA2278 000E5C 003C+00 0/0 1/0 0/0 .text __sinit_d_a_obj_amiShutter_cpp */
void __sinit_d_a_obj_amiShutter_cpp() {
// NONMATCHING
}
#pragma push
#pragma force_active on
REGISTER_CTORS(0x80BA223C, __sinit_d_a_obj_amiShutter_cpp);
#pragma pop
/* 80BA2278-80BA2280 000E98 0008+00 1/0 0/0 0/0 .text @1448@eventStart__14daAmiShutter_cFv */
static void func_80BA2278() {
// NONMATCHING
}
/* 80BA2280-80BA2288 000EA0 0008+00 1/0 0/0 0/0 .text @1448@__dt__14daAmiShutter_cFv */
static void func_80BA2280() {
// NONMATCHING
}
/* 80BA2288-80BA22D0 000EA8 0048+00 1/0 0/0 0/0 .text __dt__17dEvLib_callback_cFv */
// dEvLib_callback_c::~dEvLib_callback_c() {
extern "C" void __dt__17dEvLib_callback_cFv() {
// NONMATCHING
}
/* 80BA22D0-80BA22D8 000EF0 0008+00 1/0 0/0 0/0 .text eventStart__17dEvLib_callback_cFv
*/
// bool dEvLib_callback_c::eventStart()() {
extern "C" bool eventStart__17dEvLib_callback_cFv() {
return true;
}
/* 80BA22D8-80BA22E0 000EF8 0008+00 2/0 0/0 0/0 .text eventRun__17dEvLib_callback_cFv */
// bool dEvLib_callback_c::eventRun() {
extern "C" bool eventRun__17dEvLib_callback_cFv() {
return true;
}
/* 80BA22E0-80BA22E8 000F00 0008+00 2/0 0/0 0/0 .text eventEnd__17dEvLib_callback_cFv */
// bool dEvLib_callback_c::eventEnd() {
extern "C" bool eventEnd__17dEvLib_callback_cFv() {
return true;
}
/* 80BA22E8-80BA237C 000F08 0094+00 2/1 0/0 0/0 .text __dt__14daAmiShutter_cFv */
daAmiShutter_c::~daAmiShutter_c() {
// NONMATCHING
}
/* 80BA23D4-80BA23D4 000044 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
/* 80BA24AC-80BA24DC -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_AmiShutter */
extern actor_process_profile_definition g_profile_Obj_AmiShutter = {
fpcLy_CURRENT_e, // mLayerID
3, // mListID
fpcPi_CURRENT_e, // mListPrio
PROC_Obj_AmiShutter, // mProcName
&g_fpcLf_Method.base, // sub_method
sizeof(daAmiShutter_c), // mSize
0, // mSizeOther
0, // mParameters
&g_fopAc_Method.base, // sub_method
521, // mPriority
&l_daAmiShutter_Method, // sub_method
0x00044000, // mStatus
fopAc_ACTOR_e, // mActorType
fopAc_CULLBOX_CUSTOM_e, // cullType
};

View File

@ -60,8 +60,7 @@ static const Vec l_cull_box[4] = {
int daObjKJgjs_c::Create() {
fopAcM_SetMtx(this, mMtx[1]);
MTXCopy(mMtx[1], mpModel->mBaseTransformMtx);
dBgW* bgw_p = mpBgW;
bgw_p->field_0x91 |= 4;
mpBgW->OffRoofRegist();
if (!field_0x60c) {
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);