2025/05/14 Update

Expanded Peerless Archer for epic progression.
Tweaked Acolyte of the Ego bonus feat progression.
Tweaked onLevelUp prereq script.
Brownies are Tiny creatures.
This commit is contained in:
Jaysyn904
2025-05-14 18:41:46 -04:00
parent 147cb0ed21
commit 47f3f1dbe0
10 changed files with 325 additions and 123 deletions

View File

@@ -20,6 +20,8 @@
#include "inc_epicspells"
#include "prc_inc_shifting"
int CheckInvokerAbilityFocus(object oPC = OBJECT_SELF);
// Prevents a Man at Arms from taking improved critical
// in a weapon that he does not have focus in.
int ManAtArmsFeats();
@@ -95,7 +97,7 @@ int _GetSizeForPrereq(object oPC)
// BEGIN FUNCTIONS
// ---------------
int CheckInvokerAbilityFocus(object oPC)
int CheckInvokerAbilityFocus(object oPC = OBJECT_SELF)
{
if (GetHasFeat(FEAT_ABFOC_ELDRITCH_BLAST, oPC) && !GetHasInvocation(INVOKE_ELDRITCH_BLAST, oPC)) return TRUE;
if (GetHasFeat(FEAT_ABFOC_ELDRITCH_CHAIN, oPC) && !GetHasInvocation(INVOKE_ELDRITCH_CHAIN, oPC)) return TRUE;
@@ -2006,6 +2008,43 @@ int WarlockFeats()
}*/
int AcolyteEgo()
{
int nLevel = GetLevelByClass(CLASS_TYPE_ACOLYTE_EGO);
if (!nLevel || nLevel > 20) return FALSE;
int nCount = GetHasFeat(FEAT_EGO_BULL)
+ GetHasFeat(FEAT_EGO_IRON)
+ GetHasFeat(FEAT_EGO_HEART)
+ GetHasFeat(FEAT_EGO_SWALLOW)
+ GetHasFeat(FEAT_EGO_WOUND)
+ GetHasFeat(FEAT_EGO_FOOL)
+ GetHasFeat(FEAT_EGO_FORT)
+ GetHasFeat(FEAT_EGO_FRIGHT)
+ GetHasFeat(FEAT_EGO_DRAKE)
+ GetHasFeat(FEAT_EGO_STEP);
int nReturn = FALSE;
if ((nCount > 0 && nLevel < 2) ||
(nCount > 1 && nLevel < 4) ||
(nCount > 2 && nLevel < 6) ||
(nCount > 3 && nLevel < 8) ||
(nCount > 4 && nLevel < 10) ||
(nCount > 5 && nLevel < 12) ||
(nCount > 6 && nLevel < 14) ||
(nCount > 7 && nLevel < 16) ||
(nCount > 8 && nLevel < 18) ||
(nCount > 9 && nLevel < 20) ||
(nCount != 10 && nLevel == 20))
{
FloatingTextStringOnCreature("You do not have the correct amount of Cadences. Please reselect your feats.", OBJECT_SELF, FALSE);
nReturn = TRUE;
}
return nReturn;
}
/* int AcolyteEgo()
{
int nLevel = GetLevelByClass(CLASS_TYPE_ACOLYTE_EGO);
if(!nLevel) return FALSE;
@@ -2036,7 +2075,7 @@ int AcolyteEgo()
return FALSE;
}
*/
int EpicCasting()
{
@@ -2716,6 +2755,7 @@ int ToB()
void main()
{
if(BonusDomains()
|| CheckInvokerAbilityFocus()
|| CasterFeats()
|| CheckClericShadowWeave()
|| CraftingFeats()

View File

@@ -15,6 +15,107 @@
#include "inc_utility"
void main()
{
int nXPCost, nFeatID;
string sArrow;
int nSpell = GetSpellId();
int nBonus = 0;
switch (nSpell)
{
case SPELL_PA_FLETCH_1:
nXPCost = 30;
nFeatID = FEAT_PA_FLETCH_1;
sArrow = "NW_WAMMAR009"; // +1
nBonus = 1;
break;
case SPELL_PA_FLETCH_2:
nXPCost = 80;
nFeatID = FEAT_PA_FLETCH_2;
sArrow = "NW_WAMMAR010"; // +2
nBonus = 2;
break;
case SPELL_PA_FLETCH_3:
nXPCost = 300;
nFeatID = FEAT_PA_FLETCH_3;
sArrow = "NW_WAMMAR011"; // +3
nBonus = 3;
break;
case SPELL_PA_FLETCH_4:
nXPCost = 675;
nFeatID = FEAT_PA_FLETCH_4;
sArrow = "X2_WAMMAR012"; // +4
nBonus = 4;
break;
case SPELL_PA_FLETCH_5:
default:
{
int nLevel = GetLevelByClass(CLASS_TYPE_PEERLESS, OBJECT_SELF);
nBonus = nLevel / 2;
if (nBonus < 5) nBonus = 5;
if (nBonus > 15) nBonus = 15;
sArrow = "X2_WAMMAR013"; // base +5 arrow
switch (nBonus)
{
case 6: nXPCost = 1875; break;
case 7: nXPCost = 2700; break;
case 8: nXPCost = 3675; break;
case 9: nXPCost = 4800; break;
case 10: nXPCost = 6075; break;
case 11: nXPCost = 7500; break;
case 12: nXPCost = 9075; break;
case 13: nXPCost = 10800; break;
case 14: nXPCost = 12675; break;
case 15: nXPCost = 14700; break;
default: nXPCost = 1200; break; // +5
}
nFeatID = FEAT_PA_FLETCH_5;
}
}
int nGoldCost = nXPCost * 10;
if (!GetHasXPToSpend(OBJECT_SELF, nXPCost))
{
FloatingTextStrRefOnCreature(3785, OBJECT_SELF);
IncrementRemainingFeatUses(OBJECT_SELF, nFeatID);
return;
}
if (!GetHasGPToSpend(OBJECT_SELF, nGoldCost))
{
FloatingTextStrRefOnCreature(3785, OBJECT_SELF);
IncrementRemainingFeatUses(OBJECT_SELF, nFeatID);
return;
}
object oArrow = CreateItemOnObject(sArrow, OBJECT_SELF, 99);
SetIdentified(oArrow, TRUE);
// Add extra enhancement bonus if higher than original
if (nBonus > 5)
{
itemproperty ipEnhance = ItemPropertyAttackBonus(nBonus);
AddItemProperty(DURATION_TYPE_PERMANENT, ipEnhance, oArrow);
}
// Rename and retag the arrows
string sTag = "PA_ARROW_PLUS_" + IntToString(nBonus);
string sName = "+" + IntToString(nBonus) + " Peerless Arrows";
SetTag(oArrow, sTag);
SetName(oArrow, sName);
SetStolenFlag(oArrow, TRUE);
SpendXP(OBJECT_SELF, nXPCost);
SpendGP(OBJECT_SELF, nGoldCost);
}
/* void main()
{
int nXPCost, nFeatID;
string sArrow;
@@ -67,4 +168,4 @@ void main()
SetIdentified(CreateItemOnObject(sArrow, OBJECT_SELF, 99), TRUE);
SpendXP(OBJECT_SELF, nXPCost);
SpendGP(OBJECT_SELF, nGoldCost);
}
} */