summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/box_party_pokemon_dropdown.s690
-rw-r--r--data/box_party_pokemon_dropdown.s18
-rw-r--r--include/box_party_pokemon_dropdown.h14
-rw-r--r--ld_script.txt4
-rw-r--r--src/box_party_pokemon_dropdown.c212
-rw-r--r--sym_ewram.txt7
6 files changed, 229 insertions, 716 deletions
diff --git a/asm/box_party_pokemon_dropdown.s b/asm/box_party_pokemon_dropdown.s
deleted file mode 100644
index 86ebbae85..000000000
--- a/asm/box_party_pokemon_dropdown.s
+++ /dev/null
@@ -1,690 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_80F7AD8
-sub_80F7AD8: @ 80F7AD8
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r6, _080F7B24 @ =gUnknown_203ABE4
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 4
- bl Alloc
- str r0, [r6]
- ldr r5, _080F7B28 @ =gUnknown_203ABE8
- movs r1, 0
- cmp r0, 0
- beq _080F7AF6
- adds r1, r4, 0
-_080F7AF6:
- strh r1, [r5]
- movs r2, 0
- cmp r2, r1
- bcs _080F7B1E
- movs r3, 0
- adds r4, r5, 0
-_080F7B02:
- ldr r0, [r6]
- lsls r1, r2, 1
- adds r1, r2
- lsls r1, 4
- adds r1, r0
- str r3, [r1, 0x18]
- adds r1, 0x2C
- strb r3, [r1]
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- ldrh r0, [r4]
- cmp r2, r0
- bcc _080F7B02
-_080F7B1E:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080F7B24: .4byte gUnknown_203ABE4
-_080F7B28: .4byte gUnknown_203ABE8
- thumb_func_end sub_80F7AD8
-
- thumb_func_start sub_80F7B2C
-sub_80F7B2C: @ 80F7B2C
- push {lr}
- ldr r0, _080F7B3C @ =gUnknown_203ABE4
- ldr r0, [r0]
- bl Free
- pop {r0}
- bx r0
- .align 2, 0
-_080F7B3C: .4byte gUnknown_203ABE4
- thumb_func_end sub_80F7B2C
-
- thumb_func_start sub_80F7B40
-sub_80F7B40: @ 80F7B40
- push {r4,r5,lr}
- movs r4, 0
- ldr r0, _080F7B78 @ =gUnknown_203ABE8
- ldrh r0, [r0]
- cmp r4, r0
- bge _080F7B70
- movs r5, 0
-_080F7B4E:
- ldr r0, _080F7B7C @ =gUnknown_203ABE4
- ldr r0, [r0]
- adds r0, r5, r0
- adds r0, 0x2C
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _080F7B64
- lsls r0, r4, 24
- lsrs r0, 24
- bl sub_80F7E54
-_080F7B64:
- adds r5, 0x30
- adds r4, 0x1
- ldr r0, _080F7B78 @ =gUnknown_203ABE8
- ldrh r0, [r0]
- cmp r4, r0
- blt _080F7B4E
-_080F7B70:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080F7B78: .4byte gUnknown_203ABE8
-_080F7B7C: .4byte gUnknown_203ABE4
- thumb_func_end sub_80F7B40
-
- thumb_func_start sub_80F7B80
-sub_80F7B80: @ 80F7B80
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- adds r4, r2, 0
- ldr r2, [sp, 0x24]
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 24
- lsrs r7, r1, 24
- lsls r3, 16
- lsrs r3, 16
- mov r10, r3
- lsls r2, 16
- lsrs r2, 16
- str r2, [sp]
- ldr r0, _080F7C18 @ =gUnknown_203ABE8
- ldrh r0, [r0]
- cmp r6, r0
- bcs _080F7C68
- ldr r0, _080F7C1C @ =gUnknown_203ABE4
- mov r9, r0
- ldr r0, [r0]
- lsls r1, r6, 1
- mov r8, r1
- adds r5, r1, r6
- lsls r5, 4
- adds r0, r5, r0
- movs r1, 0
- str r1, [r0, 0x18]
- str r4, [r0, 0x1C]
- adds r0, 0x2B
- strb r7, [r0]
- mov r2, r9
- ldr r0, [r2]
- adds r0, r5, r0
- mov r3, r10
- strh r3, [r0, 0x24]
- mov r1, sp
- ldrh r1, [r1]
- strh r1, [r0, 0x26]
- adds r0, r7, 0
- movs r1, 0x3
- bl GetBgAttribute
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- adds r0, r7, 0
- movs r1, 0x9
- bl GetBgAttribute
- lsls r0, 16
- lsrs r0, 16
- mov r2, r9
- ldr r1, [r2]
- adds r5, r1
- ldr r2, _080F7C20 @ =gUnknown_841F4B4
- lsls r4, 2
- lsls r1, r0, 4
- adds r4, r1
- adds r4, r2
- ldrh r1, [r4]
- strh r1, [r5, 0x20]
- ldrh r1, [r4, 0x2]
- strh r1, [r5, 0x22]
- mov r2, r8
- cmp r0, 0
- beq _080F7C24
- adds r1, r5, 0
- adds r1, 0x2A
- movs r0, 0x1
- b _080F7C2A
- .align 2, 0
-_080F7C18: .4byte gUnknown_203ABE8
-_080F7C1C: .4byte gUnknown_203ABE4
-_080F7C20: .4byte gUnknown_841F4B4
-_080F7C24:
- adds r1, r5, 0
- adds r1, 0x2A
- movs r0, 0x2
-_080F7C2A:
- strb r0, [r1]
- ldr r4, _080F7C78 @ =gUnknown_203ABE4
- ldr r1, [r4]
- adds r2, r6
- lsls r2, 4
- adds r1, r2, r1
- adds r0, r1, 0
- adds r0, 0x2A
- ldrb r0, [r0]
- mov r3, r10
- muls r3, r0
- movs r0, 0
- strh r3, [r1, 0x28]
- mov r3, r10
- strh r3, [r1, 0x10]
- mov r5, sp
- ldrh r5, [r5]
- strh r5, [r1, 0x12]
- strh r0, [r1, 0xC]
- strh r0, [r1, 0xE]
- strh r0, [r1, 0x14]
- strh r0, [r1, 0x16]
- adds r0, r1, 0
- adds r0, 0xC
- ldm r0!, {r3,r5,r6}
- stm r1!, {r3,r5,r6}
- ldr r0, [r4]
- adds r2, r0
- adds r2, 0x2C
- movs r0, 0x1
- strb r0, [r2]
-_080F7C68:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080F7C78: .4byte gUnknown_203ABE4
- thumb_func_end sub_80F7B80
-
- thumb_func_start sub_80F7C7C
-sub_80F7C7C: @ 80F7C7C
- push {lr}
- adds r3, r1, 0
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, _080F7CA4 @ =gUnknown_203ABE8
- ldrh r0, [r0]
- cmp r2, r0
- bcs _080F7CA0
- ldr r0, _080F7CA8 @ =gUnknown_203ABE4
- ldr r1, [r0]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 4
- adds r0, r1
- str r3, [r0, 0x18]
- adds r0, 0x2C
- movs r1, 0x1
- strb r1, [r0]
-_080F7CA0:
- pop {r0}
- bx r0
- .align 2, 0
-_080F7CA4: .4byte gUnknown_203ABE8
-_080F7CA8: .4byte gUnknown_203ABE4
- thumb_func_end sub_80F7C7C
-
- thumb_func_start sub_80F7CAC
-sub_80F7CAC: @ 80F7CAC
- push {r4,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r1, 16
- lsrs r4, r1, 16
- lsls r2, 16
- lsrs r2, 16
- ldr r0, _080F7CE0 @ =gUnknown_203ABE8
- ldrh r0, [r0]
- cmp r3, r0
- bcs _080F7CD8
- ldr r0, _080F7CE4 @ =gUnknown_203ABE4
- ldr r1, [r0]
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 4
- adds r0, r1
- strh r4, [r0, 0x14]
- strh r2, [r0, 0x16]
- adds r0, 0x2C
- movs r1, 0x1
- strb r1, [r0]
-_080F7CD8:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080F7CE0: .4byte gUnknown_203ABE8
-_080F7CE4: .4byte gUnknown_203ABE4
- thumb_func_end sub_80F7CAC
-
- thumb_func_start sub_80F7CE8
-sub_80F7CE8: @ 80F7CE8
- push {r4-r6,lr}
- ldr r4, [sp, 0x10]
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 16
- lsrs r6, r1, 16
- lsls r2, 16
- lsrs r2, 16
- lsls r3, 16
- lsrs r3, 16
- lsls r4, 16
- lsrs r4, 16
- ldr r0, _080F7D28 @ =gUnknown_203ABE8
- ldrh r0, [r0]
- cmp r5, r0
- bcs _080F7D22
- ldr r0, _080F7D2C @ =gUnknown_203ABE4
- ldr r1, [r0]
- lsls r0, r5, 1
- adds r0, r5
- lsls r0, 4
- adds r0, r1
- strh r6, [r0, 0xC]
- strh r2, [r0, 0xE]
- strh r3, [r0, 0x10]
- strh r4, [r0, 0x12]
- adds r0, 0x2C
- movs r1, 0x1
- strb r1, [r0]
-_080F7D22:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080F7D28: .4byte gUnknown_203ABE8
-_080F7D2C: .4byte gUnknown_203ABE4
- thumb_func_end sub_80F7CE8
-
- thumb_func_start sub_80F7D30
-sub_80F7D30: @ 80F7D30
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r6, r2, 24
- ldr r0, _080F7D5C @ =gUnknown_203ABE8
- ldrh r0, [r0]
- cmp r5, r0
- bcc _080F7D48
- b _080F7E4A
-_080F7D48:
- ldr r4, _080F7D60 @ =gUnknown_203ABE4
- lsls r2, r5, 1
- cmp r1, 0x5
- bls _080F7D52
- b _080F7E3C
-_080F7D52:
- lsls r0, r1, 2
- ldr r1, _080F7D64 @ =_080F7D68
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080F7D5C: .4byte gUnknown_203ABE8
-_080F7D60: .4byte gUnknown_203ABE4
-_080F7D64: .4byte _080F7D68
- .align 2, 0
-_080F7D68:
- .4byte _080F7D80
- .4byte _080F7DA0
- .4byte _080F7DC4
- .4byte _080F7DE4
- .4byte _080F7E08
- .4byte _080F7E24
-_080F7D80:
- ldr r4, _080F7D9C @ =gUnknown_203ABE4
- ldr r0, [r4]
- lsls r3, r5, 1
- adds r1, r3, r5
- lsls r1, 4
- adds r1, r0
- lsls r2, r6, 24
- asrs r2, 24
- ldrh r0, [r1, 0x14]
- adds r0, r2
- strh r0, [r1, 0x14]
- ldrh r0, [r1, 0x10]
- subs r0, r2
- b _080F7DBA
- .align 2, 0
-_080F7D9C: .4byte gUnknown_203ABE4
-_080F7DA0:
- ldr r4, _080F7DC0 @ =gUnknown_203ABE4
- ldr r0, [r4]
- lsls r3, r5, 1
- adds r1, r3, r5
- lsls r1, 4
- adds r1, r0
- lsls r2, r6, 24
- asrs r2, 24
- ldrh r0, [r1, 0xC]
- adds r0, r2
- strh r0, [r1, 0xC]
- ldrh r0, [r1, 0x10]
- adds r0, r2
-_080F7DBA:
- strh r0, [r1, 0x10]
- adds r2, r3, 0
- b _080F7E3C
- .align 2, 0
-_080F7DC0: .4byte gUnknown_203ABE4
-_080F7DC4:
- ldr r4, _080F7DE0 @ =gUnknown_203ABE4
- ldr r0, [r4]
- lsls r3, r5, 1
- adds r1, r3, r5
- lsls r1, 4
- adds r1, r0
- lsls r2, r6, 24
- asrs r2, 24
- ldrh r0, [r1, 0x16]
- adds r0, r2
- strh r0, [r1, 0x16]
- ldrh r0, [r1, 0x12]
- subs r0, r2
- b _080F7DFE
- .align 2, 0
-_080F7DE0: .4byte gUnknown_203ABE4
-_080F7DE4:
- ldr r4, _080F7E04 @ =gUnknown_203ABE4
- ldr r0, [r4]
- lsls r3, r5, 1
- adds r1, r3, r5
- lsls r1, 4
- adds r1, r0
- lsls r2, r6, 24
- asrs r2, 24
- ldrh r0, [r1, 0xE]
- subs r0, r2
- strh r0, [r1, 0xE]
- ldrh r0, [r1, 0x12]
- adds r0, r2
-_080F7DFE:
- strh r0, [r1, 0x12]
- adds r2, r3, 0
- b _080F7E3C
- .align 2, 0
-_080F7E04: .4byte gUnknown_203ABE4
-_080F7E08:
- ldr r3, _080F7E20 @ =gUnknown_203ABE4
- ldr r0, [r3]
- lsls r2, r5, 1
- adds r1, r2, r5
- lsls r1, 4
- adds r1, r0
- lsls r0, r6, 24
- asrs r0, 24
- ldrh r4, [r1, 0x14]
- adds r0, r4
- strh r0, [r1, 0x14]
- b _080F7E3A
- .align 2, 0
-_080F7E20: .4byte gUnknown_203ABE4
-_080F7E24:
- ldr r3, _080F7E50 @ =gUnknown_203ABE4
- ldr r0, [r3]
- lsls r2, r5, 1
- adds r1, r2, r5
- lsls r1, 4
- adds r1, r0
- lsls r0, r6, 24
- asrs r0, 24
- ldrh r4, [r1, 0x16]
- adds r0, r4
- strh r0, [r1, 0x16]
-_080F7E3A:
- adds r4, r3, 0
-_080F7E3C:
- ldr r0, [r4]
- adds r1, r2, r5
- lsls r1, 4
- adds r1, r0
- adds r1, 0x2C
- movs r0, 0x1
- strb r0, [r1]
-_080F7E4A:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080F7E50: .4byte gUnknown_203ABE4
- thumb_func_end sub_80F7D30
-
- thumb_func_start sub_80F7E54
-sub_80F7E54: @ 80F7E54
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- adds r6, r2, 0
- ldr r0, _080F7E94 @ =gUnknown_203ABE8
- ldrh r0, [r0]
- cmp r2, r0
- bcs _080F7E8E
- ldr r5, _080F7E98 @ =gUnknown_203ABE4
- ldr r0, [r5]
- lsls r1, r2, 1
- adds r1, r2
- lsls r4, r1, 4
- adds r0, r4, r0
- ldr r0, [r0, 0x18]
- cmp r0, 0
- beq _080F7E7C
- adds r0, r2, 0
- bl sub_80F7E9C
-_080F7E7C:
- adds r0, r6, 0
- bl sub_80F7F34
- ldr r1, [r5]
- adds r1, r4, r1
- adds r0, r1, 0
- adds r0, 0xC
- ldm r0!, {r2-r4}
- stm r1!, {r2-r4}
-_080F7E8E:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080F7E94: .4byte gUnknown_203ABE8
-_080F7E98: .4byte gUnknown_203ABE4
- thumb_func_end sub_80F7E54
-
- thumb_func_start sub_80F7E9C
-sub_80F7E9C: @ 80F7E9C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r4, _080F7F30 @ =gUnknown_203ABE4
- ldr r1, [r4]
- lsls r5, r0, 1
- adds r0, r5, r0
- lsls r0, 4
- adds r0, r1
- adds r1, r0, 0
- adds r1, 0x2A
- ldrb r3, [r1]
- ldrh r1, [r0, 0x20]
- adds r2, r3, 0
- muls r2, r1
- mov r9, r2
- movs r6, 0xA
- ldrsh r1, [r0, r6]
- mov r2, r9
- muls r2, r1
- ldr r1, [r0, 0x18]
- adds r1, r2
- movs r6, 0x8
- ldrsh r2, [r0, r6]
- muls r2, r3
- adds r7, r1, r2
- movs r6, 0
- ldrh r0, [r0, 0x6]
- cmp r6, r0
- bge _080F7F20
- mov r10, r4
-_080F7EE6:
- mov r0, r10
- ldr r1, [r0]
- mov r2, r8
- adds r4, r5, r2
- lsls r4, 4
- adds r1, r4, r1
- adds r0, r1, 0
- adds r0, 0x2B
- ldrb r0, [r0]
- ldrb r2, [r1, 0x8]
- ldrb r3, [r1, 0xA]
- adds r3, r6
- lsls r3, 24
- lsrs r3, 24
- ldrb r1, [r1, 0x4]
- str r1, [sp]
- movs r1, 0x1
- str r1, [sp, 0x4]
- adds r1, r7, 0
- bl CopyToBgTilemapBufferRect
- add r7, r9
- adds r6, 0x1
- mov r1, r10
- ldr r0, [r1]
- adds r4, r0
- ldrh r4, [r4, 0x6]
- cmp r6, r4
- blt _080F7EE6
-_080F7F20:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080F7F30: .4byte gUnknown_203ABE4
- thumb_func_end sub_80F7E9C
-
- thumb_func_start sub_80F7F34
-sub_80F7F34: @ 80F7F34
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r4, _080F7FC8 @ =gUnknown_203ABE4
- ldr r1, [r4]
- lsls r5, r0, 1
- adds r0, r5, r0
- lsls r0, 4
- adds r0, r1
- adds r1, r0, 0
- adds r1, 0x2A
- ldrb r3, [r1]
- ldrh r1, [r0, 0x24]
- adds r2, r3, 0
- muls r2, r1
- mov r9, r2
- movs r6, 0xE
- ldrsh r1, [r0, r6]
- mov r2, r9
- muls r2, r1
- ldr r1, [r0, 0x1C]
- adds r1, r2
- movs r6, 0xC
- ldrsh r2, [r0, r6]
- muls r2, r3
- adds r7, r1, r2
- movs r6, 0
- ldrh r0, [r0, 0x12]
- cmp r6, r0
- bge _080F7FB8
- mov r10, r4
-_080F7F7E:
- mov r0, r10
- ldr r1, [r0]
- mov r2, r8
- adds r4, r5, r2
- lsls r4, 4
- adds r1, r4, r1
- adds r0, r1, 0
- adds r0, 0x2B
- ldrb r0, [r0]
- ldrb r2, [r1, 0x14]
- ldrb r3, [r1, 0x16]
- adds r3, r6
- lsls r3, 24
- lsrs r3, 24
- ldrb r1, [r1, 0x10]
- str r1, [sp]
- movs r1, 0x1
- str r1, [sp, 0x4]
- adds r1, r7, 0
- bl CopyToBgTilemapBufferRect
- add r7, r9
- adds r6, 0x1
- mov r1, r10
- ldr r0, [r1]
- adds r4, r0
- ldrh r4, [r4, 0x12]
- cmp r6, r4
- blt _080F7F7E
-_080F7FB8:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080F7FC8: .4byte gUnknown_203ABE4
- thumb_func_end sub_80F7F34
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/data/box_party_pokemon_dropdown.s b/data/box_party_pokemon_dropdown.s
deleted file mode 100644
index 275b53db2..000000000
--- a/data/box_party_pokemon_dropdown.s
+++ /dev/null
@@ -1,18 +0,0 @@
-#include "constants/region_map.h"
-#include "constants/flags.h"
-#include "constants/moves.h"
- .include "asm/macros.inc"
- .include "constants/constants.inc"
- .section .rodata
- .align 2
-
-gUnknown_841F4B4:: @ 841F4B4
- .2byte 0x0100, 0x0100
- .2byte 0x0200, 0x0100
- .2byte 0x0100, 0x0200
- .2byte 0x0200, 0x0200
-
- .2byte 0x0080, 0x0080
- .2byte 0x0100, 0x0100
- .2byte 0x0200, 0x0200
- .2byte 0x0400, 0x0400
diff --git a/include/box_party_pokemon_dropdown.h b/include/box_party_pokemon_dropdown.h
new file mode 100644
index 000000000..e1ca7256f
--- /dev/null
+++ b/include/box_party_pokemon_dropdown.h
@@ -0,0 +1,14 @@
+#ifndef GUARD_BOX_PARTY_POKEMON_DROPDOWN_H
+#define GUARD_BOX_PARTY_POKEMON_DROPDOWN_H
+
+void sub_80F7AD8(u8 num);
+void sub_80F7B2C(void);
+void sub_80F7B40(void);
+void sub_80F7B80(u8 a0, u8 a1, const void * a2, u16 a3, u16 a4);
+void sub_80F7C7C(u8 a0, const void * a1);
+void sub_80F7CAC(u8 a0, u16 a1, u16 a2);
+void sub_80F7CE8(u8 a0, u16 a1, u16 a2, u16 a3, u16 a4);
+void sub_80F7D30(u8 a0, u8 a1, s8 a2);
+void sub_80F7E54(u8 a0);
+
+#endif //GUARD_BOX_PARTY_POKEMON_DROPDOWN_H
diff --git a/ld_script.txt b/ld_script.txt
index ecf5857f1..d6dec1ea3 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -222,7 +222,7 @@ SECTIONS {
src/evolution_graphics.o(.text);
src/fldeff_teleport.o(.text);
src/new_menu_helpers.o(.text);
- asm/box_party_pokemon_dropdown.o(.text);
+ src/box_party_pokemon_dropdown.o(.text);
src/save_menu_util.o(.text);
src/map_preview_screen.o(.text);
src/link_rfu_2.o(.text);
@@ -509,7 +509,7 @@ SECTIONS {
data/clear_save_data_screen.o(.rodata);
src/evolution_graphics.o(.rodata);
src/new_menu_helpers.o(.rodata);
- data/box_party_pokemon_dropdown.o(.rodata);
+ src/box_party_pokemon_dropdown.o(.rodata);
src/map_preview_screen.o(.rodata);
src/link_rfu_2.o(.rodata);
src/link_rfu_3.o(.rodata);
diff --git a/src/box_party_pokemon_dropdown.c b/src/box_party_pokemon_dropdown.c
new file mode 100644
index 000000000..3ef9f2d27
--- /dev/null
+++ b/src/box_party_pokemon_dropdown.c
@@ -0,0 +1,212 @@
+#include "global.h"
+#include "bg.h"
+#include "box_party_pokemon_dropdown.h"
+#include "malloc.h"
+
+struct UnkStruct_203ABE4_Sub
+{
+ s16 destX;
+ s16 destY;
+ u16 width;
+ u16 height;
+ s16 destX2;
+ s16 destY2;
+};
+
+struct UnkStruct_203ABE4
+{
+ struct UnkStruct_203ABE4_Sub map1rect;
+ struct UnkStruct_203ABE4_Sub map2rect;
+ const void * src1;
+ const void * src2;
+ u16 src1Height;
+ u16 src1Width;
+ u16 src2Height;
+ u16 unk_26;
+ u16 unk_28;
+ u8 mapSize;
+ u8 bgId;
+ bool8 bgUpdateScheduled;
+};
+
+static EWRAM_DATA struct UnkStruct_203ABE4 * sBoxPartyPokemonDropdownPtr = NULL;
+static EWRAM_DATA u16 sBoxPartyPokemonDropdownCount = 0;
+
+static void PushMap1(u8 a0);
+static void PushMap2(u8 a0);
+
+static const struct {
+ u16 height;
+ u16 width;
+} sBGdims[2][4] = {
+ {
+ {0x0100, 0x0100},
+ {0x0200, 0x0100},
+ {0x0100, 0x0200},
+ {0x0200, 0x0200}
+ }, {
+ {0x0080, 0x0080},
+ {0x0100, 0x0100},
+ {0x0200, 0x0200},
+ {0x0400, 0x0400}
+ }
+};
+
+void sub_80F7AD8(u8 num)
+{
+ u16 i;
+ sBoxPartyPokemonDropdownPtr = Alloc(num * sizeof(struct UnkStruct_203ABE4));
+ sBoxPartyPokemonDropdownCount = sBoxPartyPokemonDropdownPtr == NULL ? 0 : num;
+ for (i = 0; i < sBoxPartyPokemonDropdownCount; i++)
+ {
+ sBoxPartyPokemonDropdownPtr[i].src1 = NULL;
+ sBoxPartyPokemonDropdownPtr[i].bgUpdateScheduled = FALSE;
+ }
+}
+
+void sub_80F7B2C(void)
+{
+ Free(sBoxPartyPokemonDropdownPtr);
+}
+
+void sub_80F7B40(void)
+{
+ int i;
+
+ for (i = 0; i < sBoxPartyPokemonDropdownCount; i++)
+ {
+ if (sBoxPartyPokemonDropdownPtr[i].bgUpdateScheduled == 1)
+ sub_80F7E54(i);
+ }
+}
+
+void sub_80F7B80(u8 a0, u8 a1, const void * a2, u16 a3, u16 a4)
+{
+ u16 screenSize;
+ u16 bgType;
+
+ if (a0 < sBoxPartyPokemonDropdownCount)
+ {
+ sBoxPartyPokemonDropdownPtr[a0].src1 = NULL;
+ sBoxPartyPokemonDropdownPtr[a0].src2 = a2;
+ sBoxPartyPokemonDropdownPtr[a0].bgId = a1;
+ sBoxPartyPokemonDropdownPtr[a0].src2Height = a3;
+ sBoxPartyPokemonDropdownPtr[a0].unk_26 = a4;
+ screenSize = GetBgAttribute(a1, BG_ATTR_SCREENSIZE);
+ bgType = GetBgAttribute(a1, BG_ATTR_BGTYPE);
+ sBoxPartyPokemonDropdownPtr[a0].src1Height = sBGdims[bgType][screenSize].height;
+ sBoxPartyPokemonDropdownPtr[a0].src1Width = sBGdims[bgType][screenSize].width;
+ if (bgType != 0)
+ sBoxPartyPokemonDropdownPtr[a0].mapSize = 1;
+ else
+ sBoxPartyPokemonDropdownPtr[a0].mapSize = 2;
+ sBoxPartyPokemonDropdownPtr[a0].unk_28 = a3 * sBoxPartyPokemonDropdownPtr[a0].mapSize;
+ sBoxPartyPokemonDropdownPtr[a0].map2rect.width = a3;
+ sBoxPartyPokemonDropdownPtr[a0].map2rect.height = a4;
+ sBoxPartyPokemonDropdownPtr[a0].map2rect.destX = 0;
+ sBoxPartyPokemonDropdownPtr[a0].map2rect.destY = 0;
+ sBoxPartyPokemonDropdownPtr[a0].map2rect.destX2 = 0;
+ sBoxPartyPokemonDropdownPtr[a0].map2rect.destY2 = 0;
+ sBoxPartyPokemonDropdownPtr[a0].map1rect = sBoxPartyPokemonDropdownPtr[a0].map2rect;
+ sBoxPartyPokemonDropdownPtr[a0].bgUpdateScheduled = TRUE;
+ }
+}
+
+void sub_80F7C7C(u8 a0, const void * a1)
+{
+ if (a0 < sBoxPartyPokemonDropdownCount)
+ {
+ sBoxPartyPokemonDropdownPtr[a0].src1 = a1;
+ sBoxPartyPokemonDropdownPtr[a0].bgUpdateScheduled = TRUE;
+ }
+}
+
+void sub_80F7CAC(u8 a0, u16 a1, u16 a2)
+{
+ if (a0 < sBoxPartyPokemonDropdownCount)
+ {
+ sBoxPartyPokemonDropdownPtr[a0].map2rect.destX2 = a1;
+ sBoxPartyPokemonDropdownPtr[a0].map2rect.destY2 = a2;
+ sBoxPartyPokemonDropdownPtr[a0].bgUpdateScheduled = TRUE;
+ }
+}
+
+void sub_80F7CE8(u8 a0, u16 a1, u16 a2, u16 a3, u16 a4)
+{
+ if (a0 < sBoxPartyPokemonDropdownCount)
+ {
+ sBoxPartyPokemonDropdownPtr[a0].map2rect.destX = a1;
+ sBoxPartyPokemonDropdownPtr[a0].map2rect.destY = a2;
+ sBoxPartyPokemonDropdownPtr[a0].map2rect.width = a3;
+ sBoxPartyPokemonDropdownPtr[a0].map2rect.height = a4;
+ sBoxPartyPokemonDropdownPtr[a0].bgUpdateScheduled = TRUE;
+ }
+}
+
+void sub_80F7D30(u8 a0, u8 a1, s8 a2)
+{
+ if (a0 < sBoxPartyPokemonDropdownCount)
+ {
+ switch (a1)
+ {
+ case 0:
+ sBoxPartyPokemonDropdownPtr[a0].map2rect.destX2 += a2;
+ sBoxPartyPokemonDropdownPtr[a0].map2rect.width -= a2;
+ break;
+ case 1:
+ sBoxPartyPokemonDropdownPtr[a0].map2rect.destX += a2;
+ sBoxPartyPokemonDropdownPtr[a0].map2rect.width += a2;
+ break;
+ case 2:
+ sBoxPartyPokemonDropdownPtr[a0].map2rect.destY2 += a2;
+ sBoxPartyPokemonDropdownPtr[a0].map2rect.height -= a2;
+ break;
+ case 3:
+ sBoxPartyPokemonDropdownPtr[a0].map2rect.destY -= a2;
+ sBoxPartyPokemonDropdownPtr[a0].map2rect.height += a2;
+ break;
+ case 4:
+ sBoxPartyPokemonDropdownPtr[a0].map2rect.destX2 += a2;
+ break;
+ case 5:
+ sBoxPartyPokemonDropdownPtr[a0].map2rect.destY2 += a2;
+ break;
+ }
+ sBoxPartyPokemonDropdownPtr[a0].bgUpdateScheduled = TRUE;
+ }
+}
+
+void sub_80F7E54(u8 a0)
+{
+ if (a0 < sBoxPartyPokemonDropdownCount)
+ {
+ if (sBoxPartyPokemonDropdownPtr[a0].src1 != NULL)
+ PushMap1(a0);
+ PushMap2(a0);
+ sBoxPartyPokemonDropdownPtr[a0].map1rect = sBoxPartyPokemonDropdownPtr[a0].map2rect;
+ }
+}
+
+static void PushMap1(u8 a0)
+{
+ int i;
+ int r9 = sBoxPartyPokemonDropdownPtr[a0].mapSize * sBoxPartyPokemonDropdownPtr[a0].src1Height;
+ const void * addr = sBoxPartyPokemonDropdownPtr[a0].src1 + r9 * sBoxPartyPokemonDropdownPtr[a0].map1rect.destY2 + sBoxPartyPokemonDropdownPtr[a0].map1rect.destX2 * sBoxPartyPokemonDropdownPtr[a0].mapSize;
+ for (i = 0; i < sBoxPartyPokemonDropdownPtr[a0].map1rect.height; i++)
+ {
+ CopyToBgTilemapBufferRect(sBoxPartyPokemonDropdownPtr[a0].bgId, addr, sBoxPartyPokemonDropdownPtr[a0].map1rect.destX2, sBoxPartyPokemonDropdownPtr[a0].map1rect.destY2 + i, sBoxPartyPokemonDropdownPtr[a0].map1rect.width, 1);
+ addr += r9;
+ }
+}
+
+static void PushMap2(u8 a0)
+{
+ int i;
+ int r9 = sBoxPartyPokemonDropdownPtr[a0].mapSize * sBoxPartyPokemonDropdownPtr[a0].src2Height;
+ const void * addr = sBoxPartyPokemonDropdownPtr[a0].src2 + r9 * sBoxPartyPokemonDropdownPtr[a0].map2rect.destY + sBoxPartyPokemonDropdownPtr[a0].map2rect.destX * sBoxPartyPokemonDropdownPtr[a0].mapSize;
+ for (i = 0; i < sBoxPartyPokemonDropdownPtr[a0].map2rect.height; i++)
+ {
+ CopyToBgTilemapBufferRect(sBoxPartyPokemonDropdownPtr[a0].bgId, addr, sBoxPartyPokemonDropdownPtr[a0].map2rect.destX2, sBoxPartyPokemonDropdownPtr[a0].map2rect.destY2 + i, sBoxPartyPokemonDropdownPtr[a0].map2rect.width, 1);
+ addr += r9;
+ }
+}
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 140915655..b4e4fc2c0 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -321,12 +321,7 @@ gUnknown_203AB54: @ 203AB54
.include "src/new_menu_helpers.o"
.align 2
-gUnknown_203ABE4: @ 203ABE4
- .space 0x4
-
-gUnknown_203ABE8: @ 203ABE8
- .space 0x4
-
+ .include "src/box_party_pokemon_dropdown.o"
.align 2
.include "src/map_preview_screen.o"
.align 2