187 lines
6.7 KiB
Plaintext
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);
|
|
} |