Skip to content

Commit

Permalink
Add support for PTR 2.5 character file reading/writing
Browse files Browse the repository at this point in the history
add sundered charms tests
  • Loading branch information
WalterCouto committed Sep 30, 2022
1 parent 3a0a34b commit 03c795a
Show file tree
Hide file tree
Showing 76 changed files with 39,899 additions and 1,311 deletions.
Binary file modified D2Editor.exe
Binary file not shown.
12 changes: 7 additions & 5 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ You can edit the following stats:<br>

### Known Issues

- Tested with Diablo II: Resurrected v1.3.70161 (PTR 2.4) and Diablo II Classic v1.14d **(It has unit test confirming it supports all versions of the d2s file format, but the files used in testing, other than v1.14d and D2R files, have not been tested in a real game)**
- Tested with Diablo II: Resurrected v1.4.71336 (PTR 2.5) and Diablo II Classic v1.14d **(It has unit test confirming it supports all versions of the d2s file format, but the files used in testing, other than v1.14d and D2R files, have not been tested in a real game)**
- Starting with Diablo II Classic V1.13c the maximum gold in your stash no longer depends on your character's level, and is now a flat cap of 2,500,000 instead. The editor will now use this value when editing Resurrected files or Classic files marked as v1.10 or higher when determining the limit for your gold in your stash.
- For changes to take effect, you must not have Diablo II running and you should close the character file before playing Diablo II.

Expand All @@ -70,18 +70,20 @@ Check the following site for updates at https://github.com/WalterCouto/D2CE<br>
* https://github.com/dschu012/D2SLib<br>
* https://github.com/squeek502/d2itemreader<br>
* https://github.com/nokka/d2s<br>
* https://github.com/krisives/d2s-format<br>
* https://tristram-archives.github.io/diablo2_infodump//2013/just%20hosting%20these,%20Downloaded%20from%20Internet/documentation/d2s_save_file_format_1.13d.html<br>
* https://github.com/andersgong/d2bin2txt/<br>
* https://diablo.antikrist.org/item-codes/<br>
* [d2s Binary File Format](d2s_File_Format.md)<br>

### Revision History
**Version 2.17 (June 13, 2022)**
- Updated: fix up some edge cases for adding runeword to item
- Updated: fix logic to make sure unique items report the highest required level
**Version 2.17 (September 30, 2022)**
- Updated: fix up reading of character files for PTR 2.5<br>
- Updated: fix issue with renaming character missing one file<br>
- Updated: fix up some edge cases for adding runeword to item<br>
- Updated: fix logic to make sure unique items report the highest required level<br>
- Updated: "Max Everything" now will make all applicable items have superior quality and upgrade the item tier to the highest possible tier<br>
<br>

- Added: add support for making an item Superior<br>
- Added: add support for upgrading item tier to be exceptional or elite depending on character level<br>
<br>
Expand Down
27 changes: 21 additions & 6 deletions source/D2MainForm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3279,19 +3279,25 @@ void CD2MainForm::OnFileSaveAsVersion()
if (version != d2ce::EnumCharVersion::v110)
{
convertToVersion = d2ce::EnumCharVersion::v110;
fileDialog.AddControlItem(combo_id, static_cast<DWORD>(d2ce::EnumCharVersion::v110), _T("1.10 - 1.14d"));
fileDialog.AddControlItem(combo_id, static_cast<DWORD>(convertToVersion), _T("1.10 - 1.14d"));
}

if (version != d2ce::EnumCharVersion::v100R)
{
convertToVersion = d2ce::EnumCharVersion::v100R;
fileDialog.AddControlItem(combo_id, static_cast<DWORD>(d2ce::EnumCharVersion::v100R), _T("D2R 1.0.x - 1.1.x"));
fileDialog.AddControlItem(combo_id, static_cast<DWORD>(convertToVersion), _T("D2R 1.0.x - 1.1.x"));
}

if (version != d2ce::EnumCharVersion::v120)
{
convertToVersion = d2ce::EnumCharVersion::v120;
fileDialog.AddControlItem(combo_id, static_cast<DWORD>(d2ce::EnumCharVersion::v120), _T("D2R PTR 2.4+"));
fileDialog.AddControlItem(combo_id, static_cast<DWORD>(convertToVersion), _T("D2R PTR 2.4"));
}

if (version != d2ce::EnumCharVersion::v140)
{
convertToVersion = d2ce::EnumCharVersion::v140;
fileDialog.AddControlItem(combo_id, static_cast<DWORD>(convertToVersion), _T("D2R PTR 2.5+"));
}
fileDialog.SetSelectedControlItem(combo_id, static_cast<DWORD>(convertToVersion));
fileDialog.EndVisualGroup();
Expand Down Expand Up @@ -3322,19 +3328,25 @@ void CD2MainForm::OnFileSaveAsVersion()
if (version != d2ce::EnumCharVersion::v110)
{
convertToVersion = d2ce::EnumCharVersion::v110;
folderDialog.AddControlItem(combo_id, static_cast<DWORD>(d2ce::EnumCharVersion::v110), _T("1.10 - 1.14d"));
folderDialog.AddControlItem(combo_id, static_cast<DWORD>(convertToVersion), _T("1.10 - 1.14d"));
}

if (version != d2ce::EnumCharVersion::v100R)
{
convertToVersion = d2ce::EnumCharVersion::v100R;
folderDialog.AddControlItem(combo_id, static_cast<DWORD>(d2ce::EnumCharVersion::v100R), _T("D2R 1.0.x - 1.1.x"));
folderDialog.AddControlItem(combo_id, static_cast<DWORD>(convertToVersion), _T("D2R 1.0.x - 1.1.x"));
}

if (version != d2ce::EnumCharVersion::v120)
{
convertToVersion = d2ce::EnumCharVersion::v120;
folderDialog.AddControlItem(combo_id, static_cast<DWORD>(d2ce::EnumCharVersion::v120), _T("D2R PTR 2.4+"));
folderDialog.AddControlItem(combo_id, static_cast<DWORD>(convertToVersion), _T("D2R PTR 2.4"));
}

if (version != d2ce::EnumCharVersion::v140)
{
convertToVersion = d2ce::EnumCharVersion::v140;
folderDialog.AddControlItem(combo_id, static_cast<DWORD>(convertToVersion), _T("D2R PTR 2.5+"));
}
folderDialog.SetSelectedControlItem(combo_id, static_cast<DWORD>(convertToVersion));
folderDialog.EndVisualGroup();
Expand Down Expand Up @@ -3734,6 +3746,9 @@ void CD2MainForm::UpdateAppTitle()
}
switch (CharInfo.getVersion())
{
case d2ce::EnumCharVersion::v120:
newAppTitle += _T(" (PTR 2.4)");
break;
case d2ce::EnumCharVersion::v100R:
newAppTitle += _T(" (Version 1.0.x - 1.1.x)");
break;
Expand Down
7 changes: 6 additions & 1 deletion source/d2ce/Character.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3539,7 +3539,12 @@ d2ce::EnumCharVersion d2ce::Character::getVersion() const
return EnumCharVersion::v100R;
}

return EnumCharVersion::v120;
if (Version < static_cast<std::underlying_type_t<EnumCharVersion>>(EnumCharVersion::v140))
{
return EnumCharVersion::v120;
}

return EnumCharVersion::v140;
}
//---------------------------------------------------------------------------
const std::array<char, d2ce::NAME_LENGTH>& d2ce::Character::getName() const
Expand Down
4 changes: 2 additions & 2 deletions source/d2ce/CharacterConstants.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,9 @@ namespace d2ce
constexpr std::uint32_t D2R_APPEARANCES_LENGTH = 48;

// character version
enum class EnumCharVersion : std::uint32_t { v100 = 0x47, v107 = 0x57, v108 = 0x59, v109 = 0x5C, v110 = 0x60, v100R = 0x61, v120 = 0x62};
enum class EnumCharVersion : std::uint32_t { v100 = 0x47, v107 = 0x57, v108 = 0x59, v109 = 0x5C, v110 = 0x60, v100R = 0x61, v120 = 0x62, v140 = 0x63};

constexpr EnumCharVersion APP_CHAR_VERSION = EnumCharVersion::v120; // default version used by application
constexpr EnumCharVersion APP_CHAR_VERSION = EnumCharVersion::v140; // default version used by application

// character class
enum class EnumCharClass : std::uint8_t { Amazon, Sorceress, Necromancer, Paladin, Barbarian, Druid, Assassin };
Expand Down
10 changes: 8 additions & 2 deletions source/d2ce/DataTypes.h
Original file line number Diff line number Diff line change
Expand Up @@ -1263,6 +1263,9 @@ namespace d2ce
// Base Item Level (also known as Quality Level - qlvl) and Additional Magic Level (also known as mlvl)
ItemLevel level;

// Class specific value
std::uint16_t auto_prefix = 0;

// width and height in inventory cells
// For Belts and Cubes, also holds the width and height of those inventories
ItemDimensions dimensions;
Expand Down Expand Up @@ -1341,17 +1344,20 @@ namespace d2ce
virtual bool isRing() const;
virtual bool isAmulet() const;
virtual bool isBodyPart() const;
virtual bool isPlayerBodyPart() const;
virtual bool isSimpleItem() const;
virtual bool isUnusedItem() const;
virtual bool isExpansionItem() const;
virtual bool isSecondHand() const;
virtual bool isClassSpecific() const;
virtual bool isUniqueItem() const;
virtual std::uint16_t getUniqueItemId() const;
virtual bool isSetItem() const;
virtual std::uint16_t getSetItemId() const;
virtual std::uint16_t getId() const;
virtual std::uint32_t getSetItemDWBCode() const;
virtual std::uint16_t getSetBonusBits() const;
std::optional<d2ce::EnumCharClass> getClass() const;
virtual bool hasMultipleGraphics() const;
virtual std::uint32_t getNumPictureIds() const;

virtual bool hasUndeadBonus() const;

Expand Down
Loading

0 comments on commit 03c795a

Please sign in to comment.