diff options
-rw-r--r-- | constants/misc_constants.asm | 4 | ||||
-rw-r--r-- | home/map.asm | 6 | ||||
-rw-r--r-- | home/overworld.asm | 135 | ||||
-rw-r--r-- | home/tileset.asm | 6 |
4 files changed, 143 insertions, 8 deletions
diff --git a/constants/misc_constants.asm b/constants/misc_constants.asm index 39f2769..b536ecf 100644 --- a/constants/misc_constants.asm +++ b/constants/misc_constants.asm @@ -26,3 +26,7 @@ D_PAD EQU D_RIGHT | D_LEFT | D_UP | D_DOWN ; Boolean values FALSE EQU 0 TRUE EQU 1 + +; RedrawRowOrColumn functions +REDRAW_COL EQU 1 +REDRAW_ROW EQU 2 diff --git a/home/map.asm b/home/map.asm index d17cae3..aac770c 100644 --- a/home/map.asm +++ b/home/map.asm @@ -1688,14 +1688,14 @@ Function2b87:: Function2ba8:: ; 00:2ba8 ldh a, [hROMBank] push af - ld a, $1 + ld a, BANK(Function50b9) call Bankswitch call Function50b9 call Function18a0 - ld a, $3 + ld a, BANK(Functiond6e4) call Bankswitch call Functiond6e4 - ld a, $1 + ld a, BANK(_UpdateSprites) call Bankswitch call _UpdateSprites call DelayFrame 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] diff --git a/home/tileset.asm b/home/tileset.asm index e3093c9..30ac0e2 100644 --- a/home/tileset.asm +++ b/home/tileset.asm @@ -5,12 +5,12 @@ SECTION "LoadTilesetGFX", ROM0[$2D26] LoadTilesetGFX:: ; 2d26 call GetMapEnvironment - cp 1 ; TODO: constantify this + cp TOWN jr z, .exterior - cp 2 ; TODO: constantify this + cp ROUTE jr z, .exterior ld a, [wMapTileset] - cp $1B ; TODO: constantify this + cp TILESET_SS_ANNE_DOCK jr z, .exterior ld a, [wTilesetTilesAddress] |