mirror of
https://github.com/pret/pokeyellow.git
synced 2026-05-09 12:22:04 -05:00
619 lines
9.6 KiB
NASM
Executable File
619 lines
9.6 KiB
NASM
Executable File
DisplayTownMap: ; 70eb7 (1c:4eb7)
|
|
call LoadTownMap
|
|
ld hl, wUpdateSpritesEnabled
|
|
ld a, [hl]
|
|
push af
|
|
ld [hl], $ff
|
|
push hl
|
|
ld a, $1
|
|
ld [hJoy7], a
|
|
ld a, [W_CURMAP] ; W_CURMAP
|
|
push af
|
|
ld b, $0
|
|
call Func_7124e
|
|
hlCoord 1, 0
|
|
ld de, wcd6d
|
|
call PlaceString
|
|
ld hl, wOAMBuffer
|
|
ld de, wTileMapBackup
|
|
ld bc, $10
|
|
call CopyData
|
|
ld hl, vSprites + $40
|
|
ld de, TownMapCursor ; $4f40
|
|
ld bc, (BANK(TownMapCursor) << 8) + $04
|
|
call CopyVideoDataDouble
|
|
xor a
|
|
ld [wWhichTrade], a ; wWhichTrade
|
|
pop af
|
|
jr Func_70f08
|
|
|
|
Func_70ef4: ; 70ef4 (1c:4ef4)
|
|
ld hl, wTileMap
|
|
ld bc, $114
|
|
call ClearScreenArea
|
|
ld hl, TownMapOrder ; $4f11
|
|
ld a, [wWhichTrade] ; wWhichTrade
|
|
ld c, a
|
|
ld b, $0
|
|
add hl, bc
|
|
ld a, [hl]
|
|
|
|
Func_70f08: ; 70f08 (1c:4f08)
|
|
ld de, wHPBarMaxHP
|
|
call Func_7137a
|
|
ld a, [de]
|
|
push hl
|
|
call Func_712e1
|
|
ld a, $4
|
|
ld [wcd5b], a
|
|
ld hl, wOAMBuffer + $10
|
|
call Func_71302
|
|
pop hl
|
|
ld de, wcd6d
|
|
.loop
|
|
ld a, [hli]
|
|
ld [de], a
|
|
inc de
|
|
cp "@"
|
|
jr nz, .loop
|
|
hlCoord 1, 0
|
|
ld de, wcd6d
|
|
call PlaceString
|
|
ld hl, wOAMBuffer + $10
|
|
ld de, wTileMapBackup + 16
|
|
ld bc, $10
|
|
call CopyData
|
|
.asm_70f3e
|
|
call TownMapSpriteBlinkingAnimation
|
|
call JoypadLowSensitivity
|
|
ld a, [hJoy5]
|
|
ld b, a
|
|
and D_DOWN | D_UP | B_BUTTON | A_BUTTON
|
|
jr z, .asm_70f3e
|
|
ld a, $8c ; (SFX_02_3c - SFX_Headers_02) / 3
|
|
call PlaySound
|
|
bit 6, b
|
|
jr nz, .asm_70f68
|
|
bit 7, b
|
|
jr nz, .asm_70f77
|
|
xor a
|
|
ld [wTownMapSpriteBlinkingEnabled], a
|
|
ld [hJoy7], a
|
|
ld [wTownMapSpriteBlinkingCounter], a
|
|
call Func_71235
|
|
pop hl
|
|
pop af
|
|
ld [hl], a
|
|
ret
|
|
.asm_70f68
|
|
ld a, [wWhichTrade] ; wWhichTrade
|
|
inc a
|
|
cp $2f
|
|
jr nz, .asm_70f71
|
|
xor a
|
|
.asm_70f71
|
|
ld [wWhichTrade], a ; wWhichTrade
|
|
jp Func_70ef4
|
|
.asm_70f77
|
|
ld a, [wWhichTrade] ; wWhichTrade
|
|
dec a
|
|
cp $ff
|
|
jr nz, .asm_70f81
|
|
ld a, $2e
|
|
.asm_70f81
|
|
ld [wWhichTrade], a ; wWhichTrade
|
|
jp Func_70ef4
|
|
.asm_70f87
|
|
ld a,[hJoy5]
|
|
and D_DOWN | D_UP
|
|
ret z
|
|
callab Func_f0000
|
|
ret
|
|
|
|
INCLUDE "data/town_map_order.asm"
|
|
|
|
TownMapCursor: ; 70fc4 (1c:4fc4)
|
|
INCBIN "gfx/town_map_cursor.1bpp"
|
|
|
|
LoadTownMap_Nest: ; 70fe4 (1c:4fe4)
|
|
call LoadTownMap
|
|
ld hl, wUpdateSpritesEnabled
|
|
ld a, [hl]
|
|
push af
|
|
ld [hl], $ff
|
|
push hl
|
|
call Func_71279
|
|
call GetMonName
|
|
hlCoord 1, 0
|
|
call PlaceString
|
|
ld h, b
|
|
ld l, c
|
|
ld de, MonsNestText
|
|
call PlaceString
|
|
call WaitForTextScrollButtonPress
|
|
call Func_71235
|
|
pop hl
|
|
pop af
|
|
ld [hl], a
|
|
ret
|
|
|
|
MonsNestText: ; 7100d (1c:500d)
|
|
db "'s NEST@"
|
|
|
|
LoadTownMap_Fly: ; 71014 (1c:5014)
|
|
call ClearSprites
|
|
call LoadTownMap
|
|
ld a, $1
|
|
ld [hJoy7], a
|
|
call LoadPlayerSpriteGraphics
|
|
call LoadFontTilePatterns
|
|
ld de, BirdSprite ; $4d80
|
|
ld b, BANK(BirdSprite)
|
|
ld c, $c
|
|
ld hl, vSprites + $40
|
|
call CopyVideoData
|
|
ld de, TownMapUpArrow ; $5093
|
|
ld hl, vChars1 + $6d0
|
|
ld bc, (BANK(TownMapUpArrow) << 8) + $01
|
|
call CopyVideoDataDouble
|
|
call Func_710fb
|
|
ld hl, wUpdateSpritesEnabled
|
|
ld a, [hl]
|
|
push af
|
|
ld [hl], $ff
|
|
push hl
|
|
ld hl, wTileMap
|
|
ld de, ToText
|
|
call PlaceString
|
|
ld a, [W_CURMAP] ; W_CURMAP
|
|
ld b, $0
|
|
call Func_7124e
|
|
ld hl, wTrainerEngageDistance
|
|
deCoord 18, 0
|
|
|
|
.townMapFlyLoop
|
|
ld a, $7f
|
|
ld [de], a
|
|
push hl
|
|
push hl
|
|
hlCoord 3, 0
|
|
ld bc, $10f
|
|
call ClearScreenArea
|
|
pop hl
|
|
ld a, [hl]
|
|
ld b, $4
|
|
call Func_7124e
|
|
hlCoord 3, 0
|
|
ld de, wcd6d
|
|
call PlaceString
|
|
ld c, $f
|
|
call DelayFrames
|
|
hlCoord 18, 0
|
|
ld [hl], "▶"
|
|
hlCoord 19, 0
|
|
ld [hl], $ee
|
|
pop hl
|
|
.asm_7108d
|
|
push hl
|
|
call DelayFrame
|
|
call JoypadLowSensitivity
|
|
ld a, [hJoy5]
|
|
ld b, a
|
|
pop hl
|
|
and D_DOWN | D_UP | B_BUTTON | A_BUTTON
|
|
jr z, .asm_7108d
|
|
bit 0, b
|
|
jr nz, .asm_710af
|
|
ld a, $8c ; (SFX_02_3c - SFX_Headers_02) / 3
|
|
call PlaySound
|
|
bit 6, b
|
|
jr nz, .asm_710cd
|
|
bit 7, b
|
|
jr nz, .asm_710e3
|
|
jr .asm_710c0
|
|
.asm_710af
|
|
ld a, $8e ; (SFX_02_3e - SFX_Headers_02) / 3
|
|
call PlaySound
|
|
ld a, [hl]
|
|
ld [wDestinationMap], a
|
|
ld hl, wd732
|
|
set 3, [hl]
|
|
inc hl
|
|
set 7, [hl]
|
|
.asm_710c0
|
|
xor a
|
|
ld [wTownMapSpriteBlinkingEnabled], a
|
|
ld [hJoy7], a
|
|
call GBPalWhiteOutWithDelay3
|
|
pop hl
|
|
pop af
|
|
ld [hl], a
|
|
ret
|
|
.asm_710cd
|
|
deCoord 18, 0
|
|
inc hl
|
|
ld a, [hl]
|
|
cp $ff
|
|
jr z, .asm_710dd
|
|
cp $fe
|
|
jr z, .asm_710cd
|
|
jp .townMapFlyLoop
|
|
.asm_710dd
|
|
ld hl, wTrainerEngageDistance
|
|
jp .townMapFlyLoop
|
|
.asm_710e3
|
|
deCoord 19, 0
|
|
dec hl
|
|
ld a, [hl]
|
|
cp $ff
|
|
jr z, .asm_710f3
|
|
cp $fe
|
|
jr z, .asm_710e3
|
|
jp .townMapFlyLoop
|
|
.asm_710f3
|
|
ld hl, wcd49
|
|
jr .asm_710e3
|
|
|
|
ToText: ; 710f8 (1c:50f8)
|
|
db "To@"
|
|
|
|
Func_710fb: ; 710fb (1c:50fb)
|
|
ld hl, wWhichTrade ; wWhichTrade
|
|
ld [hl], $ff
|
|
inc hl
|
|
ld a, [W_TOWNVISITEDFLAG]
|
|
ld e, a
|
|
ld a, [W_TOWNVISITEDFLAG + 1]
|
|
ld d, a
|
|
ld bc, $b
|
|
.asm_7110c
|
|
srl d
|
|
rr e
|
|
ld a, $fe
|
|
jr nc, .asm_71115
|
|
ld a, b
|
|
.asm_71115
|
|
ld [hl], a
|
|
inc hl
|
|
inc b
|
|
dec c
|
|
jr nz, .asm_7110c
|
|
ld [hl], $ff
|
|
ret
|
|
|
|
TownMapUpArrow: ; 7111e (1c:511e)
|
|
INCBIN "gfx/up_arrow.1bpp"
|
|
|
|
LoadTownMap: ; 71126 (1c:5126)
|
|
call GBPalWhiteOutWithDelay3
|
|
call ClearScreen
|
|
call UpdateSprites
|
|
ld hl, wTileMap
|
|
ld bc, $1212
|
|
call TextBoxBorder
|
|
call DisableLCD
|
|
ld hl, WorldMapTileGraphics ; $65a8
|
|
ld de, vChars2 + $600
|
|
ld bc, $100
|
|
ld a, BANK(WorldMapTileGraphics)
|
|
call FarCopyData
|
|
ld hl, MonNestIcon ; $574b
|
|
ld de, vSprites + $40
|
|
ld bc, $8
|
|
ld a, BANK(MonNestIcon)
|
|
call FarCopyDataDouble
|
|
ld hl, wTileMap
|
|
ld de, CompressedMap ; $5100
|
|
.asm_710d3
|
|
ld a, [de]
|
|
and a
|
|
jr z, .asm_71173
|
|
ld b, a
|
|
and $f
|
|
ld c, a
|
|
ld a, b
|
|
swap a
|
|
and $f
|
|
add $60
|
|
.loop
|
|
ld [hli], a
|
|
dec c
|
|
jr nz, .loop
|
|
inc de
|
|
jr .asm_710d3
|
|
.asm_71173
|
|
call EnableLCD
|
|
ld b, $2
|
|
call GoPAL_SET
|
|
call Delay3
|
|
call GBPalNormal
|
|
xor a
|
|
ld [wTownMapSpriteBlinkingCounter], a
|
|
inc a
|
|
ld [wTownMapSpriteBlinkingEnabled], a
|
|
ret
|
|
|
|
CompressedMap: ; 7118a (1c:518a)
|
|
; you can decompress this file with the redrle program in the extras/ dir
|
|
INCBIN "gfx/town_map.rle"
|
|
|
|
Func_71235: ; 71235 (1c:5235)
|
|
xor a
|
|
ld [wTownMapSpriteBlinkingEnabled], a
|
|
call GBPalWhiteOut
|
|
call ClearScreen
|
|
call ClearSprites
|
|
call LoadPlayerSpriteGraphics
|
|
call LoadFontTilePatterns
|
|
call UpdateSprites
|
|
jp GoPAL_SET_CF1C
|
|
|
|
Func_7124e: ; 7124e (1c:524e)
|
|
push af
|
|
ld a, b
|
|
ld [wcd5b], a
|
|
pop af
|
|
ld de, wHPBarMaxHP
|
|
call Func_7137a
|
|
ld a, [de]
|
|
push hl
|
|
call Func_712e1
|
|
call Func_712f6
|
|
pop hl
|
|
ld de, wcd6d
|
|
.asm_71266
|
|
ld a, [hli]
|
|
ld [de], a
|
|
inc de
|
|
cp "@"
|
|
jr nz, .asm_71266
|
|
ld hl, wOAMBuffer
|
|
ld de, wTileMapBackup
|
|
ld bc, $a0
|
|
jp CopyData
|
|
|
|
Func_71279: ; 71279 (1c:5279)
|
|
callba FindWildLocationsOfMon
|
|
call Func_71362
|
|
ld hl, wOAMBuffer
|
|
ld de, wBuffer
|
|
.asm_7128a
|
|
ld a, [de]
|
|
cp $ff
|
|
jr z, .asm_712a7
|
|
and a
|
|
jr z, .asm_712a4
|
|
push hl
|
|
call Func_7137a
|
|
pop hl
|
|
ld a, [de]
|
|
cp $19
|
|
jr z, .asm_712a4
|
|
call Func_712e1
|
|
ld a, $4
|
|
ld [hli], a
|
|
xor a
|
|
ld [hli], a
|
|
.asm_712a4
|
|
inc de
|
|
jr .asm_7128a
|
|
.asm_712a7
|
|
ld a, l
|
|
and a
|
|
; continue from here
|
|
jr nz, .asm_712bf
|
|
hlCoord 1, 7
|
|
ld bc, $20f
|
|
call TextBoxBorder
|
|
hlCoord 2, 9
|
|
ld de, AreaUnknownText
|
|
call PlaceString
|
|
jr .asm_712c7
|
|
.asm_712bf
|
|
ld a, [W_CURMAP] ; W_CURMAP
|
|
ld b, $0
|
|
call Func_7124e
|
|
.asm_712c7
|
|
ld hl, wOAMBuffer
|
|
ld de, wTileMapBackup
|
|
ld bc, $a0
|
|
jp CopyData
|
|
|
|
AreaUnknownText: ; 712d3 (1c:52d3)
|
|
db " AREA UNKNOWN@"
|
|
|
|
Func_712e1: ; 712e1 (1c:52e1)
|
|
push af
|
|
and $f0
|
|
srl a
|
|
add $18
|
|
ld b, a
|
|
ld [hli], a
|
|
pop af
|
|
and $f
|
|
swap a
|
|
srl a
|
|
add $18
|
|
ld c, a
|
|
ld [hli], a
|
|
ret
|
|
|
|
Func_712f6: ; 712f6 (1c:52f6)
|
|
ld a, [wcd5b]
|
|
and a
|
|
ld hl, wOAMBuffer + $90
|
|
jr z, Func_71302
|
|
ld hl, wOAMBuffer + $80
|
|
|
|
Func_71302: ; 71302 (1c:5302)
|
|
push hl
|
|
ld hl, $fcfc
|
|
add hl, bc
|
|
ld b, h
|
|
ld c, l
|
|
pop hl
|
|
|
|
WriteAsymmetricMonPartySpriteOAM: ; 7130a (1c:530a)
|
|
; Writes 4 OAM blocks for a helix mon party sprite, since is does not have
|
|
; a vertical line of symmetry.
|
|
ld de, $202
|
|
.loop
|
|
push de
|
|
push bc
|
|
.innerLoop
|
|
ld a, b
|
|
ld [hli], a
|
|
ld a, c
|
|
ld [hli], a
|
|
ld a, [wcd5b]
|
|
ld [hli], a
|
|
inc a
|
|
ld [wcd5b], a
|
|
xor a
|
|
ld [hli], a
|
|
inc d
|
|
ld a, $8
|
|
add c
|
|
ld c, a
|
|
dec e
|
|
jr nz, .innerLoop
|
|
pop bc
|
|
pop de
|
|
ld a, $8
|
|
add b
|
|
ld b, a
|
|
dec d
|
|
jr nz, .loop
|
|
ret
|
|
|
|
WriteSymmetricMonPartySpriteOAM: ; 7132f (1c:532f)
|
|
; Writes 4 OAM blocks for a mon party sprite other than a helix. All the
|
|
; sprites other than the helix one have a vertical line of symmetry which allows
|
|
; the X-flip OAM bit to be used so that only 2 rather than 4 tile patterns are
|
|
; needed.
|
|
xor a
|
|
ld [wcd5c], a
|
|
ld de, $202
|
|
.loop
|
|
push de
|
|
push bc
|
|
.innerLoop
|
|
ld a, b
|
|
ld [hli], a
|
|
ld a, c
|
|
ld [hli], a
|
|
ld a, [wcd5b]
|
|
ld [hli], a
|
|
ld a, [wcd5c]
|
|
ld [hli], a
|
|
xor $20
|
|
ld [wcd5c], a
|
|
inc d
|
|
ld a, $8
|
|
add c
|
|
ld c, a
|
|
dec e
|
|
jr nz, .innerLoop
|
|
pop bc
|
|
pop de
|
|
push hl
|
|
ld hl, wcd5b
|
|
inc [hl]
|
|
inc [hl]
|
|
pop hl
|
|
ld a, $8
|
|
add b
|
|
ld b, a
|
|
dec d
|
|
jr nz, .loop
|
|
ret
|
|
|
|
Func_71362: ; 71362 (1c:5362)
|
|
ld de, wHPBarMaxHP
|
|
.asm_71365
|
|
ld a, [de]
|
|
inc de
|
|
cp $ff
|
|
ret z
|
|
ld c, a
|
|
ld l, e
|
|
ld h, d
|
|
.asm_7136d
|
|
ld a, [hl]
|
|
cp $ff
|
|
jr z, .asm_71365
|
|
cp c
|
|
jr nz, .asm_71377
|
|
xor a
|
|
ld [hl], a
|
|
.asm_71377
|
|
inc hl
|
|
jr .asm_7136d
|
|
Func_7137a: ; 7137a (1c:537a)
|
|
cp REDS_HOUSE_1F
|
|
jr c, .asm_7138d
|
|
ld bc, $4
|
|
ld hl, InternalMapEntries ; $540b
|
|
.asm_71384
|
|
cp [hl]
|
|
jr c, .asm_7138a
|
|
add hl, bc
|
|
jr .asm_71384
|
|
.asm_7138a
|
|
inc hl
|
|
jr .asm_71396
|
|
.asm_7138d
|
|
ld hl, ExternalMapEntries ; $539c
|
|
ld c, a
|
|
ld b, $0
|
|
add hl, bc
|
|
add hl, bc
|
|
add hl, bc
|
|
.asm_71396
|
|
ld a, [hli]
|
|
ld [de], a
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
ret
|
|
|
|
ExternalMapEntries: ; 7139c (1c:539c)
|
|
dr $7139c,$7140b
|
|
InternalMapEntries: ; 7140b (1c:540b)
|
|
dr $7140b,$7174b
|
|
|
|
;INCLUDE "data/town_map_entries.asm"
|
|
|
|
;INCLUDE "text/map_names.asm" ; TODO: relabel addresses
|
|
|
|
MonNestIcon: ; 7174b (1c:574b) ; relabel this too
|
|
INCBIN "gfx/mon_nest_icon.1bpp"
|
|
|
|
TownMapSpriteBlinkingAnimation: ; 71753 (1c:5753)
|
|
ld a, [wTownMapSpriteBlinkingCounter]
|
|
inc a
|
|
cp 25
|
|
jr z, .hideSprites
|
|
cp 50
|
|
jr nz, .done
|
|
; show sprites when the counter reaches 50
|
|
ld hl, wTileMapBackup
|
|
ld de, wOAMBuffer
|
|
ld bc, $90
|
|
call CopyData
|
|
xor a
|
|
jr .done
|
|
.hideSprites
|
|
ld hl, wOAMBuffer
|
|
ld b, $24
|
|
ld de, $4
|
|
.hideSpritesLoop
|
|
ld [hl], $a0
|
|
add hl, de
|
|
dec b
|
|
jr nz, .hideSpritesLoop
|
|
ld a, 25
|
|
.done
|
|
ld [wTownMapSpriteBlinkingCounter], a
|
|
jp DelayFrame
|