diff options
author | Marcus Huderle <huderlem@gmail.com> | 2018-06-23 15:39:40 -0500 |
---|---|---|
committer | Marcus Huderle <huderlem@gmail.com> | 2018-06-23 15:47:39 -0500 |
commit | 65b5fe5f00a8d7381c1e3c5d7c3f4537459988c2 (patch) | |
tree | 6dab4a5781eac130d3695a79fb9a849f67f690f4 | |
parent | ac636ec14e896214b549025e671fc6ae7f6fd045 (diff) |
Decompile more of battle_anim_812C144
-rw-r--r-- | asm/battle_anim_812C144.s | 830 | ||||
-rw-r--r-- | include/battle.h | 2 | ||||
-rw-r--r-- | include/ewram.h | 2 | ||||
-rw-r--r-- | include/gba/types.h | 4 | ||||
-rw-r--r-- | include/rom_8077ABC.h | 7 | ||||
-rw-r--r-- | src/battle/anim/dark.c | 2 | ||||
-rw-r--r-- | src/battle/battle_anim.c | 6 | ||||
-rw-r--r-- | src/battle/battle_anim_812C144.c | 238 | ||||
-rw-r--r-- | src/rom_8077ABC.c | 8 |
9 files changed, 256 insertions, 843 deletions
diff --git a/asm/battle_anim_812C144.s b/asm/battle_anim_812C144.s index 6345d9d3b..e2c28c978 100644 --- a/asm/battle_anim_812C144.s +++ b/asm/battle_anim_812C144.s @@ -5,836 +5,6 @@ .text - thumb_func_start sub_812D7E8 -sub_812D7E8: @ 812D7E8 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0xC - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r1, _0812D818 @ =gTasks - lsls r0, 2 - add r0, r8 - lsls r0, 3 - adds r0, r1 - movs r2, 0x8 - ldrsh r0, [r0, r2] - adds r3, r1, 0 - cmp r0, 0x4 - bls _0812D80E - b _0812DAFA -_0812D80E: - lsls r0, 2 - ldr r1, _0812D81C @ =_0812D820 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0812D818: .4byte gTasks -_0812D81C: .4byte _0812D820 - .align 2, 0 -_0812D820: - .4byte _0812D834 - .4byte _0812D888 - .4byte _0812D8C4 - .4byte _0812DA48 - .4byte _0812DA84 -_0812D834: - ldr r1, _0812D850 @ =REG_MOSAIC - movs r0, 0 - strh r0, [r1] - ldr r0, _0812D854 @ =gAnimBankAttacker - ldrb r0, [r0] - bl GetBattlerPosition_permutated - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0812D85C - ldr r0, _0812D858 @ =REG_BG1CNT - b _0812D85E - .align 2, 0 -_0812D850: .4byte REG_MOSAIC -_0812D854: .4byte gAnimBankAttacker -_0812D858: .4byte REG_BG1CNT -_0812D85C: - ldr r0, _0812D87C @ =REG_BG2CNT -_0812D85E: - ldrb r1, [r0] - movs r2, 0x40 - orrs r1, r2 - strb r1, [r0] - ldr r0, _0812D880 @ =gTasks - mov r6, r8 - lsls r1, r6, 2 - add r1, r8 - lsls r1, 3 - adds r1, r0 - ldr r0, _0812D884 @ =gBattleAnimArgs - ldrh r0, [r0] - strh r0, [r1, 0x1C] - b _0812DA2A - .align 2, 0 -_0812D87C: .4byte REG_BG2CNT -_0812D880: .4byte gTasks -_0812D884: .4byte gBattleAnimArgs -_0812D888: - mov r1, r8 - lsls r0, r1, 2 - add r0, r8 - lsls r0, 3 - adds r4, r0, r3 - ldrh r0, [r4, 0xC] - adds r1, r0, 0x1 - strh r1, [r4, 0xC] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - bgt _0812D8A2 - b _0812DAFA -_0812D8A2: - movs r0, 0 - strh r0, [r4, 0xC] - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - ldrh r2, [r4, 0xA] - ldr r1, _0812D8C0 @ =REG_MOSAIC - lsls r0, r2, 4 - orrs r0, r2 - strh r0, [r1] - cmp r2, 0xF - beq _0812D8BC - b _0812DAFA -_0812D8BC: - b _0812DA78 - .align 2, 0 -_0812D8C0: .4byte REG_MOSAIC -_0812D8C4: - ldr r5, _0812D8F4 @ =gAnimBankAttacker - ldrb r0, [r5] - ldr r1, _0812D8F8 @ =gAnimBankTarget - ldrb r1, [r1] - mov r2, r8 - lsls r4, r2, 2 - adds r2, r4, r2 - lsls r2, 3 - adds r2, r3 - ldrb r2, [r2, 0x1C] - bl sub_8031FC4 - ldrb r1, [r5] - mov r0, sp - bl sub_8078954 - bl IsContest - lsls r0, 24 - mov r9, r4 - cmp r0, 0 - beq _0812D8FC - movs r1, 0 - b _0812D906 - .align 2, 0 -_0812D8F4: .4byte gAnimBankAttacker -_0812D8F8: .4byte gAnimBankTarget -_0812D8FC: - ldrb r0, [r5] - bl GetBattlerPosition - lsls r0, 24 - lsrs r1, r0, 24 -_0812D906: - ldr r0, _0812D9CC @ =gUnknown_081FAF4C - lsls r1, 2 - adds r1, r0 - ldr r2, _0812D9D0 @ =gBattleMonForms - ldr r0, _0812D9D4 @ =gAnimBankAttacker - ldrb r0, [r0] - adds r0, r2 - ldrb r0, [r0] - lsls r0, 11 - ldr r1, [r1] - adds r1, r0 - ldr r2, [sp] - ldr r0, _0812D9D8 @ =0x040000d4 - str r1, [r0] - str r2, [r0, 0x4] - ldr r1, _0812D9DC @ =0x84000200 - str r1, [r0, 0x8] - ldr r0, [r0, 0x8] - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _0812DA20 - ldr r5, _0812D9E0 @ =gSharedMem + 0x19348 - ldrh r0, [r5] - bl IsSpeciesNotUnown - adds r4, r0, 0 - ldrh r0, [r5, 0x2] - bl IsSpeciesNotUnown - lsls r4, 24 - lsls r0, 24 - cmp r4, r0 - beq _0812D9A2 - ldr r6, [sp, 0x4] - movs r5, 0 - movs r0, 0x7 - mov r12, r0 - movs r7, 0 -_0812D956: - movs r4, 0 - adds r3, r7, r6 - mov r1, r12 - lsls r0, r1, 1 - adds r2, r0, r6 -_0812D960: - ldrh r1, [r3] - ldrh r0, [r2] - strh r0, [r3] - strh r1, [r2] - adds r3, 0x2 - subs r2, 0x2 - adds r4, 0x1 - cmp r4, 0x3 - ble _0812D960 - movs r2, 0x20 - add r12, r2 - adds r7, 0x40 - adds r5, 0x1 - cmp r5, 0x7 - ble _0812D956 - movs r5, 0 - movs r0, 0x80 - lsls r0, 3 - adds r3, r0, 0 -_0812D986: - adds r2, r5, 0x1 - lsls r0, r5, 6 - adds r1, r0, r6 - movs r4, 0x7 -_0812D98E: - ldrh r0, [r1] - eors r0, r3 - strh r0, [r1] - adds r1, 0x2 - subs r4, 0x1 - cmp r4, 0 - bge _0812D98E - adds r5, r2, 0 - cmp r5, 0x7 - ble _0812D986 -_0812D9A2: - ldr r0, _0812D9E0 @ =gSharedMem + 0x19348 - ldrh r0, [r0, 0x2] - bl IsSpeciesNotUnown - lsls r0, 24 - cmp r0, 0 - beq _0812D9F0 - ldr r3, _0812D9E4 @ =gSprites - ldr r4, _0812D9E8 @ =gBankSpriteIds - ldr r2, _0812D9D4 @ =gAnimBankAttacker - ldrb r0, [r2] - adds r0, r4 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r3, 0 - adds r1, 0x10 - adds r0, r1 - ldr r1, _0812D9EC @ =gSpriteAffineAnimTable_81E7C18 - b _0812DA0A - .align 2, 0 -_0812D9CC: .4byte gUnknown_081FAF4C -_0812D9D0: .4byte gBattleMonForms -_0812D9D4: .4byte gAnimBankAttacker -_0812D9D8: .4byte 0x040000d4 -_0812D9DC: .4byte 0x84000200 -_0812D9E0: .4byte gSharedMem + 0x19348 -_0812D9E4: .4byte gSprites -_0812D9E8: .4byte gBankSpriteIds -_0812D9EC: .4byte gSpriteAffineAnimTable_81E7C18 -_0812D9F0: - ldr r3, _0812DA34 @ =gSprites - ldr r4, _0812DA38 @ =gBankSpriteIds - ldr r2, _0812DA3C @ =gAnimBankAttacker - ldrb r0, [r2] - adds r0, r4 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r3, 0 - adds r1, 0x10 - adds r0, r1 - ldr r1, _0812DA40 @ =gSpriteAffineAnimTable_81E7BEC -_0812DA0A: - str r1, [r0] - ldrb r0, [r2] - adds r0, r4 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - movs r1, 0 - bl StartSpriteAffineAnim -_0812DA20: - ldr r0, _0812DA44 @ =gTasks - mov r1, r9 - add r1, r8 - lsls r1, 3 - adds r1, r0 -_0812DA2A: - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - b _0812DAFA - .align 2, 0 -_0812DA34: .4byte gSprites -_0812DA38: .4byte gBankSpriteIds -_0812DA3C: .4byte gAnimBankAttacker -_0812DA40: .4byte gSpriteAffineAnimTable_81E7BEC -_0812DA44: .4byte gTasks -_0812DA48: - mov r1, r8 - lsls r0, r1, 2 - add r0, r8 - lsls r0, 3 - adds r4, r0, r3 - ldrh r0, [r4, 0xC] - adds r1, r0, 0x1 - strh r1, [r4, 0xC] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _0812DAFA - movs r0, 0 - strh r0, [r4, 0xC] - ldrh r0, [r4, 0xA] - subs r0, 0x1 - strh r0, [r4, 0xA] - ldrh r2, [r4, 0xA] - ldr r1, _0812DA80 @ =REG_MOSAIC - lsls r0, r2, 4 - orrs r0, r2 - strh r0, [r1] - cmp r2, 0 - bne _0812DAFA -_0812DA78: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _0812DAFA - .align 2, 0 -_0812DA80: .4byte REG_MOSAIC -_0812DA84: - ldr r1, _0812DAA0 @ =REG_MOSAIC - movs r0, 0 - strh r0, [r1] - ldr r0, _0812DAA4 @ =gAnimBankAttacker - ldrb r0, [r0] - bl GetBattlerPosition_permutated - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0812DAAC - ldr r2, _0812DAA8 @ =REG_BG1CNT - b _0812DAAE - .align 2, 0 -_0812DAA0: .4byte REG_MOSAIC -_0812DAA4: .4byte gAnimBankAttacker -_0812DAA8: .4byte REG_BG1CNT -_0812DAAC: - ldr r2, _0812DB08 @ =REG_BG2CNT -_0812DAAE: - ldrb r1, [r2] - movs r0, 0x41 - negs r0, r0 - ands r0, r1 - strb r0, [r2] - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _0812DAF4 - ldr r4, _0812DB0C @ =gAnimBankAttacker - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0812DAF4 - ldr r0, _0812DB10 @ =gTasks - mov r2, r8 - lsls r1, r2, 2 - add r1, r8 - lsls r1, 3 - adds r1, r0 - movs r6, 0x1C - ldrsh r0, [r1, r6] - cmp r0, 0 - bne _0812DAF4 - ldrb r0, [r4] - lsls r1, r0, 2 - ldr r2, _0812DB14 @ =gSharedMem + 0x17800 - adds r1, r2 - ldrh r1, [r1, 0x2] - bl sub_8032984 -_0812DAF4: - mov r0, r8 - bl DestroyAnimVisualTask -_0812DAFA: - add sp, 0xC - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0812DB08: .4byte REG_BG2CNT -_0812DB0C: .4byte gAnimBankAttacker -_0812DB10: .4byte gTasks -_0812DB14: .4byte gSharedMem + 0x17800 - thumb_func_end sub_812D7E8 - - thumb_func_start c3_80DFBE4 -c3_80DFBE4: @ 812DB18 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r4, _0812DB48 @ =gBattleAnimArgs - ldr r3, _0812DB4C @ =gSprites - ldr r2, _0812DB50 @ =gBankSpriteIds - ldr r1, _0812DB54 @ =gAnimBankAttacker - ldrb r1, [r1] - adds r1, r2 - ldrb r2, [r1] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r3 - adds r1, 0x3E - ldrb r1, [r1] - lsls r1, 29 - lsrs r1, 31 - strh r1, [r4, 0xE] - bl DestroyAnimVisualTask - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812DB48: .4byte gBattleAnimArgs -_0812DB4C: .4byte gSprites -_0812DB50: .4byte gBankSpriteIds -_0812DB54: .4byte gAnimBankAttacker - thumb_func_end c3_80DFBE4 - - thumb_func_start sub_812DB58 -sub_812DB58: @ 812DB58 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _0812DB7C @ =gAnimBankAttacker - ldrb r0, [r0] - ldr r1, _0812DB80 @ =gAnimBankTarget - ldrb r1, [r1] - movs r2, 0x1 - bl sub_8031FC4 - adds r0, r4, 0 - bl DestroyAnimVisualTask - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812DB7C: .4byte gAnimBankAttacker -_0812DB80: .4byte gAnimBankTarget - thumb_func_end sub_812DB58 - - thumb_func_start sub_812DB84 -sub_812DB84: @ 812DB84 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x10 - lsls r0, 24 - lsrs r7, r0, 24 - ldr r1, _0812DBB4 @ =gTasks - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - adds r0, r1 - movs r2, 0x8 - ldrsh r0, [r0, r2] - adds r2, r1, 0 - cmp r0, 0x4 - bls _0812DBA8 - b _0812DE80 -_0812DBA8: - lsls r0, 2 - ldr r1, _0812DBB8 @ =_0812DBBC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0812DBB4: .4byte gTasks -_0812DBB8: .4byte _0812DBBC - .align 2, 0 -_0812DBBC: - .4byte _0812DBD0 - .4byte _0812DCFC - .4byte _0812DD4C - .4byte _0812DDB6 - .4byte _0812DDEA -_0812DBD0: - ldr r1, _0812DC70 @ =REG_BLDCNT - ldr r4, _0812DC74 @ =0x00003f42 - adds r0, r4, 0 - strh r0, [r1] - adds r1, 0x2 - movs r2, 0x80 - lsls r2, 5 - adds r0, r2, 0 - strh r0, [r1] - ldr r4, _0812DC78 @ =REG_BG1CNT - ldrb r1, [r4, 0x1] - movs r0, 0x3F - ands r0, r1 - strb r0, [r4, 0x1] - ldrb r1, [r4] - movs r0, 0x4 - negs r0, r0 - ands r0, r1 - movs r1, 0x1 - orrs r0, r1 - strb r0, [r4] - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _0812DC12 - ldrb r0, [r4] - movs r1, 0xD - negs r1, r1 - ands r1, r0 - movs r0, 0x4 - orrs r1, r0 - strb r1, [r4] -_0812DC12: - mov r0, sp - bl sub_8078914 - ldr r1, [sp, 0x4] - movs r4, 0 - str r4, [sp, 0xC] - ldr r2, _0812DC7C @ =0x040000d4 - add r0, sp, 0xC - str r0, [r2] - str r1, [r2, 0x4] - ldr r0, _0812DC80 @ =0x85000400 - str r0, [r2, 0x8] - ldr r0, [r2, 0x8] - ldr r0, _0812DC84 @ =gUnknown_08D2AA98 - bl LZDecompressVram - ldr r0, _0812DC88 @ =gUnknown_08D2A9E0 - ldr r1, [sp] - bl LZDecompressVram - ldr r0, _0812DC8C @ =gUnknown_08D2AA80 - mov r1, sp - ldrb r1, [r1, 0x8] - lsls r1, 4 - movs r2, 0x20 - bl LoadCompressedPalette - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _0812DC9C - mov r0, sp - ldrb r0, [r0, 0x8] - ldr r1, [sp, 0x4] - movs r2, 0 - movs r3, 0 - bl sub_80763FC - ldr r1, _0812DC90 @ =gBattle_BG1_X - ldr r2, _0812DC94 @ =0x0000ffc8 - adds r0, r2, 0 - strh r0, [r1] - ldr r0, _0812DC98 @ =gBattle_BG1_Y - strh r4, [r0] - b _0812DCCE - .align 2, 0 -_0812DC70: .4byte REG_BLDCNT -_0812DC74: .4byte 0x00003f42 -_0812DC78: .4byte REG_BG1CNT -_0812DC7C: .4byte 0x040000d4 -_0812DC80: .4byte 0x85000400 -_0812DC84: .4byte gUnknown_08D2AA98 -_0812DC88: .4byte gUnknown_08D2A9E0 -_0812DC8C: .4byte gUnknown_08D2AA80 -_0812DC90: .4byte gBattle_BG1_X -_0812DC94: .4byte 0x0000ffc8 -_0812DC98: .4byte gBattle_BG1_Y -_0812DC9C: - ldr r0, _0812DCB4 @ =gAnimBankAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _0812DCC0 - ldr r1, _0812DCB8 @ =gBattle_BG1_X - ldr r4, _0812DCBC @ =0x0000ff79 - adds r0, r4, 0 - b _0812DCC6 - .align 2, 0 -_0812DCB4: .4byte gAnimBankAttacker -_0812DCB8: .4byte gBattle_BG1_X -_0812DCBC: .4byte 0x0000ff79 -_0812DCC0: - ldr r1, _0812DCEC @ =gBattle_BG1_X - ldr r2, _0812DCF0 @ =0x0000fff6 - adds r0, r2, 0 -_0812DCC6: - strh r0, [r1] - ldr r1, _0812DCF4 @ =gBattle_BG1_Y - movs r0, 0 - strh r0, [r1] -_0812DCCE: - ldr r0, _0812DCF8 @ =gTasks - lsls r1, r7, 2 - adds r1, r7 - lsls r1, 3 - adds r1, r0 - ldr r0, _0812DCEC @ =gBattle_BG1_X - ldrh r0, [r0] - strh r0, [r1, 0x1C] - ldr r0, _0812DCF4 @ =gBattle_BG1_Y - ldrh r0, [r0] - strh r0, [r1, 0x1E] - ldrh r0, [r1, 0x8] - adds r0, 0x1 - b _0812DDD2 - .align 2, 0 -_0812DCEC: .4byte gBattle_BG1_X -_0812DCF0: .4byte 0x0000fff6 -_0812DCF4: .4byte gBattle_BG1_Y -_0812DCF8: .4byte gTasks -_0812DCFC: - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - adds r3, r0, r2 - ldrh r0, [r3, 0x10] - adds r1, r0, 0x1 - strh r1, [r3, 0x10] - lsls r0, 16 - cmp r0, 0 - bgt _0812DD12 - b _0812DE80 -_0812DD12: - movs r0, 0 - strh r0, [r3, 0x10] - ldrh r0, [r3, 0xA] - adds r0, 0x1 - strh r0, [r3, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xC - ble _0812DD28 - movs r0, 0xC - strh r0, [r3, 0xA] -_0812DD28: - ldr r2, _0812DD48 @ =REG_BLDALPHA - ldrh r1, [r3, 0xA] - movs r0, 0x10 - subs r0, r1 - lsls r0, 8 - orrs r0, r1 - strh r0, [r2] - movs r4, 0xA - ldrsh r0, [r3, r4] - cmp r0, 0xC - beq _0812DD40 - b _0812DE80 -_0812DD40: - ldrh r0, [r3, 0x8] - adds r0, 0x1 - strh r0, [r3, 0x8] - b _0812DE80 - .align 2, 0 -_0812DD48: .4byte REG_BLDALPHA -_0812DD4C: - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - adds r3, r0, r2 - ldrh r0, [r3, 0xA] - subs r0, 0x1 - strh r0, [r3, 0xA] - lsls r0, 16 - cmp r0, 0 - bge _0812DD64 - movs r0, 0 - strh r0, [r3, 0xA] -_0812DD64: - ldr r2, _0812DDA4 @ =REG_BLDALPHA - ldrh r1, [r3, 0xA] - movs r0, 0x10 - subs r0, r1 - lsls r0, 8 - orrs r0, r1 - strh r0, [r2] - movs r1, 0xA - ldrsh r0, [r3, r1] - cmp r0, 0 - beq _0812DD7C - b _0812DE80 -_0812DD7C: - ldr r2, _0812DDA8 @ =gBattle_BG1_X - ldr r1, _0812DDAC @ =gUnknown_084025C0 - movs r4, 0xC - ldrsh r0, [r3, r4] - adds r0, r1 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - ldrh r1, [r3, 0x1C] - adds r0, r1 - strh r0, [r2] - ldrh r0, [r3, 0xC] - adds r0, 0x1 - strh r0, [r3, 0xC] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - bne _0812DDB0 - strh r0, [r3, 0x8] - b _0812DE80 - .align 2, 0 -_0812DDA4: .4byte REG_BLDALPHA -_0812DDA8: .4byte gBattle_BG1_X -_0812DDAC: .4byte gUnknown_084025C0 -_0812DDB0: - movs r0, 0x3 - strh r0, [r3, 0x8] - b _0812DE80 -_0812DDB6: - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - adds r1, r0, r2 - ldrh r0, [r1, 0xE] - adds r0, 0x1 - strh r0, [r1, 0xE] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - bne _0812DE80 - movs r0, 0 - strh r0, [r1, 0xE] - movs r0, 0x1 -_0812DDD2: - strh r0, [r1, 0x8] - movs r0, 0x40 - negs r0, r0 - bl BattleAnimAdjustPanning - adds r1, r0, 0 - lsls r1, 24 - asrs r1, 24 - movs r0, 0xE4 - bl PlaySE12WithPanning - b _0812DE80 -_0812DDEA: - mov r0, sp - bl sub_8078914 - ldr r2, [sp] - movs r3, 0x80 - lsls r3, 6 - add r5, sp, 0xC - movs r6, 0 - ldr r1, _0812DE90 @ =0x040000d4 - movs r4, 0x80 - lsls r4, 5 - mov r8, r5 - ldr r0, _0812DE94 @ =0x85000400 - mov r12, r0 - movs r0, 0x85 - lsls r0, 24 - mov r9, r0 -_0812DE0C: - str r6, [sp, 0xC] - mov r0, r8 - str r0, [r1] - str r2, [r1, 0x4] - mov r0, r12 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - adds r2, r4 - subs r3, r4 - cmp r3, r4 - bhi _0812DE0C - str r6, [sp, 0xC] - str r5, [r1] - str r2, [r1, 0x4] - lsrs r0, r3, 2 - mov r2, r9 - orrs r0, r2 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - ldr r1, [sp, 0x4] - movs r4, 0 - str r4, [sp, 0xC] - ldr r0, _0812DE90 @ =0x040000d4 - str r5, [r0] - str r1, [r0, 0x4] - ldr r1, _0812DE98 @ =0x85000200 - str r1, [r0, 0x8] - ldr r0, [r0, 0x8] - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _0812DE5A - ldr r2, _0812DE9C @ =REG_BG1CNT - ldrb r1, [r2] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - strb r0, [r2] -_0812DE5A: - ldr r2, _0812DE9C @ =REG_BG1CNT - ldrb r1, [r2] - movs r0, 0x4 - negs r0, r0 - ands r0, r1 - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2] - ldr r0, _0812DEA0 @ =gBattle_BG1_X - strh r4, [r0] - ldr r0, _0812DEA4 @ =gBattle_BG1_Y - strh r4, [r0] - ldr r0, _0812DEA8 @ =REG_BLDCNT - strh r4, [r0] - adds r0, 0x2 - strh r4, [r0] - adds r0, r7, 0 - bl DestroyAnimVisualTask -_0812DE80: - add sp, 0x10 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0812DE90: .4byte 0x040000d4 -_0812DE94: .4byte 0x85000400 -_0812DE98: .4byte 0x85000200 -_0812DE9C: .4byte REG_BG1CNT -_0812DEA0: .4byte gBattle_BG1_X -_0812DEA4: .4byte gBattle_BG1_Y -_0812DEA8: .4byte REG_BLDCNT - thumb_func_end sub_812DB84 - thumb_func_start sub_812DEAC sub_812DEAC: @ 812DEAC push {r4-r7,lr} diff --git a/include/battle.h b/include/battle.h index 7527247fe..346423e65 100644 --- a/include/battle.h +++ b/include/battle.h @@ -823,6 +823,8 @@ void sub_8032638(); void sub_8032AA8(u8, u8); void SetBankFuncToOpponentBufferRunCommand(void); void BattleStopLowHpSound(void); +void sub_8031FC4(u8, u8, bool8); +void sub_8032984(u8, u16); void SetBankFuncToLinkOpponentBufferRunCommand(void); diff --git a/include/ewram.h b/include/ewram.h index f8a0d69f9..baa64f42f 100644 --- a/include/ewram.h +++ b/include/ewram.h @@ -232,7 +232,7 @@ extern u8 gSharedMem[]; #define eRoulette ((struct Roulette *)(gSharedMem + 0x19000)) #define shared192D0 (*(struct UnknownContestStruct7 *)(gSharedMem + 0x192D0)) #define eContestAI ((struct ContestAIInfo *)(gSharedMem + 0x192E4)) -#define EWRAM_19348 (*(u16 *)(gSharedMem + 0x19348)) +#define EWRAM_19348 ((u16 *)(gSharedMem + 0x19348)) #define ewram19800 (&gSharedMem[0x19800]) #define ePokedexView4 (struct PokedexView *)(gSharedMem + 0x19800) #define ewram1A000 (&gSharedMem[0x1A000]) diff --git a/include/gba/types.h b/include/gba/types.h index 33ae7df9a..4d6c24a6c 100644 --- a/include/gba/types.h +++ b/include/gba/types.h @@ -32,7 +32,9 @@ struct BgCnt { u16 priority:2; u16 charBaseBlock:2; - u16 dummy:4; + u16 dummy:2; + u16 mosaic:1; + u16 palettes:1; u16 screenBaseBlock:5; u16 areaOverflowMode:1; u16 screenSize:2; diff --git a/include/rom_8077ABC.h b/include/rom_8077ABC.h index 9ce2d5f3e..3942397eb 100644 --- a/include/rom_8077ABC.h +++ b/include/rom_8077ABC.h @@ -10,6 +10,12 @@ struct Struct_sub_8078914 { u8 field_8; }; +struct TransformStatus +{ + u16 unknown; + u16 species; +}; + u8 GetBattlerSpriteCoord(u8, u8); u8 sub_8077E44(u8 slot, u16 species, u8 a3); u8 GetAnimBattlerSpriteId(u8 bank); @@ -108,5 +114,6 @@ void sub_8079AB8(u8 sprite, u8 sprite2); u8 sub_807A4A0(int bank, u8 sprite, int species); void sub_80794A8(struct Sprite *sprite); void sub_807A9BC(struct Sprite *sprite); +void sub_8078954(struct Struct_sub_8078914*, u8); #endif // GUARD_ROM_8077ABC_H diff --git a/src/battle/anim/dark.c b/src/battle/anim/dark.c index a7026edff..59db85342 100644 --- a/src/battle/anim/dark.c +++ b/src/battle/anim/dark.c @@ -1024,7 +1024,7 @@ void sub_80E0A4C(u8 taskId) if (IsContest()) { - species = EWRAM_19348; + species = EWRAM_19348[0]; } else { diff --git a/src/battle/battle_anim.c b/src/battle/battle_anim.c index f3b0056ac..ebfe2401d 100644 --- a/src/battle/battle_anim.c +++ b/src/battle/battle_anim.c @@ -1499,7 +1499,7 @@ void LaunchBattleAnimation(const u8 *const moveAnims[], u16 move, u8 isMoveAnim) else { for (i = 0; i < 4; i++) - gAnimSpeciesByBanks[i] = EWRAM_19348; + gAnimSpeciesByBanks[i] = EWRAM_19348[0]; } if (isMoveAnim == 0) @@ -1933,7 +1933,7 @@ void MoveBattlerSpriteToBG(u8 bank, u8 toBG_2) spriteId = gBankSpriteIds[bank]; gBattle_BG1_X = -(gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x) + 32; - if (IsContest() != 0 && IsSpeciesNotUnown(EWRAM_19348) != 0) + if (IsContest() != 0 && IsSpeciesNotUnown(EWRAM_19348[0]) != 0) gBattle_BG1_X--; gBattle_BG1_Y = -(gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y) + 32; gSprites[gBankSpriteIds[bank]].invisible = TRUE; @@ -1987,7 +1987,7 @@ static void sub_8076380(void) struct UnknownStruct2 s; u16 *ptr; - if (IsSpeciesNotUnown(EWRAM_19348)) + if (IsSpeciesNotUnown(EWRAM_19348[0])) { sub_8078914(&s); ptr = s.unk4; diff --git a/src/battle/battle_anim_812C144.c b/src/battle/battle_anim_812C144.c index 601e3c6df..cef1fb97c 100644 --- a/src/battle/battle_anim_812C144.c +++ b/src/battle/battle_anim_812C144.c @@ -1,12 +1,17 @@ #include "global.h" #include "battle.h" #include "battle_anim.h" +#include "contest.h" +#include "data2.h" +#include "decompress.h" +#include "ewram.h" #include "palette.h" #include "random.h" #include "rom_8077ABC.h" #include "scanline_effect.h" #include "sound.h" #include "trig.h" +#include "constants/songs.h" extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; @@ -18,15 +23,25 @@ extern u16 gBattle_WIN0V; extern u16 gBattle_WIN1H; extern u16 gBattle_WIN1V; extern u16 gBattle_BG1_X; +extern u16 gBattle_BG1_Y; extern u16 gBattle_BG2_X; +extern u16 gBattle_BG2_Y; extern const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7220; extern const struct SpriteTemplate gSpriteTemplate_8402500; +extern const union AffineAnimCmd *const gSpriteAffineAnimTable_81E7C18[]; +extern const union AffineAnimCmd *const gSpriteAffineAnimTable_81E7BEC[]; extern const union AffineAnimCmd gUnknown_08402400[]; extern const union AffineAnimCmd gUnknown_084024B0[]; extern const union AffineAnimCmd gUnknown_08402518[]; extern const union AffineAnimCmd gUnknown_08402540[]; extern const union AffineAnimCmd gUnknown_08402590[]; +extern const u32 gUnknown_08D2AA98[]; +extern const u32 gUnknown_08D2A9E0[]; +extern const u16 gUnknown_08D2AA80[]; +extern const s8 gUnknown_084025C0[]; +extern u8 gBattleMonForms[]; +extern u8 gBankSpriteIds[]; extern u8 sub_8046234(s16 x, s16 y, u8 a3); @@ -1124,3 +1139,226 @@ void sub_812D790(u8 taskId) DestroyAnimVisualTask(taskId); } } + +void sub_812D7E8(u8 taskId) +{ + int i, j; + u8 position; + struct Struct_sub_8078914 subStruct; + u8 *dest; + u8 *src; + u16 *field_4; + u16 *ptr; + u16 stretch; + + switch (gTasks[taskId].data[0]) + { + case 0: + REG_MOSAIC = 0; + if (GetBattlerPosition_permutated(gAnimBankAttacker) == 1) + REG_BG1CNT_BITFIELD.mosaic = 1; + else + REG_BG2CNT_BITFIELD.mosaic = 1; + + gTasks[taskId].data[10] = gBattleAnimArgs[0]; + gTasks[taskId].data[0]++; + break; + case 1: + if (gTasks[taskId].data[2]++ > 1) + { + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[1]++; + stretch = gTasks[taskId].data[1]; + REG_MOSAIC = (stretch << 4) | stretch; + if (stretch == 15) + gTasks[taskId].data[0]++; + } + break; + case 2: + sub_8031FC4(gAnimBankAttacker, gAnimBankTarget, gTasks[taskId].data[10]); + sub_8078954(&subStruct, gAnimBankAttacker); + + if (IsContest()) + position = 0; + else + position = GetBattlerPosition(gAnimBankAttacker); + + dest = gUnknown_081FAF4C[position] + (gBattleMonForms[gAnimBankAttacker] << 11); + src = subStruct.field_0; + DmaCopy32(3, dest, src, 0x800); + + if (IsContest()) + { + if (IsSpeciesNotUnown(EWRAM_19348[0]) != IsSpeciesNotUnown(EWRAM_19348[1])) + { + field_4 = (u16 *)subStruct.field_4; + for (i = 0; i < 8; i++) + { + for (j = 0; j < 4; j++) + { + u16 temp = field_4[j + i * 0x20]; + field_4[j + i * 0x20] = field_4[(7 - j) + i * 0x20]; + field_4[(7 - j) + i * 0x20] = temp; + } + } + + for (i = 0; i < 8; i++) + { + for (j = 0; j < 8; j++) + { + field_4[j + i * 0x20] ^= 0x400; + } + } + } + + ptr = EWRAM_19348; + if (IsSpeciesNotUnown(ptr[1])) + gSprites[gBankSpriteIds[gAnimBankAttacker]].affineAnims = gSpriteAffineAnimTable_81E7C18; + else + gSprites[gBankSpriteIds[gAnimBankAttacker]].affineAnims = gSpriteAffineAnimTable_81E7BEC; + + StartSpriteAffineAnim(&gSprites[gBankSpriteIds[gAnimBankAttacker]], 0); + } + + gTasks[taskId].data[0]++; + break; + case 3: + if (gTasks[taskId].data[2]++ > 1) + { + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[1]--; + stretch = gTasks[taskId].data[1]; + REG_MOSAIC = (stretch << 4) | stretch; + + if (stretch == 0) + gTasks[taskId].data[0]++; + } + break; + case 4: + REG_MOSAIC = 0; + if (GetBattlerPosition_permutated(gAnimBankAttacker) == 1) + REG_BG1CNT_BITFIELD.mosaic = 0; + else + REG_BG2CNT_BITFIELD.mosaic = 0; + + if (!IsContest()) + { + if (GetBattlerSide(gAnimBankAttacker) == B_SIDE_OPPONENT) + { + if (gTasks[taskId].data[10] == 0) + sub_8032984(gAnimBankAttacker, eTransformStatuses[gAnimBankAttacker].species); + } + } + + DestroyAnimVisualTask(taskId); + break; + } +} + +void c3_80DFBE4(u8 taskId) +{ + gBattleAnimArgs[7] = gSprites[gBankSpriteIds[gAnimBankAttacker]].invisible; + DestroyAnimVisualTask(taskId); +} + +void sub_812DB58(u8 taskId) +{ + sub_8031FC4(gAnimBankAttacker, gAnimBankTarget, 1); + DestroyAnimVisualTask(taskId); +} + +void sub_812DB84(u8 taskId) +{ + struct Struct_sub_8078914 subStruct; + + switch (gTasks[taskId].data[0]) + { + case 0: + REG_BLDCNT = BLDCNT_TGT2_BD | BLDCNT_TGT2_OBJ | BLDCNT_TGT2_BG0 | BLDCNT_TGT2_BG1 + | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG1; + REG_BLDALPHA = 0x1000; + REG_BG1CNT_BITFIELD.screenSize = 0; + REG_BG1CNT_BITFIELD.priority = 1; + if (!IsContest()) + REG_BG1CNT_BITFIELD.charBaseBlock = 1; + + sub_8078914(&subStruct); + DmaClear32(3, subStruct.field_4, 0x1000); + LZDecompressVram(gUnknown_08D2AA98, subStruct.field_4); + LZDecompressVram(gUnknown_08D2A9E0, subStruct.field_0); + LoadCompressedPalette(gUnknown_08D2AA80, subStruct.field_8 * 16, 32); + if (IsContest()) + { + sub_80763FC(subStruct.field_8, (u16 *)subStruct.field_4, 0, 0); + gBattle_BG1_X = -56; + gBattle_BG1_Y = 0; + } + else + { + if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER) + gBattle_BG1_X = -135; + else + gBattle_BG1_X = -10; + + gBattle_BG1_Y = 0; + } + + gTasks[taskId].data[10] = gBattle_BG1_X; + gTasks[taskId].data[11] = gBattle_BG1_Y; + + gTasks[taskId].data[0]++; + PlaySE12WithPanning(SE_W234, BattleAnimAdjustPanning(-64)); + break; + case 1: + if (gTasks[taskId].data[4]++ > 0) + { + gTasks[taskId].data[4] = 0; + if (++gTasks[taskId].data[1] > 12) + gTasks[taskId].data[1] = 12; + + REG_BLDALPHA = ((16 - gTasks[taskId].data[1]) << 8) | gTasks[taskId].data[1]; + + if (gTasks[taskId].data[1] == 12) + gTasks[taskId].data[0]++; + } + break; + case 2: + if (--gTasks[taskId].data[1] < 0) + gTasks[taskId].data[1] = 0; + + REG_BLDALPHA = ((16 - gTasks[taskId].data[1]) << 8) | gTasks[taskId].data[1]; + + if (gTasks[taskId].data[1] == 0) + { + gBattle_BG1_X = gUnknown_084025C0[gTasks[taskId].data[2]] + gTasks[taskId].data[10]; + if (++gTasks[taskId].data[2] == 4) + gTasks[taskId].data[0] = 4; + else + gTasks[taskId].data[0] = 3; + } + break; + case 3: + if (++gTasks[taskId].data[3] == 4) + { + gTasks[taskId].data[3] = 0; + gTasks[taskId].data[0] = 1; + PlaySE12WithPanning(SE_W234, BattleAnimAdjustPanning(-64)); + } + break; + case 4: + sub_8078914(&subStruct); + DmaFill32Large(3, 0, subStruct.field_0, 0x2000, 0x1000); + DmaClear32(3, subStruct.field_4, 0x800); + + if (!IsContest()) + REG_BG1CNT_BITFIELD.charBaseBlock = 0; + + REG_BG1CNT_BITFIELD.priority = 1; + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + DestroyAnimVisualTask(taskId); + break; + } +} diff --git a/src/rom_8077ABC.c b/src/rom_8077ABC.c index 9c4cc2217..00ce3d8df 100644 --- a/src/rom_8077ABC.c +++ b/src/rom_8077ABC.c @@ -33,12 +33,6 @@ #define gTransformPersonalities gTransformedPersonalities #define gBattleMonSprites gBankSpriteIds -struct TransformStatus -{ - u16 unknown; - u16 species; -}; - struct Struct_gUnknown_0837F578 { u8 field_0; @@ -890,7 +884,7 @@ void sub_8078914(struct Struct_sub_8078914 *unk) } } -void sub_8078954(struct Struct_sub_8078914 *unk) +void sub_8078954(struct Struct_sub_8078914 *unk, u8 b) { if (IsContest()) { |