├── .gitignore ├── .gitmodules ├── Borderlands.sln ├── LICENSE.txt ├── README.md └── projects ├── Gibbed.Borderlands.FileFormats ├── CharacterType.cs ├── Gibbed.Borderlands.FileFormats.csproj ├── LICENSE.txt ├── Properties │ └── AssemblyInfo.cs ├── Save │ ├── AmmoPool.cs │ ├── Echo.cs │ ├── EchoPlaythrough.cs │ ├── Item.cs │ ├── Mission.cs │ ├── MissionPlaythrough.cs │ ├── Player.cs │ ├── Skill.cs │ └── Weapon.cs ├── SaveFile.cs └── SaveStream.cs └── Gibbed.Borderlands.SaveEdit ├── DefaultPlayer └── Brick.cs ├── Editor.Designer.cs ├── Editor.cs ├── Editor.resx ├── Gibbed.Borderlands.SaveEdit.csproj ├── Helpers.cs ├── LICENSE.txt ├── PlayerClass.cs ├── Program.cs ├── Properties ├── AssemblyInfo.cs ├── DataSources │ └── Gibbed.Borderlands.FileFormats.SaveFile.datasource ├── Resources.Designer.cs ├── Resources.resx ├── Settings.Designer.cs └── Settings.settings └── Resources ├── Duplicate.png ├── ExportBrowser.png ├── ExportClipboard.png ├── New.png ├── Open.png ├── Pink.ico └── Save.png /.gitignore: -------------------------------------------------------------------------------- 1 | private/ 2 | projects/Test/ 3 | 4 | ## Ignore Visual Studio temporary files, build results, and 5 | ## files generated by popular Visual Studio add-ons. 6 | 7 | # User-specific files 8 | *.suo 9 | *.user 10 | *.userosscache 11 | *.sln.docstates 12 | 13 | # User-specific files (MonoDevelop/Xamarin Studio) 14 | *.userprefs 15 | 16 | # Build results 17 | [Dd]ebug/ 18 | [Dd]ebugPublic/ 19 | [Rr]elease/ 20 | [Rr]eleases/ 21 | x64/ 22 | x86/ 23 | bld/ 24 | [Bb]in/ 25 | [Bb]in_saveedit/ 26 | [Oo]bj/ 27 | [Ll]og/ 28 | 29 | # Visual Studio 2015 cache/options directory 30 | .vs/ 31 | # Uncomment if you have tasks that create the project's static files in wwwroot 32 | #wwwroot/ 33 | 34 | # MSTest test Results 35 | [Tt]est[Rr]esult*/ 36 | [Bb]uild[Ll]og.* 37 | 38 | # NUNIT 39 | *.VisualState.xml 40 | TestResult.xml 41 | 42 | # Build Results of an ATL Project 43 | [Dd]ebugPS/ 44 | [Rr]eleasePS/ 45 | dlldata.c 46 | 47 | # DNX 48 | project.lock.json 49 | artifacts/ 50 | 51 | *_i.c 52 | *_p.c 53 | *_i.h 54 | *.ilk 55 | *.meta 56 | *.obj 57 | *.pch 58 | *.pdb 59 | *.pgc 60 | *.pgd 61 | *.rsp 62 | *.sbr 63 | *.tlb 64 | *.tli 65 | *.tlh 66 | *.tmp 67 | *.tmp_proj 68 | *.log 69 | *.vspscc 70 | *.vssscc 71 | .builds 72 | *.pidb 73 | *.svclog 74 | *.scc 75 | 76 | # Chutzpah Test files 77 | _Chutzpah* 78 | 79 | # Visual C++ cache files 80 | ipch/ 81 | *.aps 82 | *.ncb 83 | *.opendb 84 | *.opensdf 85 | *.sdf 86 | *.cachefile 87 | *.VC.db 88 | *.VC.VC.opendb 89 | 90 | # Visual Studio profiler 91 | *.psess 92 | *.vsp 93 | *.vspx 94 | *.sap 95 | 96 | # TFS 2012 Local Workspace 97 | $tf/ 98 | 99 | # Guidance Automation Toolkit 100 | *.gpState 101 | 102 | # ReSharper is a .NET coding add-in 103 | _ReSharper*/ 104 | *.[Rr]e[Ss]harper 105 | *.DotSettings.user 106 | 107 | # JustCode is a .NET coding add-in 108 | .JustCode 109 | 110 | # TeamCity is a build add-in 111 | _TeamCity* 112 | 113 | # DotCover is a Code Coverage Tool 114 | *.dotCover 115 | 116 | # NCrunch 117 | _NCrunch_* 118 | .*crunch*.local.xml 119 | nCrunchTemp_* 120 | 121 | # MightyMoose 122 | *.mm.* 123 | AutoTest.Net/ 124 | 125 | # Web workbench (sass) 126 | .sass-cache/ 127 | 128 | # Installshield output folder 129 | [Ee]xpress/ 130 | 131 | # DocProject is a documentation generator add-in 132 | DocProject/buildhelp/ 133 | DocProject/Help/*.HxT 134 | DocProject/Help/*.HxC 135 | DocProject/Help/*.hhc 136 | DocProject/Help/*.hhk 137 | DocProject/Help/*.hhp 138 | DocProject/Help/Html2 139 | DocProject/Help/html 140 | 141 | # Click-Once directory 142 | publish/ 143 | 144 | # Publish Web Output 145 | *.[Pp]ublish.xml 146 | *.azurePubxml 147 | # TODO: Comment the next line if you want to checkin your web deploy settings 148 | # but database connection strings (with potential passwords) will be unencrypted 149 | *.pubxml 150 | *.publishproj 151 | 152 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 153 | # checkin your Azure Web App publish settings, but sensitive information contained 154 | # in these scripts will be unencrypted 155 | PublishScripts/ 156 | 157 | # NuGet Packages 158 | *.nupkg 159 | # The packages folder can be ignored because of Package Restore 160 | **/packages/* 161 | # except build/, which is used as an MSBuild target. 162 | !**/packages/build/ 163 | # Uncomment if necessary however generally it will be regenerated when needed 164 | #!**/packages/repositories.config 165 | # NuGet v3's project.json files produces more ignoreable files 166 | *.nuget.props 167 | *.nuget.targets 168 | 169 | # Microsoft Azure Build Output 170 | csx/ 171 | *.build.csdef 172 | 173 | # Microsoft Azure Emulator 174 | ecf/ 175 | rcf/ 176 | 177 | # Windows Store app package directories and files 178 | AppPackages/ 179 | BundleArtifacts/ 180 | Package.StoreAssociation.xml 181 | _pkginfo.txt 182 | 183 | # Visual Studio cache files 184 | # files ending in .cache can be ignored 185 | *.[Cc]ache 186 | # but keep track of directories ending in .cache 187 | !*.[Cc]ache/ 188 | 189 | # Others 190 | ClientBin/ 191 | ~$* 192 | *~ 193 | *.dbmdl 194 | *.dbproj.schemaview 195 | *.pfx 196 | *.publishsettings 197 | node_modules/ 198 | orleans.codegen.cs 199 | 200 | # Since there are multiple workflows, uncomment next line to ignore bower_components 201 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 202 | #bower_components/ 203 | 204 | # RIA/Silverlight projects 205 | Generated_Code/ 206 | 207 | # Backup & report files from converting an old project file 208 | # to a newer Visual Studio version. Backup files are not needed, 209 | # because we have git ;-) 210 | _UpgradeReport_Files/ 211 | Backup*/ 212 | UpgradeLog*.XML 213 | UpgradeLog*.htm 214 | 215 | # SQL Server files 216 | *.mdf 217 | *.ldf 218 | 219 | # Business Intelligence projects 220 | *.rdl.data 221 | *.bim.layout 222 | *.bim_*.settings 223 | 224 | # Microsoft Fakes 225 | FakesAssemblies/ 226 | 227 | # GhostDoc plugin setting file 228 | *.GhostDoc.xml 229 | 230 | # Node.js Tools for Visual Studio 231 | .ntvs_analysis.dat 232 | 233 | # Visual Studio 6 build log 234 | *.plg 235 | 236 | # Visual Studio 6 workspace options file 237 | *.opt 238 | 239 | # Visual Studio LightSwitch build output 240 | **/*.HTMLClient/GeneratedArtifacts 241 | **/*.DesktopClient/GeneratedArtifacts 242 | **/*.DesktopClient/ModelManifest.xml 243 | **/*.Server/GeneratedArtifacts 244 | **/*.Server/ModelManifest.xml 245 | _Pvt_Extensions 246 | 247 | # Paket dependency manager 248 | .paket/paket.exe 249 | paket-files/ 250 | 251 | # FAKE - F# Make 252 | .fake/ 253 | 254 | # JetBrains Rider 255 | .idea/ 256 | *.sln.iml -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "projects/Gibbed.IO"] 2 | path = projects/Gibbed.IO 3 | url = https://github.com/gibbed/Gibbed.IO.git 4 | -------------------------------------------------------------------------------- /Borderlands.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 11.00 3 | # Visual Studio 2010 4 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Gibbed.Borderlands.SaveEdit", "projects\Gibbed.Borderlands.SaveEdit\Gibbed.Borderlands.SaveEdit.csproj", "{3F77FC0A-0CFA-4533-AA7D-F55D5DD059D7}" 5 | EndProject 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Gibbed.Borderlands.FileFormats", "projects\Gibbed.Borderlands.FileFormats\Gibbed.Borderlands.FileFormats.csproj", "{E6FFE137-F5CF-4DFB-A59F-CCA65CF40BE8}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Gibbed.IO", "projects\Gibbed.IO\Gibbed.IO.csproj", "{047857BA-DAA3-4CA7-AFB8-A1B082B28C6A}" 9 | EndProject 10 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Misc", "Misc", "{BD7DD491-C608-403D-AFA9-E699360353EF}" 11 | EndProject 12 | Global 13 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 14 | Debug|Any CPU = Debug|Any CPU 15 | Release|Any CPU = Release|Any CPU 16 | EndGlobalSection 17 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 18 | {3F77FC0A-0CFA-4533-AA7D-F55D5DD059D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 19 | {3F77FC0A-0CFA-4533-AA7D-F55D5DD059D7}.Debug|Any CPU.Build.0 = Debug|Any CPU 20 | {3F77FC0A-0CFA-4533-AA7D-F55D5DD059D7}.Release|Any CPU.ActiveCfg = Release|Any CPU 21 | {3F77FC0A-0CFA-4533-AA7D-F55D5DD059D7}.Release|Any CPU.Build.0 = Release|Any CPU 22 | {E6FFE137-F5CF-4DFB-A59F-CCA65CF40BE8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 23 | {E6FFE137-F5CF-4DFB-A59F-CCA65CF40BE8}.Debug|Any CPU.Build.0 = Debug|Any CPU 24 | {E6FFE137-F5CF-4DFB-A59F-CCA65CF40BE8}.Release|Any CPU.ActiveCfg = Release|Any CPU 25 | {E6FFE137-F5CF-4DFB-A59F-CCA65CF40BE8}.Release|Any CPU.Build.0 = Release|Any CPU 26 | {047857BA-DAA3-4CA7-AFB8-A1B082B28C6A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 27 | {047857BA-DAA3-4CA7-AFB8-A1B082B28C6A}.Debug|Any CPU.Build.0 = Debug|Any CPU 28 | {047857BA-DAA3-4CA7-AFB8-A1B082B28C6A}.Release|Any CPU.ActiveCfg = Release|Any CPU 29 | {047857BA-DAA3-4CA7-AFB8-A1B082B28C6A}.Release|Any CPU.Build.0 = Release|Any CPU 30 | EndGlobalSection 31 | GlobalSection(SolutionProperties) = preSolution 32 | HideSolutionNode = FALSE 33 | EndGlobalSection 34 | GlobalSection(NestedProjects) = preSolution 35 | {047857BA-DAA3-4CA7-AFB8-A1B082B28C6A} = {BD7DD491-C608-403D-AFA9-E699360353EF} 36 | EndGlobalSection 37 | EndGlobal 38 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2019 Rick (rick 'at' gibbed 'dot' us) 2 | 3 | This software is provided 'as-is', without any express or implied 4 | warranty. In no event will the authors be held liable for any damages 5 | arising from the use of this software. 6 | 7 | Permission is granted to anyone to use this software for any purpose, 8 | including commercial applications, and to alter it and redistribute it 9 | freely, subject to the following restrictions: 10 | 11 | 1. The origin of this software must not be misrepresented; you must not 12 | claim that you wrote the original software. If you use this software 13 | in a product, an acknowledgment in the product documentation would be 14 | appreciated but is not required. 15 | 16 | 2. Altered source versions must be plainly marked as such, and must not be 17 | misrepresented as being the original software. 18 | 19 | 3. This notice may not be removed or altered from any source 20 | distribution. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Gibbed's Borderlands Save Editor 2 | 3 | **This editor is for the original Borderlands**. 4 | 5 | This editor was put together shortly after the release of the original Borderlands, however, due to personal reasons, development was dropped before any DLCs were released. 6 | 7 | No further development is planned. 8 | 9 | **If you're looking for an actual functional save editor, [WillowTree is the recommended choice](https://sourceforge.net/projects/willowtree/).** 10 | -------------------------------------------------------------------------------- /projects/Gibbed.Borderlands.FileFormats/CharacterType.cs: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2019 Rick (rick 'at' gibbed 'dot' us) 2 | * 3 | * This software is provided 'as-is', without any express or implied 4 | * warranty. In no event will the authors be held liable for any damages 5 | * arising from the use of this software. 6 | * 7 | * Permission is granted to anyone to use this software for any purpose, 8 | * including commercial applications, and to alter it and redistribute it 9 | * freely, subject to the following restrictions: 10 | * 11 | * 1. The origin of this software must not be misrepresented; you must not 12 | * claim that you wrote the original software. If you use this software 13 | * in a product, an acknowledgment in the product documentation would 14 | * be appreciated but is not required. 15 | * 16 | * 2. Altered source versions must be plainly marked as such, and must not 17 | * be misrepresented as being the original software. 18 | * 19 | * 3. This notice may not be removed or altered from any source 20 | * distribution. 21 | */ 22 | namespace Gibbed.Borderlands.FileFormats 23 | { 24 | public enum CharacterType 25 | { 26 | Berserker, 27 | Siren, 28 | Hunter, 29 | Soldier, 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /projects/Gibbed.Borderlands.FileFormats/Gibbed.Borderlands.FileFormats.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Debug 5 | AnyCPU 6 | 9.0.30729 7 | 2.0 8 | {E6FFE137-F5CF-4DFB-A59F-CCA65CF40BE8} 9 | Library 10 | Properties 11 | Gibbed.Borderlands.FileFormats 12 | Gibbed.Borderlands.FileFormats 13 | v4.0 14 | 512 15 | 16 | 17 | true 18 | full 19 | false 20 | bin\Debug\ 21 | DEBUG;TRACE 22 | prompt 23 | 4 24 | 25 | 26 | pdbonly 27 | true 28 | bin\Release\ 29 | TRACE 30 | prompt 31 | 4 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | {047857BA-DAA3-4CA7-AFB8-A1B082B28C6A} 61 | Gibbed.IO 62 | 63 | 64 | 65 | 72 | -------------------------------------------------------------------------------- /projects/Gibbed.Borderlands.FileFormats/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2019 Rick (rick 'at' gibbed 'dot' us) 2 | 3 | This software is provided 'as-is', without any express or implied 4 | warranty. In no event will the authors be held liable for any damages 5 | arising from the use of this software. 6 | 7 | Permission is granted to anyone to use this software for any purpose, 8 | including commercial applications, and to alter it and redistribute it 9 | freely, subject to the following restrictions: 10 | 11 | 1. The origin of this software must not be misrepresented; you must not 12 | claim that you wrote the original software. If you use this software 13 | in a product, an acknowledgment in the product documentation would be 14 | appreciated but is not required. 15 | 16 | 2. Altered source versions must be plainly marked as such, and must not be 17 | misrepresented as being the original software. 18 | 19 | 3. This notice may not be removed or altered from any source 20 | distribution. -------------------------------------------------------------------------------- /projects/Gibbed.Borderlands.FileFormats/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2019 Rick (rick 'at' gibbed 'dot' us) 2 | * 3 | * This software is provided 'as-is', without any express or implied 4 | * warranty. In no event will the authors be held liable for any damages 5 | * arising from the use of this software. 6 | * 7 | * Permission is granted to anyone to use this software for any purpose, 8 | * including commercial applications, and to alter it and redistribute it 9 | * freely, subject to the following restrictions: 10 | * 11 | * 1. The origin of this software must not be misrepresented; you must not 12 | * claim that you wrote the original software. If you use this software 13 | * in a product, an acknowledgment in the product documentation would 14 | * be appreciated but is not required. 15 | * 16 | * 2. Altered source versions must be plainly marked as such, and must not 17 | * be misrepresented as being the original software. 18 | * 19 | * 3. This notice may not be removed or altered from any source 20 | * distribution. 21 | */ 22 | using System.Reflection; 23 | using System.Runtime.InteropServices; 24 | 25 | // General Information about an assembly is controlled through the following 26 | // set of attributes. Change these attribute values to modify the information 27 | // associated with an assembly. 28 | 29 | [assembly: AssemblyTitle("Gibbed.Borderlands.FileFormats")] 30 | [assembly: AssemblyDescription("http://gib.me/")] 31 | [assembly: AssemblyConfiguration("")] 32 | [assembly: AssemblyCompany("Gibbed")] 33 | [assembly: AssemblyProduct("Gibbed.Borderlands.FileFormats")] 34 | [assembly: AssemblyCopyright("Copyright © Gibbed 2009")] 35 | [assembly: AssemblyTrademark("")] 36 | [assembly: AssemblyCulture("")] 37 | 38 | // Setting ComVisible to false makes the types in this assembly not visible 39 | // to COM components. If you need to access a type in this assembly from 40 | // COM, set the ComVisible attribute to true on that type. 41 | 42 | [assembly: ComVisible(false)] 43 | 44 | // The following GUID is for the ID of the typelib if this project is exposed to COM 45 | 46 | [assembly: Guid("dc6cb4e1-a567-4d0c-866e-e2fdb34d2d4a")] 47 | 48 | // Version information for an assembly consists of the following four values: 49 | // 50 | // Major Version 51 | // Minor Version 52 | // Build Number 53 | // Revision 54 | // 55 | // You can specify all the values or you can default the Build and Revision Numbers 56 | // by using the '*' as shown below: 57 | // [assembly: AssemblyVersion("1.0.*")] 58 | 59 | [assembly: AssemblyVersion("1.0.0.10")] 60 | [assembly: AssemblyFileVersion("1.0.0.10")] 61 | -------------------------------------------------------------------------------- /projects/Gibbed.Borderlands.FileFormats/Save/AmmoPool.cs: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2019 Rick (rick 'at' gibbed 'dot' us) 2 | * 3 | * This software is provided 'as-is', without any express or implied 4 | * warranty. In no event will the authors be held liable for any damages 5 | * arising from the use of this software. 6 | * 7 | * Permission is granted to anyone to use this software for any purpose, 8 | * including commercial applications, and to alter it and redistribute it 9 | * freely, subject to the following restrictions: 10 | * 11 | * 1. The origin of this software must not be misrepresented; you must not 12 | * claim that you wrote the original software. If you use this software 13 | * in a product, an acknowledgment in the product documentation would 14 | * be appreciated but is not required. 15 | * 16 | * 2. Altered source versions must be plainly marked as such, and must not 17 | * be misrepresented as being the original software. 18 | * 19 | * 3. This notice may not be removed or altered from any source 20 | * distribution. 21 | */ 22 | namespace Gibbed.Borderlands.FileFormats.Save 23 | { 24 | public class AmmoPool 25 | { 26 | public string Name { get; set; } 27 | public string Pool { get; set; } 28 | public float Quantity { get; set; } 29 | public int UpgradeLevel { get; set; } 30 | 31 | public void Deserialize(SaveStream input) 32 | { 33 | this.Name = input.ReadString(); 34 | this.Pool = input.ReadString(); 35 | this.Quantity = input.ReadValueF32(); 36 | this.UpgradeLevel = input.ReadValueS32(); 37 | } 38 | 39 | public void Serialize(SaveStream output) 40 | { 41 | output.WriteString(this.Name); 42 | output.WriteString(this.Pool); 43 | output.WriteValueF32(this.Quantity); 44 | output.WriteValueS32(this.UpgradeLevel); 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /projects/Gibbed.Borderlands.FileFormats/Save/Echo.cs: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2019 Rick (rick 'at' gibbed 'dot' us) 2 | * 3 | * This software is provided 'as-is', without any express or implied 4 | * warranty. In no event will the authors be held liable for any damages 5 | * arising from the use of this software. 6 | * 7 | * Permission is granted to anyone to use this software for any purpose, 8 | * including commercial applications, and to alter it and redistribute it 9 | * freely, subject to the following restrictions: 10 | * 11 | * 1. The origin of this software must not be misrepresented; you must not 12 | * claim that you wrote the original software. If you use this software 13 | * in a product, an acknowledgment in the product documentation would 14 | * be appreciated but is not required. 15 | * 16 | * 2. Altered source versions must be plainly marked as such, and must not 17 | * be misrepresented as being the original software. 18 | * 19 | * 3. This notice may not be removed or altered from any source 20 | * distribution. 21 | */ 22 | namespace Gibbed.Borderlands.FileFormats.Save 23 | { 24 | public class Echo 25 | { 26 | public string Name; 27 | public uint Unknown1; 28 | public uint Unknown2; 29 | 30 | public void Deserialize(SaveStream input) 31 | { 32 | this.Name = input.ReadString(); 33 | this.Unknown1 = input.ReadValueU32(); 34 | this.Unknown2 = input.ReadValueU32(); 35 | } 36 | 37 | public void Serialize(SaveStream output) 38 | { 39 | output.WriteString(this.Name); 40 | output.WriteValueU32(this.Unknown1); 41 | output.WriteValueU32(this.Unknown2); 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /projects/Gibbed.Borderlands.FileFormats/Save/EchoPlaythrough.cs: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2019 Rick (rick 'at' gibbed 'dot' us) 2 | * 3 | * This software is provided 'as-is', without any express or implied 4 | * warranty. In no event will the authors be held liable for any damages 5 | * arising from the use of this software. 6 | * 7 | * Permission is granted to anyone to use this software for any purpose, 8 | * including commercial applications, and to alter it and redistribute it 9 | * freely, subject to the following restrictions: 10 | * 11 | * 1. The origin of this software must not be misrepresented; you must not 12 | * claim that you wrote the original software. If you use this software 13 | * in a product, an acknowledgment in the product documentation would 14 | * be appreciated but is not required. 15 | * 16 | * 2. Altered source versions must be plainly marked as such, and must not 17 | * be misrepresented as being the original software. 18 | * 19 | * 3. This notice may not be removed or altered from any source 20 | * distribution. 21 | */ 22 | using System.Collections.Generic; 23 | 24 | namespace Gibbed.Borderlands.FileFormats.Save 25 | { 26 | public class EchoPlaythrough 27 | { 28 | public uint Playthrough; 29 | public List Echoes = new List(); 30 | 31 | public void Deserialize(SaveStream input) 32 | { 33 | this.Playthrough = input.ReadValueU32(); 34 | 35 | // Echos 36 | { 37 | uint count = input.ReadValueU32(); 38 | this.Echoes.Clear(); 39 | for (uint i = 0; i < count; i++) 40 | { 41 | Echo echo = new Echo(); 42 | echo.Deserialize(input); 43 | this.Echoes.Add(echo); 44 | } 45 | } 46 | } 47 | 48 | public void Serialize(SaveStream output) 49 | { 50 | output.WriteValueU32(this.Playthrough); 51 | 52 | // Echos 53 | { 54 | output.WriteValueS32(this.Echoes.Count); 55 | foreach (Echo echo in this.Echoes) 56 | { 57 | echo.Serialize(output); 58 | } 59 | } 60 | } 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /projects/Gibbed.Borderlands.FileFormats/Save/Item.cs: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2019 Rick (rick 'at' gibbed 'dot' us) 2 | * 3 | * This software is provided 'as-is', without any express or implied 4 | * warranty. In no event will the authors be held liable for any damages 5 | * arising from the use of this software. 6 | * 7 | * Permission is granted to anyone to use this software for any purpose, 8 | * including commercial applications, and to alter it and redistribute it 9 | * freely, subject to the following restrictions: 10 | * 11 | * 1. The origin of this software must not be misrepresented; you must not 12 | * claim that you wrote the original software. If you use this software 13 | * in a product, an acknowledgment in the product documentation would 14 | * be appreciated but is not required. 15 | * 16 | * 2. Altered source versions must be plainly marked as such, and must not 17 | * be misrepresented as being the original software. 18 | * 19 | * 3. This notice may not be removed or altered from any source 20 | * distribution. 21 | */ 22 | using System; 23 | 24 | namespace Gibbed.Borderlands.FileFormats.Save 25 | { 26 | public class Item : ICloneable 27 | { 28 | public string Grade { get; set; } 29 | public string Type { get; set; } 30 | public string Body { get; set; } 31 | public string LeftSide { get; set; } 32 | public string RightSide { get; set; } 33 | public string Material { get; set; } 34 | public string Manufacturer { get; set; } 35 | public string Prefix { get; set; } 36 | public string Title { get; set; } 37 | public uint Unknown09 { get; set; } 38 | public uint Quality { get; set; } 39 | public uint Equipped { get; set; } 40 | 41 | public void Deserialize(SaveStream input) 42 | { 43 | this.Grade = input.ReadString(); 44 | this.Type = input.ReadString(); 45 | this.Body = input.ReadString(); 46 | this.LeftSide = input.ReadString(); 47 | this.RightSide = input.ReadString(); 48 | this.Material = input.ReadString(); 49 | this.Manufacturer = input.ReadString(); 50 | this.Prefix = input.ReadString(); 51 | this.Title = input.ReadString(); 52 | this.Unknown09 = input.ReadValueU32(); 53 | this.Quality = input.ReadValueU32(); 54 | this.Equipped = input.ReadValueU32(); 55 | } 56 | 57 | public void Serialize(SaveStream output) 58 | { 59 | output.WriteString(this.Grade); 60 | output.WriteString(this.Type); 61 | output.WriteString(this.Body); 62 | output.WriteString(this.LeftSide); 63 | output.WriteString(this.RightSide); 64 | output.WriteString(this.Material); 65 | output.WriteString(this.Manufacturer); 66 | output.WriteString(this.Prefix); 67 | output.WriteString(this.Title); 68 | output.WriteValueU32(this.Unknown09); 69 | output.WriteValueU32(this.Quality); 70 | output.WriteValueU32(this.Equipped); 71 | } 72 | 73 | public object Clone() 74 | { 75 | return this.MemberwiseClone(); 76 | } 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /projects/Gibbed.Borderlands.FileFormats/Save/Mission.cs: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2019 Rick (rick 'at' gibbed 'dot' us) 2 | * 3 | * This software is provided 'as-is', without any express or implied 4 | * warranty. In no event will the authors be held liable for any damages 5 | * arising from the use of this software. 6 | * 7 | * Permission is granted to anyone to use this software for any purpose, 8 | * including commercial applications, and to alter it and redistribute it 9 | * freely, subject to the following restrictions: 10 | * 11 | * 1. The origin of this software must not be misrepresented; you must not 12 | * claim that you wrote the original software. If you use this software 13 | * in a product, an acknowledgment in the product documentation would 14 | * be appreciated but is not required. 15 | * 16 | * 2. Altered source versions must be plainly marked as such, and must not 17 | * be misrepresented as being the original software. 18 | * 19 | * 3. This notice may not be removed or altered from any source 20 | * distribution. 21 | */ 22 | using System.Collections.Generic; 23 | 24 | namespace Gibbed.Borderlands.FileFormats.Save 25 | { 26 | public class Mission 27 | { 28 | public class Unknown4 29 | { 30 | public string Unknown0; 31 | public uint Unknown1; 32 | 33 | public void Deserialize(SaveStream input) 34 | { 35 | this.Unknown0 = input.ReadString(); 36 | this.Unknown1 = input.ReadValueU32(); 37 | } 38 | 39 | public void Serialize(SaveStream output) 40 | { 41 | output.WriteString(this.Unknown0); 42 | output.WriteValueU32(this.Unknown1); 43 | } 44 | } 45 | 46 | public string Name; 47 | public uint Unknown1; 48 | public uint Unknown2; 49 | public uint Unknown3; 50 | public List Unknown4s = new List(); 51 | 52 | public void Deserialize(SaveStream input) 53 | { 54 | this.Name = input.ReadString(); 55 | this.Unknown1 = input.ReadValueU32(); 56 | this.Unknown2 = input.ReadValueU32(); 57 | this.Unknown3 = input.ReadValueU32(); 58 | 59 | // States 60 | { 61 | uint count = input.ReadValueU32(); 62 | this.Unknown4s.Clear(); 63 | for (uint i = 0; i < count; i++) 64 | { 65 | Unknown4 unknown3 = new Unknown4(); 66 | unknown3.Deserialize(input); 67 | this.Unknown4s.Add(unknown3); 68 | } 69 | } 70 | } 71 | 72 | public void Serialize(SaveStream output) 73 | { 74 | output.WriteString(this.Name); 75 | output.WriteValueU32(this.Unknown1); 76 | output.WriteValueU32(this.Unknown2); 77 | output.WriteValueU32(this.Unknown3); 78 | 79 | // States 80 | { 81 | output.WriteValueS32(this.Unknown4s.Count); 82 | foreach (Unknown4 unknown3 in this.Unknown4s) 83 | { 84 | unknown3.Serialize(output); 85 | } 86 | } 87 | } 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /projects/Gibbed.Borderlands.FileFormats/Save/MissionPlaythrough.cs: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2019 Rick (rick 'at' gibbed 'dot' us) 2 | * 3 | * This software is provided 'as-is', without any express or implied 4 | * warranty. In no event will the authors be held liable for any damages 5 | * arising from the use of this software. 6 | * 7 | * Permission is granted to anyone to use this software for any purpose, 8 | * including commercial applications, and to alter it and redistribute it 9 | * freely, subject to the following restrictions: 10 | * 11 | * 1. The origin of this software must not be misrepresented; you must not 12 | * claim that you wrote the original software. If you use this software 13 | * in a product, an acknowledgment in the product documentation would 14 | * be appreciated but is not required. 15 | * 16 | * 2. Altered source versions must be plainly marked as such, and must not 17 | * be misrepresented as being the original software. 18 | * 19 | * 3. This notice may not be removed or altered from any source 20 | * distribution. 21 | */ 22 | using System.Collections.Generic; 23 | 24 | namespace Gibbed.Borderlands.FileFormats.Save 25 | { 26 | public class MissionPlaythrough 27 | { 28 | public uint Playthrough; 29 | public string ActiveMission; 30 | public List Missions = new List(); 31 | 32 | public void Deserialize(SaveStream input) 33 | { 34 | this.Playthrough = input.ReadValueU32(); 35 | this.ActiveMission = input.ReadString(); 36 | 37 | // Missions 38 | { 39 | uint count = input.ReadValueU32(); 40 | this.Missions.Clear(); 41 | for (uint i = 0; i < count; i++) 42 | { 43 | Mission mission = new Mission(); 44 | mission.Deserialize(input); 45 | this.Missions.Add(mission); 46 | } 47 | } 48 | } 49 | 50 | public void Serialize(SaveStream output) 51 | { 52 | output.WriteValueU32(this.Playthrough); 53 | output.WriteString(this.ActiveMission); 54 | 55 | // Missions 56 | { 57 | output.WriteValueS32(this.Missions.Count); 58 | foreach (Mission mission in this.Missions) 59 | { 60 | mission.Serialize(output); 61 | } 62 | } 63 | } 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /projects/Gibbed.Borderlands.FileFormats/Save/Player.cs: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2019 Rick (rick 'at' gibbed 'dot' us) 2 | * 3 | * This software is provided 'as-is', without any express or implied 4 | * warranty. In no event will the authors be held liable for any damages 5 | * arising from the use of this software. 6 | * 7 | * Permission is granted to anyone to use this software for any purpose, 8 | * including commercial applications, and to alter it and redistribute it 9 | * freely, subject to the following restrictions: 10 | * 11 | * 1. The origin of this software must not be misrepresented; you must not 12 | * claim that you wrote the original software. If you use this software 13 | * in a product, an acknowledgment in the product documentation would 14 | * be appreciated but is not required. 15 | * 16 | * 2. Altered source versions must be plainly marked as such, and must not 17 | * be misrepresented as being the original software. 18 | * 19 | * 3. This notice may not be removed or altered from any source 20 | * distribution. 21 | */ 22 | using System; 23 | using System.Collections.Generic; 24 | 25 | namespace Gibbed.Borderlands.FileFormats.Save 26 | { 27 | public class Player 28 | { 29 | public uint Version; 30 | public string Character { get; set; } 31 | public uint Level { get; set; } 32 | public uint Experience { get; set; } 33 | public uint SkillPoints { get; set; } 34 | public uint Unknown03; 35 | public uint Money { get; set; } 36 | public uint MaybePlaythroughUnlocked { get; set; } 37 | public List Skills { get; set; } 38 | public uint Unknown07; 39 | public uint Unknown08; 40 | public uint Unknown09; 41 | public uint Unknown10; 42 | public List AmmoPools { get; set; } 43 | public List Items { get; set; } 44 | public uint BackpackSlots { get; set; } 45 | public uint WeaponSlots { get; set; } 46 | public List Weapons { get; set; } 47 | public byte[] Stats = new byte[0]; 48 | public List VisitedStations { get; set; } 49 | public string CurrentStation { get; set; } 50 | //public ??? Unknown19 = ... 51 | //public ??? Unknown20 = ... 52 | public string Unknown21; 53 | public uint Unknown22; 54 | public uint Unknown23; 55 | public uint SaveSlot { get; set; } // Saving uses this to determin what save file to save over, LAME! 56 | public uint ExtraDataVersion; 57 | public uint Unknown26; 58 | public List MissionPlaythroughs = new List(); 59 | public uint PlayTime; // If this is 0, both 'Time' and 'Save' on the load game screen will not be visible. 60 | public string SaveTime; 61 | public string Name { get; set; } 62 | public uint Color1; 63 | public uint Color2; 64 | public uint Color3; 65 | public uint Unknown34; 66 | public List Unknown35 = new List(); 67 | public List Unknown36 = new List(); 68 | public List EchoPlaythroughs = new List(); 69 | public byte[] Unknown38 = new byte[0]; 70 | 71 | #region Colors 72 | public string _Color1 73 | { 74 | get 75 | { 76 | return this.Color1.ToString("X8"); 77 | } 78 | 79 | set 80 | { 81 | this.Color1 = UInt32.Parse(value, System.Globalization.NumberStyles.AllowHexSpecifier); 82 | } 83 | } 84 | 85 | public String _Color2 86 | { 87 | get 88 | { 89 | return this.Color2.ToString("X8"); 90 | } 91 | 92 | set 93 | { 94 | this.Color2 = UInt32.Parse(value, System.Globalization.NumberStyles.AllowHexSpecifier); 95 | } 96 | } 97 | 98 | public String _Color3 99 | { 100 | get 101 | { 102 | return this.Color3.ToString("X8"); 103 | } 104 | 105 | set 106 | { 107 | this.Color3 = UInt32.Parse(value, System.Globalization.NumberStyles.AllowHexSpecifier); 108 | } 109 | } 110 | #endregion 111 | 112 | public Player() 113 | { 114 | this.AmmoPools = new List(); 115 | this.Items = new List(); 116 | this.Weapons = new List(); 117 | this.Skills = new List(); 118 | this.VisitedStations = new List(); 119 | } 120 | 121 | public void Deserialize(SaveStream input) 122 | { 123 | if (input.ReadStaticString(4) != "PLYR") 124 | { 125 | throw new FormatException("not player data"); 126 | } 127 | 128 | this.Version = input.ReadValueU32(); 129 | if (this.Version != 35) 130 | { 131 | throw new FormatException("unsupported player data version (" + this.Version.ToString() + ")"); 132 | } 133 | 134 | this.Character = input.ReadString(); 135 | this.Level = input.ReadValueU32(); 136 | this.Experience = input.ReadValueU32(); 137 | this.SkillPoints = input.ReadValueU32(); 138 | this.Unknown03 = input.ReadValueU32(); 139 | this.Money = input.ReadValueU32(); 140 | this.MaybePlaythroughUnlocked = input.ReadValueU32(); 141 | 142 | // Skills 143 | { 144 | uint count = input.ReadValueU32(); 145 | this.Skills.Clear(); 146 | for (uint i = 0; i < count; i++) 147 | { 148 | Skill skill = new Skill(); 149 | skill.Deserialize(input); 150 | this.Skills.Add(skill); 151 | } 152 | } 153 | 154 | this.Unknown07 = input.ReadValueU32(); 155 | this.Unknown08 = input.ReadValueU32(); 156 | this.Unknown09 = input.ReadValueU32(); 157 | this.Unknown10 = input.ReadValueU32(); 158 | 159 | // Ammo Pools 160 | { 161 | uint count = input.ReadValueU32(); 162 | this.AmmoPools.Clear(); 163 | for (uint i = 0; i < count; i++) 164 | { 165 | AmmoPool pool = new AmmoPool(); 166 | pool.Deserialize(input); 167 | this.AmmoPools.Add(pool); 168 | } 169 | } 170 | 171 | // Items 172 | { 173 | uint count = input.ReadValueU32(); 174 | this.Items.Clear(); 175 | for (uint i = 0; i < count; i++) 176 | { 177 | Item item = new Item(); 178 | item.Deserialize(input); 179 | this.Items.Add(item); 180 | } 181 | } 182 | 183 | this.BackpackSlots = input.ReadValueU32(); 184 | this.WeaponSlots = input.ReadValueU32(); 185 | 186 | // Weapons 187 | { 188 | uint count = input.ReadValueU32(); 189 | this.Weapons.Clear(); 190 | for (uint i = 0; i < count; i++) 191 | { 192 | Weapon weapon = new Weapon(); 193 | weapon.Deserialize(input); 194 | this.Weapons.Add(weapon); 195 | } 196 | } 197 | 198 | this.Stats = input.ReadBuffer(); 199 | 200 | // Visited Zones 201 | { 202 | uint count = input.ReadValueU32(); 203 | this.VisitedStations.Clear(); 204 | for (uint i = 0; i < count; i++) 205 | { 206 | this.VisitedStations.Add(input.ReadString()); 207 | } 208 | } 209 | 210 | this.CurrentStation = input.ReadString(); 211 | 212 | // Unknown19 213 | { 214 | uint count = input.ReadValueU32(); 215 | if (count != 0) 216 | { 217 | throw new Exception(); 218 | } 219 | } 220 | 221 | // Unknown20 222 | { 223 | uint count = input.ReadValueU32(); 224 | if (count != 0) 225 | { 226 | throw new Exception(); 227 | } 228 | } 229 | 230 | this.Unknown21 = input.ReadString(); ; 231 | this.Unknown22 = input.ReadValueU32(); 232 | this.Unknown23 = input.ReadValueU32(); 233 | this.SaveSlot = input.ReadValueU32(); 234 | this.ExtraDataVersion = input.ReadValueU32(); 235 | 236 | if (this.ExtraDataVersion >= 27) 237 | { 238 | this.Unknown26 = input.ReadValueU32(); 239 | } 240 | 241 | if (this.ExtraDataVersion >= 28 && this.ExtraDataVersion <= 31) 242 | { 243 | // junk 244 | input.ReadString(); 245 | 246 | { 247 | uint count = input.ReadValueU32(); 248 | for (uint i = 0; i < count; i++) 249 | { 250 | input.ReadString(); 251 | } 252 | } 253 | } 254 | 255 | if (this.ExtraDataVersion >= 29) 256 | { 257 | // Mission Zones 258 | { 259 | uint count = input.ReadValueU32(); 260 | this.MissionPlaythroughs.Clear(); 261 | for (uint i = 0; i < count; i++) 262 | { 263 | MissionPlaythrough missionZone = new MissionPlaythrough(); 264 | missionZone.Deserialize(input); 265 | this.MissionPlaythroughs.Add(missionZone); 266 | } 267 | } 268 | } 269 | 270 | if (this.ExtraDataVersion >= 30) 271 | { 272 | this.PlayTime = input.ReadValueU32(); 273 | this.SaveTime = input.ReadString(); 274 | } 275 | 276 | if (this.ExtraDataVersion >= 31) 277 | { 278 | this.Name = input.ReadString(); 279 | this.Color1 = input.ReadValueU32(); 280 | this.Color2 = input.ReadValueU32(); 281 | this.Color3 = input.ReadValueU32(); 282 | } 283 | 284 | if (this.ExtraDataVersion >= 32) 285 | { 286 | this.Unknown34 = input.ReadValueU32(); 287 | 288 | // Unknown35 289 | { 290 | uint count = input.ReadValueU32(); 291 | this.Unknown35.Clear(); 292 | for (uint i = 0; i < count; i++) 293 | { 294 | this.Unknown35.Add(input.ReadValueU32()); 295 | } 296 | } 297 | } 298 | 299 | if (this.ExtraDataVersion >= 33) 300 | { 301 | // Unknown36 302 | { 303 | uint count = input.ReadValueU32(); 304 | this.Unknown36.Clear(); 305 | for (uint i = 0; i < count; i++) 306 | { 307 | this.Unknown36.Add(input.ReadValueU32()); 308 | } 309 | } 310 | } 311 | 312 | if (this.ExtraDataVersion >= 34) 313 | { 314 | // Echo Zones 315 | { 316 | uint count = input.ReadValueU32(); 317 | this.EchoPlaythroughs.Clear(); 318 | for (uint i = 0; i < count; i++) 319 | { 320 | EchoPlaythrough echoZone = new EchoPlaythrough(); 321 | echoZone.Deserialize(input); 322 | this.EchoPlaythroughs.Add(echoZone); 323 | } 324 | } 325 | } 326 | 327 | if (this.ExtraDataVersion >= 35) 328 | { 329 | // Unknown38 330 | this.Unknown38 = input.ReadBuffer(); 331 | } 332 | } 333 | 334 | public void Serialize(SaveStream output) 335 | { 336 | output.WriteStaticString("PLYR"); 337 | output.WriteValueU32(this.Version); 338 | output.WriteString(this.Character); 339 | output.WriteValueU32(this.Level); 340 | output.WriteValueU32(this.Experience); 341 | output.WriteValueU32(this.SkillPoints); 342 | output.WriteValueU32(this.Unknown03); 343 | output.WriteValueU32(this.Money); 344 | output.WriteValueU32(this.MaybePlaythroughUnlocked); 345 | 346 | // Skills 347 | { 348 | output.WriteValueS32(this.Skills.Count); 349 | foreach (Skill skill in this.Skills) 350 | { 351 | skill.Serialize(output); 352 | } 353 | } 354 | 355 | output.WriteValueU32(this.Unknown07); 356 | output.WriteValueU32(this.Unknown08); 357 | output.WriteValueU32(this.Unknown09); 358 | output.WriteValueU32(this.Unknown10); 359 | 360 | // Ammo Pools 361 | { 362 | output.WriteValueS32(this.AmmoPools.Count); 363 | foreach (AmmoPool pool in this.AmmoPools) 364 | { 365 | pool.Serialize(output); 366 | } 367 | } 368 | 369 | // Items 370 | { 371 | output.WriteValueS32(this.Items.Count); 372 | foreach (Item item in this.Items) 373 | { 374 | item.Serialize(output); 375 | } 376 | } 377 | 378 | output.WriteValueU32(this.BackpackSlots); 379 | output.WriteValueU32(this.WeaponSlots); 380 | 381 | // Weapons 382 | { 383 | output.WriteValueS32(this.Weapons.Count); 384 | foreach (Weapon weapon in this.Weapons) 385 | { 386 | weapon.Serialize(output); 387 | } 388 | } 389 | 390 | // Unknown16 391 | { 392 | output.WriteBuffer(this.Stats); 393 | } 394 | 395 | // Visited Zones 396 | { 397 | output.WriteValueS32(this.VisitedStations.Count); 398 | foreach (string visitedZone in this.VisitedStations) 399 | { 400 | output.WriteString(visitedZone); 401 | } 402 | } 403 | 404 | output.WriteString(this.CurrentStation); 405 | 406 | // Unknown19 407 | { 408 | // FIXME 409 | output.WriteValueS32(0); 410 | } 411 | 412 | // Unknown20 413 | { 414 | // FIXME 415 | output.WriteValueS32(0); 416 | } 417 | 418 | output.WriteString(this.Unknown21); 419 | output.WriteValueU32(this.Unknown22); 420 | output.WriteValueU32(this.Unknown23); 421 | output.WriteValueU32(this.SaveSlot); 422 | output.WriteValueU32(this.ExtraDataVersion); 423 | 424 | if (this.ExtraDataVersion >= 27) 425 | { 426 | output.WriteValueU32(this.Unknown26); 427 | } 428 | 429 | if (this.ExtraDataVersion >= 28 && this.ExtraDataVersion <= 31) 430 | { 431 | // junk 432 | output.WriteString(""); 433 | output.WriteValueU32(0); 434 | } 435 | 436 | if (this.ExtraDataVersion >= 29) 437 | { 438 | // Mission Zones 439 | { 440 | output.WriteValueS32(this.MissionPlaythroughs.Count); 441 | foreach (MissionPlaythrough missionZone in this.MissionPlaythroughs) 442 | { 443 | missionZone.Serialize(output); 444 | } 445 | } 446 | } 447 | 448 | if (this.ExtraDataVersion >= 30) 449 | { 450 | output.WriteValueU32(this.PlayTime); 451 | output.WriteString(this.SaveTime); 452 | } 453 | 454 | if (this.ExtraDataVersion >= 31) 455 | { 456 | output.WriteString(this.Name); 457 | output.WriteValueU32(this.Color1); 458 | output.WriteValueU32(this.Color2); 459 | output.WriteValueU32(this.Color3); 460 | } 461 | 462 | if (this.ExtraDataVersion >= 32) 463 | { 464 | output.WriteValueU32(this.Unknown34); 465 | 466 | // Unknown35 467 | { 468 | output.WriteValueS32(this.Unknown35.Count); 469 | foreach (UInt32 value in this.Unknown35) 470 | { 471 | output.WriteValueU32(value); 472 | } 473 | } 474 | } 475 | 476 | if (this.ExtraDataVersion >= 33) 477 | { 478 | // Unknown36 479 | { 480 | output.WriteValueS32(this.Unknown36.Count); 481 | foreach (UInt32 value in this.Unknown36) 482 | { 483 | output.WriteValueU32(value); 484 | } 485 | } 486 | } 487 | 488 | if (this.ExtraDataVersion >= 34) 489 | { 490 | // Echo Zones 491 | { 492 | output.WriteValueS32(this.EchoPlaythroughs.Count); 493 | foreach (EchoPlaythrough echoZone in this.EchoPlaythroughs) 494 | { 495 | echoZone.Serialize(output); 496 | } 497 | } 498 | } 499 | 500 | if (this.ExtraDataVersion >= 35) 501 | { 502 | output.WriteBuffer(this.Unknown38); 503 | } 504 | } 505 | } 506 | } 507 | -------------------------------------------------------------------------------- /projects/Gibbed.Borderlands.FileFormats/Save/Skill.cs: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2019 Rick (rick 'at' gibbed 'dot' us) 2 | * 3 | * This software is provided 'as-is', without any express or implied 4 | * warranty. In no event will the authors be held liable for any damages 5 | * arising from the use of this software. 6 | * 7 | * Permission is granted to anyone to use this software for any purpose, 8 | * including commercial applications, and to alter it and redistribute it 9 | * freely, subject to the following restrictions: 10 | * 11 | * 1. The origin of this software must not be misrepresented; you must not 12 | * claim that you wrote the original software. If you use this software 13 | * in a product, an acknowledgment in the product documentation would 14 | * be appreciated but is not required. 15 | * 16 | * 2. Altered source versions must be plainly marked as such, and must not 17 | * be misrepresented as being the original software. 18 | * 19 | * 3. This notice may not be removed or altered from any source 20 | * distribution. 21 | */ 22 | namespace Gibbed.Borderlands.FileFormats.Save 23 | { 24 | public class Skill 25 | { 26 | public string Name { get; set; } 27 | public uint Level { get; set; } 28 | public uint Experience { get; set; } 29 | public int ArtifactMode { get; set; } 30 | 31 | public void Deserialize(SaveStream input) 32 | { 33 | this.Name = input.ReadString(); 34 | this.Level = input.ReadValueU32(); 35 | this.Experience = input.ReadValueU32(); 36 | this.ArtifactMode = input.ReadValueS32(); 37 | } 38 | 39 | public void Serialize(SaveStream output) 40 | { 41 | output.WriteString(this.Name); 42 | output.WriteValueU32(this.Level); 43 | output.WriteValueU32(this.Experience); 44 | output.WriteValueS32(this.ArtifactMode); 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /projects/Gibbed.Borderlands.FileFormats/Save/Weapon.cs: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2019 Rick (rick 'at' gibbed 'dot' us) 2 | * 3 | * This software is provided 'as-is', without any express or implied 4 | * warranty. In no event will the authors be held liable for any damages 5 | * arising from the use of this software. 6 | * 7 | * Permission is granted to anyone to use this software for any purpose, 8 | * including commercial applications, and to alter it and redistribute it 9 | * freely, subject to the following restrictions: 10 | * 11 | * 1. The origin of this software must not be misrepresented; you must not 12 | * claim that you wrote the original software. If you use this software 13 | * in a product, an acknowledgment in the product documentation would 14 | * be appreciated but is not required. 15 | * 16 | * 2. Altered source versions must be plainly marked as such, and must not 17 | * be misrepresented as being the original software. 18 | * 19 | * 3. This notice may not be removed or altered from any source 20 | * distribution. 21 | */ 22 | using System; 23 | 24 | namespace Gibbed.Borderlands.FileFormats.Save 25 | { 26 | public class Weapon : ICloneable 27 | { 28 | public string Grade { get; set; } 29 | public string Manufacturer { get; set; } 30 | public string Type { get; set; } 31 | public string Body { get; set; } 32 | public string Grip { get; set; } 33 | public string Magazine { get; set; } 34 | public string Barrel { get; set; } 35 | public string Sight { get; set; } 36 | public string Stock { get; set; } 37 | public string Action { get; set; } 38 | public string Accessory { get; set; } 39 | public string Material { get; set; } 40 | public string Prefix { get; set; } 41 | public string Title { get; set; } 42 | public uint ClipSize { get; set; } 43 | public uint Quality { get; set; } 44 | public uint EquipSlot { get; set; } 45 | 46 | public void Deserialize(SaveStream input) 47 | { 48 | this.Grade = input.ReadString(); 49 | this.Manufacturer = input.ReadString(); 50 | this.Type = input.ReadString(); 51 | this.Body = input.ReadString(); 52 | this.Grip = input.ReadString(); 53 | this.Magazine = input.ReadString(); 54 | this.Barrel = input.ReadString(); 55 | this.Sight = input.ReadString(); 56 | this.Stock = input.ReadString(); 57 | this.Action = input.ReadString(); 58 | this.Accessory = input.ReadString(); 59 | this.Material = input.ReadString(); 60 | this.Prefix = input.ReadString(); 61 | this.Title = input.ReadString(); 62 | this.ClipSize = input.ReadValueU32(); 63 | this.Quality = input.ReadValueU32(); 64 | this.EquipSlot = input.ReadValueU32(); 65 | } 66 | 67 | public void Serialize(SaveStream output) 68 | { 69 | output.WriteString(this.Grade); 70 | output.WriteString(this.Manufacturer); 71 | output.WriteString(this.Type); 72 | output.WriteString(this.Body); 73 | output.WriteString(this.Grip); 74 | output.WriteString(this.Magazine); 75 | output.WriteString(this.Barrel); 76 | output.WriteString(this.Sight); 77 | output.WriteString(this.Stock); 78 | output.WriteString(this.Action); 79 | output.WriteString(this.Accessory); 80 | output.WriteString(this.Material); 81 | output.WriteString(this.Prefix); 82 | output.WriteString(this.Title); 83 | output.WriteValueU32(this.ClipSize); 84 | output.WriteValueU32(this.Quality); 85 | output.WriteValueU32(this.EquipSlot); 86 | } 87 | 88 | public object Clone() 89 | { 90 | return this.MemberwiseClone(); 91 | } 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /projects/Gibbed.Borderlands.FileFormats/SaveFile.cs: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2019 Rick (rick 'at' gibbed 'dot' us) 2 | * 3 | * This software is provided 'as-is', without any express or implied 4 | * warranty. In no event will the authors be held liable for any damages 5 | * arising from the use of this software. 6 | * 7 | * Permission is granted to anyone to use this software for any purpose, 8 | * including commercial applications, and to alter it and redistribute it 9 | * freely, subject to the following restrictions: 10 | * 11 | * 1. The origin of this software must not be misrepresented; you must not 12 | * claim that you wrote the original software. If you use this software 13 | * in a product, an acknowledgment in the product documentation would 14 | * be appreciated but is not required. 15 | * 16 | * 2. Altered source versions must be plainly marked as such, and must not 17 | * be misrepresented as being the original software. 18 | * 19 | * 3. This notice may not be removed or altered from any source 20 | * distribution. 21 | */ 22 | using System; 23 | using System.Globalization; 24 | using System.IO; 25 | using System.Text; 26 | using Gibbed.Borderlands.FileFormats.Save; 27 | using Gibbed.IO; 28 | 29 | namespace Gibbed.Borderlands.FileFormats 30 | { 31 | public class SaveFile 32 | { 33 | public const string Signature = "WSG"; // Probably "WillowSaveGame" 34 | 35 | #region Fields 36 | private Endian _Endian; 37 | private Player _PlayerData; 38 | #endregion 39 | 40 | public SaveFile() 41 | { 42 | this._Endian = Endian.Little; 43 | this._PlayerData = new Player(); 44 | } 45 | 46 | public SaveFile(Player playerData) 47 | { 48 | this._Endian = Endian.Little; 49 | this._PlayerData = playerData; 50 | } 51 | 52 | #region Properties 53 | public Endian Endian 54 | { 55 | get { return this._Endian; } 56 | set { this._Endian = value; } 57 | } 58 | 59 | public Player PlayerData 60 | { 61 | get { return this._PlayerData; } 62 | set { this._PlayerData = value; } 63 | } 64 | 65 | // So I don't have to rework the SaveEdit UI. 66 | public bool LittleEndian 67 | { 68 | get { return this.Endian == Endian.Little; } 69 | set { this.Endian = value == true ? Endian.Little : Endian.Big; } 70 | } 71 | #endregion 72 | 73 | public void Serialize(Stream output) 74 | { 75 | output.WriteString(Signature, Encoding.ASCII); 76 | output.WriteValueU32(2, this.Endian); 77 | 78 | SaveStream saveStream = new SaveStream(output, this.Endian); 79 | 80 | this.PlayerData.Serialize(saveStream); 81 | } 82 | 83 | public void Deserialize(Stream input) 84 | { 85 | if (input.ReadString(Signature.Length, Encoding.ASCII) != Signature) 86 | { 87 | throw new FormatException("not a save"); 88 | } 89 | 90 | var version = input.ReadValueU32(); 91 | if (version != 2 && version.Swap() != 2) 92 | { 93 | throw new FormatException("unsupported save version " + version.ToString(CultureInfo.InvariantCulture)); 94 | } 95 | var endian = version == 2 ? Endian.Little : Endian.Big; 96 | 97 | var saveStream = new SaveStream(input, endian); 98 | 99 | var playerData = new Player(); 100 | playerData.Deserialize(saveStream); 101 | 102 | this._Endian = endian; 103 | this._PlayerData = playerData; 104 | } 105 | } 106 | } 107 | -------------------------------------------------------------------------------- /projects/Gibbed.Borderlands.FileFormats/SaveStream.cs: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2019 Rick (rick 'at' gibbed 'dot' us) 2 | * 3 | * This software is provided 'as-is', without any express or implied 4 | * warranty. In no event will the authors be held liable for any damages 5 | * arising from the use of this software. 6 | * 7 | * Permission is granted to anyone to use this software for any purpose, 8 | * including commercial applications, and to alter it and redistribute it 9 | * freely, subject to the following restrictions: 10 | * 11 | * 1. The origin of this software must not be misrepresented; you must not 12 | * claim that you wrote the original software. If you use this software 13 | * in a product, an acknowledgment in the product documentation would 14 | * be appreciated but is not required. 15 | * 16 | * 2. Altered source versions must be plainly marked as such, and must not 17 | * be misrepresented as being the original software. 18 | * 19 | * 3. This notice may not be removed or altered from any source 20 | * distribution. 21 | */ 22 | using System; 23 | using System.IO; 24 | using System.Text; 25 | using Gibbed.IO; 26 | 27 | namespace Gibbed.Borderlands.FileFormats 28 | { 29 | public class SaveStream 30 | { 31 | private readonly Stream _BaseStream; 32 | private readonly Endian _Endian; 33 | 34 | public SaveStream(Stream baseStream, Endian endian) 35 | { 36 | this._BaseStream = baseStream; 37 | this._Endian = endian; 38 | } 39 | 40 | public int ReadValueS32() 41 | { 42 | return this._BaseStream.ReadValueS32(this._Endian); 43 | } 44 | 45 | public uint ReadValueU32() 46 | { 47 | return this._BaseStream.ReadValueU32(this._Endian); 48 | } 49 | 50 | public float ReadValueF32() 51 | { 52 | return this._BaseStream.ReadValueF32(this._Endian); 53 | } 54 | 55 | public T ReadEnum() 56 | { 57 | return this._BaseStream.ReadValueEnum(this._Endian); 58 | } 59 | 60 | public string ReadString() 61 | { 62 | var length = this.ReadValueS32(); 63 | if (length == 0) 64 | { 65 | return string.Empty; 66 | } 67 | 68 | bool isUnicode = false; 69 | 70 | if (length < 0) 71 | { 72 | length = -length; 73 | isUnicode = true; 74 | } 75 | 76 | if (length >= 1024 * 1024) 77 | { 78 | throw new InvalidOperationException("somehow I doubt there is a >1MB string to be read"); 79 | } 80 | 81 | Encoding encoding; 82 | if (isUnicode == true) 83 | { 84 | encoding = this._Endian == Endian.Little ? Encoding.Unicode : Encoding.BigEndianUnicode; 85 | length *= 2; 86 | } 87 | else 88 | { 89 | encoding = Encoding.ASCII; 90 | } 91 | return this._BaseStream.ReadString(length, true, encoding); 92 | } 93 | 94 | public string ReadStaticString(int length) 95 | { 96 | return this._BaseStream.ReadString(length, Encoding.ASCII); 97 | } 98 | 99 | public byte[] ReadBuffer() 100 | { 101 | var length = this.ReadValueS32(); 102 | return this._BaseStream.ReadBytes(length); 103 | } 104 | 105 | public void WriteValueS32(int value) 106 | { 107 | this._BaseStream.WriteValueS32(value, this._Endian); 108 | } 109 | 110 | public void WriteValueU32(uint value) 111 | { 112 | this._BaseStream.WriteValueU32(value, this._Endian); 113 | } 114 | 115 | public void WriteValueF32(float value) 116 | { 117 | this._BaseStream.WriteValueF32(value, this._Endian); 118 | } 119 | 120 | public void WriteEnum(T value) 121 | { 122 | this._BaseStream.WriteValueEnum(value, this._Endian); 123 | } 124 | 125 | public void WriteString(string value) 126 | { 127 | if (string.IsNullOrEmpty(value) == true) 128 | { 129 | this.WriteValueS32(0); 130 | return; 131 | } 132 | 133 | // I'm lazy, always write in UTF16 so I don't have to bother 134 | // checking if a string contains special characters that can't 135 | // be stored in ASCII. 136 | 137 | var encoding = this._Endian == Endian.Little ? Encoding.Unicode : Encoding.BigEndianUnicode; 138 | 139 | var bytes = encoding.GetBytes(value); 140 | 141 | this.WriteValueS32(-((bytes.Length / 2) + 1)); 142 | this._BaseStream.WriteBytes(bytes); 143 | this._BaseStream.WriteValueU16(0, this._Endian); 144 | } 145 | 146 | public void WriteStaticString(string value) 147 | { 148 | this._BaseStream.WriteString(value, Encoding.ASCII); 149 | } 150 | 151 | public void WriteBuffer(byte[] value) 152 | { 153 | if (value == null) 154 | { 155 | throw new ArgumentNullException("value"); 156 | } 157 | 158 | this.WriteValueS32(value.Length); 159 | this._BaseStream.WriteBytes(value); 160 | } 161 | } 162 | } 163 | -------------------------------------------------------------------------------- /projects/Gibbed.Borderlands.SaveEdit/DefaultPlayer/Brick.cs: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2019 Rick (rick 'at' gibbed 'dot' us) 2 | * 3 | * This software is provided 'as-is', without any express or implied 4 | * warranty. In no event will the authors be held liable for any damages 5 | * arising from the use of this software. 6 | * 7 | * Permission is granted to anyone to use this software for any purpose, 8 | * including commercial applications, and to alter it and redistribute it 9 | * freely, subject to the following restrictions: 10 | * 11 | * 1. The origin of this software must not be misrepresented; you must not 12 | * claim that you wrote the original software. If you use this software 13 | * in a product, an acknowledgment in the product documentation would 14 | * be appreciated but is not required. 15 | * 16 | * 2. Altered source versions must be plainly marked as such, and must not 17 | * be misrepresented as being the original software. 18 | * 19 | * 3. This notice may not be removed or altered from any source 20 | * distribution. 21 | */ 22 | using Save = Gibbed.Borderlands.FileFormats.Save; 23 | 24 | namespace Gibbed.Borderlands.SaveEdit.DefaultPlayer 25 | { 26 | public static class Brick 27 | { 28 | public static Save.Player Create() 29 | { 30 | var player = new Save.Player(); 31 | 32 | player.SaveSlot = 1; 33 | player.PlayTime = 1; 34 | player.SaveTime = "20091026000000"; 35 | 36 | // Version 37 | player.Version = 35; 38 | player.ExtraDataVersion = 35; 39 | 40 | // Zone 41 | player.CurrentStation = "None"; 42 | 43 | // Attributes 44 | player.Level = 1; 45 | player.Experience = 0; 46 | player.SkillPoints = 0; 47 | player.Money = 80; 48 | 49 | player.Character = "gd_Brick.Character.CharacterClass_Brick"; 50 | 51 | // Backpack 52 | player.WeaponSlots = 2; 53 | player.BackpackSlots = 12; 54 | 55 | // Weapons 56 | player.Weapons.Add( 57 | new Save.Weapon() 58 | { 59 | Grade = "gd_itemgrades.StarterGear.ItemGrade_StarterGear", 60 | 61 | Type = "gd_weap_combat_shotgun.A_Weapon.WeaponType_combat_shotgun", 62 | 63 | Prefix = "gd_weap_names_shared.Prefix_Starter.Prefix__BrickShotgun_Busted", 64 | Title = "gd_weap_combat_shotgun.Title.Title__Shotgun", 65 | Manufacturer = "gd_manufacturers.Manufacturers.Vladof", 66 | 67 | ClipSize = 0, 68 | EquipSlot = 1, 69 | Quality = 0, 70 | 71 | Accessory = "None", 72 | Action = "None", 73 | Barrel = "gd_weap_combat_shotgun.Barrel.barrel2", 74 | Body = "gd_weap_combat_shotgun.Body.body1", 75 | Grip = "gd_weap_combat_shotgun.Grip.grip3a", 76 | Magazine = "gd_weap_combat_shotgun.mag.mag1", 77 | Material = "gd_weap_shared_materialparts.ManufacturerMaterials.Material_Vladof_0_starter", 78 | Sight = "gd_weap_combat_shotgun.Sight.sightnone", 79 | Stock = "gd_weap_combat_shotgun.Stock.stock_none", 80 | }); 81 | 82 | // Ammo 83 | player.AmmoPools.Add( 84 | new Save.AmmoPool() 85 | { 86 | Name = "d_resources.AmmoResources.Ammo_Combat_Shotgun", 87 | Pool = "d_resourcepools.AmmoPools.Ammo_Combat_Shotgun_Pool", 88 | Quantity = 30.0f, 89 | UpgradeLevel = 0, 90 | }); 91 | 92 | // New-U 93 | player.Name = "Brick"; 94 | player.Color1 = 0xFF667391; 95 | player.Color2 = 0xFF667391; 96 | player.Color3 = 0xFF6699B3; 97 | 98 | // Missions 99 | Save.MissionPlaythrough missionZone; 100 | 101 | missionZone = new Save.MissionPlaythrough(); 102 | missionZone.Playthrough = 0; 103 | missionZone.ActiveMission = "Z0_Missions.Missions.M_IntroStateSaver"; 104 | missionZone.Missions.Add( 105 | new Save.Mission() 106 | { 107 | Name = "Z0_Missions.Missions.M_IntroStateSaver", 108 | Unknown1 = 2, 109 | Unknown2 = 0, 110 | Unknown3 = 0, 111 | }); 112 | player.MissionPlaythroughs.Add(missionZone); 113 | 114 | missionZone = new Save.MissionPlaythrough(); 115 | missionZone.Playthrough = 1; 116 | missionZone.ActiveMission = "Z0_Missions.Missions.M_IntroStateSaver"; 117 | missionZone.Missions.Add( 118 | new Save.Mission() 119 | { 120 | Name = "Z0_Missions.Missions.M_IntroStateSaver", 121 | Unknown1 = 2, 122 | Unknown2 = 0, 123 | Unknown3 = 0, 124 | }); 125 | player.MissionPlaythroughs.Add(missionZone); 126 | 127 | missionZone = new Save.MissionPlaythrough(); 128 | missionZone.Playthrough = 2; 129 | missionZone.ActiveMission = "Z0_Missions.Missions.M_IntroStateSaver"; 130 | missionZone.Missions.Add( 131 | new Save.Mission() 132 | { 133 | Name = "Z0_Missions.Missions.M_IntroStateSaver", 134 | Unknown1 = 2, 135 | Unknown2 = 0, 136 | Unknown3 = 0, 137 | }); 138 | player.MissionPlaythroughs.Add(missionZone); 139 | 140 | 141 | // Echo Zones 142 | player.EchoPlaythroughs.Add( 143 | new Save.EchoPlaythrough() 144 | { 145 | Playthrough = 0, 146 | }); 147 | 148 | // Unknowns 149 | player.Unknown03 = 0; 150 | player.MaybePlaythroughUnlocked = 0; 151 | player.Unknown07 = 0; 152 | player.Unknown08 = 0; 153 | player.Unknown09 = 0; 154 | player.Unknown10 = 0; 155 | player.Unknown21 = ""; 156 | player.Unknown22 = 26; 157 | player.Unknown23 = 42915336; 158 | player.Unknown26 = 1; 159 | player.Unknown34 = 0; 160 | 161 | return player; 162 | } 163 | } 164 | } 165 | -------------------------------------------------------------------------------- /projects/Gibbed.Borderlands.SaveEdit/Editor.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace Gibbed.Borderlands.SaveEdit 2 | { 3 | partial class Editor 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.components = new System.ComponentModel.Container(); 32 | System.Windows.Forms.Label experienceLabel; 33 | System.Windows.Forms.Label levelLabel; 34 | System.Windows.Forms.Label moneyLabel; 35 | System.Windows.Forms.Label characterLabel; 36 | System.Windows.Forms.Label backpackSlotsLabel; 37 | System.Windows.Forms.Label nameLabel; 38 | System.Windows.Forms.Label color1Label; 39 | System.Windows.Forms.Label color2Label; 40 | System.Windows.Forms.Label color3Label; 41 | System.Windows.Forms.Label currentStationLabel; 42 | System.Windows.Forms.Label skillPointsLabel; 43 | System.Windows.Forms.Label saveSlotLabel; 44 | System.Windows.Forms.Label weaponSlotsLabel; 45 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Editor)); 46 | this.mainToolStrip = new System.Windows.Forms.ToolStrip(); 47 | this.newButton = new System.Windows.Forms.ToolStripDropDownButton(); 48 | this.newBerserkerMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 49 | this.newSirenMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 50 | this.newHunterMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 51 | this.newSoldierMenuItem = new System.Windows.Forms.ToolStripMenuItem(); 52 | this.openButton = new System.Windows.Forms.ToolStripButton(); 53 | this.saveButton = new System.Windows.Forms.ToolStripButton(); 54 | this.mainTabs = new System.Windows.Forms.TabControl(); 55 | this.playerTab = new System.Windows.Forms.TabPage(); 56 | this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); 57 | this.saveSlotNumericUpDown = new System.Windows.Forms.NumericUpDown(); 58 | this.playerSource = new System.Windows.Forms.BindingSource(this.components); 59 | this.saveFileSource = new System.Windows.Forms.BindingSource(this.components); 60 | this.currentStationComboBox = new System.Windows.Forms.ComboBox(); 61 | this.characterComboBox = new System.Windows.Forms.ComboBox(); 62 | this.levelNumericUpDown = new System.Windows.Forms.NumericUpDown(); 63 | this.experienceNumericUpDown = new System.Windows.Forms.NumericUpDown(); 64 | this.skillPointsNumericUpDown = new System.Windows.Forms.NumericUpDown(); 65 | this.moneyNumericUpDown = new System.Windows.Forms.NumericUpDown(); 66 | this.backpackSlotsNumericUpDown = new System.Windows.Forms.NumericUpDown(); 67 | this.weaponSlotsNumericUpDown = new System.Windows.Forms.NumericUpDown(); 68 | this.newuTab = new System.Windows.Forms.TabPage(); 69 | this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); 70 | this.color3TextBox = new System.Windows.Forms.TextBox(); 71 | this.color2TextBox = new System.Windows.Forms.TextBox(); 72 | this.color1TextBox = new System.Windows.Forms.TextBox(); 73 | this.nameTextBox = new System.Windows.Forms.TextBox(); 74 | this.weaponsTab = new System.Windows.Forms.TabPage(); 75 | this.weaponsPanel = new System.Windows.Forms.Panel(); 76 | this.weaponsDataGrid = new System.Windows.Forms.DataGridView(); 77 | this.dataGridViewTextBoxColumn37 = new System.Windows.Forms.DataGridViewTextBoxColumn(); 78 | this.dataGridViewTextBoxColumn23 = new System.Windows.Forms.DataGridViewTextBoxColumn(); 79 | this.dataGridViewTextBoxColumn33 = new System.Windows.Forms.DataGridViewTextBoxColumn(); 80 | this.dataGridViewTextBoxColumn34 = new System.Windows.Forms.DataGridViewTextBoxColumn(); 81 | this.dataGridViewTextBoxColumn21 = new System.Windows.Forms.DataGridViewTextBoxColumn(); 82 | this.dataGridViewTextBoxColumn36 = new System.Windows.Forms.DataGridViewTextBoxColumn(); 83 | this.dataGridViewTextBoxColumn22 = new System.Windows.Forms.DataGridViewTextBoxColumn(); 84 | this.dataGridViewTextBoxColumn24 = new System.Windows.Forms.DataGridViewTextBoxColumn(); 85 | this.dataGridViewTextBoxColumn25 = new System.Windows.Forms.DataGridViewTextBoxColumn(); 86 | this.dataGridViewTextBoxColumn26 = new System.Windows.Forms.DataGridViewTextBoxColumn(); 87 | this.dataGridViewTextBoxColumn27 = new System.Windows.Forms.DataGridViewTextBoxColumn(); 88 | this.dataGridViewTextBoxColumn28 = new System.Windows.Forms.DataGridViewTextBoxColumn(); 89 | this.dataGridViewTextBoxColumn29 = new System.Windows.Forms.DataGridViewTextBoxColumn(); 90 | this.dataGridViewTextBoxColumn30 = new System.Windows.Forms.DataGridViewTextBoxColumn(); 91 | this.dataGridViewTextBoxColumn31 = new System.Windows.Forms.DataGridViewTextBoxColumn(); 92 | this.dataGridViewTextBoxColumn32 = new System.Windows.Forms.DataGridViewTextBoxColumn(); 93 | this.dataGridViewTextBoxColumn35 = new System.Windows.Forms.DataGridViewTextBoxColumn(); 94 | this.weaponsSource = new System.Windows.Forms.BindingSource(this.components); 95 | this.weaponsToolStrip = new System.Windows.Forms.ToolStrip(); 96 | this.weaponDuplicateButton = new System.Windows.Forms.ToolStripButton(); 97 | this.itemsTab = new System.Windows.Forms.TabPage(); 98 | this.itemsPanel = new System.Windows.Forms.Panel(); 99 | this.itemsDataGrid = new System.Windows.Forms.DataGridView(); 100 | this.dataGridViewTextBoxColumn20 = new System.Windows.Forms.DataGridViewTextBoxColumn(); 101 | this.dataGridViewTextBoxColumn10 = new System.Windows.Forms.DataGridViewTextBoxColumn(); 102 | this.dataGridViewTextBoxColumn9 = new System.Windows.Forms.DataGridViewTextBoxColumn(); 103 | this.dataGridViewTextBoxColumn19 = new System.Windows.Forms.DataGridViewTextBoxColumn(); 104 | this.dataGridViewTextBoxColumn16 = new System.Windows.Forms.DataGridViewTextBoxColumn(); 105 | this.dataGridViewTextBoxColumn17 = new System.Windows.Forms.DataGridViewTextBoxColumn(); 106 | this.dataGridViewTextBoxColumn11 = new System.Windows.Forms.DataGridViewTextBoxColumn(); 107 | this.dataGridViewTextBoxColumn12 = new System.Windows.Forms.DataGridViewTextBoxColumn(); 108 | this.dataGridViewTextBoxColumn13 = new System.Windows.Forms.DataGridViewTextBoxColumn(); 109 | this.dataGridViewTextBoxColumn14 = new System.Windows.Forms.DataGridViewTextBoxColumn(); 110 | this.dataGridViewTextBoxColumn15 = new System.Windows.Forms.DataGridViewTextBoxColumn(); 111 | this.dataGridViewTextBoxColumn18 = new System.Windows.Forms.DataGridViewTextBoxColumn(); 112 | this.itemsSource = new System.Windows.Forms.BindingSource(this.components); 113 | this.itemsToolStrip = new System.Windows.Forms.ToolStrip(); 114 | this.itemDuplicateButton = new System.Windows.Forms.ToolStripButton(); 115 | this.ammoPoolsTab = new System.Windows.Forms.TabPage(); 116 | this.ammoPoolsDataGrid = new System.Windows.Forms.DataGridView(); 117 | this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); 118 | this.dataGridViewTextBoxColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); 119 | this.dataGridViewTextBoxColumn3 = new System.Windows.Forms.DataGridViewTextBoxColumn(); 120 | this.dataGridViewTextBoxColumn4 = new System.Windows.Forms.DataGridViewTextBoxColumn(); 121 | this.ammoPoolsSource = new System.Windows.Forms.BindingSource(this.components); 122 | this.skillsTab = new System.Windows.Forms.TabPage(); 123 | this.skillsPanel = new System.Windows.Forms.Panel(); 124 | this.skillsDataGrid = new System.Windows.Forms.DataGridView(); 125 | this.dataGridViewTextBoxColumn5 = new System.Windows.Forms.DataGridViewTextBoxColumn(); 126 | this.dataGridViewTextBoxColumn6 = new System.Windows.Forms.DataGridViewTextBoxColumn(); 127 | this.dataGridViewTextBoxColumn7 = new System.Windows.Forms.DataGridViewTextBoxColumn(); 128 | this.dataGridViewTextBoxColumn8 = new System.Windows.Forms.DataGridViewTextBoxColumn(); 129 | this.skillsSource = new System.Windows.Forms.BindingSource(this.components); 130 | this.skillsToolStrip = new System.Windows.Forms.ToolStrip(); 131 | this.exportSkillTreeClipboardButton = new System.Windows.Forms.ToolStripButton(); 132 | this.exportSkillTreeBrowserButton = new System.Windows.Forms.ToolStripButton(); 133 | this.saveTab = new System.Windows.Forms.TabPage(); 134 | this.littleEndianCheckBox = new System.Windows.Forms.CheckBox(); 135 | this.openFileDialog = new System.Windows.Forms.OpenFileDialog(); 136 | this.saveFileDialog = new System.Windows.Forms.SaveFileDialog(); 137 | experienceLabel = new System.Windows.Forms.Label(); 138 | levelLabel = new System.Windows.Forms.Label(); 139 | moneyLabel = new System.Windows.Forms.Label(); 140 | characterLabel = new System.Windows.Forms.Label(); 141 | backpackSlotsLabel = new System.Windows.Forms.Label(); 142 | nameLabel = new System.Windows.Forms.Label(); 143 | color1Label = new System.Windows.Forms.Label(); 144 | color2Label = new System.Windows.Forms.Label(); 145 | color3Label = new System.Windows.Forms.Label(); 146 | currentStationLabel = new System.Windows.Forms.Label(); 147 | skillPointsLabel = new System.Windows.Forms.Label(); 148 | saveSlotLabel = new System.Windows.Forms.Label(); 149 | weaponSlotsLabel = new System.Windows.Forms.Label(); 150 | this.mainToolStrip.SuspendLayout(); 151 | this.mainTabs.SuspendLayout(); 152 | this.playerTab.SuspendLayout(); 153 | this.tableLayoutPanel1.SuspendLayout(); 154 | ((System.ComponentModel.ISupportInitialize)(this.saveSlotNumericUpDown)).BeginInit(); 155 | ((System.ComponentModel.ISupportInitialize)(this.playerSource)).BeginInit(); 156 | ((System.ComponentModel.ISupportInitialize)(this.saveFileSource)).BeginInit(); 157 | ((System.ComponentModel.ISupportInitialize)(this.levelNumericUpDown)).BeginInit(); 158 | ((System.ComponentModel.ISupportInitialize)(this.experienceNumericUpDown)).BeginInit(); 159 | ((System.ComponentModel.ISupportInitialize)(this.skillPointsNumericUpDown)).BeginInit(); 160 | ((System.ComponentModel.ISupportInitialize)(this.moneyNumericUpDown)).BeginInit(); 161 | ((System.ComponentModel.ISupportInitialize)(this.backpackSlotsNumericUpDown)).BeginInit(); 162 | ((System.ComponentModel.ISupportInitialize)(this.weaponSlotsNumericUpDown)).BeginInit(); 163 | this.newuTab.SuspendLayout(); 164 | this.tableLayoutPanel2.SuspendLayout(); 165 | this.weaponsTab.SuspendLayout(); 166 | this.weaponsPanel.SuspendLayout(); 167 | ((System.ComponentModel.ISupportInitialize)(this.weaponsDataGrid)).BeginInit(); 168 | ((System.ComponentModel.ISupportInitialize)(this.weaponsSource)).BeginInit(); 169 | this.weaponsToolStrip.SuspendLayout(); 170 | this.itemsTab.SuspendLayout(); 171 | this.itemsPanel.SuspendLayout(); 172 | ((System.ComponentModel.ISupportInitialize)(this.itemsDataGrid)).BeginInit(); 173 | ((System.ComponentModel.ISupportInitialize)(this.itemsSource)).BeginInit(); 174 | this.itemsToolStrip.SuspendLayout(); 175 | this.ammoPoolsTab.SuspendLayout(); 176 | ((System.ComponentModel.ISupportInitialize)(this.ammoPoolsDataGrid)).BeginInit(); 177 | ((System.ComponentModel.ISupportInitialize)(this.ammoPoolsSource)).BeginInit(); 178 | this.skillsTab.SuspendLayout(); 179 | this.skillsPanel.SuspendLayout(); 180 | ((System.ComponentModel.ISupportInitialize)(this.skillsDataGrid)).BeginInit(); 181 | ((System.ComponentModel.ISupportInitialize)(this.skillsSource)).BeginInit(); 182 | this.skillsToolStrip.SuspendLayout(); 183 | this.saveTab.SuspendLayout(); 184 | this.SuspendLayout(); 185 | // 186 | // experienceLabel 187 | // 188 | experienceLabel.AutoSize = true; 189 | experienceLabel.Dock = System.Windows.Forms.DockStyle.Right; 190 | experienceLabel.Location = new System.Drawing.Point(25, 79); 191 | experienceLabel.Name = "experienceLabel"; 192 | experienceLabel.Size = new System.Drawing.Size(63, 26); 193 | experienceLabel.TabIndex = 0; 194 | experienceLabel.Text = "Experience:"; 195 | experienceLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight; 196 | // 197 | // levelLabel 198 | // 199 | levelLabel.AutoSize = true; 200 | levelLabel.Dock = System.Windows.Forms.DockStyle.Right; 201 | levelLabel.Location = new System.Drawing.Point(52, 53); 202 | levelLabel.Name = "levelLabel"; 203 | levelLabel.Size = new System.Drawing.Size(36, 26); 204 | levelLabel.TabIndex = 2; 205 | levelLabel.Text = "Level:"; 206 | levelLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight; 207 | // 208 | // moneyLabel 209 | // 210 | moneyLabel.AutoSize = true; 211 | moneyLabel.Dock = System.Windows.Forms.DockStyle.Right; 212 | moneyLabel.Location = new System.Drawing.Point(46, 131); 213 | moneyLabel.Name = "moneyLabel"; 214 | moneyLabel.Size = new System.Drawing.Size(42, 26); 215 | moneyLabel.TabIndex = 4; 216 | moneyLabel.Text = "Money:"; 217 | moneyLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight; 218 | // 219 | // characterLabel 220 | // 221 | characterLabel.AutoSize = true; 222 | characterLabel.Dock = System.Windows.Forms.DockStyle.Right; 223 | characterLabel.Location = new System.Drawing.Point(32, 26); 224 | characterLabel.Name = "characterLabel"; 225 | characterLabel.Size = new System.Drawing.Size(56, 27); 226 | characterLabel.TabIndex = 8; 227 | characterLabel.Text = "Character:"; 228 | characterLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight; 229 | // 230 | // backpackSlotsLabel 231 | // 232 | backpackSlotsLabel.AutoSize = true; 233 | backpackSlotsLabel.Dock = System.Windows.Forms.DockStyle.Right; 234 | backpackSlotsLabel.Location = new System.Drawing.Point(3, 210); 235 | backpackSlotsLabel.Name = "backpackSlotsLabel"; 236 | backpackSlotsLabel.Size = new System.Drawing.Size(85, 26); 237 | backpackSlotsLabel.TabIndex = 10; 238 | backpackSlotsLabel.Text = "Backpack Slots:"; 239 | backpackSlotsLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight; 240 | // 241 | // nameLabel 242 | // 243 | nameLabel.AutoSize = true; 244 | nameLabel.Dock = System.Windows.Forms.DockStyle.Right; 245 | nameLabel.Location = new System.Drawing.Point(8, 0); 246 | nameLabel.Name = "nameLabel"; 247 | nameLabel.Size = new System.Drawing.Size(38, 26); 248 | nameLabel.TabIndex = 7; 249 | nameLabel.Text = "Name:"; 250 | nameLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight; 251 | // 252 | // color1Label 253 | // 254 | color1Label.AutoSize = true; 255 | color1Label.Dock = System.Windows.Forms.DockStyle.Right; 256 | color1Label.Location = new System.Drawing.Point(3, 26); 257 | color1Label.Name = "color1Label"; 258 | color1Label.Size = new System.Drawing.Size(43, 26); 259 | color1Label.TabIndex = 8; 260 | color1Label.Text = "Color 1:"; 261 | color1Label.TextAlign = System.Drawing.ContentAlignment.MiddleRight; 262 | // 263 | // color2Label 264 | // 265 | color2Label.AutoSize = true; 266 | color2Label.Dock = System.Windows.Forms.DockStyle.Right; 267 | color2Label.Location = new System.Drawing.Point(3, 52); 268 | color2Label.Name = "color2Label"; 269 | color2Label.Size = new System.Drawing.Size(43, 26); 270 | color2Label.TabIndex = 9; 271 | color2Label.Text = "Color 2:"; 272 | color2Label.TextAlign = System.Drawing.ContentAlignment.MiddleRight; 273 | // 274 | // color3Label 275 | // 276 | color3Label.AutoSize = true; 277 | color3Label.Dock = System.Windows.Forms.DockStyle.Right; 278 | color3Label.Location = new System.Drawing.Point(3, 78); 279 | color3Label.Name = "color3Label"; 280 | color3Label.Size = new System.Drawing.Size(43, 26); 281 | color3Label.TabIndex = 10; 282 | color3Label.Text = "Color 3:"; 283 | color3Label.TextAlign = System.Drawing.ContentAlignment.MiddleRight; 284 | // 285 | // currentStationLabel 286 | // 287 | currentStationLabel.AutoSize = true; 288 | currentStationLabel.Dock = System.Windows.Forms.DockStyle.Right; 289 | currentStationLabel.Location = new System.Drawing.Point(8, 157); 290 | currentStationLabel.Name = "currentStationLabel"; 291 | currentStationLabel.Size = new System.Drawing.Size(80, 27); 292 | currentStationLabel.TabIndex = 11; 293 | currentStationLabel.Text = "Current Station:"; 294 | currentStationLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight; 295 | // 296 | // skillPointsLabel 297 | // 298 | skillPointsLabel.AutoSize = true; 299 | skillPointsLabel.Dock = System.Windows.Forms.DockStyle.Right; 300 | skillPointsLabel.Location = new System.Drawing.Point(27, 105); 301 | skillPointsLabel.Name = "skillPointsLabel"; 302 | skillPointsLabel.Size = new System.Drawing.Size(61, 26); 303 | skillPointsLabel.TabIndex = 12; 304 | skillPointsLabel.Text = "Skill Points:"; 305 | skillPointsLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight; 306 | // 307 | // saveSlotLabel 308 | // 309 | saveSlotLabel.AutoSize = true; 310 | saveSlotLabel.Dock = System.Windows.Forms.DockStyle.Right; 311 | saveSlotLabel.Location = new System.Drawing.Point(32, 0); 312 | saveSlotLabel.Name = "saveSlotLabel"; 313 | saveSlotLabel.Size = new System.Drawing.Size(56, 26); 314 | saveSlotLabel.TabIndex = 14; 315 | saveSlotLabel.Text = "Save Slot:"; 316 | saveSlotLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight; 317 | // 318 | // weaponSlotsLabel 319 | // 320 | weaponSlotsLabel.AutoSize = true; 321 | weaponSlotsLabel.Dock = System.Windows.Forms.DockStyle.Right; 322 | weaponSlotsLabel.Location = new System.Drawing.Point(11, 184); 323 | weaponSlotsLabel.Name = "weaponSlotsLabel"; 324 | weaponSlotsLabel.Size = new System.Drawing.Size(77, 26); 325 | weaponSlotsLabel.TabIndex = 16; 326 | weaponSlotsLabel.Text = "Weapon Slots:"; 327 | weaponSlotsLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight; 328 | // 329 | // mainToolStrip 330 | // 331 | this.mainToolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { 332 | this.newButton, 333 | this.openButton, 334 | this.saveButton}); 335 | this.mainToolStrip.Location = new System.Drawing.Point(0, 0); 336 | this.mainToolStrip.Name = "mainToolStrip"; 337 | this.mainToolStrip.Size = new System.Drawing.Size(624, 25); 338 | this.mainToolStrip.TabIndex = 0; 339 | this.mainToolStrip.Text = "toolStrip1"; 340 | // 341 | // newButton 342 | // 343 | this.newButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; 344 | this.newButton.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { 345 | this.newBerserkerMenuItem, 346 | this.newSirenMenuItem, 347 | this.newHunterMenuItem, 348 | this.newSoldierMenuItem}); 349 | this.newButton.Image = global::Gibbed.Borderlands.SaveEdit.Properties.Resources.New; 350 | this.newButton.ImageTransparentColor = System.Drawing.Color.Magenta; 351 | this.newButton.Name = "newButton"; 352 | this.newButton.Size = new System.Drawing.Size(29, 22); 353 | this.newButton.Text = "New"; 354 | // 355 | // newBerserkerMenuItem 356 | // 357 | this.newBerserkerMenuItem.Name = "newBerserkerMenuItem"; 358 | this.newBerserkerMenuItem.Size = new System.Drawing.Size(151, 22); 359 | this.newBerserkerMenuItem.Text = "New &Brick"; 360 | this.newBerserkerMenuItem.Click += new System.EventHandler(this.OnNewBerserker); 361 | // 362 | // newSirenMenuItem 363 | // 364 | this.newSirenMenuItem.Enabled = false; 365 | this.newSirenMenuItem.Name = "newSirenMenuItem"; 366 | this.newSirenMenuItem.Size = new System.Drawing.Size(151, 22); 367 | this.newSirenMenuItem.Text = "New &Lilith"; 368 | // 369 | // newHunterMenuItem 370 | // 371 | this.newHunterMenuItem.Enabled = false; 372 | this.newHunterMenuItem.Name = "newHunterMenuItem"; 373 | this.newHunterMenuItem.Size = new System.Drawing.Size(151, 22); 374 | this.newHunterMenuItem.Text = "New &Mordecai"; 375 | // 376 | // newSoldierMenuItem 377 | // 378 | this.newSoldierMenuItem.Enabled = false; 379 | this.newSoldierMenuItem.Name = "newSoldierMenuItem"; 380 | this.newSoldierMenuItem.Size = new System.Drawing.Size(151, 22); 381 | this.newSoldierMenuItem.Text = "New &Roland"; 382 | // 383 | // openButton 384 | // 385 | this.openButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; 386 | this.openButton.Image = global::Gibbed.Borderlands.SaveEdit.Properties.Resources.Open; 387 | this.openButton.ImageTransparentColor = System.Drawing.Color.Magenta; 388 | this.openButton.Name = "openButton"; 389 | this.openButton.Size = new System.Drawing.Size(23, 22); 390 | this.openButton.Text = "Open"; 391 | this.openButton.Click += new System.EventHandler(this.OnOpen); 392 | // 393 | // saveButton 394 | // 395 | this.saveButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; 396 | this.saveButton.Image = global::Gibbed.Borderlands.SaveEdit.Properties.Resources.Save; 397 | this.saveButton.ImageTransparentColor = System.Drawing.Color.Magenta; 398 | this.saveButton.Name = "saveButton"; 399 | this.saveButton.Size = new System.Drawing.Size(23, 22); 400 | this.saveButton.Text = "Save"; 401 | this.saveButton.Click += new System.EventHandler(this.OnSave); 402 | // 403 | // mainTabs 404 | // 405 | this.mainTabs.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 406 | | System.Windows.Forms.AnchorStyles.Left) 407 | | System.Windows.Forms.AnchorStyles.Right))); 408 | this.mainTabs.Controls.Add(this.playerTab); 409 | this.mainTabs.Controls.Add(this.newuTab); 410 | this.mainTabs.Controls.Add(this.weaponsTab); 411 | this.mainTabs.Controls.Add(this.itemsTab); 412 | this.mainTabs.Controls.Add(this.ammoPoolsTab); 413 | this.mainTabs.Controls.Add(this.skillsTab); 414 | this.mainTabs.Controls.Add(this.saveTab); 415 | this.mainTabs.Location = new System.Drawing.Point(12, 28); 416 | this.mainTabs.Name = "mainTabs"; 417 | this.mainTabs.SelectedIndex = 0; 418 | this.mainTabs.Size = new System.Drawing.Size(600, 301); 419 | this.mainTabs.TabIndex = 1; 420 | // 421 | // playerTab 422 | // 423 | this.playerTab.AutoScroll = true; 424 | this.playerTab.Controls.Add(this.tableLayoutPanel1); 425 | this.playerTab.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.playerSource, "Name", true)); 426 | this.playerTab.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 427 | this.playerTab.Location = new System.Drawing.Point(4, 22); 428 | this.playerTab.Name = "playerTab"; 429 | this.playerTab.Padding = new System.Windows.Forms.Padding(3); 430 | this.playerTab.Size = new System.Drawing.Size(592, 275); 431 | this.playerTab.TabIndex = 0; 432 | this.playerTab.Text = "Player"; 433 | this.playerTab.UseVisualStyleBackColor = true; 434 | // 435 | // tableLayoutPanel1 436 | // 437 | this.tableLayoutPanel1.AutoScroll = true; 438 | this.tableLayoutPanel1.ColumnCount = 2; 439 | this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); 440 | this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); 441 | this.tableLayoutPanel1.Controls.Add(saveSlotLabel, 0, 0); 442 | this.tableLayoutPanel1.Controls.Add(this.saveSlotNumericUpDown, 1, 0); 443 | this.tableLayoutPanel1.Controls.Add(currentStationLabel, 0, 7); 444 | this.tableLayoutPanel1.Controls.Add(this.currentStationComboBox, 1, 7); 445 | this.tableLayoutPanel1.Controls.Add(this.characterComboBox, 1, 2); 446 | this.tableLayoutPanel1.Controls.Add(characterLabel, 0, 2); 447 | this.tableLayoutPanel1.Controls.Add(levelLabel, 0, 3); 448 | this.tableLayoutPanel1.Controls.Add(this.levelNumericUpDown, 1, 3); 449 | this.tableLayoutPanel1.Controls.Add(experienceLabel, 0, 4); 450 | this.tableLayoutPanel1.Controls.Add(this.experienceNumericUpDown, 1, 4); 451 | this.tableLayoutPanel1.Controls.Add(skillPointsLabel, 0, 5); 452 | this.tableLayoutPanel1.Controls.Add(this.skillPointsNumericUpDown, 1, 5); 453 | this.tableLayoutPanel1.Controls.Add(this.moneyNumericUpDown, 1, 6); 454 | this.tableLayoutPanel1.Controls.Add(moneyLabel, 0, 6); 455 | this.tableLayoutPanel1.Controls.Add(backpackSlotsLabel, 0, 9); 456 | this.tableLayoutPanel1.Controls.Add(weaponSlotsLabel, 0, 8); 457 | this.tableLayoutPanel1.Controls.Add(this.backpackSlotsNumericUpDown, 1, 9); 458 | this.tableLayoutPanel1.Controls.Add(this.weaponSlotsNumericUpDown, 1, 8); 459 | this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; 460 | this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 3); 461 | this.tableLayoutPanel1.Name = "tableLayoutPanel1"; 462 | this.tableLayoutPanel1.RowCount = 11; 463 | this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); 464 | this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); 465 | this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); 466 | this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); 467 | this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); 468 | this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); 469 | this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); 470 | this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); 471 | this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); 472 | this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); 473 | this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); 474 | this.tableLayoutPanel1.Size = new System.Drawing.Size(586, 269); 475 | this.tableLayoutPanel1.TabIndex = 0; 476 | // 477 | // saveSlotNumericUpDown 478 | // 479 | this.saveSlotNumericUpDown.DataBindings.Add(new System.Windows.Forms.Binding("Value", this.playerSource, "SaveSlot", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); 480 | this.saveSlotNumericUpDown.Location = new System.Drawing.Point(94, 3); 481 | this.saveSlotNumericUpDown.Maximum = new decimal(new int[] { 482 | 9999, 483 | 0, 484 | 0, 485 | 0}); 486 | this.saveSlotNumericUpDown.Minimum = new decimal(new int[] { 487 | 1, 488 | 0, 489 | 0, 490 | 0}); 491 | this.saveSlotNumericUpDown.Name = "saveSlotNumericUpDown"; 492 | this.saveSlotNumericUpDown.Size = new System.Drawing.Size(120, 20); 493 | this.saveSlotNumericUpDown.TabIndex = 15; 494 | this.saveSlotNumericUpDown.Value = new decimal(new int[] { 495 | 1, 496 | 0, 497 | 0, 498 | 0}); 499 | // 500 | // playerSource 501 | // 502 | this.playerSource.DataMember = "PlayerData"; 503 | this.playerSource.DataSource = this.saveFileSource; 504 | // 505 | // saveFileSource 506 | // 507 | this.saveFileSource.DataSource = typeof(Gibbed.Borderlands.FileFormats.SaveFile); 508 | // 509 | // currentStationComboBox 510 | // 511 | this.currentStationComboBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.playerSource, "CurrentStation", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); 512 | this.currentStationComboBox.FormattingEnabled = true; 513 | this.currentStationComboBox.Items.AddRange(new object[] { 514 | "None", 515 | "AqueductEncampment", 516 | "AridHillsEntrance", 517 | "AridMine", 518 | "Bunker", 519 | "BunkerEntrance", 520 | "cauldren", 521 | "Crimson", 522 | "CrimsonLanceBunker", 523 | "Descent1", 524 | "Digsite", 525 | "DryEntranceSave", 526 | "EntranceToSkagGully", 527 | "Firestone", 528 | "HeadlandElectricalStation", 529 | "Interlude1Entrance", 530 | "Interlude2Cave", 531 | "KCanyon", 532 | "Lucky\'sLastChanceWateringHole", 533 | "LudicrousSpeedway", 534 | "MiddleofNoWhere", 535 | "midpoint", 536 | "MineEntrance", 537 | "NewHaven", 538 | "Oasis", 539 | "OasisCheckpoint", 540 | "OldHavenEntrance", 541 | "PirateBay", 542 | "PitArena", 543 | "RuinsArena", 544 | "SaltFlats", 545 | "ScrapGate", 546 | "Scraple", 547 | "ScrapMidpoint", 548 | "ScrapOverlook", 549 | "Scrapyard", 550 | "SewerArena", 551 | "ShantyTown", 552 | "SkagGully", 553 | "SkullBandit", 554 | "TetanusWarren", 555 | "TetanusWarrensEntrance", 556 | "TheCesspool", 557 | "TheLostCave", 558 | "TheUnderpass", 559 | "TheVault", 560 | "Thor", 561 | "Thor_Cave", 562 | "Thor_CrimsonEnclave", 563 | "Thor_Digtown", 564 | "Thor_TheDescent", 565 | "TrashCoast", 566 | "TrashEntranceNorth", 567 | "TrashEntranceSouth", 568 | "Tunnel", 569 | "UpperSeeps"}); 570 | this.currentStationComboBox.Location = new System.Drawing.Point(94, 160); 571 | this.currentStationComboBox.Name = "currentStationComboBox"; 572 | this.currentStationComboBox.Size = new System.Drawing.Size(121, 21); 573 | this.currentStationComboBox.TabIndex = 12; 574 | // 575 | // characterComboBox 576 | // 577 | this.characterComboBox.DataBindings.Add(new System.Windows.Forms.Binding("SelectedValue", this.playerSource, "Character", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); 578 | this.characterComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 579 | this.characterComboBox.Items.AddRange(new object[] { 580 | "Berserker", 581 | "Hunter", 582 | "Siren", 583 | "Soldier"}); 584 | this.characterComboBox.Location = new System.Drawing.Point(94, 29); 585 | this.characterComboBox.Name = "characterComboBox"; 586 | this.characterComboBox.Size = new System.Drawing.Size(121, 21); 587 | this.characterComboBox.Sorted = true; 588 | this.characterComboBox.TabIndex = 9; 589 | // 590 | // levelNumericUpDown 591 | // 592 | this.levelNumericUpDown.DataBindings.Add(new System.Windows.Forms.Binding("Value", this.playerSource, "Level", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); 593 | this.levelNumericUpDown.Location = new System.Drawing.Point(94, 56); 594 | this.levelNumericUpDown.Maximum = new decimal(new int[] { 595 | 50, 596 | 0, 597 | 0, 598 | 0}); 599 | this.levelNumericUpDown.Minimum = new decimal(new int[] { 600 | 1, 601 | 0, 602 | 0, 603 | 0}); 604 | this.levelNumericUpDown.Name = "levelNumericUpDown"; 605 | this.levelNumericUpDown.Size = new System.Drawing.Size(120, 20); 606 | this.levelNumericUpDown.TabIndex = 3; 607 | this.levelNumericUpDown.Value = new decimal(new int[] { 608 | 1, 609 | 0, 610 | 0, 611 | 0}); 612 | // 613 | // experienceNumericUpDown 614 | // 615 | this.experienceNumericUpDown.DataBindings.Add(new System.Windows.Forms.Binding("Value", this.playerSource, "Experience", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); 616 | this.experienceNumericUpDown.Location = new System.Drawing.Point(94, 82); 617 | this.experienceNumericUpDown.Maximum = new decimal(new int[] { 618 | -1000000, 619 | 999999, 620 | 0, 621 | 393216}); 622 | this.experienceNumericUpDown.Name = "experienceNumericUpDown"; 623 | this.experienceNumericUpDown.Size = new System.Drawing.Size(120, 20); 624 | this.experienceNumericUpDown.TabIndex = 1; 625 | // 626 | // skillPointsNumericUpDown 627 | // 628 | this.skillPointsNumericUpDown.DataBindings.Add(new System.Windows.Forms.Binding("Value", this.playerSource, "SkillPoints", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); 629 | this.skillPointsNumericUpDown.Location = new System.Drawing.Point(94, 108); 630 | this.skillPointsNumericUpDown.Name = "skillPointsNumericUpDown"; 631 | this.skillPointsNumericUpDown.Size = new System.Drawing.Size(120, 20); 632 | this.skillPointsNumericUpDown.TabIndex = 13; 633 | // 634 | // moneyNumericUpDown 635 | // 636 | this.moneyNumericUpDown.DataBindings.Add(new System.Windows.Forms.Binding("Value", this.playerSource, "Money", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); 637 | this.moneyNumericUpDown.Location = new System.Drawing.Point(94, 134); 638 | this.moneyNumericUpDown.Maximum = new decimal(new int[] { 639 | 9999999, 640 | 0, 641 | 0, 642 | 0}); 643 | this.moneyNumericUpDown.Name = "moneyNumericUpDown"; 644 | this.moneyNumericUpDown.Size = new System.Drawing.Size(120, 20); 645 | this.moneyNumericUpDown.TabIndex = 5; 646 | // 647 | // backpackSlotsNumericUpDown 648 | // 649 | this.backpackSlotsNumericUpDown.DataBindings.Add(new System.Windows.Forms.Binding("Value", this.playerSource, "BackpackSlots", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); 650 | this.backpackSlotsNumericUpDown.Location = new System.Drawing.Point(94, 213); 651 | this.backpackSlotsNumericUpDown.Maximum = new decimal(new int[] { 652 | 9999, 653 | 0, 654 | 0, 655 | 0}); 656 | this.backpackSlotsNumericUpDown.Name = "backpackSlotsNumericUpDown"; 657 | this.backpackSlotsNumericUpDown.Size = new System.Drawing.Size(120, 20); 658 | this.backpackSlotsNumericUpDown.TabIndex = 11; 659 | // 660 | // weaponSlotsNumericUpDown 661 | // 662 | this.weaponSlotsNumericUpDown.DataBindings.Add(new System.Windows.Forms.Binding("Value", this.playerSource, "WeaponSlots", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); 663 | this.weaponSlotsNumericUpDown.Location = new System.Drawing.Point(94, 187); 664 | this.weaponSlotsNumericUpDown.Name = "weaponSlotsNumericUpDown"; 665 | this.weaponSlotsNumericUpDown.Size = new System.Drawing.Size(120, 20); 666 | this.weaponSlotsNumericUpDown.TabIndex = 17; 667 | // 668 | // newuTab 669 | // 670 | this.newuTab.Controls.Add(this.tableLayoutPanel2); 671 | this.newuTab.Location = new System.Drawing.Point(4, 22); 672 | this.newuTab.Name = "newuTab"; 673 | this.newuTab.Padding = new System.Windows.Forms.Padding(3); 674 | this.newuTab.Size = new System.Drawing.Size(592, 275); 675 | this.newuTab.TabIndex = 5; 676 | this.newuTab.Text = "New-U"; 677 | this.newuTab.UseVisualStyleBackColor = true; 678 | // 679 | // tableLayoutPanel2 680 | // 681 | this.tableLayoutPanel2.AutoScroll = true; 682 | this.tableLayoutPanel2.ColumnCount = 2; 683 | this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); 684 | this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); 685 | this.tableLayoutPanel2.Controls.Add(color3Label, 0, 3); 686 | this.tableLayoutPanel2.Controls.Add(this.color3TextBox, 1, 3); 687 | this.tableLayoutPanel2.Controls.Add(color2Label, 0, 2); 688 | this.tableLayoutPanel2.Controls.Add(this.color2TextBox, 1, 2); 689 | this.tableLayoutPanel2.Controls.Add(color1Label, 0, 1); 690 | this.tableLayoutPanel2.Controls.Add(this.color1TextBox, 1, 1); 691 | this.tableLayoutPanel2.Controls.Add(this.nameTextBox, 1, 0); 692 | this.tableLayoutPanel2.Controls.Add(nameLabel, 0, 0); 693 | this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; 694 | this.tableLayoutPanel2.Location = new System.Drawing.Point(3, 3); 695 | this.tableLayoutPanel2.Name = "tableLayoutPanel2"; 696 | this.tableLayoutPanel2.RowCount = 5; 697 | this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); 698 | this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); 699 | this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); 700 | this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); 701 | this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); 702 | this.tableLayoutPanel2.Size = new System.Drawing.Size(586, 269); 703 | this.tableLayoutPanel2.TabIndex = 0; 704 | // 705 | // color3TextBox 706 | // 707 | this.color3TextBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.playerSource, "_Color3", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); 708 | this.color3TextBox.Location = new System.Drawing.Point(52, 81); 709 | this.color3TextBox.Name = "color3TextBox"; 710 | this.color3TextBox.Size = new System.Drawing.Size(100, 20); 711 | this.color3TextBox.TabIndex = 11; 712 | // 713 | // color2TextBox 714 | // 715 | this.color2TextBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.playerSource, "_Color2", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); 716 | this.color2TextBox.Location = new System.Drawing.Point(52, 55); 717 | this.color2TextBox.Name = "color2TextBox"; 718 | this.color2TextBox.Size = new System.Drawing.Size(100, 20); 719 | this.color2TextBox.TabIndex = 10; 720 | // 721 | // color1TextBox 722 | // 723 | this.color1TextBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.playerSource, "_Color1", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); 724 | this.color1TextBox.Location = new System.Drawing.Point(52, 29); 725 | this.color1TextBox.Name = "color1TextBox"; 726 | this.color1TextBox.Size = new System.Drawing.Size(100, 20); 727 | this.color1TextBox.TabIndex = 9; 728 | // 729 | // nameTextBox 730 | // 731 | this.nameTextBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.playerSource, "Name", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); 732 | this.nameTextBox.Location = new System.Drawing.Point(52, 3); 733 | this.nameTextBox.Name = "nameTextBox"; 734 | this.nameTextBox.Size = new System.Drawing.Size(100, 20); 735 | this.nameTextBox.TabIndex = 8; 736 | // 737 | // weaponsTab 738 | // 739 | this.weaponsTab.AutoScroll = true; 740 | this.weaponsTab.Controls.Add(this.weaponsPanel); 741 | this.weaponsTab.Controls.Add(this.weaponsToolStrip); 742 | this.weaponsTab.Location = new System.Drawing.Point(4, 22); 743 | this.weaponsTab.Name = "weaponsTab"; 744 | this.weaponsTab.Padding = new System.Windows.Forms.Padding(3); 745 | this.weaponsTab.Size = new System.Drawing.Size(592, 275); 746 | this.weaponsTab.TabIndex = 1; 747 | this.weaponsTab.Text = "Weapons"; 748 | this.weaponsTab.UseVisualStyleBackColor = true; 749 | // 750 | // weaponsPanel 751 | // 752 | this.weaponsPanel.AutoScroll = true; 753 | this.weaponsPanel.Controls.Add(this.weaponsDataGrid); 754 | this.weaponsPanel.Dock = System.Windows.Forms.DockStyle.Fill; 755 | this.weaponsPanel.Location = new System.Drawing.Point(3, 28); 756 | this.weaponsPanel.Name = "weaponsPanel"; 757 | this.weaponsPanel.Size = new System.Drawing.Size(586, 244); 758 | this.weaponsPanel.TabIndex = 3; 759 | // 760 | // weaponsDataGrid 761 | // 762 | this.weaponsDataGrid.AutoGenerateColumns = false; 763 | this.weaponsDataGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; 764 | this.weaponsDataGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { 765 | this.dataGridViewTextBoxColumn37, 766 | this.dataGridViewTextBoxColumn23, 767 | this.dataGridViewTextBoxColumn33, 768 | this.dataGridViewTextBoxColumn34, 769 | this.dataGridViewTextBoxColumn21, 770 | this.dataGridViewTextBoxColumn36, 771 | this.dataGridViewTextBoxColumn22, 772 | this.dataGridViewTextBoxColumn24, 773 | this.dataGridViewTextBoxColumn25, 774 | this.dataGridViewTextBoxColumn26, 775 | this.dataGridViewTextBoxColumn27, 776 | this.dataGridViewTextBoxColumn28, 777 | this.dataGridViewTextBoxColumn29, 778 | this.dataGridViewTextBoxColumn30, 779 | this.dataGridViewTextBoxColumn31, 780 | this.dataGridViewTextBoxColumn32, 781 | this.dataGridViewTextBoxColumn35}); 782 | this.weaponsDataGrid.DataSource = this.weaponsSource; 783 | this.weaponsDataGrid.Dock = System.Windows.Forms.DockStyle.Fill; 784 | this.weaponsDataGrid.Location = new System.Drawing.Point(0, 0); 785 | this.weaponsDataGrid.Name = "weaponsDataGrid"; 786 | this.weaponsDataGrid.Size = new System.Drawing.Size(586, 244); 787 | this.weaponsDataGrid.TabIndex = 0; 788 | // 789 | // dataGridViewTextBoxColumn37 790 | // 791 | this.dataGridViewTextBoxColumn37.DataPropertyName = "EquipSlot"; 792 | this.dataGridViewTextBoxColumn37.HeaderText = "Equip Slot"; 793 | this.dataGridViewTextBoxColumn37.Name = "dataGridViewTextBoxColumn37"; 794 | // 795 | // dataGridViewTextBoxColumn23 796 | // 797 | this.dataGridViewTextBoxColumn23.DataPropertyName = "Type"; 798 | this.dataGridViewTextBoxColumn23.HeaderText = "Type"; 799 | this.dataGridViewTextBoxColumn23.Name = "dataGridViewTextBoxColumn23"; 800 | // 801 | // dataGridViewTextBoxColumn33 802 | // 803 | this.dataGridViewTextBoxColumn33.DataPropertyName = "Prefix"; 804 | this.dataGridViewTextBoxColumn33.HeaderText = "Prefix"; 805 | this.dataGridViewTextBoxColumn33.Name = "dataGridViewTextBoxColumn33"; 806 | // 807 | // dataGridViewTextBoxColumn34 808 | // 809 | this.dataGridViewTextBoxColumn34.DataPropertyName = "Title"; 810 | this.dataGridViewTextBoxColumn34.HeaderText = "Title"; 811 | this.dataGridViewTextBoxColumn34.Name = "dataGridViewTextBoxColumn34"; 812 | // 813 | // dataGridViewTextBoxColumn21 814 | // 815 | this.dataGridViewTextBoxColumn21.DataPropertyName = "Grade"; 816 | this.dataGridViewTextBoxColumn21.HeaderText = "Grade"; 817 | this.dataGridViewTextBoxColumn21.Name = "dataGridViewTextBoxColumn21"; 818 | // 819 | // dataGridViewTextBoxColumn36 820 | // 821 | this.dataGridViewTextBoxColumn36.DataPropertyName = "Quality"; 822 | this.dataGridViewTextBoxColumn36.HeaderText = "Quality"; 823 | this.dataGridViewTextBoxColumn36.Name = "dataGridViewTextBoxColumn36"; 824 | // 825 | // dataGridViewTextBoxColumn22 826 | // 827 | this.dataGridViewTextBoxColumn22.DataPropertyName = "Manufacturer"; 828 | this.dataGridViewTextBoxColumn22.HeaderText = "Manufacturer"; 829 | this.dataGridViewTextBoxColumn22.Name = "dataGridViewTextBoxColumn22"; 830 | // 831 | // dataGridViewTextBoxColumn24 832 | // 833 | this.dataGridViewTextBoxColumn24.DataPropertyName = "Body"; 834 | this.dataGridViewTextBoxColumn24.HeaderText = "Body"; 835 | this.dataGridViewTextBoxColumn24.Name = "dataGridViewTextBoxColumn24"; 836 | // 837 | // dataGridViewTextBoxColumn25 838 | // 839 | this.dataGridViewTextBoxColumn25.DataPropertyName = "Grip"; 840 | this.dataGridViewTextBoxColumn25.HeaderText = "Grip"; 841 | this.dataGridViewTextBoxColumn25.Name = "dataGridViewTextBoxColumn25"; 842 | // 843 | // dataGridViewTextBoxColumn26 844 | // 845 | this.dataGridViewTextBoxColumn26.DataPropertyName = "Magazine"; 846 | this.dataGridViewTextBoxColumn26.HeaderText = "Magazine"; 847 | this.dataGridViewTextBoxColumn26.Name = "dataGridViewTextBoxColumn26"; 848 | // 849 | // dataGridViewTextBoxColumn27 850 | // 851 | this.dataGridViewTextBoxColumn27.DataPropertyName = "Barrel"; 852 | this.dataGridViewTextBoxColumn27.HeaderText = "Barrel"; 853 | this.dataGridViewTextBoxColumn27.Name = "dataGridViewTextBoxColumn27"; 854 | // 855 | // dataGridViewTextBoxColumn28 856 | // 857 | this.dataGridViewTextBoxColumn28.DataPropertyName = "Sight"; 858 | this.dataGridViewTextBoxColumn28.HeaderText = "Sight"; 859 | this.dataGridViewTextBoxColumn28.Name = "dataGridViewTextBoxColumn28"; 860 | // 861 | // dataGridViewTextBoxColumn29 862 | // 863 | this.dataGridViewTextBoxColumn29.DataPropertyName = "Stock"; 864 | this.dataGridViewTextBoxColumn29.HeaderText = "Stock"; 865 | this.dataGridViewTextBoxColumn29.Name = "dataGridViewTextBoxColumn29"; 866 | // 867 | // dataGridViewTextBoxColumn30 868 | // 869 | this.dataGridViewTextBoxColumn30.DataPropertyName = "Action"; 870 | this.dataGridViewTextBoxColumn30.HeaderText = "Action"; 871 | this.dataGridViewTextBoxColumn30.Name = "dataGridViewTextBoxColumn30"; 872 | // 873 | // dataGridViewTextBoxColumn31 874 | // 875 | this.dataGridViewTextBoxColumn31.DataPropertyName = "Accessory"; 876 | this.dataGridViewTextBoxColumn31.HeaderText = "Accessory"; 877 | this.dataGridViewTextBoxColumn31.Name = "dataGridViewTextBoxColumn31"; 878 | // 879 | // dataGridViewTextBoxColumn32 880 | // 881 | this.dataGridViewTextBoxColumn32.DataPropertyName = "Material"; 882 | this.dataGridViewTextBoxColumn32.HeaderText = "Material"; 883 | this.dataGridViewTextBoxColumn32.Name = "dataGridViewTextBoxColumn32"; 884 | // 885 | // dataGridViewTextBoxColumn35 886 | // 887 | this.dataGridViewTextBoxColumn35.DataPropertyName = "ClipSize"; 888 | this.dataGridViewTextBoxColumn35.HeaderText = "Clip Size?"; 889 | this.dataGridViewTextBoxColumn35.Name = "dataGridViewTextBoxColumn35"; 890 | // 891 | // weaponsSource 892 | // 893 | this.weaponsSource.AllowNew = true; 894 | this.weaponsSource.DataMember = "Weapons"; 895 | this.weaponsSource.DataSource = this.playerSource; 896 | // 897 | // weaponsToolStrip 898 | // 899 | this.weaponsToolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { 900 | this.weaponDuplicateButton}); 901 | this.weaponsToolStrip.Location = new System.Drawing.Point(3, 3); 902 | this.weaponsToolStrip.Name = "weaponsToolStrip"; 903 | this.weaponsToolStrip.Size = new System.Drawing.Size(586, 25); 904 | this.weaponsToolStrip.TabIndex = 2; 905 | this.weaponsToolStrip.Text = "toolStrip2"; 906 | // 907 | // weaponDuplicateButton 908 | // 909 | this.weaponDuplicateButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; 910 | this.weaponDuplicateButton.Image = global::Gibbed.Borderlands.SaveEdit.Properties.Resources.Duplicate; 911 | this.weaponDuplicateButton.ImageTransparentColor = System.Drawing.Color.Magenta; 912 | this.weaponDuplicateButton.Name = "weaponDuplicateButton"; 913 | this.weaponDuplicateButton.Size = new System.Drawing.Size(23, 22); 914 | this.weaponDuplicateButton.Text = "Duplicate Selected Weapons"; 915 | this.weaponDuplicateButton.Click += new System.EventHandler(this.OnWeaponDuplicate); 916 | // 917 | // itemsTab 918 | // 919 | this.itemsTab.AutoScroll = true; 920 | this.itemsTab.Controls.Add(this.itemsPanel); 921 | this.itemsTab.Controls.Add(this.itemsToolStrip); 922 | this.itemsTab.Location = new System.Drawing.Point(4, 22); 923 | this.itemsTab.Name = "itemsTab"; 924 | this.itemsTab.Padding = new System.Windows.Forms.Padding(3); 925 | this.itemsTab.Size = new System.Drawing.Size(592, 275); 926 | this.itemsTab.TabIndex = 2; 927 | this.itemsTab.Text = "Items"; 928 | this.itemsTab.UseVisualStyleBackColor = true; 929 | // 930 | // itemsPanel 931 | // 932 | this.itemsPanel.AutoScroll = true; 933 | this.itemsPanel.Controls.Add(this.itemsDataGrid); 934 | this.itemsPanel.Dock = System.Windows.Forms.DockStyle.Fill; 935 | this.itemsPanel.Location = new System.Drawing.Point(3, 28); 936 | this.itemsPanel.Name = "itemsPanel"; 937 | this.itemsPanel.Size = new System.Drawing.Size(586, 244); 938 | this.itemsPanel.TabIndex = 2; 939 | // 940 | // itemsDataGrid 941 | // 942 | this.itemsDataGrid.AutoGenerateColumns = false; 943 | this.itemsDataGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; 944 | this.itemsDataGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { 945 | this.dataGridViewTextBoxColumn20, 946 | this.dataGridViewTextBoxColumn10, 947 | this.dataGridViewTextBoxColumn9, 948 | this.dataGridViewTextBoxColumn19, 949 | this.dataGridViewTextBoxColumn16, 950 | this.dataGridViewTextBoxColumn17, 951 | this.dataGridViewTextBoxColumn11, 952 | this.dataGridViewTextBoxColumn12, 953 | this.dataGridViewTextBoxColumn13, 954 | this.dataGridViewTextBoxColumn14, 955 | this.dataGridViewTextBoxColumn15, 956 | this.dataGridViewTextBoxColumn18}); 957 | this.itemsDataGrid.DataSource = this.itemsSource; 958 | this.itemsDataGrid.Dock = System.Windows.Forms.DockStyle.Fill; 959 | this.itemsDataGrid.Location = new System.Drawing.Point(0, 0); 960 | this.itemsDataGrid.Name = "itemsDataGrid"; 961 | this.itemsDataGrid.Size = new System.Drawing.Size(586, 244); 962 | this.itemsDataGrid.TabIndex = 0; 963 | // 964 | // dataGridViewTextBoxColumn20 965 | // 966 | this.dataGridViewTextBoxColumn20.DataPropertyName = "Equipped"; 967 | this.dataGridViewTextBoxColumn20.HeaderText = "Equipped"; 968 | this.dataGridViewTextBoxColumn20.Name = "dataGridViewTextBoxColumn20"; 969 | // 970 | // dataGridViewTextBoxColumn10 971 | // 972 | this.dataGridViewTextBoxColumn10.DataPropertyName = "Type"; 973 | this.dataGridViewTextBoxColumn10.HeaderText = "Type"; 974 | this.dataGridViewTextBoxColumn10.Name = "dataGridViewTextBoxColumn10"; 975 | // 976 | // dataGridViewTextBoxColumn9 977 | // 978 | this.dataGridViewTextBoxColumn9.DataPropertyName = "Grade"; 979 | this.dataGridViewTextBoxColumn9.HeaderText = "Grade"; 980 | this.dataGridViewTextBoxColumn9.Name = "dataGridViewTextBoxColumn9"; 981 | // 982 | // dataGridViewTextBoxColumn19 983 | // 984 | this.dataGridViewTextBoxColumn19.DataPropertyName = "Quality"; 985 | this.dataGridViewTextBoxColumn19.HeaderText = "Quality"; 986 | this.dataGridViewTextBoxColumn19.Name = "dataGridViewTextBoxColumn19"; 987 | // 988 | // dataGridViewTextBoxColumn16 989 | // 990 | this.dataGridViewTextBoxColumn16.DataPropertyName = "Prefix"; 991 | this.dataGridViewTextBoxColumn16.HeaderText = "Prefix"; 992 | this.dataGridViewTextBoxColumn16.Name = "dataGridViewTextBoxColumn16"; 993 | // 994 | // dataGridViewTextBoxColumn17 995 | // 996 | this.dataGridViewTextBoxColumn17.DataPropertyName = "Title"; 997 | this.dataGridViewTextBoxColumn17.HeaderText = "Title"; 998 | this.dataGridViewTextBoxColumn17.Name = "dataGridViewTextBoxColumn17"; 999 | // 1000 | // dataGridViewTextBoxColumn11 1001 | // 1002 | this.dataGridViewTextBoxColumn11.DataPropertyName = "Body"; 1003 | this.dataGridViewTextBoxColumn11.HeaderText = "Body"; 1004 | this.dataGridViewTextBoxColumn11.Name = "dataGridViewTextBoxColumn11"; 1005 | // 1006 | // dataGridViewTextBoxColumn12 1007 | // 1008 | this.dataGridViewTextBoxColumn12.DataPropertyName = "LeftSide"; 1009 | this.dataGridViewTextBoxColumn12.HeaderText = "Left Side"; 1010 | this.dataGridViewTextBoxColumn12.Name = "dataGridViewTextBoxColumn12"; 1011 | // 1012 | // dataGridViewTextBoxColumn13 1013 | // 1014 | this.dataGridViewTextBoxColumn13.DataPropertyName = "RightSide"; 1015 | this.dataGridViewTextBoxColumn13.HeaderText = "Right Side"; 1016 | this.dataGridViewTextBoxColumn13.Name = "dataGridViewTextBoxColumn13"; 1017 | // 1018 | // dataGridViewTextBoxColumn14 1019 | // 1020 | this.dataGridViewTextBoxColumn14.DataPropertyName = "Material"; 1021 | this.dataGridViewTextBoxColumn14.HeaderText = "Material"; 1022 | this.dataGridViewTextBoxColumn14.Name = "dataGridViewTextBoxColumn14"; 1023 | // 1024 | // dataGridViewTextBoxColumn15 1025 | // 1026 | this.dataGridViewTextBoxColumn15.DataPropertyName = "Manufacturer"; 1027 | this.dataGridViewTextBoxColumn15.HeaderText = "Manufacturer"; 1028 | this.dataGridViewTextBoxColumn15.Name = "dataGridViewTextBoxColumn15"; 1029 | // 1030 | // dataGridViewTextBoxColumn18 1031 | // 1032 | this.dataGridViewTextBoxColumn18.DataPropertyName = "Unknown09"; 1033 | this.dataGridViewTextBoxColumn18.HeaderText = "Unknown09"; 1034 | this.dataGridViewTextBoxColumn18.Name = "dataGridViewTextBoxColumn18"; 1035 | // 1036 | // itemsSource 1037 | // 1038 | this.itemsSource.DataMember = "Items"; 1039 | this.itemsSource.DataSource = this.playerSource; 1040 | // 1041 | // itemsToolStrip 1042 | // 1043 | this.itemsToolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { 1044 | this.itemDuplicateButton}); 1045 | this.itemsToolStrip.Location = new System.Drawing.Point(3, 3); 1046 | this.itemsToolStrip.Name = "itemsToolStrip"; 1047 | this.itemsToolStrip.Size = new System.Drawing.Size(586, 25); 1048 | this.itemsToolStrip.TabIndex = 1; 1049 | this.itemsToolStrip.Text = "toolStrip2"; 1050 | // 1051 | // itemDuplicateButton 1052 | // 1053 | this.itemDuplicateButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; 1054 | this.itemDuplicateButton.Image = global::Gibbed.Borderlands.SaveEdit.Properties.Resources.Duplicate; 1055 | this.itemDuplicateButton.ImageTransparentColor = System.Drawing.Color.Magenta; 1056 | this.itemDuplicateButton.Name = "itemDuplicateButton"; 1057 | this.itemDuplicateButton.Size = new System.Drawing.Size(23, 22); 1058 | this.itemDuplicateButton.Text = "Duplicate Selected Items"; 1059 | this.itemDuplicateButton.Click += new System.EventHandler(this.OnItemDuplicate); 1060 | // 1061 | // ammoPoolsTab 1062 | // 1063 | this.ammoPoolsTab.AutoScroll = true; 1064 | this.ammoPoolsTab.Controls.Add(this.ammoPoolsDataGrid); 1065 | this.ammoPoolsTab.Location = new System.Drawing.Point(4, 22); 1066 | this.ammoPoolsTab.Name = "ammoPoolsTab"; 1067 | this.ammoPoolsTab.Padding = new System.Windows.Forms.Padding(3); 1068 | this.ammoPoolsTab.Size = new System.Drawing.Size(592, 275); 1069 | this.ammoPoolsTab.TabIndex = 3; 1070 | this.ammoPoolsTab.Text = "Ammo Pools"; 1071 | this.ammoPoolsTab.UseVisualStyleBackColor = true; 1072 | // 1073 | // ammoPoolsDataGrid 1074 | // 1075 | this.ammoPoolsDataGrid.AutoGenerateColumns = false; 1076 | this.ammoPoolsDataGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; 1077 | this.ammoPoolsDataGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { 1078 | this.dataGridViewTextBoxColumn1, 1079 | this.dataGridViewTextBoxColumn2, 1080 | this.dataGridViewTextBoxColumn3, 1081 | this.dataGridViewTextBoxColumn4}); 1082 | this.ammoPoolsDataGrid.DataSource = this.ammoPoolsSource; 1083 | this.ammoPoolsDataGrid.Dock = System.Windows.Forms.DockStyle.Fill; 1084 | this.ammoPoolsDataGrid.Location = new System.Drawing.Point(3, 3); 1085 | this.ammoPoolsDataGrid.Name = "ammoPoolsDataGrid"; 1086 | this.ammoPoolsDataGrid.Size = new System.Drawing.Size(586, 269); 1087 | this.ammoPoolsDataGrid.TabIndex = 0; 1088 | // 1089 | // dataGridViewTextBoxColumn1 1090 | // 1091 | this.dataGridViewTextBoxColumn1.DataPropertyName = "Name"; 1092 | this.dataGridViewTextBoxColumn1.HeaderText = "Name"; 1093 | this.dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1"; 1094 | // 1095 | // dataGridViewTextBoxColumn2 1096 | // 1097 | this.dataGridViewTextBoxColumn2.DataPropertyName = "Pool"; 1098 | this.dataGridViewTextBoxColumn2.HeaderText = "Pool"; 1099 | this.dataGridViewTextBoxColumn2.Name = "dataGridViewTextBoxColumn2"; 1100 | // 1101 | // dataGridViewTextBoxColumn3 1102 | // 1103 | this.dataGridViewTextBoxColumn3.DataPropertyName = "Quantity"; 1104 | this.dataGridViewTextBoxColumn3.HeaderText = "Quantity"; 1105 | this.dataGridViewTextBoxColumn3.Name = "dataGridViewTextBoxColumn3"; 1106 | // 1107 | // dataGridViewTextBoxColumn4 1108 | // 1109 | this.dataGridViewTextBoxColumn4.DataPropertyName = "UpgradeLevel"; 1110 | this.dataGridViewTextBoxColumn4.HeaderText = "Upgrade Level"; 1111 | this.dataGridViewTextBoxColumn4.Name = "dataGridViewTextBoxColumn4"; 1112 | // 1113 | // ammoPoolsSource 1114 | // 1115 | this.ammoPoolsSource.DataMember = "AmmoPools"; 1116 | this.ammoPoolsSource.DataSource = this.playerSource; 1117 | // 1118 | // skillsTab 1119 | // 1120 | this.skillsTab.AutoScroll = true; 1121 | this.skillsTab.Controls.Add(this.skillsPanel); 1122 | this.skillsTab.Controls.Add(this.skillsToolStrip); 1123 | this.skillsTab.Location = new System.Drawing.Point(4, 22); 1124 | this.skillsTab.Name = "skillsTab"; 1125 | this.skillsTab.Padding = new System.Windows.Forms.Padding(3); 1126 | this.skillsTab.Size = new System.Drawing.Size(592, 275); 1127 | this.skillsTab.TabIndex = 4; 1128 | this.skillsTab.Text = "Skills"; 1129 | this.skillsTab.UseVisualStyleBackColor = true; 1130 | // 1131 | // skillsPanel 1132 | // 1133 | this.skillsPanel.AutoScroll = true; 1134 | this.skillsPanel.Controls.Add(this.skillsDataGrid); 1135 | this.skillsPanel.Dock = System.Windows.Forms.DockStyle.Fill; 1136 | this.skillsPanel.Location = new System.Drawing.Point(3, 28); 1137 | this.skillsPanel.Name = "skillsPanel"; 1138 | this.skillsPanel.Size = new System.Drawing.Size(586, 244); 1139 | this.skillsPanel.TabIndex = 1; 1140 | // 1141 | // skillsDataGrid 1142 | // 1143 | this.skillsDataGrid.AutoGenerateColumns = false; 1144 | this.skillsDataGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; 1145 | this.skillsDataGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { 1146 | this.dataGridViewTextBoxColumn5, 1147 | this.dataGridViewTextBoxColumn6, 1148 | this.dataGridViewTextBoxColumn7, 1149 | this.dataGridViewTextBoxColumn8}); 1150 | this.skillsDataGrid.DataSource = this.skillsSource; 1151 | this.skillsDataGrid.Dock = System.Windows.Forms.DockStyle.Fill; 1152 | this.skillsDataGrid.Location = new System.Drawing.Point(0, 0); 1153 | this.skillsDataGrid.Name = "skillsDataGrid"; 1154 | this.skillsDataGrid.Size = new System.Drawing.Size(586, 244); 1155 | this.skillsDataGrid.TabIndex = 0; 1156 | // 1157 | // dataGridViewTextBoxColumn5 1158 | // 1159 | this.dataGridViewTextBoxColumn5.DataPropertyName = "Name"; 1160 | this.dataGridViewTextBoxColumn5.HeaderText = "Name"; 1161 | this.dataGridViewTextBoxColumn5.Name = "dataGridViewTextBoxColumn5"; 1162 | // 1163 | // dataGridViewTextBoxColumn6 1164 | // 1165 | this.dataGridViewTextBoxColumn6.DataPropertyName = "Level"; 1166 | this.dataGridViewTextBoxColumn6.HeaderText = "Level"; 1167 | this.dataGridViewTextBoxColumn6.Name = "dataGridViewTextBoxColumn6"; 1168 | // 1169 | // dataGridViewTextBoxColumn7 1170 | // 1171 | this.dataGridViewTextBoxColumn7.DataPropertyName = "Experience"; 1172 | this.dataGridViewTextBoxColumn7.HeaderText = "Experience"; 1173 | this.dataGridViewTextBoxColumn7.Name = "dataGridViewTextBoxColumn7"; 1174 | // 1175 | // dataGridViewTextBoxColumn8 1176 | // 1177 | this.dataGridViewTextBoxColumn8.DataPropertyName = "ArtifactMode"; 1178 | this.dataGridViewTextBoxColumn8.HeaderText = "ArtifactMode"; 1179 | this.dataGridViewTextBoxColumn8.Name = "dataGridViewTextBoxColumn8"; 1180 | // 1181 | // skillsSource 1182 | // 1183 | this.skillsSource.DataMember = "Skills"; 1184 | this.skillsSource.DataSource = this.playerSource; 1185 | // 1186 | // skillsToolStrip 1187 | // 1188 | this.skillsToolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { 1189 | this.exportSkillTreeClipboardButton, 1190 | this.exportSkillTreeBrowserButton}); 1191 | this.skillsToolStrip.Location = new System.Drawing.Point(3, 3); 1192 | this.skillsToolStrip.Name = "skillsToolStrip"; 1193 | this.skillsToolStrip.Size = new System.Drawing.Size(586, 25); 1194 | this.skillsToolStrip.TabIndex = 0; 1195 | // 1196 | // exportSkillTreeClipboardButton 1197 | // 1198 | this.exportSkillTreeClipboardButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; 1199 | this.exportSkillTreeClipboardButton.Image = global::Gibbed.Borderlands.SaveEdit.Properties.Resources.ExportClipboard; 1200 | this.exportSkillTreeClipboardButton.ImageTransparentColor = System.Drawing.Color.Magenta; 1201 | this.exportSkillTreeClipboardButton.Name = "exportSkillTreeClipboardButton"; 1202 | this.exportSkillTreeClipboardButton.Size = new System.Drawing.Size(23, 22); 1203 | this.exportSkillTreeClipboardButton.Text = "Export Skill Tree URL to clipboard"; 1204 | this.exportSkillTreeClipboardButton.Click += new System.EventHandler(this.OnSkillExportClipboard); 1205 | // 1206 | // exportSkillTreeBrowserButton 1207 | // 1208 | this.exportSkillTreeBrowserButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; 1209 | this.exportSkillTreeBrowserButton.Image = global::Gibbed.Borderlands.SaveEdit.Properties.Resources.ExportBrowser; 1210 | this.exportSkillTreeBrowserButton.ImageTransparentColor = System.Drawing.Color.Magenta; 1211 | this.exportSkillTreeBrowserButton.Name = "exportSkillTreeBrowserButton"; 1212 | this.exportSkillTreeBrowserButton.Size = new System.Drawing.Size(23, 22); 1213 | this.exportSkillTreeBrowserButton.Text = "Export Skill Tree URL to browser"; 1214 | this.exportSkillTreeBrowserButton.Click += new System.EventHandler(this.OnSkillExportBrowser); 1215 | // 1216 | // saveTab 1217 | // 1218 | this.saveTab.Controls.Add(this.littleEndianCheckBox); 1219 | this.saveTab.Location = new System.Drawing.Point(4, 22); 1220 | this.saveTab.Name = "saveTab"; 1221 | this.saveTab.Padding = new System.Windows.Forms.Padding(3); 1222 | this.saveTab.Size = new System.Drawing.Size(592, 275); 1223 | this.saveTab.TabIndex = 6; 1224 | this.saveTab.Text = "Save"; 1225 | this.saveTab.UseVisualStyleBackColor = true; 1226 | // 1227 | // littleEndianCheckBox 1228 | // 1229 | this.littleEndianCheckBox.AutoSize = true; 1230 | this.littleEndianCheckBox.DataBindings.Add(new System.Windows.Forms.Binding("CheckState", this.saveFileSource, "LittleEndian", true)); 1231 | this.littleEndianCheckBox.Location = new System.Drawing.Point(6, 6); 1232 | this.littleEndianCheckBox.Name = "littleEndianCheckBox"; 1233 | this.littleEndianCheckBox.Size = new System.Drawing.Size(261, 17); 1234 | this.littleEndianCheckBox.TabIndex = 1; 1235 | this.littleEndianCheckBox.Text = "Little Endian (Check if Windows, uncheck if PS3)"; 1236 | this.littleEndianCheckBox.UseVisualStyleBackColor = true; 1237 | // 1238 | // openFileDialog 1239 | // 1240 | this.openFileDialog.DefaultExt = "sav"; 1241 | this.openFileDialog.Filter = "Borderlands Saves (*.sav)|*.sav|All Files (*.*)|*.*"; 1242 | // 1243 | // saveFileDialog 1244 | // 1245 | this.saveFileDialog.Filter = "Borderlands Saves (*.sav)|*.sav|All Files (*.*)|*.*"; 1246 | // 1247 | // Editor 1248 | // 1249 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 1250 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 1251 | this.ClientSize = new System.Drawing.Size(624, 341); 1252 | this.Controls.Add(this.mainTabs); 1253 | this.Controls.Add(this.mainToolStrip); 1254 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 1255 | this.Name = "Editor"; 1256 | this.Text = "Gibbed\'s Borderlands Save Editor"; 1257 | this.mainToolStrip.ResumeLayout(false); 1258 | this.mainToolStrip.PerformLayout(); 1259 | this.mainTabs.ResumeLayout(false); 1260 | this.playerTab.ResumeLayout(false); 1261 | this.tableLayoutPanel1.ResumeLayout(false); 1262 | this.tableLayoutPanel1.PerformLayout(); 1263 | ((System.ComponentModel.ISupportInitialize)(this.saveSlotNumericUpDown)).EndInit(); 1264 | ((System.ComponentModel.ISupportInitialize)(this.playerSource)).EndInit(); 1265 | ((System.ComponentModel.ISupportInitialize)(this.saveFileSource)).EndInit(); 1266 | ((System.ComponentModel.ISupportInitialize)(this.levelNumericUpDown)).EndInit(); 1267 | ((System.ComponentModel.ISupportInitialize)(this.experienceNumericUpDown)).EndInit(); 1268 | ((System.ComponentModel.ISupportInitialize)(this.skillPointsNumericUpDown)).EndInit(); 1269 | ((System.ComponentModel.ISupportInitialize)(this.moneyNumericUpDown)).EndInit(); 1270 | ((System.ComponentModel.ISupportInitialize)(this.backpackSlotsNumericUpDown)).EndInit(); 1271 | ((System.ComponentModel.ISupportInitialize)(this.weaponSlotsNumericUpDown)).EndInit(); 1272 | this.newuTab.ResumeLayout(false); 1273 | this.tableLayoutPanel2.ResumeLayout(false); 1274 | this.tableLayoutPanel2.PerformLayout(); 1275 | this.weaponsTab.ResumeLayout(false); 1276 | this.weaponsTab.PerformLayout(); 1277 | this.weaponsPanel.ResumeLayout(false); 1278 | ((System.ComponentModel.ISupportInitialize)(this.weaponsDataGrid)).EndInit(); 1279 | ((System.ComponentModel.ISupportInitialize)(this.weaponsSource)).EndInit(); 1280 | this.weaponsToolStrip.ResumeLayout(false); 1281 | this.weaponsToolStrip.PerformLayout(); 1282 | this.itemsTab.ResumeLayout(false); 1283 | this.itemsTab.PerformLayout(); 1284 | this.itemsPanel.ResumeLayout(false); 1285 | ((System.ComponentModel.ISupportInitialize)(this.itemsDataGrid)).EndInit(); 1286 | ((System.ComponentModel.ISupportInitialize)(this.itemsSource)).EndInit(); 1287 | this.itemsToolStrip.ResumeLayout(false); 1288 | this.itemsToolStrip.PerformLayout(); 1289 | this.ammoPoolsTab.ResumeLayout(false); 1290 | ((System.ComponentModel.ISupportInitialize)(this.ammoPoolsDataGrid)).EndInit(); 1291 | ((System.ComponentModel.ISupportInitialize)(this.ammoPoolsSource)).EndInit(); 1292 | this.skillsTab.ResumeLayout(false); 1293 | this.skillsTab.PerformLayout(); 1294 | this.skillsPanel.ResumeLayout(false); 1295 | ((System.ComponentModel.ISupportInitialize)(this.skillsDataGrid)).EndInit(); 1296 | ((System.ComponentModel.ISupportInitialize)(this.skillsSource)).EndInit(); 1297 | this.skillsToolStrip.ResumeLayout(false); 1298 | this.skillsToolStrip.PerformLayout(); 1299 | this.saveTab.ResumeLayout(false); 1300 | this.saveTab.PerformLayout(); 1301 | this.ResumeLayout(false); 1302 | this.PerformLayout(); 1303 | 1304 | } 1305 | 1306 | #endregion 1307 | 1308 | private System.Windows.Forms.ToolStrip mainToolStrip; 1309 | private System.Windows.Forms.ToolStripDropDownButton newButton; 1310 | private System.Windows.Forms.ToolStripMenuItem newBerserkerMenuItem; 1311 | private System.Windows.Forms.ToolStripMenuItem newSirenMenuItem; 1312 | private System.Windows.Forms.ToolStripMenuItem newHunterMenuItem; 1313 | private System.Windows.Forms.ToolStripMenuItem newSoldierMenuItem; 1314 | private System.Windows.Forms.TabControl mainTabs; 1315 | private System.Windows.Forms.TabPage playerTab; 1316 | private System.Windows.Forms.TabPage weaponsTab; 1317 | private System.Windows.Forms.BindingSource playerSource; 1318 | private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; 1319 | private System.Windows.Forms.NumericUpDown experienceNumericUpDown; 1320 | private System.Windows.Forms.NumericUpDown levelNumericUpDown; 1321 | private System.Windows.Forms.NumericUpDown moneyNumericUpDown; 1322 | private System.Windows.Forms.ComboBox characterComboBox; 1323 | private System.Windows.Forms.TabPage itemsTab; 1324 | private System.Windows.Forms.ToolStripButton openButton; 1325 | private System.Windows.Forms.ToolStripButton saveButton; 1326 | private System.Windows.Forms.OpenFileDialog openFileDialog; 1327 | private System.Windows.Forms.NumericUpDown backpackSlotsNumericUpDown; 1328 | private System.Windows.Forms.SaveFileDialog saveFileDialog; 1329 | private System.Windows.Forms.TabPage skillsTab; 1330 | private System.Windows.Forms.BindingSource skillsSource; 1331 | private System.Windows.Forms.BindingSource weaponsSource; 1332 | private System.Windows.Forms.BindingSource itemsSource; 1333 | private System.Windows.Forms.TabPage ammoPoolsTab; 1334 | private System.Windows.Forms.BindingSource ammoPoolsSource; 1335 | private System.Windows.Forms.TabPage newuTab; 1336 | private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; 1337 | private System.Windows.Forms.TextBox nameTextBox; 1338 | private System.Windows.Forms.TextBox color1TextBox; 1339 | private System.Windows.Forms.TextBox color3TextBox; 1340 | private System.Windows.Forms.TextBox color2TextBox; 1341 | private System.Windows.Forms.ComboBox currentStationComboBox; 1342 | private System.Windows.Forms.NumericUpDown skillPointsNumericUpDown; 1343 | private System.Windows.Forms.NumericUpDown saveSlotNumericUpDown; 1344 | private System.Windows.Forms.ToolStrip weaponsToolStrip; 1345 | private System.Windows.Forms.ToolStripButton weaponDuplicateButton; 1346 | private System.Windows.Forms.ToolStrip itemsToolStrip; 1347 | private System.Windows.Forms.ToolStripButton itemDuplicateButton; 1348 | private System.Windows.Forms.Panel itemsPanel; 1349 | private System.Windows.Forms.Panel weaponsPanel; 1350 | private System.Windows.Forms.NumericUpDown weaponSlotsNumericUpDown; 1351 | private System.Windows.Forms.Panel skillsPanel; 1352 | private System.Windows.Forms.ToolStrip skillsToolStrip; 1353 | private System.Windows.Forms.ToolStripButton exportSkillTreeClipboardButton; 1354 | private System.Windows.Forms.ToolStripButton exportSkillTreeBrowserButton; 1355 | private System.Windows.Forms.TabPage saveTab; 1356 | private System.Windows.Forms.CheckBox littleEndianCheckBox; 1357 | private System.Windows.Forms.BindingSource saveFileSource; 1358 | private System.Windows.Forms.DataGridView ammoPoolsDataGrid; 1359 | private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn1; 1360 | private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn2; 1361 | private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn3; 1362 | private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn4; 1363 | private System.Windows.Forms.DataGridView skillsDataGrid; 1364 | private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn5; 1365 | private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn6; 1366 | private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn7; 1367 | private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn8; 1368 | private System.Windows.Forms.DataGridView itemsDataGrid; 1369 | private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn20; 1370 | private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn10; 1371 | private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn9; 1372 | private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn19; 1373 | private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn16; 1374 | private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn17; 1375 | private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn11; 1376 | private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn12; 1377 | private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn13; 1378 | private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn14; 1379 | private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn15; 1380 | private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn18; 1381 | private System.Windows.Forms.DataGridView weaponsDataGrid; 1382 | private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn37; 1383 | private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn23; 1384 | private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn33; 1385 | private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn34; 1386 | private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn21; 1387 | private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn36; 1388 | private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn22; 1389 | private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn24; 1390 | private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn25; 1391 | private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn26; 1392 | private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn27; 1393 | private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn28; 1394 | private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn29; 1395 | private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn30; 1396 | private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn31; 1397 | private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn32; 1398 | private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn35; 1399 | } 1400 | } 1401 | 1402 | -------------------------------------------------------------------------------- /projects/Gibbed.Borderlands.SaveEdit/Editor.cs: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2019 Rick (rick 'at' gibbed 'dot' us) 2 | * 3 | * This software is provided 'as-is', without any express or implied 4 | * warranty. In no event will the authors be held liable for any damages 5 | * arising from the use of this software. 6 | * 7 | * Permission is granted to anyone to use this software for any purpose, 8 | * including commercial applications, and to alter it and redistribute it 9 | * freely, subject to the following restrictions: 10 | * 11 | * 1. The origin of this software must not be misrepresented; you must not 12 | * claim that you wrote the original software. If you use this software 13 | * in a product, an acknowledgment in the product documentation would 14 | * be appreciated but is not required. 15 | * 16 | * 2. Altered source versions must be plainly marked as such, and must not 17 | * be misrepresented as being the original software. 18 | * 19 | * 3. This notice may not be removed or altered from any source 20 | * distribution. 21 | */ 22 | using System; 23 | using System.Collections.Generic; 24 | using System.Diagnostics; 25 | using System.Linq; 26 | using System.Windows.Forms; 27 | using Gibbed.Borderlands.FileFormats; 28 | using Save = Gibbed.Borderlands.FileFormats.Save; 29 | 30 | namespace Gibbed.Borderlands.SaveEdit 31 | { 32 | public partial class Editor : Form 33 | { 34 | private SaveFile _Save 35 | { 36 | get { return (SaveFile)this.saveFileSource.DataSource; } 37 | set { this.saveFileSource.DataSource = value; } 38 | } 39 | 40 | public Editor() 41 | { 42 | this.InitializeComponent(); 43 | 44 | var savePath = Helpers.GetSavePath(); 45 | 46 | this.openFileDialog.InitialDirectory = savePath; 47 | this.saveFileDialog.InitialDirectory = savePath; 48 | 49 | var classes = new List(); 50 | classes.Add(new PlayerClass("gd_Brick.Character.CharacterClass_Brick", "Brick")); 51 | classes.Add(new PlayerClass("gd_lilith.Character.CharacterClass_Lilith", "Lilith")); 52 | classes.Add(new PlayerClass("gd_mordecai.Character.CharacterClass_Mordecai", "Mordecai")); 53 | classes.Add(new PlayerClass("gd_Roland.Character.CharacterClass_Roland", "Roland")); 54 | 55 | this.characterComboBox.ValueMember = "Type"; 56 | this.characterComboBox.DisplayMember = "Name"; 57 | this.characterComboBox.DataSource = classes; 58 | 59 | this._Save = new SaveFile(DefaultPlayer.Brick.Create()); 60 | } 61 | 62 | private void OnNewBerserker(object sender, EventArgs e) 63 | { 64 | this._Save = new SaveFile(DefaultPlayer.Brick.Create()); 65 | } 66 | 67 | private void OnOpen(object sender, EventArgs e) 68 | { 69 | if (this.openFileDialog.ShowDialog() != DialogResult.OK) 70 | { 71 | return; 72 | } 73 | 74 | var save = new SaveFile(); 75 | using (var input = this.openFileDialog.OpenFile()) 76 | { 77 | save.Deserialize(input); 78 | } 79 | this._Save = save; 80 | } 81 | 82 | private void OnSave(object sender, EventArgs e) 83 | { 84 | if (this.saveFileDialog.ShowDialog() != DialogResult.OK) 85 | { 86 | return; 87 | } 88 | 89 | using (var output = this.saveFileDialog.OpenFile()) 90 | { 91 | this._Save.Serialize(output); 92 | } 93 | } 94 | 95 | private void OnWeaponDuplicate(object sender, EventArgs e) 96 | { 97 | foreach (DataGridViewRow row in this.weaponsDataGrid.SelectedRows) 98 | { 99 | var clone = (Save.Weapon)((Save.Weapon)row.DataBoundItem).Clone(); 100 | clone.EquipSlot = 0; 101 | this.weaponsSource.Add(clone); 102 | } 103 | } 104 | 105 | private void OnItemDuplicate(object sender, EventArgs e) 106 | { 107 | foreach (DataGridViewRow row in this.itemsDataGrid.SelectedRows) 108 | { 109 | var clone = (Save.Item)((Save.Item)row.DataBoundItem).Clone(); 110 | clone.Equipped = 0; 111 | this.itemsSource.Add(clone); 112 | } 113 | } 114 | 115 | private string GetSkillLevel(string name) 116 | { 117 | foreach (var skill in this._Save.PlayerData.Skills.Where( 118 | c => string.Compare(c.Name, name, StringComparison.InvariantCultureIgnoreCase) == 0)) 119 | { 120 | return Math.Max(0, Math.Min(5, skill.Level)).ToString(); 121 | } 122 | return "0"; 123 | } 124 | 125 | private string GetSkillTreeUrl() 126 | { 127 | string url = "http://www.borderlandsthegame.com/skilltree/"; 128 | 129 | if (this._Save.PlayerData.Character == "gd_Roland.Character.CharacterClass_Roland") 130 | { 131 | url += "roland/#0"; 132 | 133 | url += GetSkillLevel("gd_Skills2_Roland.Action.A_DeployScorpio"); 134 | 135 | url += GetSkillLevel("gd_Skills2_Roland.Support.Impact"); 136 | url += GetSkillLevel("gd_Skills2_Roland.Infantry.Sentry"); 137 | url += GetSkillLevel("gd_Skills2_Roland.Infantry.Scattershot"); 138 | url += GetSkillLevel("gd_Skills2_Roland.Infantry.MetalStorm"); 139 | url += GetSkillLevel("gd_Skills2_Roland.Infantry.Refire"); 140 | url += GetSkillLevel("gd_Skills2_Roland.Infantry.Assault"); 141 | url += GetSkillLevel("gd_Skills2_Roland.Infantry.GuidedMissile"); 142 | 143 | url += GetSkillLevel("gd_Skills2_Roland.Support.Defense"); 144 | url += GetSkillLevel("gd_Skills2_Roland.Support.Stockpile"); 145 | url += GetSkillLevel("gd_Skills2_Roland.Support.QuickCharge"); 146 | url += GetSkillLevel("gd_Skills2_Roland.Support.Barrage"); 147 | url += GetSkillLevel("gd_Skills2_Roland.Support.Grenadier"); 148 | url += GetSkillLevel("gd_Skills2_Roland.Support.deploy"); 149 | url += GetSkillLevel("gd_Skills2_Roland.Support.SupplyDrop"); 150 | 151 | url += GetSkillLevel("gd_Skills2_Roland.Medic.Fitness"); 152 | url += GetSkillLevel("gd_Skills2_Roland.Medic.AidStation"); 153 | url += GetSkillLevel("gd_Skills2_Roland.Medic.Overload"); 154 | url += GetSkillLevel("gd_Skills2_Roland.Medic.Cauterize"); 155 | url += GetSkillLevel("gd_Skills2_Roland.Medic.Revive"); 156 | url += GetSkillLevel("gd_Skills2_Roland.Medic.Grit"); 157 | url += GetSkillLevel("gd_Skills2_Roland.Medic.Stat"); 158 | } 159 | else if (this._Save.PlayerData.Character == "gd_mordecai.Character.CharacterClass_Mordecai") 160 | { 161 | url += "mordecai/#1"; 162 | 163 | url += GetSkillLevel("gd_Skills2_Mordecai.Action.A_LaunchBloodwing"); 164 | 165 | url += GetSkillLevel("gd_Skills2_Mordecai.Sniper.Focus"); 166 | url += GetSkillLevel("gd_Skills2_Mordecai.Sniper.Caliber"); 167 | url += GetSkillLevel("gd_Skills2_Mordecai.Sniper.Smirk"); 168 | url += GetSkillLevel("gd_Skills2_Mordecai.Sniper.Killer"); 169 | url += GetSkillLevel("gd_Skills2_Mordecai.Sniper.Loaded"); 170 | url += GetSkillLevel("gd_Skills2_Mordecai.Sniper.CarrionCall"); 171 | url += GetSkillLevel("gd_Skills2_Mordecai.Sniper.Trespass"); 172 | 173 | url += GetSkillLevel("gd_Skills2_Mordecai.Rogue.SwiftStrike"); 174 | url += GetSkillLevel("gd_Skills2_Mordecai.Rogue.Swipe"); 175 | url += GetSkillLevel("gd_Skills2_Mordecai.Rogue.FastHands"); 176 | url += GetSkillLevel("gd_Skills2_Mordecai.Rogue.OutForBlood"); 177 | url += GetSkillLevel("gd_Skills2_Mordecai.Rogue.AerialImpact"); 178 | url += GetSkillLevel("gd_Skills2_Mordecai.Rogue.Ransack"); 179 | url += GetSkillLevel("gd_Skills2_Mordecai.Rogue.BirdOfPrey"); 180 | 181 | url += GetSkillLevel("gd_Skills2_Mordecai.Gunslinger.Deadly"); 182 | url += GetSkillLevel("gd_Skills2_Mordecai.Gunslinger.GunCrazy"); 183 | url += GetSkillLevel("gd_Skills2_Mordecai.Gunslinger.LethalStrike"); 184 | url += GetSkillLevel("gd_Skills2_Mordecai.Gunslinger.RiotousRemedy"); 185 | url += GetSkillLevel("gd_Skills2_Mordecai.Gunslinger.Predator"); 186 | url += GetSkillLevel("gd_Skills2_Mordecai.Gunslinger.HairTrigger"); 187 | url += GetSkillLevel("gd_Skills2_Mordecai.Gunslinger.Relentless"); 188 | } 189 | else if (this._Save.PlayerData.Character == "gd_lilith.Character.CharacterClass_Lilith") 190 | { 191 | url += "lilith/#2"; 192 | 193 | url += GetSkillLevel("gd_Skills2_Lilith.Action.A_PhaseWalk"); 194 | 195 | url += GetSkillLevel("gd_Skills2_Lilith.Controller.Diva"); 196 | url += GetSkillLevel("gd_Skills2_Lilith.Controller.Striking"); 197 | url += GetSkillLevel("gd_Skills2_Lilith.Controller.InnerGlow"); 198 | url += GetSkillLevel("gd_Skills2_Lilith.Controller.DramaticEntrance"); 199 | url += GetSkillLevel("gd_Skills2_Lilith.Controller.HardToGet"); 200 | url += GetSkillLevel("gd_Skills2_Lilith.Controller.GirlPower"); 201 | url += GetSkillLevel("gd_Skills2_Lilith.Controller.MindGames"); 202 | 203 | url += GetSkillLevel("gd_Skills2_Lilith.Elemental.Quicksilver"); 204 | url += GetSkillLevel("gd_Skills2_Lilith.Elemental.Spark"); 205 | url += GetSkillLevel("gd_Skills2_Lilith.Elemental.Resilience"); 206 | url += GetSkillLevel("gd_Skills2_Lilith.Elemental.Radiance"); 207 | url += GetSkillLevel("gd_Skills2_Lilith.Elemental.Venom"); 208 | url += GetSkillLevel("gd_Skills2_Lilith.Elemental.Intuition"); 209 | url += GetSkillLevel("gd_Skills2_Lilith.Elemental.Phoenix"); 210 | 211 | url += GetSkillLevel("gd_Skills2_Lilith.Assassin.Slayer"); 212 | url += GetSkillLevel("gd_Skills2_Lilith.Assassin.SilentResolve"); 213 | url += GetSkillLevel("gd_Skills2_Lilith.Assassin.Enforcer"); 214 | url += GetSkillLevel("gd_Skills2_Lilith.Assassin.HitAndRun"); 215 | url += GetSkillLevel("gd_Skills2_Lilith.Assassin.HighVelocity"); 216 | url += GetSkillLevel("gd_Skills2_Lilith.Assassin.Blackout"); 217 | url += GetSkillLevel("gd_Skills2_Lilith.Assassin.PhaseStrike"); 218 | } 219 | else if (this._Save.PlayerData.Character == "gd_Brick.Character.CharacterClass_Brick") 220 | { 221 | url += "brick/#3"; 222 | 223 | url += GetSkillLevel("gd_Skills2_Brick.Action.A_Berserk"); 224 | 225 | url += GetSkillLevel("gd_Skills2_Brick.Brawler.IronFist"); 226 | url += GetSkillLevel("gd_Skills2_Brick.Brawler.EndlessRage"); 227 | url += GetSkillLevel("gd_Skills2_Brick.Brawler.StingLikeaBee"); 228 | url += GetSkillLevel("gd_Skills2_Brick.Brawler.HeavyHanded"); 229 | url += GetSkillLevel("gd_Skills2_Brick.Brawler.PrizeFighter"); 230 | url += GetSkillLevel("gd_Skills2_Brick.Brawler.ShortFuse"); 231 | url += GetSkillLevel("gd_Skills2_Brick.Brawler.BloodSport"); 232 | 233 | url += GetSkillLevel("gd_Skills2_Brick.Tank.Hardened"); 234 | url += GetSkillLevel("gd_Skills2_Brick.Tank.Safeguard"); 235 | url += GetSkillLevel("gd_Skills2_Brick.Tank.Bash"); 236 | url += GetSkillLevel("gd_Skills2_Brick.Tank.Juggernaut"); 237 | url += GetSkillLevel("gd_Skills2_Brick.Tank.PayBack"); 238 | url += GetSkillLevel("gd_Skills2_Brick.Tank.Diehard"); 239 | url += GetSkillLevel("gd_Skills2_Brick.Tank.Unbreakable"); 240 | 241 | url += GetSkillLevel("gd_Skills2_Brick.Tank.Endowed"); 242 | url += GetSkillLevel("gd_Skills2_Brick.Blaster.RapidReload"); 243 | url += GetSkillLevel("gd_Skills2_Brick.Blaster.Revenge"); 244 | url += GetSkillLevel("gd_Skills2_Brick.Blaster.WideLoad"); 245 | url += GetSkillLevel("gd_Skills2_Brick.Blaster.Liquidate"); 246 | url += GetSkillLevel("gd_Skills2_Brick.Blaster.CastIron"); 247 | url += GetSkillLevel("gd_Skills2_Brick.Blaster.MasterBlaster"); 248 | } 249 | 250 | return url; 251 | } 252 | 253 | private void OnSkillExportClipboard(object sender, EventArgs e) 254 | { 255 | Clipboard.SetText(this.GetSkillTreeUrl()); 256 | } 257 | 258 | private void OnSkillExportBrowser(object sender, EventArgs e) 259 | { 260 | Process.Start(this.GetSkillTreeUrl()); 261 | } 262 | } 263 | } 264 | -------------------------------------------------------------------------------- /projects/Gibbed.Borderlands.SaveEdit/Editor.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 | 121 | False 122 | 123 | 124 | False 125 | 126 | 127 | False 128 | 129 | 130 | False 131 | 132 | 133 | False 134 | 135 | 136 | False 137 | 138 | 139 | False 140 | 141 | 142 | False 143 | 144 | 145 | False 146 | 147 | 148 | False 149 | 150 | 151 | False 152 | 153 | 154 | False 155 | 156 | 157 | False 158 | 159 | 160 | 17, 17 161 | 162 | 163 | 145, 17 164 | 165 | 166 | 543, 56 167 | 168 | 169 | 685, 17 170 | 171 | 172 | 138, 56 173 | 174 | 175 | 864, 17 176 | 177 | 178 | 287, 56 179 | 180 | 181 | 1024, 17 182 | 183 | 184 | 529, 17 185 | 186 | 187 | 417, 56 188 | 189 | 190 | 267, 17 191 | 192 | 193 | 400, 17 194 | 195 | 196 | 111 197 | 198 | 199 | 200 | 201 | AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 202 | AADAgP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 203 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 204 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 205 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 206 | AAAAAAAAAAAAAAAAAAAAAAAA 207 | 208 | 209 | -------------------------------------------------------------------------------- /projects/Gibbed.Borderlands.SaveEdit/Gibbed.Borderlands.SaveEdit.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Debug 5 | AnyCPU 6 | 9.0.30729 7 | 2.0 8 | {3F77FC0A-0CFA-4533-AA7D-F55D5DD059D7} 9 | WinExe 10 | Properties 11 | Gibbed.Borderlands.SaveEdit 12 | Gibbed.Borderlands.SaveEdit 13 | v4.0 14 | 512 15 | Resources\Pink.ico 16 | 17 | 18 | true 19 | full 20 | false 21 | ..\..\bin\ 22 | DEBUG;TRACE 23 | prompt 24 | 4 25 | 26 | 27 | pdbonly 28 | true 29 | bin\Release\ 30 | TRACE 31 | prompt 32 | 4 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | Form 49 | 50 | 51 | Editor.cs 52 | 53 | 54 | 55 | 56 | 57 | 58 | Editor.cs 59 | 60 | 61 | ResXFileCodeGenerator 62 | Resources.Designer.cs 63 | Designer 64 | 65 | 66 | True 67 | Resources.resx 68 | True 69 | 70 | 71 | SettingsSingleFileGenerator 72 | Settings.Designer.cs 73 | 74 | 75 | True 76 | Settings.settings 77 | True 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | {E6FFE137-F5CF-4DFB-A59F-CCA65CF40BE8} 93 | Gibbed.Borderlands.FileFormats 94 | 95 | 96 | 97 | 104 | -------------------------------------------------------------------------------- /projects/Gibbed.Borderlands.SaveEdit/Helpers.cs: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2019 Rick (rick 'at' gibbed 'dot' us) 2 | * 3 | * This software is provided 'as-is', without any express or implied 4 | * warranty. In no event will the authors be held liable for any damages 5 | * arising from the use of this software. 6 | * 7 | * Permission is granted to anyone to use this software for any purpose, 8 | * including commercial applications, and to alter it and redistribute it 9 | * freely, subject to the following restrictions: 10 | * 11 | * 1. The origin of this software must not be misrepresented; you must not 12 | * claim that you wrote the original software. If you use this software 13 | * in a product, an acknowledgment in the product documentation would 14 | * be appreciated but is not required. 15 | * 16 | * 2. Altered source versions must be plainly marked as such, and must not 17 | * be misrepresented as being the original software. 18 | * 19 | * 3. This notice may not be removed or altered from any source 20 | * distribution. 21 | */ 22 | using System; 23 | using System.IO; 24 | 25 | namespace Gibbed.Borderlands.SaveEdit 26 | { 27 | internal static class Helpers 28 | { 29 | public static string GetSavePath() 30 | { 31 | string path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 32 | path = Path.Combine(path, "My Games"); 33 | path = Path.Combine(path, "Borderlands"); 34 | path = Path.Combine(path, "SaveData"); 35 | return path; 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /projects/Gibbed.Borderlands.SaveEdit/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2019 Rick (rick 'at' gibbed 'dot' us) 2 | 3 | This software is provided 'as-is', without any express or implied 4 | warranty. In no event will the authors be held liable for any damages 5 | arising from the use of this software. 6 | 7 | Permission is granted to anyone to use this software for any purpose, 8 | including commercial applications, and to alter it and redistribute it 9 | freely, subject to the following restrictions: 10 | 11 | 1. The origin of this software must not be misrepresented; you must not 12 | claim that you wrote the original software. If you use this software 13 | in a product, an acknowledgment in the product documentation would be 14 | appreciated but is not required. 15 | 16 | 2. Altered source versions must be plainly marked as such, and must not be 17 | misrepresented as being the original software. 18 | 19 | 3. This notice may not be removed or altered from any source 20 | distribution. -------------------------------------------------------------------------------- /projects/Gibbed.Borderlands.SaveEdit/PlayerClass.cs: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2019 Rick (rick 'at' gibbed 'dot' us) 2 | * 3 | * This software is provided 'as-is', without any express or implied 4 | * warranty. In no event will the authors be held liable for any damages 5 | * arising from the use of this software. 6 | * 7 | * Permission is granted to anyone to use this software for any purpose, 8 | * including commercial applications, and to alter it and redistribute it 9 | * freely, subject to the following restrictions: 10 | * 11 | * 1. The origin of this software must not be misrepresented; you must not 12 | * claim that you wrote the original software. If you use this software 13 | * in a product, an acknowledgment in the product documentation would 14 | * be appreciated but is not required. 15 | * 16 | * 2. Altered source versions must be plainly marked as such, and must not 17 | * be misrepresented as being the original software. 18 | * 19 | * 3. This notice may not be removed or altered from any source 20 | * distribution. 21 | */ 22 | namespace Gibbed.Borderlands.SaveEdit 23 | { 24 | internal class PlayerClass 25 | { 26 | public string Type { get; set; } 27 | public string Name { get; set; } 28 | 29 | public PlayerClass(string type, string name) 30 | { 31 | this.Type = type; 32 | this.Name = name; 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /projects/Gibbed.Borderlands.SaveEdit/Program.cs: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2019 Rick (rick 'at' gibbed 'dot' us) 2 | * 3 | * This software is provided 'as-is', without any express or implied 4 | * warranty. In no event will the authors be held liable for any damages 5 | * arising from the use of this software. 6 | * 7 | * Permission is granted to anyone to use this software for any purpose, 8 | * including commercial applications, and to alter it and redistribute it 9 | * freely, subject to the following restrictions: 10 | * 11 | * 1. The origin of this software must not be misrepresented; you must not 12 | * claim that you wrote the original software. If you use this software 13 | * in a product, an acknowledgment in the product documentation would 14 | * be appreciated but is not required. 15 | * 16 | * 2. Altered source versions must be plainly marked as such, and must not 17 | * be misrepresented as being the original software. 18 | * 19 | * 3. This notice may not be removed or altered from any source 20 | * distribution. 21 | */ 22 | using System; 23 | using System.Windows.Forms; 24 | 25 | namespace Gibbed.Borderlands.SaveEdit 26 | { 27 | internal static class Program 28 | { 29 | [STAThread] 30 | private static void Main() 31 | { 32 | Application.EnableVisualStyles(); 33 | Application.SetCompatibleTextRenderingDefault(false); 34 | Application.Run(new Editor()); 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /projects/Gibbed.Borderlands.SaveEdit/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2019 Rick (rick 'at' gibbed 'dot' us) 2 | * 3 | * This software is provided 'as-is', without any express or implied 4 | * warranty. In no event will the authors be held liable for any damages 5 | * arising from the use of this software. 6 | * 7 | * Permission is granted to anyone to use this software for any purpose, 8 | * including commercial applications, and to alter it and redistribute it 9 | * freely, subject to the following restrictions: 10 | * 11 | * 1. The origin of this software must not be misrepresented; you must not 12 | * claim that you wrote the original software. If you use this software 13 | * in a product, an acknowledgment in the product documentation would 14 | * be appreciated but is not required. 15 | * 16 | * 2. Altered source versions must be plainly marked as such, and must not 17 | * be misrepresented as being the original software. 18 | * 19 | * 3. This notice may not be removed or altered from any source 20 | * distribution. 21 | */ 22 | using System.Reflection; 23 | using System.Runtime.InteropServices; 24 | 25 | // General Information about an assembly is controlled through the following 26 | // set of attributes. Change these attribute values to modify the information 27 | // associated with an assembly. 28 | 29 | [assembly: AssemblyTitle("Borderlands Save Editor")] 30 | [assembly: AssemblyDescription("http://gib.me/")] 31 | [assembly: AssemblyConfiguration("")] 32 | [assembly: AssemblyCompany("Gibbed")] 33 | [assembly: AssemblyProduct("Gibbed.Borderlands.SaveEdit")] 34 | [assembly: AssemblyCopyright("Copyright © Gibbed 2009")] 35 | [assembly: AssemblyTrademark("")] 36 | [assembly: AssemblyCulture("")] 37 | 38 | // Setting ComVisible to false makes the types in this assembly not visible 39 | // to COM components. If you need to access a type in this assembly from 40 | // COM, set the ComVisible attribute to true on that type. 41 | 42 | [assembly: ComVisible(false)] 43 | 44 | // The following GUID is for the ID of the typelib if this project is exposed to COM 45 | 46 | [assembly: Guid("0c457fc5-f934-44ff-8cc3-e75eed962427")] 47 | 48 | // Version information for an assembly consists of the following four values: 49 | // 50 | // Major Version 51 | // Minor Version 52 | // Build Number 53 | // Revision 54 | // 55 | // You can specify all the values or you can default the Build and Revision Numbers 56 | // by using the '*' as shown below: 57 | // [assembly: AssemblyVersion("1.0.*")] 58 | 59 | [assembly: AssemblyVersion("1.0.0.10")] 60 | [assembly: AssemblyFileVersion("1.0.0.10")] 61 | -------------------------------------------------------------------------------- /projects/Gibbed.Borderlands.SaveEdit/Properties/DataSources/Gibbed.Borderlands.FileFormats.SaveFile.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | 10 | 11 | Gibbed.Borderlands.FileFormats.Save.Player, Gibbed.Borderlands.FileFormats, Version=1.0.0.10, Culture=neutral, PublicKeyToken=null 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 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 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | Gibbed.Borderlands.FileFormats.SaveFile, Gibbed.Borderlands.FileFormats, Version=1.0.0.10, Culture=neutral, PublicKeyToken=null 75 | -------------------------------------------------------------------------------- /projects/Gibbed.Borderlands.SaveEdit/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 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 Gibbed.Borderlands.SaveEdit.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("Gibbed.Borderlands.SaveEdit.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 | /// Looks up a localized resource of type System.Drawing.Bitmap. 65 | /// 66 | internal static System.Drawing.Bitmap Duplicate { 67 | get { 68 | object obj = ResourceManager.GetObject("Duplicate", resourceCulture); 69 | return ((System.Drawing.Bitmap)(obj)); 70 | } 71 | } 72 | 73 | /// 74 | /// Looks up a localized resource of type System.Drawing.Bitmap. 75 | /// 76 | internal static System.Drawing.Bitmap ExportBrowser { 77 | get { 78 | object obj = ResourceManager.GetObject("ExportBrowser", resourceCulture); 79 | return ((System.Drawing.Bitmap)(obj)); 80 | } 81 | } 82 | 83 | /// 84 | /// Looks up a localized resource of type System.Drawing.Bitmap. 85 | /// 86 | internal static System.Drawing.Bitmap ExportClipboard { 87 | get { 88 | object obj = ResourceManager.GetObject("ExportClipboard", resourceCulture); 89 | return ((System.Drawing.Bitmap)(obj)); 90 | } 91 | } 92 | 93 | /// 94 | /// Looks up a localized resource of type System.Drawing.Bitmap. 95 | /// 96 | internal static System.Drawing.Bitmap New { 97 | get { 98 | object obj = ResourceManager.GetObject("New", resourceCulture); 99 | return ((System.Drawing.Bitmap)(obj)); 100 | } 101 | } 102 | 103 | /// 104 | /// Looks up a localized resource of type System.Drawing.Bitmap. 105 | /// 106 | internal static System.Drawing.Bitmap Open { 107 | get { 108 | object obj = ResourceManager.GetObject("Open", resourceCulture); 109 | return ((System.Drawing.Bitmap)(obj)); 110 | } 111 | } 112 | 113 | /// 114 | /// Looks up a localized resource of type System.Drawing.Bitmap. 115 | /// 116 | internal static System.Drawing.Bitmap Save { 117 | get { 118 | object obj = ResourceManager.GetObject("Save", resourceCulture); 119 | return ((System.Drawing.Bitmap)(obj)); 120 | } 121 | } 122 | } 123 | } 124 | -------------------------------------------------------------------------------- /projects/Gibbed.Borderlands.SaveEdit/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 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | ..\Resources\Open.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 123 | 124 | 125 | ..\Resources\New.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 126 | 127 | 128 | ..\Resources\Duplicate.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 129 | 130 | 131 | ..\Resources\Save.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 132 | 133 | 134 | ..\Resources\ExportClipboard.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 135 | 136 | 137 | ..\Resources\ExportBrowser.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 138 | 139 | -------------------------------------------------------------------------------- /projects/Gibbed.Borderlands.SaveEdit/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 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 Gibbed.Borderlands.SaveEdit.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.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 | -------------------------------------------------------------------------------- /projects/Gibbed.Borderlands.SaveEdit/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /projects/Gibbed.Borderlands.SaveEdit/Resources/Duplicate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gibbed/Gibbed.Borderlands/b7f7450fb9e8b4cec165c97f7d67f56a585685cf/projects/Gibbed.Borderlands.SaveEdit/Resources/Duplicate.png -------------------------------------------------------------------------------- /projects/Gibbed.Borderlands.SaveEdit/Resources/ExportBrowser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gibbed/Gibbed.Borderlands/b7f7450fb9e8b4cec165c97f7d67f56a585685cf/projects/Gibbed.Borderlands.SaveEdit/Resources/ExportBrowser.png -------------------------------------------------------------------------------- /projects/Gibbed.Borderlands.SaveEdit/Resources/ExportClipboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gibbed/Gibbed.Borderlands/b7f7450fb9e8b4cec165c97f7d67f56a585685cf/projects/Gibbed.Borderlands.SaveEdit/Resources/ExportClipboard.png -------------------------------------------------------------------------------- /projects/Gibbed.Borderlands.SaveEdit/Resources/New.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gibbed/Gibbed.Borderlands/b7f7450fb9e8b4cec165c97f7d67f56a585685cf/projects/Gibbed.Borderlands.SaveEdit/Resources/New.png -------------------------------------------------------------------------------- /projects/Gibbed.Borderlands.SaveEdit/Resources/Open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gibbed/Gibbed.Borderlands/b7f7450fb9e8b4cec165c97f7d67f56a585685cf/projects/Gibbed.Borderlands.SaveEdit/Resources/Open.png -------------------------------------------------------------------------------- /projects/Gibbed.Borderlands.SaveEdit/Resources/Pink.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gibbed/Gibbed.Borderlands/b7f7450fb9e8b4cec165c97f7d67f56a585685cf/projects/Gibbed.Borderlands.SaveEdit/Resources/Pink.ico -------------------------------------------------------------------------------- /projects/Gibbed.Borderlands.SaveEdit/Resources/Save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gibbed/Gibbed.Borderlands/b7f7450fb9e8b4cec165c97f7d67f56a585685cf/projects/Gibbed.Borderlands.SaveEdit/Resources/Save.png --------------------------------------------------------------------------------