asgard/
asgard/.settings/
asgard/area/
asgard/data/clans/
asgard/data/clans/history/
asgard/data/rosters/
asgard/src/notice/
/* These are new additions for unused classes in an attempt to make people want to play them.
 These skills/spells are for use in Asgardian Nightmare only, and written by Bree.  */

#if defined( macintosh )
#include <types.h>
#include <time.h>
#else
#include <sys/types.h>
#include <errno.h>		
#include <unistd.h>		
#include <sys/time.h>
#endif
#include <ctype.h>		
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include "merc.h"
#include "newclan.h"
#include "magic.h"
#include "tables.h"

int focus_dam(CHAR_DATA *ch);

/* 
 Make changes for new spells in:
 Const.c
 Magic.h
 Magtype.c
 */

/* 
 Name: Madness
 Type: Spell - Orange Magic
 Information: This is a modified berserk/frenzy with
 better stats for weaker magic classes.
 Class: Conjurer
 */

void spell_madness(int sn, int level, CHAR_DATA *ch, void *vo, int target)
{
	CHAR_DATA *victim = (CHAR_DATA *) vo;
	AFFECT_DATA af;

	if (is_affected(victim, sn) || IS_AFFECTED(victim,AFF_BERSERK))
	{
		if (victim == ch)
			send_to_char("You are already raging around in madness.\n\r", ch);
		else
			act("$N is already raging around in madness.", ch, NULL, victim,
					TO_CHAR);
		return;
	}

	if (is_affected(victim, skill_lookup("calm")))
	{
		if (victim == ch)
			send_to_char("Why don't you just relax for a while?\n\r", ch);
		else
			act("$N doesn't look like $e wants to fight anymore.", ch, NULL,
					victim, TO_CHAR);
		return;
	}

	if ((IS_GOOD(ch) && !IS_GOOD(victim)) || (IS_NEUTRAL(ch)
			&& !IS_NEUTRAL(victim)) || (IS_EVIL(ch) && !IS_EVIL(victim)))
	{
		act("Your god doesn't seem to like $N", ch, NULL, victim, TO_CHAR);
		return;
	}

	af.where = TO_AFFECTS;
	af.type = sn;
	af.level = level;
	af.duration = level / 2;
	af.modifier = level / 4;
	af.bitvector = AFF_BERSERK;

	af.location = APPLY_HITROLL;
	affect_to_char(victim, &af);

	af.location = APPLY_DAMROLL;
	affect_to_char(victim, &af);

	af.modifier = 10 * (level / 36);
	af.location = APPLY_AC;
	affect_to_char(victim, &af);

	send_to_char("You are filled with insane madness!\n\r", victim);
	act("$n gets an insane look in $s eyes!", victim, NULL, NULL, TO_ROOM);
}

/* 
 Name: Fireward
 Type: Spell - Red Magic
 Information: Add's resist fire to a player.
 Class: Voodan
 */

void spell_fireward(int sn, int level, CHAR_DATA *ch, void *vo, int target)
{
	CHAR_DATA *victim = (CHAR_DATA *) vo;
	AFFECT_DATA af;

	if (is_affected(ch, sn))
	{
		if (victim == ch)
			send_to_char("You are already resisting the flames.\n\r", ch);
		else
			act("$N begins to ward away the flames.", ch, NULL, victim, TO_CHAR);
		return;
	}

	af.where = TO_RESIST;
	af.type = sn;
	af.level = level;
	af.duration = level/6;
	af.location = APPLY_NONE;
	af.modifier = 0;
	af.bitvector = RES_FIRE;
	affect_to_char(victim, &af);

	act("$n looks stronger against the flame.", victim, NULL, NULL, TO_ROOM );
	send_to_char("You begin warding off the flames.\n\r", victim);

	return;

}

/* 
 Name: Divine Intervention
 Type: Spell - White
 Information:
 Class: Paladin
 */

void spell_interven(int sn, int level, CHAR_DATA *ch, void *vo, int target)
{
	CHAR_DATA *victim = (CHAR_DATA *) vo;
	AFFECT_DATA af;

	if (is_affected(ch, sn))
	{
		if (victim == ch)
			send_to_char(
					"You are already channeling your divine intervention.\n\r",
					ch);
		else
			act("$N glows white and suddenly looks more divine!.", ch, NULL,
					victim, TO_CHAR);
		return;
	}

	af.where = TO_AFFECTS;
	af.type = sn;
	af.level = ch->level;
	af.duration = level / 3.5;
	af.bitvector = 0;

	af.location = APPLY_DAMROLL;
	af.modifier = 10;
	af.duration = level / 3.5;
	af.bitvector = 0;
	affect_to_char(ch, &af);

	af.location = APPLY_REGEN;
	af.modifier = 25;
	af.duration = level / 3.5;
	affect_to_char(ch, &af);
	af.location = APPLY_HIT;
	af.modifier = 100;
	af.duration = level / 3.5;

	affect_to_char(ch, &af);

	act("$n prays for divine intervention!", victim, NULL, NULL, TO_ROOM );
	send_to_char("You gain the help of your god!\n\r", victim);

	return;

}

/* 
 Name: acid ward
 Type: Spell - Red Magic
 Information: Add's resist acid to a player.
 Class: Alchemist
 */

void spell_acidward(int sn, int level, CHAR_DATA *ch, void *vo, int target)
{
	CHAR_DATA *victim = (CHAR_DATA *) vo;
	AFFECT_DATA af;

	if (is_affected(ch, sn))
	{
		if (victim == ch)
			send_to_char("You are already resisting acid.\n\r", ch);
		else
			act("$N begins to ward away acid.", ch, NULL, victim, TO_CHAR);
		return;
	}

	af.where = TO_RESIST;
	af.type = sn;
	af.level = level;
	af.duration = level/6;
	af.location = APPLY_NONE;
	af.modifier = 0;
	af.bitvector = RES_ACID;
	affect_to_char(victim, &af);

	act("$n looks stronger against acid.", victim, NULL, NULL, TO_ROOM );
	send_to_char("You begin warding off acid.\n\r", victim);

	return;

}

/* 
 Name: ice ward
 Type: Spell - Blue Magic
 Information: Add's resist ice to a player.
 Class: Warlock
 */

void spell_iceward(int sn, int level, CHAR_DATA *ch, void *vo, int target)
{
	CHAR_DATA *victim = (CHAR_DATA *) vo;
	AFFECT_DATA af;

	if (is_affected(ch, sn))
	{
		if (victim == ch)
			send_to_char("You are already resisting ice.\n\r", ch);
		else
			act("$N begins to ward away ice.", ch, NULL, victim, TO_CHAR);
		return;
	}

	af.where = TO_RESIST;
	af.type = sn;
	af.level = level;
	af.duration = level/6;
	af.location = APPLY_NONE;
	af.modifier = 0;
	af.bitvector = RES_COLD;
	affect_to_char(victim, &af);

	act("$n looks stronger against ice.", victim, NULL, NULL, TO_ROOM );
	send_to_char("You begin warding off ice.\n\r", victim);

	return;
}
//Voodan sense vitality by fesdor, works with do_sense.
void spell_sense_vitality(int sn, int level, CHAR_DATA *ch, void *vo,
		int target)
{
	AFFECT_DATA af;
	CHAR_DATA *victim = (CHAR_DATA *) vo;
	int chance = 100;

	chance -= (get_curr_stat(victim, STAT_CON) * 3);
	chance += (get_curr_stat(ch, STAT_CON) * 2);

	if (victim == ch)
	{
		send_to_char("You can't establish a link with yourself!\n\r", ch);
		return;
	}

	if (IS_NPC(victim))
	{
		send_to_char("You can only use this spell on players.\n\r", ch);
		return;
	}

	if ((ch->fighting == NULL) && (!IS_NPC( ch )) && (!IS_NPC( victim )))
	{
		ch->attacker = TRUE;
		victim->attacker = FALSE;
	}

	if (is_affected(victim, gsn_sense))
	{
		send_to_char("Someone is already linked to that person.\n\r", ch);
		return;
	}

	else if (is_affected(ch, gsn_sense))
	{
		send_to_char("You are already attuned to someone's vitals!\n\r", ch);
		return;
	}
	else if (number_percent() < chance)
	{

		af.where = TO_AFFECTS;
		af.type = gsn_sense;
		af.level = ch->level;
		af.duration = ch->level / 5;
		af.location = APPLY_REGEN;
		af.modifier = victim->hit / 100;
		af.bitvector = 0;

		affect_to_char(ch, &af);

		af.modifier = 0;

		affect_to_char(victim, &af);

		send_to_char(
				"{cYou feel a chill as some strange force invades your very soul!{x\n\r",
				victim);
		send_to_char(
				"{RYou feel a second pulse in your fingertips as you become attuned to their vitals!{x\n\r",
				ch);
		return;
	}
	else
	{
		send_to_char("{CYou feel slightly disturbed but it fades.{x\n\r",
				victim);
		send_to_char(
				"{rYour heart begins to beat for two, but the feeling subsides.{x\n\r",
				ch);
		return;
	}
	return;
}