├── APMMHXSaveEditor ├── app.ico ├── App.config ├── Properties │ ├── Settings.settings │ ├── Settings.Designer.cs │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ └── Resources.resx ├── Data │ ├── Shop.cs │ ├── SaveFile.cs │ ├── GuildCard.cs │ ├── Item.cs │ ├── Equipment.cs │ ├── Constants.cs │ ├── Palico.cs │ ├── Player.cs │ └── Offsets.cs ├── Program.cs ├── Util │ ├── Converters.cs │ └── Tools.cs ├── Forms │ ├── AboutDialog.cs │ ├── PalicoActionEditorDialog.cs │ ├── SetItemBoxItemAmountDialog.cs │ ├── PalicoSkillEditorDialog.cs │ ├── ShoutoutTextEditDialog.cs │ ├── ExportEquipmentBoxDialog.cs │ ├── ItemEditDialog.cs │ ├── ImportEquipmentBoxDialog.cs │ ├── ImportItemBoxListDialog.cs │ ├── ShoutoutsEditDialog.cs │ ├── AboutDialog.Designer.cs │ ├── SetItemBoxItemAmountDialog.Designer.cs │ ├── PalicoSkillEditorDialog.Designer.cs │ ├── PalicoActionEditorDialog.Designer.cs │ ├── ExportEquipmentBoxDialog.Designer.cs │ ├── ShoutoutTextEditDialog.Designer.cs │ ├── EquipmentEditDialog.cs │ ├── ItemEditDialog.Designer.cs │ ├── AboutDialog.resx │ ├── ItemEditDialog.resx │ ├── EquipmentEditDialog.resx │ ├── PalicoEditDialog.resx │ ├── ShoutoutsEditDialog.resx │ ├── ExportEquipmentBoxDialog.resx │ ├── GuildCardEditorDialog.resx │ ├── ImportEquipmentBoxDialog.resx │ ├── ImportItemBoxListDialog.resx │ ├── PalicoActionEditorDialog.resx │ ├── PalicoSkillEditorDialog.resx │ ├── ShoutoutTextEditDialog.resx │ ├── SetItemBoxItemAmountDialog.resx │ ├── ImportItemBoxListDialog.Designer.cs │ ├── ImportEquipmentBoxDialog.Designer.cs │ ├── ShoutoutsEditDialog.Designer.cs │ └── GuildCardEditorDialog.cs └── APMMHXSaveEditor.csproj ├── .gitattributes ├── README.md └── .gitignore /APMMHXSaveEditor/app.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ezapm/APMMHXSaveEditor/HEAD/APMMHXSaveEditor/app.ico -------------------------------------------------------------------------------- /APMMHXSaveEditor/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Data/Shop.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace APMMHXSaveEditor.Data 8 | { 9 | public class Shop 10 | { 11 | public byte[] ShopData { get; set; } 12 | 13 | public Shop(byte[] ShopData) 14 | { 15 | this.ShopData = ShopData; 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Data/SaveFile.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace APMMHXSaveEditor.Data 8 | { 9 | public class SaveFile 10 | { 11 | public Player[] Players; 12 | 13 | public SaveFile(Player[] players) 14 | { 15 | this.Players = players; 16 | } 17 | 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | 7 | # Standard to msysgit 8 | *.doc diff=astextplain 9 | *.DOC diff=astextplain 10 | *.docx diff=astextplain 11 | *.DOCX diff=astextplain 12 | *.dot diff=astextplain 13 | *.DOT diff=astextplain 14 | *.pdf diff=astextplain 15 | *.PDF diff=astextplain 16 | *.rtf diff=astextplain 17 | *.RTF diff=astextplain 18 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Data/GuildCard.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | 6 | namespace APMMHXSaveEditor.Data 7 | { 8 | public class GuildCard 9 | { 10 | public byte[] GuildCardData { get; set; } 11 | public UInt16[] MonsterKills { get; set; } 12 | public UInt16[] MonsterCaptures { get; set; } 13 | 14 | public GuildCard(byte[] guildCardData) 15 | { 16 | this.GuildCardData = guildCardData; 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using System.Windows.Forms; 6 | 7 | namespace APMMHXSaveEditor 8 | { 9 | static class Program 10 | { 11 | /// 12 | /// The main entry point for the application. 13 | /// 14 | [STAThread] 15 | static void Main() 16 | { 17 | Application.EnableVisualStyles(); 18 | Application.SetCompatibleTextRenderingDefault(false); 19 | Application.Run(new MainForm()); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Util/Converters.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace APMMHXSaveEditor.Util 8 | { 9 | public static class Converters 10 | { 11 | public static byte[] StringToByteArray(String hex) 12 | { 13 | int NumberChars = hex.Length; 14 | byte[] bytes = new byte[NumberChars / 2]; 15 | for (int i = 0; i < NumberChars; i += 2) 16 | bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16); 17 | return bytes; 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # APMMHXSaveEditor 2 | A save editor for Monster Hunter X and Monster Hunter Generations 3 | 4 | Features: 5 | Character Editor (Name, Hr, face, color) 6 | 7 | Funds Editor 8 | 9 | Equipment Editor 10 | 11 | Item Box Editor 12 | 13 | Item Pouch Editor 14 | 15 | Palico Editor 16 | 17 | Craftable items unlocker 18 | 19 | Guild Card Editor 20 | 21 | Shoutout Editor 22 | 23 | Charm Exporter (Export charms to Athena's format) 24 | 25 | More to come 26 | 27 | GBATemp thread: https://gbatemp.net/threads/apm-mhx-mhgen-save-editor.434421/ 28 | 29 | To use: Download the binaries from either the Releases tab or from a link in the GBATemp thread 30 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Windows image file caches 2 | Thumbs.db 3 | ehthumbs.db 4 | 5 | # Folder config file 6 | Desktop.ini 7 | 8 | # Recycle Bin used on file shares 9 | $RECYCLE.BIN/ 10 | 11 | # Windows Installer files 12 | *.cab 13 | *.msi 14 | *.msm 15 | *.msp 16 | 17 | # Windows shortcuts 18 | *.lnk 19 | 20 | # ========================= 21 | # Operating System Files 22 | # ========================= 23 | 24 | # OSX 25 | # ========================= 26 | 27 | .DS_Store 28 | .AppleDouble 29 | .LSOverride 30 | 31 | # Thumbnails 32 | ._* 33 | 34 | # Files that might appear on external disk 35 | .Spotlight-V100 36 | .Trashes 37 | 38 | # Directories potentially created on remote AFP share 39 | .AppleDB 40 | .AppleDesktop 41 | Network Trash Folder 42 | Temporary Items 43 | .apdisk 44 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Forms/AboutDialog.cs: -------------------------------------------------------------------------------- 1 | using APMMHXSaveEditor.Data; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.ComponentModel; 5 | using System.Data; 6 | using System.Drawing; 7 | using System.Linq; 8 | using System.Text; 9 | using System.Threading.Tasks; 10 | using System.Windows.Forms; 11 | 12 | namespace APMMHXSaveEditor.Forms 13 | { 14 | public partial class AboutDialog : Form 15 | { 16 | public AboutDialog() 17 | { 18 | InitializeComponent(); 19 | } 20 | 21 | private void AboutDialog_Load(object sender, EventArgs e) 22 | { 23 | labelText.Text = string.Format("{0}\n\nWritten by APM\n\nContact: PM APM on GBATemp", Constants.EDITOR_VERSION); 24 | } 25 | 26 | private void buttonClose_Click(object sender, EventArgs e) 27 | { 28 | this.DialogResult = DialogResult.OK; 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.34209 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace APMMHXSaveEditor.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Forms/PalicoActionEditorDialog.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Data; 5 | using System.Drawing; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Threading.Tasks; 9 | using System.Windows.Forms; 10 | using APMMHXSaveEditor.Data; 11 | 12 | namespace APMMHXSaveEditor.Forms 13 | { 14 | public partial class PalicoActionEditorDialog : Form 15 | { 16 | public byte ActionID { get; set; } 17 | 18 | public PalicoActionEditorDialog(byte actionID) 19 | { 20 | InitializeComponent(); 21 | this.ActionID = actionID; 22 | comboBoxPalicoSkills.DataSource = GameConstants.PalicoSupportMoves; 23 | comboBoxPalicoSkills.SelectedIndex = actionID; 24 | } 25 | 26 | private void buttonOK_Click(object sender, EventArgs e) 27 | { 28 | this.ActionID = (byte)comboBoxPalicoSkills.SelectedIndex; 29 | this.DialogResult = DialogResult.OK; 30 | } 31 | 32 | private void buttonCancel_Click(object sender, EventArgs e) 33 | { 34 | this.DialogResult = DialogResult.Cancel; 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Data/Item.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using APMMHXSaveEditor.Data; 7 | 8 | namespace APMMHXSaveEditor.Data 9 | { 10 | public class Item 11 | { 12 | public UInt32 ItemID { get; set; } 13 | public UInt32 ItemAmount { get; set; } 14 | 15 | public Item(UInt32 ItemID, UInt32 ItemAmount) 16 | { 17 | this.ItemID = ItemID; 18 | this.ItemAmount = ItemAmount; 19 | } 20 | 21 | public Item() 22 | { 23 | this.ItemID = 0; 24 | this.ItemAmount = 0; 25 | } 26 | 27 | public Item(Item copy) 28 | { 29 | this.ItemID = copy.ItemID; 30 | this.ItemAmount = copy.ItemAmount; 31 | } 32 | 33 | public override string ToString() 34 | { 35 | if (this.ItemID >= GameConstants.ItemList.Length) 36 | { 37 | return string.Format("Unknown Item [{0}]", this.ItemID); 38 | } 39 | else 40 | { 41 | return GameConstants.ItemList[ItemID]; 42 | } 43 | } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Forms/SetItemBoxItemAmountDialog.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Data; 5 | using System.Drawing; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Windows.Forms; 9 | using APMMHXSaveEditor.Data; 10 | 11 | namespace APMMHXSaveEditor.Forms 12 | { 13 | public partial class SetItemBoxItemAmountDialog : Form 14 | { 15 | private Item[] items; 16 | public SetItemBoxItemAmountDialog(Item[] items) 17 | { 18 | InitializeComponent(); 19 | numericUpDownAmount.Maximum = 255; 20 | numericUpDownAmount.Value = 99; 21 | this.items = items; 22 | } 23 | 24 | private void buttonOk_Click(object sender, EventArgs e) 25 | { 26 | foreach (Item item in items) 27 | { 28 | if (item.ItemID != 0) 29 | { 30 | item.ItemAmount = (UInt32)numericUpDownAmount.Value; 31 | } 32 | } 33 | this.DialogResult = DialogResult.OK; 34 | } 35 | 36 | private void buttonCancel_Click(object sender, EventArgs e) 37 | { 38 | this.DialogResult = DialogResult.Cancel; 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Forms/PalicoSkillEditorDialog.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Data; 5 | using System.Drawing; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Threading.Tasks; 9 | using System.Windows.Forms; 10 | using APMMHXSaveEditor.Data; 11 | 12 | namespace APMMHXSaveEditor.Forms 13 | { 14 | public partial class PalicoSkillEditorDialog : Form 15 | { 16 | public byte SkillID { get; set; } 17 | 18 | public PalicoSkillEditorDialog(byte skillID) 19 | { 20 | InitializeComponent(); 21 | comboBoxPalicoSkills.DataSource = GameConstants.PalicoSkills; 22 | this.SkillID = skillID; 23 | comboBoxPalicoSkills.SelectedIndex = skillID; 24 | } 25 | 26 | private void buttonOK_Click(object sender, EventArgs e) 27 | { 28 | this.SkillID = (byte)comboBoxPalicoSkills.SelectedIndex; 29 | this.DialogResult = DialogResult.OK; 30 | } 31 | 32 | private void buttonCancel_Click(object sender, EventArgs e) 33 | { 34 | this.DialogResult = DialogResult.Cancel; 35 | } 36 | 37 | private void PalicoSkillEditorDialog_Load(object sender, EventArgs e) 38 | { 39 | 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Forms/ShoutoutTextEditDialog.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Data; 5 | using System.Drawing; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Windows.Forms; 9 | using APMMHXSaveEditor.Data; 10 | 11 | namespace APMMHXSaveEditor.Forms 12 | { 13 | public partial class ShoutoutTextEditDialog : Form 14 | { 15 | public string Shoutout { get; set; } 16 | public ShoutoutTextEditDialog(string shoutout) 17 | { 18 | InitializeComponent(); 19 | this.Shoutout = shoutout; 20 | textBoxShoutout.Text = Shoutout; 21 | checkBoxLimit.Checked = true; 22 | } 23 | 24 | private void buttonOK_Click(object sender, EventArgs e) 25 | { 26 | this.Shoutout = textBoxShoutout.Text.PadRight(Constants.SIZEOF_SHOUTOUT, '\0'); ; 27 | this.DialogResult = DialogResult.OK; 28 | } 29 | 30 | private void buttonCancel_Click(object sender, EventArgs e) 31 | { 32 | this.DialogResult = DialogResult.Cancel; 33 | } 34 | 35 | private void checkBoxLimit_CheckedChanged(object sender, EventArgs e) 36 | { 37 | textBoxShoutout.MaxLength = checkBoxLimit.Checked ? Constants.SIZEOF_GAME_SHOUTOUT : Constants.SIZEOF_SHOUTOUT; 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Data/Equipment.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace APMMHXSaveEditor.Data 8 | { 9 | public class Equipment 10 | { 11 | public byte[] EquipmentBytes { get; set; } 12 | 13 | public Equipment(byte[] bytes) 14 | { 15 | this.EquipmentBytes = bytes; 16 | } 17 | 18 | public Equipment GetClone() 19 | { 20 | if (this.EquipmentBytes == null) 21 | return null; 22 | 23 | int length = this.EquipmentBytes.Length; 24 | 25 | byte[] temp = new byte[length]; 26 | for (int i = 0; i < temp.Length; i++) 27 | { 28 | byte b = this.EquipmentBytes[i]; 29 | temp[i] = b; 30 | } 31 | 32 | return new Equipment(temp); 33 | } 34 | 35 | public Equipment(Equipment equip) 36 | { 37 | byte[] temp = new byte[equip.EquipmentBytes.Length]; 38 | for (int i = 0; i < temp.Length; i++) 39 | { 40 | byte b = equip.EquipmentBytes[i]; 41 | temp[i] = b; 42 | } 43 | 44 | EquipmentBytes = temp; 45 | } 46 | 47 | public override string ToString() 48 | { 49 | //TODO 50 | return base.ToString(); 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("APMMHXSaveEditor")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("Microsoft")] 12 | [assembly: AssemblyProduct("APMMHXSaveEditor")] 13 | [assembly: AssemblyCopyright("Copyright © Microsoft 2016")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("44741f88-d230-4d8a-b242-9b46799d39d5")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Data/Constants.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace APMMHXSaveEditor.Data 8 | { 9 | public static class Constants 10 | { 11 | public const string EDITOR_VERSION = "APM MHGen Save Editor v0.18"; 12 | 13 | public const UInt16 TOTAL_ITEM_BOX_SLOTS = 1400; 14 | public const UInt16 TOTAL_PALICO_EQUIPMENT_SLOTS = 700; 15 | public const UInt16 TOTAL_ITEM_SETS = 8; 16 | public const UInt16 INVENTORY_ITEM_SLOTS = 32; 17 | public const UInt16 TOTAL_PALICOS = 60; 18 | 19 | public const UInt16 SIZEOF_NAME = 32; 20 | public const UInt16 SIZEOF_PALICO_GREETINGS = 60; 21 | 22 | public const UInt16 SIZEOF_ITEM = 18; 23 | public const UInt16 SIZEOF_ITEMBOX = 3150; 24 | public const UInt16 SIZEOF_ITEMPOUCH = 72; 25 | public const UInt16 SIZEOF_EQUIPMENT = 36; 26 | public const UInt16 SIZEOF_PALICO = 319; 27 | public const UInt16 SIZEOF_GUILD_CARD = 5208; 28 | public const UInt16 SIZEOF_CRAFTABLE_ARMOR = 392; 29 | public const UInt16 SIZEOF_CRAFTABLE_WEAPON = 40; 30 | public const UInt16 SIZEOF_CRAFTABLE_PALICO_GEAR = 104; 31 | 32 | public const UInt16 SIZEOF_FOOD_FLAGS = 4; 33 | public const UInt16 SIZEOF_AWARD_FLAGS = 13; 34 | 35 | public const UInt16 SIZEOF_SHOUTOUT = 104; 36 | public const UInt16 SIZEOF_AUTOMATIC_SHOUTOUT = 104; 37 | public const UInt16 SIZEOF_GAME_SHOUTOUT = 36; 38 | 39 | public const UInt16 ITEM_PER_BOX = 100; 40 | public const UInt16 ITEM_PER_POUCH = 8; 41 | 42 | public const UInt32 TOTAL_CRAFTABLE_ARMOR_SHOPS = 5; 43 | public const UInt16 TOTAL_CRAFTABLE_WEAPON_SHOPS = 14; 44 | public const UInt16 TOTAL_EQSHOP_SHOPS = 19; 45 | public const UInt16 TOTAL_CRAFTABLE_PALICO_SHOPS = 3; 46 | 47 | public const UInt16 TOTAL_WEAPONS = 15; 48 | public const UInt16 TOTAL_MONSTERHUNTS = 71; 49 | 50 | public const UInt16 TOTAL_SHOUTOUTS = 24; 51 | public const UInt16 TOTAL_AUTOMATIC_SHOUTOUTS = 9; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Forms/ExportEquipmentBoxDialog.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Data; 5 | using System.Drawing; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Windows.Forms; 9 | using APMMHXSaveEditor.Data; 10 | using System.IO; 11 | 12 | namespace APMMHXSaveEditor.Forms 13 | { 14 | public partial class ExportEquipmentBoxDialog : Form 15 | { 16 | Equipment[] equips; 17 | public ExportEquipmentBoxDialog(Equipment[] equips) 18 | { 19 | InitializeComponent(); 20 | comboBoxSelectedBox.SelectedIndex = 0; 21 | this.equips = equips; 22 | } 23 | 24 | private void buttonSave_Click(object sender, EventArgs e) 25 | { 26 | try 27 | { 28 | using (SaveFileDialog sfd = new SaveFileDialog()) 29 | { 30 | sfd.Filter = "Equipment Box (*.eqpbox)|*.eqpbox|All files (*.*)|*.*"; 31 | sfd.FilterIndex = 1; 32 | sfd.RestoreDirectory = true; 33 | sfd.FileName = string.Format("Equipment Box {0}", (comboBoxSelectedBox.SelectedIndex + 1)); 34 | 35 | if (sfd.ShowDialog() == DialogResult.OK) 36 | { 37 | int equipIndex = comboBoxSelectedBox.SelectedIndex * 100; 38 | byte[] fileData = new byte[Constants.SIZEOF_EQUIPMENT * 100]; 39 | for (int i = 0; i < 100; i++) 40 | { 41 | Buffer.BlockCopy(equips[equipIndex + i].EquipmentBytes, 0, fileData, (i * Constants.SIZEOF_EQUIPMENT), Constants.SIZEOF_EQUIPMENT); 42 | } 43 | File.WriteAllBytes(sfd.FileName, fileData); 44 | 45 | MessageBox.Show("Save Complete", "Success!"); 46 | } 47 | } 48 | } 49 | catch (Exception ex) 50 | { 51 | MessageBox.Show(ex.Message); 52 | } 53 | } 54 | 55 | private void buttonClose_Click(object sender, EventArgs e) 56 | { 57 | this.DialogResult = DialogResult.Cancel; 58 | } 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Forms/ItemEditDialog.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Data; 5 | using System.Drawing; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Threading.Tasks; 9 | using System.Windows.Forms; 10 | using APMMHXSaveEditor.Data; 11 | 12 | namespace APMMHXSaveEditor.Forms 13 | { 14 | public partial class ItemEditDialog : Form 15 | { 16 | private Item item; 17 | 18 | public ItemEditDialog(Item item, int slot) 19 | { 20 | InitializeComponent(); 21 | this.item = item; 22 | numericUpDownAmount.Maximum = 99; 23 | 24 | comboBoxItem.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDown; 25 | comboBoxItem.AutoCompleteMode = AutoCompleteMode.SuggestAppend; 26 | comboBoxItem.AutoCompleteSource = AutoCompleteSource.ListItems; 27 | comboBoxItem.Sorted = true; 28 | 29 | this.Text = string.Format("Editing Slot: [{0}]", slot); 30 | this.item = item; 31 | numericUpDownAmount.Value = item.ItemAmount; 32 | 33 | for (int i = 0; i < GameConstants.ItemList.Length; i++) 34 | { 35 | comboBoxItem.Items.Add(GameConstants.ItemList[i]); 36 | } 37 | 38 | for (int i = 0; i < comboBoxItem.Items.Count; i++) 39 | { 40 | if (comboBoxItem.Items[i] == GameConstants.ItemList[item.ItemID]) 41 | { 42 | comboBoxItem.SelectedIndex = i; 43 | break; 44 | } 45 | } 46 | 47 | comboBoxItem.Refresh(); 48 | 49 | } 50 | 51 | private void buttonOK_Click(object sender, EventArgs e) 52 | { 53 | if (comboBoxItem.SelectedItem == null || !GameConstants.ItemList.Contains(comboBoxItem.SelectedItem.ToString())) 54 | { 55 | return; 56 | } 57 | 58 | this.item.ItemID = GameConstants.GetItemIDFromName(comboBoxItem.SelectedItem.ToString()); 59 | this.item.ItemAmount = (UInt32)numericUpDownAmount.Value; 60 | 61 | this.DialogResult = DialogResult.OK; 62 | } 63 | 64 | private void buttonCancel_Click(object sender, EventArgs e) 65 | { 66 | this.DialogResult = DialogResult.Cancel; 67 | } 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Data/Palico.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace APMMHXSaveEditor.Data 8 | { 9 | public class Palico 10 | { 11 | //General 12 | public string Name { get; set; } 13 | public UInt32 XP { get; set; } 14 | public byte Level { get; set; } //Note that level 1 = 0 15 | public byte Forte { get; set; } 16 | public byte Enthusiasm { get; set; } 17 | public byte Target { get; set; } 18 | 19 | //Skills 20 | public byte[] EquippedActions { get; set; } 21 | public byte[] EquippedSkills { get; set; } 22 | public byte[] LearnedActions { get; set; } 23 | public byte[] LearnedSkills { get; set; } 24 | public UInt16 LearnedActionRNG { get; set; } 25 | public UInt16 LearnedSkillRNG { get; set; } 26 | 27 | //Text 28 | public string Greeting { get; set; } 29 | public string NameGiver { get; set; } 30 | public string PreviousMaster { get; set; } 31 | 32 | //Design 33 | public byte[] CoatRGBAValue { get; set; } 34 | public byte[] LeftEyeRGBAValue { get; set; } 35 | public byte[] RightEyeRGBAValue { get; set; } 36 | public byte[] VestRGBAValue { get; set; } 37 | public byte Voice { get; set; } 38 | public byte Eyes { get; set; } 39 | public byte Clothing { get; set; } 40 | public byte Coat { get; set; } 41 | public byte Ears { get; set; } 42 | public byte Tail { get; set; } 43 | 44 | 45 | //Unknown Values 46 | public byte[] Unknown1 { get; set; } //Place Holder Offset 0x58 Size 8 47 | public byte[] Unknown2 { get; set; } //Place Holder Offset 0xDC Size 51 48 | public byte[] Unknown3 { get; set; } //Place Holder Offset 0x0112 Size 2 49 | public byte[] Unknown4 { get; set; } //Place Holder Offset 0x0117 Size 3 50 | public byte[] Unknown5 { get; set; } //Place Holder Offset 0x012A Size 21 51 | 52 | public Palico() 53 | { 54 | } 55 | 56 | public override string ToString() 57 | { 58 | if (this.Name == "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0") 59 | return "[Empty]"; 60 | else 61 | return string.Format("[Lv. {0,2}] {1}", (this.Level + 1), this.Name); 62 | } 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Forms/ImportEquipmentBoxDialog.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Data; 5 | using System.Drawing; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Windows.Forms; 9 | using System.IO; 10 | using APMMHXSaveEditor.Data; 11 | 12 | namespace APMMHXSaveEditor.Forms 13 | { 14 | public partial class ImportEquipmentBoxDialog : Form 15 | { 16 | private Equipment[] equips; 17 | public ImportEquipmentBoxDialog(Equipment[] equips) 18 | { 19 | InitializeComponent(); 20 | this.equips = equips; 21 | comboBoxDest.SelectedIndex = 0; 22 | } 23 | 24 | private void buttonOpen_Click(object sender, EventArgs e) 25 | { 26 | try 27 | { 28 | OpenFileDialog ofd = new OpenFileDialog(); 29 | ofd.Filter = "Equipment Box (*.eqpbox)|*.eqpbox|All files (*.*)|*.*"; 30 | ofd.FilterIndex = 1; 31 | 32 | if (ofd.ShowDialog() != DialogResult.OK) 33 | { 34 | ofd.Dispose(); 35 | return; 36 | } 37 | 38 | textBoxFileLocation.Text = ofd.FileName; 39 | } 40 | catch (Exception ex) 41 | { 42 | MessageBox.Show(ex.Message, "Loading Error"); 43 | } 44 | } 45 | 46 | private void buttonOk_Click(object sender, EventArgs e) 47 | { 48 | if (textBoxFileLocation.Text == "") 49 | { 50 | MessageBox.Show("Select a list first!", "Error"); 51 | return; 52 | } 53 | 54 | try 55 | { 56 | byte[] fileData = File.ReadAllBytes(textBoxFileLocation.Text); 57 | if(fileData.Length != (100 * Constants.SIZEOF_EQUIPMENT)) 58 | { 59 | MessageBox.Show("Invalid file!", "Error"); 60 | return; 61 | } 62 | 63 | int eqpIndex = (comboBoxDest.SelectedIndex * 100); 64 | for (int i = 0; i < 100; i++) 65 | { 66 | Buffer.BlockCopy(fileData, (i * Constants.SIZEOF_EQUIPMENT), equips[eqpIndex + i].EquipmentBytes, 0, Constants.SIZEOF_EQUIPMENT); 67 | } 68 | 69 | this.DialogResult = DialogResult.OK; 70 | } 71 | catch (Exception ex) 72 | { 73 | MessageBox.Show(ex.Message, "Error"); 74 | } 75 | } 76 | 77 | private void buttonCancel_Click(object sender, EventArgs e) 78 | { 79 | this.DialogResult = DialogResult.OK; 80 | } 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Data/Player.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace APMMHXSaveEditor.Data 8 | { 9 | public class Player 10 | { 11 | public UInt32 SaveOffset { get; set; } 12 | //General Info 13 | public string Name { get; set; } 14 | public UInt32 PlayTime { get; set; } 15 | public int Funds { get; set; } 16 | public UInt16 HunterRank { get; set; } 17 | public UInt16 HunterArt1 { get; set; } 18 | public UInt16 HunterArt2 { get; set; } 19 | public UInt16 HunterArt3 { get; set; } 20 | 21 | //Character Details 22 | public byte Voice { get; set; } 23 | public byte EyeColor { get; set; } 24 | public byte Clothing { get; set; } 25 | public byte Gender { get; set; } //TWO GENDERS Male = 0; Female = 1; 26 | public byte HuntingStyle { get; set; } 27 | public byte HairStyle { get; set; } 28 | public byte Face { get; set; } 29 | public byte Features { get; set; } 30 | 31 | //Character Colors 32 | public byte[] SkinColorRGBA { get; set; } 33 | public byte[] HairColorRGBA { get; set; } 34 | public byte[] FeaturesColorRGBA { get; set; } 35 | public byte[] ClothingColorRGBA { get; set; } 36 | 37 | //Points 38 | public int HRPoints { get; set; } 39 | public int Zenny { get; set; } 40 | public int AcademyPoints { get; set; } 41 | public int BerunaPoints { get; set; } 42 | public int KokotoPoints { get; set; } 43 | public int PokkePoints { get; set; } 44 | public int YukumoPoints { get; set; } 45 | 46 | public Equipment[] EquipmentBox { get; set; } 47 | public Item[] ItemBox { get; set; } 48 | public Item[] ItemPouch { get; set; } 49 | public Palico[] Palicos { get; set; } 50 | public Equipment[] PalicoEquipment { get; set; } 51 | 52 | //Shop Data 53 | public Shop[] CraftableArmorShops { get; set; } 54 | public Shop[] CraftableWeaponShops { get; set; } 55 | public Shop[] CraftablePalicoShops { get; set; } 56 | 57 | public byte[] UnlockedBoxData { get; set; } //Holds data for unlocked boxes 58 | public byte[] UnlockedFoodData { get; set; } 59 | public byte[] AwardData { get; set; } 60 | 61 | public GuildCard PlayerGuildCard { get; set; } 62 | 63 | //Shoutouts 64 | public string[] ShoutOuts { get; set; } 65 | public string[] AutomaticShoutOuts { get; set; } 66 | 67 | public Player() 68 | { 69 | } 70 | 71 | public override string ToString() 72 | { 73 | return string.Format("{0} + [HR: {1}]", this.Name, this.HunterRank); 74 | } 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Forms/ImportItemBoxListDialog.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Data; 5 | using System.Drawing; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Windows.Forms; 9 | using System.IO; 10 | using APMMHXSaveEditor.Data; 11 | 12 | namespace APMMHXSaveEditor.Forms 13 | { 14 | public partial class ImportItemBoxListDialog : Form 15 | { 16 | private Item[] items; 17 | 18 | public ImportItemBoxListDialog(Item[] items) 19 | { 20 | InitializeComponent(); 21 | this.items = items; 22 | comboBoxDest.SelectedIndex = 0; 23 | } 24 | 25 | private void buttonOpen_Click(object sender, EventArgs e) 26 | { 27 | try 28 | { 29 | OpenFileDialog ofd = new OpenFileDialog(); 30 | ofd.Filter = "Item List (*.txt)|*.txt|All files (*.*)|*.*"; 31 | ofd.FilterIndex = 1; 32 | 33 | if (ofd.ShowDialog() != DialogResult.OK) 34 | { 35 | ofd.Dispose(); 36 | return; 37 | } 38 | 39 | textBoxFileLocation.Text = ofd.FileName; 40 | } 41 | catch (Exception ex) 42 | { 43 | MessageBox.Show(ex.Message, "Loading Error"); 44 | } 45 | } 46 | 47 | private void buttonOk_Click(object sender, EventArgs e) 48 | { 49 | if(textBoxFileLocation.Text == "") 50 | { 51 | MessageBox.Show("Select a list first!", "Error"); 52 | return; 53 | } 54 | 55 | try 56 | { 57 | Item[] newItems = getItemsFromList(File.ReadAllText(textBoxFileLocation.Text)); 58 | int itemIndex = (comboBoxDest.SelectedIndex * 100); 59 | for (int i = 0; i < newItems.Length && (itemIndex + i) < Constants.TOTAL_ITEM_BOX_SLOTS; i++) 60 | { 61 | items[itemIndex + i] = newItems[i]; 62 | } 63 | this.DialogResult = DialogResult.OK; 64 | } 65 | catch (Exception ex) 66 | { 67 | MessageBox.Show(ex.Message, "Error"); 68 | } 69 | } 70 | 71 | private void buttonCancel_Click(object sender, EventArgs e) 72 | { 73 | this.DialogResult = DialogResult.Cancel; 74 | } 75 | 76 | private Item[] getItemsFromList(string fileData) 77 | { 78 | string[] seperateData = fileData.Split(','); 79 | Item[] items = new Item[seperateData.Length]; 80 | 81 | for (int i = 0; i < seperateData.Length; i++) 82 | { 83 | items[i] = new Item(UInt32.Parse(seperateData[i]), 99); 84 | } 85 | 86 | return items; 87 | } 88 | 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.34209 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace APMMHXSaveEditor.Properties { 12 | using System; 13 | 14 | 15 | /// 16 | /// A strongly-typed resource class, for looking up localized strings, etc. 17 | /// 18 | // This class was auto-generated by the StronglyTypedResourceBuilder 19 | // class via a tool like ResGen or Visual Studio. 20 | // To add or remove a member, edit your .ResX file then rerun ResGen 21 | // with the /str option, or rebuild your VS project. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() { 33 | } 34 | 35 | /// 36 | /// Returns the cached ResourceManager instance used by this class. 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("APMMHXSaveEditor.Properties.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// Overrides the current thread's CurrentUICulture property for all 51 | /// resource lookups using this strongly typed resource class. 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Forms/ShoutoutsEditDialog.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Data; 5 | using System.Drawing; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Windows.Forms; 9 | 10 | namespace APMMHXSaveEditor.Forms 11 | { 12 | public partial class ShoutoutsEditDialog : Form 13 | { 14 | public string[] Shoutouts { get; set; } 15 | public string[] AutomaticShoutouts { get; set; } 16 | 17 | public ShoutoutsEditDialog(string[] shoutOuts, string[] automaticShoutouts) 18 | { 19 | InitializeComponent(); 20 | this.Shoutouts = shoutOuts; 21 | this.AutomaticShoutouts = automaticShoutouts; 22 | 23 | loadShoutouts(); 24 | loadAutomaticShoutouts(); 25 | } 26 | 27 | private void loadShoutouts() 28 | { 29 | listViewShououts.Items.Clear(); 30 | for (int i = 0; i < Shoutouts.Length; i++) 31 | { 32 | ListViewItem lvi = new ListViewItem((i + 1).ToString()); 33 | lvi.SubItems.Add(Shoutouts[i]); 34 | listViewShououts.Items.Add(lvi); 35 | } 36 | } 37 | 38 | private void loadAutomaticShoutouts() 39 | { 40 | listViewAutomaticShoutouts.Items.Clear(); 41 | for (int i = 0; i < AutomaticShoutouts.Length; i++) 42 | { 43 | ListViewItem lvi = new ListViewItem((i + 1).ToString()); 44 | lvi.SubItems.Add(AutomaticShoutouts[i]); 45 | listViewAutomaticShoutouts.Items.Add(lvi); 46 | } 47 | } 48 | 49 | private void ShoutoutsEditDialog_Load(object sender, EventArgs e) 50 | { 51 | 52 | } 53 | 54 | private void buttonClose_Click(object sender, EventArgs e) 55 | { 56 | this.DialogResult = DialogResult.OK; 57 | } 58 | 59 | private void listViewShououts_DoubleClick(object sender, EventArgs e) 60 | { 61 | int itemSelected = listViewShououts.SelectedItems[0].Index; 62 | ShoutoutTextEditDialog sted = new ShoutoutTextEditDialog(Shoutouts[itemSelected]); 63 | if (sted.ShowDialog() == DialogResult.OK) 64 | { 65 | Shoutouts[itemSelected] = sted.Shoutout; 66 | loadShoutouts(); 67 | listViewShououts.Items[itemSelected].Selected = true; 68 | listViewShououts.TopItem = listViewShououts.SelectedItems[0]; 69 | } 70 | sted.Dispose(); 71 | } 72 | 73 | private void listViewAutomaticShoutouts_DoubleClick(object sender, EventArgs e) 74 | { 75 | int itemSelected = listViewAutomaticShoutouts.SelectedItems[0].Index; 76 | ShoutoutTextEditDialog sted = new ShoutoutTextEditDialog(AutomaticShoutouts[itemSelected]); 77 | if (sted.ShowDialog() == DialogResult.OK) 78 | { 79 | AutomaticShoutouts[itemSelected] = sted.Shoutout; 80 | loadAutomaticShoutouts(); 81 | listViewAutomaticShoutouts.Items[itemSelected].Selected = true; 82 | listViewAutomaticShoutouts.TopItem = listViewAutomaticShoutouts.SelectedItems[0]; 83 | } 84 | sted.Dispose(); 85 | } 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Forms/AboutDialog.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace APMMHXSaveEditor.Forms 2 | { 3 | partial class AboutDialog 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.labelText = new System.Windows.Forms.Label(); 32 | this.buttonClose = new System.Windows.Forms.Button(); 33 | this.SuspendLayout(); 34 | // 35 | // labelText 36 | // 37 | this.labelText.AutoSize = true; 38 | this.labelText.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 39 | this.labelText.Location = new System.Drawing.Point(12, 9); 40 | this.labelText.Name = "labelText"; 41 | this.labelText.Size = new System.Drawing.Size(51, 16); 42 | this.labelText.TabIndex = 1; 43 | this.labelText.Text = "[TEXT]"; 44 | // 45 | // buttonClose 46 | // 47 | this.buttonClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; 48 | this.buttonClose.Location = new System.Drawing.Point(121, 123); 49 | this.buttonClose.Name = "buttonClose"; 50 | this.buttonClose.Size = new System.Drawing.Size(75, 23); 51 | this.buttonClose.TabIndex = 2; 52 | this.buttonClose.Text = "Close"; 53 | this.buttonClose.UseVisualStyleBackColor = true; 54 | this.buttonClose.Click += new System.EventHandler(this.buttonClose_Click); 55 | // 56 | // AboutDialog 57 | // 58 | this.AcceptButton = this.buttonClose; 59 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 60 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 61 | this.CancelButton = this.buttonClose; 62 | this.ClientSize = new System.Drawing.Size(314, 157); 63 | this.Controls.Add(this.buttonClose); 64 | this.Controls.Add(this.labelText); 65 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; 66 | this.MaximizeBox = false; 67 | this.MinimizeBox = false; 68 | this.Name = "AboutDialog"; 69 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 70 | this.Text = "About"; 71 | this.Load += new System.EventHandler(this.AboutDialog_Load); 72 | this.ResumeLayout(false); 73 | this.PerformLayout(); 74 | 75 | } 76 | 77 | #endregion 78 | 79 | private System.Windows.Forms.Label labelText; 80 | private System.Windows.Forms.Button buttonClose; 81 | } 82 | } -------------------------------------------------------------------------------- /APMMHXSaveEditor/Forms/SetItemBoxItemAmountDialog.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace APMMHXSaveEditor.Forms 2 | { 3 | partial class SetItemBoxItemAmountDialog 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.labelAmount = new System.Windows.Forms.Label(); 32 | this.numericUpDownAmount = new System.Windows.Forms.NumericUpDown(); 33 | this.buttonOK = new System.Windows.Forms.Button(); 34 | this.buttonCancel = new System.Windows.Forms.Button(); 35 | ((System.ComponentModel.ISupportInitialize)(this.numericUpDownAmount)).BeginInit(); 36 | this.SuspendLayout(); 37 | // 38 | // labelAmount 39 | // 40 | this.labelAmount.AutoSize = true; 41 | this.labelAmount.Location = new System.Drawing.Point(12, 9); 42 | this.labelAmount.Name = "labelAmount"; 43 | this.labelAmount.Size = new System.Drawing.Size(46, 13); 44 | this.labelAmount.TabIndex = 0; 45 | this.labelAmount.Text = "Amount:"; 46 | // 47 | // numericUpDownAmount 48 | // 49 | this.numericUpDownAmount.Location = new System.Drawing.Point(64, 7); 50 | this.numericUpDownAmount.Name = "numericUpDownAmount"; 51 | this.numericUpDownAmount.Size = new System.Drawing.Size(163, 20); 52 | this.numericUpDownAmount.TabIndex = 1; 53 | // 54 | // buttonOK 55 | // 56 | this.buttonOK.Location = new System.Drawing.Point(71, 33); 57 | this.buttonOK.Name = "buttonOK"; 58 | this.buttonOK.Size = new System.Drawing.Size(75, 23); 59 | this.buttonOK.TabIndex = 2; 60 | this.buttonOK.Text = "OK"; 61 | this.buttonOK.UseVisualStyleBackColor = true; 62 | this.buttonOK.Click += new System.EventHandler(this.buttonOk_Click); 63 | // 64 | // buttonCancel 65 | // 66 | this.buttonCancel.Location = new System.Drawing.Point(152, 33); 67 | this.buttonCancel.Name = "buttonCancel"; 68 | this.buttonCancel.Size = new System.Drawing.Size(75, 23); 69 | this.buttonCancel.TabIndex = 3; 70 | this.buttonCancel.Text = "Cancel"; 71 | this.buttonCancel.UseVisualStyleBackColor = true; 72 | this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); 73 | // 74 | // SetItemBoxItemAmountDialog 75 | // 76 | this.AcceptButton = this.buttonOK; 77 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 78 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 79 | this.CancelButton = this.buttonCancel; 80 | this.ClientSize = new System.Drawing.Size(239, 61); 81 | this.Controls.Add(this.buttonCancel); 82 | this.Controls.Add(this.buttonOK); 83 | this.Controls.Add(this.numericUpDownAmount); 84 | this.Controls.Add(this.labelAmount); 85 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; 86 | this.MaximizeBox = false; 87 | this.MinimizeBox = false; 88 | this.Name = "SetItemBoxItemAmountDialog"; 89 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 90 | this.Text = "Set All Items To"; 91 | ((System.ComponentModel.ISupportInitialize)(this.numericUpDownAmount)).EndInit(); 92 | this.ResumeLayout(false); 93 | this.PerformLayout(); 94 | 95 | } 96 | 97 | #endregion 98 | 99 | private System.Windows.Forms.Label labelAmount; 100 | private System.Windows.Forms.NumericUpDown numericUpDownAmount; 101 | private System.Windows.Forms.Button buttonOK; 102 | private System.Windows.Forms.Button buttonCancel; 103 | } 104 | } -------------------------------------------------------------------------------- /APMMHXSaveEditor/Forms/PalicoSkillEditorDialog.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace APMMHXSaveEditor.Forms 2 | { 3 | partial class PalicoSkillEditorDialog 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.labelSkillID = new System.Windows.Forms.Label(); 32 | this.buttonCancel = new System.Windows.Forms.Button(); 33 | this.buttonOK = new System.Windows.Forms.Button(); 34 | this.comboBoxPalicoSkills = new System.Windows.Forms.ComboBox(); 35 | this.SuspendLayout(); 36 | // 37 | // labelSkillID 38 | // 39 | this.labelSkillID.AutoSize = true; 40 | this.labelSkillID.Location = new System.Drawing.Point(12, 9); 41 | this.labelSkillID.Name = "labelSkillID"; 42 | this.labelSkillID.Size = new System.Drawing.Size(26, 13); 43 | this.labelSkillID.TabIndex = 1; 44 | this.labelSkillID.Text = "Skill"; 45 | // 46 | // buttonCancel 47 | // 48 | this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; 49 | this.buttonCancel.Location = new System.Drawing.Point(171, 38); 50 | this.buttonCancel.Name = "buttonCancel"; 51 | this.buttonCancel.Size = new System.Drawing.Size(75, 23); 52 | this.buttonCancel.TabIndex = 2; 53 | this.buttonCancel.Text = "Cancel"; 54 | this.buttonCancel.UseVisualStyleBackColor = true; 55 | this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); 56 | // 57 | // buttonOK 58 | // 59 | this.buttonOK.Location = new System.Drawing.Point(90, 38); 60 | this.buttonOK.Name = "buttonOK"; 61 | this.buttonOK.Size = new System.Drawing.Size(75, 23); 62 | this.buttonOK.TabIndex = 3; 63 | this.buttonOK.Text = "OK"; 64 | this.buttonOK.UseVisualStyleBackColor = true; 65 | this.buttonOK.Click += new System.EventHandler(this.buttonOK_Click); 66 | // 67 | // comboBoxPalicoSkills 68 | // 69 | this.comboBoxPalicoSkills.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 70 | this.comboBoxPalicoSkills.FormattingEnabled = true; 71 | this.comboBoxPalicoSkills.Location = new System.Drawing.Point(44, 6); 72 | this.comboBoxPalicoSkills.Name = "comboBoxPalicoSkills"; 73 | this.comboBoxPalicoSkills.Size = new System.Drawing.Size(202, 21); 74 | this.comboBoxPalicoSkills.TabIndex = 4; 75 | // 76 | // PalicoSkillEditorDialog 77 | // 78 | this.AcceptButton = this.buttonOK; 79 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 80 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 81 | this.CancelButton = this.buttonCancel; 82 | this.ClientSize = new System.Drawing.Size(263, 67); 83 | this.Controls.Add(this.comboBoxPalicoSkills); 84 | this.Controls.Add(this.buttonOK); 85 | this.Controls.Add(this.buttonCancel); 86 | this.Controls.Add(this.labelSkillID); 87 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; 88 | this.MaximizeBox = false; 89 | this.MinimizeBox = false; 90 | this.Name = "PalicoSkillEditorDialog"; 91 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 92 | this.Text = "Edit Skill"; 93 | this.Load += new System.EventHandler(this.PalicoSkillEditorDialog_Load); 94 | this.ResumeLayout(false); 95 | this.PerformLayout(); 96 | 97 | } 98 | 99 | #endregion 100 | 101 | private System.Windows.Forms.Label labelSkillID; 102 | private System.Windows.Forms.Button buttonCancel; 103 | private System.Windows.Forms.Button buttonOK; 104 | private System.Windows.Forms.ComboBox comboBoxPalicoSkills; 105 | } 106 | } -------------------------------------------------------------------------------- /APMMHXSaveEditor/Forms/PalicoActionEditorDialog.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace APMMHXSaveEditor.Forms 2 | { 3 | partial class PalicoActionEditorDialog 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.comboBoxPalicoSkills = new System.Windows.Forms.ComboBox(); 32 | this.buttonOK = new System.Windows.Forms.Button(); 33 | this.buttonCancel = new System.Windows.Forms.Button(); 34 | this.labelSkillID = new System.Windows.Forms.Label(); 35 | this.SuspendLayout(); 36 | // 37 | // comboBoxPalicoSkills 38 | // 39 | this.comboBoxPalicoSkills.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 40 | this.comboBoxPalicoSkills.FormattingEnabled = true; 41 | this.comboBoxPalicoSkills.Location = new System.Drawing.Point(35, 6); 42 | this.comboBoxPalicoSkills.Name = "comboBoxPalicoSkills"; 43 | this.comboBoxPalicoSkills.Size = new System.Drawing.Size(202, 21); 44 | this.comboBoxPalicoSkills.TabIndex = 8; 45 | // 46 | // buttonOK 47 | // 48 | this.buttonOK.DialogResult = System.Windows.Forms.DialogResult.Cancel; 49 | this.buttonOK.Location = new System.Drawing.Point(81, 38); 50 | this.buttonOK.Name = "buttonOK"; 51 | this.buttonOK.Size = new System.Drawing.Size(75, 23); 52 | this.buttonOK.TabIndex = 7; 53 | this.buttonOK.Text = "OK"; 54 | this.buttonOK.UseVisualStyleBackColor = true; 55 | this.buttonOK.Click += new System.EventHandler(this.buttonOK_Click); 56 | // 57 | // buttonCancel 58 | // 59 | this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; 60 | this.buttonCancel.Location = new System.Drawing.Point(162, 38); 61 | this.buttonCancel.Name = "buttonCancel"; 62 | this.buttonCancel.Size = new System.Drawing.Size(75, 23); 63 | this.buttonCancel.TabIndex = 6; 64 | this.buttonCancel.Text = "Cancel"; 65 | this.buttonCancel.UseVisualStyleBackColor = true; 66 | this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); 67 | // 68 | // labelSkillID 69 | // 70 | this.labelSkillID.AutoSize = true; 71 | this.labelSkillID.Location = new System.Drawing.Point(3, 9); 72 | this.labelSkillID.Name = "labelSkillID"; 73 | this.labelSkillID.Size = new System.Drawing.Size(26, 13); 74 | this.labelSkillID.TabIndex = 5; 75 | this.labelSkillID.Text = "Skill"; 76 | // 77 | // PalicoActionEditorDialog 78 | // 79 | this.AcceptButton = this.buttonOK; 80 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 81 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 82 | this.CancelButton = this.buttonCancel; 83 | this.ClientSize = new System.Drawing.Size(247, 67); 84 | this.Controls.Add(this.comboBoxPalicoSkills); 85 | this.Controls.Add(this.buttonOK); 86 | this.Controls.Add(this.buttonCancel); 87 | this.Controls.Add(this.labelSkillID); 88 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; 89 | this.MaximizeBox = false; 90 | this.MinimizeBox = false; 91 | this.Name = "PalicoActionEditorDialog"; 92 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 93 | this.Text = "Edit Action"; 94 | this.ResumeLayout(false); 95 | this.PerformLayout(); 96 | 97 | } 98 | 99 | #endregion 100 | 101 | private System.Windows.Forms.ComboBox comboBoxPalicoSkills; 102 | private System.Windows.Forms.Button buttonOK; 103 | private System.Windows.Forms.Button buttonCancel; 104 | private System.Windows.Forms.Label labelSkillID; 105 | 106 | } 107 | } -------------------------------------------------------------------------------- /APMMHXSaveEditor/Forms/ExportEquipmentBoxDialog.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace APMMHXSaveEditor.Forms 2 | { 3 | partial class ExportEquipmentBoxDialog 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.buttonSave = new System.Windows.Forms.Button(); 32 | this.comboBoxSelectedBox = new System.Windows.Forms.ComboBox(); 33 | this.labelSelectedBox = new System.Windows.Forms.Label(); 34 | this.buttonClose = new System.Windows.Forms.Button(); 35 | this.SuspendLayout(); 36 | // 37 | // buttonSave 38 | // 39 | this.buttonSave.Location = new System.Drawing.Point(96, 33); 40 | this.buttonSave.Name = "buttonSave"; 41 | this.buttonSave.Size = new System.Drawing.Size(75, 23); 42 | this.buttonSave.TabIndex = 20; 43 | this.buttonSave.Text = "Save"; 44 | this.buttonSave.UseVisualStyleBackColor = true; 45 | this.buttonSave.Click += new System.EventHandler(this.buttonSave_Click); 46 | // 47 | // comboBoxSelectedBox 48 | // 49 | this.comboBoxSelectedBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 50 | this.comboBoxSelectedBox.FormattingEnabled = true; 51 | this.comboBoxSelectedBox.Items.AddRange(new object[] { 52 | "Box 1", 53 | "Box 2", 54 | "Box 3", 55 | "Box 4", 56 | "Box 5", 57 | "Box 6", 58 | "Box 7", 59 | "Box 8", 60 | "Box 9", 61 | "Box 10", 62 | "Box 11", 63 | "Box 12", 64 | "Box 13", 65 | "Box 14"}); 66 | this.comboBoxSelectedBox.Location = new System.Drawing.Point(44, 6); 67 | this.comboBoxSelectedBox.Name = "comboBoxSelectedBox"; 68 | this.comboBoxSelectedBox.Size = new System.Drawing.Size(208, 21); 69 | this.comboBoxSelectedBox.TabIndex = 17; 70 | // 71 | // labelSelectedBox 72 | // 73 | this.labelSelectedBox.AutoSize = true; 74 | this.labelSelectedBox.Location = new System.Drawing.Point(12, 9); 75 | this.labelSelectedBox.Name = "labelSelectedBox"; 76 | this.labelSelectedBox.Size = new System.Drawing.Size(25, 13); 77 | this.labelSelectedBox.TabIndex = 16; 78 | this.labelSelectedBox.Text = "Box"; 79 | // 80 | // buttonClose 81 | // 82 | this.buttonClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; 83 | this.buttonClose.Location = new System.Drawing.Point(177, 33); 84 | this.buttonClose.Name = "buttonClose"; 85 | this.buttonClose.Size = new System.Drawing.Size(75, 23); 86 | this.buttonClose.TabIndex = 21; 87 | this.buttonClose.Text = "Close"; 88 | this.buttonClose.UseVisualStyleBackColor = true; 89 | this.buttonClose.Click += new System.EventHandler(this.buttonClose_Click); 90 | // 91 | // ExportEquipmentBoxDialog 92 | // 93 | this.AcceptButton = this.buttonSave; 94 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 95 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 96 | this.CancelButton = this.buttonClose; 97 | this.ClientSize = new System.Drawing.Size(259, 59); 98 | this.Controls.Add(this.buttonClose); 99 | this.Controls.Add(this.buttonSave); 100 | this.Controls.Add(this.comboBoxSelectedBox); 101 | this.Controls.Add(this.labelSelectedBox); 102 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; 103 | this.MaximizeBox = false; 104 | this.MinimizeBox = false; 105 | this.Name = "ExportEquipmentBoxDialog"; 106 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 107 | this.Text = "Export Equipment Box"; 108 | this.ResumeLayout(false); 109 | this.PerformLayout(); 110 | 111 | } 112 | 113 | #endregion 114 | 115 | private System.Windows.Forms.Button buttonSave; 116 | private System.Windows.Forms.ComboBox comboBoxSelectedBox; 117 | private System.Windows.Forms.Label labelSelectedBox; 118 | private System.Windows.Forms.Button buttonClose; 119 | } 120 | } -------------------------------------------------------------------------------- /APMMHXSaveEditor/Forms/ShoutoutTextEditDialog.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace APMMHXSaveEditor.Forms 2 | { 3 | partial class ShoutoutTextEditDialog 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.labelShoutout = new System.Windows.Forms.Label(); 32 | this.textBoxShoutout = new System.Windows.Forms.TextBox(); 33 | this.buttonOK = new System.Windows.Forms.Button(); 34 | this.buttonCancel = new System.Windows.Forms.Button(); 35 | this.checkBoxLimit = new System.Windows.Forms.CheckBox(); 36 | this.SuspendLayout(); 37 | // 38 | // labelShoutout 39 | // 40 | this.labelShoutout.AutoSize = true; 41 | this.labelShoutout.Location = new System.Drawing.Point(12, 9); 42 | this.labelShoutout.Name = "labelShoutout"; 43 | this.labelShoutout.Size = new System.Drawing.Size(50, 13); 44 | this.labelShoutout.TabIndex = 0; 45 | this.labelShoutout.Text = "Shoutout"; 46 | // 47 | // textBoxShoutout 48 | // 49 | this.textBoxShoutout.Location = new System.Drawing.Point(15, 25); 50 | this.textBoxShoutout.Name = "textBoxShoutout"; 51 | this.textBoxShoutout.Size = new System.Drawing.Size(297, 20); 52 | this.textBoxShoutout.TabIndex = 1; 53 | // 54 | // buttonOK 55 | // 56 | this.buttonOK.Location = new System.Drawing.Point(156, 51); 57 | this.buttonOK.Name = "buttonOK"; 58 | this.buttonOK.Size = new System.Drawing.Size(75, 23); 59 | this.buttonOK.TabIndex = 2; 60 | this.buttonOK.Text = "OK"; 61 | this.buttonOK.UseVisualStyleBackColor = true; 62 | this.buttonOK.Click += new System.EventHandler(this.buttonOK_Click); 63 | // 64 | // buttonCancel 65 | // 66 | this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; 67 | this.buttonCancel.Location = new System.Drawing.Point(237, 51); 68 | this.buttonCancel.Name = "buttonCancel"; 69 | this.buttonCancel.Size = new System.Drawing.Size(75, 23); 70 | this.buttonCancel.TabIndex = 3; 71 | this.buttonCancel.Text = "Cancel"; 72 | this.buttonCancel.UseVisualStyleBackColor = true; 73 | this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); 74 | // 75 | // checkBoxLimit 76 | // 77 | this.checkBoxLimit.AutoSize = true; 78 | this.checkBoxLimit.Location = new System.Drawing.Point(15, 51); 79 | this.checkBoxLimit.Name = "checkBoxLimit"; 80 | this.checkBoxLimit.Size = new System.Drawing.Size(47, 17); 81 | this.checkBoxLimit.TabIndex = 4; 82 | this.checkBoxLimit.Text = "Limit"; 83 | this.checkBoxLimit.UseVisualStyleBackColor = true; 84 | this.checkBoxLimit.CheckedChanged += new System.EventHandler(this.checkBoxLimit_CheckedChanged); 85 | // 86 | // ShoutoutTextEditDialog 87 | // 88 | this.AcceptButton = this.buttonOK; 89 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 90 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 91 | this.CancelButton = this.buttonCancel; 92 | this.ClientSize = new System.Drawing.Size(324, 80); 93 | this.Controls.Add(this.checkBoxLimit); 94 | this.Controls.Add(this.buttonCancel); 95 | this.Controls.Add(this.buttonOK); 96 | this.Controls.Add(this.textBoxShoutout); 97 | this.Controls.Add(this.labelShoutout); 98 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; 99 | this.MaximizeBox = false; 100 | this.MinimizeBox = false; 101 | this.Name = "ShoutoutTextEditDialog"; 102 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 103 | this.Text = "Edit Shoutout"; 104 | this.ResumeLayout(false); 105 | this.PerformLayout(); 106 | 107 | } 108 | 109 | #endregion 110 | 111 | private System.Windows.Forms.Label labelShoutout; 112 | private System.Windows.Forms.TextBox textBoxShoutout; 113 | private System.Windows.Forms.Button buttonOK; 114 | private System.Windows.Forms.Button buttonCancel; 115 | private System.Windows.Forms.CheckBox checkBoxLimit; 116 | } 117 | } -------------------------------------------------------------------------------- /APMMHXSaveEditor/Properties/Resources.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | text/microsoft-resx 107 | 108 | 109 | 2.0 110 | 111 | 112 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 113 | 114 | 115 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Forms/EquipmentEditDialog.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Data; 5 | using System.Drawing; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Threading.Tasks; 9 | using System.Windows.Forms; 10 | using APMMHXSaveEditor.Data; 11 | using System.IO; 12 | 13 | namespace APMMHXSaveEditor.Forms 14 | { 15 | public partial class EquipmentEditDialog : Form 16 | { 17 | private Equipment equipment; 18 | 19 | public EquipmentEditDialog(Equipment equipment) 20 | { 21 | InitializeComponent(); 22 | numericUpDownItemID.Maximum = 65535; 23 | numericUpDownLevel.Minimum = 0; 24 | numericUpDownLevel.Maximum = 255; 25 | textBoxDecoration1.MaxLength = 4; 26 | textBoxDecoration2.MaxLength = 4; 27 | textBoxDecoration3.MaxLength = 4; 28 | comboBoxEquipmentType.DataSource = GameConstants.EquipmentTypes; 29 | this.equipment = equipment; 30 | loadData(); 31 | } 32 | 33 | private void loadData() 34 | { 35 | comboBoxEquipmentType.SelectedIndex = equipment.EquipmentBytes[0]; 36 | numericUpDownItemID.Value = (ushort)(equipment.EquipmentBytes[2] << 8 | equipment.EquipmentBytes[1]); 37 | numericUpDownLevel.Value = equipment.EquipmentBytes[3] + 1; 38 | textBoxDecoration1.Text = string.Format("{0:X2}{1:X2}", equipment.EquipmentBytes[6], equipment.EquipmentBytes[7]); 39 | textBoxDecoration2.Text = string.Format("{0:X2}{1:X2}", equipment.EquipmentBytes[8], equipment.EquipmentBytes[9]); 40 | textBoxDecoration3.Text = string.Format("{0:X2}{1:X2}", equipment.EquipmentBytes[10], equipment.EquipmentBytes[11]); 41 | } 42 | 43 | private void saveData() 44 | { 45 | if (textBoxDecoration1.Text.Length != 4 || textBoxDecoration2.Text.Length != 4 || textBoxDecoration3.Text.Length != 4) 46 | { 47 | throw new Exception("One of the decorations is invalid"); 48 | } 49 | 50 | //Anyone got a better way at this? 51 | equipment.EquipmentBytes[0] = (byte)comboBoxEquipmentType.SelectedIndex; 52 | equipment.EquipmentBytes[1] = (byte)(((short)numericUpDownItemID.Value & 0x00FF)); 53 | equipment.EquipmentBytes[2] = (byte)(((short)numericUpDownItemID.Value >> 8)); 54 | equipment.EquipmentBytes[3] = (byte)(numericUpDownLevel.Value - 1); 55 | equipment.EquipmentBytes[6] = Convert.ToByte(textBoxDecoration1.Text.Substring(0, 2), 16); 56 | equipment.EquipmentBytes[7] = Convert.ToByte(textBoxDecoration1.Text.Substring(2, 2), 16); 57 | equipment.EquipmentBytes[8] = Convert.ToByte(textBoxDecoration2.Text.Substring(0, 2), 16); 58 | equipment.EquipmentBytes[9] = Convert.ToByte(textBoxDecoration2.Text.Substring(2, 2), 16); 59 | equipment.EquipmentBytes[10] = Convert.ToByte(textBoxDecoration3.Text.Substring(0, 2), 16); 60 | equipment.EquipmentBytes[11] = Convert.ToByte(textBoxDecoration3.Text.Substring(2, 2), 16); 61 | } 62 | 63 | private void EquipmentEditDialog_Load(object sender, EventArgs e) 64 | { 65 | } 66 | 67 | private void buttonOK_Click(object sender, EventArgs e) 68 | { 69 | saveData(); 70 | this.DialogResult = DialogResult.OK; 71 | } 72 | 73 | private void buttonCancel_Click(object sender, EventArgs e) 74 | { 75 | this.DialogResult = DialogResult.Cancel; 76 | } 77 | 78 | private void buttonExport_Click(object sender, EventArgs e) 79 | { 80 | Equipment temp = new Equipment(equipment); 81 | try 82 | { 83 | using (SaveFileDialog sfd = new SaveFileDialog()) 84 | { 85 | sfd.Filter = "EquipmentFile (*.eqp)|*.eqp|All files (*.*)|*.*"; 86 | sfd.FilterIndex = 1; 87 | sfd.RestoreDirectory = true; 88 | 89 | if (sfd.ShowDialog() == DialogResult.OK) 90 | { 91 | saveData(); 92 | File.WriteAllBytes(sfd.FileName, equipment.EquipmentBytes); 93 | this.equipment = temp; 94 | MessageBox.Show(string.Format("Exported equipment to {0}", sfd.FileName), "Success!"); 95 | } 96 | } 97 | } 98 | catch (Exception ex) 99 | { 100 | MessageBox.Show(ex.Message, "Save Unsucessful"); 101 | } 102 | } 103 | 104 | private void buttonImport_Click(object sender, EventArgs e) 105 | { 106 | Equipment temp = new Equipment(equipment); 107 | try 108 | { 109 | OpenFileDialog ofd = new OpenFileDialog(); 110 | ofd.Filter = "EquipmentFile (*.eqp)|*.eqp|All files (*.*)|*.*"; 111 | ofd.FilterIndex = 1; 112 | 113 | if (ofd.ShowDialog() != DialogResult.OK) 114 | { 115 | ofd.Dispose(); 116 | return; 117 | } 118 | 119 | byte[] fileData = File.ReadAllBytes(ofd.FileName); 120 | if (fileData.Length != Constants.SIZEOF_EQUIPMENT) 121 | { 122 | MessageBox.Show("Invalid Equipment", "Error"); 123 | return; 124 | } 125 | 126 | this.equipment.EquipmentBytes = fileData; 127 | loadData(); 128 | 129 | ofd.Dispose(); 130 | } 131 | catch (Exception ex) 132 | { 133 | MessageBox.Show(ex.Message, "Loading Error"); 134 | this.equipment = temp; 135 | } 136 | } 137 | } 138 | } 139 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Forms/ItemEditDialog.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace APMMHXSaveEditor.Forms 2 | { 3 | partial class ItemEditDialog 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.label1 = new System.Windows.Forms.Label(); 32 | this.comboBoxItem = new System.Windows.Forms.ComboBox(); 33 | this.labelAmount = new System.Windows.Forms.Label(); 34 | this.numericUpDownAmount = new System.Windows.Forms.NumericUpDown(); 35 | this.buttonOK = new System.Windows.Forms.Button(); 36 | this.buttonCancel = new System.Windows.Forms.Button(); 37 | ((System.ComponentModel.ISupportInitialize)(this.numericUpDownAmount)).BeginInit(); 38 | this.SuspendLayout(); 39 | // 40 | // label1 41 | // 42 | this.label1.AutoSize = true; 43 | this.label1.Location = new System.Drawing.Point(12, 9); 44 | this.label1.Name = "label1"; 45 | this.label1.Size = new System.Drawing.Size(27, 13); 46 | this.label1.TabIndex = 0; 47 | this.label1.Text = "Item"; 48 | // 49 | // comboBoxItem 50 | // 51 | this.comboBoxItem.FormattingEnabled = true; 52 | this.comboBoxItem.Location = new System.Drawing.Point(45, 6); 53 | this.comboBoxItem.Name = "comboBoxItem"; 54 | this.comboBoxItem.Size = new System.Drawing.Size(163, 21); 55 | this.comboBoxItem.TabIndex = 1; 56 | // 57 | // labelAmount 58 | // 59 | this.labelAmount.AutoSize = true; 60 | this.labelAmount.Location = new System.Drawing.Point(214, 9); 61 | this.labelAmount.Name = "labelAmount"; 62 | this.labelAmount.Size = new System.Drawing.Size(43, 13); 63 | this.labelAmount.TabIndex = 2; 64 | this.labelAmount.Text = "Amount"; 65 | // 66 | // numericUpDownAmount 67 | // 68 | this.numericUpDownAmount.Location = new System.Drawing.Point(255, 7); 69 | this.numericUpDownAmount.Name = "numericUpDownAmount"; 70 | this.numericUpDownAmount.Size = new System.Drawing.Size(72, 20); 71 | this.numericUpDownAmount.TabIndex = 3; 72 | // 73 | // buttonOK 74 | // 75 | this.buttonOK.Location = new System.Drawing.Point(171, 33); 76 | this.buttonOK.Name = "buttonOK"; 77 | this.buttonOK.Size = new System.Drawing.Size(75, 23); 78 | this.buttonOK.TabIndex = 4; 79 | this.buttonOK.Text = "OK"; 80 | this.buttonOK.UseVisualStyleBackColor = true; 81 | this.buttonOK.Click += new System.EventHandler(this.buttonOK_Click); 82 | // 83 | // buttonCancel 84 | // 85 | this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; 86 | this.buttonCancel.Location = new System.Drawing.Point(252, 33); 87 | this.buttonCancel.Name = "buttonCancel"; 88 | this.buttonCancel.Size = new System.Drawing.Size(75, 23); 89 | this.buttonCancel.TabIndex = 5; 90 | this.buttonCancel.Text = "Cancel"; 91 | this.buttonCancel.UseVisualStyleBackColor = true; 92 | this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); 93 | // 94 | // ItemEditDialog 95 | // 96 | this.AcceptButton = this.buttonOK; 97 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 98 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 99 | this.CancelButton = this.buttonCancel; 100 | this.ClientSize = new System.Drawing.Size(336, 71); 101 | this.Controls.Add(this.buttonCancel); 102 | this.Controls.Add(this.buttonOK); 103 | this.Controls.Add(this.numericUpDownAmount); 104 | this.Controls.Add(this.labelAmount); 105 | this.Controls.Add(this.comboBoxItem); 106 | this.Controls.Add(this.label1); 107 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; 108 | this.MaximizeBox = false; 109 | this.MinimizeBox = false; 110 | this.Name = "ItemEditDialog"; 111 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 112 | this.Text = "Item Editor"; 113 | ((System.ComponentModel.ISupportInitialize)(this.numericUpDownAmount)).EndInit(); 114 | this.ResumeLayout(false); 115 | this.PerformLayout(); 116 | 117 | } 118 | 119 | #endregion 120 | 121 | private System.Windows.Forms.Label label1; 122 | private System.Windows.Forms.ComboBox comboBoxItem; 123 | private System.Windows.Forms.Label labelAmount; 124 | private System.Windows.Forms.NumericUpDown numericUpDownAmount; 125 | private System.Windows.Forms.Button buttonOK; 126 | private System.Windows.Forms.Button buttonCancel; 127 | } 128 | } -------------------------------------------------------------------------------- /APMMHXSaveEditor/Forms/AboutDialog.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Forms/ItemEditDialog.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Forms/EquipmentEditDialog.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Forms/PalicoEditDialog.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Forms/ShoutoutsEditDialog.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Forms/ExportEquipmentBoxDialog.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Forms/GuildCardEditorDialog.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Forms/ImportEquipmentBoxDialog.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Forms/ImportItemBoxListDialog.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Forms/PalicoActionEditorDialog.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Forms/PalicoSkillEditorDialog.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Forms/ShoutoutTextEditDialog.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Forms/SetItemBoxItemAmountDialog.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Util/Tools.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using APMMHXSaveEditor.Data; 7 | 8 | namespace APMMHXSaveEditor.Util 9 | { 10 | public static class Tools 11 | { 12 | /// 13 | /// Unlock all bits in a 40 byte shop. 14 | /// 15 | /// The shop[] to change 16 | public static void CraftWeaponShopUnlock(Shop[] shops) 17 | { 18 | for (int i = 0; i < shops.Length; i++) 19 | { 20 | for (int j = 4; j < 20; j++) 21 | { 22 | shops[i].ShopData[j] = 0xFF; //Available Weapons 23 | shops[i].ShopData[j + 20] = 0xFF; //New Flags 24 | } 25 | } 26 | } 27 | 28 | /// 29 | /// Unlock all bits in a 392 byte shop 30 | /// 31 | /// shop to fill 32 | public static void CraftArmorUnlock(Shop[] shops) 33 | { 34 | for (int i = 0; i < shops.Length; i++) 35 | { 36 | for (int j = 4; j < 192; j++) 37 | { 38 | shops[i].ShopData[j] = 0x33; //Available Armors 39 | shops[i].ShopData[j + 192] = 0x33; //New Flags 40 | } 41 | } 42 | } 43 | 44 | /// 45 | /// Unlock all bits in a 48 byte shop shop 46 | /// 47 | /// shop to fill 48 | public static void CraftPalicoGearUnlock(Shop[] shops) 49 | { 50 | for (int i = 0; i < shops.Length; i++) 51 | { 52 | for (int j = 4; j < 48; j++) 53 | { 54 | shops[i].ShopData[j] = 0xFF; //Available Gear 55 | shops[i].ShopData[j + 48] = 0xFF; //New Flags 56 | } 57 | } 58 | } 59 | 60 | /// 61 | /// Set all ItemAmount in Item[] to 99 62 | /// 63 | /// Item array to max out 64 | public static void MaxItems(Item[] items) 65 | { 66 | foreach (Item item in items) 67 | { 68 | if (item.ItemID != 0) 69 | { 70 | item.ItemAmount = 99; 71 | } 72 | } 73 | } 74 | 75 | /// 76 | /// Set all ItemID ItemAmount in Item[] to 0 77 | /// 78 | /// Item array to clear out 79 | public static void ClearItems(Item[] items) 80 | { 81 | foreach (Item item in items) 82 | { 83 | item.ItemID = 0; 84 | item.ItemAmount = 0; 85 | } 86 | } 87 | 88 | /// 89 | /// Set all ItemID ItemAmount in Item[] to 0 in a set range 90 | /// 91 | /// Item list to clear 92 | /// Start index (index 0) 93 | /// End index 94 | public static void ClearItems(Item[] items, int startIndex, int endIndex) 95 | { 96 | for (int i = startIndex; i < endIndex; i++) 97 | { 98 | items[i].ItemID = 0; 99 | items[i].ItemAmount = 0; 100 | } 101 | } 102 | 103 | /// 104 | /// Set all bytes in equipment[] to 0 105 | /// 106 | /// 107 | public static void ClearEquipment(Equipment[] equipments) 108 | { 109 | foreach (Equipment equip in equipments) 110 | { 111 | Array.Clear(equip.EquipmentBytes, 0, Constants.SIZEOF_EQUIPMENT); 112 | } 113 | } 114 | 115 | 116 | /// 117 | /// Set all bytes in equipment[] to 0 in a specified range 118 | /// 119 | /// Equipment[] to clear 120 | /// Start index (index 0) 121 | /// End index 122 | public static void ClearEquipment(Equipment[] equipments, int startIndex, int endIndex) 123 | { 124 | for (int eqIndex = startIndex; eqIndex < endIndex; eqIndex++) 125 | { 126 | Array.Clear(equipments[eqIndex].EquipmentBytes, 0, Constants.SIZEOF_EQUIPMENT); 127 | } 128 | } 129 | 130 | /// 131 | /// Unlock all boxes and palico boxes 132 | /// 133 | /// box data bytes 134 | public static void UnlockAllBoxes(byte[] boxData) 135 | { 136 | byte[] unlockData = new byte[] { 0x00, 0x20, 0x60, 0x40, 0x00, 0x20, 0x60, 0x40 }; 137 | Buffer.BlockCopy(unlockData, 0, boxData, 0, unlockData.Length); 138 | } 139 | 140 | 141 | /// 142 | /// Get a blank equipment with proper byte size 143 | /// 144 | /// Returns a blank equipment 145 | public static Equipment GetBlankEquipment() 146 | { 147 | return new Equipment(new byte[Constants.SIZEOF_EQUIPMENT]); 148 | } 149 | 150 | /// 151 | /// Get an empty palico 152 | /// 153 | /// Returns a blank palico 154 | public static Palico GetBlankPalico() 155 | { 156 | return DataExtractor.GetPalcio(new byte[Constants.SIZEOF_PALICO]); 157 | } 158 | 159 | /// 160 | /// Get flags for 100% completed awards 161 | /// 162 | /// Returns a byte array that contains data for 100% completed awards 163 | public static byte[] GetFullRewards() 164 | { 165 | return new byte[13] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F }; 166 | } 167 | 168 | /// 169 | /// Get flags for all food recipes 170 | /// 171 | /// Return a byte array that contains data for 100% food recipes 172 | public static byte[] GetFullFoodRecipes() 173 | { 174 | return new byte[] { 0xFF, 0xFF, 0xFF, 0x7F }; 175 | } 176 | } 177 | } 178 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Forms/ImportItemBoxListDialog.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace APMMHXSaveEditor.Forms 2 | { 3 | partial class ImportItemBoxListDialog 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.label1 = new System.Windows.Forms.Label(); 32 | this.textBoxFileLocation = new System.Windows.Forms.TextBox(); 33 | this.labelDest = new System.Windows.Forms.Label(); 34 | this.comboBoxDest = new System.Windows.Forms.ComboBox(); 35 | this.buttonOpen = new System.Windows.Forms.Button(); 36 | this.buttonCancel = new System.Windows.Forms.Button(); 37 | this.buttonOk = new System.Windows.Forms.Button(); 38 | this.SuspendLayout(); 39 | // 40 | // label1 41 | // 42 | this.label1.AutoSize = true; 43 | this.label1.Location = new System.Drawing.Point(12, 9); 44 | this.label1.Name = "label1"; 45 | this.label1.Size = new System.Drawing.Size(26, 13); 46 | this.label1.TabIndex = 0; 47 | this.label1.Text = "File:"; 48 | // 49 | // textBoxFileLocation 50 | // 51 | this.textBoxFileLocation.Location = new System.Drawing.Point(44, 6); 52 | this.textBoxFileLocation.Name = "textBoxFileLocation"; 53 | this.textBoxFileLocation.Size = new System.Drawing.Size(208, 20); 54 | this.textBoxFileLocation.TabIndex = 1; 55 | // 56 | // labelDest 57 | // 58 | this.labelDest.AutoSize = true; 59 | this.labelDest.Location = new System.Drawing.Point(12, 29); 60 | this.labelDest.Name = "labelDest"; 61 | this.labelDest.Size = new System.Drawing.Size(29, 13); 62 | this.labelDest.TabIndex = 2; 63 | this.labelDest.Text = "Dest"; 64 | // 65 | // comboBoxDest 66 | // 67 | this.comboBoxDest.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 68 | this.comboBoxDest.FormattingEnabled = true; 69 | this.comboBoxDest.Items.AddRange(new object[] { 70 | "Box 1", 71 | "Box 2", 72 | "Box 3", 73 | "Box 4", 74 | "Box 5", 75 | "Box 6", 76 | "Box 7", 77 | "Box 8", 78 | "Box 9", 79 | "Box 10", 80 | "Box 11", 81 | "Box 12", 82 | "Box 13", 83 | "Box 14"}); 84 | this.comboBoxDest.Location = new System.Drawing.Point(44, 26); 85 | this.comboBoxDest.Name = "comboBoxDest"; 86 | this.comboBoxDest.Size = new System.Drawing.Size(208, 21); 87 | this.comboBoxDest.TabIndex = 3; 88 | // 89 | // buttonOpen 90 | // 91 | this.buttonOpen.Location = new System.Drawing.Point(258, 4); 92 | this.buttonOpen.Name = "buttonOpen"; 93 | this.buttonOpen.Size = new System.Drawing.Size(63, 23); 94 | this.buttonOpen.TabIndex = 4; 95 | this.buttonOpen.Text = "Open"; 96 | this.buttonOpen.UseVisualStyleBackColor = true; 97 | this.buttonOpen.Click += new System.EventHandler(this.buttonOpen_Click); 98 | // 99 | // buttonCancel 100 | // 101 | this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; 102 | this.buttonCancel.Location = new System.Drawing.Point(246, 53); 103 | this.buttonCancel.Name = "buttonCancel"; 104 | this.buttonCancel.Size = new System.Drawing.Size(75, 23); 105 | this.buttonCancel.TabIndex = 5; 106 | this.buttonCancel.Text = "Cancel"; 107 | this.buttonCancel.UseVisualStyleBackColor = true; 108 | this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); 109 | // 110 | // buttonOk 111 | // 112 | this.buttonOk.Location = new System.Drawing.Point(165, 53); 113 | this.buttonOk.Name = "buttonOk"; 114 | this.buttonOk.Size = new System.Drawing.Size(75, 23); 115 | this.buttonOk.TabIndex = 6; 116 | this.buttonOk.Text = "OK"; 117 | this.buttonOk.UseVisualStyleBackColor = true; 118 | this.buttonOk.Click += new System.EventHandler(this.buttonOk_Click); 119 | // 120 | // ImportItemBoxListDialog 121 | // 122 | this.AcceptButton = this.buttonOk; 123 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 124 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 125 | this.CancelButton = this.buttonCancel; 126 | this.ClientSize = new System.Drawing.Size(328, 82); 127 | this.Controls.Add(this.buttonOk); 128 | this.Controls.Add(this.buttonCancel); 129 | this.Controls.Add(this.buttonOpen); 130 | this.Controls.Add(this.comboBoxDest); 131 | this.Controls.Add(this.labelDest); 132 | this.Controls.Add(this.textBoxFileLocation); 133 | this.Controls.Add(this.label1); 134 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; 135 | this.MaximizeBox = false; 136 | this.MinimizeBox = false; 137 | this.Name = "ImportItemBoxListDialog"; 138 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 139 | this.Text = "Import Item List"; 140 | this.ResumeLayout(false); 141 | this.PerformLayout(); 142 | 143 | } 144 | 145 | #endregion 146 | 147 | private System.Windows.Forms.Label label1; 148 | private System.Windows.Forms.TextBox textBoxFileLocation; 149 | private System.Windows.Forms.Label labelDest; 150 | private System.Windows.Forms.ComboBox comboBoxDest; 151 | private System.Windows.Forms.Button buttonOpen; 152 | private System.Windows.Forms.Button buttonCancel; 153 | private System.Windows.Forms.Button buttonOk; 154 | } 155 | } -------------------------------------------------------------------------------- /APMMHXSaveEditor/Forms/ImportEquipmentBoxDialog.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace APMMHXSaveEditor.Forms 2 | { 3 | partial class ImportEquipmentBoxDialog 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.buttonOk = new System.Windows.Forms.Button(); 32 | this.buttonCancel = new System.Windows.Forms.Button(); 33 | this.buttonOpen = new System.Windows.Forms.Button(); 34 | this.comboBoxDest = new System.Windows.Forms.ComboBox(); 35 | this.labelDest = new System.Windows.Forms.Label(); 36 | this.textBoxFileLocation = new System.Windows.Forms.TextBox(); 37 | this.label1 = new System.Windows.Forms.Label(); 38 | this.SuspendLayout(); 39 | // 40 | // buttonOk 41 | // 42 | this.buttonOk.Location = new System.Drawing.Point(165, 53); 43 | this.buttonOk.Name = "buttonOk"; 44 | this.buttonOk.Size = new System.Drawing.Size(75, 23); 45 | this.buttonOk.TabIndex = 13; 46 | this.buttonOk.Text = "OK"; 47 | this.buttonOk.UseVisualStyleBackColor = true; 48 | this.buttonOk.Click += new System.EventHandler(this.buttonOk_Click); 49 | // 50 | // buttonCancel 51 | // 52 | this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; 53 | this.buttonCancel.Location = new System.Drawing.Point(246, 53); 54 | this.buttonCancel.Name = "buttonCancel"; 55 | this.buttonCancel.Size = new System.Drawing.Size(75, 23); 56 | this.buttonCancel.TabIndex = 12; 57 | this.buttonCancel.Text = "Cancel"; 58 | this.buttonCancel.UseVisualStyleBackColor = true; 59 | this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); 60 | // 61 | // buttonOpen 62 | // 63 | this.buttonOpen.Location = new System.Drawing.Point(258, 4); 64 | this.buttonOpen.Name = "buttonOpen"; 65 | this.buttonOpen.Size = new System.Drawing.Size(63, 23); 66 | this.buttonOpen.TabIndex = 11; 67 | this.buttonOpen.Text = "Open"; 68 | this.buttonOpen.UseVisualStyleBackColor = true; 69 | this.buttonOpen.Click += new System.EventHandler(this.buttonOpen_Click); 70 | // 71 | // comboBoxDest 72 | // 73 | this.comboBoxDest.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 74 | this.comboBoxDest.FormattingEnabled = true; 75 | this.comboBoxDest.Items.AddRange(new object[] { 76 | "Box 1", 77 | "Box 2", 78 | "Box 3", 79 | "Box 4", 80 | "Box 5", 81 | "Box 6", 82 | "Box 7", 83 | "Box 8", 84 | "Box 9", 85 | "Box 10", 86 | "Box 11", 87 | "Box 12", 88 | "Box 13", 89 | "Box 14"}); 90 | this.comboBoxDest.Location = new System.Drawing.Point(44, 26); 91 | this.comboBoxDest.Name = "comboBoxDest"; 92 | this.comboBoxDest.Size = new System.Drawing.Size(208, 21); 93 | this.comboBoxDest.TabIndex = 10; 94 | // 95 | // labelDest 96 | // 97 | this.labelDest.AutoSize = true; 98 | this.labelDest.Location = new System.Drawing.Point(12, 29); 99 | this.labelDest.Name = "labelDest"; 100 | this.labelDest.Size = new System.Drawing.Size(29, 13); 101 | this.labelDest.TabIndex = 9; 102 | this.labelDest.Text = "Dest"; 103 | // 104 | // textBoxFileLocation 105 | // 106 | this.textBoxFileLocation.Location = new System.Drawing.Point(44, 6); 107 | this.textBoxFileLocation.Name = "textBoxFileLocation"; 108 | this.textBoxFileLocation.Size = new System.Drawing.Size(208, 20); 109 | this.textBoxFileLocation.TabIndex = 8; 110 | // 111 | // label1 112 | // 113 | this.label1.AutoSize = true; 114 | this.label1.Location = new System.Drawing.Point(12, 9); 115 | this.label1.Name = "label1"; 116 | this.label1.Size = new System.Drawing.Size(26, 13); 117 | this.label1.TabIndex = 7; 118 | this.label1.Text = "File:"; 119 | // 120 | // ImportEquipmentBoxDialog 121 | // 122 | this.AcceptButton = this.buttonOk; 123 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 124 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 125 | this.CancelButton = this.buttonCancel; 126 | this.ClientSize = new System.Drawing.Size(329, 82); 127 | this.Controls.Add(this.buttonOk); 128 | this.Controls.Add(this.buttonCancel); 129 | this.Controls.Add(this.buttonOpen); 130 | this.Controls.Add(this.comboBoxDest); 131 | this.Controls.Add(this.labelDest); 132 | this.Controls.Add(this.textBoxFileLocation); 133 | this.Controls.Add(this.label1); 134 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; 135 | this.MaximizeBox = false; 136 | this.MinimizeBox = false; 137 | this.Name = "ImportEquipmentBoxDialog"; 138 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 139 | this.Text = "Import Equipment"; 140 | this.ResumeLayout(false); 141 | this.PerformLayout(); 142 | 143 | } 144 | 145 | #endregion 146 | 147 | private System.Windows.Forms.Button buttonOk; 148 | private System.Windows.Forms.Button buttonCancel; 149 | private System.Windows.Forms.Button buttonOpen; 150 | private System.Windows.Forms.ComboBox comboBoxDest; 151 | private System.Windows.Forms.Label labelDest; 152 | private System.Windows.Forms.TextBox textBoxFileLocation; 153 | private System.Windows.Forms.Label label1; 154 | } 155 | } -------------------------------------------------------------------------------- /APMMHXSaveEditor/Data/Offsets.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace APMMHXSaveEditor.Data 8 | { 9 | public static class Offsets 10 | { 11 | //Header Data 12 | public const UInt16 FIRST_CHAR_SLOT_USED = 0x04; //Size 1 13 | public const UInt16 SECOND_CHAR_SLOT_USED = 0x05; //Size 1 14 | public const UInt16 THIRD_CHAR_SLOT_USED = 0x06; //Size 1 15 | public const UInt16 FIRST_CHARACTER_OFFSET = 0x10; //Size 4 16 | public const UInt16 SECOND_CHARACTER_OFFSET = 0x14; //Size 4 17 | public const UInt16 THIRD_CHARACTER_OFFSET = 0x18; //Size 4 18 | 19 | //Character Offsets [CHARACTER BASE + CHARACTER OFFSET] 20 | public const UInt16 NAME_OFFSET = 0x00; //Size 32 21 | public const UInt16 PLAY_TIME_OFFSET = 0x20; //Size 4 22 | //public const UInt16 FUNDS_OFFSET = 0x24; //Size 4 ;What it shows on save menu ? 23 | //public const UInt16 HUNTER_RANK_OFFSET = 0x28; //Size 2 24 | //public const UInt16 HUNTER_ART_1_OFFSET = 0x2C; //Size 2 25 | //public const UInt16 HUNTER_ART_2_OFFSET = 0x2E; //Size 2 26 | //public const UInt16 HUNTER_ART_3_OFFSET = 0X30; //Size 2 27 | public const UInt16 EQUIPPED_WEAPON_OFFSET = 0x010C; //Size 48 28 | public const UInt16 EQUIPPED_HEAD_OFFSET = 0x013C; //Size 48 29 | public const UInt16 EQUIPPED_CHEST_OFFSET = 0x016C; //Size 48 30 | public const UInt16 EQUIPPED_ARMS_OFFSET = 0x019c; //Size 48 31 | public const UInt16 EQUIPPED_WAIST_OFFSET = 0x01CC; //Size 48 32 | public const UInt16 EQUIPPED_LEG_OFFSET = 0x01FC; //Size 48 33 | public const UInt16 EQUIPPED_TALISMAN_OFFSET = 0x022C; //Size 48 34 | public const UInt16 WEAPON_TYPE_OFFSET = 0x025C; //Size 1 35 | public const UInt32 CHARACTER_VOICE_OFFSET = 0x193BB; 36 | //public const UInt16 CHARACTER_VOICE_OFFSET = 0x025D; //Size 1 37 | //public const UInt16 CHARACTER_EYE_COLOR_OFFSET = 0x025E; //Size 1 38 | //public const UInt16 CHARACTER_CLOTHING_OFFSET = 0x025F; //Size 1 39 | //public const UInt16 CHARACTER_GENDER_OFFSET = 0x0260; //Size 1 40 | //public const UInt16 CHARACTER_HUNTING_STYLE_OFFSET = 0x0261; //Size 1 41 | //public const UInt16 CHARACTER_HAIRSTYLE_OFFSET = 0x0262; //Size 1 42 | //public const UInt16 CHARACTER_FACE_OFFSET = 0x0263; //Size 1 43 | //public const UInt16 CHARACTER_FEATURES_OFFSET = 0x0264; //Size 1 44 | //public const UInt16 CHEST_ARMOR_PIGMENT_OFFSET = 0x0268; //Size 4 45 | //public const UInt16 ARMS_ARMOR_PIGMENT_OFFSET = 0x026C; //Size 4 46 | //public const UInt16 WAIST_ARMOR_PIGMENT_OFFSET = 0x0270; //Size 4 47 | //public const UInt16 LEG_ARMOR_PIGMENT_OFFSET = 0x0274; //Size 4 48 | //public const UInt16 HEAD_ARMOR_PIGMENT_OFFSET = 0x0278; //Size 4 49 | //public const UInt16 CHARACTER_SKIN_COLOR_OFFSET = 0x027C; //Size 4 ;This only used in loading screen 50 | public const UInt32 CHARACTER_SKIN_COLOR_OFFSET = 0x0193DA; //Size 4 51 | //public const UInt16 CHARACTER_HAIR_COLOR_OFFSET = 0x0280; //Size 4 52 | //public const UInt16 CHARACTER_FEATURES_COLOR_OFFSET = 0x0284; //Size 4 53 | //public const UInt16 CHARACTER_CLOTHING_COLOR_OFFSET = 0x0288; //Size 4 54 | public const UInt16 ITEM_BOX_OFFSET = 0x0290; //Size 3150 (1400 of them each 18 bits long) 55 | public const UInt16 EQUIPMENT_BOX_OFFSET = 0x4667; //Size 50415 (1400 of them each 36 bytes long) 56 | public const UInt16 ITEM_SET_OFFSET = 0x0EDE; //Size 1360 (8 of them each 170 bytes long) 57 | public const UInt16 POUCH_OFFSET = 0x142E; //Size 72 (32 Items each 18 bits long) 58 | 59 | public const UInt32 STORED_NAME_OFFSET = 0x0193ED; //Size 32 60 | public const UInt32 STORED_PLAY_TIME_OFFSET = 0x18792; //Size 4 61 | 62 | public const UInt16 HR_POINTS_OFFSET = 0x1476; //Size 4 63 | //public const UInt16 ZENNY_OFFSET = 0x147A; //Size 4 64 | //public const UInt16 UNKNOWN_FUNDS_OFFSET = 0x147E; //Size 4 65 | //public const UInt16 ACADEMY_POINTS_OFFSET = 0x1482; //Size 4 66 | //public const UInt16 BERUNA_POINTS_OFFSET = 0x1486; //Size 4 67 | //public const UInt16 KOKOTO_POINTS_OFFSET = 0X148A; //Size 4 68 | //public const UInt16 POKKE_POINTS_OFFSET = 0x148E; //Size 4 69 | //public const UInt16 YUKUMO_POINTS_OFFSET = 0x1492; //Size 4 70 | public const UInt32 PALICO_OFFSET = 0x019426; //Size 19140 (60 of them each 319 bytes long) 71 | public const UInt32 PALICO_EQUIPMENT_OFFSET = 0x10B47; //Size 25200 (700 of them 36 bytes long) 72 | 73 | public const UInt32 SHOP_OFFSETS = 0x1D76; 74 | public const UInt32 CRAFTABLE_WEAPONS_OFFSET = 0x20BE; 75 | public const UInt32 CRAFTABLE_ARMOR_SHOP_OFFSET = 0x2316; 76 | public const UInt32 CRAFTABLE_PALICO_GEAR_OFFSET = 0x02ABE; 77 | 78 | public const UInt16 FOOD_FLAG_OFFSETS = 0x1A32; //Size 4 79 | public const UInt16 AWARD_FLAG_OFFSETS = 0x1B8A; //Size 13 80 | 81 | public const UInt32 PLAYER_GUILD_CARD_OFFSET = 0x09F0FE; //Size 5208 82 | 83 | public const UInt16 UNLOCKED_BOXES_OFFSET = 0x1A22; //Size 8 84 | 85 | public const UInt16 MONSTERHUNT_OFFSETS = 0x42E7; //71 Monsters 2 bytes each 86 | public const UInt16 MONSTERCAPTURE_OFFSETS = 0x43C7; //71 Monsters 2 bytes each 87 | 88 | public const UInt32 SHOUTOUT_OFFSETS = 0xEAD6E; 89 | public const UInt32 AUTOMATIC_SHOUTOUT_OFFSETS = 0xEB72E; 90 | } 91 | 92 | public static class PalicoOffsets 93 | { 94 | public const UInt16 NAME_OFFSET = 0x00; //Size 32 95 | public const UInt16 EXP_OFFSET = 0x20; //Size 4 96 | public const UInt16 LEVEL_OFFSET = 0x24; //Size 1 97 | public const UInt16 FORTE_OFFSET = 0x25; //Size 1 98 | public const UInt16 ENTHUSIASM_OFFSET = 0x26; //Size 1 99 | public const UInt16 TARGET_OFFSET = 0x27; //Size 1 100 | public const UInt16 EQUIPPED_ACTIONS_OFFSET = 0x28; //Size 8 (8 of them 1 byte each) 101 | public const UInt16 EQUIPPED_SKILLS_OFFSET = 0x30; //Size 8 (8 of them 1 byte each) 102 | public const UInt16 LEARNED_ACTIONS_OFFSET = 0x38; //Size 16 (16 of them 1 byte each) 103 | public const UInt16 LEARNED_SKILLS_OFFSET = 0x48; //Size 16 (16 of them 1 byte each) 104 | public const UInt16 LEARNED_ACTION_RNG_OFFSET = 0x54; //Size 2 105 | public const UInt16 LEARNED_SKILL_RNG_OFFSET = 0x56; //Size 2 106 | public const UInt16 GREETING_OFFSET = 0x60; //Size 60 107 | public const UInt16 NAME_GIVER_OFFSET = 0x9C; //Size 32 108 | public const UInt16 PREVIOUS_MASTER_OFFSET = 0xBC; //Size 32 109 | public const UInt16 RGBA_VALUE_OFFSET = 0x011A; //Size 4 110 | } 111 | 112 | public static class GuildCardOffsets 113 | { 114 | public static UInt16 GUILD_CARD_ID_OFFSET = 0x0828; //Size 8 115 | //Guild Card Offsets by Ukee 116 | public static UInt16 PLAYTIME_OFFSET = 0x088C; //Size 4 117 | public static UInt16 VILLAGE_WEAPON_USAGE_OFFSET = 0x0830; //Size 30 118 | public static UInt16 LOW_HUB_WEAPON_USAGE_OFFSET = 0x084E; //Size 30 119 | public static UInt16 HUB_WEAPON_USAGE_OFFSET = 0x086C; //Size 30 120 | 121 | public static UInt16 VILLAGE_QUEST_OFFSETS = 0x07DA; //Size 2 122 | public static UInt16 LOW_HUB_QUEST_OFFSETS = 0x07DC; //Size 2 123 | public static UInt16 HIGH_HUB_QUEST_OFFSETS = 0x07DE; //Size 2 124 | public static UInt16 SPECIAL_PERMIT_QUEST_OFFSETS = 0x07e0; //Size 2 125 | public static UInt16 ARENA_QUEST_OFFSETS = 0x07E2; //Size 2 126 | public static UInt16 STREET_PASS_OFFSETS = 0x07E8; //Size 2 127 | public static UInt16 MONSTER_HUNT_OFFSETS = 0x0EE0; //Size 552 (69 Monsters, 8 Bytes Each) 128 | 129 | public static UInt16 GUILDCARD_CHARACTER_VOICE_OFFSET = 0x19; //Size 1 130 | } 131 | } 132 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/Forms/ShoutoutsEditDialog.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace APMMHXSaveEditor.Forms 2 | { 3 | partial class ShoutoutsEditDialog 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.tabControlShoutOutEditor = new System.Windows.Forms.TabControl(); 32 | this.tabPageShoutOuts = new System.Windows.Forms.TabPage(); 33 | this.listViewShououts = new System.Windows.Forms.ListView(); 34 | this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); 35 | this.columnHeader4 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); 36 | this.tabPageAutomaticShoutOuts = new System.Windows.Forms.TabPage(); 37 | this.listViewAutomaticShoutouts = new System.Windows.Forms.ListView(); 38 | this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); 39 | this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); 40 | this.buttonClose = new System.Windows.Forms.Button(); 41 | this.tabControlShoutOutEditor.SuspendLayout(); 42 | this.tabPageShoutOuts.SuspendLayout(); 43 | this.tabPageAutomaticShoutOuts.SuspendLayout(); 44 | this.SuspendLayout(); 45 | // 46 | // tabControlShoutOutEditor 47 | // 48 | this.tabControlShoutOutEditor.Controls.Add(this.tabPageShoutOuts); 49 | this.tabControlShoutOutEditor.Controls.Add(this.tabPageAutomaticShoutOuts); 50 | this.tabControlShoutOutEditor.Location = new System.Drawing.Point(1, 12); 51 | this.tabControlShoutOutEditor.Name = "tabControlShoutOutEditor"; 52 | this.tabControlShoutOutEditor.SelectedIndex = 0; 53 | this.tabControlShoutOutEditor.Size = new System.Drawing.Size(514, 238); 54 | this.tabControlShoutOutEditor.TabIndex = 0; 55 | // 56 | // tabPageShoutOuts 57 | // 58 | this.tabPageShoutOuts.BackColor = System.Drawing.SystemColors.Control; 59 | this.tabPageShoutOuts.Controls.Add(this.listViewShououts); 60 | this.tabPageShoutOuts.Location = new System.Drawing.Point(4, 22); 61 | this.tabPageShoutOuts.Name = "tabPageShoutOuts"; 62 | this.tabPageShoutOuts.Padding = new System.Windows.Forms.Padding(3); 63 | this.tabPageShoutOuts.Size = new System.Drawing.Size(506, 212); 64 | this.tabPageShoutOuts.TabIndex = 0; 65 | this.tabPageShoutOuts.Text = "Shoutouts"; 66 | // 67 | // listViewShououts 68 | // 69 | this.listViewShououts.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 70 | | System.Windows.Forms.AnchorStyles.Left) 71 | | System.Windows.Forms.AnchorStyles.Right))); 72 | this.listViewShououts.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { 73 | this.columnHeader3, 74 | this.columnHeader4}); 75 | this.listViewShououts.FullRowSelect = true; 76 | this.listViewShououts.GridLines = true; 77 | this.listViewShououts.Location = new System.Drawing.Point(-2, -2); 78 | this.listViewShououts.Name = "listViewShououts"; 79 | this.listViewShououts.Size = new System.Drawing.Size(510, 218); 80 | this.listViewShououts.TabIndex = 9; 81 | this.listViewShououts.UseCompatibleStateImageBehavior = false; 82 | this.listViewShououts.View = System.Windows.Forms.View.Details; 83 | this.listViewShououts.DoubleClick += new System.EventHandler(this.listViewShououts_DoubleClick); 84 | // 85 | // columnHeader3 86 | // 87 | this.columnHeader3.Text = "Slot"; 88 | this.columnHeader3.Width = 40; 89 | // 90 | // columnHeader4 91 | // 92 | this.columnHeader4.Text = "Shoutout"; 93 | this.columnHeader4.Width = 425; 94 | // 95 | // tabPageAutomaticShoutOuts 96 | // 97 | this.tabPageAutomaticShoutOuts.BackColor = System.Drawing.SystemColors.Control; 98 | this.tabPageAutomaticShoutOuts.Controls.Add(this.listViewAutomaticShoutouts); 99 | this.tabPageAutomaticShoutOuts.Location = new System.Drawing.Point(4, 22); 100 | this.tabPageAutomaticShoutOuts.Name = "tabPageAutomaticShoutOuts"; 101 | this.tabPageAutomaticShoutOuts.Padding = new System.Windows.Forms.Padding(3); 102 | this.tabPageAutomaticShoutOuts.Size = new System.Drawing.Size(506, 212); 103 | this.tabPageAutomaticShoutOuts.TabIndex = 1; 104 | this.tabPageAutomaticShoutOuts.Text = "Automatic Shoutouts"; 105 | // 106 | // listViewAutomaticShoutouts 107 | // 108 | this.listViewAutomaticShoutouts.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 109 | | System.Windows.Forms.AnchorStyles.Left) 110 | | System.Windows.Forms.AnchorStyles.Right))); 111 | this.listViewAutomaticShoutouts.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { 112 | this.columnHeader1, 113 | this.columnHeader2}); 114 | this.listViewAutomaticShoutouts.FullRowSelect = true; 115 | this.listViewAutomaticShoutouts.GridLines = true; 116 | this.listViewAutomaticShoutouts.Location = new System.Drawing.Point(-2, -2); 117 | this.listViewAutomaticShoutouts.Name = "listViewAutomaticShoutouts"; 118 | this.listViewAutomaticShoutouts.Size = new System.Drawing.Size(510, 218); 119 | this.listViewAutomaticShoutouts.TabIndex = 8; 120 | this.listViewAutomaticShoutouts.UseCompatibleStateImageBehavior = false; 121 | this.listViewAutomaticShoutouts.View = System.Windows.Forms.View.Details; 122 | this.listViewAutomaticShoutouts.DoubleClick += new System.EventHandler(this.listViewAutomaticShoutouts_DoubleClick); 123 | // 124 | // columnHeader1 125 | // 126 | this.columnHeader1.Text = "Slot"; 127 | this.columnHeader1.Width = 40; 128 | // 129 | // columnHeader2 130 | // 131 | this.columnHeader2.Text = "Shoutout"; 132 | this.columnHeader2.Width = 425; 133 | // 134 | // buttonClose 135 | // 136 | this.buttonClose.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); 137 | this.buttonClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; 138 | this.buttonClose.Location = new System.Drawing.Point(438, 252); 139 | this.buttonClose.Name = "buttonClose"; 140 | this.buttonClose.Size = new System.Drawing.Size(75, 23); 141 | this.buttonClose.TabIndex = 1; 142 | this.buttonClose.Text = "Close"; 143 | this.buttonClose.UseVisualStyleBackColor = true; 144 | this.buttonClose.Click += new System.EventHandler(this.buttonClose_Click); 145 | // 146 | // ShoutoutsEditDialog 147 | // 148 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 149 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 150 | this.CancelButton = this.buttonClose; 151 | this.ClientSize = new System.Drawing.Size(516, 281); 152 | this.Controls.Add(this.buttonClose); 153 | this.Controls.Add(this.tabControlShoutOutEditor); 154 | this.Name = "ShoutoutsEditDialog"; 155 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 156 | this.Text = "Edit Shoutouts"; 157 | this.Load += new System.EventHandler(this.ShoutoutsEditDialog_Load); 158 | this.tabControlShoutOutEditor.ResumeLayout(false); 159 | this.tabPageShoutOuts.ResumeLayout(false); 160 | this.tabPageAutomaticShoutOuts.ResumeLayout(false); 161 | this.ResumeLayout(false); 162 | 163 | } 164 | 165 | #endregion 166 | 167 | private System.Windows.Forms.TabControl tabControlShoutOutEditor; 168 | private System.Windows.Forms.TabPage tabPageShoutOuts; 169 | private System.Windows.Forms.TabPage tabPageAutomaticShoutOuts; 170 | private System.Windows.Forms.ListView listViewAutomaticShoutouts; 171 | private System.Windows.Forms.ColumnHeader columnHeader1; 172 | private System.Windows.Forms.ColumnHeader columnHeader2; 173 | private System.Windows.Forms.ListView listViewShououts; 174 | private System.Windows.Forms.ColumnHeader columnHeader3; 175 | private System.Windows.Forms.ColumnHeader columnHeader4; 176 | private System.Windows.Forms.Button buttonClose; 177 | } 178 | } -------------------------------------------------------------------------------- /APMMHXSaveEditor/Forms/GuildCardEditorDialog.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Data; 5 | using System.Drawing; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Windows.Forms; 9 | using System.IO; 10 | using APMMHXSaveEditor.Data; 11 | using APMMHXSaveEditor.Util; 12 | 13 | namespace APMMHXSaveEditor.Forms 14 | { 15 | public partial class GuildCardEditorDialog : Form 16 | { 17 | public GuildCard GuildCard { get; set; } 18 | 19 | private UInt16[] villageWeaponUsage; 20 | private UInt16[] hunterHubWeaponUsage; 21 | private UInt16[] arenaWeaponUsage; 22 | private int currentWeaponUsageIndex = -1; 23 | private int currentMonsterIndex = -1; 24 | 25 | public GuildCardEditorDialog(GuildCard guildCard) 26 | { 27 | InitializeComponent(); 28 | this.GuildCard = guildCard; 29 | 30 | textBoxName.Enabled = false; 31 | textBoxGuildCardID.MaxLength = 16; 32 | 33 | numericUpDownPlayTime.Maximum = UInt32.MaxValue; 34 | numericUpDownStreetPasses.Maximum = UInt16.MaxValue; 35 | numericUpDownVillageQuests.Maximum = UInt16.MaxValue; 36 | numericUpDownLowHubQuests.Maximum = UInt16.MaxValue; 37 | numericUpDownHighHubQuests.Maximum = UInt16.MaxValue; 38 | numericUpDownSpecialPermitQuests.Maximum = UInt16.MaxValue; 39 | numericUpDownArenaQuests.Maximum = UInt16.MaxValue; 40 | numericUpDownVillageWeapons.Maximum = UInt16.MaxValue; 41 | numericUpDownHunterHubWeapons.Maximum = UInt16.MaxValue; 42 | numericUpDownArenaWeapons.Maximum = UInt16.MaxValue; 43 | numericUpDownMonsterCaptures.Maximum = UInt16.MaxValue; 44 | numericUpDownMonsterKills.Maximum = UInt16.MaxValue; 45 | 46 | loadGuildCard(); 47 | comboBoxWeapons.DataSource = GameConstants.WeaponTypes; 48 | comboBoxMonsters.DataSource = GameConstants.MonsterHuntNames; 49 | } 50 | 51 | private void loadGuildCard() 52 | { 53 | BinaryReader binaryReader = new BinaryReader((Stream) new MemoryStream(GuildCard.GuildCardData)); 54 | char nextchar = binaryReader.ReadChar(); 55 | while (nextchar != '\0') 56 | { 57 | textBoxName.Text += nextchar; 58 | binaryReader.ReadChar(); 59 | nextchar = binaryReader.ReadChar(); 60 | } 61 | 62 | binaryReader.BaseStream.Seek(GuildCardOffsets.GUILD_CARD_ID_OFFSET, SeekOrigin.Begin); 63 | textBoxGuildCardID.Text = BitConverter.ToString(binaryReader.ReadBytes(8)).Replace("-", ""); 64 | 65 | binaryReader.BaseStream.Seek(GuildCardOffsets.PLAYTIME_OFFSET, SeekOrigin.Begin); 66 | numericUpDownPlayTime.Value = binaryReader.ReadUInt32(); 67 | 68 | binaryReader.BaseStream.Seek(GuildCardOffsets.STREET_PASS_OFFSETS, SeekOrigin.Begin); 69 | numericUpDownStreetPasses.Value = binaryReader.ReadUInt16(); 70 | 71 | binaryReader.BaseStream.Seek(GuildCardOffsets.VILLAGE_QUEST_OFFSETS, SeekOrigin.Begin); 72 | numericUpDownVillageQuests.Value = binaryReader.ReadUInt16(); 73 | numericUpDownLowHubQuests.Value = binaryReader.ReadUInt16(); 74 | numericUpDownHighHubQuests.Value = binaryReader.ReadUInt16(); 75 | numericUpDownSpecialPermitQuests.Value = binaryReader.ReadUInt16(); 76 | numericUpDownArenaQuests.Value = binaryReader.ReadUInt16(); 77 | 78 | binaryReader.BaseStream.Seek(GuildCardOffsets.VILLAGE_WEAPON_USAGE_OFFSET, SeekOrigin.Begin); 79 | villageWeaponUsage = new UInt16[Constants.TOTAL_WEAPONS]; 80 | for (int i = 0; i < Constants.TOTAL_WEAPONS; i++) 81 | { 82 | villageWeaponUsage[i] = binaryReader.ReadUInt16(); 83 | } 84 | 85 | hunterHubWeaponUsage = new UInt16[Constants.TOTAL_WEAPONS]; 86 | for (int i = 0; i < Constants.TOTAL_WEAPONS; i++) 87 | { 88 | hunterHubWeaponUsage[i] = binaryReader.ReadUInt16(); 89 | } 90 | 91 | arenaWeaponUsage = new UInt16[Constants.TOTAL_WEAPONS]; 92 | for (int i = 0; i < Constants.TOTAL_WEAPONS; i++) 93 | { 94 | arenaWeaponUsage[i] = binaryReader.ReadUInt16(); 95 | } 96 | 97 | //Character Information 98 | binaryReader.BaseStream.Seek(GuildCardOffsets.GUILDCARD_CHARACTER_VOICE_OFFSET, SeekOrigin.Begin); 99 | numericUpDownVoice.Value = binaryReader.ReadByte(); 100 | numericUpDownEyeColor.Value = binaryReader.ReadByte(); 101 | numericUpDownClothing.Value = binaryReader.ReadByte(); 102 | comboBoxGender.SelectedIndex = binaryReader.ReadByte(); 103 | binaryReader.ReadByte(); 104 | numericUpDownHair.Value = binaryReader.ReadByte(); 105 | numericUpDownFace.Value = binaryReader.ReadByte(); 106 | numericUpDownFeatures.Value = binaryReader.ReadByte(); 107 | } 108 | 109 | private void saveGuildCard() 110 | { 111 | saveWeaponUsage(); 112 | saveMonsterHunts(); 113 | BinaryWriter binaryWriter = new BinaryWriter((Stream)new MemoryStream(GuildCard.GuildCardData)); 114 | 115 | binaryWriter.BaseStream.Seek(GuildCardOffsets.GUILD_CARD_ID_OFFSET, SeekOrigin.Begin); 116 | binaryWriter.Write(Converters.StringToByteArray(textBoxGuildCardID.Text.PadLeft(16, '0'))); 117 | 118 | binaryWriter.BaseStream.Seek(GuildCardOffsets.PLAYTIME_OFFSET, SeekOrigin.Begin); 119 | binaryWriter.Write((UInt32)numericUpDownPlayTime.Value); 120 | 121 | binaryWriter.BaseStream.Seek(GuildCardOffsets.STREET_PASS_OFFSETS, SeekOrigin.Begin); 122 | binaryWriter.Write((UInt16)numericUpDownStreetPasses.Value); 123 | 124 | binaryWriter.BaseStream.Seek(GuildCardOffsets.VILLAGE_QUEST_OFFSETS, SeekOrigin.Begin); 125 | binaryWriter.Write((UInt16)numericUpDownVillageQuests.Value); 126 | binaryWriter.Write((UInt16)numericUpDownLowHubQuests.Value); 127 | binaryWriter.Write((UInt16)numericUpDownHighHubQuests.Value); 128 | binaryWriter.Write((UInt16)numericUpDownSpecialPermitQuests.Value); 129 | binaryWriter.Write((UInt16)numericUpDownArenaQuests.Value); 130 | 131 | binaryWriter.BaseStream.Seek(GuildCardOffsets.VILLAGE_WEAPON_USAGE_OFFSET, SeekOrigin.Begin); 132 | for (int i = 0; i < Constants.TOTAL_WEAPONS; i++) 133 | { 134 | binaryWriter.Write(villageWeaponUsage[i]); 135 | } 136 | for (int i = 0; i < Constants.TOTAL_WEAPONS; i++) 137 | { 138 | binaryWriter.Write(hunterHubWeaponUsage[i]); 139 | } 140 | for (int i = 0; i < Constants.TOTAL_WEAPONS; i++) 141 | { 142 | binaryWriter.Write(arenaWeaponUsage[i]); 143 | } 144 | 145 | //Character Information 146 | binaryWriter.BaseStream.Seek(GuildCardOffsets.GUILDCARD_CHARACTER_VOICE_OFFSET, SeekOrigin.Begin); 147 | binaryWriter.Write((byte)numericUpDownVoice.Value); 148 | binaryWriter.Write((byte)numericUpDownEyeColor.Value); 149 | binaryWriter.Write((byte)numericUpDownClothing.Value); 150 | binaryWriter.Write((byte)comboBoxGender.SelectedIndex); 151 | binaryWriter.BaseStream.Seek(1, SeekOrigin.Current); 152 | binaryWriter.Write((byte)numericUpDownHair.Value); 153 | binaryWriter.Write((byte)numericUpDownFace.Value); 154 | binaryWriter.Write((byte)numericUpDownFeatures.Value); 155 | } 156 | 157 | private void buttonOK_Click(object sender, EventArgs e) 158 | { 159 | try 160 | { 161 | saveGuildCard(); 162 | this.DialogResult = DialogResult.OK; 163 | } 164 | catch (Exception ex) 165 | { 166 | MessageBox.Show(ex.Message, "Save Unsuccessful"); 167 | } 168 | } 169 | 170 | private void buttonCancel_Click(object sender, EventArgs e) 171 | { 172 | this.DialogResult = DialogResult.Cancel; 173 | } 174 | 175 | private void GuildCardEditorDialog_Load(object sender, EventArgs e) 176 | { 177 | 178 | } 179 | 180 | private void comboBoxWeapons_SelectedIndexChanged(object sender, EventArgs e) 181 | { 182 | if (currentWeaponUsageIndex != -1) 183 | { 184 | saveWeaponUsage(); 185 | } 186 | currentWeaponUsageIndex = comboBoxWeapons.SelectedIndex; 187 | numericUpDownVillageWeapons.Value = villageWeaponUsage[currentWeaponUsageIndex]; 188 | numericUpDownHunterHubWeapons.Value = hunterHubWeaponUsage[currentWeaponUsageIndex]; 189 | numericUpDownArenaWeapons.Value = arenaWeaponUsage[currentWeaponUsageIndex]; 190 | } 191 | 192 | private void saveWeaponUsage() 193 | { 194 | villageWeaponUsage[currentWeaponUsageIndex] = (UInt16)numericUpDownVillageWeapons.Value; 195 | hunterHubWeaponUsage[currentWeaponUsageIndex] = (UInt16)numericUpDownHunterHubWeapons.Value; 196 | arenaWeaponUsage[currentWeaponUsageIndex] = (UInt16)numericUpDownArenaWeapons.Value; 197 | } 198 | 199 | private void comboBoxMonsters_SelectedIndexChanged(object sender, EventArgs e) 200 | { 201 | if (currentMonsterIndex != -1) 202 | { 203 | saveMonsterHunts(); 204 | } 205 | currentMonsterIndex = comboBoxMonsters.SelectedIndex; 206 | numericUpDownMonsterKills.Value = GuildCard.MonsterKills[currentMonsterIndex]; 207 | numericUpDownMonsterCaptures.Value = GuildCard.MonsterCaptures[currentMonsterIndex]; 208 | } 209 | 210 | private void saveMonsterHunts() 211 | { 212 | GuildCard.MonsterKills[currentMonsterIndex] = (UInt16)numericUpDownMonsterKills.Value; 213 | GuildCard.MonsterCaptures[currentMonsterIndex] = (UInt16)numericUpDownMonsterCaptures.Value; 214 | } 215 | 216 | 217 | } 218 | } 219 | -------------------------------------------------------------------------------- /APMMHXSaveEditor/APMMHXSaveEditor.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {E4768C41-32C8-4423-AB81-B0B6E8DBD5AD} 8 | WinExe 9 | Properties 10 | APMMHXSaveEditor 11 | APMMHXSaveEditor 12 | v4.0 13 | 512 14 | 15 | 16 | 17 | AnyCPU 18 | true 19 | full 20 | false 21 | bin\Debug\ 22 | DEBUG;TRACE 23 | prompt 24 | 4 25 | 26 | 27 | AnyCPU 28 | pdbonly 29 | true 30 | bin\Release\ 31 | TRACE 32 | prompt 33 | 4 34 | 35 | 36 | app.ico 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | Form 63 | 64 | 65 | AboutDialog.cs 66 | 67 | 68 | Form 69 | 70 | 71 | EquipmentEditDialog.cs 72 | 73 | 74 | Form 75 | 76 | 77 | ExportEquipmentBoxDialog.cs 78 | 79 | 80 | Form 81 | 82 | 83 | GuildCardEditorDialog.cs 84 | 85 | 86 | Form 87 | 88 | 89 | ImportEquipmentBoxDialog.cs 90 | 91 | 92 | Form 93 | 94 | 95 | ImportItemBoxListDialog.cs 96 | 97 | 98 | Form 99 | 100 | 101 | ItemEditDialog.cs 102 | 103 | 104 | Form 105 | 106 | 107 | MainForm.cs 108 | 109 | 110 | Form 111 | 112 | 113 | PalicoActionEditorDialog.cs 114 | 115 | 116 | Form 117 | 118 | 119 | PalicoEditDialog.cs 120 | 121 | 122 | Form 123 | 124 | 125 | PalicoSkillEditorDialog.cs 126 | 127 | 128 | Form 129 | 130 | 131 | SetItemBoxItemAmountDialog.cs 132 | 133 | 134 | Form 135 | 136 | 137 | ShoutoutsEditDialog.cs 138 | 139 | 140 | Form 141 | 142 | 143 | ShoutoutTextEditDialog.cs 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | AboutDialog.cs 152 | 153 | 154 | EquipmentEditDialog.cs 155 | 156 | 157 | ExportEquipmentBoxDialog.cs 158 | 159 | 160 | GuildCardEditorDialog.cs 161 | 162 | 163 | ImportEquipmentBoxDialog.cs 164 | 165 | 166 | ImportItemBoxListDialog.cs 167 | 168 | 169 | ItemEditDialog.cs 170 | 171 | 172 | MainForm.cs 173 | 174 | 175 | PalicoActionEditorDialog.cs 176 | 177 | 178 | PalicoEditDialog.cs 179 | 180 | 181 | PalicoSkillEditorDialog.cs 182 | 183 | 184 | SetItemBoxItemAmountDialog.cs 185 | 186 | 187 | ShoutoutsEditDialog.cs 188 | 189 | 190 | ShoutoutTextEditDialog.cs 191 | 192 | 193 | ResXFileCodeGenerator 194 | Resources.Designer.cs 195 | Designer 196 | 197 | 198 | True 199 | Resources.resx 200 | True 201 | 202 | 203 | SettingsSingleFileGenerator 204 | Settings.Designer.cs 205 | 206 | 207 | True 208 | Settings.settings 209 | True 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 226 | --------------------------------------------------------------------------------