From 6b9b193301fe1f69f16b5e0cb3d3040a07f76052 Mon Sep 17 00:00:00 2001 From: Matt Calvert <64328076+XanderCalvert@users.noreply.github.com> Date: Fri, 16 Jun 2023 11:03:48 +0100 Subject: [PATCH 1/6] adding elite 4 encounter tables --- data/wild/e4_grass_water.asm | 265 +++++++++++++++++++++++++++++++++ engine/overworld/wild_mons.asm | 10 +- 2 files changed, 274 insertions(+), 1 deletion(-) create mode 100644 data/wild/e4_grass_water.asm diff --git a/data/wild/e4_grass_water.asm b/data/wild/e4_grass_water.asm new file mode 100644 index 0000000..b8d0276 --- /dev/null +++ b/data/wild/e4_grass_water.asm @@ -0,0 +1,265 @@ +E4BeatenWildDataPointers: + table_width 2, E4BeatenWildDataPointers + dw NothingWildMons ; PALLET_TOWN + dw NothingWildMons ; VIRIDIAN_CITY + dw NothingWildMons ; PEWTER_CITY + dw NothingWildMons ; CERULEAN_CITY + dw NothingWildMons ; LAVENDER_TOWN + dw NothingWildMons ; VERMILION_CITY + dw NothingWildMons ; CELADON_CITY + dw NothingWildMons ; FUCHSIA_CITY + dw NothingWildMons ; CINNABAR_ISLAND + dw NothingWildMons ; INDIGO_PLATEAU + dw NothingWildMons ; SAFFRON_CITY + dw NothingWildMons ; unused + dw Route1WildMonsE4 ; ROUTE_1 + dw Route2WildMons ; ROUTE_2 + dw Route3WildMons ; ROUTE_3 + dw Route4WildMons ; ROUTE_4 + dw Route5WildMons ; ROUTE_5 + dw Route6WildMons ; ROUTE_6 + dw Route7WildMons ; ROUTE_7 + dw Route8WildMons ; ROUTE_8 + dw Route9WildMons ; ROUTE_9 + dw Route10WildMons ; ROUTE_10 + dw Route11WildMons ; ROUTE_11 + dw Route12WildMons ; ROUTE_12 + dw Route13WildMons ; ROUTE_13 + dw Route14WildMons ; ROUTE_14 + dw Route15WildMons ; ROUTE_15 + dw Route16WildMons ; ROUTE_16 + dw Route17WildMons ; ROUTE_17 + dw Route18WildMons ; ROUTE_18 + dw SeaRoutesWildMons ; ROUTE_19 + dw SeaRoutesWildMons ; ROUTE_20 + dw Route21WildMons ; ROUTE_21 + dw Route22WildMons ; ROUTE_22 + dw Route23WildMons ; ROUTE_23 + dw Route24WildMons ; ROUTE_24 + dw Route25WildMons ; ROUTE_25 + dw NothingWildMons ; REDS_HOUSE_1F + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw ViridianForestWildMons ; ViridianForest + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw MtMoon1FWildMons + dw MtMoonB1FWildMons + dw MtMoonB2FWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw RockTunnel1FWildMons + dw PowerPlantWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw VictoryRoad1FWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw PokemonTower1FWildMons + dw PokemonTower2FWildMons + dw PokemonTower3FWildMons + dw PokemonTower4FWildMons + dw PokemonTower5FWildMons + dw PokemonTower6FWildMons + dw PokemonTower7FWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw SeafoamIslandsB1FWildMons + dw SeafoamIslandsB2FWildMons + dw SeafoamIslandsB3FWildMons + dw SeafoamIslandsB4FWildMons + dw NothingWildMons + dw NothingWildMons + dw PokemonMansion1FWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw SeafoamIslands1FWildMons + dw NothingWildMons + dw VictoryRoad2FWildMons + dw NothingWildMons + dw NothingWildMons + dw DiglettsCaveWildMons + dw VictoryRoad3FWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw PokemonMansion2FWildMons + dw PokemonMansion3FWildMons + dw PokemonMansionB1FWildMons + dw SafariZoneEastWildMons + dw SafariZoneNorthWildMons + dw SafariZoneWestWildMons + dw SafariZoneCenterWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw CeruleanCave2FWildMons + dw CeruleanCaveB1FWildMons + dw CeruleanCave1FWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw RockTunnelB1FWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + dw NothingWildMons + assert_table_lengthPD NUM_MAPS + dw -1 ; end + +; wild pokemon data is divided into two parts. +; first part: pokemon found in grass +; second part: pokemon found while surfing +; each part goes as follows: + ; if first byte == 0, then + ; no wild pokemon on this map + ; if first byte != 0, then + ; first byte is encounter rate + ; followed by 20 bytes: + ; level, species (ten times) + +INCLUDE "data/wild/maps/Route1e4.asm" diff --git a/engine/overworld/wild_mons.asm b/engine/overworld/wild_mons.asm index 14e6bc1..05fc9f8 100644 --- a/engine/overworld/wild_mons.asm +++ b/engine/overworld/wild_mons.asm @@ -2,6 +2,9 @@ LoadWildData:: ; Check if the player has obtained the diploma ; CheckEvent EVENT_DIPLOMA_OBTAINED ; jr nz, .DiplomaObtained + ; Check if the player has beaten the Elite 4 + ; CheckEvent HS_CERULEAN_CAVE_GUY + ; jr nz, .E4Beaten ; Check if the player has obtained the Pokedex CheckEvent EVENT_GOT_POKEDEX jr nz, .PokedexObtained @@ -14,7 +17,12 @@ LoadWildData:: ; ld hl, DiplomaWildDataPointers ; jr .LoadWildData -.PokedexObtained: +; .E4Beaten: +; ; If the Elite 4 have been beaten, load from the special pointer list +; ld hl, E4BeatenWildDataPointers +; jr .LoadWildData + +.PokedexObtained: ; mainly used for Debugging ; If the Pokedex has been obtained, load from the special Pokedex pointer list ld hl, PokedexWildDataPointers ; No need for a jr instruction here since the next label will be .LoadWildData From 08643c32ce584ebd10e43e9c4d4b1728fdc9f966 Mon Sep 17 00:00:00 2001 From: Matt Calvert <64328076+XanderCalvert@users.noreply.github.com> Date: Fri, 16 Jun 2023 11:43:14 +0100 Subject: [PATCH 2/6] Where it saves to thge pokedex --- engine/items/item_effects.asm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine/items/item_effects.asm b/engine/items/item_effects.asm index 407b0c2..66e6f54 100644 --- a/engine/items/item_effects.asm +++ b/engine/items/item_effects.asm @@ -518,7 +518,7 @@ ItemUseBall: ld hl, ItemUseBallText05 call PrintText -; Add the caught Pokémon to the Pokédex. +; Add the caught Pokémon to the Pokédex. ; // TODO adding pokemon to the pokedex, is it possible to see what pokemon is caught and set flags predef IndexToPokedex ld a, [wd11e] dec a From efa6ea40a06facc06587c66733549494e34c77d9 Mon Sep 17 00:00:00 2001 From: Matt Calvert <64328076+XanderCalvert@users.noreply.github.com> Date: Fri, 16 Jun 2023 12:24:02 +0100 Subject: [PATCH 3/6] e4 beaten encounter tables --- data/wild/e4_grass_water.asm | 8 +++--- data/wild/maps/ViridianForeste4.asm | 28 +++++++++++++++++++ engine/overworld/wild_mons.asm | 13 ++++----- macros/asserts.asm | 42 +++++++++++++++++++++++++++++ 4 files changed, 81 insertions(+), 10 deletions(-) create mode 100644 data/wild/maps/ViridianForeste4.asm diff --git a/data/wild/e4_grass_water.asm b/data/wild/e4_grass_water.asm index b8d0276..6e203b3 100644 --- a/data/wild/e4_grass_water.asm +++ b/data/wild/e4_grass_water.asm @@ -12,7 +12,7 @@ E4BeatenWildDataPointers: dw NothingWildMons ; INDIGO_PLATEAU dw NothingWildMons ; SAFFRON_CITY dw NothingWildMons ; unused - dw Route1WildMonsE4 ; ROUTE_1 + dw Route1WildMons ; ROUTE_1 dw Route2WildMons ; ROUTE_2 dw Route3WildMons ; ROUTE_3 dw Route4WildMons ; ROUTE_4 @@ -51,7 +51,7 @@ E4BeatenWildDataPointers: dw NothingWildMons dw NothingWildMons dw NothingWildMons - dw ViridianForestWildMons ; ViridianForest + dw ViridianForestWildMonsE4 ; ViridianForest dw NothingWildMons dw NothingWildMons dw NothingWildMons @@ -248,7 +248,7 @@ E4BeatenWildDataPointers: dw NothingWildMons dw NothingWildMons dw NothingWildMons - assert_table_lengthPD NUM_MAPS + assert_table_lengthE4 NUM_MAPS dw -1 ; end ; wild pokemon data is divided into two parts. @@ -262,4 +262,4 @@ E4BeatenWildDataPointers: ; followed by 20 bytes: ; level, species (ten times) -INCLUDE "data/wild/maps/Route1e4.asm" +INCLUDE "data/wild/maps/ViridianForeste4.asm" diff --git a/data/wild/maps/ViridianForeste4.asm b/data/wild/maps/ViridianForeste4.asm new file mode 100644 index 0000000..0b77f4d --- /dev/null +++ b/data/wild/maps/ViridianForeste4.asm @@ -0,0 +1,28 @@ +ViridianForestWildMonse4: + def_grass_wildmonse4 8 ; encounter rate +IF DEF(_RED) + db 4, WEEDLE + db 5, KAKUNA + db 10, BEEDRILL + db 5, WEEDLE + db 4, KAKUNA + db 6, KAKUNA + db 4, METAPOD + db 3, CATERPIE +ENDC +IF DEF(_BLUE) + db 4, CATERPIE + db 5, METAPOD + db 10, BUTTERFREE + db 5, CATERPIE + db 4, METAPOD + db 6, METAPOD + db 4, KAKUNA + db 3, WEEDLE +ENDC + db 5, PIKACHU + db 5, BULBASAUR + end_grass_wildmonse4 + + def_water_wildmonse4 0 ; encounter rate + end_water_wildmonse4 diff --git a/engine/overworld/wild_mons.asm b/engine/overworld/wild_mons.asm index 05fc9f8..45f50ce 100644 --- a/engine/overworld/wild_mons.asm +++ b/engine/overworld/wild_mons.asm @@ -3,8 +3,8 @@ LoadWildData:: ; CheckEvent EVENT_DIPLOMA_OBTAINED ; jr nz, .DiplomaObtained ; Check if the player has beaten the Elite 4 - ; CheckEvent HS_CERULEAN_CAVE_GUY - ; jr nz, .E4Beaten + CheckEvent HS_CERULEAN_CAVE_GUY + jr nz, .E4Beaten ; Check if the player has obtained the Pokedex CheckEvent EVENT_GOT_POKEDEX jr nz, .PokedexObtained @@ -17,10 +17,10 @@ LoadWildData:: ; ld hl, DiplomaWildDataPointers ; jr .LoadWildData -; .E4Beaten: -; ; If the Elite 4 have been beaten, load from the special pointer list -; ld hl, E4BeatenWildDataPointers -; jr .LoadWildData +.E4Beaten: + ; If the Elite 4 have been beaten, load from the special pointer list + ld hl, E4BeatenWildDataPointers + jr .LoadWildData .PokedexObtained: ; mainly used for Debugging ; If the Pokedex has been obtained, load from the special Pokedex pointer list @@ -60,6 +60,7 @@ LoadWildData:: INCLUDE "data/wild/grass_water.asm" INCLUDE "data/wild/pokedex_grass_water.asm" +INCLUDE "data/wild/e4_grass_water.asm" ; INCLUDE "data/wild/diploma_grass_water.asm" diff --git a/macros/asserts.asm b/macros/asserts.asm index 01efe64..efd1908 100644 --- a/macros/asserts.asm +++ b/macros/asserts.asm @@ -22,6 +22,12 @@ MACRO assert_table_lengthPD "{CURRENT_TABLE_START}: expected {d:x} entries, each {d:CURRENT_TABLE_WIDTH} bytes" ENDM +MACRO assert_table_lengthE4 + DEF x = \1 + ASSERT x * CURRENT_TABLE_WIDTH == @ - {CURRENT_TABLE_START}, \ + "{CURRENT_TABLE_START}: expected {d:x} entries, each {d:CURRENT_TABLE_WIDTH} bytes" +ENDM + MACRO list_start DEF list_index = 0 IF _NARG == 1 @@ -185,3 +191,39 @@ MACRO end_water_wildmonspokedex "def_water_wildmonspokedex {d:CURRENT_WATER_WILDMONS_RATE_POKEDEX}: expected {d:WILDDATA_LENGTH_POKEDEX} bytes" ENDC ENDM + +MACRO def_grass_wildmonse4 +;\1: encounter rate + DEF CURRENT_GRASS_WILDMONS_RATE_E4 = \1 + REDEF CURRENT_GRASS_WILDMONS_LABEL_E4 EQUS "._def_grass_wildmonse4_\1" +{CURRENT_GRASS_WILDMONS_LABEL_E4}: + db \1 +ENDM + +MACRO end_grass_wildmonse4 + IF CURRENT_GRASS_WILDMONS_RATE_E4 == 0 + ASSERT 1 == @ - {CURRENT_GRASS_WILDMONS_LABEL_E4}, \ + "def_grass_wildmonse4 {d:CURRENT_GRASS_WILDMONS_RATE_E4}: expected 1 byte" + ELSE + ASSERT WILDDATA_LENGTH_E4 == @ - {CURRENT_GRASS_WILDMONS_LABEL_E4}, \ + "def_grass_wildmonse4 {d:CURRENT_GRASS_WILDMONS_RATE_E4}: expected {d:WILDDATA_LENGTH_E4} bytes" + ENDC +ENDM + +MACRO def_water_wildmonse4 +;\1: encounter rate + DEF CURRENT_WATER_WILDMONS_RATE_E4 = \1 + REDEF CURRENT_WATER_WILDMONS_LABEL_E4 EQUS "._def_water_wildmonse4_\1" +{CURRENT_WATER_WILDMONS_LABEL_E4}: + db \1 +ENDM + +MACRO end_water_wildmonse4 + IF CURRENT_WATER_WILDMONS_RATE_E4 == 0 + ASSERT 1 == @ - {CURRENT_WATER_WILDMONS_LABEL_E4}, \ + "def_water_wildmonse4 {d:CURRENT_WATER_WILDMONS_RATE_E4}: expected 1 byte" + ELSE + ASSERT WILDDATA_LENGTH_E4 == @ - {CURRENT_WATER_WILDMONS_LABEL_E4}, \ + "def_water_wildmonse4 {d:CURRENT_WATER_WILDMONS_RATE_E4}: expected {d:WILDDATA_LENGTH_E4} bytes" + ENDC +ENDM From a41e685ba1aa57f24685b5aa10e1c8152d21d1fa Mon Sep 17 00:00:00 2001 From: Matt Calvert Date: Fri, 16 Jun 2023 18:16:35 +0100 Subject: [PATCH 4/6] Deciding on Mewtwo's speach --- text/CeruleanCaveB1F.asm | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/text/CeruleanCaveB1F.asm b/text/CeruleanCaveB1F.asm index 3758e12..e9323e9 100644 --- a/text/CeruleanCaveB1F.asm +++ b/text/CeruleanCaveB1F.asm @@ -6,6 +6,28 @@ _MewtwoBattleText:: ; I see now that the circumstances of one's birth are irrelevant; it is what you do with the gift of life that determines who you are. +; Humans may have created me... ...but they will never enslave me. This cannot be my destiny! + +; l was not born a Pokémon! l was created. + +; My creators have used and betrayed me. + +; So l stand alone. + +; Who am l? + +; What is my true reason for being? + +; l will find my own purpose. + +; And purge this planet of all who oppose me. + +; Human and Pokémon alike. + +; The world will heed my warning. + +; The reign of Mewtwo will soon begin. + ; BrunosRoomTrainerHeader0: ; trainer EVENT_BEAT_BRUNOS_ROOM_TRAINER_0, 0, BrunoBeforeBattleText, BrunoEndBattleText, BrunoAfterBattleText ; db -1 ; end @@ -22,3 +44,9 @@ _MewtwoBattleText:: ; line "Go face your next" ; cont "challenge!" ; done + +_MewtwoBattleText:: + para "I wasn't born a" + line "#MON, I was" + cont "created can" + cont "become stronger!" \ No newline at end of file From 6e3e00b9d065247f95c4543b0a8f941be46dc0fd Mon Sep 17 00:00:00 2001 From: Matt Calvert Date: Fri, 16 Jun 2023 22:40:54 +0100 Subject: [PATCH 5/6] error: home.asm(21) -> home/overworld.asm(2260) -> macros/farcall.asm::callfar(9): Requested BANK() of symbol "LoadWildData", which was not found error: home.asm(21) -> home/overworld.asm(2260) -> macros/farcall.asm::callfar(8): Unknown symbol "LoadWildData" error: main.asm(55) -> engine/overworld/wild_mons.asm(99) -> data/wild/e4_grass_water.asm(3): Unknown symbol "ViridianForestWildMonsE4" --- constants/pokemon_data_constants.asm | 1 + data/wild/e4_grass_water.asm | 262 +-------------------------- data/wild/grass_water.asm | 29 +++ data/wild/maps/ViridianForeste4.asm | 2 +- data/wild/pokedex_grass_water.asm | 262 +-------------------------- engine/overworld/wild_mons.asm | 105 +++++++---- text/CeruleanCaveB1F.asm | 10 +- 7 files changed, 113 insertions(+), 558 deletions(-) diff --git a/constants/pokemon_data_constants.asm b/constants/pokemon_data_constants.asm index e898a23..b2126e7 100644 --- a/constants/pokemon_data_constants.asm +++ b/constants/pokemon_data_constants.asm @@ -102,3 +102,4 @@ DEF NUM_GROWTH_RATES EQU const_value DEF NUM_WILDMONS EQU 10 DEF WILDDATA_LENGTH EQU 1 + NUM_WILDMONS * 2 DEF WILDDATA_LENGTH_POKEDEX EQU 1 + NUM_WILDMONS * 2 +DEF WILDDATA_LENGTH_E4 EQU 1 + NUM_WILDMONS * 2 diff --git a/data/wild/e4_grass_water.asm b/data/wild/e4_grass_water.asm index 6e203b3..b0ca6f7 100644 --- a/data/wild/e4_grass_water.asm +++ b/data/wild/e4_grass_water.asm @@ -1,265 +1,11 @@ E4BeatenWildDataPointers: table_width 2, E4BeatenWildDataPointers - dw NothingWildMons ; PALLET_TOWN - dw NothingWildMons ; VIRIDIAN_CITY - dw NothingWildMons ; PEWTER_CITY - dw NothingWildMons ; CERULEAN_CITY - dw NothingWildMons ; LAVENDER_TOWN - dw NothingWildMons ; VERMILION_CITY - dw NothingWildMons ; CELADON_CITY - dw NothingWildMons ; FUCHSIA_CITY - dw NothingWildMons ; CINNABAR_ISLAND - dw NothingWildMons ; INDIGO_PLATEAU - dw NothingWildMons ; SAFFRON_CITY - dw NothingWildMons ; unused - dw Route1WildMons ; ROUTE_1 - dw Route2WildMons ; ROUTE_2 - dw Route3WildMons ; ROUTE_3 - dw Route4WildMons ; ROUTE_4 - dw Route5WildMons ; ROUTE_5 - dw Route6WildMons ; ROUTE_6 - dw Route7WildMons ; ROUTE_7 - dw Route8WildMons ; ROUTE_8 - dw Route9WildMons ; ROUTE_9 - dw Route10WildMons ; ROUTE_10 - dw Route11WildMons ; ROUTE_11 - dw Route12WildMons ; ROUTE_12 - dw Route13WildMons ; ROUTE_13 - dw Route14WildMons ; ROUTE_14 - dw Route15WildMons ; ROUTE_15 - dw Route16WildMons ; ROUTE_16 - dw Route17WildMons ; ROUTE_17 - dw Route18WildMons ; ROUTE_18 - dw SeaRoutesWildMons ; ROUTE_19 - dw SeaRoutesWildMons ; ROUTE_20 - dw Route21WildMons ; ROUTE_21 - dw Route22WildMons ; ROUTE_22 - dw Route23WildMons ; ROUTE_23 - dw Route24WildMons ; ROUTE_24 - dw Route25WildMons ; ROUTE_25 - dw NothingWildMons ; REDS_HOUSE_1F - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons dw ViridianForestWildMonsE4 ; ViridianForest - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw MtMoon1FWildMons - dw MtMoonB1FWildMons - dw MtMoonB2FWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw RockTunnel1FWildMons - dw PowerPlantWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw VictoryRoad1FWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw PokemonTower1FWildMons - dw PokemonTower2FWildMons - dw PokemonTower3FWildMons - dw PokemonTower4FWildMons - dw PokemonTower5FWildMons - dw PokemonTower6FWildMons - dw PokemonTower7FWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw SeafoamIslandsB1FWildMons - dw SeafoamIslandsB2FWildMons - dw SeafoamIslandsB3FWildMons - dw SeafoamIslandsB4FWildMons - dw NothingWildMons - dw NothingWildMons - dw PokemonMansion1FWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw SeafoamIslands1FWildMons - dw NothingWildMons - dw VictoryRoad2FWildMons - dw NothingWildMons - dw NothingWildMons - dw DiglettsCaveWildMons - dw VictoryRoad3FWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw PokemonMansion2FWildMons - dw PokemonMansion3FWildMons - dw PokemonMansionB1FWildMons - dw SafariZoneEastWildMons - dw SafariZoneNorthWildMons - dw SafariZoneWestWildMons - dw SafariZoneCenterWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw CeruleanCave2FWildMons - dw CeruleanCaveB1FWildMons - dw CeruleanCave1FWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw RockTunnelB1FWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - assert_table_lengthE4 NUM_MAPS + assert_table_lengthPD 1 ; Set NUM_MAPS to 1 for one map dw -1 ; end -; wild pokemon data is divided into two parts. -; first part: pokemon found in grass -; second part: pokemon found while surfing -; each part goes as follows: - ; if first byte == 0, then - ; no wild pokemon on this map - ; if first byte != 0, then - ; first byte is encounter rate - ; followed by 20 bytes: - ; level, species (ten times) INCLUDE "data/wild/maps/ViridianForeste4.asm" + + +; macros/end_grass_wildmonse4 NUM_MAPS*2, "ViridianForeste4.asm" diff --git a/data/wild/grass_water.asm b/data/wild/grass_water.asm index a09fdce..dced370 100644 --- a/data/wild/grass_water.asm +++ b/data/wild/grass_water.asm @@ -321,3 +321,32 @@ INCLUDE "data/wild/maps/VictoryRoad2F.asm" INCLUDE "data/wild/maps/VictoryRoad3F.asm" INCLUDE "data/wild/maps/VictoryRoad1F.asm" INCLUDE "data/wild/maps/DiglettsCave.asm" + + +; WildDataPointers: +; table_width 2, WildDataPointers +; dw Route1WildMons ; ROUTE_1 +; dw Route2WildMons ; ROUTE_2 +; dw Route3WildMons ; ROUTE_3 +; assert_table_length NUM_MAPS +; dw -1 ; end + +; INCLUDE "data/wild/maps/Route1.asm" +; INCLUDE "data/wild/maps/Route2.asm" +; INCLUDE "data/wild/maps/Route3.asm" + +; E4BeatenWildDataPointers: +; table_width 2, E4BeatenWildDataPointers +; dw Route1WildMonsE4 ; ROUTE_1 +; assert_table_length NUM_MAPS +; dw -1 ; end + +; INCLUDE "data/wild/maps/Route1e4.asm" + +; PokedexWildDataPointers: +; table_width 2, PokedexWildDataPointers +; dw Route3WildMonsPD ; ROUTE_3 +; assert_table_length NUM_MAPS +; dw -1 ; end + +; INCLUDE "data/wild/maps/Route3pd.asm" \ No newline at end of file diff --git a/data/wild/maps/ViridianForeste4.asm b/data/wild/maps/ViridianForeste4.asm index 0b77f4d..2944807 100644 --- a/data/wild/maps/ViridianForeste4.asm +++ b/data/wild/maps/ViridianForeste4.asm @@ -1,4 +1,4 @@ -ViridianForestWildMonse4: +ViridianForestWildMonsE4: def_grass_wildmonse4 8 ; encounter rate IF DEF(_RED) db 4, WEEDLE diff --git a/data/wild/pokedex_grass_water.asm b/data/wild/pokedex_grass_water.asm index e73baf0..7e50fa1 100644 --- a/data/wild/pokedex_grass_water.asm +++ b/data/wild/pokedex_grass_water.asm @@ -1,265 +1,7 @@ PokedexWildDataPointers: table_width 2, PokedexWildDataPointers - dw NothingWildMons ; PALLET_TOWN - dw NothingWildMons ; VIRIDIAN_CITY - dw NothingWildMons ; PEWTER_CITY - dw NothingWildMons ; CERULEAN_CITY - dw NothingWildMons ; LAVENDER_TOWN - dw NothingWildMons ; VERMILION_CITY - dw NothingWildMons ; CELADON_CITY - dw NothingWildMons ; FUCHSIA_CITY - dw NothingWildMons ; CINNABAR_ISLAND - dw NothingWildMons ; INDIGO_PLATEAU - dw NothingWildMons ; SAFFRON_CITY - dw NothingWildMons ; unused - dw Route1WildMonsPD ; ROUTE_1 - dw Route2WildMons ; ROUTE_2 - dw Route3WildMons ; ROUTE_3 - dw Route4WildMons ; ROUTE_4 - dw Route5WildMons ; ROUTE_5 - dw Route6WildMons ; ROUTE_6 - dw Route7WildMons ; ROUTE_7 - dw Route8WildMons ; ROUTE_8 - dw Route9WildMons ; ROUTE_9 - dw Route10WildMons ; ROUTE_10 - dw Route11WildMons ; ROUTE_11 - dw Route12WildMons ; ROUTE_12 - dw Route13WildMons ; ROUTE_13 - dw Route14WildMons ; ROUTE_14 - dw Route15WildMons ; ROUTE_15 - dw Route16WildMons ; ROUTE_16 - dw Route17WildMons ; ROUTE_17 - dw Route18WildMons ; ROUTE_18 - dw SeaRoutesWildMons ; ROUTE_19 - dw SeaRoutesWildMons ; ROUTE_20 - dw Route21WildMons ; ROUTE_21 - dw Route22WildMons ; ROUTE_22 - dw Route23WildMons ; ROUTE_23 - dw Route24WildMons ; ROUTE_24 - dw Route25WildMons ; ROUTE_25 - dw NothingWildMons ; REDS_HOUSE_1F - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw ViridianForestWildMons ; ViridianForest - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw MtMoon1FWildMons - dw MtMoonB1FWildMons - dw MtMoonB2FWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw RockTunnel1FWildMons - dw PowerPlantWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw VictoryRoad1FWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw PokemonTower1FWildMons - dw PokemonTower2FWildMons - dw PokemonTower3FWildMons - dw PokemonTower4FWildMons - dw PokemonTower5FWildMons - dw PokemonTower6FWildMons - dw PokemonTower7FWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw SeafoamIslandsB1FWildMons - dw SeafoamIslandsB2FWildMons - dw SeafoamIslandsB3FWildMons - dw SeafoamIslandsB4FWildMons - dw NothingWildMons - dw NothingWildMons - dw PokemonMansion1FWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw SeafoamIslands1FWildMons - dw NothingWildMons - dw VictoryRoad2FWildMons - dw NothingWildMons - dw NothingWildMons - dw DiglettsCaveWildMons - dw VictoryRoad3FWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw PokemonMansion2FWildMons - dw PokemonMansion3FWildMons - dw PokemonMansionB1FWildMons - dw SafariZoneEastWildMons - dw SafariZoneNorthWildMons - dw SafariZoneWestWildMons - dw SafariZoneCenterWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw CeruleanCave2FWildMons - dw CeruleanCaveB1FWildMons - dw CeruleanCave1FWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw RockTunnelB1FWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - dw NothingWildMons - assert_table_lengthPD NUM_MAPS + dw Route1WildMonsPD ; ViridianForest + assert_table_lengthPD 1 ; Set NUM_MAPS to 1 for one map dw -1 ; end -; wild pokemon data is divided into two parts. -; first part: pokemon found in grass -; second part: pokemon found while surfing -; each part goes as follows: - ; if first byte == 0, then - ; no wild pokemon on this map - ; if first byte != 0, then - ; first byte is encounter rate - ; followed by 20 bytes: - ; level, species (ten times) - INCLUDE "data/wild/maps/Route1pokedex.asm" diff --git a/engine/overworld/wild_mons.asm b/engine/overworld/wild_mons.asm index 45f50ce..d5fab6e 100644 --- a/engine/overworld/wild_mons.asm +++ b/engine/overworld/wild_mons.asm @@ -10,53 +10,89 @@ LoadWildData:: jr nz, .PokedexObtained ; If neither diploma nor Pokedex have been obtained, load from the regular pointer list ld hl, WildDataPointers - jr .LoadWildData + jp .LoadWildData ; .DiplomaObtained: ; ; If the diploma has been obtained, load from the special pointer list ; ld hl, DiplomaWildDataPointers -; jr .LoadWildData +; jp .LoadWildData .E4Beaten: ; If the Elite 4 have been beaten, load from the special pointer list ld hl, E4BeatenWildDataPointers - jr .LoadWildData + jp .LoadWildData -.PokedexObtained: ; mainly used for Debugging +.PokedexObtained: ; If the Pokedex has been obtained, load from the special Pokedex pointer list ld hl, PokedexWildDataPointers - ; No need for a jr instruction here since the next label will be .LoadWildData .LoadWildData: - ld a, [wCurMap] ; Load the current map ID - - ; get wild data for current map - ld c, a ; Copy the current map ID to the c register - ld b, 0 ; Clear the b register - add hl, bc ; Offset the hl register by twice the current map ID (because each pointer is 2 bytes) - add hl, bc ; (we do this twice because there's no 'multiply by 2' instruction) - ld a, [hli] ; Load the first byte of the pointer at hl into a and increment hl - ld h, [hl] ; Load the second byte of the pointer into h - ld l, a ; Load the first byte of the pointer into l (hl now points to wild data for current map) - ld a, [hli] ; Load the encounter rate from the wild data into a - ld [wGrassRate], a ; Store the encounter rate - and a ; Perform a bitwise AND on a (checks if the encounter rate is 0) - jr z, .NoGrassData ; If the encounter rate is 0 (there's no grass data), skip to the water data - push hl ; Save the current address for later - ld de, wGrassMons ; Load the address of the grass encounter table - ld bc, $14 ; The size of the grass encounter table is 20 (0x14) - call CopyData ; Copy the grass encounter data to the table - pop hl ; Restore the address of the wild data - ld bc, $14 ; Offset hl by the size of the grass encounter table - add hl, bc ; Add the offset to hl -.NoGrassData - ld a, [hli] ; Load the water encounter rate from the wild data into a - ld [wWaterRate], a ; Store the encounter rate - and a ; Perform a bitwise AND on a (checks if the encounter rate is 0) - ret z ; If the encounter rate is 0 (there's no water data), return - ld de, wWaterMons ; Load the address of the water encounter table - ld bc, $14 ; The size of the water encounter table is 20 (0x14) - jp CopyData ; Copy the water encounter data to the table (and return) + ld a, [wCurMap] ; Load the current map ID + + ; Check if the current map ID is in the pointer table + call CheckRouteInTable + jp z, .NoWildData ; Jump to .NoWildData if route not found + + ; Get wild data for the current map + ld c, a ; Copy the current map ID to the c register + ld b, 0 ; Clear the b register + add hl, bc ; Offset the hl register by twice the current map ID (because each pointer is 2 bytes) + add hl, bc ; (we do this twice because there's no 'multiply by 2' instruction) + ld a, [hli] ; Load the first byte of the pointer at hl into a and increment hl + ld h, [hl] ; Load the second byte of the pointer into h + ld l, a ; Load the first byte of the pointer into l (hl now points to wild data for current map) + ld a, [hli] ; Load the encounter rate from the wild data into a + ld [wGrassRate], a ; Store the encounter rate + and a ; Perform a bitwise AND on a (checks if the encounter rate is 0) + jp z, .NoGrassData ; If the encounter rate is 0 (there's no grass data), skip to the water data + push hl ; Save the current address for later + ld de, wGrassMons ; Load the address of the grass encounter table + ld bc, $14 ; The size of the grass encounter table is 20 (0x14) + call CopyData ; Copy the grass encounter data to the table + pop hl ; Restore the address of the wild data + ld bc, $14 ; Offset hl by the size of the grass encounter table + add hl, bc ; Add the offset to hl + +.NoGrassData: + ld a, [hli] ; Load the water encounter rate from the wild data into a + ld [wWaterRate], a ; Store the encounter rate + and a ; Perform a bitwise AND on a (checks if the encounter rate is 0) + jp z, .NoWildData ; If the encounter rate is 0 (there's no water data), jump to .NoWildData + ld de, wWaterMons ; Load the address of the water encounter table + ld bc, $14 ; The size of the water encounter table is 20 (0x14) + +.CopyData: + ld a, [hli] ; Load the data from hl into a and increment hl + ld [de], a ; Store the data in de + inc de ; Increment de + dec bc ; Decrement bc + jp nz, .CopyData ; Repeat until bc reaches zero + +.NoWildData: + ret + +CheckRouteInTable: + ld hl, WildDataPointers ; Load the base address of the pointer table + ld a, [wCurMap] ; Load the current map ID into register b + + ; Iterate over the map IDs in the pointer table + ld de, FIRST_ROUTE_MAP ; Load the address of the first route map ID + ld c, 0 ; Initialize a counter variable + +.CheckNextMap: + ld a, [de] ; Load the map ID from memory + cp b ; Compare with the current map ID + ret z ; Return if equal (route found) + inc de ; Increment to the next map ID + inc c ; Increment the counter variable + + ; Check if all maps have been checked (reached the end of the table) + cp NUM_MAPS ; Compare with the total number of maps + jp nz, .CheckNextMap ; Jump to CheckNextMap if not all maps have been checked + + xor a ; Set A to zero (route not found) + ret ; Return + INCLUDE "data/wild/grass_water.asm" INCLUDE "data/wild/pokedex_grass_water.asm" @@ -104,3 +140,4 @@ INCLUDE "data/wild/e4_grass_water.asm" ; ld de, wWaterMons ; otherwise, load surfing data ; ld bc, $14 ; jp CopyData + diff --git a/text/CeruleanCaveB1F.asm b/text/CeruleanCaveB1F.asm index e9323e9..cf6e336 100644 --- a/text/CeruleanCaveB1F.asm +++ b/text/CeruleanCaveB1F.asm @@ -45,8 +45,8 @@ _MewtwoBattleText:: ; cont "challenge!" ; done -_MewtwoBattleText:: - para "I wasn't born a" - line "#MON, I was" - cont "created can" - cont "become stronger!" \ No newline at end of file +; _MewtwoBattleText:: +; para "I wasn't born a" +; line "#MON, I was" +; cont "created can" +; cont "become stronger!" \ No newline at end of file From 7742d0117dff9c3e553b57e3ff5619181898059b Mon Sep 17 00:00:00 2001 From: Matt Calvert Date: Fri, 16 Jun 2023 22:42:12 +0100 Subject: [PATCH 6/6] updating branch README as which the errors I am getting --- README.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/README.md b/README.md index c72a6be..069bd5a 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,29 @@ Implimented a check for the route encounter data to be changed depending on flag Also can add additional trainers in with this flag as well probably. Would just depend on memory size but need to find that out. +## Current issues on this branch + +``` +/mnt/d/codingpokemon/pokemon-red-definitive$ make + +data/wild/grass_water.asm: no newline at end of file +text/CeruleanCaveB1F.asm: no newline at end of file +data/wild/grass_water.asm: no newline at end of file +text/CeruleanCaveB1F.asm: no newline at end of file +data/wild/grass_water.asm: no newline at end of file +text/CeruleanCaveB1F.asm: no newline at end of file +data/wild/grass_water.asm: no newline at end of file +text/CeruleanCaveB1F.asm: no newline at end of file +data/wild/grass_water.asm: no newline at end of file +text/CeruleanCaveB1F.asm: no newline at end of file +rgblink -p 0x00 -d -m pokered.map -n pokered.sym -l layout.link -o pokered.gbc audio_red.o home_red.o main_red.o maps_red.o ram_red.o text_red.o gfx/pics_red.o gfx/sprites_red.o gfx/tilesets_red.o +error: home.asm(21) -> home/overworld.asm(2260) -> macros/farcall.asm::callfar(9): Requested BANK() of symbol "LoadWildData", which was not found +error: home.asm(21) -> home/overworld.asm(2260) -> macros/farcall.asm::callfar(8): Unknown symbol "LoadWildData" +error: main.asm(55) -> engine/overworld/wild_mons.asm(99) -> data/wild/e4_grass_water.asm(3): Unknown symbol "ViridianForestWildMonsE4" +Linking failed with 3 errors +make: *** [Makefile:151: pokered.gbc] Error 1 +``` + ## Please support the original project this was forked from. This is a disassembly of Pokémon Red and Blue.