pk3DS/pk3DS.WinForms/Subforms/Gen7/Wild/Wild7Randomizer.cs
2024-06-02 18:30:56 -05:00

88 lines
2.7 KiB
C#

using System.Collections.Generic;
using System.Linq;
using pk3DS.Core;
using pk3DS.Core.Randomizers;
namespace pk3DS.WinForms;
public class Wild7Randomizer
{
public SpeciesRandomizer RandSpec { private get; set; }
public FormRandomizer RandForm { private get; set; }
public int TableRandomizationOption { private get; set; }
public decimal LevelAmplifier { private get; set; }
public bool ModifyLevel { private get; set; }
private void RandomizeTable7(EncounterTable Table, int slotStart, int slotStop)
{
int end = slotStop < 0 ? Table.Encounter7s.Length : slotStop;
for (int s = slotStart; s < end; s++)
{
var EncounterSet = Table.Encounter7s[s];
foreach (var enc in EncounterSet.Where(enc => enc.Species != 0))
{
enc.Species = (uint)RandSpec.GetRandomSpecies((int)enc.Species);
enc.Forme = (uint)RandForm.GetRandomForme((int)enc.Species);
}
}
}
public void Execute(IEnumerable<Area7> Areas, LazyGARCFile encdata)
{
GetTableRandSettings((RandOption)TableRandomizationOption, out int slotStart, out int slotStop, out bool copy);
foreach (var Map in Areas)
{
foreach (var Table in Map.Tables)
{
if (ModifyLevel)
{
Table.MinLevel = Randomizer.GetModifiedLevel(Table.MinLevel, LevelAmplifier);
Table.MaxLevel = Randomizer.GetModifiedLevel(Table.MaxLevel, LevelAmplifier);
}
RandomizeTable7(Table, slotStart, slotStop);
if (copy) // copy row 0 to rest
Table.CopySlotsToSOS();
Table.Write();
}
encdata[Map.FileNumber] = Area7.GetDayNightTableBinary(Map.Tables);
}
}
private static void GetTableRandSettings(RandOption option, out int slotStart, out int slotStop, out bool copy)
{
copy = false;
switch (option)
{
default: // All
slotStart = 0;
slotStop = -1;
break;
case RandOption.Regular_Only:
slotStart = 0;
slotStop = 1;
break;
case RandOption.SOS_Only:
slotStart = 1;
slotStop = -1;
break;
case RandOption.Regular_CopySOS:
slotStart = 0;
slotStop = 1;
copy = true;
break;
}
}
private enum RandOption
{
All = 0,
Regular_Only = 1,
SOS_Only = 2,
Regular_CopySOS = 3,
}
}