public ColosseumDaycare(IPokePC pokePC, byte[] data)
        {
            this.pokePC = pokePC;
            this.raw = data;

            if (DaycareStatus > 0) {
                depositedPokemon = new ColosseumPokemon(ByteHelper.SubByteArray(0x8, data, 312));
                depositedPokemon.PokeContainer = this;
            }
        }
 public ColosseumPokeParty(IPokePC pokePC, byte[] data)
 {
     this.pokePC = pokePC;
     this.raw = data;
     this.party = new List<IPokemon>();
     for (int i = 0; i < 6; i++) {
         ColosseumPokemon colopkm = new ColosseumPokemon(ByteHelper.SubByteArray(312 * i, data, 312));
         if (colopkm.DexID != 0 && colopkm.Experience != 0) {
             if (colopkm.IsValid)
                 party.Add(colopkm);
             else
                 party.Add(ColosseumPokemon.CreateInvalidPokemon(colopkm));
             party[party.Count - 1].PokeContainer = this;
         }
         else {
             break;
         }
     }
 }
 public void Remove(IPokemon pokemon)
 {
     if (pokemon == depositedPokemon) {
         pokePC.GameSave.IsChanged = true;
         depositedPokemon = null;
         DaycareStatus = 0;
         InitialLevel = 0;
         InitialPurification = 0;
     }
 }
 public void AddPokemon(IPokemon pokemon)
 {
     pokePC.GameSave.IsChanged = true;
     IPokemon pkm = (pokemon != null ? (pokemon is ColosseumPokemon ? pokemon : pokemon.CreateColosseumPokemon(((GCGameSave)GameSave).CurrentRegion)): null);
     pkm.GameType = GameType;
     pkm.PokeContainer = this;
     if (pokePC.GameSave != null)
         pokePC.GameSave.OwnPokemon(pkm);
     depositedPokemon = pkm as ColosseumPokemon;
     depositedPokemon = pkm as ColosseumPokemon;
     DaycareStatus = 1;
     InitialLevel = 0;
     InitialPurification = 0;
 }
        public IPokemon this[int index]
        {
            get {
                if (index == 0)
                    return depositedPokemon;
                else
                    throw new ArgumentOutOfRangeException("Index outside of bounds for Daycare", new Exception());
            }
            set {
                if (index == 0) {
                    pokePC.GameSave.IsChanged = true;
                    IPokemon pkm = (value != null ? (value is ColosseumPokemon ? value : value.CreateColosseumPokemon(((GCGameSave)GameSave).CurrentRegion)): null);
                    if (pkm != null) {
                        pkm.PokeContainer = this;
                        if (pokePC.GameSave != null)
                            pokePC.GameSave.OwnPokemon(pkm);
                    }
                    depositedPokemon = pkm as ColosseumPokemon;
                    if (depositedPokemon == null) {
                        DaycareStatus = 0;
                        InitialLevel = 0;
                        InitialPurification = 0;
                    }
                    else {
                        DaycareStatus = 1;
                        InitialLevel = pkm.Level;
                        InitialPurification = pkm.Purification;
                    }

                }
                else
                    throw new ArgumentOutOfRangeException("Index outside of bounds for Daycare", new Exception());
            }
        }
        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;
        }