diff options
author | Marco Willems (M17.1) <progreon@gmail.com> | 2018-01-09 02:38:57 +0100 |
---|---|---|
committer | Marco Willems (M17.1) <progreon@gmail.com> | 2018-01-09 02:38:57 +0100 |
commit | 353a083d97be81cbc612ecb8de46b62a0e523362 (patch) | |
tree | 4533731bd3624398e7a62e932f116e1a5ca1aa0b | |
parent | 4bdab579016705c6dc914e3d2af2d608eb256a9b (diff) |
Finished decompiling battle_anim_sfx
-rw-r--r-- | asm/battle_anim_sfx.s | 224 | ||||
-rw-r--r-- | include/battle_anim.h | 2 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/battle/anim/sfx.c | 149 | ||||
-rw-r--r-- | src/battle/battle_anim.c | 6 |
5 files changed, 127 insertions, 255 deletions
diff --git a/asm/battle_anim_sfx.s b/asm/battle_anim_sfx.s deleted file mode 100644 index 7d196ce97..000000000 --- a/asm/battle_anim_sfx.s +++ /dev/null @@ -1,224 +0,0 @@ - .include "constants/gba_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_812B2B8 -sub_812B2B8: @ 812B2B8 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - movs r0, 0x40 - negs r0, r0 - bl BattleAnimAdjustPanning - lsls r0, 24 - lsrs r4, r0, 24 - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _0812B2DC - ldr r0, _0812B2D8 @ =gSharedMem + 0x19348 - b _0812B2E6 - .align 2, 0 -_0812B2D8: .4byte gSharedMem + 0x19348 -_0812B2DC: - ldr r1, _0812B304 @ =gAnimSpeciesByBanks - ldr r0, _0812B308 @ =gAnimBankAttacker - ldrb r0, [r0] - lsls r0, 1 - adds r0, r1 -_0812B2E6: - ldrh r0, [r0] - cmp r0, 0 - beq _0812B2F6 - lsls r1, r4, 24 - asrs r1, 24 - movs r2, 0x4 - bl PlayCry3 -_0812B2F6: - adds r0, r5, 0 - bl DestroyAnimVisualTask - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0812B304: .4byte gAnimSpeciesByBanks -_0812B308: .4byte gAnimBankAttacker - thumb_func_end sub_812B2B8 - - thumb_func_start sub_812B30C -sub_812B30C: @ 812B30C - push {r4,r5,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _0812B33C @ =gBattleAnimArgs - ldrh r5, [r0] - ldrb r0, [r0, 0x2] - lsls r0, 24 - asrs r0, 24 - bl BattleAnimAdjustPanning - adds r1, r0, 0 - lsls r1, 24 - asrs r1, 24 - adds r0, r5, 0 - bl PlaySE1WithPanning - adds r0, r4, 0 - bl DestroyAnimVisualTask - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0812B33C: .4byte gBattleAnimArgs - thumb_func_end sub_812B30C - - thumb_func_start sub_812B340 -sub_812B340: @ 812B340 - push {r4,r5,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _0812B370 @ =gBattleAnimArgs - ldrh r5, [r0] - ldrb r0, [r0, 0x2] - lsls r0, 24 - asrs r0, 24 - bl BattleAnimAdjustPanning - adds r1, r0, 0 - lsls r1, 24 - asrs r1, 24 - adds r0, r5, 0 - bl PlaySE2WithPanning - adds r0, r4, 0 - bl DestroyAnimVisualTask - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0812B370: .4byte gBattleAnimArgs - thumb_func_end sub_812B340 - - thumb_func_start sub_812B374 -sub_812B374: @ 812B374 - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - mov r8, r0 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r0, _0812B3F8 @ =gBattleAnimArgs - ldrb r5, [r0, 0x2] - ldrb r6, [r0, 0x4] - ldrh r1, [r0, 0x6] - mov r9, r1 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - bl BattleAnimAdjustPanning - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - lsls r5, 24 - asrs r5, 24 - adds r0, r5, 0 - bl BattleAnimAdjustPanning - adds r5, r0, 0 - lsls r4, 24 - asrs r4, 24 - lsls r5, 24 - asrs r5, 24 - lsls r6, 24 - asrs r6, 24 - adds r0, r4, 0 - adds r1, r5, 0 - adds r2, r6, 0 - bl CalculatePanIncrement - ldr r2, _0812B3FC @ =gTasks - mov r3, r8 - lsls r1, r3, 2 - add r1, r8 - lsls r1, 3 - adds r1, r2 - movs r2, 0 - strh r4, [r1, 0xA] - strh r5, [r1, 0xC] - lsls r0, 24 - asrs r0, 24 - strh r0, [r1, 0xE] - mov r0, r9 - strh r0, [r1, 0x12] - strh r2, [r1, 0x1C] - strh r4, [r1, 0x1E] - ldr r2, _0812B400 @ =sub_812B404 - str r2, [r1] - mov r0, r8 - bl _call_via_r2 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0812B3F8: .4byte gBattleAnimArgs -_0812B3FC: .4byte gTasks -_0812B400: .4byte sub_812B404 - thumb_func_end sub_812B374 - - thumb_func_start sub_812B404 -sub_812B404: @ 812B404 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - adds r5, r0, 0 - ldr r1, _0812B45C @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r4, r0, r1 - ldrh r2, [r4, 0xE] - ldrh r0, [r4, 0x1C] - adds r1, r0, 0x1 - strh r1, [r4, 0x1C] - lsls r0, 16 - asrs r0, 16 - movs r3, 0x12 - ldrsh r1, [r4, r3] - cmp r0, r1 - bne _0812B43E - movs r0, 0 - strh r0, [r4, 0x1C] - ldrh r1, [r4, 0x1E] - adds r0, r2, r1 - strh r0, [r4, 0x1E] - movs r2, 0x1E - ldrsh r0, [r4, r2] - bl sub_8077104 - strh r0, [r4, 0x1E] -_0812B43E: - ldr r1, _0812B460 @ =gUnknown_0202F7D2 - ldrh r0, [r4, 0x1E] - strb r0, [r1] - movs r3, 0x1E - ldrsh r1, [r4, r3] - movs r2, 0xC - ldrsh r0, [r4, r2] - cmp r1, r0 - bne _0812B456 - adds r0, r5, 0 - bl DestroyAnimVisualTask -_0812B456: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0812B45C: .4byte gTasks -_0812B460: .4byte gUnknown_0202F7D2 - thumb_func_end sub_812B404 - - .align 2, 0 @ Don't pad with nop. -
\ No newline at end of file diff --git a/include/battle_anim.h b/include/battle_anim.h index 7b966cf4c..a94e6d13c 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -61,7 +61,7 @@ bool8 IsAnimBankSpriteVisible(u8); s8 BattleAnimAdjustPanning(s8 a); void sub_80763FC(u16 a, u16 *b, u32 c, u8 d); s16 CalculatePanIncrement(s16 sourcePan, s16 targetPan, s16 incrementPan); -s16 sub_8077104(s16 a); +s16 sub_8077104(s16 newPan, int oldPan); void DestroyAnimSoundTask(u8 taskId); #endif diff --git a/ld_script.txt b/ld_script.txt index b2d17b5ec..4f99cff99 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -357,7 +357,6 @@ SECTIONS { asm/contest_ai.o(.text); src/unused/unused_81258BC.o(.text); src/battle/anim/sfx.o(.text); - asm/battle_anim_sfx.o(.text); src/battle/battle_controller_safari.o(.text); src/field/fldeff_sweetscent.o(.text); asm/battle_anim_812C144.o(.text); diff --git a/src/battle/anim/sfx.c b/src/battle/anim/sfx.c index cb61a566f..470fea3cc 100644 --- a/src/battle/anim/sfx.c +++ b/src/battle/anim/sfx.c @@ -10,26 +10,31 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; extern u16 gBattlePartyID[]; +extern u16 gAnimSpeciesByBanks[]; +extern u8 gUnknown_0202F7D2; void sub_812AF98(u8 taskId); void sub_812B004(u8 taskId); void sub_812B004(u8 taskId); void sub_812B108(u8 taskId); +void sub_812B404(u8 taskId); +// used in 1 move: +// Move_FIRE_BLAST void sub_812AF30(u8 taskId) { - s8 sourcePan, targetPan, incrementPan; + s8 sourcePan, targetPan, panIncrement; TASK.data[0] = gBattleAnimArgs[0]; TASK.data[1] = gBattleAnimArgs[1]; sourcePan = BattleAnimAdjustPanning(-64); targetPan = BattleAnimAdjustPanning(63); - incrementPan = CalculatePanIncrement(sourcePan, targetPan, 2); + panIncrement = CalculatePanIncrement(sourcePan, targetPan, 2); TASK.data[2] = sourcePan; TASK.data[3] = targetPan; - TASK.data[4] = incrementPan; + TASK.data[4] = panIncrement; TASK.data[10] = 10; TASK.func = sub_812AF98; @@ -38,7 +43,7 @@ void sub_812AF30(u8 taskId) void sub_812AF98(u8 taskId) { s16 pan = TASK.data[2]; - s8 var0 = TASK.data[4]; + s8 dPan = TASK.data[4]; if (++TASK.data[11] == 111) { @@ -53,8 +58,8 @@ void sub_812AF98(u8 taskId) TASK.data[10] = 0; PlaySE12WithPanning(TASK.data[0], pan); } - pan += var0; - TASK.data[2] = sub_8077104(pan); + pan += dPan; + TASK.data[2] = sub_8077104(pan, dPan); } } @@ -66,7 +71,7 @@ void sub_812B004(u8 taskId) { TASK.data[10] = 0; - pan = BattleAnimAdjustPanning(0x3f); + pan = BattleAnimAdjustPanning(63); PlaySE12WithPanning(TASK.data[1], pan); if (++TASK.data[11] == 2) @@ -76,31 +81,32 @@ void sub_812B004(u8 taskId) } } +// used in 7 moves: +// Move_ICE_BEAM, Move_AURORA_BEAM, Move_PSYBEAM, +// Move_PSYWAVE, Move_SHADOW_BALL, Move_TRI_ATTACK, +// Move_HYPER_BEAM void sub_812B058(u8 taskId) { - s16 sp; - u8 r10, r7, r9; - s8 r5, r6, r4, r0; - - sp = gBattleAnimArgs[0]; - r5 = gBattleAnimArgs[2]; - r6 = gBattleAnimArgs[3]; - r10 = gBattleAnimArgs[4]; - r7 = gBattleAnimArgs[5]; - r9 = gBattleAnimArgs[6]; - r4 = BattleAnimAdjustPanning(gBattleAnimArgs[1]); - r5 = BattleAnimAdjustPanning(r5); - r0 = CalculatePanIncrement(r4, r5, r6); + s16 sp = gBattleAnimArgs[0]; + s8 r5 = gBattleAnimArgs[2]; + s8 panIncrement = gBattleAnimArgs[3]; + u8 r10 = gBattleAnimArgs[4]; // number of times the sound must be played + u8 r7 = gBattleAnimArgs[5]; + u8 r9 = gBattleAnimArgs[6]; + + s8 pan1 = BattleAnimAdjustPanning(gBattleAnimArgs[1]); + s8 pan2 = BattleAnimAdjustPanning(r5); + panIncrement = CalculatePanIncrement(pan1, pan2, panIncrement); TASK.data[0] = sp; - TASK.data[1] = r4; - TASK.data[2] = r5; - TASK.data[3] = r0; + TASK.data[1] = pan1; + TASK.data[2] = pan2; + TASK.data[3] = panIncrement; TASK.data[4] = r10; TASK.data[5] = r7; TASK.data[6] = r9; TASK.data[10] = 0; - TASK.data[11] = r4; + TASK.data[11] = pan1; TASK.data[12] = r9; TASK.func = sub_812B108; @@ -123,15 +129,20 @@ void sub_812B108(u8 taskId) if (TASK.data[10]++ == TASK.data[5]) { + u16 dPan, oldPan; TASK.data[10] = 0; - TASK.data[11] += TASK.data[3]; - TASK.data[11] = sub_8077104(TASK.data[11]); + dPan = TASK.data[3]; + oldPan = TASK.data[11]; + TASK.data[11] = dPan + oldPan; + TASK.data[11] = sub_8077104(TASK.data[11], oldPan); } } // #define shared19348 (*(struct UnknownContestStruct8 *)(gSharedMem + 0x19348)) // #define EWRAM_19348 (*(u16 *)(gSharedMem + 0x19348)) +// used in 3 moves: +// Move_HOWL, Move_ROAR, Move_GROWL void sub_812B18C(u8 taskId) { u16 species = 0; @@ -181,4 +192,90 @@ void sub_812B18C(u8 taskId) } DestroyAnimVisualTask(taskId); +} + +// used in Move_HYPER_VOICE +void sub_812B2B8(u8 taskId) +{ + u16 species; + s8 pan = BattleAnimAdjustPanning(-64); + + if (IsContest()) + species = shared19348.unk0; + else + species = gAnimSpeciesByBanks[gAnimBankAttacker]; + + if (species != 0) + PlayCry3(species, pan, 4); + + DestroyAnimVisualTask(taskId); +} + +// used in 6 moves: +// Move_SKY_ATTACK, Move_LUSTER_PURGE, Move_FLATTER, +// Move_DRAGON_CLAW, Move_RETURN, Move_COSMIC_POWER, +void sub_812B30C(u8 taskId) +{ + u16 songNum = gBattleAnimArgs[0]; + s8 pan = BattleAnimAdjustPanning(gBattleAnimArgs[1]); + PlaySE1WithPanning(songNum, pan); + + 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); +} + +// used in 2 moves: +// Move_CONFUSE_RAY, Move_WILL_O_WISP +void sub_812B374(u8 taskId) +{ + u8 r5 = gBattleAnimArgs[1]; + s8 panIncrement = gBattleAnimArgs[2]; + s16 r9 = gBattleAnimArgs[3]; + s8 r1 = gBattleAnimArgs[0]; + + s8 sourcePan = BattleAnimAdjustPanning(r1); + s8 targetPan = BattleAnimAdjustPanning(r5); + panIncrement = CalculatePanIncrement(sourcePan, targetPan, panIncrement); + + TASK.data[1] = sourcePan; + TASK.data[2] = targetPan; + TASK.data[3] = panIncrement; + TASK.data[5] = r9; + TASK.data[10] = 0; + TASK.data[11] = sourcePan; + + TASK.func = sub_812B404; + sub_812B404(taskId); +} + +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); + } }
\ No newline at end of file diff --git a/src/battle/battle_anim.c b/src/battle/battle_anim.c index 8242a1ddd..a0c74be1d 100644 --- a/src/battle/battle_anim.c +++ b/src/battle/battle_anim.c @@ -43,7 +43,7 @@ EWRAM_DATA u16 sAnimMoveIndex = 0; // set but unused. EWRAM_DATA u8 gAnimBankAttacker = 0; EWRAM_DATA u8 gAnimBankTarget = 0; EWRAM_DATA u16 gAnimSpeciesByBanks[4] = {0}; -EWRAM_DATA u8 gUnknown_0202F7D2 = 0; +EWRAM_DATA u8 gUnknown_0202F7D2 = 0; // some global pan variable extern u16 gBattle_BG1_Y; extern u16 gBattle_WIN1H; extern u16 gBattle_WIN0V; @@ -1489,9 +1489,9 @@ s8 BattleAnimAdjustPanning2(s8 pan) return pan; } -s16 sub_8077104(s16 a) +s16 sub_8077104(s16 newPan, int oldPan) { - s16 var = a; + s16 var = newPan; if (var > 63) var = 63; |