d_a_obj_smgdoor OK (#2692)

* d_a_obj_smgdoor OK

* symbols

* dEvtCnd_CANDOOR_e

* remove else
This commit is contained in:
Howard Luck 2025-09-24 10:51:01 -06:00 committed by GitHub
parent 46b1f0ee71
commit f932405784
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 433 additions and 399 deletions

View File

@ -44,10 +44,10 @@ _dtors = .dtors:0x00000000; // type:label scope:global
@4055 = .rodata:0x00000028; // type:object size:0x4 scope:local
@4056 = .rodata:0x0000002C; // type:object size:0x4 scope:local
@stringBase0 = .rodata:0x00000030; // type:object size:0x9F 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
lbl_622_data_10 = .data:0x00000010; // type:object size:0x10
_three$localstatic4$sqrtf = .data:0x00000010; // type:object size:0x8
_half$localstatic3$sqrtf = .data:0x00000018; // type:object size:0x8
l_arcName = .data:0x00000020; // type:object size:0x8 scope:global
l_bmd = .data:0x00000028; // type:object size:0x8 scope:global
l_dzb = .data:0x00000030; // type:object size:0x8 scope:global
@ -61,4 +61,4 @@ l_func$3923 = .data:0x00000094; // type:object size:0x24 scope:local
daObjSmgDoor_METHODS = .data:0x000000B8; // type:object size:0x20 scope:global
g_profile_Obj_SmgDoor = .data:0x000000D8; // type:object size:0x30 scope:global
__vt__14daObjSmgDoor_c = .data:0x00000108; // type:object size:0x28 scope:global
lbl_622_bss_0 = .bss:0x00000000; // type:object size:0x1 data:byte
init$1847 = .bss:0x00000000; // type:object size:0x1 data:byte

View File

@ -44,9 +44,10 @@ _dtors = .dtors:0x00000000; // type:label scope:global
@4055 = .rodata:0x00000028; // type:object size:0x4 scope:local
@4056 = .rodata:0x0000002C; // type:object size:0x4 scope:local
@stringBase0 = .rodata:0x00000030; // type:object size:0x9F scope:local data:string_table
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
lbl_622_data_10 = .data:0x00000010; // type:object size:0x10
_three$localstatic4$sqrtf = .data:0x00000010; // type:object size:0x8
_half$localstatic3$sqrtf = .data:0x00000018; // type:object size:0x8
l_arcName = .data:0x00000020; // type:object size:0x8 scope:global
l_bmd = .data:0x00000028; // type:object size:0x8 scope:global
l_dzb = .data:0x00000030; // type:object size:0x8 scope:global
@ -60,4 +61,4 @@ l_func$3923 = .data:0x00000094; // type:object size:0x24 scope:local
daObjSmgDoor_METHODS = .data:0x000000B8; // type:object size:0x20 scope:global
g_profile_Obj_SmgDoor = .data:0x000000D8; // type:object size:0x30 scope:global
__vt__14daObjSmgDoor_c = .data:0x00000108; // type:object size:0x28 scope:global
lbl_622_bss_0 = .bss:0x00000000; // type:object size:0x1 data:byte
init$1847 = .bss:0x00000000; // type:object size:0x1 data:byte

View File

@ -44,9 +44,10 @@ _dtors = .dtors:0x00000000; // type:label scope:global
@4055 = .rodata:0x00000028; // type:object size:0x4 scope:local
@4056 = .rodata:0x0000002C; // type:object size:0x4 scope:local
@stringBase0 = .rodata:0x00000030; // type:object size:0x9F scope:local data:string_table
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
lbl_622_data_10 = .data:0x00000010; // type:object size:0x10
_three$localstatic4$sqrtf = .data:0x00000010; // type:object size:0x8
_half$localstatic3$sqrtf = .data:0x00000018; // type:object size:0x8
l_arcName = .data:0x00000020; // type:object size:0x8 scope:global
l_bmd = .data:0x00000028; // type:object size:0x8 scope:global
l_dzb = .data:0x00000030; // type:object size:0x8 scope:global
@ -60,4 +61,4 @@ l_func$3923 = .data:0x00000094; // type:object size:0x24 scope:local
daObjSmgDoor_METHODS = .data:0x000000B8; // type:object size:0x20 scope:global
g_profile_Obj_SmgDoor = .data:0x000000D8; // type:object size:0x30 scope:global
__vt__14daObjSmgDoor_c = .data:0x00000108; // type:object size:0x28 scope:global
lbl_622_bss_0 = .bss:0x00000000; // type:object size:0x1 data:byte
init$1847 = .bss:0x00000000; // type:object size:0x1 data:byte

View File

@ -2148,7 +2148,7 @@ config.libs = [
ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_shield"),
ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_sm_door"),
ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_smallkey"),
ActorRel(NonMatching, "d_a_obj_smgdoor"),
ActorRel(MatchingFor("GZ2E01"), "d_a_obj_smgdoor"),
ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_smoke"),
ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_smtile"),
ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_smw_stone"),

View File

@ -1,28 +1,36 @@
#ifndef D_A_OBJ_SMGDOOR_H
#define D_A_OBJ_SMGDOOR_H
#include "d/d_bg_s_movebg_actor.h"
#include "f_op/f_op_actor_mng.h"
enum daObjSmgDoor_Action {
ACT_WAIT = 0,
ACT_OPEN = 1,
ACT_SETGOAL = 2,
ACT_SETPOS = 3,
ACT_SCENE_CHG = 4,
ACT_COLOR_CHG = 5
};
/**
* @ingroup actors-objects
* @class daObjSmgDoor_c
* @brief Sacred Meadow Grove Door
*
* @details
* @details The entrance / exit door to Temple of Time
*
*/
class daObjSmgDoor_c : public fopAc_ac_c {
class daObjSmgDoor_c : public dBgS_MoveBgActor {
public:
typedef void (daObjSmgDoor_c::*actionFunc)();
/* 80CDBB5C */ void initBaseMtx();
/* 80CDBBEC */ void setBaseMtx();
/* 80CDBD38 */ void Create();
/* 80CDBE1C */ void CreateHeap();
/* 80CDBED4 */ void create1st();
/* 80CDBFA4 */ void Execute(Mtx**);
/* 80CDBFF0 */ void getDemoAction();
/* 80CDC038 */ void demoProc();
/* 80CDC248 */ void openInit();
/* 80CDC378 */ void openProc();
/* 80CDBED4 */ int create1st();
/* 80CDBFF0 */ int getDemoAction();
/* 80CDC038 */ int demoProc();
/* 80CDC248 */ int openInit();
/* 80CDC378 */ int openProc();
/* 80CDC4AC */ void setGoal();
/* 80CDC548 */ void setPos();
/* 80CDC610 */ void sceneChange();
@ -30,16 +38,38 @@ public:
/* 80CDC700 */ void actionWaitEvent();
/* 80CDC790 */ void actionEvent();
/* 80CDC7F4 */ void actionDead();
/* 80CDC7F8 */ void checkArea();
/* 80CDC974 */ void checkOpen();
/* 80CDCA00 */ void Draw();
/* 80CDCAC4 */ void Delete();
/* 80CDC7F8 */ int checkArea();
/* 80CDC974 */ int checkOpen();
void setAction(u8 i_action) { mAction = i_action; }
u8 getEvId() { return fopAcM_GetParamBit(this, 0, 8); }
u8 getSwbit() { return fopAcM_GetParamBit(this, 20, 8); }
u8 getType() { return fopAcM_GetParamBit(this, 8, 4); }
u8 getNextSceneID() { return fopAcM_GetParamBit(this, 12, 8); }
/* 80CDBD38 */ virtual int Create();
/* 80CDBE1C */ virtual int CreateHeap();
/* 80CDBFA4 */ virtual int Execute(Mtx**);
/* 80CDCA00 */ virtual int Draw();
/* 80CDCAC4 */ virtual int Delete();
private:
/* 0x568 */ u8 field_0x568[0x5f4 - 0x568];
/* 0x5A0 */ request_of_phase_process_class mPhase;
/* 0x5A8 */ J3DModel* mpModel[2];
/* 0x5B0 */ s16 field_0x5b0;
/* 0x5B2 */ s16 field_0x5b2;
/* 0x5B4 */ int mStaffId;
/* 0x5B8 */ Mtx field_0x5b8;
/* 0x5E8 */ u8 mType;
/* 0x5E9 */ u8 field_0x5e9;
/* 0x5EA */ u8 mAction;
/* 0x5EB */ u8 mToolId;
/* 0x5EC */ s16 mEvId;
/* 0x5EE */ s16 field_0x5ee;
/* 0x5F0 */ s16 field_0x5f0;
/* 0x5F2 */ u16 field_0x5f2;
};
STATIC_ASSERT(sizeof(daObjSmgDoor_c) == 0x5f4);
#endif /* D_A_OBJ_SMGDOOR_H */

View File

@ -1,483 +1,485 @@
/**
* @file d_a_obj_smgdoor.cpp
*
*/
*
*/
#include "d/dolzel_rel.h"
#include "d/actor/d_a_obj_smgdoor.h"
#include "d/actor/d_a_player.h"
#include "d/d_meter2_info.h"
#include "d/d_s_play.h"
#include "dol2asm.h"
#ifdef DEBUG
class daObjSmgDoor_HIO_c : public mDoHIO_entry_c {
public:
daObjSmgDoor_HIO_c();
void genMessage(JORMContext*);
//
// Forward References:
//
public:
/* 0x06 */ u8 field_0x6;
};
extern "C" static void eventCallBack__FPvi();
extern "C" void initBaseMtx__14daObjSmgDoor_cFv();
extern "C" void setBaseMtx__14daObjSmgDoor_cFv();
extern "C" void Create__14daObjSmgDoor_cFv();
extern "C" void CreateHeap__14daObjSmgDoor_cFv();
extern "C" void create1st__14daObjSmgDoor_cFv();
extern "C" void Execute__14daObjSmgDoor_cFPPA3_A4_f();
extern "C" void getDemoAction__14daObjSmgDoor_cFv();
extern "C" void demoProc__14daObjSmgDoor_cFv();
extern "C" void openInit__14daObjSmgDoor_cFv();
extern "C" void openProc__14daObjSmgDoor_cFv();
extern "C" void setGoal__14daObjSmgDoor_cFv();
extern "C" void setPos__14daObjSmgDoor_cFv();
extern "C" void sceneChange__14daObjSmgDoor_cFv();
extern "C" void event_proc_call__14daObjSmgDoor_cFv();
extern "C" void actionWaitEvent__14daObjSmgDoor_cFv();
extern "C" void actionEvent__14daObjSmgDoor_cFv();
extern "C" void actionDead__14daObjSmgDoor_cFv();
extern "C" void checkArea__14daObjSmgDoor_cFv();
extern "C" void checkOpen__14daObjSmgDoor_cFv();
extern "C" void Draw__14daObjSmgDoor_cFv();
extern "C" void Delete__14daObjSmgDoor_cFv();
extern "C" static void daObjSmgDoor_create1st__FP14daObjSmgDoor_c();
extern "C" static void daObjSmgDoor_MoveBGDelete__FP14daObjSmgDoor_c();
extern "C" static void daObjSmgDoor_MoveBGExecute__FP14daObjSmgDoor_c();
extern "C" static void daObjSmgDoor_MoveBGDraw__FP14daObjSmgDoor_c();
extern "C" void func_80CDCBD0(void* _this, u8*);
extern "C" extern char const* const d_a_obj_smgdoor__stringBase0;
daObjSmgDoor_HIO_c l_HIO;
//
// External References:
//
daObjSmgDoor_HIO_c::daObjSmgDoor_HIO_c() {
field_0x6 = 0;
}
extern "C" void mDoMtx_YrotS__FPA4_fs();
extern "C" void mDoMtx_YrotM__FPA4_fs();
extern "C" void transS__14mDoMtx_stack_cFRC4cXyz();
extern "C" void transM__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 isSwitch__10dSv_info_cCFii();
extern "C" void getRes__14dRes_control_cFPCcPCcP11dRes_info_ci();
extern "C" void getObjectResName2Index__14dRes_control_cFPCcPCc();
extern "C" void setSkipProc__14dEvt_control_cFPvPFPvi_ii();
extern "C" void getEventIdx__16dEvent_manager_cFP10fopAc_ac_cPCcUc();
extern "C" void getMyStaffId__16dEvent_manager_cFPCcP10fopAc_ac_ci();
extern "C" void getIsAddvance__16dEvent_manager_cFi();
extern "C" void getMyActIdx__16dEvent_manager_cFiPCPCciii();
extern "C" void getMySubstanceP__16dEvent_manager_cFiPCci();
extern "C" void cutEnd__16dEvent_manager_cFi();
extern "C" void setGoal__16dEvent_manager_cFP4cXyz();
extern "C" void Release__4cBgSFP9dBgW_Base();
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 dKy_change_colpat__FUc();
extern "C" void __mi__4cXyzCFRC3Vec();
extern "C" void normalize__4cXyzFv();
extern "C" void ChkUsed__9cBgW_BgIdCFv();
extern "C" void cLib_chaseS__FPsss();
extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc();
extern "C" void __ptmf_scall();
extern "C" void _savegpr_27();
extern "C" void _savegpr_29();
extern "C" void _restgpr_27();
extern "C" void _restgpr_29();
extern "C" u8 now__14mDoMtx_stack_c[48];
extern "C" extern u8 g_meter2_info[248];
extern "C" u8 sincosTable___5JMath[65536];
extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */];
extern "C" extern u8 data_80CDCDF8[4];
//
// Declarations:
//
void daObjSmgDoor_HIO_c::genMessage(JORMContext* ctx) {
// Present & Past Door
ctx->genLabel("現在&過去の扉", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
// Check Display
ctx->genCheckBox("チェック表示", &field_0x6, 1, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18);
}
#endif
/* 80CDBB38-80CDBB5C 000078 0024+00 1/1 0/0 0/0 .text eventCallBack__FPvi */
static void eventCallBack(void* param_0, int param_1) {
// NONMATCHING
static int eventCallBack(void* a_this, int param_1) {
daObjSmgDoor_c* i_this = (daObjSmgDoor_c*)a_this;
i_this->sceneChange();
return 1;
}
/* 80CDBB5C-80CDBBEC 00009C 0090+00 1/1 0/0 0/0 .text initBaseMtx__14daObjSmgDoor_cFv */
void daObjSmgDoor_c::initBaseMtx() {
// NONMATCHING
mpModel[0]->setBaseScale(scale);
mpModel[1]->setBaseScale(scale);
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::YrotM(current.angle.y);
cMtx_copy(mDoMtx_stack_c::get(), field_0x5b8);
setBaseMtx();
}
/* ############################################################################################## */
/* 80CDCBF4-80CDCBF8 000000 0004+00 3/3 0/0 0/0 .rodata @3705 */
SECTION_RODATA static f32 const lit_3705 = -145.0f;
COMPILER_STRIP_GATE(0x80CDCBF4, &lit_3705);
/* 80CDCBF8-80CDCBFC 000004 0004+00 1/4 0/0 0/0 .rodata @3706 */
SECTION_RODATA static u8 const lit_3706[4] = {
0x00,
0x00,
0x00,
0x00,
};
COMPILER_STRIP_GATE(0x80CDCBF8, &lit_3706);
/* 80CDCBFC-80CDCC00 000008 0004+00 0/1 0/0 0/0 .rodata @3707 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3707 = 145.0f;
COMPILER_STRIP_GATE(0x80CDCBFC, &lit_3707);
#pragma pop
/* 80CDBBEC-80CDBD38 00012C 014C+00 2/2 0/0 0/0 .text setBaseMtx__14daObjSmgDoor_cFv */
void daObjSmgDoor_c::setBaseMtx() {
// NONMATCHING
cXyz cStack_18(-145.0f, 0.0f, 0.0f);
mDoMtx_stack_c::YrotS(current.angle.y);
mDoMtx_stack_c::multVec(&cStack_18, &cStack_18);
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::transM(cStack_18);
mDoMtx_stack_c::YrotM(field_0x5b0);
mDoMtx_stack_c::YrotM(current.angle.y);
mpModel[0]->setBaseTRMtx(mDoMtx_stack_c::get());
cStack_18.set(145.0f, 0.0f, 0.0f);
mDoMtx_stack_c::YrotS(current.angle.y);
mDoMtx_stack_c::multVec(&cStack_18, &cStack_18);
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::transM(cStack_18);
mDoMtx_stack_c::YrotM(field_0x5b2);
mDoMtx_stack_c::YrotM(0x7fff);
mDoMtx_stack_c::YrotM(current.angle.y);
mpModel[1]->setBaseTRMtx(mDoMtx_stack_c::get());
cMtx_copy(field_0x5b8, mBgMtx);
}
/* ############################################################################################## */
/* 80CDCC00-80CDCC04 00000C 0004+00 1/1 0/0 0/0 .rodata @3722 */
SECTION_RODATA static f32 const lit_3722 = 150.0f;
COMPILER_STRIP_GATE(0x80CDCC00, &lit_3722);
/* 80CDCC24-80CDCC24 000030 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
#pragma push
#pragma force_active on
SECTION_DEAD static char const* const stringBase_80CDCC24 = "A_SMGDoor";
SECTION_DEAD static char const* const stringBase_80CDCC2E = "A_SMKDoor";
SECTION_DEAD static char const* const stringBase_80CDCC38 = "A_SMGDoor.bmd";
SECTION_DEAD static char const* const stringBase_80CDCC46 = "A_SMKDoor.bmd";
SECTION_DEAD static char const* const stringBase_80CDCC54 = "A_SMGDoor.dzb";
SECTION_DEAD static char const* const stringBase_80CDCC62 = "A_SMKDoor.dzb";
SECTION_DEAD static char const* const stringBase_80CDCC70 = "NOW_DOOR_IN";
SECTION_DEAD static char const* const stringBase_80CDCC7C = "OLD_DOOR_IN";
#pragma pop
/* 80CDCCE4-80CDCCEC -00001 0008+00 3/4 0/0 0/0 .data l_arcName */
SECTION_DATA static void* l_arcName[2] = {
(void*)&d_a_obj_smgdoor__stringBase0,
(void*)(((char*)&d_a_obj_smgdoor__stringBase0) + 0xA),
};
static char* l_arcName[2] = {"A_SMGDoor", "A_SMKDoor"};
/* 80CDCCEC-80CDCCF4 -00001 0008+00 1/1 0/0 0/0 .data l_bmd */
SECTION_DATA static void* l_bmd[2] = {
(void*)(((char*)&d_a_obj_smgdoor__stringBase0) + 0x14),
(void*)(((char*)&d_a_obj_smgdoor__stringBase0) + 0x22),
static char* l_bmd[2] = {
"A_SMGDoor.bmd",
"A_SMKDoor.bmd",
};
/* 80CDCCF4-80CDCCFC -00001 0008+00 1/1 0/0 0/0 .data l_dzb */
SECTION_DATA static void* l_dzb[2] = {
(void*)(((char*)&d_a_obj_smgdoor__stringBase0) + 0x30),
(void*)(((char*)&d_a_obj_smgdoor__stringBase0) + 0x3E),
static char* l_dzb[2] = {
"A_SMGDoor.dzb",
"A_SMKDoor.dzb",
};
/* 80CDCCFC-80CDCD04 -00001 0008+00 0/1 0/0 0/0 .data l_eventName */
#pragma push
#pragma force_active on
SECTION_DATA static void* l_eventName[2] = {
(void*)(((char*)&d_a_obj_smgdoor__stringBase0) + 0x4C),
(void*)(((char*)&d_a_obj_smgdoor__stringBase0) + 0x58),
static char* l_eventName[2] = {
"NOW_DOOR_IN",
"OLD_DOOR_IN",
};
#pragma pop
/* 80CDCD04-80CDCD1C 000040 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, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC2, 0x48, 0x00, 0x00,
0x43, 0x48, 0x00, 0x00, 0x43, 0xC8, 0x00, 0x00, 0x42, 0x48, 0x00, 0x00,
};
#pragma pop
static Vec l_cull_box[2] = {{-200.0f, 0.0f, -50.0f}, {200.0f, 400.0f, 50.0f}};
/* 80CDBD38-80CDBE1C 000278 00E4+00 1/0 0/0 0/0 .text Create__14daObjSmgDoor_cFv */
void daObjSmgDoor_c::Create() {
// NONMATCHING
int daObjSmgDoor_c::Create() {
initBaseMtx();
fopAcM_SetMtx(this, field_0x5b8);
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);
attention_info.position.y += 150.0f;
eyePos.y += 150.0f;
attention_info.flags = fopAc_AttnFlag_DOOR_e;
setAction(ACT_WAIT);
eventInfo.setArchiveName(l_arcName[mType]);
mToolId = getEvId();
mEvId = (s16)dComIfGp_getEventManager().getEventIdx(this, l_eventName[mType], 0xFF);
OS_REPORT("mEvId<%d>mToolId<%d>\n", mEvId, mToolId);
OS_REPORT("swbit<%d>\n", getSwbit());
return 1;
}
/* 80CDBE1C-80CDBED4 00035C 00B8+00 1/0 0/0 0/0 .text CreateHeap__14daObjSmgDoor_cFv */
void daObjSmgDoor_c::CreateHeap() {
// NONMATCHING
int daObjSmgDoor_c::CreateHeap() {
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName[mType], l_bmd[mType]);
JUT_ASSERT(252, modelData != 0);
for (int i = 0; i < 2; i++) {
mpModel[i] = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084);
if (mpModel[i] == NULL)
return 0;
}
return 1;
}
/* 80CDBED4-80CDBFA4 000414 00D0+00 1/1 0/0 0/0 .text create1st__14daObjSmgDoor_cFv */
void daObjSmgDoor_c::create1st() {
// NONMATCHING
int daObjSmgDoor_c::create1st() {
mType = getType();
int phase = dComIfG_resLoad(&mPhase, l_arcName[mType]);
if (phase == cPhs_COMPLEATE_e) {
int dzb_id = dComIfG_getObjctResName2Index(l_arcName[mType], l_dzb[mType]);
JUT_ASSERT(287, dzb_id != -1);
phase = MoveBGCreate(l_arcName[mType], dzb_id, NULL, 0x1660, NULL);
if (phase == cPhs_ERROR_e) {
return phase;
}
}
#ifdef DEBUG
// Present or Past Door
l_HIO.entryHIO("現在or過去の扉");
#endif
return phase;
}
/* 80CDBFA4-80CDBFF0 0004E4 004C+00 1/0 0/0 0/0 .text Execute__14daObjSmgDoor_cFPPA3_A4_f
*/
void daObjSmgDoor_c::Execute(Mtx** param_0) {
// NONMATCHING
int daObjSmgDoor_c::Execute(Mtx** param_0) {
event_proc_call();
*param_0 = &mBgMtx;
setBaseMtx();
return 1;
}
/* ############################################################################################## */
/* 80CDCC24-80CDCC24 000030 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
#pragma push
#pragma force_active on
SECTION_DEAD static char const* const stringBase_80CDCC88 = "WAIT";
SECTION_DEAD static char const* const stringBase_80CDCC8D = "OPEN";
SECTION_DEAD static char const* const stringBase_80CDCC92 = "SETGOAL";
SECTION_DEAD static char const* const stringBase_80CDCC9A = "SETPOS";
SECTION_DEAD static char const* const stringBase_80CDCCA1 = "SCENE_CHG";
SECTION_DEAD static char const* const stringBase_80CDCCAB = "COLOR_CHG";
#pragma pop
/* 80CDCD1C-80CDCD34 -00001 0018+00 1/1 0/0 0/0 .data action_table$3763 */
SECTION_DATA static void* action_table[6] = {
(void*)(((char*)&d_a_obj_smgdoor__stringBase0) + 0x64),
(void*)(((char*)&d_a_obj_smgdoor__stringBase0) + 0x69),
(void*)(((char*)&d_a_obj_smgdoor__stringBase0) + 0x6E),
(void*)(((char*)&d_a_obj_smgdoor__stringBase0) + 0x76),
(void*)(((char*)&d_a_obj_smgdoor__stringBase0) + 0x7D),
(void*)(((char*)&d_a_obj_smgdoor__stringBase0) + 0x87),
};
/* 80CDBFF0-80CDC038 000530 0048+00 1/1 0/0 0/0 .text getDemoAction__14daObjSmgDoor_cFv
*/
void daObjSmgDoor_c::getDemoAction() {
// NONMATCHING
int daObjSmgDoor_c::getDemoAction() {
static char* action_table[6] = {
"WAIT", "OPEN", "SETGOAL", "SETPOS", "SCENE_CHG", "COLOR_CHG",
};
return dComIfGp_evmng_getMyActIdx(mStaffId, action_table, 6, 0, 0);
}
/* ############################################################################################## */
/* 80CDCC04-80CDCC08 000010 0004+00 3/3 0/0 0/0 .rodata @3825 */
SECTION_RODATA static f32 const lit_3825 = 1.0f;
COMPILER_STRIP_GATE(0x80CDCC04, &lit_3825);
/* 80CDCC08-80CDCC0C 000014 0004+00 3/3 0/0 0/0 .rodata @3826 */
SECTION_RODATA static f32 const lit_3826 = -1.0f;
COMPILER_STRIP_GATE(0x80CDCC08, &lit_3826);
/* 80CDCC24-80CDCC24 000030 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
#pragma push
#pragma force_active on
SECTION_DEAD static char const* const stringBase_80CDCCB5 = "smgdoor";
SECTION_DEAD static char const* const stringBase_80CDCCBD = "Timer";
#pragma pop
/* 80CDC038-80CDC248 000578 0210+00 1/1 0/0 0/0 .text demoProc__14daObjSmgDoor_cFv */
void daObjSmgDoor_c::demoProc() {
// NONMATCHING
int daObjSmgDoor_c::demoProc() {
daPy_py_c* player = daPy_getPlayerActorClass();
mStaffId = dComIfGp_evmng_getMyStaffId("smgdoor", 0, 0);
int demo_action = getDemoAction();
if (dComIfGp_evmng_getIsAddvance(mStaffId) != 0) {
switch (demo_action) {
case 0:
int* intP = dComIfGp_evmng_getMyIntegerP(mStaffId, "Timer");
if (intP == NULL) {
field_0x5e9 = 1;
} else {
field_0x5e9 = *intP;
}
break;
case 1:
openInit();
break;
case 2:
setGoal();
break;
case 5:
dKy_change_colpat(3);
field_0x5f2 = 0;
}
}
switch (demo_action) {
case 0:
if (cLib_calcTimer(&field_0x5e9) == 0) {
dComIfGp_evmng_cutEnd(mStaffId);
}
break;
case 1:
if (openProc() != 0) {
dComIfGp_evmng_cutEnd(mStaffId);
}
break;
case 4:
sceneChange();
break;
case 5:
if (field_0x5f2 == KREG_S(0)) {
fopAcM_seStart(this, Z2SE_OBJ_KAKO_DOOR_OP_LIGHT, 0);
OS_REPORT("LIGHT SE!\n");
dComIfGp_evmng_cutEnd(mStaffId);
}
field_0x5f2++;
break;
default:
dComIfGp_evmng_cutEnd(mStaffId);
}
return 0;
}
/* 80CDC248-80CDC378 000788 0130+00 1/1 0/0 0/0 .text openInit__14daObjSmgDoor_cFv */
void daObjSmgDoor_c::openInit() {
// NONMATCHING
int daObjSmgDoor_c::openInit() {
if (mpBgW != NULL && mpBgW->ChkUsed()) {
dComIfG_Bgsp().Release(mpBgW);
}
if (mType == 0) {
fopAcM_seStart(this, Z2SE_OBJ_KAKO_DOOR_OP_IN, 0);
} else if (mType == 1) {
fopAcM_seStart(this, Z2SE_OBJ_KAKO_DOOR_OP_OUT, 0);
}
field_0x5ee = 0;
field_0x5f0 = 0;
field_0x5b0 = 0;
field_0x5b2 = 0;
field_0x5f2 = 0;
return 1;
}
/* 80CDC378-80CDC4AC 0008B8 0134+00 1/1 0/0 0/0 .text openProc__14daObjSmgDoor_cFv */
void daObjSmgDoor_c::openProc() {
// NONMATCHING
}
int daObjSmgDoor_c::openProc() {
int ret = 0;
cLib_chaseS(&field_0x5ee, 0x3c, 3);
cLib_chaseS(&field_0x5f0, 0x96, field_0x5ee);
/* ############################################################################################## */
/* 80CDCC0C-80CDCC10 000018 0004+00 1/1 0/0 0/0 .rodata @3888 */
SECTION_RODATA static f32 const lit_3888 = 60.0f;
COMPILER_STRIP_GATE(0x80CDCC0C, &lit_3888);
switch (mType) {
case 0:
cLib_chaseS(&field_0x5b0, -0x5000, field_0x5f0);
ret = cLib_chaseS(&field_0x5b2, 0x5000, field_0x5f0);
break;
case 1:
cLib_chaseS(&field_0x5b0, 0x5000, field_0x5f0);
ret = cLib_chaseS(&field_0x5b2, -0x5000, field_0x5f0);
if (field_0x5f2 == 0x46) {
fopAcM_seStart(this, Z2SE_OBJ_KAKO_DOOR_OP_LIGHT, 0);
dKy_change_colpat(3);
OS_REPORT("COLPAT CHANGE!!!!\n");
}
field_0x5f2++;
}
return ret;
}
/* 80CDC4AC-80CDC548 0009EC 009C+00 1/1 0/0 0/0 .text setGoal__14daObjSmgDoor_cFv */
void daObjSmgDoor_c::setGoal() {
// NONMATCHING
cXyz cStack_18(0.0f, 0.0f, 60.0f);
if (mType == 1) {
cStack_18.set(0.0f, 0.0f, 0.0f);
}
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::YrotM(current.angle.y);
mDoMtx_stack_c::multVec(&cStack_18, &cStack_18);
dComIfGp_evmng_setGoal(&cStack_18);
}
/* ############################################################################################## */
/* 80CDCC10-80CDCC14 00001C 0004+00 0/1 0/0 0/0 .rodata @3906 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3906 = 300.0f;
COMPILER_STRIP_GATE(0x80CDCC10, &lit_3906);
#pragma pop
/* 80CDCC14-80CDCC18 000020 0004+00 0/1 0/0 0/0 .rodata @3907 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3907 = 250.0f;
COMPILER_STRIP_GATE(0x80CDCC14, &lit_3907);
#pragma pop
/* 80CDC548-80CDC610 000A88 00C8+00 1/1 0/0 0/0 .text setPos__14daObjSmgDoor_cFv */
void daObjSmgDoor_c::setPos() {
// NONMATCHING
daPy_py_c* player = daPy_getPlayerActorClass();
cXyz acStack_28(0.0f, 0.0f, 300.0f);
if (mType == 1) {
acStack_28.set(0.0f, 0.0f, 250.0f);
}
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::YrotM(current.angle.y);
mDoMtx_stack_c::multVec(&acStack_28, &acStack_28);
player->setPlayerPosAndAngle(&acStack_28, current.angle.y + 0x7fff, 0);
return;
}
/* 80CDC610-80CDC65C 000B50 004C+00 2/2 0/0 0/0 .text sceneChange__14daObjSmgDoor_cFv */
void daObjSmgDoor_c::sceneChange() {
// NONMATCHING
daPy_py_c* player = daPy_getPlayerActorClass();
player->onSceneChangeArea(getNextSceneID(), 0xff, 0);
// Present & Past Door: Scene Change Destination <%d>
OS_REPORT("現在&過去の扉:シーン切替先<%d>\n", getNextSceneID());
}
/* ############################################################################################## */
/* 80CDCD34-80CDCD40 -00001 000C+00 0/1 0/0 0/0 .data @3924 */
#pragma push
#pragma force_active on
SECTION_DATA static void* lit_3924[3] = {
(void*)NULL,
(void*)0xFFFFFFFF,
(void*)actionWaitEvent__14daObjSmgDoor_cFv,
};
#pragma pop
/* 80CDCD40-80CDCD4C -00001 000C+00 0/1 0/0 0/0 .data @3925 */
#pragma push
#pragma force_active on
SECTION_DATA static void* lit_3925[3] = {
(void*)NULL,
(void*)0xFFFFFFFF,
(void*)actionEvent__14daObjSmgDoor_cFv,
};
#pragma pop
/* 80CDCD4C-80CDCD58 -00001 000C+00 0/1 0/0 0/0 .data @3926 */
#pragma push
#pragma force_active on
SECTION_DATA static void* lit_3926[3] = {
(void*)NULL,
(void*)0xFFFFFFFF,
(void*)actionDead__14daObjSmgDoor_cFv,
};
#pragma pop
/* 80CDCD58-80CDCD7C 000094 0024+00 0/1 0/0 0/0 .data l_func$3923 */
#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
/* 80CDC65C-80CDC700 000B9C 00A4+00 1/1 0/0 0/0 .text event_proc_call__14daObjSmgDoor_cFv
*/
void daObjSmgDoor_c::event_proc_call() {
// NONMATCHING
static actionFunc l_func[] = {&daObjSmgDoor_c::actionWaitEvent, &daObjSmgDoor_c::actionEvent,
&daObjSmgDoor_c::actionDead};
(this->*(l_func[mAction]))();
}
/* 80CDC700-80CDC790 000C40 0090+00 1/0 0/0 0/0 .text actionWaitEvent__14daObjSmgDoor_cFv
*/
void daObjSmgDoor_c::actionWaitEvent() {
// NONMATCHING
if (eventInfo.checkCommandDoor()) {
attention_info.position.y = home.pos.y;
if (mType == 1) {
shape_angle.y += 0x7fff;
}
setAction(1);
setPos();
} else {
if (checkOpen() != 0) {
eventInfo.setEventId(mEvId);
eventInfo.setMapToolId(mToolId);
eventInfo.onCondition(dEvtCnd_CANDOOR_e);
}
}
}
/* 80CDC790-80CDC7F4 000CD0 0064+00 1/0 0/0 0/0 .text actionEvent__14daObjSmgDoor_cFv */
void daObjSmgDoor_c::actionEvent() {
// NONMATCHING
dMeter2Info_onGameStatus(2);
dComIfGp_getEvent().setSkipProc(this, eventCallBack, 0);
demoProc();
}
/* 80CDC7F4-80CDC7F8 000D34 0004+00 1/0 0/0 0/0 .text actionDead__14daObjSmgDoor_cFv */
void daObjSmgDoor_c::actionDead() {
/* empty function */
}
/* ############################################################################################## */
/* 80CDCC18-80CDCC1C 000024 0004+00 0/1 0/0 0/0 .rodata @4054 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_4054 = 62500.0f;
COMPILER_STRIP_GATE(0x80CDCC18, &lit_4054);
#pragma pop
/* 80CDCC1C-80CDCC20 000028 0004+00 0/1 0/0 0/0 .rodata @4055 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_4055 = 90000.0f;
COMPILER_STRIP_GATE(0x80CDCC1C, &lit_4055);
#pragma pop
/* 80CDCC20-80CDCC24 00002C 0004+00 0/1 0/0 0/0 .rodata @4056 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_4056 = 12100.0f;
COMPILER_STRIP_GATE(0x80CDCC20, &lit_4056);
#pragma pop
void daObjSmgDoor_c::actionDead() {}
/* 80CDC7F8-80CDC974 000D38 017C+00 1/1 0/0 0/0 .text checkArea__14daObjSmgDoor_cFv */
void daObjSmgDoor_c::checkArea() {
// NONMATCHING
int daObjSmgDoor_c::checkArea() {
fopAc_ac_c* player = dComIfGp_getPlayer(0);
cXyz player_to_door_vec;
cXyz player_attention_pos(player->attention_info.position);
player_attention_pos.y = player->current.pos.y;
player_to_door_vec = player_attention_pos - current.pos;
f32 sq_distance_xz = player_to_door_vec.abs2XZ();
cXyz door_forward_vec;
door_forward_vec.set(cM_ssin(home.angle.y), 0.0f, cM_scos(home.angle.y));
if (sq_distance_xz > 62500.0f) {
return 0;
}
player_to_door_vec.normalize();
f32 dot_product_scaled = player_to_door_vec.inprodXZ(door_forward_vec);
dot_product_scaled *= (sq_distance_xz * dot_product_scaled);
if (dot_product_scaled > 90000.0f) {
return 0;
}
if (sq_distance_xz - dot_product_scaled > 12100.0f) {
return 0;
}
if (abs((s16)(current.angle.y - player->current.angle.y)) < 0x5000) {
return 0;
}
return 1;
}
/* 80CDC974-80CDCA00 000EB4 008C+00 1/1 0/0 0/0 .text checkOpen__14daObjSmgDoor_cFv */
void daObjSmgDoor_c::checkOpen() {
// NONMATCHING
int daObjSmgDoor_c::checkOpen() {
if (getSwbit() != 0xff) {
if (fopAcM_isSwitch(this, getSwbit()) == 0) {
return 0;
}
}
if (daPy_py_c::checkNowWolf()) {
return 0;
}
if (checkArea() == 0) {
return 0;
}
return 1;
}
/* 80CDCA00-80CDCAC4 000F40 00C4+00 1/0 0/0 0/0 .text Draw__14daObjSmgDoor_cFv */
void daObjSmgDoor_c::Draw() {
// NONMATCHING
int daObjSmgDoor_c::Draw() {
g_env_light.settingTevStruct(0x10, &current.pos, &tevStr);
g_env_light.setLightTevColorType_MAJI(mpModel[0], &tevStr);
g_env_light.setLightTevColorType_MAJI(mpModel[1], &tevStr);
dComIfGd_setListBG();
mDoExt_modelUpdateDL(mpModel[0]);
mDoExt_modelUpdateDL(mpModel[1]);
dComIfGd_setList();
#ifdef DEBUG
if (l_HIO.field_0x6 != 0) {
mpBgW->CalcPlane();
}
#endif
return 1;
}
/* 80CDCAC4-80CDCB04 001004 0040+00 1/0 0/0 0/0 .text Delete__14daObjSmgDoor_cFv */
void daObjSmgDoor_c::Delete() {
// NONMATCHING
int daObjSmgDoor_c::Delete() {
dComIfG_resDelete(&mPhase, l_arcName[mType]);
#ifdef DEBUG
l_HIO.removeHIO();
#endif
return 1;
}
/* 80CDCB04-80CDCB64 001044 0060+00 1/0 0/0 0/0 .text daObjSmgDoor_create1st__FP14daObjSmgDoor_c
*/
static int daObjSmgDoor_create1st(daObjSmgDoor_c* i_this) {
fopAcM_SetupActor(i_this, daObjSmgDoor_c);
return i_this->create1st();
}
/* 80CDCB64-80CDCB84 0010A4 0020+00 1/0 0/0 0/0 .text
* daObjSmgDoor_MoveBGDelete__FP14daObjSmgDoor_c */
static int daObjSmgDoor_MoveBGDelete(daObjSmgDoor_c* i_this) {
return i_this->MoveBGDelete();
}
/* 80CDCB84-80CDCBA4 0010C4 0020+00 1/0 0/0 0/0 .text
* daObjSmgDoor_MoveBGExecute__FP14daObjSmgDoor_c */
static int daObjSmgDoor_MoveBGExecute(daObjSmgDoor_c* i_this) {
return i_this->MoveBGExecute();
}
/* 80CDCBA4-80CDCBD0 0010E4 002C+00 1/0 0/0 0/0 .text daObjSmgDoor_MoveBGDraw__FP14daObjSmgDoor_c
*/
static int daObjSmgDoor_MoveBGDraw(daObjSmgDoor_c* i_this) {
return i_this->MoveBGDraw();
}
/* ############################################################################################## */
/* 80CDCD7C-80CDCD9C -00001 0020+00 1/0 0/0 0/0 .data daObjSmgDoor_METHODS */
static actor_method_class daObjSmgDoor_METHODS = {
(process_method_func)daObjSmgDoor_create1st__FP14daObjSmgDoor_c,
(process_method_func)daObjSmgDoor_MoveBGDelete__FP14daObjSmgDoor_c,
(process_method_func)daObjSmgDoor_MoveBGExecute__FP14daObjSmgDoor_c,
0,
(process_method_func)daObjSmgDoor_MoveBGDraw__FP14daObjSmgDoor_c,
(process_method_func)daObjSmgDoor_create1st, (process_method_func)daObjSmgDoor_MoveBGDelete,
(process_method_func)daObjSmgDoor_MoveBGExecute, 0,
(process_method_func)daObjSmgDoor_MoveBGDraw,
};
/* 80CDCD9C-80CDCDCC -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_SmgDoor */
extern actor_process_profile_definition g_profile_Obj_SmgDoor = {
fpcLy_CURRENT_e, // mLayerID
3, // mListID
fpcPi_CURRENT_e, // mListPrio
PROC_Obj_SmgDoor, // mProcName
&g_fpcLf_Method.base, // sub_method
sizeof(daObjSmgDoor_c), // mSize
0, // mSizeOther
0, // mParameters
&g_fopAc_Method.base, // sub_method
553, // mPriority
&daObjSmgDoor_METHODS, // sub_method
0x00040100, // mStatus
fopAc_ACTOR_e, // mActorType
fopAc_CULLBOX_CUSTOM_e, // cullType
fpcLy_CURRENT_e, // mLayerID
3, // mListID
fpcPi_CURRENT_e, // mListPrio
PROC_Obj_SmgDoor, // mProcName
&g_fpcLf_Method.base, // sub_method
sizeof(daObjSmgDoor_c), // mSize
0, // mSizeOther
0, // mParameters
&g_fopAc_Method.base, // sub_method
553, // mPriority
&daObjSmgDoor_METHODS, // sub_method
0x00040100, // mStatus
fopAc_ACTOR_e, // mActorType
fopAc_CULLBOX_CUSTOM_e, // cullType
};
/* 80CDCDCC-80CDCDF4 000108 0028+00 1/1 0/0 0/0 .data __vt__14daObjSmgDoor_c */
SECTION_DATA extern void* __vt__14daObjSmgDoor_c[10] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)CreateHeap__14daObjSmgDoor_cFv,
(void*)Create__14daObjSmgDoor_cFv,
(void*)Execute__14daObjSmgDoor_cFPPA3_A4_f,
(void*)Draw__14daObjSmgDoor_cFv,
(void*)Delete__14daObjSmgDoor_cFv,
(void*)IsDelete__16dBgS_MoveBgActorFv,
(void*)ToFore__16dBgS_MoveBgActorFv,
(void*)ToBack__16dBgS_MoveBgActorFv,
};
/* 80CDCB04-80CDCB64 001044 0060+00 1/0 0/0 0/0 .text daObjSmgDoor_create1st__FP14daObjSmgDoor_c
*/
static void daObjSmgDoor_create1st(daObjSmgDoor_c* param_0) {
// NONMATCHING
}
/* 80CDCB64-80CDCB84 0010A4 0020+00 1/0 0/0 0/0 .text
* daObjSmgDoor_MoveBGDelete__FP14daObjSmgDoor_c */
static void daObjSmgDoor_MoveBGDelete(daObjSmgDoor_c* param_0) {
// NONMATCHING
}
/* 80CDCB84-80CDCBA4 0010C4 0020+00 1/0 0/0 0/0 .text
* daObjSmgDoor_MoveBGExecute__FP14daObjSmgDoor_c */
static void daObjSmgDoor_MoveBGExecute(daObjSmgDoor_c* param_0) {
// NONMATCHING
}
/* 80CDCBA4-80CDCBD0 0010E4 002C+00 1/0 0/0 0/0 .text daObjSmgDoor_MoveBGDraw__FP14daObjSmgDoor_c
*/
static void daObjSmgDoor_MoveBGDraw(daObjSmgDoor_c* param_0) {
// NONMATCHING
}
/* 80CDCBD0-80CDCBEC 001110 001C+00 1/1 0/0 0/0 .text cLib_calcTimer<Uc>__FPUc */
extern "C" void func_80CDCBD0(void* _this, u8* param_0) {
// NONMATCHING
}
/* 80CDCC24-80CDCC24 000030 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */