#include "global.h" #include "rom_8077ABC.h" #include "trig.h" #include "battle_anim.h" #include "sound.h" #include "palette.h" extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; extern struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FC8; extern struct SpriteTemplate gBattleAnimSpriteTemplate_83D6FF8; static void sub_80CE4D4(u8 taskId); // flash (a "ting!" flash effect.) // Used in Moonlight. void sub_80CE3EC(u8 taskId) { int a = sub_80791A8(1, 0, 0, 0, 0, 0, 0) & 0xFFFF; int b; int c; int d; gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 0; gTasks[taskId].data[2] = 0; gTasks[taskId].data[3] = a; gTasks[taskId].data[4] = 0; gTasks[taskId].data[5] = 0; gTasks[taskId].data[6] = 0; gTasks[taskId].data[7] = 13; gTasks[taskId].data[8] = 14; gTasks[taskId].data[9] = 15; b = sub_80792C0(1, 1, 1, 1); c = a | b; sub_8079BF4(&gTasks[taskId].data[14], &gTasks[taskId].data[15], (void*)c); b = b | (0x10000 << IndexOfSpritePaletteTag(0x27D2)); d = IndexOfSpritePaletteTag(0x27D3); BeginNormalPaletteFade((0x10000 << d) | b, 0, 0, 0x10, 32699); gTasks[taskId].func = sub_80CE4D4; sub_80CE4D4(taskId); } void sub_80CE4D4(u8 taskId) { struct Task* task = &gTasks[taskId]; switch (task->data[0]) { case 0: if (++task->data[1] > 0) { u16 color; u16 bitmask; u16 r3; u16 i; u16 j; task->data[1] = 0; if (++task->data[2] <= 15) { u16 red; u16 green; u16 blue; task->data[4] += task->data[7]; task->data[5] += task->data[8]; task->data[6] += task->data[9]; red = task->data[4] >> 3; green = task->data[5] >> 3; blue = task->data[6] >> 3; color = RGB(red, green, blue); } else { color = RGB(27, 29, 31); task->data[0]++; } bitmask = 1; r3 = 0; for (i = 0; i <= 15; i++) { if (task->data[3] & bitmask) { for (j = 1; j <= 15; j++) { gPlttBufferFaded[r3 + j] = color; } } bitmask <<= 1; r3 += 16; } } break; case 1: if (!gPaletteFade.active) { u8 spriteId; for (spriteId = 0; spriteId < MAX_SPRITES; spriteId++) { if (gSprites[spriteId].template == &gBattleAnimSpriteTemplate_83D6FC8 || gSprites[spriteId].template == &gBattleAnimSpriteTemplate_83D6FF8) gSprites[spriteId].data[0] = 1; } task->data[1] = 0; task->data[0]++; } break; case 2: if (++task->data[1] > 30) { BeginNormalPaletteFade((u32)sub_8079BFC(task->data[14], task->data[15]), 0, 16, 0, RGB(27, 29, 31)); task->data[0]++; } break; case 3: if (!gPaletteFade.active) DestroyAnimVisualTask(taskId); break; } }