diff options
Diffstat (limited to 'home/text.asm')
-rw-r--r-- | home/text.asm | 366 |
1 files changed, 365 insertions, 1 deletions
diff --git a/home/text.asm b/home/text.asm index 83bbd42..3fb2cc3 100644 --- a/home/text.asm +++ b/home/text.asm @@ -1,6 +1,370 @@ INCLUDE "constants.asm" -SECTION "Text Commands", ROM0[$107e] +SECTION "Text Printing Functions", ROM0[$0e18] + +ClearBox:: ; 00:0e18 +; Fill a c*b box at hl with blank tiles. + ld a, " " + ; fallthrough + +FillBoxWithByte:: + ld de, SCREEN_WIDTH +.asm_0e1d: ; 00:0e1d + push hl + push bc +.asm_0e1f: ; 00:0e1f + ld [hli], a + dec c + jr nz, .asm_0e1f + pop bc + pop hl + add hl, de + dec b + jr nz, .asm_0e1d + ret + +ClearTileMap:: ; 00:0e2a +; Fill wTileMap with blank tiles. + + hlcoord 0, 0 + ld bc, SCREEN_HEIGHT * SCREEN_WIDTH + ld a, " " + call ByteFill + ldh a, [rLCDC] + bit 7, a + ret z + jp WaitBGMap + +DrawTextBox:: ; 00:0e3d + + ; 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 +; e6a + +.PlaceChars: ; e6a +; Place char a c times. + ld d, c +.loop + ld [hli], a + dec d + jr nz, .loop + ret +; e70 + +PrintText:: + push hl + hlcoord TEXTBOX_X, TEXTBOX_Y + ld b, TEXTBOX_INNERH + ld c, TEXTBOX_INNERW + call DrawTextBox + call Function17a8 + call WaitBGMap + pop hl +PrintTextBoxText:: + bccoord TEXTBOX_INNERX, TEXTBOX_INNERY + call TextCommandProcessor + ret + +SpeechTextBox:: +; Standard textbox. + hlcoord TEXTBOX_X, TEXTBOX_Y + ld b, TEXTBOX_INNERH + ld c, TEXTBOX_INNERW + jp DrawTextBox + +PlaceString:: ; 00:0e93 + push hl +PlaceNextChar:: ; 00:0e94 + ld a, [de] + cp "@" + jr nz, CheckDict + ld b, h + ld c, l + pop hl + ret + +CheckDict:: ; 00:0e9d +dict: MACRO +if \1 == 0 + and a +else + cp \1 +endc + jp z, \2 +ENDM + + cp "<NEXT>" + jr nz, .asm_0eaa + pop hl + ld bc, 2 * SCREEN_WIDTH + add hl, bc + push hl + jp NextChar + +.asm_0eaa: ; 00:0eaa + cp "<LINE>" + jr nz, .asm_0eb6 + pop hl + hlcoord 1, 16 + push hl + jp NextChar + +.asm_0eb6: ; 00:0eb6 + dict 0, NullChar + dict "<SCROLL>", _ContTextNoPause + dict "<_CONT>", _ContText + dict "<PARA>", Paragraph + dict "<MOM>", PrintMomsName + dict "<PLAYER>", PrintPlayerName + dict "<RIVAL>", PrintRivalName + dict "#", PlacePOKe + dict "<PC>", PCChar + dict "<ROCKET>", RocketChar + dict "<TM>", TMChar + dict "<TRAINER>", TrainerChar + dict "<CONT>", ContText + dict "<……>", SixDotsChar + dict "<DONE>", DoneText + dict "<PROMPT>", PromptText + dict "<GA>", GaCharacter + dict "<DEXEND>", PlaceDexEnd + dict "<TARGET>", PlaceMoveTargetsName + dict "<USER>", PlaceMoveUsersName + + cp "゚" + jr z, .diacritic + cp "゙" + jr nz, .not_diacritic +.diacritic: ; 00:0f21 + push hl + ld bc, -SCREEN_WIDTH + add hl, bc + ld [hl], a + pop hl + jr NextChar + +.not_diacritic: ; 00:0f2a + cp FIRST_REGULAR_TEXT_CHAR + jr nc, .place + cp "パ" + jr nc, .handakuten + cp FIRST_HIRAGANA_DAKUTEN_CHAR + jr nc, .hiragana_dakuten + add "カ" - "ガ" + jr .katakana_dakuten + +.hiragana_dakuten: ; 00:0f3a + add "か" - "が" +.katakana_dakuten: ; 00:0f3c + push af + ld a, "゙" + push hl + ld bc, -SCREEN_WIDTH + add hl, bc + ld [hl], a + pop hl + pop af + jr .place + +.handakuten: ; 00:0f49 + cp "ぱ" + jr nc, .hiragana_handakuten + add "ハ" - "パ" + jr .katakana_handakuten + +.hiragana_handakuten: ; 00:0f51 + add "は" - "ぱ" +.katakana_handakuten: ; 00:0f53 + push af + ld a, "゚" + push hl + ld bc, -SCREEN_WIDTH + add hl, bc + ld [hl], a + pop hl + pop af +.place: ; 00:0f5e + ld [hli], a + call PrintLetterDelay +NextChar:: ; 00:0f62 + inc de + jp PlaceNextChar + +NullChar:: ; 00:0f66 + ld b, h + ld c, l + pop hl + ld de, .Text + dec de + ret + +.Text: + deciram hTextErrno, 1, 2 + text "エラー" + done + +print_name: MACRO + push de + ld de, \1 + jr PlaceCommandCharacter +ENDM + +PrintMomsName:: print_name wMomsName +PrintPlayerName:: print_name wPlayerName +PrintRivalName:: print_name wRivalsName + +TrainerChar:: print_name TrainerCharText +TMChar:: print_name TMCharText +PCChar:: print_name PCCharText +RocketChar:: print_name RocketCharText +PlacePOKe:: print_name POKeCharText +SixDotsChar:: print_name SixDotsCharText +GaCharacter:: print_name GaCharacterTExt + +PlaceMoveTargetsName:: ; 00:0fb3 + ldh a, [hBattleTurn] + xor $1 + jr asm_0fbb + +PlaceMoveUsersName:: ; 00:0fb9 + ldh a, [hBattleTurn] +asm_0fbb: ; 00:0fbb + push de + and a + jr nz, .asm_0fc4 + ld de, wEnemyMonNickname + jr PlaceCommandCharacter + +.asm_0fc4: ; 00:0fc4 + ld de, EnemyText + call PlaceString + ld h, b + ld l, c + ld de, wBattleMonNickname +PlaceCommandCharacter: ; 00:0fcf + call PlaceString + ld h, b + ld l, c + pop de + inc de + jp PlaceNextChar + +TMCharText:: db "わざマシン@" +TrainerCharText:: db "トレーナー@" +PCCharText:: db "パソコン@" +RocketCharText:: db "ロケットだん@" +POKeCharText:: db "ポケモン@" +SixDotsCharText:: db "……@" +EnemyText:: db "てきの @" +GaCharacterTExt:: db "が @" + +ContText:: ; 00:1001 + push de + ld b, h + ld c, l + ld hl, .Text + call TextCommandProcessor + ld h, b + ld l, c + pop de + inc de + jp PlaceNextChar + +.Text: + text "<_CONT>@" + db "@" + +PlaceDexEnd:: ; 00:1015 + ld [hl], "。" + pop hl + ret + +PromptText:: ; 00:1019 + ld a, [wLinkMode] + cp $3 + jp z, Function1026 + ld a, "▼" + ldcoord_a 18, 17 +Function1026:: ; 00:1026 + call ProtectedWaitBGMap + call ButtonSound + ld a, "─" + ldcoord_a 18, 17 +DoneText:: ; 00:1031 + pop hl + ld de, .Text + dec de + ret + +.Text:: ; 00:1037 + db "@" + +Paragraph:: ; 00:1038 + push de + ld a, "▼" + ldcoord_a 18, 17 + call ProtectedWaitBGMap + call ButtonSound + hlcoord 1, 13 + lb bc, 4, 18 + call ClearBox + ld a, "─" + ldcoord_a 18, 17 + ld c, 20 + call DelayFrames + pop de + hlcoord 1, 14 + jp NextChar + +_ContText:: ; 00:105e + ld a, "▼" + ldcoord_a 18, 17 + call ProtectedWaitBGMap + push de + call ButtonSound + pop de + ld a, "─" + ldcoord_a 18, 17 +_ContTextNoPause:: ; 00:1070 + push de + call ScrollTextUpOneLine + call ScrollTextUpOneLine + hlcoord 1, 16 + pop de + jp NextChar ScrollTextUpOneLine:: ; 107e (0:107e) ; move both rows of text in the normal text box up one row |