Skip to content

Commit 533079b

Browse files
fix: Consistent naming with internal name
1 parent 385ee65 commit 533079b

9 files changed

Lines changed: 27 additions & 27 deletions

File tree

CLAUDE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ The library uses `saveVersion` to distinguish formats:
7373
- **Version 97+**: D2R format (Huffman-encoded item codes, 8-bit strings, compact 3-bit item format, 4-field realm data)
7474
- **Version 100+**: Advanced stash category data, chronicle data (item find tracking)
7575
- **Version 103+**: DemonSection ("lf" magic) after IronGolem
76-
- **Version 104+**: New header format (403 bytes), Name moved from Character to PreviewData, expanded SaveTimes/Experiences arrays, GameMode field
76+
- **Version 104+**: New header format (403 bytes), Name moved from Character to PreviewData, expanded SaveTimes/Experiences arrays, GameVersion field
7777
- **Version 105+**: Item quantity uses 1-bit presence flag for ALL items (not just stackable)
7878

7979
### Shared Stash Tab Format

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ if (version >= 104)
131131
// Name always lives in Preview for v104+
132132
Console.WriteLine($"Name: {overlay.Name}");
133133
Console.WriteLine($"Level: {overlay.Character.Level}");
134-
Console.WriteLine($"GameMode: {overlay.Character.Preview.GameMode}");
134+
Console.WriteLine($"GameVersion: {overlay.Character.Preview.GameVersion}");
135135

136136
// v104+ exposes 6 save time slots and 6 experience slots
137137
Console.WriteLine($"SaveTimes[0]: {overlay.Character.Preview.SaveTimes[0]}");
@@ -179,7 +179,7 @@ The overlay API only covers the fixed-size header sections (765 bytes for v<=103
179179
|---------|-----------------|
180180
| Header | Version, FileSize, Checksum |
181181
| Character | Name, Level, Class, Flags, MercData, Hotkeys, Appearance |
182-
| Preview | PreviewItems, SaveTimes, Experiences, GameMode (v104+) |
182+
| Preview | PreviewItems, SaveTimes, Experiences, GameVersion (v104+) |
183183
| Quests | All quest flags for all difficulties |
184184
| Waypoints | All waypoint flags for all difficulties |
185185
| PlayerIntro | NPC/Quest intro flags |
@@ -195,7 +195,7 @@ The overlay API only covers the fixed-size header sections (765 bytes for v<=103
195195
| 98-99 | D2R 2.8 | Huffman-encoded item codes, 8-bit strings |
196196
| 100-102 | D2R 3.0 | Advanced stash tab types, chronicle data, item find tracking |
197197
| 103 | D2R 3.0 | DemonSection ("lf" magic) for summoned creature persistence |
198-
| 104 | D2R 3.0 | New header layout (833 bytes), Name moved to PreviewData, GameMode field |
198+
| 104 | D2R 3.0 | New header layout (833 bytes), Name moved to PreviewData, GameVersion field |
199199
| 105 | D2R 3.0 | Item quantity uses 1-bit presence flag for all items |
200200

201201
## Version Conversion
@@ -240,7 +240,7 @@ The library handles the following format differences automatically:
240240
| Field | Conversion |
241241
|-------|------------|
242242
| `Character.Name` | Removed in v104+; name is only in `Character.Preview.Name` |
243-
| `PreviewData` | Expands from 144 to 228 bytes: `SaveTimes[6]`, `Experiences[6]`, `GameMode` |
243+
| `PreviewData` | Expands from 144 to 228 bytes: `SaveTimes[6]`, `Experiences[6]`, `GameVersion` |
244244
| `DemonSection` | Added in v103+; initialized empty when upgrading from earlier versions |
245245

246246
#### v<=104 ↔ v105+ (Item Format)

src/D2SSharp.Tests/IntegrationTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,7 @@ public void V105_DemonSection_ChaosSC()
407407
var data = File.ReadAllBytes(Path.Combine("Resources", "105", "ChaosSC.d2s"));
408408
var save = D2Save.Read(data);
409409

410-
Assert.Equal(Enums.GameMode.ReignOfTheWarlock, save.Character.Preview.GameMode);
410+
Assert.Equal(Enums.GameVersion.ReignOfTheWarlock, save.Character.Preview.GameVersion);
411411
Assert.Equal(Enums.CharacterClass.Warlock, save.Character.Class);
412412
Assert.NotNull(save.Demon);
413413
Assert.True(save.Demon.HasDemon);

src/D2SSharp.Tests/OverlayTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ public void Overlay_V104_MatchesParsedModel(string resourcePath)
285285
// Preview data - v104+ specific fields
286286
Assert.Equal(parsed.Character.Preview.Unk1, overlay.Character.Preview.Unk1);
287287
Assert.Equal((byte)parsed.Character.Preview.GuildEmblemColor, overlay.Character.Preview.GuildEmblemColor);
288-
Assert.Equal(parsed.Character.Preview.GameMode, overlay.Character.Preview.GameMode);
288+
Assert.Equal(parsed.Character.Preview.GameVersion, overlay.Character.Preview.GameVersion);
289289
Assert.Equal(parsed.Character.Preview.PreviewPadding, overlay.Character.Preview.PreviewPadding);
290290

291291
// Save times (6 slots)
@@ -390,8 +390,8 @@ public void Overlay_V104_NewFields(string resourcePath)
390390
var parsed = D2Save.Read(data);
391391
ref var overlay = ref D2SaveLayoutV104.From(data);
392392

393-
// GameMode
394-
Assert.Equal(parsed.Character.Preview.GameMode, overlay.Character.Preview.GameMode);
393+
// GameVersion
394+
Assert.Equal(parsed.Character.Preview.GameVersion, overlay.Character.Preview.GameVersion);
395395

396396
// SaveTimes[6]
397397
for (int i = 0; i < 6; i++)
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
namespace D2SSharp.Enums;
22

33
/// <summary>
4-
/// Game mode for D2R version 104+ saves.
4+
/// Game version for D2R version 104+ saves.
55
/// </summary>
6-
public enum GameMode : byte
6+
public enum GameVersion : byte
77
{
88
None = 0,
99
Classic = 1,

src/D2SSharp/Enums/StashTabType.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ namespace D2SSharp.Enums;
22

33
/// <summary>
44
/// Stash tab type (StashFormat >= 2).
5-
/// Determines what the tab body contains and which game mode can access it.
5+
/// Determines what the tab body contains and which game version can access it.
66
/// </summary>
77
public enum StashTabType : byte
88
{

src/D2SSharp/Model/D2Save.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ public static D2Save Read(ReadOnlySpan<byte> data, IExternalData externalData)
110110
save.IronGolem = IronGolemSection.Read(ref reader, externalData, save.Version);
111111

112112
// Try to read demon section (v>=103, optional)
113-
if (save.Character.Preview.GameMode == GameMode.ReignOfTheWarlock)
113+
if (save.Character.Preview.GameVersion == GameVersion.ReignOfTheWarlock)
114114
save.Demon = DemonSection.TryRead(ref reader, externalData, save.Version);
115115
}
116116

@@ -177,7 +177,7 @@ public int Write(Span<byte> buffer, IExternalData externalData, uint? targetVers
177177
(IronGolem ?? new IronGolemSection()).Write(ref writer, externalData, Version);
178178

179179
// Write demon section if present
180-
if (Character.Preview.GameMode == GameMode.ReignOfTheWarlock)
180+
if (Character.Preview.GameVersion == GameVersion.ReignOfTheWarlock)
181181
Demon?.Write(ref writer, externalData, Version);
182182
}
183183

@@ -240,7 +240,7 @@ public int EstimateSize()
240240
}
241241

242242
// Demon section
243-
if (Character.Preview.GameMode == GameMode.ReignOfTheWarlock && Demon != null)
243+
if (Character.Preview.GameVersion == GameVersion.ReignOfTheWarlock && Demon != null)
244244
{
245245
size += 6; // header
246246
if (Demon.DemonData != null)
@@ -383,8 +383,8 @@ private void Convert103To104()
383383
// GuildEmblemColor: keep low byte (uint -> byte)
384384
Character.Preview.GuildEmblemColor = Character.Preview.GuildEmblemColor & 0xFF;
385385

386-
// GameMode: derive from CharacterFlags
387-
Character.Preview.GameMode = Character.Flags.HasFlag(CharacterFlags.Expansion) ? GameMode.Expansion : GameMode.Classic;
386+
// GameVersion: derive from CharacterFlags
387+
Character.Preview.GameVersion = Character.Flags.HasFlag(CharacterFlags.Expansion) ? GameVersion.Expansion : GameVersion.Classic;
388388

389389
// SaveTimes/Experiences: slots 0-1 already populated, 2-5 remain zero (default)
390390
}

src/D2SSharp/Model/D2SaveOverlay.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ public bool IsLadder
232232

233233
/// <summary>
234234
/// Preview data layout for v>=104 saves (228 bytes within Character section).
235-
/// v104+ expands to 6 save times, 6 experiences, GameMode byte, and 96-byte name.
235+
/// v104+ expands to 6 save times, 6 experiences, GameVersion byte, and 96-byte name.
236236
/// </summary>
237237
[StructLayout(LayoutKind.Explicit, Size = Size)]
238238
public unsafe struct PreviewDataLayoutV104
@@ -242,7 +242,7 @@ public unsafe struct PreviewDataLayoutV104
242242
[FieldOffset(0x00)] private fixed ulong _saveTimes[6];
243243
[FieldOffset(0x30)] private fixed uint _experiences[6];
244244
[FieldOffset(0x48)] public byte GuildEmblemColor;
245-
[FieldOffset(0x49)] public GameMode GameMode;
245+
[FieldOffset(0x49)] public GameVersion GameVersion;
246246
[FieldOffset(0x4A)] public ushort PreviewPadding;
247247
[FieldOffset(0x4C)] public PreviewItemLayout LeftHand;
248248
[FieldOffset(0x58)] public PreviewItemLayout RightHand;

src/D2SSharp/Model/PreviewData.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ namespace D2SSharp.Model;
1212
/// Two layouts exist:
1313
/// v&lt;=103 (144 bytes): ExpansionSaveTime(8) ClassicSaveTime(8) GuildEmblemColor(4)
1414
/// ExpansionExperience(4) ClassicExperience(4) PreviewItems×4(48) Name(60) Unk1(8)
15-
/// v>=104 (228 bytes): SaveTimes×6(48) Experiences×6(24) GuildEmblemColor(1) GameMode(1)
15+
/// v>=104 (228 bytes): SaveTimes×6(48) Experiences×6(24) GuildEmblemColor(1) GameVersion(1)
1616
/// Padding(2) PreviewItems×4(48) Name(96) Unk1(8)
1717
/// </remarks>
1818
public partial class PreviewData
@@ -26,10 +26,10 @@ public partial class PreviewData
2626
/// <summary>Guild emblem background color index.</summary>
2727
public uint GuildEmblemColor { get; set; }
2828

29-
/// <summary>Game mode (v>=104 only, serialized as byte).</summary>
30-
public GameMode GameMode { get; set; }
29+
/// <summary>Game version (v>=104 only, serialized as byte).</summary>
30+
public GameVersion GameVersion { get; set; }
3131

32-
/// <summary>Padding bytes after GameMode (v>=104 only).</summary>
32+
/// <summary>Padding bytes after GameVersion (v>=104 only).</summary>
3333
public ushort PreviewPadding { get; set; }
3434

3535
/// <summary>Preview data for the item equipped in the left hand slot.</summary>
@@ -96,9 +96,9 @@ public static PreviewData Read(ref BitReader reader, uint saveVersion)
9696
for (int i = 0; i < 6; i++)
9797
data.Experiences[i] = reader.ReadUInt32();
9898

99-
// GuildEmblemColor as byte, GameMode as byte, Padding as ushort
99+
// GuildEmblemColor as byte, GameVersion as byte, Padding as ushort
100100
data.GuildEmblemColor = reader.ReadByte();
101-
data.GameMode = (GameMode)reader.ReadByte();
101+
data.GameVersion = (GameVersion)reader.ReadByte();
102102
data.PreviewPadding = reader.ReadUInt16();
103103
}
104104
else
@@ -136,9 +136,9 @@ public void Write(ref BitWriter writer, uint saveVersion)
136136
for (int i = 0; i < 6; i++)
137137
writer.WriteUInt32(Experiences[i]);
138138

139-
// GuildEmblemColor as byte, GameMode as byte, Padding as ushort
139+
// GuildEmblemColor as byte, GameVersion as byte, Padding as ushort
140140
writer.WriteByte((byte)GuildEmblemColor);
141-
writer.WriteByte((byte)GameMode);
141+
writer.WriteByte((byte)GameVersion);
142142
writer.WriteUInt16(PreviewPadding);
143143
}
144144
else

0 commit comments

Comments
 (0)