ref: d08199c79d8168368aeac0381427d533e09f073d
dir: /engine/stats_screen.asm/
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, [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 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 [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 $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 SetUpPokeAnim 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, [wBufferMon] ld [CurSpecies], a call GetBaseData ld hl, wBufferMon 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 CalcTempmonStats .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 StatsScreenDPad pop bc pop de pop hl ld a, [wMenuJoypad] and $c0 jr nz, .set_carry ld a, [wMenuJoypad] 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 ComputeHPBarPixels 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, [BaseDexNo] ; wd236 (aliases: BaseDexNo) ld [wd265], a ld [CurSpecies], a xor a ld [hBGMapMode], a call Function4dfda call DrawStatsScreenPage call Function4dfed ld hl, wcf64 bit 4, [hl] jr nz, .place_frontpic call SetPalettes ret .place_frontpic call StatsScreen_PlaceFrontpic 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 DrawStatsScreenPage: ; 4e002 (13:6002) ld a, [wcf64] and $3 dec a ld hl, .Jumptable rst JumpTable ret .Jumptable: ; 4e00d (13:600d) jumptable_start jumptable .PinkPage jumptable .GreenPage jumptable .BluePage .PinkPage: ; 4e013 (13:6013) hlcoord 0, 9 ld b, $0 predef DrawPlayerHP hlcoord 8, 9 ld [hl], $41 ld de, .Status_Type hlcoord 0, 12 call PlaceString ld a, [TempMonPokerusStatus] ld b, a and $f jr nz, .HasPokerus ld a, b and $f0 jr z, .NotImmuneToPkrs hlcoord 8, 8 ld [hl], "." .NotImmuneToPkrs ld a, [MonType] cp BOXMON jr z, .StatusOK hlcoord 6, 13 push hl ld de, TempMonStatus 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 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, TempMonExp call PrintNum call .CalcExpToNextLevel hlcoord 13, 13 lb bc, 3, 7 ld de, Buffer1 ; wd1ea (aliases: MagikarpLength) call PrintNum ld de, .LevelUpStr hlcoord 10, 12 call PlaceString ld de, .ToStr 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 .PrintNextLevel: ; 4e0d3 (13:60d3) ld a, [TempMonLevel] push af cp MAX_LEVEL jr z, .AtMaxLevel inc a ld [TempMonLevel], a .AtMaxLevel call PrintLevel pop af ld [TempMonLevel], a ret .CalcExpToNextLevel: ; 4e0e7 (13:60e7) ld a, [TempMonLevel] cp MAX_LEVEL jr z, .AlreadyAtMaxLevel inc a ld d, a callba CalcExpAtLevel rept 2 ld hl, TempMonExp + 2 endr ld a, [hQuotient + 2] sub [hl] dec hl ld [Buffer3], a ld a, [hQuotient + 1] sbc [hl] dec hl ld [Buffer2], a ; wd1eb (aliases: MovementType) ld a, [hQuotient] sbc [hl] ld [Buffer1], a ; wd1ea (aliases: MagikarpLength) ret .AlreadyAtMaxLevel ld hl, Buffer1 ; wd1ea (aliases: MagikarpLength) xor a rept 2 ld [hli], a endr 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, 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, SCREEN_WIDTH * 2 ld [Buffer1], a predef ListMovePP ret .GetItemName: ; 4e189 (13:6189) ld de, .ThreeDashes ld a, [TempMonItem] and a ret z ld b, a callba 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 .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, TempMonID call PrintNum ld hl, .OTNamePointers call Function4e528 call Function4e505 callba CheckNickErrors hlcoord 2, 13 call PlaceString ld a, [TempMonCaughtGender] 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 PartyMonOT dw OTPartyMonOT dw sBoxMonOT dw wBufferMonOT ; 4e21e IDNoString: ; 4e21e db "<ID>№.@" OTString: ; 4e222 db "OT/@" ; 4e226 StatsScreen_PlaceFrontpic: ; 4e226 (13:6226) ld hl, TempMonDVs predef GetUnownLetter call StatsScreen_GetAnimationParam jr c, .egg and a jr z, .no_cry jr .cry .egg call Function4e271 call SetPalettes ret .no_cry call Function4e253 call SetPalettes ret .cry 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, .unown hlcoord 0, 0 call PrepMonFrontpic ret .unown xor a ld [wBoxAlignment], a hlcoord 0, 0 call _PrepMonFrontpic ret Function4e271: ; 4e271 (13:6271) ld a, [CurPartySpecies] cp UNOWN jr z, .unown ld a, $1 ld [wBoxAlignment], a call Function4e289 ret .unown xor a ld [wBoxAlignment], a call Function4e289 ret Function4e289: ; 4e289 (13:6289) ld a, [CurPartySpecies] call IsAPokemon ret c call Function4e307 ld de, VTiles2 tile $00 predef FrontpicPredef hlcoord 0, 0 ld d, $0 ld e, $2 predef LoadMonAnimation ld hl, wcf64 set 6, [hl] ret StatsScreen_GetAnimationParam: ; 4e2ad (13:62ad) ld a, [MonType] 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, [CurPartyMon] ld hl, PartyMons ; wdcdf (aliases: PartyMon1, PartyMon1Species) 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, [CurPartyMon] 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, TempMonSpecies ; wd10e (aliases: TempMon) jr .CheckEggFaintedFrzSlp ; utterly pointless .CheckEggFaintedFrzSlp: ; 4e2f2 (13:62f2) ld a, [CurPartySpecies] 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 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 StatsScreen_AnimateEgg 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 StatsScreen_AnimateEgg: ; 4e497 (13:6497) call StatsScreen_GetAnimationParam ret nc ld a, [TempMonHappiness] 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 Function4e307 ld de, VTiles2 tile $00 predef FrontpicPredef 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