diff --git a/common/patches/sof.cpp b/common/patches/sof.cpp index 7569b4c5d..bb310a76c 100644 --- a/common/patches/sof.cpp +++ b/common/patches/sof.cpp @@ -1116,7 +1116,10 @@ namespace SoF } OUT(deity); OUT(intoxication); + OUT_array(spellSlotRefresh, spells::SPELL_GEM_COUNT); + eq->spellSlotRefresh[9] = 0; // 10th slot is not valid in this release + OUT(abilitySlotRefresh); OUT(points); // Relocation Test // OUT(unknown0166[4]); @@ -1177,7 +1180,10 @@ namespace SoF } // OUT(unknown4184[128]); + OUT_array(mem_spells, spells::SPELL_GEM_COUNT); + eq->mem_spells[9] = 0xFFFFFFFFU; // 10th slot is not valid in this release + // OUT(unknown04396[32]); OUT(platinum); OUT(gold); diff --git a/common/patches/sof_limits.h b/common/patches/sof_limits.h index 399ff8c1a..a03676f2d 100644 --- a/common/patches/sof_limits.h +++ b/common/patches/sof_limits.h @@ -328,7 +328,11 @@ namespace SoF const int SPELL_ID_MAX = 15999; const int SPELLBOOK_SIZE = 480; + // Be careful not to confuse these two..SoF disc release has a special requirement... + // - The number of available spell gems HAS NOT increased from 9 at this point + // - The profile allocation HAS increased to 10 at this point const int SPELL_GEM_COUNT = static_cast(CastingSlot::MaxGems); + const int SPELL_GEM_PROFILE_SIZE = 10; // special case declaration const int LONG_BUFFS = 25; const int SHORT_BUFFS = 15; diff --git a/common/patches/sof_structs.h b/common/patches/sof_structs.h index 93b185e23..4d4a591e1 100644 --- a/common/patches/sof_structs.h +++ b/common/patches/sof_structs.h @@ -885,7 +885,7 @@ struct PlayerProfile_Struct //23576 Octets /*00060*/ BindStruct binds[5]; // Bind points (primary is first) /*00160*/ uint32 deity; // deity /*00164*/ uint32 intoxication; // Alcohol level (in ticks till sober?) -/*00168*/ uint32 spellSlotRefresh[spells::SPELL_GEM_COUNT]; // Refresh time (millis) - 4 Octets Each +/*00168*/ uint32 spellSlotRefresh[spells::SPELL_GEM_PROFILE_SIZE]; // Refresh time (millis) - 4 Octets Each /*00208*/ uint32 abilitySlotRefresh; /*00212*/ uint8 haircolor; // Player hair color /*00213*/ uint8 beardcolor; // Player beard color @@ -912,7 +912,7 @@ struct PlayerProfile_Struct //23576 Octets /*04173*/ uint8 unknown02264[147]; // was [139] /*04312*/ uint32 spell_book[spells::SPELLBOOK_SIZE]; // List of the Spells in spellbook 480 = 60 pages /*06232*/ uint8 unknown4184[128]; // was [136] -/*06396*/ uint32 mem_spells[spells::SPELL_GEM_COUNT]; // List of spells memorized +/*06396*/ uint32 mem_spells[spells::SPELL_GEM_PROFILE_SIZE]; // List of spells memorized /*06436*/ uint8 unknown04396[28]; //#### uint8 unknown04396[32]; in Titanium ####[28] /*06464*/ uint32 platinum; // Platinum Pieces on player /*06468*/ uint32 gold; // Gold Pieces on player @@ -3768,7 +3768,7 @@ struct AnnoyingZoneUnknown_Struct { }; struct LoadSpellSet_Struct { - uint32 spell[spells::SPELL_GEM_COUNT]; + uint32 spell[spells::SPELL_GEM_PROFILE_SIZE]; uint32 unknown; };