WizardryEE/Content/spells/mahaman.nss
2025-04-26 15:20:45 -04:00

187 lines
6.7 KiB
Plaintext

//::///////////////////////////////////////////////
//:: Mahaman (Great Change)
//:: mahaman.nss
//:: Copyright (c) 2025 WizardryEE Project
//:://////////////////////////////////////////////
/*
Has random effects with more options than HAMAN.
Drains the caster one experience level and is
forgotten when cast.
Level 7 Mage spell.
In Wizardry: Proving Grounds of the Mad Overlord,
this is a Level 7 Mage support/disable spell with
enhanced random effects. Requires caster level 13+.
Possible effects:
- Augmented magic: party spells cause more damage
- Cure party: cures all conditions
- Heal party: MADI on all members
- Protect party: -20 AC for all members
- Raise the dead: DI on all dead members
- Silence enemies: all monsters silenced
- Teleport enemies: monsters teleported away
*/
//:://////////////////////////////////////////////
//:: Created By: WizardryEE Project
//:: Created On: April 26, 2025
//:://////////////////////////////////////////////
void main()
{
// Spell implementation for WizardryEE
// Core functionality: Enhanced random effects with level drain
// Declare variables used in switch cases
object oCaster = OBJECT_SELF;
object oMember;
object oArea;
object oTarget;
effect eHeal;
effect eSilence;
effect eTeleport;
effect eProtect;
// Check minimum level requirement
int nCasterLevel = GetLevelByClass(CLASS_TYPE_WIZARD, oCaster);
if (nCasterLevel < 13)
{
FloatingTextStringOnCreature("MAHAMAN requires level 13+ to cast!", oCaster, TRUE);
return;
}
// Apply level drain to caster
effect eDrain = EffectNegativeLevel(1);
effect eVis = EffectVisualEffect(47); // Negative energy visual effect
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eDrain, oCaster);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oCaster);
// Remove spell from memory
SetLocalInt(oCaster, "SPELL_MAHAMAN_FORGOTTEN", 1);
// Roll for random effect
int nEffect = Random(7); // 0-6 for seven possible effects
// Apply the random effect
switch(nEffect)
{
case 0: // Augmented magic
{
SetLocalInt(oCaster, "SPELL_DAMAGE_BONUS", 4); // Enhanced bonus
FloatingTextStringOnCreature("MAHAMAN: Party spells greatly enhanced!", oCaster, TRUE);
break;
}
case 1: // Cure party
{
oMember = GetFirstPC();
while (GetIsObjectValid(oMember))
{
// Remove negative conditions
DeleteLocalInt(oMember, "CONDITION_PARALYZED");
DeleteLocalInt(oMember, "CONDITION_POISONED");
DeleteLocalInt(oMember, "CONDITION_SLEEPING");
DeleteLocalInt(oMember, "CONDITION_SILENCED");
DeleteLocalInt(oMember, "CONDITION_FEARED");
// Visual effect
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(14), oMember);
oMember = GetNextPC();
}
FloatingTextStringOnCreature("MAHAMAN: Party conditions cured!", oCaster, TRUE);
break;
}
case 2: // Heal party
{
oMember = GetFirstPC();
while (GetIsObjectValid(oMember))
{
// Full heal
eHeal = EffectHeal(GetMaxHitPoints(oMember));
ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oMember);
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(14), oMember);
oMember = GetNextPC();
}
FloatingTextStringOnCreature("MAHAMAN: Party fully healed!", oCaster, TRUE);
break;
}
case 3: // Protect party
{
oMember = GetFirstPC();
while (GetIsObjectValid(oMember))
{
// Major AC reduction
eProtect = EffectACDecrease(20);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eProtect, oMember, RoundsToSeconds(nCasterLevel));
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(21), oMember);
oMember = GetNextPC();
}
FloatingTextStringOnCreature("MAHAMAN: Party heavily protected!", oCaster, TRUE);
break;
}
case 4: // Raise the dead
{
oMember = GetFirstPC();
while (GetIsObjectValid(oMember))
{
if (GetLocalInt(oMember, "CONDITION_DEAD") == 1)
{
// Resurrect with 1 HP
DeleteLocalInt(oMember, "CONDITION_DEAD");
eHeal = EffectHeal(1);
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(14), oMember);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oMember);
}
oMember = GetNextPC();
}
FloatingTextStringOnCreature("MAHAMAN: Dead party members resurrected!", oCaster, TRUE);
break;
}
case 5: // Silence enemies
{
oArea = GetArea(oCaster);
oTarget = GetFirstObjectInArea(oArea);
while (GetIsObjectValid(oTarget))
{
if (GetIsEnemy(oTarget, oCaster))
{
eSilence = EffectSilence();
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eSilence, oTarget);
SetLocalInt(oTarget, "CONDITION_SILENCED", 1);
}
oTarget = GetNextObjectInArea(oArea);
}
FloatingTextStringOnCreature("MAHAMAN: All enemies silenced!", oCaster, TRUE);
break;
}
case 6: // Teleport enemies
{
oArea = GetArea(oCaster);
oTarget = GetFirstObjectInArea(oArea);
while (GetIsObjectValid(oTarget))
{
if (GetIsEnemy(oTarget, oCaster))
{
eTeleport = EffectVisualEffect(46); // Teleport visual effect
ApplyEffectToObject(DURATION_TYPE_INSTANT, eTeleport, oTarget);
SetLocalInt(oTarget, "TELEPORTED_AWAY", 1);
}
oTarget = GetNextObjectInArea(oArea);
}
FloatingTextStringOnCreature("MAHAMAN: All enemies teleported away!", oCaster, TRUE);
break;
}
}
// Notify level drain and spell loss
FloatingTextStringOnCreature("Lost one experience level!", oCaster, TRUE);
FloatingTextStringOnCreature("MAHAMAN spell forgotten!", oCaster, TRUE);
}