summaryrefslogtreecommitdiff
path: root/src/d/d_particle.cpp
diff options
context:
space:
mode:
authorTakaRikka <38417346+TakaRikka@users.noreply.github.com>2024-10-10 07:29:58 -0700
committerGitHub <noreply@github.com>2024-10-10 08:29:58 -0600
commit12eb254d769d84743b5cc6cd5424057c57eaf0ad (patch)
tree4509be332b2ccfc6fe939f47740d68f7746eca3e /src/d/d_particle.cpp
parent2fd702c0ac170a789af879b8b92a82d4dcc9080c (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.cpp3477
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*)&param_1.mColorC0;
+ *(Arr*)&field_0x8.mColorK0 = *(Arr*)&param_1.mColorK0;
+ *(Arr*)&field_0x8.mFogColor = *(Arr*)&param_1.mFogColor;
+ *(int*)&field_0x8.field_0x360 = *(int*)&param_1.field_0x360;
+ *(int*)&field_0x8.mLightInf = *(int*)&param_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 (&param_5 != NULL) {
+ local_64 = param_5;;
+ }
+ if (&param_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 (&param_5 != NULL) {
+ local_74 = param_5;
+ }
+ if (&param_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 (&param_4 != NULL) {
+ pData->field_0x0c.r = param_4.r;
+ pData->field_0x0c.g = param_4.g;
+ pData->field_0x0c.b = param_4.b;
+ }
+ if (&param_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, &param_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(&param_0, param_2);
+ dKy_pol_eff_env_get(&param_0, param_3);
+ *param_4 = dKy_pol_eff_alpha_get(&param_0);
+ *param_5 = dKy_pol_eff_ratio_get(&param_0);
+ } else {
+ dKy_pol_eff2_prim_get(&param_0, param_2);
+ dKy_pol_eff2_env_get(&param_0, param_3);
+ *param_4 = dKy_pol_eff2_alpha_get(&param_0);
+ *param_5 = dKy_pol_eff2_ratio_get(&param_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(&param_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(&param_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