Something went wrong. Try again.
Base for making Paper Mario (N64) mods, built on the decompilation docs.starhaven.dev/papermario-dx
paper-mario n64
Something went wrong. Try again.
76 kB · 2662 lines
C
at main
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663#pragma once
#include "types.h"#include "common_structs.h"
typedef struct BigSmokePuffFXData { /* 0x00 */ s16 unk_00; /* 0x02 */ s16 unk_02; /* 0x04 */ s16 unk_04; /* 0x06 */ s16 unk_06; /* 0x08 */ s32 unk_08; /* 0x0C */ f32 x; /* 0x10 */ f32 y; /* 0x14 */ f32 z; /* 0x18 */ f32 partX; /* 0x1C */ f32 partY; /* 0x20 */ f32 unk_20; /* 0x24 */ f32 unk_24; /* 0x28 */ PAD(4);} BigSmokePuffFXData; // size = 0x2C
typedef struct LandingDustFXData { /* 0x00 */ u16 type; /* 0x02 */ PAD(2); /* 0x04 */ f32 x; /* 0x08 */ f32 y; /* 0x0C */ f32 z; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; /* 0x18 */ f32 unk_18; /* 0x1C */ f32 unk_1C; /* 0x20 */ f32 unk_20; /* 0x24 */ f32 unk_24; /* 0x28 */ f32 unk_28; /* 0x2C */ f32 unk_2C; /* 0x30 */ f32 unk_30; /* 0x34 */ f32 unk_34; /* 0x38 */ s32 unk_38; /* 0x3C */ s32 unk_3C; /* 0x40 */ s32 unk_40;} LandingDustFXData; // size = 0x44
typedef struct WalkingDustFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ u16 unk_04; /* 0x06 */ PAD(2); /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ f32 unk_10; /* 0x14 */ PAD(0x44); /* 0x58 */ f32 unk_58; /* 0x5C */ f32 unk_5C; /* 0x60 */ f32 unk_60; /* 0x64 */ f32 unk_64; /* 0x68 */ f32 unk_68; /* 0x6C */ s32 unk_6C; /* 0x70 */ s32 unk_70; /* 0x74 */ s32 unk_74;} WalkingDustFXData; // size = 0x78
// Used by both flower_splash and flower_trailtypedef struct FlowerFXData { /* 0x00 */ s32 alive; /* 0x04 */ b16 triggeredByNpc; /* 0x06 */ s16 timeLeft; /* 0x08 */ u8 primAlpha; /* 0x09 */ s8 useAltColor; /* 0x0A */ PAD(2); /* 0x0C */ Vec3f pos; /* 0x18 */ Vec3f scale; /* 0x24 */ Vec3f rot; /* 0x30 */ Mtx transformMtx; /* 0x70 */ f32 velScaleA; /* 0x74 */ f32 velScaleB; /* 0x78 */ f32 visibilityAmt; // when this is zero, the flower can vanish. may have once controlled alpha. /* 0x7C */ f32 unk_7C; /* 0x80 */ f32 integrator[4]; /* 0x90 */ VecXZf vel;} FlowerFXData; // size = 0x98
typedef struct CloudPuffFXData { /* 0x00 */ s32 alive; /* 0x04 */ PAD(2); /* 0x06 */ s16 timeLeft; /* 0x08 */ u8 alpha; /* 0x09 */ PAD(3); /* 0x0C */ Vec3f pos; /* 0x18 */ Vec3f scale; /* 0x24 */ f32 rescaleX; /* 0x28 */ f32 rescaleY; /* 0x2C */ f32 rescalePhase; /* 0x30 */ f32 radialVel; /* 0x34 */ f32 velY; /* 0x38 */ f32 accelY; /* 0x3C */ f32 jerkY; /* 0x40 */ s32 unk_40; /* 0x44 */ f32 dirX; /* 0x48 */ f32 dirZ;} CloudPuffFXData; // size = 0x4C
typedef struct CloudTrailFXData { /* 0x00 */ s32 alive; /* 0x04 */ u16 unk_04; /* 0x06 */ s16 lifetime; /* 0x08 */ u8 alpha; /* 0x09 */ PAD(3); /* 0x0C */ f32 unk_0C; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; /* 0x18 */ f32 unk_18; /* 0x1C */ f32 unk_1C; /* 0x20 */ f32 unk_20; /* 0x24 */ f32 unk_24; /* 0x28 */ f32 unk_28; /* 0x2C */ f32 unk_2C; /* 0x30 */ f32 unk_30; /* 0x34 */ PAD(4); /* 0x38 */ f32 unk_38; /* 0x3C */ f32 unk_3C; /* 0x40 */ f32 unk_40; /* 0x44 */ s32 unk_44; /* 0x48 */ PAD(8);} CloudTrailFXData; // size = 0x50
typedef struct FootprintFXData { /* 0x00 */ s32 alive; /* 0x04 */ PAD(2); /* 0x06 */ s16 lifetime; /* 0x08 */ u8 alpha; /* 0x09 */ PAD(3); /* 0x0C */ Vec3f pos; /* 0x18 */ Vec3f scale; /* unused */ /* 0x24 */ Vec3f rot; /* 0x30 */ Mtx mtx; /* 0x70 */ s32 unk_70; /* 0x74 */ PAD(8); /* 0x7C */ s32 unk_7C; /* 0x80 */ s32 unk_80; /* 0x84 */ s32 unk_84; /* 0x88 */ PAD(8); /* 0x90 */ f32 unk_90; /* 0x94 */ f32 unk_94;} FootprintFXData; // size = 0x98
typedef struct FloatingFlowerFXData { /* 0x00 */ s32 type; /* 0x04 */ Vec3f pos; /* 0x10 */ Vec3f vel; /* 0x1C */ f32 accelY; /* 0x20 */ f32 jerkY; /* 0x24 */ Vec2f rot; /* 0x2C */ Vec2f angularVel; /* 0x34 */ s32 timeLeft; /* 0x38 */ s32 lifetime; /* 0x3C */ s32 unk_3C; /* 0x40 */ s32 unk_40; /* 0x44 */ s32 unk_44;} FloatingFlowerFXData; // size = 0x48
typedef struct SnowflakeFXData { /* 0x00 */ Vec3f pos; /* 0x0C */ f32 unk_0C; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; /* 0x18 */ f32 unk_18; /* 0x1C */ f32 unk_1C; /* 0x20 */ f32 unk_20; /* 0x24 */ f32 unk_24; /* 0x28 */ s32 unk_28;} SnowflakeFXData; // size = 0x2C
enum StarFXTypes { FX_STAR_BACKGROUND = 0, FX_STAR_FOREGROUND = 1, FX_STAR_LARGE_BOUNCING = 2, FX_STAR_SMALL_BOUNCING = 3,};
typedef struct StarFXData { /* 0x000 */ b32 canBounce; /* 0x004 */ Vec3f pos; /* 0x010 */ Vec3f vel; /* 0x01C */ f32 bounceTime; /* 0x020 */ f32 trailAngle; /* 0x024 */ f32 starAngle; /* 0x028 */ f32 unk_28; /* 0x02C */ f32 starAngleVel; /* 0x030 */ s32 timeLeft; /* 0x034 */ f32 projVel; /* 0x038 */ s32 type; /* 0x03C */ s32 trailMatrixPos; /* 0x040 */ Mtx trailMatrices[8]; /* 0x240 */ f32 scale; /* 0x244 */ s32 primR; /* 0x248 */ s32 primG; /* 0x24C */ s32 primB;} StarFXData; // size = 0x250
typedef struct EmoteFXData { /* 0x00 */ s32 type; /* 0x04 */ Vec3f pos; /* 0x10 */ Vec3f offset; // base offset from owner pos; absolute world pos if owner is nullptr /* 0x1C */ f32 pitch; // tilt from vertical /* 0x20 */ f32 radius; // extra distance from owner /* 0x24 */ f32 rotAngle; /* 0x28 */ f32 scale; /* 0x2C */ s32 timeLeft; /* 0x30 */ s32 animType; /* 0x34 */ s32 animTime; // time on current frame /* 0x38 */ s32 frame; // index of current frame /* 0x3C */ Npc* owner; // emote position is in world space if nullptr} EmoteFXData; // size = 0x40
typedef struct SparklesFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ f32 unk_04; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; /* 0x18 */ f32 unk_18; /* 0x1C */ f32 unk_1C; /* 0x20 */ s32 unk_20; /* 0x24 */ s32 unk_24; /* 0x28 */ s32 unk_28; /* 0x2C */ s32 unk_2C;} SparklesFXData; // size = 0x30
enum SparkesFXTypes { FX_SPARKLES_0 = 0, FX_SPARKLES_1 = 1, FX_SPARKLES_2 = 2, FX_SPARKLES_3 = 3, FX_SPARKLES_4 = 4};
typedef struct ShapeSpellFXData { /* 0x00 */ b32 isChild; /* 0x04 */ Vec3f pos; /* 0x10 */ Vec3f offset; /* 0x1C */ Vec3f vel; /* 0x28 */ f32 scale; /* 0x2C */ s32 age; /* 0x30 */ s32 timeLeft; /* 0x34 */ s32 alpha;} ShapeSpellFXData; // size = 0x38
typedef struct GatherEnergyPinkFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ Vec3f posA; /* 0x10 */ Vec3f posB; /* 0x1C */ f32 unk_1C; /* 0x20 */ f32 unk_20; /* 0x24 */ s32 unk_24; /* 0x28 */ s32 unk_28; /* 0x2C */ s32 unk_2C; /* 0x30 */ s32 unk_30; /* 0x34 */ s32 unk_34; /* 0x38 */ s32 unk_38; /* 0x3C */ s32 unk_3C; /* 0x40 */ s32 unk_40; /* 0x44 */ s32 unk_44; /* 0x48 */ s32 unk_48; /* 0x4C */ s32 unk_4C; /* 0x50 */ f32 unk_50; /* 0x54 */ f32 unk_54; /* 0x58 */ f32 unk_58; /* 0x5C */ f32 unk_5C;} GatherEnergyPinkFXData; // size = 0x60
typedef struct DropLeavesFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ f32 unk_04; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; /* 0x18 */ f32 unk_18; /* 0x1C */ f32 unk_1C; /* 0x20 */ f32 unk_20; /* 0x24 */ s32 unk_24; /* 0x28 */ s32 unk_28; /* 0x2C */ s32 unk_2C;} DropLeavesFXData; // size = 0x30
typedef struct DustFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ f32 unk_04; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; /* 0x18 */ s32 unk_18; /* 0x1C */ f32 unk_1C; /* 0x20 */ f32 unk_20; /* 0x24 */ f32 unk_24; /* 0x28 */ f32 unk_28; /* 0x2C */ s32 unk_2C; /* 0x30 */ s32 unk_30; /* 0x34 */ s32 unk_34; /* 0x38 */ s32 unk_38; /* 0x3C */ s32 unk_3C; /* 0x40 */ s32 unk_40; /* 0x44 */ s32 unk_44;} DustFXData; // size = 0x48
typedef struct ShatteringStonesFXData { /* 0x00 */ f32 unk_00; /* 0x04 */ f32 unk_04; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; /* 0x18 */ f32 unk_18; /* 0x1C */ f32 unk_1C; /* 0x20 */ s32 unk_20; /* 0x24 */ s32 unk_24; /* 0x28 */ s32 unk_28; /* 0x2C */ f32 unk_2C; /* 0x30 */ f32 unk_30; /* 0x34 */ f32 unk_34; /* 0x38 */ f32 unk_38; /* 0x3C */ f32 unk_3C;} ShatteringStonesFXData; // size = 0x40
typedef struct SmokeRingFXData { /* 0x00 */ u16 unk_00; /* 0x02 */ PAD(2); /* 0x04 */ f32 unk_04; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; /* 0x18 */ f32 unk_18; /* 0x1C */ f32 unk_1C; /* 0x20 */ f32 unk_20; /* 0x24 */ f32 unk_24; /* 0x28 */ s32 unk_28; /* 0x2C */ s32 unk_2C; /* 0x30 */ f32 unk_30; /* 0x34 */ f32 unk_34; /* 0x38 */ s32 unk_38; /* 0x3C */ s32 unk_3C; /* 0x40 */ s32 unk_40;} SmokeRingFXData; // size = 0x44
enum DamageStarsFXTypes { FX_DAMAGE_STARS_0 = 0, FX_DAMAGE_STARS_1 = 1, FX_DAMAGE_STARS_2 = 2, FX_DAMAGE_STARS_3 = 3, FX_DAMAGE_STARS_4 = 4,};
typedef struct DamageStarsFXData { /* 0x00 */ s32 type; /* 0x04 */ Vec3f pos; /* 0x10 */ Vec3f vel; /* 0x1C */ f32 rollAngle; /* 0x20 */ f32 rollAngleVel; /* 0x24 */ s32 alpha; /* 0x28 */ s32 timeLeft; /* 0x2C */ s32 lifetime;} DamageStarsFXData; // size = 0x30
typedef struct ExplosionFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ Vec3f pos; /* 0x10 */ PAD(0x10); /* 0x20 */ f32 unk_20; /* 0x24 */ f32 unk_24; /* 0x28 */ f32 unk_28; /* 0x2C */ f32 unk_2C; /* 0x30 */ s32 unk_30; /* 0x34 */ s32 unk_34; /* 0x38 */ s32 unk_38;} ExplosionFXData; // size = 0x3C
typedef struct LensFlareFXData { /* 0x00 */ s32 type; /* 0x04 */ Vec3f pos; /* 0x10 */ f32 largeFlareRot; /* 0x14 */ f32 largeFlareRotVel; /* 0x18 */ f32 largeFlareScale; /* 0x1C */ f32 largeFlareScaleVel; /* 0x20 */ f32 smallFlareScale; /* 0x24 */ s32 largeFlareAlpha; /* 0x28 */ s32 smallFlareAlpha; /* 0x2C */ s32 timeLeft; /* 0x30 */ s32 lifetime;} LensFlareFXData; // size = 0x34
typedef struct GotItemOutlineFXData { /* 0x00 */ s32 type; /* 0x04 */ Vec3f pos; /* 0x10 */ s32 lifetime; /* 0x14 */ s32 timeLeft; /* 0x18 */ f32 scale; /* 0x1C */ s32 alpha;} GotItemOutlineFXData; // size = 0x20
typedef struct SpikyWhiteAuraFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ f32 unk_04; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; /* 0x18 */ f32 unk_18; /* 0x1C */ f32 unk_1C; /* 0x20 */ f32 unk_20; /* 0x24 */ s32 unk_24; /* 0x28 */ s32 unk_28; /* 0x2C */ s32 unk_2C;} SpikyWhiteAuraFXData; // size = 0x30
typedef struct SmokeImpactFXData { /* 0x00 */ u16 unk_00; /* 0x02 */ PAD(2); /* 0x04 */ f32 unk_04; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; /* 0x18 */ f32 unk_18; /* 0x1C */ f32 unk_1C; /* 0x20 */ f32 unk_20; /* 0x24 */ s32 unk_24; /* 0x28 */ s32 unk_28; /* 0x2C */ s32 unk_2C; /* 0x30 */ f32 unk_30;} SmokeImpactFXData; // size = 0x34
typedef struct DamageIndicatorFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ Vec3f basePos; /* 0x10 */ Vec3f curPos; /* 0x1C */ Vec3f relPos; /* 0x28 */ f32 radius; /* 0x2C */ s32 alpha; /* 0x30 */ s32 timeLeft; /* 0x34 */ s32 lifetime; /* 0x38 */ f32 scale; /* 0x3C */ s32 damageAmt;} DamageIndicatorFXData; // size = 0x40
typedef struct PurpleRingFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ f32 unk_04; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; /* 0x18 */ f32 unk_18; /* 0x1C */ Matrix4f unk_1C; /* 0x5C */ f32 unk_5C; /* 0x60 */ f32 unk_60; /* 0x64 */ f32 unk_64; /* 0x68 */ s32 unk_68; /* 0x6C */ s32 unk_6C; /* 0x70 */ s32 unk_70; /* 0x74 */ u8 unk_74; /* 0x75 */ u8 unk_75; /* 0x76 */ u8 unk_76; /* 0x77 */ u8 unk_77; /* 0x78 */ u8 unk_78; /* 0x79 */ u8 unk_79; /* 0x7A */ PAD(2);} PurpleRingFXData; // size = 0x7C
enum FlameFXTypes { FX_FLAME_BLUE = 0, FX_FLAME_RED = 1, FX_FLAME_SMALL_BLUE = 2, FX_FLAME_PINK = 3,};
typedef struct FlameFXData { /* 0x00 */ s32 type; /* 0x04 */ Vec3f pos; /* 0x10 */ f32 baseScale; /* 0x14 */ f32 unk_14; /* 0x18 */ s32 unk_18; /* 0x1C */ f32 unk_1C; /* 0x20 */ f32 unk_20; /* 0x24 */ f32 unk_24; /* 0x28 */ f32 unk_28; /* 0x2C */ f32 scaleH; /* 0x30 */ f32 scaleW;} FlameFXData; // size = 0x34
typedef struct StarsBurstFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ f32 unk_04; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; /* 0x18 */ f32 unk_18; /* 0x1C */ PAD(8); /* 0x24 */ f32 unk_24; /* 0x28 */ f32 unk_28; /* 0x2C */ s32 unk_2C; /* 0x30 */ s32 unk_30; /* 0x34 */ s32 unk_34;} StarsBurstFXData; // size = 0x38
typedef struct StarsShimmerFXData { /* 0x00 */ s16 unk_00; /* 0x02 */ s16 state; /* 0x04 */ Vec3f pos; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; /* 0x18 */ f32 unk_18; /* 0x1C */ f32 unk_1C; /* 0x20 */ s32 lifeTime; /* 0x24 */ s32 timeLeft; /* 0x28 */ s32 unk_28;} StarsShimmerFXData; // size = 0x2C
typedef struct RisingBubbleFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ Vec3f pos; /* 0x10 */ f32 unk_10; /* 0x14 */ s32 unk_14; /* 0x18 */ s32 timeLeft; /* 0x1C */ s32 lifeTime; /* 0x20 */ s32 unk_20; /* 0x24 */ f32 unk_24;} RisingBubbleFXData; // size = 0x28
typedef struct RingBlastFXData { /* 0x00 */ u16 unk_00; /* 0x02 */ PAD(2); /* 0x04 */ Vec3f pos; /* 0x10 */ f32 unk_10; /* 0x14 */ s32 timeLeft; /* 0x18 */ s32 lifeTime; /* 0x1C */ s32 unk_1C; /* 0x20 */ f32 unk_20; /* 0x24 */ f32 unk_24; /* 0x28 */ f32 unk_28;} RingBlastFXData; // size = 0x2C
// Likely to be the same as GreenImpactFXData and RedImpactFXDatatypedef struct ShockwaveFXData { /* 0x00 */ u16 unk_00; /* 0x02 */ PAD(2); // likely padding /* 0x04 */ Vec3f pos; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; /* 0x18 */ s32 unk_18; /* 0x1C */ f32 unk_1C; /* 0x20 */ f32 unk_20; /* 0x24 */ f32 unk_24; /* 0x28 */ s32 unk_28; /* 0x2C */ s32 unk_2C; /* 0x30 */ f32 unk_30; /* 0x34 */ f32 unk_34; /* 0x38 */ s32 alpha; /* 0x3C */ f32 unk_3C; /* 0x40 */ f32 unk_40; /* 0x44 */ f32 unk_44; /* 0x48 */ f32 unk_48; /* 0x4C */ s32 unk_4C; /* 0x50 */ Color_RGB8 prim; /* 0x53 */ Color_RGB8 env; /* 0x56 */ PAD(2); // likely padding} ShockwaveFXData; // size = 0x58
typedef struct MusicNoteFXData { /* 0x00 */ s32 type; /* 0x04 */ Vec3f pos; /* 0x10 */ f32 scale; /* 0x14 */ s32 alpha; /* 0x18 */ s32 timeLeft; /* 0x1C */ s32 lifetime; /* 0x20 */ s32 noteType; /* 0x24 */ f32 velX; /* 0x28 */ f32 velY; /* 0x2C */ f32 finalVelX; /* 0x30 */ f32 finalVelY;} MusicNoteFXData; // size = 0x34
typedef struct SmokeBurstFXData { /* 0x00 */ u16 unk_00; /* 0x02 */ PAD(2); /* 0x04 */ Vec3f pos; /* 0x10 */ f32 unk_10; /* 0x14 */ s32 timeLeft; /* 0x18 */ s32 lifeTime; /* 0x1C */ s32 unk_1C; /* 0x20 */ f32 unk_20; /* 0x24 */ Color_RGBA8 rgba;} SmokeBurstFXData; // size = 0x28
typedef struct SweatFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ Vec3f pos; /* 0x10 */ f32 unk_10; /* 0x14 */ PAD(4); /* 0x18 */ f32 unk_18; /* 0x1C */ f32 unk_1C; /* 0x20 */ f32 unk_20; /* 0x24 */ s32 timeLeft;} SweatFXData; // size = 0x28
typedef struct SleepBubbleFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ Vec3f pos; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; /* 0x18 */ f32 unk_18; /* 0x1C */ s32 timeLeft; /* 0x20 */ s32 unk_20; /* 0x24 */ Vec2f points[20]; /* 0xC4 */ f32 unk_C4; /* 0xC8 */ f32 unk_C8;} SleepBubbleFXData; // size = 0xCC
typedef struct WindyLeavesFXData { /* 0x00 */ s32 type; /* 0x04 */ Vec3f unk_04; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; /* 0x18 */ f32 unk_18; /* 0x1C */ f32 unk_1C; /* 0x20 */ f32 unk_20; /* 0x24 */ s32 alpha; /* 0x28 */ s32 unk_28; /* 0x2C */ s32 unk_2C; /* 0x30 */ f32 unk_30; /* 0x34 */ f32 unk_34; /* 0x38 */ f32 unk_38;} WindyLeavesFXData; // size = 0x3C
typedef struct FallingLeavesFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ f32 unk_04; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; /* 0x18 */ f32 unk_18; /* 0x1C */ f32 unk_1C; /* 0x20 */ f32 unk_20; /* 0x24 */ s32 unk_24; /* 0x28 */ s32 unk_28; /* 0x2C */ s32 unk_2C; /* 0x30 */ PAD(4);} FallingLeavesFXData; // size = 0x34
typedef struct StarsSpreadFXData { /* 0x00 */ s16 unk_00; /* 0x02 */ PAD(2); /* 0x04 */ f32 unk_04; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; /* 0x18 */ f32 unk_18; /* 0x1C */ f32 unk_1C; /* 0x20 */ f32 unk_20; /* 0x24 */ s32 unk_24; /* 0x28 */ s32 unk_28; /* 0x2C */ s32 unk_2C; /* 0x30 */ f32 unk_30;} StarsSpreadFXData; // size = 0x34
typedef struct SteamBurstFXData { /* 0x00 */ u16 unk_00; /* 0x02 */ PAD(2); /* 0x04 */ f32 unk_04; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; /* 0x18 */ f32 unk_18; /* 0x1C */ f32 unk_1C; /* 0x20 */ f32 unk_20; /* 0x24 */ s32 unk_24; /* 0x28 */ s32 unk_28; /* 0x2C */ s32 unk_2C; /* 0x30 */ f32 unk_30;} SteamBurstFXData; // size = 0x34
typedef struct StarsOrbitingFXData { /* 0x00 */ s32 type; /* 0x04 */ Vec3f pos; /* 0x10 */ f32 orbitRadius; /* 0x14 */ f32 targetRadius; /* 0x18 */ f32 roll; /* 0x1C */ f32 rollSpinRate; /* 0x20 */ f32 pitch; /* 0x24 */ s32 yaw; /* 0x28 */ s32 enabled;} StarsOrbitingFXData; // size = 0x2C
typedef struct BigSnowflakesFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ f32 unk_04; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; /* 0x18 */ f32 unk_18; /* 0x1C */ f32 unk_1C; /* 0x20 */ f32 unk_20; /* 0x24 */ s32 unk_24; /* 0x28 */ s32 unk_28; /* 0x2C */ s32 unk_2C;} BigSnowflakesFXData; // size = 0x30
typedef struct DebuffFXData { /* 0x00 */ s16 type; /* 0x02 */ PAD(2); /* 0x04 */ Vec3f pos; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; /* 0x18 */ f32 unk_18; /* 0x1C */ f32 scaleY; /* 0x20 */ f32 scaleX; /* 0x24 */ s32 timeLeft; /* 0x28 */ s32 lifetime; /* 0x2C */ f32 rotZ; /* 0x30 */ f32 unk_30; /* 0x34 */ s32 alpha; /* 0x38 */ Color_RGB8 primCol; /* 0x3B */ Color_RGB8 envCol; /* 0x3E */ PAD(2);} DebuffFXData; // size = 0x40
// Likely to be the same as RedImpactFXData and ShockwaveFXDatatypedef struct GreenImpactFXData { /* 0x00 */ u16 unk_00; /* 0x02 */ PAD(2); // likely padding /* 0x04 */ f32 unk_04; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; /* 0x18 */ s32 unk_18; /* 0x1C */ f32 unk_1C; /* 0x20 */ f32 unk_20; /* 0x24 */ f32 unk_24; /* 0x28 */ s32 unk_28; /* 0x2C */ s32 unk_2C; /* 0x30 */ f32 unk_30; /* 0x34 */ f32 unk_34; /* 0x38 */ s32 unk_38; /* 0x3C */ f32 unk_3C; /* 0x40 */ f32 unk_40; /* 0x44 */ f32 unk_44; /* 0x48 */ f32 unk_48; /* 0x4C */ s32 unk_4C; /* 0x50 */ Color_RGB8 unk_50; /* 0x53 */ Color_RGB8 unk_53; /* 0x56 */ PAD(2); // likely padding} GreenImpactFXData; // size = 0x58
typedef struct RadialShimmerFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ f32 unk_04; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; /* 0x18 */ f32 unk_18; /* 0x1C */ f32 unk_1C; /* 0x20 */ f32 unk_20; /* 0x24 */ s32 unk_24; /* 0x28 */ s32 timeLeft; /* 0x2C */ s32 lifeTime; /* 0x30 */ f32 unk_30; /* 0x34 */ f32 unk_34; /* 0x38 */ f32 unk_38; /* 0x3C */ f32 unk_3C; /* 0x40 */ f32 unk_40; /* 0x44 */ f32 unk_44; /* 0x48 */ f32 unk_48; /* 0x4C */ f32 unk_4C; /* 0x50 */ f32 unk_50; /* 0x54 */ f32 unk_54; /* 0x58 */ f32 unk_58; /* 0x5C */ f32 unk_5C; /* 0x60 */ f32 unk_60; /* 0x64 */ f32 unk_64; /* 0x68 */ u8 unk_68; /* 0x69 */ u8 unk_69; /* 0x6A */ u8 unk_6A; /* 0x6B */ u8 unk_6B; /* 0x6C */ u8 unk_6C; /* 0x6D */ u8 unk_6D; /* 0x6E */ PAD(2);} RadialShimmerFXData; // size = 0x70
typedef struct EndingDecalsFXData { /* 0x00 */ s32 type; /* 0x04 */ Vec3f pos; /* 0x10 */ f32 scale; /* 0x14 */ f32 unk_14; /* 0x18 */ s32 haloAlpha; /* 0x1C */ s32 unk_1C; /* 0x20 */ s32 unk_20; /* 0x24 */ u8 unk_24; /* 0x25 */ u8 unk_25; /* 0x26 */ u8 unk_26; /* 0x27 */ u8 unk_27; /* 0x28 */ u8 unk_28; /* 0x29 */ u8 unk_29; /* 0x2A */ PAD(2);} EndingDecalsFXData; // size = 0x2C
typedef struct LightRaysFXData { /* 0x00 */ s32 type; /* 0x04 */ PAD(12); /* 0x10 */ Vec3f pos; /* 0x1C */ f32 unk_1C; /* 0x20 */ f32 unk_20; /* 0x24 */ s32 alpha; /* 0x28 */ s32 timeLeft; /* 0x2C */ s32 lifetime; /* 0x30 */ PAD(4); /* 0x34 */ f32 unk_34; /* 0x38 */ f32 unk_38; /* 0x3C */ f32 unk_3C; /* 0x40 */ f32 unk_40; /* 0x44 */ PAD(4); /* 0x48 */ f32 unk_48; /* 0x4C */ f32 unk_4C; /* 0x50 */ f32 unk_50; /* 0x54 */ f32 unk_54; /* 0x58 */ f32 unk_58; /* 0x5C */ Vec3f rot; /* 0x68 */ f32 unk_68; /* 0x6C */ f32 unk_6C; /* 0x70 */ Vec3f initialRot; /* 0x7C */ s32 unk_7C; /* 0x80 */ f32 unk_80; /* 0x84 */ f32 unk_84; /* 0x88 */ f32 unk_88; /* 0x8C */ f32 unk_8C; /* 0x90 */ s32 unk_90;} LightRaysFXData; // size = 0x94
typedef struct LightningFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ f32 unk_04; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ s32 unk_10; /* 0x14 */ s32 unk_14; /* 0x18 */ s32 unk_18; /* 0x1C */ f32 unk_1C; /* 0x20 */ f32 unk_20; /* 0x24 */ f32 unk_24; /* 0x28 */ f32 unk_28; /* 0x2C */ f32 unk_2C; /* 0x30 */ f32 unk_30; /* 0x34 */ f32 unk_34; /* 0x38 */ f32 unk_38; /* 0x3C */ s32 unk_3C; /* 0x40 */ s32 unk_40; /* 0x44 */ struct EffectInstance* unk_44; /* 0x48 */ struct EffectInstance* unk_48;} LightningFXData; // size = 0x4C
typedef struct FireBreathFXData { /* 0x00 */ s32 type; /* 0x04 */ s32 numChildren; /* 0x08 */ s32 spawnDelay; /* 0x0C */ Vec3f pos; /* 0x18 */ Vec3f initPos; /* 0x24 */ Vec3f endPos; /* 0x30 */ f32 initialScale; /* 0x34 */ f32 targetScale; /* 0x38 */ f32 scale; /* 0x3C */ f32 scaleChangeRate; /* 0x40 */ s32 alpha; /* 0x44 */ s32 duration; /* 0x48 */ s32 timeLeft; /* 0x4C */ s32 lifetime; /* 0x50 */ Vec3f offsetPos; /* 0x5C */ f32 animTime; // each integer value corresponds to a new frame /* 0x60 */ f32 velY; /* 0x64 */ s32 primR; /* 0x68 */ s32 primG; /* 0x6C */ s32 primB; /* 0x70 */ s32 envR; /* 0x74 */ s32 envG; /* 0x78 */ s32 envB;} FireBreathFXData; // size = 0x7C
typedef struct ShimmerBurstFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ f32 unk_04; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; /* 0x18 */ f32 unk_18; /* 0x1C */ f32 unk_1C; /* 0x20 */ f32 unk_20; /* 0x24 */ f32 unk_24; /* 0x28 */ f32 unk_28; /* 0x2C */ f32 unk_2C; /* 0x30 */ s32 unk_30; /* 0x34 */ f32 unk_34; /* 0x38 */ s32 unk_38; /* 0x3C */ s32 unk_3C; /* 0x40 */ s32 unk_40; /* 0x44 */ s32 unk_44; /* 0x48 */ s32 unk_48; /* 0x4C */ s32 unk_4C; /* 0x50 */ s32 unk_50; /* 0x54 */ s32 unk_54; /* 0x58 */ s32 unk_58; /* 0x5C */ s32 unk_5C; /* 0x60 */ f32 unk_60; /* 0x64 */ f32 unk_64; /* 0x68 */ f32 unk_68;} ShimmerBurstFXData; // size = 0x6C
typedef struct EnergyShockwaveFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ f32 unk_04; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ PAD(12); /* 0x1C */ f32 unk_1C; /* 0x20 */ f32 unk_20; /* 0x24 */ s32 unk_24; /* 0x28 */ s32 unk_28; /* 0x2C */ s32 unk_2C; /* 0x30 */ f32 unk_30; /* 0x34 */ f32 unk_34; /* 0x38 */ f32 unk_38; /* 0x3C */ f32 unk_3C; /* 0x40 */ f32 unk_40; /* 0x44 */ f32 unk_44; /* 0x48 */ f32 unk_48; /* 0x4C */ f32 unk_4C; /* 0x50 */ u8 unk_50; /* 0x51 */ u8 unk_51; /* 0x52 */ s8 unk_52; /* 0x53 */ PAD(1);} EnergyShockwaveFXData; // size = 0x54
typedef struct ShimmerWaveFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ f32 unk_04; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; /* 0x18 */ f32 unk_18; /* 0x1C */ f32 unk_1C; /* 0x20 */ f32 unk_20; /* 0x24 */ f32 unk_24; /* 0x28 */ f32 unk_28; /* 0x2C */ f32 unk_2C; /* 0x30 */ s32 unk_30; /* 0x34 */ f32 unk_34; /* 0x38 */ s32 unk_38; /* 0x3C */ s32 unk_3C; /* 0x40 */ s32 unk_40; /* 0x44 */ s32 unk_44; /* 0x48 */ s32 unk_48; /* 0x4C */ s32 unk_4C; /* 0x50 */ s32 unk_50; /* 0x54 */ s32 unk_54; /* 0x58 */ s32 unk_58; /* 0x5C */ s32 unk_5C; /* 0x60 */ f32 unk_60; /* 0x64 */ f32 unk_64; /* 0x68 */ f32 unk_68;} ShimmerWaveFXData; // size = 0x6C
enum AuraFXTypes { FX_AURA_CAPTURE = 0, // star spirit being captured in the intro FX_AURA_RED = 1, // used by Kooper's Fire Shell FX_AURA_BLUE = 2, // used by Final Bowser FX_AURA_GOLD = 3, // used by The Master (final form)};
typedef struct AuraFXData { /* 0x00 */ s32 type; /* 0x04 */ Vec3f posA; /* 0x10 */ Vec3f posB; /* 0x1C */ Vec2f scale; /* 0x24 */ f32 unk_24; /* 0x28 */ s32 primA; /* 0x2C */ s32 fadeTime; /* 0x30 */ s32 lifeTime; /* 0x34 */ f32 unk_34; /* 0x38 */ f32 unk_38; /* 0x3C */ f32 unk_3C; /* 0x40 */ f32 unk_40; /* 0x44 */ f32 unk_44; /* 0x48 */ f32 unk_48; /* 0x4C */ f32 unk_4C; /* 0x50 */ f32 unk_50; /* 0x54 */ f32 unk_54; /* 0x58 */ f32 unk_58; /* 0x5C */ f32 unk_5C; /* 0x60 */ f32 unk_60; /* 0x64 */ f32 renderYaw; /* 0x68 */ u8 primR; /* 0x69 */ u8 primG; /* 0x6A */ u8 primB; /* 0x6B */ u8 envR; /* 0x6C */ u8 envG; /* 0x6D */ u8 engB; /* 0x6E */ u8 engA; /* 0x6F */ PAD(1);} AuraFXData; // size = 0x70
typedef struct BulbGlowFXData { /* 0x00 */ s32 type; /* 0x04 */ Vec3f pos; /* 0x10 */ s32 brightness; /* 0x14 */ s32 timeLeft; /* 0x18 */ s32 lifetime; /* 0x1C */ s32 depthQueryID; /* 0x20 */ s32 colorIdx;} BulbGlowFXData; // size = 0x24
typedef struct Effect3DFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ s32 unk_04; /* 0x08 */ Vec3f pos; /* 0x14 */ Vec3f vel; /* 0x20 */ f32 unk_20; /* 0x24 */ f32 unk_24; /* 0x28 */ f32 unk_28; /* 0x2C */ f32 unk_2C; /* 0x30 */ f32 unk_30; /* 0x34 */ f32 unk_34; /* 0x38 */ f32 unk_38; /* 0x3C */ f32 unk_3C; /* 0x40 */ f32 unk_40; /* 0x44 */ f32 unk_44; /* 0x48 */ f32 unk_48; /* 0x4C */ f32 unk_4C; /* 0x50 */ f32 unk_50; /* 0x54 */ f32 unk_54; /* 0x58 */ s32 unk_58; /* 0x5C */ s32 timeLeft; /* 0x60 */ s32 lifetime; /* 0x64 */ s32 unk_64;} Effect3DFXData; // size = 0x68
typedef struct BlastFXData { /* 0x00 */ s16 unk_00; /* 0x02 */ PAD(2); /* 0x04 */ Vec3f pos; /* 0x10 */ f32 unk_10; /* 0x14 */ s32 timeLeft; /* 0x18 */ s32 unk_18; /* 0x1C */ s32 unk_1C; /* 0x20 */ f32 unk_20; /* 0x24 */ f32 unk_24; /* 0x28 */ f32 unk_28;} BlastFXData; // size = 0x2C
typedef struct FireFlowerFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ s32 unk_04; /* 0x08 */ Vec3f pos; /* 0x14 */ f32 unk_14; /* 0x18 */ f32 unk_18; /* 0x1C */ f32 unk_1C; /* 0x20 */ f32 unk_20; /* 0x24 */ f32 unk_24; /* 0x28 */ f32 unk_28; /* 0x2C */ f32 unk_2C; /* 0x30 */ f32 unk_30; /* 0x34 */ s32 unk_34; /* 0x38 */ s32 unk_38; /* 0x3C */ s32 unk_3C; /* 0x40 */ Vec3i unk_40;} FireFlowerFXData; // size = 0x4C
typedef struct RecoverFXData { /* 0x00 */ s32 type; /* 0x04 */ Vec3f pos; /* 0x10 */ Vec3f vel; /* 0x1C */ f32 angle; /* 0x20 */ s32 unk_20; /* 0x24 */ f32 offsetX; /* 0x28 */ s32 alpha; /* 0x2C */ s32 timeLeft; /* 0x30 */ s32 lifetime; /* 0x34 */ s32 unk_34; /* 0x38 */ f32 scaleX; /* 0x3C */ f32 scaleY; /* 0x40 */ s32 unk_40; /* 0x44 */ s32 unk_44;} RecoverFXData; // size = 0x48
typedef struct DisableXFXData { /* 0x00 */ s32 type; /* 0x04 */ s32 unk_04; /* 0x08 */ Vec3f pos; /* 0x14 */ f32 unk_14; /* 0x18 */ f32 unk_18; /* 0x1C */ f32 unk_1C; /* 0x20 */ f32 unk_20; /* 0x24 */ s32 alpha; /* 0x28 */ s32 unk_28; /* 0x2C */ s32 unk_2C; /* 0x30 */ f32 unk_30; /* 0x34 */ f32 scale; /* 0x38 */ s32 unk_38; /* 0x3C */ s32 koDuration; /* 0x40 */ f32 unk_40; /* 0x44 */ s32 unk_44;} DisableXFXData; // size = 0x48
typedef struct BombetteBreakingFXData { /* 0x00 */ s16 type; /* 0x02 */ s16 treeIndex; /* 0x04 */ f32 unk_04; /* 0x08 */ Vec3f center; /* 0x14 */ Vec3f unk_14; /* 0x20 */ Vec3f unk_20; /* 0x2C */ Vec3f unk_2C; /* 0x38 */ f32 unk_38; /* 0x3C */ f32 unk_3C; /* 0x40 */ f32 unk_40; /* 0x44 */ s32 timeLeft; /* 0x48 */ s32 unk_48; /* 0x4C */ s32 alpha;} BombetteBreakingFXData;
typedef struct FireworkFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ f32 unk_04; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ s32 unk_10; /* 0x14 */ s32 unk_14; /* 0x18 */ PAD(4); /* 0x1C */ f32 unk_1C; /* 0x20 */ s32 unk_20; /* 0x24 */ f32 unk_24; /* 0x28 */ f32 unk_28; /* 0x2C */ s32 unk_2C; /* 0x30 */ s32 unk_30; /* 0x34 */ s32 unk_34; /* 0x38 */ f32 unk_38; /* 0x3C */ u8 unk_3C; /* 0x3D */ u8 unk_3D; /* 0x3E */ u8 unk_3E; /* 0x3F */ u8 unk_3F; /* 0x40 */ u8 unk_40; /* 0x41 */ u8 unk_41; /* 0x42 */ PAD(2);} FireworkFXData; // size = 0x44
typedef struct ConfettiFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ f32 unk_04; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; /* 0x18 */ f32 unk_18; /* 0x1C */ f32 unk_1C; /* 0x20 */ s32 unk_20; /* 0x24 */ s32 unk_24; /* 0x28 */ s32 unk_28; /* 0x2C */ s32 unk_2C; /* 0x30 */ s32 unk_30;} ConfettiFXData; // size = 0x34
typedef struct SnowfallFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ s32 unk_04; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; /* 0x18 */ f32 unk_18; /* 0x1C */ f32 unk_1C; /* 0x20 */ s32 timeLeft; /* 0x24 */ s32 lifeTime; /* 0x28 */ s32 unk_28; /* 0x2C */ s32 unk_2C; /* 0x30 */ s32 unk_30;} SnowfallFXData; // size = 0x34
typedef struct SpinFXData { /* 0x00 */ s32 type; /* 0x04 */ PlayerStatus* player; /* 0x08 */ Vec3f pos; /* 0x14 */ f32 scale; /* 0x18 */ f32 initialScale; /* 0x1C */ s32 alpha; /* 0x20 */ s32 duration; /* 0x24 */ s32 timeLeft; /* 0x28 */ s32 lifetime; /* 0x2C */ Vec3f rot; /* 0x38 */ Vec3f rotVel; /* 0x44 */ Color_RGB8 color; /* 0x47 */ PAD(1);} SpinFXData; // size = 0x48
typedef struct GatherMagicFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ s32 unk_04; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ f32 unk_10; /* 0x14 */ s32 unk_14; /* 0x18 */ s32 unk_18; /* 0x1C */ s32 unk_1C; /* 0x20 */ f32 unk_20; /* 0x24 */ f32 unk_24; /* 0x28 */ f32 unk_28; /* 0x2C */ f32 unk_2C; /* 0x30 */ s32 unk_30; /* 0x34 */ s32 unk_34; /* 0x38 */ s32 unk_38; /* 0x3C */ s32 unk_3C; /* 0x40 */ s32 unk_40; /* 0x44 */ s32 unk_44;} GatherMagicFXData;
typedef struct AttackResultTextFXData { /* 0x00 */ s32 type; /* 0x04 */ s32 unk_04; /* 0x08 */ Vec3f pos; /* 0x14 */ s32 alpha; /* 0x18 */ s32 timeLeft; /* 0x1C */ s32 lifetime; /* 0x20 */ s32 unk_20; /* 0x24 */ b32 isVisible; /* 0x28 */ f32 scale; /* 0x2C */ PAD(4); /* 0x30 */ Vec2f vel;} AttackResultTextFXData; // size = 0x38
typedef struct SmallGoldSparkleFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ s32 unk_04; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ f32 unk_10; /* 0x14 */ s32 unk_14; /* 0x18 */ s32 unk_18; /* 0x1C */ f32 unk_1C; /* 0x20 */ s32 unk_20;} SmallGoldSparkleFXData; // size = 0x24
enum ShockOverlayFXTypes { FX_SHOCK_OVERLAY_SHOCK_HIT = 0, FX_SHOCK_OVERLAY_LIGHTNING_WORLD = 1, FX_SHOCK_OVERLAY_MEGA_SHOCK = 2, FX_SHOCK_OVERLAY_LIGHTNING_BATTLE = 3,};
typedef struct ShockOverlayFXData { /* 0x00 */ s32 type; /* 0x04 */ Vec3f pos; /* 0x10 */ s32 unk_10; /* 0x14 */ s32 unk_14; /* 0x18 */ s32 unk_18; /* 0x1C */ s32 timeLeft; /* 0x20 */ s32 lifetime; /* 0x24 */ f32 unk_24; /* 0x28 */ f32 scaleX; /* 0x2C */ f32 scaleY; /* 0x30 */ Color3i primCol; /* 0x3C */ Color3i envCol;} ShockOverlayFXData; // size = 0x48
typedef struct BalloonFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ f32 unk_04; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; /* 0x18 */ f32 unk_18; /* 0x1C */ s32 unk_1C; /* 0x20 */ s32 unk_20;} BalloonFXData; // size = 0x24
typedef struct FloatingRockFXData { /* 0x00 */ s32 type; /* 0x04 */ Vec3f pos; /* 0x10 */ f32 floorY; /* 0x14 */ Vec3f vel; /* 0x20 */ f32 fallAccel; /* 0x24 */ Vec3f rot; /* 0x30 */ Vec3f rotVel; /* 0x3C */ f32 scale; /* 0x40 */ s32 unk_40; /* 0x44 */ s32 alpha; /* 0x48 */ s32 timeLeft; /* 0x4C */ s32 lifetime;} FloatingRockFXData; // size = 0x50
typedef struct ChompDropFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ f32 unk_04; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; /* 0x18 */ f32 unk_18; /* 0x1C */ s32 unk_1C; /* 0x20 */ s32 unk_20; /* 0x24 */ f32 unk_24; /* 0x28 */ f32 unk_28; /* 0x2C */ s32 unk_2C; /* 0x30 */ s32 unk_30; /* 0x34 */ f32 unk_34; /* 0x38 */ s32 unk_38; /* 0x3C */ s32 unk_3C; /* 0x40 */ s32 unk_40; /* 0x44 */ s32 unk_44;} ChompDropFXData; // size = 0x48
typedef struct QuizmoStageFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ s32 vanishTimer; /* 0x08 */ s32 lifetime; /* 0x0C */ Vec3f origin; /* 0x18 */ s32 microphoneRaiseAmt; /* 0x1C */ s32 rearWallRaiseAmt; /* 0x20 */ s32 leftWallRaiseAmt; /* 0x24 */ s32 rightWallRaiseAmt; /* 0x28 */ s32 podiumRaiseAmt; /* 0x2C */ s32 lightScrollAmt; /* 0x30 */ s32 lightScrollIncrement; /* 0x34 */ s32 lightScrollDelay; /* 0x38 */ s32 unkEffectMode; /* 0x3C */ s32 unk_3C; // stage hidden when == 0xFF /* 0x40 */ PAD(4);} QuizmoStageFXData; // size 0x44
typedef struct RadiatingEnergyOrbFXData { /* 0x00 */ PAD(4); /* 0x04 */ s32 unk_04; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ f32 unk_10; /* 0x14 */ s32 unk_14; /* 0x18 */ s32 unk_18; /* 0x1C */ s32 unk_1C; /* 0x20 */ f32 unk_20; /* 0x24 */ PAD(4); /* 0x28 */ f32 unk_28; /* 0x2C */ f32 unk_2C; /* 0x30 */ f32 unk_30;} RadiatingEnergyOrbFXData; // size = 0x34
#define MOTION_BLUR_FLAME_SAMPLES 4
typedef struct MotionBlurFlameFXData { /* 0x00 */ s32 type; /* 0x04 */ Vec3f basePos; /* 0x10 */ Vec3f posOffset; /* 0x1C */ Vec3f worldPos; // only used by root /* 0x28 */ f32 sampleX[MOTION_BLUR_FLAME_SAMPLES]; /* 0x38 */ f32 sampleY[MOTION_BLUR_FLAME_SAMPLES]; /* 0x48 */ b32 sampleVisible[MOTION_BLUR_FLAME_SAMPLES]; /* 0x58 */ s32 alpha; /* 0x5C */ s32 timeLeft; /* 0x60 */ s32 lifetime; /* 0x64 */ Color3i color;} MotionBlurFlameFXData; // size = 0x70
enum EnergyOrbWaveFXTypes { FX_ENERGY_ORB_WAVE_GREEN_ORB = 0, FX_ENERGY_ORB_WAVE_PINK_ORB = 1, FX_ENERGY_ORB_WAVE_PALE_ORB = 2, FX_ENERGY_ORB_WAVE_GREEN_WAVE = 3, FX_ENERGY_ORB_WAVE_PALE_WAVE = 4, FX_ENERGY_ORB_WAVE_PINK_WAVE = 5, FX_ENERGY_ORB_WAVE_GRAY_WAVE = 6, FX_ENERGY_ORB_WAVE_UNUSED_7 = 7, FX_ENERGY_ORB_WAVE_UNUSED_8 = 8, FX_ENERGY_ORB_WAVE_BLUE_SHRINK = 9,};
typedef struct EnergyOrbWaveFXData { /* 0x00 */ s32 type; /* 0x04 */ Vec3f pos; /* 0x10 */ s32 timeLeft; /* 0x14 */ s32 lifetime; /* 0x18 */ PAD(4); /* 0x1C */ s32 mode; /* 0x20 */ Color3i color; /* 0x2C */ s32 alpha; /* 0x30 */ f32 scale; /* 0x34 */ f32 scaleDelta;} EnergyOrbWaveFXData; // size = 0x38
typedef struct MerlonHouseStarsFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ s32 unk_04; /* 0x08 */ s32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; /* 0x18 */ s32 alpha; /* 0x1C */ f32 unk_1C; /* 0x20 */ f32 unk_20; /* 0x24 */ f32 unk_24; /* 0x28 */ f32 unk_28; /* 0x2C */ f32 unk_2C; /* 0x30 */ f32 unk_30; /* 0x34 */ f32 unk_34; /* 0x38 */ f32 unk_38;} MerlonHouseStarsFXData; // size = 0x3C
#define MAX_QUIZMO_AUDIENCE 10
typedef struct QuizmoAudienceFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ s32 timeLeft; /* 0x08 */ s32 lifeTime; /* 0x0C */ Vec3f pos; /* 0x18 */ s32 primColor; /* 0x1C */ s32 compState[MAX_QUIZMO_AUDIENCE]; /* 0x44 */ s32 compType[MAX_QUIZMO_AUDIENCE]; /* 0x6C */ s32 compPosIdx[MAX_QUIZMO_AUDIENCE]; /* 0x94 */ f32 compMoveMagnitude[MAX_QUIZMO_AUDIENCE]; /* 0xBC */ f32 compX[MAX_QUIZMO_AUDIENCE]; /* 0xE4 */ f32 compY[MAX_QUIZMO_AUDIENCE];} QuizmoAudienceFXData; // size = 0x10C
typedef struct ButterfliesFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ s32 unk_04; /* 0x08 */ s32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; /* 0x18 */ f32 unk_18; /* 0x1C */ f32 unk_1C; /* 0x20 */ f32 unk_20; /* 0x24 */ s32 unk_24; /* 0x28 */ f32 unk_28; /* 0x2C */ s32 unk_2C; /* 0x30 */ s32 unk_30; /* 0x34 */ f32 unk_34; /* 0x38 */ f32 unk_38; /* 0x3C */ f32 unk_3C; /* 0x40 */ f32 unk_40; /* 0x44 */ f32 unk_44;} ButterfliesFXData; // size = 0x48
typedef struct StatChangeFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ Vec3f pos; /* 0x10 */ f32 scale; /* 0x14 */ s32 timeLeft; /* 0x18 */ s32 unk_18; /* 0x1C */ s32 arrowType; /* 0x20 */ s32 arrowValue; /* 0x24 */ s32 unk_24; /* 0x28 */ f32 scaleX; /* 0x2C */ f32 scaleY; /* 0x30 */ f32 unk_30; /* 0x34 */ f32 unk_34; /* 0x38 */ f32 unk_38; /* 0x3C */ f32 unk_3C; /* 0x40 */ f32 unk_40;} StatChangeFXData;
typedef struct SnakingStaticFXData { /* 0x00 */ s32 type; /* 0x04 */ Vec3f pos; /* 0x10 */ s32 timeLeft; /* 0x14 */ s32 lifeTime; /* 0x18 */ s32 unk_18; /* 0x1C */ s32 unk_1C; /* 0x20 */ s32 unk_20; /* 0x24 */ s32 unk_24; /* 0x28 */ Color3i envCol; /* 0x34 */ f32 unk_34; /* 0x38 */ f32 scale; /* 0x3C */ f32 unk_3C; /* 0x40 */ s32 unk_40;} SnakingStaticFXData; // size = 0x44
typedef struct ThunderboltRingFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ Vec3f pos; /* 0x10 */ s32 timeLeft; /* 0x14 */ s32 lifeTime; /* 0x18 */ s32 unk_18; /* 0x1C */ s32 unk_1C; /* 0x20 */ s32 unk_20; /* 0x24 */ s32 unk_24; /* 0x28 */ f32 unk_28; /* 0x2C */ f32 unk_2C; /* 0x30 */ s32 unk_30;} ThunderboltRingFXData; // size = 0x34
typedef struct SquirtFXData { /* 0x000 */ s32 unk_00; /* 0x004 */ f32 unk_04; /* 0x008 */ f32 unk_08; /* 0x00C */ f32 unk_0C; /* 0x010 */ f32 unk_10; /* 0x014 */ f32 unk_14; /* 0x018 */ f32 unk_18; /* 0x01C */ f32 unk_1C; /* 0x020 */ f32 unk_20; /* 0x024 */ f32 unk_24; /* 0x028 */ s32 unk_28; /* 0x02C */ s32 unk_2C; /* 0x030 */ s32 unk_30; /* 0x034 */ s32 unk_34; /* 0x038 */ s32 unk_38; /* 0x03C */ s32 unk_3C; /* 0x040 */ s32 unk_40; /* 0x044 */ s32 unk_44; /* 0x048 */ s32 unk_48; /* 0x04C */ s32 unk_4C; /* 0x050 */ f32 unk_50; /* 0x054 */ s32 unk_54; /* 0x058 */ f32 unk_58[12]; /* 0x088 */ f32 unk_88[12]; /* 0x0B8 */ s32 unk_B8[12]; /* 0x0E8 */ f32 unk_E8[12]; /* 0x118 */ f32 unk_118[12]; /* 0x148 */ f32 unk_148[12]; /* 0x178 */ s32 unk_178[12]; /* 0x1A8 */ s32 unk_1A8[12]; /* 0x1D8 */ u8 unk_1D8[12];} SquirtFXData; // size = 0x1E4
enum WaterBlockFXTypes { FX_WATER_BLOCK_CREATE = 0, FX_WATER_BLOCK_DESTROY = 1,};
#define NUM_WATER_BLOCK_COMPONENTS 4
typedef struct WaterBlockFXData { /* 0x00 */ s32 type; /* 0x04 */ Vec3f pos; /* 0x10 */ s32 timeLeft; /* 0x14 */ s32 lifetime; /* 0x18 */ Color4i color; /* 0x28 */ s32 alpha; /* 0x2C */ f32 unk_2C; /* 0x30 */ f32 unk_30; /* 0x34 */ f32 unk_34; /* 0x38 */ f32 unk_38[NUM_WATER_BLOCK_COMPONENTS]; /* 0x48 */ f32 unk_48[NUM_WATER_BLOCK_COMPONENTS]; /* 0x58 */ f32 unk_58[NUM_WATER_BLOCK_COMPONENTS]; /* 0x68 */ f32 unk_68[NUM_WATER_BLOCK_COMPONENTS]; /* 0x78 */ f32 unk_78[NUM_WATER_BLOCK_COMPONENTS]; /* 0x88 */ s32 unk_88[NUM_WATER_BLOCK_COMPONENTS];} WaterBlockFXData; // size = 0x98
typedef struct WaterfallFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ f32 unk_04; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ s32 unk_10; /* 0x14 */ s32 unk_14; /* 0x18 */ s32 unk_18; /* 0x1C */ s32 unk_1C; /* 0x20 */ s32 unk_20; /* 0x24 */ s32 unk_24; /* 0x28 */ f32 unk_28; /* 0x2C */ f32 unk_2C[12]; /* 0x5C */ f32 unk_5C[12];} WaterfallFXData; // size = 0x8C
enum WaterFountainType { FX_FOUNTAIN_TYPE_INK = 0, FX_FOUNTAIN_TYPE_WATER = 1,};
typedef struct WaterFountainFXData { /* 0x00 */ s32 type; /* 0x04 */ Vec3f pos; /* 0x10 */ s32 timeLeft; /* 0x14 */ s32 lifetime; /* 0x18 */ Color3i primColor; /* 0x24 */ s32 alpha; /* 0x28 */ Color3i envColor; /* 0x34 */ f32 scale; /* 0x38 */ f32 angle; /* 0x3C */ f32 scaleX; /* 0x40 */ f32 scaleY;} WaterFountainFXData; // size = 0x44
typedef struct UnderwaterFXData { /* 0x000 */ s32 unk_00; /* 0x004 */ f32 unk_04; /* 0x008 */ f32 unk_08; /* 0x00C */ f32 unk_0C; /* 0x010 */ s32 timeLeft; /* 0x014 */ s32 lifeTime; /* 0x018 */ f32 unk_18; /* 0x01C */ Color_RGBA8 waterColor; /* 0x020 */ Color_RGB8 unk_20; /* 0x023 */ s8 unk_23[19][13]; /* 0x11A */ s16 unk_11A[19][13];} UnderwaterFXData; // size = 0x308
typedef struct LightningBoltFXData { /* 0x000 */ s32 type; /* 0x004 */ Vec3f tipPos; /* 0x010 */ Vec3f startPos; /* 0x01C */ Vec3f endPos; /* 0x028 */ s32 timeLeft; /* 0x02C */ s32 lifetime; /* 0x030 */ Color4i outerColor; /* 0x040 */ Color3i innerColor; /* 0x04C */ f32 widthScale; /* 0x050 */ f32 boltVertexPosX[12]; /* 0x080 */ f32 boltVertexPosY[12]; /* 0x0B0 */ f32 boltVertexPosZ[12]; /* 0x0E0 */ f32 edgeLength[12]; /* 0x110 */ s32 unk_110; /* 0x114 */ f32 unk_114;} LightningBoltFXData; // size = 0x118
typedef struct WaterSplashFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ Vec3f unk_04; /* 0x10 */ Vec3f unk_10; /* 0x1C */ s32 unk_1C; /* 0x20 */ s32 unk_20; /* 0x24 */ s32 unk_24; /* 0x28 */ s32 unk_28; /* 0x2C */ s32 unk_2C; /* 0x30 */ s32 unk_30; /* 0x34 */ f32 unk_34;} WaterSplashFXData; // size = 0x38
typedef struct SnowmanDollFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ f32 unk_04; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ s32 unk_10; /* 0x14 */ s32 unk_14; /* 0x18 */ s32 unk_18; /* 0x1C */ s32 unk_1C; /* 0x20 */ s32 unk_20; /* 0x24 */ s32 unk_24; /* 0x28 */ f32 unk_28; /* 0x2C */ f32 unk_2C; /* 0x30 */ f32 unk_30; /* 0x34 */ f32 unk_34; /* 0x38 */ f32 unk_38; /* 0x3C */ f32 unk_3C; /* 0x40 */ f32 unk_40; /* 0x44 */ f32 unk_44; /* 0x48 */ f32 unk_48; /* 0x4C */ f32 unk_4C; /* 0x50 */ f32 unk_50; /* 0x54 */ s32 unk_54; /* 0x58 */ s32 unk_58; /* 0x5C */ s32 unk_5C;} SnowmanDollFXData; // size = 0x60
typedef struct FrightJarFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ f32 unk_04; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ s32 unk_10; /* 0x14 */ s32 unk_14; /* 0x18 */ s32 unk_18; /* 0x1C */ s32 unk_1C; /* 0x20 */ s32 unk_20; /* 0x24 */ s32 unk_24; /* 0x28 */ f32 unk_28;} FrightJarFXData; // size = 0x2C
typedef struct StopWatchFXData { /* 0x000 */ s32 type; /* 0x004 */ Vec3f pos; /* 0x010 */ s32 timeLeft; /* 0x014 */ s32 lifetime; /* 0x018 */ Color3i unusedColor; /* 0x024 */ s32 masterAlpha; // overall alpha, controls global fade in/out /* 0x028 */ f32 scale; /* 0x02C */ s32 envAlpha; /* 0x030 */ f32 rippleAmplitude; /* 0x034 */ f32 glyphPosX[10]; // local x offset /* 0x05C */ f32 glyphPosY[10]; // local y offset /* 0x084 */ f32 glyphPosZ[10]; // local z offset /* 0x0AC */ f32 glyphRotX[10]; // glyph pitch /* 0x0D4 */ f32 glyphRotY[10]; // glyph yaw /* 0x0FC */ f32 glyphRotZ[10]; // glyph roll /* 0x124 */ s32 glyphAlpha[10]; /* 0x14C */ s32 glyphDelay[10]; // spawn delay} StopWatchFXData; // size = 0x174
typedef struct Effect63FXData { /* 0x00 */ s32 unk_00; /* 0x04 */ f32 unk_04; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; /* 0x18 */ f32 unk_18; /* 0x1C */ s32 unk_1C; /* 0x20 */ s32 unk_20; /* 0x24 */ s32 unk_24; /* 0x28 */ s32 unk_28; /* 0x2C */ s32 unk_2C; /* 0x30 */ s32 unk_30; /* 0x34 */ s32 unk_34; /* 0x38 */ s32 unk_38; /* 0x3C */ s32 unk_3C; /* 0x40 */ s32 unk_40; /* 0x44 */ s32 unk_44; /* 0x48 */ f32 unk_48; /* 0x4C */ f32 unk_4C; /* 0x50 */ f32 unk_50; /* 0x54 */ f32 unk_54; /* 0x58 */ f32 unk_58; /* 0x5C */ PAD(4); /* 0x60 */ f32 unk_60; /* 0x64 */ f32 unk_64; /* 0x68 */ f32 unk_68; /* 0x6C */ f32 unk_6C; /* 0x70 */ f32 unk_70; /* 0x74 */ f32 unk_74; /* 0x78 */ f32 unk_78;} Effect63FXData; // size = 0x7C
typedef struct ThrowSpinyFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ Vec3f pos; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; /* 0x18 */ f32 unk_18; /* 0x1C */ f32 unk_1C; /* 0x20 */ f32 unk_20; /* 0x24 */ f32 unk_24; /* 0x28 */ s32 life; /* 0x2C */ s32 lifeDuration; /* 0x30 */ s32 unk_30; /* 0x34 */ s32 unk_34; /* 0x38 */ s32 unk_38; /* 0x3C */ s32 rgba; /* 0x40 */ f32 unk_40; /* 0x44 */ f32 unk_44; /* 0x48 */ f32 gravity; /* 0x4C */ f32 unk_4C; /* 0x50 */ f32 yaw; /* 0x54 */ f32 rotSpeed; /* 0x58 */ f32 xScale; /* 0x5C */ f32 yScale; /* 0x60 */ u32 state; /* 0x64 */ s32 unk_64; /* 0x68 */ s32 timeUntilFall; // how long until spiny falls to ground?} ThrowSpinyFXData; // sizeof 0x6C
typedef struct Effect65FXData { /* 0x000 */ s32 variation; /* 0x004 */ f32 unk_04; /* 0x008 */ f32 unk_08; /* 0x00C */ f32 unk_0C; /* 0x010 */ s32 timeLeft; /* 0x014 */ s32 lifeTime; /* 0x018 */ s32 primR; /* 0x01C */ s32 primG; /* 0x020 */ s32 primB; /* 0x024 */ s32 alpha; /* 0x028 */ s32 envR; /* 0x02C */ s32 envG; /* 0x030 */ s32 envB; /* 0x034 */ f32 scale; /* 0x038 */ Vec3f pos; /* 0x044 */ f32 pathJitterX; /* 0x048 */ f32 pathJitterY; /* 0x04C */ f32 pathJitterZ; /* 0x050 */ f32 pathX[30]; /* 0x0C8 */ f32 pathY[30]; /* 0x140 */ f32 pathZ[30]; /* 0x1B8 */ s32 pathTimestamp[30]; /* 0x230 */ s32 pathPointEnabled[30]; // a bool /* 0x2A8 */ s32 lastPointIndex; /* 0x2AC */ f32 pathLength[30];} Effect65FXData; // size = 0x324
#define TUBBA_MINI_HEART_COUNT 25
enum HeartSwarmFXTypes { FX_HEART_SWARM_HIT = 0, FX_HEART_SWARM_MISS = 1,};
typedef struct TubbaHeartAttackFXData { /* 0x000 */ s32 type; /* 0x004 */ f32 centerX; /* 0x008 */ f32 centerY; /* 0x00C */ f32 centerZ; /* 0x010 */ s32 timeLeft; /* 0x014 */ s32 lifetime; /* 0x018 */ s32 primR; /* 0x01C */ s32 primG; /* 0x020 */ s32 primB; /* 0x024 */ s32 primA; /* 0x028 */ f32 overallScale; /* 0x02C */ f32 posX[TUBBA_MINI_HEART_COUNT]; /* 0x090 */ f32 posY[TUBBA_MINI_HEART_COUNT]; /* 0x0F4 */ f32 posZ[TUBBA_MINI_HEART_COUNT]; /* 0x158 */ f32 initialX[TUBBA_MINI_HEART_COUNT]; /* 0x1BC */ f32 initialY[TUBBA_MINI_HEART_COUNT]; /* 0x220 */ f32 initialZ[TUBBA_MINI_HEART_COUNT]; /* 0x284 */ f32 finalX[TUBBA_MINI_HEART_COUNT]; /* 0x2E8 */ f32 finalY[TUBBA_MINI_HEART_COUNT]; /* 0x34C */ f32 finalZ[TUBBA_MINI_HEART_COUNT]; /* 0x3B0 */ f32 scaleX[TUBBA_MINI_HEART_COUNT]; /* 0x414 */ f32 scaleY[TUBBA_MINI_HEART_COUNT]; /* 0x478 */ f32 rotZ[TUBBA_MINI_HEART_COUNT]; /* 0x4DC */ f32 rotXY[TUBBA_MINI_HEART_COUNT]; /* 0x540 */ f32 shrinkVelX[TUBBA_MINI_HEART_COUNT]; /* 0x5A4 */ f32 shrinkVelY[TUBBA_MINI_HEART_COUNT]; /* 0x608 */ f32 shrinkVelZ[TUBBA_MINI_HEART_COUNT]; /* 0x66C */ s32 appearDelay[TUBBA_MINI_HEART_COUNT]; /* 0x6D0 */ s32 state[TUBBA_MINI_HEART_COUNT]; /* 0x734 */ s32 stateTime[TUBBA_MINI_HEART_COUNT];} TubbaHeartAttackFXData; // size = 0x798
#define MAX_WHIRLWIND_SEGMENTS 8
typedef struct WhirlwindFXData { /* 0x000 */ s32 unk_00; /* 0x004 */ Vec3f pos; /* 0x010 */ s32 unk_10; /* 0x014 */ s32 unk_14; /* 0x018 */ s32 primR; /* 0x01C */ s32 primG; /* 0x020 */ s32 primB; /* 0x024 */ s32 primAlpha; /* 0x028 */ s32 envR; /* 0x02C */ s32 envG; /* 0x030 */ s32 envB; /* 0x034 */ f32 unk_34; /* 0x038 */ f32 unk_38[MAX_WHIRLWIND_SEGMENTS]; /* 0x058 */ f32 unk_58[MAX_WHIRLWIND_SEGMENTS]; /* 0x078 */ f32 unk_78[MAX_WHIRLWIND_SEGMENTS]; /* 0x098 */ f32 unk_98[MAX_WHIRLWIND_SEGMENTS]; /* 0x0B8 */ f32 unk_B8[MAX_WHIRLWIND_SEGMENTS]; /* 0x0D8 */ f32 unk_D8[MAX_WHIRLWIND_SEGMENTS]; /* 0x0F8 */ f32 unk_F8[MAX_WHIRLWIND_SEGMENTS]; /* 0x118 */ f32 unk_118[MAX_WHIRLWIND_SEGMENTS]; /* 0x138 */ f32 unk_138; /* 0x13C */ f32 unk_13C; /* 0x140 */ f32 unk_140;} WhirlwindFXData; // size = 0x144
// Likely to be the same as GreenImpactFXData and ShockwaveFXDatatypedef struct RedImpactFXData { /* 0x00 */ u16 unk_00; /* 0x02 */ PAD(2); // likely padding /* 0x04 */ f32 unk_04; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; /* 0x18 */ s32 unk_18; /* 0x1C */ f32 unk_1C; /* 0x20 */ f32 unk_20; /* 0x24 */ f32 unk_24; /* 0x28 */ s32 unk_28; /* 0x2C */ s32 unk_2C; /* 0x30 */ f32 unk_30; /* 0x34 */ f32 unk_34; /* 0x38 */ s32 unk_38; /* 0x3C */ f32 unk_3C; /* 0x40 */ f32 unk_40; /* 0x44 */ f32 unk_44; /* 0x48 */ f32 unk_48; /* 0x4C */ s32 unk_4C; /* 0x50 */ Color_RGB8 unk_50; /* 0x53 */ Color_RGB8 unk_53; /* 0x56 */ PAD(2); // likely padding} RedImpactFXData; // size = 0x58
typedef struct FloatingCloudPuffFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ f32 unk_04; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ s32 unk_10; /* 0x14 */ s32 unk_14; /* 0x18 */ s32 unk_18; /* 0x1C */ s32 unk_1C; /* 0x20 */ s32 unk_20; /* 0x24 */ s32 unk_24; /* 0x28 */ s32 unk_28; /* 0x2C */ s32 unk_2C; /* 0x30 */ s32 unk_30; /* 0x34 */ f32 unk_34; /* 0x38 */ f32 unk_38;} FloatingCloudPuffFXData; // size = 0x3C
typedef struct EnergyInOutFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ Vec3f pos; /* 0x10 */ s32 unk_10; /* 0x14 */ s32 unk_14; /* 0x18 */ s32 unk_18; /* 0x1C */ s32 unk_1C; /* 0x20 */ s32 unk_20; /* 0x24 */ s32 unk_24; /* 0x28 */ s32 unk_28; /* 0x2C */ s32 unk_2C; /* 0x30 */ s32 unk_30; /* 0x34 */ f32 scale; /* 0x38 */ f32 unk_38; /* 0x3C */ f32 unk_3C; /* 0x40 */ f32 unk_40; /* 0x44 */ f32 unk_44;} EnergyInOutFXData; // size = 0x48
typedef struct Effect6BFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ Vec3f pos; /* 0x10 */ PAD(12); /* 0x1C */ s32 unk_1C; /* 0x20 */ s32 unk_20; /* 0x24 */ PAD(8); /* 0x2C */ s32 unk_2C; /* 0x30 */ s32 unk_30; /* 0x34 */ f32 scale; /* 0x38 */ f32 unk_38; /* 0x3C */ s32 unk_3C; /* 0x40 */ PAD(4);} Effect6BFXData; // size = 0x44
typedef struct TattleWindowFXData { /* 0x00 */ s32 type; /* 0x04 */ Vec3f pos; /* 0x10 */ s32 timeLeft; /* 0x14 */ s32 unk_14; /* 0x18 */ f32 unk_18; /* 0x1C */ f32 scale; /* 0x20 */ Vec3f rot; /* 0x2C */ Vec2f offset; /* 0x34 */ Vec2bu closeAmt; /* 0x36 */ PAD(2);} TattleWindowFXData; // size = 0x38
typedef struct ShinyFlareFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ Vec3f pos; /* 0x10 */ s32 timeLeft; /* 0x14 */ s32 lifeTime; /* 0x18 */ s32 unk_18; /* 0x1C */ s32 unk_1C; /* 0x20 */ s32 unk_20; /* 0x24 */ s32 unk_24; /* 0x28 */ f32 unk_28; /* 0x2C */ f32 unk_2C;} ShinyFlareFXData; // size = 0x30
typedef struct HuffPuffBreathFXData { /* 0x00 */ s32 type; /* 0x04 */ Vec3f pos; /* 0x10 */ s32 timeLeft; /* 0x14 */ s32 lifeTime; /* 0x18 */ Color4i primCol; /* 0x28 */ Color4i envCol; /* 0x38 */ f32 texOffsetX; /* 0x3C */ f32 speedX; /* 0x40 */ f32 texOffsetY; /* 0x44 */ f32 speedY; /* 0x48 */ f32 angle; /* 0x4C */ f32 scale;} HuffPuffBreathFXData; // size = 0x50
typedef struct ColdBreathFXData { /* 0x00 */ s32 type; /* 0x04 */ Vec3f pos; /* 0x10 */ s32 timeLeft; /* 0x14 */ s32 lifetime; /* 0x18 */ Color4i primCol; /* 0x28 */ Color4i envCol; /* 0x38 */ f32 unk_38; /* 0x3C */ f32 unk_3C; /* 0x40 */ f32 scale;} ColdBreathFXData; // size = 0x44
typedef struct EmbersFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ f32 unk_04; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; /* 0x18 */ s32 timeLeft; /* 0x1C */ s32 lifetime; /* 0x20 */ s32 unk_20; /* 0x24 */ s32 unk_24; /* 0x28 */ s32 unk_28; /* 0x2C */ s32 unk_2C; /* 0x30 */ s32 unk_30; /* 0x34 */ s32 unk_34; /* 0x38 */ s32 unk_38; /* 0x3C */ s32 unk_3C; /* 0x40 */ f32 unk_40; /* 0x44 */ f32 unk_44; /* 0x48 */ f32 unk_48; /* 0x4C */ f32 unk_4C; /* 0x50 */ f32 unk_50; /* 0x54 */ f32 unk_54; /* 0x58 */ f32 unk_58; /* 0x5C */ f32 unk_5C; /* 0x60 */ f32 unk_60; /* 0x64 */ s32 unk_64; /* 0x68 */ f32 unk_68; /* 0x6C */ f32 unk_6C;} EmbersFXData; // size = 0x70
typedef struct HieroglyphsFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ Vec3f pos; /* 0x10 */ s32 timeLeft; /* 0x14 */ s32 lifeTime; /* 0x18 */ s32 unk_18; /* 0x1C */ s32 unk_1C; /* 0x20 */ s32 unk_20; /* 0x24 */ s32 unk_24; /* 0x28 */ s32 unk_28; /* 0x2C */ s32 unk_2C; /* 0x30 */ s32 unk_30; /* 0x34 */ s32 unk_34; /* 0x38 */ f32 unk_38;} HieroglyphsFXData; // size = 0x3C
typedef struct MiscParticlesFXData { /* 0x00 */ s32 variation; /* 0x04 */ Vec3f pos; /* 0x10 */ f32 scaleX; /* 0x14 */ f32 scaleY; /* 0x18 */ f32 unk_18; /* 0x1C */ f32 unk_1C; /* 0x20 */ PAD(4); /* 0x24 */ f32 unk_24; /* 0x28 */ f32 unk_28; /* 0x2C */ s32 animTime; /* 0x30 */ s32 timeLeft; /* 0x34 */ s32 lifetime; /* 0x38 */ Color4i innerColor; /* 0x48 */ Color4i glowColor; /* 0x58 */ f32 scale; /* 0x5C */ f32 unk_5C; /* 0x60 */ f32 unk_60;} MiscParticlesFXData; // size = 0x64
typedef struct StaticStatusFXData { /* 0x00 */ s32 type; /* 0x04 */ Vec3f pos; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; /* 0x18 */ f32 unk_18; /* 0x1C */ f32 unk_1C; /* 0x20 */ s32 frame; // not visible when negative /* 0x24 */ f32 rot; /* 0x28 */ s32 timeLeft; /* 0x2C */ s32 lifetime; /* 0x30 */ s32 alpha; /* 0x34 */ f32 scale;} StaticStatusFXData; // size = 0x38
typedef struct MovingCloudFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ f32 unk_04; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; /* 0x18 */ f32 unk_18; /* 0x1C */ s32 unk_1C; /* 0x20 */ s32 unk_20; /* 0x24 */ s32 unk_24; /* 0x28 */ s32 unk_28; /* 0x2C */ s32 unk_2C; /* 0x30 */ s32 unk_30; /* 0x34 */ s32 unk_34; /* 0x38 */ s32 unk_38; /* 0x3C */ s32 unk_3C; /* 0x40 */ s32 unk_40; /* 0x44 */ f32 unk_44;} MovingCloudFXData; // size = 0x48
typedef struct StarWarpFXData { /* 0x00 */ s32 type; /* 0x04 */ Vec3f pos; /* 0x10 */ s32 timeLeft; /* 0x14 */ s32 lifetime; /* 0x18 */ Color3i primCol; /* 0x24 */ s32 fadeAlpha; /* 0x28 */ Color3i envCol; /* 0x34 */ s32 curPrimAlpha; /* 0x38 */ s32 masterAlpha; /* 0x3C */ f32 scale; /* 0x40 */ Vec2f texPanMain; /* 0x48 */ Vec2f texVelMain; /* 0x50 */ Vec2f texPanAux; /* 0x58 */ Vec2f texVelAux; /* 0x60 */ f32 minPrimAlpha; /* 0x64 */ f32 maxPrimAlpha; /* 0x68 */ Vec2f targetTexVelMain; /* 0x70 */ Vec2f targetTexVelAux; /* 0x78 */ f32 targetMinPrimAlpha; /* 0x7C */ f32 targetMaxPrimAlpha;} StarWarpFXData; // size = 0x80
#define ROCKET_BUF_SIZE 4
typedef struct FireworkRocketFXData { /* 0x00 */ s32 variation; /* 0x04 */ Vec3f pos; /* 0x10 */ Vec3f vel; /* 0x1C */ s32 timeLeft; /* 0x20 */ s32 lifeTime; /* 0x24 */ s32 r; /* 0x28 */ s32 g; /* 0x2C */ s32 b; /* 0x30 */ s32 minBlurAlpha; /* 0x34 */ s32 unk_34; /* 0x38 */ s32 unk_38; /* 0x3C */ s32 unk_3C; /* 0x40 */ s32 unk_40; /* 0x44 */ f32 radius; /* 0x48 */ f32 maxRadius; /* 0x4C */ s32 isExploded; /* 0x50 */ f32 rocketX[ROCKET_BUF_SIZE]; /* 0x60 */ f32 rocketY[ROCKET_BUF_SIZE]; /* 0x70 */ f32 rocketZ[ROCKET_BUF_SIZE]; /* 0x80 */ f32 rocketVelX[ROCKET_BUF_SIZE]; /* 0x90 */ f32 rocketVelY[ROCKET_BUF_SIZE]; /* 0xA0 */ f32 rocketVelZ[ROCKET_BUF_SIZE];} FireworkRocketFXData; // size = 0xB0
typedef struct PeachStarBeamSpirit { /* 0x00 */ s32 flags; /* 0x04 */ Vec3f pos; /* 0x10 */ Vec3f lockedPos;} PeachStarBeamSpirit; // size = 0x1C
typedef struct PeachStarBeamFXData { /* 0x00 */ s32 type; /* 0x04 */ Vec3f pos; /* 0x10 */ s32 timeLeft; /* 0x14 */ s32 lifetime; /* 0x18 */ s32 primR; /* 0x1C */ s32 primG; /* 0x20 */ s32 primB; /* 0x24 */ s32 beamAlpha; /* 0x28 */ s32 envR; /* 0x2C */ s32 envG; /* 0x30 */ s32 envB; /* 0x34 */ s32 envA; /* 0x38 */ f32 beamScale; /* 0x3C */ s32 unk_3C; /* 0x40 */ f32 rotSpeed; /* 0x44 */ f32 rotAngle; /* 0x48 */ f32 circleRadius; /* 0x4C */ Vec3f circleCenter; /* 0x58 */ f32 twinkYOffset; /* 0x5C */ PeachStarBeamSpirit spirits[8];} PeachStarBeamFXData; // size = 0x13C
typedef struct ChapterChangeFXData { /* 0x00 */ s32 type; /* 0x04 */ Vec2f chapterPos; /* 0x0C */ f32 unused_0C; /* 0x10 */ Vec2f endOfPos; /* 0x18 */ s32 timeLeft; /* 0x1C */ s32 lifetime; /* 0x20 */ Color4i primCol; /* 0x30 */ Color4i envCol; /* 0x40 */ Vec2i msgPos; /* 0x48 */ s32 msgWidth; /* 0x4C */ s32 msgHeight; /* 0x50 */ f32 scale; // unused /* 0x54 */ MsgID msgID;} ChapterChangeFXData; // size = 0x58
typedef struct IceShardFXData { /* 0x00 */ s32 type; /* 0x04 */ Vec3f pos; /* 0x10 */ s32 timeLeft; /* 0x14 */ s32 lifetime; /* 0x18 */ Color4i primCol; /* 0x28 */ Color4i envCol; /* 0x38 */ f32 scale; /* 0x3C */ f32 rot; /* 0x40 */ f32 angularVel; /* 0x44 */ f32 animFrame; /* 0x48 */ f32 animRate; /* 0x4C */ Vec3f vel; /* 0x58 */ f32 gravAccel;} IceShardFXData; // size = 0x5C
typedef struct SpiritCardFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ Vec3f pos; /* 0x10 */ s32 unk_10; /* 0x14 */ s32 unk_14; /* 0x18 */ f32 unk_18; /* 0x1C */ struct EffectInstance* child; /* 0x20 */ f32 unk_20; /* 0x24 */ f32 yaw; /* 0x28 */ PAD(12); /* 0x34 */ u8 chapter; /* 0x35 */ PAD(3);} SpiritCardFXData; // size = 0x38
#define MAX_LIL_OINKS 11
enum LilOinkFlags { LIL_OINK_FLAG_VISIBLE = 1, LIL_OINK_FLAG_ANIM_CHANGED = 2,};
enum LilOinkTypes { LIL_OINK_TYPE_BLACK = 0, LIL_OINK_TYPE_WHITE = 1, LIL_OINK_TYPE_PINK = 2, LIL_OINK_TYPE_PIKACHU = 3, LIL_OINK_TYPE_SHROOM = 4, LIL_OINK_TYPE_FLOWER = 5, LIL_OINK_TYPE_STAR = 6, LIL_OINK_TYPE_QUESTION = 7, LIL_OINK_TYPE_SILVER = 8, LIL_OINK_TYPE_GOLD = 9,};
enum LilOinkAnims { LIL_OINK_ANIM_0 = 0, LIL_OINK_ANIM_1 = 1, LIL_OINK_ANIM_2 = 2, LIL_OINK_ANIM_3 = 3, LIL_OINK_ANIM_4 = 4, LIL_OINK_ANIM_5 = 5,};
typedef struct LilOinkFXData { /* 0x000 */ s32 timeLeft; /* 0x004 */ s32 lifetime; /* 0x008 */ s32 flags[MAX_LIL_OINKS]; /* 0x034 */ f32 x[MAX_LIL_OINKS]; /* 0x060 */ f32 y[MAX_LIL_OINKS]; /* 0x08C */ f32 z[MAX_LIL_OINKS]; /* 0x0B8 */ f32 rot[MAX_LIL_OINKS]; /* 0x0E4 */ u8 type[MAX_LIL_OINKS]; /* 0x0EF */ s8 nextAnim[MAX_LIL_OINKS]; /* 0x0FA */ u8 anim[MAX_LIL_OINKS]; /* 0x105 */ u8 gfxFrame[MAX_LIL_OINKS]; /* 0x110 */ f32 jumpOffset[MAX_LIL_OINKS]; /* 0x13C */ s8 animTime[MAX_LIL_OINKS]; /* 0x147 */ PAD(1);} LilOinkFXData; // size = 0x148
enum { CARD_RING_STATE_IDLE = 0, CARD_RING_STATE_CAPTURE_INIT = 1, CARD_RING_STATE_CAPTURE = 2, CARD_RING_STATE_GATHER_INIT = 3, CARD_RING_STATE_GATHER = 4, CARD_RING_STATE_DONE = 5,};
typedef struct SomethingRotatingFXData { /* 0x00 */ s32 type; /* 0x04 */ Vec3f pos; /* 0x10 */ s32 timeLeft; /* 0x14 */ s32 lifetime; /* 0x18 */ f32 scale; /* 0x1C */ f32 tiltAngle; /* 0x20 */ f32 spinAngle; /* 0x24 */ u8 primAlpha; /* 0x25 */ u8 envAlpha; /* 0x26 */ Color_RGB8 env; /* 0x29 */ u8 state; /* 0x2A */ PAD(2); /* 0x2C */ f32 radius;} SomethingRotatingFXData; // size = 0x30
typedef struct BreakingJunkFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ Vec3f pos; /* 0x10 */ Vec3f vel; /* 0x1C */ s32 timeLeft; /* 0x20 */ s32 lifeTime; /* 0x24 */ f32 scale; /* 0x28 */ f32 rot; /* 0x2C */ s16 primR; /* 0x2E */ s16 primG; /* 0x30 */ s16 primB; /* 0x32 */ s16 primA; /* 0x34 */ s16 envR; /* 0x36 */ s16 envG; /* 0x38 */ s16 envB; /* 0x3A */ s16 envA;} BreakingJunkFXData; // size = unknown
enum { FX_BUFF_DATA_WATER_BLOCK = 0, FX_BUFF_DATA_CLOUD_NINE = 1, FX_BUFF_DATA_TURBO_CHARGE = 2,};
typedef struct BuffData { /* 0x00 */ s16 alpha; /* 0x02 */ s16 turnsDisplay; /* 0x04 */ s16 turnsLeft; /* 0x06 */ s16 state; /* 0x08 */ s16 stateTimer;} BuffData; // size = 0xA
typedef struct PartnerBuffFXData { /* 0x00 */ s16 useRandomValues; /* 0x02 */ s16 visible; /* 0x04 */ s32 timeLeft; /* 0x08 */ s32 lifeTime; /* 0x0C */ BuffData unk_0C[3]; /* 0x2A */ PAD(2);} PartnerBuffFXData; // size = 0x2C
typedef struct QuizmoAssistantFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ Vec3f pos; /* 0x10 */ s32 vanishTimer; /* 0x14 */ s32 lifetime; /* 0x18 */ s32 fadeInAmt; // 0 = all-black, FF = fully-visible /* 0x1C */ s32 anim;} QuizmoAssistantFXData; // size = 0x20
typedef struct IcePillarFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ Vec3f pos; /* 0x10 */ s32 timeLeft; /* 0x14 */ s32 lifeTime; /* 0x18 */ Color_RGBA8 prim; /* 0x1C */ Color_RGBA8 env; /* 0x20 */ f32 scale; /* 0x24 */ s8 unk_24; /* 0x25 */ s8 unk_25; /* 0x26 */ PAD(2); /* 0x28 */ struct EffectInstance* miscParticles;} IcePillarFXData; // size = 0x2C
// sun shine directionsenum SunFXDir { FX_SUN_FROM_LEFT = 0, FX_SUN_FROM_RIGHT = 1,};
typedef struct SunFXData { /* 0x00 */ s32 shineFromRight; /* 0x04 */ Vec3f pos; // does nothing /* 0x10 */ s32 timeLeft; /* 0x14 */ s32 lifeTime; /* 0x18 */ Color_RGB8 primColor; /* 0x1B */ Color_RGBA8 envColor; /* 0x1F */ PAD(1); /* 0x20 */ f32 texScrollAmt[5]; /* 0x34 */ f32 unk_34; /* 0x38 */ s32 alpha; /* 0x3C */ s32 targetAlpha;} SunFXData; // size = 0x40
enum StarSpiritsEnergyState { STAR_SPIRITS_ENERGY_STATE_PULSE = 0, STAR_SPIRITS_ENERGY_STATE_EXPAND = 1, STAR_SPIRITS_ENERGY_STATE_CONTRACT = 4, STAR_SPIRITS_ENERGY_STATE_DONE = 5, STAR_SPIRITS_ENERGY_STATE_EXPAND_LONG = 100,};
typedef struct StarSpiritsEnergyFXData { /* 0x00 */ s32 moveMode; /* 0x04 */ s32 type; /* 0x08 */ Vec3f pos; /* 0x14 */ s32 timeLeft; /* 0x18 */ s32 lifetime; /* 0x1C */ Color3i primColor; /* 0x28 */ s32 fadeAlpha; /* 0x2C */ Color4i envColor; /* 0x3C */ f32 scale; /* 0x40 */ f32 layerScale[4]; // scale for each layer of the effect /* 0x50 */ s32 layerAlpha[4]; // alpha for each layer of the effect /* 0x60 */ s32 state; /* 0x64 */ s32 stateTime;} StarSpiritsEnergyFXData; // size = 0x68
typedef struct PinkSparklesFXData { /* 0x00 */ s32 unk_00; /* 0x04 */ f32 unk_04; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ f32 unk_10; /* 0x14 */ f32 unk_14; /* 0x18 */ f32 unk_18; /* 0x1C */ s32 unk_1C; /* 0x20 */ s32 unk_20; /* 0x24 */ f32 unk_24; /* 0x28 */ s32 unk_28;} PinkSparklesFXData; // size = 0x2C
typedef struct StarOutlineFXData { /* 0x00 */ s16 unk_00; /* 0x02 */ s16 unk_02; /* 0x04 */ Vec3f pos; /* 0x10 */ s32 timeLeft; /* 0x14 */ s32 lifeTime; /* 0x18 */ s32 unk_18; /* 0x1C */ s32 unk_1C; /* 0x20 */ s32 unk_20; /* 0x24 */ s32 unk_24; /* 0x28 */ s32 unk_28; /* 0x2C */ s32 unk_2C; /* 0x30 */ s32 unk_30; /* 0x34 */ s32 unk_34; /* 0x38 */ f32 unk_38; /* 0x3C */ Vec3f unk_3C; /* 0x48 */ f32 unk_48; /* 0x4C */ f32 unk_4C; /* 0x50 */ f32 unk_50; /* 0x54 */ f32 unk_54;} StarOutlineFXData; // size = 0x58
typedef struct Effect86FXData { /* 0x00 */ s32 unk_00; /* 0x04 */ f32 unk_04; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ s32 unk_10; /* 0x14 */ s32 unk_14; /* 0x18 */ s32 unk_18; /* 0x1C */ s32 unk_1C; /* 0x20 */ s32 unk_20; /* 0x24 */ s32 unk_24; /* 0x28 */ s32 unk_28; /* 0x2C */ s32 unk_2C; /* 0x30 */ s32 unk_30; /* 0x34 */ f32 unk_34;} Effect86FXData; // size = 0x38
typedef union { s32* any; struct Effect00FXData* unk_00; struct BigSmokePuffFXData* bigSmokePuff; struct Effect02FXData* unk_02; struct Effect03FXData* unk_03; struct Effect04FXData* unk_04; struct Effect05FXData* unk_05; struct LandingDustFXData* landingDust; struct WalkingDustFXData* walkingDust; struct FlowerFXData* flowerSplash; // note: shared struct FlowerFXData* flowerTrail; // note: shared struct CloudPuffFXData* cloudPuff; struct CloudTrailFXData* cloudTrail; struct FootprintFXData* footprint; struct FloatingFlowerFXData* floatingFlower; struct SnowflakeFXData* snowflake; struct StarFXData* star; struct EmoteFXData* emote; struct SparklesFXData* sparkles; struct ShapeSpellFXData* shapeSpell; struct GatherEnergyPinkFXData* gatherEnergyPink; struct DropLeavesFXData* dropLeaves; struct DustFXData* dust; struct ShatteringStonesFXData* shatteringStones; struct SmokeRingFXData* smokeRing; struct DamageStarsFXData* damageStars; struct ExplosionFXData* explosion; struct LensFlareFXData* lensFlare; struct GotItemOutlineFXData* gotItemOutline; struct SpikyWhiteAuraFXData* spikyWhiteAura; struct SmokeImpactFXData* smokeImpact; struct DamageIndicatorFXData* damageIndicator; struct PurpleRingFXData* purpleRing; struct FlameFXData* flame; struct StarsBurstFXData* starsBurst; struct StarsShimmerFXData* starsShimmer; struct RisingBubbleFXData* risingBubble; struct RingBlastFXData* ringBlast; struct ShockwaveFXData* shockwave; struct MusicNoteFXData* musicNote; struct SmokeBurstFXData* smokeBurst; struct SweatFXData* sweat; struct SleepBubbleFXData* sleepBubble; struct Unk2AFXData* unk_2A; struct WindyLeavesFXData* windyLeaves; struct FallingLeavesFXData* fallingLeaves; struct StarsSpreadFXData* starsSpread; struct SteamBurstFXData* steamBurst; struct StarsOrbitingFXData* starsOrbiting; struct BigSnowflakesFXData* bigSnowflakes; struct DebuffFXData* debuff; struct GreenImpactFXData* greenImpact; struct RadialShimmerFXData* radialShimmer; struct EndingDecalsFXData* endingDecals; struct LightRaysFXData* lightRays; struct LightningFXData* lightning; struct FireBreathFXData* fireBreath; struct ShimmerBurstFXData* shimmerBurst; struct EnergyShockwaveFXData* energyShockwave; struct ShimmerWaveFXData* shimmerWave; struct AuraFXData* aura; struct BulbGlowFXData* bulbGlow; struct Effect3DFXData* whaleSpout; struct BlastFXData* blast; struct FireFlowerFXData* fireFlower; struct RecoverFXData* recover; struct DisableXFXData* disableX; struct BombetteBreakingFXData* bombetteBreaking; struct FireworkFXData* firework; struct ConfettiFXData* confetti; struct SnowfallFXData* snowfall; struct SpinFXData* spin; struct GatherMagicFXData* gatherMagic; struct AttackResultTextFXData* attackResultText; struct SmallGoldSparkleFXData* smallGoldSparkle; struct ShockOverlayFXData* flashingBoxShockwave; struct BalloonFXData* balloon; struct FloatingRockFXData* floatingRock; struct ChompDropFXData* chompDrop; struct QuizmoStageFXData* quizmoStage; struct RadiatingEnergyOrbFXData* radiatingEnergyOrb; void* quizmoAnswer; struct MotionBlurFlameFXData* motionBlurFlame; struct EnergyOrbWaveFXData* energyOrbWave; struct MerlonHouseStarsFXData* merlonHouseStars; struct QuizmoAudienceFXData* quizmoAudience; struct ButterfliesFXData* butterflies; struct StatChangeFXData* statChange; struct SnakingStaticFXData* snakingStatic; struct ThunderboltRingFXData* thunderboltRing; struct SquirtFXData* squirt; struct WaterBlockFXData* waterBlock; struct WaterfallFXData* waterfall; struct WaterFountainFXData* waterFountain; struct UnderwaterFXData* underwater; struct LightningBoltFXData* lightningBolt; struct WaterSplashFXData* waterSplash; struct SnowmanDollFXData* snowmanDoll; struct FrightJarFXData* frightJar; struct StopWatchFXData* stopWatch; struct Effect63FXData* unk_63; struct ThrowSpinyFXData* throwSpiny; struct Effect65FXData* unk_65; struct TubbaHeartAttackFXData* tubbaHeartAttack; struct WhirlwindFXData* whirlwind; struct RedImpactFXData* redImpact; struct FloatingCloudPuffFXData* floatingCloudPuff; struct Effect6AFXData* unk_6A; struct EnergyInOutFXData* energyInOut; struct TattleWindowFXData* tattleWindow; struct ShinyFlareFXData* shinyFlare; struct HuffPuffBreathFXData* huffPuffBreath; struct ColdBreathFXData* coldBreath; struct EmbersFXData* embers; struct HieroglyphsFXData* hieroglyphs; struct MiscParticlesFXData* miscParticles; struct StaticStatusFXData* staticStatus; struct MovingCloudFXData* movingCloud; struct StarWarpFXData* starWarp; struct Effect76FXData* unk_76; struct FireworkRocketFXData* fireworkRocket; struct PeachStarBeamFXData* peachStarBeam; struct ChapterChangeFXData* chapterChange; struct IceShardFXData* iceShard; struct SpiritCardFXData* spiritCard; struct LilOinkFXData* lilOink; struct SomethingRotatingFXData* somethingRotating; struct BreakingJunkFXData* breakingJunk; struct PartnerBuffFXData* partnerBuff; struct QuizmoAssistantFXData* quizmoAssistant; struct IcePillarFXData* icePillar; struct SunFXData* sun; struct StarSpiritsEnergyFXData* starSpiritsEnergy; struct PinkSparklesFXData* pinkSparkles; struct StarOutlineFXData* starOutline; struct Effect86FXData* unk_86;} EffectInstanceDataPtr;
typedef struct EffectInstance { /* 0x00 */ s32 flags; /* 0x04 */ s32 effectID; /* 0x08 */ s32 numParts; /* 0x0C */ EffectInstanceDataPtr data; /* 0x10 */ struct EffectSharedData* shared;} EffectInstance; // size = 0x14
// composite struct for watt effects -- NOT the same as StaticStatusFXDatatypedef struct WattEffectData { /* 0x00 */ s32 initialized; /* 0x04 */ s32 isBouncing; /* 0x08 */ s32 bouncePhase; /* 0x0C */ s32 isActive; /* 0x10 */ s32 currentEffectIndex; /* 0x14 */ EffectInstance* effect1; /* 0x18 */ EffectInstance* effect2; /* 0x1C */ s32 debuff;} WattEffectData;
typedef struct EffectBlueprint { /* 0x00 */ s32 effectID; /* 0x04 */ void (*init)(EffectInstance* effectInst); /* 0x08 */ void (*update)(EffectInstance* effectInst); /* 0x0C */ void (*renderScene)(EffectInstance* effectInst); /* 0x10 */ void (*renderUI)(EffectInstance* effectInst);} EffectBlueprint; // size = 0x14
typedef struct EffectSharedData { /* 0x00 */ s32 flags; /* 0x04 */ s32 effectIndex; /* 0x08 */ s32 freeDelay; /* 0x0C */ void (*update)(EffectInstance* effectInst); /* 0x10 */ void (*renderScene)(EffectInstance* effectInst); /* 0x14 */ void (*renderUI)(EffectInstance* effectInst); /* 0x18 */ s32* graphics;} EffectSharedData; // size = 0x1C
typedef struct EffectTableEntry { /* 0x00 */ void* entryPoint; /* 0x04 */ struct Overlay* overlay; /* 0x08 */ const char* overlayName; /* 0x0C */ const char* entryPointName; /* 0x10 */ void* graphicsDmaStart; /* 0x14 */ void* graphicsDmaEnd;} EffectTableEntry; // size = 0x18
enum FireBreathType { FIRE_BREATH_LARGE = 0, FIRE_BREATH_SMALL = 1, FIRE_BREATH_TINY = 2,};
#ifdef __cplusplusextern "C" {#endif
EffectInstance* create_effect_instance(EffectBlueprint* effectBp);void remove_effect(EffectInstance*);void* load_effect(s32 effectIndex);
#include "effects/effect_defs.h"
extern const u8 gEffectArgCounts[EFFECT_COUNT];
#ifdef __cplusplus} // extern "C"#endif