// // Generated By: dol2asm // Translation Unit: d/bg/d_bg_w // #include "d/bg/d_bg_w.h" #include "JSystem/JMath/JMATrigonometric.h" #include "SSystem/SComponent/c_math.h" #include "d/com/d_com_inf_game.h" #include "dol2asm.h" #include "dolphin/mtx/mtxvec.h" #include "rel/d/a/d_a_horse/d_a_horse.h" // // Forward References: // extern "C" void __ct__11cBgW_RwgElmFv(); extern "C" void __dt__11cBgW_RwgElmFv(); extern "C" void __ct__13cBgW_NodeTreeFv(); extern "C" void __dt__13cBgW_NodeTreeFv(); extern "C" void __ct__4cBgWFv(); extern "C" void __dt__4cBgWFv(); extern "C" void FreeArea__4cBgWFv(); extern "C" void GlobalVtx__4cBgWFv(); extern "C" void SetVtx__4cBgWFv(); extern "C" void CalcPlane__4cBgWFv(); extern "C" void SetTri__4cBgWFv(); extern "C" void __dt__11cBgW_TriElmFv(); extern "C" void __ct__11cBgW_TriElmFv(); extern "C" void BlckConnect__4cBgWFPUsPii(); extern "C" void ClassifyPlane__4cBgWFv(); extern "C" void MakeBlckTransMinMax__4cBgWFP4cXyzP4cXyz(); extern "C" void MakeBlckMinMax__4cBgWFiP4cXyzP4cXyz(); extern "C" void MakeBlckBnd__4cBgWFiP4cXyzP4cXyz(); extern "C" void MakeNodeTreeRp__4cBgWFi(); extern "C" void MakeNodeTreeGrpRp__4cBgWFi(); extern "C" void MakeNodeTree__4cBgWFv(); extern "C" void ChkMemoryError__4cBgWFv(); extern "C" void Set__4cBgWFP6cBgD_tUlPA3_A4_f(); extern "C" void __dt__11cBgW_GrpElmFv(); extern "C" void __ct__11cBgW_GrpElmFv(); extern "C" void RwgLineCheck__4cBgWFUsP11cBgS_LinChk(); extern "C" void __dt__8cM3dGTriFv(); extern "C" void LineCheckRp__4cBgWFP11cBgS_LinChki(); extern "C" void LineCheckGrpRp__4cBgWFP11cBgS_LinChkii(); extern "C" void LineCheck__4cBgWFP11cBgS_LinChk(); extern "C" void RwgGroundCheckCommon__4cBgWFfUsP11cBgS_GndChk(); extern "C" void RwgGroundCheckGnd__4cBgWFUsP11cBgS_GndChk(); extern "C" void RwgGroundCheckWall__4cBgWFUsP11cBgS_GndChk(); extern "C" void GroundCrossRp__4cBgWFP11cBgS_GndChki(); extern "C" void GroundCrossGrpRp__4cBgWFP11cBgS_GndChkii(); extern "C" void GroundCross__4cBgWFP11cBgS_GndChk(); extern "C" void CopyOldMtx__4cBgWFv(); extern "C" void Move__4cBgWFv(); extern "C" void RwgShdwDraw__4cBgWFiP13cBgS_ShdwDraw(); extern "C" void ShdwDrawRp__4cBgWFP13cBgS_ShdwDrawi(); extern "C" void ShdwDrawGrpRp__4cBgWFP13cBgS_ShdwDrawi(); extern "C" void ShdwDraw__4cBgWFP13cBgS_ShdwDraw(); extern "C" bool ChkPolyThrough__4cBgWFiP16cBgS_PolyPassChk(); extern "C" void ChkShdwDrawThrough__4cBgWFiP16cBgS_PolyPassChk(); extern "C" bool ChkGrpThrough__4cBgWFiP15cBgS_GrpPassChki(); extern "C" void GetGrpRoomIndex__4cBgWCFRC13cBgS_PolyInfo(); extern "C" void GetBnd__4cBgWCFv(); extern "C" void GetTrans__4cBgWCFP4cXyz(); extern "C" void GetTriPnt__4cBgWCFRC13cBgS_PolyInfoP4cXyzP4cXyzP4cXyz(); extern "C" void GetTopUnder__4cBgWCFPfPf(); extern "C" void GetTriPla__4cBgWCFRC13cBgS_PolyInfo(); extern "C" void GetGrpInf__4cBgWCFRC13cBgS_PolyInfo(); extern "C" void GetPolyInfId__4cBgWCFi(); extern "C" void GetPolyInf0__4cBgWCFiUlUl(); extern "C" void GetMaskPolyInf0_NoShift__4cBgWCFiUl(); extern "C" void GetExitId__4dBgWFRC13cBgS_PolyInfo(); extern "C" void GetPolyColor__4dBgWFRC13cBgS_PolyInfo(); extern "C" void GetHorseNoEntry__4dBgWFRC13cBgS_PolyInfo(); extern "C" void GetSpecialCode__4dBgWFRC13cBgS_PolyInfo(); extern "C" void GetSpecialCode__4dBgWFi(); extern "C" void GetMagnetCode__4dBgWFRC13cBgS_PolyInfo(); extern "C" void GetMonkeyBarsCode__4dBgWFRC13cBgS_PolyInfo(); extern "C" void GetPolyObjThrough__4dBgWFi(); extern "C" void GetPolyCamThrough__4dBgWFi(); extern "C" void GetPolyLinkThrough__4dBgWFi(); extern "C" void GetPolyArrowThrough__4dBgWFi(); extern "C" void GetPolyHSStick__4dBgWFi(); extern "C" void GetPolyBoomerangThrough__4dBgWFi(); extern "C" void GetPolyRopeThrough__4dBgWFi(); extern "C" void GetPolyBombThrough__4dBgWFi(); extern "C" void GetShdwThrough__4dBgWFi(); extern "C" void GetUnderwaterRoofCode__4dBgWFi(); extern "C" void GetPolyInf1__4cBgWCFiUlUl(); extern "C" void GetLinkNo__4dBgWFRC13cBgS_PolyInfo(); extern "C" void GetWallCode__4dBgWFRC13cBgS_PolyInfo(); extern "C" void GetPolyAtt0__4dBgWFRC13cBgS_PolyInfo(); extern "C" void GetPolyAtt1__4dBgWFRC13cBgS_PolyInfo(); extern "C" void GetGroundCode__4dBgWFRC13cBgS_PolyInfo(); extern "C" void GetMaskPolyInf1_NoShift__4cBgWCFiUl(); extern "C" void GetIronBallThrough__4dBgWFi(); extern "C" void GetAttackThrough__4dBgWFi(); extern "C" void GetPolyInf2__4cBgWCFiUlUl(); extern "C" void GetCamMoveBG__4dBgWFRC13cBgS_PolyInfo(); extern "C" void GetRoomCamId__4dBgWFRC13cBgS_PolyInfo(); extern "C" void GetRoomPathId__4dBgWFRC13cBgS_PolyInfo(); extern "C" void GetRoomPathPntNo__4dBgWFRC13cBgS_PolyInfo(); extern "C" void GetTriGrp__4cBgWCFi(); extern "C" void ChkNotReady__4cBgWCFv(); extern "C" void ChkLock__4cBgWCFv(); extern "C" void ChkMoveBg__4cBgWCFv(); extern "C" void __ct__4dBgWFv(); extern "C" void Move__4dBgWFv(); extern "C" void positionWallCorrect__4dBgWFP9dBgS_AcchfR8cM3dGPlaP4cXyzf(); extern "C" void RwgWallCorrect__4dBgWFP9dBgS_AcchUs(); extern "C" void WallCorrectRp__4dBgWFP9dBgS_Acchi(); extern "C" void WallCorrectGrpRp__4dBgWFP9dBgS_Acchii(); extern "C" void WallCorrect__4dBgWFP9dBgS_Acch(); extern "C" void RwgWallCorrectSort__4dBgWFP9dBgS_AcchUs(); extern "C" void WallCorrectRpSort__4dBgWFP9dBgS_Acchi(); extern "C" void WallCorrectGrpRpSort__4dBgWFP9dBgS_Acchii(); extern "C" void WallCorrectSort__4dBgWFP9dBgS_Acch(); extern "C" void RwgRoofChk__4dBgWFUsP12dBgS_RoofChk(); extern "C" void RoofChkRp__4dBgWFP12dBgS_RoofChki(); extern "C" void RoofChkGrpRp__4dBgWFP12dBgS_RoofChkii(); extern "C" void RoofChk__4dBgWFP12dBgS_RoofChk(); extern "C" void RwgSplGrpChk__4dBgWFUsP14dBgS_SplGrpChk(); extern "C" void SplGrpChkRp__4dBgWFP14dBgS_SplGrpChki(); extern "C" void SplGrpChkGrpRp__4dBgWFP14dBgS_SplGrpChkii(); extern "C" void SplGrpChk__4dBgWFP14dBgS_SplGrpChk(); extern "C" void RwgCaptPoly__4dBgWFiR13dBgS_CaptPoly(); extern "C" void CaptPolyRp__4dBgWFR13dBgS_CaptPolyi(); extern "C" void CaptPolyGrpRp__4dBgWFR13dBgS_CaptPolyii(); extern "C" void CaptPoly__4dBgWFR13dBgS_CaptPoly(); extern "C" void RwgSphChk__4dBgWFUsP11dBgS_SphChkPv(); extern "C" void SphChkRp__4dBgWFP11dBgS_SphChkPvi(); extern "C" void SphChkGrpRp__4dBgWFP11dBgS_SphChkPvii(); extern "C" void SphChk__4dBgWFP11dBgS_SphChkPv(); extern "C" void GetPolyGrpRoomInfId__4dBgWFRC13cBgS_PolyInfo(); extern "C" void GetGrpSoundId__4dBgWFRC13cBgS_PolyInfo(); extern "C" void CrrPos__4dBgWFRC13cBgS_PolyInfoPvbP4cXyzP5csXyzP5csXyz(); extern "C" void TransPos__4dBgWFRC13cBgS_PolyInfoPvbP4cXyzP5csXyzP5csXyz(); extern "C" void MatrixCrrPos__4dBgWFRC13cBgS_PolyInfoPvbP4cXyzP5csXyzP5csXyz(); extern "C" void ChkPolyThrough__4dBgWFiP16cBgS_PolyPassChk(); extern "C" void ChkShdwDrawThrough__4dBgWFiP16cBgS_PolyPassChk(); extern "C" void ChkGrpThrough__4dBgWFiP15cBgS_GrpPassChki(); extern "C" void CallRideCallBack__4dBgWFP10fopAc_ac_cP10fopAc_ac_c(); extern "C" void CallArrowStickCallBack__4dBgWFP10fopAc_ac_cP10fopAc_ac_cR4cXyz(); extern "C" void OffMoveFlag__4dBgWFv(); extern "C" void ChkMoveFlag__4dBgWCFv(); extern "C" void dBgW_NewSet__FP6cBgD_tUlPA3_A4_f(); extern "C" void __dt__4dBgWFv(); extern "C" extern u8 struct_80450F88[8]; // // External References: // extern "C" void SetOldShapeAngleY__9dBgW_BaseFs(); extern "C" void GetSpeedY__9dBgS_AcchFv(); extern "C" void GetWallAddY__9dBgS_AcchFR3Vec(); extern "C" void SetWallPolyIndex__9dBgS_AcchFii(); extern "C" void CalcMovePosWork__9dBgS_AcchFv(); extern "C" void ChkNoHorse__16dBgS_PolyPassChkFv(); extern "C" void __ct__9dBgW_BaseFv(); extern "C" void __dt__9dBgW_BaseFv(); extern "C" void CallRideCallBack__9dBgW_BaseFP10fopAc_ac_cP10fopAc_ac_c(); extern "C" void CallArrowStickCallBack__9dBgW_BaseFP10fopAc_ac_cP10fopAc_ac_cR4cXyz(); extern "C" void cM_atan2s__Fff(); extern "C" void cM_rndF__Ff(); extern "C" void SetPolyIndex__13cBgS_PolyInfoFi(); extern "C" void cBgW_CheckBGround__Ff(); extern "C" void cBgW_CheckBRoof__Ff(); extern "C" void cM2d_CrossCirLin__FR8cM2dGCirffffPfPf(); extern "C" void cM3d_Len2dSq__Fffff(); extern "C" void cM3d_Len2dSqPntAndSegLine__FffffffPfPfPf(); extern "C" void cM3d_CalcPla__FPC3VecPC3VecPC3VecP3VecPf(); extern "C" void cM3d_Cross_AabAab__FPC8cM3dGAabPC8cM3dGAab(); extern "C" void cM3d_Cross_AabCyl__FPC8cM3dGAabPC8cM3dGCyl(); extern "C" void cM3d_Cross_AabSph__FPC8cM3dGAabPC8cM3dGSph(); extern "C" void cM3d_Cross_MinMaxBoxLine__FPC3VecPC3VecPC3VecPC3Vec(); extern "C" void cM3d_CrossY_Tri__FRC3VecRC3VecRC3VecRC8cM3dGPlaPC3Vec(); extern "C" void cM3d_CrossY_Tri_Front__FRC3VecRC3VecRC3VecPC3Vec(); extern "C" void cM3d_Cross_LinTri__FPC8cM3dGLinPC8cM3dGTriP3Vecbb(); extern "C" void cM3d_Cross_SphTri__FPC8cM3dGSphPC8cM3dGTriP3Vec(); extern "C" void CrossY__8cM3dGAabCFPC4cXyz(); extern "C" void UnderPlaneYUnder__8cM3dGAabCFf(); extern "C" void TopPlaneYUnder__8cM3dGAabCFf(); extern "C" void ClearForMinMax__8cM3dGAabFv(); extern "C" void SetMinMax__8cM3dGAabFRC4cXyz(); extern "C" void SetMin__8cM3dGAabFRC4cXyz(); extern "C" void SetMax__8cM3dGAabFRC4cXyz(); extern "C" void SetEnd__8cM3dGLinFRC4cXyz(); extern "C" void getCrossY__8cM3dGPlaCFRC4cXyzPf(); extern "C" void setBg__8cM3dGTriFPC3VecPC3VecPC3VecPC8cM3dGPla(); extern "C" void* __nw__FUl(); extern "C" void* __nwa__FUl(); extern "C" void __dl__FPv(); extern "C" void __construct_new_array(); extern "C" void __ptmf_scall(); extern "C" void _savegpr_22(); 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_28(); extern "C" void _savegpr_29(); extern "C" void _restgpr_22(); 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_28(); extern "C" void _restgpr_29(); extern "C" extern void* __vt__8cM3dGPla[3]; extern "C" extern void* __vt__8cM3dGAab[3]; extern "C" u8 sincosTable___5JMath[65536]; // // Declarations: // /* ############################################################################################## */ /* 803ABA80-803ABB84 008BA0 0104+00 2/2 1/1 5/5 .data __vt__4dBgW */ SECTION_DATA extern void* __vt__4dBgW[65] = { (void*)NULL /* RTTI */, (void*)NULL, (void*)__dt__4dBgWFv, (void*)ChkMemoryError__4cBgWFv, (void*)ChkNotReady__4cBgWCFv, (void*)ChkLock__4cBgWCFv, (void*)ChkMoveBg__4cBgWCFv, (void*)ChkMoveFlag__4dBgWCFv, (void*)GetTriPla__4cBgWCFRC13cBgS_PolyInfo, (void*)GetTriPnt__4cBgWCFRC13cBgS_PolyInfoP4cXyzP4cXyzP4cXyz, (void*)GetBnd__4cBgWCFv, (void*)GetGrpInf__4cBgWCFRC13cBgS_PolyInfo, (void*)OffMoveFlag__4dBgWFv, (void*)GetTopUnder__4cBgWCFPfPf, (void*)SetOldShapeAngleY__9dBgW_BaseFs, (void*)LineCheck__4cBgWFP11cBgS_LinChk, (void*)GroundCross__4cBgWFP11cBgS_GndChk, (void*)ShdwDraw__4cBgWFP13cBgS_ShdwDraw, (void*)CaptPoly__4dBgWFR13dBgS_CaptPoly, (void*)WallCorrect__4dBgWFP9dBgS_Acch, (void*)WallCorrectSort__4dBgWFP9dBgS_Acch, (void*)RoofChk__4dBgWFP12dBgS_RoofChk, (void*)SplGrpChk__4dBgWFP14dBgS_SplGrpChk, (void*)SphChk__4dBgWFP11dBgS_SphChkPv, (void*)GetGrpRoomIndex__4cBgWCFRC13cBgS_PolyInfo, (void*)GetExitId__4dBgWFRC13cBgS_PolyInfo, (void*)GetPolyColor__4dBgWFRC13cBgS_PolyInfo, (void*)GetHorseNoEntry__4dBgWFRC13cBgS_PolyInfo, (void*)GetSpecialCode__4dBgWFRC13cBgS_PolyInfo, (void*)GetSpecialCode__4dBgWFi, (void*)GetMagnetCode__4dBgWFRC13cBgS_PolyInfo, (void*)GetPolyObjThrough__4dBgWFi, (void*)GetPolyCamThrough__4dBgWFi, (void*)GetPolyLinkThrough__4dBgWFi, (void*)GetPolyArrowThrough__4dBgWFi, (void*)GetPolyHSStick__4dBgWFi, (void*)GetPolyBoomerangThrough__4dBgWFi, (void*)GetPolyRopeThrough__4dBgWFi, (void*)GetPolyBombThrough__4dBgWFi, (void*)GetShdwThrough__4dBgWFi, (void*)GetUnderwaterRoofCode__4dBgWFi, (void*)GetMonkeyBarsCode__4dBgWFRC13cBgS_PolyInfo, (void*)GetLinkNo__4dBgWFRC13cBgS_PolyInfo, (void*)GetWallCode__4dBgWFRC13cBgS_PolyInfo, (void*)GetPolyAtt0__4dBgWFRC13cBgS_PolyInfo, (void*)GetPolyAtt1__4dBgWFRC13cBgS_PolyInfo, (void*)GetGroundCode__4dBgWFRC13cBgS_PolyInfo, (void*)GetIronBallThrough__4dBgWFi, (void*)GetAttackThrough__4dBgWFi, (void*)GetCamMoveBG__4dBgWFRC13cBgS_PolyInfo, (void*)GetRoomCamId__4dBgWFRC13cBgS_PolyInfo, (void*)GetRoomPathId__4dBgWFRC13cBgS_PolyInfo, (void*)GetRoomPathPntNo__4dBgWFRC13cBgS_PolyInfo, (void*)GetPolyGrpRoomInfId__4dBgWFRC13cBgS_PolyInfo, (void*)GetGrpSoundId__4dBgWFRC13cBgS_PolyInfo, (void*)CrrPos__4dBgWFRC13cBgS_PolyInfoPvbP4cXyzP5csXyzP5csXyz, (void*)TransPos__4dBgWFRC13cBgS_PolyInfoPvbP4cXyzP5csXyzP5csXyz, (void*)MatrixCrrPos__4dBgWFRC13cBgS_PolyInfoPvbP4cXyzP5csXyzP5csXyz, (void*)CallRideCallBack__4dBgWFP10fopAc_ac_cP10fopAc_ac_c, (void*)CallArrowStickCallBack__4dBgWFP10fopAc_ac_cP10fopAc_ac_cR4cXyz, (void*)CalcPlane__4cBgWFv, (void*)ClassifyPlane__4cBgWFv, (void*)ChkPolyThrough__4dBgWFiP16cBgS_PolyPassChk, (void*)ChkShdwDrawThrough__4dBgWFiP16cBgS_PolyPassChk, (void*)ChkGrpThrough__4dBgWFiP15cBgS_GrpPassChki, }; /* 803ABB84-803ABB90 008CA4 000C+00 3/3 5/5 0/0 .data __vt__8cM3dGTri */ SECTION_DATA extern void* __vt__8cM3dGTri[3] = { (void*)NULL /* RTTI */, (void*)NULL, (void*)__dt__8cM3dGTriFv, }; /* 803ABB90-803ABB9C 008CB0 000C+00 2/2 0/0 0/0 .data __vt__11cBgW_GrpElm */ SECTION_DATA extern void* __vt__11cBgW_GrpElm[3] = { (void*)NULL /* RTTI */, (void*)NULL, (void*)__dt__11cBgW_GrpElmFv, }; /* 803ABB9C-803ABBA8 008CBC 000C+00 2/2 0/0 0/0 .data __vt__11cBgW_TriElm */ SECTION_DATA extern void* __vt__11cBgW_TriElm[3] = { (void*)NULL /* RTTI */, (void*)NULL, (void*)__dt__11cBgW_TriElmFv, }; /* 803ABBA8-803ABCAC 008CC8 0104+00 2/2 0/0 0/0 .data __vt__4cBgW */ SECTION_DATA extern void* __vt__4cBgW[65] = { (void*)NULL /* RTTI */, (void*)NULL, (void*)__dt__4cBgWFv, (void*)ChkMemoryError__4cBgWFv, (void*)ChkNotReady__4cBgWCFv, (void*)ChkLock__4cBgWCFv, (void*)ChkMoveBg__4cBgWCFv, (void*)NULL, (void*)GetTriPla__4cBgWCFRC13cBgS_PolyInfo, (void*)GetTriPnt__4cBgWCFRC13cBgS_PolyInfoP4cXyzP4cXyzP4cXyz, (void*)GetBnd__4cBgWCFv, (void*)GetGrpInf__4cBgWCFRC13cBgS_PolyInfo, (void*)NULL, (void*)GetTopUnder__4cBgWCFPfPf, (void*)SetOldShapeAngleY__9dBgW_BaseFs, (void*)LineCheck__4cBgWFP11cBgS_LinChk, (void*)GroundCross__4cBgWFP11cBgS_GndChk, (void*)ShdwDraw__4cBgWFP13cBgS_ShdwDraw, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, (void*)GetGrpRoomIndex__4cBgWCFRC13cBgS_PolyInfo, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, (void*)NULL, (void*)CallRideCallBack__9dBgW_BaseFP10fopAc_ac_cP10fopAc_ac_c, (void*)CallArrowStickCallBack__9dBgW_BaseFP10fopAc_ac_cP10fopAc_ac_cR4cXyz, (void*)CalcPlane__4cBgWFv, (void*)ClassifyPlane__4cBgWFv, (void*)ChkPolyThrough__4cBgWFiP16cBgS_PolyPassChk, (void*)ChkShdwDrawThrough__4cBgWFiP16cBgS_PolyPassChk, (void*)ChkGrpThrough__4cBgWFiP15cBgS_GrpPassChki, }; /* 803ABCAC-803ABCB8 008DCC 000C+00 2/2 0/0 0/0 .data __vt__13cBgW_NodeTree */ SECTION_DATA extern void* __vt__13cBgW_NodeTree[3] = { (void*)NULL /* RTTI */, (void*)NULL, (void*)__dt__13cBgW_NodeTreeFv, }; /* 803ABCB8-803ABCC8 008DD8 000C+04 2/2 0/0 0/0 .data __vt__11cBgW_RwgElm */ SECTION_DATA extern void* __vt__11cBgW_RwgElm[3 + 1 /* padding */] = { (void*)NULL /* RTTI */, (void*)NULL, (void*)__dt__11cBgW_RwgElmFv, /* padding */ NULL, }; /* 800791C4-800791D4 073B04 0010+00 1/1 0/0 0/0 .text __ct__11cBgW_RwgElmFv */ cBgW_RwgElm::cBgW_RwgElm() {} /* 800791D4-8007921C 073B14 0048+00 2/1 0/0 0/0 .text __dt__11cBgW_RwgElmFv */ cBgW_RwgElm::~cBgW_RwgElm() {} /* 8007921C-80079238 073B5C 001C+00 1/1 0/0 0/0 .text __ct__13cBgW_NodeTreeFv */ cBgW_NodeTree::cBgW_NodeTree() {} /* 80079238-80079294 073B78 005C+00 2/1 0/0 0/0 .text __dt__13cBgW_NodeTreeFv */ cBgW_NodeTree::~cBgW_NodeTree() {} /* ############################################################################################## */ /* 804526F8-804526FC 000CF8 0004+00 6/6 0/0 0/0 .sdata2 @3717 */ SECTION_SDATA2 static u8 lit_3717[4] = { 0x00, 0x00, 0x00, 0x00, }; /* 80079294-8007933C 073BD4 00A8+00 1/1 0/0 0/0 .text __ct__4cBgWFv */ cBgW::cBgW() { pm_bgd = NULL; field_0x88 = 0x20; field_0x89 = 1; field_0x90 = 0; field_0x7c.set(FLOAT_LABEL(lit_3717), FLOAT_LABEL(lit_3717), FLOAT_LABEL(lit_3717)); pm_tri = NULL; pm_rwg = NULL; field_0xa4 = NULL; pm_node_tree = NULL; pm_grp = NULL; pm_vtx_tbl = NULL; pm_base = NULL; PSMTXIdentity(m_inv_mtx); PSMTXIdentity(field_0x4c); field_0x92 = 0xFFFF; field_0x91 = 0; } /* 8007933C-800793A4 073C7C 0068+00 2/1 1/1 5/5 .text __dt__4cBgWFv */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off // asm cBgW::~cBgW() { extern "C" asm void __dt__4cBgWFv() { nofralloc #include "asm/d/bg/d_bg_w/__dt__4cBgWFv.s" } #pragma pop /* 800793A4-800793C4 073CE4 0020+00 2/2 0/0 0/0 .text FreeArea__4cBgWFv */ void cBgW::FreeArea() { pm_tri = NULL; pm_rwg = NULL; pm_node_tree = NULL; field_0xa4 = NULL; pm_grp = NULL; pm_vtx_tbl = NULL; } /* 800793C4-80079484 073D04 00C0+00 2/2 0/0 1/1 .text GlobalVtx__4cBgWFv */ void cBgW::GlobalVtx() { if (pm_base != NULL) { if (!field_0x89) { for (int i = 0; i < pm_bgd->m_v_num; i++) { Vec* vtx = &pm_vtx_tbl[i]; PSVECAdd(vtx, &field_0x7c, vtx); } } else { for (int i = 0; i < pm_bgd->m_v_num; i++) { PSMTXMultVec(pm_base, &pm_bgd->m_v_tbl[i], &pm_vtx_tbl[i]); } } } } /* 80079484-80079564 073DC4 00E0+00 1/1 0/0 0/0 .text SetVtx__4cBgWFv */ // matches with literals #ifdef NONMATCHING bool cBgW::SetVtx() { if (field_0x88 & 0x10) { pm_vtx_tbl = NULL; } else if (field_0x88 & 0x1) { pm_vtx_tbl = new Vec[pm_bgd->m_v_num]; if (pm_vtx_tbl == NULL) { return true; } if (field_0x88 & 0x40) { for (int i = 0; i < pm_bgd->m_v_num; i++) { pm_vtx_tbl[i].x = 0.0f; pm_vtx_tbl[i].y = 0.0f; pm_vtx_tbl[i].z = 0.0f; } } GlobalVtx(); } else { pm_vtx_tbl = pm_bgd->m_v_tbl; } return false; } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm bool cBgW::SetVtx() { nofralloc #include "asm/d/bg/d_bg_w/SetVtx__4cBgWFv.s" } #pragma pop #endif /* 80079564-80079668 073EA4 0104+00 2/0 1/0 0/0 .text CalcPlane__4cBgWFv */ void cBgW::CalcPlane() { dzb_tri_data* tri_data = pm_bgd->m_t_tbl; if (pm_vtx_tbl != NULL) { if (!field_0x89) { for (int i = 0; i < pm_bgd->m_t_num; i++) { pm_tri[i].m_plane.mD -= PSVECDotProduct(&pm_tri[i].m_plane.mNormal, &field_0x7c); } } else { for (int i = 0; i < pm_bgd->m_t_num; i++) { pm_tri[i].m_plane.SetupFrom3Vtx(&pm_vtx_tbl[tri_data[i].field_0x0], &pm_vtx_tbl[tri_data[i].field_0x2], &pm_vtx_tbl[tri_data[i].field_0x4]); } } } } /* 80079668-800796F8 073FA8 0090+00 1/1 0/0 0/0 .text SetTri__4cBgWFv */ bool cBgW::SetTri() { pm_tri = new cBgW_TriElm[pm_bgd->m_t_num]; if (pm_tri == NULL) { return true; } CalcPlane(); return false; } /* 800796F8-80079754 074038 005C+00 2/1 0/0 0/0 .text __dt__11cBgW_TriElmFv */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off // asm cBgW_TriElm::~cBgW_TriElm() { extern "C" asm void __dt__11cBgW_TriElmFv() { nofralloc #include "asm/d/bg/d_bg_w/__dt__11cBgW_TriElmFv.s" } #pragma pop /* 80079754-80079770 074094 001C+00 1/1 0/0 0/0 .text __ct__11cBgW_TriElmFv */ cBgW_TriElm::cBgW_TriElm() {} /* 80079770-800797BC 0740B0 004C+00 1/1 0/0 0/0 .text BlckConnect__4cBgWFPUsPii */ void cBgW::BlckConnect(u16* param_0, int* param_1, int param_2) { if (*param_0 == 0xFFFF) { *param_0 = param_2; } if (*param_1 != 0xFFFF) { pm_rwg[*param_1].field_0x0 = param_2; } *param_1 = param_2; pm_rwg[*param_1].field_0x0 = 0xFFFF; } /* 800797BC-8007998C 0740FC 01D0+00 2/0 1/0 0/0 .text ClassifyPlane__4cBgWFv */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void cBgW::ClassifyPlane() { nofralloc #include "asm/d/bg/d_bg_w/ClassifyPlane__4cBgWFv.s" } #pragma pop /* 8007998C-800799E0 0742CC 0054+00 1/1 0/0 0/0 .text MakeBlckTransMinMax__4cBgWFP4cXyzP4cXyz */ void cBgW::MakeBlckTransMinMax(cXyz* param_0, cXyz* param_1) { PSVECAdd(param_0, &field_0x7c, param_0); PSVECAdd(param_1, &field_0x7c, param_1); } /* 800799E0-80079A68 074320 0088+00 1/1 0/0 0/0 .text MakeBlckMinMax__4cBgWFiP4cXyzP4cXyz */ void cBgW::MakeBlckMinMax(int vtx_index, cXyz* param_1, cXyz* param_2) { Vec* vtx = &pm_vtx_tbl[vtx_index]; if (param_1->x > vtx->x) { param_1->x = vtx->x; } if (param_2->x < vtx->x) { param_2->x = vtx->x; } if (param_1->y > vtx->y) { param_1->y = vtx->y; } if (param_2->y < vtx->y) { param_2->y = vtx->y; } if (param_1->z > vtx->z) { param_1->z = vtx->z; } if (param_2->z < vtx->z) { param_2->z = vtx->z; } } /* ############################################################################################## */ /* 804526FC-80452700 000CFC 0004+00 1/1 0/0 0/0 .sdata2 @3935 */ SECTION_SDATA2 static f32 lit_3935 = 1000000000.0f; /* 80452700-80452704 000D00 0004+00 1/1 0/0 0/0 .sdata2 @3936 */ SECTION_SDATA2 static f32 lit_3936 = -1000000000.0f; /* 80452704-80452708 000D04 0004+00 5/5 0/0 0/0 .sdata2 @3937 */ SECTION_SDATA2 static f32 lit_3937 = 1.0f; /* 80079A68-80079BDC 0743A8 0174+00 1/1 0/0 0/0 .text MakeBlckBnd__4cBgWFiP4cXyzP4cXyz */ // matches with literals #ifdef NONMATCHING void cBgW::MakeBlckBnd(int param_0, cXyz* param_1, cXyz* param_2) { int tmp = pm_bgd->m_b_tbl[param_0].field_0x0; int tmp2; if (param_0 != pm_bgd->m_b_num - 1) { tmp2 = pm_bgd->m_b_tbl[param_0 + 1].field_0x0 - 1; } else { tmp2 = pm_bgd->m_t_num - 1; } if (field_0x89 == 0) { MakeBlckTransMinMax(param_1, param_2); } else { param_1->z = 1000000000.0f; param_1->y = 1000000000.0f; param_1->x = 1000000000.0f; param_2->z = -1000000000.0f; param_2->y = -1000000000.0f; param_2->x = -1000000000.0f; for (int i = tmp; i <= tmp2; i++) { MakeBlckMinMax(pm_bgd->m_t_tbl[i].field_0x0, param_1, param_2); MakeBlckMinMax(pm_bgd->m_t_tbl[i].field_0x2, param_1, param_2); MakeBlckMinMax(pm_bgd->m_t_tbl[i].field_0x4, param_1, param_2); } param_1->x -= 1.0f; param_1->y -= 1.0f; param_1->z -= 1.0f; param_2->x += 1.0f; param_2->y += 1.0f; param_2->z += 1.0f; } } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void cBgW::MakeBlckBnd(int param_0, cXyz* param_1, cXyz* param_2) { nofralloc #include "asm/d/bg/d_bg_w/MakeBlckBnd__4cBgWFiP4cXyzP4cXyz.s" } #pragma pop #endif /* 80079BDC-80079CC4 07451C 00E8+00 1/1 0/0 0/0 .text MakeNodeTreeRp__4cBgWFi */ void cBgW::MakeNodeTreeRp(int param_0) { dzb_tree_data* tree_data = &pm_bgd->m_tree_tbl[param_0]; if (tree_data->field_0x0 & 1) { int tmp = tree_data->m_id[0]; if (tmp != 0xFFFF) { cXyz* max = (cXyz*)&pm_node_tree[param_0].getMaxP(); cXyz* min = (cXyz*)&pm_node_tree[param_0].getMinP(); MakeBlckBnd(tmp, min, max); } } else { pm_node_tree[param_0].ClearForMinMax(); for (int i = 0; i < 8; i++) { // this is probably wrong, fix later u16* tmp_p = (u16*)tree_data; int tmp = tmp_p[i + 2]; if (tmp != 0xFFFF) { MakeNodeTreeRp(tmp); pm_node_tree[param_0].SetMinMax(pm_node_tree[tmp].getMinP()); pm_node_tree[param_0].SetMinMax(pm_node_tree[tmp].getMaxP()); } } } } /* 80079CC4-80079DF0 074604 012C+00 1/1 0/0 0/0 .text MakeNodeTreeGrpRp__4cBgWFi */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void cBgW::MakeNodeTreeGrpRp(int param_0) { nofralloc #include "asm/d/bg/d_bg_w/MakeNodeTreeGrpRp__4cBgWFi.s" } #pragma pop /* void cBgW::MakeNodeTreeGrpRp(int param_0) { //u16 tmp = pm_bgd->m_g_tbl[param_0].field_0x2e; if (pm_bgd->m_g_tbl[param_0].field_0x2e != 0xFFFF) { MakeNodeTreeRp(pm_bgd->m_g_tbl[param_0].field_0x2e); pm_node_tree[param_0].SetMin(pm_grp[pm_bgd->m_g_tbl[param_0].field_0x2e].mMin); pm_node_tree[param_0].SetMax(pm_grp[pm_bgd->m_g_tbl[param_0].field_0x2e].mMax); } u16 tmp2 = pm_bgd->m_g_tbl[param_0].field_0x28; while (tmp2 != 0xFFFF) { MakeNodeTreeGrpRp(tmp2); pm_grp[param_0].SetMin(pm_grp[tmp2].mMin); pm_grp[param_0].SetMax(pm_node_tree[tmp2].mMax); } } */ /* 80079DF0-80079EEC 074730 00FC+00 2/2 0/0 0/0 .text MakeNodeTree__4cBgWFv */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void cBgW::MakeNodeTree() { nofralloc #include "asm/d/bg/d_bg_w/MakeNodeTree__4cBgWFv.s" } #pragma pop /* 80079EEC-80079F38 07482C 004C+00 2/0 1/0 0/0 .text ChkMemoryError__4cBgWFv */ bool cBgW::ChkMemoryError() { if (pm_tri == NULL || pm_rwg == NULL || field_0xa4 == NULL || pm_node_tree == NULL || pm_grp == NULL) { return true; } return false; } /* 80079F38-8007A184 074878 024C+00 1/1 3/3 85/85 .text Set__4cBgWFP6cBgD_tUlPA3_A4_f */ bool cBgW::Set(cBgD_t* pbgd, u32 param_1, Mtx* pbase_mtx) { field_0x88 = 0x20; pm_vtx_tbl = NULL; pm_tri = NULL; pm_rwg = NULL; field_0xa4 = NULL; pm_node_tree = NULL; pm_grp = NULL; field_0x90 = cM_rndF(128.0f); if (pbgd == NULL) { return true; } field_0x88 = param_1; if (field_0x88 & 0x20) { pm_base = NULL; PSMTXIdentity(m_inv_mtx); PSMTXIdentity(field_0x4c); } else { pm_base = *pbase_mtx; PSMTXCopy(pm_base, m_inv_mtx); PSMTXCopy(pm_base, field_0x4c); } pm_bgd = pbgd; if (SetVtx() || SetTri()) { FreeArea(); return true; } pm_rwg = new cBgW_RwgElm[pm_bgd->m_t_num]; if (pm_rwg == NULL) { FreeArea(); return true; } field_0xa4 = new cBgW_unk_b_data[pm_bgd->m_b_num]; if (field_0xa4 == NULL) { FreeArea(); return true; } pm_node_tree = new cBgW_NodeTree[pm_bgd->m_tree_num]; if (pm_node_tree == NULL) { FreeArea(); return true; } pm_grp = new cBgW_GrpElm[pm_bgd->m_g_num]; if (pm_grp == NULL) { FreeArea(); return true; } ClassifyPlane(); field_0x89 = 1; MakeNodeTree(); return false; } /* 8007A184-8007A1E4 074AC4 0060+00 2/1 0/0 0/0 .text __dt__11cBgW_GrpElmFv */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off // asm cBgW_GrpElm::~cBgW_GrpElm() { extern "C" asm void __dt__11cBgW_GrpElmFv() { nofralloc #include "asm/d/bg/d_bg_w/__dt__11cBgW_GrpElmFv.s" } #pragma pop /* 8007A1E4-8007A200 074B24 001C+00 1/1 0/0 0/0 .text __ct__11cBgW_GrpElmFv */ cBgW_GrpElm::cBgW_GrpElm() {} /* 8007A200-8007A344 074B40 0144+00 1/1 0/0 0/0 .text RwgLineCheck__4cBgWFUsP11cBgS_LinChk */ // loop needs work #ifdef NONMATCHING bool cBgW::RwgLineCheck(u16 poly_index, cBgS_LinChk* linchk) { bool chk; chk = false; cM3dGTri tri; while (1) { dzb_tri_data* tri_data = &pm_bgd->m_t_tbl[poly_index]; tri.setBg(&pm_vtx_tbl[tri_data->field_0x0], &pm_vtx_tbl[tri_data->field_0x2], &pm_vtx_tbl[tri_data->field_0x4], &pm_tri[poly_index].m_plane); cXyz cross; if (tri.cross(linchk->GetLinP(), &cross, linchk->ChkFrontFlag(), linchk->ChkBackFlag())) { if (!ChkPolyThrough(poly_index, linchk->GetPolyPassChk())) { linchk->SetCross(cross); linchk->SetPolyIndex(poly_index); chk = true; } } poly_index = pm_rwg[poly_index].field_0x0; if (poly_index != 0xFFFF) { return chk; } } return chk; } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm bool cBgW::RwgLineCheck(u16 param_0, cBgS_LinChk* param_1) { nofralloc #include "asm/d/bg/d_bg_w/RwgLineCheck__4cBgWFUsP11cBgS_LinChk.s" } #pragma pop #endif /* 8007A344-8007A3A0 074C84 005C+00 1/0 0/0 0/0 .text __dt__8cM3dGTriFv */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off // asm cM3dGTri::~cM3dGTri() { extern "C" asm void __dt__8cM3dGTriFv() { nofralloc #include "asm/d/bg/d_bg_w/__dt__8cM3dGTriFv.s" } #pragma pop /* 8007A3A0-8007A52C 074CE0 018C+00 1/1 0/0 0/0 .text LineCheckRp__4cBgWFP11cBgS_LinChki */ #ifdef NONMATCHING bool cBgW::LineCheckRp(cBgS_LinChk* linchk, int param_1) { cBgW_NodeTree* pnode0 = &pm_node_tree[param_1]; cM3dGLin* lin = linchk->GetLinP(); if (!cM3d_Cross_MinMaxBoxLine(&pnode0->getMinP(), &pnode0->getMaxP(), &lin->GetStartP(), &lin->GetEndP())) { return false; } dzb_tree_data* pnode = &pm_bgd->m_tree_tbl[param_1]; bool chk = false; if (pnode->field_0x0 & 1) { if (linchk->GetPreWallChk()) { u16 tmp = field_0xa4[pnode->m_id[0]].field_0x2; if (tmp != 0xFFFF && RwgLineCheck(tmp, linchk)) { chk = true; } } if (linchk->GetPreGroundChk()) { u16 tmp = field_0xa4[pnode->m_id[0]].field_0x4; if (tmp != 0xFFFF && RwgLineCheck(tmp, linchk)) { chk = true; } } if (linchk->GetPreRoofChk()) { u16 tmp = field_0xa4[pnode->m_id[0]].field_0x0; if (tmp != 0xFFFF && RwgLineCheck(tmp, linchk)) { chk = true; } } return chk; } for (int i = 0; i < 8; i++) { // this is probably wrong, fix later u16* tmp_p = (u16*)pnode; u16 tmp = tmp_p[i + 2]; if (tmp != 0xFFFF && LineCheckRp(linchk, tmp)) { chk = true; } } return chk; } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm bool cBgW::LineCheckRp(cBgS_LinChk* param_0, int param_1) { nofralloc #include "asm/d/bg/d_bg_w/LineCheckRp__4cBgWFP11cBgS_LinChki.s" } #pragma pop #endif /* 8007A52C-8007A658 074E6C 012C+00 1/1 0/0 0/0 .text LineCheckGrpRp__4cBgWFP11cBgS_LinChkii */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm bool cBgW::LineCheckGrpRp(cBgS_LinChk* param_0, int param_1, int param_2) { nofralloc #include "asm/d/bg/d_bg_w/LineCheckGrpRp__4cBgWFP11cBgS_LinChkii.s" } #pragma pop /* 8007A658-8007A680 074F98 0028+00 2/0 1/0 0/0 .text LineCheck__4cBgWFP11cBgS_LinChk */ bool cBgW::LineCheck(cBgS_LinChk* pchk) { return LineCheckGrpRp(pchk, field_0x92, 1); } /* 8007A680-8007A774 074FC0 00F4+00 2/2 0/0 0/0 .text * RwgGroundCheckCommon__4cBgWFfUsP11cBgS_GndChk */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void cBgW::RwgGroundCheckCommon(f32 param_0, u16 param_1, cBgS_GndChk* param_2) { nofralloc #include "asm/d/bg/d_bg_w/RwgGroundCheckCommon__4cBgWFfUsP11cBgS_GndChk.s" } #pragma pop /* 8007A774-8007A824 0750B4 00B0+00 1/1 0/0 0/0 .text RwgGroundCheckGnd__4cBgWFUsP11cBgS_GndChk */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void cBgW::RwgGroundCheckGnd(u16 param_0, cBgS_GndChk* param_1) { nofralloc #include "asm/d/bg/d_bg_w/RwgGroundCheckGnd__4cBgWFUsP11cBgS_GndChk.s" } #pragma pop /* ############################################################################################## */ /* 8045270C-80452710 000D0C 0004+00 1/1 0/0 0/0 .sdata2 @4271 */ SECTION_SDATA2 static f32 lit_4271 = 0.014000000432133675f; /* 8007A824-8007A8F4 075164 00D0+00 1/1 0/0 0/0 .text RwgGroundCheckWall__4cBgWFUsP11cBgS_GndChk */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void cBgW::RwgGroundCheckWall(u16 param_0, cBgS_GndChk* param_1) { nofralloc #include "asm/d/bg/d_bg_w/RwgGroundCheckWall__4cBgWFUsP11cBgS_GndChk.s" } #pragma pop /* 8007A8F4-8007AA50 075234 015C+00 1/1 0/0 0/0 .text GroundCrossRp__4cBgWFP11cBgS_GndChki */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void cBgW::GroundCrossRp(cBgS_GndChk* param_0, int param_1) { nofralloc #include "asm/d/bg/d_bg_w/GroundCrossRp__4cBgWFP11cBgS_GndChki.s" } #pragma pop /* 8007AA50-8007AB9C 075390 014C+00 1/1 0/0 0/0 .text GroundCrossGrpRp__4cBgWFP11cBgS_GndChkii */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm bool cBgW::GroundCrossGrpRp(cBgS_GndChk* param_0, int param_1, int param_2) { nofralloc #include "asm/d/bg/d_bg_w/GroundCrossGrpRp__4cBgWFP11cBgS_GndChkii.s" } #pragma pop /* 8007AB9C-8007ABC4 0754DC 0028+00 2/0 1/0 0/0 .text GroundCross__4cBgWFP11cBgS_GndChk */ bool cBgW::GroundCross(cBgS_GndChk* pchk) { return GroundCrossGrpRp(pchk, field_0x92, 1); } /* 8007ABC4-8007AC10 075504 004C+00 1/1 0/0 0/0 .text CopyOldMtx__4cBgWFv */ void cBgW::CopyOldMtx() { if (pm_base != NULL) { PSMTXCopy(field_0x4c, m_inv_mtx); PSMTXCopy(pm_base, field_0x4c); } } /* 8007AC10-8007ADF0 075550 01E0+00 1/1 0/0 0/0 .text Move__4cBgWFv */ void cBgW::Move() { if (!ChkLock() && (field_0x88 & 1)) { if (!ChkNoCalcVtx()) { if (field_0x90 >= 0xFF || field_0x4c[0][0] != pm_base[0][0] || field_0x4c[0][1] != pm_base[0][1] || field_0x4c[0][2] != pm_base[0][2] || field_0x4c[1][0] != pm_base[1][0] || field_0x4c[1][1] != pm_base[1][1] || field_0x4c[1][2] != pm_base[1][2] || field_0x4c[2][0] != pm_base[2][0] || field_0x4c[2][1] != pm_base[2][1] || field_0x4c[2][2] != pm_base[2][2]) { field_0x89 = 1; } else if (field_0x4c[0][3] == pm_base[0][3] && field_0x4c[1][3] == pm_base[1][3] && field_0x4c[2][3] == pm_base[2][3]) { PSMTXCopy(pm_base, m_inv_mtx); if (!ChkFlush()) { return; } } else { field_0x7c.x = pm_base[0][3] - field_0x4c[0][3]; field_0x7c.y = pm_base[1][3] - field_0x4c[1][3]; field_0x7c.z = pm_base[2][3] - field_0x4c[2][3]; field_0x89 = 0; } if (field_0x90 >= 0xFF) { field_0x90 = 0; } else { field_0x90++; } GlobalVtx(); } CopyOldMtx(); CalcPlane(); ClassifyPlane(); MakeNodeTree(); } } /* 8007ADF0-8007AEA4 075730 00B4+00 1/1 0/0 0/0 .text RwgShdwDraw__4cBgWFiP13cBgS_ShdwDraw */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void cBgW::RwgShdwDraw(int param_0, cBgS_ShdwDraw* param_1) { nofralloc #include "asm/d/bg/d_bg_w/RwgShdwDraw__4cBgWFiP13cBgS_ShdwDraw.s" } #pragma pop /* 8007AEA4-8007AFC0 0757E4 011C+00 1/1 0/0 0/0 .text ShdwDrawRp__4cBgWFP13cBgS_ShdwDrawi */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void cBgW::ShdwDrawRp(cBgS_ShdwDraw* param_0, int param_1) { nofralloc #include "asm/d/bg/d_bg_w/ShdwDrawRp__4cBgWFP13cBgS_ShdwDrawi.s" } #pragma pop /* 8007AFC0-8007B084 075900 00C4+00 1/1 0/0 0/0 .text ShdwDrawGrpRp__4cBgWFP13cBgS_ShdwDrawi */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void cBgW::ShdwDrawGrpRp(cBgS_ShdwDraw* param_0, int param_1) { nofralloc #include "asm/d/bg/d_bg_w/ShdwDrawGrpRp__4cBgWFP13cBgS_ShdwDrawi.s" } #pragma pop /* 8007B084-8007B0A8 0759C4 0024+00 2/0 1/0 0/0 .text ShdwDraw__4cBgWFP13cBgS_ShdwDraw */ void cBgW::ShdwDraw(cBgS_ShdwDraw* pshdw) { ShdwDrawGrpRp(pshdw, field_0x92); } /* 8007B0A8-8007B0B0 0759E8 0008+00 1/0 0/0 0/0 .text ChkPolyThrough__4cBgWFiP16cBgS_PolyPassChk */ bool cBgW::ChkPolyThrough(int param_0, cBgS_PolyPassChk* param_1) { return false; } /* 8007B0B0-8007B0DC 0759F0 002C+00 1/0 0/0 0/0 .text * ChkShdwDrawThrough__4cBgWFiP16cBgS_PolyPassChk */ bool cBgW::ChkShdwDrawThrough(int param_0, cBgS_PolyPassChk* param_1) { return ChkPolyThrough(param_0, param_1); } /* 8007B0DC-8007B0E4 075A1C 0008+00 1/0 0/0 0/0 .text ChkGrpThrough__4cBgWFiP15cBgS_GrpPassChki */ bool cBgW::ChkGrpThrough(int param_0, cBgS_GrpPassChk* param_1, int param_2) { return false; } /* 8007B0E4-8007B164 075A24 0080+00 2/0 1/0 0/0 .text GetGrpRoomIndex__4cBgWCFRC13cBgS_PolyInfo */ // missing array access instruction generation #ifdef NONMATCHING s32 cBgW::GetGrpRoomIndex(cBgS_PolyInfo const& poly) const { u16 poly_index = poly.GetPolyIndex(); int grp_index = GetTriGrp(poly_index); u16 tmp = pm_bgd->m_g_tbl[grp_index].field_0x24; int room_index; if (tmp == 0xFFFF || pm_bgd->m_g_tbl[tmp].field_0x24 == 0xFFFF) { return 0xFF; } room_index = pm_bgd->m_g_tbl[tmp].field_0x2a; if (room_index >= 0xFF) { room_index = 0xFF; } return room_index; } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm s32 cBgW::GetGrpRoomIndex(cBgS_PolyInfo const& param_0) const { nofralloc #include "asm/d/bg/d_bg_w/GetGrpRoomIndex__4cBgWCFRC13cBgS_PolyInfo.s" } #pragma pop #endif /* 8007B164-8007B17C 075AA4 0018+00 2/0 1/0 0/0 .text GetBnd__4cBgWCFv */ cM3dGAab* cBgW::GetBnd() const { return &pm_grp[field_0x92].m_aab; } /* 8007B17C-8007B1B4 075ABC 0038+00 0/0 1/1 0/0 .text GetTrans__4cBgWCFP4cXyz */ void cBgW::GetTrans(cXyz* p_trans) const { MtxP base = pm_base; p_trans->x = base[0][3] - m_inv_mtx[0][3]; p_trans->y = base[1][3] - m_inv_mtx[1][3]; p_trans->z = base[2][3] - m_inv_mtx[2][3]; } /* 8007B1B4-8007B240 075AF4 008C+00 2/0 1/0 0/0 .text * GetTriPnt__4cBgWCFRC13cBgS_PolyInfoP4cXyzP4cXyzP4cXyz */ bool cBgW::GetTriPnt(cBgS_PolyInfo const& poly, cXyz* p_pnt1, cXyz* p_pnt2, cXyz* p_pnt3) const { u16 poly_index = poly.GetPolyIndex(); dzb_tri_data* tri_data = &pm_bgd->m_t_tbl[poly_index]; p_pnt1->set(pm_vtx_tbl[tri_data->field_0x0]); p_pnt2->set(pm_vtx_tbl[tri_data->field_0x2]); p_pnt3->set(pm_vtx_tbl[tri_data->field_0x4]); return true; } /* 8007B240-8007B270 075B80 0030+00 2/0 1/0 0/0 .text GetTopUnder__4cBgWCFPfPf */ void cBgW::GetTopUnder(f32* p_top, f32* p_under) const { *p_under = pm_grp[field_0x92].m_aab.getMinP().y; *p_top = pm_grp[field_0x92].m_aab.getMaxP().y; } /* 8007B270-8007B2B0 075BB0 0040+00 2/0 1/0 0/0 .text GetTriPla__4cBgWCFRC13cBgS_PolyInfo */ cM3dGPla cBgW::GetTriPla(cBgS_PolyInfo const& poly) const { u16 poly_index = poly.GetPolyIndex(); return pm_tri[poly_index].m_plane; } /* 8007B2B0-8007B2F4 075BF0 0044+00 2/0 1/0 0/0 .text GetGrpInf__4cBgWCFRC13cBgS_PolyInfo */ u32 cBgW::GetGrpInf(cBgS_PolyInfo const& poly) const { int grp = GetTriGrp(poly.GetPolyIndex()); return pm_bgd->m_g_tbl[grp].m_info; } /* 8007B2F4-8007B30C 075C34 0018+00 5/5 0/0 0/0 .text GetPolyInfId__4cBgWCFi */ int cBgW::GetPolyInfId(int poly_index) const { return pm_bgd->m_t_tbl[poly_index].m_id; } /* 8007B30C-8007B360 075C4C 0054+00 6/6 0/0 0/0 .text GetPolyInf0__4cBgWCFiUlUl */ u32 cBgW::GetPolyInf0(int poly_index, u32 mask, u32 shift) const { int id = GetPolyInfId(poly_index); return (pm_bgd->m_ti_tbl[id].m_info0 & mask) >> shift; } /* 8007B360-8007B3AC 075CA0 004C+00 10/10 0/0 0/0 .text GetMaskPolyInf0_NoShift__4cBgWCFiUl */ u32 cBgW::GetMaskPolyInf0_NoShift(int poly_index, u32 mask) const { int id = GetPolyInfId(poly_index); return (pm_bgd->m_ti_tbl[id].m_info0 & mask); } /* 8007B3AC-8007B3D8 075CEC 002C+00 1/0 1/0 0/0 .text GetExitId__4dBgWFRC13cBgS_PolyInfo */ s32 dBgW::GetExitId(cBgS_PolyInfo const& poly) { return GetPolyInf0(poly.GetPolyIndex(), 0x3F, 0); } /* 8007B3D8-8007B404 075D18 002C+00 1/0 1/0 0/0 .text GetPolyColor__4dBgWFRC13cBgS_PolyInfo */ s32 dBgW::GetPolyColor(cBgS_PolyInfo const& poly) { return GetPolyInf0(poly.GetPolyIndex(), 0x3FC0, 6); } /* 8007B404-8007B430 075D44 002C+00 1/0 1/0 0/0 .text GetHorseNoEntry__4dBgWFRC13cBgS_PolyInfo */ BOOL dBgW::GetHorseNoEntry(cBgS_PolyInfo const& poly) { return GetPolyInf0(poly.GetPolyIndex(), 0x200000, 21); } /* 8007B430-8007B460 075D70 0030+00 1/0 1/0 0/0 .text GetSpecialCode__4dBgWFRC13cBgS_PolyInfo */ int dBgW::GetSpecialCode(cBgS_PolyInfo const& poly) { return GetSpecialCode(poly.GetPolyIndex()); } /* 8007B460-8007B488 075DA0 0028+00 1/0 1/0 0/0 .text GetSpecialCode__4dBgWFi */ int dBgW::GetSpecialCode(int poly_index) { return GetPolyInf0(poly_index, 0xF000000, 24); } /* 8007B488-8007B4B4 075DC8 002C+00 1/0 1/0 0/0 .text GetMagnetCode__4dBgWFRC13cBgS_PolyInfo */ int dBgW::GetMagnetCode(cBgS_PolyInfo const& poly) { return GetPolyInf0(poly.GetPolyIndex(), 0x30000000, 28); } /* 8007B4B4-8007B4E0 075DF4 002C+00 1/0 1/0 0/0 .text GetMonkeyBarsCode__4dBgWFRC13cBgS_PolyInfo */ int dBgW::GetMonkeyBarsCode(cBgS_PolyInfo const& poly) { return GetPolyInf0(poly.GetPolyIndex(), 0x80000000, 31); } /* 8007B4E0-8007B504 075E20 0024+00 1/0 1/0 0/0 .text GetPolyObjThrough__4dBgWFi */ u32 dBgW::GetPolyObjThrough(int poly_index) { return GetMaskPolyInf0_NoShift(poly_index, 0x4000); } /* 8007B504-8007B52C 075E44 0028+00 1/0 1/0 0/0 .text GetPolyCamThrough__4dBgWFi */ u32 dBgW::GetPolyCamThrough(int poly_index) { return GetMaskPolyInf0_NoShift(poly_index, 0x8000); } /* 8007B52C-8007B550 075E6C 0024+00 1/0 1/0 0/0 .text GetPolyLinkThrough__4dBgWFi */ u32 dBgW::GetPolyLinkThrough(int poly_index) { return GetMaskPolyInf0_NoShift(poly_index, 0x10000); } /* 8007B550-8007B574 075E90 0024+00 1/0 1/0 0/0 .text GetPolyArrowThrough__4dBgWFi */ u32 dBgW::GetPolyArrowThrough(int poly_index) { return GetMaskPolyInf0_NoShift(poly_index, 0x20000); } /* 8007B574-8007B598 075EB4 0024+00 1/0 1/0 0/0 .text GetPolyHSStick__4dBgWFi */ u32 dBgW::GetPolyHSStick(int poly_index) { return GetMaskPolyInf0_NoShift(poly_index, 0x40000); } /* 8007B598-8007B5BC 075ED8 0024+00 1/0 1/0 0/0 .text GetPolyBoomerangThrough__4dBgWFi */ u32 dBgW::GetPolyBoomerangThrough(int poly_index) { return GetMaskPolyInf0_NoShift(poly_index, 0x80000); } /* 8007B5BC-8007B5E0 075EFC 0024+00 1/0 1/0 0/0 .text GetPolyRopeThrough__4dBgWFi */ u32 dBgW::GetPolyRopeThrough(int poly_index) { return GetMaskPolyInf0_NoShift(poly_index, 0x100000); } /* 8007B5E0-8007B604 075F20 0024+00 1/0 1/0 0/0 .text GetPolyBombThrough__4dBgWFi */ u32 dBgW::GetPolyBombThrough(int poly_index) { return GetMaskPolyInf0_NoShift(poly_index, 0x800000); } /* 8007B604-8007B630 075F44 002C+00 1/0 1/0 0/0 .text GetShdwThrough__4dBgWFi */ bool dBgW::GetShdwThrough(int poly_index) { return GetMaskPolyInf0_NoShift(poly_index, 0x400000) != 0; } /* 8007B630-8007B654 075F70 0024+00 1/0 1/0 0/0 .text GetUnderwaterRoofCode__4dBgWFi */ u32 dBgW::GetUnderwaterRoofCode(int poly_index) { return GetMaskPolyInf0_NoShift(poly_index, 0x40000000); } /* 8007B654-8007B6AC 075F94 0058+00 6/6 0/0 0/0 .text GetPolyInf1__4cBgWCFiUlUl */ u32 cBgW::GetPolyInf1(int poly_index, u32 mask, u32 shift) const { int id = GetPolyInfId(poly_index); return (pm_bgd->m_ti_tbl[id].m_info1 & mask) >> shift; } /* 8007B6AC-8007B6D8 075FEC 002C+00 1/0 1/0 0/0 .text GetLinkNo__4dBgWFRC13cBgS_PolyInfo */ int dBgW::GetLinkNo(cBgS_PolyInfo const& poly) { return GetPolyInf1(poly.GetPolyIndex(), 0xFF, 0); } /* 8007B6D8-8007B704 076018 002C+00 1/0 1/0 0/0 .text GetWallCode__4dBgWFRC13cBgS_PolyInfo */ s32 dBgW::GetWallCode(cBgS_PolyInfo const& poly) { return GetPolyInf1(poly.GetPolyIndex(), 0xF00, 8); } /* 8007B704-8007B734 076044 0030+00 1/0 1/0 0/0 .text GetPolyAtt0__4dBgWFRC13cBgS_PolyInfo */ int dBgW::GetPolyAtt0(cBgS_PolyInfo const& poly) { return GetPolyInf1(poly.GetPolyIndex(), 0xF000, 12); } /* 8007B734-8007B760 076074 002C+00 1/0 1/0 0/0 .text GetPolyAtt1__4dBgWFRC13cBgS_PolyInfo */ int dBgW::GetPolyAtt1(cBgS_PolyInfo const& poly) { return GetPolyInf1(poly.GetPolyIndex(), 0x70000, 16); } /* 8007B760-8007B78C 0760A0 002C+00 1/0 1/0 0/0 .text GetGroundCode__4dBgWFRC13cBgS_PolyInfo */ int dBgW::GetGroundCode(cBgS_PolyInfo const& poly) { return GetPolyInf1(poly.GetPolyIndex(), 0xF80000, 19); } /* 8007B78C-8007B7DC 0760CC 0050+00 2/2 0/0 0/0 .text GetMaskPolyInf1_NoShift__4cBgWCFiUl */ u32 cBgW::GetMaskPolyInf1_NoShift(int poly_index, u32 mask) const { int id = GetPolyInfId(poly_index); return (pm_bgd->m_ti_tbl[id].m_info1 & mask); } /* 8007B7DC-8007B800 07611C 0024+00 1/0 1/0 0/0 .text GetIronBallThrough__4dBgWFi */ u32 dBgW::GetIronBallThrough(int poly_index) { return GetMaskPolyInf1_NoShift(poly_index, 0x1000000); } /* 8007B800-8007B824 076140 0024+00 1/0 1/0 0/0 .text GetAttackThrough__4dBgWFi */ u32 dBgW::GetAttackThrough(int poly_index) { return GetMaskPolyInf1_NoShift(poly_index, 0x2000000); } /* 8007B824-8007B87C 076164 0058+00 4/4 0/0 0/0 .text GetPolyInf2__4cBgWCFiUlUl */ u32 cBgW::GetPolyInf2(int poly_index, u32 mask, u32 shift) const { int id = GetPolyInfId(poly_index); return (pm_bgd->m_ti_tbl[id].m_info2 & mask) >> shift; } /* 8007B87C-8007B8A8 0761BC 002C+00 1/0 1/0 0/0 .text GetCamMoveBG__4dBgWFRC13cBgS_PolyInfo */ s32 dBgW::GetCamMoveBG(cBgS_PolyInfo const& poly) { return GetPolyInf2(poly.GetPolyIndex(), 0xFF, 0); } /* 8007B8A8-8007B8D8 0761E8 0030+00 1/0 1/0 0/0 .text GetRoomCamId__4dBgWFRC13cBgS_PolyInfo */ s32 dBgW::GetRoomCamId(cBgS_PolyInfo const& poly) { return GetPolyInf2(poly.GetPolyIndex(), 0xFF00, 8); } /* 8007B8D8-8007B904 076218 002C+00 1/0 1/0 0/0 .text GetRoomPathId__4dBgWFRC13cBgS_PolyInfo */ s32 dBgW::GetRoomPathId(cBgS_PolyInfo const& poly) { return GetPolyInf2(poly.GetPolyIndex(), 0xFF0000, 16); } /* 8007B904-8007B930 076244 002C+00 1/0 1/0 0/0 .text GetRoomPathPntNo__4dBgWFRC13cBgS_PolyInfo */ s32 dBgW::GetRoomPathPntNo(cBgS_PolyInfo const& poly) { return GetPolyInf2(poly.GetPolyIndex(), 0xFF000000, 24); } /* 8007B930-8007B948 076270 0018+00 2/2 0/0 0/0 .text GetTriGrp__4cBgWCFi */ int cBgW::GetTriGrp(int poly_index) const { return pm_bgd->m_t_tbl[poly_index].m_grp; } /* 8007B948-8007B958 076288 0010+00 2/0 1/0 0/0 .text ChkNotReady__4cBgWCFv */ bool cBgW::ChkNotReady() const { return pm_vtx_tbl == NULL; } /* 8007B958-8007B964 076298 000C+00 2/0 1/0 0/0 .text ChkLock__4cBgWCFv */ bool cBgW::ChkLock() const { return field_0x88 & 0x80; } /* 8007B964-8007B970 0762A4 000C+00 2/0 1/0 0/0 .text ChkMoveBg__4cBgWCFv */ bool cBgW::ChkMoveBg() const { return field_0x88 & 0x1; } /* 8007B970-8007B9C0 0762B0 0050+00 1/1 2/2 87/87 .text __ct__4dBgWFv */ dBgW::dBgW() { m_crr_func = NULL; m_ride_callback = NULL; m_arrow_stick_callback = NULL; m_flags = 0; } /* 8007B9C0-8007B9EC 076300 002C+00 0/0 2/2 115/115 .text Move__4dBgWFv */ void dBgW::Move() { OnMoveFlag(); cBgW::Move(); } /* 8007B9EC-8007BA40 07632C 0054+00 2/2 0/0 0/0 .text * positionWallCorrect__4dBgWFP9dBgS_AcchfR8cM3dGPlaP4cXyzf */ // matches with literals #ifdef NONMATCHING void dBgW::positionWallCorrect(dBgS_Acch* param_0, f32 param_1, cM3dGPla& param_2, cXyz* pupper_pos, f32 param_4) { param_0->SetWallHit(); f32 tmp = param_4 - 1.0f; if (tmp < 0.0f) { tmp = 0.0f; } f32 temp_f2 = tmp * param_1; pupper_pos->x += temp_f2 * param_2.mNormal.x; pupper_pos->z += temp_f2 * param_2.mNormal.z; } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dBgW::positionWallCorrect(dBgS_Acch* param_0, f32 param_1, cM3dGPla& param_2, cXyz* param_3, f32 param_4) { nofralloc #include "asm/d/bg/d_bg_w/positionWallCorrect__4dBgWFP9dBgS_AcchfR8cM3dGPlaP4cXyzf.s" } #pragma pop #endif /* ############################################################################################## */ /* 80452710-80452718 000D10 0004+04 2/2 0/0 0/0 .sdata2 @4962 */ SECTION_SDATA2 static f32 lit_4962[1 + 1 /* padding */] = { 1.0f / 125.0f, /* padding */ 0.0f, }; /* 8007BA40-8007C234 076380 07F4+00 1/1 0/0 0/0 .text RwgWallCorrect__4dBgWFP9dBgS_AcchUs */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dBgW::RwgWallCorrect(dBgS_Acch* param_0, u16 param_1) { nofralloc #include "asm/d/bg/d_bg_w/RwgWallCorrect__4dBgWFP9dBgS_AcchUs.s" } #pragma pop /* 8007C234-8007C360 076B74 012C+00 1/1 0/0 0/0 .text WallCorrectRp__4dBgWFP9dBgS_Acchi */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dBgW::WallCorrectRp(dBgS_Acch* param_0, int param_1) { nofralloc #include "asm/d/bg/d_bg_w/WallCorrectRp__4dBgWFP9dBgS_Acchi.s" } #pragma pop /* 8007C360-8007C484 076CA0 0124+00 1/1 0/0 0/0 .text WallCorrectGrpRp__4dBgWFP9dBgS_Acchii */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm bool dBgW::WallCorrectGrpRp(dBgS_Acch* param_0, int param_1, int param_2) { nofralloc #include "asm/d/bg/d_bg_w/WallCorrectGrpRp__4dBgWFP9dBgS_Acchii.s" } #pragma pop /* 8007C484-8007C4AC 076DC4 0028+00 1/0 1/0 0/0 .text WallCorrect__4dBgWFP9dBgS_Acch */ bool dBgW::WallCorrect(dBgS_Acch* pacch) { return WallCorrectGrpRp(pacch, field_0x92, 1); } struct wcs_data { /* 0x0 */ f32 field_0x0; /* 0x4 */ u16 field_0x4; /* 0x8 */ int field_0x8; }; // Size: 0xC /* ############################################################################################## */ /* 80424B80-80424F70 0518A0 03F0+00 1/1 0/0 0/0 .bss l_wcsbuf */ static wcs_data l_wcsbuf[84]; /* 80450F80-80450F84 000480 0004+00 2/2 0/0 0/0 .sbss l_start */ static wcs_data* l_start; /* 80450F84-80450F88 000484 0004+00 2/2 0/0 0/0 .sbss l_wcsbuf_num */ static int l_wcsbuf_num; /* 8007C4AC-8007C714 076DEC 0268+00 1/1 0/0 0/0 .text RwgWallCorrectSort__4dBgWFP9dBgS_AcchUs */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dBgW::RwgWallCorrectSort(dBgS_Acch* param_0, u16 param_1) { nofralloc #include "asm/d/bg/d_bg_w/RwgWallCorrectSort__4dBgWFP9dBgS_AcchUs.s" } #pragma pop /* 8007C714-8007C808 077054 00F4+00 1/1 0/0 0/0 .text WallCorrectRpSort__4dBgWFP9dBgS_Acchi */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dBgW::WallCorrectRpSort(dBgS_Acch* param_0, int param_1) { nofralloc #include "asm/d/bg/d_bg_w/WallCorrectRpSort__4dBgWFP9dBgS_Acchi.s" } #pragma pop /* 8007C808-8007C910 077148 0108+00 1/1 0/0 0/0 .text WallCorrectGrpRpSort__4dBgWFP9dBgS_Acchii */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dBgW::WallCorrectGrpRpSort(dBgS_Acch* param_0, int param_1, int param_2) { nofralloc #include "asm/d/bg/d_bg_w/WallCorrectGrpRpSort__4dBgWFP9dBgS_Acchii.s" } #pragma pop /* 8007C910-8007D0DC 077250 07CC+00 1/0 1/0 0/0 .text WallCorrectSort__4dBgWFP9dBgS_Acch */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dBgW::WallCorrectSort(dBgS_Acch* param_0) { nofralloc #include "asm/d/bg/d_bg_w/WallCorrectSort__4dBgWFP9dBgS_Acch.s" } #pragma pop /* 8007D0DC-8007D208 077A1C 012C+00 1/1 0/0 0/0 .text RwgRoofChk__4dBgWFUsP12dBgS_RoofChk */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dBgW::RwgRoofChk(u16 param_0, dBgS_RoofChk* param_1) { nofralloc #include "asm/d/bg/d_bg_w/RwgRoofChk__4dBgWFUsP12dBgS_RoofChk.s" } #pragma pop /* 8007D208-8007D330 077B48 0128+00 1/1 0/0 0/0 .text RoofChkRp__4dBgWFP12dBgS_RoofChki */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dBgW::RoofChkRp(dBgS_RoofChk* param_0, int param_1) { nofralloc #include "asm/d/bg/d_bg_w/RoofChkRp__4dBgWFP12dBgS_RoofChki.s" } #pragma pop /* 8007D330-8007D470 077C70 0140+00 1/1 0/0 0/0 .text RoofChkGrpRp__4dBgWFP12dBgS_RoofChkii */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm bool dBgW::RoofChkGrpRp(dBgS_RoofChk* param_0, int param_1, int param_2) { nofralloc #include "asm/d/bg/d_bg_w/RoofChkGrpRp__4dBgWFP12dBgS_RoofChkii.s" } #pragma pop /* 8007D470-8007D498 077DB0 0028+00 1/0 1/0 0/0 .text RoofChk__4dBgWFP12dBgS_RoofChk */ bool dBgW::RoofChk(dBgS_RoofChk* pchk) { return RoofChkGrpRp(pchk, field_0x92, 1); } /* 8007D498-8007D5C4 077DD8 012C+00 1/1 0/0 0/0 .text RwgSplGrpChk__4dBgWFUsP14dBgS_SplGrpChk */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dBgW::RwgSplGrpChk(u16 param_0, dBgS_SplGrpChk* param_1) { nofralloc #include "asm/d/bg/d_bg_w/RwgSplGrpChk__4dBgWFUsP14dBgS_SplGrpChk.s" } #pragma pop /* 8007D5C4-8007D6F0 077F04 012C+00 1/1 0/0 0/0 .text SplGrpChkRp__4dBgWFP14dBgS_SplGrpChki */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dBgW::SplGrpChkRp(dBgS_SplGrpChk* param_0, int param_1) { nofralloc #include "asm/d/bg/d_bg_w/SplGrpChkRp__4dBgWFP14dBgS_SplGrpChki.s" } #pragma pop /* 8007D6F0-8007D830 078030 0140+00 1/1 0/0 0/0 .text SplGrpChkGrpRp__4dBgWFP14dBgS_SplGrpChkii */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm bool dBgW::SplGrpChkGrpRp(dBgS_SplGrpChk* param_0, int param_1, int param_2) { nofralloc #include "asm/d/bg/d_bg_w/SplGrpChkGrpRp__4dBgWFP14dBgS_SplGrpChkii.s" } #pragma pop /* 8007D830-8007D858 078170 0028+00 1/0 1/0 0/0 .text SplGrpChk__4dBgWFP14dBgS_SplGrpChk */ bool dBgW::SplGrpChk(dBgS_SplGrpChk* pchk) { return SplGrpChkGrpRp(pchk, field_0x92, 1); } /* 8007D858-8007D8E8 078198 0090+00 1/1 0/0 0/0 .text RwgCaptPoly__4dBgWFiR13dBgS_CaptPoly */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dBgW::RwgCaptPoly(int param_0, dBgS_CaptPoly& param_1) { nofralloc #include "asm/d/bg/d_bg_w/RwgCaptPoly__4dBgWFiR13dBgS_CaptPoly.s" } #pragma pop /* 8007D8E8-8007DA04 078228 011C+00 1/1 0/0 0/0 .text CaptPolyRp__4dBgWFR13dBgS_CaptPolyi */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dBgW::CaptPolyRp(dBgS_CaptPoly& param_0, int param_1) { nofralloc #include "asm/d/bg/d_bg_w/CaptPolyRp__4dBgWFR13dBgS_CaptPolyi.s" } #pragma pop /* 8007DA04-8007DAF8 078344 00F4+00 1/1 0/0 0/0 .text CaptPolyGrpRp__4dBgWFR13dBgS_CaptPolyii */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dBgW::CaptPolyGrpRp(dBgS_CaptPoly& param_0, int param_1, int param_2) { nofralloc #include "asm/d/bg/d_bg_w/CaptPolyGrpRp__4dBgWFR13dBgS_CaptPolyii.s" } #pragma pop /* 8007DAF8-8007DB20 078438 0028+00 1/0 1/0 0/0 .text CaptPoly__4dBgWFR13dBgS_CaptPoly */ void dBgW::CaptPoly(dBgS_CaptPoly& poly) { CaptPolyGrpRp(poly, field_0x92, 1); } /* 8007DB20-8007DC70 078460 0150+00 1/1 0/0 0/0 .text RwgSphChk__4dBgWFUsP11dBgS_SphChkPv */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dBgW::RwgSphChk(u16 param_0, dBgS_SphChk* param_1, void* param_2) { nofralloc #include "asm/d/bg/d_bg_w/RwgSphChk__4dBgWFUsP11dBgS_SphChkPv.s" } #pragma pop /* 8007DC70-8007DDE0 0785B0 0170+00 1/1 0/0 0/0 .text SphChkRp__4dBgWFP11dBgS_SphChkPvi */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dBgW::SphChkRp(dBgS_SphChk* param_0, void* param_1, int param_2) { nofralloc #include "asm/d/bg/d_bg_w/SphChkRp__4dBgWFP11dBgS_SphChkPvi.s" } #pragma pop /* 8007DDE0-8007DF00 078720 0120+00 1/1 0/0 0/0 .text SphChkGrpRp__4dBgWFP11dBgS_SphChkPvii */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm bool dBgW::SphChkGrpRp(dBgS_SphChk* param_0, void* param_1, int param_2, int param_3) { nofralloc #include "asm/d/bg/d_bg_w/SphChkGrpRp__4dBgWFP11dBgS_SphChkPvii.s" } #pragma pop /* 8007DF00-8007DF28 078840 0028+00 1/0 1/0 0/0 .text SphChk__4dBgWFP11dBgS_SphChkPv */ bool dBgW::SphChk(dBgS_SphChk* pchk, void* param_1) { return SphChkGrpRp(pchk, param_1, field_0x92, 1); } /* 8007DF28-8007DF58 078868 0030+00 1/0 1/0 0/0 .text GetPolyGrpRoomInfId__4dBgWFRC13cBgS_PolyInfo */ u8 dBgW::GetPolyGrpRoomInfId(cBgS_PolyInfo const& poly) { return GetGrpInf(poly) & 0xFF; } /* 8007DF58-8007DF88 078898 0030+00 1/0 1/0 0/0 .text GetGrpSoundId__4dBgWFRC13cBgS_PolyInfo */ u8 dBgW::GetGrpSoundId(cBgS_PolyInfo const& poly) { return GetGrpInf(poly) >> 11; } /* 8007DF88-8007DFC4 0788C8 003C+00 1/0 0/0 0/0 .text * CrrPos__4dBgWFRC13cBgS_PolyInfoPvbP4cXyzP5csXyzP5csXyz */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dBgW::CrrPos(cBgS_PolyInfo const& param_0, void* param_1, bool param_2, cXyz* param_3, csXyz* param_4, csXyz* param_5) { nofralloc #include "asm/d/bg/d_bg_w/CrrPos__4dBgWFRC13cBgS_PolyInfoPvbP4cXyzP5csXyzP5csXyz.s" } #pragma pop /* 8007DFC4-8007E000 078904 003C+00 1/0 0/0 0/0 .text * TransPos__4dBgWFRC13cBgS_PolyInfoPvbP4cXyzP5csXyzP5csXyz */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dBgW::TransPos(cBgS_PolyInfo const& param_0, void* param_1, bool param_2, cXyz* param_3, csXyz* param_4, csXyz* param_5) { nofralloc #include "asm/d/bg/d_bg_w/TransPos__4dBgWFRC13cBgS_PolyInfoPvbP4cXyzP5csXyzP5csXyz.s" } #pragma pop /* 8007E000-8007E02C 078940 002C+00 1/0 0/0 0/0 .text * MatrixCrrPos__4dBgWFRC13cBgS_PolyInfoPvbP4cXyzP5csXyzP5csXyz */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dBgW::MatrixCrrPos(cBgS_PolyInfo const& param_0, void* param_1, bool param_2, cXyz* param_3, csXyz* param_4, csXyz* param_5) { nofralloc #include "asm/d/bg/d_bg_w/MatrixCrrPos__4dBgWFRC13cBgS_PolyInfoPvbP4cXyzP5csXyzP5csXyz.s" } #pragma pop /* 8007E02C-8007E360 07896C 0334+00 1/0 1/0 0/0 .text ChkPolyThrough__4dBgWFiP16cBgS_PolyPassChk */ // should match when dHorse_c member function table is setup #ifdef NONMATCHING bool dBgW::ChkPolyThrough(int poly_index, cBgS_PolyPassChk* ppass_chk) { if (ppass_chk == NULL) { return false; } dBgS_PolyPassChk* chk = (dBgS_PolyPassChk*)ppass_chk; if (chk->ChkObj() && GetPolyObjThrough(poly_index)) { return true; } if (chk->ChkCam() && GetPolyCamThrough(poly_index)) { return true; } if ((chk->ChkLink() && GetPolyLinkThrough(poly_index)) || (chk->ChkHorse() && GetPolyLinkThrough(poly_index))) { return true; } if (chk->ChkArrow() && GetPolyArrowThrough(poly_index)) { return true; } if (chk->ChkBomb() && GetPolyBombThrough(poly_index)) { return true; } if (chk->ChkBoomerang() && GetPolyBoomerangThrough(poly_index)) { return true; } if (chk->ChkRope() && GetPolyRopeThrough(poly_index)) { return true; } if (chk->ChkUnderwaterRoof() && GetUnderwaterRoofCode(poly_index)) { return true; } int info_f00 = GetPolyInf1(poly_index, 0xF00, 8); if (info_f00 == 8 && chk->ChkNoHorse()) { return true; } if (info_f00 == 9) { if (chk->ChkNoHorse()) { return true; } cXyz pos(pm_tri[poly_index].m_plane.mNormal); if (chk->ChkHorse() && i_dComIfGp_getHorseActor() != NULL) { if (!i_dComIfGp_getHorseActor()->checkSpecialWallHit(pos)) { return true; } } } if (chk->ChkStatue() && GetSpecialCode(poly_index) == 7) { return true; } if (chk->ChkIronBall() && GetIronBallThrough(poly_index)) { return true; } return false; } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm bool dBgW::ChkPolyThrough(int param_0, cBgS_PolyPassChk* param_1) { nofralloc #include "asm/d/bg/d_bg_w/ChkPolyThrough__4dBgWFiP16cBgS_PolyPassChk.s" } #pragma pop #endif /* 8007E360-8007E3D8 078CA0 0078+00 1/0 1/0 0/0 .text * ChkShdwDrawThrough__4dBgWFiP16cBgS_PolyPassChk */ bool dBgW::ChkShdwDrawThrough(int poly_index, cBgS_PolyPassChk*) { if (GetShdwThrough(poly_index)) { return true; } return GetPolyArrowThrough(poly_index); } /* 8007E3D8-8007E444 078D18 006C+00 1/0 1/0 0/0 .text ChkGrpThrough__4dBgWFiP15cBgS_GrpPassChki */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm bool dBgW::ChkGrpThrough(int param_0, cBgS_GrpPassChk* param_1, int param_2) { nofralloc #include "asm/d/bg/d_bg_w/ChkGrpThrough__4dBgWFiP15cBgS_GrpPassChki.s" } #pragma pop /* 8007E444-8007E474 078D84 0030+00 1/0 1/0 0/0 .text * CallRideCallBack__4dBgWFP10fopAc_ac_cP10fopAc_ac_c */ void dBgW::CallRideCallBack(fopAc_ac_c* param_0, fopAc_ac_c* param_1) { if (m_ride_callback != NULL) { m_ride_callback(this, param_0, param_1); } } /* 8007E474-8007E4A4 078DB4 0030+00 1/0 1/0 0/0 .text * CallArrowStickCallBack__4dBgWFP10fopAc_ac_cP10fopAc_ac_cR4cXyz */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void dBgW::CallArrowStickCallBack(fopAc_ac_c* param_0, fopAc_ac_c* param_1, cXyz& param_2) { nofralloc #include "asm/d/bg/d_bg_w/CallArrowStickCallBack__4dBgWFP10fopAc_ac_cP10fopAc_ac_cR4cXyz.s" } #pragma pop /* 8007E4A4-8007E4B4 078DE4 0010+00 1/0 1/0 0/0 .text OffMoveFlag__4dBgWFv */ void dBgW::OffMoveFlag() { m_flags &= ~1; } /* 8007E4B4-8007E4C0 078DF4 000C+00 1/0 1/0 0/0 .text ChkMoveFlag__4dBgWCFv */ u32 dBgW::ChkMoveFlag() const { return m_flags & 1; } /* 8007E4C0-8007E548 078E00 0088+00 0/0 0/0 1/1 .text dBgW_NewSet__FP6cBgD_tUlPA3_A4_f */ dBgW* dBgW_NewSet(cBgD_t* pbgd, u32 param_1, Mtx* pbase_mtx) { dBgW* nw = new dBgW(); if (nw == NULL) { return NULL; } if (nw->Set(pbgd, param_1, pbase_mtx)) { return NULL; } return nw; } /* 8007E548-8007E5A8 078E88 0060+00 1/0 0/0 0/0 .text __dt__4dBgWFv */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off // asm dBgW::~dBgW() { extern "C" asm void __dt__4dBgWFv() { nofralloc #include "asm/d/bg/d_bg_w/__dt__4dBgWFv.s" } #pragma pop /* ############################################################################################## */ /* 80450F88-80450F90 -00001 0008+00 0/0 4/4 0/0 .sbss None */ /* 80450F88 0001+00 data_80450F88 None */ /* 80450F89 0001+00 data_80450F89 None */ /* 80450F8A 0001+00 data_80450F8A None */ /* 80450F8B 0005+00 data_80450F8B None */ extern u8 struct_80450F88[8]; u8 struct_80450F88[8];