pokecrystal/engine/events/prof_oaks_pc.asm

214 lines
3.6 KiB
NASM
Executable File

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 "@"