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
|
INCLUDE "charmap.inc"
INCLUDE "code_macros.inc"
SECTION "text_char", ROMX[$4bf7], BANK[$02]
far_textbox_print_char::
farcall textbox_print_char
jp farcall_ret
; Returns:
; flags - z if reached end of string
textbox_print_char::
ld a, [w_c342]
bit 0, a
jp nz, farcall_ret
ld a, [w_textbox_cur_string + 0]
ld l, a
ld a, [w_textbox_cur_string + 1]
ld h, a
ld a, [w_textbox_cur_x]
ld b, a
ld a, [w_textbox_cur_y]
ld c, a
ld a, [hl+]
ld e, a
ld a, [hl+]
; Check if we've reached the end of the string
ld d, a
and e
cp TX_END
jp z, farcall_ret
push hl
; Check for line feed
ld a, e
cp LOW(TX_LF)
jr nz, .not_line_feed
ld a, d
cp HIGH(TX_LF)
jr z, .line_feed
.not_line_feed
; Draw ピ one pixel higher
ld a, e
cp "ピ"
jr nz, .not_pi
ld a, d
and a
jr nz, .not_pi
dec c
.not_pi
; Draw character
farcall textbox_draw_char
; Leave two pixels space between each character
ld hl, w_textbox_cur_x
add 2
add [hl]
ld [hl], a
jr .done
.line_feed
; Advance to the next line
ld a, [w_textbox_x]
ld [w_textbox_cur_x], a
ld a, [w_textbox_cur_y]
add 11
ld [w_textbox_cur_y], a
.done
; Back up string pointer
pop hl
ld16 w_textbox_cur_string, hl
; Check if the next character is a terminator
ld a, [hl+]
and [hl]
cp TX_END
jp farcall_ret
; Returns:
; a - character width
; Parameters:
; de - character to print
; b - x position
; c - y position
textbox_draw_char::
push de
; Get char address
sla e
rl d
ld hl, text_chars_offsets
add hl, de
ld e, [hl]
inc hl
ld d, [hl]
ld hl, gfx_text_chars_dark
add hl, de
ld16 w_vwf_char_addr, hl
ld a, BANK(gfx_text_chars_dark)
ld [w_vwf_char_bank], a
ld a, b
ld [w_vwf_char_start_x], a
; Get character width
pop de
ld hl, text_chars_widths
add hl, de
ld a, [hl]
and a
jp z, farcall_ret
; Check we aren't drawing outside the textbox
push af
add b
ld hl, w_textbox_width
cp [hl]
jr c, .inside_width
pop af
jp farcall_ret
.inside_width
ld [w_vwf_char_end_x], a
ld a, c
ld [w_vwf_char_start_y], a
add 9
ld hl, w_textbox_height
cp [hl]
jr c, .inside_height
pop af
jp farcall_ret
.inside_height
ld [w_vwf_char_end_y], a
call vwf_char_draw
pop af
jp farcall_ret
SECTION "textbox_delay", ROMX[$5b7a], BANK[$02]
textbox_delay::
ld a, [w_c343]
bit 4, a
jr nz, .no_blink
ld a, [w_textbox_cur_x]
sub 3
ld b, a
ld a, [w_textbox_cur_y]
inc a
ld c, a
ld a, $e9
call function_00_208c
.no_blink
ld hl, w_textbox_delay_timer
dec [hl]
jp farcall_ret
|