diff options
author | GriffinR <griffin.g.richards@gmail.com> | 2020-02-23 13:18:54 -0500 |
---|---|---|
committer | huderlem <huderlem@gmail.com> | 2020-02-25 12:54:08 -0600 |
commit | 51cd0ac08116674a8ebd258af0620c2f7de9dc0e (patch) | |
tree | 27f125cc057a019049feccabc746ce09ac91a2f5 /src/battle_anim_smokescreen.c | |
parent | dc3c2b72f26463e4368f51e0380b8605ec06c40a (diff) |
Rename battle anim type files, remove unneeded ARG_RET_IDs
Diffstat (limited to 'src/battle_anim_smokescreen.c')
-rw-r--r-- | src/battle_anim_smokescreen.c | 217 |
1 files changed, 217 insertions, 0 deletions
diff --git a/src/battle_anim_smokescreen.c b/src/battle_anim_smokescreen.c new file mode 100644 index 000000000..a8c043e67 --- /dev/null +++ b/src/battle_anim_smokescreen.c @@ -0,0 +1,217 @@ +#include "global.h" +#include "battle_gfx_sfx_util.h" +#include "data.h" +#include "decompress.h" +#include "graphics.h" +#include "sprite.h" +#include "util.h" +#include "constants/pokemon.h" + +static void SmokescreenImpact_Callback(struct Sprite *); +static void SpriteCB_DestroySprite(struct Sprite *sprite); + +// The below data for smokescreen starts and ends with some data that belongs to battle_gfx_sfx_util.c + +const u8 gUnknown_0831C604[] = +{ + [NATURE_HARDY] = 0, + [NATURE_LONELY] = 0, + [NATURE_BRAVE] = 1, + [NATURE_ADAMANT] = 0, + [NATURE_NAUGHTY] = 1, + [NATURE_BOLD] = 1, + [NATURE_DOCILE] = 2, + [NATURE_RELAXED] = 0, + [NATURE_IMPISH] = 0, + [NATURE_LAX] = 0, + [NATURE_TIMID] = 1, + [NATURE_HASTY] = 1, + [NATURE_SERIOUS] = 1, + [NATURE_JOLLY] = 0, + [NATURE_NAIVE] = 2, + [NATURE_MODEST] = 1, + [NATURE_MILD] = 0, + [NATURE_QUIET] = 1, + [NATURE_BASHFUL] = 1, + [NATURE_RASH] = 0, + [NATURE_CALM] = 0, + [NATURE_GENTLE] = 0, + [NATURE_SASSY] = 1, + [NATURE_CAREFUL] = 1, + [NATURE_QUIRKY] = 0, +}; + +static const struct CompressedSpriteSheet sSmokescreenImpactSpriteSheet = +{ + .data = gSmokescreenImpactTiles, .size = 0x180, .tag = 55019 +}; + +static const struct CompressedSpritePalette sSmokescreenImpactSpritePalette = +{ + .data = gSmokescreenImpactPalette, .tag = 55019 +}; + +static const struct OamData sOamData_SmokescreenImpact = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = 0, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(16x16), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(16x16), + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0 +}; + +static const union AnimCmd sAnim_SmokescreenImpact_0[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(4, 4), + ANIMCMD_FRAME(8, 4), + ANIMCMD_END +}; + +static const union AnimCmd sAnim_SmokescreenImpact_1[] = +{ + ANIMCMD_FRAME(0, 4, .hFlip = TRUE), + ANIMCMD_FRAME(4, 4, .hFlip = TRUE), + ANIMCMD_FRAME(8, 4, .hFlip = TRUE), + ANIMCMD_END +}; + +static const union AnimCmd sAnim_SmokescreenImpact_2[] = +{ + ANIMCMD_FRAME(0, 4, .vFlip = TRUE), + ANIMCMD_FRAME(4, 4, .vFlip = TRUE), + ANIMCMD_FRAME(8, 4, .vFlip = TRUE), + ANIMCMD_END +}; + +static const union AnimCmd sAnim_SmokescreenImpact_3[] = +{ + ANIMCMD_FRAME(0, 4, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(4, 4, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(8, 4, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_END +}; + +static const union AnimCmd *const sAnims_SmokescreenImpact[] = +{ + sAnim_SmokescreenImpact_0, + sAnim_SmokescreenImpact_1, + sAnim_SmokescreenImpact_2, + sAnim_SmokescreenImpact_3, +}; + +static const struct SpriteTemplate sSmokescreenImpactSpriteTemplate = +{ + .tileTag = 55019, + .paletteTag = 55019, + .oam = &sOamData_SmokescreenImpact, + .anims = sAnims_SmokescreenImpact, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_DestroySprite +}; + +const struct CompressedSpriteSheet gSpriteSheet_EnemyShadow = +{ + .data = gEnemyMonShadow_Gfx, .size = 0x80, .tag = 55129 +}; + +static const struct OamData gUnknown_0831C6A8 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = 0, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x8), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(32x8), + .tileNum = 0, + .priority = 3, + .paletteNum = 0, + .affineParam = 0 +}; + +const struct SpriteTemplate gSpriteTemplate_EnemyShadow = +{ + .tileTag = 55129, + .paletteTag = 55039, + .oam = &gUnknown_0831C6A8, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_SetInvisible +}; + +u8 SmokescreenImpact(s16 x, s16 y, u8 a3) +{ + u8 mainSpriteId; + u8 spriteId1, spriteId2, spriteId3, spriteId4; + struct Sprite *mainSprite; + + if (GetSpriteTileStartByTag(sSmokescreenImpactSpriteSheet.tag) == 0xFFFF) + { + LoadCompressedSpriteSheetUsingHeap(&sSmokescreenImpactSpriteSheet); + LoadCompressedSpritePaletteUsingHeap(&sSmokescreenImpactSpritePalette); + } + + mainSpriteId = CreateInvisibleSpriteWithCallback(SmokescreenImpact_Callback); + mainSprite = &gSprites[mainSpriteId]; + mainSprite->data[1] = a3; + + spriteId1 = CreateSprite(&sSmokescreenImpactSpriteTemplate, x - 16, y - 16, 2); + gSprites[spriteId1].data[0] = mainSpriteId; + mainSprite->data[0]++; + AnimateSprite(&gSprites[spriteId1]); + + spriteId2 = CreateSprite(&sSmokescreenImpactSpriteTemplate, x, y - 16, 2); + gSprites[spriteId2].data[0] = mainSpriteId; + mainSprite->data[0]++; + StartSpriteAnim(&gSprites[spriteId2], 1); + AnimateSprite(&gSprites[spriteId2]); + + spriteId3 = CreateSprite(&sSmokescreenImpactSpriteTemplate, x - 16, y, 2); + gSprites[spriteId3].data[0] = mainSpriteId; + mainSprite->data[0]++; + StartSpriteAnim(&gSprites[spriteId3], 2); + AnimateSprite(&gSprites[spriteId3]); + + spriteId4 = CreateSprite(&sSmokescreenImpactSpriteTemplate, x, y, 2); + gSprites[spriteId4].data[0] = mainSpriteId; + mainSprite->data[0]++; + StartSpriteAnim(&gSprites[spriteId4], 3); + AnimateSprite(&gSprites[spriteId4]); + + return mainSpriteId; +} + +static void SmokescreenImpact_Callback(struct Sprite *sprite) +{ + if (!sprite->data[0]) + { + FreeSpriteTilesByTag(sSmokescreenImpactSpriteSheet.tag); + FreeSpritePaletteByTag(sSmokescreenImpactSpritePalette.tag); + if (!sprite->data[1]) + DestroySprite(sprite); + else + sprite->callback = SpriteCallbackDummy; + } +} + +static void SpriteCB_DestroySprite(struct Sprite *sprite) +{ + if (sprite->animEnded) + { + gSprites[sprite->data[0]].data[0]--; + DestroySprite(sprite); + } +} |