asgard/
asgard/.settings/
asgard/area/
asgard/data/clans/
asgard/data/clans/history/
asgard/data/rosters/
asgard/src/notice/
/*********************************************************************
 *                                                                    *
 *    000000This file property of Kefka (kefka@netcom.ca) and               *
 *                          Skyntil (gvolker98@hotmail.com)           *
 *      Code file of Asgardian Nightmare (RoT 1.5/Asgard 0.1b)        *
 *      telnet://asgard.betterbox.net:5555                            *
 *      http://asgard.betterbox.net                                   *
 *********************************************************************/

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

void initialize_spell_types(void);
int focus_level(long total);
long focus_left(long total);

int focus_dam(CHAR_DATA *ch);
int focus_str(CHAR_DATA *ch);
int focus_ac(CHAR_DATA *ch);
int focus_move(CHAR_DATA *ch, int state);
int focus_hit(CHAR_DATA *ch);
int focus_dex(CHAR_DATA *ch);
int focus_hp(CHAR_DATA *ch, int state);
int focus_con(CHAR_DATA *ch);
int focus_sorc(CHAR_DATA *ch);
int focus_sorcbonus(CHAR_DATA *ch);
int focus_mana(CHAR_DATA *ch, int state);
int focus_int(CHAR_DATA *ch);
int focus_save(CHAR_DATA *ch, int state);
int focus_wis(CHAR_DATA *ch);
int focus_res(CHAR_DATA *ch);
int focus_resbonus(CHAR_DATA *ch);

DECLARE_DO_FUN( do_decapitate );
void raw_kill(CHAR_DATA * victim, CHAR_DATA * killer);

void do_pretitle(CHAR_DATA * ch, char *argument)
{
	char buf[MAX_STRING_LENGTH];
	int value;

	if (IS_SET (ch->act, PLR_NOTITLE))
		return;

	if (IS_NPC (ch))
	{
		send_to_char("Not on NPC's.\n\r", ch);
		return;
	}

	if ((ch->in_room->vnum == ROOM_VNUM_CORNER) && (!IS_IMMORTAL (ch)))
	{
		send_to_char(
				"Just keep your nose in the corner like a good little player.\n\r",
				ch);
		return;
	}

	if (ch->pcdata->pretit == '\0')
		ch->pcdata->pretit = "{x";

	if (argument[0] == '\0')
	{
		sprintf(buf, "Your current pretitle is '%s'.{x\n\r", ch->pcdata->pretit);
		send_to_char(buf, ch);
		return;
	}

	if (strlen(argument) > 45)
	{
		argument[45] = '{';
		argument[46] = 'x';
		argument[47] = '\0';
	}
	else
	{
		value = strlen(argument);
		argument[value] = '{';
		argument[value + 1] = 'x';
		argument[value + 2] = '\0';
	}

	ch->pcdata->pretit = str_dup(argument);
	send_to_char("Done.\n\r", ch);
	return;

}

void do_stances(CHAR_DATA *ch, char *argument)
{
	char buf[MSL];

	send_to_char("\n\r{b========={x{ySTANCES{x{b========={x\n\r", ch);
	sprintf(buf, "{b|>{x {gBull{x    : {w%-3d{x/200   {b<|{x\n\r",
			ch->stance[STANCE_BULL]);
	send_to_char(buf, ch);
	sprintf(buf, "{b|>{x {gViper{x   : {w%-3d{x/200   {b<|{x\n\r",
			ch->stance[STANCE_VIPER]);
	send_to_char(buf, ch);
	sprintf(buf, "{b|>{x {gCrab{x    : {w%-3d{x/200   {b<|{x\n\r",
			ch->stance[STANCE_CRAB]);
	send_to_char(buf, ch);
	sprintf(buf, "{b|>{x {gCrane{x   : {w%-3d{x/200   {b<|{x\n\r",
			ch->stance[STANCE_CRANE]);
	send_to_char(buf, ch);
	sprintf(buf, "{b|>{x {gMongoose{x: {w%-3d{x/200   {b<|{x\n\r",
			ch->stance[STANCE_MONGOOSE]);
	send_to_char(buf, ch);
	sprintf(buf, "{b|>{x {gTiger{x   : {w%-3d{x/200   {b<|{x\n\r",
			ch->stance[STANCE_TIGER]);
	send_to_char(buf, ch);
	sprintf(buf, "{b|>{x {gMantis{x  : {w%-3d{x/200   {b<|{x\n\r",
			ch->stance[STANCE_MANTIS]);
	send_to_char(buf, ch);
	sprintf(buf, "{b|>{x {gDragon{x  : {w%-3d{x/200   {b<|{x\n\r",
			ch->stance[STANCE_DRAGON]);
	send_to_char(buf, ch);
	sprintf(buf, "{b|>{x {gMonkey{x  : {w%-3d{x/200   {b<|{x\n\r",
			ch->stance[STANCE_MONKEY]);
	send_to_char(buf, ch);
	sprintf(buf, "{b|>{x {gSwallow{x : {w%-3d{x/200   {b<|{x\n\r",
			ch->stance[STANCE_SWALLOW]);
	send_to_char(buf, ch);
	send_to_char("{b========={x{y*******{x{b========={x\n\r", ch);

	return;
}

void do_power(CHAR_DATA *ch, char *argument)
{
	char buf[MSL];
	extern bool clantoggle;

	if (IS_IMMORTAL(ch))
	{
		if (!str_cmp(argument, "toggle"))
		{
			if (clantoggle)
				clantoggle = FALSE;
			else if (!clantoggle)
				clantoggle = TRUE;

			printf_to_char(ch, "Clantoggle is now %d.\n\r", clantoggle);
			return;
		}
		if (!str_cmp(argument, "reset"))
		{
			ch->pcdata->power[0] = 0;
			ch->pcdata->power[1] = 0;
			send_to_char("power reset.\n\r", ch);
		}
		if (!str_cmp(argument, "nomonk"))
		{
			NOMONKS = TRUE;
			printf_to_char(ch, "NOMONK is now %d.\n\r", NOMONKS);
		}
		if (!str_cmp(argument, "yesmonk"))
		{
			NOMONKS = FALSE;
			printf_to_char(ch, "NOMONK is now %d.\n\r", NOMONKS);
		}
		if (!str_cmp(argument, "noninja"))
		{
			printf_to_char(ch, "NONINJA is now %d.\n\r", NONINJA);
			NONINJA = TRUE;
		}
		if (!str_cmp(argument, "yesninja"))
		{
			NONINJA = FALSE;
			printf_to_char(ch, "NONINJA is now %d.\n\r", NONINJA);
		}
	}

	if (ch->class != CLASS_MONK)
	{
		send_to_char(
				"You pray for power....the gods laugh at your display.\n\r", ch);
		return;
	}
/*highlander remove swap to barbarian
	if (ch->class == CLASS_BARBARIAN)
	{
		send_to_char("\n\r{b======{x{cHIGHLAND-POWER{x{b======{x\n\r", ch);
		sprintf(buf,"{b|>{x {gKills{x    : {r%-3d{x       {b<|{x\n\r",ch->pcdata->power[POWER_KILLS]);
		 send_to_char(buf,ch); 
		sprintf(buf, "{b|>{x {gPoints{x   : {r%-3d{x       {b<|{x\n\r",
				ch->pcdata->power[POWER_POINTS]);
		send_to_char(buf, ch);
		sprintf(buf, "{b|>{x {gLevel{x    : {r%-3d{x       {b<|{x\n\r",
				ch->pcdata->power[POWER_LEVEL]);
		send_to_char(buf, ch);
		send_to_char("{b========={x{c********{x{b========={x\n\r", ch);
	} */
	if (ch->class == CLASS_MONK)
	{
		send_to_char("\n\r{b======{x{c   CHI-POWER  {x{b======{x\n\r", ch);
		sprintf(buf, "{b|>{x {gCombat{x    : {r%-3d{x      {b<|{x\n\r",
				ch->pcdata->power[0]);
		send_to_char(buf, ch);
		sprintf(buf, "{b|>{x {gDefense{x   : {r%-3d{x      {b<|{x\n\r",
				ch->pcdata->power[1]);
		send_to_char(buf, ch);
		send_to_char("{b========={x{c********{x{b========={x\n\r", ch);
	}
	return;
}

void do_focus(CHAR_DATA *ch, char *argument)
{
	char buf[MSL];

	if (ch->level < LEVEL_HERO)
	{
		send_to_char("You just aren't legendary enough to focus.\n\r", ch);
		return;
	}
	else
	{
		send_to_char(
				"\n\r{b-----------======================{x{cFOCUS{x{b======================-----------{x\n\r",
				ch);
		send_to_char(
				"{b|>{x                   {RLvl  Totl Pnts  Pnts Left  Modifier1  Modifier2 {b<|{x\n\r",
				ch);
		send_to_char(
				"{b|>{x                   {r---  ---------  ---------  ---------  --------- {b<|{x\n\r",
				ch);
		sprintf(
				buf,
				"{b|%s{x {gCombat Power{x     : {r%-2d  %-9ld  %-9ld  Dam: %4d  Str: %4d {b<|{x\n\r",
				class_focus[ch->class].combat_power == 2 ? "{CP" : class_focus[ch->class].combat_power == 1 ? "{sS" : "{xT",
				focus_level(ch->pcdata->focus[COMBAT_POWER]),
				ch->pcdata->focus[COMBAT_POWER], focus_left(
						ch->pcdata->focus[COMBAT_POWER]), focus_dam(ch),
				focus_str(ch));
		send_to_char(buf, ch);
		sprintf(
				buf,
				"{b|%s{x {gCombat Defense{x   : {r%-2d  %-9ld  %-9ld  AC: %5d  Mv: %5d {b<|{x\n\r",
				class_focus[ch->class].combat_defense == 2 ? "{CP" : class_focus[ch->class].combat_defense == 1 ? "{sS" : "{xT",
				focus_level(ch->pcdata->focus[COMBAT_DEFENSE]),
				ch->pcdata->focus[COMBAT_DEFENSE], focus_left(
						ch->pcdata->focus[COMBAT_DEFENSE]), focus_ac(ch),
				focus_move(ch,0)/* * focus_level(ch->pcdata->focus[COMBAT_DEFENSE])*/);
		send_to_char(buf, ch);
		sprintf(
				buf,
				"{b|%s{x {gCombat Agility{x   : {r%-2d  %-9ld  %-9ld  Hit: %4d  Dex: %4d {b<|{x\n\r",
				class_focus[ch->class].combat_agility == 2 ? "{CP" : class_focus[ch->class].combat_agility == 1 ? "{sS" : "{xT",
				focus_level(ch->pcdata->focus[COMBAT_AGILITY]),
				ch->pcdata->focus[COMBAT_AGILITY], focus_left(
						ch->pcdata->focus[COMBAT_AGILITY]), focus_hit(ch),
				focus_dex(ch));
		send_to_char(buf, ch);
		sprintf(
				buf,
				"{b|%s{x {gCombat Toughness{x : {r%-2d  %-9ld  %-9ld  Hp: %5d  Con: %4d {b<|{x\n\r",
				class_focus[ch->class].combat_toughness == 2 ? "{CP" : class_focus[ch->class].combat_toughness == 1 ? "{sS" : "{xT",
				focus_level(ch->pcdata->focus[COMBAT_TOUGHNESS]),
				ch->pcdata->focus[COMBAT_TOUGHNESS], focus_left(
						ch->pcdata->focus[COMBAT_TOUGHNESS]), focus_hp(ch,0)
					/*	* focus_level(ch->pcdata->focus[COMBAT_TOUGHNESS])*/,
				focus_con(ch));
		send_to_char(buf, ch);
		sprintf(
				buf,
				"{b|%s{x {gMagic Power{x      : {r%-2d  %-9ld  %-9ld  Sor: %4d  Max: +%3d%%{b<|{x\n\r",
				class_focus[ch->class].magic_power== 2 ? "{CP" : class_focus[ch->class].magic_power== 1 ? "{sS" : "{xT",
				focus_level(ch->pcdata->focus[MAGIC_POWER]),
				ch->pcdata->focus[MAGIC_POWER], focus_left(
						ch->pcdata->focus[MAGIC_POWER]), focus_sorc(ch),
				focus_sorcbonus(ch));
		send_to_char(buf, ch);
		sprintf(
				buf,
				"{b|%s{x {gMagic Resonance{x  : {r%-2d  %-9ld  %-9ld  Res: %4d  Max: +%3d%%{b<|{x\n\r",
				class_focus[ch->class].magic_resonance== 2 ? "{CP" : class_focus[ch->class].magic_resonance== 1 ? "{sS" : "{xT",
				focus_level(ch->pcdata->focus[MAGIC_RESONANCE]),
				ch->pcdata->focus[MAGIC_RESONANCE], focus_left(
						ch->pcdata->focus[MAGIC_RESONANCE]), focus_res(ch),
				focus_resbonus(ch));
		send_to_char(buf, ch);
		sprintf(
				buf,
				"{b|%s{x {gMagic Ability{x    : {r%-2d  %-9ld  %-9ld  Ma: %5d  Int: %4d {b<|{x\n\r",
				class_focus[ch->class].magic_ability== 2 ? "{CP" : class_focus[ch->class].magic_ability== 1 ? "{sS" : "{xT",
				focus_level(ch->pcdata->focus[MAGIC_ABILITY]),
				ch->pcdata->focus[MAGIC_ABILITY], focus_left(
						ch->pcdata->focus[MAGIC_ABILITY]), focus_mana(ch,0)
						/** focus_level(ch->pcdata->focus[MAGIC_ABILITY])*/,
				focus_int(ch));
		send_to_char(buf, ch);
		sprintf(
				buf,
				"{b|%s{x {gMagic Defense{x    : {r%-2d  %-9ld  %-9ld  Svs: %4d  Wis: %4d {b<|{x\n\r",
				class_focus[ch->class].magic_defense== 2 ? "{CP" : class_focus[ch->class].magic_defense== 1 ? "{sS" : "{xT",
				focus_level(ch->pcdata->focus[MAGIC_DEFENSE]),
				ch->pcdata->focus[MAGIC_DEFENSE], focus_left(
						ch->pcdata->focus[MAGIC_DEFENSE]), focus_save(ch, 0),
				focus_wis(ch));
		send_to_char(buf, ch);
		send_to_char(   "{b|   {gKey - {CP{g:Primary, {sS{g:Secondary, {xT{g:Tertiary Focus Skills             {b|\n\r",ch);
		send_to_char(
				"{b-----------===================={x{c********{x{b=====================-----------{x\n\r",
				ch);

		if (ch->pcdata->focus[CURRENT_FOCUS] == COMBAT_POWER)
			send_to_char("Your current focus is Combat Power.\n\r", ch);
		else if (ch->pcdata->focus[CURRENT_FOCUS] == COMBAT_DEFENSE)
			send_to_char("Your current focus is Combat Defense.\n\r", ch);
		else if (ch->pcdata->focus[CURRENT_FOCUS] == COMBAT_AGILITY)
			send_to_char("Your current focus is Combat Agility.\n\r", ch);
		else if (ch->pcdata->focus[CURRENT_FOCUS] == COMBAT_TOUGHNESS)
			send_to_char("Your current focus is Combat Toughness.\n\r", ch);
		else if (ch->pcdata->focus[CURRENT_FOCUS] == MAGIC_POWER)
			send_to_char("Your current focus is Magic Power.\n\r", ch);
		else if (ch->pcdata->focus[CURRENT_FOCUS] == MAGIC_RESONANCE)
			send_to_char("Your current focus is Magic Resonance.\n\r", ch);
		else if (ch->pcdata->focus[CURRENT_FOCUS] == MAGIC_ABILITY)
			send_to_char("Your current focus is Magic Ability.\n\r", ch);
		else if (ch->pcdata->focus[CURRENT_FOCUS] == MAGIC_DEFENSE)
			send_to_char("Your current focus is Magic Defense.\n\r", ch);

		sprintf(buf,"{xYour current level bonus is %d.\n\r",tier_level_bonus(ch));
		send_to_char(buf, ch);
		sprintf(buf,"{xYour current spell level bonus is %d.\n\r",tier_spell_bonus(ch));
		send_to_char(buf, ch);

	}
	return;
}

void do_rubeyes(CHAR_DATA *ch, char *argument)
{
	char arg[MAX_INPUT_LENGTH];
	int burnt = 0;
	AFFECT_DATA af, *paf, *fire;
	bool found = 0;

	one_argument(argument, arg);

	if (IS_NPC( ch ))
		return;

	if (ch->fighting != NULL)
	{
		send_to_char("Not while fighting!\n\r", ch);
		return;
	}

	if (!IS_AFFECTED(ch,AFF_BLIND))
	{
		send_to_char("But your eyes aren't blinded!\n\r", ch);
		return;
	}

	for (paf = ch->affected; paf != NULL; paf = paf->next)
	{
		switch (paf->location)
		{
		case APPLY_CRIPPLE_HEAD:
			found = 1;
			break;
		}
		if (found)
		{
			send_to_char("You can't rub out the crippling effects!\n\r", ch);
			return;
		}
	}

	if (number_percent() > 60)
	{
		act("You rub your eyes till they bleed but remain blind.", ch, NULL,
				NULL, TO_CHAR);
		act("$n rubs $s eyes violently.", ch, NULL, NULL, TO_ROOM );
		WAIT_STATE(ch,4)
;		return;
	}

	if ( is_affected(ch,skill_lookup("fire breath")))
	{
		int fchance = 0;

		fchance = number_percent();

		if ( fchance < 5)
		{
			act("You start to rub your eyes but fail.",ch,NULL,NULL,TO_CHAR);
			act("You double over as the smoke in your lungs sends you into a coughing fit!",ch,NULL,NULL,TO_CHAR);
			act("$n suddenly doubles over and begins to cough uncontrollably!",ch,NULL,NULL,TO_ROOM);
			WAIT_STATE(ch,12);
			act("Your coughing fit subsides.",ch,NULL,NULL,TO_CHAR);
			return;
		}

		if ( fchance < 10)
		{
			act("You try to rub the smoke out of your eyes but fail.",ch,NULL,NULL,TO_CHAR);
			act("$n rubs $s eyes violently.",ch,NULL,NULL,TO_ROOM);
			WAIT_STATE(ch,3);
			return;
		}

		for ( fire = ch->affected; fire != NULL; fire = fire->next)
		{
			if ( fire->type == skill_lookup("fire breath"))
			{
				burnt = fire->duration;
				break;
			}
		}

		if ( burnt > 1 && fchance < 50)
		{
			affect_strip(ch,skill_lookup("fire breath"));

			af.where = TO_AFFECTS;
			af.location = APPLY_HITROLL;
			af.modifier = -25;
			af.level = fire->level;
			af.bitvector = AFF_BLIND;
			af.type = skill_lookup("fire breath");
			af.duration = 1;

			affect_to_char(ch,&af);

			WAIT_STATE( ch, 6 );

			act("You manage to rub some smoke out of your eyes.",ch,NULL,NULL,TO_CHAR);
			act("Smoke flows out from $n's eyes.",ch,NULL,NULL,TO_ROOM);
			return;
		}
		else if ( burnt > 0 && fchance < 75 )
		{
			affect_strip(ch,skill_lookup("fire breath"));

			af.where = TO_AFFECTS;
			af.location = APPLY_HITROLL;
			af.duration = 0;
			af.type = skill_lookup("fire breath");
			af.level = 101;
			af.bitvector = AFF_BLIND;
			af.modifier = -25;

			affect_to_char(ch,&af);

			if (ch->move > 1)
			ch->move = ch->move*9/10;

			act("Your eyes begin to clear, the smoke dissipating",ch,NULL,NULL,TO_CHAR);
			act("$n's eyes begin to water.",ch,NULL,NULL,TO_ROOM);

			WAIT_STATE(ch,4);
			return;
		}
	}

	if ( is_affected(ch,skill_lookup("blindness")))
	{
		//act("Try as you might, you the magic will not rub away!",ch,NULL,NULL,TO_CHAR);
		//WAIT_STATE(ch,2);
		//return;

		if(number_percent() < 50)
		{
			act("You try to rub the darkness from your eyes but fail.",ch,NULL,NULL,TO_CHAR);
			act("$n rubs $s eyes violently.",ch,NULL,NULL,TO_ROOM);
		}
		for(fire = ch->affected; fire != NULL; fire = fire->next)
		{
			if(fire->type == skill_lookup("blindness"))
			{
				burnt = fire->duration;
				break;
			}
		}
		if(burnt > 1)
		{
			affect_strip(ch,skill_lookup("blindness"));
			af.where = TO_AFFECTS;
			af.location = APPLY_HITROLL;
			af.modifier = -25;
			af.level = fire->level;
			af.bitvector = AFF_BLIND;
			af.type = skill_lookup("blindness");
			af.duration = (burnt-2);
			affect_to_char(ch,&af);
			WAIT_STATE(ch, 36);
			act("You manage to rub some of the darkness from your eyes.",ch,NULL,NULL,TO_CHAR);
			act("Darkness flows out from $n's eyes.",ch,NULL,NULL,TO_ROOM);
			return;
		}
		else if (burnt > 0)
		{
			affect_strip(ch,skill_lookup("blindness"));
			af.where=TO_AFFECTS;
			af.location = APPLY_HITROLL;
			af.duration = 0;
			af.type = skill_lookup("blindness");
			af.level = 101;
			af.bitvector = AFF_BLIND;
			af.modifier = -25;
			affect_to_char(ch,&af);
			if(ch->move > 1)
			ch->move = ch->move/2;
			act("Your eyes begin to clear, the darkness dissapating",ch,NULL,NULL,TO_CHAR);
			act("$n's eyes begin to water.",ch,NULL,NULL,TO_ROOM);
			WAIT_STATE(ch,4);
			return;
		}
	}

	act( "You can see again!!", ch, NULL, ch, TO_CHAR );
	act( "$n looks around with googly eyes!", ch, NULL, ch, TO_ROOM );
	affect_strip(ch,gsn_dirt);
	affect_strip(ch,gsn_blindness_dust);
	affect_strip(ch,gsn_solar_flare);
	affect_strip(ch,skill_lookup("blindness"));
	affect_strip(ch,skill_lookup("smokebomb"));
	affect_strip(ch,skill_lookup("solar"));
	affect_strip(ch,skill_lookup("fire breath"));
	if(IS_SET(ch->affected_by,AFF_BLIND))
	REMOVE_BIT(ch->affected_by,AFF_BLIND);

	WAIT_STATE(ch,4);
	return;
}
void do_smother(CHAR_DATA *ch, char *argument)
{
	CHAR_DATA *victim;
	char arg[MAX_INPUT_LENGTH];

	one_argument(argument, arg);

	if (IS_NPC( ch ))
		return;

	if (arg[0] == '\0')
	{
		send_to_char("Smother who?\n\r", ch);
		return;
	}

	if ((victim = get_char_room(ch, arg)) == NULL)
	{
		send_to_char("They aren't here.\n\r", ch);
		return;
	}

	if (ch == victim)
	{
		send_to_char("You cannot smother yourself.\n\r", ch);
		return;
	}

	if (!is_affected(victim, gsn_on_fire))
	{
		send_to_char("But they are not on fire!\n\r", ch);
		return;
	}

	if (number_percent() > 40 && number_bits(2) != 0)
	{
		act("You try to smother the flames around $N but fail!", ch, NULL,
				victim, TO_CHAR );
		act("$n tries to smother the flames around you but fails!", ch, NULL,
				victim, TO_VICT );
		act("$n tries to smother the flames around $N but fails!", ch, NULL,
				victim, TO_NOTVICT );
		return;
	}

	act("You manage to smother the flames around $M!", ch, NULL, victim,
			TO_CHAR );
	act("$n manages to smother the flames around you!", ch, NULL, victim,
			TO_VICT );
	act("$n manages to smother the flames around $N!", ch, NULL, victim,
			TO_NOTVICT );
	affect_strip(victim, gsn_on_fire);
	return;
}

void do_rolldirt(CHAR_DATA *ch, char *argument)
{
	char arg[MAX_INPUT_LENGTH];

	one_argument(argument, arg);

	if (IS_NPC( ch ))
		return;

	if (!is_affected(ch, gsn_on_fire))
	{
		send_to_char("But you are not on fire!\n\r", ch);
		return;
	}

	if (number_percent() > 40 && number_bits(2) != 0)
	{
		act(
				"You roll in the dirt but cannot suppress the flames surrounding you.",
				ch, NULL, NULL, TO_CHAR);
		act("$n rolls in the dirt trying to smother the flames around $m!", ch,
				NULL, NULL, TO_ROOM );
		return;
	}

	act("The flames around you vanish in the dirt!", ch, NULL, ch, TO_CHAR );
	act("$n manages to put out $s flames!", ch, NULL, ch, TO_ROOM );
	affect_strip(ch, gsn_on_fire);
	return;
}

/*
 * This code is written for Asgardian NightMare
 * by Skyntil(Gabe Volker) 4/20/00
 * Can be expanded to write a whole file if so desired.
 *
 * This Function written to write the magtype.c file from AN values.
 * Basically Declares each spell to be of type MAGIC_NONE
 * Then is to be edited with correct types
 *
 */
void write_spell_file()
{
	FILE *fp;
	char buf[MAX_STRING_LENGTH / 4];
	int i;

	//Open file

	sprintf(buf, "%s", "magtype.c");
	if ((fp = fopen(buf, "w")) == NULL)
	{
		perror(buf);
		exit(1);
	}

	// Write Credits
	fprintf(fp,
			"/*\n * Initialize Spell Types -- Do not forget to add new spells to here.\n");
	fprintf(fp, " * This File Can be Generated on Bootup If so Desired.\n");
	fprintf(fp,
			" * It could be also done online. This would avoid having to add\n");
	fprintf(fp, " * new spells manually.\n");
	fprintf(fp, " */\n");

	// Write Includes
	fprintf(fp, "#include \"include.h\"\n");

	// Write Declarations
	fprintf(fp,
			"#define SPELL_TYPE(name,type) magic_table[skill_lookup(name)] = type;\n");

	// Write Function
	fprintf(fp, "void initialize_spell_types( )\n");
	fprintf(fp, "{\n");
	fprintf(fp, "log_string( \"Initializing Magic Types.\" );");

	// Now the spells
	for (i = 0; i < MAX_SKILL; i++)
	{
		if (skill_table[i].spell_fun != spell_null)
			fprintf(fp, "SPELL_TYPE( \"%s\", MAGIC_NONE );\n",
					skill_table[i].name);
	}

	// Close it off
	fprintf(fp, "\nreturn;\n}\n");

	fclose(fp);

	// Close file
	return;
}

void do_learned(CHAR_DATA *ch, char *argument)
{
	char buf[MSL];

	send_to_char("\n\r{b======={x{yLEARNED MAGIC{x{b======={x\n\r", ch);
	sprintf(buf, "{b|>{x {gWhite{x  : {w%-3d{x/50      {b<|{x\n\r",
			ch->magic[MAGIC_WHITE]);
	send_to_char(buf, ch);
	sprintf(buf, "{b|>{x {gRed{x    : {w%-3d{x/50      {b<|{x\n\r",
			ch->magic[MAGIC_RED]);
	send_to_char(buf, ch);
	sprintf(buf, "{b|>{x {gBlue{x   : {w%-3d{x/50      {b<|{x\n\r",
			ch->magic[MAGIC_BLUE]);
	send_to_char(buf, ch);
	sprintf(buf, "{b|>{x {gGreen{x  : {w%-3d{x/50      {b<|{x\n\r",
			ch->magic[MAGIC_GREEN]);
	send_to_char(buf, ch);
	sprintf(buf, "{b|>{x {gBlack{x  : {w%-3d{x/50      {b<|{x\n\r",
			ch->magic[MAGIC_BLACK]);
	send_to_char(buf, ch);
	sprintf(buf, "{b|>{x {gOrange{x : {w%-3d{x/50      {b<|{x\n\r",
			ch->magic[MAGIC_ORANGE]);
	send_to_char(buf, ch);
	send_to_char("{b========{x{y***********{x{b========{x\n\r", ch);

	return;
}

void do_combat(CHAR_DATA *ch, char *argument)
{
	char buf[MSL];
	float damred;

	if (!is_warrior_class(ch->class))
	{
		send_to_char("You do not have any special combat abilities.\n\r", ch);
		return;
	}

	damred = ((((float) ch->toughness / 5) / 34) / 10);

	send_to_char("\n\r{b========={x{yCOMBAT{x{b=========={x\n\r", ch);
	sprintf(buf, "{b|>{x {gToughness{x : {w%-3d{x/500 {b<|{x\n\r",
			ch->toughness);
	send_to_char(buf, ch);
	sprintf(buf, "{b|> {gDam Reduce{& : {w%.3f{&%s  {b<|\n\r{x", damred * 100,
			"%");
	send_to_char(buf, ch);
	send_to_char("{b========={y*******{b========={x\n\r", ch);

	if (!str_cmp(argument, "all"))
		do_stances(ch, "");
	return;
}

void do_decapitate(CHAR_DATA *ch, char *argument)
{
	char arg[MSL];
	CHAR_DATA *victim;

	one_argument(argument, arg);

	if (arg[0] == '\0')
	{
		send_to_char("Decapitate whom?\n\r", ch);
		return;
	}

	if (IS_NPC(ch))
		return;

	if (IS_AFFECTED(ch,AFF_CHARM) || (IS_NPC(ch) && IS_SET(ch->act,ACT_PET)))
		return;

	if ((victim = get_char_room(ch, arg)) == NULL)
	{
		send_to_char("They aren't here to be decapitated.\n\r", ch);
		return;
	}

	if (victim == ch)
	{
		send_to_char("You can't do that.\n\r", ch);
		return;
	}

	if (ch->fighting != NULL)
	{
		send_to_char("Finish combat before decapitating!\n\r", ch);
		return;
	}

	if (victim->position > POS_INCAP)
	{
		send_to_char(
				"Your victim needs to be mortally wounded for you to kill them.\n\r",
				ch);
		return;
	}

	if (!IS_SET(ch->plyr,PLAYER_SUBDUE))
	{
		send_to_char("You must be Subduing to decapitate your victim.\n\r", ch);
		return;
	}

	act("$n decapitates $N brutally!! A fountain of {!GORE{0 flows out of $N ",
			ch, NULL, victim, TO_NOTVICT);
	act("$n decapitates you! You feel numb.", ch, NULL, victim, TO_VICT);
	act("You decapitate $N brutally!! You are covered in {!GORE{0!", ch, NULL,
			victim, TO_CHAR);
	REMOVE_BIT(ch->plyr,PLAYER_SUBDUE);
	victim->position = POS_DEAD;
	act("$n is DEAD!!", victim, 0, 0, TO_ROOM );
	send_to_char(
			"You Gaze At You're Corpse From  Distance As All Goes Dim!!\n\r\n\r",
			victim);

	/*
	 * Payoff for killing things.
	 */
	if (victim->position == POS_DEAD)
		raw_kill(victim, ch);

	SET_BIT(ch->plyr,PLAYER_SUBDUE);

	sprintf(log_buf, "%s was DECAPITATED by %s at %s [room %d]", victim->name,
			ch->name, ch->in_room->name, ch->in_room->vnum);
	wiznet(log_buf, NULL, NULL, WIZ_DEATHS, 0, 0);

	tail_chain();
	return;
}