diff options
-rw-r--r-- | asm/naming_screen.s | 1943 | ||||
-rw-r--r-- | asm/rom_810CBB4.s | 2 | ||||
-rw-r--r-- | data/naming_screen.s | 103 | ||||
-rw-r--r-- | include/field_player_avatar.h | 2 | ||||
-rw-r--r-- | include/sprite.h | 10 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/field_player_avatar.c | 4 | ||||
-rw-r--r-- | src/menu_cursor.c | 32 | ||||
-rw-r--r-- | src/naming_screen.c | 1115 | ||||
-rw-r--r-- | src/rom4.c | 2 | ||||
-rw-r--r-- | src/sprite.c | 10 |
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) |