Alchemy

include/unit/effect

games/tbs/include/unit/effect on GitHub

effect.h

games/tbs/include/unit/effect/effect.h

Structures

BattleEffectIndexWindow

struct BattleEffectIndexWindow

What BattleFx_BuildCenteredIndexList (unused) reads: a value to find in a list, and how many indices either side of it to keep.

FieldDeclared as
unk_00s32 unk_00[3]not named by TBS code
currentValues32 currentValuethe value looked for in values
indexRadiuss32 indexRadiusindices kept either side of where it sits
entryLimits32 entryLimitindices from this up are dropped
unk_18s32 unk_18[3]not named by TBS code
valuess16 values[1]indexRadius * 2 + 1 values, searched in order

Used by BattleFx_BuildCenteredIndexList.

Line 209

Point2D

struct Point2D

Two-dimensional {x, y} pair for position or velocity, a local of the summon scenes (Nereid, Procne, Tiamat and Ramses).

FieldDeclared as
xs32 x16.16 pixels in every scene that uses it
ys32 y16.16 pixels

Used by BattleFx_RunDragonCloud, BattleFx_RunNereid, BattleFx_RunPaletteParticles, BattleFx_RunProcne, BattleFx_RunRamses.

Line 236

Enumerations

SceneEffectKind

enum SceneEffectKind

The large effects BattleFx_RunSceneEffect runs, by kind: the twelve summons. A summon's row of actflags.tsv has effect 0x8000 plus its kind; kind 0, which no row uses, runs Meteor's scene too.

Value=
SCENE_EFFECT_RAMSES1BattleFx_RunRamses (ramses.c)
SCENE_EFFECT_NEREIDBattleFx_RunNereid (nereid.c)
SCENE_EFFECT_KIRINBattleFx_RunKirin (kirin.c)
SCENE_EFFECT_ATALANTABattleFx_RunAtalanta (atalanta.c)
SCENE_EFFECT_CYBELEBattleFx_RunCybele (cybele.c)
SCENE_EFFECT_NEPTUNEBattleFx_RunNeptune (neptune.c)
SCENE_EFFECT_TIAMATBattleFx_RunTiamat (tiamat.c)
SCENE_EFFECT_PROCNEBattleFx_RunProcne (procne.c)
SCENE_EFFECT_JUDGMENTBattleFx_RunJudgment (judgment.c)
SCENE_EFFECT_BOREASBattleFx_RunBoreas (boreas.c)
SCENE_EFFECT_METEORBattleFx_RunMeteor (particle_streams.c)
SCENE_EFFECT_THORBattleFx_RunThor (thor.c)

Line 16

BattleFxKind

enum BattleFxKind

Effect kinds: the kind an ability's gBattle_ActionFlags entry selects, by the handler that plays it; a later kind that shares a handler adds its number. Kinds without a handler have no name. Kind 0 is the dispatcher's.

Value=
BATTLE_FX_QUAKE1
BATTLE_FX_SPIRE2
BATTLE_FX_GAIA3
BATTLE_FX_GROWTH4
BATTLE_FX_THORN5
BATTLE_FX_FROST6
BATTLE_FX_ICE7
BATTLE_FX_PRISM8
BATTLE_FX_DOUSE9
BATTLE_FX_FROTH10
BATTLE_FX_FLARE11
BATTLE_FX_FIRE12
BATTLE_FX_VOLCANO13
BATTLE_FX_BLAST14
BATTLE_FX_NOVA15
BATTLE_FX_BOLT16
BATTLE_FX_RAY17
BATTLE_FX_PLASMA18
BATTLE_FX_SLASH19
BATTLE_FX_WHIRLWIND20
BATTLE_FX_CURE21
BATTLE_FX_PLY22
BATTLE_FX_WISH23
BATTLE_FX_CURE_POISON24
BATTLE_FX_REVIVE25
BATTLE_FX_IMPACT26
BATTLE_FX_DULL27
BATTLE_FX_GUARD28
BATTLE_FX_IMPAIR29
BATTLE_FX_WARD30
BATTLE_FX_WEAKEN31
BATTLE_FX_TAINT32
BATTLE_FX_DELUDE33
BATTLE_FX_ORBITING_SPIRALS34no ability uses it
BATTLE_FX_HEARTRENDER35
BATTLE_FX_PARALYZE36
BATTLE_FX_SLEEP37
BATTLE_FX_BIND38
BATTLE_FX_HAUNT39
BATTLE_FX_CONDEMN40
BATTLE_FX_CURSE41
BATTLE_FX_DRAIN42
BATTLE_FX_BREAK43
BATTLE_FX_WISH_4444
BATTLE_FX_WISH_4545
BATTLE_FX_IMPACT_4646
BATTLE_FX_IMPAIR_4747
BATTLE_FX_DRAGON_CLOUD49
BATTLE_FX_DEMON_NIGHT50
BATTLE_FX_HELM_SPLITTER51
BATTLE_FX_QUICK_STRIKE52
BATTLE_FX_DEATH_PLUNGE53
BATTLE_FX_SHURIKEN54
BATTLE_FX_ANNIHILATION55
BATTLE_FX_PUNJI56
BATTLE_FX_CUTTING_EDGE57
BATTLE_FX_RAGNAROK58
BATTLE_FX_HEAT_WAVE59
BATTLE_FX_PLANET_DIVER60
BATTLE_FX_TITAN_BLADE61
BATTLE_FX_SHINING_STAR62
BATTLE_FX_BLIZZARD63
BATTLE_FX_DEMON_FIRE64
BATTLE_FX_VORPAL_SLASH65
BATTLE_FX_DROWN66
BATTLE_FX_TRIANGLE_STRIKE67no ability uses it
BATTLE_FX_ASTRAL_BLAST68
BATTLE_FX_GRANITE200
BATTLE_FX_REVIVE_201201
BATTLE_FX_VINE202
BATTLE_FX_GROUND203
BATTLE_FX_PLY_204204
BATTLE_FX_SLEET205
BATTLE_FX_WISH_206206
BATTLE_FX_HAIL207
BATTLE_FX_TONIC208
BATTLE_FX_DEW209
BATTLE_FX_IMPACT_210210
BATTLE_FX_GUARD_211211
BATTLE_FX_PSY_CRYSTAL212
BATTLE_FX_FLASH213
BATTLE_FX_TORCH214
BATTLE_FX_WARD_215215
BATTLE_FX_ZEPHYR216
BATTLE_FX_KITE217
BATTLE_FX_BIND_218218
BATTLE_FX_GUST219
BATTLE_FX_VENUS250
BATTLE_FX_MERCURY251
BATTLE_FX_MARS252
BATTLE_FX_JUPITER253
BATTLE_FX_SONIC_WAVE300
BATTLE_FX_SHRIEK301
BATTLE_FX_BANSHEE_HOWL302
BATTLE_FX_CRAZY_VOICE303
BATTLE_FX_WAR_CRY304
BATTLE_FX_WICKED_HOWL305
BATTLE_FX_WING_BEAT306
BATTLE_FX_WING_FLUTTER307
BATTLE_FX_RUMBLE308
BATTLE_FX_BONE_CHILLER309
BATTLE_FX_GUST_310310
BATTLE_FX_BONE_CHARGE311
BATTLE_FX_MYSTIC_FLAME312
BATTLE_FX_NUMBING_STING313
BATTLE_FX_BRUTE_FORCE314
BATTLE_FX_STICKY_GOO315
BATTLE_FX_CANNIBAL_FANG316
BATTLE_FX_BEAR_CLAW317
BATTLE_FX_POISONOUS_BITE318
BATTLE_FX_FLYING_ATTACK319
BATTLE_FX_UNDEAD_SWORD320
BATTLE_FX_RANSACK321
BATTLE_FX_STICKY_POISON322
BATTLE_FX_POISONOUS_BITE_323323
BATTLE_FX_ELECTRIC_BITE324
BATTLE_FX_POISON_TAIL325
BATTLE_FX_ONSLAUGHT326
BATTLE_FX_VAMPIRIC_FANG327
BATTLE_FX_BACTERIA_RUSH328
BATTLE_FX_FLYING_ATTACK_329329
BATTLE_FX_ROTTEN_BLOOD330
BATTLE_FX_DOUBLE_FANG332
BATTLE_FX_MORTAL_BLOW333
BATTLE_FX_FREEBITE_RUSH334
BATTLE_FX_TWIN_BEAKS335
BATTLE_FX_RABID_FANG336
BATTLE_FX_ACID_BITE337
BATTLE_FX_DYNAMITE338
BATTLE_FX_HEADBUTT339
BATTLE_FX_POISON_INK340
BATTLE_FX_BEAR_CLAW_342342
BATTLE_FX_RANSACK_343343
BATTLE_FX_SOOTHING_STAR344
BATTLE_FX_SPIDER_WEB345
BATTLE_FX_HEARTRENDER_346346
BATTLE_FX_MAD_SPATTER347
BATTLE_FX_SPASM348
BATTLE_FX_SLEEP_STAR349
BATTLE_FX_DECOMPOSE350
BATTLE_FX_HAUNTING351
BATTLE_FX_CURE_352352
BATTLE_FX_BERSERK353
BATTLE_FX_CURSE_354354
BATTLE_FX_SMOKE_BOMB380
BATTLE_FX_WING_STROKE381
BATTLE_FX_POISON_BEAT382
BATTLE_FX_SPINNING_BEAT383
BATTLE_FX_OUTER_SPACE384
BATTLE_FX_DRAGON_DRIVER385
BATTLE_FX_DRAIN_FANG386
BATTLE_FX_SPARK_APPROACH_VARIANT3387no ability uses it
BATTLE_FX_THRASH388
BATTLE_FX_RECOVERY389
BATTLE_FX_FIRE_BLESSING400
BATTLE_FX_WATER_BLESSING401
BATTLE_FX_ICE_BLESSING402
BATTLE_FX_DARK_BLESSING403
BATTLE_FX_ACID_BLESSING404
BATTLE_FX_STORM_BLESSING405
BATTLE_FX_EVIL_BLESSING406
BATTLE_FX_DEADLY_GAS407
BATTLE_FX_KIND_COUNT408one more than the last kind

Line 37

Types

BattleFxHandler

typedef void (*BattleFxHandler)(struct BattleEffectArgument *effect);

An effect handler: plays one effect over the battle, frame by frame, and returns when it is over.

Used by gBattleFx_EffectHandlers.

Line 33

BlitterPair

typedef DrawRectangle BlitterPair[2];

A blitter pair: [0] built in HEAP_SLOT_BLITTER and [1] in HEAP_SLOT_BLITTER_ALTERNATE (BattleFx_FetchRectangleBlitters fills one). Many effects keep this pair in their stack frame.

Used by BattleFx_FetchRectangleBlitters, BattleFx_RunAstralBlast, BattleFx_RunAtalanta, BattleFx_RunBeamSequence, BattleFx_RunBind, BattleFx_RunBladeRain, BattleFx_RunBolt, BattleFx_RunBurstScene, BattleFx_RunBurstShower, BattleFx_RunCastingImpact, BattleFx_RunCondemn, BattleFx_RunCybele, BattleFx_RunDeathPlunge, BattleFx_RunDjinnBeams, BattleFx_RunDjinnHeal, BattleFx_RunDjinniEntrance, BattleFx_RunElementBurst, BattleFx_RunElementPillar, BattleFx_RunEruption, BattleFx_RunFire, BattleFx_RunFrost, BattleFx_RunFroth, BattleFx_RunGaia, BattleFx_RunGatheringLights, BattleFx_RunGround, BattleFx_RunHail, BattleFx_RunHaunt, BattleFx_RunHealingMotes, BattleFx_RunIce, BattleFx_RunJupiter, BattleFx_RunLobbedShells, BattleFx_RunMars, BattleFx_RunMercury, BattleFx_RunMirroredWall, BattleFx_RunMoteFountain, BattleFx_RunNereid, BattleFx_RunOrbitingSkulls, BattleFx_RunOrbitingSpirals, BattleFx_RunPaletteParticles, BattleFx_RunPlanetDiver and 23 more.

Line 244

Macros

PARTICLES

#define PARTICLES ((struct EffectStep *)Ram_MapCellBuffer)

The map cell buffer (gMapCellBuffer), which the effects borrow, has two views here: Ram_MapCellBuffer as bytes, at its fixed address, and PARTICLES as particles. The effects use these two, not gMapCellBuffer itself.

Used by BattleFx_ArmWin0HBlankDma, BattleFx_RunAstralBlast, BattleFx_RunAtalanta, BattleFx_RunBolt, BattleFx_RunBoreas, BattleFx_RunBreak, BattleFx_RunBurstScene, BattleFx_RunDjinnBeams, BattleFx_RunDjinnHeal, BattleFx_RunDjinniEntrance, BattleFx_RunDrain, BattleFx_RunElementBurst, BattleFx_RunElementPillar, BattleFx_RunEruption, BattleFx_RunFire, BattleFx_RunFrost, BattleFx_RunGaia, BattleFx_RunGatheringLights, BattleFx_RunGrowingColumns, BattleFx_RunHail, BattleFx_RunHaunt, BattleFx_RunHealingMotes, BattleFx_RunHelmSplitter, BattleFx_RunImpactBurst, BattleFx_RunJudgment, BattleFx_RunJupiter, BattleFx_RunKirin, BattleFx_RunLobbedShells, BattleFx_RunMars, BattleFx_RunMercury, BattleFx_RunMoteFountain, BattleFx_RunNeptune, BattleFx_RunNereid, BattleFx_RunPaletteParticles, BattleFx_RunParticleStreams, BattleFx_RunPlasma, BattleFx_RunPrism, BattleFx_RunProcne, BattleFx_RunProjectileVolley, BattleFx_RunRagnarok and 15 more.

Line 221

EFFECT_CLIP_BOUNDS

#define EFFECT_CLIP_BOUNDS (COMPOSITE_CLIP_X | COMPOSITE_CLIP_Y)

Clips overflow on all four sides.

Used by BattleFx_FetchRectangleBlitters, BattleFx_RunAnnihilation, BattleFx_RunAstralBlast, BattleFx_RunAtalanta, BattleFx_RunBeamSequence, BattleFx_RunBind, BattleFx_RunBladeRain, BattleFx_RunBolt, BattleFx_RunBoreas, BattleFx_RunBreak, BattleFx_RunBurstScene, BattleFx_RunBurstShower, BattleFx_RunCastingImpact, BattleFx_RunCondemn, BattleFx_RunCybele, BattleFx_RunDeathPlunge, BattleFx_RunDjinnBeams, BattleFx_RunDjinniEntrance, BattleFx_RunDrain, BattleFx_RunElementBurst, BattleFx_RunElementPillar, BattleFx_RunEruption, BattleFx_RunFire, BattleFx_RunFlare, BattleFx_RunFlashingStrike, BattleFx_RunFroth, BattleFx_RunGaia, BattleFx_RunGround, BattleFx_RunGrowingColumns, BattleFx_RunHaunt, BattleFx_RunImpactBurst, BattleFx_RunJudgment, BattleFx_RunKirin, BattleFx_RunLobbedShells, BattleFx_RunMirroredWall, BattleFx_RunMoteFountain, BattleFx_RunNeptune, BattleFx_RunOrbitingSkulls, BattleFx_RunOrbitingSpirals, BattleFx_RunPaletteParticles and 31 more.

Line 224

EFFECT_BLITTERS

#define EFFECT_BLITTERS ((DrawRectangle *)gWorkSlot)

The work slots read as blitters: EFFECT_BLITTERS[HEAP_SLOT_BLITTER] and EFFECT_BLITTERS[HEAP_SLOT_BLITTER_ALTERNATE].

Used by BattleFx_RunAtalanta, BattleFx_RunIce, BattleFx_RunTargetStrike, BattleFx_RunThor.

Line 248

Also, macros without a comment: Q_16_16_TO_INT, Q_16_16_TO_INT.

Globals

gBattleFx_EffectHandlers

extern BattleFxHandler gBattleFx_EffectHandlers[]

The handlers by kind less one (effect_table.c); BattleFx_RunTableEffect calls the one an effect's kind selects.

Used by BattleFx_RunTableEffect.

Line 205

Declarations, without a comment: BattleFx_RunCurse.

effect_bits.h

games/tbs/include/unit/effect/effect_bits.h

Globals, without a comment: gUnused_BitOperands, gBattleFx_BitOperands.

effect_table.h

games/tbs/include/unit/effect/effect_table.h

Macros, without a comment: STRIKE_KIND_SLASH, STRIKE_KIND_COLUMN, STRIKE_SMOKE, STRIKE_ABSORB, STRIKE_GLINTS, STRIKE_SPARKS, STRIKE_HEAVY.

Globals, without a comment: gBattleFx_MoteCells, gBattleFx_FlareCells, gBattleFx_PuffCells, gBattleFx_PuffSizes, gBattleFx_PuffArcCellWidths, gBattleFx_PuffArcCellHeights, gBattleFx_PuffArcCellBiasY, gBattleFx_PuffArcCells, gBattleFx_GlintCells, gBattleFx_GlintCellWidths, gBattleFx_GlintCellHeights, gFalling_IceCounts, gFalling_Counts, gStreaks_Records, gStreaks_Tremble, gTargetStrike_Records, gTargetStrike_Widths, gTargetStrike_Heights, gTargetStrike_Offsets, gTargetStrike_Reach, gTargetStrike_ColumnStages, gTargetStrike_GlintDrawFlags, gDeathPlunge_CellWidths, gDeathPlunge_CellHeights, gDeathPlunge_Cells, gDeathPlunge_PieceWidths, gDeathPlunge_PieceHeights, gDeathPlunge_PieceCells, gDeathPlunge_PieceStartX, gDeathPlunge_PieceStartY, gDeathPlunge_X, gDeathPlunge_Y, gDeathPlunge_DrawFlags, gSpiderWeb_CellWidths, gSpiderWeb_CellHeights, gSpiderWeb_Cells, gSpiderWeb_CellX, gSpiderWeb_CellBiasY, gGatheringLights_Counts, gMirroredWall_Cells, gMirroredWall_CellWidths, gMirroredWall_CellHeights, gDjinnBeams_MotePictures, gDjinnBeams_HeadOffsets, gDjinnBeams_HeadWidths, gDjinnBeams_HeadHeights, gLobbedShells_Records, gLobbedShells_ShardWidths, gLobbedShells_ShardHeights, gLobbedShells_ShardOffsets, gCondemn_PanelX, gCondemn_PanelY, gBind_Vertex, gBind_TriangleStrikeVertex, gStars_Points, gStars_Radii, gProcne_GridX, gProcne_GridY, gProcne_Frames, gProcne_CellWidths, gProcne_CellHeights, gProcne_CellBiasY, gProcne_Cells, gTiamat_DropSpeeds, gTiamat_SparkPixels, gTiamat_DropSizes, gTiamat_StreakWidths, gTiamat_StreakHeights, gTiamat_StreakDrops, gTiamat_StreakOffsets, gNereid_Columns, gNereid_Gravity, gVortices_Counts, gVortices_Shapes, gPrism_ShardStarts, gPrism_Counts, gPrism_ShardWidths, gPrism_ShardHeights, gPrism_ShardOffsets, gPlasma_Sparks, gPlasma_Columns, gPlasma_Counts, gPlasma_Shapes, gPlasma_FlashCells, gVolcano_Counts, gVolcano_Depths, gVolcano_StartFrames, gTargetMotes_GlintFlips, gCybele_ObjectPoses, gCybele_ThornOffsets, gCybele_ThornWidths, gCybele_ThornHeights, gCybele_LeafOffsets, gCybele_LeafSizes, gCybele_ChipOffsets, gCybele_ChipWidths, gCybele_ChipHeights, gCybele_SparkOffsets, gCybele_SparkSizes, gCybele_EmberOffsets, gCybele_EmberSizes, gBoreas_Points, gBoreas_ShakeOffsets, gBoreas_RockCells, gBoreas_RockWidths, gBoreas_RockHeights, gBoreas_Animations, gBoreas_DebrisWidths, gBoreas_DebrisHeights, gBoreas_DebrisCells, gBoreas_SprayWidths, gBoreas_SprayHeights, gBoreas_SprayCells, gBoreas_BoulderCells, gBoreas_BoulderWidths, gBoreas_BoulderHeights, gBoreas_FallWidths, gBoreas_FallHeights, gBoreas_FallCells, gDrain_Gravities, gStatChange_ShardCells, gStatChange_ShardWidths, gStatChange_ShardHeights, gQuake_Timings, gFire_Counts, gFire_FlareWidths, gFire_FlareHeights, gFire_FlareBiasY, gFire_FlareCells, gFrost_ColumnSpots, gFrost_Timings, gFrost_MoteWidths, gFrost_MoteHeights, gFrost_MoteCells, gFrost_ColumnCells, gFrost_ColumnHeights, gFrost_ChipWidths, gFrost_ChipHeights, gFrost_ChipCells, gRay_Sparks, gEruption_Counts, gEruption_PuffCells, gEruption_PuffSizes, gUnused_SheetCells6, gUnused_SheetCells, gUnused_SheetWidths, gUnused_SheetHeights, gAtalanta_UnitScale, gGrowth_VineWidths, gGrowth_HeightLimits, gGrowth_VineCells, gGrowth_PillarWidths, gGrowth_PillarCells, gGrowth_ColumnCounts, gGrowth_ColumnX, gGrowth_PillarHeights, gGrowth_PuffWidths, gGrowth_PuffHeights, gGrowth_PuffCells, gGrowth_ColumnOffsets, gGrowth_Kinds, gGrowth_X, gGrowth_Counts, gGrowth_ThornPuffWidths, gGrowth_ThornPuffHeights, gGrowth_ThornPuffCells, gBolt_Counts, gBolt_GlintFlips, gBolt_GlintModes, gProjectiles_CometHeights, gProjectiles_Modes, gProjectiles_FlashWidths, gProjectiles_FlashHeights, gProjectiles_FlashSteps, gProjectiles_FlashRises, gProjectiles_FlashOffsets, gProjectiles_PelletOffsets, gDjinnAttacks_LaunchFrames, gHail_CellWidths, gHail_CellHeights, gHail_Cells, gHail_ChipFlips, gHail_ChipWidths, gHail_ChipHeights, gHail_ChipCells, gHail_ChipX, gHail_ChipY, gThor_TargetPalettes, gThor_SmokeFlips, gSpire_ShardOffsets, gSpire_RockX, gSpire_DropFrames, gSpire_RockCounts, gSpire_ShardWidths, gSpire_ShardHeights, gSpire_ShardCells, gBurstScene_Records, gGaia_RowCells, gGaia_RowWidths, gGaia_MoundCells, gGaia_MoundWidths, gGaia_MoundHeights, gGaia_Bg2Shifts, gGaia_LateRockColumns, gBeams_CellWidths, gBeams_CellHeights, gBeams_Cells, gBeams_CellReaches, gCastingImpact_GlintDrawFlags, gCastingImpact_ImageX, gCastingImpact_ImageY, gCastingImpact_IceChipCells, gHelmSplitter_CellWidths, gHelmSplitter_CellHeights, gHelmSplitter_Cells, gHelmSplitter_CellBiasX, gHelmSplitter_CellBiasY, gHelmSplitter_TwelveX, gHelmSplitter_TwelveZ, gHelmSplitter_RightEightX, gHelmSplitter_RightEightZ, gHelmSplitter_SmallEightX, gHelmSplitter_SmallEightZ, gHelmSplitter_ImpactBurstCellWidths, gHelmSplitter_ImpactBurstCellHeights, gHelmSplitter_ImpactBurstCells, gParticleStreams_OrbitPoints, gParticleStreams_DropPoints, gParticleStreams_FlashCells, gParticleStreams_FlashSizes, gRamses_ObjectColumns, gRamses_ObjectRows, gRamses_PuffCells, gRamses_PuffSizes, gRagnarok_StrikeColumns, gRagnarok_FlashCells, gTitanBlade_FlashCells, gTitanBlade_DustGravity, gJudgment_BurstHeights, gJudgment_BurstCells, gJudgment_ShardCells, gJudgment_ShardWidths, gJudgment_ShardHeights, gKirin_Columns, gKirin_Rows, gNeptune_ObjectX, gNeptune_ObjectY, gNeptune_Gravity, gUndeadSword_SparkCells, gUndeadSword_SparkSizes.

On this page