#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 make_pc_candy args( ( CHAR_DATA * ch ) ); void make_npc_candy args( ( CHAR_DATA * ch ) ); bool removeGenieTrans( CHAR_DATA * ch ) { if( xIS_SET( ch->affected_by, AFF_EVIL_TRANS ) ) { xREMOVE_BIT( ch->affected_by, AFF_EVIL_TRANS ); transStatRemove( ch ); return TRUE; } if( xIS_SET( ch->affected_by, AFF_SUPER_TRANS ) ) { xREMOVE_BIT( ch->affected_by, AFF_SUPER_TRANS ); transStatRemove( ch ); return TRUE; } if( xIS_SET( ch->affected_by, AFF_KID_TRANS ) ) { xREMOVE_BIT( ch->affected_by, AFF_KID_TRANS ); transStatRemove( ch ); return TRUE; } return FALSE; } void make_npc_candy( CHAR_DATA * ch ) { char buf[MAX_STRING_LENGTH]; OBJ_DATA *candy; candy = create_object( get_obj_index( 301101 ), 0 ); sprintf( buf, "chocolate ball" ); STRFREE( candy->name ); candy->name = STRALLOC( buf ); sprintf( buf, candy->short_descr ); STRFREE( candy->short_descr ); candy->short_descr = STRALLOC( buf ); obj_to_char( candy, ch ); return; } void make_pc_candy( CHAR_DATA * ch ) { char buf[MAX_STRING_LENGTH]; OBJ_DATA *candy; candy = create_object( get_obj_index( 199 ), 0 ); sprintf( buf, "chocolate figure" ); STRFREE( candy->name ); candy->name = STRALLOC( buf ); sprintf( buf, candy->short_descr ); STRFREE( candy->short_descr ); candy->short_descr = STRALLOC( buf ); obj_to_char( candy, ch ); return; } void do_transform( CHAR_DATA * ch, char *argument ) { if( !is_genie( ch ) ) { send_to_char( "You can't do that.\n\r", ch ); 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; } if( !argument || argument[0] == '\0' ) { send_to_char( "Syntax: transform [thin|super|kid]\n\r", ch ); return; } if( !str_prefix( argument, "thin" ) ) { if( ch->exp < skill_table[gsn_thin_trans]->min_level[ch->race] ) { send_to_char( "You can't do that at your level.\n\r", ch ); return; } if( ch->mana < skill_table[gsn_thin_trans]->min_mana ) { send_to_char( "You don't have enough energy.\n\r", ch ); return; } WAIT_STATE( ch, skill_table[gsn_thin_trans]->beats ); if( can_use_skill( ch, number_percent( ), gsn_thin_trans ) ) { removeGenieTrans( ch ); act( AT_PINK, "Steam courses through the series of holes along your head, as you begin", ch, NULL, NULL, TO_CHAR ); act( AT_PINK, "to let out a high-pitched shriek. Your rolling layers of pink flesh", ch, NULL, NULL, TO_CHAR ); act( AT_PINK, "rapidly compact, giving you a leaner, more sinister look.", ch, NULL, NULL, TO_CHAR ); act( AT_PINK, "Steam courses through the series of holes along $n's head as $e begins", ch, NULL, NULL, TO_NOTVICT ); act( AT_PINK, "to let out a high-pitched shriek. $*s rolling layers of pink flesh rapidly", ch, NULL, NULL, TO_NOTVICT ); act( AT_PINK, "compact, giving $m a leaner, more sinister look.", ch, NULL, NULL, TO_NOTVICT ); xSET_BIT( ch->affected_by, AFF_EVIL_TRANS ); ch->pl = ch->exp * 9; transStatApply( ch, 6, 9, 4, 9 ); if( xIS_SET( ( ch )->affected_by, AFF_MAJIN ) ) ch->pl = ch->pl * 1.1; learn_from_success( ch, gsn_thin_trans ); } else { act( AT_PLAIN, "You failed.", ch, NULL, NULL, TO_CHAR ); learn_from_failure( ch, gsn_thin_trans ); } ch->mana -= skill_table[gsn_thin_trans]->min_mana; return; } if( !str_prefix( argument, "super" ) ) { if( ch->exp < skill_table[gsn_super_trans]->min_level[ch->race] ) { send_to_char( "You can't do that at your level.\n\r", ch ); return; } if( !xIS_SET( ch->affected_by, AFF_EVIL_TRANS ) && !xIS_SET( ch->affected_by, AFF_KID_TRANS ) ) { send_to_char( "You can't do that in this form.\n\r", ch ); return; } if( ch->mana < skill_table[gsn_super_trans]->min_mana ) { send_to_char( "You don't have enough energy.\n\r", ch ); return; } WAIT_STATE( ch, skill_table[gsn_super_trans]->beats ); if( can_use_skill( ch, number_percent( ), gsn_super_trans ) ) { removeGenieTrans( ch ); act( AT_PINK, "You utter a low-pitched growl, steam blasting through the porting in", ch, NULL, NULL, TO_CHAR ); act( AT_PINK, "your head, as you draw energy from your absorbed victims. The tentacle", ch, NULL, NULL, TO_CHAR ); act( AT_PINK, "atop your head lengthens to mid-back level and your slender body bulks", ch, NULL, NULL, TO_CHAR ); act( AT_PINK, "up, taking on a powerful, muscular look. An aura of dark purple energy", ch, NULL, NULL, TO_CHAR ); act( AT_PINK, "surrounds you.", ch, NULL, NULL, TO_CHAR ); act( AT_PINK, "$n utters a low-pitched growl, steam blasting through the porting", ch, NULL, NULL, TO_NOTVICT ); act( AT_PINK, "in $s head, as $e draws energy from $s absorbed victims. The tentacle", ch, NULL, NULL, TO_NOTVICT ); act( AT_PINK, "atop $s head lengthens to mid-back level and $s slender body bulks up,", ch, NULL, NULL, TO_NOTVICT ); act( AT_PINK, "taking on a powerful, muscular look. An aura of dark purple energy", ch, NULL, NULL, TO_NOTVICT ); act( AT_PINK, "surrounds $m.", ch, NULL, NULL, TO_NOTVICT ); xSET_BIT( ch->affected_by, AFF_SUPER_TRANS ); ch->pl = ch->exp * 20; transStatApply( ch, 18, 15, 12, 18 ); if( xIS_SET( ( ch )->affected_by, AFF_MAJIN ) ) ch->pl = ch->pl * 1.1; learn_from_success( ch, gsn_super_trans ); } else { act( AT_PLAIN, "You failed.", ch, NULL, NULL, TO_CHAR ); learn_from_failure( ch, gsn_super_trans ); } ch->mana -= skill_table[gsn_super_trans]->min_mana; return; } if( !str_prefix( argument, "kid" ) ) { if( ch->exp < skill_table[gsn_kid_trans]->min_level[ch->race] ) { send_to_char( "You can't do that at your level.\n\r", ch ); return; } if( !xIS_SET( ch->affected_by, AFF_SUPER_TRANS ) ) { send_to_char( "You can't do that in this form.\n\r", ch ); return; } if( ch->mana < skill_table[gsn_kid_trans]->min_mana ) { send_to_char( "You don't have enough energy.\n\r", ch ); return; } WAIT_STATE( ch, skill_table[gsn_kid_trans]->beats ); if( can_use_skill( ch, number_percent( ), gsn_kid_trans ) ) { removeGenieTrans( ch ); act( AT_PINK, "You bellow loudly, your voice starting deep and gradually becoming more", ch, NULL, NULL, TO_CHAR ); act( AT_PINK, "shrill as the stolen energy gives way to a terrifying strength of your", ch, NULL, NULL, TO_CHAR ); act( AT_PINK, "own. Steam shrieks through the holes along your head, completely masking", ch, NULL, NULL, TO_CHAR ); act( AT_PINK, "your presence. Your form shrinks and compacts and when the steam finally", ch, NULL, NULL, TO_CHAR ); act( AT_PINK, "clears, you have transformed into a child-sized version of yourself,", ch, NULL, NULL, TO_CHAR ); act( AT_PINK, "radiating a horrifying power.", ch, NULL, NULL, TO_CHAR ); act( AT_PINK, "$n bellows loudly, $s voice starting deep and gradually becoming more", ch, NULL, NULL, TO_NOTVICT ); act( AT_PINK, "shrill as the stolen energy gives way to a terrifying strength of $s own.", ch, NULL, NULL, TO_NOTVICT ); act( AT_PINK, "Steam shrieks through the holes along $s head, completely masking $s", ch, NULL, NULL, TO_NOTVICT ); act( AT_PINK, "presence. $*s form shrinks and compacts and when the steam finally", ch, NULL, NULL, TO_NOTVICT ); act( AT_PINK, "clears, $e has transformed into a child-sized version of $mself,", ch, NULL, NULL, TO_NOTVICT ); act( AT_PINK, "radiating a horrifiyng power.", ch, NULL, NULL, TO_NOTVICT ); xSET_BIT( ch->affected_by, AFF_KID_TRANS ); ch->pl = ch->exp * 28; transStatApply( ch, 22, 27, 18, 27 ); if( xIS_SET( ( ch )->affected_by, AFF_MAJIN ) ) ch->pl = ch->pl * 1.1; learn_from_success( ch, gsn_kid_trans ); } else { act( AT_PLAIN, "You failed.", ch, NULL, NULL, TO_CHAR ); learn_from_failure( ch, gsn_kid_trans ); } ch->mana -= skill_table[gsn_kid_trans]->min_mana; return; } do_transform( ch, "" ); return; } void do_demon_wave( CHAR_DATA * ch, char *argument ) { CHAR_DATA *victim; int dam = 0; if( !IS_NPC( ch ) && ch->exp < skill_table[gsn_demonwave]->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_demonwave]->min_mana ) { send_to_char( "You don't have enough energy.\n\r", ch ); return; } if( ch->focus < skill_table[gsn_demonwave]->focus ) { send_to_char( "You need to focus more.\n\r", ch ); return; } ch->focus -= skill_table[gsn_demonwave]->focus; WAIT_STATE( ch, skill_table[gsn_demonwave]->beats ); if( can_use_skill( ch, number_percent( ), gsn_demonwave ) ) { dam = get_attmod( ch, victim ) * number_range( 22, 28 ); if( ch->charge > 0 ) dam = chargeDamMult( ch, dam ); act( AT_DGREY, "You cup your hands and grin at $N, \"You go bye bye now!\" ", ch, NULL, victim, TO_CHAR ); act( AT_DGREY, "A ball of sparkling purple energy appears in your palms and you push your hands", ch, NULL, victim, TO_CHAR ); act( AT_DGREY, "forward, creating a massive wave of energy that flies at $N! &W[$t]", ch, num_punct( dam ), victim, TO_CHAR ); act( AT_DGREY, "$n cups $s hands and grins at you, \"You go bye bye now!\" ", ch, NULL, victim, TO_VICT ); act( AT_DGREY, "A ball of sparkling purple energy appears in $s palms and $e pushes $s hands", ch, NULL, victim, TO_VICT ); act( AT_DGREY, "forward, creating a massive wave of energy that flies at you! &W[$t]", ch, num_punct( dam ), victim, TO_VICT ); act( AT_DGREY, "$n cups $s hands and grins at $N, \"You go bye bye now!\" ", ch, NULL, victim, TO_NOTVICT ); act( AT_DGREY, "A ball of sparkling purple energy appears in $s palms and $e pushes $s hands", ch, NULL, victim, TO_NOTVICT ); act( AT_DGREY, "forward, creating a massive wave of energy that flies at $N! &W[$t]", ch, num_punct( dam ), victim, TO_NOTVICT ); dam = ki_absorb( victim, ch, dam, gsn_demonwave ); learn_from_success( ch, gsn_demonwave ); global_retcode = damage( ch, victim, dam, TYPE_HIT ); } else { act( AT_DGREY, "You missed $N with your demon wave.", ch, NULL, victim, TO_CHAR ); act( AT_DGREY, "$n misses you with $s demon wave.", ch, NULL, victim, TO_VICT ); act( AT_DGREY, "$n missed $N with a demon wave.", ch, NULL, victim, TO_NOTVICT ); learn_from_failure( ch, gsn_demonwave ); global_retcode = damage( ch, victim, 0, TYPE_HIT ); } ch->mana -= skill_table[gsn_demonwave]->min_mana; return; } void do_candy_blast( CHAR_DATA * ch, char *argument ) { CHAR_DATA *victim; int dam = 0; if( is_namek( ch ) ) { ch_printf( ch, "You are not allowed.\n\r" ); 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_candyblast]->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_candyblast]->min_mana ) { send_to_char( "You don't have enough energy.\n\r", ch ); return; } if( ch->focus < skill_table[gsn_candyblast]->focus ) { send_to_char( "You need to focus more.\n\r", ch ); return; } else ch->focus -= skill_table[gsn_candyblast]->focus; WAIT_STATE( ch, skill_table[gsn_candyblast]->beats ); if( can_use_skill( ch, number_percent( ), gsn_candyblast ) ) { switch ( IS_NPC( victim ) ? number_range( 5, 100 ) : number_range( 1, 100 ) ) { case 100: if( IS_NPC( victim ) || ( !IS_NPC( victim ) && !xIS_SET( ch->act, PLR_SPAR ) ) ) { if( victim->pl / ch->pl >= 2 ) { dam = number_range( 1, 2 ); act( AT_PINK, "Your head tentacle flips forwards, shooting a bright red beam of energy at", ch, NULL, victim, TO_CHAR ); act( AT_PINK, "$N. $N convulses as $S body begins to harden and shrink.\n", ch, NULL, victim, TO_CHAR ); act( AT_CYAN, "Fortunately for $N, $S body begins to grow and $S skin begins to soften", ch, NULL, victim, TO_CHAR ); act( AT_CYAN, "once more, leaving $S little more than out of breath. &W[$t]", ch, num_punct( dam ), victim, TO_CHAR ); act( AT_PINK, "$N's head tentacle flips forwards, shooting a bright red beam of energy at", ch, NULL, victim, TO_VICT ); act( AT_PINK, "you. You convulse as your body begins to harden and shrink.\n", ch, NULL, victim, TO_VICT ); act( AT_CYAN, "Fortunately for you, you notice you body returning to normal form and your", ch, NULL, victim, TO_VICT ); act( AT_CYAN, "skin softening. &W[$t]", ch, num_punct( dam ), victim, TO_VICT ); act( AT_PINK, "$N's head tentacle flips forwards, shooting a bright red beam of energy at", ch, NULL, victim, TO_NOTVICT ); act( AT_PINK, "$N. $N convulses as $S body begins to harden and shrink.\n", ch, NULL, victim, TO_NOTVICT ); act( AT_CYAN, "Fortunately for $N, $S body begins to grow and $S skin begins to soften", ch, NULL, victim, TO_NOTVICT ); act( AT_CYAN, "once more, leaving $S little more than out of breath. &W[$t]", ch, num_punct( dam ), victim, TO_NOTVICT ); break; } dam = 999999999; if( IS_NPC( victim ) ) make_npc_candy( ch ); if( !IS_NPC( victim ) ) make_pc_candy( ch ); act( AT_PINK, "Your head tentacle flips forwards, shooting a bright red beam of energy at", ch, NULL, victim, TO_CHAR ); act( AT_PINK, "$N. $N convulses as $S body begins to harden and shrink.\n", ch, NULL, victim, TO_CHAR ); act( AT_RED, "Suddenly a loud *POP* is heard as the ray diminishes, turning $N into a", ch, NULL, victim, TO_CHAR ); act( AT_RED, "small ball of everlasting candy. &W[$t]", ch, num_punct( dam ), victim, TO_CHAR ); act( AT_PINK, "$n's head tentacle flips forwards, shooting a bright red beam of energy at", ch, NULL, victim, TO_VICT ); act( AT_PINK, "You. You convulses as your body begins to harden and shrink.\n", ch, NULL, victim, TO_VICT ); act( AT_RED, "Suddenly a loud *POP* is heard as the ray diminishes, turning you into a", ch, NULL, victim, TO_VICT ); act( AT_RED, "small ball of everlasting candy. &W[$t]", ch, num_punct( dam ), victim, TO_VICT ); act( AT_PINK, "$n's head tentacle flips forwards, shooting a bright red beam of energy at", ch, NULL, victim, TO_NOTVICT ); act( AT_PINK, "$N. $N convulses as $S body begins to harden and shrink.\n", ch, NULL, victim, TO_NOTVICT ); act( AT_RED, "Suddenly a loud *POP* is heard as the ray diminishes, turning $N into a", ch, NULL, victim, TO_NOTVICT ); act( AT_RED, "small ball of everlasting candy. &W[$t]", ch, num_punct( dam ), victim, TO_NOTVICT ); learn_from_success( ch, gsn_candyblast ); global_retcode = damage( ch, victim, dam, TYPE_HIT ); break; } default: dam = get_attmod( ch, victim ) * number_range( 35, 45 ); if( ch->charge > 0 ) dam = chargeDamMult( ch, dam ); act( AT_PINK, "Your head tentacle flips towards $N and fires a pink beam of energy. The", ch, NULL, victim, TO_CHAR ); act( AT_PINK, "ray hits and engulfs $N in a pink blaze that electrifies $S body. &W[$t]", ch, num_punct( dam ), victim, TO_CHAR ); act( AT_PINK, "$n's head tentacle flips towards you and fires a pink beam of energy. The", ch, NULL, victim, TO_VICT ); act( AT_PINK, "ray hits and engulfs you in a pink blaze that electrifies your body. &W[$t]", ch, num_punct( dam ), victim, TO_VICT ); act( AT_PINK, "$n's head tentacle flips towards $N and fires a pink beam of energy. The", ch, NULL, victim, TO_NOTVICT ); act( AT_PINK, "ray hits and engulfs $N in a pink blaze that electrifies $S body. &W[$t]", ch, num_punct( dam ), victim, TO_NOTVICT ); dam = ki_absorb( victim, ch, dam, gsn_candyblast ); learn_from_success( ch, gsn_candyblast ); global_retcode = damage( ch, victim, dam, TYPE_HIT ); break; } } else { act( AT_PINK, "You missed $N with your candy blast.", ch, NULL, victim, TO_CHAR ); act( AT_PINK, "$n misses you with $s candy blast.", ch, NULL, victim, TO_VICT ); act( AT_PINK, "$n missed $N with a candy blast.", ch, NULL, victim, TO_NOTVICT ); learn_from_failure( ch, gsn_candyblast ); global_retcode = damage( ch, victim, 0, TYPE_HIT ); } ch->mana -= skill_table[gsn_candyblast]->min_mana; return; } void do_tentacle_attack( CHAR_DATA * ch, char *argument ) { CHAR_DATA *victim; int dam = 0; 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_tentacle]->skill_level[ch->class] ) { send_to_char( "That isn't quite one of your natural skills.\n\r", ch ); return; } if( ( victim = who_fighting( ch ) ) == NULL ) { send_to_char( "You aren't fighting anyone.\n\r", ch ); return; } WAIT_STATE( ch, skill_table[gsn_tentacle]->beats ); if( can_use_skill( ch, number_percent( ), gsn_tentacle ) ) { dam = number_range( 1, ch->level ); act( AT_PINK, "Grinning with a maniacal expression, you carefully plot where to strike your", ch, NULL, victim, TO_CHAR ); act( AT_PINK, "victim next. Swaying from the back of your head, your muscular tentacle rapidly", ch, NULL, victim, TO_CHAR ); act( AT_PINK, "lashes forward to attack $N with a mind numbing blow. The whip like", ch, NULL, victim, TO_CHAR ); act( AT_PINK, "blob overpowers $S defenses and strikes $M to the ground before $E can", ch, NULL, victim, TO_CHAR ); act( AT_PINK, "retaliate. &W[$t]", ch, num_punct( dam ), victim, TO_CHAR ); act( AT_PINK, "Grinning with a maniacal expression, $n carefully plots where to strike", ch, NULL, victim, TO_VICT ); act( AT_PINK, "$s victim next. Swaying from the back of $s head, $n's muscular tentacle", ch, NULL, victim, TO_VICT ); act( AT_PINK, "rapidly lashes forward to attack you with a mind numbing blow. The whip", ch, NULL, victim, TO_VICT ); act( AT_PINK, "like blob overpowers your defenses and strikes you to the ground before you", ch, NULL, victim, TO_VICT ); act( AT_PINK, "can retaliate. &W[$t]", ch, num_punct( dam ), victim, TO_VICT ); act( AT_PINK, "Grinning with a maniacal expression, $n carefully plots where to strike", ch, NULL, victim, TO_NOTVICT ); act( AT_PINK, "$s victim next. Swaying from the back of $s head, $n's muscular tentacle", ch, NULL, victim, TO_NOTVICT ); act( AT_PINK, "rapidly lashes forward to attack $N with a mind numbing blow. The whip", ch, NULL, victim, TO_NOTVICT ); act( AT_PINK, "like blob overpowers $N's defenses and strikes $M to the ground before", ch, NULL, victim, TO_NOTVICT ); act( AT_PINK, "$E can retaliate. &W[$t]", ch, num_punct( dam ), victim, TO_NOTVICT ); learn_from_success( ch, gsn_tentacle ); global_retcode = damage( ch, victim, dam, gsn_tentacle ); } else { act( AT_WHITE, "$N's speed seems to prove your tentacle attack is futile.", ch, NULL, victim, TO_CHAR ); act( AT_WHITE, "Your speed seems to prove $n's tentacle attack is futile.", ch, NULL, victim, TO_VICT ); act( AT_WHITE, "$N's speed seems to prove $n's tentacle attack is futile.", ch, NULL, victim, TO_NOTVICT ); learn_from_failure( ch, gsn_tentacle ); global_retcode = damage( ch, victim, 0, gsn_tentacle ); } return; } void do_genocide_attack( 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_genocide_attack ) ) 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_genocide_attack]->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_genocide_attack]->min_mana ) { send_to_char( "You don't have enough energy.\n\r", ch ); return; } if( ch->focus < skill_table[gsn_genocide_attack]->focus ) { send_to_char( "You need to focus more.\n\r", ch ); return; } else ch->focus -= skill_table[gsn_genocide_attack]->focus; WAIT_STATE( ch, skill_table[gsn_genocide_attack]->beats ); if( can_use_skill( ch, number_percent( ), gsn_genocide_attack ) ) { switch ( number_range( 1, 100 ) ) { case 100: case 95: if( IS_NPC( victim ) || ( !IS_NPC( victim ) && !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 >= 5 ) { dam = get_attmod( ch, victim ) * number_range( 10, 11 ); act( AT_PURPLE, "With your head tilted in a downward position, you concentrate a vast amount of", ch, NULL, victim, TO_CHAR ); act( AT_PURPLE, "energy to engage in a final onslaught. After contemplating the quantity vital to", ch, NULL, victim, TO_CHAR ); act( AT_PURPLE, "ensure $N's demise, you elevate your arm in a stiff upward stance and", ch, NULL, victim, TO_CHAR ); act( AT_PURPLE, "call out, &P'GENOCIDE ATTACK.' &pWith that, a fountain of energy pulses arise", ch, NULL, victim, TO_CHAR ); act( AT_PURPLE, "from your extended palm and rain toward $N at a remarkable pace.", ch, NULL, victim, TO_CHAR ); act( AT_PURPLE, "While battering $M from multiple directions, the radiating discharge", ch, NULL, victim, TO_CHAR ); act( AT_PURPLE, "ambushes everything that confronts the assault from its target.", ch, NULL, victim, TO_CHAR ); act( AT_PINK, "The assault vanishises on contact due to $N's powerfull aura.", ch, NULL, victim, TO_CHAR ); act( AT_PURPLE, "With $n's head tilted in a downward position, $e concentrates a vast amount of", ch, NULL, victim, TO_VICT ); act( AT_PURPLE, "energy to engage in a final onslaught. After contemplating the quantity vital to", ch, NULL, victim, TO_VICT ); act( AT_PURPLE, "ensure your demise, $n elevates $s arm in a stiff upward stance and", ch, NULL, victim, TO_VICT ); act( AT_PURPLE, "calls out, &P'GENOCIDE ATTACK.' &pWith that, a fountain of energy pulses arise", ch, NULL, victim, TO_VICT ); act( AT_PURPLE, "from $n's extended palm and rains toward you at a remarkable pace.", ch, NULL, victim, TO_VICT ); act( AT_PURPLE, "While battering you from multiple directions, the radiating discharge", ch, NULL, victim, TO_VICT ); act( AT_PURPLE, "ambushes everything that confronts the assault from its target.", ch, NULL, victim, TO_VICT ); act( AT_PINK, "$n's assault vanishises on contact due to your powerfull aura.", ch, NULL, victim, TO_VICT ); act( AT_PURPLE, "With $n's head tilted in a downward position, $e concentrates a vast amount of", ch, NULL, victim, TO_NOTVICT ); act( AT_PURPLE, "energy to engage in a final onslaught. After contemplating the quantity vital to", ch, NULL, victim, TO_NOTVICT ); act( AT_PURPLE, "ensure $N's demise, $n elevates $s arm in a stiff upward stance and", ch, NULL, victim, TO_NOTVICT ); act( AT_PURPLE, "calls out, &P'GENOCIDE ATTACK.' &pWith that, a fountain of energy pulses arise", ch, NULL, victim, TO_NOTVICT ); act( AT_PURPLE, "from $n's extended palm and rain towards $N at a remarkable pace.", ch, NULL, victim, TO_NOTVICT ); act( AT_PURPLE, "While battering $N from multiple directions, the radiating discharge", ch, NULL, victim, TO_NOTVICT ); act( AT_PURPLE, "ambushes everything that confronts the assault from its target.", ch, NULL, victim, TO_NOTVICT ); act( AT_PINK, "$n's assault vanishises on contact due to $N's powerfull aura.", ch, NULL, victim, TO_NOTVICT ); learn_from_success( ch, gsn_genocide_attack ); global_retcode = damage( ch, victim, dam, TYPE_HIT ); break; } dam = 999999999; act( AT_PURPLE, "With your head tilted in a downward position, you concentrate a vast amount of", ch, NULL, victim, TO_CHAR ); act( AT_PURPLE, "energy to engage in a final onslaught. After contemplating the quantity vital to", ch, NULL, victim, TO_CHAR ); act( AT_PURPLE, "ensure $N's demise, you elevate your arm in a stiff upward stance and", ch, NULL, victim, TO_CHAR ); act( AT_PURPLE, "call out, &P'GENOCIDE ATTACK.' &pWith that, a fountain of energy pulses arise", ch, NULL, victim, TO_CHAR ); act( AT_PURPLE, "from your extended palm and rain toward $N at a remarkable pace.", ch, NULL, victim, TO_CHAR ); act( AT_PURPLE, "While battering $M from multiple directions, the radiating discharge", ch, NULL, victim, TO_CHAR ); act( AT_PURPLE, "ambushes everything that confronts the assault from its target.", ch, NULL, victim, TO_CHAR ); act( AT_PINK, "The mayhem kills $M instantly!", ch, NULL, victim, TO_CHAR ); act( AT_PURPLE, "With $n's head tilted in a downward position, $e concentrates a vast amount of", ch, NULL, victim, TO_VICT ); act( AT_PURPLE, "energy to engage in a final onslaught. After contemplating the quantity vital to", ch, NULL, victim, TO_VICT ); act( AT_PURPLE, "ensure your demise, $n elevates $s arm in a stiff upward stance and", ch, NULL, victim, TO_VICT ); act( AT_PURPLE, "calls out, &P'GENOCIDE ATTACK.' &pWith that, a fountain of energy pulses arise", ch, NULL, victim, TO_VICT ); act( AT_PURPLE, "from $n's extended palm and rains toward you at a remarkable pace.", ch, NULL, victim, TO_VICT ); act( AT_PURPLE, "While battering you from multiple directions, the radiating discharge", ch, NULL, victim, TO_VICT ); act( AT_PURPLE, "ambushes everything that confronts the assault from its target.", ch, NULL, victim, TO_VICT ); act( AT_PINK, "The mayhem kills you instantly!", ch, NULL, victim, TO_VICT ); act( AT_PURPLE, "With $n's head tilted in a downward position, $e concentrates a vast amount of", ch, NULL, victim, TO_NOTVICT ); act( AT_PURPLE, "energy to engage in a final onslaught. After contemplating the quantity vital to", ch, NULL, victim, TO_NOTVICT ); act( AT_PURPLE, "ensure $N's demise, $n elevates $s arm in a stiff upward stance and", ch, NULL, victim, TO_NOTVICT ); act( AT_PURPLE, "calls out, &P'GENOCIDE ATTACK.' &pWith that, a fountain of energy pulses arise", ch, NULL, victim, TO_NOTVICT ); act( AT_PURPLE, "from $n's extended palm and rain towards $N at a remarkable pace.", ch, NULL, victim, TO_NOTVICT ); act( AT_PURPLE, "While battering $N from multiple directions, the radiating discharge", ch, NULL, victim, TO_NOTVICT ); act( AT_PURPLE, "ambushes everything that confronts the assault from its target.", ch, NULL, victim, TO_NOTVICT ); act( AT_PINK, "The mayhem kills $M instantly!", ch, NULL, victim, TO_NOTVICT ); learn_from_success( ch, gsn_genocide_attack ); global_retcode = damage( ch, victim, dam, TYPE_HIT ); break; } default: dam = get_attmod( ch, victim ) * number_range( 90, 100 ); if( ch->charge > 0 ) dam = chargeDamMult( ch, dam ); act( AT_PURPLE, "With your head tilted in a downward position, you concentrate a vast amount of", ch, num_punct( dam ), victim, TO_CHAR ); act( AT_PURPLE, "energy to engage in a final onslaught. After contemplating the quantity vital to", ch, num_punct( dam ), victim, TO_CHAR ); act( AT_PURPLE, "ensure $N's demise, you elevate your arm in a stiff upward stance and", ch, num_punct( dam ), victim, TO_CHAR ); act( AT_PURPLE, "call out, &P'GENOCIDE ATTACK.' &pWith that, a fountain of energy pulses arise", ch, num_punct( dam ), victim, TO_CHAR ); act( AT_PURPLE, "from your extended palm and rain toward $N with a remarkable pace.", ch, num_punct( dam ), victim, TO_CHAR ); act( AT_PURPLE, "While battering $M from multiple directions, the radiating discharge", ch, num_punct( dam ), victim, TO_CHAR ); act( AT_PURPLE, "ambushes everything that confronts the assault from its target. &W[$t]", ch, num_punct( dam ), victim, TO_CHAR); act( AT_PURPLE, "With $n's head tilted in a downward position, $e concentrates a vast amount of", ch, num_punct( dam ), victim, TO_VICT ); act( AT_PURPLE, "energy to engage in a final onslaught. After contemplating the quantity vital to", ch, num_punct( dam ), victim, TO_VICT ); act( AT_PURPLE, "ensure your demise, $n elevates $s arm in a stiff upward stance and", ch, num_punct( dam ), victim, TO_VICT ); act( AT_PURPLE, "calls out, &P'GENOCIDE ATTACK.' &pWith that, a fountain of energy pulses arise", ch, num_punct( dam ), victim, TO_VICT ); act( AT_PURPLE, "from $n's extended palm and rains toward you at a remarkable pace.", ch, num_punct( dam ), victim, TO_VICT ); act( AT_PURPLE, "While battering you from multiple directions, the radiating discharge", ch, num_punct( dam ), victim, TO_VICT ); act( AT_PURPLE, "ambushes everything that confronts the assault from its target. &W[$t]", ch, num_punct( dam ), victim, TO_VICT ); act( AT_PURPLE, "With $n's head tilted in a downward position, $e concentrates a vast amount of", ch, num_punct( dam ), victim, TO_NOTVICT ); act( AT_PURPLE, "energy to engage in a final onslaught. After contemplating the quantity vital to", ch, num_punct( dam ), victim, TO_NOTVICT ); act( AT_PURPLE, "ensure $N's demise, $n elevates $s arm in a stiff upward stance and", ch, num_punct( dam ), victim, TO_NOTVICT ); act( AT_PURPLE, "calls out, &P'GENOCIDE ATTACK.' &pWith that, a fountain of energy pulses arise", ch, num_punct( dam ), victim, TO_NOTVICT ); act( AT_PURPLE, "from $n's extended palm and rain towards $N with a remarkable pace.", ch, num_punct( dam ), victim, TO_NOTVICT ); act( AT_PURPLE, "While battering $N from multiple directions, the radiating discharge", ch, num_punct( dam ), victim, TO_NOTVICT ); act( AT_PURPLE, "ambushes everything that confronts the assault from its target. &W[$t]", ch, num_punct( dam ), victim, TO_NOTVICT ); learn_from_success( ch, gsn_genocide_attack ); global_retcode = damage( ch, victim, dam, TYPE_HIT ); break; } } else { act( AT_PURPLE, "You missed $N with your genocide attack.", ch, NULL, victim, TO_CHAR ); act( AT_PURPLE, "$n misses you with $s genocide attack.", ch, NULL, victim, TO_VICT ); act( AT_PURPLE, "$n missed $N with a dual genocide attack.", ch, NULL, victim, TO_NOTVICT ); learn_from_failure( ch, gsn_genocide_attack ); global_retcode = damage( ch, victim, 0, TYPE_HIT ); } ch->mana -= skill_table[gsn_genocide_attack]->min_mana; return; } void do_skin_trap( CHAR_DATA * ch, char *argument ) { CHAR_DATA *victim; int dam = 0; if( !IS_NPC( ch ) && ch->exp < skill_table[gsn_skin_trap]->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_skin_trap]->min_mana ) { send_to_char( "You don't have enough energy.\n\r", ch ); return; } if( ch->focus < skill_table[gsn_skin_trap]->focus ) { send_to_char( "You need to focus more.\n\r", ch ); return; } ch->focus -= skill_table[gsn_skin_trap]->focus; WAIT_STATE( ch, skill_table[gsn_skin_trap]->beats ); if( can_use_skill( ch, number_percent( ), gsn_skin_trap ) ) { dam = get_attmod( ch, victim ) * number_range( 20, 25 ); if( ch->charge > 0 ) dam = chargeDamMult( ch, dam ); act( AT_PINK, "A nodule of flesh detaches from you and soars towards $N, entrapping", ch, NULL, victim, TO_CHAR ); act( AT_PINK, "them in its rubbery depths. &W[$t]", ch, num_punct( dam ), victim, TO_CHAR ); act( AT_PINK, "Amidst the raging battle, a flicker of movement catches the corner", ch, NULL, victim, TO_VICT ); act( AT_PINK, "of your eye. A large nodule of severed pink flesh soars towards", ch, NULL, victim, TO_VICT ); act( AT_PINK, "you, entrapping you within its rubbery depths. &W[$t]", ch, num_punct( dam ), victim, TO_VICT ); act( AT_PINK, "A nodule of flesh detaches from $n and soars towards $N, entrapping", ch, NULL, victim, TO_NOTVICT ); act( AT_PINK, "them in its rubbery depths. &W[$t]", ch, num_punct( dam ), victim, TO_NOTVICT ); dam = ki_absorb( victim, ch, dam, gsn_skin_trap ); learn_from_success( ch, gsn_skin_trap ); global_retcode = damage( ch, victim, dam, TYPE_HIT ); if( ( victim = who_fighting( ch ) ) != NULL ) { if( number_range( 1, 4 ) < 3 ) { act( AT_RED, "\nYou shudder in ecstacy as $N's lifeforce seeps into your body.", ch, NULL, victim, TO_CHAR ); act( AT_RED, "\n$N shudders in ecstacy as your lifeforce seeps into $s body.", ch, NULL, victim, TO_VICT ); act( AT_RED, "\n$N shudders in ecstacy as $N's lifeforce seeps out of $S body and", ch, NULL, victim, TO_NOTVICT ); act( AT_RED, "into $s.", ch, NULL, victim, TO_NOTVICT ); ch->hit = UMIN( 100, ch->hit + number_range( 1, 3 ) ); } } } else { act( AT_PINK, "You missed $N with your skin trap.", ch, NULL, victim, TO_CHAR ); act( AT_PINK, "A nodule of flesh detaches from you and soars towards $N,", ch, NULL, victim, TO_CHAR ); act( AT_PINK, "but $E manages to avoid it, and you re-absorb your skin. &W[$t]", ch, num_punct( 0 ), victim, TO_CHAR ); act( AT_PINK, "Amidst the raging battle, a flicker of movement catches the", ch, NULL, victim, TO_VICT ); act( AT_PINK, "corner of your eye. A large nodule of severed pink flesh soars", ch, NULL, victim, TO_VICT ); act( AT_PINK, "towards you. You narrowly avoid it, and $N re-absorbs it into", ch, NULL, victim, TO_VICT ); act( AT_PINK, "self. &W[$t]", ch, num_punct( 0 ), victim, TO_VICT ); act( AT_PINK, "A nodule of flesh detaches from $n and soars towards $N,", ch, NULL, victim, TO_NOTVICT ); act( AT_PINK, "but $E manages to avoid it, and you re-absorb your skin. &W[$t]", ch, num_punct( 0 ), victim, TO_NOTVICT ); learn_from_failure( ch, gsn_skin_trap ); global_retcode = damage( ch, victim, 0, TYPE_HIT ); } ch->mana -= skill_table[gsn_skin_trap]->min_mana; return; }