#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_mutate( CHAR_DATA * ch, char *argument )
{
if( is_namek( ch ) )
{
ch_printf( ch, "You are not allowed.\n\r" );
return;
}
if( !IS_NPC( ch ) )
{
if( IS_SET( ch->pcdata->flags, PCFLAG_KNOWSMYSTIC ) )
{
ch_printf( ch, "You are unable to mutate while you know mystic.\n\r" );
return;
}
}
if( ch->canmajin )
{
ch_printf( ch, "You are unable to mutate while you know majin.\n\r" );
return;
}
if( wearing_chip( ch ) )
{
ch_printf( ch, "You can't while you have a chip installed.\n\r" );
return;
}
if( IS_NPC( ch ) || ch->race != 17 )
{
send_to_char( "Huh?\n\r", ch );
return;
}
if( argument[0] == '\0' )
{
send_to_char( "What mutation do you want to become?\n\r", ch );
return;
}
if( str_prefix( argument, "radiated growth" )
&& str_prefix( argument, "accelerated mutation" ) && str_prefix( argument, "molecular degeneration" )
&& str_prefix( argument, "biohazard" ) && str_prefix( argument, "meta-mutation" ) )
{
send_to_char( "You can't mutate into that.\n\r", ch );
return;
}
if( ( !str_prefix( argument, "radiated growth" ) && ch->pcdata->learned[gsn_mutation1] <= 0 )
|| ( !str_prefix( argument, "accelerated mutation" ) && ch->pcdata->learned[gsn_mutation2] <= 0 )
|| ( !str_prefix( argument, "molecular degeneration" ) && ch->pcdata->learned[gsn_mutation3] <= 0 )
|| ( !str_prefix( argument, "biohazard" ) && ch->pcdata->learned[gsn_mutation4] <= 0 )
|| ( !str_prefix( argument, "meta-mutation" ) && ch->pcdata->learned[gsn_mutation5] <= 0 ) )
{
send_to_char( "You must become more powerful before you can mutate further.\n\r", ch );
return;
}
if( !str_prefix( argument, "radiated growth" ) && ch->pcdata->learned[gsn_mutation1] > 0 )
{
if( ch->mana < skill_table[gsn_mutation1]->min_mana )
{
send_to_char( "You don't have enough energy.\n\r", ch );
return;
}
if( xIS_SET( ch->affected_by, AFF_MUTATION1 ) )
{
send_to_char( "You are already in that mutation.\n\r", ch );
return;
}
xSET_BIT( ch->affected_by, AFF_MUTATION1 );
xREMOVE_BIT( ch->affected_by, AFF_MUTATION2 );
xREMOVE_BIT( ch->affected_by, AFF_MUTATION3 );
xREMOVE_BIT( ch->affected_by, AFF_MUTATION4 );
xREMOVE_BIT( ch->affected_by, AFF_MUTATION5 );
// act( AT_SKILL, "You evolve into your semi-perfect form.", ch, NULL, NULL, TO_CHAR );
// act( AT_SKILL, "$n evolves into $s semi-perfect form.", ch, NULL, NULL, TO_NOTVICT );
act( AT_PURPLE, "Your body begins to react to the radiation locked deep inside you. An "
" unwavering feeling of pain washes over you as your body begins to "
" bulge, exponentially increasing your strength, but slowing you and "
" draining your intellect.", ch, NULL, NULL, TO_CHAR );
act( AT_PURPLE, "$n's body begins to react to the radiation locked deep inside. An "
" unwavering feeling of pain washes over $m as $s body begins to "
" bulge, exponentially increasing $s strength, but slowing $m and "
" draining $s intellect.", ch, NULL, NULL, TO_NOTVICT );
ch->pl = ch->exp * 8;
transStatApply( ch, 16, 4, 2, 16 );
ch->mana -= skill_table[gsn_mutation1]->min_mana;
return;
}
if( !str_prefix( argument, "accelerated mutation" ) && ch->pcdata->learned[gsn_mutation2] > 0 )
{
if( ch->mana < skill_table[gsn_mutation2]->min_mana )
{
send_to_char( "You don't have enough energy.\n\r", ch );
return;
}
if( xIS_SET( ch->affected_by, AFF_MUTATION2 ) )
{
send_to_char( "You are already in that mutation.\n\r", ch );
return;
}
if( !xIS_SET( ch->affected_by, AFF_MUTATION1 ) )
{
send_to_char( "You must be in your first mutation.\n\r", ch );
return;
}
xSET_BIT( ch->affected_by, AFF_MUTATION2 );
xREMOVE_BIT( ch->affected_by, AFF_MUTATION1 );
xREMOVE_BIT( ch->affected_by, AFF_MUTATION3 );
xREMOVE_BIT( ch->affected_by, AFF_MUTATION4 );
xREMOVE_BIT( ch->affected_by, AFF_MUTATION5 );
// act( AT_SKILL, "You evolve into your perfect form.", ch, NULL, NULL, TO_CHAR );
// act( AT_SKILL, "$n evolves into $s perfect form.", ch, NULL, NULL, TO_NOTVICT );
act( AT_PURPLE, "Radiation from the previous transformation goes out of control as the growth"
" accelerates causing deformities. Your body abnormally enlarges in size,"
" making you stronger than before as you go crazy through severe pain your"
" body is enduring as you become hideous.", ch, NULL, NULL, TO_CHAR );
act( AT_PURPLE, "Radiation from the previous transformation goes out of control as the growth"
" accelerates causing deformities. Your body abnormally enlarges in size,"
" making you stronger than before as you go crazy through severe pain your"
" body is enduring as you become hideous.", ch, NULL, NULL, TO_NOTVICT );
ch->pl = ch->exp * 17;
transStatApply( ch, 34, 8, 4, 34 );
ch->mana -= skill_table[gsn_mutation2]->min_mana;
return;
}
if( !str_prefix( argument, "molecular degeneration" ) && ch->pcdata->learned[gsn_mutation3] > 0 )
{
if( ch->mana < skill_table[gsn_mutation3]->min_mana )
{
send_to_char( "You don't have enough energy.\n\r", ch );
return;
}
if( xIS_SET( ch->affected_by, AFF_MUTATION3 ) )
{
send_to_char( "You are already in that form.\n\r", ch );
return;
}
if( !xIS_SET( ch->affected_by, AFF_MUTATION2 ) )
{
send_to_char( "You must be in your second mutation.\n\r", ch );
return;
}
xSET_BIT( ch->affected_by, AFF_MUTATION3 );
xREMOVE_BIT( ch->affected_by, AFF_MUTATION1 );
xREMOVE_BIT( ch->affected_by, AFF_MUTATION2 );
xREMOVE_BIT( ch->affected_by, AFF_MUTATION4 );
xREMOVE_BIT( ch->affected_by, AFF_MUTATION5 );
// act( AT_SKILL, "You evolve into your ultra-perfect form.", ch, NULL, NULL, TO_CHAR );
// act( AT_SKILL, "$n evolves into $s ultra-perfect form.", ch, NULL, NULL, TO_NOTVICT );
act( AT_PURPLE, "The radiation starts to break down the outer layer of your skin, causing"
" severe aggitation making you go mad as radiated fluid travels throughout"
" your body, causing your body to swell even further, strengthening your"
" body even more.", ch, NULL, NULL, TO_CHAR );
act( AT_PURPLE, "The radiation starts to break down the outer layer of $n's skin, causing"
" severe aggitation making $m go mad as radiated fluid travels throughout"
" $s body, causing $s body to swell even further, strengthening $s"
" body even more.", ch, NULL, NULL, TO_NOTVICT );
ch->pl = ch->exp * 24;
transStatApply( ch, 48, 12, 6, 48 );
ch->mana -= skill_table[gsn_mutation3]->min_mana;
return;
}
if( !str_prefix( argument, "biohazard" ) && ch->pcdata->learned[gsn_mutation4] > 0 )
{
if( ch->mana < skill_table[gsn_mutation4]->min_mana )
{
send_to_char( "You don't have enough energy.\n\r", ch );
return;
}
if( xIS_SET( ch->affected_by, AFF_MUTATION4 ) )
{
send_to_char( "You are already in that mutation.\n\r", ch );
return;
}
if( !xIS_SET( ch->affected_by, AFF_MUTATION3 ) )
{
send_to_char( "You must be in your third mutation.\n\r", ch );
return;
}
xSET_BIT( ch->affected_by, AFF_MUTATION4 );
xREMOVE_BIT( ch->affected_by, AFF_MUTATION1 );
xREMOVE_BIT( ch->affected_by, AFF_MUTATION2 );
xREMOVE_BIT( ch->affected_by, AFF_MUTATION3 );
xREMOVE_BIT( ch->affected_by, AFF_MUTATION5 );
// act( AT_SKILL, "You evolve into your perfect form.", ch, NULL, NULL, TO_CHAR );
// act( AT_SKILL, "$n evolves into $s perfect form.", ch, NULL, NULL, TO_NOTVICT );
act( AT_PURPLE, "As your body's molecular structure starts to break down from the radiation,"
" the fumes that form from your body react in the air as you breathe it in,"
" enhancing your every cell in your body to regenerate as it breaks down,"
" causing neural instability, but giving you extraordinary strength.", ch, NULL, NULL, TO_CHAR );
act( AT_PURPLE, "As $n's body's molecular structure starts to break down from the radiation,"
" the fumes that form from $s body react in the air as $e breathes it in,"
" enhancing every cell in $s body to regenerate instantly as it breaks down,"
" causing neural instability, but giving $m extraordinary strength.", ch, NULL, NULL, TO_NOTVICT );
ch->pl = ch->exp * 33;
transStatApply( ch, 66, 16, 8, 66 );
ch->mana -= skill_table[gsn_mutation4]->min_mana;
return;
}
if( !str_prefix( argument, "meta-mutation" ) && ch->pcdata->learned[gsn_mutation5] > 0 )
{
if( ch->mana < skill_table[gsn_mutation5]->min_mana )
{
send_to_char( "You don't have enough energy.\n\r", ch );
return;
}
if( xIS_SET( ch->affected_by, AFF_MUTATION5 ) )
{
send_to_char( "You are already in that form.\n\r", ch );
return;
}
if( !xIS_SET( ch->affected_by, AFF_MUTATION4 ) )
{
send_to_char( "You must be in your fourth mutation.\n\r", ch );
return;
}
xSET_BIT( ch->affected_by, AFF_MUTATION5 );
xREMOVE_BIT( ch->affected_by, AFF_MUTATION1 );
xREMOVE_BIT( ch->affected_by, AFF_MUTATION2 );
xREMOVE_BIT( ch->affected_by, AFF_MUTATION3 );
xREMOVE_BIT( ch->affected_by, AFF_MUTATION4 );
// act( AT_SKILL, "You evolve into your ultra-perfect form.", ch, NULL, NULL, TO_CHAR );
// act( AT_SKILL, "$n evolves into $s ultra-perfect form.", ch, NULL, NULL, TO_NOTVICT );
act( AT_GREEN, "You begin to glow a neon-green, as the overwhelming pain slowly starts"
" to fade away. Your muscles begin to condense themselves as your physique"
" gains the appearence resembling that of any other humanoid. Your once"
" sluggish and stupid body is now highly intelligent and extraordinarily"
" fast, all while keeping your inhuman strength and resiliancy.", ch, NULL, NULL, TO_CHAR );
act( AT_GREEN, "$n begins to glow a neon-green, as $s overwhelming pain slowly starts"
" to fade away. $n's muscles begin to condense themselves as $s"
" physique gains the appearence resembling that of any other humanoid."
" $n's once sluggish and stupid body is now highly intelligent and"
" extraordinarily fast, all while keeping $s inhuman strength and"
" resiliancy.", ch, NULL, NULL, TO_NOTVICT );
ch->pl = ch->exp * 40;
transStatApply( ch, 80, 80, 80, 80 );
ch->mana -= skill_table[gsn_mutation5]->min_mana;
return;
}
return;
}
void do_eliminate( CHAR_DATA * ch, char *argument )
{
char buf[MAX_STRING_LENGTH];
char arg[MAX_INPUT_LENGTH];
CHAR_DATA *victim;
one_argument( argument, arg );
if( arg[0] == '\0' )
{
send_to_char( "Spar whom?\n\r", ch );
return;
}
if( ( victim = get_char_room( ch, arg ) ) == NULL )
{
send_to_char( "They aren't here.\n\r", ch );
return;
}
if( !IS_NPC( victim ) && !victim->desc )
{
send_to_char( "They are link dead, it wouldn't be right.", ch );
return;
}
if( IS_NPC( victim ) )
{
send_to_char( "You can only spar other players.", ch );
return;
}
if( victim == ch )
{
send_to_char( "You can't spar your self.\n\r", ch );
return;
}
if( !IS_IMMORTAL( ch ) && !IS_NPC( ch ) && !IS_NPC( victim ) )
{
if( !xIS_SET( ch->act, PLR_QUESTING ) && xIS_SET( victim->act, PLR_QUESTING ) )
{
send_to_char( "You can't spar a player involved in a role playing event.\n\r", ch );
return;
}
if( xIS_SET( ch->act, PLR_QUESTING ) && !xIS_SET( victim->act, PLR_QUESTING ) )
{
send_to_char( "You can't spar a player not involved in a role playing event.\n\r", ch );
return;
}
}
if( !xIS_SET( ch->act, PLR_SPAR ) )
xSET_BIT( ch->act, PLR_SPAR );
if( !xIS_SET( victim->act, PLR_SPAR ) )
xSET_BIT( victim->act, PLR_SPAR );
if( is_safe( ch, victim, TRUE ) )
return;
if( ch->position == POS_RESTING || ch->position == POS_SLEEPING || ch->position == POS_SITTING )
{
send_to_char( "How do you propose to do that in your current state?\n\r", ch );
return;
}
if( ch->position == POS_FIGHTING
|| ch->position == POS_EVASIVE
|| ch->position == POS_DEFENSIVE || ch->position == POS_AGGRESSIVE || ch->position == POS_BERSERK )
{
send_to_char( "You do the best you can!\n\r", ch );
return;
}
if( !xIS_SET( ch->in_room->room_flags, ROOM_ARENA ) )
{
send_to_char( "You must be in an arena to spar someone.\n\r", ch );
return;
}
if( !IS_NPC( ch ) && !IS_NPC( victim ) && ch->exp <= 5000 )
{
send_to_char( "You can not fight other players while you are in training.\n\r", ch );
return;
}
if( !IS_NPC( ch ) && !IS_NPC( victim ) && victim->exp <= 5000 )
{
send_to_char( "You can not fight other players while they are in training.\n\r", ch );
return;
}
if( who_fighting( victim ) != NULL )
{
send_to_char( "It would not be honorable to interfere with some one else's battle.\n\r", ch );
return;
}
if( !IS_NPC( ch ) && !IS_NPC( victim ) && victim->hit < 2 )
{
send_to_char( "They are too hurt to fight anymore.\n\r", ch );
return;
}
if( !IS_NPC( ch ) && !IS_NPC( victim ) && ch->hit < 2 )
{
send_to_char( "You are too hurt to fight anymore.\n\r", ch );
return;
}
if( !IS_NPC( ch ) && !IS_NPC( victim ) && !IS_HC( ch ) && !IS_HC( victim )
&& xIS_SET( ch->act, PLR_SPAR ) && xIS_SET( victim->act, PLR_SPAR )
&& ( ( IS_GOOD( ch ) && !IS_GOOD( victim ) )
|| ( IS_EVIL( ch ) && !IS_EVIL( victim ) ) || ( IS_NEUTRAL( ch ) && !IS_NEUTRAL( victim ) ) ) )
{
send_to_char( "You would not spar someone who is aligned that way.\n\r", ch );
return;
}
/* if( !victim->pcdata->HBTCPartner )
{
send_to_char( "They are not accepting sparring partners at this time.\n\r", ch );
return;
}
if( strcasecmp( ch->name, victim->pcdata->HBTCPartner ) )
{
send_to_char( "They do not want to spar with you.\n\r", ch );
return;
}*/
WAIT_STATE( ch, 1 * PULSE_VIOLENCE );
if( !xIS_SET( ch->act, PLR_SPAR ) )
{
sprintf( buf, "Help! I am being attacked by %s!", IS_NPC( ch ) ? ch->short_descr : ch->name );
if( IS_PKILL( victim ) )
{
do_wartalk( victim, buf );
}
else
{
do_yell( victim, buf );
}
}
check_illegal_pk( ch, victim );
ch->spar_start = ch->exp;
victim->spar_start = victim->exp;
ch->delay = 0;
check_attacker( ch, victim );
multi_hit( ch, victim, TYPE_UNDEFINED );
return;
}