mirror of
https://github.com/pret/pokegold-spaceworld.git
synced 2026-03-26 12:05:22 -05:00
1050 lines
17 KiB
NASM
1050 lines
17 KiB
NASM
INCLUDE "constants.asm"
|
|
|
|
SECTION "engine/menu/text_entry.asm@naming", ROMX
|
|
|
|
NAMINGSCREEN_UNDERSCORE EQU "♀"
|
|
NAMINGSCREEN_HYPHEN EQU "♂"
|
|
NAMINGSCREEN_END EQU $F0
|
|
|
|
NamingScreen: ; 04:53F4
|
|
ld hl, wNamingScreenDestinationPointer
|
|
ld [hl], e
|
|
inc hl
|
|
ld [hl], d
|
|
ld hl, wNamingScreenType
|
|
ld [hl], b
|
|
ld hl, wce5f
|
|
ld a, [hl]
|
|
push af
|
|
set 4, [hl]
|
|
ldh a, [hMapAnims]
|
|
push af
|
|
xor a
|
|
ldh [hMapAnims], a
|
|
ldh a, [hJoyDebounceSrc]
|
|
push af
|
|
ld a, $01
|
|
ldh [hJoyDebounceSrc], a
|
|
call .SetUpNamingScreen
|
|
call DelayFrame
|
|
.loop
|
|
call NamingScreenJoypadLoop
|
|
jr nc, .loop
|
|
|
|
pop af
|
|
ldh [hJoyDebounceSrc], a
|
|
pop af
|
|
ldh [hMapAnims], a
|
|
pop af
|
|
ld [wce5f], a
|
|
call ClearJoypad
|
|
ret
|
|
|
|
.SetUpNamingScreen: ; 04:542B
|
|
call ClearBGPalettes
|
|
ld b, SGB_DIPLOMA
|
|
call GetSGBLayout
|
|
call DisableLCD
|
|
call LoadNamingScreenGFX
|
|
call NamingScreen_InitText
|
|
ld a, $E3
|
|
ldh [rLCDC], a
|
|
call GetNamingScreenSetup
|
|
call WaitBGMap
|
|
call WaitForAutoBgMapTransfer
|
|
ld a, $90
|
|
ldh [rBGP], a
|
|
ld a, $D0
|
|
ldh [rOBP0], a
|
|
call NamingScreenInitNameEntry
|
|
ret
|
|
|
|
GetNamingScreenSetup: ; 04:5455
|
|
; wNamingScreenType selects which entry in the table below to jump to
|
|
ld a, [wNamingScreenType]
|
|
and $07
|
|
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: ; 04:5466
|
|
dw .Pokemon
|
|
dw .Player
|
|
dw .Rival
|
|
dw .Mom
|
|
dw .Box
|
|
dw .Pokemon
|
|
dw .Pokemon
|
|
dw .Pokemon
|
|
|
|
.Pokemon: ; 04:5476
|
|
ld hl, Function8f0e3
|
|
ld a, BANK(Function8f0e3)
|
|
ld e, 1
|
|
call FarCall_hl
|
|
call GetPokemonName
|
|
hlcoord 5, 2
|
|
call PlaceString
|
|
ld l, c
|
|
ld h, b
|
|
ld de, .NicknameText
|
|
call PlaceString
|
|
call .StoreSpriteIconParams
|
|
ret
|
|
|
|
.NicknameText ; 04:5495
|
|
db "のニックネームは?@"
|
|
|
|
.Player: ; 04:549F
|
|
ld de, GoldSpriteGFX
|
|
call .LoadSprite
|
|
hlcoord 5, 2
|
|
ld de, .NameText
|
|
call PlaceString
|
|
call .StoreSpriteIconParams
|
|
ret
|
|
|
|
.NameText: ; 04:54B2
|
|
db "あなた の なまえは?@"
|
|
|
|
.Rival: ; 04:54BE
|
|
ld de, SilverSpriteGFX
|
|
call .LoadSprite
|
|
hlcoord 5, 2
|
|
ld de, .RivalText
|
|
call PlaceString
|
|
call .StoreSpriteIconParams
|
|
ret
|
|
|
|
.RivalText: ; 04:54D1
|
|
; the ret just preceeding this would make the first word Rival.
|
|
db "ライバル の なまえは?@"
|
|
|
|
.Mom: ; 04:54DE
|
|
ld de, MomSpriteGFX
|
|
call .LoadSprite
|
|
hlcoord 5, 2
|
|
ld de, .MomText
|
|
call PlaceString
|
|
call .StoreSpriteIconParams
|
|
ret
|
|
|
|
.MomText: ; 04:54F1
|
|
db "ははおや の なまえは?@"
|
|
|
|
.Box: ; 04:54FE
|
|
ld de, PokeBallSpriteGFX
|
|
ld hl, vChars0
|
|
lb bc, BANK(PokeBallSpriteGFX), $04
|
|
call Request2bpp
|
|
ld a, $08
|
|
ld hl, wTileMapBackup
|
|
ld [hl+], a
|
|
ld [hl], $00
|
|
ld de, $2420
|
|
ld a, $41
|
|
call InitSpriteAnimStruct
|
|
ld hl, $0001
|
|
add hl, bc
|
|
ld [hl], $00
|
|
hlcoord 5, 2
|
|
ld de, .BoxText
|
|
call PlaceString
|
|
call .StoreBoxIconParams
|
|
ret
|
|
|
|
.BoxText: ; 04:552D
|
|
db "バンク の なまえは?@"
|
|
|
|
.LoadSprite: ; 04:5539
|
|
; copies the sprite at de into the top of VRAM, as well as the sprite $C0 after de
|
|
push de
|
|
ld hl, vChars0
|
|
lb bc, BANK(GoldSpriteGFX), $04
|
|
call Request2bpp
|
|
pop de
|
|
ld hl, $00C0
|
|
add hl, de
|
|
ld e, l
|
|
ld d, h
|
|
ld hl, vChars0 tile 4
|
|
lb bc, BANK(GoldSpriteGFX), $04
|
|
call Request2bpp
|
|
ld a, $08
|
|
ld hl, wTileMapBackup
|
|
ld [hli], a
|
|
ld [hl], $00
|
|
ld de, $2420
|
|
ld a, $41
|
|
call InitSpriteAnimStruct
|
|
ret
|
|
|
|
.StoreSpriteIconParams: ; 04:5564
|
|
ld a, $05
|
|
ld [wNamingScreenMaxNameLength], a
|
|
hlcoord 6, 5
|
|
ld a, l
|
|
ld [wNamingScreenStringEntryCoordY], a
|
|
ld a, h
|
|
ld [wNamingScreenStringEntryCoordX], a
|
|
ret
|
|
|
|
.StoreBoxIconParams: ; 04:5575
|
|
ld a, $08
|
|
ld [wNamingScreenMaxNameLength], a
|
|
hlcoord 5, 5
|
|
ld a, l
|
|
ld [wNamingScreenStringEntryCoordY], a
|
|
ld a, h
|
|
ld [wNamingScreenStringEntryCoordX], a
|
|
ret
|
|
|
|
NamingScreen_InitText: ; 04:5586
|
|
; fills the tilemap with ■, then clears a 12x17 box at 1,1
|
|
; next it places the tiles at 04:58B3 onto the screen at 2,9 (tiles form an 11x8 box)
|
|
call WaitForAutoBgMapTransfer
|
|
hlcoord 0, 0
|
|
ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
|
|
ld a, "■"
|
|
call ByteFill
|
|
hlcoord 1, 1
|
|
lb bc, $07, $12
|
|
call ClearBox
|
|
hlcoord 1, 9
|
|
lb bc, $08, $12
|
|
call ClearBox
|
|
hlcoord 2, 9
|
|
ld de, TextEntryChars
|
|
ld b, $08
|
|
|
|
.outerloop
|
|
ld c, $11
|
|
|
|
.innerloop
|
|
ld a, [de]
|
|
ld [hl+], a
|
|
inc de
|
|
dec c
|
|
jr nz, .innerloop
|
|
|
|
inc hl
|
|
inc hl
|
|
inc hl
|
|
dec b
|
|
jr nz, .outerloop
|
|
ret
|
|
|
|
|
|
NamingScreenJoypadLoop: ; 04:55BD
|
|
call GetJoypadDebounced
|
|
ld a, [wJumptableIndex]
|
|
bit 7, a
|
|
jr nz, .leap
|
|
call .RunJumpTable
|
|
callba PlaySpriteAnimationsAndDelayFrame
|
|
call .UpdateStringEntry
|
|
call DelayFrame
|
|
and a
|
|
ret
|
|
|
|
.leap ; 04:55DA
|
|
; kills sprites and resets screen position
|
|
callab InitEffectObject
|
|
call ClearSprites
|
|
xor a
|
|
ldh [hSCX], a
|
|
ldh [hSCY], a
|
|
scf
|
|
ret
|
|
|
|
.UpdateStringEntry: ; 04:55EC
|
|
; sets BGMapMode to 0, then loads a string and coords out of a buffer and displays it.
|
|
; BGMapMode is then set to 1.
|
|
xor a
|
|
ldh [hBGMapMode], a
|
|
hlcoord 1, 3
|
|
lb bc, $05, $12
|
|
call ClearBox
|
|
ld hl, wNamingScreenDestinationPointer
|
|
ld e, [hl]
|
|
inc hl
|
|
ld d, [hl]
|
|
ld hl, wNamingScreenStringEntryCoordY
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
call PlaceString
|
|
ld a, $01
|
|
ldh [hBGMapMode], a
|
|
ret
|
|
|
|
.RunJumpTable: ; 04:560C
|
|
ld a, [wJumptableIndex]
|
|
ld e, a
|
|
ld d, $00
|
|
ld hl, .JumpTable
|
|
add hl, de
|
|
add hl, de
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
jp hl
|
|
|
|
.JumpTable: ; 04:561B
|
|
dw .InitCursor
|
|
dw .ReadButtons
|
|
|
|
.InitCursor: ; 04:561F
|
|
ld de, $5818
|
|
ld a, $39
|
|
call InitSpriteAnimStruct
|
|
ld a, c
|
|
ld [wNamingScreenCursorObjectPointer], a
|
|
ld a, b
|
|
ld [wNamingScreenCursorObjectPointer + 1], a
|
|
ld hl, wJumptableIndex
|
|
inc [hl]
|
|
ret
|
|
|
|
.ReadButtons: ; 04:5634
|
|
; if A or B were pressed, clear hJoypadSum after calling functions; if start, set 7 in the jumptable??
|
|
ld hl, hJoypadSum
|
|
ld a, [hl]
|
|
and A_BUTTON
|
|
jr nz, .jumpa
|
|
ld a, [hl]
|
|
and B_BUTTON
|
|
jr nz, .jumpb
|
|
ld a, [hl]
|
|
and START
|
|
jr nz, .jumpstart
|
|
ret
|
|
|
|
.jumpa ; 04:5647
|
|
call NamingScreenGetLastCharacter
|
|
cp NAMINGSCREEN_END
|
|
jr z, .jumpstart
|
|
call NamingScreenTryAddCharacter
|
|
xor a
|
|
ldh [hJoypadSum], a
|
|
ret
|
|
|
|
.jumpb ; 04:5655
|
|
call NamingScreenDeleteCharacter
|
|
xor a
|
|
ldh [hJoypadSum], a
|
|
ret
|
|
|
|
.jumpstart ; 04:565C
|
|
call NamingScreenStoreEntry
|
|
ld hl, wJumptableIndex
|
|
set 7, [hl]
|
|
ret
|
|
|
|
.GetDPad: ; 04:5665
|
|
ld hl, hJoySum
|
|
ld a, [hl]
|
|
and D_UP
|
|
jr nz, .upjump
|
|
ld a, [hl]
|
|
and D_DOWN
|
|
jr nz, .downjump
|
|
ld a, [hl]
|
|
and D_LEFT
|
|
jr nz, .leftjump
|
|
ld a, [hl]
|
|
and D_RIGHT
|
|
jr nz, .rightjump
|
|
ret
|
|
|
|
.rightjump ; 04:567D
|
|
ld hl, $000C
|
|
add hl, bc
|
|
ld a, [hl]
|
|
cp $0E
|
|
jr nc, .skip1
|
|
inc [hl]
|
|
jr .escape
|
|
|
|
.skip1
|
|
ld [hl], $00
|
|
jr .escape
|
|
|
|
.leftjump
|
|
ld hl, $000C
|
|
add hl, bc
|
|
ld a, [hl]
|
|
and a
|
|
jr z, .skip2
|
|
dec [hl]
|
|
jr .escape
|
|
.skip2
|
|
ld [hl], $0E
|
|
jr .escape
|
|
|
|
.downjump
|
|
ld hl, $000D
|
|
add hl, bc
|
|
ld a, [hl]
|
|
cp $07
|
|
jr nc, .skip3
|
|
inc [hl]
|
|
jr .escape
|
|
.skip3
|
|
ld [hl], $00
|
|
jr .escape
|
|
|
|
.upjump ; 04:56AC :24
|
|
ld hl, $000D
|
|
add hl, bc
|
|
ld a, [hl]
|
|
and a
|
|
jr z, .skip4
|
|
dec [hl]
|
|
jr .escape
|
|
.skip4
|
|
ld [hl], $07
|
|
jr .escape
|
|
.escape
|
|
ld hl, $000C
|
|
add hl, bc
|
|
ld e, [hl]
|
|
ld d, $00
|
|
ld hl, LetterOffsetsTable1
|
|
add hl, de
|
|
ld a, [hl]
|
|
ld hl, $0006
|
|
add hl, bc
|
|
ld [hl], a
|
|
ld hl, $000D
|
|
add hl, bc
|
|
ld e, [hl]
|
|
ld d, $00
|
|
ld hl, LetterOffsetsTable2
|
|
add hl, de
|
|
ld a, [hl]
|
|
ld hl, $0007
|
|
add hl, bc
|
|
ld [hl], a
|
|
ret
|
|
|
|
LetterOffsetsTable1: ; 04:56DE
|
|
db $00, $08, $10, $18, $20, $30, $38, $40, $48, $50, $60, $68, $70, $78, $80
|
|
|
|
LetterOffsetsTable2:; 04:56ED
|
|
db $00, $08, $10, $18, $20, $28, $30, $38
|
|
|
|
NamingScreenTryAddCharacter: ; 04:56F5
|
|
ld a, [wNamingScreenLastCharacter]
|
|
ld hl, Dakutens
|
|
cp "゙"
|
|
jr z, .jump
|
|
ld hl, Handakutens
|
|
cp "゚"
|
|
jr z, .jump
|
|
ld a, [wNamingScreenMaxNameLength]
|
|
ld c, a
|
|
ld a, [wNamingScreenCurNameLength]
|
|
cp c
|
|
ret nc
|
|
ld a, [wNamingScreenLastCharacter]
|
|
call NamingScreenGetTextCursorPosition
|
|
ld [hl], a
|
|
ld hl, wNamingScreenCurNameLength
|
|
inc [hl]
|
|
call NamingScreenGetTextCursorPosition
|
|
ld a, [hl]
|
|
cp "@"
|
|
ret z
|
|
ld [hl], NAMINGSCREEN_UNDERSCORE
|
|
ret
|
|
|
|
.jump ; 04:5724
|
|
ld a, [wNamingScreenCurNameLength]
|
|
and a
|
|
ret z
|
|
push hl
|
|
ld hl, wNamingScreenCurNameLength
|
|
dec [hl]
|
|
call NamingScreenGetTextCursorPosition
|
|
ld c, [hl]
|
|
pop hl
|
|
.loop
|
|
ld a, [hli]
|
|
cp $FF
|
|
jr z, .notherjump
|
|
cp c
|
|
jr z, .skip
|
|
inc hl
|
|
jr .loop
|
|
.skip
|
|
ld a, [hl]
|
|
call NamingScreenGetTextCursorPosition
|
|
ld [hl], a
|
|
.notherjump
|
|
ld hl, wNamingScreenCurNameLength
|
|
inc [hl]
|
|
ret
|
|
|
|
Dakutens: ; 04:5748
|
|
db "かがきぎくぐけげこご"
|
|
db "さざしじすずせぜそぞ"
|
|
db "ただちぢつづてでとど"
|
|
db "はばひびふぶへべほぼ"
|
|
db "カガキギクグケゲコゴ"
|
|
db "サザシジスズセゼソゾ"
|
|
db "タダチヂツヅテデトド"
|
|
db "ハバヒビフブへべホボ"
|
|
db $FF
|
|
|
|
Handakutens: ; 04:5799
|
|
db "はぱひぴふぷへぺほぽ"
|
|
db "ハパヒピフプへぺホポ"
|
|
db $FF
|
|
|
|
NamingScreenDeleteCharacter: ; 04:57AE
|
|
ld hl, wNamingScreenCurNameLength
|
|
ld a, [hl]
|
|
and a
|
|
ret z
|
|
dec [hl]
|
|
call NamingScreenGetTextCursorPosition
|
|
ld [hl], NAMINGSCREEN_UNDERSCORE
|
|
inc hl
|
|
ld a, [hl]
|
|
cp NAMINGSCREEN_UNDERSCORE
|
|
ret nz
|
|
ld [hl], NAMINGSCREEN_HYPHEN
|
|
ret
|
|
|
|
NamingScreenGetTextCursorPosition: ; 04:57C2
|
|
push af
|
|
ld hl, wNamingScreenDestinationPointer
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
ld a, [wNamingScreenCurNameLength]
|
|
ld e, a
|
|
ld d, $00
|
|
add hl, de
|
|
pop af
|
|
ret
|
|
|
|
NamingScreenInitNameEntry: ; 04:57D2
|
|
ld hl, wNamingScreenDestinationPointer
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
ld [hl], NAMINGSCREEN_UNDERSCORE
|
|
inc hl
|
|
ld a, [wNamingScreenMaxNameLength]
|
|
dec a
|
|
ld c, a
|
|
ld a, NAMINGSCREEN_HYPHEN
|
|
.loop
|
|
ld [hli], a
|
|
dec c
|
|
jr nz, .loop
|
|
ld [hl], "@"
|
|
ret
|
|
|
|
NamingScreenStoreEntry: ; 04:57E9
|
|
ld hl, wNamingScreenDestinationPointer
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
ld a, [wNamingScreenMaxNameLength]
|
|
ld c, a
|
|
.loop
|
|
ld a, [hl]
|
|
cp NAMINGSCREEN_HYPHEN
|
|
jr z, .terminator
|
|
cp NAMINGSCREEN_UNDERSCORE
|
|
jr nz, .notterminator
|
|
.terminator
|
|
ld [hl], "@"
|
|
.notterminator
|
|
inc hl
|
|
dec c
|
|
jr nz, .loop
|
|
ret
|
|
|
|
NamingScreenGetLastCharacter: ; 04:5803
|
|
ld hl, wNamingScreenCursorObjectPointer
|
|
ld c, [hl]
|
|
inc hl
|
|
ld b, [hl]
|
|
ld hl, $0006
|
|
add hl, bc
|
|
ld a, [hl]
|
|
ld hl, $0004
|
|
add hl, bc
|
|
add a, [hl]
|
|
sub $08
|
|
srl a
|
|
srl a
|
|
srl a
|
|
ld e, a
|
|
ld hl, $0007
|
|
add hl, bc
|
|
ld a, [hl]
|
|
ld hl, $0005
|
|
add hl, bc
|
|
add a, [hl]
|
|
sub $10
|
|
srl a
|
|
srl a
|
|
srl a
|
|
ld d, a
|
|
hlcoord 0, 0
|
|
ld bc, $0014
|
|
.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: ; 04:5843
|
|
call ClearSprites
|
|
callab InitEffectObject
|
|
call LoadFont
|
|
|
|
ld de, TextScreenGFX_End
|
|
ld hl, vChars1 tile $70
|
|
lb bc, BANK(TextScreenGFX_End), 1
|
|
call Get1bpp
|
|
|
|
ld de, TextScreenGFX_Hyphen
|
|
ld hl, vChars1 tile $6F
|
|
lb bc, BANK(TextScreenGFX_Hyphen), 1
|
|
call Get1bpp
|
|
|
|
ld de, TextScreenGFX_Underscore
|
|
ld hl, vChars1 tile $75
|
|
lb bc, BANK(TextScreenGFX_Underscore), 1
|
|
call Get1bpp
|
|
|
|
ld de, vChars2 tile $60
|
|
ld hl, TrainerCardGFX
|
|
ld bc, $10
|
|
ld a, BANK(TrainerCardGFX)
|
|
call FarCopyData
|
|
|
|
ld de, vChars0 tile $7f
|
|
ld hl, PokedexBorderGFX
|
|
ld bc, $10
|
|
ld a, BANK(PokedexBorderGFX)
|
|
call FarCopyData
|
|
|
|
ld a, $26
|
|
ld hl, wc41a
|
|
ld [hli], a
|
|
ld [hl], $7F
|
|
xor a
|
|
ldh [hSCY], a
|
|
ld [wc4c7], a
|
|
ldh [hSCX], a
|
|
ld [wc4c8], a
|
|
ld [wJumptableIndex], a
|
|
ldh [hBGMapMode], a
|
|
ld [wNamingScreenCurNameLength], a
|
|
ldh [hJoypadSum], a
|
|
ld a, $07
|
|
ldh [hWX], a
|
|
ret
|
|
|
|
SECTION "engine/menu/text_entry.asm@mail", ROMX
|
|
|
|
ComposeMailMessage: ; 04:59EB
|
|
ld hl, wNamingScreenDestinationPointer
|
|
ld [hl], e
|
|
inc hl
|
|
ld [hl], d
|
|
ldh a, [hMapAnims]
|
|
push af
|
|
xor a
|
|
ldh [hMapAnims], a
|
|
ldh a, [hJoyDebounceSrc]
|
|
push af
|
|
ld a, 1
|
|
ldh [hJoyDebounceSrc], a
|
|
xor a
|
|
ld [wFlyDestination], a
|
|
.outerloop
|
|
call .firstruncheck
|
|
call DelayFrame
|
|
.innerloop
|
|
call DoMailEntry
|
|
jr nc, .innerloop
|
|
|
|
ld a, [wFlyDestination]
|
|
bit 7, a
|
|
jr nz, .outerloop
|
|
|
|
pop af
|
|
ldh [hJoyDebounceSrc], a
|
|
pop af
|
|
ldh [hMapAnims], a
|
|
ret
|
|
|
|
.firstruncheck; 04:5A1B
|
|
ld hl, wFlyDestination
|
|
ld a, [hl]
|
|
and 1
|
|
ld [hl], a
|
|
jr z, .skip
|
|
call SetupMail
|
|
ret
|
|
.skip
|
|
call .InitBlankMail
|
|
ret
|
|
|
|
.InitBlankMail: ; 04:5A2C
|
|
call ClearBGPalettes
|
|
ld b, 8 ;diploma?
|
|
call GetSGBLayout
|
|
call DisableLCD
|
|
call LoadNamingScreenGFX
|
|
ld de, vChars0
|
|
ld hl, MailIconGFX
|
|
ld bc, $0080
|
|
ld a, BANK(MailIconGFX)
|
|
call FarCopyData
|
|
ld a, 8
|
|
ld hl, wTileMapBackup
|
|
ld [hli], a
|
|
ld [hl], 0
|
|
ld de, $2420
|
|
ld a, 8
|
|
call InitSpriteAnimStruct
|
|
ld hl, $0002
|
|
add hl, bc
|
|
ld [hl], 0
|
|
ld de, $5818
|
|
ld a, $39
|
|
call InitSpriteAnimStruct
|
|
ld a, c
|
|
ld [wNamingScreenCursorObjectPointer], a
|
|
ld a, b
|
|
ld [wNamingScreenCursorObjectPointer + 1], a
|
|
call InitCharSet
|
|
ld a, $E3
|
|
ldh [rLCDC], a
|
|
call InitMailText
|
|
call WaitBGMap
|
|
call WaitForAutoBgMapTransfer
|
|
ld a, $90
|
|
ldh [rBGP], a
|
|
ld a, $E4
|
|
ldh [rOBP0], a
|
|
call NamingScreenInitNameEntry
|
|
ld hl, wNamingScreenDestinationPointer
|
|
ld e, [hl]
|
|
inc hl
|
|
ld d, [hl]
|
|
ld hl, $0010
|
|
add hl, de
|
|
ld [hl], "<NEXT>"
|
|
ret
|
|
|
|
InitMailText: ; 04:5A96
|
|
hlcoord 5, 2
|
|
ld de, MailPromptText
|
|
call PlaceString
|
|
ld a, $21
|
|
ld [wNamingScreenMaxNameLength], a
|
|
ret
|
|
|
|
MailPromptText: ; 04:5AA5
|
|
db "メールを かいてね@"
|
|
|
|
InitCharSet: ; 04:5AAF
|
|
call WaitForAutoBgMapTransfer
|
|
ld hl, wTileMap
|
|
lb bc, $01, $68
|
|
ld a, $60
|
|
call ByteFill
|
|
hlcoord 1, 1
|
|
lb bc, $07, $12
|
|
call ClearBox
|
|
hlcoord 1, 9
|
|
lb bc, $08, $12
|
|
call ClearBox
|
|
hlcoord 2, 9
|
|
ld de, TextEntryChars
|
|
ld b, $8
|
|
.outerloop
|
|
ld c, $11
|
|
.innerloop
|
|
ld a, [de]
|
|
ld [hli], a
|
|
inc de
|
|
dec c
|
|
jr nz, .innerloop
|
|
inc hl
|
|
inc hl
|
|
inc hl
|
|
dec b
|
|
jr nz, .outerloop
|
|
ret
|
|
|
|
DoMailEntry: ; 04:5AE6
|
|
call GetJoypadDebounced
|
|
ld a, [wJumptableIndex]
|
|
bit 7, a
|
|
jr nz, .exit_mail
|
|
ld a, [wFlyDestination]
|
|
bit 7, a
|
|
jr nz, .exit_mail
|
|
call .DoJumpTable
|
|
callba PlaySpriteAnimationsAndDelayFrame
|
|
call .Update
|
|
call DelayFrame
|
|
and a
|
|
ret
|
|
|
|
.exit_mail ; 04:5B0A
|
|
callab InitEffectObject
|
|
call ClearSprites
|
|
xor a
|
|
ldh [hSCX], a
|
|
ldh [hSCY], a
|
|
scf
|
|
ret
|
|
|
|
.Update: ; 04:5B1C
|
|
xor a
|
|
ldh [hBGMapMode], a
|
|
hlcoord 1, 3
|
|
lb bc, $04, $12
|
|
call ClearBox
|
|
ld hl, wNamingScreenDestinationPointer
|
|
ld e, [hl]
|
|
inc hl
|
|
ld d, [hl]
|
|
hlcoord 2, 4
|
|
call PlaceString
|
|
ld a, 1
|
|
ldh [hBGMapMode], a
|
|
ret
|
|
|
|
.DoJumpTable: ; 04:5B39
|
|
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: ; 04:5B48
|
|
dw .blinkcursor
|
|
dw .processjoypad
|
|
|
|
.blinkcursor ; 04:5B4C
|
|
ld hl, wJumptableIndex
|
|
inc [hl]
|
|
ret
|
|
|
|
.processjoypad; 04:5B51
|
|
ld hl, hJoypadSum
|
|
ld a, [hl]
|
|
and A_BUTTON
|
|
jr nz, .ajump
|
|
ld a, [hl]
|
|
and B_BUTTON
|
|
jr nz, .bjump
|
|
ld a, [hl]
|
|
and START
|
|
jr nz, .startjump
|
|
ld a, [hl]
|
|
and SELECT
|
|
jr nz, .selectjump
|
|
ret
|
|
|
|
.ajump ; 04:5B69
|
|
call NamingScreenGetLastCharacter
|
|
cp "円"
|
|
jr z, .startjump
|
|
call NamingScreenTryAddCharacter
|
|
xor a
|
|
ldh [hJoypadSum], a
|
|
ld hl, wNamingScreenCurNameLength
|
|
ld a, [hl]
|
|
cp $10 ; mail line length?
|
|
ret nz
|
|
inc [hl]
|
|
call NamingScreenGetTextCursorPosition
|
|
ld [hl], "♀"
|
|
dec hl
|
|
ld [hl], "<NEXT>"
|
|
ret
|
|
.bjump
|
|
call NamingScreenDeleteCharacter
|
|
xor a
|
|
ldh [hJoypadSum], a
|
|
ld hl, wNamingScreenCurNameLength
|
|
ld a, [hl]
|
|
cp $10
|
|
ret nz
|
|
dec [hl]
|
|
call NamingScreenGetTextCursorPosition
|
|
ld [hl], "♀"
|
|
inc hl
|
|
ld [hl], "<NEXT>"
|
|
ret
|
|
.startjump
|
|
call NamingScreenStoreEntry
|
|
ld hl, wJumptableIndex
|
|
set 7, [hl]
|
|
ret
|
|
.selectjump
|
|
ld hl, wFlyDestination
|
|
ld a, [hl]
|
|
xor 01
|
|
ld [hl], a
|
|
set 7, [hl]
|
|
ret
|
|
|
|
SECTION "engine/menu/text_entry.asm@mail2", ROMX
|
|
|
|
SetupMail: ; 04:5C31
|
|
call ClearBGPalettes
|
|
ld b, 8
|
|
call GetSGBLayout
|
|
call DisableLCD
|
|
call LoadNamingScreenGFX
|
|
ld de, vChars1
|
|
ld hl, BoldAlphabetGFX
|
|
ld bc, $2e tiles
|
|
ld a, BANK(BoldAlphabetGFX)
|
|
call FarCopyDataDouble
|
|
ld de, vChars0
|
|
ld hl, MailIconGFX
|
|
lb bc, $00, $80
|
|
ld a, BANK(MailIconGFX)
|
|
call FarCopyData
|
|
ld a, 8
|
|
ld hl, wTileMapBackup
|
|
ld [hli], a
|
|
ld [hl], 0
|
|
ld de, $2420
|
|
ld a, 8
|
|
call InitSpriteAnimStruct
|
|
ld hl, $0002
|
|
add hl, bc
|
|
ld [hl], 0
|
|
ld de, $6018
|
|
ld a, $40
|
|
call InitSpriteAnimStruct
|
|
ld a, c
|
|
ld [wNamingScreenCursorObjectPointer], a
|
|
ld a, b
|
|
ld [wNamingScreenCursorObjectPointer + 1], a
|
|
call DrawMail
|
|
ld a, $E3
|
|
ldh [rLCDC], a
|
|
call DrawMailLoadedText
|
|
call WaitBGMap
|
|
call WaitForAutoBgMapTransfer
|
|
ld a, $90
|
|
ldh [rBGP], a
|
|
ld a, $E4
|
|
ldh [rOBP0], a
|
|
call NamingScreenInitNameEntry
|
|
ld hl, wNamingScreenDestinationPointer
|
|
ld e, [hl]
|
|
inc hl
|
|
ld d, [hl]
|
|
ld hl, $0010
|
|
add hl, de
|
|
ld [hl], "<NEXT>"
|
|
ret
|
|
|
|
DrawMailLoadedText: ; 04:5CA9
|
|
hlcoord 5, 2
|
|
ld de, MailLoadedText
|
|
call PlaceString
|
|
ld a, $21
|
|
ld [wNamingScreenMaxNameLength], a
|
|
ret
|
|
|
|
MailLoadedText: ; 04:5CB8
|
|
db "スアケシ!!!@" ; should be "MAIL!!!" since the bold english font is loaded into vChars1
|
|
|
|
DrawMail: ; 04:5CC0
|
|
call WaitForAutoBgMapTransfer
|
|
hlcoord 0, 0
|
|
lb bc, $01, $68
|
|
ld a, "■"
|
|
call ByteFill
|
|
hlcoord 1, 1
|
|
lb bc, $07, $12
|
|
call ClearBox
|
|
hlcoord 1, 9
|
|
lb bc, $08, $12
|
|
call ClearBox
|
|
hlcoord 2, 10
|
|
ld a, $80
|
|
call DrawMailRow
|
|
hlcoord 2, 13
|
|
ld a, $A0
|
|
call DrawMailRow
|
|
hlcoord 2, 16
|
|
ld de, MailTextExtra
|
|
ld c, $10
|
|
call DrawMailTextExtra
|
|
ret
|
|
|
|
DrawMailRow: ; 04:5CFC
|
|
ld c, $07
|
|
call .loop
|
|
inc hl
|
|
inc hl
|
|
ld c, $07
|
|
call .loop
|
|
inc hl
|
|
inc hl
|
|
inc hl
|
|
inc hl
|
|
ld c, $07
|
|
call .loop
|
|
inc hl
|
|
inc hl
|
|
ld c, $05
|
|
|
|
.loop ; 04:5D15
|
|
ld [hli], a
|
|
inc a
|
|
dec c
|
|
jr nz, .loop
|
|
ret
|
|
|
|
DrawMailTextExtra: ; 04:5D1B
|
|
ld a, [de]
|
|
inc de
|
|
ld [hli], a
|
|
dec c
|
|
jr nz, DrawMailTextExtra
|
|
ret
|
|
|
|
MailTextExtra: ; 04:5D22
|
|
db "?!12345 67890ー円"
|
|
|