Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pret
GitHub Repository: pret/pokered
Path: blob/master/engine/overworld/update_map.asm
1271 views
1
; replaces a tile block with the one specified in [wNewTileBlockID]
2
; and redraws the map view if necessary
3
; b = Y
4
; c = X
5
ReplaceTileBlock:
6
call GetPredefRegisters
7
ld hl, wOverworldMap
8
ld a, [wCurMapWidth]
9
add $6
10
ld e, a
11
ld d, $0
12
add hl, de
13
add hl, de
14
add hl, de
15
ld e, $3
16
add hl, de
17
ld e, a
18
ld a, b
19
and a
20
jr z, .addX
21
; add width * Y
22
.addWidthYTimesLoop
23
add hl, de
24
dec b
25
jr nz, .addWidthYTimesLoop
26
.addX
27
add hl, bc ; add X
28
ld a, [wNewTileBlockID]
29
ld [hl], a
30
ld a, [wCurrentTileBlockMapViewPointer]
31
ld c, a
32
ld a, [wCurrentTileBlockMapViewPointer + 1]
33
ld b, a
34
call CompareHLWithBC
35
ret c ; return if the replaced tile block is below the map view in memory
36
push hl
37
ld l, e
38
ld h, $0
39
ld e, $6
40
ld d, h
41
add hl, hl
42
add hl, hl
43
add hl, de
44
add hl, bc
45
pop bc
46
call CompareHLWithBC
47
ret c ; return if the replaced tile block is above the map view in memory
48
49
RedrawMapView:
50
ld a, [wIsInBattle]
51
inc a
52
ret z
53
ldh a, [hAutoBGTransferEnabled]
54
push af
55
ldh a, [hTileAnimations]
56
push af
57
xor a
58
ldh [hAutoBGTransferEnabled], a
59
ldh [hTileAnimations], a
60
call LoadCurrentMapView
61
call RunDefaultPaletteCommand
62
ld hl, wMapViewVRAMPointer
63
ld a, [hli]
64
ld h, [hl]
65
ld l, a
66
ld de, -2 * TILEMAP_WIDTH
67
add hl, de
68
ld a, h
69
and $3
70
or $98
71
ld a, l
72
ld [wBuffer], a
73
ld a, h
74
ld [wBuffer + 1], a ; this copy of the address is not used
75
ld a, 2
76
ldh [hRedrawMapViewRowOffset], a
77
ld c, SCREEN_HEIGHT / 2 ; number of rows of 2x2 tiles (this covers the whole screen)
78
.redrawRowLoop
79
push bc
80
push hl
81
push hl
82
ld hl, wTileMap - 2 * SCREEN_WIDTH
83
ld de, SCREEN_WIDTH
84
ldh a, [hRedrawMapViewRowOffset]
85
.calcWRAMAddrLoop
86
add hl, de
87
dec a
88
jr nz, .calcWRAMAddrLoop
89
call CopyToRedrawRowOrColumnSrcTiles
90
pop hl
91
ld de, TILEMAP_WIDTH
92
ldh a, [hRedrawMapViewRowOffset]
93
ld c, a
94
.calcVRAMAddrLoop
95
add hl, de
96
ld a, h
97
and $3
98
or $98
99
dec c
100
jr nz, .calcVRAMAddrLoop
101
ldh [hRedrawRowOrColumnDest + 1], a
102
ld a, l
103
ldh [hRedrawRowOrColumnDest], a
104
ld a, REDRAW_ROW
105
ldh [hRedrawRowOrColumnMode], a
106
call DelayFrame
107
ld hl, hRedrawMapViewRowOffset
108
inc [hl]
109
inc [hl]
110
pop hl
111
pop bc
112
dec c
113
jr nz, .redrawRowLoop
114
pop af
115
ldh [hTileAnimations], a
116
pop af
117
ldh [hAutoBGTransferEnabled], a
118
ret
119
120
CompareHLWithBC:
121
ld a, h
122
sub b
123
ret nz
124
ld a, l
125
sub c
126
ret
127
128