diff options
-rw-r--r-- | src/battle/anim/fire.c | 84 | ||||
-rw-r--r-- | src/battle/anim/fire_2.c | 307 |
2 files changed, 246 insertions, 145 deletions
diff --git a/src/battle/anim/fire.c b/src/battle/anim/fire.c index d1ef86731..253236805 100644 --- a/src/battle/anim/fire.c +++ b/src/battle/anim/fire.c @@ -9,78 +9,105 @@ extern u8 gAnimBankAttacker; void sub_80D5038(struct Sprite *); void sub_80D50E8(struct Sprite *); -void sub_80D4ED8(struct Sprite *sprite) { +void sub_80D4ED8(struct Sprite *sprite) +{ sprite->data[0] = gBattleAnimArgs[0]; sprite->data[1] = 0x3C; sprite->data[2] = 0x9; sprite->data[3] = 0x1E; sprite->data[4] = 0xFE00; + StoreSpriteCallbackInData(sprite, DestroyAnimSprite); + sprite->callback = sub_8078174; sub_8078174(sprite); } -void sub_80D4F18(struct Sprite *sprite) { +void sub_80D4F18(struct Sprite *sprite) +{ sub_807867C(sprite, gBattleAnimArgs[0]); + sprite->pos1.y += gBattleAnimArgs[1]; sprite->data[0] = gBattleAnimArgs[4]; sprite->data[1] = gBattleAnimArgs[2]; sprite->data[2] = gBattleAnimArgs[3]; + sprite->callback = sub_8078394; StoreSpriteCallbackInData(sprite, DestroyAnimSprite); } -void sub_80D4F5C(struct Sprite *sprite) { +void sub_80D4F5C(struct Sprite *sprite) +{ sub_8078650(sprite); - if (GetBankSide(gAnimBankAttacker)) { + + if (GetBankSide(gAnimBankAttacker)) + { sprite->pos1.x -= gBattleAnimArgs[0]; sprite->pos1.y += gBattleAnimArgs[1]; sprite->data[2] = -gBattleAnimArgs[4]; - } else { + } + else + { sprite->pos1.x += gBattleAnimArgs[0]; sprite->pos1.y += gBattleAnimArgs[1]; sprite->data[2] = gBattleAnimArgs[4]; } + sprite->data[1] = gBattleAnimArgs[2]; sprite->data[4] = gBattleAnimArgs[3]; sprite->data[3] = gBattleAnimArgs[5]; + sprite->callback = sub_80D5038; } -void sub_80D4FCC(struct Sprite *sprite) { - if (GetBankSide(gAnimBankAttacker)) { +void sub_80D4FCC(struct Sprite *sprite) +{ + if (GetBankSide(gAnimBankAttacker)) + { sprite->pos1.x -= gBattleAnimArgs[0]; sprite->pos1.y += gBattleAnimArgs[1]; sprite->data[2] = gBattleAnimArgs[4]; - } else { + } + else + { sprite->pos1.x += gBattleAnimArgs[0]; sprite->pos1.y += gBattleAnimArgs[1]; sprite->data[2] = -gBattleAnimArgs[4]; } + sprite->data[1] = gBattleAnimArgs[2]; sprite->data[4] = gBattleAnimArgs[3]; sprite->data[3] = gBattleAnimArgs[5]; + sprite->callback = sub_80D5038; } -void sub_80D5038(struct Sprite *sprite) { - if (++sprite->data[0] < sprite->data[4]) { +void sub_80D5038(struct Sprite *sprite) +{ + if (++sprite->data[0] < sprite->data[4]) + { sprite->pos2.x += sprite->data[2]; sprite->pos2.y += sprite->data[3]; } - if (sprite->data[0] == sprite->data[1]) { + + if (sprite->data[0] == sprite->data[1]) move_anim_8074EE0(sprite); - } } -void sub_80D5074(struct Sprite *sprite) { +void sub_80D5074(struct Sprite *sprite) +{ sub_8078650(sprite); - if (GetBankSide(gAnimBankAttacker)) { + + if (GetBankSide(gAnimBankAttacker)) + { sprite->pos1.x -= gBattleAnimArgs[0]; - } else { + } + else + { sprite->pos1.x += gBattleAnimArgs[0]; sprite->subpriority = 8; } + sprite->pos1.y += gBattleAnimArgs[1]; sprite->data[0] = gBattleAnimArgs[2]; sprite->data[1] = gBattleAnimArgs[3]; @@ -88,25 +115,32 @@ void sub_80D5074(struct Sprite *sprite) { sprite->data[3] = gBattleAnimArgs[5]; sprite->data[4] = gBattleAnimArgs[6]; sprite->data[5] = 0; + sprite->callback = sub_80D50E8; } -void sub_80D50E8(struct Sprite *sprite) { - if (sprite->data[3]) { - if(sprite->data[5] > 10000) { +void sub_80D50E8(struct Sprite *sprite) +{ + if (sprite->data[3]) + { + if(sprite->data[5] > 10000) sprite->subpriority = 1; - } + sprite->pos2.x = Sin(sprite->data[0], sprite->data[1] + (sprite->data[5] >> 8)); sprite->pos2.y = Cos(sprite->data[0], sprite->data[1] + (sprite->data[5] >> 8)); + sprite->data[0] += sprite->data[2]; sprite->data[5] += sprite->data[4]; - if (sprite->data[0] > 0xFF) { - sprite->data[0] -= 0x100; - } else if (sprite->data[0] < 0) { - sprite->data[0] += 0x100; - } + + if (sprite->data[0] > 255) + sprite->data[0] -= 256; + else if (sprite->data[0] < 0) + sprite->data[0] += 256; + sprite->data[3]--; - } else { + } + else + { move_anim_8074EE0(sprite); } }
\ No newline at end of file diff --git a/src/battle/anim/fire_2.c b/src/battle/anim/fire_2.c index c68bc51f9..6dc304232 100644 --- a/src/battle/anim/fire_2.c +++ b/src/battle/anim/fire_2.c @@ -20,114 +20,149 @@ 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) { - if (GetBankSide(gAnimBankAttacker) == GetBankSide(gAnimBankTarget)) { - if (gAnimBankAttacker == GetBankByPlayerAI(2) || gAnimBankAttacker == GetBankByPlayerAI(3)) { +void sub_80D51A8(struct Sprite *sprite) +{ + if (GetBankSide(gAnimBankAttacker) == GetBankSide(gAnimBankTarget) + && (gAnimBankAttacker == GetBankByPlayerAI(2) + || gAnimBankAttacker == GetBankByPlayerAI(3))) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - } - } + sprite->callback = sub_8079534; sub_8079534(sprite); } -struct Sprite *sub_80D5210(struct Sprite *sprite) { +struct Sprite *sub_80D5210(struct Sprite *sprite) +{ gBattleAnimArgs[0] = -gBattleAnimArgs[0]; gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + sprite->callback = sub_8079534; return sprite; } -void sub_80D522C(struct Sprite *sprite) { +void sub_80D522C(struct Sprite *sprite) +{ sub_80787B0(sprite, 1); + sprite->data[7] = gBattleAnimArgs[2]; sprite->data[0] = 0; + sprite->callback = sub_80D5254; } -void sub_80D5254(struct Sprite *sprite) { +void sub_80D5254(struct Sprite *sprite) +{ sub_80D5348(sprite); - sprite->data[0]++; - if (sprite->data[0] == 0x12) { + + if (++sprite->data[0] == 0x12) + { sprite->data[0] = 0x19; sprite->data[1] = sprite->pos1.x; sprite->data[2] = GetBankPosition(gAnimBankTarget, 2); sprite->data[3] = sprite->pos1.y; sprite->data[4] = GetBankPosition(gAnimBankTarget, 3); + obj_translate_based_on_private_1_2_3_4(sprite); + sprite->callback = sub_80D52AC; } } -void sub_80D52AC(struct Sprite *sprite) { - if (sub_8078B5C(sprite)) { +void sub_80D52AC(struct Sprite *sprite) +{ + if (sub_8078B5C(sprite)) + { sprite->data[0] = 0; + sprite->pos1.x = GetBankPosition(gAnimBankTarget, 2); sprite->pos1.y = GetBankPosition(gAnimBankTarget, 3); sprite->pos2.y = 0; sprite->pos2.x = 0; + sprite->callback = sub_80D5324; sub_80D5324(sprite); - } else { + } + else + { sprite->pos2.x += Sin(sprite->data[7], 28); sprite->pos2.y += Cos(sprite->data[7], 28); + sprite->data[7] = (sprite->data[7] + 20) & 0xFF; } } -void sub_80D5324(struct Sprite *sprite) { +void sub_80D5324(struct Sprite *sprite) +{ sub_80D5348(sprite); - if (++sprite->data[0] == 0x1F) { + + if (++sprite->data[0] == 0x1F) DestroyAnimSprite(sprite); - } } -void sub_80D5348(struct Sprite *sprite) { +void sub_80D5348(struct Sprite *sprite) +{ sprite->pos2.x = Sin(sprite->data[7], 28); sprite->pos2.y = Cos(sprite->data[7], 28); + sprite->data[7] = (sprite->data[7] + 20) & 0xFF; } -void sub_80D5374(struct Sprite *sprite) { +void sub_80D5374(struct Sprite *sprite) +{ sprite->pos1.x += gBattleAnimArgs[0]; sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[2]; sprite->data[1] = gBattleAnimArgs[3]; sprite->data[2] = gBattleAnimArgs[4]; + StoreSpriteCallbackInData(sprite, DestroyAnimSprite); + sprite->callback = sub_8078364; } -void sub_80D53B4(struct Sprite *sprite) { +void sub_80D53B4(struct Sprite *sprite) +{ sub_80787B0(sprite, 1); + sprite->data[1] = gBattleAnimArgs[2]; sprite->data[0] = gBattleAnimArgs[3]; + sprite->invisible = TRUE; sprite->callback = sub_80782D8; + StoreSpriteCallbackInData(sprite, sub_80D53F4); } -void sub_80D53F4(struct Sprite *sprite) { +void sub_80D53F4(struct Sprite *sprite) +{ sprite->invisible = FALSE; + sprite->data[0] = sprite->data[1]; sprite->data[1] = 0; + sprite->callback = sub_80D541C; sub_80D541C(sprite); } -void sub_80D541C(struct Sprite *sprite) { +void sub_80D541C(struct Sprite *sprite) +{ sprite->pos2.x = Sin(sprite->data[1], sprite->data[2] >> 8); sprite->pos2.y = Cos(sprite->data[1], sprite->data[2] >> 8); + sprite->data[1] = (sprite->data[1] + 10) & 0xFF; sprite->data[2] += 0xD0; - sprite->data[0]--; - if (sprite->data[0] == -1) { + + if (--sprite->data[0] == -1) DestroyAnimSprite(sprite); - } } -void sub_80D5470(u8 taskId) { // initialize animation task for Move_ERUPTION? +void sub_80D5470(u8 taskId) // initialize animation task for Move_ERUPTION? +{ struct Task *task = &gTasks[taskId]; + task->data[15] = GetAnimBankSpriteId(0); + task->data[0] = 0; task->data[1] = 0; task->data[2] = 0; @@ -135,124 +170,156 @@ void sub_80D5470(u8 taskId) { // initialize animation task for Move_ERUPTION? task->data[4] = gSprites[task->data[15]].pos1.y; task->data[5] = GetBankSide(gAnimBankAttacker); task->data[6] = 0; + sub_8078E70(task->data[15], 0); + task->func = sub_80D54E0; } -void sub_80D54E0(u8 taskId) { // animate Move_ERUPTION? +void sub_80D54E0(u8 taskId) // animate Move_ERUPTION? +{ struct Task *task = &gTasks[taskId]; - switch (task->data[0]) { - case 0: - sub_8079C08(task, task->data[15], 0x100, 0x100, 0xE0, 0x200, 0x20); - task->data[0]++; - case 1: - if (++task->data[1] > 1) { - task->data[1] = 0; - if (++task->data[2] & 0x1) { - gSprites[task->data[15]].pos2.x = 3; - } else { - gSprites[task->data[15]].pos2.x = -3; - } - } - if (task->data[5]) { - if (++task->data[3] > 4) { - task->data[3] = 0; - gSprites[task->data[15]].pos1.y++; - } - } - if(!sub_8079C74(task)) { - sub_8079A64(task->data[15]); - gSprites[task->data[15]].pos2.x = 0; - task->data[1] = 0; - task->data[2] = 0; - task->data[3] = 0; - task->data[0]++; - } - break; - case 2: - if (++task->data[1] > 4) { - if (task->data[5]) { - sub_8079C08(task, task->data[15], 0xE0, 0x200, 0x180, 0xF0, 0x6); - } else { - sub_8079C08(task, task->data[15], 0xE0, 0x200, 0x180, 0xC0, 0x6); - } - task->data[1] = 0; - task->data[0]++; - } - break; - case 3: - if (!sub_8079C74(task)) { - sub_80D57C4(task->data[15], taskId, 6); - task->data[0]++; - } - break; - case 4: - if (++task->data[1] > 1) { - task->data[1] = 0; - if (++task->data[2] & 1) { - gSprites[task->data[15]].pos2.y += 3; - } else { - gSprites[task->data[15]].pos2.y -= 3; - } - } - if (++task->data[3] > 0x18) { - if (task->data[5]) { - sub_8079C08(task, task->data[15], 0x180, 0xF0, 0x100, 0x100, 0x8); - } else { - sub_8079C08(task, task->data[15], 0x180, 0xC0, 0x100, 0x100, 0x8); - } - if (task->data[2] & 1) { - gSprites[task->data[15]].pos2.y -= 3; - } - task->data[1] = 0; - task->data[2] = 0; + + switch (task->data[0]) + { + case 0: + sub_8079C08(task, task->data[15], 0x100, 0x100, 0xE0, 0x200, 0x20); + + task->data[0]++; + case 1: + if (++task->data[1] > 1) + { + task->data[1] = 0; + + if (++task->data[2] & 0x1) + gSprites[task->data[15]].pos2.x = 3; + else + gSprites[task->data[15]].pos2.x = -3; + } + + if (task->data[5]) + { + if (++task->data[3] > 4) + { task->data[3] = 0; - task->data[0]++; - } - break; - case 5: - if (task->data[5]) { - gSprites[task->data[15]].pos1.y--; - } - if (!sub_8079C74(task)) { - gSprites[task->data[15]].pos1.y = task->data[4]; - sub_8078F40(task->data[15]); - task->data[2] = 0; - task->data[0]++; + gSprites[task->data[15]].pos1.y++; } - break; - case 6: - if (!task->data[6]) { - DestroyAnimVisualTask(taskId); - } - break; - default: + } + + if(!sub_8079C74(task)) + { + sub_8079A64(task->data[15]); + gSprites[task->data[15]].pos2.x = 0; + + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 0; + task->data[0]++; + } + break; + case 2: + if (++task->data[1] > 4) + { + if (task->data[5]) + sub_8079C08(task, task->data[15], 0xE0, 0x200, 0x180, 0xF0, 0x6); + else + sub_8079C08(task, task->data[15], 0xE0, 0x200, 0x180, 0xC0, 0x6); + + task->data[1] = 0; + task->data[0]++; + } + break; + case 3: + if (!sub_8079C74(task)) + { + sub_80D57C4(task->data[15], taskId, 6); + + task->data[0]++; + } + break; + case 4: + if (++task->data[1] > 1) + { + task->data[1] = 0; + + if (++task->data[2] & 1) + gSprites[task->data[15]].pos2.y += 3; + else + gSprites[task->data[15]].pos2.y -= 3; + } + + if (++task->data[3] > 0x18) + { + if (task->data[5]) + sub_8079C08(task, task->data[15], 0x180, 0xF0, 0x100, 0x100, 0x8); + else + sub_8079C08(task, task->data[15], 0x180, 0xC0, 0x100, 0x100, 0x8); + + if (task->data[2] & 1) + gSprites[task->data[15]].pos2.y -= 3; + + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 0; + task->data[0]++; + } + break; + case 5: + if (task->data[5]) + gSprites[task->data[15]].pos1.y--; + + if (!sub_8079C74(task)) + { + gSprites[task->data[15]].pos1.y = task->data[4]; + sub_8078F40(task->data[15]); + + task->data[2] = 0; + task->data[0]++; + } + break; + case 6: + if (!task->data[6]) + DestroyAnimVisualTask(taskId); + + break; + default: } } -void sub_80D57C4(u8 spriteId, u8 taskId, u8 a3) { - u16 i; - u16 j; +void sub_80D57C4(u8 spriteId, u8 taskId, u8 a3) +{ + u16 i, j; + s8 sign; + u16 y = sub_80D5940(spriteId); u16 x = gSprites[spriteId].pos1.x; - s8 sign; - if(!GetBankSide(gAnimBankAttacker)) { + + if(!GetBankSide(gAnimBankAttacker)) + { x -= 0xC; sign = 1; - } else { + } + else + { x += 0x10; sign = -1; } - for (i = 0, j = 0; i <= 6; i++) { + + for (i = 0, j = 0; i <= 6; i++) + { u8 spriteId = CreateSprite(&gSpriteTemplate_83D96C4, x, y, 2); - if (spriteId != 0x40) { + + if (spriteId != 0x40) + { gSprites[spriteId].oam.tileNum += j * 4 + 0x40; - if (++j >= 5) { + + if (++j >= 5) j = 0; - } + sub_80D5994(&gSprites[spriteId], gHeatedRockCoords[i][0] * sign, gHeatedRockCoords[i][1]); gSprites[spriteId].data[6] = taskId; gSprites[spriteId].data[7] = a3; + gTasks[taskId].data[a3]++; } } |