pokecrystal/engine/link.asm

4118 lines
55 KiB
NASM
Executable File

LinkCommunications: ; 28000
call ClearBGPalettes
ld c, 80
call DelayFrames
call ClearScreen
call ClearSprites
call UpdateSprites
xor a
ld [hSCX], a
ld [hSCY], a
ld c, 80
call DelayFrames
call ClearScreen
call UpdateSprites
call LoadStandardFont
call LoadFontsBattleExtra
callba Function16d69a
call Function3200
hlcoord 3, 8
ld b, $2
ld c, $c
ld d, h
ld e, l
callba Function4d35b
hlcoord 4, 10
ld de, String28419
call PlaceString
call Function28eff
call Function3200
ld hl, wcf5d
xor a
ld [hli], a
ld [hl], $50
ld a, [wLinkMode]
cp LINK_TIMECAPSULE
jp nz, Function28177
Function2805d: ; 2805d
call Function28426
call Function28499
call Function28434
xor a
ld [wcf56], a
call Function87d
ld a, [hLinkPlayerNumber]
cp $2
jr nz, .asm_28091
ld c, $3
call DelayFrames
xor a
ld [hSerialSend], a
ld a, $1
ld [rSC], a
ld a, $81
ld [rSC], a
call DelayFrame
xor a
ld [hSerialSend], a
ld a, $1
ld [rSC], a
ld a, $81
ld [rSC], a
.asm_28091
ld de, MUSIC_NONE
call PlayMusic
ld c, $3
call DelayFrames
xor a
ld [rIF], a
ld a, $8
ld [rIE], a
ld hl, wd1f3
ld de, EnemyMonSpecies
ld bc, $11
call Function75f
ld a, $fe
ld [de], a
ld hl, OverworldMap
ld de, wd26b
ld bc, $1a8
call Function75f
ld a, $fe
ld [de], a
ld hl, wc608
ld de, wc6d0
ld bc, $c8
call Function75f
xor a
ld [rIF], a
ld a, $1d
ld [rIE], a
call Function287ab
ld hl, wd26b
call Function287ca
push hl
ld bc, NAME_LENGTH
add hl, bc
ld a, [hl]
pop hl
and a
jp z, Function28b22
cp $7
jp nc, Function28b22
ld de, OverworldMap
ld bc, $1a2
call Function2879e
ld de, wc6d0
ld hl, wc813
ld c, $2
.asm_280fe
ld a, [de]
inc de
and a
jr z, .asm_280fe
cp $fd
jr z, .asm_280fe
cp $fe
jr z, .asm_280fe
cp $ff
jr z, .asm_2811d
push hl
push bc
ld b, $0
dec a
ld c, a
add hl, bc
ld a, $fe
ld [hl], a
pop bc
pop hl
jr .asm_280fe
.asm_2811d
ld hl, wc90f
dec c
jr nz, .asm_280fe
ld hl, OverworldMap
ld de, wd26b
ld bc, NAME_LENGTH
call CopyBytes
ld de, OTPartyCount
ld a, [hli]
ld [de], a
inc de
.asm_28135
ld a, [hli]
cp $ff
jr z, .asm_2814e
ld [wd265], a
push hl
push de
callab ConvertMon_1to2
pop de
pop hl
ld a, [wd265]
ld [de], a
inc de
jr .asm_28135
.asm_2814e
ld [de], a
ld hl, wc813
call Function2868a
ld a, OTPartyMonOT % $100
ld [wd102], a
ld a, OTPartyMonOT / $100
ld [wd103], a
ld de, MUSIC_NONE
call PlayMusic
ld a, [hLinkPlayerNumber]
cp $2
ld c, 66
call z, DelayFrames
ld de, MUSIC_ROUTE_30
call PlayMusic
jp Function287e3
; 28177
Function28177: ; 28177
call Function28426
call Function28595
call Function28434
call Function29dba
ld a, [ScriptVar]
and a
jp z, Function283b2
ld a, [hLinkPlayerNumber]
cp $2
jr nz, .asm_281ae
ld c, $3
call DelayFrames
xor a
ld [hSerialSend], a
ld a, $1
ld [rSC], a
ld a, $81
ld [rSC], a
call DelayFrame
xor a
ld [hSerialSend], a
ld a, $1
ld [rSC], a
ld a, $81
ld [rSC], a
.asm_281ae
ld de, MUSIC_NONE
call PlayMusic
ld c, $3
call DelayFrames
xor a
ld [rIF], a
ld a, $8
ld [rIE], a
ld hl, wd1f3
ld de, EnemyMonSpecies
ld bc, $11
call Function75f
ld a, $fe
ld [de], a
ld hl, OverworldMap
ld de, wd26b
ld bc, $1c2
call Function75f
ld a, $fe
ld [de], a
ld hl, wc608
ld de, wc6d0
ld bc, $c8
call Function75f
ld a, [wLinkMode]
cp LINK_TRADECENTER
jr nz, .asm_281fd
ld hl, wc9f4
ld de, wcb84
ld bc, $186
call Function283f2
.asm_281fd
xor a
ld [rIF], a
ld a, $1d
ld [rIE], a
ld de, MUSIC_NONE
call PlayMusic
call Function287ab
ld hl, wd26b
call Function287ca
ld de, OverworldMap
ld bc, $1b9
call Function2879e
ld de, wc6d0
ld hl, wc813
ld c, $2
.asm_28224
ld a, [de]
inc de
and a
jr z, .asm_28224
cp $fd
jr z, .asm_28224
cp $fe
jr z, .asm_28224
cp $ff
jr z, .asm_28243
push hl
push bc
ld b, $0
dec a
ld c, a
add hl, bc
ld a, $fe
ld [hl], a
pop bc
pop hl
jr .asm_28224
.asm_28243
ld hl, wc90f
dec c
jr nz, .asm_28224
ld a, [wLinkMode]
cp LINK_TRADECENTER
jp nz, .asm_282fe
ld hl, wcb84
.asm_28254
ld a, [hli]
cp $20
jr nz, .asm_28254
.asm_28259
ld a, [hli]
cp $fe
jr z, .asm_28259
cp $20
jr z, .asm_28259
dec hl
ld de, wcb84
ld bc, $190
call CopyBytes
ld hl, wcb84
ld bc, $c6
.asm_28272
ld a, [hl]
cp $21
jr nz, .asm_28279
ld [hl], $fe
.asm_28279
inc hl
dec bc
ld a, b
or c
jr nz, .asm_28272
ld de, wcc9e
.asm_28282
ld a, [de]
inc de
cp $ff
jr z, .asm_28294
ld hl, wcc4a
dec a
ld b, $0
ld c, a
add hl, bc
ld [hl], $fe
jr .asm_28282
.asm_28294
ld hl, wcb84
ld de, wc9f4
ld b, $6
.asm_2829c
push bc
ld bc, $21
call CopyBytes
ld a, $e
add e
ld e, a
ld a, $0
adc d
ld d, a
pop bc
dec b
jr nz, .asm_2829c
ld de, wc9f4
ld b, $6
.asm_282b4
push bc
ld a, $21
add e
ld e, a
ld a, $0
adc d
ld d, a
ld bc, $e
call CopyBytes
pop bc
dec b
jr nz, .asm_282b4
ld b, $6
ld de, wc9f4
.asm_282cc
push bc
push de
callba Function1de5c8
ld a, c
or a
jr z, .asm_282ee
sub $3
jr nc, .asm_282e4
callba Function1df203
jr .asm_282ee
.asm_282e4
cp $2
jr nc, .asm_282ee
callba Function1df220
.asm_282ee
pop de
ld hl, $2f
add hl, de
ld d, h
ld e, l
pop bc
dec b
jr nz, .asm_282cc
ld de, wcb0e
xor a
ld [de], a
.asm_282fe
ld hl, OverworldMap
ld de, wd26b
ld bc, NAME_LENGTH
call CopyBytes
ld de, OTPartyCount
ld bc, 8
call CopyBytes
ld de, wd276
ld bc, 2
call CopyBytes
ld de, OTPartyMon1Species
ld bc, $1a4
call CopyBytes
ld a, OTPartyMonOT % $100
ld [wd102], a
ld a, OTPartyMonOT / $100
ld [wd103], a
ld de, MUSIC_NONE
call PlayMusic
ld a, [hLinkPlayerNumber]
cp $2
ld c, 66
call z, DelayFrames
ld a, [wLinkMode]
cp LINK_COLOSSEUM
jr nz, .asm_283a9
ld a, CAL
ld [OtherTrainerClass], a
call ClearScreen
callba Function4d354
ld hl, Options
ld a, [hl]
push af
and $20
or $3
ld [hl], a
ld hl, wd26b
ld de, OTName
ld bc, NAME_LENGTH
call CopyBytes
call ReturnToMapFromSubmenu
ld a, [wc2d7]
push af
ld a, $1
ld [wc2d7], a
ld a, [rIE]
push af
ld a, [rIF]
push af
xor a
ld [rIF], a
ld a, [rIE]
set 1, a
ld [rIE], a
pop af
ld [rIF], a
predef StartBattle
ld a, [rIF]
ld h, a
xor a
ld [rIF], a
pop af
ld [rIE], a
ld a, h
ld [rIF], a
pop af
ld [wc2d7], a
pop af
ld [Options], a
callba LoadPokemonData
jp Function28b22
.asm_283a9
ld de, MUSIC_ROUTE_30
call PlayMusic
jp Function287e3
; 283b2
Function283b2: ; 283b2
ld de, UnknownText_0x283ed
ld b, $a
.asm_283b7
call DelayFrame
call Function908
dec b
jr nz, .asm_283b7
xor a
ld [hld], a
ld [hl], a
ld [hVBlank], a
push de
hlcoord 0, 12
ld b, $4
ld c, $12
push de
ld d, h
ld e, l
callba Function4d35b
pop de
pop hl
bccoord 1, 14
call PlaceWholeStringInBoxAtOnce
call FadeToWhite
call ClearScreen
ld b, $8
call GetSGBLayout
call Function3200
ret
; 283ed
UnknownText_0x283ed: ; 0x283ed
; Too much time has elapsed. Please try again.
text_jump UnknownText_0x1c4183
db "@"
; 0x283f2
Function283f2: ; 283f2
ld a, $1
ld [hFFCC], a
.asm_283f6
ld a, [hl]
ld [hSerialSend], a
call Function78a
push bc
ld b, a
inc hl
ld a, $30
.asm_28401
dec a
jr nz, .asm_28401
ld a, [hFFCC]
and a
ld a, b
pop bc
jr z, .asm_28411
dec hl
xor a
ld [hFFCC], a
jr .asm_283f6
.asm_28411
ld [de], a
inc de
dec bc
ld a, b
or c
jr nz, .asm_283f6
ret
; 28419
String28419: ; 28419
db "PLEASE WAIT!@"
; 28426
Function28426: ; 28426
ld hl, OverworldMap
lb bc, 5, SCREEN_WIDTH
.asm_2842c
xor a
ld [hli], a
dec bc
ld a, b
or c
jr nz, .asm_2842c
ret
; 28434
Function28434: ; 28434
ld hl, wd1f3
ld a, $fd
ld b, $7
.asm_2843b
ld [hli], a
dec b
jr nz, .asm_2843b
ld b, $a
.asm_28441
call Random
cp $fd
jr nc, .asm_28441
ld [hli], a
dec b
jr nz, .asm_28441
ld hl, wc608
ld a, $fd
rept 3
ld [hli], a
endr
ld b, $c8
xor a
.asm_28457
ld [hli], a
dec b
jr nz, .asm_28457
ld hl, wc818
ld de, wc608 + 10
ld bc, 0
.asm_28464
inc c
ld a, c
cp $fd
jr z, .asm_2848c
ld a, b
dec a
jr nz, .asm_2847f
push bc
ld a, [wLinkMode]
cp LINK_TIMECAPSULE
ld b, $d
jr z, .asm_2847a
ld b, $27
.asm_2847a
ld a, c
cp b
pop bc
jr z, .asm_28495
.asm_2847f
inc hl
ld a, [hl]
cp $fe
jr nz, .asm_28464
ld a, c
ld [de], a
inc de
ld [hl], $ff
jr .asm_28464
.asm_2848c
ld a, $ff
ld [de], a
inc de
lb bc, 1, 0
jr .asm_28464
.asm_28495
ld a, $ff
ld [de], a
ret
; 28499
Function28499: ; 28499
ld de, OverworldMap
ld a, $fd
ld b, $6
.asm_284a0
ld [de], a
inc de
dec b
jr nz, .asm_284a0
ld hl, PlayerName
ld bc, NAME_LENGTH
call CopyBytes
push de
ld hl, PartyCount
ld a, [hli]
ld [de], a
inc de
.asm_284b5
ld a, [hli]
cp $ff
jr z, .asm_284ce
ld [wd265], a
push hl
push de
callab ConvertMon_2to1
pop de
pop hl
ld a, [wd265]
ld [de], a
inc de
jr .asm_284b5
.asm_284ce
ld [de], a
pop de
ld hl, $8
add hl, de
ld d, h
ld e, l
ld hl, PartyMon1Species
ld c, $6
.asm_284db
push bc
call Function284f6
ld bc, PARTYMON_STRUCT_LENGTH
add hl, bc
pop bc
dec c
jr nz, .asm_284db
ld hl, PartyMonOT
call .asm_284f0
ld hl, PartyMonNicknames
.asm_284f0
ld bc, $42
jp CopyBytes
; 284f6
Function284f6: ; 284f6
ld b, h
ld c, l
push de
push bc
ld a, [hl]
ld [wd265], a
callab ConvertMon_2to1
pop bc
pop de
ld a, [wd265]
ld [de], a
inc de
ld hl, $22
add hl, bc
ld a, [hli]
ld [de], a
inc de
ld a, [hl]
ld [de], a
inc de
xor a
ld [de], a
inc de
ld hl, $20
add hl, bc
ld a, [hl]
ld [de], a
inc de
ld a, [bc]
cp $51
jr z, .asm_28528
cp $52
jr nz, .asm_28530
.asm_28528
ld a, $17
ld [de], a
inc de
ld [de], a
inc de
jr .asm_28544
.asm_28530
push bc
dec a
ld hl, BaseData + 7 ; type
ld bc, BaseData1 - BaseData0
call AddNTimes
ld bc, 2
ld a, BANK(BaseData)
call FarCopyBytes
pop bc
.asm_28544
push bc
ld hl, $1
add hl, bc
ld bc, $1a
call CopyBytes
pop bc
ld hl, $1f
add hl, bc
ld a, [hl]
ld [de], a
ld [CurPartyLevel], a
inc de
push bc
ld hl, $24
add hl, bc
ld bc, 8
call CopyBytes
pop bc
push de
push bc
ld a, [bc]
dec a
push bc
ld b, 0
ld c, a
ld hl, KantoMonSpecials
add hl, bc
ld a, BANK(KantoMonSpecials)
call GetFarByte
ld [BaseSpecialAttack], a
pop bc
ld hl, $a
add hl, bc
ld c, $5
ld b, $1
predef CalcPkmnStatC
pop bc
pop de
ld a, [$ffb5]
ld [de], a
inc de
ld a, [$ffb6]
ld [de], a
inc de
ld h, b
ld l, c
ret
; 28595
Function28595: ; 28595
ld de, OverworldMap
ld a, $fd
ld b, $6
.loop1
ld [de], a
inc de
dec b
jr nz, .loop1
ld hl, PlayerName
ld bc, NAME_LENGTH
call CopyBytes
ld hl, PartyCount
ld bc, 8
call CopyBytes
ld hl, PlayerID
ld bc, 2
call CopyBytes
ld hl, PartyMon1Species
ld bc, $120
call CopyBytes
ld hl, PartyMonOT
ld bc, $42
call CopyBytes
ld hl, PartyMonNicknames
ld bc, $42
call CopyBytes
ld a, [wLinkMode]
cp LINK_TRADECENTER
ret nz
ld de, wc9f4
ld a, $20
call Function28682
ld a, BANK(sPartyMail)
call GetSRAMBank
ld hl, sPartyMail
ld b, PARTY_LENGTH
.loop2
push bc
ld bc, $21
call CopyBytes
ld bc, $e
add hl, bc
pop bc
dec b
jr nz, .loop2
ld hl, sPartyMail
ld b, PARTY_LENGTH
.loop3
push bc
ld bc, $21
add hl, bc
ld bc, $e
call CopyBytes
pop bc
dec b
jr nz, .loop3
ld b, PARTY_LENGTH
ld de, sPartyMail
ld hl, wc9f9
.loop4
push bc
push hl
push de
push hl
callba Function1de5c8
pop de
ld a, c
or a
jr z, .next
sub $3
jr nc, .skip
callba Function1df1e6
jr .next
.skip
cp $2
jr nc, .next
callba Function1df220
.next
pop de
ld hl, MAIL_STRUCT_LENGTH
add hl, de
ld d, h
ld e, l
pop hl
ld bc, $21
add hl, bc
pop bc
dec b
jr nz, .loop4
call CloseSRAM
ld hl, wc9f9
ld bc, $c6
.loop5
ld a, [hl]
cp $fe
jr nz, .skip2
ld [hl], $21
.skip2
inc hl
dec bc
ld a, b
or c
jr nz, .loop5
ld hl, wcabf
ld de, wcb13
ld b, $54
ld c, $0
.loop6
inc c
ld a, [hl]
cp $fe
jr nz, .skip3
ld [hl], $ff
ld a, c
ld [de], a
inc de
.skip3
inc hl
dec b
jr nz, .loop6
ld a, $ff
ld [de], a
ret
; 28682
Function28682: ; 28682
ld c, $5
.loop
ld [de], a
inc de
dec c
jr nz, .loop
ret
; 2868a
Function2868a: ; 2868a
push hl
ld d, h
ld e, l
ld bc, wcbea
ld hl, wcbe8
ld a, c
ld [hli], a
ld [hl], b
ld hl, OTPartyMon1Species
ld c, $6
.loop
push bc
call Function286ba
pop bc
dec c
jr nz, .loop
pop hl
lb bc, 1, 8
add hl, bc
ld de, OTPartyMonOT
ld bc, $42
call CopyBytes
ld de, OTPartyMonNicknames
ld bc, $42
jp CopyBytes
; 286ba
Function286ba: ; 286ba
ld b, h
ld c, l
ld a, [de]
inc de
push bc
push de
ld [wd265], a
callab ConvertMon_1to2
pop de
pop bc
ld a, [wd265]
ld [bc], a
ld [CurSpecies], a
ld hl, $22
add hl, bc
ld a, [de]
inc de
ld [hli], a
ld a, [de]
inc de
ld [hl], a
inc de
ld hl, $20
add hl, bc
ld a, [de]
inc de
ld [hl], a
ld hl, wcbe8
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [de]
ld [hli], a
inc de
ld a, [de]
ld [hli], a
inc de
ld a, l
ld [wcbe8], a
ld a, h
ld [wcbe9], a
push bc
ld hl, $1
add hl, bc
push hl
ld h, d
ld l, e
pop de
push bc
ld a, [hli]
ld b, a
call Function28771
ld a, b
ld [de], a
inc de
pop bc
ld bc, $19
call CopyBytes
pop bc
ld d, h
ld e, l
ld hl, $1f
add hl, bc
ld a, [de]
inc de
ld [hl], a
ld [CurPartyLevel], a
push bc
ld hl, $24
add hl, bc
push hl
ld h, d
ld l, e
pop de
ld bc, 8
call CopyBytes
pop bc
call GetBaseData
push de
push bc
ld d, h
ld e, l
ld hl, $a
add hl, bc
ld c, $5
ld b, $1
predef CalcPkmnStatC
pop bc
pop hl
ld a, [$ffb5]
ld [hli], a
ld a, [$ffb6]
ld [hli], a
push hl
push bc
ld hl, $a
add hl, bc
ld c, $6
ld b, $1
predef CalcPkmnStatC
pop bc
pop hl
ld a, [$ffb5]
ld [hli], a
ld a, [$ffb6]
ld [hli], a
push hl
ld hl, $1b
add hl, bc
ld a, $46
ld [hli], a
xor a
rept 2
ld [hli], a
endr
ld [hl], a
pop hl
rept 2
inc de
endr
ret
; 28771
Function28771: ; 28771
ld a, b
and a
ret z
push hl
ld hl, .TimeCapsuleAlt
.loop
ld a, [hli]
and a
jr z, .end
cp b
jr z, .found
inc hl
jr .loop
.found
ld b, [hl]
.end
pop hl
ret
.TimeCapsuleAlt ; 28785
; Pokémon traded from RBY do not have held items, so GSC usually interprets the
; catch rate as an item. However, if the catch rate appears in this table, the
; item associated with the table entry is used instead.
db ITEM_19, LEFTOVERS
db ITEM_2D, BITTER_BERRY
db ITEM_32, GOLD_BERRY
db ITEM_5A, BERRY
db ITEM_64, BERRY
db ITEM_78, BERRY
db ITEM_87, BERRY
db ITEM_BE, BERRY
db ITEM_C3, BERRY
db ITEM_DC, BERRY
db HM_08, BERRY
db $ff, BERRY
db $00
; 2879e
Function2879e: ; 2879e
.asm_2879e
ld a, [hli]
cp $fe
jr z, .asm_2879e
ld [de], a
inc de
dec bc
ld a, b
or c
jr nz, .asm_2879e
ret
; 287ab
Function287ab: ; 287ab
ld a, [hLinkPlayerNumber]
cp $2
ret z
ld hl, EnemyMonSpecies
call Function287d8
ld de, LinkBattleRNs
ld c, $a
.asm_287bb
ld a, [hli]
cp $fe
jr z, .asm_287bb
cp $fd
jr z, .asm_287bb
ld [de], a
inc de
dec c
jr nz, .asm_287bb
ret
; 287ca
Function287ca: ; 287ca
.asm_287ca
ld a, [hli]
and a
jr z, .asm_287ca
cp $fd
jr z, .asm_287ca
cp $fe
jr z, .asm_287ca
dec hl
ret
; 287d8
Function287d8: ; 287d8
.asm_287d8
ld a, [hli]
cp $fd
jr z, .asm_287d8
cp $fe
jr z, .asm_287d8
dec hl
ret
; 287e3
Function287e3: ; 287e3
call ClearScreen
call Function28ef8
callba Function16d673
xor a
ld hl, wcf51
rept 3
ld [hli], a
endr
ld [hl], a
ld a, $1
ld [MenuSelection2], a
inc a
ld [wcf56], a
jp Function2888b
; 28803
Function28803: ; 28803
ld a, $1
ld [MonType], a
ld a, $c1
ld [wcfa8], a
ld a, [OTPartyCount]
ld [wcfa3], a
ld a, $1
ld [wcfa4], a
ld a, $9
ld [wcfa1], a
ld a, $6
ld [wcfa2], a
ld a, $1
ld [wcfaa], a
ld a, $10
ld [wcfa7], a
ld a, $20
ld [wcfa5], a
xor a
ld [wcfa6], a
Function28835: ; 28835
callba Function16d70c
ld a, d
and a
jp z, Function2891c
bit 0, a
jr z, .asm_2885b
ld a, $1
ld [wd263], a
callab Function50db9
ld hl, OTPartyMon1Species
callba Function4d319
jp Function2891c
.asm_2885b
bit 6, a
jr z, .asm_28883
ld a, [MenuSelection2]
ld b, a
ld a, [OTPartyCount]
cp b
jp nz, Function2891c
xor a
ld [MonType], a
call Function1bf7
push hl
push bc
ld bc, NAME_LENGTH
add hl, bc
ld [hl], $7f
pop bc
pop hl
ld a, [PartyCount]
ld [MenuSelection2], a
jr Function2888b
.asm_28883
bit 7, a
jp z, Function2891c
jp Function28ac9
; 2888b
Function2888b: ; 2888b
callba Function49856
xor a
ld [MonType], a
ld a, $c1
ld [wcfa8], a
ld a, [PartyCount]
ld [wcfa3], a
ld a, $1
ld [wcfa4], a
ld a, $1
ld [wcfa1], a
ld a, $6
ld [wcfa2], a
ld a, $1
ld [wcfaa], a
ld a, $10
ld [wcfa7], a
ld a, $20
ld [wcfa5], a
xor a
ld [wcfa6], a
call Function3200
Function288c5: ; 288c5
callba Function16d70c
ld a, d
and a
jr nz, .asm_288d2
jp Function2891c
.asm_288d2
bit 0, a
jr z, .asm_288d9
jp Function28926
.asm_288d9
bit 7, a
jr z, .asm_288fe
ld a, [MenuSelection2]
dec a
jp nz, Function2891c
ld a, $1
ld [MonType], a
call Function1bf7
push hl
push bc
ld bc, NAME_LENGTH
add hl, bc
ld [hl], $7f
pop bc
pop hl
ld a, $1
ld [MenuSelection2], a
jp Function28803
.asm_288fe
bit 6, a
jr z, Function2891c
ld a, [MenuSelection2]
ld b, a
ld a, [PartyCount]
cp b
jr nz, Function2891c
call Function1bf7
push hl
push bc
ld bc, NAME_LENGTH
add hl, bc
ld [hl], $7f
pop bc
pop hl
jp Function28ade
; 2891c
Function2891c: ; 2891c
ld a, [MonType]
and a
jp z, Function288c5
jp Function28835
; 28926
Function28926: ; 28926
call LoadTileMapToTempTileMap
ld a, [MenuSelection2]
push af
hlcoord 0, 15
ld b, $1
ld c, $12
call Function28eef
hlcoord 2, 16
ld de, String28ab4
call PlaceString
callba Function4d354
.asm_28946
ld a, $7f
ldcoord_a 11, 16
ld a, $13
ld [wcfa8], a
ld a, $1
ld [wcfa3], a
ld a, $1
ld [wcfa4], a
ld a, $10
ld [wcfa1], a
ld a, $1
ld [wcfa2], a
ld a, $1
ld [MenuSelection2], a
ld [wcfaa], a
ld a, $20
ld [wcfa7], a
xor a
ld [wcfa5], a
ld [wcfa6], a
call Function1bd3
bit 4, a
jr nz, .asm_2898d
bit 1, a
jr z, .asm_289cd
.asm_28983
pop af
ld [MenuSelection2], a
call Call_LoadTempTileMapToTileMap
jp Function2888b
.asm_2898d
ld a, $7f
ldcoord_a 1, 16
ld a, $23
ld [wcfa8], a
ld a, $1
ld [wcfa3], a
ld a, $1
ld [wcfa4], a
ld a, $10
ld [wcfa1], a
ld a, $b
ld [wcfa2], a
ld a, $1
ld [MenuSelection2], a
ld [wcfaa], a
ld a, $20
ld [wcfa7], a
xor a
ld [wcfa5], a
ld [wcfa6], a
call Function1bd3
bit 5, a
jp nz, .asm_28946
bit 1, a
jr nz, .asm_28983
jr .asm_289fe
.asm_289cd
pop af
ld [MenuSelection2], a
ld a, $4
ld [wd263], a
callab Function50db9
callba Function4d319
call Call_LoadTempTileMapToTileMap
hlcoord 6, 1
lb bc, 6, 1
ld a, " "
call Function28b77
hlcoord 17, 1
lb bc, 6, 1
ld a, " "
call Function28b77
jp Function2888b
.asm_289fe
call Function1bee
pop af
ld [MenuSelection2], a
dec a
ld [wd002], a
ld [wcf56], a
callba Function16d6ce
ld a, [wcf51]
cp $f
jp z, Function287e3
ld [wd003], a
call Function28b68
ld c, $64
call DelayFrames
callba Functionfb57e
jr c, .asm_28a58
callba Functionfb5dd
jp nc, Function28b87
xor a
ld [wcf57], a
ld [wcf52], a
hlcoord 0, 12
ld b, $4
ld c, $12
call Function28eef
callba Function4d354
ld hl, UnknownText_0x28aaf
bccoord 1, 14
call PlaceWholeStringInBoxAtOnce
jr .asm_28a89
.asm_28a58
xor a
ld [wcf57], a
ld [wcf52], a
ld a, [wd003]
ld hl, OTPartySpecies
ld c, a
ld b, $0
add hl, bc
ld a, [hl]
ld [wd265], a
call GetPokemonName
hlcoord 0, 12
ld b, $4
ld c, $12
call Function28eef
callba Function4d354
ld hl, UnknownText_0x28ac4
bccoord 1, 14
call PlaceWholeStringInBoxAtOnce
.asm_28a89
hlcoord 0, 12
ld b, $4
ld c, $12
call Function28eef
hlcoord 1, 14
ld de, String28ece
call PlaceString
ld a, $1
ld [wcf56], a
callba Function16d6ce
ld c, $64
call DelayFrames
jp Function287e3
; 28aaf
UnknownText_0x28aaf: ; 0x28aaf
; If you trade that #MON, you won't be able to battle.
text_jump UnknownText_0x1c41b1
db "@"
; 0x28ab4
String28ab4: ; 28ab4
db "STATS TRADE@"
UnknownText_0x28ac4: ; 0x28ac4
; Your friend's @ appears to be abnormal!
text_jump UnknownText_0x1c41e6
db "@"
; 0x28ac9
Function28ac9: ; 28ac9
ld a, [MenuSelection2]
cp $1
jp nz, Function2891c
call Function1bf7
push hl
push bc
ld bc, NAME_LENGTH
add hl, bc
ld [hl], $7f
pop bc
pop hl
Function28ade: ; 28ade
.asm_28ade
ld a, $ed
ldcoord_a 9, 17
.asm_28ae3
call JoyTextDelay
ld a, [hJoyLast]
and a
jr z, .asm_28ae3
bit 0, a
jr nz, .asm_28b0b
push af
ld a, " "
ldcoord_a 9, 17
pop af
bit 6, a
jr z, .asm_28b03
ld a, [OTPartyCount]
ld [MenuSelection2], a
jp Function28803
.asm_28b03
ld a, $1
ld [MenuSelection2], a
jp Function2888b
.asm_28b0b
ld a, $ec
ldcoord_a 9, 17
ld a, $f
ld [wcf56], a
callba Function16d6ce
ld a, [wcf51]
cp $f
jr nz, .asm_28ade
Function28b22: ; 28b22
call FadeToWhite
call ClearScreen
ld b, $8
call GetSGBLayout
call Function3200
xor a
ld [wcfbb], a
xor a
ld [rSB], a
ld [hSerialSend], a
ld a, $1
ld [rSC], a
ld a, $81
ld [rSC], a
ret
; 28b42
Function28b42: ; 28b42
hlcoord 0, 16
ld a, "┘"
ld bc, 2 * SCREEN_WIDTH
call ByteFill
hlcoord 1, 16
ld a, " "
ld bc, SCREEN_WIDTH - 2
call ByteFill
hlcoord 2, 16
ld de, String_28b61
jp PlaceString
; 28b61
String_28b61: ; 28b61
db "CANCEL@"
; 28b68
Function28b68: ; 28b68
ld a, [wcf51]
hlcoord 6, 9
ld bc, SCREEN_WIDTH
call AddNTimes
ld [hl], $ec
ret
; 28b77
Function28b77: ; 28b77
.asm_28b77
push bc
push hl
.asm_28b79
ld [hli], a
dec c
jr nz, .asm_28b79
pop hl
ld bc, SCREEN_WIDTH
add hl, bc
pop bc
dec b
jr nz, .asm_28b77
ret
; 28b87
Function28b87: ; 28b87
xor a
ld [wcf57], a
ld [wcf52], a
hlcoord 0, 12
ld b, $4
ld c, $12
call Function28eef
callba Function4d354
ld a, [wd002]
ld hl, PartySpecies
ld c, a
ld b, $0
add hl, bc
ld a, [hl]
ld [wd265], a
call GetPokemonName
ld hl, StringBuffer1
ld de, wd004
ld bc, PKMN_NAME_LENGTH
call CopyBytes
ld a, [wd003]
ld hl, OTPartySpecies
ld c, a
ld b, $0
add hl, bc
ld a, [hl]
ld [wd265], a
call GetPokemonName
ld hl, UnknownText_0x28eb8
bccoord 1, 14
call PlaceWholeStringInBoxAtOnce
call LoadStandardMenuDataHeader
hlcoord 10, 7
ld b, $3
ld c, $7
call Function28eef
ld de, String28eab
hlcoord 12, 8
call PlaceString
ld a, $8
ld [wcfa1], a
ld a, $b
ld [wcfa2], a
ld a, $1
ld [wcfa4], a
ld a, $2
ld [wcfa3], a
xor a
ld [wcfa5], a
ld [wcfa6], a
ld a, $20
ld [wcfa7], a
ld a, $3
ld [wcfa8], a
ld a, $1
ld [MenuSelection2], a
ld [wcfaa], a
callba Function4d354
call Function1bd3
push af
call Call_ExitMenu
call Function3200
pop af
bit 1, a
jr nz, .asm_28c33
ld a, [MenuSelection2]
dec a
jr z, .asm_28c54
.asm_28c33
ld a, $1
ld [wcf56], a
hlcoord 0, 12
ld b, 4
ld c, 18
call Function28eef
hlcoord 1, 14
ld de, String28ece
call PlaceString
callba Function16d6ce
jp Function28ea3
.asm_28c54
ld a, $2
ld [wcf56], a
callba Function16d6ce
ld a, [wcf51]
dec a
jr nz, .asm_28c7b
hlcoord 0, 12
ld b, 4
ld c, 18
call Function28eef
hlcoord 1, 14
ld de, String28ece
call PlaceString
jp Function28ea3
.asm_28c7b
ld hl, sPartyMail
ld a, [wd002]
ld bc, MAIL_STRUCT_LENGTH
call AddNTimes
ld a, BANK(sPartyMail)
call GetSRAMBank
ld d, h
ld e, l
ld bc, MAIL_STRUCT_LENGTH
add hl, bc
ld a, [wd002]
ld c, a
.asm_28c96
inc c
ld a, c
cp $6
jr z, .asm_28ca6
push bc
ld bc, MAIL_STRUCT_LENGTH
call CopyBytes
pop bc
jr .asm_28c96
.asm_28ca6
ld hl, sPartyMail
ld a, [PartyCount]
dec a
ld bc, MAIL_STRUCT_LENGTH
call AddNTimes
push hl
ld hl, wc9f4
ld a, [wd003]
ld bc, MAIL_STRUCT_LENGTH
call AddNTimes
pop de
ld bc, MAIL_STRUCT_LENGTH
call CopyBytes
call CloseSRAM
ld hl, PlayerName
ld de, wc6e7
ld bc, NAME_LENGTH
call CopyBytes
ld a, [wd002]
ld hl, PartySpecies
ld b, $0
ld c, a
add hl, bc
ld a, [hl]
ld [wc6d0], a
push af
ld a, [wd002]
ld hl, PartyMonOT
call SkipNames
ld de, wc6f2
ld bc, NAME_LENGTH
call CopyBytes
ld hl, PartyMon1ID
ld a, [wd002]
call GetPartyLocation
ld a, [hli]
ld [PlayerScreens], a
ld a, [hl]
ld [EnemyScreens], a
ld hl, PartyMon1DVs
ld a, [wd002]
call GetPartyLocation
ld a, [hli]
ld [wc6fd], a
ld a, [hl]
ld [wPlayerMinimized], a
ld a, [wd002]
ld hl, PartyMon1Species
call GetPartyLocation
ld b, h
ld c, l
callba GetCaughtGender
ld a, c
ld [wc701], a
ld hl, wd26b
ld de, wc719
ld bc, NAME_LENGTH
call CopyBytes
ld a, [wd003]
ld hl, OTPartySpecies
ld b, $0
ld c, a
add hl, bc
ld a, [hl]
ld [wc702], a
ld a, [wd003]
ld hl, OTPartyMonOT
call SkipNames
ld de, wc724
ld bc, NAME_LENGTH
call CopyBytes
ld hl, OTPartyMon1ID
ld a, [wd003]
call GetPartyLocation
ld a, [hli]
ld [wEnemyWrapCount], a
ld a, [hl]
ld [wPlayerCharging], a
ld hl, OTPartyMon1DVs
ld a, [wd003]
call GetPartyLocation
ld a, [hli]
ld [wEnemyTrappingMove], a
ld a, [hl]
ld [wPlayerWrapCount], a
ld a, [wd003]
ld hl, OTPartyMon1Species
call GetPartyLocation
ld b, h
ld c, l
callba GetCaughtGender
ld a, c
ld [wEnemyCharging], a
ld a, [wd002]
ld [CurPartyMon], a
ld hl, PartySpecies
ld b, $0
ld c, a
add hl, bc
ld a, [hl]
ld [wd002], a
xor a
ld [wPokemonWithdrawDepositParameter], a
callab Functione039
ld a, [PartyCount]
dec a
ld [CurPartyMon], a
ld a, $1
ld [wd1e9], a
ld a, [wd003]
push af
ld hl, OTPartySpecies
ld b, $0
ld c, a
add hl, bc
ld a, [hl]
ld [wd003], a
ld c, 100
call DelayFrames
call ClearTileMap
call LoadFontsBattleExtra
ld b, $8
call GetSGBLayout
ld a, [hLinkPlayerNumber]
cp $1
jr z, .asm_28de4
predef Function28f24
jr .asm_28de9
.asm_28de4
predef Function28f63
.asm_28de9
pop af
ld c, a
ld [CurPartyMon], a
ld hl, OTPartySpecies
ld d, $0
ld e, a
add hl, de
ld a, [hl]
ld [CurPartySpecies], a
ld hl, OTPartyMon1Species
ld a, c
call GetPartyLocation
ld de, TempMonSpecies
ld bc, PARTYMON_STRUCT_LENGTH
call CopyBytes
predef AddTempmonToParty
ld a, [PartyCount]
dec a
ld [CurPartyMon], a
callab Function421d8
call ClearScreen
call Function28ef8
call Function28eff
callba Function4d354
ld b, $1
pop af
ld c, a
cp MEW
jr z, .asm_28e49
ld a, [CurPartySpecies]
cp MEW
jr z, .asm_28e49
ld b, $2
ld a, c
cp CELEBI
jr z, .asm_28e49
ld a, [CurPartySpecies]
cp CELEBI
jr z, .asm_28e49
ld b, $0
.asm_28e49
ld a, b
ld [wcf56], a
push bc
call Function862
pop bc
ld a, [wLinkMode]
cp LINK_TIMECAPSULE
jr z, .asm_28e63
ld a, b
and a
jr z, .asm_28e63
ld a, [wcf52]
cp b
jr nz, .asm_28e49
.asm_28e63
callba Function14a58
callba MobileFn_1060af
callba BackupMobileEventIndex
ld c, 40
call DelayFrames
hlcoord 0, 12
ld b, 4
ld c, 18
call Function28eef
hlcoord 1, 14
ld de, String28ebd
call PlaceString
callba Function4d354
ld c, 50
call DelayFrames
ld a, [wLinkMode]
cp LINK_TIMECAPSULE
jp z, Function2805d
jp Function28177
; 28ea3
Function28ea3: ; 28ea3
ld c, 100
call DelayFrames
jp Function287e3
; 28eab
String28eab: ; 28eab
db "TRADE"
next "CANCEL@"
UnknownText_0x28eb8: ; 0x28eb8
; Trade @ for @ ?
text_jump UnknownText_0x1c4212
db "@"
; 0x28ebd
String28ebd: ; 28ebd
db "Trade completed!@"
String28ece: ; 28ece
db "Too bad! The trade"
next "was canceled!@"
Function28eef: ; 28eef
ld d, h
ld e, l
callba Function16d6ca
ret
; 28ef8
Function28ef8: ; 28ef8
callba Function16d696
ret
; 28eff
Function28eff: ; 28eff
callba Function16d6a7
call SetPalettes
ret
; 28f09
Function28f09: ; 28f09
hlcoord 0, 0
ld b, 6
ld c, 18
call Function28eef
hlcoord 0, 8
ld b, 6
ld c, 18
call Function28eef
callba Functionfb60d
ret
; 28f24
Function28f24: ; 28f24
xor a
ld [wcf66], a
ld hl, wc6e7
ld de, wc719
call Function297ff
ld hl, wc6d0
ld de, wc702
call Function29814
ld de, .data_28f3f
jr Function28fa1
.data_28f3f
db $1b
db $1
db $1c
db $21
db $2d
db $27
db $23
db $3
db $25
db $28
db $25
db $1e
db $29
db $6
db $16
db $1f
db $19
db $17
db $22
db $1f
db $2a
db $e
db $3
db $24
db $5
db $25
db $2
db $27
db $25
db $1d
db $2c
db $2e
db $1e
db $18
db $1f
db $2b
Function28f63: ; 28f63
xor a
ld [wcf66], a
ld hl, wc719
ld de, wc6e7
call Function297ff
ld hl, wc702
ld de, wc6d0
call Function29814
ld de, .data_28f7e
jr Function28fa1
.data_28f7e
db $1a
db $17
db $22
db $1f
db $2a
db $6
db $3
db $24
db $5
db $25
db $2
db $27
db $25
db $1d
db $2c
db $2f
db $1e
db $18
db $1f
db $1b
db $1
db $1c
db $22
db $27
db $23
db $3
db $25
db $28
db $25
db $1e
db $29
db $e
db $16
db $1f
db $2b
Function28fa1: ; 28fa1
ld hl, BattleEnded
ld [hl], e
inc hl
ld [hl], d
ld a, [hMapAnims]
push af
xor a
ld [hMapAnims], a
ld hl, VramState
ld a, [hl]
push af
res 0, [hl]
ld hl, Options
ld a, [hl]
push af
set 4, [hl]
call Function28fdb
ld a, [wcf66]
and a
jr nz, .asm_28fca
ld de, MUSIC_EVOLUTION
call PlayMusic2
.asm_28fca
call Function29082
jr nc, .asm_28fca
pop af
ld [Options], a
pop af
ld [VramState], a
pop af
ld [hMapAnims], a
ret
; 28fdb
Function28fdb: ; 28fdb
xor a
ld [wJumptableIndex], a
call ClearBGPalettes
call ClearSprites
call ClearTileMap
call DisableLCD
call LoadFontsBattleExtra
callab Function8cf53
ld a, [hCGB]
and a
jr z, .asm_2900b
ld a, $1
ld [rVBK], a
ld hl, VTiles0
ld bc, sScratch - VTiles0
xor a
call ByteFill
ld a, $0
ld [rVBK], a
.asm_2900b
ld hl, VBGMap0
ld bc, sScratch - VBGMap0
ld a, " "
call ByteFill
ld hl, TradeGameBoyLZ
ld de, VTiles2 tile $31
call Decompress
ld hl, TradeArrowGFX
ld de, VTiles1 tile $6d
ld bc, $10
ld a, BANK(TradeArrowGFX)
call FarCopyBytes
ld hl, TradeArrowGFX + $10
ld de, VTiles1 tile $6e
ld bc, $10
ld a, BANK(TradeArrowGFX)
call FarCopyBytes
xor a
ld [hSCX], a
ld [hSCY], a
ld a, $7
ld [hWX], a
ld a, $90
ld [hWY], a
callba Function4d7fd
call EnableLCD
call Function2982b
ld a, [wc6d0]
ld hl, wc6fd
ld de, VTiles0
call Function29491
ld a, [wc702]
ld hl, wEnemyTrappingMove
ld de, VTiles0 tile $31
call Function29491
ld a, [wc6d0]
ld de, wc6d1
call Function294a9
ld a, [wc702]
ld de, wc703
call Function294a9
call Function297ed
ret
; 29082
Function29082: ; 29082
ld a, [wJumptableIndex]
bit 7, a
jr nz, .asm_2909b
call Function290a0
callab Function8cf69
ld hl, wcf65
inc [hl]
call DelayFrame
and a
ret
.asm_2909b
call LoadStandardFont
scf
ret
; 290a0
Function290a0: ; 290a0
ld a, [wJumptableIndex]
ld e, a
ld d, 0
ld hl, JumpTable290af
rept 2
add hl, de
endr
ld a, [hli]
ld h, [hl]
ld l, a
jp [hl]
; 290af
JumpTable290af: ; 290af
dw Function29114
dw Function2942e
dw Function29461
dw Function29348
dw Function2937e
dw Function29391
dw Function29129
dw Function291af
dw Function291c4
dw Function291d9
dw Function2925d
dw Function29220
dw Function2925d
dw Function29229
dw Function2913c
dw Function2925d
dw Function291e8
dw Function291fd
dw Function29211
dw Function29220
dw Function2925d
dw Function29229
dw Function29701
dw Function2973c
dw Function2975c
dw Function2977f
dw Function297a4
dw Function293a6
dw Function293b6
dw Function293d2
dw Function293de
dw Function293ea
dw Function2940c
dw Function294e7
dw Function294f0
dw Function2961b
dw Function2962c
dw Function29879
dw Function29886
dw Function29649
dw Function29660
dw Function2926d
dw Function29277
dw Function29123
dw Function29487
dw Function294f9
dw Function29502
dw Function2950c
; 2910f
Function2910f: ; 2910f
ld hl, wJumptableIndex
inc [hl]
ret
; 29114
Function29114: ; 29114
ld hl, BattleEnded
ld e, [hl]
inc hl
ld d, [hl]
ld a, [de]
ld [wJumptableIndex], a
inc de
ld [hl], d
dec hl
ld [hl], e
ret
; 29123
Function29123: ; 29123
ld hl, wJumptableIndex
set 7, [hl]
ret
; 29129
Function29129: ; 29129
ld a, $ed
call Function292f6
ld a, [wc74c]
ld [wd265], a
xor a
ld de, $2c58
ld b, $0
jr Function2914e
Function2913c: ; 2913c
ld a, $ee
call Function292f6
ld a, [wc74d]
ld [wd265], a
ld a, $2
lb de, $4c, $94
ld b, $4
Function2914e: ; 2914e
push bc
push de
push bc
push de
push af
call DisableLCD
callab Function8cf53
ld hl, $9874
ld bc, $c
ld a, $60
call ByteFill
pop af
call Function29281
xor a
ld [hSCX], a
ld a, $7
ld [hWX], a
ld a, $70
ld [hWY], a
call EnableLCD
call Function2985a
pop de
ld a, $11
call _InitSpriteAnimStruct
ld hl, $b
add hl, bc
pop bc
ld [hl], b
pop de
ld a, $12
call _InitSpriteAnimStruct
ld hl, $b
add hl, bc
pop bc
ld [hl], b
call WaitBGMap
ld b, $1b
call GetSGBLayout
ld a, $e4
call DmgToCgbBGPals
ld a, $d0
call Functioncf8
call Function2910f
ld a, $5c
ld [wcf64], a
ret
; 291af
Function291af: ; 291af
call Function2981d
ld a, [hSCX]
add $2
ld [hSCX], a
cp $50
ret nz
ld a, $1
call Function29281
call Function2910f
ret
; 291c4
Function291c4: ; 291c4
call Function2981d
ld a, [hSCX]
add $2
ld [hSCX], a
cp $a0
ret nz
ld a, $2
call Function29281
call Function2910f
ret
; 291d9
Function291d9: ; 291d9
call Function2981d
ld a, [hSCX]
add $2
ld [hSCX], a
and a
ret nz
call Function2910f
ret
; 291e8
Function291e8: ; 291e8
call Function2981d
ld a, [hSCX]
sub $2
ld [hSCX], a
cp $b0
ret nz
ld a, $1
call Function29281
call Function2910f
ret
; 291fd
Function291fd: ; 291fd
call Function2981d
ld a, [hSCX]
sub $2
ld [hSCX], a
cp $60
ret nz
xor a
call Function29281
call Function2910f
ret
; 29211
Function29211: ; 29211
call Function2981d
ld a, [hSCX]
sub $2
ld [hSCX], a
and a
ret nz
call Function2910f
ret
; 29220
Function29220: ; 29220
ld a, $80
ld [wcf64], a
call Function2910f
ret
; 29229
Function29229: ; 29229
call ClearBGPalettes
call ClearTileMap
call ClearSprites
call DisableLCD
callab Function8cf53
ld hl, VBGMap0
ld bc, sScratch - VBGMap0
ld a, " "
call ByteFill
xor a
ld [hSCX], a
ld a, $90
ld [hWY], a
call EnableLCD
call Function2982b
call WaitBGMap
call Function297ed
call Function29114
ret
; 2925d
Function2925d: ; 2925d
call Function2981d
ld hl, wcf64
ld a, [hl]
and a
jr z, .asm_29269
dec [hl]
ret
.asm_29269
call Function2910f
ret
; 2926d
Function2926d: ; 2926d
call Function29114
ld de, SFX_GIVE_TRADEMON
call PlaySFX
ret
; 29277
Function29277: ; 29277
call Function29114
ld de, SFX_GET_TRADEMON
call PlaySFX
ret
; 29281
Function29281: ; 29281
and 3
ld e, a
ld d, 0
ld hl, Jumptable_2928f
rept 2
add hl, de
endr
ld a, [hli]
ld h, [hl]
ld l, a
jp [hl]
; 2928f
Jumptable_2928f: ; 2928f
dw Function29297
dw Function292af
dw Function292be
dw Function29297
; 29297
Function29297: ; 29297
call Function297cf
hlcoord 9, 3
ld [hl], $5b
inc hl
ld bc, $a
ld a, $60
call ByteFill
hlcoord 3, 2
call Function292ec
ret
; 292af
Function292af: ; 292af
call Function297cf
hlcoord 0, 3
ld bc, SCREEN_WIDTH
ld a, $60
call ByteFill
ret
; 292be
Function292be: ; 292be
call Function297cf
hlcoord 0, 3
ld bc, $11
ld a, $60
call ByteFill
hlcoord 17, 3
ld a, $5d
ld [hl], a
ld a, $61
ld de, SCREEN_WIDTH
ld c, $3
.asm_292d9
add hl, de
ld [hl], a
dec c
jr nz, .asm_292d9
add hl, de
ld a, $5f
ld [hld], a
ld a, $5b
ld [hl], a
hlcoord 10, 6
call Function292ec
ret
; 292ec
Function292ec: ; 292ec
ld de, TradeGameBoyTilemap
lb bc, 8, 6
call Function297db
ret
; 292f6
Function292f6: ; 292f6
push af
call ClearBGPalettes
call WaitTop
ld a, VBGMap1 / $100
ld [hBGMapAddress + 1], a
call ClearTileMap
hlcoord 0, 0
ld bc, SCREEN_WIDTH
ld a, "─"
call ByteFill
hlcoord 0, 1
ld de, wc736
call PlaceString
ld hl, wc741
ld de, 0
.asm_2931e
ld a, [hli]
cp "@"
jr z, .asm_29326
dec de
jr .asm_2931e
.asm_29326
hlcoord 0, 4
add hl, de
ld de, wc741
call PlaceString
hlcoord 7, 2
ld bc, 6
pop af
call ByteFill
call WaitBGMap
call WaitTop
ld a, VBGMap0 / $100
ld [hBGMapAddress + 1], a
call ClearTileMap
ret
; 29348
Function29348: ; 29348
call ClearTileMap
call WaitTop
ld a, $a0
ld [hSCX], a
call DelayFrame
hlcoord 8, 2
ld de, Tilemap_298f7
lb bc, 3, 12
call Function297db
call WaitBGMap
ld b, $1b
call GetSGBLayout
ld a, $e4
call DmgToCgbBGPals
ld de, $e4e4
call DmgToCgbObjPals
ld de, SFX_POTION
call PlaySFX
call Function2910f
ret
; 2937e
Function2937e: ; 2937e
ld a, [hSCX]
and a
jr z, .asm_29388
add $4
ld [hSCX], a
ret
.asm_29388
ld c, $50
call DelayFrames
call Function29114
ret
; 29391
Function29391: ; 29391
ld a, [hSCX]
cp $a0
jr z, .asm_2939c
sub $4
ld [hSCX], a
ret
.asm_2939c
call ClearTileMap
xor a
ld [hSCX], a
call Function29114
ret
; 293a6
Function293a6: ; 293a6
ld a, $8f
ld [hWX], a
ld a, $88
ld [hSCX], a
ld a, $50
ld [hWY], a
call Function29114
ret
; 293b6
Function293b6: ; 293b6
ld a, [hWX]
cp $7
jr z, .asm_293c7
sub $4
ld [hWX], a
ld a, [hSCX]
sub $4
ld [hSCX], a
ret
.asm_293c7
ld a, $7
ld [hWX], a
xor a
ld [hSCX], a
call Function29114
ret
; 293d2
Function293d2: ; 293d2
ld a, $7
ld [hWX], a
ld a, $50
ld [hWY], a
call Function29114
ret
; 293de
Function293de: ; 293de
ld a, $7
ld [hWX], a
ld a, $90
ld [hWY], a
call Function29114
ret
; 293ea
Function293ea: ; 293ea
call WaitTop
ld a, VBGMap1 / $100
ld [hBGMapAddress + 1], a
call WaitBGMap
ld a, $7
ld [hWX], a
xor a
ld [hWY], a
call DelayFrame
call WaitTop
ld a, VBGMap0 / $100
ld [hBGMapAddress + 1], a
call ClearTileMap
call Function2910f
ret
; 2940c
Function2940c: ; 2940c
ld a, [hWX]
cp $a1
jr nc, .asm_29417
add $4
ld [hWX], a
ret
.asm_29417
ld a, VBGMap1 / $100
ld [hBGMapAddress + 1], a
call WaitBGMap
ld a, $7
ld [hWX], a
ld a, $90
ld [hWY], a
ld a, VBGMap0 / $100
ld [hBGMapAddress + 1], a
call Function29114
ret
; 2942e
Function2942e: ; 2942e
call Function2951f
ld a, [wc6d0]
ld [CurPartySpecies], a
ld a, [wc6fd]
ld [TempMonDVs], a
ld a, [wPlayerMinimized]
ld [TempMonDVs + 1], a
ld b, $1a
call GetSGBLayout
ld a, $e4
call DmgToCgbBGPals
call Function294bb
ld a, [wc6d0]
call GetCryIndex
jr c, .asm_2945d
ld e, c
ld d, b
call PlayCryHeader
.asm_2945d
call Function29114
ret
; 29461
Function29461: ; 29461
call Function29549
ld a, [wc702]
ld [CurPartySpecies], a
ld a, [wEnemyTrappingMove]
ld [TempMonDVs], a
ld a, [wPlayerWrapCount]
ld [TempMonDVs + 1], a
ld b, $1a
call GetSGBLayout
ld a, $e4
call DmgToCgbBGPals
call Function294c0
call Function29114
ret
; 29487
Function29487: ; 29487
callba Function4d81e
call Function29114
ret
; 29491
Function29491: ; 29491
push de
push af
predef GetUnownLetter
pop af
ld [CurPartySpecies], a
ld [CurSpecies], a
call GetBaseData
pop de
predef GetFrontpic
ret
; 294a9
Function294a9: ; 294a9
push de
ld [wd265], a
call GetPokemonName
ld hl, StringBuffer1
pop de
ld bc, NAME_LENGTH
call CopyBytes
ret
; 294bb
Function294bb: ; 294bb
ld de, VTiles0
jr Function294c3
Function294c0: ; 294c0
ld de, VTiles0 tile $31
Function294c3: ; 294c3
call DelayFrame
ld hl, VTiles2
ld bc, $a31
call Request2bpp
call WaitTop
call Function297cf
hlcoord 7, 2
xor a
ld [hFillBox], a
lb bc, 7, 7
predef FillBox
call WaitBGMap
ret
; 294e7
Function294e7: ; 294e7
ld c, $50
call DelayFrames
call Function29114
ret
; 294f0
Function294f0: ; 294f0
ld c, $28
call DelayFrames
call Function29114
ret
; 294f9
Function294f9: ; 294f9
ld c, $60
call DelayFrames
call Function29114
ret
; 29502
Function29502: ; 29502
call Function29516
ret nz
ld c, $50
call DelayFrames
ret
; 2950c
Function2950c: ; 2950c
call Function29516
ret nz
ld c, $b4
call DelayFrames
ret
; 29516
Function29516: ; 29516
call Function29114
ld a, [wc702]
cp $fd
ret
; 2951f
Function2951f: ; 2951f
ld de, wc6d0
ld a, [de]
cp $fd
jr z, Function295a1
call Function29573
ld de, wc6d0
call Function295e3
ld de, wc6d1
call Function295ef
ld a, [wc701]
ld de, wc6f2
call Function295f6
ld de, PlayerScreens
call Function29611
call Function295d8
ret
; 29549
Function29549: ; 29549
ld de, wc702
ld a, [de]
cp $fd
jr z, Function295a1
call Function29573
ld de, wc702
call Function295e3
ld de, wc703
call Function295ef
ld a, [wEnemyCharging]
ld de, wc724
call Function295f6
ld de, wEnemyWrapCount
call Function29611
call Function295d8
ret
; 29573
Function29573: ; 29573
call WaitTop
call Function297cf
ld a, VBGMap1 / $100
ld [hBGMapAddress + 1], a
hlcoord 3, 0
ld b, $6
ld c, $d
call TextBox
hlcoord 4, 0
ld de, String29591
call PlaceString
ret
; 29591
String29591: ; 29591
db "─── №."
next ""
next "OT/"
next $73, "№.@"
; 295a1
Function295a1: ; 295a1
call WaitTop
call Function297cf
ld a, VBGMap1 / $100
ld [hBGMapAddress + 1], a
hlcoord 3, 0
ld b, $6
ld c, $d
call TextBox
hlcoord 4, 2
ld de, String295c2
call PlaceString
call Function295d8
ret
; 295c2
String295c2: ; 295c2
db "EGG"
next "OT/?????"
next $73, "№.?????@"
; 295d8
Function295d8: ; 295d8
call WaitBGMap
call WaitTop
ld a, VBGMap0 / $100
ld [hBGMapAddress + 1], a
ret
; 295e3
Function295e3: ; 295e3
hlcoord 10, 0
lb bc, PRINTNUM_LEADINGZEROS | 1, 3
call PrintNum
ld [hl], $7f
ret
; 295ef
Function295ef: ; 295ef
hlcoord 4, 2
call PlaceString
ret
; 295f6
Function295f6: ; 295f6
cp 3
jr c, .asm_295fb
xor a
.asm_295fb
push af
hlcoord 7, 4
call PlaceString
inc bc
pop af
ld hl, Unknown_2960e
ld d, 0
ld e, a
add hl, de
ld a, [hl]
ld [bc], a
ret
; 2960e
Unknown_2960e: ; 2960e
db " ", "♂", "♀"
; 29611
Function29611: ; 29611
hlcoord 7, 6
lb bc, PRINTNUM_LEADINGZEROS | 2, 5
call PrintNum
ret
; 2961b
Function2961b: ; 2961b
lb de, $54, $58
ld a, $e
call _InitSpriteAnimStruct
call Function29114
ld a, $20
ld [wcf64], a
ret
; 2962c
Function2962c: ; 2962c
lb de, $54, $58
ld a, $e
call _InitSpriteAnimStruct
ld hl, $b
add hl, bc
ld [hl], $1
ld hl, $7
add hl, bc
ld [hl], $dc
call Function29114
ld a, $38
ld [wcf64], a
ret
; 29649
Function29649: ; 29649
lb de, $54, $58
ld a, $f
call _InitSpriteAnimStruct
call Function29114
ld a, $10
ld [wcf64], a
ld de, SFX_BALL_POOF
call PlaySFX
ret
; 29660
Function29660: ; 29660
ld a, $e4
call Functioncf8
lb de, $28, $58
ld a, $10
call _InitSpriteAnimStruct
call Function29114
ld a, $40
ld [wcf64], a
ret
; 29676
Function29676: ; 29676 (a:5676)
ld hl, $b
add hl, bc
ld e, [hl]
ld d, 0
ld hl, Jumptable_29686
rept 2
add hl, de
endr
ld a, [hli]
ld h, [hl]
ld l, a
jp [hl]
; 29686
Jumptable_29686: ; 29686 (a:5686)
dw Function2969a
dw Function296a4
dw Function296af
dw Function296bd
dw Function296cf
dw Function296dd
dw Function296f2
; 2969a
Function29694: ; 29694 (a:5694)
ld hl, $b
add hl, bc
inc [hl]
ret
Function2969a: ; 2969a (a:569a)
call Function29694
ld hl, $c
add hl, bc
ld [hl], $80
ret
Function296a4: ; 296a4 (a:56a4)
ld hl, $c
add hl, bc
ld a, [hl]
dec [hl]
and a
ret nz
call Function29694
Function296af: ; 296af (a:56af)
ld hl, $4
add hl, bc
ld a, [hl]
cp $94
jr nc, .asm_296ba
inc [hl]
ret
.asm_296ba
call Function29694
Function296bd: ; 296bd (a:56bd)
ld hl, $5
add hl, bc
ld a, [hl]
cp $4c
jr nc, .asm_296c8
inc [hl]
ret
.asm_296c8
ld hl, $
add hl, bc
ld [hl], $0
ret
Function296cf: ; 296cf (a:56cf)
ld hl, $5
add hl, bc
ld a, [hl]
cp $2c
jr z, .asm_296da
dec [hl]
ret
.asm_296da
call Function29694
Function296dd: ; 296dd (a:56dd)
ld hl, $4
add hl, bc
ld a, [hl]
cp $58
jr z, .asm_296e8
dec [hl]
ret
.asm_296e8
call Function29694
ld hl, $c
add hl, bc
ld [hl], $80
ret
Function296f2: ; 296f2 (a:56f2)
ld hl, $c
add hl, bc
ld a, [hl]
dec [hl]
and a
ret nz
ld hl, $
add hl, bc
ld [hl], $0
ret
; 29701 (a:5701)
Function29701: ; 29701
ld a, [wLinkMode]
cp LINK_TIMECAPSULE
jr z, .asm_29725
ld hl, UnknownText_0x29737
call PrintText
ld c, $bd
call DelayFrames
ld hl, UnknownText_0x29732
call PrintText
call Function297c9
ld c, $80
call DelayFrames
call Function29114
ret
.asm_29725
ld hl, UnknownText_0x29732
call PrintText
call Function297c9
call Function29114
ret
; 29732
UnknownText_0x29732: ; 0x29732
; was sent to @ .
text_jump UnknownText_0x1bc6e9
db "@"
; 0x29737
UnknownText_0x29737: ; 0x29737
;
text_jump UnknownText_0x1bc701
db "@"
; 0x2973c
Function2973c: ; 2973c
ld hl, UnknownText_0x29752
call PrintText
call Function297c9
ld hl, UnknownText_0x29757
call PrintText
call Function297c9
call Function29114
ret
; 29752
UnknownText_0x29752: ; 0x29752
; bids farewell to
text_jump UnknownText_0x1bc703
db "@"
; 0x29757
UnknownText_0x29757: ; 0x29757
; .
text_jump UnknownText_0x1bc719
db "@"
; 0x2975c
Function2975c: ; 2975c
call WaitTop
hlcoord 0, 10
ld bc, 8 * SCREEN_WIDTH
ld a, " "
call ByteFill
call WaitBGMap
ld hl, UnknownText_0x2977a
call PrintText
call Function297c9
call Function29114
ret
; 2977a
UnknownText_0x2977a: ; 0x2977a
; Take good care of @ .
text_jump UnknownText_0x1bc71f
db "@"
; 0x2977f
Function2977f: ; 2977f
ld hl, UnknownText_0x2979a
call PrintText
call Function297c9
ld hl, UnknownText_0x2979f
call PrintText
call Function297c9
ld c, $e
call DelayFrames
call Function29114
ret
; 2979a
UnknownText_0x2979a: ; 0x2979a
; For @ 's @ ,
text_jump UnknownText_0x1bc739
db "@"
; 0x2979f
UnknownText_0x2979f: ; 0x2979f
; sends @ .
text_jump UnknownText_0x1bc74c
db "@"
; 0x297a4
Function297a4: ; 297a4
ld hl, UnknownText_0x297bf
call PrintText
call Function297c9
ld hl, UnknownText_0x297c4
call PrintText
call Function297c9
ld c, $e
call DelayFrames
call Function29114
ret
; 297bf
UnknownText_0x297bf: ; 0x297bf
; will trade @ @
text_jump UnknownText_0x1bc75e
db "@"
; 0x297c4
UnknownText_0x297c4: ; 0x297c4
; for @ 's @ .
text_jump UnknownText_0x1bc774
db "@"
; 0x297c9
Function297c9: ; 297c9
ld c, $50
call DelayFrames
ret
; 297cf
Function297cf: ; 297cf
hlcoord 0, 0
ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
ld a, " "
call ByteFill
ret
; 297db
Function297db: ; 297db
.asm_297db
push bc
push hl
.asm_297dd
ld a, [de]
inc de
ld [hli], a
dec c
jr nz, .asm_297dd
pop hl
ld bc, SCREEN_WIDTH
add hl, bc
pop bc
dec b
jr nz, .asm_297db
ret
; 297ed
Function297ed: ; 297ed
ld a, [hSGB]
and a
ld a, $e4
jr z, .asm_297f6
ld a, $f0
.asm_297f6
call Functioncf8
ld a, $e4
call DmgToCgbBGPals
ret
; 297ff
Function297ff: ; 297ff
push de
ld de, wc736
ld bc, NAME_LENGTH
call CopyBytes
pop hl
ld de, wc741
ld bc, NAME_LENGTH
call CopyBytes
ret
; 29814
Function29814: ; 29814
ld a, [hl]
ld [wc74c], a
ld a, [de]
ld [wc74d], a
ret
; 2981d
Function2981d: ; 2981d
ld a, [wcf65]
and $7
ret nz
ld a, [rBGP]
xor $3c
call DmgToCgbBGPals
ret
; 2982b
Function2982b: ; 2982b
call DelayFrame
ld de, TradeBallGFX
ld hl, VTiles0 tile $62
lb bc, BANK(TradeBallGFX), $6
call Request2bpp
ld de, TradePoofGFX
ld hl, VTiles0 tile $68
lb bc, BANK(TradePoofGFX), $c
call Request2bpp
ld de, TradeCableGFX
ld hl, VTiles0 tile $74
lb bc, BANK(TradeCableGFX), $4
call Request2bpp
xor a
ld hl, wc300
ld [hli], a
ld [hl], $62
ret
; 2985a
Function2985a: ; 2985a
call DelayFrame
ld e, $3
callab Function8e83f
ld de, TradeBubbleGFX
ld hl, VTiles0 tile $72
lb bc, BANK(TradeBubbleGFX), $4
call Request2bpp
xor a
ld hl, wc300
ld [hli], a
ld [hl], $62
ret
; 29879
Function29879: ; 29879
ld hl, wcf64
ld a, [hl]
and a
jr z, .asm_29882
dec [hl]
ret
.asm_29882
call Function29114
ret
; 29886
Function29886: ; 29886
ld hl, wcf64
ld a, [hl]
and a
jr z, .asm_2988f
dec [hl]
ret
.asm_2988f
call Function29114
ret
; 29893
Function29893: ; 29893
; This function is unreferenced.
; It was meant for use in Japanese versions, so the
; constant used for copy length was changed by accident.
ld hl, Unknown_298b5
ld a, [hli]
ld [wc6d0], a
ld de, wc6e7
ld c, 13 ; jp: 8
.asm_2989f
ld a, [hli]
ld [de], a
inc de
dec c
jr nz, .asm_2989f
ld a, [hli]
ld [wc702], a
ld de, wc719
ld c, 13 ; jp: 8
.asm_298ae
ld a, [hli]
ld [de], a
inc de
dec c
jr nz, .asm_298ae
ret
; 298b5
Unknown_298b5: ; 298b5
db $03, "ゲーフり@@", $23, $01 ; GAME FREAK
db $06, "クりーチャ@", $56, $04 ; Creatures Inc.
; 298c7
TradeGameBoyTilemap: ; 298c7
; 6x8
db $31, $32, $32, $32, $32, $33
db $34, $35, $36, $36, $37, $38
db $34, $39, $3a, $3a, $3b, $38
db $3c, $3d, $3e, $3e, $3f, $40
db $41, $42, $43, $43, $44, $45
db $46, $47, $43, $48, $49, $4a
db $41, $43, $4b, $4c, $4d, $4e
db $4f, $50, $50, $50, $51, $52
; 297f7
Tilemap_298f7: ; 297f7
; 12x3
db $43, $55, $56, $53, $53, $53, $53, $53, $53, $53, $53, $53
db $43, $57, $58, $54, $54, $54, $54, $54, $54, $54, $54, $54
db $43, $59, $5a, $43, $43, $43, $43, $43, $43, $43, $43, $43
; 2991b
TradeArrowGFX: INCBIN "gfx/trade/arrow.2bpp"
TradeCableGFX: INCBIN "gfx/trade/cable.2bpp"
TradeBubbleGFX: INCBIN "gfx/trade/bubble.2bpp"
TradeGameBoyLZ: INCBIN "gfx/trade/game_boy.2bpp.lz"
TradeBallGFX: INCBIN "gfx/trade/ball.2bpp"
TradePoofGFX: INCBIN "gfx/trade/poof.2bpp"
Special_CheckTimeCapsuleCompatibility: ; 29bfb
; Checks to see if your Party is compatible with the generation 1 games. Returns the following in ScriptVar:
; 0: Party is okay
; 1: At least one Pokemon was introduced in GS
; 2: At least one Pokemon has a move that was introduced in GS
; 3: At least one Pokemon is holding mail
; If any party Pokemon was introduced in the generation 2 games, don't let it in.
ld hl, PartySpecies
ld b, PARTY_LENGTH ; 6
.loop
ld a, [hli]
cp $ff
jr z, .checkitem
cp CHIKORITA ; MEW + 1 ; 151 + 1
jr nc, .mon_too_new
dec b
jr nz, .loop
; If any party Pokemon is holding mail, don't let it in.
.checkitem
ld a, [PartyCount]
ld b, a
ld hl, PartyMon1Item
.itemloop
push hl
push bc
ld d, [hl]
callba ItemIsMail
pop bc
pop hl
jr c, .mon_has_mail
ld de, PARTYMON_STRUCT_LENGTH
add hl, de
dec b
jr nz, .itemloop
; If any party Pokemon has a move that was introduced in the generation 2 games, don't let it in.
ld hl, PartyMon1Moves
ld a, [PartyCount]
ld b, a
.move_loop
ld c, NUM_MOVES
.move_next
ld a, [hli]
cp STRUGGLE + 1
jr nc, .move_too_new
dec c
jr nz, .move_next
ld de, PartyMon2 - (PartyMon1 + NUM_MOVES)
add hl, de
dec b
jr nz, .move_loop
xor a
jr .done
.mon_too_new
ld [wd265], a
call GetPokemonName
ld a, $1
jr .done
.move_too_new
push bc
ld [wd265], a
call GetMoveName
call CopyName1
pop bc
call Function29c67
ld a, $2
jr .done
.mon_has_mail
call Function29c67
ld a, $3
.done
ld [ScriptVar], a
ret
; 29c67
Function29c67: ; 29c67
ld a, [PartyCount]
sub b
ld c, a
inc c
ld b, $0
ld hl, PartyCount
add hl, bc
ld a, [hl]
ld [wd265], a
call GetPokemonName
ret
; 29c7b
Special_EnterTimeCapsule: ; 29c7b
ld c, $a
call DelayFrames
ld a, $4
call Function29f17
ld c, $28
call DelayFrames
xor a
ld [hVBlank], a
inc a
ld [wLinkMode], a
ret
; 29c92
Special_AbortLink: ; 29c92
ld c, $3
call DelayFrames
ld a, -1
ld [hLinkPlayerNumber], a
xor a
ld [rSB], a
ld [hSerialReceive], a
ld a, $1
ld [rSC], a
ld a, $81
ld [rSC], a
ld c, $3
call DelayFrames
xor a
ld [rSB], a
ld [hSerialReceive], a
ld a, $0
ld [rSC], a
ld a, $80
ld [rSC], a
ld c, $3
call DelayFrames
xor a
ld [rSB], a
ld [hSerialReceive], a
ld [rSC], a
ld c, $3
call DelayFrames
ld a, -1
ld [hLinkPlayerNumber], a
ld a, [rIF]
push af
xor a
ld [rIF], a
ld a, $f
ld [rIE], a
pop af
ld [rIF], a
ld hl, wcf5b
xor a
ld [hli], a
ld [hl], a
ld [hVBlank], a
ld [wLinkMode], a
ret
; 29ce8
Special_SetBitsForLinkTradeRequest: ; 29ce8
ld a, $1
ld [wcf56], a
ld [wd265], a
ret
; 29cf1
Special_SetBitsForBattleRequest: ; 29cf1
ld a, $2
ld [wcf56], a
ld [wd265], a
ret
; 29cfa
Special_SetBitsForTimeCapsuleRequest: ; 29cfa
ld a, $2
ld [rSB], a
xor a
ld [hSerialReceive], a
ld a, $0
ld [rSC], a
ld a, $80
ld [rSC], a
xor a
ld [wcf56], a
ld [wd265], a
ret
; 29d11
Special_WaitForLinkedFriend: ; 29d11
ld a, [wcf56]
and a
jr z, .asm_29d2f
ld a, $2
ld [rSB], a
xor a
ld [hSerialReceive], a
ld a, $0
ld [rSC], a
ld a, $80
ld [rSC], a
call DelayFrame
call DelayFrame
call DelayFrame
.asm_29d2f
ld a, $2
ld [wcf5c], a
ld a, $ff
ld [wcf5b], a
.asm_29d39
ld a, [hLinkPlayerNumber]
cp $2
jr z, .asm_29d79
cp $1
jr z, .asm_29d79
ld a, -1
ld [hLinkPlayerNumber], a
ld a, $2
ld [rSB], a
xor a
ld [hSerialReceive], a
ld a, $0
ld [rSC], a
ld a, $80
ld [rSC], a
ld a, [wcf5b]
dec a
ld [wcf5b], a
jr nz, .asm_29d68
ld a, [wcf5c]
dec a
ld [wcf5c], a
jr z, .asm_29d8d
.asm_29d68
ld a, $1
ld [rSB], a
ld a, $1
ld [rSC], a
ld a, $81
ld [rSC], a
call DelayFrame
jr .asm_29d39
.asm_29d79
call Function908
call DelayFrame
call Function908
ld c, $32
call DelayFrames
ld a, $1
ld [ScriptVar], a
ret
.asm_29d8d
xor a
ld [ScriptVar], a
ret
; 29d92
Special_CheckLinkTimeout: ; 29d92
ld a, $1
ld [wcf56], a
ld hl, wcf5b
ld a, $3
ld [hli], a
xor a
ld [hl], a
call WaitBGMap
ld a, $2
ld [hVBlank], a
call DelayFrame
call DelayFrame
call Function29e0c
xor a
ld [hVBlank], a
ld a, [ScriptVar]
and a
ret nz
jp Function29f04
; 29dba
Function29dba: ; 29dba
ld a, $5
ld [wcf56], a
ld hl, wcf5b
ld a, $3
ld [hli], a
xor a
ld [hl], a
call WaitBGMap
ld a, $2
ld [hVBlank], a
call DelayFrame
call DelayFrame
call Function29e0c
ld a, [ScriptVar]
and a
jr z, .asm_29e08
ld bc, rIE
.asm_29de0
dec bc
ld a, b
or c
jr nz, .asm_29de0
ld a, [wcf51]
cp $5
jr nz, .asm_29e03
ld a, $6
ld [wcf56], a
ld hl, wcf5b
ld a, $1
ld [hli], a
ld [hl], $32
call Function29e0c
ld a, [wcf51]
cp $6
jr z, .asm_29e08
.asm_29e03
xor a
ld [ScriptVar], a
ret
.asm_29e08
xor a
ld [hVBlank], a
ret
; 29e0c
Function29e0c: ; 29e0c
xor a
ld [hFFCA], a
ld a, [wcf5b]
ld h, a
ld a, [wcf5c]
ld l, a
push hl
call Function29e3b
pop hl
jr nz, .asm_29e2f
call Function29e47
call Function29e53
call Function29e3b
jr nz, .asm_29e2f
call Function29e47
xor a
jr .asm_29e31
.asm_29e2f
ld a, $1
.asm_29e31
ld [ScriptVar], a
ld hl, wcf5b
xor a
ld [hli], a
ld [hl], a
ret
; 29e3b
Function29e3b: ; 29e3b
call Function87d
ld hl, wcf5b
ld a, [hli]
inc a
ret nz
ld a, [hl]
inc a
ret
; 29e47
Function29e47: ; 29e47
ld b, $a
.asm_29e49
call DelayFrame
call Function908
dec b
jr nz, .asm_29e49
ret
; 29e53
Function29e53: ; 29e53
dec h
srl h
rr l
srl h
rr l
inc h
ld a, h
ld [wcf5b], a
ld a, l
ld [wcf5c], a
ret
; 29e66
Special_TryQuickSave: ; 29e66
ld a, [wd265]
push af
callba Link_SaveGame
ld a, $1
jr nc, .asm_29e75
xor a
.asm_29e75
ld [ScriptVar], a
ld c, $1e
call DelayFrames
pop af
ld [wd265], a
ret
; 29e82
Special_CheckBothSelectedSameRoom: ; 29e82
ld a, [wd265]
call Function29f17
push af
call Function908
call DelayFrame
call Function908
pop af
ld b, a
ld a, [wd265]
cp b
jr nz, .asm_29eaa
ld a, [wd265]
inc a
ld [wLinkMode], a
xor a
ld [hVBlank], a
ld a, $1
ld [ScriptVar], a
ret
.asm_29eaa
xor a
ld [ScriptVar], a
ret
; 29eaf
Special_TimeCapsule: ; 29eaf
ld a, LINK_TIMECAPSULE
ld [wLinkMode], a
call DisableSpriteUpdates
callab LinkCommunications
call EnableSpriteUpdates
xor a
ld [hVBlank], a
ret
; 29ec4
Special_TradeCenter: ; 29ec4
ld a, LINK_TRADECENTER
ld [wLinkMode], a
call DisableSpriteUpdates
callab LinkCommunications
call EnableSpriteUpdates
xor a
ld [hVBlank], a
ret
; 29ed9
Special_Colosseum: ; 29ed9
ld a, LINK_COLOSSEUM
ld [wLinkMode], a
call DisableSpriteUpdates
callab LinkCommunications
call EnableSpriteUpdates
xor a
ld [hVBlank], a
ret
; 29eee
Special_CloseLink: ; 29eee
xor a
ld [wLinkMode], a
ld c, $3
call DelayFrames
jp Function29f04
; 29efa
Special_FailedLinkToPast: ; 29efa
ld c, $28
call DelayFrames
ld a, $e
jp Function29f17
; 29f04
Function29f04: ; 29f04
ld c, $3
call DelayFrames
ld a, -1
ld [hLinkPlayerNumber], a
ld a, $2
ld [rSB], a
xor a
ld [hSerialReceive], a
ld [rSC], a
ret
; 29f17
Function29f17: ; 29f17
add $d0
ld [wcf56], a
ld [wcf57], a
ld a, $2
ld [hVBlank], a
call DelayFrame
call DelayFrame
.asm_29f29
call Function83b
ld a, [wcf51]
ld b, a
and $f0
cp $d0
jr z, .asm_29f40
ld a, [wcf52]
ld b, a
and $f0
cp $d0
jr nz, .asm_29f29
.asm_29f40
xor a
ld [hVBlank], a
ld a, b
and $f
ret
; 29f47
Special_CableClubCheckWhichChris: ; 29f47
ld a, [hLinkPlayerNumber]
cp $1
ld a, $1
jr z, .yes
dec a
.yes
ld [ScriptVar], a
ret
; 29f54
GFX_29f54: ; 29f54
INCBIN "gfx/unknown/029f54.2bpp"
; 29fe4