private void B_RandAll_Click(object sender, EventArgs e) { if (WinFormsUtil.Prompt(MessageBoxButtons.YesNo, "Randomize all? Cannot undo.", "Double check Randomization settings in the Randomizer Options tab.") != DialogResult.Yes) { return; } var formrand = new FormRandomizer(Main.Config) { AllowMega = false, AllowAlolanForm = false }; var specrand = new SpeciesRandomizer(Main.Config) { G1 = CHK_G1.Checked, G2 = CHK_G2.Checked, G3 = CHK_G3.Checked, G4 = CHK_G4.Checked, G5 = CHK_G5.Checked, G6 = CHK_G6.Checked, G7 = false, E = CHK_E.Checked, L = CHK_L.Checked, rBST = CHK_BST.Checked, }; specrand.Initialize(); var items = Randomizer.getRandomItemList(); for (int i = 0; i < LB_Encounters.Items.Count; i++) { LB_Encounters.SelectedIndex = i; int species = CB_Species.SelectedIndex; // replace Legendaries with another Legendary if (CHK_ReplaceLegend.Checked && ReplaceLegend.Contains(species)) { int randLegend() => (int)(Util.rnd32() % ReplaceLegend.Length); species = ReplaceLegend[randLegend()]; } // every other entry else { species = specrand.GetRandomSpecies(species); } if (CHK_AllowMega.Checked) { formrand.AllowMega = true; } if (CHK_Item.Checked) { CB_HeldItem.SelectedIndex = items[Util.rnd32() % items.Length]; } if (CHK_Level.Checked) { NUD_Level.Value = Randomizer.getModifiedLevel((int)NUD_Level.Value, NUD_LevelBoost.Value); } if (CHK_RemoveShinyLock.Checked) { CHK_ShinyLock.Checked = false; } if (CHK_RandomAbility.Checked) { CB_Ability.SelectedIndex = (Util.rand.Next(1, 4)); // 1, 2 , or H } if (CHK_ForceFullyEvolved.Checked && NUD_Level.Value >= NUD_ForceFullyEvolved.Value && !FinalEvo.Contains(species)) { int randFinalEvo() => (int)(Util.rnd32() % FinalEvo.Length); species = FinalEvo[randFinalEvo()]; } CB_Species.SelectedIndex = species; NUD_Form.Value = formrand.GetRandomForme(species); CB_Gender.SelectedIndex = 0; // random } WinFormsUtil.Alert("Randomized all Static Encounters according to specification!"); }
private void Update_PBs(int i) { if (!loaded) { return; } CheckBox CB = checkbox_spec[i]; if (CB.Checked) { UpdateImage(picturebox_spec[0][i], entry, 0, WinFormsUtil.GetIndex(item_spec[i]), 0); UpdateImage(picturebox_spec[1][i], entry, forme_spec[i].SelectedIndex, WinFormsUtil.GetIndex(item_spec[i]), 0); } else { UpdateImage(picturebox_spec[0][i], 0, 0, WinFormsUtil.GetIndex(item_spec[i]), 0); UpdateImage(picturebox_spec[1][i], 0, 0, WinFormsUtil.GetIndex(item_spec[i]), 0); } }
private void Randomize() { List <int> banned = new List <int> { 165, 621 }; // Struggle, Hyperspace Fury if (rNoFixedDamage) { banned.AddRange(MoveRandomizer.FixedDamageMoves); } var move = new MoveRandomizer(Main.Config) { rDMG = rDMG, rSTAB = rSTAB, rSTABCount = rSTABCount, rDMGCount = rDMGCount, BannedMoves = banned, }; rImportant = new string[CB_TrainerID.Items.Count]; rTags = Main.Config.ORAS ? GetTagsORAS() : GetTagsXY(); mEvoTypes = GetMegaEvolvableTypes(); List <int> GymE4Types = new List <int>(); // Fetch Move Stats for more difficult randomization if (rEnsureMEvo.Length > 0) { if (mEvoTypes.Length < 13 && rTypeTheme) { WinFormsUtil.Alert("There are insufficient Types with at least one mega evolution to Guarantee story Mega Evos while keeping Type theming.", "Re-Randomize Personal or don't choose both options."); return; } GymE4Types.AddRange(mEvoTypes); } else { GymE4Types.AddRange(Enumerable.Range(0, types.Length).ToArray()); } foreach (int t1 in rEnsureMEvo.Where(t1 => rTags[t1] != "" && !TagTypes.Keys.Contains(rTags[t1]))) { int t; if (rTags[t1].Contains("GYM") || rTags[t1].Contains("ELITE") || rTags[t1].Contains("CHAMPION")) { t = GymE4Types[(int)(rnd32() % GymE4Types.Count)]; GymE4Types.Remove(t); } else { t = mEvoTypes[rnd32() % mEvoTypes.Length]; } TagTypes[rTags[t1]] = t; } foreach (string t1 in Tags) { if (!TagTypes.Keys.Contains(t1) && t1 != "") { int t; if (t1.Contains("GYM") || t1.Contains("ELITE") || t1.Contains("CHAMPION")) { t = GymE4Types[(int)(rnd32() % GymE4Types.Count)]; GymE4Types.Remove(t); } else { t = (int)(rnd32() % types.Length); } TagTypes[t1] = t; } Console.WriteLine(t1 + ": " + types[TagTypes[t1]]); } CB_TrainerID.SelectedIndex = 0; // fake a writeback ushort[] itemvals = Main.Config.ORAS ? Legal.Pouch_Items_AO : Legal.Pouch_Items_XY; itemvals = itemvals.Concat(Legal.Pouch_Berry_XY).ToArray(); string[] ImportantClasses = { "GYM", "ELITE", "CHAMPION" }; for (int i = 1; i < CB_TrainerID.Items.Count; i++) { // Trainer Type/Mega Evo int type = GetRandomType(i); bool mevo = rEnsureMEvo.Contains(i); bool typerand = rTypeTheme && !rGymE4Only || rTypeTheme && rImportant[i] != null && ImportantClasses.Contains(rImportant[i]); rSpeciesRand.rType = typerand; byte[] trd = trdata[i]; byte[] trp = trpoke[i]; var t = new trdata6(trd, trp, Main.Config.ORAS) { Moves = rMove || !rNoMove && checkBox_Moves.Checked, Item = rItem || checkBox_Item.Checked }; InitializeTrainerTeamInfo(t, rImportant[i] == null); RandomizeTrainerAIClass(t, trClass); RandomizeTrainerPrizeItem(t); RandomizeTeam(t, move, learn, itemvals, type, mevo, typerand); trdata[i] = t.Write(); trpoke[i] = t.WriteTeam(); } CB_TrainerID.SelectedIndex = 1; WinFormsUtil.Alert("Randomized all Trainers according to specification!", "Press the Dump to .TXT button to view the new Trainer information!"); }
private void B_Randomize_Click(object sender, EventArgs e) { Random rnd = new Random(); const int TMPercent = 35; // Average Learnable TMs is 35.260. const int TutorPercent = 2; //136 special tutor moves learnable by species in Untouched ORAS. const int OrasTutorPercent = 30; //10001 tutor moves learnable by 826 species in Untouched ORAS. ushort[] itemlist = Main.Config.ORAS ? Legal.Pouch_Items_ORAS : Legal.Pouch_Items_XY; ushort[] berrylist = Legal.Pouch_Berry_XY; Array.Resize(ref itemlist, itemlist.Length + berrylist.Length); Array.Copy(berrylist, 0, itemlist, itemlist.Length - berrylist.Length, berrylist.Length); int itemlen = itemlist.Length; int abillen = CB_Ability1.Items.Count; int typelen = CB_Type1.Items.Count; for (int i = 1; i < CB_Species.Items.Count; i++) { CB_Species.SelectedIndex = i; // Get new Species // Fiddle with TM Learnsets if (CHK_TM.Checked) { for (int t = 0; t < 100; t++) { CLB_TMHM.SetItemCheckState(t, rnd.Next(0, 100) < TMPercent ? CheckState.Checked : CheckState.Unchecked); } } if (CHK_HM.Checked) { for (int t = 100; t < CLB_TMHM.Items.Count; t++) { CLB_TMHM.SetItemCheckState(t, rnd.Next(0, 100) < TMPercent ? CheckState.Checked : CheckState.Unchecked); } } if (CHK_Tutors.Checked) { for (int t = 0; t < CLB_MoveTutors.Items.Count; t++) { CLB_MoveTutors.SetItemCheckState(t, rnd.Next(0, 100) < TutorPercent ? CheckState.Checked : CheckState.Unchecked); } if (Main.Config.ORAS && (CB_Species.SelectedIndex == 384 || CB_Species.SelectedIndex == 814)) //Make sure Rayquaza can learn Dragon Ascent. { CLB_MoveTutors.SetItemCheckState(CLB_MoveTutors.Items.Count - 1, CheckState.Checked); } } if (Main.Config.ORAS && CHK_ORASTutors.Checked) { for (int t = 0; t < CLB_OrasTutors.Items.Count; t++) { CLB_OrasTutors.SetItemCheckState(t, rnd.Next(0, 100) < OrasTutorPercent ? CheckState.Checked : CheckState.Unchecked); } } // Abilities: if (CHK_Ability.Checked) { ComboBox[] abils = { CB_Ability1, CB_Ability2, CB_Ability3 }; for (int a = 0; a < 3; a++) // Set 3 New Abilities, none being Wonder Guard (25) unless CHK_WGuard is checked. { int newabil = rnd.Next(1, abillen); while (newabil == 25 && !CHK_WGuard.Checked) { newabil = rnd.Next(1, abillen); } if (abils[a].SelectedIndex != 25 || CHK_WGuard.Checked) { abils[a].SelectedIndex = newabil; } } } // Fiddle with Base Stats, don't muck with Shedinja. if (CHK_Stats.Checked) { if (Convert.ToByte(byte_boxes[0].Text) != 1) { for (int z = 0; z < 6; z++) { if (rstat_boxes[z].Checked) { byte_boxes[z].Text = Math.Max(5, rnd.Next( Math.Min(255, (int)(Convert.ToByte(byte_boxes[z].Text) * (1 - NUD_StatDev.Value / 100))), Math.Min(255, (int)(Convert.ToByte(byte_boxes[z].Text) * (1 + NUD_StatDev.Value / 100))) )).ToString("000"); } } } } // EV yield stays the same... if (CHK_CatchRate.Checked) { TB_CatchRate.Text = rnd.Next(3, 251).ToString("000"); //Random Catch Rate between 3 and 250. Should I make this normally distributed? } if (CHK_EggGroup.Checked) { if (rnd.Next(0, 100) < NUD_Egg.Value) // 50% chance to have either One or Two Egg Groups { CB_EggGroup1.SelectedIndex = CB_EggGroup2.SelectedIndex = rnd.Next(1, CB_EggGroup1.Items.Count); } else { CB_EggGroup1.SelectedIndex = rnd.Next(1, CB_EggGroup1.Items.Count); CB_EggGroup2.SelectedIndex = rnd.Next(1, CB_EggGroup2.Items.Count); } } // Items if (CHK_Item.Checked) { CB_HeldItem1.SelectedIndex = itemlist[rnd.Next(1, itemlen)]; CB_HeldItem2.SelectedIndex = itemlist[rnd.Next(1, itemlen)]; CB_HeldItem3.SelectedIndex = itemlist[rnd.Next(1, itemlen)]; } // Type if (CHK_Type.Checked) { if (rnd.Next(0, 100) < NUD_TypePercent.Value) // 50% chance to have either Single or Dual Typing { CB_Type1.SelectedIndex = CB_Type2.SelectedIndex = rnd.Next(0, typelen); } else { CB_Type1.SelectedIndex = rnd.Next(0, typelen); CB_Type2.SelectedIndex = rnd.Next(0, typelen); } } } saveEntry(); WinFormsUtil.Alert("All relevant Pokemon Personal Entries have been randomized!"); }
private void B_ModifyAll(object sender, EventArgs e) { if (WinFormsUtil.Prompt(MessageBoxButtons.YesNo, "Modify all? Cannot undo.", "Double check Modification settings in the Enhancements tab.") != DialogResult.Yes) { return; } for (int i = 1; i < CB_Species.Items.Count; i++) { CB_Species.SelectedIndex = i; // Get new Species if (CHK_NoEV.Checked) { for (int z = 0; z < 6; z++) { ev_boxes[z].Text = 0.ToString(); } } if (CHK_Growth.Checked) { CB_EXPGroup.SelectedIndex = 5; } if (CHK_EXP.Checked) { TB_BaseExp.Text = ((float)NUD_EXP.Value * (Convert.ToUInt16(TB_BaseExp.Text) / 100f)).ToString("000"); } if (CHK_NoTutor.Checked) { // preserve HM compatiblity to ensure story progression for (int tm = 0; tm <= 100; tm++) { CLB_TMHM.SetItemCheckState(tm, CheckState.Unchecked); } foreach (int mt in CLB_MoveTutors.CheckedIndices) { CLB_MoveTutors.SetItemCheckState(mt, CheckState.Unchecked); } foreach (int ao in CLB_ORASTutors.CheckedIndices) { CLB_ORASTutors.SetItemCheckState(ao, CheckState.Unchecked); } } if (CHK_FullTMCompatibility.Checked) { for (int t = 0; t < 100; t++) { CLB_TMHM.SetItemCheckState(t, CheckState.Checked); } } if (CHK_FullHMCompatibility.Checked) { for (int h = 100; h < CLB_TMHM.Items.Count; h++) { CLB_TMHM.SetItemCheckState(h, CheckState.Checked); } } if (CHK_FullMoveTutorCompatibility.Checked) { for (int m = 0; m < CLB_MoveTutors.Items.Count; m++) { CLB_MoveTutors.SetItemCheckState(m, CheckState.Checked); } } if (CHK_QuickHatch.Checked) { TB_HatchCycles.Text = 1.ToString(); } if (CHK_CatchRateMod.Checked) { TB_CatchRate.Text = ((int)NUD_CatchRateMod.Value).ToString(); } } CB_Species.SelectedIndex = 1; WinFormsUtil.Alert("Modified all Pokémon Personal data entries according to specification!", "Press the Dump All button to view the new Personal data!"); }
private void saveARC(string path) { if (!Directory.Exists(path)) { WinFormsUtil.Error("Input path is not a Folder", path); return; } string folderName = Path.GetFileName(path); string parentName = Directory.GetParent(path).FullName; int type = CB_Repack.SelectedIndex; switch (type) { case 0: // AutoDetect { if (!folderName.Contains("_")) { WinFormsUtil.Alert("Unable to autodetect pack type."); return; } if (folderName.Contains("_g")) { goto case 1; } if (folderName.Contains("_d")) { goto case 2; } // else goto case 3; } case 1: // GARC Pack { if (threads > 0) { WinFormsUtil.Alert("Please wait for all operations to finish first."); return; } DialogResult dr = WinFormsUtil.Prompt(MessageBoxButtons.YesNoCancel, "Format Selection:", "Yes: Sun/Moon (Version 6)\nNo: XY/ORAS (Version 4)"); if (dr == DialogResult.Cancel) { return; } var version = dr == DialogResult.Yes ? GARC.VER_6 : GARC.VER_4; int padding = (int)NUD_Padding.Value; if (version == Core.CTR.GARC.VER_4) { padding = 4; } string outfolder = Directory.GetParent(path).FullName; new Thread(() => { bool r = GarcUtil.garcPackMS(path, Path.Combine(outfolder, folderName + ".garc"), version, padding, pBar1); if (!r) { WinFormsUtil.Alert("Packing failed."); return; } // Delete path after repacking if (CHK_Delete.Checked && Directory.Exists(path)) { Directory.Delete(path, true); } System.Media.SystemSounds.Asterisk.Play(); }).Start(); return; } case 2: // DARC Pack (from existing if exists) { string oldFile = path.Replace("_d", ""); if (File.Exists(Path.Combine(parentName, oldFile))) { oldFile = Path.Combine(parentName, oldFile); } else if (File.Exists(Path.Combine(parentName, oldFile + ".bin"))) { oldFile = Path.Combine(parentName, oldFile + ".bin"); } else if (File.Exists(Path.Combine(parentName, oldFile + ".darc"))) { oldFile = Path.Combine(parentName, oldFile + ".darc"); } else { oldFile = null; } bool r = Core.CTR.DARC.files2darc(path, false, oldFile); if (!r) { WinFormsUtil.Alert("Packing failed."); } break; } case 3: // Mini Pack { // Get Folder Name string fileName = Path.GetFileName(path); if (fileName.Length < 3) { WinFormsUtil.Error("Mini Folder name not valid:", path); return; } int index = fileName.LastIndexOf('_'); string fileNum = fileName.Substring(0, index); string fileExt = fileName.Substring(index + 1); // Find old file for reference... string file; if (File.Exists(Path.Combine(parentName, fileNum + ".bin"))) { file = Path.Combine(parentName, fileNum + ".bin"); } else if (File.Exists(Path.Combine(parentName, fileNum + "." + fileExt))) { file = Path.Combine(parentName, fileNum + "." + fileExt); } else { file = null; } byte[] oldData = file != null?File.ReadAllBytes(file) : null; bool r = mini.packMini2(path, fileExt, Path.Combine(parentName, fileNum + "." + fileExt)); if (!r) { WinFormsUtil.Alert("Packing failed."); break; } // Check to see if the header size is different... if (oldData == null) // No data to compare to. { break; } byte[] newData = File.ReadAllBytes(Path.Combine(parentName, fileNum + "." + fileExt)); if (newData[2] == oldData[2]) { int newPtr = BitConverter.ToInt32(newData, 4); int oldPtr = BitConverter.ToInt32(oldData, 4); if (newPtr != oldPtr) // Header size is different. Prompt repointing. { if (DialogResult.Yes != WinFormsUtil.Prompt(MessageBoxButtons.YesNo, "Header size of existing file is nonstandard.", "Adjust newly packed file to have the same header size as old file? Data pointers will be updated accordingly.")) { break; } // Fix pointers byte[] update = mini.adjustMiniHeader(newData, oldPtr); File.WriteAllBytes(Path.Combine(parentName, fileNum + "." + fileExt), update); } } break; } default: WinFormsUtil.Alert("Repacking not implemented." + Environment.NewLine + path); return; } // Delete path after repacking if (CHK_Delete.Checked && Directory.Exists(path)) { Directory.Delete(path, true); } System.Media.SystemSounds.Asterisk.Play(); }
private void B_Save_Click(object sender, EventArgs e) { if (WinFormsUtil.Prompt(MessageBoxButtons.YesNo, "Randomize all? Cannot undo.", "Double check Randomization settings before continuing.") != DialogResult.Yes) { return; } RSTE.rPKM = CHK_RandomPKM.Checked; RSTE.rSmart = CHK_BST.Checked; RSTE.rLevel = CHK_Level.Checked; RSTE.rLevelMultiplier = NUD_Level.Value; RSTE.rNoFixedDamage = CHK_NoFixedDamage.Checked; RSTE.rMove = CB_Moves.SelectedIndex == 1; RSTE.rNoMove = CB_Moves.SelectedIndex == 2; if (RSTE.rMove) { RSTE.rDMG = CHK_Damage.Checked; if (RSTE.rDMG) { RSTE.rDMGCount = (int)NUD_Damage.Value; } RSTE.rSTAB = CHK_STAB.Checked; if (RSTE.rSTAB) { RSTE.rSTABCount = (int)NUD_STAB.Value; } } RSTE.rItem = CHK_RandomItems.Checked; RSTE.rAbility = CHK_RandomAbilities.Checked; RSTE.rDiffIV = CHK_MaxDiffPKM.Checked; RSTE.rClass = CHK_RandomClass.Checked; if (RSTE.rClass) { RSTE.rIgnoreClass = CHK_IgnoreSpecialClass.Checked ? Main.Config.ORAS ? Legal.SpecialClasses_ORAS : Legal.SpecialClasses_XY : new int[] {}; RSTE.rOnlySingles = CHK_OnlySingles.Checked; } RSTE.rGift = CHK_RandomGift.Checked; RSTE.rGiftPercent = NUD_GiftPercent.Value; RSTE.rDiffAI = CHK_MaxDiffAI.Checked; RSTE.rTypeTheme = CHK_TypeTheme.Checked; RSTE.rTypeGymTrainers = CHK_GymTrainers.Checked; RSTE.rGymE4Only = CHK_GymE4Only.Checked; RSTE.r6PKM = CHK_6PKM.Checked; RSTE.rRandomMegas = CHK_RandomMegaForm.Checked; RSTE.rForceFullyEvolved = CHK_ForceFullyEvolved.Checked; RSTE.rForceFullyEvolvedLevel = NUD_ForceFullyEvolved.Value; RSTE.rForceHighPower = CHK_ForceHighPower.Checked; RSTE.rForceHighPowerLevel = NUD_ForceHighPower.Value; if (CHK_StoryMEvos.Checked) { RSTE.rEnsureMEvo = Main.Config.ORAS ? new [] { 178, 235, 557, 583, 687, 698, 699, 700, 701, 713, 906, 907, 908, 909, 910, 911, 912, 913, 942, 944, 946 } : new [] { 188, 263, 276, 277, 519, 520, 521, 526, 599, 600, 601 }; } else { RSTE.rEnsureMEvo = new int[] { }; } RSTE.rThemedClasses = new bool[trClass.Length]; RSTE.rSpeciesRand = new SpeciesRandomizer(Main.Config) { G1 = CHK_G1.Checked, G2 = CHK_G2.Checked, G3 = CHK_G3.Checked, G4 = CHK_G4.Checked, G5 = CHK_G5.Checked, G6 = CHK_G6.Checked, L = CHK_L.Checked, E = CHK_E.Checked, Shedinja = true, rBST = CHK_BST.Checked, rEXP = false, }; RSTE.rSpeciesRand.Initialize(); RSTE.rDoRand = true; RandSettings.SetFormSettings(this, Controls); Close(); }
private void B_RandAll_Click(object sender, EventArgs e) { if (WinFormsUtil.Prompt(MessageBoxButtons.YesNo, "Randomize Static Encounters? Cannot undo.", "Double check Randomization Settings before continuing.") != DialogResult.Yes) { return; } SetGift(); SetEncounter(); SetTrade(); var specrand = GetRandomizer(); var formrand = new FormRandomizer(Main.Config) { AllowMega = false, AllowAlolanForm = true }; var move = new LearnsetRandomizer(Main.Config, Main.Config.Learnsets); var items = Randomizer.getRandomItemList(); int[] banned = Legal.Z_Moves.Concat(new int[] { 165, 464, 621 }).ToArray(); int randFinalEvo() => (int)(Util.rnd32() % FinalEvo.Length); int randLegend() => (int)(Util.rnd32() % ReplaceLegend.Length); for (int i = 3; i < Gifts.Length; i++) // Skip Starters { var t = Gifts[i]; // Legendary-for-Legendary if ((CHK_ReplaceLegend.Checked && ReplaceLegend.Contains(t.Species)) || UnevolvedLegend.Contains(t.Species)) { t.Species = ReplaceLegend[randLegend()]; } // every other entry else { t.Species = specrand.GetRandomSpecies(t.Species); } if (CHK_AllowMega.Checked) { formrand.AllowMega = true; } if (CHK_Item.Checked) { t.HeldItem = items[Util.rnd32() % items.Length]; } if (CHK_Level.Checked) { t.Level = Randomizer.getModifiedLevel(t.Level, NUD_LevelBoost.Value); } if (CHK_RemoveShinyLock.Checked) { t.ShinyLock = false; } if (CHK_SpecialMove.Checked) { if (CHK_Metronome.Checked) { t.SpecialMove = 0; // remove Surf Pikachu's special move } else { int rv; do { rv = Util.rand.Next(1, CB_SpecialMove.Items.Count); }while (banned.Contains(rv)); t.SpecialMove = rv; } } if (CHK_RandomAbility.Checked) { t.Ability = (sbyte)(Util.rand.Next(0, 3)); // 1, 2, or H } if (CHK_ForceFullyEvolved.Checked && t.Level >= NUD_ForceFullyEvolved.Value && !FinalEvo.Contains(t.Species)) { t.Species = FinalEvo[randFinalEvo()]; } t.Form = Randomizer.GetRandomForme(t.Species, CHK_AllowMega.Checked, true, Main.SpeciesStat); t.Nature = -1; // random } foreach (EncounterStatic7 t in Encounters) { // Legendary-for-Legendary if (CHK_ReplaceLegend.Checked && ReplaceLegend.Contains(t.Species)) { t.Species = ReplaceLegend[randLegend()]; } // fully evolved Totems else if (CHK_ForceTotem.Checked && Totem.Contains(t.Species)) { t.Species = FinalEvo[randFinalEvo()]; } // every other entry else { t.Species = specrand.GetRandomSpecies(t.Species); } if (CHK_AllowMega.Checked) { formrand.AllowMega = true; } if (CHK_Item.Checked) { t.HeldItem = items[Util.rnd32() % items.Length]; } if (CHK_Level.Checked) { t.Level = Randomizer.getModifiedLevel(t.Level, NUD_LevelBoost.Value); } if (CHK_RemoveShinyLock.Checked) { t.ShinyLock = false; } if (CHK_RandomAura.Checked && t.Aura != 0) // don't apply aura to a pkm without it { t.Aura = Util.rand.Next(1, CB_Aura.Items.Count); // don't allow none } if (CHK_RandomAbility.Checked) { t.Ability = (sbyte)(Util.rand.Next(1, 4)); // 1, 2, or H } if (CHK_ForceFullyEvolved.Checked && t.Level >= NUD_ForceFullyEvolved.Value && !FinalEvo.Contains(t.Species)) { t.Species = FinalEvo[randFinalEvo()]; } t.Form = Randomizer.GetRandomForme(t.Species, CHK_AllowMega.Checked, true, Main.SpeciesStat); t.Gender = 0; // random t.Nature = 0; // random if (CHK_Metronome.Checked) { t.RelearnMoves = new[] { 118, 0, 0, 0 } } ; else { t.RelearnMoves = move.GetCurrentMoves(t.Species, t.Form, t.Level, 4); } } foreach (EncounterTrade7 t in Trades) { t.Species = specrand.GetRandomSpecies(t.Species); t.TradeRequestSpecies = specrand.GetRandomSpecies(t.TradeRequestSpecies); if (CHK_AllowMega.Checked) { formrand.AllowMega = true; } if (CHK_Item.Checked) { t.HeldItem = items[Util.rnd32() % items.Length]; } if (CHK_Level.Checked) { t.Level = Randomizer.getModifiedLevel(t.Level, NUD_LevelBoost.Value); } if (CHK_RandomAbility.Checked) { t.Ability = (sbyte)(Util.rand.Next(0, 3)); // 1, 2, or H } if (CHK_ForceFullyEvolved.Checked && t.Level >= NUD_ForceFullyEvolved.Value && !FinalEvo.Contains(t.Species)) { t.Species = FinalEvo[randFinalEvo()]; // only do offered species to be fair } t.Form = Randomizer.GetRandomForme(t.Species, CHK_AllowMega.Checked, true, Main.SpeciesStat); t.Nature = (int)(Util.rnd32() % CB_TNature.Items.Count); // randomly selected } GetListBoxEntries(); GetGift(); GetEncounter(); GetTrade(); WinFormsUtil.Alert("Randomized Static Encounters according to specification!"); }
private static void GetQuickFiller(PictureBox pb, trpoke7 pk) { Bitmap rawImg = WinFormsUtil.getSprite(pk.Species, pk.Form, pk.Gender, pk.Item, Main.Config, pk.Shiny); pb.Image = WinFormsUtil.scaleImage(rawImg, 2); }
// Randomization private void B_Randomize_Click(object sender, EventArgs e) { if (WinFormsUtil.Prompt(MessageBoxButtons.YesNo, "Randomize all? Cannot undo.", "Double check Randomization settings at the bottom left.") != DialogResult.Yes) { return; } Enabled = false; int slotStart; int slotStop; bool copy = false; switch (CB_SlotRand.SelectedIndex) { default: // All slotStart = 0; slotStop = -1; break; case 1: // Regular Only slotStart = 0; slotStop = 1; break; case 2: // SOS Only slotStart = 1; slotStop = -1; break; case 3: // Regular Only, Copy to SOS slotStart = 0; slotStop = 1; copy = true; break; } var rnd = new SpeciesRandomizer(Main.Config) { G1 = CHK_G1.Checked, G2 = CHK_G2.Checked, G3 = CHK_G3.Checked, G4 = CHK_G4.Checked, G5 = CHK_G5.Checked, G6 = CHK_G6.Checked, G7 = CHK_G7.Checked, E = CHK_E.Checked, L = CHK_L.Checked, rBST = CHK_BST.Checked, }; rnd.Initialize(); foreach (var Map in Areas) { foreach (var Table in Map.Tables) { if (CHK_Level.Checked) { Table.MinLevel = Randomizer.getModifiedLevel(Table.MinLevel, NUD_LevelAmp.Value); Table.MaxLevel = Randomizer.getModifiedLevel(Table.MaxLevel, NUD_LevelAmp.Value); } int end = slotStop < 0 ? Table.Encounters.Length : slotStop; for (int s = slotStart; s < end; s++) { var EncounterSet = Table.Encounters[s]; foreach (var enc in EncounterSet.Where(enc => enc.Species != 0)) { enc.Species = (uint)rnd.GetRandomSpecies((int)enc.Species); enc.Forme = GetRandomForme((int)enc.Species); } } if (copy) // copy row 0 to rest { var table = Table.Encounters; var s0 = table[0]; for (int r = 1; r < table.Length; r++) { var slots = table[r]; for (int s = 0; s < slots.Length; s++) { slots[s].Species = s0[s].Species; slots[s].Forme = s0[s].Forme; } } } Table.Write(); } encdata[Map.FileNumber] = getMapData(Map.Tables); } updatePanel(sender, e); Enabled = true; WinFormsUtil.Alert("Randomized all Wild Encounters according to specification!", "Press the Dump Tables button to view the new Wild Encounter information!"); }
private void B_Starters_Click(object sender, EventArgs e) { if (WinFormsUtil.Prompt(MessageBoxButtons.YesNo, "Randomize Starters? Cannot undo.", "Double check Randomization settings before continuing.") != DialogResult.Yes) { return; } SetGift(); var specrand = GetRandomizer(); var formrand = new FormRandomizer(Main.Config) { AllowMega = false, AllowAlolanForm = true }; var items = Randomizer.getRandomItemList(); int[] banned = Legal.Z_Moves.Concat(new int[] { 165, 464, 621 }).ToArray(); // Assign Species for (int i = 0; i < 3; i++) { var t = Gifts[i]; // Pokemon with 2 evolutions if (CHK_BasicStarter.Checked) { int basic() => (int)(Util.rnd32() % BasicStarter.Length); t.Species = BasicStarter[basic()]; } else { t.Species = specrand.GetRandomSpecies(oldStarters[i]); } if (CHK_AllowMega.Checked) { formrand.AllowMega = true; } if (CHK_Item.Checked) { t.HeldItem = items[Util.rnd32() % items.Length]; } if (CHK_Level.Checked) { t.Level = Randomizer.getModifiedLevel(t.Level, NUD_LevelBoost.Value); } if (CHK_RemoveShinyLock.Checked) { t.ShinyLock = false; } if (CHK_SpecialMove.Checked && !CHK_Metronome.Checked) { int rv; do { rv = Util.rand.Next(1, CB_SpecialMove.Items.Count); }while (banned.Contains(rv)); t.SpecialMove = rv; } if (CHK_RandomAbility.Checked) { t.Ability = (sbyte)(Util.rand.Next(0, 3)); // 1, 2, or H } t.Form = Randomizer.GetRandomForme(t.Species, CHK_AllowMega.Checked, true, Main.SpeciesStat); t.Nature = -1; // random } GetListBoxEntries(); GetGift(); WinFormsUtil.Alert("Randomized Starters according to specification!"); }
public Bitmap GetTableImg() { var img = new Bitmap(10 * 40, 10 * 30); using (var g = Graphics.FromImage(img)) { g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit; for (int i = 0; i < Encounters.Length - 1; i++) { for (int j = 0; j < Encounters[i].Length; j++) { g.DrawImage(Encounters[i][j].Species == 0 ? Properties.Resources.empty : WinFormsUtil.getSprite((int)Encounters[i][j].Species, (int)Encounters[i][j].Forme, 0, 0, Main.Config), new Point(40 * j, 30 * (i + 1))); } } for (int i = 0; i < Rates.Length; i++) { g.DrawString($"{Rates[i]}%", font, Brushes.Black, new PointF(40 * i + 10, 10)); } g.DrawString("Weather: ", font, Brushes.Black, new PointF(10, 280)); for (int i = 0; i < AdditionalSOS.Length; i++) { g.DrawImage(AdditionalSOS[i].Species == 0 ? Properties.Resources.empty : WinFormsUtil.getSprite((int)AdditionalSOS[i].Species, (int)AdditionalSOS[i].Forme, 0, 0, Main.Config), new Point(40 * i + 60, 270)); } } return(img); }
private void B_RandomTM_Click(object sender, EventArgs e) { if (WinFormsUtil.Prompt(MessageBoxButtons.YesNo, "Randomize TMs? Cannot undo.", "Move compatibility will be the same as the base TMs.") != DialogResult.Yes) { return; } if (WinFormsUtil.Prompt(MessageBoxButtons.YesNo, "Randomizing HMs can halt story progression!", "Continue anyway?") != DialogResult.Yes) { return; } int[] randomMoves = Enumerable.Range(1, movelist.Length - 1).Select(i => i).ToArray(); Util.Shuffle(randomMoves); int[] hm_xy = { 015, 019, 057, 070, 127 }; int[] hm_ao = hm_xy.Concat(new int[] { 249, 291 }).ToArray(); int[] field = { 148, 249, 290 }; // TMs with field effects int[] banned = { 165, 621 }; // Struggle and Hyperspace Fury int ctr = 0; for (int i = 0; i < dgvTM.Rows.Count; i++) { // randomize all TMs if (CHK_RandomizeField.Checked) { while (banned.Contains(randomMoves[ctr])) { ctr++; } dgvTM.Rows[i].Cells[1].Value = movelist[randomMoves[ctr++]]; } // randomize all TMs, no Field Moves else { int val = Array.IndexOf(movelist, dgvTM.Rows[i].Cells[1].Value); if (hm_xy.Contains(val) || hm_ao.Contains(val) || field.Contains(val)) { continue; // skip banned moves } while (hm_xy.Contains(randomMoves[ctr]) || hm_ao.Contains(randomMoves[ctr]) || field.Contains(randomMoves[ctr]) || banned.Contains(randomMoves[ctr])) { ctr++; } dgvTM.Rows[i].Cells[1].Value = movelist[randomMoves[ctr++]]; } } if (CHK_RandomizeHM.Checked) { for (int j = 0; j < dgvHM.Rows.Count; j++) { while (banned.Contains(randomMoves[ctr])) { ctr++; } dgvHM.Rows[j].Cells[1].Value = movelist[randomMoves[ctr++]]; } } WinFormsUtil.Alert("Randomized!"); }
private static int[] sL; // Random Species List private void B_RandAll_Click(object sender, EventArgs e) { if (DialogResult.Yes != WinFormsUtil.Prompt(MessageBoxButtons.YesNo, "Randomize all resulting species?", "Evolution methods and parameters will stay the same.")) { return; } // Set up advanced randomization options bool rBST = CHK_BST.Checked; bool rEXP = CHK_Exp.Checked; bool rType = CHK_Type.Checked; int ctr = 0; sL = Randomizer.RandomSpeciesList; for (int i = 0; i < CB_Species.Items.Count; i++) { CB_Species.SelectedIndex = i; for (int j = 0; j < mb.Length; j++) { if (mb[j].SelectedIndex > 0) { // Get a new random species int oldSpecies = rb[j].SelectedIndex; PersonalInfo oldpkm = Main.SpeciesStat[oldSpecies]; int currentSpecies = Array.IndexOf(specieslist, CB_Species.Text); int loopctr = 0; // altering calculatiosn to prevent infinite loops defspecies: int newSpecies = Randomizer.getRandomSpecies(ref sL, ref ctr); PersonalInfo pkm = Main.SpeciesStat[newSpecies]; loopctr++; // Verify it meets specifications if (newSpecies == currentSpecies && loopctr < Main.Config.MaxSpeciesID * 10) // no A->A evolutions { goto defspecies; } if (rEXP) // Experience Growth Rate matches { if (oldpkm.EXPGrowth != pkm.EXPGrowth) { goto defspecies; } } if (rType) // Type has to be somewhat similar { if (!oldpkm.Types.Contains(pkm.Types[0]) || !oldpkm.Types.Contains(pkm.Types[1])) { goto defspecies; } } if (rBST) // Base stat total has to be close { const int l = 5; // tweakable scalars const int h = 6; if (!(pkm.BST * l / (h + loopctr / Main.Config.MaxSpeciesID) < oldpkm.BST && (pkm.BST * h + loopctr / Main.Config.MaxSpeciesID) / l > oldpkm.BST)) { goto defspecies; } } // assign random val rb[j].SelectedIndex = newSpecies; } } } setList(); WinFormsUtil.Alert("All Pokemon's Evolutions have been randomized!"); }
private void B_Randomize_Click(object sender, EventArgs e) { if (WinFormsUtil.Prompt(MessageBoxButtons.YesNo, "Randomize all? Cannot undo.", "Double check Randomization settings in the Horde tab.") != DialogResult.Yes) { return; } Enabled = false; // Calculate % diff we will apply to each level decimal leveldiff = (100 + NUD_LevelAmp.Value) / 100; // Nonrepeating List Start int[] sL = Randomizer.getSpeciesList(CHK_G1.Checked, CHK_G2.Checked, CHK_G3.Checked, CHK_G4.Checked, CHK_G5.Checked, CHK_G6.Checked, false, CHK_L.Checked, CHK_E.Checked); int ctr = 0; for (int i = 0; i < CB_LocationID.Items.Count; i++) // for every location { CB_LocationID.SelectedIndex = i; if (!hasData()) { continue; // Don't randomize if doesn't have data. } // Assign Levels if (CHK_Level.Checked) { for (int l = 0; l < max.Length; l++) { min[l].Value = max[l].Value = max[l].Value <= 1 ? max[l].Value : Math.Max(1, Math.Min(100, (int)(leveldiff * max[l].Value))); } } for (int slot = 0; slot < max.Length; slot++) { if (spec[slot].SelectedIndex == 0) { continue; } int species = Randomizer.getRandomSpecies(ref sL, ref ctr); if (CHK_BST.Checked) { int oldBST = Main.Config.Personal[spec[slot].SelectedIndex].BST; int newBST = Main.Config.Personal[species].BST; while (!(newBST * 4 / 5 < oldBST && newBST * 6 / 5 > oldBST)) { species = sL[rand.Next(1, sL.Length)]; newBST = Main.Config.Personal[species].BST; } } spec[slot].SelectedIndex = species; setRandomForm(slot, spec[slot].SelectedIndex); } B_Save_Click(sender, e); } Enabled = true; WinFormsUtil.Alert("Randomized all Wild Encounters according to specification!", "Press the Dump Tables button to view the new Wild Encounter information!"); }
private void UpdateStats(object sender, EventArgs e) { if (updatingStats) { return; } var tb_iv = new[] { TB_HPIV, TB_ATKIV, TB_DEFIV, TB_SPEIV, TB_SPAIV, TB_SPDIV }; var tb_ev = new[] { TB_HPEV, TB_ATKEV, TB_DEFEV, TB_SPEEV, TB_SPAEV, TB_SPDEV }; for (int i = 0; i < 6; i++) { updatingStats = true; if (WinFormsUtil.ToInt32(tb_iv[i]) > 31) { tb_iv[i].Text = "31"; } if (WinFormsUtil.ToInt32(tb_ev[i]) > 255) { tb_ev[i].Text = "255"; } updatingStats = false; } int species = CB_Species.SelectedIndex; species = Main.SpeciesStat[species].FormeIndex(species, CB_Forme.SelectedIndex); var p = Main.SpeciesStat[species]; int level = (int)NUD_Level.Value; int Nature = CB_Nature.SelectedIndex; ushort[] Stats = new ushort[6]; Stats[0] = (ushort)(p.HP == 1 ? 1 : (Util.ToInt32(TB_HPIV.Text) + 2 * p.HP + Util.ToInt32(TB_HPEV.Text) / 4 + 100) * level / 100 + 10); Stats[1] = (ushort)((Util.ToInt32(TB_ATKIV.Text) + 2 * p.ATK + Util.ToInt32(TB_ATKEV.Text) / 4) * level / 100 + 5); Stats[2] = (ushort)((Util.ToInt32(TB_DEFIV.Text) + 2 * p.DEF + Util.ToInt32(TB_DEFEV.Text) / 4) * level / 100 + 5); Stats[4] = (ushort)((Util.ToInt32(TB_SPAIV.Text) + 2 * p.SPA + Util.ToInt32(TB_SPAEV.Text) / 4) * level / 100 + 5); Stats[5] = (ushort)((Util.ToInt32(TB_SPDIV.Text) + 2 * p.SPD + Util.ToInt32(TB_SPDEV.Text) / 4) * level / 100 + 5); Stats[3] = (ushort)((Util.ToInt32(TB_SPEIV.Text) + 2 * p.SPE + Util.ToInt32(TB_SPEEV.Text) / 4) * level / 100 + 5); // Account for nature int incr = Nature / 5 + 1; int decr = Nature % 5 + 1; if (incr != decr) { Stats[incr] *= 11; Stats[incr] /= 10; Stats[decr] *= 9; Stats[decr] /= 10; } Stat_HP.Text = Stats[0].ToString(); Stat_ATK.Text = Stats[1].ToString(); Stat_DEF.Text = Stats[2].ToString(); Stat_SPA.Text = Stats[4].ToString(); Stat_SPD.Text = Stats[5].ToString(); Stat_SPE.Text = Stats[3].ToString(); TB_IVTotal.Text = tb_iv.Select(WinFormsUtil.ToInt32).Sum().ToString(); TB_EVTotal.Text = tb_ev.Select(WinFormsUtil.ToInt32).Sum().ToString(); // Recolor the Stat Labels based on boosted stats. { incr--; decr--; Label[] labarray = { Label_ATK, Label_DEF, Label_SPE, Label_SPA, Label_SPD }; // Reset Label Colors foreach (Label label in labarray) { label.ResetForeColor(); } // Set Colored StatLabels only if Nature isn't Neutral if (incr != decr) { labarray[incr].ForeColor = Color.Red; labarray[decr].ForeColor = Color.Blue; } } var ivs = tb_iv.Select(tb => WinFormsUtil.ToInt32(tb) & 1).ToArray(); updatingStats = true; CB_HPType.SelectedIndex = 15 * (ivs[0] + 2 * ivs[1] + 4 * ivs[2] + 8 * ivs[3] + 16 * ivs[4] + 32 * ivs[5]) / 63; updatingStats = false; }
internal static void openARC(string path, ProgressBar pBar1, bool recursing = false) { string newFolder = ""; try { // Pre-check file length to see if it is at least valid. FileInfo fi = new FileInfo(path); if (fi.Length > (long)2 * (1 << 30)) { WinFormsUtil.Error("File is too big!"); return; } // 2 GB string folderPath = Path.Combine(Path.GetDirectoryName(path), Path.GetFileNameWithoutExtension(path)); byte[] first4 = new byte[4]; try { using (BinaryReader bw = new BinaryReader(new FileStream(path, FileMode.Open))) first4 = bw.ReadBytes(4); } catch (Exception e) { WinFormsUtil.Error("Cannot open file!", e.ToString()); } // Determine if it is a DARC or a Mini // Check if Mini first string fx = fi.Length > 10 * (1 << 20) ? null : mini.getIsMini(path); // no mini is above 10MB if (fx != null) // Is Mini Packed File { newFolder = folderPath + "_" + fx; // Fetch Mini File Contents mini.unpackMini(path, fx, newFolder, false); // Recurse throught the extracted contents if they extract successfully if (Directory.Exists(newFolder)) { foreach (string file in Directory.GetFiles(newFolder)) { openARC(file, pBar1, true); } batchRenameExtension(newFolder); } } else if (first4.SequenceEqual(BitConverter.GetBytes(0x54594C41))) // ALYT { if (threads > 0) { WinFormsUtil.Alert("Please wait for all operations to finish first."); return; } new Thread(() => { threads++; var alyt = new ALYT(File.ReadAllBytes(path)); var sarc = new SARC(alyt.Data) // rip out sarc { FileName = Path.GetFileNameWithoutExtension(path) + "_sarc", FilePath = Path.GetDirectoryName(path) }; if (!sarc.Valid) { return; } var files = sarc.Dump(); foreach (string file in files) { // openARC(file, pBar1, true); } threads--; }).Start(); } else if (first4.SequenceEqual(BitConverter.GetBytes(0x47415243))) // GARC { if (threads > 0) { WinFormsUtil.Alert("Please wait for all operations to finish first."); return; } bool SkipDecompression = ModifierKeys == Keys.Control; new Thread(() => { threads++; bool r = GarcUtil.garcUnpack(path, folderPath + "_g", SkipDecompression, pBar1); threads--; if (r) { batchRenameExtension(newFolder); } else { WinFormsUtil.Alert("Unpacking failed."); return; } System.Media.SystemSounds.Asterisk.Play(); }).Start(); } else if (ARC.analyze(path).valid) // DARC { var data = File.ReadAllBytes(path); int pos = 0; while (BitConverter.ToUInt32(data, pos) != 0x63726164) { pos += 4; if (pos >= data.Length) { return; } } var darcData = data.Skip(pos).ToArray(); newFolder = folderPath + "_d"; bool r = Core.CTR.DARC.darc2files(darcData, newFolder); if (!r) { WinFormsUtil.Alert("Unpacking failed."); } } else if (ARC.analyzeSARC(path).Valid) { var sarc = ARC.analyzeSARC(path); Console.WriteLine($"New SARC with {sarc.SFAT.EntryCount} files."); foreach (var z in sarc.Dump(path)) { } } else if (!recursing) { WinFormsUtil.Alert("File is not a darc or a mini packed file:" + Environment.NewLine + path);; } } catch (Exception e) { if (!recursing) { WinFormsUtil.Error("File error:" + Environment.NewLine + path, e.ToString()); } threads = 0; } }
private void B_Randomize_Click(object sender, EventArgs e) { if (WinFormsUtil.Prompt(MessageBoxButtons.YesNo, "Randomize all? Cannot undo.", "Double check Randomization settings in the Misc/Rand tab.") != DialogResult.Yes) { return; } CB_TrainerID.SelectedIndex = 0; var rnd = new SpeciesRandomizer(Main.Config) { G1 = CHK_G1.Checked, G2 = CHK_G2.Checked, G3 = CHK_G3.Checked, G4 = CHK_G4.Checked, G5 = CHK_G5.Checked, G6 = CHK_G6.Checked, G7 = CHK_G7.Checked, E = CHK_E.Checked, L = CHK_L.Checked, rBST = CHK_BST.Checked, }; rnd.Initialize(); var banned = new List <int>(new[] { 165, 621, 464 }.Concat(Legal.Z_Moves)); // Struggle, Hyperspace Fury, Dark Void if (CHK_NoFixedDamage.Checked) { banned.AddRange(MoveRandomizer.FixedDamageMoves); } var move = new MoveRandomizer(Main.Config) { BannedMoves = banned, rSTABCount = (int)NUD_STAB.Value, rDMG = CHK_Damage.Checked, rDMGCount = (int)NUD_Damage.Value, rSTAB = CHK_STAB.Checked }; var items = Randomizer.getRandomItemList(); for (int i = 0; i < Trainers.Length; i++) { var tr = Trainers[i]; if (tr.Pokemon.Count == 0) { continue; } // Trainer Properties if (CHK_RandomClass.Checked) { int rv; do { rv = (int)(Util.rnd32() % CB_Trainer_Class.Items.Count); } while (/*trClass[rv].StartsWith("[~") || */ TrainerClasses.Contains(rv) && CHK_IgnoreSpecialClass.Checked); // don't allow disallowed classes if (rv == 082) // Lusamine 2 (Aether President - 082) can crash Multi Battles, skip { continue; } tr.TrainerClass = (byte)rv; } var avgBST = (int)tr.Pokemon.Average(pk => Main.SpeciesStat[pk.Species].BST); int avgLevel = (int)tr.Pokemon.Average(pk => pk.Level); var pinfo = Main.SpeciesStat.OrderBy(pk => Math.Abs(avgBST - pk.BST)).First(); int avgSpec = Array.IndexOf(Main.SpeciesStat, pinfo); if (tr.NumPokemon < NUD_RMin.Value) { for (int p = tr.NumPokemon; p < NUD_RMin.Value; p++) { tr.Pokemon.Add(new trpoke7 { Species = rnd.GetRandomSpecies(avgSpec), Level = avgLevel, }); } tr.NumPokemon = (int)NUD_RMin.Value; } if (tr.NumPokemon > NUD_RMax.Value) { tr.Pokemon.RemoveRange((int)NUD_RMax.Value, (int)(tr.NumPokemon - NUD_RMax.Value)); tr.NumPokemon = (int)NUD_RMax.Value; } if (CHK_6PKM.Checked && ImportantTrainers.Contains(tr.ID)) { for (int g = tr.NumPokemon; g < 6; g++) { tr.Pokemon.Add(new trpoke7 { Species = rnd.GetRandomSpecies(avgSpec), Level = avgLevel, }); } tr.NumPokemon = 6; } // PKM Properties foreach (var pk in tr.Pokemon) { if (CHK_RandomPKM.Checked) { int Type = CHK_TypeTheme.Checked ? (int)Util.rnd32() % 17 : -1; // replaces Megas with another Mega (Dexio and Lysandre in USUM) if (MegaDictionary.Values.Any(z => z.Contains(pk.Item))) { int species = pk.Species; int[] mega = GetRandomMega(out species); pk.Species = species; pk.Item = mega[Util.rand.Next(0, mega.Length)]; pk.Form = 0; // allow it to Mega Evolve naturally } // replaces Team Rainbow Rocket Legendaries with another Legendary else if (CHK_ReplaceLegend.Checked && ReplaceLegend.Contains(pk.Species)) { int randLegend() => (int)(Util.rnd32() % ReplaceLegend.Length); pk.Species = ReplaceLegend[randLegend()]; pk.Item = items[Util.rnd32() % items.Length]; pk.Form = Randomizer.GetRandomForme(pk.Species, CHK_RandomMegaForm.Checked, true, Main.SpeciesStat); } // every other pkm else { pk.Species = rnd.GetRandomSpeciesType(pk.Species, Type); pk.Item = items[Util.rnd32() % items.Length]; pk.Form = Randomizer.GetRandomForme(pk.Species, CHK_RandomMegaForm.Checked, true, Main.SpeciesStat); } pk.Gender = 0; // random pk.Nature = (int)(Util.rnd32() % CB_Nature.Items.Count); // random } if (CHK_Level.Checked) { pk.Level = Randomizer.getModifiedLevel(pk.Level, NUD_LevelBoost.Value); } if (CHK_RandomShiny.Checked) { pk.Shiny = Util.rand.Next(0, 100 + 1) < NUD_Shiny.Value; } if (CHK_RandomAbilities.Checked) { pk.Ability = (int)Util.rnd32() % 4; } if (CHK_MaxDiffPKM.Checked) { pk.IVs = new[] { 31, 31, 31, 31, 31, 31 } } ; if (CHK_ForceFullyEvolved.Checked && pk.Level >= NUD_ForceFullyEvolved.Value && !FinalEvo.Contains(pk.Species)) { int randFinalEvo() => (int)(Util.rnd32() % FinalEvo.Length); pk.Species = FinalEvo[randFinalEvo()]; pk.Form = Randomizer.GetRandomForme(pk.Species, CHK_RandomMegaForm.Checked, true, Main.SpeciesStat); } switch (CB_Moves.SelectedIndex) { case 1: // Random pk.Moves = move.GetRandomMoveset(pk.Species, 4); break; case 2: // Current LevelUp pk.Moves = learn.GetCurrentMoves(pk.Species, pk.Form, pk.Level, 4); break; } // high-power attacks if (CHK_ForceHighPower.Checked && pk.Level >= NUD_ForceHighPower.Value) { pk.Moves = learn.GetHighPoweredMoves(pk.Species, pk.Form, 4); } // sanitize moves if (CB_Moves.SelectedIndex > 1) // learn source { var moves = pk.Moves; if (move.SanitizeMovesetForBannedMoves(moves, pk.Species)) { pk.Moves = moves; } } } SaveData(tr, i); } WinFormsUtil.Alert("Randomized all Trainers according to specification!", "Press the Dump to .TXT button to view the new Trainer information!"); }
private void DecompressLZSS_BLZ(string path) { try { LZSS.Decompress(path, Path.Combine(Path.GetDirectoryName(path), "dec_" + Path.GetFileName(path))); File.Delete(path); } catch { try { if (threads < 1) { new Thread(() => { threads++; new BLZCoder(new[] { "-d", path }, pBar1); threads--; WinFormsUtil.Alert("Decompressed!"); }).Start(); } } catch { WinFormsUtil.Error("Unable to process file."); threads = 0; } } }
// Randomization private void B_Randomize_Click(object sender, EventArgs e) { if (WinFormsUtil.Prompt(MessageBoxButtons.YesNo, "Randomize all? Cannot undo.", "Double check Randomization settings in the Horde tab.") != DialogResult.Yes) { return; } Enabled = false; // Calculate % diff we will apply to each level decimal leveldiff = NUD_LevelAmp.Value; // Nonrepeating List Start var rand = new SpeciesRandomizer(Main.Config) { G1 = CHK_G1.Checked, G2 = CHK_G2.Checked, G3 = CHK_G3.Checked, G4 = CHK_G4.Checked, G5 = CHK_G5.Checked, G6 = CHK_G6.Checked, L = CHK_L.Checked, E = CHK_E.Checked, Shedinja = false, rBST = CHK_BST.Checked, }; rand.Initialize(); int[] slotArray = Enumerable.Range(0, All_Max.Length).Select(a => a).ToArray(); for (int i = 0; i < CB_LocationID.Items.Count; i++) // for every location { CB_LocationID.SelectedIndex = i; if (!HasData()) { continue; // Don't randomize if doesn't have data. } // Assign Levels if (CHK_Level.Checked) { for (int l = 0; l < All_Max.Length; l++) { All_Min[l].Value = All_Max[l].Value = All_Max[l].Value <= 1 ? All_Max[l].Value : Math.Max(1, Math.Min(100, (int)(leveldiff * All_Max[l].Value))); } } // Get a new list of Pokemon so that DexNav does not crash. int[] list = new int[All_Max.Length]; int used = 19; // Count up how many slots are active. for (int s = 0; s < All_Max.Length; s++) { if (All_Species[s].SelectedIndex > 0) { list[s] = All_Species[s].SelectedIndex; } } // At most 18, but don't chew if there's only a few slots. int cons = list.Count(a => a != 0); int[] RandomList = new int[cons > 18 ? 18 - (cons / 8) : cons]; // Fill Location List for (int s = 0; s < RandomList.Length; s++) { RandomList[s] = rand.GetRandomSpecies(All_Species[s].SelectedIndex); } // Assign Slots while (used < RandomList.Distinct().Count() || used > 18) // Can just arbitrarily assign slots. { Util.Shuffle(slotArray); for (int s = 0; s < All_Max.Length; s++) { int slot = slotArray[s]; if (All_Species[slot].SelectedIndex != 0) // If the slot is in use { list[slot] = RandomList[Util.Rand.Next(0, RandomList.Length)]; } } used = CountUnique(list); if (used != RandomList.Length) { ShuffleSlots(ref list); } used = CountUnique(list); } // If Distinct Hordes are selected, homogenize int hordeslot = 0; if (CHK_HomogeneousHordes.Checked) { for (int slot = All_Max.Length - 15; slot < All_Max.Length; slot++) { list[slot] = list[slot - (hordeslot % 5)]; hordeslot++; } } // Fill Slots for (int slot = 0; slot < All_Max.Length; slot++) { if (All_Species[slot].SelectedIndex != 0) { All_Species[slot].SelectedIndex = list[slot]; SetRandomForm(slot, All_Species[slot].SelectedIndex); } } B_Save_Click(sender, e); } Enabled = true; WinFormsUtil.Alert("Randomized all Wild Encounters according to specification!", "Press the Dump Tables button to view the new Wild Encounter information!"); }
private void Randomize() { int[] banned = { 165, 621 }; // Struggle, Hyperspace Fury rImportant = new string[CB_TrainerID.Items.Count]; rTags = Main.Config.ORAS ? GetTagsORAS() : GetTagsXY(); mEvoTypes = GetMegaEvolvableTypes(); List <int> GymE4Types = new List <int>(); // Fetch Move Stats for more difficult randomization var moveData = Main.Config.Moves; int[] moveList = Enumerable.Range(1, movelist.Length - 1).ToArray(); int mctr = 0; Util.Shuffle(moveList); if (rEnsureMEvo.Length > 0) { if (mEvoTypes.Length < 13 && rTypeTheme) { WinFormsUtil.Alert("There are insufficient Types with at least one mega evolution to Guarantee story Mega Evos while keeping Type theming.", "Re-Randomize Personal or don't choose both options."); return; } GymE4Types.AddRange(mEvoTypes); } else { GymE4Types.AddRange(Enumerable.Range(0, types.Length).ToArray()); } foreach (int t1 in rEnsureMEvo.Where(t1 => rTags[t1] != "" && !TagTypes.Keys.Contains(rTags[t1]))) { int t; if (rTags[t1].Contains("GYM") || rTags[t1].Contains("ELITE") || rTags[t1].Contains("CHAMPION")) { t = GymE4Types[(int)(rnd32() % GymE4Types.Count)]; GymE4Types.Remove(t); } else { t = mEvoTypes[rnd32() % mEvoTypes.Length]; } TagTypes[rTags[t1]] = t; } foreach (string t1 in Tags) { if (!TagTypes.Keys.Contains(t1) && t1 != "") { int t; if (t1.Contains("GYM") || t1.Contains("ELITE") || t1.Contains("CHAMPION")) { t = GymE4Types[(int)(rnd32() % GymE4Types.Count)]; GymE4Types.Remove(t); } else { t = (int)(rnd32() % types.Length); } TagTypes[t1] = t; } Console.WriteLine(t1 + ": " + types[TagTypes[t1]]); } randomizing = true; for (int i = 1; i < CB_TrainerID.Items.Count; i++) { CB_TrainerID.SelectedIndex = i; // data is loaded // Setup checkBox_Moves.Checked = rMove || !rNoMove && checkBox_Moves.Checked; checkBox_Item.Checked = rItem || checkBox_Item.Checked; if (r6PKM && rImportant[i] != null) // skip the first rival battles { // Copy the last slot to random pokemon int lastPKM = Math.Max(CB_numPokemon.SelectedIndex - 1, 0); // 0,1-6 => 0-5 (never is 0) CB_numPokemon.SelectedIndex = 6; for (int f = lastPKM + 1; f < 6; f++) { trpk_pkm[f].SelectedIndex = trpk_IV[lastPKM].SelectedIndex; trpk_lvl[f].SelectedIndex = Math.Min(trpk_lvl[f - 1].SelectedIndex + 1, 100); } } // Randomize Trainer Stats if (rDiffAI) { if (CB_Battle_Type.SelectedIndex == 0) { CB_AI.SelectedIndex = 7; // Max Single } else if (CB_Battle_Type.SelectedIndex == 1) { CB_AI.SelectedIndex = 135; // Max Double } } if ( rClass && // Classes selected to be randomized (!rOnlySingles || CB_Battle_Type.SelectedIndex == 0) && // Nonsingles only get changed if rOnlySingles !rIgnoreClass.Contains(CB_Trainer_Class.SelectedIndex) // Current class isn't a special class ) { int rv = (int)(rnd32() % CB_Trainer_Class.Items.Count); // Ensure the Random Class isn't an exclusive class while (rIgnoreClass.Contains(rv) && !trClass[rv].StartsWith("[~")) // don't allow disallowed classes { rv = (int)(rnd32() % CB_Trainer_Class.Items.Count); } CB_Trainer_Class.SelectedIndex = rv; } if (rGift && rnd32() % 100 < rGiftPercent) #region Random Prize Logic { ushort[] items; uint rnd = rnd32() % 10; if (rnd < 2) // held item { items = Main.Config.ORAS ? Legal.Pouch_Items_AO : Legal.Pouch_Items_XY; } else if (rnd < 5) // medicine { items = Main.Config.ORAS ? Legal.Pouch_Medicine_AO : Legal.Pouch_Medicine_XY; } else // berry { items = Legal.Pouch_Berry_XY; } CB_Prize.SelectedIndex = items[rnd32() % items.Length]; } #endregion else if (rGift) { CB_Prize.SelectedIndex = 0; } ushort[] itemvals = Main.Config.ORAS ? Legal.Pouch_Items_AO : Legal.Pouch_Items_XY; itemvals = itemvals.Concat(Legal.Pouch_Berry_XY).ToArray(); int itemC = itemvals.Length; int ctr = 0; // Trainer Type/Mega Evo int type = GetRandomType(i); bool mevo = rEnsureMEvo.Contains(i); bool typerand = rTypeTheme && !rGymE4Only || rTypeTheme && rImportant[i] != null && (rImportant[i].Contains("GYM") || rImportant[i].Contains("ELITE") || rImportant[i].Contains("CHAMPION")); // Randomize Pokemon for (int p = 0; p < CB_numPokemon.SelectedIndex; p++) { PersonalInfo oldpkm = Main.SpeciesStat[trpk_pkm[p].SelectedIndex]; PersonalInfo pkm = null; if (rPKM) { // randomize pokemon int species; pkm = Main.SpeciesStat[species = Randomizer.getRandomSpecies(ref sL, ref ctr)]; if (typerand) { int tries = 0; while ((pkm.Types[0] != type && pkm.Types[1] != type || mevo && p == CB_numPokemon.SelectedIndex - 1 && !megaEvos.Contains(species)) && tries < 0x10000) { if (p == CB_numPokemon.SelectedIndex - 1 && mevo) { pkm = Main.SpeciesStat[species = GetRandomMegaEvolvablePokemon(type)]; } else if (rSmart) // Get a new Pokemon with a close BST { pkm = Main.SpeciesStat[species = Randomizer.getRandomSpecies(ref sL, ref ctr)]; while (!(pkm.BST * (5 - ++tries / Main.Config.MaxSpeciesID) / 6 < oldpkm.BST && pkm.BST * (6 + ++tries / Main.Config.MaxSpeciesID) / 5 > oldpkm.BST)) { pkm = Main.SpeciesStat[species = Randomizer.getRandomSpecies(ref sL, ref ctr)]; } } else { pkm = Main.SpeciesStat[species = Randomizer.getRandomSpecies(ref sL, ref ctr)]; } } } else if (p == CB_numPokemon.SelectedIndex - 1 && mevo) { pkm = Main.SpeciesStat[species = megaEvos[rnd32() % megaEvos.Length]]; } else if (rSmart) // Get a new Pokemon with a close BST { int tries = 0; while (!(pkm.BST * (5 - ++tries / Main.Config.MaxSpeciesID) / 6 < oldpkm.BST && pkm.BST * (6 + ++tries / Main.Config.MaxSpeciesID) / 5 > oldpkm.BST)) { pkm = Main.SpeciesStat[species = Randomizer.getRandomSpecies(ref sL, ref ctr)]; } } trpk_pkm[p].SelectedIndex = species; // Set Gender to Random trpk_gender[p].SelectedIndex = 0; if (trpk_form[p].Items.Count > 0) { trpk_form[p].SelectedIndex = 0; } // Randomize form if (trpk_form[p].Items.Count > 0 && (!megaEvos.Contains(species) || rRandomMegas)) { trpk_form[p].SelectedIndex = (int)(rnd32() % trpk_form[p].Items.Count); } } if (rLevel) { trpk_lvl[p].SelectedIndex = Randomizer.getModifiedLevel(trpk_lvl[p].SelectedIndex, rLevelMultiplier); } if (rAbility) { trpk_abil[p].SelectedIndex = (int)(1 + rnd32() % 3); } if (rDiffIV) { trpk_IV[p].SelectedIndex = 255; } if (mevo && p == CB_numPokemon.SelectedIndex - 1) { int[] megastones = GetMegaStones(trpk_pkm[p].SelectedIndex); if (megastones.Length > 0) { trpk_item[p].SelectedIndex = megastones[rnd32() % megastones.Length]; } } else if (rItem) #region RandomItem { trpk_item[p].SelectedIndex = itemvals[rnd32() % itemC]; } #endregion if (rMove) { pkm = pkm ?? Main.SpeciesStat[trpk_pkm[p].SelectedIndex]; int[] pkMoves = new int[4]; var moves = new[] { trpk_m1[p], trpk_m2[p], trpk_m3[p], trpk_m4[p] }; int loopctr = 0; getMoves: // Get list of moves loopctr++; for (int m = 0; m < 4; m++) { int mv = Randomizer.getRandomSpecies(ref moveList, ref mctr); while (banned.Contains(mv) || pkMoves.Contains(mv)) { mv = Randomizer.getRandomSpecies(ref moveList, ref mctr); } pkMoves[m] = mv; } // If a certain amount of damaging moves is required, check. if (rDMG) { int damagingMoves = pkMoves.Count(move => moveData[move].Category != 0); if (damagingMoves < rDMGCount && loopctr < 666) { goto getMoves; } } if (rSTAB) { int STAB = pkMoves.Count(move => pkm.Types.Contains(moveData[move].Type)); if (STAB < rSTABCount && loopctr < 666) { goto getMoves; } } // Assign Moves for (int m = 0; m < 4; m++) { moves[m].SelectedIndex = pkMoves[m]; } } } } randomizing = false; CB_TrainerID.SelectedIndex = 1; WinFormsUtil.Alert("Randomized all Trainers according to specification!", "Press the Dump to .TXT button to view the new Trainer information!"); }
private void B_Randomize_Click(object sender, EventArgs e) { // gametext can be horribly broken if randomized if (Mode == "gametext" && DialogResult.Yes != WinFormsUtil.Prompt(MessageBoxButtons.YesNo, "Randomizing Game Text is dangerous!", "Continue?")) { return; } // get if the user wants to randomize current text file or all files var dr = WinFormsUtil.Prompt(MessageBoxButtons.YesNoCancel, $"Yes: Randomize ALL{Environment.NewLine}No: Randomize current textfile{Environment.NewLine}Cancel: Abort"); if (dr == DialogResult.Cancel) { return; } // get if pure shuffle or smart shuffle (no shuffle if variable present) var drs = WinFormsUtil.Prompt(MessageBoxButtons.YesNo, $"Smart shuffle:{Environment.NewLine}Yes: Shuffle if no Variable present{Environment.NewLine}No: Pure random!"); if (drs == DialogResult.Cancel) { return; } bool all = dr == DialogResult.Yes; bool smart = drs == DialogResult.Yes; // save current if (entry > -1) { files[entry] = GetCurrentDGLines(); } // single-entire looping int start = all ? 0 : entry; int end = all ? files.Length - 1 : entry; // Gather strings List <string> strings = new List <string>(); for (int i = start; i <= end; i++) { string[] data = files[i]; strings.AddRange(smart ? data.Where(line => !line.Contains("[")) : data); } // Shuffle up string[] pool = strings.ToArray(); Util.Shuffle(pool); // Apply Text int ctr = 0; for (int i = start; i <= end; i++) { string[] data = files[i]; for (int j = 0; j < data.Length; j++) // apply lines { if (!smart || !data[j].Contains("[")) { data[j] = pool[ctr++]; } } files[i] = data; } // Load current text file SetStringsDataGridView(files[entry]); WinFormsUtil.Alert("Strings randomized!"); }
private void B_Save_Click(object sender, EventArgs e) { RSTE.rPKM = CHK_RandomPKM.Checked; RSTE.sL = Randomizer.getSpeciesList(CHK_G1.Checked, CHK_G2.Checked, CHK_G3.Checked, CHK_G4.Checked, CHK_G5.Checked, CHK_G6.Checked, false, CHK_L.Checked, CHK_E.Checked, ModifierKeys == Keys.Control); RSTE.rSmart = CHK_BST.Checked; RSTE.rLevel = CHK_Level.Checked; RSTE.rLevelMultiplier = NUD_Level.Value; RSTE.rMove = CB_Moves.SelectedIndex == 1; RSTE.rNoMove = CB_Moves.SelectedIndex == 2; if (RSTE.rMove) { RSTE.rDMG = CHK_Damage.Checked; if (RSTE.rDMG) { RSTE.rDMGCount = (int)NUD_Damage.Value; } RSTE.rSTAB = CHK_STAB.Checked; if (RSTE.rSTAB) { RSTE.rSTABCount = (int)NUD_STAB.Value; } } RSTE.rItem = CHK_RandomItems.Checked; RSTE.rAbility = CHK_RandomAbilities.Checked; RSTE.rDiffIV = CHK_MaxDiffPKM.Checked; RSTE.rClass = CHK_RandomClass.Checked; if (RSTE.rClass) { RSTE.rIgnoreClass = CHK_IgnoreSpecialClass.Checked ? Main.Config.ORAS ? Legal.SpecialClasses_ORAS : Legal.SpecialClasses_XY : new int[] {}; RSTE.rOnlySingles = CHK_OnlySingles.Checked; } RSTE.rGift = CHK_RandomGift.Checked; RSTE.rGiftPercent = NUD_GiftPercent.Value; RSTE.rDiffAI = CHK_MaxDiffAI.Checked; RSTE.rTypeTheme = CHK_TypeTheme.Checked; RSTE.rTypeGymTrainers = CHK_GymTrainers.Checked; RSTE.rGymE4Only = CHK_GymE4Only.Checked; RSTE.r6PKM = CHK_6PKM.Checked; RSTE.rRandomMegas = CHK_RandomMegaForm.Checked; if (CHK_StoryMEvos.Checked) { RSTE.rEnsureMEvo = Main.Config.ORAS ? new [] { 178, 235, 557, 583, 687, 698, 699, 700, 701, 713, 906, 907, 908, 909, 910, 911, 912, 913, 942, 944, 946 } : new [] { 188, 263, 276, 277, 519, 520, 521, 526, 599, 600, 601 }; } else { RSTE.rEnsureMEvo = new int[] { }; } RSTE.rThemedClasses = new bool[trClass.Length]; if (WinFormsUtil.Prompt(MessageBoxButtons.YesNo, "Randomize all? Cannot undo.", "Double check Randomization settings before continuing.") != DialogResult.Yes) { return; } if (!CHK_IgnoreSpecialClass.Checked) { if (WinFormsUtil.Prompt(MessageBoxButtons.YesNo, "Ignoring Special Trainer Classes has the chance of crashing your game in some battles!", "Continue anyway?") != DialogResult.Yes) { return; } } RSTE.rDoRand = true; Close(); }
private void B_Randomize_Click(object sender, EventArgs e) { WinFormsUtil.Alert("Not currently implemented."); }
private void Update_PBs(object sender, EventArgs e) { if (!loaded) { return; } for (int i = 0; i < checkbox_spec.Length; i++) { CheckBox CB = checkbox_spec[i]; if (CB.Checked) { UpdateImage(picturebox_spec[0][i], entry, 0, WinFormsUtil.GetIndex(item_spec[i]), 0); UpdateImage(picturebox_spec[1][i], entry, forme_spec[i].SelectedIndex, WinFormsUtil.GetIndex(item_spec[i]), 0); } else { UpdateImage(picturebox_spec[0][i], 0, 0, WinFormsUtil.GetIndex(item_spec[i]), 0); UpdateImage(picturebox_spec[1][i], 0, 0, WinFormsUtil.GetIndex(item_spec[i]), 0); } } }
// Script Handling private void B_HLCMD_Click(object sender, EventArgs e) { int ctr = WinFormsUtil.highlightText(RTB_OSP, "**", Color.Red) + WinFormsUtil.highlightText(RTB_MSP, "**", Color.Red) / 2; WinFormsUtil.Alert($"{ctr} instance{(ctr > 1 ? "s" : "")} of \"*\" present."); }
private void changeSpecies(object sender, EventArgs e) { PB_PKM.Image = WinFormsUtil.getSprite(CB_Species.SelectedIndex, (int)NUD_Form.Value, 0, CB_Item.SelectedIndex, Main.Config); }
private void changePrice(object sender, EventArgs e) { MT_Sell.Text = (Math.Min(WinFormsUtil.ToUInt32(MT_Price) / 10, 0x7FFF) * 10 / 2).ToString(); }
private void B_RandAll_Click(object sender, EventArgs e) { if (!CHK_Category.Checked && !CHK_Type.Checked && !CHK_Damage.Checked) { WinFormsUtil.Alert("Cannot randomize Moves.", "Please check any of the options on the right to randomize Moves."); return; } if (WinFormsUtil.Prompt(MessageBoxButtons.YesNo, "Randomize Moves? Cannot undo.", "Double check options on the right before continuing.") != DialogResult.Yes) { return; } Random rnd = Util.rand; for (int i = 0; i < CB_Move.Items.Count; i++) { CB_Move.SelectedIndex = i; // Get new Move if (i == 165 || i == 174) { continue; // Don't change Struggle or Curse } // Change Damage Category if Not Status if (CB_Category.SelectedIndex > 0 && CHK_Category.Checked) // Not Status { CB_Category.SelectedIndex = rnd.Next(1, 3); } // Change Move Type if (CHK_Type.Checked) { CB_Type.SelectedIndex = rnd.Next(0, 18); } // Change Move Power if (CHK_Damage.Checked && CB_Category.SelectedIndex > 0 && NUD_Power.Value >= 10) { if (rnd.Next(0, 3) != 2) { // "Regular" move NUD_Power.Value = rnd.Next(11) * 5 + 50; // 50...100 } else { // "Extreme" move NUD_Power.Value = rnd.Next(27) * 5 + 20; // 20...150 } // Tiny chance for massive power jumps for (int j = 0; j < 2; j++) { if (rnd.Next(100) == 0) { NUD_Power.Value += 50; } } // Handle Multihit moves if (NUD_HitMax.Value > 0) { NUD_Power.Value = (int)Math.Round(NUD_Power.Value / (NUD_HitMax.Value + NUD_HitMin.Value / 2) / 5) * 5; } } } WinFormsUtil.Alert("All Moves have been randomized!"); }
private void B_Randomize_Click(object sender, EventArgs e) { if (WinFormsUtil.Prompt(MessageBoxButtons.YesNo, "Randomize all? Cannot undo.", "Double check Randomization settings in the Horde tab.") != DialogResult.Yes) { return; } Enabled = false; // Calculate % diff we will apply to each level decimal leveldiff = (100 + NUD_LevelAmp.Value) / 100; var rand = new SpeciesRandomizer(Main.Config) { G1 = CHK_G1.Checked, G2 = CHK_G2.Checked, G3 = CHK_G3.Checked, G4 = CHK_G4.Checked, G5 = CHK_G5.Checked, G6 = CHK_G6.Checked, L = CHK_L.Checked, E = CHK_E.Checked, Shedinja = false, rBST = CHK_BST.Checked, }; rand.Initialize(); for (int i = 0; i < CB_LocationID.Items.Count; i++) // for every location { CB_LocationID.SelectedIndex = i; if (!HasData()) { continue; // Don't randomize if doesn't have data. } // Assign Levels if (CHK_Level.Checked) { for (int l = 0; l < All_Max.Length; l++) { All_Min[l].Value = All_Max[l].Value = All_Max[l].Value <= 1 ? All_Max[l].Value : Math.Max(1, Math.Min(100, (int)(leveldiff * All_Max[l].Value))); } } // If Distinct Hordes are selected, homogenize int hordeslot = 0; for (int slot = 0; slot < All_Max.Length; slot++) { if (All_Species[slot].SelectedIndex == 0) { continue; } if (CHK_HomogeneousHordes.Checked && slot >= All_Max.Length - 15) { int shift = hordeslot % 5; hordeslot++; if (shift != 0) { All_Species[slot].SelectedIndex = All_Species[slot - shift].SelectedIndex; All_Form[slot].Value = All_Form[slot - shift].Value; continue; } } int species = rand.GetRandomSpecies(All_Species[slot].SelectedIndex); All_Species[slot].SelectedIndex = species; SetRandomForm(slot, species); } B_Save_Click(sender, e); } Enabled = true; WinFormsUtil.Alert("Randomized all Wild Encounters according to specification!", "Press the Dump Tables button to view the new Wild Encounter information!"); }