Example #1
0
        public void TestWriteWithoutChanges(string filePath) => File.OpenRead(filePath).Using(stream =>
        {
            var mem = new MemoryStream((int)stream.Length);
            SaveKh3.Read(stream).Write(mem);

            AssertSaveGame(SaveKh3.Read(mem.SetPosition(0)));
        });
Example #2
0
 public void TestIsValid(string filePath)
 {
     using (var stream = File.OpenRead(filePath))
     {
         Assert.True(SaveKh3.IsValid(stream));
     }
 }
Example #3
0
        public void TestWriteWithChanges(string filePath)
        {
            MemoryStream mem = null;

            File.OpenRead(filePath).Using(stream =>
            {
                var tempSave                   = SaveKh3.Read(stream);
                tempSave.TotalExp              = 1234;
                tempSave.Difficulty            = DifficultyType.Normal;
                tempSave.GameTime              = new TimeSpan(12, 34, 56);
                tempSave.MapPath               = "TestPath";
                tempSave.Shortcuts[0].Triangle = CommandType.SeaBlizzard;
                tempSave.Magics[0]             = CommandType.SeaFire;

                mem = new MemoryStream((int)stream.Length);
                tempSave.Write(mem);
            });

            var save = SaveKh3.Read(mem.SetPosition(0));

            Assert.Equal(1234, save.TotalExp);
            Assert.Equal(DifficultyType.Normal, save.Difficulty);
            Assert.Equal(new TimeSpan(12, 34, 56), save.GameTime);
            Assert.Equal("TestPath", save.MapPath);
            Assert.Equal(CommandType.SeaBlizzard, save.Shortcuts[0].Triangle);
            Assert.Equal(CommandType.SeaFire, save.Magics[0]);
        }
 public StorySimpleViewModel(SaveKh3 save)
 {
     Save = save;
     NewGamePlusCommand = new StoryCommand(save, "New Game+ (simulated)", "/Game/Levels/ew/ew_01/ew_01", new Dictionary <StoryFlagType, int>()
     {
         [StoryFlagType.TheFinalWorld] = 0,
         [StoryFlagType.Story33]       = 2000,
         [StoryFlagType.Story34]       = 0,
         [StoryFlagType.Story35]       = 0,
         [StoryFlagType.Story36]       = 0,
         [StoryFlagType.Story37]       = 0,
         [StoryFlagType.Story38]       = 0,
         [StoryFlagType.Story39]       = 0,
         [StoryFlagType.Story3A]       = 0,
         [StoryFlagType.Story3B]       = 0,
         [StoryFlagType.Story3C]       = 0,
     }, true);
     NewGamePlusGlitchyCommand = new StoryCommand(save, "New Game+ (but with story complete)", "/Game/Levels/ew/ew_01/ew_01", CompleteSave(new Dictionary <StoryFlagType, int>()
     {
         [StoryFlagType.TheFinalWorld] = 0,
     }), false);
     CompleteGameCommand    = new StoryCommand(save, "Complete game", "/Game/Levels/bt/bt_01/bt_01", CompleteSave(), false);
     LandOfDepartureCommand = new StoryCommand(save, "Back to Land of Departure (before Vanitas fight)", "/Game/Levels/dp/dp_01/dp_01", new Dictionary <StoryFlagType, int>()
     {
         [StoryFlagType.LandOfDeparture] = 0,
         [StoryFlagType.Story33]         = 2000,
         [StoryFlagType.Story34]         = 2000,
         [StoryFlagType.Story35]         = 2000,
         [StoryFlagType.Story36]         = 2000,
         [StoryFlagType.Story37]         = 2000,
         [StoryFlagType.Story38]         = 2000,
         [StoryFlagType.Story39]         = 2000,
         [StoryFlagType.Story3A]         = 0,
         [StoryFlagType.Story3B]         = 0,
         [StoryFlagType.Story3C]         = 0,
     }, false);
     KgBattleGameCommand = new StoryCommand(save, "Keyblade Graveyard, before 1000 Heartless", "/Game/Levels/kg/kg_01/kg_01", CompleteSave(new Dictionary <StoryFlagType, int>()
     {
         [StoryFlagType.ScalaAdCaelum]              = 0,
         [StoryFlagType.Story03]                    = 900,
         [StoryFlagType.Story04]                    = 100,
         [StoryFlagType.Story05]                    = 382,
         [StoryFlagType.TheFinalWorld]              = 2300,
         [StoryFlagType.Story0D]                    = 0,
         [StoryFlagType.Story0E]                    = 0,
         [StoryFlagType.Story0F]                    = 0,
         [StoryFlagType.Story10]                    = 0,
         [StoryFlagType.Story11]                    = 0,
         [StoryFlagType.Story12]                    = 0,
         [StoryFlagType.Story1A]                    = 10,
         [StoryFlagType.Story1E]                    = 0,
         [StoryFlagType.KeybladeGraveyard]          = 50,
         [StoryFlagType.KG_Riku_Xigbar]             = 0,
         [StoryFlagType.KG_Luxord_Marluxia_Larxene] = 0,
         [StoryFlagType.KG_Vanitas_Terra]           = 0,
         [StoryFlagType.KG_Xion_Saix]               = 0,
         [StoryFlagType.Story31]                    = 100,
         [StoryFlagType.Story32]                    = 0,
     }), false);
 }
Example #5
0
 public Kh3Test()
 {
     using (var stream = File.OpenRead(FilePath))
     {
         save = SaveKh3.Read(stream);
     }
 }
Example #6
0
        public void ReadDlcFieldsFor109()
        {
            var save = File.OpenRead(File109Path).Using(stream => SaveKh3.Read(stream));

            Assert.Equal("/Game/Levels/rg_DLC/rg_03/rg_03", save.DlcMapPath);
            Assert.Equal("rg_03_Lv_Start_01", save.DlcSpawnPoint);
        }
Example #7
0
        public void IgnoreDlcFieldsFor100()
        {
            var save = File.OpenRead(FilePath).Using(stream => SaveKh3.Read(stream));

            save.DlcMapPath    = "DlcMapPath";
            save.DlcSpawnPoint = "DlcSpawnPoint";

            Assert.Equal(string.Empty, save.DlcMapPath);
            Assert.Equal(string.Empty, save.DlcSpawnPoint);
        }
Example #8
0
        public void TestWriteWithoutChanges()
        {
            var mem = new MemoryStream(9758960);

            save.Write(mem);

            mem.Position = 0;
            save         = SaveKh3.Read(mem);
            TestRead();
        }
 public SystemViewModel(SaveKh3 save)
 {
     this.save     = save;
     Difficulty    = new KhEnumListModel <DifficultyType>(() => save.Difficulty, x => save.Difficulty = x);
     WorldIcon     = new KhEnumListModel <WorldType>(() => save.WorldLogo, x => save.WorldLogo = x);
     Location      = new KhEnumListModel <LocationType>(() => save.LocationName, x => save.LocationName = x);
     CharacterIcon = new KhEnumListModel <CharacterIconType>(() => save.MySaveIcon, x => save.MySaveIcon = x);
     RoomWorld     = new KhEnumListModel <GenericEntryModel <string, string>, WorldType, string>(
         () => RoomWorldId,
         x => RoomWorldId = x,
         x => WorldAttribute.GetWorldId(x));
     DesireChoice = new KhEnumListModel <DesireChoice>(() => save.DesireChoice, x => save.DesireChoice = x);
     PowerChoice  = new KhEnumListModel <PowerChoice>(() => save.PowerChoice, x => save.PowerChoice = x);
 }
Example #10
0
        public ShortcutsViewModel(SaveKh3 save)
        {
            _save     = save;
            Shortcut1 = new ShortcutGroupViewModel(_save, 0);
            Shortcut2 = new ShortcutGroupViewModel(_save, 1);
            Shortcut3 = new ShortcutGroupViewModel(_save, 2);

            Magic1 = new ItemComboBoxModel <CommandType>(() => save.Magics[0], x => save.Magics[0] = x);
            Magic2 = new ItemComboBoxModel <CommandType>(() => save.Magics[1], x => save.Magics[1] = x);
            Magic3 = new ItemComboBoxModel <CommandType>(() => save.Magics[2], x => save.Magics[2] = x);
            Magic4 = new ItemComboBoxModel <CommandType>(() => save.Magics[3], x => save.Magics[3] = x);
            Magic5 = new ItemComboBoxModel <CommandType>(() => save.Magics[4], x => save.Magics[4] = x);
            Magic6 = new ItemComboBoxModel <CommandType>(() => save.Magics[5], x => save.Magics[5] = x);
            Link1  = new ItemComboBoxModel <CommandType>(() => save.Links[0], x => save.Links[0] = x);
            Link2  = new ItemComboBoxModel <CommandType>(() => save.Links[1], x => save.Links[1] = x);
            Link3  = new ItemComboBoxModel <CommandType>(() => save.Links[2], x => save.Links[2] = x);
            Link4  = new ItemComboBoxModel <CommandType>(() => save.Links[3], x => save.Links[3] = x);
            Link5  = new ItemComboBoxModel <CommandType>(() => save.Links[4], x => save.Links[4] = x);
        }
Example #11
0
            public ShortcutGroupViewModel(SaveKh3 save, int groupIndex)
            {
                _save = save;

                Circle = new ItemComboBoxModel <CommandType>(
                    () => save.Shortcuts[groupIndex].Circle,
                    x => save.Shortcuts[groupIndex].Circle = x);

                Triangle = new ItemComboBoxModel <CommandType>(
                    () => save.Shortcuts[groupIndex].Triangle,
                    x => save.Shortcuts[groupIndex].Triangle = x);

                Square = new ItemComboBoxModel <CommandType>(
                    () => save.Shortcuts[groupIndex].Square,
                    x => save.Shortcuts[groupIndex].Square = x);

                Cross = new ItemComboBoxModel <CommandType>(
                    () => save.Shortcuts[groupIndex].Cross,
                    x => save.Shortcuts[groupIndex].Cross = x);
            }
Example #12
0
        public StoryCommand(
            SaveKh3 save,
            string name,
            string map,
            Dictionary <StoryFlagType, int> flags,
            bool zeroEverything = false)
            : base(x =>
        {
            if (!ThrowConfirmationMessage(name))
            {
                return;
            }

            if (!string.IsNullOrEmpty(map))
            {
                save.MapPath  = map;
                save.MapSpawn = "default";
            }

            if (zeroEverything)
            {
                for (var i = 0; i < save.Storyflags.Count; i++)
                {
                    save.Storyflags[i] = 0;
                }
            }

            for (var i = 0; i < save.Storyflags.Count; i++)
            {
                if (flags.TryGetValue((StoryFlagType)i, out var newFlag))
                {
                    save.Storyflags[i] = newFlag;
                }
            }
        })
        {
            Name = name;
        }
Example #13
0
        public void TestWriteWithChanges()
        {
            save.TotalExp              = 1234;
            save.Difficulty            = DifficultyType.Normal;
            save.GameTime              = new TimeSpan(12, 34, 56);
            save.MapPath               = "TestPath";
            save.Shortcuts[0].Triangle = CommandType.SeaBlizzard;
            save.Magics[0]             = CommandType.SeaFire;

            var mem = new MemoryStream(9758960);

            save.Write(mem);

            mem.Position = 0;
            var save2 = SaveKh3.Read(mem);

            Assert.Equal(1234, save2.TotalExp);
            Assert.Equal(DifficultyType.Normal, save2.Difficulty);
            Assert.Equal(new TimeSpan(12, 34, 56), save2.GameTime);
            Assert.Equal("TestPath", save2.MapPath);
            Assert.Equal(CommandType.SeaBlizzard, save2.Shortcuts[0].Triangle);
            Assert.Equal(CommandType.SeaFire, save2.Magics[0]);
        }
Example #14
0
 public MaterialModel(SaveKh3 save, int index)
 {
     this.save  = save;
     this.index = index;
 }
Example #15
0
 public StoryViewModel(SaveKh3 save)
 {
     Advanced = new StoryAdvancedViewModel(save.Storyflags);
     Simple   = new StorySimpleViewModel(save);
 }
Example #16
0
 public void TestChecksum()
 {
     File.OpenRead(FilePath).Using(stream => Assert.Equal(0xE5783B63, SaveKh3.CalculateChecksum(stream)));
 }
Example #17
0
 public void ReadSaveTest(string filePath) =>
 File.OpenRead(filePath).Using(stream =>
                               AssertSaveGame(SaveKh3.Read(stream)));
Example #18
0
 public Kh3ViewModel(Stream stream)
 {
     Save = SaveKh3.Read(stream);
     RefreshUi();
 }
Example #19
0
 public void OpenStream(Stream stream)
 {
     Save = SaveKh3.Read(stream);
     RefreshUi();
 }
 public MaterialsViewModel(SaveKh3 save) :
     base(save.MaterialsCount
          .Where((_, i) => Global.CanDisplay((MaterialType)i))
          .Select((_, i) => new MaterialModel(save, i)))
 {
 }