Exemplo n.º 1
0
        private static void SaveZippedPatch(string path, Context destinationContext)
        {
            using (ZipOutputStream stream = new ZipOutputStream(File.Open(path, FileMode.Create, FileAccess.ReadWrite)))
            {
                const string fileVersion = "1.0";
                bool         psp         = destinationContext == Context.US_PSP;

                WriteFileToZip(stream, "version", Encoding.UTF8.GetBytes(fileVersion));
                WriteFileToZip(stream, "type", Encoding.UTF8.GetBytes(destinationContext.ToString()));

                WriteFileToZip(stream, elementNames[ElementName.Abilities], Abilities.ToByteArray(destinationContext));
                WriteFileToZip(stream, elementNames[ElementName.AbilityAnimations], AbilityAnimations.ToByteArray());
                WriteFileToZip(stream, elementNames[ElementName.AbilityEffects], Abilities.ToEffectsByteArray());
                WriteFileToZip(stream, elementNames[ElementName.ItemAbilityEffects], Abilities.ToItemEffectsByteArray());
                WriteFileToZip(stream, elementNames[ElementName.ReactionAbilityEffects], Abilities.ToReactionEffectsByteArray());
                WriteFileToZip(stream, elementNames[ElementName.Items], Items.ToFirstByteArray());
                WriteFileToZip(stream, elementNames[ElementName.ItemAttributes], ItemAttributes.ToFirstByteArray());
                if (psp && Context == Context.US_PSP)
                {
                    WriteFileToZip(stream, elementNames[ElementName.PSPItems], Items.ToSecondByteArray());
                    WriteFileToZip(stream, elementNames[ElementName.PSPItemAttributes], ItemAttributes.ToSecondByteArray());
                    WriteFileToZip(stream, elementNames[ElementName.ENTD5], ENTDs.PSPEventsToByteArray());
                }
                WriteFileToZip(stream, elementNames[ElementName.Jobs], Jobs.ToByteArray(destinationContext));
                WriteFileToZip(stream, elementNames[ElementName.JobLevels], JobLevels.ToByteArray(destinationContext));
                WriteFileToZip(stream, elementNames[ElementName.MonsterSkills], MonsterSkills.ToByteArray(destinationContext));
                WriteFileToZip(stream, elementNames[ElementName.SkillSets], SkillSets.ToByteArray(destinationContext));
                WriteFileToZip(stream, elementNames[ElementName.ActionMenus], ActionMenus.ToByteArray(destinationContext));
                WriteFileToZip(stream, elementNames[ElementName.StatusAttributes], StatusAttributes.ToByteArray(destinationContext));
                WriteFileToZip(stream, elementNames[ElementName.InflictStatuses], InflictStatuses.ToByteArray());
                WriteFileToZip(stream, elementNames[ElementName.Poaching], PoachProbabilities.ToByteArray(destinationContext));
                WriteFileToZip(stream, elementNames[ElementName.ENTD1], ENTDs.ENTDs[0].ToByteArray());
                WriteFileToZip(stream, elementNames[ElementName.ENTD2], ENTDs.ENTDs[1].ToByteArray());
                WriteFileToZip(stream, elementNames[ElementName.ENTD3], ENTDs.ENTDs[2].ToByteArray());
                WriteFileToZip(stream, elementNames[ElementName.ENTD4], ENTDs.ENTDs[3].ToByteArray());
                WriteFileToZip(stream, elementNames[ElementName.MoveFindItems], MoveFind.ToByteArray());
                WriteFileToZip(stream, elementNames[ElementName.StoreInventories], StoreInventories.ToByteArray());
                WriteFileToZip(stream, elementNames[ElementName.Propositions], Propositions.ToByteArray());
                if (!AllPropositions.CanFixBuggyLevelBonuses(destinationContext))
                {
                    WriteFileToZip(stream, "BuggyPropositions", new byte[0]);
                }
            }
        }
Exemplo n.º 2
0
        public static void ConvertPsxPatchToPsp(string filename)
        {
            Dictionary <string, byte[]> fileList = new Dictionary <string, byte[]>();

            using (ZipFile zipFile = new ZipFile(filename))
            {
                foreach (ZipEntry entry in zipFile)
                {
                    byte[] bytes = new byte[entry.Size];
                    StreamUtils.ReadFully(zipFile.GetInputStream(entry), bytes);
                    fileList[entry.Name] = bytes;
                }
            }

            File.Delete(filename);

            if (fileList["type"].ToUTF8String() == Context.US_PSX.ToString())
            {
                List <byte> amBytes = new List <byte>(fileList["actionMenus"]);
                amBytes.AddRange(PSPResources.Binaries.ActionEvents.Sub(0xE0, 0xE2));
                fileList["actionMenus"] = amBytes.ToArray();

                AllJobs    aj             = new AllJobs(Context.US_PSX, fileList["jobs"]);
                List <Job> jobs           = new List <Job>(aj.Jobs);
                AllJobs    defaultPspJobs = new AllJobs(Context.US_PSP, PSPResources.Binaries.Jobs);
                for (int i = 0; i < jobs.Count; i++)
                {
                    jobs[i].Equipment.Unknown1  = defaultPspJobs.Jobs[i].Equipment.Unknown1;
                    jobs[i].Equipment.Unknown2  = defaultPspJobs.Jobs[i].Equipment.Unknown2;
                    jobs[i].Equipment.Unknown3  = defaultPspJobs.Jobs[i].Equipment.Unknown3;
                    jobs[i].Equipment.FellSword = defaultPspJobs.Jobs[i].Equipment.FellSword;
                    jobs[i].Equipment.LipRouge  = defaultPspJobs.Jobs[i].Equipment.LipRouge;
                    jobs[i].Equipment.Unknown6  = defaultPspJobs.Jobs[i].Equipment.Unknown6;
                    jobs[i].Equipment.Unknown7  = defaultPspJobs.Jobs[i].Equipment.Unknown7;
                    jobs[i].Equipment.Unknown8  = defaultPspJobs.Jobs[i].Equipment.Unknown8;
                }
                for (int i = 160; i < 169; i++)
                {
                    jobs.Add(defaultPspJobs.Jobs[i]);
                }
                ReflectionHelpers.SetFieldOrProperty(aj, "Jobs", jobs.ToArray());
                fileList["jobs"] = aj.ToByteArray(Context.US_PSP);

                JobLevels jl           = new JobLevels(Context.US_PSX, fileList["jobLevels"]);
                JobLevels pspJobLevels = new JobLevels(Context.US_PSP, PSPResources.Binaries.JobLevels);
                foreach (string jobName in new string[19] {
                    "Archer", "Arithmetician", "Bard", "BlackMage", "Chemist", "Dancer", "Dragoon", "Geomancer",
                    "Knight", "Mime", "Monk", "Mystic", "Ninja", "Orator", "Samurai", "Summoner", "Thief", "TimeMage", "WhiteMage"
                })
                {
                    Requirements psxR = ReflectionHelpers.GetFieldOrProperty <Requirements>(jl, jobName);
                    Requirements pspR = ReflectionHelpers.GetFieldOrProperty <Requirements>(pspJobLevels, jobName);
                    psxR.Unknown1    = pspR.Unknown1;
                    psxR.Unknown2    = pspR.Unknown2;
                    psxR.DarkKnight  = pspR.DarkKnight;
                    psxR.OnionKnight = pspR.OnionKnight;
                }
                ReflectionHelpers.SetFieldOrProperty(jl, "OnionKnight", pspJobLevels.OnionKnight);
                ReflectionHelpers.SetFieldOrProperty(jl, "DarkKnight", pspJobLevels.DarkKnight);
                ReflectionHelpers.SetFieldOrProperty(jl, "Unknown", pspJobLevels.Unknown);
                fileList["jobLevels"] = jl.ToByteArray(Context.US_PSP);

                List <byte> ssBytes = new List <byte>(fileList["skillSets"]);
                ssBytes.AddRange(PSPResources.Binaries.SkillSets.Sub(ssBytes.Count));
                fileList["skillSets"] = ssBytes.ToArray();

                fileList["entd5"] = PSPResources.Binaries.ENTD5.ToArray();



                fileList["type"] = Encoding.UTF8.GetBytes(Context.US_PSP.ToString());

                fileList["pspItemAttributes"] = PSPResources.Binaries.NewItemAttributes.ToArray();
                fileList["pspItems"]          = PSPResources.Binaries.NewItems.ToArray();

                if (!AllPropositions.CanFixBuggyLevelBonuses(Context.US_PSP))
                {
                    fileList["BuggyPropositions"] = new byte[0];
                }
                else if (fileList.ContainsKey("BuggyPropositions"))
                {
                    fileList.Remove("BuggyPropositions");
                }
            }

            using (FileStream outFile = new FileStream(filename, FileMode.Create, FileAccess.ReadWrite))
                using (ZipOutputStream output = new ZipOutputStream(outFile))
                {
                    foreach (KeyValuePair <string, byte[]> entry in fileList)
                    {
                        WriteFileToZip(output, entry.Key, entry.Value);
                    }
                }
        }