DBTFF/clans/
DBTFF/deity/
DBTFF/houses/
DBTFF/player/a/
DBTFF/space/
/***************************************************************************************************/
/*                                     FIERIAN SKILLS v1.0                                         */
/*                                          Coded By                                               */
/*                                           Arbin                                                 */
/* Attacks:  														   */
/*        'Fireball'      'Fireforge'      'Firestorm'      'Magma Touch'      'Novawave'		   */
/*	    'Eruption'													   */
/*																   */
/* Transformations:                         									   */
/*                                                                                                 */
/*        'Puppet'      'Superflame1'      'Superflame2'      'Superflame3'      'Ultraflame'      */
/*                                                                                                 */
/***************************************************************************************************/

#include <sys/types.h>
#include <ctype.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include "mud.h"

extern void transStatApply args( ( CHAR_DATA * ch, int strMod, int spdMod, int intMod, int conMod ) );
extern void transStatRemove args( ( CHAR_DATA * ch ) );

void do_fireball(CHAR_DATA *ch, char *argument )
{
    CHAR_DATA *victim;
    int dam = 0;

    if( IS_NPC(ch) && is_split(ch) )
    {
        if( !ch->master )
          return;
        if( !can_use_skill( ch->master, number_percent(), gsn_energy_ball ))
          return;
    }

    if ( IS_NPC(ch) && IS_AFFECTED( ch, AFF_CHARM ) )
    {
	send_to_char( "You can't concentrate enough for that.\n\r", ch );
	return;
    }

    if ( !IS_NPC(ch)
    &&   ch->exp < skill_table[gsn_fireball]->skill_level[ch->class] )
    {
	send_to_char("You can't do that.\n\r", ch );
	return;
    }

    if ( ( victim = who_fighting( ch ) ) == NULL )
    {
	send_to_char( "You aren't fighting anyone.\n\r", ch );
	return;
    }

	if ( ch->mana < skill_table[gsn_fireball]->min_mana )
	{
	    send_to_char( "You don't have enough energy.\n\r", ch );
	    return;
	}
	if (ch->focus < skill_table[gsn_fireball]->focus)
    {
		send_to_char( "You need to focus more.\n\r", ch );
		return;
    }
    else
    	ch->focus -= skill_table[gsn_fireball]->focus;

    WAIT_STATE( ch, skill_table[gsn_fireball]->beats );

    sh_int z = get_aura(ch);

    if ( can_use_skill(ch, number_percent(),gsn_fireball ) )
    {
	dam = get_attmod(ch, victim) * number_range( 6, 8 );
	if (ch->charge > 0)
		dam = chargeDamMult(ch, dam);
	act( z, "You burn $N with your fireball. &W[$t]", ch, num_punct(dam), victim, TO_CHAR );
	act( z, "$n burns you with $s fireball. &W[$t]", ch, num_punct(dam), victim, TO_VICT );
	act( z, "$n burns $N with $n fireball. &W[$t]", ch, num_punct(dam), victim, TO_NOTVICT );
        dam = ki_absorb( victim, ch, dam, gsn_fireball );
	learn_from_success( ch, gsn_fireball );
	global_retcode = damage( ch, victim, dam, TYPE_HIT );
    }
    else
    {
	act( z, "You missed $N with your fireball.", ch, NULL, victim, TO_CHAR );
	act( z, "$n misses you with $s fireball.", ch, NULL, victim, TO_VICT );
	act( z, "$n missed $N with $s fireball.", ch, NULL, victim, TO_NOTVICT );
	learn_from_failure( ch, gsn_fireball );
	global_retcode = damage( ch, victim, 0, TYPE_HIT );
    }

    if( !is_android_h(ch) )
      ch->mana -= skill_table[gsn_fireball]->min_mana;
    return;
}

void do_fireforge(CHAR_DATA *ch, char *argument )
{
    OBJ_DATA *o;
    OBJ_INDEX_DATA *pObjIndex;

    if( IS_NPC(ch) )
          return;

    if( argument[0] == '\0' )
    {
	ch_printf(ch,"\n\rSyntax: fireforge <item>\n\r");
	ch_printf(ch,"\n\r");
	ch_printf(ch,"Item can only be one of the following:\n\r");
	ch_printf(ch,"\n\r");
	ch_printf(ch,"armor leggings sword\n\r");
	return;
    }

    if( !(!str_cmp(argument,"armor")) && !(!str_cmp(argument,"leggings")) &&
	!(!str_cmp(argument,"sword")) )
    {
	do_fireforge(ch,"");
	return;
    }

    if ( IS_NPC(ch) && IS_AFFECTED( ch, AFF_CHARM ) )
    {
        send_to_char( "You can't concentrate enough for that.\n\r", ch );
        return;
    }
    if ( !IS_NPC(ch)
    &&   ch->exp < skill_table[gsn_fireforge]->skill_level[ch->class] )
    {
        send_to_char( "You can't do that.\n\r", ch );
        return;
    }
    if ( ch->mana < skill_table[gsn_fireforge]->min_mana )
    {
        send_to_char( "You don't have enough energy.\n\r", ch );
        return;
    }
    if( ch->carry_number >= 19 )
    {
	ch_printf(ch,"You haven't got any room.\n\r");
	return;
    }


    WAIT_STATE( ch, skill_table[gsn_fireforge]->beats );
    if ( can_use_skill(ch, number_percent(),gsn_fireforge ) )
    {
	int a = 0;
	if( !str_cmp(argument,"armor") )
	  a = 1341;
	else if( !str_cmp(argument,"leggings") )
	  a = 1342;
	else if( !str_cmp(argument,"sword") )
	  a = 1340;
	if( a == 0 )
	{
	  bug("Serious problem in function fire forge",0);
	  return;
	}
	act( AT_SKILL, "You harness the fire in your body and forge an item.", ch, NULL, NULL, TO_CHAR );
	act( AT_SKILL, "$n harnesses the mystical fires in his body and forges an item.", ch, NULL, NULL, TO_NOTVICT );
        learn_from_success( ch, gsn_fireforge );
	pObjIndex = get_obj_index( a );
	o = create_object_new( pObjIndex, 1 , ORIGIN_OINVOKE, ch->name );
	o = obj_to_char( o, ch );
	save_char_obj( ch );
    }
    else
    {
         act( AT_SKILL, "You fail to forge an item with your fire.", ch, NULL, NULL, TO_CHAR );
         act( AT_SKILL, "$n fails to use $s fire to forge an item.", ch, NULL, NULL, TO_NOTVICT );
        learn_from_failure( ch, gsn_fireforge );
    }
    ch->mana -= skill_table[gsn_fireforge]->min_mana;
    return;
}

void do_firestorm(CHAR_DATA *ch, char *argument )
{
    CHAR_DATA *victim;
    int dam = 0;

    if( IS_NPC(ch) && is_split(ch) )
    {
        if( !ch->master )
          return;
        if( !can_use_skill( ch->master, number_percent(), gsn_firestorm))
          return;
    }

    if ( IS_NPC(ch) && IS_AFFECTED( ch, AFF_CHARM ) )
    {
	send_to_char( "You can't concentrate enough for that.\n\r", ch );
	return;
    }

    if ( !IS_NPC(ch) && ch->exp < skill_table[gsn_firestorm]->skill_level[ch->class] )
    {
	send_to_char( "You can't do that.\n\r", ch );
	return;
	}

    if ( ( victim = who_fighting( ch ) ) == NULL )
    {
	send_to_char( "You aren't fighting anyone.\n\r", ch );
	return;
    }

	if ( ch->mana < skill_table[gsn_firestorm]->min_mana )
	{
	    send_to_char( "You don't have enough energy.\n\r", ch );
	    return;
	}
	if (ch->focus < skill_table[gsn_firestorm]->focus)
    {
		send_to_char( "You need to focus more.\n\r", ch );
		return;
    }
    else
    	ch->focus -= skill_table[gsn_firestorm]->focus;

    WAIT_STATE( ch, skill_table[gsn_firestorm]->beats );
    if ( can_use_skill(ch, number_percent(),gsn_firestorm ) )
    {
	switch (number_range(1,100))
	{
    case 100:
    case 99:
 	if (IS_NPC(victim) || (!IS_NPC(victim) && (!xIS_SET(ch->act, PLR_SPAR) || !xIS_SET(ch->act, PLR_SPAR) )))
 	{

		/* Redone so that instant death can't be abused to instant kill
		 * players over 2x their power. -- Islvin
		 */
		if (victim->pl / ch->pl >= 2)
		{
			act( AT_RED, "&zFrom the palms of your hands archs a fiery wave of fire, You can only control it enough to barely keep it off the ground. Suddenly it begins to rage out of control. It burns the heavens causing a &RFire Storm&z. Fire at well over one thousand degrees engulfs the area.", ch, NULL, victim, TO_CHAR );
			act( AT_RED, "&zAs it rains down, $N produces a large fire resistant shield, saving $S ass.", ch, NULL, victim, TO_CHAR );
			act( AT_RED, "&z$n creates a wave of fire from $s palms, but $e is unable to control it, barely keeping it on the ground. Suddenly it rages out of control and flares into the heavens, causing a &RFire Storm&z.", ch, NULL, victim, TO_VICT );
			act( AT_RED, "&zAs it rains down, you produce a large fire resistant shield, saving your ass.", ch, NULL, victim, TO_VICT );
			act( AT_RED, "&z$n creates a wave of fire, which $e loses control of, barely keeping it on the ground. Suddenly it flares into the heavens causing a &RFire Storm&z..", ch, NULL, victim, TO_NOTVICT );
			act( AT_RED, "&zAs it rains down, $N produces a large fire resistant shield, saving $S ass.", ch, NULL, victim, TO_NOTVICT );
			dam = 0;
			break;
		}

/* Redone so it _is_ instant death -- Melora
 * 	if (victim->max_hit >= victim->hit)
 * 		dam = victim->max_hit * 2;
 * 	else
 * 		dam = victim->hit * 2;
 */
		dam = 999999999;
	act( AT_RED, "&zFrom the palms of your hands archs a fiery wave f fire, You can only control it enough to barely keep it off the ground. Suddenly it begins to rage out of control. It burns the heavens causing a &RFire Storm&z. Fire at well over one thousand degrees engulfs the area.", ch, NULL, victim, TO_CHAR );
	act( AT_DGREY, "&zAs it rains down a big fiery rain drop lands on $N, creamating $M instantly!!", ch, NULL, victim, TO_CHAR );
	act( AT_RED, "&z$n creates a wave of fire from $s palms, but $e is unable to control it, barely keeping it on the ground. Suddenly it rages out of control and flares into the heavens, causing a &RFire Storm&z.", ch, NULL, victim, TO_VICT );
	act( AT_DGREY, "&zFire begins to rain down, you look up in time to see a big fiery rain drop land on you. It creamates you!!!", ch, NULL, victim, TO_VICT );
	act( AT_RED, "&z$n creates a wave of fire, which $e loses control of, barely keeping it on the ground. Suddenly it flares into the heavens causing a &RFire Storm&z.", ch, NULL, victim, TO_NOTVICT );
	act( AT_DGREY, "&zFire begins to rain down, you watch in horror as a rain drop lands on $N, creamating $M, leaving nothing but a skeleton!!!  Killing $M instantly.", ch, NULL, victim, TO_NOTVICT );

	learn_from_success( ch, gsn_firestorm );
	global_retcode = damage( ch, victim, dam, TYPE_HIT );
    break;
    }
	default:
	dam = get_attmod(ch, victim) * number_range( 5, 15 );
	if (ch->charge > 0)
		dam = chargeDamMult(ch, dam);
	act( AT_RED, "&zYou create a &RFire Storm&z, causing rain that burns $N's flesh. &W[$t]", ch, num_punct(dam), victim, TO_CHAR );
	act( AT_RED, "&z$n creates a &RFire Storm&z, causing rain that burns your flesh. &W[$t]", ch, num_punct(dam), victim, TO_VICT );
	act( AT_RED, "&z$n creates a &RFire Storm&z, causing rain that burns $N's flesh. &W[$t]", ch, num_punct(dam), victim, TO_NOTVICT );

	learn_from_success( ch, gsn_firestorm );
	global_retcode = damage( ch, victim, dam, TYPE_HIT );
    break;
    }
    }
    else
    {
	act( AT_RED, "You missed $N with your Fire Storm.", ch, NULL, victim, TO_CHAR );
	act( AT_RED, "$n misses you with $s Fire Storm.", ch, NULL, victim, TO_VICT );
	act( AT_RED, "$n missed $N with $s Fire Storm.", ch, NULL, victim, TO_NOTVICT );
	learn_from_failure( ch, gsn_firestorm );
	global_retcode = damage( ch, victim, 0, TYPE_HIT );
    }
	ch->mana -= skill_table[gsn_firestorm]->min_mana;
    return;
}

void do_magmatouch(CHAR_DATA *ch, char *argument )
{
    CHAR_DATA *victim;
    int dam = 0;

    if( IS_NPC(ch) && is_split(ch) )
    {
        if( !ch->master )
          return;
        if( !can_use_skill( ch->master, number_percent(), gsn_kamehameha ))
          return;
    }

    if ( IS_NPC(ch) && IS_AFFECTED( ch, AFF_CHARM ) )
    {
	send_to_char( "You can't concentrate enough for that.\n\r", ch );
	return;
    }

    if ( !IS_NPC(ch)
    &&   ch->exp < skill_table[gsn_magmatouch]->skill_level[ch->class] )
    {
	send_to_char( "You can't do that.\n\r", ch );
	return;
    }

    if ( ( victim = who_fighting( ch ) ) == NULL )
    {
	send_to_char( "You aren't fighting anyone.\n\r", ch );
	return;
    }

	if ( ch->mana < skill_table[gsn_magmatouch]->min_mana )
	{
	    send_to_char( "You don't have enough energy.\n\r", ch );
	    return;
	}
	if (ch->focus < skill_table[gsn_magmatouch]->focus)
    {
		send_to_char( "You need to focus more.\n\r", ch );
		return;
    }
    else
    	ch->focus -= skill_table[gsn_magmatouch]->focus;

    WAIT_STATE( ch, skill_table[gsn_magmatouch]->beats );
    if ( can_use_skill(ch, number_percent(),gsn_magmatouch ) )
    {
	dam = get_attmod(ch, victim) * number_range( 45, 55 );
	if (ch->charge > 0)
		dam = chargeDamMult(ch, dam);
	act( AT_LBLUE, "&zMagma envelopes both of your arms, causing them to become hotter than the earths core itself	", ch, NULL, victim, TO_CHAR );
	act( AT_LBLUE, "&zYou grab for $N, but miss, causing some very bad burns. &W[$t]", ch, num_punct(dam), victim, TO_CHAR );
	act( AT_LBLUE, "&z$n arms become eveloped in magma, $e reaches for you.	", ch, NULL, victim, TO_VICT );
	act( AT_LBLUE, "&z$e misses, but does barely touch you, HOLY SHIT, THAT IS FUCKIN HOT!!! &W[$t]", ch, num_punct(dam), victim, TO_VICT );
	act( AT_LBLUE, "&z$n arms become eveloped in magma, $e reaches for $N. ", ch, NULL, victim, TO_NOTVICT );
	act( AT_LBLUE, "&z$e misses, but does barely touch $E. [$t]", ch, num_punct(dam), victim, TO_NOTVICT );

        dam = ki_absorb( victim, ch, dam, gsn_magmatouch );
	learn_from_success( ch, gsn_magmatouch );
	global_retcode = damage( ch, victim, dam, TYPE_HIT );
    }
    else
    {
	act( AT_LBLUE, "You missed $N with your magma touch.", ch, NULL, victim, TO_CHAR );
	act( AT_LBLUE, "$n misses you with $s magma touch.", ch, NULL, victim, TO_VICT );
	act( AT_LBLUE, "$n missed $N with $s magma touch.", ch, NULL, victim, TO_NOTVICT );
	learn_from_failure( ch, gsn_magmatouch );
	global_retcode = damage( ch, victim, 0, TYPE_HIT );
    }
	ch->mana -= skill_table[gsn_magmatouch]->min_mana;
    return;
}

void do_novawave(CHAR_DATA *ch, char *argument )
{
    CHAR_DATA *victim;
    int dam = 0;

    if( IS_NPC(ch) && is_split(ch) )
    {
        if( !ch->master )
          return;
        if( !can_use_skill( ch->master, number_percent(), gsn_novawave))
          return;
    }

    if ( IS_NPC(ch) && IS_AFFECTED( ch, AFF_CHARM ) )
    {
	send_to_char( "You can't concentrate enough for that.\n\r", ch );
	return;
    }

    if ( !IS_NPC(ch)
    &&   ch->exp < skill_table[gsn_novawave]->skill_level[ch->class] )
    {
	send_to_char( "You can't do that.\n\r", ch );
	return;
    }

    if ( ( victim = who_fighting( ch ) ) == NULL )
    {
	send_to_char( "You aren't fighting anyone.\n\r", ch );
	return;
    }

	if ( ch->mana < skill_table[gsn_novawave]->min_mana )
	{
	    send_to_char( "You don't have enough energy.\n\r", ch );
	    return;
	}
	if (ch->focus < skill_table[gsn_novawave]->focus)
    {
		send_to_char( "You need to focus more.\n\r", ch );
		return;
    }
    else
    	ch->focus -= skill_table[gsn_novawave]->focus;

    WAIT_STATE( ch, skill_table[gsn_novawave]->beats );
    if ( can_use_skill(ch, number_percent(),gsn_novawave ) )
    {
//	dam = get_attmod(ch, victim) * number_range( 40, 44 );
	dam = get_attmod(ch, victim) * number_range( 70, 80 );
	if (ch->charge > 0)
		dam = chargeDamMult(ch, dam);
/*	act( AT_SKILL, "&zYou clap your hands together, at unimaginable speed, creating a wave of pure fire .", ch, NULL, victim, TO_CHAR );
 *	act( AT_SKILL, "&zIt expands across the area at the speed of light, the waves arching towards $N . &W[$t]", ch, num_punct(dam), victim, TO_CHAR );
 *	act( AT_SKILL, "&z$n claps $s hands together, at unimaginable speed, creating a wave of pure fire.", ch, NULL, victim, TO_VICT );
 *	act( AT_SKILL, "&It expands across the area at the speed of light, the waves arching straight for you.&W[$t]", ch, num_punct(dam), victim, TO_VICT );
 *	act( AT_SKILL, "&z$n clasps his hands together, at unimaginable speed, creating a wave of pure fire.", ch, NULL, victim, TO_NOTVICT );
 *	act( AT_SKILL, "&zIt archs across the area at the speed of light, the waves arching straight for $N. &W[$t]", ch, num_punct(dam), victim, TO_NOTVICT ); */

	act( AT_BLUE, "&zYou start clapping your hands together rapidly, causing a massive outburst of pure power.", ch, NULL, victim, TO_CHAR );
	act( AT_BLUE, "&zThe fires around your body start following the pattern and expand outward, "
                       "&zarching from your hands toward $N. &W[$t]", ch, num_punct(dam), victim, TO_CHAR );
	act( AT_BLUE, "&z$n starts clapping $s hands together rapidly, causing a massive outburst of pure power.", ch, NULL, victim, TO_VICT );
	act( AT_BLUE, "&zThe fires around $s body start following the pattern and expand outward, "
                       "&zarching from $s hands toward you. &W[$t]", ch, num_punct(dam), victim, TO_VICT );
	act( AT_BLUE, "&z$n starts clapping $s hands together rapidly, causing a massive outburst of pure power.", ch, NULL, victim, TO_NOTVICT );
	act( AT_BLUE, "&zThe fires around $n's body start following the pattern and expand outward, "
                       "&zarching from $n's hand toward $N. &W[$t]", ch, num_punct(dam), victim, TO_NOTVICT );

        dam = ki_absorb( victim, ch, dam, gsn_novawave );
	learn_from_success( ch, gsn_novawave );
	global_retcode = damage( ch, victim, dam, TYPE_HIT );
    }
    else
    {
	act( AT_BLUE, "You missed $N with your nova wave.", ch, NULL, victim, TO_CHAR );
	act( AT_BLUE, "$n misses you with $s nova wave.", ch, NULL, victim, TO_VICT );
	act( AT_BLUE, "$n missed $N with a nova wave.", ch, NULL, victim, TO_NOTVICT );
	learn_from_failure( ch, gsn_novawave );
	global_retcode = damage( ch, victim, 0, TYPE_HIT );
    }
	ch->mana -= skill_table[gsn_novawave]->min_mana;
    return;
}


void do_eruption(CHAR_DATA *ch, char *argument )
{
   CHAR_DATA *victim;
    int dam = 0;

    if( IS_NPC(ch) && is_split(ch) )
    {
	if( !ch->master )
	  return;
	if( !can_use_skill( ch->master, number_percent(), gsn_eruption ))
	  return;
    }

    if ( IS_NPC(ch) && IS_AFFECTED( ch, AFF_CHARM ) )
    {
	send_to_char( "You can't concentrate enough for that.\n\r", ch );
	return;
    }

    if ( !IS_NPC(ch)
    &&   ch->exp < skill_table[gsn_eruption]->skill_level[ch->class] )
    {
	send_to_char( "You can't do that.\n\r", ch );
	return;
    }

    if ( ( victim = who_fighting( ch ) ) == NULL )
    {
	send_to_char( "You aren't fighting anyone.\n\r", ch );
	return;
    }

	if ( ch->mana < skill_table[gsn_eruption]->min_mana )
	{
	    send_to_char( "You don't have enough energy.\n\r", ch );
	    return;
	}
	if (ch->focus < skill_table[gsn_eruption]->focus)
    {
		send_to_char( "You need to focus more.\n\r", ch );
		return;
    }
    else
    	ch->focus -= skill_table[gsn_eruption]->focus;

    WAIT_STATE( ch, skill_table[gsn_eruption]->beats );
    if ( can_use_skill(ch, number_percent(),gsn_eruption ) )
    {
	dam = get_attmod(ch, victim) * number_range( 60, 70 );
	if (ch->charge > 0)
		dam = chargeDamMult(ch, dam);

	act( AT_BLUE, "&zA massive force begins to build up inside your body, you scream in rage from the immense pain.", ch, NULL, victim, TO_CHAR );
	act( AT_BLUE, "&zYou unwillingly aim your mouth towards the sky, and lava begins Erupting from it, flying high into the air, spewing down on $N burning $M badly. &W[$t]", ch, num_punct(dam), victim, TO_CHAR );
	act( AT_BLUE, "&z$n begins screaming in rage and points $s head towards the sky, erupting lava all over the place.", ch, NULL, victim, TO_VICT );
	act( AT_BLUE, "&zSpewing all over you, you howl in pain, it is burning you very badly. &W[$t]", ch, num_punct(dam), victim, TO_VICT );
	act( AT_BLUE, "&z$n begins screaming in rage and points $s head towards the sky, erupting lava all over the place.", ch, NULL, victim, TO_NOTVICT );
	act( AT_BLUE, "&zSpewing down on $N, $E howls in pain, the lava is burning $M very badly. &W[$t]", ch, num_punct(dam), victim, TO_NOTVICT );

        dam = ki_absorb( victim, ch, dam, gsn_eruption );
	learn_from_success( ch, gsn_eruption );
	global_retcode = damage( ch, victim, dam, TYPE_HIT );
    }
    else
    {
	act( AT_BLUE, "You missed $N with your eruption.", ch, NULL, victim, TO_CHAR );
	act( AT_BLUE, "$n misses you with $s eruption.", ch, NULL, victim, TO_VICT );
	act( AT_BLUE, "$n missed $N with $s eruption.", ch, NULL, victim, TO_NOTVICT );
	learn_from_failure( ch, gsn_eruption );
	global_retcode = damage( ch, victim, 0, TYPE_HIT );
    }
	ch->mana -= skill_table[gsn_eruption]->min_mana;
	return;
}

void do_htorch(CHAR_DATA *ch, char *argument )
{
    CHAR_DATA *victim;
    int dam = 0;

    if( IS_NPC(ch) && is_split(ch) )
    {
        if( !ch->master )
          return;
        if( !can_use_skill( ch->master, number_percent(), gsn_htorch ))
          return;
    }

    if ( IS_NPC(ch) && IS_AFFECTED( ch, AFF_CHARM ) )
    {
	send_to_char( "You can't concentrate enough for that.\n\r", ch );
	return;
    }

    if ( !IS_NPC(ch)
    &&   ch->exp < skill_table[gsn_htorch]->skill_level[ch->class] )
    {
	send_to_char( "You can't do that.\n\r", ch );
	return;
    }

    if ( ( victim = who_fighting( ch ) ) == NULL )
    {
	send_to_char( "You aren't fighting anyone.\n\r", ch );
	return;
    }

	if ( ch->mana < skill_table[gsn_htorch]->min_mana )
	{
	    send_to_char( "You don't have enough energy.\n\r", ch );
	    return;
	}
	if (ch->focus < skill_table[gsn_htorch]->focus)
    {
		send_to_char( "You need to focus more.\n\r", ch );
		return;
    }
    else
    	ch->focus -= skill_table[gsn_htorch]->focus;

    WAIT_STATE( ch, skill_table[gsn_htorch]->beats );
    if ( can_use_skill(ch, number_percent(),gsn_htorch ) )
    {
	dam = get_attmod(ch, victim) * number_range( 100, 130 );
	if (ch->charge > 0)
		dam = chargeDamMult(ch, dam);
	act( AT_LBLUE, "&zYou throw both of your arms into the air, and begin to pray.", ch, NULL, victim, TO_CHAR );
	act( AT_LBLUE, "&cYou utter the words, 'Please, O' Holy one, deliver onto this unfortunate soul the power of your divine wrath.'", ch, num_punct(dam), victim, TO_CHAR );
	act( AT_LBLUE, "&zAs you say these words, a huge cylinder of fire engulfs $N, leaving $M nothing but a bloody mess. &W[&Y$t&W]", ch, num_punct(dam), victim, TO_CHAR );
	act( AT_LBLUE, "&z$n throws both of $s arms into the air, and begins to pray.", ch, NULL, victim, TO_VICT );
	act( AT_LBLUE, "&c$n utters the words, 'Please, O' Holy one, deliver onto this unfortunate soul the power of your divine wrath.'", ch, num_punct(dam), victim, TO_VICT );
	act( AT_LBLUE, "&zAs $n says these words, a huge cylinder of fire engulfs you, leaving you nothing but a bloody mess. &W[&Y$t&W]", ch, num_punct(dam), victim, TO_VICT );
	act( AT_LBLUE, "&z$n throws both of $s arms into the air, and begins to pray.", ch, NULL, victim, TO_NOTVICT );
	act( AT_LBLUE, "&c$n utters the words, 'Please, O' Holy one, deliver onto this unfortunate soul the power of your divine wrath.'", ch, NULL, victim, TO_NOTVICT );
	act( AT_LBLUE, "&zAs $n says these words, a huge cylinder of fire engulfs $N, leaving $M nothing but a bloody mess. &W[&Y$t&W]", ch, num_punct(dam), victim, TO_NOTVICT );

        dam = ki_absorb( victim, ch, dam, gsn_htorch );
	learn_from_success( ch, gsn_htorch );
	global_retcode = damage( ch, victim, dam, TYPE_HIT );
    }
    else
    {
	act( AT_LBLUE, "&zYou missed $N with your Heaven's Torch.", ch, NULL, victim, TO_CHAR );
	act( AT_LBLUE, "&z$n misses you with $s Heaven's Torch.", ch, NULL, victim, TO_VICT );
	act( AT_LBLUE, "&z$n missed $N with $s Heaven's Torch.", ch, NULL, victim, TO_NOTVICT );
	learn_from_failure( ch, gsn_htorch );
	global_retcode = damage( ch, victim, 0, TYPE_HIT );
    }
	ch->mana -= skill_table[gsn_htorch]->min_mana;
    return;
}

/*****************************/
/*     Transformations       */
/*****************************/

void do_puppet(CHAR_DATA *ch, char *argument )
{
    if( IS_NPC(ch) && is_split(ch) )
    {
        if( !ch->master )
	  return;
        if( !can_use_skill( ch->master, number_percent(), gsn_superflame1 ))
	  return;
    }

    if( !IS_NPC(ch) )
    {
      if( IS_SET(ch->pcdata->flags, PCFLAG_KNOWSMYSTIC) )
      {
	ch_printf(ch,"You are unable to call upon those powers while you know mystic.\n\r");
	return;
      }
    }

    if( wearing_chip(ch) )
    {
        ch_printf(ch," You can't while you have a chip installed.\n\r");
        return;
    }
        if (xIS_SET((ch)->affected_by, AFF_PUPPET)
          || xIS_SET((ch)->affected_by, AFF_SFLAME1)
	    || xIS_SET((ch)->affected_by, AFF_SFLAME2)
          || xIS_SET((ch)->affected_by, AFF_SFLAME3)
          || xIS_SET((ch)->affected_by, AFF_UFLAME))
            {
                send_to_char( "You power down and return to normal.\n\r", ch );
		if (xIS_SET((ch)->affected_by, AFF_PUPPET))
                      xREMOVE_BIT((ch)->affected_by, AFF_PUPPET);
            if (xIS_SET((ch)->affected_by, AFF_SFLAME1))
                      xREMOVE_BIT((ch)->affected_by, AFF_SFLAME1);
		if (xIS_SET((ch)->affected_by, AFF_SFLAME2))
		      xREMOVE_BIT((ch)->affected_by, AFF_SFLAME2);
		if (xIS_SET((ch)->affected_by, AFF_SFLAME3))
		      xREMOVE_BIT((ch)->affected_by, AFF_SFLAME3);
                if (xIS_SET((ch)->affected_by, AFF_UFLAME))
                  xREMOVE_BIT((ch)->affected_by, AFF_UFLAME);
                ch->pl = ch->exp;
                transStatRemove(ch);
                return;
            }
        if ( ch->mana < skill_table[gsn_puppet]->min_mana )
        {
            send_to_char( "You don't have enough energy.\n\r", ch );
            return;
        }

    WAIT_STATE( ch, skill_table[gsn_puppet]->beats );
   if ( can_use_skill(ch, number_percent(), gsn_puppet ) )
        {
        act( AT_RED, "&zAn Image of the puppet master appears and yells, &Y'PUPPETIZER BLAST!'. &zHis attack hits you, changing your body into a wooden puppet of its former self.", ch, NULL, NULL, TO_CHAR );
        act( AT_RED, "&zAn Image of the puppet master appears and yells, &Y'PUPPETIZER BLAST!'. &zHis attack changes $n into wooden puppet of $s former self.", ch, NULL, NULL, TO_NOTVICT );
        xSET_BIT( (ch)->affected_by, AFF_PUPPET );
        if( xIS_SET((ch)->affected_by, AFF_SFLAME1) )
        {
             xREMOVE_BIT((ch)->affected_by, AFF_SFLAME1);
        }
         if( xIS_SET((ch)->affected_by, AFF_SFLAME2) )
        {
             xREMOVE_BIT((ch)->affected_by, AFF_SFLAME2);
        }
        if( xIS_SET((ch)->affected_by, AFF_SFLAME3) )
        {
             xREMOVE_BIT((ch)->affected_by, AFF_SFLAME3);
        }
        if( xIS_SET((ch)->affected_by, AFF_UFLAME) )
        {
             xREMOVE_BIT((ch)->affected_by, AFF_UFLAME);
        }

        ch->pl = ch->exp * 8;
        transStatApply(ch, -5, -5, -5, -5);
        learn_from_success( ch, gsn_puppet );
	if( !IS_NPC( ch ) )
	{
	  ch->pcdata->eyes      = 0;
	}
    }
     else 
     {
     switch (number_range(1, 3))
     {
             default: 
             act( AT_RED, "&zYour body begins to shrink, turning wooden, but you turn full size again, normal.", ch, NULL, NULL, TO_CHAR );
             act( AT_RED, "&z$n's body is shrinking, changing into wood, but turns normal again.", ch, NULL, NULL, TO_NOTVICT );
             break;
             case 1:
             act( AT_RED, "&zYour body shrinks and becomes wooden, but you quickly revert back.", ch, NULL, NULL, TO_CHAR );
             act( AT_RED, "&z$n's body shrinks and becomes wooden, but $e quickly reverts back.", ch, NULL, NULL, TO_NOTVICT );
             break;
             case 2:
             act( AT_RED, "&zYou Start Shrinking, OMG! &RJ/K", ch, NULL, NULL, TO_CHAR );
             break;
             case 3:
             act( AT_RED, "&zYou freak out seeing small wooden arms and legs and revert back to normal.", ch, NULL, NULL, TO_CHAR );
             act( AT_RED, "&z$n starts freaking out about $s body being wooden and changes back to normal.", ch, NULL, NULL, TO_NOTVICT );
             break;
     }
     learn_from_failure( ch, gsn_puppet );
    }
     ch->mana -= skill_table[gsn_puppet]->min_mana;
     return;
}

void do_sflame1(CHAR_DATA *ch, char *argument )
{
    if( IS_NPC(ch) && is_split(ch) )
    {
        if( !ch->master )
	  return;
        if( !can_use_skill( ch->master, number_percent(), gsn_superflame1 ))
	  return;
    }

    if( !IS_NPC(ch) )
    {
      if( IS_SET(ch->pcdata->flags, PCFLAG_KNOWSMYSTIC) )
      {
	ch_printf(ch,"You are unable to call upon those powers while you know mystic.\n\r");
	return;
      }
    }

    if( wearing_chip(ch) )
    {
        ch_printf(ch," You can't while you have a chip installed.\n\r");
        return;
    }
         if (xIS_SET((ch)->affected_by, AFF_SFLAME1)
         || xIS_SET((ch)->affected_by, AFF_SFLAME2)
         || xIS_SET((ch)->affected_by, AFF_SFLAME3)
         || xIS_SET((ch)->affected_by, AFF_UFLAME))
	    {
		send_to_char( "You power down to Puppet State.\n\r", ch );
            xSET_BIT( (ch)->affected_by, AFF_PUPPET );
            xREMOVE_BIT((ch)->affected_by, AFF_SFLAME1);
            xREMOVE_BIT( (ch)->affected_by, AFF_SFLAME2 );
            xREMOVE_BIT( (ch)->affected_by, AFF_SFLAME3 );
            xREMOVE_BIT( (ch)->affected_by, AFF_UFLAME );
		ch->pl = ch->exp * 8;
		transStatApply(ch, -5, -5, -5, -5);
            if( !IS_NPC( ch ) )
            return;
        }

        if ( ch->mana < skill_table[gsn_superflame1]->min_mana )
        {
            send_to_char( "You don't have enough energy.\n\r", ch );
            return;
        }

    WAIT_STATE( ch, skill_table[gsn_superflame1]->beats );
   if ( can_use_skill(ch, number_percent(), gsn_superflame1 ) )
        {
        act( AT_RED, "A blazing fire erupts around your body, your muscles bulge to an enourmous size, everything around you being burnt to a crisp.", ch, NULL, NULL, TO_CHAR );
        act( AT_RED, "$n's body is engulfed in a raging fire, $s muscles bulge to an enourmous size, everything around $m being burnt to a crisp.", ch, NULL, NULL, TO_NOTVICT );
        xSET_BIT( (ch)->affected_by, AFF_SFLAME1 );
        xSET_BIT( (ch)->affected_by, AFF_PUPPET );
        if( xIS_SET((ch)->affected_by, AFF_SFLAME2) )
        {
          xREMOVE_BIT( (ch)->affected_by, AFF_SFLAME2 );
        }
        if( xIS_SET((ch)->affected_by, AFF_SFLAME3) )
        {
          xREMOVE_BIT( (ch)->affected_by, AFF_SFLAME3 );
        }
        if( xIS_SET((ch)->affected_by, AFF_UFLAME) )
        {
          xREMOVE_BIT( (ch)->affected_by, AFF_UFLAME );
        }
	 ch->pl = ch->exp * 12;
	 transStatApply(ch, 4, 7, 4, 5);
        learn_from_success( ch, gsn_superflame1 );
	if( !IS_NPC( ch ) )
	{
	  ch->pcdata->eyes      = 0;
	}
    }
     else 
     {
     switch (number_range(1, 3))
     {
             default: 
             act( AT_RED, "&zYour body starts to become extremely hot, but quickly cools back down.", ch, NULL, NULL, TO_CHAR );
             act( AT_RED, "&z$n starts radiating some extreme heat, but it dissappears quickly.", ch, NULL, NULL, TO_NOTVICT );
             break;
             case 1:
             act( AT_RED, "&zYour body starts to become extremely hot, but quickly cools back down.", ch, NULL, NULL, TO_CHAR );
             act( AT_RED, "&z$n starts radiating some extreme heat, but it dissappears quickly.", ch, NULL, NULL, TO_NOTVICT );
             break;
             case 2:
             act( AT_RED, "&zQuit Fuckin around buddy, your &RNOT &za Super Flame!", ch, NULL, NULL, TO_CHAR );
             break;
             case 3:
             act( AT_RED, "&zA fire starts to burn around you, but quickly goes out.", ch, NULL, NULL, TO_CHAR );
             act( AT_RED, "&zA fire starts to burn around $n, but quickly goes out.", ch, NULL, NULL, TO_NOTVICT );
             break;
     }
     learn_from_failure( ch, gsn_superflame1 );
    }
     ch->mana -= skill_table[gsn_superflame1]->min_mana;
     return;
}

void do_sflame2(CHAR_DATA *ch, char *argument )
{
    if( IS_NPC(ch) && is_split(ch) )
    {
        if( !ch->master )
	  return;
        if( !can_use_skill( ch->master, number_percent(), gsn_superflame2 ))
	  return;
    }

    if( !IS_NPC(ch) )
    {
      if( IS_SET(ch->pcdata->flags, PCFLAG_KNOWSMYSTIC) )
      {
	ch_printf(ch,"You are unable to call upon those powers while you know mystic.\n\r");
	return;
      }
    }

    if( wearing_chip(ch) )
    {
        ch_printf(ch," You can't while you have a chip installed.\n\r");
        return;
    }
        if (xIS_SET((ch)->affected_by, AFF_SFLAME2)
         || xIS_SET((ch)->affected_by, AFF_SFLAME3)
         || xIS_SET((ch)->affected_by, AFF_UFLAME))
	    {
		send_to_char( "You power down to Super Flame.\n\r", ch );
	      xSET_BIT( (ch)->affected_by, AFF_SFLAME1 );            
            xSET_BIT( (ch)->affected_by, AFF_PUPPET );
            xREMOVE_BIT((ch)->affected_by, AFF_SFLAME2);
            xREMOVE_BIT((ch)->affected_by, AFF_SFLAME3);
            xREMOVE_BIT((ch)->affected_by, AFF_UFLAME);
		ch->pl = ch->exp * 12;
		transStatApply(ch, 4, 7, 4, 5);
            if( !IS_NPC( ch ) )
            return;
          }

        if ( ch->mana < skill_table[gsn_superflame2]->min_mana )
        {
            send_to_char( "You don't have enough energy.\n\r", ch );
            return;
        }

    WAIT_STATE( ch, skill_table[gsn_superflame2]->beats );
   if ( can_use_skill(ch, number_percent(), gsn_superflame2 ) )
        {
        act( AT_BLUE, "&zYou scream in rage as the fires around you begin to burn even more viciously. Just when you think you can't take any more, the fire starts to burn a &Bblueish &zcolor. ", ch, NULL, NULL, TO_CHAR );
        act( AT_BLUE, "&z$n screams in rage as the fires around $m begin to burn even more viciously. Suddenly the fire starts to burn a &Bblueish &zcolor.", ch, NULL, NULL, TO_NOTVICT );
        xSET_BIT( (ch)->affected_by, AFF_PUPPET );
	  xSET_BIT( (ch)->affected_by, AFF_SFLAME2 );
        if( xIS_SET((ch)->affected_by, AFF_SFLAME1) )
        {
             xREMOVE_BIT( (ch)->affected_by, AFF_SFLAME1 );
        }    
        if( xIS_SET((ch)->affected_by, AFF_SFLAME3) )
        {
             xREMOVE_BIT((ch)->affected_by, AFF_SFLAME3);
        }
        if( xIS_SET((ch)->affected_by, AFF_UFLAME) )
        {
          xREMOVE_BIT( (ch)->affected_by, AFF_UFLAME );
        }
	 ch->pl = ch->exp * 20;
	 transStatApply(ch, 8, 13, 8, 13);
        learn_from_success( ch, gsn_superflame2 );
	if( !IS_NPC( ch ) )
	{
	  ch->pcdata->eyes      = 0;
	}
    }
     else 
     {
     switch (number_range(1, 3))
     {
             default: 
             act( AT_RED, "&zYour body starts to become extremely hot, but quickly cools back down.", ch, NULL, NULL, TO_CHAR );
             act( AT_RED, "&z$n starts radiating some extreme heat, but it dissappears quickly.", ch, NULL, NULL, TO_NOTVICT );
             break;
             case 1:
             act( AT_RED, "&zYour body starts to become extremely hot, but quickly cools back down.", ch, NULL, NULL, TO_CHAR );
             act( AT_RED, "&z$n starts radiating some extreme heat, but it dissappears quickly.", ch, NULL, NULL, TO_NOTVICT );
             break;
             case 2:
             act( AT_RED, "&Whoopy Fuckin do, you got superflame, your not gonna get the second one!", ch, NULL, NULL, TO_CHAR );
             break;
             case 3:
             act( AT_RED, "&zA fire starts to burn around you, but quickly goes out.", ch, NULL, NULL, TO_CHAR );
             act( AT_RED, "&zA fire starts to burn around $n, but quickly goes out.", ch, NULL, NULL, TO_NOTVICT );
             break;
     }
     learn_from_failure( ch, gsn_superflame2 );
    }
     ch->mana -= skill_table[gsn_superflame2]->min_mana;
     return;
}
void do_sflame3(CHAR_DATA *ch, char *argument )
{
    if( IS_NPC(ch) && is_split(ch) )
    {
        if( !ch->master )
	  return;
        if( !can_use_skill( ch->master, number_percent(), gsn_superflame3 ))
	  return;
    }

    if( !IS_NPC(ch) )
    {
      if( IS_SET(ch->pcdata->flags, PCFLAG_KNOWSMYSTIC) )
      {
	ch_printf(ch,"You are unable to call upon those powers while you know mystic.\n\r");
	return;
      }
    }

    if( wearing_chip(ch) )
    {
        ch_printf(ch," You can't while you have a chip installed.\n\r");
        return;
    }
        if (xIS_SET((ch)->affected_by, AFF_SFLAME3)
           || xIS_SET((ch)->affected_by, AFF_UFLAME))
	    {
		send_to_char( "You power down to Super Flame 2. You feel your body reverting back to its puppet state.\n\r", ch );
	      xSET_BIT( (ch)->affected_by, AFF_SFLAME2 );
            xSET_BIT( (ch)->affected_by, AFF_PUPPET );
            xREMOVE_BIT((ch)->affected_by, AFF_SFLAME3);
            xREMOVE_BIT((ch)->affected_by, AFF_UFLAME);
		ch->pl = ch->exp * 20;
		transStatApply(ch, 8, 13, 8, 13);
            if( !IS_NPC( ch ) )
            return;
          }

        if ( ch->mana < skill_table[gsn_superflame3]->min_mana )
        {
            send_to_char( "You don't have enough energy.\n\r", ch );
            return;
        }

    WAIT_STATE( ch, skill_table[gsn_superflame3]->beats );
   if ( can_use_skill(ch, number_percent(), gsn_superflame3 ) )
        {
        act( AT_BLUE, "&zYou feel your body beginning to double in size, releasing you from the horror that is called puppet. Your fiery aura turns &YYellow&z, and begins to flare up around you. ", ch, NULL, NULL, TO_CHAR );
        act( AT_BLUE, "&zYou watch in awe as $n's body doubles in size, becoming pure fire, and loosing its wooden puppet like qualities. $s fiery aura turns &YYellow&z and flares up around him", ch, NULL, NULL, TO_NOTVICT );
	  xSET_BIT( (ch)->affected_by, AFF_SFLAME3 );   
        if( xIS_SET((ch)->affected_by, AFF_PUPPET) )
        {
             xREMOVE_BIT( (ch)->affected_by, AFF_PUPPET );
        }
             if( xIS_SET((ch)->affected_by, AFF_SFLAME1) )
        {
             xREMOVE_BIT( (ch)->affected_by, AFF_SFLAME1 );
        }
        if( xIS_SET((ch)->affected_by, AFF_SFLAME2) )
        {
             xREMOVE_BIT( (ch)->affected_by, AFF_SFLAME2 );
        }
        if( xIS_SET((ch)->affected_by, AFF_UFLAME) )
        {
          xREMOVE_BIT( (ch)->affected_by, AFF_UFLAME );
        }
	 ch->pl = ch->exp * 24;
	 transStatApply(ch, 28, 30, 26, 28);
        learn_from_success( ch, gsn_superflame3 );
	if( !IS_NPC( ch ) )
	{
	  ch->pcdata->eyes      = 0;
	}
    }
     else 
     {
     switch (number_range(1, 3))
     {
             default: 
             act( AT_RED, "&zYour hair is flaring widly, but it quickly calms back down.", ch, NULL, NULL, TO_CHAR );
             act( AT_RED, "&z$n's hair is flaring widly, but it quickly calms back down.", ch, NULL, NULL, TO_NOTVICT );
             break;
             case 1:
             act( AT_RED, "&zYour hair begins to flare up widly, the fire in it acting as if it has a mind of its own.", ch, NULL, NULL, TO_CHAR );
             act( AT_RED, "&zIt quickly loses its flare and reverts to normal. ", ch, NULL, NULL, TO_CHAR );
             act( AT_RED, "&z$n's hair begins to flare up widly, the fire in it acting as if it has a mind of its own.", ch, NULL, NULL, TO_NOTVICT );
             act( AT_RED, "&zIt quickly loses its flare and reverts to normal. ", ch, NULL, NULL, TO_NOTVICT );
             break;
             case 2:
             act( AT_RED, "&zWhat the fuck man! Your still screwin around... there is no way for you to get super flame 3", ch, NULL, NULL, TO_CHAR );
             break;
             case 3:
             act( AT_RED, "&zThe fires around you begin to flicker from blue to yellow, but the flickering stops.", ch, NULL, NULL, TO_CHAR );
             act( AT_RED, "&zThe fires around $n begin to flicker from blue to yellow, but the flickering stops.", ch, NULL, NULL, TO_NOTVICT );
             break;
     }
     learn_from_failure( ch, gsn_superflame3 );
    }
     ch->mana -= skill_table[gsn_superflame3]->min_mana;
     return;
}
void do_uflame(CHAR_DATA *ch, char *argument )
{
    if( IS_NPC(ch) && is_split(ch) )
    {
        if( !ch->master )
	  return;
        if( !can_use_skill( ch->master, number_percent(), gsn_superflame3 ))
	  return;
    }

    if( !IS_NPC(ch) )
    {
      if( IS_SET(ch->pcdata->flags, PCFLAG_KNOWSMYSTIC) )
      {
	ch_printf(ch,"You are unable to call upon those powers while you know mystic.\n\r");
	return;
      }
    }

    if( wearing_chip(ch) )
    {
        ch_printf(ch," You can't while you have a chip installed.\n\r");
        return;
    }
        if (xIS_SET((ch)->affected_by, AFF_UFLAME))
	    {
		send_to_char( "You power down to Super Flame 3, losing some muscle mass.\n\r", ch );
            xSET_BIT( (ch)->affected_by, AFF_SFLAME3 );
            xREMOVE_BIT((ch)->affected_by, AFF_UFLAME);
		ch->pl = ch->exp * 24;
		transStatApply(ch, 28, 30, 26, 28);
            if( !IS_NPC( ch ) )
            return;
          }

        if ( ch->mana < skill_table[gsn_ultraflame]->min_mana )
        {
            send_to_char( "You don't have enough energy.\n\r", ch );
            return;
        }

    WAIT_STATE( ch, skill_table[gsn_superflame3]->beats );
   if ( can_use_skill(ch, number_percent(), gsn_ultraflame ) )
        {
        act( AT_BLUE, "&zYour Aura turns Jet Black, you start laughing insanely, 'MUHAHAHAHAHAHAHA!!!!'. Maybe you belong in a mental institution with the rest of the crazies. ", ch, NULL, NULL, TO_CHAR );
        act( AT_BLUE, "&zYou watch in fright as $n's Aura turns Jet Black. You cower when $e starts laughing like he belongs in a mental institution", ch, NULL, NULL, TO_NOTVICT );
	  xSET_BIT( (ch)->affected_by, AFF_UFLAME );   
        if( xIS_SET((ch)->affected_by, AFF_PUPPET) )
        {
             xREMOVE_BIT( (ch)->affected_by, AFF_PUPPET );
        }
             if( xIS_SET((ch)->affected_by, AFF_SFLAME1) )
        {
             xREMOVE_BIT( (ch)->affected_by, AFF_SFLAME1 );
        }
        if( xIS_SET((ch)->affected_by, AFF_SFLAME2) )
        {
             xREMOVE_BIT( (ch)->affected_by, AFF_SFLAME2 );
        }
        if( xIS_SET((ch)->affected_by, AFF_SFLAME3) )
        {
             xREMOVE_BIT( (ch)->affected_by, AFF_SFLAME3 );
        }
        ch->pl = ch->exp * 35;
        transStatApply(ch, 36, 40, 25, 35);
        learn_from_success( ch, gsn_ultraflame );
	if( !IS_NPC( ch ) )
	{
	  ch->pcdata->eyes      = 0;
	}
    }
     else 
     {
     switch (number_range(1, 3))
     {
             default: 
             act( AT_RED, "&Your Fiery aura starts to turn black, but changes back", ch, NULL, NULL, TO_CHAR );
             act( AT_RED, "&z$n's fiery aura starts to turn black, but changes back.", ch, NULL, NULL, TO_NOTVICT );
             break;
             case 1:
             act( AT_RED, "&zYour aura expands ten feet all around you, solid black. Just Kidding.", ch, NULL, NULL, TO_CHAR );
             act( AT_RED, "&zYou look pretty pissed to find that out. ", ch, NULL, NULL, TO_CHAR );
             act( AT_RED, "&z$n looks pretty pissed to know we were kiddin with $m about $s aura changing.", ch, NULL, NULL, TO_NOTVICT );
             break;
             case 2:
             act( AT_RED, "&zWhat are you doin? Theres no fucking Ultra Flame. You got all the transformations, Ass....", ch, NULL, NULL, TO_CHAR );
             break;
             case 3:
             act( AT_RED, "&zThe fires around you begin to flicker from yellow to black, but the flickering stops.", ch, NULL, NULL, TO_CHAR );
             act( AT_RED, "&zThe fires around $n begin to flicker from yellow to black, but the flickering stops.", ch, NULL, NULL, TO_NOTVICT );
             break;
     }
     learn_from_failure( ch, gsn_ultraflame );
    }
     ch->mana -= skill_table[gsn_ultraflame]->min_mana;
     return;
}