push hl
ld de, exit_to
add hl, de ; hl = map ptr
+
+ ; fade out
+ call video_fade_out
ld a, [hl+]
ld c, a
ld l, a ; hl = map header ptr
call map_load
+ ; fade back in
+ call video_fade_in
+
pop bc ; bc = exit table now
; finally adjust player position
ret
+ ; delays by n frames
+ ; inputs:
+ ; bc: frame amount to wait
+video_wait_n_frames:
+ push bc
+ call next_vblank_wait
+ pop bc
+
+ dec bc
+
+ ld a, b
+ or a, c
+ jr nz, video_wait_n_frames REL
+ ret
+
+ ; fades out the background
+ ; interrupts must be enabled
+ ; preserved all registers
+video_fade_out:
+ push_all
+
+ ld bc, 0xF
+ call video_wait_n_frames
+
+ pop_all
+ ret
+
+ ; fades the background in
+ ; sets RBGP to BGP
+ ; interrupts must be enabled
+ ; preserved all registers
+video_fade_in:
+ push_all
+
+ ld bc, 0xF
+ call video_wait_n_frames
+
+ ld a, BGP
+ ld [RBGP], a
+
+ pop_all
+ ret
+
; loads tilesets
; inputs:
; de: source