コード例 #1
0
        public static void CopyParticle(FileSource fieldSource, string srcField, string destField)
        {
            var srcPath    = FieldScript.GetFieldPath(srcField);
            var destPath   = FieldScript.GetFieldPath(destField);
            var srcSource  = new FileSource(srcPath, fieldSource);
            var destSource = new FileSource(destPath, fieldSource);

            destSource.ReplaceFile(Path.Combine(destPath, destField + ".pmd"), srcSource.GetFile(Path.Combine(srcPath, srcField + ".pmd")));
            destSource.ReplaceFile(Path.Combine(destPath, destField + ".pmp"), srcSource.GetFile(Path.Combine(srcPath, srcField + ".pmp")));
            fieldSource.Encode();
        }
コード例 #2
0
ファイル: AbilityShuffle.cs プロジェクト: jewinters/maelstrom
        private static void SwapSets(FileSource mainSource, Random random, Kernel kernel, Init init)
        {
            var unmatchedGFs = Enumerable.Range(0, 16).ToList();
            var cleanKernel  = new Kernel(mainSource.GetFile(Globals.KernelPath));
            var cleanInit    = new Init(mainSource.GetFile(Globals.InitPath));

            for (int i = 0; i < 16; i++)
            {
                var matchedGF = unmatchedGFs[random.Next(unmatchedGFs.Count)];
                unmatchedGFs.Remove(matchedGF);
                init.GFs[i].Abilities               = cleanInit.GFs[matchedGF].Abilities;
                init.GFs[i].CurrentAbility          = cleanInit.GFs[matchedGF].CurrentAbility;
                kernel.JunctionableGFs[i].Abilities = cleanKernel.JunctionableGFs[matchedGF].Abilities;
            }
        }
コード例 #3
0
        // extract from field archive & construct
        public static FieldScript FromSource(FileSource fieldSource, string fieldName)
        {
            var fieldPath   = GetFieldPath(fieldName);
            var innerSource = new FileSource(fieldPath, fieldSource);

            return(FromBytes(innerSource.GetFile(fieldPath + "\\" + fieldName + Globals.ScriptFileExtension)));
        }
コード例 #4
0
        public void AddWeapons(FileSource mainSource, List <WeaponUpgrade> upgrades)
        {
            Weapons = new Section();
            Weapons.Heading("Weapons");

            var kernel = new Kernel(mainSource.GetFile(Globals.KernelPath));

            for (var i = 0; i < upgrades.Count; i++)
            {
                Weapons.Bullet(string.Format("{0} - {1}0g", kernel.Weapons[i].Name, upgrades[i].Price));
                Weapons.Bullet(string.Format("{0} x{1}", Item.Lookup[upgrades[i].Item1].Name, upgrades[i].Item1Quantity), 1);
                if (upgrades[i].Item2 != 0)
                {
                    Weapons.Bullet(string.Format("{0} x{1}", Item.Lookup[upgrades[i].Item2].Name, upgrades[i].Item2Quantity), 1);
                }
                if (upgrades[i].Item3 != 0)
                {
                    Weapons.Bullet(string.Format("{0} x{1}", Item.Lookup[upgrades[i].Item3].Name, upgrades[i].Item3Quantity), 1);
                }
                if (upgrades[i].Item4 != 0)
                {
                    Weapons.Bullet(string.Format("{0} x{1}", Item.Lookup[upgrades[i].Item4].Name, upgrades[i].Item4Quantity), 1);
                }
                Weapons.NewLine();
            }
        }
コード例 #5
0
        public static void Apply(FileSource menuSource)
        {
            // pull the relevant file out of the archive
            var file      = menuSource.GetFile(ArchivePath);
            var mes3bytes = new ArraySegment <byte>(file, FileOffset, FileLength);
            var mes3      = TextFile.FromBytes(mes3bytes.ToArray(), true);

            // set names
            mes3.Pages[NamesPage].Strings[Squall]    = Properties.Settings.Default.NameSquall;
            mes3.Pages[NamesPage].Strings[Rinoa]     = Properties.Settings.Default.NameRinoa;
            mes3.Pages[NamesPage].Strings[Angelo]    = Properties.Settings.Default.NameAngelo;
            mes3.Pages[NamesPage].Strings[Quezacotl] = Properties.Settings.Default.NameQuezacotl;
            mes3.Pages[NamesPage].Strings[Shiva]     = Properties.Settings.Default.NameShiva;
            mes3.Pages[NamesPage].Strings[Ifrit]     = Properties.Settings.Default.NameIfrit;
            mes3.Pages[NamesPage].Strings[Siren]     = Properties.Settings.Default.NameSiren;
            mes3.Pages[NamesPage].Strings[Brothers]  = Properties.Settings.Default.NameBrothers;
            mes3.Pages[NamesPage].Strings[Diablos]   = Properties.Settings.Default.NameDiablos;
            mes3.Pages[NamesPage].Strings[Carbuncle] = Properties.Settings.Default.NameCarbuncle;
            mes3.Pages[NamesPage].Strings[Leviathan] = Properties.Settings.Default.NameLeviathan;
            mes3.Pages[NamesPage].Strings[Pandemona] = Properties.Settings.Default.NamePandemona;
            mes3.Pages[NamesPage].Strings[Cerberus]  = Properties.Settings.Default.NameCerberus;
            mes3.Pages[NamesPage].Strings[Alexander] = Properties.Settings.Default.NameAlexander;
            mes3.Pages[NamesPage].Strings[Doomtrain] = Properties.Settings.Default.NameDoomtrain;
            mes3.Pages[NamesPage].Strings[Bahamut]   = Properties.Settings.Default.NameBahamut;
            mes3.Pages[NamesPage].Strings[Cactuar]   = Properties.Settings.Default.NameCactuar;
            mes3.Pages[NamesPage].Strings[Tonberry]  = Properties.Settings.Default.NameTonberry;
            mes3.Pages[NamesPage].Strings[Eden]      = Properties.Settings.Default.NameEden;
            mes3.Pages[NamesPage].Strings[Boko]      = Properties.Settings.Default.NameBoko;
            mes3.Pages[NamesPage].Strings[Griever]   = Properties.Settings.Default.NameGriever;

            // apply changes
            Array.Copy(mes3.Encode(), 0, file, FileOffset, FileLength);
            menuSource.ReplaceFile(ArchivePath, file);
        }
コード例 #6
0
ファイル: AbilityShuffle.cs プロジェクト: jewinters/maelstrom
        public static List <JunctionableGF> Randomise(FileSource mainSource, int seed, State settings)
        {
            var random = new Random(seed + 1);
            var kernel = new Kernel(mainSource.GetFile(Globals.KernelPath));
            var init   = new Init(mainSource.GetFile(Globals.InitPath));

            if (settings.GfAbilitiesSwapSets)
            {
                SwapSets(mainSource, random, kernel, init);
            }
            else
            {
                GenerateRandomSets(settings, random, kernel, init);
            }

            ModifyAPCosts(kernel);

            SaveChanges(mainSource, kernel, init);
            return(kernel.JunctionableGFs.ToList());
        }
コード例 #7
0
ファイル: WeaponUpgrade.cs プロジェクト: jewinters/maelstrom
        public static List <WeaponUpgrade> ReadAllFromSource(FileSource menuSource)
        {
            var result = new List <WeaponUpgrade>();

            using (var stream = new MemoryStream(menuSource.GetFile(Globals.WeaponUpgradePath).ToArray()))
                using (var reader = new BinaryReader(stream))
                {
                    for (int i = 0; i < 33; i++)
                    {
                        result.Add(new WeaponUpgrade(reader.ReadBytes(12)));
                    }
                }

            return(result);
        }
コード例 #8
0
ファイル: AbilityShuffle.cs プロジェクト: Enry9201/maelstrom
        public static void Randomise(FileSource mainSource, int seed)
        {
            var random = new Random(seed);
            var kernel = new Kernel(mainSource.GetFile(Globals.KernelPath));

            for (int i = 0; i < 16; i++)
            {
                for (int j = 0; j < 21; j++)
                {
                    kernel.JunctionableGFs[i].Abilities[j].Ability  = (byte)random.Next(1, 116);
                    kernel.JunctionableGFs[i].Abilities[j].Unlocker = 0;
                }
            }
            mainSource.ReplaceFile(Globals.KernelPath, kernel.Encode());
        }
コード例 #9
0
        public static void Apply(FileSource menuSource, State settings)
        {
            // pull the relevant file out of the archive
            var file      = menuSource.GetFile(ArchivePath);
            var mes3bytes = file.Skip(FileOffset).Take(FileLength);
            var mes3      = TextFile.FromBytes(mes3bytes, true);

            // set names
            mes3.Pages[NamesPage].Strings[Squall]    = settings.NameSquall;
            mes3.Pages[NamesPage].Strings[Rinoa]     = settings.NameRinoa;
            mes3.Pages[NamesPage].Strings[Angelo]    = settings.NameAngelo;
            mes3.Pages[NamesPage].Strings[Quezacotl] = settings.NameQuezacotl;
            mes3.Pages[NamesPage].Strings[Shiva]     = settings.NameShiva;
            mes3.Pages[NamesPage].Strings[Ifrit]     = settings.NameIfrit;
            mes3.Pages[NamesPage].Strings[Siren]     = settings.NameSiren;
            mes3.Pages[NamesPage].Strings[Brothers]  = settings.NameBrothers;
            mes3.Pages[NamesPage].Strings[Diablos]   = settings.NameDiablos;
            mes3.Pages[NamesPage].Strings[Carbuncle] = settings.NameCarbuncle;
            mes3.Pages[NamesPage].Strings[Leviathan] = settings.NameLeviathan;
            mes3.Pages[NamesPage].Strings[Pandemona] = settings.NamePandemona;
            mes3.Pages[NamesPage].Strings[Cerberus]  = settings.NameCerberus;
            mes3.Pages[NamesPage].Strings[Alexander] = settings.NameAlexander;
            mes3.Pages[NamesPage].Strings[Doomtrain] = settings.NameDoomtrain;
            mes3.Pages[NamesPage].Strings[Bahamut]   = settings.NameBahamut;
            mes3.Pages[NamesPage].Strings[Cactuar]   = settings.NameCactuar;
            mes3.Pages[NamesPage].Strings[Tonberry]  = settings.NameTonberry;
            mes3.Pages[NamesPage].Strings[Eden]      = settings.NameEden;
            mes3.Pages[NamesPage].Strings[Boko]      = settings.NameBoko;
            mes3.Pages[NamesPage].Strings[Griever]   = settings.NameGriever;

            // apply changes
            var newFile = file.Take(FileOffset).ToList();

            newFile.AddRange(mes3.Encode());
            newFile.AddRange(file.Skip(FileOffset + FileLength));
            menuSource.ReplaceFile(ArchivePath, newFile);
        }
コード例 #10
0
 public static MessageFile FromSource(FileSource source, string path)
 {
     return(FromBytes(source.GetFile(path)));
 }
コード例 #11
0
        public static List <JunctionableGF> Randomise(FileSource mainSource, int seed, State settings)
        {
            var random = new Random(seed + 1);
            var kernel = new Kernel(mainSource.GetFile(Globals.KernelPath));
            var init   = new Init(mainSource.GetFile(Globals.InitPath));

            if (settings.GfAbilitiesSwapSets)
            {
                var unmatchedGFs = Enumerable.Range(0, 16).ToList();
                var cleanKernel  = new Kernel(mainSource.GetFile(Globals.KernelPath));
                var cleanInit    = new Init(mainSource.GetFile(Globals.InitPath));

                for (int i = 0; i < 16; i++)
                {
                    var matchedGF = unmatchedGFs[random.Next(unmatchedGFs.Count)];
                    unmatchedGFs.Remove(matchedGF);
                    init.GFs[i].Abilities               = cleanInit.GFs[matchedGF].Abilities;
                    init.GFs[i].CurrentAbility          = cleanInit.GFs[matchedGF].CurrentAbility;
                    kernel.JunctionableGFs[i].Abilities = cleanKernel.JunctionableGFs[matchedGF].Abilities;
                }
            }
            else
            {
                var includedAbilities = Abilities.Where(a => !a.ItemExclusive || settings.GfAbilitiesIncludeItemOnly).ToList();

                for (int i = 0; i < 16; i++)
                {
                    // clear auto-unlocked abilities
                    init.GFs[i].Abilities = new BitArray(init.GFs[i].Abilities.Length, false);

                    var unusedAbilities = includedAbilities.Select(a => a.AbilityID).ToList();
                    for (int j = 0; j < 21; j++)
                    {
                        // guarantee basic commands (magic, gf, draw, item)
                        if (j < 4 && settings.GfAbilitiesBasics)
                        {
                            var id = j + 20;
                            kernel.JunctionableGFs[i].Abilities[j].Ability  = (byte)id;
                            kernel.JunctionableGFs[i].Abilities[j].Unlocker = 0;
                            init.GFs[i].Abilities[id] = true;
                            unusedAbilities.Remove(id);
                            continue;
                        }

                        // roll abilities
                        var ability = unusedAbilities[random.Next(unusedAbilities.Count)];
                        kernel.JunctionableGFs[i].Abilities[j].Ability  = (byte)ability;
                        kernel.JunctionableGFs[i].Abilities[j].Unlocker = 0;
                        init.GFs[i].Abilities[ability] = (ability >= 20 && ability <= 23);
                        unusedAbilities.Remove(ability);
                    }

                    // sort abilities
                    kernel.JunctionableGFs[i].Abilities = kernel.JunctionableGFs[i].Abilities.OrderBy(a => a.Ability == 0 ? byte.MaxValue : a.Ability).ToArray();

                    // clear ability being learned
                    init.GFs[i].CurrentAbility = 0;
                }
            }

            // reduce "empty" cost
            kernel.Abilities[24].APCost = 60;

            // increase "ribbon" cost
            kernel.Abilities[77].APCost = 250;

            // save changes
            mainSource.ReplaceFile(Globals.KernelPath, kernel.Encode());
            mainSource.ReplaceFile(Globals.InitPath, init.Encode());
            return(kernel.JunctionableGFs.ToList());
        }
コード例 #12
0
 public static EncounterFile FromSource(FileSource source, string path)
 {
     return(FromBytes(source.GetFile(path)));
 }