AOC_PRC8/_module/nss/soak_imbue.nss
Jaysyn904 5e558169a0 Initial Commit
Initial Commit
2025-04-03 11:24:16 -04:00

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