ProfOaksPC: ; 0x265d3
	ld hl, OakPCText1
	call MenuTextBox
	call YesNoBox
	jr c, .shutdown
	call ProfOaksPCBoot ; player chose "yes"?
.shutdown
	ld hl, OakPCText4
	call PrintText
	call JoyWaitAorB
	call ExitMenu
	ret

ProfOaksPCBoot ; 0x265ee
	ld hl, OakPCText2
	call PrintText
	call Rate
	call PlaySFX ; sfx loaded by previous Rate function call
	call JoyWaitAorB
	call WaitSFX
	ret

ProfOaksPCRating: ; 0x26601
	call Rate
	push de
	ld de, MUSIC_NONE
	call PlayMusic
	pop de
	call PlaySFX
	call JoyWaitAorB
	call WaitSFX
	ret

Rate: ; 0x26616
; calculate Seen/Owned
	ld hl, PokedexSeen
	ld b, EndPokedexSeen - PokedexSeen
	call CountSetBits
	ld [wd002], a
	ld hl, PokedexCaught
	ld b, EndPokedexCaught - PokedexCaught
	call CountSetBits
	ld [wd003], a

; print appropriate rating
	call .UpdateRatingBuffers
	ld hl, OakPCText3
	call PrintText
	call JoyWaitAorB
	ld a, [wd003]
	ld hl, OakRatings
	call FindOakRating
	push de
	call PrintText
	pop de
	ret

.UpdateRatingBuffers: ; 0x26647
	ld hl, StringBuffer3
	ld de, wd002
	call .UpdateRatingBuffer
	ld hl, StringBuffer4
	ld de, wd003
	call .UpdateRatingBuffer
	ret

.UpdateRatingBuffer: ; 0x2665a
	push hl
	ld a, "@"
	ld bc, ITEM_NAME_LENGTH
	call ByteFill
	pop hl
	lb bc, PRINTNUM_RIGHTALIGN | 1, 3
	call PrintNum
	ret

FindOakRating: ; 0x2666b
; return sound effect in de
; return text pointer in hl
	nop
	ld c, a
.loop
	ld a, [hli]
	cp c
	jr nc, .match
rept 4
	inc hl
endr
	jr .loop

.match
	ld a, [hli]
	ld e, a
	ld a, [hli]
	ld d, a
	ld a, [hli]
	ld h, [hl]
	ld l, a
	ret

OakRatings: ; 0x2667f
; if you caught at most this many, play this sound, load this text
	dbww   9, SFX_DEX_FANFARE_LESS_THAN_20, OakRating01
	dbww  19, SFX_DEX_FANFARE_LESS_THAN_20, OakRating02
	dbww  34, SFX_DEX_FANFARE_20_49,        OakRating03
	dbww  49, SFX_DEX_FANFARE_20_49,        OakRating04
	dbww  64, SFX_DEX_FANFARE_50_79,        OakRating05
	dbww  79, SFX_DEX_FANFARE_50_79,        OakRating06
	dbww  94, SFX_DEX_FANFARE_80_109,       OakRating07
	dbww 109, SFX_DEX_FANFARE_80_109,       OakRating08
	dbww 124, SFX_CAUGHT_MON,               OakRating09
	dbww 139, SFX_CAUGHT_MON,               OakRating10
	dbww 154, SFX_DEX_FANFARE_140_169,      OakRating11
	dbww 169, SFX_DEX_FANFARE_140_169,      OakRating12
	dbww 184, SFX_DEX_FANFARE_170_199,      OakRating13
	dbww 199, SFX_DEX_FANFARE_170_199,      OakRating14
	dbww 214, SFX_DEX_FANFARE_200_229,      OakRating15
	dbww 229, SFX_DEX_FANFARE_200_229,      OakRating16
	dbww 239, SFX_DEX_FANFARE_230_PLUS,     OakRating17
	dbww 248, SFX_DEX_FANFARE_230_PLUS,     OakRating18
	dbww 255, SFX_DEX_FANFARE_230_PLUS,     OakRating19

OakPCText1: ; 0x266de
	text_jump _OakPCText1
	db "@"

OakPCText2: ; 0x266e3
	text_jump _OakPCText2
	db "@"

OakPCText3: ; 0x266e8
	text_jump _OakPCText3
	db "@"

OakRating01:
	text_jump _OakRating01
	db "@"

OakRating02:
	text_jump _OakRating02
	db "@"

OakRating03:
	text_jump _OakRating03
	db "@"

OakRating04:
	text_jump _OakRating04
	db "@"

OakRating05:
	text_jump _OakRating05
	db "@"

OakRating06:
	text_jump _OakRating06
	db "@"

OakRating07:
	text_jump _OakRating07
	db "@"

OakRating08:
	text_jump _OakRating08
	db "@"

OakRating09:
	text_jump _OakRating09
	db "@"

OakRating10:
	text_jump _OakRating10
	db "@"

OakRating11:
	text_jump _OakRating11
	db "@"

OakRating12:
	text_jump _OakRating12
	db "@"

OakRating13:
	text_jump _OakRating13
	db "@"

OakRating14:
	text_jump _OakRating14
	db "@"

OakRating15:
	text_jump _OakRating15
	db "@"

OakRating16:
	text_jump _OakRating16
	db "@"

OakRating17:
	text_jump _OakRating17
	db "@"

OakRating18:
	text_jump _OakRating18
	db "@"

OakRating19:
	text_jump _OakRating19
	db "@"

OakPCText4: ; 0x2674c
	text_jump _OakPCText4
	db "@"
