2019-09-12 05:06:24 +00:00
using System.Collections.Generic ;
2017-08-05 21:32:12 +00:00
using System.Diagnostics ;
2017-07-25 07:28:43 +00:00
using System.Linq ;
using static PKHeX . Core . EncounterUtil ;
namespace PKHeX.Core
{
2017-10-24 06:12:58 +00:00
/// <summary>
/// Generation 4 Encounters
/// </summary>
2017-07-25 07:28:43 +00:00
internal static class Encounters4
{
2019-09-13 06:20:52 +00:00
internal static readonly EncounterArea4DPPt [ ] SlotsD , SlotsP , SlotsPt ;
internal static readonly EncounterArea4HGSS [ ] SlotsHG , SlotsSS ;
2017-07-25 07:28:43 +00:00
internal static readonly EncounterStatic [ ] StaticD , StaticP , StaticPt , StaticHG , StaticSS ;
static Encounters4 ( )
{
MarkG4PokeWalker ( Encounter_PokeWalker ) ;
2017-08-01 17:26:11 +00:00
StaticD = GetStaticEncounters ( Encounter_DPPt , GameVersion . D ) ;
StaticP = GetStaticEncounters ( Encounter_DPPt , GameVersion . P ) ;
2017-07-30 19:31:17 +00:00
StaticPt = GetStaticEncounters ( Encounter_DPPt , GameVersion . Pt ) ;
var staticHGSS = Encounter_HGSS . Concat ( Encounter_PokeWalker ) . ToArray ( ) ;
StaticHG = GetStaticEncounters ( staticHGSS , GameVersion . HG ) ;
StaticSS = GetStaticEncounters ( staticHGSS , GameVersion . SS ) ;
2017-07-25 07:28:43 +00:00
2019-10-08 01:40:09 +00:00
static byte [ ] [ ] get ( string resource , string ident )
2020-03-20 22:18:59 +00:00
= > BinLinker . Unpack ( Util . GetBinaryResource ( $"encounter_{resource}.pkl" ) , ident ) ;
2017-07-25 07:28:43 +00:00
2019-09-13 06:20:52 +00:00
var D_Slots = EncounterArea4DPPt . GetArray4DPPt ( get ( "d" , "da" ) ) ;
var P_Slots = EncounterArea4DPPt . GetArray4DPPt ( get ( "p" , "pe" ) ) ;
var Pt_Slots = EncounterArea4DPPt . GetArray4DPPt ( get ( "pt" , "pt" ) , true ) ;
var HG_Slots = EncounterArea4HGSS . GetArray4HGSS ( get ( "hg" , "hg" ) ) ;
var SS_Slots = EncounterArea4HGSS . GetArray4HGSS ( get ( "ss" , "ss" ) ) ;
2017-07-25 07:28:43 +00:00
2017-08-05 21:32:12 +00:00
var DP_Feebas = GetFeebasArea ( D_Slots [ 10 ] ) ;
var Pt_Feebas = GetFeebasArea ( Pt_Slots [ 10 ] ) ;
2019-09-13 06:20:52 +00:00
var HG_Headbutt_Slots = EncounterArea4HGSS . GetArray4HGSS_Headbutt ( get ( "hb_hg" , "hg" ) ) ;
var SS_Headbutt_Slots = EncounterArea4HGSS . GetArray4HGSS_Headbutt ( get ( "hb_ss" , "ss" ) ) ;
2017-07-25 07:28:43 +00:00
var D_HoneyTrees_Slots = SlotsD_HoneyTree . Clone ( HoneyTreesLocation ) ;
var P_HoneyTrees_Slots = SlotsP_HoneyTree . Clone ( HoneyTreesLocation ) ;
var Pt_HoneyTrees_Slots = SlotsPt_HoneyTree . Clone ( HoneyTreesLocation ) ;
2018-07-20 01:09:37 +00:00
MarkG4SwarmSlots ( HG_Slots , SlotsHG_Swarm ) ;
MarkG4SwarmSlots ( SS_Slots , SlotsSS_Swarm ) ;
2017-07-25 07:28:43 +00:00
2018-07-20 01:09:37 +00:00
MarkEncounterTypeData ( D_Slots , P_Slots , Pt_Slots , HG_Slots , SS_Slots ) ;
2017-11-22 15:52:17 +00:00
2017-07-25 07:28:43 +00:00
ReduceAreasSize ( ref D_Slots ) ;
ReduceAreasSize ( ref P_Slots ) ;
ReduceAreasSize ( ref Pt_Slots ) ;
ReduceAreasSize ( ref HG_Slots ) ;
ReduceAreasSize ( ref SS_Slots ) ;
ReduceAreasSize ( ref HG_Headbutt_Slots ) ;
ReduceAreasSize ( ref SS_Headbutt_Slots ) ;
2018-07-20 01:09:37 +00:00
MarkG4SlotsGreatMarsh ( D_Slots , 52 ) ;
MarkG4SlotsGreatMarsh ( P_Slots , 52 ) ;
MarkG4SlotsGreatMarsh ( Pt_Slots , 52 ) ;
2017-07-25 07:28:43 +00:00
2019-09-13 06:20:52 +00:00
MarkEncounterAreaArray ( D_HoneyTrees_Slots , P_HoneyTrees_Slots , Pt_HoneyTrees_Slots , DP_GreatMarshAlt , Pt_GreatMarshAlt , DPPt_Unown , DP_Feebas , Pt_Feebas ) ;
MarkEncounterAreaArray ( HG_Headbutt_Slots , SS_Headbutt_Slots , SlotsHGSSAlt ) ;
2017-11-26 02:16:50 +00:00
2017-12-03 20:20:49 +00:00
SlotsD = AddExtraTableSlots ( D_Slots , D_HoneyTrees_Slots , DP_GreatMarshAlt , DPPt_Unown , DP_Feebas ) ;
SlotsP = AddExtraTableSlots ( P_Slots , P_HoneyTrees_Slots , DP_GreatMarshAlt , DPPt_Unown , DP_Feebas ) ;
SlotsPt = AddExtraTableSlots ( Pt_Slots , Pt_HoneyTrees_Slots , Pt_GreatMarshAlt , DPPt_Unown , Pt_Feebas ) ;
2017-07-25 07:28:43 +00:00
SlotsHG = AddExtraTableSlots ( HG_Slots , HG_Headbutt_Slots , SlotsHGSSAlt ) ;
SlotsSS = AddExtraTableSlots ( SS_Slots , SS_Headbutt_Slots , SlotsHGSSAlt ) ;
2018-07-20 01:09:37 +00:00
MarkDPPtEncounterTypeSlots ( SlotsD ) ;
MarkDPPtEncounterTypeSlots ( SlotsP ) ;
MarkDPPtEncounterTypeSlots ( SlotsPt ) ;
MarkHGSSEncounterTypeSlots ( SlotsHG ) ;
MarkHGSSEncounterTypeSlots ( SlotsSS ) ;
2017-12-19 00:17:21 +00:00
MarkEncountersGeneration ( 4 , SlotsD , SlotsP , SlotsPt , SlotsHG , SlotsSS ) ;
MarkEncountersGeneration ( 4 , StaticD , StaticP , StaticPt , StaticHG , StaticSS , TradeGift_DPPt , TradeGift_HGSS ) ;
2018-03-27 05:23:11 +00:00
MarkEncounterTradeStrings ( TradeGift_DPPt , TradeDPPt ) ;
MarkEncounterTradeStrings ( TradeGift_HGSS , TradeHGSS ) ;
2018-10-27 20:37:03 +00:00
2018-04-30 01:26:36 +00:00
foreach ( var t in RanchGifts )
t . TrainerNames = RanchOTNames ;
2018-03-31 04:38:57 +00:00
DP_GreatMarshAlt . SetVersion ( GameVersion . DP ) ;
DPPt_Unown . SetVersion ( GameVersion . DPPt ) ;
DP_Feebas . SetVersion ( GameVersion . DP ) ;
SlotsHGSSAlt . SetVersion ( GameVersion . HGSS ) ;
SlotsD . SetVersion ( GameVersion . D ) ;
SlotsP . SetVersion ( GameVersion . P ) ;
SlotsPt . SetVersion ( GameVersion . Pt ) ;
SlotsHG . SetVersion ( GameVersion . HG ) ;
SlotsSS . SetVersion ( GameVersion . SS ) ;
Encounter_DPPt . SetVersion ( GameVersion . DPPt ) ;
Encounter_HGSS . SetVersion ( GameVersion . HGSS ) ;
TradeGift_DPPt . SetVersion ( GameVersion . DPPt ) ;
TradeGift_HGSS . SetVersion ( GameVersion . HGSS ) ;
2017-07-25 07:28:43 +00:00
}
2019-09-13 06:20:52 +00:00
private static EncounterArea4DPPt [ ] GetFeebasArea ( EncounterArea4DPPt template )
2017-08-05 21:32:12 +00:00
{
Debug . Assert ( template . Location = = 50 ) ; // Mt Coronet
2019-12-09 01:39:19 +00:00
Debug . Assert ( template . Slots . Last ( ) . Species = = ( int ) Species . Whiscash ) ;
2017-08-05 21:32:12 +00:00
var slots = template . Slots . Where ( z = > z . Type . IsFishingRodType ( ) ) . Select ( z = > z . Clone ( ) ) . ToArray ( ) ;
2019-12-09 01:39:19 +00:00
Debug . Assert ( slots [ 0 ] . Species = = ( int ) Species . Magikarp ) ;
2017-08-05 21:32:12 +00:00
foreach ( var s in slots )
{
2019-12-09 01:39:19 +00:00
s . Species = ( int ) Species . Feebas ;
2017-08-05 21:32:12 +00:00
s . TypeEncounter = EncounterType . Surfing_Fishing ;
}
2019-09-13 06:20:52 +00:00
var area = new EncounterArea4DPPt
2017-08-05 21:32:12 +00:00
{
Location = template . Location ,
Slots = slots ,
} ;
return new [ ] { area } ;
}
2019-09-12 05:06:24 +00:00
private static void MarkEncounterTypeData ( EncounterArea4 [ ] D_Slots , EncounterArea4 [ ] P_Slots , EncounterArea4 [ ] Pt_Slots , EncounterArea4 [ ] HG_Slots , EncounterArea4 [ ] SS_Slots )
2017-07-25 07:28:43 +00:00
{
// Shellos & Gastrodon
2018-07-20 01:09:37 +00:00
MarkG4AltFormSlots ( D_Slots , 422 , 1 , Shellos_EastSeaLocation_DP ) ;
MarkG4AltFormSlots ( D_Slots , 423 , 1 , Gastrodon_EastSeaLocation_DP ) ;
MarkG4AltFormSlots ( P_Slots , 422 , 1 , Shellos_EastSeaLocation_DP ) ;
MarkG4AltFormSlots ( P_Slots , 423 , 1 , Gastrodon_EastSeaLocation_DP ) ;
MarkG4AltFormSlots ( Pt_Slots , 422 , 1 , Shellos_EastSeaLocation_Pt ) ;
MarkG4AltFormSlots ( Pt_Slots , 423 , 1 , Gastrodon_EastSeaLocation_Pt ) ;
2017-07-25 07:28:43 +00:00
const int Route209 = 24 ;
2018-07-20 01:09:37 +00:00
MarkDPPtEncounterTypeSlots_MultipleTypes ( D_Slots , Route209 , EncounterType . Building_EnigmaStone , 1 ) ;
MarkDPPtEncounterTypeSlots_MultipleTypes ( P_Slots , Route209 , EncounterType . Building_EnigmaStone , 1 ) ;
MarkDPPtEncounterTypeSlots_MultipleTypes ( Pt_Slots , Route209 , EncounterType . Building_EnigmaStone , 1 ) ;
2017-07-25 07:28:43 +00:00
const int StarkMountain = 84 ;
2018-07-20 01:09:37 +00:00
MarkDPPtEncounterTypeSlots_MultipleTypes ( D_Slots , StarkMountain , EncounterType . Cave_HallOfOrigin , 1 ) ;
MarkDPPtEncounterTypeSlots_MultipleTypes ( P_Slots , StarkMountain , EncounterType . Cave_HallOfOrigin , 1 ) ;
MarkDPPtEncounterTypeSlots_MultipleTypes ( Pt_Slots , StarkMountain , EncounterType . Cave_HallOfOrigin , 1 ) ;
2017-07-25 07:28:43 +00:00
const int MtCoronet = 50 ;
2018-07-20 01:09:37 +00:00
MarkDPPtEncounterTypeSlots_MultipleTypes ( D_Slots , MtCoronet , EncounterType . Cave_HallOfOrigin , DPPt_MtCoronetExteriorEncounters ) ;
MarkDPPtEncounterTypeSlots_MultipleTypes ( P_Slots , MtCoronet , EncounterType . Cave_HallOfOrigin , DPPt_MtCoronetExteriorEncounters ) ;
MarkDPPtEncounterTypeSlots_MultipleTypes ( Pt_Slots , MtCoronet , EncounterType . Cave_HallOfOrigin , DPPt_MtCoronetExteriorEncounters ) ;
2017-07-25 07:28:43 +00:00
const int RuinsOfAlph = 209 ;
2018-07-20 01:09:37 +00:00
MarkHGSSEncounterTypeSlots_MultipleTypes ( HG_Slots , RuinsOfAlph , EncounterType . Cave_HallOfOrigin , 1 ) ;
MarkHGSSEncounterTypeSlots_MultipleTypes ( SS_Slots , RuinsOfAlph , EncounterType . Cave_HallOfOrigin , 1 ) ;
2019-01-27 19:08:17 +00:00
MarkSpecific ( HG_Slots , RuinsOfAlph , SlotType . Rock_Smash , EncounterType . DialgaPalkia ) ;
MarkSpecific ( SS_Slots , RuinsOfAlph , SlotType . Rock_Smash , EncounterType . DialgaPalkia ) ;
2017-07-25 07:28:43 +00:00
const int MtSilver = 219 ;
2018-07-20 01:09:37 +00:00
MarkHGSSEncounterTypeSlots_MultipleTypes ( HG_Slots , MtSilver , EncounterType . Cave_HallOfOrigin , HGSS_MtSilverCaveExteriorEncounters ) ;
MarkHGSSEncounterTypeSlots_MultipleTypes ( SS_Slots , MtSilver , EncounterType . Cave_HallOfOrigin , HGSS_MtSilverCaveExteriorEncounters ) ;
2017-11-22 02:19:36 +00:00
const int Cianwood = 130 ;
2018-07-20 01:09:37 +00:00
MarkHGSSEncounterTypeSlots_MultipleTypes ( HG_Slots , Cianwood , EncounterType . RockSmash ) ;
MarkHGSSEncounterTypeSlots_MultipleTypes ( SS_Slots , Cianwood , EncounterType . RockSmash ) ;
2017-07-25 07:28:43 +00:00
}
2018-08-03 03:11:42 +00:00
private static void MarkG4PokeWalker ( IEnumerable < EncounterStatic > t )
2017-07-25 07:28:43 +00:00
{
foreach ( EncounterStatic s in t )
{
s . Location = 233 ; //Pokéwalker
s . Gift = true ; //Pokeball only
2018-04-29 16:31:13 +00:00
s . Version = GameVersion . HGSS ;
2017-07-25 07:28:43 +00:00
}
}
2018-08-03 03:11:42 +00:00
private static void MarkG4SlotsGreatMarsh ( IEnumerable < EncounterArea > Areas , int location )
2017-07-25 07:28:43 +00:00
{
foreach ( EncounterArea Area in Areas . Where ( a = > a . Location = = location ) )
2018-08-03 03:11:42 +00:00
{
foreach ( EncounterSlot Slot in Area . Slots )
Slot . Type | = SlotType . Safari ;
}
2017-07-25 07:28:43 +00:00
}
2018-08-03 03:11:42 +00:00
2019-09-12 05:06:24 +00:00
private static void MarkG4SwarmSlots < T > ( IEnumerable < T > Areas , T [ ] SwarmAreas ) where T : EncounterArea
2017-07-25 07:28:43 +00:00
{
// Grass Swarm slots replace slots 0 and 1 from encounters data
// for surfing only replace slots 0 from encounters data
// for fishing replace one or several random slots from encounters data, but all slots have the same level, it's ok to only replace the first
// Species id are not included in encounter tables but levels can be copied from the encounter raw data
2019-09-12 05:06:24 +00:00
foreach ( var Area in Areas )
2017-07-25 07:28:43 +00:00
{
var SwarmSlots = SwarmAreas . Where ( a = > a . Location = = Area . Location ) . SelectMany ( s = > s . Slots ) ;
var OutputSlots = new List < EncounterSlot > ( ) ;
foreach ( EncounterSlot SwarmSlot in SwarmSlots )
{
int slotsnum = SwarmSlot . Type = = SlotType . Grass ? 2 : 1 ;
foreach ( var swarmSlot in Area . Slots . Where ( s = > s . Type = = SwarmSlot . Type ) . Take ( slotsnum ) . Select ( slot = > slot . Clone ( ) ) )
{
swarmSlot . Species = SwarmSlot . Species ;
2019-12-09 01:39:19 +00:00
if ( swarmSlot . Species = = ( int ) Species . Mawile ) // edge case, Mawile is only swarm subject to magnet pull (no other steel types in area)
2017-12-03 20:20:49 +00:00
{
swarmSlot . Permissions . MagnetPullIndex = swarmSlot . SlotNumber ;
swarmSlot . Permissions . MagnetPullCount = 2 ;
}
2017-07-25 07:28:43 +00:00
OutputSlots . Add ( swarmSlot ) ;
}
}
Area . Slots = Area . Slots . Concat ( OutputSlots ) . Where ( a = > a . Species > 0 ) . ToArray ( ) ;
}
}
2018-08-03 03:11:42 +00:00
2017-07-25 07:28:43 +00:00
// Gen 4 raw encounter data does not contains info for alt slots
2019-09-12 05:06:24 +00:00
// Shellos and Gastrodon East Sea form should be modified
private static void MarkG4AltFormSlots ( IEnumerable < EncounterArea4 > Areas , int Species , int form , int [ ] Locations )
2017-07-25 07:28:43 +00:00
{
2019-09-12 05:06:24 +00:00
foreach ( var Area in Areas . Where ( a = > Locations . Contains ( a . Location ) ) )
2018-08-03 03:11:42 +00:00
{
foreach ( EncounterSlot Slot in Area . Slots . Where ( s = > s . Species = = Species ) )
Slot . Form = form ;
}
2017-07-25 07:28:43 +00:00
}
2018-08-03 03:11:42 +00:00
2017-07-25 07:28:43 +00:00
private static EncounterType GetEncounterTypeBySlotDPPt ( SlotType Type , EncounterType GrassType )
{
switch ( Type )
{
case SlotType . Pokeradar :
case SlotType . Pokeradar_Safari :
case SlotType . Swarm :
case SlotType . Grass : return GrassType ;
case SlotType . Surf :
case SlotType . Old_Rod :
case SlotType . Good_Rod :
case SlotType . Super_Rod :
case SlotType . Surf_Safari :
case SlotType . Old_Rod_Safari :
case SlotType . Good_Rod_Safari :
case SlotType . Super_Rod_Safari : return EncounterType . Surfing_Fishing ;
case SlotType . Grass_Safari : return EncounterType . MarshSafari ;
case SlotType . HoneyTree : return EncounterType . None ;
}
return EncounterType . None ;
}
2018-08-03 03:11:42 +00:00
2017-07-25 07:28:43 +00:00
private static EncounterType GetEncounterTypeBySlotHGSS ( SlotType Type , EncounterType GrassType , EncounterType HeadbuttType )
{
switch ( Type )
{
// HGSS Safari encounters have normal water/grass encounter type, not safari encounter type
case SlotType . Grass :
case SlotType . Grass_Safari :
case SlotType . BugContest : return GrassType ;
2017-10-30 03:19:49 +00:00
2017-07-25 07:28:43 +00:00
case SlotType . Surf :
case SlotType . Old_Rod :
case SlotType . Good_Rod :
case SlotType . Super_Rod :
case SlotType . Surf_Safari :
case SlotType . Old_Rod_Safari :
case SlotType . Good_Rod_Safari :
case SlotType . Super_Rod_Safari : return EncounterType . Surfing_Fishing ;
2017-10-30 01:09:30 +00:00
2017-07-25 07:28:43 +00:00
case SlotType . Rock_Smash :
2017-11-22 02:19:36 +00:00
if ( GrassType = = EncounterType . RockSmash )
return EncounterType . RockSmash | EncounterType . Building_EnigmaStone ;
2017-10-30 02:17:53 +00:00
if ( HeadbuttType = = EncounterType . Building_EnigmaStone )
return HeadbuttType ;
if ( GrassType = = EncounterType . Cave_HallOfOrigin )
return GrassType ;
return EncounterType . None ;
2017-10-30 01:09:30 +00:00
2017-10-30 03:19:49 +00:00
case SlotType . Headbutt_Special :
2018-05-12 15:13:39 +00:00
case SlotType . Headbutt : return HeadbuttType | EncounterType . None ;
2017-10-30 03:19:49 +00:00
// not sure on if "None" should always be allowed, but this is so uncommon it shouldn't matter (gen7 doesn't keep this value anyway).
2017-07-25 07:28:43 +00:00
}
return EncounterType . None ;
}
2018-08-03 03:11:42 +00:00
2019-09-12 05:06:24 +00:00
private static void MarkDPPtEncounterTypeSlots_MultipleTypes ( EncounterArea4 [ ] Areas , int Location , EncounterType NormalEncounterType , params int [ ] SpecialEncounterFiles )
2017-07-25 07:28:43 +00:00
{
var numfile = 0 ;
2019-09-12 05:06:24 +00:00
foreach ( var Area in Areas . Where ( x = > x . Location = = Location ) )
2017-07-25 07:28:43 +00:00
{
numfile + + ;
var GrassType = SpecialEncounterFiles . Contains ( numfile ) ? EncounterType . TallGrass : NormalEncounterType ;
foreach ( EncounterSlot Slot in Area . Slots )
{
Slot . TypeEncounter = GetEncounterTypeBySlotDPPt ( Slot . Type , GrassType ) ;
}
}
}
2018-08-03 03:11:42 +00:00
2019-09-12 05:06:24 +00:00
private static void MarkHGSSEncounterTypeSlots_MultipleTypes ( EncounterArea4 [ ] Areas , int Location , EncounterType NormalEncounterType , params int [ ] SpecialEncounterFile )
2017-07-25 07:28:43 +00:00
{
// Area with two different encounter type for grass encounters
// SpecialEncounterFile is taall grass encounter type, the other files have the normal encounter type for this location
var HeadbuttType = GetHeadbuttEncounterType ( Location ) ;
var numfile = 0 ;
2019-09-12 05:06:24 +00:00
foreach ( var Area in Areas . Where ( x = > x . Location = = Location ) )
2017-07-25 07:28:43 +00:00
{
numfile + + ;
2017-10-30 01:09:30 +00:00
var GrassType = SpecialEncounterFile . Contains ( numfile ) ? EncounterType . TallGrass : NormalEncounterType ;
2017-07-25 07:28:43 +00:00
foreach ( EncounterSlot Slot in Area . Slots )
{
Slot . TypeEncounter = GetEncounterTypeBySlotHGSS ( Slot . Type , GrassType , HeadbuttType ) ;
}
}
}
2018-08-03 03:11:42 +00:00
2019-09-12 05:06:24 +00:00
private static void MarkSpecific ( EncounterArea4 [ ] Areas , int Location , SlotType t , EncounterType val )
2019-01-27 19:08:17 +00:00
{
2019-09-12 05:06:24 +00:00
foreach ( var Area in Areas . Where ( x = > x . Location = = Location ) )
2019-02-02 18:19:41 +00:00
{
foreach ( var s in Area . Slots . Where ( s = > s . Type = = t ) )
s . TypeEncounter = val ;
}
2019-01-27 19:08:17 +00:00
}
2019-09-12 05:06:24 +00:00
private static void MarkDPPtEncounterTypeSlots ( EncounterArea4 [ ] Areas )
2017-07-25 07:28:43 +00:00
{
2019-09-12 05:06:24 +00:00
foreach ( var Area in Areas )
2017-07-25 07:28:43 +00:00
{
if ( DPPt_MixInteriorExteriorLocations . Contains ( Area . Location ) )
continue ;
2019-02-02 18:19:41 +00:00
var GrassType = GetGrassType ( Area . Location ) ;
EncounterType GetGrassType ( int location )
{
if ( location = = 70 ) // Old Chateau
return EncounterType . Building_EnigmaStone ;
if ( DPPt_CaveLocations . Contains ( Area . Location ) )
return EncounterType . Cave_HallOfOrigin ;
return EncounterType . TallGrass ;
}
2017-07-25 07:28:43 +00:00
foreach ( EncounterSlot Slot in Area . Slots )
{
2017-11-22 15:52:17 +00:00
if ( Slot . TypeEncounter = = EncounterType . None ) // not defined yet
Slot . TypeEncounter = GetEncounterTypeBySlotDPPt ( Slot . Type , GrassType ) ;
2017-07-25 07:28:43 +00:00
}
}
}
2018-08-03 03:11:42 +00:00
2017-07-25 07:28:43 +00:00
private static EncounterType GetHeadbuttEncounterType ( int Location )
{
2018-02-16 03:40:42 +00:00
if ( Location = = 195 | | Location = = 196 ) // Route 47/48
return EncounterType . DialgaPalkia | EncounterType . TallGrass ;
2017-07-25 07:28:43 +00:00
// Routes with trees adjacent to water tiles
var allowsurf = HGSS_SurfingHeadbutt_Locations . Contains ( Location ) ;
2018-08-03 03:11:42 +00:00
2017-07-25 07:28:43 +00:00
// Cities
if ( HGSS_CityLocations . Contains ( Location ) )
2018-08-03 03:11:42 +00:00
{
2017-10-28 06:57:21 +00:00
return allowsurf
? EncounterType . Building_EnigmaStone | EncounterType . Surfing_Fishing
: EncounterType . Building_EnigmaStone ;
2018-08-03 03:11:42 +00:00
}
2017-07-25 07:28:43 +00:00
// Caves with no exterior zones
if ( ! HGSS_MixInteriorExteriorLocations . Contains ( Location ) & & HGSS_CaveLocations . Contains ( Location ) )
2018-08-03 03:11:42 +00:00
{
2017-10-28 06:57:21 +00:00
return allowsurf
? EncounterType . Cave_HallOfOrigin | EncounterType . Surfing_Fishing
: EncounterType . Cave_HallOfOrigin ;
2018-08-03 03:11:42 +00:00
}
2017-07-25 07:28:43 +00:00
// Routes and exterior areas
// Routes with trees adjacent to grass tiles
var allowgrass = HGSS_GrassHeadbutt_Locations . Contains ( Location ) ;
2017-10-28 06:57:21 +00:00
if ( allowgrass )
2018-08-03 03:11:42 +00:00
{
2018-05-12 15:13:39 +00:00
return allowsurf
? EncounterType . TallGrass | EncounterType . Surfing_Fishing
2017-10-28 06:57:21 +00:00
: EncounterType . TallGrass ;
2018-08-03 03:11:42 +00:00
}
2017-10-28 06:57:21 +00:00
return allowsurf
? EncounterType . Surfing_Fishing
: EncounterType . None ;
2017-07-25 07:28:43 +00:00
}
2019-09-12 05:06:24 +00:00
private static void MarkHGSSEncounterTypeSlots ( EncounterArea4 [ ] Areas )
2017-07-25 07:28:43 +00:00
{
2019-09-12 05:06:24 +00:00
foreach ( var Area in Areas )
2017-07-25 07:28:43 +00:00
{
if ( HGSS_MixInteriorExteriorLocations . Contains ( Area . Location ) )
continue ;
var GrassType = HGSS_CaveLocations . Contains ( Area . Location ) ? EncounterType . Cave_HallOfOrigin : EncounterType . TallGrass ;
var HeadbuttType = GetHeadbuttEncounterType ( Area . Location ) ;
foreach ( EncounterSlot Slot in Area . Slots )
{
2017-11-22 15:52:17 +00:00
if ( Slot . TypeEncounter = = EncounterType . None ) // not defined yet
Slot . TypeEncounter = GetEncounterTypeBySlotHGSS ( Slot . Type , GrassType , HeadbuttType ) ;
2017-07-25 07:28:43 +00:00
}
}
}
#region Encounter Types
2017-10-23 06:26:37 +00:00
private static readonly HashSet < int > DPPt_CaveLocations = new HashSet < int >
2017-07-25 07:28:43 +00:00
{
46 , // Oreburgh Mine
50 , // Mt. Coronet
53 , // Solaceon Ruins
54 , // Sinnoh Victory Road
57 , // Ravaged Path
59 , // Oreburgh Gate
62 , // Turnback Cave
64 , // Snowpoint Temple
65 , // Wayward Cave
66 , // Ruin Maniac Cave
67 , // Maniac Tunnel
66 , // Ruin Maniac Cave
69 , // Iron Island
84 , // Stark Mountain
} ;
2018-08-03 03:11:42 +00:00
2017-10-23 06:26:37 +00:00
private static readonly HashSet < int > DPPt_MixInteriorExteriorLocations = new HashSet < int >
2017-07-25 07:28:43 +00:00
{
24 , // Route 209 (Lost Tower)
50 , // Mt Coronet
84 , // Stark Mountain
} ;
2018-08-03 03:11:42 +00:00
2017-11-22 15:52:17 +00:00
private static readonly int [ ] DPPt_MtCoronetExteriorEncounters =
2017-07-25 07:28:43 +00:00
{
4 , 5 , 70
} ;
2017-10-23 06:26:37 +00:00
/// <summary>
/// Locations with headbutt trees accessible from Cave tiles
/// </summary>
private static readonly HashSet < int > HGSS_CaveLocations = new HashSet < int >
2017-07-25 07:28:43 +00:00
{
197 , // DIGLETT's Cave
198 , // Mt. Moon
199 , // Cerulean Cave
200 , // Rock Tunnel
201 , // Power Plant
203 , // Seafoam Islands
204 , // Sprout Tower
205 , // Bell Tower
206 , // Burned Tower
209 , // Ruins of Alph
210 , // Union Cave
211 , // SLOWPOKE Well
214 , // Ilex Forest
216 , // Mt. Mortar
217 , // Ice Path
218 , // Whirl Islands
219 , // Mt. Silver Cave
220 , // Dark Cave
221 , // Kanto Victory Road
223 , // Tohjo Falls
228 , // Cliff Cave
234 , // Cliff Edge Gate
} ;
2017-10-23 06:26:37 +00:00
/// <summary>
/// Locations with headbutt trees accessible from city tiles
/// </summary>
private static readonly HashSet < int > HGSS_CityLocations = new HashSet < int >
2017-07-25 07:28:43 +00:00
{
126 , // New Bark Town
127 , // Cherrygrove City
128 , // Violet City
129 , // Azalea Town
130 , // Cianwood City
131 , // Goldenrod City
132 , // Olivine City
133 , // Ecruteak City
134 , // Mahogany Town
136 , // Blackthorn City
138 , // Pallet Town
139 , // Viridian City
140 , // Pewter City
141 , // Cerulean City
142 , // Lavender Town
143 , // Vermilion City
144 , // Celadon City
145 , // Fuchsia City
146 , // Cinnabar Island
147 , // Indigo Plateau
148 , // Saffron City
227 , // Safari Zone Gate
} ;
2017-10-23 06:26:37 +00:00
/// <summary>
/// Locations with headbutt trees accessible from water tiles
/// </summary>
private static readonly HashSet < int > HGSS_SurfingHeadbutt_Locations = new HashSet < int >
2018-05-12 15:13:39 +00:00
{
126 , // New Bark Town
2017-07-25 07:28:43 +00:00
127 , // Cherrygrove City
2018-05-12 15:13:39 +00:00
128 , // Violet City
133 , // Ecruteak City
135 , // Lake of Rage
138 , // Pallet Town
139 , // Viridian City
160 , // Route 12
169 , // Route 21
170 , // Route 22
174 , // Route 26
175 , // Route 27
176 , // Route 28
178 , // Route 30
179 , // Route 31
180 , // Route 32
182 , // Route 34
183 , // Route 35
190 , // Route 42
191 , // Route 43
192 , // Route 44
214 , // Ilex Forest
2017-07-25 07:28:43 +00:00
} ;
2018-08-03 03:11:42 +00:00
2017-10-23 06:26:37 +00:00
/// <summary>
/// Locations with headbutt trees accessible from tall grass tiles
/// </summary>
private static readonly HashSet < int > HGSS_GrassHeadbutt_Locations = new HashSet < int >
2018-05-12 15:13:39 +00:00
{
137 , // Mt. Silver
2017-07-25 07:28:43 +00:00
149 , // Route 1
150 , // Route 2
151 , // Route 3
152 , // Route 4
153 , // Route 5
154 , // Route 6
155 , // Route 7
159 , // Route 11
161 , // Route 13
163 , // Route 15
164 , // Route 16
2018-05-12 15:13:39 +00:00
169 , // Route 21
170 , // Route 22
174 , // Route 26
175 , // Route 27
176 , // Route 28
2017-07-25 07:28:43 +00:00
177 , // Route 29
2018-05-12 15:13:39 +00:00
178 , // Route 30
179 , // Route 31
180 , // Route 32
2017-07-25 07:28:43 +00:00
181 , // Route 33
2018-05-12 15:13:39 +00:00
182 , // Route 34
183 , // Route 35
2017-07-25 07:28:43 +00:00
184 , // Route 36
185 , // Route 37
186 , // Route 38
187 , // Route 39
2018-05-12 15:13:39 +00:00
191 , // Route 43
192 , // Route 44
2017-07-25 07:28:43 +00:00
194 , // Route 46
195 , // Route 47
196 , // Route 48
219 , // Mt. Silver Cave
224 , // Viridian Forest
} ;
2018-08-03 03:11:42 +00:00
2017-10-30 01:09:30 +00:00
private static readonly int [ ] HGSS_MtSilverCaveExteriorEncounters =
2017-07-25 07:28:43 +00:00
{
2 , 3
} ;
2018-08-03 03:11:42 +00:00
2017-10-30 01:09:30 +00:00
private static readonly int [ ] HGSS_MixInteriorExteriorLocations =
2017-07-25 07:28:43 +00:00
{
209 , // Ruins of Alph
219 , // Mt. Silver Cave
} ;
2018-08-03 03:11:42 +00:00
2017-07-25 07:28:43 +00:00
#endregion
#region Pokéwalker Encounter
// all pkm are in Poke Ball and have a met location of "PokeWalker"
private static readonly EncounterStatic [ ] Encounter_PokeWalker =
{
// Some pkm has a pre-level move, an egg move or even a special move, it might be also available via HM/TM/Tutor
// Johto/Kanto Courses
2019-06-25 17:55:35 +00:00
new EncounterStatic { Species = 084 , Gender = 1 , Level = 08 , } , // Doduo
new EncounterStatic { Species = 115 , Gender = 1 , Level = 08 , } , // Kangaskhan
new EncounterStatic { Species = 029 , Gender = 1 , Level = 05 , } , // Nidoran♀
new EncounterStatic { Species = 032 , Gender = 0 , Level = 05 , } , // Nidoran♂
new EncounterStatic { Species = 016 , Gender = 0 , Level = 05 , } , // Pidgey
new EncounterStatic { Species = 161 , Gender = 1 , Level = 05 , } , // Sentret
new EncounterStatic { Species = 202 , Gender = 1 , Level = 15 , } , // Wobbuffet
new EncounterStatic { Species = 069 , Gender = 1 , Level = 08 , } , // Bellsprout
new EncounterStatic { Species = 046 , Gender = 1 , Level = 06 , } , // Paras
new EncounterStatic { Species = 048 , Gender = 0 , Level = 06 , } , // Venonat
new EncounterStatic { Species = 021 , Gender = 0 , Level = 05 , } , // Spearow
new EncounterStatic { Species = 043 , Gender = 1 , Level = 05 , } , // Oddish
new EncounterStatic { Species = 095 , Gender = 0 , Level = 09 , } , // Onix
new EncounterStatic { Species = 240 , Gender = 0 , Level = 09 , Moves = new [ ] { 241 } , } , // Magby: Sunny Day
new EncounterStatic { Species = 066 , Gender = 1 , Level = 07 , } , // Machop
new EncounterStatic { Species = 077 , Gender = 1 , Level = 07 , } , // Ponyta
new EncounterStatic { Species = 074 , Gender = 1 , Level = 08 , Moves = new [ ] { 189 } , } , // Geodude: Mud-Slap
new EncounterStatic { Species = 163 , Gender = 1 , Level = 06 , } , // Hoothoot
new EncounterStatic { Species = 054 , Gender = 1 , Level = 10 , } , // Psyduck
new EncounterStatic { Species = 120 , Gender = 2 , Level = 10 , } , // Staryu
new EncounterStatic { Species = 060 , Gender = 0 , Level = 08 , } , // Poliwag
new EncounterStatic { Species = 079 , Gender = 0 , Level = 08 , } , // Slowpoke
new EncounterStatic { Species = 191 , Gender = 1 , Level = 06 , } , // Sunkern
new EncounterStatic { Species = 194 , Gender = 0 , Level = 06 , } , // Wooper
new EncounterStatic { Species = 081 , Gender = 2 , Level = 11 , } , // Magnemite
new EncounterStatic { Species = 239 , Gender = 0 , Level = 11 , Moves = new [ ] { 009 } , } , // Elekid: Thunder Punch
new EncounterStatic { Species = 081 , Gender = 2 , Level = 08 , } , // Magnemite
new EncounterStatic { Species = 198 , Gender = 1 , Level = 11 , } , // Murkrow
new EncounterStatic { Species = 019 , Gender = 1 , Level = 07 , } , // Rattata
new EncounterStatic { Species = 163 , Gender = 1 , Level = 07 , } , // Hoothoot
new EncounterStatic { Species = 092 , Gender = 1 , Level = 15 , Moves = new [ ] { 194 } , } , // Gastly: Destiny Bond
new EncounterStatic { Species = 238 , Gender = 1 , Level = 12 , Moves = new [ ] { 419 } , } , // Smoochum: Avalanche
new EncounterStatic { Species = 092 , Gender = 1 , Level = 10 , } , // Gastly
new EncounterStatic { Species = 095 , Gender = 0 , Level = 10 , } , // Onix
new EncounterStatic { Species = 041 , Gender = 0 , Level = 08 , } , // Zubat
new EncounterStatic { Species = 066 , Gender = 0 , Level = 08 , } , // Machop
new EncounterStatic { Species = 060 , Gender = 1 , Level = 15 , Moves = new [ ] { 187 } , } , // Poliwag: Belly Drum
new EncounterStatic { Species = 147 , Gender = 1 , Level = 10 , } , // Dratini
new EncounterStatic { Species = 090 , Gender = 1 , Level = 12 , } , // Shellder
new EncounterStatic { Species = 098 , Gender = 0 , Level = 12 , Moves = new [ ] { 152 } , } , // Krabby: Crabhammer
new EncounterStatic { Species = 072 , Gender = 1 , Level = 09 , } , // Tentacool
new EncounterStatic { Species = 118 , Gender = 1 , Level = 09 , } , // Goldeen
new EncounterStatic { Species = 063 , Gender = 1 , Level = 15 , } , // Abra
new EncounterStatic { Species = 100 , Gender = 2 , Level = 15 , } , // Voltorb
new EncounterStatic { Species = 088 , Gender = 0 , Level = 13 , } , // Grimer
new EncounterStatic { Species = 109 , Gender = 1 , Level = 13 , Moves = new [ ] { 120 } , } , // Koffing: Self-Destruct
new EncounterStatic { Species = 019 , Gender = 1 , Level = 16 , } , // Rattata
new EncounterStatic { Species = 162 , Gender = 0 , Level = 15 , } , // Furret
2017-07-25 07:28:43 +00:00
// Hoenn Courses
2019-06-25 17:55:35 +00:00
new EncounterStatic { Species = 264 , Gender = 1 , Level = 30 , } , // Linoone
new EncounterStatic { Species = 300 , Gender = 1 , Level = 30 , } , // Skitty
new EncounterStatic { Species = 313 , Gender = 0 , Level = 25 , } , // Volbeat
new EncounterStatic { Species = 314 , Gender = 1 , Level = 25 , } , // Illumise
new EncounterStatic { Species = 263 , Gender = 1 , Level = 17 , } , // Zigzagoon
new EncounterStatic { Species = 265 , Gender = 1 , Level = 15 , } , // Wurmple
new EncounterStatic { Species = 298 , Gender = 1 , Level = 20 , } , // Azurill
new EncounterStatic { Species = 320 , Gender = 1 , Level = 31 , } , // Wailmer
new EncounterStatic { Species = 116 , Gender = 1 , Level = 20 , } , // Horsea
new EncounterStatic { Species = 318 , Gender = 1 , Level = 26 , } , // Carvanha
new EncounterStatic { Species = 118 , Gender = 1 , Level = 22 , Moves = new [ ] { 401 } , } , // Goldeen: Aqua Tail
new EncounterStatic { Species = 129 , Gender = 1 , Level = 15 , } , // Magikarp
new EncounterStatic { Species = 218 , Gender = 1 , Level = 31 , } , // Slugma
new EncounterStatic { Species = 307 , Gender = 0 , Level = 32 , } , // Meditite
new EncounterStatic { Species = 111 , Gender = 0 , Level = 25 , } , // Rhyhorn
new EncounterStatic { Species = 228 , Gender = 0 , Level = 27 , } , // Houndour
new EncounterStatic { Species = 074 , Gender = 0 , Level = 29 , } , // Geodude
new EncounterStatic { Species = 077 , Gender = 1 , Level = 19 , } , // Ponyta
new EncounterStatic { Species = 351 , Gender = 1 , Level = 30 , } , // Castform
new EncounterStatic { Species = 352 , Gender = 0 , Level = 30 , } , // Kecleon
new EncounterStatic { Species = 203 , Gender = 1 , Level = 28 , } , // Girafarig
new EncounterStatic { Species = 234 , Gender = 1 , Level = 28 , } , // Stantler
new EncounterStatic { Species = 044 , Gender = 1 , Level = 14 , } , // Gloom
new EncounterStatic { Species = 070 , Gender = 0 , Level = 13 , } , // Weepinbell
new EncounterStatic { Species = 105 , Gender = 1 , Level = 30 , Moves = new [ ] { 037 } , } , // Marowak: Thrash
new EncounterStatic { Species = 128 , Gender = 0 , Level = 30 , } , // Tauros
new EncounterStatic { Species = 042 , Gender = 0 , Level = 33 , } , // Golbat
new EncounterStatic { Species = 177 , Gender = 1 , Level = 24 , } , // Natu
new EncounterStatic { Species = 066 , Gender = 0 , Level = 13 , Moves = new [ ] { 418 } , } , // Machop: Bullet Punch
new EncounterStatic { Species = 092 , Gender = 1 , Level = 15 , } , // Gastly
2017-07-25 07:28:43 +00:00
// Sinnoh Courses
2019-06-25 17:55:35 +00:00
new EncounterStatic { Species = 415 , Gender = 0 , Level = 30 , } , // Combee
new EncounterStatic { Species = 439 , Gender = 0 , Level = 29 , } , // Mime Jr.
new EncounterStatic { Species = 403 , Gender = 1 , Level = 33 , } , // Shinx
new EncounterStatic { Species = 406 , Gender = 0 , Level = 30 , } , // Budew
new EncounterStatic { Species = 399 , Gender = 1 , Level = 13 , } , // Bidoof
new EncounterStatic { Species = 401 , Gender = 0 , Level = 15 , } , // Kricketot
new EncounterStatic { Species = 361 , Gender = 1 , Level = 28 , } , // Snorunt
new EncounterStatic { Species = 459 , Gender = 0 , Level = 31 , Moves = new [ ] { 452 } , } , // Snover: Wood Hammer
new EncounterStatic { Species = 215 , Gender = 0 , Level = 28 , Moves = new [ ] { 306 } , } , // Sneasel: Crash Claw
new EncounterStatic { Species = 436 , Gender = 2 , Level = 20 , } , // Bronzor
new EncounterStatic { Species = 179 , Gender = 1 , Level = 15 , } , // Mareep
new EncounterStatic { Species = 220 , Gender = 1 , Level = 16 , } , // Swinub
new EncounterStatic { Species = 357 , Gender = 1 , Level = 35 , } , // Tropius
new EncounterStatic { Species = 438 , Gender = 0 , Level = 30 , } , // Bonsly
new EncounterStatic { Species = 114 , Gender = 1 , Level = 30 , } , // Tangela
new EncounterStatic { Species = 400 , Gender = 1 , Level = 30 , } , // Bibarel
new EncounterStatic { Species = 102 , Gender = 1 , Level = 17 , } , // Exeggcute
new EncounterStatic { Species = 179 , Gender = 0 , Level = 19 , } , // Mareep
new EncounterStatic { Species = 200 , Gender = 1 , Level = 32 , Moves = new [ ] { 194 } , } , // Misdreavus: Destiny Bond
new EncounterStatic { Species = 433 , Gender = 0 , Level = 22 , Moves = new [ ] { 105 } , } , // Chingling: Recover
new EncounterStatic { Species = 093 , Gender = 0 , Level = 25 , } , // Haunter
new EncounterStatic { Species = 418 , Gender = 0 , Level = 28 , Moves = new [ ] { 226 } , } , // Buizel: Baton Pass
new EncounterStatic { Species = 170 , Gender = 1 , Level = 17 , } , // Chinchou
new EncounterStatic { Species = 223 , Gender = 1 , Level = 19 , } , // Remoraid
new EncounterStatic { Species = 422 , Gender = 1 , Level = 30 , Moves = new [ ] { 243 } , } , // Shellos: Mirror Coat
new EncounterStatic { Species = 456 , Gender = 1 , Level = 26 , } , // Finneon
new EncounterStatic { Species = 086 , Gender = 1 , Level = 27 , } , // Seel
new EncounterStatic { Species = 129 , Gender = 1 , Level = 30 , } , // Magikarp
new EncounterStatic { Species = 054 , Gender = 1 , Level = 22 , Moves = new [ ] { 281 } , } , // Psyduck: Yawn
new EncounterStatic { Species = 090 , Gender = 0 , Level = 20 , } , // Shellder
new EncounterStatic { Species = 025 , Gender = 1 , Level = 30 , } , // Pikachu
new EncounterStatic { Species = 417 , Gender = 1 , Level = 33 , Moves = new [ ] { 175 } , } , // Pachirisu: Flail
new EncounterStatic { Species = 035 , Gender = 1 , Level = 31 , } , // Clefairy
new EncounterStatic { Species = 039 , Gender = 1 , Level = 30 , } , // Jigglypuff
new EncounterStatic { Species = 183 , Gender = 1 , Level = 25 , } , // Marill
new EncounterStatic { Species = 187 , Gender = 1 , Level = 25 , } , // Hoppip
new EncounterStatic { Species = 442 , Gender = 0 , Level = 31 , } , // Spiritomb
new EncounterStatic { Species = 446 , Gender = 0 , Level = 33 , } , // Munchlax
new EncounterStatic { Species = 349 , Gender = 0 , Level = 30 , } , // Feebas
new EncounterStatic { Species = 433 , Gender = 1 , Level = 26 , } , // Chingling
new EncounterStatic { Species = 042 , Gender = 0 , Level = 33 , } , // Golbat
new EncounterStatic { Species = 164 , Gender = 1 , Level = 30 , } , // Noctowl
2017-07-25 07:28:43 +00:00
// Special Courses
2019-06-25 17:55:35 +00:00
new EncounterStatic { Species = 120 , Gender = 2 , Level = 18 , Moves = new [ ] { 113 } , } , // Staryu: Light Screen
new EncounterStatic { Species = 224 , Gender = 1 , Level = 19 , Moves = new [ ] { 324 } , } , // Octillery: Signal Beam
new EncounterStatic { Species = 116 , Gender = 0 , Level = 15 , } , // Horsea
new EncounterStatic { Species = 222 , Gender = 1 , Level = 16 , } , // Corsola
new EncounterStatic { Species = 170 , Gender = 1 , Level = 12 , } , // Chinchou
new EncounterStatic { Species = 223 , Gender = 0 , Level = 14 , } , // Remoraid
new EncounterStatic { Species = 035 , Gender = 0 , Level = 08 , Moves = new [ ] { 236 } , } , // Clefairy: Moonlight
new EncounterStatic { Species = 039 , Gender = 0 , Level = 10 , } , // Jigglypuff
new EncounterStatic { Species = 041 , Gender = 0 , Level = 09 , } , // Zubat
new EncounterStatic { Species = 163 , Gender = 1 , Level = 06 , } , // Hoothoot
new EncounterStatic { Species = 074 , Gender = 0 , Level = 05 , } , // Geodude
new EncounterStatic { Species = 095 , Gender = 1 , Level = 05 , Moves = new [ ] { 088 } , } , // Onix: Rock Throw
new EncounterStatic { Species = 025 , Gender = 0 , Level = 15 , Moves = new [ ] { 019 } , } , // Pikachu: Fly
new EncounterStatic { Species = 025 , Gender = 1 , Level = 14 , Moves = new [ ] { 057 } , } , // Pikachu: Surf
new EncounterStatic { Species = 025 , Gender = 1 , Level = 12 , Moves = new [ ] { 344 , 252 } , } , // Pikachu: Volt Tackle, Fake Out
new EncounterStatic { Species = 025 , Gender = 0 , Level = 13 , Moves = new [ ] { 175 } , } , // Pikachu: Flail
new EncounterStatic { Species = 025 , Gender = 0 , Level = 10 , } , // Pikachu
new EncounterStatic { Species = 025 , Gender = 1 , Level = 10 , } , // Pikachu
new EncounterStatic { Species = 302 , Gender = 1 , Level = 15 , } , // Sableye
new EncounterStatic { Species = 441 , Gender = 0 , Level = 15 , } , // Chatot
new EncounterStatic { Species = 025 , Gender = 1 , Level = 10 , } , // Pikachu
new EncounterStatic { Species = 453 , Gender = 0 , Level = 10 , } , // Croagunk
new EncounterStatic { Species = 417 , Gender = 0 , Level = 05 , } , // Pachirisu
new EncounterStatic { Species = 427 , Gender = 1 , Level = 05 , } , // Buneary
new EncounterStatic { Species = 133 , Gender = 0 , Level = 10 , } , // Eevee
new EncounterStatic { Species = 255 , Gender = 0 , Level = 10 , } , // Torchic
new EncounterStatic { Species = 061 , Gender = 1 , Level = 15 , Moves = new [ ] { 003 } , } , // Poliwhirl: Double Slap
new EncounterStatic { Species = 279 , Gender = 0 , Level = 15 , } , // Pelipper
new EncounterStatic { Species = 025 , Gender = 1 , Level = 08 , } , // Pikachu
new EncounterStatic { Species = 052 , Gender = 0 , Level = 10 , } , // Meowth
new EncounterStatic { Species = 374 , Gender = 2 , Level = 05 , Moves = new [ ] { 428 , 334 , 442 } , } , // Beldum: Zen Headbutt, Iron Defense & Iron Head.
new EncounterStatic { Species = 446 , Gender = 0 , Level = 05 , Moves = new [ ] { 120 } , } , // Munchlax: Self-Destruct
new EncounterStatic { Species = 116 , Gender = 0 , Level = 05 , Moves = new [ ] { 330 } , } , // Horsea: Muddy Water
new EncounterStatic { Species = 355 , Gender = 0 , Level = 05 , Moves = new [ ] { 286 } , } , // Duskull: Imprison
new EncounterStatic { Species = 129 , Gender = 0 , Level = 05 , Moves = new [ ] { 340 } , } , // Magikarp: Bounce
new EncounterStatic { Species = 436 , Gender = 2 , Level = 05 , Moves = new [ ] { 433 } , } , // Bronzor: Trick Room
new EncounterStatic { Species = 239 , Gender = 0 , Level = 05 , Moves = new [ ] { 9 } } , // Elekid: Thunder Punch (can be tutored)
new EncounterStatic { Species = 240 , Gender = 0 , Level = 05 , Moves = new [ ] { 7 } } , // Magby: Fire Punch (can be tutored)
new EncounterStatic { Species = 238 , Gender = 1 , Level = 05 , Moves = new [ ] { 8 } } , // Smoochum: Ice Punch (can be tutored)
new EncounterStatic { Species = 440 , Gender = 1 , Level = 05 , Moves = new [ ] { 215 } } , // Happiny: Heal Bell
new EncounterStatic { Species = 173 , Gender = 1 , Level = 05 , Moves = new [ ] { 118 } } , // Cleffa: Metronome
new EncounterStatic { Species = 174 , Gender = 0 , Level = 05 , Moves = new [ ] { 273 } } , // Igglybuff: Wish
2017-07-25 07:28:43 +00:00
} ;
#endregion
#region Static Encounter / Gift Tables
private static readonly int [ ] Roaming_MetLocation_DPPt_Grass =
{
// Routes 201-218, 221-222 can be encountered in grass
16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 ,
26 , 27 , 28 , 29 , 30 , 31 , 32 , 33 , 36 , 37 ,
47 , // Valley Windworks
49 , // Fuego Ironworks
} ;
2018-08-03 03:11:42 +00:00
2017-07-25 07:28:43 +00:00
private static readonly int [ ] Roaming_MetLocation_DPPt_Surf =
{
// Routes 203-205, 208-210, 212-214, 218-222 can be encountered in water
18 , 19 , 20 , 23 , 24 , 25 , 27 , 28 , 29 , 33 ,
34 , 35 , 36 , 37 ,
47 , // Valley Windworks
49 , // Fuego Ironworks
} ;
2018-08-03 03:11:42 +00:00
2017-07-25 07:28:43 +00:00
private static readonly EncounterStaticTyped [ ] Encounter_DPPt_Roam_Grass =
{
new EncounterStaticTyped { Species = 481 , Level = 50 , Roaming = true , TypeEncounter = EncounterType . TallGrass } , // Mesprit
new EncounterStaticTyped { Species = 488 , Level = 50 , Roaming = true , TypeEncounter = EncounterType . TallGrass } , // Cresselia
new EncounterStaticTyped { Species = 144 , Level = 60 , Roaming = true , TypeEncounter = EncounterType . TallGrass , Version = GameVersion . Pt } , // Articuno
new EncounterStaticTyped { Species = 145 , Level = 60 , Roaming = true , TypeEncounter = EncounterType . TallGrass , Version = GameVersion . Pt } , // Zapdos
new EncounterStaticTyped { Species = 146 , Level = 60 , Roaming = true , TypeEncounter = EncounterType . TallGrass , Version = GameVersion . Pt } , // Moltres
} ;
2018-08-03 03:11:42 +00:00
2017-07-25 07:28:43 +00:00
private static readonly EncounterStaticTyped [ ] Encounter_DPPt_Roam_Surf =
{
new EncounterStaticTyped { Species = 481 , Level = 50 , Roaming = true , TypeEncounter = EncounterType . Surfing_Fishing } , // Mesprit
new EncounterStaticTyped { Species = 488 , Level = 50 , Roaming = true , TypeEncounter = EncounterType . Surfing_Fishing } , // Cresselia
new EncounterStaticTyped { Species = 144 , Level = 60 , Roaming = true , TypeEncounter = EncounterType . Surfing_Fishing , Version = GameVersion . Pt } , // Articuno
new EncounterStaticTyped { Species = 145 , Level = 60 , Roaming = true , TypeEncounter = EncounterType . Surfing_Fishing , Version = GameVersion . Pt } , // Zapdos
new EncounterStaticTyped { Species = 146 , Level = 60 , Roaming = true , TypeEncounter = EncounterType . Surfing_Fishing , Version = GameVersion . Pt } , // Moltres
} ;
2018-08-03 03:11:42 +00:00
2017-07-25 07:28:43 +00:00
private static readonly EncounterStatic [ ] Encounter_DPPt_Regular =
{
2019-06-25 17:55:35 +00:00
// Starters
2017-07-25 07:28:43 +00:00
new EncounterStaticTyped { Gift = true , Species = 387 , Level = 5 , Location = 076 , TypeEncounter = EncounterType . Starter_Fossil_Gift_DP , Version = GameVersion . DP } , // Turtwig @ Lake Verity
new EncounterStaticTyped { Gift = true , Species = 390 , Level = 5 , Location = 076 , TypeEncounter = EncounterType . Starter_Fossil_Gift_DP , Version = GameVersion . DP } , // Chimchar
new EncounterStaticTyped { Gift = true , Species = 393 , Level = 5 , Location = 076 , TypeEncounter = EncounterType . Starter_Fossil_Gift_DP , Version = GameVersion . DP } , // Piplup
new EncounterStaticTyped { Gift = true , Species = 387 , Level = 5 , Location = 016 , TypeEncounter = EncounterType . Starter_Fossil_Gift_Pt_DPTrio , Version = GameVersion . Pt } , // Turtwig @ Route 201
new EncounterStaticTyped { Gift = true , Species = 390 , Level = 5 , Location = 016 , TypeEncounter = EncounterType . Starter_Fossil_Gift_Pt_DPTrio , Version = GameVersion . Pt } , // Chimchar
new EncounterStaticTyped { Gift = true , Species = 393 , Level = 5 , Location = 016 , TypeEncounter = EncounterType . Starter_Fossil_Gift_Pt_DPTrio , Version = GameVersion . Pt } , // Piplup
2019-06-25 17:55:35 +00:00
// Fossil @ Mining Museum
2017-07-25 07:28:43 +00:00
new EncounterStaticTyped { Gift = true , Species = 138 , Level = 20 , Location = 094 , TypeEncounter = EncounterType . Starter_Fossil_Gift_DP , Version = GameVersion . DP } , // Omanyte
new EncounterStaticTyped { Gift = true , Species = 140 , Level = 20 , Location = 094 , TypeEncounter = EncounterType . Starter_Fossil_Gift_DP , Version = GameVersion . DP } , // Kabuto
new EncounterStaticTyped { Gift = true , Species = 142 , Level = 20 , Location = 094 , TypeEncounter = EncounterType . Starter_Fossil_Gift_DP , Version = GameVersion . DP } , // Aerodactyl
new EncounterStaticTyped { Gift = true , Species = 345 , Level = 20 , Location = 094 , TypeEncounter = EncounterType . Starter_Fossil_Gift_DP , Version = GameVersion . DP } , // Lileep
new EncounterStaticTyped { Gift = true , Species = 347 , Level = 20 , Location = 094 , TypeEncounter = EncounterType . Starter_Fossil_Gift_DP , Version = GameVersion . DP } , // Anorith
new EncounterStaticTyped { Gift = true , Species = 408 , Level = 20 , Location = 094 , TypeEncounter = EncounterType . Starter_Fossil_Gift_DP , Version = GameVersion . DP } , // Cranidos
new EncounterStaticTyped { Gift = true , Species = 410 , Level = 20 , Location = 094 , TypeEncounter = EncounterType . Starter_Fossil_Gift_DP , Version = GameVersion . DP } , // Shieldon
new EncounterStaticTyped { Gift = true , Species = 138 , Level = 20 , Location = 094 , TypeEncounter = EncounterType . Starter_Fossil_Gift_Pt_DPTrio , Version = GameVersion . Pt } , // Omanyte
new EncounterStaticTyped { Gift = true , Species = 140 , Level = 20 , Location = 094 , TypeEncounter = EncounterType . Starter_Fossil_Gift_Pt_DPTrio , Version = GameVersion . Pt } , // Kabuto
new EncounterStaticTyped { Gift = true , Species = 142 , Level = 20 , Location = 094 , TypeEncounter = EncounterType . Starter_Fossil_Gift_Pt_DPTrio , Version = GameVersion . Pt } , // Aerodactyl
new EncounterStaticTyped { Gift = true , Species = 345 , Level = 20 , Location = 094 , TypeEncounter = EncounterType . Starter_Fossil_Gift_Pt_DPTrio , Version = GameVersion . Pt } , // Lileep
new EncounterStaticTyped { Gift = true , Species = 347 , Level = 20 , Location = 094 , TypeEncounter = EncounterType . Starter_Fossil_Gift_Pt_DPTrio , Version = GameVersion . Pt } , // Anorith
new EncounterStaticTyped { Gift = true , Species = 408 , Level = 20 , Location = 094 , TypeEncounter = EncounterType . Starter_Fossil_Gift_Pt_DPTrio , Version = GameVersion . Pt } , // Cranidos
new EncounterStaticTyped { Gift = true , Species = 410 , Level = 20 , Location = 094 , TypeEncounter = EncounterType . Starter_Fossil_Gift_Pt_DPTrio , Version = GameVersion . Pt } , // Shieldon
2019-06-25 17:55:35 +00:00
// Gift
new EncounterStaticTyped { Gift = true , Species = 133 , Level = 05 , Location = 010 , Version = GameVersion . DP , TypeEncounter = EncounterType . Starter_Fossil_Gift_DP , } , // Eevee @ Hearthome City
new EncounterStaticTyped { Gift = true , Species = 133 , Level = 20 , Location = 010 , Version = GameVersion . Pt , TypeEncounter = EncounterType . Starter_Fossil_Gift_Pt_DPTrio , } , // Eevee @ Hearthome City
new EncounterStaticTyped { Gift = true , Species = 137 , Level = 25 , Location = 012 , Version = GameVersion . Pt , TypeEncounter = EncounterType . Starter_Fossil_Gift_Pt_DPTrio , } , // Porygon @ Veilstone City
new EncounterStatic { Gift = true , Species = 175 , Level = 01 , EggLocation = 2011 , Version = GameVersion . Pt , } , // Togepi Egg from Cynthia
new EncounterStatic { Gift = true , Species = 440 , Level = 01 , EggLocation = 2009 , Version = GameVersion . DP , } , // Happiny Egg from Traveling Man
new EncounterStatic { Gift = true , Species = 447 , Level = 01 , EggLocation = 2010 , } , // Riolu Egg from Riley
2019-09-12 05:06:24 +00:00
2019-06-25 17:55:35 +00:00
// Stationary
new EncounterStatic { Species = 425 , Level = 22 , Location = 47 , Version = GameVersion . DP } , // Drifloon @ Valley Windworks
new EncounterStatic { Species = 425 , Level = 15 , Location = 47 , Version = GameVersion . Pt } , // Drifloon @ Valley Windworks
new EncounterStaticTyped { Species = 479 , Level = 15 , Location = 70 , Version = GameVersion . DP , TypeEncounter = EncounterType . Building_EnigmaStone , } , // Rotom @ Old Chateau
new EncounterStaticTyped { Species = 479 , Level = 20 , Location = 70 , Version = GameVersion . Pt , TypeEncounter = EncounterType . Building_EnigmaStone , } , // Rotom @ Old Chateau
2018-05-12 15:13:39 +00:00
new EncounterStatic { Species = 442 , Level = 25 , Location = 24 } , // Spiritomb @ Route 209
2019-09-12 05:06:24 +00:00
2019-06-25 17:55:35 +00:00
// Stationary Legendary
new EncounterStaticTyped { Species = 377 , Level = 30 , Location = 125 , Version = GameVersion . Pt , TypeEncounter = EncounterType . Cave_HallOfOrigin , } , // Regirock @ Rock Peak Ruins
new EncounterStaticTyped { Species = 378 , Level = 30 , Location = 124 , Version = GameVersion . Pt , TypeEncounter = EncounterType . Cave_HallOfOrigin , } , // Regice @ Iceberg Ruins
new EncounterStaticTyped { Species = 379 , Level = 30 , Location = 123 , Version = GameVersion . Pt , TypeEncounter = EncounterType . Cave_HallOfOrigin , } , // Registeel @ Iron Ruins
new EncounterStaticTyped { Species = 480 , Level = 50 , Location = 089 , TypeEncounter = EncounterType . Cave_HallOfOrigin , } , // Uxie @ Acuity Cavern
new EncounterStaticTyped { Species = 482 , Level = 50 , Location = 088 , TypeEncounter = EncounterType . Cave_HallOfOrigin , } , // Azelf @ Valor Cavern
new EncounterStaticTyped { Species = 483 , Level = 47 , Location = 051 , Version = GameVersion . D , TypeEncounter = EncounterType . DialgaPalkia } , // Dialga @ Spear Pillar
new EncounterStaticTyped { Species = 484 , Level = 47 , Location = 051 , Version = GameVersion . P , TypeEncounter = EncounterType . DialgaPalkia } , // Palkia @ Spear Pillar
new EncounterStaticTyped { Species = 483 , Level = 70 , Location = 051 , Version = GameVersion . Pt , TypeEncounter = EncounterType . DialgaPalkia } , // Dialga @ Spear Pillar
new EncounterStaticTyped { Species = 484 , Level = 70 , Location = 051 , Version = GameVersion . Pt , TypeEncounter = EncounterType . DialgaPalkia } , // Palkia @ Spear Pillar
new EncounterStaticTyped { Species = 485 , Level = 70 , Location = 084 , Version = GameVersion . DP , TypeEncounter = EncounterType . Cave_HallOfOrigin } , // Heatran @ Stark Mountain
new EncounterStaticTyped { Species = 485 , Level = 50 , Location = 084 , Version = GameVersion . Pt , TypeEncounter = EncounterType . Cave_HallOfOrigin } , // Heatran @ Stark Mountain
new EncounterStaticTyped { Species = 486 , Level = 70 , Location = 064 , Version = GameVersion . DP , TypeEncounter = EncounterType . Cave_HallOfOrigin } , // Regigigas @ Snowpoint Temple
new EncounterStaticTyped { Species = 486 , Level = 01 , Location = 064 , Version = GameVersion . Pt , TypeEncounter = EncounterType . Cave_HallOfOrigin } , // Regigigas @ Snowpoint Temple
new EncounterStaticTyped { Species = 487 , Level = 70 , Location = 062 , Version = GameVersion . DP , Form = 0 , TypeEncounter = EncounterType . Cave_HallOfOrigin } , // Giratina @ Turnback Cave
new EncounterStaticTyped { Species = 487 , Level = 47 , Location = 117 , Version = GameVersion . Pt , Form = 1 , TypeEncounter = EncounterType . DistortionWorld_Pt , HeldItem = 112 } , // Giratina @ Distortion World
new EncounterStaticTyped { Species = 487 , Level = 47 , Location = 062 , Version = GameVersion . Pt , Form = 0 , TypeEncounter = EncounterType . Cave_HallOfOrigin } , // Giratina @ Turnback Cave
2019-09-12 05:06:24 +00:00
2019-06-25 17:55:35 +00:00
// Event
new EncounterStaticTyped { Species = 491 , Level = 40 , Location = 079 , Version = GameVersion . DP , TypeEncounter = EncounterType . TallGrass } , // Darkrai @ Newmoon Island (Unreleased in Diamond and Pearl)
new EncounterStaticTyped { Species = 491 , Level = 50 , Location = 079 , Version = GameVersion . Pt , TypeEncounter = EncounterType . TallGrass } , // Darkrai @ Newmoon Island
new EncounterStatic { Species = 492 , Form = 0 , Level = 30 , Location = 063 , Version = GameVersion . Pt , Fateful = true } , // Shaymin @ Flower Paradise
new EncounterStatic { Species = 492 , Form = 0 , Level = 30 , Location = 063 , Version = GameVersion . DP , Fateful = false } , // Shaymin @ Flower Paradise (Unreleased in Diamond and Pearl)
new EncounterStaticTyped { Species = 493 , Form = 0 , Level = 80 , Location = 086 , TypeEncounter = EncounterType . Cave_HallOfOrigin } , // Arceus @ Hall of Origin (Unreleased)
2017-07-25 07:28:43 +00:00
} ;
2018-08-03 03:11:42 +00:00
2017-07-25 07:28:43 +00:00
private static readonly EncounterStatic [ ] Encounter_DPPt = Encounter_DPPt_Roam_Grass . SelectMany ( e = > e . Clone ( Roaming_MetLocation_DPPt_Grass ) ) . Concat (
Encounter_DPPt_Roam_Surf . SelectMany ( e = > e . Clone ( Roaming_MetLocation_DPPt_Surf ) ) ) . Concat (
Encounter_DPPt_Regular ) . ToArray ( ) ;
// Grass 29-39, 42-46, 47, 48
// Surf 30-32 34-35, 40-45, 47
// Route 45 innacesible surf
private static readonly int [ ] Roaming_MetLocation_HGSS_Johto_Grass =
{
// Routes 29-48 can be encountered in grass
// Won't go to routes 40,41,47,48
2019-06-25 17:55:35 +00:00
177 , 178 , 179 , 180 , 181 , 182 , 183 , 184 , 185 , 186 ,
187 , 190 , 191 , 192 , 193 , 194 ,
2017-07-25 07:28:43 +00:00
} ;
2018-08-03 03:11:42 +00:00
2017-07-25 07:28:43 +00:00
private static readonly int [ ] Roaming_MetLocation_HGSS_Johto_Surf =
{
// Routes 30-32,34-35,40-45 and 47 can be encountered in water
// Won't go to routes 40,41,47,48
2019-06-25 17:55:35 +00:00
178 , 179 , 180 , 182 , 183 , 190 , 191 , 192 , 193
2017-07-25 07:28:43 +00:00
} ;
2018-08-03 03:11:42 +00:00
2017-07-25 07:28:43 +00:00
private static readonly EncounterStaticTyped [ ] Encounter_HGSS_JohtoRoam_Grass =
{
new EncounterStaticTyped { Species = 243 , Level = 40 , Roaming = true , TypeEncounter = EncounterType . TallGrass , } , // Raikou
new EncounterStaticTyped { Species = 244 , Level = 40 , Roaming = true , TypeEncounter = EncounterType . TallGrass , } , // Entei
} ;
2018-08-03 03:11:42 +00:00
2017-07-25 07:28:43 +00:00
private static readonly EncounterStaticTyped [ ] Encounter_HGSS_JohtoRoam_Surf =
{
new EncounterStaticTyped { Species = 243 , Level = 40 , Roaming = true , TypeEncounter = EncounterType . Surfing_Fishing , } , // Raikou
new EncounterStaticTyped { Species = 244 , Level = 40 , Roaming = true , TypeEncounter = EncounterType . Surfing_Fishing , } , // Entei
} ;
2018-08-03 03:11:42 +00:00
2017-07-25 07:28:43 +00:00
private static readonly int [ ] Roaming_MetLocation_HGSS_Kanto_Grass =
{
// Route 01-18,21,22,24,26 and 28 can be encountered in grass
// Won't go to route 23 25 27
2019-06-25 17:55:35 +00:00
149 , 150 , 151 , 152 , 153 , 154 , 155 , 156 , 157 , 158 ,
159 , 160 , 161 , 162 , 163 , 164 , 165 , 166 ,
169 , 170 , 172 , 174 , 176 ,
2017-07-25 07:28:43 +00:00
} ;
2018-08-03 03:11:42 +00:00
2017-07-25 07:28:43 +00:00
private static readonly int [ ] Roaming_MetLocation_HGSS_Kanto_Surf =
{
// Route 4,6,9,10,12,13,19-22,24,26 and 28 can be encountered in water
// Won't go to route 23 25 27
2019-06-25 17:55:35 +00:00
152 , 154 , 157 , 158 , 160 , 161 , 167 , 168 , 169 , 170 ,
172 , 174 , 176 ,
2017-07-25 07:28:43 +00:00
} ;
2018-08-03 03:11:42 +00:00
2017-07-25 07:28:43 +00:00
private static readonly EncounterStaticTyped [ ] Encounter_HGSS_KantoRoam_Grass =
{
2019-06-25 17:55:35 +00:00
new EncounterStaticTyped { Species = 380 , Level = 35 , Version = GameVersion . HG , Roaming = true , TypeEncounter = EncounterType . TallGrass , } , // Latias
new EncounterStaticTyped { Species = 381 , Level = 35 , Version = GameVersion . SS , Roaming = true , TypeEncounter = EncounterType . TallGrass , } , // Latios
2017-07-25 07:28:43 +00:00
} ;
2018-08-03 03:11:42 +00:00
2017-07-25 07:28:43 +00:00
private static readonly EncounterStaticTyped [ ] Encounter_HGSS_KantoRoam_Surf =
{
2019-06-25 17:55:35 +00:00
new EncounterStaticTyped { Species = 380 , Level = 35 , Version = GameVersion . HG , Roaming = true , TypeEncounter = EncounterType . Surfing_Fishing , } , // Latias
new EncounterStaticTyped { Species = 381 , Level = 35 , Version = GameVersion . SS , Roaming = true , TypeEncounter = EncounterType . Surfing_Fishing , } , // Latios
2017-07-25 07:28:43 +00:00
} ;
2018-08-03 03:11:42 +00:00
2017-07-25 07:28:43 +00:00
internal static readonly EncounterStatic SpikyEaredPichu = new EncounterStaticTyped // Spiky-Eared Pichu @ Ilex Forest
{
Species = 172 ,
Level = 30 ,
Gender = 1 ,
Form = 1 ,
Nature = Nature . Naughty ,
Location = 214 ,
Moves = new [ ] { 344 , 270 , 207 , 220 } ,
TypeEncounter = EncounterType . Starter_Fossil_Gift_Pt_DPTrio ,
2018-03-17 02:35:55 +00:00
Shiny = Shiny . Never
2017-07-25 07:28:43 +00:00
} ;
2018-08-03 03:11:42 +00:00
2017-07-25 07:28:43 +00:00
private static readonly EncounterStatic [ ] Encounter_HGSS_Regular =
{
2019-06-25 17:55:35 +00:00
// Starters
2017-07-25 07:28:43 +00:00
new EncounterStaticTyped { Gift = true , Species = 001 , Level = 05 , Location = 138 , TypeEncounter = EncounterType . Starter_Fossil_Gift_Pt_DPTrio } , // Bulbasaur @ Pallet Town
new EncounterStaticTyped { Gift = true , Species = 004 , Level = 05 , Location = 138 , TypeEncounter = EncounterType . Starter_Fossil_Gift_Pt_DPTrio } , // Charmander
new EncounterStaticTyped { Gift = true , Species = 007 , Level = 05 , Location = 138 , TypeEncounter = EncounterType . Starter_Fossil_Gift_Pt_DPTrio } , // Squirtle
new EncounterStaticTyped { Gift = true , Species = 152 , Level = 05 , Location = 126 , TypeEncounter = EncounterType . Starter_Fossil_Gift_DP } , // Chikorita @ New Bark Town
new EncounterStaticTyped { Gift = true , Species = 155 , Level = 05 , Location = 126 , TypeEncounter = EncounterType . Starter_Fossil_Gift_DP } , // Cyndaquil
new EncounterStaticTyped { Gift = true , Species = 158 , Level = 05 , Location = 126 , TypeEncounter = EncounterType . Starter_Fossil_Gift_DP } , // Totodile
new EncounterStaticTyped { Gift = true , Species = 252 , Level = 05 , Location = 148 , TypeEncounter = EncounterType . Starter_Fossil_Gift_Pt_DPTrio } , // Treecko @ Saffron City
new EncounterStaticTyped { Gift = true , Species = 255 , Level = 05 , Location = 148 , TypeEncounter = EncounterType . Starter_Fossil_Gift_Pt_DPTrio } , // Torchic
new EncounterStaticTyped { Gift = true , Species = 258 , Level = 05 , Location = 148 , TypeEncounter = EncounterType . Starter_Fossil_Gift_Pt_DPTrio } , // Mudkip
2019-09-12 05:06:24 +00:00
2019-06-25 17:55:35 +00:00
// Fossils @ Pewter City
2017-07-25 07:28:43 +00:00
new EncounterStaticTyped { Gift = true , Species = 138 , Level = 20 , Location = 140 , TypeEncounter = EncounterType . Starter_Fossil_Gift_Pt_DPTrio , } , // Omanyte
new EncounterStaticTyped { Gift = true , Species = 140 , Level = 20 , Location = 140 , TypeEncounter = EncounterType . Starter_Fossil_Gift_Pt_DPTrio , } , // Kabuto
new EncounterStaticTyped { Gift = true , Species = 142 , Level = 20 , Location = 140 , TypeEncounter = EncounterType . Starter_Fossil_Gift_Pt_DPTrio , } , // Aerodactyl
new EncounterStaticTyped { Gift = true , Species = 345 , Level = 20 , Location = 140 , TypeEncounter = EncounterType . Starter_Fossil_Gift_Pt_DPTrio , } , // Lileep
new EncounterStaticTyped { Gift = true , Species = 347 , Level = 20 , Location = 140 , TypeEncounter = EncounterType . Starter_Fossil_Gift_Pt_DPTrio , } , // Anorith
new EncounterStaticTyped { Gift = true , Species = 408 , Level = 20 , Location = 140 , TypeEncounter = EncounterType . Starter_Fossil_Gift_Pt_DPTrio , } , // Cranidos
new EncounterStaticTyped { Gift = true , Species = 410 , Level = 20 , Location = 140 , TypeEncounter = EncounterType . Starter_Fossil_Gift_Pt_DPTrio , } , // Shieldon
2019-09-12 05:06:24 +00:00
2019-06-25 17:55:35 +00:00
// Gift
2017-07-25 07:28:43 +00:00
new EncounterStaticTyped { Gift = true , Species = 133 , Level = 05 , Location = 131 , TypeEncounter = EncounterType . Starter_Fossil_Gift_Pt_DPTrio } , // Eevee @ Goldenrod City
new EncounterStaticTyped { Gift = true , Species = 147 , Level = 15 , Location = 222 , TypeEncounter = EncounterType . Starter_Fossil_Gift_Pt_DPTrio , Moves = new [ ] { 245 } } , // Dratini @ Dragon's Den (ExtremeSpeed)
new EncounterStaticTyped { Gift = true , Species = 236 , Level = 10 , Location = 216 , TypeEncounter = EncounterType . Starter_Fossil_Gift_Pt_DPTrio , } , // Tyrogue @ Mt. Mortar
new EncounterStatic { Gift = true , Species = 175 , Level = 01 , EggLocation = 2013 , Moves = new [ ] { 326 } } , // Togepi Egg from Mr. Pokemon (Extrasensory as Egg move)
new EncounterStatic { Gift = true , Species = 179 , Level = 01 , EggLocation = 2014 , } , // Mareep Egg from Primo
new EncounterStatic { Gift = true , Species = 194 , Level = 01 , EggLocation = 2014 , } , // Wooper Egg from Primo
new EncounterStatic { Gift = true , Species = 218 , Level = 01 , EggLocation = 2014 , } , // Slugma Egg from Primo
2019-09-12 05:06:24 +00:00
2017-07-25 07:28:43 +00:00
// Celadon City Game Corner
new EncounterStaticTyped { Gift = true , Species = 122 , Level = 15 , Location = 144 , TypeEncounter = EncounterType . Starter_Fossil_Gift_Pt_DPTrio } , // Mr. Mime
new EncounterStaticTyped { Gift = true , Species = 133 , Level = 15 , Location = 144 , TypeEncounter = EncounterType . Starter_Fossil_Gift_Pt_DPTrio } , // Eevee
new EncounterStaticTyped { Gift = true , Species = 137 , Level = 15 , Location = 144 , TypeEncounter = EncounterType . Starter_Fossil_Gift_Pt_DPTrio } , // Porygon
2019-09-12 05:06:24 +00:00
2017-07-25 07:28:43 +00:00
// Goldenrod City Game Corner
new EncounterStaticTyped { Gift = true , Species = 063 , Level = 15 , Location = 131 , TypeEncounter = EncounterType . Starter_Fossil_Gift_Pt_DPTrio } , // Abra
new EncounterStaticTyped { Gift = true , Species = 023 , Level = 15 , Location = 131 , TypeEncounter = EncounterType . Starter_Fossil_Gift_Pt_DPTrio , Version = GameVersion . HG } , // Ekans
new EncounterStaticTyped { Gift = true , Species = 027 , Level = 15 , Location = 131 , TypeEncounter = EncounterType . Starter_Fossil_Gift_Pt_DPTrio , Version = GameVersion . SS } , // Sandshrew
new EncounterStaticTyped { Gift = true , Species = 147 , Level = 15 , Location = 131 , TypeEncounter = EncounterType . Starter_Fossil_Gift_Pt_DPTrio } , // Dratini
2019-09-12 05:06:24 +00:00
2017-07-25 07:28:43 +00:00
// Team Rocket HQ Trap Floor
new EncounterStaticTyped { Species = 100 , Level = 23 , Location = 213 , TypeEncounter = EncounterType . Building_EnigmaStone , } , // Voltorb
new EncounterStaticTyped { Species = 074 , Level = 21 , Location = 213 , TypeEncounter = EncounterType . Building_EnigmaStone , } , // Geodude
2018-05-12 15:13:39 +00:00
new EncounterStaticTyped { Species = 109 , Level = 21 , Location = 213 , TypeEncounter = EncounterType . Building_EnigmaStone , } , // Koffing
2017-07-25 07:28:43 +00:00
2019-06-25 17:55:35 +00:00
// Stationary
new EncounterStaticTyped { Species = 130 , Level = 30 , Location = 135 , TypeEncounter = EncounterType . Surfing_Fishing , Shiny = Shiny . Always } , // Gyarados @ Lake of Rage
new EncounterStaticTyped { Species = 131 , Level = 20 , Location = 210 , TypeEncounter = EncounterType . Surfing_Fishing , } , // Lapras @ Union Cave Friday Only
new EncounterStaticTyped { Species = 101 , Level = 23 , Location = 213 , TypeEncounter = EncounterType . Building_EnigmaStone , } , // Electrode @ Team Rocket HQ
new EncounterStatic { Species = 143 , Level = 50 , Location = 159 , } , // Snorlax @ Route 11
new EncounterStatic { Species = 143 , Level = 50 , Location = 160 , } , // Snorlax @ Route 12
new EncounterStatic { Species = 185 , Level = 20 , Location = 184 , } , // Sudowoodo @ Route 36, Encounter does not have type
2017-07-25 07:28:43 +00:00
SpikyEaredPichu ,
2019-09-12 05:06:24 +00:00
2019-06-25 17:55:35 +00:00
// Stationary Legendary
new EncounterStaticTyped { Species = 144 , Level = 50 , Location = 203 , TypeEncounter = EncounterType . Cave_HallOfOrigin } , // Articuno @ Seafoam Islands
new EncounterStatic { Species = 145 , Level = 50 , Location = 158 , } , // Zapdos @ Route 10
new EncounterStaticTyped { Species = 146 , Level = 50 , Location = 219 , TypeEncounter = EncounterType . Cave_HallOfOrigin } , // Moltres @ Mt. Silver Cave
new EncounterStaticTyped { Species = 150 , Level = 70 , Location = 199 , TypeEncounter = EncounterType . Cave_HallOfOrigin } , // Mewtwo @ Cerulean Cave
new EncounterStatic { Species = 245 , Level = 40 , Location = 173 , } , // Suicune @ Route 25
new EncounterStaticTyped { Species = 245 , Level = 40 , Location = 206 , TypeEncounter = EncounterType . Cave_HallOfOrigin } , // Suicune @ Burned Tower
new EncounterStaticTyped { Species = 249 , Level = 45 , Location = 218 , Version = GameVersion . SS , TypeEncounter = EncounterType . Surfing_Fishing } , // Lugia @ Whirl Islands
new EncounterStaticTyped { Species = 249 , Level = 70 , Location = 218 , Version = GameVersion . HG , TypeEncounter = EncounterType . Surfing_Fishing } , // Lugia @ Whirl Islands
new EncounterStaticTyped { Species = 250 , Level = 45 , Location = 205 , Version = GameVersion . HG , TypeEncounter = EncounterType . Building_EnigmaStone } , // Ho-Oh @ Bell Tower
new EncounterStaticTyped { Species = 250 , Level = 70 , Location = 205 , Version = GameVersion . SS , TypeEncounter = EncounterType . Building_EnigmaStone } , // Ho-Oh @ Bell Tower
new EncounterStaticTyped { Species = 380 , Level = 40 , Location = 140 , Version = GameVersion . SS , TypeEncounter = EncounterType . Building_EnigmaStone } , // Latias @ Pewter City
new EncounterStaticTyped { Species = 381 , Level = 40 , Location = 140 , Version = GameVersion . HG , TypeEncounter = EncounterType . Building_EnigmaStone } , // Latios @ Pewter City
new EncounterStaticTyped { Species = 382 , Level = 50 , Location = 232 , Version = GameVersion . HG , TypeEncounter = EncounterType . Cave_HallOfOrigin } , // Kyogre @ Embedded Tower
new EncounterStaticTyped { Species = 383 , Level = 50 , Location = 232 , Version = GameVersion . SS , TypeEncounter = EncounterType . Cave_HallOfOrigin } , // Groudon @ Embedded Tower
new EncounterStaticTyped { Species = 384 , Level = 50 , Location = 232 , TypeEncounter = EncounterType . Cave_HallOfOrigin } , // Rayquaza @ Embedded Tower
new EncounterStaticTyped { Species = 483 , Level = 01 , Location = 231 , Gift = true , TypeEncounter = EncounterType . Starter_Fossil_Gift_Pt_DPTrio } , // Dialga @ Sinjoh Ruins
new EncounterStaticTyped { Species = 484 , Level = 01 , Location = 231 , Gift = true , TypeEncounter = EncounterType . Starter_Fossil_Gift_Pt_DPTrio } , // Palkia @ Sinjoh Ruins
new EncounterStaticTyped { Species = 487 , Level = 01 , Location = 231 , Gift = true , TypeEncounter = EncounterType . Starter_Fossil_Gift_Pt_DPTrio , Form = 1 , HeldItem = 112 } , // Giratina @ Sinjoh Ruins
2017-07-25 07:28:43 +00:00
} ;
2018-08-03 03:11:42 +00:00
2018-03-18 15:37:40 +00:00
private static readonly EncounterStatic [ ] Encounter_HGSS = ConcatAll (
Encounter_HGSS_KantoRoam_Grass . SelectMany ( e = > e . Clone ( Roaming_MetLocation_HGSS_Kanto_Grass ) ) ,
Encounter_HGSS_KantoRoam_Surf . SelectMany ( e = > e . Clone ( Roaming_MetLocation_HGSS_Kanto_Surf ) ) ,
Encounter_HGSS_JohtoRoam_Grass . SelectMany ( e = > e . Clone ( Roaming_MetLocation_HGSS_Johto_Grass ) ) ,
Encounter_HGSS_JohtoRoam_Surf . SelectMany ( e = > e . Clone ( Roaming_MetLocation_HGSS_Johto_Surf ) ) ,
Encounter_HGSS_Regular ) ;
2017-07-25 07:28:43 +00:00
#endregion
#region Trade Tables
PKHeX.Core Nullable cleanup (#2401)
* Handle some nullable cases
Refactor MysteryGift into a second abstract class (backed by a byte array, or fake data)
Make some classes have explicit constructors instead of { } initialization
* Handle bits more obviously without null
* Make SaveFile.BAK explicitly readonly again
* merge constructor methods to have readonly fields
* Inline some properties
* More nullable handling
* Rearrange box actions
define straightforward classes to not have any null properties
* Make extrabyte reference array immutable
* Move tooltip creation to designer
* Rearrange some logic to reduce nesting
* Cache generated fonts
* Split mystery gift album purpose
* Handle more tooltips
* Disallow null setters
* Don't capture RNG object, only type enum
* Unify learnset objects
Now have readonly properties which are never null
don't new() empty learnsets (>800 Learnset objects no longer created,
total of 2400 objects since we also new() a move & level array)
optimize g1/2 reader for early abort case
* Access rewrite
Initialize blocks in a separate object, and get via that object
removes a couple hundred "might be null" warnings since blocks are now readonly getters
some block references have been relocated, but interfaces should expose all that's needed
put HoF6 controls in a groupbox, and disable
* Readonly personal data
* IVs non nullable for mystery gift
* Explicitly initialize forced encounter moves
* Make shadow objects readonly & non-null
Put murkrow fix in binary data resource, instead of on startup
* Assign dex form fetch on constructor
Fixes legality parsing edge cases
also handle cxd parse for valid; exit before exception is thrown in FrameGenerator
* Remove unnecessary null checks
* Keep empty value until init
SetPouch sets the value to an actual one during load, but whatever
* Readonly team lock data
* Readonly locks
Put locked encounters at bottom (favor unlocked)
* Mail readonly data / offset
Rearrange some call flow and pass defaults
Add fake classes for SaveDataEditor mocking
Always party size, no need to check twice in stat editor
use a fake save file as initial data for savedata editor, and for
gamedata (wow i found a usage)
constrain eventwork editor to struct variable types (uint, int, etc),
thus preventing null assignment errors
2019-10-17 01:47:31 +00:00
private static readonly string [ ] RanchOTNames = { string . Empty , "ユカリ" , "Hayley" , "EULALIE" , "GIULIA" , "EUKALIA" , string . Empty , "Eulalia" } ;
2018-08-03 03:11:42 +00:00
2017-09-21 04:28:29 +00:00
private static readonly EncounterTrade [ ] RanchGifts =
{
2020-03-14 04:39:35 +00:00
new EncounterTradePID ( 323975838 ) { Species = 025 , Level = 18 , Moves = new [ ] { 447 , 085 , 148 , 104 } , TID = 1000 , SID = 19840 , OTGender = 1 , Version = GameVersion . D , Location = 0068 , Gender = 0 , Ability = 1 , CurrentLevel = 20 , } , // Pikachu
new EncounterTradePID ( 323977664 ) { Species = 037 , Level = 16 , Moves = new [ ] { 412 , 109 , 053 , 219 } , TID = 1000 , SID = 21150 , OTGender = 1 , Version = GameVersion . D , Location = 3000 , Gender = 0 , Ability = 1 , CurrentLevel = 30 , } , // Vulpix
new EncounterTradePID ( 323975579 ) { Species = 077 , Level = 13 , Moves = new [ ] { 036 , 033 , 039 , 052 } , TID = 1000 , SID = 01123 , OTGender = 1 , Version = GameVersion . D , Location = 3000 , Gender = 0 , Ability = 2 , CurrentLevel = 16 , } , // Ponyta
new EncounterTradePID ( 323975564 ) { Species = 108 , Level = 34 , Moves = new [ ] { 076 , 111 , 014 , 205 } , TID = 1000 , SID = 03050 , OTGender = 1 , Version = GameVersion . D , Location = 0077 , Gender = 0 , Ability = 1 , CurrentLevel = 40 , } , // Lickitung
new EncounterTradePID ( 323977579 ) { Species = 114 , Level = 01 , Moves = new [ ] { 437 , 438 , 079 , 246 } , TID = 1000 , SID = 49497 , OTGender = 1 , Version = GameVersion . D , Location = 3000 , Gender = 1 , Ability = 2 , } , // Tangela
new EncounterTradePID ( 323977675 ) { Species = 133 , Level = 16 , Moves = new [ ] { 363 , 270 , 098 , 247 } , TID = 1000 , SID = 47710 , OTGender = 1 , Version = GameVersion . D , Location = 0068 , Gender = 0 , Ability = 2 , CurrentLevel = 30 , } , // Eevee
new EncounterTradePID ( 323977588 ) { Species = 142 , Level = 20 , Moves = new [ ] { 363 , 089 , 444 , 332 } , TID = 1000 , SID = 43066 , OTGender = 1 , Version = GameVersion . D , Location = 0094 , Gender = 0 , Ability = 1 , CurrentLevel = 50 , } , // Aerodactyl
2017-09-21 04:28:29 +00:00
new EncounterTrade { Species = 151 , Level = 50 , Moves = new [ ] { 235 , 216 , 095 , 100 } , TID = 1000 , SID = 59228 , OTGender = 1 , Version = GameVersion . D , Location = 3000 , Gender = 2 , Fateful = true , Ball = 0x10 , } , // Mew
2020-03-14 04:39:35 +00:00
new EncounterTradePID ( 232975554 ) { Species = 193 , Level = 22 , Moves = new [ ] { 318 , 095 , 246 , 138 } , TID = 1000 , SID = 42301 , OTGender = 1 , Version = GameVersion . D , Location = 0052 , Gender = 0 , Ability = 1 , CurrentLevel = 45 , Ball = 0x05 , } , // Yanma
new EncounterTradePID ( 323975570 ) { Species = 241 , Level = 16 , Moves = new [ ] { 208 , 215 , 360 , 359 } , TID = 1000 , SID = 02707 , OTGender = 1 , Version = GameVersion . D , Location = 3000 , Gender = 1 , Ability = 1 , CurrentLevel = 48 , } , // Miltank
new EncounterTradePID ( 323975563 ) { Species = 285 , Level = 22 , Moves = new [ ] { 402 , 147 , 206 , 078 } , TID = 1000 , SID = 02788 , OTGender = 1 , Version = GameVersion . D , Location = 3000 , Gender = 0 , Ability = 2 , CurrentLevel = 45 , Ball = 0x05 , } , // Shroomish
new EncounterTradePID ( 323975559 ) { Species = 320 , Level = 30 , Moves = new [ ] { 156 , 323 , 133 , 058 } , TID = 1000 , SID = 27046 , OTGender = 1 , Version = GameVersion . D , Location = 0038 , Gender = 0 , Ability = 2 , CurrentLevel = 45 , } , // Wailmer
new EncounterTradePID ( 323977657 ) { Species = 360 , Level = 01 , Moves = new [ ] { 204 , 150 , 227 , 000 } , TID = 1000 , SID = 01788 , OTGender = 1 , Version = GameVersion . D , Location = 0004 , Gender = 0 , Ability = 2 , EggLocation = 2000 , } , // Wynaut
new EncounterTradePID ( 323975563 ) { Species = 397 , Level = 02 , Moves = new [ ] { 355 , 017 , 283 , 018 } , TID = 1000 , SID = 59298 , OTGender = 1 , Version = GameVersion . D , Location = 0016 , Gender = 0 , Ability = 2 , CurrentLevel = 23 , } , // Staravia
new EncounterTradePID ( 323970584 ) { Species = 415 , Level = 05 , Moves = new [ ] { 230 , 016 , 000 , 000 } , TID = 1000 , SID = 54140 , OTGender = 1 , Version = GameVersion . D , Location = 0020 , Gender = 1 , Ability = 1 , CurrentLevel = 20 , } , // Combee
new EncounterTradePID ( 323977539 ) { Species = 417 , Level = 09 , Moves = new [ ] { 447 , 045 , 351 , 098 } , TID = 1000 , SID = 18830 , OTGender = 1 , Version = GameVersion . D , Location = 0020 , Gender = 1 , Ability = 2 , CurrentLevel = 10 , } , // Pachirisu
new EncounterTradePID ( 323974107 ) { Species = 422 , Level = 20 , Moves = new [ ] { 363 , 352 , 426 , 104 } , TID = 1000 , SID = 39272 , OTGender = 1 , Version = GameVersion . D , Location = 0028 , Gender = 0 , Ability = 2 , CurrentLevel = 25 , Form = 1 } , // Shellos
new EncounterTradePID ( 323977566 ) { Species = 427 , Level = 10 , Moves = new [ ] { 204 , 193 , 409 , 098 } , TID = 1000 , SID = 31045 , OTGender = 1 , Version = GameVersion . D , Location = 3000 , Gender = 1 , Ability = 1 , CurrentLevel = 16 , } , // Buneary
new EncounterTradePID ( 323975579 ) { Species = 453 , Level = 22 , Moves = new [ ] { 310 , 207 , 426 , 389 } , TID = 1000 , SID = 41342 , OTGender = 1 , Version = GameVersion . D , Location = 0052 , Gender = 0 , Ability = 2 , CurrentLevel = 31 , Ball = 0x05 , } , // Croagunk
new EncounterTradePID ( 323977566 ) { Species = 456 , Level = 15 , Moves = new [ ] { 213 , 352 , 219 , 392 } , TID = 1000 , SID = 48348 , OTGender = 1 , Version = GameVersion . D , Location = 0020 , Gender = 1 , Ability = 1 , CurrentLevel = 35 , } , // Finneon
new EncounterTradePID ( 323975582 ) { Species = 459 , Level = 32 , Moves = new [ ] { 452 , 420 , 275 , 059 } , TID = 1000 , SID = 23360 , OTGender = 1 , Version = GameVersion . D , Location = 0031 , Gender = 0 , Ability = 1 , CurrentLevel = 41 , } , // Snover
2018-01-02 20:00:41 +00:00
new EncounterTrade { Species = 489 , Level = 01 , Moves = new [ ] { 447 , 240 , 156 , 057 } , TID = 1000 , SID = 09248 , OTGender = 1 , Version = GameVersion . D , Location = 3000 , Gender = 2 , Fateful = true , CurrentLevel = 50 , Ball = 0x10 , EggLocation = 3000 , } , // Phione
2017-09-21 04:28:29 +00:00
} ;
2018-08-03 03:11:42 +00:00
2017-09-21 04:28:29 +00:00
internal static readonly EncounterTrade [ ] TradeGift_DPPt = new [ ]
2017-07-25 07:28:43 +00:00
{
2020-03-17 01:14:22 +00:00
new EncounterTradePID ( 0x0000008E ) { Species = 063 , Level = 01 , Ability = 1 , TID = 25643 , SID = 00000 , OTGender = 1 , Gender = 0 , IVs = new [ ] { 15 , 15 , 15 , 20 , 25 , 25 } } , // Machop -> Abra
new EncounterTradePID ( 0x00000867 ) { Species = 441 , Level = 01 , Ability = 2 , TID = 44142 , SID = 00000 , OTGender = 0 , Gender = 1 , IVs = new [ ] { 15 , 20 , 15 , 25 , 25 , 15 } , Contest = new [ ] { 20 , 20 , 20 , 20 , 20 , 0 } } , // Buizel -> Chatot
new EncounterTradePID ( 0x00000088 ) { Species = 093 , Level = 35 , Ability = 1 , TID = 19248 , SID = 00000 , OTGender = 1 , Gender = 0 , IVs = new [ ] { 20 , 25 , 15 , 25 , 15 , 15 } } , // Medicham (35 from Route 217) -> Haunter
new EncounterTradePID ( 0x0000045C ) { Species = 129 , Level = 01 , Ability = 1 , TID = 53277 , SID = 00000 , OTGender = 0 , Gender = 1 , IVs = new [ ] { 15 , 25 , 15 , 20 , 25 , 15 } } , // Finneon -> Magikarp
2017-09-21 04:28:29 +00:00
} . Concat ( RanchGifts ) . ToArray ( ) ;
2018-08-03 03:11:42 +00:00
2017-07-25 07:28:43 +00:00
internal static readonly EncounterTrade [ ] TradeGift_HGSS =
{
2020-03-17 01:14:22 +00:00
new EncounterTradePID ( 0x000025EF ) { Species = 095 , Level = 01 , Ability = 2 , TID = 48926 , SID = 00000 , OTGender = 0 , Gender = 0 , IVs = new [ ] { 25 , 20 , 25 , 15 , 15 , 15 } } , // Bellsprout -> Onix
new EncounterTradePID ( 0x00002310 ) { Species = 066 , Level = 01 , Ability = 1 , TID = 37460 , SID = 00000 , OTGender = 0 , Gender = 1 , IVs = new [ ] { 15 , 25 , 20 , 20 , 15 , 15 } } , // Drowzee -> Machop
new EncounterTradePID ( 0x000001DB ) { Species = 100 , Level = 01 , Ability = 2 , TID = 29189 , SID = 00000 , OTGender = 0 , Gender = 2 , IVs = new [ ] { 15 , 20 , 15 , 25 , 25 , 15 } } , // Krabby -> Voltorb
2020-03-18 19:23:09 +00:00
new EncounterTradePID ( 0x0001FC0A ) { Species = 085 , Level = 15 , Ability = 1 , TID = 00283 , SID = 00000 , OTGender = 1 , Gender = 1 , IVs = new [ ] { 20 , 20 , 20 , 15 , 15 , 15 } } , // Dragonair (15 from DPPt) -> Dodrio
2020-03-17 01:14:22 +00:00
new EncounterTradePID ( 0x0000D136 ) { Species = 082 , Level = 19 , Ability = 1 , TID = 50082 , SID = 00000 , OTGender = 0 , Gender = 2 , IVs = new [ ] { 15 , 20 , 15 , 20 , 20 , 20 } } , // Dugtrio (19 from Diglett's Cave) -> Magneton
new EncounterTradePID ( 0x000034E4 ) { Species = 178 , Level = 16 , Ability = 1 , TID = 15616 , SID = 00000 , OTGender = 0 , Gender = 0 , IVs = new [ ] { 15 , 20 , 15 , 20 , 20 , 20 } } , // Haunter (16 from Old Chateau) -> Xatu
new EncounterTradePID ( 0x00485876 ) { Species = 025 , Level = 02 , Ability = 1 , TID = 33038 , SID = 00000 , OTGender = 0 , Gender = 1 , IVs = new [ ] { 20 , 25 , 18 , 31 , 25 , 13 } } , // Pikachu
2020-03-14 04:39:35 +00:00
new EncounterTradePID ( 0x0012B6D4 ) { Species = 374 , Level = 31 , Ability = 1 , TID = 23478 , SID = 00000 , OTGender = 0 , Gender = 2 , IVs = new [ ] { 28 , 29 , 24 , 23 , 24 , 25 } } , // Forretress -> Beldum
2020-03-17 01:14:22 +00:00
new EncounterTradePID ( 0x0012971C ) { Species = 111 , Level = 01 , Ability = 1 , TID = 06845 , SID = 00000 , OTGender = 0 , Gender = 1 , IVs = new [ ] { 22 , 31 , 13 , 00 , 22 , 09 } , Moves = new [ ] { 422 } } , // Bonsly -> Rhyhorn
new EncounterTradePID ( 0x00101596 ) { Species = 208 , Level = 01 , Ability = 1 , TID = 26491 , SID = 00000 , OTGender = 1 , Gender = 0 , IVs = new [ ] { 08 , 30 , 28 , 06 , 18 , 20 } } , // Any -> Steelix
2019-09-12 05:06:24 +00:00
2017-07-25 07:28:43 +00:00
//Gift
2020-03-14 04:39:35 +00:00
new EncounterTradePID ( 0x00006B5E ) { Species = 021 , Ability = 1 , TID = 01001 , SID = 00000 , OTGender = 0 , Gender = 1 , IVs = new [ ] { 15 , 20 , 15 , 20 , 20 , 20 } , Level = 20 , Location = 183 , Moves = new [ ] { 043 , 031 , 228 , 332 } } , // Webster's Spearow
new EncounterTradePID ( 0x000214D7 ) { Species = 213 , Ability = 2 , TID = 04336 , SID = 00001 , OTGender = 0 , Gender = 0 , IVs = new [ ] { 15 , 20 , 15 , 20 , 20 , 20 } , Level = 20 , Location = 130 , Moves = new [ ] { 132 , 117 , 227 , 219 } } , // Kirk's Shuckle
2017-07-25 07:28:43 +00:00
} ;
2018-08-03 03:11:42 +00:00
2019-09-12 05:06:24 +00:00
private const string tradeDPPt = "tradedppt" ;
private const string tradeHGSS = "tradehgss" ;
private static readonly string [ ] [ ] TradeDPPt = Util . GetLanguageStrings8 ( tradeDPPt ) ;
private static readonly string [ ] [ ] TradeHGSS = Util . GetLanguageStrings8 ( tradeHGSS ) ;
2017-07-25 07:28:43 +00:00
#endregion
#region Alt Slots
2019-09-13 06:20:52 +00:00
private static readonly EncounterArea4DPPt [ ] DPPt_Unown =
2017-07-25 07:28:43 +00:00
{
2019-09-13 06:20:52 +00:00
new EncounterArea4DPPt {
2017-07-25 07:28:43 +00:00
Location = 53 , // Solaceon Ruins
2020-07-19 22:48:45 +00:00
Slots = Enumerable . Range ( 1 , 25 ) . Select ( i = > new EncounterSlot { Species = 201 , LevelMin = 14 , LevelMax = 30 , Type = SlotType . Grass , Form = i } ) . ToArray ( ) // B->?, Unown A is loaded from encounters raw file
2017-07-25 07:28:43 +00:00
} ,
} ;
2018-08-03 03:11:42 +00:00
2019-09-13 06:20:52 +00:00
private static readonly EncounterArea4HGSS SlotsHGSS_BCC =
2017-07-25 07:28:43 +00:00
2019-09-13 06:20:52 +00:00
new EncounterArea4HGSS
2017-07-25 07:28:43 +00:00
{
// Source http://bulbapedia.bulbagarden.net/wiki/Bug-Catching_Contest#Generation_IV
Location = 207 , // National Park Catching Contest
Slots = new [ ]
{
// Bug Contest Pre-National Pokédex
2017-11-26 06:28:38 +00:00
new EncounterSlot { Species = 010 , LevelMin = 07 , LevelMax = 18 , Type = SlotType . BugContest , SlotNumber = 0 } , // Caterpie
new EncounterSlot { Species = 013 , LevelMin = 07 , LevelMax = 18 , Type = SlotType . BugContest , SlotNumber = 1 } , // Weedle
new EncounterSlot { Species = 011 , LevelMin = 09 , LevelMax = 18 , Type = SlotType . BugContest , SlotNumber = 2 } , // Metapod
new EncounterSlot { Species = 014 , LevelMin = 09 , LevelMax = 18 , Type = SlotType . BugContest , SlotNumber = 3 } , // Kakuna
new EncounterSlot { Species = 012 , LevelMin = 12 , LevelMax = 15 , Type = SlotType . BugContest , SlotNumber = 4 } , // Butterfree
new EncounterSlot { Species = 015 , LevelMin = 12 , LevelMax = 15 , Type = SlotType . BugContest , SlotNumber = 5 } , // Beedrill
new EncounterSlot { Species = 048 , LevelMin = 10 , LevelMax = 16 , Type = SlotType . BugContest , SlotNumber = 6 } , // Venonat
new EncounterSlot { Species = 046 , LevelMin = 10 , LevelMax = 17 , Type = SlotType . BugContest , SlotNumber = 7 } , // Paras
new EncounterSlot { Species = 123 , LevelMin = 13 , LevelMax = 14 , Type = SlotType . BugContest , SlotNumber = 8 } , // Scyther
new EncounterSlot { Species = 127 , LevelMin = 13 , LevelMax = 14 , Type = SlotType . BugContest , SlotNumber = 9 } , // Pinsir
2017-07-25 07:28:43 +00:00
// Bug Contest Tuesday Post-National Pokédex
2017-11-26 06:28:38 +00:00
new EncounterSlot { Species = 010 , LevelMin = 24 , LevelMax = 36 , Type = SlotType . BugContest , SlotNumber = 0 } , // Caterpie
new EncounterSlot { Species = 013 , LevelMin = 24 , LevelMax = 36 , Type = SlotType . BugContest , SlotNumber = 1 } , // Weedle
new EncounterSlot { Species = 011 , LevelMin = 26 , LevelMax = 36 , Type = SlotType . BugContest , SlotNumber = 2 } , // Metapod
new EncounterSlot { Species = 014 , LevelMin = 26 , LevelMax = 36 , Type = SlotType . BugContest , SlotNumber = 3 } , // Kakuna
new EncounterSlot { Species = 012 , LevelMin = 27 , LevelMax = 30 , Type = SlotType . BugContest , SlotNumber = 4 } , // Butterfree
new EncounterSlot { Species = 015 , LevelMin = 27 , LevelMax = 30 , Type = SlotType . BugContest , SlotNumber = 5 } , // Beedrill
new EncounterSlot { Species = 048 , LevelMin = 25 , LevelMax = 32 , Type = SlotType . BugContest , SlotNumber = 6 } , // Venonat
new EncounterSlot { Species = 046 , LevelMin = 27 , LevelMax = 34 , Type = SlotType . BugContest , SlotNumber = 7 } , // Paras
new EncounterSlot { Species = 123 , LevelMin = 27 , LevelMax = 28 , Type = SlotType . BugContest , SlotNumber = 8 } , // Scyther
new EncounterSlot { Species = 127 , LevelMin = 27 , LevelMax = 28 , Type = SlotType . BugContest , SlotNumber = 9 } , // Pinsir
2017-07-25 07:28:43 +00:00
// Bug Contest Thursday and Saturday Post-National Pokédex
2017-11-26 06:28:38 +00:00
new EncounterSlot { Species = 265 , LevelMin = 24 , LevelMax = 36 , Type = SlotType . BugContest , SlotNumber = 0 } , // Wurmple
new EncounterSlot { Species = 266 , LevelMin = 24 , LevelMax = 36 , Type = SlotType . BugContest , SlotNumber = 1 } , // Silcoon (Thursday)
new EncounterSlot { Species = 268 , LevelMin = 24 , LevelMax = 36 , Type = SlotType . BugContest , SlotNumber = 1 } , // Cascoon (Saturday)
new EncounterSlot { Species = 290 , LevelMin = 26 , LevelMax = 36 , Type = SlotType . BugContest , SlotNumber = 2 } , // Nincada
new EncounterSlot { Species = 313 , LevelMin = 26 , LevelMax = 36 , Type = SlotType . BugContest , SlotNumber = 3 } , // Volbeat (Thursday)
new EncounterSlot { Species = 314 , LevelMin = 26 , LevelMax = 36 , Type = SlotType . BugContest , SlotNumber = 3 } , // Illumise (Saturday)
new EncounterSlot { Species = 401 , LevelMin = 27 , LevelMax = 30 , Type = SlotType . BugContest , SlotNumber = 4 } , // Kricketot
new EncounterSlot { Species = 402 , LevelMin = 27 , LevelMax = 30 , Type = SlotType . BugContest , SlotNumber = 5 } , // Kricketune
new EncounterSlot { Species = 269 , LevelMin = 25 , LevelMax = 32 , Type = SlotType . BugContest , SlotNumber = 6 } , // Dustox (Thursday)
new EncounterSlot { Species = 267 , LevelMin = 25 , LevelMax = 32 , Type = SlotType . BugContest , SlotNumber = 6 } , // Beautifly (Saturday)
new EncounterSlot { Species = 415 , LevelMin = 27 , LevelMax = 34 , Type = SlotType . BugContest , SlotNumber = 7 } , // Combee
new EncounterSlot { Species = 123 , LevelMin = 27 , LevelMax = 28 , Type = SlotType . BugContest , SlotNumber = 8 } , // Scyther
new EncounterSlot { Species = 127 , LevelMin = 27 , LevelMax = 28 , Type = SlotType . BugContest , SlotNumber = 9 } , // Pinsir
2017-07-25 07:28:43 +00:00
}
} ;
private static readonly EncounterSlot [ ] SAFARIZONE_PEAK =
{
new EncounterSlot { Species = 022 , LevelMin = 44 , LevelMax = 44 , Type = SlotType . Grass_Safari } , // Fearow
new EncounterSlot { Species = 046 , LevelMin = 42 , LevelMax = 42 , Type = SlotType . Grass_Safari } , // Paras
new EncounterSlot { Species = 074 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Geodude
new EncounterSlot { Species = 075 , LevelMin = 16 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Graveler
new EncounterSlot { Species = 080 , LevelMin = 45 , LevelMax = 45 , Type = SlotType . Grass_Safari } , // Slowbro
new EncounterSlot { Species = 081 , LevelMin = 15 , LevelMax = 16 , Type = SlotType . Grass_Safari } , // Magnemite
new EncounterSlot { Species = 082 , LevelMin = 17 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Magneton
new EncounterSlot { Species = 126 , LevelMin = 17 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Magmar
new EncounterSlot { Species = 126 , LevelMin = 41 , LevelMax = 41 , Type = SlotType . Grass_Safari } , // Magmar
new EncounterSlot { Species = 202 , LevelMin = 16 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Wobbuffet
new EncounterSlot { Species = 202 , LevelMin = 41 , LevelMax = 41 , Type = SlotType . Grass_Safari } , // Wobbuffet
new EncounterSlot { Species = 264 , LevelMin = 46 , LevelMax = 46 , Type = SlotType . Grass_Safari } , // Linoone
new EncounterSlot { Species = 288 , LevelMin = 47 , LevelMax = 47 , Type = SlotType . Grass_Safari } , // Vigoroth
new EncounterSlot { Species = 305 , LevelMin = 45 , LevelMax = 45 , Type = SlotType . Grass_Safari } , // Lairon
new EncounterSlot { Species = 335 , LevelMin = 43 , LevelMax = 45 , Type = SlotType . Grass_Safari } , // Zangoose
new EncounterSlot { Species = 363 , LevelMin = 44 , LevelMax = 45 , Type = SlotType . Grass_Safari } , // Spheal
new EncounterSlot { Species = 436 , LevelMin = 45 , LevelMax = 46 , Type = SlotType . Grass_Safari } , // Bronzor
} ;
private static readonly EncounterSlot [ ] SAFARIZONE_DESERT =
{
new EncounterSlot { Species = 022 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Fearow
new EncounterSlot { Species = 022 , LevelMin = 38 , LevelMax = 38 , Type = SlotType . Grass_Safari } , // Fearow
new EncounterSlot { Species = 022 , LevelMin = 41 , LevelMax = 41 , Type = SlotType . Grass_Safari } , // Fearow
new EncounterSlot { Species = 027 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Sandshrew
new EncounterSlot { Species = 028 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Sandslash
new EncounterSlot { Species = 104 , LevelMin = 16 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Cubone
new EncounterSlot { Species = 105 , LevelMin = 17 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Marowak
new EncounterSlot { Species = 105 , LevelMin = 41 , LevelMax = 41 , Type = SlotType . Grass_Safari } , // Marowak
new EncounterSlot { Species = 270 , LevelMin = 38 , LevelMax = 38 , Type = SlotType . Grass_Safari } , // Lotad
new EncounterSlot { Species = 327 , LevelMin = 45 , LevelMax = 45 , Type = SlotType . Grass_Safari } , // Spinda
new EncounterSlot { Species = 328 , LevelMin = 46 , LevelMax = 47 , Type = SlotType . Grass_Safari } , // Trapinch
new EncounterSlot { Species = 329 , LevelMin = 44 , LevelMax = 45 , Type = SlotType . Grass_Safari } , // Vibrava
new EncounterSlot { Species = 331 , LevelMin = 35 , LevelMax = 35 , Type = SlotType . Grass_Safari } , // Cacnea
new EncounterSlot { Species = 332 , LevelMin = 48 , LevelMax = 48 , Type = SlotType . Grass_Safari } , // Cacturne
new EncounterSlot { Species = 449 , LevelMin = 43 , LevelMax = 43 , Type = SlotType . Grass_Safari } , // Hippopotas
new EncounterSlot { Species = 455 , LevelMin = 48 , LevelMax = 48 , Type = SlotType . Grass_Safari } , // Carnivine
} ;
2018-08-03 03:11:42 +00:00
2017-07-25 07:28:43 +00:00
private static readonly EncounterSlot [ ] SAFARIZONE_PLAINS =
{
new EncounterSlot { Species = 019 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Rattata
new EncounterSlot { Species = 020 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Raticate
new EncounterSlot { Species = 063 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Abra
new EncounterSlot { Species = 077 , LevelMin = 42 , LevelMax = 42 , Type = SlotType . Grass_Safari } , // Ponyta
new EncounterSlot { Species = 203 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Girafarig
new EncounterSlot { Species = 203 , LevelMin = 40 , LevelMax = 40 , Type = SlotType . Grass_Safari } , // Girafarig
new EncounterSlot { Species = 229 , LevelMin = 43 , LevelMax = 44 , Type = SlotType . Grass_Safari } , // Houndoom
new EncounterSlot { Species = 234 , LevelMin = 17 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Stantler
new EncounterSlot { Species = 234 , LevelMin = 40 , LevelMax = 41 , Type = SlotType . Grass_Safari } , // Stantler
new EncounterSlot { Species = 235 , LevelMin = 17 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Smeargle
new EncounterSlot { Species = 235 , LevelMin = 41 , LevelMax = 41 , Type = SlotType . Grass_Safari } , // Smeargle
new EncounterSlot { Species = 263 , LevelMin = 44 , LevelMax = 44 , Type = SlotType . Grass_Safari } , // Zigzagoon
new EncounterSlot { Species = 270 , LevelMin = 42 , LevelMax = 42 , Type = SlotType . Grass_Safari } , // Lotad
new EncounterSlot { Species = 283 , LevelMin = 46 , LevelMax = 46 , Type = SlotType . Grass_Safari } , // Surskit
new EncounterSlot { Species = 310 , LevelMin = 45 , LevelMax = 45 , Type = SlotType . Grass_Safari } , // Manectric
new EncounterSlot { Species = 335 , LevelMin = 43 , LevelMax = 45 , Type = SlotType . Grass_Safari } , // Zangoose
new EncounterSlot { Species = 403 , LevelMin = 43 , LevelMax = 44 , Type = SlotType . Grass_Safari } , // Shinx
} ;
private static readonly EncounterSlot [ ] SAFARIZONE_MEADOW =
{
new EncounterSlot { Species = 020 , LevelMin = 40 , LevelMax = 40 , Type = SlotType . Grass_Safari } , // Raticate
new EncounterSlot { Species = 035 , LevelMin = 17 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Clefairy
new EncounterSlot { Species = 035 , LevelMin = 42 , LevelMax = 42 , Type = SlotType . Grass_Safari } , // Clefairy
new EncounterSlot { Species = 039 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Jigglypuff
new EncounterSlot { Species = 060 , LevelMin = 12 , LevelMax = 15 , Type = SlotType . Old_Rod_Safari } , // Poliwag
new EncounterSlot { Species = 060 , LevelMin = 22 , LevelMax = 24 , Type = SlotType . Good_Rod_Safari } , // Poliwag
new EncounterSlot { Species = 060 , LevelMin = 35 , LevelMax = 36 , Type = SlotType . Super_Rod_Safari } , // Poliwag
new EncounterSlot { Species = 061 , LevelMin = 15 , LevelMax = 16 , Type = SlotType . Old_Rod_Safari } , // Poliwhirl
new EncounterSlot { Species = 061 , LevelMin = 24 , LevelMax = 25 , Type = SlotType . Good_Rod_Safari } , // Poliwhirl
new EncounterSlot { Species = 061 , LevelMin = 27 , LevelMax = 27 , Type = SlotType . Good_Rod_Safari } , // Poliwhirl
new EncounterSlot { Species = 061 , LevelMin = 35 , LevelMax = 38 , Type = SlotType . Super_Rod_Safari } , // Poliwhirl
new EncounterSlot { Species = 074 , LevelMin = 45 , LevelMax = 45 , Type = SlotType . Grass_Safari } , // Geodude
new EncounterSlot { Species = 113 , LevelMin = 42 , LevelMax = 42 , Type = SlotType . Grass_Safari } , // Chansey
new EncounterSlot { Species = 129 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Surf_Safari } , // Magikarp
new EncounterSlot { Species = 129 , LevelMin = 12 , LevelMax = 15 , Type = SlotType . Old_Rod_Safari } , // Magikarp
new EncounterSlot { Species = 129 , LevelMin = 22 , LevelMax = 24 , Type = SlotType . Good_Rod_Safari } , // Magikarp
new EncounterSlot { Species = 130 , LevelMin = 28 , LevelMax = 28 , Type = SlotType . Good_Rod_Safari } , // Gyarados
new EncounterSlot { Species = 130 , LevelMin = 42 , LevelMax = 42 , Type = SlotType . Super_Rod_Safari } , // Gyarados
new EncounterSlot { Species = 130 , LevelMin = 45 , LevelMax = 45 , Type = SlotType . Super_Rod_Safari } , // Gyarados
new EncounterSlot { Species = 183 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Marill
new EncounterSlot { Species = 183 , LevelMin = 16 , LevelMax = 17 , Type = SlotType . Surf_Safari } , // Marill
new EncounterSlot { Species = 187 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Hoppip
new EncounterSlot { Species = 188 , LevelMin = 17 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Skiploom
new EncounterSlot { Species = 188 , LevelMin = 40 , LevelMax = 40 , Type = SlotType . Grass_Safari } , // Skiploom
new EncounterSlot { Species = 188 , LevelMin = 47 , LevelMax = 47 , Type = SlotType . Surf_Safari } , // Skiploom
new EncounterSlot { Species = 191 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Sunkern
new EncounterSlot { Species = 194 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Wooper
new EncounterSlot { Species = 194 , LevelMin = 40 , LevelMax = 40 , Type = SlotType . Grass_Safari } , // Wooper
new EncounterSlot { Species = 194 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Surf_Safari } , // Wooper
new EncounterSlot { Species = 273 , LevelMin = 45 , LevelMax = 45 , Type = SlotType . Grass_Safari } , // Seedot
new EncounterSlot { Species = 274 , LevelMin = 38 , LevelMax = 38 , Type = SlotType . Grass_Safari } , // Nuzleaf
new EncounterSlot { Species = 274 , LevelMin = 47 , LevelMax = 48 , Type = SlotType . Grass_Safari } , // Nuzleaf
new EncounterSlot { Species = 284 , LevelMin = 42 , LevelMax = 42 , Type = SlotType . Surf_Safari } , // Masquerain
new EncounterSlot { Species = 284 , LevelMin = 46 , LevelMax = 46 , Type = SlotType . Surf_Safari } , // Masquerain
new EncounterSlot { Species = 299 , LevelMin = 45 , LevelMax = 45 , Type = SlotType . Grass_Safari } , // Nosepass
new EncounterSlot { Species = 447 , LevelMin = 45 , LevelMax = 46 , Type = SlotType . Grass_Safari } , // Riolu
} ;
2018-08-03 03:11:42 +00:00
2017-07-25 07:28:43 +00:00
private static readonly EncounterSlot [ ] SAFARIZONE_FOREST =
{
new EncounterSlot { Species = 016 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Pidgey
new EncounterSlot { Species = 069 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Bellsprout
new EncounterSlot { Species = 092 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Gastly
new EncounterSlot { Species = 093 , LevelMin = 16 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Haunter
new EncounterSlot { Species = 108 , LevelMin = 40 , LevelMax = 40 , Type = SlotType . Grass_Safari } , // Lickitung
new EncounterSlot { Species = 122 , LevelMin = 16 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Mr. Mime
new EncounterSlot { Species = 122 , LevelMin = 45 , LevelMax = 45 , Type = SlotType . Grass_Safari } , // Mr. Mime
new EncounterSlot { Species = 125 , LevelMin = 41 , LevelMax = 41 , Type = SlotType . Grass_Safari } , // Electabuzz
new EncounterSlot { Species = 200 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Misdreavus
new EncounterSlot { Species = 200 , LevelMin = 42 , LevelMax = 42 , Type = SlotType . Grass_Safari } , // Misdreavus
new EncounterSlot { Species = 283 , LevelMin = 42 , LevelMax = 42 , Type = SlotType . Grass_Safari } , // Surskit
new EncounterSlot { Species = 353 , LevelMin = 46 , LevelMax = 47 , Type = SlotType . Grass_Safari } , // Shuppet
new EncounterSlot { Species = 374 , LevelMin = 44 , LevelMax = 44 , Type = SlotType . Grass_Safari } , // Beldum
new EncounterSlot { Species = 399 , LevelMin = 40 , LevelMax = 40 , Type = SlotType . Grass_Safari } , // Bidoof
new EncounterSlot { Species = 406 , LevelMin = 47 , LevelMax = 47 , Type = SlotType . Grass_Safari } , // Budew
new EncounterSlot { Species = 437 , LevelMin = 44 , LevelMax = 45 , Type = SlotType . Grass_Safari } , // Bronzong
} ;
2018-08-03 03:11:42 +00:00
2017-07-25 07:28:43 +00:00
private static readonly EncounterSlot [ ] SAFARIZONE_SWAMP =
{
new EncounterSlot { Species = 039 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Jigglypuff
new EncounterSlot { Species = 046 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Paras
new EncounterSlot { Species = 047 , LevelMin = 41 , LevelMax = 41 , Type = SlotType . Grass_Safari } , // Parasect
new EncounterSlot { Species = 070 , LevelMin = 46 , LevelMax = 46 , Type = SlotType . Grass_Safari } , // Weepinbell
new EncounterSlot { Species = 096 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Drowzee
new EncounterSlot { Species = 097 , LevelMin = 16 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Hypno
new EncounterSlot { Species = 097 , LevelMin = 37 , LevelMax = 37 , Type = SlotType . Grass_Safari } , // Hypno
new EncounterSlot { Species = 100 , LevelMin = 42 , LevelMax = 42 , Type = SlotType . Grass_Safari } , // Voltorb
new EncounterSlot { Species = 118 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Surf_Safari } , // Goldeen
new EncounterSlot { Species = 118 , LevelMin = 17 , LevelMax = 17 , Type = SlotType . Old_Rod_Safari } , // Goldeen
new EncounterSlot { Species = 118 , LevelMin = 22 , LevelMax = 24 , Type = SlotType . Good_Rod_Safari } , // Goldeen
new EncounterSlot { Species = 118 , LevelMin = 35 , LevelMax = 37 , Type = SlotType . Super_Rod_Safari } , // Goldeen
new EncounterSlot { Species = 119 , LevelMin = 17 , LevelMax = 17 , Type = SlotType . Old_Rod_Safari } , // Seaking
new EncounterSlot { Species = 119 , LevelMin = 24 , LevelMax = 25 , Type = SlotType . Good_Rod_Safari } , // Seaking
new EncounterSlot { Species = 119 , LevelMin = 27 , LevelMax = 27 , Type = SlotType . Good_Rod_Safari } , // Seaking
new EncounterSlot { Species = 119 , LevelMin = 35 , LevelMax = 37 , Type = SlotType . Super_Rod_Safari } , // Seaking
new EncounterSlot { Species = 119 , LevelMin = 42 , LevelMax = 42 , Type = SlotType . Surf_Safari } , // Seaking
new EncounterSlot { Species = 129 , LevelMin = 12 , LevelMax = 15 , Type = SlotType . Old_Rod_Safari } , // Magikarp
new EncounterSlot { Species = 129 , LevelMin = 22 , LevelMax = 24 , Type = SlotType . Good_Rod_Safari } , // Magikarp
new EncounterSlot { Species = 129 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Surf_Safari } , // Magikarp
new EncounterSlot { Species = 147 , LevelMin = 36 , LevelMax = 37 , Type = SlotType . Super_Rod_Safari } , // Dratini
new EncounterSlot { Species = 147 , LevelMin = 29 , LevelMax = 29 , Type = SlotType . Good_Rod_Safari } , // Dratini
new EncounterSlot { Species = 148 , LevelMin = 42 , LevelMax = 42 , Type = SlotType . Super_Rod_Safari } , // Dragonair
new EncounterSlot { Species = 148 , LevelMin = 45 , LevelMax = 45 , Type = SlotType . Super_Rod_Safari } , // Dragonair
new EncounterSlot { Species = 161 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Sentret
new EncounterSlot { Species = 162 , LevelMin = 42 , LevelMax = 42 , Type = SlotType . Grass_Safari } , // Furret
new EncounterSlot { Species = 198 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Murkrow
new EncounterSlot { Species = 198 , LevelMin = 37 , LevelMax = 37 , Type = SlotType . Grass_Safari } , // Murkrow
new EncounterSlot { Species = 198 , LevelMin = 47 , LevelMax = 47 , Type = SlotType . Surf_Safari } , // Murkrow
new EncounterSlot { Species = 355 , LevelMin = 38 , LevelMax = 38 , Type = SlotType . Grass_Safari } , // Duskull
new EncounterSlot { Species = 355 , LevelMin = 48 , LevelMax = 48 , Type = SlotType . Surf_Safari } , // Duskull
new EncounterSlot { Species = 358 , LevelMin = 46 , LevelMax = 47 , Type = SlotType . Grass_Safari } , // Chimecho
new EncounterSlot { Species = 371 , LevelMin = 44 , LevelMax = 45 , Type = SlotType . Grass_Safari } , // Bagon
new EncounterSlot { Species = 417 , LevelMin = 47 , LevelMax = 47 , Type = SlotType . Grass_Safari } , // Pachirisu
new EncounterSlot { Species = 419 , LevelMin = 44 , LevelMax = 44 , Type = SlotType . Grass_Safari } , // Floatzel
} ;
private static readonly EncounterSlot [ ] SAFARIZONE_MARSHLAND =
{
new EncounterSlot { Species = 023 , LevelMin = 15 , LevelMax = 16 , Type = SlotType . Grass_Safari } , // Ekans
new EncounterSlot { Species = 024 , LevelMin = 17 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Arbok
new EncounterSlot { Species = 043 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Oddish
new EncounterSlot { Species = 044 , LevelMin = 16 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Gloom
new EncounterSlot { Species = 044 , LevelMin = 42 , LevelMax = 42 , Type = SlotType . Grass_Safari } , // Gloom
new EncounterSlot { Species = 050 , LevelMin = 43 , LevelMax = 43 , Type = SlotType . Grass_Safari } , // Diglett
new EncounterSlot { Species = 060 , LevelMin = 12 , LevelMax = 15 , Type = SlotType . Old_Rod_Safari } , // Poliwag
new EncounterSlot { Species = 060 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Surf_Safari } , // Poliwag
new EncounterSlot { Species = 060 , LevelMin = 16 , LevelMax = 16 , Type = SlotType . Old_Rod_Safari } , // Poliwag
new EncounterSlot { Species = 060 , LevelMin = 18 , LevelMax = 18 , Type = SlotType . Old_Rod_Safari } , // Poliwag
new EncounterSlot { Species = 061 , LevelMin = 22 , LevelMax = 25 , Type = SlotType . Good_Rod_Safari } , // Poliwhirl
new EncounterSlot { Species = 061 , LevelMin = 35 , LevelMax = 38 , Type = SlotType . Super_Rod_Safari } , // Poliwhirl
new EncounterSlot { Species = 088 , LevelMin = 17 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Grimer
new EncounterSlot { Species = 088 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Surf_Safari } , // Grimer
new EncounterSlot { Species = 089 , LevelMin = 38 , LevelMax = 38 , Type = SlotType . Grass_Safari } , // Muk
new EncounterSlot { Species = 089 , LevelMin = 48 , LevelMax = 48 , Type = SlotType . Surf_Safari } , // Muk
new EncounterSlot { Species = 109 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Koffing
new EncounterSlot { Species = 110 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Weezing
new EncounterSlot { Species = 129 , LevelMin = 12 , LevelMax = 15 , Type = SlotType . Old_Rod_Safari } , // Magikarp
new EncounterSlot { Species = 129 , LevelMin = 22 , LevelMax = 24 , Type = SlotType . Good_Rod_Safari } , // Magikarp
new EncounterSlot { Species = 130 , LevelMin = 36 , LevelMax = 37 , Type = SlotType . Super_Rod_Safari } , // Gyarados
new EncounterSlot { Species = 130 , LevelMin = 26 , LevelMax = 26 , Type = SlotType . Good_Rod_Safari } , // Gyarados
new EncounterSlot { Species = 130 , LevelMin = 29 , LevelMax = 29 , Type = SlotType . Good_Rod_Safari } , // Gyarados
new EncounterSlot { Species = 189 , LevelMin = 38 , LevelMax = 38 , Type = SlotType . Grass_Safari } , // Jumpluff
new EncounterSlot { Species = 189 , LevelMin = 47 , LevelMax = 47 , Type = SlotType . Surf_Safari } , // Jumpluff
new EncounterSlot { Species = 194 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Wooper
new EncounterSlot { Species = 194 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Surf_Safari } , // Wooper
new EncounterSlot { Species = 195 , LevelMin = 43 , LevelMax = 43 , Type = SlotType . Surf_Safari } , // Quagsire
new EncounterSlot { Species = 213 , LevelMin = 44 , LevelMax = 44 , Type = SlotType . Grass_Safari } , // Shuckle
new EncounterSlot { Species = 315 , LevelMin = 46 , LevelMax = 46 , Type = SlotType . Grass_Safari } , // Roselia
new EncounterSlot { Species = 336 , LevelMin = 47 , LevelMax = 48 , Type = SlotType . Grass_Safari } , // Seviper
new EncounterSlot { Species = 339 , LevelMin = 42 , LevelMax = 42 , Type = SlotType . Super_Rod_Safari } , // Barboach
new EncounterSlot { Species = 339 , LevelMin = 45 , LevelMax = 45 , Type = SlotType . Super_Rod_Safari } , // Barboach
new EncounterSlot { Species = 354 , LevelMin = 44 , LevelMax = 45 , Type = SlotType . Grass_Safari } , // Banette
new EncounterSlot { Species = 453 , LevelMin = 44 , LevelMax = 44 , Type = SlotType . Grass_Safari } , // Croagunk
new EncounterSlot { Species = 455 , LevelMin = 41 , LevelMax = 41 , Type = SlotType . Grass_Safari } , // Carnivine
} ;
2018-08-03 03:11:42 +00:00
2017-07-25 07:28:43 +00:00
private static readonly EncounterSlot [ ] SAFARIZONE_MOUNTAIN =
{
new EncounterSlot { Species = 019 , LevelMin = 15 , LevelMax = 16 , Type = SlotType . Grass_Safari } , // Rattata
new EncounterSlot { Species = 020 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Raticate
new EncounterSlot { Species = 041 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Zubat
new EncounterSlot { Species = 042 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Golbat
new EncounterSlot { Species = 082 , LevelMin = 17 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Magneton
new EncounterSlot { Species = 082 , LevelMin = 42 , LevelMax = 42 , Type = SlotType . Grass_Safari } , // Magneton
new EncounterSlot { Species = 098 , LevelMin = 43 , LevelMax = 43 , Type = SlotType . Grass_Safari } , // Krabby
new EncounterSlot { Species = 108 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Lickitung
new EncounterSlot { Species = 246 , LevelMin = 17 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Larvitar
new EncounterSlot { Species = 246 , LevelMin = 42 , LevelMax = 42 , Type = SlotType . Grass_Safari } , // Larvitar
new EncounterSlot { Species = 307 , LevelMin = 43 , LevelMax = 44 , Type = SlotType . Grass_Safari } , // Meditite
new EncounterSlot { Species = 313 , LevelMin = 46 , LevelMax = 46 , Type = SlotType . Grass_Safari } , // Volbeat
new EncounterSlot { Species = 337 , LevelMin = 46 , LevelMax = 46 , Type = SlotType . Grass_Safari } , // Lunatone
new EncounterSlot { Species = 356 , LevelMin = 45 , LevelMax = 46 , Type = SlotType . Grass_Safari } , // Dusclops
new EncounterSlot { Species = 364 , LevelMin = 45 , LevelMax = 45 , Type = SlotType . Grass_Safari } , // Sealeo
new EncounterSlot { Species = 375 , LevelMin = 44 , LevelMax = 44 , Type = SlotType . Grass_Safari } , // Metang
new EncounterSlot { Species = 433 , LevelMin = 38 , LevelMax = 38 , Type = SlotType . Grass_Safari } , // Chingling
} ;
2018-08-03 03:11:42 +00:00
2017-07-25 07:28:43 +00:00
private static readonly EncounterSlot [ ] SAFARIZONE_ROCKYBEACH =
{
new EncounterSlot { Species = 041 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Zubat
new EncounterSlot { Species = 060 , LevelMin = 15 , LevelMax = 16 , Type = SlotType . Surf_Safari } , // Poliwag
new EncounterSlot { Species = 061 , LevelMin = 16 , LevelMax = 17 , Type = SlotType . Surf_Safari } , // Poliwhirl
new EncounterSlot { Species = 079 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Slowpoke
new EncounterSlot { Species = 080 , LevelMin = 17 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Slowbro
new EncounterSlot { Species = 080 , LevelMin = 37 , LevelMax = 37 , Type = SlotType . Grass_Safari } , // Slowbro
new EncounterSlot { Species = 080 , LevelMin = 42 , LevelMax = 42 , Type = SlotType . Grass_Safari } , // Slowbro
new EncounterSlot { Species = 084 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Doduo
new EncounterSlot { Species = 085 , LevelMin = 42 , LevelMax = 42 , Type = SlotType . Grass_Safari } , // Dodrio
new EncounterSlot { Species = 098 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Krabby
new EncounterSlot { Species = 098 , LevelMin = 13 , LevelMax = 15 , Type = SlotType . Old_Rod_Safari } , // Krabby
new EncounterSlot { Species = 098 , LevelMin = 22 , LevelMax = 25 , Type = SlotType . Good_Rod_Safari } , // Krabby
new EncounterSlot { Species = 098 , LevelMin = 17 , LevelMax = 17 , Type = SlotType . Old_Rod_Safari } , // Krabby
new EncounterSlot { Species = 098 , LevelMin = 18 , LevelMax = 18 , Type = SlotType . Old_Rod_Safari } , // Krabby
new EncounterSlot { Species = 099 , LevelMin = 26 , LevelMax = 27 , Type = SlotType . Good_Rod_Safari } , // Kingler
new EncounterSlot { Species = 099 , LevelMin = 40 , LevelMax = 40 , Type = SlotType . Grass_Safari } , // Kingler
new EncounterSlot { Species = 099 , LevelMin = 38 , LevelMax = 39 , Type = SlotType . Super_Rod_Safari } , // Kingler
new EncounterSlot { Species = 118 , LevelMin = 13 , LevelMax = 15 , Type = SlotType . Old_Rod_Safari } , // Goldeen
new EncounterSlot { Species = 118 , LevelMin = 22 , LevelMax = 23 , Type = SlotType . Good_Rod_Safari } , // Goldeen
new EncounterSlot { Species = 118 , LevelMin = 35 , LevelMax = 38 , Type = SlotType . Super_Rod_Safari } , // Goldeen
new EncounterSlot { Species = 119 , LevelMin = 35 , LevelMax = 38 , Type = SlotType . Super_Rod_Safari } , // Seaking
new EncounterSlot { Species = 129 , LevelMin = 12 , LevelMax = 14 , Type = SlotType . Old_Rod_Safari } , // Magikarp
new EncounterSlot { Species = 129 , LevelMin = 22 , LevelMax = 23 , Type = SlotType . Good_Rod_Safari } , // Magikarp
new EncounterSlot { Species = 129 , LevelMin = 15 , LevelMax = 16 , Type = SlotType . Surf_Safari } , // Magikarp
new EncounterSlot { Species = 131 , LevelMin = 15 , LevelMax = 16 , Type = SlotType . Surf_Safari } , // Lapras
new EncounterSlot { Species = 131 , LevelMin = 36 , LevelMax = 37 , Type = SlotType . Surf_Safari } , // Lapras
new EncounterSlot { Species = 131 , LevelMin = 41 , LevelMax = 42 , Type = SlotType . Surf_Safari } , // Lapras
new EncounterSlot { Species = 131 , LevelMin = 46 , LevelMax = 47 , Type = SlotType . Surf_Safari } , // Lapras
new EncounterSlot { Species = 179 , LevelMin = 43 , LevelMax = 43 , Type = SlotType . Grass_Safari } , // Mareep
new EncounterSlot { Species = 304 , LevelMin = 44 , LevelMax = 45 , Type = SlotType . Grass_Safari } , // Aron
new EncounterSlot { Species = 309 , LevelMin = 42 , LevelMax = 42 , Type = SlotType . Grass_Safari } , // Electrike
new EncounterSlot { Species = 310 , LevelMin = 37 , LevelMax = 37 , Type = SlotType . Grass_Safari } , // Manectric
new EncounterSlot { Species = 341 , LevelMin = 46 , LevelMax = 46 , Type = SlotType . Super_Rod_Safari } , // Corphish
new EncounterSlot { Species = 341 , LevelMin = 48 , LevelMax = 48 , Type = SlotType . Super_Rod_Safari } , // Corphish
new EncounterSlot { Species = 406 , LevelMin = 40 , LevelMax = 40 , Type = SlotType . Grass_Safari } , // Budew
new EncounterSlot { Species = 443 , LevelMin = 44 , LevelMax = 44 , Type = SlotType . Grass_Safari } , // Gible
} ;
2018-08-03 03:11:42 +00:00
2017-08-01 21:55:10 +00:00
private static readonly EncounterSlot [ ] SAFARIZONE_WASTELAND =
2017-07-25 07:28:43 +00:00
{
new EncounterSlot { Species = 022 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Fearow
new EncounterSlot { Species = 055 , LevelMin = 45 , LevelMax = 45 , Type = SlotType . Grass_Safari } , // Golduck
new EncounterSlot { Species = 066 , LevelMin = 16 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Machop
new EncounterSlot { Species = 067 , LevelMin = 17 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Machoke
new EncounterSlot { Species = 067 , LevelMin = 40 , LevelMax = 40 , Type = SlotType . Grass_Safari } , // Machoke
new EncounterSlot { Species = 069 , LevelMin = 41 , LevelMax = 41 , Type = SlotType . Grass_Safari } , // Bellsprout
new EncounterSlot { Species = 081 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Magnemite
new EncounterSlot { Species = 095 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Onix
new EncounterSlot { Species = 099 , LevelMin = 48 , LevelMax = 48 , Type = SlotType . Grass_Safari } , // Kingler
new EncounterSlot { Species = 115 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Kangaskhan
new EncounterSlot { Species = 286 , LevelMin = 46 , LevelMax = 46 , Type = SlotType . Grass_Safari } , // Breloom
new EncounterSlot { Species = 308 , LevelMin = 44 , LevelMax = 44 , Type = SlotType . Grass_Safari } , // Medicham
new EncounterSlot { Species = 310 , LevelMin = 41 , LevelMax = 41 , Type = SlotType . Grass_Safari } , // Manectric
new EncounterSlot { Species = 314 , LevelMin = 46 , LevelMax = 46 , Type = SlotType . Grass_Safari } , // Illumise
new EncounterSlot { Species = 338 , LevelMin = 45 , LevelMax = 46 , Type = SlotType . Grass_Safari } , // Solrock
new EncounterSlot { Species = 451 , LevelMin = 44 , LevelMax = 45 , Type = SlotType . Grass_Safari } , // Skorupi
} ;
2018-08-03 03:11:42 +00:00
2017-07-25 07:28:43 +00:00
private static readonly EncounterSlot [ ] SAFARIZONE_SAVANNAH =
{
new EncounterSlot { Species = 029 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Nidoran♀
new EncounterSlot { Species = 030 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Nidorina
new EncounterSlot { Species = 032 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Nidoran♂
new EncounterSlot { Species = 033 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Nidorino
new EncounterSlot { Species = 041 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Zubat
new EncounterSlot { Species = 042 , LevelMin = 17 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Golbat
new EncounterSlot { Species = 111 , LevelMin = 17 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Rhyhorn
new EncounterSlot { Species = 111 , LevelMin = 41 , LevelMax = 41 , Type = SlotType . Grass_Safari } , // Rhyhorn
new EncounterSlot { Species = 112 , LevelMin = 44 , LevelMax = 44 , Type = SlotType . Grass_Safari } , // Rhydon
new EncounterSlot { Species = 128 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Tauros
new EncounterSlot { Species = 128 , LevelMin = 41 , LevelMax = 41 , Type = SlotType . Grass_Safari } , // Tauros
new EncounterSlot { Species = 228 , LevelMin = 42 , LevelMax = 42 , Type = SlotType . Grass_Safari } , // Houndour
new EncounterSlot { Species = 263 , LevelMin = 38 , LevelMax = 38 , Type = SlotType . Grass_Safari } , // Zigzagoon
new EncounterSlot { Species = 285 , LevelMin = 45 , LevelMax = 45 , Type = SlotType . Grass_Safari } , // Shroomish
new EncounterSlot { Species = 298 , LevelMin = 42 , LevelMax = 42 , Type = SlotType . Grass_Safari } , // Azurill
new EncounterSlot { Species = 324 , LevelMin = 46 , LevelMax = 47 , Type = SlotType . Grass_Safari } , // Torkoal
new EncounterSlot { Species = 332 , LevelMin = 42 , LevelMax = 42 , Type = SlotType . Grass_Safari } , // Cacturne
new EncounterSlot { Species = 404 , LevelMin = 45 , LevelMax = 46 , Type = SlotType . Grass_Safari } , // Luxio
} ;
2018-08-03 03:11:42 +00:00
2017-07-25 07:28:43 +00:00
private static readonly EncounterSlot [ ] SAFARIZONE_WETLAND =
{
new EncounterSlot { Species = 021 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Spearow
new EncounterSlot { Species = 054 , LevelMin = 15 , LevelMax = 16 , Type = SlotType . Grass_Safari } , // Psyduck
new EncounterSlot { Species = 054 , LevelMin = 16 , LevelMax = 17 , Type = SlotType . Surf_Safari } , // Psyduck
new EncounterSlot { Species = 055 , LevelMin = 17 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Golduck
new EncounterSlot { Species = 055 , LevelMin = 40 , LevelMax = 40 , Type = SlotType . Grass_Safari } , // Golduck
new EncounterSlot { Species = 055 , LevelMin = 37 , LevelMax = 37 , Type = SlotType . Surf_Safari } , // Golduck
new EncounterSlot { Species = 055 , LevelMin = 45 , LevelMax = 45 , Type = SlotType . Surf_Safari } , // Golduck
new EncounterSlot { Species = 060 , LevelMin = 12 , LevelMax = 15 , Type = SlotType . Old_Rod_Safari } , // Poliwag
new EncounterSlot { Species = 060 , LevelMin = 22 , LevelMax = 24 , Type = SlotType . Good_Rod_Safari } , // Poliwag
new EncounterSlot { Species = 060 , LevelMin = 35 , LevelMax = 37 , Type = SlotType . Super_Rod_Safari } , // Poliwag
new EncounterSlot { Species = 060 , LevelMin = 15 , LevelMax = 16 , Type = SlotType . Surf_Safari } , // Poliwag
new EncounterSlot { Species = 061 , LevelMin = 17 , LevelMax = 18 , Type = SlotType . Old_Rod_Safari } , // Poliwhirl
new EncounterSlot { Species = 061 , LevelMin = 23 , LevelMax = 25 , Type = SlotType . Good_Rod_Safari } , // Poliwhirl
new EncounterSlot { Species = 061 , LevelMin = 35 , LevelMax = 37 , Type = SlotType . Super_Rod_Safari } , // Poliwhirl
new EncounterSlot { Species = 083 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Farfetch'd
new EncounterSlot { Species = 083 , LevelMin = 41 , LevelMax = 41 , Type = SlotType . Grass_Safari } , // Farfetch'd
new EncounterSlot { Species = 084 , LevelMin = 45 , LevelMax = 45 , Type = SlotType . Grass_Safari } , // Doduo
new EncounterSlot { Species = 129 , LevelMin = 12 , LevelMax = 15 , Type = SlotType . Old_Rod_Safari } , // Magikarp
new EncounterSlot { Species = 130 , LevelMin = 44 , LevelMax = 45 , Type = SlotType . Super_Rod_Safari } , // Gyarados
new EncounterSlot { Species = 130 , LevelMin = 47 , LevelMax = 48 , Type = SlotType . Super_Rod_Safari } , // Gyarados
new EncounterSlot { Species = 132 , LevelMin = 17 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Ditto
new EncounterSlot { Species = 132 , LevelMin = 41 , LevelMax = 41 , Type = SlotType . Grass_Safari } , // Ditto
new EncounterSlot { Species = 161 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Sentret
new EncounterSlot { Species = 162 , LevelMin = 37 , LevelMax = 37 , Type = SlotType . Grass_Safari } , // Furret
new EncounterSlot { Species = 194 , LevelMin = 15 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Wooper
new EncounterSlot { Species = 194 , LevelMin = 15 , LevelMax = 16 , Type = SlotType . Surf_Safari } , // Wooper
new EncounterSlot { Species = 195 , LevelMin = 16 , LevelMax = 17 , Type = SlotType . Grass_Safari } , // Quagsire
new EncounterSlot { Species = 195 , LevelMin = 16 , LevelMax = 17 , Type = SlotType . Surf_Safari } , // Quagsire
new EncounterSlot { Species = 195 , LevelMin = 37 , LevelMax = 37 , Type = SlotType . Surf_Safari } , // Quagsire
new EncounterSlot { Species = 271 , LevelMin = 47 , LevelMax = 47 , Type = SlotType . Grass_Safari } , // Lombre
new EncounterSlot { Species = 283 , LevelMin = 40 , LevelMax = 40 , Type = SlotType . Grass_Safari } , // Surskit
new EncounterSlot { Species = 341 , LevelMin = 26 , LevelMax = 26 , Type = SlotType . Good_Rod_Safari } , // Corphish
new EncounterSlot { Species = 341 , LevelMin = 28 , LevelMax = 28 , Type = SlotType . Good_Rod_Safari } , // Corphish
new EncounterSlot { Species = 372 , LevelMin = 46 , LevelMax = 46 , Type = SlotType . Grass_Safari } , // Shelgon
new EncounterSlot { Species = 417 , LevelMin = 43 , LevelMax = 43 , Type = SlotType . Grass_Safari } , // Pachirisu
new EncounterSlot { Species = 418 , LevelMin = 44 , LevelMax = 45 , Type = SlotType . Grass_Safari } , // Buizel
} ;
2019-09-13 06:20:52 +00:00
private static readonly EncounterArea4HGSS SlotsHGSS_SafariZone = new EncounterArea4HGSS
2017-07-25 07:28:43 +00:00
{
// Source http://bulbapedia.bulbagarden.net/wiki/Johto_Safari_Zone#Pok.C3.A9mon
// Supplement http://www.psypokes.com/hgss/safari_areas.php
Location = 202 , // Johto Safari Zone
2019-11-21 01:01:34 +00:00
Slots = ArrayUtil . ConcatAll (
2018-05-12 15:13:39 +00:00
SAFARIZONE_PEAK ,
SAFARIZONE_DESERT ,
SAFARIZONE_PLAINS ,
SAFARIZONE_MEADOW ,
SAFARIZONE_FOREST ,
SAFARIZONE_SWAMP ,
2017-07-25 07:28:43 +00:00
SAFARIZONE_MARSHLAND ,
2018-05-12 15:13:39 +00:00
SAFARIZONE_MOUNTAIN ,
SAFARIZONE_ROCKYBEACH ,
SAFARIZONE_WASTELAND ,
SAFARIZONE_SAVANNAH ,
2017-07-25 07:28:43 +00:00
SAFARIZONE_WETLAND )
} ;
2018-08-03 03:11:42 +00:00
2019-09-13 06:20:52 +00:00
private static readonly EncounterArea4HGSS [ ] SlotsHGSSAlt =
2017-07-25 07:28:43 +00:00
{
2017-08-01 21:55:10 +00:00
SlotsHGSS_BCC ,
2019-09-13 06:20:52 +00:00
new EncounterArea4HGSS {
2017-07-25 07:28:43 +00:00
Location = 209 , // Ruins of Alph
2020-07-19 22:48:45 +00:00
Slots = Enumerable . Range ( 1 , 25 ) . Select ( ( _ , i ) = > new EncounterSlot { Species = 201 , LevelMin = 5 , LevelMax = 5 , Type = SlotType . Grass , Form = i } ) . ToArray ( ) // B->?, Unown A is loaded from encounters raw file
2017-07-25 07:28:43 +00:00
} ,
SlotsHGSS_SafariZone ,
//Some edge cases
2019-09-13 06:20:52 +00:00
new EncounterArea4HGSS
2017-07-25 07:28:43 +00:00
{
Location = 219 , // Mt. Silver Cave 1F
Slots = new [ ] { new EncounterSlot { Species = 130 , LevelMin = 20 , LevelMax = 20 , Type = SlotType . Good_Rod } , } , // Gyarados at night
} ,
} ;
2019-09-13 06:20:52 +00:00
private static readonly EncounterArea4DPPt SlotsPt_HoneyTree = new EncounterArea4DPPt
2017-07-25 07:28:43 +00:00
{
Slots = new [ ]
{
2018-05-12 15:13:39 +00:00
new EncounterSlot { Species = 190 , LevelMin = 5 , LevelMax = 15 , Type = SlotType . HoneyTree } , // Aipom
2017-07-25 07:28:43 +00:00
new EncounterSlot { Species = 214 , LevelMin = 5 , LevelMax = 15 , Type = SlotType . HoneyTree } , // Heracross
new EncounterSlot { Species = 265 , LevelMin = 5 , LevelMax = 15 , Type = SlotType . HoneyTree } , // Wurmple
new EncounterSlot { Species = 412 , LevelMin = 5 , LevelMax = 15 , Type = SlotType . HoneyTree , Form = 0 } , // Burmy Plant Cloak
2018-05-12 15:13:39 +00:00
new EncounterSlot { Species = 415 , LevelMin = 5 , LevelMax = 15 , Type = SlotType . HoneyTree } , // Combee
2017-07-25 07:28:43 +00:00
new EncounterSlot { Species = 420 , LevelMin = 5 , LevelMax = 15 , Type = SlotType . HoneyTree } , // Cheruby
2018-05-12 15:13:39 +00:00
new EncounterSlot { Species = 446 , LevelMin = 5 , LevelMax = 15 , Type = SlotType . HoneyTree } , // Munchlax
2017-07-25 07:28:43 +00:00
} ,
} ;
2019-09-13 06:20:52 +00:00
private static readonly EncounterArea4DPPt SlotsD_HoneyTree = new EncounterArea4DPPt
2017-07-25 07:28:43 +00:00
{
Slots = SlotsPt_HoneyTree . Slots . Concat ( new [ ]
{
new EncounterSlot { Species = 266 , LevelMin = 5 , LevelMax = 15 , Type = SlotType . HoneyTree } , // Silcoon
} ) . ToArray ( )
} ;
2019-09-13 06:20:52 +00:00
private static readonly EncounterArea4DPPt SlotsP_HoneyTree = new EncounterArea4DPPt
2017-07-25 07:28:43 +00:00
{
Slots = SlotsPt_HoneyTree . Slots . Concat ( new [ ]
{
new EncounterSlot { Species = 268 , LevelMin = 5 , LevelMax = 15 , Type = SlotType . HoneyTree } , // Cascoon
} ) . ToArray ( )
} ;
2017-12-03 20:20:49 +00:00
internal static readonly int [ ] TrophyDP = { 035 , 039 , 052 , 113 , 133 , 137 , 173 , 174 , 183 , 298 , 311 , 312 , 351 , 438 , 439 , 440 } ; // Porygon
internal static readonly int [ ] TrophyPt = { 035 , 039 , 052 , 113 , 133 , 132 , 173 , 174 , 183 , 298 , 311 , 312 , 351 , 438 , 439 , 440 } ; // Ditto
2017-07-25 07:28:43 +00:00
private static readonly int [ ] DP_GreatMarshAlt_Species =
{
// Daily changing Pokemon are not in the raw data http://bulbapedia.bulbagarden.net/wiki/Great_Marsh
2019-06-25 17:55:35 +00:00
055 , 315 , 397 , 451 , 453 , 455 ,
183 , 194 , 195 , 298 , 399 , 400 , // Pre-National Pokédex
046 , 102 , 115 , 193 , 285 , 316 , 452 , 454 // Post-National Pokédex
2017-07-25 07:28:43 +00:00
} ;
2018-08-03 03:11:42 +00:00
2019-09-13 06:20:52 +00:00
private static readonly EncounterArea4DPPt [ ] DP_GreatMarshAlt = EncounterArea . GetSimpleEncounterArea < EncounterArea4DPPt > ( DP_GreatMarshAlt_Species , new [ ] { 22 , 22 , 24 , 24 , 26 , 26 } , 52 , SlotType . Grass_Safari ) ;
2017-07-25 07:28:43 +00:00
private static readonly int [ ] Pt_GreatMarshAlt_Species =
{
114 , 193 , 195 , 357 , 451 , 453 , 455 ,
194 , // Pre-National Pokédex
046 , 102 , 115 , 285 , 316 , 352 , 452 , 454 // Post-National Pokédex
} ;
2018-08-03 03:11:42 +00:00
2019-09-13 06:20:52 +00:00
private static readonly EncounterArea4DPPt [ ] Pt_GreatMarshAlt = EncounterArea . GetSimpleEncounterArea < EncounterArea4DPPt > ( Pt_GreatMarshAlt_Species , new [ ] { 27 , 30 } , 52 , SlotType . Grass_Safari ) ;
2017-07-25 07:28:43 +00:00
private static readonly int [ ] Shellos_EastSeaLocation_DP =
{
28 , // Route 213
39 , // Route 224
} ;
private static readonly int [ ] Shellos_EastSeaLocation_Pt =
{
11 , // Pastoria City
27 , // Route 212
28 , // Route 213
} ;
private static readonly int [ ] Gastrodon_EastSeaLocation_DP =
{
37 , // Route 222
39 , // Route 224
45 , // Route 230
} ;
private static readonly int [ ] Gastrodon_EastSeaLocation_Pt =
{
11 , // Pastoria City
27 , // Route 212
28 , // Route 213
39 , // Route 224
45 , // Route 230
} ;
private static readonly int [ ] HoneyTreesLocation =
{
20 , // Route 205
21 , // Route 206
22 , // Route 207
23 , // Route 208
24 , // Route 209
25 , // Route 210
2018-05-12 15:13:39 +00:00
26 , // Route 211
27 , // Route 212
2017-07-25 07:28:43 +00:00
28 , // Route 213
29 , // Route 214
30 , // Route 215
33 , // Route 218
36 , // Route 221
37 , // Route 222
2018-05-12 15:13:39 +00:00
47 , // Valley Windworks
2018-02-04 22:03:35 +00:00
48 , // Eterna Forest
2017-07-25 07:28:43 +00:00
49 , // Fuego Ironworks
58 , // Floaroma Meadow
} ;
2019-09-13 06:20:52 +00:00
private static readonly EncounterArea4HGSS [ ] SlotsHGSS_Swarm =
{
new EncounterArea4HGSS { Location = 143 , Slots = new [ ] { new EncounterSlot { Species = 278 , Type = SlotType . Surf } , } , } , // Wingull @ Vermillion City
new EncounterArea4HGSS { Location = 149 , Slots = new [ ] { new EncounterSlot { Species = 261 , Type = SlotType . Grass } , } , } , // Poochyena @ Route 1
new EncounterArea4HGSS { Location = 161 , Slots = new [ ] { new EncounterSlot { Species = 113 , Type = SlotType . Grass } , } , } , // Chansey @ Route 13
new EncounterArea4HGSS { Location = 167 , Slots = new [ ] { new EncounterSlot { Species = 366 , Type = SlotType . Surf } , } , } , // Clamperl @ Route 19
new EncounterArea4HGSS { Location = 173 , Slots = new [ ] { new EncounterSlot { Species = 427 , Type = SlotType . Grass } , } , } , // Buneary @ Route 25
new EncounterArea4HGSS { Location = 175 , Slots = new [ ] { new EncounterSlot { Species = 370 , Type = SlotType . Surf } , } , } , // Luvdisc @ Route 27
new EncounterArea4HGSS { Location = 182 , Slots = new [ ] { new EncounterSlot { Species = 280 , Type = SlotType . Grass } , } , } , // Ralts @ Route 34
new EncounterArea4HGSS { Location = 183 , Slots = new [ ] { new EncounterSlot { Species = 193 , Type = SlotType . Grass } , } , } , // Yanma @ Route 35
new EncounterArea4HGSS { Location = 186 , Slots = new [ ] { new EncounterSlot { Species = 209 , Type = SlotType . Grass } , } , } , // Snubbull @ Route 38
new EncounterArea4HGSS { Location = 193 , Slots = new [ ] { new EncounterSlot { Species = 333 , Type = SlotType . Grass } , } , } , // Swablu @ Route 45
new EncounterArea4HGSS { Location = 195 , Slots = new [ ] { new EncounterSlot { Species = 132 , Type = SlotType . Grass } , } , } , // Ditto @ Route 47
new EncounterArea4HGSS { Location = 216 , Slots = new [ ] { new EncounterSlot { Species = 183 , Type = SlotType . Grass } , } , } , // Marill @ Mt. Mortar
new EncounterArea4HGSS { Location = 220 , Slots = new [ ] { new EncounterSlot { Species = 206 , Type = SlotType . Grass } , } , } , // Dunsparce @ Dark Cave
new EncounterArea4HGSS { Location = 224 , Slots = new [ ] { new EncounterSlot { Species = 401 , Type = SlotType . Grass } , } , } , // Kricketot @ Viridian Forest
new EncounterArea4HGSS { Location = 128 , Slots = new [ ] { // Whiscash @ Violet City
2018-12-02 22:46:17 +00:00
new EncounterSlot { Species = 340 , Type = SlotType . Old_Rod } ,
new EncounterSlot { Species = 340 , Type = SlotType . Good_Rod } ,
new EncounterSlot { Species = 340 , Type = SlotType . Super_Rod } ,
} , } ,
2019-09-13 06:20:52 +00:00
new EncounterArea4HGSS { Location = 160 , Slots = new [ ] { // Relicanth @ Route 12
2018-12-02 22:46:17 +00:00
new EncounterSlot { Species = 369 , Type = SlotType . Old_Rod } ,
new EncounterSlot { Species = 369 , Type = SlotType . Good_Rod } ,
new EncounterSlot { Species = 369 , Type = SlotType . Super_Rod } ,
} , } ,
2019-09-13 06:20:52 +00:00
new EncounterArea4HGSS { Location = 180 , Slots = new [ ] { // Qwilfish @ Route 32
2018-12-02 22:46:17 +00:00
new EncounterSlot { Species = 211 , Type = SlotType . Old_Rod } ,
new EncounterSlot { Species = 211 , Type = SlotType . Good_Rod } ,
new EncounterSlot { Species = 211 , Type = SlotType . Super_Rod } ,
} , } ,
2019-09-13 06:20:52 +00:00
new EncounterArea4HGSS { Location = 192 , Slots = new [ ] { // Remoraid @ Route 44
2018-12-02 22:46:17 +00:00
new EncounterSlot { Species = 223 , Type = SlotType . Old_Rod } ,
new EncounterSlot { Species = 223 , Type = SlotType . Good_Rod } ,
new EncounterSlot { Species = 223 , Type = SlotType . Super_Rod } ,
} , } ,
2017-07-25 07:28:43 +00:00
} ;
2018-08-03 03:11:42 +00:00
2019-09-13 06:20:52 +00:00
private static readonly EncounterArea4HGSS [ ] SlotsHG_Swarm = SlotsHGSS_Swarm . Concat ( new [ ] {
new EncounterArea4HGSS { Location = 151 , Slots = new [ ] { new EncounterSlot { Species = 343 , Type = SlotType . Grass } , } , } , // Baltoy @ Route 3
new EncounterArea4HGSS { Location = 157 , Slots = new [ ] { new EncounterSlot { Species = 302 , Type = SlotType . Grass } , } , } , // Sableye @ Route 9
2017-07-25 07:28:43 +00:00
} ) . ToArray ( ) ;
2018-08-03 03:11:42 +00:00
2019-09-13 06:20:52 +00:00
private static readonly EncounterArea4HGSS [ ] SlotsSS_Swarm = SlotsHGSS_Swarm . Concat ( new [ ] {
new EncounterArea4HGSS { Location = 151 , Slots = new [ ] { new EncounterSlot { Species = 316 , Type = SlotType . Grass } , } , } , // Gulpin @ Route 3
new EncounterArea4HGSS { Location = 157 , Slots = new [ ] { new EncounterSlot { Species = 303 , Type = SlotType . Grass } , } , } , // Mawile @ Route 9
2017-07-25 07:28:43 +00:00
} ) . ToArray ( ) ;
#endregion
}
}