const struct SpritePalette gSpritePalette_GeneralFieldEffect0 = { .data = gFieldEffectObjectPalette0, .tag = FLDEFF_PAL_TAG_GENERAL_0 }; const struct SpritePalette gSpritePalette_GeneralFieldEffect1 = { .data = gFieldEffectObjectPalette1, .tag = FLDEFF_PAL_TAG_GENERAL_1 }; static const union AnimCmd sAnim_Shadow[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; static const union AnimCmd *const sAnimTable_Shadow[] = { sAnim_Shadow, }; static const struct SpriteFrameImage sPicTable_ShadowSmall[] = {obj_frame_tiles(gFieldEffectObjectPic_ShadowSmall) }; static const struct SpriteFrameImage sPicTable_ShadowMedium[] = {obj_frame_tiles(gFieldEffectObjectPic_ShadowMedium) }; static const struct SpriteFrameImage sPicTable_ShadowLarge[] = {obj_frame_tiles(gFieldEffectObjectPic_ShadowLarge) }; static const struct SpriteFrameImage sPicTable_ShadowExtraLarge[] = { obj_frame_tiles(gFieldEffectObjectPic_ShadowExtraLarge) }; const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowSmall = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = SPRITE_INVALID_TAG, .oam = &gObjectEventBaseOam_8x8, .anims = sAnimTable_Shadow, .images = sPicTable_ShadowSmall, .affineAnims = gDummySpriteAffineAnimTable, .callback = UpdateShadowFieldEffect, }; const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowMedium = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = SPRITE_INVALID_TAG, .oam = &gObjectEventBaseOam_16x8, .anims = sAnimTable_Shadow, .images = sPicTable_ShadowMedium, .affineAnims = gDummySpriteAffineAnimTable, .callback = UpdateShadowFieldEffect, }; const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowLarge = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = SPRITE_INVALID_TAG, .oam = &gObjectEventBaseOam_32x8, .anims = sAnimTable_Shadow, .images = sPicTable_ShadowLarge, .affineAnims = gDummySpriteAffineAnimTable, .callback = UpdateShadowFieldEffect, }; const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowExtraLarge = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = SPRITE_INVALID_TAG, .oam = &gObjectEventBaseOam_64x32, .anims = sAnimTable_Shadow, .images = sPicTable_ShadowExtraLarge, .affineAnims = gDummySpriteAffineAnimTable, .callback = UpdateShadowFieldEffect, }; static const struct SpriteFrameImage sPicTable_TallGrass[] = { overworld_frame(gFieldEffectObjectPic_TallGrass, 2, 2, 0), overworld_frame(gFieldEffectObjectPic_TallGrass, 2, 2, 1), overworld_frame(gFieldEffectObjectPic_TallGrass, 2, 2, 2), overworld_frame(gFieldEffectObjectPic_TallGrass, 2, 2, 3), overworld_frame(gFieldEffectObjectPic_TallGrass, 2, 2, 4), }; static const union AnimCmd sAnim_TallGrass[] = { ANIMCMD_FRAME(1, 10), ANIMCMD_FRAME(2, 10), ANIMCMD_FRAME(3, 10), ANIMCMD_FRAME(4, 10), ANIMCMD_FRAME(0, 10), ANIMCMD_END, }; static const union AnimCmd *const sAnimTable_TallGrass[] = { sAnim_TallGrass, }; const struct SpriteTemplate gFieldEffectObjectTemplate_TallGrass = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_TallGrass, .images = sPicTable_TallGrass, .affineAnims = gDummySpriteAffineAnimTable, .callback = UpdateTallGrassFieldEffect, }; static const struct SpriteFrameImage sPicTable_Ripple[] = { overworld_frame(gFieldEffectObjectPic_Ripple, 2, 2, 0), overworld_frame(gFieldEffectObjectPic_Ripple, 2, 2, 1), overworld_frame(gFieldEffectObjectPic_Ripple, 2, 2, 2), overworld_frame(gFieldEffectObjectPic_Ripple, 2, 2, 3), overworld_frame(gFieldEffectObjectPic_Ripple, 2, 2, 4), }; static const union AnimCmd sAnim_Ripple[] = { ANIMCMD_FRAME(0, 12), ANIMCMD_FRAME(1, 9), ANIMCMD_FRAME(2, 9), ANIMCMD_FRAME(3, 9), ANIMCMD_FRAME(0, 9), ANIMCMD_FRAME(1, 9), ANIMCMD_FRAME(2, 11), ANIMCMD_FRAME(4, 11), ANIMCMD_END, }; static const union AnimCmd *const sAnimTable_Ripple[] = { sAnim_Ripple, }; const struct SpriteTemplate gFieldEffectObjectTemplate_Ripple = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_Ripple, .images = sPicTable_Ripple, .affineAnims = gDummySpriteAffineAnimTable, .callback = WaitFieldEffectSpriteAnim, }; static const struct SpriteFrameImage sPicTable_Ash[] = { overworld_frame(gFieldEffectObjectPic_Ash, 2, 2, 0), overworld_frame(gFieldEffectObjectPic_Ash, 2, 2, 1), overworld_frame(gFieldEffectObjectPic_Ash, 2, 2, 2), overworld_frame(gFieldEffectObjectPic_Ash, 2, 2, 3), overworld_frame(gFieldEffectObjectPic_Ash, 2, 2, 4), }; static const union AnimCmd sAnim_Ash[] = { ANIMCMD_FRAME(0, 12), ANIMCMD_FRAME(1, 12), ANIMCMD_FRAME(2, 8), ANIMCMD_FRAME(3, 12), ANIMCMD_FRAME(4, 12), ANIMCMD_END, }; static const union AnimCmd *const sAnimTable_Ash[] = { sAnim_Ash, }; const struct SpriteTemplate gFieldEffectObjectTemplate_Ash = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_Ash, .images = sPicTable_Ash, .affineAnims = gDummySpriteAffineAnimTable, .callback = UpdateAshFieldEffect, }; static const struct SpriteFrameImage sPicTable_SurfBlob[] = { overworld_frame(gObjectEventPic_SurfBlob, 2, 8, 0), overworld_frame(gObjectEventPic_SurfBlob, 2, 8, 1), overworld_frame(gObjectEventPic_SurfBlob, 2, 8, 2), overworld_frame(gObjectEventPic_SurfBlob, 2, 8, 3), overworld_frame(gObjectEventPic_SurfBlob, 2, 8, 4), overworld_frame(gObjectEventPic_SurfBlob, 2, 8, 5), }; static const union AnimCmd sSurfBlobAnim_FaceSouth[] = { ANIMCMD_FRAME(0, 48), ANIMCMD_FRAME(1, 48), ANIMCMD_JUMP(0), }; static const union AnimCmd sSurfBlobAnim_FaceNorth[] = { ANIMCMD_FRAME(2, 48), ANIMCMD_FRAME(3, 48), ANIMCMD_JUMP(0), }; static const union AnimCmd sSurfBlobAnim_FaceWest[] = { ANIMCMD_FRAME(4, 48), ANIMCMD_FRAME(5, 48), ANIMCMD_JUMP(0), }; static const union AnimCmd sSurfBlobAnim_FaceEast[] = { ANIMCMD_FRAME(4, 48, .hFlip = TRUE), ANIMCMD_FRAME(5, 48, .hFlip = TRUE), ANIMCMD_JUMP(0), }; static const union AnimCmd *const sAnimTable_SurfBlob[] = { [DIR_SOUTH - 1] = sSurfBlobAnim_FaceSouth, [DIR_NORTH - 1] = sSurfBlobAnim_FaceNorth, [DIR_WEST - 1] = sSurfBlobAnim_FaceWest, [DIR_EAST - 1] = sSurfBlobAnim_FaceEast, }; const struct SpriteTemplate gFieldEffectObjectTemplate_SurfBlob = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = SPRITE_INVALID_TAG, .oam = &gObjectEventBaseOam_32x32, .anims = sAnimTable_SurfBlob, .images = sPicTable_SurfBlob, .affineAnims = gDummySpriteAffineAnimTable, .callback = UpdateSurfBlobFieldEffect, }; static const struct SpriteFrameImage sPicTable_Arrow[] = { overworld_frame(gFieldEffectObjectPic_Arrow, 2, 2, 0), overworld_frame(gFieldEffectObjectPic_Arrow, 2, 2, 1), overworld_frame(gFieldEffectObjectPic_Arrow, 2, 2, 2), overworld_frame(gFieldEffectObjectPic_Arrow, 2, 2, 3), overworld_frame(gFieldEffectObjectPic_Arrow, 2, 2, 4), overworld_frame(gFieldEffectObjectPic_Arrow, 2, 2, 5), overworld_frame(gFieldEffectObjectPic_Arrow, 2, 2, 6), overworld_frame(gFieldEffectObjectPic_Arrow, 2, 2, 7), }; static const union AnimCmd sArrowAnim_South[] = { ANIMCMD_FRAME(2, 32), ANIMCMD_FRAME(3, 32), ANIMCMD_JUMP(0), }; static const union AnimCmd sArrowAnim_North[] = { ANIMCMD_FRAME(0, 32), ANIMCMD_FRAME(1, 32), ANIMCMD_JUMP(0), }; static const union AnimCmd sArrowAnim_West[] = { ANIMCMD_FRAME(4, 32), ANIMCMD_FRAME(5, 32), ANIMCMD_JUMP(0), }; static const union AnimCmd sArrowAnim_East[] = { ANIMCMD_FRAME(6, 32), ANIMCMD_FRAME(7, 32), ANIMCMD_JUMP(0), }; static const union AnimCmd *const sAnimTable_Arrow[] = { [DIR_SOUTH - 1] = sArrowAnim_South, [DIR_NORTH - 1] = sArrowAnim_North, [DIR_WEST - 1] = sArrowAnim_West, [DIR_EAST - 1] = sArrowAnim_East, }; const struct SpriteTemplate gFieldEffectObjectTemplate_Arrow = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = SPRITE_INVALID_TAG, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_Arrow, .images = sPicTable_Arrow, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, }; static const struct SpriteFrameImage sPicTable_GroundImpactDust[] = { overworld_frame(gFieldEffectObjectPic_GroundImpactDust, 2, 1, 0), overworld_frame(gFieldEffectObjectPic_GroundImpactDust, 2, 1, 1), overworld_frame(gFieldEffectObjectPic_GroundImpactDust, 2, 1, 2), }; static const union AnimCmd sAnim_GroundImpactDust[] = { ANIMCMD_FRAME(0, 8), ANIMCMD_FRAME(1, 8), ANIMCMD_FRAME(2, 8), ANIMCMD_END, }; static const union AnimCmd *const sAnimTable_GroundImpactDust[] = { sAnim_GroundImpactDust, }; const struct SpriteTemplate gFieldEffectObjectTemplate_GroundImpactDust = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, .oam = &gObjectEventBaseOam_16x8, .anims = sAnimTable_GroundImpactDust, .images = sPicTable_GroundImpactDust, .affineAnims = gDummySpriteAffineAnimTable, .callback = UpdateJumpImpactEffect, }; static const struct SpriteFrameImage sPicTable_JumpTallGrass[] = { overworld_frame(gFieldEffectObjectPic_JumpTallGrass, 2, 1, 0), overworld_frame(gFieldEffectObjectPic_JumpTallGrass, 2, 1, 1), overworld_frame(gFieldEffectObjectPic_JumpTallGrass, 2, 1, 2), overworld_frame(gFieldEffectObjectPic_JumpTallGrass, 2, 1, 3), }; static const union AnimCmd sAnim_JumpTallGrass[] = { ANIMCMD_FRAME(0, 8), ANIMCMD_FRAME(1, 8), ANIMCMD_FRAME(2, 8), ANIMCMD_FRAME(3, 8), ANIMCMD_END, }; static const union AnimCmd *const sAnimTable_JumpTallGrass[] = { sAnim_JumpTallGrass, }; const struct SpriteTemplate gFieldEffectObjectTemplate_JumpTallGrass = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, .oam = &gObjectEventBaseOam_16x8, .anims = sAnimTable_JumpTallGrass, .images = sPicTable_JumpTallGrass, .affineAnims = gDummySpriteAffineAnimTable, .callback = UpdateJumpImpactEffect, }; static const struct SpriteFrameImage sPicTable_SandFootprints[] = { overworld_frame(gFieldEffectObjectPic_SandFootprints, 2, 2, 0), overworld_frame(gFieldEffectObjectPic_SandFootprints, 2, 2, 1), }; static const union AnimCmd sSandFootprintsAnim_South[] = { ANIMCMD_FRAME(0, 1, .vFlip = TRUE), ANIMCMD_END, }; static const union AnimCmd sSandFootprintsAnim_North[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; static const union AnimCmd sSandFootprintsAnim_West[] = { ANIMCMD_FRAME(1, 1), ANIMCMD_END, }; static const union AnimCmd sSandFootprintsAnim_East[] = { ANIMCMD_FRAME(1, 1, .hFlip = TRUE), ANIMCMD_END, }; static const union AnimCmd *const sAnimTable_SandFootprints[] = { [DIR_NONE] = sSandFootprintsAnim_South, [DIR_SOUTH] = sSandFootprintsAnim_South, [DIR_NORTH] = sSandFootprintsAnim_North, [DIR_WEST] = sSandFootprintsAnim_West, [DIR_EAST] = sSandFootprintsAnim_East, }; const struct SpriteTemplate gFieldEffectObjectTemplate_SandFootprints = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_SandFootprints, .images = sPicTable_SandFootprints, .affineAnims = gDummySpriteAffineAnimTable, .callback = UpdateFootprintsTireTracksFieldEffect, }; static const struct SpriteFrameImage sPicTable_DeepSandFootprints[] = { overworld_frame(gFieldEffectObjectPic_DeepSandFootprints, 2, 2, 0), overworld_frame(gFieldEffectObjectPic_DeepSandFootprints, 2, 2, 1), }; static const union AnimCmd sDeepSandFootprintsAnim_South[] = { ANIMCMD_FRAME(0, 1, .vFlip = TRUE), ANIMCMD_END, }; static const union AnimCmd sDeepSandFootprintsAnim_North[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; static const union AnimCmd sDeepSandFootprintsAnim_West[] = { ANIMCMD_FRAME(1, 1), ANIMCMD_END, }; static const union AnimCmd sDeepSandFootprintsAnim_East[] = { ANIMCMD_FRAME(1, 1, .hFlip = TRUE), ANIMCMD_END, }; static const union AnimCmd *const sAnimTable_DeepSandFootprints[] = { [DIR_NONE] = sDeepSandFootprintsAnim_South, [DIR_SOUTH] = sDeepSandFootprintsAnim_South, [DIR_NORTH] = sDeepSandFootprintsAnim_North, [DIR_WEST] = sDeepSandFootprintsAnim_West, [DIR_EAST] = sDeepSandFootprintsAnim_East, }; const struct SpriteTemplate gFieldEffectObjectTemplate_DeepSandFootprints = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_DeepSandFootprints, .images = sPicTable_DeepSandFootprints, .affineAnims = gDummySpriteAffineAnimTable, .callback = UpdateFootprintsTireTracksFieldEffect, }; static const struct SpriteFrameImage sPicTable_BikeTireTracks[] = { overworld_frame(gFieldEffectObjectPic_BikeTireTracks, 2, 2, 0), overworld_frame(gFieldEffectObjectPic_BikeTireTracks, 2, 2, 1), overworld_frame(gFieldEffectObjectPic_BikeTireTracks, 2, 2, 2), overworld_frame(gFieldEffectObjectPic_BikeTireTracks, 2, 2, 3), }; static const union AnimCmd sBikeTireTracksAnim_South[] = { ANIMCMD_FRAME(2, 1), ANIMCMD_END, }; static const union AnimCmd sBikeTireTracksAnim_North[] = { ANIMCMD_FRAME(2, 1), ANIMCMD_END, }; static const union AnimCmd sBikeTireTracksAnim_West[] = { ANIMCMD_FRAME(1, 1), ANIMCMD_END, }; static const union AnimCmd sBikeTireTracksAnim_East[] = { ANIMCMD_FRAME(1, 1), ANIMCMD_END, }; static const union AnimCmd sBikeTireTracksAnim_SECornerTurn[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; static const union AnimCmd sBikeTireTracksAnim_SWCornerTurn[] = { ANIMCMD_FRAME(0, 1, .hFlip = TRUE), ANIMCMD_END, }; static const union AnimCmd sBikeTireTracksAnim_NWCornerTurn[] = { ANIMCMD_FRAME(3, 1, .hFlip = TRUE), ANIMCMD_END, }; static const union AnimCmd sBikeTireTracksAnim_NECornerTurn[] = { ANIMCMD_FRAME(3, 1), ANIMCMD_END, }; static const union AnimCmd *const sAnimTable_BikeTireTracks[] = { [DIR_NONE] = sBikeTireTracksAnim_South, [DIR_SOUTH] = sBikeTireTracksAnim_South, [DIR_NORTH] = sBikeTireTracksAnim_North, [DIR_WEST] = sBikeTireTracksAnim_West, [DIR_EAST] = sBikeTireTracksAnim_East, [DIR_SOUTHWEST] = sBikeTireTracksAnim_SECornerTurn, [DIR_SOUTHEAST] = sBikeTireTracksAnim_SWCornerTurn, [DIR_NORTHWEST] = sBikeTireTracksAnim_NWCornerTurn, [DIR_NORTHEAST] = sBikeTireTracksAnim_NECornerTurn, }; const struct SpriteTemplate gFieldEffectObjectTemplate_BikeTireTracks = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_BikeTireTracks, .images = sPicTable_BikeTireTracks, .affineAnims = gDummySpriteAffineAnimTable, .callback = UpdateFootprintsTireTracksFieldEffect, }; static const struct SpriteFrameImage sPicTable_JumpBigSplash[] = { overworld_frame(gFieldEffectObjectPic_JumpBigSplash, 2, 2, 0), overworld_frame(gFieldEffectObjectPic_JumpBigSplash, 2, 2, 1), overworld_frame(gFieldEffectObjectPic_JumpBigSplash, 2, 2, 2), overworld_frame(gFieldEffectObjectPic_JumpBigSplash, 2, 2, 3), }; static const union AnimCmd sAnim_JumpBigSplash[] = { ANIMCMD_FRAME(0, 8), ANIMCMD_FRAME(1, 8), ANIMCMD_FRAME(2, 8), ANIMCMD_FRAME(3, 8), ANIMCMD_END, }; static const union AnimCmd *const sAnimTable_JumpBigSplash[] = { sAnim_JumpBigSplash, }; const struct SpriteTemplate gFieldEffectObjectTemplate_JumpBigSplash = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_JumpBigSplash, .images = sPicTable_JumpBigSplash, .affineAnims = gDummySpriteAffineAnimTable, .callback = UpdateJumpImpactEffect, }; static const struct SpriteFrameImage sPicTable_Splash[] = { overworld_frame(gFieldEffectObjectPic_Splash, 2, 1, 0), overworld_frame(gFieldEffectObjectPic_Splash, 2, 1, 1), }; static const union AnimCmd sAnim_Splash_0[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(1, 4), ANIMCMD_END, }; static const union AnimCmd sAnim_Splash_1[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(1, 4), ANIMCMD_FRAME(0, 6), ANIMCMD_FRAME(1, 6), ANIMCMD_FRAME(0, 8), ANIMCMD_FRAME(1, 8), ANIMCMD_FRAME(0, 6), ANIMCMD_FRAME(1, 6), ANIMCMD_JUMP(0), }; static const union AnimCmd *const sAnimTable_Splash[] = { sAnim_Splash_0, sAnim_Splash_1, }; const struct SpriteTemplate gFieldEffectObjectTemplate_Splash = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, .oam = &gObjectEventBaseOam_16x8, .anims = sAnimTable_Splash, .images = sPicTable_Splash, .affineAnims = gDummySpriteAffineAnimTable, .callback = UpdateSplashFieldEffect, }; static const struct SpriteFrameImage sPicTable_JumpSmallSplash[] = { overworld_frame(gFieldEffectObjectPic_JumpSmallSplash, 2, 1, 0), overworld_frame(gFieldEffectObjectPic_JumpSmallSplash, 2, 1, 1), overworld_frame(gFieldEffectObjectPic_JumpSmallSplash, 2, 1, 2), }; static const union AnimCmd sAnim_JumpSmallSplash[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(1, 4), ANIMCMD_FRAME(2, 4), ANIMCMD_END, }; static const union AnimCmd *const sAnimTable_JumpSmallSplash[] = { sAnim_JumpSmallSplash, }; const struct SpriteTemplate gFieldEffectObjectTemplate_JumpSmallSplash = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, .oam = &gObjectEventBaseOam_16x8, .anims = sAnimTable_JumpSmallSplash, .images = sPicTable_JumpSmallSplash, .affineAnims = gDummySpriteAffineAnimTable, .callback = UpdateJumpImpactEffect, }; static const struct SpriteFrameImage sPicTable_LongGrass[] = { overworld_frame(gFieldEffectObjectPic_LongGrass, 2, 2, 0), overworld_frame(gFieldEffectObjectPic_LongGrass, 2, 2, 1), overworld_frame(gFieldEffectObjectPic_LongGrass, 2, 2, 2), overworld_frame(gFieldEffectObjectPic_LongGrass, 2, 2, 3), }; static const union AnimCmd sAnim_LongGrass[] = { ANIMCMD_FRAME(1, 3), ANIMCMD_FRAME(2, 3), ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(3, 4), ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(3, 4), ANIMCMD_FRAME(0, 4), ANIMCMD_END, }; static const union AnimCmd *const sAnimTable_LongGrass[] = { sAnim_LongGrass, }; const struct SpriteTemplate gFieldEffectObjectTemplate_LongGrass = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_LongGrass, .images = sPicTable_LongGrass, .affineAnims = gDummySpriteAffineAnimTable, .callback = UpdateLongGrassFieldEffect, }; static const struct SpriteFrameImage sPicTable_JumpLongGrass[] = { overworld_frame(gFieldEffectObjectPic_JumpLongGrass, 2, 2, 0), overworld_frame(gFieldEffectObjectPic_JumpLongGrass, 2, 2, 1), overworld_frame(gFieldEffectObjectPic_JumpLongGrass, 2, 2, 2), overworld_frame(gFieldEffectObjectPic_JumpLongGrass, 2, 2, 3), overworld_frame(gFieldEffectObjectPic_JumpLongGrass, 2, 2, 4), overworld_frame(gFieldEffectObjectPic_JumpLongGrass, 2, 2, 6), }; static const union AnimCmd sAnim_JumpLongGrass[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(1, 4), ANIMCMD_FRAME(2, 8), ANIMCMD_FRAME(3, 8), ANIMCMD_FRAME(4, 8), ANIMCMD_FRAME(5, 8), ANIMCMD_END, }; static const union AnimCmd *const sAnimTable_JumpLongGrass[] = { sAnim_JumpLongGrass, }; const struct SpriteTemplate gFieldEffectObjectTemplate_JumpLongGrass = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_JumpLongGrass, .images = sPicTable_JumpLongGrass, .affineAnims = gDummySpriteAffineAnimTable, .callback = UpdateJumpImpactEffect, }; static const struct SpriteFrameImage sPicTable_UnusedGrass[] = { overworld_frame(gFieldEffectObjectPic_UnusedGrass, 2, 2, 0), overworld_frame(gFieldEffectObjectPic_UnusedGrass, 2, 2, 1), overworld_frame(gFieldEffectObjectPic_UnusedGrass, 2, 2, 2), overworld_frame(gFieldEffectObjectPic_UnusedGrass, 2, 2, 3), overworld_frame(gFieldEffectObjectPic_UnusedGrass, 2, 2, 4), overworld_frame(gFieldEffectObjectPic_UnusedGrass, 2, 2, 5), overworld_frame(gFieldEffectObjectPic_UnusedGrass, 2, 2, 6), overworld_frame(gFieldEffectObjectPic_UnusedGrass, 2, 2, 7), overworld_frame(gFieldEffectObjectPic_UnusedGrass, 2, 2, 8), }; static const union AnimCmd sAnim_UnusedGrass[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_FRAME(1, 4), ANIMCMD_FRAME(2, 4), ANIMCMD_FRAME(3, 4), ANIMCMD_FRAME(4, 4), ANIMCMD_FRAME(5, 4), ANIMCMD_FRAME(6, 4), ANIMCMD_FRAME(7, 4), ANIMCMD_FRAME(8, 4), ANIMCMD_JUMP(7), }; static const union AnimCmd *const sAnimTable_UnusedGrass[] = { sAnim_UnusedGrass, }; const struct SpriteTemplate gFieldEffectObjectTemplate_UnusedGrass = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_UnusedGrass, .images = sPicTable_UnusedGrass, .affineAnims = gDummySpriteAffineAnimTable, .callback = WaitFieldEffectSpriteAnim, }; static const struct SpriteFrameImage sPicTable_UnusedGrass2[] = { overworld_frame(gFieldEffectObjectPic_UnusedGrass2, 2, 2, 0), overworld_frame(gFieldEffectObjectPic_UnusedGrass2, 2, 2, 1), overworld_frame(gFieldEffectObjectPic_UnusedGrass2, 2, 2, 2), overworld_frame(gFieldEffectObjectPic_UnusedGrass2, 2, 2, 3), }; static const union AnimCmd sAnim_UnusedGrass2[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(1, 4), ANIMCMD_FRAME(2, 4), ANIMCMD_FRAME(3, 4), ANIMCMD_FRAME(2, 4), ANIMCMD_FRAME(1, 4), ANIMCMD_JUMP(0), }; static const union AnimCmd *const sAnimTable_UnusedGrass2[] = { sAnim_UnusedGrass2, }; const struct SpriteTemplate gFieldEffectObjectTemplate_UnusedGrass2 = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_UnusedGrass2, .images = sPicTable_UnusedGrass2, .affineAnims = gDummySpriteAffineAnimTable, .callback = WaitFieldEffectSpriteAnim, }; static const struct SpriteFrameImage sPicTable_UnusedSand[] = { overworld_frame(gFieldEffectObjectPic_UnusedSand, 2, 2, 0), overworld_frame(gFieldEffectObjectPic_UnusedSand, 2, 2, 1), overworld_frame(gFieldEffectObjectPic_UnusedSand, 2, 2, 2), overworld_frame(gFieldEffectObjectPic_UnusedSand, 2, 2, 3), }; static const union AnimCmd sAnim_UnusedSand[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(1, 4), ANIMCMD_FRAME(2, 4), ANIMCMD_FRAME(3, 4), ANIMCMD_JUMP(0), }; static const union AnimCmd *const sAnimTable_UnusedSand[] = { sAnim_UnusedSand, }; const struct SpriteTemplate gFieldEffectObjectTemplate_UnusedSand = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_UnusedSand, .images = sPicTable_UnusedSand, .affineAnims = gDummySpriteAffineAnimTable, .callback = WaitFieldEffectSpriteAnim, }; static const struct SpriteFrameImage sPicTable_SandPile[] = { overworld_frame(gFieldEffectObjectPic_SandPile, 2, 1, 0), overworld_frame(gFieldEffectObjectPic_SandPile, 2, 1, 1), overworld_frame(gFieldEffectObjectPic_SandPile, 2, 1, 2), }; static const union AnimCmd sAnim_SandPile[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(1, 4), ANIMCMD_FRAME(2, 4), ANIMCMD_END, }; static const union AnimCmd *const sAnimTable_SandPile[] = { sAnim_SandPile, }; const struct SpriteTemplate gFieldEffectObjectTemplate_SandPile = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, .oam = &gObjectEventBaseOam_16x8, .anims = sAnimTable_SandPile, .images = sPicTable_SandPile, .affineAnims = gDummySpriteAffineAnimTable, .callback = UpdateSandPileFieldEffect, }; static const struct SpriteFrameImage sPicTable_WaterSurfacing[] = { overworld_frame(gFieldEffectObjectPic_WaterSurfacing, 2, 2, 0), overworld_frame(gFieldEffectObjectPic_WaterSurfacing, 2, 2, 1), overworld_frame(gFieldEffectObjectPic_WaterSurfacing, 2, 2, 2), overworld_frame(gFieldEffectObjectPic_WaterSurfacing, 2, 2, 3), }; static const union AnimCmd sAnim_WaterSurfacing[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(1, 4), ANIMCMD_FRAME(2, 4), ANIMCMD_FRAME(3, 4), ANIMCMD_FRAME(2, 4), ANIMCMD_FRAME(1, 4), ANIMCMD_JUMP(0), }; static const union AnimCmd *const sAnimTable_WaterSurfacing[] = { sAnim_WaterSurfacing, }; const struct SpriteTemplate gFieldEffectObjectTemplate_WaterSurfacing = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_WaterSurfacing, .images = sPicTable_WaterSurfacing, .affineAnims = gDummySpriteAffineAnimTable, .callback = WaitFieldEffectSpriteAnim, }; const union AffineAnimCmd sAffineAnim_ReflectionDistortion_0[] = { AFFINEANIMCMD_FRAME(-256, 256, 128, 0), AFFINEANIMCMD_FRAME(1, 0, 0, 4), AFFINEANIMCMD_FRAME(0, 0, 0, 8), AFFINEANIMCMD_FRAME(-1, 0, 0, 4), AFFINEANIMCMD_FRAME(0, 0, 0, 8), AFFINEANIMCMD_FRAME(-1, 0, 0, 4), AFFINEANIMCMD_FRAME(0, 0, 0, 8), AFFINEANIMCMD_FRAME(1, 0, 0, 4), AFFINEANIMCMD_FRAME(0, 0, 0, 8), AFFINEANIMCMD_JUMP(1), }; const union AffineAnimCmd sAffineAnim_ReflectionDistortion_1[] = { AFFINEANIMCMD_FRAME(256, 256, 128, 0), AFFINEANIMCMD_FRAME(-1, 0, 0, 4), AFFINEANIMCMD_FRAME(0, 0, 0, 8), AFFINEANIMCMD_FRAME(1, 0, 0, 4), AFFINEANIMCMD_FRAME(0, 0, 0, 8), AFFINEANIMCMD_FRAME(1, 0, 0, 4), AFFINEANIMCMD_FRAME(0, 0, 0, 8), AFFINEANIMCMD_FRAME(-1, 0, 0, 4), AFFINEANIMCMD_FRAME(0, 0, 0, 8), AFFINEANIMCMD_JUMP(1), }; const union AffineAnimCmd *const sAffineAnims_ReflectionDistortion[] = { sAffineAnim_ReflectionDistortion_0, sAffineAnim_ReflectionDistortion_1, }; const struct SpriteTemplate gFieldEffectObjectTemplate_ReflectionDistortion = { .tileTag = 0x0, .paletteTag = SPRITE_INVALID_TAG, .oam = &gDummyOamData, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = sAffineAnims_ReflectionDistortion, .callback = SpriteCallbackDummy, }; /* static const struct SpriteFrameImage sPicTable_Sparkle[] = { overworld_frame(gFieldEffectObjectPic_Sparkle, 2, 2, 0), overworld_frame(gFieldEffectObjectPic_Sparkle, 2, 2, 1), overworld_frame(gFieldEffectObjectPic_Sparkle, 2, 2, 2), overworld_frame(gFieldEffectObjectPic_Sparkle, 2, 2, 3), overworld_frame(gFieldEffectObjectPic_Sparkle, 2, 2, 4), overworld_frame(gFieldEffectObjectPic_Sparkle, 2, 2, 5), }; static const union AnimCmd sAnim_Sparkle[] = { ANIMCMD_FRAME(0, 8), ANIMCMD_FRAME(1, 8), ANIMCMD_FRAME(2, 8), ANIMCMD_FRAME(3, 8), ANIMCMD_FRAME(4, 8), ANIMCMD_FRAME(5, 8), ANIMCMD_LOOP(0), ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(1, 4), ANIMCMD_FRAME(2, 4), ANIMCMD_FRAME(3, 4), ANIMCMD_FRAME(4, 4), ANIMCMD_FRAME(5, 4), ANIMCMD_LOOP(3), ANIMCMD_FRAME(0, 8), ANIMCMD_FRAME(1, 8), ANIMCMD_FRAME(2, 8), ANIMCMD_FRAME(3, 8), ANIMCMD_FRAME(4, 8), ANIMCMD_FRAME(5, 8), ANIMCMD_END, }; static const union AnimCmd *const sAnimTable_Sparkle[] = { sAnim_Sparkle, }; const struct SpriteTemplate gFieldEffectObjectTemplate_Sparkle = { .tileTag = 0xFFFF, .paletteTag = 0xFFFF, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_Sparkle, .images = sPicTable_Sparkle, .affineAnims = gDummySpriteAffineAnimTable, .callback = WaitFieldEffectSpriteAnim, }; */ static const struct SpriteFrameImage sPicTable_TreeDisguise[] = { overworld_frame(gFieldEffectObjectPic_TreeDisguise, 2, 4, 0), overworld_frame(gFieldEffectObjectPic_TreeDisguise, 2, 4, 1), overworld_frame(gFieldEffectObjectPic_TreeDisguise, 2, 4, 2), overworld_frame(gFieldEffectObjectPic_TreeDisguise, 2, 4, 3), overworld_frame(gFieldEffectObjectPic_TreeDisguise, 2, 4, 4), overworld_frame(gFieldEffectObjectPic_TreeDisguise, 2, 4, 5), overworld_frame(gFieldEffectObjectPic_TreeDisguise, 2, 4, 6), }; static const union AnimCmd sAnim_TreeDisguise[] = { ANIMCMD_FRAME(0, 16), ANIMCMD_END, }; static const union AnimCmd sAnim_TreeDisguiseReveal[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(1, 4), ANIMCMD_FRAME(2, 4), ANIMCMD_FRAME(3, 4), ANIMCMD_FRAME(4, 4), ANIMCMD_FRAME(5, 4), ANIMCMD_FRAME(6, 4), ANIMCMD_END, }; static const union AnimCmd *const sAnimTable_TreeDisguise[] = { sAnim_TreeDisguise, sAnim_TreeDisguiseReveal, }; const struct SpriteTemplate gFieldEffectObjectTemplate_TreeDisguise = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = SPRITE_INVALID_TAG, .oam = &gObjectEventBaseOam_16x32, .anims = sAnimTable_TreeDisguise, .images = sPicTable_TreeDisguise, .affineAnims = gDummySpriteAffineAnimTable, .callback = UpdateDisguiseFieldEffect, }; static const struct SpriteFrameImage sPicTable_MountainDisguise[] = { overworld_frame(gFieldEffectObjectPic_MountainDisguise, 2, 4, 0), overworld_frame(gFieldEffectObjectPic_MountainDisguise, 2, 4, 1), overworld_frame(gFieldEffectObjectPic_MountainDisguise, 2, 4, 2), overworld_frame(gFieldEffectObjectPic_MountainDisguise, 2, 4, 3), overworld_frame(gFieldEffectObjectPic_MountainDisguise, 2, 4, 4), overworld_frame(gFieldEffectObjectPic_MountainDisguise, 2, 4, 5), overworld_frame(gFieldEffectObjectPic_MountainDisguise, 2, 4, 6), }; static const union AnimCmd sAnim_MountainDisguise[] = { ANIMCMD_FRAME(0, 16), ANIMCMD_END, }; static const union AnimCmd sAnim_MountainDisguiseReveal[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(1, 4), ANIMCMD_FRAME(2, 4), ANIMCMD_FRAME(3, 4), ANIMCMD_FRAME(4, 4), ANIMCMD_FRAME(5, 4), ANIMCMD_FRAME(6, 4), ANIMCMD_END, }; static const union AnimCmd *const sAnimTable_MountainDisguise[] = { sAnim_MountainDisguise, sAnim_MountainDisguiseReveal, }; const struct SpriteTemplate gFieldEffectObjectTemplate_MountainDisguise = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = SPRITE_INVALID_TAG, .oam = &gObjectEventBaseOam_16x32, .anims = sAnimTable_MountainDisguise, .images = sPicTable_MountainDisguise, .affineAnims = gDummySpriteAffineAnimTable, .callback = UpdateDisguiseFieldEffect, }; static const struct SpriteFrameImage sPicTable_SandDisguisePlaceholder[] = { overworld_frame(gFieldEffectObjectPic_SandDisguisePlaceholder, 2, 4, 0), overworld_frame(gFieldEffectObjectPic_SandDisguisePlaceholder, 2, 4, 1), overworld_frame(gFieldEffectObjectPic_SandDisguisePlaceholder, 2, 4, 2), overworld_frame(gFieldEffectObjectPic_SandDisguisePlaceholder, 2, 4, 3), overworld_frame(gFieldEffectObjectPic_SandDisguisePlaceholder, 2, 4, 4), overworld_frame(gFieldEffectObjectPic_SandDisguisePlaceholder, 2, 4, 5), overworld_frame(gFieldEffectObjectPic_SandDisguisePlaceholder, 2, 4, 6), }; const struct SpriteTemplate gFieldEffectObjectTemplate_SandDisguisePlaceholder = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = SPRITE_INVALID_TAG, .oam = &gObjectEventBaseOam_16x32, .anims = sAnimTable_TreeDisguise, .images = sPicTable_SandDisguisePlaceholder, .affineAnims = gDummySpriteAffineAnimTable, .callback = UpdateDisguiseFieldEffect, }; static const struct SpriteFrameImage sPicTable_Bird[] = { overworld_frame(gFieldEffectObjectPic_Bird, 8, 8, 0), overworld_frame(gFieldEffectObjectPic_Bird, 8, 8, 1), overworld_frame(gFieldEffectObjectPic_Bird, 8, 8, 2), overworld_frame(gFieldEffectObjectPic_Bird, 8, 8, 3), overworld_frame(gFieldEffectObjectPic_Bird, 8, 8, 4), }; static const union AnimCmd sAnim_Bird_0[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; static const union AnimCmd sAnim_Bird_1[] = { ANIMCMD_FRAME(1, 1), ANIMCMD_END, }; static const union AnimCmd sAnim_Bird_2[] = { ANIMCMD_FRAME(2, 1), ANIMCMD_END, }; static const union AnimCmd sAnim_Bird_3[] = { ANIMCMD_FRAME(3, 1), ANIMCMD_END, }; static const union AnimCmd sAnim_Bird_4[] = { ANIMCMD_FRAME(4, 1), ANIMCMD_END, }; static const union AnimCmd *const sAnimTable_Bird[] = { sAnim_Bird_0, sAnim_Bird_1, sAnim_Bird_2, sAnim_Bird_3, sAnim_Bird_4, }; const struct SpriteTemplate gFieldEffectObjectTemplate_Bird = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = SPRITE_INVALID_TAG, .oam = &gObjectEventBaseOam_64x64, .anims = sAnimTable_Bird, .images = sPicTable_Bird, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, }; static const struct SpriteFrameImage sPicTable_ShortGrass[] = { overworld_frame(gFieldEffectObjectPic_ShortGrass, 2, 2, 0), overworld_frame(gFieldEffectObjectPic_ShortGrass, 2, 2, 1), }; static const union AnimCmd sAnim_ShortGrass[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(1, 4), ANIMCMD_END, }; static const union AnimCmd *const sAnimTable_ShortGrass[] = { sAnim_ShortGrass, }; const struct SpriteTemplate gFieldEffectObjectTemplate_ShortGrass = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_ShortGrass, .images = sPicTable_ShortGrass, .affineAnims = gDummySpriteAffineAnimTable, .callback = UpdateShortGrassFieldEffect, }; static const struct SpriteFrameImage sPicTable_HotSpringsWater[] = { obj_frame_tiles(gFieldEffectObjectPic_HotSpringsWater), }; static const union AnimCmd sAnim_HotSpringsWater[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_END, }; static const union AnimCmd *const sAnimTable_HotSpringsWater[] = { sAnim_HotSpringsWater, }; const struct SpriteTemplate gFieldEffectObjectTemplate_HotSpringsWater = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = FLDEFF_PAL_TAG_GENERAL_1, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_HotSpringsWater, .images = sPicTable_HotSpringsWater, .affineAnims = gDummySpriteAffineAnimTable, .callback = UpdateHotSpringsWaterFieldEffect, }; static const struct SpriteFrameImage sPicTable_AshPuff[] = { overworld_frame(gFieldEffectObjectPic_AshPuff, 2, 2, 0), overworld_frame(gFieldEffectObjectPic_AshPuff, 2, 2, 1), overworld_frame(gFieldEffectObjectPic_AshPuff, 2, 2, 2), overworld_frame(gFieldEffectObjectPic_AshPuff, 2, 2, 3), overworld_frame(gFieldEffectObjectPic_AshPuff, 2, 2, 4), }; static const union AnimCmd sAnim_AshPuff[] = { ANIMCMD_FRAME(0, 6), ANIMCMD_FRAME(1, 6), ANIMCMD_FRAME(2, 6), ANIMCMD_FRAME(3, 6), ANIMCMD_FRAME(4, 6), ANIMCMD_END, }; static const union AnimCmd *const sAnimTable_AshPuff[] = { sAnim_AshPuff, }; const struct SpriteTemplate gFieldEffectObjectTemplate_AshPuff = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = FLDEFF_PAL_TAG_ASH, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_AshPuff, .images = sPicTable_AshPuff, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCB_PopOutOfAsh, }; const struct SpritePalette gSpritePalette_Ash = { .data = gFieldEffectPal_Ash, .tag = FLDEFF_PAL_TAG_ASH }; static const struct SpriteFrameImage sPicTable_AshLaunch[] = { overworld_frame(gFieldEffectObjectPic_AshLaunch, 2, 2, 0), overworld_frame(gFieldEffectObjectPic_AshLaunch, 2, 2, 1), overworld_frame(gFieldEffectObjectPic_AshLaunch, 2, 2, 2), overworld_frame(gFieldEffectObjectPic_AshLaunch, 2, 2, 3), overworld_frame(gFieldEffectObjectPic_AshLaunch, 2, 2, 4), }; static const union AnimCmd sAnim_AshLaunch[] = { ANIMCMD_FRAME(0, 6), ANIMCMD_FRAME(1, 6), ANIMCMD_FRAME(2, 6), ANIMCMD_FRAME(3, 6), ANIMCMD_FRAME(4, 6), ANIMCMD_END, }; static const union AnimCmd *const sAnimTable_AshLaunch[] = { sAnim_AshLaunch, }; const struct SpriteTemplate gFieldEffectObjectTemplate_AshLaunch = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = FLDEFF_PAL_TAG_ASH, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_AshLaunch, .images = sPicTable_AshLaunch, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCB_AshLaunch, }; static const struct SpriteFrameImage sPicTable_Bubbles[] = { overworld_frame(gFieldEffectObjectPic_Bubbles, 2, 4, 0), overworld_frame(gFieldEffectObjectPic_Bubbles, 2, 4, 1), overworld_frame(gFieldEffectObjectPic_Bubbles, 2, 4, 2), overworld_frame(gFieldEffectObjectPic_Bubbles, 2, 4, 3), overworld_frame(gFieldEffectObjectPic_Bubbles, 2, 4, 4), overworld_frame(gFieldEffectObjectPic_Bubbles, 2, 4, 5), overworld_frame(gFieldEffectObjectPic_Bubbles, 2, 4, 6), overworld_frame(gFieldEffectObjectPic_Bubbles, 2, 4, 7), }; static const union AnimCmd sAnim_Bubbles[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(1, 4), ANIMCMD_FRAME(2, 4), ANIMCMD_FRAME(3, 6), ANIMCMD_FRAME(4, 6), ANIMCMD_FRAME(5, 4), ANIMCMD_FRAME(6, 4), ANIMCMD_FRAME(7, 4), ANIMCMD_END, }; static const union AnimCmd *const sAnimTable_Bubbles[] = { sAnim_Bubbles, }; const struct SpriteTemplate gFieldEffectObjectTemplate_Bubbles = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, .oam = &gObjectEventBaseOam_16x32, .anims = sAnimTable_Bubbles, .images = sPicTable_Bubbles, .affineAnims = gDummySpriteAffineAnimTable, .callback = UpdateBubblesFieldEffect, }; static const struct SpriteFrameImage sPicTable_SmallSparkle[] = { overworld_frame(gFieldEffectObjectPic_SmallSparkle, 2, 2, 0), overworld_frame(gFieldEffectObjectPic_SmallSparkle, 2, 2, 1), }; static const union AnimCmd sAnim_SmallSparkle[] = { ANIMCMD_FRAME(0, 3), ANIMCMD_FRAME(1, 5), ANIMCMD_FRAME(0, 5), ANIMCMD_END, }; static const union AnimCmd *const sAnimTable_SmallSparkle[] = { sAnim_SmallSparkle, }; const struct SpriteTemplate gFieldEffectObjectTemplate_SmallSparkle = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = FLDEFF_PAL_TAG_SMALL_SPARKLE, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_SmallSparkle, .images = sPicTable_SmallSparkle, .affineAnims = gDummySpriteAffineAnimTable, .callback = UpdateSparkleFieldEffect, }; const struct SpritePalette gSpritePalette_SmallSparkle = { .data = gFieldEffectPal_SmallSparkle, .tag = FLDEFF_PAL_TAG_SMALL_SPARKLE };