mirror of
https://github.com/pret/pokered.git
synced 2024-10-24 07:25:21 +00:00
127 lines
2.1 KiB
NASM
127 lines
2.1 KiB
NASM
|
; replaces a tile block with the one specified in [wNewTileBlockID]
|
||
|
; and redraws the map view if necessary
|
||
|
; b = Y
|
||
|
; c = X
|
||
|
ReplaceTileBlock:
|
||
|
call GetPredefRegisters
|
||
|
ld hl, wOverworldMap
|
||
|
ld a, [wCurMapWidth]
|
||
|
add $6
|
||
|
ld e, a
|
||
|
ld d, $0
|
||
|
add hl, de
|
||
|
add hl, de
|
||
|
add hl, de
|
||
|
ld e, $3
|
||
|
add hl, de
|
||
|
ld e, a
|
||
|
ld a, b
|
||
|
and a
|
||
|
jr z, .addX
|
||
|
; add width * Y
|
||
|
.addWidthYTimesLoop
|
||
|
add hl, de
|
||
|
dec b
|
||
|
jr nz, .addWidthYTimesLoop
|
||
|
.addX
|
||
|
add hl, bc ; add X
|
||
|
ld a, [wNewTileBlockID]
|
||
|
ld [hl], a
|
||
|
ld a, [wCurrentTileBlockMapViewPointer]
|
||
|
ld c, a
|
||
|
ld a, [wCurrentTileBlockMapViewPointer + 1]
|
||
|
ld b, a
|
||
|
call CompareHLWithBC
|
||
|
ret c ; return if the replaced tile block is below the map view in memory
|
||
|
push hl
|
||
|
ld l, e
|
||
|
ld h, $0
|
||
|
ld e, $6
|
||
|
ld d, h
|
||
|
add hl, hl
|
||
|
add hl, hl
|
||
|
add hl, de
|
||
|
add hl, bc
|
||
|
pop bc
|
||
|
call CompareHLWithBC
|
||
|
ret c ; return if the replaced tile block is above the map view in memory
|
||
|
|
||
|
RedrawMapView:
|
||
|
ld a, [wIsInBattle]
|
||
|
inc a
|
||
|
ret z
|
||
|
ld a, [H_AUTOBGTRANSFERENABLED]
|
||
|
push af
|
||
|
ld a, [hTilesetType]
|
||
|
push af
|
||
|
xor a
|
||
|
ld [H_AUTOBGTRANSFERENABLED], a
|
||
|
ld [hTilesetType], a ; no flower/water BG tile animations
|
||
|
call LoadCurrentMapView
|
||
|
call RunDefaultPaletteCommand
|
||
|
ld hl, wMapViewVRAMPointer
|
||
|
ld a, [hli]
|
||
|
ld h, [hl]
|
||
|
ld l, a
|
||
|
ld de, -2 * 32
|
||
|
add hl, de
|
||
|
ld a, h
|
||
|
and $3
|
||
|
or $98
|
||
|
ld a, l
|
||
|
ld [wBuffer], a
|
||
|
ld a, h
|
||
|
ld [wBuffer + 1], a ; this copy of the address is not used
|
||
|
ld a, 2
|
||
|
ld [$ffbe], a
|
||
|
ld c, 9 ; number of rows of 2x2 tiles (this covers the whole screen)
|
||
|
.redrawRowLoop
|
||
|
push bc
|
||
|
push hl
|
||
|
push hl
|
||
|
ld hl, wTileMap - 2 * SCREEN_WIDTH
|
||
|
ld de, SCREEN_WIDTH
|
||
|
ld a, [$ffbe]
|
||
|
.calcWRAMAddrLoop
|
||
|
add hl, de
|
||
|
dec a
|
||
|
jr nz, .calcWRAMAddrLoop
|
||
|
call CopyToRedrawRowOrColumnSrcTiles
|
||
|
pop hl
|
||
|
ld de, $20
|
||
|
ld a, [$ffbe]
|
||
|
ld c, a
|
||
|
.calcVRAMAddrLoop
|
||
|
add hl, de
|
||
|
ld a, h
|
||
|
and $3
|
||
|
or $98
|
||
|
dec c
|
||
|
jr nz, .calcVRAMAddrLoop
|
||
|
ld [hRedrawRowOrColumnDest + 1], a
|
||
|
ld a, l
|
||
|
ld [hRedrawRowOrColumnDest], a
|
||
|
ld a, REDRAW_ROW
|
||
|
ld [hRedrawRowOrColumnMode], a
|
||
|
call DelayFrame
|
||
|
ld hl, $ffbe
|
||
|
inc [hl]
|
||
|
inc [hl]
|
||
|
pop hl
|
||
|
pop bc
|
||
|
dec c
|
||
|
jr nz, .redrawRowLoop
|
||
|
pop af
|
||
|
ld [hTilesetType], a
|
||
|
pop af
|
||
|
ld [H_AUTOBGTRANSFERENABLED], a
|
||
|
ret
|
||
|
|
||
|
CompareHLWithBC:
|
||
|
ld a, h
|
||
|
sub b
|
||
|
ret nz
|
||
|
ld a, l
|
||
|
sub c
|
||
|
ret
|