diff --git a/CLAUDE.md b/CLAUDE.md index bdc5f27..d45e0c6 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co ## Project Overview -D2SSharp is a C# library for reading and writing Diablo 2 save files (.d2s character saves and .d2i shared stash files). It supports both the original D2 LOD format (version 96) and the Diablo 2 Resurrected format (version 97+). +D2SSharp is a C# library for reading and writing Diablo 2 save files (.d2s character saves and .d2i shared stash files). It supports the original D2 LOD format (version 96), Diablo 2 Resurrected format (version 97+), and the latest D2R format (version 105) with its restructured header and new item serialization. ## Build Commands @@ -26,9 +26,9 @@ dotnet test --logger "console;verbosity=detailed" ### Core Components -- **D2Save** (`Model/D2Save.cs`): Root model for character save files. Contains all sections: Character, Quests, Waypoints, Skills, Items, Corpses, MercItems, IronGolem. +- **D2Save** (`Model/D2Save.cs`): Root model for character save files. Contains all sections: Character, Quests, Waypoints, Skills, Items, Corpses, MercItems, IronGolem, Demon (v103+). -- **D2StashSave** (`Model/D2StashSave.cs`): Model for shared stash files. Contains a list of D2StashTab entries. +- **D2StashSave** (`Model/D2StashSave.cs`): Model for shared stash files. Contains a list of D2StashTab entries. Each tab has a `StashTabType` (Normal, AdvancedStash, Chronicle) that determines its body content. Chronicle tabs track found set/unique/runeword items. - **Item** (`Model/Item.cs`): Complete item model with all properties. Handles both compact save format (quest items, gold, gems, runes) and complete format (equipment with stats). @@ -39,7 +39,7 @@ dotnet test --logger "console;verbosity=detailed" The library uses embedded game data tables to parse items. For standard saves, no explicit external data is needed: ```csharp -// Read/write using built-in embedded data (versions 96, 97, 99) +// Read/write using built-in embedded data (versions 96, 97, 99, 105) var save = D2Save.Read(bytes); int written = save.Write(buffer); ``` @@ -58,7 +58,7 @@ var save = D2Save.Read(bytes, modData); int written = save.Write(buffer, modData); ``` -- **TxtFileExternalData.Default**: Shared default instance with embedded data for versions 96, 97, 99 +- **TxtFileExternalData.Default**: Shared default instance with embedded data for versions 96, 97, 99, 105 - **IExternalData** (`Data/IExternalData.cs`): Interface for providing stat and item type information The external data provides: @@ -71,6 +71,22 @@ The external data provides: The library uses `saveVersion` to distinguish formats: - **Version 96**: Original D2 LOD format (32-bit item codes, 7-bit strings, 10-bit item format) - **Version 97+**: D2R format (Huffman-encoded item codes, 8-bit strings, compact 3-bit item format, 4-field realm data) +- **Version 100+**: Advanced stash category data, chronicle data (item find tracking) +- **Version 103+**: DemonSection ("lf" magic) after IronGolem +- **Version 104+**: New header format (403 bytes), Name moved from Character to PreviewData, expanded SaveTimes/Experiences arrays, GameMode field +- **Version 105+**: Item quantity uses 1-bit presence flag for ALL items (not just stackable) + +### Shared Stash Tab Format + +Each stash tab has a 64-byte header: Magic(4) + StashFormat(4) + ItemFormat(4) + Gold(4) + Size(2) + Season(2) + TabType(1) + Reserved(43). + +- **StashFormat < 2**: TabType is forced to Normal on read (game ignores the byte). Chronicle tabs are skipped entirely on write. +- **StashFormat >= 2**: TabType determines the tab body content: + - `Normal` (0): Items (JM section) + - `AdvancedStash` (1): Items with stackable support (JM section) + - `Chronicle` (2): Chronicle section (magic 0xC0EAEDC0) tracking found set/unique/runeword items + +The chronicle tab writer in the game has a size calculation bug (`add ax, 40h` at 0x140311e98) that adds 64 bytes of stale buffer data to the tab size. The reader ignores these bytes. The library preserves them in `ChronicleSection.TrailingData` for byte-exact round-trip. ### Item Serialization @@ -90,7 +106,7 @@ When writing: `raw_value = (semantic_value >> ValShift) + SaveAdd` ## Version Conversion -The library supports converting between 1.14 (version 96) and D2R (version 97+) formats via `D2Save.Write(buffer, targetVersion)`. +The library supports converting between formats via `D2Save.Write(buffer, targetVersion)`. Handles three boundaries: v96↔v97+ (1.14↔D2R), v<=103↔v104+ (old↔new header), and v<=104↔v105+ (item quantity format). Key conversion logic in `D2Save.PrepareForVersion()`: @@ -111,7 +127,7 @@ Key conversion logic in `D2Save.PrepareForVersion()`: ## Mod Compatibility -- **TrailingData**: `D2Save.TrailingData` captures any bytes after the IronGolem section. These are preserved during round-trip for mod compatibility. +- **TrailingData**: `D2Save.TrailingData` captures any bytes after the last known section (IronGolem or Demon). These are preserved during round-trip for mod compatibility. - **TxtFileExternalData**: Load mod-specific .txt files for custom items/stats by providing a directory with version subdirectories. - Files with missing sections (e.g., Expansion flag set but no MercItems/IronGolem) will fail to parse. @@ -132,10 +148,43 @@ Each section defines a `Magic` constant used for validation. Useful for debuggin | MercItemsSection | "jf" (0x666A) | `6A 66` | | IronGolemSection | "kf" (0x666B) | `6B 66` | | Item (v96 only) | "JM" (0x4D4A) | `4A 4D` | +| DemonSection (v103+) | "lf" (0x666C) | `6C 66` | +| D2StashTab header | 0xAA55AA55 | `55 AA 55 AA` | +| ChronicleSection | 0xC0EAEDC0 | `C0 ED EA C0` | + +## Overlay API + +The overlay API (`D2SaveOverlay.cs`) provides zero-copy, blittable struct access to the fixed-size header sections of save files via `MemoryMarshal.AsRef`. This allows direct read/write of header fields without parsing the full save. + +Two layout structs exist for different save versions: + +- **`D2SaveLayout`** (765 bytes): For v<=103 saves. Character section includes 16-byte Name field and 144-byte PreviewData. +- **`D2SaveLayoutV104`** (833 bytes): For v>=104 saves. Character section removes Name (now in PreviewData) and expands PreviewData to 228 bytes (+68 bytes total). + +```csharp +var data = File.ReadAllBytes("save.d2s"); + +// Check version first, then use the appropriate layout +uint version = BitConverter.ToUInt32(data, 4); +if (version >= 104) +{ + ref var overlay = ref D2SaveLayoutV104.From(data); + overlay.Character.Level = 99; + D2SaveLayoutV104.UpdateChecksum(data); +} +else +{ + ref var overlay = ref D2SaveLayout.From(data); + overlay.Character.Level = 99; + D2SaveLayout.UpdateChecksum(data); +} +``` + +Both layouts provide a `Name` property that handles version-aware name access, `From()` for validation, and `UpdateChecksum()` for recalculating the checksum after modifications. Using the wrong layout for a version throws `InvalidDataException`. ## Testing -All tests use `TxtFileExternalData.Default` which provides embedded stat/item info for versions 96, 97, and 99. For modded saves, use a custom `TxtFileExternalData` instance loaded from mod-specific .txt files. +All tests use `TxtFileExternalData.Default` which provides embedded stat/item info for versions 96, 97, 99, and 105. For modded saves, use a custom `TxtFileExternalData` instance loaded from mod-specific .txt files. Round-trip tests verify that read -> write produces identical bytes. @@ -145,6 +194,7 @@ Resources are organized by save version: - `Resources/96/` - D2 1.14 format saves (version 96) - `Resources/97/` - D2R format saves (version 97) - `Resources/99/` - D2R 1.5+ format saves (version 99) +- `Resources/105/` - D2R latest format saves (version 105) with new header and item format - `Resources/Modded/` - Modded saves with custom .txt files in `Txt/99/` ### Running Specific Test Groups diff --git a/README.md b/README.md index 3b6a4c6..5af706d 100644 --- a/README.md +++ b/README.md @@ -8,11 +8,13 @@ A C# library for reading and writing Diablo 2 save files (.d2s character saves a ## Features - Full read/write support for character save files (.d2s) and shared stash (.d2i) -- Supports D2 LOD (version 96) and D2R (version 97+) formats -- Version conversion between D2 LOD and D2R formats +- Supports D2 LOD (version 96) and D2R (version 97-105) formats +- Version conversion across all format boundaries (v96↔v97+, v<=103↔v104+, v<=104↔v105+) - Complete item parsing including stats, sockets, runewords, and set bonuses +- Shared stash tab types: Normal, AdvancedStash (stackable items), and Chronicle (item find tracking) +- DemonSection support (v103+) for summoned creature persistence - Full round-tripping support - produces identical outputs, as verified by tests -- Separate [zero-copy overlay API](#overlay-api-zero-copy-access) for modifying header fields (name, level, flags, waypoints) without parsing the full save +- Separate [zero-copy overlay API](#overlay-api-zero-copy-access) for modifying header fields (name, level, flags, waypoints) without parsing the full save - External .txt file support for modded game data - Zero external dependencies beyond .NET @@ -91,36 +93,67 @@ D2StashSave stash = D2StashSave.Read(stashBytes); foreach (var tab in stash) { - Console.WriteLine($"Tab: {tab.Name}, Items: {tab.Items.Count}"); + Console.WriteLine($"Tab type: {tab.TabType}, Gold: {tab.Gold}"); + + if (tab.TabType == StashTabType.Chronicle) + { + // Chronicle tabs track found set/unique/runeword items + Console.WriteLine($" Chronicle entries: {tab.Chronicle!.SetEntries.Count}"); + } + else + { + // Normal and AdvancedStash tabs contain items + Console.WriteLine($" Items: {tab.Items.Count}"); + } } ``` ## Overlay API (Zero-Copy Access) -For simple modifications to the fixed-size header sections, the overlay API provides direct memory access without parsing the entire save file. +For simple modifications to the fixed-size header sections, the overlay API provides direct memory access without parsing the entire save file. Two layout structs exist because v104+ saves have a different header layout: + +- **`D2SaveLayout`** (765 bytes) — for saves with version <= 103 +- **`D2SaveLayoutV104`** (833 bytes) — for saves with version >= 104 + +Using the wrong layout for a version throws `InvalidDataException`. ```csharp using D2SSharp.Model; byte[] data = File.ReadAllBytes("MyCharacter.d2s"); -// Get a reference directly into the byte array -ref var overlay = ref D2SaveLayout.From(data); +// Check version to pick the right layout +uint version = BitConverter.ToUInt32(data, 4); +if (version >= 104) +{ + ref var overlay = ref D2SaveLayoutV104.From(data); + + // Name always lives in Preview for v104+ + Console.WriteLine($"Name: {overlay.Name}"); + Console.WriteLine($"Level: {overlay.Character.Level}"); + Console.WriteLine($"GameMode: {overlay.Character.Preview.GameMode}"); -// Read fields directly (Name is on D2SaveLayout, handles version differences) -Console.WriteLine($"Name: {overlay.Name}"); -Console.WriteLine($"Level: {overlay.Character.Level}"); -Console.WriteLine($"Class: {overlay.Character.Class}"); + // v104+ exposes 6 save time slots and 6 experience slots + Console.WriteLine($"SaveTimes[0]: {overlay.Character.Preview.SaveTimes[0]}"); + Console.WriteLine($"Experiences[0]: {overlay.Character.Preview.Experiences[0]}"); -// Modify character -overlay.Name = "NewName"; -overlay.Character.MercData.Experience = 1000000; + overlay.Name = "NewName"; + overlay.Waypoints.UnlockAllWaypoints(); + D2SaveLayoutV104.UpdateChecksum(data); +} +else +{ + ref var overlay = ref D2SaveLayout.From(data); -// Unlock all waypoints -overlay.Waypoints.UnlockAllWaypoints(); + // Name is version-aware (Character.Name for v96, Preview.Name for v97+) + Console.WriteLine($"Name: {overlay.Name}"); + Console.WriteLine($"Level: {overlay.Character.Level}"); + + overlay.Name = "NewName"; + overlay.Waypoints.UnlockAllWaypoints(); + D2SaveLayout.UpdateChecksum(data); +} -// Update checksum and save -D2SaveLayout.UpdateChecksum(data); File.WriteAllBytes("MyCharacter.d2s", data); ``` @@ -140,12 +173,13 @@ The overlay API is **~5700x faster** for reading character name and **~87x faste ### Overlay Limitations -The overlay API only covers the fixed-size header sections (first 765 bytes): +The overlay API only covers the fixed-size header sections (765 bytes for v<=103, 833 bytes for v>=104): | Section | Supported Fields | |---------|-----------------| | Header | Version, FileSize, Checksum | | Character | Name, Level, Class, Flags, MercData, Hotkeys, Appearance | +| Preview | PreviewItems, SaveTimes, Experiences, GameMode (v104+) | | Quests | All quest flags for all difficulties | | Waypoints | All waypoint flags for all difficulties | | PlayerIntro | NPC/Quest intro flags | @@ -158,19 +192,23 @@ The overlay API only covers the fixed-size header sections (first 765 bytes): |---------|------|-------| | 96 | D2 LOD 1.10+ | 32-bit item codes, 7-bit strings | | 97 | D2 Resurrected | Huffman-encoded item codes, 7-bit strings | -| 98+ | D2 Resurrected | Huffman-encoded item codes, 8-bit strings | +| 98-99 | D2 Resurrected | Huffman-encoded item codes, 8-bit strings | +| 100-102 | D2R 2.x | Advanced stash tab types, chronicle data, item find tracking | +| 103 | D2R 2.x | DemonSection ("lf" magic) for summoned creature persistence | +| 104 | D2R 2.x | New header layout (833 bytes), Name moved to PreviewData, GameMode field | +| 105 | D2R 2.x | Item quantity uses 1-bit presence flag for all items | ## Version Conversion -The library supports converting saves between D2 LOD (1.14) and D2R formats by specifying a target version when writing: +The library supports converting saves between formats by specifying a target version when writing. Conversion is handled across three boundaries: v96↔v97+ (1.14↔D2R), v<=103↔v104+ (old↔new header), and v<=104↔v105+ (item quantity format). ```csharp // Read a 1.14 save (version 96) var save = D2Save.Read(File.ReadAllBytes("old_character.d2s")); -// Write as D2R format (version 99) +// Write as latest D2R format (version 105) byte[] buffer = new byte[save.EstimateSize()]; -int written = save.Write(buffer, targetVersion: 99); +int written = save.Write(buffer, targetVersion: 105); File.WriteAllBytes("new_character.d2s", buffer.AsSpan(0, written).ToArray()); ``` @@ -197,6 +235,20 @@ The library handles the following format differences automatically: | `Character.Preview.*` | Zeroed (1.14 doesn't use preview items) | | `Item.Position.BodyLocation` | Kept as `None` for stored items (D2R doesn't preserve original equip slot) | +#### v<=103 ↔ v104+ (Header Layout) + +| Field | Conversion | +|-------|------------| +| `Character.Name` | Removed in v104+; name is only in `Character.Preview.Name` | +| `PreviewData` | Expands from 144 to 228 bytes: `SaveTimes[6]`, `Experiences[6]`, `GameMode` | +| `DemonSection` | Added in v103+; initialized empty when upgrading from earlier versions | + +#### v<=104 ↔ v105+ (Item Format) + +| Field | Conversion | +|-------|------------| +| `Item.Quantity` | v105+ uses a 1-bit presence flag for all items, not just stackable | + #### Binary Differences When comparing converted saves to saves created by the game: @@ -210,7 +262,7 @@ These differences do not affect gameplay - the converted saves are fully functio ## External Data -The library includes embedded game data tables for versions 96, 97, and 99, which are used automatically. For modded games with custom items/stats, you can provide your own txt files: +The library includes embedded game data tables for versions 96, 97, 99, and 105, which are used automatically. For modded games with custom items/stats, you can provide your own txt files: ```csharp using D2SSharp.Data; diff --git a/src/D2SSharp.Tests/ConversionBinaryTests.cs b/src/D2SSharp.Tests/ConversionBinaryTests.cs index 9ec3c1a..5be0320 100644 --- a/src/D2SSharp.Tests/ConversionBinaryTests.cs +++ b/src/D2SSharp.Tests/ConversionBinaryTests.cs @@ -217,8 +217,8 @@ private int CompareSections(string name1, byte[] data1, uint version1, reader.ReadUInt32(); // checksum positions.Add(("Header", reader.BytePosition)); - // Character (319 bytes) - var character = Character.Read(ref reader); + // Character (319 bytes for v<=103, 387 bytes for v>=104) + var character = Character.Read(ref reader, version); positions.Add(("Character", reader.BytePosition)); // Quests (298 bytes) diff --git a/src/D2SSharp.Tests/IntegrationTests.cs b/src/D2SSharp.Tests/IntegrationTests.cs index c9abd8a..b9dde52 100644 --- a/src/D2SSharp.Tests/IntegrationTests.cs +++ b/src/D2SSharp.Tests/IntegrationTests.cs @@ -37,8 +37,8 @@ public void RoundTrip_Known_Saves() uint checksum = reader.ReadUInt32(); readPositions.Add(("Header", reader.BytePosition)); - // Character (319 bytes) - var character = Character.Read(ref reader); + // Character (319 bytes for v<=103, 387 bytes for v>=104) + var character = Character.Read(ref reader, version); readPositions.Add(("Character", reader.BytePosition)); // Quests (298 bytes) @@ -104,7 +104,7 @@ public void RoundTrip_Known_Saves() writePositions.Add(("Header", writer.BytesWritten)); // Character - character.Write(ref writer); + character.Write(ref writer, version); writePositions.Add(("Character", writer.BytesWritten)); // Quests @@ -367,4 +367,222 @@ public void RoundTrip_96_Save() Assert.Equal(data.Length, written); Assert.True(buffer.AsSpan(0, written).SequenceEqual(data), $"Version 96 save '{fileName}' round-trip produced different bytes"); } + + /// + /// Tests round-trip for version 105 save files. + /// + [Theory] + [InlineData("Roka.d2s")] + [InlineData("Soska.d2s")] + [InlineData("ChaosSC.d2s")] + public void RoundTrip_105_Save(string fileName) + { + var filePath = Path.Combine("Resources", "105", fileName); + var data = File.ReadAllBytes(filePath); + + // Read save file + var save = D2Save.Read(data); + _output.WriteLine($"Character: {save.Character.Preview.Name}, Level: {save.Character.Level}, Class: {save.Character.Class}, Version: {save.Version}"); + _output.WriteLine($"Items: {save.Items.Count}"); + + // Verify v105-specific fields + Assert.Equal(105u, save.Version); + Assert.False(string.IsNullOrEmpty(save.Character.Preview.Name), "v105 name should be in Preview"); + + // Write back and verify byte-exact round-trip + var buffer = new byte[data.Length * 2]; + int written = save.Write(buffer); + + _output.WriteLine($"Original: {data.Length} bytes, Written: {written} bytes"); + Assert.Equal(data.Length, written); + Assert.True(buffer.AsSpan(0, written).SequenceEqual(data), $"Version 105 save '{fileName}' round-trip produced different bytes"); + } + + /// + /// Tests that ChaosSC.d2s (Warlock class) has a populated DemonSection. + /// + [Fact] + public void V105_DemonSection_ChaosSC() + { + var data = File.ReadAllBytes(Path.Combine("Resources", "105", "ChaosSC.d2s")); + var save = D2Save.Read(data); + + Assert.Equal(Enums.GameMode.ReignOfTheWarlock, save.Character.Preview.GameMode); + Assert.Equal(Enums.CharacterClass.Warlock, save.Character.Class); + Assert.NotNull(save.Demon); + Assert.True(save.Demon.HasDemon); + Assert.NotNull(save.Demon.DemonData); + Assert.True(save.Demon.DemonData.Stats.Count > 0, "Demon should have stats"); + + _output.WriteLine($"DemonType: {save.Demon.DemonData.DemonType}"); + _output.WriteLine($"ClassId: {save.Demon.DemonData.ClassId}"); + _output.WriteLine($"Stats: {save.Demon.DemonData.Stats.Count}"); + } + + /// + /// Tests round-trip for version 105 shared stash file. + /// + [Fact] + public void RoundTrip_105_Stash() + { + var data = File.ReadAllBytes(Path.Combine("Resources", "105", "SharedStashSoftCoreV2.d2i")); + _output.WriteLine($"Loaded stash: {data.Length} bytes"); + + // Read stash + var stash = D2StashSave.Read(data); + Assert.NotEmpty(stash); + _output.WriteLine($"Tabs: {stash.Count}"); + for (int t = 0; t < stash.Count; t++) + { + var tab = stash[t]; + _output.WriteLine($" Tab[{t}]: ItemFormat={tab.ItemFormat} StashFormat={tab.StashFormat} items={tab.Items.Count}"); + foreach (var item in tab.Items) + _output.WriteLine($" {item.ItemCodeString} quality={item.Quality} flags=0x{(uint)item.Flags:X8}"); + } + + // Write stash back + var buffer = new byte[data.Length * 2]; + var writer = new BitWriter(buffer); + stash.Write(ref writer); + int written = writer.BytesWritten; + + // Compare + _output.WriteLine($"Original: {data.Length} bytes, Written: {written} bytes"); + Assert.Equal(data.Length, written); + Assert.True(buffer.AsSpan(0, written).SequenceEqual(data), "v105 stash round-trip produced different bytes"); + } + + /// + /// Tests converting v99 save to v105 and back. + /// + [Fact] + public void Convert_99_To_105_RoundTrip() + { + var data = File.ReadAllBytes(Path.Combine("Resources", "99", "Roka.d2s")); + var original = D2Save.Read(data); + var originalName = original.Character.Preview.Name; + + _output.WriteLine($"Original: v{original.Version}, Name: {originalName}"); + + // Convert to v105 + var buffer105 = new byte[data.Length * 2]; + int written105 = original.Write(buffer105, targetVersion: 105); + _output.WriteLine($"Converted to v105: {written105} bytes"); + + // Read back the v105 save + var save105 = D2Save.Read(buffer105.AsSpan(0, written105)); + Assert.Equal(105u, save105.Version); + Assert.Equal(originalName, save105.Character.Preview.Name); + + _output.WriteLine($"v105: Name={save105.Character.Preview.Name}, Level={save105.Character.Level}, Class={save105.Character.Class}"); + + // Convert back to v99 + var buffer99 = new byte[written105 * 2]; + int written99 = save105.Write(buffer99, targetVersion: 99); + _output.WriteLine($"Converted back to v99: {written99} bytes"); + + // Read back and verify fields preserved + var restored = D2Save.Read(buffer99.AsSpan(0, written99)); + Assert.Equal(99u, restored.Version); + Assert.Equal(originalName, restored.Character.Preview.Name); + Assert.Equal(save105.Character.Level, restored.Character.Level); + Assert.Equal(save105.Character.Class, restored.Character.Class); + } + + /// + /// Tests round-trip for the modern v105 shared stash file with chronicle and advanced stash tabs. + /// + [Fact] + public void RoundTrip_105_ModernStash() + { + var data = File.ReadAllBytes(Path.Combine("Resources", "105", "ModernSharedStashSoftCoreV2.d2i")); + _output.WriteLine($"Loaded modern stash: {data.Length} bytes"); + + // Read stash + var stash = D2StashSave.Read(data); + Assert.Equal(11, stash.Count); + + for (int t = 0; t < stash.Count; t++) + { + var tab = stash[t]; + _output.WriteLine($" Tab[{t}]: ItemFormat={tab.ItemFormat} StashFormat={tab.StashFormat} TabType={tab.TabType} items={tab.Items.Count}"); + } + + // Verify tab types + Assert.Equal(StashTabType.Normal, stash[0].TabType); + Assert.Equal(StashTabType.AdvancedStash, stash[9].TabType); + Assert.Equal(StashTabType.Chronicle, stash[10].TabType); + + // Verify chronicle tab + var chronicle = stash[10].Chronicle; + Assert.NotNull(chronicle); + Assert.Equal(ChronicleSection.Magic, 0xC0EAEDC0u); + Assert.Equal(1, chronicle.Version); + Assert.Empty(chronicle.SetEntries); + Assert.Empty(chronicle.UniqueEntries); + Assert.Empty(chronicle.RunewordEntries); + + // Verify trailing data is preserved (64 bytes of stale buffer from writer bug) + Assert.Equal(64, chronicle.TrailingData.Length); + + // Write stash back + var buffer = new byte[data.Length * 2]; + var writer = new BitWriter(buffer); + stash.Write(ref writer); + int written = writer.BytesWritten; + + // Compare + _output.WriteLine($"Original: {data.Length} bytes, Written: {written} bytes"); + Assert.Equal(data.Length, written); + Assert.True(buffer.AsSpan(0, written).SequenceEqual(data), "Modern v105 stash round-trip produced different bytes"); + } + + /// + /// Tests converting stash tabs between v99 and v105 formats. + /// + [Fact] + public void Convert_Stash_99_To_105_RoundTrip() + { + var data = File.ReadAllBytes(Path.Combine("Resources", "99", "SharedStashSoftCoreV2.d2i")); + var original = D2StashSave.Read(data); + + _output.WriteLine($"Original: {original.Count} tabs"); + + // Convert to v105 + var buffer105 = new byte[data.Length * 2]; + var writer105 = new BitWriter(buffer105); + original.Write(ref writer105, targetVersion: 105); + int written105 = writer105.BytesWritten; + + _output.WriteLine($"Converted to v105: {written105} bytes"); + + // Read back the v105 stash + var stash105 = D2StashSave.Read(buffer105.AsSpan(0, written105)); + Assert.Equal(original.Count, stash105.Count); + + // Verify all tabs have v105 format and StashFormat 2 + foreach (var tab in stash105) + { + Assert.Equal(105u, tab.ItemFormat); + Assert.Equal(2u, tab.StashFormat); + } + + // Convert back to v99 + var buffer99 = new byte[written105 * 2]; + var writer99 = new BitWriter(buffer99); + stash105.Write(ref writer99, targetVersion: 99); + int written99 = writer99.BytesWritten; + + _output.WriteLine($"Converted back to v99: {written99} bytes"); + + // Read back and verify item counts and StashFormat preserved + var restored = D2StashSave.Read(buffer99.AsSpan(0, written99)); + Assert.Equal(original.Count, restored.Count); + + for (int i = 0; i < original.Count; i++) + { + Assert.Equal(original[i].Items.Count, restored[i].Items.Count); + Assert.Equal(1u, restored[i].StashFormat); + } + } } diff --git a/src/D2SSharp.Tests/OverlayTests.cs b/src/D2SSharp.Tests/OverlayTests.cs index 391787e..6037252 100644 --- a/src/D2SSharp.Tests/OverlayTests.cs +++ b/src/D2SSharp.Tests/OverlayTests.cs @@ -233,6 +233,213 @@ public void Overlay_UnlockAllWaypointsAndVerify(string resourcePath) Assert.True(D2Save.VerifyChecksum(data)); } + [Theory] + [InlineData("Resources/105/Soska.d2s")] + [InlineData("Resources/105/Roka.d2s")] + [InlineData("Resources/105/ChaosSC.d2s")] + public void Overlay_V104_MatchesParsedModel(string resourcePath) + { + var data = File.ReadAllBytes(resourcePath); + var parsed = D2Save.Read(data); + ref var overlay = ref D2SaveLayoutV104.From(data); + + // Header + Assert.Equal(parsed.Version, overlay.Header.Version); + Assert.Equal(parsed.FileSize, overlay.Header.FileSize); + Assert.Equal(parsed.Checksum, overlay.Header.Checksum); + + // Character basics + Assert.Equal(parsed.Character.Preview.Name, overlay.Name); + Assert.Equal(parsed.Character.Class, overlay.Character.Class); + Assert.Equal(parsed.Character.Level, overlay.Character.Level); + Assert.Equal(parsed.Character.Flags, overlay.Character.Flags); + Assert.Equal(parsed.Character.NumStats, overlay.Character.NumStats); + Assert.Equal(parsed.Character.NumSkills, overlay.Character.NumSkills); + Assert.Equal(parsed.Character.WeaponSwitch, overlay.Character.WeaponSwitch); + Assert.Equal(parsed.Character.CreateTime, overlay.Character.CreateTime); + Assert.Equal(parsed.Character.LastSaveTime, overlay.Character.LastSaveTime); + Assert.Equal(parsed.Character.PlayTime, overlay.Character.PlayTime); + Assert.Equal(parsed.Character.MapSeed, overlay.Character.MapSeed); + + // Character flag helpers + Assert.Equal(parsed.Character.Flags.HasFlag(Enums.CharacterFlags.Hardcore), overlay.Character.IsHardcore); + Assert.Equal(parsed.Character.Flags.HasFlag(Enums.CharacterFlags.Dead), overlay.Character.IsDead); + Assert.Equal(parsed.Character.Flags.HasFlag(Enums.CharacterFlags.Expansion), overlay.Character.IsExpansion); + Assert.Equal(parsed.Character.Flags.HasFlag(Enums.CharacterFlags.Ladder), overlay.Character.IsLadder); + Assert.Equal((uint)parsed.Character.Flags, (uint)overlay.Character.Flags); + + // Appearance + Assert.True(parsed.Character.AppearanceGraphics.AsSpan().SequenceEqual(overlay.Character.AppearanceGraphics)); + Assert.True(parsed.Character.AppearanceTints.AsSpan().SequenceEqual(overlay.Character.AppearanceTints)); + Assert.True(parsed.Character.TownDifficulty.AsSpan().SequenceEqual(overlay.Character.TownDifficulty)); + + // Merc data + Assert.Equal(parsed.Character.MercData.Flags, overlay.Character.MercData.Flags); + Assert.Equal(parsed.Character.MercData.Seed, overlay.Character.MercData.Seed); + Assert.Equal(parsed.Character.MercData.NameIndex, overlay.Character.MercData.NameIndex); + Assert.Equal(parsed.Character.MercData.HirelingId, overlay.Character.MercData.HirelingId); + Assert.Equal(parsed.Character.MercData.Experience, overlay.Character.MercData.Experience); + Assert.Equal(parsed.Character.MercData.IsDead, overlay.Character.MercData.IsDead); + Assert.Equal(parsed.Character.MercData.HasMerc, overlay.Character.MercData.HasMerc); + + // Preview data - v104+ specific fields + Assert.Equal(parsed.Character.Preview.Unk1, overlay.Character.Preview.Unk1); + Assert.Equal((byte)parsed.Character.Preview.GuildEmblemColor, overlay.Character.Preview.GuildEmblemColor); + Assert.Equal(parsed.Character.Preview.GameMode, overlay.Character.Preview.GameMode); + Assert.Equal(parsed.Character.Preview.PreviewPadding, overlay.Character.Preview.PreviewPadding); + + // Save times (6 slots) + for (int i = 0; i < 6; i++) + Assert.Equal(parsed.Character.Preview.SaveTimes[i], overlay.Character.Preview.SaveTimes[i]); + + // Experiences (6 slots) + for (int i = 0; i < 6; i++) + Assert.Equal(parsed.Character.Preview.Experiences[i], overlay.Character.Preview.Experiences[i]); + + // Preview items + AssertPreviewItemEquals(parsed.Character.Preview.LeftHand, overlay.Character.Preview.LeftHand); + AssertPreviewItemEquals(parsed.Character.Preview.RightHand, overlay.Character.Preview.RightHand); + AssertPreviewItemEquals(parsed.Character.Preview.Torso, overlay.Character.Preview.Torso); + AssertPreviewItemEquals(parsed.Character.Preview.Head, overlay.Character.Preview.Head); + + // Skill hotkeys + for (int i = 0; i < 16; i++) + { + Assert.Equal(parsed.Character.SkillHotkeys[i].SkillId, overlay.Character.SkillHotkeys[i].SkillId); + Assert.Equal(parsed.Character.SkillHotkeys[i].Side, overlay.Character.SkillHotkeys[i].Side); + Assert.Equal(parsed.Character.SkillHotkeys[i].ItemIndex, overlay.Character.SkillHotkeys[i].ItemIndex); + } + + // Left/Right skills + Assert.Equal(parsed.Character.LeftSkill.SkillId, overlay.Character.LeftSkill.SkillId); + Assert.Equal(parsed.Character.RightSkill.SkillId, overlay.Character.RightSkill.SkillId); + Assert.Equal(parsed.Character.SwitchLeftSkill.SkillId, overlay.Character.SwitchLeftSkill.SkillId); + Assert.Equal(parsed.Character.SwitchRightSkill.SkillId, overlay.Character.SwitchRightSkill.SkillId); + + // Quest section + Assert.Equal(parsed.Quests.Version, overlay.Quests.Version); + Assert.Equal(parsed.Quests.SectionSize, overlay.Quests.SectionSize); + + // Waypoint section + Assert.Equal(parsed.Waypoints.Version, overlay.Waypoints.Version); + Assert.Equal(parsed.Waypoints.SectionSize, overlay.Waypoints.SectionSize); + + // Check waypoints match + for (int wp = 0; wp < 39; wp++) + { + Assert.Equal(parsed.Waypoints.Normal.IsWaypointActive(wp), overlay.Waypoints.Normal.IsWaypointActive(wp)); + Assert.Equal(parsed.Waypoints.Nightmare.IsWaypointActive(wp), overlay.Waypoints.Nightmare.IsWaypointActive(wp)); + Assert.Equal(parsed.Waypoints.Hell.IsWaypointActive(wp), overlay.Waypoints.Hell.IsWaypointActive(wp)); + } + + // Player intro section + Assert.Equal(parsed.PlayerIntro.SectionSize, overlay.PlayerIntro.SectionSize); + } + + [Theory] + [InlineData("Resources/105/Soska.d2s")] + [InlineData("Resources/105/Roka.d2s")] + public void Overlay_V104_ModifyAndVerify(string resourcePath) + { + var data = File.ReadAllBytes(resourcePath); + + // Modify via overlay + ref var overlay = ref D2SaveLayoutV104.From(data); + overlay.Character.MercData.Experience = 12345678; + overlay.Character.MercData.HirelingId = 999; + D2SaveLayoutV104.UpdateChecksum(data); + + // Parse again and verify changes + var modifiedParsed = D2Save.Read(data); + Assert.Equal(12345678u, modifiedParsed.Character.MercData.Experience); + Assert.Equal(999, modifiedParsed.Character.MercData.HirelingId); + + // Verify checksum is valid + Assert.True(D2Save.VerifyChecksum(data)); + } + + [Theory] + [InlineData("Resources/105/Soska.d2s")] + [InlineData("Resources/105/Roka.d2s")] + public void Overlay_V104_NameProperty(string resourcePath) + { + var data = File.ReadAllBytes(resourcePath); + + ref var overlay = ref D2SaveLayoutV104.From(data); + var originalName = overlay.Name; + Assert.False(string.IsNullOrEmpty(originalName)); + + overlay.Name = "TestName"; + D2SaveLayoutV104.UpdateChecksum(data); + + // Verify via Name property + Assert.Equal("TestName", overlay.Name); + + // Verify parsed model agrees + var parsed = D2Save.Read(data); + Assert.Equal("TestName", parsed.Character.Preview.Name); + Assert.True(D2Save.VerifyChecksum(data)); + } + + [Theory] + [InlineData("Resources/105/Soska.d2s")] + [InlineData("Resources/105/Roka.d2s")] + public void Overlay_V104_NewFields(string resourcePath) + { + var data = File.ReadAllBytes(resourcePath); + var parsed = D2Save.Read(data); + ref var overlay = ref D2SaveLayoutV104.From(data); + + // GameMode + Assert.Equal(parsed.Character.Preview.GameMode, overlay.Character.Preview.GameMode); + + // SaveTimes[6] + for (int i = 0; i < 6; i++) + Assert.Equal(parsed.Character.Preview.SaveTimes[i], overlay.Character.Preview.SaveTimes[i]); + + // Experiences[6] + for (int i = 0; i < 6; i++) + Assert.Equal(parsed.Character.Preview.Experiences[i], overlay.Character.Preview.Experiences[i]); + + // Direct fixed buffer access matches legacy accessors + Assert.Equal(parsed.Character.Preview.ExpansionSaveTime, overlay.Character.Preview.SaveTimes[0]); + Assert.Equal(parsed.Character.Preview.ClassicSaveTime, overlay.Character.Preview.SaveTimes[1]); + Assert.Equal(parsed.Character.Preview.ExpansionExperience, overlay.Character.Preview.Experiences[0]); + Assert.Equal(parsed.Character.Preview.ClassicExperience, overlay.Character.Preview.Experiences[1]); + } + + [Theory] + [InlineData("Resources/105/Soska.d2s")] + [InlineData("Resources/105/Roka.d2s")] + [InlineData("Resources/105/ChaosSC.d2s")] + public void Overlay_RejectsV104(string resourcePath) + { + var data = File.ReadAllBytes(resourcePath); + Assert.Throws(() => D2SaveLayout.From(data)); + } + + [Theory] + [InlineData("Resources/105/Soska.d2s")] + [InlineData("Resources/105/Roka.d2s")] + public void Overlay_V104_UnlockAllWaypointsAndVerify(string resourcePath) + { + var data = File.ReadAllBytes(resourcePath); + + ref var overlay = ref D2SaveLayoutV104.From(data); + overlay.Waypoints.UnlockAllWaypoints(); + D2SaveLayoutV104.UpdateChecksum(data); + + var parsed = D2Save.Read(data); + for (int wp = 0; wp < 39; wp++) + { + Assert.True(parsed.Waypoints.Normal.IsWaypointActive(wp), $"Normal waypoint {wp} should be active"); + Assert.True(parsed.Waypoints.Nightmare.IsWaypointActive(wp), $"Nightmare waypoint {wp} should be active"); + Assert.True(parsed.Waypoints.Hell.IsWaypointActive(wp), $"Hell waypoint {wp} should be active"); + } + + Assert.True(D2Save.VerifyChecksum(data)); + } + private static void AssertPreviewItemEquals(PreviewItem expected, PreviewItemLayout actual) { Assert.Equal(expected.Code, actual.Code); diff --git a/src/D2SSharp.Tests/Resources/105/ChaosSC.d2s b/src/D2SSharp.Tests/Resources/105/ChaosSC.d2s new file mode 100644 index 0000000..4c6b9a7 Binary files /dev/null and b/src/D2SSharp.Tests/Resources/105/ChaosSC.d2s differ diff --git a/src/D2SSharp.Tests/Resources/105/ModernSharedStashSoftCoreV2.d2i b/src/D2SSharp.Tests/Resources/105/ModernSharedStashSoftCoreV2.d2i new file mode 100644 index 0000000..11504a7 Binary files /dev/null and b/src/D2SSharp.Tests/Resources/105/ModernSharedStashSoftCoreV2.d2i differ diff --git a/src/D2SSharp.Tests/Resources/105/Roka.d2s b/src/D2SSharp.Tests/Resources/105/Roka.d2s new file mode 100644 index 0000000..0548207 Binary files /dev/null and b/src/D2SSharp.Tests/Resources/105/Roka.d2s differ diff --git a/src/D2SSharp.Tests/Resources/105/SharedStashSoftCoreV2.d2i b/src/D2SSharp.Tests/Resources/105/SharedStashSoftCoreV2.d2i new file mode 100644 index 0000000..6063c2d Binary files /dev/null and b/src/D2SSharp.Tests/Resources/105/SharedStashSoftCoreV2.d2i differ diff --git a/src/D2SSharp.Tests/Resources/105/Soska.d2s b/src/D2SSharp.Tests/Resources/105/Soska.d2s new file mode 100644 index 0000000..bd367d4 Binary files /dev/null and b/src/D2SSharp.Tests/Resources/105/Soska.d2s differ diff --git a/src/D2SSharp/Data/IExternalData.cs b/src/D2SSharp/Data/IExternalData.cs index cdaec54..d7de69d 100644 --- a/src/D2SSharp/Data/IExternalData.cs +++ b/src/D2SSharp/Data/IExternalData.cs @@ -110,7 +110,7 @@ int GetAutoMagicOffset(uint saveVersion) /// Offset added when saving (dwSaveAdd) /// Bit shift applied to value for fixed-point precision (nValShift). /// C++ shifts left on read: (raw - SaveAdd) << ValShift. -/// C++ shifts right on write: value >> ValShift + SaveAdd. +/// C++ shifts right on write: value >> ValShift + SaveAdd. public readonly record struct StatInfo( byte CsvBits, byte CsvParam, diff --git a/src/D2SSharp/Data/Txt/105/armor.txt b/src/D2SSharp/Data/Txt/105/armor.txt new file mode 100644 index 0000000..37a7b51 --- /dev/null +++ b/src/D2SSharp/Data/Txt/105/armor.txt @@ -0,0 +1,219 @@ +name version compactsave rarity spawnable DropConditionCalc minac maxac speed reqstr reqdex block durability nodurability level ShowLevel levelreq cost gamble cost code namestr magic lvl auto prefix alternategfx normcode ubercode ultracode component invwidth invheight hasinv gemsockets gemapplytype flippyfile invfile uniqueinvfile setinvfile rArm lArm Torso Legs rSPad lSPad useable stackable minstack maxstack spawnstack Transmogrify TMogType TMogMin TMogMax type type2 dropsound dropsfxframe usesound unique transparent transtbl *quivered lightradius belt quest questdiffcheck missiletype durwarning qntwarning mindam maxdam StrBonus DexBonus gemoffset bitfield1 CharsiMin CharsiMax CharsiMagicMin CharsiMagicMax CharsiMagicLvl GheedMin GheedMax GheedMagicMin GheedMagicMax GheedMagicLvl AkaraMin AkaraMax AkaraMagicMin AkaraMagicMax AkaraMagicLvl FaraMin FaraMax FaraMagicMin FaraMagicMax FaraMagicLvl LysanderMin LysanderMax LysanderMagicMin LysanderMagicMax LysanderMagicLvl DrognanMin DrognanMax DrognanMagicMin DrognanMagicMax DrognanMagicLvl HratliMin HratliMax HratliMagicMin HratliMagicMax HratliMagicLvl AlkorMin AlkorMax AlkorMagicMin AlkorMagicMax AlkorMagicLvl OrmusMin OrmusMax OrmusMagicMin OrmusMagicMax OrmusMagicLvl ElzixMin ElzixMax ElzixMagicMin ElzixMagicMax ElzixMagicLvl AshearaMin AshearaMax AshearaMagicMin AshearaMagicMax AshearaMagicLvl CainMin CainMax CainMagicMin CainMagicMax CainMagicLvl HalbuMin HalbuMax HalbuMagicMin HalbuMagicMax HalbuMagicLvl JamellaMin JamellaMax JamellaMagicMin JamellaMagicMax JamellaMagicLvl LarzukMin LarzukMax LarzukMagicMin LarzukMagicMax LarzukMagicLvl MalahMin MalahMax MalahMagicMin MalahMagicMax MalahMagicLvl AnyaMin AnyaMax AnyaMagicMin AnyaMagicMax AnyaMagicLvl Transform InvTrans SkipName NightmareUpgrade HellUpgrade Nameable PermStoreItem UICatOverride diablocloneweight +Cap 0 0 1 1 3 5 0 0 0 0 12 0 1 0 0 64 3016 cap cap cap cap xap uap 0 2 2 1 2 1 flpcap invcap invcapu invcapu 0 0 xxx helm item_cap 12 item_cap 0 0 5 0 0 0 0 3 0 0 0 0 1 1 1 1 1 5 1 1 1 255 255 255 255 255 255 255 1 1 1 1 255 255 255 255 255 255 255 2 8 0 skp ghm 1 0 +Skull Cap 0 0 4 1 8 11 0 15 0 0 18 0 5 0 0 441 5551 skp skp skp skp xkp ukp 0 2 2 1 2 1 flpskp invskp 0 0 xxx helm item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 3 1 1 1 1 10 1 1 1 255 255 255 255 255 255 255 1 2 1 1 1 255 255 255 255 255 255 255 2 8 0 hlm crn 1 0 +Helm 0 0 4 1 15 18 0 26 0 0 24 0 11 0 0 1558 12284 hlm hlm hlm hlm xlm ulm 0 2 2 1 2 1 flphlm invhlm invhlmu invhlmu 0 0 xxx helm item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 3 255 1 1 1 255 1 2 1 1 1 255 255 255 255 255 255 1 1 1 1 255 255 255 255 255 2 8 0 fhl ghm 1 0 +Full Helm 0 0 4 1 23 26 0 41 0 0 30 0 15 0 0 3095 21606 fhl fhl fhl fhl xhl uhl 0 2 2 1 2 1 flpfhl invfhl invfhlu invfhlu 0 0 xxx helm item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 3 255 255 255 1 1 1 1 255 255 255 255 255 255 1 1 1 1 1 1 1 1 255 255 255 255 255 0 8 0 ghm xxx 1 0 +Great Helm 0 0 4 1 30 35 0 63 0 0 40 0 23 0 0 6177 49517 ghm ghm ghm ghm xhm uhm 0 2 2 1 3 1 flpghm invghm 0 0 xxx helm item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 3 255 255 255 255 255 255 2 2 1 1 1 255 255 255 1 1 1 1 1 1 1 1 1 1 1 1 1 1 20 1 1 1 1 20 255 255 7 8 0 crn xxx 1 0 +Crown 0 0 4 1 25 45 0 55 0 0 50 0 29 0 0 8345 77501 crn crn crn crn xrn urn 0 2 2 1 3 1 flpcrn invcrn 0 0 xxx helm item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 3 255 255 255 255 255 255 1 1 1 1 255 255 255 255 255 1 1 1 1 20 1 1 1 1 1 20 255 255 2 8 0 xxx xxx 1 0 +Mask 0 0 4 1 9 27 0 23 0 0 20 0 19 0 0 2857 25570 msk msk msk msk xsk usk 0 2 2 1 3 1 flpmsk invmsk 0 0 xxx helm item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 3 255 255 255 255 255 255 255 255 1 1 1 255 255 255 255 1 1 255 255 255 1 2 0 xxx xxx 1 0 +Quilted Armor 0 0 1 1 8 11 0 12 0 0 20 0 1 0 0 140 3035 qui qui qlt qui xui uui 1 2 3 1 2 1 flpqlt invqlt 0 0 0 0 1 1 0 0 xxx tors item_lightarmor 12 item_lightarmor 0 0 5 0 0 0 0 2 0 0 0 0 1 1 1 1 1 5 1 1 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 7 8 0 lea gth 1 0 +Leather Armor 0 0 2 1 14 17 0 15 0 0 24 0 3 0 0 481 4360 lea lea lea lea xea uea 1 2 3 1 2 1 flplea invlea 0 0 1 0 1 1 0 0 xxx tors item_lightarmor 12 item_lightarmor 0 0 5 0 0 0 0 2 0 0 0 0 1 1 1 1 1 10 1 1 1 255 255 255 255 255 255 255 1 1 1 1 1 255 255 255 255 255 255 255 7 8 0 hla ful 1 0 +Hard Leather Armor 0 0 3 1 21 24 0 20 0 0 28 0 5 0 0 1060 6325 hla hla hla hla xla ula 1 2 3 1 2 1 flphla invhla 1 1 1 0 1 1 0 0 xxx tors item_lightarmor 12 item_lightarmor 0 0 5 0 0 0 0 2 0 0 0 0 1 1 1 1 1 15 1 1 1 255 255 255 255 255 255 255 1 1 1 1 1 255 255 255 255 255 255 255 7 8 0 stu aar 1 0 +Studded Leather 0 0 4 1 32 35 0 27 0 0 32 0 8 0 0 2385 11270 stu stu stu stu xtu utu 1 2 3 1 2 1 flpstu invstu 1 0 0 1 1 1 0 0 xxx tors item_lightarmor 12 item_lightarmor 0 0 5 0 0 0 0 2 0 0 0 0 1 1 1 1 1 20 1 1 1 255 255 255 255 255 255 255 1 1 1 1 1 255 255 255 255 255 255 255 7 8 0 rng ltp 1 0 +Ring Mail 0 0 4 1 45 48 5 36 0 0 26 0 11 0 0 4428 20177 rng rng rng rng xng ung 1 2 3 1 3 1 flprng invrng 0 0 1 1 1 1 0 0 xxx tors item_chainarmor 12 item_chainarmor 0 0 5 0 0 0 0 2 0 0 0 0 3 1 1 255 255 255 1 1 1 1 255 255 255 255 255 1 1 1 255 255 255 255 255 255 255 7 8 0 scl chn 1 0 +Scale Mail 0 0 4 1 57 60 10 44 0 0 36 0 13 0 0 6508 30151 scl scl scl scl xcl ucl 1 2 3 1 2 1 flpscl invscl 1 1 1 1 1 1 0 0 xxx tors item_chainarmor 12 item_chainarmor 0 0 5 0 0 0 0 2 0 0 0 0 3 255 255 255 1 1 1 1 255 255 255 255 255 255 1 1 1 1 255 255 255 255 255 7 8 0 chn brs 1 0 +Chain Mail 0 0 4 1 72 75 5 48 0 0 45 0 15 0 0 9360 45100 chn chn chn chn xhn uhn 1 2 3 1 2 1 flpchn invchn 1 1 1 1 2 2 0 0 xxx tors item_chainarmor 12 item_chainarmor 0 0 5 0 0 0 0 2 0 0 0 0 3 255 255 255 1 1 1 1 255 255 1 1 1 255 255 255 1 1 1 1 1 1 1 1 1 1 255 1 1 255 255 255 7 8 0 brs spl 1 0 +Breast Plate 0 0 4 1 65 68 0 30 0 0 50 0 18 0 0 10078 56851 brs brs brs brs xrs urs 1 2 3 1 3 1 flpbrs invbrs 0 0 2 0 2 2 0 0 xxx tors item_platearmor 12 item_platearmor 0 0 5 0 0 0 0 2 0 0 0 0 3 255 255 255 1 1 1 255 255 1 1 1 1 255 255 255 1 1 1 1 1 1 1 1 1 1 255 1 1 1 1 255 255 255 7 8 0 spl plt 1 0 +Splint Mail 0 0 4 1 90 95 5 51 0 0 30 0 20 0 0 15489 89945 spl spl spl spl xpl upl 1 2 3 1 2 1 flpspl invspl 1 1 2 1 1 1 0 0 xxx tors item_platearmor 12 item_platearmor 0 0 5 0 0 0 0 2 0 0 0 0 3 255 255 255 1 1 255 255 1 1 1 1 1 255 255 255 1 1 1 1 1 1 1 1 255 1 1 1 1 1 1 20 255 255 7 8 0 plt fld 1 0 +Plate Mail 0 0 4 1 108 116 10 65 0 0 60 0 24 0 0 22335 148510 plt plt plt plt xlt ult 1 2 3 1 2 1 flpplt invplt 2 2 2 2 1 1 0 0 xxx tors item_platearmor 12 item_platearmor 0 0 5 0 0 0 0 2 0 0 0 0 3 255 255 255 255 255 255 1 1 1 1 255 255 255 255 255 1 1 20 1 1 1 1 1 1 1 20 255 255 8 8 0 fld xxx 1 0 +Field Plate 0 0 4 1 101 105 5 55 0 0 48 0 28 0 0 23841 183387 fld fld fld fld xld uld 1 2 3 1 2 1 flpfld invfld 1 1 2 2 2 2 0 0 xxx tors item_platearmor 12 item_platearmor 0 0 5 0 0 0 0 2 0 0 0 0 3 255 255 255 255 255 255 1 1 255 255 255 255 255 1 1 1 1 20 1 1 2 20 255 255 8 8 0 gth ful 1 0 +Gothic Plate 0 0 4 1 128 135 5 70 0 0 55 0 32 0 0 34646 295668 gth gth gth gth xth uth 1 2 3 1 4 1 flpgth invgth 2 2 1 2 2 2 0 0 xxx tors item_platearmor 12 item_platearmor 0 0 5 0 0 0 0 2 0 0 0 0 3 255 255 255 255 255 255 1 255 1 1 255 255 255 1 1 1 1 20 1 1 1 1 2 20 255 255 8 8 0 ful xxx 1 0 +Full Plate Mail 0 0 4 1 150 161 10 80 0 0 70 0 37 0 0 47192 457526 ful ful ful ful xul uul 1 2 3 1 4 1 flpful invful invfulu invfulu 2 2 2 2 2 2 0 0 xxx tors item_platearmor 12 item_platearmor 0 0 5 0 0 0 0 2 0 0 0 0 3 255 255 255 255 255 255 1 255 255 255 255 255 1 1 20 1 1 1 1 2 20 255 255 8 8 0 aar xxx 1 0 +Ancient Armor 0 0 4 1 218 233 5 100 0 0 60 0 40 0 0 73864 761140 aar aar aar aar xar uar 1 2 3 1 4 1 flpaar invaar invaaru invaaru 1 2 2 2 2 0 0 0 xxx tors item_platearmor 12 item_platearmor 0 0 5 0 0 0 0 2 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 1 1 20 255 1 1 1 2 20 255 1 1 2 20 8 8 0 ltp xxx 1 0 +Light Plate 0 0 4 1 90 107 0 41 0 0 60 0 35 0 0 28327 267861 ltp ltp ltp ltp xtp utp 1 2 3 1 3 1 flpltp invltp 2 0 1 1 2 2 0 0 xxx tors item_platearmor 12 item_platearmor 0 0 5 0 0 0 0 2 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 1 1 20 1 255 1 2 20 255 1 1 1 20 7 8 0 buc xxx 1 0 +Buckler 0 0 2 1 4 6 0 12 0 0 12 0 1 0 0 68 3017 buc buc buc buc xuc uuc 7 2 2 1 1 2 flpbuc invbuc invbucu invbucu 0 0 xxx shie item_woodshield 12 item_woodshield 0 0 5 0 0 0 0 1 0 1 3 100 0 3 1 1 1 1 3 1 1 1 255 255 255 255 255 255 255 1 1 1 1 255 255 255 255 255 255 255 8 8 0 sml tow 1 0 +Small Shield 0 0 3 1 8 10 0 22 0 5 16 0 5 0 0 410 5512 sml sml buc sml xml uml 7 2 2 1 2 2 flpsml invsml invsmlu invsmlu 0 0 xxx shie item_woodshield 12 item_woodshield 0 0 5 0 0 0 0 1 0 2 3 100 0 3 1 1 1 1 5 1 1 1 255 255 255 255 255 255 255 1 2 1 1 1 1 1 1 1 255 255 255 255 255 8 5 0 lrg kit 1 0 +Large Shield 0 0 4 1 12 14 5 34 0 12 24 0 11 0 0 1214 11338 lrg lrg lrg lrg xrg urg 7 2 3 1 3 2 flplrg invlrg invlrgu invlrgu 0 0 xxx shie item_metalshield 12 item_metalshield 0 0 5 0 0 0 0 1 0 2 4 100 0 3 1 1 10 1 1 1 255 1 1 1 1 1 255 255 255 255 255 255 1 1 1 1 1 1 1 1 1 1 255 1 1 255 255 255 255 8 2 0 kit tow 1 0 +Kite Shield 0 0 4 1 16 18 0 47 0 8 30 0 15 0 0 2129 17983 kit kit kit kit xit uit 7 2 3 1 3 2 flpkit invkit invkitu invkitu 0 0 xxx shie item_metalshield 12 item_metalshield 0 0 5 0 0 0 0 1 0 2 5 100 0 3 255 255 255 1 1 1 1 255 255 1 1 1 1 1 255 255 255 1 1 1 1 1 1 1 1 255 1 1 1 1 1 255 255 255 8 2 0 tow gts 1 0 +Tower Shield 0 0 4 1 22 25 10 75 0 24 60 0 22 0 0 4249 36869 tow tow tow tow xow uow 7 2 3 1 3 2 flptow invtow invtowu invtowu 0 0 xxx shie item_metalshield 12 item_metalshield 0 0 5 0 0 0 0 1 0 1 5 100 0 3 255 255 255 1 1 255 255 1 2 1 1 1 255 255 255 255 255 1 1 1 1 20 1 1 1 1 1 1 2 20 255 20 8 2 0 gts xxx 1 0 +Gothic Shield 0 0 4 1 30 35 5 60 0 16 40 0 30 0 0 8000 77500 gts gts kit gts xts uts 7 2 4 1 3 2 flpgts invgts invgtsu invgtsu 0 0 xxx shie item_metalshield 12 item_metalshield 0 0 5 0 0 0 0 1 0 2 6 100 0 3 255 255 255 255 255 255 1 1 255 255 255 255 255 1 1 1 1 20 1 1 2 20 255 1 1 20 8 2 0 xxx xxx 1 0 +Leather Gloves 0 0 1 1 2 3 0 0 0 0 12 0 3 0 0 80 4060 lgl lgl lgl lgl xlg ulg 16 2 2 0 0 0 flplgl invlgl 0 0 xxx glov item_gloves 12 item_gloves 0 0 5 0 0 0 0 5 0 0 0 0 1 1 1 1 1 3 1 1 1 1 255 255 255 255 255 255 255 1 1 1 1 255 255 255 255 255 255 255 0 8 0 vgl hgl 1 0 +Heavy Gloves 0 0 1 1 5 6 0 0 0 0 14 0 7 0 0 352 6616 vgl vgl vgl vgl xvg uvg 16 2 2 0 0 0 flpvgl invvgl 0 0 xxx glov item_gloves 12 item_gloves 0 0 5 0 0 0 0 5 0 0 0 0 1 1 1 5 1 1 1 255 1 1 1 255 255 255 255 255 1 1 1 1 1 255 255 255 255 255 255 255 0 8 0 mgl tgl 1 0 +Chain Gloves 0 0 2 1 8 9 0 25 0 0 16 0 12 0 0 859 11077 mgl mgl mgl mgl xmg umg 16 2 2 0 0 0 flpmgl invmgl 0 0 xxx glov item_gloveschain 12 item_gloveschain 0 0 5 0 0 0 0 5 0 0 0 0 3 1 10 255 255 1 2 1 1 1 255 255 255 255 255 255 1 1 1 1 1 1 1 1 255 255 255 255 255 0 8 0 tgl hgl 1 0 +Light Gauntlets 0 0 3 1 9 11 0 45 0 0 18 0 20 0 0 1635 20675 tgl tgl mgl tgl xtg utg 16 2 2 0 0 0 flptgl invtgl 0 0 xxx glov item_glovesmetal 12 item_glovesmetal 0 0 5 0 0 0 0 5 0 0 0 0 3 255 255 255 1 1 1 255 255 255 255 255 255 1 2 1 1 1 1 2 1 1 1 1 1 255 1 1 1 255 1 1 20 255 1 1 255 0 8 0 xxx xxx 1 0 +Gauntlets 0 0 4 1 12 15 0 60 0 0 24 0 27 0 0 2964 36007 hgl hgl hgl hgl xhg uhg 16 2 2 0 0 0 flphgl invhgl 0 0 xxx glov item_glovesmetal 12 item_glovesmetal 0 0 5 0 0 0 0 5 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 1 1 1 1 1 1 1 1 1 1 1 255 1 1 255 1 1 1 1 20 255 1 1 1 1 20 0 8 0 xxx xxx 1 0 +Boots 0 0 1 1 2 3 0 0 0 0 12 0 3 0 0 80 4060 lbt lbt lbt lbt xlb ulb 16 2 2 0 0 0 flplbt invlbt 0 0 xxx boot item_boots 12 item_boots 0 0 5 0 0 0 0 6 0 3 8 120 0 1 1 1 1 1 1 1 1 1 1 255 255 255 255 255 255 255 1 1 1 1 255 255 255 255 255 255 255 0 8 0 vbt tbt 1 0 +Heavy Boots 0 0 1 1 5 6 0 18 0 0 14 0 7 0 0 334 6584 vbt vbt vbt vbt xvb uvb 16 2 2 0 0 0 flpvbt invvbt 0 0 xxx boot item_boots 12 item_boots 0 0 5 0 0 0 0 6 0 4 10 120 0 1 1 1 1 1 1 1 255 1 1 1 255 255 255 255 255 1 1 1 1 1 255 255 255 255 255 255 255 0 8 0 mbt tbt 1 0 +Chain Boots 0 0 2 1 8 9 0 30 0 0 16 0 12 0 0 854 11062 mbt mbt mbt mbt xmb umb 16 2 2 0 0 0 flpmbt invmbt 0 0 xxx boot item_bootschain 12 item_bootschain 0 0 5 0 0 0 0 6 0 6 12 120 0 3 1 1 255 255 1 2 1 1 1 255 255 255 255 255 255 1 1 1 1 1 1 1 1 255 255 255 255 255 0 8 0 tbt hbt 1 0 +Light Plated Boots 0 0 3 1 9 11 0 50 0 0 18 0 20 0 0 1630 20650 tbt tbt mbt tbt xtb utb 16 2 2 0 0 0 flptbt invtbt 0 0 xxx boot item_bootsmetal 12 item_bootsmetal 0 0 5 0 0 0 0 6 0 8 16 120 0 3 255 255 255 1 1 1 255 255 255 255 255 255 1 2 1 1 1 1 2 1 1 1 1 1 20 1 1 1 255 1 1 20 255 1 1 255 0 8 0 xxx xxx 1 0 +Greaves 0 0 4 1 12 15 0 70 0 0 24 0 27 0 0 2954 35939 hbt hbt hbt hbt xhb uhb 16 2 2 0 0 0 flphbt invhbt 0 0 xxx boot item_bootsmetal 12 item_bootsmetal 0 0 5 0 0 0 0 6 0 10 20 120 0 3 255 255 255 255 255 255 255 255 255 255 1 1 1 1 1 1 1 1 1 1 1 1 20 1 1 255 1 1 1 1 20 255 1 1 1 1 20 0 8 0 xxx xxx 1 0 +Sash 0 0 1 1 2 2 0 0 0 0 12 0 3 0 0 64 4048 lbl lbl lbl lbl zlb ulc 16 2 1 0 0 0 flplbl invlbl 0 0 xxx belt item_lightarmor 12 item_lightarmor 0 0 5 0 0 1 0 4 0 0 0 0 1 1 1 1 1 1 1 1 1 1 255 255 255 255 255 255 255 1 1 1 1 255 255 255 255 255 255 255 0 8 0 vbl tbl 1 0 +Light Belt 0 0 1 1 3 3 0 0 0 0 14 0 7 0 0 192 6336 vbl vbl vbl vbl zvb uvc 16 2 1 0 0 0 flpvbl invvbl 0 0 xxx belt item_belt 12 item_belt 0 0 5 0 0 4 0 4 0 0 0 0 1 1 1 1 1 1 1 255 1 1 1 255 255 255 255 255 1 1 1 1 1 255 255 255 255 255 255 255 0 8 0 mbl hbl 1 0 +Belt 0 0 2 1 5 5 0 25 0 0 16 0 12 0 0 495 9985 mbl mbl mbl mbl zmb umc 16 2 1 0 0 0 flpmbl invmbl 0 0 xxx belt item_belt 12 item_belt 0 0 5 0 0 0 0 4 0 0 0 0 1 1 1 255 255 1 2 1 1 1 255 255 255 255 255 255 1 1 1 1 1 1 1 1 255 255 255 255 255 0 8 0 tbl hbl 1 0 +Heavy Belt 0 0 2 1 6 6 0 45 0 0 18 0 20 0 0 963 17315 tbl tbl mbl tbl ztb utc 16 2 1 0 0 0 flptbl invtbl 0 0 xxx belt item_belt 12 item_belt 0 0 5 0 0 5 0 4 0 0 0 0 1 255 255 255 1 1 1 255 255 255 255 255 255 1 2 1 1 1 1 2 1 1 1 1 1 20 1 1 1 255 255 255 1 1 255 0 8 0 xxx xxx 1 0 +Plated Belt 0 0 3 1 8 11 0 60 0 0 24 0 27 0 0 2068 29959 hbl hbl hbl hbl zhb uhc 16 2 1 0 0 0 flphbl invhbl 0 0 xxx belt item_belt 12 item_belt 0 0 5 0 0 3 0 4 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 1 1 1 1 1 1 1 1 1 1 1 1 20 1 1 255 1 1 1 2 20 255 1 1 255 0 8 0 xxx xxx 1 0 +Bone Helm 0 0 2 1 33 36 0 25 0 0 40 0 22 0 0 6323 48276 bhm bhm bhm bhm xh9 uh9 0 2 2 1 2 1 flpbhm invbhm invbhmu invbhmu 0 0 xxx helm item_helm 12 item_helm 0 0 5 0 2 0 0 3 0 0 0 0 1 255 255 255 255 255 1 2 1 3 20 255 255 1 1 255 255 255 255 255 255 255 1 1 1 7 8 0 xxx xxx 1 0 +Bone Shield 0 0 2 1 10 30 0 25 0 20 40 0 19 0 0 3175 27081 bsh bsh bsh bsh xsh ush 7 2 3 1 2 2 flpbsh invbsh invbshu invbshu 0 0 xxx shie item_metalshield 12 item_metalshield 0 0 5 0 0 0 0 1 0 3 6 100 0 1 255 255 255 255 255 1 2 1 3 20 255 255 1 1 255 255 255 255 255 255 255 1 1 1 8 8 0 xxx xxx 1 0 +Spiked Shield 0 0 3 1 15 25 0 30 0 10 40 0 11 0 0 1890 13197 spk spk spk spk xpk upk 7 2 3 1 2 2 flpspk invspk invspku invspku 0 0 xxx shie item_metalshield 12 item_metalshield 0 0 5 0 0 0 0 1 0 5 9 100 0 1 255 255 255 255 255 1 2 1 3 20 255 255 1 255 255 255 255 255 255 255 1 1 1 8 8 0 xxx xxx 1 0 +War Hat 0 0 1 1 45 53 0 20 0 0 12 0 34 0 22 13560 82061 xap xap cap cap xap uap 0 2 2 1 2 1 flpcap invcap 0 0 xxx helm item_cap 12 item_cap 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 8 0 xxx xxx 1 0 +Sallet 0 0 4 1 52 62 0 43 0 0 18 0 37 0 25 17210 113647 xkp xkp skp skp xkp ukp 0 2 2 1 2 1 flpskp invskp invxkpu invxkpu 0 0 xxx helm item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 8 0 xxx xxx 1 0 +Casque 0 0 4 1 63 72 0 59 0 0 24 0 42 0 25 23075 171804 xlm xlm hlm hlm xlm ulm 0 2 2 1 2 1 flphlm invhlm invhlmu invhlmu 0 0 xxx helm item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 8 0 xxx xxx 1 0 +Basinet 0 0 4 1 75 84 0 82 0 0 30 0 45 0 25 29083 233910 xhl xhl fhl fhl xhl uhl 0 2 2 1 2 1 flpfhl invfhl invfhlu invfhlu 0 0 xxx helm item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 8 0 xxx xxx 1 0 +Winged Helm 0 0 4 1 85 98 0 115 0 0 40 0 51 0 25 37846 355900 xhm xhm ghm ghm xhm uhm 0 2 2 1 3 1 flpghm invghm 0 0 xxx helm item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 7 8 0 xxx xxx 1 0 +Grand Crown 0 0 4 1 78 113 0 103 0 0 50 0 55 0 25 42458 448816 xrn xrn crn crn xrn urn 0 2 2 1 3 1 flpcrn invcrn invxrnu invxrnu 0 0 xxx helm item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 8 0 xxx xxx 1 0 +Death Mask 0 0 4 1 54 86 0 55 0 0 20 0 48 0 25 27190 241184 xsk xsk msk msk xsk usk 0 2 2 1 3 1 flpmsk invmsk 0 0 xxx helm item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Ghost Armor 0 0 1 1 102 117 0 38 0 0 20 0 34 0 22 30552 165635 xui xui qlt qui xui uui 1 2 3 1 2 1 flpqlt invqlt 0 0 0 0 1 1 0 0 xxx tors item_lightarmor 12 item_lightarmor 0 0 5 0 0 0 0 2 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 8 0 xxx xxx 1 0 +Serpentskin Armor 0 0 2 1 111 126 0 43 0 0 24 0 36 0 24 34960 197896 xea xea lea lea xea uea 1 2 3 1 2 1 flplea invlea 0 0 1 0 1 1 0 0 xxx tors item_lightarmor 12 item_lightarmor 0 0 5 0 0 0 0 2 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 8 0 xxx xxx 1 0 +Demonhide Armor 0 0 3 1 122 136 0 50 0 0 28 0 37 0 25 39090 236758 xla xla hla hla xla ula 1 2 3 1 2 1 flphla invhla 1 1 1 0 1 1 0 0 xxx tors item_lightarmor 12 item_lightarmor 0 0 5 0 0 0 0 2 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 8 0 xxx xxx 1 0 +Trellised Armor 0 0 4 1 138 153 0 61 0 0 32 0 40 0 25 47582 305707 xtu xtu stu stu xtu utu 1 2 3 1 2 1 flpstu invstu invxtuu invxtuu 1 0 0 1 1 1 0 0 xxx tors item_lightarmor 12 item_lightarmor 0 0 5 0 0 0 0 2 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 8 0 xxx xxx 1 0 +Linked Mail 0 0 4 1 158 172 5 74 0 0 26 0 42 0 25 56600 393748 xng xng rng rng xng ung 1 2 3 1 3 1 flprng invrng 0 0 1 1 1 1 0 0 xxx tors item_chainarmor 12 item_chainarmor 0 0 5 0 0 0 0 2 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 8 0 xxx xxx 1 0 +Tigulated Mail 0 0 4 1 176 190 10 86 0 0 36 0 43 0 25 64242 473193 xcl xcl scl scl xcl ucl 1 2 3 1 3 1 flpscl invscl 1 1 1 1 1 1 0 0 xxx tors item_chainarmor 12 item_chainarmor 0 0 5 0 0 0 0 2 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 8 0 xxx xxx 1 0 +Mesh Armor 0 0 4 1 198 213 5 92 0 0 45 0 45 0 25 75440 574094 xhn xhn chn chn xhn uhn 1 2 3 1 3 1 flpchn invchn 1 1 1 1 2 2 0 0 xxx tors item_chainarmor 12 item_chainarmor 0 0 5 0 0 0 0 2 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 8 0 xxx xxx 1 0 +Cuirass 0 0 4 1 188 202 0 65 0 0 50 0 47 0 25 74719 613456 xrs xrs brs brs xrs urs 1 2 3 1 3 1 flpbrs invbrs invxrss 0 0 2 0 2 2 0 0 xxx tors item_platearmor 12 item_platearmor 0 0 5 0 0 0 0 2 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 8 0 xxx xxx 1 0 +Russet Armor 0 0 4 1 225 243 5 97 0 0 30 0 49 0 25 93404 788235 xpl xpl spl spl xpl upl 1 2 3 1 3 1 flpspl invspl 1 1 2 1 1 1 0 0 xxx tors item_platearmor 12 item_platearmor 0 0 5 0 0 0 0 2 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 8 0 xxx xxx 1 0 +Templar Coat 0 0 4 1 252 274 10 118 0 0 60 0 52 0 25 111395 1017928 xlt xlt plt plt xlt ult 1 2 3 1 3 1 flpplt invplt 2 2 2 2 1 1 0 0 xxx tors item_platearmor 12 item_platearmor 0 0 5 0 0 0 0 2 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 8 8 0 xxx xxx 1 0 +Sharktooth Armor 0 0 4 1 242 258 5 103 0 0 48 0 55 0 25 111674 1103159 xld xld fld fld xld uld 1 2 3 1 3 1 flpfld invfld 1 1 2 2 2 2 0 0 xxx tors item_platearmor 12 item_platearmor 0 0 5 0 0 0 0 2 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 8 8 0 xxx xxx 1 0 +Embossed Plate 0 0 4 1 282 303 5 125 0 0 55 0 58 0 25 137817 1457493 xth xth gth gth xth uth 1 2 3 1 4 1 flpgth invgth 2 2 1 2 2 2 0 0 xxx tors item_platearmor 12 item_platearmor 0 0 5 0 0 0 0 2 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 8 8 0 xxx xxx 1 0 +Chaos Armor 0 0 4 1 315 342 10 140 0 0 70 0 61 0 25 162672 1888411 xul xul ful ful xul uul 1 2 3 1 4 1 flpful invful 2 2 2 2 2 2 0 0 xxx tors item_platearmor 12 item_platearmor 0 0 5 0 0 0 0 2 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 8 8 0 xxx xxx 1 0 +Ornate Armor 0 0 4 1 417 450 5 170 0 0 60 0 64 0 25 225120 2696482 xar xar aar aar xar uar 1 2 3 1 4 1 flpaar invaar invxaru invxaru 1 2 2 2 2 0 0 0 xxx tors item_platearmor 12 item_platearmor 0 0 5 0 0 0 0 2 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 8 8 0 xxx xxx 1 0 +Mage Plate 0 0 4 1 225 261 0 55 0 0 60 0 60 0 25 118407 1327498 xtp xtp ltp ltp xtp utp 1 2 3 1 3 1 flpltp invltp 2 0 1 1 2 2 0 0 xxx tors item_platearmor 12 item_platearmor 0 0 5 0 0 0 0 2 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 7 8 0 xxx xxx 1 0 +Defender 0 0 2 1 41 49 0 38 0 10 68 0 34 0 22 12562 77123 xuc xuc buc buc xuc uuc 7 2 2 1 1 2 flpbuc invbuc invbucu invbucu 0 0 xxx shie item_woodshield 12 item_woodshield 0 0 5 0 0 0 0 1 0 8 12 100 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 8 8 0 xxx xxx 1 0 +Round Shield 0 0 3 1 47 55 0 53 0 12 64 0 37 0 25 15451 103735 xml xml buc sml xml uml 7 2 2 1 2 2 flpsml invsml invxmlu invxmlu 0 0 xxx shie item_woodshield 12 item_woodshield 0 0 5 0 0 0 0 1 0 7 14 100 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 8 5 0 xxx xxx 1 0 +Scutum 0 0 4 1 53 61 5 71 0 14 62 0 42 0 25 19537 148359 xrg xrg lrg lrg xrg urg 7 2 3 1 3 2 flplrg invlrg invxrgu invxrgu 0 0 xxx shie item_metalshield 12 item_metalshield 0 0 5 0 0 0 0 1 0 11 15 100 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 8 2 0 xxx xxx 1 0 +Dragon Shield 0 0 4 1 59 67 0 91 0 18 76 0 45 0 25 23094 189944 xit xit kit kit xit uit 7 2 3 1 3 2 flpkit invkit invkitu invkitu 0 0 xxx shie item_metalshield 12 item_metalshield 0 0 5 0 0 0 0 1 0 15 24 100 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 8 2 0 xxx xxx 1 0 +Pavise 0 0 4 1 68 78 10 133 0 24 72 0 50 0 25 29550 278500 xow xow tow tow xow uow 7 2 3 1 3 2 flptow invtow invtowu invtowu 0 0 xxx shie item_metalshield 12 item_metalshield 0 0 5 0 0 0 0 1 0 10 17 100 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 8 2 0 xxx xxx 1 0 +Ancient Shield 0 0 4 1 80 93 5 110 0 16 80 0 56 0 25 39220 422340 xts xts kit gts xts uts 7 2 4 1 3 2 flpgts invgts invgtsu invgtsu 0 0 xxx shie item_metalshield 12 item_metalshield 0 0 5 0 0 0 0 1 0 12 16 100 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 8 2 0 xxx xxx 1 0 +Demonhide Gloves 0 0 1 1 28 35 0 20 0 0 12 0 33 0 21 8480 64102 xlg xlg lgl lgl xlg ulg 16 2 2 0 0 0 flplgl invlgl 0 0 xxx glov item_gloves 12 item_gloves 0 0 5 0 0 0 0 5 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 8 0 xxx xxx 1 0 +Sharkskin Gloves 0 0 1 1 33 39 0 20 0 0 14 0 39 0 25 11420 85063 xvg xvg vgl vgl xvg uvg 16 2 2 0 0 0 flpvgl invvgl 0 0 xxx glov item_gloves 12 item_gloves 0 0 5 0 0 0 0 5 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 8 0 xxx xxx 1 0 +Heavy Bracers 0 0 2 1 37 44 0 58 0 0 16 0 43 0 25 14111 114806 xmg xmg mgl mgl xmg umg 16 2 2 0 0 0 flpmgl invmgl 0 0 xxx glov item_gloveschain 12 item_gloveschain 0 0 5 0 0 0 0 5 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 8 0 xxx xxx 1 0 +Battle Gauntlets 0 0 3 1 39 47 0 88 0 0 18 0 49 0 25 16913 161025 xtg xtg mgl tgl xtg utg 16 2 2 0 0 0 flptgl invtgl 0 0 xxx glov item_glovesmetal 12 item_glovesmetal 0 0 5 0 0 0 0 5 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 8 0 xxx xxx 1 0 +War Gauntlets 0 0 4 1 43 53 0 110 0 0 24 0 54 0 25 20900 223744 xhg xhg hgl hgl xhg uhg 16 2 2 0 0 0 flphgl invhgl 0 0 xxx glov item_glovesmetal 12 item_glovesmetal 0 0 5 0 0 0 0 5 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 8 0 xxx xxx 1 0 +Demonhide Boots 0 0 1 1 28 35 0 20 0 0 12 0 36 0 24 9230 64102 xlb xlb lbt lbt xlb ulb 16 2 2 0 0 0 flplbt invlbt 0 0 xxx boot item_boots 12 item_boots 0 0 5 0 0 0 0 6 0 26 46 120 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 8 0 xxx xxx 1 0 +Sharkskin Boots 0 0 1 1 33 39 0 47 0 0 14 0 39 0 25 11393 84859 xvb xvb vbt vbt xvb uvb 16 2 2 0 0 0 flpvbt invvbt 0 0 xxx boot item_boots 12 item_boots 0 0 5 0 0 0 0 6 0 28 50 120 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 8 0 xxx xxx 1 1 +Mesh Boots 0 0 2 1 37 44 0 65 0 0 16 0 43 0 25 14103 114742 xmb xmb mbt mbt xmb umb 16 2 2 0 0 0 flpmbt invmbt 0 0 xxx boot item_bootschain 12 item_bootschain 0 0 5 0 0 0 0 6 0 23 52 120 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 8 0 xxx xxx 1 1 +Battle Boots 0 0 3 1 39 47 0 95 0 0 18 0 49 0 25 16905 160950 xtb xtb mbt tbt xtb utb 16 2 2 0 0 0 flptbt invtbt 0 0 xxx boot item_bootsmetal 12 item_bootsmetal 0 0 5 0 0 0 0 6 0 37 64 120 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 8 0 xxx xxx 1 1 +War Boots 0 0 4 1 43 53 0 125 0 0 24 0 54 0 25 20885 223574 xhb xhb hbt hbt xhb uhb 16 2 2 0 0 0 flphbt invhbt 0 0 xxx boot item_bootsmetal 12 item_bootsmetal 0 0 5 0 0 0 0 6 0 39 80 120 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 8 0 xxx xxx 1 1 +Demonhide Sash 0 0 1 1 29 34 0 20 0 0 12 0 36 0 24 9304 64486 zlb zlb lbl lbl zlb ulc 16 2 1 0 0 0 flplbl invlbl 0 0 xxx belt item_lightarmor 12 item_lightarmor 0 0 5 0 0 6 0 4 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 8 0 xxx xxx 1 1 +Sharkskin Belt 0 0 1 1 31 36 0 20 0 0 14 0 39 0 25 10700 80809 zvb zvb vbl vbl zvb uvc 16 2 1 0 0 0 flpvbl invvbl 0 0 xxx belt item_belt 12 item_belt 0 0 5 0 0 6 0 4 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 8 0 xxx xxx 1 1 +Mesh Belt 0 0 2 1 35 40 0 58 0 0 16 0 43 0 25 13143 108261 zmb zmb mbl mbl zmb umc 16 2 1 0 0 0 flpmbl invmbl 0 0 xxx belt item_belt 12 item_belt 0 0 5 0 0 6 0 4 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 8 0 xxx xxx 1 0 +Battle Belt 0 0 2 1 37 42 0 88 0 0 18 0 49 0 25 15713 151185 ztb ztb mbl tbl ztb utc 16 2 1 0 0 0 flptbl invtbl 0 0 xxx belt item_belt 12 item_belt 0 0 5 0 0 6 0 4 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 8 0 xxx xxx 1 0 +War Belt 0 0 3 1 41 52 0 110 0 0 24 0 54 0 25 20350 218512 zhb zhb hbl hbl zhb uhc 16 2 1 0 0 0 flphbl invhbl 0 0 xxx belt item_belt 12 item_belt 0 0 5 0 0 6 0 4 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 8 0 xxx xxx 1 0 +Grim Helm 0 0 2 1 60 125 0 58 0 0 40 0 50 0 25 37683 348947 xh9 xh9 bhm bhm xh9 uh9 0 2 2 1 2 1 flpbhm invbhm invbhmu invbhmu 0 0 xxx helm item_helm 12 item_helm 0 0 5 0 2 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 7 8 0 xxx xxx 1 0 +Grim Shield 0 0 2 1 50 150 0 58 0 20 70 0 48 0 25 39143 337523 xsh xsh bsh bsh xsh ush 7 2 3 1 2 2 flpbsh invbsh invxshu invxshu 0 0 xxx shie item_metalshield 12 item_metalshield 0 0 5 0 0 0 0 1 0 14 20 100 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 8 8 0 xxx xxx 1 0 +Barbed Shield 0 0 3 1 58 78 0 65 0 17 55 0 42 0 25 23155 172324 xpk xpk spk spk xpk upk 7 2 3 1 2 2 flpspk invspk invxpku invxpku 0 0 xxx shie item_metalshield 12 item_metalshield 0 0 5 0 0 0 0 1 0 18 35 100 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 8 8 0 xxx xxx 1 0 +Expansion +Wolf Head 100 0 1 1 8 11 0 16 0 0 20 0 4 0 3 364 4868 dr1 dr1 dr1 dr1 dr6 drb 0 2 2 1 3 1 flpdr1 invdr1 0 0 xxx pelt item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 20 255 8 8 0 xxx xxx 1 0 +Hawk Helm 100 0 1 1 4 15 0 20 0 0 20 0 8 0 6 664 7840 dr2 dr2 dr4 dr2 dr7 drc 0 2 2 1 3 1 flpdr4 invdr2 0 0 xxx pelt item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 20 255 8 8 0 xxx xxx 1 0 +Antlers 100 0 1 1 18 24 0 24 0 0 20 0 16 0 12 2832 21852 dr3 dr3 dr3 dr3 dr8 drd 0 2 2 1 3 1 flpdr3 invdr3 0 0 xxx pelt item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 20 255 8 8 0 xxx xxx 1 0 +Falcon Mask 100 0 1 1 12 28 0 28 0 0 20 0 20 0 15 3332 29200 dr4 dr4 dr4 dr4 dr9 dre 0 2 2 1 3 1 flpdr4 invdr4 0 0 xxx pelt item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 20 255 8 8 0 xxx xxx 1 0 +Spirit Mask 100 0 1 1 22 35 0 30 0 0 20 0 24 0 18 5670 48550 dr5 dr5 dr1 dr5 dra drf 0 2 2 1 3 1 flpdr1 invdr5 0 0 xxx pelt item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 8 8 0 xxx xxx 1 0 +Jawbone Cap 100 0 2 1 10 15 0 25 0 0 25 0 4 0 3 320 4750 ba1 ba1 ba1 ba1 ba6 bab 0 2 2 1 3 1 flpba1 invba1 0 0 xxx phlm item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 20 255 5 8 0 xxx xxx 1 0 +Fanged Helm 100 0 2 1 15 20 0 35 0 0 35 0 8 0 6 750 8250 ba2 ba2 ba1 ba2 ba7 bac 0 2 2 1 3 1 flpba1 invba2 0 0 xxx phlm item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 20 255 5 8 0 xxx xxx 1 0 +Horned Helm 100 0 2 1 25 30 0 45 0 0 45 0 16 0 12 2750 20750 ba3 ba3 ba3 ba3 ba8 bad 0 2 2 1 3 1 flpba3 invba3 0 0 xxx phlm item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 20 255 5 8 0 xxx xxx 1 0 +Assault Helmet 100 0 2 1 30 35 0 55 0 0 50 0 20 0 15 3420 29360 ba4 ba4 ba5 ba4 ba9 bae 0 2 2 1 3 1 flpba5 invba4 0 0 xxx phlm item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 20 255 5 8 0 xxx xxx 1 0 +Avenger Guard 100 0 2 1 35 50 0 65 0 0 55 0 24 0 18 5785 49280 ba5 ba5 ba5 ba5 baa baf 0 2 2 1 3 1 flpba5 invba5 0 0 xxx phlm item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Targe 100 0 2 1 8 12 0 16 0 10 20 0 4 0 3 384 6317 pa1 pa1 304 pa1 pa1 pa6 pab 7 2 2 1 4 2 flppa1 invpa1 0 0 xxx ashd item_metalshield 12 item_metalshield 0 0 5 0 1 0 0 1 0 2 6 100 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 20 255 0 0 0 xxx xxx 1 0 +Rondache 100 0 2 1 10 18 0 26 0 15 30 0 8 0 6 982 10517 pa2 pa2 304 pa1 pa2 pa7 pac 7 2 2 1 4 2 flppa1 invpa2 0 0 xxx ashd item_metalshield 12 item_metalshield 0 0 5 0 2 0 0 1 0 2 8 100 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 20 255 0 0 0 xxx xxx 1 0 +Heraldic Shield 100 0 2 1 16 26 0 40 0 20 40 0 16 0 12 2816 21240 pa3 pa3 304 pa3 pa3 pa8 pad 7 2 4 1 4 2 flppa3 invpa3 0 0 xxx ashd item_metalshield 12 item_metalshield 0 0 5 0 3 0 0 1 0 3 9 100 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 20 255 0 0 0 xxx xxx 1 0 +Aerin Shield 100 0 2 1 26 36 0 50 0 22 50 0 20 0 15 5158 43557 pa4 pa4 304 pa3 pa4 pa9 pae 7 2 4 1 4 2 flppa3 invpa4 0 0 xxx ashd item_metalshield 12 item_metalshield 0 0 5 0 4 0 0 1 0 4 10 100 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 20 255 0 0 0 xxx xxx 1 0 +Crown Shield 100 0 2 1 30 40 0 65 0 25 60 0 24 0 18 6935 82075 pa5 pa5 304 pa5 pa5 paa paf 7 2 2 1 4 2 flppa5 invpa5 0 0 xxx ashd item_metalshield 12 item_metalshield 0 0 5 0 5 0 0 1 0 4 12 100 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 0 +Preserved Head 100 0 1 1 2 5 0 12 0 3 20 0 4 0 3 128 4628 ne1 ne1 305 ne1 ne1 ne6 neb 10 2 2 1 2 2 flpne1 invne1 0 0 xxx head item_head 12 item_head 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 20 255 1 0 0 xxx xxx 1 0 +Zombie Head 100 0 1 1 4 8 0 14 0 5 20 0 8 0 6 418 7336 ne2 ne2 305 ne2 ne2 ne7 neg 10 2 2 1 2 2 flpne2 invne2 0 0 xxx head item_head 12 item_head 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 20 255 1 0 0 xxx xxx 1 0 +Unraveller Head 100 0 1 1 6 10 0 18 0 8 20 0 16 0 12 1070 14780 ne3 ne3 305 ne3 ne3 ne8 ned 10 2 2 1 2 2 flpne3 invne3 0 0 xxx head item_head 12 item_head 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 20 255 1 0 0 xxx xxx 1 0 +Gargoyle Head 100 0 1 1 10 16 0 20 0 10 20 0 20 0 15 2164 23320 ne4 ne4 305 ne3 ne4 ne9 nee 10 2 2 1 2 2 flpne3 invne4 0 0 xxx head item_head 12 item_head 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 20 255 1 0 0 xxx xxx 1 0 +Demon Head 100 0 1 1 15 20 0 25 0 12 20 0 24 0 18 3475 35350 ne5 ne5 305 ne2 ne5 nea nef 10 2 2 1 2 2 flpne2 invne5 0 0 xxx head item_head 12 item_head 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 0 0 xxx xxx 1 0 +Circlet 100 0 1 1 20 30 0 0 0 0 35 0 24 0 16 12000 85625 ci0 ci0 3 lit ci0 ci2 ci3 0 2 2 1 2 1 flpci0 invci0 0 0 xxx circ item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 20 255 1 2 0 xxx xxx 1 0 +Coronet 100 0 1 1 30 40 0 0 0 0 30 0 52 0 39 23000 171250 ci1 ci1 8 lit ci1 ci2 ci3 0 2 2 1 2 1 flpci1 invci1 0 0 xxx circ item_helm 12 item_helm 0 0 5 0 1 0 0 3 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 20 255 1 2 0 xxx xxx 1 0 +Tiara 100 0 1 1 40 50 0 0 0 0 25 0 70 0 52 35000 700000 ci2 ci2 13 lit ci1 ci2 ci3 0 2 2 1 3 1 flpci1 invci2 0 0 xxx circ item_helm 12 item_helm 0 0 5 0 2 0 0 3 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Diadem 100 0 1 1 50 60 0 0 0 0 20 0 85 0 64 58000 1382500 ci3 ci3 18 lit ci1 ci2 ci3 0 2 2 1 3 1 flpci2 invci3 0 0 xxx circ item_helm 12 item_helm 0 0 5 0 3 0 0 3 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Shako 100 0 1 1 98 141 0 50 0 0 12 0 58 0 43 56307 503591 uap uap cap cap xap uap 0 2 2 1 2 1 flpcap invcap 0 0 xxx helm item_cap 12 item_cap 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 8 0 xxx xxx 1 0 +Hydraskull 100 0 4 1 101 145 0 84 0 0 18 0 63 0 47 62739 568276 ukp ukp skp skp xkp ukp 0 2 2 1 2 1 flpskp invskp 0 0 xxx helm item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 8 0 xxx xxx 1 0 +Armet 100 0 4 1 105 149 0 109 0 0 24 0 68 0 51 69940 671703 ulm ulm hlm hlm xlm ulm 0 2 2 1 2 1 flphlm invhlm invhlmu invhlmu 0 0 xxx helm item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 8 0 xxx xxx 1 0 +Giant Conch 100 0 4 1 110 154 0 142 0 0 30 0 54 0 40 57806 757863 uhl uhl fhl fhl xhl uhl 0 2 2 1 2 1 flpfhl invfhl invfhlu invfhlu 0 0 xxx helm item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 8 0 xxx xxx 1 0 +Spired Helm 100 0 4 1 114 159 0 192 0 0 40 0 79 0 59 87168 920880 uhm uhm ghm ghm xhm uhm 0 2 2 1 3 1 flpghm invghm invuhms 0 0 xxx helm item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 7 8 0 xxx xxx 1 0 +Corona 100 0 4 1 111 165 0 174 0 0 50 0 85 0 66 94770 1042170 urn urn crn crn xrn urn 0 2 2 1 3 1 flpcrn invcrn 0 0 xxx helm item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 8 0 xxx xxx 1 0 +Demonhead 100 0 4 1 101 154 0 102 0 0 20 0 74 0 55 76578 799703 usk usk msk msk xsk usk 0 2 2 1 3 1 flpmsk invmsk 0 0 xxx helm item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Dusk Shroud 100 0 1 1 361 467 0 77 0 0 20 0 65 0 49 218357 1685148 uui uui qlt qui xui uui 1 2 3 1 4 1 flpqlt invqlt 0 0 0 0 1 1 0 0 xxx tors item_lightarmor 12 item_lightarmor 0 0 5 0 0 0 0 2 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 8 0 xxx xxx 1 0 +Wyrmhide 100 0 2 1 364 470 0 84 0 0 24 0 67 0 50 226927 1785276 uea uea lea lea xea uea 1 2 3 1 4 1 flplea invlea 0 0 1 0 1 1 0 0 xxx tors item_lightarmor 12 item_lightarmor 0 0 5 0 0 0 0 2 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 8 0 xxx xxx 1 0 +Scarab Husk 100 0 3 1 369 474 0 95 0 0 28 0 68 0 51 232573 1891607 ula ula hla hla xla ula 1 2 3 1 4 1 flphla invhla 1 1 1 0 1 1 0 0 xxx tors item_lightarmor 12 item_lightarmor 0 0 5 0 0 0 0 2 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 8 0 xxx xxx 1 0 +Wire Fleece 100 0 4 1 375 481 0 111 0 0 32 0 70 0 53 243050 2059887 utu utu stu stu xtu utu 1 2 3 1 4 1 flpstu invstu 1 0 0 1 1 1 0 0 xxx tors item_lightarmor 12 item_lightarmor 0 0 5 0 0 0 0 2 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 8 0 xxx xxx 1 0 +Diamond Mail 100 0 4 1 383 489 5 131 0 0 26 0 72 0 54 254435 2243423 ung ung rng rng xng ung 1 2 3 1 4 1 flprng invrng 0 0 1 1 1 1 0 0 xxx tors item_chainarmor 12 item_chainarmor 0 0 5 0 0 0 0 2 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 8 0 xxx xxx 1 0 +Loricated Mail 100 0 4 1 390 496 10 149 0 0 36 0 73 0 55 262166 2382039 ucl ucl scl scl xcl ucl 1 2 3 1 4 1 flpscl invscl 1 1 1 1 1 1 0 0 xxx tors item_chainarmor 12 item_chainarmor 0 0 5 0 0 0 0 2 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 8 0 xxx xxx 1 0 +Boneweave 100 0 4 1 399 505 5 158 0 0 45 0 62 0 47 227700 2536340 uhn uhn chn chn xhn uhn 1 2 3 1 4 1 flpchn invchn 1 1 1 1 2 2 0 0 xxx tors item_chainarmor 12 item_chainarmor 0 0 5 0 0 0 0 2 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 8 0 xxx xxx 1 0 +Great Hauberk 100 0 4 1 395 501 0 118 0 0 50 0 75 0 56 272206 2676189 urs urs brs brs xrs urs 1 2 3 1 4 1 flpbrs invbrs 0 0 2 0 2 2 0 0 xxx tors item_platearmor 12 item_platearmor 0 0 5 0 0 0 0 2 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 8 0 xxx xxx 1 0 +Balrog Skin 100 0 4 1 410 517 5 165 0 0 30 0 76 0 57 285351 2882894 upl upl spl spl xpl upl 1 2 3 1 4 1 flpspl invspl 1 1 2 1 1 1 0 0 xxx tors item_platearmor 12 item_platearmor 0 0 5 0 0 0 0 2 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 8 0 xxx xxx 1 0 +Hellforge Plate 100 0 4 1 421 530 10 196 0 0 60 0 78 0 59 300130 3197721 ult ult plt plt xlt ult 1 2 3 1 4 1 flpplt invplt 2 2 2 2 1 1 0 0 xxx tors item_platearmor 12 item_platearmor 0 0 5 0 0 0 0 2 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 8 8 0 xxx xxx 1 0 +Kraken Shell 100 0 4 1 417 523 5 174 0 0 48 0 81 0 61 308015 3411990 uld uld fld fld xld uld 1 2 3 1 4 1 flpfld invfld 1 1 2 2 2 2 0 0 xxx tors item_platearmor 12 item_platearmor 0 0 5 0 0 0 0 2 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 8 8 0 xxx xxx 1 0 +Lacquered Plate 100 0 4 1 433 541 5 208 0 0 55 0 82 0 62 323094 3803464 uth uth gth gth xth uth 1 2 3 1 4 1 flpgth invgth 2 2 1 2 2 2 0 0 xxx tors item_platearmor 12 item_platearmor 0 0 5 0 0 0 0 2 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 8 8 0 xxx xxx 1 0 +Shadow Plate 100 0 4 1 446 557 10 230 0 0 70 0 83 0 64 336644 4274953 uul uul ful ful xul uul 1 2 3 1 4 1 flpful invful 2 2 2 2 2 2 0 0 xxx tors item_platearmor 12 item_platearmor 0 0 5 0 0 0 0 2 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 8 8 0 xxx xxx 1 0 +Sacred Armor 100 0 4 1 487 600 5 232 0 0 60 0 85 0 66 373558 4872212 uar uar aar aar xar uar 1 2 3 1 4 1 flpaar invaar invaaru invaaru 1 2 2 2 2 0 0 0 xxx tors item_platearmor 12 item_platearmor 0 0 5 0 0 0 0 2 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 8 8 0 xxx xxx 1 0 +Archon Plate 100 0 4 1 410 524 0 103 0 0 60 0 84 0 63 317526 3851372 utp utp ltp ltp xtp utp 1 2 3 1 4 1 flpltp invltp 2 0 1 1 2 2 0 0 xxx tors item_platearmor 12 item_platearmor 0 0 5 0 0 0 0 2 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 7 8 0 xxx xxx 1 0 +Heater 100 0 2 1 95 110 0 77 0 22 88 0 58 0 43 48303 385227 uuc uuc buc buc xuc uuc 7 2 2 1 2 2 flpbuc invbuc invbucu invbucu 0 0 xxx shie item_woodshield 12 item_woodshield 0 0 5 0 0 0 0 1 0 16 30 100 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 8 8 0 xxx xxx 1 0 +Luna 100 0 3 1 108 123 0 100 0 20 84 0 61 0 45 57189 436543 uml uml buc sml xml uml 7 2 2 1 2 2 flpsml invsml invsmlu invsmlu 0 0 xxx shie item_woodshield 12 item_woodshield 0 0 5 0 0 0 0 1 0 17 29 100 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 8 5 0 xxx xxx 1 0 +Hyperion 100 0 4 1 119 135 5 127 0 24 82 0 64 0 48 65914 514278 urg urg lrg lrg xrg urg 7 2 3 1 3 2 flplrg invlrg invlrgu invlrgu 0 0 xxx shie item_metalshield 12 item_metalshield 0 0 5 0 0 0 0 1 0 14 32 100 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 8 2 0 xxx xxx 1 0 +Monarch 100 0 4 1 133 148 0 156 0 22 86 0 72 0 54 81896 576154 uit uit kit kit xit uit 7 2 3 1 4 2 flpkit invkit invkitu invkitu 0 0 xxx shie item_metalshield 12 item_metalshield 0 0 5 0 0 0 0 1 0 12 34 100 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 8 2 0 xxx xxx 1 0 +Aegis 100 0 4 1 145 161 10 219 0 24 92 0 79 0 59 97701 693568 uow uow tow tow xow uow 7 2 3 1 4 2 flptow invtow invtowu invtowu 0 0 xxx shie item_metalshield 12 item_metalshield 0 0 5 0 0 0 0 1 0 18 28 100 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 8 2 0 xxx xxx 1 0 +Ward 100 0 4 1 153 170 5 185 0 24 100 0 84 0 63 109635 856602 uts uts kit gts xts uts 7 2 4 1 4 2 flpgts invgts invgtsu invutss 0 0 xxx shie item_metalshield 12 item_metalshield 0 0 5 0 0 0 0 1 0 11 35 100 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 8 2 0 xxx xxx 1 0 +Bramble Mitts 100 0 1 1 54 62 0 50 0 0 12 0 57 0 42 26920 269938 ulg ulg lgl lgl xlg ulg 16 2 2 0 0 0 flplgl invlgl 0 0 xxx glov item_gloves 12 item_gloves 0 0 5 0 0 0 0 5 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 8 0 xxx xxx 1 0 +Vampirebone Gloves 100 0 1 1 56 65 0 50 0 0 14 0 63 0 47 30862 306103 uvg uvg vgl vgl xvg uvg 16 2 2 0 0 0 flpvgl invvgl 0 0 xxx glov item_gloves 12 item_gloves 0 0 5 0 0 0 0 5 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 8 0 xxx xxx 1 0 +Vambraces 100 0 2 1 59 67 0 106 0 0 16 0 69 0 51 34964 352152 umg umg mgl mgl xmg umg 16 2 2 0 0 0 flpmgl invmgl 0 0 xxx glov item_gloveschain 12 item_gloveschain 0 0 5 0 0 0 0 5 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 8 0 xxx xxx 1 0 +Crusader Gauntlets 100 0 3 1 59 68 0 151 0 0 18 0 76 0 57 39119 420620 utg utg mgl tgl xtg utg 16 2 2 0 0 0 flptgl invtgl 0 0 xxx glov item_glovesmetal 12 item_glovesmetal 0 0 5 0 0 0 0 5 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 8 0 xxx xxx 1 0 +Ogre Gauntlets 100 0 4 1 62 71 0 185 0 0 24 0 85 0 64 45481 498191 uhg uhg hgl hgl xhg uhg 16 2 2 0 0 0 flphgl invhgl 0 0 xxx glov item_glovesmetal 12 item_glovesmetal 0 0 5 0 0 0 0 5 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 8 0 xxx xxx 1 0 +Wyrmhide Boots 100 0 1 1 54 62 0 50 0 0 12 0 60 0 45 28315 269938 ulb ulb lbt lbt xlb ulb 16 2 2 0 0 0 flplbt invlbt 0 0 xxx boot item_boots 12 item_boots 0 0 5 0 0 0 0 6 0 65 100 120 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 8 0 xxx xxx 1 0 +Scarabshell Boots 100 0 1 1 56 65 0 91 0 0 14 0 66 0 49 32271 305620 uvb uvb vbt vbt xvb uvb 16 2 2 0 0 0 flpvbt invvbt 0 0 xxx boot item_boots 12 item_boots 0 0 5 0 0 0 0 6 0 60 110 120 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 8 0 xxx xxx 1 0 +Boneweave Boots 100 0 2 1 59 67 0 118 0 0 16 0 72 0 54 36456 352010 umb umb mbt mbt xmb umb 16 2 2 0 0 0 flpmbt invmbt 0 0 xxx boot item_bootschain 12 item_bootschain 0 0 5 0 0 0 0 6 0 69 118 120 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 8 0 xxx xxx 1 0 +Mirrored Boots 100 0 3 1 59 68 0 163 0 0 18 0 81 0 60 41658 420465 utb utb mbt tbt xtb utb 16 2 2 0 0 0 flptbt invtbt 0 0 xxx boot item_bootsmetal 12 item_bootsmetal 0 0 5 0 0 0 0 6 0 50 145 120 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 8 0 xxx xxx 1 0 +Myrmidon Greaves 100 0 4 1 62 71 0 208 0 0 24 0 85 0 65 45459 497859 uhb uhb hbt hbt xhb uhb 16 2 2 0 0 0 flphbt invhbt 0 0 xxx boot item_bootsmetal 12 item_bootsmetal 0 0 5 0 0 0 0 6 0 83 149 120 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 8 0 xxx xxx 1 0 +Spiderweb Sash 100 0 1 1 55 62 0 50 0 0 12 0 61 0 46 28842 270466 ulc ulc lbl lbl zlb ulc 16 2 1 0 0 0 flplbl invlbl 0 0 xxx belt item_lightarmor 12 item_lightarmor 0 0 5 0 0 6 0 4 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 8 0 xxx xxx 1 0 +Vampirefang Belt 100 0 1 1 56 63 0 50 0 0 14 0 68 0 51 32656 300879 uvc uvc vbl vbl zvb uvc 16 2 1 0 0 0 flpvbl invvbl 0 0 xxx belt item_belt 12 item_belt 0 0 5 0 0 6 0 4 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 8 0 xxx xxx 1 0 +Mithril Coil 100 0 2 1 58 65 0 106 0 0 16 0 75 0 56 37134 345000 umc umc mbl mbl zmb umc 16 2 1 0 0 0 flpmbl invmbl 0 0 xxx belt item_belt 12 item_belt 0 0 5 0 0 6 0 4 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 8 0 xxx xxx 1 0 +Troll Belt 100 0 2 1 59 66 0 151 0 0 18 0 82 0 62 41183 411380 utc utc mbl tbl ztb utc 16 2 1 0 0 0 flptbl invtbl 0 0 xxx belt item_belt 12 item_belt 0 0 5 0 0 6 0 4 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 8 0 xxx xxx 1 0 +Colossus Girdle 100 0 3 1 61 71 0 185 0 0 24 0 85 0 67 45051 493775 uhc uhc hbl hbl zhb uhc 16 2 1 0 0 0 flphbl invhbl 0 0 xxx belt item_belt 12 item_belt 0 0 5 0 0 6 0 4 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 8 0 xxx xxx 1 0 +Bone Visage 100 0 2 1 100 157 0 106 0 0 40 0 84 0 63 87274 598161 uh9 uh9 bhm bhm xh9 uh9 0 2 2 1 3 1 flpbhm invbhm invbhmu invbhmu 0 0 xxx helm item_helm 12 item_helm 0 0 5 0 2 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 7 8 0 xxx xxx 1 0 +Troll Nest 100 0 2 1 158 173 0 106 0 20 74 0 76 0 57 101842 586580 ush ush bsh bsh xsh ush 7 2 3 1 3 2 flpbsh invbsh invbshu invbshu 0 0 xxx shie item_metalshield 12 item_metalshield 0 0 5 0 0 0 0 1 0 24 38 100 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 8 8 0 xxx xxx 1 0 +Blade Barrier 100 0 3 1 147 163 0 118 0 20 83 0 68 0 51 85443 413914 upk upk spk spk xpk upk 7 2 3 1 3 2 flpspk invspk invspku invspku 0 0 xxx shie item_metalshield 12 item_metalshield 0 0 5 0 0 0 0 1 0 26 40 100 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 8 8 0 xxx xxx 1 0 +Alpha Helm 100 0 1 1 52 62 0 44 0 0 20 0 35 0 26 16300 82061 dr6 dr6 dr1 dr1 dr6 drb 0 2 2 1 3 1 flpdr1 invdr1 0 0 xxx pelt item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 20 8 8 0 xxx xxx 1 0 +Griffon Headress 100 0 1 1 46 68 0 50 0 0 20 0 40 0 30 18564 82062 dr7 dr7 dr4 dr2 dr7 drc 0 2 2 1 3 1 flpdr4 invdr2 0 0 xxx pelt item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 20 8 8 0 xxx xxx 1 0 +Hunter's Guise 100 0 1 1 67 81 0 56 0 0 20 0 46 0 29 27768 82063 dr8 dr8 dr3 dr3 dr8 drd 0 2 2 1 3 1 flpdr3 invdr3 0 0 xxx pelt item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 8 8 0 xxx xxx 1 0 +Sacred Feathers 100 0 1 1 58 87 0 62 0 0 20 0 50 0 32 29518 82064 dr9 dr9 dr4 dr4 dr9 dre 0 2 2 1 3 1 flpdr4 invdr4 0 0 xxx pelt item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 8 8 0 xxx xxx 1 0 +Totemic Mask 100 0 1 1 73 98 0 65 0 0 20 0 55 0 41 38127 82065 dra dra dr1 dr5 dra drf 0 2 2 1 3 1 flpdr1 invdr5 0 0 xxx pelt item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 8 8 0 xxx xxx 1 0 +Jawbone Visor 100 0 2 1 55 68 0 58 0 0 25 0 33 0 25 16603 82061 ba6 ba6 ba1 ba1 ba6 bab 0 2 2 1 3 1 flpba1 invba1 0 0 xxx phlm item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 20 5 0 0 xxx xxx 1 0 +Lion Helm 100 0 2 1 63 75 0 73 0 0 35 0 38 0 29 21378 82062 ba7 ba7 ba1 ba2 ba7 bac 0 2 2 1 3 1 flpba1 invba2 0 0 xxx phlm item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 20 5 0 0 xxx xxx 1 0 +Rage Mask 100 0 2 1 78 90 0 88 0 0 45 0 44 0 29 30063 82063 ba8 ba8 ba3 ba3 ba8 bad 0 2 2 1 3 1 flpba3 invba3 0 0 xxx phlm item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 0 0 xxx xxx 1 0 +Savage Helmet 100 0 2 1 85 98 0 103 0 0 50 0 49 0 32 36398 82064 ba9 ba9 ba5 ba4 ba9 bae 0 2 2 1 3 1 flpba5 invba4 0 0 xxx phlm item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 0 0 xxx xxx 1 0 +Slayer Guard 100 0 2 1 93 120 0 118 0 0 55 0 54 0 40 46633 82065 baa baa ba5 ba5 baa baf 0 2 2 1 3 1 flpba5 invba5 0 0 xxx phlm item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 0 0 xxx xxx 1 0 +Akaran Targe 100 0 2 1 101 125 0 44 0 10 20 0 35 0 26 32500 82065 pa6 pa6 304 pa1 pa1 pa6 pab 7 2 2 1 4 2 flppa1 invpa1 0 0 xxx ashd item_metalshield 12 item_metalshield 0 0 5 0 1 0 0 1 0 12 16 100 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 20 0 0 0 xxx xxx 1 0 +Akaran Rondache 100 0 2 1 113 137 0 59 0 15 30 0 40 0 30 40941 82066 pa7 pa7 304 pa1 pa2 pa7 pac 7 2 2 1 4 2 flppa1 invpa2 0 0 xxx ashd item_metalshield 12 item_metalshield 0 0 5 0 2 0 0 1 0 15 20 100 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 20 0 0 0 xxx xxx 1 0 +Protector Shield 100 0 2 1 129 153 0 69 0 20 40 0 46 0 34 52947 82067 pa8 pa8 304 pa3 pa3 pa8 pad 7 2 4 1 4 2 flppa3 invpa3 0 0 xxx ashd item_metalshield 12 item_metalshield 0 0 5 0 3 0 0 1 0 18 24 100 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 0 +Gilded Shield 100 0 2 1 144 168 0 89 0 22 50 0 51 0 38 64807 82068 pa9 pa9 304 pa3 pa4 pa9 pae 7 2 4 1 4 2 flppa3 invpa4 0 0 xxx ashd item_metalshield 12 item_metalshield 0 0 5 0 4 0 0 1 0 20 28 100 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 0 +Royal Shield 100 0 2 1 156 181 0 114 0 25 60 0 55 0 41 75374 82069 paa paa 304 pa5 pa5 paa paf 7 2 2 1 4 2 flppa5 invpa5 0 0 xxx ashd item_metalshield 12 item_metalshield 0 0 5 0 5 0 0 1 0 24 32 100 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 0 +Mummified Trophy 100 0 1 1 38 48 0 38 0 3 20 0 33 0 24 11590 82069 ne6 ne6 305 ne1 ne1 ne6 neb 10 2 2 1 2 2 flpne1 invne1 0 0 xxx head item_head 12 item_head 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 20 1 0 0 xxx xxx 1 0 +Fetish Trophy 100 0 1 1 41 52 0 41 0 5 20 0 39 0 29 14839 82070 ne7 ne7 305 ne2 ne2 ne7 neg 10 2 2 1 2 2 flpne2 invne2 0 0 xxx head item_head 12 item_head 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 20 1 0 0 xxx xxx 1 0 +Sexton Trophy 100 0 1 1 44 55 0 47 0 8 20 0 45 0 33 18169 82071 ne8 ne8 305 ne3 ne3 ne8 ned 10 2 2 1 2 2 flpne3 invne3 0 0 xxx head item_head 12 item_head 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 0 0 xxx xxx 1 0 +Cantor Trophy 100 0 1 1 50 64 0 50 0 10 20 0 49 0 36 22750 82072 ne9 ne9 305 ne3 ne4 ne9 nee 10 2 2 1 2 2 flpne3 invne4 0 0 xxx head item_head 12 item_head 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 0 0 xxx xxx 1 0 +Heirophant Trophy 100 0 1 1 58 70 0 58 0 12 20 0 54 0 40 27993 82073 nea nea 305 ne2 ne5 nea nef 10 2 2 1 2 2 flpne2 invne5 0 0 xxx head item_head 12 item_head 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 0 0 xxx xxx 1 0 +Blood Spirit 100 0 1 1 101 145 0 86 0 0 20 0 62 0 46 61755 413914 drb drb dr1 dr1 dr6 drb 0 2 2 1 3 1 flpdr1 invdr1 0 0 xxx pelt item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 8 8 0 xxx xxx 1 0 +Sun Spirit 100 0 1 1 98 147 0 95 0 0 20 0 69 0 51 68617 413915 drc drc dr4 dr2 dr7 drc 0 2 2 1 3 1 flpdr4 invdr2 0 0 xxx pelt item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 8 8 0 xxx xxx 1 0 +Earth Spirit 100 0 1 1 107 152 0 104 0 0 20 0 76 0 57 79730 413916 drd drd dr3 dr3 dr8 drd 0 2 2 1 3 1 flpdr3 invdr3 0 0 xxx pelt item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 8 8 0 xxx xxx 1 0 +Sky Spirit 100 0 1 1 103 155 0 113 0 0 20 0 83 0 62 86575 413917 dre dre dr4 dr4 dr9 dre 0 2 2 1 3 1 flpdr4 invdr4 0 0 xxx pelt item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 8 8 0 xxx xxx 1 0 +Dream Spirit 100 0 1 1 109 159 0 118 0 0 20 0 85 0 66 92143 413918 drf drf dr1 dr5 dra drf 0 2 2 1 3 1 flpdr1 invdr5 0 0 xxx pelt item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 8 8 0 xxx xxx 1 0 +Carnage Helm 100 0 2 1 102 147 0 106 0 0 25 0 60 0 45 60650 413918 bab bab ba1 ba1 ba6 bab 0 2 2 1 3 1 flpba1 invba1 0 0 xxx phlm item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 0 0 xxx xxx 1 0 +Fury Visor 100 0 2 1 105 150 0 129 0 0 35 0 66 0 49 68211 413919 bac bac ba1 ba2 ba7 bac 0 2 2 1 3 1 flpba1 invba2 0 0 xxx phlm item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 0 0 xxx xxx 1 0 +Destroyer Helm 100 0 2 1 111 156 0 151 0 0 45 0 73 0 54 78881 413920 bad bad ba3 ba3 ba8 bad 0 2 2 1 3 1 flpba3 invba3 0 0 xxx phlm item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 0 0 xxx xxx 1 0 +Conqueror Crown 100 0 2 1 114 159 0 174 0 0 50 0 80 0 60 88278 413921 bae bae ba5 ba4 ba9 bae 0 2 2 1 3 1 flpba5 invba4 0 0 xxx phlm item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 0 0 xxx xxx 1 0 +Guardian Crown 100 0 2 1 117 168 0 196 0 0 55 0 85 0 65 97844 413922 baf baf ba5 ba5 baa baf 0 2 2 1 3 1 flpba5 invba5 0 0 xxx phlm item_helm 12 item_helm 0 0 5 0 0 0 0 3 0 0 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 0 0 xxx xxx 1 0 +Sacred Targe 100 0 2 1 126 158 0 86 0 30 45 0 63 0 47 72618 82065 pab pab 304 pa1 pa1 pa6 pab 7 2 2 1 4 2 flppa1 invpa1 0 0 xxx ashd item_metalshield 12 item_metalshield 0 0 5 0 1 0 0 1 0 22 70 100 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 0 +Sacred Rondache 100 0 2 1 138 164 0 109 0 28 68 0 70 0 52 85659 82066 pac pac 304 pa1 pa2 pa7 pac 7 2 2 1 4 2 flppa1 invpa2 0 0 xxx ashd item_metalshield 12 item_metalshield 0 0 5 0 2 0 0 1 0 35 58 100 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 0 +Ancient Shield 100 0 2 1 154 172 0 124 0 25 55 0 74 0 55 97676 82067 pad pad 304 pa3 pa3 pa8 pad 7 2 4 1 4 2 flppa3 invpa3 0 0 xxx ashd item_metalshield 12 item_metalshield 0 0 5 0 3 0 0 1 0 10 82 100 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 0 +Zakarum Shield 100 0 2 1 169 193 0 142 0 22 65 0 82 0 61 120042 82068 pae pae 304 pa3 pa4 pa9 pae 7 2 4 1 4 2 flppa3 invpa4 0 0 xxx ashd item_metalshield 12 item_metalshield 0 0 5 0 4 0 0 1 0 46 46 100 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 0 +Vortex Shield 100 0 2 1 182 225 0 148 0 19 90 0 85 0 66 139860 82069 paf paf 304 pa5 pa5 paa paf 7 2 2 1 4 2 flppa5 invpa5 0 0 xxx ashd item_metalshield 12 item_metalshield 0 0 5 0 5 0 0 1 0 5 87 100 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 0 +Minion Skull 100 0 1 1 95 139 0 77 0 3 20 0 59 0 44 56131 82069 neb neb 305 ne1 ne1 ne6 neb 10 2 2 1 2 2 flpne1 invne1 0 0 xxx head item_head 12 item_head 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 0 0 xxx xxx 1 0 +Hellspawn Skull 100 0 1 1 96 141 0 82 0 5 20 0 67 0 50 64437 82070 neg neg 305 ne2 ne2 ne7 neg 10 2 2 1 2 2 flpne2 invne2 0 0 xxx head item_head 12 item_head 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 0 0 xxx xxx 1 0 +Overseer Skull 100 0 1 1 98 142 0 91 0 8 20 0 66 0 49 64122 82071 ned ned 305 ne3 ne3 ne8 ned 10 2 2 1 2 2 flpne3 invne3 0 0 xxx head item_head 12 item_head 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 0 0 xxx xxx 1 0 +Succubus Skull 100 0 1 1 100 146 0 95 0 10 20 0 81 0 60 80462 82072 nee nee 305 ne3 ne4 ne9 nee 10 2 2 1 2 2 flpne3 invne4 0 0 xxx head item_head 12 item_head 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 0 0 xxx xxx 1 0 +Bloodlord Skull 100 0 1 1 103 148 0 106 0 12 20 0 85 0 65 86238 82073 nef nef 305 ne2 ne5 nea nef 10 2 2 1 2 2 flpne2 invne5 0 0 xxx head item_head 12 item_head 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 0 0 xxx xxx 1 0 +Old Book 100 0 1 1 2 5 0 12 0 3 20 0 4 0 3 128 4628 wa1 wa1 306 wa1 wa1 wa6 wab 10 2 2 1 2 2 flpbbb invbbb 0 0 xxx grim item_book 12 item_book 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 20 255 1 0 0 xxx xxx 1 0 +Tome 100 0 1 1 4 8 0 14 0 5 20 0 8 0 6 418 7336 wa2 wa2 306 wa2 wa2 wa7 wac 10 2 2 1 2 2 flpbbb invbbb 0 0 xxx grim item_book 12 item_book 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 20 255 1 0 0 xxx xxx 1 0 +Codex 100 0 1 1 6 10 0 18 0 8 20 0 16 0 12 1070 14780 wa3 wa3 306 wa3 wa3 wa8 wad 10 2 2 1 2 2 flpbbb invbbb 0 0 xxx grim item_book 12 item_book 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 20 255 1 0 0 xxx xxx 1 0 +Compendium 100 0 1 1 10 16 0 20 0 10 20 0 20 0 15 2164 23320 wa4 wa4 306 wa3 wa4 wa9 wae 10 2 2 1 2 2 flpbbb invbbb 0 0 xxx grim item_book 12 item_book 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 20 255 1 0 0 xxx xxx 1 0 +Grimoire 100 0 1 1 15 20 0 25 0 12 20 0 24 0 18 3475 35350 wa5 wa5 306 wa2 wa5 waa waf 10 2 2 1 2 2 flpbbb invbbb 0 0 xxx grim item_book 12 item_book 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 0 0 xxx xxx 1 0 +Burnt Text 100 0 1 1 38 48 0 38 0 3 20 0 33 0 24 11590 82069 wa6 wa6 306 wa1 wa1 wa6 wab 10 2 2 1 2 2 flpbbb invbbb 0 0 xxx grim item_book 12 item_book 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 20 1 0 0 xxx xxx 1 0 +Dark Tome 100 0 1 1 41 52 0 41 0 5 20 0 39 0 29 14839 82070 wa7 wa7 306 wa2 wa2 wa7 wac 10 2 2 1 2 2 flpbbb invbbb 0 0 xxx grim item_book 12 item_book 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 20 1 0 0 xxx xxx 1 0 +Dark Codex 100 0 1 1 44 55 0 47 0 8 20 0 45 0 33 18169 82071 wa8 wa8 306 wa3 wa3 wa8 wad 10 2 2 1 2 2 flpbbb invbbb 0 0 xxx grim item_book 12 item_book 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 0 0 xxx xxx 1 0 +Possessed Compendium 100 0 1 1 50 64 0 50 0 10 20 0 49 0 36 22750 82072 wa9 wa9 306 wa3 wa4 wa9 wae 10 2 2 1 2 2 flpbbb invbbb 0 0 xxx grim item_book 12 item_book 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 0 0 xxx xxx 1 0 +Possessed Grimoire 100 0 1 1 58 70 0 58 0 12 20 0 54 0 40 27993 82073 waa waa 306 wa2 wa5 waa waf 10 2 2 1 2 2 flpbbb invbbb 0 0 xxx grim item_book 12 item_book 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 0 0 xxx xxx 1 0 +Forgotten Volume 100 0 1 1 95 139 0 77 0 3 20 0 59 0 44 56131 82069 wab wab 306 wa1 wa1 wa6 wab 10 2 2 1 2 2 flpbbb invbbb 0 0 xxx grim item_book 12 item_book 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 0 0 xxx xxx 1 0 +Occult Tome 100 0 1 1 96 141 0 82 0 5 20 0 67 0 49 64437 82070 wac wac 306 wa2 wa2 wa7 wac 10 2 2 1 2 2 flpbbb invbbb 0 0 xxx grim item_book 12 item_book 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 8 0 xxx xxx 1 0 +Occult Codex 100 0 1 1 98 142 0 91 0 8 20 0 66 0 50 64122 82071 wad wad 306 wa3 wa3 wa8 wad 10 2 2 1 2 2 flpbbb invbbb 0 0 xxx grim item_book 12 item_book 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 0 0 xxx xxx 1 0 +Blasphemous Compendium 100 0 1 1 100 146 0 95 0 10 20 0 81 0 60 80462 82072 wae wae 306 wa3 wa4 wa9 wae 10 2 2 1 2 2 flpbbb invbbb 0 0 xxx grim item_book 12 item_book 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 8 0 xxx xxx 1 0 +Blasphemous Grimoire 100 0 1 1 103 148 0 106 0 12 20 0 85 0 65 86238 82073 waf waf 306 wa2 wa5 waa waf 10 2 2 1 2 2 flpbbb invbbb 0 0 xxx grim item_book 12 item_book 0 0 5 0 0 0 0 3 0 0 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 8 0 xxx xxx 1 0 diff --git a/src/D2SSharp/Data/Txt/105/itemstatcost.txt b/src/D2SSharp/Data/Txt/105/itemstatcost.txt new file mode 100644 index 0000000..ec7242e --- /dev/null +++ b/src/D2SSharp/Data/Txt/105/itemstatcost.txt @@ -0,0 +1,369 @@ +Stat *ID Send Other Signed Send Bits Send Param Bits UpdateAnimRate Saved CSvSigned CSvBits CSvParam fCallback fMin MinAccr Encode Add Multiply ValShift 1.09-Save Bits 1.09-Save Add Save Bits Save Add Save Param Bits keepzero op op param op base op stat1 op stat2 op stat3 direct maxstat damagerelated itemevent1 itemeventfunc1 itemevent2 itemeventfunc2 descpriority descfunc descval descstrpos descstrneg descstr2 dgrp dgrpfunc dgrpval dgrpstrpos dgrpstrneg dgrpstr2 stuff advdisplay *eol +strength 0 1 11 1 0 10 1 1 125 55 7 32 8 32 67 19 ModStr1a ModStr1a 1 19 Moditem2allattrib Moditem2allattrib 6 0 +energy 1 11 1 0 10 1 1 100 55 7 32 7 32 8 maxmana 61 19 ModStr1d ModStr1d 1 19 Moditem2allattrib Moditem2allattrib 0 +dexterity 2 1 11 1 0 10 1 1 125 55 7 32 7 32 65 19 ModStr1b ModStr1b 1 19 Moditem2allattrib Moditem2allattrib 0 +vitality 3 11 1 0 10 1 1 100 55 7 32 7 32 9 maxhp maxstamina 63 19 ModStr1c ModStr1c 1 19 Moditem2allattrib Moditem2allattrib 0 +statpts 4 9 1 0 10 0 +newskills 5 9 1 0 8 0 +hitpoints 6 32 1 0 21 8 1 maxhp 0 +maxhp 7 32 1 0 21 1 1 1 56 20 8 8 32 9 32 59 19 ModStr1u ModStr1u 0 +mana 8 32 1 0 21 8 1 1 maxmana 0 +maxmana 9 32 1 0 21 1 1 0 81 20 8 8 32 8 32 55 19 ModStr1e ModStr1e 0 +stamina 10 32 1 0 21 8 1 1 maxstamina 0 +maxstamina 11 32 1 0 21 1 1 0 75 20 8 8 32 8 32 51 19 ModStr5d ModStr5d 0 +level 12 9 1 0 7 0 +experience 13 32 1 0 32 0 +gold 14 32 1 0 25 0 +goldbank 15 32 1 0 25 0 +item_armor_percent 16 1 11 47 20 9 0 9 0 13 armorclass 74 19 Modstr2v Modstr2v 0 +item_maxdamage_percent 17 1 11 45 20 9 0 9 0 13 maxdamage secondary_maxdamage item_throw_maxdamage 1 129 19 ModStr2j ModStr2j 0 +item_mindamage_percent 18 1 11 45 20 9 0 9 0 13 mindamage secondary_mindamage item_throw_mindamage 1 130 19 ModStr2k ModStr2k 0 +tohit 19 1 16 15 10 10 10 1 115 19 ModStr1h ModStr1h 0 +toblock 20 1 10 89 204 6 0 6 0 134 19 ModStr3g ModStr3g 0 +mindamage 21 1 16 122 25 6 0 6 0 1 127 19 ModStr1g ModStr1g 0 +maxdamage 22 1 16 94 16 7 0 7 0 1 126 19 ModStr1f ModStr1f 0 +secondary_mindamage 23 1 16 97 15 6 0 6 0 1 124 19 ModStr1g ModStr1g 0 +secondary_maxdamage 24 1 16 85 11 7 0 7 0 1 123 19 ModStr1f ModStr1f 0 +damagepercent 25 1 12 45 40 8 0 8 0 1 88 19 strModEnhancedDamage strModEnhancedDamage 0 +manarecovery 26 8 0 8 0 0 +manarecoverybonus 27 1 16 8 0 8 0 52 19 ModStr4g ModStr4g 2 0 +staminarecoverybonus 28 1 16 8 0 8 0 48 19 ModStr3v ModStr3v 2 0 +lastexp 29 32 0 +nextexp 30 32 0 +armorclass 31 1 16 17 10 10 10 11 10 71 19 ModStr1i ModStr1i 0 +armorclass_vs_missile 32 1 16 11 5 8 0 9 0 69 19 ModStr6a ModStr6a 0 +armorclass_vs_hth 33 1 16 13 7 8 0 8 0 70 19 ModStr6b ModStr6b 0 +normal_damage_reduction 34 1 10 188 200 6 0 6 0 22 19 ModStr2u ModStr2u 2 0 +magic_damage_reduction 35 1 10 397 340 6 0 6 0 21 19 ModStr2t ModStr2t 2 0 +damageresist 36 1 9 152 68 8 0 9 200 22 29 ModStr2uPercent ModStr2uPercentNegative 2 0 +magicresist 37 1 9 164 68 8 0 9 200 41 19 ModStr1m ModStr1m 2 0 +maxmagicresist 38 1 9 1091 409 5 0 5 0 46 19 ModStr5x ModStr5x 2 0 +fireresist 39 1 9 43 20 8 0 9 200 36 19 ModStr1j ModStr1j 2 19 strModAllResistances strModAllResistances 0 +maxfireresist 40 1 9 584 256 5 0 5 0 42 19 ModStr5u ModStr5u 0 +lightresist 41 1 9 43 20 8 0 9 200 38 19 ModStr1l ModStr1l 2 19 strModAllResistances strModAllResistances 0 +maxlightresist 42 1 9 584 256 5 0 5 0 43 19 ModStr5w ModStr5w 0 +coldresist 43 1 9 43 20 8 0 9 200 40 19 ModStr1k ModStr1k 2 19 strModAllResistances strModAllResistances 0 +maxcoldresist 44 1 9 584 256 5 0 5 0 44 19 ModStr5v ModStr5v 0 +poisonresist 45 1 9 43 20 8 0 9 200 34 19 ModStr1n ModStr1n 2 19 strModAllResistances strModAllResistances 0 +maxpoisonresist 46 1 9 526 256 5 0 5 0 45 19 ModStr5y ModStr5y 0 +damageaura 47 1 16 0 +firemindam 48 1 16 11 10 8 0 8 0 1 102 19 ModStr1p ModStr1p 0 +firemaxdam 49 1 16 19 10 8 0 9 0 1 101 19 ModStr1o ModStr1o 0 +lightmindam 50 1 16 12 10 6 0 6 0 1 99 19 ModStr1r ModStr1r 0 +lightmaxdam 51 1 16 17 10 9 0 10 0 1 98 19 ModStr1q ModStr1q 0 +magicmindam 52 1 16 196 20 6 0 8 0 1 104 19 strModMagicDamage strModMagicDamage 0 +magicmaxdam 53 1 16 183 20 7 0 9 0 1 103 19 strModMagicDamage strModMagicDamage 0 +coldmindam 54 1 16 451 512 6 0 8 0 1 96 19 ModStr1t ModStr1t 0 +coldmaxdam 55 1 16 128 340 8 0 9 0 1 95 19 ModStr1s ModStr1s 0 +coldlength 56 1 16 77 4 8 0 8 0 1 0 +poisonmindam 57 1 19 12 28 9 0 10 0 1 92 19 ModStr4i ModStr4i 0 +poisonmaxdam 58 1 19 11 34 9 0 10 0 1 91 19 ModStr4h ModStr4h 0 +poisonlength 59 1 16 0 4 8 0 9 0 1 0 +lifedrainmindam 60 1 16 1044 341 7 0 7 0 1 88 19 ModStr2z ModStr2z 2 0 +lifedrainmaxdam 61 1 16 1 0 +manadrainmindam 62 1 16 1179 341 7 0 7 0 1 89 19 ModStr2y ModStr2y 2 0 +manadrainmaxdam 63 1 16 1 0 +stamdrainmindam 64 1 16 1 0 +stamdrainmaxdam 65 1 16 1 0 +stunlength 66 16 1 0 +velocitypercent 67 1 1 10 1 7 30 7 30 0 +attackrate 68 1 1 10 1 7 30 7 30 1 0 +other_animrate 69 1 1 10 1 0 +quantity 70 1 16 1 0 +value 71 1 9 8 100 8 100 0 +durability 72 1 9 8 0 9 0 1 maxdurability 0 +maxdurability 73 1 9 9 4 8 0 8 0 0 +hpregen 74 451 410 6 30 6 30 56 19 ModStr2l ModStr2w 2 0 +item_maxdurability_percent 75 1 7 117 10 7 20 7 20 13 maxdurability 3 19 ModStr2i ModStr2i 0 +item_maxhp_percent 76 1 16 32093 204 6 10 6 10 11 maxhp 58 19 ModStr2g ModStr2g 0 +item_maxmana_percent 77 1 16 56452 204 6 10 6 10 11 maxmana 54 19 ModStr2h ModStr2h 0 +item_attackertakesdamage 78 1 16 1 112 128 7 0 7 0 attackedinmelee 6 13 19 ModStr1v ModStr1v 2 0 +item_goldbonus 79 1 10 187 34 9 100 9 100 10 19 ModStr1w ModStr1w 2 0 +item_magicbonus 80 1 9 577 102 8 100 8 100 8 19 ModStr1x ModStr1x 2 0 +item_knockback 81 1 8 1 105 0 7 0 7 0 1 domeleedamage 7 domissiledamage 7 76 19 ModStr1y ModStr1y 2 0 +item_timeduration 82 1 10 9 20 9 20 0 +item_addclassskills 83 1 4 3 1 49523 1560 3 0 3 0 3 150 13 ModStr3a ModStr3a 0 +unsentparam1 84 3 0 0 +item_addexperience 85 1 9 36015 519 3 0 9 50 11 19 Moditem2ExpG Moditem2ExpG 2 0 +item_healafterkill 86 1 7 1 30 101 3 0 7 0 kill 28 16 19 ModitemHPaK ModitemHPaK 2 0 +item_reducedprices 87 8 18957 203 3 0 7 0 8 19 ModitemRedVendP ModitemRedVendP 2 0 +item_doubleherbduration 88 1 2 1 0 1 0 0 +item_lightradius 89 1 5 1 15 51 4 4 4 4 6 19 ModStr3f ModStr3f 2 0 +item_lightcolor 90 1 24 1 155 0 5 0 24 0 0 +item_req_percent 91 1 8 26 -34 8 100 8 100 0 19 ModStr3h ModStr3h 0 +item_levelreq 92 6 20 7 0 +item_fasterattackrate 93 1 1 9 1042 156 7 20 7 20 1 145 19 ModStr4m ModStr4m 2 0 +item_levelreqpct 94 7 20 7 64 13 item_levelreq 0 +lastblockframe 95 6 20 0 +item_fastermovevelocity 96 1 1 9 4083 156 7 20 7 20 148 19 ModStr4s ModStr4s 2 0 +item_nonclassskill 97 1 15 9 1 1 181 327 7 20 6 0 9 81 28 ItemModifierNonClassSkill ItemModifierNonClassSkill 0 +state 98 1 1 8 1 415 64 6 20 1 8 0 +item_fastergethitrate 99 1 1 9 1065 72 7 20 7 20 139 19 ModStr4p ModStr4p 2 0 +monster_playercount 100 7 20 0 +skill_poison_override_length 101 8 6 20 0 +item_fasterblockrate 102 1 1 9 1484 72 7 20 7 20 136 19 ModStr4y ModStr4y 2 0 +skill_bypass_undead 103 1 7 20 0 +skill_bypass_demons 104 1 6 20 0 +item_fastercastrate 105 1 1 9 3876 156 7 20 7 20 142 19 ModStr4v ModStr4v 2 0 +skill_bypass_beasts 106 1 7 20 0 +item_singleskill 107 1 15 9 1 1 181 256 14 0 3 0 9 81 27 ItemModifierClassSkill ItemModifierClassSkill 0 +item_restinpeace 108 1 1 1987 0 14 0 1 0 1 kill 29 81 19 ModitemSMRIP ModitemSMRIP 2 0 +curse_resistance 109 9 159 33 14 0 9 0 0 +item_poisonlengthresist 110 1 9 27 10 8 20 8 20 18 19 ModStr3r ModStr3r 2 0 +item_normaldamage 111 1 8 94 100 7 20 9 20 1 122 19 ModStr5b ModStr5b 0 +item_howl 112 1 8 1 55 10 7 -1 7 -1 1 domeleedamage 8 domissiledamage 8 79 5 ModStr3u ModStr3u 2 0 +item_stupidity 113 1 8 1 332 1024 7 0 7 0 1 domeleedamage 9 domissiledamage 9 80 12 2 ModStr6d ModStr6d 2 0 +item_damagetomana 114 1 7 1 43 20 6 0 6 0 damagedinmelee 13 damagedbymissile 13 11 19 ModStr3w ModStr3w 2 0 +item_ignoretargetac 115 1 2 1088 1024 1 0 1 0 1 119 19 ModStr3y ModStr3y 2 0 +item_fractionaltargetac 116 1 8 67 20 7 0 7 0 1 118 19 ModStr5o ModStr5o 2 0 +item_preventheal 117 1 8 48 50 7 0 7 0 1 81 19 ModStr4a ModStr4a 2 0 +item_halffreezeduration 118 1 2 5096 988 1 0 1 0 19 19 ModStr4b ModStr4b 2 0 +item_tohit_percent 119 1 12 981 40 9 20 9 20 1 117 19 ModStr4c ModStr4c 0 +item_damagetargetac 120 1 8 24 -20 7 128 7 128 1 75 19 ModStr4d ModStr4d 2 0 +item_demondamage_percent 121 1 12 19 12 9 20 9 20 1 112 19 ModStr4e ModStr4e 2 0 +item_undeaddamage_percent 122 1 12 13 12 9 20 9 20 1 108 19 ModStr4f ModStr4f 2 0 +item_demon_tohit 123 1 13 15 7 10 128 10 128 1 110 19 ModStr4j ModStr4j 0 +item_undead_tohit 124 1 13 11 7 10 128 10 128 1 106 19 ModStr4k ModStr4k 0 +item_throwable 125 1 2 82 1024 1 0 1 0 5 19 ModStr5a ModStr5a 0 +item_elemskill 126 1 3 3 1 76 1024 4 0 3 0 3 155 19 ModStr3i ModStr3i 0 +item_allskills 127 1 8 1 15123 4096 3 0 3 0 156 19 ModStr3k ModStr3k 0 +item_attackertakeslightdamage 128 1 6 1 4 102 5 0 5 0 damagedinmelee 10 14 19 ModStr3j ModStr3j 2 0 +ironmaiden_level 129 1 10 0 +lifetap_level 130 1 10 0 +thorns_percent 131 12 0 +bonearmor 132 1 32 0 +bonearmormax 133 1 32 0 +item_freeze 134 1 5 1 666 12 5 0 5 0 1 domeleedamage 14 domissiledamage 14 78 12 2 ModStr3l ModStr3l 2 0 +item_openwounds 135 1 7 1 23 10 7 0 7 0 1 domeleedamage 15 domissiledamage 15 83 19 ModStr3m ModStr3m 2 0 +item_crushingblow 136 1 7 1 98 40 7 0 7 0 1 domeleedamage 16 domissiledamage 16 87 19 ModStr5c ModStr5c 2 0 +item_kickdamage 137 1 7 77 51 7 0 7 0 121 19 ModStr5e ModStr5e 0 +item_manaafterkill 138 1 7 1 17 102 7 0 7 0 kill 17 16 19 ModStr5f ModStr5f 2 0 +item_healafterdemonkill 139 1 7 1 18 102 7 0 7 0 kill 18 15 19 ModStr6c ModStr6c 2 0 +item_extrablood 140 1 7 15 10 7 0 7 0 1 0 +item_deadlystrike 141 1 7 31 25 7 0 7 0 1 85 19 ModStr5q ModStr5q 2 0 +item_absorbfire_percent 142 1 7 5486 102 7 0 7 0 23 19 ModStr5g ModStr5g 2 0 +item_absorbfire 143 1 7 1739 204 7 0 7 0 27 19 ModStr5h ModStr5h 2 0 +item_absorblight_percent 144 1 7 5486 102 7 0 7 0 24 19 ModStr5i ModStr5i 2 0 +item_absorblight 145 1 7 1739 204 7 0 7 0 29 19 ModStr5j ModStr5j 2 0 +item_absorbmagic_percent 146 1 7 5486 102 7 0 7 0 26 19 ModStr5k ModStr5k 2 0 +item_absorbmagic 147 1 7 1739 204 7 0 7 0 33 19 ModStr5l ModStr5l 2 0 +item_absorbcold_percent 148 1 7 5486 102 7 0 7 0 25 19 ModStr5m ModStr5m 2 0 +item_absorbcold 149 1 7 1739 204 7 0 7 0 31 19 ModStr5n ModStr5n 2 0 +item_slow 150 1 7 1 101 40 7 0 7 0 1 domeleedamage 19 domissiledamage 19 77 19 ModStr5r ModStr5r 2 0 +item_aura 151 1 1 7 0 5 0 9 157 16 0 ModitemAura ModitemAura 2 0 +item_indesctructible 152 1 1 7 0 1 160 19 ModStre9s ModStre9s 0 +item_cannotbefrozen 153 1 2 15011 2048 1 1 20 19 ModStr5z ModStr5z 2 0 +item_staminadrainpct 154 1 7 102 20 7 20 7 20 1 49 19 ModStr6e ModStr6e 2 0 +item_reanimate 155 7 10 1 7 0 7 0 10 1 kill 31 17 23 Moditemreanimas Moditemreanimas 2 0 +item_pierce 156 1 7 1924 2048 7 0 7 0 1 132 19 ModStr6g ModStr6g 2 0 +item_magicarrow 157 1 7 511 1024 7 0 7 0 131 19 ModStr6h ModStr6h 0 +item_explosivearrow 158 1 7 492 1536 7 0 7 0 133 19 ModStr6i ModStr6i 0 +item_throw_mindamage 159 1 6 76 128 6 0 6 0 1 0 +item_throw_maxdamage 160 1 7 88 128 7 0 7 0 1 0 +skill_handofathena 161 1 12 0 +skill_staminapercent 162 1 13 1 maxstamina 0 +skill_passive_staminapercent 163 1 12 1 maxstamina 0 +skill_concentration 164 1 12 0 +skill_enchant 165 1 12 0 +skill_pierce 166 1 12 16 0 +skill_conviction 167 1 12 0 +skill_chillingarmor 168 1 12 0 +skill_frenzy 169 1 12 0 +skill_decrepify 170 1 12 0 +skill_armor_percent 171 1 16 0 +alignment 172 1 2 0 +target0 173 32 0 +target1 174 32 0 +goldlost 175 24 0 +conversion_level 176 8 0 +conversion_maxhp 177 16 0 +unit_dooverlay 178 16 0 +attack_vs_montype 179 9 10 19 14 3 0 9 10 1 108 22 ModitemAttratvsM ModitemAttratvsM 0 +damage_vs_montype 180 9 10 27 17 3 0 9 10 1 106 22 Moditemdamvsm Moditemdamvsm 0 +fade 181 1 7 14 0 3 0 +armor_override_percent 182 1 1 8 14 0 0 +lasthitreactframe 183 14 0 0 +create_season 184 14 0 0 +bonus_mindamage 185 1 12 8 0 1 0 +bonus_maxdamage 186 1 12 8 0 1 0 +item_pierce_cold_immunity 187 10 1432 513 10 159 19 ModItemMonColdSunder ModItemMonColdSunder 2 0 +item_addskill_tab 188 1 3 6 1 11042 768 10 0 3 0 16 151 14 StrSklTabItem1 StrSklTabItem1 0 +item_pierce_fire_immunity 189 10 1432 513 10 159 19 ModItemMonFireSunder ModItemMonFireSunder 2 0 +item_pierce_light_immunity 190 10 1432 513 10 159 19 ModItemMonLightSunder ModItemMonLightSunder 2 0 +item_pierce_poison_immunity 191 10 1432 513 10 159 19 ModItemMonPoisonSunder ModItemMonPoisonSunder 2 0 +item_pierce_damage_immunity 192 10 1432 513 10 159 19 ModItemMonPhysicalSunder ModItemMonPhysicalSunder 2 0 +item_pierce_magic_immunity 193 10 1432 513 10 159 19 ModItemMonMagicSunder ModItemMonMagicSunder 2 0 +item_numsockets 194 1 4 38 170 4 0 4 0 0 +item_skillonattack 195 1 7 16 1 2 190 256 21 0 7 0 16 1 domeleeattack 20 domissileattack 20 158 15 ItemExpansiveChancX ItemExpansiveChancX 2 0 +item_skillonkill 196 1 7 16 1 2 85 19 21 0 7 0 16 1 kill 20 158 15 ModitemskonKill ModitemskonKill 2 0 +item_skillondeath 197 1 7 16 1 2 11 9 21 0 7 0 16 killed 30 158 15 Moditemskondeath Moditemskondeath 2 0 +item_skillonhit 198 1 7 16 1 2 190 256 21 0 7 0 16 1 domeleedamage 20 domissiledamage 20 158 15 ItemExpansiveChanc1 ItemExpansiveChanc1 2 0 +item_skillonlevelup 199 1 7 16 1 2 7 6 21 0 7 0 16 levelup 30 158 15 ModitemskonLevel ModitemskonLevel 2 0 +item_charge_noconsume 200 7 106 256 7 0 157 19 ModStr6k ModStr6k 2 0 +item_skillongethit 201 1 7 16 1 2 190 256 21 0 7 0 16 damagedinmelee 21 damagedbymissile 21 158 15 ItemExpansiveChanc2 ItemExpansiveChanc2 2 0 +modifierlist_castid 202 0 +passive_mastery_item_req_percent 203 1 8 16 1 0 +item_charged_skill 204 1 30 1 3 401 256 30 0 16 0 16 1 24 ModStre10d ModStre10d 0 +item_noconsume 205 1 7 106 256 7 0 1 4 19 ModStr6j ModStr6j 2 0 +passive_mastery_noconsume 206 1 9 16 8 0 0 +passive_mastery_replenish_oncrit 207 1 9 16 8 0 0 +missile_thorns_percent 208 12 0 +passive_mastery_item_level_req_percent 209 1 8 16 1 0 +ua_escalation 210 8 8 0 0 +ua_defeated 211 8 8 0 0 +passive_mastery_gethit_rate 213 1 11 16 8 0 8 0 0 +passive_mastery_attack_speed 213 1 11 16 8 0 8 0 0 +item_armor_perlevel 214 1 6 43 42 6 0 6 0 4 3 level armorclass 72 19 ModStr1i ModStr1i increaseswithplaylevelX 0 +item_armorpercent_perlevel 215 1 6 87 100 6 0 6 0 5 3 level armorclass 73 19 Modstr2v Modstr2v increaseswithplaylevelX 0 +item_hp_perlevel 216 1 6 92 64 8 6 0 6 0 2 3 level maxhp 57 19 ModStr1u ModStr1u increaseswithplaylevelX 0 +item_mana_perlevel 217 1 6 90 128 8 6 0 6 0 2 3 level maxmana 53 19 ModStr1e ModStr1e increaseswithplaylevelX 0 +item_maxdamage_perlevel 218 1 6 54 204 6 0 6 0 4 3 level maxdamage secondary_maxdamage item_throw_maxdamage 1 125 19 ModStr1f ModStr1f increaseswithplaylevelX 0 +item_maxdamage_percent_perlevel 219 1 6 86 100 6 0 6 0 5 3 level maxdamage secondary_maxdamage item_throw_maxdamage 1 128 19 ModStr2j ModStr2j increaseswithplaylevelX 0 +item_strength_perlevel 220 1 6 132 128 6 0 6 0 2 3 level strength 66 19 ModStr1a ModStr1a increaseswithplaylevelX 0 +item_dexterity_perlevel 221 1 6 132 128 6 0 6 0 2 3 level dexterity 64 19 ModStr1b ModStr1b increaseswithplaylevelX 0 +item_energy_perlevel 222 1 6 105 128 6 0 6 0 2 3 level energy 60 19 ModStr1d ModStr1d increaseswithplaylevelX 0 +item_vitality_perlevel 223 1 6 105 128 6 0 6 0 2 3 level vitality 62 19 ModStr1c ModStr1c increaseswithplaylevelX 0 +item_tohit_perlevel 224 1 6 53 20 6 0 6 0 2 1 level tohit 1 114 19 ModStr1h ModStr1h increaseswithplaylevelX 0 +item_tohitpercent_perlevel 225 1 6 10 256 6 0 6 0 2 1 level item_tohit_percent 1 116 19 ModStr4c ModStr4c increaseswithplaylevelX 0 +item_cold_damagemax_perlevel 226 1 6 1058 340 6 0 6 0 2 3 level coldmaxdam 1 94 19 ModStr1s ModStr1s increaseswithplaylevelX 0 +item_fire_damagemax_perlevel 227 1 6 49 128 6 0 6 0 2 3 level firemaxdam 1 100 19 ModStr1o ModStr1o increaseswithplaylevelX 0 +item_ltng_damagemax_perlevel 228 1 6 49 128 6 0 6 0 2 3 level lightmaxdam 1 97 19 ModStr1q ModStr1q increaseswithplaylevelX 0 +item_pois_damagemax_perlevel 229 1 6 49 128 6 0 6 0 2 3 level poisonmaxdam 1 90 19 ModStr4h ModStr4h increaseswithplaylevelX 0 +item_resist_cold_perlevel 230 1 6 101 128 6 0 6 0 2 3 level coldresist 39 19 ModStr1k ModStr1k increaseswithplaylevelX 0 +item_resist_fire_perlevel 231 1 6 101 128 6 0 6 0 2 3 level fireresist 35 19 ModStr1j ModStr1j increaseswithplaylevelX 0 +item_resist_ltng_perlevel 232 1 6 101 128 6 0 6 0 2 3 level lightresist 37 19 ModStr1l ModStr1l increaseswithplaylevelX 0 +item_resist_pois_perlevel 233 1 6 101 128 6 0 6 0 2 3 level poisonresist 33 19 ModStr1n ModStr1n increaseswithplaylevelX 0 +item_absorb_cold_perlevel 234 1 6 207 340 6 0 6 0 2 3 level item_absorbcold 32 19 ModStre9p ModStre9p increaseswithplaylevelX 2 0 +item_absorb_fire_perlevel 235 1 6 207 340 6 0 6 0 2 3 level item_absorbfire 28 19 ModStre9o ModStre9o increaseswithplaylevelX 2 0 +item_absorb_ltng_perlevel 236 1 6 207 340 6 0 6 0 2 3 level item_absorblight 30 19 ModStre9q ModStre9q increaseswithplaylevelX 2 0 +item_absorb_pois_perlevel 237 1 6 207 340 6 0 6 0 2 3 level item_absorbmagic 2 0 +item_thorns_perlevel 238 1 6 55 256 6 0 5 0 2 3 level item_attackertakesdamage 12 19 ModStr1v ModStr1v increaseswithplaylevelX 0 +item_find_gold_perlevel 239 1 6 42 256 6 0 6 0 2 3 level item_goldbonus 9 19 ModStr1w ModStr1w increaseswithplaylevelX 2 0 +item_find_magic_perlevel 240 1 6 814 1024 6 0 6 0 2 3 level item_magicbonus 7 19 ModStr1x ModStr1x increaseswithplaylevelX 2 0 +item_regenstamina_perlevel 241 1 6 79 256 6 0 6 0 2 3 level staminarecoverybonus 47 19 ModStr3v ModStr3v increaseswithplaylevelX 2 0 +item_stamina_perlevel 242 1 6 104 64 6 0 6 0 2 3 level maxstamina 50 19 ModStr5d ModStr5d increaseswithplaylevelX 0 +item_damage_demon_perlevel 243 1 6 56 10 6 0 6 0 2 3 level item_demondamage_percent 1 111 19 ModStr4e ModStr4e increaseswithplaylevelX 2 0 +item_damage_undead_perlevel 244 1 6 91 10 6 0 6 0 2 3 level item_undeaddamage_percent 1 107 19 ModStr4f ModStr4f increaseswithplaylevelX 2 0 +item_tohit_demon_perlevel 245 1 6 55 10 6 0 6 0 2 1 level item_demon_tohit 1 109 19 ModStr4j ModStr4j increaseswithplaylevelX 0 +item_tohit_undead_perlevel 246 1 6 12 10 6 0 6 0 2 1 level item_undead_tohit 1 105 19 ModStr4k ModStr4k increaseswithplaylevelX 0 +item_crushingblow_perlevel 247 1 6 213 1024 6 0 6 0 2 3 level item_crushingblow 1 86 19 ModStr5c ModStr5c increaseswithplaylevelX 2 0 +item_openwounds_perlevel 248 1 6 181 128 6 0 6 0 2 3 level item_openwounds 1 82 19 ModStr3m ModStr3m increaseswithplaylevelX 2 0 +item_kick_damage_perlevel 249 1 6 104 128 6 0 6 0 2 3 level item_kickdamage 1 120 19 ModStr5e ModStr5e increaseswithplaylevelX 0 +item_deadlystrike_perlevel 250 1 6 118 512 6 0 6 0 2 3 level item_deadlystrike 1 84 19 ModStr5q ModStr5q increaseswithplaylevelX 2 0 +item_find_gems_perlevel 251 1 0 +item_replenish_durability 252 1 5 106 256 5 0 6 0 1 11 ModStre9t ModStre9t 0 +item_replenish_quantity 253 1 5 106 256 5 0 6 0 2 19 ModStre9v ModStre9v 0 +item_extra_stack 254 1 99 10 8 0 8 0 4 19 ModStre9i ModStre9i 0 +item_find_item 255 1 0 +item_slash_damage 256 1 1 0 +item_slash_damage_percent 257 1 1 0 +item_crush_damage 258 1 1 0 +item_crush_damage_percent 259 1 1 0 +item_thrust_damage 260 1 1 0 +item_thrust_damage_percent 261 1 1 0 +item_absorb_slash 262 1 0 +item_absorb_crush 263 1 0 +item_absorb_thrust 264 1 0 +item_absorb_slash_percent 265 1 0 +item_absorb_crush_percent 266 1 0 +item_absorb_thrust_percent 267 1 0 +item_armor_bytime 268 1 22 4 0 22 0 22 0 6 armorclass 180 17 ModStr1i ModStr1i 0 +item_armorpercent_bytime 269 1 22 4 0 22 0 22 0 7 armorclass 180 18 Modstr2v Modstr2v 0 +item_hp_bytime 270 1 22 4 0 22 0 22 0 6 maxhp 180 17 ModStr1u ModStr1u 0 +item_mana_bytime 271 1 22 4 0 22 0 22 0 6 maxmana 180 17 ModStr1e ModStr1e 0 +item_maxdamage_bytime 272 1 22 4 0 22 0 22 0 6 maxdamage secondary_maxdamage item_throw_maxdamage 1 180 17 ModStr1f ModStr1f 0 +item_maxdamage_percent_bytime 273 1 22 4 0 22 0 22 0 7 maxdamage secondary_mindamage item_throw_mindamage 1 180 18 ModStr2j ModStr2j 0 +item_strength_bytime 274 1 22 4 0 22 0 22 0 6 strength 180 17 ModStr1a ModStr1a 0 +item_dexterity_bytime 275 1 22 4 0 22 0 22 0 6 dexterity 180 17 ModStr1b ModStr1b 0 +item_energy_bytime 276 1 22 4 0 22 0 22 0 6 energy 180 17 ModStr1d ModStr1d 0 +item_vitality_bytime 277 1 22 4 0 22 0 22 0 6 vitality 180 17 ModStr1c ModStr1c 0 +item_tohit_bytime 278 1 22 4 0 22 0 22 0 6 tohit 1 180 17 ModStr1h ModStr1h 0 +item_tohitpercent_bytime 279 1 22 4 0 22 0 22 0 6 item_tohit_percent 1 180 18 ModStr4c ModStr4c 0 +item_cold_damagemax_bytime 280 1 22 4 0 22 0 22 0 6 coldmaxdam 1 180 17 ModStr1s ModStr1s 0 +item_fire_damagemax_bytime 281 1 22 4 0 22 0 22 0 6 firemaxdam 1 180 17 ModStr1o ModStr1o 0 +item_ltng_damagemax_bytime 282 1 22 4 0 22 0 22 0 6 lightmaxdam 1 180 17 ModStr1q ModStr1q 0 +item_pois_damagemax_bytime 283 1 22 4 0 22 0 22 0 6 poisonmaxdam 1 180 17 ModStr4h ModStr4h 0 +item_resist_cold_bytime 284 1 22 4 0 22 0 22 0 6 coldresist 180 18 ModStr1k ModStr1k 0 +item_resist_fire_bytime 285 1 22 4 0 22 0 22 0 6 fireresist 180 18 ModStr1j ModStr1j 0 +item_resist_ltng_bytime 286 1 22 4 0 22 0 22 0 6 lightresist 180 18 ModStr1l ModStr1l 0 +item_resist_pois_bytime 287 1 22 4 0 22 0 22 0 6 poisonresist 180 18 ModStr1n ModStr1n 0 +item_absorb_cold_bytime 288 1 22 4 0 22 0 22 0 6 item_absorbcold 180 18 ModStre9p ModStre9p 2 0 +item_absorb_fire_bytime 289 1 22 4 0 22 0 22 0 6 item_absorbfire 180 18 ModStre9o ModStre9o 2 0 +item_absorb_ltng_bytime 290 1 22 4 0 22 0 22 0 6 item_absorblight 180 18 ModStre9q ModStre9q 2 0 +item_absorb_pois_bytime 291 1 22 4 0 22 0 22 0 6 item_absorbmagic 2 0 +item_find_gold_bytime 292 1 22 4 0 22 0 22 0 6 item_goldbonus 180 18 ModStr1w ModStr1w 0 +item_find_magic_bytime 293 1 22 4 0 22 0 22 0 6 item_magicbonus 180 18 ModStr1x ModStr1x 0 +item_regenstamina_bytime 294 1 22 4 0 22 0 22 0 6 staminarecoverybonus 180 18 ModStr3v ModStr3v 0 +item_stamina_bytime 295 1 22 4 0 22 0 22 0 6 maxstamina 180 17 ModStr5d ModStr5d 0 +item_damage_demon_bytime 296 1 22 4 0 22 0 22 0 6 item_demondamage_percent 1 180 18 ModStr4e ModStr4e 0 +item_damage_undead_bytime 297 1 22 4 0 22 0 22 0 6 item_undeaddamage_percent 1 180 18 ModStr4f ModStr4f 0 +item_tohit_demon_bytime 298 1 22 4 0 22 0 22 0 6 item_demon_tohit 1 180 17 ModStr4j ModStr4j 0 +item_tohit_undead_bytime 299 1 22 4 0 22 0 22 0 6 item_undead_tohit 1 180 17 ModStr4k ModStr4k 0 +item_crushingblow_bytime 300 1 22 4 0 22 0 22 0 6 item_crushingblow 1 180 18 ModStr5c ModStr5c 0 +item_openwounds_bytime 301 1 22 4 0 22 0 22 0 6 item_openwounds 1 180 18 ModStr3m ModStr3m 0 +item_kick_damage_bytime 302 1 22 4 0 22 0 22 0 6 item_kickdamage 1 180 17 ModStr5e ModStr5e 0 +item_deadlystrike_bytime 303 1 22 4 0 22 0 22 0 6 item_deadlystrike 1 180 18 ModStr5q ModStr5q 0 +item_find_gems_bytime 304 1 4 0 0 +item_pierce_cold 305 1 9 1432 513 8 50 88 19 Moditemenrescoldsk Moditemenrescoldsk 0 +item_pierce_fire 306 1 9 1240 497 8 50 88 19 Moditemenresfiresk Moditemenresfiresk 0 +item_pierce_ltng 307 1 9 1187 481 8 50 88 19 Moditemenresltngsk Moditemenresltngsk 0 +item_pierce_pois 308 1 9 1322 506 8 50 88 19 Moditemenrespoissk Moditemenrespoissk 0 +item_damage_vs_monster 309 1 1 0 +item_damage_percent_vs_monster 310 1 1 0 +item_tohit_vs_monster 311 1 1 0 +item_tohit_percent_vs_monster 312 1 1 0 +item_ac_vs_monster 313 1 0 +item_ac_percent_vs_monster 314 1 0 +firelength 315 1 16 0 +burningmin 316 1 16 0 +burningmax 317 1 16 0 +progressive_damage 318 1 3 0 +progressive_steal 319 1 3 0 +progressive_other 320 1 3 0 +progressive_fire 321 1 3 0 +progressive_cold 322 1 3 0 +progressive_lightning 323 1 3 0 +item_extra_charges 324 1 6 6 0 6 0 1 0 +progressive_tohit 325 1 16 0 +poison_count 326 1 5 1 0 +damage_framerate 327 1 8 0 +pierce_idx 328 1 6 0 +passive_fire_mastery 329 1 12 1117 415 8 0 9 50 88 19 ModitemdamFiresk ModitemdamFiresk 2 0 +passive_ltng_mastery 330 1 12 1054 408 8 0 9 50 88 19 ModitemdamLtngsk ModitemdamLtngsk 2 0 +passive_cold_mastery 331 1 12 1295 379 8 0 9 50 88 19 ModitemdamColdsk ModitemdamColdsk 2 0 +passive_pois_mastery 332 1 12 978 394 8 0 9 50 88 19 ModitemdamPoissk ModitemdamPoissk 2 0 +passive_fire_pierce 333 1 9 2578 8 0 8 0 88 19 Moditemenresfiresk Moditemenresfiresk 2 0 +passive_ltng_pierce 334 1 9 2493 8 0 8 0 88 19 Moditemenresltngsk Moditemenresltngsk 2 0 +passive_cold_pierce 335 1 9 1984 8 0 8 0 88 19 Moditemenrescoldsk Moditemenrescoldsk 2 0 +passive_pois_pierce 336 1 9 2345 8 0 8 0 88 19 Moditemenrespoissk Moditemenrespoissk 2 0 +passive_critical_strike 337 1 9 8 0 8 0 0 +passive_dodge 338 1 9 7 0 7 0 0 +passive_avoid 339 1 9 7 0 7 0 0 +passive_evade 340 1 9 7 0 7 0 0 +passive_warmth 341 1 9 8 0 8 0 0 +passive_mastery_melee_th 342 1 11 16 8 0 8 0 0 +passive_mastery_melee_dmg 343 1 11 16 8 0 8 0 0 +passive_mastery_melee_crit 344 1 9 16 8 0 8 0 0 +passive_mastery_throw_th 345 1 11 16 8 0 8 0 0 +passive_mastery_throw_dmg 346 1 11 16 8 0 8 0 0 +passive_mastery_throw_crit 347 1 9 16 8 0 8 0 0 +passive_weaponblock 348 1 9 16 8 0 8 0 0 +passive_summon_resist 349 1 9 8 0 8 0 0 +modifierlist_skill 350 9 0 +modifierlist_level 351 8 0 +last_sent_hp_pct 352 1 8 0 +source_unit_type 353 5 0 +source_unit_id 354 32 0 +shortparam1 355 16 0 +questitemdifficulty 356 2 0 0 +passive_mag_mastery 357 1 12 1211 431 8 0 9 50 88 19 ModStrMagMastery ModStrMagMastery 2 0 +passive_mag_pierce 358 1 9 2812 8 0 8 0 88 19 ModStrMagPierce ModStrMagPierce 2 0 +skill_cooldown 359 0 +skill_missile_damage_scale 360 32 16 0 +psychicward 361 1 32 0 +psychicwardmax 362 1 32 0 +skill_channeling_tick 363 0 +customization_index 364 32 0 +item_magic_damagemax_perlevel 365 1 6 49 128 6 0 6 0 2 3 level magicmaxdam 1 100 19 MaxMagDmgPerLvl MaxMagDmgPerLvl increaseswithplaylevelX 0 +passive_dmg_pierce 366 1 9 2812 8 0 8 0 88 19 ModStrDamPierce ModStrDamPierce 2 0 +heraldtier 367 1 32 1 0 diff --git a/src/D2SSharp/Data/Txt/105/itemtypes.txt b/src/D2SSharp/Data/Txt/105/itemtypes.txt new file mode 100644 index 0000000..a915220 --- /dev/null +++ b/src/D2SSharp/Data/Txt/105/itemtypes.txt @@ -0,0 +1,111 @@ +ItemType Code Equiv1 Equiv2 Repair Body BodyLoc1 BodyLoc2 Shoots Quiver Throwable Reload ReEquip AutoStack Magic Rare Normal Beltable MaxSockets1 MaxSocketsLevelThreshold1 MaxSockets2 MaxSocketsLevelThreshold2 MaxSockets3 TreasureClass Rarity StaffMods Class VarInvGfx InvGfx1 InvGfx2 InvGfx3 InvGfx4 InvGfx5 InvGfx6 StorePage *eol UICategory RunewordCategory1 RunewordCategory2 Restricted +Any 0 0 0 0 0 0 0 0 0 25 0 40 0 0 3 0 0 +None none 0 0 0 0 0 0 0 0 0 25 0 40 0 0 3 0 0 +Shield shie shld 1 1 rarm larm 0 0 0 0 1 0 0 3 25 3 40 4 0 3 0 armo 0 shlds r_off +Armor tors armo 1 1 tors tors 0 0 0 0 1 0 0 3 25 4 40 6 0 3 0 armo 0 armor r_arm +Gold gold misc 0 0 0 0 0 0 1 0 0 25 0 40 0 0 3 0 0 +Bow Quiver bowq misl seco 0 1 rarm larm bow 0 1 0 1 1 0 0 25 0 40 0 0 3 0 misc 0 ammo +Crossbow Quiver xboq misl seco 0 1 rarm larm xbow 0 1 0 1 1 0 0 25 0 40 0 0 3 0 misc 0 ammo +Player Body Part play misc 0 0 0 0 0 0 1 0 0 25 0 40 0 0 3 0 misc 0 +Herb herb misc 0 0 0 0 0 0 0 0 0 25 0 40 0 0 3 0 misc 0 +Potion poti misc 0 0 0 0 0 0 1 1 0 25 0 40 0 0 3 0 misc 0 potis +Ring ring misc 0 1 rrin lrin 0 0 0 0 1 1 0 0 0 25 0 40 0 0 3 5 invrin1 invrin2 invrin3 invrin4 invrin5 misc 0 rings +Elixir elix misc 0 0 0 0 0 0 0 1 0 25 0 40 0 0 3 0 misc 0 +Amulet amul misc 0 1 neck neck 0 0 0 0 1 1 0 0 0 25 0 40 0 0 3 3 invamu1 invamu2 invamu3 misc 0 amule +Charm char misc 0 0 0 0 0 0 1 0 0 0 25 0 40 0 0 3 3 invch1 invch4 invch7 misc 0 charm +Not Used 0 0 0 0 0 0 0 0 0 25 0 40 0 0 3 0 0 +Boots boot armo 1 1 feet feet 0 0 0 0 1 0 0 0 25 0 40 0 0 3 0 armo 0 boots r_arm +Gloves glov armo 1 1 glov glov 0 0 0 0 1 0 0 0 25 0 40 0 0 3 0 armo 0 glove r_arm +Not Used 0 0 0 0 0 0 0 0 0 25 0 40 0 0 3 0 0 +Book book misc 0 0 0 0 0 0 1 0 0 25 0 40 0 0 3 0 misc 0 scrlt +Belt belt armo 1 1 belt belt 0 0 0 0 1 0 0 0 25 0 40 0 0 3 0 armo 0 belts r_arm +Gem gem sock 0 0 0 0 0 0 1 0 0 25 0 40 0 0 3 0 misc 0 gems +Torch torc misc 0 1 0 0 0 0 1 0 0 25 0 40 0 0 3 0 misc 0 +Scroll scro misc 0 0 0 0 0 0 1 1 0 25 0 40 0 0 3 0 misc 0 +Not Used 0 0 0 0 0 0 0 0 0 25 0 40 0 0 3 0 0 +Scepter scep rod 1 1 rarm larm 0 0 0 0 1 0 0 3 25 5 40 6 0 1 pal 0 weap 0 scept r_mel +Wand wand rod 1 1 rarm larm 0 0 0 0 1 0 0 2 25 2 40 2 0 1 nec 0 weap 0 wands r_mel +Staff staf rod 1 1 rarm larm 0 0 0 0 1 0 0 5 25 6 40 6 0 1 sor 0 weap 0 stave r_mel +Bow bow miss 0 1 rarm larm bowq 0 0 0 0 1 0 0 3 25 4 40 6 1 3 0 weap 0 bows r_mel +Axe axe mele 1 1 rarm larm 0 0 0 0 1 0 0 4 25 5 40 6 0 3 0 weap 0 axes r_mel +Club club blun 1 1 rarm larm 0 0 0 0 1 0 0 3 25 4 40 6 0 3 0 weap 0 maces r_mel +Sword swor blde 1 1 rarm larm 0 0 0 0 1 0 0 3 25 4 40 6 0 3 0 weap 0 sword r_mel +Hammer hamm blun 1 1 rarm larm 0 0 0 0 1 0 0 3 25 4 40 6 0 3 0 weap 0 maces r_mel +Knife knif blde 1 1 rarm larm 0 0 0 0 1 0 0 2 25 3 40 3 0 3 war 0 weap 0 daggs r_mel +Spear spea sppl 1 1 rarm larm 0 0 0 0 1 0 0 3 25 4 40 6 0 3 0 weap 0 spear r_mel +Polearm pole sppl 1 1 rarm larm 0 0 0 0 1 0 0 3 25 4 40 6 0 3 0 weap 0 poles r_mel +Crossbow xbow miss 1 1 rarm larm xboq 0 0 0 0 1 0 0 3 25 4 40 6 0 3 0 weap 0 xbows r_mis +Mace mace blun 1 1 rarm larm 0 0 0 0 1 0 0 3 25 4 40 6 0 3 0 weap 0 maces r_mel +Helm helm armo 1 1 head head 0 0 0 0 1 0 0 2 25 2 40 3 0 3 0 armo 0 helms r_hel +Missile Potion tpot thro 0 1 rarm larm 1 1 1 1 1 0 0 25 0 40 0 0 3 0 misc 0 throw +Quest ques 0 0 0 0 0 0 0 0 0 25 0 40 0 0 3 0 0 +Body Part body misc 0 0 0 0 0 0 1 0 0 25 0 40 0 0 3 0 misc 0 +Key key misc 0 0 0 0 0 1 1 0 0 25 0 40 0 0 3 0 misc 0 +Throwing Knife tkni comb knif 1 1 rarm larm 1 1 1 1 1 0 0 0 25 0 40 0 0 3 0 misc 0 throw r_mel +Throwing Axe taxe comb axe 1 1 rarm larm 1 1 1 1 1 0 0 0 25 0 40 0 0 3 0 misc 0 throw r_mel +Javelin jave comb spea 1 1 rarm larm 1 1 1 1 1 0 0 0 25 0 40 0 0 3 0 misc 0 javel r_mel +Weapon weap 0 0 0 0 0 0 1 0 0 0 25 0 40 0 1 3 0 0 r_mis r_mel +Melee Weapon mele weap 0 0 0 0 0 0 1 0 0 0 25 0 40 0 1 3 0 0 r_mel +Missile Weapon miss weap 0 0 0 0 0 0 1 0 0 0 25 0 40 0 0 3 0 0 r_mis +Thrown Weapon thro weap 0 0 1 0 0 0 1 0 0 0 25 0 40 0 0 3 0 0 r_mis +Combo Weapon comb mele thro 0 0 1 0 0 0 1 0 0 0 25 0 40 0 0 3 0 0 r_mel +Any Armor armo 0 0 0 0 0 0 1 0 0 0 25 0 40 0 1 3 0 0 r_arm +Any Shield shld armo seco 0 0 0 0 0 0 1 0 0 0 25 0 40 0 0 3 0 0 r_off +Miscellaneous misc 0 0 0 0 0 0 1 0 0 0 25 0 40 0 0 3 0 0 +Socket Filler sock misc 0 0 0 0 0 0 0 0 0 25 0 40 0 0 3 0 0 +Second Hand seco 0 0 0 0 0 0 1 0 0 0 25 0 40 0 0 3 0 0 r_off +Staves And Rods rod blun 0 0 0 0 0 0 1 0 0 0 25 0 40 0 0 3 0 0 r_mel +Missile misl misc 0 0 0 0 0 0 0 0 0 25 0 40 0 0 3 0 0 r_mis +Blunt blun mele 0 0 0 0 0 0 1 0 0 0 25 0 40 0 0 3 0 0 r_mel +Expansion +Jewel jewl sock 0 0 0 0 0 0 1 1 0 0 0 25 0 40 0 0 3 6 invjw1 invjw2 invjw3 invjw4 invjw5 invjw6 misc 0 jewel +Class Specific clas 0 0 0 0 0 0 1 0 0 0 25 0 40 0 0 3 0 0 +Amazon Item amaz clas 0 0 0 0 0 0 1 0 0 0 25 0 40 0 0 1 ama 0 0 +Barbarian Item barb clas 0 0 0 0 0 0 1 0 0 0 25 0 40 0 0 1 bar 0 0 +Necromancer Item necr clas 0 0 0 0 0 0 1 0 0 0 25 0 40 0 0 1 nec 0 0 +Paladin Item pala clas 0 0 0 0 0 0 1 0 0 0 25 0 40 0 0 1 pal 0 0 r_off +Sorceress Item sorc clas 0 0 0 0 0 0 1 0 0 0 25 0 40 0 0 1 sor 0 0 +Assassin Item assn clas 0 0 0 0 0 0 1 0 0 0 25 0 40 0 0 2 ass 0 0 +Druid Item drui clas 0 0 0 0 0 0 1 0 0 0 25 0 40 0 0 1 dru 0 0 +Warlock Item warl clas 0 0 0 0 0 0 1 0 0 0 25 0 40 0 0 1 war war 0 armo 0 +Hand to Hand h2h mele assn 1 1 rarm larm 0 0 0 0 1 0 0 2 25 3 40 3 0 2 ass 0 weap 0 assas r_mel +Orb orb weap sorc 1 1 rarm larm 0 0 0 0 1 0 0 2 25 3 40 3 0 1 sor sor 0 weap 0 sorce r_mel +Voodoo Heads head shld necr 1 1 rarm larm 0 0 0 0 1 0 0 2 25 3 40 3 0 1 nec nec 0 armo 0 necro r_arm +Auric Shields ashd shld pala 1 1 rarm larm 0 0 0 0 1 0 0 3 25 4 40 4 0 1 pal 0 armo 0 palad r_off +Primal Helm phlm helm barb 1 1 head head 0 0 0 0 1 0 0 2 25 3 40 3 0 1 bar bar 0 armo 0 barbh r_hel +Pelt pelt helm drui 1 1 head head 0 0 0 0 1 0 0 2 25 3 40 3 0 1 dru dru 0 armo 0 druid r_hel +Cloak cloa tors assn 1 1 tors tors 0 0 0 0 1 0 0 0 25 0 40 0 0 1 ass ass 0 armo 0 r_arm +Rune rune sock 0 0 0 0 0 0 1 0 0 25 0 40 0 0 3 0 misc 0 runes +Circlet circ helm 1 1 head head 0 0 0 0 1 0 0 1 25 2 40 3 0 3 0 armo 0 circl r_hel +Healing Potion hpot poti 0 0 0 0 0 0 1 1 0 25 0 40 0 0 3 0 misc 0 potis +Mana Potion mpot poti 0 0 0 0 0 0 1 1 0 25 0 40 0 0 3 0 misc 0 potis +Rejuv Potion rpot hpot mpot 0 0 0 0 0 0 1 1 0 25 0 40 0 0 3 0 misc 0 potis +Stamina Potion spot poti 0 0 0 0 0 0 1 1 0 25 0 40 0 0 3 0 misc 0 potis +Antidote Potion apot poti 0 0 0 0 0 0 1 1 0 25 0 40 0 0 3 0 misc 0 potis +Thawing Potion wpot poti 0 0 0 0 0 0 1 1 0 25 0 40 0 0 3 0 misc 0 potis +Small Charm scha char 0 0 0 0 0 0 1 0 0 0 25 0 40 0 0 3 3 invch1 invch4 invch7 misc 0 charm +Medium Charm mcha char 0 0 0 0 0 0 1 0 0 0 25 0 40 0 0 3 3 invch2 invch5 invch8 misc 0 charm +Large Charm lcha char 0 0 0 0 0 0 1 0 0 0 25 0 40 0 0 3 3 invch3 invch6 invch9 misc 0 charm +Amazon Bow abow bow amaz 0 1 rarm larm bowq 0 0 0 0 1 0 0 3 25 4 40 5 1 1 ama 0 weap 0 amazo r_mis +Amazon Spear aspe spea amaz 1 1 rarm larm 0 0 0 0 1 0 0 3 25 4 40 6 0 1 ama 0 weap 0 amazo r_mel +Amazon Javelin ajav jave amaz 1 1 rarm larm 1 1 1 1 1 0 0 0 25 0 40 0 0 1 ama 0 misc 0 amazo r_mel +Hand to Hand 2 h2h2 h2h 1 1 rarm larm 0 0 0 0 1 0 0 2 25 3 40 3 0 2 ass ass 0 weap 0 assas r_mel +Magic Bow Quiv mboq bowq 0 1 rarm larm bow 0 1 0 0 1 1 0 0 0 25 0 40 0 0 3 0 misc 0 +Magic Xbow Quiv mxbq xboq 0 1 rarm larm xbow 0 1 0 0 1 1 0 0 0 25 0 40 0 0 3 0 misc 0 +Chipped Gem gem0 gem 0 0 0 0 0 0 1 0 0 25 0 40 0 0 3 0 misc 0 gems +Flawed Gem gem1 gem 0 0 0 0 0 0 1 0 0 25 0 40 0 0 3 0 misc 0 gems +Standard Gem gem2 gem 0 0 0 0 0 0 1 0 0 25 0 40 0 0 3 0 misc 0 gems +Flawless Gem gem3 gem 0 0 0 0 0 0 1 0 0 25 0 40 0 0 3 0 misc 0 gems +Perfect Gem gem4 gem 0 0 0 0 0 0 1 0 0 25 0 40 0 0 3 0 misc 0 gems +Amethyst gema gem 0 0 0 0 0 0 1 0 0 25 0 40 0 0 3 0 misc 0 gems +Diamond gemd gem 0 0 0 0 0 0 1 0 0 25 0 40 0 0 3 0 misc 0 gems +Emerald geme gem 0 0 0 0 0 0 1 0 0 25 0 40 0 0 3 0 misc 0 gems +Ruby gemr gem 0 0 0 0 0 0 1 0 0 25 0 40 0 0 3 0 misc 0 gems +Sapphire gems gem 0 0 0 0 0 0 1 0 0 25 0 40 0 0 3 0 misc 0 gems +Topaz gemt gem 0 0 0 0 0 0 1 0 0 25 0 40 0 0 3 0 misc 0 gems +Skull gemz gem 0 0 0 0 0 0 1 0 0 25 0 40 0 0 3 0 misc 0 gems +Swords and Knives blde mele 0 0 0 0 0 0 1 0 0 0 25 0 40 0 0 3 0 0 +Spears and Polearms sppl mele 0 0 0 0 0 0 1 0 0 0 25 0 40 0 0 3 0 0 +Grimoire grim shld warl 1 1 rarm larm 0 0 0 0 1 0 0 2 25 3 40 3 0 1 war war 0 armo 0 warlo +Colossal Jewel cjwl jewl 0 0 0 0 0 0 1 1 0 0 0 25 0 40 0 0 3 6 invjw1 invjw2 invjw3 invjw4 invjw5 invjw6 misc 0 jewel 1 +Crafted Sunder Charm csch char 0 0 0 0 0 0 1 0 0 0 25 0 40 0 0 3 3 invch3 invch6 invch9 misc 0 diff --git a/src/D2SSharp/Data/Txt/105/misc.txt b/src/D2SSharp/Data/Txt/105/misc.txt new file mode 100644 index 0000000..3e8e45f --- /dev/null +++ b/src/D2SSharp/Data/Txt/105/misc.txt @@ -0,0 +1,171 @@ +name compactsave version level ShowLevel levelreq reqstr reqdex rarity spawnable DropConditionCalc speed nodurability cost gamble cost code alternategfx namestr component invwidth invheight hasinv gemsockets gemapplytype flippyfile invfile uniqueinvfile Transmogrify TMogType TMogMin TMogMax useable type type2 dropsound dropsfxframe usesound unique transparent transtbl lightradius belt autobelt stackable minstack maxstack spawnstack quest questdiffcheck missiletype spellicon pSpell state cstate1 cstate2 len stat1 calc1 stat2 calc2 stat3 calc3 spelldesc spelldescstr spelldescstr2 spelldesccalc spelldesccolor durwarning qntwarning gemoffset BetterGem bitfield1 CharsiMin CharsiMax CharsiMagicMin CharsiMagicMax CharsiMagicLvl GheedMin GheedMax GheedMagicMin GheedMagicMax GheedMagicLvl AkaraMin AkaraMax AkaraMagicMin AkaraMagicMax AkaraMagicLvl FaraMin FaraMax FaraMagicMin FaraMagicMax FaraMagicLvl LysanderMin LysanderMax LysanderMagicMin LysanderMagicMax LysanderMagicLvl DrognanMin DrognanMax DrognanMagicMin DrognanMagicMax DrognanMagicLvl HratliMin HratliMax HratliMagicMin HratliMagicMax HratliMagicLvl AlkorMin AlkorMax AlkorMagicMin AlkorMagicMax AlkorMagicLvl OrmusMin OrmusMax OrmusMagicMin OrmusMagicMax OrmusMagicLvl ElzixMin ElzixMax ElzixMagicMin ElzixMagicMax ElzixMagicLvl AshearaMin AshearaMax AshearaMagicMin AshearaMagicMax AshearaMagicLvl CainMin CainMax CainMagicMin CainMagicMax CainMagicLvl HalbuMin HalbuMax HalbuMagicMin HalbuMagicMax HalbuMagicLvl MalahMin MalahMax MalahMagicMin MalahMagicMax MalahMagicLvl LarzukMin LarzukMax LarzukMagicMin LarzukMagicMax LarzukMagicLvl AnyaMin AnyaMax AnyaMagicMin AnyaMagicMax AnyaMagicLvl JamellaMin JamellaMax JamellaMagicMin JamellaMagicMax JamellaMagicLvl Transform InvTrans SkipName NightmareUpgrade HellUpgrade mindam maxdam PermStoreItem multibuy Nameable EventItem UICatOverride diablocloneweight AdvancedStashStackable UsageConditionCalc +Elixir 1 0 21 0 0 4 1 0 1 20 elx elx elx 16 1 1 0 0 0 flppot invpot 0 xxx 1 elix item_potion 14 item_potion_drink 0 0 5 0 0 0 0 0 0 0 0 -1 8 experience 5 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Healing Potion 1 0 0 0 0 1 0 0 1 30 hpo hpo hpo 16 1 1 0 0 0 flprps invrps 0 xxx 1 hpot item_potion 14 item_potion_drink 0 0 5 0 1 1 0 0 0 0 0 -1 4 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 1 Null +Mana Potion 1 0 0 0 0 1 0 0 1 30 mpo mpo mpo 16 1 1 0 0 0 flpbps invbps 0 xxx 1 mpot item_potion 14 item_potion_drink 0 0 5 0 1 0 0 0 0 0 0 -1 4 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 1 Null +Full Healing Potion 1 0 0 0 0 2 0 0 1 150 hpf hpo hpf 16 1 1 0 0 0 flprpl invrpl 0 xxx 1 hpot item_potion 14 item_potion_drink 0 0 5 0 1 1 0 0 0 0 0 -1 4 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 1 Null +Full Mana Potion 1 0 0 0 0 2 0 0 1 150 mpf mpo mpf 16 1 1 0 0 0 flpbpl invbpl 0 xxx 1 mpot item_potion 14 item_potion_drink 0 0 5 0 1 0 0 0 0 0 0 -1 4 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 1 Null +Stamina Potion 1 0 0 0 0 1 1 0 1 25 vps vps vps 16 1 1 0 0 0 flpwps invwps 0 xxx 1 spot item_potion 14 item_potion_drink 0 0 5 0 1 0 0 0 0 0 0 -1 9 staminapot 750 staminarecoverybonus 5000 0 0 0 non 0 255 255 2 4 255 255 3 5 3 5 255 255 255 3 5 255 255 255 255 2 3 255 255 2 3 255 255 255 2 3 255 0 0 0 xxx xxx 1 1 +Antidote Potion 1 0 0 0 0 1 1 0 1 40 yps yps yps 16 1 1 0 0 0 flpnps invnps 0 xxx 1 apot item_potion 14 item_potion_drink 0 0 5 0 1 0 0 0 0 0 0 -1 6 antidote poison 750 poisonresist 50 maxpoisonresist 10 0 0 0 non 0 255 255 2 4 255 255 9 15 9 15 255 255 255 8 11 255 255 255 255 8 11 255 255 3 5 255 255 255 3 5 255 0 0 0 xxx xxx 1 1 +Rejuvenation Potion 1 0 0 0 0 2 0 0 1 400 rvs yps rvs 16 1 1 0 0 0 flpvps invvps 0 xxx 1 rpot item_potion 14 item_potion_drink 0 0 5 0 1 1 0 0 0 0 0 -1 5 hitpoints 35 mana 35 4 ItemStatsrejuv1 35 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Full Rejuvenation Potion 1 0 0 0 0 2 0 0 1 1500 rvl ypl rvl 16 1 1 0 0 0 flpvpl invvpl 0 xxx 1 rpot item_potion 14 item_potion_drink 0 0 5 0 1 1 0 0 0 0 0 -1 5 hitpoints 100 mana 100 4 ItemStatsrejuv1 100 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Thawing Potion 1 0 0 0 0 2 1 0 1 25 wms yps wms 16 1 1 0 0 0 flpyps invyps 0 xxx 1 wpot item_potion 14 item_potion_drink 0 0 5 0 1 0 0 0 0 0 0 -1 6 thawing freeze cold 750 coldresist 50 maxcoldresist 10 0 0 0 non 0 255 255 1 2 255 255 3 5 3 5 255 255 255 6 9 255 255 255 255 6 9 255 255 2 4 255 255 255 2 4 255 0 0 0 xxx xxx 1 1 +Tome of Town Portal 0 0 0 0 0 2 1 0 1 250 tbk bbk tbk 16 1 2 0 0 0 flpbbk invbbk 0 xxx 1 book item_book 12 item_book 0 0 5 0 0 0 1 1 20 5 0 -1 2 0 0 0 non 0 255 255 2 255 255 255 2 4 2 4 255 255 255 2 4 2 4 255 255 255 255 255 1 2 255 255 255 1 2 255 0 0 0 xxx xxx 1 +Tome of Identify 0 0 0 0 0 2 1 0 1 200 ibk rbk ibk 16 1 2 0 0 0 flprbk invrbk 0 xxx 1 book item_book 12 item_book 0 0 5 0 0 0 1 1 20 5 0 0 1 0 0 0 non 0 255 255 2 255 255 255 2 4 2 4 255 255 255 2 4 2 4 255 255 255 255 255 1 2 255 255 255 1 2 255 0 0 0 xxx xxx 1 +Amulet 0 0 1 0 0 4 1 0 1 2400 63000 amu amu amu 16 1 1 1 1 1 flpamu invamu 0 xxx 0 amul item_amulet 12 item_amulet 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Amulet of the Viper 0 0 15 0 0 4 0 0 1 400 vip vip vip 16 1 1 0 0 0 flpamu invvip invvip 0 xxx 0 amul item_amulet 12 item_amulet 0 0 5 0 0 0 0 0 0 0 10 1 0 -1 -1 0 0 0 non 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 1 xxx xxx +Ring 0 0 1 0 0 4 1 0 1 1800 50000 rin rin rin 16 1 1 1 1 1 flprin invrin 0 xxx 0 ring item_ring 12 item_ring 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Gold 1 0 0 0 0 1 1 0 1 0 gld gld gld 16 1 1 0 0 0 flpgld invgld 0 xxx 0 gold item_gold 12 item_gold 0 0 5 0 0 0 1 0 5000 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Scroll of Inifuss 1 0 0 0 0 0 0 0 1 100 bks bks bks 16 2 2 0 0 0 flpscr invscb 0 xxx 1 ques item_scroll 10 item_scroll 1 0 5 0 0 0 0 0 0 0 5 1 0 -1 0 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Key to the Cairn Stones 1 0 0 0 0 0 0 0 1 12000 bkd bkd bkd 16 2 2 0 0 0 flpscr invscb 0 xxx 1 ques item_scroll 10 item_scroll 1 0 5 0 0 0 0 0 0 0 5 1 0 -1 14 1 ReadScroll ReadScrollController 4 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Arrows 0 0 0 0 0 1 1 0 1 256 aqv aqv aqv 16 1 3 0 0 0 flpqvr invqvr 0 xxx 0 bowq item_quiver 12 item_quiver 0 0 5 0 0 0 1 150 500 250 0 -1 -1 0 1 0 non 0 3 5 255 1 3 255 255 3 4 3 4 255 255 255 3 4 3 4 255 255 255 2 3 255 2 3 255 255 3 4 255 255 3 4 255 3 4 255 255 0 0 0 xxx xxx 1 +Torch 1 0 0 0 0 0 0 0 1 50 tch bsh tch 7 1 2 0 0 0 flptrch invtrch 0 xxx 0 torc item_staff 12 item_staff 0 1 3 6 0 0 0 2 10 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Bolts 0 0 0 0 0 1 1 0 1 256 cqv cqv cqv 16 1 3 0 0 0 flpqvr invcqv 0 xxx 0 xboq item_quiver 12 item_quiver 0 0 5 0 0 0 1 150 500 250 0 -1 -1 0 1 0 non 0 2 4 255 2 4 255 255 3 4 3 4 255 255 255 3 4 3 4 255 255 255 2 3 255 2 3 255 255 3 4 255 255 3 4 255 3 4 255 255 0 0 0 xxx xxx 1 +Scroll of Town Portal 1 0 0 0 0 2 1 0 1 100 tsc bsc tsc 16 1 1 0 0 0 flpbsc invbsc 0 xxx 1 scro item_scroll 10 item_scroll 0 0 5 0 1 0 0 0 0 0 0 -1 2 0 0 0 non 0 255 255 11 17 255 255 255 11 17 11 17 255 255 255 11 17 11 17 255 255 255 255 255 5 7 255 255 255 5 7 255 0 0 0 xxx xxx 1 1 scrlt +Scroll of Identify 1 0 0 0 0 2 1 0 1 80 isc rsc isc 16 1 1 0 0 0 flprsc invrsc 0 xxx 1 scro item_scroll 10 item_scroll 0 0 5 0 1 0 0 0 0 0 0 0 1 0 0 0 non 0 255 255 11 17 255 255 255 11 17 11 17 255 255 255 11 17 11 17 255 255 255 255 255 5 7 255 255 255 5 7 255 0 0 0 xxx xxx 1 1 scrlt +Heart 0 0 0 0 0 1 0 0 1 60 hrt hrt hrt 16 1 1 0 0 0 flphrt invhrt 1 hpo 0 0 0 body item_monsterguts 14 item_monsterguts 0 0 5 0 0 0 0 0 0 0 0 -1 -1 1 convertsto 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Brain 0 0 0 0 0 1 0 0 1 60 brz brz brz 16 1 1 0 0 0 flpbrnz invbrnz 1 opm 1 1 0 body item_monsterguts 14 item_monsterguts 0 0 5 0 0 0 0 0 0 0 0 -1 -1 1 convertsto 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Jawbone 0 0 0 0 0 1 0 0 1 75 jaw jaw jaw 16 1 1 0 0 0 flpjaw invjaw 1 cqv 10 40 0 body item_monsterbone 12 item_monsterbone 0 0 5 0 0 0 0 0 0 0 0 -1 -1 1 convertsto 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Eye 0 0 0 0 0 1 0 0 1 45 eyz eyz eyz 16 1 1 0 0 0 flpeye inveye 1 mpo 0 0 0 body item_monsterguts 14 item_monsterguts 0 0 5 0 0 0 0 0 0 0 0 -1 -1 1 convertsto 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Horn 0 0 0 0 0 1 0 0 1 48 hrn hrn hrn 16 1 1 0 0 0 flphorn invhorn 1 aqv 10 40 0 body item_monsterbone 12 item_monsterbone 0 0 5 0 0 0 0 0 0 0 0 -1 -1 1 convertsto 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Tail 0 0 0 0 0 1 0 0 1 63 tal tal tal 16 1 1 0 0 0 flptail invtail 1 vps 0 0 0 body item_monsterguts 14 item_monsterguts 0 0 5 0 0 0 0 0 0 0 0 -1 -1 1 convertsto 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Flag 0 0 0 0 0 1 0 0 1 98 flg flg flg 16 1 1 0 0 0 flpflag invflag 0 xxx 0 body item_lightarmor 12 item_lightarmor 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Fang 0 0 0 0 0 1 0 0 1 80 fng fng fng 16 1 1 0 0 0 flpfang invfang 1 key 1 1 0 body item_monsterbone 12 item_monsterbone 0 0 5 0 0 0 0 0 0 0 0 -1 -1 1 convertsto 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Quill 0 0 0 0 0 1 0 0 1 32 qll qll qll 16 1 1 0 0 0 flpquil invquil 1 aqv 10 40 0 body item_monsterbone 12 item_monsterbone 0 0 5 0 0 0 0 0 0 0 0 -1 -1 1 convertsto 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Soul 0 0 0 0 0 1 0 0 1 100 sol sol sol 16 1 1 0 0 0 flpsple invsple 1 mpo 0 0 0 body item_rare 12 0 0 5 0 0 0 0 0 0 0 0 -1 -1 1 convertsto 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Scalp 0 0 0 0 0 1 0 0 1 40 scz scz scz 16 1 1 0 0 0 flpscp invscp 1 hpf 0 0 0 body item_monsterguts 14 item_monsterguts 0 0 5 0 0 0 0 0 0 0 0 -1 -1 1 convertsto 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Spleen 0 0 0 0 0 1 0 0 1 85 spe spe spe 16 1 1 0 0 0 flpsple invsple 1 gps 1 1 0 body item_monsterguts 14 item_monsterguts 0 0 5 0 0 0 0 0 0 0 0 -1 -1 1 convertsto 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Key 0 0 0 0 0 1 1 0 1 45 key key key 16 1 1 0 0 0 flpkey invkey 0 xxx 0 key item_key 12 item_key 0 0 5 0 0 0 1 1 12 6 0 -1 -1 0 0 0 non 0 255 5 9 5 9 255 1 2 1 2 255 255 6 9 6 9 255 255 2 3 2 3 255 255 255 255 255 255 255 1 1 255 255 255 1 2 1 2 255 0 0 0 xxx xxx 1 1 keysr +The Black Tower Key 0 0 0 0 0 1 0 0 1 99999 luv key luv 16 1 2 0 0 0 flpmph invmph 0 xxx 0 key item_key 12 item_key 0 0 5 0 0 0 0 0 0 0 20 1 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Potion of Life 0 0 0 0 0 999 0 0 1 10000 xyz scr xyz 16 1 1 0 0 0 flpwps invxyz 0 xxx 1 ques item_potion 14 item_potion_drink 0 0 5 0 0 0 0 0 0 0 19 1 0 -1 11 1 UsePotionOfLife UsePotionOfLifeController 4 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +A Jade Figurine 1 0 0 0 0 0 0 0 1 100 j34 bks j34 16 1 2 0 0 0 flpjbi invjbi 0 xxx 0 ques item_rare 12 1 0 3 0 0 0 0 0 0 0 19 1 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +The Golden Bird 1 0 0 0 0 0 0 0 1 100 g34 bks g34 16 1 2 0 0 0 flpgbi invgbi 0 xxx 0 ques item_rare 12 1 0 4 0 0 0 0 0 0 0 19 1 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Lam Esen's Tome 1 0 0 0 0 0 0 0 1 100 bbb bbb bbb 16 2 2 0 0 0 flpbbb invbbb 0 xxx 0 ques item_book 12 item_book 1 0 5 0 0 0 0 0 0 0 16 1 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Horadric Cube 0 0 0 0 0 0 0 0 1 0 box rbk box 16 2 2 0 0 0 flpbox invbox 0 xxx 1 ques item_rare 12 0 0 5 0 0 0 0 0 0 0 10 0 -1 7 1 OpenHoradricCube OpenHoradricCubeController 4 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Horadric Scroll 1 0 0 0 0 999 0 0 1 0 tr1 grg tr1 16 2 2 0 0 0 flphscr invhscr 0 xxx 0 ques item_book 12 item_book 1 0 5 0 0 0 0 0 0 0 10 1 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Mephisto's Soulstone 1 0 0 0 0 999 0 0 1 0 mss scr mss 16 1 1 0 0 0 flpmss invmss 0 xxx 0 ques item_gem 12 item_gem 1 0 5 0 0 0 0 0 0 0 25 1 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Book of Skill 1 0 0 0 0 999 0 0 1 0 ass tbk ass 16 2 2 0 0 0 flpbbk invsbk 0 xxx 1 ques item_book 12 item_book 1 0 5 0 0 0 0 0 0 0 15 1 0 -1 10 1 UseBookOfSkill UseBookOfSkillController 4 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Khalim's Eye 1 0 0 0 0 1 0 0 1 45 qey eyz qey 16 1 1 0 0 0 flpeye inveye 0 xxx 0 ques item_monsterguts 14 item_monsterguts 0 0 5 0 0 0 0 0 0 0 17 1 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Khalim's Heart 1 0 0 0 0 1 0 0 1 60 qhr hrt qhr 16 1 1 0 0 0 flphrt invhrt 0 xxx 0 ques item_monsterguts 14 item_monsterguts 0 0 5 0 0 0 0 0 0 0 17 1 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Khalim's Brain 1 0 0 0 0 1 0 0 1 60 qbr brz qbr 16 1 1 0 0 0 flpbrnz invbrnz 0 xxx 0 ques item_monsterguts 14 item_monsterguts 0 0 5 0 0 0 0 0 0 0 17 1 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Ear 1 0 0 0 0 1 0 0 1 0 ear ear ear 16 1 1 0 0 0 flpear invear 0 xxx 0 play item_monsterguts 14 item_monsterguts 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Chipped Amethyst 1 0 0 0 1 2 1 0 1 500 gcv gcv gcv 16 1 1 0 0 0 flpgsv invgsva 0 xxx 0 gema gem0 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 gfv 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Flawed Amethyst 1 0 0 0 5 3 1 0 1 1500 gfv gfv gfv 16 1 1 0 0 0 flpgsv invgsvb 0 xxx 0 gema gem1 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 gsv 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Amethyst 1 0 0 0 12 4 1 0 1 5000 gsv gsv gsv 16 1 1 0 0 0 flpgsv invgsvc 0 xxx 0 gema gem2 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 gzv 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Flawless Amethyst 1 0 0 0 15 5 1 0 1 15000 gzv gzv gzv 16 1 1 0 0 0 flpgsv invgsvd 0 xxx 0 gema gem3 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 gpv 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Perfect Amethyst 1 0 0 0 18 6 1 0 1 30000 gpv gpv gpv 16 1 1 0 0 0 flpgsv invgsve 0 xxx 0 gema gem4 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Chipped Topaz 1 0 0 0 1 3 1 0 1 500 gcy gcy gcy 16 1 1 0 0 0 flpgsy invgsya 0 xxx 0 gemt gem0 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 gfy 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Flawed Topaz 1 0 0 0 5 4 1 0 1 1500 gfy gfy gfy 16 1 1 0 0 0 flpgsy invgsyb 0 xxx 0 gemt gem1 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 gsy 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Topaz 1 0 0 0 12 5 1 0 1 5000 gsy gsy gsy 16 1 1 0 0 0 flpgsy invgsyc 0 xxx 0 gemt gem2 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 gly 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Flawless Topaz 1 0 0 0 15 6 1 0 1 15000 gly gly gly 16 1 1 0 0 0 flpgsy invgsyd 0 xxx 0 gemt gem3 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 gpy 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Perfect Topaz 1 0 0 0 18 7 1 0 1 30000 gpy gpy gpy 16 1 1 0 0 0 flpgsy invgsye 0 xxx 0 gemt gem4 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Chipped Sapphire 1 0 0 0 1 4 1 0 1 500 gcb gcb gcb 16 1 1 0 0 0 flpgsb invgsba 0 xxx 0 gems gem0 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 gfb 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Flawed Sapphire 1 0 0 0 5 5 1 0 1 1500 gfb gfb gfb 16 1 1 0 0 0 flpgsb invgsbb 0 xxx 0 gems gem1 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 gsb 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Sapphire 1 0 0 0 12 6 1 0 1 5000 gsb gsb gsb 16 1 1 0 0 0 flpgsb invgsbc 0 xxx 0 gems gem2 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 glb 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Flawless Sapphire 1 0 0 0 15 7 1 0 1 15000 glb glb glb 16 1 1 0 0 0 flpgsb invgsbd 0 xxx 0 gems gem3 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 gpb 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Perfect Sapphire 1 0 0 0 18 8 1 0 1 30000 gpb gpb gpb 16 1 1 0 0 0 flpgsb invgsbe 0 xxx 0 gems gem4 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Chipped Emerald 1 0 0 0 1 5 1 0 1 500 gcg gcg gcg 16 1 1 0 0 0 flpgsg invgsga 0 xxx 0 geme gem0 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 gfg 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Flawed Emerald 1 0 0 0 5 6 1 0 1 1500 gfg gfg gfg 16 1 1 0 0 0 flpgsg invgsgb 0 xxx 0 geme gem1 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 gsg 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Emerald 1 0 0 0 12 7 1 0 1 5000 gsg gsg gsg 16 1 1 0 0 0 flpgsg invgsgc 0 xxx 0 geme gem2 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 glg 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Flawless Emerald 1 0 0 0 15 8 1 0 1 15000 glg glg glg 16 1 1 0 0 0 flpgsg invgsgd 0 xxx 0 geme gem3 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 gpg 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Perfect Emerald 1 0 0 0 18 9 1 0 1 30000 gpg gpg gpg 16 1 1 0 0 0 flpgsg invgsge 0 xxx 0 geme gem4 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Chipped Ruby 1 0 0 0 1 6 1 0 1 500 gcr gcr gcr 16 1 1 0 0 0 flpgsr invgsra 0 xxx 0 gemr gem0 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 gfr 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Flawed Ruby 1 0 0 0 5 7 1 0 1 1500 gfr gfr gfr 16 1 1 0 0 0 flpgsr invgsrb 0 xxx 0 gemr gem1 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 gsr 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Ruby 1 0 0 0 12 8 1 0 1 5000 gsr gsr gsr 16 1 1 0 0 0 flpgsr invgsrc 0 xxx 0 gemr gem2 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 glr 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Flawless Ruby 1 0 0 0 15 9 1 0 1 15000 glr glr glr 16 1 1 0 0 0 flpgsr invgsrd 0 xxx 0 gemr gem3 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 gpr 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Perfect Ruby 1 0 0 0 18 10 1 0 1 30000 gpr gpr gpr 16 1 1 0 0 0 flpgsr invgsre 0 xxx 0 gemr gem4 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Chipped Diamond 1 0 0 0 1 7 1 0 1 500 gcw gcw gcw 16 1 1 0 0 0 flpgsw invgswa 0 xxx 0 gemd gem0 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 gfw 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Flawed Diamond 1 0 0 0 5 8 1 0 1 1500 gfw gfw gfw 16 1 1 0 0 0 flpgsw invgswb 0 xxx 0 gemd gem1 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 gsw 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Diamond 1 0 0 0 12 9 1 0 1 5000 gsw gsw gsw 16 1 1 0 0 0 flpgsw invgswc 0 xxx 0 gemd gem2 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 glw 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Flawless Diamond 1 0 0 0 15 10 1 0 1 15000 glw glw glw 16 1 1 0 0 0 flpgsw invgswd 0 xxx 0 gemd gem3 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 gpw 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Perfect Diamond 1 0 0 0 18 11 1 0 1 30000 gpw gpw gpw 16 1 1 0 0 0 flpgsw invgswe 0 xxx 0 gemd gem4 item_gem 12 item_gem 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Minor Healing Potion 1 0 0 0 0 1 1 0 1 30 hp1 hp1 hp1 16 1 1 0 0 0 flprps invhp1 0 xxx 1 hpot item_potion 14 item_potion_drink 0 0 5 0 1 1 0 0 0 0 0 -1 3 healthpot 192 hpregen 30 2 ItemStats1q 30 0 0 0 non 0 255 255 1 1 255 255 1 1 255 1 1 255 255 255 1 1 255 255 255 255 255 1 1 255 255 255 1 1 255 0 0 0 hp4 hp5 1 1 +Light Healing Potion 1 0 0 0 0 1 1 0 1 75 hp2 hp2 hp2 16 1 1 0 0 0 flprps invhp2 0 xxx 1 hpot item_potion 14 item_potion_drink 0 0 5 0 1 1 0 0 0 0 0 -1 3 healthpot 160 hpregen 60 2 ItemStats1q 60 0 0 0 non 0 255 255 255 255 1 1 255 1 1 255 255 255 1 1 255 255 255 255 255 1 1 255 255 255 1 1 255 0 0 0 hp4 hp5 1 1 +Healing Potion 1 0 0 0 0 1 1 0 1 125 hp3 hp3 hp3 16 1 1 0 0 0 flprps invhp3 0 xxx 1 hpot item_potion 14 item_potion_drink 0 0 5 0 1 1 0 0 0 0 0 -1 3 healthpot 171 hpregen 100 2 ItemStats1q 100 0 0 0 non 0 255 255 255 255 255 255 255 255 1 1 255 255 255 255 255 1 1 255 255 255 1 1 255 0 0 0 hp4 hp5 1 1 +Greater Healing Potion 1 0 0 0 0 1 1 0 1 250 hp4 hp4 hp4 16 1 1 0 0 0 flprpl invhp4 0 xxx 1 hpot item_potion 14 item_potion_drink 0 0 5 0 1 1 0 0 0 0 0 -1 3 healthpot 192 hpregen 180 2 ItemStats1q 180 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 1 1 255 255 255 1 1 255 0 0 0 xxx hp5 1 1 +Super Healing Potion 1 0 0 0 0 1 1 0 1 500 hp5 hp5 hp5 16 1 1 0 0 0 flprpl invhp5 0 xxx 1 hpot item_potion 14 item_potion_drink 0 0 5 0 1 1 0 0 0 0 0 -1 3 healthpot 256 hpregen 320 2 ItemStats1q 320 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 1 +Minor Mana Potion 1 0 0 0 0 1 1 0 1 60 mp1 mp1 mp1 16 1 1 0 0 0 flpbps invmp1 0 xxx 1 mpot item_potion 14 item_potion_drink 0 0 5 0 1 1 0 0 0 0 0 -1 3 manapot 128 manarecovery 20 2 ItemStats1q 20 0 0 0 non 0 255 255 1 1 255 255 1 1 255 1 1 255 255 255 1 1 255 255 255 255 255 1 1 255 255 255 1 1 255 0 0 0 mp4 mp5 1 1 +Light Mana Potion 1 0 0 0 0 1 1 0 1 150 mp2 mp2 mp2 16 1 1 0 0 0 flpbps invmp2 0 xxx 1 mpot item_potion 14 item_potion_drink 0 0 5 0 1 1 0 0 0 0 0 -1 3 manapot 128 manarecovery 40 2 ItemStats1q 40 0 0 0 non 0 255 255 255 255 1 1 255 1 1 255 255 255 1 1 255 255 255 255 255 1 1 255 255 255 1 1 255 0 0 0 mp4 mp5 1 1 +Mana Potion 1 0 0 0 0 1 1 0 1 300 mp3 mp3 mp3 16 1 1 0 0 0 flpbps invmp3 0 xxx 1 mpot item_potion 14 item_potion_drink 0 0 5 0 1 1 0 0 0 0 0 -1 3 manapot 128 manarecovery 80 2 ItemStats1q 80 0 0 0 non 0 255 255 255 255 255 255 255 255 1 1 255 255 255 255 255 1 1 255 255 255 1 1 255 0 0 0 mp4 mp5 1 1 +Greater Mana Potion 1 0 0 0 0 1 1 0 1 500 mp4 mp4 mp4 16 1 1 0 0 0 flpbpl invmp4 0 xxx 1 mpot item_potion 14 item_potion_drink 0 0 5 0 1 1 0 0 0 0 0 -1 3 manapot 128 manarecovery 150 2 ItemStats1q 150 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 1 1 255 255 255 1 1 255 0 0 0 xxx mp5 1 1 +Super Mana Potion 1 0 0 0 0 1 1 0 1 1000 mp5 mp5 mp5 16 1 1 0 0 0 flpbpl invmp5 0 xxx 1 mpot item_potion 14 item_potion_drink 0 0 5 0 1 1 0 0 0 0 0 -1 3 manapot 128 manarecovery 250 2 ItemStats1q 250 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 1 +Chipped Skull 1 0 0 0 1 8 1 0 1 1000 skc skc skc 16 1 1 0 0 0 flpskl invskc 0 xxx 0 gemz gem0 item_monsterbone 12 item_monsterbone 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 skf 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Flawed Skull 1 0 0 0 5 9 1 0 1 3000 skf skf skf 16 1 1 0 0 0 flpskl invskf 0 xxx 0 gemz gem1 item_monsterbone 12 item_monsterbone 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 sku 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Skull 1 0 0 0 12 10 1 0 1 10000 sku sku sku 16 1 1 0 0 0 flpskl invsku 0 xxx 0 gemz gem2 item_monsterbone 12 item_monsterbone 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 skl 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Flawless Skull 1 0 0 0 15 11 1 0 1 30000 skl skl skl 16 1 1 0 0 0 flpskl invskl 0 xxx 0 gemz gem3 item_monsterbone 12 item_monsterbone 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 skz 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Perfect Skull 1 0 0 0 18 12 1 0 1 100000 skz skz skz 16 1 1 0 0 0 flpskl invskz 0 xxx 0 gemz gem4 item_monsterbone 12 item_monsterbone 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Expansion +Herb 0 100 3 0 0 3 0 0 1 75 hrb hrb hrb 16 1 1 0 0 0 flphrb invhrb 0 xxx 1 herb item_herb 12 item_herb 0 0 5 0 1 0 0 0 0 0 0 -1 10 innersight 1000 velocitypercent 25 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Small Charm 0 100 28 0 0 4 1 0 1 2000 45000 cm1 rld cm1 16 1 1 0 0 0 flpchm1 invchm 0 xxx 0 scha item_charm 12 item_charm 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Large Charm 0 100 14 0 0 8 1 0 1 1000 38000 cm2 rda cm2 16 1 2 0 0 0 flpchm2 invwnd 0 xxx 0 mcha item_charm 12 item_charm 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Grand Charm 0 100 1 0 0 12 1 0 1 600 32000 cm3 rgd cm3 16 1 3 0 0 0 flpchm3 invsst 0 xxx 0 lcha item_charm 12 item_charm 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 8 8 0 xxx xxx +Small Red Potion 1 100 0 0 0 1 0 0 1 100 rps rps rps 16 1 1 0 0 0 flprps invrps 0 xxx 0 hpot item_potion 14 item_potion_drink 0 0 5 0 0 0 1 5 10 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx Null +Large Red Potion 1 100 0 0 0 1 0 0 1 100 rpl rpl rpl 16 1 1 0 0 0 flprpl invrpl 0 xxx 0 hpot item_potion 14 item_potion_drink 0 0 5 0 0 0 1 5 10 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx Null +Small Blue Potion 1 100 0 0 0 1 0 0 1 100 bps bps bps 16 1 1 0 0 0 flpbps invbps 0 xxx 0 mpot item_potion 14 item_potion_drink 0 0 5 0 0 0 1 5 10 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx Null +Large Blue Potion 1 100 0 0 0 1 0 0 1 100 bpl bpl bpl 16 1 1 0 0 0 flpbpl invbpl 0 xxx 0 mpot item_potion 14 item_potion_drink 0 0 5 0 0 0 1 5 10 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx Null +El Rune 1 100 11 0 11 1 1 0 1 560 r01 r01 r01 16 1 1 0 0 0 flprun invrEl 0 xxx 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Eld Rune 1 100 11 0 11 1 1 0 1 560 r02 r02 r02 16 1 1 0 0 0 flprun invrEld 0 xxx 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Tir Rune 1 100 13 0 13 2 1 0 1 1260 r03 r03 r03 16 1 1 0 0 0 flprun invrTir 0 xxx 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Nef Rune 1 100 13 0 13 2 1 0 1 1260 r04 r04 r04 16 1 1 0 0 0 flprun invrNef 0 xxx 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Eth Rune 1 100 15 0 15 3 1 0 1 2240 r05 r05 r05 16 1 1 0 0 0 flprun invrEth 0 xxx 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Ith Rune 1 100 15 0 15 3 1 0 1 2240 r06 r06 r06 16 1 1 0 0 0 flprun invrIth 0 xxx 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Tal Rune 1 100 17 0 17 4 1 0 1 3500 r07 r07 r07 16 1 1 0 0 0 flprun invrTal 0 xxx 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Ral Rune 1 100 19 0 19 5 1 0 1 5040 r08 r08 r08 16 1 1 0 0 0 flprun invrRal 0 xxx 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Ort Rune 1 100 21 0 21 6 1 0 1 6860 r09 r09 r09 16 1 1 0 0 0 flprun invrOrt 0 xxx 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Thul Rune 1 100 23 0 23 7 1 0 1 8960 r10 r10 r10 16 1 1 0 0 0 flprun invrThul 0 xxx 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Amn Rune 1 100 25 0 25 8 1 0 1 11340 r11 r11 r11 16 1 1 0 0 0 flprun invrAmn 0 xxx 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Sol Rune 1 100 27 0 27 9 1 0 1 14000 r12 r12 r12 16 1 1 0 0 0 flprun invrSol 0 xxx 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Shael Rune 1 100 29 0 29 10 1 0 1 16940 r13 r13 r13 16 1 1 0 0 0 flprun invrShae 0 xxx 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Dol Rune 1 100 31 0 31 11 1 0 1 20160 r14 r14 r14 16 1 1 0 0 0 flprun invrDol 0 xxx 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Hel Rune 1 100 33 0 0 12 1 0 1 1715 r15 r15 r15 16 1 1 0 0 0 flprun invrHel 0 xxx 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Io Rune 1 100 35 0 35 13 1 0 1 27440 r16 r16 r16 16 1 1 0 0 0 flprun invrIo 0 xxx 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Lum Rune 1 100 37 0 37 14 1 0 1 31500 r17 r17 r17 16 1 1 0 0 0 flprun invrLum 0 xxx 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Ko Rune 1 100 39 0 39 15 1 0 1 35840 r18 r18 r18 16 1 1 0 0 0 flprun invrKo 0 xxx 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Fal Rune 1 100 41 0 41 16 1 0 1 40460 r19 r19 r19 16 1 1 0 0 0 flprun invrFal 0 xxx 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Lem Rune 1 100 43 0 43 17 1 0 1 45360 r20 r20 r20 16 1 1 0 0 0 flprun invrLem 0 xxx 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Pul Rune 1 100 45 0 45 18 1 0 1 50540 r21 r21 r21 16 1 1 0 0 0 flprun invrPul 0 xxx 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Um Rune 1 100 47 0 47 19 1 0 1 56000 r22 r22 r22 16 1 1 0 0 0 flprun invrUm 0 xxx 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Mal Rune 1 100 49 0 49 20 1 0 1 61740 r23 r23 r23 16 1 1 0 0 0 flprun invrMal 0 xxx 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Ist Rune 1 100 51 0 51 21 1 0 1 67760 r24 r24 r24 16 1 1 0 0 0 flprun invrIst 0 xxx 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Gul Rune 1 100 53 0 53 22 1 0 1 74060 r25 r25 r25 16 1 1 0 0 0 flprun invrGul 0 xxx 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Vex Rune 1 100 55 0 55 23 1 0 1 80640 r26 r26 r26 16 1 1 0 0 0 flprun invrVex 0 xxx 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Ohm Rune 1 100 57 0 57 24 1 0 1 87500 r27 r27 r27 16 1 1 0 0 0 flprun invrOhm 0 xxx 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Lo Rune 1 100 59 0 59 25 1 0 1 94640 r28 r28 r28 16 1 1 0 0 0 flprun invrLo 0 xxx 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Sur Rune 1 100 61 0 61 26 1 0 1 102060 r29 r29 r29 16 1 1 0 0 0 flprun invrSur 0 xxx 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Ber Rune 1 100 63 0 63 27 1 0 1 109760 r30 r30 r30 16 1 1 0 0 0 flprun invrBer 0 xxx 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Jah Rune 1 100 65 0 65 28 1 0 1 117740 r31 r31 r31 16 1 1 0 0 0 flprun invrJo 0 xxx 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Cham Rune 1 100 67 0 67 29 1 0 1 126000 r32 r32 r32 16 1 1 0 0 0 flprun invrCham 0 xxx 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Zod Rune 1 100 69 0 69 30 1 0 1 134540 r33 r33 r33 16 1 1 0 0 0 flprun invrZod 0 xxx 0 rune item_rune 12 item_rune 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 +Jewel 0 100 1 0 0 8 1 0 1 1000 jew gpw jew 16 1 1 0 0 0 flpgsw invgswe 0 xxx 0 jewl item_jewel 12 item_jewel 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Malah's Potion 0 100 0 0 0 999 0 0 1 10000 ice scr ice 16 1 1 0 0 0 flpwps invxyz 0 xxx 0 ques item_potion 14 item_potion_drink 0 0 5 0 0 0 0 0 0 0 32 1 0 -1 -1 1 MalahsPotionDescription 4 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Scroll of Knowledge 0 100 0 0 0 0 1 0 1 100 0sc rsc 0sc 16 1 1 0 0 0 flprsc invrsc 0 xxx 0 scro item_scroll 10 item_scroll 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Scroll of Resistance 1 100 0 0 0 999 0 0 1 0 tr2 scr tr2 16 2 2 0 0 0 flpscr invscb 0 xxx 1 ques item_scroll 10 item_scroll 1 0 5 0 0 0 0 0 0 0 32 1 0 -1 12 1 UseScrollOfResistance UseScrollOfResistanceController 4 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Key of Terror 0 100 0 0 0 1 0 0 1 99999 pk1 key pk1 16 1 2 0 0 0 flpmph invmph 0 xxx 0 ques item_key 12 item_key 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 uberm 1 +Key of Hate 0 100 0 0 0 1 0 0 1 99999 pk2 key pk2 16 1 2 0 0 0 flpmph invmph 0 xxx 0 ques item_key 12 item_key 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 uberm 1 +Key of Destruction 0 100 0 0 0 1 0 0 1 99999 pk3 key pk3 16 1 2 0 0 0 flpmph invmph 0 xxx 0 ques item_key 12 item_key 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 uberm 1 +Diablo's Horn 0 100 0 0 0 1 0 0 1 80 dhn fng dhn 16 1 1 0 0 0 flpfang invfang 0 xxx 0 ques item_diablos_horn_hd 12 item_diablos_horn_hd 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 uberm 1 +Baal's Eye 0 100 0 0 0 1 0 0 1 80 bey eyz bey 16 1 1 0 0 0 flpeye inveye 0 xxx 0 ques item_baals_eye_hd 12 item_baals_eye_hd 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 uberm 1 +Mephisto's Brain 0 100 0 0 0 1 0 0 1 80 mbr brz mbr 16 1 1 0 0 0 flpbrnz invbrnz 0 xxx 0 ques item_mephistos_brain_hd 12 item_mephistos_brain_hd 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 uberm 1 +Token of Absolution 0 100 0 0 0 999 0 0 1 99999 toa toa toa 16 1 1 0 0 0 flprun invtoa 0 xxx 1 ques item_amulet 14 item_book 0 0 5 0 0 0 0 0 0 0 0 -1 13 1 UseTokenOfAbsolution UseTokenOfAbsolutionController 8 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 absol 1 +Twisted Essence of Suffering 0 100 0 0 0 1 0 0 1 10000 tes fng tes 16 1 1 0 0 0 flpgsb invtes 0 xxx 0 ques item_rare 12 item_rare 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 absol 1 +Charged Essense of Hatred 0 100 0 0 0 1 0 0 1 10000 ceh eyz ceh 16 1 1 0 0 0 flpgsy invceh 0 xxx 0 ques item_rare 12 item_rare 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 absol 1 +Burning Essence of Terror 0 100 0 0 0 1 0 0 1 10000 bet fng bet 16 1 1 0 0 0 flpgsr invbet 0 xxx 0 ques item_rare 12 item_rare 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 absol 1 +Festering Essence of Destruction 0 100 0 0 0 1 0 0 1 10000 fed brz fed 16 1 1 0 0 0 flpgsg invfed 0 xxx 0 ques item_rare 12 item_rare 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 absol 1 +Standard of Heroes 0 100 90 0 90 4 1 0 1 2000 std flg std 16 1 1 0 0 0 flpflag invflag 0 xxx 0 ques item_charm 12 item_charm 1 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx uberm +Western Worldstone Shard 0 100 75 0 0 14 1 0 1 20000 xa1 xa1 xa1 16 1 1 0 0 0 flprun invtoa 0 xxx 1 ques item_worldstone_shard_hd 12 item_worldstone_shard_hd 0 0 5 0 0 0 0 0 0 0 0 -1 15 1 1 UseTerrorTokenAct1 UseTerrorTokenAct1Controller 8 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 terrt 1 "(cond('IsDesecratedZonesEnabled')?cond('Difficulty',hell):0)" +Eastern Worldstone Shard 0 100 75 0 0 14 1 0 1 20000 xa2 xa2 xa2 16 1 1 0 0 0 flprun invtoa 0 xxx 1 ques item_worldstone_shard_hd 12 item_worldstone_shard_hd 0 0 5 0 0 0 0 0 0 0 0 -1 15 2 1 UseTerrorTokenAct2 UseTerrorTokenAct2Controller 8 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 terrt 1 "(cond('IsDesecratedZonesEnabled')?cond('Difficulty',hell):0)" +Southern Worldstone Shard 0 100 75 0 0 14 1 0 1 20000 xa3 xa3 xa3 16 1 1 0 0 0 flprun invtoa 0 xxx 1 ques item_worldstone_shard_hd 12 item_worldstone_shard_hd 0 0 5 0 0 0 0 0 0 0 0 -1 15 3 1 UseTerrorTokenAct3 UseTerrorTokenAct3Controller 8 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 terrt 1 "(cond('IsDesecratedZonesEnabled')?cond('Difficulty',hell):0)" +Deep Worldstone Shard 0 100 75 0 0 14 1 0 1 20000 xa4 xa4 xa4 16 1 1 0 0 0 flprun invtoa 0 xxx 1 ques item_worldstone_shard_hd 12 item_worldstone_shard_hd 0 0 5 0 0 0 0 0 0 0 0 -1 15 4 1 UseTerrorTokenAct4 UseTerrorTokenAct4Controller 8 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 terrt 1 "(cond('IsDesecratedZonesEnabled')?cond('Difficulty',hell):0)" +Northern Worldstone Shard 0 100 75 0 0 14 1 0 1 20000 xa5 xa5 xa5 16 1 1 0 0 0 flprun invtoa 0 xxx 1 ques item_worldstone_shard_hd 12 item_worldstone_shard_hd 0 0 5 0 0 0 0 0 0 0 0 -1 15 5 1 UseTerrorTokenAct5 UseTerrorTokenAct5Controller 8 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 terrt 1 "(cond('IsDesecratedZonesEnabled')?cond('Difficulty',hell):0)" +Uber Ancient Summon Material Act 1 0 100 0 0 0 5 0 0 1 20000 ua1 ua1 ua1 16 1 2 0 0 0 flpjbi invjbi 0 xxx 0 ques item_rare 12 item_rare 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 uberm 1 +Uber Ancient Summon Material Act 2 0 100 0 0 0 5 0 0 1 20000 ua2 ua2 ua2 16 1 2 0 0 0 flpjbi invjbi 0 xxx 0 ques item_rare 12 item_rare 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 uberm 1 +Uber Ancient Summon Material Act 3 0 100 0 0 0 5 0 0 1 20000 ua3 ua3 ua3 16 1 2 0 0 0 flpjbi invjbi 0 xxx 0 ques item_rare 12 item_rare 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 uberm 1 +Uber Ancient Summon Material Act 4 0 100 0 0 0 5 0 0 1 20000 ua4 ua4 ua4 16 1 2 0 0 0 flpjbi invjbi 0 xxx 0 ques item_rare 12 item_rare 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 uberm 1 +Uber Ancient Summon Material Act5 0 100 0 0 0 5 0 0 1 20000 ua5 ua5 ua5 16 1 2 0 0 0 flpjbi invjbi 0 xxx 0 ques item_rare 12 item_rare 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 1 uberm 1 +Uber Ancient Upgrade Material Fire 0 100 0 0 0 5 1 0 1 20000 um1 um1 um1 16 1 1 0 0 0 flpflag invflag 0 xxx 0 ques item_rare 12 item_rare 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Uber Ancient Upgrade Material Poison 0 100 0 0 0 5 1 0 1 20000 um2 um2 um2 16 1 1 0 0 0 flpflag invflag 0 xxx 0 ques item_rare 12 item_rare 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Uber Ancient Upgrade Material Cold 0 100 0 0 0 5 1 0 1 20000 um3 um3 um3 16 1 1 0 0 0 flpflag invflag 0 xxx 0 ques item_rare 12 item_rare 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Uber Ancient Upgrade Material Physical 0 100 0 0 0 5 1 0 1 20000 um4 um4 um4 16 1 1 0 0 0 flpflag invflag 0 xxx 0 ques item_rare 12 item_rare 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Uber Ancient Upgrade Material Lightning 0 100 0 0 0 5 1 0 1 20000 um5 um5 um5 16 1 1 0 0 0 flpflag invflag 0 xxx 0 ques item_rare 12 item_rare 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Uber Ancient Upgrade Material Magic 0 100 0 0 0 5 1 0 1 20000 um6 um6 um6 16 1 1 0 0 0 flpflag invflag 0 xxx 0 ques item_rare 12 item_rare 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx +Colossal Jewel 0 100 1 0 0 8 1 0 1 1000 cjw gpw jew 16 1 1 0 0 0 flpgsw invgswe 0 xxx 0 cjwl item_jewel 12 item_jewel 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx dns +Crafted Sunder Charm 0 100 1 0 75 12 0 0 1 600 32000 cs2 rgd cm3 16 1 3 0 0 0 flpchm3 invsst 0 xxx 0 csch item_charm 12 item_charm 0 0 5 0 0 0 0 0 0 0 0 -1 -1 0 0 0 non 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 8 8 0 xxx xxx diff --git a/src/D2SSharp/Data/Txt/105/weapons.txt b/src/D2SSharp/Data/Txt/105/weapons.txt new file mode 100644 index 0000000..1b68537 --- /dev/null +++ b/src/D2SSharp/Data/Txt/105/weapons.txt @@ -0,0 +1,308 @@ +name type type2 code alternategfx namestr version compactsave rarity spawnable DropConditionCalc Transmogrify TMogType TMogMin TMogMax mindam maxdam 1or2handed 2handed 2handmindam 2handmaxdam minmisdam maxmisdam rangeadder speed StrBonus DexBonus reqstr reqdex durability nodurability level ShowLevel levelreq cost gamble cost magic lvl auto prefix normcode ubercode ultracode wclass 2handedwclass component hit class invwidth invheight stackable minstack maxstack spawnstack flippyfile invfile uniqueinvfile setinvfile hasinv gemsockets gemapplytype *comment useable dropsound dropsfxframe usesound unique transparent transtbl *quivered lightradius belt quest questdiffcheck missiletype durwarning qntwarning gemoffset bitfield1 CharsiMin CharsiMax CharsiMagicMin CharsiMagicMax CharsiMagicLvl GheedMin GheedMax GheedMagicMin GheedMagicMax GheedMagicLvl AkaraMin AkaraMax AkaraMagicMin AkaraMagicMax AkaraMagicLvl FaraMin FaraMax FaraMagicMin FaraMagicMax FaraMagicLvl LysanderMin LysanderMax LysanderMagicMin LysanderMagicMax LysanderMagicLvl DrognanMin DrognanMax DrognanMagicMin DrognanMagicMax DrognanMagicLvl HratliMin HratliMax HratliMagicMin HratliMagicMax HratliMagicLvl AlkorMin AlkorMax AlkorMagicMin AlkorMagicMax AlkorMagicLvl OrmusMin OrmusMax OrmusMagicMin OrmusMagicMax OrmusMagicLvl ElzixMin ElzixMax ElzixMagicMin ElzixMagicMax ElzixMagicLvl AshearaMin AshearaMax AshearaMagicMin AshearaMagicMax AshearaMagicLvl CainMin CainMax CainMagicMin CainMagicMax CainMagicLvl HalbuMin HalbuMax HalbuMagicMin HalbuMagicMax HalbuMagicLvl JamellaMin JamellaMax JamellaMagicMin JamellaMagicMax JamellaMagicLvl LarzukMin LarzukMax LarzukMagicMin LarzukMagicMax LarzukMagicLvl AnyaMin AnyaMax AnyaMagicMin AnyaMagicMax AnyaMagicLvl MalahMin MalahMax MalahMagicMin MalahMagicMax MalahMagicLvl Transform InvTrans SkipName NightmareUpgrade HellUpgrade Nameable PermStoreItem UICatOverride diablocloneweight +Hand Axe axe hax hax hax 0 3 1 0 xxx 3 6 100 28 3 0 0 170 4510 hax 9ha 7ha 1hs 1hs 5 1hsl 1 3 flphax invhax invhaxu invhaxu 1 2 0 0 item_smallmetalweapon 12 item_smallmetalweapon 0 0 5 0 0 0 35 7 0 0 3 1 1 1 1 1 255 255 255 255 255 255 255 255 1 1 1 1 255 255 255 255 255 255 255 2 2 0 axe 2ax 1 0 +Axe axe axe axe axe 0 4 1 0 xxx 4 11 1 10 100 32 24 7 0 0 403 8821 axe 9ax 7ax 1hs 1hs 5 1hsl 2 3 flpaxe invaxe invaxeu invaxeu 1 4 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 1 1 1 1 1 1 1 1 1 20 255 255 255 255 255 255 255 1 1 1 1 1 255 255 255 255 255 255 255 2 2 0 2ax mpi 1 0 +Double Axe axe 2ax axe 2ax 0 4 1 0 xxx 5 13 1 10 100 43 24 13 0 0 873 20349 2ax 92a 72a 1hs 1hs 5 1hsl 2 3 flp2ax inv2ax 1 5 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 1 1 30 255 1 1 1 20 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 mpi wax 1 0 +Military Pick axe mpi axe mpi 0 4 1 0 xxx 7 11 1 -10 100 49 33 26 19 0 0 1421 38999 mpi 9mp 7mp 1hs 1hs 5 1hsl 2 3 flpmpi invmpi invmpiu invmpiu 1 6 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 1 1 20 255 255 1 1 1 20 255 255 255 255 255 1 1 20 255 255 255 255 2 2 0 wax xxx 1 0 +War Axe axe wax hax wax 0 4 1 0 xxx 10 18 2 100 67 26 25 0 0 2123 68075 wax 9wa 7wa 1hs 1hs 5 1hsl 2 3 flpwax invwax 1 6 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 1 1 1 1 20 255 255 255 255 255 1 1 1 3 20 255 1 1 1 1 20 255 255 2 2 0 xxx xxx 1 0 +Large Axe axe lax lax lax 0 4 1 0 xxx 1 6 13 1 -10 100 35 30 6 0 0 354 7624 lax 9la 7la stf stf 5 2hsl 2 3 flplax invlax 1 4 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 1 1 1 1 1 1 1 1 1 20 255 255 255 255 255 255 255 1 1 1 1 255 255 255 255 255 255 255 2 2 0 btx gax 1 0 +Broad Axe axe bax lax bax 0 4 1 0 xxx 1 10 18 1 100 48 35 12 0 0 806 18172 bax 9ba 7ba stf stf 5 2hsl 2 3 flpbrx invbrx 1 5 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 1 1 1 1 20 255 1 1 1 1 20 255 255 255 255 255 1 1 1 1 1 255 255 255 255 255 255 255 2 2 0 gax gix 1 0 +Battle Axe axe btx btx btx 0 4 1 0 xxx 1 12 32 1 10 100 54 40 17 0 0 1262 32454 btx 9bt 7bt stf stf 5 2hsl 2 3 flpbtx invbtx invbtxu invbtxu 1 5 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 1 1 1 1 20 255 255 1 1 1 20 255 255 255 255 255 255 255 255 255 255 5 2 0 gix xxx 1 0 +Great Axe axe gax btx gax 0 4 1 0 xxx 1 9 30 2 -10 100 63 39 50 23 0 0 1916 58068 gax 9ga 7ga stf stf 5 2hsl 2 4 flpgax invgax invgaxu invgaxu 1 6 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 1 1 1 1 20 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Giant Axe axe gix gix gix 0 4 1 0 xxx 1 22 45 3 10 100 70 50 27 0 0 2410 81070 gix 9gi 7gi stf stf 5 2hsl 2 3 flpgix invgix 1 6 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 1 20 255 1 1 255 255 255 1 1 2 2 20 255 1 1 1 1 20 255 255 2 2 0 xxx xxx 1 0 +Wand wand wnd wnd wnd 0 1 1 0 xxx 2 4 100 15 2 0 0 205 3910 1 wnd 9wn 7wn 1hs 1hs 5 1hss 1 2 flpwnd invwnd invwndu invwndu 1 1 0 magically charged 0 item_wand 12 item_wand 0 0 5 0 0 0 0 7 0 0 5 255 255 4 6 7 9 1 255 255 1 2 1 255 255 1 255 255 255 20 255 255 255 255 5 8 0 ywn bwn 1 0 +Yew Wand wand ywn ywn ywn 0 1 1 0 xxx 2 8 10 100 15 12 0 0 745 17440 1 ywn 9yw 7yw 1hs 1hs 5 1hss 1 2 flpywn invywn 1 1 0 magically charged 0 item_wand 12 item_wand 0 0 5 0 0 0 0 7 0 0 5 255 255 1 2 1 1 1 255 255 3 5 5 9 1 255 255 2 3 2 3 1 255 255 255 20 1 20 255 255 255 5 8 0 bwn gwn 1 0 +Bone Wand wand bwn bwn bwn 0 1 1 0 xxx 3 7 -20 100 15 18 0 0 1296 34828 1 bwn 9bw 7bw 1hs 1hs 5 1hss 1 2 flpbwn invbwn invbwnu invbwnu 1 2 0 magically charged 0 item_wand 12 item_wand 0 0 5 0 0 0 0 7 0 0 5 255 255 255 255 255 1 3 1 3 1 255 255 3 5 5 7 1 255 255 255 20 3 4 2 3 20 255 255 3 4 2 3 20 1 2 0 xxx xxx 1 0 +Grim Wand wand gwn bwn gwn 0 1 1 0 xxx 5 11 100 15 26 0 0 2098 70048 1 gwn 9gw 7gw 1hs 1hs 5 1hss 1 2 flpgwn invgwn 1 2 0 magically charged 0 item_wand 12 item_wand 0 0 5 0 0 0 0 7 0 0 5 255 255 255 255 255 255 255 1 2 1 1 255 255 255 20 1 3 1 2 20 255 255 1 3 1 2 20 1 2 0 xxx xxx 1 0 +Club club clb clb clb 0 1 1 0 xxx 1 6 -10 100 24 1 0 0 32 3032 clb 9cl 7cl 1hs 1hs 5 club 1 3 flpclb invclb invclbu invclbu 1 2 0 0 item_staff 12 item_staff 0 0 5 0 0 0 0 7 0 0 1 255 1 1 1 1 20 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 2 0 mac mst 1 0 +Scepter scep scp mac scp 0 2 1 0 xxx 6 11 100 25 50 3 0 0 350 5050 scp 9sc 7sc 1hs 1hs 5 club 1 3 flpscp invscp 1 2 0 magically charged 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 2 4 2 4 1 255 255 2 3 3 5 1 255 255 1 1 1 255 255 255 20 255 255 255 20 2 2 0 gsc wsp 1 0 +Grand Scepter scep gsc mac gsc 0 4 1 0 xxx 8 18 1 10 100 37 60 15 0 0 1109 26635 gsc 9qs 7qs 1hs 1hs 5 club 1 3 flpgsc invgsc 1 3 0 magically charged 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 1 3 1 3 1 255 255 3 5 3 5 1 255 255 255 20 1 2 1 1 20 255 255 2 3 1 2 20 2 2 0 xxx wsp 1 0 +War Scepter scep wsp whm wsp 0 4 1 0 xxx 10 17 1 -10 100 55 70 21 0 0 2323 61783 wsp 9ws 7ws 1hs 1hs 5 club 2 3 flpwsp invwsp 1 5 0 magically charged 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 1 3 1 3 1 255 255 255 20 1 2 1 2 20 255 255 1 2 1 1 20 2 2 0 xxx xxx 1 0 +Spiked Club club spc clb spc 0 3 1 0 xxx 5 8 1 100 36 4 0 0 225 5400 spc 9sp 7sp 1hs 1hs 5 1hsl 1 3 flpspc invspc invspcu invspcu 1 2 0 0 item_staff 12 item_staff 0 0 5 0 0 0 0 7 0 0 1 1 1 1 1 1 1 1 20 255 255 255 255 255 255 255 1 1 1 1 255 255 255 255 255 255 255 2 2 0 mac mst 1 0 +Mace mace mac mac mac 0 4 1 0 xxx 3 10 100 27 60 8 0 0 463 10204 mac 9ma 7ma 1hs 1hs 5 1hsl 1 3 flpmac invmac 1 2 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 1 1 1 1 1 1 1 20 255 1 1 20 255 255 255 255 255 1 2 1 1 1 255 255 255 255 255 255 255 2 2 0 mst mau 1 0 +Morning Star mace mst mac mst 0 4 1 0 xxx 7 16 1 10 100 36 72 13 0 0 844 19972 mst 9mt 7mt 1hs 1hs 5 1hsl 1 3 flpmst invmst invmstu invmstu 1 3 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 1 1 1 1 20 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx fla 1 0 +Flail mace fla fla fla 0 4 1 0 xxx 1 24 2 -10 100 41 35 30 19 0 0 1412 38828 fla 9fl 7fl 1hs 1hs 5 1hsl 2 3 flpfla invfla 1 5 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 1 1 1 1 20 255 255 1 1 1 1 20 255 255 255 255 255 1 1 20 255 255 255 255 2 2 0 xxx gma 1 0 +War Hammer hamm whm whm whm 0 4 1 0 xxx 19 29 20 110 53 55 25 0 0 2081 67025 whm 9wh 7wh 1hs 1hs 5 1hsl 2 3 flpwhm invwhm 1 4 0 0 item_sword 12 item_sword 0 0 5 0 0 0 178 7 0 0 3 255 255 255 255 255 255 1 1 1 20 255 255 255 255 255 1 1 1 1 20 255 255 255 255 2 2 0 mau gma 1 0 +Maul hamm mau mau mau 0 4 1 0 xxx 1 30 43 1 10 110 69 60 21 0 0 1670 48070 mau 9m9 7m7 stf stf 5 2hsl 2 4 flpmau invmau invmauu invmauu 1 6 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 1 1 1 1 20 255 255 255 255 255 1 1 1 1 20 255 255 255 255 2 2 0 xxx mau 1 0 +Great Maul hamm gma mau gma 0 3 1 0 xxx 1 38 58 2 20 110 99 60 32 0 0 3215 121380 gma 9gm 7gm stf stf 5 2hsl 2 3 flpgma invgma invgma invgma 1 6 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 1 1 1 1 20 255 1 1 20 255 255 2 2 0 xxx xxx 1 0 +Short Sword swor ssd ssd ssd 0 3 1 0 xxx 2 7 100 24 1 0 0 72 3072 ssd 9ss 7ss 1hs 1hs 5 1hsl 1 3 flpssd invssd 1 2 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 1 1 1 1 1 1 1 1 20 255 255 255 255 255 255 255 1 1 1 1 255 255 255 255 255 255 255 1 2 0 scm wsd 1 0 +Scimitar swor scm scm scm 0 3 1 0 xxx 2 6 -20 100 21 22 5 0 0 274 6370 scm 9sm 7sm 1hs 1hs 5 1hsl 1 3 flpscm invscm invscmu invscmu 1 2 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 1 1 1 1 1 1 1 1 1 20 255 1 1 20 255 255 255 255 255 1 1 1 1 255 255 255 255 255 255 255 1 2 0 sbr lsd 1 0 +Saber swor sbr scm sbr 0 3 1 0 xxx 3 8 -10 100 25 25 32 8 0 0 466 10228 sbr 9sb 7sb 1hs 1hs 5 1hsl 1 3 flpsbr invsbr inv9sbu inv9sbu 1 2 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 1 1 1 1 1 255 255 1 1 20 255 255 255 255 255 1 1 1 1 1 255 255 255 255 255 255 255 1 2 0 flc bsd 1 0 +Falchion swor flc flc flc 0 4 1 0 xxx 9 17 20 100 33 32 11 0 0 683 15513 flc 9fc 7fc 1hs 1hs 5 1hsl 1 3 flpflc invflc invflcu invflcu 1 2 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 1 1 1 20 255 255 255 255 255 1 1 1 1 255 255 255 255 255 255 255 1 2 0 bsd wsd 1 0 +Crystal Sword swor crs crs crs 0 2 1 0 xxx 5 15 1 100 43 20 11 0 0 2127 31397 crs 9cr 7cr 1hs 1hs 5 1hsl 2 3 flpcrs invcrs invcrsu invcrsu 1 6 0 0 item_sword 12 item_sword 0 0 5 0 5 0 0 7 0 0 1 255 255 255 255 255 1 1 255 255 1 1 255 255 255 255 1 1 20 1 1 20 255 255 1 8 0 xxx xxx 1 0 +Broad Sword swor bsd bsd bsd 0 4 1 0 xxx 7 14 100 48 32 15 0 0 1029 25435 bsd 9bs 7bs 1hs 1hs 5 1hsl 2 3 flpbsd invbsd invbsdu invbsdu 1 4 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 1 1 1 2 20 255 255 1 1 20 255 255 255 1 1 1 1 1 1 1 1 1 1 255 255 255 255 255 1 2 0 lsd wsd 1 0 +Long Sword swor lsd lsd lsd 0 4 1 0 xxx 3 19 1 -10 100 55 39 44 20 0 0 1520 42900 lsd 9ls 7ls 1hs 1hs 5 1hsl 2 3 flplsd invlsd invlsdu invlsdu 1 4 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 1 2 20 255 255 1 1 1 2 20 255 255 255 255 255 1 1 1 2 20 255 255 255 255 1 2 0 wsd wsd 1 0 +War Sword swor wsd flc wsd 0 4 1 0 xxx 8 20 1 100 71 45 44 27 0 0 1997 69919 wsd 9wd 7wd 1hs 1hs 5 1hsl 1 3 flpwsd invwsd 1 3 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 1 1 1 1 20 255 255 255 255 255 1 2 1 3 20 255 1 1 1 3 20 255 1 2 20 1 2 0 xxx xxx 1 0 +Two-Handed Sword swor 2hs clm 2hs 0 4 1 0 xxx 2 9 1 1 8 17 2 100 35 27 44 10 0 0 644 13940 2hs 92h 72h 1hs 2hs 5 2hss 1 4 flp2hs inv2hs inv2hsu inv2hsu 1 3 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 1 1 1 1 1 255 255 255 255 255 255 255 255 1 1 1 1 255 255 255 255 255 255 255 1 2 0 clm gis 1 0 +Claymore swor clm clm clm 0 4 1 0 xxx 5 12 1 1 13 30 2 10 100 47 50 17 0 0 1262 32454 clm 9cm 7cm 1hs 2hs 5 2hss 1 4 flpclm invclm 1 4 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 1 1 1 2 20 255 255 255 255 255 255 1 1 1 1 1 1 1 1 1 1 255 255 255 255 255 1 2 0 gis bsw 1 0 +Giant Sword swor gis gsd gis 0 4 1 0 xxx 3 16 1 1 9 28 2 100 56 34 50 21 0 0 1459 43639 gis 9gs 7gs 1hs 2hs 5 2hss 1 4 flpgis invgis invgisu invgisu 1 4 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 1 1 2 20 255 255 1 1 1 1 20 255 255 255 255 255 255 255 255 255 255 1 2 0 bsw flb 1 0 +Bastard Sword swor bsw clm bsw 0 4 1 0 xxx 7 19 1 1 20 28 1 10 100 62 40 24 0 0 1971 61804 bsw 9b9 7b7 1hs 2hs 5 2hss 1 4 flpbsw invbsw invbswu invbswu 1 4 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 1 1 1 1 20 255 255 255 255 255 1 1 1 20 255 1 1 1 20 255 255 1 2 0 xxx xxx 1 0 +Flamberge swor flb clm flb 0 4 1 0 xxx 9 15 1 1 13 26 2 -10 100 70 49 50 27 0 0 2400 80800 flb 9fb 7fb 1hs 2hs 5 2hss 2 4 flpflb invflb 1 5 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 1 1 1 20 255 255 255 255 255 1 1 1 2 20 255 1 1 2 20 255 255 1 2 0 xxx xxx 1 0 +Great Sword swor gsd gsd gsd 0 4 1 0 xxx 12 20 1 1 25 42 2 10 100 100 60 50 33 0 0 3451 132883 gsd 9gd 7gd 1hs 2hs 5 2hss 2 4 flpgsd invgsd invgsdu invgsdu 1 6 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 1 1 1 3 20 255 1 1 2 20 255 255 1 2 0 xxx xxx 1 0 +Dagger knif dgr dgr dgr 0 2 1 0 xxx 1 4 -20 75 75 16 3 0 0 60 4180 dgr 9dg 7dg 1ht 1ht 5 1ht 1 2 flpdgr invdgr 1 1 0 0 item_smallmetalweapon 12 item_smallmetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 1 1 1 1 20 255 255 1 1 1 1 20 255 255 255 255 255 255 255 255 255 255 255 1 2 0 kri bld 1 0 +Dirk knif dir dir dir 0 2 1 0 xxx 3 9 75 75 25 20 9 0 0 532 11788 dir 9di 7di 1ht 1ht 5 1ht 1 2 flpdir invdir 1 1 0 0 item_smallmetalweapon 12 item_smallmetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 1 1 1 1 20 255 255 255 255 255 1 1 1 1 1 255 255 255 255 255 1 2 0 kri bld 1 0 +Kriss knif kri dir kri 0 2 1 0 xxx 2 11 -20 75 75 45 24 17 0 0 1227 31859 kri 9kr 7kr 1ht 1ht 5 1ht 1 3 flpkrs invkrs invkrsu invkrsu 1 3 0 0 item_smallmetalweapon 12 item_smallmetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 1 1 1 20 255 255 255 255 1 1 20 255 255 1 1 20 1 2 0 xxx xxx 1 0 +Blade knif bld dgr bld 0 3 1 0 xxx 4 15 -10 75 75 35 51 24 23 0 0 1764 54572 bld 9bl 7bl 1ht 1ht 5 1ht 1 3 flpbld invbld 1 3 0 0 item_smallmetalweapon 12 item_smallmetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 1 1 1 1 20 255 255 255 255 1 1 1 1 20 255 255 1 1 1 1 20 1 2 0 xxx xxx 1 0 +Throwing Knife tkni tkf dgr tkf 0 2 1 0 xxx 2 3 4 9 75 75 21 4 2 0 0 6 3512 tkf 9tk 7tk 1ht 1ht 5 1ht 1 2 1 60 240 120 flptkn invtkn 0 primarily thrown 0 item_smallmetalweapon 12 item_smallmetalweapon 0 0 5 0 0 0 36 7 4 0 3 1 2 255 1 2 20 255 255 255 255 20 255 255 2 2 1 255 255 255 255 255 255 1 1 20 1 2 0 bkf bkf 1 0 +Throwing Axe taxe tax hax tax 0 2 1 0 xxx 4 7 8 12 10 75 75 40 6 7 0 0 11 6077 tax 9ta 7ta 1hs 1hs 5 1hsl 1 2 1 24 200 48 flptax invtax 0 primarily thrown 0 item_smallmetalweapon 12 item_smallmetalweapon 0 0 5 0 0 0 35 7 5 0 3 1 1 255 1 2 20 255 1 1 20 255 255 20 255 255 2 2 1 255 255 255 255 255 255 1 1 20 2 2 0 bal bal 1 0 +Balanced Knife tkni bkf dgr bkf 0 2 1 0 xxx 1 8 6 11 -20 75 75 51 8 13 0 0 15 9195 bkf 9bk 7bk 1ht 1ht 5 1ht 1 2 1 45 240 90 flpbkf invbkf 0 primarily thrown 0 item_smallmetalweapon 12 item_smallmetalweapon 0 0 5 0 0 0 36 7 4 0 3 255 255 255 1 1 1 1 20 255 255 20 255 255 255 1 2 1 2 3 1 1 2 1 2 20 255 255 255 1 1 20 1 2 0 xxx xxx 1 0 +Balanced Axe taxe bal hax bal 0 2 1 0 xxx 5 10 12 15 -10 75 75 57 10 16 0 0 35 11060 bal 9b8 7b8 1hs 1hs 5 1hsl 2 3 1 24 200 36 flpbal invbal 0 primarily thrown 0 item_sword 12 item_sword 0 0 5 0 0 0 35 7 5 0 3 255 255 255 1 1 1 1 20 255 255 20 255 255 255 1 2 1 2 3 1 1 2 1 2 20 255 255 255 1 1 1 1 20 2 2 0 xxx xxx 1 0 +Javelin jave jav jav jav 0 4 1 0 xxx 1 5 6 14 2 -10 75 75 2 1 0 0 5 3005 jav 9ja 7ja 1ht 1ht 5 1ht 1 3 1 45 90 90 flpjav invjav 0 primarily thrown 0 item_javelins 12 item_javelins 0 0 5 0 0 0 1 7 2 0 3 2 3 255 1 2 20 255 255 255 255 20 255 255 1 2 1 1 1 255 255 255 1 1 255 255 1 1 20 1 1 1 1 20 5 8 0 glv glv 1 0 +Pilum jave pil pil pil 0 4 1 0 xxx 4 9 7 20 2 75 75 45 3 10 0 0 18 7680 pil 9pi 7pi 1ht 1ht 5 1ht 1 3 1 40 75 75 flppil invpil 0 primarily thrown 0 item_javelins 12 item_javelins 0 0 5 0 0 0 371 7 2 0 3 255 1 1 20 255 1 1 20 255 255 20 255 255 1 2 1 1 1 255 1 1 255 1 1 1 2 20 1 1 255 255 1 1 20 1 1 1 1 20 5 8 0 tsp tsp 1 0 +Short Spear jave ssp jav ssp 0 4 1 0 xxx 2 13 10 22 2 10 75 75 40 40 4 15 0 0 24 10360 ssp 9s9 7s7 1ht 1ht 5 1ht 1 3 1 30 60 60 flpssp invssp 0 primarily thrown 0 item_javelins 12 item_javelins 0 0 5 0 0 0 1 7 2 0 3 255 1 2 30 255 1 1 1 1 20 255 255 20 255 255 255 1 1 255 1 2 255 255 1 1 255 255 1 1 20 1 1 1 1 20 5 8 0 tsp tsp 1 0 +Glaive jave glv glv glv 0 4 1 0 xxx 5 17 16 22 2 20 75 75 52 35 5 23 0 0 36 14828 glv 9gl 7gl 1ht 1ht 5 1ht 1 4 1 24 60 60 flpglv invglv 0 primarily thrown 0 item_javelins 12 item_javelins 0 0 5 0 0 0 37 7 2 0 3 255 255 255 2 2 30 255 255 20 255 255 255 1 1 255 1 2 255 255 1 1 255 255 1 1 20 1 1 1 1 20 1 2 0 xxx xxx 1 0 +Throwing Spear jave tsp pil tsp 0 4 1 0 xxx 5 15 12 30 2 -10 75 75 65 6 29 0 0 48 18392 tsp 9ts 7ts 1ht 1ht 5 1ht 1 4 1 48 120 120 flptsp invtsp 0 primarily thrown 0 item_javelins 12 item_javelins 0 0 5 0 0 0 371 7 2 0 3 255 255 255 255 255 255 20 255 255 255 255 255 1 1 1 2 20 1 1 255 255 1 1 20 1 1 1 1 20 1 2 0 xxx xxx 1 0 +Spear spea spr spr spr 0 4 1 0 xxx 1 3 15 3 -10 100 20 30 5 0 0 300 6500 spr 9sr 7sr 2ht 2ht 5 2ht 2 4 flpspr invspr 1 3 0 2 square reach 0 item_staff 12 item_staff 0 0 5 0 0 0 0 7 0 0 3 1 1 1 1 1 1 1 1 1 20 255 255 255 255 255 255 255 1 1 1 1 255 255 255 255 255 255 255 5 8 0 spt pik 1 0 +Trident spea tri tri tri 0 4 1 0 xxx 1 9 15 3 100 38 24 35 9 0 0 683 13147 tri 9tr 7tr 2ht 2ht 5 2ht 2 4 flptri invtri invtriu invtriu 1 4 0 2 square reach 0 item_staff 12 item_staff 0 0 5 0 0 0 0 7 0 0 3 255 1 1 1 1 20 255 1 1 20 255 255 255 255 255 1 1 1 1 1 255 255 255 255 255 255 255 5 8 0 spt pik 1 0 +Brandistock spea brn brn brn 0 4 1 0 xxx 1 7 17 4 -20 100 40 50 28 16 0 0 1162 29092 brn 9br 7br 2ht 2ht 5 2ht 2 4 flpbrn invbrn 1 5 0 2 square reach 0 item_staff 12 item_staff 0 0 5 0 0 0 0 7 0 0 3 255 255 255 1 1 1 1 20 255 255 255 255 255 255 1 1 1 1 1 1 1 1 255 255 255 255 255 5 8 0 xxx pik 1 0 +Spetum spea spt tri spt 0 4 1 0 xxx 1 15 23 4 100 54 35 28 20 0 0 1672 45940 spt 9st 7st 2ht 2ht 5 2ht 2 4 flpspt invspt 1 6 0 2 square reach 0 item_staff 12 item_staff 0 0 5 0 0 0 0 7 0 0 3 255 255 255 1 1 1 1 20 255 255 255 255 255 255 1 1 1 1 1 1 1 1 1 1 1 1 2 20 255 255 255 255 5 8 0 xxx xxx 1 0 +Pike spea pik pik pik 0 4 1 0 xxx 1 14 63 4 20 100 60 45 25 24 0 0 2023 63052 pik 9p9 7p7 2ht 2ht 5 2ht 2 4 flppik invpik 1 6 0 3 square reach 0 item_staff 12 item_staff 0 0 5 0 0 0 0 7 0 0 3 255 255 255 1 1 30 255 255 255 255 255 255 1 255 1 255 1 1 1 2 20 255 1 1 1 2 20 255 255 5 8 0 xxx xxx 1 0 +Bardiche pole bar hal bar 0 4 1 0 xxx 1 1 27 2 10 100 40 50 5 0 0 302 6510 bar 9b7 7o7 stf stf 5 2hsl 2 4 flpbar invbar 1 3 0 2 square reach 0 item_woodweaponlarge 12 item_woodweaponlarge 0 0 5 0 0 0 0 7 0 0 3 1 1 1 1 1 1 1 1 1 20 255 255 255 255 255 255 255 1 1 1 1 255 255 255 255 255 255 255 2 2 0 hal wsc 1 0 +Voulge pole vou hal vou 0 4 1 0 xxx 1 6 21 2 100 50 50 11 0 0 611 14721 vou 9vo 7vo stf stf 5 2hsl 2 4 flpvou invvou 1 4 0 2 square reach 0 item_woodweaponlarge 12 item_woodweaponlarge 0 0 5 0 0 0 0 7 0 0 3 255 255 255 1 1 20 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 hal wsc 1 0 +Scythe pole scy scy scy 0 4 1 0 xxx 1 8 20 1 -10 100 41 41 65 15 0 0 848 22720 scy 9s8 7s8 stf stf 5 2hsl 2 4 flpscy invscy invscyu invscyu 1 5 0 2 square reach 0 item_woodweaponlarge 12 item_woodweaponlarge 0 0 5 0 0 0 0 7 0 0 3 255 255 255 1 1 20 255 1 255 1 1 20 255 1 1 255 1 1 1 1 1 1 1 1 1 1 255 255 255 255 255 2 2 0 hal wsc 1 0 +Poleaxe pole pax hal pax 0 4 1 0 xxx 1 18 39 3 10 100 62 65 21 0 0 1701 48721 pax 9pa 7pa stf stf 5 2hsl 2 4 flppax invpax 1 5 0 2 square reach 0 item_woodweaponlarge 12 item_woodweaponlarge 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 1 1 1 1 20 255 255 255 255 255 1 1 1 20 255 255 255 255 2 2 0 xxx xxx 1 0 +Halberd pole hal pax hal 0 4 1 0 xxx 1 12 45 4 100 75 47 55 29 0 0 2706 95474 hal 9h9 7h7 stf stf 5 2hsl 2 4 flphal invhal 1 6 0 2 square reach 0 item_woodweaponlarge 12 item_woodweaponlarge 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 1 1 1 1 20 255 255 255 255 255 1 1 1 1 20 255 1 1 1 1 20 255 255 2 2 0 xxx xxx 1 0 +War Scythe pole wsc scy wsc 0 3 1 0 xxx 1 15 36 4 -10 100 80 80 55 34 0 0 3388 134692 wsc 9wc 7wc stf stf 5 2hsl 2 4 flpwsc invwsc 1 6 0 2 square reach 0 item_woodweaponlarge 12 item_woodweaponlarge 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 20 255 255 255 255 255 1 2 20 255 1 1 20 255 255 2 2 0 xxx xxx 1 0 +Short Staff staf sst bst sst 0 2 1 0 xxx 1 1 5 1 -10 100 20 1 0 0 168 3168 1 sst 8ss 6ss stf stf 5 club 1 3 flpsst invsst 1 2 0 magically charged 0 item_staff 12 item_staff 0 0 5 0 0 0 0 7 0 0 5 255 255 5 9 5 9 1 255 255 255 255 255 1 255 255 255 255 255 255 255 255 5 8 0 cst bst 1 0 +Long Staff staf lst sst lst 0 2 1 0 xxx 1 2 8 1 100 30 8 0 0 463 10204 1 lst 8ls 6ls stf stf 5 staf 1 4 flplst invlst 1 3 0 magically charged 0 item_staff 12 item_staff 0 0 5 0 0 0 0 7 0 0 5 255 255 2 3 1 2 1 255 255 1 2 2 1 255 255 1 1 1 1 255 255 255 255 255 255 255 255 5 8 0 cst wst 1 0 +Gnarled Staff staf cst cst cst 0 2 1 0 xxx 1 4 12 1 10 100 35 12 0 0 766 17692 1 cst 8cs 6cs stf stf 5 staf 1 4 flpcst invcst invcstu invcstu 1 4 0 magically charged 0 item_staff 12 item_staff 0 0 5 0 0 0 0 7 0 0 5 255 255 255 255 255 3 5 5 9 1 255 255 2 3 2 5 1 255 255 255 255 255 255 255 255 5 8 0 xxx wst 1 0 +Battle Staff staf bst sst bst 0 2 1 0 xxx 1 6 13 1 100 40 17 0 0 1223 31791 1 bst 8bs 6bs stf stf 5 staf 1 4 flpbst invbst 1 4 0 magically charged 0 item_staff 12 item_staff 0 0 5 0 0 0 0 7 0 0 5 255 255 255 255 255 1 3 1 3 1 255 255 2 3 2 5 1 255 255 255 255 2 3 1 3 20 255 255 2 3 1 4 20 5 8 0 xxx xxx 1 0 +War Staff staf wst lst wst 0 2 1 0 xxx 1 12 28 1 20 100 50 24 0 0 1985 62140 1 wst 8ws 6ws stf stf 5 staf 2 4 flpwst invwst 1 6 0 magically charged 0 item_staff 12 item_staff 0 0 5 0 0 0 0 7 0 0 5 255 255 255 255 255 255 255 255 1 1 1 1 255 255 255 255 1 2 1 2 20 255 255 1 3 1 4 20 5 8 0 xxx xxx 1 0 +Short Bow bow sbw sbw sbw 0 2 1 0 xxx 1 1 4 5 100 15 20 1 1 0 0 100 3100 sbw 8sb 6sb bow bow 6 bow 2 3 flpsbw invsbw 1 3 0 0 item_bow 12 item_bow 0 0 5 1 0 0 0 7 0 0 1 1 1 1 1 1 255 255 255 255 255 255 255 255 1 255 255 255 255 255 255 255 5 8 0 hbw cbw 1 0 +Hunter's Bow bow hbw sbw hbw 0 2 1 0 xxx 1 2 6 -10 100 28 32 1 5 0 0 350 6750 hbw 8hb 6hb bow bow 6 bow 2 3 flphbw invhbw 1 4 0 0 item_bow 12 item_bow 0 0 5 1 0 0 0 7 0 0 1 1 1 1 1 1 1 1 1 20 255 255 255 255 255 255 255 1 1 1 1 255 255 255 255 255 255 255 5 8 0 lbw sbb 1 0 +Long Bow bow lbw lbw lbw 0 2 1 0 xxx 1 3 10 100 22 19 28 1 8 0 0 490 10420 lbw 8lb 6lb bow bow 6 bow 2 4 flplbw invlbw 1 5 0 0 item_bow 12 item_bow 0 0 5 1 0 0 0 7 0 0 1 255 1 1 1 1 20 255 1 1 20 255 255 255 255 255 1 1 1 1 255 255 255 255 255 255 255 5 8 0 cbw lbb 1 0 +Composite Bow bow cbw lbw cbw 0 2 1 0 xxx 1 4 8 -10 100 25 35 36 1 12 0 0 727 17224 cbw 8cb 6cb bow bow 6 bow 2 3 flpcbw invcbw invcbwu invcbwu 1 4 0 0 item_bow 12 item_bow 0 0 5 1 0 0 0 7 0 0 1 255 255 255 1 1 1 2 20 255 255 255 255 255 1 255 1 255 1 255 255 255 255 255 255 5 8 0 sbb swb 1 0 +Short Battle Bow bow sbb sbb sbb 0 2 1 0 xxx 1 5 11 100 30 40 40 1 18 0 0 1045 30310 sbb 8s8 6s7 bow bow 6 bow 2 3 flpsbb invsbb invsbbu invsbbu 1 5 0 0 item_bow 12 item_bow 0 0 5 1 0 0 0 7 0 0 1 255 255 255 1 1 1 2 20 255 255 255 255 255 255 1 1 1 1 1 1 1 1 255 20 255 255 255 5 8 0 lbb lwb 1 0 +Long Battle Bow bow lbb lbb lbb 0 2 1 0 xxx 1 3 18 10 100 40 50 44 1 23 0 0 1545 49535 lbb 8l8 6l7 bow bow 6 bow 2 4 flplbb invlbb 1 6 0 0 item_bow 12 item_bow 0 0 5 1 0 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 1 1 1 1 1 1 1 1 255 20 255 255 255 5 8 0 swb lwb 1 0 +Short War Bow bow swb sbb swb 0 2 1 0 xxx 1 6 14 100 35 55 48 1 27 0 0 2500 83500 swb 8sw 6sw bow bow 6 bow 2 3 flpswb invswb invswbu invswbu 1 5 0 0 item_bow 12 item_bow 0 0 5 1 0 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 1 1 1 1 1 1 255 1 1 1 1 20 1 1 1 2 20 255 255 5 8 0 lwb xxx 1 0 +Long War Bow bow lwb lbb lwb 0 2 1 0 xxx 1 3 23 10 100 50 65 55 1 31 0 0 3575 128825 lwb 8lw 6lw bow bow 6 bow 2 4 flplwb invlwb 1 6 0 0 item_bow 12 item_bow 0 0 5 1 0 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 1 1 1 1 20 1 1 1 2 20 255 255 5 8 0 xxx xxx 1 0 +Light Crossbow xbow lxb lxb lxb 0 2 1 0 xxx 1 6 9 -10 100 21 27 30 1 6 0 0 803 10318 lxb 8lx 6lx xbw xbw 5 xbow 2 3 flplxb invlxb invlxbu invlxbu 1 3 0 reload lag between shots 0 item_crossbow 12 item_crossbow 0 0 5 1 0 0 0 7 0 0 1 1 1 1 255 255 255 255 255 255 255 255 1 1 1 1 255 255 255 255 255 255 255 255 5 8 0 mxb rxb 1 0 +Crossbow xbow mxb lxb mxb 0 2 1 0 xxx 1 9 16 100 40 33 40 1 15 0 0 2345 45175 mxb 8mx 6mx xbw xbw 5 xbow 2 3 flpmxb invmxb invmxbu invmxbu 1 4 0 reload lag between shots 0 item_crossbow 12 item_crossbow 0 0 5 1 0 0 0 7 0 0 1 255 255 255 1 1 1 1 20 255 255 255 255 255 1 1 1 1 1 1 1 1 1 255 255 255 255 255 5 8 0 hxb hxb 1 0 +Heavy Crossbow xbow hxb hxb hxb 0 2 1 0 xxx 1 14 26 10 100 60 40 50 1 24 0 0 4096 112804 hxb 8hx 6hx xbw xbw 5 xbow 2 4 flphxb invhxb invhxbu invhxbu 1 6 0 reload lag between shots 0 item_crossbow 12 item_crossbow 0 0 5 1 0 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 1 1 1 1 1 1 255 1 1 1 1 20 1 1 1 20 255 255 5 8 0 xxx xxx 1 0 +Repeating Crossbow xbow rxb hxb rxb 0 2 1 0 xxx 1 6 12 -40 100 40 50 40 1 33 0 0 2739 109387 rxb 8rx 6rx xbw xbw 5 xbow 2 3 flprxb invrxb invrxbu invrxbu 1 5 0 fires 5 shots before reload 0 item_crossbow 12 item_crossbow 0 0 5 1 0 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 1 1 20 1 1 2 20 255 255 5 8 0 xxx xxx 1 0 +Rancid Gas Potion tpot gps gpl gps 0 1 0 xxx 0 1 2 1 32 0 24 200 0 gps 1ht 1ht 5 hth 1 1 1 3 25 6 flpgpl invgpl 0 0 item_potion 14 item_potion 0 0 5 0 1 0 49 7 3 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0 1 +Oil Potion tpot ops opl ops 0 1 0 xxx 0 1 2 1 28 0 20 150 0 ops 1ht 1ht 5 hth 1 1 1 3 25 6 flpopl invopl 0 0 item_potion 14 item_potion 0 0 5 0 1 0 46 7 3 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0 1 +Choking Gas Potion tpot gpm gps gpm 0 1 0 xxx 0 1 2 1 20 0 16 120 0 gpm 1ht 1ht 5 hth 1 1 1 3 25 6 flpgps invgpm 0 0 item_potion 14 item_potion 0 0 5 0 1 0 48 7 3 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0 1 +Exploding Potion tpot opm opl opm 0 1 0 xxx 0 1 2 1 16 0 12 80 0 opm 1ht 1ht 5 hth 1 1 1 3 25 6 flpops invopm 0 0 item_potion 14 item_potion 0 0 5 0 1 0 45 7 3 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0 1 +Strangling Gas Potion tpot gpl gps gpl 0 1 0 xxx 0 1 2 1 8 0 6 40 0 gpl 1ht 1ht 5 hth 1 1 1 3 25 6 flpgps invgps 0 0 item_potion 14 item_potion 0 0 5 0 1 0 47 7 3 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0 1 +Fulminating Potion tpot opl ops opl 0 1 0 xxx 0 1 2 1 4 0 0 24 0 opl 1ht 1ht 5 hth 1 1 1 3 25 6 flpops invops 0 0 item_potion 14 item_potion 0 0 5 0 1 0 44 7 3 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 0 0 0 xxx xxx 0 1 +Decoy Gidbinn knif d33 dgr d33 0 0 xxx 1 2 -20 100 15 20 10 0 0 0 666 0 d33 1ht 1ht 5 1ht 1 2 flpd33 invd33 0 0 item_smallmetalweapon 12 item_smallmetalweapon 1 0 5 0 0 0 18 1 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 0 0 +The Gidbinn knif g33 dgr g33 0 0 xxx 3 7 -20 100 15 25 30 0 0 0 666 0 g33 1ht 1ht 5 1ht 1 2 flpg33 invg33 0 0 item_smallmetalweapon 12 item_smallmetalweapon 1 0 5 0 0 0 18 1 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 0 0 +Wirt's Leg club leg clb leg 0 0 xxx 2 8 -10 100 66 0 0 0 20 0 leg 1hs 1hs 5 1hsl 1 3 flpleg invleg 1 3 0 0 item_staff 12 item_staff 0 0 5 0 0 0 1 1 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Horadric Malus hamm hdm whm hdm 0 0 xxx 6 15 20 100 15 15 55 0 0 0 600 0 hdm 1hs 1hs 5 1hsl 1 2 flphmr invhmr 0 0 item_sword 12 item_sword 1 0 5 0 0 0 4 1 0 7 0 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 0 0 +Hellforge Hammer hamm hfh whm hfh 0 0 xxx 6 15 100 55 0 0 0 600 0 hfh 1hs 1hs 5 1hsl 2 3 flphmr invhfh 1 5 0 0 item_sword 12 item_sword 1 0 5 0 0 0 25 1 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 1 xxx xxx 0 0 +Horadric Staff staf hst bst hst 0 0 xxx 1 12 20 2 100 30 50 0 0 0 1223 0 hst stf stf 5 staf 1 4 flphst invhst 0 magically charged 0 item_staff 12 item_staff 1 0 5 0 0 0 10 1 0 7 0 0 5 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 1 xxx xxx 0 0 +Staff of Kings staf msf bst msf 0 0 xxx 1 10 15 2 100 25 45 0 0 0 1223 0 msf stf stf 5 staf 1 3 flpmsf invmsf 0 magically charged 0 item_staff 12 item_staff 1 0 5 0 0 0 10 1 0 7 0 0 5 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 1 xxx xxx 0 0 +Hatchet axe 9ha hax 9ha 0 3 1 0 xxx 10 21 100 25 25 28 31 0 19 810 43110 hax 9ha 7ha 1hs 1hs 5 1hsl 1 3 flphax invhax invhaxu invhaxu 1 2 0 0 item_smallmetalweapon 12 item_smallmetalweapon 0 0 5 0 0 0 35 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 2 0 xxx xxx 1 0 +Cleaver axe 9ax axe 9ax 0 4 1 0 xxx 10 33 1 10 100 68 24 34 0 22 1509 70806 axe 9ax 7ax 1hs 1hs 5 1hsl 2 3 flpaxe invaxe invaxeu invaxeu 1 4 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 2 0 xxx xxx 1 0 +Twin Axe axe 92a axe 92a 0 4 1 0 xxx 13 38 1 10 100 85 24 39 0 25 2919 135841 2ax 92a 72a 1hs 1hs 5 1hsl 2 3 flp2ax inv2ax 1 5 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 2 0 xxx xxx 1 0 +Crowbill axe 9mp axe 9mp 0 4 1 0 xxx 14 34 1 -10 100 94 70 26 43 0 25 4563 220209 mpi 9mp 7mp 1hs 1hs 5 1hsl 2 3 flpmpi invmpi invmpiu invmpiu 1 6 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Naga axe 9wa hax 9wa 0 4 1 0 xxx 16 45 2 100 121 26 48 0 25 6669 346612 wax 9wa 7wa 1hs 1hs 5 1hsl 2 3 flpwax invwax 1 6 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Military Axe axe 9la lax 9la 0 4 1 0 xxx 1 14 34 1 -10 100 73 30 34 0 22 1362 65808 lax 9la 7la stf stf 5 2hsl 2 3 flplax invlax 1 4 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Bearded Axe axe 9ba lax 9ba 0 4 1 0 xxx 1 21 49 1 100 92 35 38 0 25 2718 124784 bax 9ba 7ba stf stf 5 2hsl 2 3 flpbrx invbrx 1 5 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Tabar axe 9bt btx 9bt 0 4 1 0 xxx 1 24 77 1 10 100 101 40 42 0 25 4086 195112 btx 9bt 7bt stf stf 5 2hsl 2 3 flpbtx invbtx inv9btu inv9btu 1 5 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 2 0 xxx xxx 1 0 +Gothic Axe axe 9ga btx 9ga 0 4 1 0 xxx 1 18 70 2 -10 100 115 79 50 46 0 25 6048 303708 gax 9ga 7ga stf stf 5 2hsl 2 4 flpgax invgax invgaxu invgaxu 1 6 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Ancient Axe axe 9gi gix 9gi 0 4 1 0 xxx 1 43 85 3 10 100 125 50 51 0 25 7530 412030 gix 9gi 7gi stf stf 5 2hsl 2 3 flpgix invgix inv9giu inv9giu 1 6 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Burnt Wand wand 9wn wnd 9wn 0 1 1 0 xxx 8 18 100 25 15 31 0 19 915 46365 1 wnd 9wn 7wn 1hs 1hs 5 1hss 1 2 flpwnd invwnd 1 1 0 magically charged 0 item_wand 12 item_wand 0 0 5 0 0 0 0 7 0 0 5 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Petrified Wand wand 9yw ywn 9yw 0 1 1 0 xxx 8 24 10 100 25 15 38 0 25 2535 117830 1 ywn 9yw 7yw 1hs 1hs 5 1hss 1 2 flpywn invywn 1 2 0 magically charged 0 item_wand 12 item_wand 0 0 5 0 0 0 0 7 0 0 5 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Tomb Wand wand 9bw bwn 9bw 0 1 1 0 xxx 10 22 -20 100 25 15 43 0 25 4188 204084 1 bwn 9bw 7bw 1hs 1hs 5 1hss 1 2 flpbwn invbwn invbwnu invbwnu 1 2 0 magically charged 0 item_wand 12 item_wand 0 0 5 0 0 0 0 7 0 0 5 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Grave Wand wand 9gw bwn 9gw 0 1 1 0 xxx 13 29 100 25 15 49 0 25 6594 350106 1 gwn 9gw 7gw 1hs 1hs 5 1hss 1 2 flpgwn invgwn inv9gwu inv9gwu 1 2 0 magically charged 0 item_wand 12 item_wand 0 0 5 0 0 0 0 7 0 0 5 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Cudgel club 9cl clb 9cl 0 1 1 0 xxx 6 21 -10 100 25 24 30 0 18 396 29380 clb 9cl 7cl 1hs 1hs 5 club 1 3 flpclb invclb invclbu invclbu 1 2 0 0 item_staff 12 item_staff 0 0 5 0 0 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 2 0 xxx xxx 1 0 +Rune Scepter scep 9sc mac 9sc 0 2 1 0 xxx 13 24 100 58 50 31 0 19 1350 59850 scp 9sc 7sc 1hs 1hs 5 club 1 3 flpscp invscp 1 2 0 magically charged 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Holy Water Sprinkler scep 9qs mac 9qs 0 4 1 0 xxx 14 36 1 10 100 76 60 40 0 25 3627 167580 gsc 9qs 7qs 1hs 1hs 5 club 1 3 flpgsc invgsc 1 3 0 magically charged 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Divine Scepter scep 9ws whm 9ws 0 4 1 0 xxx 16 38 1 -10 100 103 70 45 0 25 7269 352105 wsp 9ws 7ws 1hs 1hs 5 club 2 3 flpwsp invwsp 1 5 0 magically charged 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Barbed Club club 9sp clb 9sp 0 3 1 0 xxx 13 25 1 100 30 36 32 0 20 975 49700 spc 9sp 7sp 1hs 1hs 5 1hsl 1 3 flpspc invspc invspcu invspcu 1 3 0 0 item_staff 12 item_staff 0 0 5 0 0 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Flanged Mace mace 9ma mac 9ma 0 4 1 0 xxx 15 23 100 61 60 35 0 23 1689 79115 mac 9ma 7ma 1hs 1hs 5 1hsl 1 3 flpmac invmac 1 2 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Jagged Star mace 9mt mac 9mt 0 4 1 0 xxx 20 31 1 10 100 74 72 39 0 25 2832 132448 mst 9mt 7mt 1hs 1hs 5 1hsl 1 3 flpmst invmst invmstu invmstu 1 3 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Knout mace 9fl fla 9fl 0 4 1 0 xxx 13 35 2 -10 100 82 73 30 43 0 25 4536 219048 fla 9fl 7fl 1hs 1hs 5 1hsl 2 3 flpfla invfla 1 5 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Battle Hammer hamm 9wh whm 9wh 0 4 1 0 xxx 35 58 20 110 100 55 48 0 25 6543 340564 whm 9wh 7wh 1hs 1hs 5 1hsl 2 3 flpwhm invwhm 1 4 0 0 item_sword 12 item_sword 0 0 5 0 0 0 178 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +War Club hamm 9m9 mau 9m9 0 4 1 0 xxx 1 53 78 1 10 110 124 60 45 0 25 5310 263950 mau 9m9 7m7 stf stf 5 2hsl 2 4 flpmau invmau 1 6 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Martel de Fer hamm 9gm mau 9gm 0 3 1 0 xxx 1 61 99 2 20 110 169 60 53 0 25 9945 556085 gma 9gm 7gm stf stf 5 2hsl 2 3 flpgma invgma inv9gmu inv9gmu 1 6 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Gladius swor 9ss ssd 9ss 0 3 1 0 xxx 8 22 100 25 24 30 0 18 516 32980 ssd 9ss 7ss 1hs 1hs 5 1hsl 1 3 flpssd invssd 1 2 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Cutlass swor 9sm scm 9sm 0 3 1 0 xxx 8 21 -30 100 25 52 22 43 0 25 1122 72246 scm 9sm 7sm 1hs 1hs 5 1hsl 1 3 flpscm invscm invscmu invscmu 1 2 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Shamshir swor 9sb scm 9sb 0 3 1 0 xxx 10 24 -10 100 58 58 32 35 0 23 1698 79430 sbr 9sb 7sb 1hs 1hs 5 1hsl 1 3 flpsbr invsbr invsbru invsbru 1 2 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Tulwar swor 9fc flc 9fc 0 4 1 0 xxx 16 35 20 100 70 42 32 37 0 25 2349 107913 flc 9fc 7fc 1hs 1hs 5 1hsl 1 3 flpflc invflc 1 2 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Dimensional Blade swor 9cr crs 9cr 0 2 1 0 xxx 13 35 1 100 85 60 20 37 0 25 6681 268197 crs 9cr 7cr 1hs 1hs 5 1hsl 2 3 flpcrs invcrs inv9cru inv9cru 1 6 0 0 item_sword 12 item_sword 0 0 5 0 5 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 8 0 xxx xxx 1 0 +Battle Sword swor 9bs bsd 9bs 0 4 1 0 xxx 16 34 100 92 43 32 40 0 25 3387 157980 bsd 9bs 7bs 1hs 1hs 5 1hsl 2 3 flpbsd invbsd 1 4 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Rune Sword swor 9ls lsd 9ls 0 4 1 0 xxx 10 42 1 -10 100 103 79 44 44 0 25 4860 238340 lsd 9ls 7ls 1hs 1hs 5 1hsl 2 3 flplsd invlsd inv9lsu inv9lsu 1 4 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Ancient Sword swor 9wd flc 9wd 0 4 1 0 xxx 18 43 1 100 127 88 44 49 0 25 6291 335259 wsd 9wd 7wd 1hs 1hs 5 1hsl 1 3 flpwsd invwsd 1 3 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Espandon swor 92h clm 92h 0 4 1 0 xxx 8 26 1 1 18 40 2 100 73 61 44 37 0 25 2232 103584 2hs 92h 72h 1hs 2hs 5 2hss 1 4 flp2hs inv2hs inv2hsu inv2hsu 1 3 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Dacian Falx swor 9cm clm 9cm 0 4 1 0 xxx 13 30 1 1 26 61 2 10 100 91 20 50 42 0 25 4086 195112 clm 9cm 7cm 1hs 2hs 5 2hss 1 4 flpclm invclm 1 4 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Tusk Sword swor 9gs gsd 9gs 0 4 1 0 xxx 10 37 1 1 19 58 2 100 104 71 50 45 0 25 4677 235465 gis 9gs 7gs 1hs 2hs 5 2hss 1 4 flpgis invgis invgisu invgisu 1 4 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Gothic Sword swor 9b9 clm 9b9 0 4 1 0 xxx 14 40 1 1 39 60 1 10 100 113 20 40 48 0 25 6213 324724 bsw 9b9 7b7 1hs 2hs 5 2hss 1 4 flpbsw invbsw invbswu invbswu 1 4 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Zweihander swor 9fb clm 9fb 0 4 1 0 xxx 19 35 1 1 29 54 2 -10 100 125 94 50 49 0 25 7500 394500 flb 9fb 7fb 1hs 2hs 5 2hss 2 4 flpflb invflb inv9fbu inv9fbu 1 5 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Executioner Sword swor 9gd gsd 9gd 0 4 1 0 xxx 24 40 1 1 47 80 2 10 100 170 110 50 54 0 25 10653 604762 gsd 9gd 7gd 1hs 2hs 5 2hss 2 4 flpgsd invgsd invgsdu invgsdu 1 6 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Poignard knif 9dg dgr 9dg 0 2 1 0 xxx 6 18 -20 75 75 25 16 31 0 19 480 32880 dgr 9dg 7dg 1ht 1ht 5 1ht 1 2 flpdgr invdgr 1 1 0 0 item_smallmetalweapon 12 item_smallmetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Rondel knif 9di dir 9di 0 2 1 0 xxx 10 26 75 75 25 58 20 36 0 24 1896 88756 dir 9di 7di 1ht 1ht 5 1ht 1 2 flpdir invdir 1 1 0 0 item_smallmetalweapon 12 item_smallmetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Cinquedeas knif 9kr dir 9kr 0 2 1 0 xxx 15 31 -20 75 75 25 88 24 42 0 25 3981 190702 kri 9kr 7kr 1ht 1ht 5 1ht 1 3 flpkrs invkrs invkrsu invkrsu 1 3 0 0 item_smallmetalweapon 12 item_smallmetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Stilleto knif 9bl dgr 9bl 0 3 1 0 xxx 19 36 -10 75 75 47 97 24 46 0 25 5592 282732 bld 9bl 7bl 1ht 1ht 5 1ht 1 3 flpbld invbld inv9blu inv9blu 1 3 0 0 item_smallmetalweapon 12 item_smallmetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Battle Dart tkni 9tk dgr 9tk 0 2 1 0 xxx 8 16 11 24 75 75 25 52 6 31 0 19 80 20480 tkf 9tk 7tk 1ht 1ht 5 1ht 1 2 1 60 240 120 flptkn invtkn 0 primarily thrown 0 item_smallmetalweapon 12 item_smallmetalweapon 0 0 5 0 0 0 36 7 4 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Francisca taxe 9ta hax 9ta 0 2 1 0 xxx 11 22 18 33 10 75 75 25 80 15 34 0 22 90 22560 tax 9ta 7ta 1hs 1hs 5 1hsl 1 2 1 24 200 48 flptax invtax 0 primarily thrown 0 item_smallmetalweapon 12 item_smallmetalweapon 0 0 5 0 0 0 35 7 5 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 2 0 xxx xxx 1 0 +War Dart tkni 9bk dgr 9bk 0 2 1 0 xxx 6 24 14 27 -20 75 75 25 97 20 39 0 25 100 25900 bkf 9bk 7bk 1ht 1ht 5 1ht 1 2 1 45 240 90 flpbkf invbkf 0 primarily thrown 0 item_smallmetalweapon 12 item_smallmetalweapon 0 0 5 0 0 0 36 7 4 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Hurlbat taxe 9b8 hax 9b8 0 2 1 0 xxx 13 27 24 34 -10 75 75 25 106 16 41 0 25 110 27510 bal 9b8 7b8 1hs 1hs 5 1hsl 2 3 1 24 200 36 flpbal invbal 0 primarily thrown 0 item_sword 12 item_sword 0 0 5 0 0 0 35 7 5 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +War Javelin jave 9ja jav 9ja 0 4 1 0 xxx 6 19 14 32 2 -10 75 75 25 25 10 30 0 18 120 21100 jav 9ja 7ja 1ht 1ht 5 1ht 1 3 1 45 90 90 flpjav invjav 0 primarily thrown 0 item_javelins 12 item_javelins 0 0 5 0 0 0 1 7 2 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Great Pilum jave 9pi pil 9pi 0 4 1 0 xxx 11 26 16 42 2 75 75 25 88 12 37 0 25 125 25625 pil 9pi 7pi 1ht 1ht 5 1ht 1 3 1 40 75 75 flppil invpil 0 primarily thrown 0 item_javelins 12 item_javelins 0 0 5 0 0 0 37 7 2 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Simbilan jave 9s9 jav 9s9 0 4 1 0 xxx 8 32 27 50 2 10 75 75 80 80 14 40 0 25 135 27900 ssp 9s9 7s7 1ht 1ht 5 1ht 1 3 1 30 60 60 flpssp invssp 0 primarily thrown 0 item_javelins 12 item_javelins 0 0 5 0 0 0 37 7 2 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Spiculum jave 9gl glv 9gl 0 4 1 0 xxx 13 38 32 60 2 20 75 75 98 73 16 46 0 25 145 32170 glv 9gl 7gl 1ht 1ht 5 1ht 1 4 1 12 30 30 flpglv invglv 0 primarily thrown 0 item_javelins 12 item_javelins 0 0 5 0 0 0 37 7 2 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Harpoon jave 9ts pil 9ts 0 4 1 0 xxx 13 35 18 54 2 -10 75 75 25 118 18 51 0 25 150 35650 tsp 9ts 7ts 1ht 1ht 5 1ht 1 4 1 48 120 120 flptsp invtsp 0 primarily thrown 0 item_javelins 12 item_javelins 0 0 5 0 0 0 37 7 2 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +War Spear spea 9sr spr 9sr 0 4 1 0 xxx 1 10 37 3 -10 100 25 25 30 33 0 21 1200 58600 spr 9sr 7sr 2ht 2ht 5 2ht 2 4 flpspr invspr 1 3 0 2 square reach 0 item_staff 12 item_staff 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Fuscina spea 9tr tri 9tr 0 4 1 0 xxx 1 19 37 3 100 77 25 35 36 0 24 2349 105064 tri 9tr 7tr 2ht 2ht 5 2ht 2 4 flptri invtri invtriu invtriu 1 4 0 2 square reach 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +War Fork spea 9br brn 9br 0 4 1 0 xxx 1 16 40 4 -20 100 80 95 28 41 0 25 3786 178226 brn 9br 7br 2ht 2ht 5 2ht 2 4 flpbrn invbrn inv9bru inv9bru 1 5 0 2 square reach 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Yari spea 9st tri 9st 0 4 1 0 xxx 1 29 59 4 100 101 28 44 0 25 5316 258404 spt 9st 7st 2ht 2ht 5 2ht 2 4 flpspt invspt 1 6 0 2 square reach 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Lance spea 9p9 pik 9p9 0 4 1 0 xxx 1 27 114 4 20 100 110 88 25 47 0 25 6369 325343 pik 9p9 7p7 2ht 2ht 5 2ht 2 4 flppik invpik 1 6 0 3 square reach 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Lochaber Axe pole 9b7 hal 9b7 0 4 1 0 xxx 1 6 58 2 10 100 80 50 33 0 21 1206 58798 bar 9b7 7o7 stf stf 5 2hsl 2 4 flpbar invbar 1 3 0 2 square reach 0 item_woodweaponlarge 12 item_woodweaponlarge 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Bill pole 9vo hal 9vo 0 4 1 0 xxx 1 14 53 2 100 95 50 37 0 25 2133 99921 vou 9vo 7vo stf stf 5 2hsl 2 4 flpvou invvou 1 4 0 2 square reach 0 item_woodweaponlarge 12 item_woodweaponlarge 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Battle Scythe pole 9s8 scy 9s8 0 4 1 0 xxx 1 18 45 1 -10 100 82 82 65 40 0 25 2844 136260 scy 9s8 7s8 stf stf 5 2hsl 2 4 flpscy invscy inv9s8u inv9s8u 1 5 0 2 square reach 0 item_woodweaponlarge 12 item_woodweaponlarge 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Partizan pole 9pa hal 9pa 0 4 1 0 xxx 1 34 75 3 10 100 113 67 65 35 0 23 5403 209105 pax 9pa 7pa stf stf 5 2hsl 2 4 flppax invpax 1 5 0 2 square reach 0 item_woodweaponlarge 12 item_woodweaponlarge 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Bec-de-Corbin pole 9h9 pax 9h9 0 4 1 0 xxx 1 13 85 4 100 133 91 55 51 0 25 8418 457318 hal 9h9 7h7 stf stf 5 2hsl 2 4 flphal invhal 1 6 0 2 square reach 0 item_woodweaponlarge 12 item_woodweaponlarge 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Grim Scythe pole 9wc scy 9wc 0 3 1 0 xxx 1 30 70 4 -10 100 140 140 55 55 0 25 10464 605520 wsc 9wc 7wc stf stf 5 2hsl 2 4 flpwsc invwsc 1 6 0 2 square reach 0 item_woodweaponlarge 12 item_woodweaponlarge 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Jo Staff staf 8ss bst 8ss 0 2 1 0 xxx 1 6 21 1 -10 100 25 20 30 0 18 804 41620 1 sst 8ss 6ss stf stf 5 club 1 3 flpsst invsst 1 2 0 magically charged 0 item_staff 12 item_staff 0 0 5 0 0 0 0 7 0 0 5 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Quarterstaff staf 8ls sst 8ls 0 2 1 0 xxx 1 8 26 1 100 25 30 35 0 23 1689 79115 1 lst 8ls 6ls stf stf 5 staf 1 4 flplst invlst 1 3 0 magically charged 0 item_staff 12 item_staff 0 0 5 0 0 0 0 7 0 0 5 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Cedar Staff staf 8cs cst 8cs 0 2 1 0 xxx 1 11 32 1 10 100 25 35 38 0 25 2598 120224 1 cst 8cs 6cs stf stf 5 staf 1 4 flpcst invcst invcstu invcstu 1 4 0 magically charged 0 item_staff 12 item_staff 0 0 5 0 0 0 0 7 0 0 5 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Gothic Staff staf 8bs sst 8bs 0 2 1 0 xxx 1 14 34 1 100 25 40 42 0 25 3969 190198 1 bst 8bs 6bs stf stf 5 staf 1 4 flpbst invbst 1 4 0 magically charged 0 item_staff 12 item_staff 0 0 5 0 0 0 0 7 0 0 5 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Rune Staff staf 8ws lst 8ws 0 2 1 0 xxx 1 24 58 1 20 100 25 50 47 0 25 6255 319985 1 wst 8ws 6ws stf stf 5 staf 2 4 flpwst invwst inv8wsu inv8wsu 1 6 0 magically charged 0 item_staff 12 item_staff 0 0 5 0 0 0 0 7 0 0 5 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Edge Bow bow 8sb sbw 8sb 0 2 1 0 xxx 1 6 19 5 100 25 43 20 1 30 0 18 600 35500 sbw 8sb 6sb bow bow 6 bow 2 3 flpsbw invsbw 1 3 0 0 item_bow 12 item_bow 0 0 5 1 0 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Razor Bow bow 8hb sbw 8hb 0 2 1 0 xxx 1 8 22 -10 100 25 62 32 1 33 0 21 1350 63550 hbw 8hb 6hb bow bow 6 bow 2 3 flphbw invhbw 1 4 0 0 item_bow 12 item_bow 0 0 5 1 0 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Cedar Bow bow 8lb lbw 8lb 0 2 1 0 xxx 1 10 29 100 53 49 28 1 35 0 23 1770 81950 lbw 8lb 6lb bow bow 6 bow 2 4 flplbw invlbw inv8lbu inv8lbu 1 5 0 0 item_bow 12 item_bow 0 0 5 1 0 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Double Bow bow 8cb lbw 8cb 0 2 1 0 xxx 1 11 26 -10 100 58 73 36 1 39 0 25 2481 118759 cbw 8cb 6cb bow bow 6 bow 2 3 flpcbw invcbw invcbwu invcbwu 1 4 0 0 item_bow 12 item_bow 0 0 5 1 0 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Short Siege Bow bow 8s8 sbb 8s8 0 2 1 0 xxx 1 13 30 100 65 80 40 1 43 0 25 3435 171705 sbb 8s8 6s7 bow bow 6 bow 2 3 flpsbb invsbb inv8s8u inv8s8u 1 5 0 0 item_bow 12 item_bow 0 0 5 1 0 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Long Siege Bow bow 8l8 lbb 8l8 0 2 1 0 xxx 1 10 42 10 100 80 95 44 1 46 0 25 4935 252510 lbb 8l8 6l7 bow bow 6 bow 2 4 flplbb invlbb 1 6 0 0 item_bow 12 item_bow 0 0 5 1 0 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Rune Bow bow 8sw sbb 8sw 0 2 1 0 xxx 1 14 35 100 73 103 48 1 49 0 25 7800 409200 swb 8sw 6sw bow bow 6 bow 2 3 flpswb invswb invswbu invswbu 1 5 0 0 item_bow 12 item_bow 0 0 5 1 0 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Gothic Bow bow 8lw lbb 8lw 0 2 1 0 xxx 1 10 50 10 100 95 118 55 1 52 0 25 11025 601800 lwb 8lw 6lw bow bow 6 bow 2 4 flplwb invlwb 1 6 0 0 item_bow 12 item_bow 0 0 5 1 0 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Arbalest xbow 8lx lxb 8lx 0 2 1 0 xxx 1 14 27 -10 100 52 61 30 1 34 0 22 2709 111606 lxb 8lx 6lx xbw xbw 5 xbow 2 3 flplxb invlxb inv8lxu inv8lxu 1 3 0 reload lag between shots 0 item_crossbow 12 item_crossbow 0 0 5 1 0 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Siege Crossbow xbow 8mx lxb 8mx 0 2 1 0 xxx 1 20 42 100 80 70 40 1 40 0 25 7335 315900 mxb 8mx 6mx xbw xbw 5 xbow 2 3 flpmxb invmxb inv8mxu inv8mxu 1 4 0 reload lag between shots 0 item_crossbow 12 item_crossbow 0 0 5 1 0 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Ballista xbow 8hx hxb 8hx 0 2 1 0 xxx 1 33 55 10 100 110 80 50 1 47 0 25 12588 617636 hxb 8hx 6hx xbw xbw 5 xbow 2 4 flphxb invhxb invhxbu invhxbu 1 6 0 reload lag between shots 0 item_crossbow 12 item_crossbow 0 0 5 1 0 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Chu-Ko-Nu xbow 8rx hxb 8rx 0 2 1 0 xxx 1 14 32 -60 100 80 95 40 1 54 0 25 8517 489418 rxb 8rx 6rx xbw xbw 5 xbow 2 3 flprxb invrxb invrxbu invrxbu 1 5 0 fires 5 shots before reload 0 item_crossbow 12 item_crossbow 0 0 5 1 0 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Khalim's Flail mace qf1 fla qf1 0 0 xxx 1 15 -10 100 41 35 30 0 0 0 1412 0 fla 1hs 1hs 5 1hsl 2 3 flpfla invqf1 1 3 0 0 item_sword 12 item_sword 1 0 5 0 0 0 17 1 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 1 xxx xxx 0 0 +Khalim's Will mace qf2 fla qf2 0 0 xxx 1 15 -10 100 30 0 0 0 1412 0 fla 1hs 1hs 5 1hsl 2 3 flpfla invqf2 1 3 0 0 item_sword 12 item_sword 1 0 5 0 0 0 17 1 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 1 xxx xxx 0 0 +Expansion +Katar h2h ktr ktr ktr 100 2 1 0 xxx 4 7 1 -10 75 75 20 20 48 1 0 0 72 3072 ktr 9ar 7ar ht1 ht1 5 1hsl 1 3 flpktr invktr 1 2 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 1 2 1 1 1 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 wrb btl 1 0 +Wrist Blade h2h wrb ktr wrb 100 2 1 0 xxx 5 9 1 75 75 33 33 52 9 0 0 220 8980 wrb 9wb 7wb ht1 ht1 5 1hsl 1 3 flpktr invktr 1 2 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 1 1 1 1 1 1 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 axf skr 1 0 +Hatchet Hands h2h axf axf axf 100 2 1 0 xxx 2 15 1 10 75 75 37 37 56 12 0 0 466 14092 axf 9xf 7xf ht1 ht1 5 1hsl 1 3 flpaxf invaxf invaxfu invaxfu 1 2 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 1 1 1 1 20 255 255 1 1 1 20 255 255 1 1 255 255 255 255 255 255 255 255 1 2 0 ces clw 1 0 +Cestus h2h ces axf ces 100 2 1 0 xxx 7 15 1 75 75 42 42 72 15 0 0 514 17710 ces 9cs 7cs ht1 ht1 5 1hsl 1 3 flpaxf invaxf invaxfu invaxfu 1 2 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 1 1 1 1 20 255 255 255 255 255 1 1 1 20 255 255 255 255 255 255 255 1 2 0 clw btl 1 0 +Claws h2h clw clw clw 100 2 1 0 xxx 8 15 1 -10 75 75 46 46 64 18 0 0 683 23794 clw 9lw 7lw ht1 ht1 5 1hsl 1 3 flpclw invclw 1 3 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 1 1 1 1 20 255 255 255 1 1 1 20 255 255 255 255 255 255 1 2 0 btl xxx 1 0 +Blade Talons h2h btl clw btl 100 2 1 0 xxx 10 14 1 -20 75 75 50 50 69 21 0 0 847 30787 btl 9tw 7tw ht1 ht1 5 1hsl 1 3 flpclw invclw 1 3 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 1 1 255 255 255 255 1 1 1 20 255 255 1 255 255 1 1 1 1 20 255 1 2 0 xxx xxx 1 0 +Scissors Katar h2h skr skr skr 100 2 1 0 xxx 9 17 1 -10 75 75 55 55 68 24 0 0 1029 39196 skr 9qr 7qr ht1 ht1 5 1hsl 1 3 flpskr invskr invskru invskru 1 3 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 1 1 1 20 1 1 1 1 20 1 1 1 1 20 1 1 20 255 1 2 0 xxx xxx 1 0 +Quhab h2h 9ar ktr 9ar 100 2 1 0 xxx 11 24 1 75 75 57 57 48 28 0 21 2334 81852 ktr 9ar 7ar ht1 ht1 5 1hsl 1 3 flpktr invktr 1 3 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Wrist Spike h2h 9wb ktr 9wb 100 2 1 0 xxx 13 27 1 -10 75 75 66 66 56 32 0 24 4203 152996 wrb 9wb 7wb ht1 ht1 5 1hsl 1 3 flpktr invktr 1 2 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Fascia h2h 9xf axf 9xf 100 2 1 0 xxx 8 37 1 10 75 75 69 69 64 36 0 27 4203 171808 axf 9xf 7xf ht1 ht1 5 1hsl 1 3 flpaxf invaxf invaxfu invaxfu 1 2 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Hand Scythe h2h2 9cs axf 9cs 100 2 1 0 xxx 16 37 1 -10 75 75 73 73 72 41 0 30 2964 144524 ces 9cs 7cs ht1 ht1 5 1hsl 1 3 flpaxf invaxf invaxfu invaxfu 1 2 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Greater Claws h2h2 9lw clw 9lw 100 2 1 0 xxx 18 37 1 -20 75 75 76 76 52 45 0 33 5061 252745 clw 9lw 7lw ht1 ht1 5 1hsl 1 3 flpclw invclw 1 3 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Greater Talons h2h2 9tw clw 9tw 100 2 1 0 xxx 21 35 1 -30 75 75 79 79 69 50 0 37 9291 492050 btl 9tw 7tw ht1 ht1 5 1hsl 1 3 flpclw invclw 1 3 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Scissors Quhab h2h2 9qr skr 9qr 100 2 1 0 xxx 19 40 1 75 75 82 82 68 54 0 40 14223 797542 skr 9qr 7qr ht1 ht1 5 1hsl 1 3 flpskr invskr invskru invskru 1 3 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Suwayyah h2h2 7ar ktr 7ar 100 2 1 0 xxx 39 52 1 75 75 99 99 48 59 0 44 16205 988095 ktr 9ar 7ar ht1 ht1 5 1hsl 1 3 flpktr invktr 1 3 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Wrist Sword h2h2 7wb ktr 7wb 100 2 1 0 xxx 34 45 1 -10 75 75 105 105 56 62 0 46 16996 1087252 wrb 9wb 7wb ht1 ht1 5 1hsl 1 3 flpktr invktr 1 3 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +War Fist h2h2 7xf axf 7xf 100 2 1 0 xxx 44 53 1 10 75 75 108 108 64 68 0 51 15784 1109812 axf 9xf 7xf ht1 ht1 5 1hsl 1 3 flpaxf invaxf invaxfu invaxfu 1 2 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Battle Cestus h2h2 7cs axf 7cs 100 2 1 0 xxx 36 42 1 -10 75 75 110 110 72 73 0 54 15537 1173201 ces 9cs 7cs ht1 ht1 5 1hsl 1 3 flpaxf invaxf invaxfu invaxfu 1 2 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Feral Claws h2h2 7lw clw 7lw 100 2 1 0 xxx 22 53 1 -20 75 75 113 113 52 78 0 58 16035 1292230 clw 9lw 7lw ht1 ht1 5 1hsl 1 3 flpclw invclw 1 3 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Runic Talons h2h2 7tw clw 7tw 100 2 1 0 xxx 24 44 1 -30 75 75 115 115 69 81 0 60 17396 1452076 btl 9tw 7tw ht1 ht1 5 1hsl 1 3 flpclw invclw 1 3 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Scissors Suwayyah h2h2 7qr skr 7qr 100 2 1 0 xxx 40 51 1 75 75 118 118 68 85 0 64 18002 1575170 skr 9qr 7qr ht1 ht1 5 1hsl 1 3 flpskr invskr invskru invskru 1 3 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Tomahawk axe 7ha hax 7ha 100 3 1 0 xxx 33 58 100 125 67 28 54 0 40 14033 787282 hax 9ha 7ha 1hs 1hs 5 1hsl 1 3 flphax invhax invhaxu invhaxu 1 2 0 0 item_smallmetalweapon 12 item_smallmetalweapon 0 0 5 0 0 0 35 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 2 0 xxx xxx 1 0 +Small Crescent axe 7ax axe 7ax 100 4 1 0 xxx 38 60 1 10 100 115 83 24 61 0 45 15781 995641 axe 9ax 7ax 1hs 1hs 5 1hsl 2 3 flpaxe invaxe invaxeu invaxeu 1 4 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 2 0 xxx xxx 1 0 +Ettin Axe axe 72a axe 72a 100 4 1 0 xxx 33 66 1 10 100 145 45 24 70 0 52 13496 982220 2ax 92a 72a 1hs 1hs 5 1hsl 2 3 flp2ax inv2ax 1 5 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 2 0 xxx xxx 1 0 +War Spike axe 7mp axe 7mp 100 4 1 0 xxx 30 48 1 -10 100 133 54 26 79 0 59 16108 1314532 mpi 9mp 7mp 1hs 1hs 5 1hsl 2 3 flpmpi invmpi invmpiu invmpiu 1 6 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Berserker Axe axe 7wa hax 7wa 100 4 1 0 xxx 24 71 2 100 138 59 26 85 0 64 15957 1401345 wax 9wa 7wa 1hs 1hs 5 1hsl 2 3 flpwax invwax 1 6 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Feral Axe axe 7la lax 7la 100 4 1 0 xxx 1 25 123 2 -15 100 196 30 57 0 42 17430 1024510 lax 9la 7la stf stf 5 2hsl 2 3 flplax invlax 1 4 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Silver-edged Axe axe 7ba lax 7ba 100 4 1 0 xxx 1 62 110 2 100 166 65 35 65 0 48 18956 1267140 bax 9ba 7ba stf stf 5 2hsl 2 3 flpbrx invbrx 1 5 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Decapitator axe 7bt btx 7bt 100 4 1 0 xxx 1 49 137 2 10 100 189 33 40 73 0 54 16377 1234521 btx 9bt 7bt stf stf 5 2hsl 2 3 flpbtx invbtx invbtxu invbtxu 1 5 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 2 0 xxx xxx 1 0 +Champion Axe axe 7ga btx 7ga 100 4 1 0 xxx 1 59 94 2 -10 100 167 59 50 82 0 61 19245 1621590 gax 9ga 7ga stf stf 5 2hsl 2 4 flpgax invgax invgaxu invgaxu 1 6 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Glorious Axe axe 7gi gix 7gi 100 4 1 0 xxx 1 60 124 3 10 100 164 55 50 85 0 66 18431 1611635 gix 9gi 7gi stf stf 5 2hsl 2 3 flpgix invgix 1 6 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Polished Wand wand 7wn wnd 7wn 100 1 1 0 xxx 18 33 100 25 22 55 0 41 9412 547660 wnd 9wn 7wn 1hs 1hs 5 1hss 1 2 flpwnd invwnd 1 2 0 magically charged 0 item_wand 12 item_wand 0 0 5 0 0 0 0 7 0 0 5 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Ghost Wand wand 7yw ywn 7yw 100 1 1 0 xxx 20 40 10 100 25 14 65 0 48 8786 606090 ywn 9yw 7yw 1hs 1hs 5 1hss 1 2 flpywn invywn 1 2 0 magically charged 0 item_wand 12 item_wand 0 0 5 0 0 0 0 7 0 0 5 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Lich Wand wand 7bw bwn 7bw 100 1 1 0 xxx 10 31 -20 100 25 17 75 0 56 9208 730600 bwn 9bw 7bw 1hs 1hs 5 1hss 1 2 flpbwn invbwn invbwnu invbwnu 1 2 0 magically charged 0 item_wand 12 item_wand 0 0 5 0 0 0 0 7 0 0 5 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Unearthed Wand wand 7gw bwn 7gw 100 1 1 0 xxx 22 28 100 25 18 86 0 64 7687 706582 gwn 9gw 7gw 1hs 1hs 5 1hss 1 2 flpgwn invgwn 1 2 0 magically charged 0 item_wand 12 item_wand 0 0 5 0 0 0 0 7 0 0 5 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Truncheon club 7cl clb 7cl 100 1 1 0 xxx 35 43 -10 100 88 43 55 52 0 39 1488 105876 clb 9cl 7cl 1hs 1hs 5 club 1 3 flpclb invclb invclbu invclbu 1 2 0 0 item_staff 12 item_staff 0 0 5 0 0 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 2 0 xxx xxx 1 0 +Mighty Scepter scep 7sc mac 7sc 100 2 1 0 xxx 40 52 100 125 65 50 62 0 46 20199 1285838 scp 9sc 7sc 1hs 1hs 5 club 1 3 flpscp invscp 1 2 0 magically charged 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Seraph Rod scep 7qs mac 7qs 100 4 1 0 xxx 45 54 1 10 100 108 69 60 76 0 57 23501 1826576 gsc 9qs 7qs 1hs 1hs 5 club 1 3 flpgsc invgsc 1 3 0 magically charged 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Caduceus scep 7ws whm 7ws 100 4 1 0 xxx 37 43 1 -10 100 97 70 70 85 0 66 22870 1988950 wsp 9ws 7ws 1hs 1hs 5 club 2 3 flpwsp invwsp 1 5 0 magically charged 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Tyrant Club club 7sp clb 7sp 100 3 1 0 xxx 32 58 1 100 133 65 57 0 42 6793 418201 spc 9sp 7sp 1hs 1hs 5 1hsl 1 3 flpspc invspc invspcu invspcu 1 3 0 0 item_staff 12 item_staff 0 0 5 0 0 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Reinforced Mace mace 7ma mac 7ma 100 4 1 0 xxx 41 49 100 145 46 60 63 0 47 14765 964195 mac 9ma 7ma 1hs 1hs 5 1hsl 1 3 flpmac invmac inv7mas 1 2 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Devil Star mace 7mt mac 7mt 100 4 1 0 xxx 43 53 1 10 100 153 44 72 70 0 52 15674 1134680 mst 9mt 7mt 1hs 1hs 5 1hsl 1 3 flpmst invmst invmstu invmstu 1 3 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Scourge mace 7fl fla 7fl 100 4 1 0 xxx 3 80 2 -10 100 125 77 65 76 0 57 19532 1524932 fla 9fl 7fl 1hs 1hs 5 1hsl 2 3 flpfla invfla 1 5 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Legendary Mallet hamm 7wh whm 7wh 100 4 1 0 xxx 50 61 1 20 110 189 65 82 0 61 14388 1223316 whm 9wh 7wh 1hs 1hs 5 1hsl 2 3 flpwhm invwhm 1 4 0 0 item_sword 12 item_sword 0 0 5 0 0 0 178 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Ogre Maul hamm 7m7 mau 7m7 100 4 1 0 xxx 1 77 106 1 10 110 225 60 69 0 51 12156 875764 mau 9m9 7m7 stf stf 5 2hsl 2 4 flpmau invmau 1 6 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Thunder Maul hamm 7gm mau 7gm 100 3 1 0 xxx 1 33 180 2 20 110 253 60 85 0 65 17821 1559785 gma 9gm 7gm stf stf 5 2hsl 2 3 flpgma invgma 1 6 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Falcata swor 7ss ssd 7ss 100 3 1 0 xxx 31 59 100 150 88 24 56 0 42 15680 908580 ssd 9ss 7ss 1hs 1hs 5 1hsl 1 3 flpssd invssd 1 2 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Ataghan swor 7sm scm 7sm 100 3 1 0 xxx 26 46 -20 100 138 95 22 61 0 45 16103 1015283 scm 9sm 7sm 1hs 1hs 5 1hsl 1 3 flpscm invscm invscmu invscmu 1 2 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Elegant Blade swor 7sb scm 7sb 100 3 1 0 xxx 33 45 -10 100 109 122 32 63 0 47 22785 1469455 sbr 9sb 7sb 1hs 1hs 5 1hsl 1 3 flpsbr invsbr invsbru invsbru 1 2 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Hydra Edge swor 7fc flc 7fc 100 4 1 0 xxx 28 68 10 100 142 105 32 69 0 51 18479 1312051 flc 9fc 7fc 1hs 1hs 5 1hsl 1 3 flpflc invflc 1 2 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Phase Blade swor 7cr crs 7cr 100 2 1 0 xxx 31 35 1 -30 100 25 136 0 1 73 0 54 25680 1913640 crs 9cr 7cr 1hs 1hs 5 1hsl 2 3 flpcrs invcrs invcrsu invcrsu 1 6 0 0 item_sword 12 item_sword 0 0 5 0 5 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 8 0 xxx xxx 1 0 +Conquest Sword swor 7bs bsd 7bs 100 4 1 0 xxx 37 53 100 142 112 32 78 0 58 19044 1526932 bsd 9bs 7bs 1hs 1hs 5 1hsl 2 3 flpbsd invbsd 1 4 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Cryptic Sword swor 7ls lsd 7ls 100 4 1 0 xxx 5 77 1 -10 100 99 109 44 82 0 61 14306 1216592 lsd 9ls 7ls 1hs 1hs 5 1hsl 2 3 flplsd invlsd invlsdu invlsdu 1 4 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Mythical Sword swor 7wd flc 7wd 100 4 1 0 xxx 40 50 1 100 147 124 44 85 0 66 20187 1760895 wsd 9wd 7wd 1hs 1hs 5 1hsl 1 3 flpwsd invwsd 1 3 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Legend Sword swor 72h clm 72h 100 4 1 0 xxx 22 56 1 1 50 94 2 -15 100 175 100 44 59 0 44 23789 1435551 2hs 92h 72h 1hs 2hs 5 2hss 1 4 flp2hs inv2hs inv2hsu inv2hsu 1 3 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Highland Blade swor 7cm clm 7cm 100 4 1 0 xxx 22 62 1 1 67 96 2 -5 100 171 104 50 66 0 49 14391 985306 clm 9cm 7cm 1hs 2hs 5 2hss 1 4 flpclm invclm 1 4 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Balrog Blade swor 7gs gsd 7gs 100 4 1 0 xxx 15 75 1 1 55 118 2 100 185 87 50 71 0 53 16331 1197501 gis 9gs 7gs 1hs 2hs 5 2hss 1 4 flpgis invgis invgisu invgisu 1 4 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Champion Sword swor 7b7 clm 7b7 100 4 1 0 xxx 24 54 1 1 71 83 2 -10 100 163 103 40 77 0 57 19939 1576303 bsw 9b9 7b7 1hs 2hs 5 2hss 1 4 flpbsw invbsw invbswu invbswu 1 4 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Colossal Sword swor 7fb clm 7fb 100 4 1 0 xxx 26 70 1 1 61 121 2 10 100 182 95 50 80 0 60 24800 2026500 flb 9fb 7fb 1hs 2hs 5 2hss 2 4 flpflb invflb 1 5 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Colossus Blade swor 7gd gsd 7gd 100 4 1 0 xxx 25 65 1 1 58 115 2 5 100 189 110 50 85 0 63 22259 1937015 gsd 9gd 7gd 1hs 2hs 5 2hss 2 4 flpgsd invgsd invgsdu invgsdu 1 6 0 0 item_largemetalweapon 12 item_largemetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Bone Knife knif 7dg dgr 7dg 100 2 1 0 xxx 23 49 -20 75 75 38 75 26 58 0 43 12429 752382 dgr 9dg 7dg 1ht 1ht 5 1ht 1 2 flpdgr invdgr 1 1 0 0 item_smallmetalweapon 12 item_smallmetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Mithral Point knif 7di dir 7di 100 2 1 0 xxx 37 53 75 75 55 98 55 70 0 52 17988 1296660 dir 9di 7di 1ht 1ht 5 1ht 1 2 flpdir invdir 1 1 0 0 item_smallmetalweapon 12 item_smallmetalweapon 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Fanged Knife knif 7kr dir 7kr 100 2 1 0 xxx 15 57 -20 75 75 42 86 36 83 0 62 13729 1183507 kri 9kr 7kr 1ht 1ht 5 1ht 1 3 flpkrs invkrs invkrsu invkrsu 1 3 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Legend Spike knif 7bl dgr 7bl 100 3 1 0 xxx 31 47 -10 75 75 65 67 47 85 0 66 16076 1411460 bld 9bl 7bl 1ht 1ht 5 1ht 1 3 flpbld invbld 1 3 0 0 item_sword 12 item_sword 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Flying Knife tkni 7tk dgr 7tk 100 2 1 0 xxx 23 54 23 54 75 75 48 141 6 64 0 48 215 48260 tkf 9tk 7tk 1ht 1ht 5 1ht 1 2 1 60 300 120 flptkn invtkn 0 primarily thrown 0 item_smallmetalweapon 12 item_smallmetalweapon 0 0 5 0 0 0 36 7 4 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Flying Axe taxe 7ta hax 7ta 100 2 1 0 xxx 17 65 15 66 10 75 75 88 108 15 56 0 42 230 43380 tax 9ta 7ta 1hs 1hs 5 1hsl 1 2 1 24 270 48 flptax invtax 0 primarily thrown 0 item_smallmetalweapon 12 item_smallmetalweapon 0 0 5 0 0 0 35 7 5 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 2 0 xxx xxx 1 0 +Winged Knife tkni 7bk dgr 7bk 100 2 1 0 xxx 27 35 23 39 -20 75 75 45 142 20 77 0 57 248 60096 bkf 9bk 7bk 1ht 1ht 5 1ht 1 2 1 45 300 90 flpbkf invbkf invtk3 0 primarily thrown 0 item_smallmetalweapon 12 item_smallmetalweapon 0 0 5 0 0 0 36 7 4 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Winged Axe taxe 7b8 hax 7b8 100 2 1 0 xxx 11 56 7 60 -10 75 75 96 122 16 80 0 60 251 62580 bal 9b8 7b8 1hs 1hs 5 1hsl 2 3 1 24 270 36 flpbal invbal 0 primarily thrown 0 item_sword 12 item_sword 0 0 5 0 0 0 35 7 5 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Hyperion Javelin jave 7ja jav 7ja 100 4 1 0 xxx 21 57 28 55 2 -10 75 75 98 123 10 54 0 40 211 40894 jav 9ja 7ja 1ht 1ht 5 1ht 1 3 1 45 150 90 flpjav invjav 0 primarily thrown 0 item_javelins 12 item_javelins 0 0 5 0 0 0 1 7 2 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Stygian Pilum jave 7pi pil 7pi 100 4 1 0 xxx 14 64 21 75 2 75 75 118 112 12 62 0 46 220 47140 pil 9pi 7pi 1ht 1ht 5 1ht 1 3 1 40 140 75 flppil invpil 0 primarily thrown 0 item_javelins 12 item_javelins 0 0 5 0 0 0 37 7 2 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Balrog Spear jave 7s7 jav 7s7 100 4 1 0 xxx 33 63 40 62 2 10 75 75 127 95 14 71 0 53 232 54472 ssp 9s9 7s7 1ht 1ht 5 1ht 1 3 1 30 120 60 flpssp invssp 0 primarily thrown 0 item_javelins 12 item_javelins 0 0 5 0 0 0 37 7 2 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Ghost Glaive jave 7gl glv 7gl 100 4 1 0 xxx 19 60 30 85 2 20 75 75 89 137 16 79 0 59 241 61039 glv 9gl 7gl 1ht 1ht 5 1ht 1 4 1 12 120 30 flpglv invglv 0 primarily thrown 0 item_javelins 12 item_javelins 0 0 5 0 0 0 37 7 2 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Winged Harpoon jave 7ts pil 7ts 100 4 1 0 xxx 27 35 11 77 2 -10 75 75 76 145 18 85 0 65 199 61915 tsp 9ts 7ts 1ht 1ht 5 1ht 1 4 1 48 120 120 flptsp invtsp 0 primarily thrown 0 item_javelins 12 item_javelins 0 0 5 0 0 0 37 7 2 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Hyperion Spear spea 7sr spr 7sr 100 4 1 0 xxx 1 35 119 3 -10 100 155 120 30 58 0 43 15900 953700 spr 9sr 7sr 2ht 2ht 5 2ht 2 4 flpspr invspr 1 3 0 2 square reach 0 item_staff 12 item_staff 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Stygian Pike spea 7tr tri 7tr 100 4 1 0 xxx 1 29 144 3 100 168 97 35 66 0 49 17347 1180402 tri 9tr 7tr 2ht 2ht 5 2ht 2 4 flptri invtri invtriu invtriu 1 4 0 2 square reach 0 item_staff 12 item_staff 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Mancatcher spea 7br brn 7br 100 4 1 0 xxx 1 42 92 4 -20 100 132 134 28 74 0 55 14658 1124192 brn 9br 7br 2ht 2ht 5 2ht 2 4 flpbrn invbrn 1 5 0 2 square reach 0 item_staff 12 item_staff 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Ghost Spear spea 7st tri 7st 100 4 1 0 xxx 1 18 155 4 100 122 163 28 83 0 62 17248 1475584 spt 9st 7st 2ht 2ht 5 2ht 2 4 flpspt invspt 1 6 0 2 square reach 0 item_staff 12 item_staff 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +War Pike spea 7p7 pik 7p7 100 4 1 0 xxx 1 33 178 4 20 100 165 106 25 85 0 66 16070 1410950 pik 9p9 7p7 2ht 2ht 5 2ht 2 4 flppik invpik 1 6 0 3 square reach 0 item_staff 12 item_staff 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Ogre Axe pole 7o7 hal 7o7 100 4 1 0 xxx 1 28 145 2 100 195 75 50 60 0 45 9871 624760 bar 9b7 7o7 stf stf 5 2hsl 2 4 flpbar invbar 1 3 0 2 square reach 0 item_woodweaponlarge 12 item_woodweaponlarge 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Colossus Voulge pole 7vo hal 7vo 100 4 1 0 xxx 1 17 165 2 10 100 210 55 50 64 0 48 12822 855108 vou 9vo 7vo stf stf 5 2hsl 2 4 flpvou invvou 1 4 0 2 square reach 0 item_woodweaponlarge 12 item_woodweaponlarge 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Thresher pole 7s8 scy 7s8 100 4 1 0 xxx 1 12 141 1 -10 100 152 118 65 71 0 53 11086 825106 scy 9s8 7s8 stf stf 5 2hsl 2 4 flpscy invscy invscyu invscyu 1 5 0 2 square reach 0 item_woodweaponlarge 12 item_woodweaponlarge 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Cryptic Axe pole 7pa hal 7pa 100 4 1 0 xxx 1 33 150 3 10 100 165 103 65 79 0 59 16509 1346211 pax 9pa 7pa stf stf 5 2hsl 2 4 flppax invpax 1 5 0 2 square reach 0 item_woodweaponlarge 12 item_woodweaponlarge 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Great Poleaxe pole 7h7 pax 7h7 100 4 1 0 xxx 1 46 127 4 100 179 99 55 84 0 63 21554 1855036 hal 9h9 7h7 stf stf 5 2hsl 2 4 flphal invhal 1 6 0 2 square reach 0 item_woodweaponlarge 12 item_woodweaponlarge 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Giant Thresher pole 7wc scy 7wc 100 3 1 0 xxx 1 40 114 4 -10 100 188 140 55 85 0 66 17692 1548820 wsc 9wc 7wc stf stf 5 2hsl 2 4 flpwsc invwsc 1 6 0 2 square reach 0 item_woodweaponlarge 12 item_woodweaponlarge 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 2 2 0 xxx xxx 1 0 +Walking Stick staf 6ss bst 6ss 100 2 1 0 xxx 1 69 85 1 -10 100 25 20 58 0 43 8154 504432 1 sst 8ss 6ss stf stf 5 club 1 3 flpsst invsst 1 2 0 magically charged 0 item_staff 12 item_staff 0 0 5 0 0 0 0 7 0 0 5 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 20 255 5 8 0 xxx xxx 1 0 +Stalagmite staf 6ls sst 6ls 100 2 1 0 xxx 1 75 107 1 10 100 63 35 30 66 0 49 5367 389722 1 lst 8ls 6ls stf stf 5 staf 1 4 flplst invlst 1 3 0 magically charged 0 item_staff 12 item_staff 0 0 5 0 0 0 0 7 0 0 5 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Elder Staff staf 6cs cst 6cs 100 2 1 0 xxx 1 80 93 1 100 44 37 35 74 0 55 9048 709052 1 cst 8cs 6cs stf stf 5 staf 1 4 flpcst invcst invcstu invcstu 1 4 0 magically charged 0 item_staff 12 item_staff 0 0 5 0 0 0 0 7 0 0 5 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Shillelagh staf 6bs sst 6bs 100 2 1 0 xxx 1 65 108 1 100 52 27 40 83 0 62 7986 706838 1 bst 8bs 6bs stf stf 5 staf 1 4 flpbst invbst 1 4 0 magically charged 0 item_staff 12 item_staff 0 0 5 0 0 0 0 7 0 0 5 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Archon Staff staf 6ws lst 6ws 100 2 1 0 xxx 1 83 99 1 10 100 34 26 85 0 66 10001 895085 1 wst 8ws 6ws stf stf 5 staf 2 4 flpwst invwst 1 6 0 magically charged 0 item_staff 12 item_staff 0 0 5 0 0 0 0 7 0 0 5 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Spider Bow bow 6sb sbw 6sb 100 2 1 0 xxx 1 23 50 5 100 64 143 20 1 55 0 41 21091 1190005 sbw 8sb 6sb bow bow 6 bow 2 3 flpsbw invsbw 1 3 0 0 item_bow 12 item_bow 0 0 5 1 0 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Blade Bow bow 6hb sbw 6hb 100 2 1 0 xxx 1 21 41 -10 100 76 119 32 1 60 0 45 21350 1313500 hbw 8hb 6hb bow bow 6 bow 2 3 flphbw invhbw 1 4 0 0 item_bow 12 item_bow 0 0 5 1 0 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Shadow Bow bow 6lb lbw 6lb 100 2 1 0 xxx 1 15 59 100 52 188 28 1 63 0 47 25610 1647430 lbw 8lb 6lb bow bow 6 bow 2 4 flplbw invlbw 1 5 0 0 item_bow 12 item_bow 0 0 5 1 0 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Great Bow bow 6cb lbw 6cb 100 2 1 0 xxx 1 12 52 -10 100 121 107 36 1 68 0 51 17743 1243024 cbw 8cb 6cb bow bow 6 bow 2 3 flpcbw invcbw invcbwu invcbwu 1 4 0 0 item_bow 12 item_bow 0 0 5 1 0 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Diamond Bow bow 6s7 sbb 6s7 100 2 1 0 xxx 1 33 40 100 89 132 40 1 72 0 54 24605 1810060 sbb 8s8 6s7 bow bow 6 bow 2 3 flpsbb invsbb invsbbu invsbbu 1 5 0 0 item_bow 12 item_bow 0 0 5 1 0 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Crusader Bow bow 6l7 lbb 6l7 100 2 1 0 xxx 1 15 63 10 100 97 121 44 1 77 0 57 18105 1435085 lbb 8l8 6l7 bow bow 6 bow 2 4 flplbb invlbb 1 6 0 0 item_bow 12 item_bow 0 0 5 1 0 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Ward Bow bow 6sw sbb 6sw 100 2 1 0 xxx 1 20 53 100 72 146 48 1 80 0 60 15042 1245860 swb 8sw 6sw bow bow 6 bow 2 3 flpswb invswb invswbu invswbu 1 5 0 0 item_bow 12 item_bow 0 0 5 1 0 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Hydra Bow bow 6lw lbb 6lw 100 2 1 0 xxx 1 10 68 10 100 134 167 55 1 85 0 63 19375 1691875 lwb 8lw 6lw bow bow 6 bow 2 4 flplwb invlwb 1 6 0 0 item_bow 12 item_bow 0 0 5 1 0 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Pellet Bow xbow 6lx lxb 6lx 100 2 1 0 xxx 1 28 73 -10 100 83 155 30 1 57 0 42 19512 1143184 lxb 8lx 6lx xbw xbw 5 xbow 2 3 flplxb invlxb invlxbu invlxbu 1 3 0 reload lag between shots 0 item_crossbow 12 item_crossbow 0 0 5 1 0 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Gorgon Crossbow xbow 6mx lxb 6mx 100 2 1 0 xxx 1 25 87 100 117 105 40 1 67 0 50 22305 1530435 mxb 8mx 6mx xbw xbw 5 xbow 2 3 flpmxb invmxb invmxbu invmxbu 1 4 0 reload lag between shots 0 item_crossbow 12 item_crossbow 0 0 5 1 0 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Colossus Crossbow xbow 6hx hxb 6hx 100 2 1 0 xxx 1 32 91 10 100 163 77 50 1 75 0 56 26065 1994875 hxb 8hx 6hx xbw xbw 5 xbow 2 4 flphxb invhxb invhxbu invhxbu 1 6 0 reload lag between shots 0 item_crossbow 12 item_crossbow 0 0 5 1 0 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Demon Crossbow xbow 6rx hxb 6rx 100 2 1 0 xxx 1 26 40 -60 100 141 98 40 1 84 0 63 25851 2215984 rxb 8rx 6rx xbw xbw 5 xbow 2 3 flprxb invrxb invrxbu invrxbu 1 5 0 fires 5 shots before reload 0 item_crossbow 12 item_crossbow 0 0 5 1 0 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Eagle Orb orb ob1 ob1 ob1 100 2 1 0 xxx 2 5 -10 100 20 1 0 0 168 3168 1 303 ob1 ob6 obb 1hs 1hs 5 1hss 1 2 flpob1 invob1 1 4 0 0 item_orb 12 item_orb 0 0 5 0 1 0 0 7 0 0 5 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 20 255 5 8 0 xxx xxx 1 0 +Sacred Globe orb ob2 ob1 ob2 100 3 1 0 xxx 3 8 -10 100 30 8 0 0 463 10204 1 303 ob2 ob7 obc 1hs 1hs 5 1hss 1 2 flpob1 invob2 1 4 0 0 item_orb 12 item_orb 0 0 5 0 1 0 0 7 0 0 5 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Smoked Sphere orb ob3 ob3 ob3 100 3 1 0 xxx 4 10 100 35 12 0 8 766 17692 1 303 ob3 ob8 obd 1hs 1hs 5 1hss 1 2 flpob3 invob3 1 4 0 0 item_orb 12 item_orb 0 0 5 0 1 0 0 7 0 0 5 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Clasped Orb orb ob4 ob4 ob4 100 4 1 0 xxx 5 12 100 40 17 0 13 1223 31791 1 303 ob4 ob9 obe 1hs 1hs 5 1hss 1 2 flpob4 invob4 1 4 0 0 item_orb 12 item_orb 0 0 5 0 1 0 0 7 0 0 5 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Jared's Stone orb ob5 ob4 ob5 100 5 1 0 xxx 8 18 10 100 50 24 0 18 1985 62140 1 303 ob5 oba obf 1hs 1hs 5 1hss 1 3 flpob5 invob5 1 4 0 0 item_orb 12 item_orb 0 0 5 0 1 0 0 7 0 0 5 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Stag Bow abow am1 am1 am1 100 3 1 0 xxx 1 7 12 100 30 45 48 1 18 0 14 2500 56500 300 am1 am6 amb bow bow 6 bow 2 4 flpam1 invam1 invswbu invswbu 1 5 0 0 item_bow 12 item_bow 0 0 5 1 0 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 20 255 5 8 0 xxx xxx 1 0 +Reflex Bow abow am2 am2 am2 100 3 1 0 xxx 1 9 19 10 100 35 60 55 1 27 0 20 3575 112525 300 am2 am7 amc bow bow 6 bow 2 4 flpam2 invam2 1 5 0 0 item_bow 12 item_bow 0 0 5 1 0 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Maiden Spear aspe am3 am3 am3 100 3 1 0 xxx 1 18 24 4 80 50 54 40 28 18 0 14 1672 41596 302 am3 am8 amd 2ht 2ht 5 2ht 2 4 flpam3 invam3 1 6 0 2 square reach 0 item_staff 12 item_staff 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Maiden Pike aspe am4 pik am4 100 3 1 0 xxx 1 23 55 4 10 80 50 63 52 25 27 0 20 2023 70621 302 am4 am9 ame 2ht 2ht 5 2ht 2 4 flppik invam4 1 6 0 3 square reach 0 item_staff 12 item_staff 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Maiden Javelin ajav am5 pil am5 100 3 1 0 xxx 8 14 6 22 2 -10 80 50 33 47 6 23 0 17 48 15104 302 am5 ama amf 1ht 1ht 5 1ht 1 3 1 48 120 120 flpam5 invam5 0 primarily thrown 0 item_staff 12 item_staff 0 0 5 0 0 0 371 7 2 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Glowing Orb orb ob6 ob1 ob6 100 2 1 0 xxx 8 21 -10 100 20 32 0 24 804 44228 1 303 ob1 ob6 obb 1hs 1hs 5 1hss 1 2 flpob1 invob1 1 4 0 0 item_orb 12 item_orb 0 0 5 0 1 0 0 7 0 0 5 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Crystalline Globe orb ob7 ob1 ob7 100 3 1 0 xxx 10 26 -10 100 30 37 0 27 1689 83493 1 303 ob2 ob7 obc 1hs 1hs 5 1hss 1 2 flpob1 invob2 1 4 0 0 item_orb 12 item_orb 0 0 5 0 1 0 0 7 0 0 5 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Cloudy Sphere orb ob8 ob3 ob8 100 3 1 0 xxx 11 29 100 35 41 0 30 2598 129518 1 303 ob3 ob8 obd 1hs 1hs 5 1hss 1 2 flpob3 invob3 1 4 0 0 item_orb 12 item_orb 0 0 5 0 1 0 0 7 0 0 5 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Sparkling Ball orb ob9 ob4 ob9 100 4 1 0 xxx 13 32 100 40 46 0 34 3969 208074 1 303 ob4 ob9 obe 1hs 1hs 5 1hss 1 2 flpob4 invob4 1 4 0 0 item_orb 12 item_orb 0 0 5 0 1 0 0 7 0 0 5 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Swirling Crystal orb oba ob4 oba 100 5 1 0 xxx 18 42 10 100 50 50 0 37 6255 340250 1 303 ob5 oba obf 1hs 1hs 5 1hss 1 3 flpob5 invob5 1 4 0 0 item_orb 12 item_orb 0 0 5 0 1 0 0 7 0 0 5 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Ashwood Bow abow am6 am1 am6 100 3 1 0 xxx 1 16 29 100 56 77 48 1 39 0 29 7800 326200 300 am1 am6 amb bow bow 6 bow 2 4 flpam1 invam1 invswbu invswbu 1 5 0 0 item_bow 12 item_bow 0 0 5 1 0 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Ceremonial Bow abow am7 am2 am7 100 3 1 0 xxx 1 19 41 10 100 73 110 55 1 47 0 35 11025 544175 300 am2 am7 amc bow bow 6 bow 2 4 flpam2 invam2 1 5 0 0 item_bow 12 item_bow 0 0 5 1 0 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Ceremonial Spear aspe am8 am3 am8 100 3 1 0 xxx 1 34 51 4 80 50 101 80 28 43 0 32 5316 252588 302 am3 am8 amd 2ht 2ht 5 2ht 2 4 flpam3 invam3 1 6 0 2 square reach 0 item_staff 12 item_staff 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Ceremonial Pike aspe am9 pik am9 100 3 1 0 xxx 1 42 101 4 20 80 50 115 98 25 51 0 38 6369 352819 302 am4 am9 ame 2ht 2ht 5 2ht 2 4 flppik invam4 1 6 0 3 square reach 0 item_staff 12 item_staff 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Ceremonial Javelin ajav ama pil ama 100 3 1 0 xxx 18 35 18 54 2 -10 80 50 25 109 6 35 0 26 444 35540 302 am5 ama amf 1ht 1ht 5 1ht 1 3 1 48 120 120 flpam5 invam5 0 primarily thrown 0 item_staff 12 item_staff 0 0 5 0 0 0 371 7 2 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 +Heavenly Stone orb obb ob1 obb 100 2 1 0 xxx 21 46 -10 100 20 59 0 44 21051 1274009 1 303 ob1 ob6 obb 1hs 1hs 5 1hss 1 2 flpob1 invob1 1 4 0 0 item_orb 12 item_orb 0 0 5 0 1 0 0 7 0 0 5 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Eldritch Orb orb obc ob1 obc 100 3 1 0 xxx 18 50 -10 100 30 67 0 50 19367 1333589 1 303 ob2 ob7 obc 1hs 1hs 5 1hss 1 2 flpob1 invob2 1 4 0 0 item_orb 12 item_orb 0 0 5 0 1 0 0 7 0 0 5 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Demon Heart orb obd ob3 obd 100 3 1 0 xxx 23 55 100 35 75 0 56 22094 1697050 1 303 ob3 ob8 obd 1hs 1hs 5 1hss 1 2 flpob3 invob3 1 4 0 0 item_orb 12 item_orb 0 0 5 0 1 0 0 7 0 0 5 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Vortex Orb orb obe ob4 obe 100 4 1 0 xxx 12 66 100 40 84 0 63 25207 2161888 1 303 ob4 ob9 obe 1hs 1hs 5 1hss 1 2 flpob4 invob4 1 4 0 0 item_orb 12 item_orb 0 0 5 0 1 0 0 7 0 0 5 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Dimensional Shard orb obf ob4 obf 100 5 1 0 xxx 30 53 10 100 50 85 0 66 20065 1750525 1 303 ob5 oba obf 1hs 1hs 5 1hss 1 3 flpob5 invob5 1 4 0 0 item_orb 12 item_orb 0 0 5 0 1 0 0 7 0 0 5 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Matriarchal Bow abow amb am1 amb 100 3 1 0 xxx 1 20 47 -10 100 87 187 48 1 53 0 39 23700 1285100 300 am1 am6 amb bow bow 6 bow 2 4 flpam1 invam1 invswbu invswbu 1 5 0 0 item_bow 12 item_bow 0 0 5 1 0 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Grand Matron Bow abow amc am2 amc 100 3 1 0 xxx 1 14 72 10 100 108 152 55 1 78 0 58 33375 2644750 300 am2 am7 amc bow bow 6 bow 2 4 flpam2 invam2 1 5 0 0 item_bow 12 item_bow 0 0 5 1 0 0 0 7 0 0 1 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Matriarchal Spear aspe amd am3 amd 100 3 1 0 xxx 1 65 95 4 80 50 114 142 28 61 0 45 16248 1024128 302 am3 am8 amd 2ht 2ht 5 2ht 2 4 flpam3 invam3 1 6 0 2 square reach 0 item_staff 12 item_staff 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Matriarchal Pike aspe ame pik ame 100 3 1 0 xxx 1 37 153 4 20 80 50 132 149 25 81 0 60 19407 1614967 302 am4 am9 ame 2ht 2ht 5 2ht 2 4 flppik invam4 1 6 0 3 square reach 0 item_staff 12 item_staff 0 0 5 0 0 0 0 7 0 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 5 8 0 xxx xxx 1 0 +Matriarchal Javelin ajav amf pil amf 100 3 1 0 xxx 30 54 35 66 2 -10 80 50 107 151 6 65 0 48 302 54630 302 am5 ama amf 1ht 1ht 5 1ht 1 3 1 48 120 120 flpam5 invam5 0 primarily thrown 0 item_staff 12 item_staff 0 0 5 0 0 0 371 7 2 0 3 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 1 2 0 xxx xxx 1 0 diff --git a/src/D2SSharp/Data/TxtFileExternalData.cs b/src/D2SSharp/Data/TxtFileExternalData.cs index c8f36ee..efb7217 100644 --- a/src/D2SSharp/Data/TxtFileExternalData.cs +++ b/src/D2SSharp/Data/TxtFileExternalData.cs @@ -18,6 +18,7 @@ private static readonly (uint Version, string Prefix, string[] FileNames)[] Embe (96, "_96.", ["armor.txt", "ItemStatCost.txt", "ItemTypes.txt", "misc.txt", "weapons.txt"]), (97, "_97.", ["Armor.txt", "ItemStatCost.txt", "itemtypes.txt", "Misc.txt", "Weapons.txt"]), (99, "_99.", ["armor.txt", "itemstatcost.txt", "itemtypes.txt", "misc.txt", "weapons.txt"]), + (105, "_105.", ["armor.txt", "itemstatcost.txt", "itemtypes.txt", "misc.txt", "weapons.txt"]), ]; /// diff --git a/src/D2SSharp/Enums/CharacterClass.cs b/src/D2SSharp/Enums/CharacterClass.cs index feaf31d..a71155d 100644 --- a/src/D2SSharp/Enums/CharacterClass.cs +++ b/src/D2SSharp/Enums/CharacterClass.cs @@ -11,5 +11,6 @@ public enum CharacterClass : byte Paladin = 3, Barbarian = 4, Druid = 5, - Assassin = 6 + Assassin = 6, + Warlock = 7 } diff --git a/src/D2SSharp/Enums/DemonType.cs b/src/D2SSharp/Enums/DemonType.cs new file mode 100644 index 0000000..bc73ff8 --- /dev/null +++ b/src/D2SSharp/Enums/DemonType.cs @@ -0,0 +1,15 @@ +namespace D2SSharp.Enums; + +/// +/// Demon type for bound demons. +/// Determines how ClassId is interpreted when restoring the demon. +/// +public enum DemonType : ushort +{ + /// Standard monster. ClassId is a direct MonStats.txt row index. + Standard = 1, + + /// Super unique monster. ClassId is a SuperUniques.txt row index; + /// the actual MonStats ID is looked up from the SuperUniques record at runtime. + SuperUnique = 2 +} diff --git a/src/D2SSharp/Enums/GameMode.cs b/src/D2SSharp/Enums/GameMode.cs new file mode 100644 index 0000000..6f919da --- /dev/null +++ b/src/D2SSharp/Enums/GameMode.cs @@ -0,0 +1,12 @@ +namespace D2SSharp.Enums; + +/// +/// Game mode for D2R version 104+ saves. +/// +public enum GameMode : byte +{ + None = 0, + Classic = 1, + Expansion = 2, + ReignOfTheWarlock = 3 +} diff --git a/src/D2SSharp/Enums/ItemFlags.cs b/src/D2SSharp/Enums/ItemFlags.cs index 165c8f5..b2800f2 100644 --- a/src/D2SSharp/Enums/ItemFlags.cs +++ b/src/D2SSharp/Enums/ItemFlags.cs @@ -30,5 +30,8 @@ public enum ItemFlags : uint JustSaved = 0x00800000, Personalized = 0x01000000, LowQuality = 0x02000000, - Runeword = 0x04000000 + Runeword = 0x04000000, + Duplicated = 0x08000000, + Chronicle = 0x10000000, + ChronicleCompact = 0x20000000 } diff --git a/src/D2SSharp/Enums/StashTabType.cs b/src/D2SSharp/Enums/StashTabType.cs new file mode 100644 index 0000000..50a30d2 --- /dev/null +++ b/src/D2SSharp/Enums/StashTabType.cs @@ -0,0 +1,17 @@ +namespace D2SSharp.Enums; + +/// +/// Stash tab type (StashFormat >= 2). +/// Determines what the tab body contains and which game mode can access it. +/// +public enum StashTabType : byte +{ + /// Normal stash tab. Body contains items (JM section). + Normal = 0, + + /// Advanced stash tab with stackable item support. Body contains items (JM section). + AdvancedStash = 1, + + /// Chronicle tab. Body contains a chronicle section (magic 0xC0EAEDC0) tracking found set/unique/runeword items. + Chronicle = 2 +} diff --git a/src/D2SSharp/Enums/StatId.cs b/src/D2SSharp/Enums/StatId.cs index 21b47e5..f026d8c 100644 --- a/src/D2SSharp/Enums/StatId.cs +++ b/src/D2SSharp/Enums/StatId.cs @@ -212,7 +212,7 @@ public enum StatId : uint ItemChargedSkill = 204, Unused205 = 205, Unused206 = 206, - Unused207 = 207, + ItemArmorPercent = 207, Unused208 = 208, Unused209 = 209, Unused210 = 210, @@ -364,6 +364,15 @@ public enum StatId : uint QuestItemDifficulty = 356, PassiveMagicMastery = 357, PassiveMagicPierce = 358, + SkillCooldown = 359, + SkillMissileDamageScale = 360, + SkillPsychicWard = 361, + SkillPsychicWardMax = 362, + SkillChannelingTick = 363, + CustomizationIndex = 364, + ItemMagicDamageMaxPerLevel = 365, + PassiveDamagePierce = 366, + HeraldTier = 367, Terminator = 0x1FF, }; diff --git a/src/D2SSharp/IO/BitReader.cs b/src/D2SSharp/IO/BitReader.cs index 0ea1050..5eb16f0 100644 --- a/src/D2SSharp/IO/BitReader.cs +++ b/src/D2SSharp/IO/BitReader.cs @@ -143,7 +143,7 @@ private ReadOnlySpan ReadBytes(int count) /// /// Reads bytes into the provided span. Must be byte-aligned. /// - public void ReadBytes(Span destination) + public void ReadBytes(scoped Span destination) { ReadBytes(destination.Length).CopyTo(destination); } diff --git a/src/D2SSharp/IO/BitWriter.cs b/src/D2SSharp/IO/BitWriter.cs index 309aa48..9aa9fe3 100644 --- a/src/D2SSharp/IO/BitWriter.cs +++ b/src/D2SSharp/IO/BitWriter.cs @@ -112,7 +112,7 @@ public void WriteUInt64(ulong value) /// /// Writes bytes from a span. Must be byte-aligned. /// - public void WriteBytes(ReadOnlySpan bytes) + public void WriteBytes(scoped ReadOnlySpan bytes) { if ((_bitPosition & 7) != 0) throw new InvalidOperationException("WriteBytes requires byte alignment"); diff --git a/src/D2SSharp/Model/Character.cs b/src/D2SSharp/Model/Character.cs index 20b7f85..bc6e43e 100644 --- a/src/D2SSharp/Model/Character.cs +++ b/src/D2SSharp/Model/Character.cs @@ -4,17 +4,20 @@ namespace D2SSharp.Model; /// -/// Character section (319 bytes, offset 0x10). +/// Character section. v<=103: 319 bytes. v>=104: 387 bytes (no Name, larger PreviewData). /// public partial class Character { - /// Section size in bytes. - public const int Size = 319; + /// Section size in bytes for v<=103. + public const int SizeV103 = 319; + + /// Section size in bytes for v>=104. + public const int SizeV104 = 387; /// Active weapon set (bit 0). public uint WeaponSwitch { get; set; } - /// Character name (max 15 chars + null). + /// Character name (max 15 chars + null). Not serialized in v>=104. public string Name { get; set; } = ""; /// Character save flags. @@ -76,15 +79,24 @@ public partial class Character /// Character preview data, contains UTF8 name. public PreviewData Preview { get; set; } = new(); + /// + /// Gets the character section size for the given save version. + /// + public static int GetSize(uint saveVersion) => saveVersion >= 104 ? SizeV104 : SizeV103; + /// /// Reads character data from a BitReader. /// - public static Character Read(ref BitReader reader) + public static Character Read(ref BitReader reader, uint saveVersion) { var data = new Character(); data.WeaponSwitch = reader.ReadUInt32(); - data.Name = reader.ReadFixedString(16); + + // Name field only present in v<=103 + if (saveVersion < 104) + data.Name = reader.ReadFixedString(16); + data.Flags = (CharacterFlags)reader.ReadUInt32(); data.Class = (CharacterClass)reader.ReadByte(); data.NumStats = reader.ReadByte(); @@ -111,7 +123,7 @@ public static Character Read(ref BitReader reader) data.MapSeed = reader.ReadUInt32(); data.MercData = MercData.Read(ref reader); - data.Preview = PreviewData.Read(ref reader); + data.Preview = PreviewData.Read(ref reader, saveVersion); return data; } @@ -119,10 +131,14 @@ public static Character Read(ref BitReader reader) /// /// Writes character data to a BitWriter. /// - public void Write(ref BitWriter writer) + public void Write(ref BitWriter writer, uint saveVersion) { writer.WriteUInt32(WeaponSwitch); - writer.WriteFixedString(Name, 16); + + // Name field only present in v<=103 + if (saveVersion < 104) + writer.WriteFixedString(Name, 16); + writer.WriteUInt32((uint)Flags); writer.WriteByte((byte)Class); writer.WriteByte(NumStats); @@ -148,6 +164,6 @@ public void Write(ref BitWriter writer) writer.WriteUInt32(MapSeed); MercData.Write(ref writer); - Preview.Write(ref writer); + Preview.Write(ref writer, saveVersion); } } diff --git a/src/D2SSharp/Model/CharacterIdentity.cs b/src/D2SSharp/Model/CharacterIdentity.cs new file mode 100644 index 0000000..ee4e5ae --- /dev/null +++ b/src/D2SSharp/Model/CharacterIdentity.cs @@ -0,0 +1,10 @@ +namespace D2SSharp.Model; + +/// +/// Identifies a game account and character pair. +/// Stored as two little-endian uint32 values on wire. +/// Note: the field order (which uint32 is account vs character) may be swapped. +/// +/// 32-bit game account ID. +/// 32-bit character ID. +public readonly record struct CharacterIdentity(uint GameAccountId, uint CharacterId); diff --git a/src/D2SSharp/Model/ChronicleSection.cs b/src/D2SSharp/Model/ChronicleSection.cs new file mode 100644 index 0000000..281c596 --- /dev/null +++ b/src/D2SSharp/Model/ChronicleSection.cs @@ -0,0 +1,128 @@ +using D2SSharp.IO; + +namespace D2SSharp.Model; + +/// +/// Chronicle section found in chronicle stash tabs (StashTabType.Chronicle). +/// Tracks which set, unique, and runeword items have been found. +/// +public partial class ChronicleSection +{ + /// Section magic: 0xC0EAEDC0 + public const uint Magic = 0xC0EAEDC0; + + /// Chronicle format version (expected 1). + public ushort Version { get; set; } = 1; + + /// Set item chronicle entries. + public List SetEntries { get; set; } = []; + + /// Unique item chronicle entries. + public List UniqueEntries { get; set; } = []; + + /// Runeword chronicle entries. + public List RunewordEntries { get; set; } = []; + + /// Reserved bytes after the counts (8 bytes, typically zero). + public byte[] Reserved { get; set; } = new byte[8]; + + /// + /// Trailing data after the chronicle entries. + /// The game writer includes 64 bytes of stale buffer data due to a size + /// calculation bug (add ax, 40h at 0x140311e98). The reader ignores these + /// bytes, but we preserve them for byte-exact round-trip. + /// + public byte[] TrailingData { get; set; } = []; + + /// + /// Reads a chronicle section from the tab body. + /// + /// The bit reader positioned at the start of the tab body (after 64-byte header). + /// Total body size in bytes (tab Size - 64). + public static ChronicleSection Read(ref BitReader reader, int bodySize) + { + int bodyStart = reader.BytePosition; + var section = new ChronicleSection(); + + uint magic = reader.ReadUInt32(); + if (magic != Magic) + throw new InvalidDataException($"Invalid chronicle magic: 0x{magic:X8}, expected 0x{Magic:X8}"); + + section.Version = reader.ReadUInt16(); + ushort setCount = reader.ReadUInt16(); + ushort uniqueCount = reader.ReadUInt16(); + ushort runewordCount = reader.ReadUInt16(); + reader.ReadBytes(section.Reserved); + + // Read entries (10 bytes each: uint32 ID + uint16 Source + uint32 Timestamp) + // All fields are byte-aligned, so we use regular reads. + for (int i = 0; i < setCount; i++) + section.SetEntries.Add(ReadEntry(ref reader)); + + for (int i = 0; i < uniqueCount; i++) + section.UniqueEntries.Add(ReadEntry(ref reader)); + + for (int i = 0; i < runewordCount; i++) + section.RunewordEntries.Add(ReadEntry(ref reader)); + + // Capture trailing data (stale buffer bytes included by the writer's size bug) + int consumed = reader.BytePosition - bodyStart; + int trailing = bodySize - consumed; + if (trailing > 0) + { + section.TrailingData = new byte[trailing]; + reader.ReadBytes(section.TrailingData); + } + + return section; + } + + /// + /// Writes a chronicle section to the tab body. + /// + public void Write(ref BitWriter writer) + { + writer.WriteUInt32(Magic); + writer.WriteUInt16(Version); + writer.WriteUInt16((ushort)SetEntries.Count); + writer.WriteUInt16((ushort)UniqueEntries.Count); + writer.WriteUInt16((ushort)RunewordEntries.Count); + writer.WriteBytes(Reserved); + + foreach (var entry in SetEntries) + WriteEntry(ref writer, entry); + + foreach (var entry in UniqueEntries) + WriteEntry(ref writer, entry); + + foreach (var entry in RunewordEntries) + WriteEntry(ref writer, entry); + + // Write trailing data for round-trip fidelity + if (TrailingData.Length > 0) + writer.WriteBytes(TrailingData); + } + + private static ChronicleEntry ReadEntry(ref BitReader reader) + { + uint itemId = reader.ReadUInt32(); + ushort source = reader.ReadUInt16(); + uint timestamp = reader.ReadUInt32(); + return new ChronicleEntry(itemId, source, timestamp); + } + + private static void WriteEntry(ref BitWriter writer, ChronicleEntry entry) + { + writer.WriteUInt32(entry.ItemId); + writer.WriteUInt16(entry.Source); + writer.WriteUInt32(entry.Timestamp); + } +} + +/// +/// A single chronicle entry tracking a found item. +/// +/// items.txt row index for set/unique items; runeword string index for runewords. +/// Source identifier. Non-zero for set/unique items, 0 for runewords. +/// When the chronicle entry was created. +public readonly record struct ChronicleEntry(uint ItemId, ushort Source, uint Timestamp); diff --git a/src/D2SSharp/Model/CorpseSection.cs b/src/D2SSharp/Model/CorpseSection.cs index 34a3cb1..7c16bc1 100644 --- a/src/D2SSharp/Model/CorpseSection.cs +++ b/src/D2SSharp/Model/CorpseSection.cs @@ -17,7 +17,7 @@ public partial class CorpseSection : List /// /// The bit reader. /// External game data. - /// Save file version (determines format: >96 uses D2R format). + /// Save file version (determines format: >96 uses D2R format). public static CorpseSection Read(ref BitReader reader, IExternalData externalData, uint saveVersion) { var section = new CorpseSection(); @@ -42,7 +42,7 @@ public static CorpseSection Read(ref BitReader reader, IExternalData externalDat /// /// The bit writer. /// External game data. - /// Save file version (determines format: >96 uses D2R format). + /// Save file version (determines format: >96 uses D2R format). public void Write(ref BitWriter writer, IExternalData externalData, uint saveVersion) { // Write magic "JM" @@ -79,7 +79,7 @@ public partial class Corpse /// /// The bit reader. /// External game data. - /// Save file version (determines format: >96 uses D2R format). + /// Save file version (determines format: >96 uses D2R format). public static Corpse Read(ref BitReader reader, IExternalData externalData, uint saveVersion) { var corpse = new Corpse @@ -98,7 +98,7 @@ public static Corpse Read(ref BitReader reader, IExternalData externalData, uint /// /// The bit writer. /// External game data. - /// Save file version (determines format: >96 uses D2R format). + /// Save file version (determines format: >96 uses D2R format). public void Write(ref BitWriter writer, IExternalData externalData, uint saveVersion) { writer.WriteUInt32(Unknown); diff --git a/src/D2SSharp/Model/D2Save.cs b/src/D2SSharp/Model/D2Save.cs index da379c3..53e8a87 100644 --- a/src/D2SSharp/Model/D2Save.cs +++ b/src/D2SSharp/Model/D2Save.cs @@ -24,7 +24,7 @@ public partial class D2Save /// File checksum (updated on write). public uint Checksum { get; set; } - /// Character section (319 bytes). + /// Character section. public Character Character { get; set; } = new(); /// Quest data section (298 bytes). @@ -54,6 +54,9 @@ public partial class D2Save /// Iron golem section (expansion only). public IronGolemSection? IronGolem { get; set; } + /// Demon section (v>=103, optional). + public DemonSection? Demon { get; set; } + /// /// Trailing data after all known sections (mod-specific extensions). /// Preserved during round-trip for compatibility with modded saves. @@ -87,8 +90,8 @@ public static D2Save Read(ReadOnlySpan data, IExternalData externalData) save.FileSize = reader.ReadUInt32(); save.Checksum = reader.ReadUInt32(); - // Read fixed sections - save.Character = Character.Read(ref reader); + // Read fixed sections (pass version for format selection) + save.Character = Character.Read(ref reader, save.Version); save.Quests = QuestSection.Read(ref reader); save.Waypoints = WaypointSection.Read(ref reader); save.PlayerIntro = PlayerIntroSection.Read(ref reader); @@ -97,6 +100,7 @@ public static D2Save Read(ReadOnlySpan data, IExternalData externalData) save.Stats = PlayerStats.Read(ref reader, externalData, save.Version); save.Skills = SkillsSection.Read(ref reader, save.Character.Class, save.Character.NumSkills); save.Items = ItemsSection.Read(ref reader, externalData, save.Version); + save.Corpses = CorpseSection.Read(ref reader, externalData, save.Version); // Expansion-only sections @@ -104,6 +108,10 @@ public static D2Save Read(ReadOnlySpan data, IExternalData externalData) { save.MercItems = MercItemsSection.Read(ref reader, externalData, save.Character.MercData.HasMerc, save.Version); save.IronGolem = IronGolemSection.Read(ref reader, externalData, save.Version); + + // Try to read demon section (v>=103, optional) + if (save.Character.Preview.GameMode == GameMode.ReignOfTheWarlock) + save.Demon = DemonSection.TryRead(ref reader, externalData, save.Version); } // Capture any remaining bytes (mod-specific trailing data) @@ -150,8 +158,8 @@ public int Write(Span buffer, IExternalData externalData, uint? targetVers writer.WriteUInt32(0); // FileSize placeholder writer.WriteUInt32(0); // Checksum placeholder - // Write fixed sections - Character.Write(ref writer); + // Write fixed sections (pass version for format selection) + Character.Write(ref writer, Version); Quests.Write(ref writer); Waypoints.Write(ref writer); PlayerIntro.Write(ref writer); @@ -167,6 +175,10 @@ public int Write(Span buffer, IExternalData externalData, uint? targetVers { (MercItems ?? new MercItemsSection()).Write(ref writer, externalData, Character.MercData.HasMerc, Version); (IronGolem ?? new IronGolemSection()).Write(ref writer, externalData, Version); + + // Write demon section if present + if (Character.Preview.GameMode == GameMode.ReignOfTheWarlock) + Demon?.Write(ref writer, externalData, Version); } // Write trailing data (mod-specific extensions) @@ -193,8 +205,9 @@ public int Write(Span buffer, IExternalData externalData, uint? targetVers /// Estimated buffer size in bytes. public int EstimateSize() { - // Base: file header (16) + character (319) + quest (298) + waypoint (80) + intro (52) = 765 bytes - int size = 765; + // Base: file header (16) + character (version-dependent) + quest (298) + waypoint (80) + intro (52) + int charSize = Character.GetSize(Version); + int size = 16 + charSize + 298 + 80 + 52; // Stats: ~33 bytes typical (16 stats * ~15 bits average + header) size += 50; @@ -225,6 +238,17 @@ public int EstimateSize() { size += CountItemsRecursive([IronGolem.GolemItem]) * 200; } + + // Demon section + if (Character.Preview.GameMode == GameMode.ReignOfTheWarlock && Demon != null) + { + size += 6; // header + if (Demon.DemonData != null) + { + // 92-byte struct + estimated stat blob + size += 92 + 4 + Demon.DemonData.Stats.Count * 8; + } + } } // Trailing data (mod-specific extensions) @@ -261,18 +285,28 @@ public static bool VerifyChecksum(ReadOnlySpan data) /// /// Prepares the save data for writing to a specific version format. - /// Handles conversion between 1.14 (version 96) and D2R (version 97+) formats. + /// Handles conversion between 1.14 (version 96) and D2R (version 97+) formats, + /// and between v<=103 and v>=104 header formats. /// private void PrepareForVersion(uint sourceVersion, uint targetVersion) { bool sourceIsD2R = sourceVersion > 96; bool targetIsD2R = targetVersion > 96; - // Only convert if source and target formats differ + // Handle 1.14 <-> D2R conversion if (!sourceIsD2R && targetIsD2R) Convert114ToD2R(); else if (sourceIsD2R && !targetIsD2R) ConvertD2RTo114(); + + // Handle v<=103 <-> v>=104 header format conversion + bool sourceIsNewHeader = sourceVersion >= 104; + bool targetIsNewHeader = targetVersion >= 104; + + if (!sourceIsNewHeader && targetIsNewHeader) + Convert103To104(); + else if (sourceIsNewHeader && !targetIsNewHeader) + Convert104To103(); } /// @@ -334,6 +368,51 @@ private void ConvertD2RTo114() // BodyLocation: keep as-is (1.14 handles None fine) } + /// + /// Converts from old header format (v<=103) to new header format (v>=104). + /// + private void Convert103To104() + { + // Name: Character.Name -> PreviewData.Name (if not already done by Convert114ToD2R) + if (!string.IsNullOrEmpty(Character.Name)) + { + Character.Preview.Name = Character.Name; + Character.Name = ""; + } + + // GuildEmblemColor: keep low byte (uint -> byte) + Character.Preview.GuildEmblemColor = Character.Preview.GuildEmblemColor & 0xFF; + + // GameMode: derive from CharacterFlags + Character.Preview.GameMode = Character.Flags.HasFlag(CharacterFlags.Expansion) ? GameMode.Expansion : GameMode.Classic; + + // SaveTimes/Experiences: slots 0-1 already populated, 2-5 remain zero (default) + } + + /// + /// Converts from new header format (v>=104) to old header format (v<=103). + /// + private void Convert104To103() + { + // Name: PreviewData.Name -> Character.Name (truncate to 15 chars) + if (string.IsNullOrEmpty(Character.Name) && !string.IsNullOrEmpty(Character.Preview.Name)) + { + Character.Name = Character.Preview.Name.Length > 15 + ? Character.Preview.Name[..15] + : Character.Preview.Name; + } + + // GuildEmblemColor: byte -> uint (zero-extend, already correct) + + // SaveTimes/Experiences: only [0] and [1] are used in old format + // Zero out slots 2-5 + for (int i = 2; i < 6; i++) + { + Character.Preview.SaveTimes[i] = 0; + Character.Preview.Experiences[i] = 0; + } + } + /// /// Creates a PreviewItem from an equipped item. /// diff --git a/src/D2SSharp/Model/D2SaveOverlay.cs b/src/D2SSharp/Model/D2SaveOverlay.cs index 562bf8f..2479c63 100644 --- a/src/D2SSharp/Model/D2SaveOverlay.cs +++ b/src/D2SSharp/Model/D2SaveOverlay.cs @@ -97,24 +97,24 @@ public unsafe struct PreviewDataLayout [FieldOffset(40)] public PreviewItemLayout RightHand; [FieldOffset(52)] public PreviewItemLayout Torso; [FieldOffset(64)] public PreviewItemLayout Head; - [FieldOffset(76)] private fixed byte _name[64]; - [FieldOffset(140)] public uint Unk1; + [FieldOffset(76)] private fixed byte _name[60]; + [FieldOffset(136)] public ulong Unk1; /// Internal name field access for D2SaveLayout.Name property. internal string Name { get { - ReadOnlySpan span = MemoryMarshal.CreateReadOnlySpan(ref _name[0], 64); + ReadOnlySpan span = MemoryMarshal.CreateReadOnlySpan(ref _name[0], 60); int nullIndex = span.IndexOf((byte)0); - if (nullIndex < 0) nullIndex = 64; + if (nullIndex < 0) nullIndex = 60; return Encoding.UTF8.GetString(span[..nullIndex]); } set { - Span span = MemoryMarshal.CreateSpan(ref _name[0], 64); + Span span = MemoryMarshal.CreateSpan(ref _name[0], 60); span.Clear(); - Encoding.UTF8.GetBytes(value.AsSpan()[..Math.Min(value.Length, 63)], span); + Encoding.UTF8.GetBytes(value.AsSpan()[..Math.Min(value.Length, 59)], span); } } } @@ -230,6 +230,122 @@ public bool IsLadder } } +/// +/// Preview data layout for v>=104 saves (228 bytes within Character section). +/// v104+ expands to 6 save times, 6 experiences, GameMode byte, and 96-byte name. +/// +[StructLayout(LayoutKind.Explicit, Size = Size)] +public unsafe struct PreviewDataLayoutV104 +{ + private const int Size = 228; + + [FieldOffset(0x00)] private fixed ulong _saveTimes[6]; + [FieldOffset(0x30)] private fixed uint _experiences[6]; + [FieldOffset(0x48)] public byte GuildEmblemColor; + [FieldOffset(0x49)] public GameMode GameMode; + [FieldOffset(0x4A)] public ushort PreviewPadding; + [FieldOffset(0x4C)] public PreviewItemLayout LeftHand; + [FieldOffset(0x58)] public PreviewItemLayout RightHand; + [FieldOffset(0x64)] public PreviewItemLayout Torso; + [FieldOffset(0x70)] public PreviewItemLayout Head; + [FieldOffset(0x7C)] private fixed byte _name[96]; + [FieldOffset(0xDC)] public ulong Unk1; + + /// Save timestamps (6 slots, Windows FILETIME). + public Span SaveTimes => MemoryMarshal.CreateSpan(ref _saveTimes[0], 6); + + /// Experience values (6 slots). + public Span Experiences => MemoryMarshal.CreateSpan(ref _experiences[0], 6); + + /// Character name (UTF-8, max 96 bytes). + internal string Name + { + get + { + ReadOnlySpan span = MemoryMarshal.CreateReadOnlySpan(ref _name[0], 96); + int nullIndex = span.IndexOf((byte)0); + if (nullIndex < 0) nullIndex = 96; + return Encoding.UTF8.GetString(span[..nullIndex]); + } + set + { + Span span = MemoryMarshal.CreateSpan(ref _name[0], 96); + span.Clear(); + Encoding.UTF8.GetBytes(value.AsSpan()[..Math.Min(value.Length, 95)], span); + } + } + +} + +/// +/// Character section layout for v>=104 saves (387 bytes at offset 0x10). +/// v104+ removes the 16-byte Name field and uses PreviewDataLayoutV104 (228 bytes). +/// +[StructLayout(LayoutKind.Explicit, Size = Size)] +public unsafe struct CharacterLayoutV104 +{ + private const int Size = 387; + internal const int FileOffset = 0x10; + + [FieldOffset(0x00)] public uint WeaponSwitch; + [FieldOffset(0x04)] public CharacterFlags Flags; + [FieldOffset(0x08)] public CharacterClass Class; + [FieldOffset(0x09)] public byte NumStats; + [FieldOffset(0x0A)] public byte NumSkills; + [FieldOffset(0x0B)] public byte Level; + [FieldOffset(0x0C)] public uint CreateTime; + [FieldOffset(0x10)] public uint LastSaveTime; + [FieldOffset(0x14)] public uint PlayTime; + [FieldOffset(0x18)] private fixed byte _skillHotkeys[64]; + [FieldOffset(0x58)] public SkillLayout LeftSkill; + [FieldOffset(0x5C)] public SkillLayout RightSkill; + [FieldOffset(0x60)] public SkillLayout SwitchLeftSkill; + [FieldOffset(0x64)] public SkillLayout SwitchRightSkill; + [FieldOffset(0x68)] private fixed byte _appearanceGraphics[16]; + [FieldOffset(0x78)] private fixed byte _appearanceTints[16]; + [FieldOffset(0x88)] private fixed byte _townDifficulty[3]; + [FieldOffset(0x8B)] public uint MapSeed; + [FieldOffset(0x8F)] public MercDataLayout MercData; + [FieldOffset(0x9F)] public PreviewDataLayoutV104 Preview; + + /// Skill hotkeys (16 slots). + public Span SkillHotkeys => MemoryMarshal.CreateSpan(ref Unsafe.As(ref _skillHotkeys[0]), 16); + + /// Appearance graphics (16 bytes). + public Span AppearanceGraphics => MemoryMarshal.CreateSpan(ref _appearanceGraphics[0], 16); + + /// Appearance tints/colors (16 bytes). + public Span AppearanceTints => MemoryMarshal.CreateSpan(ref _appearanceTints[0], 16); + + /// Current town per difficulty (Normal, NM, Hell). + public Span TownDifficulty => MemoryMarshal.CreateSpan(ref _townDifficulty[0], 3); + + // Convenience flag accessors + public bool IsHardcore + { + readonly get => (Flags & CharacterFlags.Hardcore) != 0; + set => Flags = value ? Flags | CharacterFlags.Hardcore : Flags & ~CharacterFlags.Hardcore; + } + + public bool IsDead + { + readonly get => (Flags & CharacterFlags.Dead) != 0; + set => Flags = value ? Flags | CharacterFlags.Dead : Flags & ~CharacterFlags.Dead; + } + + public bool IsExpansion + { + readonly get => (Flags & CharacterFlags.Expansion) != 0; + set => Flags = value ? Flags | CharacterFlags.Expansion : Flags & ~CharacterFlags.Expansion; + } + + public bool IsLadder + { + readonly get => (Flags & CharacterFlags.Ladder) != 0; + set => Flags = value ? Flags | CharacterFlags.Ladder : Flags & ~CharacterFlags.Ladder; + } +} + /// /// Quest data per difficulty (96 bytes). /// Acts I-IV: 8 slots × 2 bytes = 16 bytes each. @@ -453,19 +569,23 @@ public string Name /// /// Gets a reference to the layout from a byte span. - /// Throws InvalidDataException if magic values are invalid. + /// Throws InvalidDataException if magic values are invalid or version is >= 104. + /// For v104+ saves, use instead. /// public static ref D2SaveLayout From(Span data) { ref var layout = ref MemoryMarshal.AsRef(data); if (!layout.IsValid) throw new InvalidDataException("Invalid D2 save file: magic values do not match."); + if (layout.Header.Version >= 104) + throw new InvalidDataException("Save version >= 104 uses a different header layout. Use D2SaveLayoutV104.From() instead."); return ref layout; } /// /// Gets a reference to the layout from a byte array. - /// Throws InvalidDataException if magic values are invalid. + /// Throws InvalidDataException if magic values are invalid or version is >= 104. + /// For v104+ saves, use instead. /// public static ref D2SaveLayout From(byte[] data) => ref From(data.AsSpan()); @@ -482,3 +602,72 @@ public static void UpdateChecksum(Span data) public static void UpdateChecksum(byte[] data) => ChecksumCalculator.Update(data.AsSpan()); } + +/// +/// Blittable layout for the fixed sections of v>=104 D2 save files (833 bytes). +/// v104+ removes the 16-byte Character.Name field and expands PreviewData from 144 to 228 bytes, +/// shifting all downstream section offsets by +68 bytes. +/// +[StructLayout(LayoutKind.Explicit, Size = Size)] +public struct D2SaveLayoutV104 +{ + private const int Size = 833; + + private const int QuestFileOffset = 0x193; + private const int WaypointFileOffset = 0x2BD; + private const int PlayerIntroFileOffset = 0x30D; + + [FieldOffset(HeaderLayout.FileOffset)] public HeaderLayout Header; + [FieldOffset(CharacterLayoutV104.FileOffset)] public CharacterLayoutV104 Character; + [FieldOffset(QuestFileOffset)] public QuestSectionLayout Quests; + [FieldOffset(WaypointFileOffset)] public WaypointSectionLayout Waypoints; + [FieldOffset(PlayerIntroFileOffset)] public PlayerIntroSectionLayout PlayerIntro; + + /// Validates all section magic values and version. + private readonly bool IsValid => + Header.IsValid && + Header.Version >= 104 && + Quests.IsValid && + Waypoints.IsValid && + PlayerIntro.IsValid; + + /// + /// Character name (always from Preview.Name in v104+, since Character.Name was removed). + /// + public string Name + { + get => Character.Preview.Name; + set => Character.Preview.Name = value; + } + + /// + /// Gets a reference to the layout from a byte span. + /// Throws InvalidDataException if magic values are invalid or version is < 104. + /// + public static ref D2SaveLayoutV104 From(Span data) + { + ref var layout = ref MemoryMarshal.AsRef(data); + if (!layout.IsValid) + throw new InvalidDataException("Invalid D2 save file: magic values do not match or version < 104."); + return ref layout; + } + + /// + /// Gets a reference to the layout from a byte array. + /// Throws InvalidDataException if magic values are invalid or version is < 104. + /// + public static ref D2SaveLayoutV104 From(byte[] data) + => ref From(data.AsSpan()); + + /// + /// Updates the checksum in the provided data buffer. + /// + public static void UpdateChecksum(Span data) + => ChecksumCalculator.Update(data); + + /// + /// Updates the checksum in the provided data buffer. + /// + public static void UpdateChecksum(byte[] data) + => ChecksumCalculator.Update(data.AsSpan()); +} diff --git a/src/D2SSharp/Model/D2StashSave.cs b/src/D2SSharp/Model/D2StashSave.cs index 115e21d..8386bd8 100644 --- a/src/D2SSharp/Model/D2StashSave.cs +++ b/src/D2SSharp/Model/D2StashSave.cs @@ -4,7 +4,7 @@ namespace D2SSharp.Model; /// -/// Diablo 2 Resurrected shared stash save file - extends List<D2StashTab> for direct tab access. +/// Diablo 2 Resurrected shared stash save file - extends List for direct tab access. /// public partial class D2StashSave : List { diff --git a/src/D2SSharp/Model/D2StashTab.cs b/src/D2SSharp/Model/D2StashTab.cs index 77da57c..a7ff5a6 100644 --- a/src/D2SSharp/Model/D2StashTab.cs +++ b/src/D2SSharp/Model/D2StashTab.cs @@ -27,12 +27,21 @@ public partial class D2StashTab /// Season number the stash belongs to (0 for non-seasonal). public ushort Season { get; set; } - /// Reserved data/padding (44 bytes). - public byte[] Reserved { get; set; } = new byte[44]; + /// Reserved data/padding (43 bytes after StashTabType). + public byte[] Reserved { get; set; } = new byte[43]; - /// Items stored in the stash tab. + /// + /// Stash tab type (StashFormat >= 2 only). + /// Determines what the tab body contains. + /// + public StashTabType TabType { get; set; } + + /// Items stored in the stash tab (for Normal and AdvancedStash tabs). public ItemsSection Items { get; set; } = new(); + /// Chronicle data (for Chronicle tabs only). + public ChronicleSection? Chronicle { get; set; } + /// /// Reads a single stash tab from a BitReader. /// @@ -53,8 +62,25 @@ public static D2StashTab Read(ref BitReader reader, IExternalData externalData) tab.Gold = reader.ReadUInt32(); ushort size = reader.ReadUInt16(); // Size field (not stored, used for validation) tab.Season = reader.ReadUInt16(); + tab.TabType = (StashTabType)reader.ReadByte(); reader.ReadBytes(tab.Reserved); - tab.Items = ItemsSection.Read(ref reader, externalData, tab.ItemFormat); + + // Game forces tabType=0 for StashFormat < 2 + if (tab.StashFormat < 2) + tab.TabType = StashTabType.Normal; + + int bodySize = size - (int)HeaderSize; + + switch (tab.TabType) + { + case StashTabType.Chronicle: + tab.Chronicle = ChronicleSection.Read(ref reader, bodySize); + break; + + default: // Normal and AdvancedStash + tab.Items = ItemsSection.Read(ref reader, externalData, tab.ItemFormat); + break; + } // Seek to the correct position for the next tab reader.SetBytePosition(startPosition + size); @@ -78,6 +104,10 @@ public void Write(ref BitWriter writer, IExternalData externalData, uint? target // Update Version permanently (data is now in the new format) ItemFormat = writeVersion; + // Chronicle tabs don't exist in StashFormat < 2, skip entirely + if (TabType == StashTabType.Chronicle && StashFormat < 2) + return; + int startPosition = writer.BytesWritten; writer.WriteUInt32(Magic); @@ -89,9 +119,19 @@ public void Write(ref BitWriter writer, IExternalData externalData, uint? target int sizeFieldPosition = writer.BitPosition; writer.WriteUInt16(0); writer.WriteUInt16(Season); + writer.WriteByte((byte)TabType); writer.WriteBytes(Reserved); - Items.Write(ref writer, externalData, writeVersion); + switch (TabType) + { + case StashTabType.Chronicle: + Chronicle?.Write(ref writer); + break; + + default: // Normal and AdvancedStash + Items.Write(ref writer, externalData, writeVersion); + break; + } // Calculate this tab's size and write it back int tabSize = writer.BytesWritten - startPosition; @@ -113,6 +153,19 @@ private void PrepareForVersion(uint sourceVersion, uint targetVersion) // Only convert if source and target formats differ if (!sourceIsD2R && targetIsD2R) Convert114ToD2R(); + + // Upgrade StashFormat for v100+ (enables TabType) + if (targetVersion >= 100) + { + if (StashFormat < 2) + StashFormat = 2; + } + else if (targetVersion > 96 && StashFormat >= 2) + { + // Downgrade StashFormat for pre-v100 D2R + StashFormat = 1; + TabType = StashTabType.Normal; + } } /// diff --git a/src/D2SSharp/Model/DemonSection.cs b/src/D2SSharp/Model/DemonSection.cs new file mode 100644 index 0000000..e8ec5ae --- /dev/null +++ b/src/D2SSharp/Model/DemonSection.cs @@ -0,0 +1,309 @@ +using D2SSharp.Data; +using D2SSharp.Enums; +using D2SSharp.IO; + +namespace D2SSharp.Model; + +/// +/// Demon persistence section ("lf" magic, v>=103). +/// Contains a 92-byte demon descriptor and a stat list in "gf" format +/// with 32-bit raw values (no SaveAdd/ValShift encoding). +/// +public partial class DemonSection +{ + /// Section magic: "lf" (0x666C) + public const ushort Magic = 0x666C; + + /// Section version (expected to be 1). + public ushort SectionVersion { get; set; } = 1; + + /// Whether a demon exists. + public bool HasDemon { get; set; } + + /// Padding byte after HasDemon. + public byte Padding { get; set; } + + /// Demon data (null if no demon). + public DemonData? DemonData { get; set; } + + /// + /// Tries to read a demon section from a BitReader. + /// Returns null if the section is not present (no matching magic bytes). + /// + public static DemonSection? TryRead(ref BitReader reader, IExternalData externalData, uint saveVersion) + { + if (saveVersion < 103) + return null; + + // Need at least 6 bytes for the header + if (reader.BitsRemaining < 48) + return null; + + // Peek at the next 4 bytes to check for section version + magic + int savedPosition = reader.BitPosition; + ushort version = reader.ReadUInt16(); + ushort magic = reader.ReadUInt16(); + + if (magic != Magic || version != 1) + { + // Not a demon section, restore position + reader.SetBitPosition(savedPosition); + return null; + } + + var section = new DemonSection + { + SectionVersion = version, + HasDemon = reader.ReadByte() != 0, + Padding = reader.ReadByte() + }; + + if (section.HasDemon) + { + section.DemonData = DemonData.Read(ref reader, externalData, saveVersion); + } + + return section; + } + + /// + /// Writes a demon section to a BitWriter. + /// + public void Write(ref BitWriter writer, IExternalData externalData, uint saveVersion) + { + writer.WriteUInt16(SectionVersion); + writer.WriteUInt16(Magic); + writer.WriteByte((byte)(HasDemon ? 1 : 0)); + writer.WriteByte(Padding); + + if (HasDemon && DemonData != null) + { + DemonData.Write(ref writer, externalData, saveVersion); + } + } +} + +/// +/// Data for a demon: a 92-byte descriptor struct followed by a +/// "gf"-format stat list with 32-bit raw values. +/// +/// +/// Stat blob format (version >= 103): +/// Same as PlayerStats except values are always 32 bits (not CsvBits). +/// +/// uint16 magic "gf" (0x6667) +/// bitstream: [9-bit statId] [CsvParam param] [32-bit value] ... +/// 9-bit terminator 0x1FF +/// padded to byte boundary +/// +/// +public partial class DemonData +{ + /// Demon type (Standard or SuperUnique). + public DemonType DemonType { get; set; } + + /// Monster class row index (0-based). + /// For : MonStats.txt row index. + /// For : SuperUniques.txt row index; + /// the actual MonStats ID is derived from the SuperUniques record at runtime. + /// Stored on wire as ClassId + 1 (1-based). + public ushort ClassId { get; set; } + + /// Monster name seed. + public ushort NameSeed { get; set; } + + /// Monster modifier flags. + public ushort MonFlags { get; set; } + + /// Number of stats (in the pre-97 legacy format, not used). + public ushort NumStats { get; set; } + + /// Unknown byte at offset 0x0C. + public byte Unknown0C { get; set; } + + /// Unknown byte at offset 0x0D. + public byte Unknown0D { get; set; } + + /// Unknown uint16 at offset 0x0E. + public ushort Unknown0E { get; set; } + + /// Unknown 28 bytes at offset 0x10. + public byte[] Unknown10 { get; set; } = new byte[28]; + + /// Unknown uint32 at offset 0x2C. + public uint Unknown2C { get; set; } + + /// Unknown uint32 at offset 0x30. + public uint Unknown30 { get; set; } + + /// Unknown uint32 at offset 0x34. + public uint Unknown34 { get; set; } + + /// Unknown uint32 at offset 0x38. + public uint Unknown38 { get; set; } + + /// Unknown uint32 at offset 0x3C. + public uint Unknown3C { get; set; } + + /// Components (16 bytes). + public byte[] Components { get; set; } = new byte[16]; + + /// Monster unique modifiers (10 bytes). + public byte[] MonUMod { get; set; } = new byte[10]; + + /// Unknown 2 bytes at offset 0x5A. + public byte[] Unknown5A { get; set; } = new byte[2]; + + /// Demon stats (32-bit raw values, no SaveAdd/ValShift transform). + public List Stats { get; set; } = []; + + /// + /// Reads a demon from the bit stream: 92-byte struct + stat blob. + /// + public static DemonData Read(ref BitReader reader, IExternalData externalData, uint saveVersion) + { + var demon = new DemonData(); + + // Read 92-byte struct field by field + ushort statDataSize = reader.ReadUInt16(); // 0x00 + demon.DemonType = (DemonType)reader.ReadUInt16(); // 0x02 + demon.ClassId = (ushort)(reader.ReadUInt16() - 1); // 0x04 (wire is 1-based) + demon.NameSeed = reader.ReadUInt16(); // 0x06 + demon.MonFlags = reader.ReadUInt16(); // 0x08 0x00 or 0x16 - minion + demon.NumStats = reader.ReadUInt16(); // 0x0A + demon.Unknown0C = reader.ReadByte(); // 0x0C + demon.Unknown0D = reader.ReadByte(); // 0x0D + demon.Unknown0E = reader.ReadUInt16(); // 0x0E Padding most likely + reader.ReadBytes(demon.Unknown10); // 0x10 (28 bytes) Perhaps states, but usually 24 bytes. + demon.Unknown2C = reader.ReadUInt32(); // 0x2C + demon.Unknown30 = reader.ReadUInt32(); // 0x30 + demon.Unknown34 = reader.ReadUInt32(); // 0x34 + demon.Unknown38 = reader.ReadUInt32(); // 0x38 + demon.Unknown3C = reader.ReadUInt32(); // 0x3C + reader.ReadBytes(demon.Components); // 0x40 (16 bytes) + reader.ReadBytes(demon.MonUMod); // 0x50 (10 bytes) + reader.ReadBytes(demon.Unknown5A); // 0x5A (2 bytes) + + // Read stat blob + if (statDataSize > 0) + { + Span statBlob = stackalloc byte[statDataSize]; + reader.ReadBytes(statBlob); + demon.Stats = ReadDemonStats(statBlob, externalData, saveVersion); + } + + return demon; + } + + /// + /// Writes a demon to the bit stream: 92-byte struct + stat blob. + /// + public void Write(ref BitWriter writer, IExternalData externalData, uint saveVersion) + { + // Serialize stats to temp buffer first to determine statDataSize + Span statBuffer = stackalloc byte[16384]; + var statDataSize = WriteDemonStats(statBuffer, externalData, saveVersion); + + // Write 92-byte struct + writer.WriteUInt16((ushort)statDataSize); // 0x00 + writer.WriteUInt16((ushort)DemonType); // 0x02 + writer.WriteUInt16((ushort)(ClassId + 1)); // 0x04 (wire is 1-based) + writer.WriteUInt16(NameSeed); // 0x06 + writer.WriteUInt16(MonFlags); // 0x08 + writer.WriteUInt16(NumStats); // 0x0A + writer.WriteByte(Unknown0C); // 0x0C + writer.WriteByte(Unknown0D); // 0x0D + writer.WriteUInt16(Unknown0E); // 0x0E + writer.WriteBytes(Unknown10); // 0x10 (28 bytes) + writer.WriteUInt32(Unknown2C); // 0x2C + writer.WriteUInt32(Unknown30); // 0x30 + writer.WriteUInt32(Unknown34); // 0x34 + writer.WriteUInt32(Unknown38); // 0x38 + writer.WriteUInt32(Unknown3C); // 0x3C + writer.WriteBytes(Components); // 0x40 (16 bytes) + writer.WriteBytes(MonUMod); // 0x50 (10 bytes) + writer.WriteBytes(Unknown5A); // 0x5A (2 bytes) + + // Write stat blob + if (statDataSize > 0) + { + writer.WriteBytes(statBuffer[..statDataSize]); + } + } + + /// + /// Parses demon stats from a "gf"-format blob with 32-bit raw values. + /// + private static List ReadDemonStats(ReadOnlySpan statBlob, IExternalData externalData, uint saveVersion) + { + var stats = new List(); + var statReader = new BitReader(statBlob); + + // Verify "gf" magic + ushort magic = statReader.ReadUInt16(); + if (magic != PlayerStats.Magic) + throw new InvalidDataException($"Invalid demon stat magic: 0x{magic:X4}, expected 0x{PlayerStats.Magic:X4}"); + + // Read stats until terminator + while (true) + { + StatId statId = (StatId)statReader.ReadBits(9); + + if (statId == StatId.Terminator) + break; + + var statInfo = externalData.GetStatInfo(statId, saveVersion); + + // Demon stats use the "gf" (player stat) format, so CsvParam is the + // correct param bit width here (not SaveParamBits which is for item stats). + int layer = 0; + if (statInfo.CsvParam > 0) + { + layer = statReader.ReadSignedBits(statInfo.CsvParam); + } + + // Demon stats always use 32-bit raw values + long value = statReader.ReadBits(32); + + stats.Add(new Stat(statId, layer, value)); + } + + return stats; + } + + /// + /// Serializes demon stats into a "gf"-format blob with 32-bit raw values. + /// Returns the number of bytes written. + /// + private int WriteDemonStats(Span buffer, IExternalData externalData, uint saveVersion) + { + var statWriter = new BitWriter(buffer); + + // Write "gf" magic + statWriter.WriteUInt16(PlayerStats.Magic); + + // Write each stat + foreach (var stat in Stats) + { + var statInfo = externalData.GetStatInfo(stat.Id, saveVersion); + + statWriter.WriteBits((uint)stat.Id, 9); + + if (statInfo.CsvParam > 0) + { + statWriter.WriteBits((uint)stat.Layer, statInfo.CsvParam); + } + + // Demon stats always use 32-bit raw values + statWriter.WriteBits(checked((uint)stat.Value), 32); + } + + // Write terminator + statWriter.WriteBits((uint)StatId.Terminator, 9); + + // Align to byte boundary + statWriter.AlignToByte(); + + return statWriter.BytesWritten; + } +} diff --git a/src/D2SSharp/Model/IronGolemSection.cs b/src/D2SSharp/Model/IronGolemSection.cs index a8f5b08..af615c1 100644 --- a/src/D2SSharp/Model/IronGolemSection.cs +++ b/src/D2SSharp/Model/IronGolemSection.cs @@ -20,7 +20,7 @@ public partial class IronGolemSection /// /// The bit reader. /// External game data. - /// Save file version (determines format: >96 uses D2R format). + /// Save file version (determines format: >96 uses D2R format). public static IronGolemSection Read(ref BitReader reader, IExternalData externalData, uint saveVersion) { var section = new IronGolemSection(); @@ -45,7 +45,7 @@ public static IronGolemSection Read(ref BitReader reader, IExternalData external /// /// The bit writer. /// External game data. - /// Save file version (determines format: >96 uses D2R format). + /// Save file version (determines format: >96 uses D2R format). public void Write(ref BitWriter writer, IExternalData externalData, uint saveVersion) { // Write magic "kf" diff --git a/src/D2SSharp/Model/Item.cs b/src/D2SSharp/Model/Item.cs index 6ef3483..e1b4009 100644 --- a/src/D2SSharp/Model/Item.cs +++ b/src/D2SSharp/Model/Item.cs @@ -118,13 +118,27 @@ public string ItemCodeString /// Socket count, and socketed items. public List Sockets { get; set; } = []; + // --- v100+ chronicle data (IFLAG_CHRONICLE, flag bit 28 = 0x10000000) --- + /// Chronicle ID (16 bits, v100+ with chronicle flag). + public ushort? ChronicleId { get; set; } + + /// Chronicle timestamp in minutes since custom epoch (32 bits, when IFLAG_CHRONICLE_COMPACT bit 29 is NOT set). + public uint? ChronicleTimestamp { get; set; } + + /// Characters that would receive the chronicle entry when the item is identified (up to 8, v100+). + public List? ChronicleRecipients { get; set; } + + // --- v100+ advanced stash data (AdvancedStashStackable column in items.txt) --- + /// Stack size for items in advanced stash tabs (8 bits, v100+). + public byte? AdvancedStashStackSize { get; set; } + /// /// Reads an item from a BitReader. /// Matches C++ ITEMS_DecodeItemFromBitstream structure. /// /// The bit reader. /// External game data. - /// Save file version (determines format: >96 uses D2R format). + /// Save file version (determines format: 96 uses D2R format). public static Item Read(ref BitReader reader, IExternalData externalData, uint saveVersion) { var item = new Item(); @@ -138,7 +152,7 @@ public static Item Read(ref BitReader reader, IExternalData externalData, uint s /// /// The bit reader. /// External game data. - /// Save file version (determines format: >96 uses D2R format). + /// Save file version (determines format: >96 uses D2R format). public void ReadFrom(ref BitReader reader, IExternalData externalData, uint saveVersion) { if (saveVersion <= 96) @@ -165,13 +179,21 @@ public void ReadFrom(ref BitReader reader, IExternalData externalData, uint save Flags = flags; // Branch based on CompactSave flag (matches C++ structure) - if (flags.HasFlag(ItemFlags.CompactSave)) + try { - ReadCompactItem(ref reader, externalData, saveVersion); + if (flags.HasFlag(ItemFlags.CompactSave)) + { + ReadCompactItem(ref reader, externalData, saveVersion); + } + else + { + ReadCompleteItem(ref reader, externalData, isGamble, saveVersion); + } } - else + catch (Exception ex) when (ex is not InvalidDataException || !ex.Message.Contains("item code=")) { - ReadCompleteItem(ref reader, externalData, isGamble, saveVersion); + throw new InvalidDataException( + $"Error parsing item code={ItemCodeString} flags=0x{(uint)Flags:X8} compact={flags.HasFlag(ItemFlags.CompactSave)} quality={Quality} at bit {reader.BitPosition}: {ex.Message}", ex); } // C++: Each item uses a fresh byte buffer, so items are byte-aligned @@ -240,6 +262,9 @@ private void ReadCompactItem(ref BitReader reader, IExternalData externalData, u // Realm data (version > 86, bCheckForHeader=true for save files) ReadRealmData(ref reader, saveVersion); + // Advanced stash stack size (v100+, sub_140276B60) + ReadAdvancedStashStackSize(ref reader, saveVersion); + // C++ sets default values for compact items ItemLevel = 1; Quality = ItemQuality.Normal; @@ -295,7 +320,6 @@ private void ReadCompleteItem(ref BitReader reader, IExternalData externalData, int rawAutoAffix = (int)reader.ReadBits(11); AutoAffixId = (ushort)(rawAutoAffix + externalData.GetAutoMagicOffset(saveVersion)); } - // Quality-specific data int itemIndex = externalData.GetItemIndex(ItemCode, saveVersion); var itemInfo = externalData.GetItemInfo(itemIndex, saveVersion); @@ -320,7 +344,6 @@ private void ReadCompleteItem(ref BitReader reader, IExternalData externalData, { PersonalizedName = ReadString(ref reader, saveVersion); } - // Realm data (bServer=true for save files, version > 86) ReadRealmData(ref reader, saveVersion); @@ -362,8 +385,15 @@ private void ReadCompleteItem(ref BitReader reader, IExternalData externalData, PlayerGold = reader.ReadBool(); } - // Stackable quantity (bit width is version-dependent, not from ItemStatCost) - if (itemInfo.IsStackable) + // Stackable quantity + // v105+: 1-bit presence flag for ALL items, then optional 9-bit quantity + // v<=104: only stackable items get quantity (bit width is version-dependent) + if (saveVersion > 104) + { + if (reader.ReadBool()) + Quantity = (int)reader.ReadBits(9); + } + else if (itemInfo.IsStackable) { Quantity = (int)reader.ReadBits(externalData.GetQuantityBits(saveVersion)); } @@ -404,6 +434,12 @@ private void ReadCompleteItem(ref BitReader reader, IExternalData externalData, { RunewordStats = ReadStatList(ref reader, externalData, saveVersion); } + + // Chronicle data (v100+, IFLAG_CHRONICLE = bit 28) + ReadChronicle(ref reader, saveVersion); + + // Advanced stash stack size (v100+, sub_140276B60) + ReadAdvancedStashStackSize(ref reader, saveVersion); } /// @@ -462,6 +498,7 @@ private void ReadCompleteItem(ref BitReader reader, IExternalData externalData, /// /// Reads a stat list with paired stat handling. + /// Returns the list of parsed stats plus optional raw trailing bit data for unknown stats. /// private static List ReadStatList(ref BitReader reader, IExternalData externalData, uint saveVersion) { @@ -473,16 +510,16 @@ private static List ReadStatList(ref BitReader reader, IExternalData exter if (statId == StatId.Terminator) break; - var statInfo = externalData.GetStatInfo(statId, saveVersion); + var info = externalData.GetStatInfo(statId, saveVersion); int layer = 0; - if (statInfo.SaveParamBits > 0) + if (info.SaveParamBits > 0) { - layer = (int)reader.ReadBits(statInfo.SaveParamBits); + layer = (int)reader.ReadBits(info.SaveParamBits); } // C++: value = (raw - SaveAdd) << ValShift - int rawValue = (int)reader.ReadBits(statInfo.SaveBits) - statInfo.SaveAdd; - long value = (long)rawValue << statInfo.ValShift; + int rawValue = (int)reader.ReadBits(info.SaveBits) - info.SaveAdd; + long value = (long)rawValue << info.ValShift; stats.Add(new Stat(statId, layer, value)); // Handle paired stats - read additional stats that follow without their own ID @@ -513,7 +550,7 @@ private static List ReadStatList(ref BitReader reader, IExternalData exter /// /// The bit writer. /// External game data. - /// Save file version (determines format: >96 uses D2R format). + /// Save file version (determines format: >96 uses D2R format). public void Write(ref BitWriter writer, IExternalData externalData, uint saveVersion) { if (saveVersion <= 96) @@ -603,6 +640,9 @@ private void WriteCompactItem(ref BitWriter writer, IExternalData externalData, // Realm data WriteRealmData(ref writer, saveVersion); + + // Advanced stash stack size (v100+) + WriteAdvancedStashStackSize(ref writer, saveVersion); } private void WriteCompleteItem(ref BitWriter writer, IExternalData externalData, ItemTypeInfo itemInfo, uint saveVersion) @@ -726,8 +766,17 @@ private void WriteCompleteItem(ref BitWriter writer, IExternalData externalData, writer.WriteBool(PlayerGold); } - // Stackable quantity (bit width is version-dependent, not from ItemStatCost) - if (itemInfo.IsStackable) + // Stackable quantity + // v105+: 1-bit presence flag for ALL items, then optional 9-bit quantity + // v<=104: only stackable items get quantity (bit width is version-dependent) + if (saveVersion > 104) + { + bool hasQuantity = Quantity.HasValue; + writer.WriteBool(hasQuantity); + if (hasQuantity) + writer.WriteBits((uint)Math.Clamp(Quantity!.Value, 0, 511), 9); + } + else if (itemInfo.IsStackable) { int maxQuantity = (1 << externalData.GetQuantityBits(saveVersion)) - 1; int quantityValue = Math.Clamp(Quantity ?? 0, 0, maxQuantity); @@ -761,14 +810,9 @@ private void WriteCompleteItem(ref BitWriter writer, IExternalData externalData, if ((SetItemMask.Value & (1 << i)) != 0) { if (bonusIndex < SetBonusStats.Count) - { WriteStatList(ref writer, SetBonusStats[bonusIndex], externalData, saveVersion); - } else - { - // No data for this bit - write empty list (just terminator) WriteStatList(ref writer, [], externalData, saveVersion); - } bonusIndex++; } } @@ -779,6 +823,12 @@ private void WriteCompleteItem(ref BitWriter writer, IExternalData externalData, { WriteStatList(ref writer, RunewordStats ?? [], externalData, saveVersion); } + + // Chronicle data (v100+, IFLAG_CHRONICLE = bit 28) + WriteChronicle(ref writer, saveVersion); + + // Advanced stash stack size (v100+) + WriteAdvancedStashStackSize(ref writer, saveVersion); } /// @@ -837,8 +887,7 @@ private static void WriteStatList(ref BitWriter writer, List stats, IExter writtenStats.Add(pairedStatId); // C++: raw = (value >> ValShift) + SaveAdd - // Stat is a record struct, so check if we found a matching stat by ID - long pairedValue = pairedStat.Id == pairedStatId ? pairedStat.Value : 0; + long pairedValue = pairedStat is not null ? pairedStat.Value : 0; long pairedShifted = pairedValue >> pairedInfo.ValShift; writer.WriteBits((uint)(pairedShifted + pairedInfo.SaveAdd), pairedInfo.SaveBits); } @@ -853,7 +902,7 @@ private static void WriteStatList(ref BitWriter writer, List stats, IExter /// /// Reads the item format version using the appropriate encoding for the save version. - /// Old format (saveVersion ≤ 96): 10 bits + /// Old format (saveVersion <= 96): 10 bits /// New format (saveVersion > 96, server mode): 1 bit flag + 2 bits value /// private static ushort ReadItemFormatVersion(ref BitReader reader, uint saveVersion) @@ -872,7 +921,7 @@ private static ushort ReadItemFormatVersion(ref BitReader reader, uint saveVersi /// /// Writes the item format version using the appropriate encoding for the save version. - /// Old format (saveVersion ≤ 96): 10 bits + /// Old format (saveVersion <= 96): 10 bits /// New format (saveVersion > 96, server mode): 1 bit flag + 2 bits value /// private static void WriteItemFormat(ref BitWriter writer, uint version, uint saveVersion) @@ -976,6 +1025,146 @@ private void WriteRealmData(ref BitWriter writer, uint saveVersion) } } + /// + /// Hardcoded item codes that have stacked item data in v100-101. + /// + private static readonly HashSet StackableItemCodes = BuildStackableItemCodes( + "rvs rvl gcv gfv gsv gzv gpv gcy gfy gsy gly gpy gcb gfb gsb glb gpb gcg gfg gsg glg gpg gcr gfr gsr glr gpr gcw " + + "gfw gsw glw gpw skc skf sku skl skz r01 r02 r03 r04 r05 r06 r07 r08 r09 r10 r11 r12 r13 r14 r15 r16 r17 r18 r19 " + + "r20 r21 r22 r23 r24 r25 r26 r27 r28 r29 r30 r31 r32 r33 pk1 pk2 pk3 dhn bey mbr toa tes ceh bet fed "); + + /// + /// Parses space-separated 3-char item codes into uint keys. + /// Each code is 3 chars + 1 space = 4 bytes, matching D2's space-padded uint encoding. + /// The input string must end with a trailing space so the last code is included. + /// + private static HashSet BuildStackableItemCodes(string codes) + { + var set = new HashSet(); + for (int i = 0; i + 3 < codes.Length; i += 4) + { + uint code = (uint)(codes[i] | (codes[i + 1] << 8) | (codes[i + 2] << 16) | (codes[i + 3] << 24)); + set.Add(code); + } + return set; + } + + /// + /// Reads advanced stash stack size (v100+, sub_140276B60). + /// Controlled by AdvancedStashStackable column in items.txt. + /// For v100-101: only for hardcoded stackable item types. + /// For v102+: 1-bit flag + optional 8-bit value. + /// + private void ReadAdvancedStashStackSize(ref BitReader reader, uint saveVersion) + { + if (saveVersion <= 99) return; + + if (saveVersion <= 101) + { + // v100-101: only for items in the hardcoded stackable list + if (!StackableItemCodes.Contains(ItemCode)) return; + } + else + { + // v102+: 1-bit presence flag + if (!reader.ReadBool()) return; + } + + AdvancedStashStackSize = (byte)reader.ReadBits(8); + } + + /// + /// Writes advanced stash stack size (v100+, sub_14027A650). + /// + private void WriteAdvancedStashStackSize(ref BitWriter writer, uint saveVersion) + { + if (saveVersion <= 99) return; + + if (saveVersion <= 101) + { + // v100-101: unconditionally present for hardcoded stackable items (no flag bit) + if (!StackableItemCodes.Contains(ItemCode)) return; + writer.WriteBits(AdvancedStashStackSize ?? 0, 8); + } + else + { + // v102+: 1-bit flag + optional 8-bit value + writer.WriteBool(AdvancedStashStackSize.HasValue); + if (AdvancedStashStackSize.HasValue) + writer.WriteBits(AdvancedStashStackSize.Value, 8); + } + } + + /// + /// Reads chronicle data (v100+, IFLAG_CHRONICLE = bit 28 = 0x10000000). + /// Tracks when notable items (Unique/Set/Runeword) were found. + /// Normal form: 16-bit chronicle_id, 32-bit timestamp, 4-bit count, count x 64-bit entries. + /// Compact form (IFLAG_CHRONICLE_COMPACT = bit 29): 16-bit chronicle_id, 1 x 64-bit entry. + /// + private void ReadChronicle(ref BitReader reader, uint saveVersion) + { + if (saveVersion <= 99) return; + if (!Flags.HasFlag(ItemFlags.Chronicle)) return; + + ChronicleId = (ushort)reader.ReadBits(16); + + bool isCompact = Flags.HasFlag(ItemFlags.ChronicleCompact); + if (!isCompact) + { + ChronicleTimestamp = reader.ReadUInt32(); + } + + int count = isCompact ? 1 : (int)reader.ReadBits(4); + if (count > 8) count = 8; + if (count <= 0) return; + + ChronicleRecipients = new List(count); + for (int i = 0; i < count; i++) + { + uint gameAccountId = reader.ReadUInt32(); + uint characterId = reader.ReadUInt32(); + ChronicleRecipients.Add(new CharacterIdentity(gameAccountId, characterId)); + } + } + + /// + /// Writes chronicle data (v100+, IFLAG_CHRONICLE = bit 28). + /// + private void WriteChronicle(ref BitWriter writer, uint saveVersion) + { + if (saveVersion <= 99) return; + if (!Flags.HasFlag(ItemFlags.Chronicle)) return; + + writer.WriteBits(ChronicleId ?? 0, 16); + + bool isCompact = Flags.HasFlag(ItemFlags.ChronicleCompact); + if (!isCompact) + { + writer.WriteUInt32(ChronicleTimestamp ?? 0); + } + + int count; + if (isCompact) + { + count = 1; + } + else + { + count = ChronicleRecipients?.Count ?? 0; + count = Math.Clamp(count, 0, 8); + writer.WriteBits((uint)count, 4); + } + + if (ChronicleRecipients != null) + { + for (int i = 0; i < count && i < ChronicleRecipients.Count; i++) + { + writer.WriteUInt32(ChronicleRecipients[i].GameAccountId); + writer.WriteUInt32(ChronicleRecipients[i].CharacterId); + } + } + } + /// /// Reads a string using the appropriate encoding for the save version. /// Old format: 7-bit characters diff --git a/src/D2SSharp/Model/ItemsSection.cs b/src/D2SSharp/Model/ItemsSection.cs index 3e3698a..ec25407 100644 --- a/src/D2SSharp/Model/ItemsSection.cs +++ b/src/D2SSharp/Model/ItemsSection.cs @@ -4,7 +4,7 @@ namespace D2SSharp.Model; /// -/// Items section container - extends List<Item> for direct item access. +/// Items section container - extends List for direct item access. /// public partial class ItemsSection : List { @@ -16,7 +16,7 @@ public partial class ItemsSection : List /// /// The bit reader. /// External game data. - /// Save file version (determines format: >96 uses D2R format). + /// Save file version (determines format: >96 uses D2R format). public static ItemsSection Read(ref BitReader reader, IExternalData externalData, uint saveVersion) { var section = new ItemsSection(); @@ -43,7 +43,7 @@ public static ItemsSection Read(ref BitReader reader, IExternalData externalData /// /// The bit writer. /// External game data. - /// Save file version (determines format: >96 uses D2R format). + /// Save file version (determines format: >96 uses D2R format). public void Write(ref BitWriter writer, IExternalData externalData, uint saveVersion) { // Write magic "JM" diff --git a/src/D2SSharp/Model/MercItemsSection.cs b/src/D2SSharp/Model/MercItemsSection.cs index 88d7a6b..5e8d595 100644 --- a/src/D2SSharp/Model/MercItemsSection.cs +++ b/src/D2SSharp/Model/MercItemsSection.cs @@ -20,7 +20,7 @@ public partial class MercItemsSection /// The bit reader. /// External game data. /// Whether a mercenary exists (from MercData.HasMerc). - /// Save file version (determines format: >96 uses D2R format). + /// Save file version (determines format: >96 uses D2R format). public static MercItemsSection Read(ref BitReader reader, IExternalData externalData, bool hasMerc, uint saveVersion) { var section = new MercItemsSection(); @@ -46,7 +46,7 @@ public static MercItemsSection Read(ref BitReader reader, IExternalData external /// The bit writer. /// External game data. /// Whether a mercenary exists (from MercData.HasMerc). - /// Save file version (determines format: >96 uses D2R format). + /// Save file version (determines format: >96 uses D2R format). public void Write(ref BitWriter writer, IExternalData externalData, bool hasMerc, uint saveVersion) { // Write magic "jf" diff --git a/src/D2SSharp/Model/PreviewData.cs b/src/D2SSharp/Model/PreviewData.cs index 5b6f783..b292b54 100644 --- a/src/D2SSharp/Model/PreviewData.cs +++ b/src/D2SSharp/Model/PreviewData.cs @@ -1,3 +1,4 @@ +using D2SSharp.Enums; using D2SSharp.IO; namespace D2SSharp.Model; @@ -7,22 +8,29 @@ namespace D2SSharp.Model; /// This data is used by the game to display character information in the character selection screen /// without needing to fully parse the save file. /// +/// +/// Two layouts exist: +/// v<=103 (144 bytes): ExpansionSaveTime(8) ClassicSaveTime(8) GuildEmblemColor(4) +/// ExpansionExperience(4) ClassicExperience(4) PreviewItems×4(48) Name(60) Unk1(8) +/// v>=104 (228 bytes): SaveTimes×6(48) Experiences×6(24) GuildEmblemColor(1) GameMode(1) +/// Padding(2) PreviewItems×4(48) Name(96) Unk1(8) +/// public partial class PreviewData { - /// Save timestamp for expansion (Lord of Destruction) mode, stored as Windows FILETIME. - public ulong ExpansionSaveTime { get; set; } + /// Save timestamps stored as Windows FILETIME. v<=103: [0]=Expansion, [1]=Classic. v>=104: 6 slots. + public ulong[] SaveTimes { get; set; } = new ulong[6]; - /// Save timestamp for classic mode, stored as Windows FILETIME. - public ulong ClassicSaveTime { get; set; } + /// Total experience points per mode. v<=103: [0]=Expansion, [1]=Classic. v>=104: 6 slots. + public uint[] Experiences { get; set; } = new uint[6]; - /// Guild emblem background color index. One byte but padded to 4 bytes. + /// Guild emblem background color index. public uint GuildEmblemColor { get; set; } - /// Total experience points in expansion mode. - public uint ExpansionExperience { get; set; } + /// Game mode (v>=104 only, serialized as byte). + public GameMode GameMode { get; set; } - /// Total experience points in classic mode. - public uint ClassicExperience { get; set; } + /// Padding bytes after GameMode (v>=104 only). + public ushort PreviewPadding { get; set; } /// Preview data for the item equipped in the left hand slot. public PreviewItem LeftHand { get; set; } = new(); @@ -36,45 +44,120 @@ public partial class PreviewData /// Preview data for the item equipped in the head slot. public PreviewItem Head { get; set; } = new(); - /// Character name, fixed at 64 bytes with null padding. + /// Character name. v<=103: 60 bytes. v>=104: 96 bytes. public string Name { get; set; } = ""; - /// Unknown field, purpose not yet determined. - public uint Unk1 { get; set; } + /// Reserved/padding bytes after Name (always zero, never accessed by game code). + public ulong Unk1 { get; set; } + + // Legacy property accessors for backward compatibility + /// Save timestamp for expansion mode (SaveTimes[0]). + public ulong ExpansionSaveTime + { + get => SaveTimes[0]; + set => SaveTimes[0] = value; + } + + /// Save timestamp for classic mode (SaveTimes[1]). + public ulong ClassicSaveTime + { + get => SaveTimes[1]; + set => SaveTimes[1] = value; + } + + /// Total experience points in expansion mode (Experiences[0]). + public uint ExpansionExperience + { + get => Experiences[0]; + set => Experiences[0] = value; + } + + /// Total experience points in classic mode (Experiences[1]). + public uint ClassicExperience + { + get => Experiences[1]; + set => Experiences[1] = value; + } /// /// Reads a player Preview data section from a BitReader. /// - public static PreviewData Read(ref BitReader reader) + public static PreviewData Read(ref BitReader reader, uint saveVersion) { - return new PreviewData + var data = new PreviewData(); + + if (saveVersion >= 104) { - ExpansionSaveTime = reader.ReadUInt64(), - ClassicSaveTime = reader.ReadUInt64(), - GuildEmblemColor = reader.ReadUInt32(), - ExpansionExperience = reader.ReadUInt32(), - ClassicExperience = reader.ReadUInt32(), - LeftHand = PreviewItem.Read(ref reader), - RightHand = PreviewItem.Read(ref reader), - Torso = PreviewItem.Read(ref reader), - Head = PreviewItem.Read(ref reader), - Name = reader.ReadFixedString(64), - Unk1 = reader.ReadUInt32(), - }; + // v>=104: 6 save times (48 bytes) + for (int i = 0; i < 6; i++) + data.SaveTimes[i] = reader.ReadUInt64(); + + // 6 experiences (24 bytes) + for (int i = 0; i < 6; i++) + data.Experiences[i] = reader.ReadUInt32(); + + // GuildEmblemColor as byte, GameMode as byte, Padding as ushort + data.GuildEmblemColor = reader.ReadByte(); + data.GameMode = (GameMode)reader.ReadByte(); + data.PreviewPadding = reader.ReadUInt16(); + } + else + { + // v<=103: 2 save times, guild emblem as uint32, 2 experiences + data.SaveTimes[0] = reader.ReadUInt64(); + data.SaveTimes[1] = reader.ReadUInt64(); + data.GuildEmblemColor = reader.ReadUInt32(); + data.Experiences[0] = reader.ReadUInt32(); + data.Experiences[1] = reader.ReadUInt32(); + } + + data.LeftHand = PreviewItem.Read(ref reader); + data.RightHand = PreviewItem.Read(ref reader); + data.Torso = PreviewItem.Read(ref reader); + data.Head = PreviewItem.Read(ref reader); + + int nameSize = saveVersion >= 104 ? 96 : 60; + data.Name = reader.ReadFixedString(nameSize); + data.Unk1 = reader.ReadUInt64(); + + return data; } - public void Write(ref BitWriter writer) + /// Writes the player Preview data section to a BitWriter. + public void Write(ref BitWriter writer, uint saveVersion) { - writer.WriteUInt64(ExpansionSaveTime); - writer.WriteUInt64(ClassicSaveTime); - writer.WriteUInt32(GuildEmblemColor); - writer.WriteUInt32(ExpansionExperience); - writer.WriteUInt32(ClassicExperience); + if (saveVersion >= 104) + { + // v>=104: 6 save times (48 bytes) + for (int i = 0; i < 6; i++) + writer.WriteUInt64(SaveTimes[i]); + + // 6 experiences (24 bytes) + for (int i = 0; i < 6; i++) + writer.WriteUInt32(Experiences[i]); + + // GuildEmblemColor as byte, GameMode as byte, Padding as ushort + writer.WriteByte((byte)GuildEmblemColor); + writer.WriteByte((byte)GameMode); + writer.WriteUInt16(PreviewPadding); + } + else + { + // v<=103: 2 save times, guild emblem as uint32, 2 experiences + writer.WriteUInt64(SaveTimes[0]); + writer.WriteUInt64(SaveTimes[1]); + writer.WriteUInt32(GuildEmblemColor); + writer.WriteUInt32(Experiences[0]); + writer.WriteUInt32(Experiences[1]); + } + LeftHand.Write(ref writer); RightHand.Write(ref writer); Torso.Write(ref writer); Head.Write(ref writer); - writer.WriteFixedString(Name, 64); - writer.WriteUInt32(Unk1); + + int nameSize = saveVersion >= 104 ? 96 : 60; + writer.WriteFixedString(Name, nameSize); + writer.WriteUInt64(Unk1); } } diff --git a/src/D2SSharp/Model/SkillsSection.cs b/src/D2SSharp/Model/SkillsSection.cs index 41b1d64..9561f37 100644 --- a/src/D2SSharp/Model/SkillsSection.cs +++ b/src/D2SSharp/Model/SkillsSection.cs @@ -26,7 +26,8 @@ public partial class SkillsSection 96, // Paladin 126, // Barbarian 221, // Druid - 251 // Assassin + 251, // Assassin + 373 // Warlock ]; /// The character class this skills section belongs to.