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.
273 lines
10 KiB
Plaintext
273 lines
10 KiB
Plaintext
/*:://////////////////////////////////////////////
|
|
//:: Name Summoning include
|
|
//:: FileName SMP_INC_SUMMON
|
|
//:://////////////////////////////////////////////
|
|
This holds the functions to get the correct summoned monster if random,
|
|
or the restrictions on monsters if in conversations.
|
|
|
|
Not sure what else really...
|
|
|
|
Tips:
|
|
|
|
Uses of the summoning spell
|
|
|
|
* When you are being attacked by a flying/swimming/ethereal/etc.
|
|
creature and you don't fly/swim/go ethereal/etc.
|
|
* When you need an ally immune to X
|
|
* When you need some cannon fodder to slow down the main bad guys/give
|
|
them something else to aim at.
|
|
* When your bad guys are in a location that you can't get to (across a
|
|
chasm)
|
|
* When you want to help your thief FLANK someone.
|
|
* When facing someone that has DR/x and you need a creature capable of
|
|
attacking them without penalty.
|
|
* When someone is using an Anti-Life shell or similar effect (Outsiders...)
|
|
* To set off traps, etc.
|
|
* Distractions/cons
|
|
* Short kamikaze missions.
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Jasperre
|
|
//::////////////////////////////////////////////*/
|
|
|
|
#include "SMP_INC_CONSTANT"
|
|
|
|
// SMP_INC_SUMMON. Returns TRUE if alignment should influence what we will summon.
|
|
int SMP_GetIsDivineSpellCastingClass(int nClass);
|
|
|
|
// SMP_INC_SUMMON. Will return the choice for nLevel, or FALSE if invalid.
|
|
int SMP_SummonMonsterGetChoice(int nLevel, object oCaster = OBJECT_SELF);
|
|
|
|
// SMP_INC_SUMMON. Returns a resref for nSummonLevel, and nChoice.
|
|
string SMP_SummonMonsterChoice(int nLevel, int nChoice);
|
|
|
|
// SMP_INC_SUMMON. Returns a resref for a random monster on the level 1 Summon Monster list.
|
|
// Uses alignments, if a cleric, paladin, or druid or ranger, to choose a correctly
|
|
// aligned monster.
|
|
string SMP_SummonMonsterRandom_1(object oCaster = OBJECT_SELF);
|
|
|
|
// SMP_INC_SUMMON. Returns TRUE if alignment should influence what we will summon.
|
|
int SMP_GetIsDivineSpellCastingClass(int nClass)
|
|
{
|
|
// Divine spellcasters
|
|
switch(nClass)
|
|
{
|
|
case CLASS_TYPE_CLERIC:
|
|
case CLASS_TYPE_DRUID:
|
|
case CLASS_TYPE_PALADIN:
|
|
case CLASS_TYPE_RANGER:
|
|
{
|
|
return TRUE;
|
|
}
|
|
break;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
// SMP_INC_SUMMON. Will return the choice for nLevel, or FALSE if invalid.
|
|
int SMP_SummonMonsterGetChoice(int nLevel, object oCaster = OBJECT_SELF)
|
|
{
|
|
// Local set on caster (will move to caster item sometime)
|
|
return GetLocalInt(oCaster, "SMP_SUMMON_MONSTER_CHOICE_" + IntToString(nLevel));
|
|
}
|
|
// SMP_INC_SUMMON. Returns a resref for nSummonLevel, and nChoice.
|
|
string SMP_SummonMonsterChoice(int nLevel, int nChoice)
|
|
{
|
|
// String is SMP_smX_Y, where nLevel is X and Y is nChoice
|
|
return "SMP_sm" + IntToString(nLevel) + "_" + IntToString(nChoice);
|
|
}
|
|
// SMP_INC_SUMMON. Returns a resref for a random monster on the level 1 Summon Monster list.
|
|
// Uses alignments, if a cleric, paladin, or druid or ranger, to choose a correctly
|
|
// aligned monster.
|
|
string SMP_SummonMonsterRandom_1(object oCaster = OBJECT_SELF)
|
|
{
|
|
/* Monsters:
|
|
1st Level
|
|
1 Celestial dog - LG
|
|
2 Celestial owl - LG
|
|
3 Celestial giant fire beetle - NG
|
|
4 Celestial badger - CG
|
|
5 Celestial monkey - CG
|
|
|
|
6 Fiendish dire rat - LE
|
|
7 Fiendish raven - LE
|
|
8 Fiendish monstrous centipede, Medium - NE
|
|
9 Fiendish monstrous scorpion, Small - NE
|
|
10 Fiendish hawk - CE
|
|
11 Fiendish monstrous spider, Small - CE
|
|
12 Fiendish snake, Small viper - CE
|
|
|
|
*/
|
|
int nSummon;
|
|
// Does alignment influence it?
|
|
if(SMP_GetIsDivineSpellCastingClass(GetLastSpellCastClass()))
|
|
{
|
|
// Random choice (limited only by alignment)
|
|
int nAlignGoodEvil = GetAlignmentGoodEvil(oCaster);
|
|
int nAlignLawChaos = GetAlignmentLawChaos(oCaster);
|
|
// Netural Good/Evil
|
|
if(nAlignGoodEvil == ALIGNMENT_NEUTRAL)
|
|
{
|
|
// Check law/chaos.
|
|
if(nAlignLawChaos == ALIGNMENT_NEUTRAL)
|
|
{
|
|
// Any choice
|
|
nSummon = Random(12) + 1;
|
|
}
|
|
// Can be any Good/Evil, but must be lawful or chaotic.
|
|
else if(nAlignLawChaos == ALIGNMENT_CHAOTIC)
|
|
{
|
|
// Cannot be lawful, must be chaotic or neutral.
|
|
/* Monsters:
|
|
3 Celestial giant fire beetle - NG
|
|
4 Celestial badger - CG
|
|
5 Celestial monkey - CG
|
|
8 Fiendish monstrous centipede, Medium - NE
|
|
9 Fiendish monstrous scorpion, Small - NE
|
|
10 Fiendish hawk - CE
|
|
11 Fiendish monstrous spider, Small - CE
|
|
12 Fiendish snake, Small viper - CE */
|
|
switch(Random(8) + 1)
|
|
{
|
|
case 1: nSummon = 3; break;
|
|
case 2: nSummon = 4; break;
|
|
case 3: nSummon = 5; break;
|
|
case 4: nSummon = 8; break;
|
|
case 5: nSummon = 9; break;
|
|
case 6: nSummon = 10; break;
|
|
case 7: nSummon = 11; break;
|
|
case 8: nSummon = 12; break;
|
|
}
|
|
}
|
|
else //if(nAlignLawChaos == nAlignLawChaos)
|
|
{
|
|
// Cannot be chaotic, must be lawful or neutral.
|
|
/* Monsters:
|
|
1 Celestial dog - LG
|
|
2 Celestial owl - LG
|
|
3 Celestial giant fire beetle - NG
|
|
6 Fiendish dire rat - LE
|
|
7 Fiendish raven - LE
|
|
8 Fiendish monstrous centipede, Medium - NE
|
|
9 Fiendish monstrous scorpion, Small - NE */
|
|
switch(Random(7) + 1)
|
|
{
|
|
case 1: nSummon = 1; break;
|
|
case 2: nSummon = 2; break;
|
|
case 3: nSummon = 3; break;
|
|
case 4: nSummon = 6; break;
|
|
case 5: nSummon = 7; break;
|
|
case 6: nSummon = 8; break;
|
|
case 7: nSummon = 9; break;
|
|
}
|
|
}
|
|
}
|
|
else if(nAlignGoodEvil == ALIGNMENT_GOOD)
|
|
{
|
|
// Only non-evil (Good/Neutral) creatures. This means any good ones, unless
|
|
// they are also chaotic ETC.
|
|
if(nAlignLawChaos == ALIGNMENT_NEUTRAL)
|
|
{
|
|
// Any choice which isn't evil
|
|
/* Monsters:
|
|
1 Celestial dog - LG
|
|
2 Celestial owl - LG
|
|
3 Celestial giant fire beetle - NG
|
|
4 Celestial badger - CG
|
|
5 Celestial monkey - CG */
|
|
nSummon = Random(5) + 1;
|
|
}
|
|
if(nAlignLawChaos == ALIGNMENT_CHAOTIC)
|
|
{
|
|
// Cannot be lawful, or evil, must be chaotic or neutral.
|
|
/* Monsters:
|
|
3 Celestial giant fire beetle - NG
|
|
4 Celestial badger - CG
|
|
5 Celestial monkey - CG */
|
|
switch(Random(3) + 1)
|
|
{
|
|
case 1: nSummon = 3; break;
|
|
case 2: nSummon = 4; break;
|
|
case 3: nSummon = 5; break;
|
|
}
|
|
}
|
|
else //if(nLawChoas == ALIGNMENT_LAWFUL)
|
|
{
|
|
// Cannot be chaotic, or evil, must be lawful or neutral.
|
|
/* Monsters:
|
|
1 Celestial dog - LG
|
|
2 Celestial owl - LG
|
|
3 Celestial giant fire beetle - NG */
|
|
switch(Random(3) + 1)
|
|
{
|
|
case 1: nSummon = 1; break;
|
|
case 2: nSummon = 2; break;
|
|
case 3: nSummon = 3; break;
|
|
}
|
|
}
|
|
}
|
|
// Evil
|
|
else //if(nAlignGoodEvil == ALIGNMENT_EVIL)
|
|
{
|
|
// No good summons.
|
|
if(nAlignLawChaos == ALIGNMENT_NEUTRAL)
|
|
{
|
|
// Any choice which isn't good
|
|
/* Monsters:
|
|
6 Fiendish dire rat - LE
|
|
7 Fiendish raven - LE
|
|
8 Fiendish monstrous centipede, Medium - NE
|
|
9 Fiendish monstrous scorpion, Small - NE
|
|
10 Fiendish hawk - CE
|
|
11 Fiendish monstrous spider, Small - CE
|
|
12 Fiendish snake, Small viper - CE */
|
|
nSummon = Random(7) + 5; // (6 to 12)
|
|
}
|
|
else if(nAlignLawChaos == ALIGNMENT_CHAOTIC)
|
|
{
|
|
// Cannot be lawful, or good, must be chaotic or neutral.
|
|
/* Monsters:
|
|
8 Fiendish monstrous centipede, Medium - NE
|
|
9 Fiendish monstrous scorpion, Small - NE
|
|
10 Fiendish hawk - CE
|
|
11 Fiendish monstrous spider, Small - CE
|
|
12 Fiendish snake, Small viper - CE */
|
|
switch(Random(5) + 1)
|
|
{
|
|
case 1: nSummon = 8; break;
|
|
case 2: nSummon = 9; break;
|
|
case 3: nSummon = 10; break;
|
|
case 4: nSummon = 11; break;
|
|
case 5: nSummon = 12; break;
|
|
}
|
|
}
|
|
else //if(nAlignLawChaos == nAlignLawChaos)
|
|
{
|
|
// Cannot be chaotic, or good, must be lawful or neutral.
|
|
/* Monsters:
|
|
6 Fiendish dire rat - LE
|
|
7 Fiendish raven - LE
|
|
8 Fiendish monstrous centipede, Medium - NE
|
|
9 Fiendish monstrous scorpion, Small - NE */
|
|
switch(Random(4) + 1)
|
|
{
|
|
case 1: nSummon = 6; break;
|
|
case 2: nSummon = 7; break;
|
|
case 3: nSummon = 8; break;
|
|
case 4: nSummon = 9; break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// Alignment doesn't matter. Randomise it.
|
|
nSummon = Random(12) + 1;
|
|
}
|
|
// Total resref
|
|
string sResRef = "SMP_sm1_" + IntToString(nSummon);
|
|
|
|
return sResRef;
|
|
}
|
|
|
|
|