public void EditItems() { var obj = ROM[GameFile.ItemStats]; // mini var data = obj[0]; var items = Item8.GetArray(data); var cache = new DataCache <Item8>(items); using var form = new GenericEditor <Item8>(cache, ROM.GetStrings(TextName.ItemNames), "Item Editor", Randomize); form.ShowDialog(); if (!form.Modified) { cache.CancelEdits(); return; } void Randomize() { var tradeEvos = new[] { 221, 226, 227, 233, 235, 252, 321, 322, 323, 324, 325, 573, 646, 647 }; foreach (var item in items) { if (item.ItemSprite == -1 || !tradeEvos.Contains(item.ItemID)) { continue; } item.Boost0 = 8; // evo stone item.EffectField = 6; // use effect item.CanUseOnPokemon = true; } } obj[0] = Item8.SetArray(items, data); }
public void EditSymbolBehave() { bool altRand = Control.ModifierKeys == Keys.Alt; var obj = ROM.GetFile(GameFile.SymbolBehave); var data = obj[0]; var root = FlatBufferConverter.DeserializeFrom <SymbolBehaveRoot>(data); var cache = new DataCache <SymbolBehave>(root.Table); var names = root.Table.Select(z => $"{z.Species}{(z.Form != 0 ? $"-{z.Form}" : "")}").ToArray(); using var form = new GenericEditor <SymbolBehave>(cache, names, "Symbol Behavior Editor", Randomize); form.ShowDialog(); if (!form.Modified) { return; } obj[0] = FlatBufferConverter.SerializeFrom(root); void Randomize() { var mode = altRand ? "WaterDash" // Sharpedo dash homing -- good luck running! : "Anawohoru"; // Diglett - Disappear when approached, pop out elsewhere foreach (var t in root.Table) { t.Behavior = mode; } } }
public static LayerBase DrawExpandedGUI(TerrainWrapper wrapper, LayerBase layer) { if (layer == null) { return(null); } //var deltaLayer = layer as DeltaLayer; var MMTerrainLayer = layer as MMTerrainLayer; var procLayer = layer as ProceduralLayer; EditorGUILayout.BeginVertical("Box"); EditorGUI.indentLevel++; if (MMTerrainLayer != null) { layer = DrawExpandedGUI(wrapper, MMTerrainLayer); } else if (procLayer != null) { GenericEditor.DrawGUI(procLayer.Components, "Components", typeof(List <ProceduralLayerComponent>), typeof(ProceduralLayer).GetField("Components"), procLayer); } else { EditorGUILayout.HelpBox(string.Format("Attempting to draw GUI for {0}, but type {1} is not implemented", layer.name, layer.GetType()), MessageType.Info); } EditorGUI.indentLevel--; EditorGUILayout.EndVertical(); return(layer); }
public void EditGift() { var file = ROM[GameFile.EncounterGift]; var data = file[0]; var objs = data.GetArray(z => new EncounterGift7b(z), EncounterGift7b.SIZE); // binary var names = Enumerable.Range(0, objs.Length).Select(z => $"{z:00}").ToArray(); var cache = new DirectCache <EncounterGift7b>(objs); void Randomize() { var spec = EditUtil.Settings.Species; spec.Gen2 = spec.Gen3 = spec.Gen4 = spec.Gen5 = spec.Gen6 = spec.Gen7 = false; var srand = new SpeciesRandomizer(ROM.Info, ROM.Data.PersonalData); srand.Initialize(spec); foreach (var t in objs) { t.Species = srand.GetRandomSpecies(t.Species); t.Form = Legal.GetRandomForme(t.Species, false, true, ROM.Data.PersonalData); } } var form = new GenericEditor <EncounterGift7b>(cache, names, "Gift Editor", Randomize); form.ShowDialog(); if (!form.Modified) { file.CancelEdits(); } else { file[0] = objs.SelectMany(z => z.Write()).ToArray(); } }
public void EditRaidRewards() { IFileContainer fp = ROM.GetFile(GameFile.NestData); var data_table = new GFPack(fp[0]); const string nest = "nest_hole_drop_rewards.bin"; byte[] originalData = data_table.GetDataFileName(nest); var nest_drops = FlatBufferConverter.DeserializeFrom <NestHoleReward8Archive>(originalData); var arr = nest_drops.Tables; var cache = new DataCache <NestHoleReward8Table>(arr); var names = arr.Select((z, i) => $"{z.TableID}").ToArray(); using var form = new GenericEditor <NestHoleReward8Table>(cache, names, "Raid Rewards"); form.ShowDialog(); if (!form.Modified) { return; } var data = FlatBufferConverter.SerializeFrom(nest_drops); data_table.SetDataFileName(nest, data); fp[0] = data_table.Write(); }
public void EditRBonusRewards() { IFileContainer fp = ROM.GetFile(GameFile.NestData); var data_table = new GFPack(fp[0]); const string nest = "nest_hole_bonus_rewards.bin"; var nest_bonus = FlatBufferConverter.DeserializeFrom <NestHoleReward8Archive>(data_table.GetDataFileName(nest)); var arr = nest_bonus.Table; var cache = new DataCache <NestHoleReward8Table>(arr); var names = arr.Select(z => $"{z.TableID}").ToArray(); void Randomize() { int[] PossibleHeldItems = Legal.GetRandomItemList(ROM.Info.Game); foreach (var t in arr) { foreach (var i in t.Entries) { i.ItemID = (uint)PossibleHeldItems[Randomization.Util.Random.Next(PossibleHeldItems.Length)]; } } } using var form = new GenericEditor <NestHoleReward8Table>(cache, names, "Raid Bonus Rewards Editor", Randomize); form.ShowDialog(); if (!form.Modified) { return; } var data = FlatBufferConverter.SerializeFrom(nest_bonus); data_table.SetDataFileName(nest, data); fp[0] = data_table.Write(); }
public void EditTrade() { var arc = ROM.GetFile(GameFile.EncounterTrade); var data = arc[0]; var objs = FlatBufferConverter.DeserializeFrom <EncounterTrade8Archive>(data); var trades = objs.Table; var names = Enumerable.Range(0, trades.Length).Select(z => $"{z:000}").ToArray(); var cache = new DirectCache <EncounterTrade8>(trades); void Randomize() { int[] PossibleHeldItems = Legal.GetRandomItemList(ROM.Game); var pt = ROM.Data.PersonalData; int[] ban = pt.Table.Take(ROM.Info.MaxSpeciesID + 1) .Select((z, i) => new { Species = i, Present = ((PersonalInfoSWSH)z).IsPresentInGame }) .Where(z => !z.Present).Select(z => z.Species).ToArray(); var spec = EditUtil.Settings.Species; var srand = new SpeciesRandomizer(ROM.Info, ROM.Data.PersonalData); var frand = new FormRandomizer(ROM.Data.PersonalData); srand.Initialize(spec, ban); foreach (var t in trades) { // what you receive t.Species = srand.GetRandomSpecies(t.Species); t.Form = (byte)frand.GetRandomForme(t.Species, false, false, true, true, ROM.Data.PersonalData.Table); t.AbilityNumber = (byte)Randomization.Util.Random.Next(1, 4); // 1, 2, or H t.Ball = (Ball)Randomization.Util.Random.Next(1, EncounterTrade8.BallToItem.Length); t.HeldItem = PossibleHeldItems[Randomization.Util.Random.Next(PossibleHeldItems.Length)]; t.Nature = (int)Nature.Random25; t.Gender = (int)FixedGender.Random; t.ShinyLock = (int)Shiny.Random; t.Relearn1 = 0; if (t.IV_HP != -4 && t.IVs.Any(z => z != 31)) { t.IVs = new[] { -1, -1, -1, -1, -1, -1 } } ; // what you trade t.RequiredSpecies = srand.GetRandomSpecies(t.RequiredSpecies); t.RequiredForm = (byte)frand.GetRandomForme(t.RequiredSpecies, false, false, true, true, ROM.Data.PersonalData.Table); t.RequiredNature = (int)Nature.Random25; // any } } using var form = new GenericEditor <EncounterTrade8>(cache, names, "In-Game Trades Editor", Randomize); form.ShowDialog(); if (!form.Modified) { arc.CancelEdits(); } else { arc[0] = FlatBufferConverter.SerializeFrom(objs); } }
private bool PopEdit <T>(T[] data, string title, string[] names) where T : class { var cache = new DirectCache <T>(data); using var form = new GenericEditor <T>(cache, names, title); form.ShowDialog(); return(form.Modified); }
private static bool PopFlat <T2>(T2[] arr, string title, Func <T2, string> getName, Action?rand = null, bool canSave = true) where T2 : class { var names = arr.Select(getName).ToArray(); var cache = new DataCache <T2>(arr); using var form = new GenericEditor <T2>(cache, names, title, randomize: rand, canSave: canSave); form.ShowDialog(); return(form.Modified); }
public void EditStatic() { var arc = ROM.GetFile(GameFile.EncounterStatic); var data = arc[0]; var objs = FlatBufferConverter.DeserializeFrom <EncounterStatic8Archive>(data); var encounters = objs.Table; var names = Enumerable.Range(0, encounters.Length).Select(z => $"{z:000}").ToArray(); var cache = new DirectCache <EncounterStatic8>(encounters); void Randomize() { int[] PossibleHeldItems = Legal.GetRandomItemList(ROM.Game); var pt = ROM.Data.PersonalData; int[] ban = pt.Table.Take(ROM.Info.MaxSpeciesID + 1) .Select((z, i) => new { Species = i, Present = ((PersonalInfoSWSH)z).IsPresentInGame }) .Where(z => !z.Present).Select(z => z.Species).ToArray(); var spec = EditUtil.Settings.Species; var srand = new SpeciesRandomizer(ROM.Info, ROM.Data.PersonalData); var frand = new FormRandomizer(ROM.Data.PersonalData); srand.Initialize(spec, ban); foreach (var t in encounters) { if (t.Species >= (int)Species.Zacian && t.Species <= (int)Species.Eternatus) // Eternatus crashes when changed, keep Zacian and Zamazenta to make final boss battle fair { continue; } t.Species = srand.GetRandomSpecies(t.Species); t.Form = (byte)frand.GetRandomForme(t.Species, false, false, true, true, ROM.Data.PersonalData.Table); t.Ability = Randomization.Util.Random.Next(1, 4); // 1, 2, or H t.HeldItem = PossibleHeldItems[Randomization.Util.Random.Next(PossibleHeldItems.Length)]; t.Nature = (int)Nature.Random25; t.Gender = (int)FixedGender.Random; t.ShinyLock = (int)Shiny.Random; t.Moves = new[] { 0, 0, 0, 0 }; if (t.IV_HP != -4 && t.IVs.Any(z => z != 31)) { t.IVs = new[] { -1, -1, -1, -1, -1, -1 } } ; } } using var form = new GenericEditor <EncounterStatic8>(cache, names, "Static Encounter Editor", Randomize); form.ShowDialog(); if (!form.Modified) { arc.CancelEdits(); } else { arc[0] = FlatBufferConverter.SerializeFrom(objs); } }
public override void OnInspectorGUI() { var listener = target as Listener; if (Application.isPlaying) { EditorGUILayout.LabelField("Strength: " + listener.Strength); } GenericEditor.DrawGUI(target); }
public void EditRaids() { IFileContainer fp = ROM.GetFile(GameFile.NestData); var data_table = new GFPack(fp[0]); const string nest = "nest_hole_encount.bin"; var nest_encounts = FlatBufferConverter.DeserializeFrom <EncounterNest8Archive>(data_table.GetDataFileName(nest)); var arr = nest_encounts.Table; var cache = new DataCache <EncounterNest8Table>(arr); var games = new[] { "Sword", "Shield" }; var names = arr.Select((z, i) => $"{games[z.GameVersion - 1]} - {i / 2}").ToArray(); void Randomize() { var pt = ROM.Data.PersonalData; int[] ban = pt.Table.Take(ROM.Info.MaxSpeciesID + 1) .Select((z, i) => new { Species = i, Present = ((PersonalInfoSWSH)z).IsPresentInGame }) .Where(z => !z.Present).Select(z => z.Species).ToArray(); var spec = EditUtil.Settings.Species; var srand = new SpeciesRandomizer(ROM.Info, ROM.Data.PersonalData); var frand = new FormRandomizer(ROM.Data.PersonalData); srand.Initialize(spec, ban); foreach (var t in arr) { foreach (var p in t.Entries) { p.Species = srand.GetRandomSpecies(p.Species); p.Form = frand.GetRandomForme(p.Species, false, false, true, true, ROM.Data.PersonalData.Table); p.Ability = 4; // "A4" -- 1, 2, or H p.Gender = 0; // random p.IsGigantamax = false; // don't allow gmax flag on non-gmax species } } } using var form = new GenericEditor <EncounterNest8Table>(cache, names, "Max Raid Battles Editor", Randomize); form.ShowDialog(); if (!form.Modified) { return; } var data = FlatBufferConverter.SerializeFrom(nest_encounts); data_table.SetDataFileName(nest, data); fp[0] = data_table.Write(); }
public void EditTrade() { var file = ROM[GameFile.EncounterTrade]; var data = file[0]; var objs = data.GetArray(z => new EncounterTrade7b(z), EncounterTrade7b.SIZE); // binary var names = Enumerable.Range(0, objs.Length).Select(z => $"{z:000}").ToArray(); var cache = new DirectCache <EncounterTrade7b>(objs); void Randomize() { var spec = EditUtil.Settings.Species; spec.Gen2 = spec.Gen3 = spec.Gen4 = spec.Gen5 = spec.Gen6 = spec.Gen7 = false; var srand = new SpeciesRandomizer(ROM.Info, Data.PersonalData); var frand = new FormRandomizer(Data.PersonalData); srand.Initialize(spec, 808, 809); // can only catch 1-151 in wild foreach (var t in objs) { t.Species = (Species)srand.GetRandomSpecies((int)t.Species); t.RequiredSpecies = (Species)srand.GetRandomSpecies((int)t.Species); t.Form = frand.GetRandomForme((int)t.Species, false, false, true, false, Data.PersonalData.Table); t.RequiredForm = 0; // can't catch wild alolan forms t.Nature = Nature.Random - 1; t.Gender = FixedGender.Random; t.Shiny = Shiny.Random; t.RelearnMoves = new[] { 0, 0, 0, 0 }; if (t.IV_HP != -4) { t.IVs = new[] { -1, -1, -1, -1, -1, -1 } } ; } } using var form = new GenericEditor <EncounterTrade7b>(cache, names, "Trade Editor", Randomize); form.ShowDialog(); if (!form.Modified) { file.CancelEdits(); } else { file[0] = objs.SelectMany(z => z.Write()).ToArray(); } }
public void EditRental() { var obj = ROM[GameFile.Rentals]; var data = obj[0]; var rentals = FlatBufferConverter.DeserializeFrom <Rental8Archive>(data); var cache = new DataCache <Rental8>(rentals.Table); var names = rentals.Table.Select((z, i) => $"{i:000} {z.Hash1:X16}").ToArray(); using var form = new GenericEditor <Rental8>(cache, names, "Rental Editor"); form.ShowDialog(); if (!form.Modified) { cache.CancelEdits(); return; } obj[0] = FlatBufferConverter.SerializeFrom(rentals); }
public void EditPlacement() { var arc = ROM.GetFile(GameFile.Placement); var placement = new GFPack(arc[0]); var area_names = new AHTB(placement.GetDataFileName("AreaNameHashTable.tbl")).ToDictionary(); List <PlacementArea8Archive> areas = new(); List <string> names = new(); foreach (var area in area_names) { var areaName = area.Value; var fileName = $"{areaName}.bin"; if (placement.GetIndexFileName(fileName) < 0) { continue; } var bin = placement.GetDataFileName(fileName); var data = FlatBufferConverter.DeserializeFrom <PlacementArea8Archive>(bin); names.Add(fileName); areas.Add(data); } var arr = areas.ToArray(); var nameArr = names.ToArray(); var cache = new DataCache <PlacementArea8Archive>(arr); var form = new GenericEditor <PlacementArea8Archive>(cache, nameArr, "Placement", canSave: true); form.ShowDialog(); if (!form.Modified) { return; } // Stuff files back into the gfpak and save for (int i = 0; i < arr.Length; i++) { var obj = arr[i]; var bin = FlatBufferConverter.SerializeFrom(obj); placement.SetDataFileName(nameArr[i], bin); } arc[0] = placement.Write(); }
public void EditTrainers() { var folder = ROM.GetFilteredFolder(GameFile.TrainerData); var cache = new DataCache <TrData8a>(folder) { Create = FlatBufferConverter.DeserializeFrom <TrData8a>, Write = FlatBufferConverter.SerializeFrom, }; var names = folder.GetPaths().Select(Path.GetFileNameWithoutExtension).ToArray(); using var form = new GenericEditor <TrData8a>(cache, names, "Trainers", Randomize, canSave: true); form.ShowDialog(); void Randomize() { var settings = EditUtil.Settings.Species; var rand = new SpeciesRandomizer(ROM.Info, Data.PersonalData); rand.Initialize(settings, GetSpeciesBanlist()); for (int i = 0; i < cache.Length; i++) { foreach (var t in cache[i].Team) { t.Species = rand.GetRandomSpecies(t.Species); t.Form = GetRandomForm(t.Species); t.Gender = (int)FixedGender.Random; t.Nature = NatureType8a.Random; t.Move_01.Move = t.Move_02.Move = t.Move_03.Move = t.Move_04.Move = 0; t.Move_01.Mastered = t.Move_02.Mastered = t.Move_03.Mastered = t.Move_04.Mastered = true; t.Shiny = Randomization.Util.Random.Next(0, 100 + 1) < 3; t.IsOybn = Randomization.Util.Random.Next(0, 100 + 1) < 3; } } } if (!form.Modified) { cache.CancelEdits(); } else { cache.Save(); } }
public void EditStatic() { var file = ROM[GameFile.EncounterStatic]; var data = file[0]; var objs = data.GetArray(z => new EncounterStatic7b(z), EncounterStatic7b.SIZE); // binary var names = Enumerable.Range(0, objs.Length).Select(z => $"{z:000}").ToArray(); var cache = new DirectCache <EncounterStatic7b>(objs); void Randomize() { var spec = EditUtil.Settings.Species; spec.Gen2 = spec.Gen3 = spec.Gen4 = spec.Gen5 = spec.Gen6 = spec.Gen7 = false; var srand = new SpeciesRandomizer(ROM.Info, Data.PersonalData); var frand = new FormRandomizer(Data.PersonalData); srand.Initialize(spec); for (int i = 2; i < objs.Length; i++) // skip starters { var t = objs[i]; t.Species = (Species)srand.GetRandomSpecies((int)t.Species); t.Form = frand.GetRandomForme((int)t.Species, false, false, true, false, Data.PersonalData.Table); t.Nature = Nature.Random25; t.Gender = FixedGender.Random; t.Shiny = Shiny.Random; t.RelearnMoves = new[] { 0, 0, 0, 0 }; if (t.IV_HP != -4) { t.IVs = new[] { -1, -1, -1, -1, -1, -1 } } ; } } using var form = new GenericEditor <EncounterStatic7b>(cache, names, "Static Encounter Editor", Randomize); form.ShowDialog(); if (!form.Modified) { file.CancelEdits(); } else { file[0] = objs.SelectMany(z => z.Write()).ToArray(); } }
public void EditDynamaxAdv() { var arc = ROM.GetFile(GameFile.DynamaxDens); var data = arc[0]; var objs = FlatBufferConverter.DeserializeFrom <EncounterUnderground8Archive>(data); var table = objs.Table; var names = Enumerable.Range(0, table.Length).Select(z => $"{z:000}").ToArray(); var cache = new DirectCache <EncounterUnderground8>(table); void Randomize() { var pt = ROM.Data.PersonalData; int[] ban = pt.Table.Take(ROM.Info.MaxSpeciesID + 1) .Select((z, i) => new { Species = i, Present = ((PersonalInfoSWSH)z).IsPresentInGame }) .Where(z => !z.Present).Select(z => z.Species).ToArray(); var spec = EditUtil.Settings.Species; var srand = new SpeciesRandomizer(ROM.Info, ROM.Data.PersonalData); var frand = new FormRandomizer(ROM.Data.PersonalData); srand.Initialize(spec, ban); foreach (var t in table) { // what you receive t.Species = srand.GetRandomSpecies(t.Species); t.Form = (byte)frand.GetRandomForme(t.Species, false, false, true, true, ROM.Data.PersonalData.Table); t.Ability = (uint)Randomization.Util.Random.Next(1, 4); // 1, 2, or H t.Move0 = t.Move1 = t.Move2 = t.Move3 = 0; } } using var form = new GenericEditor <EncounterUnderground8>(cache, names, "Dynamax Adventures Encounter Editor", Randomize); form.ShowDialog(); if (!form.Modified) { arc.CancelEdits(); } else { arc[0] = FlatBufferConverter.SerializeFrom(objs); } }
public void EditMoves() { var obj = ROM[GameFile.MoveStats]; // mini var cache = new DataCache <Waza8>(obj) { Create = FlatBufferConverter.DeserializeFrom <Waza8>, Write = FlatBufferConverter.SerializeFrom, }; using var form = new GenericEditor <Waza8>(cache, ROM.GetStrings(TextName.MoveNames), "Move Editor"); form.ShowDialog(); if (!form.Modified) { cache.CancelEdits(); return; } cache.Save(); ROM.Data.MoveData.ClearAll(); // force reload if used again }
public void EditItems() { var obj = ROM.GetFilteredFolder(GameFile.ItemStats, z => new FileInfo(z).Length == 36); var cache = new DataCache <Item>(obj) { Create = Item.FromBytes, Write = item => item.Write(), }; using var form = new GenericEditor <Item>(cache, ROM.GetStrings(TextName.ItemNames), "Item Editor"); form.ShowDialog(); if (!form.Modified) { cache.CancelEdits(); } else { cache.Save(); } }
public void EditMoves() { var obj = ROM[GameFile.MoveStats]; // mini var cache = new DataCache <Move7>(obj) { Create = data => new Move7(data), Write = move => move.Write(), }; using var form = new GenericEditor <Move7>(cache, ROM.GetStrings(TextName.MoveNames), "Move Editor"); form.ShowDialog(); if (!form.Modified) { cache.CancelEdits(); } else { cache.Save(); } }
public void EditRaid() { IFileContainer fp = ROM.GetFile(GameFile.NestData); var data_table = new GFPack(fp[0]); const string nest = "nest_hole_encount.bin"; var nest_encounts = FlatBufferConverter.DeserializeFrom <EncounterNest8Archive>(data_table.GetDataFileName(nest)); var arr = nest_encounts.Tables; var cache = new DataCache <EncounterNest8Table>(arr); var games = new[] { "Sword", "Shield" }; var names = arr.Select((z, i) => $"{games[z.GameVersion - 1]} - {i / 2}").ToArray(); using var form = new GenericEditor <EncounterNest8Table>(cache, names, "Raid Encounters"); form.ShowDialog(); if (!form.Modified) { return; } var data = FlatBufferConverter.SerializeFrom(nest_encounts); data_table.SetDataFileName(nest, data); fp[0] = data_table.Write(); }
public void edit() { if (Broker.get_instance().active_calls != 0) { MessageBoxResult mres = MessageBox.Show("Warning editing sofia settings will cause sofia to restart and will drop any active calls, do you want to continue?", "Restart Warning", MessageBoxButton.YesNo); if (mres != MessageBoxResult.Yes) return; } GenericEditor editor = new GenericEditor(); editor.Init("Editing Sofia Settings", values); editor.ShowDialog(); if (editor.DialogResult == true) { if (master_profile_ok) reload_config(RELOAD_CONFIG_MODE.HARD); else reload_config(RELOAD_CONFIG_MODE.MODULE); } }
void OnEnable() { editor = new GenericEditor(); editor.InitTextures(); }
private void EditShop(bool shop2) { var arc = ROM.GetFile(GameFile.Shops); var data = arc[0]; int[] PossibleHeldItems = Legal.GetRandomItemList(ROM.Game); var shop = FlatBufferConverter.DeserializeFrom <ShopInventory>(data); if (!shop2) { var table = shop.Shop1; var names = table.Select((z, _) => $"{(z.LGPE.TryGetValue(z.Hash, out var shopName) ? shopName : z.Hash.ToString("X"))}").ToArray(); var cache = new DirectCache <Shop1>(table); using var form = new GenericEditor <Shop1>(cache, names, $"{nameof(Shop1)} Editor", Randomize); form.ShowDialog(); if (!form.Modified) { arc.CancelEdits(); return; } void Randomize() { for (int s = 1; s < table.Length; s++) // skip first table with TMs (unobtainable otherwise) { var shopDefinition = table[s]; var items = shopDefinition.Inventory.Items; for (int i = 0; i < items.Length; i++) { items[i] = PossibleHeldItems[Randomization.Util.Random.Next(PossibleHeldItems.Length)]; } } } } else { var table = shop.Shop2; var names = table.Select((z, _) => $"{(z.LGPE.TryGetValue(z.Hash, out var shopName) ? shopName : z.Hash.ToString("X"))}").ToArray(); var cache = new DirectCache <Shop2>(table); using var form = new GenericEditor <Shop2>(cache, names, $"{nameof(Shop2)} Editor", Randomize); form.ShowDialog(); if (!form.Modified) { arc.CancelEdits(); return; } void Randomize() { foreach (var shopDefinition in table) { foreach (var inv in shopDefinition.Inventories) { var items = inv.Items; for (int i = 0; i < items.Length; i++) { items[i] = PossibleHeldItems[Randomization.Util.Random.Next(PossibleHeldItems.Length)]; } } } } } arc[0] = FlatBufferConverter.SerializeFrom(shop); }
public void EditGift() { var arc = ROM.GetFile(GameFile.EncounterGift); var data = arc[0]; var objs = FlatBufferConverter.DeserializeFrom <EncounterGift8Archive>(data); var gifts = objs.Table; var names = Enumerable.Range(0, gifts.Length).Select(z => $"{z:000}").ToArray(); var cache = new DirectCache <EncounterGift8>(gifts); void Randomize() { int[] PossibleHeldItems = Legal.GetRandomItemList(ROM.Game); var pt = ROM.Data.PersonalData; int[] ban = pt.Table.Take(ROM.Info.MaxSpeciesID + 1) .Select((z, i) => new { Species = i, Present = ((PersonalInfoSWSH)z).IsPresentInGame }) .Where(z => !z.Present).Select(z => z.Species).ToArray(); var spec = EditUtil.Settings.Species; var srand = new SpeciesRandomizer(ROM.Info, ROM.Data.PersonalData); var frand = new FormRandomizer(ROM.Data.PersonalData); srand.Initialize(spec, ban); foreach (var t in gifts) { // swap gmax gifts and kubfu for other gmax capable species if (t.CanGigantamax || t.Species == Species.Kubfu) { t.Species = (Species)Legal.GigantamaxForms[Randomization.Util.Random.Next(Legal.GigantamaxForms.Length)]; t.AltForm = t.Species == Species.Pikachu || t.Species == Species.Meowth ? 0 : frand.GetRandomForme((int)t.Species, false, false, false, false, ROM.Data.PersonalData.Table); // Pikachu & Meowth altforms can't gmax } else { t.Species = (Species)srand.GetRandomSpecies((int)t.Species); t.AltForm = frand.GetRandomForme((int)t.Species, false, false, true, true, ROM.Data.PersonalData.Table); } t.Ability = Randomization.Util.Random.Next(1, 4); // 1, 2, or H t.Ball = (Ball)Randomization.Util.Random.Next(1, 15); // packed bit, only allows for 15 balls t.HeldItem = PossibleHeldItems[Randomization.Util.Random.Next(PossibleHeldItems.Length)]; t.Nature = Nature.Random25; t.Gender = FixedGender.Random; t.ShinyLock = Shiny.Random; if (t.IV_Hp != -4) { t.IV_Hp = t.IV_Atk = t.IV_Def = t.IV_SpAtk = t.IV_SpDef = t.IV_Spe = -1; } } } using var form = new GenericEditor <EncounterGift8>(cache, names, "Gift Pokémon Editor", Randomize); form.ShowDialog(); if (!form.Modified) { arc.CancelEdits(); } else { arc[0] = FlatBufferConverter.SerializeFrom(objs); } }
public void EditGift() { var arc = ROM.GetFile(GameFile.EncounterGift); var data = arc[0]; var objs = FlatBufferConverter.DeserializeFrom <EncounterGift8Archive>(data); var gifts = objs.Table; var names = Enumerable.Range(0, gifts.Length).Select(z => $"{z:000}").ToArray(); var cache = new DirectCache <EncounterGift8>(gifts); void Randomize() { int[] PossibleHeldItems = Legal.GetRandomItemList(ROM.Game); var pt = ROM.Data.PersonalData; int[] ban = pt.Table.Take(ROM.Info.MaxSpeciesID + 1) .Select((z, i) => new { Species = i, Present = ((PersonalInfoSWSH)z).IsPresentInGame }) .Where(z => !z.Present).Select(z => z.Species).ToArray(); var spec = EditUtil.Settings.Species; var srand = new SpeciesRandomizer(ROM.Info, ROM.Data.PersonalData); var frand = new FormRandomizer(ROM.Data.PersonalData); srand.Initialize(spec, ban); foreach (var t in gifts) { // swap gmax gifts and kubfu for other gmax capable species if (t.CanGigantamax || t.Species == (int)Species.Kubfu) { t.Species = Legal.GigantamaxForms[Randomization.Util.Random.Next(Legal.GigantamaxForms.Length)]; t.Form = (byte)(t.Species == (int)Species.Pikachu || t.Species == (int)Species.Meowth ? 0 : frand.GetRandomForme(t.Species, false, false, false, false, ROM.Data.PersonalData.Table)); // Pikachu & Meowth altforms can't gmax } else { t.Species = srand.GetRandomSpecies(t.Species); t.Form = (byte)frand.GetRandomForme(t.Species, false, false, true, true, ROM.Data.PersonalData.Table); } t.Ability = Randomization.Util.Random.Next(1, 4); // 1, 2, or H t.Ball = (Ball)Randomization.Util.Random.Next(1, EncounterGift8.BallToItem.Length); t.HeldItem = PossibleHeldItems[Randomization.Util.Random.Next(PossibleHeldItems.Length)]; t.Nature = (int)Nature.Random25; t.Gender = (byte)FixedGender.Random; t.ShinyLock = (int)Shiny.Random; if (t.IV_HP != -4 && t.IVs.Any(z => z != 31)) { t.IVs = new[] { -1, -1, -1, -1, -1, -1 } } ; } UpdateStarters(); // update placement critter data to match new randomized species } void UpdateStarters() { var container = ROM.GetFile(GameFile.Placement); var placement = new GFPack(container[0]); // a_r0501_i0101.bin for Toxel // a_bt0101.bin for Type: Null // a_wr0201_i0101.bin for Bulbasaur, Squirtle, Porygon, and Kubfu // a_wr0301_i0401.bin for Cosmog // a_d0901.bin for Poipole const string file = "a_0101.bin"; var table = placement.GetDataFileName(file); var obj = FlatBufferConverter.DeserializeFrom <PlacementArea8Archive>(table); var critters = obj.Table[0].Critters; // Grookey critters[3].Species = (uint)gifts[0].Species; critters[3].Form = gifts[0].Form; // Scorbunny critters[1].Species = (uint)gifts[3].Species; critters[1].Form = gifts[3].Form; // Sobble critters[2].Species = (uint)gifts[4].Species; critters[2].Form = gifts[4].Form; var bin = FlatBufferConverter.SerializeFrom(obj); placement.SetDataFileName(file, bin); container[0] = placement.Write(); } using var form = new GenericEditor <EncounterGift8>(cache, names, "Gift Pokémon Editor", Randomize); form.ShowDialog(); if (!form.Modified) { arc.CancelEdits(); } else { arc[0] = FlatBufferConverter.SerializeFrom(objs); } }
protected virtual void OnExpandedGUI(WorldStampCreator parent) { GenericEditor.DrawGUI(this); }
public override void OnInspectorGUI() { GenericEditor.DrawGUI(target); }
public override string ToString() { return(GenericEditor.GetFriendlyName(GetType().DeclaringType)); }