summaryrefslogtreecommitdiff
path: root/home/overworld.asm
diff options
context:
space:
mode:
Diffstat (limited to 'home/overworld.asm')
-rw-r--r--home/overworld.asm135
1 files changed, 133 insertions, 2 deletions
diff --git a/home/overworld.asm b/home/overworld.asm
index 8ea66ca..bd0cc4c 100644
--- a/home/overworld.asm
+++ b/home/overworld.asm
@@ -42,8 +42,139 @@ CheckStartmenuSelectHook:
dec a
ret
-Function2c4a::
-; TODO
+Function2c4a: ; 2c4a (0:2c4a)
+; copy of Function2ba8
+.loop
+ call Function2c5a
+ and a
+ ld a, [$cb6e]
+ bit 5, a
+ ret z
+ bit 6, a
+ jr z, .loop
+ scf
+ ret
+
+Function2c5a: ; 2c5a (0:2c5a)
+ ldh a, [hROMBank]
+ push af
+ ld a, BANK(Function50b9)
+ call Bankswitch
+ call Function50b9
+ call Function_18a0
+ ld a, BANK(Functiond6e4)
+ call Bankswitch
+ call Functiond6e4
+ ld a, BANK(_UpdateSprites)
+ call Bankswitch
+ call _UpdateSprites
+ call DelayFrame
+ call UpdateToolgear
+ ld hl, wToolgearFlags
+ set 2, [hl]
+ call DelayFrame
+ pop af
+ call Bankswitch
+ ret
+
+UpdateAndTransferToolgear: ; 2c8b (0:2c8b)
+ call DelayFrame
+ call UpdateToolgear
+ ld hl, wToolgearFlags
+ set 2, [hl] ; ; transfer toolgear to window
+ call DelayFrame
+ ret
+
+ScheduleNorthRowRedraw: ; 2c9a (0:2c9a)
+ coord hl, 0, 0
+ call CopyToRedrawRowOrColumnSrcTiles
+ ld a, [wBGMapAnchor]
+ ldh [hRedrawRowOrColumnDest], a
+ ld a, [wBGMapAnchor + 1]
+ ldh [hRedrawRowOrColumnDest + 1], a
+ ld a, REDRAW_ROW
+ ldh [hRedrawRowOrColumnMode], a
+ ret
+
+ScheduleSouthRowRedraw: ; 2caf (0:2caf)
+ coord hl, 0, SCREEN_HEIGHT - 2
+ call CopyToRedrawRowOrColumnSrcTiles
+ ld a, [wBGMapAnchor]
+ ld l, a
+ ld a, [wBGMapAnchor + 1]
+ ld h, a
+ ld bc, BG_MAP_WIDTH * (SCREEN_HEIGHT - 2)
+ add hl, bc
+ ; the following 4 lines wrap us from bottom to top if necessary
+ ld a, h
+ and HIGH(vBGMap1 - vBGMap0 - $01)
+ or HIGH(vBGMap0)
+ ldh [hRedrawRowOrColumnDest + 1], a
+ ld a, l
+ ldh [hRedrawRowOrColumnDest], a
+ ld a, REDRAW_ROW
+ ldh [hRedrawRowOrColumnMode], a
+ ret
+
+ScheduleEastColumnRedraw: ; 2cd0 (0:2cd0)
+ coord hl, SCREEN_WIDTH - 2, 0
+ call ScheduleColumnRedrawHelper
+ ld a, [wBGMapAnchor]
+ ld c, a
+ and ($FF ^ (BG_MAP_WIDTH - 1)) ; mask upper address bits
+ ld b, a
+ ld a, c
+ add SCREEN_WIDTH
+ and BG_MAP_WIDTH - 1 ; mask lower address bits
+ or b
+ ldh [hRedrawRowOrColumnDest], a
+ ld a, [wBGMapAnchor + 1]
+ ldh [hRedrawRowOrColumnDest + 1], a
+ ld a, REDRAW_COL
+ ldh [hRedrawRowOrColumnMode], a
+ ret
+
+ScheduleWestColumnRedraw: ; 2cef (0:2cef)
+ coord hl, 0, 0
+ call ScheduleColumnRedrawHelper
+ ld a, [wBGMapAnchor]
+ ldh [hRedrawRowOrColumnDest], a
+ ld a, [wBGMapAnchor + 1]
+ ldh [hRedrawRowOrColumnDest + 1], a
+ ld a, REDRAW_COL
+ ldh [hRedrawRowOrColumnMode], a
+ ret
+
+CopyToRedrawRowOrColumnSrcTiles: ; 2d04 (0:2d04)
+ ld de, wRedrawRowOrColumnSrcTiles
+ ld c, 2 * SCREEN_WIDTH
+.loop
+ ld a, [hli]
+ ld [de], a
+ inc de
+ dec c
+ jr nz, .loop
+ ret
+
+ScheduleColumnRedrawHelper: ; 2d10 (0:2d10)
+ ld de, wRedrawRowOrColumnSrcTiles
+ ld c, SCREEN_HEIGHT
+.loop
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hl]
+ ld [de], a
+ inc de
+ ld a, SCREEN_WIDTH - 1
+ add l
+ ld l, a
+ jr nc, .noCarry
+ inc h
+.noCarry
+ dec c
+ jr nz, .loop
+ ret
if DEBUG
SECTION "Install StartMenu Hook Function", ROM0[$35EC]