diff options
-rw-r--r-- | asm/battle_6.s | 5484 | ||||
-rw-r--r-- | include/battle.h | 11 | ||||
-rw-r--r-- | include/pokemon.h | 252 | ||||
-rw-r--r-- | include/rom3.h | 40 | ||||
-rwxr-xr-x | ld_script.txt | 2 | ||||
-rw-r--r-- | src/battle_6.c | 1465 | ||||
-rw-r--r-- | src/battle_811DA74.c | 10 |
7 files changed, 1634 insertions, 5630 deletions
diff --git a/asm/battle_6.s b/asm/battle_6.s deleted file mode 100644 index 90c100c73..000000000 --- a/asm/battle_6.s +++ /dev/null @@ -1,5484 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start PlayerHandleGetAttributes -PlayerHandleGetAttributes: @ 802E4D0 - push {r4-r6,lr} - sub sp, 0x100 - movs r6, 0 - ldr r1, _0802E4FC @ =gBattleBufferA - ldr r0, _0802E500 @ =gActiveBank - ldrb r2, [r0] - lsls r0, r2, 9 - adds r1, 0x2 - adds r1, r0, r1 - ldrb r0, [r1] - cmp r0, 0 - bne _0802E508 - ldr r0, _0802E504 @ =gBattlePartyID - lsls r1, r2, 1 - adds r1, r0 - ldrb r0, [r1] - mov r1, sp - bl dp01_getattr_by_ch1_for_player_pokemon_ - adds r6, r0, 0 - b _0802E52A - .align 2, 0 -_0802E4FC: .4byte gBattleBufferA -_0802E500: .4byte gActiveBank -_0802E504: .4byte gBattlePartyID -_0802E508: - ldrb r4, [r1] - movs r5, 0 -_0802E50C: - movs r0, 0x1 - ands r0, r4 - cmp r0, 0 - beq _0802E522 - lsls r0, r5, 24 - lsrs r0, 24 - mov r2, sp - adds r1, r2, r6 - bl dp01_getattr_by_ch1_for_player_pokemon_ - adds r6, r0 -_0802E522: - lsrs r4, 1 - adds r5, 0x1 - cmp r5, 0x5 - ble _0802E50C -_0802E52A: - lsls r1, r6, 16 - lsrs r1, 16 - movs r0, 0x1 - mov r2, sp - bl dp01_build_cmdbuf_x1D_1D_numargs_varargs - bl PlayerBufferExecCompleted - add sp, 0x100 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end PlayerHandleGetAttributes - - thumb_func_start dp01_getattr_by_ch1_for_player_pokemon_ -dp01_getattr_by_ch1_for_player_pokemon_: @ 802E544 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x90 - adds r7, r1, 0 - lsls r0, 24 - lsrs r5, r0, 24 - movs r6, 0 - ldr r2, _0802E578 @ =gBattleBufferA - ldr r3, _0802E57C @ =gActiveBank - ldrb r0, [r3] - lsls r0, 9 - adds r1, r2, 0x1 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x3B - bls _0802E56E - bl _0802ECDA -_0802E56E: - lsls r0, 2 - ldr r1, _0802E580 @ =_0802E584 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0802E578: .4byte gBattleBufferA -_0802E57C: .4byte gActiveBank -_0802E580: .4byte _0802E584 - .align 2, 0 -_0802E584: - .4byte _0802E674 - .4byte _0802E898 - .4byte _0802E8A8 - .4byte _0802E8B8 - .4byte _0802E920 - .4byte _0802E920 - .4byte _0802E920 - .4byte _0802E920 - .4byte _0802E93C - .4byte _0802E978 - .4byte _0802E978 - .4byte _0802E978 - .4byte _0802E978 - .4byte _0802ECDA - .4byte _0802ECDA - .4byte _0802ECDA - .4byte _0802ECDA - .4byte _0802E994 - .4byte _0802E9A4 - .4byte _0802E9D4 - .4byte _0802E9E4 - .4byte _0802E9F4 - .4byte _0802EA04 - .4byte _0802EA14 - .4byte _0802EA24 - .4byte _0802EA34 - .4byte _0802EA44 - .4byte _0802EA54 - .4byte _0802EA64 - .4byte _0802EA74 - .4byte _0802EA84 - .4byte _0802EA94 - .4byte _0802EAE4 - .4byte _0802EAF4 - .4byte _0802EB04 - .4byte _0802EB14 - .4byte _0802EB24 - .4byte _0802EB34 - .4byte _0802EB44 - .4byte _0802EB54 - .4byte _0802EB64 - .4byte _0802EB98 - .4byte _0802EBA8 - .4byte _0802EBB8 - .4byte _0802EBC8 - .4byte _0802EBD8 - .4byte _0802EBE8 - .4byte _0802EBF8 - .4byte _0802EC08 - .4byte _0802EC28 - .4byte _0802EC38 - .4byte _0802EC48 - .4byte _0802EC58 - .4byte _0802EC68 - .4byte _0802EC78 - .4byte _0802EC88 - .4byte _0802EC98 - .4byte _0802ECA8 - .4byte _0802ECB8 - .4byte _0802ECC8 -_0802E674: - movs r0, 0x64 - adds r4, r5, 0 - muls r4, r0 - ldr r0, _0802E888 @ =gPlayerParty - adds r4, r0 - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - mov r1, sp - strh r0, [r1] - adds r0, r4, 0 - movs r1, 0xC - bl GetMonData - mov r1, sp - strh r0, [r1, 0x2E] - movs r6, 0 - add r0, sp, 0x24 - mov r9, r0 - movs r1, 0x3B - add r1, sp - mov r10, r1 - mov r2, sp - adds r2, 0x2B - str r2, [sp, 0x80] - mov r0, sp - adds r0, 0x2A - str r0, [sp, 0x7C] - mov r1, sp - adds r1, 0x68 - str r1, [sp, 0x8C] - adds r2, 0x5 - str r2, [sp, 0x84] - adds r0, 0x12 - str r0, [sp, 0x88] - mov r8, r4 - add r4, sp, 0xC -_0802E6C0: - adds r1, r6, 0 - adds r1, 0xD - mov r0, r8 - bl GetMonData - strh r0, [r4] - adds r1, r6, 0 - adds r1, 0x11 - mov r0, r8 - bl GetMonData - mov r2, r9 - adds r1, r2, r6 - strb r0, [r1] - adds r4, 0x2 - adds r6, 0x1 - cmp r6, 0x3 - ble _0802E6C0 - movs r0, 0x64 - adds r4, r5, 0 - muls r4, r0 - ldr r0, _0802E888 @ =gPlayerParty - adds r4, r0 - adds r0, r4, 0 - movs r1, 0x15 - bl GetMonData - mov r1, r10 - strb r0, [r1] - adds r0, r4, 0 - movs r1, 0x20 - bl GetMonData - ldr r2, [sp, 0x80] - strb r0, [r2] - adds r0, r4, 0 - movs r1, 0x19 - bl GetMonData - str r0, [sp, 0x44] - adds r0, r4, 0 - movs r1, 0x27 - bl GetMonData - mov r3, sp - movs r5, 0x1F - ands r0, r5 - ldrb r2, [r3, 0x14] - movs r1, 0x20 - negs r1, r1 - ands r1, r2 - orrs r1, r0 - strb r1, [r3, 0x14] - adds r0, r4, 0 - movs r1, 0x28 - bl GetMonData - mov r3, sp - movs r6, 0x1F - ands r0, r6 - lsls r0, 5 - ldrh r2, [r3, 0x14] - ldr r1, _0802E88C @ =0xfffffc1f - ands r1, r2 - orrs r1, r0 - strh r1, [r3, 0x14] - adds r0, r4, 0 - movs r1, 0x29 - bl GetMonData - mov r3, sp - ands r0, r5 - lsls r0, 2 - ldrb r2, [r3, 0x15] - movs r1, 0x7D - negs r1, r1 - ands r1, r2 - orrs r1, r0 - strb r1, [r3, 0x15] - adds r0, r4, 0 - movs r1, 0x2A - bl GetMonData - movs r1, 0x1F - ands r1, r0 - lsls r1, 15 - ldr r0, [sp, 0x14] - ldr r2, _0802E890 @ =0xfff07fff - ands r0, r2 - orrs r0, r1 - str r0, [sp, 0x14] - adds r0, r4, 0 - movs r1, 0x2B - bl GetMonData - mov r3, sp - ands r0, r6 - lsls r0, 4 - ldrh r2, [r3, 0x16] - ldr r1, _0802E894 @ =0xfffffe0f - ands r1, r2 - orrs r1, r0 - strh r1, [r3, 0x16] - adds r0, r4, 0 - movs r1, 0x2C - bl GetMonData - mov r3, sp - ands r0, r5 - lsls r0, 1 - ldrb r2, [r3, 0x17] - movs r1, 0x3F - negs r1, r1 - ands r1, r2 - orrs r1, r0 - strb r1, [r3, 0x17] - adds r0, r4, 0 - movs r1, 0 - bl GetMonData - str r0, [sp, 0x48] - adds r0, r4, 0 - movs r1, 0x37 - bl GetMonData - str r0, [sp, 0x4C] - adds r0, r4, 0 - movs r1, 0x38 - bl GetMonData - ldr r1, [sp, 0x7C] - strb r0, [r1] - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - mov r1, sp - strh r0, [r1, 0x28] - adds r0, r4, 0 - movs r1, 0x3A - bl GetMonData - mov r1, sp - strh r0, [r1, 0x2C] - adds r0, r4, 0 - movs r1, 0x3B - bl GetMonData - mov r1, sp - strh r0, [r1, 0x2] - adds r0, r4, 0 - movs r1, 0x3C - bl GetMonData - mov r1, sp - strh r0, [r1, 0x4] - adds r0, r4, 0 - movs r1, 0x3D - bl GetMonData - mov r1, sp - strh r0, [r1, 0x6] - adds r0, r4, 0 - movs r1, 0x3E - bl GetMonData - mov r1, sp - strh r0, [r1, 0x8] - adds r0, r4, 0 - movs r1, 0x3F - bl GetMonData - mov r1, sp - strh r0, [r1, 0xA] - adds r0, r4, 0 - movs r1, 0x2D - bl GetMonData - mov r3, sp - movs r1, 0x1 - ands r0, r1 - lsls r0, 6 - ldrb r2, [r3, 0x17] - movs r1, 0x41 - negs r1, r1 - ands r1, r2 - orrs r1, r0 - strb r1, [r3, 0x17] - adds r0, r4, 0 - movs r1, 0x2E - bl GetMonData - mov r3, sp - lsls r0, 7 - ldrb r2, [r3, 0x17] - movs r1, 0x7F - ands r1, r2 - orrs r1, r0 - strb r1, [r3, 0x17] - adds r0, r4, 0 - movs r1, 0x1 - bl GetMonData - str r0, [sp, 0x54] - adds r0, r4, 0 - movs r1, 0x2 - ldr r2, [sp, 0x8C] - bl GetMonData - ldr r0, [sp, 0x84] - ldr r1, [sp, 0x8C] - bl StringCopy10 - adds r0, r4, 0 - movs r1, 0x7 - ldr r2, [sp, 0x88] - bl GetMonData - mov r2, sp - movs r6, 0 -_0802E878: - adds r0, r7, r6 - adds r1, r2, r6 - ldrb r1, [r1] - strb r1, [r0] - adds r6, 0x1 - cmp r6, 0x57 - bls _0802E878 - b _0802ECDA - .align 2, 0 -_0802E888: .4byte gPlayerParty -_0802E88C: .4byte 0xfffffc1f -_0802E890: .4byte 0xfff07fff -_0802E894: .4byte 0xfffffe0f -_0802E898: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802E8A4 @ =gPlayerParty - adds r0, r1 - movs r1, 0xB - b _0802EC12 - .align 2, 0 -_0802E8A4: .4byte gPlayerParty -_0802E8A8: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802E8B4 @ =gPlayerParty - adds r0, r1 - movs r1, 0xC - b _0802EC12 - .align 2, 0 -_0802E8B4: .4byte gPlayerParty -_0802E8B8: - movs r6, 0 - add r2, sp, 0x58 - mov r9, r2 - add r0, sp, 0x60 - mov r10, r0 - movs r0, 0x64 - adds r1, r5, 0 - muls r1, r0 - ldr r0, _0802E91C @ =gPlayerParty - adds r4, r1, r0 - mov r8, r9 -_0802E8CE: - adds r1, r6, 0 - adds r1, 0xD - adds r0, r4, 0 - bl GetMonData - mov r1, r8 - strh r0, [r1] - adds r1, r6, 0 - adds r1, 0x11 - adds r0, r4, 0 - bl GetMonData - mov r2, r10 - adds r1, r2, r6 - strb r0, [r1] - movs r0, 0x2 - add r8, r0 - adds r6, 0x1 - cmp r6, 0x3 - ble _0802E8CE - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802E91C @ =gPlayerParty - adds r0, r1 - movs r1, 0x15 - bl GetMonData - mov r1, r9 - strb r0, [r1, 0xC] - mov r2, r9 - movs r6, 0 -_0802E90C: - adds r0, r7, r6 - adds r1, r2, r6 - ldrb r1, [r1] - strb r1, [r0] - adds r6, 0x1 - cmp r6, 0xF - bls _0802E90C - b _0802ECDA - .align 2, 0 -_0802E91C: .4byte gPlayerParty -_0802E920: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802E938 @ =gPlayerParty - adds r0, r1 - ldrb r1, [r3] - lsls r1, 9 - adds r2, 0x1 - adds r1, r2 - ldrb r1, [r1] - adds r1, 0x9 - b _0802EC12 - .align 2, 0 -_0802E938: .4byte gPlayerParty -_0802E93C: - movs r6, 0 - movs r0, 0x64 - adds r4, r5, 0 - muls r4, r0 - ldr r2, _0802E974 @ =gPlayerParty - mov r8, r2 -_0802E948: - adds r1, r6, 0 - adds r1, 0x11 - mov r2, r8 - adds r0, r4, r2 - bl GetMonData - adds r1, r7, r6 - strb r0, [r1] - adds r6, 0x1 - cmp r6, 0x3 - ble _0802E948 - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802E974 @ =gPlayerParty - adds r0, r1 - movs r1, 0x15 - bl GetMonData - adds r1, r7, r6 - strb r0, [r1] - adds r6, 0x1 - b _0802ECDA - .align 2, 0 -_0802E974: .4byte gPlayerParty -_0802E978: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802E990 @ =gPlayerParty - adds r0, r1 - ldrb r1, [r3] - lsls r1, 9 - adds r2, 0x1 - adds r1, r2 - ldrb r1, [r1] - adds r1, 0x8 - b _0802ECD2 - .align 2, 0 -_0802E990: .4byte gPlayerParty -_0802E994: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802E9A0 @ =gPlayerParty - adds r0, r1 - movs r1, 0x1 - b _0802E9AE - .align 2, 0 -_0802E9A0: .4byte gPlayerParty -_0802E9A4: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802E9D0 @ =gPlayerParty - adds r0, r1 - movs r1, 0x19 -_0802E9AE: - bl GetMonData - adds r1, r0, 0 - strb r1, [r7] - movs r0, 0xFF - lsls r0, 8 - ands r0, r1 - lsrs r0, 8 - strb r0, [r7, 0x1] - movs r0, 0xFF - lsls r0, 16 - ands r0, r1 - lsrs r0, 16 - strb r0, [r7, 0x2] - movs r6, 0x3 - b _0802ECDA - .align 2, 0 -_0802E9D0: .4byte gPlayerParty -_0802E9D4: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802E9E0 @ =gPlayerParty - adds r0, r1 - movs r1, 0x1A - b _0802ECD2 - .align 2, 0 -_0802E9E0: .4byte gPlayerParty -_0802E9E4: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802E9F0 @ =gPlayerParty - adds r0, r1 - movs r1, 0x1B - b _0802ECD2 - .align 2, 0 -_0802E9F0: .4byte gPlayerParty -_0802E9F4: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802EA00 @ =gPlayerParty - adds r0, r1 - movs r1, 0x1C - b _0802ECD2 - .align 2, 0 -_0802EA00: .4byte gPlayerParty -_0802EA04: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802EA10 @ =gPlayerParty - adds r0, r1 - movs r1, 0x1D - b _0802ECD2 - .align 2, 0 -_0802EA10: .4byte gPlayerParty -_0802EA14: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802EA20 @ =gPlayerParty - adds r0, r1 - movs r1, 0x1E - b _0802ECD2 - .align 2, 0 -_0802EA20: .4byte gPlayerParty -_0802EA24: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802EA30 @ =gPlayerParty - adds r0, r1 - movs r1, 0x1F - b _0802ECD2 - .align 2, 0 -_0802EA30: .4byte gPlayerParty -_0802EA34: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802EA40 @ =gPlayerParty - adds r0, r1 - movs r1, 0x20 - b _0802ECD2 - .align 2, 0 -_0802EA40: .4byte gPlayerParty -_0802EA44: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802EA50 @ =gPlayerParty - adds r0, r1 - movs r1, 0x22 - b _0802ECD2 - .align 2, 0 -_0802EA50: .4byte gPlayerParty -_0802EA54: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802EA60 @ =gPlayerParty - adds r0, r1 - movs r1, 0x23 - b _0802ECD2 - .align 2, 0 -_0802EA60: .4byte gPlayerParty -_0802EA64: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802EA70 @ =gPlayerParty - adds r0, r1 - movs r1, 0x24 - b _0802ECD2 - .align 2, 0 -_0802EA70: .4byte gPlayerParty -_0802EA74: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802EA80 @ =gPlayerParty - adds r0, r1 - movs r1, 0x25 - b _0802ECD2 - .align 2, 0 -_0802EA80: .4byte gPlayerParty -_0802EA84: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802EA90 @ =gPlayerParty - adds r0, r1 - movs r1, 0x26 - b _0802ECD2 - .align 2, 0 -_0802EA90: .4byte gPlayerParty -_0802EA94: - movs r0, 0x64 - adds r4, r5, 0 - muls r4, r0 - ldr r0, _0802EAE0 @ =gPlayerParty - adds r4, r0 - adds r0, r4, 0 - movs r1, 0x27 - bl GetMonData - strb r0, [r7] - adds r0, r4, 0 - movs r1, 0x28 - bl GetMonData - strb r0, [r7, 0x1] - adds r0, r4, 0 - movs r1, 0x29 - bl GetMonData - strb r0, [r7, 0x2] - adds r0, r4, 0 - movs r1, 0x2A - bl GetMonData - strb r0, [r7, 0x3] - adds r0, r4, 0 - movs r1, 0x2B - bl GetMonData - strb r0, [r7, 0x4] - adds r0, r4, 0 - movs r1, 0x2C - bl GetMonData - strb r0, [r7, 0x5] - movs r6, 0x6 - b _0802ECDA - .align 2, 0 -_0802EAE0: .4byte gPlayerParty -_0802EAE4: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802EAF0 @ =gPlayerParty - adds r0, r1 - movs r1, 0x27 - b _0802ECD2 - .align 2, 0 -_0802EAF0: .4byte gPlayerParty -_0802EAF4: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802EB00 @ =gPlayerParty - adds r0, r1 - movs r1, 0x28 - b _0802ECD2 - .align 2, 0 -_0802EB00: .4byte gPlayerParty -_0802EB04: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802EB10 @ =gPlayerParty - adds r0, r1 - movs r1, 0x29 - b _0802ECD2 - .align 2, 0 -_0802EB10: .4byte gPlayerParty -_0802EB14: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802EB20 @ =gPlayerParty - adds r0, r1 - movs r1, 0x2A - b _0802ECD2 - .align 2, 0 -_0802EB20: .4byte gPlayerParty -_0802EB24: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802EB30 @ =gPlayerParty - adds r0, r1 - movs r1, 0x2B - b _0802ECD2 - .align 2, 0 -_0802EB30: .4byte gPlayerParty -_0802EB34: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802EB40 @ =gPlayerParty - adds r0, r1 - movs r1, 0x2C - b _0802ECD2 - .align 2, 0 -_0802EB40: .4byte gPlayerParty -_0802EB44: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802EB50 @ =gPlayerParty - adds r0, r1 - movs r1, 0 - b _0802EB6E - .align 2, 0 -_0802EB50: .4byte gPlayerParty -_0802EB54: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802EB60 @ =gPlayerParty - adds r0, r1 - movs r1, 0x9 - b _0802EC12 - .align 2, 0 -_0802EB60: .4byte gPlayerParty -_0802EB64: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802EB94 @ =gPlayerParty - adds r0, r1 - movs r1, 0x37 -_0802EB6E: - bl GetMonData - adds r1, r0, 0 - strb r1, [r7] - movs r0, 0xFF - lsls r0, 8 - ands r0, r1 - lsrs r0, 8 - strb r0, [r7, 0x1] - movs r0, 0xFF - lsls r0, 16 - ands r0, r1 - lsrs r0, 16 - strb r0, [r7, 0x2] - lsrs r0, r1, 24 - strb r0, [r7, 0x3] - movs r6, 0x4 - b _0802ECDA - .align 2, 0 -_0802EB94: .4byte gPlayerParty -_0802EB98: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802EBA4 @ =gPlayerParty - adds r0, r1 - movs r1, 0x38 - b _0802ECD2 - .align 2, 0 -_0802EBA4: .4byte gPlayerParty -_0802EBA8: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802EBB4 @ =gPlayerParty - adds r0, r1 - movs r1, 0x39 - b _0802EC12 - .align 2, 0 -_0802EBB4: .4byte gPlayerParty -_0802EBB8: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802EBC4 @ =gPlayerParty - adds r0, r1 - movs r1, 0x3A - b _0802EC12 - .align 2, 0 -_0802EBC4: .4byte gPlayerParty -_0802EBC8: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802EBD4 @ =gPlayerParty - adds r0, r1 - movs r1, 0x3B - b _0802EC12 - .align 2, 0 -_0802EBD4: .4byte gPlayerParty -_0802EBD8: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802EBE4 @ =gPlayerParty - adds r0, r1 - movs r1, 0x3C - b _0802EC12 - .align 2, 0 -_0802EBE4: .4byte gPlayerParty -_0802EBE8: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802EBF4 @ =gPlayerParty - adds r0, r1 - movs r1, 0x3D - b _0802EC12 - .align 2, 0 -_0802EBF4: .4byte gPlayerParty -_0802EBF8: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802EC04 @ =gPlayerParty - adds r0, r1 - movs r1, 0x3E - b _0802EC12 - .align 2, 0 -_0802EC04: .4byte gPlayerParty -_0802EC08: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802EC24 @ =gPlayerParty - adds r0, r1 - movs r1, 0x3F -_0802EC12: - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - strb r0, [r7] - lsrs r0, 8 - strb r0, [r7, 0x1] - movs r6, 0x2 - b _0802ECDA - .align 2, 0 -_0802EC24: .4byte gPlayerParty -_0802EC28: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802EC34 @ =gPlayerParty - adds r0, r1 - movs r1, 0x16 - b _0802ECD2 - .align 2, 0 -_0802EC34: .4byte gPlayerParty -_0802EC38: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802EC44 @ =gPlayerParty - adds r0, r1 - movs r1, 0x17 - b _0802ECD2 - .align 2, 0 -_0802EC44: .4byte gPlayerParty -_0802EC48: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802EC54 @ =gPlayerParty - adds r0, r1 - movs r1, 0x18 - b _0802ECD2 - .align 2, 0 -_0802EC54: .4byte gPlayerParty -_0802EC58: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802EC64 @ =gPlayerParty - adds r0, r1 - movs r1, 0x21 - b _0802ECD2 - .align 2, 0 -_0802EC64: .4byte gPlayerParty -_0802EC68: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802EC74 @ =gPlayerParty - adds r0, r1 - movs r1, 0x2F - b _0802ECD2 - .align 2, 0 -_0802EC74: .4byte gPlayerParty -_0802EC78: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802EC84 @ =gPlayerParty - adds r0, r1 - movs r1, 0x30 - b _0802ECD2 - .align 2, 0 -_0802EC84: .4byte gPlayerParty -_0802EC88: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802EC94 @ =gPlayerParty - adds r0, r1 - movs r1, 0x32 - b _0802ECD2 - .align 2, 0 -_0802EC94: .4byte gPlayerParty -_0802EC98: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802ECA4 @ =gPlayerParty - adds r0, r1 - movs r1, 0x33 - b _0802ECD2 - .align 2, 0 -_0802ECA4: .4byte gPlayerParty -_0802ECA8: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802ECB4 @ =gPlayerParty - adds r0, r1 - movs r1, 0x34 - b _0802ECD2 - .align 2, 0 -_0802ECB4: .4byte gPlayerParty -_0802ECB8: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802ECC4 @ =gPlayerParty - adds r0, r1 - movs r1, 0x35 - b _0802ECD2 - .align 2, 0 -_0802ECC4: .4byte gPlayerParty -_0802ECC8: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802ECEC @ =gPlayerParty - adds r0, r1 - movs r1, 0x36 -_0802ECD2: - bl GetMonData - strb r0, [r7] - movs r6, 0x1 -_0802ECDA: - adds r0, r6, 0 - add sp, 0x90 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0802ECEC: .4byte gPlayerParty - thumb_func_end dp01_getattr_by_ch1_for_player_pokemon_ - - thumb_func_start sub_802ECF0 -sub_802ECF0: @ 802ECF0 - push {r4-r7,lr} - sub sp, 0x58 - ldr r2, _0802ED68 @ =gBattlePartyID - ldr r5, _0802ED6C @ =gActiveBank - ldrb r1, [r5] - lsls r0, r1, 1 - adds r0, r2 - ldrh r2, [r0] - movs r0, 0x64 - adds r4, r2, 0 - muls r4, r0 - ldr r3, _0802ED70 @ =gBattleBufferA - lsls r1, 9 - adds r0, r3, 0x1 - adds r0, r1, r0 - ldrb r2, [r0] - ldr r0, _0802ED74 @ =gPlayerParty - adds r0, r2, r0 - adds r6, r4, r0 - mov r0, sp - adds r4, r0, r2 - movs r2, 0 - adds r0, r3, 0x2 - adds r1, r0 - adds r7, r5, 0 - mov r12, r3 - ldrb r1, [r1] - cmp r2, r1 - bcs _0802ED46 - adds r3, r0, 0 -_0802ED2C: - adds r1, r4, r2 - adds r0, r6, r2 - ldrb r0, [r0] - strb r0, [r1] - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - ldrb r0, [r5] - lsls r0, 9 - adds r0, r3 - ldrb r0, [r0] - cmp r2, r0 - bcc _0802ED2C -_0802ED46: - ldrb r0, [r7] - lsls r0, 9 - mov r1, r12 - adds r1, 0x2 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x1 - adds r2, r4, 0 - bl dp01_build_cmdbuf_x1D_1D_numargs_varargs - bl PlayerBufferExecCompleted - add sp, 0x58 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0802ED68: .4byte gBattlePartyID -_0802ED6C: .4byte gActiveBank -_0802ED70: .4byte gBattleBufferA -_0802ED74: .4byte gPlayerParty - thumb_func_end sub_802ECF0 - - thumb_func_start PlayerHandleSetAttributes -PlayerHandleSetAttributes: @ 802ED78 - push {r4,r5,lr} - ldr r1, _0802ED9C @ =gBattleBufferA - ldr r0, _0802EDA0 @ =gActiveBank - ldrb r2, [r0] - lsls r0, r2, 9 - adds r1, 0x2 - adds r1, r0, r1 - ldrb r0, [r1] - cmp r0, 0 - bne _0802EDA8 - ldr r0, _0802EDA4 @ =gBattlePartyID - lsls r1, r2, 1 - adds r1, r0 - ldrb r0, [r1] - bl dp01_setattr_by_ch1_for_player_pokemon - b _0802EDC6 - .align 2, 0 -_0802ED9C: .4byte gBattleBufferA -_0802EDA0: .4byte gActiveBank -_0802EDA4: .4byte gBattlePartyID -_0802EDA8: - ldrb r4, [r1] - movs r5, 0 -_0802EDAC: - movs r0, 0x1 - ands r0, r4 - cmp r0, 0 - beq _0802EDBA - adds r0, r5, 0 - bl dp01_setattr_by_ch1_for_player_pokemon -_0802EDBA: - lsrs r4, 1 - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x5 - bls _0802EDAC -_0802EDC6: - bl PlayerBufferExecCompleted - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end PlayerHandleSetAttributes - - thumb_func_start dp01_setattr_by_ch1_for_player_pokemon -dp01_setattr_by_ch1_for_player_pokemon: @ 802EDD0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x34 - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _0802EE08 @ =gActiveBank - ldrb r0, [r0] - lsls r0, 9 - ldr r2, _0802EE0C @ =gUnknown_02023A63 - adds r3, r0, r2 - adds r6, r3, 0 - subs r1, r2, 0x2 - adds r0, r1 - ldrb r0, [r0] - adds r7, r2, 0 - cmp r0, 0x3B - bls _0802EDFC - bl _0802F796 -_0802EDFC: - lsls r0, 2 - ldr r1, _0802EE10 @ =_0802EE14 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0802EE08: .4byte gActiveBank -_0802EE0C: .4byte gUnknown_02023A63 -_0802EE10: .4byte _0802EE14 - .align 2, 0 -_0802EE14: - .4byte _0802EF04 - .4byte _0802F09C - .4byte _0802F0BC - .4byte _0802F0DC - .4byte _0802F134 - .4byte _0802F134 - .4byte _0802F134 - .4byte _0802F134 - .4byte _0802F15C - .4byte _0802F1C0 - .4byte _0802F1C0 - .4byte _0802F1C0 - .4byte _0802F1C0 - .4byte _0802F796 - .4byte _0802F796 - .4byte _0802F796 - .4byte _0802F796 - .4byte _0802F1F0 - .4byte _0802F210 - .4byte _0802F230 - .4byte _0802F250 - .4byte _0802F270 - .4byte _0802F290 - .4byte _0802F2B0 - .4byte _0802F2D0 - .4byte _0802F2F0 - .4byte _0802F310 - .4byte _0802F330 - .4byte _0802F350 - .4byte _0802F370 - .4byte _0802F390 - .4byte _0802F3B0 - .4byte _0802F420 - .4byte _0802F440 - .4byte _0802F460 - .4byte _0802F480 - .4byte _0802F4A0 - .4byte _0802F4C0 - .4byte _0802F4E0 - .4byte _0802F500 - .4byte _0802F520 - .4byte _0802F540 - .4byte _0802F560 - .4byte _0802F580 - .4byte _0802F5A0 - .4byte _0802F5C0 - .4byte _0802F5E0 - .4byte _0802F600 - .4byte _0802F620 - .4byte _0802F640 - .4byte _0802F660 - .4byte _0802F680 - .4byte _0802F6A0 - .4byte _0802F6C0 - .4byte _0802F6E0 - .4byte _0802F700 - .4byte _0802F720 - .4byte _0802F740 - .4byte _0802F760 - .4byte _0802F780 -_0802EF04: - movs r0, 0x64 - adds r4, r5, 0 - muls r4, r0 - ldr r0, _0802F098 @ =gPlayerParty - adds r4, r0 - adds r0, r4, 0 - movs r1, 0xB - adds r2, r6, 0 - bl SetMonData - adds r2, r6, 0 - adds r2, 0x2E - adds r0, r4, 0 - movs r1, 0xC - bl SetMonData - movs r0, 0 - mov r8, r0 - movs r0, 0x3B - adds r0, r6 - mov r10, r0 - adds r0, r6, 0 - adds r0, 0x2B - str r0, [sp, 0x20] - adds r0, 0x19 - str r0, [sp, 0x28] - adds r0, 0x4 - str r0, [sp, 0x2C] - adds r0, 0x4 - str r0, [sp, 0x30] - subs r0, 0x22 - str r0, [sp, 0x1C] - subs r0, 0x2 - str r0, [sp, 0x18] - adds r0, 0x4 - str r0, [sp, 0x24] - adds r0, r6, 0x2 - str r0, [sp, 0x4] - adds r0, r6, 0x4 - str r0, [sp, 0x8] - adds r0, r6, 0x6 - str r0, [sp, 0xC] - adds r0, 0x2 - str r0, [sp, 0x10] - adds r0, 0x2 - str r0, [sp, 0x14] - mov r9, r4 - adds r7, r6, 0 - adds r7, 0x24 - adds r4, r6, 0 - adds r4, 0xC -_0802EF6A: - mov r1, r8 - adds r1, 0xD - mov r0, r9 - adds r2, r4, 0 - bl SetMonData - mov r1, r8 - adds r1, 0x11 - mov r0, r9 - adds r2, r7, 0 - bl SetMonData - adds r7, 0x1 - adds r4, 0x2 - movs r0, 0x1 - add r8, r0 - mov r0, r8 - cmp r0, 0x3 - ble _0802EF6A - movs r0, 0x64 - adds r4, r5, 0 - muls r4, r0 - ldr r0, _0802F098 @ =gPlayerParty - adds r4, r0 - adds r0, r4, 0 - movs r1, 0x15 - mov r2, r10 - bl SetMonData - adds r0, r4, 0 - movs r1, 0x20 - ldr r2, [sp, 0x20] - bl SetMonData - adds r0, r4, 0 - movs r1, 0x19 - ldr r2, [sp, 0x28] - bl SetMonData - ldrb r0, [r6, 0x14] - lsls r0, 27 - lsrs r0, 27 - mov r1, sp - strb r0, [r1] - adds r0, r4, 0 - movs r1, 0x27 - mov r2, sp - bl SetMonData - mov r1, sp - ldrh r0, [r6, 0x14] - lsls r0, 22 - lsrs r0, 27 - strb r0, [r1] - adds r0, r4, 0 - movs r1, 0x28 - mov r2, sp - bl SetMonData - mov r1, sp - ldrb r0, [r6, 0x15] - lsls r0, 25 - lsrs r0, 27 - strb r0, [r1] - adds r0, r4, 0 - movs r1, 0x29 - mov r2, sp - bl SetMonData - mov r1, sp - ldr r0, [r6, 0x14] - lsls r0, 12 - lsrs r0, 27 - strb r0, [r1] - adds r0, r4, 0 - movs r1, 0x2A - mov r2, sp - bl SetMonData - mov r1, sp - ldrh r0, [r6, 0x16] - lsls r0, 23 - lsrs r0, 27 - strb r0, [r1] - adds r0, r4, 0 - movs r1, 0x2B - mov r2, sp - bl SetMonData - mov r1, sp - ldrb r0, [r6, 0x17] - lsls r0, 26 - lsrs r0, 27 - strb r0, [r1] - adds r0, r4, 0 - movs r1, 0x2C - mov r2, sp - bl SetMonData - adds r0, r4, 0 - movs r1, 0 - ldr r2, [sp, 0x2C] - bl SetMonData - adds r0, r4, 0 - movs r1, 0x37 - ldr r2, [sp, 0x30] - bl SetMonData - adds r0, r4, 0 - movs r1, 0x38 - ldr r2, [sp, 0x1C] - bl SetMonData - adds r0, r4, 0 - movs r1, 0x39 - ldr r2, [sp, 0x18] - bl SetMonData - adds r0, r4, 0 - movs r1, 0x3A - ldr r2, [sp, 0x24] - bl SetMonData - adds r0, r4, 0 - movs r1, 0x3B - ldr r2, [sp, 0x4] - bl SetMonData - adds r0, r4, 0 - movs r1, 0x3C - ldr r2, [sp, 0x8] - bl SetMonData - adds r0, r4, 0 - movs r1, 0x3D - ldr r2, [sp, 0xC] - bl SetMonData - adds r0, r4, 0 - movs r1, 0x3E - ldr r2, [sp, 0x10] - bl SetMonData - adds r0, r4, 0 - movs r1, 0x3F - ldr r2, [sp, 0x14] - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F098: .4byte gPlayerParty -_0802F09C: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F0B4 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F0B8 @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0xB - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F0B4: .4byte gPlayerParty -_0802F0B8: .4byte gActiveBank -_0802F0BC: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F0D4 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F0D8 @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0xC - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F0D4: .4byte gPlayerParty -_0802F0D8: .4byte gActiveBank -_0802F0DC: - movs r0, 0 - mov r8, r0 - movs r0, 0xC - adds r0, r3 - mov r9, r0 - movs r0, 0x64 - adds r1, r5, 0 - muls r1, r0 - ldr r0, _0802F130 @ =gPlayerParty - adds r7, r1, r0 - adds r6, r3, 0 - adds r6, 0x8 - adds r4, r3, 0 -_0802F0F6: - mov r1, r8 - adds r1, 0xD - adds r0, r7, 0 - adds r2, r4, 0 - bl SetMonData - mov r1, r8 - adds r1, 0x11 - adds r0, r7, 0 - adds r2, r6, 0 - bl SetMonData - adds r6, 0x1 - adds r4, 0x2 - movs r0, 0x1 - add r8, r0 - mov r0, r8 - cmp r0, 0x3 - ble _0802F0F6 - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F130 @ =gPlayerParty - adds r0, r1 - movs r1, 0x15 - mov r2, r9 - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F130: .4byte gPlayerParty -_0802F134: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F150 @ =gPlayerParty - adds r0, r1 - ldr r3, _0802F154 @ =gBattleBufferA - ldr r1, _0802F158 @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r1, r3, 0x1 - adds r1, r2, r1 - ldrb r1, [r1] - adds r1, 0x9 - b _0802F1D8 - .align 2, 0 -_0802F150: .4byte gPlayerParty -_0802F154: .4byte gBattleBufferA -_0802F158: .4byte gActiveBank -_0802F15C: - movs r0, 0x64 - adds r4, r5, 0 - muls r4, r0 - ldr r0, _0802F1B8 @ =gPlayerParty - adds r4, r0 - ldr r5, _0802F1BC @ =gActiveBank - ldrb r2, [r5] - lsls r2, 9 - adds r2, r7 - adds r0, r4, 0 - movs r1, 0x11 - bl SetMonData - ldrb r2, [r5] - lsls r2, 9 - adds r0, r7, 0x1 - adds r2, r0 - adds r0, r4, 0 - movs r1, 0x12 - bl SetMonData - ldrb r2, [r5] - lsls r2, 9 - adds r0, r7, 0x2 - adds r2, r0 - adds r0, r4, 0 - movs r1, 0x13 - bl SetMonData - ldrb r2, [r5] - lsls r2, 9 - adds r0, r7, 0x3 - adds r2, r0 - adds r0, r4, 0 - movs r1, 0x14 - bl SetMonData - ldrb r2, [r5] - lsls r2, 9 - adds r0, r7, 0x4 - adds r2, r0 - adds r0, r4, 0 - movs r1, 0x15 - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F1B8: .4byte gPlayerParty -_0802F1BC: .4byte gActiveBank -_0802F1C0: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F1E4 @ =gPlayerParty - adds r0, r1 - ldr r3, _0802F1E8 @ =gBattleBufferA - ldr r1, _0802F1EC @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r1, r3, 0x1 - adds r1, r2, r1 - ldrb r1, [r1] - adds r1, 0x8 -_0802F1D8: - adds r3, 0x3 - adds r2, r3 - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F1E4: .4byte gPlayerParty -_0802F1E8: .4byte gBattleBufferA -_0802F1EC: .4byte gActiveBank -_0802F1F0: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F208 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F20C @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x1 - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F208: .4byte gPlayerParty -_0802F20C: .4byte gActiveBank -_0802F210: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F228 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F22C @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x19 - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F228: .4byte gPlayerParty -_0802F22C: .4byte gActiveBank -_0802F230: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F248 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F24C @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x1A - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F248: .4byte gPlayerParty -_0802F24C: .4byte gActiveBank -_0802F250: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F268 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F26C @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x1B - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F268: .4byte gPlayerParty -_0802F26C: .4byte gActiveBank -_0802F270: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F288 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F28C @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x1C - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F288: .4byte gPlayerParty -_0802F28C: .4byte gActiveBank -_0802F290: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F2A8 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F2AC @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x1D - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F2A8: .4byte gPlayerParty -_0802F2AC: .4byte gActiveBank -_0802F2B0: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F2C8 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F2CC @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x1E - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F2C8: .4byte gPlayerParty -_0802F2CC: .4byte gActiveBank -_0802F2D0: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F2E8 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F2EC @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x1F - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F2E8: .4byte gPlayerParty -_0802F2EC: .4byte gActiveBank -_0802F2F0: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F308 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F30C @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x20 - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F308: .4byte gPlayerParty -_0802F30C: .4byte gActiveBank -_0802F310: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F328 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F32C @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x22 - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F328: .4byte gPlayerParty -_0802F32C: .4byte gActiveBank -_0802F330: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F348 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F34C @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x23 - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F348: .4byte gPlayerParty -_0802F34C: .4byte gActiveBank -_0802F350: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F368 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F36C @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x24 - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F368: .4byte gPlayerParty -_0802F36C: .4byte gActiveBank -_0802F370: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F388 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F38C @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x25 - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F388: .4byte gPlayerParty -_0802F38C: .4byte gActiveBank -_0802F390: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F3A8 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F3AC @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x26 - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F3A8: .4byte gPlayerParty -_0802F3AC: .4byte gActiveBank -_0802F3B0: - movs r0, 0x64 - adds r4, r5, 0 - muls r4, r0 - ldr r0, _0802F418 @ =gPlayerParty - adds r4, r0 - ldr r5, _0802F41C @ =gActiveBank - ldrb r2, [r5] - lsls r2, 9 - adds r2, r7 - adds r0, r4, 0 - movs r1, 0x27 - bl SetMonData - ldrb r2, [r5] - lsls r2, 9 - adds r0, r7, 0x1 - adds r2, r0 - adds r0, r4, 0 - movs r1, 0x28 - bl SetMonData - ldrb r2, [r5] - lsls r2, 9 - adds r0, r7, 0x2 - adds r2, r0 - adds r0, r4, 0 - movs r1, 0x29 - bl SetMonData - ldrb r2, [r5] - lsls r2, 9 - adds r0, r7, 0x3 - adds r2, r0 - adds r0, r4, 0 - movs r1, 0x2A - bl SetMonData - ldrb r2, [r5] - lsls r2, 9 - adds r0, r7, 0x4 - adds r2, r0 - adds r0, r4, 0 - movs r1, 0x2B - bl SetMonData - ldrb r2, [r5] - lsls r2, 9 - adds r0, r7, 0x5 - adds r2, r0 - adds r0, r4, 0 - b _0802F4D0 - .align 2, 0 -_0802F418: .4byte gPlayerParty -_0802F41C: .4byte gActiveBank -_0802F420: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F438 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F43C @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x27 - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F438: .4byte gPlayerParty -_0802F43C: .4byte gActiveBank -_0802F440: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F458 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F45C @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x28 - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F458: .4byte gPlayerParty -_0802F45C: .4byte gActiveBank -_0802F460: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F478 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F47C @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x29 - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F478: .4byte gPlayerParty -_0802F47C: .4byte gActiveBank -_0802F480: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F498 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F49C @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x2A - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F498: .4byte gPlayerParty -_0802F49C: .4byte gActiveBank -_0802F4A0: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F4B8 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F4BC @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x2B - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F4B8: .4byte gPlayerParty -_0802F4BC: .4byte gActiveBank -_0802F4C0: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F4D8 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F4DC @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 -_0802F4D0: - movs r1, 0x2C - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F4D8: .4byte gPlayerParty -_0802F4DC: .4byte gActiveBank -_0802F4E0: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F4F8 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F4FC @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0 - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F4F8: .4byte gPlayerParty -_0802F4FC: .4byte gActiveBank -_0802F500: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F518 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F51C @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x9 - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F518: .4byte gPlayerParty -_0802F51C: .4byte gActiveBank -_0802F520: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F538 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F53C @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x37 - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F538: .4byte gPlayerParty -_0802F53C: .4byte gActiveBank -_0802F540: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F558 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F55C @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x38 - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F558: .4byte gPlayerParty -_0802F55C: .4byte gActiveBank -_0802F560: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F578 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F57C @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x39 - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F578: .4byte gPlayerParty -_0802F57C: .4byte gActiveBank -_0802F580: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F598 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F59C @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x3A - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F598: .4byte gPlayerParty -_0802F59C: .4byte gActiveBank -_0802F5A0: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F5B8 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F5BC @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x3B - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F5B8: .4byte gPlayerParty -_0802F5BC: .4byte gActiveBank -_0802F5C0: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F5D8 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F5DC @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x3C - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F5D8: .4byte gPlayerParty -_0802F5DC: .4byte gActiveBank -_0802F5E0: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F5F8 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F5FC @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x3D - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F5F8: .4byte gPlayerParty -_0802F5FC: .4byte gActiveBank -_0802F600: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F618 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F61C @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x3E - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F618: .4byte gPlayerParty -_0802F61C: .4byte gActiveBank -_0802F620: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F638 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F63C @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x3F - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F638: .4byte gPlayerParty -_0802F63C: .4byte gActiveBank -_0802F640: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F658 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F65C @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x16 - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F658: .4byte gPlayerParty -_0802F65C: .4byte gActiveBank -_0802F660: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F678 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F67C @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x17 - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F678: .4byte gPlayerParty -_0802F67C: .4byte gActiveBank -_0802F680: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F698 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F69C @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x18 - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F698: .4byte gPlayerParty -_0802F69C: .4byte gActiveBank -_0802F6A0: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F6B8 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F6BC @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x21 - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F6B8: .4byte gPlayerParty -_0802F6BC: .4byte gActiveBank -_0802F6C0: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F6D8 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F6DC @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x2F - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F6D8: .4byte gPlayerParty -_0802F6DC: .4byte gActiveBank -_0802F6E0: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F6F8 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F6FC @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x30 - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F6F8: .4byte gPlayerParty -_0802F6FC: .4byte gActiveBank -_0802F700: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F718 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F71C @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x32 - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F718: .4byte gPlayerParty -_0802F71C: .4byte gActiveBank -_0802F720: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F738 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F73C @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x33 - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F738: .4byte gPlayerParty -_0802F73C: .4byte gActiveBank -_0802F740: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F758 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F75C @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x34 - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F758: .4byte gPlayerParty -_0802F75C: .4byte gActiveBank -_0802F760: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F778 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F77C @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x35 - bl SetMonData - b _0802F796 - .align 2, 0 -_0802F778: .4byte gPlayerParty -_0802F77C: .4byte gActiveBank -_0802F780: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0802F7C0 @ =gPlayerParty - adds r0, r1 - ldr r1, _0802F7C4 @ =gActiveBank - ldrb r2, [r1] - lsls r2, 9 - adds r2, r7 - movs r1, 0x36 - bl SetMonData -_0802F796: - ldr r2, _0802F7C8 @ =gBattlePartyID - ldr r0, _0802F7C4 @ =gActiveBank - ldrb r1, [r0] - lsls r0, r1, 1 - adds r0, r2 - ldrh r2, [r0] - movs r0, 0x64 - muls r0, r2 - ldr r2, _0802F7C0 @ =gPlayerParty - adds r0, r2 - bl sub_80324F8 - add sp, 0x34 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0802F7C0: .4byte gPlayerParty -_0802F7C4: .4byte gActiveBank -_0802F7C8: .4byte gBattlePartyID - thumb_func_end dp01_setattr_by_ch1_for_player_pokemon - - thumb_func_start sub_802F7CC -sub_802F7CC: @ 802F7CC - push {r4-r7,lr} - ldr r1, _0802F830 @ =gBattlePartyID - ldr r7, _0802F834 @ =gActiveBank - ldrb r2, [r7] - lsls r0, r2, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - adds r3, r1, 0 - muls r3, r0 - ldr r4, _0802F838 @ =gBattleBufferA - lsls r2, 9 - adds r0, r4, 0x1 - adds r0, r2, r0 - ldrb r0, [r0] - ldr r1, _0802F83C @ =gPlayerParty - adds r0, r1 - adds r5, r3, r0 - movs r3, 0 - adds r0, r4, 0x2 - adds r2, r0 - ldrb r2, [r2] - cmp r3, r2 - bcs _0802F824 - adds r6, r4, 0 - adds r2, r7, 0 - adds r4, r0, 0 -_0802F802: - adds r1, r5, r3 - ldrb r0, [r2] - lsls r0, 9 - adds r0, 0x3 - adds r0, r3, r0 - adds r0, r6 - ldrb r0, [r0] - strb r0, [r1] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - ldrb r0, [r2] - lsls r0, 9 - adds r0, r4 - ldrb r0, [r0] - cmp r3, r0 - bcc _0802F802 -_0802F824: - bl PlayerBufferExecCompleted - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0802F830: .4byte gBattlePartyID -_0802F834: .4byte gActiveBank -_0802F838: .4byte gBattleBufferA -_0802F83C: .4byte gPlayerParty - thumb_func_end sub_802F7CC - - thumb_func_start PlayerHandleLoadPokeSprite -PlayerHandleLoadPokeSprite: @ 802F840 - push {r4,lr} - ldr r2, _0802F88C @ =gBattlePartyID - ldr r4, _0802F890 @ =gActiveBank - ldrb r1, [r4] - lsls r0, r1, 1 - adds r0, r2 - ldrh r2, [r0] - movs r0, 0x64 - muls r0, r2 - ldr r2, _0802F894 @ =gPlayerParty - adds r0, r2 - bl sub_80318FC - ldr r2, _0802F898 @ =gSprites - ldr r0, _0802F89C @ =gObjectBankIDs - ldrb r3, [r4] - adds r0, r3, r0 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - lsls r3, 4 - ldrb r2, [r1, 0x5] - movs r0, 0xF - ands r0, r2 - orrs r0, r3 - strb r0, [r1, 0x5] - ldr r1, _0802F8A0 @ =gBattleBankFunc - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - ldr r1, _0802F8A4 @ =bx_0802E404 - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0802F88C: .4byte gBattlePartyID -_0802F890: .4byte gActiveBank -_0802F894: .4byte gPlayerParty -_0802F898: .4byte gSprites -_0802F89C: .4byte gObjectBankIDs -_0802F8A0: .4byte gBattleBankFunc -_0802F8A4: .4byte bx_0802E404 - thumb_func_end PlayerHandleLoadPokeSprite - - thumb_func_start PlayerHandleSendOutPoke -PlayerHandleSendOutPoke: @ 802F8A8 - push {r4-r6,lr} - ldr r5, _0802F914 @ =gActiveBank - ldrb r0, [r5] - ldr r4, _0802F918 @ =gBattleBufferA - lsls r1, r0, 9 - adds r6, r4, 0x2 - adds r1, r6 - ldrb r1, [r1] - bl sub_8032AA8 - ldr r2, _0802F91C @ =gBattlePartyID - ldrb r0, [r5] - lsls r1, r0, 1 - adds r1, r2 - lsls r0, 9 - adds r4, 0x1 - adds r0, r4 - ldrb r0, [r0] - movs r4, 0 - strh r0, [r1] - ldrb r1, [r5] - lsls r0, r1, 1 - adds r0, r2 - ldrh r2, [r0] - movs r0, 0x64 - muls r0, r2 - ldr r2, _0802F920 @ =gPlayerParty - adds r0, r2 - bl sub_80318FC - ldr r1, _0802F924 @ =gActionSelectionCursor - ldrb r0, [r5] - adds r0, r1 - strb r4, [r0] - ldr r1, _0802F928 @ =gMoveSelectionCursor - ldrb r0, [r5] - adds r0, r1 - strb r4, [r0] - ldrb r0, [r5] - lsls r1, r0, 9 - adds r1, r6 - ldrb r1, [r1] - bl sub_802F934 - ldr r1, _0802F92C @ =gBattleBankFunc - ldrb r0, [r5] - lsls r0, 2 - adds r0, r1 - ldr r1, _0802F930 @ =sub_802D798 - str r1, [r0] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0802F914: .4byte gActiveBank -_0802F918: .4byte gBattleBufferA -_0802F91C: .4byte gBattlePartyID -_0802F920: .4byte gPlayerParty -_0802F924: .4byte gActionSelectionCursor -_0802F928: .4byte gMoveSelectionCursor -_0802F92C: .4byte gBattleBankFunc -_0802F930: .4byte sub_802D798 - thumb_func_end PlayerHandleSendOutPoke - - thumb_func_start sub_802F934 -sub_802F934: @ 802F934 - push {r4-r6,lr} - mov r6, r10 - mov r5, r9 - mov r4, r8 - push {r4-r6} - adds r6, r0, 0 - lsls r6, 24 - lsrs r6, 24 - lsls r1, 24 - lsrs r1, 24 - adds r0, r6, 0 - bl sub_8032AA8 - ldr r0, _0802FA78 @ =gBattlePartyID - lsls r2, r6, 1 - adds r2, r0 - ldr r0, _0802FA7C @ =gBattleBufferA - lsls r1, r6, 9 - adds r0, 0x1 - adds r1, r0 - ldrb r0, [r1] - strh r0, [r2] - ldrh r1, [r2] - movs r0, 0x64 - muls r0, r1 - ldr r1, _0802FA80 @ =gPlayerParty - adds r0, r1 - movs r1, 0xB - bl GetMonData - mov r8, r0 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - ldr r0, _0802FA84 @ =sub_80312F0 - bl CreateInvisibleSpriteWithCallback - ldr r1, _0802FA88 @ =gUnknown_0300434C - mov r9, r1 - add r9, r6 - mov r1, r9 - strb r0, [r1] - adds r0, r6, 0 - bl GetBankIdentity - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - mov r0, r8 - bl GetMonSpriteTemplate_803C56C - ldr r0, _0802FA8C @ =gUnknown_02024E8C - mov r10, r0 - adds r0, r6, 0 - movs r1, 0x2 - bl sub_8077ABC - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - adds r0, r6, 0 - bl sub_8077F68 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r6, 0 - bl sub_8079E90 - adds r3, r0, 0 - lsls r3, 24 - lsrs r3, 24 - mov r0, r10 - adds r1, r5, 0 - adds r2, r4, 0 - bl CreateSprite - ldr r4, _0802FA90 @ =gObjectBankIDs - adds r4, r6, r4 - strb r0, [r4] - ldr r5, _0802FA94 @ =gSprites - mov r0, r9 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldrb r1, [r4] - strh r1, [r0, 0x30] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - strh r6, [r0, 0x2E] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - mov r1, r8 - strh r1, [r0, 0x32] - ldrb r0, [r4] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r5 - lsls r3, r6, 4 - ldrb r2, [r1, 0x5] - movs r0, 0xF - ands r0, r2 - orrs r0, r3 - strb r0, [r1, 0x5] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldr r1, _0802FA98 @ =gBattleMonForms - adds r6, r1 - ldrb r1, [r6] - bl StartSpriteAnim - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r5, 0 - adds r1, 0x1C - adds r0, r1 - ldr r1, _0802FA9C @ =SpriteCallbackDummy - str r1, [r0] - movs r0, 0 - movs r1, 0xFF - bl sub_8046400 - mov r1, r9 - ldrb r2, [r1] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r5 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r1, 0x2E] - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0802FA78: .4byte gBattlePartyID -_0802FA7C: .4byte gBattleBufferA -_0802FA80: .4byte gPlayerParty -_0802FA84: .4byte sub_80312F0 -_0802FA88: .4byte gUnknown_0300434C -_0802FA8C: .4byte gUnknown_02024E8C -_0802FA90: .4byte gObjectBankIDs -_0802FA94: .4byte gSprites -_0802FA98: .4byte gBattleMonForms -_0802FA9C: .4byte SpriteCallbackDummy - thumb_func_end sub_802F934 - - thumb_func_start PlayerHandleReturnPokeToBall -PlayerHandleReturnPokeToBall: @ 802FAA0 - push {r4-r6,lr} - ldr r1, _0802FAD0 @ =gBattleBufferA - ldr r6, _0802FAD4 @ =gActiveBank - ldrb r2, [r6] - lsls r0, r2, 9 - adds r1, 0x1 - adds r0, r1 - ldrb r3, [r0] - cmp r3, 0 - bne _0802FAE4 - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - ldr r1, _0802FAD8 @ =0x02017810 - adds r0, r1 - strb r3, [r0, 0x4] - ldr r1, _0802FADC @ =gBattleBankFunc - ldrb r0, [r6] - lsls r0, 2 - adds r0, r1 - ldr r1, _0802FAE0 @ =sub_802FB2C - str r1, [r0] - b _0802FB1A - .align 2, 0 -_0802FAD0: .4byte gBattleBufferA -_0802FAD4: .4byte gActiveBank -_0802FAD8: .4byte 0x02017810 -_0802FADC: .4byte gBattleBankFunc -_0802FAE0: .4byte sub_802FB2C -_0802FAE4: - ldr r5, _0802FB20 @ =gObjectBankIDs - adds r0, r2, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r4, _0802FB24 @ =gSprites - adds r0, r4 - bl FreeSpriteOamMatrix - ldrb r0, [r6] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySprite - ldr r1, _0802FB28 @ =gHealthboxIDs - ldrb r0, [r6] - adds r0, r1 - ldrb r0, [r0] - bl sub_8043DB0 - bl PlayerBufferExecCompleted -_0802FB1A: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0802FB20: .4byte gObjectBankIDs -_0802FB24: .4byte gSprites -_0802FB28: .4byte gHealthboxIDs - thumb_func_end PlayerHandleReturnPokeToBall - - thumb_func_start sub_802FB2C -sub_802FB2C: @ 802FB2C - push {r4,r5,lr} - ldr r5, _0802FB48 @ =gActiveBank - ldrb r2, [r5] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - ldr r4, _0802FB4C @ =0x02017810 - adds r3, r0, r4 - ldrb r0, [r3, 0x4] - cmp r0, 0 - beq _0802FB50 - cmp r0, 0x1 - beq _0802FB7C - b _0802FBA4 - .align 2, 0 -_0802FB48: .4byte gActiveBank -_0802FB4C: .4byte 0x02017810 -_0802FB50: - lsls r0, r2, 2 - adds r1, r4, 0 - subs r1, 0x10 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _0802FB6C - adds r0, r2, 0 - adds r1, r2, 0 - movs r3, 0x5 - bl move_anim_start_t4 -_0802FB6C: - ldrb r0, [r5] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - movs r0, 0x1 - strb r0, [r1, 0x4] - b _0802FBA4 -_0802FB7C: - ldrb r1, [r3] - movs r0, 0x40 - ands r0, r1 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - bne _0802FBA4 - strb r0, [r3, 0x4] - ldrb r2, [r5] - adds r0, r2, 0 - adds r1, r2, 0 - movs r3, 0x1 - bl move_anim_start_t4 - ldr r1, _0802FBAC @ =gBattleBankFunc - ldrb r0, [r5] - lsls r0, 2 - adds r0, r1 - ldr r1, _0802FBB0 @ =sub_802DEAC - str r1, [r0] -_0802FBA4: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0802FBAC: .4byte gBattleBankFunc -_0802FBB0: .4byte sub_802DEAC - thumb_func_end sub_802FB2C - - thumb_func_start PlayerHandleTrainerThrow -PlayerHandleTrainerThrow: @ 802FBB4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r0, _0802FBDC @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0802FBE8 - ldr r0, _0802FBE0 @ =gActiveBank - ldrb r0, [r0] - bl GetBankIdentity - movs r1, 0x2 - ands r1, r0 - ldr r7, _0802FBE4 @ =0x0000fff0 - cmp r1, 0 - beq _0802FBEA - movs r7, 0x10 - b _0802FBEA - .align 2, 0 -_0802FBDC: .4byte gBattleTypeFlags -_0802FBE0: .4byte gActiveBank -_0802FBE4: .4byte 0x0000fff0 -_0802FBE8: - movs r7, 0 -_0802FBEA: - ldr r4, _0802FCB8 @ =gSaveBlock2 - ldrb r0, [r4, 0x8] - ldr r6, _0802FCBC @ =gActiveBank - ldrb r1, [r6] - bl sub_8031AF4 - ldrb r5, [r4, 0x8] - ldrb r0, [r6] - bl GetBankIdentity - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r5, 0 - bl GetMonSpriteTemplate_803C5A0 - ldr r0, _0802FCC0 @ =gUnknown_02024E8C - mov r8, r0 - lsls r5, r7, 16 - movs r0, 0xA0 - lsls r0, 15 - adds r5, r0 - asrs r5, 16 - ldr r1, _0802FCC4 @ =gTrainerBackPicCoords - ldrb r0, [r4, 0x8] - lsls r0, 2 - adds r0, r1 - ldrb r0, [r0] - movs r4, 0x8 - subs r4, r0 - lsls r4, 18 - movs r0, 0xA0 - lsls r0, 15 - adds r4, r0 - asrs r4, 16 - ldrb r0, [r6] - bl sub_8079E90 - adds r3, r0, 0 - lsls r3, 24 - lsrs r3, 24 - mov r0, r8 - adds r1, r5, 0 - adds r2, r4, 0 - bl CreateSprite - ldr r5, _0802FCC8 @ =gObjectBankIDs - ldrb r1, [r6] - adds r1, r5 - strb r0, [r1] - ldr r4, _0802FCCC @ =gSprites - ldrb r3, [r6] - adds r0, r3, r5 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - lsls r3, 4 - ldrb r2, [r1, 0x5] - movs r0, 0xF - ands r0, r2 - orrs r0, r3 - strb r0, [r1, 0x5] - ldrb r0, [r6] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0xF0 - strh r1, [r0, 0x24] - ldrb r0, [r6] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldr r1, _0802FCD0 @ =0x0000fffe - strh r1, [r0, 0x2E] - ldrb r0, [r6] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r4, 0x1C - adds r0, r4 - ldr r1, _0802FCD4 @ =sub_80313A0 - str r1, [r0] - ldr r1, _0802FCD8 @ =gBattleBankFunc - ldrb r0, [r6] - lsls r0, 2 - adds r0, r1 - ldr r1, _0802FCDC @ =sub_802D204 - str r1, [r0] - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0802FCB8: .4byte gSaveBlock2 -_0802FCBC: .4byte gActiveBank -_0802FCC0: .4byte gUnknown_02024E8C -_0802FCC4: .4byte gTrainerBackPicCoords -_0802FCC8: .4byte gObjectBankIDs -_0802FCCC: .4byte gSprites -_0802FCD0: .4byte 0x0000fffe -_0802FCD4: .4byte sub_80313A0 -_0802FCD8: .4byte gBattleBankFunc -_0802FCDC: .4byte sub_802D204 - thumb_func_end PlayerHandleTrainerThrow - - thumb_func_start PlayerHandleTrainerSlide -PlayerHandleTrainerSlide: @ 802FCE0 - push {r4-r6,lr} - ldr r4, _0802FD94 @ =gSaveBlock2 - ldrb r0, [r4, 0x8] - ldr r5, _0802FD98 @ =gActiveBank - ldrb r1, [r5] - bl sub_8031AF4 - ldrb r6, [r4, 0x8] - ldrb r0, [r5] - bl GetBankIdentity - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r6, 0 - bl GetMonSpriteTemplate_803C5A0 - ldr r0, _0802FD9C @ =gUnknown_02024E8C - ldr r2, _0802FDA0 @ =gTrainerBackPicCoords - ldrb r1, [r4, 0x8] - lsls r1, 2 - adds r1, r2 - ldrb r1, [r1] - movs r2, 0x8 - subs r2, r1 - lsls r2, 18 - movs r1, 0xA0 - lsls r1, 15 - adds r2, r1 - asrs r2, 16 - movs r1, 0x50 - movs r3, 0x1E - bl CreateSprite - ldr r6, _0802FDA4 @ =gObjectBankIDs - ldrb r1, [r5] - adds r1, r6 - strb r0, [r1] - ldr r4, _0802FDA8 @ =gSprites - ldrb r3, [r5] - adds r0, r3, r6 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - lsls r3, 4 - ldrb r2, [r1, 0x5] - movs r0, 0xF - ands r0, r2 - orrs r0, r3 - strb r0, [r1, 0x5] - ldrb r0, [r5] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldr r1, _0802FDAC @ =0x0000ffa0 - strh r1, [r0, 0x24] - ldrb r0, [r5] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0x2 - strh r1, [r0, 0x2E] - ldrb r0, [r5] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r4, 0x1C - adds r0, r4 - ldr r1, _0802FDB0 @ =sub_80313A0 - str r1, [r0] - ldr r1, _0802FDB4 @ =gBattleBankFunc - ldrb r0, [r5] - lsls r0, 2 - adds r0, r1 - ldr r1, _0802FDB8 @ =sub_802D23C - str r1, [r0] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0802FD94: .4byte gSaveBlock2 -_0802FD98: .4byte gActiveBank -_0802FD9C: .4byte gUnknown_02024E8C -_0802FDA0: .4byte gTrainerBackPicCoords -_0802FDA4: .4byte gObjectBankIDs -_0802FDA8: .4byte gSprites -_0802FDAC: .4byte 0x0000ffa0 -_0802FDB0: .4byte sub_80313A0 -_0802FDB4: .4byte gBattleBankFunc -_0802FDB8: .4byte sub_802D23C - thumb_func_end PlayerHandleTrainerSlide - - thumb_func_start PlayerHandleTrainerSlideBack -PlayerHandleTrainerSlideBack: @ 802FDBC - push {r4-r6,lr} - ldr r5, _0802FE5C @ =gObjectBankIDs - ldr r6, _0802FE60 @ =gActiveBank - ldrb r0, [r6] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r4, _0802FE64 @ =gSprites - adds r0, r4 - bl oamt_add_pos2_onto_pos1 - ldrb r0, [r6] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0x32 - strh r1, [r0, 0x2E] - ldrb r0, [r6] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldr r1, _0802FE68 @ =0x0000ffd8 - strh r1, [r0, 0x32] - ldrb r0, [r6] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrh r1, [r0, 0x22] - strh r1, [r0, 0x36] - ldrb r0, [r6] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r4, 0 - adds r1, 0x1C - adds r0, r1 - ldr r1, _0802FE6C @ =sub_8078B34 - str r1, [r0] - ldrb r0, [r6] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldr r1, _0802FE70 @ =SpriteCallbackDummy - bl oamt_set_x3A_32 - ldrb r0, [r6] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0x1 - bl StartSpriteAnim - ldr r1, _0802FE74 @ =gBattleBankFunc - ldrb r0, [r6] - lsls r0, 2 - adds r0, r1 - ldr r1, _0802FE78 @ =sub_802D274 - str r1, [r0] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0802FE5C: .4byte gObjectBankIDs -_0802FE60: .4byte gActiveBank -_0802FE64: .4byte gSprites -_0802FE68: .4byte 0x0000ffd8 -_0802FE6C: .4byte sub_8078B34 -_0802FE70: .4byte SpriteCallbackDummy -_0802FE74: .4byte gBattleBankFunc -_0802FE78: .4byte sub_802D274 - thumb_func_end PlayerHandleTrainerSlideBack - - thumb_func_start sub_802FE7C -sub_802FE7C: @ 802FE7C - push {r4,r5,lr} - ldr r5, _0802FEC0 @ =gActiveBank - ldrb r2, [r5] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - ldr r4, _0802FEC4 @ =0x02017810 - adds r3, r0, r4 - ldrb r0, [r3, 0x4] - cmp r0, 0 - bne _0802FEC8 - lsls r0, r2, 2 - adds r1, r4, 0 - subs r1, 0x10 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _0802FEAE - adds r0, r2, 0 - adds r1, r2, 0 - movs r3, 0x5 - bl move_anim_start_t4 -_0802FEAE: - ldrb r0, [r5] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - ldrb r0, [r1, 0x4] - adds r0, 0x1 - strb r0, [r1, 0x4] - b _0802FF3E - .align 2, 0 -_0802FEC0: .4byte gActiveBank -_0802FEC4: .4byte 0x02017810 -_0802FEC8: - ldrb r1, [r3] - movs r0, 0x40 - ands r0, r1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - bne _0802FF3E - strb r4, [r3, 0x4] - ldr r2, _0802FF44 @ =gBattlePartyID - ldrb r1, [r5] - lsls r0, r1, 1 - adds r0, r2 - ldrh r2, [r0] - movs r0, 0x64 - muls r0, r2 - ldr r2, _0802FF48 @ =gPlayerParty - adds r0, r2 - bl sub_80324F8 - movs r1, 0x40 - negs r1, r1 - movs r0, 0x10 - bl PlaySE12WithPanning - ldr r2, _0802FF4C @ =gSprites - ldr r3, _0802FF50 @ =gObjectBankIDs - ldrb r0, [r5] - adds r0, r3 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - strh r4, [r0, 0x30] - ldrb r0, [r5] - adds r0, r3 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0x5 - strh r1, [r0, 0x32] - ldrb r0, [r5] - adds r0, r3 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, 0x1C - adds r0, r2 - ldr r1, _0802FF54 @ =sub_80105EC - str r1, [r0] - ldr r1, _0802FF58 @ =gBattleBankFunc - ldrb r0, [r5] - lsls r0, 2 - adds r0, r1 - ldr r1, _0802FF5C @ =sub_802DE10 - str r1, [r0] -_0802FF3E: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0802FF44: .4byte gBattlePartyID -_0802FF48: .4byte gPlayerParty -_0802FF4C: .4byte gSprites -_0802FF50: .4byte gObjectBankIDs -_0802FF54: .4byte sub_80105EC -_0802FF58: .4byte gBattleBankFunc -_0802FF5C: .4byte sub_802DE10 - thumb_func_end sub_802FE7C - - thumb_func_start sub_802FF60 -sub_802FF60: @ 802FF60 - push {lr} - sub sp, 0x4 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r1, 0x2 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - bl PlayerBufferExecCompleted - add sp, 0x4 - pop {r0} - bx r0 - thumb_func_end sub_802FF60 - - thumb_func_start sub_802FF80 -sub_802FF80: @ 802FF80 - push {r4,r5,lr} - ldr r1, _0802FFBC @ =0x02017840 - movs r0, 0x4 - strb r0, [r1, 0x8] - ldr r1, _0802FFC0 @ =gDoingBattleAnim - movs r0, 0x1 - strb r0, [r1] - ldr r5, _0802FFC4 @ =gActiveBank - ldrb r4, [r5] - movs r0, 0x1 - bl GetBankByPlayerAI - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - adds r0, r4, 0 - adds r1, r4, 0 - movs r3, 0x3 - bl move_anim_start_t4 - ldr r1, _0802FFC8 @ =gBattleBankFunc - ldrb r0, [r5] - lsls r0, 2 - adds r0, r1 - ldr r1, _0802FFCC @ =bx_wait_t1 - str r1, [r0] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0802FFBC: .4byte 0x02017840 -_0802FFC0: .4byte gDoingBattleAnim -_0802FFC4: .4byte gActiveBank -_0802FFC8: .4byte gBattleBankFunc -_0802FFCC: .4byte bx_wait_t1 - thumb_func_end sub_802FF80 - - thumb_func_start PlayerHandleBallThrow -PlayerHandleBallThrow: @ 802FFD0 - push {r4,r5,lr} - ldr r1, _08030014 @ =gBattleBufferA - ldr r5, _08030018 @ =gActiveBank - ldrb r0, [r5] - lsls r0, 9 - adds r1, 0x1 - adds r0, r1 - ldrb r1, [r0] - ldr r0, _0803001C @ =0x02017840 - strb r1, [r0, 0x8] - ldr r1, _08030020 @ =gDoingBattleAnim - movs r0, 0x1 - strb r0, [r1] - ldrb r4, [r5] - movs r0, 0x1 - bl GetBankByPlayerAI - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - adds r0, r4, 0 - adds r1, r4, 0 - movs r3, 0x3 - bl move_anim_start_t4 - ldr r1, _08030024 @ =gBattleBankFunc - ldrb r0, [r5] - lsls r0, 2 - adds r0, r1 - ldr r1, _08030028 @ =bx_wait_t1 - str r1, [r0] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08030014: .4byte gBattleBufferA -_08030018: .4byte gActiveBank -_0803001C: .4byte 0x02017840 -_08030020: .4byte gDoingBattleAnim -_08030024: .4byte gBattleBankFunc -_08030028: .4byte bx_wait_t1 - thumb_func_end PlayerHandleBallThrow - - thumb_func_start PlayerHandlePuase -PlayerHandlePuase: @ 803002C - push {lr} - ldr r1, _08030054 @ =gBattleBufferA - ldr r0, _08030058 @ =gActiveBank - ldrb r0, [r0] - lsls r0, 9 - adds r1, 0x1 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _0803004A -_08030040: - subs r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - bne _08030040 -_0803004A: - bl PlayerBufferExecCompleted - pop {r0} - bx r0 - .align 2, 0 -_08030054: .4byte gBattleBufferA -_08030058: .4byte gActiveBank - thumb_func_end PlayerHandlePuase - - thumb_func_start PlayerHandleMoveAnimation -PlayerHandleMoveAnimation: @ 803005C - push {r4-r6,lr} - ldr r6, _08030140 @ =gActiveBank - ldrb r0, [r6] - bl mplay_80342A4 - lsls r0, 24 - cmp r0, 0 - beq _0803006E - b _0803017E -_0803006E: - ldr r0, _08030144 @ =gBattleBufferA - mov r12, r0 - ldrb r2, [r6] - lsls r2, 9 - adds r0, 0x1 - adds r0, r2, r0 - ldrb r0, [r0] - mov r1, r12 - adds r1, 0x2 - adds r1, r2, r1 - ldrb r1, [r1] - lsls r1, 8 - orrs r0, r1 - ldr r5, _08030148 @ =gUnknown_0202F7C4 - mov r1, r12 - adds r1, 0x3 - adds r2, r1 - ldrb r1, [r2] - strb r1, [r5] - ldr r4, _0803014C @ =gMovePowerMoveAnim - ldrb r2, [r6] - lsls r2, 9 - mov r1, r12 - adds r1, 0x4 - adds r1, r2, r1 - ldrb r3, [r1] - mov r1, r12 - adds r1, 0x5 - adds r2, r1 - ldrb r1, [r2] - lsls r1, 8 - orrs r3, r1 - strh r3, [r4] - ldr r4, _08030150 @ =gMoveDmgMoveAnim - ldrb r2, [r6] - lsls r2, 9 - mov r1, r12 - adds r1, 0x6 - adds r1, r2, r1 - ldrb r3, [r1] - mov r1, r12 - adds r1, 0x7 - adds r1, r2, r1 - ldrb r1, [r1] - lsls r1, 8 - orrs r3, r1 - mov r1, r12 - adds r1, 0x8 - adds r1, r2, r1 - ldrb r1, [r1] - lsls r1, 16 - orrs r3, r1 - mov r1, r12 - adds r1, 0x9 - adds r2, r1 - ldrb r1, [r2] - lsls r1, 24 - orrs r3, r1 - str r3, [r4] - ldr r3, _08030154 @ =gHappinessMoveAnim - ldrb r1, [r6] - lsls r1, 9 - mov r2, r12 - adds r2, 0xA - adds r1, r2 - ldrb r1, [r1] - strb r1, [r3] - ldr r4, _08030158 @ =gWeatherMoveAnim - ldrb r2, [r6] - lsls r2, 9 - mov r1, r12 - adds r1, 0xC - adds r1, r2, r1 - ldrb r3, [r1] - mov r1, r12 - adds r1, 0xD - adds r2, r1 - ldrb r1, [r2] - lsls r1, 8 - orrs r3, r1 - strh r3, [r4] - ldr r3, _0803015C @ =gDisableStructMoveAnim - ldrb r2, [r6] - lsls r2, 9 - mov r1, r12 - adds r1, 0x10 - adds r2, r1 - str r2, [r3] - ldr r3, _08030160 @ =gPID_perBank - ldrb r1, [r6] - lsls r1, 2 - adds r1, r3 - ldr r2, [r2] - str r2, [r1] - ldrb r1, [r5] - bl sub_8031720 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0 - beq _08030164 - bl PlayerBufferExecCompleted - b _0803017E - .align 2, 0 -_08030140: .4byte gActiveBank -_08030144: .4byte gBattleBufferA -_08030148: .4byte gUnknown_0202F7C4 -_0803014C: .4byte gMovePowerMoveAnim -_08030150: .4byte gMoveDmgMoveAnim -_08030154: .4byte gHappinessMoveAnim -_08030158: .4byte gWeatherMoveAnim -_0803015C: .4byte gDisableStructMoveAnim -_08030160: .4byte gPID_perBank -_08030164: - ldrb r1, [r6] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - ldr r1, _08030184 @ =0x02017810 - adds r0, r1 - strb r2, [r0, 0x4] - ldr r1, _08030188 @ =gBattleBankFunc - ldrb r0, [r6] - lsls r0, 2 - adds r0, r1 - ldr r1, _0803018C @ =sub_8030190 - str r1, [r0] -_0803017E: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08030184: .4byte 0x02017810 -_08030188: .4byte gBattleBankFunc -_0803018C: .4byte sub_8030190 - thumb_func_end PlayerHandleMoveAnimation - - thumb_func_start sub_8030190 -sub_8030190: @ 8030190 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - ldr r2, _080301D4 @ =gBattleBufferA - ldr r5, _080301D8 @ =gActiveBank - ldrb r3, [r5] - lsls r1, r3, 9 - adds r0, r2, 0x1 - mov r9, r0 - adds r0, r1, r0 - ldrb r4, [r0] - adds r6, r2, 0x2 - mov r8, r6 - adds r0, r1, r6 - ldrb r0, [r0] - lsls r0, 8 - orrs r4, r0 - adds r2, 0xB - adds r1, r2 - ldrb r7, [r1] - lsls r0, r3, 1 - adds r0, r3 - lsls r0, 2 - ldr r6, _080301DC @ =0x02017810 - adds r0, r6 - ldrb r2, [r0, 0x4] - cmp r2, 0x1 - beq _0803021E - cmp r2, 0x1 - bgt _080301E0 - cmp r2, 0 - beq _080301EA - b _080302E8 - .align 2, 0 -_080301D4: .4byte gBattleBufferA -_080301D8: .4byte gActiveBank -_080301DC: .4byte 0x02017810 -_080301E0: - cmp r2, 0x2 - beq _08030244 - cmp r2, 0x3 - beq _080302B0 - b _080302E8 -_080301EA: - lsls r1, r3, 2 - adds r0, r6, 0 - subs r0, 0x10 - adds r1, r0 - ldrb r2, [r1] - movs r0, 0xC - ands r0, r2 - cmp r0, 0x4 - bne _0803020E - movs r0, 0x8 - orrs r0, r2 - strb r0, [r1] - ldrb r2, [r5] - adds r0, r2, 0 - adds r1, r2, 0 - movs r3, 0x5 - bl move_anim_start_t4 -_0803020E: - ldrb r0, [r5] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r6 - movs r0, 0x1 - strb r0, [r1, 0x4] - b _080302E8 -_0803021E: - ldrb r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - bne _080302E8 - movs r0, 0 - bl sub_80326EC - adds r0, r4, 0 - bl ExecuteMoveAnim - ldrb r0, [r5] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r6 - movs r0, 0x2 - strb r0, [r1, 0x4] - b _080302E8 -_08030244: - ldr r0, _080302A0 @ =gAnimScriptCallback - ldr r0, [r0] - bl _call_via_r0 - ldr r0, _080302A4 @ =gAnimScriptActive - ldrb r0, [r0] - cmp r0, 0 - bne _080302E8 - movs r0, 0x1 - bl sub_80326EC - ldrb r2, [r5] - lsls r0, r2, 2 - adds r4, r6, 0 - subs r4, 0x10 - adds r0, r4 - ldrb r1, [r0] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _0803028C - cmp r7, 0x1 - bhi _0803028C - adds r0, r2, 0 - adds r1, r2, 0 - movs r3, 0x6 - bl move_anim_start_t4 - ldrb r0, [r5] - lsls r0, 2 - adds r0, r4 - ldrb r2, [r0] - movs r1, 0x9 - negs r1, r1 - ands r1, r2 - strb r1, [r0] -_0803028C: - ldr r0, _080302A8 @ =gActiveBank - ldrb r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - ldr r1, _080302AC @ =0x02017810 - adds r0, r1 - movs r1, 0x3 - strb r1, [r0, 0x4] - b _080302E8 - .align 2, 0 -_080302A0: .4byte gAnimScriptCallback -_080302A4: .4byte gAnimScriptActive -_080302A8: .4byte gActiveBank -_080302AC: .4byte 0x02017810 -_080302B0: - ldrb r1, [r0] - movs r0, 0x40 - ands r0, r1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - bne _080302E8 - bl sub_8031F24 - ldrb r0, [r5] - lsls r2, r0, 9 - mov r3, r9 - adds r1, r2, r3 - ldrb r1, [r1] - add r2, r8 - ldrb r2, [r2] - lsls r2, 8 - orrs r1, r2 - bl sub_80324BC - ldrb r1, [r5] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - strb r4, [r0, 0x4] - bl PlayerBufferExecCompleted -_080302E8: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8030190 - - thumb_func_start PlayerHandlePrintString -PlayerHandlePrintString: @ 80302F4 - push {r4,lr} - sub sp, 0x4 - ldr r0, _08030338 @ =gUnknown_030042A4 - movs r1, 0 - strh r1, [r0] - ldr r0, _0803033C @ =gUnknown_030042A0 - strh r1, [r0] - ldr r4, _08030340 @ =gActiveBank - ldrb r0, [r4] - lsls r0, 9 - ldr r1, _08030344 @ =gUnknown_02023A62 - adds r0, r1 - ldrh r0, [r0] - bl BufferStringBattle - ldr r0, _08030348 @ =gUnknown_03004210 - ldr r1, _0803034C @ =gDisplayedStringBattle - movs r2, 0xF - str r2, [sp] - movs r2, 0x90 - movs r3, 0x2 - bl sub_8002EB0 - ldr r1, _08030350 @ =gBattleBankFunc - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - ldr r1, _08030354 @ =sub_802DF18 - str r1, [r0] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08030338: .4byte gUnknown_030042A4 -_0803033C: .4byte gUnknown_030042A0 -_08030340: .4byte gActiveBank -_08030344: .4byte gUnknown_02023A62 -_08030348: .4byte gUnknown_03004210 -_0803034C: .4byte gDisplayedStringBattle -_08030350: .4byte gBattleBankFunc -_08030354: .4byte sub_802DF18 - thumb_func_end PlayerHandlePrintString - - thumb_func_start PlayerHandlePrintStringPlayerOnly -PlayerHandlePrintStringPlayerOnly: @ 8030358 - push {lr} - ldr r0, _08030370 @ =gActiveBank - ldrb r0, [r0] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - bne _08030374 - bl PlayerHandlePrintString - b _08030378 - .align 2, 0 -_08030370: .4byte gActiveBank -_08030374: - bl PlayerBufferExecCompleted -_08030378: - pop {r0} - bx r0 - thumb_func_end PlayerHandlePrintStringPlayerOnly - -.section .text_8030464 - - thumb_func_start nullsub_42 -nullsub_42: @ 8030464 - bx lr - thumb_func_end nullsub_42 - - thumb_func_start sub_8030468 -sub_8030468: @ 8030468 - push {lr} - sub sp, 0x4 - ldr r1, _08030494 @ =0x0000ffff - ldr r3, _08030498 @ =0x00002d9f - movs r0, 0 - str r0, [sp] - movs r2, 0xC - bl sub_814A5C0 - bl sub_80304A8 - ldr r1, _0803049C @ =gBattleBankFunc - ldr r0, _080304A0 @ =gActiveBank - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r1, _080304A4 @ =sub_802C68C - str r1, [r0] - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_08030494: .4byte 0x0000ffff -_08030498: .4byte 0x00002d9f -_0803049C: .4byte gBattleBankFunc -_080304A0: .4byte gActiveBank -_080304A4: .4byte sub_802C68C - thumb_func_end sub_8030468 - - thumb_func_start sub_80304A8 -sub_80304A8: @ 80304A8 - push {r4,lr} - sub sp, 0x4 - ldr r1, _08030510 @ =gUnknown_030042A4 - movs r0, 0 - strh r0, [r1] - ldr r1, _08030514 @ =gUnknown_030042A0 - movs r2, 0xA0 - lsls r2, 1 - adds r0, r2, 0 - strh r0, [r1] - bl sub_802E1B0 - ldr r1, _08030518 @ =gUnknown_03004344 - movs r0, 0xFF - strb r0, [r1] - ldr r1, _0803051C @ =gMoveSelectionCursor - ldr r4, _08030520 @ =gActiveBank - ldrb r0, [r4] - adds r0, r1 - ldrb r0, [r0] - movs r1, 0 - bl sub_802E3B4 - ldr r1, _08030524 @ =gBattleBufferA - ldrb r0, [r4] - lsls r0, 9 - adds r1, 0x2 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x1 - beq _08030500 - ldr r4, _08030528 @ =gUnknown_03004210 - ldr r1, _0803052C @ =gUnknown_08400D38 - movs r2, 0xA4 - lsls r2, 2 - movs r0, 0x37 - str r0, [sp] - adds r0, r4, 0 - movs r3, 0x17 - bl InitWindow - adds r0, r4, 0 - bl sub_8002F44 -_08030500: - bl sub_802E220 - bl sub_802E2D4 - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08030510: .4byte gUnknown_030042A4 -_08030514: .4byte gUnknown_030042A0 -_08030518: .4byte gUnknown_03004344 -_0803051C: .4byte gMoveSelectionCursor -_08030520: .4byte gActiveBank -_08030524: .4byte gBattleBufferA -_08030528: .4byte gUnknown_03004210 -_0803052C: .4byte gUnknown_08400D38 - thumb_func_end sub_80304A8 - - thumb_func_start PlayerHandleOpenBag -PlayerHandleOpenBag: @ 8030530 - push {r4,r5,lr} - sub sp, 0x4 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r1, _0803057C @ =gBattleBankFunc - ldr r2, _08030580 @ =gActiveBank - ldrb r0, [r2] - lsls r0, 2 - adds r0, r1 - ldr r1, _08030584 @ =sub_802E004 - str r1, [r0] - ldr r1, _08030588 @ =gBankInMenu - ldrb r0, [r2] - strb r0, [r1] - movs r3, 0 - ldr r5, _0803058C @ =gUnknown_02038470 - ldr r4, _08030590 @ =gBattleBufferA -_0803055E: - adds r0, r3, r5 - ldrb r1, [r2] - lsls r1, 9 - adds r1, 0x1 - adds r1, r3, r1 - adds r1, r4 - ldrb r1, [r1] - strb r1, [r0] - adds r3, 0x1 - cmp r3, 0x2 - ble _0803055E - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0803057C: .4byte gBattleBankFunc -_08030580: .4byte gActiveBank -_08030584: .4byte sub_802E004 -_08030588: .4byte gBankInMenu -_0803058C: .4byte gUnknown_02038470 -_08030590: .4byte gBattleBufferA - thumb_func_end PlayerHandleOpenBag - - thumb_func_start sub_8030594 -sub_8030594: @ 8030594 - push {r4,r5,lr} - sub sp, 0x4 - ldr r0, _08030644 @ =TaskDummy - movs r1, 0xFF - bl CreateTask - ldr r3, _08030648 @ =gUnknown_0300434C - ldr r5, _0803064C @ =gActiveBank - ldrb r1, [r5] - adds r1, r3 - strb r0, [r1] - ldr r4, _08030650 @ =gTasks - ldrb r2, [r5] - adds r3, r2, r3 - ldrb r0, [r3] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r4 - ldr r4, _08030654 @ =gBattleBufferA - lsls r2, 9 - adds r3, r4, 0x1 - adds r2, r3 - ldrb r2, [r2] - movs r0, 0xF - ands r0, r2 - strh r0, [r1, 0x8] - ldr r2, _08030658 @ =0x02000000 - ldrb r0, [r5] - lsls r0, 9 - adds r0, r3 - ldrb r0, [r0] - lsrs r0, 4 - ldr r3, _0803065C @ =0x00016054 - adds r1, r2, r3 - strb r0, [r1] - ldrb r0, [r5] - lsls r0, 9 - adds r1, r4, 0x2 - adds r0, r1 - ldrb r1, [r0] - adds r3, 0x49 - adds r0, r2, r3 - strb r1, [r0] - ldrb r0, [r5] - lsls r0, 9 - adds r1, r4, 0x3 - adds r0, r1 - ldrb r0, [r0] - ldr r1, _08030660 @ =0x000160c0 - adds r2, r1 - strb r0, [r2] - movs r2, 0 - ldr r3, _08030664 @ =gUnknown_02038470 -_08030600: - adds r0, r2, r3 - ldrb r1, [r5] - lsls r1, 9 - adds r1, 0x4 - adds r1, r2, r1 - adds r1, r4 - ldrb r1, [r1] - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x2 - ble _08030600 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r1, _08030668 @ =gBattleBankFunc - ldr r2, _0803064C @ =gActiveBank - ldrb r0, [r2] - lsls r0, 2 - adds r0, r1 - ldr r1, _0803066C @ =sub_802DF30 - str r1, [r0] - ldr r1, _08030670 @ =gBankInMenu - ldrb r0, [r2] - strb r0, [r1] - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08030644: .4byte TaskDummy -_08030648: .4byte gUnknown_0300434C -_0803064C: .4byte gActiveBank -_08030650: .4byte gTasks -_08030654: .4byte gBattleBufferA -_08030658: .4byte 0x02000000 -_0803065C: .4byte 0x00016054 -_08030660: .4byte 0x000160c0 -_08030664: .4byte gUnknown_02038470 -_08030668: .4byte gBattleBankFunc -_0803066C: .4byte sub_802DF30 -_08030670: .4byte gBankInMenu - thumb_func_end sub_8030594 - - thumb_func_start sub_8030674 -sub_8030674: @ 8030674 - push {lr} - sub sp, 0x4 - bl sub_80325B8 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r1, 0x2 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - bl PlayerBufferExecCompleted - add sp, 0x4 - pop {r0} - bx r0 - thumb_func_end sub_8030674 - - thumb_func_start PlayerHandleHealthBarUpdate -PlayerHandleHealthBarUpdate: @ 8030698 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - movs r0, 0 - bl load_gfxc_health_bar - ldr r3, _08030710 @ =gBattleBufferA - ldr r0, _08030714 @ =gActiveBank - mov r9, r0 - ldrb r4, [r0] - lsls r2, r4, 9 - adds r0, r3, 0x2 - adds r0, r2, r0 - ldrb r1, [r0] - adds r3, 0x3 - adds r2, r3 - ldrb r0, [r2] - lsls r0, 8 - orrs r1, r0 - lsls r1, 16 - asrs r7, r1, 16 - ldr r0, _08030718 @ =0x00007fff - cmp r7, r0 - beq _08030728 - ldr r6, _0803071C @ =gBattlePartyID - lsls r0, r4, 1 - adds r0, r6 - ldrh r0, [r0] - movs r5, 0x64 - muls r0, r5 - ldr r4, _08030720 @ =gPlayerParty - adds r0, r4 - movs r1, 0x3A - bl GetMonData - mov r8, r0 - mov r1, r9 - ldrb r0, [r1] - lsls r0, 1 - adds r0, r6 - ldrh r0, [r0] - muls r0, r5 - adds r0, r4 - movs r1, 0x39 - bl GetMonData - adds r3, r0, 0 - mov r1, r9 - ldrb r0, [r1] - ldr r1, _08030724 @ =gHealthboxIDs - adds r1, r0, r1 - ldrb r1, [r1] - str r7, [sp] - mov r2, r8 - bl sub_8043D84 - b _08030762 - .align 2, 0 -_08030710: .4byte gBattleBufferA -_08030714: .4byte gActiveBank -_08030718: .4byte 0x00007fff -_0803071C: .4byte gBattlePartyID -_08030720: .4byte gPlayerParty -_08030724: .4byte gHealthboxIDs -_08030728: - ldr r1, _08030780 @ =gBattlePartyID - lsls r0, r4, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08030784 @ =gPlayerParty - adds r0, r1 - movs r1, 0x3A - bl GetMonData - adds r2, r0, 0 - mov r1, r9 - ldrb r0, [r1] - ldr r4, _08030788 @ =gHealthboxIDs - adds r1, r0, r4 - ldrb r1, [r1] - str r7, [sp] - movs r3, 0 - bl sub_8043D84 - mov r1, r9 - ldrb r0, [r1] - adds r0, r4 - ldrb r0, [r0] - movs r1, 0 - movs r2, 0 - bl sub_80440EC -_08030762: - ldr r1, _0803078C @ =gBattleBankFunc - ldr r0, _08030790 @ =gActiveBank - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r1, _08030794 @ =bx_t1_healthbar_update - str r1, [r0] - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08030780: .4byte gBattlePartyID -_08030784: .4byte gPlayerParty -_08030788: .4byte gHealthboxIDs -_0803078C: .4byte gBattleBankFunc -_08030790: .4byte gActiveBank -_08030794: .4byte bx_t1_healthbar_update - thumb_func_end PlayerHandleHealthBarUpdate - - thumb_func_start PlayerHandleExpBarUpdate -PlayerHandleExpBarUpdate: @ 8030798 - push {r4-r7,lr} - ldr r5, _080307C4 @ =gBattleBufferA - ldr r6, _080307C8 @ =gActiveBank - ldrb r0, [r6] - lsls r0, 9 - adds r1, r5, 0x1 - adds r0, r1 - ldrb r7, [r0] - movs r0, 0x64 - adds r1, r7, 0 - muls r1, r0 - ldr r0, _080307CC @ =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0x38 - bl GetMonData - cmp r0, 0x63 - bls _080307D0 - bl PlayerBufferExecCompleted - b _0803081C - .align 2, 0 -_080307C4: .4byte gBattleBufferA -_080307C8: .4byte gActiveBank -_080307CC: .4byte gPlayerParty -_080307D0: - movs r0, 0x1 - bl load_gfxc_health_bar - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - ldrb r1, [r6] - lsls r1, 9 - adds r0, r5, 0x2 - adds r0, r1, r0 - ldrb r4, [r0] - adds r0, r5, 0x3 - adds r1, r0 - ldrb r0, [r1] - lsls r0, 8 - orrs r4, r0 - ldr r0, _08030824 @ =sub_802D924 - movs r1, 0xA - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08030828 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - strh r7, [r1, 0x8] - strh r4, [r1, 0xA] - ldrb r0, [r6] - strh r0, [r1, 0xC] - ldr r1, _0803082C @ =gBattleBankFunc - ldrb r0, [r6] - lsls r0, 2 - adds r0, r1 - ldr r1, _08030830 @ =nullsub_91 - str r1, [r0] -_0803081C: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08030824: .4byte sub_802D924 -_08030828: .4byte gTasks -_0803082C: .4byte gBattleBankFunc -_08030830: .4byte nullsub_91 - thumb_func_end PlayerHandleExpBarUpdate - - thumb_func_start PlayerHandleStatusIconUpdate -PlayerHandleStatusIconUpdate: @ 8030834 - push {r4,lr} - ldr r4, _0803088C @ =gActiveBank - ldrb r0, [r4] - bl mplay_80342A4 - lsls r0, 24 - cmp r0, 0 - bne _08030884 - ldr r0, _08030890 @ =gHealthboxIDs - ldrb r1, [r4] - adds r0, r1, r0 - ldrb r0, [r0] - ldr r2, _08030894 @ =gBattlePartyID - lsls r1, 1 - adds r1, r2 - ldrh r2, [r1] - movs r1, 0x64 - muls r1, r2 - ldr r2, _08030898 @ =gPlayerParty - adds r1, r2 - movs r2, 0x9 - bl sub_8045A5C - ldrb r0, [r4] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - ldr r0, _0803089C @ =0x02017810 - adds r1, r0 - ldrb r2, [r1] - movs r0, 0x11 - negs r0, r0 - ands r0, r2 - strb r0, [r1] - ldr r1, _080308A0 @ =gBattleBankFunc - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - ldr r1, _080308A4 @ =sub_802E434 - str r1, [r0] -_08030884: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0803088C: .4byte gActiveBank -_08030890: .4byte gHealthboxIDs -_08030894: .4byte gBattlePartyID -_08030898: .4byte gPlayerParty -_0803089C: .4byte 0x02017810 -_080308A0: .4byte gBattleBankFunc -_080308A4: .4byte sub_802E434 - thumb_func_end PlayerHandleStatusIconUpdate - - thumb_func_start PlayerHandleStatusAnimation -PlayerHandleStatusAnimation: @ 80308A8 - push {r4,r5,lr} - ldr r5, _08030900 @ =gActiveBank - ldrb r0, [r5] - bl mplay_80342A4 - lsls r0, 24 - cmp r0, 0 - bne _080308F8 - ldr r4, _08030904 @ =gBattleBufferA - ldrb r3, [r5] - lsls r3, 9 - adds r0, r4, 0x1 - adds r0, r3, r0 - ldrb r0, [r0] - adds r1, r4, 0x2 - adds r1, r3, r1 - ldrb r1, [r1] - adds r2, r4, 0x3 - adds r2, r3, r2 - ldrb r2, [r2] - lsls r2, 8 - orrs r1, r2 - adds r2, r4, 0x4 - adds r2, r3, r2 - ldrb r2, [r2] - lsls r2, 16 - orrs r1, r2 - adds r4, 0x5 - adds r3, r4 - ldrb r2, [r3] - lsls r2, 24 - orrs r1, r2 - bl move_anim_start_t2_for_situation - ldr r1, _08030908 @ =gBattleBankFunc - ldrb r0, [r5] - lsls r0, 2 - adds r0, r1 - ldr r1, _0803090C @ =sub_802E434 - str r1, [r0] -_080308F8: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08030900: .4byte gActiveBank -_08030904: .4byte gBattleBufferA -_08030908: .4byte gBattleBankFunc -_0803090C: .4byte sub_802E434 - thumb_func_end PlayerHandleStatusAnimation - - thumb_func_start PlayerHandleStatusXor -PlayerHandleStatusXor: @ 8030910 - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0x4 - ldr r0, _0803096C @ =gBattlePartyID - mov r8, r0 - ldr r4, _08030970 @ =gActiveBank - ldrb r0, [r4] - lsls r0, 1 - add r0, r8 - ldrh r0, [r0] - movs r6, 0x64 - muls r0, r6 - ldr r5, _08030974 @ =gPlayerParty - adds r0, r5 - movs r1, 0x37 - bl GetMonData - ldr r2, _08030978 @ =gBattleBufferA - ldrb r1, [r4] - lsls r1, 9 - adds r2, 0x1 - adds r1, r2 - ldrb r1, [r1] - eors r0, r1 - mov r1, sp - strb r0, [r1] - ldrb r0, [r4] - lsls r0, 1 - add r0, r8 - ldrh r0, [r0] - muls r0, r6 - adds r0, r5 - movs r1, 0x37 - mov r2, sp - bl SetMonData - bl PlayerBufferExecCompleted - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0803096C: .4byte gBattlePartyID -_08030970: .4byte gActiveBank -_08030974: .4byte gPlayerParty -_08030978: .4byte gBattleBufferA - thumb_func_end PlayerHandleStatusXor - - thumb_func_start sub_803097C -sub_803097C: @ 803097C - push {lr} - bl PlayerBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_803097C - - thumb_func_start PlayerHandleDMATransfer -PlayerHandleDMATransfer: @ 8030988 - push {r4,r5,lr} - ldr r3, _080309EC @ =gBattleBufferA - ldr r0, _080309F0 @ =gActiveBank - ldrb r2, [r0] - lsls r2, 9 - adds r0, r3, 0x1 - adds r0, r2, r0 - ldrb r5, [r0] - adds r0, r3, 0x2 - adds r0, r2, r0 - ldrb r0, [r0] - lsls r0, 8 - orrs r5, r0 - adds r0, r3, 0x3 - adds r0, r2, r0 - ldrb r0, [r0] - lsls r0, 16 - orrs r5, r0 - adds r0, r3, 0x4 - adds r0, r2, r0 - ldrb r4, [r0] - lsls r4, 24 - adds r0, r3, 0x5 - adds r0, r2, r0 - ldrb r1, [r0] - adds r0, r3, 0x6 - adds r0, r2, r0 - ldrb r0, [r0] - lsls r0, 8 - orrs r1, r0 - lsls r1, 16 - adds r3, 0x7 - adds r2, r3 - orrs r5, r4 - lsrs r4, r1, 16 - movs r0, 0x80 - lsls r0, 5 - cmp r4, r0 - bhi _080309F8 - ldr r0, _080309F4 @ =0x040000d4 - str r2, [r0] - str r5, [r0, 0x4] - lsrs r1, 17 - movs r2, 0x80 - lsls r2, 24 - orrs r1, r2 - str r1, [r0, 0x8] - ldr r0, [r0, 0x8] - b _08030A24 - .align 2, 0 -_080309EC: .4byte gBattleBufferA -_080309F0: .4byte gActiveBank -_080309F4: .4byte 0x040000d4 -_080309F8: - ldr r3, _08030A30 @ =0x040000d4 - str r2, [r3] - str r5, [r3, 0x4] - ldr r0, _08030A34 @ =0x80000800 - str r0, [r3, 0x8] - ldr r0, [r3, 0x8] - movs r0, 0x80 - lsls r0, 5 - adds r2, r0 - adds r5, r0 - ldr r1, _08030A38 @ =0xfffff000 - adds r4, r1 - cmp r4, r0 - bhi _080309F8 - str r2, [r3] - str r5, [r3, 0x4] - lsrs r0, r4, 1 - movs r1, 0x80 - lsls r1, 24 - orrs r0, r1 - str r0, [r3, 0x8] - ldr r0, [r3, 0x8] -_08030A24: - bl PlayerBufferExecCompleted - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08030A30: .4byte 0x040000d4 -_08030A34: .4byte 0x80000800 -_08030A38: .4byte 0xfffff000 - thumb_func_end PlayerHandleDMATransfer - - thumb_func_start sub_8030A3C -sub_8030A3C: @ 8030A3C - push {lr} - ldr r2, _08030A64 @ =gBattleBufferA - ldr r0, _08030A68 @ =gActiveBank - ldrb r1, [r0] - lsls r1, 9 - adds r0, r2, 0x1 - adds r0, r1, r0 - ldrb r0, [r0] - adds r2, 0x2 - adds r1, r2 - ldrb r1, [r1] - lsls r1, 8 - orrs r0, r1 - bl PlayBGM - bl PlayerBufferExecCompleted - pop {r0} - bx r0 - .align 2, 0 -_08030A64: .4byte gBattleBufferA -_08030A68: .4byte gActiveBank - thumb_func_end sub_8030A3C - - thumb_func_start sub_8030A6C -sub_8030A6C: @ 8030A6C - push {lr} - bl PlayerBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_8030A6C - - thumb_func_start sub_8030A78 -sub_8030A78: @ 8030A78 - push {lr} - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl dp01_build_cmdbuf_x21_a_bb - bl PlayerBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_8030A78 - - thumb_func_start sub_8030A8C -sub_8030A8C: @ 8030A8C - push {lr} - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl dp01_build_cmdbuf_x22_a_three_bytes - bl PlayerBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_8030A8C - - thumb_func_start sub_8030AA0 -sub_8030AA0: @ 8030AA0 - push {lr} - movs r0, 0x1 - movs r1, 0 - bl dp01_build_cmdbuf_x23_aa_0 - bl PlayerBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_8030AA0 - - thumb_func_start sub_8030AB4 -sub_8030AB4: @ 8030AB4 - push {lr} - movs r0, 0x1 - movs r1, 0 - bl dp01_build_cmdbuf_x24_aa_0 - bl PlayerBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_8030AB4 - - thumb_func_start sub_8030AC8 -sub_8030AC8: @ 8030AC8 - push {lr} - ldr r2, _08030AE0 @ =gUnknown_020238C8 - ldrb r1, [r2] - movs r0, 0x80 - negs r0, r0 - ands r0, r1 - strb r0, [r2] - bl PlayerBufferExecCompleted - pop {r0} - bx r0 - .align 2, 0 -_08030AE0: .4byte gUnknown_020238C8 - thumb_func_end sub_8030AC8 - - thumb_func_start sub_8030AE4 -sub_8030AE4: @ 8030AE4 - push {lr} - ldr r3, _08030B10 @ =gUnknown_020238C8 - ldr r1, _08030B14 @ =gBattleBufferA - ldr r0, _08030B18 @ =gActiveBank - ldrb r0, [r0] - lsls r0, 9 - adds r1, 0x1 - adds r0, r1 - ldrb r0, [r0] - movs r1, 0x7F - ands r1, r0 - ldrb r2, [r3] - movs r0, 0x80 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - bl PlayerBufferExecCompleted - pop {r0} - bx r0 - .align 2, 0 -_08030B10: .4byte gUnknown_020238C8 -_08030B14: .4byte gBattleBufferA -_08030B18: .4byte gActiveBank - thumb_func_end sub_8030AE4 - - thumb_func_start sub_8030B1C -sub_8030B1C: @ 8030B1C - push {lr} - ldr r2, _08030B30 @ =gUnknown_020238C8 - ldrb r1, [r2] - movs r0, 0x7F - ands r0, r1 - strb r0, [r2] - bl PlayerBufferExecCompleted - pop {r0} - bx r0 - .align 2, 0 -_08030B30: .4byte gUnknown_020238C8 - thumb_func_end sub_8030B1C - - thumb_func_start sub_8030B34 -sub_8030B34: @ 8030B34 - push {lr} - ldr r3, _08030B58 @ =gUnknown_020238C8 - ldr r1, [r3] - lsls r1, 24 - lsrs r1, 31 - movs r0, 0x1 - eors r1, r0 - lsls r1, 7 - ldrb r2, [r3] - movs r0, 0x7F - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - bl PlayerBufferExecCompleted - pop {r0} - bx r0 - .align 2, 0 -_08030B58: .4byte gUnknown_020238C8 - thumb_func_end sub_8030B34 - - thumb_func_start PlayerHandleHitAnimation -PlayerHandleHitAnimation: @ 8030B5C - push {r4,lr} - ldr r3, _08030B84 @ =gSprites - ldr r2, _08030B88 @ =gObjectBankIDs - ldr r4, _08030B8C @ =gActiveBank - ldrb r0, [r4] - adds r0, r2 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - adds r0, 0x3E - ldrb r0, [r0] - lsls r0, 29 - cmp r0, 0 - bge _08030B90 - bl PlayerBufferExecCompleted - b _08030BBA - .align 2, 0 -_08030B84: .4byte gSprites -_08030B88: .4byte gObjectBankIDs -_08030B8C: .4byte gActiveBank -_08030B90: - ldr r1, _08030BC0 @ =gDoingBattleAnim - movs r0, 0x1 - strb r0, [r1] - ldrb r0, [r4] - adds r0, r2 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - movs r1, 0 - strh r1, [r0, 0x30] - ldrb r0, [r4] - bl sub_8047858 - ldr r1, _08030BC4 @ =gBattleBankFunc - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - ldr r1, _08030BC8 @ =bx_blink_t1 - str r1, [r0] -_08030BBA: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08030BC0: .4byte gDoingBattleAnim -_08030BC4: .4byte gBattleBankFunc -_08030BC8: .4byte bx_blink_t1 - thumb_func_end PlayerHandleHitAnimation - - thumb_func_start sub_8030BCC -sub_8030BCC: @ 8030BCC - push {lr} - bl PlayerBufferExecCompleted - pop {r0} - bx r0 - thumb_func_end sub_8030BCC - - thumb_func_start PlayerHandleEffectivenessSound -PlayerHandleEffectivenessSound: @ 8030BD8 - push {r4,lr} - ldr r4, _08030C14 @ =gActiveBank - ldrb r0, [r4] - bl GetBankSide - lsls r0, 24 - movs r3, 0x3F - cmp r0, 0 - bne _08030BEC - movs r3, 0xC0 -_08030BEC: - ldr r2, _08030C18 @ =gBattleBufferA - ldrb r1, [r4] - lsls r1, 9 - adds r0, r2, 0x1 - adds r0, r1, r0 - ldrb r0, [r0] - adds r2, 0x2 - adds r1, r2 - ldrb r1, [r1] - lsls r1, 8 - orrs r0, r1 - lsls r1, r3, 24 - asrs r1, 24 - bl PlaySE12WithPanning - bl PlayerBufferExecCompleted - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08030C14: .4byte gActiveBank -_08030C18: .4byte gBattleBufferA - thumb_func_end PlayerHandleEffectivenessSound - - thumb_func_start sub_8030C1C -sub_8030C1C: @ 8030C1C - push {lr} - ldr r2, _08030C44 @ =gBattleBufferA - ldr r0, _08030C48 @ =gActiveBank - ldrb r1, [r0] - lsls r1, 9 - adds r0, r2, 0x1 - adds r0, r1, r0 - ldrb r0, [r0] - adds r2, 0x2 - adds r1, r2 - ldrb r1, [r1] - lsls r1, 8 - orrs r0, r1 - bl PlayFanfare - bl PlayerBufferExecCompleted - pop {r0} - bx r0 - .align 2, 0 -_08030C44: .4byte gBattleBufferA -_08030C48: .4byte gActiveBank - thumb_func_end sub_8030C1C - - thumb_func_start PlayerHandleFaintingCry -PlayerHandleFaintingCry: @ 8030C4C - push {lr} - ldr r1, _08030C80 @ =gBattlePartyID - ldr r0, _08030C84 @ =gActiveBank - ldrb r0, [r0] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08030C88 @ =gPlayerParty - adds r0, r1 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x19 - negs r1, r1 - movs r2, 0x5 - bl PlayCry3 - bl PlayerBufferExecCompleted - pop {r0} - bx r0 - .align 2, 0 -_08030C80: .4byte gBattlePartyID -_08030C84: .4byte gActiveBank -_08030C88: .4byte gPlayerParty - thumb_func_end PlayerHandleFaintingCry - - thumb_func_start PlayerHandleIntroSlide -PlayerHandleIntroSlide: @ 8030C8C - push {lr} - ldr r1, _08030CB4 @ =gBattleBufferA - ldr r0, _08030CB8 @ =gActiveBank - ldrb r0, [r0] - lsls r0, 9 - adds r1, 0x1 - adds r0, r1 - ldrb r0, [r0] - bl sub_80E43C0 - ldr r2, _08030CBC @ =gUnknown_02024DE8 - ldrh r0, [r2] - movs r1, 0x1 - orrs r0, r1 - strh r0, [r2] - bl PlayerBufferExecCompleted - pop {r0} - bx r0 - .align 2, 0 -_08030CB4: .4byte gBattleBufferA -_08030CB8: .4byte gActiveBank -_08030CBC: .4byte gUnknown_02024DE8 - thumb_func_end PlayerHandleIntroSlide - - thumb_func_start PlayerHandleTrainerBallThrow -PlayerHandleTrainerBallThrow: @ 8030CC0 - push {r4-r7,lr} - ldr r6, _08030DF8 @ =gObjectBankIDs - ldr r7, _08030DFC @ =gActiveBank - ldrb r0, [r7] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r5, _08030E00 @ =gSprites - adds r0, r5 - bl oamt_add_pos2_onto_pos1 - ldrb r0, [r7] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - movs r1, 0x32 - strh r1, [r0, 0x2E] - ldrb r0, [r7] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldr r1, _08030E04 @ =0x0000ffd8 - strh r1, [r0, 0x32] - ldrb r0, [r7] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldrh r1, [r0, 0x22] - strh r1, [r0, 0x36] - ldrb r0, [r7] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r5, 0 - adds r1, 0x1C - adds r0, r1 - ldr r1, _08030E08 @ =sub_8078B34 - str r1, [r0] - ldrb r2, [r7] - adds r0, r2, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - strh r2, [r0, 0x38] - ldrb r0, [r7] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldr r1, _08030E0C @ =sub_8030E38 - bl oamt_set_x3A_32 - ldrb r0, [r7] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - movs r1, 0x1 - bl StartSpriteAnim - ldr r0, _08030E10 @ =0x0000d6f8 - bl AllocSpritePalette - adds r4, r0, 0 - lsls r4, 24 - ldr r1, _08030E14 @ =gTrainerBackPicPaletteTable - ldr r0, _08030E18 @ =gSaveBlock2 - ldrb r0, [r0, 0x8] - lsls r0, 3 - adds r0, r1 - ldr r0, [r0] - lsrs r4, 20 - movs r2, 0x80 - lsls r2, 1 - adds r1, r4, r2 - movs r2, 0x20 - bl LoadCompressedPalette - ldrb r0, [r7] - adds r0, r6 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r5 - ldrb r2, [r1, 0x5] - movs r0, 0xF - ands r0, r2 - orrs r0, r4 - strb r0, [r1, 0x5] - ldr r0, _08030E1C @ =task05_08033660 - movs r1, 0x5 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r4, _08030E20 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r4 - ldrb r0, [r7] - strh r0, [r1, 0x8] - ldrb r3, [r7] - lsls r0, r3, 1 - adds r0, r3 - lsls r0, 2 - ldr r2, _08030E24 @ =0x02017810 - adds r0, r2 - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08030DDC - ldr r0, _08030E28 @ =gUnknown_02024E68 - adds r0, r3, r0 - ldrb r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r4 - ldr r1, _08030E2C @ =sub_8044CA0 - str r1, [r0] -_08030DDC: - adds r2, 0x30 - ldrb r0, [r2, 0x9] - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2, 0x9] - ldr r1, _08030E30 @ =gBattleBankFunc - ldrb r0, [r7] - lsls r0, 2 - adds r0, r1 - ldr r1, _08030E34 @ =nullsub_91 - str r1, [r0] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08030DF8: .4byte gObjectBankIDs -_08030DFC: .4byte gActiveBank -_08030E00: .4byte gSprites -_08030E04: .4byte 0x0000ffd8 -_08030E08: .4byte sub_8078B34 -_08030E0C: .4byte sub_8030E38 -_08030E10: .4byte 0x0000d6f8 -_08030E14: .4byte gTrainerBackPicPaletteTable -_08030E18: .4byte gSaveBlock2 -_08030E1C: .4byte task05_08033660 -_08030E20: .4byte gTasks -_08030E24: .4byte 0x02017810 -_08030E28: .4byte gUnknown_02024E68 -_08030E2C: .4byte sub_8044CA0 -_08030E30: .4byte gBattleBankFunc -_08030E34: .4byte nullsub_91 - thumb_func_end PlayerHandleTrainerBallThrow - - thumb_func_start sub_8030E38 -sub_8030E38: @ 8030E38 - push {r4,r5,lr} - adds r5, r0, 0 - ldrh r4, [r5, 0x38] - lsls r4, 24 - lsrs r4, 24 - bl FreeSpriteOamMatrix - ldrb r0, [r5, 0x5] - lsrs r0, 4 - bl GetSpritePaletteTagByPaletteNum - lsls r0, 16 - lsrs r0, 16 - bl FreeSpritePaletteByTag - adds r0, r5, 0 - bl DestroySprite - ldr r1, _08030E90 @ =gBattlePartyID - lsls r0, r4, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08030E94 @ =gPlayerParty - adds r0, r1 - adds r1, r4, 0 - bl sub_80318FC - ldr r0, _08030E98 @ =gObjectBankIDs - adds r4, r0 - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08030E9C @ =gSprites - adds r0, r1 - movs r1, 0 - bl StartSpriteAnim - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08030E90: .4byte gBattlePartyID -_08030E94: .4byte gPlayerParty -_08030E98: .4byte gObjectBankIDs -_08030E9C: .4byte gSprites - thumb_func_end sub_8030E38 - - thumb_func_start task05_08033660 -task05_08033660: @ 8030EA0 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r1, _08030EC8 @ =gTasks - lsls r0, 2 - add r0, r8 - lsls r0, 3 - adds r1, r0, r1 - ldrh r2, [r1, 0xA] - movs r3, 0xA - ldrsh r0, [r1, r3] - cmp r0, 0x1E - bgt _08030ECC - adds r0, r2, 0x1 - strh r0, [r1, 0xA] - b _08030F88 - .align 2, 0 -_08030EC8: .4byte gTasks -_08030ECC: - ldr r7, _08030F0C @ =gActiveBank - ldrb r0, [r7] - mov r9, r0 - ldrh r0, [r1, 0x8] - strb r0, [r7] - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - beq _08030EEC - ldr r0, _08030F10 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08030F1C -_08030EEC: - ldr r0, _08030F14 @ =gBattleBufferA - ldrb r1, [r7] - lsls r2, r1, 9 - adds r0, 0x1 - adds r2, r0 - ldr r0, _08030F18 @ =gBattlePartyID - lsls r1, 1 - adds r1, r0 - ldrh r0, [r1] - strb r0, [r2] - ldrb r0, [r7] - movs r1, 0 - bl sub_802F934 - b _08030F70 - .align 2, 0 -_08030F0C: .4byte gActiveBank -_08030F10: .4byte gBattleTypeFlags -_08030F14: .4byte gBattleBufferA -_08030F18: .4byte gBattlePartyID -_08030F1C: - ldr r4, _08030F94 @ =gBattleBufferA - ldrb r0, [r7] - lsls r1, r0, 9 - adds r4, 0x1 - adds r1, r4 - ldr r5, _08030F98 @ =gBattlePartyID - lsls r0, 1 - adds r0, r5 - ldrh r0, [r0] - strb r0, [r1] - ldrb r0, [r7] - movs r1, 0 - bl sub_802F934 - ldrb r0, [r7] - movs r6, 0x2 - eors r0, r6 - strb r0, [r7] - ldrb r0, [r7] - lsls r1, r0, 9 - adds r1, r4 - lsls r0, 1 - adds r0, r5 - ldrh r0, [r0] - strb r0, [r1] - ldrb r1, [r7] - lsls r0, r1, 1 - adds r0, r5 - ldrh r2, [r0] - movs r0, 0x64 - muls r0, r2 - ldr r2, _08030F9C @ =gPlayerParty - adds r0, r2 - bl sub_80318FC - ldrb r0, [r7] - movs r1, 0 - bl sub_802F934 - ldrb r0, [r7] - eors r0, r6 - strb r0, [r7] -_08030F70: - ldr r1, _08030FA0 @ =gBattleBankFunc - ldr r2, _08030FA4 @ =gActiveBank - ldrb r0, [r2] - lsls r0, 2 - adds r0, r1 - ldr r1, _08030FA8 @ =sub_802D500 - str r1, [r0] - mov r3, r9 - strb r3, [r2] - mov r0, r8 - bl DestroyTask -_08030F88: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08030F94: .4byte gBattleBufferA -_08030F98: .4byte gBattlePartyID -_08030F9C: .4byte gPlayerParty -_08030FA0: .4byte gBattleBankFunc -_08030FA4: .4byte gActiveBank -_08030FA8: .4byte sub_802D500 - thumb_func_end task05_08033660 - - thumb_func_start sub_8030FAC -sub_8030FAC: @ 8030FAC - push {r4-r6,lr} - ldr r1, _08030FD4 @ =gBattleBufferA - ldr r0, _08030FD8 @ =gActiveBank - ldrb r2, [r0] - lsls r0, r2, 9 - adds r1, 0x1 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _08030FDC - adds r0, r2, 0 - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - bne _08030FDC - bl PlayerBufferExecCompleted - b _08031044 - .align 2, 0 -_08030FD4: .4byte gBattleBufferA -_08030FD8: .4byte gActiveBank -_08030FDC: - ldr r5, _0803104C @ =gActiveBank - ldrb r1, [r5] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - ldr r6, _08031050 @ =0x02017810 - adds r0, r6 - ldrb r1, [r0] - movs r2, 0x1 - orrs r1, r2 - strb r1, [r0] - ldrb r0, [r5] - lsls r3, r0, 9 - ldr r4, _08031054 @ =gUnknown_02023A64 - adds r1, r3, r4 - subs r2, r4, 0x3 - adds r2, r3, r2 - ldrb r2, [r2] - subs r4, 0x2 - adds r3, r4 - ldrb r3, [r3] - bl sub_8044804 - ldr r2, _08031058 @ =gUnknown_02024E68 - ldrb r1, [r5] - adds r1, r2 - movs r2, 0 - strb r0, [r1] - ldrb r1, [r5] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - strb r2, [r0, 0x5] - ldrb r1, [r5] - lsls r0, r1, 9 - adds r0, r4 - ldrb r0, [r0] - cmp r0, 0 - beq _08031038 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - movs r1, 0x5D - strb r1, [r0, 0x5] -_08031038: - ldr r0, _0803105C @ =gBattleBankFunc - ldrb r1, [r5] - lsls r1, 2 - adds r1, r0 - ldr r0, _08031060 @ =sub_8031064 - str r0, [r1] -_08031044: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0803104C: .4byte gActiveBank -_08031050: .4byte 0x02017810 -_08031054: .4byte gUnknown_02023A64 -_08031058: .4byte gUnknown_02024E68 -_0803105C: .4byte gBattleBankFunc -_08031060: .4byte sub_8031064 - thumb_func_end sub_8030FAC - - thumb_func_start sub_8031064 -sub_8031064: @ 8031064 - push {r4,lr} - ldr r4, _0803109C @ =gActiveBank - ldrb r1, [r4] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - ldr r3, _080310A0 @ =0x02017810 - adds r0, r3 - ldrb r1, [r0, 0x5] - adds r2, r1, 0x1 - strb r2, [r0, 0x5] - lsls r1, 24 - lsrs r1, 24 - cmp r1, 0x5C - bls _08031094 - ldrb r0, [r4] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r3 - movs r0, 0 - strb r0, [r1, 0x5] - bl PlayerBufferExecCompleted -_08031094: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0803109C: .4byte gActiveBank -_080310A0: .4byte 0x02017810 - thumb_func_end sub_8031064 - - thumb_func_start sub_80310A4 -sub_80310A4: @ 80310A4 - push {lr} - ldr r0, _080310DC @ =gActiveBank - ldrb r3, [r0] - lsls r0, r3, 1 - adds r0, r3 - lsls r0, 2 - ldr r1, _080310E0 @ =0x02017810 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080310D2 - ldr r2, _080310E4 @ =gTasks - ldr r0, _080310E8 @ =gUnknown_02024E68 - adds r0, r3, r0 - ldrb r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - ldr r1, _080310EC @ =sub_8044CA0 - str r1, [r0] -_080310D2: - bl PlayerBufferExecCompleted - pop {r0} - bx r0 - .align 2, 0 -_080310DC: .4byte gActiveBank -_080310E0: .4byte 0x02017810 -_080310E4: .4byte gTasks -_080310E8: .4byte gUnknown_02024E68 -_080310EC: .4byte sub_8044CA0 - thumb_func_end sub_80310A4 - - thumb_func_start sub_80310F0 -sub_80310F0: @ 80310F0 - push {r4,lr} - ldr r4, _08031110 @ =gActiveBank - ldrb r0, [r4] - movs r1, 0x1 - bl dp11b_obj_free - ldrb r0, [r4] - movs r1, 0 - bl dp11b_obj_free - bl PlayerBufferExecCompleted - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08031110: .4byte gActiveBank - thumb_func_end sub_80310F0 - - thumb_func_start PlayerHandleSpriteInvisibility -PlayerHandleSpriteInvisibility: @ 8031114 - push {r4,lr} - ldr r4, _08031164 @ =gActiveBank - ldrb r0, [r4] - bl sub_8078874 - lsls r0, 24 - cmp r0, 0 - beq _0803115A - ldr r3, _08031168 @ =gSprites - ldr r0, _0803116C @ =gObjectBankIDs - ldrb r1, [r4] - adds r0, r1, r0 - ldrb r0, [r0] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r3 - ldr r0, _08031170 @ =gBattleBufferA - lsls r1, 9 - adds r0, 0x1 - adds r1, r0 - adds r2, 0x3E - movs r0, 0x1 - ldrb r1, [r1] - ands r1, r0 - lsls r1, 2 - ldrb r3, [r2] - movs r0, 0x5 - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2] - ldrb r0, [r4] - bl sub_8031F88 -_0803115A: - bl PlayerBufferExecCompleted - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08031164: .4byte gActiveBank -_08031168: .4byte gSprites -_0803116C: .4byte gObjectBankIDs -_08031170: .4byte gBattleBufferA - thumb_func_end PlayerHandleSpriteInvisibility - - thumb_func_start PlayerHandleBattleAnimation -PlayerHandleBattleAnimation: @ 8031174 - push {r4-r6,lr} - sub sp, 0x4 - ldr r6, _080311B8 @ =gActiveBank - ldrb r0, [r6] - bl mplay_80342A4 - lsls r0, 24 - cmp r0, 0 - bne _080311CC - ldr r5, _080311BC @ =gBattleBufferA - ldrb r2, [r6] - lsls r1, r2, 9 - adds r0, r5, 0x1 - adds r0, r1, r0 - ldrb r3, [r0] - adds r0, r5, 0x2 - adds r0, r1, r0 - ldrb r4, [r0] - adds r5, 0x3 - adds r1, r5 - ldrb r0, [r1] - lsls r0, 8 - orrs r4, r0 - str r4, [sp] - adds r0, r2, 0 - adds r1, r2, 0 - bl move_anim_start_t3 - lsls r0, 24 - cmp r0, 0 - beq _080311C0 - bl PlayerBufferExecCompleted - b _080311CC - .align 2, 0 -_080311B8: .4byte gActiveBank -_080311BC: .4byte gBattleBufferA -_080311C0: - ldr r0, _080311D4 @ =gBattleBankFunc - ldrb r1, [r6] - lsls r1, 2 - adds r1, r0 - ldr r0, _080311D8 @ =sub_802E460 - str r0, [r1] -_080311CC: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080311D4: .4byte gBattleBankFunc -_080311D8: .4byte sub_802E460 - thumb_func_end PlayerHandleBattleAnimation - - thumb_func_start PlayerHandleLinkStandbyMsg -PlayerHandleLinkStandbyMsg: @ 80311DC - push {r4,lr} - ldr r1, _080311FC @ =gBattleBufferA - ldr r0, _08031200 @ =gActiveBank - ldrb r0, [r0] - lsls r0, 9 - adds r1, 0x1 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x1 - beq _0803120E - cmp r0, 0x1 - bgt _08031204 - cmp r0, 0 - beq _0803120A - b _0803122C - .align 2, 0 -_080311FC: .4byte gBattleBufferA -_08031200: .4byte gActiveBank -_08031204: - cmp r0, 0x2 - beq _08031228 - b _0803122C -_0803120A: - bl b_link_standby_message -_0803120E: - ldr r4, _08031224 @ =gActiveBank - ldrb r0, [r4] - movs r1, 0x1 - bl dp11b_obj_free - ldrb r0, [r4] - movs r1, 0 - bl dp11b_obj_free - b _0803122C - .align 2, 0 -_08031224: .4byte gActiveBank -_08031228: - bl b_link_standby_message -_0803122C: - bl PlayerBufferExecCompleted - pop {r4} - pop {r0} - bx r0 - thumb_func_end PlayerHandleLinkStandbyMsg - - thumb_func_start PlayerHandleResetActionMoveSelection -PlayerHandleResetActionMoveSelection: @ 8031238 - push {r4,lr} - ldr r1, _08031258 @ =gBattleBufferA - ldr r4, _0803125C @ =gActiveBank - ldrb r3, [r4] - lsls r0, r3, 9 - adds r1, 0x1 - adds r0, r1 - ldrb r2, [r0] - cmp r2, 0x1 - beq _08031280 - cmp r2, 0x1 - bgt _08031260 - cmp r2, 0 - beq _08031266 - b _08031290 - .align 2, 0 -_08031258: .4byte gBattleBufferA -_0803125C: .4byte gActiveBank -_08031260: - cmp r2, 0x2 - beq _08031288 - b _08031290 -_08031266: - ldr r0, _08031278 @ =gActionSelectionCursor - adds r0, r3, r0 - strb r2, [r0] - ldr r1, _0803127C @ =gMoveSelectionCursor - ldrb r0, [r4] - adds r0, r1 - strb r2, [r0] - b _08031290 - .align 2, 0 -_08031278: .4byte gActionSelectionCursor -_0803127C: .4byte gMoveSelectionCursor -_08031280: - ldr r0, _08031284 @ =gActionSelectionCursor - b _0803128A - .align 2, 0 -_08031284: .4byte gActionSelectionCursor -_08031288: - ldr r0, _0803129C @ =gMoveSelectionCursor -_0803128A: - adds r0, r3, r0 - movs r1, 0 - strb r1, [r0] -_08031290: - bl PlayerBufferExecCompleted - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0803129C: .4byte gMoveSelectionCursor - thumb_func_end PlayerHandleResetActionMoveSelection - - thumb_func_start sub_80312A0 -sub_80312A0: @ 80312A0 - push {r4,lr} - ldr r2, _080312D8 @ =gBattleOutcome - ldr r1, _080312DC @ =gBattleBufferA - ldr r4, _080312E0 @ =gActiveBank - ldrb r0, [r4] - lsls r0, 9 - adds r1, 0x1 - adds r0, r1 - ldrb r0, [r0] - strb r0, [r2] - movs r0, 0x5 - bl FadeOutMapMusic - movs r0, 0x3 - bl BeginFastPaletteFade - bl PlayerBufferExecCompleted - ldr r1, _080312E4 @ =gBattleBankFunc - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - ldr r1, _080312E8 @ =sub_802D18C - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080312D8: .4byte gBattleOutcome -_080312DC: .4byte gBattleBufferA -_080312E0: .4byte gActiveBank -_080312E4: .4byte gBattleBankFunc -_080312E8: .4byte sub_802D18C - thumb_func_end sub_80312A0 - - thumb_func_start nullsub_43 -nullsub_43: @ 80312EC - bx lr - thumb_func_end nullsub_43 - - .align 2, 0 @ Don't pad with nop. diff --git a/include/battle.h b/include/battle.h index 395cf042a..d93860094 100644 --- a/include/battle.h +++ b/include/battle.h @@ -185,7 +185,6 @@ struct Struct2017810 u8 unk1_0:1; u8 unk2; u8 unk3; - //u8 filler2[2]; u8 unk4; u8 unk5; u8 unk6; @@ -198,13 +197,21 @@ struct Struct2017810 struct Struct2017840 { u16 unk0; - u8 filler2[7]; + u8 filler2[6]; + u8 unk8; u8 unk9_0:1; }; +struct Struct20238C8 +{ + u8 unk0_0:7; + u8 unk0_7:1; +}; + extern struct UnkBattleStruct1 unk_2016A00; extern struct UnkBattleStruct4 gDisableStructs[]; extern struct AI_ThinkingStruct gAIThinkingSpace; +extern struct Struct20238C8 gUnknown_020238C8; // TODO: move ewram to global.h extern u8 ewram[]; diff --git a/include/pokemon.h b/include/pokemon.h index 47990073b..be8e4e56d 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -182,41 +182,41 @@ struct PokemonSubstruct2 struct PokemonSubstruct3 { - /* 0x00 */ u8 pokerus; - /* 0x01 */ u8 metLocation; - - /* 0x02 */ u16 metLevel:7; - /* 0x02 */ u16 metGame:4; - /* 0x03 */ u16 pokeball:4; - /* 0x03 */ u16 otGender:1; - - /* 0x04 */ u32 hpIV:5; - /* 0x04 */ u32 attackIV:5; - /* 0x05 */ u32 defenseIV:5; - /* 0x05 */ u32 speedIV:5; - /* 0x05 */ u32 spAttackIV:5; - /* 0x06 */ u32 spDefenseIV:5; - /* 0x07 */ u32 isEgg:1; - /* 0x07 */ u32 altAbility:1; - - /* 0x08 */ u32 coolRibbon:3; - /* 0x08 */ u32 beautyRibbon:3; - /* 0x08 */ u32 cuteRibbon:3; - /* 0x09 */ u32 smartRibbon:3; - /* 0x09 */ u32 toughRibbon:3; - /* 0x09 */ u32 championRibbon:1; - /* 0x0A */ u32 winningRibbon:1; - /* 0x0A */ u32 victoryRibbon:1; - /* 0x0A */ u32 artistRibbon:1; - /* 0x0A */ u32 effortRibbon:1; - /* 0x0A */ u32 giftRibbon1:1; - /* 0x0A */ u32 giftRibbon2:1; - /* 0x0A */ u32 giftRibbon3:1; - /* 0x0A */ u32 giftRibbon4:1; - /* 0x0B */ u32 giftRibbon5:1; - /* 0x0B */ u32 giftRibbon6:1; - /* 0x0B */ u32 giftRibbon7:1; - /* 0x0B */ u32 fatefulEncounter:5; // unused in Ruby/Sapphire, but the high bit must be set for Mew/Deoxys to obey in FR/LG/Emerald + /*0x00*/ u8 pokerus; + /*0x01*/ u8 metLocation; + + /*0x02*/ u16 metLevel:7; + /*0x02*/ u16 metGame:4; + /*0x03*/ u16 pokeball:4; + /*0x03*/ u16 otGender:1; + + /*0x04*/ u32 hpIV:5; + /*0x04*/ u32 attackIV:5; + /*0x05*/ u32 defenseIV:5; + /*0x05*/ u32 speedIV:5; + /*0x05*/ u32 spAttackIV:5; + /*0x06*/ u32 spDefenseIV:5; + /*0x07*/ u32 isEgg:1; + /*0x07*/ u32 altAbility:1; + + /*0x08*/ u32 coolRibbon:3; + /*0x08*/ u32 beautyRibbon:3; + /*0x08*/ u32 cuteRibbon:3; + /*0x09*/ u32 smartRibbon:3; + /*0x09*/ u32 toughRibbon:3; + /*0x09*/ u32 championRibbon:1; + /*0x0A*/ u32 winningRibbon:1; + /*0x0A*/ u32 victoryRibbon:1; + /*0x0A*/ u32 artistRibbon:1; + /*0x0A*/ u32 effortRibbon:1; + /*0x0A*/ u32 giftRibbon1:1; + /*0x0A*/ u32 giftRibbon2:1; + /*0x0A*/ u32 giftRibbon3:1; + /*0x0A*/ u32 giftRibbon4:1; + /*0x0B*/ u32 giftRibbon5:1; + /*0x0B*/ u32 giftRibbon6:1; + /*0x0B*/ u32 giftRibbon7:1; + /*0x0B*/ u32 fatefulEncounter:5; // unused in Ruby/Sapphire, but the high bit must be set for Mew/Deoxys to obey in FR/LG/Emerald }; union PokemonSubstruct @@ -230,39 +230,39 @@ union PokemonSubstruct struct BoxPokemon { - u32 personality; - u32 otId; - u8 nickname[POKEMON_NAME_LENGTH]; - u8 language; - u8 isBadEgg:1; - u8 hasSpecies:1; - u8 isEgg:1; - u8 unused:5; - u8 otName[OT_NAME_LENGTH]; - u8 markings; - u16 checksum; - u16 unknown; + /*0x00*/ u32 personality; + /*0x04*/ u32 otId; + /*0x08*/ u8 nickname[POKEMON_NAME_LENGTH]; + /*0x12*/ u8 language; + /*0x13*/ u8 isBadEgg:1; + u8 hasSpecies:1; + u8 isEgg:1; + u8 unused:5; + /*0x14*/ u8 otName[OT_NAME_LENGTH]; + /*0x1B*/ u8 markings; + /*0x1C*/ u16 checksum; + /*0x1E*/ u16 unknown; union { u32 raw[12]; union PokemonSubstruct substructs[4]; } secure; -}; +}; /*size = 0x50*/ struct Pokemon { - struct BoxPokemon box; - u32 status; - u8 level; - u8 mail; - u16 hp; - u16 maxHP; - u16 attack; - u16 defense; - u16 speed; - u16 spAttack; - u16 spDefense; + /*0x00*/ struct BoxPokemon box; + /*0x50*/ u32 status; + /*0x54*/ u8 level; + /*0x55*/ u8 mail; + /*0x56*/ u16 hp; + /*0x58*/ u16 maxHP; + /*0x5A*/ u16 attack; + /*0x5C*/ u16 defense; + /*0x5E*/ u16 speed; + /*0x60*/ u16 spAttack; + /*0x62*/ u16 spDefense; }; struct UnknownPokemonStruct @@ -294,73 +294,73 @@ struct UnknownPokemonStruct struct BattlePokemon { - /* 0x00 */ u16 species; - /* 0x02 */ u16 attack; - /* 0x04 */ u16 defense; - /* 0x06 */ u16 speed; - /* 0x08 */ u16 spAttack; - /* 0x0A */ u16 spDefense; - /* 0x0C */ u16 moves[4]; - /* 0x14 */ u32 hpIV:5; - /* 0x14 */ u32 attackIV:5; - /* 0x15 */ u32 defenseIV:5; - /* 0x15 */ u32 speedIV:5; - /* 0x16 */ u32 spAttackIV:5; - /* 0x17 */ u32 spDefenseIV:5; - /* 0x17 */ u32 isEgg:1; - /* 0x17 */ u32 altAbility:1; - /* 0x18 */ s8 statStages[8]; - /* 0x20 */ u8 ability; - /* 0x21 */ u8 type1; - /* 0x22 */ u8 type2; - /* 0x23 */ u8 unknown; - /* 0x24 */ u8 pp[4]; - /* 0x28 */ u16 hp; - /* 0x2A */ u8 level; - /* 0x2B */ u8 friendship; - /* 0x2C */ u16 maxHP; - /* 0x2E */ u16 item; - /* 0x30 */ u8 nickname[POKEMON_NAME_LENGTH + 1]; - /* 0x3B */ u8 ppBonuses; - /* 0x3C */ u8 otName[8]; - /* 0x44 */ u32 experience; - /* 0x48 */ u32 personality; - /* 0x4C */ u32 status1; - /* 0x50 */ u32 status2; - /* 0x54 */ u32 otId; + /*0x00*/ u16 species; + /*0x02*/ u16 attack; + /*0x04*/ u16 defense; + /*0x06*/ u16 speed; + /*0x08*/ u16 spAttack; + /*0x0A*/ u16 spDefense; + /*0x0C*/ u16 moves[4]; + /*0x14*/ u32 hpIV:5; + /*0x14*/ u32 attackIV:5; + /*0x15*/ u32 defenseIV:5; + /*0x15*/ u32 speedIV:5; + /*0x16*/ u32 spAttackIV:5; + /*0x17*/ u32 spDefenseIV:5; + /*0x17*/ u32 isEgg:1; + /*0x17*/ u32 altAbility:1; + /*0x18*/ s8 statStages[8]; + /*0x20*/ u8 ability; + /*0x21*/ u8 type1; + /*0x22*/ u8 type2; + /*0x23*/ u8 unknown; + /*0x24*/ u8 pp[4]; + /*0x28*/ u16 hp; + /*0x2A*/ u8 level; + /*0x2B*/ u8 friendship; + /*0x2C*/ u16 maxHP; + /*0x2E*/ u16 item; + /*0x30*/ u8 nickname[POKEMON_NAME_LENGTH + 1]; + /*0x3B*/ u8 ppBonuses; + /*0x3C*/ u8 otName[8]; + /*0x44*/ u32 experience; + /*0x48*/ u32 personality; + /*0x4C*/ u32 status1; + /*0x50*/ u32 status2; + /*0x54*/ u32 otId; }; struct BaseStats { - /* 0x00 */ u8 baseHP; - /* 0x01 */ u8 baseAttack; - /* 0x02 */ u8 baseDefense; - /* 0x03 */ u8 baseSpeed; - /* 0x04 */ u8 baseSpAttack; - /* 0x05 */ u8 baseSpDefense; - /* 0x06 */ u8 type1; - /* 0x07 */ u8 type2; - /* 0x08 */ u8 catchRate; - /* 0x09 */ u8 expYield; - /* 0x0A */ u16 evYield_HP:2; - /* 0x0A */ u16 evYield_Attack:2; - /* 0x0A */ u16 evYield_Defense:2; - /* 0x0A */ u16 evYield_Speed:2; - /* 0x0B */ u16 evYield_SpAttack:2; - /* 0x0B */ u16 evYield_SpDefense:2; - /* 0x0C */ u16 item1; - /* 0x0E */ u16 item2; - /* 0x10 */ u8 genderRatio; - /* 0x11 */ u8 eggCycles; - /* 0x12 */ u8 friendship; - /* 0x13 */ u8 growthRate; - /* 0x14 */ u8 eggGroup1; - /* 0x15 */ u8 eggGroup2; - /* 0x16 */ u8 ability1; - /* 0x17 */ u8 ability2; - /* 0x18 */ u8 safariZoneFleeRate; - /* 0x19 */ u8 bodyColor:7; - u8 unk19_7:1; + /*0x00*/ u8 baseHP; + /*0x01*/ u8 baseAttack; + /*0x02*/ u8 baseDefense; + /*0x03*/ u8 baseSpeed; + /*0x04*/ u8 baseSpAttack; + /*0x05*/ u8 baseSpDefense; + /*0x06*/ u8 type1; + /*0x07*/ u8 type2; + /*0x08*/ u8 catchRate; + /*0x09*/ u8 expYield; + /*0x0A*/ u16 evYield_HP:2; + /*0x0A*/ u16 evYield_Attack:2; + /*0x0A*/ u16 evYield_Defense:2; + /*0x0A*/ u16 evYield_Speed:2; + /*0x0B*/ u16 evYield_SpAttack:2; + /*0x0B*/ u16 evYield_SpDefense:2; + /*0x0C*/ u16 item1; + /*0x0E*/ u16 item2; + /*0x10*/ u8 genderRatio; + /*0x11*/ u8 eggCycles; + /*0x12*/ u8 friendship; + /*0x13*/ u8 growthRate; + /*0x14*/ u8 eggGroup1; + /*0x15*/ u8 eggGroup2; + /*0x16*/ u8 ability1; + /*0x17*/ u8 ability2; + /*0x18*/ u8 safariZoneFleeRate; + /*0x19*/ u8 bodyColor:7; + u8 unk19_7:1; }; struct BattleMove @@ -378,10 +378,10 @@ struct BattleMove struct PokemonStorage { - /* 0x00 */ u8 currentBox; - /* 0x01 */ struct BoxPokemon boxes[14][30]; - u8 boxNames[14][9]; - u8 unkArray[14]; + /*0x00*/ u8 currentBox; + /*0x01*/ struct BoxPokemon boxes[14][30]; + u8 boxNames[14][9]; + u8 unkArray[14]; }; struct Evolution diff --git a/include/rom3.h b/include/rom3.h index 8e99f8de4..a45ec7dc4 100644 --- a/include/rom3.h +++ b/include/rom3.h @@ -13,13 +13,53 @@ void sub_800C1A8(u8); void sub_800C35C(void); void sub_800C47C(u8); void EmitGetAttributes(u8 a, u8 b, u8 c); +void dp01_build_cmdbuf_x01_a_b_0(u8 a, u8 b, u8 c); +void EmitSetAttributes(u8 a, u8 b, u8 c, u8 d, u8 *e); void dp01_build_cmdbuf_x04_4_4_4(u8 a); void sub_800C704(u8, u8, u8); +void dp01_build_cmdbuf_x06_a(u8 a, u8 b); void dp01_build_cmdbuf_x07_7_7_7(u8 a); +void dp01_build_cmdbuf_x08_8_8_8(u8 a); +void dp01_build_cmdbuf_x09_9_9_9(u8 a); +void EmitFaintAnimation(u8 a); +void dp01_build_cmdbuf_x0B_B_B_B(u8 a); +void dp01_build_cmdbuf_x0C_C_C_C(u8 a); +void dp01_build_cmdbuf_x0D_a(u8 a, u8 b); +void EmitMoveAnimation(u8 a, u16 b, u8 c, u16 d, s32 e, u8 f, u8 *g); +void EmitPrintString(u8 a, u16 b); void dp01_build_cmdbuf_x12_a_bb(u8 a, u8 b, u16 c); +void sub_800CBA4(u8 a, u8 b, u8 c, u8 *d); +void sub_800CBE0(u8 a, u8 *b); +void dp01_build_cmdbuf_x16_a_b_c_ptr_d_e_f(u8 a, u8 b, u8 c, u8 d, u8 *e); +void dp01_build_cmdbuf_x17_17_17_17(u8 a); +void EmitHealthBarUpdate(u8 a, s16 b); +void EmitExpBarUpdate(u8 a, u8 b, s16 c); +void EmitStatusIconUpdate(u8 a, u32 b, u32 c); +void EmitStatusAnimation(u8 a, u8 b, u32 c); +void EmitStatusXor(u8 a, u8 b); void dp01_build_cmdbuf_x1D_1D_numargs_varargs(u8, u16, u8 *); +void dp01_build_cmdbuf_x21_a_bb(u8 a, u8 b, u16 c); +void dp01_build_cmdbuf_x22_a_three_bytes(u8 a, u8 b, u8 *c); +void dp01_build_cmdbuf_x23_aa_0(u8 a, u16 b); +void dp01_build_cmdbuf_x24_aa_0(u8 a, u16 b); +void dp01_build_cmdbuf_x25_25_25_25(u8 a); +void dp01_build_cmdbuf_x26_a(u8 a, u8 b); +void dp01_build_cmdbuf_x27_27_27_27(u8 a); +void dp01_build_cmdbuf_x28_28_28_28(u8 a); +void EmitHitAnimation(u8 a); +void dp01_build_cmdbuf_x2A_2A_2A_2A(u8 a); +void EmitEffectivenessSound(u8 a, u16 b); +void sub_800D074(u8 a, u16 b); +void EmitFaintingCry(u8 a); void EmitBattleIntroSlide(u8 a, u8 b); void dp01_build_cmdbuf_x2F_2F_2F_2F(u8 a); void dp01_build_cmdbuf_x30_TODO(u8 a, u8 *b, u8 c); +void dp01_build_cmdbuf_x31_31_31_31(u8 a); +void dp01_build_cmdbuf_x32_32_32_32(u8 a); +void EmitSpriteInvisibility(u8 a, u8 b); +void EmitBattleAnimation(u8 a, u8 b, u16 c); +void EmitLinkStandbyMsg(u8 a, u8 b); +void EmitResetActionMoveSelection(u8 a, u8 b); +void dp01_build_cmdbuf_x37_a(u8 a, u8 b); #endif // GUARD_ROM3_H diff --git a/ld_script.txt b/ld_script.txt index 20cd94a4a..bb563bd66 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -56,9 +56,7 @@ SECTIONS { asm/battle_3.o(.text); asm/battle_4.o(.text); asm/battle_5.o(.text); - asm/battle_6.o(.text); src/battle_6.o(.text); - asm/battle_6.o(.text_8030464); src/battle_7.o(.text); asm/battle_8.o(.text); asm/battle_9.o(.text); diff --git a/src/battle_6.c b/src/battle_6.c index df2419f70..9ea3f240a 100644 --- a/src/battle_6.c +++ b/src/battle_6.c @@ -1,8 +1,27 @@ #include "global.h" #include "battle.h" +#include "battle_interface.h" #include "battle_message.h" +#include "data2.h" #include "menu_cursor.h" +#include "palette.h" +#include "pokemon.h" +#include "rom3.h" +#include "songs.h" +#include "sound.h" +#include "sprite.h" +#include "string_util.h" +#include "task.h" #include "text.h" +#include "util.h" + +//Possibly PokemonSubstruct1 +struct UnknownStruct3 +{ + u16 moves[4]; + u8 pp[4]; + u8 ppBonuses; +}; extern u16 gUnknown_030042A4; extern u16 gUnknown_030042A0; @@ -14,16 +33,42 @@ extern void (*gBattleBankFunc[])(void); extern u8 gActiveBank; extern u8 gActionSelectionCursor[]; extern u8 gDisplayedStringBattle[]; - -extern u16 gUnknown_030042C0; -extern u16 gUnknown_030041B4; -extern u16 gUnknown_03004288; -extern u16 gUnknown_03004280; +extern u8 gMoveSelectionCursor[]; +extern u8 gBattleBufferA[][0x200]; +extern u8 gBankInMenu; +extern u16 gBattlePartyID[]; +extern u8 gHealthboxIDs[]; +extern u8 gDoingBattleAnim; +extern u8 gObjectBankIDs[]; +extern u16 gBattleTypeFlags; +extern u8 gBattleOutcome; +extern void (*gAnimScriptCallback)(void); +extern bool8 gAnimScriptActive; +extern u16 gMovePowerMoveAnim; +extern u32 gMoveDmgMoveAnim; +extern u8 gHappinessMoveAnim; +extern u16 gWeatherMoveAnim; +extern u32 *gDisableStructMoveAnim; +extern u32 gPID_perBank[]; +extern u8 gBattleMonForms[]; +extern u16 gUnknown_02024DE8; +extern u8 gUnknown_02024E68[]; +extern struct SpriteTemplate gUnknown_02024E8C; +extern u8 gUnknown_0202F7C4; +extern u8 gUnknown_02038470[]; extern u16 gUnknown_030041B0; +extern u16 gUnknown_030041B4; extern u16 gUnknown_030041B8; +extern u16 gUnknown_03004280; +extern u16 gUnknown_03004288; +extern u16 gUnknown_030042A4; +extern u16 gUnknown_030042C0; +extern u8 gUnknown_03004344; +extern u8 gUnknown_0300434C[]; extern const u8 gUnknown_08400CA8[]; extern const u8 gUnknown_08400CF3[]; +extern const u8 gUnknown_08400D38[]; #if ENGLISH #define SUB_803037C_TILE_DATA_OFFSET 440 @@ -31,7 +76,952 @@ extern const u8 gUnknown_08400CF3[]; #define SUB_803037C_TILE_DATA_OFFSET 444 #endif -void sub_803037C(void) { +extern void sub_802C68C(void); +extern void sub_802E1B0(void); +extern void sub_802E3B4(); +extern void sub_802E220(); +extern void sub_802E2D4(); +extern void sub_802E004(void); +extern void sub_802DF30(void); +extern void sub_80325B8(void); +extern void PlayerBufferExecCompleted(void); +extern void bx_t1_healthbar_update(void); +extern void nullsub_91(void); +extern void sub_802D924(u8); +extern void sub_802E434(void); +extern bool8 mplay_80342A4(u8); +extern void move_anim_start_t2_for_situation(); +extern void bx_blink_t1(void); +extern void sub_8047858(); +extern u8 GetBankSide(u8); +extern void sub_80E43C0(); +extern void oamt_add_pos2_onto_pos1(); +extern void sub_8078B34(struct Sprite *); +extern void oamt_set_x3A_32(); +extern void sub_80318FC(); +extern bool8 IsDoubleBattle(void); +extern void sub_802D500(void); +extern void dp11b_obj_free(); +extern bool8 sub_8078874(u8); +extern bool8 move_anim_start_t3(); +extern void sub_802E460(void); +extern void b_link_standby_message(void); +extern void sub_802D18C(void); +extern void sub_802DF18(void); +extern void BufferStringBattle(); +extern void sub_80326EC(); +extern void ExecuteMoveAnim(); +extern void sub_8031F24(void); +extern void sub_80324BC(); +extern u8 sub_8031720(); +extern void bx_wait_t1(void); +extern u8 GetBankByPlayerAI(u8); +extern void sub_802DE10(void); +extern void sub_80105EC(struct Sprite *); +extern void sub_802D274(void); +extern void sub_802D23C(void); +extern u8 GetBankIdentity(u8); +extern void sub_8031AF4(); +extern void sub_80313A0(struct Sprite *); +extern void sub_802D204(void); +extern u8 sub_8079E90(); +extern void sub_802DEAC(void); +extern void sub_80312F0(struct Sprite *); +extern u8 sub_8077ABC(); +extern u8 sub_8077F68(); +extern u8 sub_8046400(); +extern void sub_802D798(void); +extern void bx_0802E404(void); + +u32 dp01_getattr_by_ch1_for_player_pokemon_(u8, u8 *); +void dp01_setattr_by_ch1_for_player_pokemon(u8); +void sub_802F934(u8, u8); +void sub_802FB2C(void); +void sub_8030190(void); +void sub_80304A8(void); +void sub_8030E38(struct Sprite *); +void task05_08033660(u8); +void sub_8031064(void); + +void PlayerHandleGetAttributes(void) +{ + u8 unkData[0x100]; + u32 offset = 0; + u8 r4; + s32 i; + + if (gBattleBufferA[gActiveBank][2] == 0) + { + offset += dp01_getattr_by_ch1_for_player_pokemon_(gBattlePartyID[gActiveBank], unkData); + } + else + { + r4 = gBattleBufferA[gActiveBank][2]; + for (i = 0; i < 6; i++) + { + if (r4 & 1) + offset += dp01_getattr_by_ch1_for_player_pokemon_(i, unkData + offset); + r4 >>= 1; + } + } + dp01_build_cmdbuf_x1D_1D_numargs_varargs(1, offset, unkData); + PlayerBufferExecCompleted(); +} + +// Duplicate of dp01_getattr_by_ch1_for_player_pokemon +u32 dp01_getattr_by_ch1_for_player_pokemon_(u8 a, u8 *buffer) +{ + struct BattlePokemon battlePokemon; + struct UnknownStruct3 moveData; + u8 nickname[20]; + u8 *src; + s16 data16; + u32 data32; + s32 size = 0; + + switch (gBattleBufferA[gActiveBank][1]) + { + case 0: + battlePokemon.species = GetMonData(&gPlayerParty[a], MON_DATA_SPECIES); + battlePokemon.item = GetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM); + for (size = 0; size < 4; size++) + { + battlePokemon.moves[size] = GetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + size); + battlePokemon.pp[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size); + } + battlePokemon.ppBonuses = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES); + battlePokemon.friendship = GetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP); + battlePokemon.experience = GetMonData(&gPlayerParty[a], MON_DATA_EXP); + battlePokemon.hpIV = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV); + battlePokemon.attackIV = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV); + battlePokemon.defenseIV = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV); + battlePokemon.speedIV = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV); + battlePokemon.spAttackIV = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV); + battlePokemon.spDefenseIV = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV); + battlePokemon.personality = GetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY); + battlePokemon.status1 = GetMonData(&gPlayerParty[a], MON_DATA_STATUS); + battlePokemon.level = GetMonData(&gPlayerParty[a], MON_DATA_LEVEL); + battlePokemon.hp = GetMonData(&gPlayerParty[a], MON_DATA_HP); + battlePokemon.maxHP = GetMonData(&gPlayerParty[a], MON_DATA_MAX_HP); + battlePokemon.attack = GetMonData(&gPlayerParty[a], MON_DATA_ATK); + battlePokemon.defense = GetMonData(&gPlayerParty[a], MON_DATA_DEF); + battlePokemon.speed = GetMonData(&gPlayerParty[a], MON_DATA_SPD); + battlePokemon.spAttack = GetMonData(&gPlayerParty[a], MON_DATA_SPATK); + battlePokemon.spDefense = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF); + battlePokemon.isEgg = GetMonData(&gPlayerParty[a], MON_DATA_IS_EGG); + battlePokemon.altAbility = GetMonData(&gPlayerParty[a], MON_DATA_ALT_ABILITY); + battlePokemon.otId = GetMonData(&gPlayerParty[a], MON_DATA_OT_ID); + GetMonData(&gPlayerParty[a], MON_DATA_NICKNAME, nickname); + StringCopy10(battlePokemon.nickname, nickname); + GetMonData(&gPlayerParty[a], MON_DATA_OT_NAME, battlePokemon.otName); + src = (u8 *)&battlePokemon; + for (size = 0; size < sizeof(battlePokemon); size++) + buffer[size] = src[size]; + break; + case 1: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPECIES); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 2: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 3: + for (size = 0; size < 4; size++) + { + moveData.moves[size] = GetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + size); + moveData.pp[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size); + } + moveData.ppBonuses = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES); + src = (u8 *)&moveData; + for (size = 0; size < sizeof(moveData); size++) + buffer[size] = src[size]; + break; + case 4: + case 5: + case 6: + case 7: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - 4); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 8: + for (size = 0; size < 4; size++) + buffer[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size); + buffer[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES); + size++; + break; + case 9: + case 10: + case 11: + case 12: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - 9); + size = 1; + break; + case 17: + data32 = GetMonData(&gPlayerParty[a], MON_DATA_OT_ID); + buffer[0] = (data32 & 0x000000FF); + buffer[1] = (data32 & 0x0000FF00) >> 8; + buffer[2] = (data32 & 0x00FF0000) >> 16; + size = 3; + break; + case 18: + data32 = GetMonData(&gPlayerParty[a], MON_DATA_EXP); + buffer[0] = (data32 & 0x000000FF); + buffer[1] = (data32 & 0x0000FF00) >> 8; + buffer[2] = (data32 & 0x00FF0000) >> 16; + size = 3; + break; + case 19: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_EV); + size = 1; + break; + case 20: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_EV); + size = 1; + break; + case 21: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_EV); + size = 1; + break; + case 22: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_EV); + size = 1; + break; + case 23: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_EV); + size = 1; + break; + case 24: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_EV); + size = 1; + break; + case 25: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP); + size = 1; + break; + case 26: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_POKERUS); + size = 1; + break; + case 27: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_MET_LOCATION); + size = 1; + break; + case 28: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_MET_LEVEL); + size = 1; + break; + case 29: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_MET_GAME); + size = 1; + break; + case 30: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_POKEBALL); + size = 1; + break; + case 31: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV); + buffer[1] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV); + buffer[2] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV); + buffer[3] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV); + buffer[4] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV); + buffer[5] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV); + size = 6; + break; + case 32: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV); + size = 1; + break; + case 33: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV); + size = 1; + break; + case 34: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV); + size = 1; + break; + case 35: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV); + size = 1; + break; + case 36: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV); + size = 1; + break; + case 37: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV); + size = 1; + break; + case 38: + data32 = GetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY); + buffer[0] = (data32 & 0x000000FF); + buffer[1] = (data32 & 0x0000FF00) >> 8; + buffer[2] = (data32 & 0x00FF0000) >> 16; + buffer[3] = (data32 & 0xFF000000) >> 24; + size = 4; + break; + case 39: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_CHECKSUM); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 40: + data32 = GetMonData(&gPlayerParty[a], MON_DATA_STATUS); + buffer[0] = (data32 & 0x000000FF); + buffer[1] = (data32 & 0x0000FF00) >> 8; + buffer[2] = (data32 & 0x00FF0000) >> 16; + buffer[3] = (data32 & 0xFF000000) >> 24; + size = 4; + break; + case 41: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_LEVEL); + size = 1; + break; + case 42: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_HP); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 43: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_MAX_HP); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 44: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_ATK); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 45: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_DEF); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 46: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPD); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 47: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPATK); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 48: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 49: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_COOL); + size = 1; + break; + case 50: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_BEAUTY); + size = 1; + break; + case 51: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_CUTE); + size = 1; + break; + case 52: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SMART); + size = 1; + break; + case 53: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_TOUGH); + size = 1; + break; + case 54: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SHEEN); + size = 1; + break; + case 55: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_COOL_RIBBON); + size = 1; + break; + case 56: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_BEAUTY_RIBBON); + size = 1; + break; + case 57: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_CUTE_RIBBON); + size = 1; + break; + case 58: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SMART_RIBBON); + size = 1; + break; + case 59: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_TOUGH_RIBBON); + size = 1; + break; + } + return size; +} + +void sub_802ECF0(void) +{ + struct BattlePokemon battleMon; // I think this is a BattlePokemon + u8 *src = (u8 *)&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1]; + u8 *dst = (u8 *)&battleMon + gBattleBufferA[gActiveBank][1]; + u8 i; + + for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++) + dst[i] = src[i]; + dp01_build_cmdbuf_x1D_1D_numargs_varargs(1, gBattleBufferA[gActiveBank][2], dst); + PlayerBufferExecCompleted(); +} + +void PlayerHandleSetAttributes(void) +{ + u8 r4; + u8 i; + + if (gBattleBufferA[gActiveBank][2] == 0) + { + dp01_setattr_by_ch1_for_player_pokemon(gBattlePartyID[gActiveBank]); + } + else + { + r4 = gBattleBufferA[gActiveBank][2]; + for (i = 0; i < 6; i++) + { + if (r4 & 1) + dp01_setattr_by_ch1_for_player_pokemon(i); + r4 >>= 1; + } + } + PlayerBufferExecCompleted(); +} + +// Duplicate of sub_811EC68 +void dp01_setattr_by_ch1_for_player_pokemon(u8 a) +{ + struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBank][3]; + struct UnknownStruct3 *moveData = (struct UnknownStruct3 *)&gBattleBufferA[gActiveBank][3]; + s32 i; + + switch (gBattleBufferA[gActiveBank][1]) + { + case 0: + { + u8 iv; + + SetMonData(&gPlayerParty[a], MON_DATA_SPECIES, (u8 *)&battlePokemon->species); + SetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM, (u8 *)&battlePokemon->item); + for (i = 0; i < 4; i++) + { + SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + i, (u8 *)&battlePokemon->moves[i]); + SetMonData(&gPlayerParty[a], MON_DATA_PP1 + i, (u8 *)&battlePokemon->pp[i]); + } + SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, (u8 *)&battlePokemon->ppBonuses); + SetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP, (u8 *)&battlePokemon->friendship); + SetMonData(&gPlayerParty[a], MON_DATA_EXP, (u8 *)&battlePokemon->experience); + iv = battlePokemon->hpIV; + SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, (u8 *)&iv); + iv = battlePokemon->attackIV; + SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, (u8 *)&iv); + iv = battlePokemon->defenseIV; + SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, (u8 *)&iv); + iv = battlePokemon->speedIV; + SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, (u8 *)&iv); + iv = battlePokemon->spAttackIV; + SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, (u8 *)&iv); + iv = battlePokemon->spDefenseIV; + SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, (u8 *)&iv); + SetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY, (u8 *)&battlePokemon->personality); + SetMonData(&gPlayerParty[a], MON_DATA_STATUS, (u8 *)&battlePokemon->status1); + SetMonData(&gPlayerParty[a], MON_DATA_LEVEL, (u8 *)&battlePokemon->level); + SetMonData(&gPlayerParty[a], MON_DATA_HP, (u8 *)&battlePokemon->hp); + SetMonData(&gPlayerParty[a], MON_DATA_MAX_HP, (u8 *)&battlePokemon->maxHP); + SetMonData(&gPlayerParty[a], MON_DATA_ATK, (u8 *)&battlePokemon->attack); + SetMonData(&gPlayerParty[a], MON_DATA_DEF, (u8 *)&battlePokemon->defense); + SetMonData(&gPlayerParty[a], MON_DATA_SPD, (u8 *)&battlePokemon->speed); + SetMonData(&gPlayerParty[a], MON_DATA_SPATK, (u8 *)&battlePokemon->spAttack); + SetMonData(&gPlayerParty[a], MON_DATA_SPDEF, (u8 *)&battlePokemon->spDefense); + } + break; + case 1: + SetMonData(&gPlayerParty[a], MON_DATA_SPECIES, &gBattleBufferA[gActiveBank][3]); + break; + case 2: + SetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBank][3]); + break; + case 3: + for (i = 0; i < 4; i++) + { + SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + i, (u8 *)&moveData->moves[i]); + SetMonData(&gPlayerParty[a], MON_DATA_PP1 + i, (u8 *)&moveData->pp[i]); + } + SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, &moveData->ppBonuses); + break; + case 4: + case 5: + case 6: + case 7: + SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - 4, &gBattleBufferA[gActiveBank][3]); + break; + case 8: + SetMonData(&gPlayerParty[a], MON_DATA_PP1, &gBattleBufferA[gActiveBank][3]); + SetMonData(&gPlayerParty[a], MON_DATA_PP2, &gBattleBufferA[gActiveBank][4]); + SetMonData(&gPlayerParty[a], MON_DATA_PP3, &gBattleBufferA[gActiveBank][5]); + SetMonData(&gPlayerParty[a], MON_DATA_PP4, &gBattleBufferA[gActiveBank][6]); + SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, &gBattleBufferA[gActiveBank][7]); + break; + case 9: + case 10: + case 11: + case 12: + SetMonData(&gPlayerParty[a], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - 9, &gBattleBufferA[gActiveBank][3]); + break; + case 17: + SetMonData(&gPlayerParty[a], MON_DATA_OT_ID, &gBattleBufferA[gActiveBank][3]); + break; + case 18: + SetMonData(&gPlayerParty[a], MON_DATA_EXP, &gBattleBufferA[gActiveBank][3]); + break; + case 19: + SetMonData(&gPlayerParty[a], MON_DATA_HP_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 20: + SetMonData(&gPlayerParty[a], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 21: + SetMonData(&gPlayerParty[a], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 22: + SetMonData(&gPlayerParty[a], MON_DATA_SPD_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 23: + SetMonData(&gPlayerParty[a], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 24: + SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBank][3]); + break; + case 25: + SetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBank][3]); + break; + case 26: + SetMonData(&gPlayerParty[a], MON_DATA_POKERUS, &gBattleBufferA[gActiveBank][3]); + break; + case 27: + SetMonData(&gPlayerParty[a], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBank][3]); + break; + case 28: + SetMonData(&gPlayerParty[a], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBank][3]); + break; + case 29: + SetMonData(&gPlayerParty[a], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBank][3]); + break; + case 30: + SetMonData(&gPlayerParty[a], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBank][3]); + break; + case 31: + SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]); + SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][4]); + SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][5]); + SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][6]); + SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][7]); + SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][8]); + break; + case 32: + SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 33: + SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 34: + SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 35: + SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 36: + SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 37: + SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][3]); + break; + case 38: + SetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBank][3]); + break; + case 39: + SetMonData(&gPlayerParty[a], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBank][3]); + break; + case 40: + SetMonData(&gPlayerParty[a], MON_DATA_STATUS, &gBattleBufferA[gActiveBank][3]); + break; + case 41: + SetMonData(&gPlayerParty[a], MON_DATA_LEVEL, &gBattleBufferA[gActiveBank][3]); + break; + case 42: + SetMonData(&gPlayerParty[a], MON_DATA_HP, &gBattleBufferA[gActiveBank][3]); + break; + case 43: + SetMonData(&gPlayerParty[a], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBank][3]); + break; + case 44: + SetMonData(&gPlayerParty[a], MON_DATA_ATK, &gBattleBufferA[gActiveBank][3]); + break; + case 45: + SetMonData(&gPlayerParty[a], MON_DATA_DEF, &gBattleBufferA[gActiveBank][3]); + break; + case 46: + SetMonData(&gPlayerParty[a], MON_DATA_SPD, &gBattleBufferA[gActiveBank][3]); + break; + case 47: + SetMonData(&gPlayerParty[a], MON_DATA_SPATK, &gBattleBufferA[gActiveBank][3]); + break; + case 48: + SetMonData(&gPlayerParty[a], MON_DATA_SPDEF, &gBattleBufferA[gActiveBank][3]); + break; + case 49: + SetMonData(&gPlayerParty[a], MON_DATA_COOL, &gBattleBufferA[gActiveBank][3]); + break; + case 50: + SetMonData(&gPlayerParty[a], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBank][3]); + break; + case 51: + SetMonData(&gPlayerParty[a], MON_DATA_CUTE, &gBattleBufferA[gActiveBank][3]); + break; + case 52: + SetMonData(&gPlayerParty[a], MON_DATA_SMART, &gBattleBufferA[gActiveBank][3]); + break; + case 53: + SetMonData(&gPlayerParty[a], MON_DATA_TOUGH, &gBattleBufferA[gActiveBank][3]); + break; + case 54: + SetMonData(&gPlayerParty[a], MON_DATA_SHEEN, &gBattleBufferA[gActiveBank][3]); + break; + case 55: + SetMonData(&gPlayerParty[a], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBank][3]); + break; + case 56: + SetMonData(&gPlayerParty[a], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBank][3]); + break; + case 57: + SetMonData(&gPlayerParty[a], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBank][3]); + break; + case 58: + SetMonData(&gPlayerParty[a], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBank][3]); + break; + case 59: + SetMonData(&gPlayerParty[a], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBank][3]); + break; + } + sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); +} + +void sub_802F7CC(void) +{ + u8 *dst = (u8 *)&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1]; + u8 i; + + for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++) + dst[i] = gBattleBufferA[gActiveBank][3 + i]; + PlayerBufferExecCompleted(); +} + +void PlayerHandleLoadPokeSprite(void) +{ + sub_80318FC(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank; + gBattleBankFunc[gActiveBank] = bx_0802E404; +} + +void PlayerHandleSendOutPoke(void) +{ + sub_8032AA8(gActiveBank, gBattleBufferA[gActiveBank][2]); + gBattlePartyID[gActiveBank] = gBattleBufferA[gActiveBank][1]; + sub_80318FC(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + gActionSelectionCursor[gActiveBank] = 0; + gMoveSelectionCursor[gActiveBank] = 0; + sub_802F934(gActiveBank, gBattleBufferA[gActiveBank][2]); + gBattleBankFunc[gActiveBank] = sub_802D798; +} + +void sub_802F934(u8 bank, u8 b) +{ + u16 species; + + sub_8032AA8(bank, b); + gBattlePartyID[bank] = gBattleBufferA[bank][1]; + species = GetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_SPECIES); + gUnknown_0300434C[bank] = CreateInvisibleSpriteWithCallback(sub_80312F0); + GetMonSpriteTemplate_803C56C(species, GetBankIdentity(bank)); + gObjectBankIDs[bank] = CreateSprite( + &gUnknown_02024E8C, + sub_8077ABC(bank, 2), + sub_8077F68(bank), + sub_8079E90(bank)); + gSprites[gUnknown_0300434C[bank]].data1 = gObjectBankIDs[bank]; + gSprites[gObjectBankIDs[bank]].data0 = bank; + gSprites[gObjectBankIDs[bank]].data2 = species; + gSprites[gObjectBankIDs[bank]].oam.paletteNum = bank; + StartSpriteAnim(&gSprites[gObjectBankIDs[bank]], gBattleMonForms[bank]); + gSprites[gObjectBankIDs[bank]].invisible = TRUE; + gSprites[gObjectBankIDs[bank]].callback = SpriteCallbackDummy; + gSprites[gUnknown_0300434C[bank]].data0 = sub_8046400(0, 0xFF); +} + +void PlayerHandleReturnPokeToBall(void) +{ + if (gBattleBufferA[gActiveBank][1] == 0) + { + ewram17810[gActiveBank].unk4 = 0; + gBattleBankFunc[gActiveBank] = sub_802FB2C; + } + else + { + FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]); + DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]); + sub_8043DB0(gHealthboxIDs[gActiveBank]); + PlayerBufferExecCompleted(); + } +} + +void sub_802FB2C(void) +{ + switch (ewram17810[gActiveBank].unk4) + { + case 0: + if (ewram17800[gActiveBank].unk0_2) + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); + ewram17810[gActiveBank].unk4 = 1; + break; + case 1: + if (!ewram17810[gActiveBank].unk0_6) + { + ewram17810[gActiveBank].unk4 = 0; + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 1); + gBattleBankFunc[gActiveBank] = sub_802DEAC; + } + } +} + +void PlayerHandleTrainerThrow(void) +{ + s16 r7; + + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + if (GetBankIdentity(gActiveBank) & 2) + r7 = 16; + else + r7 = -16; + } + else + { + r7 = 0; + } + sub_8031AF4(gSaveBlock2.playerGender, gActiveBank); + GetMonSpriteTemplate_803C5A0(gSaveBlock2.playerGender, GetBankIdentity(gActiveBank)); + gObjectBankIDs[gActiveBank] = CreateSprite( + &gUnknown_02024E8C, + r7 + 80, + (8 - gTrainerBackPicCoords[gSaveBlock2.playerGender].coords) * 4 + 80, + sub_8079E90(gActiveBank)); + gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank; + gSprites[gObjectBankIDs[gActiveBank]].pos2.x = 240; + gSprites[gObjectBankIDs[gActiveBank]].data0 = -2; + gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0; + gBattleBankFunc[gActiveBank] = sub_802D204; +} + +void PlayerHandleTrainerSlide(void) +{ + sub_8031AF4(gSaveBlock2.playerGender, gActiveBank); + GetMonSpriteTemplate_803C5A0(gSaveBlock2.playerGender, GetBankIdentity(gActiveBank)); + gObjectBankIDs[gActiveBank] = CreateSprite( + &gUnknown_02024E8C, + 80, + (8 - gTrainerBackPicCoords[gSaveBlock2.playerGender].coords) * 4 + 80, + 30); + gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank; + gSprites[gObjectBankIDs[gActiveBank]].pos2.x = -96; + gSprites[gObjectBankIDs[gActiveBank]].data0 = 2; + gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0; + gBattleBankFunc[gActiveBank] = sub_802D23C; +} + +void PlayerHandleTrainerSlideBack(void) +{ + oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]); + gSprites[gObjectBankIDs[gActiveBank]].data0 = 50; + gSprites[gObjectBankIDs[gActiveBank]].data2 = -40; + gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; + gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34; + oamt_set_x3A_32(&gSprites[gObjectBankIDs[gActiveBank]], SpriteCallbackDummy); + StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 1); + gBattleBankFunc[gActiveBank] = sub_802D274; +} + +void sub_802FE7C(void) +{ + if (ewram17810[gActiveBank].unk4 == 0) + { + if (ewram17800[gActiveBank].unk0_2) + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); + ewram17810[gActiveBank].unk4++; + } + else + { + if (ewram17810[gActiveBank].unk0_6 == 0) + { + ewram17810[gActiveBank].unk4 = 0; + sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + PlaySE12WithPanning(SE_POKE_DEAD, -64); + gSprites[gObjectBankIDs[gActiveBank]].data1 = 0; + gSprites[gObjectBankIDs[gActiveBank]].data2 = 5; + gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80105EC; + gBattleBankFunc[gActiveBank] = sub_802DE10; + } + } +} + +void sub_802FF60(void) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 2, 0, 16, 0); + PlayerBufferExecCompleted(); +} + +void sub_802FF80(void) +{ + ewram17840.unk8 = 4; + gDoingBattleAnim = 1; + move_anim_start_t4(gActiveBank, gActiveBank, GetBankByPlayerAI(1), 3); + gBattleBankFunc[gActiveBank] = bx_wait_t1; +} + +void PlayerHandleBallThrow(void) +{ + u8 var = gBattleBufferA[gActiveBank][1]; + + ewram17840.unk8 = var; + gDoingBattleAnim = 1; + move_anim_start_t4(gActiveBank, gActiveBank, GetBankByPlayerAI(1), 3); + gBattleBankFunc[gActiveBank] = bx_wait_t1; +} + +void PlayerHandlePuase(void) +{ + u8 var = gBattleBufferA[gActiveBank][1]; + + // WTF is this?? + while (var != 0) + var--; + + PlayerBufferExecCompleted(); +} + +void PlayerHandleMoveAnimation(void) +{ + if (!mplay_80342A4(gActiveBank)) + { + u16 r0 = gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8); + + gUnknown_0202F7C4 = gBattleBufferA[gActiveBank][3]; + gMovePowerMoveAnim = gBattleBufferA[gActiveBank][4] | (gBattleBufferA[gActiveBank][5] << 8); + gMoveDmgMoveAnim = gBattleBufferA[gActiveBank][6] | (gBattleBufferA[gActiveBank][7] << 8) | (gBattleBufferA[gActiveBank][8] << 16) | (gBattleBufferA[gActiveBank][9] << 24); + gHappinessMoveAnim = gBattleBufferA[gActiveBank][10]; + gWeatherMoveAnim = gBattleBufferA[gActiveBank][12] | (gBattleBufferA[gActiveBank][13] << 8); + gDisableStructMoveAnim = (u32 *)&gBattleBufferA[gActiveBank][16]; + gPID_perBank[gActiveBank] = *gDisableStructMoveAnim; + if (sub_8031720(r0, gUnknown_0202F7C4) != 0) + { + // Dead code. sub_8031720 always returns 0. + PlayerBufferExecCompleted(); + } + else + { + ewram17810[gActiveBank].unk4 = 0; + gBattleBankFunc[gActiveBank] = sub_8030190; + } + } +} + +void sub_8030190(void) +{ + u16 r4 = gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8); + u8 r7 = gBattleBufferA[gActiveBank][11]; + + switch (ewram17810[gActiveBank].unk4) + { + case 0: + if (ewram17800[gActiveBank].unk0_2 == 1 && ewram17800[gActiveBank].unk0_3 == 0) + { + ewram17800[gActiveBank].unk0_3 = 1; + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5); + } + ewram17810[gActiveBank].unk4 = 1; + break; + case 1: + if (ewram17810[gActiveBank].unk0_6 == 0) + { + sub_80326EC(0); + ExecuteMoveAnim(r4); + ewram17810[gActiveBank].unk4 = 2; + } + break; + case 2: + gAnimScriptCallback(); + if (!gAnimScriptActive) + { + sub_80326EC(1); + if (ewram17800[gActiveBank].unk0_2 == 1 && r7 < 2) + { + move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6); + ewram17800[gActiveBank].unk0_3 = 0; + } + ewram17810[gActiveBank].unk4 = 3; + } + break; + case 3: + if (ewram17810[gActiveBank].unk0_6 == 0) + { + sub_8031F24(); + sub_80324BC(gActiveBank, gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8)); + ewram17810[gActiveBank].unk4 = 0; + PlayerBufferExecCompleted(); + } + break; + } +} + +void PlayerHandlePrintString(void) +{ + gUnknown_030042A4 = 0; + gUnknown_030042A0 = 0; + BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBank][2]); + sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 0x90, 2, 15); + gBattleBankFunc[gActiveBank] = sub_802DF18; +} + +void PlayerHandlePrintStringPlayerOnly(void) +{ + if (GetBankSide(gActiveBank) == 0) + PlayerHandlePrintString(); + else + PlayerBufferExecCompleted(); +} + +void sub_803037C(void) +{ int r4; gUnknown_030042A4 = 0; @@ -46,9 +1036,7 @@ void sub_803037C(void) { sub_814A5C0(0, 0xFFFF, 12, 11679, 0); for (r4 = 0; r4 < 4; r4++) - { nullsub_8(r4); - } sub_802E3E4(gActionSelectionCursor[gActiveBank], 0); @@ -56,3 +1044,464 @@ void sub_803037C(void) { InitWindow(&gUnknown_03004210, gDisplayedStringBattle, SUB_803037C_TILE_DATA_OFFSET, 2, 35); sub_8002F44(&gUnknown_03004210); } + +void nullsub_42() +{ +} + +void sub_8030468(void) +{ + sub_814A5C0(0, 0xFFFF, 12, 0x2D9F, 0); + sub_80304A8(); + gBattleBankFunc[gActiveBank] = sub_802C68C; +} + +void sub_80304A8(void) +{ + gUnknown_030042A4 = 0; + gUnknown_030042A0 = 320; + sub_802E1B0(); + gUnknown_03004344 = 0xFF; + sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0); + if (gBattleBufferA[gActiveBank][2] != 1) + { + InitWindow(&gUnknown_03004210, gUnknown_08400D38, 656, 23, 55); + sub_8002F44(&gUnknown_03004210); + } + sub_802E220(); + sub_802E2D4(); +} + +void PlayerHandleOpenBag(void) +{ + s32 i; + + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gBattleBankFunc[gActiveBank] = sub_802E004; + gBankInMenu = gActiveBank; + for (i = 0; i < 3; i++) + gUnknown_02038470[i] = gBattleBufferA[gActiveBank][1 + i]; +} + +void sub_8030594(void) +{ + s32 i; + + gUnknown_0300434C[gActiveBank] = CreateTask(TaskDummy, 0xFF); + gTasks[gUnknown_0300434C[gActiveBank]].data[0] = gBattleBufferA[gActiveBank][1] & 0xF; + ewram[0x16054] = gBattleBufferA[gActiveBank][1] >> 4; + ewram[0x1609D] = gBattleBufferA[gActiveBank][2]; + ewram[0x160C0] = gBattleBufferA[gActiveBank][3]; + for (i = 0; i < 3; i++) + gUnknown_02038470[i] = gBattleBufferA[gActiveBank][4 + i]; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gBattleBankFunc[gActiveBank] = sub_802DF30; + gBankInMenu = gActiveBank; +} + +void sub_8030674(void) +{ + sub_80325B8(); + BeginNormalPaletteFade(0xFFFFFFFF, 2, 0, 16, 0); + PlayerBufferExecCompleted(); +} + +void PlayerHandleHealthBarUpdate(void) +{ + s16 r7; + + load_gfxc_health_bar(0); + r7 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8); + if (r7 != 0x7FFF) + { + u32 maxHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP); + u32 curHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_HP); + + sub_8043D84(gActiveBank, gHealthboxIDs[gActiveBank], maxHP, curHP, r7); + } + else + { + u32 maxHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP); + + sub_8043D84(gActiveBank, gHealthboxIDs[gActiveBank], maxHP, 0, r7); + sub_80440EC(gHealthboxIDs[gActiveBank], 0, 0); + } + gBattleBankFunc[gActiveBank] = bx_t1_healthbar_update; +} + +void PlayerHandleExpBarUpdate(void) +{ + u8 r7 = gBattleBufferA[gActiveBank][1]; + + if (GetMonData(&gPlayerParty[r7], MON_DATA_LEVEL) >= 100) + { + PlayerBufferExecCompleted(); + } + else + { + u16 r4; + u8 taskId; + + load_gfxc_health_bar(1); + GetMonData(&gPlayerParty[r7], MON_DATA_SPECIES); // unused return value + r4 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8); + taskId = CreateTask(sub_802D924, 10); + gTasks[taskId].data[0] = r7; + gTasks[taskId].data[1] = r4; + gTasks[taskId].data[2] = gActiveBank; + gBattleBankFunc[gActiveBank] = nullsub_91; + } +} + +void PlayerHandleStatusIconUpdate(void) +{ + if (!mplay_80342A4(gActiveBank)) + { + sub_8045A5C(gHealthboxIDs[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], 9); + ewram17810[gActiveBank].unk0_4 = 0; + gBattleBankFunc[gActiveBank] = sub_802E434; + } +} + +void PlayerHandleStatusAnimation(void) +{ + if (!mplay_80342A4(gActiveBank)) + { + move_anim_start_t2_for_situation( + gBattleBufferA[gActiveBank][1], + gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8) | (gBattleBufferA[gActiveBank][4] << 16) | (gBattleBufferA[gActiveBank][5] << 24)); + gBattleBankFunc[gActiveBank] = sub_802E434; + } +} + +void PlayerHandleStatusXor(void) +{ + u8 val = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_STATUS) ^ gBattleBufferA[gActiveBank][1]; + + SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_STATUS, &val); + PlayerBufferExecCompleted(); +} + +void sub_803097C(void) +{ + PlayerBufferExecCompleted(); +} + +void PlayerHandleDMATransfer(void) +{ + u32 val1 = gBattleBufferA[gActiveBank][1] + | (gBattleBufferA[gActiveBank][2] << 8) + | (gBattleBufferA[gActiveBank][3] << 16) + | (gBattleBufferA[gActiveBank][4] << 24); + u16 val2 = gBattleBufferA[gActiveBank][5] | (gBattleBufferA[gActiveBank][6] << 8); + + const u8 *src = &gBattleBufferA[gActiveBank][7]; + u8 *dst = (u8 *)val1; + u32 size = val2; + + while (1) + { + if (size <= 0x1000) + { + DmaCopy16(3, src, dst, size); + break; + } + DmaCopy16(3, src, dst, 0x1000); + src += 0x1000; + dst += 0x1000; + size -= 0x1000; + } + PlayerBufferExecCompleted(); +} + +void sub_8030A3C(void) +{ + PlayBGM(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8)); + PlayerBufferExecCompleted(); +} + +void sub_8030A6C(void) +{ + PlayerBufferExecCompleted(); +} + +void sub_8030A78(void) +{ + dp01_build_cmdbuf_x21_a_bb(1, 0, 0); + PlayerBufferExecCompleted(); +} + +void sub_8030A8C(void) +{ + dp01_build_cmdbuf_x22_a_three_bytes(1, 0, 0); + PlayerBufferExecCompleted(); +} + +void sub_8030AA0(void) +{ + dp01_build_cmdbuf_x23_aa_0(1, 0); + PlayerBufferExecCompleted(); +} + +void sub_8030AB4(void) +{ + dp01_build_cmdbuf_x24_aa_0(1, 0); + PlayerBufferExecCompleted(); +} + +void sub_8030AC8(void) +{ + gUnknown_020238C8.unk0_0 = 0; + PlayerBufferExecCompleted(); +} + +void sub_8030AE4(void) +{ + gUnknown_020238C8.unk0_0 = gBattleBufferA[gActiveBank][1]; + PlayerBufferExecCompleted(); +} + +void sub_8030B1C(void) +{ + gUnknown_020238C8.unk0_7 = 0; + PlayerBufferExecCompleted(); +} + +void sub_8030B34(void) +{ + gUnknown_020238C8.unk0_7 ^= 1; + PlayerBufferExecCompleted(); +} + +void PlayerHandleHitAnimation(void) +{ + if (gSprites[gObjectBankIDs[gActiveBank]].invisible == TRUE) + { + PlayerBufferExecCompleted(); + } + else + { + gDoingBattleAnim = 1; + gSprites[gObjectBankIDs[gActiveBank]].data1 = 0; + sub_8047858(gActiveBank); + gBattleBankFunc[gActiveBank] = bx_blink_t1; + } +} + +void sub_8030BCC(void) +{ + PlayerBufferExecCompleted(); +} + +void PlayerHandleEffectivenessSound(void) +{ + s8 pan; + + if (GetBankSide(gActiveBank) == 0) + pan = -64; + else + pan = 63; + PlaySE12WithPanning(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8), pan); + PlayerBufferExecCompleted(); +} + +void sub_8030C1C(void) +{ + PlayFanfare(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8)); + PlayerBufferExecCompleted(); +} + +void PlayerHandleFaintingCry(void) +{ + u16 species = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES); + + PlayCry3(species, -25, 5); + PlayerBufferExecCompleted(); +} + +void PlayerHandleIntroSlide(void) +{ + sub_80E43C0(gBattleBufferA[gActiveBank][1]); + gUnknown_02024DE8 |= 1; + PlayerBufferExecCompleted(); +} + +void PlayerHandleTrainerBallThrow(void) +{ + u8 paletteNum; + u8 taskId; + + oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]); + gSprites[gObjectBankIDs[gActiveBank]].data0 = 50; + gSprites[gObjectBankIDs[gActiveBank]].data2 = -40; + gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y; + gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34; + gSprites[gObjectBankIDs[gActiveBank]].data5 = gActiveBank; + oamt_set_x3A_32(&gSprites[gObjectBankIDs[gActiveBank]], sub_8030E38); + StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 1); + paletteNum = AllocSpritePalette(0xD6F8); + LoadCompressedPalette(gTrainerBackPicPaletteTable[gSaveBlock2.playerGender].data, 0x100 + paletteNum * 16, 32); + gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = paletteNum; + taskId = CreateTask(task05_08033660, 5); + gTasks[taskId].data[0] = gActiveBank; + if (ewram17810[gActiveBank].unk0_0) + gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0; + ewram17810[4].unk9 |= 1; + gBattleBankFunc[gActiveBank] = nullsub_91; +} + +void sub_8030E38(struct Sprite *sprite) +{ + u8 r4 = sprite->data5; + + FreeSpriteOamMatrix(sprite); + FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum)); + DestroySprite(sprite); + sub_80318FC(&gPlayerParty[gBattlePartyID[r4]], r4); + StartSpriteAnim(&gSprites[gObjectBankIDs[r4]], 0); +} + +void task05_08033660(u8 taskId) +{ + if (gTasks[taskId].data[1] < 31) + { + gTasks[taskId].data[1]++; + } + else + { + u8 savedActiveBank = gActiveBank; + + gActiveBank = gTasks[taskId].data[0]; + if (!IsDoubleBattle() || (gBattleTypeFlags & 0x40)) + { + gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; + sub_802F934(gActiveBank, 0); + } + else + { + gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; + sub_802F934(gActiveBank, 0); + gActiveBank ^= 2; + gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank]; + sub_80318FC(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + sub_802F934(gActiveBank, 0); + gActiveBank ^= 2; + } + gBattleBankFunc[gActiveBank] = sub_802D500; + gActiveBank = savedActiveBank; + DestroyTask(taskId); + } +} + +void sub_8030FAC(void) +{ + if (gBattleBufferA[gActiveBank][1] != 0 && GetBankSide(gActiveBank) == 0) + { + PlayerBufferExecCompleted(); + } + else + { + ewram17810[gActiveBank].unk0_0 = 1; + gUnknown_02024E68[gActiveBank] = sub_8044804(gActiveBank, (struct BattleInterfaceStruct2 *)&gBattleBufferA[gActiveBank][4], gBattleBufferA[gActiveBank][1], gBattleBufferA[gActiveBank][2]); + ewram17810[gActiveBank].unk5 = 0; + if (gBattleBufferA[gActiveBank][2] != 0) + ewram17810[gActiveBank].unk5 = 0x5D; + gBattleBankFunc[gActiveBank] = sub_8031064; + } +} + +void sub_8031064(void) +{ + if (ewram17810[gActiveBank].unk5++ > 0x5C) + { + ewram17810[gActiveBank].unk5 = 0; + PlayerBufferExecCompleted(); + } +} + +void sub_80310A4(void) +{ + if (ewram17810[gActiveBank].unk0_0) + gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0; + PlayerBufferExecCompleted(); +} + +void sub_80310F0(void) +{ + dp11b_obj_free(gActiveBank, 1); + dp11b_obj_free(gActiveBank, 0); + PlayerBufferExecCompleted(); +} + +void PlayerHandleSpriteInvisibility(void) +{ + if (sub_8078874(gActiveBank)) + { + gSprites[gObjectBankIDs[gActiveBank]].invisible = gBattleBufferA[gActiveBank][1]; + sub_8031F88(gActiveBank); + } + PlayerBufferExecCompleted(); +} + +void PlayerHandleBattleAnimation(void) +{ + if (!mplay_80342A4(gActiveBank)) + { + u8 val2 = gBattleBufferA[gActiveBank][1]; + u16 val = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8); + + if (move_anim_start_t3(gActiveBank, gActiveBank, gActiveBank, val2, val)) + PlayerBufferExecCompleted(); + else + gBattleBankFunc[gActiveBank] = sub_802E460; + } +} + +void PlayerHandleLinkStandbyMsg(void) +{ + switch (gBattleBufferA[gActiveBank][1]) + { + case 0: + b_link_standby_message(); + // fall through + case 1: + dp11b_obj_free(gActiveBank, 1); + dp11b_obj_free(gActiveBank, 0); + break; + case 2: + b_link_standby_message(); + break; + } + PlayerBufferExecCompleted(); +} + +void PlayerHandleResetActionMoveSelection(void) +{ + switch (gBattleBufferA[gActiveBank][1]) + { + case 0: + gActionSelectionCursor[gActiveBank] = 0; + gMoveSelectionCursor[gActiveBank] = 0; + break; + case 1: + gActionSelectionCursor[gActiveBank] = 0; + break; + case 2: + gMoveSelectionCursor[gActiveBank] = 0; + break; + } + PlayerBufferExecCompleted(); +} + +void sub_80312A0(void) +{ + gBattleOutcome = gBattleBufferA[gActiveBank][1]; + FadeOutMapMusic(5); + BeginFastPaletteFade(3); + PlayerBufferExecCompleted(); + gBattleBankFunc[gActiveBank] = sub_802D18C; +} + +void nullsub_43(void) +{ +} diff --git a/src/battle_811DA74.c b/src/battle_811DA74.c index 743dd2554..42c700844 100644 --- a/src/battle_811DA74.c +++ b/src/battle_811DA74.c @@ -35,15 +35,7 @@ struct UnknownStruct3 u8 ppBonuses; }; -struct UnknownStruct5 -{ - u8 unk0_0:7; - u8 unk0_7:1; -}; - extern u16 gBattleTypeFlags; - -extern struct UnknownStruct5 gUnknown_020238C8; extern u8 gDisplayedStringBattle[]; extern u8 gBattleBufferA[][0x200]; extern u8 gActiveBank; @@ -433,6 +425,7 @@ void LinkPartnerHandleGetAttributes(void) LinkPartnerBufferExecCompleted(); } +// Duplicate of dp01_getattr_by_ch1_for_player_pokemon_ u32 dp01_getattr_by_ch1_for_player_pokemon(u8 a, u8 *buffer) { struct BattlePokemon battlePokemon; @@ -765,6 +758,7 @@ void LinkPartnerHandleSetAttributes(void) LinkPartnerBufferExecCompleted(); } +// Duplicate of dp01_setattr_by_ch1_for_player_pokemon void sub_811EC68(u8 a) { struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBank][3]; |