mirror of
https://github.com/thornAvery/kep-hack.git
synced 2025-09-17 02:40:50 +12:00

Whoa, this one's been in the making for a while now. This one has been my attempt to fix as much as I could within a little over a month. Here's what I've got for you. - Fixed a bug in Silph Gauntlet where the trainers would not see you unless you spoke to them - Removed the unnecessary Gawarhed and Wugtrio static encounters. In what was once Gawarhed's place is a Rare Candy. - Implemented a working ferry system (huge thanks to Red++) that allows travelling to Faraway Island and Citrine City with the right tickets. Currently both maps use a copy of the SS Anne, which may be revised later. - Bittybat, Magnetite and Burgela have been removed to fix a Pokedex bug where entries wouldn't display correctly if the total number wasn't a multiple of 8. - Fixed a bug where fishing up a Wiglett and Wugtrio would play the trainer battle and Champion battle themes respectively - Restructured the Pokedex a little. Don't worry, Lickitung's still number 108! - All references to betamon in the disassembly have had their names updated to match the new Ogasawara ones - Removed Blastyke as a Game Corner prize, replacing it with Squeamata. - Garnet Cavern is now properly listed as a dungeon map - Fixed an issue where trying to leave Bill's House after entering the garden would put you back in the garden - Moved Silph Gauntlet's Beauty down 1 floor to make the number of trainers on each floor more consistent - Finished Gauntlet 6F except for the trainer text (PvK please help) - Gavillain's stats updated to match KEP 1.4 on the Showdown server. It's now a Dragon/Electric type with less Ice coverage. - Fixed Clefable's and Wigglytuff's starting movesets from an earlier commit - Fixed an ABSOLUTELY HORRIBLE, EGREGIOUSLY FRUSTRATING BUG that caused the Pokedex's seen counter to rarely update. This is what caused this commit to be delayed for so long. No joke. - New sprites, courtesy of Albatross, for Sylveon's back sprite, Alolan Marowak, Alolan Muk, Galarian Weezing and Magnezone! - Fixed a bug preventing the trade for Haunter from being accessed.
668 lines
13 KiB
NASM
668 lines
13 KiB
NASM
ShowPokedexMenu:
|
||
call GBPalWhiteOut
|
||
call ClearScreen
|
||
call UpdateSprites
|
||
ld a, [wListScrollOffset]
|
||
push af
|
||
xor a
|
||
ld [wCurrentMenuItem], a
|
||
ld [wListScrollOffset], a
|
||
ld [wLastMenuItem], a
|
||
inc a
|
||
ld [wd11e], a
|
||
ldh [hJoy7], a
|
||
.setUpGraphics
|
||
ld b, SET_PAL_GENERIC
|
||
call RunPaletteCommand
|
||
callfar LoadPokedexTilePatterns
|
||
.doPokemonListMenu
|
||
ld hl, wTopMenuItemY
|
||
ld a, 3
|
||
ld [hli], a ; top menu item Y
|
||
xor a
|
||
ld [hli], a ; top menu item X
|
||
inc a
|
||
ld [wMenuWatchMovingOutOfBounds], a
|
||
inc hl
|
||
inc hl
|
||
ld a, 6
|
||
ld [hli], a ; max menu item ID
|
||
ld [hl], D_LEFT | D_RIGHT | B_BUTTON | A_BUTTON
|
||
call HandlePokedexListMenu
|
||
jr c, .goToSideMenu ; if the player chose a pokemon from the list
|
||
.exitPokedex
|
||
xor a
|
||
ld [wMenuWatchMovingOutOfBounds], a
|
||
ld [wCurrentMenuItem], a
|
||
ld [wLastMenuItem], a
|
||
ldh [hJoy7], a
|
||
ld [wWastedByteCD3A], a
|
||
ld [wOverrideSimulatedJoypadStatesMask], a
|
||
pop af
|
||
ld [wListScrollOffset], a
|
||
call GBPalWhiteOutWithDelay3
|
||
call RunDefaultPaletteCommand
|
||
jp ReloadMapData
|
||
.goToSideMenu
|
||
call HandlePokedexSideMenu
|
||
dec b
|
||
jr z, .exitPokedex ; if the player chose Quit
|
||
dec b
|
||
jr z, .doPokemonListMenu ; if pokemon not seen or player pressed B button
|
||
jp .setUpGraphics ; if pokemon data or area was shown
|
||
|
||
; handles the menu on the lower right in the pokedex screen
|
||
; OUTPUT:
|
||
; b = reason for exiting menu
|
||
; 00: showed pokemon data or area
|
||
; 01: the player chose Quit
|
||
; 02: the pokemon has not been seen yet or the player pressed the B button
|
||
HandlePokedexSideMenu:
|
||
call PlaceUnfilledArrowMenuCursor
|
||
ld a, [wCurrentMenuItem]
|
||
push af
|
||
ld b, a
|
||
ld a, [wLastMenuItem]
|
||
push af
|
||
ld a, [wListScrollOffset]
|
||
push af
|
||
add b
|
||
inc a
|
||
ld [wd11e], a
|
||
ld a, [wd11e]
|
||
push af
|
||
ld a, [wDexMaxSeenMon]
|
||
push af ; this doesn't need to be preserved
|
||
ld hl, wPokedexSeen
|
||
call IsPokemonBitSet
|
||
ld b, 2
|
||
jr z, .exitSideMenu
|
||
call PokedexToIndex
|
||
ld hl, wTopMenuItemY
|
||
ld a, 10
|
||
ld [hli], a ; top menu item Y
|
||
ld a, 15
|
||
ld [hli], a ; top menu item X
|
||
xor a
|
||
ld [hli], a ; current menu item ID
|
||
inc hl
|
||
ld a, 3
|
||
ld [hli], a ; max menu item ID
|
||
;ld a, A_BUTTON | B_BUTTON
|
||
ld [hli], a ; menu watched keys (A button and B button)
|
||
xor a
|
||
ld [hli], a ; old menu item ID
|
||
ld [wMenuWatchMovingOutOfBounds], a
|
||
.handleMenuInput
|
||
call HandleMenuInput
|
||
bit BIT_B_BUTTON, a
|
||
ld b, 2
|
||
jr nz, .buttonBPressed
|
||
ld a, [wCurrentMenuItem]
|
||
and a
|
||
jr z, .choseData
|
||
dec a
|
||
jr z, .choseCry
|
||
dec a
|
||
jr z, .choseArea
|
||
.choseQuit
|
||
ld b, 1
|
||
.exitSideMenu
|
||
pop af
|
||
ld [wDexMaxSeenMon], a
|
||
pop af
|
||
ld [wd11e], a
|
||
pop af
|
||
ld [wListScrollOffset], a
|
||
pop af
|
||
ld [wLastMenuItem], a
|
||
pop af
|
||
ld [wCurrentMenuItem], a
|
||
push bc
|
||
hlcoord 0, 3
|
||
ld de, 20
|
||
lb bc, " ", 13
|
||
call DrawTileLine ; cover up the menu cursor in the pokemon list
|
||
pop bc
|
||
ret
|
||
|
||
.buttonBPressed
|
||
push bc
|
||
hlcoord 15, 10
|
||
ld de, 20
|
||
lb bc, " ", 7
|
||
call DrawTileLine ; cover up the menu cursor in the side menu
|
||
pop bc
|
||
jr .exitSideMenu
|
||
|
||
.choseData
|
||
call ShowPokedexDataInternal
|
||
ld b, 0
|
||
jr .exitSideMenu
|
||
|
||
; play pokemon cry
|
||
.choseCry
|
||
ld a, [wd11e]
|
||
push af
|
||
call PlayCry
|
||
pop af
|
||
ld [wd11e], a
|
||
; call GetCryData
|
||
; call PlaySound
|
||
jr .handleMenuInput
|
||
|
||
.choseArea
|
||
predef LoadTownMap_Nest ; display pokemon areas
|
||
ld b, 0
|
||
jr .exitSideMenu
|
||
|
||
; handles the list of pokemon on the left of the pokedex screen
|
||
; sets carry flag if player presses A, unsets carry flag if player presses B
|
||
HandlePokedexListMenu:
|
||
xor a
|
||
ldh [hAutoBGTransferEnabled], a
|
||
; draw the horizontal line separating the seen and owned amounts from the menu
|
||
hlcoord 15, 8
|
||
ld a, "─"
|
||
ld [hli], a
|
||
ld [hli], a
|
||
ld [hli], a
|
||
ld [hli], a
|
||
ld [hli], a
|
||
hlcoord 14, 0
|
||
ld [hl], $71 ; vertical line tile
|
||
hlcoord 14, 1
|
||
call DrawPokedexVerticalLine
|
||
hlcoord 14, 9
|
||
call DrawPokedexVerticalLine
|
||
ld hl, wPokedexSeen
|
||
ld b, wPokedexSeenEnd - wPokedexSeen
|
||
call CountSetBits
|
||
ld de, wNumSetBits
|
||
hlcoord 16, 3
|
||
lb bc, 1, 3
|
||
call PrintNumber ; print number of seen pokemon
|
||
ld hl, wPokedexOwned
|
||
ld b, wPokedexOwnedEnd - wPokedexOwned
|
||
call CountSetBits
|
||
ld de, wNumSetBits
|
||
hlcoord 16, 6
|
||
lb bc, 1, 3
|
||
call PrintNumber ; print number of owned pokemon
|
||
hlcoord 16, 2
|
||
ld de, PokedexSeenText
|
||
call PlaceString
|
||
hlcoord 16, 5
|
||
ld de, PokedexOwnText
|
||
call PlaceString
|
||
hlcoord 1, 1
|
||
ld de, PokedexContentsText
|
||
call PlaceString
|
||
hlcoord 16, 10
|
||
ld de, PokedexMenuItemsText
|
||
call PlaceString
|
||
; find the highest pokedex number among the pokemon the player has seen
|
||
ld hl, wPokedexSeenEnd - 1
|
||
ld b, 249 ; This makes the last number in the dex match up with the last Pokemon in dex order. This makes it look a little odd when incomplete but also allows for Pokemon beyond 248 to display correctly. Setting it as 249 for now (so everything up to Melmetal gets displayed) but may update if we can bring Magnetite and Bittybat back.
|
||
.maxSeenPokemonLoop
|
||
ld a, [hld]
|
||
ld c, 8
|
||
.maxSeenPokemonInnerLoop
|
||
dec b
|
||
sla a
|
||
jr c, .storeMaxSeenPokemon
|
||
dec c
|
||
jr nz, .maxSeenPokemonInnerLoop
|
||
jr .maxSeenPokemonLoop
|
||
|
||
.storeMaxSeenPokemon
|
||
ld a, b
|
||
ld [wDexMaxSeenMon], a
|
||
.loop
|
||
xor a
|
||
ldh [hAutoBGTransferEnabled], a
|
||
hlcoord 4, 2
|
||
lb bc, 14, 10
|
||
call ClearScreenArea
|
||
hlcoord 1, 3
|
||
ld a, [wListScrollOffset]
|
||
ld [wd11e], a
|
||
ld d, 7
|
||
ld a, [wDexMaxSeenMon]
|
||
cp 7
|
||
jr nc, .printPokemonLoop
|
||
ld d, a
|
||
dec a
|
||
ld [wMaxMenuItem], a
|
||
; loop to print pokemon pokedex numbers and names
|
||
; if the player has owned the pokemon, it puts a pokeball beside the name
|
||
.printPokemonLoop
|
||
ld a, [wd11e]
|
||
inc a
|
||
ld [wd11e], a
|
||
push af
|
||
push de
|
||
push hl
|
||
ld de, -SCREEN_WIDTH
|
||
add hl, de
|
||
ld de, wd11e
|
||
lb bc, LEADING_ZEROES | 1, 3
|
||
call PrintNumber ; print the pokedex number
|
||
ld de, SCREEN_WIDTH
|
||
add hl, de
|
||
dec hl
|
||
push hl
|
||
ld hl, wPokedexOwned
|
||
call IsPokemonBitSet
|
||
pop hl
|
||
ld a, " "
|
||
jr z, .writeTile
|
||
ld a, $72 ; pokeball tile
|
||
.writeTile
|
||
ld [hl], a ; put a pokeball next to pokemon that the player has owned
|
||
push hl
|
||
ld hl, wPokedexSeen
|
||
call IsPokemonBitSet
|
||
jr nz, .getPokemonName ; if the player has seen the pokemon
|
||
ld de, .dashedLine ; print a dashed line in place of the name if the player hasn't seen the pokemon
|
||
jr .skipGettingName
|
||
.dashedLine ; for unseen pokemon in the list
|
||
db "----------@"
|
||
.getPokemonName
|
||
call PokedexToIndex
|
||
call GetMonName
|
||
.skipGettingName
|
||
pop hl
|
||
inc hl
|
||
call PlaceString
|
||
pop hl
|
||
ld bc, 2 * SCREEN_WIDTH
|
||
add hl, bc
|
||
pop de
|
||
pop af
|
||
ld [wd11e], a
|
||
dec d
|
||
jr nz, .printPokemonLoop
|
||
ld a, 01
|
||
ldh [hAutoBGTransferEnabled], a
|
||
call Delay3
|
||
call GBPalNormal
|
||
call HandleMenuInput
|
||
bit BIT_B_BUTTON, a
|
||
jp nz, .buttonBPressed
|
||
.checkIfUpPressed
|
||
bit BIT_D_UP, a
|
||
jr z, .checkIfDownPressed
|
||
.upPressed ; scroll up one row
|
||
ld a, [wListScrollOffset]
|
||
and a
|
||
jp z, .loop
|
||
dec a
|
||
ld [wListScrollOffset], a
|
||
jp .loop
|
||
.checkIfDownPressed
|
||
bit BIT_D_DOWN, a
|
||
jr z, .checkIfRightPressed
|
||
.downPressed ; scroll down one row
|
||
ld a, [wDexMaxSeenMon]
|
||
cp 7
|
||
jp c, .loop ; can't if the list is shorter than 7
|
||
sub 7
|
||
ld b, a
|
||
ld a, [wListScrollOffset]
|
||
cp b
|
||
jp z, .loop
|
||
inc a
|
||
ld [wListScrollOffset], a
|
||
jp .loop
|
||
.checkIfRightPressed
|
||
bit BIT_D_RIGHT, a
|
||
jr z, .checkIfLeftPressed
|
||
.rightPressed ; scroll down 7 rows
|
||
ld a, [wDexMaxSeenMon]
|
||
cp 7
|
||
jp c, .loop ; can't if the list is shorter than 7
|
||
sub 6
|
||
ld b, a
|
||
ld a, [wListScrollOffset]
|
||
add 7
|
||
ld [wListScrollOffset], a
|
||
cp b
|
||
jp c, .loop
|
||
dec b
|
||
ld a, b
|
||
ld [wListScrollOffset], a
|
||
jp .loop
|
||
.checkIfLeftPressed ; scroll up 7 rows
|
||
bit BIT_D_LEFT, a
|
||
jr z, .buttonAPressed
|
||
.leftPressed
|
||
ld a, [wListScrollOffset]
|
||
sub 7
|
||
ld [wListScrollOffset], a
|
||
jp nc, .loop
|
||
xor a
|
||
ld [wListScrollOffset], a
|
||
jp .loop
|
||
.buttonAPressed
|
||
scf
|
||
ret
|
||
.buttonBPressed
|
||
and a
|
||
ret
|
||
|
||
DrawPokedexVerticalLine:
|
||
ld c, 9 ; height of line
|
||
ld de, SCREEN_WIDTH
|
||
ld a, $71 ; vertical line tile
|
||
.loop
|
||
ld [hl], a
|
||
add hl, de
|
||
xor 1 ; toggle between vertical line tile and box tile
|
||
dec c
|
||
jr nz, .loop
|
||
ret
|
||
|
||
PokedexSeenText:
|
||
db "SEEN@"
|
||
|
||
PokedexOwnText:
|
||
db "OWN@"
|
||
|
||
PokedexContentsText:
|
||
db "CONTENTS@"
|
||
|
||
PokedexMenuItemsText:
|
||
db "DATA"
|
||
next "CRY"
|
||
next "AREA"
|
||
next "QUIT@"
|
||
|
||
; tests if a pokemon's bit is set in the seen or owned pokemon bit fields
|
||
; INPUT:
|
||
; [wd11e] = pokedex number
|
||
; hl = address of bit field
|
||
IsPokemonBitSet:
|
||
ld a, [wd11e]
|
||
dec a
|
||
ld c, a
|
||
ld b, FLAG_TEST
|
||
predef FlagActionPredef
|
||
ld a, c
|
||
and a
|
||
ret
|
||
|
||
; function to display pokedex data from outside the pokedex
|
||
ShowPokedexData:
|
||
call GBPalWhiteOutWithDelay3
|
||
call ClearScreen
|
||
call UpdateSprites
|
||
callfar LoadPokedexTilePatterns ; load pokedex tiles
|
||
|
||
; function to display pokedex data from inside the pokedex
|
||
ShowPokedexDataInternal:
|
||
ld hl, wd72c
|
||
set 1, [hl]
|
||
ld a, $33 ; 3/7 volume
|
||
ldh [rNR50], a
|
||
call GBPalWhiteOut ; zero all palettes
|
||
call ClearScreen
|
||
ld a, [wd11e] ; pokemon ID
|
||
ld [wcf91], a
|
||
push af
|
||
ld b, SET_PAL_POKEDEX
|
||
call RunPaletteCommand
|
||
pop af
|
||
ld [wd11e], a
|
||
ldh a, [hTileAnimations]
|
||
push af
|
||
xor a
|
||
ldh [hTileAnimations], a
|
||
|
||
hlcoord 0, 0
|
||
ld de, 1
|
||
lb bc, $64, SCREEN_WIDTH
|
||
call DrawTileLine ; draw top border
|
||
|
||
hlcoord 0, 17
|
||
ld b, $6f
|
||
call DrawTileLine ; draw bottom border
|
||
|
||
hlcoord 0, 1
|
||
ld de, 20
|
||
lb bc, $66, $10
|
||
call DrawTileLine ; draw left border
|
||
|
||
hlcoord 19, 1
|
||
ld b, $67
|
||
call DrawTileLine ; draw right border
|
||
|
||
ld a, $63 ; upper left corner tile
|
||
ldcoord_a 0, 0
|
||
ld a, $65 ; upper right corner tile
|
||
ldcoord_a 19, 0
|
||
ld a, $6c ; lower left corner tile
|
||
ldcoord_a 0, 17
|
||
ld a, $6e ; lower right corner tile
|
||
ldcoord_a 19, 17
|
||
|
||
hlcoord 0, 9
|
||
ld de, PokedexDataDividerLine
|
||
call PlaceString ; draw horizontal divider line
|
||
|
||
hlcoord 9, 6
|
||
ld de, HeightWeightText
|
||
call PlaceString
|
||
|
||
call GetMonName
|
||
hlcoord 9, 2
|
||
call PlaceString
|
||
|
||
ld hl, PokedexEntryPointers
|
||
ld a, [wd11e]
|
||
dec a
|
||
ld e, a
|
||
ld d, 0
|
||
add hl, de
|
||
add hl, de
|
||
ld a, [hli]
|
||
ld e, a
|
||
ld d, [hl] ; de = address of pokedex entry
|
||
|
||
hlcoord 9, 4
|
||
call PlaceString ; print species name
|
||
|
||
ld h, b
|
||
ld l, c
|
||
push de
|
||
ld a, [wd11e]
|
||
push af
|
||
call IndexToPokedex
|
||
|
||
hlcoord 2, 8
|
||
ld a, "№"
|
||
ld [hli], a
|
||
ld a, "<DOT>"
|
||
ld [hli], a
|
||
ld de, wd11e
|
||
lb bc, LEADING_ZEROES | 1, 3
|
||
call PrintNumber ; print pokedex number
|
||
|
||
ld hl, wPokedexOwned
|
||
call IsPokemonBitSet
|
||
pop af
|
||
ld [wd11e], a
|
||
ld a, [wcf91]
|
||
ld [wd0b5], a
|
||
pop de
|
||
|
||
push af
|
||
push bc
|
||
push de
|
||
push hl
|
||
|
||
call Delay3
|
||
call GBPalNormal
|
||
call GetMonHeader ; load pokemon picture location
|
||
hlcoord 1, 1
|
||
call LoadFlippedFrontSpriteByMonIndex ; draw pokemon picture
|
||
ld a, [wcf91]
|
||
call PlayCry ; play pokemon cry
|
||
|
||
pop hl
|
||
pop de
|
||
pop bc
|
||
pop af
|
||
|
||
ld a, c
|
||
and a
|
||
jp z, .waitForButtonPress ; if the pokemon has not been owned, don't print the height, weight, or description
|
||
inc de ; de = address of feet (height)
|
||
ld a, [de] ; reads feet, but a is overwritten without being used
|
||
hlcoord 12, 6
|
||
lb bc, 1, 2
|
||
call PrintNumber ; print feet (height)
|
||
ld a, "′"
|
||
ld [hl], a
|
||
inc de
|
||
inc de ; de = address of inches (height)
|
||
hlcoord 15, 6
|
||
lb bc, LEADING_ZEROES | 1, 2
|
||
call PrintNumber ; print inches (height)
|
||
ld a, "″"
|
||
ld [hl], a
|
||
; now print the weight (note that weight is stored in tenths of pounds internally)
|
||
inc de
|
||
inc de
|
||
inc de ; de = address of upper byte of weight
|
||
push de
|
||
; put weight in big-endian order at hDexWeight
|
||
ld hl, hDexWeight
|
||
ld a, [hl] ; save existing value of [hDexWeight]
|
||
push af
|
||
ld a, [de] ; a = upper byte of weight
|
||
ld [hli], a ; store upper byte of weight in [hDexWeight]
|
||
ld a, [hl] ; save existing value of [hDexWeight + 1]
|
||
push af
|
||
dec de
|
||
ld a, [de] ; a = lower byte of weight
|
||
ld [hl], a ; store lower byte of weight in [hDexWeight + 1]
|
||
ld de, hDexWeight
|
||
hlcoord 11, 8
|
||
lb bc, 2, 5 ; 2 bytes, 5 digits
|
||
call PrintNumber ; print weight
|
||
hlcoord 14, 8
|
||
ldh a, [hDexWeight + 1]
|
||
sub 10
|
||
ldh a, [hDexWeight]
|
||
sbc 0
|
||
jr nc, .next
|
||
ld [hl], "0" ; if the weight is less than 10, put a 0 before the decimal point
|
||
.next
|
||
inc hl
|
||
ld a, [hli]
|
||
ld [hld], a ; make space for the decimal point by moving the last digit forward one tile
|
||
ld [hl], "<DOT>" ; decimal point tile
|
||
pop af
|
||
ldh [hDexWeight + 1], a ; restore original value of [hDexWeight + 1]
|
||
pop af
|
||
ldh [hDexWeight], a ; restore original value of [hDexWeight]
|
||
pop hl
|
||
inc hl ; hl = address of pokedex description text
|
||
bccoord 1, 11
|
||
ld a, %10
|
||
ldh [hClearLetterPrintingDelayFlags], a
|
||
call TextCommandProcessor ; print pokedex description text
|
||
xor a
|
||
ldh [hClearLetterPrintingDelayFlags], a
|
||
.waitForButtonPress
|
||
call JoypadLowSensitivity
|
||
ldh a, [hJoy5]
|
||
and A_BUTTON | B_BUTTON
|
||
jr z, .waitForButtonPress
|
||
pop af
|
||
ldh [hTileAnimations], a
|
||
call GBPalWhiteOut
|
||
call ClearScreen
|
||
call RunDefaultPaletteCommand
|
||
call LoadTextBoxTilePatterns
|
||
call GBPalNormal
|
||
ld hl, wd72c
|
||
res 1, [hl]
|
||
ld a, $77 ; max volume
|
||
ldh [rNR50], a
|
||
ret
|
||
|
||
HeightWeightText:
|
||
db "HT ?′??″"
|
||
next "WT ???lb@"
|
||
|
||
; XXX does anything point to this?
|
||
PokeText:
|
||
db "#@"
|
||
|
||
; horizontal line that divides the pokedex text description from the rest of the data
|
||
PokedexDataDividerLine:
|
||
db $68, $69, $6B, $69, $6B, $69, $6B, $69, $6B, $6B
|
||
db $6B, $6B, $69, $6B, $69, $6B, $69, $6B, $69, $6A
|
||
db "@"
|
||
|
||
; draws a line of tiles
|
||
; INPUT:
|
||
; b = tile ID
|
||
; c = number of tile ID's to write
|
||
; de = amount to destination address after each tile (1 for horizontal, 20 for vertical)
|
||
; hl = destination address
|
||
DrawTileLine:
|
||
push bc
|
||
push de
|
||
.loop
|
||
ld [hl], b
|
||
add hl, de
|
||
dec c
|
||
jr nz, .loop
|
||
pop de
|
||
pop bc
|
||
ret
|
||
|
||
INCLUDE "data/pokemon/dex_entries.asm"
|
||
|
||
PokedexToIndex:
|
||
; converts the Pokédex number at wd11e to an index
|
||
push bc
|
||
push hl
|
||
ld a, [wd11e]
|
||
ld b, a
|
||
ld c, 0
|
||
ld hl, PokedexOrder
|
||
|
||
.loop ; go through the list until we find an entry with a matching dex number
|
||
inc c
|
||
ld a, [hli]
|
||
cp b
|
||
jr nz, .loop
|
||
|
||
ld a, c
|
||
ld [wd11e], a
|
||
pop hl
|
||
pop bc
|
||
ret
|
||
|
||
IndexToPokedex:
|
||
; converts the index number at wd11e to a Pokédex number
|
||
push bc
|
||
push hl
|
||
ld a, [wd11e]
|
||
dec a
|
||
ld hl, PokedexOrder
|
||
ld b, 0
|
||
ld c, a
|
||
add hl, bc
|
||
ld a, [hl]
|
||
ld [wd11e], a
|
||
pop hl
|
||
pop bc
|
||
ret
|
||
|
||
INCLUDE "data/pokemon/dex_order.asm"
|