summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorentrpntr <entrpntr@gmail.com>2020-05-09 20:31:18 -0400
committerentrpntr <entrpntr@gmail.com>2020-05-09 20:31:18 -0400
commitfa45a690ee4b7734b371f18addcd35184df97c86 (patch)
tree9b350107641d8a614580cdd5d4d1e1c3ddcb9492
parent14f623c65c3f80ade737ba9ace7f1ba132e71939 (diff)
Add engine/overworld/landmarks.asm and engine/events/fish.asm.
-rw-r--r--constants/script_constants.asm6
-rw-r--r--data/maps/landmarks.asm205
-rw-r--r--data/wild/fish.asm205
-rw-r--r--engine/events/fish.asm121
-rw-r--r--engine/overworld/landmarks.asm82
-rw-r--r--main.asm8
6 files changed, 521 insertions, 106 deletions
diff --git a/constants/script_constants.asm b/constants/script_constants.asm
index 49588f84..de59a7ee 100644
--- a/constants/script_constants.asm
+++ b/constants/script_constants.asm
@@ -229,6 +229,12 @@ NUM_FRUIT_TREES EQU const_value - 1
const DECODESC_BIG_DOLL ; 3
const DECODESC_CONSOLE ; 4
+; ActivateFishingSwarm setval arguments
+ const_def
+ const FISHSWARM_NONE ; 0
+ const FISHSWARM_QWILFISH ; 1
+ const FISHSWARM_REMORAID ; 2
+
; SpecialGameboyCheck return values
const_def
const GBCHECK_GB ; 0
diff --git a/data/maps/landmarks.asm b/data/maps/landmarks.asm
new file mode 100644
index 00000000..8e25aca2
--- /dev/null
+++ b/data/maps/landmarks.asm
@@ -0,0 +1,205 @@
+landmark: MACRO
+; x, y, name
+ db \1 + 8, \2 + 16
+ dw \3
+ENDM
+
+Landmarks:
+; entries correspond to constants/landmark_constants.asm
+ dbbw 0, 0, SpecialMapName
+ landmark 140, 100, NewBarkTownName
+ landmark 128, 100, Route29Name
+ landmark 100, 100, CherrygroveCityName
+ landmark 100, 80, Route30Name
+ landmark 96, 60, Route31Name
+ landmark 84, 60, VioletCityName
+ landmark 85, 58, SproutTowerName
+ landmark 84, 92, Route32Name
+ landmark 76, 76, RuinsOfAlphName
+ landmark 84, 124, UnionCaveName
+ landmark 82, 124, Route33Name
+ landmark 68, 124, AzaleaTownName
+ landmark 70, 122, SlowpokeWellName
+ landmark 52, 120, IlexForestName
+ landmark 52, 112, Route34Name
+ landmark 52, 92, GoldenrodCityName
+ landmark 50, 92, RadioTowerName
+ landmark 52, 76, Route35Name
+ landmark 52, 60, NationalParkName
+ landmark 64, 60, Route36Name
+ landmark 68, 52, Route37Name
+ landmark 68, 44, EcruteakCityName
+ landmark 70, 42, TinTowerName
+ landmark 66, 42, BurnedTowerName
+ landmark 52, 44, Route38Name
+ landmark 36, 48, Route39Name
+ landmark 36, 60, OlivineCityName
+ landmark 38, 62, LighthouseName
+ landmark 28, 64, Route40Name
+ landmark 28, 92, WhirlIslandsName
+ landmark 28, 100, Route41Name
+ landmark 20, 100, CianwoodCityName
+ landmark 92, 44, Route42Name
+ landmark 84, 44, MtMortarName
+ landmark 108, 44, MahoganyTownName
+ landmark 108, 36, Route43Name
+ landmark 108, 28, LakeOfRageName
+ landmark 120, 44, Route44Name
+ landmark 130, 38, IcePathName
+ landmark 132, 44, BlackthornCityName
+ landmark 132, 36, DragonsDenName
+ landmark 132, 64, Route45Name
+ landmark 112, 72, DarkCaveName
+ landmark 124, 88, Route46Name
+ landmark 148, 68, SilverCaveName
+ landmark 52, 108, PalletTownName
+ landmark 52, 92, Route1Name
+ landmark 52, 76, ViridianCityName
+ landmark 52, 64, Route2Name
+ landmark 52, 52, PewterCityName
+ landmark 64, 52, Route3Name
+ landmark 76, 52, MtMoonName
+ landmark 88, 52, Route4Name
+ landmark 100, 52, CeruleanCityName
+ landmark 100, 44, Route24Name
+ landmark 108, 36, Route25Name
+ landmark 100, 60, Route5Name
+ landmark 108, 76, UndergroundName
+ landmark 100, 76, Route6Name
+ landmark 100, 84, VermilionCityName
+ landmark 88, 60, DiglettsCaveName
+ landmark 88, 68, Route7Name
+ landmark 116, 68, Route8Name
+ landmark 116, 52, Route9Name
+ landmark 132, 52, RockTunnelName
+ landmark 132, 56, Route10Name
+ landmark 132, 60, PowerPlantName
+ landmark 132, 68, LavenderTownName
+ landmark 140, 68, LavRadioTowerName
+ landmark 76, 68, CeladonCityName
+ landmark 100, 68, SaffronCityName
+ landmark 116, 84, Route11Name
+ landmark 132, 80, Route12Name
+ landmark 124, 100, Route13Name
+ landmark 116, 112, Route14Name
+ landmark 104, 116, Route15Name
+ landmark 68, 68, Route16Name
+ landmark 68, 92, Route17Name
+ landmark 80, 116, Route18Name
+ landmark 92, 116, FuchsiaCityName
+ landmark 92, 128, Route19Name
+ landmark 76, 132, Route20Name
+ landmark 68, 132, SeafoamIslandsName
+ landmark 52, 132, CinnabarIslandName
+ landmark 52, 120, Route21Name
+ landmark 36, 68, Route22Name
+ landmark 28, 52, VictoryRoadName
+ landmark 28, 44, Route23Name
+ landmark 28, 36, IndigoPlateauName
+ landmark 28, 92, Route26Name
+ landmark 20, 100, Route27Name
+ landmark 12, 100, TohjoFallsName
+ landmark 20, 68, Route28Name
+ landmark 140, 116, FastShipName
+
+NewBarkTownName: db "NEW BARK¯TOWN@"
+CherrygroveCityName: db "CHERRYGROVE¯CITY@"
+VioletCityName: db "VIOLET CITY@"
+AzaleaTownName: db "AZALEA TOWN@"
+GoldenrodCityName: db "GOLDENROD¯CITY@"
+EcruteakCityName: db "ECRUTEAK¯CITY@"
+OlivineCityName: db "OLIVINE¯CITY@"
+CianwoodCityName: db "CIANWOOD¯CITY@"
+MahoganyTownName: db "MAHOGANY¯TOWN@"
+BlackthornCityName: db "BLACKTHORN¯CITY@"
+LakeOfRageName: db "LAKE OF¯RAGE@"
+SilverCaveName: db "SILVER CAVE@"
+SproutTowerName: db "SPROUT¯TOWER@"
+RuinsOfAlphName: db "RUINS¯OF ALPH@"
+UnionCaveName: db "UNION CAVE@"
+SlowpokeWellName: db "SLOWPOKE¯WELL@"
+RadioTowerName: db "RADIO TOWER@"
+PowerPlantName: db "POWER PLANT@"
+NationalParkName: db "NATIONAL¯PARK@"
+TinTowerName: db "TIN TOWER@"
+LighthouseName: db "LIGHTHOUSE@"
+WhirlIslandsName: db "WHIRL¯ISLANDS@"
+MtMortarName: db "MT.MORTAR@"
+DragonsDenName: db "DRAGON'S¯DEN@"
+IcePathName: db "ICE PATH@"
+NotApplicableName: db "N/A@" ; "オバケやしき" ("HAUNTED HOUSE") in Japanese
+PalletTownName: db "PALLET TOWN@"
+ViridianCityName: db "VIRIDIAN¯CITY@"
+PewterCityName: db "PEWTER CITY@"
+CeruleanCityName: db "CERULEAN¯CITY@"
+LavenderTownName: db "LAVENDER¯TOWN@"
+VermilionCityName: db "VERMILION¯CITY@"
+CeladonCityName: db "CELADON¯CITY@"
+SaffronCityName: db "SAFFRON¯CITY@"
+FuchsiaCityName: db "FUCHSIA¯CITY@"
+CinnabarIslandName: db "CINNABAR¯ISLAND@"
+IndigoPlateauName: db "INDIGO¯PLATEAU@"
+VictoryRoadName: db "VICTORY¯ROAD@"
+MtMoonName: db "MT.MOON@"
+RockTunnelName: db "ROCK TUNNEL@"
+LavRadioTowerName: db "LAV¯RADIO TOWER@"
+SilphCoName: db "SILPH CO.@"
+SafariZoneName: db "SAFARI ZONE@"
+SeafoamIslandsName: db "SEAFOAM¯ISLANDS@"
+PokemonMansionName: db "#MON¯MANSION@"
+CeruleanCaveName: db "CERULEAN¯CAVE@"
+Route1Name: db "ROUTE 1@"
+Route2Name: db "ROUTE 2@"
+Route3Name: db "ROUTE 3@"
+Route4Name: db "ROUTE 4@"
+Route5Name: db "ROUTE 5@"
+Route6Name: db "ROUTE 6@"
+Route7Name: db "ROUTE 7@"
+Route8Name: db "ROUTE 8@"
+Route9Name: db "ROUTE 9@"
+Route10Name: db "ROUTE 10@"
+Route11Name: db "ROUTE 11@"
+Route12Name: db "ROUTE 12@"
+Route13Name: db "ROUTE 13@"
+Route14Name: db "ROUTE 14@"
+Route15Name: db "ROUTE 15@"
+Route16Name: db "ROUTE 16@"
+Route17Name: db "ROUTE 17@"
+Route18Name: db "ROUTE 18@"
+Route19Name: db "ROUTE 19@"
+Route20Name: db "ROUTE 20@"
+Route21Name: db "ROUTE 21@"
+Route22Name: db "ROUTE 22@"
+Route23Name: db "ROUTE 23@"
+Route24Name: db "ROUTE 24@"
+Route25Name: db "ROUTE 25@"
+Route26Name: db "ROUTE 26@"
+Route27Name: db "ROUTE 27@"
+Route28Name: db "ROUTE 28@"
+Route29Name: db "ROUTE 29@"
+Route30Name: db "ROUTE 30@"
+Route31Name: db "ROUTE 31@"
+Route32Name: db "ROUTE 32@"
+Route33Name: db "ROUTE 33@"
+Route34Name: db "ROUTE 34@"
+Route35Name: db "ROUTE 35@"
+Route36Name: db "ROUTE 36@"
+Route37Name: db "ROUTE 37@"
+Route38Name: db "ROUTE 38@"
+Route39Name: db "ROUTE 39@"
+Route40Name: db "ROUTE 40@"
+Route41Name: db "ROUTE 41@"
+Route42Name: db "ROUTE 42@"
+Route43Name: db "ROUTE 43@"
+Route44Name: db "ROUTE 44@"
+Route45Name: db "ROUTE 45@"
+Route46Name: db "ROUTE 46@"
+DarkCaveName: db "DARK CAVE@"
+IlexForestName: db "ILEX¯FOREST@"
+BurnedTowerName: db "BURNED¯TOWER@"
+FastShipName: db "FAST SHIP@"
+ViridianForestName: db "VIRIDIAN¯FOREST@"
+DiglettsCaveName: db "DIGLETT's¯CAVE@"
+TohjoFallsName: db "TOHJO FALLS@"
+UndergroundName: db "UNDERGROUND@"
+SpecialMapName: db "SPECIAL@"
diff --git a/data/wild/fish.asm b/data/wild/fish.asm
index de7e57a3..1976c8f9 100644
--- a/data/wild/fish.asm
+++ b/data/wild/fish.asm
@@ -1,225 +1,230 @@
-FishGroups: ; 92488
- dbwww 50 percent + 1, .Shore_Old, .Shore_Good, .Shore_Super
- dbwww 50 percent + 1, .Ocean_Old, .Ocean_Good, .Ocean_Super
- dbwww 50 percent + 1, .Lake_Old, .Lake_Good, .Lake_Super
- dbwww 50 percent + 1, .Pond_Old, .Pond_Good, .Pond_Super
- dbwww 50 percent + 1, .Dratini_Old, .Dratini_Good, .Dratini_Super
- dbwww 50 percent + 1, .Qwilfish_Swarm_Old, .Qwilfish_Swarm_Good, .Qwilfish_Swarm_Super
- dbwww 50 percent + 1, .Remoraid_Swarm_Old, .Remoraid_Swarm_Good, .Remoraid_Swarm_Super
- dbwww 50 percent + 1, .Gyarados_Old, .Gyarados_Good, .Gyarados_Super
- dbwww 50 percent + 1, .Dratini_2_Old, .Dratini_2_Good, .Dratini_2_Super
- dbwww 50 percent + 1, .WhirlIslands_Old, .WhirlIslands_Good, .WhirlIslands_Super
- dbwww 50 percent + 1, .Qwilfish_Old, .Qwilfish_Good, .Qwilfish_Super
- dbwww 50 percent + 1, .Remoraid_Old, .Remoraid_Good, .Remoraid_Super
- dbwww 50 percent + 1, .Qwilfish_NoSwarm_Old, .Qwilfish_NoSwarm_Good, .Qwilfish_NoSwarm_Super
+time_group EQUS "0," ; use the nth TimeFishGroups entry
-.Shore_Old: ; 924e3
+fishgroup: MACRO
+; chance, old rod, good rod, super rod
+ dbwww \1, \2, \3, \4
+ENDM
+
+FishGroups:
+; entries correspond to FISHGROUP_* constants
+ fishgroup 50 percent + 1, .Shore_Old, .Shore_Good, .Shore_Super
+ fishgroup 50 percent + 1, .Ocean_Old, .Ocean_Good, .Ocean_Super
+ fishgroup 50 percent + 1, .Lake_Old, .Lake_Good, .Lake_Super
+ fishgroup 50 percent + 1, .Pond_Old, .Pond_Good, .Pond_Super
+ fishgroup 50 percent + 1, .Dratini_Old, .Dratini_Good, .Dratini_Super
+ fishgroup 50 percent + 1, .Qwilfish_Swarm_Old, .Qwilfish_Swarm_Good, .Qwilfish_Swarm_Super
+ fishgroup 50 percent + 1, .Remoraid_Swarm_Old, .Remoraid_Swarm_Good, .Remoraid_Swarm_Super
+ fishgroup 50 percent + 1, .Gyarados_Old, .Gyarados_Good, .Gyarados_Super
+ fishgroup 50 percent + 1, .Dratini_2_Old, .Dratini_2_Good, .Dratini_2_Super
+ fishgroup 50 percent + 1, .WhirlIslands_Old, .WhirlIslands_Good, .WhirlIslands_Super
+ fishgroup 50 percent + 1, .Qwilfish_Old, .Qwilfish_Good, .Qwilfish_Super
+ fishgroup 50 percent + 1, .Remoraid_Old, .Remoraid_Good, .Remoraid_Super
+ fishgroup 50 percent + 1, .Qwilfish_NoSwarm_Old, .Qwilfish_NoSwarm_Good, .Qwilfish_NoSwarm_Super
+
+.Shore_Old:
db 70 percent + 1, MAGIKARP, 10
db 85 percent + 1, MAGIKARP, 10
db 100 percent, KRABBY, 10
-.Shore_Good: ; 924ec
+.Shore_Good:
db 35 percent, MAGIKARP, 20
db 70 percent, KRABBY, 20
db 90 percent + 1, KRABBY, 20
- db 100 percent, 0, 0
-.Shore_Super: ; 924f8
+ db 100 percent, time_group 0
+.Shore_Super:
db 40 percent, KRABBY, 40
- db 70 percent, 0, 1
+ db 70 percent, time_group 1
db 90 percent + 1, KRABBY, 40
db 100 percent, KINGLER, 40
-.Ocean_Old: ; 92504
+.Ocean_Old:
db 70 percent + 1, MAGIKARP, 10
db 85 percent + 1, MAGIKARP, 10
db 100 percent, TENTACOOL, 10
-.Ocean_Good: ; 9250d
+.Ocean_Good:
db 35 percent, MAGIKARP, 20
db 70 percent, TENTACOOL, 20
db 90 percent + 1, CHINCHOU, 20
- db 100 percent, 0, 2
-.Ocean_Super: ; 92519
+ db 100 percent, time_group 2
+.Ocean_Super:
db 40 percent, CHINCHOU, 40
- db 70 percent, 0, 3
+ db 70 percent, time_group 3
db 90 percent + 1, TENTACRUEL, 40
db 100 percent, LANTURN, 40
-.Lake_Old: ; 92525
+.Lake_Old:
db 70 percent + 1, MAGIKARP, 10
db 85 percent + 1, MAGIKARP, 10
db 100 percent, GOLDEEN, 10
-.Lake_Good: ; 9252e
+.Lake_Good:
db 35 percent, MAGIKARP, 20
db 70 percent, GOLDEEN, 20
db 90 percent + 1, GOLDEEN, 20
- db 100 percent, 0, 4
-.Lake_Super: ; 9253a
+ db 100 percent, time_group 4
+.Lake_Super:
db 40 percent, GOLDEEN, 40
- db 70 percent, 0, 5
+ db 70 percent, time_group 5
db 90 percent + 1, MAGIKARP, 40
db 100 percent, SEAKING, 40
-.Pond_Old: ; 92546
+.Pond_Old:
db 70 percent + 1, MAGIKARP, 10
db 85 percent + 1, MAGIKARP, 10
db 100 percent, POLIWAG, 10
-.Pond_Good: ; 9254f
+.Pond_Good:
db 35 percent, MAGIKARP, 20
db 70 percent, POLIWAG, 20
db 90 percent + 1, POLIWAG, 20
- db 100 percent, 0, 6
-.Pond_Super: ; 9255b
+ db 100 percent, time_group 6
+.Pond_Super:
db 40 percent, POLIWAG, 40
- db 70 percent, 0, 7
+ db 70 percent, time_group 7
db 90 percent + 1, MAGIKARP, 40
db 100 percent, POLIWAG, 40
-.Dratini_Old: ; 92567
+.Dratini_Old:
db 70 percent + 1, MAGIKARP, 10
db 85 percent + 1, MAGIKARP, 10
db 100 percent, MAGIKARP, 10
-.Dratini_Good: ; 92570
+.Dratini_Good:
db 35 percent, MAGIKARP, 20
db 70 percent, MAGIKARP, 20
db 90 percent + 1, MAGIKARP, 20
- db 100 percent, 0, 8
-.Dratini_Super: ; 9257c
+ db 100 percent, time_group 8
+.Dratini_Super:
db 40 percent, MAGIKARP, 40
- db 70 percent, 0, 9
+ db 70 percent, time_group 9
db 90 percent + 1, MAGIKARP, 40
db 100 percent, DRAGONAIR, 40
-.Qwilfish_Swarm_Old: ; 92588
+.Qwilfish_Swarm_Old:
db 70 percent + 1, MAGIKARP, 5
db 85 percent + 1, MAGIKARP, 5
db 100 percent, QWILFISH, 5
-.Qwilfish_Swarm_Good: ; 92591
+.Qwilfish_Swarm_Good:
db 35 percent, MAGIKARP, 20
db 70 percent, QWILFISH, 20
db 90 percent + 1, QWILFISH, 20
- db 100 percent, 0, 10
-.Qwilfish_Swarm_Super: ; 9259d
+ db 100 percent, time_group 10
+.Qwilfish_Swarm_Super:
db 40 percent, QWILFISH, 40
- db 70 percent, 0, 11
+ db 70 percent, time_group 11
db 90 percent + 1, QWILFISH, 40
db 100 percent, QWILFISH, 40
-.Remoraid_Swarm_Old: ; 925a9
+.Remoraid_Swarm_Old:
db 70 percent + 1, MAGIKARP, 10
db 85 percent + 1, MAGIKARP, 10
db 100 percent, REMORAID, 10
-.Remoraid_Swarm_Good: ; 925b2
+.Remoraid_Swarm_Good:
db 35 percent, MAGIKARP, 20
db 70 percent, REMORAID, 20
db 90 percent + 1, REMORAID, 20
- db 100 percent, 0, 12
-.Remoraid_Swarm_Super: ; 925be
+ db 100 percent, time_group 12
+.Remoraid_Swarm_Super:
db 40 percent, REMORAID, 40
- db 70 percent, 0, 13
+ db 70 percent, time_group 13
db 90 percent + 1, REMORAID, 40
db 100 percent, REMORAID, 40
-.Gyarados_Old: ; 925ca
+.Gyarados_Old:
db 70 percent + 1, MAGIKARP, 10
db 85 percent + 1, MAGIKARP, 10
db 100 percent, MAGIKARP, 10
-.Gyarados_Good: ; 925d3
+.Gyarados_Good:
db 35 percent, MAGIKARP, 20
db 70 percent, MAGIKARP, 20
db 90 percent + 1, MAGIKARP, 20
- db 100 percent, 0, 14
-.Gyarados_Super: ; 925df
+ db 100 percent, time_group 14
+.Gyarados_Super:
db 40 percent, MAGIKARP, 40
- db 70 percent, 0, 15
+ db 70 percent, time_group 15
db 90 percent + 1, MAGIKARP, 40
db 100 percent, MAGIKARP, 40
-.Dratini_2_Old: ; 925eb
+.Dratini_2_Old:
db 70 percent + 1, MAGIKARP, 10
db 85 percent + 1, MAGIKARP, 10
db 100 percent, MAGIKARP, 10
-.Dratini_2_Good: ; 925f4
+.Dratini_2_Good:
db 35 percent, MAGIKARP, 10
db 70 percent, MAGIKARP, 10
db 90 percent + 1, MAGIKARP, 10
- db 100 percent, 0, 16
-.Dratini_2_Super: ; 92600
+ db 100 percent, time_group 16
+.Dratini_2_Super:
db 40 percent, MAGIKARP, 10
- db 70 percent, 0, 17
+ db 70 percent, time_group 17
db 90 percent + 1, MAGIKARP, 10
db 100 percent, DRAGONAIR, 10
-.WhirlIslands_Old: ; 9260c
+.WhirlIslands_Old:
db 70 percent + 1, MAGIKARP, 10
db 85 percent + 1, MAGIKARP, 10
db 100 percent, KRABBY, 10
-.WhirlIslands_Good: ; 92615
+.WhirlIslands_Good:
db 35 percent, MAGIKARP, 20
db 70 percent, KRABBY, 20
db 90 percent + 1, KRABBY, 20
- db 100 percent, 0, 18
-.WhirlIslands_Super: ; 92621
+ db 100 percent, time_group 18
+.WhirlIslands_Super:
db 40 percent, KRABBY, 40
- db 70 percent, 0, 19
+ db 70 percent, time_group 19
db 90 percent + 1, KINGLER, 40
db 100 percent, SEADRA, 40
.Qwilfish_NoSwarm_Old:
-.Qwilfish_Old: ; 9262d
+.Qwilfish_Old:
db 70 percent + 1, MAGIKARP, 10
db 85 percent + 1, MAGIKARP, 10
db 100 percent, TENTACOOL, 10
.Qwilfish_NoSwarm_Good:
-.Qwilfish_Good: ; 92636
+.Qwilfish_Good:
db 35 percent, MAGIKARP, 20
db 70 percent, TENTACOOL, 20
db 90 percent + 1, TENTACOOL, 20
- db 100 percent, 0, 20
+ db 100 percent, time_group 20
.Qwilfish_NoSwarm_Super:
-.Qwilfish_Super: ; 92642
+.Qwilfish_Super:
db 40 percent, TENTACOOL, 40
- db 70 percent, 0, 21
+ db 70 percent, time_group 21
db 90 percent + 1, MAGIKARP, 40
db 100 percent, QWILFISH, 40
-.Remoraid_Old: ; 9264e
+.Remoraid_Old:
db 70 percent + 1, MAGIKARP, 10
db 85 percent + 1, MAGIKARP, 10
db 100 percent, POLIWAG, 10
-.Remoraid_Good: ; 92657
+.Remoraid_Good:
db 35 percent, MAGIKARP, 20
db 70 percent, POLIWAG, 20
db 90 percent + 1, POLIWAG, 20
- db 100 percent, 0, 6
-.Remoraid_Super: ; 92663
+ db 100 percent, time_group 6
+.Remoraid_Super:
db 40 percent, POLIWAG, 40
- db 70 percent, 0, 7
+ db 70 percent, time_group 7
db 90 percent + 1, MAGIKARP, 40
db 100 percent, REMORAID, 40
-; 9266f
-
-TimeFishGroups: ; 9266f
+TimeFishGroups:
; day nite
- db CORSOLA, 20, STARYU, 20
- db CORSOLA, 40, STARYU, 40
- db SHELLDER, 20, SHELLDER, 20
- db SHELLDER, 40, SHELLDER, 40
- db GOLDEEN, 20, GOLDEEN, 20
- db GOLDEEN, 40, GOLDEEN, 40
- db POLIWAG, 20, POLIWAG, 20
- db POLIWAG, 40, POLIWAG, 40
- db DRATINI, 20, DRATINI, 20
- db DRATINI, 40, DRATINI, 40
- db QWILFISH, 20, QWILFISH, 20
- db QWILFISH, 40, QWILFISH, 40
- db REMORAID, 20, REMORAID, 20
- db REMORAID, 40, REMORAID, 40
- db GYARADOS, 20, GYARADOS, 20
- db GYARADOS, 40, GYARADOS, 40
- db DRATINI, 10, DRATINI, 10
- db DRATINI, 10, DRATINI, 10
- db HORSEA, 20, HORSEA, 20
- db HORSEA, 40, HORSEA, 40
- db TENTACOOL, 20, TENTACOOL, 20
- db TENTACOOL, 40, TENTACOOL, 40
-; 926c7
+ db CORSOLA, 20, STARYU, 20 ; 0
+ db CORSOLA, 40, STARYU, 40 ; 1
+ db SHELLDER, 20, SHELLDER, 20 ; 2
+ db SHELLDER, 40, SHELLDER, 40 ; 3
+ db GOLDEEN, 20, GOLDEEN, 20 ; 4
+ db GOLDEEN, 40, GOLDEEN, 40 ; 5
+ db POLIWAG, 20, POLIWAG, 20 ; 6
+ db POLIWAG, 40, POLIWAG, 40 ; 7
+ db DRATINI, 20, DRATINI, 20 ; 8
+ db DRATINI, 40, DRATINI, 40 ; 9
+ db QWILFISH, 20, QWILFISH, 20 ; 10
+ db QWILFISH, 40, QWILFISH, 40 ; 11
+ db REMORAID, 20, REMORAID, 20 ; 12
+ db REMORAID, 40, REMORAID, 40 ; 13
+ db GYARADOS, 20, GYARADOS, 20 ; 14
+ db GYARADOS, 40, GYARADOS, 40 ; 15
+ db DRATINI, 10, DRATINI, 10 ; 16
+ db DRATINI, 10, DRATINI, 10 ; 17
+ db HORSEA, 20, HORSEA, 20 ; 18
+ db HORSEA, 40, HORSEA, 40 ; 19
+ db TENTACOOL, 20, TENTACOOL, 20 ; 20
+ db TENTACOOL, 40, TENTACOOL, 40 ; 21
diff --git a/engine/events/fish.asm b/engine/events/fish.asm
new file mode 100644
index 00000000..8cdcd3f2
--- /dev/null
+++ b/engine/events/fish.asm
@@ -0,0 +1,121 @@
+Fish:
+; Using a fishing rod.
+; Fish for monsters with rod e in encounter group d.
+; Return monster d at level e.
+
+ push af
+ push bc
+ push hl
+
+ ld b, e
+ call GetFishGroupIndex
+
+ ld hl, FishGroups
+rept FISHGROUP_DATA_LENGTH
+ add hl, de
+endr
+ call .Fish
+
+ pop hl
+ pop bc
+ pop af
+ ret
+
+.Fish:
+; Fish for monsters with rod b from encounter data in FishGroup at hl.
+; Return monster d at level e.
+
+ call Random
+ cp [hl]
+ jr nc, .no_bite
+
+ ; Get encounter data by rod:
+ ; 0: Old
+ ; 1: Good
+ ; 2: Super
+ inc hl
+ ld e, b
+ ld d, 0
+ add hl, de
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+
+ ; Compare the encounter chance to select a Pokemon.
+ call Random
+.loop
+ cp [hl]
+ jr z, .ok
+ jr c, .ok
+ inc hl
+ inc hl
+ inc hl
+ jr .loop
+.ok
+ inc hl
+
+ ; Species 0 reads from a time-based encounter table.
+ ld a, [hli]
+ ld d, a
+ and a
+ call z, .TimeEncounter
+
+ ld e, [hl]
+ ret
+
+.no_bite
+ ld de, 0
+ ret
+
+.TimeEncounter:
+ ; The level byte is repurposed as the index for the new table.
+ ld e, [hl]
+ ld d, 0
+ ld hl, TimeFishGroups
+rept 4
+ add hl, de
+endr
+
+ ld a, [wTimeOfDay]
+ maskbits NUM_DAYTIMES
+ cp NITE_F
+ jr c, .time_species
+ inc hl
+ inc hl
+
+.time_species
+ ld d, [hl]
+ inc hl
+ ret
+
+GetFishGroupIndex:
+; Return the index of fishgroup d in de.
+
+ ld a, d
+ cp FISHGROUP_QWILFISH
+ jr z, .qwilfish
+ cp FISHGROUP_REMORAID
+ jr z, .remoraid
+
+.done
+ dec d
+ ld e, d
+ ld d, 0
+ ret
+
+.qwilfish
+ ld a, [wFishingSwarmFlag]
+ cp FISHSWARM_QWILFISH
+ jr nz, .done
+ ld d, FISHGROUP_QWILFISH_SWARM
+ jr .done
+
+.remoraid
+ ld a, [wFishingSwarmFlag]
+ cp FISHSWARM_REMORAID
+ jr nz, .done
+ ld d, FISHGROUP_REMORAID_SWARM
+ jr .done
+
+INCLUDE "data/wild/fish.asm"
diff --git a/engine/overworld/landmarks.asm b/engine/overworld/landmarks.asm
new file mode 100644
index 00000000..bee64c75
--- /dev/null
+++ b/engine/overworld/landmarks.asm
@@ -0,0 +1,82 @@
+GetLandmarkCoords:
+; Return coordinates (d, e) of landmark e.
+ push hl
+ ld l, e
+ ld h, 0
+ add hl, hl
+ add hl, hl
+ ld de, Landmarks
+ add hl, de
+ ld a, [hli]
+ ld e, a
+ ld d, [hl]
+ pop hl
+ ret
+
+GetLandmarkName::
+; Copy the name of landmark e to wStringBuffer1.
+ push hl
+ push de
+ push bc
+
+ ld l, e
+ ld h, 0
+ add hl, hl
+ add hl, hl
+ ld de, Landmarks + 2
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+
+ ld de, wStringBuffer1
+ ld c, 18
+.copy
+ ld a, [hli]
+ ld [de], a
+ inc de
+ dec c
+ jr nz, .copy
+
+ pop bc
+ pop de
+ pop hl
+ ret
+
+INCLUDE "data/maps/landmarks.asm"
+
+RegionCheck:
+; Checks if the player is in Kanto or Johto.
+; If in Johto, returns 0 in e.
+; If in Kanto, returns 1 in e.
+ ld a, [wMapGroup]
+ ld b, a
+ ld a, [wMapNumber]
+ ld c, a
+ call GetWorldMapLocation
+ cp LANDMARK_FAST_SHIP ; S.S. Aqua
+ jr z, .johto
+ cp LANDMARK_SPECIAL
+ jr nz, .checkagain
+
+; In a special map, get the backup map group / map id
+ ld a, [wBackupMapGroup]
+ ld b, a
+ ld a, [wBackupMapNumber]
+ ld c, a
+ call GetWorldMapLocation
+
+.checkagain
+ cp KANTO_LANDMARK
+ jr c, .johto
+
+; Victory Road area is considered to be Johto.
+ cp LANDMARK_VICTORY_ROAD
+ jr c, .kanto
+
+.johto
+ ld e, JOHTO_REGION
+ ret
+.kanto
+ ld e, KANTO_REGION
+ ret
diff --git a/main.asm b/main.asm
index 5a04b02d..dc5e0644 100644
--- a/main.asm
+++ b/main.asm
@@ -593,13 +593,9 @@ SECTION "bank24", ROMX
INCLUDE "engine/phone/phone.asm"
INCLUDE "engine/rtc/timeset.asm"
INCLUDE "engine/pokegear/pokegear.asm"
+INCLUDE "engine/overworld/landmarks.asm"
+INCLUDE "engine/events/fish.asm"
-GetLandmarkCoords::
- dr $92355, $92364
-GetLandmarkName::
- dr $92364, $9297a
-Fish::
- dr $9297a, $92c36
_SlotMachine::
dr $92c36, $93f86