lv4bridge / lv4prwall done (#2728)

* lv4bridge / lv4prwall

* fix jp/pal
This commit is contained in:
TakaRikka
2025-10-07 10:42:10 -07:00
committed by GitHub
parent cefa7dedb8
commit 88c0769fc6
7 changed files with 458 additions and 567 deletions
+125 -314
View File
@@ -6,288 +6,196 @@
#include "d/dolzel_rel.h" // IWYU pragma: keep
#include "d/actor/d_a_obj_lv4bridge.h"
#include "dol2asm.h"
//
// Forward References:
//
extern "C" void initBaseMtx__13daObjLv4Brg_cFv();
extern "C" void setBaseMtx__13daObjLv4Brg_cFv();
extern "C" void Create__13daObjLv4Brg_cFv();
extern "C" void CreateHeap__13daObjLv4Brg_cFv();
extern "C" void create1st__13daObjLv4Brg_cFv();
extern "C" void Execute__13daObjLv4Brg_cFPPA3_A4_f();
extern "C" void action__13daObjLv4Brg_cFv();
extern "C" void mode_init_wait__13daObjLv4Brg_cFv();
extern "C" void mode_wait__13daObjLv4Brg_cFv();
extern "C" void mode_init_move__13daObjLv4Brg_cFv();
extern "C" void mode_move__13daObjLv4Brg_cFv();
extern "C" void mode_init_dead__13daObjLv4Brg_cFv();
extern "C" void mode_dead__13daObjLv4Brg_cFv();
extern "C" void eventStart__13daObjLv4Brg_cFv();
extern "C" void Draw__13daObjLv4Brg_cFv();
extern "C" void Delete__13daObjLv4Brg_cFv();
extern "C" static void daObjLv4Brg_create1st__FP13daObjLv4Brg_c();
extern "C" static void daObjLv4Brg_MoveBGDelete__FP13daObjLv4Brg_c();
extern "C" static void daObjLv4Brg_MoveBGExecute__FP13daObjLv4Brg_c();
extern "C" static void daObjLv4Brg_MoveBGDraw__FP13daObjLv4Brg_c();
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__13daObjLv4Brg_cFv();
extern "C" static void func_80C63158();
extern "C" static void func_80C63160();
extern "C" extern char const* const d_a_obj_lv4bridge__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 transM__14mDoMtx_stack_cFRC4cXyz();
extern "C" void mDoExt_modelUpdateDL__FP8J3DModel();
extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl();
extern "C" void __dt__10fopAc_ac_cFv();
extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc();
extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc();
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 StartShock__12dVibration_cFii4cXyz();
extern "C" void StartQuake__12dVibration_cFii4cXyz();
extern "C" void StopQuake__12dVibration_cFi();
extern "C" void dBgS_MoveBGProc_TypicalRotY__FP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz();
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 cLib_chaseF__FPfff();
extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc();
extern "C" void seStartLevel__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc();
extern "C" void __dl__FPv();
extern "C" void __ptmf_scall();
extern "C" void _savegpr_29();
extern "C" void _restgpr_29();
extern "C" extern void* __vt__16dBgS_MoveBgActor[10];
extern "C" u8 now__14mDoMtx_stack_c[48];
extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */];
extern "C" extern u8 data_80C632B8[4];
//
// Declarations:
//
/* 80C62878-80C628B4 000078 003C+00 1/1 0/0 0/0 .text initBaseMtx__13daObjLv4Brg_cFv */
void daObjLv4Brg_c::initBaseMtx() {
// NONMATCHING
mpModel->setBaseScale(scale);
setBaseMtx();
}
/* ############################################################################################## */
/* 80C63170-80C63174 000000 0004+00 6/6 0/0 0/0 .rodata @3653 */
SECTION_RODATA static u8 const lit_3653[4] = {
0x00,
0x00,
0x00,
0x00,
};
COMPILER_STRIP_GATE(0x80C63170, &lit_3653);
/* 80C63174-80C63178 000004 0004+00 0/1 0/0 0/0 .rodata @3654 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3654 = 1700.0f;
COMPILER_STRIP_GATE(0x80C63174, &lit_3654);
#pragma pop
/* 80C63178-80C6317C 000008 0004+00 0/1 0/0 0/0 .rodata @3655 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3655 = -5050.0f;
COMPILER_STRIP_GATE(0x80C63178, &lit_3655);
#pragma pop
/* 80C628B4-80C62994 0000B4 00E0+00 2/2 0/0 0/0 .text setBaseMtx__13daObjLv4Brg_cFv */
void daObjLv4Brg_c::setBaseMtx() {
// NONMATCHING
}
cXyz sp14(0.0f, 0.0f, field_0x5bc);
mDoMtx_stack_c::YrotS(shape_angle.y);
mDoMtx_stack_c::multVec(&sp14, &sp14);
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::transM(sp14);
mDoMtx_stack_c::YrotM(shape_angle.y);
/* ############################################################################################## */
/* 80C6317C-80C63180 00000C 0004+00 1/2 0/0 0/0 .rodata @3676 */
SECTION_RODATA static f32 const lit_3676 = 2000.0f;
COMPILER_STRIP_GATE(0x80C6317C, &lit_3676);
cXyz sp8(0.0f, 1700.0f, -5050.0f);
mDoMtx_stack_c::multVec(&sp8, &field_0x5c4);
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
MTXCopy(mDoMtx_stack_c::get(), mBgMtx);
}
/* 80C62994-80C62A2C 000194 0098+00 1/0 0/0 0/0 .text Create__13daObjLv4Brg_cFv */
void daObjLv4Brg_c::Create() {
// NONMATCHING
int daObjLv4Brg_c::Create() {
if (fopAcM_isSwitch(this, getSwbit())) {
field_0x5bc = 2000.0f;
mode_init_dead();
} else {
field_0x5bc = 0.0f;
mode_init_wait();
}
initBaseMtx();
fopAcM_SetMtx(this, mpModel->getBaseTRMtx());
MoveBGExecute();
return 1;
}
/* ############################################################################################## */
/* 80C63190-80C63190 000020 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
#pragma push
#pragma force_active on
SECTION_DEAD static char const* const stringBase_80C63190 = "Obj_l4brg";
#pragma pop
/* 80C631BC-80C631C0 -00001 0004+00 3/3 0/0 0/0 .data l_arcName */
SECTION_DATA static void* l_arcName = (void*)&d_a_obj_lv4bridge__stringBase0;
static char* l_arcName = "Obj_l4brg";
/* 80C62A2C-80C62A9C 00022C 0070+00 1/0 0/0 0/0 .text CreateHeap__13daObjLv4Brg_cFv */
void daObjLv4Brg_c::CreateHeap() {
// NONMATCHING
int daObjLv4Brg_c::CreateHeap() {
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 4);
JUT_ASSERT(170, modelData != 0);
mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084);
if (mpModel == NULL) {
return 0;
}
return 1;
}
/* 80C62A9C-80C62B20 00029C 0084+00 1/1 0/0 0/0 .text create1st__13daObjLv4Brg_cFv */
void daObjLv4Brg_c::create1st() {
// NONMATCHING
int daObjLv4Brg_c::create1st() {
int phase_state = dComIfG_resLoad(&mPhase, l_arcName);
if (phase_state == cPhs_COMPLEATE_e) {
phase_state = MoveBGCreate(l_arcName, 7, dBgS_MoveBGProc_TypicalRotY, 0x2260, NULL);
if (phase_state == cPhs_ERROR_e) {
return phase_state;
}
}
return phase_state;
}
/* 80C62B20-80C62B6C 000320 004C+00 1/0 0/0 0/0 .text Execute__13daObjLv4Brg_cFPPA3_A4_f
*/
void daObjLv4Brg_c::Execute(Mtx** param_0) {
// NONMATCHING
int daObjLv4Brg_c::Execute(Mtx** param_0) {
action();
*param_0 = &mBgMtx;
setBaseMtx();
return 1;
}
/* ############################################################################################## */
/* 80C631C0-80C631CC -00001 000C+00 0/1 0/0 0/0 .data @3702 */
#pragma push
#pragma force_active on
SECTION_DATA static void* lit_3702[3] = {
(void*)NULL,
(void*)0xFFFFFFFF,
(void*)mode_wait__13daObjLv4Brg_cFv,
};
#pragma pop
/* 80C631CC-80C631D8 -00001 000C+00 0/1 0/0 0/0 .data @3703 */
#pragma push
#pragma force_active on
SECTION_DATA static void* lit_3703[3] = {
(void*)NULL,
(void*)0xFFFFFFFF,
(void*)mode_move__13daObjLv4Brg_cFv,
};
#pragma pop
/* 80C631D8-80C631E4 -00001 000C+00 0/1 0/0 0/0 .data @3704 */
#pragma push
#pragma force_active on
SECTION_DATA static void* lit_3704[3] = {
(void*)NULL,
(void*)0xFFFFFFFF,
(void*)mode_dead__13daObjLv4Brg_cFv,
};
#pragma pop
/* 80C631E4-80C63208 000048 0024+00 0/1 0/0 0/0 .data l_func$3701 */
#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
/* 80C62B6C-80C62C28 00036C 00BC+00 1/1 0/0 0/0 .text action__13daObjLv4Brg_cFv */
void daObjLv4Brg_c::action() {
// NONMATCHING
static void (daObjLv4Brg_c::*l_func[])() = {
&daObjLv4Brg_c::mode_wait,
&daObjLv4Brg_c::mode_move,
&daObjLv4Brg_c::mode_dead,
};
(this->*l_func[mMode])();
eventUpdate();
}
/* 80C62C28-80C62C34 000428 000C+00 1/1 0/0 0/0 .text mode_init_wait__13daObjLv4Brg_cFv
*/
void daObjLv4Brg_c::mode_init_wait() {
// NONMATCHING
mMode = 0;
}
/* ############################################################################################## */
/* 80C63180-80C63184 000010 0004+00 2/3 0/0 0/0 .rodata @3740 */
SECTION_RODATA static f32 const lit_3740 = 1.0f;
COMPILER_STRIP_GATE(0x80C63180, &lit_3740);
/* 80C62C34-80C62CE4 000434 00B0+00 1/0 0/0 0/0 .text mode_wait__13daObjLv4Brg_cFv */
void daObjLv4Brg_c::mode_wait() {
// NONMATCHING
if (fopAcM_isSwitch(this, getSwbit())) {
if (getEvID() != 0xFF) {
orderEvent(getEvID(), 0xFF, 1);
return;
}
dComIfGp_getVibration().StartQuake(4, 0xF, cXyz(0.0f, 1.0f, 0.0f));
mode_init_move();
}
}
/* 80C62CE4-80C62CFC 0004E4 0018+00 2/2 0/0 0/0 .text mode_init_move__13daObjLv4Brg_cFv
*/
void daObjLv4Brg_c::mode_init_move() {
// NONMATCHING
speed.y = 0.0f;
mMode = 1;
}
/* ############################################################################################## */
/* 80C63184-80C63188 000014 0004+00 0/1 0/0 0/0 .rodata @3766 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3766 = -1.0f;
COMPILER_STRIP_GATE(0x80C63184, &lit_3766);
#pragma pop
/* 80C63188-80C6318C 000018 0004+00 0/1 0/0 0/0 .rodata @3767 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3767 = 20.0f;
COMPILER_STRIP_GATE(0x80C63188, &lit_3767);
#pragma pop
/* 80C6318C-80C63190 00001C 0004+00 0/1 0/0 0/0 .rodata @3768 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3768 = 2.0f;
COMPILER_STRIP_GATE(0x80C6318C, &lit_3768);
#pragma pop
/* 80C62CFC-80C62E24 0004FC 0128+00 1/0 0/0 0/0 .text mode_move__13daObjLv4Brg_cFv */
void daObjLv4Brg_c::mode_move() {
// NONMATCHING
mDoAud_seStartLevel(Z2SE_OBJ_DS_END_BRG, &field_0x5c4, 0, 0);
cLib_chaseF(&speed.y, 20.0f, 2.0f);
if (cLib_chaseF(&field_0x5bc, 2000.0f, speed.y)) {
mDoAud_seStart(Z2SE_OBJ_DS_END_BRG_ST, &field_0x5c4, 0, 0);
dComIfGp_getVibration().StopQuake(0x1F);
dComIfGp_getVibration().StartShock(VIBMODE_S_POWER8, 0x1F, cXyz(0.0f, 1.0f, 0.0f));
mode_init_dead();
}
}
/* 80C62E24-80C62E30 000624 000C+00 2/2 0/0 0/0 .text mode_init_dead__13daObjLv4Brg_cFv
*/
void daObjLv4Brg_c::mode_init_dead() {
// NONMATCHING
mMode = 2;
}
/* 80C62E30-80C62E34 000630 0004+00 1/0 0/0 0/0 .text mode_dead__13daObjLv4Brg_cFv */
void daObjLv4Brg_c::mode_dead() {
/* empty function */
}
void daObjLv4Brg_c::mode_dead() {}
/* 80C62E34-80C62EA0 000634 006C+00 2/1 0/0 0/0 .text eventStart__13daObjLv4Brg_cFv */
void daObjLv4Brg_c::eventStart() {
// NONMATCHING
bool daObjLv4Brg_c::eventStart() {
dComIfGp_getVibration().StartQuake(4, 0xF, cXyz(0.0f, 1.0f, 0.0f));
mode_init_move();
return true;
}
/* 80C62EA0-80C62F44 0006A0 00A4+00 1/0 0/0 0/0 .text Draw__13daObjLv4Brg_cFv */
void daObjLv4Brg_c::Draw() {
// NONMATCHING
int daObjLv4Brg_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;
}
/* 80C62F44-80C62F78 000744 0034+00 1/0 0/0 0/0 .text Delete__13daObjLv4Brg_cFv */
void daObjLv4Brg_c::Delete() {
// NONMATCHING
int daObjLv4Brg_c::Delete() {
dComIfG_resDelete(&mPhase, l_arcName);
return 1;
}
/* 80C62F78-80C62FF8 000778 0080+00 1/0 0/0 0/0 .text daObjLv4Brg_create1st__FP13daObjLv4Brg_c */
static int daObjLv4Brg_create1st(daObjLv4Brg_c* i_this) {
fopAcM_SetupActor(i_this, daObjLv4Brg_c);
return i_this->create1st();
}
/* 80C62FF8-80C63018 0007F8 0020+00 1/0 0/0 0/0 .text daObjLv4Brg_MoveBGDelete__FP13daObjLv4Brg_c
*/
static int daObjLv4Brg_MoveBGDelete(daObjLv4Brg_c* i_this) {
return i_this->MoveBGDelete();
}
/* 80C63018-80C63038 000818 0020+00 1/0 0/0 0/0 .text daObjLv4Brg_MoveBGExecute__FP13daObjLv4Brg_c
*/
static int daObjLv4Brg_MoveBGExecute(daObjLv4Brg_c* i_this) {
return i_this->MoveBGExecute();
}
/* 80C63038-80C63064 000838 002C+00 1/0 0/0 0/0 .text daObjLv4Brg_MoveBGDraw__FP13daObjLv4Brg_c */
static int daObjLv4Brg_MoveBGDraw(daObjLv4Brg_c* i_this) {
return i_this->MoveBGDraw();
}
/* ############################################################################################## */
/* 80C63208-80C63228 -00001 0020+00 1/0 0/0 0/0 .data daObjLv4Brg_METHODS */
static actor_method_class daObjLv4Brg_METHODS = {
(process_method_func)daObjLv4Brg_create1st__FP13daObjLv4Brg_c,
(process_method_func)daObjLv4Brg_MoveBGDelete__FP13daObjLv4Brg_c,
(process_method_func)daObjLv4Brg_MoveBGExecute__FP13daObjLv4Brg_c,
(process_method_func)daObjLv4Brg_create1st,
(process_method_func)daObjLv4Brg_MoveBGDelete,
(process_method_func)daObjLv4Brg_MoveBGExecute,
0,
(process_method_func)daObjLv4Brg_MoveBGDraw__FP13daObjLv4Brg_c,
(process_method_func)daObjLv4Brg_MoveBGDraw,
};
/* 80C63228-80C63258 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_Lv4Bridge */
@@ -307,100 +215,3 @@ extern actor_process_profile_definition g_profile_Obj_Lv4Bridge = {
fopAc_ACTOR_e, // mActorType
fopAc_CULLBOX_CUSTOM_e, // cullType
};
/* 80C63258-80C63270 0000BC 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,
};
/* 80C63270-80C632B8 0000D4 0048+00 2/2 0/0 0/0 .data __vt__13daObjLv4Brg_c */
SECTION_DATA extern void* __vt__13daObjLv4Brg_c[18] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)CreateHeap__13daObjLv4Brg_cFv,
(void*)Create__13daObjLv4Brg_cFv,
(void*)Execute__13daObjLv4Brg_cFPPA3_A4_f,
(void*)Draw__13daObjLv4Brg_cFv,
(void*)Delete__13daObjLv4Brg_cFv,
(void*)IsDelete__16dBgS_MoveBgActorFv,
(void*)ToFore__16dBgS_MoveBgActorFv,
(void*)ToBack__16dBgS_MoveBgActorFv,
(void*)NULL,
(void*)NULL,
(void*)func_80C63160,
(void*)func_80C63158,
(void*)eventRun__17dEvLib_callback_cFv,
(void*)eventEnd__17dEvLib_callback_cFv,
(void*)__dt__13daObjLv4Brg_cFv,
(void*)eventStart__13daObjLv4Brg_cFv,
};
/* 80C62F78-80C62FF8 000778 0080+00 1/0 0/0 0/0 .text daObjLv4Brg_create1st__FP13daObjLv4Brg_c */
static void daObjLv4Brg_create1st(daObjLv4Brg_c* param_0) {
// NONMATCHING
}
/* 80C62FF8-80C63018 0007F8 0020+00 1/0 0/0 0/0 .text daObjLv4Brg_MoveBGDelete__FP13daObjLv4Brg_c
*/
static void daObjLv4Brg_MoveBGDelete(daObjLv4Brg_c* param_0) {
// NONMATCHING
}
/* 80C63018-80C63038 000818 0020+00 1/0 0/0 0/0 .text daObjLv4Brg_MoveBGExecute__FP13daObjLv4Brg_c
*/
static void daObjLv4Brg_MoveBGExecute(daObjLv4Brg_c* param_0) {
// NONMATCHING
}
/* 80C63038-80C63064 000838 002C+00 1/0 0/0 0/0 .text daObjLv4Brg_MoveBGDraw__FP13daObjLv4Brg_c */
static void daObjLv4Brg_MoveBGDraw(daObjLv4Brg_c* param_0) {
// NONMATCHING
}
/* 80C63064-80C630AC 000864 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
}
/* 80C630AC-80C630B4 0008AC 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;
}
/* 80C630B4-80C630BC 0008B4 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;
}
/* 80C630BC-80C630C4 0008BC 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;
}
/* 80C630C4-80C63158 0008C4 0094+00 2/1 0/0 0/0 .text __dt__13daObjLv4Brg_cFv */
daObjLv4Brg_c::~daObjLv4Brg_c() {
// NONMATCHING
}
/* 80C63158-80C63160 000958 0008+00 1/0 0/0 0/0 .text @1440@eventStart__13daObjLv4Brg_cFv
*/
static void func_80C63158() {
// NONMATCHING
}
/* 80C63160-80C63168 000960 0008+00 1/0 0/0 0/0 .text @1440@__dt__13daObjLv4Brg_cFv */
static void func_80C63160() {
// NONMATCHING
}
/* 80C63190-80C63190 000020 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */