Files
PRC8/nwn/nwnprc/trunk/scripts/prc_chngshp_lern.nss
Jaysyn904 0f1c10c279 2026/01/26 Update
Added Wispling race.
Wispling qualifies for Shifter (PnP).
Bioware poisons now work with "new" PRC8 weapons.
Updated PRC8 Tester mod store to have Bioware venoms.
Updated PRC8 version.
Added Alchemy expansion notes.
Updated Starting package TLK notes.
2026-01-20 09:11:57 -05:00

70 lines
2.5 KiB
Plaintext

//:://////////////////////////////////////////////
//:: Change Shape use
//:: prc_chngshp_lern
//:://////////////////////////////////////////////
/** @file
Targets some creature to have it be stored
as a known template and attempts to shift
into it.
@author Shane Hennessy
@date Modified - 2006.10.08 - rewritten by Ornedan - modified by Fox
*/
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
#include "prc_inc_shifting"
void main()
{
object oPC = OBJECT_SELF;
object oTarget = PRCGetSpellTargetObject();
int nSpellID = GetSpellId();
int nShiftType;
switch(nSpellID)
{
case SPELL_IRDA_CHANGE_SHAPE_LEARN:
case SPELL_WISPLING_CHANGE_SHAPE_LEARN:
case SPELL_FEYRI_CHANGE_SHAPE_LEARN:
case SPELL_RAKSHASA_CHANGE_SHAPE_LEARN: nShiftType = SHIFTER_TYPE_HUMANOIDSHAPE; break;
case SPELL_ALTER_SELF_LEARN: nShiftType = SHIFTER_TYPE_ALTER_SELF; break;
case SPELL_DISGUISE_SELF_LEARN:
case SPELL_CHANGLING_CHANGE_SHAPE_LEARN:
case SPELL_QUICK_CHANGE_SHAPE_LEARN: nShiftType = SHIFTER_TYPE_DISGUISE_SELF; break;
}
// Store the PC's current appearance as true appearance
/// @note This may be a bad idea, we have no way of knowing if the current appearance really is the "true appearance" - Ornedan
StoreCurrentAppearanceAsTrueAppearance(oPC, TRUE);
// See if the creature is shiftable to. If so, store it as a template and shift
if(GetCanShiftIntoCreature(oPC, nShiftType, oTarget))
{
StoreShiftingTemplate(oPC, nShiftType, oTarget);
// Start shifting. If this fails immediately, refund the shifting use
if(!ShiftIntoCreature(oPC, nShiftType, oTarget))
{
// In case of shifting failure, refund the shifting use
if(nSpellID == SPELL_IRDA_CHANGE_SHAPE_LEARN)
IncrementRemainingFeatUses(oPC, FEAT_IRDA_CHANGE_SHAPE);
if(nSpellID == SPELL_WISPLING_CHANGE_SHAPE_LEARN)
IncrementRemainingFeatUses(oPC, FEAT_WISPLING_CHANGE_SHAPE);
}
}
// Couldn't shift, refund the feat use
else
if(nSpellID == SPELL_IRDA_CHANGE_SHAPE_LEARN)
IncrementRemainingFeatUses(oPC, FEAT_IRDA_CHANGE_SHAPE);
if(nSpellID == SPELL_WISPLING_CHANGE_SHAPE_LEARN)
IncrementRemainingFeatUses(oPC, FEAT_WISPLING_CHANGE_SHAPE);
}