diff options
Diffstat (limited to 'home/print_text.asm')
-rwxr-xr-x | home/print_text.asm | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/home/print_text.asm b/home/print_text.asm new file mode 100755 index 00000000..31cbd744 --- /dev/null +++ b/home/print_text.asm @@ -0,0 +1,149 @@ +PrintLetterDelay:: +; Wait before printing the next letter. + +; The text speed setting in wOptions is actually a frame count: +; fast: 1 frame +; mid: 3 frames +; slow: 5 frames + +; wTextboxFlags[!0] and A or B override text speed with a one-frame delay. +; wOptions[4] and wTextboxFlags[!1] disable the delay. + + ld a, [wOptions] + bit NO_TEXT_SCROLL, a + ret nz + +; non-scrolling text? + ld a, [wTextboxFlags] + bit NO_TEXT_DELAY_F, a + ret z + + push hl + push de + push bc + + ld hl, hOAMUpdate + ld a, [hl] + push af + +; orginally turned oam update off... +; ld a, 1 + ld [hl], a + +; force fast scroll? + ld a, [wTextboxFlags] + bit FAST_TEXT_DELAY_F, a + jr z, .fast + +; text speed + ld a, [wOptions] + and %111 + jr .updatedelay + +.fast + ld a, TEXT_DELAY_FAST + +.updatedelay + ld [wTextDelayFrames], a + +.checkjoypad + call GetJoypad + +; input override + ld a, [wDisableTextAcceleration] + and a + jr nz, .wait + +; Wait one frame if holding A or B. + ldh a, [hJoyDown] + bit A_BUTTON_F, a + jr z, .checkb + jr .delay +.checkb + bit B_BUTTON_F, a + jr z, .wait + +.delay + call DelayFrame + jr .end + +.wait + ld a, [wTextDelayFrames] + and a + jr nz, .checkjoypad + +.end + pop af + ldh [hOAMUpdate], a + pop bc + pop de + pop hl + ret + +CopyDataUntil:: +; Copy [hl .. bc) to de. + +; In other words, the source data is +; from hl up to but not including bc, +; and the destination is de. + + ld a, [hli] + ld [de], a + inc de + ld a, h + cp b + jr nz, CopyDataUntil + ld a, l + cp c + jr nz, CopyDataUntil + ret + +INCLUDE "home/print_num.asm" + +Function33ce:: +; Print c-digit hex number from de to hl +.asm_33ce + push bc + call Function33d7 + pop bc + dec c + jr nz, .asm_33ce + ret + +Function33d7:: ; 33d7 (0:33d7) + ld a, [de] + swap a + and $f + call Function33e9 + ld [hli], a + ld a, [de] + and $f + call Function33e9 + ld [hli], a + inc de + ret + +Function33e9:: ; 33e9 (0:33e9) + ld bc, .digits + add c + ld c, a + ld a, $0 + adc b + ld b, a + ld a, [bc] + ret + +.digits db "0123456789ABCDEF" + +FarPrintText:: + ld [wBuffer], a + ld a, [hROMBank] + push af + ld a, [wBuffer] + rst Bankswitch + + call PrintText + + pop af + rst Bankswitch + ret
\ No newline at end of file |