summaryrefslogtreecommitdiff
path: root/home/text.asm
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@gmail.com>2016-01-29 18:36:31 -0500
committerPikalaxALT <PikalaxALT@gmail.com>2016-01-29 18:36:31 -0500
commit2bf93c5905319e9181f87b3f83cd3bce7b9feeca (patch)
tree3ebf17c8879e5d6243d81aac8f1c36eb226fac26 /home/text.asm
parented3f9395f6d45f6554ed9d9c49c41ea86a8e2447 (diff)
Import stuff from pokecrystal; diff gold and silver
Diffstat (limited to 'home/text.asm')
-rw-r--r--home/text.asm1183
1 files changed, 1183 insertions, 0 deletions
diff --git a/home/text.asm b/home/text.asm
new file mode 100644
index 00000000..e3dacb47
--- /dev/null
+++ b/home/text.asm
@@ -0,0 +1,1183 @@
+BORDER_WIDTH EQU 2
+TEXTBOX_WIDTH EQU SCREEN_WIDTH
+TEXTBOX_INNERW EQU TEXTBOX_WIDTH - BORDER_WIDTH
+TEXTBOX_HEIGHT EQU 6
+TEXTBOX_INNERH EQU TEXTBOX_HEIGHT - BORDER_WIDTH
+TEXTBOX_X EQU 0
+TEXTBOX_INNERX EQU TEXTBOX_X + 1
+TEXTBOX_Y EQU SCREEN_HEIGHT - TEXTBOX_HEIGHT
+TEXTBOX_INNERY EQU TEXTBOX_Y + 2
+
+TEXTBOX_PAL EQU 7
+
+
+ClearBox:: ; fb6
+; Fill a c*b box at hl with blank tiles.
+
+ ld a, " "
+
+FillBoxWithByte::
+.row
+ push bc
+ push hl
+.col
+ ld [hli], a
+ dec c
+ jr nz, .col
+ pop hl
+ ld bc, SCREEN_WIDTH
+ add hl, bc
+ pop bc
+ dec b
+ jr nz, .row
+ ret
+; fc8
+
+
+ClearTileMap:: ; fc8
+; Fill TileMap with blank tiles.
+
+ hlcoord 0, 0
+ ld a, " "
+ ld bc, TileMapEnd - TileMap
+ call ByteFill
+
+ ; Update the BG Map.
+ ld a, [rLCDC]
+ bit 7, a
+ ret z
+ jp WaitBGMap
+; fdb
+
+
+ClearScreen:: ; fdb
+ ld a, TEXTBOX_PAL
+ hlcoord 0, 0, AttrMap
+ ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+ call ByteFill
+ jr ClearTileMap
+; fe8
+
+
+
+TextBox:: ; fe8
+; Draw a text box at hl with room for
+; b lines of c characters each.
+; Places a border around the textbox,
+; then switches the palette to the
+; text black-and-white scheme.
+ push bc
+ push hl
+ call TextBoxBorder
+ pop hl
+ pop bc
+ jr TextBoxPalette
+; ff1
+
+
+TextBoxBorder:: ; ff1
+
+ ; Top
+ push hl
+ ld a, "┌"
+ ld [hli], a
+ inc a ; "─"
+ call .PlaceChars
+ inc a ; "┐"
+ ld [hl], a
+ pop hl
+
+ ; Middle
+ ld de, SCREEN_WIDTH
+ add hl, de
+.row
+ push hl
+ ld a, "│"
+ ld [hli], a
+ ld a, " "
+ call .PlaceChars
+ ld [hl], "│"
+ pop hl
+
+ ld de, SCREEN_WIDTH
+ add hl, de
+ dec b
+ jr nz, .row
+
+ ; Bottom
+ ld a, "└"
+ ld [hli], a
+ ld a, "─"
+ call .PlaceChars
+ ld [hl], "┘"
+
+ ret
+; 101e
+
+.PlaceChars: ; 101e
+; Place char a c times.
+ ld d, c
+.loop
+ ld [hli], a
+ dec d
+ jr nz, .loop
+ ret
+; 1024
+
+
+TextBoxPalette:: ; 1024
+; Fill text box width c height b at hl with pal 7
+ ld de, AttrMap - TileMap
+ add hl, de
+rept 2
+ inc b
+endr
+rept 2
+ inc c
+endr
+ ld a, TEXTBOX_PAL
+.col
+ push bc
+ push hl
+.row
+ ld [hli], a
+ dec c
+ jr nz, .row
+ pop hl
+ ld de, SCREEN_WIDTH
+ add hl, de
+ pop bc
+ dec b
+ jr nz, .col
+ ret
+; 103e
+
+
+SpeechTextBox:: ; 103e
+; Standard textbox.
+ hlcoord TEXTBOX_X, TEXTBOX_Y
+ ld b, TEXTBOX_INNERH
+ ld c, TEXTBOX_INNERW
+ jp TextBox
+; 1048
+
+TestText:: ; 1048
+ text "ゲームフりーク!"
+ done
+; 1052
+
+RadioTerminator:: ; 1052
+ ld hl, .stop
+ ret
+.stop db "@"
+; 1057
+
+
+PrintText:: ; 1057
+ call SetUpTextBox
+BuenaPrintText:: ; 105a
+ push hl
+ hlcoord TEXTBOX_INNERX, TEXTBOX_INNERY
+ lb bc, TEXTBOX_INNERH - 1, TEXTBOX_INNERW
+ call ClearBox
+ pop hl
+
+PrintTextBoxText:: ; 1065
+ bccoord TEXTBOX_INNERX, TEXTBOX_INNERY
+ call PlaceWholeStringInBoxAtOnce
+ ret
+; 106c
+
+SetUpTextBox:: ; 106c
+ push hl
+ call SpeechTextBox
+ call UpdateSprites
+ call ApplyTilemap
+ pop hl
+ ret
+; 1078
+
+
+PlaceString:: ; 1078
+ push hl
+
+PlaceNextChar:: ; 1079
+ ld a, [de]
+ cp "@"
+ jr nz, CheckDict
+ ld b, h
+ ld c, l
+ pop hl
+ ret
+ pop de
+
+NextChar:: ; 1083
+ inc de
+ jp PlaceNextChar
+
+CheckDict:: ; 1087
+dict: macro
+if \1 == 0
+ and a
+else
+ cp \1
+endc
+ jp z, \2
+endm
+
+dict2: macro
+if \1 == 0
+ and a
+else
+ cp \1
+endc
+ jr nz, \@
+ ld a, \2
+\@:
+endm
+
+dict3: macro
+if \1 == 0
+ and a
+else
+ cp \1
+endc
+ jr z, \2
+endm
+
+ dict "<DAY>", Char15
+ dict "<LINE>", LineChar
+ dict "<NEXT>", NextLineChar
+ dict TX_FAR, TextFar
+ dict $00, NullChar
+ dict $4c, Char4C
+ dict $4b, Char4B
+ dict "<PARA>", Paragraph
+ dict "<MOM>", PrintMomsName
+ dict "<PLAYER>", PrintPlayerName
+ dict "<RIVAL>", PrintRivalName
+ dict $35, Char35
+ dict $36, Char36
+ dict $37, Char37
+ dict "<RED>", PrintRedsName
+ dict "<GREEN>", PrintGreensName
+ dict "#", PlacePOKe
+ dict "<PC>", PCChar
+ dict "<ROCKET>", RocketChar
+ dict "<TM>", TMChar
+ dict "<TRNER>", TrainerChar
+ dict $23, PlaceKougeki
+ dict "<LNBRK>", Char22
+ dict "<CONT>", ContText
+ dict "<......>", SixDotsChar
+ dict "<DONE>", DoneText
+ dict "<PROMPT>", PromptText
+ dict "<PKMN>", PlacePKMN
+ dict "<POKE>", PlacePOKE
+ dict $25, NextChar
+ dict2 $1f, " "
+ dict "<DEXEND>", PlaceDexEnd
+ dict "<TARGET>", PlaceMoveTargetsName
+ dict "<USER>", PlaceMoveUsersName
+ dict "<ENEMY>", PlaceEnemysName
+ dict "<PLAY_G>", PlaceGenderedPlayerName
+ dict3 $e4, .place
+ dict3 $e5, .place
+
+ jr .nope
+ ld b, a
+ call Diacritic
+ jp NextChar
+.nope
+
+ cp $60
+ jr nc, .place
+
+ cp $40
+ jr nc, .handakuten
+
+.dakuten
+
+ cp $20
+ jr nc, .daku1
+ add $80
+ jr .daku2
+.daku1
+ add $90
+.daku2
+ ld b, $e5 ; dakuten
+ call Diacritic
+ jr .place
+
+.handakuten
+ cp "ぱ"
+ jr nc, .han1
+ add "ハ" - "パ"
+ jr .han2
+.han1
+ add "は" - "ぱ"
+.han2
+ ld b, $e4 ; handakuten
+ call Diacritic
+
+.place
+ ld [hli], a
+ call PrintLetterDelay
+ jp NextChar
+; 0x117b
+
+
+Char15:: ; 117b
+ ld c, l
+ ld b, h
+ callba Function17f036
+ jp PlaceNextChar
+; 1186
+
+
+print_name: macro
+ push de
+ ld de, \1
+ jp PlaceCommandCharacter
+endm
+
+PrintMomsName: print_name MomsName ; 1186
+PrintPlayerName: print_name PlayerName ; 118d
+PrintRivalName: print_name RivalName ; 1194
+PrintRedsName: print_name RedsName ; 119b
+PrintGreensName: print_name GreensName ; 11a2
+
+TrainerChar: print_name TrainerCharText ; 11a9
+TMChar: print_name TMCharText ; 11b0
+PCChar: print_name PCCharText ; 11b7
+RocketChar: print_name RocketCharText ; 11be
+PlacePOKe: print_name PlacePOKeText ; 11c5
+PlaceKougeki: print_name KougekiText ; 11cc
+SixDotsChar: print_name SixDotsCharText ; 11d3
+PlacePKMN: print_name PlacePKMNText ; 11da
+PlacePOKE: print_name PlacePOKEText ; 11e1
+Char35: print_name Char35Text ; 11e8
+Char36: print_name Char36Text ; 11ef
+Char37: print_name Char37Text ; 11f6
+
+
+PlaceMoveTargetsName:: ; 11fd
+ ld a, [hBattleTurn]
+ xor 1
+ jr PlaceMoveTargetsName_5A
+
+PlaceMoveUsersName:: ; 1203
+ ld a, [hBattleTurn]
+
+PlaceMoveTargetsName_5A: ; 1205
+ push de
+ and a
+ jr nz, .enemy
+
+ ld de, BattleMonNick
+ jr PlaceCommandCharacter
+
+.enemy
+ ld de, EnemyText ; Enemy
+ call PlaceString
+ ld h, b
+ ld l, c
+ ld de, EnemyMonNick
+ jr PlaceCommandCharacter
+
+
+PlaceEnemysName:: ; 121b
+ push de
+
+ ld a, [wLinkMode]
+ and a
+ jr nz, .linkbattle
+
+ ld a, [TrainerClass]
+ cp RIVAL1
+ jr z, .rival
+ cp RIVAL2
+ jr z, .rival
+
+ ld de, OTClassName
+ call PlaceString
+ ld h, b
+ ld l, c
+ ld de, String12a2
+ call PlaceString
+ push bc
+ callab Battle_GetTrainerName
+ pop hl
+ ld de, StringBuffer1
+ jr PlaceCommandCharacter
+
+.rival
+ ld de, RivalName
+ jr PlaceCommandCharacter
+
+.linkbattle
+ ld de, OTClassName
+ jr PlaceCommandCharacter
+
+
+PlaceGenderedPlayerName:: ; 1252
+ push de
+ ld de, PlayerName
+ call PlaceString
+ ld h, b
+ ld l, c
+ ld a, [PlayerGender]
+ bit 0, a
+ ld de, String_kun
+ jr z, PlaceCommandCharacter
+ ld de, String_chan
+ jr PlaceCommandCharacter
+
+
+PlaceCommandCharacter:: ; 126a
+ call PlaceString
+ ld h, b
+ ld l, c
+ pop de
+ jp NextChar
+; 0x1273
+
+TMCharText:: db "TM@" ; 1273
+TrainerCharText:: db "TRAINER@" ; 1276
+PCCharText:: db "PC@" ; 127e
+RocketCharText:: db "ROCKET@" ; 1281
+PlacePOKeText:: db "POKé@" ; 1288
+KougekiText:: db "こうげき@" ; 128d
+SixDotsCharText:: db "……@" ; 1292
+EnemyText:: db "Enemy @" ; 1295
+PlacePKMNText:: db "<PK><MN>@" ; PK MN ; 129c
+PlacePOKEText:: db "<PO><KE>@" ; PO KE ; 129f
+String12a2:: db " @" ; 12a2
+Char35Text::
+Char36Text::
+Char37Text:: db "@" ; 12a4
+String_kun:: db "@" ; 12a5
+String_chan:: db "@" ; 12a6
+; 12a7
+
+NextLineChar:: ; 12a7
+ pop hl
+ ld bc, SCREEN_WIDTH * 2
+ add hl, bc
+ push hl
+ jp NextChar
+; 12b0
+
+Char22:: ; 12b0
+ pop hl
+ ld bc, SCREEN_WIDTH
+ add hl, bc
+ push hl
+ jp NextChar
+; 12b9
+
+TextFar:: ; 12b9
+ pop hl
+ push de
+ ld bc, -TileMap + $10000
+ add hl, bc
+ ld de, -SCREEN_WIDTH
+ ld c, 1
+.loop
+ ld a, h
+ and a
+ jr nz, .next
+ ld a, l
+ cp SCREEN_WIDTH
+ jr c, .done
+
+.next
+ add hl, de
+ inc c
+ jr .loop
+
+.done
+ hlcoord 0, 0
+ ld de, SCREEN_WIDTH
+ ld a, c
+.loop2
+ and a
+ jr z, .done2
+ add hl, de
+ dec a
+ jr .loop2
+
+.done2
+ pop de
+ inc de
+ ld a, [de]
+ ld c, a
+ ld b, 0
+ add hl, bc
+ push hl
+ jp NextChar
+; 12ea
+
+
+LineChar:: ; 12ea
+ pop hl
+ hlcoord TEXTBOX_INNERX, TEXTBOX_INNERY + 2
+ push hl
+ jp NextChar
+; 0x12f2
+
+Paragraph:: ; 12f2
+ push de
+
+ ld a, [wLinkMode]
+ cp LINK_COLOSSEUM
+ jr z, .linkbattle
+ cp LINK_MOBILE
+ jr z, .linkbattle
+ call LoadBlinkingCursor
+
+.linkbattle
+ call Function13b6
+ call ButtonSound
+ hlcoord TEXTBOX_INNERX, TEXTBOX_INNERY
+ lb bc, TEXTBOX_INNERH - 1, TEXTBOX_INNERW
+ call ClearBox
+ call UnloadBlinkingCursor
+ ld c, 20
+ call DelayFrames
+ hlcoord TEXTBOX_INNERX, TEXTBOX_INNERY
+ pop de
+ jp NextChar
+; 131f
+
+
+Char4B:: ; 131f
+ ld a, [wLinkMode]
+ or a
+ jr nz, .communication
+ call LoadBlinkingCursor
+
+.communication
+ call Function13b6
+
+ push de
+ call ButtonSound
+ pop de
+
+ ld a, [wLinkMode]
+ or a
+ call z, UnloadBlinkingCursor
+
+Char4C:: ; 1337
+ push de
+ call TextScroll
+ call TextScroll
+ hlcoord TEXTBOX_INNERX, TEXTBOX_INNERY + 2
+ pop de
+ jp NextChar
+; 1345
+
+
+ContText:: ; 1345
+ push de
+ ld de, .cont
+ ld b, h
+ ld c, l
+ call PlaceString
+ ld h, b
+ ld l, c
+ pop de
+ jp NextChar
+
+.cont db $4b, "@"
+; 1356
+
+
+PlaceDexEnd:: ; 1356
+; Legacy: ends a Pokédex entry (Red).
+; Dex entries are now regular strings.
+ ld [hl], "."
+ pop hl
+ ret
+; 135a
+
+PromptText:: ; 135a
+ ld a, [wLinkMode]
+ cp LINK_COLOSSEUM
+ jr z, .ok
+ cp LINK_MOBILE
+ jr z, .ok
+ call LoadBlinkingCursor
+
+.ok
+ call Function13b6
+ call ButtonSound
+ ld a, [wLinkMode]
+ cp LINK_COLOSSEUM
+ jr z, DoneText
+ cp LINK_MOBILE
+ jr z, DoneText
+ call UnloadBlinkingCursor
+
+DoneText:: ; 137c
+ pop hl
+ ld de, .stop
+ dec de
+ ret
+.stop db "@"
+; 1383
+
+NullChar:: ; 1383
+ ld a, "?"
+ ld [hli], a
+ call PrintLetterDelay
+ jp NextChar
+; 138c
+
+TextScroll:: ; 138c
+ hlcoord TEXTBOX_INNERX, TEXTBOX_INNERY
+ decoord TEXTBOX_INNERX, TEXTBOX_INNERY - 1
+ ld a, TEXTBOX_INNERH - 1
+
+.col
+ push af
+ ld c, TEXTBOX_INNERW
+
+.row
+ ld a, [hli]
+ ld [de], a
+ inc de
+ dec c
+ jr nz, .row
+
+rept 2
+ inc de
+endr
+rept 2
+ inc hl
+endr
+ pop af
+ dec a
+ jr nz, .col
+
+ hlcoord TEXTBOX_INNERX, TEXTBOX_INNERY + 2
+ ld a, " "
+ ld bc, TEXTBOX_INNERW
+ call ByteFill
+ ld c, 5
+ call DelayFrames
+ ret
+; 13b6
+
+Function13b6:: ; 13b6
+ push bc
+ ld a, [hOAMUpdate]
+ push af
+ ld a, 1
+ ld [hOAMUpdate], a
+
+ call WaitBGMap
+
+ pop af
+ ld [hOAMUpdate], a
+ pop bc
+ ret
+; 13c6
+
+Diacritic:: ; 13c6
+ ret
+; 13c7
+
+LoadBlinkingCursor:: ; 13c7
+ ld a, "▼"
+ ldcoord_a 18, 17
+ ret
+; 13cd
+
+UnloadBlinkingCursor:: ; 13cd
+ lda_coord 17, 17
+ ldcoord_a 18, 17
+ ret
+; 13d4
+
+FarString:: ; 13d4
+ ld b, a
+ ld a, [hROMBank]
+ push af
+
+ ld a, b
+ rst Bankswitch
+ call PlaceString
+
+ pop af
+ rst Bankswitch
+ ret
+; 13e0
+
+PokeFluteTerminatorCharacter:: ; 13e0
+ ld hl, .stop
+ ret
+
+.stop db "@"
+; 13e5
+
+
+PlaceWholeStringInBoxAtOnce:: ; 13e5
+ ld a, [TextBoxFlags]
+ push af
+ set 1, a
+ ld [TextBoxFlags], a
+
+ call DoTextUntilTerminator
+
+ pop af
+ ld [TextBoxFlags], a
+ ret
+; 13f6
+
+DoTextUntilTerminator:: ; 13f6
+ ld a, [hli]
+ cp "@"
+ ret z
+ call .TextCommand
+ jr DoTextUntilTerminator
+
+.TextCommand:
+ push hl
+ push bc
+ ld c, a
+ ld b, 0
+ ld hl, TextCommands
+rept 2
+ add hl, bc
+endr
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ pop bc
+ pop hl
+
+ ; jp de
+ push de
+ ret
+; 1410
+
+TextCommands:: ; 1410
+ dw Text_TX
+ dw Text_TX_RAM
+ dw Text_TX_BCD
+ dw Text_TX_MOVE
+ dw Text_TX_BOX
+ dw Text_TX_LOW
+ dw Text_WAIT_BUTTON
+ dw Text_TX_SCROLL
+ dw Text_START_ASM
+ dw Text_TX_NUM
+ dw Text_TX_EXIT
+ dw Text_PlaySound ; $0b
+ dw Text_TX_DOTS
+ dw Text_0D
+ dw Text_PlaySound ; $0e
+ dw Text_PlaySound ; $0f
+ dw Text_PlaySound ; $10
+ dw Text_PlaySound ; $11
+ dw Text_PlaySound ; $12
+ dw Text_PlaySound ; $13
+ dw Text_TX_STRINGBUFFER
+ dw Text_TX_DAY
+ dw Text_TX_FAR
+; 143e
+
+Text_TX:: ; 143e
+; TX
+; write text until "@"
+; [$00]["...@"]
+
+ ld d, h
+ ld e, l
+ ld h, b
+ ld l, c
+ call PlaceString
+ ld h, d
+ ld l, e
+ inc hl
+ ret
+; 1449
+
+Text_TX_RAM:: ; 1449
+; text_from_ram
+; write text from a ram address
+; little endian
+; [$01][addr]
+
+ ld a, [hli]
+ ld e, a
+ ld a, [hli]
+ ld d, a
+ push hl
+ ld h, b
+ ld l, c
+ call PlaceString
+ pop hl
+ ret
+; 1455
+
+Text_TX_FAR:: ; 1455
+; text_jump
+; write text from a different bank
+; little endian
+; [$16][addr][bank]
+
+ ld a, [hROMBank]
+ push af
+
+ ld a, [hli]
+ ld e, a
+ ld a, [hli]
+ ld d, a
+ ld a, [hli]
+
+ ld [hROMBank], a
+ ld [MBC3RomBank], a
+
+ push hl
+ ld h, d
+ ld l, e
+ call DoTextUntilTerminator
+ pop hl
+
+ pop af
+ ld [hROMBank], a
+ ld [MBC3RomBank], a
+ ret
+; 1470
+
+Text_TX_BCD:: ; 1470
+; TX_BCD
+; write bcd from address, typically ram
+; [$02][addr][flags]
+; flags: see PrintBCDNumber
+
+ ld a, [hli]
+ ld e, a
+ ld a, [hli]
+ ld d, a
+ ld a, [hli]
+ push hl
+ ld h, b
+ ld l, c
+ ld c, a
+ call PrintBCDNumber
+ ld b, h
+ ld c, l
+ pop hl
+ ret
+; 1480
+
+Text_TX_MOVE:: ; 1480
+; TX_MOVE
+; move to a new tile
+; [$03][addr]
+
+ ld a, [hli]
+ ld [wMenuScrollPosition + 2], a
+ ld c, a
+ ld a, [hli]
+ ld [wMenuScrollPosition + 2 + 1], a
+ ld b, a
+ ret
+; 148b
+
+Text_TX_BOX:: ; 148b
+; TX_BOX
+; draw a box
+; little endian
+; [$04][addr][height][width]
+
+ ld a, [hli]
+ ld e, a
+ ld a, [hli]
+ ld d, a
+ ld a, [hli]
+ ld b, a
+ ld a, [hli]
+ ld c, a
+ push hl
+ ld h, d
+ ld l, e
+ call TextBox
+ pop hl
+ ret
+; 149b
+
+Text_TX_LOW:: ; 149b
+; TX_LOW
+; write text at (1,16)
+; [$05]
+
+ bccoord TEXTBOX_INNERX, TEXTBOX_INNERY + 2
+ ret
+; 149f
+
+Text_WAIT_BUTTON:: ; 149f
+; TX_WAITBUTTON
+; wait for button press
+; show arrow
+; [06]
+
+ ld a, [wLinkMode]
+ cp LINK_COLOSSEUM
+ jp z, Text_0D
+ cp LINK_MOBILE
+ jp z, Text_0D
+
+ push hl
+ call LoadBlinkingCursor
+ push bc
+ call ButtonSound
+ pop bc
+ call UnloadBlinkingCursor
+ pop hl
+ ret
+; 14ba
+
+Text_TX_SCROLL:: ; 14ba
+; pushes text up two lines and sets the BC cursor to the border tile
+; below the first character column of the text box.
+ push hl
+ call UnloadBlinkingCursor
+ call TextScroll
+ call TextScroll
+ pop hl
+ bccoord TEXTBOX_INNERX, TEXTBOX_INNERY + 2
+ ret
+; 14c9
+
+Text_START_ASM:: ; 14c9
+; TX_ASM
+
+ bit 7, h
+ jr nz, .not_rom
+ jp [hl]
+
+.not_rom
+ ld a, "@"
+ ld [hl], a
+ ret
+; 14d2
+
+Text_TX_NUM:: ; 14d2
+; TX_NUM
+; [$09][addr][hi:bytes lo:digits]
+ ld a, [hli]
+ ld e, a
+ ld a, [hli]
+ ld d, a
+ ld a, [hli]
+ push hl
+ ld h, b
+ ld l, c
+ ld b, a
+ and $f
+ ld c, a
+ ld a, b
+ and $f0
+ swap a
+ set PRINTNUM_RIGHTALIGN_F, a
+ ld b, a
+ call PrintNum
+ ld b, h
+ ld c, l
+ pop hl
+ ret
+; 14ed
+
+Text_TX_EXIT:: ; 14ed
+ push hl
+ push bc
+ call GetJoypad
+ ld a, [hJoyDown]
+ and A_BUTTON | B_BUTTON
+ jr nz, .done
+ ld c, 30
+ call DelayFrames
+.done
+ pop bc
+ pop hl
+ ret
+; 1500
+
+Text_PlaySound:: ; 1500
+; chars:
+; $0b, $0e, $0f, $10, $11, $12, $13
+; see TextSFX
+
+ push bc
+ dec hl
+ ld a, [hli]
+ ld b, a
+ push hl
+ ld hl, TextSFX
+.loop
+ ld a, [hli]
+ cp -1
+ jr z, .done
+ cp b
+ jr z, .play
+rept 2
+ inc hl
+endr
+ jr .loop
+
+.play
+ push de
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ call PlaySFX
+ call WaitSFX
+ pop de
+
+.done
+ pop hl
+ pop bc
+ ret
+; 1522
+
+Function1522:: ; 1522
+ push de
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ call PlayCry
+ pop de
+ pop hl
+ pop bc
+ ret
+; 152d
+
+TextSFX:: ; 152d
+ dbw TX_SOUND_0B, SFX_DEX_FANFARE_50_79
+ dbw TX_SOUND_12, SFX_FANFARE
+ dbw TX_SOUND_0E, SFX_DEX_FANFARE_20_49
+ dbw TX_SOUND_0F, SFX_ITEM
+ dbw TX_SOUND_10, SFX_CAUGHT_MON
+ dbw TX_SOUND_11, SFX_DEX_FANFARE_80_109
+ dbw TX_SOUND_13, SFX_SLOT_MACHINE_START
+ db -1
+; 1543
+
+Text_TX_DOTS:: ; 1543
+; [$0C][num]
+ ld a, [hli]
+ ld d, a
+ push hl
+ ld h, b
+ ld l, c
+
+.loop
+ push de
+ ld a, "…"
+ ld [hli], a
+ call GetJoypad
+ ld a, [hJoyDown]
+ and A_BUTTON | B_BUTTON
+ jr nz, .next
+ ld c, 10
+ call DelayFrames
+.next
+ pop de
+ dec d
+ jr nz, .loop
+
+ ld b, h
+ ld c, l
+ pop hl
+ ret
+; 1562
+
+Text_0D:: ; 1562
+; wait for key down
+; display arrow
+ push hl
+ push bc
+ call ButtonSound
+ pop bc
+ pop hl
+ ret
+; 156a
+
+Text_TX_STRINGBUFFER:: ; 156a
+; Print a string from one of the following:
+; 0: StringBuffer3
+; 1: StringBuffer4
+; 2: StringBuffer5
+; 3: StringBuffer2
+; 4: StringBuffer1
+; 5: EnemyMonNick
+; 6: BattleMonNick
+; [$14][id]
+
+ ld a, [hli]
+ push hl
+ ld e, a
+ ld d, 0
+ ld hl, StringBufferPointers
+rept 2
+ add hl, de
+endr
+ ld a, BANK(StringBufferPointers)
+ call GetFarHalfword
+ ld d, h
+ ld e, l
+ ld h, b
+ ld l, c
+ call PlaceString
+ pop hl
+ ret
+; 1582
+
+Text_TX_DAY:: ; 1582
+; TX_DAY
+
+ call GetWeekday
+ push hl
+ push bc
+ ld c, a
+ ld b, 0
+ ld hl, .Days
+rept 2
+ add hl, bc
+endr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld d, h
+ ld e, l
+ pop hl
+ call PlaceString
+ ld h, b
+ ld l, c
+ ld de, .Day
+ call PlaceString
+ pop hl
+ ret
+
+.Days ; 15a2
+ dw .Sun
+ dw .Mon
+ dw .Tues
+ dw .Wednes
+ dw .Thurs
+ dw .Fri
+ dw .Satur
+
+.Sun db "SUN@"
+.Mon db "MON@"
+.Tues db "TUES@"
+.Wednes db "WEDNES@"
+.Thurs db "THURS@"
+.Fri db "FRI@"
+.Satur db "SATUR@"
+.Day db "DAY@"
+; 15d8