#include <sys/types.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include "merc.h"
void do_earthswallow(CHAR_DATA * ch, char *argument)
{
CHAR_DATA *victim;
CHAR_DATA *mount;
char arg[MAX_INPUT_LENGTH];
argument = one_argument(argument, arg);
if (IS_NPC(ch))
return;
if (!IS_SPHERE(ch, SPHERE_GEOMANCER))
{
send_to_char("#0Earthswallow is a Geomancer power.#n\n\r",ch);
return;
}
if (ch->mana < 5000)
{
send_to_char("You don't have enough mana.\n\r", ch);
return;
}
if (has_timer(ch))
return;
if (ch->in_room != NULL)
{
if (IS_SET(ch->in_room->room_flags, ROOM_ARENA))
{
send_to_char("Your in the arena.\n\r", ch);
return;
}
}
if (in_fortress(ch))
{
send_to_char("Your in The Forbidden Fortress.\n\r", ch);
return;
}
if ((victim = get_char_room(ch, arg)) == NULL)
{
send_to_char("They are not here.\n\r", ch);
return;
}
if (IS_NPC(victim))
{
send_to_char("Not on mobiles.\n\r", ch);
return;
}
if (is_safe(ch, victim))
return;
if (victim == ch)
{
send_to_char("That doesn't seem like a good idea.\n\r", ch);
return;
}
ch->mana -= 5000;
act("$n is swallowed by the earth and disappears.", victim, NULL,
NULL, TO_ROOM);
char_from_room(victim);
char_to_room(victim, get_room_index(ROOM_VNUM_ALTAR));
act("$n is flung out of a vulcano.", victim, NULL, NULL, TO_ROOM);
do_look(victim, "auto");
if ((mount = victim->mount) == NULL)
return;
char_from_room(mount);
char_to_room(mount, victim->in_room);
do_look(mount, "auto");
WAIT_STATE(ch, 8);
return;
}
void do_earthshatter( CHAR_DATA *ch, char *argument)
{
CHAR_DATA *vch;
CHAR_DATA *vch_next;
int dam;
int level;
if (IS_NPC(ch)) return;
if (!IS_SPHERE(ch, SPHERE_GEOMANCER))
{
send_to_char("#0EarthShatter is a Geomancer power.#n\n\r",ch);
return;
}
if (ch->mana < 1150) {
send_to_char("You need more mana.\n\r", ch );
return;}
level = ch->spl[PURPLE_MAGIC];
ch->mana -= 1150;
send_to_char("You summon the power of the underworld, shattering the earth.\n\r", ch );
act("$n causes the earth to shatter",ch,NULL,NULL,TO_ROOM);
for ( vch = ch->in_room->people; vch != NULL; vch = vch_next )
{
vch_next = vch->next_in_room;
if (vch == ch) continue;
if (vch->trust>6) continue;
dam = dice(level, 80 );
if ( saves_spell( level, vch ) )
dam /= 2;
damage( ch, vch, dam, skill_lookup("earthquake"));
damage( ch, vch, dam, skill_lookup("earthquake"));
damage( ch, vch, dam, skill_lookup("earthquake"));
}
WAIT_STATE(ch, 6);
return;
}
void do_solidify(CHAR_DATA *ch,char *argument)
{
if (IS_NPC(ch)) return;
if (!IS_SPHERE(ch, SPHERE_GEOMANCER))
{
send_to_char("#0Solidify is a Geomancer power.#n\n\r",ch);
return;
}
if (!IS_SET(ch->newbits, NEW_SKIN))
{
send_to_char("Your Earthen Skin Hardens.\n\r",ch);
ch->armor -= 100 ;
SET_BIT(ch->newbits, NEW_SKIN);
return;
}
else if (IS_SET(ch->newbits, NEW_SKIN))
{
send_to_char("Your Earthen Skin Softens.\n\r",ch);
ch->armor += 100;
REMOVE_BIT(ch->newbits,NEW_SKIN);
return;
}
return;
}
void do_rockslide( CHAR_DATA *ch, char *argument )
{
CHAR_DATA *victim;
char buf[MAX_STRING_LENGTH];
int dam;
if (IS_NPC(ch)) return;
if(!IS_SPHERE(ch,SPHERE_GEOMANCER))
{
send_to_char("#0This is a Geomancer Ability.#n\n\r",ch);
return;
}
if ( ( victim = ch->fighting ) == NULL )
{
send_to_char( "You aren't fighting anyone.\n\r", ch );
return;
}
WAIT_STATE( ch, 12 );
if (!IS_NPC(victim)) dam = number_range(7000,12000);
else dam = number_range(10000,14000);
sprintf(buf,"#RYour #0Rockslide#n #Rstrike #Y$N #0incredibly hard!#n [%d]\n\r",dam);
act(buf,ch,NULL,victim,TO_CHAR);
sprintf(buf,"$n's #0Rockslide strikes you incredibly hard!#n [%d]\n\r",dam);
act(buf,ch,NULL,victim,TO_VICT);
sprintf(buf,"$n's rockslide strike $N incredibly hard! [%d]\n\r",dam);
act(buf,ch,NULL,victim,TO_NOTVICT);
hurt_person(ch,victim, dam);
return;
}