diff options
| author | TakaRikka <38417346+TakaRikka@users.noreply.github.com> | 2024-10-10 07:29:58 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-10-10 08:29:58 -0600 |
| commit | 12eb254d769d84743b5cc6cd5424057c57eaf0ad (patch) | |
| tree | 4509be332b2ccfc6fe939f47740d68f7746eca3e /src/d/d_particle.cpp | |
| parent | 2fd702c0ac170a789af879b8b92a82d4dcc9080c (diff) | |
switch to dtk setup (#2203)
* switch to dtk setup
* some cleanup / fixes
* cleanup d_a_alink literals
* Restore doxygen, update CI & README.md (#1)
* Fix build image ref (#2)
---------
Co-authored-by: Luke Street <luke@street.dev>
Diffstat (limited to 'src/d/d_particle.cpp')
| -rw-r--r-- | src/d/d_particle.cpp | 3477 |
1 files changed, 3477 insertions, 0 deletions
diff --git a/src/d/d_particle.cpp b/src/d/d_particle.cpp new file mode 100644 index 0000000000..70b62b9d35 --- /dev/null +++ b/src/d/d_particle.cpp @@ -0,0 +1,3477 @@ +// +// Generated By: dol2asm +// Translation Unit: d/d_particle +// + +#include "d/d_particle.h" +#include "d/d_jnt_col.h" +#include "JSystem/JKernel/JKRExpHeap.h" +#include "JSystem/JKernel/JKRSolidHeap.h" +#include "JSystem/J3DGraphBase/J3DMaterial.h" +#include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h" +#include "JSystem/JParticle/JPAEmitterManager.h" +#include "JSystem/JParticle/JPAResourceManager.h" +#include "JSystem/JMath/JMATrigonometric.h" +#include "stdio.h" +#include "d/d_com_inf_game.h" +#include "dol2asm.h" +#include "m_Do/m_Do_lib.h" +#include "m_Do/m_Do_graphic.h" +#include "f_op/f_op_actor_mng.h" +#include "d/actor/d_a_player.h" +#include "SSystem/SComponent/c_math.h" + +// +// Forward References: +// + +extern "C" static void dPa_cleanupGX__Fv(); +extern "C" void __ct__19dPa_followEcallBackFUcUc(); +extern "C" void execute__19dPa_followEcallBackFP14JPABaseEmitter(); +extern "C" void draw__19dPa_followEcallBackFP14JPABaseEmitter(); +extern "C" void setup__19dPa_followEcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc(); +extern "C" void end__19dPa_followEcallBackFv(); +extern "C" void setup__19dPa_light8EcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc(); +extern "C" void setup__25dPa_gen_b_light8EcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc(); +extern "C" void setup__25dPa_gen_d_light8EcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc(); +extern "C" static void dPa_group_id_change__FPUlPUc(); +extern "C" static void initiateLighting8__FR8_GXColors(); +extern "C" static void initiate_b_Lighting8__FR8_GXColor(); +extern "C" static void drawFirst__FP14JPABaseEmitter(); +extern "C" static void drawFirst_l8__FP14JPABaseEmitter(); +extern "C" static void drawSecond_light8__FP14JPABaseEmitter(); +extern "C" static void drawSecond_b_light8__FP14JPABaseEmitter(); +extern "C" static void static_light8EcallBack__FP14JPABaseEmitter(); +extern "C" static void static_gen_b_light8EcallBack__FP14JPABaseEmitter(); +extern "C" static void static_gen_d_light8EcallBack__FP14JPABaseEmitter(); +extern "C" void draw__19dPa_light8EcallBackFP14JPABaseEmitter(); +extern "C" void draw__25dPa_gen_b_light8EcallBackFP14JPABaseEmitter(); +extern "C" void draw__25dPa_gen_d_light8EcallBackFP14JPABaseEmitter(); +extern "C" static void dPa_setWindPower__FP15JPABaseParticle(); +extern "C" void draw__18dPa_modelPcallBackFP14JPABaseEmitterP15JPABaseParticle(); +extern "C" void set__Q218dPa_modelEcallBack7model_cFP12J3DModelDataRC12dKy_tevstr_cUcPvUcUc(); +extern "C" void setup__Q218dPa_modelEcallBack7model_cFv(); +extern "C" void cleanup__Q218dPa_modelEcallBack7model_cFv(); +extern "C" void draw__Q218dPa_modelEcallBack7model_cFPA4_f(); +extern "C" void draw__18dPa_modelEcallBackFP14JPABaseEmitter(); +extern "C" void setup__18dPa_modelEcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc(); +extern "C" void create__18dPa_modelEcallBackFUc(); +extern "C" void __dt__Q218dPa_modelEcallBack7model_cFv(); +extern "C" void remove__18dPa_modelEcallBackFv(); +extern "C" void +setModel__18dPa_modelEcallBackFP14JPABaseEmitterP12J3DModelDataRC12dKy_tevstr_cUcPvUcUc(); +extern "C" void resetModel__18dPa_modelEcallBackFP14JPABaseEmitter(); +extern "C" void setupModel__18dPa_modelEcallBackFP14JPABaseEmitter(); +extern "C" void drawModel__18dPa_modelEcallBackFP14JPABaseEmitterPA4_f(); +extern "C" void cleanupModel__18dPa_modelEcallBackFP14JPABaseEmitter(); +extern "C" void getModel__18dPa_modelEcallBackFP14JPABaseEmitter(); +extern "C" void getRotAxis__18dPa_modelEcallBackFP14JPABaseEmitter(); +extern "C" void draw__22dPa_selectTexEcallBackFP14JPABaseEmitter(); +extern "C" void __ct__19dPa_simpleEcallBackFv(); +extern "C" void executeAfter__19dPa_simpleEcallBackFP14JPABaseEmitter(); +extern "C" void draw__19dPa_simpleEcallBackFP14JPABaseEmitter(); +extern "C" void create__19dPa_simpleEcallBackFP17JPAEmitterManagerUsUc(); +extern "C" void __dt__16dPa_simpleData_cFv(); +extern "C" void __ct__16dPa_simpleData_cFv(); +extern "C" void createEmitter__19dPa_simpleEcallBackFP17JPAEmitterManager(); +extern "C" void set__19dPa_simpleEcallBackFPC4cXyzPC12dKy_tevstr_cUcRC8_GXColorRC8_GXColorif(); +extern "C" void execute__17dPa_windPcallBackFP14JPABaseEmitterP15JPABaseParticle(); +extern "C" void onActive__Q313dPa_control_c7level_c9emitter_cFv(); +extern "C" void +entry__Q313dPa_control_c7level_c9emitter_cFUlUsP14JPABaseEmitterP18dPa_levelEcallBack(); +extern "C" void cleanup__Q313dPa_control_c7level_c9emitter_cFv(); +extern "C" void __ct__Q213dPa_control_c7level_cFv(); +extern "C" void execute__Q213dPa_control_c7level_cFPQ313dPa_control_c7level_c9emitter_c(); +extern "C" void execute__Q213dPa_control_c7level_cFv(); +extern "C" void cleanup__Q213dPa_control_c7level_cFv(); +extern "C" void get__Q213dPa_control_c7level_cFUl(); +extern "C" void forceOnEventMove__Q213dPa_control_c7level_cFUl(); +extern "C" void allForceOnEventMove__Q213dPa_control_c7level_cFv(); +extern "C" void getEmitter__Q213dPa_control_c7level_cFUl(); +extern "C" void entry__Q213dPa_control_c7level_cFUsP14JPABaseEmitterP18dPa_levelEcallBack(); +extern "C" void addTable__Q213dPa_control_c7level_cFPQ313dPa_control_c7level_c9emitter_c(); +extern "C" void cutTable__Q213dPa_control_c7level_cFPQ313dPa_control_c7level_c9emitter_c(); +extern "C" void __ct__13dPa_control_cFv(); +extern "C" void getRM_ID__13dPa_control_cFUs(); +extern "C" void createCommon__13dPa_control_cFPCv(); +extern "C" void createRoomScene__13dPa_control_cFv(); +extern "C" void readScene__13dPa_control_cFUcPP21mDoDvdThd_toMainRam_c(); +extern "C" void createScene__13dPa_control_cFPCv(); +extern "C" void removeRoomScene__13dPa_control_cFb(); +extern "C" void removeScene__13dPa_control_cFb(); +extern "C" void cleanup__13dPa_control_cFv(); +extern "C" void calc3D__13dPa_control_cFv(); +extern "C" void calc2D__13dPa_control_cFv(); +extern "C" void calcMenu__13dPa_control_cFv(); +extern "C" void draw__13dPa_control_cFP11JPADrawInfoUc(); +extern "C" void setHitMark__13dPa_control_cFUsP10fopAc_ac_cPC4cXyzPC5csXyzPC4cXyzUl(); +extern "C" void +setWaterRipple__13dPa_control_cFPUlR13cBgS_PolyInfoPC4cXyzfPC12dKy_tevstr_cPC4cXyzSc(); +extern "C" void +set__13dPa_control_cFUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf(); +extern "C" void getPolyColor__13dPa_control_cFR13cBgS_PolyInfoiP8_GXColorP8_GXColorPUcPf(); +extern "C" void +setPoly__13dPa_control_cFUsR13cBgS_PolyInfoPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyziP18dPa_levelEcallBackScPC4cXyz(); +extern "C" void newSimple__13dPa_control_cFUsUcPUl(); +extern "C" void setSimple__13dPa_control_cFUsPC4cXyzPC12dKy_tevstr_cUcRC8_GXColorRC8_GXColorif(); +extern "C" void getSimple__13dPa_control_cFUs(); +extern "C" static void +dPa_kankyocolor_set__FfP14JPABaseEmitterPC12dKy_tevstr_cUlPC4cXyzPC8_GXColorPC8_GXColor(); +extern "C" void +set__13dPa_control_cFUlUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf(); +extern "C" void +setPoly__13dPa_control_cFUlUsR13cBgS_PolyInfoPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyziP18dPa_levelEcallBackScPC4cXyz(); +extern "C" void setStopContinue__13dPa_control_cFUl(); +extern "C" void +setSimpleFoot__13dPa_control_cFUlPUlR13cBgS_PolyInfoPC4cXyzPC12dKy_tevstr_ciPC5csXyzPC4cXyzP18dPa_levelEcallBackScPC4cXyz(); +extern "C" void +setCommonPoly__13dPa_control_cFPUlP13cBgS_PolyInfoPC4cXyzPC4cXyzPC12dKy_tevstr_cUlUlPC5csXyzPC4cXyzSc(); +extern "C" void execute__17dPa_wbPcallBack_cFP14JPABaseEmitterP15JPABaseParticle(); +extern "C" void execute__19dPa_fsenthPcallBackFP14JPABaseEmitterP15JPABaseParticle(); +extern "C" void draw__19dPa_fsenthPcallBackFP14JPABaseEmitterP15JPABaseParticle(); +extern "C" void execute__19dPa_light8PcallBackFP14JPABaseEmitterP15JPABaseParticle(); +extern "C" void execute__25dPa_gen_b_light8PcallBackFP14JPABaseEmitterP15JPABaseParticle(); +extern "C" void execute__25dPa_gen_d_light8PcallBackFP14JPABaseEmitterP15JPABaseParticle(); +extern "C" void draw__19dPa_light8PcallBackFP14JPABaseEmitterP15JPABaseParticle(); +extern "C" void draw__25dPa_gen_b_light8PcallBackFP14JPABaseEmitterP15JPABaseParticle(); +extern "C" void draw__25dPa_gen_d_light8PcallBackFP14JPABaseEmitterP15JPABaseParticle(); +extern "C" void setOldPosP__22dPa_hermiteEcallBack_cFPC4cXyzPC4cXyz(); +extern "C" void executeAfter__22dPa_hermiteEcallBack_cFP14JPABaseEmitter(); +extern "C" void setup__22dPa_hermiteEcallBack_cFP14JPABaseEmitterPC4cXyzPC5csXyzSc(); +extern "C" void execute__28dPa_particleTracePcallBack_cFP14JPABaseEmitterP15JPABaseParticle(); +extern "C" void __dt__18dPa_levelEcallBackFv(); +extern "C" void cleanup__18dPa_levelEcallBackFv(); +extern "C" void __ct__Q218dPa_modelEcallBack7model_cFv(); +extern "C" void __ct__Q313dPa_control_c7level_c9emitter_cFv(); +extern "C" void __dt__19dPa_simpleEcallBackFv(); +extern "C" void __dt__28dPa_particleTracePcallBack_cFv(); +extern "C" void __dt__22dPa_hermiteEcallBack_cFv(); +extern "C" void __dt__25dPa_gen_d_light8PcallBackFv(); +extern "C" void __dt__25dPa_gen_b_light8PcallBackFv(); +extern "C" void __dt__19dPa_light8PcallBackFv(); +extern "C" void __dt__19dPa_fsenthPcallBackFv(); +extern "C" void __dt__17dPa_wbPcallBack_cFv(); +extern "C" void __dt__17dPa_windPcallBackFv(); +extern "C" void __dt__22dPa_selectTexEcallBackFv(); +extern "C" void setup__22dPa_selectTexEcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc(); +extern "C" void drawAfter__18dPa_modelEcallBackFP14JPABaseEmitter(); +extern "C" void __dt__18dPa_modelPcallBackFv(); +extern "C" void drawAfter__25dPa_gen_d_light8EcallBackFP14JPABaseEmitter(); +extern "C" void __dt__25dPa_gen_b_light8EcallBackFv(); +extern "C" void drawAfter__25dPa_gen_b_light8EcallBackFP14JPABaseEmitter(); +extern "C" void __dt__19dPa_light8EcallBackFv(); +extern "C" void drawAfter__19dPa_light8EcallBackFP14JPABaseEmitter(); +extern "C" void __dt__19dPa_followEcallBackFv(); +extern "C" void cleanup__19dPa_followEcallBackFv(); +extern "C" void draw__21dPa_setColorEcallBackFP14JPABaseEmitter(); +extern "C" void setup__21dPa_setColorEcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc(); +extern "C" void __dt__21dPa_setColorEcallBackFv(); +extern "C" void execute__18JPAEmitterCallBackFP14JPABaseEmitter(); +extern "C" void draw__18JPAEmitterCallBackFP14JPABaseEmitter(); +extern "C" void drawAfter__18JPAEmitterCallBackFP14JPABaseEmitter(); +extern "C" void executeAfter__18JPAEmitterCallBackFP14JPABaseEmitter(); +extern "C" void __dt__18dPa_modelEcallBackFv(); +extern "C" void __dt__25dPa_gen_d_light8EcallBackFv(); +extern "C" void __sinit_d_particle_cpp(); +extern "C" extern char const* const d_particle_d_particle__stringBase0; +extern "C" u8 mTsubo__13dPa_control_c[64]; +extern "C" u8 mLifeBall__13dPa_control_c[24]; +extern "C" u8 mWindViewMatrix__13dPa_control_c[48]; +extern "C" u8 mEcallback__18dPa_modelEcallBack[4]; +extern "C" u8 mPcallback__18dPa_modelEcallBack[4]; +extern "C" u8 mModel__18dPa_modelEcallBack[4]; +extern "C" u8 mEmitterMng__13dPa_control_c[4]; +extern "C" u8 mWaterBubblePcallBack__13dPa_control_c[4]; +extern "C" u8 mFsenthPcallBack__13dPa_control_c[4]; +extern "C" u8 mLight8EcallBack__13dPa_control_c[4]; +extern "C" u8 mLight8PcallBack__13dPa_control_c[4]; +extern "C" u8 m_b_Light8EcallBack__13dPa_control_c[4]; +extern "C" u8 m_b_Light8PcallBack__13dPa_control_c[4]; +extern "C" u8 m_d_Light8EcallBack__13dPa_control_c[4]; +extern "C" u8 m_d_Light8PcallBack__13dPa_control_c[4]; +extern "C" u8 mParticleTracePCB__13dPa_control_c[4 + 4 /* padding */]; +extern "C" u8 mStatus__13dPa_control_c; + +static void initiateLighting8(_GXColor& param_0, s16 param_1); +static void drawSecond_light8(JPABaseEmitter* param_0); + +// +// External References: +// + +extern "C" void mDoExt_getArchiveHeap__Fv(); +extern "C" void mDoExt_createSolidHeapFromGame__FUlUl(); +extern "C" void mDoExt_createSolidHeapFromSystem__FUlUl(); +extern "C" void mDoExt_adjustSolidHeap__FP12JKRSolidHeap(); +extern "C" void mDoExt_destroySolidHeap__FP12JKRSolidHeap(); +extern "C" void mDoExt_setCurrentHeap__FP7JKRHeap(); +extern "C" void create__21mDoDvdThd_toMainRam_cFPCcUcP7JKRHeap(); +extern "C" void execute__19JPAParticleCallBackFP14JPABaseEmitterP15JPABaseParticle(); +extern "C" void draw__19JPAParticleCallBackFP14JPABaseEmitterP15JPABaseParticle(); +extern "C" void __ct__11J3DLightObjFv(); +extern "C" void waterCheck__11fopAcM_wt_cFPC4cXyz(); +extern "C" void getHitmarkPosAndAngle__9dJntCol_cCFPC4cXyzPC5csXyzP4cXyzP5csXyzi(); +extern "C" void dKyw_get_AllWind_vec__FP4cXyzP4cXyzPf(); +extern "C" void ChkPolySafe__4cBgSFRC13cBgS_PolyInfo(); +extern "C" void GetTriPla__4cBgSCFRC13cBgS_PolyInfoP8cM3dGPla(); +extern "C" void GetPolyAtt0__4dBgSFRC13cBgS_PolyInfo(); +extern "C" void checkNowWolfEyeUp__9daPy_py_cFv(); +extern "C" void dKy_light_influence_col__FP8_GXColorf(); +extern "C" void dKy_setLight_nowroom__Fc(); +extern "C" void dKy_setLight_nowroom_grass__Fcf(); +extern "C" void dKy_setLight_again__Fv(); +extern "C" void dKy_Global_amb_set__FP12dKy_tevstr_c(); +extern "C" void dKy_SordFlush_set__F4cXyzi(); +extern "C" void dKy_GxFog_set__Fv(); +extern "C" void dKy_GxFog_tevstr_set__FP12dKy_tevstr_c(); +extern "C" void +dKy_ParticleColor_get_actor__FP4cXyzP12dKy_tevstr_cP8_GXColorP8_GXColorP8_GXColorP8_GXColorf(); +extern "C" void +dKy_ParticleColor_get_bg__FP4cXyzP12dKy_tevstr_cP8_GXColorP8_GXColorP8_GXColorP8_GXColorf(); +extern "C" void dKy_camera_water_in_status_check__Fv(); +extern "C" void dKy_pol_efftype_get__FPC13cBgS_PolyInfo(); +extern "C" void dKy_pol_efftype2_get__FPC13cBgS_PolyInfo(); +extern "C" void dKy_pol_eff_prim_get__FPC13cBgS_PolyInfoP8_GXColor(); +extern "C" void dKy_pol_eff_env_get__FPC13cBgS_PolyInfoP8_GXColor(); +extern "C" void dKy_pol_eff2_prim_get__FPC13cBgS_PolyInfoP8_GXColor(); +extern "C" void dKy_pol_eff2_env_get__FPC13cBgS_PolyInfoP8_GXColor(); +extern "C" void dKy_pol_eff_alpha_get__FPC13cBgS_PolyInfo(); +extern "C" void dKy_pol_eff_ratio_get__FPC13cBgS_PolyInfo(); +extern "C" void dKy_pol_eff2_alpha_get__FPC13cBgS_PolyInfo(); +extern "C" void dKy_pol_eff2_ratio_get__FPC13cBgS_PolyInfo(); +extern "C" void __ml__4cXyzCFf(); +extern "C" void atan2sX_Z__4cXyzCFv(); +extern "C" void cM_atan2s__Fff(); +extern "C" void cLib_chaseS__FPsss(); +extern "C" void clip__11J3DUClipperCFPA4_Cf3Vecf(); +extern "C" void __ct__18JPAResourceManagerFPCvP7JKRHeap(); +extern "C" void checkUserIndexDuplication__18JPAResourceManagerCFUs(); +extern "C" void swapTexture__18JPAResourceManagerFPC7ResTIMGPCc(); +extern "C" void getResUserWork__18JPAResourceManagerCFUs(); +extern "C" void __ct__17JPAEmitterManagerFUlUlP7JKRHeapUcUc(); +extern "C" void func_8027DEBC(); +extern "C" void calc__17JPAEmitterManagerFUc(); +extern "C" void draw__17JPAEmitterManagerFPC11JPADrawInfoUc(); +extern "C" void forceDeleteAllEmitter__17JPAEmitterManagerFv(); +extern "C" void entryResourceManager__17JPAEmitterManagerFP18JPAResourceManagerUc(); +extern "C" void clearResourceManager__17JPAEmitterManagerFUc(); +extern "C" void __dt__18JPAEmitterCallBackFv(); +extern "C" void createParticle__14JPABaseEmitterFv(); +extern "C" void getCurrentCreateNumber__14JPABaseEmitterCFv(); +extern "C" void getDrawCount__14JPABaseEmitterCFv(); +extern "C" void loadTexture__14JPABaseEmitterFUc11_GXTexMapID(); +extern "C" void __dt__19JPAParticleCallBackFv(); +extern "C" void getWidth__15JPABaseParticleCFPC14JPABaseEmitter(); +extern "C" void getHeight__15JPABaseParticleCFPC14JPABaseEmitter(); +extern "C" void JPAGetXYZRotateMtx__FsssPA4_f(); +extern "C" void free__7JKRHeapFPvP7JKRHeap(); +extern "C" void* __nw__FUlP7JKRHeapi(); +extern "C" void* __nwa__FUl(); +extern "C" void __dl__FPv(); +extern "C" void create__10JKRExpHeapFUlP7JKRHeapb(); +extern "C" void reinitGX__6J3DSysFv(); +extern "C" void loadGX__10J3DTextureCFUs11_GXTexMapID(); +extern "C" void loadPreDrawSetting__8J3DShapeCFv(); +extern "C" void __as__12J3DLightInfoFRC12J3DLightInfo(); +extern "C" void syncJ3DSysPointers__12J3DModelDataCFv(); +extern "C" void syncJ3DSysFlags__12J3DModelDataCFv(); +extern "C" void searchUpdateMaterialID__16J3DAnmTexPatternFP12J3DModelData(); +extern "C" void searchUpdateMaterialID__15J3DAnmTevRegKeyFP12J3DModelData(); +extern "C" void removeTexNoAnimator__16J3DMaterialTableFP16J3DAnmTexPattern(); +extern "C" void removeTevRegAnimator__16J3DMaterialTableFP15J3DAnmTevRegKey(); +extern "C" void entryTexNoAnimator__16J3DMaterialTableFP16J3DAnmTexPattern(); +extern "C" void entryTevRegAnimator__16J3DMaterialTableFP15J3DAnmTevRegKey(); +extern "C" void GXInvalidateVtxCache(); +extern "C" void GXFlush(); +extern "C" void __register_global_object(); +extern "C" void __destroy_new_array(); +extern "C" void __construct_array(); +extern "C" void __construct_new_array(); +extern "C" void _savegpr_14(); +extern "C" void _savegpr_17(); +extern "C" void _savegpr_19(); +extern "C" void _savegpr_20(); +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_14(); +extern "C" void _restgpr_17(); +extern "C" void _restgpr_19(); +extern "C" void _restgpr_20(); +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__19JPAParticleCallBack[5]; +extern "C" extern void* __vt__8cM3dGPla[3]; +extern "C" u8 j_o_id__8dPa_name[10 + 2 /* padding */]; +extern "C" u8 s_o_id__8dPa_name[28]; +extern "C" u8 mClipper__14mDoLib_clipper[92]; +extern "C" u8 sincosTable___5JMath[65536]; +extern "C" u8 mFrameBufferTimg__13mDoGph_gInf_c[4]; +extern "C" extern u8 JPTracePCB4[4]; +extern "C" f32 mWaterY__11fopAcM_wt_c[1 + 1 /* padding */]; +extern "C" u8 sOldVcdVatCmd__8J3DShape[4]; + +// +// Declarations: +// + +/* 80049420-80049580 043D60 0160+00 4/4 0/0 0/0 .text dPa_cleanupGX__Fv */ +static void dPa_cleanupGX() { + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXEnableTexOffsets(GX_TEXCOORD0, GX_ENABLE, GX_ENABLE); + GXEnableTexOffsets(GX_TEXCOORD1, GX_ENABLE, GX_ENABLE); + GXEnableTexOffsets(GX_TEXCOORD2, GX_ENABLE, GX_ENABLE); + GXSetCullMode(GX_CULL_NONE); + GXSetCoPlanar(GX_FALSE); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_INDEX8); + GXSetVtxDesc(GX_VA_TEX0, GX_INDEX8); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_RGB8, 0); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGB8, 0); + GXSetVtxAttrFmt(GX_VTXFMT1, GX_VA_POS, GX_CLR_RGBA, GX_F32, 0); + GXSetVtxAttrFmt(GX_VTXFMT1, GX_VA_TEX0, GX_CLR_RGBA, GX_F32, 0); + GXSetCurrentMtx(0); + GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, GX_LIGHT_NULL, GX_DF_NONE, + GX_AF_NONE); + GXSetChanCtrl(GX_COLOR1A1, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, GX_LIGHT_NULL, GX_DF_NONE, + GX_AF_NONE); + GXSetNumChans(0); +} + +/* ############################################################################################## */ +/* 803A8308-803A8314 005428 000C+00 1/1 0/0 0/0 .data l_lifeBallColor */ +SECTION_DATA static u8 l_lifeBallColor[12] = { + 0xEB, 0x20, 0x78, 0xFF, 0x20, 0xF1, 0x9B, 0xFF, 0xEB, 0xD7, 0x2F, 0xFF, +}; + +/* 803A8314-803A832C 005434 0018+00 1/1 0/0 0/0 .data effectIDTable$5499 */ +SECTION_DATA static u16 effectIDTable[6][2] = { + {0xE6, 0xE7}, {0x143, 0x146}, {0x1AF, 0x1B8}, + {0x881B, 0x881E}, {0x881C, 0x881F}, {0x86AE, 0x86AF}, +}; + +/* 803A832C-803A835C 00544C 0030+00 1/1 0/0 0/0 .data ringID$5531 */ +SECTION_DATA static u16 ringID[6][4] = { + {0x00E7, 0xFFFF, 0xFFFF, 0xFFFF}, {0x0146, 0xFFFF, 0xFFFF, 0xFFFF}, + {0x01AF, 0x01B0, 0x01B1, 0xFFFF}, {0x881E, 0xFFFF, 0xFFFF, 0xFFFF}, + {0x881F, 0x8820, 0xFFFF, 0xFFFF}, {0x86AF, 0xFFFF, 0xFFFF, 0xFFFF}, +}; + +/* 803A835C-803A838C 00547C 0030+00 1/1 0/0 0/0 .data normalID$5532 */ +SECTION_DATA static u16 normalID[6][4] = { + {0x00E6, 0xFFFF, 0xFFFF, 0xFFFF}, {0x0143, 0xFFFF, 0xFFFF, 0xFFFF}, + {0x01B8, 0x01B9, 0x01BA, 0x01BB}, {0x881B, 0xFFFF, 0xFFFF, 0xFFFF}, + {0x881C, 0x881D, 0xFFFF, 0xFFFF}, {0x86AE, 0xFFFF, 0xFFFF, 0xFFFF}, +}; + +/* 803A838C-803A83A0 0054AC 0014+00 1/2 0/0 0/0 .data __vt__28dPa_particleTracePcallBack_c */ +SECTION_DATA extern void* __vt__28dPa_particleTracePcallBack_c[5] = { + (void*)NULL /* RTTI */, + (void*)NULL, + (void*)__dt__28dPa_particleTracePcallBack_cFv, + (void*)execute__28dPa_particleTracePcallBack_cFP14JPABaseEmitterP15JPABaseParticle, + (void*)draw__19JPAParticleCallBackFP14JPABaseEmitterP15JPABaseParticle, +}; + +/* 803A83A0-803A83C4 0054C0 0024+00 1/1 2/2 3/3 .data __vt__22dPa_hermiteEcallBack_c */ +SECTION_DATA extern void* __vt__22dPa_hermiteEcallBack_c[9] = { + (void*)NULL /* RTTI */, + (void*)NULL, + (void*)__dt__22dPa_hermiteEcallBack_cFv, + (void*)execute__18JPAEmitterCallBackFP14JPABaseEmitter, + (void*)executeAfter__22dPa_hermiteEcallBack_cFP14JPABaseEmitter, + (void*)draw__18JPAEmitterCallBackFP14JPABaseEmitter, + (void*)drawAfter__18JPAEmitterCallBackFP14JPABaseEmitter, + (void*)setup__22dPa_hermiteEcallBack_cFP14JPABaseEmitterPC4cXyzPC5csXyzSc, + (void*)cleanup__18dPa_levelEcallBackFv, +}; + +/* 803A83C4-803A83D8 0054E4 0014+00 1/2 0/0 0/0 .data __vt__25dPa_gen_d_light8PcallBack + */ +SECTION_DATA extern void* __vt__25dPa_gen_d_light8PcallBack[5] = { + (void*)NULL /* RTTI */, + (void*)NULL, + (void*)__dt__25dPa_gen_d_light8PcallBackFv, + (void*)execute__25dPa_gen_d_light8PcallBackFP14JPABaseEmitterP15JPABaseParticle, + (void*)draw__25dPa_gen_d_light8PcallBackFP14JPABaseEmitterP15JPABaseParticle, +}; + +/* 803A83D8-803A83EC 0054F8 0014+00 1/2 0/0 0/0 .data __vt__25dPa_gen_b_light8PcallBack + */ +SECTION_DATA extern void* __vt__25dPa_gen_b_light8PcallBack[5] = { + (void*)NULL /* RTTI */, + (void*)NULL, + (void*)__dt__25dPa_gen_b_light8PcallBackFv, + (void*)execute__25dPa_gen_b_light8PcallBackFP14JPABaseEmitterP15JPABaseParticle, + (void*)draw__25dPa_gen_b_light8PcallBackFP14JPABaseEmitterP15JPABaseParticle, +}; + +/* 803A83EC-803A8400 00550C 0014+00 1/2 0/0 0/0 .data __vt__19dPa_light8PcallBack */ +SECTION_DATA extern void* __vt__19dPa_light8PcallBack[5] = { + (void*)NULL /* RTTI */, + (void*)NULL, + (void*)__dt__19dPa_light8PcallBackFv, + (void*)execute__19dPa_light8PcallBackFP14JPABaseEmitterP15JPABaseParticle, + (void*)draw__19dPa_light8PcallBackFP14JPABaseEmitterP15JPABaseParticle, +}; + +/* 803A8400-803A8414 005520 0014+00 1/2 0/0 0/0 .data __vt__19dPa_fsenthPcallBack */ +SECTION_DATA extern void* __vt__19dPa_fsenthPcallBack[5] = { + (void*)NULL /* RTTI */, + (void*)NULL, + (void*)__dt__19dPa_fsenthPcallBackFv, + (void*)execute__19dPa_fsenthPcallBackFP14JPABaseEmitterP15JPABaseParticle, + (void*)draw__19dPa_fsenthPcallBackFP14JPABaseEmitterP15JPABaseParticle, +}; + +/* 803A8414-803A8434 005534 0014+0C 1/2 0/0 0/0 .data __vt__17dPa_wbPcallBack_c */ +SECTION_DATA extern void* __vt__17dPa_wbPcallBack_c[5 + 3 /* padding */] = { + (void*)NULL /* RTTI */, + (void*)NULL, + (void*)__dt__17dPa_wbPcallBack_cFv, + (void*)execute__17dPa_wbPcallBack_cFP14JPABaseEmitterP15JPABaseParticle, + (void*)draw__19JPAParticleCallBackFP14JPABaseEmitterP15JPABaseParticle, + /* padding */ + NULL, + NULL, + NULL, +}; + +/* 803A8434-803A8448 005554 0014+00 1/1 0/0 0/0 .data __vt__17dPa_windPcallBack */ +SECTION_DATA extern void* __vt__17dPa_windPcallBack[5] = { + (void*)NULL /* RTTI */, + (void*)NULL, + (void*)__dt__17dPa_windPcallBackFv, + (void*)execute__17dPa_windPcallBackFP14JPABaseEmitterP15JPABaseParticle, + (void*)draw__19JPAParticleCallBackFP14JPABaseEmitterP15JPABaseParticle, +}; + +/* 803A8448-803A8464 005568 001C+00 2/2 0/0 0/0 .data __vt__19dPa_simpleEcallBack */ +SECTION_DATA extern void* __vt__19dPa_simpleEcallBack[7] = { + (void*)NULL /* RTTI */, + (void*)NULL, + (void*)__dt__19dPa_simpleEcallBackFv, + (void*)execute__18JPAEmitterCallBackFP14JPABaseEmitter, + (void*)executeAfter__19dPa_simpleEcallBackFP14JPABaseEmitter, + (void*)draw__19dPa_simpleEcallBackFP14JPABaseEmitter, + (void*)drawAfter__18JPAEmitterCallBackFP14JPABaseEmitter, +}; + +/* 803A8464-803A8488 005584 0024+00 1/2 0/0 0/0 .data __vt__22dPa_selectTexEcallBack */ +SECTION_DATA extern void* __vt__22dPa_selectTexEcallBack[9] = { + (void*)NULL /* RTTI */, + (void*)NULL, + (void*)__dt__22dPa_selectTexEcallBackFv, + (void*)execute__18JPAEmitterCallBackFP14JPABaseEmitter, + (void*)executeAfter__18JPAEmitterCallBackFP14JPABaseEmitter, + (void*)draw__22dPa_selectTexEcallBackFP14JPABaseEmitter, + (void*)drawAfter__18JPAEmitterCallBackFP14JPABaseEmitter, + (void*)setup__22dPa_selectTexEcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc, + (void*)cleanup__18dPa_levelEcallBackFv, +}; + +/* 803A8488-803A84AC 0055A8 0024+00 1/2 0/0 0/0 .data __vt__18dPa_modelEcallBack */ +SECTION_DATA extern void* __vt__18dPa_modelEcallBack[9] = { + (void*)NULL /* RTTI */, + (void*)NULL, + (void*)__dt__18dPa_modelEcallBackFv, + (void*)execute__18JPAEmitterCallBackFP14JPABaseEmitter, + (void*)executeAfter__18JPAEmitterCallBackFP14JPABaseEmitter, + (void*)draw__18dPa_modelEcallBackFP14JPABaseEmitter, + (void*)drawAfter__18dPa_modelEcallBackFP14JPABaseEmitter, + (void*)setup__18dPa_modelEcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc, + (void*)cleanup__18dPa_levelEcallBackFv, +}; + +/* 803A84AC-803A84C0 0055CC 0014+00 1/2 0/0 0/0 .data __vt__18dPa_modelPcallBack */ +SECTION_DATA extern void* __vt__18dPa_modelPcallBack[5] = { + (void*)NULL /* RTTI */, + (void*)NULL, + (void*)__dt__18dPa_modelPcallBackFv, + (void*)execute__19JPAParticleCallBackFP14JPABaseEmitterP15JPABaseParticle, + (void*)draw__18dPa_modelPcallBackFP14JPABaseEmitterP15JPABaseParticle, +}; + +/* 803A84C0-803A84E4 0055E0 0024+00 1/2 0/0 0/0 .data __vt__25dPa_gen_d_light8EcallBack + */ +SECTION_DATA extern void* __vt__25dPa_gen_d_light8EcallBack[9] = { + (void*)NULL /* RTTI */, + (void*)NULL, + (void*)__dt__25dPa_gen_d_light8EcallBackFv, + (void*)execute__18JPAEmitterCallBackFP14JPABaseEmitter, + (void*)executeAfter__18JPAEmitterCallBackFP14JPABaseEmitter, + (void*)draw__25dPa_gen_d_light8EcallBackFP14JPABaseEmitter, + (void*)drawAfter__25dPa_gen_d_light8EcallBackFP14JPABaseEmitter, + (void*)setup__25dPa_gen_d_light8EcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc, + (void*)cleanup__18dPa_levelEcallBackFv, +}; + +/* 803A84E4-803A8508 005604 0024+00 1/2 0/0 0/0 .data __vt__25dPa_gen_b_light8EcallBack + */ +SECTION_DATA extern void* __vt__25dPa_gen_b_light8EcallBack[9] = { + (void*)NULL /* RTTI */, + (void*)NULL, + (void*)__dt__25dPa_gen_b_light8EcallBackFv, + (void*)execute__18JPAEmitterCallBackFP14JPABaseEmitter, + (void*)executeAfter__18JPAEmitterCallBackFP14JPABaseEmitter, + (void*)draw__25dPa_gen_b_light8EcallBackFP14JPABaseEmitter, + (void*)drawAfter__25dPa_gen_b_light8EcallBackFP14JPABaseEmitter, + (void*)setup__25dPa_gen_b_light8EcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc, + (void*)cleanup__18dPa_levelEcallBackFv, +}; + +/* 803A8508-803A852C 005628 0024+00 1/2 0/0 0/0 .data __vt__19dPa_light8EcallBack */ +SECTION_DATA extern void* __vt__19dPa_light8EcallBack[9] = { + (void*)NULL /* RTTI */, + (void*)NULL, + (void*)__dt__19dPa_light8EcallBackFv, + (void*)execute__18JPAEmitterCallBackFP14JPABaseEmitter, + (void*)executeAfter__18JPAEmitterCallBackFP14JPABaseEmitter, + (void*)draw__19dPa_light8EcallBackFP14JPABaseEmitter, + (void*)drawAfter__19dPa_light8EcallBackFP14JPABaseEmitter, + (void*)setup__19dPa_light8EcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc, + (void*)cleanup__18dPa_levelEcallBackFv, +}; + +/* 803A852C-803A8554 00564C 0028+00 2/2 0/0 6/6 .data __vt__19dPa_followEcallBack */ +SECTION_DATA extern void* __vt__19dPa_followEcallBack[10] = { + (void*)NULL /* RTTI */, + (void*)NULL, + (void*)__dt__19dPa_followEcallBackFv, + (void*)execute__19dPa_followEcallBackFP14JPABaseEmitter, + (void*)executeAfter__18JPAEmitterCallBackFP14JPABaseEmitter, + (void*)draw__19dPa_followEcallBackFP14JPABaseEmitter, + (void*)drawAfter__18JPAEmitterCallBackFP14JPABaseEmitter, + (void*)setup__19dPa_followEcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc, + (void*)cleanup__19dPa_followEcallBackFv, + (void*)end__19dPa_followEcallBackFv, +}; + +/* 803A8554-803A8578 005674 0024+00 11/11 2/2 0/0 .data __vt__18dPa_levelEcallBack */ +SECTION_DATA extern void* __vt__18dPa_levelEcallBack[9] = { + (void*)NULL /* RTTI */, + (void*)NULL, + (void*)__dt__18dPa_levelEcallBackFv, + (void*)execute__18JPAEmitterCallBackFP14JPABaseEmitter, + (void*)executeAfter__18JPAEmitterCallBackFP14JPABaseEmitter, + (void*)draw__18JPAEmitterCallBackFP14JPABaseEmitter, + (void*)drawAfter__18JPAEmitterCallBackFP14JPABaseEmitter, + (void*)NULL, + (void*)cleanup__18dPa_levelEcallBackFv, +}; + +/* 803A8578-803A8594 005698 001C+00 3/3 3/3 0/0 .data __vt__18JPAEmitterCallBack */ +SECTION_DATA extern void* __vt__18JPAEmitterCallBack[7] = { + (void*)NULL /* RTTI */, + (void*)NULL, + (void*)NULL, + (void*)execute__18JPAEmitterCallBackFP14JPABaseEmitter, + (void*)executeAfter__18JPAEmitterCallBackFP14JPABaseEmitter, + (void*)draw__18JPAEmitterCallBackFP14JPABaseEmitter, + (void*)drawAfter__18JPAEmitterCallBackFP14JPABaseEmitter, +}; + +/* 80049580-800495BC 043EC0 003C+00 0/0 1/1 8/8 .text __ct__19dPa_followEcallBackFUcUc */ +dPa_followEcallBack::dPa_followEcallBack(u8 param_0, u8 param_1) { + field_0x11 = param_0; + field_0x12 = param_1; + field_0x13 = 0; + mpEmitter = NULL; +} + +/* 800495BC-800496B0 043EFC 00F4+00 1/0 0/0 0/0 .text + * execute__19dPa_followEcallBackFP14JPABaseEmitter */ +void dPa_followEcallBack::execute(JPABaseEmitter* param_0) { + if ((field_0x12 == 0) && ((field_0x10 & 2) == 0)) { + param_0->setGlobalTranslation(field_0x8->x, field_0x8->y, field_0x8->z); + if (field_0xc != NULL) { + JGeometry::TVec3<s16> aTStack_24; + aTStack_24.x = field_0xc->x; + aTStack_24.y = field_0xc->y; + aTStack_24.z = field_0xc->z; + param_0->setGlobalRotation(aTStack_24); + } + } + + if (param_0->isEnableDeleteEmitter()) { + end(); + } + if (isEnd()) { + s16 globalAlpha = param_0->getGlobalAlpha() & 0xff; + cLib_chaseS(&globalAlpha, 1, 4); + param_0->setGlobalAlpha(globalAlpha); + } +} + +/* 800496B0-800496B4 043FF0 0004+00 1/0 0/0 0/0 .text + * draw__19dPa_followEcallBackFP14JPABaseEmitter */ +void dPa_followEcallBack::draw(JPABaseEmitter*) {} + +/* 800496B4-8004974C 043FF4 0098+00 1/0 0/0 0/0 .text + * setup__19dPa_followEcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc */ +void dPa_followEcallBack::setup(JPABaseEmitter* i_emitter, cXyz const* param_1, + csXyz const* param_2, s8) { + remove(); + + if (field_0x13 == 0) { + mpEmitter = i_emitter; + i_emitter->becomeImmortalEmitter(); + } + + if (field_0x12 == 0) { + if (field_0x11 != 0) { + i_emitter->becomeContinuousParticle(); + } + field_0x8 = param_1; + field_0xc = param_2; + field_0x10 = 0; + } +} + +/* 8004974C-8004979C 04408C 0050+00 1/0 0/0 0/0 .text end__19dPa_followEcallBackFv */ +void dPa_followEcallBack::end() { + if (mpEmitter != NULL) { + mpEmitter->becomeInvalidEmitter(); + mpEmitter->quitImmortalEmitter(); + mpEmitter->setEmitterCallBackPtr(NULL); + field_0x10 |= 1; + mpEmitter = NULL; + } +} + +/* ############################################################################################## */ +/* 80450E90-80450E94 000390 0004+00 2/2 1/1 11/11 .sbss mEcallback__18dPa_modelEcallBack + */ +dPa_modelEcallBack* dPa_modelEcallBack::mEcallback; + +/* 80450E94-80450E98 000394 0004+00 2/2 0/0 0/0 .sbss mPcallback__18dPa_modelEcallBack */ +u8 dPa_modelEcallBack::mPcallback[4]; + +/* 80450E98-80450E9C 000398 0004+00 5/5 0/0 0/0 .sbss mModel__18dPa_modelEcallBack */ +dPa_modelEcallBack::model_c* dPa_modelEcallBack::mModel; + +/* 80450E9C-80450EA0 -00001 0004+00 3/3 0/0 0/0 .sbss None */ +/* 80450E9C 0001+00 data_80450E9C None */ +/* 80450E9D 0001+00 data_80450E9D None */ +/* 80450E9E 0002+00 data_80450E9E None */ +static u8 struct_80450E9C; +static u8 struct_80450E9D; +static s8 struct_80450E9E; +static u8 struct_80450E9F; + +/* 80450EA0-80450EA4 0003A0 0004+00 14/14 1/1 0/0 .sbss mEmitterMng__13dPa_control_c */ +JPAEmitterManager* dPa_control_c::mEmitterMng; + +/* 80450EA4-80450EA8 0003A4 0004+00 1/1 1/1 0/0 .sbss mWaterBubblePcallBack__13dPa_control_c */ +u8 dPa_control_c::mWaterBubblePcallBack[4]; + +/* 80450EA8-80450EAC 0003A8 0004+00 3/3 0/0 0/0 .sbss mFsenthPcallBack__13dPa_control_c + */ +u8 dPa_control_c::mFsenthPcallBack[4]; + +/* 80450EAC-80450EB0 0003AC 0004+00 2/2 0/0 1/1 .sbss mLight8EcallBack__13dPa_control_c + */ +u8 dPa_control_c::mLight8EcallBack[4]; + +/* 80450EB0-80450EB4 0003B0 0004+00 2/2 0/0 0/0 .sbss mLight8PcallBack__13dPa_control_c + */ +u8 dPa_control_c::mLight8PcallBack[4]; +//JPAParticleCallBack dPa_control_c::mLight8PcallBack; + +/* 8004979C-800497B0 0440DC 0014+00 1/0 0/0 0/0 .text + * setup__19dPa_light8EcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc */ +// +void dPa_light8EcallBack::setup(JPABaseEmitter* param_0, cXyz const* param_1, + csXyz const* param_2, s8 param_3) { + param_0->setDrawTimes(2); + param_0->setParticleCallBackPtr(dPa_control_c::getLight8PcallBack()); +} + +/* ############################################################################################## */ +/* 80450EB4-80450EB8 0003B4 0004+00 3/3 0/0 0/0 .sbss m_b_Light8EcallBack__13dPa_control_c */ +u8 dPa_control_c::m_b_Light8EcallBack[4]; + +/* 80450EB8-80450EBC 0003B8 0004+00 2/2 0/0 0/0 .sbss m_b_Light8PcallBack__13dPa_control_c */ +u8 dPa_control_c::m_b_Light8PcallBack[4]; +//JPAParticleCallBack dPa_control_c::m_b_Light8PcallBack; + +/* 800497B0-800497CC 0440F0 001C+00 1/0 0/0 0/0 .text + * setup__25dPa_gen_b_light8EcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc */ +void dPa_gen_b_light8EcallBack::setup(JPABaseEmitter* param_0, cXyz const* param_1, + csXyz const* param_2, s8 param_3) { + param_0->setDrawTimes(2); + param_0->setParticleCallBackPtr(dPa_control_c::getGen_b_Light8PcallBack()); + param_0->setUserWork(param_3); +} + +/* ############################################################################################## */ +/* 80450EBC-80450EC0 0003BC 0004+00 3/3 0/0 0/0 .sbss m_d_Light8EcallBack__13dPa_control_c */ +u8 dPa_control_c::m_d_Light8EcallBack[4]; + +/* 80450EC0-80450EC4 0003C0 0004+00 2/2 0/0 0/0 .sbss m_d_Light8PcallBack__13dPa_control_c */ +u8 dPa_control_c::m_d_Light8PcallBack[4]; + +/* 800497CC-800497E8 04410C 001C+00 1/0 0/0 0/0 .text + * setup__25dPa_gen_d_light8EcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc */ +void dPa_gen_d_light8EcallBack::setup(JPABaseEmitter* param_0, cXyz const* param_1, + csXyz const* param_2, s8 param_3) { + param_0->setDrawTimes(2); + param_0->setParticleCallBackPtr(dPa_control_c::getGen_d_Light8PcallBack()); + param_0->setUserWork(param_3); +} + +/* 800497E8-80049934 044128 014C+00 3/3 0/0 0/0 .text dPa_group_id_change__FPUlPUc */ +static void dPa_group_id_change(u32* param_0, u8* param_1) { + if (*param_1 >= 15) { + return; + } + + if (*param_0 & 1) { + param_1[0] = 0; + } else if (*param_0 & 2) { + param_1[0] = 1; + } else if (*param_0 & 4) { + param_1[0] = 2; + } else if (*param_0 & 8) { + param_1[0] = 3; + } else if (*param_0 & 0x4000) { + param_1[0] = 4; + } else if (*param_0 & 0x8000) { + param_1[0] = 5; + } + + if (*param_0 & 0x10) { + switch(*param_1) { + case 0: + *param_1 = 8; + break; + case 1: + *param_1 = 9; + break; + case 2: + *param_1 = 10; + break; + case 3: + *param_1 = 11; + break; + case 4: + *param_1 = 6; + break; + case 5: + *param_1 = 7; + break; + } + } + + if (*param_0 & 0x80) { + *param_1 = 13; + } else if (*param_0 & 0x1000) { + *param_1 = 12; + } else if (*param_0 & 0x2000) { + *param_1 = 14; + } +} + +/* ############################################################################################## */ +/* 80451F40-80451F44 000540 0004+00 2/2 0/0 0/0 .sdata2 @3880 */ +SECTION_SDATA2 static f32 lit_3880 = 255.0f; + +/* 80451F44-80451F48 000544 0004+00 1/1 0/0 0/0 .sdata2 @3881 */ +SECTION_SDATA2 static f32 lit_3881 = 4.0f; + +/* 80451F48-80451F50 000548 0008+00 2/2 0/0 0/0 .sdata2 @3883 */ +SECTION_SDATA2 static f64 lit_3883 = 4503601774854144.0 /* cast s32 to float */; + +/* 80049934-80049B30 044274 01FC+00 1/1 0/0 0/0 .text initiateLighting8__FR8_GXColors */ +static void initiateLighting8(_GXColor& param_0, s16 param_1) { + GXSetChanCtrl(GX_COLOR0, true, GX_SRC_REG, GX_SRC_VTX, 0xfe, GX_DF_CLAMP, GX_AF_SPOT); + GXSetChanCtrl(GX_ALPHA0, false, GX_SRC_REG, GX_SRC_VTX, 0xfe, GX_DF_CLAMP, GX_AF_SPOT); + s32 r,g,b; + GXColor color0; + color0.r = r = (param_1 << 1) & 0x3e; + color0.g = g = (param_1 >> 4) & 0x3e; + color0.b = b = (param_1 >> 9) & 0x3e; + if (daPy_py_c::checkNowWolfPowerUp()) { + f32 fVar2; + f32 fVar1 = (g_env_light.mTerrainAmbienceBG[0].r / 255.0f); + fVar2 = r + 0x10; + color0.r = fVar2 * (4.0f * (fVar1)); + + fVar2 = (g_env_light.mTerrainAmbienceBG[0].g / 255.0f); + fVar1 = g + 0x10; + color0.g = fVar1 * (4.0f * (fVar2)); + + fVar1 = b + 0x10; + fVar2 = (g_env_light.mTerrainAmbienceBG[0].b / 255.0f); + color0.b = fVar1 * (4.0f * (fVar2)); + } + + if (color0.r == 0x3e) { + color0.r = param_0.r; + } + if (color0.g == 0x3e) { + color0.g = param_0.g; + } + if (color0.b == 0x3e) { + color0.b = param_0.b; + } + GXSetChanAmbColor(GX_COLOR0A0, color0); + GXSetChanMatColor(GX_COLOR0A0, g_whiteColor); +} + + +/* 80049B30-80049BC0 044470 0090+00 1/1 0/0 0/0 .text initiate_b_Lighting8__FR8_GXColor + */ +static void initiate_b_Lighting8(_GXColor& param_0) { + GXSetChanCtrl(GX_COLOR0, true, GX_SRC_REG, GX_SRC_VTX, 0xfe, GX_DF_CLAMP, GX_AF_SPOT); + GXSetChanCtrl(GX_ALPHA0, false, GX_SRC_REG, GX_SRC_VTX, 0xfe, GX_DF_CLAMP, GX_AF_SPOT); + GXSetChanAmbColor(GX_COLOR0A0, param_0); + GXSetChanMatColor(GX_COLOR0A0, g_whiteColor); +} + +/* 80049BC0-80049C20 044500 0060+00 1/1 0/0 0/0 .text drawFirst__FP14JPABaseEmitter */ +static void drawFirst(JPABaseEmitter* param_0) { + GXSetColorUpdate(false); + GXSetAlphaCompare(GX_GEQUAL, param_0->getGlobalAlpha(), GX_AOP_OR, GX_GEQUAL, param_0->getGlobalAlpha()); + GXSetZMode(true, GX_LEQUAL, true); + GXSetZCompLoc(false); +} + +/* 80049C20-80049C44 044560 0024+00 2/2 0/0 0/0 .text drawFirst_l8__FP14JPABaseEmitter */ +static void drawFirst_l8(JPABaseEmitter* param_0) { + GXSetColorUpdate(false); +} + +/* ############################################################################################## */ +/* 80451F50-80451F54 000550 0004+00 9/9 0/0 0/0 .sdata2 @3964 */ +SECTION_SDATA2 static u8 lit_3964[4] = { + 0x00, + 0x00, + 0x00, + 0x00, +}; + +/* 80049C44-80049E40 044584 01FC+00 1/1 0/0 0/0 .text drawSecond_light8__FP14JPABaseEmitter */ +static void drawSecond_light8(JPABaseEmitter* param_0) { + s16 sVar1 = (param_0->mGlobalPrmClr.r); + s16 sVar2 = (sVar1 << 8); + s16 sVar3 = sVar2 + param_0->mGlobalPrmClr.g; + dKy_setLight_nowroom_grass(dComIfGp_roomControl_getStayNo(), 0.0f); + GXSetColorUpdate(1); + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_AND, GX_ALWAYS, 0); + GXSetZMode(true, GX_LEQUAL, false); + GXSetZCompLoc(0); + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_SET); + GXSetNumChans(1); + GXColor local_14; + local_14.r = g_env_light.mTerrainAmbienceBG[0].r; + local_14.g = g_env_light.mTerrainAmbienceBG[0].g; + local_14.b = g_env_light.mTerrainAmbienceBG[0].b; + local_14.a = g_env_light.mTerrainAmbienceBG[0].a; + initiateLighting8(local_14, sVar3); + GXSetNumTexGens(1); + GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x3c, false, 0x7d); + GXSetNumTevStages(2); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_TEXC, GX_CC_RASC, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, true, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_RASA, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, true, GX_TEVPREV); + GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_CPREV); + GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_4, true, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_ZERO, GX_CA_TEXA, GX_CA_A0, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, true, GX_TEVPREV); +} + + +/* 80049E40-80049FEC 044780 01AC+00 2/2 0/0 0/0 .text drawSecond_b_light8__FP14JPABaseEmitter */ +static void drawSecond_b_light8(JPABaseEmitter* param_0) { + dScnKy_env_light_c* envLight = dKy_getEnvlight(); + dKy_setLight_nowroom(dComIfGp_roomControl_getStayNo()); + GXSetColorUpdate(true); + GXSetNumChans(1); + GXColor local_18; + if (param_0->getUserWork() == 0) { + local_18.r = envLight->mActorAmbience.r; + local_18.g = envLight->mActorAmbience.g; + local_18.b = envLight->mActorAmbience.b; + local_18.a = envLight->mActorAmbience.a; + } else { + local_18.r = envLight->mTerrainAmbienceBG[0].r; + local_18.g = envLight->mTerrainAmbienceBG[0].g; + local_18.b = envLight->mTerrainAmbienceBG[0].b; + local_18.a = envLight->mTerrainAmbienceBG[0].a; + } + initiate_b_Lighting8(local_18); + GXSetNumTevStages(2); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_C1, GX_CC_C0, GX_CC_TEXC, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, true, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_RASA, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, true, GX_TEVPREV); + GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); + GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_ZERO, GX_CC_CPREV, GX_CC_RASC, GX_CC_ZERO); + GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_4, true, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_ZERO, GX_CA_TEXA, GX_CA_A0, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, true, GX_TEVPREV); +} + +/* 80049FEC-8004A108 04492C 011C+00 1/1 0/0 0/0 .text static_light8EcallBack__FP14JPABaseEmitter + */ +static void static_light8EcallBack(JPABaseEmitter* param_0) { + GXFlush(); + GXLoadPosMtxImm(j3dSys.getViewMtx(), 0); + GXLoadNrmMtxImm(j3dSys.getViewMtx(), 0); + GXInvalidateVtxCache(); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_F32, 0); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_CLR_RGB, GX_F32, 0); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_F32, 0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetVtxDesc(GX_VA_NRM, GX_DIRECT); + GXSetVtxDesc(GX_VA_CLR0, GX_DIRECT); + GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT); + + switch (param_0->getDrawCount()) { + case 1: + drawFirst(param_0); + break; + case 2: + drawSecond_light8(param_0); + break; + } +} + +/* 8004A108-8004A224 044A48 011C+00 1/1 0/0 0/0 .text + * static_gen_b_light8EcallBack__FP14JPABaseEmitter */ +static void static_gen_b_light8EcallBack(JPABaseEmitter* param_0) { + GXFlush(); + Mtx identity; + MTXIdentity(identity); + GXLoadPosMtxImm(identity, 0); + GXLoadNrmMtxImm(identity, 0); + GXInvalidateVtxCache(); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_F32, 0); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_CLR_RGB, GX_F32, 0); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_F32, 0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetVtxDesc(GX_VA_NRM, GX_DIRECT); + GXSetVtxDesc(GX_VA_CLR0, GX_DIRECT); + GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT); + + switch (param_0->getDrawCount()) { + case 1: + drawFirst_l8(param_0); + break; + case 2: + drawSecond_b_light8(param_0); + break; + } +} + +/* 8004A224-8004A340 044B64 011C+00 1/1 0/0 0/0 .text + * static_gen_d_light8EcallBack__FP14JPABaseEmitter */ +static void static_gen_d_light8EcallBack(JPABaseEmitter* param_0) { + GXFlush(); + GXLoadPosMtxImm(j3dSys.getViewMtx(), 0); + GXLoadNrmMtxImm(j3dSys.getViewMtx(), 0); + GXInvalidateVtxCache(); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_F32, 0); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_CLR_RGB, GX_F32, 0); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_F32, 0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetVtxDesc(GX_VA_NRM, GX_DIRECT); + GXSetVtxDesc(GX_VA_CLR0, GX_DIRECT); + GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT); + + switch (param_0->getDrawCount()) { + case 1: + drawFirst_l8(param_0); + break; + case 2: + drawSecond_b_light8(param_0); + break; + } +} + +/* 8004A340-8004A364 044C80 0024+00 1/0 0/0 0/0 .text + * draw__19dPa_light8EcallBackFP14JPABaseEmitter */ +void dPa_light8EcallBack::draw(JPABaseEmitter* param_0) { + static_light8EcallBack(param_0); +} + +/* 8004A364-8004A388 044CA4 0024+00 1/0 0/0 0/0 .text + * draw__25dPa_gen_b_light8EcallBackFP14JPABaseEmitter */ +void dPa_gen_b_light8EcallBack::draw(JPABaseEmitter* param_0) { + static_gen_b_light8EcallBack(param_0); +} + +/* 8004A388-8004A3AC 044CC8 0024+00 1/0 0/0 0/0 .text + * draw__25dPa_gen_d_light8EcallBackFP14JPABaseEmitter */ +void dPa_gen_d_light8EcallBack::draw(JPABaseEmitter* param_0) { + static_gen_d_light8EcallBack(param_0); +} + +/* 8004A3AC-8004A460 044CEC 00B4+00 2/2 0/0 0/0 .text dPa_setWindPower__FP15JPABaseParticle */ +static void dPa_setWindPower(JPABaseParticle* param_0) { + f32 local_58; + JGeometry::TVec3<f32> aTStack_18; + JGeometry::TVec3<f32> aTStack_24; + JGeometry::TVec3<f32> aTStack_30; + cXyz cStack_3c; + param_0->getOffsetPosition(aTStack_24); + dKyw_get_AllWind_vec((cXyz*)&aTStack_24, &cStack_3c, &local_58); + cStack_3c.y = 0.65f; + JGeometry::TVec3<f32> aTStack_48; + JGeometry::setTVec3f(cStack_3c * (9.0f * local_58), *(Vec*)&aTStack_48); + aTStack_24 += aTStack_48; + param_0->setOffsetPosition(aTStack_24); +} + +/* ############################################################################################## */ +/* 8037A108-8037A114 006768 000C+00 1/1 0/0 0/0 .rodata @4065 */ +SECTION_RODATA static Vec const lit_4065 = { + 1.0f, 1.0f, 1.0f, +}; +COMPILER_STRIP_GATE(0x8037A108, &lit_4065); + +/* 80451F5C-80451F60 00055C 0004+00 3/3 0/0 0/0 .sdata2 @4090 */ +SECTION_SDATA2 static f32 lit_4090 = -90.0f / 16384.0f; + +/* 80451F60-80451F68 000560 0004+04 3/3 0/0 0/0 .sdata2 @4091 */ +SECTION_SDATA2 static f32 lit_4091[1 + 1 /* padding */] = { + M_PI / 180.0f, + /* padding */ + 0.0f, +}; + +/* 80451F68-80451F70 000568 0008+00 7/7 0/0 0/0 .sdata2 @4093 */ +SECTION_SDATA2 static f64 lit_4093 = 4503599627370496.0 /* cast u32 to float */; + +/* 8004A460-8004A608 044DA0 01A8+00 1/0 0/0 0/0 .text + * draw__18dPa_modelPcallBackFP14JPABaseEmitterP15JPABaseParticle */ +void dPa_modelPcallBack::draw(JPABaseEmitter* param_0, JPABaseParticle* param_1) { + Mtx local_74; + Mtx local_44; + MTXIdentity(local_74); + MTXIdentity(local_44); + f32 f31 = -90.0f / 16384.0f * param_1->getRotateAngle(); + if (f31) { + switch(dPa_modelEcallBack::getRotAxis(param_0)) { + case 0: + MTXRotRad(local_44, 0x79, DEG_TO_RAD(f31)); + break; + case 1: + MTXRotRad(local_44, 0x78, DEG_TO_RAD(f31)); + break; + case 2: + MTXRotRad(local_44, 0x7a, DEG_TO_RAD(f31)); + break; + case 3: + Vec vec = {1.0f, 1.0f, 1.0f}; + MTXRotAxisRad(local_44, &vec, DEG_TO_RAD(f31)); + break; + } + + MTXConcat(local_74, local_44, local_74); + } + JGeometry::TVec3<f32> local_cc; + param_1->getGlobalPosition(local_cc); + local_74[0][3] = local_cc.x; + local_74[1][3] = local_cc.y; + local_74[2][3] = local_cc.z; + JGeometry::TVec3<f32> local_fc; + param_0->getGlobalParticleScale(local_fc); + local_fc.x *= param_1->getParticleScaleX(); + local_fc.y *= param_1->getParticleScaleY(); + Mtx auStack_c0; + MTXScale(auStack_c0, local_fc.x, local_fc.y, local_fc.x); + MTXConcat(local_74, auStack_c0, local_74); + dPa_modelEcallBack::drawModel(param_0, local_74); + param_1->setInvisibleParticleFlag(); +} + + +/* 8004A608-8004A7AC 044F48 01A4+00 1/1 0/0 0/0 .text + * set__Q218dPa_modelEcallBack7model_cFP12J3DModelDataRC12dKy_tevstr_cUcPvUcUc */ +bool dPa_modelEcallBack::model_c::set(J3DModelData* param_0, dKy_tevstr_c const& param_1, + u8 rotAxis, void* param_3, u8 param_4, u8 param_5) { + if (field_0x0 != NULL) { + return false; + } + + field_0x0 = param_0; + field_0x8.mLightObj = param_1.mLightObj; + + // Supposedly dKy_tevstr_c::operator= but it's too big to inline + J3DLightObj* end; + J3DLightObj* src; + J3DLightObj* dst; + dst = (J3DLightObj*)field_0x8.mLights; + src = (J3DLightObj*)param_1.mLights; + end = field_0x8.mLights + 6; + do { + *dst = *src; + dst++; + src++; + } while (dst < end); + field_0x8.field_0x32c = param_1.field_0x32c; + field_0x8.mLightPosWorld = param_1.mLightPosWorld; + field_0x8.field_0x344 = param_1.field_0x344; + typedef struct Arr{ + int field_0x0[2]; + }; + *(Arr*)&field_0x8.mColorC0 = *(Arr*)¶m_1.mColorC0; + *(Arr*)&field_0x8.mColorK0 = *(Arr*)¶m_1.mColorK0; + *(Arr*)&field_0x8.mFogColor = *(Arr*)¶m_1.mFogColor; + *(int*)&field_0x8.field_0x360 = *(int*)¶m_1.field_0x360; + *(int*)&field_0x8.mLightInf = *(int*)¶m_1.mLightInf; + + field_0x8.mFogStartZ = param_1.mFogStartZ; + field_0x8.mFogEndZ = param_1.mFogEndZ; + field_0x8.mColpatBlend = param_1.mColpatBlend; + field_0x8.field_0x374 = param_1.field_0x374; + field_0x8.field_0x378 = param_1.field_0x378; + field_0x8.field_0x37a = param_1.field_0x37a; + field_0x8.mInitTimer = param_1.mInitTimer; + field_0x8.mEnvrIdxCurr = param_1.mEnvrIdxCurr; + field_0x8.mEnvrIdxPrev = param_1.mEnvrIdxPrev; + field_0x8.mColpatCurr = param_1.mColpatCurr; + field_0x8.mColpatPrev = param_1.mColpatPrev; + field_0x8.mRoomNo = param_1.mRoomNo; + field_0x8.mEnvrIdxOverride = param_1.mEnvrIdxOverride; + field_0x8.mLightMode = param_1.mLightMode; + field_0x8.mInitType = param_1.mInitType; + field_0x8.field_0x384 = param_1.field_0x384; + field_0x8.field_0x385 = param_1.field_0x385; + mRotAxis = rotAxis; + field_0x391 = param_5; + field_0x4 = (J3DAnmBase*)param_3; + field_0x392 = param_4; + + return true; +} + +/* 8004A7AC-8004A88C 0450EC 00E0+00 1/1 0/0 0/0 .text setup__Q218dPa_modelEcallBack7model_cFv */ +void dPa_modelEcallBack::model_c::setup() { + if (field_0x4 != NULL) { + if (field_0x392 == 0) { + J3DAnmTexPattern* pattern = (J3DAnmTexPattern*)field_0x4; + pattern->searchUpdateMaterialID(field_0x0); + pattern->setFrame(field_0x391); + field_0x0->entryTexNoAnimator(pattern); + } else { + J3DAnmTevRegKey* tevRegKey = (J3DAnmTevRegKey*)field_0x4; + tevRegKey->searchUpdateMaterialID(field_0x0); + tevRegKey->setFrame(field_0x391); + field_0x0->entryTevRegAnimator(tevRegKey); + } + } + + field_0x0->syncJ3DSys(); + J3DShape::resetVcdVatCache(); +} + + +/* 8004A88C-8004A8DC 0451CC 0050+00 1/1 0/0 0/0 .text cleanup__Q218dPa_modelEcallBack7model_cFv */ +void dPa_modelEcallBack::model_c::cleanup() { + if (field_0x4 == NULL) { + return; + } + + if (field_0x392 == 0) { + field_0x0->removeTexNoAnimator((J3DAnmTexPattern*)field_0x4); + } else { + field_0x0->removeTevRegAnimator((J3DAnmTevRegKey*)field_0x4); + } +} + +/* 8004A8DC-8004AA34 04521C 0158+00 1/1 0/0 0/0 .text draw__Q218dPa_modelEcallBack7model_cFPA4_f + */ +void dPa_modelEcallBack::model_c::draw(f32 (*param_0)[4]) { + J3DJoint* joint = field_0x0->getJointNodePointer(0); + for (J3DMaterial* material = joint->getMesh(); material != NULL; material = material->getNext()) + { + material->loadSharedDL(); + material->getShape()->loadPreDrawSetting(); + if (material->getMaterialAnm() != NULL) { + material->getMaterialAnm()->calc(material); + } + material->calc(param_0); + u16 texNo = material->getTevBlock()->getTexNo(0); + field_0x0->getTexture()->loadGX(texNo, GX_TEXMAP0); + dKy_setLight_again(); + dKy_Global_amb_set(&field_0x8); + dKy_GxFog_tevstr_set(&field_0x8); + Mtx auStack_48; + MTXConcat(j3dSys.getViewMtx(), param_0, auStack_48); + GXLoadPosMtxImm(auStack_48, 0); + GXLoadNrmMtxImm(auStack_48, 0); + material->getShape()->simpleDrawCache(); + } +} + +/* 8004AA34-8004AAA8 045374 0074+00 1/0 0/0 0/0 .text draw__18dPa_modelEcallBackFP14JPABaseEmitter + */ +void dPa_modelEcallBack::draw(JPABaseEmitter* param_0) { + if (param_0->isEnableDeleteEmitter()) { + param_0->quitImmortalEmitter(); + param_0->setEmitterCallBackPtr(NULL); + param_0->setParticleCallBackPtr(NULL); + resetModel(param_0); + } else { + setupModel(param_0); + } +} + +/* 8004AAA8-8004AB1C 0453E8 0074+00 1/0 0/0 0/0 .text + * setup__18dPa_modelEcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc */ +void dPa_modelEcallBack::setup(JPABaseEmitter* param_0, cXyz const* param_1, + csXyz const* param_2, s8 param_3) { + param_0->setEmitterCallBackPtr(NULL); + if (mModel != NULL) { + int sVar1 = struct_80450E9C; + for (int i = 0; i < sVar1; i++) { + int x = struct_80450E9D / sVar1; + struct_80450E9D -= (x) * sVar1; + if (mModel[struct_80450E9D].getModelData() == NULL) { + param_0->setUserWork(struct_80450E9D++); + param_0->setParticleCallBackPtr((JPAParticleCallBack*)&mPcallback[0]); + return; + } + struct_80450E9D++; + } + } +} + +/* 8004AB1C-8004AB88 04545C 006C+00 1/1 0/0 0/0 .text create__18dPa_modelEcallBackFUc */ +void dPa_modelEcallBack::create(u8 param_0) { + mModel = new model_c[param_0]; + struct_80450E9C = param_0; + struct_80450E9D = 0; +} + +/* 8004AB88-8004ABC4 0454C8 003C+00 2/2 0/0 0/0 .text __dt__Q218dPa_modelEcallBack7model_cFv */ +dPa_modelEcallBack::model_c::~model_c() { +} + +/* 8004ABC4-8004AC00 045504 003C+00 1/1 0/0 0/0 .text remove__18dPa_modelEcallBackFv */ +void dPa_modelEcallBack::remove() { + if (mModel != NULL) { + delete [] mModel; + mModel = NULL; + } +} + +/* 8004AC00-8004AC90 045540 0090+00 0/0 1/1 11/11 .text + * setModel__18dPa_modelEcallBackFP14JPABaseEmitterP12J3DModelDataRC12dKy_tevstr_cUcPvUcUc */ +int dPa_modelEcallBack::setModel(JPABaseEmitter* param_0, J3DModelData* param_1, + dKy_tevstr_c const& param_2, u8 param_3, void* param_4, + u8 param_5, u8 param_6) { + model_c* pModel = getModel(param_0); + if (pModel != NULL) { + pModel->set(param_1, param_2, param_3, param_4, param_5, param_6); + param_0->setEmitterCallBackPtr((JPAEmitterCallBack*)&mEcallback); + param_0->becomeImmortalEmitter(); + return 1; + } + return 0; +} + +/* 8004AC90-8004ACC0 0455D0 0030+00 1/1 0/0 0/0 .text + * resetModel__18dPa_modelEcallBackFP14JPABaseEmitter */ +void dPa_modelEcallBack::resetModel(JPABaseEmitter* param_0) { + model_c* pModel = getModel(param_0); + if (pModel) { + pModel->reset(); + } +} + +/* 8004ACC0-8004ACEC 045600 002C+00 1/1 0/0 0/0 .text + * setupModel__18dPa_modelEcallBackFP14JPABaseEmitter */ +void dPa_modelEcallBack::setupModel(JPABaseEmitter* param_0) { + model_c* pModel = getModel(param_0); + if (pModel) { + pModel->setup(); + } +} + +/* 8004ACEC-8004AD28 04562C 003C+00 1/1 0/0 0/0 .text + * drawModel__18dPa_modelEcallBackFP14JPABaseEmitterPA4_f */ +void dPa_modelEcallBack::drawModel(JPABaseEmitter* param_0, f32 (*param_1)[4]) { + model_c* pModel = getModel(param_0); + if (pModel) { + pModel->draw(param_1); + } +} + +/* 8004AD28-8004AD58 045668 0030+00 1/1 0/0 0/0 .text + * cleanupModel__18dPa_modelEcallBackFP14JPABaseEmitter */ +void dPa_modelEcallBack::cleanupModel(JPABaseEmitter* param_0) { + model_c* pModel = getModel(param_0); + if (pModel) { + pModel->cleanup(); + } + dPa_cleanupGX(); +} + +/* 8004AD58-8004AD90 045698 0038+00 6/6 0/0 0/0 .text + * getModel__18dPa_modelEcallBackFP14JPABaseEmitter */ +dPa_modelEcallBack::model_c* dPa_modelEcallBack::getModel(JPABaseEmitter* param_0) { + if (mModel != NULL && param_0 != NULL && param_0->getUserWork() != 0xffffffff) { + return mModel + param_0->getUserWork(); + } + return NULL; +} + +/* 8004AD90-8004ADC4 0456D0 0034+00 1/1 0/0 0/0 .text + * getRotAxis__18dPa_modelEcallBackFP14JPABaseEmitter */ +u8 dPa_modelEcallBack::getRotAxis(JPABaseEmitter* param_0) { + model_c* pModel = getModel(param_0); + if (pModel) { + return pModel->getRotAxis(); + } + return 0; +} + +/* 8004ADC4-8004ADF4 045704 0030+00 1/0 0/0 0/0 .text + * draw__22dPa_selectTexEcallBackFP14JPABaseEmitter */ +void dPa_selectTexEcallBack::draw(JPABaseEmitter* param_0) { + param_0->loadTexture(field_0x4, GX_TEXMAP0); +} + +/* 8004ADF4-8004AE1C 045734 0028+00 1/1 0/0 0/0 .text __ct__19dPa_simpleEcallBackFv */ +dPa_simpleEcallBack::dPa_simpleEcallBack() { + mEmitter = NULL; + field_0xc = 0; +} + +/* 8004AE1C-8004AF94 04575C 0178+00 1/0 0/0 0/0 .text + * executeAfter__19dPa_simpleEcallBackFP14JPABaseEmitter */ +void dPa_simpleEcallBack::executeAfter(JPABaseEmitter* param_0) { + int currentCreateNumber = param_0->getCurrentCreateNumber(); + if (currentCreateNumber <= 0) { + field_0xc = 0; + } else { + dPa_simpleData_c* pData = mData; + param_0->playCreateParticle(); + for (; field_0xc != 0; field_0xc--) { + Vec local_3c; + if ((int)mDoLib_clipper::clip(j3dSys.getViewMtx(), *(Vec*)pData, 200.0f) == 0) { + JGeometry::TVec3<f32> aTStack_30; + param_0->getLocalTranslation(aTStack_30); + param_0->setGlobalTranslation(pData->field_0x00.x, pData->field_0x00.y + aTStack_30.y, pData->field_0x00.z); + param_0->setGlobalPrmColor(pData->field_0x0c.r, pData->field_0x0c.g, pData->field_0x0c.b); + param_0->setGlobalAlpha(pData->field_0x0c.a); + param_0->setGlobalEnvColor(pData->field_0x10.r, pData->field_0x10.g, pData->field_0x10.b); + for (int i = 0; i < currentCreateNumber; i++) { + JPABaseParticle* particle = (JPABaseParticle*)param_0->createParticle(); + if (particle == NULL) + break; + particle->setOffsetPosition(pData->field_0x00.x, pData->field_0x00.y + aTStack_30.y, pData->field_0x00.z); + } + } + pData++; + } + } + param_0->stopCreateParticle(); +} + +/* 8004AF94-8004AF98 0458D4 0004+00 1/0 0/0 0/0 .text + * draw__19dPa_simpleEcallBackFP14JPABaseEmitter */ +void dPa_simpleEcallBack::draw(JPABaseEmitter* param_0) { + /* empty function */ +} + +/* 8004AF98-8004B024 0458D8 008C+00 1/1 0/0 1/1 .text + * create__19dPa_simpleEcallBackFP17JPAEmitterManagerUsUc */ +JPABaseEmitter* dPa_simpleEcallBack::create(JPAEmitterManager* param_0, u16 id, u8 param_2) { + mEmitter = NULL; + field_0xa = param_2; + mID = id; + field_0xe = 0x20; + mData = new dPa_simpleData_c[field_0xe]; + createEmitter(param_0); + return mEmitter; +} + +/* 8004B024-8004B060 045964 003C+00 1/1 0/0 0/0 .text __dt__16dPa_simpleData_cFv */ +dPa_simpleData_c::~dPa_simpleData_c() {} + +/* 8004B060-8004B064 0459A0 0004+00 1/1 0/0 0/0 .text __ct__16dPa_simpleData_cFv */ +dPa_simpleData_c::dPa_simpleData_c() { + /* empty function */ +} + +/* ############################################################################################## */ +/* 80424710-8042471C 051430 000C+00 1/1 0/0 0/0 .bss @4053 */ +static u8 lit_4053[12]; + +/* 8042471C-80424728 05143C 000C+00 0/1 0/0 0/0 .bss @4054 */ +#pragma push +#pragma force_active on +static u8 lit_4054[12]; +#pragma pop + +/* 80424728-80424734 051448 000C+00 1/1 0/0 0/0 .bss pos$4424 */ +// static Vec pos; + +/* 8004B064-8004B168 0459A4 0104+00 2/2 0/0 0/0 .text + * createEmitter__19dPa_simpleEcallBackFP17JPAEmitterManager */ +JPABaseEmitter* dPa_simpleEcallBack::createEmitter(JPAEmitterManager* param_0) { + JPAResourceManager* this_00 = param_0->getResourceManager(dPa_control_c::getRM_ID(mID)); + u32 uVar1 = this_00->getResUserWork(mID); + if (mEmitter == NULL) { + static JGeometry::TVec3<f32> pos(0.0f, 0.0f, 0.0f); + + mEmitter = param_0->createSimpleEmitterID(pos, mID, field_0xa, dPa_control_c::getRM_ID(mID), NULL, NULL); + if (mEmitter == NULL) { + return NULL; + } + if ((uVar1 & 0x100) != 0) { + mEmitter->setParticleCallBackPtr(dPa_control_c::getFsenthPcallBack()); + } + mEmitter->setEmitterCallBackPtr(this); + mEmitter->becomeContinuousParticle(); + mEmitter->stopCreateParticle(); + } + return mEmitter; +} + + +/* ############################################################################################## */ +/* 80451F74-80451F78 000574 0004+00 1/1 0/0 0/0 .sdata2 @4473 */ +SECTION_SDATA2 static u32 lit_4473 = 0xFFFFFFFF; + +/* 80451F78-80451F7C 000578 0004+00 1/1 0/0 0/0 .sdata2 @4474 */ +SECTION_SDATA2 static u32 lit_4474 = 0xFFFFFFFF; + +/* 80451F7C-80451F80 00057C 0004+00 1/1 0/0 0/0 .sdata2 @4482 */ +SECTION_SDATA2 static u32 lit_4482 = 0xFFFFFFFF; + +/* 80451F80-80451F84 000580 0004+00 1/1 0/0 0/0 .sdata2 @4483 */ +SECTION_SDATA2 static u32 lit_4483 = 0xFFFFFFFF; + +/* 80451F84-80451F88 000584 0004+00 3/3 0/0 0/0 .sdata2 @4518 */ +SECTION_SDATA2 static f32 lit_4518 = 99.0f; + +/* 80451F88-80451F8C 000588 0004+00 10/10 0/0 0/0 .sdata2 @4519 */ +SECTION_SDATA2 static f32 lit_4519 = 1.0f; + +/* 8004B168-8004B4E0 045AA8 0378+00 1/1 0/0 0/0 .text + * set__19dPa_simpleEcallBackFPC4cXyzPC12dKy_tevstr_cUcRC8_GXColorRC8_GXColorif */ +u32 dPa_simpleEcallBack::set(cXyz const* param_1, dKy_tevstr_c const* param_2, u8 param_3, + _GXColor const& param_4, _GXColor const& param_5, int param_6, + f32 param_7) { + f32 dVar7 = param_7; + if (param_2 != NULL && param_2->mInitType != 124) { + OS_REPORT("\x1b[43;30mSimple Particle tevstr nonset !!\n"); + return 0; + } + + dPa_simpleData_c* pData = mData; + if (pData == NULL || field_0xc >= field_0xe) { + if (pData != NULL) { + OS_REPORT("\x1b[43;30mSimple Particle Set Over !!\n"); + } else { + OS_REPORT("\x1b[43;30mSimple Particle Nothing !!\n"); + } + return 0; + } + pData = mData + field_0xc; + pData->field_0x00 = *param_1; + u32 uVar5 = dPa_control_c::getEmitterManager()->getResourceManager(dPa_control_c::getRM_ID(mID))->getResUserWork(mID); + u32 uVar6 = (uVar5 & 0xef0000) >> 0x10; + if (uVar6 < 100) { + dVar7 = uVar6 / 99.0f; + } + if (uVar6 < 100) { + dVar7 = uVar6 / 99.0f; + } + if ((uVar5 & 0x20) != 0) { + GXColor local_5c; + GXColor local_60; + GXColor local_64 = {0xff, 0xff, 0xff, 0xff}; + GXColor local_68 = {0xff, 0xff, 0xff, 0xff}; + if (¶m_5 != NULL) { + local_64 = param_5;; + } + if (¶m_4 != NULL) { + local_68 = param_4; + } + dKy_ParticleColor_get_actor((cXyz*)param_1, (dKy_tevstr_c*)param_2, &local_5c, &local_60, + &local_64, &local_68, dVar7); + pData->field_0x0c.r = local_60.r; + pData->field_0x0c.g = local_60.g; + pData->field_0x0c.b = local_60.b; + pData->field_0x10.r = local_5c.r; + pData->field_0x10.g = local_5c.g; + pData->field_0x10.b = local_5c.b; + } else { + if ((uVar5 & 0x40) != 0) { + GXColor local_6c; + GXColor local_70; + GXColor local_74 = {0xff, 0xff, 0xff, 0xff}; + GXColor local_78 = {0xff, 0xff, 0xff, 0xff}; + if (¶m_5 != NULL) { + local_74 = param_5; + } + if (¶m_4 != NULL) { + local_78 = param_4; + } + dKy_ParticleColor_get_bg((cXyz*)param_1, (dKy_tevstr_c*)param_2, &local_6c, &local_70, &local_74, &local_78, + dVar7); + dVar7 = g_env_light.mPaletteTerrainLightEffect + + (1.0f - g_env_light.mPaletteTerrainLightEffect) * dVar7; + OS_REPORT("\nwork__ratio=[%f]", dVar7); + local_6c = dKy_light_influence_col(&local_6c, dVar7); + local_70 = dKy_light_influence_col(&local_70, dVar7); + pData->field_0x0c.r = local_70.r; + pData->field_0x0c.g = local_70.g; + pData->field_0x0c.b = local_70.b; + pData->field_0x10.r = local_6c.r; + pData->field_0x10.g = local_6c.g; + pData->field_0x10.b = local_6c.b; + } else { + if (¶m_4 != NULL) { + pData->field_0x0c.r = param_4.r; + pData->field_0x0c.g = param_4.g; + pData->field_0x0c.b = param_4.b; + } + if (¶m_5 != NULL) { + pData->field_0x10.r = param_5.r; + pData->field_0x10.g = param_5.g; + pData->field_0x10.b = param_5.b; + } + } + } + pData->field_0x0c.a = param_3; + pData->field_0x10.a = param_6; + field_0xc++; + return 1; +} + + +/* 8004B4E0-8004B504 045E20 0024+00 1/0 0/0 0/0 .text + * execute__17dPa_windPcallBackFP14JPABaseEmitterP15JPABaseParticle */ +void dPa_windPcallBack::execute(JPABaseEmitter* param_0, JPABaseParticle* param_1) { + dPa_setWindPower(param_1); +} + +/* 8004B504-8004B544 045E44 0040+00 3/3 0/0 0/0 .text + * onActive__Q313dPa_control_c7level_c9emitter_cFv */ +void dPa_control_c::level_c::emitter_c::onActive() { + mStatus |= 1; + + if (dComIfGp_event_runCheck()) { + onEventMove(); + } else { + offEventMove(); + } +} + +/* 8004B544-8004B5AC 045E84 0068+00 1/1 0/0 0/0 .text + * entry__Q313dPa_control_c7level_c9emitter_cFUlUsP14JPABaseEmitterP18dPa_levelEcallBack */ +void dPa_control_c::level_c::emitter_c::entry(u32 id, u16 name, JPABaseEmitter* i_emitter, + dPa_levelEcallBack* p_callback) { + mId = id; + mNameId = name; + onActive(); + mEmitter = i_emitter; + mCallback = p_callback; + mPre = NULL; + mNext = NULL; + mEmitter->becomeImmortalEmitter(); +} + +/* ############################################################################################## */ +/* 80450EC4-80450EC8 0003C4 0004+00 1/1 2/2 0/0 .sbss None */ +u8 dPa_control_c::mStatus; + +/* 80450EC8-80450ED0 0003C8 0004+04 2/2 1/1 17/17 .sbss mParticleTracePCB__13dPa_control_c */ +u8 dPa_control_c::mParticleTracePCB[4 + 4 /* padding */]; + +/* 8004B5AC-8004B688 045EEC 00DC+00 1/1 0/0 0/0 .text + * cleanup__Q313dPa_control_c7level_c9emitter_cFv */ +void dPa_control_c::level_c::emitter_c::cleanup() { + JPAEmitterCallBack* pdVar1 = mEmitter->getEmitterCallBackPtr(); + if (mCallback != NULL) { + mCallback->cleanup(); + } + if (pdVar1 != dPa_control_c::getGen_b_Light8EcallBack() && + pdVar1 != dPa_control_c::getGen_d_Light8EcallBack() && + pdVar1 != dPa_control_c::getLight8EcallBack()) { + mEmitter->setEmitterCallBackPtr(NULL); + JPAParticleCallBack* cb = mEmitter->getParticleCallBackPtr(); + if (cb == (JPAParticleCallBack*)JPTracePCB4 || + cb == dPa_control_c::getParticleTracePCB()) { + mEmitter->setParticleCallBackPtr(NULL); + } + } + mEmitter->becomeInvalidEmitter(); + mEmitter->quitImmortalEmitter(); + mId = 0; +} + +/* 8004B688-8004B6F8 045FC8 0070+00 1/1 0/0 0/0 .text __ct__Q213dPa_control_c7level_cFv + */ +dPa_control_c::level_c::level_c() { + field_0x0 = 0; + mFreeNo = 0; + + for (int i = 0; i < 0x100; i++) { + mTable[i] = NULL; + } +} + +/* 8004B6F8-8004B7A8 046038 00B0+00 1/1 0/0 0/0 .text + * execute__Q213dPa_control_c7level_cFPQ313dPa_control_c7level_c9emitter_c */ +void dPa_control_c::level_c::execute(dPa_control_c::level_c::emitter_c* i_emitter) { + if (!i_emitter->isActive()) { + if (i_emitter->isEventMove() || !dComIfGp_event_runCheck()) { + i_emitter->getEmitter()->playCalcEmitter(); + cutTable(i_emitter); + mFreeNo = ((i_emitter - mEmitter) / sizeof(emitter_c)); + } else { + i_emitter->getEmitter()->stopCalcEmitter(); + } + } else { + i_emitter->offActive(); + } +} + +/* 8004B7A8-8004B808 0460E8 0060+00 1/1 0/0 0/0 .text execute__Q213dPa_control_c7level_cFv */ +void dPa_control_c::level_c::execute() { + emitter_c* emitter = mEmitter; + + for (int i = 0; i < EMITTER_MAX; i++) { + if (emitter->getId() != 0) { + execute(emitter); + } + emitter++; + } +} + +/* 8004B808-8004B874 046148 006C+00 2/2 0/0 0/0 .text cleanup__Q213dPa_control_c7level_cFv */ +void dPa_control_c::level_c::cleanup() { + emitter_c* emitter = mEmitter; + + for (int i = 0; i < EMITTER_MAX; i++) { + if (emitter->getId() != 0) { + emitter->clearStatus(); + cutTable(emitter); + mFreeNo = i; + } + emitter++; + } +} + +/* 8004B874-8004B8B4 0461B4 0040+00 4/4 0/0 0/0 .text get__Q213dPa_control_c7level_cFUl + */ +dPa_control_c::level_c::emitter_c* dPa_control_c::level_c::get(u32 id) { + if (id == 0) { + return NULL; + } + + for (emitter_c* emitter = mTable[id & 0xFF]; emitter != NULL; emitter = emitter->getNext()) { + if (id == emitter->getId()) { + return emitter; + } + } + + return NULL; +} + +/* 8004B8B4-8004B8E8 0461F4 0034+00 1/1 5/5 40/40 .text + * forceOnEventMove__Q213dPa_control_c7level_cFUl */ +void dPa_control_c::level_c::forceOnEventMove(u32 id) { + emitter_c* emitter = get(id); + + if (emitter != NULL) { + emitter->onEventMove(); + } +} + +/* 8004B8E8-8004B918 046228 0030+00 0/0 1/1 0/0 .text + * allForceOnEventMove__Q213dPa_control_c7level_cFv */ +void dPa_control_c::level_c::allForceOnEventMove() { + emitter_c* emitter = mEmitter; + + for (int i = 0; i < EMITTER_MAX; i++) { + if (emitter->getId() != 0) { + emitter->onEventMove(); + } + emitter++; + } +} + +/* 8004B918-8004B94C 046258 0034+00 1/1 22/22 181/181 .text + * getEmitter__Q213dPa_control_c7level_cFUl */ +JPABaseEmitter* dPa_control_c::level_c::getEmitter(u32 id) { + emitter_c* emitter = get(id); + + if (emitter == NULL) { + return NULL; + } + + return emitter->getEmitter(); +} + +/* 8004B94C-8004BA40 04628C 00F4+00 1/1 0/0 0/0 .text + * entry__Q213dPa_control_c7level_cFUsP14JPABaseEmitterP18dPa_levelEcallBack */ +u32 dPa_control_c::level_c::entry(u16 i_name, JPABaseEmitter* i_emitter, + dPa_levelEcallBack* i_callback) { + for (int i = 0; i < EMITTER_MAX; i++) { + if (mEmitter[mFreeNo].getId() == 0) { + u32 uvar1 = field_0x0 + 1; + field_0x0 = uvar1; + + if (uvar1 == 0) { + field_0x0++; + } + + mEmitter[mFreeNo].entry(field_0x0, i_name, i_emitter, i_callback); + addTable(&mEmitter[mFreeNo]); + return field_0x0; + } + + mFreeNo = (mFreeNo + 1) % EMITTER_MAX; + } + + i_emitter->becomeInvalidEmitter(); + i_emitter->quitImmortalEmitter(); + return 0; +} + +/* 8004BA40-8004BA74 046380 0034+00 1/1 0/0 0/0 .text + * addTable__Q213dPa_control_c7level_cFPQ313dPa_control_c7level_c9emitter_c */ +void dPa_control_c::level_c::addTable(dPa_control_c::level_c::emitter_c* i_emitter) { + u32 id = i_emitter->getId() & 0xFF; + + if (mTable[id] == NULL) { + mTable[id] = i_emitter; + return; + } + + mTable[id]->setPre(i_emitter); + i_emitter->setNext(mTable[id]); + mTable[id] = i_emitter; +} + +/* 8004BA74-8004BACC 0463B4 0058+00 3/3 0/0 0/0 .text + * cutTable__Q213dPa_control_c7level_cFPQ313dPa_control_c7level_c9emitter_c */ +void dPa_control_c::level_c::cutTable(dPa_control_c::level_c::emitter_c* i_emitter) { + emitter_c* pre = i_emitter->getPre(); + emitter_c* next = i_emitter->getNext(); + + if (pre == NULL) { + mTable[i_emitter->getId() & 0xFF] = next; + } else { + pre->setNext(next); + } + + if (next != NULL) { + next->setPre(pre); + } + + i_emitter->cleanup(); +} + +/* ############################################################################################## */ +/* 80424734-80424740 051454 000C+00 0/1 0/0 0/0 .bss @4723 */ +#pragma push +#pragma force_active on +static u8 lit_4723[12]; +#pragma pop + +/* 80424740-8042474C 051460 000C+00 0/1 0/0 0/0 .bss @4724 */ +#pragma push +#pragma force_active on +static u8 lit_4724[12]; +#pragma pop + +/* 8042474C-80424758 05146C 000C+00 0/1 0/0 0/0 .bss @4725 */ +#pragma push +#pragma force_active on +static u8 lit_4725[12]; +#pragma pop + +/* 80424758-80424764 051478 000C+00 0/1 0/0 0/0 .bss @4726 */ +#pragma push +#pragma force_active on +static u8 lit_4726[12]; +#pragma pop + +/* 80424764-80424770 051484 000C+00 0/1 0/0 0/0 .bss @4727 */ +#pragma push +#pragma force_active on +static u8 lit_4727[12]; +#pragma pop + +/* 80424770-8042477C 051490 000C+00 0/1 0/0 0/0 .bss @4728 */ +#pragma push +#pragma force_active on +static u8 lit_4728[12]; +#pragma pop + +/* 8042477C-80424788 05149C 000C+00 0/1 0/0 0/0 .bss @4729 */ +#pragma push +#pragma force_active on +static u8 lit_4729[12]; +#pragma pop + +/* 80424788-80424794 0514A8 000C+00 0/1 0/0 0/0 .bss @4730 */ +#pragma push +#pragma force_active on +static u8 lit_4730[12]; +#pragma pop + +/* 80424794-804247D4 0514B4 0040+00 0/1 1/1 1/1 .bss mTsubo__13dPa_control_c */ +u8 dPa_control_c::mTsubo[64]; + +/* dPa_selectTexEcallBack dPa_control_c::mTsubo[] = { + dPa_selectTexEcallBack(0), + dPa_selectTexEcallBack(1), + dPa_selectTexEcallBack(2), + dPa_selectTexEcallBack(3), + dPa_selectTexEcallBack(4), + dPa_selectTexEcallBack(5), + dPa_selectTexEcallBack(6), + dPa_selectTexEcallBack(7), +}; */ + +/* 804247D4-804247E0 0514F4 000C+00 0/1 0/0 0/0 .bss @4731 */ +#pragma push +#pragma force_active on +static u8 lit_4731[12]; +#pragma pop + +/* 804247E0-804247EC 051500 000C+00 0/1 0/0 0/0 .bss @4732 */ +#pragma push +#pragma force_active on +static u8 lit_4732[12]; +#pragma pop + +/* 804247EC-804247F8 05150C 000C+00 0/1 0/0 0/0 .bss @4733 */ +#pragma push +#pragma force_active on +static u8 lit_4733[12]; +#pragma pop + +/* 804247F8-80424810 051518 0018+00 0/1 0/0 0/0 .bss mLifeBall__13dPa_control_c */ +#pragma push +#pragma force_active on +u8 dPa_control_c::mLifeBall[24]; +#pragma pop + +/* 80424810-8042481C 051530 000C+00 0/1 0/0 0/0 .bss @4734 */ +#pragma push +#pragma force_active on +static u8 lit_4734[12]; +#pragma pop + +/* 8042481C-80424828 05153C 000C+00 0/1 0/0 0/0 .bss @4735 */ +#pragma push +#pragma force_active on +static u8 lit_4735[12]; +#pragma pop + +/* 80424828-80424834 051548 000C+00 0/1 0/0 0/0 .bss @4736 */ +#pragma push +#pragma force_active on +static u8 lit_4736[12]; +#pragma pop + +/* 80424834-80424840 051554 000C+00 0/1 0/0 0/0 .bss @4737 */ +#pragma push +#pragma force_active on +static u8 lit_4737[12]; +#pragma pop + +/* 80424840-8042484C 051560 000C+00 0/1 0/0 0/0 .bss @4738 */ +#pragma push +#pragma force_active on +static u8 lit_4738[12]; +#pragma pop + +/* 8042484C-80424858 05156C 000C+00 0/1 0/0 0/0 .bss @4739 */ +#pragma push +#pragma force_active on +static u8 lit_4739[12]; +#pragma pop + +/* 80424858-80424864 051578 000C+00 0/1 0/0 0/0 .bss @4740 */ +#pragma push +#pragma force_active on +static u8 lit_4740[12]; +#pragma pop + +/* 80424864-80424870 051584 000C+00 0/1 0/0 0/0 .bss @4741 */ +#pragma push +#pragma force_active on +static u8 lit_4741[12]; +#pragma pop + +/* 80424870-804248A0 051590 0030+00 1/1 0/0 0/0 .bss mWindViewMatrix__13dPa_control_c */ +Mtx dPa_control_c::mWindViewMatrix; + +/* 8004BACC-8004BB70 04640C 00A4+00 0/0 1/1 0/0 .text __ct__13dPa_control_cFv */ +dPa_control_c::dPa_control_c() { + m_resHeap = JKRCreateExpHeap(0x96000, mDoExt_getArchiveHeap(), false); + mHeap = NULL; + m_sceneHeap = NULL; + field_0x18 = 0xFF; + mEmitterMng = NULL; + field_0x19 = 0; + mCommonResMng = NULL; + mSceneResMng = NULL; + m_sceneRes = NULL; + + MTXIdentity(mWindViewMatrix); +} + +/* 8004BB70-8004BB78 0464B0 0008+00 4/4 0/0 0/0 .text getRM_ID__13dPa_control_cFUs */ +u8 dPa_control_c::getRM_ID(u16 param_0) { + return (param_0 >> 15) & 1; +} + +/* 8004BB78-8004BCDC 0464B8 0164+00 0/0 1/1 0/0 .text createCommon__13dPa_control_cFPCv + */ +void dPa_control_c::createCommon(void const* param_0) { + mHeap = mDoExt_createSolidHeapFromSystem(0, 0); + mCommonResMng = new (mHeap, 0) JPAResourceManager(param_0, mHeap); + ResTIMG* pRVar3 = mDoGph_gInf_c::getFrameBufferTimg(); + mCommonResMng->swapTexture(pRVar3, "dummy"); + mEmitterMng = new (mHeap, 0) JPAEmitterManager(3000, 250, *(JKRHeap**)this, 0x13, 2); + mEmitterMng->entryResourceManager(mCommonResMng, 0); + JKRHeap* prevHeap = mDoExt_setCurrentHeap(mHeap); + for (u16 i = 0; i < 5; i++) { + u16 uVar1 = dPa_name::j_o_id[i]; + if (mCommonResMng->checkUserIndexDuplication(uVar1)) { + u32 local_30 = mCommonResMng->getResUserWork(uVar1); + u8 local_38 = 0; + dPa_group_id_change(&local_30, &local_38); + newSimple(uVar1, local_38, &local_30); + } + } + field_0x1a = field_0x19; + mDoExt_setCurrentHeap(prevHeap); + mDoExt_adjustSolidHeap(mHeap); +} + +/* 8004BCDC-8004BDFC 04661C 0120+00 1/1 0/0 0/0 .text createRoomScene__13dPa_control_cFv + */ +void dPa_control_c::createRoomScene() { + m_sceneHeap = mDoExt_createSolidHeapFromGame(0, 0); + mSceneResMng = new (m_sceneHeap, 0) JPAResourceManager(m_sceneRes, m_sceneHeap); + ResTIMG* pRVar3 = mDoGph_gInf_c::getFrameBufferTimg(); + mSceneResMng->swapTexture(pRVar3, "dummy"); + mEmitterMng->entryResourceManager(mSceneResMng, 1); + JKRHeap* prevHeap = mDoExt_setCurrentHeap(m_sceneHeap); + for (u16 i = 0; i < 14; i++) { + u16 uVar1 = dPa_name::s_o_id[i]; + if (mSceneResMng->checkUserIndexDuplication(uVar1)) { + u32 local_30 = mSceneResMng->getResUserWork(uVar1); + u8 local_38 = 0; + dPa_group_id_change(&local_30, &local_38); + newSimple(uVar1, local_38, &local_30); + } + } + mDoExt_setCurrentHeap(prevHeap); + mDoExt_adjustSolidHeap(m_sceneHeap); +} + +/* ############################################################################################## */ + +/* 804248A0-804248AC 0515C0 000C+00 0/1 0/0 0/0 .bss @4742 */ +#pragma push +#pragma force_active on +static u8 lit_4742[12]; +#pragma pop + +/* 804248AC-804248D0 0515CC 0020+04 1/1 0/0 0/0 .bss jpcName$4821 */ +static char jpcName[32 + 4 /* padding */]; + +/* 8004BDFC-8004BEB0 04673C 00B4+00 0/0 1/1 0/0 .text + * readScene__13dPa_control_cFUcPP21mDoDvdThd_toMainRam_c */ +bool dPa_control_c::readScene(u8 param_0, mDoDvdThd_toMainRam_c** param_1) { + if (param_0 == 0xff || param_0 == field_0x18) { + return 0; + } + + if (m_sceneRes) { + JKRHeap::free(m_sceneRes, NULL); + m_sceneRes = NULL; + } + field_0x18 = param_0; + sprintf(jpcName, "/res/Particle/Pscene%03d.jpc", param_0); + *param_1 = mDoDvdThd_toMainRam_c::create(jpcName, 0, m_resHeap); + return 1; +} + +/* 8004BEB0-8004BF3C 0467F0 008C+00 0/0 1/1 0/0 .text createScene__13dPa_control_cFPCv */ +void dPa_control_c::createScene(void const* param_0) { + for (int i = 0; i < field_0x1a; i++) { + field_0x1c[i].createEmitter(mEmitterMng); + } + if (param_0 != NULL) { + m_sceneRes = (void*)param_0; + } + if (m_sceneRes != NULL) { + createRoomScene(); + } + dPa_modelEcallBack::create(0x80); +} + +/* 8004BF3C-8004BFD4 04687C 0098+00 1/1 0/0 0/0 .text removeRoomScene__13dPa_control_cFb + */ +bool dPa_control_c::removeRoomScene(bool param_0) { + if (m_sceneHeap == NULL) { + return false; + } + + mEmitterMng->clearResourceManager(true); + mDoExt_destroySolidHeap(m_sceneHeap); + m_sceneHeap = NULL; + mSceneResMng = NULL; + field_0x19 = field_0x1a; + if (param_0) { + JKRHeap::free(m_sceneRes, NULL); + m_sceneRes = NULL; + field_0x18 = 0xff; + } + + return true; +} + +/* 8004BFD4-8004C054 046914 0080+00 0/0 1/1 0/0 .text removeScene__13dPa_control_cFb */ +void dPa_control_c::removeScene(bool param_0) { + field_0x210.cleanup(); + removeRoomScene(param_0); + for (int i = 0; i < field_0x1a; i++) { + field_0x1c[i].removeEmitter(); + } + + mEmitterMng->forceDeleteAllEmitter(); + dPa_modelEcallBack::remove(); +} + +/* 8004C054-8004C078 046994 0024+00 0/0 2/2 0/0 .text cleanup__13dPa_control_cFv */ +void dPa_control_c::cleanup() { + field_0x210.cleanup(); +} + +/* 8004C078-8004C0EC 0469B8 0074+00 0/0 1/1 0/0 .text calc3D__13dPa_control_cFv */ +void dPa_control_c::calc3D() { + if (isStatus(2)) { + offStatus(2); + } else { + for (u8 i = 0; i <= 13; i++) { + mEmitterMng->calc(i); + } + field_0x210.execute(); + } +} + +/* 8004C0EC-8004C134 046A2C 0048+00 0/0 1/1 0/0 .text calc2D__13dPa_control_cFv */ +void dPa_control_c::calc2D() { + for (u8 i = 14; i <= 16; i++) { + mEmitterMng->calc(i); + } +} + +/* 8004C134-8004C188 046A74 0054+00 0/0 1/1 0/0 .text calcMenu__13dPa_control_cFv */ +void dPa_control_c::calcMenu() { + if (mEmitterMng != NULL) { + for (u8 i = 17; i <= 18; i++) { + mEmitterMng->calc(i); + } + } +} + +/* 8004C188-8004C218 046AC8 0090+00 0/0 1/1 0/0 .text draw__13dPa_control_cFP11JPADrawInfoUc */ +void dPa_control_c::draw(JPADrawInfo* param_0, u8 param_1) { + if (mEmitterMng != NULL) { + j3dSys.reinitGX(); + dKy_setLight_again(); + + if (param_1 >= 6 && param_1 <= 11) { + dKy_GxFog_set(); + } + + mEmitterMng->draw(param_0, param_1); + GXSetAlphaUpdate(GX_FALSE); + GXSetNumIndStages(0); + GXSetClipMode(GX_CLIP_ENABLE); + } +} + +/* ############################################################################################## */ +/* 80451F8C-80451F90 00058C 0004+00 5/5 0/0 0/0 .sdata2 @5066 */ +SECTION_SDATA2 static f32 lit_5066 = 0.5f; + +/* 8004C218-8004C838 046B58 0620+00 0/0 7/7 54/54 .text + * setHitMark__13dPa_control_cFUsP10fopAc_ac_cPC4cXyzPC5csXyzPC4cXyzUl */ +void dPa_control_c::setHitMark(u16 param_1, fopAc_ac_c* param_2, cXyz const* param_3, + csXyz const* param_4, cXyz const* param_5, u32 param_6) { + cXyz cStack_34; + csXyz cStack_78; + cXyz const* pPos = param_3; + csXyz const* pAngle = param_4; + if (param_2 != NULL) { + if (fopAcM_checkStatus(param_2, 0x40000000)) { + return; + } + fopAcM_OnStatus(param_2, 0x40000000); + if (fopAcM_GetJntCol(param_2) != NULL) { + dJntCol_c* jntCol = fopAcM_GetJntCol(param_2); + if (jntCol->getHitmarkPosAndAngle(pPos, pAngle, &cStack_34, &cStack_78, + param_1 == 6) >= 0) + { + pPos = &cStack_34; + pAngle = &cStack_78; + } + } + } + if (param_1 == 3) { + dComIfGp_particle_set(0x114, pPos, pAngle, param_5); + dComIfGp_particle_set(0x115, pPos, 0, param_5); + dComIfGp_particle_set(0x116, pPos, 0, param_5); + if ((param_6 & 2) != 0 && param_2 != NULL && fopAcM_GetGroup(param_2) == 2) { + dComIfGp_particle_set(0x2ed, pPos, 0, param_5); + } + dComIfGp_particle_set(0x2ee, pPos, 0, param_5); + dKy_SordFlush_set(*pPos, 1); + } else if (param_1 == 2 || param_1 == 5 || param_1 == 9 || param_1 == 8 || param_1 == 6) { + dComIfGp_particle_set(0x117, pPos, pAngle, param_5); + dComIfGp_particle_set(0x118, pPos, 0, param_5); + if (param_1 != 9) { + dKy_SordFlush_set(*pPos, 0); + } + } else if (param_1 == 7) { + cXyz cStack_40; + if (param_5 != NULL) { + cStack_40 = *param_5 * 0.5f; + } else { + cStack_40.set(0.5f, 0.5f, 0.5f); + } + dComIfGp_particle_set(0x119, pPos, pAngle, &cStack_40); + dComIfGp_particle_set(0x11a, pPos, 0, &cStack_40); + dComIfGp_particle_set(0x2ef, pPos, 0, &cStack_40); + if ((param_6 & 2) != 0 && param_2 != NULL && fopAcM_GetGroup(param_2) == 2) { + dComIfGp_particle_set(0x2f0, pPos, 0, &cStack_40); + } + } else if (param_1 == 1 || param_1 == 4) { + dComIfGp_particle_set(0x119, pPos, pAngle, param_5); + dComIfGp_particle_set(0x11a, pPos, 0, param_5); + dComIfGp_particle_set(0x2ef, pPos, 0, param_5); + if ((param_6 & 2) != 0 && param_2 != NULL && fopAcM_GetGroup(param_2) == 2) { + dComIfGp_particle_set(0x2f0, pPos, 0, param_5); + } + dKy_SordFlush_set(*pPos, 1); + } +} + + +/* ############################################################################################## */ +/* 80451F90-80451F94 000590 0004+00 1/1 0/0 0/0 .sdata2 particleID$5076 */ +SECTION_SDATA2 static u16 particleID[2] = { + 0x01B3, + 0x01B2, +}; + +/* 80451F94-80451F98 000594 0004+00 1/1 0/0 0/0 .sdata2 @5140 */ +SECTION_SDATA2 static f32 lit_5140 = 1.0f / 20.0f; + +/* 80451F98-80451F9C 000598 0004+00 1/1 0/0 0/0 .sdata2 @5141 */ +SECTION_SDATA2 static f32 lit_5141 = 3.0f / 20.0f; + +/* 80451F9C-80451FA0 00059C 0004+00 2/2 0/0 0/0 .sdata2 @5142 */ +SECTION_SDATA2 static f32 lit_5142 = 1.0f / 10.0f; + +/* 80451FA0-80451FA8 0005A0 0008+00 2/2 0/0 0/0 .sdata2 @5143 */ +SECTION_SDATA2 static f64 lit_5143 = 0.5; + +/* 80451FA8-80451FB0 0005A8 0008+00 2/2 0/0 0/0 .sdata2 @5144 */ +SECTION_SDATA2 static f64 lit_5144 = 3.0; + +/* 80451FB0-80451FB8 0005B0 0008+00 2/2 0/0 0/0 .sdata2 @5145 */ +SECTION_SDATA2 static u8 lit_5145[8] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +/* 8004C838-8004CA90 047178 0258+00 0/0 2/2 3/3 .text + * setWaterRipple__13dPa_control_cFPUlR13cBgS_PolyInfoPC4cXyzfPC12dKy_tevstr_cPC4cXyzSc */ +void dPa_control_c::setWaterRipple(u32* param_0, cBgS_PolyInfo& param_1, cXyz const* param_2, + f32 param_3, dKy_tevstr_c const* param_4, + cXyz const* param_5, s8 param_6) { + f32 rate = 0.05f + 0.15f * (0.01f * param_3); + if (rate > 1.0f) { + rate = 1.0f; + } + csXyz local_50; + cM3dGPla acStack_48; + if (dComIfG_Bgsp().GetTriPla(param_1, &acStack_48)) { + f32 uVar5 = acStack_48.mNormal.absXZ(); + local_50.x = cM_atan2s(uVar5, acStack_48.mNormal.y); + local_50.y = acStack_48.mNormal.atan2sX_Z(); + local_50.z = 0; + } + + for (int i = 0; i < 2; i++, param_0++) { + *param_0 = dComIfGp_particle_setPolyColor( + *param_0, particleID[i], param_1, param_2, param_4, + &local_50, param_5, 0, 0, param_6, 0); + JPABaseEmitter* emitter = getEmitter(*param_0); + if (emitter != NULL) { + emitter->setRate(rate); + } + } +} + + +/* ############################################################################################## */ +/* 80451FB8-80451FBC 0005B8 0004+00 1/1 0/0 0/0 .sdata2 @5189 */ +SECTION_SDATA2 static u32 lit_5189 = 0xFFFFFFFF; + +/* 80451FBC-80451FC0 0005BC 0004+00 1/1 0/0 0/0 .sdata2 @5190 */ +SECTION_SDATA2 static u32 lit_5190 = 0xFFFFFFFF; + +/* 80451FC0-80451FC4 0005C0 0004+00 1/1 0/0 0/0 .sdata2 @5198 */ +SECTION_SDATA2 static u32 lit_5198 = 0xFFFFFFFF; + +/* 80451FC4-80451FC8 0005C4 0004+00 1/1 0/0 0/0 .sdata2 @5199 */ +SECTION_SDATA2 static u32 lit_5199 = 0xFFFFFFFF; + +/* 8004CA90-8004CF90 0473D0 0500+00 3/3 20/20 418/418 .text + * set__13dPa_control_cFUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf + */ +JPABaseEmitter* dPa_control_c::set(u8 param_0, u16 param_1, cXyz const* param_2, + dKy_tevstr_c const* param_3, csXyz const* param_4, cXyz const* param_5, + u8 param_6, dPa_levelEcallBack* param_7, s8 param_8, + _GXColor const* param_9, _GXColor const* param_10, cXyz const* param_11, + f32 param_12) { + u8 local_e0 = getRM_ID(param_1); + JPAResourceManager* local_a8 = mEmitterMng->getResourceManager(local_e0); + if (local_a8 == NULL) { + return NULL; + } + + u32 local_ac = local_a8->getResUserWork(param_1); + if (param_3 != NULL && param_3->mInitType != 0x7c) { + return NULL; + } + + dPa_group_id_change(&local_ac, ¶m_0); + JGeometry::TVec3<f32> aTStack_78; + aTStack_78.set(param_2->x, param_2->y, param_2->z); + JPABaseEmitter* this_00 = mEmitterMng->createSimpleEmitterID( + aTStack_78, param_1, param_0, + local_e0, NULL, NULL); + + if (this_00 == NULL) { + return NULL; + } + + if (param_4 != NULL) { + JGeometry::TVec3<s16> aTStack_a4; + aTStack_a4.x = param_4->x; + aTStack_a4.y = param_4->y; + aTStack_a4.z = param_4->z; + this_00->setGlobalRotation(aTStack_a4); + } + if (param_5 != NULL) { + JGeometry::TVec3<f32> aTStack_84; + aTStack_84.x = param_5->x; + aTStack_84.y = param_5->y; + aTStack_84.z = param_5->z; + this_00->setGlobalScale(aTStack_84); + } + + this_00->setGlobalAlpha(param_6); + if (param_7 != NULL) { + this_00->setEmitterCallBackPtr(param_7); + param_7->setup(this_00, param_2, param_4, param_8); + } + if ((local_ac & 0x100) != 0) { + this_00->setParticleCallBackPtr(getFsenthPcallBack()); + } + if ((local_ac & 0x800) != 0) { + this_00->setEmitterCallBackPtr(getGen_d_Light8EcallBack()); + if ((local_ac & 0x20) != 0) { + getGen_d_Light8EcallBack()->setup(this_00, param_2, param_4, 0); + } else { + getGen_d_Light8EcallBack()->setup(this_00, param_2, param_4, 1); + } + } else { + if ((local_ac & 0x400) != 0) { + this_00->setEmitterCallBackPtr(getGen_b_Light8EcallBack()); + if ((local_ac & 0x20) != 0) { + getGen_b_Light8EcallBack()->setup(this_00, param_2, param_4, 0); + } else { + getGen_b_Light8EcallBack()->setup(this_00, param_2, param_4, 1); + } + } else { + if ((local_ac & 0xef0000) >> 0x10 < 100) { + param_12 = ((local_ac & 0xef0000) >> 0x10) / 99.0f; + } + if ((local_ac & 0x20) != 0) { + GXColor local_b0; + GXColor local_b4; + GXColor local_b8 = {0xff, 0xff, 0xff, 0xff}; + GXColor local_bc = {0xff, 0xff, 0xff, 0xff}; + if (param_10 != NULL) { + local_b8 = *param_10; + } + if (param_9 != NULL) { + local_bc = *param_9; + } + dKy_ParticleColor_get_actor((cXyz*)param_2, (dKy_tevstr_c*)param_3, &local_b0, + &local_b4, &local_b8, &local_bc, param_12); + this_00->setGlobalEnvColor(local_b0.r, local_b0.g, local_b0.b); + this_00->setGlobalPrmColor(local_b4.r, local_b4.g, local_b4.b); + } else { + if ((local_ac & 0x40) != 0) { + GXColor local_c0; + GXColor local_c4; + GXColor local_c8 = {0xff, 0xff, 0xff, 0xff}; + GXColor local_cc = {0xff, 0xff, 0xff, 0xff}; + if (param_10 != NULL) { + local_c8 = *param_10; + } + if (param_9 != NULL) { + local_cc = *param_9; + } + dKy_ParticleColor_get_bg((cXyz*)param_2, (dKy_tevstr_c*)param_3, &local_c0, + &local_c4, &local_c8, &local_cc, param_12); + param_12 = g_env_light.mPaletteTerrainLightEffect + (1.0f - g_env_light.mPaletteTerrainLightEffect) * param_12; + local_c0 = dKy_light_influence_col(&local_c0, param_12); + local_c4 = dKy_light_influence_col(&local_c4, param_12); + this_00->setGlobalEnvColor(local_c0.r, local_c0.g, local_c0.b); + this_00->setGlobalPrmColor(local_c4.r, local_c4.g, local_c4.b); + } else { + if (param_9 != NULL) { + this_00->setGlobalPrmColor(param_9->r, param_9->g, param_9->b); + } + if (param_10 != NULL) { + this_00->setGlobalEnvColor(param_10->r, param_10->g, param_10->b); + } + } + } + } + } + if (param_11 != NULL) { + JGeometry::TVec3<f32> aTStack_9c; + aTStack_9c.set(param_11->x, param_11->y, param_11->z); + this_00->setGlobalParticleScale(aTStack_9c); + } + return this_00; +} + + +/* 8004CF90-8004D068 0478D0 00D8+00 4/4 1/1 0/0 .text + * getPolyColor__13dPa_control_cFR13cBgS_PolyInfoiP8_GXColorP8_GXColorPUcPf */ +s32 dPa_control_c::getPolyColor(cBgS_PolyInfo& param_0, int param_1, _GXColor* param_2, + _GXColor* param_3, u8* param_4, f32* param_5) { + if (!dComIfG_Bgsp().ChkPolySafe(param_0)) { + return 0; + } + + if (param_1 == NULL) { + dKy_pol_eff_prim_get(¶m_0, param_2); + dKy_pol_eff_env_get(¶m_0, param_3); + *param_4 = dKy_pol_eff_alpha_get(¶m_0); + *param_5 = dKy_pol_eff_ratio_get(¶m_0); + } else { + dKy_pol_eff2_prim_get(¶m_0, param_2); + dKy_pol_eff2_env_get(¶m_0, param_3); + *param_4 = dKy_pol_eff2_alpha_get(¶m_0); + *param_5 = dKy_pol_eff2_ratio_get(¶m_0); + } + + return 1; +} + +/* 8004D068-8004D128 0479A8 00C0+00 0/0 1/1 17/17 .text + * setPoly__13dPa_control_cFUsR13cBgS_PolyInfoPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyziP18dPa_levelEcallBackScPC4cXyz + */ +JPABaseEmitter* dPa_control_c::setPoly(u16 param_0, cBgS_PolyInfo& param_1, cXyz const* param_2, + dKy_tevstr_c const* param_3, csXyz const* param_4, + cXyz const* param_5, int param_6, dPa_levelEcallBack* param_7, + s8 param_8, cXyz const* param_9) { + u8 local_18; + float local_c; + GXColor a_Stack_10; + GXColor a_Stack_14; + + if (getPolyColor(param_1, param_6, &a_Stack_10, + &a_Stack_14, &local_18, &local_c)) { + return setNormal(param_0, param_2, param_3, param_4, param_5, local_18, + param_7, param_8, &a_Stack_10, &a_Stack_14, param_9, local_c); + } + return NULL; +} + +/* 8004D128-8004D1B8 047A68 0090+00 2/2 0/0 0/0 .text newSimple__13dPa_control_cFUsUcPUl + */ +bool dPa_control_c::newSimple(u16 param_0, u8 param_1, u32* param_2) { + if (field_0x19 >= 0x19) { + OSReport("\x1B[43;30m1エミッター登録数オーバー!!\n"); + return false; + } + if (field_0x1c[field_0x19].create(mEmitterMng, param_0, param_1) == 0) { + return false;; + } + field_0x19++; + return true; +} + +/* 8004D1B8-8004D23C 047AF8 0084+00 0/0 0/0 9/9 .text + * setSimple__13dPa_control_cFUsPC4cXyzPC12dKy_tevstr_cUcRC8_GXColorRC8_GXColorif */ +u32 dPa_control_c::setSimple(u16 param_0, cXyz const* param_1, dKy_tevstr_c const* param_2, + u8 param_3, _GXColor const& param_4, _GXColor const& param_5, + int param_6, f32 param_7) { + dPa_simpleEcallBack* cb = getSimple(param_0); + if (cb == NULL) { + return 0; + } + + return cb->set(param_1, param_2, param_3, param_4, param_5, param_6, param_7); +} + +/* 8004D23C-8004D278 047B7C 003C+00 1/1 0/0 0/0 .text getSimple__13dPa_control_cFUs */ +dPa_simpleEcallBack* dPa_control_c::getSimple(u16 param_0) { + dPa_simpleEcallBack* arr = field_0x1c; + for (int i = 0; i < field_0x19; i++, arr++) { + if (param_0 == arr->getID()) { + return arr; + } + } + return NULL; +} + +/* ############################################################################################## */ +/* 80451FC8-80451FCC 0005C8 0004+00 1/1 0/0 0/0 .sdata2 @5374 */ +SECTION_SDATA2 static u32 lit_5374 = 0xFFFFFFFF; + +/* 80451FCC-80451FD0 0005CC 0004+00 1/1 0/0 0/0 .sdata2 @5375 */ +SECTION_SDATA2 static u32 lit_5375 = 0xFFFFFFFF; + +/* 80451FD0-80451FD4 0005D0 0004+00 1/1 0/0 0/0 .sdata2 @5383 */ +SECTION_SDATA2 static u32 lit_5383 = 0xFFFFFFFF; + +/* 80451FD4-80451FD8 0005D4 0004+00 1/1 0/0 0/0 .sdata2 @5384 */ +SECTION_SDATA2 static u32 lit_5384 = 0xFFFFFFFF; + +/* 8004D278-8004D4CC 047BB8 0254+00 1/1 0/0 0/0 .text + * dPa_kankyocolor_set__FfP14JPABaseEmitterPC12dKy_tevstr_cUlPC4cXyzPC8_GXColorPC8_GXColor */ +static void dPa_kankyocolor_set(f32 param_0, JPABaseEmitter* param_1, + dKy_tevstr_c const* param_2, u32 param_3, cXyz const* param_4, + _GXColor const* param_5, _GXColor const* param_6) { + f32 fVar1 = param_0; + if ((param_3 & 0xef0000) >> 0x10 < 100) { + fVar1 = ((param_3 & 0xef0000) >> 0x10) / 99.0f; + } + + if ((param_3 & 0x20) != 0) { + GXColor local_60; + GXColor local_64; + GXColor local_68 = {0xff, 0xff, 0xff, 0xff}; + GXColor local_6c = {0xff, 0xff, 0xff, 0xff}; + if (param_6 != NULL) { + local_68 = *param_6; + } + if (param_5 != NULL) { + local_6c = *param_5; + } + dKy_ParticleColor_get_actor((cXyz*)param_4, (dKy_tevstr_c*)param_2, &local_60, &local_64, + &local_68, &local_6c, fVar1); + param_1->setGlobalEnvColor(local_60.r, local_60.g, local_60.b); + param_1->setGlobalPrmColor(local_64.r, local_64.g, local_64.b); + } else if ((param_3 & 0x40) != 0) { + GXColor local_70; + GXColor local_74; + GXColor local_78 = {0xff, 0xff, 0xff, 0xff}; + GXColor local_7c = {0xff, 0xff, 0xff, 0xff}; + if (param_6 != NULL) { + local_78 = *param_6; + } + if (param_5 != NULL) { + local_7c = *param_5; + } + dKy_ParticleColor_get_bg((cXyz*)param_4, (dKy_tevstr_c*)param_2, &local_70, &local_74, + &local_78, &local_7c, fVar1); + fVar1 = g_env_light.mPaletteTerrainLightEffect + (1.0f - g_env_light.mPaletteTerrainLightEffect) * fVar1; + local_70 = dKy_light_influence_col(&local_70, fVar1); + //_GXColor::operator_ = (&local_70, (_GXColor*)&local_80); + local_74 = dKy_light_influence_col(&local_74, fVar1); + //_GXColor::operator_ = (&local_74, (_GXColor*)&local_84); + param_1->setGlobalEnvColor(local_70.r, local_70.g, local_70.b); + param_1->setGlobalPrmColor(local_74.r, local_74.g, local_74.b); + } +} + + +/* 8004D4CC-8004D6A4 047E0C 01D8+00 3/3 11/11 364/364 .text + * set__13dPa_control_cFUlUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf + */ +u32 dPa_control_c::set(u32 param_0, u8 param_1, u16 param_2, cXyz const* param_3, + dKy_tevstr_c const* param_4, csXyz const* param_5, cXyz const* param_6, + u8 param_7, dPa_levelEcallBack* param_8, s8 param_9, + _GXColor const* param_10, _GXColor const* param_11, cXyz const* param_12, + f32 param_13) { + level_c::emitter_c* this_00 = field_0x210.get(param_0); + u8 uVar7 = getRM_ID(param_2); + JPAResourceManager* this_01 = mEmitterMng->getResourceManager(uVar7); + u32 uVar3 = this_01->getResUserWork(param_2); + if (this_00 != NULL) { + if (param_2 == this_00->getNameId()) { + this_00->onActive(); + JPABaseEmitter* pJVar4 = this_00->getEmitter(); + pJVar4->playCalcEmitter(); + if (this_00->getCallback() == 0) { + pJVar4->setGlobalTranslation(param_3->x, param_3->y, param_3->z); + if (param_5 != NULL) { + JGeometry::TVec3<s16> aTStack_64; + aTStack_64.x = param_5->x; + aTStack_64.y = param_5->y; + aTStack_64.z = param_5->z; + pJVar4->setGlobalRotation(aTStack_64); + } + } + if (pJVar4->checkStatus(JPAEmtrStts_StopEmit)) { + pJVar4->playCreateParticle(); + } + dPa_kankyocolor_set(param_13, pJVar4, param_4, uVar3, param_3, param_10, param_11); + return this_00->getId(); + } + field_0x210.cutTable(this_00); + } + if (param_8 != NULL) { + param_8->cleanup(); + } + JPABaseEmitter* pJVar5 = set(param_1, param_2, param_3, param_4, param_5, param_6, param_7, + param_8, param_9, param_10, param_11, param_12, param_13); + if (pJVar5 == NULL) { + return 0; + } + + return field_0x210.entry(param_2, pJVar5, param_8); +} + +/* 8004D6A4-8004D770 047FE4 00CC+00 1/1 3/3 10/10 .text + * setPoly__13dPa_control_cFUlUsR13cBgS_PolyInfoPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyziP18dPa_levelEcallBackScPC4cXyz + */ +u32 dPa_control_c::setPoly(u32 param_0, u16 param_1, cBgS_PolyInfo& param_2, + cXyz const* param_3, dKy_tevstr_c const* param_4, + csXyz const* param_5, cXyz const* param_6, int param_7, + dPa_levelEcallBack* param_8, s8 param_9, cXyz const* param_10) { + f32 local_8; + GXColor local_10; + GXColor local_c; + u8 local_4; + if (getPolyColor(param_2, param_7, &local_10, + &local_c, &local_4, (f32*)&local_8)) { + return setNormal(param_0, param_1, param_3, param_4, param_5, param_6, + local_4, param_8, param_9, &local_10, &local_c, param_10, + local_8); + } + + return 0; +} + +/* 8004D770-8004D7C4 0480B0 0054+00 0/0 1/1 0/0 .text setStopContinue__13dPa_control_cFUl + */ +u32 dPa_control_c::setStopContinue(u32 param_0) { + level_c::emitter_c* emitter = field_0x210.get(param_0); + if (emitter != NULL) { + emitter->onActive(); + emitter->getEmitter()->stopCreateParticle(); + return emitter->getId(); + } + return 0; +} + +/* 8004D7C4-8004D988 048104 01C4+00 0/0 1/1 0/0 .text + * setSimpleFoot__13dPa_control_cFUlPUlR13cBgS_PolyInfoPC4cXyzPC12dKy_tevstr_ciPC5csXyzPC4cXyzP18dPa_levelEcallBackScPC4cXyz + */ +u32 dPa_control_c::setSimpleFoot(u32 param_0, u32* param_1, cBgS_PolyInfo& param_2, + cXyz const* param_3, dKy_tevstr_c const* param_4, int param_5, + csXyz const* param_6, cXyz const* param_7, + dPa_levelEcallBack* param_8, s8 param_9, + cXyz const* param_10) { + f32 local_44; + u8 local_50; + GXColor a_Stack_48; + GXColor a_Stack_4c; + if (getPolyColor(param_2, 0, &a_Stack_48, &a_Stack_4c, &local_50, + &local_44) == 0) + { + return 0; + } + + u8 effType = dKy_pol_efftype_get(¶m_2); + if (effType >= 6) { + return 0; + } + u32 rv = setNormal(param_0, effectIDTable[effType][param_5], + param_3, param_4, param_6, param_7, local_50, param_8, param_9, &a_Stack_48, + &a_Stack_4c, param_10, local_44); + u8 effType2 = dKy_pol_efftype2_get(¶m_2); + int polyAtt = dComIfG_Bgsp().GetPolyAtt0(param_2); + if (effType2 < 6 && (polyAtt != 1 || polyAtt != 3)) { + getPolyColor(param_2, 1, &a_Stack_48, &a_Stack_4c, + &local_50, &local_44); + *param_1 = setNormal(*param_1, effectIDTable[effType2][param_5], + param_3, param_4, param_6, param_7, local_50, param_8, param_9, &a_Stack_48, + &a_Stack_4c, param_10, local_44); + } + return rv; +} + +/* 8004D988-8004DC28 0482C8 02A0+00 0/0 1/1 0/0 .text + * setCommonPoly__13dPa_control_cFPUlP13cBgS_PolyInfoPC4cXyzPC4cXyzPC12dKy_tevstr_cUlUlPC5csXyzPC4cXyzSc + */ +u16 dPa_control_c::setCommonPoly(u32* param_0, cBgS_PolyInfo* param_1, cXyz const* param_2, + cXyz const* param_3, dKy_tevstr_c const* param_4, u32 param_5, + u32 param_6, csXyz const* param_7, cXyz const* param_8, + s8 param_9) { + f32 local_30; + GXColor a_Stack_34; + GXColor a_Stack_38; + int j; + int i; + u8 bVar3; + u16* puVar7; + const cXyz* local_40; + u32* ptr; + u16 uVar5 = 0; + u8 local_4c; + if (dComIfG_Bgsp().ChkPolySafe(*param_1) == 0) { + return 0; + } + + int local_44 = dComIfG_Bgsp().GetPolyAtt0(*param_1); + for (i = 0; i < 2; i++) { + if (getPolyColor(*param_1, i, &a_Stack_34, &a_Stack_38, &local_4c, &local_30) == 0) { + return 0xffff; + } + if ((param_6 & 0x80000000) != 0) { + if (i == 1 && dKy_camera_water_in_status_check() && (local_44 == 1 || local_44 == 3)) { + bVar3 = 5; + } else { + bVar3 = 6; + } + } else { + if (i == 0) { + bVar3 = dKy_pol_efftype_get(param_1); + } else if (local_44 == 1 || local_44 == 3) { + bVar3 = 6; + } else { + bVar3 = dKy_pol_efftype2_get(param_1); + } + } + + if (bVar3 >= 6 || (param_6 & (1 << bVar3)) != 0 || + (bVar3 == 2 && (param_6 & 0x10000) != 0 && i == 1)) + { + uVar5 |= (0xff << (i << 3)); + } else { + uVar5 |= bVar3 << (i << 3); + if (bVar3 == 2 && ((param_6 & 0x10000) != 0)) { + puVar7 = ringID[bVar3]; + local_40 = param_2; + } else { + if ((param_5 & (1 << bVar3)) != 0) { + puVar7 = ringID[bVar3]; + local_40 = param_3; + } else { + puVar7 = normalID[bVar3]; + local_40 = param_3; + } + } + ptr = param_0 + 4*i; + for ( j = 0; j < 4; j++, ptr++, puVar7++) { + if (puVar7[0] == 0xffff) { + break; + } + ptr[0] = setNormal(ptr[0], puVar7[0], local_40, param_4, param_7, param_8, + local_4c, NULL, param_9, &a_Stack_34, &a_Stack_38, NULL, local_30); + dComIfGp_particle_levelEmitterOnEventMove(ptr[0]); + } + } + } + + return uVar5; +} + +/* 8004DC28-8004DCA0 048568 0078+00 1/0 0/0 0/0 .text + * execute__17dPa_wbPcallBack_cFP14JPABaseEmitterP15JPABaseParticle */ +void dPa_wbPcallBack_c::execute(JPABaseEmitter* param_0, JPABaseParticle* param_1) { + JGeometry::TVec3<f32> local_18; + param_1->getGlobalPosition(local_18); + cXyz cStack_24(local_18.x, local_18.y, local_18.z); + if (fopAcM_wt_c::waterCheck(&cStack_24) && cStack_24.y > fopAcM_wt_c::getWaterY()) { + param_1->setInvisibleParticleFlag(); + param_1->setDeleteParticleFlag(); + } +} + +/* 8004DCA0-8004DD0C 0485E0 006C+00 1/0 0/0 0/0 .text + * execute__19dPa_fsenthPcallBackFP14JPABaseEmitterP15JPABaseParticle */ +void dPa_fsenthPcallBack::execute(JPABaseEmitter* param_0, JPABaseParticle* param_1) { + if (g_env_light.field_0xf3d == 1 && g_env_light.field_0xf40 > 0.0f) { + param_0->setGlobalAlpha(255.0f * g_env_light.field_0xf40); + param_0->playDrawParticle(); + } else { + param_0->setGlobalAlpha(0); + param_0->stopDrawParticle(); + } +} + + +/* 8004DD0C-8004DD10 04864C 0004+00 1/0 0/0 0/0 .text + * draw__19dPa_fsenthPcallBackFP14JPABaseEmitterP15JPABaseParticle */ +void dPa_fsenthPcallBack::draw(JPABaseEmitter* param_0, JPABaseParticle* param_1) { + /* empty function */ +} + +/* 8004DD10-8004DD14 048650 0004+00 1/0 0/0 0/0 .text + * execute__19dPa_light8PcallBackFP14JPABaseEmitterP15JPABaseParticle */ +void dPa_light8PcallBack::execute(JPABaseEmitter* param_0, JPABaseParticle* param_1) { + /* empty function */ +} + +/* 8004DD14-8004DD18 048654 0004+00 1/0 0/0 0/0 .text + * execute__25dPa_gen_b_light8PcallBackFP14JPABaseEmitterP15JPABaseParticle */ +void dPa_gen_b_light8PcallBack::execute(JPABaseEmitter* param_0, JPABaseParticle* param_1) { + /* empty function */ +} + +/* 8004DD18-8004DD1C 048658 0004+00 1/0 0/0 0/0 .text + * execute__25dPa_gen_d_light8PcallBackFP14JPABaseEmitterP15JPABaseParticle */ +void dPa_gen_d_light8PcallBack::execute(JPABaseEmitter* param_0, JPABaseParticle* param_1) { + /* empty function */ +} + +/* ############################################################################################## */ +/* 8037A114-8037A120 006774 000C+00 1/1 0/0 0/0 .rodata @5691 */ +SECTION_RODATA static u8 const lit_5691[12] = { + 0x3F, 0x80, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, +}; +COMPILER_STRIP_GATE(0x8037A114, &lit_5691); + +/* 80451FD8-80451FDC 0005D8 0004+00 3/3 0/0 0/0 .sdata2 @6075 */ +SECTION_SDATA2 static f32 lit_6075 = 32.0f; + +/* 80451FDC-80451FE0 0005DC 0004+00 4/4 0/0 0/0 .sdata2 @6076 */ +SECTION_SDATA2 static f32 lit_6076 = 3.0f; + +/* 80451FE0-80451FE4 0005E0 0004+00 1/1 0/0 0/0 .sdata2 @6077 */ +SECTION_SDATA2 static f32 lit_6077 = 10.0f; + +/* 80451FE4-80451FE8 0005E4 0004+00 2/2 0/0 0/0 .sdata2 @6078 */ +SECTION_SDATA2 static f32 lit_6078 = 2.0f; + +/* 80451FE8-80451FEC 0005E8 0004+00 3/3 0/0 0/0 .sdata2 @6079 */ +SECTION_SDATA2 static f32 lit_6079 = -1.0f; + +/* 8004DD1C-8004E6A8 04865C 098C+00 1/0 0/0 0/0 .text + * draw__19dPa_light8PcallBackFP14JPABaseEmitterP15JPABaseParticle */ +void dPa_light8PcallBack::draw(JPABaseEmitter* param_1, JPABaseParticle* param_2) { + Mtx local_60; + Mtx auStack_90; + Mtx auStack_c0; + Mtx auStack_f0; + JGeometry::TVec3<f32> local_100; + JGeometry::TVec3<f32> local_10c; + JGeometry::TVec3<f32> local_118; + JGeometry::TVec3<f32> local_124; + JGeometry::TVec3<f32> local_130; + u8 globalAlpha = param_1->getGlobalAlpha() & 0xff; + JGeometry::TVec3<f32> local_13c; + JGeometry::TVec3<f32> local_148; + JGeometry::TVec3<f32> local_154; + JGeometry::TVec3<f32> local_160; + JGeometry::TVec3<f32> local_16c; + dPa_setWindPower(param_2); + MTXIdentity(local_60); + MTXIdentity(auStack_90); + param_2->getBaseAxis(local_10c); + param_2->getLocalPosition(local_118); + if (local_118.isZero()) { + local_118.set(0.0f, 1.0f, 0.0f); + } else { + local_118.normalize(); + } + local_124.cross(local_10c, local_118); + if (local_124.isZero()) { + local_124.set(0.0f, 0.0f, 1.0f); + } else { + local_124.normalize(); + } + local_10c.cross(local_118, local_124); + local_10c.normalize(); + local_60[0][0] = local_10c.x; + local_60[0][1] = local_118.x; + local_60[0][2] = local_124.x; + local_60[1][0] = local_10c.y; + local_60[1][1] = local_118.y; + local_60[1][2] = local_124.y; + local_60[2][0] = local_10c.z; + local_60[2][1] = local_118.z; + local_60[2][2] = local_124.z; + f32 fVar3 = (-90.0f / 16384.0f) * param_2->getRotateAngle(); + if (fVar3) { + Vec local_178 = {1.0f, 1.0f, 1.0f}; + MTXRotAxisRad(auStack_90, &local_178, (M_PI / 180.0f) * fVar3); + MTXConcat(local_60, auStack_90, local_60); + } + param_2->getGlobalPosition(local_100); + local_60[0][3] = local_100.x; + local_60[1][3] = local_100.y; + local_60[2][3] = local_100.z; + param_1->getGlobalParticleScale(local_130); + local_130.x *= param_2->getParticleScaleX(); + local_130.y *= param_2->getParticleScaleY(); + local_130.x *= param_2->getWidth(param_1); + local_130.y *= param_2->getHeight(param_1); + local_130.x *= 10.0f; + local_130.y *= 10.0f; + local_130.z = 0.0f; + MTXScale(auStack_f0, local_130.x, local_130.y, local_130.z); + MTXConcat(local_60, auStack_f0, local_60); + MTXConcat(j3dSys.getViewMtx(), local_60, auStack_c0); + GXLoadPosMtxImm(auStack_c0, 0); + JGeometry::TVec3<f32> local_184; + JGeometry::TVec3<f32> local_190; + JGeometry::TVec3<f32> local_19c; + JGeometry::TVec3<f32> local_1a8; + local_184.set(1.0f, 2.0f, 0.0f); + local_190.set(1.0f, 0.0f, 0.0f); + local_19c.set(-1.0f, 0.0f, 0.0f); + local_1a8.set(-1.0f, 2.0f, 0.0f); + local_13c.x = 0.0f; + local_13c.y = 1.0f; + local_13c.z = 0.0f; + local_148.x = 0.0f; + local_148.y = 1.0f; + local_148.z = 0.0f; + local_154.x = 0.0f; + local_154.y = 1.0f; + local_154.z = 0.0f; + local_160.x = 0.0f; + local_160.y = 1.0f; + local_160.z = 0.0f; + local_16c.x = 0.0f; + local_16c.y = 1.0f; + local_16c.z = 0.0f; + local_13c.normalize(); + local_148.normalize(); + local_154.normalize(); + local_160.normalize(); + local_16c.normalize(); + GXBegin(GX_TRIANGLEFAN, GX_VTXFMT0, 6); + GXPosition3f32(0.0f, 1.0f, 0.0f); + GXNormal3f32(local_13c.x, local_13c.y, local_13c.z); + GXColor4u8(0xff, 0xff, 0xff, globalAlpha); + GXTexCoord2f32(0.5f, 0.5f); + GXPosition3f32(local_184.x, local_184.y, local_184.z); + GXNormal3f32(local_148.x, local_148.y, local_148.z); + GXColor4u8(0xff, 0xff, 0xff, globalAlpha); + GXTexCoord2f32(1.0f, 0.0f); + GXPosition3f32(local_190.x, local_190.y, local_190.z); + GXNormal3f32(local_154.x, local_154.y, local_154.z); + GXColor4u8(0xff, 0xff, 0xff, globalAlpha); + GXTexCoord2f32(1.0f, 1.0f); + GXPosition3f32(local_19c.x, local_19c.y, local_19c.z); + GXNormal3f32(local_160.x, local_160.y, local_160.z); + GXColor4u8(0xff, 0xff, 0xff, globalAlpha); + GXTexCoord2f32(0.0f, 1.0f); + GXPosition3f32(local_1a8.x, local_1a8.y, local_1a8.z); + GXNormal3f32(local_16c.x, local_16c.y, local_16c.z); + GXColor4u8(0xff, 0xff, 0xff, globalAlpha); + GXTexCoord2f32(0.0f, 0.0f); + GXPosition3f32(local_184.x, local_184.y, local_184.z); + GXNormal3f32(local_148.x, local_148.y, local_148.z); + GXColor4u8(0xff, 0xff, 0xff, globalAlpha); + GXTexCoord2f32(1.0f, 0.0f); + GXEnd(); + param_2->setInvisibleParticleFlag(); +} + + +/* ############################################################################################## */ +/* 80451FEC-80451FF0 0005EC 0004+00 2/2 0/0 0/0 .sdata2 @6350 */ +SECTION_SDATA2 static f32 lit_6350 = 12.5f; + +/* 80451FF0-80451FF4 0005F0 0004+00 2/2 0/0 0/0 .sdata2 @6351 */ +SECTION_SDATA2 static f32 lit_6351 = -12.5f; + +/* 8004E6A8-8004ED44 048FE8 069C+00 1/0 0/0 0/0 .text + * draw__25dPa_gen_b_light8PcallBackFP14JPABaseEmitterP15JPABaseParticle */ +// regalloc +#ifdef NONMATCHING +void dPa_gen_b_light8PcallBack::draw(JPABaseEmitter* param_1, JPABaseParticle* param_2) { + Mtx local_80; + JGeometry::TVec3<f32> local_8c; + JGeometry::TVec3<f32> aTStack_98; + JGeometry::TVec3<f32> aTStack_a4; + JGeometry::TVec3<f32> aTStack_b0; + JGeometry::TVec3<f32> local_bc; + u8 uVar7 = param_1->getGlobalAlpha() & 0xff; + JGeometry::TVec3<f32> local_c8; + JGeometry::TVec3<f32> local_d4; + JGeometry::TVec3<f32> local_e0; + JGeometry::TVec3<f32> local_ec; + JGeometry::TVec3<f32> local_f8; + param_2->getGlobalPosition(local_8c); + MTXMultVec(j3dSys.getViewMtx(), &local_8c, &local_8c); + f32 dVar9 = JMASSin(param_2->getRotateAngle()); + f32 dVar10 = JMASCos(param_2->getRotateAngle()); + param_1->getGlobalParticleScale(local_bc); + local_bc.x *= param_2->getWidth(param_1); + local_bc.y *= param_2->getHeight(param_1); + local_80[0][0] = dVar10 * local_bc.x; + local_80[0][1] = -dVar9 * local_bc.y; + local_80[0][3] = local_8c.x; + local_80[1][0] = dVar9 * local_bc.x; + local_80[1][1] = dVar10 * local_bc.y; + local_80[1][3] = local_8c.y; + local_80[2][2] = 1.0f; + local_80[2][3] = local_8c.z; + local_80[2][1] = 0.0f; + local_80[2][0] = 0.0f; + local_80[1][2] = 0.0f; + local_80[0][2] = 0.0f; + GXLoadPosMtxImm(local_80, 0); + GXLoadNrmMtxImm(local_80, 0); + JGeometry::TVec3<f32> local_104; + JGeometry::TVec3<f32> local_110; + JGeometry::TVec3<f32> local_11c; + JGeometry::TVec3<f32> local_128; + local_104.set(12.5f, 12.5f, 0.0f); + local_110.set(12.5f, -12.5f, 0.0f); + local_11c.set(-12.5f, -12.5f, 0.0f); + local_128.set(-12.5f, 12.5f, 0.0f); + local_c8.x = 0.0f; + local_c8.y = 0.0f; + local_c8.z = 0.0f; + local_d4.x = 1.0f; + local_d4.y = 1.0f; + local_d4.z = 0.0f; + local_e0.x = 1.0f; + local_e0.y = -1.0f; + local_e0.z = 0.0f; + local_ec.x = -1.0f; + local_ec.y = -1.0f; + local_ec.z = 0.0f; + local_f8.x = -1.0f; + local_f8.y = 1.0f; + local_f8.z = 0.0f; + local_c8.normalize(); + local_d4.normalize(); + local_e0.normalize(); + local_ec.normalize(); + local_f8.normalize(); + GXBegin(GX_TRIANGLEFAN, GX_VTXFMT0, 6); + GXPosition3f32(0.0f, 0.0f, 0.0f); + GXNormal3f32(local_c8.x, local_c8.y, local_c8.z); + GXColor4u8(0xff, 0xff, 0xff, uVar7); + GXTexCoord2f32(0.5f, 0.5f); + GXPosition3f32(local_104.x, local_104.y, local_104.z); + GXNormal3f32(local_d4.x, local_d4.y, local_d4.z); + GXColor4u8(0xff, 0xff, 0xff, uVar7); + GXTexCoord2f32(1.0f, 0.0f); + GXPosition3f32(local_110.x, local_110.y, local_110.z); + GXNormal3f32(local_e0.x, local_e0.y, local_e0.z); + GXColor4u8(0xff, 0xff, 0xff, uVar7); + GXTexCoord2f32(1.0f, 1.0f); + GXPosition3f32(local_11c.x, local_11c.y, local_11c.z); + GXNormal3f32(local_ec.x, local_ec.y, local_ec.z); + GXColor4u8(0xff, 0xff, 0xff, uVar7); + GXTexCoord2f32(0.0f, 1.0f); + GXPosition3f32(local_128.x, local_128.y, local_128.z); + GXNormal3f32(local_f8.x, local_f8.y, local_f8.z); + GXColor4u8(0xff, 0xff, 0xff, uVar7); + GXTexCoord2f32(0.0f, 0.0f); + GXPosition3f32(local_104.x, local_104.y, local_104.z); + GXNormal3f32(local_d4.x, local_d4.y, local_d4.z); + GXColor4u8(0xff, 0xff, 0xff, uVar7); + GXTexCoord2f32(1.0f, 0.0f); + GXEnd(); + param_2->setInvisibleParticleFlag(); +} +#else +void dPa_gen_b_light8PcallBack::draw(JPABaseEmitter* param_0, JPABaseParticle* param_1) { + // NONMATCHING +} +#endif + +/* ############################################################################################## */ +/* 8037A120-8037A12C 006780 000C+00 1/1 0/0 0/0 .rodata @6363 */ +SECTION_RODATA static u8 const lit_6363[12] = { + 0x3F, 0x80, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, +}; +COMPILER_STRIP_GATE(0x8037A120, &lit_6363); + +/* 8004ED44-8004F6B8 049684 0974+00 1/0 0/0 0/0 .text + * draw__25dPa_gen_d_light8PcallBackFP14JPABaseEmitterP15JPABaseParticle */ +#ifdef NONMATCHING +void dPa_gen_d_light8PcallBack::draw(JPABaseEmitter* param_1, JPABaseParticle* param_2) { + Mtx local_60; + Mtx auStack_90; + Mtx auStack_c0; + Mtx auStack_f0; + JGeometry::TVec3<f32> local_100; + JGeometry::TVec3<f32> local_10c; + JGeometry::TVec3<f32> local_118; + JGeometry::TVec3<f32> local_124; + JGeometry::TVec3<f32> local_130; + u8 uVar6 = param_1->getGlobalAlpha() & 0xff; + JGeometry::TVec3<f32> local_13c; + JGeometry::TVec3<f32> local_148; + JGeometry::TVec3<f32> local_154; + JGeometry::TVec3<f32> local_160; + JGeometry::TVec3<f32> local_16c; + MTXIdentity(local_60); + MTXIdentity(auStack_90); + param_2->getBaseAxis(local_10c); + param_2->getLocalPosition(local_118); + if (local_118.isZero()) { + local_118.set(0.0f, 1.0f, 0.0f); + } else { + local_118.normalize(); + } + local_124.cross(local_10c, local_118); + if (local_124.isZero()) { + local_124.set(0.0f, 0.0f, 1.0f); + } else { + local_124.normalize(); + } + local_10c.cross(local_118, local_124); + local_10c.normalize(); + local_60[0][0] = local_10c.x; + local_60[0][1] = local_118.x; + local_60[0][2] = local_124.x; + local_60[1][0] = local_10c.y; + local_60[1][1] = local_118.y; + local_60[1][2] = local_124.y; + local_60[2][0] = local_10c.z; + local_60[2][1] = local_118.z; + local_60[2][2] = local_124.z; + f32 fVar3 = (-90.0f / 16384.0f) * param_2->getRotateAngle(); + if (fVar3) { + Vec local_178 = {1.0f, 1.0f, 1.0f}; + MTXRotAxisRad(auStack_90, &local_178, (M_PI / 180.0f) * fVar3); + MTXConcat(local_60, auStack_90, local_60); + } + param_2->getGlobalPosition(local_100); + local_60[0][3] = local_100.x; + local_60[1][3] = local_100.y; + local_60[2][3] = local_100.z; + param_1->getGlobalParticleScale(local_130); + local_130.x *= param_2->getWidth(param_1); + local_130.y *= param_2->getHeight(param_1); + local_130.z = 0.0f; + MTXScale(auStack_f0, local_130.x, local_130.y, local_130.z); + MTXConcat(local_60, auStack_f0, local_60); + MTXConcat(j3dSys.getViewMtx(), local_60, auStack_c0); + GXLoadPosMtxImm(auStack_c0, 0); + GXLoadNrmMtxImm(auStack_c0, 0); + JGeometry::TVec3<f32> local_184; + JGeometry::TVec3<f32> local_190; + JGeometry::TVec3<f32> local_19c; + JGeometry::TVec3<f32> local_1a8; + local_184.set(12.5f, 12.5f, 0.0f); + local_190.set(12.5f, -12.5f, 0.0f); + local_19c.set(-12.5f, -12.5f, 0.0f); + local_1a8.set(-12.5f, 12.5f, 0.0f); + local_13c.x = 0.0f; + local_13c.y = 0.0f; + local_13c.z = 0.0f; + local_148.x = 1.0f; + local_148.y = 1.0f; + local_148.z = 0.0f; + local_154.x = 1.0f; + local_154.y = -1.0f; + local_154.z = 0.0f; + local_160.x = -1.0f; + local_160.y = -1.0f; + local_160.z = 0.0f; + local_16c.x = -1.0f; + local_16c.y = 1.0f; + local_16c.z = 0.0f; + local_13c.normalize(); + local_148.normalize(); + local_154.normalize(); + local_160.normalize(); + local_16c.normalize(); + GXBegin(GX_TRIANGLEFAN, GX_VTXFMT0, 6); + GXPosition3f32(0.0f, 0.0f, 0.0f); + GXNormal3f32(local_13c.x, local_13c.y, local_13c.z); + GXColor4u8(0xff, 0xff, 0xff, uVar6); + GXTexCoord2f32(0.5f, 0.5f); + GXPosition3f32(local_184.x, local_184.y, local_184.z); + GXNormal3f32(local_148.x, local_148.y, local_148.z); + GXColor4u8(0xff, 0xff, 0xff, uVar6); + GXTexCoord2f32(1.0f, 0.0f); + GXPosition3f32(local_190.x, local_190.y, local_190.z); + GXNormal3f32(local_154.x, local_154.y, local_154.z); + GXColor4u8(0xff, 0xff, 0xff, uVar6); + GXTexCoord2f32(1.0f, 1.0f); + GXPosition3f32(local_19c.x, local_19c.y, local_19c.z); + GXNormal3f32(local_160.x, local_160.y, local_160.z); + GXColor4u8(0xff, 0xff, 0xff, uVar6); + GXTexCoord2f32(0.0f, 1.0f); + GXPosition3f32(local_1a8.x, local_1a8.y, local_1a8.z); + GXNormal3f32(local_16c.x, local_16c.y, local_16c.z); + GXColor4u8(0xff, 0xff, 0xff, uVar6); + GXTexCoord2f32(0.0f, 0.0f); + GXPosition3f32(local_184.x, local_184.y, local_184.z); + GXNormal3f32(local_148.x, local_148.y, local_148.z); + GXColor4u8(0xff, 0xff, 0xff, uVar6); + GXTexCoord2f32(1.0f, 0.0f); + GXEnd(); + param_2->setInvisibleParticleFlag(); +} +#else +void dPa_gen_d_light8PcallBack::draw(JPABaseEmitter* param_0, JPABaseParticle* param_1) { + // NONMATCHING +} +#endif + +/* 8004F6B8-8004F6C4 049FF8 000C+00 0/0 2/2 3/3 .text + * setOldPosP__22dPa_hermiteEcallBack_cFPC4cXyzPC4cXyz */ +void dPa_hermiteEcallBack_c::setOldPosP(cXyz const* param_0, cXyz const* param_1) { + field_0x10 = param_0; + field_0x14 = param_1; +} + +/* ############################################################################################## */ +/* 80451FF4-80451FF8 0005F4 0004+00 1/1 0/0 0/0 .sdata2 @6846 */ +SECTION_SDATA2 static f32 lit_6846 = -2.0f; + +/* 8004F6C4-8004FABC 04A004 03F8+00 1/0 0/0 0/0 .text + * executeAfter__22dPa_hermiteEcallBack_cFP14JPABaseEmitter */ +void dPa_hermiteEcallBack_c::executeAfter(JPABaseEmitter* param_1) { + JGeometry::TVec3<f32> aTStack_68; + JGeometry::TVec3<f32> local_74; + local_74.x = field_0x10->x; + local_74.y = field_0x10->y; + local_74.z = field_0x10->z; + JGeometry::TVec3<f32> local_80; + local_80.x = field_0xc->x; + local_80.y = field_0xc->y; + local_80.z = field_0xc->z; + JGeometry::TVec3<f32> local_8c; + JGeometry::TVec3<f32> local_98; + param_1->setGlobalTranslation(local_80); + if (param_1->checkStatus(2) == 0) { + local_98.x = 0.5f * (local_80.x - local_74.x); + local_98.y = 0.5f * (local_80.y - local_74.y); + local_98.z = 0.5f * (local_80.z - local_74.z); + local_8c.x = 0.5f * (local_74.x - field_0x14->x); + local_8c.y = 0.5f * (local_74.y - field_0x14->y); + local_8c.z = 0.5f * (local_74.z - field_0x14->z); + f32 fVar2 = field_0xc->abs(*field_0x10); + f32 fVar1 = (0.1f * fVar2) * mRate; + if (mMaxCnt != 0) { + if (fVar1 > mMaxCnt) { + fVar1 = mMaxCnt; + } + } + if (fVar1 > 1.0f) { + f32 dVar9 = 1.0f / fVar1; + for (f32 dVar8 = dVar9; dVar8 < 1.0f; dVar8 += dVar9) { + aTStack_68.cubic(local_74, local_8c, local_98, local_80, dVar8); + JPABaseParticle* particle = param_1->createParticle(); + if (particle != NULL) { + particle->setOffsetPosition(aTStack_68); + } + } + } + } +} + + +/* 8004FABC-8004FAD4 04A3FC 0018+00 1/0 0/0 0/0 .text + * setup__22dPa_hermiteEcallBack_cFP14JPABaseEmitterPC4cXyzPC5csXyzSc */ +void dPa_hermiteEcallBack_c::setup(JPABaseEmitter* param_0, cXyz const* param_1, + csXyz const* param_2, s8 param_3) { + field_0xc = param_1; + mRate = 1.0f; + mMaxCnt = 0; +} + + +/* 8004FAD4-8004FB18 04A414 0044+00 1/0 0/0 0/0 .text + * execute__28dPa_particleTracePcallBack_cFP14JPABaseEmitterP15JPABaseParticle */ +void dPa_particleTracePcallBack_c::execute(JPABaseEmitter* param_0, JPABaseParticle* param_1) { + if (param_1->getAge() > 0) { + Vec* vec = (Vec*)param_0->getUserWork(); + JGeometry::TVec3<f32> local_24; + param_1->getOffsetPosition(local_24); + local_24.x += vec->x; + local_24.y += vec->y; + local_24.z += vec->z; + param_1->setOffsetPosition(local_24); + } +} + +/* 8004FB18-8004FB8C 04A458 0074+00 1/0 0/0 0/0 .text __dt__18dPa_levelEcallBackFv */ +#ifdef NONMATCHING +dPa_levelEcallBack::~dPa_levelEcallBack() { + cleanup(); +} +#else +// dPa_levelEcallBack::~dPa_levelEcallBack() { +extern "C" void __dt__18dPa_levelEcallBackFv() { + // NONMATCHING +} +#endif + +/* 8004FB8C-8004FB90 04A4CC 0004+00 8/0 0/0 0/0 .text cleanup__18dPa_levelEcallBackFv */ +void dPa_levelEcallBack::cleanup() { + /* empty function */ +} + +/* 8004FB90-8004FBFC 04A4D0 006C+00 1/1 0/0 0/0 .text __ct__Q218dPa_modelEcallBack7model_cFv */ +dPa_modelEcallBack::model_c::model_c() { + field_0x0 = NULL; +} + +/* 8004FBFC-8004FC08 04A53C 000C+00 1/1 0/0 0/0 .text __ct__Q313dPa_control_c7level_c9emitter_cFv + */ +dPa_control_c::level_c::emitter_c::emitter_c() { + mId = 0; +} + +/* 8004FC08-8004FC68 04A548 0060+00 2/1 0/0 0/0 .text __dt__19dPa_simpleEcallBackFv */ +// dPa_simpleEcallBack::~dPa_simpleEcallBack() { +extern "C" void __dt__19dPa_simpleEcallBackFv() { + // NONMATCHING +} + +/* 8004FC68-8004FCC8 04A5A8 0060+00 2/1 0/0 0/0 .text __dt__28dPa_particleTracePcallBack_cFv */ +// dPa_particleTracePcallBack_c::~dPa_particleTracePcallBack_c() { +extern "C" void __dt__28dPa_particleTracePcallBack_cFv() { + // NONMATCHING +} + +/* 8004FCC8-8004FD4C 04A608 0084+00 1/0 0/0 0/0 .text __dt__22dPa_hermiteEcallBack_cFv */ +// dPa_hermiteEcallBack_c::~dPa_hermiteEcallBack_c() { +extern "C" void __dt__22dPa_hermiteEcallBack_cFv() { + // NONMATCHING +} + +/* 8004FD4C-8004FDAC 04A68C 0060+00 2/1 0/0 0/0 .text __dt__25dPa_gen_d_light8PcallBackFv + */ +// dPa_gen_d_light8PcallBack::~dPa_gen_d_light8PcallBack() { +extern "C" void __dt__25dPa_gen_d_light8PcallBackFv() { + // NONMATCHING +} + +/* 8004FDAC-8004FE0C 04A6EC 0060+00 2/1 0/0 0/0 .text __dt__25dPa_gen_b_light8PcallBackFv + */ +// dPa_gen_b_light8PcallBack::~dPa_gen_b_light8PcallBack() { +extern "C" void __dt__25dPa_gen_b_light8PcallBackFv() { + // NONMATCHING +} + +/* 8004FE0C-8004FE6C 04A74C 0060+00 2/1 0/0 0/0 .text __dt__19dPa_light8PcallBackFv */ +// dPa_light8PcallBack::~dPa_light8PcallBack() { +extern "C" void __dt__19dPa_light8PcallBackFv() { + // NONMATCHING +} + +/* 8004FE6C-8004FECC 04A7AC 0060+00 2/1 0/0 0/0 .text __dt__19dPa_fsenthPcallBackFv */ +// dPa_fsenthPcallBack::~dPa_fsenthPcallBack() { +extern "C" void __dt__19dPa_fsenthPcallBackFv() { + // NONMATCHING +} + +/* 8004FECC-8004FF2C 04A80C 0060+00 2/1 0/0 0/0 .text __dt__17dPa_wbPcallBack_cFv */ +// dPa_wbPcallBack_c::~dPa_wbPcallBack_c() { +extern "C" void __dt__17dPa_wbPcallBack_cFv() { + // NONMATCHING +} + +/* 8004FF2C-8004FF8C 04A86C 0060+00 1/0 0/0 0/0 .text __dt__17dPa_windPcallBackFv */ +// dPa_windPcallBack::~dPa_windPcallBack() { +extern "C" void __dt__17dPa_windPcallBackFv() { + // NONMATCHING +} + +/* 8004FF8C-80050010 04A8CC 0084+00 2/1 0/0 0/0 .text __dt__22dPa_selectTexEcallBackFv */ +// dPa_selectTexEcallBack::~dPa_selectTexEcallBack() { +extern "C" void __dt__22dPa_selectTexEcallBackFv() { + // NONMATCHING +} + +/* 80050010-80050014 04A950 0004+00 1/0 0/0 0/0 .text + * setup__22dPa_selectTexEcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc */ +void dPa_selectTexEcallBack::setup(JPABaseEmitter* param_0, cXyz const* param_1, + csXyz const* param_2, s8 param_3) { + /* empty function */ +} + +/* 80050014-80050038 04A954 0024+00 1/0 0/0 0/0 .text + * drawAfter__18dPa_modelEcallBackFP14JPABaseEmitter */ +void dPa_modelEcallBack::drawAfter(JPABaseEmitter* param_0) { + cleanupModel(param_0); +} + +/* 80050038-80050098 04A978 0060+00 2/1 0/0 0/0 .text __dt__18dPa_modelPcallBackFv */ +// dPa_modelPcallBack::~dPa_modelPcallBack() { +extern "C" void __dt__18dPa_modelPcallBackFv() { + // NONMATCHING +} + +/* 80050098-800500B8 04A9D8 0020+00 1/0 0/0 0/0 .text + * drawAfter__25dPa_gen_d_light8EcallBackFP14JPABaseEmitter */ +void dPa_gen_d_light8EcallBack::drawAfter(JPABaseEmitter* param_0) { + dPa_cleanupGX(); +} + +/* 800500B8-8005013C 04A9F8 0084+00 2/1 0/0 0/0 .text __dt__25dPa_gen_b_light8EcallBackFv + */ +// dPa_gen_b_light8EcallBack::~dPa_gen_b_light8EcallBack() { +extern "C" void __dt__25dPa_gen_b_light8EcallBackFv() { + // NONMATCHING +} + +/* 8005013C-8005015C 04AA7C 0020+00 1/0 0/0 0/0 .text + * drawAfter__25dPa_gen_b_light8EcallBackFP14JPABaseEmitter */ +void dPa_gen_b_light8EcallBack::drawAfter(JPABaseEmitter* param_0) { + dPa_cleanupGX(); +} + +/* 8005015C-800501E0 04AA9C 0084+00 2/1 0/0 0/0 .text __dt__19dPa_light8EcallBackFv */ +// dPa_light8EcallBack::~dPa_light8EcallBack() { +extern "C" void __dt__19dPa_light8EcallBackFv() { + // NONMATCHING +} + +/* 800501E0-80050200 04AB20 0020+00 1/0 0/0 0/0 .text + * drawAfter__19dPa_light8EcallBackFP14JPABaseEmitter */ +void dPa_light8EcallBack::drawAfter(JPABaseEmitter* param_0) { + dPa_cleanupGX(); +} + +/* 80050200-80050284 04AB40 0084+00 1/0 0/0 0/0 .text __dt__19dPa_followEcallBackFv */ +// dPa_followEcallBack::~dPa_followEcallBack() { +extern "C" void __dt__19dPa_followEcallBackFv() { + // NONMATCHING +} + +/* 80050284-800502B0 04ABC4 002C+00 1/0 0/0 0/0 .text cleanup__19dPa_followEcallBackFv */ +void dPa_followEcallBack::cleanup() { + end(); +} + +/* 800502B0-800502E0 04ABF0 0030+00 1/0 0/0 0/0 .text + * draw__21dPa_setColorEcallBackFP14JPABaseEmitter */ +void dPa_setColorEcallBack::draw(JPABaseEmitter* param_0) { + GXSetTevColor(GX_TEVREG1, mColor); +} + +/* 800502E0-800502E4 04AC20 0004+00 1/0 0/0 0/0 .text + * setup__21dPa_setColorEcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc */ +void dPa_setColorEcallBack::setup(JPABaseEmitter* param_0, cXyz const* param_1, + csXyz const* param_2, s8 param_3) { + /* empty function */ +} + +/* ############################################################################################## */ +/* 803A8594-803A85D0 0056B4 0024+18 2/2 0/0 0/0 .data __vt__21dPa_setColorEcallBack */ +SECTION_DATA extern void* __vt__21dPa_setColorEcallBack[9 + 6 /* padding */] = { + (void*)NULL /* RTTI */, + (void*)NULL, + (void*)__dt__21dPa_setColorEcallBackFv, + (void*)execute__18JPAEmitterCallBackFP14JPABaseEmitter, + (void*)executeAfter__18JPAEmitterCallBackFP14JPABaseEmitter, + (void*)draw__21dPa_setColorEcallBackFP14JPABaseEmitter, + (void*)drawAfter__18JPAEmitterCallBackFP14JPABaseEmitter, + (void*)setup__21dPa_setColorEcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc, + (void*)cleanup__18dPa_levelEcallBackFv, + /* padding */ + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, +}; + +/* 800502E4-80050368 04AC24 0084+00 2/1 0/0 0/0 .text __dt__21dPa_setColorEcallBackFv */ +// dPa_setColorEcallBack::~dPa_setColorEcallBack() { +extern "C" void __dt__21dPa_setColorEcallBackFv() { + // NONMATCHING +} + +/* 80050368-8005036C 04ACA8 0004+00 10/0 0/0 0/0 .text + * execute__18JPAEmitterCallBackFP14JPABaseEmitter */ +extern "C" void execute__18JPAEmitterCallBackFP14JPABaseEmitter() { + /* empty function */ +} + +/* 8005036C-80050370 04ACAC 0004+00 3/0 0/0 0/0 .text draw__18JPAEmitterCallBackFP14JPABaseEmitter + */ +void JPAEmitterCallBack::draw(JPABaseEmitter* param_0) { + /* empty function */ +} + +/* 80050370-80050374 04ACB0 0004+00 7/0 0/0 0/0 .text + * drawAfter__18JPAEmitterCallBackFP14JPABaseEmitter */ +void JPAEmitterCallBack::drawAfter(JPABaseEmitter* param_0) { + /* empty function */ +} + +/* 80050374-80050378 04ACB4 0004+00 9/0 0/0 0/0 .text + * executeAfter__18JPAEmitterCallBackFP14JPABaseEmitter */ +void JPAEmitterCallBack::executeAfter(JPABaseEmitter* param_0) { + /* empty function */ +} + +/* 80050378-800503FC 04ACB8 0084+00 2/1 0/0 0/0 .text __dt__18dPa_modelEcallBackFv */ +// dPa_modelEcallBack::~dPa_modelEcallBack() { +extern "C" void __dt__18dPa_modelEcallBackFv() { + // NONMATCHING +} + +/* 800503FC-80050480 04AD3C 0084+00 2/1 0/0 0/0 .text __dt__25dPa_gen_d_light8EcallBackFv + */ +// dPa_gen_d_light8EcallBack::~dPa_gen_d_light8EcallBack() { +extern "C" void __dt__25dPa_gen_d_light8EcallBackFv() { + // NONMATCHING +} + +/* 80050480-80050C9C 04ADC0 081C+00 0/0 1/0 0/0 .text __sinit_d_particle_cpp */ +void __sinit_d_particle_cpp(){// NONMATCHING +} + +#pragma push +#pragma force_active on +REGISTER_CTORS(0x80050480, __sinit_d_particle_cpp); +#pragma pop + +/* 8037A12C-8037A12C 00678C 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
\ No newline at end of file |
