Fix map viewer

Closes #336 -- BinarySearchByFlatBufferKey only works if the array is sorted... nice job gamefreak with O(n) search instead of O(logn).
Closes #351 via previous commit for fbs defaults.
This commit is contained in:
Kurt 2025-01-29 00:50:55 -06:00
parent 377f3ae6f5
commit a3f53c3a63
3 changed files with 9 additions and 6 deletions

View File

@ -1,5 +1,4 @@
using System.ComponentModel;
using FlatSharp;
// ReSharper disable UnusedAutoPropertyAccessor.Global
// ReSharper disable ClassNeverInstantiated.Global
@ -20,7 +19,7 @@ public partial class PlacementZoneStaticObjectSpawn
{
public IEnumerable<string> GetSummary(IList<EncounterStatic> statics, IReadOnlyList<string> species)
{
var enc = statics.BinarySearchByFlatBufferKey(SpawnID)!;
var enc = statics.First(z => z.EncounterID == SpawnID);
var index = statics.IndexOf(enc);
yield return $"{species[enc.Species]}{(enc.Form == 0 ? string.Empty : "-" + enc.Form)} Lv. {enc.Level}";
yield return $"Index: {index}";

View File

@ -440,6 +440,7 @@ public void DumpWilds()
var allUnown = new List<PlacementUnnnEntry>();
var allMkrg = new List<PlacementMkrgEntry>();
var allSearchItem = new List<PlacementSearchItem>();
var allEncounters = new List<EncounterTable>();
foreach (var areaNameList in ResidentAreaSet.AreaNames)
{
var instance = AreaInstance.Create(resident, areaNameList, settings);
@ -472,6 +473,7 @@ public void DumpWilds()
allUnown.AddRange(instance.Unown);
allMkrg.AddRange(instance.Mikaruge);
allSearchItem.AddRange(instance.SearchItem);
allEncounters.AddRange(instance.Encounters);
foreach (var subArea in instance.SubAreas)
{
@ -484,6 +486,7 @@ public void DumpWilds()
allUnown.AddRange(subArea.Unown);
allMkrg.AddRange(subArea.Mikaruge);
allSearchItem.AddRange(subArea.SearchItem);
allEncounters.AddRange(subArea.Encounters);
}
}
@ -493,6 +496,7 @@ public void DumpWilds()
File.WriteAllLines(GetPath(wild, "Unown_All.txt"), allUnownLines);
File.WriteAllLines(GetPath(wild, $"Unown_All_Bias_{bias}.txt"), allUnownLinesBias);
File.WriteAllText(GetPath(wild, "allEncounters.csv"), TableUtil.GetTable(allEncounters));
File.WriteAllText(GetPath(wild, "allMultipliers.csv"), TableUtil.GetTable(multipliers.Table));
File.WriteAllText(GetPath(wild, "PokeMisc.csv"), TableUtil.GetTable(misc.Table));
File.WriteAllText(GetPath(wild, "allSlotTable.csv"), TableUtil.GetTable(allSlots));

View File

@ -164,7 +164,7 @@ private static List<AreaDef> GetSpawnerInfo(int species, AreaInstance area)
foreach (var s in area.Spawners.Concat(area.SubAreas.SelectMany(z => z.Spawners)))
{
var table = s.Field20Value.EncounterTableID;
var slots = area.Encounters.BinarySearchByFlatBufferKey(table);
var slots = area.Encounters.FirstOrDefault(z => z.TableID == table);
if (slots == null)
continue;
@ -177,7 +177,7 @@ private static List<AreaDef> GetSpawnerInfo(int species, AreaInstance area)
foreach (var s in area.Wormholes.Concat(area.SubAreas.SelectMany(z => z.Wormholes)))
{
var table = s.Field20Value.EncounterTableID;
var slots = area.Encounters.BinarySearchByFlatBufferKey(table);
var slots = area.Encounters.FirstOrDefault(z => z.TableID == table);
if (slots == null)
continue;
@ -195,7 +195,7 @@ private static List<AreaDef> GetSpawnerInfo(int species, AreaInstance area)
if (l.LandmarkItemSpawnTableID != table)
continue;
var st = l.EncounterTableID;
var slots = area.Encounters.BinarySearchByFlatBufferKey(st);
var slots = area.Encounters.FirstOrDefault(z => z.TableID == st);
if (slots == null)
continue;
@ -212,7 +212,7 @@ private static List<AreaDef> GetSpawnerInfo(int species, AreaInstance area)
foreach (var u in area.Unown.Concat(area.SubAreas.SelectMany(z => z.Unown)))
{
var slots = Unown;
result.Add(new("Unown", 1, 1, u.Parameters.Coordinates, SpawnerType.Unown, slots, u.Number * 2));
result.Add(new("Unown", 1, 1, u.Parameters.Coordinates, SpawnerType.Unown, slots, u.Number * 2)); // arbitrary size
}
return result;