summaryrefslogtreecommitdiff
path: root/src/smokescreen.c
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2019-07-29 09:46:02 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2019-07-29 09:46:02 -0400
commit78535eea89e8b71f37e188289793e3e18c9bb985 (patch)
treec3d7ec29b849e810cc6bc90827f9053a4f486b64 /src/smokescreen.c
parentf4e6816db9622dfa93466138ed075075009295b8 (diff)
parent3f477dae36c99bcb03a38be251dbef2f7e344ebc (diff)
Merge branch 'master' into modern_gcc
Diffstat (limited to 'src/smokescreen.c')
-rw-r--r--src/smokescreen.c73
1 files changed, 73 insertions, 0 deletions
diff --git a/src/smokescreen.c b/src/smokescreen.c
new file mode 100644
index 000000000..dc2887007
--- /dev/null
+++ b/src/smokescreen.c
@@ -0,0 +1,73 @@
+#include "global.h"
+#include "data2.h"
+#include "decompress.h"
+#include "sprite.h"
+#include "util.h"
+
+
+static void sub_8046388(struct Sprite *);
+
+
+u8 sub_8046234(s16 x, s16 y, u8 a3)
+{
+ u8 mainSpriteId;
+ u8 spriteId1, spriteId2, spriteId3, spriteId4;
+ struct Sprite *mainSprite;
+
+ if (GetSpriteTileStartByTag(gUnknown_081FAEA4.tag) == 0xFFFF)
+ {
+ LoadCompressedObjectPic(&gUnknown_081FAEA4);
+ LoadCompressedObjectPalette(&gUnknown_081FAEAC);
+ }
+
+ mainSpriteId = CreateInvisibleSpriteWithCallback(sub_8046388);
+ mainSprite = &gSprites[mainSpriteId];
+ mainSprite->data[1] = a3;
+
+ spriteId1 = CreateSprite(&gSpriteTemplate_81FAF0C, x - 16, y - 16, 2);
+ gSprites[spriteId1].data[0] = mainSpriteId;
+ mainSprite->data[0]++;
+ AnimateSprite(&gSprites[spriteId1]);
+
+ spriteId2 = CreateSprite(&gSpriteTemplate_81FAF0C, x, y - 16, 2);
+ gSprites[spriteId2].data[0] = mainSpriteId;
+ mainSprite->data[0]++;
+ StartSpriteAnim(&gSprites[spriteId2], 1);
+ AnimateSprite(&gSprites[spriteId2]);
+
+ spriteId3 = CreateSprite(&gSpriteTemplate_81FAF0C, x - 16, y, 2);
+ gSprites[spriteId3].data[0] = mainSpriteId;
+ mainSprite->data[0]++;
+ StartSpriteAnim(&gSprites[spriteId3], 2);
+ AnimateSprite(&gSprites[spriteId3]);
+
+ spriteId4 = CreateSprite(&gSpriteTemplate_81FAF0C, x, y, 2);
+ gSprites[spriteId4].data[0] = mainSpriteId;
+ mainSprite->data[0]++;
+ StartSpriteAnim(&gSprites[spriteId4], 3);
+ AnimateSprite(&gSprites[spriteId4]);
+
+ return mainSpriteId;
+}
+
+static void sub_8046388(struct Sprite *sprite)
+{
+ if (!sprite->data[0])
+ {
+ FreeSpriteTilesByTag(gUnknown_081FAEA4.tag);
+ FreeSpritePaletteByTag(gUnknown_081FAEAC.tag);
+ if (!sprite->data[1])
+ DestroySprite(sprite);
+ else
+ sprite->callback = SpriteCallbackDummy;
+ }
+}
+
+void sub_80463CC(struct Sprite *sprite)
+{
+ if (sprite->animEnded)
+ {
+ gSprites[sprite->data[0]].data[0]--;
+ DestroySprite(sprite);
+ }
+}