Add shared memory interface (encounter)

This commit is contained in:
Kurt 2019-11-26 10:46:16 -08:00
parent 6627d7e2f4
commit 445fdee2ba
8 changed files with 76 additions and 44 deletions

View File

@ -181,13 +181,13 @@ private static void MarkG7SMSlots(ref EncounterArea7[] Areas)
internal static readonly EncounterTrade[] TradeGift_SM = // @ a\1\5\5
{
// Trades - 4.bin
new EncounterTrade { Species = 066, Form = 0, Level = 09, Ability = 2, TID = 00410, SID = 00000, IVs = new[] {-1,31,-1,-1,-1,-1}, OTGender = 1, Gender = 0, Nature = Nature.Brave, }, // Machop
new EncounterTrade { Species = 761, Form = 0, Level = 16, Ability = 1, TID = 20683, SID = 00009, IVs = new[] {-1,31,-1,-1,-1,-1}, OTGender = 0, Gender = 1, Nature = Nature.Adamant, }, // Bounsweet
new EncounterTrade { Species = 061, Form = 0, Level = 22, Ability = 2, TID = 01092, SID = 00009, IVs = new[] {31,-1,-1,-1,-1,-1}, OTGender = 1, Gender = 1, Nature = Nature.Naughty, }, // Poliwhirl
new EncounterTrade { Species = 440, Form = 0, Level = 27, Ability = 2, TID = 10913, SID = 00000, IVs = new[] {-1,-1,-1,-1,31,-1}, OTGender = 1, Gender = 1, Nature = Nature.Calm, }, // Happiny
new EncounterTrade { Species = 075, Form = 1, Level = 32, Ability = 1, TID = 20778, SID = 00009, IVs = new[] {-1,-1,31,-1,-1,-1}, OTGender = 0, Gender = 0, Nature = Nature.Impish, EvolveOnTrade = true }, // Graveler-1
new EncounterTrade { Species = 762, Form = 0, Level = 43, Ability = 1, TID = 20679, SID = 00009, IVs = new[] {-1,-1,-1,-1,-1,31}, OTGender = 1, Gender = 1, Nature = Nature.Careful, }, // Steenee
new EncounterTrade { Species = 663, Form = 0, Level = 59, Ability = 4, TID = 56734, SID = 00008, IVs = new[] {-1,-1,-1,31,-1,-1}, OTGender = 0, Gender = 0, Nature = Nature.Jolly, }, // Talonflame
new EncounterTrade7 { Species = 066, Form = 0, Level = 09, Ability = 2, TID = 00410, SID = 00000, IVs = new[] {-1,31,-1,-1,-1,-1}, OTGender = 1, Gender = 0, Nature = Nature.Brave, }, // Machop
new EncounterTrade7 { Species = 761, Form = 0, Level = 16, Ability = 1, TID = 20683, SID = 00009, IVs = new[] {-1,31,-1,-1,-1,-1}, OTGender = 0, Gender = 1, Nature = Nature.Adamant, }, // Bounsweet
new EncounterTrade7 { Species = 061, Form = 0, Level = 22, Ability = 2, TID = 01092, SID = 00009, IVs = new[] {31,-1,-1,-1,-1,-1}, OTGender = 1, Gender = 1, Nature = Nature.Naughty, }, // Poliwhirl
new EncounterTrade7 { Species = 440, Form = 0, Level = 27, Ability = 2, TID = 10913, SID = 00000, IVs = new[] {-1,-1,-1,-1,31,-1}, OTGender = 1, Gender = 1, Nature = Nature.Calm, }, // Happiny
new EncounterTrade7 { Species = 075, Form = 1, Level = 32, Ability = 1, TID = 20778, SID = 00009, IVs = new[] {-1,-1,31,-1,-1,-1}, OTGender = 0, Gender = 0, Nature = Nature.Impish, EvolveOnTrade = true }, // Graveler-1
new EncounterTrade7 { Species = 762, Form = 0, Level = 43, Ability = 1, TID = 20679, SID = 00009, IVs = new[] {-1,-1,-1,-1,-1,31}, OTGender = 1, Gender = 1, Nature = Nature.Careful, }, // Steenee
new EncounterTrade7 { Species = 663, Form = 0, Level = 59, Ability = 4, TID = 56734, SID = 00008, IVs = new[] {-1,-1,-1,31,-1,-1}, OTGender = 0, Gender = 0, Nature = Nature.Jolly, }, // Talonflame
};
private static readonly EncounterStatic[] Encounter_USUM =
@ -395,13 +395,13 @@ private static void MarkG7SMSlots(ref EncounterArea7[] Areas)
internal static readonly EncounterTrade[] TradeGift_USUM =
{
// Trades - 4.bin
new EncounterTrade { Species = 701, Form = 0, Level = 08, Ability = 2, TID = 00410, SID = 00000, IVs = new[] {-1,31,-1,-1,-1,-1}, OTGender = 1, Gender = 0, Nature = Nature.Brave, }, // Hawlucha
new EncounterTrade { Species = 714, Form = 0, Level = 19, Ability = 1, TID = 20683, SID = 00009, IVs = new[] {-1,-1,-1,-1,31,-1}, OTGender = 0, Gender = 0, Nature = Nature.Modest, }, // Noibat
new EncounterTrade { Species = 339, Form = 0, Level = 21, Ability = 2, TID = 01092, SID = 00009, IVs = new[] {31,-1,-1,-1,-1,-1}, OTGender = 0, Gender = 1, Nature = Nature.Naughty, }, // Barboach
new EncounterTrade { Species = 024, Form = 0, Level = 22, Ability = 1, TID = 10913, SID = 00000, IVs = new[] {-1,-1,31,-1,-1,-1}, OTGender = 1, Gender = 1, Nature = Nature.Impish, }, // Arbok
new EncounterTrade { Species = 708, Form = 0, Level = 33, Ability = 1, TID = 20778, SID = 00009, IVs = new[] {-1,-1,-1,-1,-1,31}, OTGender = 0, Gender = 0, Nature = Nature.Calm, EvolveOnTrade = true }, // Phantump
new EncounterTrade { Species = 422, Form = 0, Level = 44, Ability = 2, TID = 20679, SID = 00009, IVs = new[] {-1,-1,31,-1,-1,-1}, OTGender = 1, Gender = 1, Nature = Nature.Quiet, }, // Shellos
new EncounterTrade { Species = 128, Form = 0, Level = 59, Ability = 1, TID = 56734, SID = 00008, IVs = new[] {-1,-1,-1,31,-1,-1}, OTGender = 0, Gender = 0, Nature = Nature.Jolly, }, // Tauros
new EncounterTrade7 { Species = 701, Form = 0, Level = 08, Ability = 2, TID = 00410, SID = 00000, IVs = new[] {-1,31,-1,-1,-1,-1}, OTGender = 1, Gender = 0, Nature = Nature.Brave, }, // Hawlucha
new EncounterTrade7 { Species = 714, Form = 0, Level = 19, Ability = 1, TID = 20683, SID = 00009, IVs = new[] {-1,-1,-1,-1,31,-1}, OTGender = 0, Gender = 0, Nature = Nature.Modest, }, // Noibat
new EncounterTrade7 { Species = 339, Form = 0, Level = 21, Ability = 2, TID = 01092, SID = 00009, IVs = new[] {31,-1,-1,-1,-1,-1}, OTGender = 0, Gender = 1, Nature = Nature.Naughty, }, // Barboach
new EncounterTrade7 { Species = 024, Form = 0, Level = 22, Ability = 1, TID = 10913, SID = 00000, IVs = new[] {-1,-1,31,-1,-1,-1}, OTGender = 1, Gender = 1, Nature = Nature.Impish, }, // Arbok
new EncounterTrade7 { Species = 708, Form = 0, Level = 33, Ability = 1, TID = 20778, SID = 00009, IVs = new[] {-1,-1,-1,-1,-1,31}, OTGender = 0, Gender = 0, Nature = Nature.Calm, EvolveOnTrade = true }, // Phantump
new EncounterTrade7 { Species = 422, Form = 0, Level = 44, Ability = 2, TID = 20679, SID = 00009, IVs = new[] {-1,-1,31,-1,-1,-1}, OTGender = 1, Gender = 1, Nature = Nature.Quiet, }, // Shellos
new EncounterTrade7 { Species = 128, Form = 0, Level = 59, Ability = 1, TID = 56734, SID = 00008, IVs = new[] {-1,-1,-1,31,-1,-1}, OTGender = 0, Gender = 0, Nature = Nature.Jolly, }, // Tauros
};
private const string tradeSM = "tradesm";

View File

@ -310,17 +310,17 @@ static Encounters8()
internal static readonly EncounterTrade8[] TradeGift_SWSH =
{
new EncounterTrade8(052,18) { Ability = 2, TID7 = 263455, IVs = TradeIVs, DynamaxLevel = 1, OTGender = 0, Relearn = new[] {387,000,000,000} }, // Meowth
new EncounterTrade8(819,10) { Ability = 1, TID7 = 648753, IVs = TradeIVs, DynamaxLevel = 1, OTGender = 1, }, // Skwovet
new EncounterTrade8(546,23) { Ability = 1, TID7 = 101154, IVs = TradeIVs, DynamaxLevel = 1, OTGender = 1, }, // Cottonee
new EncounterTrade8(175,25) { Ability = 2, TID7 = 109591, IVs = TradeIVs, DynamaxLevel = 1, OTGender = 1, Relearn = new[] {791,000,000,000} }, // Togepi
new EncounterTrade8(856,30) { Ability = 2, TID7 = 101101, IVs = TradeIVs, DynamaxLevel = 1, OTGender = 0, Version = SW }, // Hatenna
new EncounterTrade8(859,30) { Ability = 1, TID7 = 256081, IVs = TradeIVs, DynamaxLevel = 1, OTGender = 0, Relearn = new[] {252,000,000,000}, Version = SH }, // Impidimp
new EncounterTrade8(562,35) { Ability = 1, TID7 = 102534, IVs = TradeIVs, DynamaxLevel = 2, OTGender = 1, Relearn = new[] {261,000,000,000} }, // Yamask
new EncounterTrade8(538,37) { Ability = 2, TID7 = 768945, IVs = TradeIVs, DynamaxLevel = 2, OTGender = 0, Version = SW }, // Throh
new EncounterTrade8(539,37) { Ability = 1, TID7 = 881426, IVs = TradeIVs, DynamaxLevel = 2, OTGender = 0, Version = SH }, // Sawk
new EncounterTrade8(122,40) { Ability = 1, TID7 = 891846, IVs = TradeIVs, DynamaxLevel = 1, OTGender = 0, }, // Mr. Mime
new EncounterTrade8(884,50) { Ability = 2, TID7 = 101141, IVs = TradeIVs, DynamaxLevel = 3, OTGender = 0, Relearn = new[] {400,000,000,000} }, // Duraludon
new EncounterTrade8(052,18,08,000,04,5) { Ability = 2, TID7 = 263455, IVs = TradeIVs, DynamaxLevel = 1, OTGender = 0, Relearn = new[] {387,000,000,000} }, // Meowth
new EncounterTrade8(819,10,01,044,01,2) { Ability = 1, TID7 = 648753, IVs = TradeIVs, DynamaxLevel = 1, OTGender = 1, }, // Skwovet
new EncounterTrade8(546,23,11,000,09,5) { Ability = 1, TID7 = 101154, IVs = TradeIVs, DynamaxLevel = 1, OTGender = 1, }, // Cottonee
new EncounterTrade8(175,25,02,010,10,6) { Ability = 2, TID7 = 109591, IVs = TradeIVs, DynamaxLevel = 1, OTGender = 1, Relearn = new[] {791,000,000,000} }, // Togepi
new EncounterTrade8(856,30,09,859,08,3) { Ability = 2, TID7 = 101101, IVs = TradeIVs, DynamaxLevel = 1, OTGender = 0, Version = SW }, // Hatenna
new EncounterTrade8(859,30,43,000,07,6) { Ability = 1, TID7 = 256081, IVs = TradeIVs, DynamaxLevel = 1, OTGender = 0, Relearn = new[] {252,000,000,000}, Version = SH }, // Impidimp
new EncounterTrade8(562,35,16,310,15,5) { Ability = 1, TID7 = 102534, IVs = TradeIVs, DynamaxLevel = 2, OTGender = 1, Relearn = new[] {261,000,000,000} }, // Yamask
new EncounterTrade8(538,37,17,129,20,7) { Ability = 2, TID7 = 768945, IVs = TradeIVs, DynamaxLevel = 2, OTGender = 0, Version = SW }, // Throh
new EncounterTrade8(539,37,17,129,14,6) { Ability = 1, TID7 = 881426, IVs = TradeIVs, DynamaxLevel = 2, OTGender = 0, Version = SH }, // Sawk
new EncounterTrade8(122,40,56,000,12,4) { Ability = 1, TID7 = 891846, IVs = TradeIVs, DynamaxLevel = 1, OTGender = 0, }, // Mr. Mime
new EncounterTrade8(884,50,15,038,06,2) { Ability = 2, TID7 = 101141, IVs = TradeIVs, DynamaxLevel = 3, OTGender = 0, Relearn = new[] {400,000,000,000} }, // Duraludon
};
}
}

View File

@ -147,8 +147,6 @@ protected virtual void ApplyDetails(ITrainerInfo SAV, EncounterCriteria criteria
if (pk.Format == 6)
pk.SetRandomMemory6();
else if (pk.Format == 7)
SetSMOTMemory(pk);
}
protected virtual void SetPINGA(PKM pk, EncounterCriteria criteria)
@ -227,14 +225,6 @@ private void UpdateEdgeCase(PKM pkm)
}
}
private static void SetSMOTMemory(PKM pk)
{
pk.OT_Memory = 1;
pk.OT_Intensity = 3;
pk.OT_TextVar = 40;
pk.OT_Feeling = 5;
}
public virtual bool IsMatch(PKM pkm, int lvl)
{
if (IVs.Length != 0)
@ -404,4 +394,21 @@ private bool IsValidTradeOT12(PKM pkm)
return index >= 0;
}
}
public sealed class EncounterTrade7 : EncounterTrade, IMemoryOT
{
public int OT_Memory => 1;
public int OT_Intensity => 3;
public int OT_Feeling => 5;
public int OT_TextVar => 40;
protected override void ApplyDetails(ITrainerInfo SAV, EncounterCriteria criteria, PKM pk)
{
base.ApplyDetails(SAV, criteria, pk);
pk.OT_Memory = OT_Memory;
pk.OT_Intensity = OT_Intensity;
pk.OT_Feeling = OT_Feeling;
pk.OT_TextVar = OT_TextVar;
}
}
}

View File

@ -2,15 +2,25 @@
namespace PKHeX.Core
{
public class EncounterTrade8 : EncounterTrade, IDynamaxLevel, IRelearn
public class EncounterTrade8 : EncounterTrade, IDynamaxLevel, IRelearn, IMemoryOT
{
public byte DynamaxLevel { get; set; }
public int[] Relearn { get; set; } = Array.Empty<int>();
public EncounterTrade8(int species, int level)
public int OT_Memory { get; }
public int OT_TextVar { get; }
public int OT_Feeling { get; }
public int OT_Intensity { get; }
public EncounterTrade8(int species, int level, int m, int a, int f, int i)
{
Species = species;
Level = level;
OT_Memory = m;
OT_TextVar = a;
OT_Feeling = f;
OT_Intensity = i;
}
public override bool IsMatch(PKM pkm, int lvl)
@ -22,11 +32,16 @@ public override bool IsMatch(PKM pkm, int lvl)
protected override void ApplyDetails(ITrainerInfo SAV, EncounterCriteria criteria, PKM pk)
{
if (pk is IDynamaxLevel d)
d.DynamaxLevel = DynamaxLevel;
pk.SetRelearnMoves(Relearn);
((PK8)pk).HT_Language = SAV.Language;
base.ApplyDetails(SAV, criteria, pk);
pk.SetRelearnMoves(Relearn);
var pk8 = (PK8)pk;
pk8.DynamaxLevel = DynamaxLevel;
pk8.HT_Language = SAV.Language;
pk8.OT_Memory = OT_Memory;
pk8.OT_TextVar = OT_TextVar;
pk8.OT_Feeling = OT_Feeling;
pk8.OT_Intensity = OT_Intensity;
}
}
}

View File

@ -8,7 +8,7 @@ namespace PKHeX.Core
/// <summary>
/// Generation 6 Mystery Gift Template File
/// </summary>
public sealed class WC6 : DataMysteryGift, IRibbonSetEvent3, IRibbonSetEvent4, ILangNick, IContestStats, INature
public sealed class WC6 : DataMysteryGift, IRibbonSetEvent3, IRibbonSetEvent4, ILangNick, IContestStats, INature, IMemoryOT
{
public const int Size = 0x108;
public const uint EonTicketConst = 0x225D73C2;

View File

@ -8,7 +8,7 @@ namespace PKHeX.Core
/// <summary>
/// Generation 7 Mystery Gift Template File
/// </summary>
public sealed class WC7 : DataMysteryGift, IRibbonSetEvent3, IRibbonSetEvent4, ILangNick, IContestStats, INature
public sealed class WC7 : DataMysteryGift, IRibbonSetEvent3, IRibbonSetEvent4, ILangNick, IContestStats, INature, IMemoryOT
{
public const int Size = 0x108;
public override int Format => 7;

View File

@ -9,7 +9,7 @@ namespace PKHeX.Core
/// <summary>
/// Generation 8 Mystery Gift Template File
/// </summary>
public sealed class WC8 : DataMysteryGift, ILangNick, INature, IGigantamax, IDynamaxLevel, IRibbonIndex,
public sealed class WC8 : DataMysteryGift, ILangNick, INature, IGigantamax, IDynamaxLevel, IRibbonIndex, IMemoryOT,
IRibbonSetEvent3, IRibbonSetEvent4, IRibbonSetCommon3, IRibbonSetCommon4, IRibbonSetCommon6, IRibbonSetCommon7, IRibbonSetCommon8, IRibbonSetMark8
{
public const int Size = 0x2D0;

View File

@ -0,0 +1,10 @@
namespace PKHeX.Core
{
public interface IMemoryOT
{
int OT_Memory { get; }
int OT_Intensity { get; }
int OT_Feeling { get; }
int OT_TextVar { get; }
}
}