1 Commits
4.66 ... 4.67

Author SHA1 Message Date
Jaysyn904
8e2cfc9779 2025/09/21
Tweaked Cerebremancer's featlist.
Epic DFA is 21st lvl not 11th.
Added EffectPetrificationImmune().
Fixed Large monk damage. @nShaken
Fixed expanded monk damage. @nShaken
Fixed Phantom Steed, oops.
Bahamut breath is a Fort save.
Xaniqos school works with Skirmish now..
Gave Drider a female racial appearance.
Tweaked oozemaster Light Fortification TLK entry.
2025-09-21 16:09:09 -04:00
13 changed files with 382 additions and 307 deletions

1
.gitignore vendored
View File

@@ -163,3 +163,4 @@ nwn/nwnprc/trunk/makefile.temp
nwn/nwnprc/trunk/makefile.temp
/Release
/old_backup
*.7z

View File

@@ -72,15 +72,15 @@
68 Epic_Psionic_Focus_9 4865 1 2 0
69 Epic_Psionic_Focus_10 4866 1 2 0
70 Expanded_Knowledge_1 4867 0 2 0
71 Expanded_Knowledge_2 4868 0 2 0
72 Expanded_Knowledge_3 4869 0 2 0
73 Expanded_Knowledge_4 4870 0 2 0
74 Expanded_Knowledge_5 4871 0 2 0
75 Expanded_Knowledge_6 4872 0 2 0
76 Expanded_Knowledge_7 4873 0 2 0
77 Expanded_Knowledge_8 4874 0 2 0
78 Expanded_Knowledge_9 4875 0 2 0
79 Expanded_Knowledge_10 4876 0 2 0
71 Expanded_Knowledge_2 4868 0 0 0
72 Expanded_Knowledge_3 4869 0 0 0
73 Expanded_Knowledge_4 4870 0 0 0
74 Expanded_Knowledge_5 4871 0 0 0
75 Expanded_Knowledge_6 4872 0 0 0
76 Expanded_Knowledge_7 4873 0 0 0
77 Expanded_Knowledge_8 4874 0 0 0
78 Expanded_Knowledge_9 4875 0 0 0
79 Expanded_Knowledge_10 4876 0 0 0
80 Epic_Expanded_Knowledge_1 4877 1 2 0
81 Epic_Expanded_Knowledge_2 4878 1 2 0
82 Epic_Expanded_Knowledge_3 4879 1 2 0
@@ -111,46 +111,46 @@
107 Improved_Manifestation_8 4904 1 2 0
108 Improved_Manifestation_9 4905 1 2 0
109 Improved_Manifestation_10 4906 1 2 0
110 Power_Knowledge_Psion_1 4907 0 2 0
111 Power_Knowledge_Psion_2 4908 0 2 0
112 Power_Knowledge_Psion_3 4909 0 2 0
113 Power_Knowledge_Psion_4 4910 0 2 0
114 Power_Knowledge_Psion_5 4911 0 2 0
115 Power_Knowledge_Psion_6 4912 0 2 0
116 Power_Knowledge_Psion_7 4913 0 2 0
117 Power_Knowledge_Psion_8 4914 0 2 0
118 Power_Knowledge_Psion_9 4915 0 2 0
119 Power_Knowledge_Psion_10 4916 0 2 0
120 Power_Knowledge_PsyWar_1 4917 0 2 0
121 Power_Knowledge_PsyWar_2 4918 0 2 0
122 Power_Knowledge_PsyWar_3 4919 0 2 0
123 Power_Knowledge_PsyWar_4 4920 0 2 0
124 Power_Knowledge_PsyWar_5 4921 0 2 0
125 Power_Knowledge_PsyWar_6 4922 0 2 0
126 Power_Knowledge_PsyWar_7 4923 0 2 0
127 Power_Knowledge_PsyWar_8 4924 0 2 0
128 Power_Knowledge_PsyWar_9 4925 0 2 0
129 Power_Knowledge_PsyWar_10 4926 0 2 0
130 Power_Knowledge_Wilder_1 4927 0 2 0
131 Power_Knowledge_Wilder_2 4928 0 2 0
132 Power_Knowledge_Wilder_3 4929 0 2 0
133 Power_Knowledge_Wilder_4 4930 0 2 0
134 Power_Knowledge_Wilder_5 4931 0 2 0
135 Power_Knowledge_Wilder_6 4932 0 2 0
136 Power_Knowledge_Wilder_7 4933 0 2 0
137 Power_Knowledge_Wilder_8 4934 0 2 0
138 Power_Knowledge_Wilder_9 4935 0 2 0
139 Power_Knowledge_Wilder_10 4936 0 2 0
140 Power_Knowledge_FistOfZuoken_1 4945 0 2 0
141 Power_Knowledge_FistOfZuoken_2 4946 0 2 0
142 Power_Knowledge_FistOfZuoken_3 4947 0 2 0
143 Power_Knowledge_FistOfZuoken_4 4948 0 2 0
144 Power_Knowledge_FistOfZuoken_5 4949 0 2 0
145 Power_Knowledge_FistOfZuoken_6 4950 0 2 0
146 Power_Knowledge_FistOfZuoken_7 4951 0 2 0
147 Power_Knowledge_FistOfZuoken_8 4952 0 2 0
148 Power_Knowledge_FistOfZuoken_9 4953 0 2 0
149 Power_Knowledge_FistOfZuoken_10 4954 0 2 0
110 Power_Knowledge_Psion_1 4907 0 0 0
111 Power_Knowledge_Psion_2 4908 0 0 0
112 Power_Knowledge_Psion_3 4909 0 0 0
113 Power_Knowledge_Psion_4 4910 0 0 0
114 Power_Knowledge_Psion_5 4911 0 0 0
115 Power_Knowledge_Psion_6 4912 0 0 0
116 Power_Knowledge_Psion_7 4913 0 0 0
117 Power_Knowledge_Psion_8 4914 0 0 0
118 Power_Knowledge_Psion_9 4915 0 0 0
119 Power_Knowledge_Psion_10 4916 0 0 0
120 Power_Knowledge_PsyWar_1 4917 0 0 0
121 Power_Knowledge_PsyWar_2 4918 0 0 0
122 Power_Knowledge_PsyWar_3 4919 0 0 0
123 Power_Knowledge_PsyWar_4 4920 0 0 0
124 Power_Knowledge_PsyWar_5 4921 0 0 0
125 Power_Knowledge_PsyWar_6 4922 0 0 0
126 Power_Knowledge_PsyWar_7 4923 0 0 0
127 Power_Knowledge_PsyWar_8 4924 0 0 0
128 Power_Knowledge_PsyWar_9 4925 0 0 0
129 Power_Knowledge_PsyWar_10 4926 0 0 0
130 Power_Knowledge_Wilder_1 4927 0 0 0
131 Power_Knowledge_Wilder_2 4928 0 0 0
132 Power_Knowledge_Wilder_3 4929 0 0 0
133 Power_Knowledge_Wilder_4 4930 0 0 0
134 Power_Knowledge_Wilder_5 4931 0 0 0
135 Power_Knowledge_Wilder_6 4932 0 0 0
136 Power_Knowledge_Wilder_7 4933 0 0 0
137 Power_Knowledge_Wilder_8 4934 0 0 0
138 Power_Knowledge_Wilder_9 4935 0 0 0
139 Power_Knowledge_Wilder_10 4936 0 0 0
140 Power_Knowledge_FistOfZuoken_1 4945 0 0 0
141 Power_Knowledge_FistOfZuoken_2 4946 0 0 0
142 Power_Knowledge_FistOfZuoken_3 4947 0 0 0
143 Power_Knowledge_FistOfZuoken_4 4948 0 0 0
144 Power_Knowledge_FistOfZuoken_5 4949 0 0 0
145 Power_Knowledge_FistOfZuoken_6 4950 0 0 0
146 Power_Knowledge_FistOfZuoken_7 4951 0 0 0
147 Power_Knowledge_FistOfZuoken_8 4952 0 0 0
148 Power_Knowledge_FistOfZuoken_9 4953 0 0 0
149 Power_Knowledge_FistOfZuoken_10 4954 0 0 0
150 FEAT_EPIC_ENERGY_RESISTANCE_COLD_1 533 1 2 0
151 FEAT_EPIC_ENERGY_RESISTANCE_COLD_2 534 1 2 0
152 FEAT_EPIC_ENERGY_RESISTANCE_COLD_3 535 1 2 0

View File

@@ -17,7 +17,7 @@
13 FEAT_ADEPT_REDUCTION 3003 3 6 0
14 FEAT_DRAGON_IMMUNE_PARALYSIS 963 3 19 0
15 Fire_Effect 4979 3 1 1
16 EPIC_DRAGONFIRE_ADEPT 25057 3 11 0
16 EPIC_DRAGONFIRE_ADEPT 25057 3 21 0
17 Frost_Cone 4980 2 2 1
18 Electric_Line 4981 2 2 1
19 Sickening_Cone 4982 2 2 1

View File

@@ -185,6 +185,7 @@ int GetIsShaken(object oTarget);
//////////////////////////////////////////////////
#include "prc_inc_castlvl" // get prc_racial_const, prc_inc_nwscript, prc_inc_newip
#include "inc_epicspelldef"
//////////////////////////////////////////////////
/* Internal functions */
@@ -746,7 +747,6 @@ effect EffectImmunityMiscAll()
//:: Immunity to all gaze attacks
effect EffectGazeImmune()
{
effect eBlank;
effect eReturn = EffectSpellImmunity(SPELLABILITY_GAZE_CHARM);
eReturn = EffectSpellImmunity(SPELLABILITY_GAZE_CONFUSION);
@@ -768,6 +768,23 @@ effect EffectGazeImmune()
return eReturn;
}
//:: Immunity to all perification attacks
effect EffectPetrificationImmune()
{
effect eReturn = EffectSpellImmunity(SPELLABILITY_TOUCH_PETRIFY);
eReturn = EffectSpellImmunity(SPELLABILITY_BREATH_PETRIFY);
eReturn = EffectSpellImmunity(SPELL_FLESH_TO_STONE);
eReturn = EffectSpellImmunity(SPELL_STONEHOLD);
eReturn = EffectSpellImmunity(SPELL_EPIC_A_STONE);
eReturn = EffectSpellImmunity(POWER_CRYSTALLIZE);
eReturn = EffectSpellImmunity(MELD_BASILISK_MASK);
eReturn = EffectSpellImmunity(SPELLABILITY_GAZE_PETRIFY);
eReturn = TagEffect(eReturn, "PRCPetrificationImmune");
return eReturn;
}
int GetIsShaken(object oTarget)
{
effect eEffect = GetFirstEffect(oTarget);

View File

@@ -308,7 +308,7 @@ int FindUnarmedDamage(object oCreature)
if (GetHasFeat(FEAT_INCREASE_DAMAGE2, oCreature)) iDieIncrease = 2;
else if (GetHasFeat(FEAT_INCREASE_DAMAGE1, oCreature)) iDieIncrease = 1;
//:: Expansion / Compression powers
/* //:: Expansion / Compression powers (Double dipping?)
int nExpansion = GetLocalInt(oCreature, "PRC_Power_Expansion_SizeIncrease");
int nCompression = GetLocalInt(oCreature, "PRC_Power_Compression_SizeReduction");
@@ -320,7 +320,7 @@ int FindUnarmedDamage(object oCreature)
if (nCompression)
{
iSize -= nCompression;
}
} */
iMonkDamage += iDieIncrease;
iShouDamage += iDieIncrease;

View File

@@ -2736,6 +2736,47 @@ object HorseSummonPaladinMount(int bPHBDuration=FALSE)
return oMount;
} // HorseSummonPaladinMount()
object HorseSummonPhantomSteed(int nCasterLvl, int nDuration)
{ // PURPOSE: Summon Phantom Steed
object oSummoner=OBJECT_SELF;
object oMount;
location lLoc;
int nDespawnTime;
int nCurrentTime;
int nMountNum=1;
string sResRef=HORSE_PALADIN_PREFIX;
effect eVFX;
oMount=HorseGetPaladinMount(oSummoner);
if (!GetIsObjectValid(oMount) && GetObjectType(oSummoner) == OBJECT_TYPE_CREATURE)
{ // okay to summon - only one mount at a time
if ((GetIsPC(oSummoner) || GetIsDM(oSummoner))&&!GetHasFeat(FEAT_HORSE_MENU,oSummoner)) HorseAddHorseMenu(oSummoner);
if (nCasterLvl < 11) nMountNum = 2;
else if (nCasterLvl > 10 && nCasterLvl < 15) nMountNum = 3;
else if (nCasterLvl > 14 && nCasterLvl < 25) nMountNum = 4;
else if (nCasterLvl > 24 && nCasterLvl < 30) nMountNum = 5;
else if (nCasterLvl > 29 && nCasterLvl < 35) nMountNum = 6;
else if (nCasterLvl > 34 && nCasterLvl < 40) nMountNum = 7;
else if (nCasterLvl > 39) nMountNum = 8;
lLoc=HORSE_SupportGetMountLocation(oSummoner,oSummoner);
oMount=HorseCreateHorse(sResRef+IntToString(nMountNum),lLoc,oSummoner);
if (!GetIsObjectValid(oMount)) oMount=HorseCreateHorse(sResRef+IntToString(nMountNum),GetLocation(oSummoner),oSummoner);
if (GetIsObjectValid(oMount))
{ // oMount created
eVFX=EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eVFX,oMount,3.0);
eVFX=EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_2);
if (nMountNum>3) eVFX=EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_3);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT,eVFX,GetLocation(oMount));
nCurrentTime=HORSE_SupportAbsoluteMinute();
nDespawnTime=(nDuration*60)+nCurrentTime;
SetLocalInt(oSummoner,"nX3_PALADIN_UNSUMMON",nDespawnTime);
if (GetLocalInt(GetModule(),"X3_ENABLE_MOUNT_DB")&&GetIsPC(oSummoner)) SetLocalInt(oSummoner,"bX3_STORE_MOUNT_INFO",TRUE);
SetLocalObject(oSummoner,"oX3PaladinMount",oMount);
} // oMount created
} // okay to summon - only one paladin mount at a time
else { oMount=OBJECT_INVALID; }
return oMount;
} // HorseSummonPaladinMount()
void HorseUnsummonPaladinMount()
{ // PURPOSE: Unsummon Paladin Mount

View File

@@ -131,7 +131,7 @@ void main()
case BREATH_BAHAMUT_LINE:
//evil characters can't use this breath
if(nAlignment == ALIGNMENT_EVIL) return;
BaseBreath = CreateBreath(oPC, TRUE, fRange * 2, DAMAGE_TYPE_MAGICAL, 6, nDice * 2, ABILITY_CONSTITUTION, nSaveDCBonus, BREATH_NORMAL, 0);
BaseBreath = CreateBreath(oPC, TRUE, fRange * 2, DAMAGE_TYPE_MAGICAL, 6, nDice * 2, ABILITY_CONSTITUTION, nSaveDCBonus, BREATH_NORMAL, 0, SAVING_THROW_FORT);
ApplyBreath(BaseBreath, lTarget);
if(nAlignment == ALIGNMENT_GOOD) ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nClass * 2, DAMAGE_TYPE_POSITIVE, DAMAGE_POWER_ENERGY), oPC);
if(nAlignment == ALIGNMENT_NEUTRAL) ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nClass * 4, DAMAGE_TYPE_POSITIVE, DAMAGE_POWER_ENERGY), oPC);

View File

@@ -270,15 +270,15 @@ void InlindlSchool(object oInitiator)
void XaniqosSchool(object oInitiator, object oTarget, object oItem, int nEvent)
{
int nType = GetBaseItemType(oItem);
if(nEvent == EVENT_ITEM_ONHIT)
/* if(nEvent == EVENT_ITEM_ONHIT) //:: handled in prc_onhitcast becuase it wasn't stacking w/ Skirmish
{
if(GetLocalInt(oInitiator, "XaniqosSchool") && IPGetIsProjectile(oItem)) // oItem is the ammo, since it's only applies to crossbows
{
effect eDam = EffectDamage(d6(), DAMAGE_TYPE_PIERCING);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
}
}
else if(nEvent == EVENT_ONPLAYEREQUIPITEM)
} */
if(nEvent == EVENT_ONPLAYEREQUIPITEM)
{
if (nType == BASE_ITEM_LIGHTCROSSBOW || nType == BASE_ITEM_HEAVYCROSSBOW)
{
@@ -369,7 +369,7 @@ void CrossbowSniper(object oInitiator, object oItem, int nEvent)
(nType == BASE_ITEM_HEAVYCROSSBOW && GetHasFeat(FEAT_WEAPON_FOCUS_HEAVY_CROSSBOW, oInitiator)))
{
object oAmmo = GetItemInSlot(INVENTORY_SLOT_BOLTS, oInitiator);
IPSafeAddItemProperty(oAmmo, ItemPropertyDamageBonus(DAMAGE_TYPE_PIERCING, nDex/2), 99999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
IPSafeAddItemProperty(oAmmo, ItemPropertyDamageBonus(DAMAGE_TYPE_PIERCING, IPDamageConstant(nDex/2)), 99999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
}
}
else if(nEvent == EVENT_ONPLAYERUNEQUIPITEM)
@@ -378,7 +378,7 @@ void CrossbowSniper(object oInitiator, object oItem, int nEvent)
(nType == BASE_ITEM_HEAVYCROSSBOW && GetHasFeat(FEAT_WEAPON_FOCUS_HEAVY_CROSSBOW, oInitiator)))
{
object oAmmo = GetItemInSlot(INVENTORY_SLOT_BOLTS, oInitiator);
RemoveSpecificProperty(oAmmo, ITEM_PROPERTY_DAMAGE_BONUS, DAMAGE_TYPE_PIERCING, nDex/2, 1, "", -1, DURATION_TYPE_TEMPORARY);
RemoveSpecificProperty(oAmmo, ITEM_PROPERTY_DAMAGE_BONUS, DAMAGE_TYPE_PIERCING, IPDamageConstant(nDex/2), 1, "", -1, DURATION_TYPE_TEMPORARY);
}
}
}

View File

@@ -51,7 +51,7 @@
47 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
48 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
49 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
50 Drider 406 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
50 Drider 406 **** **** **** **** 3063 **** **** **** **** **** **** **** **** **** ****
51 Wemic 97 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
52 Plant **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****
53 Brownie 55 **** **** **** **** **** **** **** **** **** **** **** **** **** **** ****

View File

@@ -229,6 +229,20 @@ void main()
}
}
// Xaniqos School
if (iItemBaseType == BASE_ITEM_BOLT && GetLocalInt(oSpellOrigin, "XaniqosSchool") > 0)
{
effect eDam = EffectDamage(d6(), DAMAGE_TYPE_PIERCING);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oSpellTarget);
/* // Prevents the heartbeat script from running multiple times
if(GetLocalInt(oSpellOrigin, "ImpRicochetVarRunning") != 1)
{
DelayCommand(6.0, SetImprovedRicochetVar(oSpellOrigin) );
SetLocalInt(oSpellOrigin, "ImpRicochetVarRunning", 1);
} */
}
// Warchief Devoted Bodyguards
if(iItemBaseType == BASE_ITEM_ARMOR && GetLevelByClass(CLASS_TYPE_WARCHIEF, oSpellOrigin) > 7)
{
@@ -451,6 +465,7 @@ void main()
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVFX, oSpellTarget);
}
}
/* if (GetHasSpellEffect(MOVE_TC_BLOOD_WATER, oSpellOrigin) && GetBaseItemType(oItem) != BASE_ITEM_ARMOR)
{
// Fake critical hit check

View File

@@ -5257,7 +5257,8 @@ REQUIREMENTS:
Race: Living Elf.
Skills: Concentration 5, Spellcraft 14.
Class : 11 levels in Sorcerer, Wizard, or Cleric
Spellcasting: Able to cast 6th level arcane or divine spells.
Feat: Craft Wonderous Item.
Alignment: Any Good
CLASS FEATURES:
@@ -16506,7 +16507,7 @@ Levels
5: Major Oozy Touch
6: Charisma Penalty -3
Oozy Glob - Can use three times per day.
Indiscernible Anatomy - Immunity to critical hits and sneak attacks.
Indiscernible Anatomy - The oozemaster gains Light Fortification.
7: Major Oozy Touch - Can choose a major ooze for a touch attack or another minor ooze.
8: Charisma Penalty -4
Oozy Glob - Can use four times a day.