Make Custom Starter Dex Entries Show at Oak's Lab - pret/pokered GitHub Wiki

1. Introduction

When receiving your starter Pokemon at Oak's Lab, the game temporarily sets the "pokedex owned" bits for Bulbasaur, Charmander, Squirtle, and for some reason, Ivysaur to 1. This allows the game to then show the Pokedex Entry as if you have already caught the Pokemon.

If you try to change your starter to any other Pokemon, the game will run just fine, but during this scene, the Pokedex entry will show without the Dex Entry text and other information (in other words, as if it was just "seen").

2. Changing the StarterDex Function

Navigate to main.asm

Upon seeing this file, it may seem like you could just change the entries such as "DEX_BULBASAUR" to "DEX_LICKITUNG" for example, but this will not work beyond the first eight Pokemon (Bulbasaur to Wartortle).

The following change makes it so that the entire pokedex is temporarily set to owned instead.

; this function temporarily makes the starters (and Ivysaur) owned
; so that the full Pokedex information gets displayed in Oak's lab
StarterDex:
-    ld a, 1 << (DEX_BULBASAUR - 1) | 1 << (DEX_IVYSAUR - 1) | 1 << (DEX_CHARMANDER - 1) | 1 << (DEX_SQUIRTLE - 1)
-    ld [wPokedexOwned], a
+    push hl
+    ld hl, wPokedexOwned
+    ld b, $13 ;default 19 byte (hex $13) length of Pokedexs, set to your actual pokedex data length
+    ld a, $ff ; $ff functions to set pokedex the data to fully completed
+.again
+    ld [hli], a
+    dec b
+    jr nz, .again
    predef ShowPokedexData
-    xor a
-    ld [wPokedexOwned], a
+    ld hl, wPokedexOwned
+    ld b, $13 ;default 19 byte (hex $13) length of Pokedexs, set to your actual pokedex data length
+    ld a, $0 ; $0 functions to set pokedex the data back to blank
+.again2
+    ld [hli], a
+    dec b
+    jr nz, .again2
+    pop hl
    ret

Please note the value of b that is set to $13 (=19 bytes) twice in the code. This is dependent on the length of your own Pokedex data. For example if your pokedex has between 153 and 160 Pokemon, this value will be $14 instead. For each 8 pokemon added, this value will need to be increased,