Пример #1
0
        private void extratToClick(object sender, EventArgs e)
        {
            if (folderdialog.ShowDialog(this) != DialogResult.OK)
            {
                return;
            }

            ExtractResourcesDialog.LockedFlipX =
                Animation.RequireFlipX(animationCreator1.Animations);
            ExtractResourcesDialog.LockedFlipY =
                Animation.RequireFlipY(animationCreator1.Animations);
            if (ExtractResourcesDialog.Show(this) != DialogResult.OK)
            {
                return;
            }
            string path = folderdialog.SelectedPath;

            path += "\\";

            int boolcounter = 0;

            if (ExtractResourcesDialog.Code)
            {
                boolcounter++;
            }
            if (ExtractResourcesDialog.SP1)
            {
                boolcounter++;
            }
            if (ExtractResourcesDialog.SP2)
            {
                boolcounter++;
            }
            if (ExtractResourcesDialog.SP3)
            {
                boolcounter++;
            }
            if (ExtractResourcesDialog.SP4)
            {
                boolcounter++;
            }
            if (ExtractResourcesDialog.Palette)
            {
                boolcounter++;
            }

            if (boolcounter == 0)
            {
                MessageBox.Show("Congratulations, you extract nothing, eat a cookie.", "?????????", MessageBoxButtons.OK, MessageBoxIcon.Hand);
            }
            else if (boolcounter > 1)
            {
                path += ExtractResourcesDialog.ProjectName;
                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }
                path += "\\";
            }
            Tuple <string, string, string, byte[]> t = null;

            if (NewProjectWindow.ProjectType == 1)
            {
                t = Frame.GetDynamicSource(frameCreator1.Frames);
            }

            if (ExtractResourcesDialog.Code)
            {
                RefreshCode();
                string s = codeEditorController1.CodeEditor.Text;
                Frame.GetFramesIndexs(frameCreator1.Frames);

                s = s.Replace(">ResTiles.", "#$" + Frame.TilesUsed.ToString("X2"));
                s = s.Replace("dw >resoff.", t.Item1);
                s = s.Replace("dw >ressz.", t.Item2);
                s = s.Replace(">lns.", t.Item3);
                if (t.Item3 == "!Scratch52")
                {
                    s = s.Replace(">difrows.", "LDA !FrameIndex,x\n\tTAY\n\tLDA ResourceLastRow,y\n\tSTA !Scratch52");
                }
                else
                {
                    s = s.Replace(">difrows.", "");
                }
                HitBox[] hbs = Frame.GetFramesHitboxesFromFrameList(frameCreator1.Frames,
                                                                    ExtractResourcesDialog.FlipX,
                                                                    ExtractResourcesDialog.FlipY);
                s = s.Replace("dw >intAdd.",
                              Frame.GetFramesFlippersFromFrameList(frameCreator1.Frames,
                                                                   ExtractResourcesDialog.FlipX,
                                                                   ExtractResourcesDialog.FlipY));
                s = s.Replace("dw >hbst.",
                              HitBox.GetHitboxesStartsFromArray(hbs));
                s = s.Replace("dw >fhbsInd.",
                              Frame.GetFramesHitboxesIndexersFromFrameList(frameCreator1.Frames,
                                                                           ExtractResourcesDialog.FlipX,
                                                                           ExtractResourcesDialog.FlipY));
                s = s.Replace("db >fhbs.",
                              Frame.GetFramesHitboxesIdsFromFrameList(frameCreator1.Frames, hbs,
                                                                      ExtractResourcesDialog.FlipX,
                                                                      ExtractResourcesDialog.FlipY));
                s = s.Replace("db >hbs.",
                              HitBox.GetHitboxesFromArray(hbs, interactionMenu1.GetActionNames()));
                s = s.Replace("dw >hbacts.",
                              interactionMenu1.GetActionString(codeEditorController1.CodeEditor.Text));
                s = s.Replace("dw >fls.",
                              Frame.GetFramesLengthFromFrameList(frameCreator1.Frames,
                                                                 ExtractResourcesDialog.FlipX,
                                                                 ExtractResourcesDialog.FlipY));
                s = s.Replace("dw >ffps.",
                              Frame.GetFramesFlippersFromFrameList(frameCreator1.Frames,
                                                                   ExtractResourcesDialog.FlipX,
                                                                   ExtractResourcesDialog.FlipY));
                s = s.Replace("dw >fsp.",
                              Frame.GetFramesStartsFromFrameList(frameCreator1.Frames,
                                                                 ExtractResourcesDialog.FlipX,
                                                                 ExtractResourcesDialog.FlipY));
                s = s.Replace("dw >fep.",
                              Frame.GetFramesEndsFromFrameList(frameCreator1.Frames,
                                                               ExtractResourcesDialog.FlipX,
                                                               ExtractResourcesDialog.FlipY));
                s = s.Replace("db >tiles.",
                              Frame.GetTilesCodesFromFrameList(frameCreator1.Frames,
                                                               ExtractResourcesDialog.FlipX,
                                                               ExtractResourcesDialog.FlipY));
                bool sameprop = Frame.SameProp(frameCreator1.Frames);
                s = s.Replace("db >props.",
                              Frame.GetTilesPropertiesFromFrameList(frameCreator1.Frames,
                                                                    ExtractResourcesDialog.FlipX,
                                                                    ExtractResourcesDialog.FlipY,
                                                                    sameprop));
                s = s.Replace("db >xdisps.",
                              Frame.GetTilesXDispFromFrameList(frameCreator1.Frames,
                                                               ExtractResourcesDialog.FlipX,
                                                               ExtractResourcesDialog.FlipY));
                s = s.Replace("db >ydisps.",
                              Frame.GetTilesYDispFromFrameList(frameCreator1.Frames,
                                                               ExtractResourcesDialog.FlipX,
                                                               ExtractResourcesDialog.FlipY));
                s = s.Replace("db >sizes.",
                              Frame.GetTilesSizesFromFrameList(frameCreator1.Frames,
                                                               ExtractResourcesDialog.FlipX,
                                                               ExtractResourcesDialog.FlipY));
                s = s.Replace("dw >anl.",
                              Animation.GetAnimationLenghts(animationCreator1.Animations));
                s = s.Replace("dw >alt.",
                              Animation.GetAnimationLastTransitions(animationCreator1.Animations));
                s = s.Replace("dw >ai.",
                              Animation.GetAnimationIndexers(animationCreator1.Animations));
                s = s.Replace("db >af.",
                              Animation.GetAnimationFrames(animationCreator1.Animations));
                s = s.Replace("db >aft.",
                              Animation.GetAnimationTimes(animationCreator1.Animations));
                s = s.Replace("db >aff.",
                              Animation.GetAnimationFlips(animationCreator1.Animations));

                s = File.ReadAllText(@".\ASM\Defines.asm") + "\n" + s;
                if (File.Exists(path + ExtractResourcesDialog.ProjectName + ".asm"))
                {
                    File.Delete(path + ExtractResourcesDialog.ProjectName + ".asm");
                }
                File.WriteAllText(path + ExtractResourcesDialog.ProjectName + ".asm", s);
            }
            if (ExtractResourcesDialog.SP1 || ExtractResourcesDialog.SP2)
            {
                if (File.Exists(path + ExtractResourcesDialog.ProjectName + ".bin"))
                {
                    File.Delete(path + ExtractResourcesDialog.ProjectName + ".bin");
                }
                File.WriteAllBytes(path + ExtractResourcesDialog.ProjectName + ".bin", t.Item4);
                byte[] sp12 = spriteGFXBox1.GetGFX();
                if (ExtractResourcesDialog.SP1)
                {
                    byte[] sp1 = new byte[sp12.Length / 2];

                    for (int i = 0; i < sp1.Length; i++)
                    {
                        sp1[i] = sp12[i];
                    }
                    if (File.Exists(path + ExtractResourcesDialog.ProjectName + "SP1.bin"))
                    {
                        File.Delete(path + ExtractResourcesDialog.ProjectName + "SP1.bin");
                    }
                    File.WriteAllBytes(path + ExtractResourcesDialog.ProjectName + "SP1.bin", sp1);
                }
                if (ExtractResourcesDialog.SP2)
                {
                    byte[] sp2 = new byte[sp12.Length / 2];

                    for (int i = 0; i < sp2.Length; i++)
                    {
                        sp2[i] = sp12[i + sp2.Length];
                    }
                    if (File.Exists(path + ExtractResourcesDialog.ProjectName + "SP2.bin"))
                    {
                        File.Delete(path + ExtractResourcesDialog.ProjectName + "SP2.bin");
                    }
                    File.WriteAllBytes(path + ExtractResourcesDialog.ProjectName + "SP2.bin", sp2);
                }
            }
            if (ExtractResourcesDialog.SP3 || ExtractResourcesDialog.SP4)
            {
                byte[] sp34 = spriteGFXBox2.GetGFX();
                if (ExtractResourcesDialog.SP3)
                {
                    byte[] sp3 = new byte[sp34.Length / 2];

                    for (int i = 0; i < sp3.Length; i++)
                    {
                        sp3[i] = sp34[i];
                    }
                    if (File.Exists(path + ExtractResourcesDialog.ProjectName + "SP3.bin"))
                    {
                        File.Delete(path + ExtractResourcesDialog.ProjectName + "SP3.bin");
                    }
                    File.WriteAllBytes(path + ExtractResourcesDialog.ProjectName + "SP3.bin", sp3);
                }
                if (ExtractResourcesDialog.SP4)
                {
                    byte[] sp4 = new byte[sp34.Length / 2];

                    for (int i = 0; i < sp4.Length; i++)
                    {
                        sp4[i] = sp34[i + sp4.Length];
                    }
                    if (File.Exists(path + ExtractResourcesDialog.ProjectName + "SP4.bin"))
                    {
                        File.Delete(path + ExtractResourcesDialog.ProjectName + "SP4.bin");
                    }
                    File.WriteAllBytes(path + ExtractResourcesDialog.ProjectName + "SP4.bin", sp4);
                }
            }
            if (ExtractResourcesDialog.Palette)
            {
                byte[] pal = ColorPalette.SaveGlobalPalette();
                if (File.Exists(path + ExtractResourcesDialog.ProjectName + "Palette.pal"))
                {
                    File.Delete(path + ExtractResourcesDialog.ProjectName + "Palette.pal");
                }
                File.WriteAllBytes(path + ExtractResourcesDialog.ProjectName + "Palette.pal", pal);
            }
            MessageBox.Show("Resources extracted successfully", "Extract Resources", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }