├── .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
--------------------------------------------------------------------------------