shithub: pokecrystal

Download patch

ref: d8cd991b35d45ef75b06a89b0626381132b34806
parent: f1b2466cc3672fa72f5b43e96a634dd83796f047
author: PikalaxALT <[email protected]>
date: Mon Nov 9 18:55:39 EST 2015

engine/link.asm

--- a/battle/core.asm
+++ b/battle/core.asm
@@ -3642,15 +3642,15 @@
 
 	ld a, [CurPartySpecies]
 	cp UNOWN
-	jr nz, .asm_3d708
+	jr nz, .skip_unown
 	ld a, [wdef4]
 	and a
-	jr nz, .asm_3d708
+	jr nz, .skip_unown
 	ld hl, EnemyMonDVs
 	predef GetUnownLetter
 	ld a, [UnownLetter]
 	ld [wdef4], a
-.asm_3d708
+.skip_unown
 
 	ld hl, EnemyMonHP
 	ld a, [hli]
@@ -8630,13 +8630,13 @@
 	predef GetUnownLetter
 	ld a, [CurPartySpecies]
 	cp UNOWN
-	jr nz, .asm_3f648
+	jr nz, .skip_unown
 	ld a, [wdef4]
 	and a
-	jr nz, .asm_3f648
+	jr nz, .skip_unown
 	ld a, [UnownLetter]
 	ld [wdef4], a
-.asm_3f648
+.skip_unown
 	ld de, VTiles2
 	predef Function5108b
 	xor a
--- /dev/null
+++ b/engine/link.asm
@@ -1,0 +1,4117 @@
+LinkCommunications: ; 28000
+	call WhiteBGMap
+	ld c, $50
+	call DelayFrames
+	call ClearScreen
+	call ClearSprites
+	call UpdateSprites
+	xor a
+	ld [hSCX], a
+	ld [hSCY], a
+	ld c, $50
+	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 Function222a
+	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 [$ffcc], 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, [$ffcc]
+	and a
+	ld a, b
+	pop bc
+	jr z, .asm_28411
+	dec hl
+	xor a
+	ld [$ffcc], 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(sPartyScratch1)
+	call GetSRAMBank
+	ld hl, sPartyScratch1
+	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, sPartyScratch1
+	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, sPartyScratch1
+	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, SCRATCHMON_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 [DefaultFlypoint], 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, [DefaultFlypoint]
+	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 LoadPartyMenuDataHeader
+	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, sPartyScratch1
+	ld a, [DefaultFlypoint]
+	ld bc, SCRATCHMON_STRUCT_LENGTH
+	call AddNTimes
+	ld a, BANK(sPartyScratch1)
+	call GetSRAMBank
+	ld d, h
+	ld e, l
+	ld bc, SCRATCHMON_STRUCT_LENGTH
+	add hl, bc
+	ld a, [DefaultFlypoint]
+	ld c, a
+.asm_28c96
+	inc c
+	ld a, c
+	cp $6
+	jr z, .asm_28ca6
+	push bc
+	ld bc, SCRATCHMON_STRUCT_LENGTH
+	call CopyBytes
+	pop bc
+	jr .asm_28c96
+
+.asm_28ca6
+	ld hl, sPartyScratch1
+	ld a, [PartyCount]
+	dec a
+	ld bc, SCRATCHMON_STRUCT_LENGTH
+	call AddNTimes
+	push hl
+	ld hl, wc9f4
+	ld a, [wd003]
+	ld bc, SCRATCHMON_STRUCT_LENGTH
+	call AddNTimes
+	pop de
+	ld bc, SCRATCHMON_STRUCT_LENGTH
+	call CopyBytes
+	call CloseSRAM
+	ld hl, PlayerName
+	ld de, wc6e7
+	ld bc, NAME_LENGTH
+	call CopyBytes
+	ld a, [DefaultFlypoint]
+	ld hl, PartySpecies
+	ld b, $0
+	ld c, a
+	add hl, bc
+	ld a, [hl]
+	ld [wc6d0], a
+	push af
+	ld a, [DefaultFlypoint]
+	ld hl, PartyMonOT
+	call SkipNames
+	ld de, wc6f2
+	ld bc, NAME_LENGTH
+	call CopyBytes
+	ld hl, PartyMon1ID
+	ld a, [DefaultFlypoint]
+	call GetPartyLocation
+	ld a, [hli]
+	ld [PlayerScreens], a
+	ld a, [hl]
+	ld [EnemyScreens], a
+	ld hl, PartyMon1DVs
+	ld a, [DefaultFlypoint]
+	call GetPartyLocation
+	ld a, [hli]
+	ld [wc6fd], a
+	ld a, [hl]
+	ld [wc6fe], a
+	ld a, [DefaultFlypoint]
+	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, [DefaultFlypoint]
+	ld [CurPartyMon], a
+	ld hl, PartySpecies
+	ld b, $0
+	ld c, a
+	add hl, bc
+	ld a, [hl]
+	ld [DefaultFlypoint], 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 Functionda96
+	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 WhiteBGMap
+	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 Function3b2a
+	ld hl, $b
+	add hl, bc
+	pop bc
+	ld [hl], b
+	pop de
+	ld a, $12
+	call Function3b2a
+	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 WhiteBGMap
+	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 WhiteBGMap
+	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, [wc6fe]
+	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 Function3b2a
+	call Function29114
+	ld a, $20
+	ld [wcf64], a
+	ret
+; 2962c
+
+Function2962c: ; 2962c
+	lb de, $54, $58
+	ld a, $e
+	call Function3b2a
+	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 Function3b2a
+	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 Function3b2a
+	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 [$ffca], 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 Function14ab2
+	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
--- a/main.asm
+++ b/main.asm
@@ -8349,7 +8349,7 @@
 	call CopyBytes
 
 	ld a, [CurPartySpecies]
-	ld [wd265], a
+	ld [wNamedObjectIndexBuffer], a
 	cp EGG
 	jr z, .owned
 	dec a
@@ -25192,4129 +25192,13 @@
 
 SECTION "bankA", ROMX, BANK[$A]
 
-LinkCommunications: ; 28000
-	call WhiteBGMap
-	ld c, $50
-	call DelayFrames
-	call ClearScreen
-	call ClearSprites
-	call UpdateSprites
-	xor a
-	ld [hSCX], a
-	ld [hSCY], a
-	ld c, $50
-	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
+INCLUDE "engine/link.asm"
 
-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
+Function29fe4: ; unreferenced
 	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 Function222a
-	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 [$ffcc], 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, [$ffcc]
-	and a
-	ld a, b
-	pop bc
-	jr z, .asm_28411
-	dec hl
-	xor a
-	ld [$ffcc], 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(sPartyScratch1)
 	call GetSRAMBank
-	ld hl, sPartyScratch1
-	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, sPartyScratch1
-	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, sPartyScratch1
-	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, SCRATCHMON_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 [DefaultFlypoint], 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, [DefaultFlypoint]
-	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 LoadPartyMenuDataHeader
-	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, sPartyScratch1
-	ld a, [DefaultFlypoint]
-	ld bc, SCRATCHMON_STRUCT_LENGTH
-	call AddNTimes
-	ld a, BANK(sPartyScratch1)
-	call GetSRAMBank
-	ld d, h
-	ld e, l
-	ld bc, SCRATCHMON_STRUCT_LENGTH
-	add hl, bc
-	ld a, [DefaultFlypoint]
-	ld c, a
-.asm_28c96
-	inc c
-	ld a, c
-	cp $6
-	jr z, .asm_28ca6
-	push bc
-	ld bc, SCRATCHMON_STRUCT_LENGTH
-	call CopyBytes
-	pop bc
-	jr .asm_28c96
-
-.asm_28ca6
-	ld hl, sPartyScratch1
-	ld a, [PartyCount]
-	dec a
-	ld bc, SCRATCHMON_STRUCT_LENGTH
-	call AddNTimes
-	push hl
-	ld hl, wc9f4
-	ld a, [wd003]
-	ld bc, SCRATCHMON_STRUCT_LENGTH
-	call AddNTimes
-	pop de
-	ld bc, SCRATCHMON_STRUCT_LENGTH
-	call CopyBytes
-	call CloseSRAM
-	ld hl, PlayerName
-	ld de, wc6e7
-	ld bc, NAME_LENGTH
-	call CopyBytes
-	ld a, [DefaultFlypoint]
-	ld hl, PartySpecies
-	ld b, $0
-	ld c, a
-	add hl, bc
-	ld a, [hl]
-	ld [wc6d0], a
-	push af
-	ld a, [DefaultFlypoint]
-	ld hl, PartyMonOT
-	call SkipNames
-	ld de, wc6f2
-	ld bc, NAME_LENGTH
-	call CopyBytes
-	ld hl, PartyMon1ID
-	ld a, [DefaultFlypoint]
-	call GetPartyLocation
-	ld a, [hli]
-	ld [PlayerScreens], a
-	ld a, [hl]
-	ld [EnemyScreens], a
-	ld hl, PartyMon1DVs
-	ld a, [DefaultFlypoint]
-	call GetPartyLocation
-	ld a, [hli]
-	ld [wc6fd], a
-	ld a, [hl]
-	ld [wc6fe], a
-	ld a, [DefaultFlypoint]
-	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, [DefaultFlypoint]
-	ld [CurPartyMon], a
-	ld hl, PartySpecies
-	ld b, $0
-	ld c, a
-	add hl, bc
-	ld a, [hl]
-	ld [DefaultFlypoint], 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 Functionda96
-	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 WhiteBGMap
-	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 Function3b2a
-	ld hl, $b
-	add hl, bc
-	pop bc
-	ld [hl], b
-	pop de
-	ld a, $12
-	call Function3b2a
-	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 WhiteBGMap
-	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 WhiteBGMap
-	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, [wc6fe]
-	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 Function3b2a
-	call Function29114
-	ld a, $20
-	ld [wcf64], a
-	ret
-; 2962c
-
-Function2962c: ; 2962c
-	lb de, $54, $58
-	ld a, $e
-	call Function3b2a
-	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 Function3b2a
-	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 Function3b2a
-	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 [$ffca], 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 Function14ab2
-	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
-
-Function29fe4: ; 29fe4
-	ld a, $0
-	call GetSRAMBank
-	ld d, $0
-	ld b, $2
 	predef FlagPredef
 	call CloseSRAM
 	ld a, c
@@ -45998,7 +41882,7 @@
 	ld [hDividend + 2], a
 	ld a, 10
 	ld [hDivisor], a
-	ld b, $4
+	ld b, 4
 	call Divide
 
 ; Increment to get 1-26