// // Generated By: dol2asm // Translation Unit: f_op/f_op_actor // #include "f_op/f_op_actor.h" #include "f_op/f_op_actor_tag.h" #include "d/d_stage.h" #include "dol2asm.h" #include "dolphin/mtx/mtx.h" #include "dolphin/types.h" #include "d/com/d_com_inf_game.h" #include "d/com/d_com_static.h" #include "d/com/d_com_inf_actor.h" #include "d/s/d_s_play.h" #include "d/d_demo.h" // // Forward References: // extern "C" void __ct__10fopAc_ac_cFv(); extern "C" void __dt__5csXyzFv(); extern "C" void __ct__11J3DLightObjFv(); extern "C" void __dt__11dEvt_info_cFv(); extern "C" void __dt__10fopAc_ac_cFv(); extern "C" void fopAc_IsActor__FPv(); extern "C" static void fopAc_Draw__FPv(); extern "C" static void fopAc_Execute__FPv(); extern "C" static void fopAc_IsDelete__FPv(); extern "C" static void fopAc_Delete__FPv(); extern "C" static void fopAc_Create__FPv(); extern "C" void getFileListInfo__15dStage_roomDt_cCFv(); extern "C" void initBallModel__13fopEn_enemy_cFv(); extern "C" void checkBallModelDraw__13fopEn_enemy_cFv(); extern "C" void setBallModelEffect__13fopEn_enemy_cFP12dKy_tevstr_c(); extern "C" void drawBallModel__13fopEn_enemy_cFP12dKy_tevstr_c(); extern "C" extern char const* const f_op_f_op_actor__stringBase0; extern "C" u8 stopStatus__10fopAc_ac_c[4]; extern "C" extern u8 data_80450CC0[4 + 4 /* padding */]; // // External References: // extern "C" void mDoExt_modelUpdateDL__FP8J3DModel(); extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); extern "C" void fopAcTg_ToActorQ__FP16create_tag_class(); extern "C" void fopAcTg_ActorQTo__FP16create_tag_class(); extern "C" void fopAcTg_Init__FP16create_tag_classPv(); extern "C" void fopAcM_delete__FP10fopAc_ac_c(); extern "C" void fopAcM_DeleteHeap__FP10fopAc_ac_c(); extern "C" void fopAcM_cullingCheck__FPC10fopAc_ac_c(); extern "C" void fopDwTg_ToDrawQ__FP16create_tag_classi(); extern "C" void fopDwTg_DrawQTo__FP16create_tag_class(); extern "C" void fopDwTg_Init__FP16create_tag_classPv(); extern "C" void fpcBs_Is_JustOfType__Fii(); extern "C" void fpcBs_MakeOfType__FPi(); extern "C" void fpcLf_GetPriority__FPC14leafdraw_class(); extern "C" void fpcLf_DrawMethod__FP21leafdraw_method_classPv(); extern "C" void fpcMtd_Execute__FP20process_method_classPv(); extern "C" void fpcMtd_IsDelete__FP20process_method_classPv(); extern "C" void fpcMtd_Delete__FP20process_method_classPv(); extern "C" void fpcMtd_Create__FP20process_method_classPv(); extern "C" void getStatusRoomDt__20dStage_roomControl_cFi(); extern "C" void check__7daSus_cFP10fopAc_ac_c(); extern "C" void isSwitch__10dSv_info_cCFii(); extern "C" void setActor__13dDemo_actor_cFP10fopAc_ac_c(); extern "C" void getActor__14dDemo_object_cFUc(); extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); extern "C" void moveApproval__14dEvt_control_cFPv(); extern "C" void __ct__11dEvt_info_cFv(); extern "C" void beforeProc__11dEvt_info_cFv(); extern "C" void set__13dPa_control_cFUlUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf(); extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c(); extern "C" void dKy_tevstr_init__FP12dKy_tevstr_cScUc(); extern "C" void dKy_depth_dist_set__FPv(); extern "C" void cLib_chaseF__FPfff(); extern "C" void __dl__FPv(); extern "C" void __as__12J3DLightInfoFRC12J3DLightInfo(); extern "C" void searchUpdateMaterialID__19J3DAnmTextureSRTKeyFP12J3DModelData(); extern "C" void searchUpdateMaterialID__15J3DAnmTevRegKeyFP12J3DModelData(); extern "C" void entryTexMtxAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey(); extern "C" void entryTevRegAnimator__16J3DMaterialTableFP15J3DAnmTevRegKey(); extern "C" void __construct_array(); extern "C" void _savegpr_29(); extern "C" void _restgpr_29(); extern "C" f32 Zero__4cXyz[3]; extern "C" u8 m_object__7dDemo_c[4]; // // Declarations: // /* 80018B64-80018BD0 0134A4 006C+00 0/0 7/7 562/562 .text __ct__10fopAc_ac_cFv */ fopAc_ac_c::fopAc_ac_c() {} /* 80018BD0-80018C0C 013510 003C+00 0/0 12/12 0/0 .text __dt__5csXyzFv */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off // asm csXyz::~csXyz() { extern "C" asm void __dt__5csXyzFv() { nofralloc #include "asm/f_op/f_op_actor/__dt__5csXyzFv.s" } #pragma pop /* 80018C0C-80018C44 01354C 0038+00 1/1 6/6 0/0 .text __ct__11J3DLightObjFv */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off // asm J3DLightObj::J3DLightObj() { extern "C" asm void __ct__11J3DLightObjFv() { nofralloc #include "asm/f_op/f_op_actor/__ct__11J3DLightObjFv.s" } #pragma pop /* ############################################################################################## */ /* 803A35B0-803A35D0 -00001 0020+00 0/0 3/0 756/0 .data g_fopAc_Method */ SECTION_DATA extern void* g_fopAc_Method[8] = { (void*)fopAc_Create__FPv, (void*)fopAc_Delete__FPv, (void*)fopAc_Execute__FPv, (void*)fopAc_IsDelete__FPv, (void*)fopAc_Draw__FPv, (void*)NULL, (void*)NULL, (void*)NULL, }; /* 803A35D0-803A35E0 0006F0 000C+04 2/2 1/1 0/0 .data __vt__11dEvt_info_c */ SECTION_DATA extern void* __vt__11dEvt_info_c[3 + 1 /* padding */] = { (void*)NULL /* RTTI */, (void*)NULL, (void*)__dt__11dEvt_info_cFv, /* padding */ NULL, }; /* 80018C44-80018C8C 013584 0048+00 1/0 0/0 0/0 .text __dt__11dEvt_info_cFv */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off // asm dEvt_info_c::~dEvt_info_c() { extern "C" asm void __dt__11dEvt_info_cFv() { nofralloc #include "asm/f_op/f_op_actor/__dt__11dEvt_info_cFv.s" } #pragma pop /* 80018C8C-80018CE0 0135CC 0054+00 0/0 5/5 270/270 .text __dt__10fopAc_ac_cFv */ fopAc_ac_c::~fopAc_ac_c() {} /* ############################################################################################## */ /* 80450CB8-80450CBC 0001B8 0004+00 2/2 0/0 0/0 .sbss g_fopAc_type */ static int g_fopAc_type; /* 80018CE0-80018D0C 013620 002C+00 0/0 12/12 391/391 .text fopAc_IsActor__FPv */ s32 fopAc_IsActor(void* actor) { return fpcM_IsJustType(g_fopAc_type, ((fopAc_ac_c*)actor)->mAcType); } /* ############################################################################################## */ /* 80450CBC-80450CC0 0001BC 0004+00 2/2 1/1 0/0 .sbss stopStatus__10fopAc_ac_c */ u32 fopAc_ac_c::stopStatus; /* 80018D0C-80018DD8 01364C 00CC+00 1/0 0/0 0/0 .text fopAc_Draw__FPv */ static int fopAc_Draw(void* actor) { fopAc_ac_c* ac = (fopAc_ac_c*)actor; int ret = 1; if (!dComIfGp_isPauseFlag()) { if ((dComIfGp_event_moveApproval(ac) == 2 || (!fopAcM_checkStatus(ac, fopAc_ac_c::stopStatus) && (!fopAcM_checkStatus(ac, 0x100) || !fopAcM_cullingCheck(ac)))) && !fopAcM_checkStatus(ac, 0x21000000)) { fopAcM_OffCondition(ac, 4); ret = fpcLf_DrawMethod((leafdraw_method_class*)ac->mSubMtd, ac); } else { fopAcM_OnCondition(ac, 4); } fopAcM_OffStatus(ac, 0x1000000); } return ret; } /* 80018DD8-80018F78 013718 01A0+00 1/0 0/0 0/0 .text fopAc_Execute__FPv */ static int fopAc_Execute(void* actor) { fopAc_ac_c* ac = (fopAc_ac_c*)actor; int ret = 1; if (!dComIfGp_isPauseFlag() && dScnPly_c::isPause()) { if (!dComIfA_PauseCheck()) { daSus_c::check(ac); ac->mEvtInfo.beforeProc(); s32 move = dComIfGp_event_moveApproval(actor); fopAcM_OffStatus(ac, 0x40000000); if (!fopAcM_checkStatus(ac, 0x20000000) && (move == 2 || (move != 0 && !fopAcM_checkStatus(ac, fopAc_ac_c::stopStatus) && (!fopAcM_checkStatus(ac, 0x80) || !fopAcM_CheckCondition(ac, 4))))) { fopAcM_OffCondition(ac, 2); ac->next = ac->current; ret = fpcMtd_Execute((process_method_class*)ac->mSubMtd, ac); } else { ac->mEvtInfo.suspendProc(ac); fopAcM_OnCondition(ac, 2); } if (fopAcM_checkStatus(ac, 0x20) && ac->orig.pos.y - ac->current.pos.y > 5000.0f) { fopAcM_delete(ac); } if (ac->current.pos.y < FLOAT_MIN) { ac->current.pos.y = FLOAT_MIN; } dKy_depth_dist_set(ac); } } return ret; } /* 80018F78-80018FCC 0138B8 0054+00 1/0 0/0 0/0 .text fopAc_IsDelete__FPv */ static int fopAc_IsDelete(void* actor) { fopAc_ac_c* ac = (fopAc_ac_c*)actor; int isDelete = fpcMtd_IsDelete((process_method_class*)ac->mSubMtd, ac); if (isDelete == true) { fopDwTg_DrawQTo(&ac->mDwTg); } return isDelete; } /* 80018FCC-8001904C 01390C 0080+00 1/0 0/0 0/0 .text fopAc_Delete__FPv */ static int fopAc_Delete(void* actor) { fopAc_ac_c* ac = (fopAc_ac_c*)actor; int deleted = fpcMtd_Delete((process_method_class*)ac->mSubMtd, ac); if (deleted == true) { fopAcTg_ActorQTo(&ac->mAcTg); fopDwTg_DrawQTo(&ac->mDwTg); fopAcM_DeleteHeap(ac); dDemo_actor_c* demoAc = dDemo_c::getActor(ac->mDemoActorId); if (demoAc != NULL) { demoAc->setActor(NULL); } } return deleted; } /* ############################################################################################## */ /* 80451BD0-80451BD4 0001D0 0004+00 2/2 0/0 0/0 .sdata2 @4431 */ SECTION_SDATA2 static f32 lit_4431 = 1.0f / 10.0f; /* 80451BD4-80451BD8 0001D4 0004+00 1/1 0/0 0/0 .sdata2 @4432 */ SECTION_SDATA2 static f32 lit_4432 = -100.0f; /* 80451BD8-80451BE0 0001D8 0008+00 1/1 0/0 0/0 .sdata2 @4434 */ SECTION_SDATA2 static f64 lit_4434 = 4503599627370496.0 /* cast u32 to float */; /* 8001904C-800193FC 01398C 03B0+00 1/0 0/0 0/0 .text fopAc_Create__FPv */ // swapped registers #ifdef NONMATCHING static int fopAc_Create(void* actor) { fopAc_ac_c* ac = (fopAc_ac_c*)actor; if (fpcM_IsFirstCreating(actor)) { leaf_process_profile_definition* profile = fpcM_GetProfile(actor); ac->mAcType = fpcBs_MakeOfType(&g_fopAc_type); ac->mSubMtd = (profile_method_class*)profile->mBase.mMethods; fopAcTg_Init(&ac->mAcTg, ac); fopAcTg_ToActorQ(&ac->mAcTg); fopDwTg_Init(&ac->mDwTg, ac); ac->mStatus = profile->field_0x28; ac->mGroup = profile->field_0x2c; ac->mCullType = profile->field_0x2d; fopAcM_prm_class* append = fopAcM_GetAppend(ac); if (append != NULL) { fopAcM_SetParam(ac, append->mParameter); ac->orig.pos = append->mPos; ac->orig.angle = append->mAngle; ac->shape_angle = append->mAngle; ac->mParentPcId = append->mParentPId; ac->mSubtype = append->mSubtype; ac->mScale.set(append->mScale[0] * 0.1f, append->mScale[1] * 0.1f, append->mScale[2] * 0.1f); ac->mSetID = append->mEnemyNo; ac->orig.mRoomNo = append->mRoomNo; } ac->next = ac->orig; ac->current = ac->orig; ac->mEyePos = ac->orig.pos; ac->mMaxFallSpeed = -100.0f; ac->mAttentionInfo.field_0x0[0] = 1; ac->mAttentionInfo.field_0x0[1] = 2; ac->mAttentionInfo.field_0x0[2] = 3; ac->mAttentionInfo.field_0x0[3] = 5; ac->mAttentionInfo.field_0x4[0] = 6; ac->mAttentionInfo.field_0x4[3] = 14; ac->mAttentionInfo.field_0x4[1] = 15; ac->mAttentionInfo.field_0x4[2] = 15; ac->mAttentionInfo.field_0x8[0] = 51; ac->mAttentionInfo.mPosition = ac->orig.pos; ac->mAttentionInfo.field_0xa = 30; dKy_tevstr_init(&ac->mTevStr, ac->orig.mRoomNo, -1); int roomNo = dComIfGp_roomControl_getStayNo(); if (roomNo >= 0) { dComIfGp_roomControl_getStatusRoomDt(roomNo)->mRoomDt.getFileListInfo(); } dStage_FileList_dt_c* filelist = NULL; if (ac->orig.mRoomNo >= 0) { filelist = dComIfGp_roomControl_getStatusRoomDt(ac->orig.mRoomNo)->mRoomDt.getFileListInfo(); } if (filelist != NULL) { if (!dStage_FileList_dt_GetEnemyAppear1Flag(filelist)) { u32 sw = dStage_FileList_dt_GetBitSw(filelist); if (sw != 0xFF && dComIfGs_isSwitch(sw, ac->orig.mRoomNo) && profile->field_0x2c == 2) { return 5; } } else { u32 sw = dStage_FileList_dt_GetBitSw(filelist); if (sw != 0xFF && !dComIfGs_isSwitch(sw, ac->orig.mRoomNo) && profile->field_0x2c == 2) { return 5; } } } } int ret = fpcMtd_Create((process_method_class*)ac->mSubMtd, ac); if (ret == 4) { s16 priority = fpcLf_GetPriority(ac); fopDwTg_ToDrawQ(&ac->mDwTg, priority); } else if (ret == 5) { fopAcM_OnCondition(ac, 0x10); } return ret; } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off static asm int fopAc_Create(void* param_0) { nofralloc #include "asm/f_op/f_op_actor/fopAc_Create__FPv.s" } #pragma pop #endif /* 800193FC-80019404 013D3C 0008+00 0/0 1/0 0/0 .text getFileListInfo__15dStage_roomDt_cCFv */ dStage_FileList_dt_c* dStage_roomDt_c::getFileListInfo() const { return mFileListInfo; } /* 80019404-800194FC 013D44 00F8+00 0/0 0/0 2/2 .text initBallModel__13fopEn_enemy_cFv */ bool fopEn_enemy_c::initBallModel() { void* objRes = dComIfG_getObjectRes("Alink",daAlink_c::getBallModelIdx()); mBallModel = mDoExt_J3DModel__create((J3DModelData*)objRes, 0x80000, 0x11000284); if (!mBallModel) { return false; } else { mBallModel->setBaseScale(cXyz::Zero); mBtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("Alink",daAlink_c::getBallBtkIdx()); mBtk->searchUpdateMaterialID(mBallModel->getModelData()); mBrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes("Alink",daAlink_c::getBallBrkIdx()); mBrk->searchUpdateMaterialID(mBallModel->getModelData()); } return true; } /* 800194FC-80019520 013E3C 0024+00 2/2 0/0 2/2 .text checkBallModelDraw__13fopEn_enemy_cFv */ int fopEn_enemy_c::checkBallModelDraw() { int ret = 0; if ((mFlags & 1) && !(mFlags & 0x32)) { ret = 1; } return ret; } /* ############################################################################################## */ /* 80451BE0-80451BE8 0001E0 0004+04 2/2 0/0 0/0 .sdata2 @4505 */ SECTION_SDATA2 static f32 lit_4505[1 + 1 /* padding */] = { 1.0f, /* padding */ 0.0f, }; /* 80451BE8-80451BF0 0001E8 0008+00 1/1 0/0 0/0 .sdata2 @4507 */ SECTION_SDATA2 static f64 lit_4507 = 4503601774854144.0 /* cast s32 to float */; /* 80019520-800196A0 013E60 0180+00 0/0 0/0 2/2 .text * setBallModelEffect__13fopEn_enemy_cFP12dKy_tevstr_c */ #ifdef NONMATCHING // matches with literals void fopEn_enemy_c::setBallModelEffect(dKy_tevstr_c* param_0) { if (mBallModel) { field_0x590 += FLOAT_LABEL(lit_4505); if (field_0x590 >= mBtk->getFrameMax()) { field_0x590 -= mBtk->getFrameMax(); } if ((u8)checkBallModelDraw()) { Vec* base_scale = mBallModel->getBaseScale(); cLib_chaseF(&base_scale->x,FLOAT_LABEL(lit_4505),FLOAT_LABEL(lit_4431)); f32 result = base_scale->x; base_scale->z = result; base_scale->y = result; mEffectID1 = dComIfGp_particle_set(mEffectID1, 0x86c8, &mDownPos, param_0); mEffectID2 = dComIfGp_particle_set(mEffectID2, 0x86c9, &mDownPos, param_0); } } } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void fopEn_enemy_c::setBallModelEffect(dKy_tevstr_c* param_0) { nofralloc #include "asm/f_op/f_op_actor/setBallModelEffect__13fopEn_enemy_cFP12dKy_tevstr_c.s" } #pragma pop #endif /* ############################################################################################## */ /* 80451BF0-80451BF4 0001F0 0004+00 1/1 0/0 0/0 .sdata2 @4555 */ SECTION_SDATA2 static u8 lit_4555[4] = { 0x00, 0x00, 0x00, 0x00, }; /* 80451BF4-80451BF8 0001F4 0004+00 1/1 0/0 0/0 .sdata2 @4556 */ SECTION_SDATA2 static f32 lit_4556 = 1.0f / 20.0f; /* 80451BF8-80451C00 0001F8 0004+04 1/1 0/0 0/0 .sdata2 @4557 */ SECTION_SDATA2 static f32 lit_4557[1 + 1 /* padding */] = { 1.0f / 100.0f, /* padding */ 0.0f, }; /* 800196A0-800197BC 013FE0 011C+00 0/0 0/0 2/2 .text * drawBallModel__13fopEn_enemy_cFP12dKy_tevstr_c */ void fopEn_enemy_c::drawBallModel(dKy_tevstr_c* param_0) { f32 tmp; if (mBallModel) { Vec* base_scale = mBallModel->getBaseScale(); if ((u8)checkBallModelDraw()) { tmp = FLOAT_LABEL(lit_4505); } else { tmp = FLOAT_LABEL(lit_4555); } cLib_chaseF(&base_scale->x,tmp,FLOAT_LABEL(lit_4556)); base_scale->y = base_scale->x; base_scale->z = base_scale->x; mBallModel->setBaseScale(*base_scale); if (base_scale->x > FLOAT_LABEL(lit_4557)) { mDoMtx_trans(mBallModel->getBaseTRMtx(),mDownPos.x,mDownPos.y,mDownPos.z); i_dKy_getEnvlight()->setLightTevColorType_MAJI(mBallModel, param_0); mBtk->setFrame(field_0x590); mBallModel->getModelData()->entryTexMtxAnimator(mBtk); mBrk->setFrame(field_0x590); mBallModel->getModelData()->entryTevRegAnimator(mBrk); mDoExt_modelUpdateDL(mBallModel); } } } /* ############################################################################################## */ /* 80450CC0-80450CC8 0001C0 0004+04 0/0 9/9 0/0 .sbss * sInstance__35JASGlobalInstance<14JAUSectionHeap> */ extern u8 data_80450CC0[4 + 4 /* padding */]; u8 data_80450CC0[4 + 4 /* padding */];