/***************************************************************************************************/
/* 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;
}