#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() {}