/*****************************************/
/* Reploid Transformations Version 1.0 */
/* By Kalthizar */
/* */
/* [X] Active Form [X] Power Form */
/* [X] Proto Form [X] Omega Form */
/*****************************************/
#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_active_form( CHAR_DATA * ch, char *argument ) /* Active Form */
{
if( IS_NPC( ch ) && is_split( ch ) )
{
if( !ch->master )
return;
if( !can_use_skill( ch->master, number_percent( ), gsn_active_form ) )
return;
}
if( wearing_chip( ch ) )
{
ch_printf( ch, "You can't while you have a chip installed.\n\r" );
return;
}
if( wearing_sentient_chip( ch ) )
{
ch_printf( ch, "You can't use this." );
return;
}
double pl_mult = 0;
int arg;
arg = atoi( argument );
if( xIS_SET( ( ch )->affected_by, AFF_ACTIVE_FORM ) && arg == 0 )
{
send_to_char( "You reroute your power settings to their default status and return to normal.\n\r", ch );
/* Oh ya.. this should remove lighting effects to */
ch->in_room->light--;
xREMOVE_BIT( ( ch )->affected_by, AFF_ACTIVE_FORM );
transStatRemove( ch );
ch->pl = ch->exp;
if( !IS_NPC( ch ) )
{
ch->pcdata->haircolor = ch->pcdata->orignalhaircolor;
ch->pcdata->eyes = ch->pcdata->orignaleyes;
}
return;
}
else if( !xIS_SET( ( ch )->affected_by, AFF_ACTIVE_FORM ) && arg == 0 )
{
ch_printf( ch, "Syntax: 'active form' [12-18]\n\r" );
return;
}
pl_mult = 18;
if( arg > pl_mult )
pl_mult = ( int )pl_mult;
else if( arg < 1 )
pl_mult = 1;
else
pl_mult = arg;
if( ch->mana < skill_table[gsn_active_form]->min_mana * pl_mult )
{
send_to_char( "&RWARNING:&Y Insufficient Energy to reroute.&D\n\r", ch );
return;
}
/*
* Added this to curve confusion about the Mystic PL_MULT -Karn 01.29.05
*/
if( arg < 12 || arg > 18 )
{
send_to_char( "Syntax: 'active form' [12-18]\n\r", ch );
return;
}
WAIT_STATE( ch, skill_table[gsn_active_form]->beats );
if( can_use_skill( ch, number_percent( ), gsn_active_form ) )
{
act( AT_RED,
"Your power is suddenly re-proportioned throughout your body, as your armor phase-shifts to a bright orange color, and you notice significant speed increases, as well as small amount of strength loss..",
ch, NULL, NULL, TO_CHAR );
act( AT_RED,
"$n's armor phase-shifts to a bright orange color, and you notice significant speed increases in $s movement.",
ch, NULL, NULL, TO_NOTVICT );
xSET_BIT( ( ch )->affected_by, AFF_ACTIVE_FORM );
xREMOVE_BIT((ch)->affected_by, AFF_POWER_FORM);
xREMOVE_BIT((ch)->affected_by, AFF_OMEGA_FORM);
xREMOVE_BIT((ch)->affected_by, AFF_PROTO_FORM);
ch->in_room->light++;
ch->pl = ch->exp * pl_mult;
transStatApply( ch, pl_mult * -1, pl_mult * 1.5, pl_mult, pl_mult * .5 );
if( xIS_SET( ( ch )->affected_by, AFF_MAJIN ) )
ch->pl = ch->pl * 1.1;
learn_from_success( ch, gsn_active_form );
}
else
{
act( AT_RED,
"Your body fails to re-proportion your power right to unlock your Active Form.",
ch, NULL, NULL, TO_CHAR );
act( AT_RED,
"$n's armor phase-shifts slightly but returns to normal as $n fails to unlock $s Form.",
ch, NULL, NULL, TO_NOTVICT );
learn_from_failure( ch, gsn_active_form );
}
ch->mana -= skill_table[gsn_active_form]->min_mana * pl_mult;
return;
}
void do_power_form( CHAR_DATA * ch, char *argument ) /* Power Form */
{
if( IS_NPC( ch ) && is_split( ch ) )
{
if( !ch->master )
return;
if( !can_use_skill( ch->master, number_percent( ), gsn_power_form ) )
return;
}
if( wearing_chip( ch ) )
{
ch_printf( ch, "You can't while you have a chip installed.\n\r" );
return;
}
if( wearing_sentient_chip( ch ) )
{
ch_printf( ch, "You can't use this." );
return;
}
double pl_mult = 0;
int arg;
arg = atoi( argument );
if( xIS_SET( ( ch )->affected_by, AFF_POWER_FORM ) && arg == 0 )
{
send_to_char( "You reroute your power settings to their default status and return to normal.\n\r", ch );
/* Oh ya.. this should remove lighting effects to */
ch->in_room->light--;
xREMOVE_BIT( ( ch )->affected_by, AFF_POWER_FORM );
transStatRemove( ch );
ch->pl = ch->exp;
if( !IS_NPC( ch ) )
{
ch->pcdata->haircolor = ch->pcdata->orignalhaircolor;
ch->pcdata->eyes = ch->pcdata->orignaleyes;
}
return;
}
else if( !xIS_SET( ( ch )->affected_by, AFF_POWER_FORM ) && arg == 0 )
{
ch_printf( ch, "Syntax: 'power form' [22-28]\n\r" );
return;
}
pl_mult = 28;
if( arg > pl_mult )
pl_mult = ( int )pl_mult;
else if( arg < 1 )
pl_mult = 1;
else
pl_mult = arg;
if( ch->mana < skill_table[gsn_power_form]->min_mana * pl_mult )
{
send_to_char( "&RWARNING:&Y Insufficient Energy to reroute.&D\n\r", ch );
return;
}
/*
* Added this to curve confusion about the Mystic PL_MULT -Karn 01.29.05
*/
if( arg < 22 || arg > 28 )
{
send_to_char( "Syntax: 'power form' [22-28]\n\r", ch );
return;
}
WAIT_STATE( ch, skill_table[gsn_power_form]->beats );
if( can_use_skill( ch, number_percent( ), gsn_power_form ) )
{
act( AT_GREEN,
"Your power is suddenly re-proportioned throughout your body, as your armor phase-shifts to a deep purple color, and you notice significant strength increases, as well as small amounts of speed loss..",
ch, NULL, NULL, TO_CHAR );
act( AT_GREEN,
"$n's armor phase-shifts to a deep purple color, and you notice $e has significantly more power.",
ch, NULL, NULL, TO_NOTVICT );
xSET_BIT( ( ch )->affected_by, AFF_POWER_FORM );
xREMOVE_BIT((ch)->affected_by, AFF_ACTIVE_FORM);
xREMOVE_BIT((ch)->affected_by, AFF_OMEGA_FORM);
xREMOVE_BIT((ch)->affected_by, AFF_PROTO_FORM);
ch->in_room->light++;
ch->pl = ch->exp * pl_mult;
transStatApply( ch, pl_mult * 1.5, pl_mult * -1, pl_mult * .5, pl_mult );
if( xIS_SET( ( ch )->affected_by, AFF_MAJIN ) )
ch->pl = ch->pl * 1.1;
learn_from_success( ch, gsn_power_form );
}
else
{
act( AT_GREEN,
"Your body fails to re-proportion your power right to unlock your Power Form.",
ch, NULL, NULL, TO_CHAR );
act( AT_GREEN,
"$n's armor phase-shifts slightly but returns to normal as $n fails to unlock $s Form.",
ch, NULL, NULL, TO_NOTVICT );
learn_from_failure( ch, gsn_active_form );
}
ch->mana -= skill_table[gsn_power_form]->min_mana * pl_mult;
return;
}
void do_proto_form( CHAR_DATA * ch, char *argument ) /* Proto Form */
{
if( IS_NPC( ch ) && is_split( ch ) )
{
if( !ch->master )
return;
if( !can_use_skill( ch->master, number_percent( ), gsn_proto_form ) )
return;
}
if( wearing_chip( ch ) )
{
ch_printf( ch, "You can't while you have a chip installed.\n\r" );
return;
}
if( wearing_sentient_chip( ch ) )
{
ch_printf( ch, "You can't use this." );
return;
}
double pl_mult = 0;
int arg;
arg = atoi( argument );
if( xIS_SET( ( ch )->affected_by, AFF_PROTO_FORM ) && arg == 0 )
{
send_to_char( "You reroute your power settings to their default status and return to normal.\n\r", ch );
/* Oh ya.. this should remove lighting effects to */
ch->in_room->light--;
xREMOVE_BIT( ( ch )->affected_by, AFF_PROTO_FORM );
transStatRemove( ch );
ch->pl = ch->exp;
if( !IS_NPC( ch ) )
{
ch->pcdata->haircolor = ch->pcdata->orignalhaircolor;
ch->pcdata->eyes = ch->pcdata->orignaleyes;
}
return;
}
else if( !xIS_SET( ( ch )->affected_by, AFF_PROTO_FORM ) && arg == 0 )
{
ch_printf( ch, "Syntax: 'proto form' [2-10]\n\r" );
return;
}
pl_mult = 10;
if( arg > pl_mult )
pl_mult = ( int )pl_mult;
else if( arg < 1 )
pl_mult = 1;
else
pl_mult = arg;
if( ch->mana < skill_table[gsn_proto_form]->min_mana * pl_mult )
{
send_to_char( "&RWARNING:&Y Insufficient Energy to reroute.&D\n\r", ch );
return;
}
/*
* Added this to curve confusion about the Mystic PL_MULT -Karn 01.29.05
*/
if( arg < 2 || arg > 10 )
{
send_to_char( "Syntax: 'proto form' [2-10]\n\r", ch );
return;
}
WAIT_STATE( ch, skill_table[gsn_proto_form]->beats );
if( can_use_skill( ch, number_percent( ), gsn_proto_form ) )
{
act( AT_CYAN,
"Your power is suddenly re-proportioned throughout your body, as your armor phase-shifts to jet black, and you notice power and speed boosts, but your armor has become a little less resistant to damage..",
ch, NULL, NULL, TO_CHAR );
act( AT_CYAN,
"$n's armor phase-shifts to jet black, and you notice $e has more speed and power, but looks a bit more fragile.",
ch, NULL, NULL, TO_NOTVICT );
xSET_BIT( ( ch )->affected_by, AFF_PROTO_FORM );
xREMOVE_BIT((ch)->affected_by, AFF_POWER_FORM);
xREMOVE_BIT((ch)->affected_by, AFF_OMEGA_FORM);
xREMOVE_BIT((ch)->affected_by, AFF_ACTIVE_FORM);
ch->in_room->light++;
ch->pl = ch->exp * pl_mult;
transStatApply( ch, pl_mult, pl_mult, pl_mult * .5, pl_mult * -1 );
if( xIS_SET( ( ch )->affected_by, AFF_MAJIN ) )
ch->pl = ch->pl * 1.1;
learn_from_success( ch, gsn_proto_form );
}
else
{
act( AT_CYAN,
"Your body fails to re-proportion your power right to unlock your Proto Form.",
ch, NULL, NULL, TO_CHAR );
act( AT_CYAN,
"$n's armor phase-shifts slightly but returns to normal as $n fails to unlock $s Form.",
ch, NULL, NULL, TO_NOTVICT );
learn_from_failure( ch, gsn_proto_form );
}
ch->mana -= skill_table[gsn_proto_form]->min_mana * pl_mult;
return;
}
void do_omega_form( CHAR_DATA * ch, char *argument ) /* Omega Form */
{
if( IS_NPC( ch ) && is_split( ch ) )
{
if( !ch->master )
return;
if( !can_use_skill( ch->master, number_percent( ), gsn_omega_form ) )
return;
}
if( wearing_chip( ch ) )
{
ch_printf( ch, "You can't while you have a chip installed.\n\r" );
return;
}
if( wearing_sentient_chip( ch ) )
{
ch_printf( ch, "You can't use this." );
return;
}
double pl_mult = 0;
int arg;
arg = atoi( argument );
if( xIS_SET( ( ch )->affected_by, AFF_OMEGA_FORM ) && arg == 0 )
{
send_to_char( "The boost of power you was experiencing has ended, leaving you wanting more..\n\r", ch );
/* Oh ya.. this should remove lighting effects to */
ch->in_room->light--;
xREMOVE_BIT( ( ch )->affected_by, AFF_OMEGA_FORM );
transStatRemove( ch );
ch->pl = ch->exp;
if( !IS_NPC( ch ) )
{
ch->pcdata->haircolor = ch->pcdata->orignalhaircolor;
ch->pcdata->eyes = ch->pcdata->orignaleyes;
}
return;
}
else if( !xIS_SET( ( ch )->affected_by, AFF_OMEGA_FORM ) && arg == 0 )
{
ch_printf( ch, "Syntax: 'omega form' [2-40]\n\r" );
return;
}
pl_mult = 40;
if( arg > pl_mult )
pl_mult = ( int )pl_mult;
else if( arg < 1 )
pl_mult = 1;
else
pl_mult = arg;
if( ch->mana < skill_table[gsn_omega_form]->min_mana * pl_mult )
{
send_to_char( "&RWARNING:&Y Insufficient Energy to reroute.&D\n\r", ch );
return;
}
/*
* Added this to curve confusion about the Mystic PL_MULT -Karn 01.29.05
*/
if( arg < 2 || arg > 40 )
{
send_to_char( "Syntax: 'omega form' [2-40]\n\r", ch );
return;
}
WAIT_STATE( ch, skill_table[gsn_omega_form]->beats );
if( can_use_skill( ch, number_percent( ), gsn_omega_form ) )
{
act( AT_DGREY,
"Your suddenly receive an extreme energy boost throughout your body, as your armor phase-shifts to crimson red, and you notice all primairy functions are working at above-average quality..",
ch, NULL, NULL, TO_CHAR );
act( AT_DGREY,
"$n's armor phase-shifts to crimson red and an omnious aura appears about $m.",
ch, NULL, NULL, TO_NOTVICT );
xSET_BIT( ( ch )->affected_by, AFF_OMEGA_FORM );
xREMOVE_BIT((ch)->affected_by, AFF_POWER_FORM);
xREMOVE_BIT((ch)->affected_by, AFF_ACTIVE_FORM);
xREMOVE_BIT((ch)->affected_by, AFF_PROTO_FORM);
ch->in_room->light++;
ch->pl = ch->exp * pl_mult;
transStatApply( ch, pl_mult * 3, pl_mult * -.5, pl_mult, pl_mult * 2 );
if( xIS_SET( ( ch )->affected_by, AFF_MAJIN ) )
ch->pl = ch->pl * 1.1;
learn_from_success( ch, gsn_omega_form );
}
else
{
act( AT_DGREY,
"Your body fails to re-proportion your power right to unlock your Omega Form.",
ch, NULL, NULL, TO_CHAR );
act( AT_DGREY,
"$n's armor phase-shifts slightly but returns to normal as $n fails to unlock $s Form.",
ch, NULL, NULL, TO_NOTVICT );
learn_from_failure( ch, gsn_omega_form );
}
ch->mana -= skill_table[gsn_omega_form]->min_mana * pl_mult;
return;
}
/*****************************************/
/* Reploid Skills Version 2.0 */
/* By Kalthizar */
/* */
/* [X] X Buster [X] Z-Saber */
/* [X] Leaf Shield [X] Gaga Attack 1 */
/* [X] Giga Attack 2 [X] Twin Slashers */
/* [X] Frost Tower [X] Ground Hunter */
/* [ ] Soul Body [X] Aiming Laser */
/* [ ] Double Cyclone [ ] Rising Fire */
/* [ ] Lightning Web */
/*****************************************/
void do_xbuster(CHAR_DATA *ch, char *argument ) /* X Buster */
{
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_xbuster ))
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_xbuster]->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_xbuster]->min_mana )
{
send_to_char( "You don't have the Energy you fire your X Buster.\n\r", ch );
return;
}
if (ch->focus < skill_table[gsn_xbuster]->focus)
{
send_to_char( "You need to focus more.\n\r", ch );
return;
}
else
ch->focus -= skill_table[gsn_xbuster]->focus;
WAIT_STATE( ch, skill_table[gsn_xbuster]->beats );
//sh_int z = get_aura(ch);
if ( can_use_skill(ch, number_percent(),gsn_xbuster ) )
{
dam = get_attmod(ch, victim) * number_range( 8, 10 );
if (ch->charge > 0)
dam = chargeDamMult(ch, dam);
act( AT_CYAN, "You fire your X Buster at $N. &W[$t]", ch, num_punct(dam), victim, TO_CHAR );
act( AT_CYAN, "$n fires at you with $s X Buster. &W[$t]", ch, num_punct(dam), victim, TO_VICT );
act( AT_CYAN, "$n fires at $N with $s X Buster. &W[$t]", ch, num_punct(dam), victim, TO_NOTVICT );
dam = ki_absorb( victim, ch, dam, gsn_xbuster );
learn_from_success( ch, gsn_xbuster );
global_retcode = damage( ch, victim, dam, TYPE_HIT );
}
else
{
act( AT_CYAN, "You missed $N with your X Buster.", ch, NULL, victim, TO_CHAR );
act( AT_CYAN, "$n misses you with $s X Buster.", ch, NULL, victim, TO_VICT );
act( AT_CYAN, "$n missed $N with $s X Buster.", ch, NULL, victim, TO_NOTVICT );
learn_from_failure( ch, gsn_xbuster );
global_retcode = damage( ch, victim, 0, TYPE_HIT );
}
if( !is_android_h(ch) )
ch->mana -= skill_table[gsn_xbuster]->min_mana;
return;
}
void do_zsaber(CHAR_DATA *ch, char *argument ) /* Z-Saber */
{
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_zsaber ))
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_zsaber]->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_zsaber]->min_mana )
{
send_to_char( "You don't have the energy to swing your Z Saber.\n\r", ch );
return;
}
if (ch->focus < skill_table[gsn_zsaber]->focus)
{
send_to_char( "You need to focus more.\n\r", ch );
return;
}
else
ch->focus -= skill_table[gsn_zsaber]->focus;
WAIT_STATE( ch, skill_table[gsn_zsaber]->beats );
//sh_int z = get_aura(ch);
if ( can_use_skill(ch, number_percent(),gsn_zsaber ) )
{
dam = get_attmod(ch, victim) * number_range( 15, 20 );
if (ch->charge > 0)
dam = chargeDamMult(ch, dam);
act( AT_CYAN, "Your left arm transforms into a shining &GGreen &Cplasma saber. ", ch, num_punct(dam), victim, TO_CHAR );
act( AT_CYAN, "You swing with all your might, cutting through $N. &W[$t] ", ch, num_punct(dam), victim, TO_CHAR );
act( AT_CYAN, "$n's left arm transforms into a shining &GGreen &Cplasma saber. ", ch, num_punct(dam), victim, TO_VICT );
act( AT_CYAN, "$n swings with all $s might, cutting through you. &W[$t] ", ch, num_punct(dam), victim, TO_VICT );
act( AT_CYAN, "$n's left arm transforms into a shining &GGreen &Cplasma saber. ", ch, num_punct(dam), victim, TO_NOTVICT );
act( AT_CYAN, "$n swings with all $s might, cutting through $N. &W[$t] ", ch, num_punct(dam), victim, TO_NOTVICT );
dam = ki_absorb( victim, ch, dam, gsn_zsaber );
learn_from_success( ch, gsn_zsaber );
global_retcode = damage( ch, victim, dam, TYPE_HIT );
}
else
{
act( AT_CYAN, "You missed $N with your Z Saber.", ch, NULL, victim, TO_CHAR );
act( AT_CYAN, "$n misses you with $s Z Saber.", ch, NULL, victim, TO_VICT );
act( AT_CYAN, "$n missed $N with $s Z Saber.", ch, NULL, victim, TO_NOTVICT );
learn_from_failure( ch, gsn_zsaber );
global_retcode = damage( ch, victim, 0, TYPE_HIT );
}
if( !is_android_h(ch) )
ch->mana -= skill_table[gsn_zsaber]->min_mana;
return;
}
void do_lshield(CHAR_DATA *ch, char *argument ) /* Leaf Shield*/
{
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_lshield ))
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_lshield]->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_lshield]->min_mana )
{
send_to_char( "You don't have the energy to create a Leaf Shield.\n\r", ch );
return;
}
if (ch->focus < skill_table[gsn_lshield]->focus)
{
send_to_char( "You need to focus more.\n\r", ch );
return;
}
else
ch->focus -= skill_table[gsn_lshield]->focus;
WAIT_STATE( ch, skill_table[gsn_lshield]->beats );
//sh_int z = get_aura(ch);
if ( can_use_skill(ch, number_percent(),gsn_lshield ) )
{
dam = get_attmod(ch, victim) * number_range( 15, 20 );
if (ch->charge > 0)
dam = chargeDamMult(ch, dam);
act( AT_CYAN, "&GYou Summon the powers to Create Leaf Shield.", ch, num_punct(dam), victim, TO_CHAR );
act( AT_CYAN, "&GYou send it flying towards $N. &W[$t]", ch, num_punct(dam), victim, TO_CHAR );
act( AT_CYAN, "&G$n creates a Leaf Shield and sends it flying at you. &W[$t]", ch, num_punct(dam), victim, TO_VICT );
act( AT_CYAN, "&G$n creates a Leaf Shield and sends it flying towards $N. &W[$t]", ch, num_punct(dam), victim, TO_NOTVICT );
dam = ki_absorb( victim, ch, dam, gsn_lshield );
learn_from_success( ch, gsn_lshield );
global_retcode = damage( ch, victim, dam, TYPE_HIT );
}
else
{
act( AT_CYAN, "&GYou missed $N with your Leaf Shield.", ch, NULL, victim, TO_CHAR );
act( AT_CYAN, "&G$n misses you with $s Leaf Shield.", ch, NULL, victim, TO_VICT );
act( AT_CYAN, "&G$n missed $N with $s Leaf Shield.", ch, NULL, victim, TO_NOTVICT );
learn_from_failure( ch, gsn_lshield );
global_retcode = damage( ch, victim, 0, TYPE_HIT );
}
if( !is_android_h(ch) )
ch->mana -= skill_table[gsn_lshield]->min_mana;
return;
}
void do_giga1(CHAR_DATA *ch, char *argument ) /* Giga Attack 1*/
{
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_giga1 ))
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_giga1]->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_giga1]->min_mana )
{
send_to_char( "You don't have enough energy to do the Giga Attack.\n\r", ch );
return;
}
if (ch->focus < skill_table[gsn_giga1]->focus)
{
send_to_char( "You need to focus more.\n\r", ch );
return;
}
else
ch->focus -= skill_table[gsn_giga1]->focus;
WAIT_STATE( ch, skill_table[gsn_giga1]->beats );
//sh_int z = get_aura(ch);
if ( can_use_skill(ch, number_percent(),gsn_giga1 ) )
{
dam = get_attmod(ch, victim) * number_range( 60, 65 );
if (ch->charge > 0)
dam = chargeDamMult(ch, dam);
act( AT_CYAN, "&zYou look at $N with a blaze of Anger. In fit of hatred, you propel your body into the", ch, num_punct(dam), victim, TO_CHAR );
act( AT_CYAN, "&zair. Massive amounts of energy begin to jolt from your body, a meteor falls from the sky,", ch, num_punct(dam), victim, TO_CHAR );
act( AT_CYAN, "&zlanding just inches from $N's feet. As $N looks towards the sky, a whole barrage of the", ch, num_punct(dam), victim, TO_CHAR );
act( AT_CYAN, "&zred hot rocks are coming straight at $m. $N has no time to dodge and gets destroyed by them. &W[$t]", ch, num_punct(dam), victim, TO_CHAR );
act( AT_CYAN, "&z$n looks at you with a blaze of Anger. In fit of hatred, $n propels $s body into the", ch, num_punct(dam), victim, TO_VICT );
act( AT_CYAN, "&zair. Massive amounts of energy begin to jolt from $n's body, a meteor falls from the sky,", ch, num_punct(dam), victim, TO_VICT );
act( AT_CYAN, "&zlanding just inches from your feet. As you look towards the sky, a whole barrage of the", ch, num_punct(dam), victim, TO_VICT );
act( AT_CYAN, "&zred hot rocks are coming straight at you. You have no time to dodge and you are destroyed by them. &W[$t]", ch, num_punct(dam), victim, TO_VICT );
act( AT_CYAN, "&z$n looks at $N with a blaze of Anger. In fit of hatred, $n propels $s body into the", ch, num_punct(dam), victim, TO_NOTVICT );
act( AT_CYAN, "&zair. Massive amounts of energy begin to jolt from $n's body, a meteor falls from the sky,", ch, num_punct(dam), victim, TO_NOTVICT );
act( AT_CYAN, "&zlanding just inches from $N's feet. As $N looks towards the sky, a whole barrage of the", ch, num_punct(dam), victim, TO_NOTVICT );
act( AT_CYAN, "&zred hot rocks are coming straight at $m. $N has no time to dodge and $N is destroyed by them. &W[$t]", ch, num_punct(dam), victim, TO_NOTVICT );
dam = ki_absorb( victim, ch, dam, gsn_giga1 );
learn_from_success( ch, gsn_giga1 );
global_retcode = damage( ch, victim, dam, TYPE_HIT );
}
else
{
act( AT_CYAN, "&GYou missed $N with your Giga Attack.", ch, NULL, victim, TO_CHAR );
act( AT_CYAN, "&G$n misses you with $s Giga Attack.", ch, NULL, victim, TO_VICT );
act( AT_CYAN, "&G$n missed $N with $s Giga Attack.", ch, NULL, victim, TO_NOTVICT );
learn_from_failure( ch, gsn_giga1 );
global_retcode = damage( ch, victim, 0, TYPE_HIT );
}
if( !is_android_h(ch) )
ch->mana -= skill_table[gsn_giga1]->min_mana;
return;
}
void do_giga2(CHAR_DATA *ch, char *argument ) /* Giga Attack 2 */
{
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_giga2 ))
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_giga2]->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_giga2]->min_mana )
{
send_to_char( "You don't have the Energy to use your Giga Attack.\n\r", ch );
return;
}
if (ch->focus < skill_table[gsn_giga2]->focus)
{
send_to_char( "You need to focus more.\n\r", ch );
return;
}
else
ch->focus -= skill_table[gsn_giga2]->focus;
WAIT_STATE( ch, skill_table[gsn_giga2]->beats );
//sh_int z = get_aura(ch);
if ( can_use_skill(ch, number_percent(),gsn_giga2 ) )
{
dam = get_attmod(ch, victim) * number_range( 70, 80 );
if (ch->charge > 0)
dam = chargeDamMult(ch, dam);
act( AT_CYAN, "As you launch yourself into the sky, wings begin to emerge from your body, propelling", ch, num_punct(dam), victim, TO_CHAR );
act( AT_CYAN, "you fowards. As this happens, a pale orangish aura begins emitting from your body, almost", ch, num_punct(dam), victim, TO_CHAR );
act( AT_CYAN, "as if you were charging for an energy blast. You slam through $N with a massive force. &W[$t]", ch, num_punct(dam), victim, TO_CHAR );
act( AT_CYAN, "$n launches himself into the air, wings begin to emerge from $s body, propelling $m", ch, num_punct(dam), victim, TO_VICT );
act( AT_CYAN, "forward. As this happens a pale orangish aura begins to envelope $s body, almost as", ch, num_punct(dam), victim, TO_VICT );
act( AT_CYAN, "if $e were charging for an energy blast. $n slams through your body with a massive force. &W[$t]", ch, num_punct(dam), victim, TO_VICT );
act( AT_CYAN, "$n launches himself into the sky, wings emerge from $s body as $e propels $mself towards", ch, num_punct(dam), victim, TO_NOTVICT );
act( AT_CYAN, "$N. A pale orangish aura evelopes $s body as $e flies through the air towards $N, $e hits with", ch, num_punct(dam), victim, TO_NOTVICT );
act( AT_CYAN, "with such a massive force, you feel as if $e hit you as well. &W[$t]", ch, num_punct(dam), victim, TO_NOTVICT );
dam = ki_absorb( victim, ch, dam, gsn_giga2 );
learn_from_success( ch, gsn_giga2 );
global_retcode = damage( ch, victim, dam, TYPE_HIT );
}
else
{
act( AT_CYAN, "You missed $N with your Giga Attack.", ch, NULL, victim, TO_CHAR );
act( AT_CYAN, "$n misses you with $s Giga Attack.", ch, NULL, victim, TO_VICT );
act( AT_CYAN, "$n missed $N with $s Giga Attack.", ch, NULL, victim, TO_NOTVICT );
learn_from_failure( ch, gsn_giga2 );
global_retcode = damage( ch, victim, 0, TYPE_HIT );
}
if( !is_android_h(ch) )
ch->mana -= skill_table[gsn_giga2]->min_mana;
return;
}
void do_tslasher(CHAR_DATA *ch, char *argument ) /* Twin Slasher X4 */
{
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_tslasher ))
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_tslasher]->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_tslasher]->min_mana )
{
send_to_char( "You don't have the Energy you fire your Twin Slasher.\n\r", ch );
return;
}
if (ch->focus < skill_table[gsn_tslasher]->focus)
{
send_to_char( "You need to focus more.\n\r", ch );
return;
}
else
ch->focus -= skill_table[gsn_tslasher]->focus;
WAIT_STATE( ch, skill_table[gsn_tslasher]->beats );
//sh_int z = get_aura(ch);
if ( can_use_skill(ch, number_percent(),gsn_tslasher ) )
{
dam = get_attmod(ch, victim) * number_range( 30, 35 );
if (ch->charge > 0)
dam = chargeDamMult(ch, dam);
act( AT_CYAN, "Adapting the powers of Slash Beast, you fire your Twin Slashers at $N. &W[$t]", ch, num_punct(dam), victim, TO_CHAR );
act( AT_CYAN, "$n fires at you with $s Twin Slasher. &W[$t]", ch, num_punct(dam), victim, TO_VICT );
act( AT_CYAN, "$n fires at $N with $s Twin Slasher. &W[$t]", ch, num_punct(dam), victim, TO_NOTVICT );
dam = ki_absorb( victim, ch, dam, gsn_tslasher );
learn_from_success( ch, gsn_tslasher );
global_retcode = damage( ch, victim, dam, TYPE_HIT );
}
else
{
act( AT_CYAN, "You missed $N with your Twin Slasher.", ch, NULL, victim, TO_CHAR );
act( AT_CYAN, "$n misses you with $s Twin Slasher.", ch, NULL, victim, TO_VICT );
act( AT_CYAN, "$n missed $N with $s Twin Slasher.", ch, NULL, victim, TO_NOTVICT );
learn_from_failure( ch, gsn_tslasher );
global_retcode = damage( ch, victim, 0, TYPE_HIT );
}
if( !is_android_h(ch) )
ch->mana -= skill_table[gsn_tslasher]->min_mana;
return;
}
void do_ftower(CHAR_DATA *ch, char *argument ) /* Frost Tower X4 */
{
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_ftower ))
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_ftower]->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_ftower]->min_mana )
{
send_to_char( "You don't have the Energy you fire your Frost Tower.\n\r", ch );
return;
}
if (ch->focus < skill_table[gsn_ftower]->focus)
{
send_to_char( "You need to focus more.\n\r", ch );
return;
}
else
ch->focus -= skill_table[gsn_ftower]->focus;
WAIT_STATE( ch, skill_table[gsn_ftower]->beats );
//sh_int z = get_aura(ch);
if ( can_use_skill(ch, number_percent(),gsn_ftower ) )
{
dam = get_attmod(ch, victim) * number_range( 25, 35 );
if (ch->charge > 0)
dam = chargeDamMult(ch, dam);
act( AT_CYAN, "Adapting the powers of Frost Walrus, you surround your body in Ice, inflicting damage to $N as $E grabs you. &W[$t]", ch, num_punct(dam), victim, TO_CHAR );
act( AT_CYAN, "$n's body turns to ice as you grab $m. &W[$t]", ch, num_punct(dam), victim, TO_VICT );
act( AT_CYAN, "$n's body turns to ice as $N grabs $m. &W[$t]", ch, num_punct(dam), victim, TO_NOTVICT );
xSET_BIT( (ch)->affected_by, AFF_ICESHIELD );
dam = ki_absorb( victim, ch, dam, gsn_ftower );
learn_from_success( ch, gsn_ftower );
global_retcode = damage( ch, victim, dam, TYPE_HIT );
}
else
{
act( AT_CYAN, "You missed $N with your Frost Tower.", ch, NULL, victim, TO_CHAR );
act( AT_CYAN, "$n misses you with $s Frost Tower.", ch, NULL, victim, TO_VICT );
act( AT_CYAN, "$n missed $N with $s Frost Tower.", ch, NULL, victim, TO_NOTVICT );
learn_from_failure( ch, gsn_ftower );
global_retcode = damage( ch, victim, 0, TYPE_HIT );
}
if( !is_android_h(ch) )
ch->mana -= skill_table[gsn_ftower]->min_mana;
return;
}
void do_ghunter(CHAR_DATA *ch, char *argument ) /* Ground Hunter X4 */
{
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_ghunter ))
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_ghunter]->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_ghunter]->min_mana )
{
send_to_char( "You don't have the Energy you fire your Ground Hunter.\n\r", ch );
return;
}
if (ch->focus < skill_table[gsn_ghunter]->focus)
{
send_to_char( "You need to focus more.\n\r", ch );
return;
}
else
ch->focus -= skill_table[gsn_ghunter]->focus;
WAIT_STATE( ch, skill_table[gsn_ghunter]->beats );
//sh_int z = get_aura(ch);
if ( can_use_skill(ch, number_percent(),gsn_ghunter ) )
{
dam = get_attmod(ch, victim) * number_range( 35, 40 );
if (ch->charge > 0)
dam = chargeDamMult(ch, dam);
act( AT_CYAN, "Adapting the powers of Jet Sting Ray, you fire a miniture sting ray at $N, it explodes on impact. &W[$t]", ch, num_punct(dam), victim, TO_CHAR );
act( AT_CYAN, "$n fires a miniture sting ray at you, it hits. &W[$t]", ch, num_punct(dam), victim, TO_VICT );
act( AT_CYAN, "$n fires a miniture sting ray at $N, it hits. &W[$t]", ch, num_punct(dam), victim, TO_NOTVICT );
dam = ki_absorb( victim, ch, dam, gsn_ghunter );
learn_from_success( ch, gsn_ghunter );
global_retcode = damage( ch, victim, dam, TYPE_HIT );
}
else
{
act( AT_CYAN, "&GYou missed $N with your Ground Hunter.", ch, NULL, victim, TO_CHAR );
act( AT_CYAN, "&G$n misses you with $s Ground Hunter.", ch, NULL, victim, TO_VICT );
act( AT_CYAN, "&G$n missed $N with $s Ground Hunter.", ch, NULL, victim, TO_NOTVICT );
learn_from_failure( ch, gsn_ghunter );
global_retcode = damage( ch, victim, 0, TYPE_HIT );
}
if( !is_android_h(ch) )
ch->mana -= skill_table[gsn_ghunter]->min_mana;
return;
}
void do_aiminglaser( CHAR_DATA * ch, char *argument ) /* Aiming Laser */
{
CHAR_DATA *victim;
int dam = 0;
int count = 0;
char buf[MAX_STRING_LENGTH];
char buf2[MAX_STRING_LENGTH];
if( IS_NPC( ch ) && is_split( ch ) )
{
if( !ch->master )
return;
if( !can_use_skill( ch->master, number_percent( ), gsn_aiminglaser ) )
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_aiminglaser]->skill_level[ch->class] )
{
send_to_char( "You can't do that.\n\r", ch );
return;
}
count = atoi( argument );
if( count < 1 || count > 20 )
{
ch_printf( ch, "The batch of lasers must be between 1 and 20.\n\r" );
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_aiminglaser]->min_mana * count )
{
send_to_char( "You don't have enough energy.\n\r", ch );
return;
}
if( ch->focus < skill_table[gsn_aiminglaser]->focus * count )
{
send_to_char( "You need to focus more.\n\r", ch );
return;
}
else
ch->focus -= skill_table[gsn_aiminglaser]->focus * count;
WAIT_STATE( ch, skill_table[gsn_aiminglaser]->beats );
if( can_use_skill( ch, number_percent( ), gsn_aiminglaser ) )
{
int shots = count;
int dam2 = 0;
while( shots > 0 )
{
switch ( number_range( 1, 3 ) )
{
default:
case 1:
case 2:
dam += number_range( 1, 2 );
break;
case 3:
dam += number_range( 1, 3 );
break;
}
shots--;
}
dam2 = number_range( 4, 8 );
//dam2 = number_range( 8, 20 );
dam = ( get_attmod( ch, victim ) * dam * dam2 );
if( ch->charge > 0 )
dam = chargeDamMult( ch, dam );
strcpy( buf, num_punct( count ) );
strcpy( buf2, num_punct( dam ) );
act2( AT_RED,
"You cross your arms infront of yourself and reroute an incredible amount of energy from around your body; your aura flaring up brightly as you do. Your arm suddenly fills up with this energy as it transforms into a strange laser cannon. You fire $t energy beams towards $N.",
ch, buf, victim, TO_CHAR, NULL );
act2( AT_RED,
"You hold your arm steady with your free hand, keeping a lock on $N. All $t lasers home in on $N and pierce $M, exploding violently. &W[$T]",
ch, buf, victim, TO_CHAR, buf2 );
act2( AT_RED,
"$n crosses $s arms infront of $mself and reroutes an incredible amount of energy from around $s body; $s aura flaring up brightly as $e does. $n's arm suddenly fills up with this energy as it transforms into a strange laser cannon. $n fires $t energe beams towards you.",
ch, buf, victim, TO_VICT, NULL );
act2( AT_RED,
"$n holds $s arm steady with $s free hand, keeping a lock on you. All $t lasers home in on you and pierce your body, exploding violently. &W[$T]",
ch, buf, victim, TO_VICT, buf2 );
act2( AT_RED,
"$n crosses $s arms infront of $mself and reroutes an incredible amount of energy from around $s body; $s aura flaring up brightly as $e does. $n's arm suddenly fills up with this energy as it transforms into a strange laser cannon. $n fires $t energe beams towards $N.",
ch, buf, victim, TO_NOTVICT, NULL );
act2( AT_RED,
"$n holds $s arm steady with $s free hand, keeping a lock on $N. All $t lasers home in on $N and pierce $M, exploding violently. &W[$T]",
ch, buf, victim, TO_NOTVICT, buf2 );
dam = ki_absorb( victim, ch, dam, gsn_aiminglaser );
learn_from_success( ch, gsn_aiminglaser );
global_retcode = damage( ch, victim, dam, TYPE_HIT );
}
else
{
act( AT_RED, "You missed $N with your aiming laser.", ch, NULL, victim, TO_CHAR );
act( AT_RED, "$n misses you with $s aiming laser.", ch, NULL, victim, TO_VICT );
act( AT_RED, "$n missed $N with $s aiming laser.", ch, NULL, victim, TO_NOTVICT );
learn_from_failure( ch, gsn_aiminglaser );
global_retcode = damage( ch, victim, 0, TYPE_HIT );
}
ch->mana -= skill_table[gsn_aiminglaser]->min_mana * count;
return;
}
void do_pabsorb( CHAR_DATA * ch, char *argument )
{
float left = 0;
float right = 0;
if( IS_NPC( ch ) )
return;
left = ( float )ch->mana / ch->max_mana;
right = ( float )ch->pcdata->learned[gsn_pabsorb] / 100;
if( ch->fighting )
{
send_to_char( "&wYou can't concentrate enough for that.\n\r", ch );
return;
}
if( left >= right )
{
send_to_char( "&zYou are already at peace with everything.\n\r", ch );
return;
}
switch ( ch->substate )
{
default:
if( IS_NPC( ch ) && IS_AFFECTED( ch, AFF_CHARM ) )
{
send_to_char( "&wYou can't concentrate enough for that.\n\r", ch );
return;
}
if( ch->mount )
{
send_to_char( "&wYou can't do that while mounted.\n\r", ch );
return;
}
add_timer( ch, TIMER_DO_FUN, number_range( 1, 3 ), do_pabsorb, 1 );
send_to_char( "&zYou begin to absorb photons...\n\r", ch );
act( AT_PLAIN, "&z$n begins to absorb photons...", ch, NULL, NULL, TO_ROOM );
return;
case 1:
if( ch->fighting )
{
send_to_char( "&zYou stop absorbing photons...\n\r", ch );
act( AT_PLAIN, "&z$n stops absorbing photons...", ch, NULL, NULL, TO_ROOM );
return;
}
if( can_use_skill( ch, number_percent( ), gsn_pabsorb ) )
{
send_to_char( "&zYou absorb photons into your body, replenishing lost energy.\n\r", ch );
learn_from_success( ch, gsn_meditate );
ch->mana += ( float )right / 25 * ch->max_mana;
}
else
{
send_to_char( "&zYou fail to absorb enough photons.\n\r", ch );
learn_from_failure( ch, gsn_meditate );
}
if( left >= right )
{
send_to_char( "&zYou have no need for further replenishing energy.\n\r", ch );
return;
}
add_timer( ch, TIMER_DO_FUN, number_range( 1, 3 ), do_pabsorb, 2 );
return;
case 2:
if( ch->fighting )
{
send_to_char( "&zYou stop absorbing photons...\n\r", ch );
act( AT_PLAIN, "&z$n stops absorbing photons...", ch, NULL, NULL, TO_ROOM );
return;
}
if( can_use_skill( ch, number_percent( ), gsn_pabsorb ) )
{
send_to_char( "&zYou absorb photons into your body, replenishing lost energy.\n\r", ch );
learn_from_success( ch, gsn_meditate );
ch->mana += ( float )right / 25 * ch->max_mana;
}
else
{
send_to_char( "&zYou fail to absorb enough photons.\n\r", ch );
learn_from_failure( ch, gsn_pabsorb );
}
if( left >= right )
{
send_to_char( "&zYou have no need for further replenishing energy.\n\r", ch );
return;
}
add_timer( ch, TIMER_DO_FUN, number_range( 1, 3 ), do_pabsorb, 1 );
return;
case SUB_TIMER_DO_ABORT:
ch->substate = SUB_NONE;
send_to_char( "&zYou stop absorbing photons...\n\r", ch );
act( AT_PLAIN, "&z$n stops absorbing photons...", ch, NULL, NULL, TO_ROOM );
return;
}
return;
}