diff options
-rw-r--r-- | asm/event_object_movement.s | 14 | ||||
-rw-r--r-- | asm/naming_screen.s | 549 | ||||
-rw-r--r-- | data/naming_screen.s | 45 | ||||
-rw-r--r-- | include/event_object_movement.h | 1 | ||||
-rw-r--r-- | include/field_player_avatar.h | 1 | ||||
-rw-r--r-- | include/graphics.h | 1 | ||||
-rw-r--r-- | include/naming_screen.h | 4 | ||||
-rw-r--r-- | src/daycare.c | 2 | ||||
-rw-r--r-- | src/field_specials.c | 4 | ||||
-rw-r--r-- | src/naming_screen.c | 222 | ||||
-rw-r--r-- | src/oak_speech.c | 4 |
11 files changed, 232 insertions, 615 deletions
diff --git a/asm/event_object_movement.s b/asm/event_object_movement.s index e9ddd9ebc..d09ee8e97 100644 --- a/asm/event_object_movement.s +++ b/asm/event_object_movement.s @@ -1470,8 +1470,8 @@ _0805E8E0: bx r1 thumb_func_end TrySpawnObjectEvent - thumb_func_start sub_805E8E8 -sub_805E8E8: @ 805E8E8 + thumb_func_start MakeObjectTemplateFromObjectEventGraphicsInfo +MakeObjectTemplateFromObjectEventGraphicsInfo: @ 805E8E8 push {r4-r7,lr} adds r6, r1, 0 adds r4, r2, 0 @@ -1515,7 +1515,7 @@ _0805E936: pop {r4-r7} pop {r0} bx r0 - thumb_func_end sub_805E8E8 + thumb_func_end MakeObjectTemplateFromObjectEventGraphicsInfo thumb_func_start MakeObjectTemplateFromObjectEventGraphicsInfoWithCallbackIndex MakeObjectTemplateFromObjectEventGraphicsInfoWithCallbackIndex: @ 805E940 @@ -1527,7 +1527,7 @@ MakeObjectTemplateFromObjectEventGraphicsInfoWithCallbackIndex: @ 805E940 lsrs r1, 14 adds r1, r4 ldr r1, [r1] - bl sub_805E8E8 + bl MakeObjectTemplateFromObjectEventGraphicsInfo pop {r4} pop {r0} bx r0 @@ -1565,7 +1565,7 @@ AddPseudoObjectEvent: @ 805E978 lsrs r4, 24 add r3, sp, 0x18 mov r2, sp - bl sub_805E8E8 + bl MakeObjectTemplateFromObjectEventGraphicsInfo mov r0, sp ldrh r1, [r0, 0x2] ldr r0, _0805E9F0 @ =0x0000ffff @@ -1649,7 +1649,7 @@ sprite_new: @ 805E9F8 add r3, sp, 0x1C adds r0, r5, 0 mov r2, sp - bl sub_805E8E8 + bl MakeObjectTemplateFromObjectEventGraphicsInfo mov r1, sp ldr r2, _0805EB3C @ =0x0000ffff adds r0, r2, 0 @@ -1799,7 +1799,7 @@ sub_805EB44: @ 805EB44 add r3, sp, 0x18 adds r0, r6, 0 mov r2, sp - bl sub_805E8E8 + bl MakeObjectTemplateFromObjectEventGraphicsInfo mov r1, sp ldr r2, _0805EC28 @ =0x0000ffff adds r0, r2, 0 diff --git a/asm/naming_screen.s b/asm/naming_screen.s index a4f237008..f3931d1fe 100644 --- a/asm/naming_screen.s +++ b/asm/naming_screen.s @@ -5,555 +5,6 @@ .text - thumb_func_start sub_809EC7C -sub_809EC7C: @ 809EC7C - push {r4-r6,lr} - adds r6, r0, 0 - movs r1, 0x3A - ldrsh r0, [r6, r1] - lsls r5, r0, 4 - adds r5, r0 - lsls r5, 2 - ldr r1, _0809ECC4 @ =gSprites - adds r5, r1 - movs r2, 0x3C - ldrsh r0, [r6, r2] - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - adds r4, r1 - ldr r0, _0809ECC8 @ =gNamingScreenData - ldr r0, [r0] - ldr r1, _0809ECCC @ =0x00001e22 - adds r0, r1 - ldrb r0, [r0] - bl sub_809DE20 - lsls r0, 24 - lsrs r0, 24 - adds r1, r5, 0 - adds r2, r4, 0 - bl sub_809ED88 - ldrh r0, [r6, 0x2E] - adds r0, 0x1 - strh r0, [r6, 0x2E] - movs r0, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0809ECC4: .4byte gSprites -_0809ECC8: .4byte gNamingScreenData -_0809ECCC: .4byte 0x00001e22 - thumb_func_end sub_809EC7C - - thumb_func_start sub_809ECD0 -sub_809ECD0: @ 809ECD0 - movs r0, 0 - bx lr - thumb_func_end sub_809ECD0 - - thumb_func_start sub_809ECD4 -sub_809ECD4: @ 809ECD4 - 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, _0809ED40 @ =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 _0809ED38 - ldrh r0, [r3, 0x2E] - adds r0, 0x1 - strh r0, [r3, 0x2E] - ldr r0, _0809ED44 @ =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 - bl sub_809DE20 - lsls r0, 24 - lsrs r0, 24 - adds r1, r4, 0 - adds r2, r5, 0 - bl sub_809ED88 -_0809ED38: - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0809ED40: .4byte gSprites -_0809ED44: .4byte 0x0000fffc - thumb_func_end sub_809ECD4 - - thumb_func_start sub_809ED48 -sub_809ED48: @ 809ED48 - 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, _0809ED84 @ =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 _0809ED7C - movs r0, 0 - strh r0, [r2, 0x26] - movs r0, 0x1 - strh r0, [r4, 0x2E] -_0809ED7C: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0809ED84: .4byte gSprites - thumb_func_end sub_809ED48 - - thumb_func_start sub_809ED88 -sub_809ED88: @ 809ED88 - 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, _0809EDE0 @ =gUnknown_83E2388 - 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, _0809EDE4 @ =gUnknown_83E238E - 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 -_0809EDE0: .4byte gUnknown_83E2388 -_0809EDE4: .4byte gUnknown_83E238E - thumb_func_end sub_809ED88 - - thumb_func_start CreateBackOkSprites -CreateBackOkSprites: @ 809EDE8 - push {r4-r6,lr} - mov r6, r8 - push {r6} - ldr r0, _0809EE50 @ =gUnknown_83E25BC - movs r1, 0xCC - movs r2, 0x74 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r6, _0809EE54 @ =gSprites - adds r4, r6 - ldr r0, _0809EE58 @ =gUnknown_83E2524 - mov r8, r0 - adds r0, r4, 0 - mov r1, r8 - bl SetSubspriteTables - adds r4, 0x3E - ldrb r0, [r4] - movs r5, 0x4 - orrs r0, r5 - strb r0, [r4] - ldr r0, _0809EE5C @ =gUnknown_83E25D4 - movs r1, 0xCC - movs r2, 0x8C - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - adds r4, r6 - adds r0, r4, 0 - mov r1, r8 - bl SetSubspriteTables - adds r4, 0x3E - ldrb r0, [r4] - orrs r0, r5 - strb r0, [r4] - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0809EE50: .4byte gUnknown_83E25BC -_0809EE54: .4byte gSprites -_0809EE58: .4byte gUnknown_83E2524 -_0809EE5C: .4byte gUnknown_83E25D4 - thumb_func_end CreateBackOkSprites - - thumb_func_start CreateUnderscoreSprites -CreateUnderscoreSprites: @ 809EE60 - push {r4-r6,lr} - ldr r5, _0809EF0C @ =gNamingScreenData - ldr r0, [r5] - ldr r4, _0809EF10 @ =0x00001e16 - adds r0, r4 - ldrh r1, [r0] - subs r1, 0x5 - ldr r0, _0809EF14 @ =gUnknown_83E2604 - lsls r1, 16 - asrs r1, 16 - movs r2, 0x38 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r1, r0, 24 - ldr r3, _0809EF18 @ =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] - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] - ldr r0, [r5] - adds r4, r0, r4 - ldrh r1, [r4] - movs r5, 0 - ldr r2, _0809EF1C @ =0x00001e28 - adds r0, r2 - ldr r0, [r0] - ldrb r0, [r0, 0x1] - cmp r5, r0 - bcs _0809EF04 - adds r6, r3, 0 -_0809EEB2: - lsls r1, 16 - asrs r4, r1, 16 - movs r0, 0xC0 - lsls r0, 10 - adds r1, r0 - asrs r1, 16 - ldr r0, _0809EF20 @ =gUnknown_83E261C - movs r2, 0x3C - 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, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r4, 0x8 - lsls r4, 16 - lsrs r1, r4, 16 - ldr r0, _0809EF0C @ =gNamingScreenData - ldr r0, [r0] - ldr r2, _0809EF1C @ =0x00001e28 - adds r0, r2 - ldr r0, [r0] - ldrb r0, [r0, 0x1] - cmp r5, r0 - bcc _0809EEB2 -_0809EF04: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0809EF0C: .4byte gNamingScreenData -_0809EF10: .4byte 0x00001e16 -_0809EF14: .4byte gUnknown_83E2604 -_0809EF18: .4byte gSprites -_0809EF1C: .4byte 0x00001e28 -_0809EF20: .4byte gUnknown_83E261C - thumb_func_end CreateUnderscoreSprites - - thumb_func_start CreateInputTargetIcon -CreateInputTargetIcon: @ 809EF24 - push {lr} - ldr r1, _0809EF44 @ =gUnknown_83E2394 - ldr r0, _0809EF48 @ =gNamingScreenData - ldr r0, [r0] - ldr r2, _0809EF4C @ =0x00001e28 - adds r0, r2 - ldr r0, [r0] - ldrb r0, [r0, 0x2] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {r0} - bx r0 - .align 2, 0 -_0809EF44: .4byte gUnknown_83E2394 -_0809EF48: .4byte gNamingScreenData -_0809EF4C: .4byte 0x00001e28 - thumb_func_end CreateInputTargetIcon - - thumb_func_start nullsub_54 -nullsub_54: @ 809EF50 - bx lr - thumb_func_end nullsub_54 - - thumb_func_start sub_809EF54 -sub_809EF54: @ 809EF54 - push {lr} - sub sp, 0x4 - ldr r0, _0809EFA0 @ =gNamingScreenData - ldr r0, [r0] - ldr r1, _0809EFA4 @ =0x00001e34 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0 - bl sub_805C7C8 - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0809EFA8 @ =SpriteCallbackDummy - movs r2, 0 - str r2, [sp] - movs r2, 0x38 - movs r3, 0x25 - bl AddPseudoObjectEvent - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r2, _0809EFAC @ =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 -_0809EFA0: .4byte gNamingScreenData -_0809EFA4: .4byte 0x00001e34 -_0809EFA8: .4byte SpriteCallbackDummy -_0809EFAC: .4byte gSprites - thumb_func_end sub_809EF54 - - thumb_func_start sub_809EFB0 -sub_809EFB0: @ 809EFB0 - push {r4,lr} - ldr r0, _0809EFE4 @ =gUnknown_83E2634 - movs r1, 0x38 - movs r2, 0x29 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r0, _0809EFE8 @ =gSprites - adds r4, r0 - ldr r1, _0809EFEC @ =gUnknown_83E252C - 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 -_0809EFE4: .4byte gUnknown_83E2634 -_0809EFE8: .4byte gSprites -_0809EFEC: .4byte gUnknown_83E252C - thumb_func_end sub_809EFB0 - - thumb_func_start sub_809EFF0 -sub_809EFF0: @ 809EFF0 - push {lr} - sub sp, 0xC - bl LoadMonIconPalettes - ldr r0, _0809F038 @ =gNamingScreenData - ldr r3, [r0] - ldr r1, _0809F03C @ =0x00001e34 - adds r0, r3, r1 - ldrh r0, [r0] - ldr r1, _0809F040 @ =SpriteCallbackDummy - movs r2, 0 - str r2, [sp] - ldr r2, _0809F044 @ =0x00001e38 - adds r3, r2 - ldr r2, [r3] - str r2, [sp, 0x4] - movs r2, 0x1 - str r2, [sp, 0x8] - movs r2, 0x38 - movs r3, 0x28 - bl CreateMonIcon - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0809F048 @ =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, 0xC - pop {r0} - bx r0 - .align 2, 0 -_0809F038: .4byte gNamingScreenData -_0809F03C: .4byte 0x00001e34 -_0809F040: .4byte SpriteCallbackDummy -_0809F044: .4byte 0x00001e38 -_0809F048: .4byte gSprites - thumb_func_end sub_809EFF0 - - thumb_func_start sub_809F04C -sub_809F04C: @ 809F04C - push {r4,lr} - sub sp, 0x2C - ldr r0, _0809F0B8 @ =gUnknown_83E23C0 - ldr r1, [r0, 0x4] - ldr r0, [r0] - str r0, [sp, 0x1C] - str r1, [sp, 0x20] - ldr r0, _0809F0BC @ =gUnknown_83E23C8 - ldr r1, [r0, 0x4] - ldr r0, [r0] - str r0, [sp, 0x24] - str r1, [sp, 0x28] - ldr r1, _0809F0C0 @ =SpriteCallbackDummy - add r3, sp, 0x18 - movs r0, 0 - mov r2, sp - bl sub_805E8E8 - mov r2, sp - add r0, sp, 0x1C - ldrh r1, [r0, 0x6] - strh r1, [r2] - add r4, sp, 0x24 - ldrh r1, [r4, 0x4] - strh r1, [r2, 0x2] - ldr r1, _0809F0C4 @ =gUnknown_83E23BC - str r1, [sp, 0x8] - bl LoadSpriteSheet - adds r0, r4, 0 - bl LoadSpritePalette - mov r0, sp - movs r1, 0x38 - movs r2, 0x25 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0809F0C8 @ =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, 0x2C - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0809F0B8: .4byte gUnknown_83E23C0 -_0809F0BC: .4byte gUnknown_83E23C8 -_0809F0C0: .4byte SpriteCallbackDummy -_0809F0C4: .4byte gUnknown_83E23BC -_0809F0C8: .4byte gSprites - thumb_func_end sub_809F04C - thumb_func_start HandleKeyboardEvent HandleKeyboardEvent: @ 809F0CC push {r4,r5,lr} diff --git a/data/naming_screen.s b/data/naming_screen.s index 366638746..4f89d013f 100644 --- a/data/naming_screen.s +++ b/data/naming_screen.s @@ -6,35 +6,6 @@ .section .rodata .align 2 -gUnknown_83E2388:: @ 83E2388 - .2byte 0x0001, 0x0003, 0x0002 - -gUnknown_83E238E:: @ 83E238E - .2byte 0x0004, 0x0006, 0x0005 - -gUnknown_83E2394:: @ 83E2394 - .4byte nullsub_54 - .4byte sub_809EF54 - .4byte sub_809EFB0 - .4byte sub_809EFF0 - .4byte sub_809F04C - -gUnknown_83E23A8:: @ 83E23A8 - obj_image_anim_frame 0, 10 - obj_image_anim_frame 24, 10 - obj_image_anim_frame 0, 10 - obj_image_anim_frame 32, 10 - obj_image_anim_jump 0 - -gUnknown_83E23BC:: @ 83E23BC - .4byte gUnknown_83E23A8 - -gUnknown_83E23C0:: @ 83E23C0 - obj_tiles gUnknown_83E1980, 0x0900, 255 - -gUnknown_83E23C8:: @ 83E23C8 - obj_pal gUnknown_8E98004, 255 - gUnknown_83E23D0:: @ 83E23D0 .4byte sub_809F11C .4byte KeyboardKeyHandler_Page @@ -119,11 +90,11 @@ gUnknown_83E2480:: @ 83E2480 .4byte gUnknown_8418E69 sNamingScreenTemplates:: @ 83E248C - .4byte gUnknown_83E245C - .4byte gUnknown_83E2468 - .4byte gUnknown_83E2474 - .4byte gUnknown_83E2474 - .4byte gUnknown_83E2480 + .4byte gUnknown_83E245C @ NAMING_SCREEN_PLAYER + .4byte gUnknown_83E2468 @ NAMING_SCREEN_BOX + .4byte gUnknown_83E2474 @ NAMING_SCREEN_CAUGHT_MON + .4byte gUnknown_83E2474 @ NAMING_SCREEN_NAME_RATER + .4byte gUnknown_83E2480 @ NAMING_SCREEN_RIVAL gUnknown_83E24A0:: @ 83E24A0 .4byte 0x00000000, 0x00000000 @@ -216,7 +187,7 @@ gUnknown_83E2570:: @ 83E2570 .4byte gUnknown_83E2558 gUnknown_83E2574:: @ 83E2574 - spr_template 2, 4, gUnknown_83E24A0, gUnknown_83E2564, NULL, gDummySpriteAffineAnimTable, sub_809EC54 + spr_template 2, 4, gUnknown_83E24A0, gUnknown_83E2564, NULL, gDummySpriteAffineAnimTable, SpriteCB_PageSwap gUnknown_83E258C:: @ 83E258C spr_template 3, 1, gUnknown_83E24B0, gUnknown_83E2564, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy @@ -233,10 +204,10 @@ gUnknown_83E25D4:: @ 83E25D4 gUnknown_83E25EC:: @ 83E25EC spr_template 7, 5, gUnknown_83E24A8, gUnknown_83E2568, NULL, gDummySpriteAffineAnimTable, sub_809E700 -gUnknown_83E2604:: @ 83E2604 +sSpriteTemplate_InputArrow:: @ 83E2604 spr_template 10, 3, gUnknown_83E24A0, gUnknown_83E2564, NULL, gDummySpriteAffineAnimTable, sub_809E7F0 -gUnknown_83E261C:: @ 83E261C +sSpriteTemplate_Underscore:: @ 83E261C spr_template 11, 3, gUnknown_83E24A0, gUnknown_83E2564, NULL, gDummySpriteAffineAnimTable, sub_809E83C gUnknown_83E2634:: @ 83E2634 diff --git a/include/event_object_movement.h b/include/event_object_movement.h index 7828d0bcb..50d9935fc 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -128,6 +128,7 @@ void SetSpritePosToMapCoords(s16 x, s16 y, s16 *x2, s16 *y2); void UpdateObjectEventSpriteVisibility(struct Sprite *sprite, bool8 invisible); u8 ZCoordToPriority(u8 z); void SetObjectSubpriorityByZCoord(u8 z, struct Sprite * sprite, u8 offset); +void MakeObjectTemplateFromObjectEventGraphicsInfo(u16 graphicsId, void (*callback)(struct Sprite *), struct SpriteTemplate *spriteTemplate, const struct SubspriteTable **subspriteTables); // Exported data declarations diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h index 5565fb64b..3233c2d70 100644 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -37,5 +37,6 @@ bool8 PartyHasMonWithSurf(void); bool8 IsPlayerSurfingNorth(void); void player_get_pos_including_state_based_drift(s16 *x, s16 *y); void sub_805CBE8(void); +u8 sub_805C7C8(u8 state, u8 gender); #endif //GUARD_FIELD_PLAYER_AVATAR_H diff --git a/include/graphics.h b/include/graphics.h index f85b95bad..a61250ea8 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4899,5 +4899,6 @@ extern const u32 gEasyChatModeIcons_Tiles[]; extern const u32 gUnknown_8E982BC[]; extern const u32 gUnknown_8E98458[]; extern const u32 gUnknown_8E98398[]; +extern const u16 gUnknown_8E98004[]; #endif //GUARD_GRAPHICS_H diff --git a/include/naming_screen.h b/include/naming_screen.h index 424d1bdba..1e8d11b3a 100644 --- a/include/naming_screen.h +++ b/include/naming_screen.h @@ -6,8 +6,8 @@ #define NAMING_SCREEN_PLAYER 0 #define NAMING_SCREEN_BOX 1 #define NAMING_SCREEN_CAUGHT_MON 2 -#define NAMING_SCREEN_3 3 -#define NAMING_SCREEN_WALDA 4 // Wrong name? +#define NAMING_SCREEN_NAME_RATER 3 +#define NAMING_SCREEN_RIVAL 4 void DoNamingScreen(u8 templateNum, u8 *destBuffer, u16 monSpecies, u16 monGender, u32 monPersonality, MainCallback returnCallback); diff --git a/src/daycare.c b/src/daycare.c index 36fb34c79..4d1b5aa7b 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -1967,7 +1967,7 @@ static void CB2_EggHatch_1(void) species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_SPECIES); gender = GetMonGender(&gPlayerParty[sEggHatchData->eggPartyID]); personality = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_PERSONALITY, 0); - DoNamingScreen(3, gStringVar3, species, gender, personality, EggHatchSetMonNickname); + DoNamingScreen(NAMING_SCREEN_NAME_RATER, gStringVar3, species, gender, personality, EggHatchSetMonNickname); break; case 1: case -1: diff --git a/src/field_specials.c b/src/field_specials.c index e8def2c39..25d2eceb7 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -1637,7 +1637,7 @@ void ChangeBoxPokemonNickname(void) species = GetBoxMonData(pokemon, MON_DATA_SPECIES, NULL); gender = GetBoxMonGender(pokemon); personality = GetBoxMonData(pokemon, MON_DATA_PERSONALITY, NULL); - DoNamingScreen(3, gStringVar2, species, gender, personality, ChangeBoxPokemonNickname_CB); + DoNamingScreen(NAMING_SCREEN_NAME_RATER, gStringVar2, species, gender, personality, ChangeBoxPokemonNickname_CB); } static void ChangeBoxPokemonNickname_CB(void) @@ -1657,7 +1657,7 @@ void ChangePokemonNickname(void) species = GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_SPECIES, NULL); gender = GetMonGender(&gPlayerParty[gSpecialVar_0x8004]); personality = GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_PERSONALITY, NULL); - DoNamingScreen(3, gStringVar2, species, gender, personality, ChangePokemonNickname_CB); + DoNamingScreen(NAMING_SCREEN_NAME_RATER, gStringVar2, species, gender, personality, ChangePokemonNickname_CB); } static void ChangePokemonNickname_CB(void) diff --git a/src/naming_screen.c b/src/naming_screen.c index a5a6b5a5b..6f506f621 100644 --- a/src/naming_screen.c +++ b/src/naming_screen.c @@ -1,21 +1,23 @@ #include "global.h" #include "gflib.h" -#include "battle_message.h" #include "graphics.h" #include "event_data.h" +#include "event_object_movement.h" #include "event_scripts.h" #include "field_effect.h" +#include "field_player_avatar.h" #include "field_specials.h" #include "help_system.h" #include "naming_screen.h" #include "new_menu_helpers.h" +#include "pokemon_icon.h" #include "pokemon_storage_system.h" -#include "strings.h" #include "task.h" #include "trig.h" #include "constants/help_system.h" #include "constants/flags.h" #include "constants/songs.h" +#include "constants/event_objects.h" enum { @@ -137,13 +139,19 @@ bool8 IsCursorAnimFinished(); u8 GetCurrentPageColumnCount(void); void CreatePageSwitcherSprites(void); void sub_809EC20(void); -bool8 sub_809EC7C(struct Sprite * sprite); -bool8 sub_809ECD0(struct Sprite * sprite); -bool8 sub_809ECD4(struct Sprite * sprite); -bool8 sub_809ED48(struct Sprite * sprite); +bool8 PageSwapSpritesCB_Init(struct Sprite * sprite); +bool8 PageSwapSpritesCB_Idle(struct Sprite * sprite); +bool8 PageSwapSpritesCB_SwapHide(struct Sprite * sprite); +bool8 PageSwapSpritesCB_SwapShow(struct Sprite * sprite); +void sub_809ED88(u8 a0, struct Sprite * spr1, struct Sprite * spr2); void CreateBackOkSprites(void); void CreateUnderscoreSprites(void); void CreateInputTargetIcon(void); +void NamingScreen_NoCreateIcon(void); +void NamingScreen_CreatePlayerIcon(void); +void NamingScreen_CreatePCIcon(void); +void NamingScreen_CreateMonIcon(void); +void NamingScreen_CreateRivalIcon(void); void sub_809FA60(void); bool8 NamingScreen_InitDisplayMode(void); void NamingScreen_TurnOffScreen(void); @@ -164,6 +172,8 @@ void sub_809FC34(void); extern const struct SubspriteTable gUnknown_83E2504[]; extern const struct SubspriteTable gUnknown_83E250C[]; +extern const struct SubspriteTable gUnknown_83E2524[]; +extern const struct SubspriteTable gUnknown_83E252C[]; extern const struct SpriteTemplate gUnknown_83E2574; extern const struct SpriteTemplate gUnknown_83E258C; @@ -171,8 +181,8 @@ extern const struct SpriteTemplate gUnknown_83E25A4; extern const struct SpriteTemplate gUnknown_83E25BC; extern const struct SpriteTemplate gUnknown_83E25D4; extern const struct SpriteTemplate gUnknown_83E25EC; -extern const struct SpriteTemplate gUnknown_83E2604; -extern const struct SpriteTemplate gUnknown_83E261C; +extern const struct SpriteTemplate sSpriteTemplate_InputArrow; +extern const struct SpriteTemplate sSpriteTemplate_Underscore; extern const struct SpriteTemplate gUnknown_83E2634; const u16 gUnknown_83E1800[] = INCBIN_U16("graphics/interface/naming_screen_83E1800.4bpp"); @@ -1115,15 +1125,197 @@ void sub_809EC20(void) sprite->data[1] = gNamingScreenData->currentPage; } -bool8 (*const gUnknown_83E2378[])(struct Sprite * sprite) = { - sub_809EC7C, - sub_809ECD0, - sub_809ECD4, - sub_809ED48 +bool8 (*const sPageSwapSpritesCBs[])(struct Sprite * sprite) = { + PageSwapSpritesCB_Init, + PageSwapSpritesCB_Idle, + PageSwapSpritesCB_SwapHide, + PageSwapSpritesCB_SwapShow }; -void sub_809EC54(struct Sprite *sprite) +void SpriteCB_PageSwap(struct Sprite *sprite) { - while (gUnknown_83E2378[sprite->data[0]](sprite)) + while (sPageSwapSpritesCBs[sprite->data[0]](sprite)) ; } + +bool8 PageSwapSpritesCB_Init(struct Sprite *sprite) +{ + struct Sprite *sprite1 = &gSprites[sprite->data[6]]; + struct Sprite *sprite2 = &gSprites[sprite->data[7]]; + + sub_809ED88(sub_809DE20(gNamingScreenData->currentPage), sprite1, sprite2); + sprite->data[0]++; + return FALSE; +} + +bool8 PageSwapSpritesCB_Idle(struct Sprite *sprite) +{ + struct Sprite *sprite1 = &gSprites[sprite->data[6]]; + struct Sprite *sprite2 = &gSprites[sprite->data[7]]; + + return FALSE; +} + +bool8 PageSwapSpritesCB_SwapHide(struct Sprite *sprite) +{ + struct Sprite *sprite1 = &gSprites[sprite->data[6]]; + struct Sprite *sprite2 = &gSprites[sprite->data[7]]; + u8 page; + + sprite1->pos2.y++; + if (sprite1->pos2.y > 7) + { + sprite->data[0]++; + sprite1->pos2.y = -4; + sprite1->invisible = TRUE; + page = sprite->data[1]; + sub_809ED88(sub_809DE20((page + 1) % 3), sprite1, sprite2); + } + return FALSE; +} + +bool8 PageSwapSpritesCB_SwapShow(struct Sprite *sprite) +{ + struct Sprite *sprite1 = &gSprites[sprite->data[6]]; + struct Sprite *sprite2 = &gSprites[sprite->data[7]]; + + sprite1->invisible = FALSE; + sprite1->pos2.y++; + if (sprite1->pos2.y >= 0) + { + sprite1->pos2.y = 0; + sprite->data[0] = 1; + } + return FALSE; +} + +const u16 gUnknown_83E2388[] = {1, 3, 2}; +const u16 gUnknown_83E238E[] = {4, 6, 5}; + +void sub_809ED88(u8 page, struct Sprite * sprite1, struct Sprite * sprite2) +{ + sprite2->oam.paletteNum = IndexOfSpritePaletteTag(gUnknown_83E2388[page]); + sprite1->sheetTileStart = GetSpriteTileStartByTag(gUnknown_83E238E[page]); + sprite1->subspriteTableNum = page; +} + +// + +void CreateBackOkSprites(void) +{ + u8 spriteId; + + spriteId = CreateSprite(&gUnknown_83E25BC, 0xCC, 0x74, 0); + SetSubspriteTables(&gSprites[spriteId], gUnknown_83E2524); + gSprites[spriteId].invisible = TRUE; + + spriteId = CreateSprite(&gUnknown_83E25D4, 0xCC, 0x8C, 0); + SetSubspriteTables(&gSprites[spriteId], gUnknown_83E2524); + gSprites[spriteId].invisible = TRUE; +} + +void CreateUnderscoreSprites(void) +{ + u8 spriteId; + s16 xPos; + u8 i; + + xPos = gNamingScreenData->inputCharBaseXPos - 5; + spriteId = CreateSprite(&sSpriteTemplate_InputArrow, xPos, 0x38, 0); + gSprites[spriteId].oam.priority = 3; + gSprites[spriteId].invisible = TRUE; + xPos = gNamingScreenData->inputCharBaseXPos; + for (i = 0; i < gNamingScreenData->template->maxChars; i++, xPos += 8) + { + spriteId = CreateSprite(&sSpriteTemplate_Underscore, xPos + 3, 0x3C, 0); + gSprites[spriteId].oam.priority = 3; + gSprites[spriteId].data[0] = i; + gSprites[spriteId].invisible = TRUE; + } +} + +//-------------------------------------------------- +// Icon creation (the thing you're naming or giving input to) +//-------------------------------------------------- + +void (*const sIconFunctions[])(void) = { + NamingScreen_NoCreateIcon, + NamingScreen_CreatePlayerIcon, + NamingScreen_CreatePCIcon, + NamingScreen_CreateMonIcon, + NamingScreen_CreateRivalIcon +}; + +void CreateInputTargetIcon(void) +{ + sIconFunctions[gNamingScreenData->template->iconFunction](); +} + +void NamingScreen_NoCreateIcon(void) +{ + +} + +void NamingScreen_CreatePlayerIcon(void) +{ + u8 rivalGfxId; + u8 spriteId; + + rivalGfxId = sub_805C7C8(0, gNamingScreenData->monSpecies); + spriteId = AddPseudoObjectEvent(rivalGfxId, SpriteCallbackDummy, 0x38, 0x25, 0); + gSprites[spriteId].oam.priority = 3; + StartSpriteAnim(&gSprites[spriteId], 4); +} + +void NamingScreen_CreatePCIcon(void) +{ + u8 spriteId; + + spriteId = CreateSprite(&gUnknown_83E2634, 0x38, 0x29, 0); + SetSubspriteTables(&gSprites[spriteId], gUnknown_83E252C); + gSprites[spriteId].oam.priority = 3; +} + +void NamingScreen_CreateMonIcon(void) +{ + u8 spriteId; + + LoadMonIconPalettes(); + spriteId = CreateMonIcon(gNamingScreenData->monSpecies, SpriteCallbackDummy, 0x38, 0x28, 0, gNamingScreenData->monPersonality, 1); + gSprites[spriteId].oam.priority = 3; +} + +const union AnimCmd gUnknown_83E23A8[] = { + ANIMCMD_FRAME( 0, 10), + ANIMCMD_FRAME(24, 10), + ANIMCMD_FRAME( 0, 10), + ANIMCMD_FRAME(32, 10), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd *const gUnknown_83E23BC[] = { + gUnknown_83E23A8 +}; + +void NamingScreen_CreateRivalIcon(void) +{ + const struct SpriteSheet sheet = { + gUnknown_83E1980, 0x900, 255 + }; + const struct SpritePalette palette = { + gUnknown_8E98004, 255 + }; + struct SpriteTemplate template; + const struct SubspriteTable * tables_p; + u8 spriteId; + + MakeObjectTemplateFromObjectEventGraphicsInfo(OBJ_EVENT_GFX_RED_NORMAL, SpriteCallbackDummy, &template, &tables_p); + + template.tileTag = sheet.tag; + template.paletteTag = palette.tag; + template.anims = gUnknown_83E23BC; + LoadSpriteSheet(&sheet); + LoadSpritePalette(&palette); + spriteId = CreateSprite(&template, 0x38, 0x25, 0); + gSprites[spriteId].oam.priority = 3; +} diff --git a/src/oak_speech.c b/src/oak_speech.c index 871a73783..11281da30 100644 --- a/src/oak_speech.c +++ b/src/oak_speech.c @@ -1223,13 +1223,13 @@ static void Task_OakSpeech25(u8 taskId) GetDefaultName(sOakSpeechResources->unk_0010, 0); if (sOakSpeechResources->unk_0010 == 0) { - DoNamingScreen(0, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_ReturnFromNamingScreen); + DoNamingScreen(NAMING_SCREEN_PLAYER, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_ReturnFromNamingScreen); } else { ClearStdWindowAndFrameToTransparent(gTasks[taskId].data[13], 1); RemoveWindow(gTasks[taskId].data[13]); - DoNamingScreen(4, gSaveBlock1Ptr->rivalName, 0, 0, 0, CB2_ReturnFromNamingScreen); + DoNamingScreen(NAMING_SCREEN_RIVAL, gSaveBlock1Ptr->rivalName, 0, 0, 0, CB2_ReturnFromNamingScreen); } DestroyLinkedPikaOrGrassPlatformSprites(taskId, 1); FreeAllWindowBuffers(); |