_NamingScreen: ; 0x116b7 call DisableSpriteUpdates call NamingScreen call ReturnToMapWithSpeechTextbox ret ; 0x116c1 NamingScreen: ; 116c1 ld hl, wNamingScreenDestinationPointer ld [hl], e inc hl ld [hl], d ld hl, wNamingScreenType ld [hl], b ld hl, Options ld a, [hl] push af set NO_TEXT_SCROLL, [hl] ld a, [hMapAnims] push af xor a ld [hMapAnims], a ld a, [hInMenu] push af ld a, $1 ld [hInMenu], a call .SetUpNamingScreen call DelayFrame .loop call NamingScreenJoypadLoop jr nc, .loop pop af ld [hInMenu], a pop af ld [hMapAnims], a pop af ld [Options], a call ClearJoypad ret ; 116f8 .SetUpNamingScreen: ; 116f8 call ClearBGPalettes ld b, SCGB_DIPLOMA call GetSGBLayout call DisableLCD call LoadNamingScreenGFX call NamingScreen_InitText ld a, $e3 ld [rLCDC], a call .GetNamingScreenSetup call WaitBGMap call WaitTop call SetPalettes call NamingScreen_InitNameEntry ret ; 1171d .GetNamingScreenSetup: ; 1171d ld a, [wNamingScreenType] and 7 ld e, a ld d, 0 ld hl, .Jumptable add hl, de add hl, de ld a, [hli] ld h, [hl] ld l, a jp hl ; 1172e .Jumptable: ; 1172e (4:572e) dw .Pokemon dw .Player dw .Rival dw .Mom dw .Box dw .Tomodachi dw .Pokemon dw .Pokemon .Pokemon: ; 1173e (4:573e) ld a, [CurPartySpecies] ld [wd265], a ld hl, LoadMenuMonIcon ld a, BANK(LoadMenuMonIcon) ld e, $1 rst FarCall ; ; indirect jump to LoadMenuMonIcon (8e83f (23:683f)) ld a, [CurPartySpecies] ld [wd265], a call GetPokemonName hlcoord 5, 2 call PlaceString ld l, c ld h, b ld de, .NicknameStrings call PlaceString inc de hlcoord 5, 4 call PlaceString callba GetGender jr c, .genderless ld a, "♂" jr nz, .place_gender ld a, "♀" .place_gender hlcoord 1, 2 ld [hl], a .genderless call .StoreMonIconParams ret ; 11780 (4:5780) .NicknameStrings: ; 11780 db "'S@" db "NICKNAME?@" ; 1178d .Player: ; 1178d (4:578d) callba GetPlayerIcon call .LoadSprite hlcoord 5, 2 ld de, .PlayerNameString call PlaceString call .StoreSpriteIconParams ret ; 117a3 (4:57a3) .PlayerNameString: ; 117a3 db "YOUR NAME?@" ; 117ae .Rival: ; 117ae (4:57ae) ld de, SilverSpriteGFX ld b, BANK(SilverSpriteGFX) call .LoadSprite hlcoord 5, 2 ld de, .RivalNameString call PlaceString call .StoreSpriteIconParams ret ; 117c3 (4:57c3) .RivalNameString: ; 117c3 db "RIVAL'S NAME?@" ; 117d1 .Mom: ; 117d1 (4:57d1) ld de, MomSpriteGFX ld b, BANK(MomSpriteGFX) call .LoadSprite hlcoord 5, 2 ld de, .MomNameString call PlaceString call .StoreSpriteIconParams ret ; 117e6 (4:57e6) .MomNameString: ; 117e6 db "MOTHER'S NAME?@" ; 117f5 .Box: ; 117f5 (4:57f5) ld de, PokeBallSpriteGFX ld hl, VTiles0 tile $00 lb bc, BANK(PokeBallSpriteGFX), $4 call Request2bpp xor a ld hl, wSpriteAnimDict ld [hli], a ld [hl], a depixel 4, 4, 4, 0 ld a, SPRITE_ANIM_INDEX_RED_WALK call _InitSpriteAnimStruct ld hl, SPRITEANIMSTRUCT_FRAMESET_ID add hl, bc ld [hl], $0 hlcoord 5, 2 ld de, .BoxNameString call PlaceString call .StoreBoxIconParams ret ; 11822 (4:5822) .BoxNameString: ; 11822 db "BOX NAME?@" ; 1182c .Tomodachi: ; 1182c (4:582c) hlcoord 3, 2 ld de, .oTomodachi_no_namae_sutoringu call PlaceString call .StoreSpriteIconParams ret ; 11839 (4:5839) .oTomodachi_no_namae_sutoringu ; 11839 db "おともだち の なまえは?@" ; 11847 .LoadSprite: ; 11847 (4:5847) push de ld hl, VTiles0 tile $00 ld c, $4 push bc call Request2bpp pop bc ld hl, 12 tiles add hl, de ld e, l ld d, h ld hl, VTiles0 tile $04 call Request2bpp xor a ld hl, wSpriteAnimDict ld [hli], a ld [hl], a pop de ld b, SPRITE_ANIM_INDEX_RED_WALK ld a, d cp KrisSpriteGFX / $100 jr nz, .not_kris ld a, e cp KrisSpriteGFX % $100 jr nz, .not_kris ld b, SPRITE_ANIM_INDEX_BLUE_WALK .not_kris ld a, b depixel 4, 4, 4, 0 call _InitSpriteAnimStruct ret .StoreMonIconParams: ; 1187b (4:587b) ld a, PKMN_NAME_LENGTH - 1 hlcoord 5, 6 jr .StoreParams .StoreSpriteIconParams: ; 11882 (4:5882) ld a, PLAYER_NAME_LENGTH - 1 hlcoord 5, 6 jr .StoreParams .StoreBoxIconParams: ; 11889 (4:5889) ld a, BOX_NAME_LENGTH - 1 hlcoord 5, 4 jr .StoreParams .StoreParams: ; 11890 (4:5890) ld [wNamingScreenMaxNameLength], a ld a, l ld [wNamingScreenStringEntryCoord], a ld a, h ld [wNamingScreenStringEntryCoord + 1], a ret NamingScreen_IsTargetBox: ; 1189c push bc push af ld a, [wNamingScreenType] sub $3 ld b, a pop af dec b pop bc ret ; 118a8 NamingScreen_InitText: ; 118a8 call WaitTop hlcoord 0, 0 ld bc, SCREEN_WIDTH * SCREEN_HEIGHT ld a, $60 call ByteFill hlcoord 1, 1 lb bc, 6, 18 call NamingScreen_IsTargetBox jr nz, .not_box lb bc, 4, 18 .not_box call ClearBox ld de, NameInputUpper NamingScreen_ApplyTextInputMode: ; 118ca call NamingScreen_IsTargetBox jr nz, .not_box ld hl, BoxNameInputLower - NameInputLower add hl, de ld d, h ld e, l .not_box push de hlcoord 1, 8 lb bc, 7, 18 call NamingScreen_IsTargetBox jr nz, .not_box_2 hlcoord 1, 6 lb bc, 9, 18 .not_box_2 call ClearBox hlcoord 1, 16 lb bc, 1, 18 call ClearBox pop de hlcoord 2, 8 ld b, $5 call NamingScreen_IsTargetBox jr nz, .row hlcoord 2, 6 ld b, $6 .row ld c, $11 .col ld a, [de] ld [hli], a inc de dec c jr nz, .col push de ld de, 2 * SCREEN_WIDTH - $11 add hl, de pop de dec b jr nz, .row ret ; 11915 NamingScreenJoypadLoop: ; 11915 call JoyTextDelay ld a, [wJumptableIndex] bit 7, a jr nz, .quit call .RunJumptable callba PlaySpriteAnimationsAndDelayFrame call .UpdateStringEntry call DelayFrame and a ret .quit callab ClearSpriteAnims call ClearSprites xor a ld [hSCX], a ld [hSCY], a scf ret ; 11940 .UpdateStringEntry: ; 11940 xor a ld [hBGMapMode], a hlcoord 1, 5 call NamingScreen_IsTargetBox jr nz, .got_coords hlcoord 1, 3 .got_coords lb bc, 1, 18 call ClearBox ld hl, wNamingScreenDestinationPointer ld e, [hl] inc hl ld d, [hl] ld hl, wNamingScreenStringEntryCoord ld a, [hli] ld h, [hl] ld l, a call PlaceString ld a, $1 ld [hBGMapMode], a ret ; 11968 .RunJumptable: ; 11968 ld a, [wJumptableIndex] ld e, a ld d, $0 ld hl, .Jumptable add hl, de add hl, de ld a, [hli] ld h, [hl] ld l, a jp hl ; 11977 .Jumptable: ; 11977 (4:5977) dw .InitCursor dw .ReadButtons .InitCursor: ; 1197b (4:597b) depixel 10, 3 call NamingScreen_IsTargetBox jr nz, .got_cursor_position ld d, 8 * 8 .got_cursor_position ld a, SPRITE_ANIM_INDEX_02 call _InitSpriteAnimStruct ld a, c ld [wNamingScreenCursorObjectPointer], a ld a, b ld [wNamingScreenCursorObjectPointer + 1], a ld hl, SPRITEANIMSTRUCT_FRAMESET_ID add hl, bc ld a, [hl] ld hl, SPRITEANIMSTRUCT_0E add hl, bc ld [hl], a ld hl, wJumptableIndex inc [hl] ret .ReadButtons: ; 119a1 (4:59a1) ld hl, hJoyPressed ; $ffa7 ld a, [hl] and A_BUTTON jr nz, .a ld a, [hl] and B_BUTTON jr nz, .b ld a, [hl] and START jr nz, .start ld a, [hl] and SELECT jr nz, .select ret .a call .GetCursorPosition cp $1 jr z, .select cp $2 jr z, .b cp $3 jr z, .end call NamingScreen_GetLastCharacter call NamingScreen_TryAddCharacter ret nc .start ld hl, wNamingScreenCursorObjectPointer ld c, [hl] inc hl ld b, [hl] ld hl, SPRITEANIMSTRUCT_0C add hl, bc ld [hl], $8 ld hl, SPRITEANIMSTRUCT_0D add hl, bc ld [hl], $4 call NamingScreen_IsTargetBox ret nz inc [hl] ret .b call NamingScreen_DeleteCharacter ret .end call NamingScreen_StoreEntry ld hl, wJumptableIndex set 7, [hl] ret .select ld hl, wcf64 ld a, [hl] xor 1 ld [hl], a jr z, .upper ld de, NameInputLower call NamingScreen_ApplyTextInputMode ret .upper ld de, NameInputUpper call NamingScreen_ApplyTextInputMode ret .GetCursorPosition: ; 11a0b (4:5a0b) ld hl, wNamingScreenCursorObjectPointer ld c, [hl] inc hl ld b, [hl] NamingScreen_GetCursorPosition: ; 11a11 (4:5a11) ld hl, SPRITEANIMSTRUCT_0D add hl, bc ld a, [hl] push bc ld b, $4 call NamingScreen_IsTargetBox jr nz, .not_box inc b .not_box cp b pop bc jr nz, .not_bottom_row ld hl, SPRITEANIMSTRUCT_0C add hl, bc ld a, [hl] cp $3 jr c, .case_switch cp $6 jr c, .delete ld a, $3 ret .case_switch ld a, $1 ret .delete ld a, $2 ret .not_bottom_row xor a ret NamingScreen_AnimateCursor: ; 11a3b (4:5a3b) call .GetDPad ld hl, SPRITEANIMSTRUCT_0D add hl, bc ld a, [hl] ld e, a swap e ld hl, SPRITEANIMSTRUCT_YOFFSET add hl, bc ld [hl], e ld d, $4 call NamingScreen_IsTargetBox jr nz, .ok inc d .ok cp d ld de, .LetterEntries ld a, $0 jr nz, .ok2 ld de, .CaseDelEnd ld a, $1 .ok2 ld hl, SPRITEANIMSTRUCT_0E add hl, bc add [hl] ld hl, SPRITEANIMSTRUCT_FRAMESET_ID add hl, bc ld [hl], a ld hl, SPRITEANIMSTRUCT_0C add hl, bc ld l, [hl] ld h, $0 add hl, de ld a, [hl] ld hl, SPRITEANIMSTRUCT_XOFFSET add hl, bc ld [hl], a ret ; 11a79 (4:5a79) .LetterEntries: ; 11a79 db $00, $10, $20, $30, $40, $50, $60, $70, $80 .CaseDelEnd: ; 11a82 db $00, $00, $00, $30, $30, $30, $60, $60, $60 ; 11a8b .GetDPad: ; 11a8b (4:5a8b) ld hl, hJoyLast ld a, [hl] and D_UP jr nz, .up ld a, [hl] and D_DOWN jr nz, .down ld a, [hl] and D_LEFT jr nz, .left ld a, [hl] and D_RIGHT jr nz, .right ret .right call NamingScreen_GetCursorPosition and a jr nz, .asm_11ab7 ld hl, SPRITEANIMSTRUCT_0C add hl, bc ld a, [hl] cp $8 jr nc, .asm_11ab4 inc [hl] ret .asm_11ab4 ld [hl], $0 ret .asm_11ab7 cp $3 jr nz, .asm_11abc xor a .asm_11abc ld e, a add a add e ld hl, SPRITEANIMSTRUCT_0C add hl, bc ld [hl], a ret .left call NamingScreen_GetCursorPosition and a jr nz, .asm_11ad8 ld hl, SPRITEANIMSTRUCT_0C add hl, bc ld a, [hl] and a jr z, .asm_11ad5 dec [hl] ret .asm_11ad5 ld [hl], $8 ret .asm_11ad8 cp $1 jr nz, .asm_11ade ld a, $4 .asm_11ade dec a dec a ld e, a add a add e ld hl, SPRITEANIMSTRUCT_0C add hl, bc ld [hl], a ret .down ld hl, SPRITEANIMSTRUCT_0D add hl, bc ld a, [hl] call NamingScreen_IsTargetBox jr nz, .asm_11af9 cp $5 jr nc, .asm_11aff inc [hl] ret .asm_11af9 cp $4 jr nc, .asm_11aff inc [hl] ret .asm_11aff ld [hl], $0 ret .up ld hl, SPRITEANIMSTRUCT_0D add hl, bc ld a, [hl] and a jr z, .asm_11b0c dec [hl] ret .asm_11b0c ld [hl], $4 call NamingScreen_IsTargetBox ret nz inc [hl] ret NamingScreen_TryAddCharacter: ; 11b14 (4:5b14) ld a, [wNamingScreenLastCharacter] ; lost MailComposition_TryAddCharacter: ; 11b17 (4:5b17) ld a, [wNamingScreenMaxNameLength] ld c, a ld a, [wNamingScreenCurrNameLength] cp c ret nc ld a, [wNamingScreenLastCharacter] NamingScreen_LoadNextCharacter: ; 11b23 call NamingScreen_GetTextCursorPosition ld [hl], a NamingScreen_AdvanceCursor_CheckEndOfString: ; 11b27 ld hl, wNamingScreenCurrNameLength inc [hl] call NamingScreen_GetTextCursorPosition ld a, [hl] cp "@" jr z, .end_of_string ld [hl], $f2 and a ret .end_of_string scf ret ; 11b39 (4:5b39) ; XXX ld a, [wNamingScreenCurrNameLength] and a ret z push hl ld hl, wNamingScreenCurrNameLength dec [hl] call NamingScreen_GetTextCursorPosition ld c, [hl] pop hl .loop ld a, [hli] cp $ff jr z, NamingScreen_AdvanceCursor_CheckEndOfString cp c jr z, .done inc hl jr .loop .done ld a, [hl] jr NamingScreen_LoadNextCharacter ; 11b56 Dakutens: ; Dummied out db "かが", "きぎ", "くぐ", "けげ", "こご" db "さざ", "しじ", "すず", "せぜ", "そぞ" db "ただ", "ちぢ", "つづ", "てで", "とど" db "はば", "ひび", "ふぶ", "へべ", "ほぼ" db "カガ", "キギ", "クグ", "ケゲ", "コゴ" db "サザ", "シジ", "スズ", "セゼ", "ソゾ" db "タダ", "チヂ", "ツヅ", "テデ", "トド" db "ハバ", "ヒビ", "フブ", "へべ", "ホボ" db $ff Handakutens: ; Dummied out db "はぱ", "ひぴ", "ふぷ", "へぺ", "ほぽ" db "ハパ", "ヒピ", "フプ", "へぺ", "ホポ" db $ff ; 11bbc NamingScreen_DeleteCharacter: ; 11bbc (4:5bbc) ld hl, wNamingScreenCurrNameLength ld a, [hl] and a ret z dec [hl] call NamingScreen_GetTextCursorPosition ld [hl], $f2 inc hl ld a, [hl] cp $f2 ret nz ld [hl], $eb ret NamingScreen_GetTextCursorPosition: ; 11bd0 (4:5bd0) push af ld hl, wNamingScreenDestinationPointer ld a, [hli] ld h, [hl] ld l, a ld a, [wNamingScreenCurrNameLength] ld e, a ld d, 0 add hl, de pop af ret ; 11be0 NamingScreen_InitNameEntry: ; 11be0 ; load $f2, ($eb * [wNamingScreenMaxNameLength]), $50 into the dw address at wNamingScreenDestinationPointer ld hl, wNamingScreenDestinationPointer ld a, [hli] ld h, [hl] ld l, a ld [hl], $f2 inc hl ld a, [wNamingScreenMaxNameLength] dec a ld c, a ld a, $eb .loop ld [hli], a dec c jr nz, .loop ld [hl], "@" ret ; 11bf7 NamingScreen_StoreEntry: ; 11bf7 (4:5bf7) ld hl, wNamingScreenDestinationPointer ld a, [hli] ld h, [hl] ld l, a ld a, [wNamingScreenMaxNameLength] ld c, a .loop ld a, [hl] cp $eb jr z, .terminator cp $f2 jr nz, .not_terminator .terminator ld [hl], "@" .not_terminator inc hl dec c jr nz, .loop ret NamingScreen_GetLastCharacter: ; 11c11 (4:5c11) ld hl, wNamingScreenCursorObjectPointer ld c, [hl] inc hl ld b, [hl] ld hl, SPRITEANIMSTRUCT_XOFFSET add hl, bc ld a, [hl] ld hl, SPRITEANIMSTRUCT_XCOORD add hl, bc add [hl] sub $8 srl a srl a srl a ld e, a ld hl, SPRITEANIMSTRUCT_YOFFSET add hl, bc ld a, [hl] ld hl, SPRITEANIMSTRUCT_YCOORD add hl, bc add [hl] sub $10 srl a srl a srl a ld d, a hlcoord 0, 0 ld bc, SCREEN_WIDTH .loop ld a, d and a jr z, .done add hl, bc dec d jr .loop .done add hl, de ld a, [hl] ld [wNamingScreenLastCharacter], a ret LoadNamingScreenGFX: ; 11c51 call ClearSprites callab ClearSpriteAnims call LoadStandardFont call LoadFontsExtra ld de, NamingScreenGFX_MiddleLine ld hl, VTiles1 tile $6b lb bc, BANK(NamingScreenGFX_MiddleLine), 1 call Get1bpp ld de, NamingScreenGFX_UnderLine ld hl, VTiles1 tile $72 lb bc, BANK(NamingScreenGFX_UnderLine), 1 call Get1bpp ld de, VTiles2 tile $60 ld hl, NamingScreenGFX_Border ld bc, 1 tiles ld a, BANK(NamingScreenGFX_Border) call FarCopyBytes ld de, VTiles0 tile $7e ld hl, NamingScreenGFX_Cursor ld bc, 2 tiles ld a, BANK(NamingScreenGFX_Cursor) call FarCopyBytes ld a, $5 ld hl, wSpriteAnimDict + 9 * 2 ld [hli], a ld [hl], $7e xor a ld [hSCY], a ld [wGlobalAnimYOffset], a ld [hSCX], a ld [wGlobalAnimXOffset], a ld [wJumptableIndex], a ld [wcf64], a ld [hBGMapMode], a ld [wNamingScreenCurrNameLength], a ld a, $7 ld [hWX], a ret ; 11cb7 NamingScreenGFX_Border: ; 11cb7 INCBIN "gfx/unknown/011cb7.2bpp" ; 11cc7 NamingScreenGFX_Cursor: ; 11cc7 INCBIN "gfx/unknown/011cc7.2bpp" ; 11ce7 NameInputLower: db "a b c d e f g h i" db "j k l m n o p q r" db "s t u v w x y z " db "× ( ) : ; [ ] " db "UPPER DEL END " BoxNameInputLower: db "a b c d e f g h i" db "j k l m n o p q r" db "s t u v w x y z " db "é 'd 'l 'm 'r 's 't 'v 0" db "1 2 3 4 5 6 7 8 9" db "UPPER DEL END " NameInputUpper: db "A B C D E F G H I" db "J K L M N O P Q R" db "S T U V W X Y Z " db "- ? ! / . , " db "lower DEL END " BoxNameInputUpper: db "A B C D E F G H I" db "J K L M N O P Q R" db "S T U V W X Y Z " db "× ( ) : ; [ ] " db "- ? ! ♂ ♀ / . , &" db "lower DEL END " ; 11e5d GFX_11e5d: ; ???? INCBIN "gfx/unknown/011e5d.1bpp" ; 11e6d NamingScreenGFX_MiddleLine: INCBIN "gfx/unknown/011e65.1bpp" ; 11e6d NamingScreenGFX_UnderLine: ; 11e6d INCBIN "gfx/unknown/011e6d.1bpp" ; 11e75 _ComposeMailMessage: ; 11e75 (mail?) ld hl, wNamingScreenDestinationPointer ld [hl], e inc hl ld [hl], d ld a, [hMapAnims] push af xor a ld [hMapAnims], a ld a, [hInMenu] push af ld a, $1 ld [hInMenu], a call .InitBlankMail call DelayFrame .loop call .DoMailEntry jr nc, .loop pop af ld [hInMenu], a pop af ld [hMapAnims], a ret .InitBlankMail: ; 11e9a (4:5e9a) call ClearBGPalettes call DisableLCD call LoadNamingScreenGFX ld de, VTiles0 tile $00 ld hl, .MailIcon ld bc, 8 tiles ld a, BANK(.MailIcon) call FarCopyBytes xor a ld hl, wSpriteAnimDict ld [hli], a ld [hl], a ; init mail icon depixel 3, 2 ld a, SPRITE_ANIM_INDEX_00 call _InitSpriteAnimStruct ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID add hl, bc ld [hl], $0 call .InitCharset ld a, $e3 ld [rLCDC], a call .initwNamingScreenMaxNameLength ld b, SCGB_DIPLOMA call GetSGBLayout call WaitBGMap call WaitTop ld a, %11100100 call DmgToCgbBGPals ld a, %11100100 call DmgToCgbObjPal0 call NamingScreen_InitNameEntry ld hl, wNamingScreenDestinationPointer ld e, [hl] inc hl ld d, [hl] ld hl, $10 add hl, de ld [hl], $4e ret ; 11ef4 (4:5ef4) .MailIcon: ; 11ef4 INCBIN "gfx/icon/mail2.2bpp" ; 11f74 .initwNamingScreenMaxNameLength ; 11f74 (4:5f74) ld a, MAIL_MSG_LENGTH + 1 ld [wNamingScreenMaxNameLength], a ret ; 11f7a (4:5f7a) .Dummy: ; dummied out db "メールを かいてね@" ; 11f84 .InitCharset: ; 11f84 (4:5f84) call WaitTop hlcoord 0, 0 ld bc, 6 * SCREEN_WIDTH ld a, $60 ; border call ByteFill hlcoord 0, 6 ld bc, 12 * SCREEN_WIDTH ld a, " " call ByteFill hlcoord 1, 1 lb bc, 4, SCREEN_WIDTH - 2 call ClearBox ld de, MailEntry_Uppercase .PlaceMailCharset: ; 11fa9 (4:5fa9) hlcoord 1, 7 ld b, 6 .next ld c, SCREEN_WIDTH - 1 .loop_ ld a, [de] ld [hli], a inc de dec c jr nz, .loop_ push de ld de, SCREEN_WIDTH + 1 add hl, de pop de dec b jr nz, .next ret .DoMailEntry: ; 11fc0 (4:5fc0) call JoyTextDelay ld a, [wJumptableIndex] bit 7, a jr nz, .exit_mail call .DoJumptable callba PlaySpriteAnimationsAndDelayFrame call .Update call DelayFrame and a ret .exit_mail callab ClearSpriteAnims call ClearSprites xor a ld [hSCX], a ld [hSCY], a scf ret .Update: ; 11feb (4:5feb) xor a ld [hBGMapMode], a hlcoord 1, 1 lb bc, 4, 18 call ClearBox ld hl, wNamingScreenDestinationPointer ld e, [hl] inc hl ld d, [hl] hlcoord 2, 2 call PlaceString ld a, $1 ld [hBGMapMode], a ret .DoJumptable: ; 12008 (4:6008) ld a, [wJumptableIndex] ld e, a ld d, 0 ld hl, .Jumptable add hl, de add hl, de ld a, [hli] ld h, [hl] ld l, a jp hl .Jumptable: ; 12017 (4:6017) dw .init_blinking_cursor dw .process_joypad .init_blinking_cursor ; 1201b (4:601b) depixel 9, 2 ld a, SPRITE_ANIM_INDEX_09 call _InitSpriteAnimStruct ld a, c ld [wNamingScreenCursorObjectPointer], a ld a, b ld [wNamingScreenCursorObjectPointer + 1], a ld hl, SPRITEANIMSTRUCT_FRAMESET_ID add hl, bc ld a, [hl] ld hl, SPRITEANIMSTRUCT_0E add hl, bc ld [hl], a ld hl, wJumptableIndex inc [hl] ret .process_joypad ; 1203a (4:603a) ld hl, hJoyPressed ; $ffa7 ld a, [hl] and A_BUTTON jr nz, .a ld a, [hl] and B_BUTTON jr nz, .b ld a, [hl] and START jr nz, .start ld a, [hl] and SELECT jr nz, .select ret .a call NamingScreen_PressedA_GetCursorCommand cp $1 jr z, .select cp $2 jr z, .b cp $3 jr z, .finished call NamingScreen_GetLastCharacter call MailComposition_TryAddLastCharacter jr c, .start ld hl, wNamingScreenCurrNameLength ld a, [hl] cp $10 ret nz inc [hl] call NamingScreen_GetTextCursorPosition ld [hl], $f2 dec hl ld [hl], $4e ret .start ld hl, wNamingScreenCursorObjectPointer ld c, [hl] inc hl ld b, [hl] ld hl, SPRITEANIMSTRUCT_0C add hl, bc ld [hl], $9 ld hl, SPRITEANIMSTRUCT_0D add hl, bc ld [hl], $5 ret .b call NamingScreen_DeleteCharacter ld hl, wNamingScreenCurrNameLength ld a, [hl] cp $10 ret nz dec [hl] call NamingScreen_GetTextCursorPosition ld [hl], $f2 inc hl ld [hl], $4e ret .finished call NamingScreen_StoreEntry ld hl, wJumptableIndex set 7, [hl] ret .select ld hl, wcf64 ld a, [hl] xor $1 ld [hl], a jr nz, .switch_to_lowercase ld de, MailEntry_Uppercase call .PlaceMailCharset ret .switch_to_lowercase ld de, MailEntry_Lowercase call .PlaceMailCharset ret ; called from engine/sprite_anims.asm ComposeMail_AnimateCursor: ; 120c1 (4:60c1) call .GetDPad ld hl, SPRITEANIMSTRUCT_0D add hl, bc ld a, [hl] ld e, a swap e ld hl, SPRITEANIMSTRUCT_YOFFSET add hl, bc ld [hl], e cp $5 ld de, .LetterEntries ld a, 0 jr nz, .got_pointer ld de, .CaseDelEnd ld a, 1 .got_pointer ld hl, SPRITEANIMSTRUCT_0E add hl, bc add [hl] ld hl, SPRITEANIMSTRUCT_FRAMESET_ID add hl, bc ld [hl], a ld hl, SPRITEANIMSTRUCT_0C add hl, bc ld l, [hl] ld h, 0 add hl, de ld a, [hl] ld hl, SPRITEANIMSTRUCT_XOFFSET add hl, bc ld [hl], a ret ; 120f8 (4:60f8) .LetterEntries: ; 120f8 db $00, $10, $20, $30, $40, $50, $60, $70, $80, $90 .CaseDelEnd: ; 12102 db $00, $00, $00, $30, $30, $30, $60, $60, $60, $60 ; 1210c .GetDPad: ; 1210c (4:610c) ld hl, hJoyLast ld a, [hl] and D_UP jr nz, .up ld a, [hl] and D_DOWN jr nz, .down ld a, [hl] and D_LEFT jr nz, .left ld a, [hl] and D_RIGHT jr nz, .right ret .right call ComposeMail_GetCursorPosition and a jr nz, .case_del_done_right ld hl, SPRITEANIMSTRUCT_0C add hl, bc ld a, [hl] cp $9 jr nc, .wrap_around_letter_right inc [hl] ret .wrap_around_letter_right ld [hl], $0 ret .case_del_done_right cp $3 jr nz, .wrap_around_command_right xor a .wrap_around_command_right ld e, a add a add e ld hl, SPRITEANIMSTRUCT_0C add hl, bc ld [hl], a ret .left call ComposeMail_GetCursorPosition and a jr nz, .caps_del_done_left ld hl, SPRITEANIMSTRUCT_0C add hl, bc ld a, [hl] and a jr z, .wrap_around_letter_left dec [hl] ret .wrap_around_letter_left ld [hl], $9 ret .caps_del_done_left cp $1 jr nz, .wrap_around_command_left ld a, $4 .wrap_around_command_left dec a dec a ld e, a add a add e ld hl, SPRITEANIMSTRUCT_0C add hl, bc ld [hl], a ret .down ld hl, SPRITEANIMSTRUCT_0D add hl, bc ld a, [hl] cp $5 jr nc, .wrap_around_down inc [hl] ret .wrap_around_down ld [hl], $0 ret .up ld hl, SPRITEANIMSTRUCT_0D add hl, bc ld a, [hl] and a jr z, .wrap_around_up dec [hl] ret .wrap_around_up ld [hl], $5 ret NamingScreen_PressedA_GetCursorCommand: ; 12185 (4:6185) ld hl, wNamingScreenCursorObjectPointer ld c, [hl] inc hl ld b, [hl] ComposeMail_GetCursorPosition: ; 1218b (4:618b) ld hl, SPRITEANIMSTRUCT_0D add hl, bc ld a, [hl] cp $5 jr nz, .letter ld hl, SPRITEANIMSTRUCT_0C add hl, bc ld a, [hl] cp $3 jr c, .case cp $6 jr c, .del ld a, $3 ret .case ld a, $1 ret .del ld a, $2 ret .letter xor a ret MailComposition_TryAddLastCharacter: ; 121ac (4:61ac) ld a, [wNamingScreenLastCharacter] jp MailComposition_TryAddCharacter ; 121b2 (4:61b2) ; XXX ld a, [wNamingScreenCurrNameLength] and a ret z cp $11 jr nz, .asm_121c3 push hl ld hl, wNamingScreenCurrNameLength dec [hl] dec [hl] jr .asm_121c8 .asm_121c3 push hl ld hl, wNamingScreenCurrNameLength dec [hl] .asm_121c8 call NamingScreen_GetTextCursorPosition ld c, [hl] pop hl .asm_121cd ld a, [hli] cp $ff jp z, NamingScreen_AdvanceCursor_CheckEndOfString cp c jr z, .asm_121d9 inc hl jr .asm_121cd .asm_121d9 ld a, [hl] jp NamingScreen_LoadNextCharacter ; 121dd MailEntry_Uppercase: ; 122dd db "A B C D E F G H I J" db "K L M N O P Q R S T" db "U V W X Y Z , ? !" db "1 2 3 4 5 6 7 8 9 0" db " é ♂ ♀ ¥ … ×" db "lower DEL END " ; 1224f MailEntry_Lowercase: ; 1224f db "a b c d e f g h i j" db "k l m n o p q r s t" db "u v w x y z . - /" db "'d 'l 'm 'r 's 't 'v & ( )" db "<``> <''> [ ] ' : ; " db "UPPER DEL END " ; 122c1