summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--constants/pokemon_data_constants.asm2
-rwxr-xr-xdata/text/common_1.asm4
-rw-r--r--data/wild/johto_grass.asm124
-rw-r--r--data/wild/johto_water.asm78
-rw-r--r--data/wild/kanto_grass.asm62
-rw-r--r--data/wild/kanto_water.asm50
-rw-r--r--data/wild/probabilities.asm18
-rw-r--r--data/wild/roammon_maps.asm33
-rw-r--r--data/wild/swarm_grass.asm8
-rw-r--r--data/wild/swarm_water.asm4
-rw-r--r--engine/overworld/wildmons.asm971
-rw-r--r--layout.link7
-rw-r--r--main.asm46
-rw-r--r--wram.asm12
14 files changed, 1221 insertions, 198 deletions
diff --git a/constants/pokemon_data_constants.asm b/constants/pokemon_data_constants.asm
index bff6e366..9edb9cab 100644
--- a/constants/pokemon_data_constants.asm
+++ b/constants/pokemon_data_constants.asm
@@ -102,6 +102,8 @@ NUM_WATERMON EQU 3
GRASS_WILDDATA_LENGTH EQU (NUM_GRASSMON * 2 + 1) * 3 + 2
WATER_WILDDATA_LENGTH EQU (NUM_WATERMON * 2 + 1) * 1 + 2
+NUM_ROAMMON_MAPS EQU 16 ; RoamMaps table size (see data/wild/roammon_maps.asm)
+
; treemon sets
; TreeMons indexes (see data/wild/treemons.asm)
const_def
diff --git a/data/text/common_1.asm b/data/text/common_1.asm
index fab936d0..169cc9a9 100755
--- a/data/text/common_1.asm
+++ b/data/text/common_1.asm
@@ -993,7 +993,7 @@ _ButNoSpaceText::
line "no space left…"
done
-UnknownText_0x1bd34b::
+_JustSawSomeRareMonText::
text "I just saw some"
line "rare @"
text_ram wStringBuffer1
@@ -1007,7 +1007,7 @@ UnknownText_0x1bd34b::
cont "#MON, OK?"
prompt
-UnknownText_0x1bd39e::
+_SavingRecordText::
text "SAVING RECORD…"
line "DON'T TURN OFF!"
done
diff --git a/data/wild/johto_grass.asm b/data/wild/johto_grass.asm
index f241dd5d..2567e9fc 100644
--- a/data/wild/johto_grass.asm
+++ b/data/wild/johto_grass.asm
@@ -1,6 +1,8 @@
; Johto Pokémon in grass
- map SPROUT_TOWER_2F
+JohtoGrassWildMons:
+
+ map_id SPROUT_TOWER_2F
db 2 percent, 2 percent, 2 percent ; encounter rates: morn/day/nite
; morn
db 3, RATTATA
@@ -27,7 +29,7 @@
db 5, RATTATA
db 5, RATTATA
- map SPROUT_TOWER_3F
+ map_id SPROUT_TOWER_3F
db 2 percent, 2 percent, 2 percent ; encounter rates: morn/day/nite
; morn
db 3, RATTATA
@@ -54,7 +56,7 @@
db 5, RATTATA
db 5, RATTATA
- map TIN_TOWER_2F
+ map_id TIN_TOWER_2F
db 2 percent, 2 percent, 2 percent ; encounter rates: morn/day/nite
; morn
db 20, RATTATA
@@ -81,7 +83,7 @@
db 24, RATTATA
db 24, RATTATA
- map TIN_TOWER_3F
+ map_id TIN_TOWER_3F
db 2 percent, 2 percent, 2 percent ; encounter rates: morn/day/nite
; morn
db 20, RATTATA
@@ -108,7 +110,7 @@
db 24, RATTATA
db 24, RATTATA
- map TIN_TOWER_4F
+ map_id TIN_TOWER_4F
db 2 percent, 2 percent, 2 percent ; encounter rates: morn/day/nite
; morn
db 20, RATTATA
@@ -135,7 +137,7 @@
db 24, RATTATA
db 24, RATTATA
- map TIN_TOWER_5F
+ map_id TIN_TOWER_5F
db 2 percent, 2 percent, 2 percent ; encounter rates: morn/day/nite
; morn
db 20, RATTATA
@@ -162,7 +164,7 @@
db 24, RATTATA
db 24, RATTATA
- map TIN_TOWER_6F
+ map_id TIN_TOWER_6F
db 2 percent, 2 percent, 2 percent ; encounter rates: morn/day/nite
; morn
db 20, RATTATA
@@ -189,7 +191,7 @@
db 24, RATTATA
db 24, RATTATA
- map TIN_TOWER_7F
+ map_id TIN_TOWER_7F
db 2 percent, 2 percent, 2 percent ; encounter rates: morn/day/nite
; morn
db 20, RATTATA
@@ -216,7 +218,7 @@
db 24, RATTATA
db 24, RATTATA
- map TIN_TOWER_8F
+ map_id TIN_TOWER_8F
db 2 percent, 2 percent, 2 percent ; encounter rates: morn/day/nite
; morn
db 20, RATTATA
@@ -243,7 +245,7 @@
db 24, RATTATA
db 24, RATTATA
- map TIN_TOWER_9F
+ map_id TIN_TOWER_9F
db 2 percent, 2 percent, 2 percent ; encounter rates: morn/day/nite
; morn
db 20, RATTATA
@@ -270,7 +272,7 @@
db 24, RATTATA
db 24, RATTATA
- map BURNED_TOWER_1F
+ map_id BURNED_TOWER_1F
db 4 percent, 4 percent, 4 percent ; encounter rates: morn/day/nite
; morn
db 13, RATTATA
@@ -297,7 +299,7 @@
db 15, RATICATE
db 15, RATICATE
- map BURNED_TOWER_B1F
+ map_id BURNED_TOWER_B1F
db 6 percent, 6 percent, 6 percent ; encounter rates: morn/day/nite
; morn
db 14, RATTATA
@@ -324,7 +326,7 @@
db 16, KOFFING
db 16, WEEZING
- map NATIONAL_PARK
+ map_id NATIONAL_PARK
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 12, NIDORAN_M
@@ -351,7 +353,7 @@
db 12, VENONAT
db 12, VENONAT
- map RUINS_OF_ALPH_OUTSIDE
+ map_id RUINS_OF_ALPH_OUTSIDE
db 4 percent, 4 percent, 4 percent ; encounter rates: morn/day/nite
; morn
db 20, NATU
@@ -378,7 +380,7 @@
db 22, QUAGSIRE
db 22, QUAGSIRE
- map RUINS_OF_ALPH_INNER_CHAMBER
+ map_id RUINS_OF_ALPH_INNER_CHAMBER
db 6 percent, 6 percent, 6 percent ; encounter rates: morn/day/nite
; morn
db 5, UNOWN
@@ -405,7 +407,7 @@
db 5, UNOWN
db 5, UNOWN
- map UNION_CAVE_1F
+ map_id UNION_CAVE_1F
db 6 percent, 6 percent, 6 percent ; encounter rates: morn/day/nite
; morn
db 6, GEODUDE
@@ -432,7 +434,7 @@
db 6, ONIX
db 6, ONIX
- map UNION_CAVE_B1F
+ map_id UNION_CAVE_B1F
db 6 percent, 6 percent, 6 percent ; encounter rates: morn/day/nite
; morn
db 8, GEODUDE
@@ -459,7 +461,7 @@
db 8, RATTATA
db 8, RATTATA
- map UNION_CAVE_B2F
+ map_id UNION_CAVE_B2F
db 4 percent, 4 percent, 4 percent ; encounter rates: morn/day/nite
; morn
db 22, ZUBAT
@@ -486,7 +488,7 @@
db 23, ONIX
db 23, ONIX
- map SLOWPOKE_WELL_B1F
+ map_id SLOWPOKE_WELL_B1F
db 2 percent, 2 percent, 2 percent ; encounter rates: morn/day/nite
; morn
db 5, ZUBAT
@@ -513,7 +515,7 @@
db 8, SLOWPOKE
db 8, SLOWPOKE
- map SLOWPOKE_WELL_B2F
+ map_id SLOWPOKE_WELL_B2F
db 2 percent, 2 percent, 2 percent ; encounter rates: morn/day/nite
; morn
db 21, ZUBAT
@@ -540,7 +542,7 @@
db 23, SLOWPOKE
db 23, SLOWPOKE
- map ILEX_FOREST
+ map_id ILEX_FOREST
db 4 percent, 4 percent, 4 percent ; encounter rates: morn/day/nite
; morn
db 5, CATERPIE
@@ -567,7 +569,7 @@
db 6, PARAS
db 6, PARAS
- map MOUNT_MORTAR_1F_OUTSIDE
+ map_id MOUNT_MORTAR_1F_OUTSIDE
db 6 percent, 6 percent, 6 percent ; encounter rates: morn/day/nite
; morn
db 14, RATTATA
@@ -594,7 +596,7 @@
db 16, RATICATE
db 16, RATICATE
- map MOUNT_MORTAR_1F_INSIDE
+ map_id MOUNT_MORTAR_1F_INSIDE
db 6 percent, 6 percent, 6 percent ; encounter rates: morn/day/nite
; morn
db 13, GEODUDE
@@ -621,7 +623,7 @@
db 15, GOLBAT
db 15, GOLBAT
- map MOUNT_MORTAR_2F_INSIDE
+ map_id MOUNT_MORTAR_2F_INSIDE
db 6 percent, 6 percent, 6 percent ; encounter rates: morn/day/nite
; morn
db 31, GRAVELER
@@ -648,7 +650,7 @@
db 32, GOLBAT
db 32, GOLBAT
- map MOUNT_MORTAR_B1F
+ map_id MOUNT_MORTAR_B1F
db 6 percent, 6 percent, 6 percent ; encounter rates: morn/day/nite
; morn
db 15, ZUBAT
@@ -675,7 +677,7 @@
db 18, RATICATE
db 18, RATICATE
- map ICE_PATH_1F
+ map_id ICE_PATH_1F
db 2 percent, 2 percent, 2 percent ; encounter rates: morn/day/nite
; morn
db 21, SWINUB
@@ -702,7 +704,7 @@
db 22, GOLBAT
db 22, GOLBAT
- map ICE_PATH_B1F
+ map_id ICE_PATH_B1F
db 2 percent, 2 percent, 2 percent ; encounter rates: morn/day/nite
; morn
db 22, SWINUB
@@ -729,7 +731,7 @@
db 23, GOLBAT
db 22, SNEASEL
- map ICE_PATH_B2F_MAHOGANY_SIDE
+ map_id ICE_PATH_B2F_MAHOGANY_SIDE
db 2 percent, 2 percent, 2 percent ; encounter rates: morn/day/nite
; morn
db 23, SWINUB
@@ -756,7 +758,7 @@
db 22, SNEASEL
db 24, SNEASEL
- map ICE_PATH_B2F_BLACKTHORN_SIDE
+ map_id ICE_PATH_B2F_BLACKTHORN_SIDE
db 2 percent, 2 percent, 2 percent ; encounter rates: morn/day/nite
; morn
db 23, SWINUB
@@ -783,7 +785,7 @@
db 22, SNEASEL
db 24, SNEASEL
- map ICE_PATH_B3F
+ map_id ICE_PATH_B3F
db 2 percent, 2 percent, 2 percent ; encounter rates: morn/day/nite
; morn
db 24, SWINUB
@@ -810,7 +812,7 @@
db 24, SNEASEL
db 26, SNEASEL
- map WHIRL_ISLAND_NW
+ map_id WHIRL_ISLAND_NW
db 6 percent, 6 percent, 6 percent ; encounter rates: morn/day/nite
; morn
db 22, KRABBY
@@ -837,7 +839,7 @@
db 24, GOLBAT
db 24, GOLBAT
- map WHIRL_ISLAND_NE
+ map_id WHIRL_ISLAND_NE
db 6 percent, 6 percent, 6 percent ; encounter rates: morn/day/nite
; morn
db 22, KRABBY
@@ -864,7 +866,7 @@
db 24, GOLBAT
db 24, GOLBAT
- map WHIRL_ISLAND_SW
+ map_id WHIRL_ISLAND_SW
db 6 percent, 6 percent, 6 percent ; encounter rates: morn/day/nite
; morn
db 22, KRABBY
@@ -891,7 +893,7 @@
db 24, GOLBAT
db 24, GOLBAT
- map WHIRL_ISLAND_CAVE
+ map_id WHIRL_ISLAND_CAVE
db 6 percent, 6 percent, 6 percent ; encounter rates: morn/day/nite
; morn
db 22, KRABBY
@@ -918,7 +920,7 @@
db 24, GOLBAT
db 24, GOLBAT
- map WHIRL_ISLAND_SE
+ map_id WHIRL_ISLAND_SE
db 6 percent, 6 percent, 6 percent ; encounter rates: morn/day/nite
; morn
db 22, KRABBY
@@ -945,7 +947,7 @@
db 24, GOLBAT
db 24, GOLBAT
- map WHIRL_ISLAND_B1F
+ map_id WHIRL_ISLAND_B1F
db 6 percent, 6 percent, 6 percent ; encounter rates: morn/day/nite
; morn
db 23, KRABBY
@@ -972,7 +974,7 @@
db 25, GOLBAT
db 25, GOLBAT
- map WHIRL_ISLAND_B2F
+ map_id WHIRL_ISLAND_B2F
db 6 percent, 6 percent, 6 percent ; encounter rates: morn/day/nite
; morn
db 24, KRABBY
@@ -999,7 +1001,7 @@
db 26, GOLBAT
db 26, GOLBAT
- map WHIRL_ISLAND_LUGIA_CHAMBER
+ map_id WHIRL_ISLAND_LUGIA_CHAMBER
db 6 percent, 6 percent, 6 percent ; encounter rates: morn/day/nite
; morn
db 25, KRABBY
@@ -1026,7 +1028,7 @@
db 27, GOLBAT
db 27, GOLBAT
- map SILVER_CAVE_ROOM_1
+ map_id SILVER_CAVE_ROOM_1
db 6 percent, 6 percent, 6 percent ; encounter rates: morn/day/nite
; morn
db 43, GRAVELER
@@ -1053,7 +1055,7 @@
db 46, GOLBAT
db 46, GOLBAT
- map SILVER_CAVE_ROOM_2
+ map_id SILVER_CAVE_ROOM_2
db 6 percent, 6 percent, 6 percent ; encounter rates: morn/day/nite
; morn
db 48, GOLBAT
@@ -1080,7 +1082,7 @@
db 45, MISDREAVUS
db 45, MISDREAVUS
- map SILVER_CAVE_ROOM_3
+ map_id SILVER_CAVE_ROOM_3
db 6 percent, 6 percent, 6 percent ; encounter rates: morn/day/nite
; morn
db 51, GOLBAT
@@ -1107,7 +1109,7 @@
db 53, GOLBAT
db 53, GOLBAT
- map SILVER_CAVE_ITEM_ROOMS
+ map_id SILVER_CAVE_ITEM_ROOMS
db 6 percent, 6 percent, 6 percent ; encounter rates: morn/day/nite
; morn
db 48, GOLBAT
@@ -1134,7 +1136,7 @@
db 50, PARASECT
db 52, PARASECT
- map DARK_CAVE_VIOLET_ENTRANCE
+ map_id DARK_CAVE_VIOLET_ENTRANCE
db 4 percent, 4 percent, 4 percent ; encounter rates: morn/day/nite
; morn
db 3, GEODUDE
@@ -1161,7 +1163,7 @@
db 4, ZUBAT
db 4, DUNSPARCE
- map DARK_CAVE_BLACKTHORN_ENTRANCE
+ map_id DARK_CAVE_BLACKTHORN_ENTRANCE
db 4 percent, 4 percent, 4 percent ; encounter rates: morn/day/nite
; morn
db 23, GEODUDE
@@ -1188,7 +1190,7 @@
db 23, GOLBAT
db 23, GOLBAT
- map ROUTE_29
+ map_id ROUTE_29
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 2, PIDGEY
@@ -1215,7 +1217,7 @@
db 3, HOOTHOOT
db 3, HOOTHOOT
- map ROUTE_30
+ map_id ROUTE_30
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 3, LEDYBA
@@ -1242,7 +1244,7 @@
db 4, HOOTHOOT
db 4, HOOTHOOT
- map ROUTE_31
+ map_id ROUTE_31
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 4, LEDYBA
@@ -1269,7 +1271,7 @@
db 5, GASTLY
db 5, GASTLY
- map ROUTE_32
+ map_id ROUTE_32
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 4, EKANS
@@ -1296,7 +1298,7 @@
db 7, GASTLY
db 7, GASTLY
- map ROUTE_33
+ map_id ROUTE_33
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 6, RATTATA
@@ -1323,7 +1325,7 @@
db 7, RATTATA
db 7, RATTATA
- map ROUTE_34
+ map_id ROUTE_34
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 10, SNUBBULL
@@ -1350,7 +1352,7 @@
db 10, DITTO
db 10, DITTO
- map ROUTE_35
+ map_id ROUTE_35
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 12, SNUBBULL
@@ -1377,7 +1379,7 @@
db 10, DITTO
db 12, YANMA
- map ROUTE_36
+ map_id ROUTE_36
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 4, LEDYBA
@@ -1404,7 +1406,7 @@
db 5, GASTLY
db 5, GASTLY
- map ROUTE_37
+ map_id ROUTE_37
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 13, LEDYBA
@@ -1431,7 +1433,7 @@
db 15, ARIADOS
db 15, ARIADOS
- map ROUTE_38
+ map_id ROUTE_38
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 16, RATTATA
@@ -1458,7 +1460,7 @@
db 16, MEOWTH
db 16, MEOWTH
- map ROUTE_39
+ map_id ROUTE_39
db 2 percent, 2 percent, 2 percent ; encounter rates: morn/day/nite
; morn
db 16, RATTATA
@@ -1485,7 +1487,7 @@
db 18, MEOWTH
db 18, MEOWTH
- map ROUTE_42
+ map_id ROUTE_42
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 13, EKANS
@@ -1512,7 +1514,7 @@
db 16, GOLBAT
db 16, GOLBAT
- map ROUTE_43
+ map_id ROUTE_43
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 15, SENTRET
@@ -1539,7 +1541,7 @@
db 17, VENOMOTH
db 17, VENOMOTH
- map ROUTE_44
+ map_id ROUTE_44
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 23, TANGELA
@@ -1566,7 +1568,7 @@
db 26, POLIWHIRL
db 26, POLIWHIRL
- map ROUTE_45
+ map_id ROUTE_45
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 23, GEODUDE
@@ -1593,7 +1595,7 @@
db 27, GRAVELER
db 27, GRAVELER
- map ROUTE_46
+ map_id ROUTE_46
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 2, GEODUDE
@@ -1620,7 +1622,7 @@
db 2, RATTATA
db 2, RATTATA
- map SILVER_CAVE_OUTSIDE
+ map_id SILVER_CAVE_OUTSIDE
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 41, TANGELA
diff --git a/data/wild/johto_water.asm b/data/wild/johto_water.asm
index a4d957ef..83e33b2d 100644
--- a/data/wild/johto_water.asm
+++ b/data/wild/johto_water.asm
@@ -1,228 +1,230 @@
; Johto Pokémon in water
- map RUINS_OF_ALPH_OUTSIDE
+JohtoWaterWildMons:
+
+ map_id RUINS_OF_ALPH_OUTSIDE
db 2 percent ; encounter rate
db 15, WOOPER
db 20, QUAGSIRE
db 15, QUAGSIRE
- map UNION_CAVE_1F
+ map_id UNION_CAVE_1F
db 2 percent ; encounter rate
db 15, WOOPER
db 20, QUAGSIRE
db 15, QUAGSIRE
- map UNION_CAVE_B1F
+ map_id UNION_CAVE_B1F
db 2 percent ; encounter rate
db 15, WOOPER
db 20, QUAGSIRE
db 15, QUAGSIRE
- map UNION_CAVE_B2F
+ map_id UNION_CAVE_B2F
db 4 percent ; encounter rate
db 15, TENTACOOL
db 20, QUAGSIRE
db 20, TENTACRUEL
- map SLOWPOKE_WELL_B1F
+ map_id SLOWPOKE_WELL_B1F
db 2 percent ; encounter rate
db 15, SLOWPOKE
db 20, SLOWPOKE
db 10, SLOWPOKE
- map SLOWPOKE_WELL_B2F
+ map_id SLOWPOKE_WELL_B2F
db 2 percent ; encounter rate
db 15, SLOWPOKE
db 20, SLOWPOKE
db 20, SLOWBRO
- map ILEX_FOREST
+ map_id ILEX_FOREST
db 2 percent ; encounter rate
db 15, PSYDUCK
db 10, PSYDUCK
db 15, GOLDUCK
- map MOUNT_MORTAR_1F_OUTSIDE
+ map_id MOUNT_MORTAR_1F_OUTSIDE
db 4 percent ; encounter rate
db 15, GOLDEEN
db 20, MARILL
db 20, SEAKING
- map MOUNT_MORTAR_2F_INSIDE
+ map_id MOUNT_MORTAR_2F_INSIDE
db 2 percent ; encounter rate
db 20, GOLDEEN
db 25, MARILL
db 25, SEAKING
- map MOUNT_MORTAR_B1F
+ map_id MOUNT_MORTAR_B1F
db 2 percent ; encounter rate
db 15, GOLDEEN
db 20, MARILL
db 20, SEAKING
- map WHIRL_ISLAND_SW
+ map_id WHIRL_ISLAND_SW
db 4 percent ; encounter rate
db 20, TENTACOOL
db 15, HORSEA
db 20, TENTACRUEL
- map WHIRL_ISLAND_B2F
+ map_id WHIRL_ISLAND_B2F
db 4 percent ; encounter rate
db 15, HORSEA
db 20, HORSEA
db 20, TENTACRUEL
- map WHIRL_ISLAND_LUGIA_CHAMBER
+ map_id WHIRL_ISLAND_LUGIA_CHAMBER
db 4 percent ; encounter rate
db 20, HORSEA
db 20, TENTACRUEL
db 20, SEADRA
- map SILVER_CAVE_ROOM_2
+ map_id SILVER_CAVE_ROOM_2
db 2 percent ; encounter rate
db 35, SEAKING
db 35, GOLDUCK
db 35, GOLDEEN
- map DARK_CAVE_VIOLET_ENTRANCE
+ map_id DARK_CAVE_VIOLET_ENTRANCE
db 2 percent ; encounter rate
db 15, MAGIKARP
db 10, MAGIKARP
db 5, MAGIKARP
- map DARK_CAVE_BLACKTHORN_ENTRANCE
+ map_id DARK_CAVE_BLACKTHORN_ENTRANCE
db 2 percent ; encounter rate
db 15, MAGIKARP
db 10, MAGIKARP
db 5, MAGIKARP
- map DRAGONS_DEN_B1F
+ map_id DRAGONS_DEN_B1F
db 4 percent ; encounter rate
db 15, MAGIKARP
db 10, MAGIKARP
db 10, DRATINI
- map OLIVINE_PORT
+ map_id OLIVINE_PORT
db 2 percent ; encounter rate
db 20, TENTACOOL
db 15, TENTACOOL
db 20, TENTACRUEL
- map ROUTE_30
+ map_id ROUTE_30
db 2 percent ; encounter rate
db 20, POLIWAG
db 15, POLIWAG
db 20, POLIWHIRL
- map ROUTE_31
+ map_id ROUTE_31
db 2 percent ; encounter rate
db 20, POLIWAG
db 15, POLIWAG
db 20, POLIWHIRL
- map ROUTE_32
+ map_id ROUTE_32
db 6 percent ; encounter rate
db 15, TENTACOOL
db 20, QUAGSIRE
db 20, TENTACRUEL
- map ROUTE_34
+ map_id ROUTE_34
db 6 percent ; encounter rate
db 20, TENTACOOL
db 15, TENTACOOL
db 20, TENTACRUEL
- map ROUTE_35
+ map_id ROUTE_35
db 4 percent ; encounter rate
db 20, PSYDUCK
db 15, PSYDUCK
db 20, GOLDUCK
- map ROUTE_40
+ map_id ROUTE_40
db 6 percent ; encounter rate
db 20, TENTACOOL
db 15, TENTACOOL
db 20, TENTACRUEL
- map ROUTE_41
+ map_id ROUTE_41
db 6 percent ; encounter rate
db 20, TENTACOOL
db 20, TENTACRUEL
db 20, MANTINE
- map ROUTE_42
+ map_id ROUTE_42
db 4 percent ; encounter rate
db 20, GOLDEEN
db 15, GOLDEEN
db 20, SEAKING
- map ROUTE_43
+ map_id ROUTE_43
db 2 percent ; encounter rate
db 20, MAGIKARP
db 15, MAGIKARP
db 10, MAGIKARP
- map ROUTE_44
+ map_id ROUTE_44
db 2 percent ; encounter rate
db 25, POLIWAG
db 20, POLIWAG
db 25, POLIWHIRL
- map ROUTE_45
+ map_id ROUTE_45
db 2 percent ; encounter rate
db 20, MAGIKARP
db 15, MAGIKARP
db 5, MAGIKARP
- map NEW_BARK_TOWN
+ map_id NEW_BARK_TOWN
db 6 percent ; encounter rate
db 20, TENTACOOL
db 15, TENTACOOL
db 20, TENTACRUEL
- map CHERRYGROVE_CITY
+ map_id CHERRYGROVE_CITY
db 6 percent ; encounter rate
db 20, TENTACOOL
db 15, TENTACOOL
db 20, TENTACRUEL
- map VIOLET_CITY
+ map_id VIOLET_CITY
db 2 percent ; encounter rate
db 20, POLIWAG
db 15, POLIWAG
db 20, POLIWHIRL
- map CIANWOOD_CITY
+ map_id CIANWOOD_CITY
db 6 percent ; encounter rate
db 20, TENTACOOL
db 15, TENTACOOL
db 20, TENTACRUEL
- map OLIVINE_CITY
+ map_id OLIVINE_CITY
db 6 percent ; encounter rate
db 20, TENTACOOL
db 15, TENTACOOL
db 20, TENTACRUEL
- map ECRUTEAK_CITY
+ map_id ECRUTEAK_CITY
db 2 percent ; encounter rate
db 20, POLIWAG
db 15, POLIWAG
db 20, POLIWHIRL
- map LAKE_OF_RAGE
+ map_id LAKE_OF_RAGE
db 6 percent ; encounter rate
db 15, MAGIKARP
db 10, MAGIKARP
db 15, GYARADOS
- map BLACKTHORN_CITY
+ map_id BLACKTHORN_CITY
db 4 percent ; encounter rate
db 15, MAGIKARP
db 10, MAGIKARP
db 5, MAGIKARP
- map SILVER_CAVE_OUTSIDE
+ map_id SILVER_CAVE_OUTSIDE
db 2 percent ; encounter rate
db 35, POLIWHIRL
db 40, POLIWHIRL
diff --git a/data/wild/kanto_grass.asm b/data/wild/kanto_grass.asm
index e06627d1..ff172097 100644
--- a/data/wild/kanto_grass.asm
+++ b/data/wild/kanto_grass.asm
@@ -1,6 +1,8 @@
; Kanto Pokémon in grass
- map DIGLETTS_CAVE
+KantoGrassWildMons:
+
+ map_id DIGLETTS_CAVE
db 4 percent, 2 percent, 8 percent ; encounter rates: morn/day/nite
; morn
db 3, DIGLETT
@@ -27,7 +29,7 @@
db 32, DUGTRIO
db 32, DUGTRIO
- map MOUNT_MOON
+ map_id MOUNT_MOON
db 6 percent, 6 percent, 6 percent ; encounter rates: morn/day/nite
; morn
db 6, ZUBAT
@@ -54,7 +56,7 @@
db 12, CLEFAIRY
db 12, CLEFAIRY
- map ROCK_TUNNEL_1F
+ map_id ROCK_TUNNEL_1F
db 6 percent, 6 percent, 6 percent ; encounter rates: morn/day/nite
; morn
db 10, CUBONE
@@ -81,7 +83,7 @@
db 15, ZUBAT
db 15, ZUBAT
- map ROCK_TUNNEL_B1F
+ map_id ROCK_TUNNEL_B1F
db 6 percent, 6 percent, 6 percent ; encounter rates: morn/day/nite
; morn
db 12, CUBONE
@@ -108,7 +110,7 @@
db 15, GOLBAT
db 15, GOLBAT
- map VICTORY_ROAD
+ map_id VICTORY_ROAD
db 6 percent, 6 percent, 6 percent ; encounter rates: morn/day/nite
; morn
db 34, GRAVELER
@@ -135,7 +137,7 @@
db 40, GRAVELER
db 40, GRAVELER
- map TOHJO_FALLS
+ map_id TOHJO_FALLS
db 6 percent, 6 percent, 6 percent ; encounter rates: morn/day/nite
; morn
db 22, ZUBAT
@@ -162,7 +164,7 @@
db 23, SLOWPOKE
db 23, SLOWPOKE
- map ROUTE_1
+ map_id ROUTE_1
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 2, PIDGEY
@@ -189,7 +191,7 @@
db 4, HOOTHOOT
db 4, HOOTHOOT
- map ROUTE_2
+ map_id ROUTE_2
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 3, CATERPIE
@@ -216,7 +218,7 @@
db 4, NOCTOWL
db 4, NOCTOWL
- map ROUTE_3
+ map_id ROUTE_3
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 5, SPEAROW
@@ -243,7 +245,7 @@
db 6, CLEFAIRY
db 6, CLEFAIRY
- map ROUTE_4
+ map_id ROUTE_4
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 5, SPEAROW
@@ -270,7 +272,7 @@
db 6, CLEFAIRY
db 6, CLEFAIRY
- map ROUTE_5
+ map_id ROUTE_5
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 13, PIDGEY
@@ -297,7 +299,7 @@
db 14, ABRA
db 14, ABRA
- map ROUTE_6
+ map_id ROUTE_6
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 13, RATTATA
@@ -324,7 +326,7 @@
db 15, RATICATE
db 15, RATICATE
- map ROUTE_7
+ map_id ROUTE_7
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 17, RATTATA
@@ -351,7 +353,7 @@
db 16, ABRA
db 16, ABRA
- map ROUTE_8
+ map_id ROUTE_8
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 17, SNUBBULL
@@ -378,7 +380,7 @@
db 18, KADABRA
db 18, KADABRA
- map ROUTE_9
+ map_id ROUTE_9
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 15, RATTATA
@@ -405,7 +407,7 @@
db 18, RATICATE
db 18, RATICATE
- map ROUTE_10_NORTH
+ map_id ROUTE_10_NORTH
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 15, SPEAROW
@@ -432,7 +434,7 @@
db 16, ELECTABUZZ
db 16, ELECTABUZZ
- map ROUTE_11
+ map_id ROUTE_11
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 14, HOPPIP
@@ -459,7 +461,7 @@
db 16, HYPNO
db 16, HYPNO
- map ROUTE_13
+ map_id ROUTE_13
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 23, NIDORINO
@@ -486,7 +488,7 @@
db 25, QUAGSIRE
db 25, CHANSEY
- map ROUTE_14
+ map_id ROUTE_14
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 26, NIDORINO
@@ -513,7 +515,7 @@
db 28, QUAGSIRE
db 28, CHANSEY
- map ROUTE_15
+ map_id ROUTE_15
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 23, NIDORINO
@@ -540,7 +542,7 @@
db 25, QUAGSIRE
db 25, CHANSEY
- map ROUTE_16
+ map_id ROUTE_16
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 26, GRIMER
@@ -567,7 +569,7 @@
db 30, MUK
db 30, MUK
- map ROUTE_17
+ map_id ROUTE_17
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 30, FEAROW
@@ -594,7 +596,7 @@
db 33, MUK
db 33, MUK
- map ROUTE_18
+ map_id ROUTE_18
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 26, GRIMER
@@ -621,7 +623,7 @@
db 30, MUK
db 30, MUK
- map ROUTE_21
+ map_id ROUTE_21
db 6 percent, 6 percent, 6 percent ; encounter rates: morn/day/nite
; morn
db 30, TANGELA
@@ -648,7 +650,7 @@
db 28, TANGELA
db 28, TANGELA
- map ROUTE_22
+ map_id ROUTE_22
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 3, RATTATA
@@ -675,7 +677,7 @@
db 7, RATTATA
db 7, RATTATA
- map ROUTE_24
+ map_id ROUTE_24
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 8, CATERPIE
@@ -702,7 +704,7 @@
db 14, GLOOM
db 14, GLOOM
- map ROUTE_25
+ map_id ROUTE_25
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 10, CATERPIE
@@ -729,7 +731,7 @@
db 14, NOCTOWL
db 14, NOCTOWL
- map ROUTE_26
+ map_id ROUTE_26
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 28, DODUO
@@ -756,7 +758,7 @@
db 30, QUAGSIRE
db 30, QUAGSIRE
- map ROUTE_27
+ map_id ROUTE_27
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 28, DODUO
@@ -783,7 +785,7 @@
db 32, NOCTOWL
db 32, NOCTOWL
- map ROUTE_28
+ map_id ROUTE_28
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 39, TANGELA
diff --git a/data/wild/kanto_water.asm b/data/wild/kanto_water.asm
index 558d56a2..c9abda73 100644
--- a/data/wild/kanto_water.asm
+++ b/data/wild/kanto_water.asm
@@ -1,144 +1,146 @@
; Kanto Pokémon in water
- map TOHJO_FALLS
+KantoWaterWildMons:
+
+ map_id TOHJO_FALLS
db 4 percent ; encounter rate
db 20, GOLDEEN
db 20, SLOWPOKE
db 20, SEAKING
- map VERMILION_PORT
+ map_id VERMILION_PORT
db 2 percent ; encounter rate
db 35, TENTACOOL
db 30, TENTACOOL
db 35, TENTACRUEL
- map ROUTE_4
+ map_id ROUTE_4
db 4 percent ; encounter rate
db 10, GOLDEEN
db 5, GOLDEEN
db 10, SEAKING
- map ROUTE_6
+ map_id ROUTE_6
db 2 percent ; encounter rate
db 10, PSYDUCK
db 5, PSYDUCK
db 10, GOLDUCK
- map ROUTE_9
+ map_id ROUTE_9
db 4 percent ; encounter rate
db 15, GOLDEEN
db 10, GOLDEEN
db 15, SEAKING
- map ROUTE_10_NORTH
+ map_id ROUTE_10_NORTH
db 4 percent ; encounter rate
db 15, GOLDEEN
db 10, GOLDEEN
db 15, SEAKING
- map ROUTE_12
+ map_id ROUTE_12
db 6 percent ; encounter rate
db 25, TENTACOOL
db 25, QUAGSIRE
db 25, TENTACRUEL
- map ROUTE_13
+ map_id ROUTE_13
db 6 percent ; encounter rate
db 25, TENTACOOL
db 25, QUAGSIRE
db 25, TENTACRUEL
- map ROUTE_19
+ map_id ROUTE_19
db 6 percent ; encounter rate
db 35, TENTACOOL
db 30, TENTACOOL
db 35, TENTACRUEL
- map ROUTE_20
+ map_id ROUTE_20
db 6 percent ; encounter rate
db 35, TENTACOOL
db 30, TENTACOOL
db 35, TENTACRUEL
- map ROUTE_21
+ map_id ROUTE_21
db 6 percent ; encounter rate
db 35, TENTACOOL
db 30, TENTACOOL
db 35, TENTACRUEL
- map ROUTE_22
+ map_id ROUTE_22
db 2 percent ; encounter rate
db 10, POLIWAG
db 5, POLIWAG
db 10, POLIWHIRL
- map ROUTE_24
+ map_id ROUTE_24
db 4 percent ; encounter rate
db 10, GOLDEEN
db 5, GOLDEEN
db 10, SEAKING
- map ROUTE_25
+ map_id ROUTE_25
db 4 percent ; encounter rate
db 10, GOLDEEN
db 5, GOLDEEN
db 10, SEAKING
- map ROUTE_26
+ map_id ROUTE_26
db 6 percent ; encounter rate
db 30, TENTACOOL
db 25, TENTACOOL
db 30, TENTACRUEL
- map ROUTE_27
+ map_id ROUTE_27
db 6 percent ; encounter rate
db 20, TENTACOOL
db 15, TENTACOOL
db 20, TENTACRUEL
- map ROUTE_28
+ map_id ROUTE_28
db 2 percent ; encounter rate
db 40, POLIWAG
db 35, POLIWAG
db 40, POLIWHIRL
- map PALLET_TOWN
+ map_id PALLET_TOWN
db 6 percent ; encounter rate
db 35, TENTACOOL
db 30, TENTACOOL
db 35, TENTACRUEL
- map VIRIDIAN_CITY
+ map_id VIRIDIAN_CITY
db 2 percent ; encounter rate
db 10, POLIWAG
db 5, POLIWAG
db 10, POLIWHIRL
- map CERULEAN_CITY
+ map_id CERULEAN_CITY
db 4 percent ; encounter rate
db 10, GOLDEEN
db 5, GOLDEEN
db 10, SEAKING
- map VERMILION_CITY
+ map_id VERMILION_CITY
db 6 percent ; encounter rate
db 35, TENTACOOL
db 30, TENTACOOL
db 35, TENTACRUEL
- map CELADON_CITY
+ map_id CELADON_CITY
db 2 percent ; encounter rate
db 20, GRIMER
db 15, GRIMER
db 15, MUK
- map FUCHSIA_CITY
+ map_id FUCHSIA_CITY
db 2 percent ; encounter rate
db 20, MAGIKARP
db 15, MAGIKARP
db 10, MAGIKARP
- map CINNABAR_ISLAND
+ map_id CINNABAR_ISLAND
db 6 percent ; encounter rate
db 35, TENTACOOL
db 30, TENTACOOL
diff --git a/data/wild/probabilities.asm b/data/wild/probabilities.asm
new file mode 100644
index 00000000..bf3144bb
--- /dev/null
+++ b/data/wild/probabilities.asm
@@ -0,0 +1,18 @@
+mon_prob: MACRO
+; percent, index
+ db \1, \2 * 2
+ENDM
+
+GrassMonProbTable:
+ mon_prob 30, 0 ; 30% chance
+ mon_prob 60, 1 ; 30% chance
+ mon_prob 80, 2 ; 20% chance
+ mon_prob 90, 3 ; 10% chance
+ mon_prob 95, 4 ; 5% chance
+ mon_prob 99, 5 ; 4% chance
+ mon_prob 100, 6 ; 1% chance
+
+WaterMonProbTable:
+ mon_prob 60, 0 ; 60% chance
+ mon_prob 90, 1 ; 30% chance
+ mon_prob 100, 2 ; 10% chance
diff --git a/data/wild/roammon_maps.asm b/data/wild/roammon_maps.asm
new file mode 100644
index 00000000..628a2679
--- /dev/null
+++ b/data/wild/roammon_maps.asm
@@ -0,0 +1,33 @@
+; Maps that roaming monsters can be on, and possible maps they can jump to.
+; Notably missing are Route 40 and Route 41, which are water routes.
+
+roam_map: MACRO
+ map_id \1
+ db _NARG - 1
+rept _NARG - 1
+ map_id \2
+ shift
+endr
+ db 0
+ENDM
+
+RoamMaps:
+; there are NUM_ROAMMON_MAPS entries
+ ; start map, ...other maps
+ roam_map ROUTE_29, ROUTE_30, ROUTE_46
+ roam_map ROUTE_30, ROUTE_29, ROUTE_31
+ roam_map ROUTE_31, ROUTE_30, ROUTE_32, ROUTE_36
+ roam_map ROUTE_32, ROUTE_36, ROUTE_31, ROUTE_33
+ roam_map ROUTE_33, ROUTE_32, ROUTE_34
+ roam_map ROUTE_34, ROUTE_33, ROUTE_35
+ roam_map ROUTE_35, ROUTE_34, ROUTE_36
+ roam_map ROUTE_36, ROUTE_35, ROUTE_31, ROUTE_32, ROUTE_37
+ roam_map ROUTE_37, ROUTE_36, ROUTE_38, ROUTE_42
+ roam_map ROUTE_38, ROUTE_37, ROUTE_39, ROUTE_42
+ roam_map ROUTE_39, ROUTE_38
+ roam_map ROUTE_42, ROUTE_43, ROUTE_44, ROUTE_37, ROUTE_38
+ roam_map ROUTE_43, ROUTE_42, ROUTE_44
+ roam_map ROUTE_44, ROUTE_42, ROUTE_43, ROUTE_45
+ roam_map ROUTE_45, ROUTE_44, ROUTE_46
+ roam_map ROUTE_46, ROUTE_45, ROUTE_29
+ db -1 ; end
diff --git a/data/wild/swarm_grass.asm b/data/wild/swarm_grass.asm
index 61d0d853..dd7110e1 100644
--- a/data/wild/swarm_grass.asm
+++ b/data/wild/swarm_grass.asm
@@ -1,7 +1,9 @@
-; swarms in grass
+; Pokémon swarms in grass
+
+SwarmGrassWildMons:
; Dunsparce swarm
- map DARK_CAVE_VIOLET_ENTRANCE
+ map_id DARK_CAVE_VIOLET_ENTRANCE
db 4 percent, 4 percent, 4 percent ; encounter rates: morn/day/nite
; morn
db 3, GEODUDE
@@ -29,7 +31,7 @@
db 4, DUNSPARCE
; Yanma swarm
- map ROUTE_35
+ map_id ROUTE_35
db 10 percent, 10 percent, 10 percent ; encounter rates: morn/day/nite
; morn
db 12, NIDORAN_M
diff --git a/data/wild/swarm_water.asm b/data/wild/swarm_water.asm
index 67751b2b..ec105c00 100644
--- a/data/wild/swarm_water.asm
+++ b/data/wild/swarm_water.asm
@@ -1,4 +1,6 @@
-; swarms in water
+; Pokémon swarms in water
+
+SwarmWaterWildMons:
; No swarms encountered while surfing in Crystal
diff --git a/engine/overworld/wildmons.asm b/engine/overworld/wildmons.asm
new file mode 100644
index 00000000..4be921fd
--- /dev/null
+++ b/engine/overworld/wildmons.asm
@@ -0,0 +1,971 @@
+LoadWildMonData:
+ call _GrassWildmonLookup
+ jr c, .copy
+ ld hl, wMornEncounterRate
+ xor a
+ ld [hli], a
+ ld [hli], a
+ ld [hl], a
+ jr .done_copy
+
+.copy
+ inc hl
+ inc hl
+ ld de, wMornEncounterRate
+ ld bc, 3
+ call CopyBytes
+.done_copy
+ call _WaterWildmonLookup
+ ld a, 0
+ jr nc, .no_copy
+ inc hl
+ inc hl
+ ld a, [hl]
+.no_copy
+ ld [wWaterEncounterRate], a
+ ret
+
+FindNest:
+; Parameters:
+; e: 0 = Johto, 1 = Kanto
+; wNamedObjectIndexBuffer: species
+ hlcoord 0, 0
+ ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+ xor a
+ call ByteFill
+ ld a, e
+ and a
+ jr nz, .kanto
+ decoord 0, 0
+ ld hl, JohtoGrassWildMons
+ call .FindGrass
+ ld hl, JohtoWaterWildMons
+ call .FindWater
+ call .RoamMon1
+ call .RoamMon2
+ call .RoamMon3
+ ret
+
+.kanto
+ decoord 0, 0
+ ld hl, KantoGrassWildMons
+ call .FindGrass
+ ld hl, KantoWaterWildMons
+ jp .FindWater
+
+.FindGrass:
+ ld a, [hl]
+ cp -1
+ ret z
+ push hl
+ ld a, [hli]
+ ld b, a
+ ld a, [hli]
+ ld c, a
+ inc hl
+ inc hl
+ inc hl
+ ld a, NUM_GRASSMON * 3
+ call .SearchMapForMon
+ jr nc, .next_grass
+ ld [de], a
+ inc de
+
+.next_grass
+ pop hl
+ ld bc, GRASS_WILDDATA_LENGTH
+ add hl, bc
+ jr .FindGrass
+
+.FindWater:
+ ld a, [hl]
+ cp -1
+ ret z
+ push hl
+ ld a, [hli]
+ ld b, a
+ ld a, [hli]
+ ld c, a
+ inc hl
+ ld a, NUM_WATERMON
+ call .SearchMapForMon
+ jr nc, .next_water
+ ld [de], a
+ inc de
+
+.next_water
+ pop hl
+ ld bc, WATER_WILDDATA_LENGTH
+ add hl, bc
+ jr .FindWater
+
+.SearchMapForMon:
+ inc hl
+.ScanMapLoop:
+ push af
+ ld a, [wNamedObjectIndexBuffer]
+ cp [hl]
+ jr z, .found
+ inc hl
+ inc hl
+ pop af
+ dec a
+ jr nz, .ScanMapLoop
+ and a
+ ret
+
+.found
+ pop af
+ jp .AppendNest
+
+.AppendNest:
+ push de
+ call GetWorldMapLocation
+ ld c, a
+ hlcoord 0, 0
+ ld de, SCREEN_WIDTH * SCREEN_HEIGHT
+.AppendNestLoop:
+ ld a, [hli]
+ cp c
+ jr z, .found_nest
+ dec de
+ ld a, e
+ or d
+ jr nz, .AppendNestLoop
+ ld a, c
+ pop de
+ scf
+ ret
+
+.found_nest
+ pop de
+ and a
+ ret
+
+.RoamMon1:
+ ld a, [wRoamMon1Species]
+ ld b, a
+ ld a, [wNamedObjectIndexBuffer]
+ cp b
+ ret nz
+ ld a, [wRoamMon1MapGroup]
+ ld b, a
+ ld a, [wRoamMon1MapNumber]
+ ld c, a
+ call .AppendNest
+ ret nc
+ ld [de], a
+ inc de
+ ret
+
+.RoamMon2:
+ ld a, [wRoamMon2Species]
+ ld b, a
+ ld a, [wNamedObjectIndexBuffer]
+ cp b
+ ret nz
+ ld a, [wRoamMon2MapGroup]
+ ld b, a
+ ld a, [wRoamMon2MapNumber]
+ ld c, a
+ call .AppendNest
+ ret nc
+ ld [de], a
+ inc de
+ ret
+
+.RoamMon3:
+ ld a, [wRoamMon3Species]
+ ld b, a
+ ld a, [wNamedObjectIndexBuffer]
+ cp b
+ ret nz
+ ld a, [wRoamMon3MapGroup]
+ ld b, a
+ ld a, [wRoamMon3MapNumber]
+ ld c, a
+ call .AppendNest
+ ret nc
+ ld [de], a
+ inc de
+ ret
+
+TryWildEncounter::
+; Try to trigger a wild encounter.
+ call .EncounterRate
+ jr nc, .no_battle
+ call ChooseWildEncounter
+ jr nz, .no_battle
+ call CheckRepelEffect
+ jr nc, .no_battle
+ xor a
+ ret
+
+.no_battle
+ xor a ; BATTLETYPE_NORMAL
+ ld [wTempWildMonSpecies], a
+ ld [wBattleType], a
+ ld a, 1
+ and a
+ ret
+
+.EncounterRate:
+ call GetMapEncounterRate
+ call ApplyMusicEffectOnEncounterRate
+ call ApplyCleanseTagEffectOnEncounterRate
+ call Random
+ cp b
+ ret
+
+GetMapEncounterRate:
+ ld hl, wMornEncounterRate
+ call CheckOnWater
+ ld a, wWaterEncounterRate - wMornEncounterRate
+ jr z, .ok
+ ld a, [wTimeOfDay]
+.ok
+ ld c, a
+ ld b, 0
+ add hl, bc
+ ld b, [hl]
+ ret
+
+ApplyMusicEffectOnEncounterRate::
+; Pokemon March and Ruins of Alph signal double encounter rate.
+; Pokemon Lullaby halves encounter rate.
+ ld a, [wMapMusic]
+ cp MUSIC_POKEMON_MARCH
+ jr z, .double
+ cp MUSIC_RUINS_OF_ALPH_RADIO
+ jr z, .double
+ cp MUSIC_POKEMON_LULLABY
+ ret nz
+ srl b
+ ret
+
+.double
+ sla b
+ ret
+
+ApplyCleanseTagEffectOnEncounterRate::
+; Cleanse Tag halves encounter rate.
+ ld hl, wPartyMon1Item
+ ld de, PARTYMON_STRUCT_LENGTH
+ ld a, [wPartyCount]
+ ld c, a
+.loop
+ ld a, [hl]
+ cp CLEANSE_TAG
+ jr z, .cleansetag
+ add hl, de
+ dec c
+ jr nz, .loop
+ ret
+
+.cleansetag
+ srl b
+ ret
+
+ChooseWildEncounter:
+ call LoadWildMonDataPointer
+ jp nc, .nowildbattle
+ call CheckEncounterRoamMon
+ jp c, .startwildbattle
+
+ inc hl
+ inc hl
+ inc hl
+ call CheckOnWater
+ ld de, WaterMonProbTable
+ jr z, .watermon
+ inc hl
+ inc hl
+ ld a, [wTimeOfDay]
+ ld bc, NUM_GRASSMON * 2
+ call AddNTimes
+ ld de, GrassMonProbTable
+
+.watermon
+; hl contains the pointer to the wild mon data, let's save that to the stack
+ push hl
+.randomloop
+ call Random
+ cp 100
+ jr nc, .randomloop
+ inc a ; 1 <= a <= 100
+ ld b, a
+ ld h, d
+ ld l, e
+; This next loop chooses which mon to load up.
+.prob_bracket_loop
+ ld a, [hli]
+ cp b
+ jr nc, .got_it
+ inc hl
+ jr .prob_bracket_loop
+
+.got_it
+ ld c, [hl]
+ ld b, 0
+ pop hl
+ add hl, bc ; this selects our mon
+ ld a, [hli]
+ ld b, a
+; If the Pokemon is encountered by surfing, we need to give the levels some variety.
+ call CheckOnWater
+ jr nz, .ok
+; Check if we buff the wild mon, and by how much.
+ call Random
+ cp 35 percent
+ jr c, .ok
+ inc b
+ cp 65 percent
+ jr c, .ok
+ inc b
+ cp 85 percent
+ jr c, .ok
+ inc b
+ cp 95 percent
+ jr c, .ok
+ inc b
+; Store the level
+.ok
+ ld a, b
+ ld [wCurPartyLevel], a
+ ld b, [hl]
+ ; ld a, b
+ call ValidateTempWildMonSpecies
+ jr c, .nowildbattle
+
+ ld a, b ; This is in the wrong place.
+ cp UNOWN
+ jr nz, .done
+
+ ld a, [wUnlockedUnowns]
+ and a
+ jr z, .nowildbattle
+
+.done
+ jr .loadwildmon
+
+.nowildbattle
+ ld a, 1
+ and a
+ ret
+
+.loadwildmon
+ ld a, b
+ ld [wTempWildMonSpecies], a
+
+.startwildbattle
+ xor a
+ ret
+
+INCLUDE "data/wild/probabilities.asm"
+
+CheckRepelEffect::
+; If there is no active Repel, there's no need to be here.
+ ld a, [wRepelEffect]
+ and a
+ jr z, .encounter
+; Get the first Pokemon in your party that isn't fainted.
+ ld hl, wPartyMon1HP
+ ld bc, PARTYMON_STRUCT_LENGTH - 1
+.loop
+ ld a, [hli]
+ or [hl]
+ jr nz, .ok
+ add hl, bc
+ jr .loop
+
+.ok
+; to PartyMonLevel
+rept 4
+ dec hl
+endr
+
+ ld a, [wCurPartyLevel]
+ cp [hl]
+ jr nc, .encounter
+ and a
+ ret
+
+.encounter
+ scf
+ ret
+
+LoadWildMonDataPointer:
+ call CheckOnWater
+ jr z, _WaterWildmonLookup
+
+_GrassWildmonLookup:
+ ld hl, SwarmGrassWildMons
+ ld bc, GRASS_WILDDATA_LENGTH
+ call _SwarmWildmonCheck
+ ret c
+ ld hl, JohtoGrassWildMons
+ ld de, KantoGrassWildMons
+ call _JohtoWildmonCheck
+ ld bc, GRASS_WILDDATA_LENGTH
+ jr _NormalWildmonOK
+
+_WaterWildmonLookup:
+ ld hl, SwarmWaterWildMons
+ ld bc, WATER_WILDDATA_LENGTH
+ call _SwarmWildmonCheck
+ ret c
+ ld hl, JohtoWaterWildMons
+ ld de, KantoWaterWildMons
+ call _JohtoWildmonCheck
+ ld bc, WATER_WILDDATA_LENGTH
+ jr _NormalWildmonOK
+
+_JohtoWildmonCheck:
+ call IsInJohto
+ and a
+ ret z
+ ld h, d
+ ld l, e
+ ret
+
+_SwarmWildmonCheck:
+ call CopyCurrMapDE
+ ld a, [wDunsparceMapGroup]
+ cp d
+ jr nz, _NoSwarmWildmon
+ ld a, [wDunsparceMapNumber]
+ cp e
+ jr nz, _NoSwarmWildmon
+ call LookUpWildmonsForMapDE
+ jr nc, _NoSwarmWildmon
+ scf
+ ret
+
+_NoSwarmWildmon:
+ and a
+ ret
+
+_NormalWildmonOK:
+ call CopyCurrMapDE
+ jr LookUpWildmonsForMapDE
+
+CopyCurrMapDE:
+ ld a, [wMapGroup]
+ ld d, a
+ ld a, [wMapNumber]
+ ld e, a
+ ret
+
+LookUpWildmonsForMapDE:
+.loop
+ push hl
+ ld a, [hl]
+ inc a
+ jr z, .nope
+ ld a, d
+ cp [hl]
+ jr nz, .next
+ inc hl
+ ld a, e
+ cp [hl]
+ jr z, .yup
+
+.next
+ pop hl
+ add hl, bc
+ jr .loop
+
+.nope
+ pop hl
+ and a
+ ret
+
+.yup
+ pop hl
+ scf
+ ret
+
+InitRoamMons:
+; initialize wRoamMon structs
+
+; species
+ ld a, RAIKOU
+ ld [wRoamMon1Species], a
+ ld a, ENTEI
+ ld [wRoamMon2Species], a
+ ld a, SUICUNE
+ ld [wRoamMon3Species], a
+
+; level
+ ld a, 40
+ ld [wRoamMon1Level], a
+ ld [wRoamMon2Level], a
+ ld [wRoamMon3Level], a
+
+; raikou starting map
+ ld a, GROUP_ROUTE_42
+ ld [wRoamMon1MapGroup], a
+ ld a, MAP_ROUTE_42
+ ld [wRoamMon1MapNumber], a
+
+; entei starting map
+ ld a, GROUP_ROUTE_37
+ ld [wRoamMon2MapGroup], a
+ ld a, MAP_ROUTE_37
+ ld [wRoamMon2MapNumber], a
+
+; suicune starting map
+ ld a, GROUP_ROUTE_38
+ ld [wRoamMon3MapGroup], a
+ ld a, MAP_ROUTE_38
+ ld [wRoamMon3MapNumber], a
+
+; hp
+ xor a ; generate new stats
+ ld [wRoamMon1HP], a
+ ld [wRoamMon2HP], a
+ ld [wRoamMon3HP], a
+
+ ret
+
+CheckEncounterRoamMon:
+ push hl
+; Don't trigger an encounter if we're on water.
+ call CheckOnWater
+ jr z, .DontEncounterRoamMon
+; Load the current map group and number to de
+ call CopyCurrMapDE
+; Randomly select a beast.
+ call Random
+ cp 100 ; 25/64 chance
+ jr nc, .DontEncounterRoamMon
+ and %00000011 ; Of that, a 3/4 chance. Running total: 75/256, or around 29.3%.
+ jr z, .DontEncounterRoamMon
+ dec a ; 1/3 chance that it's Entei, 1/3 chance that it's Raikou, 1/3 chance that it's Suicune
+; Compare its current location with yours
+ ld hl, wRoamMon1MapGroup
+ ld c, a
+ ld b, 0
+ ld a, 7 ; length of the roam_struct
+ call AddNTimes
+ ld a, d
+ cp [hl]
+ jr nz, .DontEncounterRoamMon
+ inc hl
+ ld a, e
+ cp [hl]
+ jr nz, .DontEncounterRoamMon
+; We've decided to take on a beast, so stage its information for battle.
+ dec hl
+ dec hl
+ dec hl
+ ld a, [hli]
+ ld [wTempWildMonSpecies], a
+ ld a, [hl]
+ ld [wCurPartyLevel], a
+ ld a, BATTLETYPE_ROAMING
+ ld [wBattleType], a
+
+ pop hl
+ scf
+ ret
+
+.DontEncounterRoamMon:
+ pop hl
+ and a
+ ret
+
+UpdateRoamMons:
+ ld a, [wRoamMon1MapGroup]
+ cp GROUP_N_A
+ jr z, .SkipRaikou
+ ld b, a
+ ld a, [wRoamMon1MapNumber]
+ ld c, a
+ call .Update
+ ld a, b
+ ld [wRoamMon1MapGroup], a
+ ld a, c
+ ld [wRoamMon1MapNumber], a
+
+.SkipRaikou:
+ ld a, [wRoamMon2MapGroup]
+ cp GROUP_N_A
+ jr z, .SkipEntei
+ ld b, a
+ ld a, [wRoamMon2MapNumber]
+ ld c, a
+ call .Update
+ ld a, b
+ ld [wRoamMon2MapGroup], a
+ ld a, c
+ ld [wRoamMon2MapNumber], a
+
+.SkipEntei:
+ ld a, [wRoamMon3MapGroup]
+ cp GROUP_N_A
+ jr z, .Finished
+ ld b, a
+ ld a, [wRoamMon3MapNumber]
+ ld c, a
+ call .Update
+ ld a, b
+ ld [wRoamMon3MapGroup], a
+ ld a, c
+ ld [wRoamMon3MapNumber], a
+
+.Finished:
+ jp _BackUpMapIndices
+
+.Update:
+ ld hl, RoamMaps
+.loop
+; Are we at the end of the table?
+ ld a, [hl]
+ cp -1
+ ret z
+; Is this the correct entry?
+ ld a, b
+ cp [hl]
+ jr nz, .next
+ inc hl
+ ld a, c
+ cp [hl]
+ jr z, .yes
+; We don't have the correct entry yet, so let's continue. A 0 terminates each entry.
+.next
+ ld a, [hli]
+ and a
+ jr nz, .next
+ jr .loop
+
+; We have the correct entry now, so let's choose a random map from it.
+.yes
+ inc hl
+ ld d, h
+ ld e, l
+.update_loop
+ ld h, d
+ ld l, e
+; Choose which map to warp to.
+ call Random
+ and %00011111 ; 1/8n chance it moves to a completely random map, where n is the number of roaming connections from the current map.
+ jr z, JumpRoamMon
+ and %11
+ cp [hl]
+ jr nc, .update_loop ; invalid index, try again
+ inc hl
+ ld c, a
+ ld b, 0
+ add hl, bc
+ add hl, bc
+ ld a, [wRoamMons_LastMapGroup]
+ cp [hl]
+ jr nz, .done
+ inc hl
+ ld a, [wRoamMons_LastMapNumber]
+ cp [hl]
+ jr z, .update_loop
+ dec hl
+
+.done
+ ld a, [hli]
+ ld b, a
+ ld c, [hl]
+ ret
+
+JumpRoamMons:
+ ld a, [wRoamMon1MapGroup]
+ cp GROUP_N_A
+ jr z, .SkipRaikou
+ call JumpRoamMon
+ ld a, b
+ ld [wRoamMon1MapGroup], a
+ ld a, c
+ ld [wRoamMon1MapNumber], a
+
+.SkipRaikou:
+ ld a, [wRoamMon2MapGroup]
+ cp GROUP_N_A
+ jr z, .SkipEntei
+ call JumpRoamMon
+ ld a, b
+ ld [wRoamMon2MapGroup], a
+ ld a, c
+ ld [wRoamMon2MapNumber], a
+
+.SkipEntei:
+ ld a, [wRoamMon3MapGroup]
+ cp GROUP_N_A
+ jr z, .Finished
+ call JumpRoamMon
+ ld a, b
+ ld [wRoamMon3MapGroup], a
+ ld a, c
+ ld [wRoamMon3MapNumber], a
+
+.Finished:
+ jp _BackUpMapIndices
+
+JumpRoamMon:
+.loop
+ ld hl, RoamMaps
+.innerloop1 ; This loop happens to be unnecessary.
+ call Random ; Choose a random number.
+ maskbits NUM_ROAMMON_MAPS ; Mask the number to limit it between 0 and 15.
+ cp NUM_ROAMMON_MAPS ; If the number is not less than 16, try again.
+ jr nc, .innerloop1 ; I'm sure you can guess why this check is bogus.
+ inc a
+ ld b, a
+.innerloop2 ; Loop to get hl to the address of the chosen roam map.
+ dec b
+ jr z, .ok
+.innerloop3 ; Loop to skip the current roam map, which is terminated by a 0.
+ ld a, [hli]
+ and a
+ jr nz, .innerloop3
+ jr .innerloop2
+; Check to see if the selected map is the one the player is currently in. If so, try again.
+.ok
+ ld a, [wMapGroup]
+ cp [hl]
+ jr nz, .done
+ inc hl
+ ld a, [wMapNumber]
+ cp [hl]
+ jr z, .loop
+ dec hl
+; Return the map group and number in bc.
+.done
+ ld a, [hli]
+ ld b, a
+ ld c, [hl]
+ ret
+
+_BackUpMapIndices:
+ ld a, [wRoamMons_CurMapNumber]
+ ld [wRoamMons_LastMapNumber], a
+ ld a, [wRoamMons_CurMapGroup]
+ ld [wRoamMons_LastMapGroup], a
+ ld a, [wMapNumber]
+ ld [wRoamMons_CurMapNumber], a
+ ld a, [wMapGroup]
+ ld [wRoamMons_CurMapGroup], a
+ ret
+
+INCLUDE "data/wild/roammon_maps.asm"
+
+ValidateTempWildMonSpecies:
+; Due to a development oversight, this function is called with the wild Pokemon's level, not its species, in a.
+ and a
+ jr z, .nowildmon ; = 0
+ cp NUM_POKEMON + 1 ; 252
+ jr nc, .nowildmon ; >= 252
+ and a ; 1 <= Species <= 251
+ ret
+
+.nowildmon
+ scf
+ ret
+
+; Finds a rare wild Pokemon in the route of the trainer calling, then checks if it's been Seen already.
+; The trainer will then tell you about the Pokemon if you haven't seen it.
+RandomUnseenWildMon:
+ farcall GetCallerLocation
+ ld d, b
+ ld e, c
+ ld hl, JohtoGrassWildMons
+ ld bc, GRASS_WILDDATA_LENGTH
+ call LookUpWildmonsForMapDE
+ jr c, .GetGrassmon
+ ld hl, KantoGrassWildMons
+ call LookUpWildmonsForMapDE
+ jr nc, .done
+
+.GetGrassmon:
+ push hl
+ ld bc, 5 + 4 * 2 ; Location of the level of the 5th wild Pokemon in that map
+ add hl, bc
+ ld a, [wTimeOfDay]
+ ld bc, NUM_GRASSMON * 2
+ call AddNTimes
+.randloop1
+ call Random
+ and %11
+ jr z, .randloop1
+ dec a
+ ld c, a
+ ld b, 0
+ add hl, bc
+ add hl, bc
+; We now have the pointer to one of the last (rarest) three wild Pokemon found in that area.
+ inc hl
+ ld c, [hl] ; Contains the species index of this rare Pokemon
+ pop hl
+ ld de, 5 + 0 * 2
+ add hl, de
+ inc hl ; Species index of the most common Pokemon on that route
+ ld b, 4
+.loop2
+ ld a, [hli]
+ cp c ; Compare this most common Pokemon with the rare one stored in c.
+ jr z, .done
+ inc hl
+ dec b
+ jr nz, .loop2
+; This Pokemon truly is rare.
+ push bc
+ dec c
+ ld a, c
+ call CheckSeenMon
+ pop bc
+ jr nz, .done
+; Since we haven't seen it, have the caller tell us about it.
+ ld de, wStringBuffer1
+ call CopyName1
+ ld a, c
+ ld [wNamedObjectIndexBuffer], a
+ call GetPokemonName
+ ld hl, .JustSawSomeRareMonText
+ call PrintText
+ xor a
+ ld [wScriptVar], a
+ ret
+
+.done
+ ld a, $1
+ ld [wScriptVar], a
+ ret
+
+.JustSawSomeRareMonText:
+ text_far _JustSawSomeRareMonText
+ text_end
+
+RandomPhoneWildMon:
+ farcall GetCallerLocation
+ ld d, b
+ ld e, c
+ ld hl, JohtoGrassWildMons
+ ld bc, GRASS_WILDDATA_LENGTH
+ call LookUpWildmonsForMapDE
+ jr c, .ok
+ ld hl, KantoGrassWildMons
+ call LookUpWildmonsForMapDE
+
+.ok
+ ld bc, 5 + 0 * 2
+ add hl, bc
+ ld a, [wTimeOfDay]
+ inc a
+ ld bc, NUM_GRASSMON * 2
+.loop
+ dec a
+ jr z, .done
+ add hl, bc
+ jr .loop
+
+.done
+ call Random
+ and %11
+ ld c, a
+ ld b, 0
+ add hl, bc
+ add hl, bc
+ inc hl
+ ld a, [hl]
+ ld [wNamedObjectIndexBuffer], a
+ call GetPokemonName
+ ld hl, wStringBuffer1
+ ld de, wStringBuffer4
+ ld bc, MON_NAME_LENGTH
+ jp CopyBytes
+
+RandomPhoneMon:
+; Get a random monster owned by the trainer who's calling.
+ farcall GetCallerLocation
+ ld hl, TrainerGroups
+ ld a, d
+ dec a
+ ld c, a
+ ld b, 0
+ add hl, bc
+ add hl, bc
+ ld a, BANK(TrainerGroups)
+ call GetFarHalfword
+
+.skip_trainer
+ dec e
+ jr z, .skipped
+.skip
+ ld a, BANK(Trainers)
+ call GetFarByte
+ inc hl
+ cp -1
+ jr nz, .skip
+ jr .skip_trainer
+.skipped
+
+.skip_name
+ ld a, BANK(Trainers)
+ call GetFarByte
+ inc hl
+ cp "@"
+ jr nz, .skip_name
+
+ ld a, BANK(Trainers)
+ call GetFarByte
+ inc hl
+ ld bc, 2 ; level, species
+ cp TRAINERTYPE_NORMAL
+ jr z, .got_mon_length
+ ld bc, 2 + NUM_MOVES ; level, species, moves
+ cp TRAINERTYPE_MOVES
+ jr z, .got_mon_length
+ ld bc, 2 + 1 ; level, species, item
+ cp TRAINERTYPE_ITEM
+ jr z, .got_mon_length
+ ; TRAINERTYPE_ITEM_MOVES
+ ld bc, 2 + 1 + NUM_MOVES ; level, species, item, moves
+.got_mon_length
+
+ ld e, 0
+ push hl
+.count_mon
+ inc e
+ add hl, bc
+ ld a, BANK(Trainers)
+ call GetFarByte
+ cp -1
+ jr nz, .count_mon
+ pop hl
+
+.rand
+ call Random
+ maskbits PARTY_LENGTH
+ cp e
+ jr nc, .rand
+
+ inc a
+.get_mon
+ dec a
+ jr z, .got_mon
+ add hl, bc
+ jr .get_mon
+.got_mon
+
+ inc hl ; species
+ ld a, BANK(Trainers)
+ call GetFarByte
+ ld [wNamedObjectIndexBuffer], a
+ call GetPokemonName
+ ld hl, wStringBuffer1
+ ld de, wStringBuffer4
+ ld bc, MON_NAME_LENGTH
+ jp CopyBytes
+
+;INCLUDE "data/wild/johto_grass.asm"
+;INCLUDE "data/wild/johto_water.asm"
+;INCLUDE "data/wild/kanto_grass.asm"
+;INCLUDE "data/wild/kanto_water.asm"
+;INCLUDE "data/wild/swarm_grass.asm"
+;INCLUDE "data/wild/swarm_water.asm"
diff --git a/layout.link b/layout.link
index d9bf86e2..11fdb67c 100644
--- a/layout.link
+++ b/layout.link
@@ -50,14 +50,11 @@ ROMX $08
org $4000
"bank8"
ROMX $09
- org $4000
"bank9"
ROMX $0a
- org $4000
- "banka"
+ "bankA"
ROMX $0b
- org $4000
- "bankb"
+ "bankB"
ROMX $0c
org $4000
"bankc"
diff --git a/main.asm b/main.asm
index c46821e2..2caef00d 100644
--- a/main.asm
+++ b/main.asm
@@ -249,38 +249,26 @@ INCLUDE "engine/battle/consume_held_item.asm"
INCLUDE "data/moves/effects.asm"
-SECTION "banka", ROMX
+SECTION "bankA", ROMX
INCLUDE "engine/link/link.asm"
INCLUDE "engine/link/mystery_gift.asm"
+INCLUDE "engine/overworld/wildmons.asm"
-LoadWildMonData::
- dr $2a539, $2a643
-TryWildEncounter::
- dr $2a643, $2a680
-ApplyMusicEffectOnEncounterRate::
- dr $2a680, $2a694
-ApplyCleanseTagEffectOnEncounterRate::
- dr $2a694, $2a73b
-CheckRepelEffect::
- dr $2a73b, $2a7d7
-InitRoamMons::
- dr $2a7d7, $2a859
-UpdateRoamMons::
- dr $2a859, $2a8e0
-JumpRoamMons::
- dr $2a8e0, $2a9f7
-RandomUnseenWildMon::
- dr $2a9f7, $2aa6b
-RandomPhoneWildMon::
- dr $2aa6b, $2aab3
-RandomPhoneMon::
- dr $2aab3, $2ab35
JohtoGrassWildMons::
- dr $2ab35, $2bee3
-
-
-SECTION "bankb", ROMX
+ dr $2ab35, $2b669
+JohtoWaterWildMons::
+ dr $2b669, $2b7c0
+KantoGrassWildMons::
+ dr $2b7c0, $2bd43
+KantoWaterWildMons::
+ dr $2bd43, $2be1c
+SwarmGrassWildMons::
+ dr $2be1c, $2bed9
+SwarmWaterWildMons::
+ dr $2bed9, $2bee3
+
+SECTION "bankB", ROMX
PrintItemDescription::
dr $2c000, $2c033
@@ -649,7 +637,9 @@ Script_SpecialBillCall::
PhoneCall::
dr $90298, $902df
HangUp::
- dr $902df, $90641
+ dr $902df, $90414
+GetCallerLocation::
+ dr $90414, $90641
InitClock::
dr $90641, $908dc
SetDayOfWeek::
diff --git a/wram.asm b/wram.asm
index a246768d..74e9122c 100644
--- a/wram.asm
+++ b/wram.asm
@@ -1708,10 +1708,10 @@ wd140:: ds 1 ; d140
wCurDamage:: ds 2 ; d141
wd143:: ds 1 ; d143
wd144:: ds 1 ; d144
-wd145:: ds 1 ; d145
+wMornEncounterRate:: db ; d145
wd146:: ds 1 ; d146
wd147:: ds 1 ; d147
-wd148:: ds 1 ; d148
+wWaterEncounterRate:: db ; d148
wListMoves_MoveIndicesBuffer:: ds NUM_MOVES
wPutativeTMHMMove:: db ; d14d
wInitListType:: db ; d14e
@@ -2646,10 +2646,10 @@ wRoamMon1:: roam_struct wRoamMon1 ; dd1a
wRoamMon2:: roam_struct wRoamMon2 ; dd21
wRoamMon3:: roam_struct wRoamMon3 ; dd28
-wRoamMons_CurrentMapNumber:: ds 1 ; dd2f
-wRoamMons_CurrentMapGroup:: ds 1 ; dd30
-wRoamMons_LastMapNumber:: ds 1 ; dd31
-wRoamMons_LastMapGroup:: ds 1 ; dd32
+wRoamMons_CurMapNumber:: db ; dd2f
+wRoamMons_CurMapGroup:: db ; dd30
+wRoamMons_LastMapNumber:: db ; dd31
+wRoamMons_LastMapGroup:: db ; dd32
wBestMagikarpLengthFeet:: ds 1 ; dd33
wBestMagikarpLengthInches:: ds 1 ; dd34