yenatch 023cfdbb05 Consolidate monster structs in wram and sram.
The PartyMon struct is really the box struct with volatile variables like status added.

Some other labels have been reworked.
Move structs no longer have explicit labels since their location is arbitrary and usually shared.
2014-06-12 18:32:42 -07:00

2366 lines
28 KiB
NASM

; Functions dealing with rendering and interacting with maps.
Function210f:: ; 210f
ld hl, $c7e8
ld bc, $0018
ld a, $0
call ByteFill
ret
; 211b
Function211b:: ; 211b
push hl
ld hl, $dbf7
ld a, [hli]
ld h, [hl]
ld l, a
or h
ld a, [hl]
jr nz, .asm_2128
ld a, $ff
.asm_2128
pop hl
ret
; 212a
GetCurrentMapTrigger:: ; 212a
ld a, [MapGroup]
ld b, a
ld a, [MapNumber]
ld c, a
xor a
ld [$dbf7], a
ld [$dbf8], a
call GetMapTrigger
ret c
ld a, e
ld [$dbf7], a
ld a, d
ld [$dbf8], a
xor a
ret
; 2147
GetMapTrigger:: ; 2147
push bc
ld a, [hROMBank]
push af
ld a, BANK(MapTriggers)
rst Bankswitch
ld hl, MapTriggers
.asm_2151
push hl
ld a, [hli]
cp $ff
jr z, .asm_2167
cp b
jr nz, .asm_2160
ld a, [hli]
cp c
jr nz, .asm_2160
jr .asm_216a
.asm_2160
pop hl
ld de, $0004
add hl, de
jr .asm_2151
.asm_2167
scf
jr .asm_216d
.asm_216a
ld e, [hl]
inc hl
ld d, [hl]
.asm_216d
pop hl
pop bc
ld a, b
rst Bankswitch
pop bc
ret
; 2173
Function2173:: ; 2173
call Function217a
call Functiondb1
ret
; 217a
Function217a:: ; 217a
ld a, [hROMBank]
push af
ld a, [TilesetBlocksBank]
rst Bankswitch
call Function2198
ld a, $60
ld hl, TileMap
ld bc, TileMapEnd - TileMap
call ByteFill
ld a, BANK(Function4d15b)
rst Bankswitch
call Function4d15b
pop af
rst Bankswitch
ret
; 2198
Function2198:: ; 2198
ld a, [$d194]
ld e, a
ld a, [$d195]
ld d, a
ld hl, $c608
ld b, $5
.asm_21a5
push de
push hl
ld c, $6
.asm_21a9
push de
push hl
ld a, [de]
and a
jr nz, .asm_21b2
ld a, [$d19d]
.asm_21b2
ld e, l
ld d, h
add a
ld l, a
ld h, $0
add hl, hl
add hl, hl
add hl, hl
ld a, [TilesetBlocksAddress]
add l
ld l, a
ld a, [TilesetBlocksAddress + 1]
adc h
ld h, a
rept 3
ld a, [hli]
ld [de], a
inc de
ld a, [hli]
ld [de], a
inc de
ld a, [hli]
ld [de], a
inc de
ld a, [hli]
ld [de], a
inc de
ld a, e
add 20
ld e, a
jr nc, .next\@
inc d
.next\@
endr
ld a, [hli]
ld [de], a
inc de
ld a, [hli]
ld [de], a
inc de
ld a, [hli]
ld [de], a
inc de
ld a, [hli]
ld [de], a
inc de
pop hl
ld de, $0004
add hl, de
pop de
inc de
dec c
jp nz, .asm_21a9
pop hl
ld de, $0060
add hl, de
pop de
ld a, [MapWidth]
add $6
add e
ld e, a
jr nc, .asm_2225
inc d
.asm_2225
dec b
jp nz, .asm_21a5
ret
; 222a
Function222a:: ; 222a
ld a, $fa
ld [$ff9f], a
callba RunMapSetupScript
xor a
ld [$ff9f], a
ret
; 2238
Function2238:: ; 2238
call Function2252
ret nc
push bc
callba Function149af
pop bc
ret nc
call Function22a7
scf
ret
; 224a
Function224a:: ; 224a
call Function2252
ret nc
call Function22a7
ret
; 2252
Function2252:: ; 2252
callba Function1499a
ret nc
ld a, [hROMBank]
push af
call Function2c52
call Function2266
pop de
ld a, d
rst Bankswitch
ret
; 2266
Function2266:: ; 2266
ld a, [MapY]
sub $4
ld e, a
ld a, [MapX]
sub $4
ld d, a
ld a, [$dbfb]
and a
ret z
ld c, a
ld hl, $dbfc
ld a, [hli]
ld h, [hl]
ld l, a
.asm_227e
push hl
ld a, [hli]
cp e
jr nz, .asm_2289
ld a, [hli]
cp d
jr nz, .asm_2289
jr .asm_2296
.asm_2289
pop hl
ld a, $5
add l
ld l, a
jr nc, .asm_2291
inc h
.asm_2291
dec c
jr nz, .asm_227e
xor a
ret
.asm_2296
pop hl
call Function22a3
ret nc
ld a, [$dbfb]
inc a
sub c
ld c, a
scf
ret
; 22a3
Function22a3:: ; 22a3
inc hl
inc hl
scf
ret
; 22a7
Function22a7:: ; 22a7
ld a, [hROMBank]
push af
call Function2c52
call Function22b4
pop af
rst Bankswitch
scf
ret
; 22b4
Function22b4:: ; 22b4
push bc
ld hl, $dbfc
ld a, [hli]
ld h, [hl]
ld l, a
ld a, c
dec a
ld bc, $0005
call AddNTimes
ld bc, $0002
add hl, bc
ld a, [hli]
cp $ff
jr nz, .asm_22d0
ld hl, $dcac
ld a, [hli]
.asm_22d0
pop bc
ld [$d146], a
ld a, [hli]
ld [$d147], a
ld a, [hli]
ld [$d148], a
ld a, c
ld [$d149], a
ld a, [MapGroup]
ld [$d14a], a
ld a, [MapNumber]
ld [$d14b], a
scf
ret
; 22ee
CheckOutdoorMap:: ; 22ee
cp ROUTE
ret z
cp TOWN
ret
; 22f4
CheckIndoorMap:: ; 22f4
cp INDOOR
ret z
cp CAVE
ret z
cp DUNGEON
ret z
cp GATE
ret
; 2300
Function2300:: ; 2300
cp INDOOR
ret z
cp GATE
ret z
cp $5
ret
; 2309
Function2309:: ; 2309
call Function2326
call Function2c52
call Function234f
xor a
call Function2336
ret
; 2317
Function2317:: ; 2317
call Function2326
call Function2c52
call Function234f
ld a, $1
call Function2336
ret
; 2326
Function2326:: ; 2326
call Function2c3d
call SwitchToMapBank
call GetSecondaryMapHeaderPointer
call Function235c
call Function2368
ret
; 2336
Function2336:: ; 2336
push af
ld hl, MapEventHeaderPointer
ld a, [hli]
ld h, [hl]
ld l, a
inc hl
inc hl
call Function23da
call Function23f1
call Function2408
pop af
and a
ret nz
call Function241f
ret
; 234f
Function234f:: ; 234f
ld hl, MapScriptHeaderPointer
ld a, [hli]
ld h, [hl]
ld l, a
call Function23ac
call Function23c3
ret
; 235c
Function235c:: ; 235c
ld de, $d19d
ld c, $c
.asm_2361
ld a, [hli]
ld [de], a
inc de
dec c
jr nz, .asm_2361
ret
; 2368
Function2368:: ; 2368
ld a, $ff
ld [NorthConnectedMapGroup], a
ld [SouthConnectedMapGroup], a
ld [WestConnectedMapGroup], a
ld [EastConnectedMapGroup], a
ld a, [MapConnections]
ld b, a
bit 3, b
jr z, .asm_2384
ld de, NorthMapConnection
call GetMapConnection
.asm_2384
bit 2, b
jr z, .asm_238e
ld de, SouthMapConnection
call GetMapConnection
.asm_238e
bit 1, b
jr z, .asm_2398
ld de, WestMapConnection
call GetMapConnection
.asm_2398
bit 0, b
jr z, .asm_23a2
ld de, EastMapConnection
call GetMapConnection
.asm_23a2
ret
; 23a3
GetMapConnection:: ; 23a3
; Load map connection struct at hl into de.
ld c, SouthMapConnection - NorthMapConnection
.loop
ld a, [hli]
ld [de], a
inc de
dec c
jr nz, .loop
ret
; 23ac
Function23ac:: ; 23ac
ld a, [hli]
ld c, a
ld [$dc07], a
ld a, l
ld [$dc08], a
ld a, h
ld [$dc09], a
ld a, c
and a
ret z
ld bc, $0004
call AddNTimes
ret
; 23c3
Function23c3:: ; 23c3
ld a, [hli]
ld c, a
ld [$dc0a], a
ld a, l
ld [$dc0b], a
ld a, h
ld [$dc0c], a
ld a, c
and a
ret z
ld bc, $0003
call AddNTimes
ret
; 23da
Function23da:: ; 23da
ld a, [hli]
ld c, a
ld [$dbfb], a
ld a, l
ld [$dbfc], a
ld a, h
ld [$dbfd], a
ld a, c
and a
ret z
ld bc, $0005
call AddNTimes
ret
; 23f1
Function23f1:: ; 23f1
ld a, [hli]
ld c, a
ld [$dbfe], a
ld a, l
ld [$dbff], a
ld a, h
ld [$dc00], a
ld a, c
and a
ret z
ld bc, $0008
call AddNTimes
ret
; 2408
Function2408:: ; 2408
ld a, [hli]
ld c, a
ld [$dc01], a
ld a, l
ld [$dc02], a
ld a, h
ld [$dc03], a
ld a, c
and a
ret z
ld bc, $0005
call AddNTimes
ret
; 241f
Function241f:: ; 241f
push hl
call Function2471
pop de
ld hl, $d72e
ld a, [de]
inc de
ld [$dc04], a
ld a, e
ld [$dc05], a
ld a, d
ld [$dc06], a
ld a, [$dc04]
call Function2457
ld a, [$dc04]
ld c, a
ld a, $10
sub c
jr z, .asm_2454
ld bc, $0001
add hl, bc
ld bc, $0010
.asm_244a
ld [hl], $0
inc hl
ld [hl], $ff
dec hl
add hl, bc
dec a
jr nz, .asm_244a
.asm_2454
ld h, d
ld l, e
ret
; 2457
Function2457:: ; 2457
and a
ret z
ld c, a
.asm_245a
push bc
push hl
ld a, $ff
ld [hli], a
ld b, $d
.asm_2461
ld a, [de]
inc de
ld [hli], a
dec b
jr nz, .asm_2461
pop hl
ld bc, $0010
add hl, bc
pop bc
dec c
jr nz, .asm_245a
ret
; 2471
Function2471:: ; 2471
ld hl, $d4fe
ld bc, $01e0
xor a
call ByteFill
ld hl, $d4fe
ld de, $0028
ld c, $c
xor a
.asm_2484
ld [hl], a
add hl, de
dec c
jr nz, .asm_2484
ret
; 248a
Function248a:: ; 248a
call GetMapScriptHeaderBank
rst Bankswitch
ld hl, MapEventHeaderPointer
ld a, [hli]
ld h, [hl]
ld l, a
inc hl
inc hl
inc hl
ld a, [WarpNumber]
dec a
ld c, a
ld b, $0
ld a, $5
call AddNTimes
ld a, [hli]
ld [YCoord], a
ld a, [hli]
ld [XCoord], a
ld a, [hli]
cp $ff
jr nz, .asm_24b3
call Function24ba
.asm_24b3
callba Function10486d
ret
; 24ba
Function24ba:: ; 24ba
ld a, [$d149]
ld [$dcac], a
ld a, [$d14a]
ld [BackupMapGroup], a
ld a, [$d14b]
ld [BackupMapNumber], a
ret
; 24cd
Function24cd:: ; 24cd
ld hl, OverworldMap
ld bc, OverworldMapEnd - OverworldMap
ld a, 0
call ByteFill
call Function24e4
call FillMapConnections
ld a, $1
call Function263b
ret
; 24e4
Function24e4:: ; 24e4
ld a, [hROMBank]
push af
ld hl, OverworldMap
ld a, [MapWidth]
ld [hConnectedMapWidth], a
add $6
ld [hConnectionStripLength], a
ld c, a
ld b, 0
add hl, bc
add hl, bc
add hl, bc
ld c, 3
add hl, bc
ld a, [MapBlockDataBank]
rst Bankswitch
ld a, [MapBlockDataPointer]
ld e, a
ld a, [MapBlockDataPointer+1]
ld d, a
ld a, [MapHeight]
ld b, a
.asm_250c
push hl
ld a, [hConnectedMapWidth]
ld c, a
.asm_2510
ld a, [de]
inc de
ld [hli], a
dec c
jr nz, .asm_2510
pop hl
ld a, [hConnectionStripLength]
add l
ld l, a
jr nc, .asm_251e
inc h
.asm_251e
dec b
jr nz, .asm_250c
pop af
rst Bankswitch
ret
; 2524
FillMapConnections:: ; 2524
; North
ld a, [NorthConnectedMapGroup]
cp $ff
jr z, .South
ld b, a
ld a, [NorthConnectedMapNumber]
ld c, a
call GetAnyMapBlockdataBank
ld a, [NorthConnectionStripPointer]
ld l, a
ld a, [NorthConnectionStripPointer + 1]
ld h, a
ld a, [NorthConnectionStripLocation]
ld e, a
ld a, [NorthConnectionStripLocation + 1]
ld d, a
ld a, [NorthConnectionStripLength]
ld [hConnectionStripLength], a
ld a, [NorthConnectedMapWidth]
ld [hConnectedMapWidth], a
call FillNorthConnectionStrip
.South
ld a, [SouthConnectedMapGroup]
cp $ff
jr z, .West
ld b, a
ld a, [SouthConnectedMapNumber]
ld c, a
call GetAnyMapBlockdataBank
ld a, [SouthConnectionStripPointer]
ld l, a
ld a, [SouthConnectionStripPointer + 1]
ld h, a
ld a, [SouthConnectionStripLocation]
ld e, a
ld a, [SouthConnectionStripLocation + 1]
ld d, a
ld a, [SouthConnectionStripLength]
ld [hConnectionStripLength], a
ld a, [SouthConnectedMapWidth]
ld [hConnectedMapWidth], a
call FillSouthConnectionStrip
.West
ld a, [WestConnectedMapGroup]
cp $ff
jr z, .East
ld b, a
ld a, [WestConnectedMapNumber]
ld c, a
call GetAnyMapBlockdataBank
ld a, [WestConnectionStripPointer]
ld l, a
ld a, [WestConnectionStripPointer + 1]
ld h, a
ld a, [WestConnectionStripLocation]
ld e, a
ld a, [WestConnectionStripLocation + 1]
ld d, a
ld a, [WestConnectionStripLength]
ld b, a
ld a, [WestConnectedMapWidth]
ld [hConnectionStripLength], a
call FillWestConnectionStrip
.East
ld a, [EastConnectedMapGroup]
cp $ff
jr z, .Done
ld b, a
ld a, [EastConnectedMapNumber]
ld c, a
call GetAnyMapBlockdataBank
ld a, [EastConnectionStripPointer]
ld l, a
ld a, [EastConnectionStripPointer + 1]
ld h, a
ld a, [EastConnectionStripLocation]
ld e, a
ld a, [EastConnectionStripLocation + 1]
ld d, a
ld a, [EastConnectionStripLength]
ld b, a
ld a, [EastConnectedMapWidth]
ld [hConnectionStripLength], a
call FillEastConnectionStrip
.Done
ret
; 25d3
FillNorthConnectionStrip::
FillSouthConnectionStrip:: ; 25d3
ld c, 3
.y
push de
push hl
ld a, [hConnectionStripLength]
ld b, a
.x
ld a, [hli]
ld [de], a
inc de
dec b
jr nz, .x
pop hl
ld a, [hConnectedMapWidth]
ld e, a
ld d, 0
add hl, de
pop de
ld a, [MapWidth]
add 6
add e
ld e, a
jr nc, .asm_25f2
inc d
.asm_25f2
dec c
jr nz, .y
ret
; 25f6
FillWestConnectionStrip::
FillEastConnectionStrip:: ; 25f6
.asm_25f6
ld a, [MapWidth]
add 6
ld [hConnectedMapWidth], a
push de
push hl
ld a, [hli]
ld [de], a
inc de
ld a, [hli]
ld [de], a
inc de
ld a, [hli]
ld [de], a
inc de
pop hl
ld a, [hConnectionStripLength]
ld e, a
ld d, 0
add hl, de
pop de
ld a, [hConnectedMapWidth]
add e
ld e, a
jr nc, .asm_2617
inc d
.asm_2617
dec b
jr nz, .asm_25f6
ret
; 261b
Function261b:: ; 261b
ld [$d432], a
ret
; 261f
CallScript:: ; 261f
; Call a script at a:hl.
ld [ScriptBank], a
ld a, l
ld [ScriptPos], a
ld a, h
ld [ScriptPos + 1], a
ld a, $ff
ld [ScriptRunning], a
scf
ret
; 2631
Function2631:: ; 2631
ld a, [ScriptRunning]
and a
ret nz
call GetMapScriptHeaderBank
jr CallScript
; 263b
Function263b:: ; 263b
ld b, a
ld a, [hROMBank]
push af
call Function2c52
call Function2653
jr nc, .done
call GetMapScriptHeaderBank
ld b, a
ld d, h
ld e, l
call Function2674
.done
pop af
rst Bankswitch
ret
; 2653
Function2653:: ; 2653
ld a, [$dc0a]
ld c, a
and a
ret z
ld hl, $dc0b
ld a, [hli]
ld h, [hl]
ld l, a
or h
ret z
ld de, $0003
.asm_2664
ld a, [hl]
cp b
jr z, .asm_266e
add hl, de
dec c
jr nz, .asm_2664
xor a
ret
.asm_266e
inc hl
ld a, [hli]
ld h, [hl]
ld l, a
scf
ret
; 2674
Function2674:: ; 2674
callba Function974f3
ld a, [ScriptMode]
push af
ld hl, ScriptFlags
ld a, [hl]
push af
set 1, [hl]
callba Function96c56
callba ScriptEvents
pop af
ld [ScriptFlags], a
pop af
ld [ScriptMode], a
ret
; 269a
Function269a:: ; 269a
ld a, [hROMBank]
push af
ld a, b
rst Bankswitch
push hl
call SpeechTextBox
call Function2e31
ld a, 1
ld [hOAMUpdate], a
call Function321c
pop hl
call PrintTextBoxText
xor a
ld [hOAMUpdate], a
pop af
rst Bankswitch
ret
; 26b7
Function26b7:: ; 26b7
; Call a:de.
ld [hBuffer], a
ld a, [hROMBank]
push af
ld a, [hBuffer]
rst Bankswitch
call .de
pop af
rst Bankswitch
ret
.de
push de
ret
; 26c7
Function26c7:: ; 26c7
ld a, [hROMBank]
push af
ld a, b
rst Bankswitch
ld a, c
call Function19e9
pop hl
ld a, h
rst Bankswitch
ret
; 26d4
GetScriptByte:: ; 0x26d4
; Return byte at ScriptBank:ScriptPos in a.
push hl
push bc
ld a, [hROMBank]
push af
ld a, [ScriptBank]
rst Bankswitch
ld hl, ScriptPos
ld c, [hl]
inc hl
ld b, [hl]
ld a, [bc]
inc bc
ld [hl], b
dec hl
ld [hl], c
ld b, a
pop af
rst Bankswitch
ld a, b
pop bc
pop hl
ret
; 0x26ef
ObjectEvent:: ; 0x26ef
jumptextfaceplayer ObjectEventText
; 0x26f2
ObjectEventText::
TX_FAR _ObjectEventText
db "@"
; 0x26f7
BGEvent:: ; 26f7
jumptext BGEventText
; 26fa
BGEventText:: ; 26fa
text_jump UnknownText_0x1c46fc
db "@"
; 26ff
CoordinatesEvent:: ; 26ff
jumptext CoordinatesEventText
; 2702
CoordinatesEventText:: ; 2702
text_jump UnknownText_0x1c4706
db "@"
; 2707
Function2707:: ; 2707
ld a, [hConnectionStripLength]
ld e, a
ld d, $0
ld hl, $d81e
add hl, de
ld a, [hl]
ret
; 2712
Function2712:: ; 2712
ld a, [hConnectionStripLength]
ld e, a
ld d, $0
ld hl, $d81e
add hl, de
ld [hl], $ff
ret
; 271e
Function271e:: ; 271e
ld a, [hConnectionStripLength]
ld e, a
ld d, $0
ld hl, $d81e
add hl, de
ld [hl], $0
ret
; 272a
Function272a:: ; 272a
ld hl, TileMap
ld de, BGMapBuffer
call Function27b7
ld c, $28
call Functiondbd
ld a, [$d152]
ld e, a
ld a, [$d153]
ld d, a
call Function27d3
ld a, $1
ld [hBGMapUpdate], a
ret
; 2748
Function2748:: ; 2748
hlcoord 0, 16
ld de, BGMapBuffer
call Function27b7
ld c, $28
call Functiondbd
ld a, [$d152]
ld l, a
ld a, [$d153]
ld h, a
ld bc, $0200
add hl, bc
ld a, h
and $3
or $98
ld e, l
ld d, a
call Function27d3
ld a, $1
ld [hBGMapUpdate], a
ret
; 2771
Function2771:: ; 2771
ld hl, TileMap
ld de, BGMapBuffer
call Function27c0
ld c, $24
call Functiondbd
ld a, [$d152]
ld e, a
ld a, [$d153]
ld d, a
call Function27f8
ld a, $1
ld [hBGMapUpdate], a
ret
; 278f
Function278f:: ; 278f
hlcoord 18, 0
ld de, BGMapBuffer
call Function27c0
ld c, $24
call Functiondbd
ld a, [$d152]
ld e, a
and $e0
ld b, a
ld a, e
add $12
and $1f
or b
ld e, a
ld a, [$d153]
ld d, a
call Function27f8
ld a, $1
ld [hBGMapUpdate], a
ret
; 27b7
Function27b7:: ; 27b7
ld c, $28
.asm_27b9
ld a, [hli]
ld [de], a
inc de
dec c
jr nz, .asm_27b9
ret
; 27c0
Function27c0:: ; 27c0
ld c, $12
.asm_27c2
ld a, [hli]
ld [de], a
inc de
ld a, [hl]
ld [de], a
inc de
ld a, $13
add l
ld l, a
jr nc, .asm_27cf
inc h
.asm_27cf
dec c
jr nz, .asm_27c2
ret
; 27d3
Function27d3:: ; 27d3
ld hl, BGMapBufferPtrs
push de
call .asm_27df
pop de
ld a, $20
add e
ld e, a
.asm_27df
ld c, $a
.asm_27e1
ld a, e
ld [hli], a
ld a, d
ld [hli], a
ld a, e
inc a
inc a
and $1f
ld b, a
ld a, e
and $e0
or b
ld e, a
dec c
jr nz, .asm_27e1
ld a, $14
ld [$ffdc], a
ret
; 27f8
Function27f8:: ; 27f8
ld hl, BGMapBufferPtrs
ld c, $12
.asm_27fd
ld a, e
ld [hli], a
ld a, d
ld [hli], a
ld a, $20
add e
ld e, a
jr nc, .asm_280e
inc d
ld a, d
and $3
or $98
ld d, a
.asm_280e
dec c
jr nz, .asm_27fd
ld a, $12
ld [$ffdc], a
ret
; 2816
Function2816:: ; 2816
ld hl, BGMapBuffer
ld bc, $0078
xor a
call ByteFill
ret
; 2821
Function2821:: ; 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, $d000
call FarDecompress
ld hl, $d000
ld de, VTiles2
ld bc, $0600
call CopyBytes
ld a, [rVBK]
push af
ld a, $1
ld [rVBK], a
ld hl, $d600
ld de, VTiles2
ld bc, $0600
call CopyBytes
pop af
ld [rVBK], a
pop af
ld [rSVBK], a
ld a, [$d199]
cp $1
jr z, .asm_286f
cp $2
jr z, .asm_286f
cp $4
jr z, .asm_286f
jr .asm_2875
.asm_286f
callba LoadMapGroupRoof
.asm_2875
xor a
ld [hTileAnimFrame], a
ret
; 2879
Function2879:: ; 2879
ld hl, $d194
ld a, [hli]
ld h, [hl]
ld l, a
ld de, $dcb9
ld c, $5
ld b, $6
.asm_2886
push bc
push hl
.asm_2888
ld a, [hli]
ld [de], a
inc de
dec b
jr nz, .asm_2888
pop hl
ld a, [MapWidth]
add $6
ld c, a
ld b, $0
add hl, bc
pop bc
dec c
jr nz, .asm_2886
ret
; 289d
Function289d:: ; 289d
ld hl, $d194
ld a, [hli]
ld h, [hl]
ld l, a
ld de, $dcb9
ld a, [MapWidth]
add $6
ld [hConnectionStripLength], a
ld a, [$d151]
and a
jr z, .asm_28cb
cp $1
jr z, .asm_28c0
cp $2
jr z, .asm_28d4
cp $3
jr z, .asm_28da
ret
.asm_28c0
ld de, $dcbf
ld a, [hConnectionStripLength]
ld c, a
ld b, $0
add hl, bc
jr .asm_28ce
.asm_28cb
ld de, $dcb9
.asm_28ce
ld b, $6
ld c, $4
jr Function28f7
.asm_28d4
ld de, $dcba
inc hl
jr .asm_28dd
.asm_28da
ld de, $dcb9
.asm_28dd
ld b, $5
ld c, $5
jr Function28f7
Function28e3:: ; 28e3
ld hl, $d194
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [MapWidth]
add $6
ld [hConnectionStripLength], a
ld de, $dcb9
ld b, $6
ld c, $5
Function28f7:: ; 28f7
.asm_28f7
push bc
push hl
push de
.asm_28fa
ld a, [de]
inc de
ld [hli], a
dec b
jr nz, .asm_28fa
pop de
ld a, e
add $6
ld e, a
jr nc, .asm_2908
inc d
.asm_2908
pop hl
ld a, [hConnectionStripLength]
ld c, a
ld b, $0
add hl, bc
pop bc
dec c
jr nz, .asm_28f7
ret
; 2914
Function2914:: ; 2914
xor a
ld [TilePermissions], a
call Function296c
call Function294d
ld a, [MapX]
ld d, a
ld a, [MapY]
ld e, a
call Function2a3c
ld [StandingTile], a
call Function29ff
ret nz
ld a, [StandingTile]
and 7
ld hl, .data_2945
add l
ld l, a
ld a, 0
adc h
ld h, a
ld a, [hl]
ld hl, TilePermissions
or [hl]
ld [hl], a
ret
; 2945
.data_2945 ; 2945
db 1, 2, 4, 8, 9, 10, 5, 6
; 294d
Function294d:: ; 294d
ld a, [MapX]
ld d, a
ld a, [MapY]
ld e, a
push de
inc e
call Function2a3c
ld [TileDown], a
call Function298b
pop de
dec e
call Function2a3c
ld [TileUp], a
call Function29a8
ret
; 296c
Function296c:: ; 296c
ld a, [MapX]
ld d, a
ld a, [MapY]
ld e, a
push de
dec d
call Function2a3c
ld [TileLeft], a
call Function29e2
pop de
inc d
call Function2a3c
ld [TileRight], a
call Function29c5
ret
; 298b
Function298b:: ; 298b
call Function29ff
ret nz
ld a, [TileDown]
and $7
cp $2
jr z, .asm_299f
cp $6
jr z, .asm_299f
cp $7
ret nz
.asm_299f
ld a, [TilePermissions]
or $8
ld [TilePermissions], a
ret
; 29a8
Function29a8:: ; 29a8
call Function29ff
ret nz
ld a, [TileUp]
and $7
cp $3
jr z, .asm_29bc
cp $4
jr z, .asm_29bc
cp $5
ret nz
.asm_29bc
ld a, [TilePermissions]
or $4
ld [TilePermissions], a
ret
; 29c5
Function29c5:: ; 29c5
call Function29ff
ret nz
ld a, [TileRight]
and $7
cp $1
jr z, .asm_29d9
cp $5
jr z, .asm_29d9
cp $7
ret nz
.asm_29d9
ld a, [TilePermissions]
or $1
ld [TilePermissions], a
ret
; 29e2
Function29e2:: ; 29e2
call Function29ff
ret nz
ld a, [TileLeft]
and $7
cp $0
jr z, .asm_29f6
cp $4
jr z, .asm_29f6
cp $6
ret nz
.asm_29f6
ld a, [TilePermissions]
or $2
ld [TilePermissions], a
ret
; 29ff
Function29ff:: ; 29ff
and $f0
cp $b0
ret z
cp $c0
ret
; 2a07
GetFacingTileCoord:: ; 2a07
; Return map coordinates in (d, e) and tile id in a
; of the tile the player is facing.
ld a, [PlayerDirection]
and %1100
srl a
srl a
ld l, a
ld h, 0
add hl, hl
add hl, hl
ld de, .Directions
add hl, de
ld d, [hl]
inc hl
ld e, [hl]
inc hl
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [MapX]
add d
ld d, a
ld a, [MapY]
add e
ld e, a
ld a, [hl]
ret
.Directions
; x, y
db 0, 1
dw TileDown
db 0, -1
dw TileUp
db -1, 0
dw TileLeft
db 1, 0
dw TileRight
; 2a3c
Function2a3c:: ; 2a3c
call Function2a66
ld a, [hl]
and a
jr z, .asm_2a63
ld l, a
ld h, $0
add hl, hl
add hl, hl
ld a, [TilesetCollisionAddress]
ld c, a
ld a, [$d1e1]
ld b, a
add hl, bc
rr d
jr nc, .asm_2a56
inc hl
.asm_2a56
rr e
jr nc, .asm_2a5c
inc hl
inc hl
.asm_2a5c
ld a, [TilesetCollisionBank]
call GetFarByte
ret
.asm_2a63
ld a, $ff
ret
; 2a66
Function2a66:: ; 2a66
ld a, [MapWidth]
add $6
ld c, a
ld b, $0
ld hl, $c801
add hl, bc
ld a, e
srl a
jr z, .asm_2a84
and a
.asm_2a78
srl a
jr nc, .asm_2a7d
add hl, bc
.asm_2a7d
sla c
rl b
and a
jr nz, .asm_2a78
.asm_2a84
ld c, d
srl c
ld b, $0
add hl, bc
ret
; 2a8b
CheckFacingSign:: ; 2a8b
call GetFacingTileCoord
ld b, a
ld a, d
sub 4
ld d, a
ld a, e
sub 4
ld e, a
ld a, [$dc01]
and a
ret z
ld c, a
ld a, [hROMBank]
push af
call Function2c52
call Function2aaa
pop hl
ld a, h
rst Bankswitch
ret
; 2aaa
Function2aaa:: ; 2aaa
ld hl, $dc02
ld a, [hli]
ld h, [hl]
ld l, a
.asm_2ab0
push hl
ld a, [hli]
cp e
jr nz, .asm_2abb
ld a, [hli]
cp d
jr nz, .asm_2abb
jr .asm_2ac8
.asm_2abb
pop hl
ld a, 5
add l
ld l, a
jr nc, .asm_2ac3
inc h
.asm_2ac3
dec c
jr nz, .asm_2ab0
xor a
ret
.asm_2ac8
pop hl
ld de, EngineBuffer1
ld bc, 5
call CopyBytes
scf
ret
; 2ad4
Function2ad4:: ; 2ad4
ld a, [$dbfe]
and a
ret z
ld c, a
ld a, [hROMBank]
push af
call Function2c52
call Function2ae7
pop hl
ld a, h
rst Bankswitch
ret
; 2ae7
Function2ae7:: ; 2ae7
ld hl, $dbff
ld a, [hli]
ld h, [hl]
ld l, a
call Function211b
ld b, a
ld a, [MapX]
sub $4
ld d, a
ld a, [MapY]
sub $4
ld e, a
.asm_2afd
push hl
ld a, [hli]
cp b
jr z, .asm_2b06
cp $ff
jr nz, .asm_2b10
.asm_2b06
ld a, [hli]
cp e
jr nz, .asm_2b10
ld a, [hli]
cp d
jr nz, .asm_2b10
jr .asm_2b1d
.asm_2b10
pop hl
ld a, $8
add l
ld l, a
jr nc, .asm_2b18
inc h
.asm_2b18
dec c
jr nz, .asm_2afd
xor a
ret
.asm_2b1d
pop hl
ld de, EngineBuffer1
ld bc, $0008
call CopyBytes
scf
ret
; 2b29
FadeToMenu:: ; 2b29
xor a
ld [hBGMapMode], a
call Function1d6e
callba Function8c084
call ClearSprites
call Function2ed3
ret
; 2b3c
Function2b3c:: ; 2b3c
call WhiteBGMap
call Function2bae
call Function1ad2
call Function1d7d
call Functiond90
jr Function2b5c
; 2b4d
Function2b4d:: ; 2b4d
call WhiteBGMap
call Function1d7d
call Function2bae
call Function1ad2
call Functiond90
; 2b5c
Function2b5c:: ; 2b5c
ld b, $9
call GetSGBLayout
callba Function49409
call Function3200
callba Function8c079
call Function2ee4
ret
; 2b74
Function2b74:: ; 0x2b74
push af
ld a, $1
ld [$c2ce], a
call WhiteBGMap
call ClearSprites
call Function2bae
hlcoord 0, 12
ld bc, $0412
call TextBox
ld hl, VramState
set 0, [hl]
call Function1ad2
call Function3200
ld b, $9
call GetSGBLayout
callba Function49409
call UpdateTimePals
call DelayFrame
ld a, $1
ld [$ffde], a
pop af
ret
; 0x2bae
Function2bae:: ; 2bae
call DisableLCD
call ClearSprites
callba Function14168
call Functione51
call Functione5f
ld a, [hROMBank]
push af
ld a, [MapGroup]
ld b, a
ld a, [MapNumber]
ld c, a
call SwitchToAnyMapBank
callba Function8c001
call Function2173
call Function2821
ld a, 9
call SkipMusic
pop af
rst Bankswitch
call EnableLCD
ret
; 2be5
GetMapHeaderPointer:: ; 2be5
ld a, [MapGroup]
ld b, a
ld a, [MapNumber]
ld c, a
; 2bed
GetAnyMapHeaderPointer:: ; 0x2bed
; Prior to calling this function, you must have switched banks so that
; MapGroupPointers is visible.
; inputs:
; b = map group, c = map number
; XXX de = ???
; outputs:
; hl points to the map header
push bc ; save map number for later
; get pointer to map group
dec b
ld c, b
ld b, $0
ld hl, MapGroupPointers
add hl, bc
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
pop bc ; restore map number
; find the cth map header
dec c
ld b, $0
ld a, OlivineGym_MapHeader - OlivinePokeCenter1F_MapHeader
call AddNTimes
ret
; 0x2c04
GetMapHeaderMember:: ; 0x2c04
; Extract data from the current map's header.
; inputs:
; de = offset of desired data within the mapheader
; outputs:
; bc = data from the current map's header
; (e.g., de = $0003 would return a pointer to the secondary map header)
ld a, [MapGroup]
ld b, a
ld a, [MapNumber]
ld c, a
; fallthrough
GetAnyMapHeaderMember:: ; 0x2c0c
; bankswitch
ld a, [hROMBank]
push af
ld a, BANK(MapGroupPointers)
rst Bankswitch
call GetAnyMapHeaderPointer
add hl, de
ld c, [hl]
inc hl
ld b, [hl]
; bankswitch back
pop af
rst Bankswitch
ret
; 0x2c1c
SwitchToMapBank:: ; 2c1c
ld a, [MapGroup]
ld b, a
ld a, [MapNumber]
ld c, a
; 2c24
SwitchToAnyMapBank:: ; 2c24
call GetAnyMapBank
rst Bankswitch
ret
; 2c29
GetMapBank:: ; 2c29
ld a, [MapGroup]
ld b, a
ld a, [MapNumber]
ld c, a
; 2c31
GetAnyMapBank:: ; 2c31
push hl
push de
ld de, $0000
call GetAnyMapHeaderMember
ld a, c
pop de
pop hl
ret
; 2c3d
Function2c3d:: ; 2c3d
ld a, [hROMBank]
push af
ld a, $25
rst Bankswitch
call GetMapHeaderPointer
ld de, $d198
ld bc, $0005
call CopyBytes
pop af
rst Bankswitch
ret
; 2c52
Function2c52:: ; 2c52
ld a, [MapScriptHeaderBank]
rst Bankswitch
ret
; 2c57
GetMapScriptHeaderBank:: ; 2c57
ld a, [MapScriptHeaderBank]
ret
; 2c5b
GetAnyMapBlockdataBank:: ; 2c5b
; Return the blockdata bank for group b map c.
push hl
push de
push bc
push bc
ld de, 3 ; second map header pointer
call GetAnyMapHeaderMember
ld l, c
ld h, b
pop bc
push hl
ld de, 0 ; second map header bank
call GetAnyMapHeaderMember
pop hl
ld de, 3 ; blockdata bank
add hl, de
ld a, c
call GetFarByte
rst Bankswitch
pop bc
pop de
pop hl
ret
; 2c7d
GetSecondaryMapHeaderPointer:: ; 0x2c7d
; returns the current map's secondary map header pointer in hl.
push bc
push de
ld de, $0003 ; secondary map header pointer (offset within header)
call GetMapHeaderMember
ld l, c
ld h, b
pop de
pop bc
ret
; 2c8a
GetMapPermission:: ; 2c8a
push hl
push de
push bc
ld de, 2
call GetMapHeaderMember
ld a, c
pop bc
pop de
pop hl
ret
; 2c98
Function2c98:: ; 2c98
ret
; 2c99
GetAnyMapPermission:: ; 2c99
push hl
push de
push bc
ld de, $0002
call GetAnyMapHeaderMember
ld a, c
pop bc
pop de
pop hl
ret
; 2ca7
GetAnyMapTileset:: ; 2ca7
ld de, $0001
call GetAnyMapHeaderMember
ld a, c
ret
; 2caf
GetWorldMapLocation:: ; 0x2caf
; given a map group/id in bc, return its location on the Pokégear map.
push hl
push de
push bc
ld de, 5
call GetAnyMapHeaderMember
ld a, c
pop bc
pop de
pop hl
ret
; 0x2cbd
GetMapHeaderMusic:: ; 2cbd
RADIO_TOWER_MUSIC EQU 7
push hl
push bc
ld de, 6 ; music
call GetMapHeaderMember
ld a, c
cp MUSIC_MAHOGANY_MART
jr z, .mahoganymart
bit RADIO_TOWER_MUSIC, c
jr nz, .radiotower
callba Function8b342
ld e, c
ld d, 0
.done
pop bc
pop hl
ret
.radiotower
ld a, [StatusFlags2]
bit 0, a
jr z, .clearedradiotower
ld de, MUSIC_ROCKET_OVERTURE
jr .done
.clearedradiotower
; the rest of the byte
ld a, c
and 1 << RADIO_TOWER_MUSIC - 1
ld e, a
ld d, 0
jr .done
.mahoganymart
ld a, [StatusFlags2]
bit 7, a
jr z, .clearedmahogany
ld de, MUSIC_ROCKET_HIDEOUT
jr .done
.clearedmahogany
ld de, MUSIC_CHERRYGROVE_CITY
jr .done
; 2cff
Function2cff:: ; 2cff
call Function2d0d
and $f
ret
; 2d05
Function2d05:: ; 2d05
call Function2d0d
and $f0
swap a
ret
; 2d0d
Function2d0d:: ; 2d0d
push hl
push bc
ld de, $0007
call GetMapHeaderMember
ld a, c
pop bc
pop hl
ret
; 2d19
Function2d19:: ; 2d19
push de
push hl
push bc
ld de, $0008
call GetMapHeaderMember
ld a, c
pop bc
pop hl
pop de
ret
; 2d27
LoadTilesetHeader:: ; 2d27
push hl
push bc
ld hl, Tilesets
ld bc, Tileset01 - Tileset00
ld a, [$d199]
call AddNTimes
ld de, TilesetBank
ld bc, Tileset01 - Tileset00
ld a, BANK(Tilesets)
call FarCopyBytes
pop bc
pop hl
ret
; 2d43