public ColosseumPokemon CreateColosseumPokemon(GCRegions currentRegion, bool passFinder = true)
        {
            ColosseumPokemon pkm = new ColosseumPokemon();

            if (passFinder)
                pkm.PokemonFinder = PokemonFinder;
            pkm.GameType = GameTypes.Colosseum;
            pkm.DeoxysForm = DeoxysForm;
            pkm.Language = Language;
            pkm.CurrentRegion = currentRegion;
            pkm.CurrentRegion = currentRegion;
            pkm.OriginalRegion = OriginalRegion;

            // Pokemon Info
            pkm.Personality = Personality;
            pkm.SpeciesID = SpeciesID;
            pkm.IsSecondAbility2 = IsSecondAbility2;
            pkm.IsEgg = IsEgg;

            // Met Info
            pkm.TrainerName = TrainerName;
            pkm.TrainerGender = TrainerGender;
            pkm.TrainerID = TrainerID;
            pkm.SecretID = SecretID;
            pkm.BallCaughtID = BallCaughtID;
            pkm.LevelMet = LevelMet;
            pkm.MetLocationID = MetLocationID;
            pkm.EncounterType = EncounterType;
            pkm.IsObedient = IsObedient;
            pkm.GameOrigin = GameOrigin;

            // Personalization Info
            pkm.Nickname = Nickname;
            pkm.HeldItemID = HeldItemID;
            pkm.Markings = Markings;

            // Stats Info
            pkm.Experience = Experience;
            pkm.Friendship = Friendship;

            pkm.HPEV = HPEV;
            pkm.AttackEV = AttackEV;
            pkm.DefenseEV = DefenseEV;
            pkm.SpeedEV = SpeedEV;
            pkm.SpAttackEV = SpAttackEV;
            pkm.SpDefenseEV = SpDefenseEV;

            pkm.HPIV = HPIV;
            pkm.AttackIV = AttackIV;
            pkm.DefenseIV = DefenseIV;
            pkm.SpeedIV = SpeedIV;
            pkm.SpAttackIV = SpAttackIV;
            pkm.SpDefenseIV = SpDefenseIV;

            // Status Info
            pkm.StatusCondition = StatusConditionFlags.None;
            pkm.TurnsOfSleepRemaining = 0;
            pkm.TurnsOfBadPoison = 0;
            pkm.PokerusStrain = PokerusStrain;
            pkm.PokerusDaysRemaining = PokerusDaysRemaining;
            pkm.PokerusRemaining = PokerusRemaining;

            // Contest Info
            pkm.Coolness = Coolness;
            pkm.Beauty = Beauty;
            pkm.Cuteness = Cuteness;
            pkm.Smartness = Smartness;
            pkm.Toughness = Toughness;
            pkm.Feel = Feel;

            pkm.CoolRibbonCount = CoolRibbonCount;
            pkm.BeautyRibbonCount = BeautyRibbonCount;
            pkm.CuteRibbonCount = CuteRibbonCount;
            pkm.SmartRibbonCount = SmartRibbonCount;
            pkm.ToughRibbonCount = ToughRibbonCount;
            pkm.HasChampionRibbon = HasChampionRibbon;
            pkm.HasWinningRibbon = HasWinningRibbon;
            pkm.HasVictoryRibbon = HasVictoryRibbon;
            pkm.HasArtistRibbon = HasArtistRibbon;
            pkm.HasEffortRibbon = HasEffortRibbon;
            pkm.HasMarineRibbon = HasMarineRibbon;
            pkm.HasLandRibbon = HasLandRibbon;
            pkm.HasSkyRibbon = HasSkyRibbon;
            pkm.HasCountryRibbon = HasCountryRibbon;
            pkm.HasNationalRibbon = HasNationalRibbon;
            pkm.HasEarthRibbon = HasEarthRibbon;
            pkm.HasWorldRibbon = HasWorldRibbon;

            // Move Info
            pkm.SetMoveAt(0, GetMoveAt(0));
            pkm.SetMoveAt(1, GetMoveAt(1));
            pkm.SetMoveAt(2, GetMoveAt(2));
            pkm.SetMoveAt(3, GetMoveAt(3));

            // Recalculate Stats to make sure they're accurate
            pkm.RecalculateStats();

            return pkm;
        }
        public static ColosseumPokemon CreateInvalidPokemon(ColosseumPokemon invalidBackup, GameTypes gameType = GameTypes.Any)
        {
            ColosseumPokemon pkm = new ColosseumPokemon();
            pkm.invalidBackup = invalidBackup;

            pkm.GameType = gameType;
            pkm.IsInvalid = true;

            // Pokemon Info
            pkm.Personality = 0;
            pkm.SpeciesID = 0;
            pkm.IsSecondAbility2 = false;

            // Met Info
            pkm.TrainerName = "INVALID";
            pkm.TrainerGender = Genders.Male;
            pkm.TrainerID = 0;
            pkm.SecretID = 0;
            pkm.BallCaughtID = 1;
            pkm.LevelMet = 0;
            pkm.MetLocationID = 0;
            pkm.EncounterType = GCEncounterTypes.None;
            pkm.IsObedient = false;
            pkm.GameOrigin = GameOrigins.Unknown;
            pkm.Language = Languages.English;

            // Personalization Info
            pkm.Nickname = "INVALID";
            pkm.HeldItemID = 0;

            // Stats Info
            pkm.Experience = 1;
            pkm.Friendship = 0;

            pkm.HPEV = 0;
            pkm.AttackEV = 0;
            pkm.DefenseEV = 0;
            pkm.SpeedEV = 0;
            pkm.SpAttackEV = 0;
            pkm.SpDefenseEV = 0;

            pkm.HPIV = 0;
            pkm.AttackIV = 0;
            pkm.DefenseIV = 0;
            pkm.SpeedIV = 0;
            pkm.SpAttackIV = 0;
            pkm.SpDefenseIV = 0;

            // Status Info
            pkm.StatusCondition = StatusConditionFlags.None;
            pkm.TurnsOfSleepRemaining = 0;
            pkm.TurnsOfBadPoison = 0;
            pkm.PokerusStrain = 0;
            pkm.PokerusDaysRemaining = 0;
            pkm.PokerusRemaining = 0;

            // Contest Info
            pkm.Coolness = 0;
            pkm.Beauty = 0;
            pkm.Cuteness = 0;
            pkm.Smartness = 0;
            pkm.Toughness = 0;
            pkm.Feel = 0;

            pkm.CoolRibbonCount = 0;
            pkm.BeautyRibbonCount = 0;
            pkm.CuteRibbonCount = 0;
            pkm.SmartRibbonCount = 0;
            pkm.ToughRibbonCount = 0;
            pkm.HasChampionRibbon = false;
            pkm.HasWinningRibbon = false;
            pkm.HasVictoryRibbon = false;
            pkm.HasArtistRibbon = false;
            pkm.HasEffortRibbon = false;
            pkm.HasMarineRibbon = false;
            pkm.HasLandRibbon = false;
            pkm.HasSkyRibbon = false;
            pkm.HasCountryRibbon = false;
            pkm.HasNationalRibbon = false;
            pkm.HasEarthRibbon = false;
            pkm.HasWorldRibbon = false;

            // Move Info
            pkm.SetMoveAt(0, new Move(165, 0, 0)); // Struggle
            pkm.SetMoveAt(1, new Move());
            pkm.SetMoveAt(2, new Move());
            pkm.SetMoveAt(3, new Move());

            // Recalculate Stats to make sure they're accurate
            pkm.RecalculateStats();

            return pkm;
        }