private static bool IsUnobtainable(this EncounterSlot slot, ITrainerID pk) { switch (slot.Generation) { case 2: if ((slot.Type & SlotType.Safari) != 0) // Safari Zone is unavailable in Gen 2. { return(true); } if ((slot.Type & SlotType.Headbutt) != 0) // Unreachable Headbutt Trees. { return(Encounters2.GetGSCHeadbuttAvailability(slot, pk.TID) != TreeEncounterAvailable.ValidTree); } break; case 4: if (slot.Location == 193 && slot.Type == SlotType.Surf) // Johto Route 45 surfing encounter. Unreachable Water tiles. { return(true); } break; } return(false); }
public void LoadIDValues(ITrainerID tr) { Trainer = tr; int format = tr.GetTrainerIDFormat(); SetFormat(format); LoadValues(); }
private static string GetAlternateRepresentation(ITrainerID tr, int format) { if (format >= 7) { return($"ID: {tr.TID:D5}/{tr.SID:D5}"); } var repack = (uint)((tr.SID << 16) | tr.TID); // 32bit return($"G7ID: ({repack / 1_000_000:D4}){repack % 1_000_000:D6}"); }
private static CheckResult VerifyWildEncounterCrystalHeadbutt(ITrainerID tr, EncounterSlot encounter) { var tree = Encounters2.GetGSCHeadbuttAvailability(encounter, tr.TID); switch (tree) { case TreeEncounterAvailable.ValidTree: return(new CheckResult(Severity.Valid, LG2TreeID, CheckIdentifier.Encounter)); case TreeEncounterAvailable.InvalidTree: return(new CheckResult(Severity.Invalid, LG2InvalidTileTreeID, CheckIdentifier.Encounter)); default: // Impossible return(new CheckResult(Severity.Invalid, LG2InvalidTileTreeNotFound, CheckIdentifier.Encounter)); } }
public static int GetTrainerIDFormat(this ITrainerID tr) { if (tr is PKM p) { var format = p.GenNumber; if ((format < 3 && p.Format >= 7) || format <= 0) // VC or bad gen { return(4); // use TID/SID 16bit style } return(format); } if (tr is SaveFile s) { return(s.Generation); } return(-1); }
public void LoadIDValues(ITrainerID tr) { Trainer = tr; int format; if (tr is PKM p) { format = p.GenNumber; if (format < 3 && p.Format >= 7 || format <= 0) // VC or bad gen { format = 4; // use TID/SID 16bit style } } else { format = tr is SaveFile s ? s.Generation : -1; } SetFormat(format); LoadValues(); }
private static uint GetRevisedPID(uint fakeTID, uint pid, ITrainerID tr) { var xor = GetShinyXor(pid, fakeTID); var newXor = GetShinyXor(pid, (uint)(tr.TID | (tr.SID << 16))); var fakeRare = GetRareType(xor); var newRare = GetRareType(newXor); if (fakeRare == newRare) { return(pid); } var isShiny = xor < 16; if (isShiny) { return((((uint)(tr.TID ^ tr.SID) ^ (pid & 0xFFFF) ^ (xor == 0 ? 0u : 1u)) << 16) | (pid & 0xFFFF)); // force same shiny star type } return(pid ^ 0x1000_0000); }
public static bool IsShiny(this ITrainerID tr, uint pid, int gen = 7) { var xor = tr.SID ^ tr.TID ^ (pid >> 16) ^ pid; return(xor < (gen >= 7 ? 16 : 8)); }