shithub: pokecrystal

Download patch

ref: b02305625920d42649587d6ba6504777dcac25a0
parent: 93a129eb6dc261faccaf2b2d58daf3db204ab3ba
author: PikalaxALT <[email protected]>
date: Thu Nov 19 18:38:16 EST 2015

engine/stats_screen.asm

--- a/contents.asm
+++ b/contents.asm
@@ -48,6 +48,8 @@
 UNOWN_PIC_POINTERS        EQU $49
 TRAINER_PIC_POINTERS      EQU $4A
 
+PICS_FIX                  EQU $36
+
 PICS_1                    EQU $48
 PICS_2                    EQU $49
 PICS_3                    EQU $4A
--- /dev/null
+++ b/engine/stats_screen.asm
@@ -1,0 +1,1150 @@
+Function4dc7b: ; 4dc7b (13:5c7b)
+	ld a, [wLinkMode]
+	cp LINK_MOBILE
+	jr nz, StatsScreenInit
+
+	ld a, [wBattleMode] ; wd22d (aliases: EnemyMonEnd)
+	and a
+	jr z, StatsScreenInit
+	jr Function4dc8f
+
+StatsScreenInit: ; 4dc8a
+	ld hl, StatsScreenMain
+	jr StatsScreenInit_gotaddress
+
+Function4dc8f: ; 4dc8f
+	ld hl, StatsScreenBattle
+	jr StatsScreenInit_gotaddress
+
+StatsScreenInit_gotaddress: ; 4dc94
+	ld a, [hMapAnims]
+	push af
+	xor a
+	ld [hMapAnims], a ; disable overworld tile animations
+	ld a, [wc2c6] ; whether sprite is to be mirrorred
+	push af
+	ld a, [wJumptableIndex]
+	ld b, a
+	ld a, [wcf64]
+	ld c, a
+
+	push bc
+	push hl
+	call ClearBGPalettes
+	call ClearTileMap
+	call UpdateSprites
+	callba Functionfb53e
+	pop hl
+	call _hl_
+	call ClearBGPalettes
+	call ClearTileMap
+	pop bc
+
+	; restore old values
+	ld a, b
+	ld [wJumptableIndex], a
+	ld a, c
+	ld [wcf64], a
+	pop af
+	ld [wc2c6], a
+	pop af
+	ld [hMapAnims], a
+	ret
+; 0x4dcd2
+
+StatsScreenMain: ; 0x4dcd2
+	xor a
+	ld [wJumptableIndex], a
+	; stupid interns
+	ld [wcf64], a
+	ld a, [wcf64]
+	and $fc
+	or $1
+	ld [wcf64], a
+.loop ; 4dce3
+	ld a, [wJumptableIndex]
+	and $7f
+	ld hl, StatsScreenPointerTable
+	rst JumpTable
+	call Function4dd3a ; check for keys?
+	ld a, [wJumptableIndex]
+	bit 7, a
+	jr z, .loop
+	ret
+; 0x4dcf7
+
+StatsScreenBattle: ; 4dcf7
+	xor a
+	ld [wJumptableIndex], a
+	; stupid interns
+	ld [wcf64], a
+	ld a, [wcf64]
+	and $fc
+	or $1
+	ld [wcf64], a
+.loop
+	callba Function100dd2
+	ld a, [wJumptableIndex]
+	and $7f
+	ld hl, StatsScreenPointerTable
+	rst JumpTable
+	call Function4dd3a
+	callba Function100dfd
+	jr c, .exit
+	ld a, [wJumptableIndex]
+	bit 7, a
+	jr z, .loop
+
+.exit
+	ret
+; 4dd2a
+
+StatsScreenPointerTable: ; 4dd2a
+	dw MonStatsInit ; regular pokémon
+	dw EggStatsInit ; egg
+	dw StatsScreenWaitCry
+	dw Function4ddac
+	dw Function4ddc6
+	dw StatsScreenWaitCry
+	dw Function4ddd6
+	dw Function4dd6c
+; 4dd3a
+
+
+Function4dd3a: ; 4dd3a (13:5d3a)
+	ld hl, wcf64
+	bit 6, [hl]
+	jr nz, .asm_4dd49
+	bit 5, [hl]
+	jr nz, .asm_4dd56
+	call DelayFrame
+	ret
+.asm_4dd49
+	callba Functiond00b4
+	jr nc, .asm_4dd56
+	ld hl, wcf64
+	res 6, [hl]
+.asm_4dd56
+	ld hl, wcf64
+	res 5, [hl]
+	callba Function10402d
+	ret
+
+Function4dd62: ; 4dd62 (13:5d62)
+	ld a, [wJumptableIndex]
+	and $80
+	or h
+	ld [wJumptableIndex], a
+	ret
+
+Function4dd6c: ; 4dd6c (13:5d6c)
+	ld hl, wJumptableIndex
+	set 7, [hl]
+	ret
+
+MonStatsInit: ; 4dd72 (13:5d72)
+	ld hl, wcf64
+	res 6, [hl]
+	call ClearBGPalettes
+	call ClearTileMap
+	callba Function10402d
+	call Function4ddf2
+	ld a, [CurPartySpecies]
+	cp EGG
+	jr z, .asm_4dd9b
+	call Function4deea
+	ld hl, wcf64
+	set 4, [hl]
+	ld h, $4
+	call Function4dd62
+	ret
+.asm_4dd9b
+	ld h, $1
+	call Function4dd62
+	ret
+
+EggStatsInit: ; 4dda1
+	call EggStatsScreen
+	ld a, [wJumptableIndex]
+	inc a
+	ld [wJumptableIndex], a
+	ret
+; 0x4ddac
+
+
+Function4ddac: ; 4ddac (13:5dac)
+	call Function4de2c
+	jr nc, .asm_4ddb7
+	ld h, $0
+	call Function4dd62
+	ret
+.asm_4ddb7
+	bit 0, a
+	jr nz, .asm_4ddc0
+	and $c3
+	jp Function4de54
+.asm_4ddc0
+	ld h, $7
+	call Function4dd62
+	ret
+
+Function4ddc6: ; 4ddc6 (13:5dc6)
+	call Function4dfb6
+	ld hl, wcf64
+	res 4, [hl]
+	ld a, [wJumptableIndex]
+	inc a
+	ld [wJumptableIndex], a
+	ret
+
+Function4ddd6: ; 4ddd6 (13:5dd6)
+	call Function4de2c
+	jr nc, .asm_4dde1
+	ld h, $0
+	call Function4dd62
+	ret
+
+.asm_4dde1
+	and $f3
+	jp Function4de54
+
+StatsScreenWaitCry: ; 4dde6 (13:5de6)
+	call IsSFXPlaying
+	ret nc
+	ld a, [wJumptableIndex]
+	inc a
+	ld [wJumptableIndex], a
+	ret
+
+Function4ddf2: ; 4ddf2 (13:5df2)
+	ld a, [MonType]
+	cp BREEDMON
+	jr nz, .asm_4de10
+	ld a, [wd018_Mon]
+	ld [CurSpecies], a
+	call GetBaseData
+	ld hl, wd018_Mon
+	ld de, TempMon
+	ld bc, PARTYMON_STRUCT_LENGTH
+	call CopyBytes
+	jr .asm_4de2a
+.asm_4de10
+	callba CopyPkmnToTempMon
+	ld a, [CurPartySpecies]
+	cp EGG
+	jr z, .asm_4de2a
+	ld a, [MonType]
+	cp BOXMON
+	jr c, .asm_4de2a
+	callba Function50890
+.asm_4de2a
+	and a
+	ret
+
+Function4de2c: ; 4de2c (13:5e2c)
+	call GetJoypad
+	ld a, [MonType]
+	cp BREEDMON
+	jr nz, .notbreedmon
+	push hl
+	push de
+	push bc
+	callba Functione2f95
+	pop bc
+	pop de
+	pop hl
+	ld a, [wcf73]
+	and $c0
+	jr nz, .set_carry
+	ld a, [wcf73]
+	jr .clear_flags
+
+.notbreedmon
+	ld a, [hJoyPressed]
+.clear_flags
+	and a
+	ret
+
+.set_carry
+	scf
+	ret
+
+Function4de54: ; 4de54 (13:5e54)
+	push af
+	ld a, [wcf64]
+	and $3
+	ld c, a
+	pop af
+	bit 1, a
+	jp nz, Function4dee4
+	bit 5, a
+	jr nz, .asm_4dec7
+	bit 4, a
+	jr nz, .asm_4debd
+	bit 0, a
+	jr nz, .asm_4deb8
+	bit 6, a
+	jr nz, .asm_4dea0
+	bit 7, a
+	jr nz, .asm_4de77
+	jr .asm_4dece
+.asm_4de77
+	ld a, [MonType]
+	cp BOXMON
+	jr nc, .asm_4dece
+	and a
+	ld a, [PartyCount]
+	jr z, .asm_4de87
+	ld a, [OTPartyCount]
+.asm_4de87
+	ld b, a
+	ld a, [CurPartyMon]
+	inc a
+	cp b
+	jr z, .asm_4dece
+	ld [CurPartyMon], a
+	ld b, a
+	ld a, [MonType]
+	and a
+	jr nz, .asm_4dede
+	ld a, b
+	inc a
+	ld [wd0d8], a
+	jr .asm_4dede
+.asm_4dea0
+	ld a, [CurPartyMon]
+	and a
+	jr z, .asm_4dece
+	dec a
+	ld [CurPartyMon], a
+	ld b, a
+	ld a, [MonType]
+	and a
+	jr nz, .asm_4dede
+	ld a, b
+	inc a
+	ld [wd0d8], a
+	jr .asm_4dede
+.asm_4deb8
+	ld a, c
+	cp $3
+	jr z, Function4dee4
+.asm_4debd
+	inc c
+	ld a, $3
+	cp c
+	jr nc, .asm_4decf
+	ld c, $1
+	jr .asm_4decf
+.asm_4dec7
+	dec c
+	jr nz, .asm_4decf
+	ld c, $3
+	jr .asm_4decf
+.asm_4dece
+	ret
+.asm_4decf
+	ld a, [wcf64]
+	and $fc
+	or c
+	ld [wcf64], a
+	ld h, $4
+	call Function4dd62
+	ret
+.asm_4dede
+	ld h, $0
+	call Function4dd62
+	ret
+
+Function4dee4: ; 4dee4 (13:5ee4)
+	ld h, $7
+	call Function4dd62
+	ret
+
+Function4deea: ; 4deea (13:5eea)
+	call Function4df45
+	xor a
+	ld [hBGMapMode], a
+	ld a, [CurBaseData] ; wd236 (aliases: BaseDexNo)
+	ld [wd265], a
+	ld [CurSpecies], a
+	hlcoord 8, 0
+	ld [hl], "№"
+	inc hl
+	ld [hl], "."
+	inc hl
+	hlcoord 10, 0
+	lb bc, PRINTNUM_LEADINGZEROS | 1, 3
+	ld de, wd265
+	call PrintNum
+	hlcoord 14, 0
+	call PrintLevel
+	ld hl, Unknown_4df77
+	call Function4e528
+	call Function4e505
+	hlcoord 8, 2
+	call PlaceString
+	hlcoord 18, 0
+	call Function4df66
+	hlcoord 9, 4
+	ld a, "/"
+	ld [hli], a
+	ld a, [CurBaseData] ; wd236 (aliases: BaseDexNo)
+	ld [wd265], a
+	call GetPokemonName
+	call PlaceString
+	call Function4df8f
+	call Function4df9b
+	call Function4dfa6
+	ret
+
+Function4df45: ; 4df45 (13:5f45)
+	ld hl, TempMonHP
+	ld a, [hli]
+	ld b, a
+	ld c, [hl]
+	ld hl, TempMonMaxHP
+	ld a, [hli]
+	ld d, a
+	ld e, [hl]
+	callba DrawPartyMenuHPBar
+	ld hl, wcda1
+	call SetHPPal
+	ld b, SCGB_03
+	call GetSGBLayout
+	call DelayFrame
+	ret
+
+Function4df66: ; 4df66 (13:5f66)
+	push hl
+	callba GetGender
+	pop hl
+	ret c
+	ld a, "♂"
+	jr nz, .got_gender
+	ld a, "♀"
+.got_gender
+	ld [hl], a
+	ret
+; 4df77 (13:5f77)
+
+Unknown_4df77: ; 4df77
+	dw PartyMonNicknames
+	dw OTPartyMonNicknames
+	dw sBoxMonNicknames
+	dw wd002
+; 4df7f
+
+Function4df7f: ; 4df7f
+	hlcoord 7, 0
+	ld bc, SCREEN_WIDTH
+	ld d, SCREEN_HEIGHT
+.loop
+	ld a, $31
+	ld [hl], a
+	add hl, bc
+	dec d
+	jr nz, .loop
+	ret
+; 4df8f
+
+Function4df8f: ; 4df8f (13:5f8f)
+	hlcoord 0, 7
+	ld b, SCREEN_WIDTH
+	ld a, "_"
+.loop
+	ld [hli], a
+	dec b
+	jr nz, .loop
+	ret
+
+Function4df9b: ; 4df9b (13:5f9b)
+	hlcoord 12, 6
+	ld [hl], "◀"
+	hlcoord 19, 6
+	ld [hl], "▶"
+	ret
+
+Function4dfa6: ; 4dfa6 (13:5fa6)
+	ld bc, TempMonDVs
+	callba CheckShininess
+	ret nc
+	hlcoord 19, 0
+	ld [hl], "<SHINY>"
+	ret
+
+Function4dfb6: ; 4dfb6 (13:5fb6)
+	ld a, [CurBaseData] ; wd236 (aliases: BaseDexNo)
+	ld [wd265], a
+	ld [CurSpecies], a
+	xor a
+	ld [hBGMapMode], a
+	call Function4dfda
+	call Function4e002
+	call Function4dfed
+	ld hl, wcf64
+	bit 4, [hl]
+	jr nz, .asm_4dfd6
+	call SetPalettes
+	ret
+
+.asm_4dfd6
+	call Function4e226
+	ret
+
+Function4dfda: ; 4dfda (13:5fda)
+	ld a, [wcf64]
+	and $3
+	ld c, a
+	call Function4e4cd
+	hlcoord 0, 8
+	lb bc, 10, 20
+	call ClearBox
+	ret
+
+Function4dfed: ; 4dfed (13:5fed)
+	ld a, [wcf64]
+	and $3
+	ld c, a
+	callba Function8c8a
+	call DelayFrame
+	ld hl, wcf64
+	set 5, [hl]
+	ret
+
+Function4e002: ; 4e002 (13:6002)
+	ld a, [wcf64]
+	and $3
+	dec a
+	ld hl, Jumptable_4e00d
+	rst JumpTable
+	ret
+
+Jumptable_4e00d: ; 4e00d (13:600d)
+	dw Function4e013
+	dw Function4e147
+	dw Function4e1ae
+
+
+Function4e013: ; 4e013 (13:6013)
+	hlcoord 0, 9
+	ld b, $0
+	predef DrawPlayerHP
+	hlcoord 8, 9
+	ld [hl], $41
+	ld de, String_4e119
+	hlcoord 0, 12
+	call PlaceString
+	ld a, [TempMonPokerusStatus]
+	ld b, a
+	and $f
+	jr nz, .asm_4e055
+	ld a, b
+	and $f0
+	jr z, .asm_4e03d
+	hlcoord 8, 8
+	ld [hl], $e8
+.asm_4e03d
+	ld a, [MonType]
+	cp $2
+	jr z, .asm_4e060
+	hlcoord 6, 13
+	push hl
+	ld de, TempMonStatus
+	predef PlaceStatusString
+	pop hl
+	jr nz, .asm_4e066
+	jr .asm_4e060
+.asm_4e055
+	ld de, String_4e142
+	hlcoord 1, 13
+	call PlaceString
+	jr .asm_4e066
+.asm_4e060
+	ld de, String_4e127
+	call PlaceString
+.asm_4e066
+	hlcoord 1, 15
+	predef PrintMonTypes
+	hlcoord 9, 8
+	ld de, $14
+	ld b, $a
+	ld a, $31
+.asm_4e078
+	ld [hl], a
+	add hl, de
+	dec b
+	jr nz, .asm_4e078
+	ld de, String_4e12b
+	hlcoord 10, 9
+	call PlaceString
+	hlcoord 17, 14
+	call Function4e0d3
+	hlcoord 13, 10
+	lb bc, 3, 7
+	ld de, TempMonExp
+	call PrintNum
+	call Function4e0e7
+	hlcoord 13, 13
+	lb bc, 3, 7
+	ld de, Buffer1 ; wd1ea (aliases: MagikarpLength)
+	call PrintNum
+	ld de, String_4e136
+	hlcoord 10, 12
+	call PlaceString
+	ld de, String_4e13f
+	hlcoord 14, 14
+	call PlaceString
+	hlcoord 11, 16
+	ld a, [TempMonLevel]
+	ld b, a
+	ld de, TempMonExp + 2
+	predef FillInExpBar
+	hlcoord 10, 16
+	ld [hl], $40
+	hlcoord 19, 16
+	ld [hl], $41
+	ret
+
+Function4e0d3: ; 4e0d3 (13:60d3)
+	ld a, [TempMonLevel]
+	push af
+	cp MAX_LEVEL
+	jr z, .asm_4e0df
+	inc a
+	ld [TempMonLevel], a
+.asm_4e0df
+	call PrintLevel
+	pop af
+	ld [TempMonLevel], a
+	ret
+
+Function4e0e7: ; 4e0e7 (13:60e7)
+	ld a, [TempMonLevel]
+	cp MAX_LEVEL
+	jr z, .asm_4e111
+	inc a
+	ld d, a
+	callba CalcExpAtLevel
+rept 2
+	ld hl, TempMonExp + 2
+endr
+	ld a, [$ffb6]
+	sub [hl]
+	dec hl
+	ld [wd1ec], a
+	ld a, [$ffb5]
+	sbc [hl]
+	dec hl
+	ld [Buffer2], a ; wd1eb (aliases: MovementType)
+	ld a, [hQuotient]
+	sbc [hl]
+	ld [Buffer1], a ; wd1ea (aliases: MagikarpLength)
+	ret
+.asm_4e111
+	ld hl, Buffer1 ; wd1ea (aliases: MagikarpLength)
+	xor a
+rept 2
+	ld [hli], a
+endr
+	ld [hl], a
+	ret
+; 4e119 (13:6119)
+
+String_4e119: ; 4e119
+	db   "STATUS/"
+	next "TYPE/@"
+; 4e127
+
+String_4e127: ; 4e127
+	db "OK @"
+; 4e12b
+
+String_4e12b: ; 4e12b
+	db "EXP POINTS@"
+; 4e136
+
+String_4e136: ; 4e136
+	db "LEVEL UP@"
+; 4e13f
+
+String_4e13f: ; 4e13f
+	db "TO@"
+; 4e142
+
+String_4e142: ; 4e142
+	db "#RUS@"
+; 4e147
+
+Function4e147: ; 4e147 (13:6147)
+	ld de, String_4e1a0
+	hlcoord 0, 8
+	call PlaceString
+	call Function4e189
+	hlcoord 8, 8
+	call PlaceString
+	ld de, String_4e1a9
+	hlcoord 0, 10
+	call PlaceString
+	ld hl, TempMonMoves
+	ld de, wListMoves_MoveIndicesBuffer
+	ld bc, NUM_MOVES
+	call CopyBytes
+	hlcoord 8, 10
+	ld a, SCREEN_WIDTH * 2
+	ld [Buffer1], a
+	predef ListMoves
+	hlcoord 12, 11
+	ld a, $28
+	ld [Buffer1], a
+	predef Function50c50
+	ret
+
+Function4e189: ; 4e189 (13:6189)
+	ld de, String_4e1a5
+	ld a, [TempMonItem]
+	and a
+	ret z
+	ld b, a
+	callba Function28771
+	ld a, b
+	ld [wd265], a
+	call GetItemName
+	ret
+; 4e1a0 (13:61a0)
+
+String_4e1a0: ; 4e1a0
+	db "ITEM@"
+; 4e1a5
+
+String_4e1a5: ; 4e1a5
+	db "---@"
+; 4e1a9
+
+String_4e1a9: ; 4e1a9
+	db "MOVE@"
+; 4e1ae
+
+Function4e1ae: ; 4e1ae (13:61ae)
+	call Function4e1cc
+	hlcoord 10, 8
+	ld de, $14
+	ld b, $a
+	ld a, $31
+.asm_4e1bb
+	ld [hl], a
+	add hl, de
+	dec b
+	jr nz, .asm_4e1bb
+	hlcoord 11, 8
+	ld bc, $6
+	predef PrintTempMonStats
+	ret
+
+Function4e1cc: ; 4e1cc (13:61cc)
+	ld de, IDNoString
+	hlcoord 0, 9
+	call PlaceString
+	ld de, OTString
+	hlcoord 0, 12
+	call PlaceString
+	hlcoord 2, 10
+	lb bc, PRINTNUM_LEADINGZEROS | 2, 5
+	ld de, TempMonID
+	call PrintNum
+	ld hl, Unknown_4e216
+	call Function4e528
+	call Function4e505
+	callba CheckNickErrors
+	hlcoord 2, 13
+	call PlaceString
+	ld a, [TempMonCaughtGender]
+	and a
+	jr z, .asm_4e215
+	cp $7f
+	jr z, .asm_4e215
+	and $80
+	ld a, "♂"
+	jr z, .asm_4e211
+	ld a, "♀"
+.asm_4e211
+	hlcoord 9, 13
+	ld [hl], a
+.asm_4e215
+	ret
+; 4e216 (13:6216)
+
+Unknown_4e216: ; 4e216
+	dw PartyMonOT
+	dw OTPartyMonOT
+	dw sBoxMonOT
+	dw wd00d
+; 4e21e
+
+IDNoString: ; 4e21e
+	db $73, "№.@"
+
+OTString: ; 4e222
+	db "OT/@"
+; 4e226
+
+
+Function4e226: ; 4e226 (13:6226)
+	ld hl, TempMonDVs
+	predef GetUnownLetter
+	call Function4e2ad
+	jr c, .asm_4e238
+	and a
+	jr z, .asm_4e23f
+	jr .asm_4e246
+.asm_4e238
+	call Function4e271
+	call SetPalettes
+	ret
+.asm_4e23f
+	call Function4e253
+	call SetPalettes
+	ret
+.asm_4e246
+	call SetPalettes
+	call Function4e253
+	ld a, [CurPartySpecies]
+	call PlayCry2
+	ret
+
+Function4e253: ; 4e253 (13:6253)
+	ld hl, wcf64
+	set 5, [hl]
+	ld a, [CurPartySpecies]
+	cp UNOWN
+	jr z, .asm_4e266
+	hlcoord 0, 0
+	call PrepMonFrontpic
+	ret
+.asm_4e266
+	xor a
+	ld [wc2c6], a
+	hlcoord 0, 0
+	call _PrepMonFrontpic
+	ret
+
+Function4e271: ; 4e271 (13:6271)
+	ld a, [CurPartySpecies]
+	cp UNOWN
+	jr z, .asm_4e281
+	ld a, $1
+	ld [wc2c6], a
+	call Function4e289
+	ret
+.asm_4e281
+	xor a
+	ld [wc2c6], a
+	call Function4e289
+	ret
+
+Function4e289: ; 4e289 (13:6289)
+	ld a, [CurPartySpecies]
+	call IsAPokemon
+	ret c
+	call Function4e307
+	ld de, VTiles2 tile $00
+	predef Function5108b
+	hlcoord 0, 0
+	ld d, $0
+	ld e, $2
+	predef LoadMonAnimation
+	ld hl, wcf64
+	set 6, [hl]
+	ret
+
+Function4e2ad: ; 4e2ad (13:62ad)
+	ld a, [MonType]
+	ld hl, .Jumptable
+	rst JumpTable
+	ret
+
+.Jumptable: ; 4e2b5 (13:62b5)
+	dw Function4e2bf
+	dw Function4e2cf
+	dw Function4e2d1
+	dw Function4e2ed
+	dw Function4e301
+
+
+Function4e2bf: ; 4e2bf (13:62bf)
+	ld a, [CurPartyMon]
+	ld hl, PartyMons ; wdcdf (aliases: PartyMon1, PartyMon1Species)
+	ld bc, PARTYMON_STRUCT_LENGTH
+	call AddNTimes
+	ld b, h
+	ld c, l
+	jr Function4e2f2
+
+Function4e2cf: ; 4e2cf (13:62cf)
+	xor a
+	ret
+
+Function4e2d1: ; 4e2d1 (13:62d1)
+	ld hl, sBoxMons
+	ld bc, PARTYMON_STRUCT_LENGTH
+	ld a, [CurPartyMon]
+	call AddNTimes
+	ld b, h
+	ld c, l
+	ld a, BANK(sBoxMons)
+	call GetSRAMBank
+	call Function4e2f2
+	push af
+	call CloseSRAM
+	pop af
+	ret
+
+Function4e2ed: ; 4e2ed (13:62ed)
+	ld bc, TempMonSpecies ; wd10e (aliases: TempMon)
+	jr Function4e2f2 ; utterly pointless
+
+Function4e2f2: ; 4e2f2 (13:62f2)
+	ld a, [CurPartySpecies]
+	cp EGG
+	jr z, .egg
+	call CheckFaintedFrzSlp
+	jr c, Function4e305
+.egg
+	xor a
+	scf
+	ret
+
+Function4e301: ; 4e301 (13:6301)
+	ld a, $1
+	and a
+	ret
+Function4e305: ; 4e305 (13:6305)
+	xor a
+	ret
+
+Function4e307: ; 4e307 (13:6307)
+	nop
+	push hl
+	push de
+	push bc
+	push af
+	call DelayFrame
+	ld a, [rVBK]
+	push af
+	ld a, $1
+	ld [rVBK], a
+	ld de, TextBoxSpaceGFX
+	lb bc, BANK(TextBoxSpaceGFX), 1
+	ld hl, VTiles2 tile $7f
+	call Get2bpp
+	pop af
+	ld [rVBK], a
+	pop af
+	pop bc
+	pop de
+	pop hl
+	ret
+; 4e32a (13:632a)
+
+Unknown_4e32a: ; 4e32a
+; A blank tile?
+	ds 16
+; 4e33a
+
+EggStatsScreen: ; 4e33a
+	xor a
+	ld [hBGMapMode], a
+	ld hl, wcda1
+	call SetHPPal
+	ld b, SCGB_03
+	call GetSGBLayout
+	call Function4df8f
+	ld de, EggString
+	hlcoord 8, 1
+	call PlaceString
+	ld de, IDNoString
+	hlcoord 8, 3
+	call PlaceString
+	ld de, OTString
+	hlcoord 8, 5
+	call PlaceString
+	ld de, FiveQMarkString
+	hlcoord 11, 3
+	call PlaceString
+	ld de, FiveQMarkString
+	hlcoord 11, 5
+	call PlaceString
+	ld a, [TempMonHappiness] ; egg status
+	ld de, EggSoonString
+	cp $6
+	jr c, .picked
+	ld de, EggCloseString
+	cp $b
+	jr c, .picked
+	ld de, EggMoreTimeString
+	cp $29
+	jr c, .picked
+	ld de, EggALotMoreTimeString
+.picked
+	hlcoord 1, 9
+	call PlaceString
+	ld hl, wcf64
+	set 5, [hl]
+	call SetPalettes ; pals
+	call DelayFrame
+	hlcoord 0, 0
+	call PrepMonFrontpic
+	callba Function10402d
+	call Function4e497
+
+	ld a, [TempMonHappiness]
+	cp 6
+	ret nc
+	ld de, SFX_2_BOOPS
+	call PlaySFX
+	ret
+; 0x4e3c0
+
+EggString: ; 4e3c0
+	db "EGG@"
+
+FiveQMarkString: ; 4e3c4
+	db "?????@"
+
+EggSoonString: ; 0x4e3ca
+	db   "It's making sounds"
+	next "inside. It's going"
+	next "to hatch soon!@"
+
+EggCloseString: ; 0x4e3fd
+	db   "It moves around"
+	next "inside sometimes."
+	next "It must be close"
+	next "to hatching.@"
+
+EggMoreTimeString: ; 0x4e43d
+	db   "Wonder what's"
+	next "inside? It needs"
+	next "more time, though.@"
+
+EggALotMoreTimeString: ; 0x4e46e
+	db   "This EGG needs a"
+	next "lot more time to"
+	next "hatch.@"
+; 0x4e497
+
+
+Function4e497: ; 4e497 (13:6497)
+	call Function4e2ad
+	ret nc
+	ld a, [TempMonHappiness]
+	ld e, $7
+	cp $6
+	jr c, .asm_4e4ab
+	ld e, $8
+	cp $b
+	jr c, .asm_4e4ab
+	ret
+.asm_4e4ab
+	push de
+	ld a, $1
+	ld [wc2c6], a
+	call Function4e307
+	ld de, VTiles2 tile $00
+	predef Function5108b
+	pop de
+	hlcoord 0, 0
+	ld d, $0
+	predef LoadMonAnimation
+	ld hl, wcf64
+	set 6, [hl]
+	ret
+
+Function4e4cd: ; 4e4cd (13:64cd)
+	hlcoord 13, 5
+	ld a, $36
+	call .load_square
+	hlcoord 15, 5
+	ld a, $36
+	call .load_square
+	hlcoord 17, 5
+	ld a, $36
+	call .load_square
+	ld a, c
+	cp $2
+	ld a, $3a
+	hlcoord 13, 5
+	jr c, .load_square
+	hlcoord 15, 5
+	jr z, .load_square
+	hlcoord 17, 5
+.load_square: ; 4e4f7 (13:64f7)
+	push bc
+	ld [hli], a
+	inc a
+	ld [hld], a
+	ld bc, SCREEN_WIDTH
+	add hl, bc
+	inc a
+	ld [hli], a
+	inc a
+	ld [hl], a
+	pop bc
+	ret
+
+Function4e505: ; 4e505 (13:6505)
+	ld de, StringBuffer1
+	ld bc, PKMN_NAME_LENGTH
+	jr .okay ; uuterly pointless
+.okay
+	ld a, [MonType]
+	cp BOXMON
+	jr nz, .partymon
+	ld a, BANK(sBoxMonNicknames)
+	call GetSRAMBank
+	push de
+	call CopyBytes
+	pop de
+	call CloseSRAM
+	ret
+
+.partymon
+	push de
+	call CopyBytes
+	pop de
+	ret
+
+Function4e528: ; 4e528 (13:6528)
+	ld a, [MonType]
+	add a
+	ld c, a
+	ld b, 0
+	add hl, bc
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	ld a, [MonType]
+	cp $3
+	ret z
+	ld a, [CurPartyMon]
+	jp SkipNames
+
+
+CheckFaintedFrzSlp: ; 4e53f
+	ld hl, MON_HP
+	add hl, bc
+	ld a, [hli]
+	or [hl]
+	jr z, .fainted_frz_slp
+	ld hl, MON_STATUS
+	add hl, bc
+	ld a, [hl]
+	and (1 << FRZ) | SLP
+	jr nz, .fainted_frz_slp
+	and a
+	ret
+
+.fainted_frz_slp
+	scf
+	ret
+; 4e554
--- a/main.asm
+++ b/main.asm
@@ -20233,11 +20233,11 @@
 	xor a
 	ld [CurPartyMon], a
 	ld hl, wContestMon
-	ld de, wd018
+	ld de, wd018_Mon
 	ld bc, BOXMON_STRUCT_LENGTH
 	call CopyBytes
 	ld hl, PlayerName
-	ld de, wd00d
+	ld de, wd00d_MonOT
 	ld bc, NAME_LENGTH
 	call CopyBytes
 	callab Function51322
@@ -20249,9 +20249,9 @@
 	jr c, .Box_SkipNickname
 	ld a, BOXMON
 	ld [MonType], a
-	ld de, wd050
+	ld de, wd050_MonNick
 	callab InitNickname
-	ld hl, wd050
+	ld hl, wd050_MonNick
 
 .Box_SkipNickname
 	ld a, BANK(sBoxMonNicknames)
@@ -20538,1158 +20538,8 @@
 ; 4dc7b
 
 
-Function4dc7b: ; 4dc7b (13:5c7b)
-	ld a, [wLinkMode]
-	cp LINK_MOBILE
-	jr nz, StatsScreenInit
+INCLUDE "engine/stats_screen.asm"
 
-	ld a, [wBattleMode] ; wd22d (aliases: EnemyMonEnd)
-	and a
-	jr z, StatsScreenInit
-	jr Function4dc8f
-
-StatsScreenInit: ; 4dc8a
-	ld hl, StatsScreenMain
-	jr StatsScreenInit_gotaddress
-
-Function4dc8f: ; 4dc8f
-	ld hl, StatsScreenBattle
-	jr StatsScreenInit_gotaddress
-
-StatsScreenInit_gotaddress: ; 4dc94
-	ld a, [hMapAnims]
-	push af
-	xor a
-	ld [hMapAnims], a ; disable overworld tile animations
-	ld a, [wc2c6] ; whether sprite is to be mirrorred
-	push af
-	ld a, [wJumptableIndex]
-	ld b, a
-	ld a, [wcf64]
-	ld c, a
-
-	push bc
-	push hl
-	call ClearBGPalettes
-	call ClearTileMap
-	call UpdateSprites
-	callba Functionfb53e
-	pop hl
-	call _hl_
-	call ClearBGPalettes
-	call ClearTileMap
-	pop bc
-
-	; restore old values
-	ld a, b
-	ld [wJumptableIndex], a
-	ld a, c
-	ld [wcf64], a
-	pop af
-	ld [wc2c6], a
-	pop af
-	ld [hMapAnims], a
-	ret
-; 0x4dcd2
-
-StatsScreenMain: ; 0x4dcd2
-	xor a
-	ld [wJumptableIndex], a
-	; stupid interns
-	ld [wcf64], a
-	ld a, [wcf64]
-	and $fc
-	or $1
-	ld [wcf64], a
-.loop ; 4dce3
-	ld a, [wJumptableIndex]
-	and $7f
-	ld hl, StatsScreenPointerTable
-	rst JumpTable
-	call Function4dd3a ; check for keys?
-	ld a, [wJumptableIndex]
-	bit 7, a
-	jr z, .loop
-	ret
-; 0x4dcf7
-
-StatsScreenBattle: ; 4dcf7
-	xor a
-	ld [wJumptableIndex], a
-	; stupid interns
-	ld [wcf64], a
-	ld a, [wcf64]
-	and $fc
-	or $1
-	ld [wcf64], a
-.loop
-	callba Function100dd2
-	ld a, [wJumptableIndex]
-	and $7f
-	ld hl, StatsScreenPointerTable
-	rst JumpTable
-	call Function4dd3a
-	callba Function100dfd
-	jr c, .exit
-	ld a, [wJumptableIndex]
-	bit 7, a
-	jr z, .loop
-
-.exit
-	ret
-; 4dd2a
-
-StatsScreenPointerTable: ; 4dd2a
-	dw MonStatsInit ; regular pokémon
-	dw EggStatsInit ; egg
-	dw StatsScreenWaitCry
-	dw Function4ddac
-	dw Function4ddc6
-	dw StatsScreenWaitCry
-	dw Function4ddd6
-	dw Function4dd6c
-; 4dd3a
-
-
-Function4dd3a: ; 4dd3a (13:5d3a)
-	ld hl, wcf64
-	bit 6, [hl]
-	jr nz, .asm_4dd49
-	bit 5, [hl]
-	jr nz, .asm_4dd56
-	call DelayFrame
-	ret
-.asm_4dd49
-	callba Functiond00b4
-	jr nc, .asm_4dd56
-	ld hl, wcf64
-	res 6, [hl]
-.asm_4dd56
-	ld hl, wcf64
-	res 5, [hl]
-	callba Function10402d
-	ret
-
-Function4dd62: ; 4dd62 (13:5d62)
-	ld a, [wJumptableIndex]
-	and $80
-	or h
-	ld [wJumptableIndex], a
-	ret
-
-Function4dd6c: ; 4dd6c (13:5d6c)
-	ld hl, wJumptableIndex
-	set 7, [hl]
-	ret
-
-MonStatsInit: ; 4dd72 (13:5d72)
-	ld hl, wcf64
-	res 6, [hl]
-	call ClearBGPalettes
-	call ClearTileMap
-	callba Function10402d
-	call Function4ddf2
-	ld a, [CurPartySpecies]
-	cp EGG
-	jr z, .asm_4dd9b
-	call Function4deea
-	ld hl, wcf64
-	set 4, [hl]
-	ld h, $4
-	call Function4dd62
-	ret
-.asm_4dd9b
-	ld h, $1
-	call Function4dd62
-	ret
-
-EggStatsInit: ; 4dda1
-	call EggStatsScreen
-	ld a, [wJumptableIndex]
-	inc a
-	ld [wJumptableIndex], a
-	ret
-; 0x4ddac
-
-
-Function4ddac: ; 4ddac (13:5dac)
-	call Function4de2c
-	jr nc, .asm_4ddb7
-	ld h, $0
-	call Function4dd62
-	ret
-.asm_4ddb7
-	bit 0, a
-	jr nz, .asm_4ddc0
-	and $c3
-	jp Function4de54
-.asm_4ddc0
-	ld h, $7
-	call Function4dd62
-	ret
-
-Function4ddc6: ; 4ddc6 (13:5dc6)
-	call Function4dfb6
-	ld hl, wcf64
-	res 4, [hl]
-	ld a, [wJumptableIndex]
-	inc a
-	ld [wJumptableIndex], a
-	ret
-
-Function4ddd6: ; 4ddd6 (13:5dd6)
-	call Function4de2c
-	jr nc, .asm_4dde1
-	ld h, $0
-	call Function4dd62
-	ret
-
-.asm_4dde1
-	and $f3
-	jp Function4de54
-
-StatsScreenWaitCry: ; 4dde6 (13:5de6)
-	call IsSFXPlaying
-	ret nc
-	ld a, [wJumptableIndex]
-	inc a
-	ld [wJumptableIndex], a
-	ret
-
-Function4ddf2: ; 4ddf2 (13:5df2)
-	ld a, [MonType]
-	cp BREEDMON
-	jr nz, .asm_4de10
-	ld a, [wd018]
-	ld [CurSpecies], a
-	call GetBaseData
-	ld hl, wd018
-	ld de, TempMon
-	ld bc, PARTYMON_STRUCT_LENGTH
-	call CopyBytes
-	jr .asm_4de2a
-.asm_4de10
-	callba CopyPkmnToTempMon
-	ld a, [CurPartySpecies]
-	cp EGG
-	jr z, .asm_4de2a
-	ld a, [MonType]
-	cp BOXMON
-	jr c, .asm_4de2a
-	callba Function50890
-.asm_4de2a
-	and a
-	ret
-
-Function4de2c: ; 4de2c (13:5e2c)
-	call GetJoypad
-	ld a, [MonType]
-	cp BREEDMON
-	jr nz, .notbreedmon
-	push hl
-	push de
-	push bc
-	callba Functione2f95
-	pop bc
-	pop de
-	pop hl
-	ld a, [wcf73]
-	and $c0
-	jr nz, .set_carry
-	ld a, [wcf73]
-	jr .clear_flags
-
-.notbreedmon
-	ld a, [hJoyPressed]
-.clear_flags
-	and a
-	ret
-
-.set_carry
-	scf
-	ret
-
-Function4de54: ; 4de54 (13:5e54)
-	push af
-	ld a, [wcf64]
-	and $3
-	ld c, a
-	pop af
-	bit 1, a
-	jp nz, Function4dee4
-	bit 5, a
-	jr nz, .asm_4dec7
-	bit 4, a
-	jr nz, .asm_4debd
-	bit 0, a
-	jr nz, .asm_4deb8
-	bit 6, a
-	jr nz, .asm_4dea0
-	bit 7, a
-	jr nz, .asm_4de77
-	jr .asm_4dece
-.asm_4de77
-	ld a, [MonType]
-	cp BOXMON
-	jr nc, .asm_4dece
-	and a
-	ld a, [PartyCount]
-	jr z, .asm_4de87
-	ld a, [OTPartyCount]
-.asm_4de87
-	ld b, a
-	ld a, [CurPartyMon]
-	inc a
-	cp b
-	jr z, .asm_4dece
-	ld [CurPartyMon], a
-	ld b, a
-	ld a, [MonType]
-	and a
-	jr nz, .asm_4dede
-	ld a, b
-	inc a
-	ld [wd0d8], a
-	jr .asm_4dede
-.asm_4dea0
-	ld a, [CurPartyMon]
-	and a
-	jr z, .asm_4dece
-	dec a
-	ld [CurPartyMon], a
-	ld b, a
-	ld a, [MonType]
-	and a
-	jr nz, .asm_4dede
-	ld a, b
-	inc a
-	ld [wd0d8], a
-	jr .asm_4dede
-.asm_4deb8
-	ld a, c
-	cp $3
-	jr z, Function4dee4
-.asm_4debd
-	inc c
-	ld a, $3
-	cp c
-	jr nc, .asm_4decf
-	ld c, $1
-	jr .asm_4decf
-.asm_4dec7
-	dec c
-	jr nz, .asm_4decf
-	ld c, $3
-	jr .asm_4decf
-.asm_4dece
-	ret
-.asm_4decf
-	ld a, [wcf64]
-	and $fc
-	or c
-	ld [wcf64], a
-	ld h, $4
-	call Function4dd62
-	ret
-.asm_4dede
-	ld h, $0
-	call Function4dd62
-	ret
-
-Function4dee4: ; 4dee4 (13:5ee4)
-	ld h, $7
-	call Function4dd62
-	ret
-
-Function4deea: ; 4deea (13:5eea)
-	call Function4df45
-	xor a
-	ld [hBGMapMode], a
-	ld a, [CurBaseData] ; wd236 (aliases: BaseDexNo)
-	ld [wd265], a
-	ld [CurSpecies], a
-	hlcoord 8, 0
-	ld [hl], "№"
-	inc hl
-	ld [hl], "."
-	inc hl
-	hlcoord 10, 0
-	lb bc, PRINTNUM_LEADINGZEROS | 1, 3
-	ld de, wd265
-	call PrintNum
-	hlcoord 14, 0
-	call PrintLevel
-	ld hl, Unknown_4df77
-	call Function4e528
-	call Function4e505
-	hlcoord 8, 2
-	call PlaceString
-	hlcoord 18, 0
-	call Function4df66
-	hlcoord 9, 4
-	ld a, "/"
-	ld [hli], a
-	ld a, [CurBaseData] ; wd236 (aliases: BaseDexNo)
-	ld [wd265], a
-	call GetPokemonName
-	call PlaceString
-	call Function4df8f
-	call Function4df9b
-	call Function4dfa6
-	ret
-
-Function4df45: ; 4df45 (13:5f45)
-	ld hl, TempMonHP
-	ld a, [hli]
-	ld b, a
-	ld c, [hl]
-	ld hl, TempMonMaxHP
-	ld a, [hli]
-	ld d, a
-	ld e, [hl]
-	callba DrawPartyMenuHPBar
-	ld hl, wcda1
-	call SetHPPal
-	ld b, SCGB_03
-	call GetSGBLayout
-	call DelayFrame
-	ret
-
-Function4df66: ; 4df66 (13:5f66)
-	push hl
-	callba GetGender
-	pop hl
-	ret c
-	ld a, "♂"
-	jr nz, .got_gender
-	ld a, "♀"
-.got_gender
-	ld [hl], a
-	ret
-; 4df77 (13:5f77)
-
-Unknown_4df77: ; 4df77
-	dw PartyMonNicknames
-	dw OTPartyMonNicknames
-	dw sBoxMonNicknames
-	dw wd002
-; 4df7f
-
-Function4df7f: ; 4df7f
-	hlcoord 7, 0
-	ld bc, SCREEN_WIDTH
-	ld d, SCREEN_HEIGHT
-.loop
-	ld a, $31
-	ld [hl], a
-	add hl, bc
-	dec d
-	jr nz, .loop
-	ret
-; 4df8f
-
-Function4df8f: ; 4df8f (13:5f8f)
-	hlcoord 0, 7
-	ld b, SCREEN_WIDTH
-	ld a, "_"
-.loop
-	ld [hli], a
-	dec b
-	jr nz, .loop
-	ret
-
-Function4df9b: ; 4df9b (13:5f9b)
-	hlcoord 12, 6
-	ld [hl], "◀"
-	hlcoord 19, 6
-	ld [hl], "▶"
-	ret
-
-Function4dfa6: ; 4dfa6 (13:5fa6)
-	ld bc, TempMonDVs
-	callba CheckShininess
-	ret nc
-	hlcoord 19, 0
-	ld [hl], "<SHINY>"
-	ret
-
-Function4dfb6: ; 4dfb6 (13:5fb6)
-	ld a, [CurBaseData] ; wd236 (aliases: BaseDexNo)
-	ld [wd265], a
-	ld [CurSpecies], a
-	xor a
-	ld [hBGMapMode], a
-	call Function4dfda
-	call Function4e002
-	call Function4dfed
-	ld hl, wcf64
-	bit 4, [hl]
-	jr nz, .asm_4dfd6
-	call SetPalettes
-	ret
-
-.asm_4dfd6
-	call Function4e226
-	ret
-
-Function4dfda: ; 4dfda (13:5fda)
-	ld a, [wcf64]
-	and $3
-	ld c, a
-	call Function4e4cd
-	hlcoord 0, 8
-	lb bc, 10, 20
-	call ClearBox
-	ret
-
-Function4dfed: ; 4dfed (13:5fed)
-	ld a, [wcf64]
-	and $3
-	ld c, a
-	callba Function8c8a
-	call DelayFrame
-	ld hl, wcf64
-	set 5, [hl]
-	ret
-
-Function4e002: ; 4e002 (13:6002)
-	ld a, [wcf64]
-	and $3
-	dec a
-	ld hl, Jumptable_4e00d
-	rst JumpTable
-	ret
-
-Jumptable_4e00d: ; 4e00d (13:600d)
-	dw Function4e013
-	dw Function4e147
-	dw Function4e1ae
-
-
-Function4e013: ; 4e013 (13:6013)
-	hlcoord 0, 9
-	ld b, $0
-	predef DrawPlayerHP
-	hlcoord 8, 9
-	ld [hl], $41
-	ld de, String_4e119
-	hlcoord 0, 12
-	call PlaceString
-	ld a, [TempMonPokerusStatus]
-	ld b, a
-	and $f
-	jr nz, .asm_4e055
-	ld a, b
-	and $f0
-	jr z, .asm_4e03d
-	hlcoord 8, 8
-	ld [hl], $e8
-.asm_4e03d
-	ld a, [MonType]
-	cp $2
-	jr z, .asm_4e060
-	hlcoord 6, 13
-	push hl
-	ld de, TempMonStatus
-	predef PlaceStatusString
-	pop hl
-	jr nz, .asm_4e066
-	jr .asm_4e060
-.asm_4e055
-	ld de, String_4e142
-	hlcoord 1, 13
-	call PlaceString
-	jr .asm_4e066
-.asm_4e060
-	ld de, String_4e127
-	call PlaceString
-.asm_4e066
-	hlcoord 1, 15
-	predef PrintMonTypes
-	hlcoord 9, 8
-	ld de, $14
-	ld b, $a
-	ld a, $31
-.asm_4e078
-	ld [hl], a
-	add hl, de
-	dec b
-	jr nz, .asm_4e078
-	ld de, String_4e12b
-	hlcoord 10, 9
-	call PlaceString
-	hlcoord 17, 14
-	call Function4e0d3
-	hlcoord 13, 10
-	lb bc, 3, 7
-	ld de, TempMonExp
-	call PrintNum
-	call Function4e0e7
-	hlcoord 13, 13
-	lb bc, 3, 7
-	ld de, Buffer1 ; wd1ea (aliases: MagikarpLength)
-	call PrintNum
-	ld de, String_4e136
-	hlcoord 10, 12
-	call PlaceString
-	ld de, String_4e13f
-	hlcoord 14, 14
-	call PlaceString
-	hlcoord 11, 16
-	ld a, [TempMonLevel]
-	ld b, a
-	ld de, TempMonExp + 2
-	predef FillInExpBar
-	hlcoord 10, 16
-	ld [hl], $40
-	hlcoord 19, 16
-	ld [hl], $41
-	ret
-
-Function4e0d3: ; 4e0d3 (13:60d3)
-	ld a, [TempMonLevel]
-	push af
-	cp MAX_LEVEL
-	jr z, .asm_4e0df
-	inc a
-	ld [TempMonLevel], a
-.asm_4e0df
-	call PrintLevel
-	pop af
-	ld [TempMonLevel], a
-	ret
-
-Function4e0e7: ; 4e0e7 (13:60e7)
-	ld a, [TempMonLevel]
-	cp MAX_LEVEL
-	jr z, .asm_4e111
-	inc a
-	ld d, a
-	callba CalcExpAtLevel
-rept 2
-	ld hl, TempMonExp + 2
-endr
-	ld a, [$ffb6]
-	sub [hl]
-	dec hl
-	ld [wd1ec], a
-	ld a, [$ffb5]
-	sbc [hl]
-	dec hl
-	ld [Buffer2], a ; wd1eb (aliases: MovementType)
-	ld a, [hQuotient]
-	sbc [hl]
-	ld [Buffer1], a ; wd1ea (aliases: MagikarpLength)
-	ret
-.asm_4e111
-	ld hl, Buffer1 ; wd1ea (aliases: MagikarpLength)
-	xor a
-rept 2
-	ld [hli], a
-endr
-	ld [hl], a
-	ret
-; 4e119 (13:6119)
-
-String_4e119: ; 4e119
-	db   "STATUS/"
-	next "TYPE/@"
-; 4e127
-
-String_4e127: ; 4e127
-	db "OK @"
-; 4e12b
-
-String_4e12b: ; 4e12b
-	db "EXP POINTS@"
-; 4e136
-
-String_4e136: ; 4e136
-	db "LEVEL UP@"
-; 4e13f
-
-String_4e13f: ; 4e13f
-	db "TO@"
-; 4e142
-
-String_4e142: ; 4e142
-	db "#RUS@"
-; 4e147
-
-Function4e147: ; 4e147 (13:6147)
-	ld de, String_4e1a0
-	hlcoord 0, 8
-	call PlaceString
-	call Function4e189
-	hlcoord 8, 8
-	call PlaceString
-	ld de, String_4e1a9
-	hlcoord 0, 10
-	call PlaceString
-	ld hl, TempMonMoves
-	ld de, wListMoves_MoveIndicesBuffer
-	ld bc, NUM_MOVES
-	call CopyBytes
-	hlcoord 8, 10
-	ld a, SCREEN_WIDTH * 2
-	ld [Buffer1], a
-	predef ListMoves
-	hlcoord 12, 11
-	ld a, $28
-	ld [Buffer1], a
-	predef Function50c50
-	ret
-
-Function4e189: ; 4e189 (13:6189)
-	ld de, String_4e1a5
-	ld a, [TempMonItem]
-	and a
-	ret z
-	ld b, a
-	callba Function28771
-	ld a, b
-	ld [wd265], a
-	call GetItemName
-	ret
-; 4e1a0 (13:61a0)
-
-String_4e1a0: ; 4e1a0
-	db "ITEM@"
-; 4e1a5
-
-String_4e1a5: ; 4e1a5
-	db "---@"
-; 4e1a9
-
-String_4e1a9: ; 4e1a9
-	db "MOVE@"
-; 4e1ae
-
-Function4e1ae: ; 4e1ae (13:61ae)
-	call Function4e1cc
-	hlcoord 10, 8
-	ld de, $14
-	ld b, $a
-	ld a, $31
-.asm_4e1bb
-	ld [hl], a
-	add hl, de
-	dec b
-	jr nz, .asm_4e1bb
-	hlcoord 11, 8
-	ld bc, $6
-	predef PrintTempMonStats
-	ret
-
-Function4e1cc: ; 4e1cc (13:61cc)
-	ld de, IDNoString
-	hlcoord 0, 9
-	call PlaceString
-	ld de, OTString
-	hlcoord 0, 12
-	call PlaceString
-	hlcoord 2, 10
-	lb bc, PRINTNUM_LEADINGZEROS | 2, 5
-	ld de, TempMonID
-	call PrintNum
-	ld hl, Unknown_4e216
-	call Function4e528
-	call Function4e505
-	callba CheckNickErrors
-	hlcoord 2, 13
-	call PlaceString
-	ld a, [TempMonCaughtGender]
-	and a
-	jr z, .asm_4e215
-	cp $7f
-	jr z, .asm_4e215
-	and $80
-	ld a, "♂"
-	jr z, .asm_4e211
-	ld a, "♀"
-.asm_4e211
-	hlcoord 9, 13
-	ld [hl], a
-.asm_4e215
-	ret
-; 4e216 (13:6216)
-
-Unknown_4e216: ; 4e216
-	dw PartyMonOT
-	dw OTPartyMonOT
-	dw sBoxMonOT
-	dw wd00d
-; 4e21e
-
-IDNoString: ; 4e21e
-	db $73, "№.@"
-
-OTString: ; 4e222
-	db "OT/@"
-; 4e226
-
-
-Function4e226: ; 4e226 (13:6226)
-	ld hl, TempMonDVs
-	predef GetUnownLetter
-	call Function4e2ad
-	jr c, .asm_4e238
-	and a
-	jr z, .asm_4e23f
-	jr .asm_4e246
-.asm_4e238
-	call Function4e271
-	call SetPalettes
-	ret
-.asm_4e23f
-	call Function4e253
-	call SetPalettes
-	ret
-.asm_4e246
-	call SetPalettes
-	call Function4e253
-	ld a, [CurPartySpecies]
-	call PlayCry2
-	ret
-
-Function4e253: ; 4e253 (13:6253)
-	ld hl, wcf64
-	set 5, [hl]
-	ld a, [CurPartySpecies]
-	cp UNOWN
-	jr z, .asm_4e266
-	hlcoord 0, 0
-	call PrepMonFrontpic
-	ret
-.asm_4e266
-	xor a
-	ld [wc2c6], a
-	hlcoord 0, 0
-	call _PrepMonFrontpic
-	ret
-
-Function4e271: ; 4e271 (13:6271)
-	ld a, [CurPartySpecies]
-	cp UNOWN
-	jr z, .asm_4e281
-	ld a, $1
-	ld [wc2c6], a
-	call Function4e289
-	ret
-.asm_4e281
-	xor a
-	ld [wc2c6], a
-	call Function4e289
-	ret
-
-Function4e289: ; 4e289 (13:6289)
-	ld a, [CurPartySpecies]
-	call IsAPokemon
-	ret c
-	call Function4e307
-	ld de, VTiles2 tile $00
-	predef Function5108b
-	hlcoord 0, 0
-	ld d, $0
-	ld e, $2
-	predef LoadMonAnimation
-	ld hl, wcf64
-	set 6, [hl]
-	ret
-
-Function4e2ad: ; 4e2ad (13:62ad)
-	ld a, [MonType]
-	ld hl, Jumptable_4e2b5
-	rst JumpTable
-	ret
-
-Jumptable_4e2b5: ; 4e2b5 (13:62b5)
-	dw Function4e2bf
-	dw Function4e2cf
-	dw Function4e2d1
-	dw Function4e2ed
-	dw Function4e301
-
-
-Function4e2bf: ; 4e2bf (13:62bf)
-	ld a, [CurPartyMon]
-	ld hl, PartyMons ; wdcdf (aliases: PartyMon1, PartyMon1Species)
-	ld bc, PARTYMON_STRUCT_LENGTH
-	call AddNTimes
-	ld b, h
-	ld c, l
-	jr Function4e2f2
-
-Function4e2cf: ; 4e2cf (13:62cf)
-	xor a
-	ret
-
-Function4e2d1: ; 4e2d1 (13:62d1)
-	ld hl, sBoxMons
-	ld bc, $30
-	ld a, [CurPartyMon]
-	call AddNTimes
-	ld b, h
-	ld c, l
-	ld a, $1
-	call GetSRAMBank
-	call Function4e2f2
-	push af
-	call CloseSRAM
-	pop af
-	ret
-
-Function4e2ed: ; 4e2ed (13:62ed)
-	ld bc, TempMonSpecies ; wd10e (aliases: TempMon)
-	jr Function4e2f2
-
-Function4e2f2: ; 4e2f2 (13:62f2)
-	ld a, [CurPartySpecies]
-	cp EGG
-	jr z, .asm_4e2fe
-	call CheckFaintedFrzSlp
-	jr c, Function4e305
-.asm_4e2fe
-	xor a
-	scf
-	ret
-
-Function4e301: ; 4e301 (13:6301)
-	ld a, $1
-	and a
-	ret
-Function4e305: ; 4e305 (13:6305)
-	xor a
-	ret
-
-Function4e307: ; 4e307 (13:6307)
-	nop
-	push hl
-	push de
-	push bc
-	push af
-	call DelayFrame
-	ld a, [rVBK]
-	push af
-	ld a, $1
-	ld [rVBK], a
-	ld de, TextBoxSpaceGFX
-	lb bc, BANK(TextBoxSpaceGFX), 1
-	ld hl, VTiles2 tile $7f
-	call Get2bpp
-	pop af
-	ld [rVBK], a
-	pop af
-	pop bc
-	pop de
-	pop hl
-	ret
-; 4e32a (13:632a)
-
-Unknown_4e32a: ; 4e32a
-; A blank tile?
-	ds 16
-; 4e33a
-
-EggStatsScreen: ; 4e33a
-	xor a
-	ld [hBGMapMode], a
-	ld hl, wcda1
-	call SetHPPal
-	ld b, SCGB_03
-	call GetSGBLayout
-	call Function4df8f
-	ld de, EggString
-	hlcoord 8, 1
-	call PlaceString
-	ld de, IDNoString
-	hlcoord 8, 3
-	call PlaceString
-	ld de, OTString
-	hlcoord 8, 5
-	call PlaceString
-	ld de, FiveQMarkString
-	hlcoord 11, 3
-	call PlaceString
-	ld de, FiveQMarkString
-	hlcoord 11, 5
-	call PlaceString
-	ld a, [TempMonHappiness] ; egg status
-	ld de, EggSoonString
-	cp $6
-	jr c, .picked
-	ld de, EggCloseString
-	cp $b
-	jr c, .picked
-	ld de, EggMoreTimeString
-	cp $29
-	jr c, .picked
-	ld de, EggALotMoreTimeString
-.picked
-	hlcoord 1, 9
-	call PlaceString
-	ld hl, wcf64
-	set 5, [hl]
-	call SetPalettes ; pals
-	call DelayFrame
-	hlcoord 0, 0
-	call PrepMonFrontpic
-	callba Function10402d
-	call Function4e497
-
-	ld a, [TempMonHappiness]
-	cp 6
-	ret nc
-	ld de, SFX_2_BOOPS
-	call PlaySFX
-	ret
-; 0x4e3c0
-
-EggString: ; 4e3c0
-	db "EGG@"
-
-FiveQMarkString: ; 4e3c4
-	db "?????@"
-
-EggSoonString: ; 0x4e3ca
-	db   "It's making sounds"
-	next "inside. It's going"
-	next "to hatch soon!@"
-
-EggCloseString: ; 0x4e3fd
-	db   "It moves around"
-	next "inside sometimes."
-	next "It must be close"
-	next "to hatching.@"
-
-EggMoreTimeString: ; 0x4e43d
-	db   "Wonder what's"
-	next "inside? It needs"
-	next "more time, though.@"
-
-EggALotMoreTimeString: ; 0x4e46e
-	db   "This EGG needs a"
-	next "lot more time to"
-	next "hatch.@"
-; 0x4e497
-
-
-Function4e497: ; 4e497 (13:6497)
-	call Function4e2ad
-	ret nc
-	ld a, [TempMonHappiness]
-	ld e, $7
-	cp $6
-	jr c, .asm_4e4ab
-	ld e, $8
-	cp $b
-	jr c, .asm_4e4ab
-	ret
-.asm_4e4ab
-	push de
-	ld a, $1
-	ld [wc2c6], a
-	call Function4e307
-	ld de, VTiles2 tile $00
-	predef Function5108b
-	pop de
-	hlcoord 0, 0
-	ld d, $0
-	predef LoadMonAnimation
-	ld hl, wcf64
-	set 6, [hl]
-	ret
-
-Function4e4cd: ; 4e4cd (13:64cd)
-	hlcoord 13, 5
-	ld a, $36
-	call Function4e4f7
-	hlcoord 15, 5
-	ld a, $36
-	call Function4e4f7
-	hlcoord 17, 5
-	ld a, $36
-	call Function4e4f7
-	ld a, c
-	cp $2
-	ld a, $3a
-	hlcoord 13, 5
-	jr c, Function4e4f7
-	hlcoord 15, 5
-	jr z, Function4e4f7
-	hlcoord 17, 5
-
-Function4e4f7: ; 4e4f7 (13:64f7)
-	push bc
-	ld [hli], a
-	inc a
-	ld [hld], a
-	ld bc, $14
-	add hl, bc
-	inc a
-	ld [hli], a
-	inc a
-	ld [hl], a
-	pop bc
-	ret
-
-Function4e505: ; 4e505 (13:6505)
-	ld de, StringBuffer1
-	ld bc, $b
-	jr .asm_4e50d
-.asm_4e50d
-	ld a, [MonType]
-	cp BOXMON
-	jr nz, .asm_4e522
-	ld a, BANK(sBoxMonNicknames)
-	call GetSRAMBank
-	push de
-	call CopyBytes
-	pop de
-	call CloseSRAM
-	ret
-.asm_4e522
-	push de
-	call CopyBytes
-	pop de
-	ret
-
-Function4e528: ; 4e528 (13:6528)
-	ld a, [MonType]
-	add a
-	ld c, a
-	ld b, 0
-	add hl, bc
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	ld a, [MonType]
-	cp $3
-	ret z
-	ld a, [CurPartyMon]
-	jp SkipNames
-
-
-CheckFaintedFrzSlp: ; 4e53f
-	ld hl, MON_HP
-	add hl, bc
-	ld a, [hli]
-	or [hl]
-	jr z, .fainted_frz_slp
-	ld hl, MON_STATUS
-	add hl, bc
-	ld a, [hl]
-	and (1 << FRZ) | SLP
-	jr nz, .fainted_frz_slp
-	and a
-	ret
-
-.fainted_frz_slp
-	scf
-	ret
-; 4e554
-
-
 CatchTutorial:: ; 4e554
 	ld a, [BattleType]
 	dec a
@@ -22010,7 +20860,7 @@
 
 
 Function5088b: ; 5088b
-	ld bc, wd018
+	ld bc, wd018_Mon
 	jr Function50893
 ; 50890
 
@@ -22976,7 +21826,7 @@
 	ld [Buffer2], a ; wd1eb (aliases: MovementType)
 	cp b
 	jr z, .skip
-	call .SwapPartymonViaSRAM
+	call .SwapMonAndMail
 	ld a, [wd1ec]
 	call .ClearSprite
 	ld a, [Buffer2] ; wd1eb (aliases: MovementType)
@@ -23007,7 +21857,7 @@
 	call WaitPlaySFX
 	ret
 
-.SwapPartymonViaSRAM: ; 50f62 (14:4f62)
+.SwapMonAndMail: ; 50f62 (14:4f62)
 	push hl
 	push de
 	push bc
@@ -23261,7 +22111,7 @@
 	ld b, a
 	call Get2bpp
 	pop hl
-	ld de, 7 * 7 * $10
+	ld de, 7 * 7 tiles
 	add hl, de
 	push hl
 	ld a, $1
@@ -23269,17 +22119,17 @@
 	call GetFarWRAMByte
 	pop hl
 	and $f
-	ld de, w6_d000 + $800 + 5 * 5 * $10
+	ld de, w6_d800 + 5 * 5 tiles
 	ld c, 5 * 5
 	cp 5
-	jr z, .asm_5113b
-	ld de, w6_d000 + $800 + 6 * 6 * $10
+	jr z, .got_dims
+	ld de, w6_d800 + 6 * 6 tiles
 	ld c, 6 * 6
 	cp 6
-	jr z, .asm_5113b
-	ld de, w6_d000 + $800 + 7 * 7 * $10
+	jr z, .got_dims
+	ld de, w6_d800 + 7 * 7 tiles
 	ld c, 7 * 7
-.asm_5113b
+.got_dims
 
 	push hl
 	push bc
@@ -23376,10 +22226,10 @@
 ; This is a thing for some reason.
 	push hl
 	push bc
-	sub PICS_1 - $36
+	sub PICS_1 - PICS_FIX
 	ld c, a
 	ld b, 0
-	ld hl, Unknown_511d4
+	ld hl, .PicsBanks
 	add hl, bc
 	ld a, [hl]
 	pop bc
@@ -23387,7 +22237,7 @@
 	ret
 ; 511d4
 
-Unknown_511d4: ; 511d4
+.PicsBanks: ; 511d4
 	db PICS_1
 	db PICS_2
 	db PICS_3
@@ -23513,28 +22363,28 @@
 	jr z, .asm_512a8
 	ld a, c
 	cp 7 * 7
-	ld de, 7 * 7 * $10
-	jr z, .asm_51296
+	ld de, 7 * 7 tiles
+	jr z, .got_dims
 	cp 6 * 6
-	ld de, 6 * 6 * $10
-	jr z, .asm_51296
-	ld de, 5 * 5 * $10
+	ld de, 6 * 6 tiles
+	jr z, .got_dims
+	ld de, 5 * 5 tiles
 
-.asm_51296
+.got_dims
 	ld a, [hl]
 	ld b, $0
 	ld c, $8
-.asm_5129b
+.loop
 	rra
 	rl b
 	dec c
-	jr nz, .asm_5129b
+	jr nz, .loop
 	ld a, b
 	ld [hli], a
 	dec de
 	ld a, e
 	or d
-	jr nz, .asm_51296
+	jr nz, .got_dims
 
 .asm_512a8
 	pop bc
@@ -23648,13 +22498,13 @@
 	ld [wd265], a
 	ld hl, sBoxMons
 	ld bc, BOXMON_STRUCT_LENGTH
-	ld de, wd018
+	ld de, wd018_Mon
 	call Function513e0
-	ld hl, wd01a
+	ld hl, wd018_MonMoves
 	ld de, TempMonMoves
 	ld bc, NUM_MOVES
 	call CopyBytes
-	ld hl, wd02f
+	ld hl, wd018_MonPP
 	ld de, TempMonPP
 	ld bc, NUM_MOVES
 	call CopyBytes
@@ -23686,7 +22536,7 @@
 	ld [wd265], a
 	ld hl, PartyMons
 	ld bc, PARTYMON_STRUCT_LENGTH
-	ld de, wd018
+	ld de, wd018_Mon
 	call Function513e0
 	ret
 ; 513cb
--- a/misc/mobile_22.asm
+++ b/misc/mobile_22.asm
@@ -665,9 +665,10 @@
 	push af
 	ld a, 5
 	ld [rSVBK], a
+
 	ld c, d
 	ld b, 0
-	ld hl, Unknown_89509
+	ld hl, .PalettePointers
 rept 2
 	add hl, bc
 endr
@@ -675,12 +676,13 @@
 	ld h, [hl]
 	ld l, a
 	ld de, wMapPals
-	ld bc, 24
+	ld bc, 3 palettes
 	call CopyBytes
-	ld hl, Palette_89557
-	ld de, wd018
-	ld bc, 24
+	ld hl, .Pals345
+	ld de, wMapPals + 3 palettes
+	ld bc, 3 palettes
 	call CopyBytes
+
 	pop af
 	ld [rSVBK], a
 	pop bc
@@ -687,13 +689,13 @@
 	ret
 ; 89509
 
-Unknown_89509: ; 89509
-	dw Palette_8950f
-	dw Palette_89527
-	dw Palette_8953f
+.PalettePointers: ; 89509
+	dw .Pals012a
+	dw .Pals012b
+	dw .Pals012c
 ; 8950f
 
-Palette_8950f: ; 8950f
+.Pals012a: ; 8950f
 	RGB 31, 31, 31
 	RGB 10, 17, 13
 	RGB 10, 08, 22
@@ -709,7 +711,7 @@
 	RGB 10, 17, 13
 	RGB 00, 00, 00
 
-Palette_89527: ; 89527
+.Pals012b: ; 89527
 	RGB 31, 31, 31
 	RGB 30, 22, 11
 	RGB 31, 08, 15
@@ -725,7 +727,7 @@
 	RGB 30, 22, 11
 	RGB 00, 00, 00
 
-Palette_8953f: ; 8953f
+.Pals012c: ; 8953f
 	RGB 31, 31, 31
 	RGB 15, 20, 26
 	RGB 25, 07, 20
@@ -741,7 +743,7 @@
 	RGB 15, 20, 26
 	RGB 00, 00, 00
 
-Palette_89557: ; 89557
+.Pals345: ; 89557
 	RGB 31, 31, 31
 	RGB 31, 31, 31
 	RGB 31, 13, 00
--- a/wram.asm
+++ b/wram.asm
@@ -1536,6 +1536,8 @@
 wMartItem8BCD::
 wd017:: ds 1
 
+	ds wd00d - @
+wd00d_MonOT:: ds NAME_LENGTH
 wd018_Mon:: party_struct wd018_Mon
 	ds wd018_Mon - @
 
@@ -1620,6 +1622,7 @@
 wTempTrainerHeaderEnd::
 wd04e:: ds 2
 wOaksPkmnTalkPkmnNameBuffer::
+wd050_MonNick::
 wd050:: ds PKMN_NAME_LENGTH +- 1
 wd05a:: ds 12
 wd066:: ds 10
@@ -2998,7 +3001,8 @@
 
 w6_d000:: ds $400
 w6_d400:: ds $200
-w6_d600:: ds $600
+w6_d600:: ds $200
+w6_d800::
 
 INCLUDE "sram.asm"