diff --git a/KHSave.Lib1/ISaveKh1.cs b/KHSave.Lib1/ISaveKh1.cs index 7d5ad1ea..99cbee97 100644 --- a/KHSave.Lib1/ISaveKh1.cs +++ b/KHSave.Lib1/ISaveKh1.cs @@ -24,6 +24,7 @@ public interface ISaveKh1 WorldType World { get; set; } uint Room { get; set; } uint SpawnLocation { get; set; } + Gummiship[] Gummiships { get; set; } void Write(Stream stream); } diff --git a/KHSave.Lib1/Models/Gummiship.cs b/KHSave.Lib1/Models/Gummiship.cs index 6983378f..87254c72 100644 --- a/KHSave.Lib1/Models/Gummiship.cs +++ b/KHSave.Lib1/Models/Gummiship.cs @@ -12,6 +12,6 @@ public class Gummiship [Data(Count = 10)] public byte[] ShipName { get; set; } [Data(Count = 22)] public byte[] Unk02 { get; set; } [Data(Count = 200)] public GummiBlock[] GummiBlocks { get; set; } - [Data(Count = 1466)] public byte[] Unk03 { get; set; } + [Data(Count = 1444)] public byte[] Unk03 { get; set; } } } diff --git a/KHSave.Lib1/SaveKh1.FinalMix.cs b/KHSave.Lib1/SaveKh1.FinalMix.cs index 336597b2..6f72ee32 100644 --- a/KHSave.Lib1/SaveKh1.FinalMix.cs +++ b/KHSave.Lib1/SaveKh1.FinalMix.cs @@ -33,6 +33,9 @@ public class SaveFinalMix : ISaveKh1 [Data(0x2044)] public uint Room { get; set; } [Data(0x2048)] public uint SpawnLocation { get; set; } + //Gummiships + [Data(0x241C, Count = 10)] public Gummiship[] Gummiships { get; set; } + [Data(0x16400)] public int AutoLock { get; set; } [Data(0x16404)] public int TargetLock { get; set; } [Data(0x16408)] public int Camera { get; set; } diff --git a/KHSave.SaveEditor.Kh1/MainView.xaml b/KHSave.SaveEditor.Kh1/MainView.xaml index 3e5aecd8..e970b9a5 100644 --- a/KHSave.SaveEditor.Kh1/MainView.xaml +++ b/KHSave.SaveEditor.Kh1/MainView.xaml @@ -17,5 +17,8 @@ + + + diff --git a/KHSave.SaveEditor.Kh1/ViewModels/GummiBlockViewModel.cs b/KHSave.SaveEditor.Kh1/ViewModels/GummiBlockViewModel.cs new file mode 100644 index 00000000..4159e366 --- /dev/null +++ b/KHSave.SaveEditor.Kh1/ViewModels/GummiBlockViewModel.cs @@ -0,0 +1,36 @@ +using KHSave.Lib1.Models; +using KHSave.Lib1.Types; +using KHSave.SaveEditor.Common.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Xe.Tools; + +namespace KHSave.SaveEditor.Kh1.ViewModels +{ + public class GummiBlockViewModel : BaseNotifyPropertyChanged + { + private readonly GummiBlock gummiblock; + public GummiBlockViewModel(GummiBlock gummiBlock) + { + this.gummiblock = gummiBlock; + GummiBlockTypes = new KhEnumListModel(); + } + public KhEnumListModel GummiBlockTypes { get; set; } + + public byte BlockPositionYX { get => gummiblock.BlockPositionYX; set => gummiblock.BlockPositionYX = value; } + public byte BlockPositionZ { get => gummiblock.BlockPositionZ; set => gummiblock.BlockPositionZ = value; } + public byte Unknown2 { get => gummiblock.Unknown2; set => gummiblock.Unknown2 = value; } + public byte Unknown3 { get => gummiblock.Unknown3; set => gummiblock.Unknown3 = value; } + public GummiBlocksType BlockID { get => gummiblock.BlockID; set => gummiblock.BlockID = value; } + public byte Unknown4 { get => gummiblock.Unknown4; set => gummiblock.Unknown4 = value; } + public byte Unknown5 { get => gummiblock.Unknown5; set => gummiblock.Unknown5 = value; } + public byte Unknown6 { get => gummiblock.Unknown6; set => gummiblock.Unknown6 = value; } + public byte ColorID { get => gummiblock.ColorID; set => gummiblock.ColorID = value; } + public byte Unknown7 { get => gummiblock.Unknown7; set => gummiblock.Unknown7 = value; } + public byte Unknown8 { get => gummiblock.Unknown8; set => gummiblock.Unknown8 = value; } + public byte Unknown9 { get => gummiblock.Unknown9; set => gummiblock.Unknown9 = value; } + } +} diff --git a/KHSave.SaveEditor.Kh1/ViewModels/GummiBlocksViewModel.cs b/KHSave.SaveEditor.Kh1/ViewModels/GummiBlocksViewModel.cs new file mode 100644 index 00000000..031469eb --- /dev/null +++ b/KHSave.SaveEditor.Kh1/ViewModels/GummiBlocksViewModel.cs @@ -0,0 +1,19 @@ +using KHSave.Lib1.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Xe.Tools.Wpf.Models; + +namespace KHSave.SaveEditor.Kh1.ViewModels +{ + public class GummiBlocksViewModel : GenericListModel + { + public GummiBlocksViewModel(GummiBlock[] gummiBlocks) : + base(gummiBlocks.Select(x => new GummiBlockViewModel(x))) + { + + } + } +} diff --git a/KHSave.SaveEditor.Kh1/ViewModels/GummiShipViewModel.cs b/KHSave.SaveEditor.Kh1/ViewModels/GummiShipViewModel.cs new file mode 100644 index 00000000..589e1064 --- /dev/null +++ b/KHSave.SaveEditor.Kh1/ViewModels/GummiShipViewModel.cs @@ -0,0 +1,28 @@ +using KHSave.Lib1; +using KHSave.Lib1.Models; +using KHSave.Lib1.Types; +using KHSave.SaveEditor.Common.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Xe.Tools; + +namespace KHSave.SaveEditor.Kh1.ViewModels +{ + public class GummiShipViewModel : BaseNotifyPropertyChanged + { + private readonly Gummiship gummiship; + + public GummiShipViewModel(Gummiship gummiship) + { + this.gummiship = gummiship; + new GummiBlocksViewModel(gummiship.GummiBlocks); + } + + public byte[] Name { get => gummiship.ShipName; set => gummiship.ShipName = value; } + public byte BlocksUsed { get => gummiship.BlocksUsed; set => gummiship.BlocksUsed = value; } + + } +} diff --git a/KHSave.SaveEditor.Kh1/ViewModels/GummiShipsViewModel.cs b/KHSave.SaveEditor.Kh1/ViewModels/GummiShipsViewModel.cs new file mode 100644 index 00000000..ee15b5c4 --- /dev/null +++ b/KHSave.SaveEditor.Kh1/ViewModels/GummiShipsViewModel.cs @@ -0,0 +1,18 @@ +using KHSave.Lib1; +using KHSave.Lib1.Models; +using System.Collections.Generic; +using System.Linq; +using Xe.Tools.Wpf.Commands; +using Xe.Tools.Wpf.Models; + +namespace KHSave.SaveEditor.Kh1.ViewModels +{ + public class GummiShipsViewModel : GenericListModel + { + public GummiShipsViewModel(Gummiship[] gummiships) : + base(gummiships.Select(x => new GummiShipViewModel(x))) + { + + } + } +} diff --git a/KHSave.SaveEditor.Kh1/ViewModels/Kh1ViewModel.cs b/KHSave.SaveEditor.Kh1/ViewModels/Kh1ViewModel.cs index 9f01579e..545841a0 100644 --- a/KHSave.SaveEditor.Kh1/ViewModels/Kh1ViewModel.cs +++ b/KHSave.SaveEditor.Kh1/ViewModels/Kh1ViewModel.cs @@ -27,16 +27,19 @@ public Kh1ViewModel() public InventoryViewModel Inventory { get; private set; } public PlayersViewModel Players { get; private set; } public KhEnumListModel Abilities { get; } + public GummiShipsViewModel GummiShips { get; private set; } public void RefreshUi() { System = new SystemViewModel(Save, this); Inventory = new InventoryViewModel(Save); Players = new PlayersViewModel(Save, this); + GummiShips = new GummiShipsViewModel(Save.Gummiships); OnPropertyChanged(nameof(System)); OnPropertyChanged(nameof(Inventory)); OnPropertyChanged(nameof(Players)); + OnPropertyChanged(nameof(GummiShips)); } public void OpenStream(Stream stream) diff --git a/KHSave.SaveEditor.Kh1/Views/GummiBlockView.xaml b/KHSave.SaveEditor.Kh1/Views/GummiBlockView.xaml new file mode 100644 index 00000000..f608227f --- /dev/null +++ b/KHSave.SaveEditor.Kh1/Views/GummiBlockView.xaml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/KHSave.SaveEditor.Kh1/Views/GummiBlockView.xaml.cs b/KHSave.SaveEditor.Kh1/Views/GummiBlockView.xaml.cs new file mode 100644 index 00000000..ba0b3ca5 --- /dev/null +++ b/KHSave.SaveEditor.Kh1/Views/GummiBlockView.xaml.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace KHSave.SaveEditor.Kh1.Views +{ + /// + /// Interaction logic for GummiBlockView.xaml + /// + public partial class GummiBlockView : UserControl + { + public GummiBlockView() + { + InitializeComponent(); + } + } +} diff --git a/KHSave.SaveEditor.Kh1/Views/GummiBlocksView.xaml b/KHSave.SaveEditor.Kh1/Views/GummiBlocksView.xaml new file mode 100644 index 00000000..e2c309e7 --- /dev/null +++ b/KHSave.SaveEditor.Kh1/Views/GummiBlocksView.xaml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + diff --git a/KHSave.SaveEditor.Kh1/Views/GummiBlocksView.xaml.cs b/KHSave.SaveEditor.Kh1/Views/GummiBlocksView.xaml.cs new file mode 100644 index 00000000..6906a83f --- /dev/null +++ b/KHSave.SaveEditor.Kh1/Views/GummiBlocksView.xaml.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace KHSave.SaveEditor.Kh1.Views +{ + /// + /// Interaction logic for GummiBlocksView.xaml + /// + public partial class GummiBlocksView : UserControl + { + public GummiBlocksView() + { + InitializeComponent(); + } + } +} diff --git a/KHSave.SaveEditor.Kh1/Views/GummiShipView.xaml b/KHSave.SaveEditor.Kh1/Views/GummiShipView.xaml new file mode 100644 index 00000000..f0dfcf44 --- /dev/null +++ b/KHSave.SaveEditor.Kh1/Views/GummiShipView.xaml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + diff --git a/KHSave.SaveEditor.Kh1/Views/GummiShipView.xaml.cs b/KHSave.SaveEditor.Kh1/Views/GummiShipView.xaml.cs new file mode 100644 index 00000000..f835a4fc --- /dev/null +++ b/KHSave.SaveEditor.Kh1/Views/GummiShipView.xaml.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace KHSave.SaveEditor.Kh1.Views +{ + /// + /// Interaction logic for GummiShipView.xaml + /// + public partial class GummiShipView : UserControl + { + public GummiShipView() + { + InitializeComponent(); + } + } +} diff --git a/KHSave.SaveEditor.Kh1/Views/GummiShipsView.xaml b/KHSave.SaveEditor.Kh1/Views/GummiShipsView.xaml new file mode 100644 index 00000000..c43a8ad9 --- /dev/null +++ b/KHSave.SaveEditor.Kh1/Views/GummiShipsView.xaml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + diff --git a/KHSave.SaveEditor.Kh1/Views/GummiShipsView.xaml.cs b/KHSave.SaveEditor.Kh1/Views/GummiShipsView.xaml.cs new file mode 100644 index 00000000..9af58292 --- /dev/null +++ b/KHSave.SaveEditor.Kh1/Views/GummiShipsView.xaml.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace KHSave.SaveEditor.Kh1.Views +{ + /// + /// Interaction logic for GummiShipsView.xaml + /// + public partial class GummiShipsView : UserControl + { + public GummiShipsView() + { + InitializeComponent(); + } + } +}