pokecrystal-board/home/text.asm

1086 lines
16 KiB
NASM
Raw Normal View History

2018-06-24 07:09:41 -07:00
ClearBox::
2013-08-20 12:58:08 -07:00
; Fill a c*b box at hl with blank tiles.
ld a, " "
; fallthrough
2014-08-14 23:50:39 -07:00
FillBoxWithByte::
2015-10-16 10:35:43 -07:00
.row
2013-08-20 12:58:08 -07:00
push bc
push hl
2015-10-16 10:35:43 -07:00
.col
2013-08-20 12:58:08 -07:00
ld [hli], a
dec c
2015-10-16 10:35:43 -07:00
jr nz, .col
2013-08-20 12:58:08 -07:00
pop hl
2014-08-14 23:50:39 -07:00
ld bc, SCREEN_WIDTH
2013-08-20 12:58:08 -07:00
add hl, bc
pop bc
dec b
2015-10-16 10:35:43 -07:00
jr nz, .row
2013-08-20 12:58:08 -07:00
ret
2018-06-24 07:09:41 -07:00
ClearTileMap::
2018-01-23 14:39:09 -08:00
; Fill wTileMap with blank tiles.
2013-08-20 12:58:08 -07:00
hlcoord 0, 0
2013-08-20 12:58:08 -07:00
ld a, " "
2018-01-23 14:39:09 -08:00
ld bc, wTileMapEnd - wTileMap
2013-08-20 12:58:08 -07:00
call ByteFill
2014-08-14 23:50:39 -07:00
; Update the BG Map.
2013-08-20 12:58:08 -07:00
ld a, [rLCDC]
2017-12-29 09:53:21 -08:00
bit rLCDC_ENABLE, a
2013-08-20 12:58:08 -07:00
ret z
jp WaitBGMap
2018-06-24 07:09:41 -07:00
ClearScreen::
2017-12-13 21:36:24 -08:00
ld a, PAL_BG_TEXT
2018-01-23 14:39:09 -08:00
hlcoord 0, 0, wAttrMap
2014-08-14 23:50:39 -07:00
ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
2013-08-20 12:58:08 -07:00
call ByteFill
jr ClearTileMap
2018-06-24 07:09:41 -07:00
TextBox::
; 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
2015-10-16 10:35:43 -07:00
; text black-and-white scheme.
2013-08-20 12:58:08 -07:00
push bc
push hl
call TextBoxBorder
pop hl
pop bc
jr TextBoxPalette
2018-06-24 07:09:41 -07:00
TextBoxBorder::
2014-08-14 23:50:39 -07:00
; Top
2013-08-20 12:58:08 -07:00
push hl
ld a, "┌"
ld [hli], a
inc a ; "─"
2014-08-14 23:50:39 -07:00
call .PlaceChars
2013-08-20 12:58:08 -07:00
inc a ; "┐"
ld [hl], a
pop hl
2014-08-14 23:50:39 -07:00
; Middle
ld de, SCREEN_WIDTH
2013-08-20 12:58:08 -07:00
add hl, de
2014-08-14 23:50:39 -07:00
.row
2013-08-20 12:58:08 -07:00
push hl
ld a, "│"
ld [hli], a
ld a, " "
2014-08-14 23:50:39 -07:00
call .PlaceChars
2013-08-20 12:58:08 -07:00
ld [hl], "│"
pop hl
2014-08-14 23:50:39 -07:00
ld de, SCREEN_WIDTH
2013-08-20 12:58:08 -07:00
add hl, de
dec b
2014-08-14 23:50:39 -07:00
jr nz, .row
2013-08-20 12:58:08 -07:00
2014-08-14 23:50:39 -07:00
; Bottom
2013-08-20 12:58:08 -07:00
ld a, "└"
ld [hli], a
ld a, "─"
2014-08-14 23:50:39 -07:00
call .PlaceChars
2013-08-20 12:58:08 -07:00
ld [hl], "┘"
ret
2018-06-24 07:09:41 -07:00
.PlaceChars:
2014-08-14 23:50:39 -07:00
; Place char a c times.
ld d, c
2013-08-20 12:58:08 -07:00
.loop
2014-08-14 23:50:39 -07:00
ld [hli], a
2013-08-20 12:58:08 -07:00
dec d
jr nz, .loop
ret
2018-06-24 07:09:41 -07:00
TextBoxPalette::
2013-08-20 12:58:08 -07:00
; Fill text box width c height b at hl with pal 7
2018-01-23 14:39:09 -08:00
ld de, wAttrMap - wTileMap
2013-08-20 12:58:08 -07:00
add hl, de
inc b
inc b
inc c
2013-08-20 12:58:08 -07:00
inc c
2017-12-13 21:36:24 -08:00
ld a, PAL_BG_TEXT
2014-08-14 23:50:39 -07:00
.col
2013-08-20 12:58:08 -07:00
push bc
push hl
2014-08-14 23:50:39 -07:00
.row
2013-08-20 12:58:08 -07:00
ld [hli], a
dec c
2014-08-14 23:50:39 -07:00
jr nz, .row
2013-08-20 12:58:08 -07:00
pop hl
2014-08-14 23:50:39 -07:00
ld de, SCREEN_WIDTH
2013-08-20 12:58:08 -07:00
add hl, de
pop bc
dec b
2014-08-14 23:50:39 -07:00
jr nz, .col
2013-08-20 12:58:08 -07:00
ret
2018-06-24 07:09:41 -07:00
SpeechTextBox::
2013-08-20 12:58:08 -07:00
; Standard textbox.
2014-08-14 23:50:39 -07:00
hlcoord TEXTBOX_X, TEXTBOX_Y
ld b, TEXTBOX_INNERH
ld c, TEXTBOX_INNERW
2013-08-20 12:58:08 -07:00
jp TextBox
2018-06-24 07:09:41 -07:00
TestText::
text "ゲームフりーク!"
2014-08-14 23:50:39 -07:00
done
2013-08-20 12:58:08 -07:00
2018-06-24 07:09:41 -07:00
RadioTerminator::
2014-08-14 23:50:39 -07:00
ld hl, .stop
2013-08-20 12:58:08 -07:00
ret
2014-08-14 23:50:39 -07:00
.stop db "@"
2013-08-20 12:58:08 -07:00
2018-06-24 07:09:41 -07:00
PrintText::
call SetUpTextBox
2018-06-24 07:09:41 -07:00
BuenaPrintText::
2013-08-20 12:58:08 -07:00
push hl
2014-08-14 23:50:39 -07:00
hlcoord TEXTBOX_INNERX, TEXTBOX_INNERY
lb bc, TEXTBOX_INNERH - 1, TEXTBOX_INNERW
2013-08-20 12:58:08 -07:00
call ClearBox
pop hl
2018-06-24 07:09:41 -07:00
PrintTextBoxText::
2014-08-14 23:50:39 -07:00
bccoord TEXTBOX_INNERX, TEXTBOX_INNERY
call PlaceHLTextAtBC
2013-08-20 12:58:08 -07:00
ret
2018-06-24 07:09:41 -07:00
SetUpTextBox::
2013-08-20 12:58:08 -07:00
push hl
call SpeechTextBox
call UpdateSprites
2015-11-25 07:16:29 -08:00
call ApplyTilemap
2013-08-20 12:58:08 -07:00
pop hl
ret
2018-06-24 07:09:41 -07:00
PlaceString::
2013-08-20 12:58:08 -07:00
push hl
2018-06-24 07:09:41 -07:00
PlaceNextChar::
2013-08-20 12:58:08 -07:00
ld a, [de]
cp "@"
jr nz, CheckDict
ld b, h
ld c, l
pop hl
ret
pop de
2018-06-24 07:09:41 -07:00
NextChar::
2013-08-20 12:58:08 -07:00
inc de
jp PlaceNextChar
2018-06-24 07:09:41 -07:00
CheckDict::
dict: MACRO
if \1 == "<NULL>"
2013-08-20 12:58:08 -07:00
and a
2014-08-14 23:50:39 -07:00
else
cp \1
endc
2015-10-04 11:14:51 -07:00
if STRSUB("\2", 1, 1) == "\""
; Replace a character with another one
2016-03-02 21:07:17 -08:00
jr nz, ._\@
2015-10-04 11:14:51 -07:00
ld a, \2
2016-03-02 21:07:17 -08:00
._\@:
elif STRSUB("\2", 1, 1) == "."
; Locals can use a short jump
jr z, \2
else
jp z, \2
endc
2017-12-28 13:31:16 -08:00
ENDM
2015-10-04 11:14:51 -07:00
dict "<MOBILE>", MobileScriptChar
2017-12-14 21:38:52 -08:00
dict "<LINE>", LineChar
dict "<NEXT>", NextLineChar
dict "<CR>", CarriageReturnChar
dict "<NULL>", NullChar
dict "<SCROLL>", _ContTextNoPause
dict "<_CONT>", _ContText
2017-12-14 21:38:52 -08:00
dict "<PARA>", Paragraph
dict "<MOM>", PrintMomsName
dict "<PLAYER>", PrintPlayerName
dict "<RIVAL>", PrintRivalName
dict "<ROUTE>", PlaceJPRoute
dict "<WATASHI>", PlaceWatashi
dict "<KOKO_WA>", PlaceKokoWa
2017-12-14 21:38:52 -08:00
dict "<RED>", PrintRedsName
dict "<GREEN>", PrintGreensName
dict "#", PlacePOKe
dict "<PC>", PCChar
dict "<ROCKET>", RocketChar
dict "<TM>", TMChar
2018-01-18 19:06:51 -08:00
dict "<TRAINER>", TrainerChar
2017-12-14 21:38:52 -08:00
dict "<KOUGEKI>", PlaceKougeki
dict "<LF>", LineFeedChar
2017-12-14 21:38:52 -08:00
dict "<CONT>", ContText
2018-01-18 23:30:19 -08:00
dict "<……>", SixDotsChar
2017-12-14 21:38:52 -08:00
dict "<DONE>", DoneText
dict "<PROMPT>", PromptText
dict "<PKMN>", PlacePKMN
dict "<POKE>", PlacePOKE
dict "%", NextChar
dict "¯", " "
2017-12-14 21:38:52 -08:00
dict "<DEXEND>", PlaceDexEnd
dict "<TARGET>", PlaceMoveTargetsName
dict "<USER>", PlaceMoveUsersName
dict "<ENEMY>", PlaceEnemysName
dict "<PLAY_G>", PlaceGenderedPlayerName
dict "゚", .place ; should be .diacritic
dict "゙", .place ; should be .diacritic
jr .not_diacritic
2014-08-14 23:50:39 -07:00
.diacritic
2013-08-20 12:58:08 -07:00
ld b, a
2014-08-14 23:50:39 -07:00
call Diacritic
2013-08-20 12:58:08 -07:00
jp NextChar
2014-08-14 23:50:39 -07:00
.not_diacritic
cp FIRST_REGULAR_TEXT_CHAR
2014-08-14 23:50:39 -07:00
jr nc, .place
2016-03-02 21:07:17 -08:00
cp "パ"
2014-08-14 23:50:39 -07:00
jr nc, .handakuten
.dakuten
cp FIRST_HIRAGANA_DAKUTEN_CHAR
jr nc, .hiragana_dakuten
2016-03-02 21:07:17 -08:00
add "カ" - "ガ"
jr .katakana_dakuten
.hiragana_dakuten
2016-03-02 21:07:17 -08:00
add "か" - "が"
.katakana_dakuten
2016-03-02 21:07:17 -08:00
ld b, "゙" ; dakuten
2014-08-14 23:50:39 -07:00
call Diacritic
jr .place
.handakuten
cp "ぱ"
jr nc, .hiragana_handakuten
2014-08-14 23:50:39 -07:00
add "ハ" - "パ"
jr .katakana_handakuten
.hiragana_handakuten
2014-08-14 23:50:39 -07:00
add "は" - "ぱ"
.katakana_handakuten
2016-03-02 21:07:17 -08:00
ld b, "゚" ; handakuten
2014-08-14 23:50:39 -07:00
call Diacritic
.place
2013-08-20 12:58:08 -07:00
ld [hli], a
call PrintLetterDelay
jp NextChar
MobileScriptChar::
2013-08-20 12:58:08 -07:00
ld c, l
ld b, h
farcall RunMobileScript
2013-08-20 12:58:08 -07:00
jp PlaceNextChar
print_name: MACRO
2013-08-20 12:58:08 -07:00
push de
2014-08-14 23:50:39 -07:00
ld de, \1
2015-10-04 11:14:51 -07:00
jp PlaceCommandCharacter
2017-12-28 13:31:16 -08:00
ENDM
2014-08-14 23:50:39 -07:00
2018-06-24 07:09:41 -07:00
PrintMomsName: print_name wMomsName
PrintPlayerName: print_name wPlayerName
PrintRivalName: print_name wRivalName
PrintRedsName: print_name wRedsName
PrintGreensName: print_name wGreensName
TrainerChar: print_name TrainerCharText
TMChar: print_name TMCharText
PCChar: print_name PCCharText
RocketChar: print_name RocketCharText
PlacePOKe: print_name PlacePOKeText
PlaceKougeki: print_name KougekiText
SixDotsChar: print_name SixDotsCharText
PlacePKMN: print_name PlacePKMNText
PlacePOKE: print_name PlacePOKEText
PlaceJPRoute: print_name PlaceJPRouteText
PlaceWatashi: print_name PlaceWatashiText
PlaceKokoWa: print_name PlaceKokoWaText
PlaceMoveTargetsName::
2013-08-20 12:58:08 -07:00
ld a, [hBattleTurn]
2014-08-14 23:50:39 -07:00
xor 1
2018-01-18 21:07:13 -08:00
jr PlaceMoveUsersName.place
2013-08-20 12:58:08 -07:00
2018-06-24 07:09:41 -07:00
PlaceMoveUsersName::
2013-08-20 12:58:08 -07:00
ld a, [hBattleTurn]
2018-06-24 07:09:41 -07:00
.place:
2013-08-20 12:58:08 -07:00
push de
and a
2014-08-14 23:50:39 -07:00
jr nz, .enemy
2018-01-23 14:39:09 -08:00
ld de, wBattleMonNick
2015-10-04 11:14:51 -07:00
jr PlaceCommandCharacter
2014-08-14 23:50:39 -07:00
.enemy
ld de, EnemyText
2013-08-20 12:58:08 -07:00
call PlaceString
ld h, b
ld l, c
2018-01-23 14:39:09 -08:00
ld de, wEnemyMonNick
2015-10-04 11:14:51 -07:00
jr PlaceCommandCharacter
2014-08-14 23:50:39 -07:00
2018-06-24 07:09:41 -07:00
PlaceEnemysName::
2013-08-20 12:58:08 -07:00
push de
2014-08-14 23:50:39 -07:00
ld a, [wLinkMode]
2013-08-20 12:58:08 -07:00
and a
jr nz, .linkbattle
2014-08-14 23:50:39 -07:00
2018-01-23 14:39:09 -08:00
ld a, [wTrainerClass]
cp RIVAL1
2014-08-14 23:50:39 -07:00
jr z, .rival
cp RIVAL2
2014-08-14 23:50:39 -07:00
jr z, .rival
2018-01-23 14:39:09 -08:00
ld de, wOTClassName
2013-08-20 12:58:08 -07:00
call PlaceString
ld h, b
ld l, c
ld de, String_Space
2013-08-20 12:58:08 -07:00
call PlaceString
push bc
2017-12-24 09:47:30 -08:00
callfar Battle_GetTrainerName
2013-08-20 12:58:08 -07:00
pop hl
2018-01-23 14:39:09 -08:00
ld de, wStringBuffer1
2015-10-04 11:14:51 -07:00
jr PlaceCommandCharacter
2014-08-14 23:50:39 -07:00
.rival
2018-01-23 14:39:09 -08:00
ld de, wRivalName
2015-10-04 11:14:51 -07:00
jr PlaceCommandCharacter
2014-08-14 23:50:39 -07:00
2013-08-20 12:58:08 -07:00
.linkbattle
2018-01-23 14:39:09 -08:00
ld de, wOTClassName
2015-10-04 11:14:51 -07:00
jr PlaceCommandCharacter
2014-08-14 23:50:39 -07:00
2018-06-24 07:09:41 -07:00
PlaceGenderedPlayerName::
2013-08-20 12:58:08 -07:00
push de
2018-01-23 14:39:09 -08:00
ld de, wPlayerName
2013-08-20 12:58:08 -07:00
call PlaceString
ld h, b
ld l, c
ld a, [wPlayerGender]
2018-01-22 11:34:55 -08:00
bit PLAYERGENDER_FEMALE_F, a
ld de, KunSuffixText
2015-10-04 11:14:51 -07:00
jr z, PlaceCommandCharacter
ld de, ChanSuffixText
2015-10-04 11:14:51 -07:00
jr PlaceCommandCharacter
2014-08-14 23:50:39 -07:00
2018-06-24 07:09:41 -07:00
PlaceCommandCharacter::
2013-08-20 12:58:08 -07:00
call PlaceString
ld h, b
ld l, c
pop de
jp NextChar
2018-01-18 18:48:52 -08:00
TMCharText:: db "TM@"
TrainerCharText:: db "TRAINER@"
PCCharText:: db "PC@"
RocketCharText:: db "ROCKET@"
PlacePOKeText:: db "POKé@"
KougekiText:: db "こうげき@"
SixDotsCharText:: db "……@"
EnemyText:: db "Enemy @"
PlacePKMNText:: db "<PK><MN>@"
PlacePOKEText:: db "<PO><KE>@"
String_Space:: db " @"
; These strings have been dummied out.
PlaceJPRouteText::
PlaceWatashiText::
PlaceKokoWaText:: db "@"
KunSuffixText:: db "@"
ChanSuffixText:: db "@"
2013-08-20 12:58:08 -07:00
2018-06-24 07:09:41 -07:00
NextLineChar::
2013-08-20 12:58:08 -07:00
pop hl
2014-08-14 23:50:39 -07:00
ld bc, SCREEN_WIDTH * 2
2013-08-20 12:58:08 -07:00
add hl, bc
push hl
jp NextChar
LineFeedChar::
2013-08-20 12:58:08 -07:00
pop hl
2014-08-14 23:50:39 -07:00
ld bc, SCREEN_WIDTH
2013-08-20 12:58:08 -07:00
add hl, bc
push hl
jp NextChar
CarriageReturnChar::
2013-08-20 12:58:08 -07:00
pop hl
push de
2018-01-23 14:39:09 -08:00
ld bc, -wTileMap + $10000
2013-08-20 12:58:08 -07:00
add hl, bc
2014-08-14 23:50:39 -07:00
ld de, -SCREEN_WIDTH
ld c, 1
.loop
2013-08-20 12:58:08 -07:00
ld a, h
and a
jr nz, .next
2013-08-20 12:58:08 -07:00
ld a, l
2014-08-14 23:50:39 -07:00
cp SCREEN_WIDTH
jr c, .done
2013-08-20 12:58:08 -07:00
.next
2013-08-20 12:58:08 -07:00
add hl, de
inc c
jr .loop
2013-08-20 12:58:08 -07:00
.done
hlcoord 0, 0
2014-08-14 23:50:39 -07:00
ld de, SCREEN_WIDTH
2013-08-20 12:58:08 -07:00
ld a, c
.loop2
2013-08-20 12:58:08 -07:00
and a
jr z, .done2
2013-08-20 12:58:08 -07:00
add hl, de
dec a
jr .loop2
2013-08-20 12:58:08 -07:00
.done2
2013-08-20 12:58:08 -07:00
pop de
inc de
ld a, [de]
ld c, a
2014-08-14 23:50:39 -07:00
ld b, 0
2013-08-20 12:58:08 -07:00
add hl, bc
push hl
jp NextChar
2018-06-24 07:09:41 -07:00
LineChar::
2013-08-20 12:58:08 -07:00
pop hl
2014-08-14 23:50:39 -07:00
hlcoord TEXTBOX_INNERX, TEXTBOX_INNERY + 2
2013-08-20 12:58:08 -07:00
push hl
jp NextChar
2018-06-24 07:09:41 -07:00
Paragraph::
2013-08-20 12:58:08 -07:00
push de
2014-08-14 23:50:39 -07:00
ld a, [wLinkMode]
cp LINK_COLOSSEUM
jr z, .linkbattle
cp LINK_MOBILE
jr z, .linkbattle
call LoadBlinkingCursor
2014-08-14 23:50:39 -07:00
.linkbattle
call Text_WaitBGMap
2015-11-29 19:29:45 -08:00
call ButtonSound
2014-08-14 23:50:39 -07:00
hlcoord TEXTBOX_INNERX, TEXTBOX_INNERY
lb bc, TEXTBOX_INNERH - 1, TEXTBOX_INNERW
2013-08-20 12:58:08 -07:00
call ClearBox
call UnloadBlinkingCursor
2014-08-14 23:50:39 -07:00
ld c, 20
2013-08-20 12:58:08 -07:00
call DelayFrames
2014-08-14 23:50:39 -07:00
hlcoord TEXTBOX_INNERX, TEXTBOX_INNERY
2013-08-20 12:58:08 -07:00
pop de
jp NextChar
2018-06-24 07:09:41 -07:00
_ContText::
ld a, [wLinkMode]
2013-08-20 12:58:08 -07:00
or a
jr nz, .communication
call LoadBlinkingCursor
2014-08-14 23:50:39 -07:00
.communication
call Text_WaitBGMap
2013-08-20 12:58:08 -07:00
push de
2015-11-29 19:29:45 -08:00
call ButtonSound
2013-08-20 12:58:08 -07:00
pop de
ld a, [wLinkMode]
2013-08-20 12:58:08 -07:00
or a
call z, UnloadBlinkingCursor
; fallthrough
2013-08-20 12:58:08 -07:00
2018-06-24 07:09:41 -07:00
_ContTextNoPause::
2013-08-20 12:58:08 -07:00
push de
call TextScroll
call TextScroll
2014-08-14 23:50:39 -07:00
hlcoord TEXTBOX_INNERX, TEXTBOX_INNERY + 2
2013-08-20 12:58:08 -07:00
pop de
jp NextChar
2018-06-24 07:09:41 -07:00
ContText::
2013-08-20 12:58:08 -07:00
push de
2014-08-14 23:50:39 -07:00
ld de, .cont
2013-08-20 12:58:08 -07:00
ld b, h
ld c, l
call PlaceString
ld h, b
ld l, c
pop de
jp NextChar
.cont: db "<_CONT>@"
2013-08-20 12:58:08 -07:00
2018-06-24 07:09:41 -07:00
PlaceDexEnd::
; Ends a Pokédex entry in Gen 1.
2014-08-14 23:50:39 -07:00
; Dex entries are now regular strings.
2013-08-20 12:58:08 -07:00
ld [hl], "."
pop hl
ret
2018-06-24 07:09:41 -07:00
PromptText::
ld a, [wLinkMode]
cp LINK_COLOSSEUM
2014-08-14 23:50:39 -07:00
jr z, .ok
cp LINK_MOBILE
2014-08-14 23:50:39 -07:00
jr z, .ok
call LoadBlinkingCursor
2013-08-20 12:58:08 -07:00
.ok
call Text_WaitBGMap
2015-11-29 19:29:45 -08:00
call ButtonSound
ld a, [wLinkMode]
cp LINK_COLOSSEUM
2014-08-14 23:50:39 -07:00
jr z, DoneText
cp LINK_MOBILE
2014-08-14 23:50:39 -07:00
jr z, DoneText
call UnloadBlinkingCursor
2013-08-20 12:58:08 -07:00
2018-06-24 07:09:41 -07:00
DoneText::
2013-08-20 12:58:08 -07:00
pop hl
2014-08-14 23:50:39 -07:00
ld de, .stop
2013-08-20 12:58:08 -07:00
dec de
ret
.stop: db "@"
2013-08-20 12:58:08 -07:00
2018-06-24 07:09:41 -07:00
NullChar::
2014-08-14 23:50:39 -07:00
ld a, "?"
2013-08-20 12:58:08 -07:00
ld [hli], a
call PrintLetterDelay
jp NextChar
2018-06-24 07:09:41 -07:00
TextScroll::
2014-08-14 23:50:39 -07:00
hlcoord TEXTBOX_INNERX, TEXTBOX_INNERY
decoord TEXTBOX_INNERX, TEXTBOX_INNERY - 1
ld a, TEXTBOX_INNERH - 1
2014-08-14 23:50:39 -07:00
.col
2013-08-20 12:58:08 -07:00
push af
2014-08-14 23:50:39 -07:00
ld c, TEXTBOX_INNERW
2014-08-14 23:50:39 -07:00
.row
2013-08-20 12:58:08 -07:00
ld a, [hli]
ld [de], a
inc de
dec c
2014-08-14 23:50:39 -07:00
jr nz, .row
2013-08-20 12:58:08 -07:00
inc de
inc de
inc hl
2013-08-20 12:58:08 -07:00
inc hl
pop af
dec a
2014-08-14 23:50:39 -07:00
jr nz, .col
2014-08-14 23:50:39 -07:00
hlcoord TEXTBOX_INNERX, TEXTBOX_INNERY + 2
ld a, " "
ld bc, TEXTBOX_INNERW
2013-08-20 12:58:08 -07:00
call ByteFill
2014-08-14 23:50:39 -07:00
ld c, 5
2013-08-20 12:58:08 -07:00
call DelayFrames
ret
2018-06-24 07:09:41 -07:00
Text_WaitBGMap::
2013-08-20 12:58:08 -07:00
push bc
ld a, [hOAMUpdate]
push af
2014-08-14 23:50:39 -07:00
ld a, 1
2013-08-20 12:58:08 -07:00
ld [hOAMUpdate], a
2013-08-20 12:58:08 -07:00
call WaitBGMap
2013-08-20 12:58:08 -07:00
pop af
ld [hOAMUpdate], a
pop bc
ret
2018-06-24 07:09:41 -07:00
Diacritic::
2013-08-20 12:58:08 -07:00
ret
2018-06-24 07:09:41 -07:00
LoadBlinkingCursor::
2014-08-14 23:50:39 -07:00
ld a, "▼"
ldcoord_a 18, 17
2013-08-20 12:58:08 -07:00
ret
2018-06-24 07:09:41 -07:00
UnloadBlinkingCursor::
lda_coord 17, 17
ldcoord_a 18, 17
2013-08-20 12:58:08 -07:00
ret
2018-06-24 07:09:41 -07:00
FarString::
2013-08-20 12:58:08 -07:00
ld b, a
ld a, [hROMBank]
push af
2014-08-14 23:50:39 -07:00
2013-08-20 12:58:08 -07:00
ld a, b
rst Bankswitch
call PlaceString
2014-08-14 23:50:39 -07:00
2013-08-20 12:58:08 -07:00
pop af
rst Bankswitch
ret
2018-06-24 07:09:41 -07:00
PokeFluteTerminatorCharacter::
2014-08-14 23:50:39 -07:00
ld hl, .stop
2013-08-20 12:58:08 -07:00
ret
.stop: db "@"
2013-08-20 12:58:08 -07:00
2018-06-24 07:09:41 -07:00
PlaceHLTextAtBC::
2018-01-23 14:39:09 -08:00
ld a, [wTextBoxFlags]
2013-08-20 12:58:08 -07:00
push af
2017-12-29 10:18:17 -08:00
set NO_TEXT_DELAY_F, a
2018-01-23 14:39:09 -08:00
ld [wTextBoxFlags], a
2014-08-14 23:50:39 -07:00
call DoTextUntilTerminator
2014-08-14 23:50:39 -07:00
2013-08-20 12:58:08 -07:00
pop af
2018-01-23 14:39:09 -08:00
ld [wTextBoxFlags], a
2013-08-20 12:58:08 -07:00
ret
2018-06-24 07:09:41 -07:00
DoTextUntilTerminator::
2013-08-20 12:58:08 -07:00
ld a, [hli]
cp "@"
ret z
2014-08-14 23:50:39 -07:00
call .TextCommand
jr DoTextUntilTerminator
2013-08-20 12:58:08 -07:00
2014-08-14 23:50:39 -07:00
.TextCommand:
2013-08-20 12:58:08 -07:00
push hl
push bc
ld c, a
ld b, 0
ld hl, TextCommands
add hl, bc
add hl, bc
2013-08-20 12:58:08 -07:00
ld e, [hl]
inc hl
ld d, [hl]
pop bc
pop hl
2014-08-14 23:50:39 -07:00
; jp de
2013-08-20 12:58:08 -07:00
push de
ret
2018-06-24 07:09:41 -07:00
TextCommands::
2018-01-18 19:06:51 -08:00
; entries correspond to TX_* constants (see macros/scripts/text.asm)
dw TextCommand_START ; TX_START
dw TextCommand_RAM ; TX_RAM
dw TextCommand_BCD ; TX_BCD
dw TextCommand_MOVE ; TX_MOVE
dw TextCommand_BOX ; TX_BOX
dw TextCommand_LOW ; TX_LOW
dw TextCommand_WAIT_BUTTON ; TX_WAIT_BUTTON
dw TextCommand_SCROLL ; TX_SCROLL
dw TextCommand_START_ASM ; TX_START_ASM
dw TextCommand_NUM ; TX_NUM
dw TextCommand_EXIT ; TX_EXIT
dw TextCommand_SOUND ; TX_SOUND_DEX_FANFARE_50_79
dw TextCommand_DOTS ; TX_DOTS
dw TextCommand_LINK_WAIT_BUTTON ; TX_LINK_WAIT_BUTTON
dw TextCommand_SOUND ; TX_SOUND_DEX_FANFARE_20_49
dw TextCommand_SOUND ; TX_SOUND_ITEM
dw TextCommand_SOUND ; TX_SOUND_CAUGHT_MON
dw TextCommand_SOUND ; TX_SOUND_DEX_FANFARE_80_109
dw TextCommand_SOUND ; TX_SOUND_FANFARE
dw TextCommand_SOUND ; TX_SOUND_SLOT_MACHINE_START
dw TextCommand_STRINGBUFFER ; TX_STRINGBUFFER
dw TextCommand_DAY ; TX_DAY
dw TextCommand_FAR ; TX_FAR
TextCommand_START::
; text_start
2013-08-20 12:58:08 -07:00
; 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
TextCommand_RAM::
; text_from_ram
2013-08-20 12:58:08 -07:00
; 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
TextCommand_FAR::
; text_jump
2013-08-20 12:58:08 -07:00
; 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
2013-08-20 12:58:08 -07:00
pop hl
pop af
ld [hROMBank], a
ld [MBC3RomBank], a
ret
TextCommand_BCD::
; text_bcd
2014-08-14 23:50:39 -07:00
; write bcd from address, typically ram
2013-08-20 12:58:08 -07:00
; [$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
TextCommand_MOVE::
; text_move
2013-08-20 12:58:08 -07:00
; move to a new tile
2014-08-14 23:50:39 -07:00
; [$03][addr]
2013-08-20 12:58:08 -07:00
ld a, [hli]
2015-11-23 13:04:53 -08:00
ld [wMenuScrollPosition + 2], a
2013-08-20 12:58:08 -07:00
ld c, a
ld a, [hli]
2015-11-23 13:04:53 -08:00
ld [wMenuScrollPosition + 2 + 1], a
2013-08-20 12:58:08 -07:00
ld b, a
ret
TextCommand_BOX::
; text_box
2013-08-20 12:58:08 -07:00
; draw a box
; little endian
2014-08-14 23:50:39 -07:00
; [$04][addr][height][width]
2013-08-20 12:58:08 -07:00
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
TextCommand_LOW::
; text_low
2013-08-20 12:58:08 -07:00
; write text at (1,16)
; [$05]
2014-08-14 23:50:39 -07:00
bccoord TEXTBOX_INNERX, TEXTBOX_INNERY + 2
2013-08-20 12:58:08 -07:00
ret
TextCommand_WAIT_BUTTON::
; text_waitbutton
2013-08-20 12:58:08 -07:00
; wait for button press
; show arrow
; [06]
ld a, [wLinkMode]
cp LINK_COLOSSEUM
jp z, TextCommand_LINK_WAIT_BUTTON
cp LINK_MOBILE
jp z, TextCommand_LINK_WAIT_BUTTON
2014-08-14 23:50:39 -07:00
2013-08-20 12:58:08 -07:00
push hl
call LoadBlinkingCursor
2013-08-20 12:58:08 -07:00
push bc
2015-11-29 19:29:45 -08:00
call ButtonSound
2013-08-20 12:58:08 -07:00
pop bc
call UnloadBlinkingCursor
2013-08-20 12:58:08 -07:00
pop hl
ret
TextCommand_SCROLL::
; text_scroll
; pushes text up two lines and sets the BC cursor to the border tile
; below the first character column of the text box.
2013-08-20 12:58:08 -07:00
push hl
call UnloadBlinkingCursor
call TextScroll
call TextScroll
2013-08-20 12:58:08 -07:00
pop hl
2014-08-14 23:50:39 -07:00
bccoord TEXTBOX_INNERX, TEXTBOX_INNERY + 2
2013-08-20 12:58:08 -07:00
ret
TextCommand_START_ASM::
; start_asm
2013-08-20 12:58:08 -07:00
bit 7, h
2014-08-14 23:50:39 -07:00
jr nz, .not_rom
jp hl
2013-08-20 12:58:08 -07:00
2014-08-14 23:50:39 -07:00
.not_rom
2013-08-20 12:58:08 -07:00
ld a, "@"
ld [hl], a
ret
TextCommand_NUM::
; deciram
2014-08-14 23:50:39 -07:00
; [$09][addr][hi:bytes lo:digits]
2013-08-20 12:58:08 -07:00
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
2013-08-20 12:58:08 -07:00
ld b, a
call PrintNum
ld b, h
ld c, l
pop hl
ret
TextCommand_EXIT::
; interpret_data
2013-08-20 12:58:08 -07:00
push hl
push bc
call GetJoypad
2013-08-20 12:58:08 -07:00
ld a, [hJoyDown]
and A_BUTTON | B_BUTTON
2014-08-14 23:50:39 -07:00
jr nz, .done
2013-08-20 12:58:08 -07:00
ld c, 30
call DelayFrames
2014-08-14 23:50:39 -07:00
.done
2013-08-20 12:58:08 -07:00
pop bc
pop hl
ret
TextCommand_SOUND::
2013-08-20 12:58:08 -07:00
; 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
2014-08-14 23:50:39 -07:00
.loop
2013-08-20 12:58:08 -07:00
ld a, [hli]
2014-08-14 23:50:39 -07:00
cp -1
jr z, .done
2013-08-20 12:58:08 -07:00
cp b
2014-08-14 23:50:39 -07:00
jr z, .play
2013-08-20 12:58:08 -07:00
inc hl
inc hl
2014-08-14 23:50:39 -07:00
jr .loop
2013-08-20 12:58:08 -07:00
2014-08-14 23:50:39 -07:00
.play
2013-08-20 12:58:08 -07:00
push de
ld e, [hl]
inc hl
ld d, [hl]
2013-10-08 10:10:36 -07:00
call PlaySFX
2013-08-20 12:58:08 -07:00
call WaitSFX
pop de
2014-08-14 23:50:39 -07:00
.done
2013-08-20 12:58:08 -07:00
pop hl
pop bc
ret
2018-06-24 07:09:41 -07:00
Unreferenced_Function1522::
; play_cry
2013-08-20 12:58:08 -07:00
push de
ld e, [hl]
inc hl
ld d, [hl]
call PlayMonCry
2013-08-20 12:58:08 -07:00
pop de
pop hl
pop bc
ret
2018-06-24 07:09:41 -07:00
TextSFX::
2018-01-18 19:06:51 -08:00
dbw TX_SOUND_DEX_FANFARE_50_79, SFX_DEX_FANFARE_50_79
dbw TX_SOUND_FANFARE, SFX_FANFARE
dbw TX_SOUND_DEX_FANFARE_20_49, SFX_DEX_FANFARE_20_49
dbw TX_SOUND_ITEM, SFX_ITEM
dbw TX_SOUND_CAUGHT_MON, SFX_CAUGHT_MON
dbw TX_SOUND_DEX_FANFARE_80_109, SFX_DEX_FANFARE_80_109
dbw TX_SOUND_SLOT_MACHINE_START, SFX_SLOT_MACHINE_START
2014-08-14 23:50:39 -07:00
db -1
2013-08-20 12:58:08 -07:00
TextCommand_DOTS::
; limited_interpret_data
2014-08-14 23:50:39 -07:00
; [$0C][num]
2013-08-20 12:58:08 -07:00
ld a, [hli]
ld d, a
push hl
ld h, b
ld l, c
2014-08-14 23:50:39 -07:00
.loop
2013-08-20 12:58:08 -07:00
push de
ld a, "…"
ld [hli], a
call GetJoypad
2013-08-20 12:58:08 -07:00
ld a, [hJoyDown]
and A_BUTTON | B_BUTTON
2014-08-14 23:50:39 -07:00
jr nz, .next
2013-08-20 12:58:08 -07:00
ld c, 10
call DelayFrames
2014-08-14 23:50:39 -07:00
.next
2013-08-20 12:58:08 -07:00
pop de
dec d
2014-08-14 23:50:39 -07:00
jr nz, .loop
2013-08-20 12:58:08 -07:00
ld b, h
ld c, l
pop hl
ret
TextCommand_LINK_WAIT_BUTTON::
; link_wait_button
2013-08-20 12:58:08 -07:00
; wait for key down
; display arrow
push hl
push bc
2015-11-29 19:29:45 -08:00
call ButtonSound
2013-08-20 12:58:08 -07:00
pop bc
pop hl
ret
TextCommand_STRINGBUFFER::
; text_buffer
2014-02-24 18:51:20 -08:00
; Print a string from one of the following:
2018-01-23 14:39:09 -08:00
; 0: wStringBuffer3
; 1: wStringBuffer4
; 2: wStringBuffer5
; 3: wStringBuffer2
; 4: wStringBuffer1
; 5: wEnemyMonNick
; 6: wBattleMonNick
2013-08-20 12:58:08 -07:00
; [$14][id]
ld a, [hli]
push hl
ld e, a
ld d, 0
2015-10-30 07:34:35 -07:00
ld hl, StringBufferPointers
2013-08-20 12:58:08 -07:00
add hl, de
add hl, de
2015-10-30 07:34:35 -07:00
ld a, BANK(StringBufferPointers)
2013-08-20 12:58:08 -07:00
call GetFarHalfword
ld d, h
ld e, l
ld h, b
ld l, c
call PlaceString
pop hl
ret
TextCommand_DAY::
; current_day
2013-08-20 12:58:08 -07:00
call GetWeekday
push hl
push bc
ld c, a
ld b, 0
ld hl, .Days
add hl, bc
add hl, bc
2013-08-20 12:58:08 -07:00
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
2018-06-24 07:09:41 -07:00
.Days:
2013-08-20 12:58:08 -07:00
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@"