private Result7 GenerateTrade(Result7 rt) { rt.IVs = (int[])IVs.Clone(); for (int i = 0; i < 6; i++) { if (rt.IVs[i] < 0) { rt.IVs[i] = (int)(getrand & 0x1F); } } // All fixed for now rt.Ability = Ability; rt.Nature = Synchro_Stat; rt.Gender = Gender; rt.EC = (uint)getrand; rt.PID = (uint)getrand; if (rt.PSV == TSV) { rt.PID ^= 0x10000000; } return(rt); }
private RNGSearch.EventRule geteventsetting() { int[] IVs = new int[6] { -1, -1, -1, -1, -1, -1 }; int cnt = 0; for (int i = 0; i < 6; i++) { if (EventIVLocked[i].Checked) { cnt++; IVs[i] = (int)EventIV[i].Value; } } if (IVsCount.Value > 0 && cnt + IVsCount.Value > 5) { Error(SETTINGERROR_STR[lindex] + L_IVsCount.Text); IVs = new int[6] { -1, -1, -1, -1, -1, -1 }; } return(new RNGSearch.EventRule { IVs = (int[])IVs.Clone(), IVsCount = (int)IVsCount.Value, YourID = YourID.Checked, PIDType = Event_PID.SelectedIndex, AbilityLocked = AbilityLocked.Checked, NatureLocked = NatureLocked.Checked, GenderLocked = GenderLocked.Checked, }); }
private string ParseLineMove(string line) { string moveString = line.Substring(line[1] == ' ' ? 2 : 1); if (!moveString.Contains(moves[237])) // Hidden Power { return(moveString); } // Defined Hidden Power if (moveString.Length > 13) { string type = moveString.Remove(0, 13); type = ReplaceAll(type, string.Empty, "[", "]", "(", ")"); // Trim out excess data int hpVal = Array.IndexOf(hptypes, type); // Get HP Type if (IVs.Any(z => z != 31)) { if (!HiddenPower.SetIVsForType(hpVal, IVs)) { InvalidLines.Add($"Invalid IVs for Hidden Power Type: {type}"); } } else if (hpVal >= 0) { IVs = PKX.SetHPIVs(hpVal, IVs); // Get IVs } else { InvalidLines.Add($"Invalid Hidden Power Type: {type}"); } } return(moves[237]); }
public PKM convertPK1toPK7() { if (Format != 1) { return(null); } if (Species > 151) { return(null); } var pk = new PK7(); TransferPropertiesWithReflection(this, pk); pk.EVs = new int[6]; pk.Nature = IVs.Sum() % 25; pk.IVs = new[] { 31, 31, 31, 31, 31, 31 }; pk.RefreshChecksum(); if (!IsNicknamed) { pk.Nickname = Nickname.ToLower(); } pk.Version = -1; pk.Ability = PersonalTable.SM[Species].Abilities[0]; do { PID = PKX.getRandomPID(Species, Gender, Version, Nature, AltForm, PID); } while (!IsShiny); return(pk); }
protected void CloneArrays() { // dereference original arrays with new copies Moves = (int[])Moves?.Clone(); Relearn = (int[])Relearn.Clone(); IVs = (int[])IVs.Clone(); Contest = (int[])Contest.Clone(); }
public BattleSubwayPokemon5 Clone() { uint ivsField = (uint)(IVs.ToInt32() & 0x3fffffffu) | (IvFlags & 0xc0000000u); ushort[] moveset = GetArrayFromMoves(Moves); byte ppUps = GetPpUpsFromMoves(Moves); BattleSubwayPokemon5 result = new BattleSubwayPokemon5(m_pokedex, (ushort)SpeciesID, (ushort)HeldItemID, moveset, TrainerID, Personality, ivsField, EVs.ToArray(), ppUps, Language, (byte)AbilityID, Happiness, NicknameEncoded, Unknown2); return(result); }
private string ParseLineMove(string line) { const int hiddenPower = 237; string moveString = line.Substring(line[1] == ' ' ? 2 : 1).Split('/')[0].Trim(); if (!moveString.StartsWith(Strings.Move[hiddenPower])) // Hidden Power { return(moveString); // regular move } if (moveString.Length <= 13) { return(Strings.Move[hiddenPower]); } // Defined Hidden Power string type = moveString.Substring(13); type = RemoveAll(type, ParenJunk); // Trim out excess data int hpVal = StringUtil.FindIndexIgnoreCase(Strings.types, type) - 1; // Get HP Type HiddenPowerType = hpVal; if (IVs.Any(z => z != 31)) { if (!HiddenPower.SetIVsForType(hpVal, IVs, Format)) { InvalidLines.Add($"Invalid IVs for Hidden Power Type: {type}"); } } else if (hpVal >= 0) { IVs = HiddenPower.SetIVs(hpVal, IVs, Format); // Get IVs } else { InvalidLines.Add($"Invalid Hidden Power Type: {type}"); } return(Strings.Move[hiddenPower]); }
protected override void Save(BinaryWriter writer) { writer.Write((ushort)SpeciesID); writer.Write((ushort)HeldItemID); ushort[] moveset = GetArrayFromMoves(Moves); for (int i = 0; i < 4; i++) { writer.Write(moveset[i]); } writer.Write(TrainerID); writer.Write(Personality); writer.Write(IVs.ToInt32() | (int)IvFlags); writer.Write(EVs.ToArray(), 0, 6); writer.Write(GetPpUpsFromMoves(Moves)); writer.Write((byte)Language); writer.Write((byte)AbilityID); writer.Write(Happiness); writer.Write(NicknameEncoded.RawData, 0, 22); writer.Flush(); }
public override RNGResult Generate() { // Generate Pokemon before target first if (Bank) { for (int i = 0; i < Target - 1; i++) { Generate_Once(GenderList[i]); } } Result6 rt = new Result6(); rt.Level = Level; int StartFrame = RNGPool.index; //Sync rt.Synchronize = getSync; if (!AlwaysSync) { Advance(60); } //Encryption Constant rt.EC = getrand; //PID for (int i = PIDroll_count; i > 0; i--) { rt.PID = getrand; if (rt.PSV == TSV) { if (IsShinyLocked) { rt.PID ^= 0x10000000; } else { rt.Shiny = true; } break; } else if (IsForcedShiny) { rt.Shiny = true; rt.PID = (uint)((((TSV << 4) ^ (rt.PID & 0xFFFF)) << 16) + (rt.PID & 0xFFFF)); // Not accurate } } //IV rt.IVs = (int[])IVs.Clone(); for (int i = PerfectIVCount; i > 0;) { uint tmp = rand(6); if (rt.IVs[tmp] < 0) { i--; rt.IVs[tmp] = 31; } } for (int i = 0; i < 6; i++) { if (rt.IVs[i] < 0) { rt.IVs[i] = (int)(getrand >> 27); } } //Ability rt.Ability = (byte)(Ability == 0 ? (getrand >> 31) + 1 : Ability); //Nature rt.Nature = (byte)(rt.Synchronize && Synchro_Stat < 25 ? Synchro_Stat : rand(25)); //Gender rt.Gender = (byte)(RandomGender ? (rand(252) >= Gender ? 1 : 2) : Gender); //For Pokemon Link rt.FrameUsed = (byte)(RNGPool.index - StartFrame); return(rt); }
private RNGResult Generate_Once() { Result6 rt = new Result6(); rt.Level = Level; //Encryption Constant rt.EC = EC > 0 ? EC : getrand; //PID switch (PIDType) { case 0: //Random PID rt.PID = getrand; if (rt.Shiny = rt.PSV == TSV) { rt.SquareShiny = true; } break; case 1: //Random NonShiny rt.PID = getrand; if (rt.PSV == TSV) { rt.PID ^= 0x10000000; } break; case 2: //Random Shiny rt.PID = getrand; if (OtherInfo) { rt.PID = (uint)(((TID ^ SID ^ (rt.PID & 0xFFFF)) << 16) + (rt.PID & 0xFFFF)); } rt.Shiny = true; rt.SquareShiny = true; break; case 3: //Specified rt.PID = PID; if (rt.Shiny = rt.PSV == TSV) { rt.SquareShiny = true; } break; } //IV rt.IVs = (int[])IVs.Clone(); for (int i = IVsCount; i > 0;) { uint tmp = rand(6); if (rt.IVs[tmp] < 0) { i--; rt.IVs[tmp] = 31; } } for (int i = 0; i < 6; i++) { if (rt.IVs[i] < 0) { rt.IVs[i] = (int)(getrand >> 27); } } //Ability rt.Ability = AbilityLocked ? Ability : (byte)(rand(Ability + 2) + 1); //Nature rt.Nature = NatureLocked ? Nature : (byte)rand(25); //Gender rt.Gender = GenderLocked ? Gender : (byte)(rand(252) >= Gender ? 1 : 2); //Advance rt.FrameUsed = (byte)(RNGPool.index + 1); return(rt); }
public override RNGResult Generate() { Result7 rt = new Result7(); rt.Level = Level; if (Trade) { return(GenerateTrade(rt)); } //Synchronize if (AlwaysSync) { rt.Synchronize = true; } else { rt.Synchronize = blink_process(); Advance(60); } //Encryption Constant if (IsPelago) { Advance(60 + PelagoShift); rt.EC = (uint)getrand; Advance(1); // Random TID } else { rt.EC = (uint)getrand; } //PID for (int i = PIDroll_count; i > 0; i--) { rt.PID = (uint)getrand; if (rt.PSV == TSV) { if (IsShinyLocked) { rt.PID ^= 0x10000000; } else { rt.Shiny = true; } break; } else if (IsForcedShiny) { rt.Shiny = true; rt.PID = (uint)((((TSV << 4) ^ (rt.PID & 0xFFFF)) << 16) + (rt.PID & 0xFFFF)); // Not accurate } } //IV rt.IVs = (int[])IVs.Clone(); for (int i = PerfectIVCount; i > 0;) { int tmp = (int)(getrand % 6); if (rt.IVs[tmp] < 0) { i--; rt.IVs[tmp] = 31; } } for (int i = 0; i < 6; i++) { if (rt.IVs[i] < 0) { rt.IVs[i] = (int)(getrand & 0x1F); } } //Ability rt.Ability = Ability > 0 ? Ability : (byte)((getrand & 1) + 1); //Nature rt.Nature = rt.Synchronize && Synchro_Stat < 25 ? Synchro_Stat : (byte)(getrand % 25); //Gender rt.Gender = RandomGender ? (byte)(getrand % 252 >= Gender ? 1 : 2) : Gender; return(rt); }
public override RNGResult Generate() { Result7 rt = new Result7(); rt.Level = Level; //Synchronize if (AlwaysSync) { rt.Synchronize = true; } else { rt.Synchronize = blink_process(); Advance(60); } //Encryption Constant if (IsPelago) { Advance(60 + PelagoShift); rt.EC = (uint)getrand; Advance(1); } else { rt.EC = (uint)getrand; } //PID for (int i = PIDroll_count; i > 0; i--) { rt.PID = (uint)getrand; if (rt.PSV == TSV) { if (IsShinyLocked) { rt.PID ^= 0x10000000; } else { rt.Shiny = true; } break; } } //IV rt.IVs = (int[])IVs.Clone(); for (int i = PerfectIVCount; i > 0;) { int tmp = (int)(getrand % 6); if (rt.IVs[tmp] < 0) { i--; rt.IVs[tmp] = 31; } } for (int i = 0; i < 6; i++) { if (rt.IVs[i] < 0) { rt.IVs[i] = (int)(getrand & 0x1F); } } //Ability rt.Ability = (byte)(blinkwhensync ? 1 : (getrand & 1) + 1); //Nature rt.Nature = (byte)(rt.Synchronize && Synchro_Stat < 25 ? Synchro_Stat : getrand % 25); //Gender rt.Gender = (byte)(RandomGender ? ((int)(getrand % 252) >= Gender ? 1 : 2) : Gender); return(rt); }
public override RNGResult Generate() { Result7 rt = new Result7(); rt.Level = Level; //Encryption Constant rt.EC = EC > 0 ? EC : (uint)getrand; //PID switch (PIDType) { case 0: //Random PID rt.PID = (uint)getrand; rt.Shiny = rt.PSV == TSV; break; case 1: //Random NonShiny rt.PID = (uint)getrand; if (rt.PSV == TSV) { rt.PID ^= 0x10000000; } break; case 2: //Random Shiny rt.PID = (uint)getrand; rt.Shiny = true; if (OtherInfo) { rt.PID = (uint)(((TID ^ SID ^ (rt.PID & 0xFFFF)) << 16) + (rt.PID & 0xFFFF)); } break; case 3: //Specified rt.PID = PID; rt.Shiny = rt.PSV == TSV; break; } //IV rt.IVs = (int[])IVs.Clone(); for (int i = IVsCount; i > 0;) { int tmp = (int)(getrand % 6); if (rt.IVs[tmp] < 0) { i--; rt.IVs[tmp] = 31; } } for (int i = 0; i < 6; i++) { if (rt.IVs[i] < 0) { rt.IVs[i] = (int)(getrand & 0x1F); } } //Ability rt.Ability = AbilityLocked ? Ability : (byte)(Ability == 0 ? (getrand & 1) + 1 : getrand % 3 + 1); //Nature rt.Nature = NatureLocked ? Nature : (byte)(getrand % 25); //Gender rt.Gender = GenderLocked ? Gender : (byte)(getrand % 252 >= Gender ? 1 : 2); return(rt); }
public Pokemon Clone() { return(new Pokemon(Base, Gender, Nature, Ability, IVs.Clone() as IVSet, EVs.Clone() as EVSet, Moves.Clone(), Level)); }
public PK6 convertToPK6(SAV6 SAV) { if (!IsPokémon) { return(null); } int currentLevel = Level > 0 ? Level : (int)(Util.rnd32() % 100 + 1); PK6 pk = new PK6 { Species = Species, HeldItem = HeldItem, TID = TID, SID = SID, Met_Level = currentLevel, Nature = Nature != 0xFF ? Nature : (int)(Util.rnd32() % 25), Gender = PKX.Personal[Species].Gender == 255 ? 2 : (Gender != 3 ? Gender : PKX.Personal[Species].RandomGender), AltForm = Form, EncryptionConstant = EncryptionConstant == 0 ? Util.rnd32() : EncryptionConstant, Version = OriginGame == 0 ? SAV.Game : OriginGame, Language = Language == 0 ? SAV.Language : Language, Ball = Pokéball, Country = SAV.Country, Region = SAV.SubRegion, ConsoleRegion = SAV.ConsoleRegion, Move1 = Move1, Move2 = Move2, Move3 = Move3, Move4 = Move4, Move1_PP = PKX.getBasePP(Move1), Move2_PP = PKX.getBasePP(Move2), Move3_PP = PKX.getBasePP(Move3), Move4_PP = PKX.getBasePP(Move4), RelearnMove1 = RelearnMove1, RelearnMove2 = RelearnMove2, RelearnMove3 = RelearnMove3, RelearnMove4 = RelearnMove4, Met_Location = MetLocation, Met_Day = (int)Day, Met_Month = (int)Month, Met_Year = (int)Year - 2000, Egg_Location = EggLocation, CNT_Cool = CNT_Cool, CNT_Beauty = CNT_Beauty, CNT_Cute = CNT_Cute, CNT_Smart = CNT_Smart, CNT_Tough = CNT_Tough, CNT_Sheen = CNT_Sheen, OT_Name = OT.Length > 0 ? OT : SAV.OT, OT_Gender = OTGender != 3 ? OTGender % 2 : SAV.Gender, HT_Name = OT.Length > 0 ? SAV.OT : "", HT_Gender = OT.Length > 0 ? SAV.Gender : 0, CurrentHandler = OT.Length > 0 ? 1 : 0, EXP = PKX.getEXP(Level, Species), // Ribbons RIB2_6 = RIB0_3, // Country Ribbon RIB2_7 = RIB0_4, // National Ribbon RIB3_0 = RIB0_5, // Earth Ribbon RIB3_1 = RIB0_6, // World Ribbon RIB3_2 = RIB1_5, // Classic Ribbon RIB3_3 = RIB1_6, // Premier Ribbon RIB3_4 = RIB0_7, // Event Ribbon RIB3_5 = RIB1_1, // Birthday Ribbon RIB3_6 = RIB1_2, // Special Ribbon RIB3_7 = RIB1_3, // Souvenir Ribbon RIB4_0 = RIB1_4, // Wishing Ribbon RIB4_1 = RIB0_0, // Battle Champ Ribbon RIB4_2 = RIB0_1, // Regional Champ Ribbon RIB4_3 = RIB0_2, // National Champ Ribbon RIB4_4 = RIB1_0, // World Champ Ribbon OT_Friendship = PKX.getBaseFriendship(Species), FatefulEncounter = true, }; if (pk.CurrentHandler == 0) // OT { pk.OT_Memory = 3; pk.OT_TextVar = 9; pk.OT_Intensity = 1; pk.OT_Feeling = Util.rand.Next(0, 9); } else { pk.HT_Memory = 3; pk.HT_TextVar = 9; pk.HT_Intensity = 1; pk.HT_Feeling = Util.rand.Next(0, 9); pk.HT_Friendship = pk.OT_Friendship; } pk.IsNicknamed = IsNicknamed; pk.Nickname = IsNicknamed ? Nickname : PKX.getSpeciesName(Species, pk.Language); // More 'complex' logic to determine final values // Dumb way to generate random IVs. int[] finalIVs = new int[6]; do { for (int i = 0; i < 6; i++) { switch (IVs[i]) { case 0xFE: finalIVs[i] = 31; break; case 0xFF: finalIVs[i] = (int)(Util.rnd32() & 0x1F); break; default: finalIVs[i] = IVs[i]; break; } // more than 3 definable IVs and not enough flawless IVs } } while (IVs.Count(r => r > 31) > 3 && finalIVs.Count(r => r == 31) < 3); pk.IVs = finalIVs; int av = 0; switch (AbilityType) { case 00: // 0 - 0 case 01: // 1 - 1 case 02: // 2 - H av = AbilityType; break; case 03: // 0/1 case 04: // 0/1/H av = (int)(Util.rnd32() % (AbilityType - 1)); break; } pk.Ability = PKX.Personal[PKX.Personal[Species].FormeIndex(Species, pk.AltForm)].Abilities[av]; pk.AbilityNumber = 1 << av; switch (PIDType) { case 00: // Specified pk.PID = PID; break; case 01: // Random pk.PID = Util.rnd32(); break; case 02: // Random Shiny pk.PID = Util.rnd32(); pk.PID = (uint)(((TID ^ SID ^ (PID & 0xFFFF)) << 16) + (PID & 0xFFFF)); break; case 03: // Random Nonshiny do { pk.PID = Util.rnd32(); } while ((uint)(((TID ^ SID ^ (PID & 0xFFFF)) << 16) + (PID & 0xFFFF)) < 16); break; } if (IsEgg) { pk.IsEgg = true; pk.Egg_Day = (int)Day; pk.Egg_Month = (int)Month; pk.Egg_Year = (int)Year; } pk.RefreshChecksum(); return(pk); }