Exemplo n.º 1
0
 private void B_AllFlyDest_Click(object sender, EventArgs e)
 {
     for (int i = 0; i < CLB_FlyDest.Items.Count; i++)
     {
         CLB_FlyDest.SetItemChecked(i, true);
     }
 }
Exemplo n.º 2
0
        private void SaveMain()
        {
            SAV.Coin = (uint)NUD_Coin.Value;
            uint valFly = ReadUInt32LittleEndian(SAV.General.AsSpan(ofsFly));

            for (int i = 0; i < CLB_FlyDest.Items.Count; i++)
            {
                if (FlyDestC[i] < 32)
                {
                    if (CLB_FlyDest.GetItemChecked(i))
                    {
                        valFly |= (uint)1 << FlyDestC[i];
                    }
                    else
                    {
                        valFly &= ~((uint)1 << FlyDestC[i]);
                    }
                }
                else
                {
                    var o = ofsFly + (FlyDestC[i] >> 3);
                    SAV.General[o] = (byte)((SAV.General[o] & ~(1 << (FlyDestC[i] & 7))) | (CLB_FlyDest.GetItemChecked(i) ? 1 << (FlyDestC[i] & 7) : 0));
                }
            }
            WriteUInt32LittleEndian(SAV.General.AsSpan(ofsFly), valFly);
            WriteUInt16LittleEndian(SAV.General.AsSpan(ofsBP), (ushort)NUD_BP.Value);

            if (SAV is SAV4Sinnoh sinnoh)
            {
                SavePoketch(sinnoh);
            }
            if (SAV is SAV4HGSS hgss)
            {
                SaveWalker(hgss);
            }

            if (ofsUGFlagCount > 0)
            {
                var current = ReadUInt32LittleEndian(SAV.General.AsSpan(ofsUGFlagCount)) & ~0xFFFFFu;
                var update  = current | (uint)NUD_UGFlags.Value;
                WriteUInt32LittleEndian(SAV.General.AsSpan(ofsUGFlagCount), update);
            }
            if (ofsMap > 0)
            {
                int valMap = CB_UpgradeMap.SelectedIndex;
                if (valMap >= 0)
                {
                    SAV.General[ofsMap] = (byte)((SAV.General[ofsMap] & 0xE7) | valMap << 3);
                }
            }
        }
Exemplo n.º 3
0
        private void saveMain()
        {
            int GBO = SAV.getGBO;

            if (GB_Poketch.Visible)
            {
                savePoketch();
            }
            if (GB_FlyDest.Visible)
            {
                uint val = BitConverter.ToUInt32(SAV.Data, ofsFly);
                for (int i = 0; i < CLB_FlyDest.Items.Count; i++)
                {
                    if (FlyDestC[i] < 32)
                    {
                        if (CLB_FlyDest.GetItemChecked(i))
                        {
                            val |= (uint)1 << FlyDestC[i];
                        }
                        else
                        {
                            val &= ~((uint)1 << FlyDestC[i]);
                        }
                    }
                    else
                    {
                        SAV.Data[ofsFly + (FlyDestC[i] >> 3)] = (byte)(SAV.Data[ofsFly + (FlyDestC[i] >> 3)] & ~(1 << (FlyDestC[i] - (FlyDestC[i] >> 3 << 3))) | ((CLB_FlyDest.GetItemChecked(i) ? 1 : 0) << (FlyDestC[i] - (FlyDestC[i] >> 3 << 3))));
                    }
                }
                BitConverter.GetBytes(val).CopyTo(SAV.Data, ofsFly);
            }
            if (NUD_BP.Visible)
            {
                BitConverter.GetBytes((ushort)NUD_BP.Value).CopyTo(SAV.Data, ofsBP);
            }

            if (CHK_UpgradeTC.Visible)
            {
                SAV.Data[GBO + 0x11F0] = (byte)(SAV.Data[GBO + 0x11F0] & 0xEF | (CHK_UpgradeTC.Checked ? 0x10 : 0));
            }

            if (CB_UpgradeMap.Visible)
            {
                int val = CB_UpgradeMap.SelectedIndex;
                if (val >= 0)
                {
                    SAV.Data[GBO + 0xBAE7] = (byte)(SAV.Data[GBO + 0xBAE7] & 0xE7 | val << 3);
                }
            }
        }
Exemplo n.º 4
0
        private void SaveMain()
        {
            SAV.Coin = (uint)NUD_Coin.Value;
            uint valFly = BitConverter.ToUInt32(SAV.General, ofsFly);

            for (int i = 0; i < CLB_FlyDest.Items.Count; i++)
            {
                if (FlyDestC[i] < 32)
                {
                    if (CLB_FlyDest.GetItemChecked(i))
                    {
                        valFly |= (uint)1 << FlyDestC[i];
                    }
                    else
                    {
                        valFly &= ~((uint)1 << FlyDestC[i]);
                    }
                }
                else
                {
                    var o = ofsFly + (FlyDestC[i] >> 3);
                    SAV.General[o] = (byte)((SAV.General[o] & ~(1 << (FlyDestC[i] & 7))) | (CLB_FlyDest.GetItemChecked(i) ? 1 << (FlyDestC[i] & 7) : 0));
                }
            }
            BitConverter.GetBytes(valFly).CopyTo(SAV.General, ofsFly);
            BitConverter.GetBytes((ushort)NUD_BP.Value).CopyTo(SAV.General, ofsBP);

            if (SAV is SAV4Sinnoh sinnoh)
            {
                SavePoketch(sinnoh);
            }
            if (SAV is SAV4HGSS hgss)
            {
                SaveWalker(hgss);
            }

            if (ofsUGFlagCount > 0)
            {
                BitConverter.GetBytes((BitConverter.ToUInt32(SAV.General, ofsUGFlagCount) & ~0xFFFFFu) | (uint)NUD_UGFlags.Value).CopyTo(SAV.General, ofsUGFlagCount);
            }
            if (ofsMap > 0)
            {
                int valMap = CB_UpgradeMap.SelectedIndex;
                if (valMap >= 0)
                {
                    SAV.General[ofsMap] = (byte)((SAV.General[ofsMap] & 0xE7) | valMap << 3);
                }
            }
        }
Exemplo n.º 5
0
        private void SaveMain()
        {
            SAV.Coin = (uint)NUD_Coin.Value;
            uint valFly = BitConverter.ToUInt32(SAV.Data, ofsFly);

            for (int i = 0; i < CLB_FlyDest.Items.Count; i++)
            {
                if (FlyDestC[i] < 32)
                {
                    if (CLB_FlyDest.GetItemChecked(i))
                    {
                        valFly |= (uint)1 << FlyDestC[i];
                    }
                    else
                    {
                        valFly &= ~((uint)1 << FlyDestC[i]);
                    }
                }
                else
                {
                    SAV.Data[ofsFly + (FlyDestC[i] >> 3)] = (byte)(SAV.Data[ofsFly + (FlyDestC[i] >> 3)] & ~(1 << (FlyDestC[i] & 7)) | (CLB_FlyDest.GetItemChecked(i) ? 1 << (FlyDestC[i] & 7) : 0));
                }
            }
            BitConverter.GetBytes(valFly).CopyTo(SAV.Data, ofsFly);
            BitConverter.GetBytes((ushort)NUD_BP.Value).CopyTo(SAV.Data, ofsBP);

            if (ofsPoketch > 0)
            {
                SavePoketch();
            }
            if (ofsUGFlagCount > 0)
            {
                BitConverter.GetBytes(BitConverter.ToUInt32(SAV.Data, ofsUGFlagCount) & ~(uint)0xFFFFF | (uint)NUD_UGFlags.Value).CopyTo(SAV.Data, ofsUGFlagCount);
            }
            if (ofsMap > 0)
            {
                int valMap = CB_UpgradeMap.SelectedIndex;
                if (valMap >= 0)
                {
                    SAV.Data[ofsMap] = (byte)(SAV.Data[ofsMap] & 0xE7 | valMap << 3);
                }
            }
        }
Exemplo n.º 6
0
        private void SaveFlags()
        {
            SAV.Stamps = GetBits(LB_Stamps);

            SAV.SetEventFlag(333, CHK_UnlockSuperSingles.Checked);
            SAV.SetEventFlag(334, CHK_UnlockSuperDoubles.Checked);
            SAV.SetEventFlag(335, CHK_UnlockSuperMulti.Checked);

            SAV.MegaUnlocked  = CHK_UnlockMega.Checked;
            SAV.ZMoveUnlocked = CHK_UnlockZMove.Checked;

            for (int i = 0; i < CLB_FlyDest.Items.Count; i++)
            {
                SAV.SetEventFlag(SkipFlag + FlyDestFlagOfs[i], CLB_FlyDest.GetItemChecked(i));
            }
            for (int i = 0; i < CLB_MapUnmask.Items.Count; i++)
            {
                SAV.SetEventFlag(SkipFlag + MapUnmaskFlagOfs[i], CLB_MapUnmask.GetItemChecked(i));
            }
        }
Exemplo n.º 7
0
        private void ReadMain()
        {
            string[] FlyDestA = null;
            switch (SAV.Version)
            {
            case GameVersion.B:
            case GameVersion.W:
            case GameVersion.BW:
                ofsFly   = 0x204B2;
                FlyDestA = new[] {
                    "Nuvema Town", "Accumula Town", "Striaton City", "Nacrene City",
                    "Castelia City", "Nimbasa City", "Driftveil City", "Mistralton City",
                    "Icirrus City", "Opelucid City", "Victory Road", "Pokemon League",
                    "Lacunosa Town", "Undella Town", "Black City/White Forest", "(Unity Tower)"
                };
                FlyDestC = new[] {
                    0, 1, 2, 3,
                    4, 5, 6, 7,
                    8, 9, 15, 11,
                    10, 13, 12, 14
                };
                break;

            case GameVersion.B2:
            case GameVersion.W2:
            case GameVersion.B2W2:
                ofsFly   = 0x20392;
                FlyDestA = new[] {
                    "Aspertia City", "Floccesy Town", "Virbank City",
                    "Nuvema Town", "Accumula Town", "Striaton City", "Nacrene City",
                    "Castelia City", "Nimbasa City", "Driftveil City", "Mistralton City",
                    "Icirrus City", "Opelucid City",
                    "Lacunosa Town", "Undella Town", "Black City/White Forest",
                    "Lentimas Town", "Humilau City", "Victory Road", "Pokemon League",
                    "Pokestar Studios", "Join Avenue", "PWT", "(Unity Tower)"
                };
                FlyDestC = new[] {
                    24, 27, 25,
                    8, 9, 10, 11,
                    12, 13, 14, 15,
                    16, 17,
                    18, 21, 20,
                    28, 26, 66, 19,
                    5, 6, 7, 22
                };
                break;
            }
            uint valFly = BitConverter.ToUInt32(SAV.Data, ofsFly);

            CLB_FlyDest.Items.Clear();
            CLB_FlyDest.Items.AddRange(FlyDestA);
            for (int i = 0; i < CLB_FlyDest.Items.Count; i++)
            {
                if (FlyDestC[i] < 32)
                {
                    CLB_FlyDest.SetItemChecked(i, (valFly & 1u << FlyDestC[i]) != 0);
                }
                else
                {
                    CLB_FlyDest.SetItemChecked(i, (SAV.Data[ofsFly + (FlyDestC[i] >> 3)] & 1 << (FlyDestC[i] & 7)) != 0);
                }
            }

            if (SAV is SAV5BW)
            {
                GB_KeySystem.Visible = false;
                // Roamer
                cbr = new[] { CB_Roamer642, CB_Roamer641 };
                List <ComboItem> getStates() => new List <ComboItem>
                {
                    new ComboItem("Not roamed", 0),
                    new ComboItem("Roaming", 1),
                    new ComboItem("Defeated", 2),
                    new ComboItem("Captured", 3),
                };
                // CurrentStat:ComboboxSource
                // Not roamed: Not roamed/Defeated/Captured
                //    Roaming: Roaming/Defeated/Captured
                //   Defeated: Defeated/Captured
                //   Captured: Defeated/Captured
                // Top 2 bit acts as flags of some sorts
                for (int i = 0; i < cbr.Length; i++)
                {
                    int c = SAV.Data[ofsRoamer + 0x2E + i];

                    var states = getStates();
                    if (states.All(z => z.Value != c))
                    {
                        states.Add(new ComboItem($"Unknown (0x{c:X2})", c));
                    }
                    cbr[i].Items.Clear();
                    cbr[i].InitializeBinding();
                    cbr[i].DataSource    = new BindingSource(states.Where(v => v.Value >= 2 || v.Value == c).ToList(), null);
                    cbr[i].SelectedValue = c;
                }

                // LibertyPass
                valLibPass = keyLibPass ^ (uint)(SAV.SID << 16 | SAV.TID);
                bLibPass   = BitConverter.ToUInt32(SAV.Data, ofsLibPass) == valLibPass;
                CHK_LibertyPass.Checked = bLibPass;
            }
            else if (SAV is SAV5B2W2)
            {
                GB_Roamer.Visible = CHK_LibertyPass.Visible = false;
                // KeySystem
                string[] KeySystemA =
                {
                    "Obtain EasyKey",  "Obtain ChallengeKey",  "Obtain CityKey", "Obtain IronKey",     "Obtain IcebergKey",
                    "Unlock EasyMode", "Unlock ChallengeMode", "Unlock City",    "Unlock IronChamber",
                    "Unlock IcebergChamber"
                };
                uint KSID = BitConverter.ToUInt32(SAV.Data, ofsKS + 0x34);
                valKS = new uint[keyKS.Length];
                bKS   = new bool[keyKS.Length];
                CLB_KeySystem.Items.Clear();
                for (int i = 0; i < valKS.Length; i++)
                {
                    valKS[i] = keyKS[i] ^ KSID;
                    bKS[i]   = BitConverter.ToUInt32(SAV.Data, ofsKS + (i << 2)) == valKS[i];
                    CLB_KeySystem.Items.Add(KeySystemA[i], bKS[i]);
                }
            }
            else
            {
                GB_KeySystem.Visible = GB_Roamer.Visible = CHK_LibertyPass.Visible = false;
            }
        }
Exemplo n.º 8
0
        private void SaveMain()
        {
            uint valFly = BitConverter.ToUInt32(SAV.Data, ofsFly);

            for (int i = 0; i < CLB_FlyDest.Items.Count; i++)
            {
                if (FlyDestC[i] < 32)
                {
                    if (CLB_FlyDest.GetItemChecked(i))
                    {
                        valFly |= (uint)1 << FlyDestC[i];
                    }
                    else
                    {
                        valFly &= ~((uint)1 << FlyDestC[i]);
                    }
                }
                else
                {
                    var ofs = ofsFly + (FlyDestC[i] >> 3);
                    SAV.Data[ofs] = (byte)((SAV.Data[ofs] & ~(1 << (FlyDestC[i] & 7))) | ((CLB_FlyDest.GetItemChecked(i) ? 1 : 0) << (FlyDestC[i] & 7)));
                }
            }
            BitConverter.GetBytes(valFly).CopyTo(SAV.Data, ofsFly);

            if (SAV is SAV5BW)
            {
                // Roamer
                for (int i = 0; i < cbr.Length; i++)
                {
                    int c = SAV.Data[ofsRoamer + 0x2E + i];
                    var d = (int)cbr[i].SelectedValue;

                    if (c == d)
                    {
                        continue;
                    }
                    SAV.Data[ofsRoamer + 0x2E + i] = (byte)d;
                    if (c != 1)
                    {
                        continue;
                    }
                    new byte[14].CopyTo(SAV.Data, ofsRoamer + 4 + (i * 0x14));
                    SAV.Data[ofsRoamer + 0x2C + i] = 0;
                }

                // LibertyPass
                if (CHK_LibertyPass.Checked ^ bLibPass)
                {
                    BitConverter.GetBytes(bLibPass ? 0 : valLibPass).CopyTo(SAV.Data, ofsLibPass);
                }
            }
            else if (SAV is SAV5B2W2)
            {
                // KeySystem
                for (int i = 0; i < CLB_KeySystem.Items.Count; i++)
                {
                    if (CLB_KeySystem.GetItemChecked(i) ^ bKS[i])
                    {
                        BitConverter.GetBytes(bKS[i] ? 0 : valKS[i]).CopyTo(SAV.Data, ofsKS + (i << 2));
                    }
                }
            }
        }
Exemplo n.º 9
0
        private void readMain(bool isPoketch = false, bool isFly = false, bool isBP = false, bool isTC = false, bool isMap = false)
        {
            int GBO = SAV.getGBO;

            if (isPoketch)
            {
                readPoketch();
            }
            else
            {
                GB_Poketch.Visible = false;
            }

            if (isFly)
            {
                string[] FlyDestA = null;
                switch (SAV.Version)
                {
                case GameVersion.HGSS:
                    ofsFly   = GBO + 0x11FA;
                    FlyDestA = new[] {
                        "NewBark Town", "Cherrygrove City", "Violet City", "Azalea Town",
                        "Goldenrod City", "Ecruteak City", "Olivine City", "Cianwood City",
                        "Mahogany Town", "Lake of Rage", "Blackthorn City",
                        "Safari Zone Gate", "Frontier Access", "Mt.Silver",
                        "Victory Road", "Indigo Plateau",
                        "Pallet Town", "Viridian City", "Pewter City", "Cerulean City", "Vermilion City",
                        "Lavender Town", "Celadon City", "Saffron City", "Fuchsia City", "Cinnabar Island"
                    };
                    FlyDestC = new[] {
                        11, 12, 13, 14,
                        16, 18, 17, 15,
                        19, 20, 21,
                        30, 27, 22,
                        33, 9,
                        0, 1, 2, 3, 5,
                        4, 6, 10, 7, 8
                    };
                    break;

                case GameVersion.DP:
                    ofsFly   = GBO + 0x1112;
                    FlyDestA = new[] {
                        "Twinleaf Town", "Sandgem Town", "Jubilife City", "Oreburgh City",
                        "Floaroma Town", "Eterna City", "Hearthome City", "Solaceon Town",
                        "Veilstone City", "Pastoria City", "Celestic Town", "Canalave City",
                        "Snowpoint City", "Sunyshore City",
                        "Pokemon League", "Fight Area", "Survival Area", "Resort Area"
                    };
                    FlyDestC = new[] {
                        0, 1, 7, 9,
                        2, 10, 11, 3,
                        13, 12, 4, 8,
                        15, 14,
                        68, 17, 5, 6
                    };
                    break;
                }
                uint val = BitConverter.ToUInt32(SAV.Data, ofsFly);
                CLB_FlyDest.Items.Clear();
                CLB_FlyDest.Items.AddRange(FlyDestA);
                for (int i = 0; i < CLB_FlyDest.Items.Count; i++)
                {
                    if (FlyDestC[i] < 32)
                    {
                        CLB_FlyDest.SetItemChecked(i, (val & (uint)1 << FlyDestC[i]) != 0);
                    }
                    else
                    {
                        CLB_FlyDest.SetItemChecked(i, (SAV.Data[ofsFly + (FlyDestC[i] >> 3)] & 1 << (FlyDestC[i] - (FlyDestC[i] >> 3 << 3))) != 0);
                    }
                }
            }
            else
            {
                GB_FlyDest.Visible = false;
            }

            if (isBP)
            {
                switch (SAV.Version)
                {
                case GameVersion.HGSS: ofsBP = GBO + 0x5BB8; break;

                case GameVersion.DP: ofsBP = GBO + 0x65F8; break;
                }
                uint val = BitConverter.ToUInt16(SAV.Data, ofsBP);
                if (val > 9999)
                {
                    val = 9999;
                }
                NUD_BP.Value = val;
            }
            else
            {
                L_BP.Visible = NUD_BP.Visible = false;
            }

            if (isTC)
            {
                CHK_UpgradeTC.Checked = (SAV.Data[GBO + 0x11F0] & 0x10) != 0;
            }
            else
            {
                CHK_UpgradeTC.Visible = false;
            }

            if (isMap)
            {
                string[] items = new[] { "Map Johto", "Map Johto+", "Map Johto & Kanto" };
                int      index = SAV.Data[SAV.getGBO + 0xBAE7] >> 3 & 3;
                if (index > 2)
                {
                    index = 2;
                }
                CB_UpgradeMap.Items.AddRange(items);
                CB_UpgradeMap.SelectedIndex = index;
            }
            else
            {
                CB_UpgradeMap.Visible = false;
            }
        }