/*** Spirit Armour Spell ***/ /*** Created by Eerevann Tokani ***/ #include "tweaks.h" inherit "/std/spells/base.c"; #define SP_NAME "Spirit Armour" #define GP_COST SPIRIT_ARMOUR_GP_COST #define save_type "spells" void setup() { set_spell_name("Spirit Armour"); set_school("necromancy"); set_spell_level(3); set_target_type("none"); set_range(0); set_line_of_sight_needed(0); set_help_desc("This spell allows the caster to surround himself with " "a portion of his own life essence. The spirit armour grants " "the caster an Armour Class bonus for a limited duration.\n" " When the spell ends, the armour dissipates and the caster " "loses a bit of his life essence, suffering 2-8 points of damage " "unless a saving throw is succesfully made, which reduces the damage " "to one half. This spell affects the caster ONLY.\n" " Note: you will drop all your armour when this spell is cast," " and you cannot wear armour while it is in effect. " "Note also that the protection improves with level. " " WARNING: This spell COULD kill you if you take enough " "damage to kill yourself when it wears off.\n\n"); set_gp_cost(SPIRIT_ARMOUR_GP_COST); set_casting_time(1); set_rounds( ({ "round1" }) ); } int cast_spell(string str, object who, int quiet) { object caster; caster = who?who:this_player(); if(caster->query_spirit_armour_spell()) { tell_object(caster,"You are already affected by a Spirit " "Armour spell.\n"); return 1; } return ::cast_spell(str,who,quiet); } int round1(object caster, mixed target, mixed out_range, int time, int quiet) { int j; object* ob; object gob; if ( !quiet ) { tell_room(environment(caster),caster->query_cap_name()+ " chants, 'spiritis solis armanis'.\n", ({caster})); tell_object(caster, "You chant, 'spiritis solis armanis'.\n"); tell_object(caster, "You surround yourself with your own life " "essence.\n"); tell_room(environment(caster), (string)caster->query_cap_name()+ " finishes a spell and a gray mist surrounds "+ (string)caster->query_objective()+".\n", caster); } ob = all_inventory(caster); for (j=0;j<sizeof(ob);j++) if ( ob[j]->query_armour() && (gob=caster->query_guild_ob()) && !( gob->query_legal_armour( ob[j]->query_armour_name())) ) caster->drop_ob(ob[j]->query_name()); tell_object(caster,"Your life essence surrounds you, forcing " "off all your weak, material protections.\n"); gob = 0; gob = clone_object(SPIRIT_ARMOUR_SHADOW); gob->setshadow(caster); caster->add_extra_look(this_object()); caster->add_timed_property(SPIRIT_ARMOUR_PROPERTY, 1, SP_AR_DURATION_BASE+(SP_AR_DURATION_LEVEL_MULT*20)); return 0; } string extra_look() { return "Is surrounded by a swirling gray mist.\n"; }