// used in 3 moves: // Move_HOWL, Move_ROAR, Move_GROWL void sub_812B18C(u8 taskId) { u16 species = 0; s8 pan = BattleAnimAdjustPanning(SOUND_PAN_ATTACKER_NEG); if (IsContest()) { if (!gBattleAnimArgs[0]) species = shared19348.unk0; else DestroyAnimVisualTask(taskId); } else { u8 bank; if (gBattleAnimArgs[0] == 0) bank = gBattleAnimAttacker; else if (gBattleAnimArgs[0] == 1) bank = gBattleAnimTarget; else if (gBattleAnimArgs[0] == 2) bank = gBattleAnimAttacker ^ 0x2; else bank = gBattleAnimTarget ^ 0x2; if (gBattleAnimArgs[0] == 1 || gBattleAnimArgs[0] == 3) { if (!IsAnimBankSpriteVisible(bank)) { DestroyAnimVisualTask(taskId); return; } } if (GetBattlerSide(bank)) species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[bank]], 0xB); else species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], 0xB); } if (species != 0) { s16 mode = gBattleAnimArgs[1]; if (mode == 0xFF) PlayCry1(species, pan); else PlayCry3(species, pan, mode); } DestroyAnimVisualTask(taskId); }
void sub_80CC5F8(u8 taskId) { struct Task* task = &gTasks[taskId]; switch (task->data[0]) { case 0: task->data[8] = IndexOfSpritePaletteTag(0x274f) * 16 + 256; task->data[12] = IndexOfSpritePaletteTag(0x27b0) * 16 + 256; task->data[0]++; break; case 1: task->data[9]++; if (task->data[9] >= 0) { task->data[9] = 0; BlendPalette(task->data[8], 0x10, task->data[10], sMagicalLeafBlendColors[task->data[11]]); BlendPalette(task->data[12], 0x10, task->data[10], sMagicalLeafBlendColors[task->data[11]]); task->data[10]++; if (task->data[10] == 17) { task->data[10] = 0; task->data[11]++; if (task->data[11] == 7) task->data[11] = 0; } } break; } if (gBattleAnimArgs[7] == -1) DestroyAnimVisualTask(taskId); }
// rainbow effect for musical notes void sub_80CEA20(u8 taskId) { u16 i; u16 j; u16 index; index = IndexOfSpritePaletteTag(gUnknown_083D712C[0][0]); if (index != 0xFF) { index = (index << 4) + 0x100; for (i = 1; i < 6; i++) { gPlttBufferFaded[index + i] = gUnknown_083D712C[0][i]; } } for (j = 1; j < 4; j++) { index = AllocSpritePalette(gUnknown_083D712C[j][0]); if (index != 0xFF) { index = (index << 4) + 0x100; for (i = 1; i < 6; i++) { gPlttBufferFaded[index + i] = gUnknown_083D712C[j][i]; } } } DestroyAnimVisualTask(taskId); }
void sub_80D6080(u8 taskId) { struct Struct_sub_8078914 unk; sub_8078914(&unk); BlendPalette(unk.field_8 << 4, 16, gBattleAnimArgs[0], gBattleAnimArgs[1]); // u16 palOffset, u16 numEntries, u8 coeff, u16 blendColor DestroyAnimVisualTask(taskId); }
void sub_80CBDF4(u8 taskId) { struct Task *task = &gTasks[taskId]; task->data[4] = GetBattlerSubpriority(gBattleAnimTarget) - 1; task->data[6] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); task->data[7] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); task->data[10] = sub_807A100(gBattleAnimTarget, 1); task->data[11] = sub_807A100(gBattleAnimTarget, 0); task->data[5] = (GetBattlerSide(gBattleAnimTarget) == 1) ? 1 : -1; task->data[9] = 0x38 - (task->data[5] * 64); task->data[8] = task->data[7] - task->data[9] + task->data[6]; task->data[2] = CreateSprite(&gSpriteTemplate_83D6884, task->data[8], task->data[9], task->data[4]); if (task->data[2] == 0x40) DestroyAnimVisualTask(taskId); gSprites[task->data[2]].data[0] = 10; gSprites[task->data[2]].data[1] = task->data[8]; gSprites[task->data[2]].data[2] = task->data[6] - (task->data[10] / 2 + 10) * task->data[5]; gSprites[task->data[2]].data[3] = task->data[9]; gSprites[task->data[2]].data[4] = task->data[7] + (task->data[11] / 2 + 10) * task->data[5]; gSprites[task->data[2]].data[5] = sub_80CC338(&gSprites[task->data[2]]); InitAnimArcTranslation(&gSprites[task->data[2]]); task->func = sub_80CBF5C; }
void sub_80D60B4(u8 taskId) { s8 unk; u8 spriteId; if (gTasks[taskId].data[0] == 0) { gTasks[taskId].data[1] = gBattleAnimArgs[0]; gTasks[taskId].data[2] = gBattleAnimArgs[1]; gTasks[taskId].data[3] = gBattleAnimArgs[2]; gTasks[taskId].data[4] = gBattleAnimArgs[3]; } gTasks[taskId].data[0]++; spriteId = gBankSpriteIds[gAnimBankTarget]; if (!gTasks[taskId].data[4]) unk = gUnknown_083D9794[gTasks[taskId].data[0] % 10]; else unk = gUnknown_083D97A4[gTasks[taskId].data[0] % 10]; if (gTasks[taskId].data[3] == 1) gSprites[spriteId].pos2.y = gBattleAnimArgs[1] * unk < 0 ? -(gBattleAnimArgs[1] * unk) : gBattleAnimArgs[1] * unk; else gSprites[spriteId].pos2.x = gBattleAnimArgs[1] * unk; if (gTasks[taskId].data[0] == gTasks[taskId].data[1]) { gSprites[spriteId].pos2.x = 0; gSprites[spriteId].pos2.y = 0; DestroyAnimVisualTask(taskId); } }
// used in 6 moves: // Move_SKY_ATTACK, Move_SUPERPOWER, Move_ENCORE, // Move_FLATTER, Move_RETURN, Move_COSMIC_POWER void sub_812B340(u8 taskId) { u16 songNum = gBattleAnimArgs[0]; s8 pan = BattleAnimAdjustPanning(gBattleAnimArgs[1]); PlaySE2WithPanning(songNum, pan); DestroyAnimVisualTask(taskId); }
// clears the rainbow effect for musical notes. void sub_80CEAD8(u8 taskId) { u16 i; for (i = 1; i < 4; i++) { FreeSpritePaletteByTag(gUnknown_083D712C[i][0]); } DestroyAnimVisualTask(taskId); }
void sub_80DDA4C(u8 taskId) { if (gAnimMoveDmg < 33) gBattleAnimArgs[7] = 0; if ((u32)gAnimMoveDmg - 33 < 33) gBattleAnimArgs[7] = 1; if (gAnimMoveDmg > 65) gBattleAnimArgs[7] = 2; DestroyAnimVisualTask(taskId); }
// used in Move_HYPER_VOICE void sub_812B2B8(u8 taskId) { u16 species; s8 pan = BattleAnimAdjustPanning(SOUND_PAN_ATTACKER_NEG); if (IsContest()) species = shared19348.unk0; else species = gAnimSpeciesByBanks[gBattleAnimAttacker]; if (species != 0) PlayCry3(species, pan, 4); DestroyAnimVisualTask(taskId); }
void sub_80CA928(u8 taskId) { gTasks[taskId].data[0]--; if (gTasks[taskId].data[0] == -1) { gTasks[taskId].data[1]++; gTasks[taskId].data[0] = 6; gBattleAnimArgs[0] = 15; gBattleAnimArgs[1] = 0; gBattleAnimArgs[2] = 80; gBattleAnimArgs[3] = 0; CreateSpriteAndAnimate(&gSpriteTemplate_83D631C, 0, 0, sub_8079E90(gAnimBankTarget) + 1); } if (gTasks[taskId].data[1] == 15) DestroyAnimVisualTask(taskId); }
// player void sub_80D1EC8(u8 taskId) { u8 spriteId = GetAnimBattlerSpriteId(0); if (++gTasks[taskId].data[0] == 1) { sub_80798F4(&gTasks[taskId], GetAnimBattlerSpriteId(0), &gSpriteAffineAnim_83D7A98); gSprites[spriteId].pos2.x = 4; } else { gSprites[spriteId].pos2.x = -gSprites[spriteId].pos2.x; if (sub_807992C(&gTasks[taskId]) == 0) { gSprites[spriteId].pos2.x = 0; gSprites[spriteId].pos2.y = 0; DestroyAnimVisualTask(taskId); } } }
void sub_80DDA8C(u8 taskId) { if (gTasks[taskId].data[0] == 0) { sub_80789D4(0); gTasks[taskId].data[1] = 200; } gBattle_BG3_Y += gTasks[taskId].data[1] / 10; gTasks[taskId].data[1] -= 3; if (gTasks[taskId].data[0] == 120) { sub_80789D4(1); DestroyAnimVisualTask(taskId); } gTasks[taskId].data[0]++; }
void sub_80D1D9C(u8 taskId) { if (++gTasks[taskId].data[10] == 5) { gTasks[taskId].data[11] = 0x88; RequestSpriteCopy((u8 *)(&gTasks[taskId].data[11]), (u8 *)(®_BLDCNT), 2); BlendPalettes(sub_80791A8(1, 0, 0, 0, 0, 0, 0), 16, RGB(31, 31, 31)); } else if (gTasks[taskId].data[10] > 4) { gBattle_WIN0H = 0; gBattle_WIN0V = 0; REG_WININ = 0x3F3F; REG_WINOUT = 0x3F3F; REG_BLDCNT = 0; REG_BLDY = 0; DestroyAnimVisualTask(taskId); } }
static void sub_812B404(u8 taskId) { u16 dPan = TASK.data[3]; if (TASK.data[10]++ == TASK.data[5]) { u16 oldPan; TASK.data[10] = 0; oldPan = TASK.data[11]; TASK.data[11] = dPan + oldPan; TASK.data[11] = sub_8077104(TASK.data[11], oldPan); } gUnknown_0202F7D2 = TASK.data[11]; if (TASK.data[11] == TASK.data[2]) { DestroyAnimVisualTask(taskId); } }
void sub_80DDAF0(u8 taskId) { if (gTasks[taskId].data[0] == 0) { sub_80789D4(0); gTasks[taskId].data[0]++; gTasks[taskId].data[2] = gBattle_BG3_Y; } gTasks[taskId].data[1] += 80; gTasks[taskId].data[1] &= 0xFF; gBattle_BG3_Y = gTasks[taskId].data[2] + Cos(4, gTasks[taskId].data[1]); if (gBattleAnimArgs[7] == 0xFFF) { gBattle_BG3_Y = 0; sub_80789D4(1); DestroyAnimVisualTask(taskId); } }
static void sub_80D5E4C(u8 taskId) { struct Task *task = &gTasks[taskId]; switch (task->data[0]) { case 0: task->data[10] += task->data[12] * 2; if (++task->data[1] >= 2) { task->data[1] = 0; task->data[2]++; if (task->data[2] & 1) task->data[11] = 2; else task->data[11] = -2; } for (task->data[3] = 0; task->data[3] < task->data[13]; task->data[3]++) { gSprites[task->data[task->data[3] + 14]].pos2.x = task->data[10] + task->data[11]; } if (++task->data[9] == 16) { task->data[9] = 0; task->data[0]++; } break; case 1: if (++task->data[1] >= 5) { task->data[1] = 0; task->data[2]++; if (task->data[2] & 1) task->data[11] = 2; else task->data[11] = -2; } for (task->data[3] = 0; task->data[3] < task->data[13]; task->data[3]++) { gSprites[task->data[task->data[3] + 14]].pos2.x = task->data[10] + task->data[11]; } if (++task->data[9] == 96) { task->data[9] = 0; task->data[0]++; } break; case 2: task->data[10] -= task->data[12] * 2; if (++task->data[1] >= 2) { task->data[1] = 0; task->data[2]++; if (task->data[2] & 1) task->data[11] = 2; else task->data[11] = -2; } for (task->data[3] = 0; task->data[3] < task->data[13]; task->data[3]++) { gSprites[task->data[task->data[3] + 14]].pos2.x = task->data[10] + task->data[11]; } if (++task->data[9] == 16) { task->data[0]++; } break; case 3: for (task->data[3] = 0; task->data[3] < task->data[13]; task->data[3]++) { gSprites[task->data[task->data[3] + 14]].pos2.x = 0; } DestroyAnimVisualTask(taskId); break; } }
static void sub_80DD190(u8 taskId) { struct Struct_sub_8078914 subStruct; if (gTasks[taskId].data[0] == 0) gBattle_BG1_X += 0xFFFA; else gBattle_BG1_X += 6; gBattle_BG1_Y += -1; switch (gTasks[taskId].data[12]) { case 0: if (++gTasks[taskId].data[10] == 4) { gTasks[taskId].data[10] = 0; gTasks[taskId].data[11]++; REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8); if (gTasks[taskId].data[11] == 7) { gTasks[taskId].data[12]++; gTasks[taskId].data[11] = 0; } } break; case 1: if (++gTasks[taskId].data[11] == 101) { gTasks[taskId].data[11] = 7; gTasks[taskId].data[12]++; } break; case 2: if (++gTasks[taskId].data[10] == 4) { gTasks[taskId].data[10] = 0; gTasks[taskId].data[11]--; REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8); if (gTasks[taskId].data[11] == 0) { gTasks[taskId].data[12]++; gTasks[taskId].data[11] = 0; } } break; case 3: sub_8078914(&subStruct); DmaFill32Large(3, 0, subStruct.field_0, 0x2000, 0x1000); DmaClear32(3, subStruct.field_4, 0x800); if (!IsContest()) REG_BG1CNT_BITFIELD.charBaseBlock = 0; gTasks[taskId].data[12]++; // fall through case 4: gBattle_BG1_X = 0; gBattle_BG1_Y = 0; REG_BLDCNT = 0; REG_BLDALPHA = 0; REG_BG1CNT_BITFIELD.priority = 1; DestroyAnimVisualTask(taskId); break; } }
static void sub_80DD604(u8 taskId) { struct Task *task; task = &gTasks[taskId]; switch (task->data[0]) { case 0: task->data[6] -= task->data[4]; task->data[7] -= task->data[5]; gSprites[task->data[15]].pos2.x = task->data[6] >> 3; gSprites[task->data[15]].pos2.y = task->data[7] >> 3; if (++task->data[9] == 10) { task->data[11] = 20; task->data[0]++; } PlaySE12WithPanning(SE_W029, task->data[13]); break; case 1: if (--task->data[11] == 0) task->data[0]++; break; case 2: if (--task->data[9] != 0) { task->data[6] += task->data[4]; task->data[7] += task->data[5]; } else { task->data[6] = 0; task->data[7] = 0; task->data[0]++; } gSprites[task->data[15]].pos2.x = task->data[6] >> 3; gSprites[task->data[15]].pos2.y = task->data[7] >> 3; break; case 3: task->data[2] += task->data[4]; task->data[3] += task->data[5]; if (++task->data[9] >= task->data[10]) { task->data[9] = 0; sub_80DD774(task); task->data[13] += task->data[14]; PlaySE12WithPanning(SE_W091, task->data[13]); } if (--task->data[8] == 0) { task->data[0]++; } break; case 4: if (task->data[11] == 0) DestroyAnimVisualTask(taskId); break; } }
static void sub_80D0904(u8 taskId) { struct Task* task = &gTasks[taskId]; if (!sub_807992C(task)) DestroyAnimVisualTask(taskId); }
static void sub_80CBF5C(u8 taskId) { struct Task* task = &gTasks[taskId]; struct Sprite* sprite = &gSprites[task->data[2]]; int a = task->data[0]; switch (a) { case 4: sub_80CC358(task, taskId); if (TranslateAnimArc(sprite) == 0) { break; } else { task->data[15] = 5; task->data[0] = 0xFF; } break; case 8: sub_80CC358(task, taskId); if (TranslateAnimArc(sprite) == 0) { break; } else { task->data[15] = 9; task->data[0] = 0xFF; } break; case 0: sub_80CC358(task, taskId); if (TranslateAnimArc(sprite) == 0) break; task->data[15] = 1; task->data[0] = 0xFF; break; case 1: sprite->pos1.x += sprite->pos2.x; sprite->pos1.y += sprite->pos2.y; sprite->pos2.x = 0; sprite->pos2.y = 0; sprite->data[0] = 10; sprite->data[1] = sprite->pos1.x; sprite->data[2] = task->data[6]; sprite->data[3] = sprite->pos1.y; sprite->data[4] = task->data[7]; sprite->data[5] = sub_80CC338(sprite); task->data[4] += 2; task->data[3] = a; sprite->subpriority = task->data[4]; StartSpriteAnim(sprite, task->data[3]); InitAnimArcTranslation(sprite); task->data[0]++; break; case 2: sub_80CC358(task, taskId); if (TranslateAnimArc(sprite) == 0) break; task->data[15] = 3; task->data[0] = 0xFF; break; case 3: sprite->pos1.x += sprite->pos2.x; sprite->pos1.y += sprite->pos2.y; sprite->pos2.x = 0; sprite->pos2.y = 0; sprite->data[0] = 10; sprite->data[1] = sprite->pos1.x; sprite->data[2] = task->data[6] - ((task->data[10] / 2) + 10) * task->data[5]; sprite->data[3] = sprite->pos1.y; sprite->data[4] = task->data[7] - ((task->data[11] / 2) + 10) * task->data[5]; sprite->data[5] = sub_80CC338(sprite); task->data[3] = 2; sprite->subpriority = task->data[4]; StartSpriteAnim(sprite, task->data[3]); InitAnimArcTranslation(sprite); task->data[0]++; break; case 5: sprite->pos1.x += sprite->pos2.x; sprite->pos1.y += sprite->pos2.y; sprite->pos2.x = 0; sprite->pos2.y = 0; sprite->data[0] = 10; sprite->data[1] = sprite->pos1.x; sprite->data[2] = task->data[6] + ((task->data[10] / 2) + 10) * task->data[5]; sprite->data[3] = sprite->pos1.y; sprite->data[4] = task->data[7] + ((task->data[11] / 2) + 10) * task->data[5]; sprite->data[5] = sub_80CC338(sprite); task->data[4] -= 2; task->data[3] = 3; sprite->subpriority = task->data[4]; StartSpriteAnim(sprite, task->data[3]); InitAnimArcTranslation(sprite); task->data[0]++; break; case 6: sub_80CC358(task, taskId); if (TranslateAnimArc(sprite) == 0) break; task->data[15] = 7; task->data[0] = 0xFF; break; case 7: sprite->pos1.x += sprite->pos2.x; sprite->pos1.y += sprite->pos2.y; sprite->pos2.x = 0; sprite->pos2.y = 0; sprite->data[0] = 10; sprite->data[1] = sprite->pos1.x; sprite->data[2] = task->data[6]; sprite->data[3] = sprite->pos1.y; sprite->data[4] = task->data[7]; sprite->data[5] = sub_80CC338(sprite); task->data[4] += 2; task->data[3] = 4; sprite->subpriority = task->data[4]; StartSpriteAnim(sprite, task->data[3]); InitAnimArcTranslation(sprite); task->data[0]++; break; case 9: sprite->pos1.x += sprite->pos2.x; sprite->pos1.y += sprite->pos2.y; sprite->pos2.x = 0; sprite->pos2.y = 0; sprite->data[0] = 10; sprite->data[1] = sprite->pos1.x; sprite->data[2] = task->data[6] - ((task->data[10] / 2) + 10) * task->data[5]; sprite->data[3] = sprite->pos1.y; sprite->data[4] = task->data[7] + ((task->data[11] / 2) + 10) * task->data[5]; sprite->data[5] = sub_80CC338(sprite); task->data[3] = 5; sprite->subpriority = task->data[4]; StartSpriteAnim(sprite, task->data[3]); InitAnimArcTranslation(sprite); task->data[0]++; break; case 10: sub_80CC358(task, taskId); if (TranslateAnimArc(sprite) == 0) { break; } else { task->data[15] = 11; task->data[0] = 0xFF; } break; case 11: { sprite->pos1.x += sprite->pos2.x; sprite->pos1.y += sprite->pos2.y; sprite->pos2.x = 0; sprite->pos2.y = 0; sprite->data[0] = 10; sprite->data[1] = sprite->pos1.x; sprite->data[2] = task->data[8]; sprite->data[3] = sprite->pos1.y; sprite->data[4] = task->data[9]; sprite->data[5] = sub_80CC338(sprite); task->data[4] -= 2; task->data[3] = 6; sprite->subpriority = task->data[4]; StartSpriteAnim(sprite, task->data[3]); InitAnimArcTranslation(sprite); task->data[0]++; break; } case 12: sub_80CC358(task, taskId); if (TranslateAnimArc(sprite) != 0) { DestroySprite(sprite); task->data[0]++; } break; case 13: if (task->data[12] == 0) { DestroyAnimVisualTask(taskId); } break; case 255: task->data[1]++; if (task->data[1] > 5) { task->data[1] = 0; task->data[0] = task->data[15]; } break; } }