diff options
author | mid-kid <esteve.varela@gmail.com> | 2018-03-13 13:07:16 +0100 |
---|---|---|
committer | mid-kid <esteve.varela@gmail.com> | 2018-03-13 13:21:40 +0100 |
commit | baa0dc5a963a79843b37888bcfe1d2dfe833ade9 (patch) | |
tree | 968c86105bd67a3121d8f3f20018bfc59191f4c9 /engine/pokemon/stats_screen.asm | |
parent | 12070ca50067d3abe36a730190f88ee43f2cace9 (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-x | engine/pokemon/stats_screen.asm | 1173 |
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 |