Add engine/overworld/wildmons.asm (without data files).

This commit is contained in:
entrpntr
2020-05-01 02:18:33 -04:00
parent 03bc01bf4e
commit 2bc79616c4
14 changed files with 1220 additions and 197 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,4 +1,6 @@
; swarms in water
; Pokémon swarms in water
SwarmWaterWildMons:
; No swarms encountered while surfing in Crystal

View File

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

View File

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

View File

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

View File

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