Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
118 lines
4.0 KiB
Plaintext
118 lines
4.0 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: Power: Astral Construct
|
|
//:: psi_ast_con_man
|
|
//:://////////////////////////////////////////////
|
|
/** @file
|
|
Creates an astral construct as specified by the
|
|
contents of a set of local variables set by
|
|
the Astral Contruct Options conversation.
|
|
|
|
@author Ornedan
|
|
@date Created - 2005.01.26
|
|
@date Modified - 2006.01.31
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:://////////////////////////////////////////////
|
|
|
|
#include "psi_inc_ac_manif"
|
|
#include "psi_spellhook"
|
|
|
|
|
|
//////////////////////////////////////////////////
|
|
/* Constant defintions */
|
|
//////////////////////////////////////////////////
|
|
|
|
const int AC_SLOT_1 = 14036;
|
|
const int AC_SLOT_2 = 14037;
|
|
const int AC_SLOT_3 = 14038;
|
|
const int AC_SLOT_4 = 14039;
|
|
|
|
|
|
//////////////////////////////////////////////////
|
|
/* Function prototypes */
|
|
//////////////////////////////////////////////////
|
|
|
|
/**
|
|
* Determines which slot was used for this manifestation.
|
|
*
|
|
* @param nSpellID The spellID of this particular manifestation
|
|
* @return The number of the slot used
|
|
*/
|
|
int GetACSlotUsed(int nSpellID);
|
|
|
|
//////////////////////////////////////////////////
|
|
/* Function defintions */
|
|
//////////////////////////////////////////////////
|
|
|
|
void main()
|
|
{
|
|
if (!PsiPrePowerCastCode()){ return; }
|
|
// End of Spell Cast Hook
|
|
|
|
object oManifester = OBJECT_SELF;
|
|
string sSlot = IntToString(GetACSlotUsed(PRCGetSpellId()));
|
|
|
|
int nACLevel = GetLocalInt(oManifester, ASTRAL_CONSTRUCT_LEVEL + sSlot);
|
|
|
|
if(nACLevel < 1 || nACLevel > 9)
|
|
{
|
|
SendMessageToPCByStrRef(oManifester, STRREF_INVALID_CONSTRUCT_IN_SLOT);
|
|
return;
|
|
}
|
|
|
|
|
|
// Check if the manifester can. Since AC is sort of a special case in the augmenting
|
|
// scheme, we need to temporarily change the value of augmentation
|
|
|
|
// Do the augmentation override
|
|
struct user_augment_profile uapOverride;
|
|
uapOverride.nOption_1 = nACLevel - 1; // The other options are left auto-initialised to 0
|
|
|
|
SetAugmentationOverride(oManifester, uapOverride);
|
|
|
|
// Determine manifestation
|
|
struct manifestation manif;
|
|
manif = EvaluateManifestation(oManifester, OBJECT_INVALID,
|
|
PowerAugmentationProfile(PRC_NO_GENERIC_AUGMENTS,
|
|
2, PRC_UNLIMITED_AUGMENTATION
|
|
),
|
|
METAPSIONIC_EXTEND /*| METAPSIONIC_TWIN Can't be used as long as the effect is a real summon and not a henchmand*/
|
|
);
|
|
if(!manif.bCanManifest)
|
|
return;
|
|
|
|
|
|
int nOptionFlags = GetLocalInt(oManifester, ASTRAL_CONSTRUCT_OPTION_FLAGS + sSlot);
|
|
int nResElemFlags = GetLocalInt(oManifester, ASTRAL_CONSTRUCT_RESISTANCE_FLAGS + sSlot);
|
|
int nETchElemFlags = GetLocalInt(oManifester, ASTRAL_CONSTRUCT_ENERGY_TOUCH_FLAGS + sSlot);
|
|
int nEBltElemFlags = GetLocalInt(oManifester, ASTRAL_CONSTRUCT_ENERGY_BOLT_FLAGS + sSlot);
|
|
|
|
DoAstralConstructCreation(manif, GetSpellTargetLocation(), nACLevel,
|
|
nOptionFlags, nResElemFlags, nETchElemFlags, nEBltElemFlags);
|
|
|
|
// Mark the slot manifested out of on the manifester
|
|
SetLocalString(oManifester, MANIFESTED_SLOT, sSlot);
|
|
}
|
|
|
|
int GetACSlotUsed(int nSpellID)
|
|
{
|
|
int nRet;
|
|
|
|
switch(nSpellID)
|
|
{
|
|
case AC_SLOT_1: nRet = 1; break;
|
|
case AC_SLOT_2: nRet = 2; break;
|
|
case AC_SLOT_3: nRet = 3; break;
|
|
case AC_SLOT_4: nRet = 4; break;
|
|
|
|
default: nRet = -1;
|
|
}
|
|
|
|
if(DEBUG) DoDebug("GetACSlotUsed():\n"
|
|
+ "nSpellID = " + IntToString(nSpellID) + "\n"
|
|
+ "nRet = " + IntToString(nRet) + "\n"
|
|
);
|
|
|
|
return nRet;
|
|
}
|