375 lines
9.9 KiB
Plaintext
375 lines
9.9 KiB
Plaintext
#include "spawner"
|
|
#include "prc_x2_itemprop"
|
|
|
|
|
|
//////////////////////////////////////////////
|
|
// Damage Reduction Subroutine
|
|
///////////////////////////////////////////////
|
|
|
|
void Reduce (object oItem, int oDamage, int oSoak)
|
|
{
|
|
itemproperty ipAdd;
|
|
int oPowerup = oSoak;
|
|
|
|
switch (oDamage)
|
|
{
|
|
case 1: oDamage = IP_CONST_DAMAGEREDUCTION_12; break;
|
|
case 2: oDamage = IP_CONST_DAMAGEREDUCTION_14; break;
|
|
case 3: oDamage = IP_CONST_DAMAGEREDUCTION_16; break;
|
|
case 4: oDamage = IP_CONST_DAMAGEREDUCTION_18; break;
|
|
case 5: oDamage = IP_CONST_DAMAGEREDUCTION_20; break;
|
|
}
|
|
|
|
|
|
switch (oSoak)
|
|
{
|
|
case 1: oSoak = IP_CONST_DAMAGESOAK_30_HP; break;
|
|
case 2: oSoak = IP_CONST_DAMAGESOAK_35_HP; break;
|
|
case 3: oSoak = IP_CONST_DAMAGESOAK_40_HP; break;
|
|
case 4: oSoak = IP_CONST_DAMAGESOAK_45_HP; break;
|
|
case 5: oSoak = IP_CONST_DAMAGESOAK_50_HP; break;
|
|
}
|
|
IPRemoveMatchingItemProperties(oItem, ITEM_PROPERTY_DAMAGE_REDUCTION, -1);
|
|
ipAdd = ItemPropertyDamageReduction(oDamage, oSoak);
|
|
IPSafeAddItemProperty(oItem, ipAdd);
|
|
if (oPowerup==5)
|
|
{
|
|
PCEffect(3.5,VFX_FNF_GAS_EXPLOSION_MIND, OBJECT_SELF);
|
|
DelayCommand(4.0, FloatingTextStringOnCreature
|
|
("*** Full Powerup ***", GetLastUsedBy()));
|
|
}
|
|
}
|
|
|
|
///////////////////////////////////////////////
|
|
/// Damage Resistance Subroutine
|
|
//////////////////////////////////////////////////
|
|
|
|
|
|
void ResApply (object oItem, int oDamage, int oSoak)
|
|
{
|
|
itemproperty ipAdd;
|
|
int oPowerup = oSoak;
|
|
|
|
switch (oDamage)
|
|
{
|
|
case 1: oDamage = IP_CONST_DAMAGETYPE_BLUDGEONING; break;
|
|
case 2: oDamage = IP_CONST_DAMAGETYPE_ACID; break;
|
|
case 3: oDamage = IP_CONST_DAMAGETYPE_COLD; break;
|
|
case 4: oDamage = IP_CONST_DAMAGETYPE_DIVINE; break;
|
|
case 5: oDamage = IP_CONST_DAMAGETYPE_ELECTRICAL; break;
|
|
case 6: oDamage = IP_CONST_DAMAGETYPE_FIRE; break;
|
|
case 7: oDamage = IP_CONST_DAMAGETYPE_MAGICAL; break;
|
|
case 8: oDamage = IP_CONST_DAMAGETYPE_NEGATIVE; break;
|
|
case 10: oDamage = IP_CONST_DAMAGETYPE_SONIC; break;
|
|
case 11: oDamage = IP_CONST_DAMAGETYPE_PIERCING; break;
|
|
case 12: oDamage = IP_CONST_DAMAGETYPE_POSITIVE; break;
|
|
case 13: oDamage = IP_CONST_DAMAGETYPE_SLASHING; break;
|
|
}
|
|
|
|
|
|
switch (oSoak)
|
|
{
|
|
case 1: oSoak = IP_CONST_DAMAGERESIST_20; break;
|
|
case 2: oSoak = IP_CONST_DAMAGERESIST_25; break;
|
|
case 3: oSoak = IP_CONST_DAMAGERESIST_30; break;
|
|
case 4: oSoak = IP_CONST_DAMAGERESIST_35; break;
|
|
case 5: oSoak = IP_CONST_DAMAGERESIST_40; break;
|
|
case 6: oSoak = IP_CONST_DAMAGERESIST_45; break;
|
|
case 7: oSoak = IP_CONST_DAMAGERESIST_50; break;
|
|
}
|
|
|
|
ipAdd = ItemPropertyDamageResistance(oDamage, oSoak);
|
|
IPSafeAddItemProperty(oItem, ipAdd);
|
|
if (oPowerup==6)
|
|
{
|
|
PCEffect(3.5,VFX_FNF_GAS_EXPLOSION_MIND, OBJECT_SELF);
|
|
DelayCommand(4.0, FloatingTextStringOnCreature
|
|
("*** Full Powerup ***", GetLastUsedBy()));
|
|
}
|
|
}
|
|
|
|
////////////////////////////////////////////////////
|
|
/// Damage Bonus Subroutine
|
|
///////////////////////////////////////////////////
|
|
|
|
void ResApply2 (object oItem, int oDamage, int oSoak)
|
|
{
|
|
itemproperty ipAdd;
|
|
int oPowerup = oSoak;
|
|
|
|
switch (oDamage)
|
|
{
|
|
case 1: oDamage = IP_CONST_DAMAGETYPE_BLUDGEONING; break;
|
|
case 2: oDamage = IP_CONST_DAMAGETYPE_ACID; break;
|
|
case 3: oDamage = IP_CONST_DAMAGETYPE_COLD; break;
|
|
case 4: oDamage = IP_CONST_DAMAGETYPE_DIVINE; break;
|
|
case 5: oDamage = IP_CONST_DAMAGETYPE_ELECTRICAL; break;
|
|
case 6: oDamage = IP_CONST_DAMAGETYPE_FIRE; break;
|
|
case 7: oDamage = IP_CONST_DAMAGETYPE_MAGICAL; break;
|
|
case 8: oDamage = IP_CONST_DAMAGETYPE_NEGATIVE; break;
|
|
case 10: oDamage = IP_CONST_DAMAGETYPE_SONIC; break;
|
|
case 11: oDamage = IP_CONST_DAMAGETYPE_PIERCING; break;
|
|
case 12: oDamage = IP_CONST_DAMAGETYPE_POSITIVE; break;
|
|
case 13: oDamage = IP_CONST_DAMAGETYPE_SLASHING; break;
|
|
}
|
|
|
|
|
|
switch (oSoak)
|
|
{
|
|
case 1: oSoak = IP_CONST_DAMAGEBONUS_2d6; break;
|
|
case 2: oSoak = IP_CONST_DAMAGEBONUS_2d8; break;
|
|
case 3: oSoak = IP_CONST_DAMAGEBONUS_2d10; break;
|
|
case 4: oSoak = IP_CONST_DAMAGEBONUS_2d12; break;
|
|
}
|
|
|
|
ipAdd = ItemPropertyDamageBonus
|
|
(oDamage, oSoak);
|
|
IPSafeAddItemProperty(oItem, ipAdd);
|
|
if (oPowerup==4)
|
|
{
|
|
PCEffect(3.5,VFX_FNF_GAS_EXPLOSION_MIND, OBJECT_SELF);
|
|
DelayCommand(4.0, FloatingTextStringOnCreature
|
|
("*** Full Powerup ***", GetLastUsedBy()));
|
|
}
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////
|
|
/// Spell Resistance Subroutine
|
|
///////////////////////////////////////////////////
|
|
|
|
|
|
void Resist (object oItem, int oDamage)
|
|
{
|
|
itemproperty ipAdd;
|
|
int oPowerup = oDamage;
|
|
|
|
switch (oDamage)
|
|
{
|
|
case 1: oDamage = IP_CONST_SPELLRESISTANCEBONUS_20; break;
|
|
case 2: oDamage = IP_CONST_SPELLRESISTANCEBONUS_26; break;
|
|
case 3: oDamage = IP_CONST_SPELLRESISTANCEBONUS_32; break;
|
|
}
|
|
|
|
IPRemoveMatchingItemProperties(oItem, ITEM_PROPERTY_SPELL_RESISTANCE, -1);
|
|
ipAdd = ItemPropertyBonusSpellResistance(oDamage);
|
|
IPSafeAddItemProperty(oItem, ipAdd);
|
|
if (oPowerup==3)
|
|
{
|
|
PCEffect(3.5,VFX_FNF_GAS_EXPLOSION_MIND, OBJECT_SELF);
|
|
DelayCommand(4.0, FloatingTextStringOnCreature
|
|
("*** Full Powerup ***", GetLastUsedBy()));
|
|
}
|
|
}
|
|
|
|
|
|
////////////////////////////////////////////////////
|
|
/// Massive Criticals Subroutine
|
|
///////////////////////////////////////////////////
|
|
|
|
|
|
void Crit (object oItem, int oDamage)
|
|
{
|
|
itemproperty ipAdd;
|
|
int oPowerup = oDamage;
|
|
|
|
switch (oDamage)
|
|
{
|
|
case 1: oDamage = IP_CONST_DAMAGEBONUS_2d8; break;
|
|
case 2: oDamage = IP_CONST_DAMAGEBONUS_2d10; break;
|
|
case 3: oDamage = IP_CONST_DAMAGEBONUS_2d12; break;
|
|
}
|
|
|
|
IPRemoveMatchingItemProperties(oItem, ITEM_PROPERTY_MASSIVE_CRITICALS, -1);
|
|
ipAdd = ItemPropertyMassiveCritical(oDamage);
|
|
IPSafeAddItemProperty(oItem, ipAdd);
|
|
if (oPowerup==3)
|
|
{
|
|
PCEffect(3.5,VFX_FNF_GAS_EXPLOSION_MIND, OBJECT_SELF);
|
|
DelayCommand(4.0, FloatingTextStringOnCreature
|
|
("*** Full Powerup ***", GetLastUsedBy()));
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////
|
|
/// Damage Reduction Routine
|
|
//////////////////////////////////////////////
|
|
|
|
|
|
void DamageReduction (int oMulti, int oSoak)
|
|
{
|
|
object oTarget;
|
|
object oItem;
|
|
|
|
SetLocked(OBJECT_SELF, TRUE);
|
|
oItem = GetFirstItemInInventory(OBJECT_SELF);
|
|
while(GetIsObjectValid(oItem))
|
|
{
|
|
if (GetTag(oItem)=="coin1")
|
|
{DestroyObject(oItem);}
|
|
oItem = GetNextItemInInventory(OBJECT_SELF);
|
|
}
|
|
|
|
CastPC(0.0,SPELL_SHAPECHANGE, OBJECT_SELF);
|
|
PCEffect(1.5,VFX_DUR_PROT_PREMONITION, OBJECT_SELF);
|
|
PCEffect(1.0,VFX_IMP_IMPROVE_ABILITY_SCORE, OBJECT_SELF);
|
|
PCEffect(2.5,VFX_DUR_PROT_EPIC_ARMOR, OBJECT_SELF);
|
|
DelayCommand(1.0, Reduce(GetFirstItemInInventory(OBJECT_SELF), oMulti, oSoak));
|
|
DelayCommand(3.5, SetLocked(OBJECT_SELF, FALSE));
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////
|
|
/// Spell Resistance Routine
|
|
//////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
void SpellResBonus (int oUpgrade)
|
|
{
|
|
object oTarget;
|
|
object oItem;
|
|
|
|
SetLocked(OBJECT_SELF, TRUE);
|
|
oItem = GetFirstItemInInventory(OBJECT_SELF);
|
|
while(GetIsObjectValid(oItem))
|
|
{
|
|
if (GetTag(oItem)=="coin1")
|
|
{DestroyObject(oItem);}
|
|
oItem = GetNextItemInInventory(OBJECT_SELF);
|
|
}
|
|
|
|
CastPC(0.0,SPELL_SHAPECHANGE, OBJECT_SELF);
|
|
PCEffect(1.5,VFX_IMP_MAGIC_PROTECTION, OBJECT_SELF);
|
|
PCEffect(1.0,VFX_IMP_SPELL_MANTLE_USE, OBJECT_SELF);
|
|
PCEffect(2.0,VFX_DUR_MAGIC_RESISTANCE, OBJECT_SELF);
|
|
DelayCommand(1.0, Resist(GetFirstItemInInventory(OBJECT_SELF), oUpgrade));
|
|
DelayCommand(3.5, SetLocked(OBJECT_SELF, FALSE));
|
|
}
|
|
|
|
//////////////////////////////////////////////
|
|
/// Massive Criticals Routine
|
|
//////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
void MassCrit (int oUpgrade)
|
|
{
|
|
object oTarget;
|
|
object oItem;
|
|
|
|
SetLocked(OBJECT_SELF, TRUE);
|
|
oItem = GetFirstItemInInventory(OBJECT_SELF);
|
|
while(GetIsObjectValid(oItem))
|
|
{
|
|
if (GetTag(oItem)=="coin2")
|
|
{DestroyObject(oItem);}
|
|
oItem = GetNextItemInInventory(OBJECT_SELF);
|
|
}
|
|
|
|
CastPC(0.0,SPELL_SHAPECHANGE, OBJECT_SELF);
|
|
PCEffect(1.5,VFX_IMP_BREACH, OBJECT_SELF);
|
|
PCEffect(1.0,VFX_IMP_IMPROVE_ABILITY_SCORE, OBJECT_SELF);
|
|
PCEffect(2.0,VFX_IMP_EVIL_HELP, OBJECT_SELF);
|
|
DelayCommand(1.0, Crit(GetFirstItemInInventory(OBJECT_SELF), oUpgrade));
|
|
DelayCommand(3.5, SetLocked(OBJECT_SELF, FALSE));
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////
|
|
/// Damage Resistance Routine
|
|
//////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
void DamRes (int oMulti, int oSoak)
|
|
{
|
|
object oTarget;
|
|
object oItem;
|
|
|
|
SetLocked(OBJECT_SELF, TRUE);
|
|
oItem = GetFirstItemInInventory(OBJECT_SELF);
|
|
while(GetIsObjectValid(oItem))
|
|
{
|
|
if (GetTag(oItem)=="pearl")
|
|
{DestroyObject(oItem);}
|
|
oItem = GetNextItemInInventory(OBJECT_SELF);
|
|
}
|
|
|
|
CastPC(0.0,SPELL_SHAPECHANGE, OBJECT_SELF);
|
|
PCEffect(1.5,VFX_DUR_PROTECTION_EVIL_MAJOR, OBJECT_SELF);
|
|
PCEffect(1.0,VFX_IMP_IMPROVE_ABILITY_SCORE, OBJECT_SELF);
|
|
PCEffect(2.5,VFX_FNF_GREATER_RUIN, OBJECT_SELF);
|
|
DelayCommand(1.0, ResApply(GetFirstItemInInventory(OBJECT_SELF), oMulti, oSoak));
|
|
DelayCommand(3.5, SetLocked(OBJECT_SELF, FALSE));
|
|
}
|
|
|
|
//////////////////////////////////////////////
|
|
/// Damage Bonus Routine
|
|
//////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
void DamRes2 (int oMulti, int oSoak)
|
|
{
|
|
object oTarget;
|
|
object oItem;
|
|
int eEffect;
|
|
|
|
SetLocked(OBJECT_SELF, TRUE);
|
|
oItem = GetFirstItemInInventory(OBJECT_SELF);
|
|
while(GetIsObjectValid(oItem))
|
|
{
|
|
if (GetTag(oItem)=="coin2")
|
|
{DestroyObject(oItem);}
|
|
oItem = GetNextItemInInventory(OBJECT_SELF);
|
|
}
|
|
|
|
switch (oMulti)
|
|
{
|
|
case 1: eEffect = VFX_IMP_DESTRUCTION; break;
|
|
case 2: eEffect = VFX_FNF_GAS_EXPLOSION_ACID; break;
|
|
case 3: eEffect = VFX_FNF_DISPEL_DISJUNCTION; break;
|
|
case 4: eEffect = VFX_IMP_DIVINE_STRIKE_HOLY; break;
|
|
case 5: eEffect = VFX_FNF_ELECTRIC_EXPLOSION; break;
|
|
case 6: eEffect = VFX_FNF_SUMMONDRAGON; break;
|
|
case 7: eEffect = VFX_FNF_MYSTICAL_EXPLOSION; break;
|
|
case 8: eEffect = VFX_FNF_SUMMON_EPIC_UNDEAD; break;
|
|
case 10: eEffect = VFX_FNF_SOUND_BURST; break;
|
|
case 11: eEffect = VFX_FNF_GREATER_RUIN; break;
|
|
case 12: eEffect = VFX_IMP_PULSE_HOLY; break;
|
|
case 13: eEffect = VFX_IMP_HARM; break;
|
|
}
|
|
|
|
|
|
|
|
|
|
CastPC(0.0,SPELL_SHAPECHANGE, OBJECT_SELF);
|
|
PCEffect(1.0,VFX_IMP_SUPER_HEROISM, OBJECT_SELF);
|
|
PCEffect(1.5,VFX_IMP_IMPROVE_ABILITY_SCORE, OBJECT_SELF);
|
|
PCEffect(2.0,eEffect, OBJECT_SELF);
|
|
DelayCommand(1.0, ResApply2(GetFirstItemInInventory(OBJECT_SELF), oMulti, oSoak));
|
|
DelayCommand(3.5, SetLocked(OBJECT_SELF, FALSE));
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//void main() {}
|
|
|