private void Button1_Click(object sender, EventArgs e)
        {
            int    countervar;
            string AbilitiesNamesBuffer;
            string AbilitiesNamesNewOffset;
            string AbilitiesDescriptionTableBuffer;
            string AbilitiesDescriptionTableNewOffset;

            if (File.Exists(MainObject.LoadedRom.Substring(0, MainObject.LoadedRom.Length - 4) + ".ini") == true)
            {
                //Interaction.MsgBox("An INI for this ROM has been detected! Values will be updated as needed.");
            }
            else
            {
                //Interaction.MsgBox("INI not found! One will now be created for this ROM in the same location as the ROM. Keep the ini with the ROM so that PGE can know the location of the data.");
                File.Copy(MainObject.AppPath + @"ini\roms.ini", MainObject.LoadedRom.Substring(0, MainObject.LoadedRom.Length - 4) + ".ini", true);
            }

            Cursor = Cursors.WaitCursor;

            // Ability Names

            int argStart2 = int.Parse(Ini.GetString(Conversions.ToString(MMainFunctions.GetIniFileLocation()), MainObject.Header, "AbilityNames", ""), System.Globalization.NumberStyles.HexNumber);
            int argLength = (int)(Conversions.ToDouble(Ini.GetString(Conversions.ToString(MMainFunctions.GetIniFileLocation()), MainObject.Header, "NumberOfAbilities", "")) * 13d);

            AbilitiesNamesBuffer = HexFunctions.ReadHex(ref MainObject.LoadedRom, ref argStart2, ref argLength);

            // Deletes old data

            if (CheckBox3.Checked)
            {
                int    argStart = int.Parse(Ini.GetString(Conversions.ToString(MMainFunctions.GetIniFileLocation()), MainObject.Header, "AbilityNames", ""), System.Globalization.NumberStyles.HexNumber);
                string argData  = Conversions.ToString(MMainFunctions.MakeFreeSpaceString((int)(Strings.Len(AbilitiesNamesBuffer) / 2d)));
                HexFunctions.WriteHex(ref MainObject.LoadedRom, ref argStart, ref argData);
            }

            countervar = 0;
            while (countervar < Conversions.ToDouble(TextBox1.Text))
            {
                countervar           = countervar + 1;
                AbilitiesNamesBuffer = AbilitiesNamesBuffer + "ACACACACACACACFF0000000000";
            }

            AbilitiesNamesNewOffset = modSearchFreeSpace.SearchFreeSpaceFourAligned(MainObject.LoadedRom, 0xFF, (long)(Strings.Len(AbilitiesNamesBuffer) / 2d), Conversions.ToLong("&H" + Ini.GetString(Conversions.ToString(MMainFunctions.GetIniFileLocation()), MainObject.Header, "StartSearchingForSpaceOffset", "800000"))).ToString();
            int argStart1 = Conversions.ToInteger(AbilitiesNamesNewOffset);

            HexFunctions.WriteHex(ref MainObject.LoadedRom, ref argStart1, ref AbilitiesNamesBuffer);
            Ini.WriteString(Conversions.ToString(MMainFunctions.GetIniFileLocation()), MainObject.Header, "AbilityNames", Conversion.Hex(AbilitiesNamesNewOffset));

            // Repoint ability Names

            string localReverseHEX()
            {
                string argHEXData = Conversion.Hex(Conversions.ToDouble(AbilitiesNamesNewOffset) + 134217728d); var ret = HexFunctions.ReverseHex(ref argHEXData); return(ret);
            }

            int    argStart3 = 0x1C0;
            string argData1  = localReverseHEX();

            HexFunctions.WriteHex(ref MainObject.LoadedRom, ref argStart3, ref argData1);
            string localReverseHEX1()
            {
                string argHEXData = Conversion.Hex(Conversions.ToDouble(AbilitiesNamesNewOffset) + 134217728d); var ret = HexFunctions.ReverseHex(ref argHEXData); return(ret);
            }

            int    argStart4 = 0xD8004;
            string argData2  = localReverseHEX1();

            HexFunctions.WriteHex(ref MainObject.LoadedRom, ref argStart4, ref argData2);
            string localReverseHEX2()
            {
                string argHEXData = Conversion.Hex(Conversions.ToDouble(AbilitiesNamesNewOffset) + 134217728d); var ret = HexFunctions.ReverseHex(ref argHEXData); return(ret);
            }

            int    argStart5 = 0xD8624;
            string argData3  = localReverseHEX2();

            HexFunctions.WriteHex(ref MainObject.LoadedRom, ref argStart5, ref argData3);
            string localReverseHEX3()
            {
                string argHEXData = Conversion.Hex(Conversions.ToDouble(AbilitiesNamesNewOffset) + 134217728d); var ret = HexFunctions.ReverseHex(ref argHEXData); return(ret);
            }

            int    argStart6 = 0x1367A0;
            string argData4  = localReverseHEX3();

            HexFunctions.WriteHex(ref MainObject.LoadedRom, ref argStart6, ref argData4);

            // ability Descriptions

            int argStart21 = int.Parse(Ini.GetString(Conversions.ToString(MMainFunctions.GetIniFileLocation()), MainObject.Header, "AbilityDescriptionTable", ""), System.Globalization.NumberStyles.HexNumber);
            int argLength1 = (int)(Conversions.ToDouble(Ini.GetString(Conversions.ToString(MMainFunctions.GetIniFileLocation()), MainObject.Header, "NumberOfAbilities", "")) * 4d);

            AbilitiesDescriptionTableBuffer = HexFunctions.ReadHex(ref MainObject.LoadedRom, ref argStart21, ref argLength1);

            // Deletes old data

            if (CheckBox3.Checked)
            {
                int    argStart7 = int.Parse(Ini.GetString(Conversions.ToString(MMainFunctions.GetIniFileLocation()), MainObject.Header, "AbilityDescriptionTable", ""), System.Globalization.NumberStyles.HexNumber);
                string argData5  = Conversions.ToString(MMainFunctions.MakeFreeSpaceString((int)(Strings.Len(AbilitiesDescriptionTableBuffer) / 2d)));
                HexFunctions.WriteHex(ref MainObject.LoadedRom, ref argStart7, ref argData5);
            }

            countervar = 0;
            while (countervar < Conversions.ToDouble(TextBox1.Text))
            {
                countervar = countervar + 1;
                AbilitiesDescriptionTableBuffer = AbilitiesDescriptionTableBuffer + "C4F32408";
            }

            AbilitiesDescriptionTableNewOffset = modSearchFreeSpace.SearchFreeSpaceFourAligned(MainObject.LoadedRom, 0xFF, (long)(Strings.Len(AbilitiesDescriptionTableBuffer) / 2d), Conversions.ToLong("&H" + Ini.GetString(Conversions.ToString(MMainFunctions.GetIniFileLocation()), MainObject.Header, "StartSearchingForSpaceOffset", "800000"))).ToString();
            int argStart8 = Conversions.ToInteger(AbilitiesDescriptionTableNewOffset);

            HexFunctions.WriteHex(ref MainObject.LoadedRom, ref argStart8, ref AbilitiesDescriptionTableBuffer);
            Ini.WriteString(Conversions.ToString(MMainFunctions.GetIniFileLocation()), MainObject.Header, "AbilityDescriptionTable", Conversion.Hex(AbilitiesDescriptionTableNewOffset));

            // Repoint Abilities Description Table

            string localReverseHEX4()
            {
                string argHEXData = Conversion.Hex(Conversions.ToDouble(AbilitiesDescriptionTableNewOffset) + 134217728d); var ret = HexFunctions.ReverseHex(ref argHEXData); return(ret);
            }

            int    argStart9 = 0x1C4;
            string argData6  = localReverseHEX4();

            HexFunctions.WriteHex(ref MainObject.LoadedRom, ref argStart9, ref argData6);
            string localReverseHEX5()
            {
                string argHEXData = Conversion.Hex(Conversions.ToDouble(AbilitiesDescriptionTableNewOffset) + 134217728d); var ret = HexFunctions.ReverseHex(ref argHEXData); return(ret);
            }

            int    argStart10 = 0x1367A8;
            string argData7   = localReverseHEX5();

            HexFunctions.WriteHex(ref MainObject.LoadedRom, ref argStart10, ref argData7);


            // Updates the number of Abilities
            Ini.WriteString(Conversions.ToString(MMainFunctions.GetIniFileLocation()), MainObject.Header, "NumberOfAbilities", (Conversions.ToInteger(Ini.GetString(Conversions.ToString(MMainFunctions.GetIniFileLocation()), MainObject.Header, "NumberOfAbilities", "")) + Conversions.ToInteger(TextBox1.Text)).ToString());
            Label1.Text = "Number of abilities in ROM: " + Ini.GetString(Conversions.ToString(MMainFunctions.GetIniFileLocation()), MainObject.Header, "NumberOfAbilities", "");
            Cursor      = Cursors.Arrow;
            //Interaction.MsgBox("Abilities expanded successfully!");
        }