ChoosePlayerName: call OakSpeechSlidePicRight ld de, DefaultNamesPlayer call DisplayIntroNameTextBox ld a, [wCurrentMenuItem] and a jr z, .customName ld hl, DefaultNamesPlayerList call GetDefaultName ld de, wPlayerName call OakSpeechSlidePicLeft jr .done .customName ld hl, wPlayerName xor a ; NAME_PLAYER_SCREEN ld [wNamingScreenType], a call DisplayNamingScreen ld a, [wcf4b] cp "@" jr z, .customName call ClearScreen call Delay3 ld de, RedPicFront ld b, BANK(RedPicFront) call IntroDisplayPicCenteredOrUpperRight .done ld hl, YourNameIsText jp PrintText YourNameIsText: text_far _YourNameIsText text_end ChooseRivalName: call OakSpeechSlidePicRight ld de, DefaultNamesRival call DisplayIntroNameTextBox ld a, [wCurrentMenuItem] and a jr z, .customName ld hl, DefaultNamesRivalList call GetDefaultName ld de, wRivalName call OakSpeechSlidePicLeft jr .done .customName ld hl, wRivalName ld a, NAME_RIVAL_SCREEN ld [wNamingScreenType], a call DisplayNamingScreen ld a, [wcf4b] cp "@" jr z, .customName call ClearScreen call Delay3 ld de, Rival1Pic ld b, $13 call IntroDisplayPicCenteredOrUpperRight .done ld hl, HisNameIsText jp PrintText HisNameIsText: text_far _HisNameIsText text_end OakSpeechSlidePicLeft: push de hlcoord 0, 0 lb bc, 12, 11 call ClearScreenArea ; clear the name list text box ld c, 10 call DelayFrames pop de ld hl, wcd6d ld bc, NAME_LENGTH call CopyData call Delay3 hlcoord 12, 4 lb de, 6, 6 * SCREEN_WIDTH + 5 ld a, $ff jr OakSpeechSlidePicCommon OakSpeechSlidePicRight: hlcoord 5, 4 lb de, 6, 6 * SCREEN_WIDTH + 5 xor a OakSpeechSlidePicCommon: push hl push de push bc ldh [hSlideDirection], a ld a, d ldh [hSlideAmount], a ld a, e ldh [hSlidingRegionSize], a ld c, a ldh a, [hSlideDirection] and a jr nz, .next ; If sliding right, point hl to the end of the pic's tiles. ld d, 0 add hl, de .next ld d, h ld e, l .loop xor a ldh [hAutoBGTransferEnabled], a ldh a, [hSlideDirection] and a jr nz, .slideLeft ; sliding right ld a, [hli] ld [hld], a dec hl jr .next2 .slideLeft ld a, [hld] ld [hli], a inc hl .next2 dec c jr nz, .loop ldh a, [hSlideDirection] and a jr z, .next3 ; If sliding left, we need to zero the last tile in the pic (there is no need ; to take a corresponding action when sliding right because hl initially points ; to a 0 tile in that case). xor a dec hl ld [hl], a .next3 ld a, 1 ldh [hAutoBGTransferEnabled], a call Delay3 ldh a, [hSlidingRegionSize] ld c, a ld h, d ld l, e ldh a, [hSlideDirection] and a jr nz, .slideLeft2 inc hl jr .next4 .slideLeft2 dec hl .next4 ld d, h ld e, l ldh a, [hSlideAmount] dec a ldh [hSlideAmount], a jr nz, .loop pop bc pop de pop hl ret DisplayIntroNameTextBox: push de hlcoord 0, 0 ld b, $a ld c, $9 call TextBoxBorder hlcoord 3, 0 ld de, .namestring call PlaceString pop de hlcoord 2, 2 call PlaceString call UpdateSprites xor a ld [wCurrentMenuItem], a ld [wLastMenuItem], a inc a ld [wTopMenuItemX], a ld [wMenuWatchedKeys], a ; A_BUTTON inc a ld [wTopMenuItemY], a inc a ld [wMaxMenuItem], a jp HandleMenuInput .namestring db "NAME@" INCLUDE "data/player_names.asm" GetDefaultName: ; a = name index ; hl = name list ld b, a ld c, 0 .loop ld d, h ld e, l .innerLoop ld a, [hli] cp "@" jr nz, .innerLoop ld a, b cp c jr z, .foundName inc c jr .loop .foundName ld h, d ld l, e ld de, wcd6d ld bc, NAME_BUFFER_LENGTH jp CopyData INCLUDE "data/player_names_list.asm" LinkMenuEmptyText: text_end