summaryrefslogtreecommitdiff
path: root/home/text.asm
blob: 83bbd420e7844314335d08ad3c0a75686864c007 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
INCLUDE "constants.asm"

SECTION "Text Commands", ROM0[$107e]

ScrollTextUpOneLine:: ; 107e (0:107e)
; move both rows of text in the normal text box up one row
; always called twice in a row
; first time, copy the two rows of text to the "in between" rows that are usually emtpy
; second time, copy the bottom row of text into the top row of text
	coord hl, TEXTBOX_X, TEXTBOX_INNERY     ; top row of text
	coord de, TEXTBOX_X, TEXTBOX_INNERY - 1 ; empty line above text
	ld b, TEXTBOX_WIDTH * 3
.copyText
	ld a, [hli]
	ld [de], a
	inc de
	dec b
	jr nz, .copyText
	coord hl, TEXTBOX_INNERX, TEXTBOX_INNERY + 2
	ld a, " "
	ld b, TEXTBOX_INNERW
.clearText
	ld [hli], a
	dec b
	jr nz, .clearText
	ld b, $05           ; wait five frames
.waitFrame
	call DelayFrame
	dec b
	jr nz, .waitFrame
	ret

ProtectedWaitBGMap:: ; 10a0 (0:10a0)
	push bc
	call WaitBGMap
	pop bc
	ret

TextCommandProcessor:: ; 10a6 (0:10a6)
; Process a string of text commands
; at hl and write text to bc
	ld a, [wTextBoxFlags]
	push af
	set 1, a
	ld [wTextBoxFlags], a
	ld a, c
	ld [wTextDest], a
	ld a, b
	ld [wTextDest + 1], a
    ; fall through
    
NextTextCommand:: ; 10b7 (0:10b7)
	ld a, [hli]
	cp "@" ; terminator
	jr nz, .doTextCommand
	pop af
	ld [wTextBoxFlags], a
	ret
.doTextCommand
	push hl
	ld hl, TextCommands
	push bc
	add a
	ld b, $00
	ld c, a
	add hl, bc
	pop bc
	ld a, [hli]
	ld h, [hl]
	ld l, a
	jp hl

Text_TX_BOX:: ; 10d0 (0:10d0)
; TX_BOX
; draw a box
; little endian
; [$04][addr][height][width]
	pop hl
	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 DrawTextBox
	pop hl
	jr NextTextCommand
    
Text_TX:: ; 10e2 (0:10e2)
; TX
; write text until "@"
; [$00]["...@"]
	pop hl
	ld d, h
	ld e, l
	ld h, b
	ld l, c
	call PlaceString
	ld h, d
	ld l, e
	inc hl
	jr NextTextCommand

Text_TX_RAM:: ; 10ef (0:10ef)
; text_from_ram
; write text from a ram address
; little endian
; [$01][addr]
	pop hl
	ld a, [hli]
	ld e, a
	ld a, [hli]
	ld d, a
	push hl
	ld h, b
	ld l, c
	call PlaceString
	pop hl
	jr NextTextCommand

Text_TX_BCD:: ; 10fd (0:10fd)
; TX_BCD
; write bcd from address, typically ram
; [$02][addr][flags]
; flags: see PrintBCDNumber
	pop hl
	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
	jr NextTextCommand

Text_TX_MOVE:: ; 110f (0:110f)
; TX_MOVE
; move to a new tile
; [$03][addr]
	pop hl
	ld a, [hli]
	ld [wTextDest], a
	ld c, a
	ld a, [hli]
	ld [wTextDest + 1], a
	ld b, a
	jp NextTextCommand

Text_TX_LOW:: ; 111d (0:111d)
; TX_LOW
; write text at (1,16)
; [$05]
	pop hl
	coord bc, TEXTBOX_INNERX, TEXTBOX_INNERY + 2
	jp NextTextCommand
; 0x1124

Text_WAIT_BUTTON:: ; 1124 (0:1124)
; TX_WAITBUTTON
; wait for button press
; show arrow
; [06]
	ld a, [wLinkMode]
	cp $03
	jp z, Text_TX_LINK_WAIT_BUTTON
	ld a, "▼"
	ldcoord_a TEXTBOX_WIDTH - 2, TEXTBOX_Y + TEXTBOX_HEIGHT - 1
	push bc
	call ButtonSound
	pop bc
	ld a, "─"
	ldcoord_a TEXTBOX_WIDTH - 2, TEXTBOX_Y + TEXTBOX_HEIGHT - 1
	pop hl
	jp NextTextCommand

Text_TX_SCROLL:: ; 113f (0:113f)
; TX_SCROLL
; pushes text up two lines and sets the BC cursor to the border tile
; below the first character column of the text box.
; [07]
	ld a, "─"
	ldcoord_a TEXTBOX_WIDTH - 2, TEXTBOX_Y + TEXTBOX_HEIGHT - 1
	call ScrollTextUpOneLine
	call ScrollTextUpOneLine
	pop hl
	coord bc, TEXTBOX_INNERX, TEXTBOX_INNERY + 2
	jp NextTextCommand

Text_START_ASM:: ; 1151 (0:1151)
; TX_ASM
; Executes code following this command.
; Text processing is resumed upon returning.
; [08][asm...ret]
	pop hl
	ld de, NextTextCommand
	push de
	jp hl

Text_TX_NUM:: ; 1157 (0:1157)
; TX_NUM
; [$09][addr][hi:bytes lo:digits]
	pop hl
	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 $0f
	ld c, a
	ld a, b
	and $f0
	swap a
	set 6, a
	ld b, a
	call PrintNumber
	ld b, h
	ld c, l
	pop hl
	jp NextTextCommand
; 0x1175

Text_TX_EXIT: ; 1175 (0:1175)
; TX_EXIT
; [$0A]
	push bc
	call GetJoypad
	ldh a, [hJoyState]
	and (A_BUTTON | B_BUTTON)
	jr nz, .done
	ld c, 30
	call DelayFrames
.done
	pop bc
	pop hl
	jp NextTextCommand
; 0x1189

Text_PlaySound:: ; 1189 (0:1189)
; Text_PlaySound
; [0B|0E..13] Play Sound Effects
; [14..16]    Play Pokémon Cries
	pop hl
	push bc
	dec hl
	ld a, [hli]
	ld b, a
	push hl
	ld hl, .soundTable
.loop
	ld a, [hli]
	cp b
	jr z, .found
	inc hl
	inc hl
	jr .loop
.found
	cp $14
	jr z, .playCry
	cp $15
	jr z, .playCry
	cp $16
	jr z, .playCry
	push de
	ld e, [hl]
	inc hl
	ld d, [hl]
	call PlaySFX
	call WaitSFX
	pop de
	pop hl
	pop bc
	jp NextTextCommand
.playCry
	push de
	ld e, [hl]
	inc hl
	ld d, [hl]
	call PlayCry
	pop de
	pop hl
	pop bc
	jp NextTextCommand

.soundTable:
	dbw TX_SOUND_0B, $0063
	dbw TX_SOUND_12, $006B
	dbw TX_SOUND_0E, $0066
	dbw TX_SOUND_0F, $0067
	dbw TX_SOUND_10, $0068
	dbw TX_SOUND_11, $0069
	dbw TX_SOUND_13, $0027
	dbw TX_CRY_14,   MON_NIDORINA ; or MON_LEAFY?
	dbw TX_CRY_15,   MON_PIGEOT
	dbw TX_CRY_16,   MON_JUGON

Text_TX_DOTS: ; 11e1 (0:11e1)
	pop hl
	ld a, [hli]
	ld d, a
	push hl
	ld h, b
	ld l, c
.loop
	ld a, "…"
	ld [hli], a
	push de
	call GetJoypad
	pop de
	ldh a, [hJoyState]
	and (A_BUTTON | B_BUTTON)
	jr nz, .next
	ld c, 10
	call DelayFrames
.next
	dec d
	jr nz, .loop
	ld b, h
	ld c, l
	pop hl
	jp NextTextCommand
	
Text_TX_LINK_WAIT_BUTTON:: ; 1203 (0:1203)
	push bc
	call ButtonSound
	pop bc
	pop hl
	jp NextTextCommand
; 0x120c

TextCommands:: ; 120c
	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
	dw Text_TX_DOTS
	dw Text_TX_LINK_WAIT_BUTTON
	dw Text_PlaySound
	dw Text_PlaySound
	dw Text_PlaySound
	dw Text_PlaySound
	dw Text_PlaySound
	dw Text_PlaySound
	dw Text_PlaySound
	dw Text_PlaySound
	dw Text_PlaySound