//:://///////////////////////////////////////////// //:: Haman (Change) //:: haman.nss //:: Copyright (c) 2025 WizardryEE Project //::////////////////////////////////////////////// /* Has random effects and drains the caster one experience level. Level 6 Mage spell. In Wizardry: Proving Grounds of the Mad Overlord, this is a Level 6 Mage support/disable spell with 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 - 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: Random effects with level drain // 1. Get caster information object oCaster = OBJECT_SELF; int nCasterLevel = GetLevelByClass(CLASS_TYPE_WIZARD, oCaster); // Declare variables used in switch cases object oMember; object oArea; object oTarget; effect eHeal; effect eSilence; effect eTeleport; // 2. Check minimum level requirement if (nCasterLevel < 13) { FloatingTextStringOnCreature("HAMAN requires level 13+ to cast!", oCaster, TRUE); return; } // 3. 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); // 4. Roll for random effect int nEffect = Random(5); // 0-4 for five possible effects // 5. Apply the random effect switch(nEffect) { case 0: // Augmented magic { SetLocalInt(oCaster, "SPELL_DAMAGE_BONUS", 2); FloatingTextStringOnCreature("HAMAN: Party spells 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("HAMAN: 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("HAMAN: Party fully healed!", oCaster, TRUE); break; } case 3: // 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("HAMAN: All enemies silenced!", oCaster, TRUE); break; } case 4: // 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("HAMAN: All enemies teleported away!", oCaster, TRUE); break; } } // Notify level drain FloatingTextStringOnCreature("Lost one experience level!", oCaster, TRUE); }