diff options
author | YamaArashi <YamaArashi@users.noreply.github.com> | 2017-04-21 00:28:33 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-04-21 00:28:33 -0700 |
commit | aec7b25c1ad0ef646f1430bc8b68d3adb1106edd (patch) | |
tree | 342fe9100a4498c0c89f73c75ffc0d8cd301430a | |
parent | a5f5ee58244d776a853753f907dfeb6f3ea59923 (diff) | |
parent | bfcf329719ab18bf0cb7d2765775a45250747cd1 (diff) |
Merge pull request #247 from yenatch/master
Decompile rom_8077ABC.s
-rw-r--r-- | asm/rom_8077ABC.s | 6355 | ||||
-rw-r--r-- | data/rom_8077ABC.s | 45 | ||||
-rw-r--r-- | ld_script.txt | 4 | ||||
-rw-r--r-- | shared_syms.txt | 5 | ||||
-rw-r--r-- | src/rom_8077ABC.c | 2112 | ||||
-rw-r--r-- | sym_ewram.txt | 5 |
6 files changed, 2120 insertions, 6406 deletions
diff --git a/asm/rom_8077ABC.s b/asm/rom_8077ABC.s deleted file mode 100644 index 58bfbd216..000000000 --- a/asm/rom_8077ABC.s +++ /dev/null @@ -1,6355 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_8077ABC -sub_8077ABC: @ 8077ABC - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r1, 24 - lsrs r4, r1, 24 - bl sub_8076BE0 - lsls r0, 24 - cmp r0, 0 - beq _08077ADA - cmp r4, 0x3 - bne _08077ADA - cmp r5, 0x3 - bne _08077ADA - movs r4, 0x1 -_08077ADA: - cmp r4, 0x4 - bhi _08077B50 - lsls r0, r4, 2 - ldr r1, _08077AE8 @ =_08077AEC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08077AE8: .4byte _08077AEC - .align 2, 0 -_08077AEC: - .4byte _08077B00 - .4byte _08077B28 - .4byte _08077B00 - .4byte _08077B50 - .4byte _08077B50 -_08077B00: - ldr r4, _08077B20 @ =gUnknown_0837F578 - adds r0, r5, 0 - bl battle_get_per_side_status - lsls r0, 24 - lsrs r0, 22 - ldr r1, _08077B24 @ =gBattleTypeFlags - ldrh r2, [r1] - movs r1, 0x1 - ands r1, r2 - lsls r1, 4 - adds r0, r1 - adds r0, r4 - ldrb r0, [r0] - b _08077BF4 - .align 2, 0 -_08077B20: .4byte gUnknown_0837F578 -_08077B24: .4byte gBattleTypeFlags -_08077B28: - ldr r4, _08077B48 @ =gUnknown_0837F578 - adds r0, r5, 0 - bl battle_get_per_side_status - lsls r0, 24 - lsrs r0, 22 - ldr r1, _08077B4C @ =gBattleTypeFlags - ldrh r2, [r1] - movs r1, 0x1 - ands r1, r2 - lsls r1, 4 - adds r0, r1 - adds r0, r4 - ldrb r0, [r0, 0x1] - b _08077BF4 - .align 2, 0 -_08077B48: .4byte gUnknown_0837F578 -_08077B4C: .4byte gBattleTypeFlags -_08077B50: - bl sub_8076BE0 - lsls r0, 24 - cmp r0, 0 - beq _08077B74 - ldr r2, _08077B6C @ =0x02019348 - ldrb r1, [r2, 0x4] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08077B70 - ldrh r1, [r2, 0x2] - b _08077BDE - .align 2, 0 -_08077B6C: .4byte 0x02019348 -_08077B70: - ldrh r1, [r2] - b _08077BDE -_08077B74: - adds r0, r5, 0 - bl battle_side_get_owner - lsls r0, 24 - cmp r0, 0 - beq _08077BA8 - lsls r0, r5, 2 - ldr r1, _08077B9C @ =0x02017800 - adds r1, r0, r1 - ldrh r0, [r1, 0x2] - cmp r0, 0 - bne _08077BDC - ldr r1, _08077BA0 @ =gUnknown_02024A6A - lsls r0, r5, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08077BA4 @ =gEnemyParty - b _08077BC2 - .align 2, 0 -_08077B9C: .4byte 0x02017800 -_08077BA0: .4byte gUnknown_02024A6A -_08077BA4: .4byte gEnemyParty -_08077BA8: - lsls r0, r5, 2 - ldr r1, _08077BD0 @ =0x02017800 - adds r1, r0, r1 - ldrh r0, [r1, 0x2] - cmp r0, 0 - bne _08077BDC - ldr r1, _08077BD4 @ =gUnknown_02024A6A - lsls r0, r5, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08077BD8 @ =gPlayerParty -_08077BC2: - adds r0, r1 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r1, r0, 16 - b _08077BDE - .align 2, 0 -_08077BD0: .4byte 0x02017800 -_08077BD4: .4byte gUnknown_02024A6A -_08077BD8: .4byte gPlayerParty -_08077BDC: - ldrh r1, [r1, 0x2] -_08077BDE: - cmp r4, 0x3 - bne _08077BE8 - adds r0, r5, 0 - movs r2, 0x1 - b _08077BEC -_08077BE8: - adds r0, r5, 0 - movs r2, 0 -_08077BEC: - bl sub_8077E44 - lsls r0, 24 - lsrs r0, 24 -_08077BF4: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8077ABC - - thumb_func_start sub_8077BFC -sub_8077BFC: @ 8077BFC - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 16 - lsrs r5, r1, 16 - adds r0, r4, 0 - bl battle_side_get_owner - lsls r0, 24 - cmp r0, 0 - beq _08077C1C - bl sub_8076BE0 - lsls r0, 24 - cmp r0, 0 - beq _08077D04 -_08077C1C: - cmp r5, 0xC9 - bne _08077CCC - bl sub_8076BE0 - lsls r0, 24 - cmp r0, 0 - beq _08077C44 - ldr r2, _08077C3C @ =0x02019348 - ldrb r1, [r2, 0x4] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08077C40 - ldr r2, [r2, 0x10] - b _08077C7E - .align 2, 0 -_08077C3C: .4byte 0x02019348 -_08077C40: - ldr r2, [r2, 0x8] - b _08077C7E -_08077C44: - lsls r1, r4, 2 - ldr r0, _08077C6C @ =0x02017800 - adds r0, r1, r0 - ldrh r0, [r0, 0x2] - cmp r0, 0 - bne _08077C78 - ldr r1, _08077C70 @ =gUnknown_02024A6A - lsls r0, r4, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08077C74 @ =gPlayerParty - adds r0, r1 - movs r1, 0 - bl GetMonData - adds r2, r0, 0 - b _08077C7E - .align 2, 0 -_08077C6C: .4byte 0x02017800 -_08077C70: .4byte gUnknown_02024A6A -_08077C74: .4byte gPlayerParty -_08077C78: - ldr r0, _08077CB4 @ =gUnknown_02024E70 - adds r0, r1, r0 - ldr r2, [r0] -_08077C7E: - movs r0, 0xC0 - lsls r0, 18 - ands r0, r2 - lsrs r0, 18 - movs r1, 0xC0 - lsls r1, 10 - ands r1, r2 - lsrs r1, 12 - orrs r0, r1 - movs r1, 0xC0 - lsls r1, 2 - ands r1, r2 - lsrs r1, 6 - orrs r0, r1 - movs r1, 0x3 - ands r1, r2 - orrs r0, r1 - movs r1, 0x1C - bl __umodsi3 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0 - bne _08077CB8 - adds r0, r5, 0 - b _08077CC2 - .align 2, 0 -_08077CB4: .4byte gUnknown_02024E70 -_08077CB8: - movs r1, 0xCE - lsls r1, 1 - adds r0, r1 - lsls r0, 16 - lsrs r0, 16 -_08077CC2: - ldr r1, _08077CC8 @ =gMonBackPicCoords - lsls r0, 2 - b _08077DC8 - .align 2, 0 -_08077CC8: .4byte gMonBackPicCoords -_08077CCC: - ldr r0, _08077CE0 @ =SPECIES_CASTFORM - cmp r5, r0 - bne _08077CEC - ldr r0, _08077CE4 @ =gUnknown_0837F5AC - ldr r1, _08077CE8 @ =gUnknown_02024E84 - adds r1, r4, r1 - ldrb r1, [r1] - adds r1, r0 - ldrb r0, [r1] - b _08077DCC - .align 2, 0 -_08077CE0: .4byte SPECIES_CASTFORM -_08077CE4: .4byte gUnknown_0837F5AC -_08077CE8: .4byte gUnknown_02024E84 -_08077CEC: - movs r0, 0xCE - lsls r0, 1 - cmp r5, r0 - bls _08077CFC - ldr r0, _08077CF8 @ =gMonBackPicCoords - b _08077DCA - .align 2, 0 -_08077CF8: .4byte gMonBackPicCoords -_08077CFC: - ldr r1, _08077D00 @ =gMonBackPicCoords - b _08077DC6 - .align 2, 0 -_08077D00: .4byte gMonBackPicCoords -_08077D04: - cmp r5, 0xC9 - bne _08077D90 - lsls r1, r4, 2 - ldr r0, _08077D30 @ =0x02017800 - adds r0, r1, r0 - ldrh r0, [r0, 0x2] - cmp r0, 0 - bne _08077D3C - ldr r1, _08077D34 @ =gUnknown_02024A6A - lsls r0, r4, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08077D38 @ =gEnemyParty - adds r0, r1 - movs r1, 0 - bl GetMonData - adds r2, r0, 0 - b _08077D42 - .align 2, 0 -_08077D30: .4byte 0x02017800 -_08077D34: .4byte gUnknown_02024A6A -_08077D38: .4byte gEnemyParty -_08077D3C: - ldr r0, _08077D78 @ =gUnknown_02024E70 - adds r0, r1, r0 - ldr r2, [r0] -_08077D42: - movs r0, 0xC0 - lsls r0, 18 - ands r0, r2 - lsrs r0, 18 - movs r1, 0xC0 - lsls r1, 10 - ands r1, r2 - lsrs r1, 12 - orrs r0, r1 - movs r1, 0xC0 - lsls r1, 2 - ands r1, r2 - lsrs r1, 6 - orrs r0, r1 - movs r1, 0x3 - ands r1, r2 - orrs r0, r1 - movs r1, 0x1C - bl __umodsi3 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0 - bne _08077D7C - adds r0, r5, 0 - b _08077D86 - .align 2, 0 -_08077D78: .4byte gUnknown_02024E70 -_08077D7C: - movs r1, 0xCE - lsls r1, 1 - adds r0, r1 - lsls r0, 16 - lsrs r0, 16 -_08077D86: - ldr r1, _08077D8C @ =gMonFrontPicCoords - lsls r0, 2 - b _08077DC8 - .align 2, 0 -_08077D8C: .4byte gMonFrontPicCoords -_08077D90: - ldr r0, _08077DA8 @ =SPECIES_CASTFORM - cmp r5, r0 - bne _08077DB4 - ldr r0, _08077DAC @ =gUnknownCastformCoords_0837F598 - ldr r1, _08077DB0 @ =gUnknown_02024E84 - adds r1, r4, r1 - ldrb r1, [r1] - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1, 0x1] - b _08077DCC - .align 2, 0 -_08077DA8: .4byte SPECIES_CASTFORM -_08077DAC: .4byte gUnknownCastformCoords_0837F598 -_08077DB0: .4byte gUnknown_02024E84 -_08077DB4: - movs r0, 0xCE - lsls r0, 1 - cmp r5, r0 - bls _08077DC4 - ldr r0, _08077DC0 @ =gMonFrontPicCoords - b _08077DCA - .align 2, 0 -_08077DC0: .4byte gMonFrontPicCoords -_08077DC4: - ldr r1, _08077DD4 @ =gMonFrontPicCoords -_08077DC6: - lsls r0, r5, 2 -_08077DC8: - adds r0, r1 -_08077DCA: - ldrb r0, [r0, 0x1] -_08077DCC: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08077DD4: .4byte gMonFrontPicCoords - thumb_func_end sub_8077BFC - - thumb_func_start sub_8077DD8 -sub_8077DD8: @ 8077DD8 - push {r4-r7,lr} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r1, 16 - lsrs r4, r1, 16 - adds r7, r4, 0 - movs r5, 0 - adds r0, r6, 0 - bl battle_side_get_owner - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08077E36 - bl sub_8076BE0 - lsls r0, 24 - cmp r0, 0 - bne _08077E36 - ldr r0, _08077E14 @ =SPECIES_CASTFORM - cmp r4, r0 @ check if the given pokemon species is Castform - bne _08077E20 - ldr r0, _08077E18 @ =gUnknownCastformData_0837F5A8 - ldr r1, _08077E1C @ =gUnknown_02024E84 - adds r1, r6, r1 - ldrb r1, [r1] - adds r1, r0 - ldrb r5, [r1] - b _08077E36 - .align 2, 0 -_08077E14: .4byte SPECIES_CASTFORM -_08077E18: .4byte gUnknownCastformData_0837F5A8 -_08077E1C: .4byte gUnknown_02024E84 -_08077E20: - movs r0, 0xCE - lsls r0, 1 - cmp r4, r0 - bls _08077E30 - ldr r0, _08077E2C @ =gEnemyMonElevation - b _08077E34 - .align 2, 0 -_08077E2C: .4byte gEnemyMonElevation -_08077E30: - ldr r0, _08077E40 @ =gEnemyMonElevation - adds r0, r7, r0 -_08077E34: - ldrb r5, [r0] -_08077E36: - adds r0, r5, 0 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08077E40: .4byte gEnemyMonElevation - thumb_func_end sub_8077DD8 - - thumb_func_start sub_8077E44 -sub_8077E44: @ 8077E44 - push {r4-r7,lr} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r1, 16 - lsrs r5, r1, 16 - lsls r2, 24 - lsrs r7, r2, 24 - adds r0, r6, 0 - bl battle_side_get_owner - lsls r0, 24 - cmp r0, 0 - beq _08077E68 - bl sub_8076BE0 - lsls r0, 24 - cmp r0, 0 - beq _08077E76 -_08077E68: - adds r0, r6, 0 - adds r1, r5, 0 - bl sub_8077BFC - lsls r0, 24 - lsrs r4, r0, 24 - b _08077E94 -_08077E76: - adds r0, r6, 0 - adds r1, r5, 0 - bl sub_8077BFC - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r6, 0 - adds r1, r5, 0 - bl sub_8077DD8 - lsls r0, 24 - lsrs r0, 24 - subs r0, r4, r0 - lsls r0, 16 - lsrs r4, r0, 16 -_08077E94: - adds r0, r6, 0 - bl battle_get_per_side_status - ldr r3, _08077EDC @ =gUnknown_0837F578 - lsls r0, 24 - lsrs r0, 22 - ldr r1, _08077EE0 @ =gBattleTypeFlags - ldrh r2, [r1] - movs r1, 0x1 - ands r1, r2 - lsls r1, 4 - adds r0, r1 - adds r0, r3 - ldrb r0, [r0, 0x1] - adds r0, r4 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r7, 0 - beq _08077ED4 - adds r0, r6, 0 - bl battle_side_get_owner - lsls r0, 24 - cmp r0, 0 - bne _08077ECE - adds r0, r4, 0 - adds r0, 0x8 - lsls r0, 24 - lsrs r4, r0, 24 -_08077ECE: - cmp r4, 0x68 - bls _08077ED4 - movs r4, 0x68 -_08077ED4: - adds r0, r4, 0 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08077EDC: .4byte gUnknown_0837F578 -_08077EE0: .4byte gBattleTypeFlags - thumb_func_end sub_8077E44 - - thumb_func_start sub_8077EE4 -sub_8077EE4: @ 8077EE4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 24 - lsrs r5, r1, 24 - movs r0, 0xFD - lsls r0, 24 - adds r1, r0 - lsrs r1, 24 - cmp r1, 0x1 - bhi _08077F56 - bl sub_8076BE0 - lsls r0, 24 - cmp r0, 0 - beq _08077F1C - ldr r2, _08077F14 @ =0x02019348 - ldrb r1, [r2, 0x4] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08077F18 - ldrh r1, [r2, 0x2] - b _08077F3E - .align 2, 0 -_08077F14: .4byte 0x02019348 -_08077F18: - ldrh r1, [r2] - b _08077F3E -_08077F1C: - lsls r0, r4, 2 - ldr r1, _08077F34 @ =0x02017800 - adds r1, r0, r1 - ldrh r0, [r1, 0x2] - cmp r0, 0 - bne _08077F3C - ldr r1, _08077F38 @ =gUnknown_0202F7CA - lsls r0, r4, 1 - adds r0, r1 - ldrh r1, [r0] - b _08077F3E - .align 2, 0 -_08077F34: .4byte 0x02017800 -_08077F38: .4byte gUnknown_0202F7CA -_08077F3C: - ldrh r1, [r1, 0x2] -_08077F3E: - cmp r5, 0x3 - bne _08077F4C - adds r0, r4, 0 - movs r2, 0x1 - bl sub_8077E44 - b _08077F5E -_08077F4C: - adds r0, r4, 0 - movs r2, 0 - bl sub_8077E44 - b _08077F5E -_08077F56: - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_8077ABC -_08077F5E: - lsls r0, 24 - lsrs r0, 24 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8077EE4 - - thumb_func_start sub_8077F68 -sub_8077F68: @ 8077F68 - push {lr} - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x4 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - thumb_func_end sub_8077F68 - - thumb_func_start sub_8077F7C -sub_8077F7C: @ 8077F7C - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl battle_side_get_owner - lsls r0, 24 - cmp r0, 0 - beq _08077FA0 - adds r0, r4, 0 - movs r1, 0x1 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 8 - movs r1, 0x80 - lsls r1, 13 - b _08077FB0 -_08077FA0: - adds r0, r4, 0 - movs r1, 0x1 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 8 - movs r1, 0x88 - lsls r1, 13 -_08077FB0: - adds r0, r1 - lsrs r0, 16 - lsls r0, 24 - lsrs r0, 24 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8077F7C - - thumb_func_start sub_8077FC0 -sub_8077FC0: @ 8077FC0 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - adds r0, r5, 0 - movs r1, 0x1 - bl sub_8077ABC - lsls r0, 24 - lsrs r6, r0, 24 - bl sub_8076BE0 - lsls r0, 24 - cmp r0, 0 - bne _08078060 - adds r0, r5, 0 - bl battle_side_get_owner - lsls r0, 24 - cmp r0, 0 - beq _08078010 - lsls r0, r5, 2 - ldr r1, _08078004 @ =0x02017800 - adds r1, r0, r1 - ldrh r0, [r1, 0x2] - cmp r0, 0 - bne _08078044 - ldr r1, _08078008 @ =gUnknown_02024A6A - lsls r0, r5, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _0807800C @ =gEnemyParty - b _0807802A - .align 2, 0 -_08078004: .4byte 0x02017800 -_08078008: .4byte gUnknown_02024A6A -_0807800C: .4byte gEnemyParty -_08078010: - lsls r0, r5, 2 - ldr r1, _08078038 @ =0x02017800 - adds r1, r0, r1 - ldrh r0, [r1, 0x2] - cmp r0, 0 - bne _08078044 - ldr r1, _0807803C @ =gUnknown_02024A6A - lsls r0, r5, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08078040 @ =gPlayerParty -_0807802A: - adds r0, r1 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r4, r0, 16 - b _08078046 - .align 2, 0 -_08078038: .4byte 0x02017800 -_0807803C: .4byte gUnknown_02024A6A -_08078040: .4byte gPlayerParty -_08078044: - ldrh r4, [r1, 0x2] -_08078046: - adds r0, r5, 0 - bl battle_side_get_owner - lsls r0, 24 - cmp r0, 0 - beq _08078060 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_8077DD8 - subs r0, r6, r0 - lsls r0, 24 - lsrs r6, r0, 24 -_08078060: - adds r0, r6, 0 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8077FC0 - - thumb_func_start obj_id_for_side_relative_to_move -obj_id_for_side_relative_to_move: @ 8078068 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - adds r1, r0, 0 - cmp r0, 0 - bne _08078090 - ldr r4, _08078088 @ =gUnknown_0202F7C8 - ldrb r0, [r4] - bl sub_8078874 - lsls r0, 24 - cmp r0, 0 - beq _080780DE - ldr r1, _0807808C @ =gUnknown_02024BE0 - ldrb r0, [r4] - b _080780EE - .align 2, 0 -_08078088: .4byte gUnknown_0202F7C8 -_0807808C: .4byte gUnknown_02024BE0 -_08078090: - cmp r0, 0x1 - bne _080780B0 - ldr r4, _080780A8 @ =gUnknown_0202F7C9 - ldrb r0, [r4] - bl sub_8078874 - lsls r0, 24 - cmp r0, 0 - beq _080780DE - ldr r1, _080780AC @ =gUnknown_02024BE0 - ldrb r0, [r4] - b _080780EE - .align 2, 0 -_080780A8: .4byte gUnknown_0202F7C9 -_080780AC: .4byte gUnknown_02024BE0 -_080780B0: - cmp r1, 0x2 - bne _080780CC - ldr r5, _080780C8 @ =gUnknown_0202F7C8 - ldrb r0, [r5] - movs r4, 0x2 - eors r0, r4 - bl b_side_obj__get_some_boolean - lsls r0, 24 - cmp r0, 0 - beq _080780DE - b _080780E8 - .align 2, 0 -_080780C8: .4byte gUnknown_0202F7C8 -_080780CC: - ldr r5, _080780E4 @ =gUnknown_0202F7C9 - ldrb r0, [r5] - movs r4, 0x2 - eors r0, r4 - bl b_side_obj__get_some_boolean - lsls r0, 24 - cmp r0, 0 - bne _080780E8 -_080780DE: - movs r0, 0xFF - b _080780F2 - .align 2, 0 -_080780E4: .4byte gUnknown_0202F7C9 -_080780E8: - ldr r1, _080780F8 @ =gUnknown_02024BE0 - ldrb r0, [r5] - eors r0, r4 -_080780EE: - adds r0, r1 - ldrb r0, [r0] -_080780F2: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080780F8: .4byte gUnknown_02024BE0 - thumb_func_end obj_id_for_side_relative_to_move - - thumb_func_start oamt_set_x3A_32 -oamt_set_x3A_32: @ 80780FC - strh r1, [r0, 0x3A] - lsrs r1, 16 - strh r1, [r0, 0x3C] - bx lr - thumb_func_end oamt_set_x3A_32 - - thumb_func_start sub_8078104 -sub_8078104: @ 8078104 - ldrh r2, [r0, 0x3A] - movs r3, 0x3C - ldrsh r1, [r0, r3] - lsls r1, 16 - orrs r2, r1 - str r2, [r0, 0x1C] - bx lr - thumb_func_end sub_8078104 - - thumb_func_start sub_8078114 -sub_8078114: @ 8078114 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x34 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _08078168 - movs r2, 0x2E - ldrsh r0, [r4, r2] - movs r2, 0x30 - ldrsh r1, [r4, r2] - bl Sin - strh r0, [r4, 0x24] - movs r1, 0x2E - ldrsh r0, [r4, r1] - movs r2, 0x30 - ldrsh r1, [r4, r2] - bl Cos - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x32] - ldrh r2, [r4, 0x2E] - adds r1, r0, r2 - strh r1, [r4, 0x2E] - lsls r0, r1, 16 - asrs r0, 16 - cmp r0, 0xFF - ble _08078154 - ldr r2, _08078150 @ =0xffffff00 - b _0807815C - .align 2, 0 -_08078150: .4byte 0xffffff00 -_08078154: - cmp r0, 0 - bge _08078160 - movs r2, 0x80 - lsls r2, 1 -_0807815C: - adds r0, r1, r2 - strh r0, [r4, 0x2E] -_08078160: - ldrh r0, [r4, 0x34] - subs r0, 0x1 - strh r0, [r4, 0x34] - b _0807816E -_08078168: - adds r0, r4, 0 - bl sub_8078104 -_0807816E: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8078114 - - thumb_func_start sub_8078174 -sub_8078174: @ 8078174 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x34 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080781E4 - movs r2, 0x2E - ldrsh r0, [r4, r2] - ldrh r1, [r4, 0x38] - lsls r1, 16 - asrs r1, 24 - ldrh r2, [r4, 0x30] - adds r1, r2 - lsls r1, 16 - asrs r1, 16 - bl Sin - strh r0, [r4, 0x24] - movs r1, 0x2E - ldrsh r0, [r4, r1] - ldrh r1, [r4, 0x38] - lsls r1, 16 - asrs r1, 24 - ldrh r2, [r4, 0x30] - adds r1, r2 - lsls r1, 16 - asrs r1, 16 - bl Cos - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x32] - ldrh r2, [r4, 0x2E] - adds r1, r0, r2 - strh r1, [r4, 0x2E] - ldrh r0, [r4, 0x36] - ldrh r2, [r4, 0x38] - adds r0, r2 - strh r0, [r4, 0x38] - lsls r0, r1, 16 - asrs r0, 16 - cmp r0, 0xFF - ble _080781D0 - ldr r2, _080781CC @ =0xffffff00 - b _080781D8 - .align 2, 0 -_080781CC: .4byte 0xffffff00 -_080781D0: - cmp r0, 0 - bge _080781DC - movs r2, 0x80 - lsls r2, 1 -_080781D8: - adds r0, r1, r2 - strh r0, [r4, 0x2E] -_080781DC: - ldrh r0, [r4, 0x34] - subs r0, 0x1 - strh r0, [r4, 0x34] - b _080781EA -_080781E4: - adds r0, r4, 0 - bl sub_8078104 -_080781EA: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8078174 - - thumb_func_start unref_sub_80781F0 -unref_sub_80781F0: @ 80781F0 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x34 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _0807826C - movs r2, 0x2E - ldrsh r0, [r4, r2] - movs r2, 0x30 - ldrsh r1, [r4, r2] - bl Sin - strh r0, [r4, 0x24] - movs r1, 0x36 - ldrsh r0, [r4, r1] - movs r2, 0x30 - ldrsh r1, [r4, r2] - bl Cos - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x32] - ldrh r2, [r4, 0x2E] - adds r1, r0, r2 - strh r1, [r4, 0x2E] - ldrh r0, [r4, 0x38] - ldrh r2, [r4, 0x36] - adds r0, r2 - strh r0, [r4, 0x36] - lsls r0, r1, 16 - asrs r0, 16 - cmp r0, 0xFF - ble _08078238 - ldr r2, _08078234 @ =0xffffff00 - b _08078240 - .align 2, 0 -_08078234: .4byte 0xffffff00 -_08078238: - cmp r0, 0 - bge _08078244 - movs r2, 0x80 - lsls r2, 1 -_08078240: - adds r0, r1, r2 - strh r0, [r4, 0x2E] -_08078244: - ldrh r1, [r4, 0x36] - movs r2, 0x36 - ldrsh r0, [r4, r2] - cmp r0, 0xFF - ble _08078258 - ldr r2, _08078254 @ =0xffffff00 - b _08078260 - .align 2, 0 -_08078254: .4byte 0xffffff00 -_08078258: - cmp r0, 0 - bge _08078264 - movs r2, 0x80 - lsls r2, 1 -_08078260: - adds r0, r1, r2 - strh r0, [r4, 0x36] -_08078264: - ldrh r0, [r4, 0x34] - subs r0, 0x1 - strh r0, [r4, 0x34] - b _08078272 -_0807826C: - adds r0, r4, 0 - bl sub_8078104 -_08078272: - pop {r4} - pop {r0} - bx r0 - thumb_func_end unref_sub_80781F0 - - thumb_func_start sub_8078278 -sub_8078278: @ 8078278 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x34 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080782CC - movs r2, 0x2E - ldrsh r0, [r4, r2] - movs r2, 0x30 - ldrsh r1, [r4, r2] - bl Sin - strh r0, [r4, 0x24] - movs r1, 0x2E - ldrsh r0, [r4, r1] - movs r2, 0x36 - ldrsh r1, [r4, r2] - bl Cos - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x32] - ldrh r2, [r4, 0x2E] - adds r1, r0, r2 - strh r1, [r4, 0x2E] - lsls r0, r1, 16 - asrs r0, 16 - cmp r0, 0xFF - ble _080782B8 - ldr r2, _080782B4 @ =0xffffff00 - b _080782C0 - .align 2, 0 -_080782B4: .4byte 0xffffff00 -_080782B8: - cmp r0, 0 - bge _080782C4 - movs r2, 0x80 - lsls r2, 1 -_080782C0: - adds r0, r1, r2 - strh r0, [r4, 0x2E] -_080782C4: - ldrh r0, [r4, 0x34] - subs r0, 0x1 - strh r0, [r4, 0x34] - b _080782D2 -_080782CC: - adds r0, r4, 0 - bl sub_8078104 -_080782D2: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8078278 - - thumb_func_start sub_80782D8 -sub_80782D8: @ 80782D8 - push {lr} - adds r1, r0, 0 - ldrh r2, [r1, 0x2E] - movs r3, 0x2E - ldrsh r0, [r1, r3] - cmp r0, 0 - ble _080782EC - subs r0, r2, 0x1 - strh r0, [r1, 0x2E] - b _080782F2 -_080782EC: - adds r0, r1, 0 - bl sub_8078104 -_080782F2: - pop {r0} - bx r0 - thumb_func_end sub_80782D8 - - thumb_func_start sub_80782F8 -sub_80782F8: @ 80782F8 - push {r4,lr} - adds r4, r0, 0 - bl sub_8078314 - ldr r1, _08078310 @ =sub_8078364 - str r1, [r4, 0x1C] - adds r0, r4, 0 - bl _call_via_r1 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08078310: .4byte sub_8078364 - thumb_func_end sub_80782F8 - - thumb_func_start sub_8078314 -sub_8078314: @ 8078314 - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0x30 - ldrsh r1, [r4, r0] - movs r2, 0x32 - ldrsh r0, [r4, r2] - cmp r1, r0 - ble _0807832A - ldrh r0, [r4, 0x2E] - negs r0, r0 - strh r0, [r4, 0x2E] -_0807832A: - movs r1, 0x32 - ldrsh r0, [r4, r1] - movs r2, 0x30 - ldrsh r1, [r4, r2] - subs r0, r1 - ldrh r5, [r4, 0x2E] - movs r2, 0x2E - ldrsh r1, [r4, r2] - bl __divsi3 - cmp r0, 0 - bge _08078344 - negs r0, r0 -_08078344: - strh r0, [r4, 0x2E] - movs r1, 0x36 - ldrsh r0, [r4, r1] - movs r2, 0x34 - ldrsh r1, [r4, r2] - subs r0, r1 - movs r2, 0x2E - ldrsh r1, [r4, r2] - bl __divsi3 - strh r0, [r4, 0x32] - strh r5, [r4, 0x30] - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8078314 - - thumb_func_start sub_8078364 -sub_8078364: @ 8078364 - push {lr} - adds r1, r0, 0 - ldrh r2, [r1, 0x2E] - movs r3, 0x2E - ldrsh r0, [r1, r3] - cmp r0, 0 - ble _08078388 - subs r0, r2, 0x1 - strh r0, [r1, 0x2E] - ldrh r0, [r1, 0x30] - ldrh r2, [r1, 0x24] - adds r0, r2 - strh r0, [r1, 0x24] - ldrh r0, [r1, 0x32] - ldrh r3, [r1, 0x26] - adds r0, r3 - strh r0, [r1, 0x26] - b _0807838E -_08078388: - adds r0, r1, 0 - bl sub_8078104 -_0807838E: - pop {r0} - bx r0 - thumb_func_end sub_8078364 - - thumb_func_start sub_8078394 -sub_8078394: @ 8078394 - push {lr} - adds r2, r0, 0 - ldrh r1, [r2, 0x2E] - movs r3, 0x2E - ldrsh r0, [r2, r3] - cmp r0, 0 - ble _080783C4 - subs r0, r1, 0x1 - strh r0, [r2, 0x2E] - ldrh r0, [r2, 0x30] - ldrh r1, [r2, 0x34] - adds r0, r1 - strh r0, [r2, 0x34] - ldrh r1, [r2, 0x32] - ldrh r3, [r2, 0x36] - adds r1, r3 - strh r1, [r2, 0x36] - lsls r0, 16 - asrs r0, 24 - strh r0, [r2, 0x24] - lsls r1, 16 - asrs r1, 24 - strh r1, [r2, 0x26] - b _080783CA -_080783C4: - adds r0, r2, 0 - bl sub_8078104 -_080783CA: - pop {r0} - bx r0 - thumb_func_end sub_8078394 - - thumb_func_start sub_80783D0 -sub_80783D0: @ 80783D0 - push {r4,lr} - adds r4, r0, 0 - ldrh r1, [r4, 0x2E] - movs r2, 0x2E - ldrsh r0, [r4, r2] - cmp r0, 0 - ble _08078400 - subs r0, r1, 0x1 - strh r0, [r4, 0x2E] - ldrh r0, [r4, 0x30] - ldrh r1, [r4, 0x34] - adds r0, r1 - strh r0, [r4, 0x34] - ldrh r1, [r4, 0x32] - ldrh r2, [r4, 0x36] - adds r1, r2 - strh r1, [r4, 0x36] - lsls r0, 16 - asrs r0, 24 - strh r0, [r4, 0x24] - lsls r1, 16 - asrs r1, 24 - strh r1, [r4, 0x26] - b _08078406 -_08078400: - adds r0, r4, 0 - bl sub_8078104 -_08078406: - adds r0, r4, 0 - bl UpdateMonIconFrame - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80783D0 - - thumb_func_start unref_sub_8078414 -unref_sub_8078414: @ 8078414 - push {r4,r5,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x24] - ldrh r1, [r4, 0x20] - adds r0, r1 - strh r0, [r4, 0x30] - ldrh r0, [r4, 0x26] - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r4, 0x34] - ldr r5, _08078450 @ =gUnknown_0202F7C9 - ldrb r0, [r5] - movs r1, 0x2 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x32] - ldrb r0, [r5] - movs r1, 0x3 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x36] - ldr r0, _08078454 @ =sub_80782F8 - str r0, [r4, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08078450: .4byte gUnknown_0202F7C9 -_08078454: .4byte sub_80782F8 - thumb_func_end unref_sub_8078414 - - thumb_func_start sub_8078458 -sub_8078458: @ 8078458 - push {r4,lr} - adds r3, r0, 0 - ldrh r1, [r3, 0x2E] - movs r2, 0x2E - ldrsh r0, [r3, r2] - cmp r0, 0 - ble _0807849C - subs r0, r1, 0x1 - strh r0, [r3, 0x2E] - ldr r2, _08078498 @ =gSprites - movs r4, 0x34 - ldrsh r1, [r3, r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r3, 0x30] - ldrh r4, [r0, 0x24] - adds r1, r4 - strh r1, [r0, 0x24] - movs r0, 0x34 - ldrsh r1, [r3, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r3, 0x32] - ldrh r2, [r0, 0x26] - adds r1, r2 - strh r1, [r0, 0x26] - b _080784A2 - .align 2, 0 -_08078498: .4byte gSprites -_0807849C: - adds r0, r3, 0 - bl sub_8078104 -_080784A2: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8078458 - - thumb_func_start sub_80784A8 -sub_80784A8: @ 80784A8 - push {r4,lr} - adds r4, r0, 0 - ldrh r1, [r4, 0x2E] - movs r2, 0x2E - ldrsh r0, [r4, r2] - cmp r0, 0 - ble _080784F8 - subs r0, r1, 0x1 - strh r0, [r4, 0x2E] - ldrh r1, [r4, 0x30] - ldrh r0, [r4, 0x34] - adds r1, r0 - strh r1, [r4, 0x34] - ldrh r0, [r4, 0x32] - ldrh r2, [r4, 0x36] - adds r0, r2 - strh r0, [r4, 0x36] - ldr r3, _080784F4 @ =gSprites - movs r0, 0x38 - ldrsh r2, [r4, r0] - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r0, r3 - lsls r1, 16 - asrs r1, 24 - strh r1, [r0, 0x24] - movs r1, 0x38 - ldrsh r0, [r4, r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r3 - ldrh r0, [r4, 0x36] - lsls r0, 16 - asrs r0, 24 - strh r0, [r1, 0x26] - b _080784FE - .align 2, 0 -_080784F4: .4byte gSprites -_080784F8: - adds r0, r4, 0 - bl sub_8078104 -_080784FE: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80784A8 - - thumb_func_start sub_8078504 -sub_8078504: @ 8078504 - push {r4,lr} - adds r4, r0, 0 - ldrh r1, [r4, 0x2E] - movs r2, 0x2E - ldrsh r0, [r4, r2] - cmp r0, 0 - ble _08078566 - subs r0, r1, 0x1 - strh r0, [r4, 0x2E] - ldrh r1, [r4, 0x32] - lsls r0, r1, 16 - asrs r0, 24 - strh r0, [r4, 0x24] - ldrh r0, [r4, 0x30] - adds r1, r0 - strh r1, [r4, 0x32] - ldrh r1, [r4, 0x36] - lsls r0, r1, 16 - asrs r0, 24 - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x34] - adds r1, r0 - strh r1, [r4, 0x36] - movs r1, 0x2E - ldrsh r0, [r4, r1] - movs r2, 0x38 - ldrsh r1, [r4, r2] - bl __modsi3 - cmp r0, 0 - bne _0807856C - movs r1, 0x38 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _0807856C - adds r3, r4, 0 - adds r3, 0x3E - ldrb r2, [r3] - lsls r0, r2, 29 - lsrs r0, 31 - movs r1, 0x1 - eors r1, r0 - lsls r1, 2 - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - b _0807856C -_08078566: - adds r0, r4, 0 - bl sub_8078104 -_0807856C: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8078504 - - thumb_func_start move_anim_8074EE0 -move_anim_8074EE0: @ 8078574 - push {r4,lr} - adds r4, r0, 0 - bl FreeSpriteOamMatrix - adds r0, r4, 0 - bl move_anim_8072740 - pop {r4} - pop {r0} - bx r0 - thumb_func_end move_anim_8074EE0 - - thumb_func_start unref_sub_8078588 -unref_sub_8078588: @ 8078588 - push {r4,r5,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x24] - ldrh r1, [r4, 0x20] - adds r0, r1 - strh r0, [r4, 0x30] - ldrh r0, [r4, 0x26] - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r4, 0x34] - ldr r5, _080785C4 @ =gUnknown_0202F7C8 - ldrb r0, [r5] - movs r1, 0x2 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x32] - ldrb r0, [r5] - movs r1, 0x3 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x36] - ldr r0, _080785C8 @ =sub_80782F8 - str r0, [r4, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080785C4: .4byte gUnknown_0202F7C8 -_080785C8: .4byte sub_80782F8 - thumb_func_end unref_sub_8078588 - - thumb_func_start unref_sub_80785CC -unref_sub_80785CC: @ 80785CC - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x38] - bl ResetPaletteStructByUid - adds r0, r4, 0 - bl move_anim_8074EE0 - pop {r4} - pop {r0} - bx r0 - thumb_func_end unref_sub_80785CC - - thumb_func_start sub_80785E4 -sub_80785E4: @ 80785E4 - push {lr} - adds r2, r0, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _080785FA - adds r0, r2, 0 - bl sub_8078104 -_080785FA: - pop {r0} - bx r0 - thumb_func_end sub_80785E4 - - thumb_func_start sub_8078600 -sub_8078600: @ 8078600 - push {lr} - adds r2, r0, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _08078616 - adds r0, r2, 0 - bl sub_8078104 -_08078616: - pop {r0} - bx r0 - thumb_func_end sub_8078600 - - thumb_func_start sub_807861C -sub_807861C: @ 807861C - push {lr} - ldr r1, _08078630 @ =REG_BLDCNT - movs r2, 0 - strh r2, [r1] - adds r1, 0x2 - strh r2, [r1] - bl move_anim_8072740 - pop {r0} - bx r0 - .align 2, 0 -_08078630: .4byte REG_BLDCNT - thumb_func_end sub_807861C - - thumb_func_start sub_8078634 -sub_8078634: @ 8078634 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0807864C @ =REG_BLDCNT - movs r2, 0 - strh r2, [r1] - adds r1, 0x2 - strh r2, [r1] - bl move_anim_task_del - pop {r0} - bx r0 - .align 2, 0 -_0807864C: .4byte REG_BLDCNT - thumb_func_end sub_8078634 - - thumb_func_start sub_8078650 -sub_8078650: @ 8078650 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r4, _08078678 @ =gUnknown_0202F7C8 - ldrb r0, [r4] - movs r1, 0x2 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x3 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08078678: .4byte gUnknown_0202F7C8 - thumb_func_end sub_8078650 - - thumb_func_start sub_807867C -sub_807867C: @ 807867C - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r4, r0, 0 - lsls r1, 16 - lsrs r5, r1, 16 - mov r8, r5 - ldr r7, _080786B4 @ =gUnknown_0202F7C8 - ldrb r0, [r7] - movs r1, 0 - bl sub_8077ABC - lsls r0, 24 - lsrs r6, r0, 24 - ldr r0, _080786B8 @ =gUnknown_0202F7C9 - ldrb r0, [r0] - movs r1, 0 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 24 - cmp r6, r0 - bhi _080786C8 - cmp r6, r0 - bcs _080786BC - lsls r0, r5, 16 - b _080786D8 - .align 2, 0 -_080786B4: .4byte gUnknown_0202F7C8 -_080786B8: .4byte gUnknown_0202F7C9 -_080786BC: - ldrb r0, [r7] - bl battle_side_get_owner - lsls r0, 24 - cmp r0, 0 - beq _080786D4 -_080786C8: - ldrh r1, [r4, 0x20] - lsls r0, r5, 16 - asrs r0, 16 - subs r1, r0 - strh r1, [r4, 0x20] - b _080786E0 -_080786D4: - mov r1, r8 - lsls r0, r1, 16 -_080786D8: - asrs r0, 16 - ldrh r1, [r4, 0x20] - adds r0, r1 - strh r0, [r4, 0x20] -_080786E0: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_807867C - - thumb_func_start sub_80786EC -sub_80786EC: @ 80786EC - push {r4,r5,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x20] - movs r5, 0 - strh r0, [r4, 0x30] - ldrh r0, [r4, 0x22] - strh r0, [r4, 0x34] - adds r0, r4, 0 - bl obj_translate_based_on_private_1_2_3_4 - movs r0, 0x2E - ldrsh r1, [r4, r0] - movs r0, 0x80 - lsls r0, 8 - bl __divsi3 - strh r0, [r4, 0x3A] - strh r5, [r4, 0x3C] - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80786EC - - thumb_func_start sub_8078718 -sub_8078718: @ 8078718 - push {r4,lr} - adds r4, r0, 0 - bl sub_8078B5C - lsls r0, 24 - cmp r0, 0 - bne _08078744 - ldrh r0, [r4, 0x3A] - ldrh r1, [r4, 0x3C] - adds r0, r1 - strh r0, [r4, 0x3C] - lsls r0, 16 - lsrs r0, 24 - movs r2, 0x38 - ldrsh r1, [r4, r2] - bl Sin - ldrh r1, [r4, 0x26] - adds r0, r1 - strh r0, [r4, 0x26] - movs r0, 0 - b _08078746 -_08078744: - movs r0, 0x1 -_08078746: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8078718 - - thumb_func_start oamt_add_pos2_onto_pos1 -oamt_add_pos2_onto_pos1: @ 807874C - ldrh r1, [r0, 0x24] - ldrh r2, [r0, 0x20] - adds r1, r2 - movs r2, 0 - strh r1, [r0, 0x20] - ldrh r1, [r0, 0x26] - ldrh r3, [r0, 0x22] - adds r1, r3 - strh r1, [r0, 0x22] - strh r2, [r0, 0x24] - strh r2, [r0, 0x26] - bx lr - thumb_func_end oamt_add_pos2_onto_pos1 - - thumb_func_start sub_8078764 -sub_8078764: @ 8078764 - push {r4,r5,lr} - adds r5, r0, 0 - lsls r1, 24 - cmp r1, 0 - bne _0807878C - ldr r4, _080787A8 @ =gUnknown_0202F7C9 - ldrb r0, [r4] - movs r1, 0 - bl sub_8077EE4 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x1 - bl sub_8077EE4 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] -_0807878C: - ldr r4, _080787AC @ =gBattleAnimArgs - movs r0, 0 - ldrsh r1, [r4, r0] - adds r0, r5, 0 - bl sub_807867C - ldrh r0, [r4, 0x2] - ldrh r1, [r5, 0x22] - adds r0, r1 - strh r0, [r5, 0x22] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080787A8: .4byte gUnknown_0202F7C9 -_080787AC: .4byte gBattleAnimArgs - thumb_func_end sub_8078764 - - thumb_func_start sub_80787B0 -sub_80787B0: @ 80787B0 - push {r4,r5,lr} - adds r5, r0, 0 - lsls r1, 24 - cmp r1, 0 - bne _080787D4 - ldr r4, _080787D0 @ =gUnknown_0202F7C8 - ldrb r0, [r4] - movs r1, 0 - bl sub_8077EE4 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x1 - b _080787E8 - .align 2, 0 -_080787D0: .4byte gUnknown_0202F7C8 -_080787D4: - ldr r4, _0807880C @ =gUnknown_0202F7C8 - ldrb r0, [r4] - movs r1, 0x2 - bl sub_8077EE4 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x3 -_080787E8: - bl sub_8077EE4 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] - ldr r4, _08078810 @ =gBattleAnimArgs - movs r0, 0 - ldrsh r1, [r4, r0] - adds r0, r5, 0 - bl sub_807867C - ldrh r0, [r4, 0x2] - ldrh r1, [r5, 0x22] - adds r0, r1 - strh r0, [r5, 0x22] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0807880C: .4byte gUnknown_0202F7C8 -_08078810: .4byte gBattleAnimArgs - thumb_func_end sub_80787B0 - - thumb_func_start battle_side_get_owner -battle_side_get_owner: @ 8078814 - lsls r0, 24 - lsrs r0, 24 - ldr r1, _08078824 @ =gUnknown_02024A72 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r1 - bx lr - .align 2, 0 -_08078824: .4byte gUnknown_02024A72 - thumb_func_end battle_side_get_owner - - thumb_func_start battle_get_per_side_status -battle_get_per_side_status: @ 8078828 - lsls r0, 24 - lsrs r0, 24 - ldr r1, _08078834 @ =gUnknown_02024A72 - adds r0, r1 - ldrb r0, [r0] - bx lr - .align 2, 0 -_08078834: .4byte gUnknown_02024A72 - thumb_func_end battle_get_per_side_status - - thumb_func_start battle_get_side_with_given_state -battle_get_side_with_given_state: @ 8078838 - push {r4,lr} - lsls r0, 24 - lsrs r3, r0, 24 - movs r1, 0 - ldr r0, _0807886C @ =gUnknown_02024A68 - ldrb r2, [r0] - cmp r1, r2 - bcs _08078862 - ldr r4, _08078870 @ =gUnknown_02024A72 - ldrb r0, [r4] - cmp r0, r3 - beq _08078862 -_08078850: - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, r2 - bcs _08078862 - adds r0, r1, r4 - ldrb r0, [r0] - cmp r0, r3 - bne _08078850 -_08078862: - adds r0, r1, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0807886C: .4byte gUnknown_02024A68 -_08078870: .4byte gUnknown_02024A72 - thumb_func_end battle_get_side_with_given_state - - thumb_func_start sub_8078874 -sub_8078874: @ 8078874 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r5, r4, 0 - bl sub_8076BE0 - lsls r0, 24 - cmp r0, 0 - beq _080788A0 - ldr r0, _08078898 @ =gUnknown_0202F7C8 - ldrb r0, [r0] - cmp r0, r4 - beq _080788EE - ldr r0, _0807889C @ =gUnknown_0202F7C9 - ldrb r0, [r0] - cmp r0, r4 - beq _080788EE - b _080788FC - .align 2, 0 -_08078898: .4byte gUnknown_0202F7C8 -_0807889C: .4byte gUnknown_0202F7C9 -_080788A0: - ldr r0, _080788C8 @ =gUnknown_02024A72 - adds r0, r4, r0 - ldrb r0, [r0] - cmp r0, 0xFF - beq _080788FC - adds r0, r4, 0 - bl battle_side_get_owner - lsls r0, 24 - cmp r0, 0 - beq _080788D4 - ldr r1, _080788CC @ =gUnknown_02024A6A - lsls r0, r4, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080788D0 @ =gEnemyParty - b _080788E2 - .align 2, 0 -_080788C8: .4byte gUnknown_02024A72 -_080788CC: .4byte gUnknown_02024A6A -_080788D0: .4byte gEnemyParty -_080788D4: - ldr r1, _080788F4 @ =gUnknown_02024A6A - lsls r0, r5, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080788F8 @ =gPlayerParty -_080788E2: - adds r0, r1 - movs r1, 0x39 - bl GetMonData - cmp r0, 0 - beq _080788FC -_080788EE: - movs r0, 0x1 - b _080788FE - .align 2, 0 -_080788F4: .4byte gUnknown_02024A6A -_080788F8: .4byte gPlayerParty -_080788FC: - movs r0, 0 -_080788FE: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8078874 - - thumb_func_start IsDoubleBattle -IsDoubleBattle: @ 8078904 - ldr r0, _08078910 @ =gBattleTypeFlags - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r1 - bx lr - .align 2, 0 -_08078910: .4byte gBattleTypeFlags - thumb_func_end IsDoubleBattle - - thumb_func_start sub_8078914 -sub_8078914: @ 8078914 - push {r4,lr} - adds r4, r0, 0 - bl sub_8076BE0 - lsls r0, 24 - cmp r0, 0 - beq _08078938 - ldr r0, _08078930 @ =0x06008000 - str r0, [r4] - ldr r0, _08078934 @ =0x0600f000 - str r0, [r4, 0x4] - movs r0, 0xE - b _08078942 - .align 2, 0 -_08078930: .4byte 0x06008000 -_08078934: .4byte 0x0600f000 -_08078938: - ldr r0, _0807894C @ =0x06004000 - str r0, [r4] - ldr r0, _08078950 @ =0x0600e000 - str r0, [r4, 0x4] - movs r0, 0x8 -_08078942: - strb r0, [r4, 0x8] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0807894C: .4byte 0x06004000 -_08078950: .4byte 0x0600e000 - thumb_func_end sub_8078914 - - thumb_func_start sub_8078954 -sub_8078954: @ 8078954 - push {r4,lr} - adds r4, r0, 0 - bl sub_8076BE0 - lsls r0, 24 - cmp r0, 0 - beq _08078978 - ldr r0, _08078970 @ =0x06008000 - str r0, [r4] - ldr r0, _08078974 @ =0x0600f000 - str r0, [r4, 0x4] - movs r0, 0xE - b _080789AA - .align 2, 0 -_08078970: .4byte 0x06008000 -_08078974: .4byte 0x0600f000 -_08078978: - ldr r0, _08078994 @ =gUnknown_0202F7C8 - ldrb r0, [r0] - bl battle_get_per_side_status_permutated - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080789A0 - ldr r0, _08078998 @ =0x06004000 - str r0, [r4] - ldr r0, _0807899C @ =0x0600e000 - str r0, [r4, 0x4] - movs r0, 0x8 - b _080789AA - .align 2, 0 -_08078994: .4byte gUnknown_0202F7C8 -_08078998: .4byte 0x06004000 -_0807899C: .4byte 0x0600e000 -_080789A0: - ldr r0, _080789B4 @ =0x06006000 - str r0, [r4] - ldr r0, _080789B8 @ =0x0600f000 - str r0, [r4, 0x4] - movs r0, 0x9 -_080789AA: - strb r0, [r4, 0x8] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080789B4: .4byte 0x06006000 -_080789B8: .4byte 0x0600f000 - thumb_func_end sub_8078954 - - thumb_func_start sub_80789BC -sub_80789BC: @ 80789BC - push {lr} - bl sub_8076BE0 - lsls r0, 24 - cmp r0, 0 - bne _080789CC - movs r0, 0x2 - b _080789CE -_080789CC: - movs r0, 0x1 -_080789CE: - pop {r1} - bx r1 - thumb_func_end sub_80789BC - - thumb_func_start sub_80789D4 -sub_80789D4: @ 80789D4 - push {lr} - lsls r0, 24 - cmp r0, 0 - bne _080789F4 - ldr r2, _080789F0 @ =REG_BG3CNT - ldrb r1, [r2, 0x1] - movs r0, 0x3F - ands r0, r1 - strb r0, [r2, 0x1] - ldrb r0, [r2, 0x1] - movs r1, 0x20 - orrs r0, r1 - b _08078A2A - .align 2, 0 -_080789F0: .4byte REG_BG3CNT -_080789F4: - bl sub_8076BE0 - lsls r0, 24 - cmp r0, 0 - beq _08078A14 - ldr r2, _08078A10 @ =REG_BG3CNT - ldrb r1, [r2, 0x1] - movs r0, 0x3F - ands r0, r1 - strb r0, [r2, 0x1] - ldrb r0, [r2, 0x1] - movs r1, 0x20 - orrs r0, r1 - b _08078A2A - .align 2, 0 -_08078A10: .4byte REG_BG3CNT -_08078A14: - ldr r2, _08078A30 @ =REG_BG3CNT - ldrb r1, [r2, 0x1] - movs r0, 0x3F - ands r0, r1 - movs r1, 0x40 - orrs r0, r1 - strb r0, [r2, 0x1] - ldrb r1, [r2, 0x1] - movs r0, 0x21 - negs r0, r0 - ands r0, r1 -_08078A2A: - strb r0, [r2, 0x1] - pop {r0} - bx r0 - .align 2, 0 -_08078A30: .4byte REG_BG3CNT - thumb_func_end sub_80789D4 - - thumb_func_start sub_8078A34 -sub_8078A34: @ 8078A34 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x20] - strh r0, [r4, 0x30] - ldrh r0, [r4, 0x22] - strh r0, [r4, 0x34] - adds r0, r4, 0 - bl sub_8078A5C - ldr r1, _08078A58 @ =sub_80783D0 - str r1, [r4, 0x1C] - adds r0, r4, 0 - bl _call_via_r1 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08078A58: .4byte sub_80783D0 - thumb_func_end sub_8078A34 - - thumb_func_start sub_8078A5C -sub_8078A5C: @ 8078A5C - push {r4-r6,lr} - adds r5, r0, 0 - ldrh r0, [r5, 0x32] - ldrh r1, [r5, 0x30] - subs r0, r1 - ldrh r4, [r5, 0x36] - ldrh r1, [r5, 0x34] - subs r4, r1 - lsls r4, 24 - lsrs r4, 16 - lsls r0, 24 - asrs r0, 16 - movs r2, 0x2E - ldrsh r1, [r5, r2] - bl __divsi3 - movs r6, 0 - strh r0, [r5, 0x30] - lsls r4, 16 - asrs r4, 16 - movs r0, 0x2E - ldrsh r1, [r5, r0] - adds r0, r4, 0 - bl __divsi3 - strh r0, [r5, 0x32] - strh r6, [r5, 0x36] - strh r6, [r5, 0x34] - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8078A5C - - thumb_func_start obj_translate_based_on_private_1_2_3_4 -obj_translate_based_on_private_1_2_3_4: @ 8078A9C - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - adds r7, r0, 0 - movs r0, 0x32 - ldrsh r1, [r7, r0] - movs r2, 0x30 - ldrsh r0, [r7, r2] - subs r1, r0 - movs r3, 0x36 - ldrsh r2, [r7, r3] - movs r3, 0x34 - ldrsh r0, [r7, r3] - subs r2, r0 - lsrs r0, r1, 31 - mov r8, r0 - lsrs r3, r2, 31 - mov r9, r3 - cmp r1, 0 - bge _08078AC8 - negs r1, r1 -_08078AC8: - lsls r0, r1, 24 - lsrs r6, r0, 16 - adds r0, r2, 0 - cmp r0, 0 - bge _08078AD4 - negs r0, r0 -_08078AD4: - lsls r0, 24 - lsrs r5, r0, 16 - movs r0, 0x2E - ldrsh r4, [r7, r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl __divsi3 - lsls r0, 16 - lsrs r6, r0, 16 - adds r0, r5, 0 - adds r1, r4, 0 - bl __divsi3 - lsls r0, 16 - lsrs r5, r0, 16 - mov r2, r8 - cmp r2, 0 - beq _08078B00 - movs r0, 0x1 - orrs r6, r0 - b _08078B04 -_08078B00: - ldr r0, _08078B10 @ =0x0000fffe - ands r6, r0 -_08078B04: - mov r3, r9 - cmp r3, 0 - beq _08078B14 - movs r0, 0x1 - orrs r5, r0 - b _08078B18 - .align 2, 0 -_08078B10: .4byte 0x0000fffe -_08078B14: - ldr r0, _08078B30 @ =0x0000fffe - ands r5, r0 -_08078B18: - movs r0, 0 - strh r6, [r7, 0x30] - strh r5, [r7, 0x32] - strh r0, [r7, 0x36] - strh r0, [r7, 0x34] - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08078B30: .4byte 0x0000fffe - thumb_func_end obj_translate_based_on_private_1_2_3_4 - - thumb_func_start sub_8078B34 -sub_8078B34: @ 8078B34 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x20] - strh r0, [r4, 0x30] - ldrh r0, [r4, 0x22] - strh r0, [r4, 0x34] - adds r0, r4, 0 - bl obj_translate_based_on_private_1_2_3_4 - ldr r1, _08078B58 @ =sub_8078BB8 - str r1, [r4, 0x1C] - adds r0, r4, 0 - bl _call_via_r1 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08078B58: .4byte sub_8078BB8 - thumb_func_end sub_8078B34 - - thumb_func_start sub_8078B5C -sub_8078B5C: @ 8078B5C - push {r4-r6,lr} - adds r2, r0, 0 - movs r1, 0x2E - ldrsh r0, [r2, r1] - cmp r0, 0 - bne _08078B6C - movs r0, 0x1 - b _08078BB0 -_08078B6C: - ldrh r1, [r2, 0x30] - ldrh r4, [r2, 0x32] - ldrh r6, [r2, 0x34] - ldrh r5, [r2, 0x36] - adds r0, r6, r1 - lsls r3, r0, 16 - lsrs r6, r3, 16 - adds r0, r5, r4 - lsls r0, 16 - lsrs r5, r0, 16 - movs r0, 0x1 - ands r1, r0 - cmp r1, 0 - beq _08078B8E - lsrs r0, r3, 24 - negs r0, r0 - b _08078B90 -_08078B8E: - lsrs r0, r3, 24 -_08078B90: - strh r0, [r2, 0x24] - movs r0, 0x1 - ands r4, r0 - cmp r4, 0 - beq _08078BA0 - lsrs r0, r5, 8 - negs r0, r0 - b _08078BA2 -_08078BA0: - lsrs r0, r5, 8 -_08078BA2: - strh r0, [r2, 0x26] - strh r6, [r2, 0x34] - strh r5, [r2, 0x36] - ldrh r0, [r2, 0x2E] - subs r0, 0x1 - strh r0, [r2, 0x2E] - movs r0, 0 -_08078BB0: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8078B5C - - thumb_func_start sub_8078BB8 -sub_8078BB8: @ 8078BB8 - push {r4,lr} - adds r4, r0, 0 - bl sub_8078B5C - lsls r0, 24 - cmp r0, 0 - beq _08078BCC - adds r0, r4, 0 - bl sub_8078104 -_08078BCC: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8078BB8 - - thumb_func_start sub_8078BD4 -sub_8078BD4: @ 8078BD4 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x32 - ldrsh r1, [r4, r0] - movs r2, 0x30 - ldrsh r0, [r4, r2] - subs r0, r1, r0 - cmp r0, 0 - bge _08078BE8 - negs r0, r0 -_08078BE8: - lsls r0, 8 - movs r2, 0x2E - ldrsh r1, [r4, r2] - bl __divsi3 - strh r0, [r4, 0x2E] - adds r0, r4, 0 - bl obj_translate_based_on_private_1_2_3_4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8078BD4 - - thumb_func_start sub_8078C00 -sub_8078C00: @ 8078C00 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x20] - strh r0, [r4, 0x30] - ldrh r0, [r4, 0x22] - strh r0, [r4, 0x34] - adds r0, r4, 0 - bl sub_8078BD4 - ldr r1, _08078C24 @ =sub_8078BB8 - str r1, [r4, 0x1C] - adds r0, r4, 0 - bl _call_via_r1 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08078C24: .4byte sub_8078BB8 - thumb_func_end sub_8078C00 - - thumb_func_start sub_8078C28 -sub_8078C28: @ 8078C28 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - adds r7, r0, 0 - movs r0, 0x32 - ldrsh r1, [r7, r0] - movs r2, 0x30 - ldrsh r0, [r7, r2] - subs r1, r0 - movs r3, 0x36 - ldrsh r2, [r7, r3] - movs r3, 0x34 - ldrsh r0, [r7, r3] - subs r2, r0 - lsrs r0, r1, 31 - mov r8, r0 - lsrs r3, r2, 31 - mov r9, r3 - cmp r1, 0 - bge _08078C54 - negs r1, r1 -_08078C54: - lsls r0, r1, 20 - lsrs r6, r0, 16 - adds r0, r2, 0 - cmp r0, 0 - bge _08078C60 - negs r0, r0 -_08078C60: - lsls r0, 20 - lsrs r5, r0, 16 - movs r0, 0x2E - ldrsh r4, [r7, r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl __divsi3 - lsls r0, 16 - lsrs r6, r0, 16 - adds r0, r5, 0 - adds r1, r4, 0 - bl __divsi3 - lsls r0, 16 - lsrs r5, r0, 16 - mov r2, r8 - cmp r2, 0 - beq _08078C8C - movs r0, 0x1 - orrs r6, r0 - b _08078C90 -_08078C8C: - ldr r0, _08078C9C @ =0x0000fffe - ands r6, r0 -_08078C90: - mov r3, r9 - cmp r3, 0 - beq _08078CA0 - movs r0, 0x1 - orrs r5, r0 - b _08078CA4 - .align 2, 0 -_08078C9C: .4byte 0x0000fffe -_08078CA0: - ldr r0, _08078CBC @ =0x0000fffe - ands r5, r0 -_08078CA4: - movs r0, 0 - strh r6, [r7, 0x30] - strh r5, [r7, 0x32] - strh r0, [r7, 0x36] - strh r0, [r7, 0x34] - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08078CBC: .4byte 0x0000fffe - thumb_func_end sub_8078C28 - - thumb_func_start sub_8078CC0 -sub_8078CC0: @ 8078CC0 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x20] - strh r0, [r4, 0x30] - ldrh r0, [r4, 0x22] - strh r0, [r4, 0x34] - adds r0, r4, 0 - bl sub_8078C28 - ldr r1, _08078CE4 @ =sub_8078D44 - str r1, [r4, 0x1C] - adds r0, r4, 0 - bl _call_via_r1 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08078CE4: .4byte sub_8078D44 - thumb_func_end sub_8078CC0 - - thumb_func_start sub_8078CE8 -sub_8078CE8: @ 8078CE8 - push {r4-r6,lr} - adds r2, r0, 0 - movs r1, 0x2E - ldrsh r0, [r2, r1] - cmp r0, 0 - bne _08078CF8 - movs r0, 0x1 - b _08078D3C -_08078CF8: - ldrh r1, [r2, 0x30] - ldrh r4, [r2, 0x32] - ldrh r6, [r2, 0x34] - ldrh r5, [r2, 0x36] - adds r0, r6, r1 - lsls r3, r0, 16 - lsrs r6, r3, 16 - adds r0, r5, r4 - lsls r0, 16 - lsrs r5, r0, 16 - movs r0, 0x1 - ands r1, r0 - cmp r1, 0 - beq _08078D1A - lsrs r0, r3, 20 - negs r0, r0 - b _08078D1C -_08078D1A: - lsrs r0, r3, 20 -_08078D1C: - strh r0, [r2, 0x24] - movs r0, 0x1 - ands r4, r0 - cmp r4, 0 - beq _08078D2C - lsrs r0, r5, 4 - negs r0, r0 - b _08078D2E -_08078D2C: - lsrs r0, r5, 4 -_08078D2E: - strh r0, [r2, 0x26] - strh r6, [r2, 0x34] - strh r5, [r2, 0x36] - ldrh r0, [r2, 0x2E] - subs r0, 0x1 - strh r0, [r2, 0x2E] - movs r0, 0 -_08078D3C: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8078CE8 - - thumb_func_start sub_8078D44 -sub_8078D44: @ 8078D44 - push {r4,lr} - adds r4, r0, 0 - bl sub_8078CE8 - lsls r0, 24 - cmp r0, 0 - beq _08078D58 - adds r0, r4, 0 - bl sub_8078104 -_08078D58: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8078D44 - - thumb_func_start sub_8078D60 -sub_8078D60: @ 8078D60 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x32 - ldrsh r1, [r4, r0] - movs r2, 0x30 - ldrsh r0, [r4, r2] - subs r0, r1, r0 - cmp r0, 0 - bge _08078D74 - negs r0, r0 -_08078D74: - lsls r0, 4 - movs r2, 0x2E - ldrsh r1, [r4, r2] - bl __divsi3 - strh r0, [r4, 0x2E] - adds r0, r4, 0 - bl sub_8078C28 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8078D60 - - thumb_func_start sub_8078D8C -sub_8078D8C: @ 8078D8C - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x20] - strh r0, [r4, 0x30] - ldrh r0, [r4, 0x22] - strh r0, [r4, 0x34] - adds r0, r4, 0 - bl sub_8078D60 - ldr r1, _08078DB0 @ =sub_8078D44 - str r1, [r4, 0x1C] - adds r0, r4, 0 - bl _call_via_r1 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08078DB0: .4byte sub_8078D44 - thumb_func_end sub_8078D8C - - thumb_func_start obj_id_set_rotscale -obj_id_set_rotscale: @ 8078DB4 - push {r4,r5,lr} - sub sp, 0x10 - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 16 - lsls r3, 16 - lsrs r3, 16 - ldr r5, _08078E2C @ =0xffff0000 - lsls r2, 16 - lsrs r1, 16 - orrs r1, r2 - str r1, [sp] - ldr r0, [sp, 0x4] - ands r0, r5 - orrs r0, r3 - str r0, [sp, 0x4] - bl sub_8078E38 - lsls r0, 24 - cmp r0, 0 - beq _08078DF0 - mov r0, sp - ldrh r0, [r0] - negs r0, r0 - lsls r0, 16 - lsrs r0, 16 - ldr r1, [sp] - ands r1, r5 - orrs r1, r0 - str r1, [sp] -_08078DF0: - ldr r1, _08078E30 @ =gSprites - lsls r0, r4, 4 - adds r0, r4 - lsls r0, 2 - adds r0, r1 - ldrb r4, [r0, 0x3] - lsls r4, 26 - lsrs r4, 27 - add r5, sp, 0x8 - mov r0, sp - adds r1, r5, 0 - movs r2, 0x1 - movs r3, 0x2 - bl ObjAffineSet - ldr r0, _08078E34 @ =gOamMatrices - lsls r4, 3 - adds r4, r0 - ldrh r0, [r5] - strh r0, [r4] - ldrh r0, [r5, 0x2] - strh r0, [r4, 0x2] - ldrh r0, [r5, 0x4] - strh r0, [r4, 0x4] - ldrh r0, [r5, 0x6] - strh r0, [r4, 0x6] - add sp, 0x10 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08078E2C: .4byte 0xffff0000 -_08078E30: .4byte gSprites -_08078E34: .4byte gOamMatrices - thumb_func_end obj_id_set_rotscale - - thumb_func_start sub_8078E38 -sub_8078E38: @ 8078E38 - push {r4,lr} - bl sub_8076BE0 - lsls r0, 24 - cmp r0, 0 - beq _08078E68 - ldr r4, _08078E64 @ =gSprites - movs r0, 0 - bl obj_id_for_side_relative_to_move - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - movs r2, 0x32 - ldrsh r0, [r1, r2] - cmp r0, 0xC9 - beq _08078E68 - movs r0, 0x1 - b _08078E6A - .align 2, 0 -_08078E64: .4byte gSprites -_08078E68: - movs r0, 0 -_08078E6A: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8078E38 - - thumb_func_start sub_8078E70 -sub_8078E70: @ 8078E70 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r1, 24 - lsrs r1, 24 - mov r8, r1 - ldr r1, _08078F38 @ =gSprites - lsls r0, r6, 4 - adds r0, r6 - lsls r0, 2 - adds r4, r0, r1 - ldrh r0, [r4, 0x2E] - lsls r0, 24 - lsrs r7, r0, 24 - bl sub_8076BE0 - lsls r0, 24 - cmp r0, 0 - bne _08078EA6 - adds r0, r7, 0 - bl b_side_obj__get_some_boolean - lsls r0, 24 - cmp r0, 0 - beq _08078EB4 -_08078EA6: - adds r2, r4, 0 - adds r2, 0x3E - ldrb r1, [r2] - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - strb r0, [r2] -_08078EB4: - ldr r1, _08078F38 @ =gSprites - lsls r4, r6, 4 - adds r0, r4, r6 - lsls r0, 2 - adds r5, r0, r1 - movs r0, 0x3 - mov r1, r8 - ands r1, r0 - lsls r1, 2 - ldrb r2, [r5, 0x1] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r5, 0x1] - adds r2, r5, 0 - adds r2, 0x2C - ldrb r0, [r2] - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2] - bl sub_8076BE0 - lsls r0, 24 - cmp r0, 0 - bne _08078F0E - ldrb r0, [r5, 0x1] - lsls r0, 30 - cmp r0, 0 - bne _08078F0E - lsls r0, r7, 1 - adds r0, r7 - lsls r0, 2 - ldr r1, _08078F3C @ =0x02017810 - adds r0, r1 - ldrb r1, [r0, 0x6] - movs r0, 0x1F - ands r1, r0 - lsls r1, 1 - ldrb r2, [r5, 0x3] - movs r0, 0x3F - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r5, 0x3] -_08078F0E: - ldr r1, _08078F38 @ =gSprites - adds r0, r4, r6 - lsls r0, 2 - adds r0, r1 - ldrb r3, [r0, 0x1] - movs r1, 0x3 - orrs r3, r1 - strb r3, [r0, 0x1] - lsrs r1, r3, 6 - ldrb r2, [r0, 0x3] - lsrs r2, 6 - lsls r3, 30 - lsrs r3, 30 - bl CalcCenterToCornerVec - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08078F38: .4byte gSprites -_08078F3C: .4byte 0x02017810 - thumb_func_end sub_8078E70 - - thumb_func_start sub_8078F40 -sub_8078F40: @ 8078F40 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r2, 0x80 - lsls r2, 1 - adds r0, r4, 0 - adds r1, r2, 0 - movs r3, 0 - bl obj_id_set_rotscale - ldr r1, _08078F98 @ =gSprites - lsls r0, r4, 4 - adds r0, r4 - lsls r0, 2 - adds r0, r1 - ldrb r2, [r0, 0x1] - movs r1, 0x4 - negs r1, r1 - ands r1, r2 - movs r2, 0x1 - orrs r1, r2 - movs r2, 0xD - negs r2, r2 - ands r1, r2 - strb r1, [r0, 0x1] - adds r3, r0, 0 - adds r3, 0x2C - ldrb r2, [r3] - movs r1, 0x7F - ands r1, r2 - strb r1, [r3] - ldrb r3, [r0, 0x1] - lsrs r1, r3, 6 - ldrb r2, [r0, 0x3] - lsrs r2, 6 - lsls r3, 30 - lsrs r3, 30 - bl CalcCenterToCornerVec - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08078F98: .4byte gSprites - thumb_func_end sub_8078F40 - - thumb_func_start sub_8078F9C -sub_8078F9C: @ 8078F9C - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08078FD4 @ =gSprites - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r2, r1, r2 - ldrb r0, [r2, 0x3] - lsls r0, 26 - lsrs r0, 27 - ldr r1, _08078FD8 @ =gOamMatrices - lsls r0, 3 - adds r0, r1 - ldrh r1, [r0, 0x4] - movs r3, 0x4 - ldrsh r0, [r0, r3] - cmp r0, 0 - bge _08078FC8 - negs r0, r0 - lsls r0, 16 - lsrs r1, r0, 16 -_08078FC8: - lsls r0, r1, 16 - asrs r0, 19 - strh r0, [r2, 0x26] - pop {r0} - bx r0 - .align 2, 0 -_08078FD4: .4byte gSprites -_08078FD8: .4byte gOamMatrices - thumb_func_end sub_8078F9C - - thumb_func_start sub_8078FDC -sub_8078FDC: @ 8078FDC - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x10 - adds r4, r0, 0 - ldr r0, [sp, 0x28] - lsls r1, 24 - lsrs r6, r1, 24 - lsls r2, 16 - lsrs r5, r2, 16 - lsls r3, 16 - lsrs r7, r3, 16 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - ldrb r0, [r4, 0x1] - lsls r0, 30 - lsrs r0, 30 - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08079082 - adds r0, r4, 0 - adds r0, 0x2C - ldrb r1, [r0] - movs r2, 0x80 - orrs r1, r2 - strb r1, [r0] - cmp r6, 0 - beq _0807902A - ldrb r3, [r4, 0x1] - lsrs r1, r3, 6 - ldrb r2, [r4, 0x3] - lsrs r2, 6 - lsls r3, 30 - lsrs r3, 30 - adds r0, r4, 0 - bl CalcCenterToCornerVec -_0807902A: - ldr r6, _08079090 @ =0xffff0000 - lsls r0, r7, 16 - orrs r5, r0 - str r5, [sp] - ldr r0, [sp, 0x4] - ands r0, r6 - mov r1, r8 - orrs r0, r1 - str r0, [sp, 0x4] - bl sub_8078E38 - lsls r0, 24 - cmp r0, 0 - beq _08079058 - mov r0, sp - ldrh r0, [r0] - negs r0, r0 - lsls r0, 16 - lsrs r0, 16 - ldr r1, [sp] - ands r1, r6 - orrs r1, r0 - str r1, [sp] -_08079058: - ldrb r4, [r4, 0x3] - lsls r4, 26 - lsrs r4, 27 - add r5, sp, 0x8 - mov r0, sp - adds r1, r5, 0 - movs r2, 0x1 - movs r3, 0x2 - bl ObjAffineSet - ldr r0, _08079094 @ =gOamMatrices - lsls r4, 3 - adds r4, r0 - ldrh r0, [r5] - strh r0, [r4] - ldrh r0, [r5, 0x2] - strh r0, [r4, 0x2] - ldrh r0, [r5, 0x4] - strh r0, [r4, 0x4] - ldrh r0, [r5, 0x6] - strh r0, [r4, 0x6] -_08079082: - add sp, 0x10 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08079090: .4byte 0xffff0000 -_08079094: .4byte gOamMatrices - thumb_func_end sub_8078FDC - - thumb_func_start sub_8079098 -sub_8079098: @ 8079098 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - movs r3, 0x80 - lsls r3, 1 - movs r0, 0 - str r0, [sp] - adds r0, r4, 0 - movs r1, 0x1 - adds r2, r3, 0 - bl sub_8078FDC - adds r2, r4, 0 - adds r2, 0x2C - ldrb r1, [r2] - movs r0, 0x7F - ands r0, r1 - strb r0, [r2] - ldrb r3, [r4, 0x1] - lsrs r1, r3, 6 - ldrb r2, [r4, 0x3] - lsrs r2, 6 - lsls r3, 30 - lsrs r3, 30 - adds r0, r4, 0 - bl CalcCenterToCornerVec - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8079098 - - thumb_func_start sub_80790D8 -sub_80790D8: @ 80790D8 - push {lr} - lsls r0, 16 - asrs r0, 16 - lsls r1, 16 - asrs r1, 16 - bl ArcTan2 - lsls r0, 16 - lsrs r0, 16 - pop {r1} - bx r1 - thumb_func_end sub_80790D8 - - thumb_func_start sub_80790F0 -sub_80790F0: @ 80790F0 - push {lr} - lsls r0, 16 - asrs r0, 16 - lsls r1, 16 - asrs r1, 16 - bl sub_80790D8 - lsls r0, 16 - negs r0, r0 - lsrs r0, 16 - pop {r1} - bx r1 - thumb_func_end sub_80790F0 - - thumb_func_start sub_8079108 -sub_8079108: @ 8079108 - push {r4-r7,lr} - lsls r1, 24 - lsls r0, 20 - lsrs r0, 16 - cmp r1, 0 - bne _08079184 - ldr r2, _08079178 @ =gPlttBufferUnfaded - ldr r1, _0807917C @ =gPlttBufferFaded - lsls r0, 1 - adds r4, r0, r1 - adds r5, r0, r2 - movs r6, 0xF -_08079120: - ldr r0, [r5] - lsls r2, r0, 27 - lsrs r2, 27 - lsls r1, r0, 22 - lsrs r1, 27 - adds r2, r1 - lsls r0, 17 - lsrs r0, 27 - adds r0, r2 - movs r1, 0x3 - bl __udivsi3 - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x1F - ands r0, r1 - ldrb r1, [r4] - movs r3, 0x20 - negs r3, r3 - adds r2, r3, 0 - ands r1, r2 - orrs r1, r0 - strb r1, [r4] - lsls r3, r0, 5 - ldrh r1, [r4] - ldr r7, _08079180 @ =0xfffffc1f - adds r2, r7, 0 - ands r1, r2 - orrs r1, r3 - strh r1, [r4] - lsls r0, 2 - ldrb r1, [r4, 0x1] - movs r3, 0x7D - negs r3, r3 - adds r2, r3, 0 - ands r1, r2 - orrs r1, r0 - strb r1, [r4, 0x1] - adds r4, 0x2 - adds r5, 0x2 - subs r6, 0x1 - cmp r6, 0 - bge _08079120 - b _08079194 - .align 2, 0 -_08079178: .4byte gPlttBufferUnfaded -_0807917C: .4byte gPlttBufferFaded -_08079180: .4byte 0xfffffc1f -_08079184: - lsls r1, r0, 1 - ldr r0, _0807919C @ =gPlttBufferUnfaded - adds r0, r1, r0 - ldr r2, _080791A0 @ =gPlttBufferFaded - adds r1, r2 - ldr r2, _080791A4 @ =REG_BG0CNT - bl CpuSet -_08079194: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0807919C: .4byte gPlttBufferUnfaded -_080791A0: .4byte gPlttBufferFaded -_080791A4: .4byte REG_BG0CNT - thumb_func_end sub_8079108 - - thumb_func_start sub_80791A8 -sub_80791A8: @ 80791A8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - ldr r4, [sp, 0x28] - ldr r5, [sp, 0x2C] - ldr r6, [sp, 0x30] - lsls r0, 24 - lsls r1, 24 - lsrs r7, r1, 24 - lsls r2, 24 - lsrs r2, 24 - mov r8, r2 - lsls r3, 24 - lsrs r3, 24 - mov r9, r3 - lsls r4, 24 - lsrs r4, 24 - mov r10, r4 - lsls r5, 24 - lsrs r5, 24 - str r5, [sp] - lsls r6, 24 - lsrs r6, 24 - str r6, [sp, 0x4] - movs r4, 0 - cmp r0, 0 - beq _080791FE - bl sub_8076BE0 - lsls r0, 24 - cmp r0, 0 - bne _080791F2 - movs r4, 0xE - b _080791FE -_080791F2: - bl sub_80789BC - lsls r0, 24 - lsrs r0, 24 - movs r4, 0x1 - lsls r4, r0 -_080791FE: - cmp r7, 0 - beq _08079210 - ldr r0, _08079288 @ =gUnknown_0202F7C8 - ldrb r0, [r0] - adds r1, r0, 0 - adds r1, 0x10 - movs r0, 0x1 - lsls r0, r1 - orrs r4, r0 -_08079210: - mov r0, r8 - cmp r0, 0 - beq _08079224 - ldr r0, _0807928C @ =gUnknown_0202F7C9 - ldrb r0, [r0] - adds r1, r0, 0 - adds r1, 0x10 - movs r0, 0x1 - lsls r0, r1 - orrs r4, r0 -_08079224: - mov r0, r9 - cmp r0, 0 - beq _0807924A - ldr r6, _08079288 @ =gUnknown_0202F7C8 - ldrb r0, [r6] - movs r5, 0x2 - eors r0, r5 - bl b_side_obj__get_some_boolean - lsls r0, 24 - cmp r0, 0 - beq _0807924A - ldrb r0, [r6] - eors r0, r5 - adds r1, r0, 0 - adds r1, 0x10 - movs r0, 0x1 - lsls r0, r1 - orrs r4, r0 -_0807924A: - mov r0, r10 - cmp r0, 0 - beq _08079270 - ldr r6, _0807928C @ =gUnknown_0202F7C9 - ldrb r0, [r6] - movs r5, 0x2 - eors r0, r5 - bl b_side_obj__get_some_boolean - lsls r0, 24 - cmp r0, 0 - beq _08079270 - ldrb r0, [r6] - eors r0, r5 - adds r1, r0, 0 - adds r1, 0x10 - movs r0, 0x1 - lsls r0, r1 - orrs r4, r0 -_08079270: - ldr r0, [sp] - cmp r0, 0 - beq _08079296 - bl sub_8076BE0 - lsls r0, 24 - cmp r0, 0 - bne _08079290 - movs r0, 0x80 - lsls r0, 1 - b _08079294 - .align 2, 0 -_08079288: .4byte gUnknown_0202F7C8 -_0807928C: .4byte gUnknown_0202F7C9 -_08079290: - movs r0, 0x80 - lsls r0, 7 -_08079294: - orrs r4, r0 -_08079296: - ldr r0, [sp, 0x4] - cmp r0, 0 - beq _080792AC - bl sub_8076BE0 - lsls r0, 24 - cmp r0, 0 - bne _080792AC - movs r0, 0x80 - lsls r0, 2 - orrs r4, r0 -_080792AC: - adds r0, r4, 0 - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80791A8 - - thumb_func_start sub_80792C0 -sub_80792C0: @ 80792C0 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r1, 24 - lsrs r6, r1, 24 - lsls r2, 24 - lsrs r7, r2, 24 - lsls r3, 24 - lsrs r3, 24 - mov r8, r3 - movs r4, 0 - bl sub_8076BE0 - lsls r0, 24 - cmp r0, 0 - beq _080792EE - cmp r5, 0 - beq _0807939C - movs r4, 0x80 - lsls r4, 11 - b _0807939C -_080792EE: - cmp r5, 0 - beq _08079316 - movs r0, 0 - bl battle_get_side_with_given_state - lsls r0, 24 - lsrs r0, 24 - bl b_side_obj__get_some_boolean - lsls r0, 24 - cmp r0, 0 - beq _08079316 - movs r0, 0 - bl battle_get_side_with_given_state - lsls r0, 24 - lsrs r0, 24 - adds r0, 0x10 - movs r4, 0x1 - lsls r4, r0 -_08079316: - cmp r6, 0 - beq _08079342 - movs r0, 0x2 - bl battle_get_side_with_given_state - lsls r0, 24 - lsrs r0, 24 - bl b_side_obj__get_some_boolean - lsls r0, 24 - cmp r0, 0 - beq _08079342 - movs r0, 0x2 - bl battle_get_side_with_given_state - lsls r0, 24 - lsrs r0, 24 - adds r1, r0, 0 - adds r1, 0x10 - movs r0, 0x1 - lsls r0, r1 - orrs r4, r0 -_08079342: - cmp r7, 0 - beq _0807936E - movs r0, 0x1 - bl battle_get_side_with_given_state - lsls r0, 24 - lsrs r0, 24 - bl b_side_obj__get_some_boolean - lsls r0, 24 - cmp r0, 0 - beq _0807936E - movs r0, 0x1 - bl battle_get_side_with_given_state - lsls r0, 24 - lsrs r0, 24 - adds r1, r0, 0 - adds r1, 0x10 - movs r0, 0x1 - lsls r0, r1 - orrs r4, r0 -_0807936E: - mov r0, r8 - cmp r0, 0 - beq _0807939C - movs r0, 0x3 - bl battle_get_side_with_given_state - lsls r0, 24 - lsrs r0, 24 - bl b_side_obj__get_some_boolean - lsls r0, 24 - cmp r0, 0 - beq _0807939C - movs r0, 0x3 - bl battle_get_side_with_given_state - lsls r0, 24 - lsrs r0, 24 - adds r1, r0, 0 - adds r1, 0x10 - movs r0, 0x1 - lsls r0, r1 - orrs r4, r0 -_0807939C: - adds r0, r4, 0 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80792C0 - - thumb_func_start sub_80793A8 -sub_80793A8: @ 80793A8 - lsls r0, 24 - lsrs r0, 24 - bx lr - thumb_func_end sub_80793A8 - - thumb_func_start unref_sub_80793B0 -unref_sub_80793B0: @ 80793B0 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl battle_get_side_with_given_state - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - thumb_func_end unref_sub_80793B0 - - thumb_func_start sub_80793C4 -sub_80793C4: @ 80793C4 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _08079402 - ldr r2, _080793F0 @ =gBattleAnimArgs - movs r3, 0x6 - ldrsh r0, [r2, r3] - movs r1, 0 - cmp r0, 0 - bne _080793DE - movs r1, 0x1 -_080793DE: - movs r3, 0x4 - ldrsh r0, [r2, r3] - cmp r0, 0 - bne _080793F4 - adds r0, r4, 0 - bl sub_80787B0 - b _080793FA - .align 2, 0 -_080793F0: .4byte gBattleAnimArgs -_080793F4: - adds r0, r4, 0 - bl sub_8078764 -_080793FA: - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - b _08079416 -_08079402: - adds r0, r4, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x30 - ands r0, r1 - cmp r0, 0 - beq _08079416 - adds r0, r4, 0 - bl move_anim_8074EE0 -_08079416: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80793C4 - - thumb_func_start sub_807941C -sub_807941C: @ 807941C - push {r4-r7,lr} - adds r5, r0, 0 - ldr r6, _08079494 @ =gBattleAnimArgs - movs r1, 0xA - ldrsh r0, [r6, r1] - movs r1, 0xFF - lsls r1, 8 - ands r0, r1 - movs r1, 0 - cmp r0, 0 - bne _08079434 - movs r1, 0x1 -_08079434: - ldrb r0, [r6, 0xA] - movs r7, 0x1 - cmp r0, 0 - bne _0807943E - movs r7, 0x3 -_0807943E: - adds r0, r5, 0 - bl sub_80787B0 - ldr r0, _08079498 @ =gUnknown_0202F7C8 - ldrb r0, [r0] - bl battle_side_get_owner - lsls r0, 24 - cmp r0, 0 - beq _08079458 - ldrh r0, [r6, 0x4] - negs r0, r0 - strh r0, [r6, 0x4] -_08079458: - ldrh r0, [r6, 0x8] - strh r0, [r5, 0x2E] - ldr r4, _0807949C @ =gUnknown_0202F7C9 - ldrb r0, [r4] - movs r1, 0x2 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r6, 0x4] - adds r0, r1 - strh r0, [r5, 0x32] - ldrb r0, [r4] - adds r1, r7, 0 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 24 - ldrh r6, [r6, 0x6] - adds r0, r6 - strh r0, [r5, 0x36] - ldr r0, _080794A0 @ =sub_8078B34 - str r0, [r5, 0x1C] - ldr r1, _080794A4 @ =move_anim_8072740 - adds r0, r5, 0 - bl oamt_set_x3A_32 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08079494: .4byte gBattleAnimArgs -_08079498: .4byte gUnknown_0202F7C8 -_0807949C: .4byte gUnknown_0202F7C9 -_080794A0: .4byte sub_8078B34 -_080794A4: .4byte move_anim_8072740 - thumb_func_end sub_807941C - - thumb_func_start sub_80794A8 -sub_80794A8: @ 80794A8 - push {r4-r6,lr} - adds r6, r0, 0 - movs r1, 0x1 - bl sub_80787B0 - ldr r0, _08079508 @ =gUnknown_0202F7C8 - ldrb r0, [r0] - bl battle_side_get_owner - lsls r0, 24 - cmp r0, 0 - beq _080794C8 - ldr r1, _0807950C @ =gBattleAnimArgs - ldrh r0, [r1, 0x4] - negs r0, r0 - strh r0, [r1, 0x4] -_080794C8: - ldr r4, _0807950C @ =gBattleAnimArgs - ldrh r0, [r4, 0x8] - strh r0, [r6, 0x2E] - ldr r5, _08079510 @ =gUnknown_0202F7C9 - ldrb r0, [r5] - movs r1, 0x2 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r4, 0x4] - adds r0, r1 - strh r0, [r6, 0x32] - ldrb r0, [r5] - movs r1, 0x3 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r4, 0x6] - adds r0, r1 - strh r0, [r6, 0x36] - ldrh r0, [r4, 0xA] - strh r0, [r6, 0x38] - adds r0, r6, 0 - bl sub_80786EC - ldr r0, _08079514 @ =sub_8079518 - str r0, [r6, 0x1C] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08079508: .4byte gUnknown_0202F7C8 -_0807950C: .4byte gBattleAnimArgs -_08079510: .4byte gUnknown_0202F7C9 -_08079514: .4byte sub_8079518 - thumb_func_end sub_80794A8 - - thumb_func_start sub_8079518 -sub_8079518: @ 8079518 - push {r4,lr} - adds r4, r0, 0 - bl sub_8078718 - lsls r0, 24 - cmp r0, 0 - beq _0807952C - adds r0, r4, 0 - bl move_anim_8072740 -_0807952C: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8079518 - - thumb_func_start sub_8079534 -sub_8079534: @ 8079534 - push {r4-r7,lr} - adds r5, r0, 0 - ldr r0, _08079548 @ =gBattleAnimArgs - movs r2, 0xC - ldrsh r1, [r0, r2] - cmp r1, 0 - bne _0807954C - movs r4, 0x1 - movs r7, 0x3 - b _08079550 - .align 2, 0 -_08079548: .4byte gBattleAnimArgs -_0807954C: - movs r4, 0 - movs r7, 0x1 -_08079550: - movs r1, 0xA - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _08079568 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_80787B0 - ldr r0, _08079564 @ =gUnknown_0202F7C8 - b _08079572 - .align 2, 0 -_08079564: .4byte gUnknown_0202F7C8 -_08079568: - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_8078764 - ldr r0, _080795D0 @ =gUnknown_0202F7C9 -_08079572: - ldrb r6, [r0] - ldr r0, _080795D4 @ =gUnknown_0202F7C8 - ldrb r0, [r0] - bl battle_side_get_owner - lsls r0, 24 - cmp r0, 0 - beq _0807958A - ldr r1, _080795D8 @ =gBattleAnimArgs - ldrh r0, [r1, 0x4] - negs r0, r0 - strh r0, [r1, 0x4] -_0807958A: - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_8078764 - ldr r4, _080795D8 @ =gBattleAnimArgs - ldrh r0, [r4, 0x8] - strh r0, [r5, 0x2E] - adds r0, r6, 0 - movs r1, 0x2 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 24 - ldrh r2, [r4, 0x4] - adds r0, r2 - strh r0, [r5, 0x32] - adds r0, r6, 0 - adds r1, r7, 0 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 24 - ldrh r4, [r4, 0x6] - adds r0, r4 - strh r0, [r5, 0x36] - ldr r0, _080795DC @ =sub_8078B34 - str r0, [r5, 0x1C] - ldr r1, _080795E0 @ =move_anim_8072740 - adds r0, r5, 0 - bl oamt_set_x3A_32 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080795D0: .4byte gUnknown_0202F7C9 -_080795D4: .4byte gUnknown_0202F7C8 -_080795D8: .4byte gBattleAnimArgs -_080795DC: .4byte sub_8078B34 -_080795E0: .4byte move_anim_8072740 - thumb_func_end sub_8079534 - - thumb_func_start duplicate_obj_of_side_rel2move_in_transparent_mode -duplicate_obj_of_side_rel2move_in_transparent_mode: @ 80795E4 - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - bl obj_id_for_side_relative_to_move - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0xFF - beq _0807964E - movs r6, 0 - ldr r2, _08079640 @ =gSprites - lsls r0, r1, 4 - adds r0, r1 - lsls r1, r0, 2 -_08079600: - lsls r0, r6, 4 - adds r0, r6 - lsls r0, 2 - adds r4, r0, r2 - adds r5, r4, 0 - adds r5, 0x3E - ldrb r0, [r5] - lsls r0, 31 - cmp r0, 0 - bne _08079644 - adds r0, r4, 0 - adds r1, r2 - movs r2, 0x44 - bl memcpy - ldrb r1, [r4, 0x1] - movs r2, 0xD - negs r2, r2 - adds r0, r2, 0 - ands r1, r0 - movs r0, 0x4 - orrs r1, r0 - strb r1, [r4, 0x1] - ldrb r0, [r5] - adds r2, 0x8 - adds r1, r2, 0 - ands r0, r1 - strb r0, [r5] - lsls r0, r6, 16 - asrs r0, 16 - b _08079652 - .align 2, 0 -_08079640: .4byte gSprites -_08079644: - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - cmp r6, 0x3F - bls _08079600 -_0807964E: - movs r0, 0x1 - negs r0, r0 -_08079652: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end duplicate_obj_of_side_rel2move_in_transparent_mode - - thumb_func_start obj_delete_but_dont_free_vram -obj_delete_but_dont_free_vram: @ 8079658 - push {lr} - adds r3, r0, 0 - adds r3, 0x3F - ldrb r1, [r3] - movs r2, 0x40 - orrs r1, r2 - strb r1, [r3] - bl DestroySprite - pop {r0} - bx r0 - thumb_func_end obj_delete_but_dont_free_vram - - thumb_func_start sub_8079670 -sub_8079670: @ 8079670 - push {r4-r6,lr} - lsls r0, 24 - lsrs r2, r0, 24 - movs r5, 0 - movs r3, 0 - ldr r4, _080796E4 @ =gBattleAnimArgs - movs r0, 0x4 - ldrsh r1, [r4, r0] - movs r6, 0 - ldrsh r0, [r4, r6] - cmp r1, r0 - ble _0807968A - movs r3, 0x1 -_0807968A: - cmp r1, r0 - bge _08079690 - ldr r3, _080796E8 @ =0x0000ffff -_08079690: - movs r0, 0x6 - ldrsh r1, [r4, r0] - movs r6, 0x2 - ldrsh r0, [r4, r6] - cmp r1, r0 - ble _0807969E - movs r5, 0x1 -_0807969E: - cmp r1, r0 - bge _080796A4 - ldr r5, _080796E8 @ =0x0000ffff -_080796A4: - ldr r0, _080796EC @ =gTasks - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 3 - adds r1, r0 - movs r2, 0 - strh r2, [r1, 0x8] - ldrh r0, [r4, 0x8] - strh r0, [r1, 0xA] - strh r2, [r1, 0xC] - ldrh r0, [r4] - strh r0, [r1, 0xE] - ldrh r0, [r4, 0x2] - strh r0, [r1, 0x10] - strh r3, [r1, 0x12] - strh r5, [r1, 0x14] - ldrh r0, [r4, 0x4] - strh r0, [r1, 0x16] - ldrh r0, [r4, 0x6] - strh r0, [r1, 0x18] - ldr r3, _080796F0 @ =REG_BLDALPHA - ldrh r0, [r4, 0x2] - lsls r0, 8 - ldrh r2, [r4] - orrs r0, r2 - strh r0, [r3] - ldr r0, _080796F4 @ =sub_80796F8 - str r0, [r1] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080796E4: .4byte gBattleAnimArgs -_080796E8: .4byte 0x0000ffff -_080796EC: .4byte gTasks -_080796F0: .4byte REG_BLDALPHA -_080796F4: .4byte sub_80796F8 - thumb_func_end sub_8079670 - - thumb_func_start sub_80796F8 -sub_80796F8: @ 80796F8 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, _08079744 @ =gTasks - adds r3, r0, r1 - ldrh r0, [r3, 0x8] - adds r0, 0x1 - strh r0, [r3, 0x8] - lsls r0, 16 - asrs r0, 16 - movs r2, 0xA - ldrsh r1, [r3, r2] - cmp r0, r1 - ble _08079786 - movs r0, 0 - strh r0, [r3, 0x8] - ldrh r0, [r3, 0xC] - adds r0, 0x1 - strh r0, [r3, 0xC] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08079748 - ldrh r2, [r3, 0xE] - movs r5, 0xE - ldrsh r1, [r3, r5] - movs r5, 0x16 - ldrsh r0, [r3, r5] - cmp r1, r0 - beq _0807975C - ldrh r0, [r3, 0x12] - adds r0, r2, r0 - strh r0, [r3, 0xE] - b _0807975C - .align 2, 0 -_08079744: .4byte gTasks -_08079748: - ldrh r2, [r3, 0x10] - movs r0, 0x10 - ldrsh r1, [r3, r0] - movs r5, 0x18 - ldrsh r0, [r3, r5] - cmp r1, r0 - beq _0807975C - ldrh r0, [r3, 0x14] - adds r0, r2, r0 - strh r0, [r3, 0x10] -_0807975C: - ldr r2, _0807978C @ =REG_BLDALPHA - ldrh r0, [r3, 0x10] - lsls r0, 8 - ldrh r1, [r3, 0xE] - orrs r0, r1 - strh r0, [r2] - movs r0, 0xE - ldrsh r1, [r3, r0] - movs r2, 0x16 - ldrsh r0, [r3, r2] - cmp r1, r0 - bne _08079786 - movs r5, 0x10 - ldrsh r1, [r3, r5] - movs r2, 0x18 - ldrsh r0, [r3, r2] - cmp r1, r0 - bne _08079786 - adds r0, r4, 0 - bl move_anim_task_del -_08079786: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0807978C: .4byte REG_BLDALPHA - thumb_func_end sub_80796F8 - - thumb_func_start sub_8079790 -sub_8079790: @ 8079790 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080797B0 @ =gBattleAnimArgs - ldrb r0, [r0] - bl obj_id_for_side_relative_to_move - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0xFF - bne _080797B4 - adds r0, r4, 0 - bl move_anim_task_del - b _080797DA - .align 2, 0 -_080797B0: .4byte gBattleAnimArgs -_080797B4: - ldr r1, _080797E0 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r2, _080797E4 @ =gSprites - lsls r1, r3, 4 - adds r1, r3 - lsls r1, 2 - adds r1, r2 - ldrb r1, [r1, 0x5] - lsrs r1, 4 - lsls r1, 4 - ldr r3, _080797E8 @ =0x00000101 - adds r2, r3, 0 - adds r1, r2 - strh r1, [r0, 0x8] - bl sub_80797EC -_080797DA: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080797E0: .4byte gTasks -_080797E4: .4byte gSprites -_080797E8: .4byte 0x00000101 - thumb_func_end sub_8079790 - - thumb_func_start sub_80797EC -sub_80797EC: @ 80797EC - ldr r3, _0807980C @ =gBattleAnimArgs - ldrh r1, [r3, 0x2] - movs r2, 0 - strh r1, [r0, 0xA] - strh r2, [r0, 0xC] - ldrh r1, [r3, 0x4] - strh r1, [r0, 0xE] - strh r2, [r0, 0x10] - ldrh r1, [r3, 0x6] - strh r1, [r0, 0x12] - strh r2, [r0, 0x14] - ldrh r1, [r3, 0x8] - strh r1, [r0, 0x16] - ldr r1, _08079810 @ =sub_8079814 - str r1, [r0] - bx lr - .align 2, 0 -_0807980C: .4byte gBattleAnimArgs -_08079810: .4byte sub_8079814 - thumb_func_end sub_80797EC - - thumb_func_start sub_8079814 -sub_8079814: @ 8079814 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - adds r5, r0, 0 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _0807986C @ =gTasks - adds r4, r0, r1 - ldrh r0, [r4, 0x10] - adds r0, 0x1 - strh r0, [r4, 0x10] - lsls r0, 16 - asrs r0, 16 - movs r2, 0x12 - ldrsh r1, [r4, r2] - cmp r0, r1 - blt _080798A4 - movs r0, 0 - strh r0, [r4, 0x10] - movs r1, 0x14 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _08079870 - ldrh r2, [r4, 0xC] - adds r2, 0x1 - strh r2, [r4, 0xC] - ldrh r0, [r4, 0x8] - lsls r2, 24 - lsrs r2, 24 - ldrh r3, [r4, 0xA] - movs r1, 0xF - bl BlendPalette - movs r2, 0xC - ldrsh r1, [r4, r2] - movs r2, 0xE - ldrsh r0, [r4, r2] - cmp r1, r0 - bne _080798A4 - movs r0, 0x1 - strh r0, [r4, 0x14] - b _080798A4 - .align 2, 0 -_0807986C: .4byte gTasks -_08079870: - ldrh r2, [r4, 0xC] - subs r2, 0x1 - strh r2, [r4, 0xC] - ldrh r0, [r4, 0x8] - lsls r2, 24 - lsrs r2, 24 - ldrh r3, [r4, 0xA] - movs r1, 0xF - bl BlendPalette - movs r0, 0xC - ldrsh r1, [r4, r0] - cmp r1, 0 - bne _080798A4 - ldrh r0, [r4, 0x16] - subs r0, 0x1 - strh r0, [r4, 0x16] - lsls r0, 16 - cmp r0, 0 - beq _0807989E - strh r1, [r4, 0x10] - strh r1, [r4, 0x14] - b _080798A4 -_0807989E: - adds r0, r5, 0 - bl move_anim_task_del -_080798A4: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8079814 - - thumb_func_start sub_80798AC -sub_80798AC: @ 80798AC - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080798CC @ =gBattleAnimArgs - ldrh r0, [r0] - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0xFF - bne _080798D0 - adds r0, r4, 0 - bl move_anim_task_del - b _080798E6 - .align 2, 0 -_080798CC: .4byte gBattleAnimArgs -_080798D0: - ldr r1, _080798EC @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - lsls r1, r2, 4 - ldr r2, _080798F0 @ =0x00000101 - adds r1, r2 - strh r1, [r0, 0x8] - bl sub_80797EC -_080798E6: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080798EC: .4byte gTasks -_080798F0: .4byte 0x00000101 - thumb_func_end sub_80798AC - - thumb_func_start sub_80798F4 -sub_80798F4: @ 80798F4 - push {r4,lr} - adds r3, r0, 0 - adds r4, r1, 0 - lsls r4, 24 - lsrs r4, 24 - movs r1, 0 - strh r1, [r3, 0x16] - strh r1, [r3, 0x18] - strh r1, [r3, 0x1A] - strh r4, [r3, 0x26] - movs r0, 0x80 - lsls r0, 1 - strh r0, [r3, 0x1C] - strh r0, [r3, 0x1E] - strh r1, [r3, 0x20] - adds r0, r3, 0 - adds r0, 0x22 - adds r3, 0x24 - adds r1, r3, 0 - bl sub_8079BF4 - adds r0, r4, 0 - movs r1, 0 - bl sub_8078E70 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80798F4 - - thumb_func_start sub_807992C -sub_807992C: @ 807992C - push {r4-r6,lr} - adds r4, r0, 0 - ldr r5, _080799CC @ =gUnknown_0202F7D4 - movs r1, 0x22 - ldrsh r0, [r4, r1] - movs r2, 0x24 - ldrsh r1, [r4, r2] - bl sub_8079BFC - movs r3, 0x16 - ldrsh r1, [r4, r3] - lsls r1, 3 - adds r1, r0, r1 - str r1, [r5] - movs r6, 0 - ldrsh r2, [r1, r6] - ldr r0, _080799D0 @ =0x00007ffe - cmp r2, r0 - beq _080799D4 - cmp r2, r0 - bgt _08079A34 - subs r0, 0x1 - cmp r2, r0 - beq _080799DA - ldrb r0, [r1, 0x5] - cmp r0, 0 - bne _0807997A - ldrh r0, [r1] - strh r0, [r4, 0x1C] - ldrh r0, [r1, 0x2] - strh r0, [r4, 0x1E] - ldrb r0, [r1, 0x4] - strh r0, [r4, 0x20] - ldrh r0, [r4, 0x16] - adds r0, 0x1 - strh r0, [r4, 0x16] - adds r0, r1, 0 - adds r0, 0x8 - str r0, [r5] -_0807997A: - ldr r1, [r5] - ldrh r0, [r1] - ldrh r2, [r4, 0x1C] - adds r0, r2 - strh r0, [r4, 0x1C] - ldrh r0, [r1, 0x2] - ldrh r3, [r4, 0x1E] - adds r0, r3 - strh r0, [r4, 0x1E] - ldrh r0, [r4, 0x20] - ldrb r1, [r1, 0x4] - adds r0, r1 - strh r0, [r4, 0x20] - ldrh r0, [r4, 0x26] - lsls r0, 24 - lsrs r0, 24 - movs r6, 0x1C - ldrsh r1, [r4, r6] - movs r3, 0x1E - ldrsh r2, [r4, r3] - ldrh r3, [r4, 0x20] - bl obj_id_set_rotscale - ldrh r0, [r4, 0x26] - lsls r0, 24 - lsrs r0, 24 - bl sub_8079A64 - ldrh r0, [r4, 0x18] - adds r0, 0x1 - strh r0, [r4, 0x18] - lsls r0, 16 - asrs r0, 16 - ldr r1, [r5] - ldrb r1, [r1, 0x5] - cmp r0, r1 - blt _08079A5A - movs r0, 0 - strh r0, [r4, 0x18] - b _08079A2C - .align 2, 0 -_080799CC: .4byte gUnknown_0202F7D4 -_080799D0: .4byte 0x00007ffe -_080799D4: - ldrh r0, [r1, 0x2] - strh r0, [r4, 0x16] - b _08079A5A -_080799DA: - ldrh r2, [r1, 0x2] - movs r6, 0x2 - ldrsh r0, [r1, r6] - cmp r0, 0 - beq _08079A2C - ldrh r1, [r4, 0x1A] - movs r3, 0x1A - ldrsh r0, [r4, r3] - cmp r0, 0 - beq _080799FA - subs r0, r1, 0x1 - strh r0, [r4, 0x1A] - lsls r0, 16 - cmp r0, 0 - bne _080799FC - b _08079A2C -_080799FA: - strh r2, [r4, 0x1A] -_080799FC: - movs r6, 0x16 - ldrsh r0, [r4, r6] - cmp r0, 0 - beq _08079A5A - ldr r3, _08079A24 @ =gUnknown_0202F7D4 - ldr r5, _08079A28 @ =0x00007ffd -_08079A08: - ldrh r2, [r4, 0x16] - subs r1, r2, 0x1 - strh r1, [r4, 0x16] - ldr r0, [r3] - subs r0, 0x8 - str r0, [r3] - movs r6, 0 - ldrsh r0, [r0, r6] - cmp r0, r5 - beq _08079A58 - lsls r0, r1, 16 - cmp r0, 0 - bne _08079A08 - b _08079A5A - .align 2, 0 -_08079A24: .4byte gUnknown_0202F7D4 -_08079A28: .4byte 0x00007ffd -_08079A2C: - ldrh r0, [r4, 0x16] - adds r0, 0x1 - strh r0, [r4, 0x16] - b _08079A5A -_08079A34: - ldr r2, _08079A54 @ =gSprites - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0 - strh r1, [r0, 0x26] - ldrh r0, [r4, 0x26] - lsls r0, 24 - lsrs r0, 24 - bl sub_8078F40 - movs r0, 0 - b _08079A5C - .align 2, 0 -_08079A54: .4byte gSprites -_08079A58: - strh r2, [r4, 0x16] -_08079A5A: - movs r0, 0x1 -_08079A5C: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_807992C - - thumb_func_start sub_8079A64 -sub_8079A64: @ 8079A64 - push {r4,r5,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - bl sub_8079B10 - lsls r0, 16 - lsrs r0, 15 - movs r1, 0x40 - subs r5, r1, r0 - ldr r1, _08079AB0 @ =gSprites - lsls r0, r4, 4 - adds r0, r4 - lsls r0, 2 - adds r4, r0, r1 - ldrb r1, [r4, 0x3] - lsls r1, 26 - lsrs r1, 27 - lsls r0, r5, 8 - ldr r2, _08079AB4 @ =gOamMatrices - lsls r1, 3 - adds r1, r2 - movs r2, 0x6 - ldrsh r1, [r1, r2] - bl __divsi3 - cmp r0, 0x80 - ble _08079AA0 - movs r0, 0x80 -_08079AA0: - subs r0, r5, r0 - lsrs r1, r0, 31 - adds r0, r1 - asrs r0, 1 - strh r0, [r4, 0x26] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08079AB0: .4byte gSprites -_08079AB4: .4byte gOamMatrices - thumb_func_end sub_8079A64 - - thumb_func_start sub_8079AB8 -sub_8079AB8: @ 8079AB8 - push {r4,r5,lr} - adds r4, r0, 0 - adds r0, r1, 0 - lsls r4, 24 - lsrs r4, 24 - lsls r0, 24 - lsrs r0, 24 - bl sub_8079B10 - lsls r0, 16 - lsrs r0, 15 - movs r1, 0x40 - subs r5, r1, r0 - ldr r1, _08079B08 @ =gSprites - lsls r0, r4, 4 - adds r0, r4 - lsls r0, 2 - adds r4, r0, r1 - ldrb r1, [r4, 0x3] - lsls r1, 26 - lsrs r1, 27 - lsls r0, r5, 8 - ldr r2, _08079B0C @ =gOamMatrices - lsls r1, 3 - adds r1, r2 - movs r2, 0x6 - ldrsh r1, [r1, r2] - bl __divsi3 - cmp r0, 0x80 - ble _08079AF8 - movs r0, 0x80 -_08079AF8: - subs r0, r5, r0 - lsrs r1, r0, 31 - adds r0, r1 - asrs r0, 1 - strh r0, [r4, 0x26] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08079B08: .4byte gSprites -_08079B0C: .4byte gOamMatrices - thumb_func_end sub_8079AB8 - - thumb_func_start sub_8079B10 -sub_8079B10: @ 8079B10 - push {r4-r6,lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r1, _08079B44 @ =gSprites - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r0, r1 - ldrh r0, [r0, 0x2E] - lsls r0, 24 - movs r4, 0 - ldr r1, _08079B48 @ =gUnknown_02024BE0 - ldr r6, _08079B4C @ =gMonBackPicCoords - lsrs r5, r0, 22 -_08079B2C: - adds r0, r4, r1 - ldrb r0, [r0] - cmp r0, r2 - bne _08079BE0 - bl sub_8076BE0 - lsls r0, 24 - cmp r0, 0 - beq _08079B54 - ldr r0, _08079B50 @ =0x02019348 - ldrh r1, [r0] - b _08079B96 - .align 2, 0 -_08079B44: .4byte gSprites -_08079B48: .4byte gUnknown_02024BE0 -_08079B4C: .4byte gMonBackPicCoords -_08079B50: .4byte 0x02019348 -_08079B54: - lsls r0, r4, 24 - lsrs r0, 24 - bl battle_side_get_owner - lsls r0, 24 - cmp r0, 0 - bne _08079B9E - ldr r0, _08079B88 @ =0x02017800 - adds r1, r5, r0 - ldrh r0, [r1, 0x2] - cmp r0, 0 - bne _08079B94 - ldr r1, _08079B8C @ =gUnknown_02024A6A - lsls r0, r4, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08079B90 @ =gPlayerParty - adds r0, r1 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r1, r0, 16 - b _08079B96 - .align 2, 0 -_08079B88: .4byte 0x02017800 -_08079B8C: .4byte gUnknown_02024A6A -_08079B90: .4byte gPlayerParty -_08079B94: - ldrh r1, [r1, 0x2] -_08079B96: - lsls r0, r1, 2 - adds r0, r6 - ldrb r0, [r0, 0x1] - b _08079BEC -_08079B9E: - ldr r0, _08079BC4 @ =0x02017800 - adds r1, r5, r0 - ldrh r0, [r1, 0x2] - cmp r0, 0 - bne _08079BD0 - ldr r1, _08079BC8 @ =gUnknown_02024A6A - lsls r0, r4, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08079BCC @ =gEnemyParty - adds r0, r1 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r1, r0, 16 - b _08079BD2 - .align 2, 0 -_08079BC4: .4byte 0x02017800 -_08079BC8: .4byte gUnknown_02024A6A -_08079BCC: .4byte gEnemyParty -_08079BD0: - ldrh r1, [r1, 0x2] -_08079BD2: - ldr r0, _08079BDC @ =gMonFrontPicCoords - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1, 0x1] - b _08079BEC - .align 2, 0 -_08079BDC: .4byte gMonFrontPicCoords -_08079BE0: - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x3 - bls _08079B2C - movs r0, 0x40 -_08079BEC: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8079B10 - - thumb_func_start sub_8079BF4 -sub_8079BF4: @ 8079BF4 - strh r2, [r0] - asrs r2, 16 - strh r2, [r1] - bx lr - thumb_func_end sub_8079BF4 - - thumb_func_start sub_8079BFC -sub_8079BFC: @ 8079BFC - lsls r0, 16 - lsrs r0, 16 - lsls r1, 16 - orrs r0, r1 - bx lr - thumb_func_end sub_8079BFC - - thumb_func_start sub_8079C08 -sub_8079C08: @ 8079C08 - push {r4-r6,lr} - mov r6, r8 - push {r6} - mov r8, r0 - adds r5, r3, 0 - ldr r0, [sp, 0x14] - ldr r4, [sp, 0x18] - ldr r6, [sp, 0x1C] - lsls r1, 24 - lsrs r1, 24 - lsls r2, 16 - lsrs r2, 16 - lsls r5, 16 - lsrs r5, 16 - lsls r0, 16 - lsrs r0, 16 - lsls r4, 16 - lsrs r4, 16 - lsls r6, 16 - lsrs r6, 16 - mov r3, r8 - strh r6, [r3, 0x18] - strh r1, [r3, 0x26] - strh r2, [r3, 0x1A] - strh r5, [r3, 0x1C] - strh r0, [r3, 0x22] - strh r4, [r3, 0x24] - lsls r0, 16 - asrs r0, 16 - lsls r2, 16 - asrs r2, 16 - subs r0, r2 - adds r1, r6, 0 - bl __divsi3 - mov r1, r8 - strh r0, [r1, 0x1E] - lsls r4, 16 - asrs r4, 16 - lsls r5, 16 - asrs r5, 16 - subs r4, r5 - adds r0, r4, 0 - adds r1, r6, 0 - bl __divsi3 - mov r3, r8 - strh r0, [r3, 0x20] - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8079C08 - - thumb_func_start sub_8079C74 -sub_8079C74: @ 8079C74 - push {r4,lr} - adds r4, r0, 0 - ldrh r1, [r4, 0x18] - movs r2, 0x18 - ldrsh r0, [r4, r2] - cmp r0, 0 - bne _08079C86 - movs r0, 0 - b _08079CE2 -_08079C86: - subs r0, r1, 0x1 - strh r0, [r4, 0x18] - lsls r0, 16 - cmp r0, 0 - beq _08079CA0 - ldrh r0, [r4, 0x1E] - ldrh r3, [r4, 0x1A] - adds r0, r3 - strh r0, [r4, 0x1A] - ldrh r0, [r4, 0x20] - ldrh r1, [r4, 0x1C] - adds r0, r1 - b _08079CA6 -_08079CA0: - ldrh r0, [r4, 0x22] - strh r0, [r4, 0x1A] - ldrh r0, [r4, 0x24] -_08079CA6: - strh r0, [r4, 0x1C] - ldrh r0, [r4, 0x26] - lsls r0, 24 - lsrs r0, 24 - movs r2, 0x1A - ldrsh r1, [r4, r2] - movs r3, 0x1C - ldrsh r2, [r4, r3] - movs r3, 0 - bl obj_id_set_rotscale - movs r0, 0x18 - ldrsh r3, [r4, r0] - cmp r3, 0 - beq _08079CD0 - ldrh r0, [r4, 0x26] - lsls r0, 24 - lsrs r0, 24 - bl sub_8079A64 - b _08079CE0 -_08079CD0: - ldr r2, _08079CE8 @ =gSprites - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - strh r3, [r0, 0x26] -_08079CE0: - ldrb r0, [r4, 0x18] -_08079CE2: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08079CE8: .4byte gSprites - thumb_func_end sub_8079C74 - - thumb_func_start sub_8079CEC -sub_8079CEC: @ 8079CEC - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r0, _08079D18 @ =gUnknown_0202F7BE - ldrb r0, [r0] - movs r1, 0 - cmp r0, 0x1E - bls _08079D0A - movs r1, 0x1 - cmp r0, 0x64 - bls _08079D0A - movs r1, 0x3 - cmp r0, 0xC8 - bhi _08079D0A - movs r1, 0x2 -_08079D0A: - ldr r0, _08079D1C @ =gBattleAnimArgs - strh r1, [r0, 0xE] - adds r0, r2, 0 - bl move_anim_task_del - pop {r0} - bx r0 - .align 2, 0 -_08079D18: .4byte gUnknown_0202F7BE -_08079D1C: .4byte gBattleAnimArgs - thumb_func_end sub_8079CEC - - thumb_func_start unref_sub_8079D20 -unref_sub_8079D20: @ 8079D20 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r4, r0, 24 - adds r7, r4, 0 - ldr r6, _08079E14 @ =gUnknown_0202F7C9 - ldrb r0, [r6] - bl b_side_obj__get_some_boolean - lsls r0, 24 - cmp r0, 0 - beq _08079D60 - ldr r2, _08079E18 @ =gSprites - ldr r1, _08079E1C @ =gUnknown_02024BE0 - ldrb r0, [r6] - adds r0, r1 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - movs r0, 0x3 - adds r2, r4, 0 - ands r2, r0 - lsls r2, 2 - ldrb r3, [r1, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r3 - orrs r0, r2 - strb r0, [r1, 0x5] -_08079D60: - ldr r0, _08079E20 @ =gUnknown_0202F7C8 - mov r8, r0 - ldrb r0, [r0] - bl b_side_obj__get_some_boolean - lsls r0, 24 - cmp r0, 0 - beq _08079D98 - ldr r2, _08079E18 @ =gSprites - ldr r1, _08079E1C @ =gUnknown_02024BE0 - mov r3, r8 - ldrb r0, [r3] - adds r0, r1 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - movs r0, 0x3 - adds r2, r4, 0 - ands r2, r0 - lsls r2, 2 - ldrb r3, [r1, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r3 - orrs r0, r2 - strb r0, [r1, 0x5] -_08079D98: - ldrb r0, [r6] - movs r5, 0x2 - eors r0, r5 - bl b_side_obj__get_some_boolean - lsls r0, 24 - cmp r0, 0 - beq _08079DD0 - ldr r2, _08079E18 @ =gSprites - ldr r1, _08079E1C @ =gUnknown_02024BE0 - ldrb r0, [r6] - eors r0, r5 - adds r0, r1 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - movs r0, 0x3 - adds r2, r4, 0 - ands r2, r0 - lsls r2, 2 - ldrb r3, [r1, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r3 - orrs r0, r2 - strb r0, [r1, 0x5] -_08079DD0: - mov r1, r8 - ldrb r0, [r1] - eors r0, r5 - bl b_side_obj__get_some_boolean - lsls r0, 24 - cmp r0, 0 - beq _08079E08 - ldr r2, _08079E18 @ =gSprites - ldr r1, _08079E1C @ =gUnknown_02024BE0 - mov r3, r8 - ldrb r0, [r3] - eors r0, r5 - adds r0, r1 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - movs r0, 0x3 - ands r7, r0 - lsls r3, r7, 2 - ldrb r2, [r1, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - orrs r0, r3 - strb r0, [r1, 0x5] -_08079E08: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08079E14: .4byte gUnknown_0202F7C9 -_08079E18: .4byte gSprites -_08079E1C: .4byte gUnknown_02024BE0 -_08079E20: .4byte gUnknown_0202F7C8 - thumb_func_end unref_sub_8079D20 - - thumb_func_start sub_8079E24 -sub_8079E24: @ 8079E24 - push {r4-r6,lr} - movs r5, 0 - ldr r0, _08079E84 @ =gUnknown_02024A68 - ldrb r0, [r0] - cmp r5, r0 - bge _08079E7E - ldr r6, _08079E88 @ =gSprites -_08079E32: - lsls r0, r5, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl b_side_obj__get_some_boolean - lsls r0, 24 - cmp r0, 0 - beq _08079E74 - adds r0, r4, 0 - bl sub_8079E90 - ldr r3, _08079E8C @ =gUnknown_02024BE0 - adds r3, r5, r3 - ldrb r2, [r3] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r6 - adds r1, 0x43 - strb r0, [r1] - ldrb r1, [r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - ldrb r2, [r0, 0x5] - movs r3, 0xD - negs r3, r3 - adds r1, r3, 0 - ands r2, r1 - movs r1, 0x8 - orrs r2, r1 - strb r2, [r0, 0x5] -_08079E74: - adds r5, 0x1 - ldr r0, _08079E84 @ =gUnknown_02024A68 - ldrb r0, [r0] - cmp r5, r0 - blt _08079E32 -_08079E7E: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08079E84: .4byte gUnknown_02024A68 -_08079E88: .4byte gSprites -_08079E8C: .4byte gUnknown_02024BE0 - thumb_func_end sub_8079E24 - - thumb_func_start sub_8079E90 -sub_8079E90: @ 8079E90 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl sub_8076BE0 - lsls r0, 24 - cmp r0, 0 - beq _08079EAC - cmp r4, 0x2 - bne _08079EA8 - movs r0, 0x1E - b _08079ECC -_08079EA8: - movs r0, 0x28 - b _08079ECC -_08079EAC: - adds r0, r4, 0 - bl battle_get_per_side_status - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x1E - cmp r0, 0 - beq _08079ECA - movs r1, 0x14 - cmp r0, 0x2 - beq _08079ECA - movs r1, 0x32 - cmp r0, 0x1 - bne _08079ECA - movs r1, 0x28 -_08079ECA: - adds r0, r1, 0 -_08079ECC: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8079E90 - - thumb_func_start sub_8079ED4 -sub_8079ED4: @ 8079ED4 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - bl battle_get_per_side_status - lsls r0, 24 - lsrs r4, r0, 24 - bl sub_8076BE0 - lsls r0, 24 - cmp r0, 0 - beq _08079EF0 - movs r0, 0x2 - b _08079F08 -_08079EF0: - cmp r4, 0 - beq _08079EF8 - cmp r4, 0x3 - bne _08079F00 -_08079EF8: - ldr r0, _08079EFC @ =REG_BG2CNT - b _08079F02 - .align 2, 0 -_08079EFC: .4byte REG_BG2CNT -_08079F00: - ldr r0, _08079F10 @ =REG_BG1CNT -_08079F02: - ldr r0, [r0] - lsls r0, 30 - lsrs r0, 30 -_08079F08: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08079F10: .4byte REG_BG1CNT - thumb_func_end sub_8079ED4 - - thumb_func_start battle_get_per_side_status_permutated -battle_get_per_side_status_permutated: @ 8079F14 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl sub_8076BE0 - lsls r0, 24 - cmp r0, 0 - bne _08079F3A - adds r0, r4, 0 - bl battle_get_per_side_status - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _08079F36 - cmp r0, 0x3 - bne _08079F3A -_08079F36: - movs r0, 0x2 - b _08079F3C -_08079F3A: - movs r0, 0x1 -_08079F3C: - pop {r4} - pop {r1} - bx r1 - thumb_func_end battle_get_per_side_status_permutated - - thumb_func_start sub_8079F44 -sub_8079F44: @ 8079F44 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x18 - ldr r4, [sp, 0x38] - ldr r5, [sp, 0x3C] - lsls r0, 16 - lsrs r6, r0, 16 - lsls r1, 24 - lsrs r1, 24 - mov r8, r1 - lsls r2, 24 - lsrs r7, r2, 24 - lsls r3, 16 - lsrs r3, 16 - mov r9, r3 - lsls r4, 16 - lsrs r4, 16 - str r4, [sp, 0x10] - lsls r5, 24 - lsrs r5, 24 - str r5, [sp, 0x14] - lsls r0, r7, 3 - ldr r1, _08079FE0 @ =gUnknown_0837F5E0 - adds r0, r1 - bl LoadSpriteSheet - lsls r0, 16 - lsrs r0, 16 - mov r10, r0 - ldr r1, _08079FE4 @ =gSpriteTemplate_837F5B0 - lsls r0, r7, 1 - adds r0, r7 - lsls r0, 3 - adds r0, r1 - ldrh r0, [r0, 0x2] - bl AllocSpritePalette - lsls r0, 24 - lsrs r4, r0, 24 - mov r0, r8 - cmp r0, 0 - bne _08079FF0 - adds r0, r6, 0 - ldr r1, [sp, 0x44] - ldr r2, [sp, 0x40] - bl species_and_otid_get_pal - lsls r1, r4, 20 - movs r2, 0x80 - lsls r2, 17 - adds r1, r2 - lsrs r1, 16 - movs r2, 0x20 - bl LoadCompressedPalette - lsls r0, r6, 3 - ldr r1, _08079FE8 @ =gMonFrontPicTable - adds r0, r1 - ldr r2, _08079FEC @ =gMonFrontPicCoords - lsls r5, r6, 2 - adds r2, r5, r2 - ldrb r1, [r2] - ldrb r2, [r2, 0x1] - movs r3, 0x80 - lsls r3, 18 - str r3, [sp] - str r6, [sp, 0x4] - ldr r4, [sp, 0x40] - str r4, [sp, 0x8] - movs r4, 0x1 - str r4, [sp, 0xC] - bl LoadSpecialPokePic - b _0807A02E - .align 2, 0 -_08079FE0: .4byte gUnknown_0837F5E0 -_08079FE4: .4byte gSpriteTemplate_837F5B0 -_08079FE8: .4byte gMonFrontPicTable -_08079FEC: .4byte gMonFrontPicCoords -_08079FF0: - adds r0, r6, 0 - ldr r1, [sp, 0x44] - ldr r2, [sp, 0x40] - bl species_and_otid_get_pal - lsls r1, r4, 20 - movs r2, 0x80 - lsls r2, 17 - adds r1, r2 - lsrs r1, 16 - movs r2, 0x20 - bl LoadCompressedPalette - lsls r0, r6, 3 - ldr r1, _0807A068 @ =gMonBackPicTable - adds r0, r1 - ldr r2, _0807A06C @ =gMonBackPicCoords - lsls r5, r6, 2 - adds r2, r5, r2 - ldrb r1, [r2] - ldrb r2, [r2, 0x1] - movs r3, 0x80 - lsls r3, 18 - str r3, [sp] - str r6, [sp, 0x4] - ldr r4, [sp, 0x40] - str r4, [sp, 0x8] - movs r4, 0 - str r4, [sp, 0xC] - bl LoadSpecialPokePic -_0807A02E: - movs r2, 0x80 - lsls r2, 18 - mov r6, r10 - lsls r0, r6, 5 - ldr r1, _0807A070 @ =0x06010000 - adds r0, r1 - ldr r1, _0807A074 @ =0x040000d4 - str r2, [r1] - str r0, [r1, 0x4] - ldr r0, _0807A078 @ =0x84000200 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - mov r2, r8 - cmp r2, 0 - bne _0807A084 - lsls r0, r7, 1 - adds r0, r7 - lsls r0, 3 - ldr r1, _0807A07C @ =gSpriteTemplate_837F5B0 - adds r0, r1 - mov r3, r9 - lsls r1, r3, 16 - asrs r1, 16 - ldr r2, _0807A080 @ =gMonFrontPicCoords - adds r2, r5, r2 - ldrb r2, [r2, 0x1] - ldr r4, [sp, 0x10] - adds r2, r4 - b _0807A09E - .align 2, 0 -_0807A068: .4byte gMonBackPicTable -_0807A06C: .4byte gMonBackPicCoords -_0807A070: .4byte 0x06010000 -_0807A074: .4byte 0x040000d4 -_0807A078: .4byte 0x84000200 -_0807A07C: .4byte gSpriteTemplate_837F5B0 -_0807A080: .4byte gMonFrontPicCoords -_0807A084: - lsls r0, r7, 1 - adds r0, r7 - lsls r0, 3 - ldr r1, _0807A0E4 @ =gSpriteTemplate_837F5B0 - adds r0, r1 - mov r6, r9 - lsls r1, r6, 16 - asrs r1, 16 - ldr r2, _0807A0E8 @ =gMonBackPicCoords - adds r2, r5, r2 - ldrb r2, [r2, 0x1] - ldr r3, [sp, 0x10] - adds r2, r3 -_0807A09E: - lsls r2, 16 - asrs r2, 16 - ldr r3, [sp, 0x14] - bl CreateSprite - lsls r0, 24 - lsrs r4, r0, 24 - bl sub_8076BE0 - lsls r0, 24 - cmp r0, 0 - beq _0807A0D0 - ldr r3, _0807A0EC @ =gSprites - lsls r0, r4, 4 - adds r0, r4 - lsls r0, 2 - adds r1, r3, 0 - adds r1, 0x10 - adds r1, r0, r1 - ldr r2, _0807A0F0 @ =gSpriteAffineAnimTable_81E7C18 - str r2, [r1] - adds r0, r3 - movs r1, 0 - bl StartSpriteAffineAnim -_0807A0D0: - adds r0, r4, 0 - add sp, 0x18 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0807A0E4: .4byte gSpriteTemplate_837F5B0 -_0807A0E8: .4byte gMonBackPicCoords -_0807A0EC: .4byte gSprites -_0807A0F0: .4byte gSpriteAffineAnimTable_81E7C18 - thumb_func_end sub_8079F44 - - thumb_func_start sub_807A0F4 -sub_807A0F4: @ 807A0F4 - push {lr} - bl DestroySpriteAndFreeResources - pop {r0} - bx r0 - thumb_func_end sub_807A0F4 - - thumb_func_start sub_807A100 -sub_807A100: @ 807A100 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r1, 24 - lsrs r1, 24 - mov r9, r1 - bl sub_8076BE0 - lsls r0, 24 - cmp r0, 0 - beq _0807A1A4 - ldr r2, _0807A130 @ =0x02019348 - ldrb r1, [r2, 0x4] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0807A134 - ldrh r7, [r2, 0x2] - ldr r2, [r2, 0x10] - b _0807A138 - .align 2, 0 -_0807A130: .4byte 0x02019348 -_0807A134: - ldrh r7, [r2] - ldr r2, [r2, 0x8] -_0807A138: - cmp r7, 0xC9 - bne _0807A184 - movs r0, 0xC0 - lsls r0, 18 - ands r0, r2 - lsrs r0, 18 - movs r1, 0xC0 - lsls r1, 10 - ands r1, r2 - lsrs r1, 12 - orrs r0, r1 - movs r1, 0xC0 - lsls r1, 2 - ands r1, r2 - lsrs r1, 6 - orrs r0, r1 - movs r1, 0x3 - ands r1, r2 - orrs r0, r1 - movs r1, 0x1C - bl __umodsi3 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0 - bne _0807A170 - movs r0, 0xC9 - b _0807A17A -_0807A170: - movs r1, 0xCE - lsls r1, 1 - adds r0, r1 - lsls r0, 16 - lsrs r0, 16 -_0807A17A: - lsls r1, r0, 2 - ldr r0, _0807A180 @ =gMonBackPicCoords - b _0807A33C - .align 2, 0 -_0807A180: .4byte gMonBackPicCoords -_0807A184: - ldr r0, _0807A19C @ =SPECIES_CASTFORM - cmp r7, r0 - bne _0807A18C - b _0807A30C -_0807A18C: - movs r0, 0xCE - lsls r0, 1 - cmp r7, r0 - bhi _0807A258 - lsls r1, r7, 2 - ldr r0, _0807A1A0 @ =gMonBackPicCoords - b _0807A33C - .align 2, 0 -_0807A19C: .4byte SPECIES_CASTFORM -_0807A1A0: .4byte gMonBackPicCoords -_0807A1A4: - mov r0, r8 - bl battle_side_get_owner - lsls r0, 24 - cmp r0, 0 - bne _0807A26C - mov r0, r8 - lsls r2, r0, 2 - ldr r0, _0807A1EC @ =0x02017800 - adds r1, r2, r0 - ldrh r0, [r1, 0x2] - cmp r0, 0 - bne _0807A1F8 - ldr r0, _0807A1F0 @ =gUnknown_02024A6A - mov r1, r8 - lsls r4, r1, 1 - adds r4, r0 - ldrh r0, [r4] - movs r6, 0x64 - muls r0, r6 - ldr r5, _0807A1F4 @ =gPlayerParty - adds r0, r5 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r7, r0, 16 - ldrh r0, [r4] - muls r0, r6 - adds r0, r5 - movs r1, 0 - bl GetMonData - adds r2, r0, 0 - b _0807A200 - .align 2, 0 -_0807A1EC: .4byte 0x02017800 -_0807A1F0: .4byte gUnknown_02024A6A -_0807A1F4: .4byte gPlayerParty -_0807A1F8: - ldrh r7, [r1, 0x2] - ldr r0, _0807A238 @ =gUnknown_02024E70 - adds r0, r2, r0 - ldr r2, [r0] -_0807A200: - cmp r7, 0xC9 - bne _0807A250 - movs r0, 0xC0 - lsls r0, 18 - ands r0, r2 - lsrs r0, 18 - movs r1, 0xC0 - lsls r1, 10 - ands r1, r2 - lsrs r1, 12 - orrs r0, r1 - movs r1, 0xC0 - lsls r1, 2 - ands r1, r2 - lsrs r1, 6 - orrs r0, r1 - movs r1, 0x3 - ands r1, r2 - orrs r0, r1 - movs r1, 0x1C - bl __umodsi3 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0 - bne _0807A23C - movs r0, 0xC9 - b _0807A246 - .align 2, 0 -_0807A238: .4byte gUnknown_02024E70 -_0807A23C: - movs r1, 0xCE - lsls r1, 1 - adds r0, r1 - lsls r0, 16 - lsrs r0, 16 -_0807A246: - lsls r1, r0, 2 - ldr r0, _0807A24C @ =gMonBackPicCoords - b _0807A33C - .align 2, 0 -_0807A24C: .4byte gMonBackPicCoords -_0807A250: - movs r0, 0xCE - lsls r0, 1 - cmp r7, r0 - bls _0807A260 -_0807A258: - ldr r4, _0807A25C @ =gMonBackPicCoords - b _0807A33E - .align 2, 0 -_0807A25C: .4byte gMonBackPicCoords -_0807A260: - lsls r1, r7, 2 - ldr r0, _0807A268 @ =gMonBackPicCoords - b _0807A33C - .align 2, 0 -_0807A268: .4byte gMonBackPicCoords -_0807A26C: - mov r0, r8 - lsls r2, r0, 2 - ldr r0, _0807A2A8 @ =0x02017800 - adds r1, r2, r0 - ldrh r0, [r1, 0x2] - cmp r0, 0 - bne _0807A2B4 - ldr r0, _0807A2AC @ =gUnknown_02024A6A - mov r1, r8 - lsls r4, r1, 1 - adds r4, r0 - ldrh r0, [r4] - movs r6, 0x64 - muls r0, r6 - ldr r5, _0807A2B0 @ =gEnemyParty - adds r0, r5 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r7, r0, 16 - ldrh r0, [r4] - muls r0, r6 - adds r0, r5 - movs r1, 0 - bl GetMonData - adds r2, r0, 0 - b _0807A2BC - .align 2, 0 -_0807A2A8: .4byte 0x02017800 -_0807A2AC: .4byte gUnknown_02024A6A -_0807A2B0: .4byte gEnemyParty -_0807A2B4: - ldrh r7, [r1, 0x2] - ldr r0, _0807A2F4 @ =gUnknown_02024E70 - adds r0, r2, r0 - ldr r2, [r0] -_0807A2BC: - cmp r7, 0xC9 - bne _0807A306 - movs r0, 0xC0 - lsls r0, 18 - ands r0, r2 - lsrs r0, 18 - movs r1, 0xC0 - lsls r1, 10 - ands r1, r2 - lsrs r1, 12 - orrs r0, r1 - movs r1, 0xC0 - lsls r1, 2 - ands r1, r2 - lsrs r1, 6 - orrs r0, r1 - movs r1, 0x3 - ands r1, r2 - orrs r0, r1 - movs r1, 0x1C - bl __umodsi3 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0 - bne _0807A2F8 - movs r0, 0xC9 - b _0807A302 - .align 2, 0 -_0807A2F4: .4byte gUnknown_02024E70 -_0807A2F8: - movs r1, 0xCE - lsls r1, 1 - adds r0, r1 - lsls r0, 16 - lsrs r0, 16 -_0807A302: - lsls r1, r0, 2 - b _0807A33A -_0807A306: - ldr r0, _0807A31C @ =SPECIES_CASTFORM - cmp r7, r0 - bne _0807A328 -_0807A30C: - ldr r0, _0807A320 @ =gUnknown_02024E84 - add r0, r8 - ldrb r0, [r0] - lsls r0, 2 - ldr r1, _0807A324 @ =gUnknownCastformCoords_0837F598 - adds r4, r0, r1 - b _0807A33E - .align 2, 0 -_0807A31C: .4byte SPECIES_CASTFORM -_0807A320: .4byte gUnknown_02024E84 -_0807A324: .4byte gUnknownCastformCoords_0837F598 -_0807A328: - movs r0, 0xCE - lsls r0, 1 - cmp r7, r0 - bls _0807A338 - ldr r4, _0807A334 @ =gMonFrontPicCoords - b _0807A33E - .align 2, 0 -_0807A334: .4byte gMonFrontPicCoords -_0807A338: - lsls r1, r7, 2 -_0807A33A: - ldr r0, _0807A350 @ =gMonFrontPicCoords -_0807A33C: - adds r4, r1, r0 -_0807A33E: - mov r0, r9 - cmp r0, 0x6 - bhi _0807A3EE - lsls r0, 2 - ldr r1, _0807A354 @ =_0807A358 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0807A350: .4byte gMonFrontPicCoords -_0807A354: .4byte _0807A358 - .align 2, 0 -_0807A358: - .4byte _0807A374 - .4byte _0807A37E - .4byte _0807A3AA - .4byte _0807A3C2 - .4byte _0807A386 - .4byte _0807A398 - .4byte _0807A3DA -_0807A374: - ldrb r1, [r4] - movs r0, 0xF - ands r0, r1 - lsls r0, 3 - b _0807A3F0 -_0807A37E: - ldrb r0, [r4] - lsrs r0, 4 - lsls r0, 3 - b _0807A3F0 -_0807A386: - mov r0, r8 - movs r1, 0x2 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r4] - lsrs r1, 4 - b _0807A3BC -_0807A398: - mov r0, r8 - movs r1, 0x2 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r4] - lsrs r1, 4 - b _0807A3D4 -_0807A3AA: - mov r0, r8 - movs r1, 0x3 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 24 - ldrb r2, [r4] - movs r1, 0xF - ands r1, r2 -_0807A3BC: - lsls r1, 2 - subs r0, r1 - b _0807A3F0 -_0807A3C2: - mov r0, r8 - movs r1, 0x3 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 24 - ldrb r2, [r4] - movs r1, 0xF - ands r1, r2 -_0807A3D4: - lsls r1, 2 - adds r0, r1 - b _0807A3F0 -_0807A3DA: - mov r0, r8 - movs r1, 0x1 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 24 - adds r0, 0x1F - ldrb r1, [r4, 0x1] - subs r0, r1 - b _0807A3F0 -_0807A3EE: - movs r0, 0 -_0807A3F0: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_807A100 - - thumb_func_start sub_807A3FC -sub_807A3FC: @ 807A3FC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - mov r9, r2 - mov r10, r3 - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 24 - cmp r1, 0 - bne _0807A41A - movs r5, 0 - movs r6, 0x1 - b _0807A41E -_0807A41A: - movs r5, 0x2 - movs r6, 0x3 -_0807A41E: - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - adds r0, r4, 0 - adds r1, r6, 0 - bl sub_8077ABC - lsls r0, 24 - lsrs r7, r0, 24 - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - beq _0807A470 - bl sub_8076BE0 - lsls r0, 24 - cmp r0, 0 - bne _0807A470 - movs r0, 0x2 - eors r4, r0 - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_8077ABC - lsls r0, 24 - lsrs r5, r0, 24 - adds r0, r4, 0 - adds r1, r6, 0 - bl sub_8077ABC - lsls r0, 24 - lsrs r3, r0, 24 - mov r0, r8 - lsls r1, r0, 16 - lsls r2, r7, 16 - b _0807A47C -_0807A470: - mov r0, r8 - lsls r1, r0, 16 - lsrs r5, r1, 16 - lsls r0, r7, 16 - lsrs r3, r0, 16 - adds r2, r0, 0 -_0807A47C: - asrs r0, r1, 16 - adds r0, r5 - asrs r0, 1 - mov r1, r9 - strh r0, [r1] - asrs r0, r2, 16 - adds r0, r3 - asrs r0, 1 - mov r1, r10 - strh r0, [r1] - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_807A3FC - - thumb_func_start sub_807A4A0 -sub_807A4A0: @ 807A4A0 - push {r4-r6,lr} - mov r6, r10 - mov r5, r9 - mov r4, r8 - push {r4-r6} - sub sp, 0x4 - lsls r6, r1, 24 - lsrs r6, 24 - ldr r0, _0807A538 @ =SpriteCallbackDummy - mov r10, r0 - bl CreateInvisibleSpriteWithCallback - mov r8, r0 - mov r0, r8 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r0, _0807A53C @ =gSprites - mov r9, r0 - mov r0, r8 - lsls r3, r0, 4 - add r3, r8 - lsls r3, 2 - mov r0, r9 - adds r5, r3, r0 - lsls r4, r6, 4 - adds r4, r6 - lsls r4, 2 - add r4, r9 - adds r0, r5, 0 - adds r1, r4, 0 - movs r2, 0x44 - str r3, [sp] - bl memcpy - adds r2, r5, 0 - adds r2, 0x3F - ldrb r0, [r2] - movs r1, 0x40 - orrs r0, r1 - strb r0, [r2] - ldrb r2, [r5, 0x5] - movs r1, 0xD - negs r1, r1 - adds r0, r1, 0 - ands r0, r2 - strb r0, [r5, 0x5] - ldrb r0, [r5, 0x1] - ands r1, r0 - movs r0, 0x8 - orrs r1, r0 - strb r1, [r5, 0x1] - ldrh r1, [r4, 0x4] - lsls r1, 22 - lsrs r1, 22 - ldrh r2, [r5, 0x4] - ldr r0, _0807A540 @ =0xfffffc00 - ands r0, r2 - orrs r0, r1 - strh r0, [r5, 0x4] - movs r0, 0x1C - add r9, r0 - ldr r3, [sp] - add r3, r9 - mov r0, r10 - str r0, [r3] - mov r0, r8 - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0807A538: .4byte SpriteCallbackDummy -_0807A53C: .4byte gSprites -_0807A540: .4byte 0xfffffc00 - thumb_func_end sub_807A4A0 - - thumb_func_start sub_807A544 -sub_807A544: @ 807A544 - push {r4,lr} - adds r4, r0, 0 - bl sub_8078650 - ldr r0, _0807A57C @ =gUnknown_0202F7C8 - ldrb r0, [r0] - bl battle_side_get_owner - lsls r0, 24 - cmp r0, 0 - beq _0807A584 - ldr r2, _0807A580 @ =gBattleAnimArgs - ldrh r0, [r4, 0x20] - ldrh r1, [r2] - subs r0, r1 - strh r0, [r4, 0x20] - ldrh r0, [r2, 0x6] - negs r0, r0 - strh r0, [r2, 0x6] - adds r3, r4, 0 - adds r3, 0x3F - ldrb r0, [r3] - movs r1, 0x1 - orrs r0, r1 - strb r0, [r3] - adds r1, r2, 0 - b _0807A58E - .align 2, 0 -_0807A57C: .4byte gUnknown_0202F7C8 -_0807A580: .4byte gBattleAnimArgs -_0807A584: - ldr r1, _0807A5B8 @ =gBattleAnimArgs - ldrh r0, [r1] - ldrh r2, [r4, 0x20] - adds r0, r2 - strh r0, [r4, 0x20] -_0807A58E: - ldrh r0, [r1, 0x2] - ldrh r2, [r4, 0x22] - adds r0, r2 - strh r0, [r4, 0x22] - ldrh r0, [r1, 0x4] - strh r0, [r4, 0x2E] - ldrh r0, [r1, 0x6] - strh r0, [r4, 0x30] - ldrh r0, [r1, 0x8] - strh r0, [r4, 0x34] - ldrh r0, [r1, 0xA] - strh r0, [r4, 0x38] - ldr r1, _0807A5BC @ =move_anim_8074EE0 - adds r0, r4, 0 - bl oamt_set_x3A_32 - ldr r0, _0807A5C0 @ =sub_8078504 - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0807A5B8: .4byte gBattleAnimArgs -_0807A5BC: .4byte move_anim_8074EE0 -_0807A5C0: .4byte sub_8078504 - thumb_func_end sub_807A544 - - thumb_func_start sub_807A5C4 -sub_807A5C4: @ 807A5C4 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _0807A5EC @ =gUnknown_0202F7C8 - ldrb r0, [r0] - bl battle_side_get_owner - lsls r0, 24 - cmp r0, 0 - beq _0807A5F4 - ldr r2, _0807A5F0 @ =gBattleAnimArgs - ldrh r0, [r4, 0x20] - ldrh r1, [r2] - subs r0, r1 - strh r0, [r4, 0x20] - movs r1, 0x6 - ldrsh r0, [r2, r1] - negs r0, r0 - strh r0, [r2, 0x6] - adds r1, r2, 0 - b _0807A5FE - .align 2, 0 -_0807A5EC: .4byte gUnknown_0202F7C8 -_0807A5F0: .4byte gBattleAnimArgs -_0807A5F4: - ldr r1, _0807A630 @ =gBattleAnimArgs - ldrh r0, [r1] - ldrh r2, [r4, 0x20] - adds r0, r2 - strh r0, [r4, 0x20] -_0807A5FE: - ldrh r0, [r1, 0x2] - ldrh r2, [r4, 0x22] - adds r0, r2 - strh r0, [r4, 0x22] - ldrh r0, [r1, 0x4] - strh r0, [r4, 0x2E] - ldrh r0, [r1, 0x6] - strh r0, [r4, 0x30] - ldrh r0, [r1, 0x8] - strh r0, [r4, 0x34] - ldrh r0, [r1, 0xA] - strh r0, [r4, 0x38] - ldrb r1, [r1, 0xC] - adds r0, r4, 0 - bl StartSpriteAnim - ldr r1, _0807A634 @ =move_anim_8074EE0 - adds r0, r4, 0 - bl oamt_set_x3A_32 - ldr r0, _0807A638 @ =sub_8078504 - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0807A630: .4byte gBattleAnimArgs -_0807A634: .4byte move_anim_8074EE0 -_0807A638: .4byte sub_8078504 - thumb_func_end sub_807A5C4 - - thumb_func_start sub_807A63C -sub_807A63C: @ 807A63C - push {r4,lr} - adds r4, r0, 0 - bl sub_8078650 - ldr r0, _0807A660 @ =gUnknown_0202F7C8 - ldrb r0, [r0] - bl battle_side_get_owner - lsls r0, 24 - cmp r0, 0 - beq _0807A668 - ldr r0, _0807A664 @ =gBattleAnimArgs - ldrh r1, [r4, 0x20] - ldrh r2, [r0] - subs r1, r2 - strh r1, [r4, 0x20] - b _0807A674 - .align 2, 0 -_0807A660: .4byte gUnknown_0202F7C8 -_0807A664: .4byte gBattleAnimArgs -_0807A668: - ldr r1, _0807A690 @ =gBattleAnimArgs - ldrh r0, [r1] - ldrh r2, [r4, 0x20] - adds r0, r2 - strh r0, [r4, 0x20] - adds r0, r1, 0 -_0807A674: - ldrh r0, [r0, 0x2] - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r4, 0x22] - ldr r0, _0807A694 @ =sub_8078600 - str r0, [r4, 0x1C] - ldr r1, _0807A698 @ =move_anim_8072740 - adds r0, r4, 0 - bl oamt_set_x3A_32 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0807A690: .4byte gBattleAnimArgs -_0807A694: .4byte sub_8078600 -_0807A698: .4byte move_anim_8072740 - thumb_func_end sub_807A63C - - thumb_func_start sub_807A69C -sub_807A69C: @ 807A69C - push {r4-r7,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0807A730 @ =gTasks - adds r5, r1, r0 - movs r0, 0 - bl obj_id_for_side_relative_to_move - lsls r0, 24 - lsrs r0, 24 - movs r6, 0 - strh r0, [r5, 0x8] - ldr r7, _0807A734 @ =gUnknown_0202F7C8 - ldrb r0, [r7] - bl battle_side_get_owner - lsls r0, 24 - movs r1, 0x8 - cmp r0, 0 - beq _0807A6D0 - movs r0, 0x8 - negs r0, r0 - adds r1, r0, 0 -_0807A6D0: - strh r1, [r5, 0xA] - strh r6, [r5, 0xC] - strh r6, [r5, 0xE] - ldr r4, _0807A738 @ =gSprites - movs r0, 0x8 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrh r1, [r0, 0x24] - ldrh r2, [r5, 0x8] - subs r1, r2 - strh r1, [r0, 0x24] - ldr r0, _0807A73C @ =0x00002771 - bl AllocSpritePalette - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x10] - strh r6, [r5, 0x12] - movs r1, 0x10 - ldrsh r0, [r5, r1] - adds r0, 0x10 - lsls r0, 20 - lsrs r6, r0, 16 - movs r0, 0x8 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrb r0, [r0, 0x5] - lsrs r0, 4 - adds r0, 0x10 - lsls r4, r0, 4 - ldrb r0, [r7] - bl sub_8079E90 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x14] - cmp r0, 0x14 - beq _0807A72C - cmp r0, 0x28 - bne _0807A740 -_0807A72C: - movs r0, 0x2 - b _0807A742 - .align 2, 0 -_0807A730: .4byte gTasks -_0807A734: .4byte gUnknown_0202F7C8 -_0807A738: .4byte gSprites -_0807A73C: .4byte 0x00002771 -_0807A740: - movs r0, 0x3 -_0807A742: - strh r0, [r5, 0x14] - lsls r0, r4, 1 - ldr r1, _0807A770 @ =gPlttBufferUnfaded - adds r0, r1 - lsls r1, r6, 1 - ldr r2, _0807A774 @ =gPlttBufferFaded - adds r1, r2 - ldr r2, _0807A778 @ =REG_BG0CNT - bl CpuSet - ldr r0, _0807A77C @ =gBattleAnimArgs - ldrb r2, [r0, 0x2] - ldrh r3, [r0] - adds r0, r6, 0 - movs r1, 0x10 - bl BlendPalette - ldr r0, _0807A780 @ =sub_807A784 - str r0, [r5] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0807A770: .4byte gPlttBufferUnfaded -_0807A774: .4byte gPlttBufferFaded -_0807A778: .4byte REG_BG0CNT -_0807A77C: .4byte gBattleAnimArgs -_0807A780: .4byte sub_807A784 - thumb_func_end sub_807A69C - - thumb_func_start sub_807A784 -sub_807A784: @ 807A784 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _0807A7A8 @ =gTasks - adds r4, r0, r1 - movs r1, 0xC - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _0807A7E8 - cmp r0, 0x1 - bgt _0807A7AC - cmp r0, 0 - beq _0807A7B2 - b _0807A844 - .align 2, 0 -_0807A7A8: .4byte gTasks -_0807A7AC: - cmp r0, 0x2 - beq _0807A830 - b _0807A844 -_0807A7B2: - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_807A850 - ldr r2, _0807A7E4 @ =gSprites - movs r0, 0x8 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r4, 0xA] - ldrh r2, [r0, 0x24] - adds r1, r2 - strh r1, [r0, 0x24] - ldrh r1, [r4, 0xE] - adds r0, r1, 0x1 - strh r0, [r4, 0xE] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x5 - bne _0807A844 - strh r1, [r4, 0xE] - b _0807A822 - .align 2, 0 -_0807A7E4: .4byte gSprites -_0807A7E8: - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_807A850 - ldr r3, _0807A82C @ =gSprites - movs r0, 0x8 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldrh r1, [r0, 0x24] - ldrh r2, [r4, 0xA] - subs r1, r2 - strh r1, [r0, 0x24] - ldrh r0, [r4, 0xE] - subs r0, 0x1 - strh r0, [r4, 0xE] - lsls r0, 16 - asrs r2, r0, 16 - cmp r2, 0 - bne _0807A844 - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r3 - strh r2, [r1, 0x24] -_0807A822: - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - b _0807A844 - .align 2, 0 -_0807A82C: .4byte gSprites -_0807A830: - movs r2, 0x12 - ldrsh r0, [r4, r2] - cmp r0, 0 - bne _0807A844 - ldr r0, _0807A84C @ =0x00002771 - bl FreeSpritePaletteByTag - adds r0, r5, 0 - bl move_anim_task_del -_0807A844: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0807A84C: .4byte 0x00002771 - thumb_func_end sub_807A784 - - thumb_func_start sub_807A850 -sub_807A850: @ 807A850 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r6, r0, 0 - lsls r1, 24 - lsrs r1, 24 - mov r8, r1 - movs r0, 0 - bl duplicate_obj_of_side_rel2move_in_transparent_mode - lsls r0, 16 - lsrs r7, r0, 16 - asrs r0, 16 - cmp r0, 0 - blt _0807A8C0 - ldr r5, _0807A8CC @ =gSprites - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - adds r3, r4, r5 - movs r0, 0x3 - ldrb r1, [r6, 0x14] - ands r1, r0 - lsls r1, 2 - ldrb r2, [r3, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3, 0x5] - ldrb r1, [r6, 0x10] - lsls r1, 4 - movs r2, 0xF - ands r0, r2 - orrs r0, r1 - strb r0, [r3, 0x5] - movs r0, 0x8 - strh r0, [r3, 0x2E] - mov r0, r8 - strh r0, [r3, 0x30] - strh r7, [r3, 0x32] - movs r0, 0x8 - ldrsh r1, [r6, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldrh r0, [r0, 0x24] - strh r0, [r3, 0x24] - adds r5, 0x1C - adds r4, r5 - ldr r0, _0807A8D0 @ =sub_807A8D4 - str r0, [r4] - ldrh r0, [r6, 0x12] - adds r0, 0x1 - strh r0, [r6, 0x12] -_0807A8C0: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0807A8CC: .4byte gSprites -_0807A8D0: .4byte sub_807A8D4 - thumb_func_end sub_807A850 - - thumb_func_start sub_807A8D4 -sub_807A8D4: @ 807A8D4 - push {lr} - adds r3, r0, 0 - ldrh r0, [r3, 0x2E] - subs r0, 0x1 - strh r0, [r3, 0x2E] - lsls r0, 16 - cmp r0, 0 - bne _0807A8FE - ldr r2, _0807A904 @ =gTasks - movs r0, 0x30 - ldrsh r1, [r3, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - ldrh r1, [r0, 0x12] - subs r1, 0x1 - strh r1, [r0, 0x12] - adds r0, r3, 0 - bl obj_delete_but_dont_free_vram -_0807A8FE: - pop {r0} - bx r0 - .align 2, 0 -_0807A904: .4byte gTasks - thumb_func_end sub_807A8D4 - - thumb_func_start sub_807A908 -sub_807A908: @ 807A908 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r4, _0807A93C @ =gUnknown_0202F7C8 - ldrb r0, [r4] - movs r1, 0x2 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x3 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] - ldrb r0, [r4] - bl battle_side_get_owner - lsls r0, 24 - cmp r0, 0 - bne _0807A940 - movs r0, 0x5 - b _0807A942 - .align 2, 0 -_0807A93C: .4byte gUnknown_0202F7C8 -_0807A940: - ldr r0, _0807A954 @ =0x0000fff6 -_0807A942: - strh r0, [r5, 0x2E] - ldr r0, _0807A958 @ =0x0000ffd8 - strh r0, [r5, 0x30] - ldr r0, _0807A95C @ =sub_807A960 - str r0, [r5, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0807A954: .4byte 0x0000fff6 -_0807A958: .4byte 0x0000ffd8 -_0807A95C: .4byte sub_807A960 - thumb_func_end sub_807A908 - - thumb_func_start sub_807A960 -sub_807A960: @ 807A960 - push {r4,r5,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x2E] - ldrh r1, [r4, 0x32] - adds r0, r1 - strh r0, [r4, 0x32] - ldrh r5, [r4, 0x30] - ldrh r2, [r4, 0x34] - adds r0, r5, r2 - strh r0, [r4, 0x34] - movs r1, 0x32 - ldrsh r0, [r4, r1] - movs r1, 0xA - bl __divsi3 - strh r0, [r4, 0x24] - movs r2, 0x34 - ldrsh r0, [r4, r2] - movs r1, 0xA - bl __divsi3 - strh r0, [r4, 0x26] - lsls r0, r5, 16 - asrs r0, 16 - movs r1, 0x14 - negs r1, r1 - cmp r0, r1 - bge _0807A99C - adds r0, r5, 0x1 - strh r0, [r4, 0x30] -_0807A99C: - movs r1, 0x22 - ldrsh r0, [r4, r1] - movs r2, 0x26 - ldrsh r1, [r4, r2] - adds r0, r1 - movs r1, 0x20 - negs r1, r1 - cmp r0, r1 - bge _0807A9B4 - adds r0, r4, 0 - bl move_anim_8072740 -_0807A9B4: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_807A960 - - thumb_func_start sub_807A9BC -sub_807A9BC: @ 807A9BC - push {r4,r5,lr} - adds r4, r0, 0 - ldr r5, _0807A9F4 @ =gBattleAnimArgs - ldrh r0, [r5, 0x4] - strh r0, [r4, 0x2E] - ldrh r0, [r5, 0x8] - ldrh r1, [r4, 0x20] - adds r0, r1 - strh r0, [r4, 0x32] - ldrh r0, [r5, 0xA] - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r4, 0x36] - ldr r0, _0807A9F8 @ =gUnknown_0202F7C9 - ldrb r0, [r0] - bl battle_side_get_owner - lsls r0, 24 - cmp r0, 0 - bne _0807A9FC - ldrh r0, [r5, 0x8] - adds r0, 0x1E - ldrh r1, [r4, 0x20] - adds r0, r1 - strh r0, [r4, 0x20] - ldrh r0, [r5, 0xA] - subs r0, 0x14 - b _0807AA0A - .align 2, 0 -_0807A9F4: .4byte gBattleAnimArgs -_0807A9F8: .4byte gUnknown_0202F7C9 -_0807A9FC: - ldrh r0, [r5, 0x8] - subs r0, 0x1E - ldrh r1, [r4, 0x20] - adds r0, r1 - strh r0, [r4, 0x20] - ldrh r0, [r5, 0xA] - subs r0, 0x50 -_0807AA0A: - strh r0, [r4, 0x22] - ldr r0, _0807AA20 @ =sub_8078B34 - str r0, [r4, 0x1C] - ldr r1, _0807AA24 @ =move_anim_8072740 - adds r0, r4, 0 - bl oamt_set_x3A_32 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0807AA20: .4byte sub_8078B34 -_0807AA24: .4byte move_anim_8072740 - thumb_func_end sub_807A9BC - - .align 2, 0 @ Don't pad with nop. diff --git a/data/rom_8077ABC.s b/data/rom_8077ABC.s deleted file mode 100644 index 81b61228b..000000000 --- a/data/rom_8077ABC.s +++ /dev/null @@ -1,45 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - - .align 2 -gUnknown_0837F578:: @ 837F578 - .byte 72, 80, 0, 0 - .byte 176, 40, 0, 0 - .byte 48, 40, 0, 0 - .byte 112, 80, 0, 0 - .byte 32, 80, 0, 0 - .byte 200, 40, 0, 0 - .byte 90, 88, 0, 0 - .byte 152, 32, 0, 0 - -@ One entry for each of the four Castform forms. -@ Coords are probably front pic coords or back pic coords, but this data does not seem to be -@ used during battle, party summary, or pokedex screens. - .align 2 -gUnknownCastformCoords_0837F598:: @ 837F598 - .byte 68, 17, 0, 0 - .byte 102, 9, 0, 0 - .byte 70, 9, 0, 0 - .byte 134, 8, 0, 0 - -@ One entry for each of the four Castform forms. Probably a palette index. -gUnknownCastformData_0837F5A8:: @ 837F5A8 - .byte 0xD, 0xE, 0xD, 0xD - -gUnknown_0837F5AC:: @ 837F5AC - .byte 0, 0, 0, 0 - - .align 2 -gSpriteTemplate_837F5B0:: @ 837F5B0 - spr_template 55125, 55125, gOamData_837DF9C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - - .align 2 -gSpriteTemplate_837F5C8:: @ 837F5C8 - spr_template 55126, 55126, gOamData_837DF9C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - - .align 2 -gUnknown_0837F5E0:: @ 837F5E0 - obj_tiles gMiscBlank_Gfx, 2048, 0xd755 - obj_tiles gMiscBlank_Gfx, 2048, 0xd756 diff --git a/ld_script.txt b/ld_script.txt index 28f30b110..7628830cd 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -116,7 +116,7 @@ SECTIONS { src/palette.o(.text); src/sound.o(.text); src/battle_anim.o(.text); - asm/rom_8077ABC.o(.text); + src/rom_8077ABC.o(.text); src/task.o(.text); asm/rom5.o(.text); asm/battle_anim_807B69C.o(.text); @@ -359,7 +359,7 @@ SECTIONS { src/sound.o(.rodata); data/battle_anim.o(.rodata); src/battle_anim.o(.rodata); - data/rom_8077ABC.o(.rodata); + src/rom_8077ABC.o(.rodata); data/map_events.o(.rodata); data/data_8393054.o(.rodata); data/task.o(.rodata); diff --git a/shared_syms.txt b/shared_syms.txt index ca008972f..16d4138e5 100644 --- a/shared_syms.txt +++ b/shared_syms.txt @@ -19,6 +19,9 @@ unk_20160BC = 0x20160BC; unk_2016A00 = 0x2016A00; unk_2016C00 = 0x2016C00; +gTransformStatuses = 0x2017800; +unk_2017810 = 0x2017810; + unk_201FE00 = 0x201FE00; gSecretBaseRecord = 0x2017000; @@ -27,6 +30,8 @@ dword_2017100 = 0x2017100; unk_2018000 = 0x2018000; +unk_2019348 = 0x2019348; + unk_201B260 = 0x201b260; unk_201B264 = 0x201B264; unk_201C000 = 0x201C000; diff --git a/src/rom_8077ABC.c b/src/rom_8077ABC.c new file mode 100644 index 000000000..412361161 --- /dev/null +++ b/src/rom_8077ABC.c @@ -0,0 +1,2112 @@ +#include "global.h" +#include "battle.h" +#include "sprite.h" +#include "species.h" +#include "trig.h" +#include "task.h" +#include "blend_palette.h" +#include "decompress.h" +#include "palette.h" + +#define GET_UNOWN_LETTER(personality) ((\ + (((personality & 0x03000000) >> 24) << 6) \ + | (((personality & 0x00030000) >> 16) << 4) \ + | (((personality & 0x00000300) >> 8) << 2) \ + | (((personality & 0x00000003) >> 0) << 0) \ +) % 28) + +#define IS_DOUBLE_BATTLE() ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) ? TRUE : FALSE) + +#define NUM_BATTLE_SLOTS 4 + +#define gBattleMonPartyPositions gUnknown_02024A6A +#define gBattleMonForms gUnknown_02024E84 +#define gCastformFrontSpriteCoords gUnknownCastformCoords_0837F598 +#define gCastformElevations gUnknownCastformData_0837F5A8 +#define gCastformBackSpriteYCoords gUnknown_0837F5AC +#define gTransformPersonalities gUnknown_02024E70 +#define gBattleMonSprites gUnknown_02024BE0 + + +struct Struct_unk_2019348 { + u16 field_0; + u16 field_2; + u8 field_4; + u32 field_8; + u32 field_c; + u32 field_10; +}; + +struct TransformStatus { + u16 unknown; + u16 species; +}; + +struct MonCoords { + // This would use a bitfield, but sub_8079F44 + // uses it as a u8 and casting won't match. + u8 coords; // u8 x:4, y:4; + u8 y_offset; +}; + +struct Struct_gUnknown_0837F578 { + u8 field_0; + u8 field_1; +}; + +struct OamMatrix { + s16 a; + s16 b; + s16 c; + s16 d; +}; + +struct Struct_2017810 { + u8 filler_0[6]; + u8 field_6; + u8 filler_7[5]; +}; + +struct Color { + u16 r:5; + u16 g:5; + u16 b:5; +}; + +struct Struct_sub_8078914 { + u8 *field_0; + u8 *field_4; + u8 field_8; +}; + +struct BGCnt { + u16 priority:2; + u16 charBase:2; + u16 unused:2; + u16 mosaic:1; + u16 colorMode:1; + u16 screenBase:5; + u16 overflow:1; + u16 size:2; +}; + +struct Struct_0202F7D4 { + s16 field_0; + s16 field_2; + u8 field_4; + u8 field_5; +}; + +#define BG1CNT (*(volatile struct BGCnt*)REG_ADDR_BG1CNT) +#define BG2CNT (*(volatile struct BGCnt*)REG_ADDR_BG2CNT) +#define BG3CNT (*(volatile struct BGCnt*)REG_ADDR_BG3CNT) + +extern struct OamData gOamData_837DF9C[]; +extern const union AnimCmd *const gDummySpriteAnimTable[]; +extern const union AffineAnimCmd *const gDummySpriteAffineAnimTable[]; +extern u8 gMiscBlank_Gfx[]; + +extern struct Struct_unk_2019348 unk_2019348; +extern struct TransformStatus gTransformStatuses[]; +extern u16 gBattleMonPartyPositions[]; +extern u16 gBattleTypeFlags; +extern struct MonCoords gMonBackPicCoords[]; +extern struct MonCoords gMonFrontPicCoords[]; +extern u32 gTransformPersonalities[NUM_BATTLE_SLOTS]; +extern u8 gBattleMonForms[NUM_BATTLE_SLOTS]; +extern u8 gEnemyMonElevation[]; +extern u16 gUnknown_0202F7CA[]; +extern u8 gBattleMonSprites[NUM_BATTLE_SLOTS]; +extern u8 gUnknown_0202F7C8; +extern u8 gUnknown_0202F7C9; +extern s16 gBattleAnimArgs[8]; +extern u8 gUnknown_02024A72[NUM_BATTLE_SLOTS]; +extern u8 gUnknown_02024A68; // gNumBattleMons? +extern struct OamMatrix gOamMatrices[]; +extern struct Struct_2017810 unk_2017810[]; +extern u8 gUnknown_0202F7BE; +extern const union AffineAnimCmd *const gSpriteAffineAnimTable_81E7C18; +extern struct SpriteSheet gMonFrontPicTable[]; +extern struct SpriteSheet gMonBackPicTable[]; + +extern u8 sub_8076BE0(); +extern bool8 sub_8078874(u8); +extern bool8 b_side_obj__get_some_boolean(u8); +extern void UpdateMonIconFrame(struct Sprite *sprite); +extern void CalcCenterToCornerVec(struct Sprite *sprite, u8 shape, u8 size, u8 affineMode); +extern void *species_and_otid_get_pal(u32, u32, u32); +extern void FreeSpriteOamMatrix(struct Sprite *sprite); +extern void ResetPaletteStructByUid(u16); +extern void move_anim_task_del(u8 task); +extern u8 CreateInvisibleSpriteWithCallback(void (*callback)(struct Sprite *)); + +u8 sub_8077E44(u8 slot, u16 species, u8 a3); +u8 battle_get_per_side_status(u8 slot); +u8 battle_side_get_owner(u8 slot); +void sub_8078314(struct Sprite *sprite); +void sub_8078364(struct Sprite *sprite); +void move_anim_8072740(struct Sprite *sprite); +void obj_translate_based_on_private_1_2_3_4(struct Sprite *sprite); +bool8 sub_8078B5C(struct Sprite *sprite); +u8 battle_get_per_side_status_permutated(u8 slot); +void sub_8078A5C(struct Sprite *sprite); +void sub_8078BB8(struct Sprite *sprite); +void sub_8078D44(struct Sprite *sprite); +bool8 sub_8078E38(); +void sub_8079518(struct Sprite *sprite); +void sub_80796F8(u8 task); +void sub_80797EC(struct Task *task); +void sub_8079814(u8 taskId); +void sub_8079BF4(s16 *bottom, s16 *top, void *ptr); +void *sub_8079BFC(s16 bottom, s16 top); +void sub_8079A64(u8 sprite); +u16 sub_8079B10(u8 sprite); +u8 sub_8079E90(u8 slot); +void sub_807A784(u8 taskId); +void sub_807A850(struct Task *task, u8 taskId); +void sub_807A8D4(struct Sprite *sprite); +void sub_807A960(struct Sprite *sprite); + + +EWRAM_DATA struct Struct_0202F7D4 *gUnknown_0202F7D4 = NULL; +EWRAM_DATA u32 filler_0202F7D8[3] = {0}; + +const struct Struct_gUnknown_0837F578 gUnknown_0837F578[][4] = { + { + { 72, 80 }, + { 176, 40 }, + { 48, 40 }, + { 112, 80 }, + }, + { + { 32, 80 }, + { 200, 40 }, + { 90, 88 }, + { 152, 32 }, + }, +}; + +// One entry for each of the four Castform forms. +// Coords are probably front pic coords or back pic coords, but this data does not seem to be +// used during battle, party summary, or pokedex screens. +const struct MonCoords gCastformFrontSpriteCoords[] = { + { 0x44, 17 }, // NORMAL + { 0x66, 9 }, // SUN + { 0x46, 9 }, // RAIN + { 0x86, 8 }, // HAIL +}; + +const u8 gCastformElevations[] = { + 13, // NORMAL + 14, // SUN + 13, // RAIN + 13, // HAIL +}; + +// Y position of the backsprite for each of the four Castform forms. +const u8 gCastformBackSpriteYCoords[] = { + 0, // NORMAL + 0, // SUN + 0, // RAIN + 0, // HAIL +}; + +const struct SpriteTemplate gSpriteTemplate_837F5B0[] = { + { + .tileTag = 55125, + .paletteTag = 55125, + .oam = gOamData_837DF9C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, { + .tileTag = 55126, + .paletteTag = 55126, + .oam = gOamData_837DF9C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + } +}; + +const struct SpriteSheet gUnknown_0837F5E0[] = { + { gMiscBlank_Gfx, 0x800, 55125, }, + { gMiscBlank_Gfx, 0x800, 55126, }, +}; + + +u8 sub_8077ABC(u8 slot, u8 a2) { + u8 var; + u16 species; + struct TransformStatus *transform; + + if (sub_8076BE0()) { + if (a2 == 3 && slot == 3) { + a2 = 1; + } + } + switch (a2) { + case 0: + case 2: + var = gUnknown_0837F578[IS_DOUBLE_BATTLE()][battle_get_per_side_status(slot)].field_0; + break; + case 1: + var = gUnknown_0837F578[IS_DOUBLE_BATTLE()][battle_get_per_side_status(slot)].field_1; + break; + case 3: + case 4: + default: + if (sub_8076BE0()) { + if (unk_2019348.field_4 & 1) { + species = unk_2019348.field_2; + } else { + species = unk_2019348.field_0; + } + } else { + if (battle_side_get_owner(slot)) { + transform = &gTransformStatuses[slot]; + if (!transform->species) { + species = GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES); + } else { + species = transform->species; + } + } else { + transform = &gTransformStatuses[slot]; + if (!transform->species) { + species = GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES); + } else { + species = transform->species; + } + } + } + if (a2 == 3) { + var = sub_8077E44(slot, species, 1); + } else { + var = sub_8077E44(slot, species, 0); + } + break; + } + return var; +} + +u8 sub_8077BFC(u8 slot, u16 species) { + u16 letter; + u32 personality; + struct TransformStatus *transform; + u8 ret; + u16 var; + + if (!battle_side_get_owner(slot) || sub_8076BE0()) { + if (species == SPECIES_UNOWN) { + if (sub_8076BE0()) { + if (unk_2019348.field_4 & 1) { + personality = unk_2019348.field_10; + } else { + personality = unk_2019348.field_8; + } + } else { + transform = &gTransformStatuses[slot]; + if (!transform->species) { + personality = GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_PERSONALITY); + } else { + personality = gTransformPersonalities[slot]; + } + } + letter = GET_UNOWN_LETTER(personality); + if (!letter) { + var = species; + } else { + var = letter + SPECIES_UNOWN_B - 1; + } + ret = gMonBackPicCoords[var].y_offset; + } else if (species == SPECIES_CASTFORM) { + ret = gCastformBackSpriteYCoords[gBattleMonForms[slot]]; + } else if (species > NUM_SPECIES) { + ret = gMonBackPicCoords[0].y_offset; + } else { + ret = gMonBackPicCoords[species].y_offset; + } + } else { + if (species == SPECIES_UNOWN) { + transform = &gTransformStatuses[slot]; + if (!transform->species) { + personality = GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_PERSONALITY); + } else { + personality = gTransformPersonalities[slot]; + } + letter = GET_UNOWN_LETTER(personality); + if (!letter) { + var = species; + } else { + var = letter + SPECIES_UNOWN_B - 1; + } + ret = gMonFrontPicCoords[var].y_offset; + } else if (species == SPECIES_CASTFORM) { + ret = gCastformFrontSpriteCoords[gBattleMonForms[slot]].y_offset; + } else if (species > NUM_SPECIES) { + ret = gMonFrontPicCoords[0].y_offset; + } else { + ret = gMonFrontPicCoords[species].y_offset; + } + } + return ret; +} + +u8 sub_8077DD8(u8 slot, u16 species) { + u8 ret = 0; + if (battle_side_get_owner(slot) == 1) { + if (!sub_8076BE0()) { + if (species == SPECIES_CASTFORM) { + ret = gCastformElevations[gBattleMonForms[slot]]; + } else if (species > NUM_SPECIES) { + ret = gEnemyMonElevation[0]; + } else { + ret = gEnemyMonElevation[species]; + } + } + } + return ret; +} + +u8 sub_8077E44(u8 slot, u16 species, u8 a3) { + u16 offset; + u8 y; + if (battle_side_get_owner(slot) == 0 || sub_8076BE0()) { + offset = sub_8077BFC(slot, species); + } else { + offset = sub_8077BFC(slot, species); + offset -= sub_8077DD8(slot, species); + } + y = offset + gUnknown_0837F578[IS_DOUBLE_BATTLE()][battle_get_per_side_status(slot)].field_1; + if (a3) { + if (battle_side_get_owner(slot) == 0) { + y += 8; + } + if (y > 104) y = 104; + } + return y; +} + +u8 sub_8077EE4(u8 slot, u8 a2) { + u16 species; + struct TransformStatus *transform; + if (a2 == 3 || a2 == 4) { + if (sub_8076BE0()) { + if (unk_2019348.field_4 & 1) { + species = unk_2019348.field_2; + } else { + species = unk_2019348.field_0; + } + } else { + transform = &gTransformStatuses[slot]; + if (!transform->species) { + species = gUnknown_0202F7CA[slot]; + } else { + species = transform->species; + } + } + if (a2 == 3) { + return sub_8077E44(slot, species, 1); + } else { + return sub_8077E44(slot, species, 0); + } + } else { + return sub_8077ABC(slot, a2); + } +} + +u8 sub_8077F68(u8 slot) { + return sub_8077ABC(slot, 4); +} + +u8 sub_8077F7C(u8 slot) { + u16 var; + if (battle_side_get_owner(slot)) { + var = sub_8077ABC(slot, 1) + 16; + } else { + var = sub_8077ABC(slot, 1) + 17; + } + return var; +} + +u8 sub_8077FC0(u8 slot) { + u16 var; + u8 r6; + struct TransformStatus *transform; + r6 = sub_8077ABC(slot, 1); + if (!sub_8076BE0()) { + if (battle_side_get_owner(slot)) { + transform = &gTransformStatuses[slot]; + if (!transform->species) { + var = GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES); + } else { + var = transform->species; + } + } else { + transform = &gTransformStatuses[slot]; + if (!transform->species) { + var = GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES); + } else { + var = transform->species; + } + } + if (battle_side_get_owner(slot)) { + r6 -= sub_8077DD8(slot, var); + } + } + return r6; +} + +u8 obj_id_for_side_relative_to_move(u8 a1) { + u8 *sprites; + if (a1 == 0) { + if (sub_8078874(gUnknown_0202F7C8)) { + sprites = gBattleMonSprites; + return sprites[gUnknown_0202F7C8]; + } else { + return 0xff; + } + } else if (a1 == 1) { + if (sub_8078874(gUnknown_0202F7C9)) { + sprites = gBattleMonSprites; + return sprites[gUnknown_0202F7C9]; + } else { + return 0xff; + } + } else if (a1 == 2) { + if (!b_side_obj__get_some_boolean(gUnknown_0202F7C8 ^ 2)) { + return 0xff; + } else { + return gBattleMonSprites[gUnknown_0202F7C8 ^ 2]; + } + } else { + if (b_side_obj__get_some_boolean(gUnknown_0202F7C9 ^ 2)) { + return gBattleMonSprites[gUnknown_0202F7C9 ^ 2]; + } else { + return 0xff; + } + } +} + +void oamt_set_x3A_32(struct Sprite *sprite, void (*callback)(struct Sprite*)) { + sprite->data6 = (u32)(callback) & 0xffff; + sprite->data7 = (u32)(callback) >> 16; +} + +void sub_8078104(struct Sprite *sprite) { + u32 callback = (u16)sprite->data6 | (sprite->data7 << 16); + sprite->callback = (void (*)(struct Sprite *))callback; +} + +void sub_8078114(struct Sprite *sprite) { + if (sprite->data3) { + sprite->pos2.x = Sin(sprite->data0, sprite->data1); + sprite->pos2.y = Cos(sprite->data0, sprite->data1); + sprite->data0 += sprite->data2; + if (sprite->data0 >= 0x100) { + sprite->data0 -= 0x100; + } else if (sprite->data0 < 0) { + sprite->data0 += 0x100; + } + sprite->data3--; + } else { + sub_8078104(sprite); + } +} + +void sub_8078174(struct Sprite *sprite) { + if (sprite->data3) { + sprite->pos2.x = Sin(sprite->data0, (sprite->data5 >> 8) + sprite->data1); + sprite->pos2.y = Cos(sprite->data0, (sprite->data5 >> 8) + sprite->data1); + sprite->data0 += sprite->data2; + sprite->data5 += sprite->data4; + if (sprite->data0 >= 0x100) { + sprite->data0 -= 0x100; + } else if (sprite->data0 < 0) { + sprite->data0 += 0x100; + } + sprite->data3--; + } else { + sub_8078104(sprite); + } +} + +void unref_sub_80781F0(struct Sprite *sprite) { + if (sprite->data3) { + sprite->pos2.x = Sin(sprite->data0, sprite->data1); + sprite->pos2.y = Cos(sprite->data4, sprite->data1); + sprite->data0 += sprite->data2; + sprite->data4 += sprite->data5; + if (sprite->data0 >= 0x100) { + sprite->data0 -= 0x100; + } else if (sprite->data0 < 0) { + sprite->data0 += 0x100; + } + if (sprite->data4 >= 0x100) { + sprite->data4 -= 0x100; + } else if (sprite->data4 < 0) { + sprite->data4 += 0x100; + } + sprite->data3--; + } else { + sub_8078104(sprite); + } +} + +void sub_8078278(struct Sprite *sprite) { + if (sprite->data3) { + sprite->pos2.x = Sin(sprite->data0, sprite->data1); + sprite->pos2.y = Cos(sprite->data0, sprite->data4); + sprite->data0 += sprite->data2; + if (sprite->data0 >= 0x100) { + sprite->data0 -= 0x100; + } else if (sprite->data0 < 0) { + sprite->data0 += 0x100; + } + sprite->data3--; + } else { + sub_8078104(sprite); + } +} + +void sub_80782D8(struct Sprite *sprite) { + if (sprite->data0 > 0) { + sprite->data0--; + } else { + sub_8078104(sprite); + } +} + +void sub_80782F8(struct Sprite *sprite) { + sub_8078314(sprite); + sprite->callback = sub_8078364; + sprite->callback(sprite); +} + +void sub_8078314(struct Sprite *sprite) { + s16 old; + int v1; + if (sprite->data1 > sprite->data2) { + sprite->data0 = -sprite->data0; + } + v1 = sprite->data2 - sprite->data1; + old = sprite->data0; + sprite->data0 = abs(v1 / sprite->data0); + sprite->data2 = (sprite->data4 - sprite->data3) / sprite->data0; + sprite->data1 = old; +} + +void sub_8078364(struct Sprite *sprite) { + if (sprite->data0 > 0) { + sprite->data0--; + sprite->pos2.x += sprite->data1; + sprite->pos2.y += sprite->data2; + } else { + sub_8078104(sprite); + } +} + +void sub_8078394(struct Sprite *sprite) { + if (sprite->data0 > 0) { + sprite->data0--; + sprite->data3 += sprite->data1; + sprite->data4 += sprite->data2; + sprite->pos2.x = sprite->data3 >> 8; + sprite->pos2.y = sprite->data4 >> 8; + } else { + sub_8078104(sprite); + } +} + +void sub_80783D0(struct Sprite *sprite) { + if (sprite->data0 > 0) { + sprite->data0--; + sprite->data3 += sprite->data1; + sprite->data4 += sprite->data2; + sprite->pos2.x = sprite->data3 >> 8; + sprite->pos2.y = sprite->data4 >> 8; + } else { + sub_8078104(sprite); + } + UpdateMonIconFrame(sprite); +} + +void unref_sub_8078414(struct Sprite *sprite) { + sprite->data1 = sprite->pos1.x + sprite->pos2.x; + sprite->data3 = sprite->pos1.y + sprite->pos2.y; + sprite->data2 = sub_8077ABC(gUnknown_0202F7C9, 2); + sprite->data4 = sub_8077ABC(gUnknown_0202F7C9, 3); + sprite->callback = sub_80782F8; +} + +void sub_8078458(struct Sprite *sprite) { + if (sprite->data0 > 0) { + sprite->data0--; + gSprites[sprite->data3].pos2.x += sprite->data1; + gSprites[sprite->data3].pos2.y += sprite->data2; + } else { + sub_8078104(sprite); + } +} + +void sub_80784A8(struct Sprite *sprite) { + if (sprite->data0 > 0) { + sprite->data0--; + sprite->data3 += sprite->data1; + sprite->data4 += sprite->data2; + gSprites[sprite->data5].pos2.x = sprite->data3 >> 8; + gSprites[sprite->data5].pos2.y = sprite->data4 >> 8; + } else { + sub_8078104(sprite); + } +} + +void sub_8078504(struct Sprite *sprite) { + if (sprite->data0 > 0) { + sprite->data0--; + sprite->pos2.x = sprite->data2 >> 8; + sprite->data2 += sprite->data1; + sprite->pos2.y = sprite->data4 >> 8; + sprite->data4 += sprite->data3; + if (sprite->data0 % sprite->data5 == 0) { + if (sprite->data5) { + sprite->invisible ^= 1; + } + } + } else { + sub_8078104(sprite); + } +} + +void move_anim_8074EE0(struct Sprite *sprite) { + FreeSpriteOamMatrix(sprite); + move_anim_8072740(sprite); +} + +void unref_sub_8078588(struct Sprite *sprite) { + sprite->data1 = sprite->pos1.x + sprite->pos2.x; + sprite->data3 = sprite->pos1.y + sprite->pos2.y; + sprite->data2 = sub_8077ABC(gUnknown_0202F7C8, 2); + sprite->data4 = sub_8077ABC(gUnknown_0202F7C8, 3); + sprite->callback = sub_80782F8; +} + +void unref_sub_80785CC(struct Sprite *sprite) { + ResetPaletteStructByUid(sprite->data5); + move_anim_8074EE0(sprite); +} + +void sub_80785E4(struct Sprite *sprite) { + if (sprite->affineAnimEnded) { + sub_8078104(sprite); + } +} + +void sub_8078600(struct Sprite *sprite) { + if (sprite->animEnded) { + sub_8078104(sprite); + } +} + +void sub_807861C(struct Sprite *sprite) { + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + move_anim_8072740(sprite); +} + +void sub_8078634(u8 task) { + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + move_anim_task_del(task); +} + +void sub_8078650(struct Sprite *sprite) { + sprite->pos1.x = sub_8077ABC(gUnknown_0202F7C8, 2); + sprite->pos1.y = sub_8077ABC(gUnknown_0202F7C8, 3); +} + +void sub_807867C(struct Sprite *sprite, s16 a2) { + u16 v1 = sub_8077ABC(gUnknown_0202F7C8, 0); + u16 v2 = sub_8077ABC(gUnknown_0202F7C9, 0); + if (v1 > v2) { + sprite->pos1.x -= a2; + } else if (v1 < v2) { + sprite->pos1.x += a2; + } else { + if (battle_side_get_owner(gUnknown_0202F7C8)) { + sprite->pos1.x -= a2; + } else { + sprite->pos1.x += a2; + } + } +} + +void sub_80786EC(struct Sprite *sprite) { + sprite->data1 = sprite->pos1.x; + sprite->data3 = sprite->pos1.y; + obj_translate_based_on_private_1_2_3_4(sprite); + sprite->data6 = 0x8000 / sprite->data0; + sprite->data7 = 0; +} + +bool8 sub_8078718(struct Sprite *sprite) { + if (sub_8078B5C(sprite)) { + return TRUE; + } + sprite->data7 += sprite->data6; + sprite->pos2.y += Sin((u8)(sprite->data7 >> 8), sprite->data5); + return FALSE; +} + +void oamt_add_pos2_onto_pos1(struct Sprite *sprite) { + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; +} + +void sub_8078764(struct Sprite *sprite, u8 a2) { + if (!a2) { + sprite->pos1.x = sub_8077EE4(gUnknown_0202F7C9, 0); + sprite->pos1.y = sub_8077EE4(gUnknown_0202F7C9, 1); + } + sub_807867C(sprite, gBattleAnimArgs[0]); + sprite->pos1.y += gBattleAnimArgs[1]; +} + +void sub_80787B0(struct Sprite *sprite, u8 a2) { + if (!a2) { + sprite->pos1.x = sub_8077EE4(gUnknown_0202F7C8, 0); + sprite->pos1.y = sub_8077EE4(gUnknown_0202F7C8, 1); + } else { + sprite->pos1.x = sub_8077EE4(gUnknown_0202F7C8, 2); + sprite->pos1.y = sub_8077EE4(gUnknown_0202F7C8, 3); + } + sub_807867C(sprite, gBattleAnimArgs[0]); + sprite->pos1.y += gBattleAnimArgs[1]; +} + +u8 battle_side_get_owner(u8 slot) { + return gUnknown_02024A72[slot] & 1; +} + +u8 battle_get_per_side_status(u8 slot) { + return gUnknown_02024A72[slot]; +} + +u8 battle_get_side_with_given_state(u8 slot) { + u8 i; + for (i = 0; i < gUnknown_02024A68; i++) { + if (gUnknown_02024A72[i] == slot) { + break; + } + } + return i; +} + +bool8 sub_8078874(u8 slot) { + if (sub_8076BE0()) { + if (gUnknown_0202F7C8 == slot) { + return TRUE; + } + if (gUnknown_0202F7C9 == slot) { + return TRUE; + } + return FALSE; + } else { + if (gUnknown_02024A72[slot] == 0xff) { + return FALSE; + } + if (battle_side_get_owner(slot)) { + if (GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_HP) != 0) { + return TRUE; + } + } else { + if (GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_HP) != 0) { + return TRUE; + } + } + return FALSE; + } +} + +bool8 IsDoubleBattle() { + return IS_DOUBLE_BATTLE(); +} + +void sub_8078914(struct Struct_sub_8078914 *unk) { + if (sub_8076BE0()) { + unk->field_0 = (u8 *)0x6008000; + unk->field_4 = (u8 *)0x600f000; + unk->field_8 = 0xe; + } else { + unk->field_0 = (u8 *)0x6004000; + unk->field_4 = (u8 *)0x600e000; + unk->field_8 = 0x8; + } +} + +void sub_8078954(struct Struct_sub_8078914 *unk) { + if (sub_8076BE0()) { + unk->field_0 = (u8 *)0x6008000; + unk->field_4 = (u8 *)0x600f000; + unk->field_8 = 0xe; + } else if (battle_get_per_side_status_permutated(gUnknown_0202F7C8) == 1) { + unk->field_0 = (u8 *)0x6004000; + unk->field_4 = (u8 *)0x600e000; + unk->field_8 = 0x8; + } else { + unk->field_0 = (u8 *)0x6006000; + unk->field_4 = (u8 *)0x600f000; + unk->field_8 = 0x9; + } +} + +u8 sub_80789BC() { + if (sub_8076BE0()) { + return 1; + } + return 2; +} + +void sub_80789D4(bool8 a1) { + if (!a1) { + BG3CNT.size = 0; + BG3CNT.overflow = 1; + } else if (sub_8076BE0()) { + BG3CNT.size = 0; + BG3CNT.overflow = 1; + } else { + BG3CNT.size = 1; + BG3CNT.overflow = 0; + } +} + +void sub_8078A34(struct Sprite *sprite) { + sprite->data1 = sprite->pos1.x; + sprite->data3 = sprite->pos1.y; + sub_8078A5C(sprite); + sprite->callback = sub_80783D0; + sprite->callback(sprite); +} + +void sub_8078A5C(struct Sprite *sprite) { + s16 x = (sprite->data2 - sprite->data1) << 8; + s16 y = (sprite->data4 - sprite->data3) << 8; + sprite->data1 = x / sprite->data0; + sprite->data2 = y / sprite->data0; + sprite->data4 = 0; + sprite->data3 = 0; +} + +void obj_translate_based_on_private_1_2_3_4(struct Sprite *sprite) { + int x = sprite->data2 - sprite->data1; + int y = sprite->data4 - sprite->data3; + bool8 r8 = x < 0; + bool8 r9 = y < 0; + u16 x2 = abs(x) << 8; + u16 y2 = abs(y) << 8; + x2 = x2 / sprite->data0; + y2 = y2 / sprite->data0; + if (r8) { + x2 |= 1; + } else { + x2 &= ~1; + } + if (r9) { + y2 |= 1; + } else { + y2 &= ~1; + } + sprite->data1 = x2; + sprite->data2 = y2; + sprite->data4 = 0; + sprite->data3 = 0; +} + +void sub_8078B34(struct Sprite *sprite) { + sprite->data1 = sprite->pos1.x; + sprite->data3 = sprite->pos1.y; + obj_translate_based_on_private_1_2_3_4(sprite); + sprite->callback = sub_8078BB8; + sprite->callback(sprite); +} + +bool8 sub_8078B5C(struct Sprite *sprite) { + u16 v1, v2, x, y; + if (!sprite->data0) { + return TRUE; + } + v1 = sprite->data1; + v2 = sprite->data2; + x = sprite->data3; + y = sprite->data4; + x += v1; + y += v2; + if (v1 & 1) { + sprite->pos2.x = -(x >> 8); + } else { + sprite->pos2.x = x >> 8; + } + if (v2 & 1) { + sprite->pos2.y = -(y >> 8); + } else { + sprite->pos2.y = y >> 8; + } + sprite->data3 = x; + sprite->data4 = y; + sprite->data0--; + return FALSE; +} + +void sub_8078BB8(struct Sprite *sprite) { + if (sub_8078B5C(sprite)) { + sub_8078104(sprite); + } +} + +void sub_8078BD4(struct Sprite *sprite) { + int v1 = abs(sprite->data2 - sprite->data1) << 8; + sprite->data0 = v1 / sprite->data0; + obj_translate_based_on_private_1_2_3_4(sprite); +} + +void sub_8078C00(struct Sprite *sprite) { + sprite->data1 = sprite->pos1.x; + sprite->data3 = sprite->pos1.y; + sub_8078BD4(sprite); + sprite->callback = sub_8078BB8; + sprite->callback(sprite); +} + +void sub_8078C28(struct Sprite *sprite) { + int x = sprite->data2 - sprite->data1; + int y = sprite->data4 - sprite->data3; + bool8 x_sign = x < 0; + bool8 y_sign = y < 0; + u16 x2 = abs(x) << 4; + u16 y2 = abs(y) << 4; + x2 /= sprite->data0; + y2 /= sprite->data0; + if (x_sign) { + x2 |= 1; + } else { + x2 &= ~1; + } + if (y_sign) { + y2 |= 1; + } else { + y2 &= ~1; + } + sprite->data1 = x2; + sprite->data2 = y2; + sprite->data4 = 0; + sprite->data3 = 0; +} + +void sub_8078CC0(struct Sprite *sprite) { + sprite->data1 = sprite->pos1.x; + sprite->data3 = sprite->pos1.y; + sub_8078C28(sprite); + sprite->callback = sub_8078D44; + sprite->callback(sprite); +} + +bool8 sub_8078CE8(struct Sprite *sprite) { + u16 v1, v2, x, y; + if (!sprite->data0) { + return TRUE; + } + v1 = sprite->data1; + v2 = sprite->data2; + x = sprite->data3; + y = sprite->data4; + x += v1; + y += v2; + if (v1 & 1) { + sprite->pos2.x = -(x >> 4); + } else { + sprite->pos2.x = x >> 4; + } + if (v2 & 1) { + sprite->pos2.y = -(y >> 4); + } else { + sprite->pos2.y = y >> 4; + } + sprite->data3 = x; + sprite->data4 = y; + sprite->data0--; + return FALSE; +} + +void sub_8078D44(struct Sprite *sprite) { + if (sub_8078CE8(sprite)) { + sub_8078104(sprite); + } +} + +void sub_8078D60(struct Sprite *sprite) { + int v1 = abs(sprite->data2 - sprite->data1) << 4; + sprite->data0 = v1 / sprite->data0; + sub_8078C28(sprite); +} + +void sub_8078D8C(struct Sprite *sprite) { + sprite->data1 = sprite->pos1.x; + sprite->data3 = sprite->pos1.y; + sub_8078D60(sprite); + sprite->callback = sub_8078D44; + sprite->callback(sprite); +} + +void obj_id_set_rotscale(u8 sprite, s16 xScale, s16 yScale, u16 rotation) { + int i; + struct ObjAffineSrcData src; + struct OamMatrix matrix; + src.xScale = xScale; + src.yScale = yScale; + src.rotation = rotation; + if (sub_8078E38()) { + src.xScale = -src.xScale; + } + i = gSprites[sprite].oam.matrixNum; + ObjAffineSet(&src, &matrix, 1, 2); + gOamMatrices[i].a = matrix.a; + gOamMatrices[i].b = matrix.b; + gOamMatrices[i].c = matrix.c; + gOamMatrices[i].d = matrix.d; +} + +bool8 sub_8078E38() { + if (sub_8076BE0()) { + if (gSprites[obj_id_for_side_relative_to_move(0)].data2 == 0xc9 /* XXX SPECIES_UNOWN? */) { + return FALSE; + } + return TRUE; + } + return FALSE; +} + +void sub_8078E70(u8 sprite, u8 a2) { + struct Struct_2017810 *unk; + u8 r7 = gSprites[sprite].data0; + if (sub_8076BE0() || b_side_obj__get_some_boolean(r7)) { + gSprites[sprite].invisible = FALSE; + } + gSprites[sprite].oam.objMode = a2; + gSprites[sprite].affineAnimPaused = TRUE; + if (!sub_8076BE0() && !gSprites[sprite].oam.affineMode) { + unk = &unk_2017810[r7]; + gSprites[sprite].oam.matrixNum = unk->field_6; + } + gSprites[sprite].oam.affineMode = 3; + CalcCenterToCornerVec(&gSprites[sprite], gSprites[sprite].oam.shape, gSprites[sprite].oam.size, gSprites[sprite].oam.affineMode); +} + +void sub_8078F40(u8 sprite) { + obj_id_set_rotscale(sprite, 0x100, 0x100, 0); + gSprites[sprite].oam.affineMode = 1; + gSprites[sprite].oam.objMode = 0; + gSprites[sprite].affineAnimPaused = FALSE; + CalcCenterToCornerVec(&gSprites[sprite], gSprites[sprite].oam.shape, gSprites[sprite].oam.size, gSprites[sprite].oam.affineMode); +} + +void sub_8078F9C(u8 sprite) { + u16 matrix = gSprites[sprite].oam.matrixNum; + s16 c = gOamMatrices[matrix].c; + if (c < 0) { + c = -c; + } + gSprites[sprite].pos2.y = c >> 3; +} + +// related to obj_id_set_rotscale +void sub_8078FDC(struct Sprite *sprite, bool8 a2, s16 xScale, s16 yScale, u16 rotation) { + int i; + struct ObjAffineSrcData src; + struct OamMatrix matrix; + if (sprite->oam.affineMode & 1) { + sprite->affineAnimPaused = TRUE; + if (a2) { + CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode); + } + src.xScale = xScale; + src.yScale = yScale; + src.rotation = rotation; + if (sub_8078E38()) { + src.xScale = -src.xScale; + } + i = sprite->oam.matrixNum; + ObjAffineSet(&src, &matrix, 1, 2); + gOamMatrices[i].a = matrix.a; + gOamMatrices[i].b = matrix.b; + gOamMatrices[i].c = matrix.c; + gOamMatrices[i].d = matrix.d; + } +} + +void sub_8079098(struct Sprite *sprite) { + sub_8078FDC(sprite, TRUE, 0x100, 0x100, 0); + sprite->affineAnimPaused = FALSE; + CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode); +} + +u16 sub_80790D8(s16 a, s16 b) { + return ArcTan2(a, b); +} + +u16 sub_80790F0(s16 a, s16 b) { + u16 var = sub_80790D8(a, b); + return -var; +} + +void sub_8079108(u16 a1, bool8 a2) { + int i; + struct Color *c; + struct Color *c2; + u16 average; + + a1 *= 0x10; + + if (!a2) { + for (i = 0; i < 0x10; i++) { + c = (struct Color *)&gPlttBufferUnfaded[a1 + i]; + average = c->r + c->g + c->b; + average /= 3; + + c2 = (struct Color *)&gPlttBufferFaded[a1 + i]; + c2->r = average; + c2->g = average; + c2->b = average; + } + } else { + CpuCopy32(&gPlttBufferUnfaded[a1], &gPlttBufferFaded[a1], 0x20); + } +} + +u32 sub_80791A8(u8 a1, u8 a2, u8 a3, u8 a4, u8 a5, u8 a6, u8 a7) { + u32 var = 0; + u32 shift; + if (a1) { + if (!sub_8076BE0()) { + var = 0xe; + } else { + var = 1 << sub_80789BC(); + } + } + if (a2) { + shift = gUnknown_0202F7C8 + 16; + var |= 1 << shift; + } + if (a3) { + shift = gUnknown_0202F7C9 + 16; + var |= 1 << shift; + } + if (a4) { + if (b_side_obj__get_some_boolean(gUnknown_0202F7C8 ^ 2)) { + shift = (gUnknown_0202F7C8 ^ 2) + 16; + var |= 1 << shift; + } + } + if (a5) { + if (b_side_obj__get_some_boolean(gUnknown_0202F7C9 ^ 2)) { + shift = (gUnknown_0202F7C9 ^ 2) + 16; + var |= 1 << shift; + } + } + if (a6) { + if (!sub_8076BE0()) { + var |= 0x100; + } else { + var |= 0x4000; + } + } + if (a7) { + if (!sub_8076BE0()) { + var |= 0x200; + } + } + return var; +} + +u32 sub_80792C0(u8 a1, u8 a2, u8 a3, u8 a4) { + u32 var = 0; + u32 shift; + if (sub_8076BE0()) { + if (a1) { + var |= 1 << 18; + return var; + } + } else { + if (a1) { + if (b_side_obj__get_some_boolean(battle_get_side_with_given_state(0))) { + var |= 1 << (battle_get_side_with_given_state(0) + 16); + } + } + if (a2) { + if (b_side_obj__get_some_boolean(battle_get_side_with_given_state(2))) { + shift = battle_get_side_with_given_state(2) + 16; + var |= 1 << shift; + } + } + if (a3) { + if (b_side_obj__get_some_boolean(battle_get_side_with_given_state(1))) { + shift = battle_get_side_with_given_state(1) + 16; + var |= 1 << shift; + } + } + if (a4) { + if (b_side_obj__get_some_boolean(battle_get_side_with_given_state(3))) { + shift = battle_get_side_with_given_state(3) + 16; + var |= 1 << shift; + } + } + } + return var; +} + +u8 sub_80793A8(u8 a1) { + return a1; +} + +u8 unref_sub_80793B0(u8 a1) { + return battle_get_side_with_given_state(a1); +} + +void sub_80793C4(struct Sprite *sprite) { + bool8 var; + if (!sprite->data0) { + if (!gBattleAnimArgs[3]) { + var = TRUE; + } else { + var = FALSE; + } + if (!gBattleAnimArgs[2]) { + sub_80787B0(sprite, var); + } else { + sub_8078764(sprite, var); + } + sprite->data0++; + + } else if (sprite->animEnded || sprite->affineAnimEnded) { + move_anim_8074EE0(sprite); + } +} + +void sub_807941C(struct Sprite *sprite) { + bool8 v1; + u8 v2; + if (!(gBattleAnimArgs[5] & 0xff00)) { + v1 = TRUE; + } else { + v1 = FALSE; + } + if (!(gBattleAnimArgs[5] & 0xff)) { + v2 = 3; + } else { + v2 = 1; + } + sub_80787B0(sprite, v1); + if (battle_side_get_owner(gUnknown_0202F7C8)) { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + } + sprite->data0 = gBattleAnimArgs[4]; + sprite->data2 = sub_8077ABC(gUnknown_0202F7C9, 2) + gBattleAnimArgs[2]; + sprite->data4 = sub_8077ABC(gUnknown_0202F7C9, v2) + gBattleAnimArgs[3]; + sprite->callback = sub_8078B34; + oamt_set_x3A_32(sprite, move_anim_8072740); +} + +void sub_80794A8(struct Sprite *sprite) { + sub_80787B0(sprite, 1); + if (battle_side_get_owner(gUnknown_0202F7C8)) { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + } + sprite->data0 = gBattleAnimArgs[4]; + sprite->data2 = sub_8077ABC(gUnknown_0202F7C9, 2) + gBattleAnimArgs[2]; + sprite->data4 = sub_8077ABC(gUnknown_0202F7C9, 3) + gBattleAnimArgs[3]; + sprite->data5 = gBattleAnimArgs[5]; + sub_80786EC(sprite); + sprite->callback = sub_8079518; +} + +void sub_8079518(struct Sprite *sprite) { + if (sub_8078718(sprite)) { + move_anim_8072740(sprite); + } +} + +void sub_8079534(struct Sprite *sprite) { + u8 r4, slot, r7; + if (!gBattleAnimArgs[6]) { + r4 = 1; + r7 = 3; + } else { + r4 = 0; + r7 = 1; + } + if (!gBattleAnimArgs[5]) { + sub_80787B0(sprite, r4); + slot = gUnknown_0202F7C8; + } else { + sub_8078764(sprite, r4); + slot = gUnknown_0202F7C9; + } + if (battle_side_get_owner(gUnknown_0202F7C8)) { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + } + sub_8078764(sprite, r4); + sprite->data0 = gBattleAnimArgs[4]; + sprite->data2 = sub_8077ABC(slot, 2) + gBattleAnimArgs[2]; + sprite->data4 = sub_8077ABC(slot, r7) + gBattleAnimArgs[3]; + sprite->callback = sub_8078B34; + oamt_set_x3A_32(sprite, move_anim_8072740); +} + +s16 duplicate_obj_of_side_rel2move_in_transparent_mode(u8 a1) { + u16 i; + u8 sprite = obj_id_for_side_relative_to_move(a1); + if (sprite != 0xff) { + for (i = 0; i < 0x40; i++) { + if (gSprites[i].inUse) { + continue; + } + gSprites[i] = gSprites[sprite]; + gSprites[i].oam.objMode = 1; + gSprites[i].invisible = FALSE; + return i; + } + } + return -1; +} + +void obj_delete_but_dont_free_vram(struct Sprite *sprite) { + sprite->usingSheet = TRUE; + DestroySprite(sprite); +} + +void sub_8079670(u8 task) { + s16 v1 = 0; + s16 v2 = 0; + if (gBattleAnimArgs[2] > gBattleAnimArgs[0]) { + v2 = 1; + } + if (gBattleAnimArgs[2] < gBattleAnimArgs[0]) { + v2 = -1; + } + if (gBattleAnimArgs[3] > gBattleAnimArgs[1]) { + v1 = 1; + } + if (gBattleAnimArgs[3] < gBattleAnimArgs[1]) { + v1 = -1; + } + gTasks[task].data[0] = 0; + gTasks[task].data[1] = gBattleAnimArgs[4]; + gTasks[task].data[2] = 0; + gTasks[task].data[3] = gBattleAnimArgs[0]; + gTasks[task].data[4] = gBattleAnimArgs[1]; + gTasks[task].data[5] = v2; + gTasks[task].data[6] = v1; + gTasks[task].data[7] = gBattleAnimArgs[2]; + gTasks[task].data[8] = gBattleAnimArgs[3]; + REG_BLDALPHA = (gBattleAnimArgs[1] << 8) | gBattleAnimArgs[0]; + gTasks[task].func = sub_80796F8; +} + +void sub_80796F8(u8 taskId) { + struct Task *task = &gTasks[taskId]; + if (++task->data[0] > task->data[1]) { + task->data[0] = 0; + if (++task->data[2] & 1) { + if (task->data[3] != task->data[7]) { + task->data[3] += task->data[5]; + } + } else { + if (task->data[4] != task->data[8]) { + task->data[4] += task->data[6]; + } + } + REG_BLDALPHA = (task->data[4] << 8) | task->data[3]; + if (task->data[3] == task->data[7] && task->data[4] == task->data[8]) { + move_anim_task_del(taskId); + return; + } + } +} + +void sub_8079790(u8 task) { + u8 sprite = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]); + if (sprite == 0xff) { + move_anim_task_del(task); + return; + } + gTasks[task].data[0] = (gSprites[sprite].oam.paletteNum * 0x10) + 0x101; + sub_80797EC(&gTasks[task]); +} + +void sub_80797EC(struct Task *task) { + task->data[1] = gBattleAnimArgs[1]; + task->data[2] = 0; + task->data[3] = gBattleAnimArgs[2]; + task->data[4] = 0; + task->data[5] = gBattleAnimArgs[3]; + task->data[6] = 0; + task->data[7] = gBattleAnimArgs[4]; + task->func = sub_8079814; +} + +void sub_8079814(u8 taskId) { + struct Task *task = &gTasks[taskId]; + if (++task->data[4] >= task->data[5]) { + task->data[4] = 0; + if (!task->data[6]) { + task->data[2]++; + BlendPalette(task->data[0], 0xf, 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]); + if (!task->data[2]) { + if (--task->data[7]) { + task->data[4] = 0; + task->data[6] = 0; + } else { + move_anim_task_del(taskId); + return; + } + } + } + } +} + +void sub_80798AC(u8 task) { + u8 palette = IndexOfSpritePaletteTag(gBattleAnimArgs[0]); + if (palette == 0xff) { + move_anim_task_del(task); + return; + } + gTasks[task].data[0] = (palette * 0x10) + 0x101; + sub_80797EC(&gTasks[task]); +} + +void sub_80798F4(struct Task *task, u8 a2, void *a3) { + task->data[7] = 0; + task->data[8] = 0; + task->data[9] = 0; + task->data[15] = a2; + task->data[10] = 0x100; + task->data[11] = 0x100; + task->data[12] = 0; + sub_8079BF4(&task->data[13], &task->data[14], a3); + sub_8078E70(a2, 0); +} + +bool8 sub_807992C(struct Task *task) { + gUnknown_0202F7D4 = sub_8079BFC(task->data[13], task->data[14]) + (task->data[7] << 3); + switch (gUnknown_0202F7D4->field_0) { + default: + if (!gUnknown_0202F7D4->field_5) { + task->data[10] = gUnknown_0202F7D4->field_0; + task->data[11] = gUnknown_0202F7D4->field_2; + task->data[12] = gUnknown_0202F7D4->field_4; + task->data[7]++; + gUnknown_0202F7D4++; + } + task->data[10] += gUnknown_0202F7D4->field_0; + task->data[11] += gUnknown_0202F7D4->field_2; + task->data[12] += gUnknown_0202F7D4->field_4; + obj_id_set_rotscale(task->data[15], task->data[10], task->data[11], task->data[12]); + sub_8079A64(task->data[15]); + if (++task->data[8] >= gUnknown_0202F7D4->field_5) { + task->data[8] = 0; + task->data[7]++; + } + break; + + case 0x7ffe: + task->data[7] = gUnknown_0202F7D4->field_2; + break; + + case 0x7ffd: + if (gUnknown_0202F7D4->field_2) { + if (task->data[9]) { + if (!--task->data[9]) { + task->data[7]++; + break; + } + } else { + task->data[9] = gUnknown_0202F7D4->field_2; + } + if (!task->data[7]) { + break; + } + for (;;) { + task->data[7]--; + gUnknown_0202F7D4--; + if (gUnknown_0202F7D4->field_0 == 0x7ffd) { + task->data[7]++; + return TRUE; + } + if (!task->data[7]) { + return TRUE; + } + } + } + task->data[7]++; + break; + + case 0x7fff: + gSprites[task->data[15]].pos2.y = 0; + sub_8078F40(task->data[15]); + return FALSE; + } + + return TRUE; +} + +void sub_8079A64(u8 sprite) { + int var = 0x40 - sub_8079B10(sprite) * 2; + u16 matrix = gSprites[sprite].oam.matrixNum; + int var2 = (var << 8) / gOamMatrices[matrix].d; + if (var2 > 0x80) { + var2 = 0x80; + } + gSprites[sprite].pos2.y = (var - var2) / 2; +} + +void sub_8079AB8(u8 sprite, u8 sprite2) { + int var = 0x40 - sub_8079B10(sprite2) * 2; + u16 matrix = gSprites[sprite].oam.matrixNum; + int var2 = (var << 8) / gOamMatrices[matrix].d; + if (var2 > 0x80) { + var2 = 0x80; + } + gSprites[sprite].pos2.y = (var - var2) / 2; +} + +u16 sub_8079B10(u8 sprite) { + struct TransformStatus *transform; + u8 slot = gSprites[sprite].data0; + u16 species; + u16 i; + for (i = 0; i < (sizeof(gBattleMonSprites) / sizeof(u8)); i++) { + if (gBattleMonSprites[i] == sprite) { + if (sub_8076BE0()) { + species = unk_2019348.field_0; + return gMonBackPicCoords[species].y_offset; + } else { + if (!battle_side_get_owner(i)) { + transform = &gTransformStatuses[slot]; + if (!transform->species) { + species = GetMonData(&gPlayerParty[gBattleMonPartyPositions[i]], MON_DATA_SPECIES); + } else { + species = transform->species; + } + return gMonBackPicCoords[species].y_offset; + } else { + transform = &gTransformStatuses[slot]; + if (!transform->species) { + species = GetMonData(&gEnemyParty[gBattleMonPartyPositions[i]], MON_DATA_SPECIES); + } else { + species = transform->species; + } + return gMonFrontPicCoords[species].y_offset; + } + } + } + } + return 0x40; +} + +void sub_8079BF4(s16 *bottom, s16 *top, void *ptr) { + *bottom = ((intptr_t) ptr) & 0xffff; + *top = (((intptr_t) ptr) >> 16) & 0xffff; +} + +void *sub_8079BFC(s16 bottom, s16 top) { + return (void *)((u16)bottom | ((u16)top << 16)); +} + + +// possible new file + +void sub_8079C08(struct Task *task, u8 a2, s16 a3, s16 a4, s16 a5, s16 a6, u16 a7) { + task->data[8] = a7; + task->data[15] = a2; + task->data[9] = a3; + task->data[10] = a4; + task->data[13] = a5; + task->data[14] = a6; + task->data[11] = (a5 - a3) / a7; + task->data[12] = (a6 - a4) / a7; +} + +u8 sub_8079C74(struct Task *task) { + if (!task->data[8]) { + return 0; + } + if (--task->data[8]) { + task->data[9] += task->data[11]; + task->data[10] += task->data[12]; + } else { + task->data[9] = task->data[13]; + task->data[10] = task->data[14]; + } + obj_id_set_rotscale(task->data[15], task->data[9], task->data[10], 0); + if (task->data[8]) { + sub_8079A64(task->data[15]); + } else { + gSprites[task->data[15]].pos2.y = 0; + } + return task->data[8]; +} + +void sub_8079CEC(u8 task) { + u16 v1; + if (gUnknown_0202F7BE <= 30) { + v1 = 0; + } else if (gUnknown_0202F7BE <= 100) { + v1 = 1; + } else if (gUnknown_0202F7BE <= 200) { + v1 = 2; + } else { + v1 = 3; + } + gBattleAnimArgs[7] = v1; + move_anim_task_del(task); +} + +void unref_sub_8079D20(u8 priority) { + if (b_side_obj__get_some_boolean(gUnknown_0202F7C9)) { + gSprites[gBattleMonSprites[gUnknown_0202F7C9]].oam.priority = priority; + } + if (b_side_obj__get_some_boolean(gUnknown_0202F7C8)) { + gSprites[gBattleMonSprites[gUnknown_0202F7C8]].oam.priority = priority; + } + if (b_side_obj__get_some_boolean(gUnknown_0202F7C9 ^ 2)) { + gSprites[gBattleMonSprites[gUnknown_0202F7C9 ^ 2]].oam.priority = priority; + } + if (b_side_obj__get_some_boolean(gUnknown_0202F7C8 ^ 2)) { + gSprites[gBattleMonSprites[gUnknown_0202F7C8 ^ 2]].oam.priority = priority; + } +} + +void sub_8079E24() { + int i; + for (i = 0; i < gUnknown_02024A68; i++) { + if (b_side_obj__get_some_boolean(i)) { + gSprites[gBattleMonSprites[i]].subpriority = sub_8079E90(i); + gSprites[gBattleMonSprites[i]].oam.priority = 2; + } + } +} + +u8 sub_8079E90(u8 slot) { + u8 status; + u8 ret; + if (sub_8076BE0()) { + if (slot == 2) { + return 30; + } else { + return 40; + } + } else { + status = battle_get_per_side_status(slot); + if (status == 0) { + ret = 30; + } else if (status == 2) { + ret = 20; + } else if (status == 1) { + ret = 40; + } else { + ret = 50; + } + } + return ret; +} + +u8 sub_8079ED4(u8 slot) { + u8 status = battle_get_per_side_status(slot); + if (sub_8076BE0()) { + return 2; + } + if (status == 0 || status == 3) { + return BG2CNT.priority; + } else { + return BG1CNT.priority; + } +} + +u8 battle_get_per_side_status_permutated(u8 slot) { + u8 status; + if (!sub_8076BE0()) { + status = battle_get_per_side_status(slot); + if (status == 0 || status == 3) { + return 2; + } else { + return 1; + } + } + return 1; +} + +u8 sub_8079F44(u16 species, u8 isBackpic, u8 a3, s16 a4, s16 a5, u8 a6, u32 a7, u32 a8) { + void *src; + void *dest; + int size; + + u8 sprite; + u16 sheet = LoadSpriteSheet(&gUnknown_0837F5E0[a3]); + u16 palette = AllocSpritePalette(gSpriteTemplate_837F5B0[a3].paletteTag); + if (!isBackpic) { + LoadCompressedPalette(species_and_otid_get_pal(species, a8, a7), (palette * 0x10) + 0x100, 0x20); + LoadSpecialPokePic( + &gMonFrontPicTable[species], + gMonFrontPicCoords[species].coords, + gMonFrontPicCoords[species].y_offset, + 0x2000000, + (void *)0x2000000, + species, + a7, + 1 + ); + } else { + LoadCompressedPalette( + species_and_otid_get_pal(species, a8, a7), (palette * 0x10) + 0x100, 0x20); + LoadSpecialPokePic( + &gMonBackPicTable[species], + gMonBackPicCoords[species].coords, + gMonBackPicCoords[species].y_offset, + 0x2000000, + (void *)0x2000000, + species, + a7, + 0 + ); + } + + src = (void *)0x2000000; + dest = (void *)(0x6010000 + (sheet * 0x20)); + size = 0x800; + DmaCopy32(3, src, dest, size); + + if (!isBackpic) { + sprite = CreateSprite(&gSpriteTemplate_837F5B0[a3], a4, a5 + gMonFrontPicCoords[species].y_offset, a6); + } else { + sprite = CreateSprite(&gSpriteTemplate_837F5B0[a3], a4, a5 + gMonBackPicCoords[species].y_offset, a6); + } + if (sub_8076BE0()) { + gSprites[sprite].affineAnims = &gSpriteAffineAnimTable_81E7C18; + StartSpriteAffineAnim(&gSprites[sprite], 0); + } + return sprite; +} + +void sub_807A0F4(struct Sprite *sprite) { + DestroySpriteAndFreeResources(sprite); +} + +int sub_807A100(u8 slot, u8 a2) { + u16 species; + u32 personality; + u16 letter; + u16 var; + int ret; + const struct MonCoords *coords; + struct TransformStatus *transform; + if (sub_8076BE0()) { + if (unk_2019348.field_4 & 1) { + species = unk_2019348.field_2; + personality = unk_2019348.field_10; + } else { + species = unk_2019348.field_0; + personality = unk_2019348.field_8; + } + if (species == SPECIES_UNOWN) { + letter = GET_UNOWN_LETTER(personality); + if (!letter) { + var = SPECIES_UNOWN; + } else { + var = letter + SPECIES_UNOWN_B - 1; + } + coords = &gMonBackPicCoords[var]; + } else if (species == SPECIES_CASTFORM) { + coords = &gCastformFrontSpriteCoords[gBattleMonForms[slot]]; + } else if (species <= SPECIES_EGG) { + coords = &gMonBackPicCoords[species]; + } else { + coords = &gMonBackPicCoords[0]; + } + } else { + if (!battle_side_get_owner(slot)) { + transform = &gTransformStatuses[slot]; + if (!transform->species) { + species = GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES); + personality = GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_PERSONALITY); + } else { + species = transform->species; + personality = gTransformPersonalities[slot]; + } + if (species == SPECIES_UNOWN) { + letter = GET_UNOWN_LETTER(personality); + if (!letter) { + var = SPECIES_UNOWN; + } else { + var = letter + SPECIES_UNOWN_B - 1; + } + coords = &gMonBackPicCoords[var]; + } else if (species > SPECIES_EGG) { + coords = &gMonBackPicCoords[0]; + } else { + coords = &gMonBackPicCoords[species]; + } + } else { + transform = &gTransformStatuses[slot]; + if (!transform->species) { + species = GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES); + personality = GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_PERSONALITY); + } else { + species = transform->species; + personality = gTransformPersonalities[slot]; + } + if (species == SPECIES_UNOWN) { + letter = GET_UNOWN_LETTER(personality); + if (!letter) { + var = SPECIES_UNOWN; + } else { + var = letter + SPECIES_UNOWN_B - 1; + } + coords = &gMonFrontPicCoords[var]; + } else if (species == SPECIES_CASTFORM) { + coords = &gCastformFrontSpriteCoords[gBattleMonForms[slot]]; + } else if (species > SPECIES_EGG) { + coords = &gMonFrontPicCoords[0]; + } else { + coords = &gMonFrontPicCoords[species]; + } + } + } + + switch (a2) { + case 0: + return (coords->coords & 0xf) * 8; + case 1: + return (coords->coords >> 4) * 8; + case 4: + return sub_8077ABC(slot, 2) - ((coords->coords >> 4) * 4); + case 5: + return sub_8077ABC(slot, 2) + ((coords->coords >> 4) * 4); + case 2: + return sub_8077ABC(slot, 3) - ((coords->coords & 0xf) * 4); + case 3: + return sub_8077ABC(slot, 3) + ((coords->coords & 0xf) * 4); + case 6: + ret = sub_8077ABC(slot, 1) + 0x1f; + return ret - coords->y_offset; + default: + return 0; + } +} + +void sub_807A3FC(u8 slot, u8 a2, s16 *a3, s16 *a4) { + u8 v1, v2; + s16 v3, v4; + s16 v5, v6; + if (!a2) { + v1 = 0; + v2 = 1; + } else { + v1 = 2; + v2 = 3; + } + v3 = sub_8077ABC(slot, v1); + v4 = sub_8077ABC(slot, v2); + if (IsDoubleBattle() && !sub_8076BE0()) { + v5 = sub_8077ABC(slot ^ 2, v1); + v6 = sub_8077ABC(slot ^ 2, v2); + } else { + v5 = v3; + v6 = v4; + } + *a3 = (v3 + v5) / 2; + *a4 = (v4 + v6) / 2; +} + +u8 sub_807A4A0(int a1, u8 sprite, int a3) { + u8 new_sprite = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy); + gSprites[new_sprite] = gSprites[sprite]; + gSprites[new_sprite].usingSheet = TRUE; + gSprites[new_sprite].oam.priority = 0; + gSprites[new_sprite].oam.objMode = 2; + gSprites[new_sprite].oam.tileNum = gSprites[sprite].oam.tileNum; + gSprites[new_sprite].callback = SpriteCallbackDummy; + return new_sprite; +} + +void sub_807A544(struct Sprite *sprite) { + sub_8078650(sprite); + if (battle_side_get_owner(gUnknown_0202F7C8)) { + sprite->pos1.x -= gBattleAnimArgs[0]; + gBattleAnimArgs[3] = -gBattleAnimArgs[3]; + sprite->hFlip = TRUE; + } else { + sprite->pos1.x += gBattleAnimArgs[0]; + } + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data0 = gBattleAnimArgs[2]; + sprite->data1 = gBattleAnimArgs[3]; + sprite->data3 = gBattleAnimArgs[4]; + sprite->data5 = gBattleAnimArgs[5]; + oamt_set_x3A_32(sprite, move_anim_8074EE0); + sprite->callback = sub_8078504; +} + +void sub_807A5C4(struct Sprite *sprite) { + if (battle_side_get_owner(gUnknown_0202F7C8)) { + sprite->pos1.x -= gBattleAnimArgs[0]; + gBattleAnimArgs[3] *= -1; + } else { + sprite->pos1.x += gBattleAnimArgs[0]; + } + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data0 = gBattleAnimArgs[2]; + sprite->data1 = gBattleAnimArgs[3]; + sprite->data3 = gBattleAnimArgs[4]; + sprite->data5 = gBattleAnimArgs[5]; + StartSpriteAnim(sprite, gBattleAnimArgs[6]); + oamt_set_x3A_32(sprite, move_anim_8074EE0); + sprite->callback = sub_8078504; +} + +void sub_807A63C(struct Sprite *sprite) { + sub_8078650(sprite); + if (battle_side_get_owner(gUnknown_0202F7C8)) { + sprite->pos1.x -= gBattleAnimArgs[0]; + } else { + sprite->pos1.x += gBattleAnimArgs[0]; + } + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->callback = sub_8078600; + oamt_set_x3A_32(sprite, move_anim_8072740); +} + +void sub_807A69C(u8 taskId) { + u16 src; + u16 dest; + struct Task *task = &gTasks[taskId]; + task->data[0] = obj_id_for_side_relative_to_move(0); + task->data[1] = (battle_side_get_owner(gUnknown_0202F7C8)) ? -8 : 8; + task->data[2] = 0; + task->data[3] = 0; + gSprites[task->data[0]].pos2.x -= task->data[0]; + task->data[4] = AllocSpritePalette(10097); + task->data[5] = 0; + + dest = (task->data[4] + 0x10) * 0x10; + src = (gSprites[task->data[0]].oam.paletteNum + 0x10) * 0x10; + task->data[6] = sub_8079E90(gUnknown_0202F7C8); + if (task->data[6] == 20 || task->data[6] == 40) { + task->data[6] = 2; + } else { + task->data[6] = 3; + } + CpuCopy32(&gPlttBufferUnfaded[src], &gPlttBufferFaded[dest], 0x20); + BlendPalette(dest, 0x10, gBattleAnimArgs[1], gBattleAnimArgs[0]); + task->func = sub_807A784; +} + +void sub_807A784(u8 taskId) { + struct Task *task = &gTasks[taskId]; + switch (task->data[2]) { + case 0: + sub_807A850(task, taskId); + gSprites[task->data[0]].pos2.x += task->data[1]; + if (++task->data[3] == 5) { + task->data[3]--; + task->data[2]++; + } + break; + case 1: + sub_807A850(task, taskId); + gSprites[task->data[0]].pos2.x -= task->data[1]; + if (--task->data[3] == 0) { + gSprites[task->data[0]].pos2.x = 0; + task->data[2]++; + } + break; + case 2: + if (!task->data[5]) { + FreeSpritePaletteByTag(10097); + move_anim_task_del(taskId); + } + break; + } +} + +void sub_807A850(struct Task *task, u8 taskId) { + s16 sprite = duplicate_obj_of_side_rel2move_in_transparent_mode(0); + if (sprite >= 0) { + gSprites[sprite].oam.priority = task->data[6]; + gSprites[sprite].oam.paletteNum = task->data[4]; + gSprites[sprite].data0 = 8; + gSprites[sprite].data1 = taskId; + gSprites[sprite].data2 = sprite; + gSprites[sprite].pos2.x = gSprites[task->data[0]].pos2.x; + gSprites[sprite].callback = sub_807A8D4; + task->data[5]++; + } +} + +void sub_807A8D4(struct Sprite *sprite) { + if (--sprite->data0 == 0) { + gTasks[sprite->data1].data[5]--; + obj_delete_but_dont_free_vram(sprite); + } +} + +void sub_807A908(struct Sprite *sprite) { + sprite->pos1.x = sub_8077ABC(gUnknown_0202F7C8, 2); + sprite->pos1.y = sub_8077ABC(gUnknown_0202F7C8, 3); + if (!battle_side_get_owner(gUnknown_0202F7C8)) { + sprite->data0 = 5; + } else { + sprite->data0 = -10; + } + sprite->data1 = -40; + sprite->callback = sub_807A960; +} + +void sub_807A960(struct Sprite *sprite) { + sprite->data2 += sprite->data0; + sprite->data3 += sprite->data1; + sprite->pos2.x = sprite->data2 / 10; + sprite->pos2.y = sprite->data3 / 10; + if (sprite->data1 < -20) { + sprite->data1++; + } + if ((sprite->pos1.y + sprite->pos2.y) < -32) { + move_anim_8072740(sprite); + } +} + +void sub_807A9BC(struct Sprite *sprite) { + int x; + sprite->data0 = gBattleAnimArgs[2]; + sprite->data2 = sprite->pos1.x + gBattleAnimArgs[4]; + sprite->data4 = sprite->pos1.y + gBattleAnimArgs[5]; + if (!battle_side_get_owner(gUnknown_0202F7C9)) { + x = (u16)gBattleAnimArgs[4] + 30; + sprite->pos1.x += x; + sprite->pos1.y = gBattleAnimArgs[5] - 20; + } else { + x = (u16)gBattleAnimArgs[4] - 30; + sprite->pos1.x += x; + sprite->pos1.y = gBattleAnimArgs[5] - 80; + } + sprite->callback = sub_8078B34; + oamt_set_x3A_32(sprite, move_anim_8072740); +} diff --git a/sym_ewram.txt b/sym_ewram.txt index fd8d4bb49..f4a688968 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -485,10 +485,7 @@ gPokemonCryBGMDuckingCounter: @ 202F7A0 .space 0x4 .include "src/battle_anim.o" - - .align 2 -gUnknown_0202F7D4: @ 202F7D4 - .space 0x10 + .include "src/rom_8077ABC.o" gUnknown_0202F7E4: @ 202F7E4 .space 0x4 |