void sub_80CAA14(struct Sprite* sprite) { u16 a = Random(); u16 b; StartSpriteAnim(sprite, a & 7); sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2); sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3); if (GetBattlerSide(gAnimBankAttacker)) { sprite->pos1.x -= 20; } else { sprite->pos1.x += 20; } b = Random(); sprite->data[0] = (b & 31) + 64; sprite->data[1] = sprite->pos1.x; sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2); sprite->data[3] = sprite->pos1.y; sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3); sub_8078D60(sprite); sprite->data[5] = Random() & 0xFF; sprite->data[6] = sprite->subpriority; sprite->callback = sub_80CAACC; sub_80CAACC(sprite); }
void do_boulder_dust(u8 taskId) { struct Struct_sub_8078914 subStruct; int var0 = 0; REG_BLDCNT = 0x3F42; REG_BLDALPHA = 0x1000; REG_BG1CNT_BITFIELD.priority = 1; REG_BG1CNT_BITFIELD.screenSize = 0; if (!IsContest()) REG_BG1CNT_BITFIELD.charBaseBlock = 1; gBattle_BG1_X = 0; gBattle_BG1_Y = 0; REG_BG1HOFS = 0; REG_BG1VOFS = 0; sub_8078914(&subStruct); DmaFill32Defvars(3, 0, subStruct.field_4, 0x1000); LZDecompressVram(&gBattleAnimBackgroundTilemap_SandstormBrew, subStruct.field_4); LZDecompressVram(&gBattleAnimBackgroundImage_SandstormBrew, subStruct.field_0); LoadCompressedPalette(&gBattleAnimSpritePalette_261, subStruct.field_8 << 4, 32); if (IsContest()) sub_80763FC(subStruct.field_8, (u16 *)subStruct.field_4, 0, 0); if (gBattleAnimArgs[0] != 0 && GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) var0 = 1; gTasks[taskId].data[0] = var0; gTasks[taskId].func = sub_80DD190; }
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_80DD978(struct Sprite *sprite) { if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) StartSpriteAffineAnim(sprite, 1); TranslateAnimSpriteToTargetMonLocation(sprite); }
void sub_80DCF60(struct Sprite *sprite) { StartSpriteAnim(sprite, gBattleAnimArgs[5]); AnimateSprite(sprite); if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) sprite->pos1.x -= gBattleAnimArgs[0]; else sprite->pos1.x += gBattleAnimArgs[0]; sprite->pos1.y += gBattleAnimArgs[1]; sprite->data[0] = gBattleAnimArgs[4]; sprite->data[1] = sprite->pos1.x; sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[2]; sprite->data[3] = sprite->pos1.y; sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[3]; InitSpriteDataForLinearTranslation(sprite); sprite->data[3] = 0; sprite->data[4] = 0; sprite->callback = sub_8078394; StoreSpriteCallbackInData(sprite, move_anim_8074EE0); }
void WallyHandlePrintStringPlayerOnly(void) { if (GetBattlerSide(gActiveBattler) == 0) WallyHandlePrintString(); else WallyBufferExecCompleted(); }
void sub_80D5DDC(u8 taskId) { struct Task *task = &gTasks[taskId]; task->data[12] = !GetBattlerSide(gAnimBankAttacker) ? 1 : -1; task->data[13] = IsAnimBankSpriteVisible(gAnimBankTarget ^ 2) + 1; task->data[14] = GetAnimBattlerSpriteId(1); task->data[15] = GetAnimBattlerSpriteId(3); task->func = sub_80D5E4C; }
void WallyHandlecmd48(void) { if (gBattleBufferA[gActiveBattler][1] != 0 && GetBattlerSide(gActiveBattler) == 0) { WallyBufferExecCompleted(); } else { ewram17810[gActiveBattler].unk0_0 = 1; gUnknown_02024E68[gActiveBattler] = sub_8044804(gActiveBattler, (struct BattleInterfaceStruct2 *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]); WallyBufferExecCompleted(); } }
// 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_80CC474(struct Sprite* sprite) { u8 bank; if (!gBattleAnimArgs[6]) bank = gAnimBankAttacker; else bank = gAnimBankTarget; if (GetBattlerSide(bank) != 0) { sprite->data[4] = 0; sprite->data[2] = gBattleAnimArgs[3]; sprite->pos1.x = 0xFFF0; } else { sprite->data[4] = 1; sprite->data[2] = -gBattleAnimArgs[3]; sprite->pos1.x = 0x100; } sprite->data[1] = gBattleAnimArgs[1]; sprite->data[0] = gBattleAnimArgs[2]; sprite->data[3] = gBattleAnimArgs[4]; switch (gBattleAnimArgs[5]) { case 0: sprite->pos1.y = gBattleAnimArgs[0]; sprite->oam.priority = sub_8079ED4(bank); break; case 1: sprite->pos1.y = gBattleAnimArgs[0]; sprite->oam.priority = sub_8079ED4(bank) + 1; break; case 2: sprite->pos1.y = GetBattlerSpriteCoord(bank, 3) + gBattleAnimArgs[0]; sprite->oam.priority = sub_8079ED4(bank); break; case 3: sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankTarget, 3) + gBattleAnimArgs[0]; GetAnimBattlerSpriteId(1); sprite->oam.priority = sub_8079ED4(bank) + 1; break; } sprite->callback = sub_80CC580; }
// Animates the sprites that fly diagonally across the screen // in Sandstorm and Heat Wave. // arg 0: initial y pixel offset // arg 1: projectile speed // arg 2: y pixel drop // arg 3: ??? unknown (possibly a color bit) void AnimDirtParticleAcrossScreen(struct Sprite *sprite) { if (sprite->data[0] == 0) { if (gBattleAnimArgs[3] != 0 && GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) { sprite->pos1.x = 304; gBattleAnimArgs[1] = -gBattleAnimArgs[1]; sprite->data[5] = 1; sprite->oam.matrixNum = 8; } else { sprite->pos1.x = -64; } sprite->pos1.y = gBattleAnimArgs[0]; SetSubspriteTables(sprite, gSubspriteTables_83DAD10); sprite->data[1] = gBattleAnimArgs[1]; sprite->data[2] = gBattleAnimArgs[2]; sprite->data[0]++; } else { sprite->data[3] += sprite->data[1]; sprite->data[4] += sprite->data[2]; sprite->pos2.x += (sprite->data[3] >> 8); sprite->pos2.y += (sprite->data[4] >> 8); sprite->data[3] &= 0xFF; sprite->data[4] &= 0xFF; if (sprite->data[5] == 0) { if (sprite->pos1.x + sprite->pos2.x > 272) { sprite->callback = DestroyAnimSprite; } } else if (sprite->pos1.x + sprite->pos2.x < -32) { sprite->callback = DestroyAnimSprite; } } }
void sub_80CD328(struct Sprite* sprite) { sub_8078650(sprite); if (GetBattlerSide(gBattleAnimAttacker) == 0) { sprite->pos1.x += gBattleAnimArgs[0]; sprite->pos1.y += gBattleAnimArgs[1]; sprite->data[3] = 1; } else { sprite->pos1.x -= gBattleAnimArgs[0]; sprite->pos1.y += gBattleAnimArgs[1]; sprite->data[3] = 0xFFFF; StartSpriteAffineAnim(sprite, 1); } sprite->callback = sub_80CD394; }
void sub_80CECE8(struct Sprite* sprite) { int a; if (GetBattlerSide(gAnimBankAttacker) == 1) { a = gBattleAnimArgs[1]; (u16)gBattleAnimArgs[1] = -a; } sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2) + gBattleAnimArgs[1]; sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3) + gBattleAnimArgs[2]; StartSpriteAnim(sprite, gBattleAnimArgs[0]); sprite->data[2] = 0; sprite->data[3] = 0; sprite->data[4] = sprite->pos1.x << 4; sprite->data[5] = sprite->pos1.y << 4; sprite->data[6] = (gBattleAnimArgs[1] << 4) / 5; sprite->data[7] = (gBattleAnimArgs[2] << 7) / 5; sprite->callback = sub_80CED78; }
void sub_80CF3C4(struct Sprite* sprite) { u8 a; sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2); sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3); a = gBankSpriteIds[gAnimBankTarget]; if (GetBattlerSide(gAnimBankAttacker) != 0) { sprite->pos1.x -= gBattleAnimArgs[0]; } else { sprite->pos1.x += gBattleAnimArgs[0]; } sprite->pos1.y += gBattleAnimArgs[1]; sprite->data[0] = gBattleAnimArgs[2]; sprite->data[1] = gBattleAnimArgs[3]; sprite->data[2] = a; sprite->callback = sub_80CF374; sprite->invisible = 1; }