77 lines
3.9 KiB
Plaintext
77 lines
3.9 KiB
Plaintext
/************************ [On Spawn: Lich] *************************************
|
|
Filename: j_sp_lichboss
|
|
************************* [On Spawn: Lich] *************************************
|
|
A high-powered lich, who takes advantage of spell triggers!
|
|
|
|
He should be geared towards higher level spells, and once he runs out, he
|
|
does cheat-cast several 1-3 level spells.
|
|
|
|
The spell triggers stop quite a bit of damage, with Premonition, greater
|
|
spell mantal and Energy Buffer. He also has some taunts he uses most combat
|
|
rounds, as well as using longer ranged spells first.
|
|
|
|
As he is a boss, he is a leader status, and also gets a free harm at 30% HP.
|
|
************************* [On Spawn: Lich] ************************************/
|
|
|
|
// This is required for all spawn in options!
|
|
#include "j_inc_spawnin"
|
|
|
|
void main()
|
|
{
|
|
// Maximum intelligence
|
|
SetAIInteger(AI_INTELLIGENCE, 10);
|
|
SetAIInteger(AI_MORALE, 10);
|
|
SetSpawnInCondition(AI_FLAG_FLEEING_FEARLESS, AI_TARGETING_FLEE_MASTER);
|
|
|
|
SetSpawnInCondition(AI_FLAG_OTHER_DONT_RESPOND_TO_EMOTES, AI_OTHER_MASTER);
|
|
|
|
AI_SetAITargetingValues(TARGETING_MANTALS, TARGET_LOWER, 1, 12);
|
|
AI_SetAITargetingValues(TARGETING_RANGE, TARGET_HIGHER, 2, 9);
|
|
AI_SetAITargetingValues(TARGETING_AC, TARGET_LOWER, 3, 6);
|
|
AI_SetAITargetingValues(TARGETING_SAVES, TARGET_LOWER, 3, 4);
|
|
// Mages target higher. (the lowest BAB, under half our hit dice in BAB)
|
|
AI_SetAITargetingValues(TARGETING_PHISICALS, TARGET_HIGHER, 1, 5);
|
|
|
|
AI_SetAITargetingValues(TARGETING_BAB, TARGET_LOWER, 1, 4);
|
|
AI_SetAITargetingValues(TARGETING_HITDICE, TARGET_LOWER, 1, 3);
|
|
|
|
SetSpawnInCondition(AI_FLAG_COMBAT_DISPEL_IN_ORDER, AI_COMBAT_MASTER);
|
|
|
|
SetSpawnInCondition(AI_FLAG_COMBAT_IMPROVED_INSTANT_DEATH_SPELLS, AI_COMBAT_MASTER);
|
|
SetSpawnInCondition(AI_FLAG_COMBAT_IMPROVED_SUMMON_TARGETING, AI_COMBAT_MASTER);
|
|
SetSpawnInCondition(AI_FLAG_COMBAT_IMPROVED_IMMUNITY_CHECKING, AI_COMBAT_MASTER);
|
|
SetSpawnInCondition(AI_FLAG_COMBAT_IMPROVED_SPECIFIC_SPELL_IMMUNITY, AI_COMBAT_MASTER);
|
|
SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_WILL_RAISE_ALLIES_IN_BATTLE, AI_OTHER_COMBAT_MASTER);
|
|
|
|
SetSpawnInCondition(AI_FLAG_OTHER_COMBAT_GROUP_LEADER, AI_OTHER_COMBAT_MASTER);
|
|
|
|
SetSpawnInCondition(AI_FLAG_COMBAT_LONGER_RANGED_SPELLS_FIRST, AI_COMBAT_MASTER);
|
|
|
|
AI_SetSpawnInSpeakArray(AI_TALK_ON_COMBAT_ROUND_EQUAL, 900, 4, "Curse your life!", "Nothing can kill the undead!", "MUhahaHaHahahha!!", "Prepare to DIE!");
|
|
AI_SetSpawnInSpeakArray(AI_TALK_ON_COMBAT_ROUND_THEM_OVER_US, 900, 4, "Curse your life!", "Nothing can kill the undead!", "MUhahaHaHahahha!!", "Prepare to DIE!");
|
|
AI_SetSpawnInSpeakArray(AI_TALK_ON_COMBAT_ROUND_US_OVER_THEM, 900, 4, "Curse your life!", "Nothing can kill the undead!", "MUhahaHaHahahha!!", "Prepare to DIE!");
|
|
|
|
// Spell triggers
|
|
SetSpellTrigger(SPELLTRIGGER_START_OF_COMBAT, FALSE, 1, SPELL_DEATH_ARMOR, SPELL_FOXS_CUNNING, SPELL_SHADOW_SHIELD);
|
|
|
|
// Damamged
|
|
SetSpellTrigger(SPELLTRIGGER_DAMAGED_AT_PERCENT, 30, 1, SPELL_HARM);
|
|
|
|
// Immobile
|
|
SetSpellTrigger(SPELLTRIGGER_IMMOBILE, FALSE, 1, SPELL_FREEDOM_OF_MOVEMENT);
|
|
|
|
// Normal defensive
|
|
SetSpellTrigger(SPELLTRIGGER_NOT_GOT_FIRST_SPELL, FALSE, 1, SPELL_PREMONITION);
|
|
SetSpellTrigger(SPELLTRIGGER_NOT_GOT_FIRST_SPELL, FALSE, 2, SPELL_PREMONITION);
|
|
SetSpellTrigger(SPELLTRIGGER_NOT_GOT_FIRST_SPELL, FALSE, 3, SPELL_GREATER_SPELL_MANTLE);
|
|
SetSpellTrigger(SPELLTRIGGER_NOT_GOT_FIRST_SPELL, FALSE, 4, SPELL_GREATER_SPELL_MANTLE);
|
|
SetSpellTrigger(SPELLTRIGGER_NOT_GOT_FIRST_SPELL, FALSE, 5, SPELL_ENERGY_BUFFER);
|
|
SetSpellTrigger(SPELLTRIGGER_NOT_GOT_FIRST_SPELL, FALSE, 6, SPELL_ENERGY_BUFFER);
|
|
|
|
// Cheat spells
|
|
SetAICheatCastSpells(SPELL_MAGIC_MISSILE, SPELL_MAGIC_MISSILE, SPELL_MAGIC_MISSILE, SPELL_FIREBALL, SPELL_MELFS_ACID_ARROW, SPELL_MELFS_ACID_ARROW);
|
|
|
|
AI_SetUpEndOfSpawn();
|
|
DelayCommand(2.0, SpawnWalkWayPoints());
|
|
}
|