mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2024-11-16 11:27:33 -08:00
275 lines
4.0 KiB
NASM
275 lines
4.0 KiB
NASM
|
MAP_NAME_SIGN_START EQU $60
|
||
|
|
||
|
ReturnFromMapSetupScript:: ; b8000
|
||
|
xor a
|
||
|
ld [hBGMapMode], a
|
||
|
farcall .inefficient_farcall ; this is a waste of 6 ROM bytes and 6 stack bytes
|
||
|
ret
|
||
|
; b800a
|
||
|
|
||
|
; should have just been a fallthrough
|
||
|
.inefficient_farcall ; b800a
|
||
|
ld a, [MapGroup]
|
||
|
ld b, a
|
||
|
ld a, [MapNumber]
|
||
|
ld c, a
|
||
|
call GetWorldMapLocation
|
||
|
ld [wCurrentLandmark], a
|
||
|
call .CheckNationalParkGate
|
||
|
jr z, .nationalparkgate
|
||
|
|
||
|
call GetMapEnvironment
|
||
|
cp GATE
|
||
|
jr nz, .not_gate
|
||
|
|
||
|
.nationalparkgate
|
||
|
ld a, -1
|
||
|
ld [wCurrentLandmark], a
|
||
|
|
||
|
.not_gate
|
||
|
ld hl, wEnteredMapFromContinue
|
||
|
bit 1, [hl]
|
||
|
res 1, [hl]
|
||
|
jr nz, .dont_do_map_sign
|
||
|
|
||
|
call .CheckMovingWithinLandmark
|
||
|
jr z, .dont_do_map_sign
|
||
|
ld a, [wCurrentLandmark]
|
||
|
ld [wPreviousLandmark], a
|
||
|
|
||
|
call .CheckSpecialMap
|
||
|
jr z, .dont_do_map_sign
|
||
|
|
||
|
; Display for 60 frames
|
||
|
ld a, 60
|
||
|
ld [wLandmarkSignTimer], a
|
||
|
call LoadMapNameSignGFX
|
||
|
call InitMapNameFrame
|
||
|
farcall HDMATransfer_OnlyTopFourRows
|
||
|
ret
|
||
|
|
||
|
.dont_do_map_sign
|
||
|
ld a, [wCurrentLandmark]
|
||
|
ld [wPreviousLandmark], a
|
||
|
ld a, $90
|
||
|
ld [rWY], a
|
||
|
ld [hWY], a
|
||
|
xor a
|
||
|
ld [hLCDCPointer], a
|
||
|
ret
|
||
|
; b8064
|
||
|
|
||
|
.CheckMovingWithinLandmark: ; b8064
|
||
|
ld a, [wCurrentLandmark]
|
||
|
ld c, a
|
||
|
ld a, [wPreviousLandmark]
|
||
|
cp c
|
||
|
ret z
|
||
|
cp SPECIAL_MAP
|
||
|
ret
|
||
|
; b8070
|
||
|
|
||
|
.CheckSpecialMap: ; b8070
|
||
|
; These landmarks do not get pop-up signs.
|
||
|
cp -1
|
||
|
ret z
|
||
|
cp SPECIAL_MAP
|
||
|
ret z
|
||
|
cp RADIO_TOWER
|
||
|
ret z
|
||
|
cp LAV_RADIO_TOWER
|
||
|
ret z
|
||
|
cp UNDERGROUND_PATH
|
||
|
ret z
|
||
|
cp INDIGO_PLATEAU
|
||
|
ret z
|
||
|
cp POWER_PLANT
|
||
|
ret z
|
||
|
ld a, $1
|
||
|
and a
|
||
|
ret
|
||
|
; b8089
|
||
|
|
||
|
.CheckNationalParkGate: ; b8089
|
||
|
ld a, [MapGroup]
|
||
|
cp GROUP_ROUTE_35_NATIONAL_PARK_GATE
|
||
|
ret nz
|
||
|
ld a, [MapNumber]
|
||
|
cp MAP_ROUTE_35_NATIONAL_PARK_GATE
|
||
|
ret z
|
||
|
cp MAP_ROUTE_36_NATIONAL_PARK_GATE
|
||
|
ret
|
||
|
; b8098
|
||
|
|
||
|
|
||
|
PlaceMapNameSign:: ; b8098 (2e:4098)
|
||
|
ld hl, wLandmarkSignTimer
|
||
|
ld a, [hl]
|
||
|
and a
|
||
|
jr z, .disappear
|
||
|
dec [hl]
|
||
|
cp 60
|
||
|
ret z
|
||
|
cp 59
|
||
|
jr nz, .skip2
|
||
|
call InitMapNameFrame
|
||
|
call PlaceMapNameCenterAlign
|
||
|
farcall HDMATransfer_OnlyTopFourRows
|
||
|
.skip2
|
||
|
ld a, $80
|
||
|
ld a, $70
|
||
|
ld [rWY], a
|
||
|
ld [hWY], a
|
||
|
ret
|
||
|
|
||
|
.disappear
|
||
|
ld a, $90
|
||
|
ld [rWY], a
|
||
|
ld [hWY], a
|
||
|
xor a
|
||
|
ld [hLCDCPointer], a
|
||
|
ret
|
||
|
|
||
|
|
||
|
LoadMapNameSignGFX: ; b80c6
|
||
|
ld de, MapEntryFrameGFX
|
||
|
ld hl, vTiles2 tile MAP_NAME_SIGN_START
|
||
|
lb bc, BANK(MapEntryFrameGFX), 14
|
||
|
call Get2bpp
|
||
|
ret
|
||
|
; b80d3
|
||
|
|
||
|
InitMapNameFrame: ; b80d3
|
||
|
hlcoord 0, 0
|
||
|
ld b, 2
|
||
|
ld c, 18
|
||
|
call InitMapSignAttrMap
|
||
|
call PlaceMapNameFrame
|
||
|
ret
|
||
|
; b80e1
|
||
|
|
||
|
|
||
|
PlaceMapNameCenterAlign: ; b80e1 (2e:40e1)
|
||
|
ld a, [wCurrentLandmark]
|
||
|
ld e, a
|
||
|
farcall GetLandmarkName
|
||
|
call .GetNameLength
|
||
|
ld a, SCREEN_WIDTH
|
||
|
sub c
|
||
|
srl a
|
||
|
ld b, $0
|
||
|
ld c, a
|
||
|
hlcoord 0, 2
|
||
|
add hl, bc
|
||
|
ld de, StringBuffer1
|
||
|
call PlaceString
|
||
|
ret
|
||
|
|
||
|
.GetNameLength: ; b8101 (2e:4101)
|
||
|
ld c, 0
|
||
|
push hl
|
||
|
ld hl, StringBuffer1
|
||
|
.loop
|
||
|
ld a, [hli]
|
||
|
cp "@"
|
||
|
jr z, .stop
|
||
|
cp "%"
|
||
|
jr z, .loop
|
||
|
inc c
|
||
|
jr .loop
|
||
|
.stop
|
||
|
pop hl
|
||
|
ret
|
||
|
|
||
|
|
||
|
InitMapSignAttrMap: ; b8115
|
||
|
ld de, AttrMap - TileMap
|
||
|
add hl, de
|
||
|
inc b
|
||
|
inc b
|
||
|
inc c
|
||
|
inc c
|
||
|
ld a, PAL_BG_TEXT | PRIORITY
|
||
|
.loop
|
||
|
push bc
|
||
|
push hl
|
||
|
.inner_loop
|
||
|
ld [hli], a
|
||
|
dec c
|
||
|
jr nz, .inner_loop
|
||
|
pop hl
|
||
|
ld de, SCREEN_WIDTH
|
||
|
add hl, de
|
||
|
pop bc
|
||
|
dec b
|
||
|
jr nz, .loop
|
||
|
ret
|
||
|
; b812f
|
||
|
|
||
|
PlaceMapNameFrame: ; b812f
|
||
|
hlcoord 0, 0
|
||
|
; top left
|
||
|
ld a, MAP_NAME_SIGN_START + 1
|
||
|
ld [hli], a
|
||
|
; top row
|
||
|
ld a, MAP_NAME_SIGN_START + 2
|
||
|
call .FillTopBottom
|
||
|
; top right
|
||
|
ld a, MAP_NAME_SIGN_START + 4
|
||
|
ld [hli], a
|
||
|
; left, first line
|
||
|
ld a, MAP_NAME_SIGN_START + 5
|
||
|
ld [hli], a
|
||
|
; first line
|
||
|
call .FillMiddle
|
||
|
; right, first line
|
||
|
ld a, MAP_NAME_SIGN_START + 11
|
||
|
ld [hli], a
|
||
|
; left, second line
|
||
|
ld a, MAP_NAME_SIGN_START + 6
|
||
|
ld [hli], a
|
||
|
; second line
|
||
|
call .FillMiddle
|
||
|
; right, second line
|
||
|
ld a, MAP_NAME_SIGN_START + 12
|
||
|
ld [hli], a
|
||
|
; bottom left
|
||
|
ld a, MAP_NAME_SIGN_START + 7
|
||
|
ld [hli], a
|
||
|
; bottom
|
||
|
ld a, MAP_NAME_SIGN_START + 8
|
||
|
call .FillTopBottom
|
||
|
; bottom right
|
||
|
ld a, MAP_NAME_SIGN_START + 10
|
||
|
ld [hl], a
|
||
|
ret
|
||
|
; b815b
|
||
|
|
||
|
.FillMiddle: ; b815b
|
||
|
ld c, SCREEN_WIDTH - 2
|
||
|
ld a, MAP_NAME_SIGN_START + 13
|
||
|
.loop
|
||
|
ld [hli], a
|
||
|
dec c
|
||
|
jr nz, .loop
|
||
|
ret
|
||
|
; b8164
|
||
|
|
||
|
.FillTopBottom: ; b8164
|
||
|
ld c, 5
|
||
|
jr .enterloop
|
||
|
|
||
|
.continueloop
|
||
|
ld [hli], a
|
||
|
ld [hli], a
|
||
|
|
||
|
.enterloop
|
||
|
inc a
|
||
|
ld [hli], a
|
||
|
ld [hli], a
|
||
|
dec a
|
||
|
dec c
|
||
|
jr nz, .continueloop
|
||
|
ret
|
||
|
; b8172
|