Files
TheAzack9 aa0d7e3ca0 Initial pass on koopa and limitkoopa (#395)
* Initial pass on koopa and limitkoopa

* Mark limitkoopa as an object only in jp and ntsc

* PR cleanup

* PR cleanup

* Fix formatting
2026-11-08 17:03:32 +03:00

520 lines
21 KiB
C++

#ifndef SYSTEM_PARTICLES_HPP
#define SYSTEM_PARTICLES_HPP
#include <JSystem/JParticle/JPAResourceManager.hpp>
#include <System/EmitterViewObj.hpp>
// Header fabricated
extern bool gParticleFlagLoaded[0x201];
extern JPAResourceManager* gpResourceManager;
// fabricated
inline static void SMS_LoadParticle(const char* path, u16 id)
{
if (!gParticleFlagLoaded[id]) {
gpResourceManager->load(path, id);
gParticleFlagLoaded[id] = true;
}
}
// Actual, real funcs!!!!!!!!
// TODO: fill in the enums with particle IDs
enum E_SMS_EFFECT_ONETIME_NORMAL /* 0 */ {
PARTICLE_MS_M_ROCKET_A = 0x1,
PARTICLE_MS_M_ROCKET_B = 0x2,
PARTICLE_MS_M_ROCKET_B2 = 0x3,
PARTICLE_MS_M_ROCKET_C = 0x4,
PARTICLE_MS_M_ROCKET_D = 0x5,
PARTICLE_MS_FUMI_A = 0x7,
PARTICLE_MS_FUMI_B = 0x8,
PARTICLE_MS_FUMI_C = 0x9,
PARTICLE_MS_DMG_A = 0xA,
PARTICLE_MS_DMG_B = 0xB,
PARTICLE_MS_DMG_C = 0xC,
PARTICLE_MS_ASE = 0xD,
PARTICLE_MS_ITEMGET1_A = 0xE,
PARTICLE_MS_ITEMGET1_B = 0xF,
PARTICLE_MS_JUMP_ED_A = 0x10,
PARTICLE_MS_JUMP_ED_B = 0x11,
PARTICLE_MS_HIPDROP_A = 0x12,
PARTICLE_MS_HIPDROP_B = 0x13,
PARTICLE_MS_HIPDROP_C = 0x14,
PARTICLE_MS_MARIWALK1_A = 0x15,
PARTICLE_MS_MARIWALK1_B = 0x16,
PARTICLE_MS_MARIWALK1_C = 0x17,
PARTICLE_MS_WALLKICK_A = 0x18,
PARTICLE_MS_WALLKICK_B = 0x19,
MAP_MAP_GATE_MS_MARIOWP_BODY = 0x1A,
MAP_MAP_GATE_MS_MARIOWP_HEAD = 0x1B,
MAP_MAP_GATE_MS_MARIOWP_CAP = 0x1C,
MAP_MAP_GATE_MS_MARIOWP_RHAND = 0x1D,
MAP_MAP_GATE_MS_MARIOWP_LHAND = 0x1E,
MAP_MAP_GATE_MS_MARIOWP_RLEG = 0x1F,
MAP_MAP_GATE_MS_MARIOWP_RFOOT = 0x20,
MAP_MAP_GATE_MS_MARIOWP_LLEG = 0x21,
MAP_MAP_GATE_MS_MARIOWP_LFOOT = 0x22,
MAP_MAP_GATE_MS_MARIOWP_WATGUN = 0x23,
PARTICLE_MS_MARIOAP_BODY = 0x24,
PARTICLE_MS_MARIOAP_HEAD = 0x25,
PARTICLE_MS_MARIOAP_CAP = 0x26,
PARTICLE_MS_MARIOAP_RHAND = 0x27,
PARTICLE_MS_MARIOAP_LHAND = 0x28,
PARTICLE_MS_MARIOAP_RLEG = 0x29,
PARTICLE_MS_MARIOAP_RFOOT = 0x2A,
PARTICLE_MS_MARIOAP_LLEG = 0x2B,
PARTICLE_MS_MARIOAP_LFOOT = 0x2C,
PARTICLE_MS_MARIOAP_WATGUN = 0x2D,
PARTICLE_MS_M_TOBIKOMI_A = 0x2F,
PARTICLE_MS_M_TOBIKOMI_B = 0x30,
PARTICLE_MS_M_TOBIKOMI_S_A = 0x31,
PARTICLE_MS_M_TOBIKOMI_S_B = 0x32,
PARTICLE_MS_M_AWAHAMON = 0x33,
PARTICLE_MS_M_WATRUN_A = 0x34,
PARTICLE_MS_M_WATRUN_B = 0x35,
PARTICLE_MS_M_WATRUN_C = 0x36,
PARTICLE_MS_COINGET_A = 0x37,
PARTICLE_MS_COINGET_B = 0x38,
PARTICLE_MS_M_AMIATTACK = 0x39,
PARTICLE_MS_M_WALKSAND_B = 0x3B,
MAP_MAP_GATE_MS_MARIOWP_DUST = 0x3C,
PARTICLE_MS_M_GOUT_GATE = 0x40,
PARTICLE_MS_M_GOUT_DOKAN = 0x41,
PARTICLE_MS_M_SPHIPD_HIT_A = 0x43,
PARTICLE_MS_M_SPHIPD_HIT_B = 0x44,
PARTICLE_MS_M_SPHIPD_HIT_C = 0x45,
PARTICLE_MS_M_SPHIPD_HIT_D = 0x46,
MAP_POLLUTION_MS_M_ASHIOS = 0x50,
MAP_MAP_GATE_MS_MARIOWP_SENKO = 0x51,
PARTICLE_MS_OSENDAN = 0x52,
PARTICLE_MS_POI_SAND = 0x53,
PARTICLE_MS_CHU_JUMP = 0x54,
MAPOBJ_SANDBOMB = 0x55,
MAPOBJ_SHININGSTONEF = 0x56,
MAPOBJ_MS_WATCOIN_HIT = 0x57,
MAPOBJ_MS_WATCOIN_KIRA = 0x58,
MAP_MAP_MS_OBJUP_SLOPE_A = 0x59,
MAPOBJ_BALLOONKOOPAJR = 0x5A,
MAPOBJ_BALLOONKOOPAJRA = 0x5B,
MAPOBJ_BALLOONKOOPAJRB = 0x5C,
MAPOBJ_WATERMELON_BOMB = 0x5D,
MAPOBJ_WATERMELON_BOMB_A = 0x5E,
MAPOBJ_WATERMELON_BOMB_B = 0x5F,
MAPOBJ_MS_EX_HAHEN = 0x63,
MAP_POLLUTION_MS_NEWFIRE_A = 0x65,
MAP_MAP_MS_OBJUP_MANIYA_A = 0x66,
MAP_MAP_MS_OBJUP_TOUDAI_A = 0x67,
MAP_MAP_MS_OBJUP_HOTEL_A = 0x68,
MAP_MAP_MS_MARE_OBJUP_A = 0x69,
MAPOBJ_SANDSTEAM = 0x6A,
MAPOBJ_WATERMELON_SHRINK_A = 0x6B,
MAPOBJ_WATERMELON_SHRINK_B = 0x6C,
PARTICLE_MS_EX_CUBE_DISA = 0x6D,
MAP_MAP_MS_M_FILEBLOCK = 0x6E,
MAP_POLLUTION_MS_THUNDER_S = 0x6F,
PARTICLE_MS_MNT_KIRA = 0x70,
PARTICLE_MS_MARE_KIRA = 0x71,
PARTICLE_MS_MNT_YOGORE_B = 0x72,
PARTICLE_MS_MNT_YOGORE_F = 0x73,
PARTICLE_MS_MARE_YOGORE = 0x74,
PARTICLE_MS_KINO_YOGORE = 0x75,
PARTICLE_MS_BOHA_SANDSMO = 0x76,
PARTICLE_MS_BOHA_SAND = 0x77,
PARTICLE_MS_BOHA_JOUKI_R_A = 0x78,
PARTICLE_MS_BOHA_JOUKI_R_B = 0x79,
PARTICLE_MS_BOHA_JOUKI_L_A = 0x7A,
PARTICLE_MS_BOHA_JOUKI_L_B = 0x7B,
PARTICLE_MS_BOHA_HAMON_A = 0x7C,
PARTICLE_MS_BOHA_HAMON_B = 0x7D,
COLUMSAND_JPA_MS_BOHA_CRASH_A = 0x7E,
PARTICLE_MS_DEADNAMEKLI_N = 0x83,
PARTICLE_MS_DEADNAMEKLI_O = 0x84,
COLUMWATER_JPA_MS_ENEHAMON_A = 0x89,
COLUMWATER_JPA_MS_ENEHAMON_B = 0x8A,
PARTICLE_MS_MOE_FIRE_OFF = 0x8B,
BGESO_JPA_MS_BOGE_ATTACK_A = 0x8C,
BGESO_JPA_MS_BOGE_ATTACK_B = 0x8D,
BGESO_JPA_MS_BOGE_ATTACK_C = 0x8E,
BGESO_JPA_MS_BOGE_ATTACK_D = 0x8F,
BGESO_JPA_MS_BOGE_CANON_A = 0x93,
BGESO_JPA_MS_BOGE_CANON_B = 0x94,
BGESO_JPA_MS_BOGE_HIT_A = 0x97,
BGESO_JPA_MS_BOGE_HIT_B = 0x98,
BGESO_JPA_MS_BOGE_HIT_C = 0x99,
BGESO_JPA_MS_BOGE_HITDOWN = 0x9A,
BGESO_JPA_MS_BOGE_JUMP = 0x9B,
BGESO_JPA_MS_BOGE_KIZETSU = 0x9C,
BGESO_JPA_MS_BOGE_KIZETSU_R = 0x9D,
BGESO_JPA_MS_BOGE_ODANHIT_A = 0x9E,
BGESO_JPA_MS_BOGE_ODANHIT_B = 0x9F,
BGESO_JPA_MS_BOGE_OSEN = 0xA0,
PARTICLE_MS_POPO_BOMB_A = 0xA1,
PARTICLE_MS_POPO_BOMB_B = 0xA2,
GATEKEEPER_JPA_MS_GKPA_DEAD = 0xA7,
GATEKEEPER_JPA_MS_GKPA_DEADSMOKE = 0xA8,
SCENE_BOSSPAKKUN_JPA_MS_BOPA_BLUR1 = 0xA9,
SCENE_BOSSPAKKUN_JPA_MS_BOPA_DOWN = 0xAA,
SCENE_BOSSPAKKUN_JPA_MS_BOPA_SWING1 = 0xAB,
SCENE_BOSSPAKKUN_JPA_MS_BOPA_SWING2 = 0xAC,
BWAN_JPA_JUMP_ROCK = 0xAD,
BWAN_JPA_JUMP_SMOKE = 0xAE,
BWAN_JPA_MS_HIBANA = 0xAF,
BWAN_JPA_MS_DOWNYUGE = 0xB0,
PARTICLE_MS_SMB_KAFUN_OW = 0xB2,
PARTICLE_MS_SMB_KAFUN_OA = 0xB3,
PARTICLE_MS_SMB_AP_ROCK = 0xB6,
PARTICLE_MS_SMB_AP_SMOKE = 0xB7,
PARTICLE_MS_SMB_HD_ROCK = 0xB8,
PARTICLE_MS_SMB_HD_SMOKE = 0xB9,
PARTICLE_MS_GESO_OSENHIT_A = 0xBC,
PARTICLE_MS_GESO_OSENHIT_B = 0xBD,
PARTICLE_MS_PKH_TOKE = 0xBE,
PARTICLE_MS_PKH_FUMI = 0xBF,
PARTICLE_MS_POI_DEAD = 0xC0,
PARTICLE_MS_PETBTL_BOMB_A = 0xC1,
PARTICLE_MS_PETBTL_BOMB_B = 0xC2,
EXPLOSION_JPA_MS_BOMB_SMOKE = 0xC4,
EXPLOSION_JPA_MS_BOMB_BOMB = 0xC5,
EXPLOSION_JPA_MS_BOMB_HAHEN = 0xC6,
PARTICLE_MS_CHO_MOKU_A = 0xC7,
PARTICLE_MS_CHO_MOKU_B = 0xC8,
PARTICLE_MS_CHO_ASE = 0xC9,
PARTICLE_MS_DNK_SHIBIRE_B = 0xCA,
PARTICLE_MS_IGA_FUMI_AIR = 0xCB,
PARTICLE_MS_TAMA_FLOWER = 0xCC,
PARTICLE_MS_TLS_CHANGE = 0xCD,
KAZEKUN_JPA_MS_KAZE_APPEAR = 0xCF,
PARTICLE_MS_GENE_DEAD = 0xD0,
PARTICLE_MS_SL_OR_MELT1 = 0xD1,
PARTICLE_MS_SL_OR_MELT2 = 0xD2,
BOSSEEL_JPA_MS_MEO_AWA_TOOTH = 0xD3,
BOSSEEL_JPA_MS_MEO_AWA_MOUTH = 0xD4,
BOSSEELTEARS_MS_MEO_TEAR_BOMB = 0xD5,
BOSSEELTEARS_MS_MEO_TEAR_AWAGET = 0xD6,
SCENE_BTELESA_JPA_MS_BTLS_FHIT = 0xD7,
SCENE_BTELESA_JPA_MS_BTLS_FHIT_PE = 0xD8,
SCENE_BTELESA_JPA_MS_BTLS_FHIT_GR = 0xD9,
SCENE_BTELESA_JPA_MS_BTLS_FHIT_OR = 0xDA,
SCENE_BTELESA_JPA_MS_BTLS_DAMAGE = 0xDB,
SCENE_BTELESA_JPA_MS_BTLS_DOWN = 0xDC,
SCENE_BTELESA_JPA_MS_BTLS_DOWN_PE = 0xDD,
SCENE_BTELESA_JPA_MS_BTLS_DOWN_GR = 0xDE,
SCENE_BTELESA_JPA_MS_BTLS_DOWN_OR = 0xDF,
SCENE_BTELESA_JPA_MS_BTLS_SPICY_HIT = 0xE0,
SCENE_BTELESA_JPA_MS_BTLS_FUBUKI = 0xE1,
PARTICLE_MS_ENM_WALLHIT = 0xE2,
PARTICLE_MS_ENM_WALLHIT_O = 0xE3,
PARTICLE_MS_ENM_DISAP_A = 0xE4,
PARTICLE_MS_ENM_DISAP_A_W = 0xE5,
PARTICLE_MS_ENM_DISAP_B = 0xE6,
PARTICLE_MS_ENM_WATHIT = 0xE7,
CANNON_JPA_MS_CANNON_A = 0xE8,
CANNON_JPA_MS_CANNON_B = 0xE9,
CANNON_JPA_MS_CANNON_C = 0xEA,
CANNON_JPA_MS_CANNON_D = 0xEB,
CANNON_JPA_MS_CANNON_E = 0xEC,
SCENE_KAGEMARIO_JPA_MS_KGM_CHANGE = 0xED,
SCENE_TINKOOPA_JPA_MS_MKP_HIBANA_D1HE = 0xEE,
SCENE_TINKOOPA_JPA_MS_MKP_KILLER = 0xEF,
SCENE_TINKOOPA_JPA_MS_MKP_SMOKE1 = 0xF0,
SCENE_TINKOOPA_JPA_MS_MKP_PARGE_B14 = 0xF1,
SCENE_TINKOOPA_JPA_MS_MKP_PARGE_B23 = 0xF2,
SCENE_TINKOOPA_JPA_MS_MKP_FLAME_YUGE = 0xF3,
SCENE_TINKOOPA_JPA_MS_MKP_KEMU_PARTS = 0xF4,
MAP_MAP_MS_KP_BREAK_A = 0xF6,
MAP_MAP_MS_KP_BREAK_B = 0xF7,
SCENE_MANTA_JPA_MS_MAN_DEAD = 0xF8,
SCENE_MANTA_JPA_MS_MAN_DIV1 = 0xF9,
SCENE_MANTA_JPA_MS_MAN_DIV2 = 0xFA,
SCENE_MANTA_JPA_MS_MAN_DIV3 = 0xFB,
SCENE_MANTA_JPA_MS_MAN_DIV4 = 0xFC,
};
enum E_SMS_EFFECT_LOOP_NORMAL /* 1 */ {
PARTICLE_MS_HIKAGE1_A = 0x100,
PARTICLE_MS_HIKAGE1_B = 0x101,
PARTICLE_MS_MARIWALLSL1 = 0x102,
PARTICLE_MS_M_SLIPSMOKE = 0x103,
PARTICLE_MS_M_BLUR3 = 0x104,
PARTICLE_MS_M_BLUR2 = 0x105,
PARTICLE_MS_M_BLUR2SP = 0x106,
PARTICLE_MS_M_HAMON_A = 0x107,
PARTICLE_MS_M_HAMON_C = 0x108,
PARTICLE_MS_M_HAMON_D = 0x109,
PARTICLE_MS_M_MZBHAMON_A = 0x10A,
PARTICLE_MS_M_MZBHAMON_C = 0x10B,
PARTICLE_MS_M_AWA = 0x10C,
PARTICLE_MS_NOZZLESMOKE = 0x10D,
PARTICLE_MS_M_BLUR1 = 0x10E,
PARTICLE_MS_M_SLIDESAND_A = 0x10F,
PARTICLE_MS_M_SLIDESAND_B = 0x110,
PARTICLE_MS_M_AWA_S = 0x111,
PARTICLE_MS_M_WATSLIDE_B = 0x112,
PARTICLE_MS_M_WATSLIDE_C = 0x113,
PARTICLE_MS_M_SPINSHOT_A = 0x114,
PARTICLE_MS_M_SPINSHOT_B = 0x115,
PARTICLE_MS_M_BIRI_A = 0x116,
PARTICLE_MS_M_BIRI_B = 0x117,
PARTICLE_MS_M_BIRI_C = 0x118,
PARTICLE_MS_M_SPHIPD_A = 0x11A,
PARTICLE_MS_M_SPHIPD_B = 0x11B,
PARTICLE_MS_M_SPHIPD_C = 0x11C,
PARTICLE_MS_M_SPHIPD_D = 0x11D,
PARTICLE_MS_M_SEASMOKE = 0x11E,
PARTICLE_MS_TORO_WIND = 0x11F,
PARTICLE_MS_TORO_HIBANA = 0x120,
PARTICLE_MS_GESOSURF_B = 0x121,
PARTICLE_MS_GESOSURF_C = 0x122,
PARTICLE_MS_GESOSURF_D = 0x123,
PARTICLE_MS_POI_ZZZ = 0x124,
MAP_POLLUTION_MS_M_SPINOS = 0x126,
PARTICLE_MS_SHINE_PROMI = 0x127,
PARTICLE_MS_SHINE_SENKO = 0x128,
PARTICLE_MS_SHINE_KIRA = 0x129,
PARTICLE_MS_SHINE_BOW = 0x12A,
MAP_POLLUTION_MS_M_TOKEOS = 0x12B,
PARTICLE_MS_TEPPANFIRE_A = 0x12C,
PARTICLE_MS_GENE_HIT = 0x12D,
PARTICLE_MS_POI_KIZETSU = 0x12F,
PARTICLE_MS_CHU_ASE = 0x130,
MAP_MAP_GATE_MS_GATEWIND_A = 0x131,
MAP_MAP_GATE_MS_GATEWIND_A2 = 0x132,
MAP_MAP_GATE_MS_GATEWIND_A3 = 0x133,
MAP_MAP_GATE_MS_GATEWIND_B = 0x134,
PARTICLE_MS_MOE_FIRE_A = 0x135,
PARTICLE_MS_MOE_FIRE_B = 0x136,
PARTICLE_MS_MOE_FIRE_D = 0x137,
BGESO_JPA_MS_BOGE_ASE = 0x138,
BGESO_JPA_MS_BOGE_NAMIDA = 0x139,
BGESO_JPA_MS_BOGE_WASH = 0x13B,
PARTICLE_MS_POPO_SHUWA_A = 0x13C,
PARTICLE_MS_POPO_SHUWA_B = 0x13D,
PARTICLE_MS_PACKN_HD_ROCK = 0x13E,
PARTICLE_MS_PACKN_HD_SMOKE = 0x13F,
GATEKEEPER_JPA_MS_GKPA_BOTA = 0x140,
GATEKEEPER_JPA_MS_GKPA_YODARE_S = 0x141,
GATEKEEPER_JPA_MS_GKPA_YODARE_L = 0x142,
MAPOBJ_SHININGSTONE1 = 0x143,
MAPOBJ_SHININGSTONE2 = 0x144,
MAPOBJ_SHININGSTONE3 = 0x145,
MAPOBJ_MAREFALLSPLASH = 0x149,
MAPOBJ_MAREFALLSMOKE = 0x14A,
OTHERS_MARINESNOW_MS_MARE_MARINSNOW = 0x14B,
MAP_MAP_MS_MARE_GUNWAT_A = 0x14C,
MAP_MAP_MS_MARE_GUNWAT_B = 0x14D,
MAP_MAP_MS_MARE_GUNWAT_C = 0x14E,
SCENE_MAPOBJ_MS_SHIB_CYL1 = 0x154,
SCENE_MAPOBJ_MS_SHIB_CUB1 = 0x155,
MAP_MAP_MS_MONTE_YUGE = 0x156,
MAPOBJ_ICEBLOCKA = 0x157,
MAPOBJ_ICEBLOCKB = 0x158,
MAP_MAP_MS_SUNADORI_A = 0x159,
MAP_MAP_MS_SUNADORI_B = 0x15A,
MAP_MAP_MS_MARE_BLOCKUP = 0x15B,
SCENE_BOSSPAKKUN_JPA_MS_BOPA_WATHIT = 0x15D,
SCENE_BOSSPAKKUN_JPA_MS_BOPA_WATHIT_W = 0x15E,
SCENE_BOSSPAKKUN_JPA_MS_BOPA_ASE = 0x15F,
SCENE_BOSSPAKKUN_JPA_MS_BOPA_BLUR2 = 0x160,
SCENE_BOSSPAKKUN_JPA_MS_BOPA_JITA = 0x161,
SCENE_BOSSPAKKUN_JPA_MS_BOPA_TR_ROCK = 0x162,
SCENE_BOSSPAKKUN_JPA_MS_BOPA_TR_SMOKE = 0x163,
SCENE_BOSSPAKKUN_JPA_MS_BOPA_TR_WEED = 0x164,
PARTICLE_MS_GESO_KISEKI = 0x165,
CANNON_JPA_MS_CANNON_SMOKE = 0x166,
BWANWAN_JPA_MS_BWAN_HITYUGE = 0x167,
BWANWAN_JPA_MS_BWAN_KIRA = 0x168,
PARTICLE_MS_BOHA_JOUKI2_R_A = 0x169,
PARTICLE_MS_BOHA_JOUKI2_R_B = 0x16A,
PARTICLE_MS_BOHA_JOUKI2_L_A = 0x16B,
PARTICLE_MS_BOHA_JOUKI2_L_B = 0x16C,
PARTICLE_MS_BOHA_SANDSMO_SL = 0x16D,
PARTICLE_MS_BOHA_SAND_SL = 0x16E,
PARTICLE_MS_BOHA_KIZETSU = 0x16F,
PARTICLE_MS_NPC_KOKUEN = 0x170,
PARTICLE_MS_NPC_HAMON_A = 0x171,
PARTICLE_MS_MNT_WASH = 0x172,
PARTICLE_MS_MARE_WASH = 0x173,
PARTICLE_MS_KIL_SMOKE = 0x174,
PARTICLE_MS_PKH_DORO = 0x175,
PARTICLE_MS_PKH_WASH = 0x176,
PARTICLE_MS_PUKU_PICHI = 0x177,
PARTICLE_MS_PUKU_AWA = 0x178,
PARTICLE_MS_PETBTL_SMOKE = 0x179,
PARTICLE_MS_DNK_BIRI = 0x17A,
PARTICLE_MS_DNK_SPARK_L = 0x17B,
PARTICLE_MS_DNK_SPARK_R = 0x17C,
PARTICLE_MS_DNK_SHIBIRE_A = 0x17D,
PARTICLE_MS_DNK_HIBANA = 0x17E,
PARTICLE_MS_BOMB_LIMIT = 0x17F,
PARTICLE_MS_AMN_BIRI = 0x180,
PARTICLE_MS_AMN_SPARK_L = 0x181,
PARTICLE_MS_AMN_SPARK_R = 0x182,
PARTICLE_MS_AMN_SPARK_M = 0x183,
MAPOBJ_AMIKING = 0x184,
PARTICLE_MS_TAMA_HIT = 0x185,
PARTICLE_MS_TAMA_BLUR = 0x186,
PARTICLE_MS_TLS_YODARE_L = 0x187,
PARTICLE_MS_TLS_YODARE_S = 0x188,
KAZEKUN_JPA_MS_KAZE_WIND = 0x189,
KAZEKUN_JPA_MS_KAZE_BLUR = 0x18A,
PARTICLE_MS_YNB_ONPU = 0x18B,
COOC_JPA_MS_ASE = 0x18C,
COOC_JPA_MS_HANE = 0x18D,
AMENBO_JPA_MS_AME_HAMON = 0x18E,
FIREWANWAN_JPA_MS_CAN_HITYUGE = 0x18F,
WIRETRAP_JPA_NS_WRT_BIRI_A = 0x190,
WIRETRAP_JPA_NS_WRT_BIRI_B = 0x191,
BOSSEEL_JPA_MS_MEO_EYEBLUR = 0x192,
BOSSEEL_JPA_MS_MEO_SPIN_SMOKE = 0x193,
BOSSEEL_JPA_MS_MEO_SPIN_SMOKE_L = 0x194,
BOSSEEL_JPA_MS_MEO_SPIN_AWA = 0x195,
BOSSEEL_JPA_MS_MEO_SPIN_AWA_L = 0x196,
BOSSEEL_JPA_MS_MEO_AWA_BODY = 0x197,
BOSSEEL_JPA_MS_MEO_AWA_DEAD = 0x198,
BOSSEEL_JPA_MS_MEO_SUIKOMI = 0x199,
BOSSEEL_JPA_MS_MEO_TOOTH_WASH = 0x19A,
BOSSEEL_JPA_MS_MEO_TOOTH_KIRA = 0x19B,
BOSSEEL_JPA_MS_MEO_TOOTH_ALWAYS = 0x19C,
BOSSEELTEARS_MS_MEO_TEAR_AWA = 0x19D,
SCENE_BTELESA_JPA_MS_BTLS_YODARE1 = 0x19E,
SCENE_BTELESA_JPA_MS_BTLS_YODARE2 = 0x19F,
SCENE_BTELESA_JPA_MS_BTLS_YODARE3 = 0x1A0,
SCENE_BTELESA_JPA_MS_BTLS_ASE = 0x1A1,
SCENE_BTELESA_JPA_MS_BTLS_SPICY_A = 0x1A2,
SCENE_BTELESA_JPA_MS_BTLS_SPICY_B = 0x1A3,
SCENE_BTELESA_JPA_MS_BTLS_SPICY_D = 0x1A4,
SCENE_BTELESA_JPA_MS_BTLS_CHIKA_A = 0x1A5,
SCENE_BTELESA_JPA_MS_BTLS_CHIKA_B = 0x1A6,
SCENE_BTELESA_JPA_MS_BTLS_GLOW = 0x1A7,
SCENE_KAGEMARIO_JPA_MS_KGM_MOVE_A = 0x1AA,
SCENE_KAGEMARIO_JPA_MS_KGM_MOVE_B = 0x1AB,
SCENE_TINKOOPA_JPA_MS_MKP_HIBANA_W1BR = 0x1AC,
SCENE_TINKOOPA_JPA_MS_MKP_HIBANA_W3AR = 0x1AD,
SCENE_TINKOOPA_JPA_MS_MKP_HIBANA_W4AR = 0x1AE,
SCENE_TINKOOPA_JPA_MS_MKP_BIRI_W1ST = 0x1AF,
SCENE_TINKOOPA_JPA_MS_MKP_BIRI_W1AR = 0x1B0,
SCENE_TINKOOPA_JPA_MS_MKP_BIRI_W1FE = 0x1B1,
SCENE_TINKOOPA_JPA_MS_MKP_BIRI_W1HE = 0x1B2,
SCENE_TINKOOPA_JPA_MS_MKP_BIRI_D1BR_A = 0x1B3,
SCENE_TINKOOPA_JPA_MS_MKP_BIRI_D1BR_B = 0x1B4,
SCENE_TINKOOPA_JPA_MS_MKP_KEMU_B1AR = 0x1B5,
SCENE_TINKOOPA_JPA_MS_MKP_KEMU_W2BR_A = 0x1B6,
SCENE_TINKOOPA_JPA_MS_MKP_KEMU_W2BR_B = 0x1B7,
SCENE_TINKOOPA_JPA_MS_MKP_KEMU_B1HE = 0x1B8,
SCENE_TINKOOPA_JPA_MS_MKP_KEMU_B1FE_L = 0x1B9,
SCENE_TINKOOPA_JPA_MS_MKP_KEMU_B1FE_R = 0x1BA,
SCENE_TINKOOPA_JPA_MS_MKP_FIRE_A = 0x1BB,
SCENE_TINKOOPA_JPA_MS_MKP_FIRE_B = 0x1BC,
MAP_MAP_MS_LKP_YUGE1 = 0x1BE,
MAP_MAP_MS_KP_FUNSUI = 0x1BF,
KOOPA_JPA_MS_KP_FIRE_A = 0x1C0,
KOOPA_JPA_MS_KP_FIRE_B = 0x1C1,
KOOPA_JPA_MS_KP_FIRE_C = 0x1C2,
KOOPA_JPA_MS_KP_FIRE_D = 0x1C3,
PARTICLE_MS_MAP_FIRE_A = 0x1C4,
PARTICLE_MS_MAP_FIRE_B = 0x1C5,
SCENE_MAPOBJ_MS_OBJ_HAMON_A = 0x1C6,
SCENE_MANTA_JPA_MS_MAN_HIT1_A = 0x1C7,
SCENE_MANTA_JPA_MS_MAN_HIT1_B = 0x1C8,
SCENE_MANTA_JPA_MS_MAN_HIT2_A = 0x1C9,
SCENE_MANTA_JPA_MS_MAN_HIT2_B = 0x1CA,
SCENE_MANTA_JPA_MS_MAN_HIT3_A1 = 0x1CB,
SCENE_MANTA_JPA_MS_MAN_HIT3_A2 = 0x1CC,
SCENE_MANTA_JPA_MS_MAN_HIT3_B = 0x1CD,
SCENE_MANTA_JPA_MS_MAN_HIT4_A1 = 0x1CE,
SCENE_MANTA_JPA_MS_MAN_HIT4_A2 = 0x1CF,
SCENE_MANTA_JPA_MS_MAN_HIT4_B = 0x1D0,
PARTICLE_MS_MPK_FIRE_A = 0x1D1,
PARTICLE_MS_MPK_FIRE_B = 0x1D2,
};
// NOTE: name fabricated, the map has no instantiation for this type.
enum E_SMS_EFFECT_ONETIME_INDIRECT /* 2 */ {
PARTICLE_MS_M_TOBIKOMI_C = 0x1D4,
PARTICLE_MS_M_TOBIKOMI_S_C = 0x1D5,
PARTICLE_MS_MARI_RAKUBALL = 0x1D8,
PARTICLE_MS_MARI_RAKUHAMON = 0x1D9,
MAP_POLLUTION_MS_NEWFIRE_B = 0x1DC,
PARTICLE_MS_RAKU_INDAWA = 0x1DA,
PARTICLE_MS_RAKU_KIE = 0x1DB,
MAP_MAP_GATE_MS_GATEHIT_A = 0x1DD,
MAP_MAP_GATE_MS_GATEHIT_B = 0x1DE,
GATEKEEPER_JPA_MS_GKPA_KEMURI = 0x1DF,
GATEKEEPER_JPA_MS_GKPA_KEMURI_W = 0x1E0,
MAP_MAP_MS_OBJUP_SLOPE_B = 0x1E1,
MAP_MAP_MS_OBJUP_MANIYA_B = 0x1E2,
MAP_MAP_MS_OBJUP_TOUDAI_B = 0x1E3,
MAP_MAP_MS_OBJUP_HOTEL_B = 0x1E4,
MAP_MAP_MS_MARE_OBJUP_B = 0x1E5,
};
enum E_SMS_EFFECT_LOOP_INDIRECT /* 3 */ {
PARTICLE_MS_M_HAMON_B = 0x1E8,
PARTICLE_MS_M_MZBHAMON_B = 0x1E9,
SCENE_BTELESA_JPA_MS_BTLS_SPICY_C = 0x1F0,
PARTICLE_MS_TEPPANFIRE_B = 0x1F1,
SCENE_TINKOOPA_JPA_MS_MKP_FIRE_C = 0x1F2,
KOOPA_JPA_MS_KP_FIRE_E = 0x1F3,
FIREWANWAN_JPA_MS_CAN_YUGAMI = 0x1F4,
PARTICLE_MS_MAP_FIRE_C = 0x1F5,
SCENE_MAPOBJ_MS_OBJ_HAMON_B = 0x1F6,
PARTICLE_MS_NPC_HAMON_B = 0x1F7,
PARTICLE_MS_MPK_FIRE_C = 0x1F8,
PARTICLE_MS_GESOSURF_A = 0x1E7,
PARTICLE_MS_M_WATSLIDE_A = 0x1EA,
PARTICLE_MS_MOE_FIRE_C = 0x1ED,
BWAN_JPA_MS_YUGAMI = 0x1EE,
};
// NOTE: doing this makes inlining work out, specializations DON'T.
template <class T> struct FabricatedParticleTypeToFlag;
template <> struct FabricatedParticleTypeToFlag<E_SMS_EFFECT_ONETIME_NORMAL> {
enum { value = TMarioParticleManager::EFFECT_ONETIME_NORMAL };
};
template <> struct FabricatedParticleTypeToFlag<E_SMS_EFFECT_LOOP_NORMAL> {
enum { value = TMarioParticleManager::EFFECT_LOOP_NORMAL };
};
template <> struct FabricatedParticleTypeToFlag<E_SMS_EFFECT_LOOP_INDIRECT> {
enum { value = TMarioParticleManager::EFFECT_LOOP_INDIRECT };
};
// TODO: the fabricated setScale inline is most likely incorrect.
template <class T>
JPABaseEmitter* SMS_EasyEmitParticle(T id, const JGeometry::TVec3<f32>* pos_ptr,
const void* identity,
const JGeometry::TVec3<f32>& scale)
{
JPABaseEmitter* emitter = gpMarioParticleManager->emitAndBindToPosPtr(
id, pos_ptr, FabricatedParticleTypeToFlag<T>::value, identity);
if (emitter)
emitter->setGlobalScale(scale);
return emitter;
}
template <class T>
JPABaseEmitter* SMS_EasyEmitParticle(T id, MtxPtr mtx_ptr, const void* identity,
const JGeometry::TVec3<f32>& scale)
{
JPABaseEmitter* emitter = gpMarioParticleManager->emitAndBindToMtxPtr(
id, mtx_ptr, FabricatedParticleTypeToFlag<T>::value, identity);
if (emitter)
emitter->setGlobalScale(scale);
return emitter;
}
#endif