Fix dex lang bitflag offset write

LangFlags is expected to be less than 0x500 or whatever, zero indexed to
the start of the dex block; NOT an absolute position.
I don't feel like making every usage consistent (gen5, gui editors)
which use the absolute position, so just adjust in the zukan
constructors
This commit is contained in:
Kurt
2019-06-22 16:53:25 -07:00
parent cbd039b18c
commit c345688f6d
5 changed files with 13 additions and 20 deletions

View File

@@ -9,6 +9,15 @@ public abstract class Zukan
protected int PokeDex { get; set; }
protected int PokeDexLanguageFlags { get; set; }
protected Zukan(SaveFile sav, int dex, int langflag)
{
SAV = sav;
PokeDex = dex;
PokeDexLanguageFlags = langflag;
if (langflag > dex)
throw new ArgumentException(nameof(langflag));
}
protected abstract int OFS_SEEN { get; }
protected abstract int OFS_CAUGHT { get; }
protected abstract int BitSeenSize { get; }

View File

@@ -10,11 +10,8 @@ public class Zukan5 : Zukan
protected override int DexLangFlagByteCount => 7;
protected override int DexLangIDCount => 7;
public Zukan5(SaveFile sav, int dex, int langflag)
public Zukan5(SaveFile sav, int dex, int langflag) : base(sav, dex, langflag - dex)
{
SAV = sav;
PokeDex = dex;
PokeDexLanguageFlags = langflag;
var wrap = SAV.BW ? DexFormUtil.GetDexFormIndexBW : (Func<int, int, int>)DexFormUtil.GetDexFormIndexB2W2;
DexFormIndexFetcher = (spec, form, _) => wrap(spec, form);
}

View File

@@ -10,11 +10,8 @@ public class Zukan6 : Zukan
protected override int DexLangFlagByteCount => 7;
protected override int DexLangIDCount => 7;
public Zukan6(SaveFile sav, int dex, int langflag)
public Zukan6(SaveFile sav, int dex, int langflag) : base(sav, dex, langflag - dex)
{
SAV = sav;
PokeDex = dex;
PokeDexLanguageFlags = langflag;
var wrap = SAV.ORAS ? DexFormUtil.GetDexFormIndexORAS : (Func<int,int,int>)DexFormUtil.GetDexFormIndexXY;
DexFormIndexFetcher = (spec, form, _) => wrap(spec, form);
}

View File

@@ -21,15 +21,8 @@ public class Zukan7 : Zukan
private IList<int> FormBaseSpecies;
protected Zukan7()
public Zukan7(SaveFile sav, int dex, int langflag) : base(sav, dex, langflag - dex)
{
}
public Zukan7(SaveFile sav, int dex, int langflag)
{
SAV = sav;
PokeDex = dex;
PokeDexLanguageFlags = langflag;
DexFormIndexFetcher = SAV.USUM ? (Func<int, int, int, int>) DexFormUtil.GetDexFormIndexSM : DexFormUtil.GetDexFormIndexSM;
LoadDexList();
Debug.Assert(!SAV.Exportable || BitConverter.ToUInt32(SAV.Data, PokeDex) == MAGIC);

View File

@@ -19,11 +19,8 @@ public class Zukan7b : Zukan7
protected override int DexLangFlagByteCount => 920; // 0x398 = 817*9, top off the savedata block.
protected override int DexLangIDCount => 9; // CHT, skipping langID 6 (unused)
public Zukan7b(SaveFile sav, int dex, int langflag)
public Zukan7b(SaveFile sav, int dex, int langflag) : base(sav, dex, langflag)
{
SAV = sav;
PokeDex = dex;
PokeDexLanguageFlags = langflag;
DexFormIndexFetcher = DexFormUtil.GetDexFormIndexGG;
LoadDexList();
}