Added Dynamic Kobolds

Added Dynamic Kobolds.  Fixed ghoul / wight texture.  Added Jann model. Made PnP Zombie, Ghoul, Ghast, Wight & Mohrg creatures.  Full Compile
This commit is contained in:
Jaysyn904
2022-12-15 23:41:10 -05:00
parent f2671cdf85
commit b511431250
1187 changed files with 763989 additions and 30426 deletions

4156
_module/nss/ds_loot.nss Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,16 @@
//::
//:: Ghast_stench
//::
//:: A pnp version of the Ghast's sickening stench.
//::
//:: Modified by: DM Heatstroke 01-20-11
//::
void main()
{
effect eAOE = EffectAreaOfEffect(AOE_MOB_TYRANT_FOG,"ghast_stench1","null","null");
eAOE = SupernaturalEffect(eAOE);
eAOE = ExtraordinaryEffect(eAOE);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eAOE,OBJECT_SELF,HoursToSeconds(100));
}

View File

@@ -0,0 +1,60 @@
//::
//:: Ghast_stench1
//::
//:: A pnp version of the Ghast's sickening stench.
//:: Aura OnEnter script
//::
//:: Modified by: DM Heatstroke 01-20-11
//::
#include "nw_i0_spells"
#include "prc_inc_spells"
void main()
{
object oTarget = GetEnteringObject();
object oCaster = GetAreaOfEffectCreator();
int nLevel = GetHitDice(oCaster);
int nDC = 10 + nLevel / 2 + GetAbilityModifier(ABILITY_CHARISMA,oCaster);
float fDuration = TurnsToSeconds(d6()+4);
string sImmune = "GHAST_IMMUNE";
if ( !GetIsEnemy(oTarget,oCaster) ||
oTarget == oCaster ||
GetIsImmune(oTarget, IMMUNITY_TYPE_POISON) ||
GetLocalInt(oTarget, sImmune) )
return;
//:: Setup Sickening effect
effect eSick1 = EffectAttackDecrease(2);
effect eSick2 = EffectDamageDecrease(2,DAMAGE_TYPE_MAGICAL);
effect eSick3 = EffectSavingThrowDecrease(SAVING_THROW_ALL, 2, SAVING_THROW_TYPE_ALL);
effect eSick4 = EffectSkillDecrease(SKILL_ALL_SKILLS, 2);
//:: Setup visuals
effect eImp = EffectVisualEffect(VFX_IMP_POISON_S);
effect eVis1 = EffectVisualEffect(VFX_DUR_FLIES);
effect eVis2 = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
//:: Setup EffectLink
effect eSick = EffectLinkEffects(eSick1, eSick2);
eSick = EffectLinkEffects(eSick, eSick3);
eSick = EffectLinkEffects(eSick, eSick4);
eSick = EffectLinkEffects(eSick, eVis1);
eSick = EffectLinkEffects(eSick, eVis2);
eSick = ExtraordinaryEffect(eSick);
if ( !PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_POISON, oCaster) )
{
ApplyEffectToObject(DURATION_TYPE_INSTANT, eImp, oTarget);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSick, oTarget, fDuration);
}
else
{
SetLocalInt(oTarget, sImmune, 1);
}
}

View File

@@ -0,0 +1,54 @@
//::
//:: Ghoul_touch
//::
//:: A pnp version of the Ghoul's diseased & paralytic bite.
//::
//:: Modified by: DM Heatstroke 01-19-11
//::
#include "nw_i0_spells"
#include "nw_i0_plot"
#include "prc_inc_spells"
void DoGhoulBite(object oTarget, object oCaster)
{ // Setup disease
effect eVis1 = EffectVisualEffect(VFX_IMP_DISEASE_S);
effect eDisease = EffectDisease(DISEASE_GHOUL_ROT);
eDisease = ExtraordinaryEffect(eDisease);
effect eSick = EffectLinkEffects(eDisease, eVis1);
// Setup paralytic touch
effect eVis2 = EffectVisualEffect(VFX_DUR_PARALYZED);
float fDuration = RoundsToSeconds(d4()+1);
effect eParalyze = EffectParalyze();
eParalyze = ExtraordinaryEffect(eParalyze);
effect eStun = EffectLinkEffects(eParalyze, eVis2);
// Get oCaster's Bite DC
int nCreCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oCaster);
int nCreHD = GetHitDice (oCaster);
int nBiteDC = (10 + (nCreHD/2) + nCreCHAMod);
// Roll a saving throw to resist the paralytic touch
if ( !PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nBiteDC, SAVING_THROW_TYPE_NONE, oCaster) &&
!GetHasFeat(4711, oTarget) && // PRC Elven feat
!GetHasFeat(256, oTarget) ) // Bioware Weapon Prof: Elf
{
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eStun, oTarget, fDuration);
}
// Roll a saving throw to resist the diseased bite
if ( !PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nBiteDC, SAVING_THROW_TYPE_DISEASE, oCaster) )
{
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eSick, oTarget);
}
}
void main()
{
object oTarget = GetSpellTargetObject();
object oCaster = OBJECT_SELF;
DelayCommand(0.1,DoGhoulBite(oTarget,oCaster));
}

View File

@@ -0,0 +1,43 @@
//::
//:: Ghoul_claw
//::
//:: A pnp version of the Ghoul's paralytic claws.
//::
//:: Modified by: DM Heatstroke 01-19-11
//::
#include "nw_i0_spells"
#include "nw_i0_plot"
#include "prc_inc_spells"
void DoGhoulClaw(object oTarget, object oCaster)
{ // Setup paralytic touch
effect eVis = EffectVisualEffect(VFX_DUR_PARALYZED);
float fDuration = RoundsToSeconds(d4()+1);
effect eParalyze = EffectParalyze();
eParalyze = ExtraordinaryEffect(eParalyze);
effect eStun = EffectLinkEffects(eParalyze, eVis);
// Get oCaster's Bite DC
int nCreCHAMod = GetAbilityModifier(ABILITY_CHARISMA, oCaster);
int nCreHD = GetHitDice (oCaster);
int nBiteDC = (10 + (nCreHD/2) + nCreCHAMod);
// Roll a saving throw to resist the paralytic touch
if ( !PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nBiteDC, SAVING_THROW_TYPE_NONE, oCaster) &&
!GetHasFeat(4711, oTarget) && // PRC Elven feat
!GetHasFeat(256, oTarget) ) // Bioware Weapon Prof: Elf
{
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eStun, oTarget, fDuration);
}
}
void main()
{
object oTarget = GetSpellTargetObject();
object oCaster = OBJECT_SELF;
DelayCommand(0.1,DoGhoulClaw(oTarget,oCaster));
}

View File

@@ -0,0 +1,35 @@
//
// NWN Dark Sun Creature Knockdown Fix
// knockdown_fix.nss
//
// By: Jaysyn
//
//void main(){}
#include "inc_item_props"
void KDFix(object oNPC)
{
//:: Declare major variables
int iBAB = GetBaseAttackBonus(OBJECT_SELF);
int iSTRb = GetAbilityModifier(0, OBJECT_SELF);
int iDEXb = GetAbilityModifier(1, OBJECT_SELF);
int iBaseDiscipline = GetSkillRank(SKILL_DISCIPLINE, OBJECT_SELF, TRUE);
int iDiscipline;
effect eSkillBonus;
effect eLink;
iDiscipline = d20(1) + iBAB + iDEXb + iSTRb;
if (iBaseDiscipline <= 0)
{
//:: Apply Discipline Bonus
eSkillBonus = EffectSkillIncrease(SKILL_DISCIPLINE, iDiscipline);
eLink = EffectLinkEffects(eLink, eSkillBonus);
eLink = ExtraordinaryEffect(EffectLinkEffects(eSkillBonus, eLink));
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, OBJECT_SELF);
}
}

View File

@@ -0,0 +1,63 @@
//::
//:: lvl_drain_onhit.nss
//::
//:: Modified by: Jaysyn 20221215
//::
#include "NW_I0_GENERIC"
#include "nw_i0_spells"
#include "nw_i0_plot"
#include "prc_inc_racial"
void DoLevelDrain(object oTarget, object oCaster)
{
// Setup oCaster's healing
effect eDrain = EffectTemporaryHitpoints(5);
eDrain = ExtraordinaryEffect(eDrain);
effect eVis1 = EffectVisualEffect(VFX_IMP_HEALING_L);
// Setup Level Drain
effect eVis2 = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY);
effect eNeg = EffectNegativeLevel(1);
eNeg = SupernaturalEffect(eNeg);
// Drain levels from oTarget
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, oTarget);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eNeg, oTarget, HoursToSeconds(24));
// Apply Temp HP to oCaster
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis1, oCaster);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDrain, oCaster, HoursToSeconds(1));
}
void main()
{
//:: Declare major variables
object oCaster = OBJECT_SELF ; //:: Where the spell came from
object oTarget = GetSpellTargetObject(); //:: What the spell is aimed at
int nRaceType = MyPRCGetRacialType(oTarget);
int nChaMod = GetAbilityModifier(5, oCaster);
int nMobHD = GetHitDice(oCaster);
int nDC = 10 + (nMobHD / 2) + nChaMod;
int nSave = FortitudeSave( oTarget, nDC );
//:: Check for Negative Level Immunity
if ( GetIsImmune(oTarget, IMMUNITY_TYPE_NEGATIVE_LEVEL) )
{
SendMessageToPC(oTarget, "Immune to level drain.");
return;
}
//:: Saving throw
if ( nSave )
return;
//:: if you got this far, you're taking a negative level.
DelayCommand(0.1, DoLevelDrain(oTarget,oCaster));
}

View File

@@ -0,0 +1,55 @@
//::
//:: paralyze_onhit.nss
//::
//:: Modified by: Jaysyn 20221215
//::
#include "NW_I0_GENERIC"
#include "nw_i0_spells"
#include "nw_i0_plot"
#include "prc_inc_racial"
void DoParalyze(object oTarget, object oCaster)
{
//:: Setup Paralysis
effect eVis2 = EffectVisualEffect(VFX_IMP_NIGHTMARE_HEAD_HIT);
effect ePara = EffectParalyze();
ePara = SupernaturalEffect(ePara);
//:: Apply Paralysis
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, oTarget);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ePara, oTarget, TurnsToSeconds(d4()));
}
void main()
{
//:: Declare major variables
object oCaster = OBJECT_SELF ; //:: Where the spell came from
object oTarget = GetSpellTargetObject(); //:: What the spell is aimed at
int nRaceType = MyPRCGetRacialType(oTarget);
int nChaMod = GetAbilityModifier(5, oCaster);
int nMobHD = GetHitDice(oCaster);
int nDC = 10 + (nMobHD / 2) + nChaMod;
int nSave = FortitudeSave( oTarget, nDC );
//:: Check for Paralysis Immunity
if ( GetIsImmune(oTarget, IMMUNITY_TYPE_PARALYSIS) )
{
SendMessageToPC(oTarget, "Immune to paralysis.");
return;
}
//:: Saving throw
if ( nSave )
return;
//:: if you got this far, you're paralyzed.
DelayCommand(0.1, DoParalyze(oTarget, oCaster));
}

View File

@@ -511,6 +511,40 @@ void main()
//:: Execute PRC OnSpawn script.
ExecuteScript("prc_npc_spawn", OBJECT_SELF);
//:: activate various custom auras.
int nAtropal = GetTag(OBJECT_SELF)=="ATROPAL001" ? TRUE : FALSE;
if(nAtropal)ExecuteScript("atropal_aura",OBJECT_SELF);
int nCryptChanter = GetTag(OBJECT_SELF)=="CRYPTCHANTER001" ? TRUE : FALSE;
if(nCryptChanter)ExecuteScript("DrainingMelody",OBJECT_SELF);
int nNWalker = GetTag(OBJECT_SELF)=="NIGHTWALKER001" ? TRUE : FALSE;
if(nNWalker)ExecuteScript("desecrating_aura",OBJECT_SELF);
int nNCrawler = GetTag(OBJECT_SELF)=="Nightcrawler" ? TRUE : FALSE;
if(nNCrawler)ExecuteScript("desecrating_aura",OBJECT_SELF);
int nVoidWraith = GetTag(OBJECT_SELF)=="VOIDWRAITH001" ? TRUE : FALSE;
if(nVoidWraith)ExecuteScript("airlessaura",OBJECT_SELF);
int AtropalScion = GetTag(OBJECT_SELF)=="ATROPALSCION001" ? TRUE : FALSE;
if(AtropalScion)ExecuteScript("neaura",OBJECT_SELF);
int nGhast1 = GetTag(OBJECT_SELF)=="GHAST001" ? TRUE : FALSE;
if(nGhast1)ExecuteScript("ghast_stench",OBJECT_SELF);
int nGhast2 = GetTag(OBJECT_SELF)=="GHAST002" ? TRUE : FALSE;
if(nGhast2)ExecuteScript("ghast_stench",OBJECT_SELF);
int nGhast3 = GetTag(OBJECT_SELF)=="GHAST003" ? TRUE : FALSE;
if(nGhast3)ExecuteScript("ghast_stench",OBJECT_SELF);
int nTliz = GetTag(OBJECT_SELF)=="TLIZ001" ? TRUE : FALSE;
if(nTliz)ExecuteScript("tliz_aura",OBJECT_SELF);
int nDecay = GetTag(OBJECT_SELF)=="ANGELOFDECAY001" ? TRUE : FALSE;
if(nDecay)ExecuteScript("rotura",OBJECT_SELF);
//:: Regeneration (not Fast Healing)
if(sResRef == "ra_troll001" || sResRef == "TROLL_FEDORLA")
{

File diff suppressed because it is too large Load Diff