aboutsummaryrefslogtreecommitdiffstats
path: root/data/trainers
diff options
context:
space:
mode:
authordannye <33dannye@gmail.com>2020-11-04 00:06:44 -0600
committerdannye <33dannye@gmail.com>2020-11-04 00:06:44 -0600
commit5647ca687b92954dcf37a6ea6bfbc9a341c32de4 (patch)
treedde1937a1bfdb3a835f4155e1c2eb8f1aaf86f63 /data/trainers
parentMerge pull request #55 from Deokishisu/patch-1 (diff)
downloadpokeyellow-5647ca687b92954dcf37a6ea6bfbc9a341c32de4.tar.gz
pokeyellow-5647ca687b92954dcf37a6ea6bfbc9a341c32de4.tar.xz
pokeyellow-5647ca687b92954dcf37a6ea6bfbc9a341c32de4.zip
Sync with pokered
Diffstat (limited to 'data/trainers')
-rw-r--r--data/trainers/ai_pointers.asm52
-rwxr-xr-xdata/trainers/encounter_types.asm17
-rw-r--r--data/trainers/move_choices.asm57
-rw-r--r--data/trainers/name_pointers.asm71
-rwxr-xr-xdata/trainers/names.asm48
-rwxr-xr-xdata/trainers/parties.asm749
-rwxr-xr-xdata/trainers/pic_pointers_money.asm55
-rwxr-xr-xdata/trainers/special_moves.asm160
8 files changed, 1209 insertions, 0 deletions
diff --git a/data/trainers/ai_pointers.asm b/data/trainers/ai_pointers.asm
new file mode 100644
index 00000000..9008be86
--- /dev/null
+++ b/data/trainers/ai_pointers.asm
@@ -0,0 +1,52 @@
+TrainerAIPointers:
+ ; one entry per trainer class
+ ; first byte, number of times (per Pokémon) it can occur
+ ; next two bytes, pointer to AI subroutine for trainer class
+ ; subroutines are defined in engine/battle/trainer_ai.asm
+ dbw 3, GenericAI
+ dbw 3, GenericAI
+ dbw 3, GenericAI
+ dbw 3, GenericAI
+ dbw 3, GenericAI
+ dbw 3, GenericAI
+ dbw 3, GenericAI
+ dbw 3, GenericAI
+ dbw 3, GenericAI
+ dbw 3, GenericAI
+ dbw 3, GenericAI
+ dbw 3, GenericAI
+ dbw 3, JugglerAI ; unused_juggler
+ dbw 3, GenericAI
+ dbw 3, GenericAI
+ dbw 3, GenericAI
+ dbw 3, GenericAI
+ dbw 3, GenericAI
+ dbw 3, GenericAI
+ dbw 3, GenericAI
+ dbw 3, JugglerAI ; juggler
+ dbw 3, GenericAI
+ dbw 3, GenericAI
+ dbw 2, BlackbeltAI ; blackbelt
+ dbw 3, GenericAI
+ dbw 3, GenericAI
+ dbw 1, GenericAI ; chief
+ dbw 3, GenericAI
+ dbw 1, GiovanniAI ; giovanni
+ dbw 3, GenericAI
+ dbw 2, CooltrainerMAI ; cooltrainerm
+ dbw 1, CooltrainerFAI ; cooltrainerf
+ dbw 2, BrunoAI ; bruno
+ dbw 5, BrockAI ; brock
+ dbw 1, MistyAI ; misty
+ dbw 1, LtSurgeAI ; surge
+ dbw 1, ErikaAI ; erika
+ dbw 2, KogaAI ; koga
+ dbw 2, BlaineAI ; blaine
+ dbw 1, SabrinaAI ; sabrina
+ dbw 3, GenericAI
+ dbw 1, Sony2AI ; sony2
+ dbw 1, Sony3AI ; sony3
+ dbw 2, LoreleiAI ; lorelei
+ dbw 3, GenericAI
+ dbw 2, AgathaAI ; agatha
+ dbw 1, LanceAI ; lance
diff --git a/data/trainers/encounter_types.asm b/data/trainers/encounter_types.asm
new file mode 100755
index 00000000..5bca2517
--- /dev/null
+++ b/data/trainers/encounter_types.asm
@@ -0,0 +1,17 @@
+FemaleTrainerList::
+ db OPP_LASS
+ db OPP_JR_TRAINER_F
+ db OPP_BEAUTY
+ db OPP_COOLTRAINER_F
+ db -1 ; end
+
+EvilTrainerList::
+ db OPP_UNUSED_JUGGLER
+ db OPP_GAMBLER
+ db OPP_ROCKER
+ db OPP_JUGGLER
+ db OPP_CHIEF
+ db OPP_SCIENTIST
+ db OPP_GIOVANNI
+ db OPP_ROCKET
+ db -1 ; end
diff --git a/data/trainers/move_choices.asm b/data/trainers/move_choices.asm
new file mode 100644
index 00000000..dd8277dc
--- /dev/null
+++ b/data/trainers/move_choices.asm
@@ -0,0 +1,57 @@
+move_choices: MACRO
+REPT _NARG
+ db \1
+ shift
+ENDR
+ db 0 ; end
+ENDM
+
+; move choice modification methods that are applied for each trainer class
+TrainerClassMoveChoiceModifications:
+ move_choices ; YOUNGSTER
+ move_choices 1 ; BUG CATCHER
+ move_choices 1 ; LASS
+ move_choices 1, 3 ; SAILOR
+ move_choices 1 ; JR_TRAINER_M
+ move_choices 1 ; JR_TRAINER_F
+ move_choices 1, 2, 3 ; POKEMANIAC
+ move_choices 1, 2 ; SUPER_NERD
+ move_choices 1 ; HIKER
+ move_choices 1 ; BIKER
+ move_choices 1, 3 ; BURGLAR
+ move_choices 1 ; ENGINEER
+ move_choices 1, 2 ; UNUSED_JUGGLER
+ move_choices 1, 3 ; FISHER
+ move_choices 1, 3 ; SWIMMER
+ move_choices ; CUE_BALL
+ move_choices 1 ; GAMBLER
+ move_choices 1, 3 ; BEAUTY
+ move_choices 1, 2 ; PSYCHIC_TR
+ move_choices 1 ; ROCKER
+ move_choices 1 ; JUGGLER
+ move_choices 1 ; TAMER
+ move_choices 1 ; BIRD_KEEPER
+ move_choices 1 ; BLACKBELT
+ move_choices 1 ; RIVAL1
+ move_choices 1, 3 ; PROF_OAK
+ move_choices 1, 2 ; CHIEF
+ move_choices 1, 2 ; SCIENTIST
+ move_choices 1, 3 ; GIOVANNI
+ move_choices 1 ; ROCKET
+ move_choices 1, 3 ; COOLTRAINER_M
+ move_choices 1, 3 ; COOLTRAINER_F
+ move_choices 1 ; BRUNO
+ move_choices 1 ; BROCK
+ move_choices 1, 3 ; MISTY
+ move_choices 1 ; LT_SURGE
+ move_choices 1, 3 ; ERIKA
+ move_choices 1, 3 ; KOGA
+ move_choices 1 ; BLAINE
+ move_choices 1 ; SABRINA
+ move_choices 1, 2 ; GENTLEMAN
+ move_choices 1, 3 ; RIVAL2
+ move_choices 1, 3 ; RIVAL3
+ move_choices 1, 2, 3 ; LORELEI
+ move_choices 1 ; CHANNELER
+ move_choices 1 ; AGATHA
+ move_choices 1, 3 ; LANCE
diff --git a/data/trainers/name_pointers.asm b/data/trainers/name_pointers.asm
new file mode 100644
index 00000000..98e2e406
--- /dev/null
+++ b/data/trainers/name_pointers.asm
@@ -0,0 +1,71 @@
+TrainerNamePointers:
+; what is the point of these?
+ dw .YoungsterName
+ dw .BugCatcherName
+ dw .LassName
+ dw wTrainerName
+ dw .JrTrainerMName
+ dw .JrTrainerFName
+ dw .PokemaniacName
+ dw .SuperNerdName
+ dw wTrainerName
+ dw wTrainerName
+ dw .BurglarName
+ dw .EngineerName
+ dw .UnusedJugglerName
+ dw wTrainerName
+ dw .SwimmerName
+ dw wTrainerName
+ dw wTrainerName
+ dw .BeautyName
+ dw wTrainerName
+ dw .RockerName
+ dw .JugglerName
+ dw wTrainerName
+ dw wTrainerName
+ dw .BlackbeltName
+ dw wTrainerName
+ dw .ProfOakName
+ dw .ChiefName
+ dw .ScientistName
+ dw wTrainerName
+ dw .RocketName
+ dw .CooltrainerMName
+ dw .CooltrainerFName
+ dw wTrainerName
+ dw wTrainerName
+ dw wTrainerName
+ dw wTrainerName
+ dw wTrainerName
+ dw wTrainerName
+ dw wTrainerName
+ dw wTrainerName
+ dw wTrainerName
+ dw wTrainerName
+ dw wTrainerName
+ dw wTrainerName
+ dw wTrainerName
+ dw wTrainerName
+ dw wTrainerName
+
+.YoungsterName: db "YOUNGSTER@"
+.BugCatcherName: db "BUG CATCHER@"
+.LassName: db "LASS@"
+.JrTrainerMName: db "JR.TRAINER♂@"
+.JrTrainerFName: db "JR.TRAINER♀@"
+.PokemaniacName: db "POKéMANIAC@"
+.SuperNerdName: db "SUPER NERD@"
+.BurglarName: db "BURGLAR@"
+.EngineerName: db "ENGINEER@"
+.UnusedJugglerName: db "JUGGLER@"
+.SwimmerName: db "SWIMMER@"
+.BeautyName: db "BEAUTY@"
+.RockerName: db "ROCKER@"
+.JugglerName: db "JUGGLER@"
+.BlackbeltName: db "BLACKBELT@"
+.ProfOakName: db "PROF.OAK@"
+.ChiefName: db "CHIEF@"
+.ScientistName: db "SCIENTIST@"
+.RocketName: db "ROCKET@"
+.CooltrainerMName: db "COOLTRAINER♂@"
+.CooltrainerFName: db "COOLTRAINER♀@"
diff --git a/data/trainers/names.asm b/data/trainers/names.asm
new file mode 100755
index 00000000..d8e1f550
--- /dev/null
+++ b/data/trainers/names.asm
@@ -0,0 +1,48 @@
+TrainerNames::
+ db "YOUNGSTER@"
+ db "BUG CATCHER@"
+ db "LASS@"
+ db "SAILOR@"
+ db "JR.TRAINER♂@"
+ db "JR.TRAINER♀@"
+ db "POKéMANIAC@"
+ db "SUPER NERD@"
+ db "HIKER@"
+ db "BIKER@"
+ db "BURGLAR@"
+ db "ENGINEER@"
+ db "JUGGLER@"
+ db "FISHERMAN@"
+ db "SWIMMER@"
+ db "CUE BALL@"
+ db "GAMBLER@"
+ db "BEAUTY@"
+ db "PSYCHIC@"
+ db "ROCKER@"
+ db "JUGGLER@"
+ db "TAMER@"
+ db "BIRD KEEPER@"
+ db "BLACKBELT@"
+ db "RIVAL1@"
+ db "PROF.OAK@"
+ db "CHIEF@"
+ db "SCIENTIST@"
+ db "GIOVANNI@"
+ db "ROCKET@"
+ db "COOLTRAINER♂@"
+ db "COOLTRAINER♀@"
+ db "BRUNO@"
+ db "BROCK@"
+ db "MISTY@"
+ db "LT.SURGE@"
+ db "ERIKA@"
+ db "KOGA@"
+ db "BLAINE@"
+ db "SABRINA@"
+ db "GENTLEMAN@"
+ db "RIVAL2@"
+ db "RIVAL3@"
+ db "LORELEI@"
+ db "CHANNELER@"
+ db "AGATHA@"
+ db "LANCE@"
diff --git a/data/trainers/parties.asm b/data/trainers/parties.asm
new file mode 100755
index 00000000..af33a273
--- /dev/null
+++ b/data/trainers/parties.asm
@@ -0,0 +1,749 @@
+TrainerDataPointers:
+ dw YoungsterData
+ dw BugCatcherData
+ dw LassData
+ dw SailorData
+ dw JrTrainerMData
+ dw JrTrainerFData
+ dw PokemaniacData
+ dw SuperNerdData
+ dw HikerData
+ dw BikerData
+ dw BurglarData
+ dw EngineerData
+ dw UnusedJugglerData
+ dw FisherData
+ dw SwimmerData
+ dw CueBallData
+ dw GamblerData
+ dw BeautyData
+ dw PsychicData
+ dw RockerData
+ dw JugglerData
+ dw TamerData
+ dw BirdKeeperData
+ dw BlackbeltData
+ dw Green1Data
+ dw ProfOakData
+ dw ChiefData
+ dw ScientistData
+ dw GiovanniData
+ dw RocketData
+ dw CooltrainerMData
+ dw CooltrainerFData
+ dw BrunoData
+ dw BrockData
+ dw MistyData
+ dw LtSurgeData
+ dw ErikaData
+ dw KogaData
+ dw BlaineData
+ dw SabrinaData
+ dw GentlemanData
+ dw Green2Data
+ dw Green3Data
+ dw LoreleiData
+ dw ChannelerData
+ dw AgathaData
+ dw LanceData
+
+; if first byte != $FF, then
+ ; first byte is level (of all pokemon on this team)
+ ; all the next bytes are pokemon species
+ ; null-terminated
+; if first byte == $FF, then
+ ; first byte is $FF (obviously)
+ ; every next two bytes are a level and species
+ ; null-terminated
+
+YoungsterData:
+; Route 3
+ db 11, RATTATA, EKANS, 0
+ db 14, SPEAROW, 0
+; Mt. Moon 1F
+ db 10, RATTATA, RATTATA, ZUBAT, 0
+; Route 24
+ db 14, RATTATA, EKANS, ZUBAT, 0
+; Route 25
+ db 15, RATTATA, SPEAROW, 0
+ db 17, SLOWPOKE, 0
+ db 14, EKANS, SANDSHREW, 0
+; SS Anne 1F Rooms
+ db 21, NIDORAN_M, 0
+; Route 11
+ db 21, EKANS, 0
+ db 19, SANDSHREW, ZUBAT, 0
+ db 17, RATTATA, RATTATA, RATICATE, 0
+ db 18, NIDORAN_M, NIDORINO, 0
+; Unused
+ db 17, SPEAROW, RATTATA, RATTATA, SPEAROW, 0
+ db 24, SANDSHREW, 0
+
+BugCatcherData:
+; Viridian Forest
+ db 7, CATERPIE, CATERPIE, 0
+ db 6, METAPOD, CATERPIE, METAPOD, 0
+ db 10, CATERPIE, 0
+; Route 3
+ db 10, CATERPIE, WEEDLE, CATERPIE, 0
+ db 9, WEEDLE, KAKUNA, CATERPIE, METAPOD, 0
+ db 11, CATERPIE, METAPOD, 0
+; Mt. Moon 1F
+ db 11, WEEDLE, KAKUNA, 0
+ db 10, CATERPIE, METAPOD, CATERPIE, 0
+; Route 24
+ db 14, CATERPIE, WEEDLE, 0
+; Route 6
+ db 16, WEEDLE, CATERPIE, WEEDLE, 0
+ db 20, BUTTERFREE, 0
+; Unused
+ db 18, METAPOD, CATERPIE, VENONAT, 0
+; Route 9
+ db 19, BEEDRILL, BEEDRILL, 0
+ db 20, CATERPIE, WEEDLE, VENONAT, 0
+ db 8, CATERPIE, METAPOD, 0
+
+LassData:
+; Route 3
+ db 9, PIDGEY, PIDGEY, 0
+ db 10, RATTATA, NIDORAN_M, 0
+ db 14, JIGGLYPUFF, 0
+; Route 4
+ db 31, PARAS, PARAS, PARASECT, 0
+; Mt. Moon 1F
+ db 11, ODDISH, BELLSPROUT, 0
+ db 14, CLEFAIRY, 0
+; Route 24
+ db 16, PIDGEY, NIDORAN_F, 0
+ db 14, PIDGEY, NIDORAN_F, 0
+; Route 25
+ db 15, NIDORAN_M, NIDORAN_F, 0
+ db 13, ODDISH, PIDGEY, ODDISH, 0
+; SS Anne 1F Rooms
+ db 18, PIDGEY, NIDORAN_F, 0
+; SS Anne 2F Rooms
+ db 20, JIGGLYPUFF, 0
+; Route 8
+ db 23, NIDORAN_F, NIDORINA, 0
+ db 24, MEOWTH, MEOWTH, MEOWTH, 0
+ db 19, PIDGEY, RATTATA, NIDORAN_F, MEOWTH, NIDORAN_M, 0
+ db 22, CLEFAIRY, CLEFAIRY, 0
+; Celadon Gym
+ db 23, BELLSPROUT, WEEPINBELL, 0
+ db 23, ODDISH, GLOOM, 0
+ db 6, NIDORAN_F, NIDORAN_M, 0
+
+SailorData:
+; SS Anne Stern
+ db 18, MACHOP, SHELLDER, 0
+ db 17, MACHOP, TENTACOOL, 0
+; SS Anne B1F Rooms
+ db 21, SHELLDER, 0
+ db 17, HORSEA, SHELLDER, TENTACOOL, 0
+ db 18, TENTACOOL, STARYU, 0
+ db 17, HORSEA, HORSEA, HORSEA, 0
+ db 20, MACHOP, 0
+; Vermilion Gym
+ db 24, MAGNEMITE, 0
+
+JrTrainerMData:
+; Pewter Gym
+ db 9, DIGLETT, SANDSHREW, 0
+; Route 24/Route 25
+ db 14, RATTATA, EKANS, 0
+; Route 24
+ db 18, MANKEY, 0
+; Route 6
+ db 20, SQUIRTLE, 0
+ db 16, SPEAROW, RATICATE, 0
+; Unused
+ db 18, DIGLETT, DIGLETT, SANDSHREW, 0
+; Route 9
+ db 21, GROWLITHE, CHARMANDER, 0
+ db 19, RATTATA, DIGLETT, EKANS, SANDSHREW, 0
+; Route 12
+ db 29, NIDORAN_M, NIDORINO, 0
+ db 16, WEEPINBELL, 0
+
+JrTrainerFData:
+; Cerulean Gym
+ db 19, GOLDEEN, 0
+; Route 6
+ db 16, ODDISH, BELLSPROUT, 0
+ db 16, PIDGEY, PIDGEY, PIDGEY, 0
+; Unused
+ db 22, BULBASAUR, 0
+; Route 9
+ db 18, ODDISH, BELLSPROUT, ODDISH, BELLSPROUT, 0
+ db 23, MEOWTH, 0
+; Route 10
+ db 20, JIGGLYPUFF, CLEFAIRY, 0
+ db 21, PIDGEY, PIDGEOTTO, 0
+; Rock Tunnel B1F
+ db 21, JIGGLYPUFF, PIDGEY, MEOWTH, 0
+ db 22, ODDISH, BULBASAUR, 0
+; Celadon Gym
+ db 24, BULBASAUR, IVYSAUR, 0
+; Route 13
+ db 24, PIDGEY, MEOWTH, RATTATA, PIDGEY, MEOWTH, 0
+ db 30, POLIWAG, POLIWAG, 0
+ db 27, PIDGEY, MEOWTH, PIDGEY, PIDGEOTTO, 0
+ db 28, GOLDEEN, POLIWAG, HORSEA, 0
+; Route 20
+ db 31, GOLDEEN, SEAKING, 0
+; Rock Tunnel 1F
+ db 22, BELLSPROUT, CLEFAIRY, 0
+ db 20, MEOWTH, ODDISH, PIDGEY, 0
+ db 19, PIDGEY, RATTATA, RATTATA, BELLSPROUT, 0
+; Route 15
+ db 28, GLOOM, ODDISH, ODDISH, 0
+ db 29, PIDGEY, PIDGEOTTO, 0
+ db 33, CLEFAIRY, 0
+ db 29, BELLSPROUT, ODDISH, TANGELA, 0
+; Route 20
+ db 30, TENTACOOL, HORSEA, SEEL, 0
+ db 20, CUBONE, 0
+
+PokemaniacData:
+; Route 10
+ db 30, RHYHORN, LICKITUNG, 0
+ db 20, CUBONE, SLOWPOKE, 0
+; Rock Tunnel B1F
+ db 20, SLOWPOKE, SLOWPOKE, SLOWPOKE, 0
+ db 22, CHARMANDER, CUBONE, 0
+ db 25, SLOWPOKE, 0
+; Victory Road 2F
+ db 40, CHARMELEON, LAPRAS, LICKITUNG, 0
+; Rock Tunnel 1F
+ db 23, CUBONE, SLOWPOKE, 0
+
+SuperNerdData:
+; Mt. Moon 1F
+ db 11, MAGNEMITE, VOLTORB, 0
+; Mt. Moon B2F
+ db 12, GRIMER, VOLTORB, KOFFING, 0
+; Route 8
+ db 20, VOLTORB, KOFFING, VOLTORB, MAGNEMITE, 0
+ db 22, GRIMER, MUK, GRIMER, 0
+ db 26, KOFFING, 0
+; Unused
+ db 22, KOFFING, MAGNEMITE, WEEZING, 0
+ db 20, MAGNEMITE, MAGNEMITE, KOFFING, MAGNEMITE, 0
+ db 24, MAGNEMITE, VOLTORB, 0
+; Cinnabar Gym
+ db 36, VULPIX, VULPIX, NINETALES, 0
+ db 34, PONYTA, CHARMANDER, VULPIX, GROWLITHE, 0
+ db 41, RAPIDASH, 0
+ db 37, GROWLITHE, VULPIX, 0
+
+HikerData:
+; Mt. Moon 1F
+ db 10, GEODUDE, GEODUDE, ONIX, 0
+; Route 25
+ db 15, MACHOP, GEODUDE, 0
+ db 13, GEODUDE, GEODUDE, MACHOP, GEODUDE, 0
+ db 17, ONIX, 0
+; Route 9
+ db 21, GEODUDE, ONIX, 0
+ db 20, GEODUDE, MACHOP, GEODUDE, 0
+; Route 10
+ db 21, GEODUDE, ONIX, 0
+ db 19, ONIX, GRAVELER, 0
+; Rock Tunnel B1F
+ db 21, GEODUDE, GEODUDE, GRAVELER, 0
+ db 25, GEODUDE, 0
+; Route 9/Rock Tunnel B1F
+ db 20, MACHOP, ONIX, 0
+; Rock Tunnel 1F
+ db 19, GEODUDE, MACHOP, GEODUDE, GEODUDE, 0
+ db 20, ONIX, ONIX, GEODUDE, 0
+ db 21, GEODUDE, GRAVELER, 0
+
+BikerData:
+; Route 13
+ db 28, KOFFING, KOFFING, KOFFING, 0
+; Route 14
+ db 29, KOFFING, GRIMER, 0
+; Route 15
+ db 25, KOFFING, KOFFING, WEEZING, KOFFING, GRIMER, 0
+ db 28, KOFFING, GRIMER, WEEZING, 0
+; Route 16
+ db 29, GRIMER, KOFFING, 0
+ db 33, WEEZING, 0
+ db 26, GRIMER, GRIMER, GRIMER, GRIMER, 0
+; Route 17
+ ; From https://www.smogon.com/smog/issue27/glitch:
+ ; 0E:5FC2 is offset of the ending 0 for this first Biker on Route 17.
+ ; BaseStats + (MonBaseStatsEnd - MonBaseStats) * (000 - 1) = $5FC2;
+ ; that's the formula from GetMonHeader for the base stats of mon #000.
+ ; (BaseStats = $43DE and BANK(BaseStats) = $0E.)
+ ; Finally, PokedexOrder lists 0 as the dex ID for every MissingNo.
+ ; The result is that this data gets interpreted as the base stats
+ ; for MissingNo: 0, 33, MUK, 0, 29, VOLTORB, VOLTORB, 0, ..., 28, GRIMER, GRIMER.
+ db 28, WEEZING, KOFFING, WEEZING, 0
+ db 33, MUK, 0
+ db 29, VOLTORB, VOLTORB, 0
+ db 29, WEEZING, MUK, 0
+ db 25, KOFFING, WEEZING, KOFFING, KOFFING, WEEZING, 0
+; Route 14
+ db 26, KOFFING, KOFFING, GRIMER, KOFFING, 0
+ db 28, GRIMER, GRIMER, KOFFING, 0
+ db 29, KOFFING, MUK, 0
+
+BurglarData:
+; Unused
+ db 29, GROWLITHE, VULPIX, 0
+ db 33, GROWLITHE, 0
+ db 28, VULPIX, CHARMANDER, PONYTA, 0
+; Cinnabar Gym
+ db 36, GROWLITHE, VULPIX, NINETALES, 0
+ db 41, PONYTA, 0
+ db 37, VULPIX, GROWLITHE, 0
+; Mansion 2F
+ db 34, CHARMANDER, CHARMELEON, 0
+; Mansion 3F
+ db 38, NINETALES, 0
+; Mansion B1F
+ db 34, GROWLITHE, PONYTA, 0
+
+EngineerData:
+; Unused
+ db 21, VOLTORB, MAGNEMITE, 0
+; Route 11
+ db 21, MAGNEMITE, 0
+ db 18, MAGNEMITE, MAGNEMITE, MAGNETON, 0
+
+UnusedJugglerData:
+; none
+
+FisherData:
+; SS Anne 2F Rooms
+ db 17, GOLDEEN, TENTACOOL, GOLDEEN, 0
+; SS Anne B1F Rooms
+ db 17, TENTACOOL, STARYU, SHELLDER, 0
+; Route 12
+ db 22, GOLDEEN, POLIWAG, GOLDEEN, 0
+ db 24, TENTACOOL, GOLDEEN, 0
+ db 27, GOLDEEN, 0
+ db 21, POLIWAG, SHELLDER, GOLDEEN, HORSEA, 0
+; Route 21
+ db 28, SEAKING, GOLDEEN, SEAKING, SEAKING, 0
+ db 31, SHELLDER, CLOYSTER, 0
+ db 27, MAGIKARP, MAGIKARP, MAGIKARP, MAGIKARP, MAGIKARP, MAGIKARP, 0
+ db 33, SEAKING, GOLDEEN, 0
+; Route 12
+ db 24, MAGIKARP, MAGIKARP, 0
+
+SwimmerData:
+; Cerulean Gym
+ db 16, HORSEA, SHELLDER, 0
+; Route 19
+ db 30, TENTACOOL, SHELLDER, 0
+ db 29, GOLDEEN, HORSEA, STARYU, 0
+ db 30, POLIWAG, POLIWHIRL, 0
+ db 27, HORSEA, TENTACOOL, TENTACOOL, GOLDEEN, 0
+ db 29, GOLDEEN, SHELLDER, SEAKING, 0
+ db 30, HORSEA, HORSEA, 0
+ db 27, TENTACOOL, TENTACOOL, STARYU, HORSEA, TENTACRUEL, 0
+; Route 20
+ db 31, SHELLDER, CLOYSTER, 0
+ db 35, STARYU, 0
+ db 28, HORSEA, HORSEA, SEADRA, HORSEA, 0
+; Route 21
+ db 33, SEADRA, TENTACRUEL, 0
+ db 37, STARMIE, 0
+ db 33, STARYU, WARTORTLE, 0
+ db 32, POLIWHIRL, TENTACOOL, SEADRA, 0
+
+CueBallData:
+; Route 16
+ db 28, MACHOP, MANKEY, MACHOP, 0
+ db 29, MANKEY, MACHOP, 0
+ db 33, MACHOP, 0
+; Route 17
+ db 29, MANKEY, PRIMEAPE, 0
+ db 29, MACHOP, MACHOKE, 0
+ db 33, MACHOKE, 0
+ db 26, MANKEY, MANKEY, MACHOKE, MACHOP, 0
+ db 29, PRIMEAPE, MACHOKE, 0
+; Route 21
+ db 31, TENTACOOL, TENTACOOL, TENTACRUEL, 0
+
+GamblerData:
+; Route 11
+ db 18, POLIWAG, HORSEA, 0
+ db 18, BELLSPROUT, ODDISH, 0
+ db 18, VOLTORB, MAGNEMITE, 0
+ db 18, GROWLITHE, VULPIX, 0
+; Route 8
+ db 22, POLIWAG, POLIWAG, POLIWHIRL, 0
+; Unused
+ db 22, ONIX, GEODUDE, GRAVELER, 0
+; Route 8
+ db 24, GROWLITHE, VULPIX, 0
+
+BeautyData:
+; Celadon Gym
+ db 21, ODDISH, BELLSPROUT, ODDISH, BELLSPROUT, 0
+ db 24, BELLSPROUT, BELLSPROUT, 0
+ db 26, EXEGGCUTE, 0
+; Route 13
+ db 27, RATTATA, VULPIX, RATTATA, 0
+ db 29, CLEFAIRY, MEOWTH, 0
+; Route 20
+ db 35, SEAKING, 0
+ db 30, SHELLDER, SHELLDER, CLOYSTER, 0
+ db 31, POLIWAG, SEAKING, 0
+; Route 15
+ db 29, PIDGEOTTO, WIGGLYTUFF, 0
+ db 29, BULBASAUR, IVYSAUR, 0
+; Unused
+ db 33, WEEPINBELL, BELLSPROUT, WEEPINBELL, 0
+; Route 19
+ db 27, POLIWAG, GOLDEEN, SEAKING, GOLDEEN, POLIWAG, 0
+ db 30, GOLDEEN, SEAKING, 0
+ db 29, STARYU, STARYU, STARYU, 0
+; Route 20
+ db 30, SEADRA, HORSEA, SEADRA, 0
+
+PsychicData:
+; Saffron Gym
+ db 31, KADABRA, SLOWPOKE, MR_MIME, KADABRA, 0
+ db 34, MR_MIME, KADABRA, 0
+ db 33, SLOWPOKE, SLOWPOKE, SLOWBRO, 0
+ db 38, SLOWBRO, 0
+
+RockerData:
+; Vermilion Gym
+ db 20, VOLTORB, VOLTORB, VOLTORB, 0
+; Route 12
+ db 29, VOLTORB, ELECTRODE, 0
+
+JugglerData:
+; Silph Co. 5F
+ db 29, KADABRA, MR_MIME, 0
+; Victory Road 2F
+ db 41, DROWZEE, HYPNO, KADABRA, KADABRA, 0
+; Fuchsia Gym
+ db 31, DROWZEE, DROWZEE, KADABRA, DROWZEE, 0
+ db 34, DROWZEE, HYPNO, 0
+; Victory Road 2F
+ db 48, MR_MIME, 0
+; Unused
+ db 33, HYPNO, 0
+; Fuchsia Gym
+ db 38, HYPNO, 0
+ db 34, DROWZEE, KADABRA, 0
+
+TamerData:
+; Fuchsia Gym
+ db 34, SANDSLASH, ARBOK, 0
+ db 33, ARBOK, SANDSLASH, ARBOK, 0
+; Viridian Gym
+ db 43, RHYHORN, 0
+ db 39, ARBOK, TAUROS, 0
+; Victory Road 2F
+ db 44, PERSIAN, GOLDUCK, 0
+; Unused
+ db 42, RHYHORN, PRIMEAPE, ARBOK, TAUROS, 0
+
+BirdKeeperData:
+; Route 13
+ db 29, PIDGEY, PIDGEOTTO, 0
+ db 25, SPEAROW, PIDGEY, PIDGEY, SPEAROW, SPEAROW, 0
+ db 26, PIDGEY, PIDGEOTTO, SPEAROW, FEAROW, 0
+; Route 14
+ db 33, FARFETCHD, 0
+ db 29, SPEAROW, FEAROW, 0
+; Route 15
+ db 26, PIDGEOTTO, FARFETCHD, DODUO, PIDGEY, 0
+ db 28, DODRIO, DODUO, DODUO, 0
+; Route 18
+ db 29, SPEAROW, FEAROW, 0
+ db 34, DODRIO, 0
+ db 26, SPEAROW, SPEAROW, FEAROW, SPEAROW, 0
+; Route 20
+ db 30, FEAROW, FEAROW, PIDGEOTTO, 0
+; Unused
+ db 39, PIDGEOTTO, PIDGEOTTO, PIDGEY, PIDGEOTTO, 0
+ db 42, FARFETCHD, FEAROW, 0
+; Route 14
+ db 28, PIDGEY, DODUO, PIDGEOTTO, 0
+ db 26, PIDGEY, SPEAROW, PIDGEY, FEAROW, 0
+ db 29, PIDGEOTTO, FEAROW, 0
+ db 28, SPEAROW, DODUO, FEAROW, 0
+
+BlackbeltData:
+; Fighting Dojo
+ db 37, HITMONLEE, HITMONCHAN, 0
+ db 31, MANKEY, MANKEY, PRIMEAPE, 0
+ db 32, MACHOP, MACHOKE, 0
+ db 36, PRIMEAPE, 0
+ db 31, MACHOP, MANKEY, PRIMEAPE, 0
+; Viridian Gym
+ db 40, MACHOP, MACHOKE, 0
+ db 43, MACHOKE, 0
+ db 38, MACHOKE, MACHOP, MACHOKE, 0
+; Victory Road 2F
+ db 43, MACHOKE, MACHOP, MACHOKE, 0
+
+Green1Data:
+ db 5, EEVEE, 0
+; Route 22
+ db $FF, 9, SPEAROW, 8, EEVEE, 0
+; Cerulean City
+ db $FF, 18, SPEAROW, 15, SANDSHREW, 15, RATTATA, 17, EEVEE, 0
+
+ProfOakData:
+; Unused
+ db $FF, 66, TAUROS, 67, EXEGGUTOR, 68, ARCANINE, 69, BLASTOISE, 70, GYARADOS, 0
+ db $FF, 66, TAUROS, 67, EXEGGUTOR, 68, ARCANINE, 69, VENUSAUR, 70, GYARADOS, 0
+ db $FF, 66, TAUROS, 67, EXEGGUTOR, 68, ARCANINE, 69, CHARIZARD, 70, GYARADOS, 0
+
+ChiefData:
+; none
+
+ScientistData:
+; Unused
+ db 34, KOFFING, VOLTORB, 0
+; Silph Co. 2F
+ db 26, GRIMER, WEEZING, KOFFING, WEEZING, 0
+ db 28, MAGNEMITE, VOLTORB, MAGNETON, 0
+; Silph Co. 3F/Mansion 1F
+ db 29, ELECTRODE, WEEZING, 0
+; Silph Co. 4F
+ db 33, ELECTRODE, 0
+; Silph Co. 5F
+ db 26, MAGNETON, KOFFING, WEEZING, MAGNEMITE, 0
+; Silph Co. 6F
+ db 25, VOLTORB, KOFFING, MAGNETON, MAGNEMITE, KOFFING, 0
+; Silph Co. 7F
+ db 29, ELECTRODE, MUK, 0
+; Silph Co. 8F
+ db 29, GRIMER, ELECTRODE, 0
+; Silph Co. 9F
+ db 28, VOLTORB, KOFFING, MAGNETON, 0
+; Silph Co. 10F
+ db 29, MAGNEMITE, KOFFING, 0
+; Mansion 3F
+ db 33, MAGNEMITE, MAGNETON, VOLTORB, 0
+; Mansion B1F
+ db 34, MAGNEMITE, ELECTRODE, 0
+
+GiovanniData:
+; Rocket Hideout B4F
+ db $FF, 25, ONIX, 24, RHYHORN, 29, PERSIAN, 0
+; Silph Co. 11F
+ db $FF, 37, NIDORINO, 35, PERSIAN, 37, RHYHORN, 41, NIDOQUEEN, 0
+; Viridian Gym
+ db $FF, 50, DUGTRIO, 53, PERSIAN, 53, NIDOQUEEN, 55, NIDOKING, 55, RHYDON, 0
+
+RocketData:
+; Mt. Moon B2F
+ db 13, RATTATA, ZUBAT, 0
+ db 11, SANDSHREW, RATTATA, ZUBAT, 0
+ db 12, ZUBAT, EKANS, 0
+ db 16, RATICATE, 0
+; Cerulean City
+ db 17, MACHOP, DROWZEE, 0
+; Route 24
+ db 15, EKANS, ZUBAT, 0
+; Game Corner
+ db 20, RATICATE, ZUBAT, 0
+; Rocket Hideout B1F
+ db 21, DROWZEE, MACHOP, 0
+ db 21, RATICATE, RATICATE, 0
+ db 20, GRIMER, KOFFING, KOFFING, 0
+ db 19, RATTATA, RATICATE, RATICATE, RATTATA, 0
+ db 22, GRIMER, KOFFING, 0
+; Rocket Hideout B2F
+ db 17, ZUBAT, KOFFING, GRIMER, ZUBAT, RATICATE, 0
+; Rocket Hideout B3F
+ db 20, RATTATA, RATICATE, DROWZEE, 0
+ db 21, MACHOP, MACHOP, 0
+; Rocket Hideout B4F
+ db 23, SANDSHREW, EKANS, SANDSLASH, 0
+ db 23, EKANS, SANDSHREW, ARBOK, 0
+ db 21, KOFFING, ZUBAT, 0
+; Pokémon Tower 7F
+ db 25, ZUBAT, ZUBAT, GOLBAT, 0
+ db 26, KOFFING, DROWZEE, 0
+ db 23, ZUBAT, RATTATA, RATICATE, ZUBAT, 0
+; Unused
+ db 26, DROWZEE, KOFFING, 0
+; Silph Co. 2F
+ db 29, CUBONE, ZUBAT, 0
+ db 25, GOLBAT, ZUBAT, ZUBAT, RATICATE, ZUBAT, 0
+; Silph Co. 3F
+ db 28, RATICATE, HYPNO, RATICATE, 0
+; Silph Co. 4F
+ db 29, MACHOP, DROWZEE, 0
+ db 28, EKANS, ZUBAT, CUBONE, 0
+; Silph Co. 5F
+ db 33, ARBOK, 0
+ db 33, HYPNO, 0
+; Silph Co. 6F
+ db 29, MACHOP, MACHOKE, 0
+ db 28, ZUBAT, ZUBAT, GOLBAT, 0
+; Silph Co. 7F
+ db 26, RATICATE, ARBOK, KOFFING, GOLBAT, 0
+ db 29, CUBONE, CUBONE, 0
+ db 29, SANDSHREW, SANDSLASH, 0
+; Silph Co. 8F
+ db 26, RATICATE, ZUBAT, GOLBAT, RATTATA, 0
+ db 28, WEEZING, GOLBAT, KOFFING, 0
+; Silph Co. 9F
+ db 28, DROWZEE, GRIMER, MACHOP, 0
+ db 28, GOLBAT, DROWZEE, HYPNO, 0
+; Silph Co. 10F
+ db 33, MACHOKE, 0
+; Silph Co. 11F
+ db 25, RATTATA, RATTATA, ZUBAT, RATTATA, EKANS, 0
+ db 32, CUBONE, DROWZEE, MAROWAK, 0
+;JessieJamesData:
+ db 14, EKANS, MEOWTH, KOFFING, 0
+ db 25, KOFFING, MEOWTH, EKANS, 0
+ db 27, MEOWTH, ARBOK, WEEZING, 0
+ db 31, WEEZING, ARBOK, MEOWTH, 0
+; unused JessieJames trainers
+ db 16, KOFFING, 0
+ db 27, KOFFING, 0
+ db 29, WEEZING, 0
+ db 33, WEEZING, 0
+
+CooltrainerMData:
+; Viridian Gym
+ db 39, NIDORINO, NIDOKING, 0
+; Victory Road 3F
+ db 43, EXEGGUTOR, CLOYSTER, ARCANINE, 0
+ db 43, KINGLER, TENTACRUEL, BLASTOISE, 0
+; Unused
+ db 45, KINGLER, STARMIE, 0
+; Victory Road 1F
+ db 42, IVYSAUR, WARTORTLE, CHARMELEON, CHARIZARD, 0
+; Unused
+ db 44, IVYSAUR, WARTORTLE, CHARMELEON, 0
+ db 49, NIDOKING, 0
+ db 44, KINGLER, CLOYSTER, 0
+; Viridian Gym
+ db 39, SANDSLASH, DUGTRIO, 0
+ db 43, RHYHORN, 0
+
+CooltrainerFData:
+; Celadon Gym
+ db 24, WEEPINBELL, GLOOM, IVYSAUR, 0
+; Victory Road 3F
+ db 43, BELLSPROUT, WEEPINBELL, VICTREEBEL, 0
+ db 43, PARASECT, DEWGONG, CHANSEY, 0
+; Unused
+ db 46, VILEPLUME, BUTTERFREE, 0
+; Victory Road 1F
+ db 44, PERSIAN, NINETALES, 0
+; Unused
+ db 45, IVYSAUR, VENUSAUR, 0
+ db 45, NIDORINA, NIDOQUEEN, 0
+ db 43, PERSIAN, NINETALES, RAICHU, 0
+
+BrunoData:
+ db $FF, 53, ONIX, 55, HITMONCHAN, 55, HITMONLEE, 56, ONIX, 58, MACHAMP, 0
+
+BrockData:
+ db $FF, 10, GEODUDE, 12, ONIX, 0
+
+MistyData:
+ db $FF, 18, STARYU, 21, STARMIE, 0
+
+LtSurgeData:
+ db $FF, 28, RAICHU, 0
+
+ErikaData:
+ db $FF, 30, TANGELA, 32, WEEPINBELL, 32, GLOOM, 0
+
+KogaData:
+ db $FF, 44, VENONAT, 46, VENONAT, 48, VENONAT, 50, VENOMOTH, 0
+
+BlaineData:
+ db $FF, 48, NINETALES, 50, RAPIDASH, 54, ARCANINE, 0
+
+SabrinaData:
+ db $FF, 50, ABRA, 50, KADABRA, 50, ALAKAZAM, 0
+
+GentlemanData:
+; SS Anne 1F Rooms
+ db 18, GROWLITHE, GROWLITHE, 0
+ db 19, NIDORAN_M, NIDORAN_F, 0
+; SS Anne 2F Rooms/Vermilion Gym
+ db 22, VOLTORB, MAGNEMITE, 0
+; Unused
+ db 48, PRIMEAPE, 0
+; SS Anne 2F Rooms
+ db 17, GROWLITHE, PONYTA, 0
+
+Green2Data:
+; SS Anne 2F
+ db $FF, 19, SPEAROW, 16, RATTATA, 18, SANDSHREW, 20, EEVEE, 0
+; Pokémon Tower 2F
+ db $FF, 25, FEAROW, 23, SHELLDER, 22, VULPIX, 20, SANDSHREW, 25, EEVEE, 0
+ db $FF, 25, FEAROW, 23, MAGNEMITE, 22, SHELLDER, 20, SANDSHREW, 25, EEVEE, 0
+ db $FF, 25, FEAROW, 23, VULPIX, 22, MAGNEMITE, 20, SANDSHREW, 25, EEVEE, 0
+; Silph Co. 7F
+ db $FF, 38, SANDSLASH, 35, NINETALES, 37, CLOYSTER, 35, KADABRA, 40, JOLTEON, 0
+ db $FF, 38, SANDSLASH, 35, CLOYSTER, 37, MAGNETON, 35, KADABRA, 40, FLAREON, 0
+ db $FF, 38, SANDSLASH, 35, MAGNETON, 37, NINETALES, 35, KADABRA, 40, VAPOREON, 0
+; Route 22
+ db $FF, 47, SANDSLASH, 45, EXEGGCUTE, 45, NINETALES, 47, CLOYSTER, 50, KADABRA, 53, JOLTEON, 0
+ db $FF, 47, SANDSLASH, 45, EXEGGCUTE, 45, CLOYSTER, 47, MAGNETON, 50, KADABRA, 53, FLAREON, 0
+ db $FF, 47, SANDSLASH, 45, EXEGGCUTE, 45, MAGNETON, 47, NINETALES, 50, KADABRA, 53, VAPOREON, 0
+
+Green3Data:
+ db $FF, 61, SANDSLASH, 59, ALAKAZAM, 61, EXEGGUTOR, 61, CLOYSTER, 63, NINETALES, 65, JOLTEON, 0
+ db $FF, 61, SANDSLASH, 59, ALAKAZAM, 61, EXEGGUTOR, 61, MAGNETON, 63, CLOYSTER, 65, FLAREON, 0
+ db $FF, 61, SANDSLASH, 59, ALAKAZAM, 61, EXEGGUTOR, 61, NINETALES, 63, MAGNETON, 65, VAPOREON, 0
+
+LoreleiData:
+ db $FF, 54, DEWGONG, 53, CLOYSTER, 54, SLOWBRO, 56, JYNX, 56, LAPRAS, 0
+
+ChannelerData:
+; Unused
+ db 22, GASTLY, 0
+ db 24, GASTLY, 0
+ db 23, GASTLY, GASTLY, 0
+ db 24, GASTLY, 0
+; Pokémon Tower 3F
+ db 23, GASTLY, 0
+ db 24, GASTLY, 0
+; Unused
+ db 24, HAUNTER, 0
+; Pokémon Tower 3F
+ db 22, GASTLY, 0
+; Pokémon Tower 4F
+ db 24, GASTLY, 0
+ db 23, GASTLY, GASTLY, 0
+; Unused
+ db 24, GASTLY, 0
+; Pokémon Tower 4F
+ db 22, GASTLY, 0
+; Unused
+ db 24, GASTLY, 0
+; Pokémon Tower 5F
+ db 23, HAUNTER, 0
+; Unused
+ db 24, GASTLY, 0
+; Pokémon Tower 5F
+ db 22, GASTLY, 0
+ db 24, GASTLY, 0
+ db 22, HAUNTER, 0
+; Pokémon Tower 6F
+ db 22, GASTLY, GASTLY, GASTLY, 0
+ db 24, GASTLY, 0
+ db 24, GASTLY, 0
+; Saffron Gym
+ db 34, GASTLY, HAUNTER, 0
+ db 38, HAUNTER, 0
+ db 33, GASTLY, GASTLY, HAUNTER, 0
+
+AgathaData:
+ db $FF, 56, GENGAR, 56, GOLBAT, 55, HAUNTER, 58, ARBOK, 60, GENGAR, 0
+
+LanceData:
+ db $FF, 58, GYARADOS, 56, DRAGONAIR, 56, DRAGONAIR, 60, AERODACTYL, 62, DRAGONITE, 0
diff --git a/data/trainers/pic_pointers_money.asm b/data/trainers/pic_pointers_money.asm
new file mode 100755
index 00000000..d4007394
--- /dev/null
+++ b/data/trainers/pic_pointers_money.asm
@@ -0,0 +1,55 @@
+pic_money: MACRO
+ dw \1
+ money \2
+ENDM
+
+TrainerPicAndMoneyPointers::
+ ; pic pointer, base reward money
+ ; money received after battle = base money × level of highest-level enemy mon
+ pic_money YoungsterPic, 1500
+ pic_money BugCatcherPic, 1000
+ pic_money LassPic, 1500
+ pic_money SailorPic, 3000
+ pic_money JrTrainerMPic, 2000
+ pic_money JrTrainerFPic, 2000
+ pic_money PokemaniacPic, 5000
+ pic_money SuperNerdPic, 2500
+ pic_money HikerPic, 3500
+ pic_money BikerPic, 2000
+ pic_money BurglarPic, 9000
+ pic_money EngineerPic, 5000
+ pic_money JugglerPic, 3500
+ pic_money FisherPic, 3500
+ pic_money SwimmerPic, 500
+ pic_money CueBallPic, 2500
+ pic_money GamblerPic, 7000
+ pic_money BeautyPic, 7000
+ pic_money PsychicPic, 1000
+ pic_money RockerPic, 2500
+ pic_money JugglerPic, 3500
+ pic_money TamerPic, 4000
+ pic_money BirdKeeperPic, 2500
+ pic_money BlackbeltPic, 2500
+ pic_money Rival1Pic, 3500
+ pic_money ProfOakPic, 9900
+ pic_money ChiefPic, 3000
+ pic_money ScientistPic, 5000
+ pic_money GiovanniPic, 9900
+ pic_money RocketPic, 3000
+ pic_money CooltrainerMPic, 3500
+ pic_money CooltrainerFPic, 3500
+ pic_money BrunoPic, 9900
+ pic_money BrockPic, 9900
+ pic_money MistyPic, 9900
+ pic_money LtSurgePic, 9900
+ pic_money ErikaPic, 9900
+ pic_money KogaPic, 9900
+ pic_money BlainePic, 9900
+ pic_money SabrinaPic, 9900
+ pic_money GentlemanPic, 7000
+ pic_money Rival2Pic, 6500
+ pic_money Rival3Pic, 9900
+ pic_money LoreleiPic, 9900
+ pic_money ChannelerPic, 3000
+ pic_money AgathaPic, 9900
+ pic_money LancePic, 9900
diff --git a/data/trainers/special_moves.asm b/data/trainers/special_moves.asm
new file mode 100755
index 00000000..f858fa57
--- /dev/null
+++ b/data/trainers/special_moves.asm
@@ -0,0 +1,160 @@
+; yellow has its own format.
+
+; entry = trainerclass, trainerid, moveset+, 0
+; moveset = partymon location, partymon's move, moveid
+
+SpecialTrainerMoves:
+ db BUG_CATCHER, 15
+ db 2, 2, TACKLE
+ db 2, 3, STRING_SHOT
+ db 0
+
+ db YOUNGSTER, 14
+ db 1, 4, FISSURE
+ db 0
+
+ db BROCK, 1
+ db 2, 3, BIND
+ db 2, 4, BIDE
+ db 0
+
+ db MISTY, 1
+ db 2, 4, BUBBLEBEAM
+ db 0
+
+ db LT_SURGE, 1
+ db 1, 1, THUNDERBOLT
+ db 1, 2, MEGA_PUNCH
+ db 1, 3, MEGA_KICK
+ db 1, 4, GROWL
+ db 0
+
+ db ERIKA, 1
+ db 1, 3, MEGA_DRAIN
+ db 2, 1, RAZOR_LEAF
+ db 3, 1, PETAL_DANCE
+ db 0
+
+ db KOGA, 1
+ db 1, 1, TOXIC
+ db 1, 2, TACKLE
+ db 2, 1, TOXIC
+ db 2, 3, SUPERSONIC
+ db 3, 1, TOXIC
+ db 3, 2, DOUBLE_EDGE
+ db 4, 1, LEECH_LIFE
+ db 4, 2, DOUBLE_TEAM
+ db 4, 3, PSYCHIC_M
+ db 4, 4, TOXIC
+ db 0
+
+ db BLAINE, 1
+ db 1, 1, FLAMETHROWER
+ db 1, 4, CONFUSE_RAY
+ db 3, 1, FLAMETHROWER
+ db 3, 2, FIRE_BLAST
+ db 3, 3, REFLECT
+ db 0
+
+ db SABRINA, 1
+ db 1, 1, FLASH
+ db 2, 1, KINESIS
+ db 2, 4, PSYWAVE
+ db 3, 1, PSYWAVE
+ db 0
+
+ db GIOVANNI, 3
+ db 1, 3, FISSURE
+ db 2, 2, DOUBLE_TEAM
+ db 3, 1, EARTHQUAKE
+ db 3, 3, THUNDER
+ db 4, 1, EARTHQUAKE
+ db 4, 2, LEER
+ db 4, 3, THUNDER
+ db 5, 1, ROCK_SLIDE
+ db 5, 4, EARTHQUAKE
+ db 0
+
+ db LORELEI, 1
+ db 1, 1, BUBBLEBEAM
+ db 2, 3, ICE_BEAM
+ db 3, 1, PSYCHIC_M
+ db 3, 2, SURF
+ db 4, 3, LOVELY_KISS
+ db 5, 3, BLIZZARD
+ db 0
+
+ db BRUNO, 1
+ db 1, 1, ROCK_SLIDE
+ db 1, 2, SCREECH
+ db 1, 4, DIG
+ db 2, 3, FIRE_PUNCH
+ db 2, 4, DOUBLE_TEAM
+ db 3, 1, DOUBLE_KICK
+ db 3, 2, MEGA_KICK
+ db 3, 4, DOUBLE_TEAM
+ db 4, 1, ROCK_SLIDE
+ db 4, 2, SCREECH
+ db 4, 4, EARTHQUAKE
+ db 5, 2, KARATE_CHOP
+ db 5, 3, STRENGTH
+ db 0
+
+ db AGATHA, 1
+ db 1, 2, SUBSTITUTE
+ db 1, 3, LICK
+ db 1, 4, MEGA_DRAIN
+ db 2, 2, TOXIC
+ db 2, 4, LEECH_LIFE
+ db 3, 2, LICK
+ db 4, 1, WRAP
+ db 5, 2, PSYCHIC_M
+ db 0
+
+ db LANCE, 1
+ db 1, 1, DRAGON_RAGE
+ db 2, 1, THUNDER_WAVE
+ db 2, 3, THUNDERBOLT
+ db 3, 1, BUBBLEBEAM
+ db 3, 2, WRAP
+ db 3, 3, ICE_BEAM
+ db 4, 1, WING_ATTACK
+ db 4, 2, SWIFT
+ db 4, 3, FLY
+ db 5, 1, BLIZZARD
+ db 5, 2, FIRE_BLAST
+ db 5, 3, THUNDER
+ db 0
+
+ db RIVAL3, 1
+ db 1, 3, EARTHQUAKE
+ db 2, 4, KINESIS
+ db 3, 4, LEECH_SEED
+ db 4, 1, ICE_BEAM
+ db 5, 1, CONFUSE_RAY
+ db 5, 4, FIRE_SPIN
+ db 6, 3, QUICK_ATTACK
+ db 0
+
+ db RIVAL3, 2
+ db 1, 3, EARTHQUAKE
+ db 2, 4, KINESIS
+ db 3, 4, LEECH_SEED
+ db 4, 1, THUNDERBOLT
+ db 5, 1, ICE_BEAM
+ db 6, 2, REFLECT
+ db 6, 3, QUICK_ATTACK
+ db 0
+
+ db RIVAL3, 3
+ db 1, 3, EARTHQUAKE
+ db 2, 4, KINESIS
+ db 3, 4, LEECH_SEED
+ db 4, 1, CONFUSE_RAY
+ db 4, 4, FIRE_SPIN
+ db 5, 1, THUNDERBOLT
+ db 6, 1, AURORA_BEAM
+ db 6, 3, QUICK_ATTACK
+ db 0
+
+ db -1 ; end