Пример #1
0
        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);
        }
Пример #2
0
    public void LoadIDValues(ITrainerID tr)
    {
        Trainer = tr;
        int format = tr.GetTrainerIDFormat();

        SetFormat(format);
        LoadValues();
    }
Пример #3
0
    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}");
    }
Пример #4
0
        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));
            }
        }
Пример #5
0
 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);
 }
Пример #6
0
        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();
        }
Пример #7
0
        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);
        }
Пример #8
0
        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));
        }