PRC8/nwn/nwnprc/trunk/scripts/tmp_m_hceles.nss
Jaysyn904 6ec137a24e Updated AMS marker feats
Updated AMS marker feats.  Removed arcane & divine marker feats.  Updated Dread Necromancer for epic progression. Updated weapon baseitem models.  Updated new weapons for crafting & npc equip.
 Updated prefix.  Updated release archive.
2024-02-11 14:01:05 -05:00

320 lines
15 KiB
Plaintext
Raw Blame History

//::///////////////////////////////////////////////
//:: Name Half-Celestial template script
//:: FileName tmp_m_hceles
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
Half-Celestial
No matter the form, half-celestials are always comely and delightful to the senses, having golden skin,
sparkling eyes, angelic wings, or some other sign of their higher nature.
Creating A Half-Celestial
"Half-celestial" is an inherited template that can be added to any living, corporeal creature with an
Intelligence score of 4 or higher and nonevil alignment (referred to hereafter as the base creature).
A half-celestial uses all the base creature<72>s statistics and special abilities except as noted here.
Size and Type
The creature<72>s type changes to outsider. Do not recalculate the creature<72>s Hit Dice, base attack bonus,
or saves. Size is unchanged. Half-celestials are normally native outsiders.
Speed
A half-celestial has feathered wings and can fly at twice the base creature<72>s base land speed
(good maneuverability). If the base creature has a fly speed, use that instead.
Armor Class
Natural armor improves by +1 (this stacks with any natural armor bonus the base creature has).
Special Attacks
A half-celestial retains all the special attacks of the base creature and also gains the following special
abilities.
Daylight (Su)
Half-celestials can use a daylight effect (as the spell) at will.
Smite Evil (Su)
Once per day a half-celestial can make a normal melee attack to deal extra damage equal to its HD
(maximum of +20) against an evil foe.
HD Abilities
1-2 Protection from evil 3/day, bless
3-4 Aid, detect evil
5-6 Cure serious wounds, neutralize poison
7-8 Holy smite, remove disease
9-10 Dispel evil
11-12 Holy word
13-14 Holy aura 3/day, hallow
15-16 Mass charm monster
17-18 Summon monster IX (celestials only)
19-20 Resurrection
Spell-Like Abilities
A half-celestial with an Intelligence or Wisdom score of 8 or higher has two or more spell-like abilities,
depending on its Hit Dice, as indicated on the table below. The abilities are cumulative
Unless otherwise noted, an ability is usable once per day. Caster level equals the creature<72>s HD, and the
save DC is Charisma-based.
Special Qualities
A half-celestial has all the special qualities of the base creature, plus the following special qualities.
* Darkvision out to 60 feet.
* Immunity to disease.
* Resistance to acid 10, cold 10, and electricity 10.
* Damage reduction: 5/magic (if HD 11 or less) or 10/magic (if HD 12 or more).
* A half-celestial<61>s natural weapons are treated as magic weapons for the purpose of overcoming damage reduction.
* Spell resistance equal to creature<72>s HD + 10 (maximum 35).
* +4 racial bonus on Fortitude saves against poison.
Abilities
Increase from the base creature as follows: Str +4, Dex +2, Con +4, Int +2, Wis +4, Cha +4.
Skills
A half-celestial gains skill points as an outsider and has skill points equal to (8 + Int modifier) <20> (HD +3).
Do not include Hit Dice from class levels in this calculation<6F>the half-celestial gains outsider skill points only for its racial Hit Dice, and gains the normal amount of skill points for its class levels. Treat skills from the base creature<72>s list as class skills, and other skills as cross-class.
Challenge Rating
HD 5 or less, as base creature +1; HD 6 to 10, as base creature +2; HD 11 or more, as base creature +3.
Alignment
Always good (any).
Level Adjustment
Same as base creature +4.
*/
//:://////////////////////////////////////////////
//:: Created By: Primogenitor
//:: Created On: 18/04/06
//:://////////////////////////////////////////////
#include "pnp_shft_poly"
#include "prc_inc_template"
#include "inc_nwnx_funcs"
void main()
{
object oPC = OBJECT_SELF;
object oSkin = GetPCSkin(oPC);
int nHD = GetHitDice(oPC);
itemproperty ipIP;
int bFuncs = GetPRCSwitch(PRC_NWNX_FUNCS);
int iTest = GetPersistantLocalInt(oPC, "NWNX_Template_hceles");
//wings
DoWings(oPC, CREATURE_WING_TYPE_ANGEL);
if(bFuncs && !iTest)
{
SetPersistantLocalInt(oPC, "NWNX_Template_hceles", 1);
//ability mods
PRC_Funcs_ModAbilityScore(oPC, ABILITY_STRENGTH, 4);
PRC_Funcs_ModAbilityScore(oPC, ABILITY_DEXTERITY, 2);
PRC_Funcs_ModAbilityScore(oPC, ABILITY_CONSTITUTION, 4);
PRC_Funcs_ModAbilityScore(oPC, ABILITY_INTELLIGENCE, 2);
PRC_Funcs_ModAbilityScore(oPC, ABILITY_WISDOM, 4);
PRC_Funcs_ModAbilityScore(oPC, ABILITY_CHARISMA, 4);
//feats
//smite evil
PRC_Funcs_AddFeat(oPC, FEAT_TEMPLATE_HALF_CELESTIAL_SMITE_EVIL);
//marker feat
PRC_Funcs_AddFeat(oPC, FEAT_TEMPLATE_HALF_CELESTIAL_MARKER);
//daylight
PRC_Funcs_AddFeat(oPC, FEAT_TEMPLATE_HALF_CELESTIAL_DAYLIGHT);
}
else if(!bFuncs && !iTest)
{
//ability mods
SetCompositeBonus(oSkin, "Template_hceles_str", 4, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_STR);
SetCompositeBonus(oSkin, "Template_hceles_dex", 2, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_DEX);
SetCompositeBonus(oSkin, "Template_hceles_con", 4, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_CON);
SetCompositeBonus(oSkin, "Template_hceles_int", 2, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_INT);
SetCompositeBonus(oSkin, "Template_hceles_wis", 4, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_WIS);
SetCompositeBonus(oSkin, "Template_hceles_cha", 4, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_CHA);
//feats
//smite evil
ipIP = PRCItemPropertyBonusFeat(IP_CONST_FEAT_TEMPLATE_HALF_CELESTIAL_SMITE_EVIL);
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
//marker feat
ipIP = PRCItemPropertyBonusFeat(IP_CONST_FEAT_TEMPLATE_HALF_CELESTIAL_MARKER);
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
//daylight
ipIP = PRCItemPropertyBonusFeat(IP_CONST_FEAT_TEMPLATE_HALF_CELESTIAL_DAYLIGHT);
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
}
//naturalAC
SetCompositeBonus(oSkin, "Template_hceles_natAC", 1, ITEM_PROPERTY_AC_BONUS);
//darkvision
ipIP = ItemPropertyDarkvision();
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
//immunity to disease
ipIP = ItemPropertyImmunityMisc(IP_CONST_IMMUNITYMISC_DISEASE);
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
//resistance to acid 10 cold 10 elec 10
ipIP = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_COLD, IP_CONST_DAMAGERESIST_10);
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
ipIP = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_ACID, IP_CONST_DAMAGERESIST_10);
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
ipIP = ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_ELECTRICAL, IP_CONST_DAMAGERESIST_10);
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
//damage reduction 5/+1 or 10/+1
if(nHD <= 11)
{
ipIP = ItemPropertyDamageReduction(IP_CONST_DAMAGEREDUCTION_1, IP_CONST_DAMAGESOAK_5_HP);
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
}
else if(nHD >= 12)
{
ipIP = ItemPropertyDamageReduction(IP_CONST_DAMAGEREDUCTION_1, IP_CONST_DAMAGESOAK_10_HP);
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
}
//SR
int nSR = nHD+10;
if(nSR > 35)
nSR = 35;
ipIP = ItemPropertyBonusSpellResistance(GetSRByValue(nSR));
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
//+4 vs poison
SetCompositeBonus(oSkin, "Template_hceles_poison", 4, ITEM_PROPERTY_SAVING_THROW_BONUS_SPECIFIC, IP_CONST_SAVEVS_POISON);
//SLAs
if(GetAbilityScore(oPC,ABILITY_WISDOM, TRUE) >= 8
|| GetAbilityScore(oPC, ABILITY_INTELLIGENCE, TRUE) >= 8)
{
if(bFuncs)
{
if(!PRC_Funcs_GetFeatKnown(oPC, FEAT_TEMPLATE_HALF_CELESTIAL_PROTECTION))
PRC_Funcs_AddFeat(oPC, FEAT_TEMPLATE_HALF_CELESTIAL_PROTECTION);
if(!PRC_Funcs_GetFeatKnown(oPC, FEAT_TEMPLATE_HALF_CELESTIAL_BLESS))
PRC_Funcs_AddFeat(oPC, FEAT_TEMPLATE_HALF_CELESTIAL_BLESS);
if(nHD >= 3)
{
if(!PRC_Funcs_GetFeatKnown(oPC, FEAT_TEMPLATE_HALF_CELESTIAL_AID))
PRC_Funcs_AddFeat(oPC, FEAT_TEMPLATE_HALF_CELESTIAL_AID, 3);
if(!PRC_Funcs_GetFeatKnown(oPC, FEAT_TEMPLATE_HALF_CELESTIAL_DETECT))
PRC_Funcs_AddFeat(oPC, FEAT_TEMPLATE_HALF_CELESTIAL_DETECT, 3);
}
if(nHD >= 5)
{
if(!PRC_Funcs_GetFeatKnown(oPC, FEAT_TEMPLATE_HALF_CELESTIAL_CURE_SERIOUS))
PRC_Funcs_AddFeat(oPC, FEAT_TEMPLATE_HALF_CELESTIAL_CURE_SERIOUS, 5);
if(!PRC_Funcs_GetFeatKnown(oPC, FEAT_TEMPLATE_HALF_CELESTIAL_NEUTRALIZE_POISON))
PRC_Funcs_AddFeat(oPC, FEAT_TEMPLATE_HALF_CELESTIAL_NEUTRALIZE_POISON, 5);
}
if(nHD >= 7)
{
//if(!PRC_Funcs_GetFeatKnown(oPC, FEAT_TEMPLATE_HALF_CELESTIAL_HOLY_SMITE))
// PRC_Funcs_AddFeat(oPC, FEAT_TEMPLATE_HALF_CELESTIAL_HOLY_SMITE, 7);
if(!PRC_Funcs_GetFeatKnown(oPC, FEAT_TEMPLATE_HALF_CELESTIAL_REMOVE_DISEASE))
PRC_Funcs_AddFeat(oPC, FEAT_TEMPLATE_HALF_CELESTIAL_REMOVE_DISEASE, 7);
}
if(nHD >= 9)
{
//if(!PRC_Funcs_GetFeatKnown(oPC, FEAT_TEMPLATE_HALF_CELESTIAL_DISPEL_EVIL))
// PRC_Funcs_AddFeat(oPC, FEAT_TEMPLATE_HALF_CELESTIAL_DISPEL_EVIL, 9);
}
if(nHD >= 11)
{
if(!PRC_Funcs_GetFeatKnown(oPC, FEAT_TEMPLATE_HALF_CELESTIAL_HOLY_WORD))
PRC_Funcs_AddFeat(oPC, FEAT_TEMPLATE_HALF_CELESTIAL_HOLY_WORD, 11);
}
if(nHD >= 13)
{
if(!PRC_Funcs_GetFeatKnown(oPC, FEAT_TEMPLATE_HALF_CELESTIAL_HOLY_AURA))
PRC_Funcs_AddFeat(oPC, FEAT_TEMPLATE_HALF_CELESTIAL_HOLY_AURA, 13);
//if(!PRC_Funcs_GetFeatKnown(oPC, FEAT_TEMPLATE_HALF_CELESTIAL_HALLOW))
// PRC_Funcs_AddFeat(oPC, FEAT_TEMPLATE_HALF_CELESTIAL_HALLOW, 13);
}
if(nHD >= 15)
{
if(!PRC_Funcs_GetFeatKnown(oPC, FEAT_TEMPLATE_HALF_CELESTIAL_MASS_CHARM))
PRC_Funcs_AddFeat(oPC, FEAT_TEMPLATE_HALF_CELESTIAL_MASS_CHARM, 15);
}
if(nHD >= 17)
{
if(!PRC_Funcs_GetFeatKnown(oPC, FEAT_TEMPLATE_HALF_CELESTIAL_SUMMON_IX))
PRC_Funcs_AddFeat(oPC, FEAT_TEMPLATE_HALF_CELESTIAL_SUMMON_IX, 17);
}
if(nHD >= 19)
{
if(!PRC_Funcs_GetFeatKnown(oPC, FEAT_TEMPLATE_HALF_CELESTIAL_RESURRECTION))
PRC_Funcs_AddFeat(oPC, FEAT_TEMPLATE_HALF_CELESTIAL_RESURRECTION, 19);
}
}
else
{
//protection from evil 3/day
ipIP = PRCItemPropertyBonusFeat(IP_CONST_FEAT_TEMPLATE_HALF_CELESTIAL_PROTECTION);
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
//bless 1/day
ipIP = PRCItemPropertyBonusFeat(IP_CONST_FEAT_TEMPLATE_HALF_CELESTIAL_BLESS);
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
if(nHD >= 3)
{
//aid 1/day
ipIP = PRCItemPropertyBonusFeat(IP_CONST_FEAT_TEMPLATE_HALF_CELESTIAL_AID);
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
//detect evil 1/day
ipIP = PRCItemPropertyBonusFeat(IP_CONST_FEAT_TEMPLATE_HALF_CELESTIAL_DETECT);
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
}
if(nHD >= 5)
{
//cure serious wounds 1/day
ipIP = PRCItemPropertyBonusFeat(IP_CONST_FEAT_TEMPLATE_HALF_CELESTIAL_CURE_SERIOUS);
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
//neutralize poison 1/day
ipIP = PRCItemPropertyBonusFeat(IP_CONST_FEAT_TEMPLATE_HALF_CELESTIAL_NEUTRALIZE_POISON);
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
}
if(nHD >= 7)
{
//holy smite 1/day
//TO BE ADDED
//remove disease 1/day
ipIP = PRCItemPropertyBonusFeat(IP_CONST_FEAT_TEMPLATE_HALF_CELESTIAL_REMOVE_DISEASE);
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
}
if(nHD >= 9)
{
//dispel evil 1/day
//TO BE ADDED
}
if(nHD >= 11)
{
//holy word 1/day
ipIP = PRCItemPropertyBonusFeat(IP_CONST_FEAT_TEMPLATE_HALF_CELESTIAL_HOLY_WORD);
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
}
if(nHD >= 13)
{
//holy aura 3.day
ipIP = PRCItemPropertyBonusFeat(IP_CONST_FEAT_TEMPLATE_HALF_CELESTIAL_HOLY_AURA);
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
//hallow 1/day
//TO BE ADDED
}
if(nHD >= 15)
{
//mass charm monster 1/day
ipIP = PRCItemPropertyBonusFeat(IP_CONST_FEAT_TEMPLATE_HALF_CELESTIAL_MASS_CHARM);
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
}
if(nHD >= 17)
{
//summon monster IX 1/day
ipIP = PRCItemPropertyBonusFeat(IP_CONST_FEAT_TEMPLATE_HALF_CELESTIAL_SUMMON_IX);
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
}
if(nHD >= 19)
{
//resurrection
ipIP = PRCItemPropertyBonusFeat(IP_CONST_FEAT_TEMPLATE_HALF_CELESTIAL_RESURRECTION);
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
}
}
}
}