//:://///////////////////////////////////////////// //:: 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); }