Skip to content

Commit

Permalink
Build 1.0.0.169
Browse files Browse the repository at this point in the history
Fix: The "Esoterica" augment now correctly states the set bonus grants +3 Artifact bonus, not +4 (Reported by TandyFW)
Fix: Item "Legendary Boots of the Mire" now correctly gives its MRR bonus (Reported by TandyFW)
Fix: The "Past Life: Divine Sphere: Power Over Life and Death" past life stance no longer erroneously awards Poison spell power (Reported by Remmer75)
Fix: "Eldritch Knight: Imbue the Blade" will now correctly add an implement bonus to weapons for spellcasting (Reported by christhemisss)
Fix: Cleric Death Domain tiers 2 and 4 feats now have the correct icon
New: Requirements objects now support multiple "RequiresOneOf" sub clauses (Required for U56)
---Relevant tooltips will now show a line for every RequiresOneOf item
New: Enhancement selection items now support an optional MinSpent field for selection validity (Required for U56 Divine Disciple)
---Relevant tooltips will now show the correct MinSpent field as required
---Enhancement tree revoke now takes the selected items optional MinSpent into account
---Enhancement tree revoke now takes the selected items sub enhancement requirements into account (PITA to get working!)
New: Enhancement tree items will now only show as trainable for items with selectors if at least one selector item is trainable
New: Lamannia mode is now enabled again
---Completionist feat updated to not be selectable in Lamannia mode
---"Completionist U56" feat added and auto assigned at level 3 in Lamannia mode. Also will assign with either of the Bard/Cleric or Paladin past lives
Fix: Cleric "Radiant Servant: Radiance" no longer erroneous requires "Radiant Servant: Incredible Healing"

U56 Lamannia Changes:
---All Racial Tree "Great Weapon Aptitude" enhancements now also have "Natural Fighting" as a one of requirement
---Archetype sub classes added
------Stormsinger (Bard)
------Dark Apostate (Cleric)
------Sacred Fist (Paladin)
---Class selection will restrict between Default and Archetypes of each given class type as appropriate
---All Abishai set bonueses are now profane not artifact
---New spell "True Seeing, Mass" added (Clr 8/Fvs 8)
---New spell "Freedom of Movement, Mass" added (clr 7/ Fvs 7/ Drd 7)
---"Nature's Warrior: Howl of Winter" Winters Hunt effect values updated
---New past life feat "Past Life: Paladin (Sacred Fist)" added
---New past life feat "Past Life: Cleric (Dark Apostate)" added
---New past life feat "Past Life: Bard (Stormsinger)" added
---Bard, Cleric and Paladin active past lives updated to accept either past life as a prerequisite

Stormsinger
---All Bard feats updated to apply to Stormsinger
---Tree "Spellsinger" is available to "Stormsinger"
---Tree "Warchanter" is available to "Stormsinger"
---New tree "Stormsinger" added (Currently empty)
---New spells added to spell list: Shocking grasp(1), Electric Loop(2), Lightning Bolt(3), Ball Lightning(4), Chain Lightning(5), Thunderstroke(6)

Dark Apostate
---All Cleric feats updated to apply to Dark Apostate
---New tree "Dark Apostate" added (Missing effects)
---Tree "Warpriest" is available to "Dark Apostate"
---Tree "Divine Disciple (Lamannia)" is available to "Dark Apostate" (only in Lamannia mode)
---Auto learns the Inflict series of spells rather than the cures

Sacred Fist
---New feat "Follower of the Path of Light" added
---All feats that used to apply to "Paladin" now also apply to "Sacred Fist" except:
------Martial weapon Proficiencies
------Light, Medium and Heavy Armor Proficiencies
------Shield Proficiency (General)
---Unarmed strike now awareded at Sacred Fist levels 1, 4, 8, 12, 16 and 20
---Gain Feat "Evasion" at level 2
---Feat "AC Bonus: Charisma" added
---Tree "Sacred Defender" is available to "Sacred Fist"
---New tree "Sacred Fist" added (Missing effects)
---New tree "Radiant Servant (Pal)" added (Missing some effects)
  • Loading branch information
Maetrim committed Aug 12, 2022
1 parent b1bf653 commit 8527ace
Show file tree
Hide file tree
Showing 138 changed files with 26,395 additions and 10,104 deletions.
2 changes: 1 addition & 1 deletion BuildInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
#define BUILDINFO_VERSION_MAJOR 1
#define BUILDINFO_VERSION_MINOR 0
#define BUILDINFO_VERSION_MODIF 0
#define BUILDINFO_VERSION_BUILD 168
#define BUILDINFO_VERSION_BUILD 169

// Macro used to make combination strings automatically from the above
// -------------------------------------------------------------------
Expand Down
2 changes: 2 additions & 0 deletions DDOCP/AboutDlg.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ void CAboutDlg::DoDataExchange(CDataExchange* pDX)
"Carpone, "
"CBDunkerson, "
"Chaos-Magus, "
"christhemisss, "
"Cinnamoronroll, "
"Civet, "
"Cleru, "
Expand Down Expand Up @@ -156,6 +157,7 @@ void CAboutDlg::DoDataExchange(CDataExchange* pDX)
"Question2, "
"Rauven, "
"Rawel, "
"Remmer75, "
"RetroDark, "
"rnett, "
"saphyron, "
Expand Down
2 changes: 1 addition & 1 deletion DDOCP/BreakdownItemSave.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ void BreakdownItemSave::CreateOtherEffects()
// Divine Grace is capped at 2+(3 x paladin level).
// For multiclassing, this means 2 levels of Paladin would at best
// grant a max of +8 to saves (2 + {3x2}).
int maxBonus = (classLevels[Class_Paladin] * 3) + 2;
int maxBonus = ((classLevels[Class_Paladin] + classLevels[Class_PaladinSacredFist])* 3) + 2;
BreakdownItem * pBI = FindBreakdown(StatToBreakdown(Ability_Charisma));
ASSERT(pBI != NULL);
pBI->AttachObserver(this); // watch for any changes
Expand Down
31 changes: 31 additions & 0 deletions DDOCP/BreakdownItemUniversalSpellPower.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,37 @@ void BreakdownItemUniversalSpellPower::CreateOtherEffects()
}
}
}
if (m_pCharacter->IsEnhancementTrained("EKWizCore3", "", TT_enhancement)
|| m_pCharacter->IsEnhancementTrained("EKSorcCore3", "", TT_enhancement))
{
// get the main hand weapon breakdown
BreakdownItem * pBI = FindBreakdown(Breakdown_WeaponEffectHolder);
BreakdownItemWeaponEffects * pBIW = dynamic_cast<BreakdownItemWeaponEffects*>(pBI);
if (pBIW != NULL)
{
pBI = pBIW->GetWeaponBreakdown(true, Breakdown_WeaponAttackBonus);
if (pBI != NULL)
{
int weaponPlus = (int)pBI->GetEffectValue(Bonus_weaponEnchantment);
// this is increased by battle engineer cores by +3
weaponPlus += 3;

// Enchant weapon past life feat can be active
size_t count = m_pCharacter->GetSpecialFeatTrainedCount("Past Life: Arcane Sphere: Enchant Weapon");
if (m_pCharacter->IsStanceActive("Enchant Weapon", Weapon_Unknown))
{
weaponPlus += count;
}
ActiveEffect implementBonus(
Bonus_implement,
"Eldritch Knight: Imbue the Blade",
weaponPlus,
3, // +3 per weapon plus
""); // no tree
AddOtherEffect(implementBonus);
}
}
}
}
}

Expand Down
62 changes: 62 additions & 0 deletions DDOCP/Change History.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,67 @@
History of changes made

Fix: The "Esoterica" augment now correctly states the set bonus grants +3 Artifact bonus, not +4 (Reported by TandyFW)
Fix: Item "Legendary Boots of the Mire" now correctly gives its MRR bonus (Reported by TandyFW)
Fix: The "Past Life: Divine Sphere: Power Over Life and Death" past life stance no longer erroneously awards Poison spell power (Reported by Remmer75)
Fix: "Eldritch Knight: Imbue the Blade" will now correctly add an implement bonus to weapons for spellcasting (Reported by christhemisss)
Fix: Cleric Death Domain tiers 2 and 4 feats now have the correct icon
New: Requirements objects now support multiple "RequiresOneOf" sub clauses (Required for U56)
---Relevant tooltips will now show a line for every RequiresOneOf item
New: Enhancement selection items now support an optional MinSpent field for selection validity (Required for U56 Divine Disciple)
---Relevant tooltips will now show the correct MinSpent field as required
---Enhancement tree revoke now takes the selected items optional MinSpent into account
---Enhancement tree revoke now takes the selected items sub enhancement requirements into account (PITA to get working!)
New: Enhancement tree items will now only show as trainable for items with selectors if at least one selector item is trainable
New: Lamannia mode is now enabled again
---Completionist feat updated to not be selectable in Lamannia mode
---"Completionist U56" feat added and auto assigned at level 3 in Lamannia mode. Also will assign with either of the Bard/Cleric or Paladin past lives
Fix: Cleric "Radiant Servant: Radiance" no longer erroneous requires "Radiant Servant: Incredible Healing"

U56 Lamannia Changes:
---All Racial Tree "Great Weapon Aptitude" enhancements now also have "Natural Fighting" as a one of requirement
---Archetype sub classes added
------Stormsinger (Bard)
------Dark Apostate (Cleric)
------Sacred Fist (Paladin)
---Class selection will restrict between Default and Archetypes of each given class type as appropriate
---All Abishai set bonueses are now profane not artifact
---New spell "True Seeing, Mass" added (Clr 8/Fvs 8)
---New spell "Freedom of Movement, Mass" added (clr 7/ Fvs 7/ Drd 7)
---"Nature's Warrior: Howl of Winter" Winters Hunt effect values updated
---New past life feat "Past Life: Paladin (Sacred Fist)" added
---New past life feat "Past Life: Cleric (Dark Apostate)" added
---New past life feat "Past Life: Bard (Stormsinger)" added
---Bard, Cleric and Paladin active past lives updated to accept either past life as a prerequisite

Stormsinger
---All Bard feats updated to apply to Stormsinger
---Tree "Spellsinger" is available to "Stormsinger"
---Tree "Warchanter" is available to "Stormsinger"
---New tree "Stormsinger" added (Currently empty)
---New spells added to spell list: Shocking grasp(1), Electric Loop(2), Lightning Bolt(3), Ball Lightning(4), Chain Lightning(5), Thunderstroke(6)

Dark Apostate
---All Cleric feats updated to apply to Dark Apostate
---New tree "Dark Apostate" added (Missing effects)
---Tree "Warpriest" is available to "Dark Apostate"
---Tree "Divine Disciple (Lamannia)" is available to "Dark Apostate" (only in Lamannia mode)
---Auto learns the Inflict series of spells rather than the cures

Sacred Fist
---New feat "Follower of the Path of Light" added
---All feats that used to apply to "Paladin" now also apply to "Sacred Fist" except:
------Martial weapon Proficiencies
------Light, Medium and Heavy Armor Proficiencies
------Shield Proficiency (General)
---Unarmed strike now awareded at Sacred Fist levels 1, 4, 8, 12, 16 and 20
---Gain Feat "Evasion" at level 2
---Feat "AC Bonus: Charisma" added
---Tree "Sacred Defender" is available to "Sacred Fist"
---New tree "Sacred Fist" added (Missing effects)
---New tree "Radiant Servant (Pal)" added (Missing some effects)

Version 1.0.0.168

Fix: "Spell Specialty: <School>" Feats now have an image
Fix: "Wild Force" Feat now has an image
Fix: "Legendary Point Blank Shot" feat removed as never made it from Lamannia
Expand Down
74 changes: 71 additions & 3 deletions DDOCP/Character.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2136,6 +2136,24 @@ bool Character::IsClassAvailable(
return bAvailable;
}

bool Character::IsClassRestricted(
ClassType type) const
{
bool bRestricted = false;
// archetype/default classes of the same type are mutually exclusive
std::vector<size_t> classLevels(ClassLevels(MaxLevel()));
switch (type)
{
case Class_Bard: bRestricted = (classLevels[Class_BardStormsinger] != 0); break;
case Class_BardStormsinger: bRestricted = (classLevels[Class_Bard] != 0); break;
case Class_Cleric: bRestricted = (classLevels[Class_ClericDarkApostate] != 0); break;
case Class_ClericDarkApostate: bRestricted = (classLevels[Class_Cleric] != 0); break;
case Class_Paladin: bRestricted = (classLevels[Class_PaladinSacredFist] != 0); break;
case Class_PaladinSacredFist: bRestricted = (classLevels[Class_Paladin] != 0); break;
}
return bRestricted;
}

size_t Character::SpentAtLevel(
SkillType skill,
size_t level) const
Expand Down Expand Up @@ -2352,6 +2370,37 @@ std::vector<TrainableFeatTypes> Character::TrainableFeatTypeAtLevel(
}
break;

case Class_ClericDarkApostate:
// clerics get a Follower of (faith) selection at level 1
// domain selection at level 2
// domain feats at 5, 9 and 14
// and a deity feat at level 6
if (classLevels[Class_ClericDarkApostate] == 1)
{
if (NotPresentInEarlierLevel(level, TFT_FollowerOf))
{
trainable.push_back(TFT_FollowerOf);
}
}
if (classLevels[Class_ClericDarkApostate] == 2)
{
trainable.push_back(TFT_Domain);
}
if (classLevels[Class_ClericDarkApostate] == 5
|| classLevels[Class_ClericDarkApostate] == 9
|| classLevels[Class_ClericDarkApostate] == 14)
{
trainable.push_back(TFT_DomainFeat);
}
if (classLevels[Class_ClericDarkApostate] == 6)
{
if (NotPresentInEarlierLevel(level, TFT_Deity))
{
trainable.push_back(TFT_Deity);
}
}
break;

case Class_Druid:
// druids can select a wild shape at levels 2 and 5, 8, 11, 13, 17
if (classLevels[Class_Druid] == 2
Expand Down Expand Up @@ -2507,6 +2556,25 @@ std::vector<TrainableFeatTypes> Character::TrainableFeatTypeAtLevel(
}
break;

case Class_PaladinSacredFist:
// paladins gain a follower of feat at level 1
// and a deity feat at level 6
if (classLevels[Class_PaladinSacredFist] == 1)
{
if (NotPresentInEarlierLevel(level, TFT_FollowerOf))
{
trainable.push_back(TFT_FollowerOf);
}
}
if (classLevels[Class_PaladinSacredFist] == 6)
{
if (NotPresentInEarlierLevel(level, TFT_Deity))
{
trainable.push_back(TFT_Deity);
}
}
break;

case Class_Ranger:
// rangers gain a favored enemy feat at levels 1, 5, 10, 15 and 20
if (classLevels[Class_Ranger] == 1
Expand Down Expand Up @@ -3000,7 +3068,7 @@ void Character::Enhancement_TrainEnhancement(
enhancementName,
selection,
cost,
pTreeItem->MinSpent(),
pTreeItem->MinSpent(selection),
pTreeItem->HasTier5(),
&ranks);
if (eTree.HasIsRacialTree())
Expand Down Expand Up @@ -4133,7 +4201,7 @@ void Character::Reaper_TrainEnhancement(
enhancementName,
selection,
cost,
pTreeItem->MinSpent(),
pTreeItem->MinSpent(selection),
pTreeItem->HasTier5(),
&ranks);
// now notify all and sundry about the enhancement effects
Expand Down Expand Up @@ -6575,7 +6643,7 @@ void Character::U51Destiny_TrainEnhancement(
enhancementName,
selection,
cost,
pTreeItem->MinSpent(),
pTreeItem->MinSpent(selection),
false,
&ranks);
m_destinyTreeSpend += spent;
Expand Down
1 change: 1 addition & 0 deletions DDOCP/Character.h
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ class Character :

// class selection
bool IsClassAvailable(ClassType type) const;
bool IsClassRestricted(ClassType type) const;
void SetClass1(size_t level, ClassType type);
void SetClass2(size_t level, ClassType type);
void SetClass3(size_t level, ClassType type);
Expand Down
6 changes: 6 additions & 0 deletions DDOCP/ClassTypes.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,17 @@ enum ClassType
Class_Artificer,
Class_Barbarian,
Class_Bard,
Class_BardStormsinger,
Class_Cleric,
Class_ClericDarkApostate,
Class_Druid,
Class_Epic,
Class_FavoredSoul,
Class_Fighter,
Class_Legendary,
Class_Monk,
Class_Paladin,
Class_PaladinSacredFist,
Class_Ranger,
Class_Rogue,
Class_Sorcerer,
Expand All @@ -38,14 +41,17 @@ const XmlLib::enumMapEntry<ClassType> classTypeMap[] =
{Class_Artificer, L"Artificer"},
{Class_Barbarian, L"Barbarian"},
{Class_Bard, L"Bard"},
{Class_BardStormsinger, L"Stormsinger"},
{Class_Cleric, L"Cleric"},
{Class_ClericDarkApostate, L"Dark Apostate"},
{Class_Druid, L"Druid"},
{Class_Epic, L"Epic"},
{Class_FavoredSoul, L"Favored Soul"},
{Class_Fighter, L"Fighter"},
{Class_Legendary, L"Legendary"},
{Class_Monk, L"Monk"},
{Class_Paladin, L"Paladin"},
{Class_PaladinSacredFist, L"Sacred Fist"},
{Class_Ranger, L"Ranger"},
{Class_Rogue, L"Rogue"},
{Class_Sorcerer, L"Sorcerer"},
Expand Down
Binary file modified DDOCP/DDOCP.APS
Binary file not shown.
Binary file modified DDOCP/DDOCP.rc
Binary file not shown.
5 changes: 5 additions & 0 deletions DDOCP/DDOCP.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,9 @@
<None Include="..\Output\EnhancementTrees\Cleric_DivineDisciple.xml">
<SubType>Designer</SubType>
</None>
<None Include="..\Output\EnhancementTrees\Cleric_DivineDiscipleLamannia.xml">
<SubType>Designer</SubType>
</None>
<None Include="..\Output\EnhancementTrees\Cleric_RadiantServant.xml">
<SubType>Designer</SubType>
</None>
Expand Down Expand Up @@ -235,7 +238,9 @@
<None Include="..\Output\EnhancementTrees\Paladin_KnightOfTheChalice.xml">
<SubType>Designer</SubType>
</None>
<None Include="..\Output\EnhancementTrees\Paladin_RadiantServant.xml" />
<None Include="..\Output\EnhancementTrees\Paladin_SacredDefender.xml" />
<None Include="..\Output\EnhancementTrees\Paladin_SacredFist.xml" />
<None Include="..\Output\EnhancementTrees\PurpleDragonKnight.xml" />
<None Include="..\Output\EnhancementTrees\Ranger_ArcaneArcher.xml">
<SubType>Designer</SubType>
Expand Down
9 changes: 9 additions & 0 deletions DDOCP/DDOCP.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -10572,6 +10572,15 @@
<None Include="..\Output\Items\LargeShield_DinosaurBone.item">
<Filter>Items\Shields\Large</Filter>
</None>
<None Include="..\Output\EnhancementTrees\Paladin_SacredFist.xml">
<Filter>Data Files\EnhancementTrees\Class</Filter>
</None>
<None Include="..\Output\EnhancementTrees\Paladin_RadiantServant.xml">
<Filter>Data Files\EnhancementTrees\Class</Filter>
</None>
<None Include="..\Output\EnhancementTrees\Cleric_DivineDiscipleLamannia.xml">
<Filter>Data Files\EnhancementTrees\Class</Filter>
</None>
</ItemGroup>
<ItemGroup>
<ClInclude Include="DDOCP.h">
Expand Down
2 changes: 1 addition & 1 deletion DDOCP/DDOCPView.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1086,7 +1086,7 @@ void CDDOCPView::OnLamanniaPreview()

void CDDOCPView::OnUpdateLamanniaPreview(CCmdUI * pCmdUi)
{
pCmdUi->Enable(FALSE);
pCmdUi->Enable(TRUE);
pCmdUi->SetCheck(m_pCharacter->HasLamanniaMode());
}

Expand Down
1 change: 1 addition & 0 deletions DDOCP/EnhancementSelection.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ class EnhancementSelection :
DL_STRING(_, Icon) \
DL_VECTOR(_, size_t, CostPerRank) \
DL_FLAG(_, Clickie) \
DL_OPTIONAL_SIMPLE(_, size_t, MinSpent, 0) \
DL_OPTIONAL_OBJECT(_, Requirements, RequirementsToTrain) \
DL_OBJECT_LIST(_, Stance, Stances) \
DL_OBJECT_LIST(_, Effect, Effects) \
Expand Down
Loading

0 comments on commit 8527ace

Please sign in to comment.