summaryrefslogtreecommitdiff
path: root/engine/pokemon/stats_screen.asm
diff options
context:
space:
mode:
authormid-kid <esteve.varela@gmail.com>2018-03-13 13:07:16 +0100
committermid-kid <esteve.varela@gmail.com>2018-03-13 13:21:40 +0100
commitbaa0dc5a963a79843b37888bcfe1d2dfe833ade9 (patch)
tree968c86105bd67a3121d8f3f20018bfc59191f4c9 /engine/pokemon/stats_screen.asm
parent12070ca50067d3abe36a730190f88ee43f2cace9 (diff)
Organize the engine/ directory
This is an informed attempt at reorganizing the engine/ directory by creating categorized subdirectories, in order to make it easier to navigate and find things. The directories created are as follows: * engine/game: Contains all "minigames", things like the unown puzzle and slot machine. * engine/gfx: Contains all handling of graphics. From loading palettes to playing animations. * engine/link: Contains all multiplayer functionality. * engine/menu: Contains all generic/misc. menus and menu code. Other, more specialized menus are in their own subdirectories (pokedex, pokegear, party menu, etc). * engine/overworld: Contains all handling of the overworld. From loading and connecting maps to wild encounters and the scripting engine. * engine/pokegear: In the same vein as engine/pokedex, except it could use some more splitting up. * engine/pokemon: Contains everything related to manipulating pokemon data. From the pokemon storage system to evolution and mail. * engine/printer: Contains everything related to printing things as well as the printer communication. * engine/title: Contains intro sequences, title screens and credits.
Diffstat (limited to 'engine/pokemon/stats_screen.asm')
-rwxr-xr-xengine/pokemon/stats_screen.asm1173
1 files changed, 1173 insertions, 0 deletions
diff --git a/engine/pokemon/stats_screen.asm b/engine/pokemon/stats_screen.asm
new file mode 100755
index 000000000..59d96999f
--- /dev/null
+++ b/engine/pokemon/stats_screen.asm
@@ -0,0 +1,1173 @@
+ const_def 1
+ const PINK_PAGE ; 1
+ const GREEN_PAGE ; 2
+ const BLUE_PAGE ; 3
+NUM_STAT_PAGES EQU const_value + -1
+
+BattleStatsScreenInit: ; 4dc7b (13:5c7b)
+ ld a, [wLinkMode]
+ cp LINK_MOBILE
+ jr nz, StatsScreenInit
+
+ ld a, [wBattleMode]
+ and a
+ jr z, StatsScreenInit
+ jr _MobileStatsScreenInit
+
+StatsScreenInit: ; 4dc8a
+ ld hl, StatsScreenMain
+ jr StatsScreenInit_gotaddress
+
+_MobileStatsScreenInit: ; 4dc8f
+ ld hl, StatsScreenMobile
+ jr StatsScreenInit_gotaddress
+
+StatsScreenInit_gotaddress: ; 4dc94
+ ld a, [hMapAnims]
+ push af
+ xor a
+ ld [hMapAnims], a ; disable overworld tile animations
+ ld a, [wBoxAlignment] ; 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
+ farcall StatsScreen_LoadFont
+ 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 [wBoxAlignment], a
+ pop af
+ ld [hMapAnims], a
+ ret
+; 0x4dcd2
+
+StatsScreenMain: ; 0x4dcd2
+ xor a
+ ld [wJumptableIndex], a
+ ; stupid interns
+ ld [wcf64], a
+ ld a, [wcf64]
+ and %11111100
+ or 1
+ ld [wcf64], a
+.loop ; 4dce3
+ ld a, [wJumptableIndex]
+ and $ff ^ (1 << 7)
+ ld hl, StatsScreenPointerTable
+ rst JumpTable
+ call StatsScreen_WaitAnim ; check for keys?
+ ld a, [wJumptableIndex]
+ bit 7, a
+ jr z, .loop
+ ret
+; 0x4dcf7
+
+StatsScreenMobile: ; 4dcf7
+ xor a
+ ld [wJumptableIndex], a
+ ; stupid interns
+ ld [wcf64], a
+ ld a, [wcf64]
+ and %11111100
+ or 1
+ ld [wcf64], a
+.loop
+ farcall Mobile_SetOverworldDelay
+ ld a, [wJumptableIndex]
+ and $ff ^ (1 << 7)
+ ld hl, StatsScreenPointerTable
+ rst JumpTable
+ call StatsScreen_WaitAnim
+ farcall MobileComms_CheckInactivityTimer
+ 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 EggStatsJoypad
+ dw StatsScreen_LoadPage
+ dw StatsScreenWaitCry
+ dw MonStatsJoypad
+ dw StatsScreen_Exit
+; 4dd3a
+
+
+StatsScreen_WaitAnim: ; 4dd3a (13:5d3a)
+ ld hl, wcf64
+ bit 6, [hl]
+ jr nz, .try_anim
+ bit 5, [hl]
+ jr nz, .finish
+ call DelayFrame
+ ret
+
+.try_anim
+ farcall SetUpPokeAnim
+ jr nc, .finish
+ ld hl, wcf64
+ res 6, [hl]
+.finish
+ ld hl, wcf64
+ res 5, [hl]
+ farcall HDMATransferTileMapToWRAMBank3
+ ret
+
+StatsScreen_SetJumptableIndex: ; 4dd62 (13:5d62)
+ ld a, [wJumptableIndex]
+ and $80
+ or h
+ ld [wJumptableIndex], a
+ ret
+
+StatsScreen_Exit: ; 4dd6c (13:5d6c)
+ ld hl, wJumptableIndex
+ set 7, [hl]
+ ret
+
+MonStatsInit: ; 4dd72 (13:5d72)
+ ld hl, wcf64
+ res 6, [hl]
+ call ClearBGPalettes
+ call ClearTileMap
+ farcall HDMATransferTileMapToWRAMBank3
+ call StatsScreen_CopyToTempMon
+ ld a, [wCurPartySpecies]
+ cp EGG
+ jr z, .egg
+ call StatsScreen_InitUpperHalf
+ ld hl, wcf64
+ set 4, [hl]
+ ld h, 4
+ call StatsScreen_SetJumptableIndex
+ ret
+
+.egg
+ ld h, 1
+ call StatsScreen_SetJumptableIndex
+ ret
+
+EggStatsInit: ; 4dda1
+ call EggStatsScreen
+ ld a, [wJumptableIndex]
+ inc a
+ ld [wJumptableIndex], a
+ ret
+; 0x4ddac
+
+
+EggStatsJoypad: ; 4ddac (13:5dac)
+ call StatsScreen_GetJoypad
+ jr nc, .check
+ ld h, 0
+ call StatsScreen_SetJumptableIndex
+ ret
+
+.check
+ bit A_BUTTON_F, a
+ jr nz, .quit
+ and D_DOWN | D_UP | A_BUTTON | B_BUTTON
+ jp StatsScreen_JoypadAction
+
+.quit
+ ld h, 7
+ call StatsScreen_SetJumptableIndex
+ ret
+
+StatsScreen_LoadPage: ; 4ddc6 (13:5dc6)
+ call StatsScreen_LoadGFX
+ ld hl, wcf64
+ res 4, [hl]
+ ld a, [wJumptableIndex]
+ inc a
+ ld [wJumptableIndex], a
+ ret
+
+MonStatsJoypad: ; 4ddd6 (13:5dd6)
+ call StatsScreen_GetJoypad
+ jr nc, .next
+ ld h, 0
+ call StatsScreen_SetJumptableIndex
+ ret
+
+.next
+ and D_DOWN | D_UP | D_LEFT | D_RIGHT | A_BUTTON | B_BUTTON
+ jp StatsScreen_JoypadAction
+
+StatsScreenWaitCry: ; 4dde6 (13:5de6)
+ call IsSFXPlaying
+ ret nc
+ ld a, [wJumptableIndex]
+ inc a
+ ld [wJumptableIndex], a
+ ret
+
+StatsScreen_CopyToTempMon: ; 4ddf2 (13:5df2)
+ ld a, [wMonType]
+ cp TEMPMON
+ jr nz, .breedmon
+ ld a, [wBufferMonSpecies]
+ ld [wCurSpecies], a
+ call GetBaseData
+ ld hl, wBufferMon
+ ld de, wTempMon
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call CopyBytes
+ jr .done
+
+.breedmon
+ farcall CopyMonToTempMon
+ ld a, [wCurPartySpecies]
+ cp EGG
+ jr z, .done
+ ld a, [wMonType]
+ cp BOXMON
+ jr c, .done
+ farcall CalcTempmonStats
+.done
+ and a
+ ret
+
+StatsScreen_GetJoypad: ; 4de2c (13:5e2c)
+ call GetJoypad
+ ld a, [wMonType]
+ cp TEMPMON
+ jr nz, .notbreedmon
+ push hl
+ push de
+ push bc
+ farcall StatsScreenDPad
+ pop bc
+ pop de
+ pop hl
+ ld a, [wMenuJoypad]
+ and D_DOWN | D_UP
+ jr nz, .set_carry
+ ld a, [wMenuJoypad]
+ jr .clear_flags
+
+.notbreedmon
+ ld a, [hJoyPressed]
+.clear_flags
+ and a
+ ret
+
+.set_carry
+ scf
+ ret
+
+StatsScreen_JoypadAction: ; 4de54 (13:5e54)
+ push af
+ ld a, [wcf64]
+ maskbits NUM_STAT_PAGES
+ ld c, a
+ pop af
+ bit B_BUTTON_F, a
+ jp nz, .b_button
+ bit D_LEFT_F, a
+ jr nz, .d_left
+ bit D_RIGHT_F, a
+ jr nz, .d_right
+ bit A_BUTTON_F, a
+ jr nz, .a_button
+ bit D_UP_F, a
+ jr nz, .d_up
+ bit D_DOWN_F, a
+ jr nz, .d_down
+ jr .done
+
+.d_down
+ ld a, [wMonType]
+ cp BOXMON
+ jr nc, .done
+ and a
+ ld a, [wPartyCount]
+ jr z, .next_mon
+ ld a, [wOTPartyCount]
+.next_mon
+ ld b, a
+ ld a, [wCurPartyMon]
+ inc a
+ cp b
+ jr z, .done
+ ld [wCurPartyMon], a
+ ld b, a
+ ld a, [wMonType]
+ and a
+ jr nz, .load_mon
+ ld a, b
+ inc a
+ ld [wPartyMenuCursor], a
+ jr .load_mon
+
+.d_up
+ ld a, [wCurPartyMon]
+ and a
+ jr z, .done
+ dec a
+ ld [wCurPartyMon], a
+ ld b, a
+ ld a, [wMonType]
+ and a
+ jr nz, .load_mon
+ ld a, b
+ inc a
+ ld [wPartyMenuCursor], a
+ jr .load_mon
+
+.a_button
+ ld a, c
+ cp BLUE_PAGE ; last page
+ jr z, .b_button
+.d_right
+ inc c
+ ld a, BLUE_PAGE ; last page
+ cp c
+ jr nc, .set_page
+ ld c, PINK_PAGE ; first page
+ jr .set_page
+
+.d_left
+ dec c
+ jr nz, .set_page
+ ld c, BLUE_PAGE ; last page
+ jr .set_page
+
+.done
+ ret
+
+.set_page
+ ld a, [wcf64]
+ and %11111100
+ or c
+ ld [wcf64], a
+ ld h, 4
+ call StatsScreen_SetJumptableIndex
+ ret
+
+.load_mon
+ ld h, 0
+ call StatsScreen_SetJumptableIndex
+ ret
+
+.b_button ; 4dee4 (13:5ee4)
+ ld h, 7
+ call StatsScreen_SetJumptableIndex
+ ret
+
+StatsScreen_InitUpperHalf: ; 4deea (13:5eea)
+ call .PlaceHPBar
+ xor a
+ ld [hBGMapMode], a
+ ld a, [wBaseDexNo]
+ ld [wd265], a
+ ld [wCurSpecies], 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, .NicknamePointers
+ call GetNicknamePointer
+ call CopyNickname
+ hlcoord 8, 2
+ call PlaceString
+ hlcoord 18, 0
+ call .PlaceGenderChar
+ hlcoord 9, 4
+ ld a, "/"
+ ld [hli], a
+ ld a, [wBaseDexNo]
+ ld [wd265], a
+ call GetPokemonName
+ call PlaceString
+ call StatsScreen_PlaceHorizontalDivider
+ call StatsScreen_PlacePageSwitchArrows
+ call StatsScreen_PlaceShinyIcon
+ ret
+
+.PlaceHPBar: ; 4df45 (13:5f45)
+ ld hl, wTempMonHP
+ ld a, [hli]
+ ld b, a
+ ld c, [hl]
+ ld hl, wTempMonMaxHP
+ ld a, [hli]
+ ld d, a
+ ld e, [hl]
+ farcall ComputeHPBarPixels
+ ld hl, wCurHPPal
+ call SetHPPal
+ ld b, SCGB_STATS_SCREEN_HP_PALS
+ call GetSGBLayout
+ call DelayFrame
+ ret
+
+.PlaceGenderChar: ; 4df66 (13:5f66)
+ push hl
+ farcall GetGender
+ pop hl
+ ret c
+ ld a, "♂"
+ jr nz, .got_gender
+ ld a, "♀"
+.got_gender
+ ld [hl], a
+ ret
+; 4df77 (13:5f77)
+
+.NicknamePointers: ; 4df77
+ dw wPartyMonNicknames
+ dw wOTPartyMonNicknames
+ dw sBoxMonNicknames
+ dw wBufferMonNick
+; 4df7f
+
+Unreferenced_Function4df7f: ; 4df7f
+ hlcoord 7, 0
+ ld bc, SCREEN_WIDTH
+ ld d, SCREEN_HEIGHT
+.loop
+ ld a, $31 ; vertical divider
+ ld [hl], a
+ add hl, bc
+ dec d
+ jr nz, .loop
+ ret
+; 4df8f
+
+StatsScreen_PlaceHorizontalDivider: ; 4df8f (13:5f8f)
+ hlcoord 0, 7
+ ld b, SCREEN_WIDTH
+ ld a, $62 ; horizontal divider (empty HP/exp bar)
+.loop
+ ld [hli], a
+ dec b
+ jr nz, .loop
+ ret
+
+StatsScreen_PlacePageSwitchArrows: ; 4df9b (13:5f9b)
+ hlcoord 12, 6
+ ld [hl], "◀"
+ hlcoord 19, 6
+ ld [hl], "▶"
+ ret
+
+StatsScreen_PlaceShinyIcon: ; 4dfa6 (13:5fa6)
+ ld bc, wTempMonDVs
+ farcall CheckShininess
+ ret nc
+ hlcoord 19, 0
+ ld [hl], "⁂"
+ ret
+
+StatsScreen_LoadGFX: ; 4dfb6 (13:5fb6)
+ ld a, [wBaseDexNo]
+ ld [wd265], a
+ ld [wCurSpecies], a
+ xor a
+ ld [hBGMapMode], a
+ call .ClearBox
+ call .PageTilemap
+ call .LoadPals
+ ld hl, wcf64
+ bit 4, [hl]
+ jr nz, .place_frontpic
+ call SetPalettes
+ ret
+
+.place_frontpic
+ call StatsScreen_PlaceFrontpic
+ ret
+
+.ClearBox: ; 4dfda (13:5fda)
+ ld a, [wcf64]
+ maskbits NUM_STAT_PAGES
+ ld c, a
+ call StatsScreen_LoadPageIndicators
+ hlcoord 0, 8
+ lb bc, 10, 20
+ call ClearBox
+ ret
+
+.LoadPals: ; 4dfed (13:5fed)
+ ld a, [wcf64]
+ maskbits NUM_STAT_PAGES
+ ld c, a
+ farcall LoadStatsScreenPals
+ call DelayFrame
+ ld hl, wcf64
+ set 5, [hl]
+ ret
+
+.PageTilemap: ; 4e002 (13:6002)
+ ld a, [wcf64]
+ maskbits NUM_STAT_PAGES
+ dec a
+ ld hl, .Jumptable
+ rst JumpTable
+ ret
+
+.Jumptable: ; 4e00d (13:600d)
+; entries correspond to *_PAGE constants
+ dw .PinkPage
+ dw .GreenPage
+ dw .BluePage
+
+.PinkPage: ; 4e013 (13:6013)
+ hlcoord 0, 9
+ ld b, $0
+ predef DrawPlayerHP
+ hlcoord 8, 9
+ ld [hl], $41 ; right HP/exp bar end cap
+ ld de, .Status_Type
+ hlcoord 0, 12
+ call PlaceString
+ ld a, [wTempMonPokerusStatus]
+ ld b, a
+ and $f
+ jr nz, .HasPokerus
+ ld a, b
+ and $f0
+ jr z, .NotImmuneToPkrs
+ hlcoord 8, 8
+ ld [hl], "." ; Pokérus immunity dot
+.NotImmuneToPkrs:
+ ld a, [wMonType]
+ cp BOXMON
+ jr z, .StatusOK
+ hlcoord 6, 13
+ push hl
+ ld de, wTempMonStatus
+ predef PlaceStatusString
+ pop hl
+ jr nz, .done_status
+ jr .StatusOK
+.HasPokerus:
+ ld de, .PkrsStr
+ hlcoord 1, 13
+ call PlaceString
+ jr .done_status
+.StatusOK:
+ ld de, .OK_str
+ call PlaceString
+.done_status
+ hlcoord 1, 15
+ predef PrintMonTypes
+ hlcoord 9, 8
+ ld de, SCREEN_WIDTH
+ ld b, 10
+ ld a, $31 ; vertical divider
+.vertical_divider
+ ld [hl], a
+ add hl, de
+ dec b
+ jr nz, .vertical_divider
+ ld de, .ExpPointStr
+ hlcoord 10, 9
+ call PlaceString
+ hlcoord 17, 14
+ call .PrintNextLevel
+ hlcoord 13, 10
+ lb bc, 3, 7
+ ld de, wTempMonExp
+ call PrintNum
+ call .CalcExpToNextLevel
+ hlcoord 13, 13
+ lb bc, 3, 7
+ ld de, wBuffer1
+ call PrintNum
+ ld de, .LevelUpStr
+ hlcoord 10, 12
+ call PlaceString
+ ld de, .ToStr
+ hlcoord 14, 14
+ call PlaceString
+ hlcoord 11, 16
+ ld a, [wTempMonLevel]
+ ld b, a
+ ld de, wTempMonExp + 2
+ predef FillInExpBar
+ hlcoord 10, 16
+ ld [hl], $40 ; left exp bar end cap
+ hlcoord 19, 16
+ ld [hl], $41 ; right exp bar end cap
+ ret
+
+.PrintNextLevel: ; 4e0d3 (13:60d3)
+ ld a, [wTempMonLevel]
+ push af
+ cp MAX_LEVEL
+ jr z, .AtMaxLevel
+ inc a
+ ld [wTempMonLevel], a
+.AtMaxLevel:
+ call PrintLevel
+ pop af
+ ld [wTempMonLevel], a
+ ret
+
+.CalcExpToNextLevel: ; 4e0e7 (13:60e7)
+ ld a, [wTempMonLevel]
+ cp MAX_LEVEL
+ jr z, .AlreadyAtMaxLevel
+ inc a
+ ld d, a
+ farcall CalcExpAtLevel
+ ld hl, wTempMonExp + 2
+ ld hl, wTempMonExp + 2
+ ld a, [hQuotient + 2]
+ sub [hl]
+ dec hl
+ ld [wBuffer3], a
+ ld a, [hQuotient + 1]
+ sbc [hl]
+ dec hl
+ ld [wBuffer2], a
+ ld a, [hQuotient]
+ sbc [hl]
+ ld [wBuffer1], a
+ ret
+
+.AlreadyAtMaxLevel:
+ ld hl, wBuffer1
+ xor a
+ ld [hli], a
+ ld [hli], a
+ ld [hl], a
+ ret
+; 4e119 (13:6119)
+
+.Status_Type: ; 4e119
+ db "STATUS/"
+ next "TYPE/@"
+; 4e127
+
+.OK_str: ; 4e127
+ db "OK @"
+; 4e12b
+
+.ExpPointStr: ; 4e12b
+ db "EXP POINTS@"
+; 4e136
+
+.LevelUpStr: ; 4e136
+ db "LEVEL UP@"
+; 4e13f
+
+.ToStr: ; 4e13f
+ db "TO@"
+; 4e142
+
+.PkrsStr: ; 4e142
+ db "#RUS@"
+; 4e147
+
+.GreenPage: ; 4e147 (13:6147)
+ ld de, .Item
+ hlcoord 0, 8
+ call PlaceString
+ call .GetItemName
+ hlcoord 8, 8
+ call PlaceString
+ ld de, .Move
+ hlcoord 0, 10
+ call PlaceString
+ ld hl, wTempMonMoves
+ ld de, wListMoves_MoveIndicesBuffer
+ ld bc, NUM_MOVES
+ call CopyBytes
+ hlcoord 8, 10
+ ld a, SCREEN_WIDTH * 2
+ ld [wBuffer1], a
+ predef ListMoves
+ hlcoord 12, 11
+ ld a, SCREEN_WIDTH * 2
+ ld [wBuffer1], a
+ predef ListMovePP
+ ret
+
+.GetItemName: ; 4e189 (13:6189)
+ ld de, .ThreeDashes
+ ld a, [wTempMonItem]
+ and a
+ ret z
+ ld b, a
+ farcall TimeCapsule_ReplaceTeruSama
+ ld a, b
+ ld [wd265], a
+ call GetItemName
+ ret
+; 4e1a0 (13:61a0)
+
+.Item: ; 4e1a0
+ db "ITEM@"
+; 4e1a5
+
+.ThreeDashes: ; 4e1a5
+ db "---@"
+; 4e1a9
+
+.Move: ; 4e1a9
+ db "MOVE@"
+; 4e1ae
+
+.BluePage: ; 4e1ae (13:61ae)
+ call .PlaceOTInfo
+ hlcoord 10, 8
+ ld de, SCREEN_WIDTH
+ ld b, 10
+ ld a, $31 ; vertical divider
+.BluePageVerticalDivider:
+ ld [hl], a
+ add hl, de
+ dec b
+ jr nz, .BluePageVerticalDivider
+ hlcoord 11, 8
+ ld bc, 6
+ predef PrintTempMonStats
+ ret
+
+.PlaceOTInfo: ; 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, wTempMonID
+ call PrintNum
+ ld hl, .OTNamePointers
+ call GetNicknamePointer
+ call CopyNickname
+ farcall CheckNickErrors
+ hlcoord 2, 13
+ call PlaceString
+ ld a, [wTempMonCaughtGender]
+ and a
+ jr z, .done
+ cp $7f
+ jr z, .done
+ and $80
+ ld a, "♂"
+ jr z, .got_gender
+ ld a, "♀"
+.got_gender
+ hlcoord 9, 13
+ ld [hl], a
+.done
+ ret
+; 4e216 (13:6216)
+
+.OTNamePointers: ; 4e216
+ dw wPartyMonOT
+ dw wOTPartyMonOT
+ dw sBoxMonOT
+ dw wBufferMonOT
+; 4e21e
+
+IDNoString: ; 4e21e
+ db "<ID>№.@"
+
+OTString: ; 4e222
+ db "OT/@"
+; 4e226
+
+
+StatsScreen_PlaceFrontpic: ; 4e226 (13:6226)
+ ld hl, wTempMonDVs
+ predef GetUnownLetter
+ call StatsScreen_GetAnimationParam
+ jr c, .egg
+ and a
+ jr z, .no_cry
+ jr .cry
+
+.egg
+ call .AnimateEgg
+ call SetPalettes
+ ret
+
+.no_cry
+ call .AnimateMon
+ call SetPalettes
+ ret
+
+.cry
+ call SetPalettes
+ call .AnimateMon
+ ld a, [wCurPartySpecies]
+ call PlayMonCry2
+ ret
+
+.AnimateMon: ; 4e253 (13:6253)
+ ld hl, wcf64
+ set 5, [hl]
+ ld a, [wCurPartySpecies]
+ cp UNOWN
+ jr z, .unown
+ hlcoord 0, 0
+ call PrepMonFrontpic
+ ret
+
+.unown
+ xor a
+ ld [wBoxAlignment], a
+ hlcoord 0, 0
+ call _PrepMonFrontpic
+ ret
+
+.AnimateEgg: ; 4e271 (13:6271)
+ ld a, [wCurPartySpecies]
+ cp UNOWN
+ jr z, .unownegg
+ ld a, TRUE
+ ld [wBoxAlignment], a
+ call .get_animation
+ ret
+
+.unownegg
+ xor a
+ ld [wBoxAlignment], a
+ call .get_animation
+ ret
+
+.get_animation ; 4e289 (13:6289)
+ ld a, [wCurPartySpecies]
+ call IsAPokemon
+ ret c
+ call StatsScreen_LoadTextBoxSpaceGFX
+ ld de, vTiles2 tile $00
+ predef GetAnimatedFrontpic
+ hlcoord 0, 0
+ ld d, $0
+ ld e, ANIM_MON_MENU
+ predef LoadMonAnimation
+ ld hl, wcf64
+ set 6, [hl]
+ ret
+
+StatsScreen_GetAnimationParam: ; 4e2ad (13:62ad)
+ ld a, [wMonType]
+ ld hl, .Jumptable
+ rst JumpTable
+ ret
+
+.Jumptable: ; 4e2b5 (13:62b5)
+ dw .PartyMon
+ dw .OTPartyMon
+ dw .BoxMon
+ dw .Tempmon
+ dw .Wildmon
+
+.PartyMon: ; 4e2bf (13:62bf)
+ ld a, [wCurPartyMon]
+ ld hl, wPartyMon1
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call AddNTimes
+ ld b, h
+ ld c, l
+ jr .CheckEggFaintedFrzSlp
+
+.OTPartyMon: ; 4e2cf (13:62cf)
+ xor a
+ ret
+
+.BoxMon: ; 4e2d1 (13:62d1)
+ ld hl, sBoxMons
+ ld bc, PARTYMON_STRUCT_LENGTH
+ ld a, [wCurPartyMon]
+ call AddNTimes
+ ld b, h
+ ld c, l
+ ld a, BANK(sBoxMons)
+ call GetSRAMBank
+ call .CheckEggFaintedFrzSlp
+ push af
+ call CloseSRAM
+ pop af
+ ret
+
+.Tempmon: ; 4e2ed (13:62ed)
+ ld bc, wTempMonSpecies
+ jr .CheckEggFaintedFrzSlp ; utterly pointless
+
+.CheckEggFaintedFrzSlp: ; 4e2f2 (13:62f2)
+ ld a, [wCurPartySpecies]
+ cp EGG
+ jr z, .egg
+ call CheckFaintedFrzSlp
+ jr c, .FaintedFrzSlp
+.egg
+ xor a
+ scf
+ ret
+
+.Wildmon: ; 4e301 (13:6301)
+ ld a, $1
+ and a
+ ret
+
+.FaintedFrzSlp: ; 4e305 (13:6305)
+ xor a
+ ret
+
+StatsScreen_LoadTextBoxSpaceGFX: ; 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 " "
+ call Get2bpp
+ pop af
+ ld [rVBK], a
+ pop af
+ pop bc
+ pop de
+ pop hl
+ ret
+; 4e32a (13:632a)
+
+Unreferenced_4e32a: ; 4e32a
+; A blank space tile?
+ ds 16
+; 4e33a
+
+EggStatsScreen: ; 4e33a
+ xor a
+ ld [hBGMapMode], a
+ ld hl, wCurHPPal
+ call SetHPPal
+ ld b, SCGB_STATS_SCREEN_HP_PALS
+ call GetSGBLayout
+ call StatsScreen_PlaceHorizontalDivider
+ 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, [wTempMonHappiness] ; 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
+ farcall HDMATransferTileMapToWRAMBank3
+ call StatsScreen_AnimateEgg
+
+ ld a, [wTempMonHappiness]
+ 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
+
+
+StatsScreen_AnimateEgg: ; 4e497 (13:6497)
+ call StatsScreen_GetAnimationParam
+ ret nc
+ ld a, [wTempMonHappiness]
+ ld e, $7
+ cp 6
+ jr c, .animate
+ ld e, $8
+ cp 11
+ jr c, .animate
+ ret
+
+.animate
+ push de
+ ld a, $1
+ ld [wBoxAlignment], a
+ call StatsScreen_LoadTextBoxSpaceGFX
+ ld de, vTiles2 tile $00
+ predef GetAnimatedFrontpic
+ pop de
+ hlcoord 0, 0
+ ld d, $0
+ predef LoadMonAnimation
+ ld hl, wcf64
+ set 6, [hl]
+ ret
+
+StatsScreen_LoadPageIndicators: ; 4e4cd (13:64cd)
+ hlcoord 13, 5
+ ld a, $36 ; first of 4 small square tiles
+ 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 GREEN_PAGE
+ ld a, $3a ; first of 4 large square tiles
+ hlcoord 13, 5 ; PINK_PAGE (< GREEN_PAGE)
+ jr c, .load_square
+ hlcoord 15, 5 ; GREEN_PAGE (= GREEN_PAGE)
+ jr z, .load_square
+ hlcoord 17, 5 ; BLUE_PAGE (> GREEN_PAGE)
+.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
+
+CopyNickname: ; 4e505 (13:6505)
+ ld de, wStringBuffer1
+ ld bc, MON_NAME_LENGTH
+ jr .okay ; utterly pointless
+.okay
+ ld a, [wMonType]
+ 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
+
+GetNicknamePointer: ; 4e528 (13:6528)
+ ld a, [wMonType]
+ add a
+ ld c, a
+ ld b, 0
+ add hl, bc
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld a, [wMonType]
+ cp TEMPMON
+ ret z
+ ld a, [wCurPartyMon]
+ 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