summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2018-06-05 22:42:36 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2018-06-05 22:42:36 -0400
commita49da30c57967e01096db3258fadf1933d2459f8 (patch)
treed8289fa1b1f64e810cbab45d3e76874529f1df8b
parente0a13580617b6ae932cff247d2d27727d8e00502 (diff)
PlaceString
-rw-r--r--home/text.asm366
-rw-r--r--hram.asm4
-rw-r--r--shim.sym7
-rw-r--r--wram.asm11
4 files changed, 380 insertions, 8 deletions
diff --git a/home/text.asm b/home/text.asm
index 83bbd42..b3ed0b3 100644
--- a/home/text.asm
+++ b/home/text.asm
@@ -1,6 +1,370 @@
INCLUDE "constants.asm"
-SECTION "Text Commands", ROM0[$107e]
+SECTION "Clear Box", 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
diff --git a/hram.asm b/hram.asm
index 5be7909..8e49ad5 100644
--- a/hram.asm
+++ b/hram.asm
@@ -64,6 +64,10 @@ UNION
hTextBoxCursorBlinkInterval:: ds 2 ; ffaf
NEXTU
+ ds 1 ; TODO
+hTextErrno:: db ; ffb0
+
+NEXTU
hSpriteWidth:: ; ffaf
hSpriteInterlaceCounter:: ; ffaf
diff --git a/shim.sym b/shim.sym
index 4eddee1..b02001f 100644
--- a/shim.sym
+++ b/shim.sym
@@ -1,12 +1,7 @@
; ROM0
-00:0E18 ClearBox
-00:0E2A ClearTileMap
-00:0E3D DrawTextBox
-00:0E93 PlaceString
-00:0E94 PlaceNextChar
-00:0E9D CheckDict
00:15be GetMapObject
00:1720 CheckObjectVisibility
+00:17a8 Function17a8
00:17bf GetObjectStruct
00:1d49 LoadMenuHeader
00:1e58 OpenMenu
diff --git a/wram.asm b/wram.asm
index d3c19a0..ed0d7dd 100644
--- a/wram.asm
+++ b/wram.asm
@@ -172,8 +172,12 @@ ENDU ; c813
ds $32
wBattleAnimEnd::
; c845
+ ds $1b1 ; TODO
- ds $1f8 ; TODO
+wBattleMonNickname:: ds 6 ; c9f6
+wEnemyMonNickname:: ds 6 ; c9fc
+; ca02
+ ds $3b ; TODO
wPlayerSubStatus3:: db ; ca3d
ds $4
@@ -502,6 +506,8 @@ wce63:: db ; ce63
; 76543210
; \-- global debug enable
+SECTION "Mom's Name", WRAM0[$CE6D]
+wMomsName:: ds 6 ; ce6d
SECTION "CE7F", WRAM0[$CE76]
@@ -587,6 +593,9 @@ SECTION "D1DE", WRAM0[$D1DE]
wNumBallItems:: db ; d1de
wBallQuantities:: db ; d1df
+SECTION "Rival's Name", WRAM0[$D258]
+wRivalsName:: ds 6 ; d258
+
SECTION "D4AB", WRAM0[$D4AB]
wJoypadFlags:: db ; d4ab