pokered/engine/menu/naming_screen.asm

512 lines
9.2 KiB
NASM
Raw Normal View History

AskName: ; 64eb (1:64eb)
2014-05-22 22:13:20 +00:00
call SaveScreenTilesToBuffer1
call GetPredefRegisters
2014-05-22 22:13:20 +00:00
push hl
2015-02-07 20:27:36 +00:00
ld a, [W_ISINBATTLE]
2014-05-22 22:13:20 +00:00
dec a
2015-07-18 20:52:03 +00:00
coord hl, 0, 0
2014-05-22 22:13:20 +00:00
ld b, $4
ld c, $b
call z, ClearScreenArea ; only if in wild batle
ld a, [wcf91]
ld [wd11e], a
2014-05-22 22:13:20 +00:00
call GetMonName
ld hl, DoYouWantToNicknameText
call PrintText
2015-07-18 20:52:03 +00:00
coord hl, 14, 7
2014-05-22 22:13:20 +00:00
ld bc, $80f
2015-02-07 20:27:36 +00:00
ld a, TWO_OPTION_MENU
2015-02-07 10:43:08 +00:00
ld [wTextBoxID], a
2014-05-22 22:13:20 +00:00
call DisplayTextBoxID
pop hl
2015-02-07 20:27:36 +00:00
ld a, [wCurrentMenuItem]
2014-05-22 22:13:20 +00:00
and a
jr nz, .declinedNickname
2014-09-13 07:50:56 +00:00
ld a, [wUpdateSpritesEnabled]
2014-05-22 22:13:20 +00:00
push af
xor a
2014-09-13 07:50:56 +00:00
ld [wUpdateSpritesEnabled], a
2014-05-22 22:13:20 +00:00
push hl
ld a, NAME_MON_SCREEN
ld [wNamingScreenType], a
2014-05-22 22:13:20 +00:00
call DisplayNamingScreen
2015-02-07 20:27:36 +00:00
ld a, [W_ISINBATTLE]
2014-05-22 22:13:20 +00:00
and a
jr nz, .inBattle
call ReloadMapSpriteTilePatterns
.inBattle
2014-05-22 22:13:20 +00:00
call LoadScreenTilesFromBuffer1
pop hl
pop af
2014-09-13 07:50:56 +00:00
ld [wUpdateSpritesEnabled], a
ld a, [wcf4b]
2014-05-22 22:13:20 +00:00
cp $50
ret nz
.declinedNickname
2014-05-22 22:13:20 +00:00
ld d, h
ld e, l
ld hl, wcd6d
ld bc, 11
2014-05-22 22:13:20 +00:00
jp CopyData
DoYouWantToNicknameText: ; 0x6557
TX_FAR _DoYouWantToNicknameText
db "@"
DisplayNameRaterScreen: ; 655c (1:655c)
ld hl, wHPBarMaxHP
2014-05-22 22:13:20 +00:00
xor a
2014-09-13 07:50:56 +00:00
ld [wUpdateSpritesEnabled], a
ld a, NAME_MON_SCREEN
ld [wNamingScreenType], a
2014-05-22 22:13:20 +00:00
call DisplayNamingScreen
call GBPalWhiteOutWithDelay3
call RestoreScreenTilesAndReloadTilePatterns
2014-05-22 22:13:20 +00:00
call LoadGBPal
ld a, [wcf4b]
2014-05-22 22:13:20 +00:00
cp $50
jr z, .playerCancelled
2015-02-07 20:27:36 +00:00
ld hl, wPartyMonNicks
2014-05-22 22:13:20 +00:00
ld bc, $b
2015-02-07 20:27:36 +00:00
ld a, [wWhichPokemon]
2014-05-22 22:13:20 +00:00
call AddNTimes
ld e, l
ld d, h
ld hl, wHPBarMaxHP
ld bc, 11
2014-05-22 22:13:20 +00:00
call CopyData
and a
ret
.playerCancelled
2014-05-22 22:13:20 +00:00
scf
ret
DisplayNamingScreen: ; 6596 (1:6596)
push hl
ld hl, wd730
2014-05-22 22:13:20 +00:00
set 6, [hl]
call GBPalWhiteOutWithDelay3
call ClearScreen
call UpdateSprites
ld b, $8
call GoPAL_SET
call LoadHpBarAndStatusTilePatterns
call LoadEDTile
2015-03-14 02:22:55 +00:00
callba LoadMonPartySpriteGfx
2015-07-18 20:52:03 +00:00
coord hl, 0, 4
2014-05-22 22:13:20 +00:00
ld b, $9
ld c, $12
call TextBoxBorder
call PrintNamingText
ld a, $3
2015-02-07 20:27:36 +00:00
ld [wTopMenuItemY], a
2014-05-22 22:13:20 +00:00
ld a, $1
2015-02-07 20:27:36 +00:00
ld [wTopMenuItemX], a
ld [wLastMenuItem], a
ld [wCurrentMenuItem], a
2014-05-22 22:13:20 +00:00
ld a, $ff
2015-02-07 20:27:36 +00:00
ld [wMenuWatchedKeys], a
2014-05-22 22:13:20 +00:00
ld a, $7
2015-02-07 20:27:36 +00:00
ld [wMaxMenuItem], a
2014-05-22 22:13:20 +00:00
ld a, $50
ld [wcf4b], a
2014-05-22 22:13:20 +00:00
xor a
ld hl, wHPBarMaxHP + 1
2014-05-22 22:13:20 +00:00
ld [hli], a
ld [hli], a
2015-07-13 20:35:35 +00:00
ld [wAnimCounter], a
.selectReturnPoint
2014-05-22 22:13:20 +00:00
call PrintAlphabet
call GBPalNormal
.ABStartReturnPoint
ld a, [wHPBarMaxHP + 1]
2014-05-22 22:13:20 +00:00
and a
jr nz, .submitNickname
call PrintNicknameAndUnderscores
.dPadReturnPoint
2014-05-22 22:13:20 +00:00
call PlaceMenuCursor
.inputLoop
2015-02-07 20:27:36 +00:00
ld a, [wCurrentMenuItem]
2014-05-22 22:13:20 +00:00
push af
callba AnimatePartyMon_ForceSpeed1
pop af
2015-02-07 20:27:36 +00:00
ld [wCurrentMenuItem], a
2014-05-25 18:21:48 +00:00
call JoypadLowSensitivity
2014-05-25 17:51:53 +00:00
ld a, [hJoyPressed]
2014-05-22 22:13:20 +00:00
and a
jr z, .inputLoop
ld hl, .namingScreenButtonFunctions
.checkForPressedButton
2014-05-22 22:13:20 +00:00
sla a
jr c, .foundPressedButton
2014-05-22 22:13:20 +00:00
inc hl
inc hl
inc hl
inc hl
jr .checkForPressedButton
.foundPressedButton
2014-05-22 22:13:20 +00:00
ld a, [hli]
ld e, a
ld a, [hli]
ld d, a
ld a, [hli]
ld h, [hl]
ld l, a
push de
jp [hl]
.submitNickname
2014-05-22 22:13:20 +00:00
pop de
ld hl, wcf4b
ld bc, 11
2014-05-22 22:13:20 +00:00
call CopyData
call GBPalWhiteOutWithDelay3
call ClearScreen
2014-05-23 22:34:35 +00:00
call ClearSprites
2014-05-22 22:13:20 +00:00
call GoPAL_SET_CF1C
call GBPalNormal
xor a
2015-02-07 20:27:36 +00:00
ld [W_SUBANIMTRANSFORM], a
ld hl, wd730
2014-05-22 22:13:20 +00:00
res 6, [hl]
2015-02-07 20:27:36 +00:00
ld a, [W_ISINBATTLE]
2014-05-22 22:13:20 +00:00
and a
jp z, LoadTextBoxTilePatterns
2014-08-09 05:39:13 +00:00
ld hl, LoadHudTilePatterns
ld b, BANK(LoadHudTilePatterns)
2014-05-22 22:13:20 +00:00
jp Bankswitch
.namingScreenButtonFunctions
dw .dPadReturnPoint
dw .pressedDown
dw .dPadReturnPoint
dw .pressedUp
dw .dPadReturnPoint
dw .pressedLeft
dw .dPadReturnPoint
dw .pressedRight
dw .ABStartReturnPoint
dw .pressedStart
dw .selectReturnPoint
dw .pressedSelect
dw .ABStartReturnPoint
dw .pressedB
dw .ABStartReturnPoint
dw .pressedA
2014-05-22 22:13:20 +00:00
.pressedA_changedCase
2014-05-22 22:13:20 +00:00
pop de
ld de, .selectReturnPoint
2014-05-22 22:13:20 +00:00
push de
.pressedSelect
ld a, [wHPBarOldHP]
2014-05-22 22:13:20 +00:00
xor $1
ld [wHPBarOldHP], a
2014-05-22 22:13:20 +00:00
ret
.pressedStart
2014-05-22 22:13:20 +00:00
ld a, $1
ld [wHPBarMaxHP + 1], a
2014-05-22 22:13:20 +00:00
ret
.pressedA
2015-02-07 20:27:36 +00:00
ld a, [wCurrentMenuItem]
cp $5 ; "ED" row
jr nz, .didNotPressED
2015-02-07 20:27:36 +00:00
ld a, [wTopMenuItemX]
cp $11 ; "ED" column
jr z, .pressedStart
.didNotPressED
2015-02-07 20:27:36 +00:00
ld a, [wCurrentMenuItem]
cp $6 ; case swtich row
jr nz, .didNotPressCaseSwtich
2015-02-07 20:27:36 +00:00
ld a, [wTopMenuItemX]
cp $1 ; case switch column
jr z, .pressedA_changedCase
.didNotPressCaseSwtich
2015-02-07 20:27:36 +00:00
ld hl, wMenuCursorLocation
2014-05-22 22:13:20 +00:00
ld a, [hli]
ld h, [hl]
ld l, a
inc hl
ld a, [hl]
ld [wHPBarNewHP], a
2014-05-22 22:13:20 +00:00
call CalcStringLength
ld a, [wHPBarNewHP]
2014-05-22 22:13:20 +00:00
cp $e5
ld de, Dakutens
jr z, .dakutensAndHandakutens
2014-05-22 22:13:20 +00:00
cp $e4
ld de, Handakutens
jr z, .dakutensAndHandakutens
ld a, [wNamingScreenType]
cp NAME_MON_SCREEN
2014-05-22 22:13:20 +00:00
jr nc, .checkMonNameLength
ld a, [wHPBarMaxHP]
2014-05-22 22:13:20 +00:00
cp $7 ; max length of player/rival names
jr .checkNameLength
.checkMonNameLength
ld a, [wHPBarMaxHP]
2014-05-22 22:13:20 +00:00
cp $a ; max length of pokemon nicknames
.checkNameLength
jr c, .addLetter
ret
.dakutensAndHandakutens
2014-05-22 22:13:20 +00:00
push hl
call DakutensAndHandakutens
2014-05-22 22:13:20 +00:00
pop hl
ret nc
dec hl
.addLetter
ld a, [wHPBarNewHP]
2014-05-22 22:13:20 +00:00
ld [hli], a
ld [hl], $50
2015-07-19 08:46:12 +00:00
ld a, SFX_PRESS_AB
2014-05-22 22:13:20 +00:00
call PlaySound
ret
.pressedB
ld a, [wHPBarMaxHP]
2014-05-22 22:13:20 +00:00
and a
ret z
call CalcStringLength
dec hl
ld [hl], $50
ret
.pressedRight
2015-02-07 20:27:36 +00:00
ld a, [wCurrentMenuItem]
2014-05-22 22:13:20 +00:00
cp $6
ret z ; can't scroll right on bottom row
2015-02-07 20:27:36 +00:00
ld a, [wTopMenuItemX]
cp $11 ; max
jp z, .wrapToFirstColumn
2014-05-22 22:13:20 +00:00
inc a
inc a
jr .done
.wrapToFirstColumn
2014-05-22 22:13:20 +00:00
ld a, $1
jr .done
.pressedLeft
2015-02-07 20:27:36 +00:00
ld a, [wCurrentMenuItem]
2014-05-22 22:13:20 +00:00
cp $6
ret z ; can't scroll right on bottom row
2015-02-07 20:27:36 +00:00
ld a, [wTopMenuItemX]
2014-05-22 22:13:20 +00:00
dec a
jp z, .wrapToLastColumn
2014-05-22 22:13:20 +00:00
dec a
jr .done
.wrapToLastColumn
ld a, $11 ; max
jr .done
.pressedUp
2015-02-07 20:27:36 +00:00
ld a, [wCurrentMenuItem]
2014-05-22 22:13:20 +00:00
dec a
2015-02-07 20:27:36 +00:00
ld [wCurrentMenuItem], a
2014-05-22 22:13:20 +00:00
and a
ret nz
ld a, $6 ; wrap to bottom row
2015-02-07 20:27:36 +00:00
ld [wCurrentMenuItem], a
ld a, $1 ; force left column
jr .done
.pressedDown
2015-02-07 20:27:36 +00:00
ld a, [wCurrentMenuItem]
2014-05-22 22:13:20 +00:00
inc a
2015-02-07 20:27:36 +00:00
ld [wCurrentMenuItem], a
2014-05-22 22:13:20 +00:00
cp $7
jr nz, .wrapToTopRow
2014-05-22 22:13:20 +00:00
ld a, $1
2015-02-07 20:27:36 +00:00
ld [wCurrentMenuItem], a
jr .done
.wrapToTopRow
2014-05-22 22:13:20 +00:00
cp $6
ret nz
ld a, $1
.done
2015-02-07 20:27:36 +00:00
ld [wTopMenuItemX], a
2014-05-22 22:13:20 +00:00
jp EraseMenuCursor
LoadEDTile: ; 675b (1:675b)
ld de, ED_Tile
2014-05-29 08:31:46 +00:00
ld hl, vFont + $700
2014-05-22 22:13:20 +00:00
ld bc, $1
jp CopyVideoDataDouble
ED_Tile: ; 6767 (1:6767)
INCBIN "gfx/ED_tile.1bpp"
PrintAlphabet: ; 676f (1:676f)
xor a
ld [H_AUTOBGTRANSFERENABLED], a
ld a, [wHPBarOldHP]
2014-05-22 22:13:20 +00:00
and a
ld de, LowerCaseAlphabet
jr nz, .lowercase
ld de, UpperCaseAlphabet
.lowercase
2015-07-18 20:52:03 +00:00
coord hl, 2, 5
ld bc, $509 ; 5 rows, 9 columns
.outerLoop
2014-05-22 22:13:20 +00:00
push bc
.innerLoop
2014-05-22 22:13:20 +00:00
ld a, [de]
ld [hli], a
inc hl
inc de
dec c
jr nz, .innerLoop
ld bc, SCREEN_WIDTH + 2
2014-05-22 22:13:20 +00:00
add hl, bc
pop bc
dec b
jr nz, .outerLoop
2014-05-22 22:13:20 +00:00
call PlaceString
ld a, $1
ld [H_AUTOBGTRANSFERENABLED], a
2014-05-22 22:13:20 +00:00
jp Delay3
LowerCaseAlphabet: ; 679e (1:679e)
db "abcdefghijklmnopqrstuvwxyz ×():;[]",$e1,$e2,"-?!♂♀/",$f2,",¥UPPER CASE@"
UpperCaseAlphabet: ; 67d6 (1:67d6)
db "ABCDEFGHIJKLMNOPQRSTUVWXYZ ×():;[]",$e1,$e2,"-?!♂♀/",$f2,",¥lower case@"
PrintNicknameAndUnderscores: ; 680e (1:680e)
2014-05-22 22:13:20 +00:00
call CalcStringLength
ld a, c
ld [wHPBarMaxHP], a
2015-07-18 20:52:03 +00:00
coord hl, 10, 2
2014-05-22 22:13:20 +00:00
ld bc, $10a
call ClearScreenArea
2015-07-18 20:52:03 +00:00
coord hl, 10, 2
ld de, wcf4b
2014-05-22 22:13:20 +00:00
call PlaceString
2015-07-18 20:52:03 +00:00
coord hl, 10, 3
ld a, [wNamingScreenType]
cp NAME_MON_SCREEN
jr nc, .pokemon1
ld b, 7 ; player or rival max name length
jr .playerOrRival1
.pokemon1
ld b, 10 ; pokemon max name length
.playerOrRival1
ld a, $76 ; underscore tile id
.placeUnderscoreLoop
2014-05-22 22:13:20 +00:00
ld [hli], a
dec b
jr nz, .placeUnderscoreLoop
ld a, [wNamingScreenType]
cp NAME_MON_SCREEN
ld a, [wHPBarMaxHP]
jr nc, .pokemon2
cp 7 ; player or rival max name length
jr .playerOrRival2
.pokemon2
cp 10 ; pokemon max name length
.playerOrRival2
jr nz, .emptySpacesRemaining
; when all spaces are filled, force the cursor onto the ED tile
2014-05-22 22:13:20 +00:00
call EraseMenuCursor
ld a, $11 ; "ED" x coord
2015-02-07 20:27:36 +00:00
ld [wTopMenuItemX], a
ld a, $5 ; "ED" y corrd
2015-02-07 20:27:36 +00:00
ld [wCurrentMenuItem], a
ld a, [wNamingScreenType]
cp NAME_MON_SCREEN
ld a, 9 ; keep the last underscore raised
jr nc, .pokemon3
ld a, 6 ; keep the last underscore raised
.pokemon3
.emptySpacesRemaining
2014-05-22 22:13:20 +00:00
ld c, a
ld b, $0
2015-07-18 20:52:03 +00:00
coord hl, 10, 3
2014-05-22 22:13:20 +00:00
add hl, bc
ld [hl], $77 ; raised underscore tile id
2014-05-22 22:13:20 +00:00
ret
DakutensAndHandakutens: ; 6871 (1:6871)
2014-05-22 22:13:20 +00:00
push de
call CalcStringLength
dec hl
ld a, [hl]
pop hl
ld de, $2
call IsInArray
ret nc
inc hl
ld a, [hl]
ld [wHPBarNewHP], a
2014-05-22 22:13:20 +00:00
ret
Dakutens: ; 6885 (1:6885)
db "かが", "きぎ", "くぐ", "けげ", "こご"
db "さざ", "しじ", "すず", "せぜ", "そぞ"
db "ただ", "ちぢ", "つづ", "てで", "とど"
db "はば", "ひび", "ふぶ", "へべ", "ほぼ"
db "カガ", "キギ", "クグ", "ケゲ", "コゴ"
db "サザ", "シジ", "スズ", "セゼ", "ソゾ"
db "タダ", "チヂ", "ツヅ", "テデ", "トド"
db "ハバ", "ヒビ", "フブ", "へべ", "ホボ"
db $ff
Handakutens: ; 68d6 (1:68d6)
db "はぱ", "ひぴ", "ふぷ", "へぺ", "ほぽ"
db "ハパ", "ヒピ", "フプ", "へぺ", "ホポ"
db $ff
; calculates the length of the string at wcf4b and stores it in c
2014-05-22 22:13:20 +00:00
CalcStringLength: ; 68eb (1:68eb)
ld hl, wcf4b
2014-05-22 22:13:20 +00:00
ld c, $0
.loop
2014-05-22 22:13:20 +00:00
ld a, [hl]
cp $50
ret z
inc hl
inc c
jr .loop
2014-05-22 22:13:20 +00:00
PrintNamingText: ; 68f8 (1:68f8)
2015-07-18 20:52:03 +00:00
coord hl, 0, 1
ld a, [wNamingScreenType]
2015-02-07 20:27:36 +00:00
ld de, YourTextString
2014-05-22 22:13:20 +00:00
and a
jr z, .notNickname
2015-02-07 20:27:36 +00:00
ld de, RivalsTextString
2014-05-22 22:13:20 +00:00
dec a
jr z, .notNickname
ld a, [wcf91]
2015-03-14 22:25:21 +00:00
ld [wMonPartySpriteSpecies], a
2014-05-22 22:13:20 +00:00
push af
2015-03-14 22:25:21 +00:00
callba WriteMonPartySpriteOAMBySpecies
2014-05-22 22:13:20 +00:00
pop af
ld [wd11e], a
2014-05-22 22:13:20 +00:00
call GetMonName
2015-07-18 20:52:03 +00:00
coord hl, 4, 1
2014-05-22 22:13:20 +00:00
call PlaceString
ld hl, $1
add hl, bc
ld [hl], $c9
2015-07-18 20:52:03 +00:00
coord hl, 1, 3
2015-02-07 20:27:36 +00:00
ld de, NicknameTextString
2014-05-22 22:13:20 +00:00
jr .placeString
.notNickname
call PlaceString
ld l, c
ld h, b
2015-02-07 20:27:36 +00:00
ld de, NameTextString
2014-05-22 22:13:20 +00:00
.placeString
jp PlaceString
YourTextString: ; 693f (1:693f)
db "YOUR @"
RivalsTextString: ; 6945 (1:6945)
db "RIVAL's @"
NameTextString: ; 694d (1:694d)
db "NAME?@"
NicknameTextString: ; 6953 (1:6953)
db "NICKNAME?@"