ref: 683a62cc1cb7d07b4c88eeec9333c415da8f0bdc
dir: /engine/menu/status_screen.asm/
; Predef 0x37 StatusScreen: ; 12953 (4:6953) call LoadMonData ld a, [wcc49] cp $2 ; 2 means we're in a PC box jr c, .DontRecalculate ; 0x1295b $14 ld a, [wcf9b] ld [wcfb9], a ld [W_CURENEMYLVL], a ld hl, wcfa8 ld de, wcfba ld b, $1 call CalcStats ; Recalculate stats .DontRecalculate ld hl, wd72c set 1, [hl] ld a, $33 ld [$ff24], a ; Reduce the volume call GBPalWhiteOutWithDelay3 call ClearScreen call UpdateSprites ; move sprites (?) call LoadHpBarAndStatusTilePatterns ld de, BattleHudTiles1 ; $6080 ; source ld hl, vChars2 + $6d0 ; dest ld bc, (BANK(BattleHudTiles1) << 8) + $03 ; bank bytes/8 call CopyVideoDataDouble ; ·│ :L and halfarrow line end ld de, BattleHudTiles2 ; $6098 ld hl, vChars2 + $780 ld bc, (BANK(BattleHudTiles2) << 8) + $01 call CopyVideoDataDouble ; │ ld de, BattleHudTiles3 ; $60b0 ld hl, vChars2 + $760 ld bc, (BANK(BattleHudTiles3) << 8) + $02 call CopyVideoDataDouble ; ─┘ ld de, PTile ld hl, vChars2 + $720 ld bc,(BANK(PTile) << 8 | $01) call CopyVideoDataDouble ; P (for PP), inline ld a, [$ffd7] push af xor a ld [$ffd7], a FuncCoord 19,1 ld hl, Coord ld bc, $060a call DrawLineBox ; Draws the box around name, HP and status ld de, $fffa add hl, de ld [hl], $f2 ; . after No ("." is a different one) dec hl ld [hl], "№" FuncCoord 19,9 ld hl, Coord ld bc, $0806 call DrawLineBox ; Draws the box around types, ID No. and OT FuncCoord 10,9 ld hl, Coord ld de, Type1Text call PlaceString ; "TYPE1/" FuncCoord 11,3 ld hl, Coord PREDEF DrawHPBarPredef ; predef $5f ld hl, wcf25 call GetHealthBarColor ld b, $3 call GoPAL_SET ; SGB palette FuncCoord 16,6 ld hl, Coord ld de, wcf9c call PrintStatusCondition jr nz, .StatusWritten ; 0x129fc $9 FuncCoord 16,6 ld hl, Coord ld de, OKText call PlaceString ; "OK" .StatusWritten FuncCoord 9,6 ld hl, Coord ld de, StatusText call PlaceString ; "STATUS/" FuncCoord 14,2 ld hl, Coord call PrintLevel ; Pokémon level ld a, [W_MONHDEXNUM] ld [wd11e], a ld [wd0b5], a ld a, $3a call Predef FuncCoord 3,7 ld hl, Coord ld de, wd11e ld bc, $8103 ; Zero-padded, 3 call PrintNumber ; Pokémon no. FuncCoord 11,10 ld hl, Coord ld a, $4b call Predef ; Prints the type (?) ld hl, NamePointers2 ; $6a9d call .unk_12a7e ld d, h ld e, l FuncCoord 9,1 ld hl, Coord call PlaceString ; Pokémon name ld hl, OTPointers ; $6a95 call .unk_12a7e ld d, h ld e, l FuncCoord 12,16 ld hl, Coord call PlaceString ; OT FuncCoord 12,14 ld hl, Coord ld de, wcfa4 ld bc, $8205 ; 5 call PrintNumber ; ID Number ld d, $0 call PrintStatsBox call Delay3 call GBPalNormal FuncCoord 1, 0 ld hl, Coord call LoadFlippedFrontSpriteByMonIndex ; draw Pokémon picture ld a, [wcf91] call PlayCry ; play Pokémon cry call WaitForTextScrollButtonPress ; wait for button pop af ld [$ffd7], a ret .unk_12a7e ; 0x12a7e ; I don't know what this does, iterates over pointers? ld a, [wcc49] add a ld c, a ld b, $0 add hl, bc ld a, [hli] ld h, [hl] ld l, a ld a, [wcc49] cp $3 ret z ld a, [wWhichPokemon] jp SkipFixedLengthTextEntries OTPointers: ; 12a95 (4:6a95) dw W_PARTYMON1OT dw W_ENEMYMON1OT dw W_BOXMON1OT dw W_DAYCAREMONOT NamePointers2: ; 12a9d (4:6a9d) dw W_PARTYMON1NAME dw W_ENEMYMON1NAME dw W_BOXMON1NAME dw W_DAYCAREMONNAME Type1Text: ; 12aa5 (4:6aa5) db "TYPE1/", $4e Type2Text: ; 12aac (4:6aac) db "TYPE2/", $4e IDNoText: ; 12ab3 (4:6ab3) db $73, "№", "/", $4e OTText: ; 12ab7 (4:6ab7) db "OT/", $4e, "@" StatusText: ; 12abc (4:6abc) db "STATUS/@" OKText: ; 12ac4 (4:6ac4) db "OK@" ; Draws a line starting from hl high b and wide c DrawLineBox ; 0x12ac7 ld de, $0014 ; New line .PrintVerticalLine ld [hl], $78 ; │ add hl, de dec b jr nz, .PrintVerticalLine ; 0x12ace $fa ld [hl], $77 ; ┘ dec hl .PrintHorizLine ld [hl], $76 ; ─ dec hl dec c jr nz, .PrintHorizLine ; 0x12ad7 $fa ld [hl], $6f ; ← (halfarrow ending) ret PTile: ; 12adc (4:6adc) ; This is a single 1bpp "P" tile INCBIN "gfx/p_tile.1bpp" PrintStatsBox: ; 12ae4 (4:6ae4) ld a, d and a ; a is 0 from the status screen jr nz, .DifferentBox ; 0x12ae6 $12 FuncCoord 0,8 ld hl, Coord ld b, $8 ld c, $8 call TextBoxBorder ; Draws the box FuncCoord 1,9 ; Start printing stats from here ld hl, Coord ld bc, $0019 ; Number offset jr .PrintStats ; 0x12af8 $10 .DifferentBox FuncCoord 9,2 ld hl, Coord ld b, $8 ld c, $9 call TextBoxBorder FuncCoord 11, 3 ld hl, Coord ld bc, $0018 .PrintStats push bc push hl ld de, StatsText call PlaceString pop hl pop bc add hl, bc ld de, wcfbc ld bc, $0203 ; three digits call PrintStat ld de, wcfbe call PrintStat ld de, wcfc0 call PrintStat ld de, wcfc2 jp PrintNumber PrintStat push hl call PrintNumber pop hl ld de, $0028 add hl, de ret StatsText: ; 12b3a (4:6b3a) db "ATTACK" next "DEFENSE" next "SPEED" next "SPECIAL@" StatusScreen2: ; 12b57 (4:6b57) ld a, [$ffd7] push af xor a ld [$ffd7], a ld [$ffba], a ld bc, $0005 ld hl, wd0dc call FillMemory ld hl, wcfa0 ld de, wd0dc ld bc, $0004 call CopyData callab Func_39b87 FuncCoord 9,2 ld hl, Coord ld bc, $050a call ClearScreenArea ; Clear under name FuncCoord 19, 3 ld hl, Coord ld [hl], $78 FuncCoord 0,8 ld hl, Coord ld b, $8 ld c, $12 call TextBoxBorder ; Draw move container FuncCoord 2,9 ld hl, Coord ld de, wd0e1 call PlaceString ; Print moves ld a, [wcd6c] inc a ld c, a ld a, $4 sub c ld b, a ; Number of moves ? FuncCoord 11,10 ld hl, Coord ld de, $0028 ld a, $72 call Func_12ccb ; Print "PP" ld a, b and a jr z, .InitPP ; 0x12bb3 $6 ld c, a ld a, "-" call Func_12ccb ; Fill the rest with -- .InitPP ; 12bbb ld hl, wcfa0 FuncCoord 14,10 ld de, Coord ld b, $0 .PrintPP ; 12bc3 ld a, [hli] and a jr z, .PPDone ; 0x12bc5 $4a push bc push hl push de ld hl, wCurrentMenuItem ld a, [hl] push af ld a, b ld [hl], a push hl callab GetMaxPP pop hl pop af ld [hl], a pop de pop hl push hl ld bc, $0014 add hl, bc ld a, [hl] and $3f ld [wcd71], a ld h, d ld l, e push hl ld de, wcd71 ld bc, $0102 call PrintNumber ld a, "/" ld [hli], a ld de, wd11e ld bc, $0102 call PrintNumber pop hl ld de, $0028 add hl, de ld d, h ld e, l pop hl pop bc inc b ld a, b cp $4 jr nz, .PrintPP ; 0x12c0f $b2 .PPDone FuncCoord 9,3 ld hl, Coord ld de, EXPPointsText call PlaceString ld a, [wcfb9] ; level push af cp 100 jr z, .Level100 ; 0x12c20 $4 inc a ld [wcfb9], a ; Increase temporarily if not 100 .Level100 FuncCoord 14,6 ld hl, Coord ld [hl], $70 ; 1-tile "to" inc hl inc hl call PrintLevel pop af ld [wcfb9], a ld de, wcfa6 FuncCoord 12,4 ld hl, Coord ld bc, $0307 call PrintNumber ; exp call .asm_12c86 ld de, wcfa6 FuncCoord 7,6 ld hl, Coord ld bc, $0307 call PrintNumber FuncCoord 9,0 ld hl, Coord call Func_12cc3 FuncCoord 9,1 ld hl, Coord call Func_12cc3 ld a, [W_MONHDEXNUM] ld [wd11e], a call GetMonName FuncCoord 9,1 ld hl, Coord call PlaceString ld a, $1 ld [$ffba], a call Delay3 call WaitForTextScrollButtonPress ; wait for button pop af ld [$ffd7], a ld hl, wd72c res 1, [hl] ld a, $77 ld [$ff24], a call GBPalWhiteOut jp ClearScreen .asm_12c86 ; This does some magic with lvl/exp? ld a, [wcfb9] ; Load level cp $64 jr z, .asm_12ca7 ; 0x12c8b $1a ; If 100 inc a ld d, a callab CalcExperience ld hl, wcfa8 ld a, [$ff98] sub [hl] ld [hld], a ld a, [$ff97] sbc [hl] ld [hld], a ld a, [$ff96] sbc [hl] ld [hld], a ret .asm_12ca7 ld hl, wcfa6 xor a ld [hli], a ld [hli], a ld [hl], a ret EXPPointsText: ; 12caf (4:6caf) db "EXP POINTS", $4e LevelUpText: ; 12cba (4:6cba) db "LEVEL UP@" Func_12cc3: ; 12cc3 (4:6cc3) ld bc, $a ld a, $7f jp FillMemory Func_12ccb: ; 12ccb (4:6ccb) ld [hli], a ld [hld], a add hl, de dec c jr nz, Func_12ccb ret