summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/naming_screen.s1943
-rw-r--r--asm/rom_810CBB4.s2
-rw-r--r--data/naming_screen.s103
-rw-r--r--include/field_player_avatar.h2
-rw-r--r--include/sprite.h10
-rw-r--r--ld_script.txt1
-rw-r--r--src/field_player_avatar.c4
-rw-r--r--src/menu_cursor.c32
-rw-r--r--src/naming_screen.c1115
-rw-r--r--src/rom4.c2
-rw-r--r--src/sprite.c10
11 files changed, 1074 insertions, 2150 deletions
diff --git a/asm/naming_screen.s b/asm/naming_screen.s
index 35dd88475..a2da2caf4 100644
--- a/asm/naming_screen.s
+++ b/asm/naming_screen.s
@@ -6,1949 +6,6 @@
.text
- thumb_func_start sub_80B623C
-sub_80B623C: @ 80B623C
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r3, _080B6264 @ =gUnknown_083CE250
- ldr r2, _080B6268 @ =gTasks
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- movs r2, 0x8
- ldrsh r1, [r0, r2]
- lsls r1, 2
- adds r1, r3
- ldr r1, [r1]
- bl _call_via_r1
- pop {r0}
- bx r0
- .align 2, 0
-_080B6264: .4byte gUnknown_083CE250
-_080B6268: .4byte gTasks
- thumb_func_end sub_80B623C
-
- thumb_func_start sub_80B626C
-sub_80B626C: @ 80B626C
- movs r1, 0
- strh r1, [r0, 0xA]
- bx lr
- thumb_func_end sub_80B626C
-
- thumb_func_start sub_80B6274
-sub_80B6274: @ 80B6274
- push {lr}
- adds r2, r0, 0
- movs r0, 0
- strh r0, [r2, 0xA]
- ldr r0, _080B6290 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080B6294
- movs r0, 0x5
- strh r0, [r2, 0xA]
- b _080B62C8
- .align 2, 0
-_080B6290: .4byte gMain
-_080B6294:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080B62A2
- movs r0, 0x6
- strh r0, [r2, 0xA]
- b _080B62C8
-_080B62A2:
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _080B62B0
- movs r0, 0x8
- strh r0, [r2, 0xA]
- b _080B62C8
-_080B62B0:
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _080B62C2
- movs r0, 0x9
- strh r0, [r2, 0xA]
- bl sub_80B6878
- b _080B62C8
-_080B62C2:
- adds r0, r2, 0
- bl sub_80B62CC
-_080B62C8:
- pop {r0}
- bx r0
- thumb_func_end sub_80B6274
-
- thumb_func_start sub_80B62CC
-sub_80B62CC: @ 80B62CC
- push {r4-r6,lr}
- sub sp, 0x4
- adds r5, r0, 0
- mov r4, sp
- adds r4, 0x2
- mov r0, sp
- adds r1, r4, 0
- bl sub_80B6858
- ldr r0, _080B6374 @ =gMain
- ldrh r2, [r0, 0x30]
- movs r0, 0x40
- ands r0, r2
- lsls r0, 16
- lsrs r0, 16
- negs r0, r0
- lsrs r1, r0, 31
- movs r0, 0x80
- ands r0, r2
- cmp r0, 0
- beq _080B62F8
- movs r1, 0x2
-_080B62F8:
- movs r0, 0x20
- ands r0, r2
- cmp r0, 0
- beq _080B6302
- movs r1, 0x3
-_080B6302:
- movs r0, 0x10
- ands r0, r2
- cmp r0, 0
- beq _080B630C
- movs r1, 0x4
-_080B630C:
- mov r0, sp
- ldrh r6, [r0]
- mov r2, sp
- ldr r0, _080B6378 @ =gUnknown_083CE258
- lsls r1, 1
- adds r0, r1, r0
- ldrh r3, [r0]
- adds r0, r6, r3
- strh r0, [r2]
- ldr r0, _080B637C @ =gUnknown_083CE262
- adds r1, r0
- ldrh r0, [r1]
- ldrh r1, [r4]
- adds r0, r1
- strh r0, [r4]
- mov r0, sp
- movs r2, 0
- ldrsh r0, [r0, r2]
- cmp r0, 0
- bge _080B633A
- mov r1, sp
- movs r0, 0x8
- strh r0, [r1]
-_080B633A:
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0x8
- ble _080B634A
- mov r1, sp
- movs r0, 0
- strh r0, [r1]
-_080B634A:
- lsls r0, r3, 16
- asrs r1, r0, 16
- cmp r1, 0
- beq _080B63CA
- ldr r0, _080B6380 @ =0x02000000
- ldrb r0, [r0, 0xE]
- cmp r0, 0x2
- bne _080B638A
- mov r0, sp
- ldrh r0, [r0]
- subs r0, 0x6
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- bhi _080B638A
- cmp r1, 0
- ble _080B6384
- mov r1, sp
- movs r0, 0x8
- b _080B6388
- .align 2, 0
-_080B6374: .4byte gMain
-_080B6378: .4byte gUnknown_083CE258
-_080B637C: .4byte gUnknown_083CE262
-_080B6380: .4byte 0x02000000
-_080B6384:
- mov r1, sp
- movs r0, 0x5
-_080B6388:
- strh r0, [r1]
-_080B638A:
- mov r0, sp
- movs r2, 0
- ldrsh r0, [r0, r2]
- cmp r0, 0x8
- bne _080B63AC
- ldrh r0, [r4]
- strh r0, [r5, 0xC]
- ldr r1, _080B63A8 @ =gUnknown_083CE26C
- movs r2, 0
- ldrsh r0, [r4, r2]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- b _080B63C8
- .align 2, 0
-_080B63A8: .4byte gUnknown_083CE26C
-_080B63AC:
- cmp r6, 0x8
- bne _080B63CA
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- bne _080B63BC
- ldrh r0, [r5, 0xC]
- b _080B63C8
-_080B63BC:
- ldr r0, _080B63FC @ =gUnknown_083CE274
- movs r2, 0
- ldrsh r1, [r4, r2]
- lsls r1, 1
- adds r1, r0
- ldrh r0, [r1]
-_080B63C8:
- strh r0, [r4]
-_080B63CA:
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0x8
- bne _080B6408
- movs r2, 0
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bge _080B63E0
- movs r0, 0x2
- strh r0, [r4]
-_080B63E0:
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, 0x2
- ble _080B63EC
- movs r0, 0
- strh r0, [r4]
-_080B63EC:
- movs r2, 0
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bne _080B6400
- movs r0, 0x1
- strh r0, [r5, 0xC]
- b _080B6420
- .align 2, 0
-_080B63FC: .4byte gUnknown_083CE274
-_080B6400:
- cmp r0, 0x2
- bne _080B6420
- strh r0, [r5, 0xC]
- b _080B6420
-_080B6408:
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bge _080B6414
- movs r0, 0x3
- strh r0, [r4]
-_080B6414:
- movs r2, 0
- ldrsh r0, [r4, r2]
- cmp r0, 0x3
- ble _080B6420
- movs r0, 0
- strh r0, [r4]
-_080B6420:
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r2, 0
- ldrsh r1, [r4, r2]
- bl sub_80B680C
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_80B62CC
-
- thumb_func_start sub_80B6438
-sub_80B6438: @ 80B6438
- push {lr}
- ldr r0, _080B6458 @ =sub_80B64D4
- movs r1, 0x3
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080B645C @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- movs r0, 0x3
- strh r0, [r1, 0x8]
- pop {r0}
- bx r0
- .align 2, 0
-_080B6458: .4byte sub_80B64D4
-_080B645C: .4byte gTasks
- thumb_func_end sub_80B6438
-
- thumb_func_start sub_80B6460
-sub_80B6460: @ 80B6460
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 24
- lsrs r7, r1, 24
- lsls r2, 24
- lsrs r6, r2, 24
- ldr r0, _080B6498 @ =sub_80B64D4
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _080B649C @ =gTasks
- adds r4, r1, r0
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r5, r0
- bne _080B64A0
- cmp r6, 0
- bne _080B64A0
- strh r7, [r4, 0xA]
- movs r0, 0x1
- strh r0, [r4, 0xC]
- b _080B64CC
- .align 2, 0
-_080B6498: .4byte sub_80B64D4
-_080B649C: .4byte gTasks
-_080B64A0:
- cmp r5, 0x3
- bne _080B64B0
- movs r2, 0xA
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bne _080B64B0
- cmp r6, 0
- beq _080B64CC
-_080B64B0:
- ldrh r1, [r4, 0x8]
- movs r2, 0x8
- ldrsh r0, [r4, r2]
- cmp r0, 0x3
- beq _080B64C2
- lsls r0, r1, 24
- lsrs r0, 24
- bl sub_80B65AC
-_080B64C2:
- adds r0, r4, 0
- adds r1, r5, 0
- adds r2, r7, 0
- bl sub_80B65D4
-_080B64CC:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80B6460
-
- thumb_func_start sub_80B64D4
-sub_80B64D4: @ 80B64D4
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _080B6548 @ =gTasks
- adds r4, r1, r0
- ldrh r1, [r4, 0x8]
- movs r2, 0x8
- ldrsh r0, [r4, r2]
- cmp r0, 0x3
- beq _080B6540
- movs r2, 0xC
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _080B6540
- lsls r0, r1, 24
- lsrs r0, 24
- bl sub_80B654C
- lsls r0, 16
- lsrs r0, 16
- ldrb r3, [r4, 0xE]
- adds r1, r3, 0
- adds r2, r3, 0
- bl MultiplyInvertedPaletteRGBComponents
- ldrh r1, [r4, 0x12]
- movs r2, 0x12
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _080B6520
- subs r0, r1, 0x1
- strh r0, [r4, 0x12]
- lsls r0, 16
- cmp r0, 0
- bne _080B6540
-_080B6520:
- movs r0, 0x2
- strh r0, [r4, 0x12]
- ldrh r1, [r4, 0x10]
- ldrh r2, [r4, 0xE]
- adds r0, r1, r2
- strh r0, [r4, 0xE]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x10
- beq _080B653C
- cmp r0, 0
- bne _080B6540
- ldrh r0, [r4, 0xA]
- strh r0, [r4, 0xC]
-_080B653C:
- negs r0, r1
- strh r0, [r4, 0x10]
-_080B6540:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080B6548: .4byte gTasks
- thumb_func_end sub_80B64D4
-
- thumb_func_start sub_80B654C
-sub_80B654C: @ 80B654C
- push {r4-r6,lr}
- sub sp, 0x10
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x4
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 20
- movs r1, 0x87
- lsls r1, 1
- adds r5, r1, 0
- adds r0, r5
- add r6, sp, 0x8
- strh r0, [r6]
- movs r0, 0x6
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 20
- movs r1, 0x86
- lsls r1, 1
- adds r0, r1
- mov r1, sp
- adds r1, 0xA
- strh r0, [r1]
- movs r0, 0x6
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 20
- adds r0, r5
- add r1, sp, 0xC
- strh r0, [r1]
- mov r0, sp
- adds r1, r6, 0
- movs r2, 0x6
- bl memcpy
- lsls r4, 1
- mov r1, sp
- adds r0, r1, r4
- ldrh r0, [r0]
- add sp, 0x10
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_80B654C
-
- thumb_func_start sub_80B65AC
-sub_80B65AC: @ 80B65AC
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl sub_80B654C
- lsls r0, 16
- ldr r2, _080B65CC @ =gPlttBufferFaded
- lsrs r0, 15
- adds r2, r0, r2
- ldr r1, _080B65D0 @ =gPlttBufferUnfaded
- adds r0, r1
- ldrh r0, [r0]
- strh r0, [r2]
- pop {r0}
- bx r0
- .align 2, 0
-_080B65CC: .4byte gPlttBufferFaded
-_080B65D0: .4byte gPlttBufferUnfaded
- thumb_func_end sub_80B65AC
-
- thumb_func_start sub_80B65D4
-sub_80B65D4: @ 80B65D4
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- movs r3, 0
- strh r1, [r0, 0x8]
- strh r2, [r0, 0xA]
- movs r2, 0x1
- strh r2, [r0, 0xC]
- movs r1, 0xF
- strh r1, [r0, 0xE]
- strh r2, [r0, 0x10]
- strh r3, [r0, 0x12]
- bx lr
- thumb_func_end sub_80B65D4
-
- thumb_func_start sub_80B65F0
-sub_80B65F0: @ 80B65F0
- push {r4,lr}
- ldr r4, _080B660C @ =sub_80B6630
- adds r0, r4, 0
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- bl _call_via_r4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080B660C: .4byte sub_80B6630
- thumb_func_end sub_80B65F0
-
- thumb_func_start sub_80B6610
-sub_80B6610: @ 80B6610
- push {lr}
- ldr r0, _080B6624 @ =sub_80B6630
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- beq _080B6628
- movs r0, 0
- b _080B662A
- .align 2, 0
-_080B6624: .4byte sub_80B6630
-_080B6628:
- movs r0, 0x1
-_080B662A:
- pop {r1}
- bx r1
- thumb_func_end sub_80B6610
-
- thumb_func_start sub_80B6630
-sub_80B6630: @ 80B6630
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _080B6660 @ =gUnknown_083CE27C
- ldr r2, _080B6664 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_080B6642:
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- lsls r0, 2
- adds r0, r5
- ldr r1, [r0]
- adds r0, r4, 0
- bl _call_via_r1
- lsls r0, 24
- cmp r0, 0
- bne _080B6642
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080B6660: .4byte gUnknown_083CE27C
-_080B6664: .4byte gTasks
- thumb_func_end sub_80B6630
-
- thumb_func_start sub_80B6668
-sub_80B6668: @ 80B6668
- ldr r2, _080B667C @ =0x02000000
- movs r1, 0
- strh r1, [r2, 0x4]
- strh r1, [r2, 0x6]
- ldrh r1, [r0, 0x8]
- adds r1, 0x1
- strh r1, [r0, 0x8]
- movs r0, 0
- bx lr
- .align 2, 0
-_080B667C: .4byte 0x02000000
- thumb_func_end sub_80B6668
-
- thumb_func_start sub_80B6680
-sub_80B6680: @ 80B6680
- push {r4,r5,lr}
- sub sp, 0x8
- adds r4, r0, 0
- ldr r0, _080B66E4 @ =gUnknown_083CE28C
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [sp]
- str r1, [sp, 0x4]
- ldrh r0, [r4, 0xA]
- adds r0, 0x4
- strh r0, [r4, 0xA]
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- movs r1, 0x28
- bl Sin
- ldr r5, _080B66E8 @ =0x02000000
- ldrb r1, [r5, 0xC]
- lsls r1, 2
- add r1, sp
- ldr r1, [r1]
- strh r0, [r1]
- ldrh r0, [r4, 0xA]
- adds r0, 0x80
- movs r1, 0xFF
- ands r0, r1
- movs r1, 0x28
- bl Sin
- ldrb r1, [r5, 0xD]
- lsls r1, 2
- add r1, sp
- ldr r1, [r1]
- strh r0, [r1]
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- cmp r0, 0x3F
- ble _080B66DA
- ldrb r1, [r5, 0x8]
- ldrh r0, [r5, 0xA]
- strh r0, [r5, 0x8]
- strh r1, [r5, 0xA]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_080B66DA:
- movs r0, 0
- add sp, 0x8
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_080B66E4: .4byte gUnknown_083CE28C
-_080B66E8: .4byte 0x02000000
- thumb_func_end sub_80B6680
-
- thumb_func_start sub_80B66EC
-sub_80B66EC: @ 80B66EC
- push {r4,r5,lr}
- sub sp, 0x8
- adds r4, r0, 0
- ldr r0, _080B6750 @ =gUnknown_083CE28C
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [sp]
- str r1, [sp, 0x4]
- ldrh r0, [r4, 0xA]
- adds r0, 0x4
- strh r0, [r4, 0xA]
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- movs r1, 0x28
- bl Sin
- ldr r5, _080B6754 @ =0x02000000
- ldrb r1, [r5, 0xC]
- lsls r1, 2
- add r1, sp
- ldr r1, [r1]
- strh r0, [r1]
- ldrh r0, [r4, 0xA]
- adds r0, 0x80
- movs r1, 0xFF
- ands r0, r1
- movs r1, 0x28
- bl Sin
- ldrb r1, [r5, 0xD]
- lsls r1, 2
- add r1, sp
- ldr r1, [r1]
- strh r0, [r1]
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- cmp r0, 0x7F
- ble _080B6746
- ldrb r1, [r5, 0xC]
- ldrb r0, [r5, 0xD]
- strb r0, [r5, 0xC]
- strb r1, [r5, 0xD]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_080B6746:
- movs r0, 0
- add sp, 0x8
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_080B6750: .4byte gUnknown_083CE28C
-_080B6754: .4byte 0x02000000
- thumb_func_end sub_80B66EC
-
- thumb_func_start sub_80B6758
-sub_80B6758: @ 80B6758
- push {lr}
- ldr r0, _080B6770 @ =sub_80B6630
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_080B6770: .4byte sub_80B6630
- thumb_func_end sub_80B6758
-
- thumb_func_start sub_80B6774
-sub_80B6774: @ 80B6774
- push {r4,r5,lr}
- ldr r0, _080B67E0 @ =gSpriteTemplate_83CE640
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl CreateSprite
- ldr r4, _080B67E4 @ =0x02000000
- strb r0, [r4, 0xF]
- ldr r5, _080B67E8 @ =gSprites
- ldrb r0, [r4, 0xF]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- ldrb r3, [r1, 0x5]
- movs r2, 0xD
- negs r2, r2
- adds r0, r2, 0
- ands r0, r3
- movs r3, 0x4
- orrs r0, r3
- strb r0, [r1, 0x5]
- ldrb r1, [r4, 0xF]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrb r1, [r0, 0x1]
- ands r2, r1
- orrs r2, r3
- strb r2, [r0, 0x1]
- ldrb r1, [r4, 0xF]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r1, 0x1
- strh r1, [r0, 0x3A]
- ldrb r1, [r4, 0xF]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r1, 0x2
- strh r1, [r0, 0x3A]
- movs r0, 0
- movs r1, 0
- bl sub_80B680C
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080B67E0: .4byte gSpriteTemplate_83CE640
-_080B67E4: .4byte 0x02000000
-_080B67E8: .4byte gSprites
- thumb_func_end sub_80B6774
-
- thumb_func_start sub_80B67EC
-sub_80B67EC: @ 80B67EC
- ldr r3, _080B6804 @ =gUnknown_083CE294
- lsls r0, 16
- asrs r0, 16
- ldr r1, _080B6808 @ =0x02000000
- ldrb r2, [r1, 0xE]
- lsls r1, r2, 3
- adds r1, r2
- adds r0, r1
- adds r0, r3
- ldrb r0, [r0]
- bx lr
- .align 2, 0
-_080B6804: .4byte gUnknown_083CE294
-_080B6808: .4byte 0x02000000
- thumb_func_end sub_80B67EC
-
- thumb_func_start sub_80B680C
-sub_80B680C: @ 80B680C
- push {r4-r6,lr}
- adds r5, r1, 0
- lsls r0, 16
- lsls r5, 16
- lsrs r5, 16
- ldr r1, _080B6850 @ =0x02000000
- ldrb r1, [r1, 0xF]
- lsls r4, r1, 4
- adds r4, r1
- lsls r4, 2
- ldr r1, _080B6854 @ =gSprites
- adds r4, r1
- lsrs r6, r0, 16
- asrs r0, 16
- bl sub_80B67EC
- lsls r0, 24
- lsrs r0, 21
- adds r0, 0x1B
- strh r0, [r4, 0x20]
- lsls r0, r5, 16
- asrs r0, 12
- adds r0, 0x50
- strh r0, [r4, 0x22]
- ldrh r0, [r4, 0x2E]
- strh r0, [r4, 0x32]
- ldrh r0, [r4, 0x30]
- strh r0, [r4, 0x34]
- strh r6, [r4, 0x2E]
- strh r5, [r4, 0x30]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080B6850: .4byte 0x02000000
-_080B6854: .4byte gSprites
- thumb_func_end sub_80B680C
-
- thumb_func_start sub_80B6858
-sub_80B6858: @ 80B6858
- ldr r2, _080B6870 @ =0x02000000
- ldrb r3, [r2, 0xF]
- lsls r2, r3, 4
- adds r2, r3
- lsls r2, 2
- ldr r3, _080B6874 @ =gSprites
- adds r2, r3
- ldrh r3, [r2, 0x2E]
- strh r3, [r0]
- ldrh r0, [r2, 0x30]
- strh r0, [r1]
- bx lr
- .align 2, 0
-_080B6870: .4byte 0x02000000
-_080B6874: .4byte gSprites
- thumb_func_end sub_80B6858
-
- thumb_func_start sub_80B6878
-sub_80B6878: @ 80B6878
- push {lr}
- movs r0, 0x8
- movs r1, 0x2
- bl sub_80B680C
- pop {r0}
- bx r0
- thumb_func_end sub_80B6878
-
- thumb_func_start sub_80B6888
-sub_80B6888: @ 80B6888
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _080B68CC @ =gSprites
- ldr r4, _080B68D0 @ =0x02000000
- ldrb r1, [r4, 0xF]
- lsls r2, r1, 4
- adds r2, r1
- lsls r2, 2
- adds r2, r5
- ldrh r3, [r2, 0x36]
- ldr r1, _080B68D4 @ =0xffffff00
- ands r1, r3
- strh r1, [r2, 0x36]
- ldrb r2, [r4, 0xF]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r5
- ldrh r2, [r1, 0x36]
- orrs r0, r2
- strh r0, [r1, 0x36]
- ldrb r1, [r4, 0xF]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r1, 0
- bl StartSpriteAnim
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080B68CC: .4byte gSprites
-_080B68D0: .4byte 0x02000000
-_080B68D4: .4byte 0xffffff00
- thumb_func_end sub_80B6888
-
- thumb_func_start sub_80B68D8
-sub_80B68D8: @ 80B68D8
- push {r4,r5,lr}
- lsls r0, 24
- ldr r5, _080B690C @ =gSprites
- ldr r4, _080B6910 @ =0x02000000
- ldrb r1, [r4, 0xF]
- lsls r2, r1, 4
- adds r2, r1
- lsls r2, 2
- adds r2, r5
- ldrh r3, [r2, 0x36]
- movs r1, 0xFF
- ands r1, r3
- strh r1, [r2, 0x36]
- ldrb r2, [r4, 0xF]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r5
- lsrs r0, 16
- ldrh r2, [r1, 0x36]
- orrs r0, r2
- strh r0, [r1, 0x36]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080B690C: .4byte gSprites
-_080B6910: .4byte 0x02000000
- thumb_func_end sub_80B68D8
-
- thumb_func_start sub_80B6914
-sub_80B6914: @ 80B6914
- push {lr}
- ldr r0, _080B6930 @ =0x02000000
- ldrb r1, [r0, 0xF]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _080B6934 @ =gSprites
- adds r0, r1
- movs r1, 0x1
- bl StartSpriteAnim
- pop {r0}
- bx r0
- .align 2, 0
-_080B6930: .4byte 0x02000000
-_080B6934: .4byte gSprites
- thumb_func_end sub_80B6914
-
- thumb_func_start sub_80B6938
-sub_80B6938: @ 80B6938
- ldr r2, _080B6950 @ =gSprites
- ldr r0, _080B6954 @ =0x02000000
- ldrb r1, [r0, 0xF]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- adds r0, 0x3F
- ldrb r0, [r0]
- lsls r0, 27
- lsrs r0, 31
- bx lr
- .align 2, 0
-_080B6950: .4byte gSprites
-_080B6954: .4byte 0x02000000
- thumb_func_end sub_80B6938
-
- thumb_func_start sub_80B6958
-sub_80B6958: @ 80B6958
- push {r4,r5,lr}
- sub sp, 0x8
- ldr r1, _080B6988 @ =gUnknown_083CE2AF
- mov r0, sp
- movs r2, 0x3
- bl memcpy
- add r4, sp, 0x4
- mov r5, sp
- adds r5, 0x6
- adds r0, r4, 0
- adds r1, r5, 0
- bl sub_80B6858
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, 0x7
- ble _080B698C
- movs r1, 0
- ldrsh r0, [r5, r1]
- add r0, sp
- ldrb r0, [r0]
- b _080B698E
- .align 2, 0
-_080B6988: .4byte gUnknown_083CE2AF
-_080B698C:
- movs r0, 0
-_080B698E:
- add sp, 0x8
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_80B6958
-
- thumb_func_start sub_80B6998
-sub_80B6998: @ 80B6998
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _080B69B0
- adds r0, r4, 0
- movs r1, 0
- bl StartSpriteAnim
-_080B69B0:
- ldrh r1, [r4, 0x36]
- movs r0, 0xFF
- ands r0, r1
- adds r3, r4, 0
- adds r3, 0x3E
- movs r1, 0x1
- ands r0, r1
- lsls r0, 2
- ldrb r1, [r3]
- movs r2, 0x5
- negs r2, r2
- ands r2, r1
- orrs r2, r0
- strb r2, [r3]
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0x8
- bne _080B69DA
- movs r0, 0x4
- orrs r2, r0
- strb r2, [r3]
-_080B69DA:
- ldrb r1, [r3]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- bne _080B6A0A
- movs r2, 0x36
- ldrsh r0, [r4, r2]
- movs r1, 0xFF
- lsls r1, 8
- ands r0, r1
- cmp r0, 0
- beq _080B6A0A
- movs r0, 0x2E
- ldrsh r1, [r4, r0]
- movs r2, 0x32
- ldrsh r0, [r4, r2]
- cmp r1, r0
- bne _080B6A0A
- movs r0, 0x30
- ldrsh r1, [r4, r0]
- movs r2, 0x34
- ldrsh r0, [r4, r2]
- cmp r1, r0
- beq _080B6A16
-_080B6A0A:
- movs r0, 0
- strh r0, [r4, 0x38]
- movs r0, 0x1
- strh r0, [r4, 0x3A]
- movs r0, 0x2
- strh r0, [r4, 0x3C]
-_080B6A16:
- ldrh r0, [r4, 0x3C]
- subs r0, 0x1
- strh r0, [r4, 0x3C]
- lsls r0, 16
- cmp r0, 0
- bne _080B6A3E
- ldrh r1, [r4, 0x3A]
- ldrh r2, [r4, 0x38]
- adds r0, r1, r2
- strh r0, [r4, 0x38]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x10
- beq _080B6A36
- cmp r0, 0
- bne _080B6A3A
-_080B6A36:
- negs r0, r1
- strh r0, [r4, 0x3A]
-_080B6A3A:
- movs r0, 0x2
- strh r0, [r4, 0x3C]
-_080B6A3E:
- movs r1, 0x36
- ldrsh r0, [r4, r1]
- movs r1, 0xFF
- lsls r1, 8
- ands r0, r1
- cmp r0, 0
- beq _080B6A74
- ldrh r4, [r4, 0x38]
- lsls r5, r4, 24
- lsrs r5, 24
- lsls r4, 16
- asrs r4, 17
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x5
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 4
- ldr r2, _080B6A7C @ =0x01010000
- adds r0, r2
- lsrs r0, 16
- adds r1, r4, 0
- adds r2, r5, 0
- adds r3, r5, 0
- bl MultiplyInvertedPaletteRGBComponents
-_080B6A74:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080B6A7C: .4byte 0x01010000
- thumb_func_end sub_80B6998
-
- thumb_func_start sub_80B6A80
-sub_80B6A80: @ 80B6A80
- push {r4,r5,lr}
- ldr r0, _080B6AF8 @ =gSpriteTemplate_83CE5C8
- movs r1, 0xCC
- movs r2, 0x50
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _080B6AFC @ =0x02000000
- strb r0, [r1, 0x10]
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r5, _080B6B00 @ =gSprites
- adds r4, r5
- ldr r1, _080B6B04 @ =gSubspriteTables_83CE558
- adds r0, r4, 0
- bl SetSubspriteTables
- ldr r0, _080B6B08 @ =gSpriteTemplate_83CE5F8
- movs r1, 0xCC
- movs r2, 0x4C
- movs r3, 0x1
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x3A]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r5
- ldr r1, _080B6B0C @ =gSubspriteTables_83CE560
- adds r0, r2, 0
- bl SetSubspriteTables
- ldr r0, _080B6B10 @ =gSpriteTemplate_83CE5E0
- movs r1, 0xCC
- movs r2, 0x4B
- movs r3, 0x2
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- ldrb r3, [r1, 0x5]
- movs r2, 0xD
- negs r2, r2
- ands r2, r3
- movs r3, 0x4
- orrs r2, r3
- strb r2, [r1, 0x5]
- strh r0, [r4, 0x3C]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080B6AF8: .4byte gSpriteTemplate_83CE5C8
-_080B6AFC: .4byte 0x02000000
-_080B6B00: .4byte gSprites
-_080B6B04: .4byte gSubspriteTables_83CE558
-_080B6B08: .4byte gSpriteTemplate_83CE5F8
-_080B6B0C: .4byte gSubspriteTables_83CE560
-_080B6B10: .4byte gSpriteTemplate_83CE5E0
- thumb_func_end sub_80B6A80
-
- thumb_func_start sub_80B6B14
-sub_80B6B14: @ 80B6B14
- ldr r2, _080B6B2C @ =0x02000000
- ldrb r1, [r2, 0x10]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _080B6B30 @ =gSprites
- adds r0, r1
- movs r1, 0x2
- strh r1, [r0, 0x2E]
- ldrb r1, [r2, 0xE]
- strh r1, [r0, 0x30]
- bx lr
- .align 2, 0
-_080B6B2C: .4byte 0x02000000
-_080B6B30: .4byte gSprites
- thumb_func_end sub_80B6B14
-
- thumb_func_start sub_80B6B34
-sub_80B6B34: @ 80B6B34
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r5, _080B6B58 @ =gUnknown_083CE2B4
-_080B6B3A:
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- lsls r0, 2
- adds r0, r5
- ldr r1, [r0]
- adds r0, r4, 0
- bl _call_via_r1
- lsls r0, 24
- cmp r0, 0
- bne _080B6B3A
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080B6B58: .4byte gUnknown_083CE2B4
- thumb_func_end sub_80B6B34
-
- thumb_func_start sub_80B6B5C
-sub_80B6B5C: @ 80B6B5C
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x3A
- ldrsh r0, [r4, r1]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r3, _080B6B90 @ =gSprites
- adds r1, r3
- movs r2, 0x3C
- ldrsh r0, [r4, r2]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r3
- ldr r0, _080B6B94 @ =0x02000000
- ldrb r0, [r0, 0xE]
- bl sub_80B6C48
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080B6B90: .4byte gSprites
-_080B6B94: .4byte 0x02000000
- thumb_func_end sub_80B6B5C
-
- thumb_func_start sub_80B6B98
-sub_80B6B98: @ 80B6B98
- movs r0, 0
- bx lr
- thumb_func_end sub_80B6B98
-
- thumb_func_start sub_80B6B9C
-sub_80B6B9C: @ 80B6B9C
- push {r4,r5,lr}
- adds r3, r0, 0
- movs r0, 0x3A
- ldrsh r1, [r3, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r2, _080B6C00 @ =gSprites
- adds r4, r0, r2
- movs r0, 0x3C
- ldrsh r1, [r3, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r5, r0, r2
- ldrh r0, [r4, 0x26]
- adds r0, 0x1
- strh r0, [r4, 0x26]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x7
- ble _080B6BF8
- ldrh r0, [r3, 0x2E]
- adds r0, 0x1
- strh r0, [r3, 0x2E]
- ldr r0, _080B6C04 @ =0x0000fffc
- strh r0, [r4, 0x26]
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
- ldrh r0, [r3, 0x30]
- lsls r0, 24
- lsrs r0, 24
- adds r0, 0x1
- movs r1, 0x3
- bl __modsi3
- lsls r0, 24
- lsrs r0, 24
- adds r1, r4, 0
- adds r2, r5, 0
- bl sub_80B6C48
-_080B6BF8:
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_080B6C00: .4byte gSprites
-_080B6C04: .4byte 0x0000fffc
- thumb_func_end sub_80B6B9C
-
- thumb_func_start sub_80B6C08
-sub_80B6C08: @ 80B6C08
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x3A
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _080B6C44 @ =gSprites
- adds r2, r0, r1
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r1, [r3]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r3]
- ldrh r0, [r2, 0x26]
- adds r0, 0x1
- strh r0, [r2, 0x26]
- lsls r0, 16
- cmp r0, 0
- blt _080B6C3C
- movs r0, 0
- strh r0, [r2, 0x26]
- movs r0, 0x1
- strh r0, [r4, 0x2E]
-_080B6C3C:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080B6C44: .4byte gSprites
- thumb_func_end sub_80B6C08
-
- thumb_func_start sub_80B6C48
-sub_80B6C48: @ 80B6C48
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- adds r5, r0, 0
- adds r6, r1, 0
- mov r8, r2
- lsls r5, 24
- lsrs r5, 24
- ldr r0, _080B6CA0 @ =gUnknown_083CE2C4
- lsls r4, r5, 1
- adds r0, r4, r0
- ldrh r0, [r0]
- bl IndexOfSpritePaletteTag
- lsls r0, 4
- mov r1, r8
- ldrb r2, [r1, 0x5]
- movs r1, 0xF
- ands r1, r2
- orrs r1, r0
- mov r0, r8
- strb r1, [r0, 0x5]
- ldr r0, _080B6CA4 @ =gUnknown_083CE2CA
- adds r4, r0
- ldrh r0, [r4]
- bl GetSpriteTileStartByTag
- adds r1, r6, 0
- adds r1, 0x40
- strh r0, [r1]
- adds r6, 0x42
- movs r1, 0x3F
- ands r1, r5
- ldrb r2, [r6]
- movs r0, 0x40
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r6]
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080B6CA0: .4byte gUnknown_083CE2C4
-_080B6CA4: .4byte gUnknown_083CE2CA
- thumb_func_end sub_80B6C48
-
- thumb_func_start sub_80B6CA8
-sub_80B6CA8: @ 80B6CA8
- push {r4,r5,lr}
- ldr r0, _080B6CF4 @ =gSpriteTemplate_83CE610
- movs r1, 0xCC
- movs r2, 0x6C
- movs r3, 0
- bl CreateSprite
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, _080B6CF8 @ =gSprites
- adds r0, r4
- ldr r5, _080B6CFC @ =gSubspriteTables_83CE578
- adds r1, r5, 0
- bl SetSubspriteTables
- ldr r0, _080B6D00 @ =gSpriteTemplate_83CE628
- movs r1, 0xCC
- movs r2, 0x84
- movs r3, 0
- bl CreateSprite
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- adds r1, r5, 0
- bl SetSubspriteTables
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080B6CF4: .4byte gSpriteTemplate_83CE610
-_080B6CF8: .4byte gSprites
-_080B6CFC: .4byte gSubspriteTables_83CE578
-_080B6D00: .4byte gSpriteTemplate_83CE628
- thumb_func_end sub_80B6CA8
-
- thumb_func_start sub_80B6D04
-sub_80B6D04: @ 80B6D04
- push {r4-r6,lr}
- ldr r4, _080B6D8C @ =0x02000000
- ldrh r1, [r4, 0x2]
- subs r1, 0x1
- lsls r1, 3
- adds r1, 0x4
- ldr r0, _080B6D90 @ =gSpriteTemplate_83CE658
- lsls r1, 16
- asrs r1, 16
- movs r2, 0x28
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r1, r0, 24
- ldr r3, _080B6D94 @ =gSprites
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrb r1, [r0, 0x5]
- movs r2, 0xC
- orrs r1, r2
- strb r1, [r0, 0x5]
- ldrh r0, [r4, 0x2]
- lsls r0, 3
- adds r0, 0x4
- lsls r0, 16
- lsrs r1, r0, 16
- movs r5, 0
- ldr r0, [r4, 0x34]
- ldrb r0, [r0, 0x1]
- cmp r5, r0
- bcs _080B6D86
- adds r6, r3, 0
-_080B6D4A:
- lsls r4, r1, 16
- asrs r4, 16
- ldr r0, _080B6D98 @ =gSpriteTemplate_83CE670
- adds r1, r4, 0
- movs r2, 0x2C
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r1, r0, 24
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- ldrb r1, [r0, 0x5]
- movs r2, 0xC
- orrs r1, r2
- strb r1, [r0, 0x5]
- strh r5, [r0, 0x2E]
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- adds r4, 0x8
- lsls r4, 16
- lsrs r1, r4, 16
- ldr r0, _080B6D8C @ =0x02000000
- ldr r0, [r0, 0x34]
- ldrb r0, [r0, 0x1]
- cmp r5, r0
- bcc _080B6D4A
-_080B6D86:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080B6D8C: .4byte 0x02000000
-_080B6D90: .4byte gSpriteTemplate_83CE658
-_080B6D94: .4byte gSprites
-_080B6D98: .4byte gSpriteTemplate_83CE670
- thumb_func_end sub_80B6D04
-
- thumb_func_start sub_80B6D9C
-sub_80B6D9C: @ 80B6D9C
- push {r4,lr}
- sub sp, 0x8
- adds r4, r0, 0
- ldr r1, _080B6DE4 @ =gUnknown_083CE2D0
- mov r0, sp
- movs r2, 0x8
- bl memcpy
- ldrh r1, [r4, 0x2E]
- movs r2, 0x2E
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _080B6DC0
- subs r0, r1, 0x1
- strh r0, [r4, 0x2E]
- lsls r0, 16
- cmp r0, 0
- bne _080B6DCE
-_080B6DC0:
- movs r0, 0x8
- strh r0, [r4, 0x2E]
- ldrh r0, [r4, 0x30]
- adds r0, 0x1
- movs r1, 0x3
- ands r0, r1
- strh r0, [r4, 0x30]
-_080B6DCE:
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- lsls r0, 1
- add r0, sp
- ldrh r0, [r0]
- strh r0, [r4, 0x24]
- add sp, 0x8
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080B6DE4: .4byte gUnknown_083CE2D0
- thumb_func_end sub_80B6D9C
-
- thumb_func_start sub_80B6DE8
-sub_80B6DE8: @ 80B6DE8
- push {r4,lr}
- sub sp, 0x8
- adds r4, r0, 0
- ldr r1, _080B6E10 @ =gUnknown_083CE2D8
- mov r0, sp
- movs r2, 0x8
- bl memcpy
- bl sub_80B6F44
- lsls r0, 24
- ldrh r1, [r4, 0x2E]
- lsls r1, 24
- cmp r0, r1
- beq _080B6E14
- movs r0, 0
- strh r0, [r4, 0x26]
- strh r0, [r4, 0x30]
- b _080B6E3A
- .align 2, 0
-_080B6E10: .4byte gUnknown_083CE2D8
-_080B6E14:
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- lsls r0, 1
- add r0, sp
- ldrh r0, [r0]
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x32]
- adds r0, 0x1
- strh r0, [r4, 0x32]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x8
- ble _080B6E3C
- ldrh r0, [r4, 0x30]
- adds r0, 0x1
- movs r1, 0x3
- ands r0, r1
- strh r0, [r4, 0x30]
- movs r0, 0
-_080B6E3A:
- strh r0, [r4, 0x32]
-_080B6E3C:
- add sp, 0x8
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80B6DE8
-
- thumb_func_start sub_80B6E44
-sub_80B6E44: @ 80B6E44
- push {lr}
- ldr r1, _080B6E5C @ =gUnknown_083CE2E0
- ldr r0, _080B6E60 @ =0x02000000
- ldr r0, [r0, 0x34]
- ldrb r0, [r0, 0x2]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- bl _call_via_r0
- pop {r0}
- bx r0
- .align 2, 0
-_080B6E5C: .4byte gUnknown_083CE2E0
-_080B6E60: .4byte 0x02000000
- thumb_func_end sub_80B6E44
-
- thumb_func_start nullsub_40
-nullsub_40: @ 80B6E64
- bx lr
- thumb_func_end nullsub_40
-
- thumb_func_start sub_80B6E68
-sub_80B6E68: @ 80B6E68
- push {lr}
- sub sp, 0x4
- ldr r0, _080B6EB0 @ =0x02000000
- ldrh r1, [r0, 0x3E]
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0
- bl sub_805983C
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _080B6EB4 @ =SpriteCallbackDummy
- movs r2, 0
- str r2, [sp]
- movs r2, 0x38
- movs r3, 0x18
- bl AddPseudoFieldObject
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r2, _080B6EB8 @ =gSprites
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x5]
- movs r2, 0xC
- orrs r1, r2
- strb r1, [r0, 0x5]
- movs r1, 0x4
- bl StartSpriteAnim
- add sp, 0x4
- pop {r0}
- bx r0
- .align 2, 0
-_080B6EB0: .4byte 0x02000000
-_080B6EB4: .4byte SpriteCallbackDummy
-_080B6EB8: .4byte gSprites
- thumb_func_end sub_80B6E68
-
- thumb_func_start sub_80B6EBC
-sub_80B6EBC: @ 80B6EBC
- push {r4,lr}
- ldr r0, _080B6EF0 @ =gSpriteTemplate_83CE688
- movs r1, 0x34
- movs r2, 0x18
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, _080B6EF4 @ =gSprites
- adds r4, r0
- ldr r1, _080B6EF8 @ =gSubspriteTables_83CE580
- adds r0, r4, 0
- bl SetSubspriteTables
- ldrb r0, [r4, 0x5]
- movs r1, 0xC
- orrs r0, r1
- strb r0, [r4, 0x5]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080B6EF0: .4byte gSpriteTemplate_83CE688
-_080B6EF4: .4byte gSprites
-_080B6EF8: .4byte gSubspriteTables_83CE580
- thumb_func_end sub_80B6EBC
-
- thumb_func_start sub_80B6EFC
-sub_80B6EFC: @ 80B6EFC
- push {lr}
- sub sp, 0x8
- bl sub_809D51C
- ldr r3, _080B6F38 @ =0x02000000
- ldrh r0, [r3, 0x3E]
- ldr r1, _080B6F3C @ =SpriteCallbackDummy
- movs r2, 0
- str r2, [sp]
- ldr r2, [r3, 0x44]
- str r2, [sp, 0x4]
- movs r2, 0x34
- movs r3, 0x18
- bl CreateMonIcon
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080B6F40 @ =gSprites
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r0, [r1, 0x5]
- movs r2, 0xC
- orrs r0, r2
- strb r0, [r1, 0x5]
- add sp, 0x8
- pop {r0}
- bx r0
- .align 2, 0
-_080B6F38: .4byte 0x02000000
-_080B6F3C: .4byte SpriteCallbackDummy
-_080B6F40: .4byte gSprites
- thumb_func_end sub_80B6EFC
-
- thumb_func_start sub_80B6F44
-sub_80B6F44: @ 80B6F44
- push {r4,lr}
- movs r2, 0
- ldr r1, _080B6F64 @ =0x02000000
- ldr r0, [r1, 0x34]
- ldrb r0, [r0, 0x1]
- adds r4, r1, 0
- cmp r2, r0
- bcs _080B6F72
- adds r1, 0x11
- adds r3, r0, 0
-_080B6F58:
- adds r0, r2, r1
- ldrb r0, [r0]
- cmp r0, 0xFF
- bne _080B6F68
- adds r0, r2, 0
- b _080B6F7C
- .align 2, 0
-_080B6F64: .4byte 0x02000000
-_080B6F68:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, r3
- bcc _080B6F58
-_080B6F72:
- ldr r0, [r4, 0x34]
- ldrb r0, [r0, 0x1]
- subs r0, 0x1
- lsls r0, 24
- lsrs r0, 24
-_080B6F7C:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80B6F44
-
- thumb_func_start sub_80B6F84
-sub_80B6F84: @ 80B6F84
- push {lr}
- ldr r2, _080B6FA8 @ =0x02000000
- ldr r0, [r2, 0x34]
- ldrb r0, [r0, 0x1]
- subs r0, 0x1
- lsls r1, r0, 24
- cmp r1, 0
- ble _080B6FB4
- adds r3, r2, 0
- adds r3, 0x11
-_080B6F98:
- asrs r2, r1, 24
- adds r0, r2, r3
- ldrb r0, [r0]
- cmp r0, 0xFF
- beq _080B6FAC
- lsrs r0, r1, 24
- b _080B6FB6
- .align 2, 0
-_080B6FA8: .4byte 0x02000000
-_080B6FAC:
- subs r0, r2, 0x1
- lsls r1, r0, 24
- cmp r1, 0
- bgt _080B6F98
-_080B6FB4:
- movs r0, 0
-_080B6FB6:
- pop {r1}
- bx r1
- thumb_func_end sub_80B6F84
-
- thumb_func_start sub_80B6FBC
-sub_80B6FBC: @ 80B6FBC
- push {r4,lr}
- bl sub_80B6F84
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _080B7000 @ =0x02000000
- adds r0, 0x11
- adds r4, r0
- movs r0, 0
- strb r0, [r4]
- bl sub_80B7960
- movs r0, 0xFF
- strb r0, [r4]
- bl sub_80B6958
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _080B6FEA
- cmp r0, 0x2
- bne _080B6FF4
-_080B6FEA:
- movs r0, 0x1
- movs r1, 0
- movs r2, 0x1
- bl sub_80B6460
-_080B6FF4:
- movs r0, 0x17
- bl PlaySE
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080B7000: .4byte 0x02000000
- thumb_func_end sub_80B6FBC
-
- thumb_func_start sub_80B7004
-sub_80B7004: @ 80B7004
- push {r4,r5,lr}
- sub sp, 0x4
- mov r5, sp
- adds r5, 0x2
- mov r0, sp
- adds r1, r5, 0
- bl sub_80B6858
- mov r4, sp
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- bl sub_80B67EC
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4]
- mov r0, sp
- movs r2, 0
- ldrsh r0, [r0, r2]
- movs r2, 0
- ldrsh r1, [r5, r2]
- bl sub_80B7768
- lsls r0, 24
- lsrs r0, 24
- adds r1, r0, 0
- movs r4, 0x1
- cmp r0, 0xFF
- bne _080B7046
- bl sub_80B7104
- b _080B704E
-_080B7046:
- cmp r0, 0xFE
- bne _080B7054
- bl sub_80B713C
-_080B704E:
- lsls r0, 24
- lsrs r4, r0, 24
- b _080B705A
-_080B7054:
- adds r0, r1, 0
- bl sub_80B7174
-_080B705A:
- bl sub_80B7960
- movs r0, 0x5
- bl PlaySE
- cmp r4, 0
- beq _080B7084
- bl sub_80B6F84
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _080B7080 @ =0x02000000
- ldr r1, [r1, 0x34]
- ldrb r1, [r1, 0x1]
- subs r1, 0x1
- cmp r0, r1
- bne _080B7084
- movs r0, 0x1
- b _080B7086
- .align 2, 0
-_080B7080: .4byte 0x02000000
-_080B7084:
- movs r0, 0
-_080B7086:
- add sp, 0x4
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_80B7004
-
thumb_func_start sub_80B7090
sub_80B7090: @ 80B7090
push {r4-r7,lr}
diff --git a/asm/rom_810CBB4.s b/asm/rom_810CBB4.s
index 78fb7e6ac..15e309739 100644
--- a/asm/rom_810CBB4.s
+++ b/asm/rom_810CBB4.s
@@ -2131,7 +2131,7 @@ _0810DBDC:
adds r0, r1
ldrb r1, [r0, 0x13]
movs r0, 0
- bl sub_805983C
+ bl GetRivalAvatarGraphicsIdByStateIdAndGender
lsls r0, 24
lsrs r0, 24
mov r1, sp
diff --git a/data/naming_screen.s b/data/naming_screen.s
index 4e477f4b9..b799df2bb 100644
--- a/data/naming_screen.s
+++ b/data/naming_screen.s
@@ -4,109 +4,6 @@
.section .rodata
.align 2
-gSpriteImage_83CE094:: @ 83CE094
- .incbin "graphics/naming_screen/pc_icon/0.4bpp"
-
- .align 2
-gSpriteImage_83CE154:: @ 83CE154
- .incbin "graphics/naming_screen/pc_icon/1.4bpp"
-
-@ XXX: what is this?
- .align 2
- .4byte 0x2000000
-
- .align 2
-gUnknown_083CE218:: @ 83CE218
- .4byte sub_80B5EA8
- .4byte sub_80B5ED0
- .4byte sub_80B5F00
- .4byte sub_80B5F10
- .4byte sub_80B5F38
- .4byte sub_80B5F70
- .4byte pokemon_store
- .4byte sub_80B604C
- .4byte sub_80B606C
- .4byte sub_80B6094
-
- .align 2
-gUnknown_083CE240:: @ 83CE240
- .4byte sub_80B6108
- .4byte sub_80B6148
- .4byte sub_80B6170
- .4byte sub_80B6194
-
- .align 2
-gUnknown_083CE250:: @ 83CE250
- .4byte sub_80B626C
- .4byte sub_80B6274
-
- .align 1
-gUnknown_083CE258:: @ 83CE258
- .2byte 0, 0, 0, -1, 1
-
- .align 1
-gUnknown_083CE262:: @ 83CE262
- .2byte 0, -1, 1, 0, 0
-
- .align 1
-gUnknown_083CE26C:: @ 83CE26C
- .2byte 0, 1, 1, 2
-
- .align 1
-gUnknown_083CE274:: @ 83CE274
- .2byte 0, 0, 3, 0
-
- .align 2
-gUnknown_083CE27C:: @ 83CE27C
- .4byte sub_80B6668
- .4byte sub_80B6680
- .4byte sub_80B66EC
- .4byte sub_80B6758
-
- .align 2
-gUnknown_083CE28C:: @ 83CE28C
- .4byte 0x02000006
- .4byte 0x02000004
-
-gUnknown_083CE294:: @ 83CE294
- .byte 1, 3, 5, 8, 10, 12, 14, 17, 19
- .byte 1, 3, 5, 8, 10, 12, 14, 17, 19
- .byte 1, 4, 7, 10, 13, 16, 16, 16, 19
-
-gUnknown_083CE2AF:: @ 83CE2AF
- .byte 1, 2, 3
-
- .align 2
-gUnknown_083CE2B4:: @ 83CE2B4
- .4byte sub_80B6B5C
- .4byte sub_80B6B98
- .4byte sub_80B6B9C
- .4byte sub_80B6C08
-
- .align 1
-gUnknown_083CE2C4:: @ 83CE2C4
- .2byte 1, 3, 2
-
- .align 1
-gUnknown_083CE2CA:: @ 83CE2CA
- .2byte 4, 6, 5
-
- .align 1
-gUnknown_083CE2D0:: @ 83CE2D0
- .2byte 0, -4, -2, -1
-
- .align 1
-gUnknown_083CE2D8:: @ 83CE2D8
- .2byte 2, 3, 2, 1
-
- .align 2
-gUnknown_083CE2E0:: @ 83CE2E0
- .4byte nullsub_40
- .4byte sub_80B6E68
- .4byte sub_80B6EBC
- .4byte sub_80B6EFC
-
- .align 2
gUnknown_083CE2F0:: @ 83CE2F0
.4byte sub_80B7660
.4byte sub_80B7650
diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h
index f015eb111..c273efb8b 100644
--- a/include/field_player_avatar.h
+++ b/include/field_player_avatar.h
@@ -66,7 +66,7 @@ u8 TestPlayerAvatarFlags(u8);
// GetPlayerAvatarObjectId
void sub_80597E8(void);
void sub_80597F4(void);
-u8 sub_805983C(u8 a, u8 b);
+u8 GetRivalAvatarGraphicsIdByStateIdAndGender(u8 a, u8 b);
u8 GetPlayerAvatarGraphicsIdByStateId(u8 a);
// GetPlayerAvatarGenderByGraphicsId
bool8 PartyHasMonWithSurf(void);
diff --git a/include/sprite.h b/include/sprite.h
index 13d94e9f3..447a8decb 100644
--- a/include/sprite.h
+++ b/include/sprite.h
@@ -135,7 +135,7 @@ struct Sprite
/*0x0C*/ struct SpriteFrameImage *images;
/*0x10*/ union AffineAnimCmd **affineAnims;
/*0x14*/ const struct SpriteTemplate *template;
- /*0x18*/ struct SubspriteTable *subspriteTables;
+ /*0x18*/ const struct SubspriteTable *subspriteTables;
/*0x1C*/ void (*callback)(struct Sprite *);
/*0x20*/ struct Coords16 pos1;
@@ -227,14 +227,14 @@ u16 LoadSpriteSheet(struct SpriteSheet *sheet);
void LoadSpriteSheets(struct SpriteSheet *sheets);
u16 AllocTilesForSpriteSheet(struct SpriteSheet *sheet);
void AllocTilesForSpriteSheets(struct SpriteSheet *sheets);
-void LoadTilesForSpriteSheet(struct SpriteSheet *sheet);
+void LoadTilesForSpriteSheet(const struct SpriteSheet *sheet);
void LoadTilesForSpriteSheets(struct SpriteSheet *sheets);
void FreeSpriteTilesByTag(u16 tag);
void FreeSpriteTileRanges(void);
u16 GetSpriteTileStartByTag(u16 tag);
u16 GetSpriteTileTagByTileStart(u16 start);
-void RequestSpriteSheetCopy(struct SpriteSheet *sheet);
-u16 LoadSpriteSheetDeferred(struct SpriteSheet *sheet);
+void RequestSpriteSheetCopy(const struct SpriteSheet *sheet);
+u16 LoadSpriteSheetDeferred(const struct SpriteSheet *sheet);
void FreeAllSpritePalettes(void);
u8 LoadSpritePalette(const struct SpritePalette *palette);
void LoadSpritePalettes(const struct SpritePalette *palettes);
@@ -242,7 +242,7 @@ u8 AllocSpritePalette(u16 tag);
u8 IndexOfSpritePaletteTag(u16 tag);
u16 GetSpritePaletteTagByPaletteNum(u8 paletteNum);
void FreeSpritePaletteByTag(u16 tag);
-void SetSubspriteTables(struct Sprite *sprite, struct SubspriteTable *subspriteTables);
+void SetSubspriteTables(struct Sprite *sprite, const struct SubspriteTable *subspriteTables);
bool8 AddSpriteToOamBuffer(struct Sprite *object, u8 *oamIndex);
bool8 AddSubspritesToOamBuffer(struct Sprite *sprite, struct OamData *destOam, u8 *oamIndex);
void CopyToSprites(u8 *src);
diff --git a/ld_script.txt b/ld_script.txt
index 9f5f9970d..62afdd1c7 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -365,6 +365,7 @@ SECTIONS {
data/shop.o(.rodata);
data/berry.o(.rodata);
data/script_menu.o(.rodata);
+ src/naming_screen.o(.rodata);
data/naming_screen.o(.rodata);
data/money.o(.rodata);
data/contest_effect.o(.rodata);
diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c
index 08d9c13d6..bab172152 100644
--- a/src/field_player_avatar.c
+++ b/src/field_player_avatar.c
@@ -1033,9 +1033,9 @@ void sub_80597F4(void)
}
}
-u8 sub_805983C(u8 a, u8 b)
+u8 GetRivalAvatarGraphicsIdByStateIdAndGender(u8 state, u8 gender)
{
- return sRivalAvatarGfxIds[a][b];
+ return sRivalAvatarGfxIds[state][gender];
}
static u8 GetPlayerAvatarGraphicsIdByStateIdAndGender(u8 state, u8 gender)
diff --git a/src/menu_cursor.c b/src/menu_cursor.c
index 8f1a0ac37..fa28332df 100644
--- a/src/menu_cursor.c
+++ b/src/menu_cursor.c
@@ -3,22 +3,22 @@
#include "palette.h"
#include "sprite.h"
-extern struct SpriteSheet gUnknown_0842F140[];
-extern struct SpriteSheet gUnknown_0842F1C0[];
-extern struct SpritePalette gUnknown_0842F240;
-extern struct SpritePalette gUnknown_0842F248;
-extern struct SpriteTemplate gSpriteTemplate_842F250[];
-extern struct SpriteTemplate gSpriteTemplate_842F298[];
-
-extern struct Subsprite *gUnknown_0842F5BC[];
-
-extern struct SubspriteTable gSubspriteTables_842F5C0[];
-extern struct SubspriteTable gSubspriteTables_842F6C0[];
-extern struct SubspriteTable gUnknown_0842F758[];
-
-extern struct Subsprite gUnknown_0842F780;
-extern struct Subsprite gUnknown_0842F788;
-extern struct Subsprite gUnknown_0842F790;
+extern const struct SpriteSheet gUnknown_0842F140[];
+extern const struct SpriteSheet gUnknown_0842F1C0[];
+extern const struct SpritePalette gUnknown_0842F240;
+extern const struct SpritePalette gUnknown_0842F248;
+extern const struct SpriteTemplate gSpriteTemplate_842F250[];
+extern const struct SpriteTemplate gSpriteTemplate_842F298[];
+
+extern struct Subsprite *const gUnknown_0842F5BC[];
+
+extern const struct SubspriteTable gSubspriteTables_842F5C0[];
+extern const struct SubspriteTable gSubspriteTables_842F6C0[];
+extern const struct SubspriteTable gUnknown_0842F758[];
+
+extern const struct Subsprite gUnknown_0842F780;
+extern const struct Subsprite gUnknown_0842F788;
+extern const struct Subsprite gUnknown_0842F790;
extern u16 gUnknown_0203A360[];
diff --git a/src/naming_screen.c b/src/naming_screen.c
index 91860b604..1c718b3ca 100644
--- a/src/naming_screen.c
+++ b/src/naming_screen.c
@@ -9,6 +9,7 @@
#include "string_util.h"
#include "task.h"
#include "text.h"
+#include "trig.h"
struct UnknownStruct2
{
@@ -16,7 +17,7 @@ struct UnknownStruct2
u8 unk1;
u8 unk2;
u8 unk3;
- u8 unk4;
+ u8 unk4; //mode?
u8 unk5;
u8 unk6;
u8 unk7;
@@ -25,8 +26,8 @@ struct UnknownStruct2
struct UnknownStruct1
{
- u8 unk0; //state
- u8 unk1;
+ u8 state; //state
+ u8 mode;
u16 unk2;
u16 unk4;
u16 unk6;
@@ -34,9 +35,10 @@ struct UnknownStruct1
u16 unkA;
u8 unkC;
u8 unkD;
- u8 unkE;
- u8 fillerF[2];
- u8 unk11[0x10];
+ u8 currentPage; //page?
+ u8 cursorSpriteId; //spriteId
+ u8 unk10;
+ u8 textBuffer[0x10];
u8 filler21[0x13];
/*0x34*/ const struct UnknownStruct2 *unk34;
/*0x38*/ u8 *nameBuffer;
@@ -47,15 +49,50 @@ struct UnknownStruct1
/*0x48*/ MainCallback returnCallback;
};
+enum
+{
+ NAMING_SCREEN_MODE_PLAYER_NAME,
+ NAMING_SCREEN_MODE_BOX_NAME,
+ NAMING_SCREEN_MODE_MON_NAME,
+};
+
+enum
+{
+ PAGE_UPPER,
+ PAGE_LOWER,
+ PAGE_OTHERS,
+};
+
extern u16 gKeyRepeatStartDelay;
extern u8 unk_2000000[];
#define EWRAM_000000 (*(struct UnknownStruct1 *)(unk_2000000))
+const u32 gSpriteImage_83CE094[] = INCBIN_U32("graphics/naming_screen/pc_icon/0.4bpp");
+const u32 gSpriteImage_83CE154[] = INCBIN_U32("graphics/naming_screen/pc_icon/1.4bpp");
+
+//Some unused pointer, perhaps.
+asm(".section .rodata\n\
+@ XXX: what is this?\n\
+ .align 2\n\
+ .4byte 0x2000000\n");
+
+extern u16 *const gUnknown_083CE28C[];
extern const struct UnknownStruct2 *const gUnknown_083CE398[];
-extern u8 (*const gUnknown_083CE218[])(struct Task *);
-extern u8 (*const gUnknown_083CE240[])(u8);
+extern const struct SubspriteTable gSubspriteTables_83CE558[];
+extern const struct SubspriteTable gSubspriteTables_83CE560[];
+extern const struct SubspriteTable gSubspriteTables_83CE578[];
+extern const struct SubspriteTable gSubspriteTables_83CE580[];
+extern const struct SpriteTemplate gSpriteTemplate_83CE5C8;
+extern const struct SpriteTemplate gSpriteTemplate_83CE5E0;
+extern const struct SpriteTemplate gSpriteTemplate_83CE5F8;
+extern const struct SpriteTemplate gSpriteTemplate_83CE610;
+extern const struct SpriteTemplate gSpriteTemplate_83CE628;
+extern const struct SpriteTemplate gSpriteTemplate_83CE640;
+extern const struct SpriteTemplate gSpriteTemplate_83CE658;
+extern const struct SpriteTemplate gSpriteTemplate_83CE670;
+extern const struct SpriteTemplate gSpriteTemplate_83CE688;
void C2_NamingScreen(void);
void sub_80B5AA0(void);
@@ -85,23 +122,23 @@ void sub_80B6A80(void);
void sub_80B6CA8(void);
void sub_80B6D04(void);
void sub_80B6E44(void);
-void sub_80B61D8(void);
+void InitInput(void);
void sub_80B6438(void);
void sub_80B5E50(void);
void sub_80B5E70(u8);
-void sub_80B6210(u8);
-void sub_80B68D8();
+void SetInputState(u8);
+void sub_80B68D8(u8);
u8 sub_80B60B8(void);
-u8 sub_80B6938(void);
+bool8 sub_80B6938(void);
void sub_80B6878(void);
void sub_80B6B14(void);
void sub_80B65F0(void);
-void sub_80B6888();
-void sub_80B6460();
-u8 sub_80B6610(void);
+void sub_80B6888(u8);
+void sub_80B6460(u8, u8, u8);
+bool8 sub_80B6610(void);
void sub_80B7614(void);
-void sub_80B6858();
-void sub_80B680C();
+void get_cursor_pos(s16 *, s16 *);
+void set_cursor_pos(s16, s16);
void sub_80B77F8(void);
void sub_80B74B0(void);
void sub_80B74FC(void);
@@ -109,14 +146,35 @@ u8 sub_80B6958(void);
u8 sub_80B61C8(void);
void sub_80B6FBC(void);
void sub_80B7090(void);
-u8 sub_80B61EC(void);
+u8 GetInputPressedButton(void);
u8 sub_80B7004(void);
void sub_80B6914(void);
-void sub_80B623C(u8);
+void Task_HandleInput(u8);
+void HandleDpadMovement(struct Task *);
+void sub_80B64D4(u8);
+void sub_80B65AC(u8);
+void sub_80B65D4(struct Task *, u8, u8);
+u16 sub_80B654C(u8);
+extern void MultiplyInvertedPaletteRGBComponents(u16, u8, u8, u8);
+void sub_80B6630(u8);
+void sub_80B6C48(u8, struct Sprite *, struct Sprite *);
+u8 sub_80B6F44(void);
+extern u8 GetRivalAvatarGraphicsIdByStateIdAndGender(u8, u8);
+extern u8 CreateMonIcon();
+extern void sub_809D51C(void);
+u8 sub_80B7768(s16, s16);
+u8 sub_80B7104(void);
+u8 sub_80B713C(void);
+void sub_80B7174(u8);
-void DoNamingScreen(u8 a, u8 *nameBuffer, u16 c, u16 d, u32 e, MainCallback returnCallback)
+#define NAMING_SCREEN_A_BUTTON 5
+#define NAMING_SCREEN_B_BUTTON 6
+#define NAMING_SCREEN_SELECT_BUTTON 8
+#define NAMING_SCREEN_START_BUTTON 9
+
+void DoNamingScreen(u8 mode, u8 *nameBuffer, u16 c, u16 d, u32 e, MainCallback returnCallback)
{
- AddNamingScreenTask(a, nameBuffer, c, d, e, returnCallback);
+ AddNamingScreenTask(mode, nameBuffer, c, d, e, returnCallback);
SetMainCallback2(C2_NamingScreen);
}
@@ -183,12 +241,12 @@ void sub_80B5AB8(void)
REG_BG2CNT |= EWRAM_000000.unkA;
}
-void AddNamingScreenTask(u8 a, u8 *nameBuffer, u16 c, u16 d, u32 e, MainCallback returnCallback)
+void AddNamingScreenTask(u8 mode, u8 *nameBuffer, u16 c, u16 d, u32 e, MainCallback returnCallback)
{
struct Task *task;
task = &gTasks[CreateTask(NamingScreenDummyTask, 0xFF)];
- task->data[0] = a;
+ task->data[0] = mode;
task->data[1] = c;
task->data[2] = d;
task->data[3] = e >> 16;
@@ -204,7 +262,7 @@ void GetNamingScreenParameters(void)
taskId = FindTaskIdByFunc(NamingScreenDummyTask);
task = &gTasks[taskId];
- EWRAM_000000.unk1 = task->data[0];
+ EWRAM_000000.mode = task->data[0];
EWRAM_000000.unk3E = task->data[1];
EWRAM_000000.unk40 = task->data[2];
EWRAM_000000.unk44 = (task->data[3] << 16) | (u16)task->data[4];
@@ -241,7 +299,7 @@ void NamingScreen_ClearVram(void)
{
u8 *addr = (void *)VRAM;
u32 size = 0x10000;
-
+
while (1)
{
DmaFill16(3, 0, addr, 0x1000);
@@ -285,20 +343,20 @@ void NamingScreen_SetUpVideoRegs(void)
void NamingScreen_Init(void)
{
GetNamingScreenParameters();
- EWRAM_000000.unk0 = 0;
+ EWRAM_000000.state = 0;
EWRAM_000000.unk4 = 0;
EWRAM_000000.unk6 = 0;
EWRAM_000000.unk8 = 1;
EWRAM_000000.unkA = 2;
EWRAM_000000.unkC = 0;
EWRAM_000000.unkD = 1;
- EWRAM_000000.unk34 = gUnknown_083CE398[EWRAM_000000.unk1];
- EWRAM_000000.unkE = EWRAM_000000.unk34->unk4;
+ EWRAM_000000.unk34 = gUnknown_083CE398[EWRAM_000000.mode];
+ EWRAM_000000.currentPage = EWRAM_000000.unk34->unk4;
EWRAM_000000.unk2 = 14 - EWRAM_000000.unk34->unk1 / 2;
EWRAM_000000.unk3C = gKeyRepeatStartDelay;
- memset(EWRAM_000000.unk11, 0xFF, 0x10);
+ memset(EWRAM_000000.textBuffer, 0xFF, 0x10);
if (EWRAM_000000.unk34->unk0 != 0)
- StringCopy(EWRAM_000000.unk11, EWRAM_000000.nameBuffer);
+ StringCopy(EWRAM_000000.textBuffer, EWRAM_000000.nameBuffer);
gKeyRepeatStartDelay = 16;
}
@@ -338,7 +396,7 @@ void sub_80B5E20(void)
void sub_80B5E3C(void)
{
- sub_80B61D8();
+ InitInput();
sub_80B6438();
sub_80B5E50();
}
@@ -351,16 +409,43 @@ void sub_80B5E50(void)
sub_80B5E70(taskId);
}
+//
+
+u8 sub_80B5EA8(struct Task *);
+u8 sub_80B5ED0(struct Task *);
+u8 sub_80B5F00(struct Task *);
+u8 sub_80B5F10(struct Task *);
+u8 sub_80B5F38(struct Task *);
+u8 sub_80B5F70(struct Task *);
+u8 pokemon_store(struct Task *);
+u8 sub_80B604C(struct Task *);
+u8 sub_80B606C(struct Task *);
+u8 sub_80B6094(struct Task *);
+
+static u8 (*const gUnknown_083CE218[])(struct Task *) =
+{
+ sub_80B5EA8,
+ sub_80B5ED0,
+ sub_80B5F00,
+ sub_80B5F10,
+ sub_80B5F38,
+ sub_80B5F70,
+ pokemon_store,
+ sub_80B604C,
+ sub_80B606C,
+ sub_80B6094,
+};
+
void sub_80B5E70(u8 taskId)
{
- while (gUnknown_083CE218[EWRAM_000000.unk0](&gTasks[taskId]) != 0)
+ while (gUnknown_083CE218[EWRAM_000000.state](&gTasks[taskId]) != 0)
;
}
u8 sub_80B5EA8(struct Task *task)
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
- EWRAM_000000.unk0++;
+ EWRAM_000000.state++;
return 0;
}
@@ -368,9 +453,9 @@ u8 sub_80B5ED0(struct Task *task)
{
if (!gPaletteFade.active)
{
- sub_80B6210(1);
+ SetInputState(1);
sub_80B68D8(1);
- EWRAM_000000.unk0++;
+ EWRAM_000000.state++;
}
return 0;
}
@@ -384,42 +469,42 @@ u8 sub_80B5F10(struct Task *task)
{
if (sub_80B6938() != 0)
{
- sub_80B6210(1);
+ SetInputState(1);
sub_80B6878();
- EWRAM_000000.unk0 = 2;
+ EWRAM_000000.state = 2;
}
return 0;
}
u8 sub_80B5F38(struct Task *task)
{
- sub_80B6210(0);
+ SetInputState(0);
sub_80B6B14();
sub_80B65F0();
sub_80B6888(1);
sub_80B6460(0, 0, 1);
PlaySE(SE_WIN_OPEN);
- EWRAM_000000.unk0 = 5;
+ EWRAM_000000.state = 5;
return 0;
}
u8 sub_80B5F70(struct Task *task)
{
- s16 var1;
- s16 var2;
+ s16 cursorX;
+ s16 cursorY;
- if (sub_80B6610() != 0)
+ if (sub_80B6610())
{
- EWRAM_000000.unk0 = 2;
- EWRAM_000000.unkE++;
- EWRAM_000000.unkE %= 3;
+ EWRAM_000000.state = 2;
+ EWRAM_000000.currentPage++;
+ EWRAM_000000.currentPage %= 3;
sub_80B7614();
sub_80B77F8();
- sub_80B6210(1);
- sub_80B6858(&var1, &var2);
- if (EWRAM_000000.unkE == 2 && (u16)(var1 - 6) <= 1)
- var1 = 5;
- sub_80B680C(var1, var2);
+ SetInputState(1);
+ get_cursor_pos(&cursorX, &cursorY);
+ if (EWRAM_000000.currentPage == PAGE_OTHERS && (cursorX == 6 || cursorX == 7))
+ cursorX = 5;
+ set_cursor_pos(cursorX, cursorY);
sub_80B6888(0);
}
return 0;
@@ -428,19 +513,20 @@ u8 sub_80B5F70(struct Task *task)
u8 pokemon_store(struct Task *task)
{
sub_80B74B0();
- sub_80B6210(0);
+ SetInputState(0);
sub_80B68D8(0);
sub_80B6460(3, 0, 1);
gKeyRepeatStartDelay = EWRAM_000000.unk3C;
- if (EWRAM_000000.unk1 == 2 && CalculatePlayerPartyCount() > 5)
+ if (EWRAM_000000.mode == NAMING_SCREEN_MODE_MON_NAME
+ && CalculatePlayerPartyCount() > 5)
{
sub_80B74FC();
- EWRAM_000000.unk0 = 7;
+ EWRAM_000000.state = 7;
return 0;
}
else
{
- EWRAM_000000.unk0 = 8;
+ EWRAM_000000.state = 8;
return 1;
}
}
@@ -448,14 +534,14 @@ u8 pokemon_store(struct Task *task)
u8 sub_80B604C(struct Task *task)
{
if (MenuUpdateWindowText())
- EWRAM_000000.unk0++;
+ EWRAM_000000.state++;
return 0;
}
u8 sub_80B606C(struct Task *task)
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
- EWRAM_000000.unk0++;
+ EWRAM_000000.state++;
return 0;
}
@@ -466,24 +552,37 @@ u8 sub_80B6094(struct Task *task)
return 0;
}
+u8 sub_80B6108(u8);
+u8 sub_80B6148(u8);
+u8 sub_80B6170(u8);
+u8 sub_80B6194(u8);
+
+static u8 (*const gUnknown_083CE240[])(u8) =
+{
+ sub_80B6108,
+ sub_80B6148,
+ sub_80B6170,
+ sub_80B6194,
+};
+
u8 sub_80B60B8(void)
{
- u8 var = sub_80B61EC();
+ u8 button = GetInputPressedButton();
u8 r0 = sub_80B6958();
- if (var == 8)
+ if (button == 8)
return sub_80B61C8();
- else if (var == 6)
+ else if (button == 6)
{
sub_80B6FBC();
return 0;
}
- else if (var == 7)
+ else if (button == 7)
{
sub_80B7090();
return 0;
}
- return gUnknown_083CE240[r0](var);
+ return gUnknown_083CE240[r0](button);
}
u8 sub_80B6108(u8 a)
@@ -496,8 +595,8 @@ u8 sub_80B6108(u8 a)
sub_80B6914();
if (var != 0)
{
- sub_80B6210(0);
- EWRAM_000000.unk0 = 3;
+ SetInputState(0);
+ EWRAM_000000.state = 3;
}
}
return 0;
@@ -526,7 +625,7 @@ u8 sub_80B6194(u8 a)
if (a == 5)
{
PlaySE(SE_SELECT);
- EWRAM_000000.unk0 = 6;
+ EWRAM_000000.state = 6;
return 1;
}
else
@@ -535,25 +634,895 @@ u8 sub_80B6194(u8 a)
u8 sub_80B61C8(void)
{
- EWRAM_000000.unk0 = 4;
+ EWRAM_000000.state = 4;
return 1;
}
-void sub_80B61D8(void)
+//--------------------------------------------------
+// Input handling
+//--------------------------------------------------
+
+enum
+{
+ FNKEY_CASE,
+ FNKEY_BACK,
+ FNKEY_OK,
+};
+
+#define tState data[0]
+#define tPressedButton data[1]
+#define tKbFunctionKey data[2]
+
+void InitInput(void)
+{
+ CreateTask(Task_HandleInput, 1);
+}
+
+u8 GetInputPressedButton(void)
+{
+ u8 taskId = FindTaskIdByFunc(Task_HandleInput);
+
+ return gTasks[taskId].tPressedButton;
+}
+
+void SetInputState(u8 state)
+{
+ u8 taskId = FindTaskIdByFunc(Task_HandleInput);
+
+ gTasks[taskId].tState = state;
+}
+
+static void sub_80B626C(struct Task *);
+static void sub_80B6274(struct Task *);
+
+static void (*const sInputStateHandlers[])(struct Task *) =
+{
+ sub_80B626C,
+ sub_80B6274,
+};
+
+void Task_HandleInput(u8 taskId)
+{
+ sInputStateHandlers[gTasks[taskId].tState](&gTasks[taskId]);
+}
+
+static void sub_80B626C(struct Task *task)
+{
+ task->tPressedButton = 0;
+}
+
+static void sub_80B6274(struct Task *task)
+{
+ task->tPressedButton = 0;
+ if (gMain.newKeys & A_BUTTON)
+ {
+ task->tPressedButton = 5;
+ return;
+ }
+ if (gMain.newKeys & B_BUTTON)
+ {
+ task->tPressedButton = 6;
+ return;
+ }
+ if (gMain.newKeys & SELECT_BUTTON)
+ {
+ task->tPressedButton = 8;
+ return;
+ }
+ if (gMain.newKeys & START_BUTTON)
+ {
+ task->tPressedButton = 9;
+ sub_80B6878();
+ return;
+ }
+ HandleDpadMovement(task);
+}
+
+static const s16 sDpadDeltaX[] =
+{
+ 0, //none
+ 0, //up
+ 0, //down
+ -1, //left
+ 1 //right
+};
+
+static const s16 sDpadDeltaY[] =
+{
+ 0, //none
+ -1, //up
+ 1, //down
+ 0, //left
+ 0 //right
+};
+
+static const s16 s4RowTo3RowTableY[] = {0, 1, 1, 2};
+static const s16 gUnknown_083CE274[] = {0, 0, 3, 0};
+
+void HandleDpadMovement(struct Task *task)
+{
+ s16 cursorX;
+ s16 cursorY;
+ u16 dpadDir;
+ s16 prevCursorX;
+
+ get_cursor_pos(&cursorX, &cursorY);
+ dpadDir = 0;
+ if (gMain.newAndRepeatedKeys & DPAD_UP)
+ dpadDir = 1;
+ if (gMain.newAndRepeatedKeys & DPAD_DOWN)
+ dpadDir = 2;
+ if (gMain.newAndRepeatedKeys & DPAD_LEFT)
+ dpadDir = 3;
+ if (gMain.newAndRepeatedKeys & DPAD_RIGHT)
+ dpadDir = 4;
+
+ //Get new cursor position
+ prevCursorX = cursorX;
+ cursorX += sDpadDeltaX[dpadDir];
+ cursorY += sDpadDeltaY[dpadDir];
+
+ //Wrap cursor position in the X direction
+ if (cursorX < 0)
+ cursorX = 8;
+ if (cursorX > 8)
+ cursorX = 0;
+
+ //Handle cursor movement in X direction
+ if (sDpadDeltaX[dpadDir] != 0)
+ {
+ //The "others" page only has 5 columns
+ if (EWRAM_000000.currentPage == PAGE_OTHERS && (cursorX == 6 || cursorX == 7))
+ {
+ if (sDpadDeltaX[dpadDir] > 0)
+ cursorX = 8;
+ else
+ cursorX = 5;
+ }
+
+ if (cursorX == 8)
+ {
+ //We are now on the last column
+ task->tKbFunctionKey = cursorY;
+ cursorY = s4RowTo3RowTableY[cursorY];
+ }
+ else if (prevCursorX == 8)
+ {
+ if (cursorY == 1)
+ cursorY = task->tKbFunctionKey;
+ else
+ cursorY = gUnknown_083CE274[cursorY];
+ }
+ }
+
+ if (cursorX == 8)
+ {
+ //There are only 3 keys on the last column, unlike the others,
+ //so wrap Y accordingly
+ if (cursorY < 0)
+ cursorY = 2;
+ if (cursorY > 2)
+ cursorY = 0;
+ if (cursorY == 0)
+ task->tKbFunctionKey = FNKEY_BACK;
+ else if (cursorY == 2)
+ task->tKbFunctionKey = FNKEY_OK;
+ }
+ else
+ {
+ if (cursorY < 0)
+ cursorY = 3;
+ if (cursorY > 3)
+ cursorY = 0;
+ }
+ set_cursor_pos(cursorX, cursorY);
+}
+
+#undef tState
+#undef tPressedButton
+#undef tKbFunctionKey
+
+//--------------------------------------------------
+
+void sub_80B6438(void)
+{
+ u8 taskId;
+
+ taskId = CreateTask(sub_80B64D4, 3);
+ gTasks[taskId].data[0] = 3;
+}
+
+void sub_80B6460(u8 a, u8 b, u8 c)
+{
+ struct Task *task;
+
+ task = &gTasks[FindTaskIdByFunc(sub_80B64D4)];
+ if (a == task->data[0] && c == 0)
+ {
+ task->data[1] = b;
+ task->data[2] = 1;
+ return;
+ }
+ if (a == 3 && task->data[1] == 0 && c == 0)
+ return;
+ if (task->data[0] != 3)
+ sub_80B65AC(task->data[0]);
+ sub_80B65D4(task, a, b);
+}
+
+void sub_80B64D4(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ if (task->data[0] == 3 || task->data[2] == 0)
+ return;
+ MultiplyInvertedPaletteRGBComponents(sub_80B654C(task->data[0]), task->data[3], task->data[3], task->data[3]);
+ if (task->data[5] != 0)
+ {
+ task->data[5]--;
+ if (task->data[5] != 0)
+ return;
+ }
+ task->data[5] = 2;
+ task->data[3] += task->data[4];
+ if (task->data[3] == 16)
+ task->data[4] = -task->data[4];
+ else if (task->data[3] == 0)
+ {
+ task->data[2] = task->data[1];
+ task->data[4] = -task->data[4];
+ }
+}
+
+u16 sub_80B654C(u8 a)
+{
+ const u16 arr[] =
+ {
+ IndexOfSpritePaletteTag(4) * 16 + 0x10E,
+ IndexOfSpritePaletteTag(6) * 16 + 0x10C,
+ IndexOfSpritePaletteTag(6) * 16 + 0x10E,
+ };
+
+ return arr[a];
+}
+
+void sub_80B65AC(u8 a)
+{
+ u16 index = sub_80B654C(a);
+
+ gPlttBufferFaded[index] = gPlttBufferUnfaded[index];
+}
+
+void sub_80B65D4(struct Task *task, u8 b, u8 c)
+{
+ task->data[0] = b;
+ task->data[1] = c;
+ task->data[2] = 1;
+ task->data[3] = 15;
+ task->data[4] = 1;
+ task->data[5] = 0;
+}
+
+//
+
+u8 sub_80B6668(struct Task *);
+u8 sub_80B6680(struct Task *);
+u8 sub_80B66EC(struct Task *);
+u8 sub_80B6758(struct Task *);
+
+u8 (*const gUnknown_083CE27C[])(struct Task *) =
+{
+ sub_80B6668,
+ sub_80B6680,
+ sub_80B66EC,
+ sub_80B6758,
+};
+
+void sub_80B65F0(void)
+{
+ u8 taskId;
+
+ taskId = CreateTask(sub_80B6630, 0);
+ sub_80B6630(taskId);
+}
+
+bool8 sub_80B6610(void)
{
- CreateTask(sub_80B623C, 1);
+ if (FindTaskIdByFunc(sub_80B6630) == 0xFF)
+ return TRUE;
+ else
+ return FALSE;
}
-u8 sub_80B61EC(void)
+void sub_80B6630(u8 taskId)
{
- u8 taskId = FindTaskIdByFunc(sub_80B623C);
+ while (gUnknown_083CE27C[gTasks[taskId].data[0]](&gTasks[taskId]) != 0)
+ ;
+}
+
+u8 sub_80B6668(struct Task *task)
+{
+ EWRAM_000000.unk4 = 0;
+ EWRAM_000000.unk6 = 0;
+ task->data[0]++;
+ return 0;
+}
+
+u8 sub_80B6680(struct Task *task)
+{
+ u16 *const arr[] = {&EWRAM_000000.unk6, &EWRAM_000000.unk4};
- return gTasks[taskId].data[1];
+ task->data[1] += 4;
+ *arr[EWRAM_000000.unkC] = Sin(task->data[1], 0x28);
+ *arr[EWRAM_000000.unkD] = Sin((task->data[1] + 0x80) & 0xFF, 0x28);
+ if (task->data[1] > 0x3F)
+ {
+ u8 temp = EWRAM_000000.unk8; //Why u8 and not u16?
+
+ EWRAM_000000.unk8 = EWRAM_000000.unkA;
+ EWRAM_000000.unkA = temp;
+ task->data[0]++;
+ }
+ return 0;
}
-void sub_80B6210(u8 a)
+u8 sub_80B66EC(struct Task *task)
{
- u8 taskId = FindTaskIdByFunc(sub_80B623C);
+ u16 *const arr[] = {&EWRAM_000000.unk6, &EWRAM_000000.unk4};
- gTasks[taskId].data[0] = a;
+ task->data[1] += 4;
+ *arr[EWRAM_000000.unkC] = Sin(task->data[1], 0x28);
+ *arr[EWRAM_000000.unkD] = Sin((task->data[1] + 0x80) & 0xFF, 0x28);
+ if (task->data[1] > 0x7F)
+ {
+ u8 temp = EWRAM_000000.unkC;
+
+ EWRAM_000000.unkC = EWRAM_000000.unkD;
+ EWRAM_000000.unkD = temp;
+ task->data[0]++;
+ }
+ return 0;
+}
+
+u8 sub_80B6758(struct Task *task)
+{
+ DestroyTask(FindTaskIdByFunc(sub_80B6630));
+ return 0;
+}
+
+//
+
+void sub_80B6774(void)
+{
+ EWRAM_000000.cursorSpriteId = CreateSprite(&gSpriteTemplate_83CE640, 0, 0, 0);
+ gSprites[EWRAM_000000.cursorSpriteId].oam.priority = 1;
+ gSprites[EWRAM_000000.cursorSpriteId].oam.objMode = 1;
+ gSprites[EWRAM_000000.cursorSpriteId].data6 = 1;
+ gSprites[EWRAM_000000.cursorSpriteId].data6 = 2;
+ set_cursor_pos(0, 0);
+}
+
+static const u8 sKeyboardSymbolPositions[][9] =
+{
+ {1, 3, 5, 8, 10, 12, 14, 17, 19}, //Upper page
+ {1, 3, 5, 8, 10, 12, 14, 17, 19}, //Lower page
+ {1, 4, 7, 10, 13, 16, 16, 16, 19}, //Others page
+};
+
+u8 sub_80B67EC(s16 x)
+{
+ return sKeyboardSymbolPositions[EWRAM_000000.currentPage][x];
+}
+
+void set_cursor_pos(s16 x, s16 y)
+{
+ struct Sprite *sprite = &gSprites[EWRAM_000000.cursorSpriteId];
+
+ sprite->pos1.x = sub_80B67EC(x) * 8 + 27;
+ sprite->pos1.y = y * 16 + 80;
+ sprite->data2 = sprite->data0;
+ sprite->data3 = sprite->data1;
+ sprite->data0 = x;
+ sprite->data1 = y;
+}
+
+void get_cursor_pos(s16 *x, s16 *y)
+{
+ struct Sprite *sprite = &gSprites[EWRAM_000000.cursorSpriteId];
+
+ *x = sprite->data0;
+ *y = sprite->data1;
+}
+
+void sub_80B6878(void)
+{
+ set_cursor_pos(8, 2);
+}
+
+void sub_80B6888(u8 a)
+{
+ gSprites[EWRAM_000000.cursorSpriteId].data4 &= -256;
+ gSprites[EWRAM_000000.cursorSpriteId].data4 |= a;
+ StartSpriteAnim(&gSprites[EWRAM_000000.cursorSpriteId], 0);
+}
+
+void sub_80B68D8(u8 a)
+{
+ gSprites[EWRAM_000000.cursorSpriteId].data4 &= 0xFF;
+ gSprites[EWRAM_000000.cursorSpriteId].data4 |= a << 8;
+}
+
+void sub_80B6914(void)
+{
+ StartSpriteAnim(&gSprites[EWRAM_000000.cursorSpriteId], 1);
+}
+
+bool8 sub_80B6938(void)
+{
+ return gSprites[EWRAM_000000.cursorSpriteId].animEnded;
+}
+
+u8 sub_80B6958(void)
+{
+ const u8 arr[] = {1, 2, 3};
+ s16 var1;
+ s16 var2;
+
+ get_cursor_pos(&var1, &var2);
+ if (var1 < 8)
+ return 0;
+ else
+ return arr[var2];
+}
+
+#ifdef NONMATCHING
+void sub_80B6998(struct Sprite *sprite)
+{
+ if (sprite->animEnded)
+ StartSpriteAnim(sprite, 0);
+ sprite->invisible = (sprite->data4 & 0xFF);
+ if (sprite->data0 == 8)
+ sprite->invisible = TRUE;
+ if (sprite->invisible || (sprite->data4 & 0xFF00) == 0
+ || sprite->data0 != sprite->data2 || sprite->data1 != sprite->data3)
+ {
+ sprite->data5 = 0;
+ sprite->data6 = 1;
+ sprite->data7 = 2;
+ }
+ sprite->data7--;
+ if (sprite->data7 == 0)
+ {
+ sprite->data5 += sprite->data6;
+ if (sprite->data5 == 16 || sprite->data5 == 0)
+ sprite->data6 = -sprite->data6;
+ sprite->data7 = 2;
+ }
+ //_080B6A3E
+ if ((sprite->data4 & 0xFF00) != 0)
+ {
+ //Can't get this part to match
+ u16 var = sprite->data5;
+ s8 r5 = var;
+ s16 var2 = var / 2;
+ s8 r4 = var2;
+ u16 index = IndexOfSpritePaletteTag(5) * 16 + 0x0101;
+
+ MultiplyInvertedPaletteRGBComponents(index, r4, r5, r5);
+ }
+}
+#else
+__attribute__((naked))
+void sub_80B6998(struct Sprite *sprite)
+{
+ asm(".syntax unified\n\
+ push {r4,r5,lr}\n\
+ adds r4, r0, 0\n\
+ adds r0, 0x3F\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x10\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080B69B0\n\
+ adds r0, r4, 0\n\
+ movs r1, 0\n\
+ bl StartSpriteAnim\n\
+_080B69B0:\n\
+ ldrh r1, [r4, 0x36]\n\
+ movs r0, 0xFF\n\
+ ands r0, r1\n\
+ adds r3, r4, 0\n\
+ adds r3, 0x3E\n\
+ movs r1, 0x1\n\
+ ands r0, r1\n\
+ lsls r0, 2\n\
+ ldrb r1, [r3]\n\
+ movs r2, 0x5\n\
+ negs r2, r2\n\
+ ands r2, r1\n\
+ orrs r2, r0\n\
+ strb r2, [r3]\n\
+ movs r1, 0x2E\n\
+ ldrsh r0, [r4, r1]\n\
+ cmp r0, 0x8\n\
+ bne _080B69DA\n\
+ movs r0, 0x4\n\
+ orrs r2, r0\n\
+ strb r2, [r3]\n\
+_080B69DA:\n\
+ ldrb r1, [r3]\n\
+ movs r0, 0x4\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _080B6A0A\n\
+ movs r2, 0x36\n\
+ ldrsh r0, [r4, r2]\n\
+ movs r1, 0xFF\n\
+ lsls r1, 8\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080B6A0A\n\
+ movs r0, 0x2E\n\
+ ldrsh r1, [r4, r0]\n\
+ movs r2, 0x32\n\
+ ldrsh r0, [r4, r2]\n\
+ cmp r1, r0\n\
+ bne _080B6A0A\n\
+ movs r0, 0x30\n\
+ ldrsh r1, [r4, r0]\n\
+ movs r2, 0x34\n\
+ ldrsh r0, [r4, r2]\n\
+ cmp r1, r0\n\
+ beq _080B6A16\n\
+_080B6A0A:\n\
+ movs r0, 0\n\
+ strh r0, [r4, 0x38]\n\
+ movs r0, 0x1\n\
+ strh r0, [r4, 0x3A]\n\
+ movs r0, 0x2\n\
+ strh r0, [r4, 0x3C]\n\
+_080B6A16:\n\
+ ldrh r0, [r4, 0x3C]\n\
+ subs r0, 0x1\n\
+ strh r0, [r4, 0x3C]\n\
+ lsls r0, 16\n\
+ cmp r0, 0\n\
+ bne _080B6A3E\n\
+ ldrh r1, [r4, 0x3A]\n\
+ ldrh r2, [r4, 0x38]\n\
+ adds r0, r1, r2\n\
+ strh r0, [r4, 0x38]\n\
+ lsls r0, 16\n\
+ asrs r0, 16\n\
+ cmp r0, 0x10\n\
+ beq _080B6A36\n\
+ cmp r0, 0\n\
+ bne _080B6A3A\n\
+_080B6A36:\n\
+ negs r0, r1\n\
+ strh r0, [r4, 0x3A]\n\
+_080B6A3A:\n\
+ movs r0, 0x2\n\
+ strh r0, [r4, 0x3C]\n\
+_080B6A3E:\n\
+ movs r1, 0x36\n\
+ ldrsh r0, [r4, r1]\n\
+ movs r1, 0xFF\n\
+ lsls r1, 8\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080B6A74\n\
+ ldrh r4, [r4, 0x38]\n\
+ lsls r5, r4, 24\n\
+ lsrs r5, 24\n\
+ lsls r4, 16\n\
+ asrs r4, 17\n\
+ lsls r4, 24\n\
+ lsrs r4, 24\n\
+ movs r0, 0x5\n\
+ bl IndexOfSpritePaletteTag\n\
+ lsls r0, 24\n\
+ lsrs r0, 4\n\
+ ldr r2, _080B6A7C @ =0x01010000\n\
+ adds r0, r2\n\
+ lsrs r0, 16\n\
+ adds r1, r4, 0\n\
+ adds r2, r5, 0\n\
+ adds r3, r5, 0\n\
+ bl MultiplyInvertedPaletteRGBComponents\n\
+_080B6A74:\n\
+ pop {r4,r5}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_080B6A7C: .4byte 0x01010000\n\
+ .syntax divided\n");
+}
+#endif
+
+void sub_80B6A80(void)
+{
+ u8 spriteId1;
+ u8 spriteId2;
+ u8 spriteId3;
+
+ spriteId1 = CreateSprite(&gSpriteTemplate_83CE5C8, 0xCC, 0x50, 0);
+ EWRAM_000000.unk10 = spriteId1;
+ SetSubspriteTables(&gSprites[spriteId1], gSubspriteTables_83CE558);
+
+ spriteId2 = CreateSprite(&gSpriteTemplate_83CE5F8, 0xCC, 0x4C, 1);
+ gSprites[spriteId1].data6 = spriteId2;
+ SetSubspriteTables(&gSprites[spriteId2], gSubspriteTables_83CE560);
+
+ spriteId3 = CreateSprite(&gSpriteTemplate_83CE5E0, 0xCC, 0x4B, 2);
+ gSprites[spriteId3].oam.priority = 1;
+ gSprites[spriteId1].data7 = spriteId3;
+}
+
+void sub_80B6B14(void)
+{
+ struct Sprite *sprite = &gSprites[EWRAM_000000.unk10];
+
+ sprite->data0 = 2;
+ sprite->data1 = EWRAM_000000.currentPage;
+}
+
+u8 sub_80B6B5C(struct Sprite *);
+u8 sub_80B6B98(struct Sprite *);
+u8 sub_80B6B9C(struct Sprite *);
+u8 sub_80B6C08(struct Sprite *);
+
+static u8 (*const gUnknown_083CE2B4[])(struct Sprite *) =
+{
+ sub_80B6B5C,
+ sub_80B6B98,
+ sub_80B6B9C,
+ sub_80B6C08,
+};
+
+void sub_80B6B34(struct Sprite *sprite)
+{
+ while (gUnknown_083CE2B4[sprite->data0](sprite) != 0)
+ ;
+}
+
+u8 sub_80B6B5C(struct Sprite *sprite)
+{
+ struct Sprite *sprite1 = &gSprites[sprite->data6];
+ struct Sprite *sprite2 = &gSprites[sprite->data7];
+
+ sub_80B6C48(EWRAM_000000.currentPage, sprite1, sprite2);
+ sprite->data0++;
+ return 0;
+}
+
+u8 sub_80B6B98(struct Sprite *sprite)
+{
+ return 0;
+}
+
+u8 sub_80B6B9C(struct Sprite *sprite)
+{
+ struct Sprite *r4 = &gSprites[sprite->data6];
+ struct Sprite *r5 = &gSprites[sprite->data7];
+
+ r4->pos2.y++;
+ if (r4->pos2.y > 7)
+ {
+ sprite->data0++;
+ r4->pos2.y = -4;
+ r4->invisible = TRUE;
+ sub_80B6C48(((u8)sprite->data1 + 1) % 3, r4, r5);
+ }
+ return 0;
+}
+
+u8 sub_80B6C08(struct Sprite *sprite)
+{
+ struct Sprite *r2 = &gSprites[sprite->data6];
+
+ r2->invisible = FALSE;
+ r2->pos2.y++;
+ if (r2->pos2.y >= 0)
+ {
+ r2->pos2.y = 0;
+ sprite->data0 = 1;
+ }
+ return 0;
+}
+
+static const u16 gUnknown_083CE2C4[] = {1, 3, 2};
+static const u16 gUnknown_083CE2CA[] = {4, 6, 5};
+
+void sub_80B6C48(u8 a, struct Sprite *b, struct Sprite *c)
+{
+ c->oam.paletteNum = IndexOfSpritePaletteTag(gUnknown_083CE2C4[a]);
+ b->sheetTileStart = GetSpriteTileStartByTag(gUnknown_083CE2CA[a]);
+ b->subspriteTableNum = a;
+}
+
+//
+
+void sub_80B6CA8(void)
+{
+ u8 spriteId;
+
+ spriteId = CreateSprite(&gSpriteTemplate_83CE610, 0xCC, 0x6C, 0);
+ SetSubspriteTables(&gSprites[spriteId], gSubspriteTables_83CE578);
+
+ spriteId = CreateSprite(&gSpriteTemplate_83CE628, 0xCC, 0x84, 0);
+ SetSubspriteTables(&gSprites[spriteId], gSubspriteTables_83CE578);
+}
+
+void sub_80B6D04(void)
+{
+ u8 spriteId;
+ s16 r1;
+ u8 i;
+
+ r1 = (EWRAM_000000.unk2 - 1) * 8 + 4;
+ spriteId = CreateSprite(&gSpriteTemplate_83CE658, r1, 0x28, 0);
+ gSprites[spriteId].oam.priority = 3;
+ r1 = EWRAM_000000.unk2 * 8 + 4;
+ for (i = 0; i < EWRAM_000000.unk34->unk1; i++, r1 += 8)
+ {
+ spriteId = CreateSprite(&gSpriteTemplate_83CE670, r1, 0x2C, 0);
+ gSprites[spriteId].oam.priority = 3;
+ gSprites[spriteId].data0 = i;
+ }
+}
+
+void sub_80B6D9C(struct Sprite *sprite)
+{
+ const s16 arr[] = {0, -4, -2, -1};
+
+ if (sprite->data0 == 0 || --sprite->data0 == 0)
+ {
+ sprite->data0 = 8;
+ sprite->data1 = (sprite->data1 + 1) & 3;
+ }
+ sprite->pos2.x = arr[sprite->data1];
+}
+
+void sub_80B6DE8(struct Sprite *sprite)
+{
+ const s16 arr[] = {2, 3, 2, 1};
+ u8 var;
+
+ var = sub_80B6F44();
+ if (var != (u8)sprite->data0)
+ {
+ sprite->pos2.y = 0;
+ sprite->data1 = 0;
+ sprite->data2 = 0;
+ }
+ else
+ {
+ sprite->pos2.y = arr[sprite->data1];
+ sprite->data2++;
+ if (sprite->data2 > 8)
+ {
+ sprite->data1 = (sprite->data1 + 1) & 3;
+ sprite->data2 = 0;
+ }
+ }
+}
+
+//
+
+void nullsub_40(void);
+void sub_80B6E68(void);
+void sub_80B6EBC(void);
+void sub_80B6EFC(void);
+
+static void (*const gUnknown_083CE2E0[])(void) =
+{
+ nullsub_40,
+ sub_80B6E68,
+ sub_80B6EBC,
+ sub_80B6EFC,
+};
+
+void sub_80B6E44(void)
+{
+ gUnknown_083CE2E0[EWRAM_000000.unk34->unk2]();
+}
+
+void nullsub_40(void)
+{
+}
+
+void sub_80B6E68(void)
+{
+ u8 rivalGfxId;
+ u8 spriteId;
+
+ rivalGfxId = GetRivalAvatarGraphicsIdByStateIdAndGender(0, EWRAM_000000.unk3E);
+ spriteId = AddPseudoFieldObject(rivalGfxId, SpriteCallbackDummy, 0x38, 0x18, 0);
+ gSprites[spriteId].oam.priority = 3;
+ StartSpriteAnim(&gSprites[spriteId], 4);
+}
+
+void sub_80B6EBC(void)
+{
+ u8 spriteId;
+
+ spriteId = CreateSprite(&gSpriteTemplate_83CE688, 0x34, 0x18, 0);
+ SetSubspriteTables(&gSprites[spriteId], gSubspriteTables_83CE580);
+ gSprites[spriteId].oam.priority = 3;
+}
+
+void sub_80B6EFC(void)
+{
+ u8 spriteId;
+
+ sub_809D51C();
+ spriteId = CreateMonIcon(EWRAM_000000.unk3E, SpriteCallbackDummy, 0x34, 0x18, 0, EWRAM_000000.unk44);
+ gSprites[spriteId].oam.priority = 3;
+}
+
+u8 sub_80B6F44(void)
+{
+ u8 i;
+
+ for (i = 0; i < EWRAM_000000.unk34->unk1; i++)
+ {
+ if (EWRAM_000000.textBuffer[i] == 0xFF)
+ return i;
+ }
+ return EWRAM_000000.unk34->unk1 - 1;
+}
+
+u8 sub_80B6F84(void)
+{
+ s8 i;
+
+ for (i = EWRAM_000000.unk34->unk1 - 1; i > 0; i--)
+ {
+ if (EWRAM_000000.textBuffer[i] != 0xFF)
+ return i;
+ }
+ return 0;
+}
+
+void sub_80B6FBC(void)
+{
+ u8 var;
+ u8 var2;
+
+ var = sub_80B6F84();
+ EWRAM_000000.textBuffer[var] = 0;
+ sub_80B7960();
+ EWRAM_000000.textBuffer[var] = 0xFF;
+ var2 = sub_80B6958();
+ if (var2 == 0 || var2 == 2)
+ sub_80B6460(1, 0, 1);
+ PlaySE(SE_BOWA);
+}
+
+u8 sub_80B7004(void)
+{
+ s16 x;
+ s16 y;
+ u8 var;
+ u8 r4;
+
+ get_cursor_pos(&x, &y);
+ x = sub_80B67EC(x);
+ var = sub_80B7768(x, y);
+ r4 = 1;
+ if (var == 0xFF)
+ r4 = sub_80B7104();
+ else if (var == 0xFE)
+ r4 = sub_80B713C();
+ else
+ sub_80B7174(var);
+ sub_80B7960();
+ PlaySE(SE_SELECT);
+ if (r4 != 0)
+ {
+ if (sub_80B6F84() == EWRAM_000000.unk34->unk1 - 1)
+ return 1;
+ }
+ return 0;
}
diff --git a/src/rom4.c b/src/rom4.c
index 621dd203b..bc9af5c66 100644
--- a/src/rom4.c
+++ b/src/rom4.c
@@ -2542,7 +2542,7 @@ void CreateLinkPlayerSprite(u8 linkPlayerId)
if (linkPlayerMapObj->active)
{
- u8 val = sub_805983C(0, mapObj->mapobj_bit_1);
+ u8 val = GetRivalAvatarGraphicsIdByStateIdAndGender(0, mapObj->mapobj_bit_1);
mapObj->spriteId = AddPseudoFieldObject(val, SpriteCB_LinkPlayer, 0, 0, 0);
sprite = &gSprites[mapObj->spriteId];
sprite->coordOffsetEnabled = TRUE;
diff --git a/src/sprite.c b/src/sprite.c
index 0f5b0caf1..fd8a5aaac 100644
--- a/src/sprite.c
+++ b/src/sprite.c
@@ -1513,7 +1513,7 @@ void AllocTilesForSpriteSheets(struct SpriteSheet *sheets)
AllocTilesForSpriteSheet(&sheets[i]);
}
-void LoadTilesForSpriteSheet(struct SpriteSheet *sheet)
+void LoadTilesForSpriteSheet(const struct SpriteSheet *sheet)
{
u8 *data = sheet->data;
u16 tileStart = GetSpriteTileStartByTag(sheet->tag);
@@ -1599,14 +1599,14 @@ static void AllocSpriteTileRange(u16 tag, u16 start, u16 count)
SET_SPRITE_TILE_RANGE(freeIndex, start, count);
}
-void RequestSpriteSheetCopy(struct SpriteSheet *sheet)
+void RequestSpriteSheetCopy(const struct SpriteSheet *sheet)
{
u8 *data = sheet->data;
u16 tileStart = GetSpriteTileStartByTag(sheet->tag);
RequestSpriteCopy(data, (u8 *)OBJ_VRAM0 + tileStart * TILE_SIZE_4BPP, sheet->size);
}
-u16 LoadSpriteSheetDeferred(struct SpriteSheet *sheet)
+u16 LoadSpriteSheetDeferred(const struct SpriteSheet *sheet)
{
s16 tileStart = AllocSpriteTiles(sheet->size / TILE_SIZE_4BPP);
@@ -1700,7 +1700,7 @@ void FreeSpritePaletteByTag(u16 tag)
sSpritePaletteTags[index] = 0xFFFF;
}
-void SetSubspriteTables(struct Sprite *sprite, struct SubspriteTable *subspriteTables)
+void SetSubspriteTables(struct Sprite *sprite, const struct SubspriteTable *subspriteTables)
{
sprite->subspriteTables = subspriteTables;
sprite->subspriteTableNum = 0;
@@ -1726,7 +1726,7 @@ bool8 AddSpriteToOamBuffer(struct Sprite *sprite, u8 *oamIndex)
bool8 AddSubspritesToOamBuffer(struct Sprite *sprite, struct OamData *destOam, u8 *oamIndex)
{
- struct SubspriteTable *subspriteTable;
+ const struct SubspriteTable *subspriteTable;
struct OamData *oam;
if (*oamIndex >= gOamLimit)