diff options
Diffstat (limited to 'home/map.asm')
-rw-r--r-- | home/map.asm | 245 |
1 files changed, 131 insertions, 114 deletions
diff --git a/home/map.asm b/home/map.asm index 81c7988d8..1a964fc22 100644 --- a/home/map.asm +++ b/home/map.asm @@ -1232,128 +1232,129 @@ UnmaskObject:: ; 271e ; 272a -Function272a:: ; 272a +ScrollMapDown:: ; 272a hlcoord 0, 0 ld de, BGMapBuffer - call Function27b7 - ld c, $28 + call BackupBGMapRow + ld c, 2 * SCREEN_WIDTH call FarCallScrollBGMapPalettes - ld a, [wd152] + ld a, [wBGMapAnchorLo] ld e, a - ld a, [wd153] + ld a, [wBGMapAnchorHi] ld d, a - call Function27d3 + call UpdateBGMapRow ld a, $1 ld [hBGMapUpdate], a ret ; 2748 -Function2748:: ; 2748 - hlcoord 0, 16 +ScrollMapUp:: ; 2748 + hlcoord 0, SCREEN_HEIGHT - 2 ld de, BGMapBuffer - call Function27b7 - ld c, $28 + call BackupBGMapRow + ld c, 2 * SCREEN_WIDTH call FarCallScrollBGMapPalettes - ld a, [wd152] + ld a, [wBGMapAnchorLo] ld l, a - ld a, [wd153] + ld a, [wBGMapAnchorHi] ld h, a ld bc, $0200 add hl, bc +; cap d at VBGMap1 / $100 ld a, h - and $3 - or $98 + and %00000011 + or VBGMap0 / $100 ld e, l ld d, a - call Function27d3 + call UpdateBGMapRow ld a, $1 ld [hBGMapUpdate], a ret ; 2771 -Function2771:: ; 2771 +ScrollMapLeft:: ; 2771 hlcoord 0, 0 ld de, BGMapBuffer - call Function27c0 - ld c, $24 + call BackupBGMapColumn + ld c, 2 * SCREEN_HEIGHT call FarCallScrollBGMapPalettes - ld a, [wd152] + ld a, [wBGMapAnchorLo] ld e, a - ld a, [wd153] + ld a, [wBGMapAnchorHi] ld d, a - call Function27f8 + call UpdateBGMapColumn ld a, $1 ld [hBGMapUpdate], a ret ; 278f -Function278f:: ; 278f - hlcoord 18, 0 +ScrollMapRight:: ; 278f + hlcoord SCREEN_WIDTH - 2, 0 ld de, BGMapBuffer - call Function27c0 - ld c, $24 + call BackupBGMapColumn + ld c, 2 * SCREEN_HEIGHT call FarCallScrollBGMapPalettes - ld a, [wd152] + ld a, [wBGMapAnchorLo] ld e, a - and $e0 + and %11100000 ld b, a ld a, e - add $12 - and $1f + add SCREEN_HEIGHT + and %00011111 or b ld e, a - ld a, [wd153] + ld a, [wBGMapAnchorHi] ld d, a - call Function27f8 + call UpdateBGMapColumn ld a, $1 ld [hBGMapUpdate], a ret ; 27b7 -Function27b7:: ; 27b7 - ld c, $28 -.asm_27b9 +BackupBGMapRow:: ; 27b7 + ld c, 2 * SCREEN_WIDTH +.loop ld a, [hli] ld [de], a inc de dec c - jr nz, .asm_27b9 + jr nz, .loop ret ; 27c0 -Function27c0:: ; 27c0 - ld c, $12 -.asm_27c2 +BackupBGMapColumn:: ; 27c0 + ld c, SCREEN_HEIGHT +.loop ld a, [hli] ld [de], a inc de ld a, [hl] ld [de], a inc de - ld a, $13 + ld a, SCREEN_WIDTH - 1 add l ld l, a - jr nc, .asm_27cf + jr nc, .skip inc h -.asm_27cf +.skip dec c - jr nz, .asm_27c2 + jr nz, .loop ret ; 27d3 -Function27d3:: ; 27d3 +UpdateBGMapRow:: ; 27d3 ld hl, BGMapBufferPtrs push de - call .asm_27df + call .iteration pop de ld a, $20 add e ld e, a -.asm_27df - ld c, $a -.asm_27e1 +.iteration + ld c, 10 +.loop ld a, e ld [hli], a ld a, d @@ -1369,16 +1370,16 @@ endr or b ld e, a dec c - jr nz, .asm_27e1 - ld a, $14 - ld [$ffdc], a + jr nz, .loop + ld a, SCREEN_WIDTH + ld [hFFDC], a ret ; 27f8 -Function27f8:: ; 27f8 +UpdateBGMapColumn:: ; 27f8 ld hl, BGMapBufferPtrs - ld c, $12 -.asm_27fd + ld c, SCREEN_HEIGHT +.loop ld a, e ld [hli], a ld a, d @@ -1386,72 +1387,81 @@ Function27f8:: ; 27f8 ld a, $20 add e ld e, a - jr nc, .asm_280e + jr nc, .skip inc d +; cap d at VBGMap1 / $100 ld a, d and $3 - or $98 + or VBGMap0 / $100 ld d, a -.asm_280e +.skip dec c - jr nz, .asm_27fd - ld a, $12 - ld [$ffdc], a + jr nz, .loop + ld a, SCREEN_HEIGHT + ld [hFFDC], a ret ; 2816 -Function2816:: ; 2816 +; unreferenced ld hl, BGMapBuffer - ld bc, $0078 + ld bc, SGBPredef - BGMapBuffer xor a call ByteFill ret ; 2821 -Function2821:: ; 2821 +LoadTileset:: ; 2821 ld hl, TilesetAddress ld a, [hli] ld h, [hl] ld l, a ld a, [TilesetBank] ld e, a + ld a, [rSVBK] push af ld a, $6 ld [rSVBK], a + ld a, e ld de, w6_d000 call FarDecompress + ld hl, w6_d000 ld de, VTiles2 ld bc, $60 tiles call CopyBytes + ld a, [rVBK] push af ld a, $1 ld [rVBK], a + ld hl, w6_d600 ld de, VTiles2 ld bc, $60 tiles call CopyBytes + pop af ld [rVBK], a + pop af ld [rSVBK], a - ld a, [wTileset] - cp $1 - jr z, .asm_286f - cp $2 - jr z, .asm_286f - cp $4 - jr z, .asm_286f - jr .asm_2875 -.asm_286f + ld a, [wTileset] + cp TILESET_JOHTO_1 + jr z, .load_roof + cp TILESET_JOHTO_2 + jr z, .load_roof + cp TILESET_BATTLE_TOWER_OUTSIDE + jr z, .load_roof + jr .skip_roof + +.load_roof callba LoadMapGroupRoof -.asm_2875 +.skip_roof xor a ld [hTileAnimFrame], a ret @@ -1497,40 +1507,40 @@ SaveScreen:: ; 289d ld [hMapObjectIndexBuffer], a ld a, [wd151] and a - jr z, .asm_28cb - cp $1 - jr z, .asm_28c0 - cp $2 - jr z, .asm_28d4 - cp $3 - jr z, .asm_28da + jr z, .down + cp UP + jr z, .up + cp LEFT + jr z, .left + cp RIGHT + jr z, .right ret -.asm_28c0 +.up ld de, wdcbf ld a, [hMapObjectIndexBuffer] ld c, a ld b, $0 add hl, bc - jr .asm_28ce + jr .vertical -.asm_28cb +.down ld de, XCoord + 1 -.asm_28ce +.vertical ld b, $6 ld c, $4 jr Function28f7 -.asm_28d4 +.left ld de, XCoord + 2 inc hl - jr .asm_28dd + jr .horizontal -.asm_28da +.right ld de, XCoord + 1 -.asm_28dd +.horizontal ld b, $5 ld c, $5 jr Function28f7 @@ -1543,54 +1553,56 @@ LoadNeighboringBlockData:: ; 28e3 ld l, a ld a, [MapWidth] add $6 - ld [hMapObjectIndexBuffer], a + ld [hConnectionStripLength], a ld de, XCoord + 1 ld b, $6 ld c, $5 Function28f7:: ; 28f7 -.asm_28f7 +.loop1 push bc push hl push de -.asm_28fa +.loop2 ld a, [de] inc de ld [hli], a dec b - jr nz, .asm_28fa + jr nz, .loop2 pop de ld a, e add $6 ld e, a - jr nc, .asm_2908 + jr nc, .okay inc d -.asm_2908 +.okay pop hl - ld a, [hMapObjectIndexBuffer] + ld a, [hConnectionStripLength] ld c, a ld b, $0 add hl, bc pop bc dec c - jr nz, .asm_28f7 + jr nz, .loop1 ret ; 2914 Function2914:: ; 2914 xor a ld [TilePermissions], a - call Function296c - call Function294d + call GetLeftRightCollision + call GetUpDownCollision +; get coords of current tile ld a, [PlayerMapX] ld d, a ld a, [PlayerMapY] ld e, a - call Function2a3c + call GetCoordTile ld [PlayerStandingTile], a call Function29ff ret nz + ld a, [PlayerStandingTile] and 7 ld hl, .data_2945 @@ -1610,37 +1622,41 @@ Function2914:: ; 2914 db 1, 2, 4, 8, 9, 10, 5, 6 ; 294d -Function294d:: ; 294d +GetUpDownCollision:: ; 294d ld a, [PlayerMapX] ld d, a ld a, [PlayerMapY] ld e, a + push de inc e - call Function2a3c + call GetCoordTile ld [TileDown], a call Function298b + pop de dec e - call Function2a3c + call GetCoordTile ld [TileUp], a call Function29a8 ret ; 296c -Function296c:: ; 296c +GetLeftRightCollision:: ; 296c ld a, [PlayerMapX] ld d, a ld a, [PlayerMapY] ld e, a + push de dec d - call Function2a3c + call GetCoordTile ld [TileLeft], a call Function29e2 + pop de inc d - call Function2a3c + call GetCoordTile ld [TileRight], a call Function29c5 ret @@ -1650,7 +1666,7 @@ Function298b:: ; 298b call Function29ff ret nz ld a, [TileDown] - and $7 + and 7 cp $2 jr z, .ok cp $6 @@ -1660,7 +1676,7 @@ Function298b:: ; 298b .ok ld a, [TilePermissions] - or $8 + or FACE_DOWN ld [TilePermissions], a ret ; 29a8 @@ -1669,7 +1685,7 @@ Function29a8:: ; 29a8 call Function29ff ret nz ld a, [TileUp] - and $7 + and 7 cp $3 jr z, .ok cp $4 @@ -1679,7 +1695,7 @@ Function29a8:: ; 29a8 .ok ld a, [TilePermissions] - or $4 + or FACE_UP ld [TilePermissions], a ret ; 29c5 @@ -1688,7 +1704,7 @@ Function29c5:: ; 29c5 call Function29ff ret nz ld a, [TileRight] - and $7 + and 7 cp $1 jr z, .ok cp $5 @@ -1698,7 +1714,7 @@ Function29c5:: ; 29c5 .ok ld a, [TilePermissions] - or $1 + or FACE_RIGHT ld [TilePermissions], a ret ; 29e2 @@ -1707,7 +1723,7 @@ Function29e2:: ; 29e2 call Function29ff ret nz ld a, [TileLeft] - and $7 + and 7 cp $0 jr z, .ok cp $4 @@ -1717,7 +1733,7 @@ Function29e2:: ; 29e2 .ok ld a, [TilePermissions] - or $2 + or FACE_LEFT ld [TilePermissions], a ret ; 29ff @@ -1778,7 +1794,8 @@ endr ; 2a3c -Function2a3c:: ; 2a3c +GetCoordTile:: ; 2a3c +; Get the collision byte for tile d, e call GetBlockLocation ld a, [hl] and a @@ -2065,7 +2082,7 @@ Function2bae:: ; 2bae call SwitchToAnyMapBank callba Function8c001 call OverworldTextModeSwitch - call Function2821 + call LoadTileset ld a, 9 call SkipMusic pop af |