diff options
author | Marcus Huderle <huderlem@gmail.com> | 2018-03-18 18:06:29 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-03-18 18:06:29 -0700 |
commit | 7fcee65ee4dce2b968eba0c6d38151f720dbcdf0 (patch) | |
tree | f60287f706417eaa80684d20b5058848e94a5275 /src | |
parent | d51855dfadf9e1357ef8e33e90b5156f8561405c (diff) | |
parent | 3c9552befdbd295b94a06fca31a4c03c667465b3 (diff) |
Merge pull request #583 from huderlem/animdocs
Document some more battle anims
Diffstat (limited to 'src')
-rw-r--r-- | src/battle/anim/bubble.c | 2 | ||||
-rw-r--r-- | src/battle/anim/bug.c | 37 | ||||
-rw-r--r-- | src/battle/anim/cutter.c | 2 | ||||
-rw-r--r-- | src/battle/anim/dark.c | 2 | ||||
-rw-r--r-- | src/battle/anim/drum.c | 2 | ||||
-rw-r--r-- | src/battle/anim/fight.c | 51 | ||||
-rw-r--r-- | src/battle/anim/fire_2.c | 67 | ||||
-rw-r--r-- | src/battle/anim/flying_hearts.c | 2 | ||||
-rw-r--r-- | src/battle/anim/flying_path.c | 14 | ||||
-rw-r--r-- | src/battle/anim/homing.c | 2 | ||||
-rw-r--r-- | src/battle/anim/money.c | 2 | ||||
-rw-r--r-- | src/battle/anim/orbit_fast.c | 17 | ||||
-rw-r--r-- | src/battle/anim/orbit_scatter.c | 14 | ||||
-rw-r--r-- | src/battle/anim/orbs.c | 2 | ||||
-rw-r--r-- | src/battle/anim/poison.c | 18 | ||||
-rw-r--r-- | src/battle/anim/psychic.c | 2 | ||||
-rw-r--r-- | src/battle/anim/rock.c | 2 | ||||
-rw-r--r-- | src/battle/anim/scan.c | 8 | ||||
-rw-r--r-- | src/battle/anim/seed.c | 27 | ||||
-rw-r--r-- | src/battle/anim/slash.c | 2 | ||||
-rw-r--r-- | src/battle/anim/slice.c | 20 | ||||
-rw-r--r-- | src/battle/anim/sonic.c | 34 | ||||
-rw-r--r-- | src/battle/anim/unused_8.c | 2 | ||||
-rw-r--r-- | src/battle/battle_anim_80A7E7C.c | 45 | ||||
-rw-r--r-- | src/battle/pokeball.c | 6 | ||||
-rw-r--r-- | src/rom_8077ABC.c | 63 |
26 files changed, 270 insertions, 175 deletions
diff --git a/src/battle/anim/bubble.c b/src/battle/anim/bubble.c index 1252c1315..d6ec06be9 100644 --- a/src/battle/anim/bubble.c +++ b/src/battle/anim/bubble.c @@ -97,6 +97,6 @@ static void sub_80D3370(struct Sprite *sprite) static void sub_80D3398(struct Sprite *sprite) { sprite->data[0] = 10; - sprite->callback = sub_80782D8; + sprite->callback = WaitAnimForDuration; StoreSpriteCallbackInData(sprite, move_anim_8074EE0); } diff --git a/src/battle/anim/bug.c b/src/battle/anim/bug.c index e12f55a8b..d57a1046e 100644 --- a/src/battle/anim/bug.c +++ b/src/battle/anim/bug.c @@ -13,7 +13,7 @@ static void sub_80DCA38(struct Sprite *sprite); static void sub_80DCAEC(struct Sprite *sprite); static void sub_80DCB5C(struct Sprite *sprite); static void sub_80DCBB4(struct Sprite *sprite); -void sub_80DCD78(struct Sprite *sprite); +static void AnimMissileArcStep(struct Sprite *sprite); // used in Move_MEGAHORN void sub_80DC824(struct Sprite *sprite) @@ -174,9 +174,15 @@ static void sub_80DCBB4(struct Sprite *sprite) DestroyAnimSprite(sprite); } -// used in 3 moves: -// Move_POISON_STING, Move_TWINEEDLE, Move_SPIKE_CANNON -void sub_80DCBCC(struct Sprite *sprite) +// Translates a stinger sprite linearly to a destination location. The sprite is +// initially rotated so that it appears to be traveling in a straight line. +// Used by Move_POISON_STING, Move_TWINEEDLE, Move_SPIKE_CANNON +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: target x pixel offset +// arg 3: target y pixel offset +// arg 4: duration +void AnimTranslateStinger(struct Sprite *sprite) { s16 lVarX, lVarY; u16 rot; @@ -216,7 +222,7 @@ void sub_80DCBCC(struct Sprite *sprite) lVarX = GetBankPosition(gAnimBankTarget, 2) + gBattleAnimArgs[2]; lVarY = GetBankPosition(gAnimBankTarget, 3) + gBattleAnimArgs[3]; - rot = sub_80790F0(lVarX - sprite->pos1.x, lVarY - sprite->pos1.y); + rot = ArcTan2Neg(lVarX - sprite->pos1.x, lVarY - sprite->pos1.y); rot += 0xC000; sub_8078FDC(sprite, FALSE, 0x100, 0x100, rot); @@ -230,7 +236,14 @@ void sub_80DCBCC(struct Sprite *sprite) // used in 2 moves: // Move_PIN_MISSILE, Move_ICICLE_SPEAR -void sub_80DCCFC(struct Sprite *sprite) +// Rotates sprite and moves it in an arc, so that it appears like a missle or arrow traveling. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: target x pixel offset +// arg 3: target y pixel offset +// arg 4: duration +// arg 5: wave amplitude +void AnimMissileArc(struct Sprite *sprite) { InitAnimSpritePos(sprite, 1); @@ -241,13 +254,13 @@ void sub_80DCCFC(struct Sprite *sprite) sprite->data[2] = GetBankPosition(gAnimBankTarget, 2) + gBattleAnimArgs[2]; sprite->data[4] = GetBankPosition(gAnimBankTarget, 3) + gBattleAnimArgs[3]; sprite->data[5] = gBattleAnimArgs[5]; - sub_80786EC(sprite); + InitAnimSpriteTranslationOverDuration(sprite); - sprite->callback = sub_80DCD78; + sprite->callback = AnimMissileArcStep; sprite->invisible = TRUE; } -void sub_80DCD78(struct Sprite *sprite) +static void AnimMissileArcStep(struct Sprite *sprite) { sprite->invisible = FALSE; @@ -273,10 +286,10 @@ void sub_80DCD78(struct Sprite *sprite) if (!TranslateAnimSpriteLinearAndSine(sprite)) { - u16 rot = sub_80790F0(sprite->pos1.x + sprite->pos2.x - x2, + u16 rotation = ArcTan2Neg(sprite->pos1.x + sprite->pos2.x - x2, sprite->pos1.y + sprite->pos2.y - y2); - rot += 0xC000; - sub_8078FDC(sprite, FALSE, 0x100, 0x100, rot); + rotation += 0xC000; + sub_8078FDC(sprite, FALSE, 0x100, 0x100, rotation); for (i = 0; i < 8; i++) data[i] = tempData[i]; diff --git a/src/battle/anim/cutter.c b/src/battle/anim/cutter.c index 0f23fed82..fed3598fc 100644 --- a/src/battle/anim/cutter.c +++ b/src/battle/anim/cutter.c @@ -43,7 +43,7 @@ void AnimTranslateLinearSingleSineWave(struct Sprite* sprite) } sprite->data[5] = gBattleAnimArgs[5]; - sub_80786EC(sprite); + InitAnimSpriteTranslationOverDuration(sprite); if (GetBankSide(gAnimBankAttacker) == GetBankSide(gAnimBankTarget)) { sprite->data[0] = 1; diff --git a/src/battle/anim/dark.c b/src/battle/anim/dark.c index aaf8507c6..055cf5802 100644 --- a/src/battle/anim/dark.c +++ b/src/battle/anim/dark.c @@ -238,7 +238,7 @@ void sub_80DFFD0(struct Sprite *sprite) sprite->data[4] = sprite->pos1.y + 12; sprite->data[5] = -12; - sub_80786EC(sprite); + InitAnimSpriteTranslationOverDuration(sprite); sprite->callback = sub_80E00D0; } diff --git a/src/battle/anim/drum.c b/src/battle/anim/drum.c index 6306778ae..7937d040a 100644 --- a/src/battle/anim/drum.c +++ b/src/battle/anim/drum.c @@ -27,6 +27,6 @@ void sub_80CEDF0(struct Sprite* sprite) sprite->pos1.x = GetBankPosition(gAnimBankAttacker, 2) + a; sprite->pos1.y = GetBankPosition(gAnimBankAttacker, 3) + 8; sprite->data[0] = 8; - sprite->callback = sub_80782D8; + sprite->callback = WaitAnimForDuration; StoreSpriteCallbackInData(sprite, DestroyAnimSprite); } diff --git a/src/battle/anim/fight.c b/src/battle/anim/fight.c index a7c25de49..0f46187f2 100644 --- a/src/battle/anim/fight.c +++ b/src/battle/anim/fight.c @@ -29,9 +29,9 @@ extern struct SpriteTemplate gBasicHitSplatSpriteTemplate; static void sub_80D927C(struct Sprite *sprite); static void sub_80D9328(struct Sprite *sprite); static void sub_80D9404(struct Sprite *sprite); -static void sub_80D9474(struct Sprite *sprite); -static void sub_80D94CC(struct Sprite *sprite); -static void sub_80D9524(struct Sprite *sprite); +static void AnimSpinningKickOrPunchFinish(struct Sprite *sprite); +static void AnimStompFootStep(struct Sprite *sprite); +static void AnimStompFootEnd(struct Sprite *sprite); static void sub_80D9640(struct Sprite *sprite); static void sub_80D97A0(struct Sprite *sprite); static void sub_80D986C(struct Sprite *sprite); @@ -44,7 +44,7 @@ void sub_080B08A0(struct Sprite *sprite) sub_807867C(sprite, gBattleAnimArgs[0]); sprite->pos1.y += gBattleAnimArgs[1]; sprite->data[0] = 15; - sprite->callback = sub_80782D8; + sprite->callback = WaitAnimForDuration; StoreSpriteCallbackInData(sprite, DestroyAnimSprite); } @@ -72,7 +72,14 @@ void sub_80D9078(struct Sprite *sprite) sub_80D902C(sprite); } -void sub_80D90A4(struct Sprite *sprite) +// Displays a basic fist or foot sprite for a given duration. +// Used by many fighting moves (and elemental "punch" moves). +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: duration +// arg 3: ? (todo: related to initial pixel offsets) +// arg 4: anim num +void AnimBasicFistOrFoot(struct Sprite *sprite) { StartSpriteAnim(sprite, gBattleAnimArgs[4]); @@ -82,7 +89,7 @@ void sub_80D90A4(struct Sprite *sprite) sub_8078764(sprite, 1); sprite->data[0] = gBattleAnimArgs[2]; - sprite->callback = sub_80782D8; + sprite->callback = WaitAnimForDuration; StoreSpriteCallbackInData(sprite, DestroyAnimSprite); } @@ -225,35 +232,45 @@ static void sub_80D9404(struct Sprite *sprite) } } -void sub_80D943C(struct Sprite *sprite) +// Animates the spinning, shrinking kick or punch, which then +// reappears at full size. Used by moves such as MOVE_MEGA_PUNCH and MOVE_MEGA_KICK. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: anim num +// arg 3: spin duration +void AnimSpinningKickOrPunch(struct Sprite *sprite) { sub_8078764(sprite, 1); StartSpriteAnim(sprite, gBattleAnimArgs[2]); sprite->data[0] = gBattleAnimArgs[3]; - sprite->callback = sub_80782D8; - StoreSpriteCallbackInData(sprite, sub_80D9474); + sprite->callback = WaitAnimForDuration; + StoreSpriteCallbackInData(sprite, AnimSpinningKickOrPunchFinish); } -static void sub_80D9474(struct Sprite *sprite) +static void AnimSpinningKickOrPunchFinish(struct Sprite *sprite) { StartSpriteAffineAnim(sprite, 0); sprite->affineAnimPaused = 1; sprite->data[0] = 20; - sprite->callback = sub_80782D8; + sprite->callback = WaitAnimForDuration; StoreSpriteCallbackInData(sprite, DestroyAnimSprite); } -void sub_80D94A8(struct Sprite *sprite) +// Animates MOVE_STOMP's foot that slides downward. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: initial wait duration +void AnimStompFoot(struct Sprite *sprite) { sub_8078764(sprite, 1); sprite->data[0] = gBattleAnimArgs[2]; - sprite->callback = sub_80D94CC; + sprite->callback = AnimStompFootStep; } -static void sub_80D94CC(struct Sprite *sprite) +static void AnimStompFootStep(struct Sprite *sprite) { if (--sprite->data[0] == -1) { @@ -262,15 +279,15 @@ static void sub_80D94CC(struct Sprite *sprite) sprite->data[4] = GetBankPosition(gAnimBankTarget, 3); sprite->callback = StartTranslateAnimSpriteByDeltas; - StoreSpriteCallbackInData(sprite, sub_80D9524); + StoreSpriteCallbackInData(sprite, AnimStompFootEnd); } } -static void sub_80D9524(struct Sprite *sprite) +static void AnimStompFootEnd(struct Sprite *sprite) { sprite->data[0] = 15; - sprite->callback = sub_80782D8; + sprite->callback = WaitAnimForDuration; StoreSpriteCallbackInData(sprite, DestroyAnimSprite); } diff --git a/src/battle/anim/fire_2.c b/src/battle/anim/fire_2.c index fe63fcff1..f9c9b6d3b 100644 --- a/src/battle/anim/fire_2.c +++ b/src/battle/anim/fire_2.c @@ -1,4 +1,5 @@ #include "global.h" +#include "battle.h" #include "battle_anim.h" #include "heated_rock.h" #include "rom_8077ABC.h" @@ -11,24 +12,34 @@ extern u8 gAnimBankTarget; extern struct SpriteTemplate gSpriteTemplate_83D96C4; extern s16 gHeatedRockCoords[7][2]; -void sub_80D5254(struct Sprite *); -void sub_80D5348(struct Sprite *); -void sub_80D52AC(struct Sprite *); -void sub_80D5324(struct Sprite *); +static void AnimFireRingStep1(struct Sprite *); +static void UpdateFireRingCircleOffset(struct Sprite *); +static void AnimFireRingStep2(struct Sprite *); +static void AnimFireRingStep3(struct Sprite *); void sub_80D53F4(struct Sprite *); void sub_80D541C(struct Sprite *); void sub_80D54E0(u8 taskId); void sub_80D57C4(u8 spriteId, u8 taskId, u8 a3); -void sub_80D51A8(struct Sprite *sprite) + +// Animates the secondary effect of MOVE_EMBER, where the flames grow and slide +// horizontally a bit. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: target x pixel offset +// arg 3: target y pixel offset +// arg 4: duration +// arg 5: ? (todo: something related to which mon the pixel offsets are based on) +// arg 6: ? (todo: something related to which mon the pixel offsets are based on) +void AnimEmberFlare(struct Sprite *sprite) { if (GetBankSide(gAnimBankAttacker) == GetBankSide(gAnimBankTarget) - && (gAnimBankAttacker == GetBankByIdentity(2) - || gAnimBankAttacker == GetBankByIdentity(3))) + && (gAnimBankAttacker == GetBankByIdentity(IDENTITY_PLAYER_MON2) + || gAnimBankAttacker == GetBankByIdentity(IDENTITY_OPPONENT_MON2))) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; sprite->callback = sub_8079534; - sub_8079534(sprite); + sprite->callback(sprite); } struct Sprite *sub_80D5210(struct Sprite *sprite) @@ -40,19 +51,26 @@ struct Sprite *sub_80D5210(struct Sprite *sprite) return sprite; } -void sub_80D522C(struct Sprite *sprite) +// Animates the a fire sprite in the first-half of the MOVE_FIRE_BLAST +// animation. The fire sprite first moves in a circle around the mon, +// and then it is translated towards the target mon, while still rotating. +// Lastly, it moves in a circle around the target mon. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: initial wave offset +void AnimFireRing(struct Sprite *sprite) { InitAnimSpritePos(sprite, 1); sprite->data[7] = gBattleAnimArgs[2]; sprite->data[0] = 0; - sprite->callback = sub_80D5254; + sprite->callback = AnimFireRingStep1; } -void sub_80D5254(struct Sprite *sprite) +static void AnimFireRingStep1(struct Sprite *sprite) { - sub_80D5348(sprite); + UpdateFireRingCircleOffset(sprite); if (++sprite->data[0] == 0x12) { @@ -64,11 +82,11 @@ void sub_80D5254(struct Sprite *sprite) InitAnimSpriteTranslationDeltas(sprite); - sprite->callback = sub_80D52AC; + sprite->callback = AnimFireRingStep2; } } -void sub_80D52AC(struct Sprite *sprite) +static void AnimFireRingStep2(struct Sprite *sprite) { if (TranslateAnimSpriteByDeltas(sprite)) { @@ -79,8 +97,8 @@ void sub_80D52AC(struct Sprite *sprite) sprite->pos2.y = 0; sprite->pos2.x = 0; - sprite->callback = sub_80D5324; - sub_80D5324(sprite); + sprite->callback = AnimFireRingStep3; + sprite->callback(sprite); } else { @@ -91,15 +109,15 @@ void sub_80D52AC(struct Sprite *sprite) } } -void sub_80D5324(struct Sprite *sprite) +static void AnimFireRingStep3(struct Sprite *sprite) { - sub_80D5348(sprite); + UpdateFireRingCircleOffset(sprite); if (++sprite->data[0] == 0x1F) DestroyAnimSprite(sprite); } -void sub_80D5348(struct Sprite *sprite) +static void UpdateFireRingCircleOffset(struct Sprite *sprite) { sprite->pos2.x = Sin(sprite->data[7], 28); sprite->pos2.y = Cos(sprite->data[7], 28); @@ -107,7 +125,12 @@ void sub_80D5348(struct Sprite *sprite) sprite->data[7] = (sprite->data[7] + 20) & 0xFF; } -void sub_80D5374(struct Sprite *sprite) +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: duration +// arg 3: x delta +// arg 4: y delta +void AnimFireCross(struct Sprite *sprite) { sprite->pos1.x += gBattleAnimArgs[0]; sprite->pos1.y += gBattleAnimArgs[1]; @@ -118,7 +141,7 @@ void sub_80D5374(struct Sprite *sprite) StoreSpriteCallbackInData(sprite, DestroyAnimSprite); - sprite->callback = sub_8078364; + sprite->callback = TranslateSpriteOverDuration; } void sub_80D53B4(struct Sprite *sprite) @@ -129,7 +152,7 @@ void sub_80D53B4(struct Sprite *sprite) sprite->data[0] = gBattleAnimArgs[3]; sprite->invisible = TRUE; - sprite->callback = sub_80782D8; + sprite->callback = WaitAnimForDuration; StoreSpriteCallbackInData(sprite, sub_80D53F4); } diff --git a/src/battle/anim/flying_hearts.c b/src/battle/anim/flying_hearts.c index d2d22602a..f20416535 100644 --- a/src/battle/anim/flying_hearts.c +++ b/src/battle/anim/flying_hearts.c @@ -19,7 +19,7 @@ void sub_80D2064(struct Sprite* sprite) sprite->pos1.y = 0xA0; sprite->data[0] = gBattleAnimArgs[2]; sprite->data[1] = gBattleAnimArgs[1]; - sprite->callback = sub_80782D8; + sprite->callback = WaitAnimForDuration; StoreSpriteCallbackInData(sprite, sub_80D2094); } diff --git a/src/battle/anim/flying_path.c b/src/battle/anim/flying_path.c index 559f617c6..70c418afc 100644 --- a/src/battle/anim/flying_path.c +++ b/src/battle/anim/flying_path.c @@ -40,7 +40,7 @@ void sub_80CBDF4(u8 taskId) 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]]); - sub_80786EC(&gSprites[task->data[2]]); + InitAnimSpriteTranslationOverDuration(&gSprites[task->data[2]]); task->func = sub_80CBF5C; } @@ -98,7 +98,7 @@ void sub_80CBF5C(u8 taskId) task->data[3] = a; sprite->subpriority = task->data[4]; StartSpriteAnim(sprite, task->data[3]); - sub_80786EC(sprite); + InitAnimSpriteTranslationOverDuration(sprite); task->data[0]++; break; case 2: @@ -123,7 +123,7 @@ void sub_80CBF5C(u8 taskId) task->data[3] = 2; sprite->subpriority = task->data[4]; StartSpriteAnim(sprite, task->data[3]); - sub_80786EC(sprite); + InitAnimSpriteTranslationOverDuration(sprite); task->data[0]++; break; case 5: @@ -141,7 +141,7 @@ void sub_80CBF5C(u8 taskId) task->data[3] = 3; sprite->subpriority = task->data[4]; StartSpriteAnim(sprite, task->data[3]); - sub_80786EC(sprite); + InitAnimSpriteTranslationOverDuration(sprite); task->data[0]++; break; case 6: @@ -167,7 +167,7 @@ void sub_80CBF5C(u8 taskId) task->data[3] = 4; sprite->subpriority = task->data[4]; StartSpriteAnim(sprite, task->data[3]); - sub_80786EC(sprite); + InitAnimSpriteTranslationOverDuration(sprite); task->data[0]++; break; case 9: @@ -184,7 +184,7 @@ void sub_80CBF5C(u8 taskId) task->data[3] = 5; sprite->subpriority = task->data[4]; StartSpriteAnim(sprite, task->data[3]); - sub_80786EC(sprite); + InitAnimSpriteTranslationOverDuration(sprite); task->data[0]++; break; case 10: @@ -215,7 +215,7 @@ void sub_80CBF5C(u8 taskId) task->data[3] = 6; sprite->subpriority = task->data[4]; StartSpriteAnim(sprite, task->data[3]); - sub_80786EC(sprite); + InitAnimSpriteTranslationOverDuration(sprite); task->data[0]++; break; } diff --git a/src/battle/anim/homing.c b/src/battle/anim/homing.c index 6fb4a76d8..208d3b831 100644 --- a/src/battle/anim/homing.c +++ b/src/battle/anim/homing.c @@ -60,7 +60,7 @@ void sub_80CC6CC(struct Sprite* sprite) sprite->data[2] = y * 16; sprite->data[3] = (sprite->data[5] - sprite->pos1.x) * 16 / gBattleAnimArgs[4]; sprite->data[4] = (sprite->data[6] - sprite->pos1.y) * 16 / gBattleAnimArgs[4]; - c = sub_80790F0(sprite->data[5] - x, sprite->data[6] - y); + c = ArcTan2Neg(sprite->data[5] - x, sprite->data[6] - y); if (IsContest()) c -= 0x8000; diff --git a/src/battle/anim/money.c b/src/battle/anim/money.c index 0ee381e13..c3d130750 100644 --- a/src/battle/anim/money.c +++ b/src/battle/anim/money.c @@ -26,7 +26,7 @@ void sub_80CFE9C(struct Sprite* sprite) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; r6 += gBattleAnimArgs[2]; - var = sub_80790F0(r6 - sprite->pos1.x, r7 - sprite->pos1.y); + var = ArcTan2Neg(r6 - sprite->pos1.x, r7 - sprite->pos1.y); var += 0xC000; sub_8078FDC(sprite, 0, 0x100, 0x100, var); sprite->data[0] = gBattleAnimArgs[4]; diff --git a/src/battle/anim/orbit_fast.c b/src/battle/anim/orbit_fast.c index 92b67672b..71303b03c 100644 --- a/src/battle/anim/orbit_fast.c +++ b/src/battle/anim/orbit_fast.c @@ -8,12 +8,13 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; -static void sub_80D2704(struct Sprite* sprite); +static void AnimOrbitFastStep(struct Sprite* sprite); -// orbit_fast (a quickly moving fast circular motion of a sprite around an object.) -// Used by Hidden Power. - -void sub_80D26A4(struct Sprite* sprite) +// Orbits a sphere in an ellipse around the mon. +// Used by MOVE_HIDDEN_POWER +// arg 0: duration +// arg 1: initial wave offset +void AnimOrbitFast(struct Sprite* sprite) { sprite->pos1.x = GetBankPosition(gAnimBankAttacker, 2); sprite->pos1.y = GetBankPosition(gAnimBankAttacker, 3); @@ -21,11 +22,11 @@ void sub_80D26A4(struct Sprite* sprite) sprite->data[0] = gBattleAnimArgs[0]; sprite->data[1] = gBattleAnimArgs[1]; sprite->data[7] = sub_8079E90(gAnimBankAttacker); - sprite->callback = sub_80D2704; - sub_80D2704(sprite); + sprite->callback = AnimOrbitFastStep; + sprite->callback(sprite); } -void sub_80D2704(struct Sprite* sprite) +static void AnimOrbitFastStep(struct Sprite* sprite) { if ((u16)(sprite->data[1] - 0x40) <= 0x7F) sprite->subpriority = sprite->data[7] + 1; diff --git a/src/battle/anim/orbit_scatter.c b/src/battle/anim/orbit_scatter.c index 54c157839..cda09a729 100644 --- a/src/battle/anim/orbit_scatter.c +++ b/src/battle/anim/orbit_scatter.c @@ -8,21 +8,21 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; -static void sub_80D2834(struct Sprite* sprite); +static void AnimOrbitScatterStep(struct Sprite* sprite); -// orbit_scatter (scatters the objects associated with the fast orbit from the last file.) -// Used in Hidden Power. - -void sub_80D27E0(struct Sprite* sprite) +// Moves orbs away from the mon, based on where they are in their orbit. +// Used in MOVE_HIDDEN_POWER. +// arg 0: initial wave offset +void AnimOrbitScatter(struct Sprite* sprite) { sprite->pos1.x = GetBankPosition(gAnimBankAttacker, 2); sprite->pos1.y = GetBankPosition(gAnimBankAttacker, 3); sprite->data[0] = Sin(gBattleAnimArgs[0], 10); sprite->data[1] = Cos(gBattleAnimArgs[0], 7); - sprite->callback = sub_80D2834; + sprite->callback = AnimOrbitScatterStep; } -void sub_80D2834(struct Sprite* sprite) +static void AnimOrbitScatterStep(struct Sprite* sprite) { sprite->pos2.x += sprite->data[0]; sprite->pos2.y += sprite->data[1]; diff --git a/src/battle/anim/orbs.c b/src/battle/anim/orbs.c index b965cacb8..6f1bba9c3 100644 --- a/src/battle/anim/orbs.c +++ b/src/battle/anim/orbs.c @@ -99,7 +99,7 @@ void sub_80CA9A8(struct Sprite* sprite) sprite->data[2] = GetBankPosition(gAnimBankAttacker, 2); sprite->data[4] = GetBankPosition(gAnimBankAttacker, 3); sprite->data[5] = gBattleAnimArgs[2]; - sub_80786EC(sprite); + InitAnimSpriteTranslationOverDuration(sprite); sprite->callback = sub_80CA9F8; } diff --git a/src/battle/anim/poison.c b/src/battle/anim/poison.c index 272d99e84..3a7477a57 100644 --- a/src/battle/anim/poison.c +++ b/src/battle/anim/poison.c @@ -10,7 +10,7 @@ extern u8 gAnimBankTarget; void sub_80D9DD4(struct Sprite *sprite); void sub_80D9E78(struct Sprite *sprite); void sub_80D9EE8(struct Sprite *sprite); -void sub_80D9FF0(struct Sprite *sprite); +static void AnimBubbleEffectStep(struct Sprite *sprite); void sub_80D9D70(struct Sprite *sprite) { @@ -24,7 +24,7 @@ void sub_80D9D70(struct Sprite *sprite) sprite->data[4] = GetBankPosition(gAnimBankTarget, 3); sprite->data[5] = -30; - sub_80786EC(sprite); + InitAnimSpriteTranslationOverDuration(sprite); sprite->callback = sub_80D9DD4; } @@ -52,7 +52,7 @@ void sub_80D9DF0(struct Sprite *sprite) sprite->data[4] = l2 + gBattleAnimArgs[5]; sprite->data[5] = -30; - sub_80786EC(sprite); + InitAnimSpriteTranslationOverDuration(sprite); sprite->callback = sub_80D9E78; } @@ -108,7 +108,13 @@ void sub_80D9F14(struct Sprite *sprite) StoreSpriteCallbackInData(sprite, DestroyAnimSprite); } -void sub_80D9F88(struct Sprite *sprite) +// Animates a bubble by rising upward, swaying side to side, and +// enlarging the sprite. This is used as an after-effect by poison-type +// moves, along with MOVE_BUBBLE, and MOVE_BUBBLEBEAM. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: 0 = single-target, 1 = multi-target +void AnimBubbleEffect(struct Sprite *sprite) { if (!gBattleAnimArgs[2]) { @@ -125,10 +131,10 @@ void sub_80D9F88(struct Sprite *sprite) sprite->pos1.y += gBattleAnimArgs[1]; } - sprite->callback = sub_80D9FF0; + sprite->callback = AnimBubbleEffectStep; } -void sub_80D9FF0(struct Sprite *sprite) +static void AnimBubbleEffectStep(struct Sprite *sprite) { sprite->data[0] = (sprite->data[0] + 0xB) & 0xFF; sprite->pos2.x = Sin(sprite->data[0], 4); diff --git a/src/battle/anim/psychic.c b/src/battle/anim/psychic.c index b108c496a..42f396870 100644 --- a/src/battle/anim/psychic.c +++ b/src/battle/anim/psychic.c @@ -522,7 +522,7 @@ static void sub_80DC1FC(u8 taskId) gSprites[spriteId].data[4] = task->data[14]; gSprites[spriteId].data[5] = task->data[10]; - sub_80786EC(&gSprites[spriteId]); + InitAnimSpriteTranslationOverDuration(&gSprites[spriteId]); StartSpriteAffineAnim(&gSprites[spriteId], task->data[2] & 3); } diff --git a/src/battle/anim/rock.c b/src/battle/anim/rock.c index 1d1772b1b..6fbe065b8 100644 --- a/src/battle/anim/rock.c +++ b/src/battle/anim/rock.c @@ -446,7 +446,7 @@ static void sub_80DD774(struct Task *task) gSprites[spriteId].data[5] = -16 - (task->data[1] * 2); gSprites[spriteId].oam.tileNum += var0; - sub_80786EC(&gSprites[spriteId]); + InitAnimSpriteTranslationOverDuration(&gSprites[spriteId]); task->data[11]++; } diff --git a/src/battle/anim/scan.c b/src/battle/anim/scan.c index e6b85dd5f..403894cc8 100644 --- a/src/battle/anim/scan.c +++ b/src/battle/anim/scan.c @@ -26,7 +26,7 @@ void sub_80CD3E0(struct Sprite* sprite) sprite->pos1.x -= 32; sprite->pos1.y -= 32; sprite->data[0] = 20; - sprite->callback = sub_80782D8; + sprite->callback = WaitAnimForDuration; StoreSpriteCallbackInData(sprite, sub_80CD408); } @@ -36,7 +36,7 @@ void sub_80CD408(struct Sprite* sprite) { case 0: sprite->data[0] = 1; - sprite->callback = sub_80782D8; + sprite->callback = WaitAnimForDuration; StoreSpriteCallbackInData(sprite, sub_80CD408); break; case 1: @@ -62,7 +62,7 @@ void sub_80CD4B8(struct Sprite* sprite) if ((sprite->data[5] >> 8) == 4) { sprite->data[0] = 10; - sprite->callback = sub_80782D8; + sprite->callback = WaitAnimForDuration; StoreSpriteCallbackInData(sprite, sub_80CD4EC); } else @@ -80,7 +80,7 @@ void sub_80CD4EC(struct Sprite* sprite) sprite->data[0] = 3; sprite->data[1] = 0; sprite->data[2] = 0; - sprite->callback = sub_80782D8; + sprite->callback = WaitAnimForDuration; StoreSpriteCallbackInData(sprite, sub_80CD5A8); } else diff --git a/src/battle/anim/seed.c b/src/battle/anim/seed.c index e3d4bd3fb..7f8154504 100644 --- a/src/battle/anim/seed.c +++ b/src/battle/anim/seed.c @@ -7,13 +7,18 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; -static void sub_80CAB88(struct Sprite* sprite); -static void sub_80CABC0(struct Sprite* sprite); +static void AnimLeechSeedStep(struct Sprite* sprite); +static void AnimLeechSeedSprouts(struct Sprite* sprite); // seed (sprouts a sapling from a seed.) // Used by Leech Seed. - -void sub_80CAB18(struct Sprite* sprite) +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: target x pixel offset +// arg 3: target y pixel offset +// arg 4: duration +// arg 5: wave amplitude +void AnimLeechSeed(struct Sprite* sprite) { InitAnimSpritePos(sprite, 1); if (GetBankSide(gAnimBankAttacker)) @@ -25,26 +30,26 @@ void sub_80CAB18(struct Sprite* sprite) sprite->data[2] = GetBankPosition(gAnimBankTarget, 0) + gBattleAnimArgs[2]; sprite->data[4] = GetBankPosition(gAnimBankTarget, 1) + gBattleAnimArgs[3]; sprite->data[5] = gBattleAnimArgs[5]; - sub_80786EC(sprite); - sprite->callback = sub_80CAB88; + InitAnimSpriteTranslationOverDuration(sprite); + sprite->callback = AnimLeechSeedStep; } -void sub_80CAB88(struct Sprite* sprite) +static void AnimLeechSeedStep(struct Sprite* sprite) { if (TranslateAnimSpriteLinearAndSine(sprite)) { sprite->invisible = 1; sprite->data[0] = 10; - sprite->callback = sub_80782D8; - StoreSpriteCallbackInData(sprite, sub_80CABC0); + sprite->callback = WaitAnimForDuration; + StoreSpriteCallbackInData(sprite, AnimLeechSeedSprouts); } } -void sub_80CABC0(struct Sprite* sprite) +static void AnimLeechSeedSprouts(struct Sprite* sprite) { sprite->invisible = 0; StartSpriteAnim(sprite, 1); sprite->data[0] = 60; - sprite->callback = sub_80782D8; + sprite->callback = WaitAnimForDuration; StoreSpriteCallbackInData(sprite, DestroyAnimSprite); } diff --git a/src/battle/anim/slash.c b/src/battle/anim/slash.c index 6adcaf098..306968111 100644 --- a/src/battle/anim/slash.c +++ b/src/battle/anim/slash.c @@ -60,7 +60,7 @@ void sub_80CDE78(struct Sprite* sprite) sprite->data[1] = 8; sprite->data[2] = 0; StoreSpriteCallbackInData(sprite, sub_80CDEB0); - sprite->callback = sub_8078364; + sprite->callback = TranslateSpriteOverDuration; } } diff --git a/src/battle/anim/slice.c b/src/battle/anim/slice.c index fe8745483..80c58dddf 100644 --- a/src/battle/anim/slice.c +++ b/src/battle/anim/slice.c @@ -8,19 +8,21 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; -static void sub_80CCB00(struct Sprite* sprite); +static void AnimSliceStep(struct Sprite* sprite); -// slice (the cutting animation showing as a yellow line drawn diagonally) -// Used in Cut, Fury Cutter, Aerial Ace, and Air Cutter. - -void sub_80CC914(struct Sprite* sprite) +// Moves the sprite in a diagonally slashing motion across the target mon. +// Used by moves such as MOVE_CUT and MOVE_AERIAL_ACE. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: slice direction; 0 = right-to-left, 1 = left-to-right +void AnimCuttingSlice(struct Sprite* sprite) { sprite->pos1.x = GetBankPosition(gAnimBankTarget, 0); sprite->pos1.y = GetBankPosition(gAnimBankTarget, 1); if (GetBankSide(gAnimBankTarget) == 0) sprite->pos1.y += 8; - sprite->callback = sub_80CCB00; + sprite->callback = AnimSliceStep; if (gBattleAnimArgs[2] == 0) { sprite->pos1.x += gBattleAnimArgs[0]; @@ -70,7 +72,7 @@ void sub_80CC9BC(struct Sprite* sprite) if (GetBankSide(gAnimBankTarget) == 0) sprite->pos1.y += 8; - sprite->callback = sub_80CCB00; + sprite->callback = AnimSliceStep; if (gBattleAnimArgs[2] == 0) { sprite->pos1.x += gBattleAnimArgs[0]; @@ -89,7 +91,7 @@ void sub_80CC9BC(struct Sprite* sprite) sprite->data[1] = -sprite->data[1]; } -void sub_80CCB00(struct Sprite* sprite) +static void AnimSliceStep(struct Sprite* sprite) { sprite->data[3] += sprite->data[1]; sprite->data[4] += sprite->data[2]; @@ -106,6 +108,6 @@ void sub_80CCB00(struct Sprite* sprite) { StoreSpriteCallbackInData(sprite, DestroyAnimSprite); sprite->data[0] = 3; - sprite->callback = sub_80782D8; + sprite->callback = WaitAnimForDuration; } } diff --git a/src/battle/anim/sonic.c b/src/battle/anim/sonic.c index 2808c86c2..1501f51f1 100644 --- a/src/battle/anim/sonic.c +++ b/src/battle/anim/sonic.c @@ -9,14 +9,18 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; -// sonic (shoots a projectile towards the target.) -// Used in Sonic Boom and Air Cutter. - -void sub_80CF6DC(struct Sprite* sprite) +// Moves a projectile towards the target mon. The sprite is rotated to be pointing +// in the same direction it's moving. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: target x pixel offset +// arg 3: target y pixel offset +// arg 4: duration +void AnimSonicBoomProjectile(struct Sprite* sprite) { - s16 a; - s16 b; - u16 c; + s16 targetXPos; + s16 targetYPos; + u16 rotation; if (IsContest()) { @@ -30,17 +34,17 @@ void sub_80CF6DC(struct Sprite* sprite) } InitAnimSpritePos(sprite, 1); - a = GetBankPosition(gAnimBankTarget, 2) + gBattleAnimArgs[2]; - b = GetBankPosition(gAnimBankTarget, 3) + gBattleAnimArgs[3]; - c = sub_80790F0(a - sprite->pos1.x, b - sprite->pos1.y); - c += 0xF000; + targetXPos = GetBankPosition(gAnimBankTarget, 2) + gBattleAnimArgs[2]; + targetYPos = GetBankPosition(gAnimBankTarget, 3) + gBattleAnimArgs[3]; + rotation = ArcTan2Neg(targetXPos - sprite->pos1.x, targetYPos - sprite->pos1.y); + rotation += 0xF000; if (IsContest()) - c -= 0x6000; + rotation -= 0x6000; - sub_8078FDC(sprite, 0, 0x100, 0x100, c); + sub_8078FDC(sprite, 0, 0x100, 0x100, rotation); sprite->data[0] = gBattleAnimArgs[4]; - sprite->data[2] = a; - sprite->data[4] = b; + sprite->data[2] = targetXPos; + sprite->data[4] = targetYPos; sprite->callback = StartTranslateAnimSpriteByDeltas; StoreSpriteCallbackInData(sprite, DestroyAnimSprite); } diff --git a/src/battle/anim/unused_8.c b/src/battle/anim/unused_8.c index b5e150dd8..c67ec2754 100644 --- a/src/battle/anim/unused_8.c +++ b/src/battle/anim/unused_8.c @@ -19,7 +19,7 @@ void sub_80CF458(struct Sprite* sprite) sprite->data[0] = gBattleAnimArgs[2]; sprite->data[1] = gBattleAnimArgs[3]; sprite->data[5] = gBattleAnimArgs[4]; - sprite->callback = sub_80782D8; + sprite->callback = WaitAnimForDuration; StoreSpriteCallbackInData(sprite, sub_80CF490); } diff --git a/src/battle/battle_anim_80A7E7C.c b/src/battle/battle_anim_80A7E7C.c index f339a1206..a8b0ec329 100644 --- a/src/battle/battle_anim_80A7E7C.c +++ b/src/battle/battle_anim_80A7E7C.c @@ -30,10 +30,10 @@ static void SlideMonToOriginalPosStep(struct Sprite *sprite); static void SlideMonToOffset(struct Sprite *sprite); static void sub_80A8818(struct Sprite *sprite); static void sub_80A88F0(struct Sprite *sprite); -static void sub_80A89B4(u8 taskId); -static void sub_80A8A18(u8 taskId); +static void AnimTask_WindUpLungePart1(u8 taskId); +static void AnimTask_WindUpLungePart2(u8 taskId); static void AnimTask_SwayMonStep(u8 taskId); -static void sub_80A8D8C(u8 taskId); +static void AnimTask_ScaleMonAndRestoreStep(u8 taskId); static void sub_80A8FD8(u8 taskId); static void sub_80A913C(u8 taskId); @@ -646,11 +646,20 @@ static void sub_80A88F0(struct Sprite *sprite) DestroyAnimSprite(sprite); } -void sub_80A8920(u8 taskId) +// Task to facilitate a two-part translation animation, in which the sprite +// is first translated in an arc to one position. Then, it "lunges" to a target +// x offset. Used in TAKE_DOWN, for example. +// arg 0: anim bank +// arg 1: horizontal speed (subpixel) +// arg 2: wave amplitude +// arg 3: first duration +// arg 4: delay before starting lunge +// arg 5: target x offset for lunge +// arg 6: lunge duration +void AnimTask_WindUpLunge(u8 taskId) { - s16 r7; - r7 = 0x8000 / gBattleAnimArgs[3]; - if (GetBankSide(gAnimBankAttacker)) + s16 wavePeriod = 0x8000 / gBattleAnimArgs[3]; + if (GetBankSide(gAnimBankAttacker) != SIDE_PLAYER) { gBattleAnimArgs[1] = -gBattleAnimArgs[1]; gBattleAnimArgs[5] = -gBattleAnimArgs[5]; @@ -662,11 +671,11 @@ void sub_80A8920(u8 taskId) TASK.data[4] = gBattleAnimArgs[4]; TASK.data[5] = (gBattleAnimArgs[5] << 8) / gBattleAnimArgs[6]; TASK.data[6] = gBattleAnimArgs[6]; - TASK.data[7] = r7; - TASK.func = sub_80A89B4; + TASK.data[7] = wavePeriod; + TASK.func = AnimTask_WindUpLungePart1; } -static void sub_80A89B4(u8 taskId) +static void AnimTask_WindUpLungePart1(u8 taskId) { u8 spriteId; spriteId = TASK.data[0]; @@ -676,11 +685,11 @@ static void sub_80A89B4(u8 taskId) TASK.data[10] += TASK.data[7]; if (--TASK.data[3] == 0) { - TASK.func = sub_80A8A18; + TASK.func = AnimTask_WindUpLungePart2; } } -static void sub_80A8A18(u8 taskId) +static void AnimTask_WindUpLungePart2(u8 taskId) { u8 spriteId; if (TASK.data[4] > 0) @@ -828,7 +837,13 @@ static void AnimTask_SwayMonStep(u8 taskId) } } -void sub_80A8D34(u8 taskId) +// Scales a mon's sprite, and then scales back to its original dimensions. +// arg 0: x scale delta +// arg 1: y scale delta +// arg 2: duration +// arg 3: anim bank +// arg 4: sprite object mode +void AnimTask_ScaleMonAndRestore(u8 taskId) { u8 spriteId; spriteId = GetAnimBankSpriteId(gBattleAnimArgs[3]); @@ -840,10 +855,10 @@ void sub_80A8D34(u8 taskId) TASK.data[4] = spriteId; TASK.data[10] = 0x100; TASK.data[11] = 0x100; - TASK.func = sub_80A8D8C; + TASK.func = AnimTask_ScaleMonAndRestoreStep; } -static void sub_80A8D8C(u8 taskId) +static void AnimTask_ScaleMonAndRestoreStep(u8 taskId) { u8 spriteId; TASK.data[10] += TASK.data[0]; diff --git a/src/battle/pokeball.c b/src/battle/pokeball.c index 3a47e0204..20c6d8676 100644 --- a/src/battle/pokeball.c +++ b/src/battle/pokeball.c @@ -297,7 +297,7 @@ const struct SpriteTemplate gBallSpriteTemplates[] = }; extern u32 ball_number_to_ball_processing_index(u16); // not sure of return type -extern void sub_80786EC(); +extern void InitAnimSpriteTranslationOverDuration(); extern bool8 TranslateAnimSpriteLinearAndSine(struct Sprite *); extern u8 sub_814086C(u8, u8, int, int, u8); extern u8 sub_8141314(u8, u8, int, u8); @@ -397,7 +397,7 @@ static void sub_8046464(u8 taskId) gSprites[spriteId].data[2] = GetBankPosition(gBankTarget, 0); gSprites[spriteId].data[4] = GetBankPosition(gBankTarget, 1) - 16; gSprites[spriteId].data[5] = -40; - sub_80786EC(&gSprites[spriteId]); + InitAnimSpriteTranslationOverDuration(&gSprites[spriteId]); gSprites[spriteId].oam.affineParam = taskId; gTasks[taskId].data[4] = gBankTarget; gTasks[taskId].func = TaskDummy; @@ -834,7 +834,7 @@ static void sub_8047074(struct Sprite *sprite) sprite->data[4] = GetBankPosition(sprite->data[6], 3) + 24; sprite->data[5] = -30; sprite->oam.affineParam = sprite->data[6]; - sub_80786EC(sprite); + InitAnimSpriteTranslationOverDuration(sprite); sprite->callback = sub_80470C4; } diff --git a/src/rom_8077ABC.c b/src/rom_8077ABC.c index 395736d03..9d864fec3 100644 --- a/src/rom_8077ABC.c +++ b/src/rom_8077ABC.c @@ -551,7 +551,10 @@ void sub_8078278(struct Sprite *sprite) } } -void sub_80782D8(struct Sprite *sprite) +// Simply waits until the sprite's data[0] hits zero. +// This is used to let sprite anims or affine anims to run for a designated +// duration. +void WaitAnimForDuration(struct Sprite *sprite) { if (sprite->data[0] > 0) sprite->data[0]--; @@ -562,7 +565,7 @@ void sub_80782D8(struct Sprite *sprite) void sub_80782F8(struct Sprite *sprite) { sub_8078314(sprite); - sprite->callback = sub_8078364; + sprite->callback = TranslateSpriteOverDuration; sprite->callback(sprite); } @@ -580,7 +583,7 @@ void sub_8078314(struct Sprite *sprite) sprite->data[1] = old; } -void sub_8078364(struct Sprite *sprite) +void TranslateSpriteOverDuration(struct Sprite *sprite) { if (sprite->data[0] > 0) { @@ -764,7 +767,7 @@ void sub_807867C(struct Sprite *sprite, s16 a2) } } -void sub_80786EC(struct Sprite *sprite) +void InitAnimSpriteTranslationOverDuration(struct Sprite *sprite) { sprite->data[1] = sprite->pos1.x; sprite->data[3] = sprite->pos1.y; @@ -1163,13 +1166,13 @@ bool8 sub_8078E38() return FALSE; } -void sub_8078E70(u8 sprite, u8 a2) +void sub_8078E70(u8 sprite, u8 objMode) { u8 r7 = gSprites[sprite].data[0]; if (IsContest() || IsAnimBankSpriteVisible(r7)) gSprites[sprite].invisible = FALSE; - gSprites[sprite].oam.objMode = a2; + gSprites[sprite].oam.objMode = objMode; gSprites[sprite].affineAnimPaused = TRUE; if (!IsContest() && !gSprites[sprite].oam.affineMode) gSprites[sprite].oam.matrixNum = ewram17810[r7].unk6; @@ -1234,7 +1237,7 @@ static u16 ArcTan2_(s16 a, s16 b) return ArcTan2(a, b); } -u16 sub_80790F0(s16 a, s16 b) +u16 ArcTan2Neg(s16 a, s16 b) { u16 var = ArcTan2_(a, b); return -var; @@ -1437,7 +1440,7 @@ void sub_80794A8(struct Sprite *sprite) sprite->data[2] = GetBankPosition(gAnimBankTarget, 2) + gBattleAnimArgs[2]; sprite->data[4] = GetBankPosition(gAnimBankTarget, 3) + gBattleAnimArgs[3]; sprite->data[5] = gBattleAnimArgs[5]; - sub_80786EC(sprite); + InitAnimSpriteTranslationOverDuration(sprite); sprite->callback = sub_8079518; } @@ -1561,20 +1564,26 @@ void sub_80796F8(u8 taskId) } } -void sub_8079790(u8 task) +// Linearly blends a mon's sprite colors with a target color with increasing +// strength, and then blends out to the original color. +// arg 0: anim bank +// arg 1: blend color +// arg 2: target blend coefficient +// arg 3: initial delay +// arg 4: number of times to blend in and out +void AnimTask_BlendMonInAndOut(u8 task) { - u8 sprite = GetAnimBankSpriteId(gBattleAnimArgs[0]); - - if (sprite == 0xff) + u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]); + if (spriteId == 0xff) { DestroyAnimVisualTask(task); return; } - gTasks[task].data[0] = (gSprites[sprite].oam.paletteNum * 0x10) + 0x101; - sub_80797EC(&gTasks[task]); + gTasks[task].data[0] = (gSprites[spriteId].oam.paletteNum * 0x10) + 0x101; + AnimTask_BlendMonInAndOutSetup(&gTasks[task]); } -void sub_80797EC(struct Task *task) +void AnimTask_BlendMonInAndOutSetup(struct Task *task) { task->data[1] = gBattleAnimArgs[1]; task->data[2] = 0; @@ -1583,10 +1592,10 @@ void sub_80797EC(struct Task *task) task->data[5] = gBattleAnimArgs[3]; task->data[6] = 0; task->data[7] = gBattleAnimArgs[4]; - task->func = sub_8079814; + task->func = AnimTask_BlendMonInAndOutStep; } -void sub_8079814(u8 taskId) +void AnimTask_BlendMonInAndOutStep(u8 taskId) { struct Task *task = &gTasks[taskId]; @@ -1596,14 +1605,14 @@ void sub_8079814(u8 taskId) if (!task->data[6]) { task->data[2]++; - BlendPalette(task->data[0], 0xf, task->data[2], task->data[1]); + BlendPalette(task->data[0], 15, task->data[2], task->data[1]); if (task->data[2] == task->data[3]) task->data[6] = 1; } else { task->data[2]--; - BlendPalette(task->data[0], 0xf, task->data[2], task->data[1]); + BlendPalette(task->data[0], 15, task->data[2], task->data[1]); if (!task->data[2]) { if (--task->data[7]) @@ -1631,7 +1640,7 @@ void sub_80798AC(u8 task) return; } gTasks[task].data[0] = (palette * 0x10) + 0x101; - sub_80797EC(&gTasks[task]); + AnimTask_BlendMonInAndOutSetup(&gTasks[task]); } void sub_80798F4(struct Task *task, u8 a2, const void *a3) @@ -1873,26 +1882,26 @@ void sub_8079E24() } } -u8 sub_8079E90(u8 slot) +u8 sub_8079E90(u8 bank) { - u8 status; + u8 identity; u8 ret; if (IsContest()) { - if (slot == 2) + if (bank == ANIM_BANK_ATK_PARTNER) return 30; else return 40; } else { - status = GetBankIdentity(slot); - if (status == 0) + identity = GetBankIdentity(bank); + if (identity == IDENTITY_PLAYER_MON1) ret = 30; - else if (status == 2) + else if (identity == IDENTITY_PLAYER_MON2) ret = 20; - else if (status == 1) + else if (identity == IDENTITY_OPPONENT_MON1) ret = 40; else ret = 50; |