shithub: pokecrystal

ref: cf1c50555505f525ede5e2cd426f002312038de0
dir: /mobile/mobile_40.asm/

View raw version
Function100000:
; d: 1 or 2
; e: bank
; bc: addr
	ldh a, [rSVBK]
	push af
	ld a, 1
	ldh [rSVBK], a

	call Function100022
	call Function1000ba
	call Function100675
	call Function100057
	call Function10016f
	call Function100276

	push bc
	call Function100301
	pop bc

	pop af
	ldh [rSVBK], a
	ret

Function100022:
	push de
	push bc
	call SetRAMStateForMobile
	pop bc
	pop de
	ld a, d
	ld [wcd21], a
	ld a, e
	ld [wcd22], a
	ld a, c
	ld [wcd23], a
	ld a, b
	ld [wcd24], a
	farcall Function10127e
	farcall Stubbed_Function106462
	farcall Function106464 ; load broken gfx
	farcall Function11615a ; init RAM
	ld hl, wVramState
	set 1, [hl]
	ret

Function100057:
	call DisableMobile
	call ReturnToMapFromSubmenu
	ld hl, wVramState
	res 1, [hl]
	ret

SetRAMStateForMobile:
	xor a
	ld hl, wBGMapBuffer
	ld bc, $65
	call ByteFill
	xor a
	ld hl, wMobileWRAM
	ld bc, wMobileWRAMEnd - wMobileWRAM
	call ByteFill
	ldh a, [rIE]
	ld [wBGMapBuffer], a
	xor a
	ldh [hMapAnims], a
	ldh [hLCDCPointer], a
	ret

EnableMobile:
	xor a
	ld hl, wOverworldMapBlocks
	ld bc, wOverworldMapBlocksEnd - wOverworldMapBlocks
	call ByteFill

	di
	call DoubleSpeed
	xor a
	ldh [rIF], a
	ld a, IE_DEFAULT
	ldh [rIE], a
	xor a
	ldh [hMapAnims], a
	ldh [hLCDCPointer], a
	ld a, $01
	ldh [hMobileReceive], a
	ldh [hMobile], a
	ei

	ret

DisableMobile:
	di
	xor a
	ldh [hMobileReceive], a
	ldh [hMobile], a
	xor a
	ldh [hVBlank], a
	call NormalSpeed
	xor a
	ldh [rIF], a
	ld a, [wBGMapBuffer]
	ldh [rIE], a
	ei
	ret

Function1000ba:
.loop
	; call [wcd22]:([wcd23][wcd24] + [wMobileCommsJumptableIndex])
	ld hl, wcd23
	ld a, [hli]
	ld h, [hl]
	ld l, a
	ld a, [wMobileCommsJumptableIndex]
	ld e, a
	ld d, 0
	add hl, de
	add hl, de
	ld a, [wcd22]
	call GetFarWord
	ld a, [wcd22]
	rst FarCall

	call Function1000e8
	call Function1000fa
	call Function100144
	call Function100163
	ld a, [wcd2b]
	and a
	jr z, .loop
	call DelayFrame
	ret

Function1000e8:
	ld hl, wcd29
	bit 7, [hl]
	ret z
	farcall Function115dd3
	ld hl, wcd29
	set 6, [hl]
	ret

Function1000fa:
	ld a, [wc30d]
	and a
	ret z
	ld hl, wcd29
	bit 4, [hl]
	ret z
	ld a, [wcd2b]
	and a
	jr nz, .asm_100117
	farcall Function11619d
	ld hl, wcd29
	set 6, [hl]
	ret

.asm_100117
	di
	xor a
	ldh [rIF], a
	ldh a, [rIE]
	and $1f ^ (1 << SERIAL | 1 << TIMER)
	ldh [rIE], a
	xor a
	ldh [hMobileReceive], a
	ldh [hMobile], a
	ei

	ld a, [wLinkMode]
	push af
	xor a
	ld [wLinkMode], a
	ld a, $04
	ld [wc314 + 5], a
	farcall Function11619d
	ld hl, wcd29
	set 6, [hl]
	pop af
	ld [wLinkMode], a
	ret

Function100144:
	ld hl, wcd29
	bit 5, [hl]
	jr z, .asm_100155
	res 5, [hl]
	res 2, [hl]
	res 6, [hl]
	call Function100320
	ret

.asm_100155
	bit 2, [hl]
	ret z
	res 2, [hl]
	res 6, [hl]
	farcall HDMATransferTilemapToWRAMBank3
	ret

Function100163:
	ld hl, wcd29
	bit 6, [hl]
	ret z
	res 6, [hl]
	call DelayFrame
	ret

Function10016f:
	ld a, [wcd2b]
	cp $01
	ret z
	cp $02
	ret z
	cp $ff
	jp z, .asm_1001f5
	cp $fe
	jr z, .asm_1001c4
	cp $f5
	jr z, .asm_1001e7
	cp $f6
	jr z, .asm_1001b6
	cp $fa
	jp z, .asm_1001bd
	cp $f7
	jp z, .asm_1001ee
	cp $f4
	jr z, .asm_1001d2
	cp $f3
	jr z, .asm_1001cb
	cp $f1
	jr z, .asm_1001c4
	cp $f2
	jr z, .asm_1001c4
	cp $fc
	jr z, .asm_1001e6
	cp $fb
	jr z, .asm_1001af
	cp $f8
	ret z
	ret   ; ????????????????????????????

.asm_1001af
	ld a, $d7
	ld de, 0
	jr .asm_1001d7

.asm_1001b6
	ld a, $d5
	ld de, 0
	jr .asm_1001d7

.asm_1001bd
	ld a, $d6
	ld de, 0
	jr .asm_1001d7

.asm_1001c4
	ld a, $d2
	ld de, 2
	jr .asm_1001d7

.asm_1001cb
	ld a, $d1
	ld de, 1
	jr .asm_1001d7

.asm_1001d2
	ld a, $d0
	ld de, 0

.asm_1001d7
	ld [wMobileErrorCodeBuffer], a
	ld a, d
	ld [wMobileErrorCodeBuffer + 2], a
	ld a, e
	ld [wMobileErrorCodeBuffer + 1], a
	call Function10020b
	ret

.asm_1001e6
	ret

.asm_1001e7
	ld de, String10025e
	call Function100232
	ret

.asm_1001ee
	ld de, String10024d
	call Function100232
	ret

.asm_1001f5
	ld a, [wcd2c]
	ld [wMobileErrorCodeBuffer], a
	ld a, [wcd2d]
	ld [wMobileErrorCodeBuffer + 2], a
	ld a, [wcd2d]
	ld [wMobileErrorCodeBuffer + 1], a
	call Function10020b
	ret

Function10020b:
	xor a
	ld [wc303], a
	farcall FadeOutPalettes
	farcall Function106464
	call HideSprites
	call DelayFrame

	ldh a, [rSVBK]
	push af
	ld a, $01
	ldh [rSVBK], a

	farcall DisplayMobileError

	pop af
	ldh [rSVBK], a
	ret

Function100232:
	push de
	farcall Function106464
	call Function3f20
	call UpdateSprites
	hlcoord 1, 2
	pop de
	call PlaceString
	call Function100320
	call JoyWaitAorB
	ret

String10024d:
	db   "つうしんを キャンセル しました@"

String10025e:
	db   "おともだちと えらんだ へやが"
	next "ちがうようです@"

Function100276:
	ld a, [wcd2b]
	cp $01
	jr z, .asm_10029f
	cp $02
	jr z, .asm_100296
	cp $f5
	jr z, .asm_1002a5
	cp $f6
	jr z, .asm_1002a5
	cp $f7
	jr z, .asm_100293
	cp $f8
	jr z, .asm_1002b1
	jr .asm_1002c0

.asm_100293
	ld c, $02
	ret

.asm_100296
	farcall Script_reloadmappart
	ld c, $04
	ret

.asm_10029f
	call Function1002dc
	ld c, 0
	ret

.asm_1002a5
	farcall Script_reloadmappart
	call Function1002ed
	ld c, $03
	ret

.asm_1002b1
	call Function1002c9
	call Function1002dc
	ld de, String10024d
	call Function100232
	ld c, $02
	ret

.asm_1002c0
	call Function1002c9
	call Function1002dc
	ld c, $01
	ret

Function1002c9:
	ld hl, wcd2a
	bit 0, [hl]
	ret z
	farcall CleanUpBattleRAM
	farcall LoadPokemonData
	ret

Function1002dc:
	ld a, MAPSETUP_LINKRETURN
	ldh [hMapEntryMethod], a
	farcall RunMapSetupScript
	xor a
	ldh [hMapEntryMethod], a
	call LoadStandardFont
	ret

Function1002ed:
	farcall LoadOW_BGPal7
	farcall ApplyPals
	ld a, TRUE
	ldh [hCGBPalUpdate], a
	call DelayFrame
	ret

Function100301:
	ld hl, wcd2a
	bit 1, [hl]
	ret z
	farcall Function106464
	farcall Function10202c
	farcall Function115dd3
	call Function100320
	call JoyWaitAorB
	ret

Function100320:
	farcall Mobile_ReloadMapPart
	ret

Function100327: ; unreferenced
	farcall HDMATransferTilemapToWRAMBank3
	ret

Function10032e:
	call Function10034d
	ld e, a
	ret nc
	ld [wcd2b], a
	ret

Function100337:
	call Function10032e
	ret c
	ld a, [wc821]
	bit 4, a
	jr z, .asm_100345
	ld a, e
	and a
	ret

.asm_100345
	ld a, $f9
	ld e, a
	ld [wcd2b], a
	scf
	ret

Function10034d:
	ld a, [wc821]
	bit 1, a
	jr nz, .asm_10036a
	bit 2, a
	jr nz, .asm_10037e
	bit 3, a
	jr nz, .asm_100366
	bit 0, a
	jr nz, .asm_100364
	ld a, $01
	and a
	ret

.asm_100364
	xor a
	ret

.asm_100366
	ld a, $02
	and a
	ret

.asm_10036a
	ld a, MOBILEAPI_00
	call MobileAPI
	ld [wcd2c], a
	ld a, h
	ld [wcd2d], a
	ld a, l
	ld [wcd2e], a
	ld a, $ff
	scf
	ret

.asm_10037e
	ld a, $fe
	scf
	ret

Function100382:
	ld a, [wcd27]
	ld hl, Jumptable_10044e
	rst JumpTable
	ret

Function10038a:
	ld hl, wccb4
	ld a, MOBILEAPI_17
	call MobileAPI
	ret

Function100393:
	ld hl, wcc60
	ld a, MOBILEAPI_1D
	call MobileAPI
	ret

Function10039c:
	ld hl, wcc60
	ld de, w3_d000
	ld bc, $54
	ld a, $03
	call FarCopyWRAM
	ret

Function1003ab: ; unreferenced
	ld hl, w3_d000
	ld de, wcc60
	ld bc, $54
	ld a, $03
	call FarCopyWRAM
	ret

Function1003ba:
	ld hl, wccb4
	ld de, w3_d080
	ld bc, $54
	ld a, $03
	call FarCopyWRAM
	ret

Function1003c9:
	ld hl, w3_d080
	ld de, wccb4
	ld bc, $54
	ld a, $03
	call FarCopyWRAM
	ret

Function1003d8:
	ld hl, wccb4
	ld a, [hli]
	ld c, a
	ld b, 0
	push hl
	add hl, bc
	ld a, [wBGMapPalBuffer]
	ld [hl], a
	pop hl
	inc bc
	call Function10043a
	add hl, bc
	ld [hl], e
	inc hl
	ld [hl], d
	ld a, c
	add $02
	ld [wccb4], a
	ret

Function1003f5:
	ld a, [wcc60]
	sub $03
	ld [wcc60], a
	ld a, [wccb4]
	sub $03
	ld [wccb4], a
	ret

Function100406:
	ld a, [wcc60]
	sub $02
	ld c, a
	ld b, 0
	ld hl, wcc61
	call Function10043a
	add hl, bc
	ld a, [hli]
	cp e
	jr nz, .asm_100426
	ld a, [hld]
	cp d
	jr nz, .asm_100426
	dec hl
	ld a, [wBGMapPalBuffer]
	cp [hl]
	jr nz, .asm_10042d
	xor a
	ret

.asm_100426
	ld a, $f4
	ld [wcd2b], a
	jr .asm_100432

.asm_10042d
	ld a, $f3
	ld [wcd2b], a

.asm_100432
	push hl
	ld hl, wcd7c
	inc [hl]
	pop hl
	scf
	ret

Function10043a:
	push hl
	push bc
	ld de, 0
.asm_10043f
	ld a, [hli]
	add e
	ld e, a
	ld a, d
	adc 0
	ld d, a
	dec bc
	ld a, b
	or c
	jr nz, .asm_10043f
	pop bc
	pop hl
	ret

Jumptable_10044e:
	dw Function10046a
	dw Function10047c
	dw Function100493
	dw Function1004ba
	dw Function1004f4
	dw Function1004ce
	dw Function1004de
	dw Function1004a4
	dw Function100495
	dw Function1004ce
	dw Function1004de
	dw Function1004e9
	dw Function1004f4
	dw Function1004a4

Function10046a:
	ld hl, wBGMapPalBuffer
	inc [hl]
	call Function1003d8
	call Function1003ba
	ld a, [wcd27]
	inc a
	ld [wcd27], a
	ret

Function10047c:
	call Function100337
	ret c
	ret z
	cp $02
	jr z, .asm_100487
	jr .asm_10048d

.asm_100487
	ld a, $08
	ld [wcd27], a
	ret

.asm_10048d
	ld a, $02
	ld [wcd27], a
	ret

Function100493:
	jr asm_100497

Function100495:
	jr asm_100497

asm_100497:
	call Function100337
	ret c
	ret z
	ld a, [wcd27]
	inc a
	ld [wcd27], a
	ret

Function1004a4:
	call Function100406
	jr c, .asm_1004b8
	call Function1003c9
	call Function1003f5
	ld a, [wcd27]
	set 7, a
	ld [wcd27], a
	ret

.asm_1004b8
	scf
	ret

Function1004ba:
	call Function10038a
	and a
	jr nz, .asm_1004c8
	ld a, [wcd27]
	inc a
	ld [wcd27], a
	ret

.asm_1004c8
	ld a, $08
	ld [wcd27], a
	ret

Function1004ce:
	call Function100337
	ret c
	ret z
	cp $02
	ret nz
	ld a, [wcd27]
	inc a
	ld [wcd27], a
	ret

Function1004de:
	call Function100393
	ld a, [wcd27]
	inc a
	ld [wcd27], a
	ret

Function1004e9:
	call Function10038a
	ld a, [wcd27]
	inc a
	ld [wcd27], a
	ret

Function1004f4:
	call Function100337
	ret c
	ret z
	ld a, [wcd27]
	inc a
	ld [wcd27], a
	call Function10039c
	ret

Function100504:
	push de
	call Function3f20
	call UpdateSprites
	pop de
	hlcoord 4, 2
	call PlaceString
	ret

Function100513:
	call Function3f7c
	call PlaceVerticalMenuItems
	call InitVerticalMenuCursor
	ld hl, w2DMenuFlags1
	set 7, [hl]
	ret

Function100522:
	ld a, [wcd28]
	ld hl, Jumptable_10052a
	rst JumpTable
	ret

Jumptable_10052a:
	dw Function100534
	dw Function100545
	dw Function100545
	dw Function100545
	dw Function10054d

Function100534:
	call Function100513
	call UpdateSprites
	call ApplyTilemap
	ld a, [wcd28]
	inc a
	ld [wcd28], a
	ret

Function100545:
	ld a, [wcd28]
	inc a
	ld [wcd28], a
	ret

Function10054d:
	farcall MobileMenuJoypad
	ld a, c
	ld hl, wMenuJoypadFilter
	and [hl]
	ret z
	call MenuClickSound
	bit 0, a
	jr nz, .asm_100565
	bit 1, a
	jr nz, .asm_10056f
	ret

.asm_100565
	ld a, [wcd28]
	set 7, a
	ld [wcd28], a
	and a
	ret

.asm_10056f
	ld a, [wcd28]
	set 7, a
	ld [wcd28], a
	scf
	ret

Function100579:
	ld a, [wcd26]
	ld hl, Jumptable_100581
	rst JumpTable
	ret

Jumptable_100581:
	dw Function100585
	dw Function100597

Function100585:
	ld hl, MenuHeader_1005b2
	call LoadMenuHeader
	ld a, 0
	ld [wcd28], a
	ld a, [wcd26]
	inc a
	ld [wcd26], a

Function100597:
	call Function100522
	ld a, [wcd28]
	bit 7, a
	ret z
	jr nc, .asm_1005a6
	xor a
	ld [wMenuCursorY], a

.asm_1005a6
	call ExitMenu
	ld a, [wcd26]
	set 7, a
	ld [wcd26], a
	ret

MenuHeader_1005b2:
	db MENU_BACKUP_TILES ; flags
	db 6, 14
	db 10, 19
	dw MenuData_1005ba
	db 1 ; default option

MenuData_1005ba:
	db STATICMENU_CURSOR | STATICMENU_NO_TOP_SPACING ; flags
	db 2
	db "はい@"
	db "いいえ@"

Function1005c3:
	ld a, [wcd26]
	ld hl, Jumptable_1005cb
	rst JumpTable
	ret

Jumptable_1005cb:
	dw Function1005cf
	dw Function1005e1

Function1005cf:
	ld hl, MenuHeader_1005fc
	call LoadMenuHeader
	ld a, 0
	ld [wcd28], a
	ld a, [wcd26]
	inc a
	ld [wcd26], a

Function1005e1:
	call Function100522
	ld a, [wcd28]
	bit 7, a
	ret z
	jr nc, .asm_1005f0
	xor a
	ld [wMenuCursorY], a
.asm_1005f0
	call ExitMenu
	ld a, [wcd26]
	set 7, a
	ld [wcd26], a
	ret

MenuHeader_1005fc:
	db MENU_BACKUP_TILES ; flags
	db 6, 14
	db 10, 19
	dw MenuData_100604
	db 1 ; default option

MenuData_100604:
	db STATICMENU_CURSOR | STATICMENU_NO_TOP_SPACING ; flags
	db 2
	db "かける@"
	db "まつ@"

Mobile_CommunicationStandby:
	hlcoord 3, 10
	ld b, 1
	ld c, 11
	call Function3eea
	ld de, .String
	hlcoord 4, 11
	call PlaceString
	ret

.String:
	db "つうしんたいきちゅう!@"

AdvanceMobileInactivityTimerAndCheckExpired:
	push bc
	call IncrementMobileInactivityTimerByCFrames
	pop bc
	ld a, [wMobileInactivityTimerMinutes]
	cp b
	jr nc, .timed_out
	and a
	ret

.timed_out
	ld a, $fa
	ld [wcd2b], a
	scf
	ret

StartMobileInactivityTimer:
	xor a
	ld [wMobileInactivityTimerMinutes], a
	ld [wMobileInactivityTimerSeconds], a
	ld [wMobileInactivityTimerFrames], a
	ret

IncrementMobileInactivityTimerBy1Frame:
	ld c, 1
IncrementMobileInactivityTimerByCFrames:
	ld hl, wMobileInactivityTimerFrames ; timer?
	ld a, [hl]
	add c
	cp 60
	jr c, .seconds
	xor a

.seconds
	ld [hld], a
	ret c
	ld a, [hl]
	inc a
	cp 60
	jr c, .minutes
	xor a

.minutes
	ld [hld], a
	ret c
	inc [hl]
	ret

Function100665:
	call UpdateTime
	ld hl, wcd36
	ldh a, [hHours]
	ld [hli], a
	ldh a, [hMinutes]
	ld [hli], a
	ldh a, [hSeconds]
	ld [hl], a
	ret

Function100675:
	ld hl, wcd2a
	bit 2, [hl]
	set 2, [hl]
	ret nz
	call Function1006d3
	ret

Function100681:
	push hl
	ld hl, wcd2a
	bit 2, [hl]
	ld hl, wcd2a
	set 2, [hl]
	pop hl
	jr nz, .asm_100694
	push hl
	call Function1006d3
	pop hl
.asm_100694
	ld de, wcd32

Function100697:
	ld a, [de]
	and a
	jr nz, .asm_1006bb
	inc de
	push de
	call .asm_1006b4
	ld de, String1006c2
	call PlaceString
	ld h, b
	ld l, c
	pop de
	inc de
	call .asm_1006b4
	ld de, String1006c6
	call PlaceString
	ret

.asm_1006b4
	lb bc, PRINTNUM_LEADINGZEROS | 1, 2
	call PrintNum
	ret

.asm_1006bb
	ld de, String1006ca
	call PlaceString
	ret

String1006c2:
	db "ふん @"
String1006c6:
	db "びょう@"
String1006ca:
	db "1じかんいじょう@"

Function1006d3:
	call UpdateTime
	ld de, wcd34
	ld hl, wcd38

Function1006dc:
	ld a, [hld]
	ld c, a
	ldh a, [hSeconds]
	sub c
	jr nc, .asm_1006e5
	add $3c

.asm_1006e5
	ld [de], a
	dec de
	ld a, [hld]
	ld c, a
	ldh a, [hMinutes]
	sbc c
	jr nc, .asm_1006f0
	add $3c

.asm_1006f0
	ld [de], a
	dec de
	ld a, [hl]
	ld c, a
	ldh a, [hHours]
	sbc c
	jr nc, .asm_1006fb
	add MAX_HOUR

.asm_1006fb
	ld [de], a
	ret

MobileBattleResetTimer:
	ld a, BANK(sMobileBattleTimer)
	ld hl, sMobileBattleTimer
	call OpenSRAM
	xor a
	ld [hli], a
	ld [hli], a
	ld [hli], a
	call CloseSRAM
	ret

MobileBattleFixTimer:
	ld a, BANK(sMobileBattleTimer)
	ld hl, sMobileBattleTimer
	call OpenSRAM
	xor a ; MOBILE_BATTLE_ALLOWED_SECONDS
	ld [hli], a
	ld a, MOBILE_BATTLE_ALLOWED_MINUTES
	ld [hli], a
	xor a
	ld [hli], a
	call CloseSRAM
	ret

Function100720:
	xor a
	ld [wcd6a], a
	call UpdateTime
	ldh a, [hHours]
	ld [wcd72], a
	ldh a, [hMinutes]
	ld [wcd73], a
	ldh a, [hSeconds]
	ld [wcd74], a
	ld a, BANK(sMobileBattleTimer)
	ld hl, sMobileBattleTimer
	call OpenSRAM
	ld a, [hli]
	ld [wcd6c], a
	ld a, [hli]
	ld [wcd6d], a
	ld a, [hli]
	ld [wcd6e], a
	call CloseSRAM
	ld a, [wcd6d]
	ld [wcd6b], a
	ret

Function100754:
	call UpdateTime
	ldh a, [hHours]
	ld [wcd72], a
	ldh a, [hMinutes]
	ld [wcd73], a
	ldh a, [hSeconds]
	ld [wcd74], a
	ld a, [wcd6d]
	ld [wcd6b], a
	ld hl, wcd2a
	res 6, [hl]
	ret

Function100772:
	push de
	ld hl, wcd6c
	ld a, [de]
	cp [hl]
	jr c, .asm_10079a
	jr nz, .asm_10078c
	inc hl
	inc de
	ld a, [de]
	cp [hl]
	jr c, .asm_10079a
	jr nz, .asm_10078c
	inc hl
	inc de
	ld a, [de]
	cp [hl]
	jr c, .asm_10079a
	jr z, .asm_10079a

.asm_10078c
	pop hl
	ld a, [hli]
	ld [wcd6c], a
	ld a, [hli]
	ld [wcd6d], a
	ld a, [hli]
	ld [wcd6e], a
	ret

.asm_10079a
	pop de
	ret

Function10079c:
	ld a, [wcd21]
	cp $01
	jr nz, .dont_quit
	ld hl, wcd2a
	bit 5, [hl]
	jr nz, .dont_quit
	ld hl, wcd2a
	bit 6, [hl]
	jr nz, .dont_quit
	ld a, [wcd6a]
	add c
	cp 60
	jr nc, .overflow
	ld [wcd6a], a
	and a
	ret

.overflow
	sub 60
	ld [wcd6a], a
	ld d, b
	push de
	call Function1007f6
	pop de
	jr c, .quit
	ld a, c
	and a
	jr nz, .quit
	ld a, b
	cp 10
	jr nc, .quit
	ld a, d
	and a
	ret z
	ld a, [wcd6b]
	cp b
	ret z
	ld a, b
	ld [wcd6b], a
	call Function1008e0
	and a
	ret

.quit
	call Function1008e0
	ld hl, wcd2a
	set 4, [hl]
	ld a, $fc
	ld [wcd2b], a
	scf
	ret

.dont_quit
	and a
	ret

Function1007f6:
	call UpdateTime
	ld hl, wcd74
	ld de, wcd71
	call Function1006dc
	ld a, $04
	call OpenSRAM
	ld hl, $a802
	call Function100826
	call CloseSRAM
	ld hl, wcd6e
	call Function100826
	ldh a, [hHours]
	ld [wcd72], a
	ldh a, [hMinutes]
	ld [wcd73], a
	ldh a, [hSeconds]
	ld [wcd74], a
	ret

Function100826:
	ld a, [wcd71]
	add [hl]
	sub $3c
	jr nc, .asm_100830
	add $3c

.asm_100830
	ld [hld], a
	ccf
	ld a, [wcd70]
	adc [hl]
	sub $3c
	jr nc, .asm_10083c
	add $3c

.asm_10083c
	ld [hld], a
	ld b, a
	ccf
	ld a, [wcd6f]
	adc [hl]
	ld [hl], a
	ld c, a
	ret

Function100846:
	ld hl, wcd2a
	bit 5, [hl]
	jr nz, .asm_10087c
	ld a, [wcd6e]
	ld c, a
	ld a, 0
	sub c
	jr nc, .asm_100858
	add $3c

.asm_100858
	ld [wStringBuffer2 + 2], a
	ld a, [wcd6d]
	ld c, a
	ld a, $0a
	sbc c
	ld [wStringBuffer2 + 1], a
	xor a
	ld [wStringBuffer2], a
	ld de, String_10088e
	hlcoord 1, 14
	call PlaceString
	ld de, wStringBuffer2
	hlcoord 4, 16
	call Function100697
	ret

.asm_10087c
	ld de, String_10088e
	hlcoord 1, 14
	call PlaceString
	ld h, b
	ld l, c
	ld de, String_10089f
	call PlaceString
	ret

String_10088e:
	db   "モバイルたいせん できる"
	next "じかん@"

String_10089f:
	db " むせいげん@"

MobileBattleGetRemainingTime:
; Calculates the difference between 10 minutes and sMobileBattleTimer
; Returns minutes in c and seconds in b
	ld a, BANK(sMobileBattleTimer)
	ld hl, sMobileBattleTimer
	call OpenSRAM
	ld a, [hli]
	ld [wStringBuffer2], a
	ld a, [hli]
	ld [wStringBuffer2 + 1], a
	ld a, [hli]
	ld [wStringBuffer2 + 2], a
	call CloseSRAM
	ld a, [wStringBuffer2 + 2]
	ld b, a
	ld a, MOBILE_BATTLE_ALLOWED_SECONDS
	sub b
	jr nc, .no_carry_seconds
	add 60
.no_carry_seconds
	ld b, a
	ld a, [wStringBuffer2 + 1]
	ld c, a
	ld a, MOBILE_BATTLE_ALLOWED_MINUTES
	sbc c
	ld c, a
	jr c, .fail
	ld a, [wStringBuffer2]
	and a
	jr nz, .fail
	ret

.fail
	call MobileBattleFixTimer
	ld c, 0
	ret

Function1008e0:
	ldh a, [hBGMapMode]
	ld b, a
	ldh a, [hVBlank]
	ld c, a
	push bc
	xor a
	ldh [hBGMapMode], a
	ld a, $03
	ldh [hVBlank], a
	call Function100970
	call Function100902
	call Function100989
	call DelayFrame
	pop bc
	ld a, c
	ldh [hVBlank], a
	ld a, b
	ldh [hBGMapMode], a
	ret

Function100902:
	hlcoord 3, 10
	ld b, $01
	ld c, $0b
	call Textbox
	ld a, [wcd6d]
	ld c, a
	ld a, $0a
	sub c
	ld [wStringBuffer2], a
	jr z, .asm_10093f
	ld de, .string_100966
	hlcoord 4, 11
	call PlaceString
	hlcoord 8, 11
	lb bc, 1, 2
	ld de, wStringBuffer2
	call PrintNum
	ld de, SFX_TWO_PC_BEEPS
	call PlaySFX
	farcall ReloadMapPart
	ld c, $3c
	call DelayFrames
	ret

.asm_10093f
	ld de, .string_10095a
	hlcoord 4, 11
	call PlaceString
	ld de, SFX_4_NOTE_DITTY
	call PlaySFX
	farcall ReloadMapPart
	ld c, 120
	call DelayFrames
	ret

.string_10095a
	db "たいせん しゅうりょう@"
.string_100966
	db "のこり   ふん!@"

Function100970:
	hlcoord 0, 0
	ld de, w3_dc00
	call Function1009a5
	hlcoord 0, 0, wAttrmap
	ld de, w3_dd68
	call Function1009a5
	call Function1009d2
	call Function1009ae
	ret

Function100989:
	ld hl, w3_dc00
	decoord 0, 0
	call Function1009a5
	call Function1009ae
	farcall ReloadMapPart
	ld hl, w3_dd68
	decoord 0, 0, wAttrmap
	call Function1009a5
	ret

Function1009a5:
	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
	ld a, $03
	call FarCopyWRAM
	ret

Function1009ae:
	ldh a, [rSVBK]
	push af
	ld a, $03
	ldh [rSVBK], a

	ld hl, w3_d800
	decoord 0, 0, wAttrmap
	ld c, SCREEN_WIDTH
	ld b, SCREEN_HEIGHT
.loop_row
	push bc
.loop_col
	ld a, [hli]
	ld [de], a
	inc de
	dec c
	jr nz, .loop_col
	ld bc, BG_MAP_WIDTH - SCREEN_WIDTH
	add hl, bc
	pop bc
	dec b
	jr nz, .loop_row

	pop af
	ldh [rSVBK], a
	ret

Function1009d2:
	ldh a, [rSVBK]
	push af
	ld a, $03
	ldh [rSVBK], a

	ldh a, [rVBK]
	push af
	ld a, $01
	ldh [rVBK], a

	ld hl, w3_d800
	debgcoord 0, 0
	lb bc, $03, $24
	call Get2bpp

	pop af
	ldh [rVBK], a

	pop af
	ldh [rSVBK], a
	ret

Function1009f3:
	ldh a, [hJoyDown]
	and SELECT + A_BUTTON
	cp SELECT + A_BUTTON
	jr nz, .select_a
	ld hl, wcd2a
	set 4, [hl]
	ld a, $f8
	ld [wcd2b], a
	scf
	ret

.select_a
	xor a
	ret

_LinkBattleSendReceiveAction:
	call .StageForSend
	ld [wLinkBattleSentAction], a
	vc_hook Wireless_start_exchange
	farcall PlaceWaitingText
	ld a, [wLinkMode]
	cp LINK_MOBILE
	jr nz, .not_mobile

	call .MobileBattle_SendReceiveAction
	call Function100da5
	farcall FinishBattleAnim
	jr .done

.not_mobile
	call .LinkBattle_SendReceiveAction

.done
	ret

.StageForSend:
	ld a, [wBattlePlayerAction]
	and a ; BATTLEPLAYERACTION_USEMOVE?
	jr nz, .switch
	ld a, [wCurPlayerMove]
	ld b, BATTLEACTION_STRUGGLE
	cp STRUGGLE
	jr z, .struggle
	ld b, BATTLEACTION_SKIPTURN
	cp $ff
	jr z, .struggle
	ld a, [wCurMoveNum]
	jr .use_move

.switch
	ld a, [wCurPartyMon]
	add BATTLEACTION_SWITCH1
	jr .use_move

.struggle
	ld a, b

.use_move
	and $0f
	ret

.LinkBattle_SendReceiveAction:
	ld a, [wLinkBattleSentAction]
	ld [wPlayerLinkAction], a
	ld a, $ff
	ld [wOtherPlayerLinkAction], a
.waiting
	call LinkTransfer
	call DelayFrame
	ld a, [wOtherPlayerLinkAction]
	inc a
	jr z, .waiting

	vc_hook Wireless_end_exchange
	vc_patch Wireless_net_delay_3
if DEF(_CRYSTAL11_VC)
	ld b, 26
else
	ld b, 10
endc
	vc_patch_end
.receive
	call DelayFrame
	call LinkTransfer
	dec b
	jr nz, .receive

	vc_hook Wireless_start_send_zero_bytes
	vc_patch Wireless_net_delay_4
if DEF(_CRYSTAL11_VC)
	ld b, 26
else
	ld b, 10
endc
	vc_patch_end
.acknowledge
	call DelayFrame
	call LinkDataReceived
	dec b
	jr nz, .acknowledge

	vc_hook Wireless_end_send_zero_bytes
	ld a, [wOtherPlayerLinkAction]
	ld [wBattleAction], a
	ret

.MobileBattle_SendReceiveAction:
	call Function100acf
	call StartMobileInactivityTimer
	ld a, 0
	ld [wcd27], a
.asm_100a92
	call DelayFrame
	call GetJoypad
	farcall Function100382
	ld c, $01
	ld b, $03
	push bc
	call AdvanceMobileInactivityTimerAndCheckExpired
	pop bc
	jr c, .asm_100ac7
	ld b, $01
	call Function10079c
	jr c, .asm_100ac7
	call Function1009f3
	jr c, .asm_100ac7
	ld a, [wcd2b]
	and a
	jr nz, .asm_100ac7
	ld a, [wcd27]
	bit 7, a
	jr z, .asm_100a92
	call Function100ae7
	jr .asm_100ace

.asm_100ac7
	ld a, $0f
	ld [wd430], a
	jr .asm_100ace

.asm_100ace
	ret

Function100acf:
	ld de, Unknown_100b0a
	ld hl, wccb5
	ld a, [wLinkBattleSentAction]
	ld [hli], a
	ld c, $01
.asm_100adb
	ld a, [de]
	inc de
	ld [hli], a
	inc c
	and a
	jr nz, .asm_100adb
	ld a, c
	ld [wccb4], a
	ret

Function100ae7:
	ld de, Unknown_100b0a
	ld hl, wcc62
.asm_100aed
	ld a, [de]
	inc de
	and a
	jr z, .asm_100af8
	cp [hl]
	jr nz, .asm_100aff
	inc hl
	jr .asm_100aed

.asm_100af8
	ld a, [wcc61]
	ld [wd430], a
	ret

.asm_100aff
	ld a, $0f
	ld [wd430], a
	ld a, $f1
	ld [wcd2b], a
	ret

pushc
setcharmap ascii

Unknown_100b0a:
	db "tetsuji", 0

popc

Mobile_LoadBattleMenu:
	call Function100dd8
	ret c
	ld hl, BattleMenuHeader
	ld a, BANK(BattleMenuHeader)
	ld de, LoadMenuHeader
	call FarCall_de
	ld a, BANK(BattleMenuHeader)
	ld [wMenuData_2DMenuItemStringsBank], a
	ld a, [wBattleMenuCursorPosition]
	ld [wMenuCursorPosition], a
	call Function100e72
	call Function100b45
	farcall InitPartyMenuBGPal7
	call Function100ed4
	ld a, [wMenuCursorPosition]
	ld [wBattleMenuCursorPosition], a
	call ExitMenu
	ret

Function100b45:
	call Function100b7a
.loop
	call Mobile_SetOverworldDelay
	farcall MobileMenuJoypad
	push bc
	farcall HDMATransferTilemapToWRAMBank3
	call Function100e2d
	pop bc
	jr c, .asm_100b6b
	ld a, [wMenuJoypadFilter]
	and c
	jr z, .loop
	farcall Mobile_GetMenuSelection
	ret

.asm_100b6b
	ld a, [w2DMenuNumCols]
	ld c, a
	ld a, [w2DMenuNumRows]
	call SimpleMultiply
	ld [wMenuCursorPosition], a
	and a
	ret

Function100b7a:
	ld hl, CopyMenuData
	ld a, [wMenuData_2DMenuItemStringsBank]
	rst FarCall
	farcall Draw2DMenu
	farcall MobileTextBorder
	call UpdateSprites
	call ApplyTilemap
	farcall Init2DMenuCursorPosition
	ld hl, w2DMenuFlags1
	set 7, [hl]
	ret

Mobile_MoveSelectionScreen:
	xor a
	ld [wSwappingMove], a
	farcall CheckPlayerHasUsableMoves
	ret z
	call Function100dd8
	jp c, xor_a_dec_a
	call Function100e72
	call .GetMoveSelection
	push af
	farcall InitPartyMenuBGPal7
	call Function100ed4
	pop af
	ret

.GetMoveSelection:
	xor a
	ldh [hBGMapMode], a
	call .ListMoves
	call Function100c98
.master_loop
	farcall MoveInfoBox
.loop
	call Mobile_SetOverworldDelay
	farcall MobileMenuJoypad
	push bc
	farcall HDMATransferTilemapToWRAMBank3
	call Function100e2d
	pop bc
	jr c, .b_button
	ld a, [wMenuJoypadFilter]
	and c
	bit D_UP_F, a
	jp nz, .d_up
	bit D_DOWN_F, a
	jp nz, .d_down
	bit A_BUTTON_F, a
	jr nz, .a_button
	bit B_BUTTON_F, a
	jr nz, .b_button
	jr .loop

.d_up
	ld a, [wMenuCursorY]
	and a
	jp nz, .master_loop
	ld a, [wNumMoves]
	inc a
	ld [wMenuCursorY], a
	jp .master_loop

.d_down
	ld a, [wMenuCursorY]
	ld b, a
	ld a, [wNumMoves]
	inc a
	inc a
	cp b
	jp nz, .master_loop
	ld a, $01
	ld [wMenuCursorY], a
	jp .master_loop

.b_button
	ld a, [wMenuCursorY]
	dec a
	ld [wCurMoveNum], a
	ld a, $01
	and a
	ret

.a_button
	ld a, [wMenuCursorY]
	dec a
	ld [wCurMoveNum], a
	ld a, [wMenuCursorY]
	dec a
	ld c, a
	ld b, 0
	ld hl, wBattleMonPP
	add hl, bc
	ld a, [hl]
	and $3f
	jr z, .no_pp_left
	ld a, [wPlayerDisableCount]
	swap a
	and $0f
	dec a
	cp c
	jr z, .move_disabled
	ld a, [wMenuCursorY]
	dec a
	ld c, a
	ld b, 0
	ld hl, wBattleMonMoves
	add hl, bc
	ld a, [hl]
	ld [wCurPlayerMove], a
	xor a
	ret

.move_disabled
	ld hl, BattleText_TheMoveIsDisabled
	jr .print_text

.no_pp_left
	ld hl, BattleText_TheresNoPPLeftForThisMove

.print_text
	call StdBattleTextbox
	call SafeLoadTempTilemapToTilemap
	jp .GetMoveSelection

.ListMoves:
	hlcoord 0, 8
	ld b, 8
	ld c, 8
	call Textbox
	ld hl, wBattleMonMoves
	ld de, wListMoves_MoveIndicesBuffer
	ld bc, NUM_MOVES
	call CopyBytes
	ld a, SCREEN_WIDTH * 2
	ld [wListMovesLineSpacing], a
	hlcoord 2, 10
	predef ListMoves
	ret

Function100c98:
	ld de, .data
	call Load2DMenuData
	ld a, [wNumMoves]
	inc a
	ld [w2DMenuNumRows], a
	ld a, [wCurMoveNum]
	inc a
	ld [wMenuCursorY], a
	ret

.data:
	db 10, 1 ; cursor start y, x
	db -1, 1 ; rows, columns
	db $a0, $00 ; flags
	dn 2, 0 ; cursor offsets
	db D_UP | D_DOWN | A_BUTTON | B_BUTTON ; accepted buttons

Mobile_PartyMenuSelect:
	call Function100dd8
	ret c
	ld hl, w2DMenuFlags1
	set 7, [hl]
	res 6, [hl]
.loop
	call Mobile_SetOverworldDelay
	farcall MobileMenuJoypad
	push bc
	farcall PlaySpriteAnimations
	farcall HDMATransferTilemapToWRAMBank3
	call MobileComms_CheckInactivityTimer
	pop bc
	jr c, .done
	ld a, [wMenuJoypadFilter]
	and c
	jr z, .loop
	call PlaceHollowCursor
	ld a, [wPartyCount]
	inc a
	ld b, a
	ld a, [wMenuCursorY]
	cp b
	jr z, .done
	ld [wPartyMenuCursor], a
	ldh a, [hJoyLast]
	ld b, a
	bit 1, b
	jr nz, .done
	ld a, [wMenuCursorY]
	dec a
	ld [wCurPartyMon], a
	ld c, a
	ld b, 0
	ld hl, wPartySpecies
	add hl, bc
	ld a, [hl]
	ld [wCurPartySpecies], a
	ld de, SFX_READ_TEXT_2
	call PlaySFX
	call WaitSFX
	and a
	ret

.done
	ld de, SFX_READ_TEXT_2
	call PlaySFX
	call WaitSFX
	scf
	ret

MobileBattleMonMenu:
	call Function100dd8
	ret c
	call Function100d67
	ld hl, w2DMenuFlags1
	set 7, [hl]
	res 6, [hl]
.asm_100d30
	call Mobile_SetOverworldDelay
	farcall MobileMenuJoypad
	push bc
	farcall PlaySpriteAnimations
	farcall HDMATransferTilemapToWRAMBank3
	call MobileComms_CheckInactivityTimer
	pop bc
	jr c, .asm_100d54
	ld a, [wMenuJoypadFilter]
	and c
	jr nz, .asm_100d56
	jr .asm_100d30

.asm_100d54
	scf
	ret

.asm_100d56
	push af
	ld de, SFX_READ_TEXT_2
	call PlaySFX
	pop af
	bit 1, a
	jr z, .asm_100d65
	ret z
	scf
	ret

.asm_100d65
	and a
	ret

Function100d67:
	ld hl, .MenuHeader
	call CopyMenuHeader
	xor a
	ldh [hBGMapMode], a
	call MenuBox
	call UpdateSprites
	call PlaceVerticalMenuItems
	call WaitBGMap
	call CopyMenuData
	call InitVerticalMenuCursor
	ld hl, w2DMenuFlags1
	set 6, [hl]
	ret

.MenuHeader:
	db 0 ; flags
	menu_coords 11, 11, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1
	dw .MenuData
	db 1 ; default option

.MenuData:
	db STATICMENU_CURSOR | STATICMENU_NO_TOP_SPACING ; flags
	db 3
	db "いれかえる@"  ; TRADE
	db "つよさをみる@" ; STATS
	db "キャンセル@"  ; CANCEL

Function100da5:
	ld hl, wcd2a
	res 3, [hl]
	ld hl, wcd29
	res 0, [hl]
	ret

Function100db0:
	ld hl, wcd2a
	bit 3, [hl]
	jr nz, .asm_100dbe
	ld hl, wcd2a
	set 3, [hl]
	scf
	ret

.asm_100dbe
	xor a
	ret

Function100dc0:
	ld a, [wLinkMode]
	cp LINK_MOBILE
	jr nz, .mobile
	ld hl, wcd2a
	bit 3, [hl]
	jr z, .mobile
	scf
	ret

.mobile
	xor a
	ret

Mobile_SetOverworldDelay:
	ld a, 30
	ld [wOverworldDelay], a
	ret

Function100dd8:
	ld c, $01
	ld b, $03
	farcall AdvanceMobileInactivityTimerAndCheckExpired
	jr c, .asm_100dfb
	ld c, $3c
	ld b, $01
	call Function10079c
	jr c, .asm_100dfb
	farcall Function10032e
	ld a, [wcd2b]
	and a
	jr nz, .asm_100dfb
	xor a
	ret

.asm_100dfb
	scf
	ret

MobileComms_CheckInactivityTimer:
	ld a, [wOverworldDelay]
	ld c, a
	ld a, 30
	sub c
	ld c, a
	ld b, 3
	push bc
	farcall AdvanceMobileInactivityTimerAndCheckExpired ; useless to farcall
	pop bc
	jr c, .quit
	ld b, 1
	call Function10079c
	jr c, .quit
	call Function1009f3
	jr c, .quit
	farcall Function10032e ; useless to farcall
	ld a, [wcd2b]
	and a
	jr nz, .quit
	xor a
	ret

.quit
	scf
	ret

Function100e2d:
	ld a, [wOverworldDelay]
	ld c, a
	ld a, 30
	sub c
	ld c, a
	ld b, 3
	push bc
	farcall AdvanceMobileInactivityTimerAndCheckExpired
	pop bc
	jr c, .asm_100e61
	ld b, 1
	call Function10079c
	jr c, .asm_100e61
	call Function1009f3
	jr c, .asm_100e61
	farcall Function10032e
	ld a, [wcd2b]
	and a
	jr nz, .asm_100e61
	call Function100e63
	call Function100e84
	xor a
	ret

.asm_100e61
	scf
	ret

Function100e63:
	ld a, e
	cp $02
	ret nz
	call Function100db0
	ret nc
	ld de, SFX_ELEVATOR_END
	call PlaySFX
	ret

Function100e72:
	xor a
	ld hl, wcd29
	bit 0, [hl]
	jr z, .asm_100e7c
	ld a, $0a

.asm_100e7c
	ld [wcd67], a
	xor a
	ld [wcd68], a
	ret

Function100e84:
	ld a, [wcd67]
	ld hl, Jumptable_100e8c
	rst JumpTable
	ret

Jumptable_100e8c:
	dw Function100ea2
	dw Function100eae
	dw Function100eb4
	dw Function100eae
	dw Function100eb4
	dw Function100eae
	dw Function100eb4
	dw Function100eae
	dw Function100eb4
	dw Function100eae
	dw Function100ec4

Function100ea2:
	call Function100dc0
	ret nc
	ld hl, wcd29
	set 0, [hl]
	call Function100ec5

Function100eae:
	scf
	call Function100eca
	jr asm_100eb8

Function100eb4:
	and a
	call Function100eca

asm_100eb8:
	ld hl, wcd68
	inc [hl]
	ld a, [hl]
	cp $02
	ret c
	ld [hl], 0
	jr Function100ec5

Function100ec4:
	ret

Function100ec5:
	ld hl, wcd67
	inc [hl]
	ret

Function100eca:
	farcall Mobile_InitPartyMenuBGPal7
	call Function100ed4
	ret

Function100ed4:
	farcall ApplyPals
	ld a, TRUE
	ldh [hCGBPalUpdate], a
	ret

Function100edf:
	ld hl, Unknown_100fc0
	ld c, 1
	jr Function100f02

Function100ee6:
	ld hl, Unknown_100fc0
	ld c, 2
	jr Function100f02

Function100eed:
	ld hl, Unknown_100feb
	ld c, 1
	jr Function100f02

Function100ef4:
	ld hl, Unknown_100ff3
	ld c, 1
	jr Function100f02

Function100efb: ; unreferenced
	ld hl, Unknown_10102c
	ld c, 1
	jr Function100f02

Function100f02:
	ld a, c
	ld [wStringBuffer2], a
	; someting that was previously stored in de gets backed up to here
	ld a, e
	ld [wStringBuffer2 + 1], a
	ld a, d
	ld [wStringBuffer2 + 2], a
	; empty this
	xor a
	ld [wStringBuffer2 + 4], a
	ld [wStringBuffer2 + 5], a
.loop
	ld a, [hl]
	cp $ff
	jr z, .done
	ld [wStringBuffer2 + 3], a ; bank
	push hl
	inc hl
	; addr 1
	ld a, [hli]
	ld e, a
	ld a, [hli]
	ld d, a
	; size
	ld a, [hli]
	ld c, a
	ld a, [hli]
	ld b, a
	; addr 2
	ld a, [hli]
	ld h, [hl]
	ld l, a
	call Function100f3d
	; next line
	pop hl
	ld de, 7
	add hl, de
	jr .loop

.done
	; recover the values into bc
	ld a, [wStringBuffer2 + 4]
	ld c, a
	ld a, [wStringBuffer2 + 5]
	ld b, a
	ret

Function100f3d:
	; parameter
	ld a, [wStringBuffer2]
	cp $02
	jr z, .two
	cp $01
	jr z, .one
	cp $03
	jr z, .three
	ret

.three
	; what was once in de gets copied to hl,
	; modified by Function100f8d, and put back
	; into this backup
	ld a, [wStringBuffer2 + 1]
	ld l, a
	ld a, [wStringBuffer2 + 2]
	ld h, a
	call Function100f8d
	ld a, l
	ld [wStringBuffer2 + 1], a
	ld a, h
	ld [wStringBuffer2 + 2], a
	ret

.two
	; hl gets backed up to de, then
	; do the same as in .three
	ld d, h
	ld e, l
	ld a, [wStringBuffer2 + 1]
	ld l, a
	ld a, [wStringBuffer2 + 2]
	ld h, a
	call Function100f8d
	ld a, l
	ld [wStringBuffer2 + 1], a
	ld a, h
	ld [wStringBuffer2 + 2], a
	ret

.one
	; de gets copied to hl, then
	; load the backup into de,
	; finally run Function100f8d
	; and store the de result
	ld h, d
	ld l, e
	ld a, [wStringBuffer2 + 1]
	ld e, a
	ld a, [wStringBuffer2 + 2]
	ld d, a
	call Function100f8d
	ld a, e
	ld [wStringBuffer2 + 1], a
	ld a, d
	ld [wStringBuffer2 + 2], a
	ret

Function100f8d:
	push hl
	ld a, [wStringBuffer2 + 4]
	ld l, a
	ld a, [wStringBuffer2 + 5]
	ld h, a
	add hl, bc
	ld a, l
	ld [wStringBuffer2 + 4], a
	ld a, h
	ld [wStringBuffer2 + 5], a
	pop hl
	ld a, [wStringBuffer2 + 3]
	bit 7, a
	res 7, a
	jr z, .sram
	and a
	jr nz, .far_wram
	call CopyBytes
	ret

.far_wram
	and $7f
	call FarCopyWRAM
	ret

.sram
	call OpenSRAM
	call CopyBytes
	call CloseSRAM
	ret

MACRO macro_100fc0
	; first byte:
	;     Bit 7 set: Not SRAM
	;     Lower 7 bits: Bank if SRAM
	; address, size[, OT address]
	db ($80 * (\1 >= SRAM_End)) | (BANK(\1) * (\1 < SRAM_End))
	dw \1, \2
	if _NARG == 3
		dw \3
	else
		dw NULL
	endc
ENDM

Unknown_100fc0:
	macro_100fc0 wPlayerName,          NAME_LENGTH,                           wOTPlayerName
	macro_100fc0 wPartyCount,          1 + PARTY_LENGTH + 1,                  wOTPartyCount
	macro_100fc0 wPlayerID,            2,                                     wOTPlayerID
	macro_100fc0 wPartyMons,           PARTYMON_STRUCT_LENGTH * PARTY_LENGTH, wOTPartyMons
	macro_100fc0 wPartyMonOTs,         NAME_LENGTH * PARTY_LENGTH,            wOTPartyMonOTs
	macro_100fc0 wPartyMonNicknames,   MON_NAME_LENGTH * PARTY_LENGTH,        wOTPartyMonNicknames
	db -1 ; end

Unknown_100feb:
	macro_100fc0 sPartyMail,           MAIL_STRUCT_LENGTH * PARTY_LENGTH
	db -1 ; end

Unknown_100ff3:
	macro_100fc0 wdc41,           1
	macro_100fc0 wPlayerName,     NAME_LENGTH
	macro_100fc0 wPlayerName,     NAME_LENGTH
	macro_100fc0 wPlayerID,       2
	macro_100fc0 wSecretID,       2
	macro_100fc0 wPlayerGender,   1
	macro_100fc0 s4_a603,         8
	macro_100fc0 sEZChatMessages, EASY_CHAT_MESSAGE_LENGTH * 4
	db -1 ; end

Unknown_10102c:
	macro_100fc0 wOTPlayerName,        NAME_LENGTH
	macro_100fc0 wOTPlayerID,          2
	macro_100fc0 wOTPartyMonNicknames, MON_NAME_LENGTH * PARTY_LENGTH
	macro_100fc0 wOTPartyMonOTs,       NAME_LENGTH * PARTY_LENGTH
	macro_100fc0 wOTPartyMons,         PARTYMON_STRUCT_LENGTH * PARTY_LENGTH
	db -1 ; end

Function101050:
	call Function10107d
	ld a, [wOTPartyCount]
rept 2 ; ???
	ld hl, wc608
endr
	ld bc, wc7bb - wc608
	call Function1010de
	ld hl, wc7bb
	ld [hl], e
	inc hl
	ld [hl], d
	ld a, BANK(s7_a001)
	call OpenSRAM
	ld hl, wc608
	ld de, s7_a001
	ld bc, wc7bd - wc608
	call CopyBytes
	call CloseSRAM
	ret

Function10107d:
	xor a
	ld hl, wc608
	ld bc, wc7bd - wc608
	call ByteFill
	ld hl, wOTPlayerName
	ld de, wc608
	ld bc, NAME_LENGTH
	call CopyBytes
	ld hl, wd271
	ld a, [hli]
	ld [wc608 + 11], a
	ld a, [hl]
	ld [wc608 + 12], a
	ld hl, wOTPartyMonNicknames
	ld de, wc608 + 13
	ld bc, NAME_LENGTH
	call .CopyAllFromOT
	ld hl, wOTPartyMonOTs
	ld de, wOTClassName + 1
	ld bc, NAME_LENGTH
	call .CopyAllFromOT
	ld hl, wOTPartyMon1Species
	ld de, wc699
	ld bc, PARTYMON_STRUCT_LENGTH
	call .CopyAllFromOT
	ld a, $50
	ld [wc7b9], a
	ld a, $33
	ld [wc7ba], a
	ret

.CopyAllFromOT:
	push hl
	ld hl, 0
	ld a, [wOTPartyCount]
	call AddNTimes
	ld b, h
	ld c, l
	pop hl
	call CopyBytes
	ret

Function1010de:
	push hl
	push bc
	ld de, 0
.loop
	ld a, [hli]
	add e
	ld e, a
	ld a, d
	adc 0
	ld d, a
	dec bc
	ld a, b
	or c
	jr nz, .loop
	pop bc
	pop hl
	ret

LoadSelectedPartiesForColosseum:
	xor a
	ld hl, wStringBuffer2
	ld bc, 9
	call ByteFill
	ld hl, wPlayerMonSelection
	ld de, wPartyCount
	call .CopyThreeSpecies
	ld hl, wPlayerMonSelection
	ld de, wPartyMon1Species
	call .CopyPartyStruct
	ld hl, wPlayerMonSelection
	ld de, wPartyMonOTs
	call .CopyName
	ld hl, wPlayerMonSelection
	ld de, wPartyMonNicknames
	call .CopyName
	ld hl, wOTMonSelection
	ld de, wOTPartyCount
	call .CopyThreeSpecies
	ld hl, wOTMonSelection
	ld de, wOTPartyMon1Species
	call .CopyPartyStruct
	ld hl, wOTMonSelection
	ld de, wOTPartyMonOTs
	call .CopyName
	ld hl, wOTMonSelection
	ld de, wOTPartyMonNicknames
	call .CopyName
	ret

.CopyThreeSpecies:
; Load the 3 choices to the buffer
	push de
	ld bc, wStringBuffer2 + NAME_LENGTH_JAPANESE
	xor a
.party_loop
	push af
	call .GetNthSpecies
	ld [bc], a
	inc bc
	pop af
	inc a
	cp 3
	jr nz, .party_loop
	pop de
; Copy the 3 choices to the party
	ld a, 3
	ld [de], a
	inc de
	ld hl, wStringBuffer2 + NAME_LENGTH_JAPANESE
	ld bc, 3
	call CopyBytes
	ld a, $ff
	ld [de], a
	ret

.GetNthSpecies:
; Preserves hl and de
; Get the index of the Nth selection
	push hl
	add l
	ld l, a
	ld a, h
	adc 0
	ld h, a
	ld a, [hl]
	pop hl
; Get the corresponding species
	push de
	inc de
	add e
	ld e, a
	ld a, d
	adc 0
	ld d, a
	ld a, [de]
	pop de
	ret

.CopyPartyStruct:
	ld bc, PARTYMON_STRUCT_LENGTH
	jr .ContinueCopy

.CopyName:
	ld bc, NAME_LENGTH

.ContinueCopy:
	; Copy, via wc608...
	ld a, LOW(wc608)
	ld [wStringBuffer2], a
	ld a, HIGH(wc608)
	ld [wStringBuffer2 + 1], a
	; ... bc bytes...
	ld a, c
	ld [wStringBuffer2 + 2], a
	ld a, b
	ld [wStringBuffer2 + 3], a
	; ... to de...
	ld a, e
	ld [wStringBuffer2 + 4], a
	ld a, d
	ld [wStringBuffer2 + 5], a
	; ... 3 times.
	ld a, 3
.big_copy_loop
	push af
	ld a, [hli]
	push hl
	push af
	call .GetDestinationAddress
	call .GetCopySize
	pop af
	call AddNTimes
	ld a, [wStringBuffer2]
	ld e, a
	ld a, [wStringBuffer2 + 1]
	ld d, a
	call CopyBytes
	ld a, e
	ld [wStringBuffer2], a
	ld a, d
	ld [wStringBuffer2 + 1], a
	pop hl
	pop af
	dec a
	jr nz, .big_copy_loop
	call .GetCopySize
	ld a, 3
	ld hl, 0
	call AddNTimes
	ld b, h
	ld c, l
	call .GetDestinationAddress
	ld d, h
	ld e, l
	ld hl, wc608
	call CopyBytes
	ret

.GetDestinationAddress:
	ld a, [wStringBuffer2 + 4]
	ld l, a
	ld a, [wStringBuffer2 + 5]
	ld h, a
	ret

.GetCopySize:
	ld a, [wStringBuffer2 + 2]
	ld c, a
	ld a, [wStringBuffer2 + 3]
	ld b, a
	ret

Function1011f1:
	ld a, BANK(s4_a60c)
	call OpenSRAM
	ld a, [s4_a60c]
	ld [wdc41], a
	call CloseSRAM
	ld hl, wdc41
	res 4, [hl]
	ld hl, wGameTimerPaused
	bit GAME_TIMER_MOBILE_F, [hl]
	jr z, .skip
	ld hl, wdc41
	set 4, [hl]

.skip
	call Function10209c
	xor a
	ld [wdc5f], a
	ld [wdc60], a
	ld a, LINK_MOBILE
	ld [wLinkMode], a
	ret

Function101220:
	xor a
	ld [wLinkMode], a
	ret

Function101225:
	ld d, 1
	ld e, BANK(Jumptable_101297)
	ld bc, Jumptable_101297
	call Function100000
	jr Function10123d

Function101231:
	ld d, 2
	ld e, BANK(Jumptable_101297)
	ld bc, Jumptable_101297
	call Function100000
	jr Function10123d

Function10123d:
	xor a
	ld [wScriptVar], a
	ld a, c
	ld hl, Jumptable_101247
	rst JumpTable
	ret

Jumptable_101247:
	dw Function101251
	dw Function10127d
	dw Function10127c
	dw Function10126c
	dw Function101265

Function101251:
	call UpdateSprites
	call RefreshScreen
	ld hl, ClosingLinkText
	call Function1021e0
	call Function1020ea
	ret c
	call Function102142
	ret

Function101265:
	ld hl, LinkTerminatedText
	call Function1021e0
	ret

Function10126c:
	call UpdateSprites
	farcall Script_reloadmappart
	ld hl, ClosingLinkText
	call Function1021e0
	ret

Function10127c:
	ret

Function10127d:
	ret

Function10127e:
	ld a, [wdc5f]
	and a
	jr z, .zero
	cp 1
	ld c, $27
	jr z, .load
	cp 2
	ld c, $37
	jr z, .load
.zero
	ld c, 0
.load
	ld a, c
	ld [wMobileCommsJumptableIndex], a
	ret

Jumptable_101297:
	dw Function101a97                         ; 00
	dw Function101ab4                         ; 01
	dw Function101475                         ; 02
	dw Function101b0f                         ; 03
	dw Function101438                         ; 04
	dw Function101b2b                         ; 05
	dw Function101b59                         ; 06
	dw Function101475                         ; 07
	dw Function101b70                         ; 08
	dw Function101438                         ; 09
	dw Function101b8f                         ; 0a
	dw Function101d7b                         ; 0b
	dw Function101d95                         ; 0c
	dw Function101475                         ; 0d
	dw Function101db2                         ; 0e
	dw Function101e4f                         ; 0f
	dw Function101475                         ; 10
	dw Function101e64                         ; 11
	dw Function101e4f                         ; 12
	dw Function101475                         ; 13
	dw Function101e64                         ; 14
	dw Function101d95                         ; 15
	dw Function101475                         ; 16
	dw Function101db2                         ; 17
	dw Function101dd0                         ; 18
	dw Function101de3                         ; 19
	dw Function101e39                         ; 1a
	dw Function101e09                         ; 1b
	dw Function101e4f                         ; 1c
	dw Function101475                         ; 1d
	dw Function101e64                         ; 1e
	dw Function101d95                         ; 1f
	dw Function101475                         ; 20
	dw Function101db2                         ; 21
	dw Function101e09                         ; 22
	dw Function101e31                         ; 23
	dw Function101bc8                         ; 24
	dw Function101438                         ; 25
	dw Function101be5                         ; 26
	dw Function101ac6                         ; 27
	dw Function101ab4                         ; 28
	dw Function101475                         ; 29
	dw Function101c11                         ; 2a
	dw Function1014f4                         ; 2b
	dw Function101cc8                         ; 2c
	dw Function1014e2                         ; 2d
	dw Function1014e2                         ; 2e
	dw Function101d10                         ; 2f
	dw Function101d2a                         ; 30
	dw Function101d2a                         ; 31
	dw Function101507                         ; 32
	dw Function10156d                         ; 33
	dw Function101557                         ; 34
	dw Function10158a                         ; 35
	dw Function101c42                         ; 36
	dw Function101aed                         ; 37
	dw Function101ab4                         ; 38
	dw Function101475                         ; 39
	dw Function101c2b                         ; 3a
	dw Function1014f4                         ; 3b
	dw Function101cdf                         ; 3c
	dw Function1014e2                         ; 3d
	dw Function1014e2                         ; 3e
	dw Function101d1e                         ; 3f
	dw Function101d2a                         ; 40
	dw Function101d2a                         ; 41
	dw Function101507                         ; 42
	dw Function10156d                         ; 43
	dw Function101544                         ; 44
	dw Function10158a                         ; 45
	dw Function101c42                         ; 46
	dw Function101c50                         ; 47
	dw Function1014ce                         ; 48
	dw Function101cf6                         ; 49
	dw Function101826                         ; 4a
	dw Function1017e4                         ; 4b
	dw Function1017f1                         ; 4c
	dw Function1018a8                         ; 4d
	dw Function1018d6                         ; 4e
	dw Function1017e4                         ; 4f
	dw Function1017f1                         ; 50
	dw Function1018e1                         ; 51
	dw Function1015df                         ; 52
	dw Function10167d                         ; 53
	dw Function10168a                         ; 54
	dw Function10162a                         ; 55
	dw Function1015be                         ; 56
	dw Function10167d                         ; 57
	dw Function10168a                         ; 58
	dw Function10161f                         ; 59
	dw Function10159d                         ; 5a
	dw Function10167d                         ; 5b
	dw Function10168a                         ; 5c
	dw Function101600                         ; 5d
	dw Function101d03                         ; 5e
	dw Function101d6b                         ; 5f
	dw Function10159d                         ; 60
	dw Function1014ce                         ; 61
	dw Function10168e                         ; 62
	dw Function101600                         ; 63
	dw Function101913                         ; 64
	dw Function10194b                         ; 65
	dw _SelectMonsForMobileBattle             ; 66
	dw Function1017e4                         ; 67
	dw Function1017f5                         ; 68
	dw _StartMobileBattle                     ; 69
	dw Function101537                         ; 6a
	dw Function101571                         ; 6b
	dw Function101c92                         ; 6c
	dw Function10152a                         ; 6d
	dw Function101571                         ; 6e
	dw Function101a4f                         ; 6f
	dw Function101cbc                         ; 70
	dw Function101c62                         ; 71
	dw Function101537                         ; 72
	dw Function101571                         ; 73
	dw Function101c92                         ; 74
	dw Function10152a                         ; 75
	dw Function101571                         ; 76
	dw Function101ca0                         ; 77
	dw Function101475                         ; 78
	dw Function101cbc                         ; 79

Function10138b:
	farcall Function8adcc
	ld c, 0
	jr c, .asm_101396
	inc c

.asm_101396
	sla c
	ld a, [wcd2f]
	and a
	jr z, .asm_10139f
	inc c

.asm_10139f
	sla c
	ld a, [wcd21]
	cp $01
	jr z, .asm_1013a9
	inc c

.asm_1013a9
	ret

Function1013aa:
	call ClearBGPalettes
	call Call_ExitMenu
	call ReloadTilesetAndPalettes
	farcall Function106464
	call UpdateSprites
	call FinishExitMenu
	ret

Function1013c0:
	farcall BlankScreen
	farcall Stubbed_Function106462
	farcall Function106464
	call FinishExitMenu
	ret

Function1013d6:
	farcall HDMATransferAttrmapAndTilemapToWRAMBank3
	ret

Function1013dd:
	call CGBOnly_CopyTilemapAtOnce
	ret

Function1013e1: ; unreferenced
	push de
	inc de
	ld b, a
	ld c, 0
.asm_1013e6
	inc c
	ld a, [hli]
	ld [de], a
	inc de
	and a
	jr z, .asm_1013f1
	dec b
	jr nz, .asm_1013e6
	scf

.asm_1013f1
	pop de
	ld a, c
	ld [de], a
	ret

Function1013f5:
	ld a, [hli]
	ld [de], a
	inc de
	ld c, a
.asm_1013f9
	ld a, [hli]
	ld [de], a
	inc de
	dec c
	jr nz, .asm_1013f9
	ret

Function101400: ; unreferenced
	ld a, [de]
	inc de
	cp [hl]
	jr nz, asm_101416
	inc hl

Function101406:
	ld c, a
	ld b, 0
.asm_101409
	ld a, [de]
	inc de
	cp [hl]
	jr nz, asm_101416
	inc hl
	dec bc
	ld a, b
	or c
	jr nz, .asm_101409
	and a
	ret

asm_101416:
	scf
	ret

Function101418:
	call GetJoypad
	ldh a, [hJoyDown]
	and SELECT + A_BUTTON
	cp SELECT + A_BUTTON
	jr z, .asm_101425
	xor a
	ret

.asm_101425
	ld a, $f7
	ld [wcd2b], a
	scf
	ret

Function10142c:
	ld a, $01
	ld [wc305], a
	farcall Function115e18
	ret

Function101438:
	ld hl, wcd29
	set 6, [hl]
	ld a, [wcd26]
	ld hl, Jumptable_101457
	rst JumpTable
	ld a, [wcd26]
	bit 7, a
	ret z
	ld a, 0
	ld [wcd26], a
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Jumptable_101457:
	dw Function10145b
	dw Function101467

Function10145b:
	ld a, $3c
	ld [wcd42], a
	ld a, [wcd26]
	inc a
	ld [wcd26], a

Function101467:
	ld hl, wcd42
	dec [hl]
	ret nz
	ld a, [wcd26]
	set 7, a
	ld [wcd26], a
	ret

Function101475:
	ld hl, wcd29
	set 6, [hl]
	ld a, [wcd26]
	ld hl, Jumptable_101494
	rst JumpTable
	ld a, [wcd26]
	bit 7, a
	ret z
	ld a, 0
	ld [wcd26], a
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Jumptable_101494:
	dw Function10149a
	dw Function1014a6
	dw Function1014b7

Function10149a:
	ld a, $28
	ld [wcd42], a
	ld a, [wcd26]
	inc a
	ld [wcd26], a

Function1014a6:
	ld hl, wcd42
	dec [hl]
	ret nz
	ld a, $50
	ld [wcd42], a
	ld a, [wcd26]
	inc a
	ld [wcd26], a

Function1014b7:
	call GetJoypad
	ldh a, [hJoyPressed]
	and A_BUTTON | B_BUTTON
	jr nz, .asm_1014c5
	ld hl, wcd42
	dec [hl]
	ret nz

.asm_1014c5
	ld a, [wcd26]
	set 7, a
	ld [wcd26], a
	ret

Function1014ce:
	farcall Function100720
	farcall StartMobileInactivityTimer
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Function1014e2:
	ld hl, wcd29
	set 6, [hl]
	ld a, 0
	ld [wcd26], a
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Function1014f4:
	farcall EnableMobile
	ld hl, wcd29
	set 6, [hl]
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Function101507:
	ld de, wcd30
	ld hl, $40
	ld bc, $40
	ld a, MOBILEAPI_01
	call MobileAPI
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Function10151d: ; unreferenced
	ld a, MOBILEAPI_1A
	call MobileAPI
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Function10152a:
	ld a, MOBILEAPI_1B
	call MobileAPI
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Function101537:
	ld a, MOBILEAPI_05
	call MobileAPI
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Function101544:
	farcall StartMobileInactivityTimer
	ld a, MOBILEAPI_09
	call MobileAPI
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Function101557:
	farcall StartMobileInactivityTimer
	ld hl, wcd53
	ld a, MOBILEAPI_04
	call MobileAPI
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Function10156d:
	call Function101418
	ret c

Function101571:
	farcall Function10032e
	ret c
	ret z
	ld a, e
	cp $01
	jr z, .asm_101582
	ld [wcd2b], a
	ret

.asm_101582
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Function10158a:
	farcall IncrementMobileInactivityTimerBy1Frame
	ld a, [wMobileInactivityTimerMinutes]
	cp $0a
	jr c, Function10156d
	ld a, $fb
	ld [wcd2b], a
	ret

Function10159d:
	ld de, wc608
	farcall Function100edf
	ld de, wc608
	ld a, $05
	ld hl, w5_d800
	call Function10174c
	ld a, 0
	ld [wcd26], a
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Function1015be:
	ld de, wc608
	farcall Function100eed
	ld de, wc608
	ld a, $05
	ld hl, w5_d800
	call Function10174c
	ld a, 0
	ld [wcd26], a
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Function1015df:
	ld de, wc608
	farcall Function100ef4
	ld de, wc608
	ld a, $05
	ld hl, w5_d800
	call Function10174c
	ld a, 0
	ld [wcd26], a
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Function101600:
	ld hl, w5_d800
	ld de, wc608
	ld bc, $1e0
	ld a, $05
	call FarCopyWRAM
	ld de, wc608
	farcall Function100ee6
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Function10161f:
	call Function101649
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Function10162a:
	call Function101663
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

MobileCopyTransferData:
	ld de, wMobileTransferData
	ld bc, $1e0
	call FarCopyWRAM
	ret

MobileCopyTransferData2:
	ld hl, wMobileTransferData
	ld bc, $1e0
	call FarCopyWRAM
	ret

Function101649:
	ld a, BANK(w5_d800)
	ld hl, w5_d800
	call MobileCopyTransferData
	ld a, BANK(w5_da00)
	ld de, w5_da00
	call MobileCopyTransferData2
	ret

Function10165a:
	ld a, BANK(w5_da00)
	ld hl, w5_da00
	call MobileCopyTransferData
	ret

Function101663:
	ld a, BANK(w5_dc00)
	ld hl, w5_d800
	call MobileCopyTransferData
	ld a, BANK(w5_dc00)
	ld de, w5_dc00
	call MobileCopyTransferData2
	ret

Function101674: ; unreferenced
	ld a, BANK(w5_dc00)
	ld hl, w5_dc00
	call MobileCopyTransferData
	ret

Function10167d:
	ld a, 0
	ld [wcd26], a
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Function10168a:
	call Function101418
	ret c

Function10168e:
	ld b, 0
	ld c, $01
	farcall Function10079c
	ret c
	ld c, $01
	ld b, $03
	farcall AdvanceMobileInactivityTimerAndCheckExpired
	ret c
	ld a, [wcd26]
	ld hl, Jumptable_1016c3
	rst JumpTable
	ld hl, wcd29
	set 6, [hl]
	ld a, [wcd26]
	bit 7, a
	ret z
	ld a, 0
	ld [wcd26], a
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Jumptable_1016c3:
	dw Function1016cf
	dw Function1016de
	dw Function1016f8
	dw Function101705
	dw Function101719
	dw Function101724

Function1016cf:
	ld hl, wcd3a
	inc [hl]
	call Function10176f
	ld a, [wcd26]
	inc a
	ld [wcd26], a
	ret

Function1016de:
	call Function10177b
	jr nc, .asm_1016eb
	ld a, [wcd26]
	inc a
	ld [wcd26], a
	ret

.asm_1016eb
	ld a, $ff
	ld [wcd39], a
	ld a, [wcd26]
	inc a
	ld [wcd26], a
	ret

Function1016f8:
	ld a, 0
	ld [wcd27], a
	ld a, [wcd26]
	inc a
	ld [wcd26], a
	ret

Function101705:
	farcall Function100382
	ld a, [wcd27]
	bit 7, a
	ret z
	ld a, [wcd26]
	inc a
	ld [wcd26], a
	ret

Function101719:
	call Function1017c7
	ld a, [wcd26]
	inc a
	ld [wcd26], a
	ret

Function101724:
	ld a, [wcd39]
	cp $ff
	jr z, .asm_101731
	ld a, 0
	ld [wcd26], a
	ret

.asm_101731
	ld a, [wcd26]
	set 7, a
	ld [wcd26], a
	ret

Unknown_10173a:
	db $50

Function10173b:
	push bc
	push af
	ld a, [hli]
	ld h, [hl]
	ld l, a
	ld a, [Unknown_10173a]
	ld c, a
	ld b, 0
	pop af
	call AddNTimes
	pop bc
	ret

Function10174c:
	ld [wcd3d], a
	ld a, l
	ld [wcd3e], a
	ld a, h
	ld [wcd3f], a
	ld a, e
	ld [wcd3b], a
	ld a, d
	ld [wBattleTowerRoomMenu2JumptableIndex], a
	ld a, c
	ld [wcd40], a
	ld a, b
	ld [wcd41], a
	xor a
	ld [wcd39], a
	ld [wcd3a], a
	ret

Function10176f:
	ld hl, wccb4
	ld bc, $54
	ld a, $11
	call ByteFill
	ret

Function10177b:
	ld a, [Unknown_10173a]
	ld c, a
	ld b, 0
	ld a, [wcd3a]
	ld hl, 0
	call AddNTimes
	ld e, l
	ld d, h
	ld hl, wcd40
	ld a, [hli]
	ld h, [hl]
	ld l, a
	ld a, l
	sub e
	ld l, a
	ld a, h
	sbc d
	ld h, a
	jr c, .asm_1017a0
	add hl, bc
	call Function1017b0
	scf
	ret

.asm_1017a0
	ld a, $ff
	ld [wcd39], a
	add hl, bc
	ld a, h
	or l
	ret z
	ld c, l
	ld b, h
	call Function1017b0
	xor a
	ret

Function1017b0:
	ld a, c
	ld [wccb4], a
	push bc
	ld a, [wcd3a]
	dec a
	ld hl, wcd3b
	call Function10173b
	pop bc
	ld de, wccb5
	call CopyBytes
	ret

Function1017c7:
	ld a, [wcc60]
	ld c, a
	ld b, 0
	ld a, [wcd3a]
	dec a
	ld hl, wcd3e
	call Function10173b
	ld e, l
	ld d, h
	ld hl, wcc61
	ld a, [wcd3d]
	call FarCopyWRAM
	and a
	ret

Function1017e4:
	ld a, 0
	ld [wcd27], a
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Function1017f1:
	call Function101418
	ret c

Function1017f5:
	ld b, 0
	ld c, $01
	farcall Function10079c
	ret c
	ld c, $01
	ld b, $03
	farcall AdvanceMobileInactivityTimerAndCheckExpired
	ret c
	farcall Function100382
	ld a, [wcd27]
	bit 7, a
	jr nz, .next
	ld hl, wcd29
	set 6, [hl]
	ret

.next
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Function101826:
	ld a, [wcd21]
	cp $02
	jr z, .asm_101833
	cp $01
	jr z, .asm_101844
	jr .asm_101869

.asm_101833
	ld hl, Unknown_10186f
	ld de, wccb4
	call Function1013f5
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

.asm_101844
	farcall Function103654
	ld a, c
	ld hl, Unknown_101882
	cp $01
	jr z, .asm_10185b
	ld hl, Unknown_101895
	cp $02
	jr z, .asm_10185b
	jr .asm_101869

.asm_10185b
	ld de, wccb4
	call Function1013f5
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

.asm_101869
	ld a, $fe
	ld [wcd2b], a
	ret

pushc
setcharmap ascii

Unknown_10186f:
	db .end - @
	db $19, $73, $09, $13, "trade_crystal"
.end
	db 0

Unknown_101882:
	db .end - @
	db $19, $67, $10, $01, "free__crystal"
.end
	db 0

Unknown_101895:
	db .end - @
	db $19, $67, $10, $01, "limit_crystal"
.end
	db 0

popc

Function1018a8:
	ld hl, wccb5
	ld de, wcc61
	ld a, $04
	call Function101406
	jr c, .asm_1018d0
	ld hl, wccb9
	ld de, wcc65
	ld a, $06
	call Function101406
	jr c, .asm_1018ca
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

.asm_1018ca
	ld a, $f6
	ld [wcd2b], a
	ret

.asm_1018d0
	ld a, $f5
	ld [wcd2b], a
	ret

Function1018d6:
	call Function1018ec
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Function1018e1:
	call Function1018fb
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Function1018ec:
	ld a, $0a
	ld hl, wccb4
	ld [hli], a
	ld c, a
.asm_1018f3
	call Random
	ld [hli], a
	dec c
	jr nz, .asm_1018f3
	ret

Function1018fb:
	ld a, [wcd2f]
	and a
	jr z, .asm_101906
	ld hl, wcc61
	jr .asm_101909

.asm_101906
	ld hl, wccb5

.asm_101909
	ld de, wLinkBattleRNs
	ld bc, 10
	call CopyBytes
	ret

Function101913:
	ld hl, wcd2a
	set 0, [hl]
	xor a
	ld [wc30d], a
	ld hl, wcd29
	res 4, [hl]
	xor a
	ld [wc305], a
	ld hl, wcd29
	res 7, [hl]
	ld a, $90
	ldh [hWY], a
	ld a, [wcd21]
	cp $01
	jr z, .asm_10193f
	cp $02
	jr z, .asm_101945
	ld a, $71
	ld [wMobileCommsJumptableIndex], a
	ret

.asm_10193f
	ld a, $66
	ld [wMobileCommsJumptableIndex], a
	ret

.asm_101945
	ld a, $65
	ld [wMobileCommsJumptableIndex], a
	ret

Function10194b:
	call DisableSpriteUpdates
	call ClearSprites
	farcall Function1021f9
	ld hl, wcd29
	bit 3, [hl]
	jr nz, .asm_101967
	call Function1013c0
	ld a, $71
	ld [wMobileCommsJumptableIndex], a
	ret

.asm_101967
	ld a, $60
	ld [wMobileCommsJumptableIndex], a
	ret

_SelectMonsForMobileBattle:
	farcall BlankScreen
	farcall Mobile_CommunicationStandby
	ld hl, wcd29
	set 5, [hl]
	ld hl, wcd2a
	set 6, [hl]
	ld a, $06
	ld [wccb4], a
	ld hl, wPlayerMonSelection
	ld de, wccb5
	ld bc, 3
	call CopyBytes
	ld hl, wcd6c
	ld a, [hli]
	ld [wccb8], a
	ld a, [hli]
	ld [wccb9], a
	ld a, [hl]
	ld [wccba], a
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

_StartMobileBattle:
	call CopyOtherPlayersBattleMonSelection
	farcall Function100754
	xor a
	ld [wdc5f], a
	ld [wdc60], a
	farcall BlankScreen
	call SpeechTextbox
	farcall Function100846
	ld c, 120
	call DelayFrames
	farcall ClearTilemap
	call .CopyOTDetails
	call StartMobileBattle
	ld a, [wcd2b]
	cp $fc
	jr nz, .asm_1019e6
	xor a
	ld [wcd2b], a
.asm_1019e6
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

.CopyOTDetails:
	ldh a, [rSVBK]
	push af
	ld a, BANK(w5_dc0d)
	ldh [rSVBK], a

	ld bc, w5_dc0d
	ld de, w5_dc11
	farcall GetMobileOTTrainerClass

	pop af
	ldh [rSVBK], a

	ld a, c
	ld [wOtherTrainerClass], a
	ld hl, wOTPlayerName
	ld de, wOTClassName
	ld bc, NAME_LENGTH
	call CopyBytes
	ld a, [wcd2f]
	and a
	ld a, USING_INTERNAL_CLOCK
	jr z, .got_link_player_number
	ld a, USING_EXTERNAL_CLOCK
.got_link_player_number
	ldh [hSerialConnectionStatus], a
	ret

StartMobileBattle:
	; force stereo and fast text speed
	ld hl, wOptions
	ld a, [hl]
	push af
	and (1 << STEREO)
	or 1 ; 1 frame per character i.e. fast text
	ld [hl], a
	ld a, 1
	ld [wDisableTextAcceleration], a
	farcall BattleIntro
	farcall DoBattle
	farcall ShowLinkBattleParticipantsAfterEnd
	xor a
	ld [wDisableTextAcceleration], a
	ld a, CONNECTION_NOT_ESTABLISHED
	ldh [hSerialConnectionStatus], a
	pop af
	ld [wOptions], a
	ret

Function101a4f:
	ld a, 1
	ld [wDisableTextAcceleration], a
	farcall DisplayLinkBattleResult
	xor a
	ld [wDisableTextAcceleration], a
	farcall CleanUpBattleRAM
	farcall LoadPokemonData
	call Function1013c0
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

CopyOtherPlayersBattleMonSelection:
	ld hl, wcc61
	ld de, wOTMonSelection
	ld bc, 3
	call CopyBytes
	ld de, wcc64
	farcall Function100772
	farcall Function101050
	farcall LoadSelectedPartiesForColosseum
	ret

Function101a97:
	farcall Function115d99
	ld hl, wcd29
	set 7, [hl]
	ld c, $02
	call Function10142c
	ld hl, wcd29
	set 6, [hl]
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Function101ab4:
	ld e, $01
	call Function101ee4
	ld hl, wcd29
	set 5, [hl]
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Function101ac6:
	farcall Function115d99
	ld hl, wcd29
	set 7, [hl]
	ld c, $02
	call Function10142c
	ld hl, wcd29
	set 6, [hl]
	xor a
	ld [wcd2f], a
	ld de, wdc42
	call Function102068
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Function101aed:
	farcall Function115d99
	ld hl, wcd29
	set 7, [hl]
	ld c, $02
	call Function10142c
	ld hl, wcd29
	set 6, [hl]
	ld a, $01
	ld [wcd2f], a
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Function101b0f:
	ld c, 0
	call Function10142c
	ld e, $03
	call Function101ee4
	ld hl, wcd29
	set 5, [hl]
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ld a, 0
	ld [wcd26], a
	ret

Function101b2b:
	farcall Function100579
	ld hl, wcd29
	set 2, [hl]
	ld a, [wcd26]
	bit 7, a
	ret z
	call Function1013dd
	ld a, 0
	ld [wcd26], a
	ld a, [wMenuCursorY]
	cp $01
	jr z, .asm_101b51
	ld a, $02
	ld [wcd2b], a
	ret

.asm_101b51
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Function101b59:
	ld c, $02
	call Function10142c
	ld e, $02
	call Function101ee4
	ld hl, wcd29
	set 5, [hl]
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Function101b70:
	ld c, $02
	call Function10142c
	ld e, $04
	call Function101ee4
	ld hl, wcd29
	set 5, [hl]
	call UpdateSprites
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ld a, 0
	ld [wcd26], a
	ret

Function101b8f:
	farcall Function1005c3
	ld hl, wcd29
	set 2, [hl]
	ld a, [wcd26]
	bit 7, a
	ret z
	call Function1013dd
	ld a, 0
	ld [wcd26], a
	ld a, [wMenuCursorY]
	cp $01
	jr z, .asm_101bbc
	ld a, $01
	ld [wcd2f], a
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

.asm_101bbc
	xor a
	ld [wcd2f], a
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Function101bc8:
	ld c, $02
	call Function10142c
	ld e, $08
	call Function101ee4
	call Function102048
	call Function1013dd
	ld a, 0
	ld [wcd26], a
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Function101be5:
	farcall Function100579
	ld hl, wcd29
	set 2, [hl]
	ld a, [wcd26]
	bit 7, a
	ret z
	call Function1013dd
	ld a, 0
	ld [wcd26], a
	ld a, [wMenuCursorY]
	cp $01
	jr nz, .asm_101c0b
	ld a, $2a
	ld [wMobileCommsJumptableIndex], a
	ret

.asm_101c0b
	ld a, $02
	ld [wcd2b], a
	ret

Function101c11:
	ld a, $01
	ld [wdc5f], a
	ld e, $09
	call Function101ee4
	call Function102048
	ld hl, wcd29
	set 5, [hl]
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Function101c2b:
	ld a, $02
	ld [wdc5f], a
	ld e, $07
	call Function101ee4
	ld hl, wcd29
	set 5, [hl]
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Function101c42:
	ld hl, wcd2a
	set 1, [hl]
	call Function100665
	ld a, $47
	ld [wMobileCommsJumptableIndex], a
	ret

Function101c50:
	ld e, $0a
	call Function101ee4
	ld hl, wcd29
	set 2, [hl]
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Function101c62:
	farcall Function115d99
	ld hl, wcd29
	set 7, [hl]
	ld c, $01
	call Function10142c
	xor a
	ld [wc30d], a
	ld hl, wcd29
	res 4, [hl]
	ld e, $0b
	call Function101ee4
	ld hl, wcd29
	set 5, [hl]
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ld a, 0
	ld [wcd26], a
	ret

Function101c92:
	farcall Function100675
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Function101ca0:
	ld c, $02
	call Function10142c
	ld e, $0c
	call Function101ee4
	ld hl, wcd29
	set 5, [hl]
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ld a, 0
	ld [wcd26], a
	ret

Function101cbc:
	ld a, $01
	ld [wcd2b], a
	ret

Function101cc2: ; unreferenced
	ld a, $02
	ld [wcd2b], a
	ret

Function101cc8:
	ld a, $01
	ld [wc314], a
	ld a, $01
	ld [wc30d], a
	ld hl, wcd29
	set 4, [hl]
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Function101cdf:
	ld a, $06
	ld [wc314], a
	ld a, $01
	ld [wc30d], a
	ld hl, wcd29
	set 4, [hl]
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Function101cf6:
	ld a, $0b
	ld [wc314 + 1], a
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Function101d03:
	ld a, $0e
	ld [wc314 + 1], a
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Function101d10:
	ld c, $01
	call Function10142c
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	jr Function101d2a

Function101d1e:
	ld c, $03
	call Function10142c
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a

Function101d2a:
	call Function101418
	ret c
	ld hl, wcd29
	set 6, [hl]
	ld a, [wcd26]
	ld hl, Jumptable_101d4d
	rst JumpTable
	ld a, [wcd26]
	bit 7, a
	ret z
	ld a, 0
	ld [wcd26], a
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Jumptable_101d4d:
	dw Function101d51
	dw Function101d5d

Function101d51:
	ld a, $3c
	ld [wcd42], a
	ld a, [wcd26]
	inc a
	ld [wcd26], a

Function101d5d:
	ld hl, wcd42
	dec [hl]
	ret nz
	ld a, [wcd26]
	set 7, a
	ld [wcd26], a
	ret

Function101d6b:
	ld a, [wc30d]
	and a
	ret nz
	ld hl, wcd29
	res 4, [hl]
	ld a, $64
	ld [wMobileCommsJumptableIndex], a
	ret

Function101d7b:
	farcall Function10138b
	ld b, 0
	ld hl, Unknown_101d8d
	add hl, bc
	ld c, [hl]
	ld a, c
	ld [wMobileCommsJumptableIndex], a
	ret

Unknown_101d8d:
	db $15, $15, $1f, $1f, $0c, $12, $3a, $3a

Function101d95:
	call Function101ee2
	call LoadStandardMenuHeader
	ld e, $0e
	call Function101ee4
	ld hl, wcd29
	set 5, [hl]
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ld a, 0
	ld [wcd26], a
	ret

Function101db2:
	farcall Function103302
	call ExitMenu
	ld hl, wcd29
	set 5, [hl]
	jr c, .asm_101dca
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

.asm_101dca
	ld a, $02
	ld [wcd2b], a
	ret

Function101dd0:
	ld hl, wdc41
	bit 1, [hl]
	jr nz, .asm_101ddd
	ld a, $19
	ld [wMobileCommsJumptableIndex], a
	ret

.asm_101ddd
	ld a, $1b
	ld [wMobileCommsJumptableIndex], a
	ret

Function101de3:
	call Function101ecc
	call Function101ead
	jr c, .asm_101df3
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

.asm_101df3
	call Function101e98
	jr c, .asm_101e00
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

.asm_101e00
	call Function101ed3
	ld a, $02
	ld [wcd2b], a
	ret

Function101e09:
	call Function101ead
	jr c, .asm_101e16
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

.asm_101e16
	call Function101ecc
	call Function101e98
	push af
	call Function101ed3
	pop af
	jr c, .asm_101e2b
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

.asm_101e2b
	ld a, $02
	ld [wcd2b], a
	ret

Function101e31:
	ld a, $3a
	ld [wMobileCommsJumptableIndex], a
	jp Function101c2b

Function101e39:
	call Function1020bf
	push af
	call Function101ed3
	pop af
	jr c, .asm_101e49
	ld a, $2a
	ld [wMobileCommsJumptableIndex], a
	ret

.asm_101e49
	ld a, $02
	ld [wcd2b], a
	ret

Function101e4f:
	ld e, $06
	call Function101ee4
	call Function1013d6
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ld a, 0
	ld [wcd26], a
	ret

Function101e64:
	call Function101ecc
	call Function1020a8
	push af
	call Function101ed3
	pop af
	jr c, .asm_101e77
	ld a, $24
	ld [wMobileCommsJumptableIndex], a
	ret

.asm_101e77
	ld hl, wcd29
	set 5, [hl]
	ld a, $02
	ld [wcd2b], a
	ret

Function101e82: ; unreferenced
	call Function101ecc
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Function101e8d: ; unreferenced
	call Function101ed3
	ld a, [wMobileCommsJumptableIndex]
	inc a
	ld [wMobileCommsJumptableIndex], a
	ret

Function101e98:
	call ClearSprites
	farcall Function8adb3
	ret c
	ld hl, wGameTimerPaused
	set GAME_TIMER_MOBILE_F, [hl]
	ld hl, wdc41
	set 4, [hl]
	ret

Function101ead:
	ld hl, wGameTimerPaused
	bit GAME_TIMER_MOBILE_F, [hl]
	jr nz, .asm_101ec8
	ld hl, wdc41
	bit 2, [hl]
	jr z, .asm_101eca
	ld a, [wcd2f]
	and a
	jr nz, .asm_101ec8
	ld hl, wdc41
	bit 1, [hl]
	jr z, .asm_101eca

.asm_101ec8
	xor a
	ret

.asm_101eca
	scf
	ret

Function101ecc:
	call Function101ee2
	call FadeToMenu
	ret

Function101ed3:
	call Function1013aa
	farcall Function115d99
	ld hl, wcd29
	set 7, [hl]
	ret

Function101ee2:
	ld e, 0

Function101ee4:
	ld d, 0
	ld hl, Unknown_101ef5
	add hl, de
	add hl, de
	ld a, [hli]
	ld d, [hl]
	ld e, a
	farcall Function100504
	ret

Unknown_101ef5:
	dw String_101f13
	dw String_101f14
	dw String_101f32
	dw String_101f4f
	dw String_101f69
	dw String_101f81
	dw String_101f93
	dw String_101faa
	dw String_101fc5
	dw String_101fd2
	dw String_101fe1
	dw String_101fef
	dw String_102000
	dw String_10200c
	dw String_102014

String_101f13:
	db "@"

String_101f14:
	db   "モバイルアダプタを つかって"
	next "おともだちと つうしんします@"

String_101f32:
	db   "でんわを かけるひとには"
	next "つうわりょうきんが かかります@"

String_101f4f:
	db   "モバイルアダプタの じゅんびは"
	next "できて いますか?@"

String_101f69:
	db   "あなたが おともだちに"
	next "でんわを かけますか?@"

String_101f81:
	db   "めいしフォルダーを"
	next "つかいますか?@"

String_101f93:
	db   "でんわばんごうを にゅうりょく"
	next "してください@"

String_101faa:
	db   "それでは おともだちからの"
	next "でんわを おまちします⋯@"

String_101fc5:
	next "に でんわを かけます@"

String_101fd2:
	next "に でんわを かけています@"

String_101fe1:
	db   "でんわが つながりました!@"

String_101fef:
	db   "つうわを"
	next "しゅうりょう します⋯@"

String_102000:
	db   "つうしん しゅうりょう@"

String_10200c:
	db   "つうわ じかん@"

String_102014:
	db   "それでは つうしんの"
	next "せっていを してください@"

Function10202c:
	farcall Function115d99
	ld hl, wcd29
	set 7, [hl]
	ld c, $02
	call Function10142c
	ld e, $0d
	call Function101ee4
	hlcoord 4, 4
	call Function100681
	ret

Function102048:
	call Function10204c
	ret

Function10204c:
	hlcoord 3, 2
	ld c, $10
	ld de, wcd53
.asm_102054
	ld a, [de]
	inc de
	and a
	jr z, .asm_102067
	sub $30
	jr c, .asm_102067
	cp $0a
	jr nc, .asm_102067
	add $f6
	ld [hli], a
	dec c
	jr nz, .asm_102054

.asm_102067
	ret

Function102068:
	ld hl, wcd53
	ld c, $08
.asm_10206d
	ld a, [de]
	call Function102080
	jr c, .asm_10207f
	ld a, [de]
	swap a
	call Function102080
	jr c, .asm_10207f
	inc de
	dec c
	jr nz, .asm_10206d

.asm_10207f
	ret

Function102080:
	and $0f
	cp $0f
	jr z, .asm_10208a
	add $30
	ld [hli], a
	ret

.asm_10208a
	ld [hl], 0
	scf
	ret

Function10208e:
	push de
	ld h, d
	ld l, e
	ld de, wdc42
	ld bc, 8
	call CopyBytes
	pop de
	ret

Function10209c:
	ld a, $ff
	ld hl, wdc42
	ld bc, 8
	call ByteFill
	ret

Function1020a8:
	call Function10209c
	ld c, $01
	ld de, wdc42
	farcall Function17a68f
	ret c
	call Function10208e
	call Function102068
	xor a
	ret

Function1020bf:
	call ClearSprites
	farcall Function8aba9
	ld a, c
	and a
	jr z, .asm_1020e8
	dec a
	ld hl, $a04c
	ld bc, $25
	call AddNTimes
	ld d, h
	ld e, l
	ld a, $04
	call OpenSRAM
	call Function10208e
	call Function102068
	call CloseSRAM
	xor a
	ret

.asm_1020e8
	scf
	ret

Function1020ea:
	ld hl, wdc41
	bit 4, [hl]
	jr z, .quit
	ld hl, wdc41
	bit 2, [hl]
	jr nz, .quit
	call Function10218d
	ld hl, wc608
	bit 4, [hl]
	jr z, .quit
	ld hl, wc608
	bit 2, [hl]
	jr nz, .quit
	call Function102112
	jr z, .quit
	and a
	ret

.quit
	scf
	ret

Function102112:
	ld a, BANK(s4_a03b)
	call OpenSRAM
	ld hl, s4_a03b + 6
	ld c, 40
.outer_loop
	push hl
	ld de, wc60f
	ld b, 31
.inner_loop
	ld a, [de]
	cp [hl]
	jr nz, .not_matching
	inc de
	inc hl
	dec b
	jr nz, .inner_loop
	pop hl
	xor a
	jr .done

.not_matching
	pop hl
	ld de, 37
	add hl, de
	dec c
	jr nz, .outer_loop
	ld a, $01
	and a
	jr .done ; useless jr

.done
	push af
	call CloseSRAM
	pop af
	ret

Function102142:
	call Function10218d
	call Function102180
	ld hl, NewCardArrivedText
	call MenuTextbox
	ld de, SFX_LEVEL_UP
	call PlaySFX
	call JoyWaitAorB
	call ExitMenu
	call Function10219f
	ld hl, PutCardInCardFolderText
	call MenuTextbox
	call YesNoBox
	call ExitMenu
	jr c, .asm_10217c
	call Function1021b8
	jr c, .asm_10217c
	call Function10218d
	call Function102180
	ld hl, CardWasListedText
	call PrintText

.asm_10217c
	call Function1013d6
	ret

Function102180:
	ld hl, wc608 + 1
	ld de, wStringBuffer2
	ld bc, 11
	call CopyBytes
	ret

Function10218d:
	ld hl, w5_dc00
	ld de, wc608
	ld bc, $26
	ld a, $05
	call FarCopyWRAM
	ld de, wc608 + 1 ; useless
	ret

Function10219f:
	call FadeToMenu
	call Function10218d
	ld de, wc608 + 1
	farcall Function8ac4e
	call JoyWaitAorB
	call PlayClickSFX
	call Function1013aa
	ret

Function1021b8:
	call FadeToMenu
	call Function10218d
	ld de, wPlayerMoveStruct
	farcall Function8ac70
	ld a, c
	ld [wStringBuffer1], a
	push af
	call Function1013aa
	pop af
	ret

NewCardArrivedText:
	text_far _NewCardArrivedText
	text_end

PutCardInCardFolderText:
	text_far _PutCardInCardFolderText
	text_end

CardWasListedText:
	text_far _CardWasListedText
	text_end

Function1021e0:
	call MenuTextbox
	call JoyWaitAorB
	call ExitMenu
	ret

StartingLinkText: ; unreferenced
	text_far _StartingLinkText
	text_end

LinkTerminatedText:
	text_far _LinkTerminatedText
	text_end

ClosingLinkText:
	text_far _ClosingLinkText
	text_end

Function1021f9:
	call Function102233
	ld a, $0 ; Function10234b
	ld [wcd49], a
	ld hl, wcd29
	bit 3, [hl]
	res 3, [hl]
	jr z, .asm_10220f
	ld a, $1 ; Function102361
	ld [wcd49], a

.asm_10220f
	call Function1022ca
	ld a, [wcd49]
	ld hl, Jumptable_1022f5
	rst JumpTable
	call Function102241
	call Function1022d0
	jr c, .asm_102231
	ld a, [wcd49]
	bit 7, a
	jr z, .asm_10220f
	xor a
	ld hl, wcd29
	bit 3, [hl]
	ret z
	scf
	ret

.asm_102231
	xor a
	ret

Function102233:
	ld hl, wcd49
	ld bc, 10
	xor a
	call ByteFill
	call Function10304f
	ret

Function102241:
	call Function10226a
	call Function102274
	call Function10224b
	ret

Function10224b:
	ld hl, wcd4b
	bit 1, [hl]
	jr nz, .asm_10225e
	bit 2, [hl]
	jr nz, .asm_10225e
	call DelayFrame
	call DelayFrame
	xor a
	ret

.asm_10225e
	res 1, [hl]
	res 2, [hl]
	farcall Mobile_ReloadMapPart
	scf
	ret

Function10226a:
	ld hl, wcd4b
	bit 0, [hl]
	ret z
	call Function10305d
	ret

Function102274:
	ld hl, wcd4b
	bit 3, [hl]
	ret z
	res 3, [hl]
	ld de, 8
	call PlaySFX
	ret

Function102283:
	ld a, $01
	ld [wAttrmapEnd], a
	ld hl, wcd4b
	set 0, [hl]
	ret

Function10228e:
	xor a
	ld [wAttrmapEnd], a
	ld hl, wcd4b
	res 0, [hl]
	ret

Function102298:
	ld a, e
	cp $02
	ret nz
	ld hl, wcd4b
	bit 6, [hl]
	jr z, .asm_1022b6
	ld hl, wcd4b
	bit 7, [hl]
	ld hl, wcd4b
	set 7, [hl]
	ret nz
	ld de, SFX_ELEVATOR_END
	call PlaySFX
	jr .asm_1022c1

.asm_1022b6
	ld hl, wcd4b
	bit 7, [hl]
	ld hl, wcd4b
	res 7, [hl]
	ret z

.asm_1022c1
	call Function10304f
	ld a, $01
	ld [wAttrmapEnd], a
	ret

Function1022ca:
	ld a, 30
	ld [wOverworldDelay], a
	ret

Function1022d0:
	farcall Function10032e
	ld a, [wcd2b]
	and a
	jr nz, .asm_1022f3
	call Function102298
	ld a, [wOverworldDelay]
	ld c, a
	ld a, 30
	sub c
	ld c, a
	ld b, 03
	farcall AdvanceMobileInactivityTimerAndCheckExpired
	jr c, .asm_1022f3
	xor a
	ret

.asm_1022f3
	scf
	ret

Jumptable_1022f5:
	dw Function10234b ; 00
	dw Function102361 ; 01
	dw Function10236e ; 02
	dw Function102387 ; 03
	dw Function1023a1 ; 04
	dw Function1025c7 ; 05
	dw Function1025dc ; 06
	dw Function1024f6 ; 07
	dw Function10250c ; 08
	dw Function1024a8 ; 09
	dw Function102591 ; 0a
	dw Function1024a8 ; 0b
	dw Function1025b0 ; 0c
	dw Function1025bd ; 0d
	dw Function102814 ; 0e
	dw Function10283c ; 0f
	dw Function102862 ; 10
	dw Function10286f ; 11
	dw Function1024a8 ; 12
	dw Function1028a5 ; 13
	dw Function1028ab ; 14
	dw Function1023b5 ; 15
	dw Function1023c6 ; 16
	dw Function1024af ; 17
	dw Function102416 ; 18
	dw Function102423 ; 19
	dw Function10244b ; 1a
	dw Function1024af ; 1b
	dw Function10246a ; 1c
	dw Function102652 ; 1d
	dw Function10266b ; 1e
	dw Function1025e9 ; 1f
	dw Function1025ff ; 20
	dw Function102738 ; 21
	dw Function102754 ; 22
	dw Function1026b7 ; 23
	dw Function1026c8 ; 24
	dw Function1028bf ; 25
	dw Function1028c6 ; 26
	dw Function1028d3 ; 27
	dw Function1028da ; 28
	dw Function1024a8 ; 29
	dw Function10248d ; 2a

Function10234b:
	call Function102d9a
	call Function102dd3
	call Function102dec
	ld hl, wcd4b
	set 1, [hl]
	ld a, [wcd49]
	inc a
	ld [wcd49], a
	ret

Function102361:
	ld a, $cc
	call Function1028e8
	ld a, [wcd49]
	inc a
	ld [wcd49], a
	ret

Function10236e:
	call Function1028fc
	ret nc
	ld a, [wcd51]
	cp $cc
	jr z, .asm_10237f
	ld a, $f2
	ld [wcd2b], a
	ret

.asm_10237f
	ld a, [wcd49]
	inc a
	ld [wcd49], a
	ret

Function102387:
	ld hl, wcd4b
	set 6, [hl]
	xor a
	ld [wdc5f], a
	ld de, MUSIC_ROUTE_30
	call PlayMusic
	call Function102d9a
	call Function102dd3
	ld a, $01
	ld [wMenuCursorY], a

Function1023a1:
	call Function102283
	call Function102db7
	call Function102dec
	ld hl, wcd4b
	set 1, [hl]
	ld a, $1d
	ld [wcd49], a
	ret

Function1023b5:
	call Function10228e
	call Function102a3b
	call Function102b12
	ld a, [wcd49]
	inc a
	ld [wcd49], a
	ret

Function1023c6:
	call Function102c48
	call Function102c87
	ld a, [wcd4c]
	dec a
	ld [wCurPartyMon], a
	xor a ; REMOVE_PARTY
	ld [wPokemonWithdrawDepositParameter], a
	farcall RemoveMonFromPartyOrBox
	ld hl, wPartyCount
	inc [hl]
	ld a, [hli]
	ld c, a
	ld b, 0
	add hl, bc
	ld [hl], $ff
	ld a, [wPartyCount]
	ld [wcd4c], a
	call Function102c07
	call Function102d48
	call Function102b32
	call Function102f50
	ld hl, wcd4b
	set 1, [hl]
	ld a, $14
	ld [wcd4e], a
	ld a, 0
	ld [wcd4f], a
	ld a, 0
	ld [wcd4a], a
	ld a, [wcd49]
	inc a
	ld [wcd49], a
	ret

Function102416:
	ld a, $aa
	call Function1028e8
	ld a, [wcd49]
	inc a
	ld [wcd49], a
	ret

Function102423:
	call Function102921
	ret nc
	farcall SaveAfterLinkTrade
	farcall StubbedTrainerRankings_Trades
	farcall BackupMobileEventIndex
	ld hl, wcd4b
	set 1, [hl]
	ld a, 0
	ld [wcd4a], a
	ld a, [wcd49]
	inc a
	ld [wcd49], a
	ret

Function10244b:
	call Function102f32
	ld hl, wcd4b
	set 1, [hl]
	ld a, $19
	ld [wcd4e], a
	ld a, 0
	ld [wcd4f], a
	ld a, 0
	ld [wcd4a], a
	ld a, [wcd49]
	inc a
	ld [wcd49], a
	ret

Function10246a:
	call Function102d9a
	ld hl, wcd29
	set 3, [hl]
	call Function102e07
	ld hl, wcd4b
	set 1, [hl]
	ld a, $2a
	ld [wcd49], a
	ret

Function102480: ; unreferenced
	ld c, $32
	call DelayFrames
	ld a, [wcd49]
	inc a
	ld [wcd49], a
	ret

Function10248d:
	ld a, [wcd49]
	set 7, a
	ld [wcd49], a
	ret

Function102496: ; unreferenced
	ld hl, wcd4e
	dec [hl]
	ret nz
	ld a, 0
	ld [wcd4a], a
	ld a, [wcd49]
	inc a
	ld [wcd49], a
	ret

Function1024a8:
	farcall Function1009f3
	ret c

Function1024af:
	call GetJoypad
	ld a, [wcd4a]
	ld hl, Jumptable_1024ba
	rst JumpTable
	ret

Jumptable_1024ba:
	dw Function1024c0
	dw Function1024cb
	dw Function1024de

Function1024c0:
	ld hl, wcd4e
	inc [hl]
	ld a, [wcd4a]
	inc a
	ld [wcd4a], a

Function1024cb:
	ld hl, wcd4e
	dec [hl]
	ret nz
	ld a, [wcd4f]
	inc a
	ld [wcd4e], a
	ld a, [wcd4a]
	inc a
	ld [wcd4a], a

Function1024de:
	ld hl, wcd4e
	dec [hl]
	jr z, .asm_1024e9
	ldh a, [hJoyPressed]
	and A_BUTTON | B_BUTTON
	ret z

.asm_1024e9
	ld a, 0
	ld [wcd4a], a
	ld a, [wcd49]
	inc a
	ld [wcd49], a
	ret

Function1024f6:
	call PlaceHollowCursor
	ld hl, wcd4b
	set 1, [hl]
	ld a, [wcd4c]
	call Function1028e8
	ld a, [wcd49]
	inc a
	ld [wcd49], a
	ret

Function10250c:
	call Function1028fc
	ret nc
	ld a, [wcd51]
	cp $0f
	jr z, .asm_10254b
	and a
	jr z, .asm_102572
	cp $aa
	jr z, .asm_102572
	cp $07
	jr nc, .asm_102572
	ld [wcd4d], a
	dec a
	ld [wd003], a
	ld a, [wcd4c]
	dec a
	ld [wd002], a
	call Function102b9c
	call Function102bdc
	jr c, .asm_10256d
	farcall CheckAnyOtherAliveMonsForTrade
	jr c, .asm_102568
	ld hl, wcd4b
	set 1, [hl]
	ld a, $0e
	ld [wcd49], a
	ret

.asm_10254b
	call Function103021
	ld hl, wcd4b
	set 1, [hl]
	ld a, 0
	ld [wcd4a], a
	ld a, $1e
	ld [wcd4e], a
	ld a, $1e
	ld [wcd4f], a
	ld a, $29
	ld [wcd49], a
	ret

.asm_102568
	call Function102ff5
	jr .asm_102577

.asm_10256d
	call Function102f85
	jr .asm_102577

.asm_102572
	call Function102fce
	jr .asm_102577

.asm_102577
	ld hl, wcd4b
	set 1, [hl]
	ld a, 0
	ld [wcd4a], a
	ld a, $1e
	ld [wcd4e], a
	ld a, $3c
	ld [wcd4f], a
	ld a, $09
	ld [wcd49], a
	ret

Function102591:
	call Function102ee7
	ld hl, wcd4b
	set 1, [hl]
	ld a, 0
	ld [wcd4a], a
	ld a, $1e
	ld [wcd4e], a
	ld a, $3c
	ld [wcd4f], a
	ld a, [wcd49]
	inc a
	ld [wcd49], a
	ret

Function1025b0:
	ld a, $09
	call Function1028e8
	ld a, [wcd49]
	inc a
	ld [wcd49], a
	ret

Function1025bd:
	call Function1028fc
	ret nc
	ld a, $04
	ld [wcd49], a
	ret

Function1025c7:
	call Function102f6d
	ld hl, wcd4b
	set 1, [hl]
	ld a, $0f
	call Function1028e8
	ld a, [wcd49]
	inc a
	ld [wcd49], a
	ret

Function1025dc:
	call Function1028fc
	ret nc
	ld a, [wcd49]
	set 7, a
	ld [wcd49], a
	ret

Function1025e9:
	nop
	ld hl, wcd4b
	set 6, [hl]
	call Function102b4e
	ld hl, wcd4b
	set 1, [hl]
	ld a, [wcd49]
	inc a
	ld [wcd49], a
	ret

Function1025ff:
	ld hl, wcd4b
	set 2, [hl]
	farcall Function1009f3
	ret c
	farcall MobileMenuJoypad
	ld a, [wMenuJoypadFilter]
	and c
	ret z
	bit A_BUTTON_F, c
	jr nz, .a_button
	bit D_UP_F, c
	jr nz, .d_up
	bit D_DOWN_F, c
	jr nz, .d_down
	ret

.a_button
	ld hl, wcd4b
	set 3, [hl]
	ld a, $27 ; Function1028d3
	ld [wcd49], a
	ret

.d_up
	ld a, [wMenuCursorY]
	ld b, a
	ld a, [wOTPartyCount]
	cp b
	ret nz
	call HideCursor
	ld a, [wPartyCount]
	ld [wMenuCursorY], a
	ld a, $1d ; Function102652
	ld [wcd49], a
	ret

.d_down
	ld a, [wMenuCursorY]
	cp $01
	ret nz
	ld a, $23 ; Function1026b7
	ld [wcd49], a
	ret

Function102652:
	nop
	ld hl, wcd4b
	set 6, [hl]
	nop
	call Function102b7b
	nop
	ld hl, wcd4b
	set 1, [hl]
	nop
	ld a, [wcd49]
	inc a
	ld [wcd49], a
	ret

Function10266b:
	ld hl, wcd4b
	set 2, [hl]
	farcall Function1009f3
	ret c
	farcall MobileMenuJoypad
	ld a, [wMenuJoypadFilter]
	and c
	ret z
	bit A_BUTTON_F, c
	jr nz, .a_button
	bit D_DOWN_F, c
	jr nz, .d_down
	bit D_UP_F, c
	jr nz, .d_up
	ret

.a_button
	ld hl, wcd4b
	set 3, [hl]
	ld a, $21 ; Function102738
	ld [wcd49], a
	ret

.d_down
	ld a, [wMenuCursorY]
	dec a
	ret nz
	call HideCursor
	ld a, $1f ; Function1025e9
	ld [wcd49], a
	ret

.d_up
	ld a, [wMenuCursorY]
	ld b, a
	ld a, [wPartyCount]
	cp b
	ret nz
	ld a, $23 ; Function1026b7
	ld [wcd49], a
	ret

Function1026b7:
	ld hl, wcd4b
	set 6, [hl]
	ld a, [wcd49]
	inc a
	ld [wcd49], a
	ld a, 0
	ld [wcd4a], a

Function1026c8:
	call GetJoypad
	farcall Function1009f3
	ret c
	ld a, [wcd4a]
	ld hl, Jumptable_1026da
	rst JumpTable
	ret

Jumptable_1026da:
	dw Function1026de
	dw Function1026f3

Function1026de:
	call HideCursor
	hlcoord 9, 17
	ld [hl], $ed
	ld a, [wcd4a]
	inc a
	ld [wcd4a], a
	ld hl, wcd4b
	set 1, [hl]
	ret

Function1026f3:
	ldh a, [hJoyPressed]
	bit A_BUTTON_F, a
	jr nz, .asm_102723
	bit D_UP_F, a
	jr nz, .asm_102712
	bit D_DOWN_F, a
	jr nz, .asm_102702
	ret

.asm_102702
	hlcoord 9, 17
	ld [hl], " "
	ld a, $01
	ld [wMenuCursorY], a
	ld a, $1d ; Function102652
	ld [wcd49], a
	ret

.asm_102712
	hlcoord 9, 17
	ld [hl], " "
	ld a, [wOTPartyCount]
	ld [wMenuCursorY], a
	ld a, $1f ; Function1025e9
	ld [wcd49], a
	ret

.asm_102723
	hlcoord 9, 17
	ld [hl], "▷"
	ld hl, wcd4b
	set 3, [hl]
	ld hl, wcd4b
	set 2, [hl]
	ld a, $5 ; Function1025c7
	ld [wcd49], a
	ret

Function102738:
	ld hl, wcd4b
	set 6, [hl]
	call PlaceHollowCursor
	call Function1027eb
	ld hl, wcd4b
	set 1, [hl]
	ld a, [wcd49]
	inc a
	ld [wcd49], a
	ld a, 0
	ld [wcd4a], a

Function102754:
	call GetJoypad
	farcall Function1009f3
	ret c
	ld a, [wcd4a]
	ld hl, Jumptable_102766
	rst JumpTable
	ret

Jumptable_102766:
	dw Function102770
	dw Function102775
	dw Function10278c
	dw Function1027a0
	dw Function1027b7

Function102770:
	ld a, $01
	ld [wcd4a], a

Function102775:
	hlcoord 1, 16
	ld [hl], "▶"
	hlcoord 11, 16
	ld [hl], " "
	ld hl, wcd4b
	set 2, [hl]
	ld a, [wcd4a]
	inc a
	ld [wcd4a], a
	ret

Function10278c:
	ldh a, [hJoyPressed]
	bit A_BUTTON_F, a
	jr nz, asm_1027c6
	bit B_BUTTON_F, a
	jr nz, asm_1027e2
	bit D_RIGHT_F, a
	jr nz, .asm_10279b
	ret

.asm_10279b
	ld a, $03
	ld [wcd4a], a
Function1027a0:
	hlcoord 1, 16
	ld [hl], " "
	hlcoord 11, 16
	ld [hl], "▶"
	ld hl, wcd4b
	set 2, [hl]
	ld a, [wcd4a]
	inc a
	ld [wcd4a], a
	ret

Function1027b7:
	ldh a, [hJoyPressed]
	bit A_BUTTON_F, a
	jr nz, asm_1027d1
	bit B_BUTTON_F, a
	jr nz, asm_1027e2
	bit D_LEFT_F, a
	jr nz, Function102770
	ret

asm_1027c6:
	ld hl, wcd4b
	set 3, [hl]
	ld a, $25 ; Function1028bf
	ld [wcd49], a
	ret

asm_1027d1:
	ld hl, wcd4b
	set 3, [hl]
	ld a, [wMenuCursorY]
	ld [wcd4c], a
	ld a, $7 ; Function1024f6
	ld [wcd49], a
	ret

asm_1027e2:
	call Function102db7
	ld a, $1d ; Function102652
	ld [wcd49], a
	ret

Function1027eb:
	hlcoord 0, 14
	ld b, 2
	ld c, 18
	ld d, h
	ld e, l
	farcall _LinkTextbox
	ld de, .Stats_Trade
	hlcoord 2, 16
	call PlaceString
	ret

.Stats_Trade:
	db "STATS     TRADE@"

Function102814:
	ld a, [wMenuCursorY]
	ld [wcd52], a
	ld a, [wcd4c]
	dec a
	ld [wd002], a
	ld a, [wcd4d]
	dec a
	ld [wd003], a
	call Function102ea8
	ld a, [wcd49]
	inc a
	ld [wcd49], a
	ld a, 0
	ld [wcd4a], a
	ld hl, wcd4b
	set 1, [hl]

Function10283c:
	ld hl, wcd4b
	set 2, [hl]
	call Function1029c3
	ret z
	jr c, .asm_102852
	ld a, $10 ; Function102862
	ld [wcd49], a
	ld hl, wcd4b
	set 1, [hl]
	ret

.asm_102852
	ld a, $14 ; Function1028ab
	ld [wcd49], a
	ld hl, wcd4b
	set 3, [hl]
	ld hl, wcd4b
	set 1, [hl]
	ret

Function102862:
	ld a, $08
	call Function1028e8
	ld a, [wcd49]
	inc a
	ld [wcd49], a
	ret

Function10286f:
	call Function1028fc
	ret nc
	ld a, [wcd52]
	ld [wMenuCursorY], a
	ld a, [wcd51]
	cp $08
	jr nz, .asm_102886
	ld a, $15 ; Function1023b5
	ld [wcd49], a
	ret

.asm_102886
	call Function102ee7
	ld hl, wcd4b
	set 1, [hl]
	ld a, $1e
	ld [wcd4e], a
	ld a, $3c
	ld [wcd4f], a
	ld a, 0
	ld [wcd4a], a
	ld a, [wcd49]
	inc a
	ld [wcd49], a
	ret

Function1028a5:
	ld a, $4 ; Function1023a1
	ld [wcd49], a
	ret

Function1028ab:
	ld a, [wcd52]
	ld [wMenuCursorY], a
	call Function102f15
	ld hl, wcd4b
	set 1, [hl]
	ld a, $c ; Function1025b0
	ld [wcd49], a
	ret

Function1028bf:
	ld a, [wcd49]
	inc a
	ld [wcd49], a

Function1028c6:
	xor a
	ld [wMonType], a
	call Function102bac
	ld a, $1d ; Function102652
	ld [wcd49], a
	ret

Function1028d3:
	ld a, [wcd49]
	inc a
	ld [wcd49], a

Function1028da:
	ld a, OTPARTYMON
	ld [wMonType], a
	call Function102bac
	ld a, $1f ; Function1025e9
	ld [wcd49], a
	ret

Function1028e8:
	ld hl, wcd4b
	res 6, [hl]
	ld [wcd50], a
	farcall StartMobileInactivityTimer
	ld a, 0
	ld [wcd4a], a
	ret

Function1028fc:
	call GetJoypad
	farcall Function1009f3
	jr nc, .asm_102909
	and a
	ret

.asm_102909
	ld a, [wcd4a]
	ld hl, Jumptable_102917
	rst JumpTable
	ret nc
	ld a, 0
	ld [wcd4a], a
	ret

Jumptable_102917:
	dw Function102933
	dw Function10294f
	dw Function10295d
	dw Function10296e
	dw Function102996

Function102921:
	ld a, [wcd4a]
	ld hl, Jumptable_10292f
	rst JumpTable
	ret nc
	ld a, 0
	ld [wcd4a], a
	ret

Jumptable_10292f:
	dw Function10295d
	dw Function102984

Function102933:
	ld hl, MenuHeader_1029bb
	call LoadMenuHeader
	call Function102e07
	ld a, $32
	ld [wTextDelayFrames], a
	ld hl, wcd4b
	set 1, [hl]
	ld a, [wcd4a]
	inc a
	ld [wcd4a], a
	and a
	ret

Function10294f:
	ld a, [wTextDelayFrames]
	and a
	ret nz
	ld a, [wcd4a]
	inc a
	ld [wcd4a], a
	and a
	ret

Function10295d:
	call Function10299e
	ld a, 0
	ld [wcd27], a
	ld a, [wcd4a]
	inc a
	ld [wcd4a], a
	and a
	ret

Function10296e:
	farcall Function100382
	and a
	ld a, [wcd27]
	bit 7, a
	ret z
	ld a, [wcd4a]
	inc a
	ld [wcd4a], a
	and a
	ret

Function102984:
	farcall Function100382
	and a
	ld a, [wcd27]
	bit 7, a
	ret z
	call Function1029af
	scf
	ret

Function102996:
	call Function1029af
	call ExitMenu
	scf
	ret

Function10299e:
	ld a, $01
	ld [wccb4], a
	ld a, [wcd50]
	ld [wccb5], a
	ld a, $aa
	ld [wcd51], a
	ret

Function1029af:
	ld hl, wcd4b
	res 7, [hl]
	ld a, [wcc61]
	ld [wcd51], a
	ret

MenuHeader_1029bb:
	db MENU_BACKUP_TILES ; flags
	menu_coords 3, 10, 15, 12
	dw NULL
	db 1 ; default option

Function1029c3:
	ld a, [wcd4a]
	ld hl, Jumptable_1029cb
	rst JumpTable
	ret

Jumptable_1029cb:
	dw Function1029cf
	dw Function1029fe

Function1029cf:
	call LoadStandardMenuHeader
	hlcoord 10, 7
	ld b, 3
	ld c, 8
	ld d, h
	ld e, l
	farcall _LinkTextbox
	ld de, String_102a26
	hlcoord 12, 8
	call PlaceString
	ld hl, wcd4b
	set 1, [hl]
	ld de, MenuData3_102a33
	call Load2DMenuData
	ld a, [wcd4a]
	inc a
	ld [wcd4a], a
	xor a
	ret

Function1029fe:
	farcall Function1009f3
	ret c
	farcall MobileMenuJoypad
	ld a, c
	ld hl, wMenuJoypadFilter
	and [hl]
	ret z
	push af
	call ExitMenu
	pop af
	ld a, [wMenuCursorY]
	cp $01
	jr nz, .asm_102a21
	ld a, $01
	and a
	ret

.asm_102a21
	ld a, $01
	and a
	scf
	ret

String_102a26:
	db   "TRADE"
	next "CANCEL"
	db   "@"

MenuData3_102a33:
	db 8, 11 ; cursor start y, x
	db 2, 1 ; rows, columns
	db $80, $00 ; flags
	dn 2, 0 ; cursor offset
	db A_BUTTON ; accepted buttons

Function102a3b:
	ld a, [wcd30]
	ld [wc74e], a
	ld hl, wPlayerName
	ld de, wPlayerTrademonSenderName
	ld bc, NAME_LENGTH
	call CopyBytes
	ld a, [wcd4c]
	dec a
	ld c, a
	ld b, 0
	ld hl, wPartySpecies
	add hl, bc
	ld a, [hl]
	ld [wPlayerTrademonSpecies], a
	ld a, [wcd4c]
	dec a
	ld hl, wPartyMonOTs
	call SkipNames
	ld de, wPlayerTrademonOTName
	ld bc, NAME_LENGTH
	call CopyBytes
	ld a, [wcd4c]
	dec a
	ld hl, wPartyMon1ID
	call GetPartyLocation
	ld a, [hli]
	ld [wPlayerTrademonID], a
	ld a, [hl]
	ld [wPlayerTrademonID + 1], a
	ld a, [wcd4c]
	dec a
	ld hl, wPartyMon1DVs
	call GetPartyLocation
	ld a, [hli]
	ld [wPlayerTrademonDVs], a
	ld a, [hl]
	ld [wPlayerTrademonDVs + 1], a
	ld a, [wcd4c]
	dec a
	ld hl, wPartyMon1Species
	call GetPartyLocation
	ld b, h
	ld c, l
	farcall GetCaughtGender
	ld a, c
	ld [wPlayerTrademonCaughtData], a
	ld hl, wOTPlayerName
	ld de, wOTTrademonSenderName
	ld bc, NAME_LENGTH
	call CopyBytes

	ld a, [wcd4d]
	dec a
	ld c, a
	ld b, 0
	ld hl, wOTPartySpecies
	add hl, bc
	ld a, [hl]
	ld [wOTTrademonSpecies], a
	ld a, [wcd4d]
	dec a
	ld hl, wOTPartyMonOTs
	call SkipNames
	ld de, wOTTrademonOTName
	ld bc, NAME_LENGTH
	call CopyBytes
	ld a, [wcd4d]
	dec a
	ld hl, wOTPartyMon1ID
	call GetPartyLocation
	ld a, [hli]
	ld [wOTTrademonID], a
	ld a, [hl]
	ld [wOTTrademonID + 1], a
	ld a, [wcd4d]
	dec a
	ld hl, wOTPartyMon1DVs
	call GetPartyLocation
	ld a, [hli]
	ld [wOTTrademonDVs], a
	ld a, [hl]
	ld [wOTTrademonDVs + 1], a
	ld a, [wcd4d]
	dec a
	ld hl, wOTPartyMon1Species
	call GetPartyLocation
	ld b, h
	ld c, l
	farcall GetCaughtGender
	ld a, c
	ld [wOTTrademonCaughtData], a
	ret

Function102b12:
	ld c, 100
	call DelayFrames
	call Function102d9a
	call LoadFontsBattleExtra
	ld a, [wcd2f]
	and a
	jr nz, .asm_102b2b
	farcall Function108026
	jr .asm_102b31

.asm_102b2b
	farcall Function10802a

.asm_102b31
	ret

Function102b32:
	ld a, [wcd4c]
	dec a
	ld [wCurPartyMon], a
	ld a, $01
	ld [wForceEvolution], a
	farcall EvolvePokemon
	call Function102d9a
	call Function102dd3
	call Function102dec
	ret

Function102b4e:
	ld a, OTPARTYMON
	ld [wMonType], a
	ld a, [wMenuCursorY]
	push af
	ld de, MenuData_102b73
	call Load2DMenuData
	pop af
	ld [wMenuCursorY], a
	ld a, [wOTPartyCount]
	ld [w2DMenuNumRows], a
	ret

Function102b68: ; unreferenced
	xor a
	ld hl, wWindowStackPointer
	ld bc, $10
	call ByteFill
	ret

MenuData_102b73:
	db 9, 6 ; cursor start y, x
	db -1, 1 ; rows, columns
	db $a0, $00 ; flags
	dn 1, 0 ; cursor offset
	db D_UP | D_DOWN | A_BUTTON ; accepted buttons

Function102b7b:
	xor a
	ld [wMonType], a
	ld a, [wMenuCursorY]
	push af
	ld de, MenuData_102b94
	call Load2DMenuData
	pop af
	ld [wMenuCursorY], a
	ld a, [wPartyCount]
	ld [w2DMenuNumRows], a
	ret

MenuData_102b94:
	db 1, 6 ; cursor start y, x
	db 255, 1 ; rows, columns
	db $a0, $00 ; flags
	dn 1, 0 ; cursor offset
	db D_UP | D_DOWN | A_BUTTON ; accepted buttons

Function102b9c:
	ld a, [wcd4d]
	dec a
	hlcoord 6, 9
	ld bc, $14
	call AddNTimes
	ld [hl], $ec
	ret

Function102bac:
	ld a, [wMenuCursorY]
	dec a
	ld [wCurPartyMon], a
	call LowVolume
	call ClearSprites
	farcall _MobileStatsScreenInit
	ld a, [wCurPartyMon]
	inc a
	ld [wMenuCursorY], a
	call Function102d9a
	call ClearPalettes
	call DelayFrame
	call MaxVolume
	call Function102dd3
	call Function102dec
	call Function102db7
	ret

Function102bdc:
	ld a, [wcd4d]
	dec a
	ld hl, wOTPartyMon1Species
	call GetPartyLocation
	push hl
	ld a, [wcd4d]
	ld c, a
	ld b, 0
	ld hl, wOTPartyCount
	add hl, bc
	ld a, [hl]
	pop hl
	cp EGG
	jr z, .asm_102bfa
	cp [hl]
	jr nz, .asm_102c05

.asm_102bfa
	ld bc, MON_LEVEL
	add hl, bc
	ld a, [hl]
	cp MAX_LEVEL + 1
	jr nc, .asm_102c05
	and a
	ret

.asm_102c05
	scf
	ret

Function102c07:
	call Function102c14
	call Function102c3b
	call Function102c21
	call Function102c2e
	ret

Function102c14:
	ld hl, wPartySpecies
	ld de, wOTPartySpecies
	ld bc, 1
	call Function102c71
	ret

Function102c21:
	ld hl, wPartyMonNicknames
	ld de, wOTPartyMonNicknames
	ld bc, 11
	call Function102c71
	ret

Function102c2e:
	ld hl, wPartyMonOTs
	ld de, wOTPartyMonOTs
	ld bc, 11
	call Function102c71
	ret

Function102c3b:
	ld hl, wPartyMon1
	ld de, wOTPartyMon1
	ld bc, $30
	call Function102c71
	ret

Function102c48:
	farcall Function10165a
	ld a, 0
	call OpenSRAM
	ld hl, $a600
	ld de, wc608
	ld bc, $2f
	call Function102c71
	call CloseSRAM
	ld hl, wc608
	ld de, w5_da00
	ld bc, $1e0
	ld a, $05
	call FarCopyWRAM
	ret

Function102c71:
	ld a, [wcd4c]
	dec a
	call AddNTimes
	push hl
	ld h, d
	ld l, e
	ld a, [wcd4d]
	dec a
	call AddNTimes
	pop de
	call SwapBytes
	ret

Function102c87:
	ld a, [wJumptableIndex]
	push af
	ld a, [wcf64]
	push af
	ld a, [wcd4c]
	ld [wJumptableIndex], a
	ld a, [wPartyCount]
	ld [wcf64], a
	ld a, 0
	ld hl, $a600
	ld de, wc608
	ld bc, $11a
	call Function102d3e
	call Function102cee
	ld a, 0
	ld hl, wc608
	ld de, $a600
	ld bc, $11a
	call Function102d3e
	ld a, [wcd4d]
	ld [wJumptableIndex], a
	ld a, [wOTPartyCount]
	ld [wcf64], a
	ld a, $05
	ld hl, w5_da00
	ld de, wc608
	ld bc, $11a
	call FarCopyWRAM
	call Function102cee
	ld a, $05
	ld hl, wc608
	ld de, w5_da00
	ld bc, $11a
	call FarCopyWRAM
	pop af
	ld [wcf64], a
	pop af
	ld [wJumptableIndex], a
	ret

Function102cee:
	ld a, [wJumptableIndex]
	dec a
	call Function102d34
	ld de, wd002
	ld bc, $2f
	call CopyBytes
	ld a, [wJumptableIndex]
	ld c, a
	ld a, $06
	sub c
	ret z
	ld bc, $2f
	ld hl, 0
	call AddNTimes
	push hl
	ld a, [wJumptableIndex]
	dec a
	call Function102d34
	ld d, h
	ld e, l
	ld hl, $2f
	add hl, de
	pop bc
	call CopyBytes
	ld a, [wcf64]
	dec a
	call Function102d34
	ld d, h
	ld e, l
	ld hl, wd002
	ld bc, $2f
	call CopyBytes
	ret

Function102d34:
	ld hl, wc608
	ld bc, $2f
	call AddNTimes
	ret

Function102d3e:
	call OpenSRAM
	call CopyBytes
	call CloseSRAM
	ret

Function102d48:
	ld a, [wcd4c]
	ld e, a
	ld d, 0
	ld hl, wPartyCount
	add hl, de
	ld a, [hl]
	ld [wTempSpecies], a
	cp EGG
	jr z, .asm_102d6d
	dec a
	call SetSeenAndCaughtMon
	ld a, [wcd4c]
	dec a
	ld bc, PARTYMON_STRUCT_LENGTH
	ld hl, wPartyMon1Happiness
	call AddNTimes
	ld [hl], BASE_HAPPINESS

.asm_102d6d
	ld a, [wTempSpecies]
	cp UNOWN
	jr nz, .asm_102d98
	ld a, [wcd4c]
	dec a
	ld bc, PARTYMON_STRUCT_LENGTH
	ld hl, wPartyMon1DVs
	call AddNTimes
	predef GetUnownLetter
	farcall UpdateUnownDex
	ld a, [wFirstUnownSeen]
	and a
	jr nz, .asm_102d98
	ld a, [wUnownLetter]
	ld [wFirstUnownSeen], a

.asm_102d98
	and a
	ret

Function102d9a:
	ld a, " "
	hlcoord 0, 0
	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
	call ByteFill
	ld a, $07
	hlcoord 0, 0, wAttrmap
	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
	call ByteFill
	farcall HDMATransferAttrmapAndTilemapToWRAMBank3
	ret

Function102db7:
	call Function102e4f
	call Function102e3e
	ld hl, wcd4b
	set 1, [hl]
	ret

Function102dc3:
	hlcoord 0, 12
	ld b,  4
	ld c, 18
	ld d, h
	ld e, l
	farcall _LinkTextbox
	ret

Function102dd3:
	call DisableLCD
	ld de, MobileTradeLightsGFX
	ld hl, vTiles0
	lb bc, BANK(MobileTradeLightsGFX), 4
	call Get2bpp
	farcall __LoadTradeScreenBorderGFX
	call EnableLCD
	ret

Function102dec:
	ld hl, MobileTradeLightsPalettes
	ld de, wOBPals1
	ld bc, 4 palettes
	ld a, $05
	call FarCopyWRAM
	farcall Function49742
	call SetPalettes
	call DelayFrame
	ret

Function102e07:
	hlcoord 3, 10
	ld b,  1
	ld c, 11
	ld a, [wBattleMode]
	and a
	jr z, .link_battle
	call Textbox
	jr .okay

.link_battle
; the next three operations are pointless
	hlcoord 3, 10
	ld b,  1
	ld c, 11
	ld d, h
	ld e, l
	farcall _LinkTextbox

.okay
	ld de, .waiting
	hlcoord 4, 11
	call PlaceString
	ret

.waiting
	db "Waiting...!@"

Function102e3e:
	ld de, .CancelString
	hlcoord 10, 17
	call PlaceString
	ret

.CancelString:
	db "CANCEL@"

Function102e4f:
	farcall LoadMobileTradeBorderTilemap
	farcall _InitMG_Mobile_LinkTradePalMap
	ld de, wPlayerName
	hlcoord 4, 0
	call PlaceString
	ld a, $14
	ld [bc], a
	ld de, wOTPlayerName
	hlcoord 4, 8
	call PlaceString
	ld a, $14
	ld [bc], a
	hlcoord 7, 1
	ld de, wPartySpecies
	call .PlaceSpeciesNames
	hlcoord 7, 9
	ld de, wOTPartySpecies
	call .PlaceSpeciesNames
	ret

.PlaceSpeciesNames:
	ld c, 0
.count_loop
	ld a, [de]
	cp $ff
	ret z
	ld [wNamedObjectIndex], a
	push bc
	push hl
	push de
	push hl
	ld a, c
	ldh [hDividend], a
	call GetPokemonName
	pop hl
	call PlaceString
	pop de
	inc de
	pop hl
	ld bc, SCREEN_WIDTH
	add hl, bc
	pop bc
	inc c
	jr .count_loop

Function102ea8:
	call Function102dc3
	ld a, [wcd4c]
	dec a
	ld c, a
	ld b, 0
	ld hl, wPartySpecies
	add hl, bc
	ld a, [hl]
	ld [wNamedObjectIndex], a
	call GetPokemonName
	ld hl, wStringBuffer1
	ld de, wStringBuffer2
	ld bc, 11
	call CopyBytes
	ld a, [wcd4d]
	dec a
	ld c, a
	ld b, 0
	ld hl, wOTPartySpecies
	add hl, bc
	ld a, [hl]
	ld [wNamedObjectIndex], a
	call GetPokemonName
	ld hl, TradingMonForOTMonText
	call PrintTextboxText
	ret

TradingMonForOTMonText:
	text_far _TradingMonForOTMonText
	text_end

Function102ee7:
	call Function102dc3
	ld de, String_102ef4
	hlcoord 1, 14
	call PlaceString
	ret

String_102ef4:
	db   "Too bad! The trade"
	next "was canceled!"
	db   "@"

Function102f15:
	call Function102dc3
	ld de, .TooBadTheTradeWasCanceled
	hlcoord 1, 14
	call PlaceString
	ret

.TooBadTheTradeWasCanceled:
	db "こうかんを キャンセルしました@"

Function102f32:
	call Function102dc3
	ld de, .TradeCompleted
	hlcoord 1, 14
	call PlaceString
	ret

.TradeCompleted:
	db "Trade completed!@"

Function102f50:
	call Function102dc3
	ld de, .PleaseWait
	hlcoord 1, 14
	call PlaceString
	ret

.PleaseWait:
	db "しょうしょう おまち ください@"

Function102f6d:
	call Function102dc3
	ld de, .Finished
	hlcoord 1, 14
	call PlaceString
	ret

.Finished:
	db "しゅうりょう します@"

Function102f85:
	ld a, [wd003]
	ld c, a
	ld b, 0
	ld hl, wOTPartySpecies
	add hl, bc
	ld a, [hl]
	ld [wNamedObjectIndex], a
	call GetPokemonName
	call Function102dc3
	ld de, String_102fb2
	hlcoord 1, 14
	call PlaceString
	ld de, wStringBuffer1
	hlcoord 13, 14
	call PlaceString
	ld de, String_102fcc
	call PlaceString
	ret

String_102fb2:
	db   "あいてがわ<PKMN>えらんだ "
	next "いじょう<PKMN>あるようです!!"
	db   "@"

String_102fcc:
	db "に@"

Function102fce:
	call Function102dc3
	ld de, String_102fdb
	hlcoord 1, 14
	call PlaceString
	ret

String_102fdb:
	db   "あいてがわ<NO>せんたくに"
	next "いじょう<PKMN>あるようです!!"
	done

Function102ff5:
	call Function102dc3
	ld de, String_103002
	hlcoord 1, 14
	call PlaceString
	ret

String_103002:
	db   "その#を こうかんすると"
	next "せんとう できなく なっちゃうよ!"
	db   "@"

Function103021:
	call Function102dc3
	ld de, String_10302e
	hlcoord 1, 14
	call PlaceString
	ret

String_10302e:
	db   "あいてが ちゅうしを えらんだので"
	next "こうかんを ちゅうし します"
	db   "@"

Function10304f:
	xor a
	ld [wAttrmapEnd], a
	ld [wcf42], a
	ld [wcf44], a
	ld [wcf45], a
	ret

Function10305d:
	nop
	ld a, [wAttrmapEnd]
	and a
	ret z
	call Function10307f
	ret c
	call Function103094
	call Function10306e
	ret

Function10306e:
	ld a, $01
	ldh [hOAMUpdate], a
	call ClearSprites
	ld de, wShadowOAM
	call Function1030cd
	xor a
	ldh [hOAMUpdate], a
	ret

Function10307f:
	ld c, $02
	ld hl, wcd4b
	bit 7, [hl]
	jr z, .asm_10308a
	ld c, $01

.asm_10308a
	ld hl, wcf45
	inc [hl]
	ld a, [hl]
	cp c
	ret c
	xor a
	ld [hl], a
	ret

Function103094:
	ld hl, wcd4b
	bit 7, [hl]
	jr nz, .asm_1030c0
	ld a, [wcf42]
	bit 7, a
	jr nz, .asm_1030b2
	ld a, [wcf44]
	inc a
	ld [wcf44], a
	cp $2c
	ret nz
	ld hl, wcf42
	set 7, [hl]
	ret

.asm_1030b2
	ld a, [wcf44]
	dec a
	ld [wcf44], a
	ret nz
	ld hl, wcf42
	res 7, [hl]
	ret

.asm_1030c0
	ld hl, wcf44
	ld a, [hl]
	and a
	jr z, .asm_1030ca
	dec a
	ld [hl], a
	ret nz

.asm_1030ca
	ld [hl], $2c
	ret

Function1030cd:
	ld a, [wcf44]
	ld l, a
	ld h, 0
	add hl, hl
	add hl, hl
	add hl, hl
	ld bc, Unknown_103112
	add hl, bc
	ld b, $30
	ld c, $08
.asm_1030de
	push hl
	ld hl, wcd4b
	bit 7, [hl]
	pop hl
	ld a, 0
	jr z, .asm_1030eb
	ld a, $05
.asm_1030eb

	add [hl]
	inc hl
	push hl

	add a
	add a

	add LOW(Unknown_10327a)
	ld l, a
	ld a, HIGH(Unknown_10327a)
	adc 0
	ld h, a

	ld a, b
	add [hl]
	inc hl
	ld [de], a
	inc de
	ld a, $0a
	add [hl]
	inc hl
	ld [de], a
	inc de
	ld a, [hli]
	ld [de], a
	inc de
	ld a, [hli]
	ld [de], a
	inc de
	pop hl
	ld a, b
	add $08
	ld b, a
	dec c
	jr nz, .asm_1030de
	ret

Unknown_103112:
	db $00, $00, $00, $00, $00, $00, $00, $00
	db $00, $00, $00, $00, $00, $00, $00, $00
	db $00, $00, $00, $00, $00, $00, $00, $00
	db $00, $00, $00, $00, $00, $00, $00, $00
	db $00, $00, $00, $00, $00, $00, $00, $00
	db $00, $00, $00, $00, $00, $00, $00, $00
	db $00, $00, $00, $00, $00, $00, $00, $00
	db $00, $00, $00, $00, $00, $00, $00, $00
	db $01, $00, $00, $00, $00, $00, $00, $00
	db $02, $01, $00, $00, $00, $00, $00, $00
	db $03, $02, $01, $00, $00, $00, $00, $00
	db $04, $03, $02, $01, $00, $00, $00, $00
	db $04, $04, $03, $02, $01, $00, $00, $00
	db $04, $04, $04, $03, $02, $01, $00, $00
	db $04, $04, $04, $04, $03, $02, $01, $00
	db $04, $04, $04, $04, $04, $03, $02, $01
	db $04, $04, $04, $04, $04, $04, $03, $02
	db $04, $04, $04, $04, $04, $04, $04, $03
	db $04, $04, $04, $04, $04, $04, $04, $04
	db $04, $04, $04, $04, $04, $04, $04, $04
	db $04, $04, $04, $04, $04, $04, $04, $04
	db $04, $04, $04, $04, $04, $04, $04, $04
	db $04, $04, $04, $04, $04, $04, $04, $04
	db $04, $04, $04, $04, $04, $04, $04, $04
	db $04, $04, $04, $04, $04, $04, $04, $04
	db $04, $04, $04, $04, $04, $04, $04, $04
	db $03, $04, $04, $04, $04, $04, $04, $04
	db $02, $03, $04, $04, $04, $04, $04, $04
	db $01, $02, $03, $04, $04, $04, $04, $04
	db $00, $01, $02, $03, $04, $04, $04, $04
	db $00, $00, $01, $02, $03, $04, $04, $04
	db $00, $00, $00, $01, $02, $03, $04, $04
	db $00, $00, $00, $00, $01, $02, $03, $04
	db $00, $00, $00, $00, $00, $01, $02, $03
	db $00, $00, $00, $00, $00, $00, $01, $02
	db $00, $00, $00, $00, $00, $00, $00, $01
	db $00, $00, $00, $00, $00, $00, $00, $00
	db $00, $00, $00, $00, $00, $00, $00, $00
	db $00, $00, $00, $00, $00, $00, $00, $00
	db $00, $00, $00, $00, $00, $00, $00, $00
	db $00, $00, $00, $00, $00, $00, $00, $00
	db $00, $00, $00, $00, $00, $00, $00, $00
	db $00, $00, $00, $00, $00, $00, $00, $00
	db $00, $00, $00, $00, $00, $00, $00, $00
	db $00, $00, $00, $00, $00, $00, $00, $00

Unknown_10327a:
	db $00, $00, $00, $00
	db $00, $00, $01, $00
	db $00, $00, $02, $00
	db $00, $00, $03, $00
	db $00, $00, $01, $01
	db $00, $00, $00, $00
	db $00, $00, $01, $02
	db $00, $00, $02, $02
	db $00, $00, $03, $02
	db $00, $00, $01, $03

MobileTradeLightsGFX:
INCBIN "gfx/mobile/mobile_trade_lights.2bpp"

MobileTradeLightsPalettes:
INCLUDE "gfx/mobile/mobile_trade_lights.pal"

Function103302:
	call Function103309
	call Function103362
	ret

Function103309:
	xor a
	ldh [hBGMapMode], a
	ld hl, wd1ea
	ld bc, 10
	xor a
	call ByteFill
	ld a, BANK(s4_a60c)
	call OpenSRAM
	ld a, [wdc41]
	ld [s4_a60c], a
	ld [wd1ea], a
	call CloseSRAM
	call Function1035c6
	ld a, [hli]
	ld e, a
	ld a, [hli]
	ld d, a
	ld a, [hli]
	ld c, a
	ld a, [hli]
	ld b, a
	ld a, [hli]
	ld [wd1ef], a
	ld a, [hli]
	ld [wd1ec], a
	ld a, [hli]
	ld [wd1ed], a
	ld h, d
	ld l, e
	call Function3eea
	ld hl, wd1ec
	ld a, [hli]
	ld h, [hl]
	ld l, a
	ld a, [hl]
	ld [wd1ee], a
	call Function1034be
	call UpdateSprites
	farcall HDMATransferAttrmapAndTilemapToWRAMBank3
	ld a, $01
	ld [wd1f0], a
	call Function10339a
	ret

Function103362:
.asm_103362
	ld a, [wd1f0]
	ld [wd1f1], a
	call Function1033af
	call Function10339a
	call Function10342c
	farcall HDMATransferTilemapToWRAMBank3
	ld a, [wd1eb]
	bit 7, a
	jr z, .asm_103362
	ld hl, wd1eb
	bit 6, [hl]
	jr z, .asm_103398
	ld a, BANK(s4_a60c)
	call OpenSRAM
	ld a, [wd1ea]
	ld [s4_a60c], a
	ld [wdc41], a
	call CloseSRAM
	xor a
	ret

.asm_103398
	scf
	ret

Function10339a:
	ld a, [wd1f0]
	ld [wd1f2], a
	ld c, a
	ld b, 0
	ld hl, wd1ec
	ld a, [hli]
	ld h, [hl]
	ld l, a
	add hl, bc
	ld a, [hl]
	ld [wd1f3], a
	ret

Function1033af:
	call GetJoypad
	ldh a, [hJoyPressed]
	bit D_LEFT_F, a
	jr nz, .left
	bit D_RIGHT_F, a
	jr nz, .right
	bit B_BUTTON_F, a
	jr nz, .b
	bit A_BUTTON_F, a
	jr nz, .a
	bit D_UP_F, a
	jr nz, .up
	bit D_DOWN_F, a
	jr nz, .down
	ret

.up
	ld a, [wd1f0]
	dec a
	ld [wd1f0], a
	cp 1
	ret nc
	ld a, [wd1ee]
	ld [wd1f0], a
	ret

.down
	ld a, [wd1f0]
	inc a
	ld [wd1f0], a
	ld c, a
	ld a, [wd1ee]
	cp c
	ret nc
	ld a, 1
	ld [wd1f0], a
	ret

.b
	call PlayClickSFX
	ld hl, wd1eb
	set 7, [hl]
	ret

.a
	ld a, [wd1f3]
	cp 3
	jr nz, .a_return
	ld de, SFX_TRANSACTION
	call PlaySFX
	ld hl, wd1eb
	set 7, [hl]
	ld hl, wd1eb
	set 6, [hl]
	ret

.left
.right
.a_return
	ld a, [wd1f3]
	cp 3
	ret z
	ld de, SFX_PUSH_BUTTON
	call PlaySFX
	ld bc, 8
	call Function10350f
	ld a, [wd1ea]
	xor e
	ld [wd1ea], a
	ret

Function10342c:
	ld a, [wd1f0]
	ld [wd1f2], a
	call Function103490
	call Function10343c
	call Function1034a7
	ret

Function10343c:
	ld a, [wd1f3]
	cp $02
	jr nz, .asm_103452
	ld bc, 1
	call Function1034f7
	ld c, $12
	ld b, $01
	call Function1034e0
	jr .asm_10345f

.asm_103452
	ld bc, $ffed
	call Function1034f7
	ld c, $12
	ld b, $02
	call Function1034e0

.asm_10345f
	ld bc, 0
	call Function10350f
	ld bc, 1
	call Function103487
	ld bc, 8
	call Function10350f
	ld a, [wd1ea]
	and e
	ld bc, 2
	jr z, .asm_10347d
	ld bc, 4

.asm_10347d
	call Function10350f
	ld bc, 11
	call Function103487
	ret

Function103487:
	push de
	call Function1034f7
	pop de
	call PlaceString
	ret

Function103490:
	hlcoord 0, 15
	ld c, $14
	ld b, $03
	call Function1034e0
	ld bc, 6
	call Function10350f
	hlcoord 1, 16
	call PlaceString
	ret

Function1034a7:
	ld a, [wd1f1]
	ld [wd1f2], a
	ld bc, 10
	call Function1034f7
	ld [hl], $7f
	ld bc, 10
	call Function1034f1
	ld [hl], $ed
	ret

Function1034be:
	ld a, $01
	ld [wd1f2], a
	ld hl, wd1ec
	ld a, [hli]
	ld h, [hl]
	ld l, a
	ld a, [hli]
.asm_1034ca
	push af
	ld a, [hli]
	push hl
	ld [wd1f3], a
	call Function10343c
	ld hl, wd1f2
	inc [hl]
	pop hl
	pop af
	dec a
	jr nz, .asm_1034ca
	call Function103490
	ret

Function1034e0:
	push bc
	push hl
	call ClearBox
	pop hl
	ld bc, wAttrmap - wTilemap
	add hl, bc
	pop bc
	ld a, $06
	call FillBoxWithByte
	ret

Function1034f1:
	ld a, [wd1f0]
	ld [wd1f2], a

Function1034f7:
	hlcoord 0, 0
	add hl, bc
	ld a, [wd1ef]
	ld bc, SCREEN_WIDTH
	call AddNTimes
	ld a, [wd1f2]
	dec a
	ld bc, 40
	call AddNTimes
	ret

Function10350f:
	ld a, [wd1f3]
	push bc
	ld hl, Unknown_103522
	ld bc, 9
	call AddNTimes
	pop bc
	add hl, bc
	ld a, [hli]
	ld d, [hl]
	ld e, a
	ret

Unknown_103522:
	dw String_103546
	dw String_103598
	dw String_1035a0
	dw String_10355f
	db $01
	dw String_10354f
	dw String_1035a8
	dw String_1035b1
	dw String_103571
	db $02
	dw String_103557
	dw String_1035ba
	dw String_1035bd
	dw String_103585
	db $04
	dw String_103545
	dw String_1035c1
	dw String_1035c1
	dw String_103545

String_103545: db "@"
String_103546: db "せんとう アニメ@"
String_10354f: db "でんわばんごう@"
String_103557: db "めいしこうかん@"
String_10355f: db "でんわを かけるひとが きめられる@"
String_103571: db "でんわばんごうの にゅうりょくのしかた@"
String_103585: db "あたらしいめいしが あれば こうかん@"
String_103598: db "とばして みる@"
String_1035a0: db "じっくり みる@"
String_1035a8: db "めいしからえらぶ@"
String_1035b1: db "すうじで いれる@"
String_1035ba: db "する@"
String_1035bd: db "しない@"
String_1035c1: db "けってい@"

Function1035c6:
	farcall Function10138b
	ld b, 0
	ld hl, Unknown_1035d7
	add hl, bc
	add hl, bc
	ld a, [hli]
	ld h, [hl]
	ld l, a
	ret

Unknown_1035d7:
	dw Unknown_1035e7
	dw Unknown_1035f3
	dw Unknown_103608
	dw Unknown_103608
	dw Unknown_1035fe
	dw AskMobileOrCable
	dw AskMobileOrCable
	dw AskMobileOrCable

Unknown_1035e7:
	dwcoord 0, 6
	db $12, $07, $07
	dw .this
.this
	db 4, 2, 1, 0, 3

Unknown_1035f3:
	dwcoord 0, 7
	db $12, $06, $09
	dw .this
.this
	db 3, 2, 1, 3

Unknown_1035fe:
	dwcoord 0, 9
	db $12, $04, $0b
	dw .this
.this
	db 2, 0, 3

Unknown_103608:
	dwcoord 0, 9
	db $12, $04, $0b
	dw .this
.this
	db 2, 2, 3

AskMobileOrCable:
	ld hl, MenuHeader_103640
	call LoadMenuHeader
	ld a, [wMobileOrCable_LastSelection]
	and $0f
	jr z, .skip_load
	ld [wMenuCursorPosition], a

.skip_load
	call VerticalMenu
	call CloseWindow
	jr c, .pressed_b
	ld a, [wMenuCursorY]
	ld [wScriptVar], a
	ld c, a
	ld a, [wMobileOrCable_LastSelection]
	and $f0
	or c
	ld [wMobileOrCable_LastSelection], a
	ret

.pressed_b
	xor a
	ld [wScriptVar], a
	ret

MenuHeader_103640:
	db MENU_BACKUP_TILES ; flags
	menu_coords 13, 6, SCREEN_WIDTH - 1, TEXTBOX_Y - 1
	dw MenuData_103648
	db 1 ; default option

MenuData_103648:
	db STATICMENU_CURSOR ; flags
	db 2
	db "モバイル@"
	db "ケーブル@"

Function103654:
	farcall Mobile_AlwaysReturnNotCarry
	bit 7, c
	jr nz, .asm_103666
	ld hl, wcd2a
	res 5, [hl]
	ld c, $02
	ret

.asm_103666
	ld hl, wcd2a
	set 5, [hl]
	ld c, $01
	ret

Mobile_SelectThreeMons:
	farcall Mobile_AlwaysReturnNotCarry
	bit 7, c
	jr z, .asm_10369b
	ld hl, MobileBattleMustPickThreeMonText
	call PrintText
	call YesNoBox
	jr c, .asm_103696
	farcall CheckForMobileBattleRules
	jr nc, .asm_103690
	call JoyWaitAorB
	jr .asm_103696

.asm_103690
	ld a, $01
	ld [wScriptVar], a
	ret

.asm_103696
	xor a
	ld [wScriptVar], a
	ret

.asm_10369b
	ld hl, wMobileOrCable_LastSelection
	bit 7, [hl]
	set 7, [hl]
	jr nz, .asm_1036b5
	ld hl, MobileBattleMoreInfoText
	call PrintText
	call YesNoBox
	jr c, .asm_1036b5
	call Function1036f9
	call JoyWaitAorB

.asm_1036b5
	call Function103700
	jr c, .asm_1036f4
	ld hl, MenuHeader_103747
	call LoadMenuHeader
	call VerticalMenu
	call ExitMenu
	jr c, .asm_1036f4
	ld a, [wMenuCursorY]
	cp $01
	jr z, .asm_1036d9
	cp $02
	jr z, .asm_1036f4
	cp $03
	jr z, .asm_1036ec
	jr .asm_1036b5

.asm_1036d9
	farcall CheckForMobileBattleRules
	jr nc, .asm_1036e6
	call JoyWaitAorB
	jr .asm_1036f4

.asm_1036e6
	ld a, $01
	ld [wScriptVar], a
	ret

.asm_1036ec
	call Function1036f9
	call JoyWaitAorB
	jr .asm_1036b5

.asm_1036f4
	xor a
	ld [wScriptVar], a
	ret

Function1036f9:
	ld hl, MobileBattleRulesText
	call PrintText
	ret

Function103700:
	ld c, 10
	ld hl, wSwarmFlags
	bit SWARMFLAGS_MOBILE_4_F, [hl]
	jr z, .asm_10370f
	farcall MobileBattleGetRemainingTime
.asm_10370f
	ld a, c
	ld [wStringBuffer2], a
	ld a, [wStringBuffer2]
	cp 5
	jr nc, .five_or_more_mins
	cp 2
	jr nc, .two_to_five_mins
	cp 1
	jr nc, .one_min
	jr .times_up

.five_or_more_mins
	ld hl, WouldYouLikeToMobileBattleText
	call PrintText
	and a
	ret

.two_to_five_mins
	ld hl, WantAQuickMobileBattleText
	call PrintText
	and a
	ret

.one_min
	ld hl, WantToRushThroughAMobileBattleText
	call PrintText
	and a
	ret

.times_up
	ld hl, PleaseTryAgainTomorrowText
	call PrintText
	call JoyWaitAorB
	scf
	ret

MenuHeader_103747:
	db MENU_BACKUP_TILES ; flags
	menu_coords 13, 5, SCREEN_WIDTH - 1, TEXTBOX_Y - 1
	dw MenuData_10374f
	db 1 ; default option

MenuData_10374f:
	db STATICMENU_CURSOR | STATICMENU_NO_TOP_SPACING ; flags
	db 3
	db "はい@"
	db "やめる@"
	db "せつめい@"

MobileBattleMustPickThreeMonText:
	text_far _MobileBattleMustPickThreeMonText
	text_end

MobileBattleMoreInfoText:
	text_far _MobileBattleMoreInfoText
	text_end

MobileBattleRulesText:
	text_far _MobileBattleRulesText
	text_end

WouldYouLikeToMobileBattleText:
	text_far _WouldYouLikeToMobileBattleText
	text_end

WantAQuickMobileBattleText:
	text_far _WantAQuickMobileBattleText
	text_end

WantToRushThroughAMobileBattleText:
	text_far _WantToRushThroughAMobileBattleText
	text_end

PleaseTryAgainTomorrowText:
	text_far _PleaseTryAgainTomorrowText
	text_end

Function103780:
	ld a, [wChosenCableClubRoom]
	push af
	call Function10378c
	pop af
	ld [wChosenCableClubRoom], a
	ret

Function10378c:
	ld c, 0
	ld hl, wSwarmFlags
	bit SWARMFLAGS_MOBILE_4_F, [hl]
	jr nz, .already_set
	ld c, 1
	ld hl, wSwarmFlags
	set SWARMFLAGS_MOBILE_4_F, [hl]

.already_set
	push bc
	farcall Link_SaveGame
	pop bc
	jr c, .failed_to_save
	ld a, 1
	ld [wScriptVar], a
	ld a, c
	and a
	ret z
	farcall MobileBattleResetTimer
	ret

.failed_to_save
	xor a
	ld [wScriptVar], a
	ld a, c
	and a
	ret z
	ld hl, wSwarmFlags
	res SWARMFLAGS_MOBILE_4_F, [hl]
	ret

Function1037c2:
	call MobileCheckRemainingBattleTime
	jr c, .nope
	ld a, [wdc5f]
	and a
	jr z, .nope
	ld hl, TryAgainUsingSameSettingsText
	call PrintText
	call YesNoBox
	jr c, .nope
	ld a, $01
	ld [wScriptVar], a
	ret

.nope
	xor a
	ld [wdc5f], a
	ld [wScriptVar], a
	ret

TryAgainUsingSameSettingsText:
	text_far _TryAgainUsingSameSettingsText
	text_end

Function1037eb:
	call MobileCheckRemainingBattleTime
	jr nc, .asm_103807
	ld hl, MobileBattleLessThanOneMinuteLeftText
	call PrintText
	call JoyWaitAorB
	ld hl, MobileBattleNoTimeLeftForLinkingText
	call PrintText
	call JoyWaitAorB
	xor a
	ld [wScriptVar], a
	ret

.asm_103807
	ld a, [wdc60]
	and a
	jr nz, .asm_103813
	ld a, $01
	ld [wScriptVar], a
	ret

.asm_103813
	ld a, $02
	ld [wScriptVar], a
	ret

MobileBattleLessThanOneMinuteLeftText:
	text_far _MobileBattleLessThanOneMinuteLeftText
	text_end

MobileBattleNoTimeLeftForLinkingText:
	text_far _MobileBattleNoTimeLeftForLinkingText
	text_end

MobileCheckRemainingBattleTime:
; Returns carry if less than one minute remains
	farcall Mobile_AlwaysReturnNotCarry
	bit 7, c
	jr nz, .ok
	farcall MobileBattleGetRemainingTime
	ld a, c
	cp 1
	jr c, .fail

.ok
	xor a
	ret

.fail
	scf
	ret

Function10383c:
	ld a, $01
	ld [wdc60], a
	xor a
	ld hl, wPlayerMonSelection
	ld [hli], a
	ld [hli], a
	ld [hl], a
	ld hl, PickThreeMonForMobileBattleText
	call PrintText
	call JoyWaitAorB
	farcall Script_reloadmappart
	farcall Function4a94e
	jr c, .asm_103870
	ld hl, wd002
	ld de, wPlayerMonSelection
	ld bc, 3
	call CopyBytes
	xor a
	ld [wScriptVar], a
	ret

.asm_103870
	ld a, $01
	ld [wScriptVar], a
	ret

PickThreeMonForMobileBattleText:
	text_far _PickThreeMonForMobileBattleText
	text_end

Function10387b:
	farcall Mobile_AlwaysReturnNotCarry
	bit 7, c
	ret nz
	farcall MobileBattleGetRemainingTime
	ld a, c
	ld [wStringBuffer2], a
	ld hl, MobileBattleRemainingTimeText
	call PrintText
	call JoyWaitAorB
	ret

MobileBattleRemainingTimeText:
	text_far _MobileBattleRemainingTimeText
	text_end