#include <sys/types.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include "merc.h"
void do_bonemod( CHAR_DATA *ch, char *argument )
{
char arg1 [MAX_INPUT_LENGTH];
smash_tilde( argument );
argument = one_argument( argument, arg1 );
if (IS_NPC(ch)) return;
if (!IS_SPHERE(ch, SPHERE_TRANSMUTER))
{
send_to_char("#0This is a Transmuter Sphere Power#n\n\r",ch);
return;
}
if ( arg1[0] == '\0')
{
send_to_char( "Syntax: bonemod <modification>\n\r", ch );
send_to_char( "Horns, Wings, Head, Exoskeleton, Tail\n\r",ch);
return;
}
/*
* Set something.
*/
if ( !str_cmp( arg1, "horns" ) )
{
if (!IS_VAMPAFF(ch, VAM_HORNS))
{
SET_BIT(ch->pcdata->stats[UNI_AFF], VAM_HORNS);
send_to_char("You pull a set of horns out of your head.\n\r",ch);
act("$n pulls a set of horns from his head!\n\r",ch,NULL,NULL,TO_ROOM);
return;
}
if (IS_VAMPAFF(ch, VAM_HORNS))
{
REMOVE_BIT(ch->pcdata->stats[UNI_AFF], VAM_HORNS);
send_to_char("You push your horns back into your head.\n\r",ch);
act("$n pushes $n's horns back into $n head.\n\r",ch,NULL,NULL,TO_ROOM);
return;
}
}
if ( !str_cmp( arg1, "wings" ) )
{
if (!IS_VAMPAFF(ch, VAM_WINGS))
{
SET_BIT(ch->pcdata->stats[UNI_AFF], VAM_WINGS);
send_to_char("You pull a pair of leathery wings from your back.\n\r",ch);
act("$n pulls a pair of leathery wings from $s back!\n\r",ch,NULL,NULL,TO_ROOM);
return;
}
if (IS_VAMPAFF(ch, VAM_WINGS))
{
REMOVE_BIT(ch->pcdata->stats[UNI_AFF], VAM_WINGS);
send_to_char("You push your wings into your back.\n\r",ch);
act("$n pushes $s wings into $s back.\n\r",ch,NULL,NULL,TO_ROOM);
return;
}
}
if ( !str_cmp( arg1, "exoskeleton" ) )
{
if (!IS_VAMPAFF(ch, VAM_EXOSKELETON))
{
SET_BIT(ch->pcdata->stats[UNI_AFF], VAM_EXOSKELETON);
send_to_char("Your skin is covered by a hard exoskeleton.\n\r",ch);
act("$n's skin is covered by a hard exoskeleton!\n\r",ch,NULL,NULL,TO_ROOM);
return;
}
if (IS_VAMPAFF(ch, VAM_EXOSKELETON))
{
REMOVE_BIT(ch->pcdata->stats[UNI_AFF], VAM_EXOSKELETON);
send_to_char("Your exoskeleton slowly disappears under your skin.\n\r",ch);
act("$n's hard exoskeleton disappears under $s skin.\n\r",ch,NULL,NULL,TO_ROOM);
return;
}
}
if ( !str_cmp( arg1, "tail" ) )
{
if (!IS_VAMPAFF(ch, VAM_TAIL))
{
SET_BIT(ch->pcdata->stats[UNI_AFF], VAM_TAIL);
send_to_char("Your spine extends out into a long, pointed tail.\n\r",ch);
act("$n's spine extends to form a long pointed tail!\n\r",ch,NULL,NULL,TO_ROOM);
return;
}
if (IS_VAMPAFF(ch, VAM_TAIL))
{
REMOVE_BIT(ch->pcdata->stats[UNI_AFF], VAM_TAIL);
send_to_char("Your tail slowly retracts into your spine.\n\r",ch);
act("$n's tail shrinks and vanishes into $s spine.\n\r",ch,NULL,NULL,TO_ROOM);
return;
}
}
if ( !str_cmp( arg1, "head" ) )
{
if (!IS_VAMPAFF(ch, VAM_HEAD))
{
SET_BIT(ch->pcdata->stats[UNI_AFF], VAM_HEAD);
send_to_char("Your head transforms into that of a fierce lion.\n\r",ch);
act("$n's head transforms into that of a fierce lion!\n\r",ch,NULL,NULL,TO_ROOM);
return;
}
if (IS_VAMPAFF(ch, VAM_HEAD))
{
REMOVE_BIT(ch->pcdata->stats[UNI_AFF], VAM_HEAD);
send_to_char("Your head slowly resumes it's normal form.\n\r",ch);
act("$n's head resumes its normal form.\n\r",ch,NULL,NULL,TO_ROOM);
return;
}
}
/*
* Generate usage message.
*/
do_bonemod( ch, "" );
return;
}
void do_camouflage(CHAR_DATA *ch, char *argument)
{
char arg1[MAX_STRING_LENGTH];
char arg2[MAX_STRING_LENGTH];
char arg3[MAX_STRING_LENGTH];
OBJ_DATA *obj;
argument=one_argument(argument,arg1);
argument=one_argument(argument,arg2);
strcpy(arg3,argument);
if (IS_NPC(ch)) return;
if (!IS_SPHERE(ch, SPHERE_TRANSMUTER))
{
send_to_char("#0Change is a Transmuter power.#n\n\r",ch);
return;
}
if ((obj=get_obj_carry(ch,arg1)) == NULL)
{
send_to_char("You dont have that item.\n\r",ch);
return;
}
if (!(!str_cmp(arg2,"short") || !str_cmp(arg2,"name")))
{
send_to_char("syntax : camouflage <item> <short/name> <newname>.\n\r",ch);
return;
}
if (strlen(arg3) > 60 || strlen(arg3) < 3)
{
send_to_char("From 3 to 60 characters please.\n\r",ch);
return;
}
/* if (has_bad_chars(ch, arg3))
{
send_to_char("Illegal chars, please retry.\n\r",ch);
return;
}
*/
if (IS_SET(obj->quest, QUEST_ARTIFACT) || IS_SET(obj->quest, QUEST_PRIZE))
{
send_to_char("Not on artifacts and prizes.\n\r",ch);
return;
}
if (!str_cmp(arg2,"name"))
{
free_string(obj->name);
obj->name = str_dup(arg3);
obj->questmaker = str_dup(ch->name);
}
if (!str_cmp(arg2,"short"))
{
free_string(obj->short_descr);
obj->short_descr=str_dup(arg3);
obj->questmaker = str_dup(ch->name);
}
send_to_char("Ok.\n\r",ch);
return;
}
void do_mask( CHAR_DATA *ch, char *argument )
{
CHAR_DATA *victim;
char arg [MAX_INPUT_LENGTH];
char buf [MAX_INPUT_LENGTH];
argument = one_argument( argument, arg );
if (IS_NPC(ch)) return;
if (!IS_SPHERE(ch, SPHERE_TRANSMUTER))
{
send_to_char("#0Change is a Transmuter power.#n\n\r",ch);
return;
}
if ( arg[0] == '\0' )
{
send_to_char( "Change to look like whom?\n\r", ch );
return;
}
if (IS_AFFECTED(ch,AFF_POLYMORPH) && !IS_VAMPAFF(ch,VAM_DISGUISED))
{
send_to_char( "Not while polymorphed.\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) )
{
send_to_char( "Not on NPC's.\n\r", ch );
return;
}
if ( IS_IMMORTAL(victim) && victim != ch )
{
send_to_char( "You can only mask avatars or lower.\n\r", ch );
return;
}
if ( ch->pcdata->condition[COND_THIRST] < 40)
{
send_to_char("You have insufficient blood.\n\r",ch);
return;
}
ch->pcdata->condition[COND_THIRST] -= number_range(30,40);
if ( ch == victim )
{
if (!IS_AFFECTED(ch,AFF_POLYMORPH) && !IS_VAMPAFF(ch,VAM_DISGUISED))
{
send_to_char( "You already look like yourself!\n\r", ch );
return;
}
sprintf(buf,"Your form shimmers and transforms into %s.",ch->name);
act(buf,ch,NULL,victim,TO_CHAR);
sprintf(buf,"%s's form shimmers and transforms into %s.",ch->morph,ch->name);
act(buf,ch,NULL,victim,TO_ROOM);
REMOVE_BIT(ch->affected_by, AFF_POLYMORPH);
REMOVE_BIT(ch->pcdata->stats[UNI_AFF], VAM_DISGUISED);
free_string( ch->morph );
ch->morph = str_dup( "" );
return;
}
if (IS_VAMPAFF(ch,VAM_DISGUISED))
{
sprintf(buf,"Your form shimmers and transforms into a clone of %s.",victim->name);
act(buf,ch,NULL,victim,TO_CHAR);
sprintf(buf,"%s's form shimmers and transforms into a clone of %s.",ch->morph,victim->name);
act(buf,ch,NULL,victim,TO_NOTVICT);
sprintf(buf,"%s's form shimmers and transforms into a clone of you!",ch->morph);
act(buf,ch,NULL,victim,TO_VICT);
free_string( ch->morph );
ch->morph = str_dup( victim->name );
return;
}
sprintf(buf,"Your form shimmers and transforms into a clone of %s.",victim->name);
act(buf,ch,NULL,victim,TO_CHAR);
sprintf(buf,"%s's form shimmers and transforms into a clone of %s.",ch->name,victim->name);
act(buf,ch,NULL,victim,TO_NOTVICT);
sprintf(buf,"%s's form shimmers and transforms into a clone of you!",ch->name);
act(buf,ch,NULL,victim,TO_VICT);
SET_BIT(ch->affected_by, AFF_POLYMORPH);
SET_BIT(ch->pcdata->stats[UNI_AFF], VAM_DISGUISED);
free_string( ch->morph );
ch->morph = str_dup( victim->name );
return;
}
void do_change( CHAR_DATA *ch, char *argument )
{
char arg [MAX_INPUT_LENGTH];
char buf [MAX_STRING_LENGTH];
argument = one_argument( argument, arg );
if (IS_NPC(ch)) return;
if (!IS_SPHERE(ch, SPHERE_TRANSMUTER))
{
send_to_char("#0Change is a Transmuter power.#n\n\r",ch);
return;
}
if ( arg[0] == '\0' )
{
send_to_char( "You can change between 'human', 'bat', 'wolf' and 'mist' forms.\n\r", ch );
return;
}
if ( !str_cmp(arg,"bat") )
{
if (IS_AFFECTED(ch, AFF_POLYMORPH))
{
send_to_char( "You can only polymorph from human form.\n\r", ch );
return;
}
if ( ch->pcdata->condition[COND_THIRST] < 50 )
{
send_to_char("You have insufficient blood.\n\r",ch);
return;
}
if (ch->stance[0] != -1) do_stance(ch,"");
if (ch->mounted == IS_RIDING) do_dismount(ch,"");
clear_stats(ch);
act( "You transform into bat form.", ch, NULL, NULL, TO_CHAR );
act( "$n transforms into a bat.", ch, NULL, NULL, TO_ROOM );
SET_BIT(ch->pcdata->stats[UNI_AFF], VAM_FLYING);
SET_BIT(ch->pcdata->stats[UNI_AFF], VAM_SONIC);
/* SET_BIT(ch->pcdata->powers[WOLF_POLYAFF], POLY_BAT);*/
SET_BIT(ch->polyaff, POLY_BAT);
SET_BIT(ch->pcdata->stats[UNI_AFF], VAM_CHANGED);
SET_BIT(ch->affected_by, AFF_POLYMORPH);
sprintf(buf, "%s the #0v#rampire #0b#rat#n", ch->name);
free_string( ch->morph );
ch->morph = str_dup( buf );
return;
}
else if ( !str_cmp(arg,"wolf") )
{
if (IS_AFFECTED(ch, AFF_POLYMORPH))
{
send_to_char( "You can only polymorph from human form.\n\r", ch );
return;
}
if (ch->stance[0] != -1) do_stance(ch,"");
if (ch->mounted == IS_RIDING) do_dismount(ch,"");
act( "You transform into wolf form.", ch, NULL, NULL, TO_CHAR );
act( "$n transforms into a dire wolf.", ch, NULL, NULL, TO_ROOM );
clear_stats(ch);
if (ch->wpn[0] > 0)
{
ch->hitroll += (ch->wpn[0]);
ch->damroll += (ch->wpn[0]);
ch->armor -= (ch->wpn[0] * 3);
}
ch->pcdata->mod_str = 10;
/* SET_BIT(ch->pcdata->powers[WOLF_POLYAFF], POLY_WOLF);*/
SET_BIT(ch->polyaff, POLY_WOLF);
SET_BIT(ch->affected_by, AFF_POLYMORPH);
SET_BIT(ch->pcdata->stats[UNI_AFF], VAM_CHANGED);
sprintf(buf, "%s the #0d#rire #0w#rolf#n", ch->name);
free_string( ch->morph );
ch->morph = str_dup( buf );
return;
}
else if ( !str_cmp(arg,"mist") )
{
if (IS_AFFECTED(ch, AFF_POLYMORPH))
{
send_to_char( "You can only polymorph from human form.\n\r", ch );
return;
}
if (has_timer(ch)) return;
if (ch->stance[0] != -1) do_stance(ch,"");
if (ch->mounted == IS_RIDING) do_dismount(ch,"");
ch->pcdata->condition[COND_THIRST] -= number_range(40,50);
act( "You transform into mist form.", ch, NULL, NULL, TO_CHAR );
act( "$n transforms into a white mist.", ch, NULL, NULL, TO_ROOM );
if (IS_EXTRA(ch, TIED_UP))
{
act("The ropes binding you fall through your ethereal form.",ch,NULL,NULL,TO_CHAR);
act("The ropes binding $n fall through $s ethereal form.",ch,NULL,NULL,TO_ROOM);
REMOVE_BIT(ch->extra, TIED_UP);
REMOVE_BIT(ch->extra, GAGGED);
REMOVE_BIT(ch->extra, BLINDFOLDED);
}
/* if (is_affected(ch, gsn_web))
{
act("The webbing entrapping $n falls through $s ethereal form.",ch,NULL,NULL,TO_ROOM);
send_to_char("The webbing entrapping you falls through your ethereal form.\n\r",ch);
affect_strip(ch, gsn_web);
}
*/
clear_stats(ch);
/* SET_BIT(ch->pcdata->powers[WOLF_POLYAFF], POLY_MIST);*/
SET_BIT(ch->polyaff, POLY_MIST);
SET_BIT(ch->pcdata->stats[UNI_AFF], VAM_CHANGED);
SET_BIT(ch->affected_by, AFF_POLYMORPH);
SET_BIT(ch->affected_by, AFF_ETHEREAL);
sprintf(buf, "%s the #7w#nhite #7m#nist", ch->name);
free_string( ch->morph );
ch->morph = str_dup( buf );
return;
}
else if ( !str_cmp(arg,"human") )
{
if (!IS_AFFECTED(ch, AFF_POLYMORPH))
{
send_to_char( "You are already in human form.\n\r", ch );
return;
}
if (IS_VAMPAFF(ch, VAM_CHANGED) && IS_POLYAFF(ch, POLY_BAT))
{
REMOVE_BIT(ch->pcdata->stats[UNI_AFF], VAM_FLYING);
REMOVE_BIT(ch->pcdata->stats[UNI_AFF], VAM_SONIC);
REMOVE_BIT(ch->polyaff, POLY_BAT);
/* REMOVE_BIT(ch->pcdata->powers[WOLF_POLYAFF], POLY_BAT);*/
}
else if (IS_VAMPAFF(ch, VAM_CHANGED) && IS_POLYAFF(ch, POLY_WOLF))
{
/* REMOVE_BIT(ch->pcdata->powers[WOLF_POLYAFF], POLY_WOLF);*/
REMOVE_BIT(ch->polyaff, POLY_WOLF);
if (ch->hit < 1) ch->hit = 1;
}
else if (IS_VAMPAFF(ch, VAM_CHANGED) && IS_POLYAFF(ch, POLY_MIST))
{
/* REMOVE_BIT(ch->pcdata->powers[WOLF_POLYAFF], POLY_MIST);*/
REMOVE_BIT(ch->polyaff, POLY_MIST);
REMOVE_BIT(ch->affected_by, AFF_ETHEREAL);
}
else
{
/* In case they try to change to human from a non-vamp form */
send_to_char( "You seem to be stuck in this form.\n\r", ch );
return;
}
act( "You transform into human form.", ch, NULL, NULL, TO_CHAR );
act( "$n transforms into human form.", ch, NULL, NULL, TO_ROOM );
REMOVE_BIT(ch->affected_by, AFF_POLYMORPH);
REMOVE_BIT(ch->pcdata->stats[UNI_AFF], VAM_CHANGED);
clear_stats(ch);
free_string( ch->morph );
ch->morph = str_dup( "" );
return;
}
else
send_to_char( "You can change between 'human', 'bat', 'wolf' and 'mist' forms.\n\r", ch );
return;
}
void do_zuloform( CHAR_DATA *ch, char *argument )
{
char arg [MAX_INPUT_LENGTH];
char buf [MAX_STRING_LENGTH];
argument = one_argument( argument, arg );
if (IS_NPC(ch)) return;
if (!IS_SPHERE(ch, SPHERE_TRANSMUTER))
{
send_to_char("#0Zuloform is a Transmuter power.#n\n\r",ch);
return;
}
if (IS_EXTRA(ch,EXTRA_DRAGON))
{
send_to_char("You cannot unzulo while a dragon.\n\r",ch);
return;
}
if(IS_POLYAFF(ch, POLY_DRAGON))
{
stc( "You can't do that.\n\r",ch);
return;
}
if (IS_POLYAFF(ch, POLY_ZULOFORM))
{
REMOVE_BIT(ch->polyaff, POLY_ZULOFORM);
REMOVE_BIT(ch->affected_by, AFF_POLYMORPH);
act( "You transform into human form.", ch, NULL, NULL, TO_CHAR );
act( "$n's shrinks back into human form.", ch, NULL, NULL, TO_ROOM );
if (ch->hit < 1) ch->hit = 1;
ch->damroll = ch->damroll - 150;
ch->hitroll = ch->hitroll - 150;
free_string( ch->morph );
ch->morph = str_dup( "" );
return;
}
else if (IS_AFFECTED(ch,AFF_POLYMORPH))
{
send_to_char("You cant zulo when changed.\n\r",ch);
return;
}
if (ch->stance[0] != -1) do_stance(ch,"");
if (ch->mounted == IS_RIDING) do_dismount(ch,"");
ch->pcdata->condition[COND_THIRST] -= number_range(100,200);
act( "You transform into large beast.", ch, NULL, NULL, TO_CHAR );
act( "$n's body grows and distorts into a large beast.", ch, NULL, NULL, TO_ROOM );
ch->pcdata->mod_str = 15;
ch->pcdata->mod_dex = 15;
SET_BIT(ch->polyaff, POLY_ZULOFORM);
SET_BIT(ch->affected_by, AFF_POLYMORPH);
sprintf(buf, "A big black monster");
free_string( ch->morph );
ch->morph = str_dup( buf );
ch->damroll = ch->damroll + 150;
ch->hitroll = ch->hitroll + 150;
return;
}
/*dragon*/
void do_dragonform( CHAR_DATA *ch, char *argument )
{
char arg [MAX_INPUT_LENGTH];
char buf [MAX_STRING_LENGTH];
argument = one_argument( argument, arg );
if (IS_NPC(ch)) return;
if (!IS_SPHERE(ch, SPHERE_TRANSMUTER))
{
send_to_char("#0Dragonform is a Transmuter power.#n\n\r",ch);
return;
}
if (!IS_POLYAFF(ch, POLY_ZULOFORM))
{
send_to_char("You can only Dragonform while in Zuloform.\n\r",ch);
return;
}
if (IS_EXTRA(ch, EXTRA_DRAGON))
{
REMOVE_BIT(ch->extra,EXTRA_DRAGON);
act( "You transform back into zuloform.", ch, NULL, NULL, TO_CHAR );
act( "$n shrinks back into a big black monster.", ch, NULL, NULL,
TO_ROOM );
if (ch->hit < 1) ch->hit = 1;
ch->damroll = ch->damroll - 100;
ch->hitroll = ch->hitroll - 100;
free_string( ch->morph );
ch->morph = str_dup( "A big black monster" );
return;
}
if (ch->mounted == IS_RIDING) do_dismount(ch,"");
ch->pcdata->condition[COND_THIRST] -= number_range(20,40);
act( "You transform into a large dragon.", ch, NULL, NULL, TO_CHAR );
act( "$n's body grows and distorts into a large dragon.", ch, NULL,
NULL,TO_ROOM);
SET_BIT(ch->extra,EXTRA_DRAGON);
sprintf(buf, "%s, the huge rabid dragon", ch->name);
free_string( ch->morph );
ch->morph = str_dup( buf );
ch->damroll = ch->damroll + 100;
ch->hitroll = ch->hitroll + 100;
return;
}