Files
dusklight/src/f_op/f_op_actor_mng.cpp
T
2022-07-01 00:12:01 +02:00

2606 lines
94 KiB
C++

//
// Generated By: dol2asm
// Translation Unit: f_op/f_op_actor_mng
//
#include "f_op/f_op_actor_mng.h"
#include "JSystem/JKernel/JKRHeap.h"
#include "JSystem/JKernel/JKRSolidHeap.h"
#include "MSL_C/math.h"
#include "SSystem/SComponent/c_lib.h"
#include "SSystem/SComponent/c_malloc.h"
#include "dol2asm.h"
#include "global.h"
#include "d/com/d_com_inf_game.h"
#include "JSystem/J3DGraphBase/J3DSys.h"
#include "JSystem/J3DU/J3DUClipper.h"
#include "MSL_C/math.h"
#include "SSystem/SComponent/c_math.h"
#include "d/d_stage.h"
#include "f_op/f_op_actor.h"
#include "m_Do/m_Do_ext.h"
#include "m_Do/m_Do_lib.h"
#include "d/d_procname.h"
#include "m_Do/m_Do_mtx.h"
#include "SSystem/SComponent/c_lib.h"
//
// Types:
//
struct l_HIO {
/* 8001E098 */ ~l_HIO();
};
struct daTagStream_c {
/* 800318B4 */ void checkArea(cXyz const*);
static u8 m_top[4];
};
class dEnemyItem_c {
public:
static u8* mData;
};
//
// Forward References:
//
extern "C" void fopAcM_FastCreate__FsPFPv_iPvPv();
extern "C" void fopAcM_setStageLayer__FPv();
extern "C" void fopAcM_setRoomLayer__FPvi();
extern "C" void fopAcM_SearchByID__FUiPP10fopAc_ac_c();
extern "C" void fopAcM_SearchByName__FsPP10fopAc_ac_c();
extern "C" void fopAcM_CreateAppend__Fv();
extern "C" static void createAppend__FUsUlPC4cXyziPC5csXyzPC4cXyzScUi();
extern "C" void fopAcM_Log__FPC10fopAc_ac_cPCc();
extern "C" void fopAcM_delete__FP10fopAc_ac_c();
extern "C" void fopAcM_delete__FUi();
extern "C" void fopAcM_create__FsUsUlPC4cXyziPC5csXyzPC4cXyzScPFPv_i();
extern "C" void fopAcM_create__FsUlPC4cXyziPC5csXyzPC4cXyzSc();
extern "C" void fopAcM_fastCreate__FsUlPC4cXyziPC5csXyzPC4cXyzScPFPv_iPv();
extern "C" void fopAcM_fastCreate__FPCcUlPC4cXyziPC5csXyzPC4cXyzPFPv_iPv();
extern "C" void fopAcM_createChild__FsUiUlPC4cXyziPC5csXyzPC4cXyzScPFPv_i();
extern "C" void fopAcM_createChildFromOffset__FsUiUlPC4cXyziPC5csXyzPC4cXyzScPFPv_i();
extern "C" void fopAcM_DeleteHeap__FP10fopAc_ac_c();
extern "C" void fopAcM_callCallback__FP10fopAc_ac_cPFP10fopAc_ac_c_iP7JKRHeap();
extern "C" void fopAcM_entrySolidHeap___FP10fopAc_ac_cPFP10fopAc_ac_c_iUl();
extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl();
extern "C" void fopAcM_SetMin__FP10fopAc_ac_cfff();
extern "C" void fopAcM_SetMax__FP10fopAc_ac_cfff();
extern "C" void fopAcM_setCullSizeBox__FP10fopAc_ac_cffffff();
extern "C" void fopAcM_setCullSizeSphere__FP10fopAc_ac_cffff();
extern "C" void fopAcM_setCullSizeBox2__FP10fopAc_ac_cP12J3DModelData();
extern "C" void fopAcM_addAngleY__FP10fopAc_ac_css();
extern "C" void fopAcM_calcSpeed__FP10fopAc_ac_c();
extern "C" void fopAcM_posMove__FP10fopAc_ac_cPC4cXyz();
extern "C" void fopAcM_posMoveF__FP10fopAc_ac_cPC4cXyz();
extern "C" void fopAcM_searchActorAngleY__FPC10fopAc_ac_cPC10fopAc_ac_c();
extern "C" void fopAcM_searchActorAngleX__FPC10fopAc_ac_cPC10fopAc_ac_c();
extern "C" void fopAcM_seenActorAngleY__FPC10fopAc_ac_cPC10fopAc_ac_c();
extern "C" void fopAcM_searchActorDistance__FPC10fopAc_ac_cPC10fopAc_ac_c();
extern "C" void fopAcM_searchActorDistance2__FPC10fopAc_ac_cPC10fopAc_ac_c();
extern "C" void fopAcM_searchActorDistanceXZ__FPC10fopAc_ac_cPC10fopAc_ac_c();
extern "C" void fopAcM_searchActorDistanceXZ2__FPC10fopAc_ac_cPC10fopAc_ac_c();
extern "C" void fopAcM_rollPlayerCrash__FPC10fopAc_ac_cfUlffif();
extern "C" void fopAcM_checkCullingBox__FPA4_fffffff();
extern "C" void fopAcM_cullingCheck__FPC10fopAc_ac_c();
extern "C" void event_second_actor__FUs();
extern "C" void fopAcM_orderTalkEvent__FP10fopAc_ac_cP10fopAc_ac_cUsUs();
extern "C" void fopAcM_orderTalkItemBtnEvent__FUsP10fopAc_ac_cP10fopAc_ac_cUsUs();
extern "C" void fopAcM_orderSpeakEvent__FP10fopAc_ac_cUsUs();
extern "C" void fopAcM_orderDoorEvent__FP10fopAc_ac_cP10fopAc_ac_cUsUs();
extern "C" void fopAcM_orderCatchEvent__FP10fopAc_ac_cP10fopAc_ac_cUsUs();
extern "C" void fopAcM_orderOtherEvent__FP10fopAc_ac_cPCcUsUsUs();
extern "C" void fopAcM_orderOtherEvent__FP10fopAc_ac_cP10fopAc_ac_cPCcUsUsUs();
extern "C" void fopAcM_orderChangeEventId__FP10fopAc_ac_csUsUs();
extern "C" void fopAcM_orderOtherEventId__FP10fopAc_ac_csUcUsUsUs();
extern "C" void fopAcM_orderMapToolEvent__FP10fopAc_ac_cUcsUsUsUs();
extern "C" void fopAcM_orderMapToolAutoNextEvent__FP10fopAc_ac_cUcsUsUsUs();
extern "C" void fopAcM_orderPotentialEvent__FP10fopAc_ac_cUsUsUs();
extern "C" void fopAcM_orderItemEvent__FP10fopAc_ac_cUsUs();
extern "C" void fopAcM_orderTreasureEvent__FP10fopAc_ac_cP10fopAc_ac_cUsUs();
extern "C" void fopAcM_getTalkEventPartner__FPC10fopAc_ac_c();
extern "C" void fopAcM_getItemEventPartner__FPC10fopAc_ac_c();
extern "C" void fopAcM_getEventPartner__FPC10fopAc_ac_c();
extern "C" void fopAcM_createItemForPresentDemo__FPC4cXyziUciiPC5csXyzPC4cXyz();
extern "C" void fopAcM_createItemForTrBoxDemo__FPC4cXyziiiPC5csXyzPC4cXyz();
extern "C" void fopAcM_getItemNoFromTableNo__FUc();
extern "C" void fopAcM_createItemFromEnemyID__FUcPC4cXyziiPC5csXyzPC4cXyzPfPf();
extern "C" void fopAcM_createItemFromTable__FPC4cXyziiiPC5csXyziPC4cXyzPfPfb();
extern "C" void fopAcM_createDemoItem__FPC4cXyziiPC5csXyziPC4cXyzUc();
extern "C" void fopAcM_createItemForBoss__FPC4cXyziiPC5csXyzPC4cXyzffi();
extern "C" void fopAcM_createItemForMidBoss__FPC4cXyziiPC5csXyzPC4cXyzii();
extern "C" void fopAcM_createItemForDirectGet__FPC4cXyziiPC5csXyzPC4cXyzff();
extern "C" void fopAcM_createItemForSimpleDemo__FPC4cXyziiPC5csXyzPC4cXyzff();
extern "C" void fopAcM_createItem__FPC4cXyziiiPC5csXyzPC4cXyzi();
extern "C" void fopAcM_fastCreateItem2__FPC4cXyziiiiPC5csXyzPC4cXyz();
extern "C" void fopAcM_fastCreateItem__FPC4cXyziiPC5csXyzPC4cXyzPfPfiiPFPv_i();
extern "C" void fopAcM_createBokkuri__FUsPC4cXyziiiPC4cXyzii();
extern "C" void fopAcM_createWarpHole__FPC4cXyzPC5csXyziUcUcUc();
extern "C" void enemySearchJugge__FPvPv();
extern "C" void fopAcM_myRoomSearchEnemy__FSc();
extern "C" void fopAcM_createDisappear__FPC10fopAc_ac_cPC4cXyzUcUcUc();
extern "C" void fopAcM_setCarryNow__FP10fopAc_ac_ci();
extern "C" void fopAcM_cancelCarryNow__FP10fopAc_ac_c();
extern "C" void fopAcM_otoCheck__FPC10fopAc_ac_cf();
extern "C" void fopAcM_otherBgCheck__FPC10fopAc_ac_cPC10fopAc_ac_c();
extern "C" void fopAcM_wayBgCheck__FPC10fopAc_ac_cff();
extern "C" void fopAcM_plAngleCheck__FPC10fopAc_ac_cs();
extern "C" void fopAcM_effSmokeSet1__FPUlPUlPC4cXyzPC5csXyzfPC12dKy_tevstr_ci();
extern "C" void fopAcM_effHamonSet__FPUlPC4cXyzff();
extern "C" void fopAcM_carryOffRevise__FP10fopAc_ac_c();
extern "C" static void vectle_calc__FPC10DOUBLE_POSP4cXyz();
extern "C" static void get_vectle_calc__FPC4cXyzPC4cXyzP4cXyz();
extern "C" void fopAcM_setEffectMtx__FPC10fopAc_ac_cPC12J3DModelData();
extern "C" void fopAcM_getProcNameString__FPC10fopAc_ac_c();
extern "C" void fopAcM_findObjectCB__FPC10fopAc_ac_cPv();
extern "C" void fopAcM_searchFromName__FPCcUlUl();
extern "C" void fopAcM_findObject4EventCB__FP10fopAc_ac_cPv();
extern "C" void fopAcM_searchFromName4Event__FPCcs();
extern "C" void fopAcM_getWaterY__FPC4cXyzPf();
extern "C" void fpoAcM_relativePos__FPC10fopAc_ac_cPC4cXyzP4cXyz();
extern "C" void fopAcM_getWaterStream__FPC4cXyzRC13cBgS_PolyInfoP4cXyzPii();
extern "C" void fopAcM_getPolygonAngle__FRC13cBgS_PolyInfos();
extern "C" void __dt__8cM3dGPlaFv();
extern "C" void fopAcM_getPolygonAngle__FPC8cM3dGPlas();
extern "C" void lineCheck__11fopAcM_lc_cFPC4cXyzPC4cXyzPC10fopAc_ac_c();
extern "C" void gndCheck__11fopAcM_gc_cFPC4cXyz();
extern "C" void roofCheck__11fopAcM_rc_cFPC4cXyz();
extern "C" void waterCheck__11fopAcM_wt_cFPC4cXyz();
extern "C" void fopAcM_initManager__Fv();
extern "C" void __sinit_f_op_actor_mng_cpp();
extern "C" void __dt__11dBgS_WtrChkFv();
extern "C" void __dt__15dBgS_ObjRoofChkFv();
extern "C" void __dt__14dBgS_ObjGndChkFv();
extern "C" void __dt__5l_HIOFv();
extern "C" static void func_8001E0D4();
extern "C" static void func_8001E0DC();
extern "C" static void func_8001E0E4();
extern "C" static void func_8001E0EC();
extern "C" static void func_8001E0F4();
extern "C" static void func_8001E0FC();
extern "C" static void func_8001E104();
extern "C" static void func_8001E10C();
extern "C" static void func_8001E114();
extern "C" void onFrollCrashFlg__9daPy_py_cFUci();
extern "C" bool checkWolfDash__9daPy_py_cCFv();
extern "C" bool checkFrontRoll__9daPy_py_cCFv();
extern "C" bool checkHorseRide__9daPy_py_cCFv();
extern "C" s32 getGrabActorID__9daPy_py_cCFv();
extern "C" extern char const* const f_op_f_op_actor_mng__stringBase0;
extern "C" u8 mLineCheck__11fopAcM_lc_c[112];
extern "C" u8 mGndCheck__11fopAcM_gc_c[84];
extern "C" u8 mRoofCheck__11fopAcM_rc_c[80];
extern "C" u8 mWaterCheck__11fopAcM_wt_c[84 + 4 /* padding */];
extern "C" f32 mGroundY__11fopAcM_gc_c;
extern "C" f32 mRoofY__11fopAcM_rc_c;
extern "C" f32 mWaterY__11fopAcM_wt_c[1 + 1 /* padding */];
// TODO: move
u32 check_itemno(int param1);
BOOL isHeart(u8);
//
// External References:
//
extern "C" void mDoMtx_YrotS__FPA4_fs();
extern "C" void fopAcIt_Judge__FPFPvPv_PvPv();
extern "C" void fopScnM_SearchByID__FUi();
extern "C" void fpcBs_Is_JustOfType__Fii();
extern "C" void fpcEx_IsExist__FUi();
extern "C" void fpcLy_CurrentLayer__Fv();
extern "C" void fpcM_Delete__FPv();
extern "C" void fpcM_IsCreating__FUi();
extern "C" void fpcM_FastCreate__FsPFPv_iPvPv();
extern "C" void fpcM_JudgeInLayer__FUiPFPvPv_PvPv();
extern "C" void fpcPi_Change__FP22process_priority_classUiUsUs();
extern "C" void fpcSch_JudgeForPName__FPvPv();
extern "C" void fpcSch_JudgeByID__FPvPv();
extern "C" void fpcSCtRq_Request__FP11layer_classsPFPvPv_iPvPv();
extern "C" void dStage_searchName__FPCc();
extern "C" void dStage_getName2__FsSc();
extern "C" void checkArea__13daTagStream_cFPC4cXyz();
extern "C" void onActor__10dSv_info_cFii();
extern "C" void order__14dEvt_control_cFUsUsUsUsPvPvsUc();
extern "C" void convPId__14dEvt_control_cFUi();
extern "C" void searchMapEventData__14dEvt_control_cFUcl();
extern "C" void setGtItm__14dEvt_control_cFUc();
extern "C" void getEventIdx__16dEvent_manager_cFP10fopAc_ac_cUc();
extern "C" void getEventIdx__16dEvent_manager_cFP10fopAc_ac_cPCcUc();
extern "C" void getEventPrio__16dEvent_manager_cFP10fopAc_ac_cs();
extern "C" void getEmitter__Q213dPa_control_c7level_cFUl();
extern "C" void
set__13dPa_control_cFUlUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf();
extern "C" void
setSimpleFoot__13dPa_control_cFUlPUlR13cBgS_PolyInfoPC4cXyzPC12dKy_tevstr_ciPC5csXyzPC4cXyzP18dPa_levelEcallBackScPC4cXyz();
extern "C" void dPath_GetPolyRoomPathVec__FRC13cBgS_PolyInfoP4cXyzPi();
extern "C" void LineCross__4cBgSFP11cBgS_LinChk();
extern "C" void GroundCross__4cBgSFP11cBgS_GndChk();
extern "C" void ChkPolySafe__4cBgSFRC13cBgS_PolyInfo();
extern "C" void GetTriPla__4cBgSCFRC13cBgS_PolyInfoP8cM3dGPla();
extern "C" void GetPolyAtt0__4dBgSFRC13cBgS_PolyInfo();
extern "C" void RoofChk__4dBgSFP12dBgS_RoofChk();
extern "C" void SplGrpChk__4dBgSFP14dBgS_SplGrpChk();
extern "C" void __ct__11dBgS_GndChkFv();
extern "C" void __dt__11dBgS_GndChkFv();
extern "C" void __ct__11dBgS_LinChkFv();
extern "C" void __dt__11dBgS_LinChkFv();
extern "C" void Set__11dBgS_LinChkFPC4cXyzPC4cXyzPC10fopAc_ac_c();
extern "C" void __ct__14dBgS_ObjLinChkFv();
extern "C" void __dt__14dBgS_ObjLinChkFv();
extern "C" void Set__14dBgS_SplGrpChkFR4cXyzf();
extern "C" void __dt__14dBgS_SplGrpChkFv();
extern "C" void SetObj__16dBgS_PolyPassChkFv();
extern "C" void __ct__12dBgS_RoofChkFv();
extern "C" void __dt__12dBgS_RoofChkFv();
extern "C" void __ct__11dBgS_WtrChkFv();
extern "C" void isHeart__FUc();
extern "C" void check_itemno__Fi();
extern "C" void dCam_getCamera__Fv();
extern "C" void dKy_Sound_get__Fv();
extern "C" void memalignB__3cMlFiUl();
extern "C" void __mi__4cXyzCFRC3Vec();
extern "C" void normalizeZP__4cXyzFv();
extern "C" void atan2sX_Z__4cXyzCFv();
extern "C" void __ct__5csXyzFsss();
extern "C" void cM_atan2s__Fff();
extern "C" void cM_rndF__Ff();
extern "C" void cM_rndFX__Ff();
extern "C" void SetPos__11cBgS_GndChkFPC4cXyz();
extern "C" void cLib_memSet__FPviUl();
extern "C" void cLib_chaseAngleS__FPsss();
extern "C" void cLib_targetAngleY__FPC3VecPC3Vec();
extern "C" void MtxPosition__FP4cXyzP4cXyz();
extern "C" void calcViewFrustum__11J3DUClipperFv();
extern "C" void clip__11J3DUClipperCFPA4_Cf3Vecf();
extern "C" void clip__11J3DUClipperCFPA4_CfP3VecP3Vec();
extern "C" void getFreeSize__7JKRHeapFv();
extern "C" void __dl__FPv();
extern "C" void setEffectMtx__13J3DTexMtxInfoFPA4_f();
extern "C" void __register_global_object();
extern "C" void _savegpr_19();
extern "C" void _savegpr_21();
extern "C" void _savegpr_23();
extern "C" void _savegpr_24();
extern "C" void _savegpr_25();
extern "C" void _savegpr_26();
extern "C" void _savegpr_27();
extern "C" void _savegpr_29();
extern "C" void _restgpr_19();
extern "C" void _restgpr_21();
extern "C" void _restgpr_23();
extern "C" void _restgpr_24();
extern "C" void _restgpr_25();
extern "C" void _restgpr_26();
extern "C" void _restgpr_27();
extern "C" void _restgpr_29();
extern "C" u8 now__14mDoMtx_stack_c[48];
extern "C" u8 mStatus__20dStage_roomControl_c[65792];
extern "C" f32 Zero__4cXyz[3];
extern "C" u8 BaseY__4cXyz[12];
extern "C" u8 sincosTable___5JMath[65536];
extern "C" f32 mSystemFar__14mDoLib_clipper;
extern "C" u8 mProcID__20dStage_roomControl_c[4];
extern "C" void* mClipper__14mDoLib_clipper;
extern "C" u8 m_top__13daTagStream_c[4];
extern "C" u8 mData__12dEnemyItem_c[4 + 4 /* padding */];
extern "C" u8 Zero__5csXyz[4];
extern "C" extern u8 data_80451164[4];
//
// Declarations:
//
/* 800198A4-800198C4 0141E4 0020+00 0/0 1/1 0/0 .text fopAcM_FastCreate__FsPFPv_iPvPv */
void* fopAcM_FastCreate(s16 procName, FastCreateReqFunc createFunc, void* param_3, void* p_data) {
return fpcM_FastCreate(procName, createFunc, param_3, p_data);
}
/* 800198C4-80019934 014204 0070+00 1/1 5/5 18/18 .text fopAcM_setStageLayer__FPv */
void fopAcM_setStageLayer(void* p_proc) {
scene_class* stageProc = fopScnM_SearchByID(dStage_roomControl_c::getProcID());
fpcM_ChangeLayerID(p_proc, fopScnM_LayerID(stageProc));
}
/* 80019934-800199BC 014274 0088+00 1/1 0/0 2/2 .text fopAcM_setRoomLayer__FPvi */
void fopAcM_setRoomLayer(void* p_proc, int roomNo) {
if (roomNo >= 0) {
scene_class* roomProc = fopScnM_SearchByID(dStage_roomControl_c::getStatusProcID(roomNo));
fpcM_ChangeLayerID(p_proc, fopScnM_LayerID(roomProc));
}
}
/* 800199BC-80019A2C 0142FC 0070+00 0/0 4/4 114/114 .text fopAcM_SearchByID__FUiPP10fopAc_ac_c */
s32 fopAcM_SearchByID(unsigned int id, fopAc_ac_c** p_actor) {
if (fpcM_IsCreating(id)) {
*p_actor = NULL;
} else {
*p_actor = (fopAc_ac_c*)fopAcIt_Judge((fopAcIt_JudgeFunc)fpcSch_JudgeByID, &id);
if (*p_actor == NULL) {
return 0;
}
}
return 1;
}
/* 80019A2C-80019AA8 01436C 007C+00 0/0 0/0 28/28 .text fopAcM_SearchByName__FsPP10fopAc_ac_c */
s32 fopAcM_SearchByName(s16 procName, fopAc_ac_c** p_actor) {
*p_actor = (fopAc_ac_c*)fopAcIt_Judge((fopAcIt_JudgeFunc)fpcSch_JudgeForPName, &procName);
if (*p_actor == NULL) {
return 0;
} else {
if (fpcM_IsCreating(fopAcM_GetID(*p_actor))) {
*p_actor = NULL;
}
return 1;
}
}
/* 80019AA8-80019B1C 0143E8 0074+00 1/1 7/7 0/0 .text fopAcM_CreateAppend__Fv */
fopAcM_prm_class* fopAcM_CreateAppend() {
fopAcM_prm_class* params =
static_cast<fopAcM_prm_class*>(cMl::memalignB(-4, sizeof(fopAcM_prm_class)));
if (params != NULL) {
cLib_memSet(params, 0, sizeof(fopAcM_prm_class));
params->mEnemyNo = 0xFFFF;
params->mRoomNo = -1;
params->mScale[0] = 10;
params->mScale[1] = 10;
params->mScale[2] = 10;
params->mParentPId = -1;
params->mSubtype = -1;
}
return params;
}
/* 80019B1C-80019C78 01445C 015C+00 4/4 0/0 0/0 .text
* createAppend__FUsUlPC4cXyziPC5csXyzPC4cXyzScUi */
fopAcM_prm_class* createAppend(u16 enemyNo, u32 parameters, const cXyz* p_pos, int roomNo,
const csXyz* p_angle, const cXyz* p_scale, s8 subType,
unsigned int parentPId) {
fopAcM_prm_class* params = fopAcM_CreateAppend();
if (params == NULL) {
return NULL;
} else {
params->mEnemyNo = enemyNo;
if (p_pos != NULL) {
params->mPos = *p_pos;
} else {
params->mPos = cXyz::Zero;
}
params->mRoomNo = roomNo;
if (p_angle != NULL) {
params->mAngle = *p_angle;
} else {
params->mAngle = csXyz::Zero;
}
if (p_scale != NULL) {
params->mScale[0] = 10.0f * p_scale->x;
params->mScale[1] = 10.0f * p_scale->y;
params->mScale[2] = 10.0f * p_scale->z;
} else {
params->mScale[0] = 10;
params->mScale[1] = 10;
params->mScale[2] = 10;
}
params->mParameter = parameters;
params->mParentPId = parentPId;
params->mSubtype = subType;
return params;
}
}
/* 80019C78-80019C7C 0145B8 0004+00 3/3 0/0 0/0 .text fopAcM_Log__FPC10fopAc_ac_cPCc */
void fopAcM_Log(fopAc_ac_c const* p_actor, char const* str) {
/* empty function */
}
/* 80019C7C-80019CB8 0145BC 003C+00 0/0 10/10 483/483 .text fopAcM_delete__FP10fopAc_ac_c
*/
void fopAcM_delete(fopAc_ac_c* p_actor) {
// "Deleting Actor"
fopAcM_Log(p_actor, "アクターの削除");
fpcM_Delete(p_actor);
}
/* 80019CB8-80019D18 0145F8 0060+00 0/0 3/3 12/12 .text fopAcM_delete__FUi */
s32 fopAcM_delete(unsigned int actorID) {
void* actor = fopAcM_SearchByID(actorID);
if (actor != NULL) {
// "Deleting Actor"
fopAcM_Log((fopAc_ac_c*)actor, "アクターの削除");
return fpcM_Delete(actor);
} else {
return 1;
}
}
/* 80019D18-80019D98 014658 0080+00 2/2 0/0 0/0 .text
* fopAcM_create__FsUsUlPC4cXyziPC5csXyzPC4cXyzScPFPv_i */
s32 fopAcM_create(s16 procName, u16 enemyNo, u32 parameter, const cXyz* p_pos, int roomNo,
const csXyz* p_angle, const cXyz* p_scale, s8 subType, createFunc p_createFunc) {
fopAcM_prm_class* params =
createAppend(enemyNo, parameter, p_pos, roomNo, p_angle, p_scale, subType, 0xFFFFFFFF);
if (params == NULL) {
return -1;
} else {
return fpcM_Create(procName, p_createFunc, params);
}
}
/* 80019D98-80019E04 0146D8 006C+00 3/3 11/11 70/70 .text
* fopAcM_create__FsUlPC4cXyziPC5csXyzPC4cXyzSc */
s32 fopAcM_create(s16 procName, u32 parameter, const cXyz* p_pos, int roomNo, const csXyz* p_angle,
const cXyz* p_scale, s8 subType) {
return fopAcM_create(procName, 0xFFFF, parameter, p_pos, roomNo, p_angle, p_scale, subType, NULL);
}
/* 80019E04-80019E6C 014744 0068+00 5/5 6/6 18/18 .text
* fopAcM_fastCreate__FsUlPC4cXyziPC5csXyzPC4cXyzScPFPv_iPv */
void* fopAcM_fastCreate(s16 procName, u32 parameter, const cXyz* p_pos, int roomNo,
const csXyz* p_angle, const cXyz* p_scale, s8 subType, createFunc p_createFunc,
void* p_createFuncData) {
fopAcM_prm_class* prmClass =
createAppend(0xFFFF, parameter, p_pos, roomNo, p_angle, p_scale, subType, 0xFFFFFFFF);
if (prmClass == NULL) {
return NULL;
} else {
return fpcM_FastCreate(procName, p_createFunc, p_createFuncData, prmClass);
}
}
/* 80019E6C-80019EF0 0147AC 0084+00 0/0 1/1 0/0 .text
* fopAcM_fastCreate__FPCcUlPC4cXyziPC5csXyzPC4cXyzPFPv_iPv */
void* fopAcM_fastCreate(const char* p_actorName, u32 parameter, const cXyz* p_pos, int roomNo,
const csXyz* p_angle, const cXyz* p_scale, createFunc p_createFunc,
void* p_createFuncData) {
dStage_objectNameInf* nameInfo = dStage_searchName(p_actorName);
if (nameInfo == NULL) {
return NULL;
} else {
return fopAcM_fastCreate(nameInfo->mProcName, parameter, p_pos, roomNo, p_angle,
p_scale, nameInfo->mSubtype, p_createFunc, p_createFuncData);
}
}
/* 80019EF0-80019F78 014830 0088+00 0/0 1/1 105/105 .text
* fopAcM_createChild__FsUiUlPC4cXyziPC5csXyzPC4cXyzScPFPv_i */
s32 fopAcM_createChild(s16 procName, unsigned int parentPId, u32 parameters, const cXyz* p_pos,
int roomNo, const csXyz* p_angle, const cXyz* p_scale, s8 subType,
createFunc p_createFunc) {
fopAcM_prm_class* paramClass =
createAppend(0xFFFF, parameters, p_pos, roomNo, p_angle, p_scale, subType, parentPId);
if (paramClass == NULL) {
return -1;
} else {
return fpcM_Create(procName, p_createFunc, paramClass);
}
}
/* 80019F78-8001A138 0148B8 01C0+00 0/0 0/0 6/6 .text
* fopAcM_createChildFromOffset__FsUiUlPC4cXyziPC5csXyzPC4cXyzScPFPv_i */
s32 fopAcM_createChildFromOffset(s16 procName, unsigned int parentProcID, u32 actorParams,
const cXyz* p_pos, int roomNo, const csXyz* p_angle,
const cXyz* p_scale, s8 subType, createFunc p_createFunc) {
fopAc_ac_c* parentActor = fopAcM_SearchByID(parentProcID);
s16 parent_angleY = parentActor->mCurrent.mAngle.y;
cXyz tmpPos;
if (p_pos == NULL) {
tmpPos = cXyz::Zero;
} else {
tmpPos = *p_pos;
}
csXyz tmpRot;
if (p_angle == NULL) {
tmpRot = csXyz::Zero;
} else {
tmpRot = *p_angle;
}
cXyz parentPos = parentActor->mCurrent.mPosition;
csXyz newAngle(tmpRot);
newAngle.y += parent_angleY;
parentPos.x += tmpPos.z * cM_ssin(parent_angleY) + tmpPos.x * cM_scos(parent_angleY);
parentPos.y += tmpPos.y;
parentPos.z += tmpPos.z * cM_scos(parent_angleY) - tmpPos.x * cM_ssin(parent_angleY);
fopAcM_prm_class* prmClass = createAppend(0xFFFF, actorParams, &parentPos, roomNo, &newAngle,
p_scale, subType, parentProcID);
if (prmClass == NULL) {
return -1;
} else {
return fpcM_Create(procName, p_createFunc, prmClass);
}
}
/* ############################################################################################## */
/* 803788C8-803788C8 004F28 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
#pragma push
#pragma force_active on
// "Creating Actor Heap"
SECTION_DEAD static char const* const stringBase_803788D7 = "アクターのヒープの生成";
// "fopAcM_createHeap allocation failure\n"
SECTION_DEAD static char const* const stringBase_803788EE = "fopAcM_createHeap 確保失敗\n";
#pragma pop
/* 8001A138-8001A188 014A78 0050+00 0/0 1/1 1/1 .text fopAcM_DeleteHeap__FP10fopAc_ac_c
*/
void fopAcM_DeleteHeap(fopAc_ac_c* p_actor) {
// "Destroying actor's heap"
fopAcM_Log(p_actor, "アクターのヒープの破壊");
if (p_actor->mHeap != NULL) {
mDoExt_destroySolidHeap(p_actor->mHeap);
p_actor->mHeap = NULL;
}
}
/* 8001A188-8001A1E8 014AC8 0060+00 1/1 0/0 0/0 .text
* fopAcM_callCallback__FP10fopAc_ac_cPFP10fopAc_ac_c_iP7JKRHeap */
s32 fopAcM_callCallback(fopAc_ac_c* p_actor, heapCallbackFunc p_callbackFunc, JKRHeap* p_heap) {
JKRHeap* oldHeap = mDoExt_setCurrentHeap(p_heap);
s32 ret = p_callbackFunc(p_actor);
mDoExt_setCurrentHeap(oldHeap);
return ret;
}
/* 80450CC8-80450CCC -00001 0004+00 2/2 0/0 0/0 .sbss None */
/* 80450CC8 0001+00 data_80450CC8 None */
/* 80450CC9 0003+00 data_80450CC9 None */
static u8 lbl_80450CC8;
static u8 lbl_80450CC9;
/* 8001A1E8-8001A4B0 014B28 02C8+00 1/1 0/0 0/0 .text
* fopAcM_entrySolidHeap___FP10fopAc_ac_cPFP10fopAc_ac_c_iUl */
bool fopAcM_entrySolidHeap_(fopAc_ac_c* p_actor, heapCallbackFunc p_heapCallback, u32 size) {
const char* procNameString = fopAcM_getProcNameString(p_actor);
JKRSolidHeap* heap00 = NULL;
if (size != 0) {
size = ALIGN_NEXT(size, 0x10);
}
while (true) {
if (size != 0) {
heap00 = mDoExt_createSolidHeapFromGame(size, 0x20);
if (heap00 != NULL) {
bool status = fopAcM_callCallback(p_actor, p_heapCallback, heap00) != 0;
if (!status) {
// "Entry for estimated heap size(%08x) failed. %08x[%s]\n"
OSReport_Error("見積もりヒープサイズ(%08x)で登録失敗しました。%08x[%s]\n",
size, heap00->getFreeSize(), procNameString);
mDoExt_destroySolidHeap(heap00);
heap00 = NULL;
}
} else {
// "Could not allocate estimated heap. %08x [%s]\n"
OSReport_Error("見積もりヒープが確保できませんでした。 %08x [%s]\n", size,
procNameString);
}
}
if (heap00 == NULL) {
heap00 = mDoExt_createSolidHeapFromGame(0xFFFFFFFF, 0x20);
if (heap00 == NULL) {
// "Failed to allocate maximum heap size. [%s]\n"
OSReport_Error("最大空きヒープサイズで確保失敗。[%s]\n", procNameString);
return false;
}
bool status = fopAcM_callCallback(p_actor, p_heapCallback, heap00) != 0;
if (!status) {
// "Entry failed for maximum heap size. %08x[%s]\n"
OSReport_Error("最大空きヒープサイズで登録失敗。%08x[%s]\n", heap00->getFreeSize(),
procNameString);
mDoExt_destroySolidHeap(heap00);
return false;
}
}
if (heap00 == NULL) {
break;
}
if (lbl_80450CC8 == 0) {
mDoExt_adjustSolidHeap(heap00);
p_actor->mHeap = heap00;
return true;
} else {
JKRSolidHeap* heap = NULL;
u32 heap00Size = heap00->getSize();
u32 alignedSize = ALIGN_NEXT(heap00Size - heap00->getFreeSize(), 0x20);
if (alignedSize + 0x90 < mDoExt_getGameHeap()->getFreeSize()) {
heap = mDoExt_createSolidHeapFromGame(alignedSize, 0x20);
}
if (heap != NULL) {
if (heap < heap00) {
mDoExt_destroySolidHeap(heap00);
heap00 = NULL;
bool status = fopAcM_callCallback(p_actor, p_heapCallback, heap) != 0;
if (!status) {
// "Entry fails at exact size? (Bug)\n"
OSReport_Error("ぴったりサイズで、登録失敗?(バグ)\n");
mDoExt_destroySolidHeap(heap);
heap = NULL;
}
} else {
mDoExt_destroySolidHeap(heap);
heap = NULL;
}
}
if (heap != NULL) {
mDoExt_adjustSolidHeap(heap);
p_actor->mHeap = heap;
return true;
}
if (heap00 != NULL) {
mDoExt_adjustSolidHeap(heap00);
p_actor->mHeap = heap00;
return true;
}
OSReport_Error("ばぐばぐです\n"); // "There's a big bug\n"
OSReport_Error("緊急回避措置\n"); // "Emergency action\n"
lbl_80450CC8 = 0;
}
}
// "fopAcM_entrySolidHeap didn't work [%s]\n"
OSReport_Error("fopAcM_entrySolidHeap だめでした [%s]\n", procNameString);
return false;
}
/* 8001A4B0-8001A528 014DF0 0078+00 0/0 4/4 446/446 .text
* fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl */
bool fopAcM_entrySolidHeap(fopAc_ac_c* p_actor, heapCallbackFunc p_heapCallback, u32 size) {
u8 oldCC9 = lbl_80450CC9;
if (size & 0x80000000) {
lbl_80450CC9 = 1;
}
u8 oldCC8 = lbl_80450CC8;
if (size & 0x20000000) {
lbl_80450CC8 = 0;
} else if (size & 0x10000000) {
lbl_80450CC8 = 1;
}
bool result = fopAcM_entrySolidHeap_(p_actor, p_heapCallback, size & 0xFFFFFF);
lbl_80450CC9 = oldCC9;
lbl_80450CC8 = oldCC8;
return result;
}
/* 8001A528-8001A538 014E68 0010+00 0/0 0/0 136/136 .text fopAcM_SetMin__FP10fopAc_ac_cfff */
void fopAcM_SetMin(fopAc_ac_c* p_actor, f32 minX, f32 minY, f32 minZ) {
p_actor->mCull.mBox.mMin.set(minX, minY, minZ);
}
/* 8001A538-8001A548 014E78 0010+00 0/0 0/0 136/136 .text fopAcM_SetMax__FP10fopAc_ac_cfff */
void fopAcM_SetMax(fopAc_ac_c* p_actor, f32 maxX, f32 maxY, f32 maxZ) {
p_actor->mCull.mBox.mMax.set(maxX, maxY, maxZ);
}
/* 8001A548-8001A564 014E88 001C+00 1/1 0/0 260/260 .text
* fopAcM_setCullSizeBox__FP10fopAc_ac_cffffff */
void fopAcM_setCullSizeBox(fopAc_ac_c* p_actor, f32 minX, f32 minY, f32 minZ, f32 maxX, f32 maxY,
f32 maxZ) {
p_actor->mCull.mBox.mMin.set(minX, minY, minZ);
p_actor->mCull.mBox.mMax.set(maxX, maxY, maxZ);
}
/* 8001A564-8001A578 014EA4 0014+00 0/0 0/0 4/4 .text fopAcM_setCullSizeSphere__FP10fopAc_ac_cffff
*/
void fopAcM_setCullSizeSphere(fopAc_ac_c* p_actor, f32 minX, f32 minY, f32 minZ, f32 radius) {
p_actor->mCull.mSphere.mCenter.set(minX, minY, minZ);
p_actor->mCull.mSphere.mRadius = radius;
}
/* 8001A578-8001A5DC 014EB8 0064+00 0/0 0/0 123/123 .text
* fopAcM_setCullSizeBox2__FP10fopAc_ac_cP12J3DModelData */
void fopAcM_setCullSizeBox2(fopAc_ac_c* p_actor, J3DModelData* p_modelData) {
J3DJoint* jointNode = p_modelData->getJointNodePointer(0);
f32 minX = p_actor->mScale.x * jointNode->getMin()->x;
f32 minY = p_actor->mScale.y * jointNode->getMin()->y;
f32 minZ = p_actor->mScale.z * jointNode->getMin()->z;
f32 maxX = p_actor->mScale.x * jointNode->getMax()->x;
f32 maxY = p_actor->mScale.y * jointNode->getMax()->y;
f32 maxZ = p_actor->mScale.z * jointNode->getMax()->z;
fopAcM_setCullSizeBox(p_actor, minX, minY, minZ, maxX, maxY, maxZ);
}
/* 8001A5DC-8001A60C 014F1C 0030+00 0/0 0/0 1/1 .text fopAcM_addAngleY__FP10fopAc_ac_css
*/
bool fopAcM_addAngleY(fopAc_ac_c* p_actor, s16 target, s16 step) {
return cLib_chaseAngleS(&fopAcM_GetAngle_p(p_actor).y, target, step);
}
inline void clampMin(f32& val, f32 min) {
if (val < min) {
val = min;
}
}
/* 8001A60C-8001A660 014F4C 0054+00 1/1 0/0 8/8 .text fopAcM_calcSpeed__FP10fopAc_ac_c */
void fopAcM_calcSpeed(fopAc_ac_c* p_actor) {
f32 speedF = fopAcM_GetSpeedF(p_actor);
f32 gravity = fopAcM_GetGravity(p_actor);
f32 xSpeed = speedF * cM_ssin(p_actor->getAngle().GetY());
f32 ySpeed = p_actor->mSpeed.y + gravity;
f32 zSpeed = speedF * cM_scos(p_actor->getAngle().GetY());
clampMin(ySpeed, fopAcM_GetMaxFallSpeed(p_actor));
fopAcM_SetSpeed(p_actor, xSpeed, ySpeed, zSpeed);
}
/* 8001A660-8001A6CC 014FA0 006C+00 1/1 1/1 17/17 .text fopAcM_posMove__FP10fopAc_ac_cPC4cXyz */
void fopAcM_posMove(fopAc_ac_c* p_actor, const cXyz* p_movePos) {
p_actor->mCurrent.mPosition += p_actor->mSpeed;
if (p_movePos != NULL) {
p_actor->mCurrent.mPosition += *p_movePos;
}
}
/* 8001A6CC-8001A710 01500C 0044+00 0/0 5/5 137/137 .text fopAcM_posMoveF__FP10fopAc_ac_cPC4cXyz
*/
void fopAcM_posMoveF(fopAc_ac_c* p_actor, const cXyz* p_movePos) {
fopAcM_calcSpeed(p_actor);
fopAcM_posMove(p_actor, p_movePos);
}
/* 8001A710-8001A738 015050 0028+00 1/1 26/26 596/596 .text
* fopAcM_searchActorAngleY__FPC10fopAc_ac_cPC10fopAc_ac_c */
s16 fopAcM_searchActorAngleY(const fopAc_ac_c* p_actorA, const fopAc_ac_c* p_actorB) {
return cLib_targetAngleY(&p_actorA->mCurrent.mPosition, &p_actorB->mCurrent.mPosition);
}
/* ############################################################################################## */
/* 80451C04-80451C08 000204 0004+00 13/13 0/0 0/0 .sdata2 @4645 */
SECTION_SDATA2 static u8 lit_4645[4] = {
0x00,
0x00,
0x00,
0x00,
};
inline f32 JMAFastSqrt__Ff(f32 f) {
if (f > /* 0.0f */ FLOAT_LABEL(lit_4645)) {
f *= __frsqrte(f); // generates a useless frsp
}
return f;
}
inline f32 square(f32 f) {
return f * f;
}
/* 8001A738-8001A79C 015078 0064+00 0/0 0/0 13/13 .text
* fopAcM_searchActorAngleX__FPC10fopAc_ac_cPC10fopAc_ac_c */
#ifdef NON_MATCHING
s16 fopAcM_searchActorAngleX(const fopAc_ac_c* p_actorA, const fopAc_ac_c* p_actorB) {
const cXyz& posA = fopAcM_GetPosition_p(p_actorA);
const cXyz& posB = fopAcM_GetPosition_p(p_actorB);
return cM_atan2s(posB.y - posA.y,
JMAFastSqrt__Ff(square(posB.x - posA.x) + square(posB.z - posA.z)));
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm s16 fopAcM_searchActorAngleX(const fopAc_ac_c* p_actorA, const fopAc_ac_c* p_actorB) {
nofralloc
#include "asm/f_op/f_op_actor_mng/fopAcM_searchActorAngleX__FPC10fopAc_ac_cPC10fopAc_ac_c.s"
}
#pragma pop
#endif
/* 8001A79C-8001A7E0 0150DC 0044+00 0/0 3/3 15/15 .text
* fopAcM_seenActorAngleY__FPC10fopAc_ac_cPC10fopAc_ac_c */
s32 fopAcM_seenActorAngleY(const fopAc_ac_c* p_actorA, const fopAc_ac_c* p_actorB) {
return abs(static_cast<s16>(
cLib_targetAngleY(&p_actorA->mCurrent.mPosition, &p_actorB->mCurrent.mPosition) -
p_actorA->mCollisionRot.y));
}
/* ############################################################################################## */
/* 80451C08-80451C10 000208 0008+00 3/3 0/0 0/0 .sdata2 @4745 */
SECTION_SDATA2 static f64 lit_4745 = 0.5;
/* 80451C10-80451C18 000210 0008+00 3/3 0/0 0/0 .sdata2 @4746 */
SECTION_SDATA2 static f64 lit_4746 = 3.0;
/* 80451C18-80451C20 000218 0008+00 4/4 0/0 0/0 .sdata2 @4747 */
SECTION_SDATA2 static u8 lit_4747[8] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
inline f32 local_sqrtf(f32 mag) {
if (mag > FLOAT_LABEL(lit_4645)) {
f64 tmpd = __frsqrte(mag);
tmpd = DOUBLE_LABEL(lit_4745) * tmpd * (DOUBLE_LABEL(lit_4746) - tmpd * tmpd * mag);
tmpd = DOUBLE_LABEL(lit_4745) * tmpd * (DOUBLE_LABEL(lit_4746) - tmpd * tmpd * mag);
return DOUBLE_LABEL(lit_4745) * tmpd * (DOUBLE_LABEL(lit_4746) - tmpd * tmpd * mag) * mag;
} else if (mag < DOUBLE_LABEL(lit_4747)) {
return __float_nan[0];
} else if (fpclassify(mag) == 1) {
return __float_nan[0];
} else {
return mag;
}
}
/* 8001A7E0-8001A914 015120 0134+00 0/0 5/5 188/188 .text
* fopAcM_searchActorDistance__FPC10fopAc_ac_cPC10fopAc_ac_c */
f32 fopAcM_searchActorDistance(const fopAc_ac_c* p_actorA, const fopAc_ac_c* p_actorB) {
cXyz tmp = (p_actorB->mCurrent.mPosition - p_actorA->mCurrent.mPosition);
return local_sqrtf(tmp.abs2());
}
/* 8001A914-8001A964 015254 0050+00 0/0 0/0 2/2 .text
* fopAcM_searchActorDistance2__FPC10fopAc_ac_cPC10fopAc_ac_c */
f32 fopAcM_searchActorDistance2(const fopAc_ac_c* p_actorA, const fopAc_ac_c* p_actorB) {
cXyz tmp = (p_actorB->mCurrent.mPosition - p_actorA->mCurrent.mPosition);
return tmp.abs2();
}
/* 8001A964-8001AA94 0152A4 0130+00 0/0 3/3 125/125 .text
* fopAcM_searchActorDistanceXZ__FPC10fopAc_ac_cPC10fopAc_ac_c */
#ifdef NON_MATCHING
// matches besides data
f32 fopAcM_searchActorDistanceXZ(const fopAc_ac_c* p_actorA, const fopAc_ac_c* p_actorB) {
const cXyz& posA = fopAcM_GetPosition_p(p_actorA);
const cXyz& posB = fopAcM_GetPosition_p(p_actorB);
return sqrtf((posB - posA).abs2XZ());
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm f32 fopAcM_searchActorDistanceXZ(const fopAc_ac_c* p_actorA, const fopAc_ac_c* p_actorB) {
nofralloc
#include "asm/f_op/f_op_actor_mng/fopAcM_searchActorDistanceXZ__FPC10fopAc_ac_cPC10fopAc_ac_c.s"
}
#pragma pop
#endif
/* 8001AA94-8001AAE0 0153D4 004C+00 1/1 4/4 30/30 .text
* fopAcM_searchActorDistanceXZ2__FPC10fopAc_ac_cPC10fopAc_ac_c */
#ifdef NON_MATCHING
// matches besides data
f32 fopAcM_searchActorDistanceXZ2(const fopAc_ac_c* p_actorA, const fopAc_ac_c* p_actorB) {
const cXyz& posA = fopAcM_GetPosition_p(p_actorA);
const cXyz& posB = fopAcM_GetPosition_p(p_actorB);
return (posB - posA).abs2XZ();
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm f32 fopAcM_searchActorDistanceXZ2(fopAc_ac_c const* param_0, fopAc_ac_c const* param_1) {
nofralloc
#include "asm/f_op/f_op_actor_mng/fopAcM_searchActorDistanceXZ2__FPC10fopAc_ac_cPC10fopAc_ac_c.s"
}
#pragma pop
#endif
BOOL daPy_py_c::checkNowWolf() {
return dComIfGp_getLinkPlayer()->i_checkWolf();
}
/* 8001AAE0-8001AC40 015420 0160+00 0/0 0/0 2/2 .text
* fopAcM_rollPlayerCrash__FPC10fopAc_ac_cfUlffif */
s32 fopAcM_rollPlayerCrash(fopAc_ac_c const* actor, f32 param_1, u32 param_2, f32 param_3,
f32 param_4, int param_5, f32 param_6) {
daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0);
if (player != dComIfGp_getLinkPlayer()) {
return 0;
}
f32 tmp = param_1 + 40.0f;
if (daPy_py_c::checkNowWolf()) {
tmp += 55.0f;
}
f32 y_dist = fopAcM_searchPlayerDistanceY(actor);
if (y_dist > param_4 && y_dist < param_3 &&
(player->checkFrontRoll() || player->checkWolfDash()) &&
fopAcM_searchPlayerDistanceXZ2(actor) < (tmp * tmp)) {
if (cM_scos(player->mCurrent.mAngle.y - fopAcM_searchPlayerAngleY(actor)) < param_6) {
player->onFrollCrashFlg(param_2, param_5);
return 1;
}
}
return 0;
}
/* 8001AC40-8001ACEC 015580 00AC+00 0/0 0/0 2/2 .text fopAcM_checkCullingBox__FPA4_fffffff */
s32 fopAcM_checkCullingBox(Mtx pMtx, f32 x1, f32 y1, f32 z1, f32 x2, f32 y2, f32 z2) {
Vec tmp1 = {x1, y1, z1};
Vec tmp2 = {x2, y2, z2};
Mtx tmpMtx;
PSMTXConcat(j3dSys.mViewMtx, pMtx, tmpMtx);
return mDoLib_clipper::mClipper.clip(tmpMtx, &tmp2, &tmp1) != 0;
}
/* ############################################################################################## */
/* 803A35F0-803A3740 000710 0150+00 1/1 0/0 0/0 .data l_cullSizeBox */
SECTION_DATA static u8 l_cullSizeBox[336] = {
0xC2, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC2, 0x20, 0x00, 0x00, 0x42, 0x20, 0x00, 0x00,
0x42, 0xFA, 0x00, 0x00, 0x42, 0x20, 0x00, 0x00, 0xC1, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xC1, 0xC8, 0x00, 0x00, 0x41, 0xC8, 0x00, 0x00, 0x42, 0x48, 0x00, 0x00, 0x41, 0xC8, 0x00, 0x00,
0xC2, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC2, 0x48, 0x00, 0x00, 0x42, 0x48, 0x00, 0x00,
0x42, 0xC8, 0x00, 0x00, 0x42, 0x48, 0x00, 0x00, 0xC2, 0x96, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xC2, 0x96, 0x00, 0x00, 0x42, 0x96, 0x00, 0x00, 0x43, 0x16, 0x00, 0x00, 0x42, 0x96, 0x00, 0x00,
0xC2, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC2, 0xC8, 0x00, 0x00, 0x42, 0xC8, 0x00, 0x00,
0x44, 0x48, 0x00, 0x00, 0x42, 0xC8, 0x00, 0x00, 0xC2, 0xFA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xC2, 0xFA, 0x00, 0x00, 0x42, 0xFA, 0x00, 0x00, 0x43, 0x7A, 0x00, 0x00, 0x42, 0xFA, 0x00, 0x00,
0xC3, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC3, 0x16, 0x00, 0x00, 0x43, 0x16, 0x00, 0x00,
0x43, 0x96, 0x00, 0x00, 0x43, 0x16, 0x00, 0x00, 0xC3, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xC3, 0x48, 0x00, 0x00, 0x43, 0x48, 0x00, 0x00, 0x43, 0xC8, 0x00, 0x00, 0x43, 0x48, 0x00, 0x00,
0xC4, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC4, 0x16, 0x00, 0x00, 0x44, 0x16, 0x00, 0x00,
0x44, 0x61, 0x00, 0x00, 0x44, 0x16, 0x00, 0x00, 0xC3, 0x7A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xC2, 0x48, 0x00, 0x00, 0x43, 0x7A, 0x00, 0x00, 0x43, 0xE1, 0x00, 0x00, 0x42, 0x48, 0x00, 0x00,
0xC2, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0xA0, 0x00, 0x00, 0x42, 0x20, 0x00, 0x00,
0x43, 0x02, 0x00, 0x00, 0x43, 0x16, 0x00, 0x00, 0xC2, 0x96, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xC2, 0x96, 0x00, 0x00, 0x42, 0x96, 0x00, 0x00, 0x43, 0x52, 0x00, 0x00, 0x42, 0x96, 0x00, 0x00,
0xC2, 0x8C, 0x00, 0x00, 0xC2, 0xC8, 0x00, 0x00, 0xC2, 0xA0, 0x00, 0x00, 0x42, 0x8C, 0x00, 0x00,
0x43, 0x70, 0x00, 0x00, 0x42, 0xC8, 0x00, 0x00, 0xC2, 0x70, 0x00, 0x00, 0xC1, 0xA0, 0x00, 0x00,
0xC2, 0x70, 0x00, 0x00, 0x42, 0x70, 0x00, 0x00, 0x43, 0x20, 0x00, 0x00, 0x42, 0x70, 0x00, 0x00,
};
/* 803A3740-803A37C0 000860 0080+00 1/1 0/0 0/0 .data l_cullSizeSphere */
SECTION_DATA static u8 l_cullSizeSphere[128] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xA0, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x48, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xC8, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x16, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x48, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7A, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x96, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0xC8, 0x00, 0x00,
};
/* 8001ACEC-8001B058 01562C 036C+00 0/0 1/1 1/1 .text fopAcM_cullingCheck__FPC10fopAc_ac_c */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm s32 fopAcM_cullingCheck(fopAc_ac_c const* param_0) {
nofralloc
#include "asm/f_op/f_op_actor_mng/fopAcM_cullingCheck__FPC10fopAc_ac_c.s"
}
#pragma pop
/* 8001B058-8001B068 015998 0010+00 5/5 0/0 0/0 .text event_second_actor__FUs */
void* event_second_actor(u16) {
return dComIfGp_getPlayer(0);
}
/* 8001B068-8001B0FC 0159A8 0094+00 0/0 3/3 0/0 .text
* fopAcM_orderTalkEvent__FP10fopAc_ac_cP10fopAc_ac_cUsUs */
s32 fopAcM_orderTalkEvent(fopAc_ac_c* actorA, fopAc_ac_c* actorB, u16 priority, u16 flag) {
if (!i_dComIfGp_getEvent().i_isOrderOK() && (!(flag & 0x400) || !i_dComIfGp_getEvent().isChangeOK(actorA))) {
return 0;
}
if (priority == 0) {
priority = 0x1FF;
}
return dComIfGp_event_order(0, priority, flag, 0x14F, actorA, actorB, -1, -1);
}
/* 8001B0FC-8001B19C 015A3C 00A0+00 0/0 1/1 0/0 .text
* fopAcM_orderTalkItemBtnEvent__FUsP10fopAc_ac_cP10fopAc_ac_cUsUs */
s32 fopAcM_orderTalkItemBtnEvent(u16 eventType, fopAc_ac_c* actorA, fopAc_ac_c* actorB,
u16 priority, u16 flag) {
if (!i_dComIfGp_getEvent().i_isOrderOK() && (!(flag & 0x400) || !i_dComIfGp_getEvent().isChangeOK(actorA))) {
return 0;
}
if (priority == 0) {
priority = 0x1F4;
}
return dComIfGp_event_order(eventType, priority, flag, 0x14F, actorA, actorB, -1, -1);
}
/* 8001B19C-8001B244 015ADC 00A8+00 0/0 3/3 16/16 .text fopAcM_orderSpeakEvent__FP10fopAc_ac_cUsUs
*/
// wrong load order
#ifdef NONMATCHING
s32 fopAcM_orderSpeakEvent(fopAc_ac_c* actor, u16 priority, u16 flag) {
if (!i_dComIfGp_getEvent().i_isOrderOK() && (!(flag & 0x400) || !i_dComIfGp_getEvent().isChangeOK(actor))) {
return 0;
}
if (priority == 0) {
priority = 0x1EA;
}
return dComIfGp_event_order(0, priority, flag, 0x14F, dComIfGp_getPlayer(0), actor, -1, -1);
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm s32 fopAcM_orderSpeakEvent(fopAc_ac_c* param_0, u16 param_1, u16 param_2) {
nofralloc
#include "asm/f_op/f_op_actor_mng/fopAcM_orderSpeakEvent__FP10fopAc_ac_cUsUs.s"
}
#pragma pop
#endif
/* 8001B244-8001B334 015B84 00F0+00 0/0 2/2 0/0 .text
* fopAcM_orderDoorEvent__FP10fopAc_ac_cP10fopAc_ac_cUsUs */
s32 fopAcM_orderDoorEvent(fopAc_ac_c* actorA, fopAc_ac_c* actorB, u16 priority, u16 flag) {
if (!i_dComIfGp_getEvent().i_isOrderOK() && (!(flag & 0x400) || !i_dComIfGp_getEvent().isChangeOK(actorA))) {
return 0;
}
if (priority == 0) {
priority = 0xFF;
}
s16 eventID = actorB->mEvtInfo.getEventId();
u8 toolID = actorB->mEvtInfo.getMapToolId();
if (fopAcM_GetProfName(actorB) == 0x55 && toolID != 0xFF) {
eventID = i_dComIfGp_getEventManager().getEventIdx(actorA, NULL, toolID);
}
return dComIfGp_event_order(1, priority, flag, -1, actorA, actorB, eventID, toolID);
}
/* 8001B334-8001B3CC 015C74 0098+00 0/0 1/1 0/0 .text
* fopAcM_orderCatchEvent__FP10fopAc_ac_cP10fopAc_ac_cUsUs */
s32 fopAcM_orderCatchEvent(fopAc_ac_c* actorA, fopAc_ac_c* actorB, u16 priority, u16 flag) {
if (!i_dComIfGp_getEvent().i_isOrderOK() && (!(flag & 0x400) || !i_dComIfGp_getEvent().isChangeOK(actorA))) {
return 0;
}
if (priority == 0) {
priority = 2;
}
return dComIfGp_event_order(10, priority, flag, -1, actorA, actorB, -1, -1);
}
/* 8001B3CC-8001B4E0 015D0C 0114+00 0/0 2/2 6/6 .text
* fopAcM_orderOtherEvent__FP10fopAc_ac_cPCcUsUsUs */
s32 fopAcM_orderOtherEvent(fopAc_ac_c* actor, char const* param_1, u16 param_2, u16 flag,
u16 priority) {
if (!i_dComIfGp_getEvent().i_isOrderOK() && (!(flag & 0x400) || !i_dComIfGp_getEvent().isChangeOK(actor))) {
return 0;
}
s16 eventIdx = i_dComIfGp_getEventManager().getEventIdx(actor, param_1, -1);
if (eventIdx < 0) {
return 0;
}
u16 eventPrio = i_dComIfGp_getEventManager().getEventPrio(actor, eventIdx);
if (eventPrio == 0) {
eventPrio = 0xFF;
}
if (priority != 0) {
eventPrio = priority;
}
return dComIfGp_event_order(2, eventPrio, flag, param_2, actor, event_second_actor(flag), eventIdx, -1);
}
/* 8001B4E0-8001B5E4 015E20 0104+00 0/0 1/1 2/2 .text
* fopAcM_orderOtherEvent__FP10fopAc_ac_cP10fopAc_ac_cPCcUsUsUs */
s32 fopAcM_orderOtherEvent(fopAc_ac_c* actorA, fopAc_ac_c* actorB, char const* param_2,
u16 param_3, u16 flag, u16 priority) {
if (!i_dComIfGp_getEvent().i_isOrderOK() && (!(flag & 0x400) || !i_dComIfGp_getEvent().isChangeOK(actorA))) {
return 0;
}
s16 eventIdx = i_dComIfGp_getEventManager().getEventIdx(actorA, param_2, -1);
if (eventIdx < 0) {
return 0;
}
u16 eventPrio = i_dComIfGp_getEventManager().getEventPrio(actorA, eventIdx);
if (eventPrio == 0) {
eventPrio = 0xFF;
}
if (priority != 0) {
eventPrio = priority;
}
return dComIfGp_event_order(2, eventPrio, flag, param_3, actorA, actorB, eventIdx, -1);
}
/* 8001B5E4-8001B67C 015F24 0098+00 0/0 2/2 41/41 .text
* fopAcM_orderChangeEventId__FP10fopAc_ac_csUsUs */
s32 fopAcM_orderChangeEventId(fopAc_ac_c* actor, s16 eventID, u16 flag, u16 param_3) {
u16 eventPrio = i_dComIfGp_getEventManager().getEventPrio(actor, eventID);
if (eventPrio == 0) {
eventPrio = 0xFF;
}
return dComIfGp_event_order(2, eventPrio, flag | 0x400, param_3, actor, event_second_actor(flag), eventID, -1);
}
/* 8001B67C-8001B7B4 015FBC 0138+00 0/0 10/10 101/101 .text
* fopAcM_orderOtherEventId__FP10fopAc_ac_csUcUsUsUs */
s32 fopAcM_orderOtherEventId(fopAc_ac_c* actor, s16 eventID, u8 param_2, u16 param_3,
u16 priority, u16 flag) {
if (!i_dComIfGp_getEvent().i_isOrderOK() && (!(flag & 0x400) || !i_dComIfGp_getEvent().isChangeOK(actor))) {
return 0;
}
u16 newPriority = 50;
s32 roomNo = dComIfGp_roomControl_getStayNo();
if (actor != NULL) {
roomNo = fopAcM_GetRoomNo(actor);
}
if (priority != 0) {
newPriority = priority;
} else if (actor != NULL) {
u16 eventPrio = i_dComIfGp_getEventManager().getEventPrio(actor, eventID);
if (eventPrio != 0) {
newPriority = eventPrio;
} else if (param_2 != 0xFF) {
dStage_MapEvent_dt_c* dt = dEvt_control_c::searchMapEventData(param_2, roomNo);
if (dt != NULL) {
newPriority = dt->field_0x6;
}
}
}
return dComIfGp_event_order(2, newPriority, flag, param_3, actor, event_second_actor(flag), eventID, param_2);
}
/* 8001B7B4-8001B8E0 0160F4 012C+00 1/1 1/1 4/4 .text
* fopAcM_orderMapToolEvent__FP10fopAc_ac_cUcsUsUsUs */
s32 fopAcM_orderMapToolEvent(fopAc_ac_c* actor, u8 param_1, s16 eventID, u16 param_3,
u16 flag, u16 param_5) {
if (!i_dComIfGp_getEvent().i_isOrderOK() && (!(flag & 0x400) || !i_dComIfGp_getEvent().isChangeOK(actor))) {
return 0;
}
u16 newPriority = 100;
s32 roomNo = dComIfGp_roomControl_getStayNo();
if (actor != NULL) {
roomNo = fopAcM_GetRoomNo(actor);
}
dStage_MapEvent_dt_c* dt = dEvt_control_c::searchMapEventData(param_1, roomNo);
if (dt != NULL) {
newPriority = dt->field_0x6;
if (eventID == 0xFF) {
eventID = i_dComIfGp_getEventManager().getEventIdx(actor, param_1);
}
}
if (flag & 0x100) {
newPriority = 3;
}
if (param_5 != 0) {
newPriority = param_5;
}
return dComIfGp_event_order(2, newPriority, flag, param_3, actor, event_second_actor(flag), eventID, param_1);
}
/* 8001B8E0-8001B908 016220 0028+00 0/0 1/1 1/1 .text
* fopAcM_orderMapToolAutoNextEvent__FP10fopAc_ac_cUcsUsUsUs */
s32 fopAcM_orderMapToolAutoNextEvent(fopAc_ac_c* actor, u8 param_1, s16 eventID, u16 param_3,
u16 flag, u16 param_5) {
return fopAcM_orderMapToolEvent(actor, param_1, eventID, param_3, flag | 0x100, param_5);
}
/* 8001B908-8001B9D0 016248 00C8+00 0/0 0/0 106/106 .text
* fopAcM_orderPotentialEvent__FP10fopAc_ac_cUsUsUs */
s32 fopAcM_orderPotentialEvent(fopAc_ac_c* actor, u16 flag, u16 param_2, u16 priority) {
if (!i_dComIfGp_getEvent().i_isOrderOK() && (!(flag & 0x400) || !i_dComIfGp_getEvent().isChangeOK(actor))) {
return 0;
}
if (priority == 0) {
priority = 0xFF;
}
return dComIfGp_event_order(4, priority, flag, param_2, actor, event_second_actor(flag), -1, -1);
}
/* 8001B9D0-8001BA7C 016310 00AC+00 0/0 3/3 12/12 .text fopAcM_orderItemEvent__FP10fopAc_ac_cUsUs
*/
// load order
#ifdef NONMATCHING
s32 fopAcM_orderItemEvent(fopAc_ac_c* actor, u16 priority, u16 flag) {
if (!i_dComIfGp_getEvent().i_isOrderOK() && (!(flag & 0x400) || !i_dComIfGp_getEvent().isChangeOK(actor))) {
return 0;
}
if (priority == 0) {
priority = 0xFF;
}
return dComIfGp_event_order(5, priority, flag, -1, dComIfGp_getPlayer(0), actor, -1, -1);
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm s32 fopAcM_orderItemEvent(fopAc_ac_c* param_0, u16 param_1, u16 param_2) {
nofralloc
#include "asm/f_op/f_op_actor_mng/fopAcM_orderItemEvent__FP10fopAc_ac_cUsUs.s"
}
#pragma pop
#endif
/* 8001BA7C-8001BB14 0163BC 0098+00 0/0 1/1 0/0 .text
* fopAcM_orderTreasureEvent__FP10fopAc_ac_cP10fopAc_ac_cUsUs */
s32 fopAcM_orderTreasureEvent(fopAc_ac_c* actorA, fopAc_ac_c* actorB, u16 priority,
u16 flag) {
if (!i_dComIfGp_getEvent().i_isOrderOK() && (!(flag & 0x400) || !i_dComIfGp_getEvent().isChangeOK(actorA))) {
return 0;
}
if (priority == 0) {
priority = 0xFF;
}
return dComIfGp_event_order(11, priority, flag, -1, actorA, actorB, -1, -1);
}
/* 8001BB14-8001BB44 016454 0030+00 0/0 11/11 10/10 .text
* fopAcM_getTalkEventPartner__FPC10fopAc_ac_c */
void* fopAcM_getTalkEventPartner(fopAc_ac_c const*) {
return dComIfGp_event_getTalkPartner();
}
/* 8001BB44-8001BB74 016484 0030+00 0/0 5/5 0/0 .text fopAcM_getItemEventPartner__FPC10fopAc_ac_c
*/
void* fopAcM_getItemEventPartner(fopAc_ac_c const*) {
return dComIfGp_event_getItemPartner();
}
/* 8001BB74-8001BBE8 0164B4 0074+00 0/0 1/1 0/0 .text fopAcM_getEventPartner__FPC10fopAc_ac_c */
void* fopAcM_getEventPartner(fopAc_ac_c const* actor) {
if (dComIfGp_event_getPt1() != actor) {
return dComIfGp_event_getPt1();
}
return dComIfGp_event_getPt2();
}
/* 8001BBE8-8001BC74 016528 008C+00 0/0 5/5 43/43 .text
* fopAcM_createItemForPresentDemo__FPC4cXyziUciiPC5csXyzPC4cXyz */
s32 fopAcM_createItemForPresentDemo(cXyz const* p_pos, int i_itemNo, u8 param_2, int i_itemBitNo,
int i_roomNo, csXyz const* p_angle, cXyz const* p_scale) {
dComIfGp_event_setGtItm(i_itemNo);
if (i_itemNo == NO_ITEM) {
return -1;
} else {
return fopAcM_createDemoItem(p_pos, i_itemNo, i_itemBitNo, p_angle, i_roomNo, p_scale, param_2);
}
}
/* 8001BC74-8001BCFC 0165B4 0088+00 0/0 2/2 10/10 .text
* fopAcM_createItemForTrBoxDemo__FPC4cXyziiiPC5csXyzPC4cXyz */
s32 fopAcM_createItemForTrBoxDemo(cXyz const* p_pos, int i_itemNo, int i_itemBitNo, int i_roomNo,
csXyz const* p_angle, cXyz const* p_scale) {
dComIfGp_event_setGtItm(i_itemNo);
if (i_itemNo == NO_ITEM) {
return -1;
} else {
return fopAcM_createDemoItem(p_pos, i_itemNo, i_itemBitNo, p_angle, i_roomNo, p_scale, 0);
}
}
/* ############################################################################################## */
/* 80451C28-80451C2C 000228 0004+00 1/1 0/0 0/0 .sdata2 @5584 */
SECTION_SDATA2 static f32 lit_5584 = 15.999899864196777f;
struct ItemTableList {
/* 0x00 */ char mListName[11];
/* 0x0B */ u8 mTableNum;
/* 0x0C */ u8 padding[4];
/* 0x10 */ u8 mTables[255][16];
};
/* 8001BCFC-8001BE14 01663C 0118+00 2/2 0/0 0/0 .text fopAcM_getItemNoFromTableNo__FUc */
// out of order instructions / regalloc
#ifdef NONMATCHING
u8 fopAcM_getItemNoFromTableNo(u8 i_tableNo) {
u8 tableNo = i_tableNo;
ItemTableList* tableList = (ItemTableList*)dComIfGp_getItemTable();
if (i_tableNo == 255) {
return i_tableNo;
}
u8 hp_percent = (i_dComIfGs_getLife() * 100) / (((dComIfGs_getMaxLife() / 5) * 4) & 0xFC);
switch (i_tableNo) {
case 150:
case 160:
case 170:
case 180:
case 190:
if (hp_percent < 80) {
if (hp_percent >= 60) {
tableNo = i_tableNo + 1;
} else if (hp_percent >= 40) {
tableNo = i_tableNo + 2;
} else if (hp_percent >= 20) {
tableNo = i_tableNo + 3;
} else {
tableNo = i_tableNo + 4;
}
}
break;
}
return tableList->mTables[tableNo][(int)cM_rndF(15.999f)];
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm u8 fopAcM_getItemNoFromTableNo(u8 param_0) {
nofralloc
#include "asm/f_op/f_op_actor_mng/fopAcM_getItemNoFromTableNo__FUc.s"
}
#pragma pop
#endif
struct EnemyTableList {
/* 0x0 */ u32 mTag;
/* 0x4 */ int field_0x4; // mTableNum?
/* 0x8 */ u8 mData;
};
struct EnemyTable {
/* 0x0 */ u8 mEnemyID;
/* 0x1 */ u8 mItemTableNo;
/* 0x2 */ char mStage[8];
};
/* 8001BE14-8001BF64 016754 0150+00 0/0 0/0 9/9 .text
* fopAcM_createItemFromEnemyID__FUcPC4cXyziiPC5csXyzPC4cXyzPfPf */
// matches with literals
#ifdef NONMATCHING
s32 fopAcM_createItemFromEnemyID(u8 i_enemyID, cXyz const* p_pos, int i_itemBitNo, int i_roomNo,
csXyz const* p_angle, cXyz const* p_scale, f32* speedF,
f32* speedY) {
int tableNo = 0xFF;
EnemyTableList* tblList = (EnemyTableList*)dEnemyItem_c::mData;
int tableNum = tblList->field_0x4;
EnemyTable* table = (EnemyTable*)&tblList->mData;
for (u32 i = 0; i < tableNum; i++) {
if (i_enemyID == table->mEnemyID) {
if (table->mStage[0] == '#') {
tableNo = table->mItemTableNo;
} else if (!strcmp(dComIfGp_getStartStageName(), table->mStage)) {
tableNo = table->mItemTableNo;
break;
}
}
table++;
}
if (daPy_getPlayerActorClass()->checkHorseRide()) {
int itemNo = fopAcM_getItemNoFromTableNo(tableNo);
void* ac = fopAcM_createItemForDirectGet(p_pos, itemNo, i_roomNo, NULL, NULL, 0.0f, 0.0f);
return fopAcM_GetID(ac);
}
return fopAcM_createItemFromTable(p_pos, tableNo, i_itemBitNo, i_roomNo, p_angle, 0, p_scale, speedF, speedY, false);
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm s32 fopAcM_createItemFromEnemyID(u8 param_0, cXyz const* param_1, int param_2, int param_3,
csXyz const* param_4, cXyz const* param_5, f32* param_6,
f32* param_7) {
nofralloc
#include "asm/f_op/f_op_actor_mng/fopAcM_createItemFromEnemyID__FUcPC4cXyziiPC5csXyzPC4cXyzPfPf.s"
}
#pragma pop
#endif
/* 8001BF64-8001C078 0168A4 0114+00 1/1 0/0 11/11 .text
* fopAcM_createItemFromTable__FPC4cXyziiiPC5csXyziPC4cXyzPfPfb */
// matches with literals
#ifdef NONMATCHING
s32 fopAcM_createItemFromTable(cXyz const* p_pos, int i_tableNo, int i_itemBitNo, int i_roomNo,
csXyz const* p_angle, int param_5, cXyz const* p_scale,
f32* speedF, f32* speedY, bool createDirect) {
if (i_tableNo == 0xFF) {
return -1;
}
s32 itemNo = fopAcM_getItemNoFromTableNo(i_tableNo);
if (itemNo == NO_ITEM) {
return -1;
}
void* ac;
if (createDirect) {
ac = fopAcM_createItemForDirectGet(p_pos, itemNo, i_roomNo, NULL, NULL, 0.0f, 0.0f);
} else if (speedF == NULL && speedY == NULL) {
ac = fopAcM_fastCreateItem2(p_pos, itemNo, i_itemBitNo, i_roomNo, param_5, p_angle, p_scale);
} else {
ac = fopAcM_fastCreateItem(p_pos, itemNo, i_roomNo, p_angle, p_scale, speedF, speedY, i_itemBitNo, param_5, NULL);
}
return fopAcM_GetID(ac);
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm s32 fopAcM_createItemFromTable(cXyz const* param_0, int param_1, int param_2, int param_3,
csXyz const* param_4, int param_5, cXyz const* param_6,
f32* param_7, f32* param_8, bool param_9) {
nofralloc
#include "asm/f_op/f_op_actor_mng/fopAcM_createItemFromTable__FPC4cXyziiiPC5csXyziPC4cXyzPfPfb.s"
}
#pragma pop
#endif
/* 8001C078-8001C0D4 0169B8 005C+00 2/2 0/0 0/0 .text
* fopAcM_createDemoItem__FPC4cXyziiPC5csXyziPC4cXyzUc */
s32 fopAcM_createDemoItem(const cXyz* p_pos, int itemNo, int itemBitNo, const csXyz* p_angle,
int roomNo, const cXyz* scale, u8 param_7) {
if (itemNo == NO_ITEM) {
return -1;
} else {
return fopAcM_create(PROC_Demo_Item, (itemNo & 0xFF) | (itemBitNo & 0x7F) << 0x8 | (param_7 << 0x10),
p_pos, roomNo, p_angle, scale, -1);
}
}
/* 8001C0D4-8001C174 016A14 00A0+00 0/0 0/0 18/18 .text
* fopAcM_createItemForBoss__FPC4cXyziiPC5csXyzPC4cXyzffi */
s32 fopAcM_createItemForBoss(const cXyz* p_pos, int param_2, int roomNo, const csXyz* p_angle,
const cXyz* p_scale, f32 speedF, f32 speedY, int param_8) {
fopAc_ac_c* actor = (fopAc_ac_c*)fopAcM_fastCreate(PROC_Obj_LifeContainer, 0xFFFF0000 | param_8 << 0x8 | (param_2 & 0xFF), p_pos, roomNo, p_angle,
p_scale, -1, NULL, NULL);
if (actor != NULL) {
actor->mSpeedF = speedF;
actor->mSpeed.y = speedY;
}
return fopAcM_GetID(actor);
}
/* 8001C174-8001C1B8 016AB4 0044+00 0/0 0/0 2/2 .text
* fopAcM_createItemForMidBoss__FPC4cXyziiPC5csXyzPC4cXyzii */
s32 fopAcM_createItemForMidBoss(const cXyz* p_pos, int i_itemNo, int i_roomNo, const csXyz* p_angle,
const cXyz* p_scale, int param_6, int param_7) {
return fopAcM_createItem(p_pos, i_itemNo, param_7, i_roomNo, &csXyz(csXyz::Zero), p_scale, 0x6);
}
/* 8001C1B8-8001C1FC 016AF8 0044+00 2/2 0/0 1/1 .text
* fopAcM_createItemForDirectGet__FPC4cXyziiPC5csXyzPC4cXyzff */
void* fopAcM_createItemForDirectGet(const cXyz* p_pos, int i_itemNo, int i_roomNo, const csXyz* p_angle,
const cXyz* p_scale, f32 speedF, f32 speedY) {
return fopAcM_fastCreateItem(p_pos, i_itemNo, i_roomNo, p_angle, p_scale, &speedF, &speedY, -1, 0x7,
NULL);
}
/* 8001C1FC-8001C240 016B3C 0044+00 0/0 2/2 3/3 .text
* fopAcM_createItemForSimpleDemo__FPC4cXyziiPC5csXyzPC4cXyzff */
void* fopAcM_createItemForSimpleDemo(const cXyz* p_pos, int i_itemNo, int i_roomNo, const csXyz* p_angle,
const cXyz* p_scale, f32 speedF, f32 speedY) {
return fopAcM_fastCreateItem(p_pos, i_itemNo, i_roomNo, p_angle, p_scale, &speedF, &speedY, -1, 0x4,
NULL);
}
inline u32 maskShift(int val, int bits, int shift) {
return (val & ((1 << bits) - 1)) << shift;
}
inline u32 makeItemParams(int iNo, int p8, int unk, int p9) {
return maskShift(p8, 8, 0x8) | maskShift(iNo, 8, 0) | maskShift(unk, 8, 0x10) |
maskShift(p9, 4, 0x18);
}
/* 8001C240-8001C3E0 016B80 01A0+00 1/1 1/1 17/17 .text
* fopAcM_createItem__FPC4cXyziiiPC5csXyzPC4cXyzi */
s32 fopAcM_createItem(const cXyz* p_pos, int itemNo, int param_3, int roomNo, const csXyz* p_angle,
const cXyz* p_scale, int param_7) {
if (itemNo == NO_ITEM) {
return -1;
}
csXyz item_angle(csXyz::Zero);
if (p_angle != NULL) {
item_angle = *p_angle;
} else {
item_angle.y = cM_rndFX(32767.0f);
}
item_angle.z = 0xFF;
u32 itemActorParams = makeItemParams(check_itemno(itemNo), param_3, 0xFF, param_7);
switch (itemNo) {
case RECOVERY_FAILY:
return fopAcM_create(PROC_Obj_Yousei, 0xFFFFFFFF, p_pos, roomNo, p_angle, p_scale, -1);
case KAKERA_HEART:
case UTAWA_HEART:
return fopAcM_create(PROC_Obj_LifeContainer, itemActorParams, p_pos, roomNo, p_angle, p_scale, -1);
case TRIPLE_HEART:
for (int i = 0; i < 2; i++) {
fopAcM_create(PROC_ITEM, itemActorParams, p_pos, roomNo, &item_angle, p_scale, -1);
item_angle.y = cM_rndFX(32767.0f);
}
default:
return fopAcM_create(PROC_ITEM, itemActorParams, p_pos, roomNo, &item_angle, p_scale, -1);
}
}
/* 8001C3E0-8001C5B0 016D20 01D0+00 1/1 0/0 0/0 .text
* fopAcM_fastCreateItem2__FPC4cXyziiiiPC5csXyzPC4cXyz */
void* fopAcM_fastCreateItem2(const cXyz* p_pos, int itemNo, int param_3, int roomNo, int param_5,
const csXyz* p_angle, const cXyz* p_scale) {
csXyz item_angle(csXyz::Zero);
if (itemNo == NO_ITEM) {
return NULL;
}
if (p_angle != NULL) {
item_angle = *p_angle;
} else {
item_angle.y = cM_rndFX(32767.0f);
}
item_angle.z = 0xFF;
int tmpItemNo = check_itemno(itemNo);
u32 itemActorParams =
(param_3 & 0xFF) << 0x8 | (tmpItemNo & 0xFF) | 0xFF << 0x10 | ((param_5 & 0xF) << 0x18);
switch (itemNo) {
case RECOVERY_FAILY:
return fopAcM_fastCreate(PROC_Obj_Yousei, 0xFFFFFFFF, p_pos, roomNo, p_angle, p_scale, -1, NULL, NULL);
case KAKERA_HEART:
case UTAWA_HEART:
return fopAcM_fastCreate(PROC_Obj_LifeContainer, itemActorParams, p_pos, roomNo, p_angle, p_scale, -1, NULL,
NULL);
case TRIPLE_HEART:
for (int i = 0; i < 2; i++) {
fopAcM_fastCreate(PROC_ITEM, itemActorParams, p_pos, roomNo, &item_angle, p_scale, -1, NULL, NULL);
item_angle.y = cM_rndFX(32767.0f);
}
default:
return fopAcM_fastCreate(PROC_ITEM, itemActorParams, p_pos, roomNo, &item_angle, p_scale, -1, NULL,
NULL);
}
}
/* ############################################################################################## */
/* 80451C30-80451C34 000230 0004+00 1/1 0/0 0/0 .sdata2 @5808 */
SECTION_SDATA2 static f32 lit_5808 = 2.0f;
/* 80451C34-80451C38 000234 0004+00 1/1 0/0 0/0 .sdata2 @5809 */
SECTION_SDATA2 static f32 lit_5809 = 8192.0f;
/* 80451C38-80451C3C 000238 0004+00 4/4 0/0 0/0 .sdata2 @5810 */
SECTION_SDATA2 static f32 lit_5810 = 1.0f;
/* 80451C3C-80451C40 00023C 0004+00 1/1 0/0 0/0 .sdata2 @5811 */
SECTION_SDATA2 static f32 lit_5811 = 3.0f / 10.0f;
/* 80451C40-80451C44 000240 0004+00 1/1 0/0 0/0 .sdata2 @5812 */
SECTION_SDATA2 static f32 lit_5812 = 1.0f / 5.0f;
/* 8001C5B0-8001C870 016EF0 02C0+00 3/3 0/0 4/4 .text
* fopAcM_fastCreateItem__FPC4cXyziiPC5csXyzPC4cXyzPfPfiiPFPv_i */
// issue with makeItemParams
#ifdef NON_MATCHING
void* fopAcM_fastCreateItem(const cXyz* p_pos, int i_itemNo, int i_roomNo, const csXyz* p_angle,
const cXyz* p_scale, f32* p_speedF, f32* p_speedY, int param_8,
int param_9, createFunc p_createFunc) {
csXyz angle;
if (i_itemNo == NO_ITEM) {
return NULL;
}
u32 itemActorParams = makeItemParams(check_itemno(i_itemNo), param_8, 0xFF, param_9);
if (p_speedF != NULL && isHeart(i_itemNo)) {
*p_speedF = *p_speedF * 2.0f;
}
switch (i_itemNo) {
case RECOVERY_FAILY:
return fopAcM_fastCreate(PROC_Obj_Yousei, 0xFFFFFFFF, p_pos, i_roomNo, p_angle, p_scale, -1, NULL, NULL);
case KAKERA_HEART:
case UTAWA_HEART:
return fopAcM_fastCreate(PROC_Obj_LifeContainer, itemActorParams, p_pos, i_roomNo, p_angle, p_scale, -1, NULL,
NULL);
case TRIPLE_HEART:
for (int i = 0; i < 2; i++) {
if (p_angle != NULL) {
angle = *p_angle;
} else {
angle = csXyz::Zero;
}
angle.z = 0xFF;
angle.y += (s16)cM_rndFX(8192.0f);
fopAc_ac_c* actor = (fopAc_ac_c*)fopAcM_fastCreate(PROC_ITEM, itemActorParams, p_pos, i_roomNo, &angle, p_scale, -1, p_createFunc, NULL);
if (actor != NULL) {
if (p_speedF != NULL) {
actor->mSpeedF = *p_speedF * (1.0f + cM_rndFX(0.3f));
}
if (p_speedY != NULL) {
actor->mSpeed.y = *p_speedY * (1.0f + cM_rndFX(0.2f));
}
}
}
default:
if (p_angle != NULL) {
angle = *p_angle;
} else {
angle = csXyz::Zero;
}
angle.z = 0xFF;
fopAc_ac_c* actor = (fopAc_ac_c*)fopAcM_fastCreate(PROC_ITEM, itemActorParams, p_pos, i_roomNo, &angle, p_scale, -1, p_createFunc, NULL);
if (actor != NULL) {
if (p_speedF != NULL) {
actor->mSpeedF = *p_speedF;
}
if (p_speedY != NULL) {
actor->mSpeed.y = *p_speedY;
}
}
return actor;
}
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void* fopAcM_fastCreateItem(const cXyz* p_pos, int i_itemNo, int i_roomNo, const csXyz* p_angle,
const cXyz* p_scale, f32* p_speedF, f32* p_speedY, int param_8,
int param_9, createFunc p_createFunc) {
nofralloc
#include "asm/f_op/f_op_actor_mng/fopAcM_fastCreateItem__FPC4cXyziiPC5csXyzPC4cXyzPfPfiiPFPv_i.s"
}
#pragma pop
#endif
/* 8001C870-8001C95C 0171B0 00EC+00 0/0 0/0 1/1 .text fopAcM_createBokkuri__FUsPC4cXyziiiPC4cXyzii
*/
s32 fopAcM_createBokkuri(u16 enemyNo, const cXyz* p_pos, int param_3, int param_4, int roomNo,
const cXyz* param_6, int param_7, int param_8) {
csXyz angle(0, 0, 0);
if (param_6 != NULL) {
angle.y = param_6->atan2sX_Z();
angle.y += static_cast<s16>(2048.0f * cM_rndFX(FLOAT_LABEL(/* 1.0f */ lit_5810)));
param_8 = 1;
}
u32 actorParams = 0;
make_prm_bokkuri(&actorParams, &angle, 6, param_3, param_4, param_7, param_8);
return fopAcM_create(PROC_Obj_Carry, enemyNo, actorParams, p_pos, roomNo, &angle, NULL, -1, NULL);
}
/* 8001C95C-8001C9CC 01729C 0070+00 0/0 0/0 12/12 .text
* fopAcM_createWarpHole__FPC4cXyzPC5csXyziUcUcUc */
s32 fopAcM_createWarpHole(const cXyz* p_pos, const csXyz* p_angle, int roomNo, u8 param_4, u8 param_5,
u8 param_6) {
if (param_6 == 0xFF) {
param_6 = param_4;
}
u32 actorParams;
make_prm_warp_hole(&actorParams, param_5, param_6, param_4);
return fopAcM_create(PROC_Obj_BossWarp, actorParams, p_pos, roomNo, p_angle, NULL, -1);
}
s32 fopAc_IsActor(void*);
/* 8001C9CC-8001CA1C 01730C 0050+00 1/1 0/0 0/0 .text enemySearchJugge__FPvPv */
void* enemySearchJugge(void* p_actor, void* p_data) {
if (p_actor != NULL && fopAc_IsActor(p_actor) && static_cast<fopAc_ac_c*>(p_actor)->mGroup == 2) {
return p_actor;
} else {
return NULL;
}
}
/* 8001CA1C-8001CAD8 01735C 00BC+00 0/0 0/0 6/6 .text fopAcM_myRoomSearchEnemy__FSc */
#ifdef NONMATCHING
void fopAcM_myRoomSearchEnemy(s8 roomNo) {
int procID = dStage_roomControl_c::getStatusProcID(roomNo);
scene_class* roomProc = fopScnM_SearchByID(procID);
u32 actorID = ((daPy_py_c*)dComIfGp_getPlayer(0))->getGrabActorID();
fopAc_ac_c* actor = fopAcM_SearchByID(actorID);
if (actor != NULL && fopAcM_GetGroup(actor) != 2) {
return;
}
fpcM_JudgeInLayer(fpcM_LayerID(roomProc), enemySearchJugge, NULL);
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void fopAcM_myRoomSearchEnemy(s8 param_0) {
nofralloc
#include "asm/f_op/f_op_actor_mng/fopAcM_myRoomSearchEnemy__FSc.s"
}
#pragma pop
#endif
/* 8001CAD8-8001CB48 017418 0070+00 0/0 0/0 81/81 .text
* fopAcM_createDisappear__FPC10fopAc_ac_cPC4cXyzUcUcUc */
s32 fopAcM_createDisappear(const fopAc_ac_c* p_actor, const cXyz* p_pos, u8 param_3, u8 param_4,
u8 param_5) {
s8 roomNo = p_actor->mCurrent.mRoomNo;
return fopAcM_GetID(fopAcM_fastCreate(PROC_DISAPPEAR, (param_5 << 0x10) | (param_3 << 0x8) | param_4,
p_pos, roomNo, &p_actor->mCurrent.mAngle, NULL, 0xFF, NULL,
NULL));
}
/* 8001CB48-8001CBA0 017488 0058+00 0/0 6/6 7/7 .text fopAcM_setCarryNow__FP10fopAc_ac_ci
*/
void fopAcM_setCarryNow(fopAc_ac_c* p_actor, int param_1) {
p_actor->mStatus |= 0x2000;
if (param_1 != 0) {
fopAcM_setStageLayer(p_actor);
fopAcM_onActor(p_actor);
}
}
/* 8001CBA0-8001CC5C 0174E0 00BC+00 0/0 5/5 21/21 .text fopAcM_cancelCarryNow__FP10fopAc_ac_c */
void fopAcM_cancelCarryNow(fopAc_ac_c* p_actor) {
if (fopAcM_checkCarryNow(p_actor)) {
p_actor->mStatus &= ~0x2000;
s8 roomNo = fopAcM_GetHomeRoomNo(p_actor);
if (roomNo != -1) {
int procID = dStage_roomControl_c::getStatusProcID(fopAcM_GetRoomNo(p_actor));
scene_class* roomProc = fopScnM_SearchByID(procID);
if (roomProc != NULL) {
fopAcM_setRoomLayer(p_actor, fopAcM_GetRoomNo(p_actor));
}
}
p_actor->mCollisionRot.z = 0;
p_actor->mCollisionRot.x = 0;
if (i_dComIfGp_event_runCheck() && fopAcM_GetGroup(p_actor) != 2) {
p_actor->mStatus |= 0x800;
}
}
}
/* 8001CC5C-8001CDFC 01759C 01A0+00 0/0 0/0 9/9 .text fopAcM_otoCheck__FPC10fopAc_ac_cf
*/
// matches with literals
#ifdef NONMATCHING
s32 fopAcM_otoCheck(fopAc_ac_c const* p_actor, f32 param_1) {
SND_INFLUENCE* sound = dKy_Sound_get();
if (sound->field_0x14 != -1 && fopAcM_GetID(p_actor) != sound->field_0x14) {
cXyz tmp = sound->field_0x0 - p_actor->mCurrent.mPosition;
if (tmp.abs() < param_1) {
return sound->field_0xc;
}
}
return 0;
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm s32 fopAcM_otoCheck(fopAc_ac_c const* param_0, f32 param_1) {
nofralloc
#include "asm/f_op/f_op_actor_mng/fopAcM_otoCheck__FPC10fopAc_ac_cf.s"
}
#pragma pop
#endif
/* ############################################################################################## */
/* 80451C48-80451C4C 000248 0004+00 2/2 0/0 0/0 .sdata2 @6035 */
SECTION_SDATA2 static f32 lit_6035 = 100.0f;
/* 8001CDFC-8001CED0 01773C 00D4+00 0/0 0/0 49/49 .text
* fopAcM_otherBgCheck__FPC10fopAc_ac_cPC10fopAc_ac_c */
s32 fopAcM_otherBgCheck(fopAc_ac_c const* param_0, fopAc_ac_c const* param_1) {
dBgS_LinChk linChk;
cXyz tmp1;
cXyz tmp0;
tmp0 = param_1->mCurrent.mPosition;
tmp0.y += lit_6035;
tmp1 = param_0->mCurrent.mPosition;
tmp1.y = param_0->mEyePos.y;
linChk.Set(&tmp1, &tmp0, param_0);
if (dComIfG_Bgsp().LineCross(&linChk)) {
return 1;
}
return 0;
}
/* 8001CED0-8001CFD8 017810 0108+00 0/0 0/0 18/18 .text fopAcM_wayBgCheck__FPC10fopAc_ac_cff */
s32 fopAcM_wayBgCheck(fopAc_ac_c const* param_0, f32 param_1, f32 param_2) {
dBgS_LinChk linChk;
cXyz tmp1;
cXyz tmp0;
cXyz tmp2;
tmp0 = param_0->mCurrent.mPosition;
tmp0.y += param_2;
mDoMtx_YrotS((MtxP)calc_mtx, param_0->mCollisionRot.y);
tmp1.x = FLOAT_LABEL(lit_4645);
tmp1.y = 50.0f;
tmp1.z = param_1;
MtxPosition(&tmp1, &tmp2);
PSVECAdd(&tmp2, &param_0->mCurrent.mPosition, &tmp2);
linChk.Set(&tmp0, &tmp2, param_0);
if (dComIfG_Bgsp().LineCross(&linChk)) {
return 1;
}
return 0;
}
/* 8001CFD8-8001D020 017918 0048+00 0/0 0/0 2/2 .text fopAcM_plAngleCheck__FPC10fopAc_ac_cs */
s32 fopAcM_plAngleCheck(fopAc_ac_c const* p_actor, s16 i_angle) {
s16 angle = p_actor->mCollisionRot.y - ((fopAc_ac_c*)dComIfGp_getPlayer(0))->mCollisionRot.y;
if (angle <= i_angle && angle >= (s16)-i_angle) {
return 0;
}
return 1;
}
/* ############################################################################################## */
/* 803F1C00-803F1C0C 01E920 000C+00 1/1 0/0 0/0 .bss @4176 */
static u8 lit_4176[12];
/* 803F1C0C-803F1C18 01E92C 000C+00 0/0 0/0 0/0 .bss @5078 */
#pragma push
#pragma force_active on
static u8 lit_5078[12];
#pragma pop
/* 803F1C18-803F1C24 01E938 000C+00 0/0 0/0 0/0 .bss min$5077 */
#pragma push
#pragma force_active on
static u8 min[12];
#pragma pop
/* 803F1C24-803F1C30 01E944 000C+00 0/0 0/0 0/0 .bss @5115 */
#pragma push
#pragma force_active on
static u8 lit_5115[12];
#pragma pop
/* 803F1C30-803F1C3C 01E950 000C+00 0/0 0/0 0/0 .bss max$5114 */
#pragma push
#pragma force_active on
static u8 max[12];
#pragma pop
/* 803F1C3C-803F1C48 01E95C 000C+00 0/1 0/0 0/0 .bss @6481 */
#pragma push
#pragma force_active on
static u8 lit_6481[12];
#pragma pop
/* 803F1C48-803F1CB8 01E968 0070+00 1/2 4/4 9/9 .bss mLineCheck__11fopAcM_lc_c */
u8 fopAcM_lc_c::mLineCheck[112];
/* 803F1CB8-803F1CC4 01E9D8 000C+00 0/1 0/0 0/0 .bss @6503 */
#pragma push
#pragma force_active on
static u8 lit_6503[12];
#pragma pop
/* 803F1CC4-803F1D18 01E9E4 0054+00 2/3 6/6 26/26 .bss mGndCheck__11fopAcM_gc_c */
u8 fopAcM_gc_c::mGndCheck[84];
/* 80450CCC-80450CD0 0001CC 0001+03 1/1 0/0 0/0 .sbss l_hio */
static u8 l_hio[1 + 3 /* padding */];
/* 80450CD0-80450CD4 0001D0 0004+00 2/2 7/7 103/103 .sbss mGroundY__11fopAcM_gc_c */
f32 fopAcM_gc_c::mGroundY;
/* 8001D020-8001D10C 017960 00EC+00 0/0 0/0 96/96 .text
* fopAcM_effSmokeSet1__FPUlPUlPC4cXyzPC5csXyzfPC12dKy_tevstr_ci */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm s32 fopAcM_effSmokeSet1(u32* param_0, u32* param_1, cXyz const* param_2, csXyz const* param_3,
f32 param_4, dKy_tevstr_c const* param_5, int param_6) {
nofralloc
#include "asm/f_op/f_op_actor_mng/fopAcM_effSmokeSet1__FPUlPUlPC4cXyzPC5csXyzfPC12dKy_tevstr_ci.s"
}
#pragma pop
/* ############################################################################################## */
/* 80451C50-80451C54 000250 0004+00 1/1 0/0 0/0 .sdata2 hamon_name$6107 */
SECTION_SDATA2 static u16 hamon_name[2] = {
0x01B2,
0x01B3,
};
/* 8001D10C-8001D1F4 017A4C 00E8+00 0/0 1/1 41/41 .text fopAcM_effHamonSet__FPUlPC4cXyzff
*/
// matches with literals
#ifdef NONMATCHING
void fopAcM_effHamonSet(u32* param_0, cXyz const* param_1, f32 param_2, f32 emitRate) {
cXyz tmp(param_2, param_2, param_2);
for (int i = 0; i < 2; i++) {
*param_0 = dComIfGp_particle_set(*param_0, hamon_name[i], param_1, NULL, &tmp);
JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(*param_0);
if (emitter != NULL) {
emitter->setRate(emitRate);
}
param_0++;
}
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void fopAcM_effHamonSet(u32* param_0, cXyz const* param_1, f32 param_2, f32 param_3) {
nofralloc
#include "asm/f_op/f_op_actor_mng/fopAcM_effHamonSet__FPUlPC4cXyzff.s"
}
#pragma pop
#endif
/* 8001D1F4-8001D1FC 017B34 0008+00 0/0 0/0 7/7 .text fopAcM_riverStream__FP4cXyzPsPff */
s32 fopAcM_riverStream(cXyz* param_0, s16* param_1, f32* param_2, f32 param_3) {
return 0;
}
/* 8001D1FC-8001D32C 017B3C 0130+00 0/0 0/0 12/12 .text fopAcM_carryOffRevise__FP10fopAc_ac_c */
s32 fopAcM_carryOffRevise(fopAc_ac_c* param_0) {
fopAc_ac_c* player = (fopAc_ac_c*)dComIfGp_getPlayer(0);
dBgS_LinChk linChk;
cXyz tmp1;
cXyz tmp0;
cXyz tmp2;
tmp0 = player->mCurrent.mPosition;
tmp0.y = param_0->mCurrent.mPosition.y;
mDoMtx_YrotS((MtxP)calc_mtx, player->mCollisionRot.y);
tmp1.x = FLOAT_LABEL(lit_4645);
tmp1.y = param_0->mCurrent.mPosition.y - player->mCurrent.mPosition.y;
tmp1.z = 150.0f;
MtxPosition(&tmp1, &tmp2);
PSVECAdd(&tmp2, &player->mCurrent.mPosition, &tmp2);
linChk.Set(&tmp0, &tmp2, param_0);
if (dComIfG_Bgsp().LineCross(&linChk)) {
param_0->mCurrent.mPosition.x = player->mCurrent.mPosition.x;
param_0->mCurrent.mPosition.z = player->mCurrent.mPosition.z;
param_0->mNext.mPosition = param_0->mCurrent.mPosition;
param_0->mSpeedF = FLOAT_LABEL(lit_4645);
return 1;
}
return 0;
}
/* 8001D32C-8001D3D4 017C6C 00A8+00 1/1 0/0 0/0 .text vectle_calc__FPC10DOUBLE_POSP4cXyz
*/
static void vectle_calc(const DOUBLE_POS* pDpos, cXyz* pOut) {
f64 len = sqrt(pDpos->x * pDpos->x + pDpos->y * pDpos->y + pDpos->z * pDpos->z);
if (DOUBLE_LABEL(/* 0.0 */ lit_4747) != len) {
pOut->x = pDpos->x / len;
pOut->y = pDpos->y / len;
pOut->z = pDpos->z / len;
} else {
f32 tmp0 = FLOAT_LABEL(/* 0.0f */ lit_4645); // temp not needed when data is moved
pOut->x = tmp0;
pOut->y = tmp0;
pOut->z = tmp0;
}
}
/* 8001D3D4-8001D42C 017D14 0058+00 1/1 0/0 0/0 .text get_vectle_calc__FPC4cXyzPC4cXyzP4cXyz */
static void get_vectle_calc(const cXyz* pXyzA, const cXyz* pXyzB, cXyz* pOut) {
DOUBLE_POS dPos;
dPos.x = pXyzB->x - pXyzA->x;
dPos.y = pXyzB->y - pXyzA->y;
dPos.z = pXyzB->z - pXyzA->z;
vectle_calc(&dPos, pOut);
}
/* ############################################################################################## */
/* 80378898-803788C8 004EF8 0030+00 1/1 0/0 0/0 .rodata mtx_adj$6195 */
SECTION_RODATA static Mtx const mtx_adj = {
{0.5f, 0.0f, 0.0f, 0.5f},
{0.0f, -0.5f, 0.0f, 0.5f},
{0.0f, 0.0f, 1.0f, 0.0f},
};
COMPILER_STRIP_GATE(0x80378898, &mtx_adj);
/* 8001D42C-8001D5A4 017D6C 0178+00 0/0 3/3 40/40 .text
* fopAcM_setEffectMtx__FPC10fopAc_ac_cPC12J3DModelData */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void fopAcM_setEffectMtx(fopAc_ac_c const* param_0, J3DModelData const* param_1) {
nofralloc
#include "asm/f_op/f_op_actor_mng/fopAcM_setEffectMtx__FPC10fopAc_ac_cPC12J3DModelData.s"
}
#pragma pop
/* 8001D5A4-8001D5EC 017EE4 0048+00 1/1 0/0 0/0 .text fopAcM_getProcNameString__FPC10fopAc_ac_c */
static const char* fopAcM_getProcNameString(const fopAc_ac_c* p_actor) {
const char* name = dStage_getName2(p_actor->mBase.mBsTypeId, p_actor->mSubtype);
return name != NULL ? name : "UNKOWN";
}
/* 8001D5EC-8001D698 017F2C 00AC+00 1/1 0/0 0/0 .text fopAcM_findObjectCB__FPC10fopAc_ac_cPv */
static const fopAc_ac_c* fopAcM_findObjectCB(fopAc_ac_c const* p_actor, void* p_data) {
fopAcM_search_prm* prm = (fopAcM_search_prm*)p_data;
if (!fopAcM_IsExecuting(fopAcM_GetID(p_actor))) {
return NULL;
}
if (prm->mProcName == fopAcM_GetProfName(p_actor) && prm->mSubType == p_actor->mSubtype) {
if (prm->mParam0 == 0 || prm->mParam1 == (prm->mParam0 & fopAcM_GetParam(p_actor))) {
return p_actor;
}
}
return NULL;
}
/* 8001D698-8001D6F0 017FD8 0058+00 0/0 1/1 1/1 .text fopAcM_searchFromName__FPCcUlUl */
fopAc_ac_c* fopAcM_searchFromName(char const* name, u32 param0, u32 param1) {
fopAcM_search_prm prm;
prm.mParam0 = param0;
prm.mParam1 = param1;
dStage_objectNameInf* objInf = dStage_searchName(name);
if (objInf == NULL) {
return NULL;
}
prm.mProcName = objInf->mProcName;
prm.mSubType = objInf->mSubtype;
return fopAcM_Search((fopAcIt_JudgeFunc)fopAcM_findObjectCB, &prm);
}
/* 8001D6F0-8001D7A0 018030 00B0+00 1/1 0/0 0/0 .text fopAcM_findObject4EventCB__FP10fopAc_ac_cPv
*/
fopAc_ac_c* fopAcM_findObject4EventCB(fopAc_ac_c* p_actor, void* p_data) {
fopAcM_search4ev_prm* prm = (fopAcM_search4ev_prm*)p_data;
if (p_data == NULL || !fopAcM_IsExecuting(fopAcM_GetID(p_actor))) {
return NULL;
}
if (prm->mProcName == fopAcM_GetProfName(p_actor) && prm->mSubType == p_actor->mSubtype) {
if (prm->mEventID < 0 || prm->mEventID == p_actor->mEvtInfo.getIdx()) {
return p_actor;
}
}
return NULL;
}
/* 8001D7A0-8001D890 0180E0 00F0+00 0/0 7/7 0/0 .text fopAcM_searchFromName4Event__FPCcs
*/
#ifdef NONMATCHING
fopAc_ac_c* fopAcM_searchFromName4Event(char const* name, s16 eventID) {
fopAcM_search4ev_prm prm;
prm.field_0x1e = eventID;
strcpy(prm.mName, name);
char* chr = strchr(prm.mName, ':');
if (chr != NULL) {
chr[0] = 0;
prm.mEventID = 0;
chr++;
for (; *chr != 0; chr++) {
if (*chr < '0' || *chr > '9') {
prm.mEventID = 0xFFFF;
break;
}
prm.mEventID += chr[0] - 0x30; // ?
}
}
dStage_objectNameInf* objInf = dStage_searchName(prm.mName);
if (objInf == NULL) {
return 0;
}
prm.mProcName = objInf->mProcName;
prm.mSubType = objInf->mSubtype;
return fopAcM_Search((fopAcIt_JudgeFunc)fopAcM_findObject4EventCB, &prm);
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm fopAc_ac_c* fopAcM_searchFromName4Event(char const* name, s16 eventID) {
nofralloc
#include "asm/f_op/f_op_actor_mng/fopAcM_searchFromName4Event__FPCcs.s"
}
#pragma pop
#endif
/* ############################################################################################## */
/* 803F1D18-803F1D24 01EA38 000C+00 0/1 0/0 0/0 .bss @6509 */
#pragma push
#pragma force_active on
static u8 lit_6509[12];
#pragma pop
/* 803F1D24-803F1D74 01EA44 0050+00 1/2 1/1 1/1 .bss mRoofCheck__11fopAcM_rc_c */
u8 fopAcM_rc_c::mRoofCheck[80];
/* 803F1D74-803F1D80 01EA94 000C+00 0/1 0/0 0/0 .bss @6519 */
#pragma push
#pragma force_active on
static u8 lit_6519[12];
#pragma pop
/* 803F1D80-803F1DD8 01EAA0 0054+04 2/3 3/3 4/4 .bss mWaterCheck__11fopAcM_wt_c */
u8 fopAcM_wt_c::mWaterCheck[84 + 4 /* padding */];
/* 80450CD4-80450CD8 0001D4 0004+00 1/1 0/0 3/3 .sbss mRoofY__11fopAcM_rc_c */
f32 fopAcM_rc_c::mRoofY;
/* 80450CD8-80450CE0 0001D8 0004+04 2/2 4/4 19/19 .sbss mWaterY__11fopAcM_wt_c */
f32 fopAcM_wt_c::mWaterY[1 + 1 /* padding */];
/* 80451C58-80451C5C 000258 0004+00 2/2 0/0 0/0 .sdata2 @6353 */
SECTION_SDATA2 static f32 lit_6353 = -1000000000.0f;
/* 8001D890-8001D900 0181D0 0070+00 0/0 2/2 19/19 .text fopAcM_getWaterY__FPC4cXyzPf */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm s32 fopAcM_getWaterY(cXyz const* param_0, f32* param_1) {
nofralloc
#include "asm/f_op/f_op_actor_mng/fopAcM_getWaterY__FPC4cXyzPf.s"
}
#pragma pop
/* 8001D900-8001D9A8 018240 00A8+00 0/0 2/2 2/2 .text
* fpoAcM_relativePos__FPC10fopAc_ac_cPC4cXyzP4cXyz */
void fpoAcM_relativePos(fopAc_ac_c const* actor, cXyz const* p_inPos, cXyz* p_outPos) {
s16 angle = -actor->mCollisionRot.y;
cXyz pos = *p_inPos - actor->mCurrent.mPosition;
p_outPos->x = (pos.z * cM_ssin(angle)) + (pos.x * cM_scos(angle));
p_outPos->y = pos.y;
p_outPos->z = (pos.z * cM_scos(angle)) - (pos.x * cM_ssin(angle));
}
/* 8001D9A8-8001DAE4 0182E8 013C+00 0/0 1/1 9/9 .text
* fopAcM_getWaterStream__FPC4cXyzRC13cBgS_PolyInfoP4cXyzPii */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm s32 fopAcM_getWaterStream(cXyz const* param_0, cBgS_PolyInfo const& param_1, cXyz* param_2,
int* param_3, int param_4) {
nofralloc
#include "asm/f_op/f_op_actor_mng/fopAcM_getWaterStream__FPC4cXyzRC13cBgS_PolyInfoP4cXyzPii.s"
}
#pragma pop
/* ############################################################################################## */
/* 803A37C0-803A37CC 0008E0 000C+00 2/2 93/93 0/0 .data __vt__8cM3dGPla */
SECTION_DATA extern void* __vt__8cM3dGPla[3] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__8cM3dGPlaFv,
};
/* 8001DAE4-8001DB90 018424 00AC+00 0/0 2/2 8/8 .text fopAcM_getPolygonAngle__FRC13cBgS_PolyInfos
*/
// matches when TU vtable data is correct
#ifdef NONMATCHING
s16 fopAcM_getPolygonAngle(cBgS_PolyInfo const& poly, s16 param_1) {
if (!dComIfG_Bgsp().ChkPolySafe(poly)) {
return 0;
}
cM3dGPla plane;
if (!dComIfG_Bgsp().GetTriPla(poly, &plane)) {
return 0;
}
return fopAcM_getPolygonAngle(&plane, param_1);
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm s16 fopAcM_getPolygonAngle(cBgS_PolyInfo const& param_0, s16 param_1) {
nofralloc
#include "asm/f_op/f_op_actor_mng/fopAcM_getPolygonAngle__FRC13cBgS_PolyInfos.s"
}
#pragma pop
#endif
/* 8001DB90-8001DBD8 0184D0 0048+00 1/0 9/9 0/0 .text __dt__8cM3dGPlaFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
extern "C" asm void __dt__8cM3dGPlaFv() {
nofralloc
#include "asm/f_op/f_op_actor_mng/__dt__8cM3dGPlaFv.s"
}
#pragma pop
/* 8001DBD8-8001DC68 018518 0090+00 1/1 5/5 18/18 .text fopAcM_getPolygonAngle__FPC8cM3dGPlas */
// sqrt issues
#ifdef NONMATCHING
s16 fopAcM_getPolygonAngle(cM3dGPla const* p_plane, s16 param_1) {
if (p_plane == NULL) {
return 0;
}
s16 atan = p_plane->mNormal.atan2sX_Z() - param_1;
f32 cos = cM_scos(atan);
f32 sqrt = JMAFastSqrt__Ff(square(p_plane->mNormal.x) + square(p_plane->mNormal.z));
return cM_atan2s(sqrt * cos, p_plane->mNormal.y);
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm s16 fopAcM_getPolygonAngle(cM3dGPla const* param_0, s16 param_1) {
nofralloc
#include "asm/f_op/f_op_actor_mng/fopAcM_getPolygonAngle__FPC8cM3dGPlas.s"
}
#pragma pop
#endif
/* 8001DC68-8001DCBC 0185A8 0054+00 0/0 5/5 21/21 .text
* lineCheck__11fopAcM_lc_cFPC4cXyzPC4cXyzPC10fopAc_ac_c */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm bool fopAcM_lc_c::lineCheck(cXyz const* param_0, cXyz const* param_1,
fopAc_ac_c const* param_2) {
nofralloc
#include "asm/f_op/f_op_actor_mng/lineCheck__11fopAcM_lc_cFPC4cXyzPC4cXyzPC10fopAc_ac_c.s"
}
#pragma pop
/* 8001DCBC-8001DD1C 0185FC 0060+00 1/1 10/10 108/108 .text gndCheck__11fopAcM_gc_cFPC4cXyz */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm bool fopAcM_gc_c::gndCheck(cXyz const* param_0) {
nofralloc
#include "asm/f_op/f_op_actor_mng/gndCheck__11fopAcM_gc_cFPC4cXyz.s"
}
#pragma pop
/* ############################################################################################## */
/* 80451C5C-80451C60 00025C 0004+00 1/1 0/0 0/0 .sdata2 @6517 */
SECTION_SDATA2 static f32 lit_6517 = 1000000000.0f;
/* 8001DD1C-8001DD84 01865C 0068+00 0/0 0/0 3/3 .text roofCheck__11fopAcM_rc_cFPC4cXyz */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm bool fopAcM_rc_c::roofCheck(cXyz const* param_0) {
nofralloc
#include "asm/f_op/f_op_actor_mng/roofCheck__11fopAcM_rc_cFPC4cXyz.s"
}
#pragma pop
/* ############################################################################################## */
/* 80451C60-80451C68 000260 0004+04 1/1 0/0 0/0 .sdata2 @6538 */
SECTION_SDATA2 static f32 lit_6538[1 + 1 /* padding */] = {
500.0f,
/* padding */
0.0f,
};
/* 8001DD84-8001DE10 0186C4 008C+00 1/1 4/4 22/22 .text waterCheck__11fopAcM_wt_cFPC4cXyz
*/
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm bool fopAcM_wt_c::waterCheck(cXyz const* param_0) {
nofralloc
#include "asm/f_op/f_op_actor_mng/waterCheck__11fopAcM_wt_cFPC4cXyz.s"
}
#pragma pop
/* 8001DE10-8001DE14 018750 0004+00 0/0 1/1 0/0 .text fopAcM_initManager__Fv */
void fopAcM_initManager() {
/* empty function */
}
/* ############################################################################################## */
/* 803A37CC-803A37FC 0008EC 0030+00 2/2 0/0 0/0 .data __vt__15dBgS_ObjRoofChk */
SECTION_DATA extern void* __vt__15dBgS_ObjRoofChk[12] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__15dBgS_ObjRoofChkFv,
(void*)NULL,
(void*)NULL,
(void*)func_8001E104,
(void*)NULL,
(void*)NULL,
(void*)func_8001E114,
(void*)NULL,
(void*)NULL,
(void*)func_8001E10C,
};
/* 803A37FC-803A382C 00091C 0030+00 1/1 2/2 0/0 .data __vt__11dBgS_WtrChk */
SECTION_DATA extern void* __vt__11dBgS_WtrChk[12] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__11dBgS_WtrChkFv,
(void*)NULL,
(void*)NULL,
(void*)func_8001E0EC,
(void*)NULL,
(void*)NULL,
(void*)func_8001E0FC,
(void*)NULL,
(void*)NULL,
(void*)func_8001E0F4,
};
/* 803A382C-803A3860 00094C 0030+04 2/2 10/10 0/0 .data __vt__14dBgS_ObjGndChk */
SECTION_DATA extern void* __vt__14dBgS_ObjGndChk[12 + 1 /* padding */] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__14dBgS_ObjGndChkFv,
(void*)NULL,
(void*)NULL,
(void*)func_8001E0D4,
(void*)NULL,
(void*)NULL,
(void*)func_8001E0E4,
(void*)NULL,
(void*)NULL,
(void*)func_8001E0DC,
/* padding */
NULL,
};
/* 8001DE14-8001DF30 018754 011C+00 0/0 1/0 0/0 .text __sinit_f_op_actor_mng_cpp */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void __sinit_f_op_actor_mng_cpp() {
nofralloc
#include "asm/f_op/f_op_actor_mng/__sinit_f_op_actor_mng_cpp.s"
}
#pragma pop
#pragma push
#pragma force_active on
REGISTER_CTORS(0x8001DE14, __sinit_f_op_actor_mng_cpp);
#pragma pop
/* 8001DF30-8001DFA8 018870 0078+00 5/4 0/0 0/0 .text __dt__11dBgS_WtrChkFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
// asm dBgS_WtrChk::~dBgS_WtrChk() {
extern "C" asm void __dt__11dBgS_WtrChkFv() {
nofralloc
#include "asm/f_op/f_op_actor_mng/__dt__11dBgS_WtrChkFv.s"
}
#pragma pop
/* 8001DFA8-8001E020 0188E8 0078+00 5/4 0/0 0/0 .text __dt__15dBgS_ObjRoofChkFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
// asm dBgS_ObjRoofChk::~dBgS_ObjRoofChk() {
extern "C" asm void __dt__15dBgS_ObjRoofChkFv() {
nofralloc
#include "asm/f_op/f_op_actor_mng/__dt__15dBgS_ObjRoofChkFv.s"
}
#pragma pop
/* 8001E020-8001E098 018960 0078+00 5/4 0/0 0/0 .text __dt__14dBgS_ObjGndChkFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
// asm dBgS_ObjGndChk::~dBgS_ObjGndChk() {
extern "C" asm void __dt__14dBgS_ObjGndChkFv() {
nofralloc
#include "asm/f_op/f_op_actor_mng/__dt__14dBgS_ObjGndChkFv.s"
}
#pragma pop
/* 8001E098-8001E0D4 0189D8 003C+00 1/1 0/0 0/0 .text __dt__5l_HIOFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm l_HIO::~l_HIO() {
nofralloc
#include "asm/f_op/f_op_actor_mng/__dt__5l_HIOFv.s"
}
#pragma pop
/* 8001E0D4-8001E0DC 018A14 0008+00 1/0 0/0 0/0 .text @20@__dt__14dBgS_ObjGndChkFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void func_8001E0D4() {
nofralloc
#include "asm/f_op/f_op_actor_mng/func_8001E0D4.s"
}
#pragma pop
/* 8001E0DC-8001E0E4 018A1C 0008+00 1/0 0/0 0/0 .text @76@__dt__14dBgS_ObjGndChkFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void func_8001E0DC() {
nofralloc
#include "asm/f_op/f_op_actor_mng/func_8001E0DC.s"
}
#pragma pop
/* 8001E0E4-8001E0EC 018A24 0008+00 1/0 0/0 0/0 .text @60@__dt__14dBgS_ObjGndChkFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void func_8001E0E4() {
nofralloc
#include "asm/f_op/f_op_actor_mng/func_8001E0E4.s"
}
#pragma pop
/* 8001E0EC-8001E0F4 018A2C 0008+00 1/0 0/0 0/0 .text @16@__dt__11dBgS_WtrChkFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void func_8001E0EC() {
nofralloc
#include "asm/f_op/f_op_actor_mng/func_8001E0EC.s"
}
#pragma pop
/* 8001E0F4-8001E0FC 018A34 0008+00 1/0 0/0 0/0 .text @52@__dt__11dBgS_WtrChkFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void func_8001E0F4() {
nofralloc
#include "asm/f_op/f_op_actor_mng/func_8001E0F4.s"
}
#pragma pop
/* 8001E0FC-8001E104 018A3C 0008+00 1/0 0/0 0/0 .text @36@__dt__11dBgS_WtrChkFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void func_8001E0FC() {
nofralloc
#include "asm/f_op/f_op_actor_mng/func_8001E0FC.s"
}
#pragma pop
/* 8001E104-8001E10C 018A44 0008+00 1/0 0/0 0/0 .text @16@__dt__15dBgS_ObjRoofChkFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void func_8001E104() {
nofralloc
#include "asm/f_op/f_op_actor_mng/func_8001E104.s"
}
#pragma pop
/* 8001E10C-8001E114 018A4C 0008+00 1/0 0/0 0/0 .text @52@__dt__15dBgS_ObjRoofChkFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void func_8001E10C() {
nofralloc
#include "asm/f_op/f_op_actor_mng/func_8001E10C.s"
}
#pragma pop
/* 8001E114-8001E11C 018A54 0008+00 1/0 0/0 0/0 .text @36@__dt__15dBgS_ObjRoofChkFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void func_8001E114() {
nofralloc
#include "asm/f_op/f_op_actor_mng/func_8001E114.s"
}
#pragma pop
/* 8001E11C-8001E120 018A5C 0004+00 0/0 1/0 0/0 .text onFrollCrashFlg__9daPy_py_cFUci */
void daPy_py_c::onFrollCrashFlg(u8 param_0, int param_1) {
/* empty function */
}
/* 8001E120-8001E128 018A60 0008+00 0/0 1/0 0/0 .text checkWolfDash__9daPy_py_cCFv */
int daPy_py_c::checkWolfDash() const {
return false;
}
/* 8001E128-8001E130 018A68 0008+00 0/0 1/0 0/0 .text checkFrontRoll__9daPy_py_cCFv */
int daPy_py_c::checkFrontRoll() const {
return false;
}
/* 8001E130-8001E138 018A70 0008+00 0/0 1/0 0/0 .text checkHorseRide__9daPy_py_cCFv */
u32 daPy_py_c::checkHorseRide() const {
return false;
}
/* 8001E138-8001E140 018A78 0008+00 0/0 1/0 0/0 .text getGrabActorID__9daPy_py_cCFv */
s32 daPy_py_c::getGrabActorID() const {
return -1;
}
/* 803788C8-803788C8 004F28 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */