dbx/cnf/
dbx/lib/
dbx/lib/misc/
dbx/lib/text/help/
dbx/lib/world/
dbx/lib/world/qst/
dbx/src/

/* ************************************************************************
*   File: act.other.c                                   Part of CircleMUD *
*  Usage: Miscellaneous player-level commands                             *
*                                                                         *
*  All rights reserved.  See license.doc for complete information.        *
*                                                                         *
*  Copyright (C) 1993, 94 by the Trustees of the Johns Hopkins University *
*  CircleMUD is based on DikuMUD, Copyright (C) 1990, 1991.               *
************************************************************************ */

#define __ACT_OTHER_C__

#include "conf.h"
#include "sysdep.h"

#include "structs.h"
#include "utils.h"
#include "comm.h"
#include "interpreter.h"
#include "handler.h"
#include "db.h"
#include "spells.h"
#include "screen.h"
#include "house.h"
#include "dg_scripts.h"

/* extern variables */
extern char arg1 [MAX_INPUT_LENGTH];
extern char arg2 [MAX_INPUT_LENGTH];
extern int spell_sort_info[MAX_SKILLS+1];
extern struct str_app_type str_app[];
extern struct room_data *world;
extern struct descriptor_data *descriptor_list;
extern struct dex_skill_type dex_app_skill[];
extern struct spell_info_type spell_info[];
extern struct index_data *mob_index;
extern char *class_abbrevs[];
extern struct spell_entry spells[];
extern int free_rent;
extern int pt_allowed;
extern int max_filesize;
extern int nameserver_is_slow;
extern int top_of_world;
extern int auto_save;
extern sh_int r_death_start_room;

/* extern procedures */
void list_skills(struct char_data * ch);
void appear(struct char_data * ch);
void perform_immort_vis(struct char_data *ch);
SPECIAL(shop_keeper);
ACMD(do_gen_comm);
void die(struct char_data * ch, struct char_data * killer);
void Crash_rentsave(struct char_data * ch, int cost);
void make_corpse(struct char_data * ch);

/* local functions */
ACMD(do_quit);
ACMD(do_save);
ACMD(do_fly);
ACMD(do_not_here);
ACMD(do_SWIFTNESS);
ACMD(do_hide);
ACMD(do_steal);
ACMD(do_practice);
ACMD(do_visible);
ACMD(do_title);
int perform_group(struct char_data *ch, struct char_data *vict);
void print_group(struct char_data *ch);
ACMD(do_group);
ACMD(do_ungroup);
ACMD(do_inplant);
ACMD(do_report);
ACMD(do_split);
ACMD(do_ssj);
ACMD(do_kaioken);
ACMD(do_spar);
ACMD(do_sparkick);
ACMD(do_sparpunch);
ACMD(do_sparelbow);
ACMD(do_sparknee);
ACMD(do_sparkiblast);
ACMD(do_transform);
ACMD(do_learn);
ACMD(do_use);
ACMD(do_repair);
ACMD(do_wimpy);
ACMD(do_display);
ACMD(do_stealth);
ACMD(do_gen_write);
ACMD(do_powerup);
ACMD(do_powerdown);
ACMD(do_gen_tog);
ACMD(do_ingest);
ACMD(do_upgrade);

ACMD(do_quit)
{
  sh_int save_room;
  struct descriptor_data *d, *next_d;

  if (IS_NPC(ch) || !ch->desc)
    return;
  if (AFF_FLAGGED(ch, AFF_MAJIN)) {
     send_to_char("Your master won't let you.\r\n", ch);
     return; 
     }
  if (AFF_FLAGGED(ch, AFF_HALTED)) {
     send_to_char("You can't!\r\n", ch);
     return; 
     } 
  if (IS_SET(ROOM_FLAGS(ch->in_room), ROOM_ND))
      {
      send_to_char("You cannot quit in the next dimension.\r\n", ch);
    return;
     }
  if (GET_POS(ch) == POS_FIGHTING)
      {
      send_to_char("You cannot quit while fighting.\r\n", ch);
    return;
      }
    if (PRF_FLAGGED(ch, PRF_OOZARU)) {
     REMOVE_BIT(PRF_FLAGS(ch), PRF_OOZARU);
     send_to_char("You revert to humanoid form before you leave..\r\n", ch);
     GET_MAX_HIT(ch) -= 10000;  
     GET_MAX_MANA(ch) -= 10000; 
     } 
  if (subcmd != SCMD_QUIT && GET_LEVEL(ch) < LVL_IMMORT)
    send_to_char("You have to type quit--no less, to quit!\r\n", ch);
  else if (GET_POS(ch) == POS_FIGHTING)
    send_to_char("No way!  You're fighting for your life!\r\n", ch);
  else if (GET_POS(ch) < POS_STUNNED) {
    char_to_room(ch, 4500);
    die(ch, NULL);
  } else {
    if (!GET_INVIS_LEV(ch))
      act("$n has left the game.", TRUE, ch, 0, 0, TO_ROOM);
    sprintf(buf, "%s has quit the game.", GET_NAME(ch));
    mudlog(buf, NRM, MAX(LVL_IMMORT, GET_INVIS_LEV(ch)), TRUE);
    send_to_char("Goodbye, friend.. Come back soon!\r\n", ch);
    /*
     * kill off all sockets connected to the same player as the one who is
     * trying to quit.  Helps to maintain sanity as well as prevent duping.
     */
    for (d = descriptor_list; d; d = next_d) {
      next_d = d->next;
      if (d == ch->desc)
        continue;
      if (d->character && (GET_IDNUM(d->character) == GET_IDNUM(ch)))
        STATE(d) = CON_DISCONNECT;
    }

   save_room = ch->in_room;
   if (free_rent)
      Crash_rentsave(ch, 0);
    extract_char(ch);		/* Char is saved in extract char */

    /* If someone is quitting in their house, let them load back here */
    if (ROOM_FLAGGED(save_room, ROOM_HOUSE))
      save_char(ch, save_room);
  }
}



ACMD(do_save)
{
  if (IS_NPC(ch) || !ch->desc)
    return;

  /* Only tell the char we're saving if they actually typed "save" */
  if (cmd) {
    /*
     * This prevents item duplication by two PC's using coordinated saves
     * (or one PC with a house) and system crashes. Note that houses are
     * still automatically saved without this enabled.
     */
    if (auto_save) {
      send_to_char("Manual saving is disabled.\r\n", ch);
      return;
    }
    sprintf(buf, "Saving %s.\r\n", GET_NAME(ch));
    send_to_char(buf, ch);
  }

  save_char(ch, NOWHERE);
  Crash_crashsave(ch);
  if (ROOM_FLAGGED(ch->in_room, ROOM_HOUSE_CRASH))
    House_crashsave(GET_ROOM_VNUM(IN_ROOM(ch)));
}


/* generic function for commands which are normally overridden by
   special procedures - i.e., shop commands, mail commands, etc. */
ACMD(do_not_here)
{
  send_to_char("Sorry, but you cannot do that here!\r\n", ch);
}



ACMD(do_SWIFTNESS)
{
  struct affected_type af;
  byte percent;

  send_to_char("You starts moving so fast you cannot be seen.\r\n", ch);
  if (AFF_FLAGGED(ch, AFF_SWIFTNESS))
    affect_from_char(ch, SKILL_SWIFTNESS);

  percent = number(1, 101);	/* 101% is a complete failure */

  if (percent > GET_SKILL(ch, SKILL_SWIFTNESS) + dex_app_skill[GET_DEX(ch)].SWIFTNESS)
    return;

  af.type = SKILL_SWIFTNESS;
  af.duration = GET_LEVEL(ch);
  af.modifier = 0;
  af.location = APPLY_NONE;
  af.bitvector = AFF_SWIFTNESS;
  affect_to_char(ch, &af);
}



ACMD(do_hide)
{
  byte percent;

  send_to_char("You attempt to hide yourself.\r\n", ch);

  if (AFF_FLAGGED(ch, AFF_HIDE))
    REMOVE_BIT(AFF_FLAGS(ch), AFF_HIDE);

  percent = number(1, 101);	/* 101% is a complete failure */

  if (percent > GET_SKILL(ch, SKILL_HIDE) + dex_app_skill[GET_DEX(ch)].hide)
    return;

  SET_BIT(AFF_FLAGS(ch), AFF_HIDE);
}




ACMD(do_steal)
{
  struct char_data *vict;
  struct obj_data *obj;
  char vict_name[MAX_INPUT_LENGTH], obj_name[MAX_INPUT_LENGTH];
  int percent, gold, eq_pos, pcsteal = 0, ohoh = 0;

  if (ROOM_FLAGGED(IN_ROOM(ch), ROOM_PEACEFUL)) {
    send_to_char("This room just has such a peaceful, easy feeling...\r\n", ch);
    return;
  }

  argument = one_argument(argument, obj_name);
  one_argument(argument, vict_name);

  if (!(vict = get_char_room_vis(ch, vict_name))) {
    send_to_char("Steal what from who?\r\n", ch);
    return;
  } else if (vict == ch) {
    send_to_char("Come on now, that's rather stupid!\r\n", ch);
    return;
  }

  /* 101% is a complete failure */
  percent = number(1, 101) - dex_app_skill[GET_DEX(ch)].p_pocket;

  if (GET_POS(vict) < POS_SLEEPING)
    percent = -1;		/* ALWAYS SUCCESS */

  if (!pt_allowed && !IS_NPC(vict))
    pcsteal = 1;

  /* NO NO With Imp's and Shopkeepers, and if player thieving is not allowed */
  if (GET_LEVEL(vict) >= LVL_IMMORT || pcsteal ||
      GET_MOB_SPEC(vict) == shop_keeper)
    percent = 101;		/* Failure */

  if (str_cmp(obj_name, "coins") && str_cmp(obj_name, "gold")) {

    if (!(obj = get_obj_in_list_vis(vict, obj_name, vict->carrying))) {

      for (eq_pos = 0; eq_pos < NUM_WEARS; eq_pos++)
	if (GET_EQ(vict, eq_pos) &&
	    (isname(obj_name, GET_EQ(vict, eq_pos)->name)) &&
	    CAN_SEE_OBJ(ch, GET_EQ(vict, eq_pos))) {
	  obj = GET_EQ(vict, eq_pos);
	  break;
	}
      if (!obj) {
	act("$E hasn't got that item.", FALSE, ch, 0, vict, TO_CHAR);
	return;
      } else {			/* It is equipment */
	if ((GET_POS(vict) > POS_STUNNED)) {
	  send_to_char("Steal the equipment now?  Impossible!\r\n", ch);
	  return;
	} else {
	  act("You unequip $p and steal it.", FALSE, ch, obj, 0, TO_CHAR);
	  act("$n steals $p from $N.", FALSE, ch, obj, vict, TO_NOTVICT);
	  obj_to_char(unequip_char(vict, eq_pos), ch);
	}
      }
    } else {			/* obj found in inventory */

      percent += GET_OBJ_WEIGHT(obj);	/* Make heavy harder */

      if (AWAKE(vict) && (percent > GET_SKILL(ch, SKILL_STEAL))) {
	ohoh = TRUE;
	act("Oops..", FALSE, ch, 0, 0, TO_CHAR);
	act("$n tried to steal something from you!", FALSE, ch, 0, vict, TO_VICT);
	act("$n tries to steal something from $N.", TRUE, ch, 0, vict, TO_NOTVICT);
      } else {			/* Steal the item */
	if ((IS_CARRYING_N(ch) + 1 < CAN_CARRY_N(ch))) {
	  if ((IS_CARRYING_W(ch) + GET_OBJ_WEIGHT(obj)) < CAN_CARRY_W(ch)) {
	    obj_from_char(obj);
	    obj_to_char(obj, ch);
	    send_to_char("Got it!\r\n", ch);
	  }
	} else
	  send_to_char("You cannot carry that much.\r\n", ch);
      }
    }
  } else {			/* Steal some coins */
    if (AWAKE(vict) && (percent > GET_SKILL(ch, SKILL_STEAL))) {
      ohoh = TRUE;
      act("Oops..", FALSE, ch, 0, 0, TO_CHAR);
      act("You discover that $n has $s hands in your wallet.", FALSE, ch, 0, vict, TO_VICT);
      act("$n tries to steal gold from $N.", TRUE, ch, 0, vict, TO_NOTVICT);
    } else {
      /* Steal some gold coins */
      gold = (int) ((GET_GOLD(vict) * number(1, 10)) / 100);
      gold = MIN(1782, gold);
      if (gold > 0) {
	GET_GOLD(ch) += gold;
	GET_GOLD(vict) -= gold;
        if (gold > 1) {
	  sprintf(buf, "Bingo!  You got %d gold coins.\r\n", gold);
	  send_to_char(buf, ch);
	} else {
	  send_to_char("You manage to swipe a solitary gold coin.\r\n", ch);
	}
      } else {
	send_to_char("You couldn't get any gold...\r\n", ch);
      }
    }
  }

  if (ohoh && IS_NPC(vict) && AWAKE(vict))
    hit(vict, ch, TYPE_UNDEFINED);
}



ACMD(do_practice)
{
  one_argument(argument, arg);

  if (*arg)
    send_to_char("You can only practice skills in your guild.\r\n", ch);
  else
    list_skills(ch);
}



ACMD(do_visible)
{
  if (GET_LEVEL(ch) >= LVL_IMMORT) {
    perform_immort_vis(ch);
    return;
  }

  if AFF_FLAGGED(ch, AFF_INVISIBLE) {
    appear(ch);
    send_to_char("You break the spell of invisibility.\r\n", ch);
  } else
    send_to_char("You are already visible.\r\n", ch);
}



ACMD(do_title)
{
  skip_spaces(&argument);
  delete_doubledollar(argument);

  if (IS_NPC(ch))
    send_to_char("Your title is fine... go away.\r\n", ch);
  else if (PLR_FLAGGED(ch, PLR_NOTITLE))
    send_to_char("You can't title yourself -- you shouldn't have abused it!\r\n", ch);
  else if (strstr(argument, "(") || strstr(argument, ")"))
    send_to_char("Titles can't contain the ( or ) characters.\r\n", ch);
  else if (strlen(argument) > MAX_TITLE_LENGTH) {
    sprintf(buf, "Sorry, titles can't be longer than %d characters.\r\n",
	    MAX_TITLE_LENGTH);
    send_to_char(buf, ch);
  } else {
    set_title(ch, argument);
    sprintf(buf, "Okay, you're now %s %s.\r\n", GET_NAME(ch), GET_TITLE(ch));
    send_to_char(buf, ch);
  }
}


int perform_group(struct char_data *ch, struct char_data *vict)
{
  if (AFF_FLAGGED(vict, AFF_GROUP) || !CAN_SEE(ch, vict))
    return 0;

  SET_BIT(AFF_FLAGS(vict), AFF_GROUP);
  if (ch != vict)
    act("$N is now a member of your group.", FALSE, ch, 0, vict, TO_CHAR);
  act("You are now a member of $n's group.", FALSE, ch, 0, vict, TO_VICT);
  act("$N is now a member of $n's group.", FALSE, ch, 0, vict, TO_NOTVICT);
  return 1;
}


void print_group(struct char_data *ch)
{
  struct char_data *k;
  struct follow_type *f;

  if (!AFF_FLAGGED(ch, AFF_GROUP))
    send_to_char("But you are not the member of a group!\r\n", ch);
  else {
    send_to_char("Your group consists of:\r\n", ch);

    k = (ch->master ? ch->master : ch);

    if (AFF_FLAGGED(k, AFF_GROUP)) {
      sprintf(buf, "     [%3dH %3dM %3dV] [%s] $N (Head of group)",
	      GET_HIT(k), GET_MANA(k), GET_MOVE(k), CLASS_ABBR(k));
      act(buf, FALSE, ch, 0, k, TO_CHAR);
    }

    for (f = k->followers; f; f = f->next) {
      if (!AFF_FLAGGED(f->follower, AFF_GROUP))
	continue;

      sprintf(buf, "     [%3dH %3dM %3dV] [%s] $N", GET_HIT(f->follower),
	      GET_MANA(f->follower), GET_MOVE(f->follower),
	      CLASS_ABBR(f->follower));
      act(buf, FALSE, ch, 0, f->follower, TO_CHAR);
    }
  }
}



ACMD(do_group)
{
  struct char_data *vict;
  struct follow_type *f;
  int found;

  one_argument(argument, buf);

  if (!*buf) {
    print_group(ch);
    return;
  }

  if (ch->master) {
    act("You can not enroll group members without being head of a group.",
	FALSE, ch, 0, 0, TO_CHAR);
    return;
  }

  if (!str_cmp(buf, "all")) {
    perform_group(ch, ch);
    for (found = 0, f = ch->followers; f; f = f->next)
      found += perform_group(ch, f->follower);
    if (!found)
      send_to_char("Everyone following you is already in your group.\r\n", ch);
    return;
  }

  if (!(vict = get_char_room_vis(ch, buf)))
    send_to_char(NOPERSON, ch);
  else if ((vict->master != ch) && (vict != ch))
    act("$N must follow you to enter your group.", FALSE, ch, 0, vict, TO_CHAR);
  else {
    if (!AFF_FLAGGED(vict, AFF_GROUP))
      perform_group(ch, vict);
    else {
      if (ch != vict)
	act("$N is no longer a member of your group.", FALSE, ch, 0, vict, TO_CHAR);
      act("You have been kicked out of $n's group!", FALSE, ch, 0, vict, TO_VICT);
      act("$N has been kicked out of $n's group!", FALSE, ch, 0, vict, TO_NOTVICT);
      REMOVE_BIT(AFF_FLAGS(vict), AFF_GROUP);
    }
  }
}



ACMD(do_ungroup)
{
  struct follow_type *f, *next_fol;
  struct char_data *tch;

  one_argument(argument, buf);

  if (!*buf) {
    if (ch->master || !(AFF_FLAGGED(ch, AFF_GROUP))) {
      send_to_char("But you lead no group!\r\n", ch);
      return;
    }
    sprintf(buf2, "%s has disbanded the group.\r\n", GET_NAME(ch));
    for (f = ch->followers; f; f = next_fol) {
      next_fol = f->next;
      if (AFF_FLAGGED(f->follower, AFF_GROUP)) {
	REMOVE_BIT(AFF_FLAGS(f->follower), AFF_GROUP);
	send_to_char(buf2, f->follower);
        if (!AFF_FLAGGED(f->follower, AFF_MAJIN))
	  stop_follower(f->follower);
      }
    }

    REMOVE_BIT(AFF_FLAGS(ch), AFF_GROUP);
    send_to_char("You disband the group.\r\n", ch);
    return;
  }
  if (!(tch = get_char_room_vis(ch, buf))) {
    send_to_char("There is no such person!\r\n", ch);
    return;
  }
  if (tch->master != ch) {
    send_to_char("That person is not following you!\r\n", ch);
    return;
  }

  if (!AFF_FLAGGED(tch, AFF_GROUP)) {
    send_to_char("That person isn't in your group.\r\n", ch);
    return;
  }

  REMOVE_BIT(AFF_FLAGS(tch), AFF_GROUP);

  act("$N is no longer a member of your group.", FALSE, ch, 0, tch, TO_CHAR);
  act("You have been kicked out of $n's group!", FALSE, ch, 0, tch, TO_VICT);
  act("$N has been kicked out of $n's group!", FALSE, ch, 0, tch, TO_NOTVICT);
 
  if (!AFF_FLAGGED(tch, AFF_MAJIN))
    stop_follower(tch);
}




ACMD(do_report)
{
  struct char_data *k;
  struct follow_type *f;

  if (!AFF_FLAGGED(ch, AFF_GROUP)) {
    send_to_char("But you are not a member of any group!\r\n", ch);
    return;
  }
  sprintf(buf, "%s reports: %d/%dH, %d/%dK, %d/%dV\r\n",
	  GET_NAME(ch), GET_HIT(ch), GET_MAX_HIT(ch),
	  GET_MANA(ch), GET_MAX_MANA(ch),
	  GET_MOVE(ch), GET_MAX_MOVE(ch));

  CAP(buf);

  k = (ch->master ? ch->master : ch);

  for (f = k->followers; f; f = f->next)
    if (AFF_FLAGGED(f->follower, AFF_GROUP) && f->follower != ch)
      send_to_char(buf, f->follower);
  if (k != ch)
    send_to_char(buf, k);
  send_to_char("You report to the group.\r\n", ch);
}



ACMD(do_split)
{
  int amount, num, share;
  struct char_data *k;
  struct follow_type *f;

  if (IS_NPC(ch))
    return;

  one_argument(argument, buf);

  if (is_number(buf)) {
    amount = atoi(buf);
    if (amount <= 0) {
      send_to_char("Sorry, you can't do that.\r\n", ch);
      return;
    }
    if (amount > GET_GOLD(ch)) {
      send_to_char("You don't seem to have that much gold to split.\r\n", ch);
      return;
    }
    k = (ch->master ? ch->master : ch);

    if (AFF_FLAGGED(k, AFF_GROUP) && (k->in_room == ch->in_room))
      num = 1;
    else
      num = 0;

    for (f = k->followers; f; f = f->next)
      if (AFF_FLAGGED(f->follower, AFF_GROUP) &&
	  (!IS_NPC(f->follower)) &&
	  (f->follower->in_room == ch->in_room))
	num++;

    if (num && AFF_FLAGGED(ch, AFF_GROUP))
      share = amount / num;
    else {
      send_to_char("With whom do you wish to share your gold?\r\n", ch);
      return;
    }

    GET_GOLD(ch) -= share * (num - 1);

    if (AFF_FLAGGED(k, AFF_GROUP) && (k->in_room == ch->in_room)
	&& !(IS_NPC(k)) && k != ch) {
      GET_GOLD(k) += share;
      sprintf(buf, "%s splits %d coins; you receive %d.\r\n", GET_NAME(ch),
	      amount, share);
      send_to_char(buf, k);
    }
    for (f = k->followers; f; f = f->next) {
      if (AFF_FLAGGED(f->follower, AFF_GROUP) &&
	  (!IS_NPC(f->follower)) &&
	  (f->follower->in_room == ch->in_room) &&
	  f->follower != ch) {
	GET_GOLD(f->follower) += share;
	sprintf(buf, "%s splits %d coins; you receive %d.\r\n", GET_NAME(ch),
		amount, share);
	send_to_char(buf, f->follower);
      }
    }
    sprintf(buf, "You split %d coins among %d members -- %d coins each.\r\n",
	    amount, num, share);
    send_to_char(buf, ch);
  } else {
    send_to_char("How many coins do you wish to split with your group?\r\n", ch);
    return;
  }
}


ACMD(do_use)
{
  struct obj_data *mag_item;
  int equipped = 1;

  half_chop(argument, arg, buf);
  if (!*arg) {
    sprintf(buf2, "What do you want to %s?\r\n", CMD_NAME);
    send_to_char(buf2, ch);
    return;
  }
  mag_item = GET_EQ(ch, WEAR_SHIELD);

  if (!mag_item || !isname(arg, mag_item->name)) {
    switch (subcmd) {
    case SCMD_SWALLOW:
    case SCMD_PLANT:
      equipped = 0;
      if (!(mag_item = get_obj_in_list_vis(ch, arg, ch->carrying))) {
	sprintf(buf2, "You don't seem to have %s %s.\r\n", AN(arg), arg);
	send_to_char(buf2, ch);
	return;
      }
      break;
    case SCMD_USE:
      sprintf(buf2, "You don't seem to be wearing %s %s.\r\n", AN(arg), arg);
      send_to_char(buf2, ch);
      return;
    default:
      log("SYSERR: Unknown subcmd %d passed to do_use.", subcmd);
      return;
    }
  }
  switch (subcmd) {
  case SCMD_PLANT:
    if (GET_OBJ_TYPE(mag_item) != ITEM_SAIBAKIT) {
      send_to_char("You can only plant seeds.", ch);
      return;
    }
    break;
  case SCMD_SWALLOW:
    if (GET_OBJ_TYPE(mag_item) != ITEM_SENZU) {
      send_to_char("You can only swallow senzu's.", ch);
      return;
    }
    break;
  case SCMD_USE:
    if ((GET_OBJ_TYPE(mag_item) != ITEM_SCOUTER) &&
	(GET_OBJ_TYPE(mag_item) != ITEM_STAFF)) {
      send_to_char("You can't seem to figure out how to use it.\r\n", ch);
      return;
    }
    break;
  }

  mag_objectmagic(ch, mag_item, buf);
}

ACMD(do_wimpy)
{
  int wimp_lev;

  /* 'wimp_level' is a player_special. -gg 2/25/98 */
  if (IS_NPC(ch))
    return;

  one_argument(argument, arg);

  if (!*arg) {
    if (GET_WIMP_LEV(ch)) {
      sprintf(buf, "Your current wimp level is %d hit points.\r\n",
	      GET_WIMP_LEV(ch));
      send_to_char(buf, ch);
      return;
    } else {
      send_to_char("At the moment, you're not a wimp.  (sure, sure...)\r\n", ch);
      return;
    }
  }
  if (isdigit(*arg)) {
    if ((wimp_lev = atoi(arg))) {
      if (wimp_lev < 0)
	send_to_char("Heh, heh, heh.. we are jolly funny today, eh?\r\n", ch);
      else if (wimp_lev > GET_MAX_HIT(ch))
	send_to_char("That doesn't make much sense, now does it?\r\n", ch);
      else if (wimp_lev > (GET_MAX_HIT(ch) / 2))
	send_to_char("You can't set your wimp level above half your hit points.\r\n", ch);
      else {
	sprintf(buf, "Okay, you'll wimp out if you drop below %d hit points.\r\n",
		wimp_lev);
	send_to_char(buf, ch);
	GET_WIMP_LEV(ch) = wimp_lev;
      }
    } else {
      send_to_char("Okay, you'll now tough out fights to the bitter end.\r\n", ch);
      GET_WIMP_LEV(ch) = 0;
    }
  } else
    send_to_char("Specify at how many hit points you want to wimp out at.  (0 to disable)\r\n", ch);

  return;

}


ACMD(do_display)
{
  size_t i;

  if (IS_NPC(ch)) {
    send_to_char("Mosters don't need displays.  Go away.\r\n", ch);
    return;
  }
  skip_spaces(&argument);

  if (!*argument) {
    send_to_char("Usage: prompt { { H | M | V } | all | none }\r\n", ch);
    return;
  }
  if ((!str_cmp(argument, "on")) || (!str_cmp(argument, "all")))
    SET_BIT(PRF_FLAGS(ch), PRF_DISPHP | PRF_DISPMANA | PRF_DISPMOVE);
  else {
    REMOVE_BIT(PRF_FLAGS(ch), PRF_DISPHP | PRF_DISPMANA | PRF_DISPMOVE);

    for (i = 0; i < strlen(argument); i++) {
      switch (LOWER(argument[i])) {
      case 'h':
	SET_BIT(PRF_FLAGS(ch), PRF_DISPHP);
	break;
      case 'm':
	SET_BIT(PRF_FLAGS(ch), PRF_DISPMANA);
	break;
      case 'v':
	SET_BIT(PRF_FLAGS(ch), PRF_DISPMOVE);
	break;
      default:
	send_to_char("Usage: prompt { { H | M | V } | all | none }\r\n", ch);
	return;
	break;
      }
    }
  }

  send_to_char(OK, ch);
}



ACMD(do_gen_write)
{
  FILE *fl;
  char *tmp, buf[MAX_STRING_LENGTH];
  const char *filename;
  struct stat fbuf;
  time_t ct;

  switch (subcmd) {
  case SCMD_BUG:
    filename = BUG_FILE;
    break;
  case SCMD_TYPO:
    filename = TYPO_FILE;
    break;
  case SCMD_IDEA:
    filename = IDEA_FILE;
    break;
  default:
    return;
  }

  ct = time(0);
  tmp = asctime(localtime(&ct));

  if (IS_NPC(ch)) {
    send_to_char("Monsters can't have ideas - Go away.\r\n", ch);
    return;
  }

  skip_spaces(&argument);
  delete_doubledollar(argument);

  if (!*argument) {
    send_to_char("That must be a mistake...\r\n", ch);
    return;
  }
  sprintf(buf, "%s %s: %s", GET_NAME(ch), CMD_NAME, argument);
  mudlog(buf, CMP, LVL_IMMORT, FALSE);

  if (stat(filename, &fbuf) < 0) {
    perror("Error statting file");
    return;
  }
  if (fbuf.st_size >= max_filesize) {
    send_to_char("Sorry, the file is full right now.. try again later.\r\n", ch);
    return;
  }
  if (!(fl = fopen(filename, "a"))) {
    perror("do_gen_write");
    send_to_char("Could not open the file.  Sorry.\r\n", ch);
    return;
  }
  fprintf(fl, "%-8s (%6.6s) [%5d] %s\n", GET_NAME(ch), (tmp + 4),
	  GET_ROOM_VNUM(IN_ROOM(ch)), argument);
  fclose(fl);
  send_to_char("Okay.  Thanks!\r\n", ch);
}



#define TOG_OFF 0
#define TOG_ON  1

#define PRF_TOG_CHK(ch,flag) ((TOGGLE_BIT(PRF_FLAGS(ch), (flag))) & (flag))

ACMD(do_gen_tog)
{
  long result;

  const char *tog_messages[][2] = {
    {"Nohassle disabled.\r\n",
    "Nohassle enabled.\r\n"},
    {"Brief mode off.\r\n",
    "Brief mode on.\r\n"},
    {"Compact mode off.\r\n",
    "Compact mode on.\r\n"},
    {"You can now hear tells.\r\n",
    "You are now deaf to tells.\r\n"},
    {"You can now hear oocs.\r\n",
    "You are now deaf to oocs.\r\n"},
    {"You can now hear shouts.\r\n",
    "You are now deaf to shouts.\r\n"},
    {"You can now hear telepathic messages.\r\n",
    "You are now deaf to telepathic messages.\r\n"},
    {"You can now hear the congratulation messages.\r\n",
    "You are now deaf to the congratulation messages.\r\n"},
    {"You can now hear the Wiz-channel.\r\n",
    "You are now deaf to the Wiz-channel.\r\n"},
    {"You are no longer part of the Quest.\r\n",
    "Okay, you are part of the Quest!\r\n"},
    {"You will no longer see the room flags.\r\n",
    "You will now see the room flags.\r\n"},
    {"You will now have your communication repeated.\r\n",
    "You will no longer have your communication repeated.\r\n"},
    {"HolyLight mode off.\r\n",
    "HolyLight mode on.\r\n"},
    {"Nameserver_is_slow changed to NO; IP addresses will now be resolved.\r\n",
    "Nameserver_is_slow changed to YES; sitenames will no longer be resolved.\r\n"},
    {"Autoexits disabled.\r\n",
    "Autoexits enabled.\r\n"},
    {"AFK flag is now off.\r\n",
    "AFK flag is now on.\r\n"},
    {"You pack up and clean out your camp.\r\n",
    "&15You start a small fire and open camp to rest.\r\n"},
  
  };


  if (IS_NPC(ch))
    return;

  switch (subcmd) {
  case SCMD_NOHASSLE:
    result = PRF_TOG_CHK(ch, PRF_NOHASSLE);
    break;
  case SCMD_BRIEF:
    result = PRF_TOG_CHK(ch, PRF_BRIEF);
    break;
  case SCMD_COMPACT:
    result = PRF_TOG_CHK(ch, PRF_COMPACT);
    break;
  case SCMD_NOTELL:
    result = PRF_TOG_CHK(ch, PRF_NOTELL);
    break;
  case SCMD_NOooc:
    result = PRF_TOG_CHK(ch, PRF_NOooc);
    break;
  case SCMD_DEAF:
    result = PRF_TOG_CHK(ch, PRF_DEAF);
    break;
  case SCMD_NOGOSSIP:
    result = PRF_TOG_CHK(ch, PRF_NOGOSS);
    break;
  case SCMD_NOGRATZ:
    result = PRF_TOG_CHK(ch, PRF_NOGRATZ);
    break;
  case SCMD_NOWIZ:
    result = PRF_TOG_CHK(ch, PRF_NOWIZ);
    break;
  case SCMD_QUEST:
    result = PRF_TOG_CHK(ch, PRF_QUEST);
    break;
  case SCMD_ROOMFLAGS:
    result = PRF_TOG_CHK(ch, PRF_ROOMFLAGS);
    break;
  case SCMD_NOREPEAT:
    result = PRF_TOG_CHK(ch, PRF_NOREPEAT);
    break;
  case SCMD_HOLYLIGHT:
    result = PRF_TOG_CHK(ch, PRF_HOLYLIGHT);
    break;
  case SCMD_SLOWNS:
    result = (nameserver_is_slow = !nameserver_is_slow);
    break;
  case SCMD_AUTOEXIT:
    result = PRF_TOG_CHK(ch, PRF_AUTOEXIT);
    break;
 case SCMD_AFK:
     result = PRF_TOG_CHK(ch, PRF_AFK);
  if (PRF_FLAGGED(ch, PRF_AFK))
    act("$n has gone AFK.", TRUE, ch, 0, 0, TO_ROOM);
  else
    act("$n has come back from AFK.", TRUE, ch, 0, 0, TO_ROOM);
  break;
 case SCMD_CAMP:
     result = PRF_TOG_CHK(ch, PRF_CAMP);	     
   if (PRF_FLAGGED(ch, PRF_CAMP))
       act("$n sprawls out on the ground and sets up camp.", TRUE, ch, 0, 0, TO_ROOM);
  else
       act("$n packs up some stuff and leaves their camp.", TRUE, ch, 0, 0, TO_ROOM);       
    break;

  default:
    log("SYSERR: Unknown subcmd %d in do_gen_toggle.", subcmd);
    return;
  }

  if (result)
    send_to_char(tog_messages[subcmd][TOG_ON], ch);
  else
    send_to_char(tog_messages[subcmd][TOG_OFF], ch);
    
  return;
}

ACMD(do_repair)	
{   
   int MOVE = 0, HIT = 0; 

    if (!GET_SKILL(ch, SKILL_REPAIR)) {
    send_to_char("You can't do that!\r\n", ch);
    return;
    }
    else if (IS_ANDROID(ch) &&GET_MOVE(ch) <= GET_LEVEL(ch)*2-1)
    { 
  	act("You don't have enough energy to repair your circuits.", TRUE, ch, 0, 0, TO_CHAR);
       }
    else if (IS_ANDROID(ch) &&GET_HIT(ch) < GET_MAX_HIT(ch) && GET_MOVE(ch) >= GET_LEVEL(ch)*2+1)
    {  
send_to_char("You stand still for a moment and repair your internal circuits.\r\n", ch);
act("&10$n repairs $s internal circuits.&00", TRUE, ch, 0, 0, TO_ROOM);
  
  MOVE = number(GET_LEVEL(ch)*2+10, GET_LEVEL(ch)*2+10);
  HIT = number(GET_LEVEL(ch)+10, GET_LEVEL(ch)+10);

  GET_MOVE(ch) = GET_MOVE(ch) - MOVE;
  GET_HIT(ch) = GET_HIT(ch) + HIT;
    }
    else if (IS_ANDROID(ch) &&GET_HIT(ch) >= GET_MAX_HIT(ch))
    {
  	act("You are already fully repaired.", TRUE, ch, 0, 0, TO_CHAR);
    }       
}


ACMD(do_kaioken)	
{    
    int MANA = 0, HIT = 0; 
    
    one_argument(argument, arg);
  
 if (!GET_SKILL(ch, SKILL_KAIOKEN)) {
    send_to_char("You don't know that technique!\r\n", ch);
    return;
    }
  else if (!*argument) {
    send_to_char("Usage: Kaioken (1-20)\r\n", ch);
    return;
     }

   if (!str_cmp(arg,"1") && GET_MANA(ch) < GET_MAX_MANA(ch)) {
    send_to_char("You don't have enough strength to do that.\r\n", ch);
     }   
   else if (!str_cmp(arg,"1") && GET_MANA(ch) >= GET_MAX_MANA(ch)+100){
   send_to_char("You're already passed that stage of kaioken.\r\n", ch);
     }
   else if (!str_cmp(arg,"1")){
   send_to_char("&10You begin over working your body by reaching kaioken level 1.&00\r\n", ch);
   act("&09$n overworks $s body by reaching kaioken level 1!&00", TRUE, ch, 0, 0, TO_ROOM);
   MANA = number(100, 100);
   HIT = number(100, 100);

   GET_MANA(ch) = GET_MANA(ch) + MANA;
   GET_HIT(ch) = GET_HIT(ch) - HIT; 
}
   if (!str_cmp(arg,"2") && GET_MANA(ch) < GET_MAX_MANA(ch)) {
    send_to_char("You don't have enough strength to do that.\r\n", ch);
     }   
   else if (!str_cmp(arg,"2") && GET_MANA(ch) >= GET_MAX_MANA(ch)+300){
   send_to_char("You're already passed that stage of kaioken.\r\n", ch);
     }
   else if (!str_cmp(arg,"2")){
   send_to_char("&10You begin over working your body by reaching kaioken level 2.&00\r\n", ch);
   act("&09$n overworks $s body by reaching kaioken level 2!&00", TRUE, ch, 0, 0, TO_ROOM);
   MANA = number(300, 300);
   HIT = number(300, 300);

   GET_MANA(ch) = GET_MANA(ch) + MANA;
   GET_HIT(ch) = GET_HIT(ch) - HIT; 
}
   if (!str_cmp(arg,"3") && GET_MANA(ch) < GET_MAX_MANA(ch)) {
    send_to_char("You don't have enough strength to do that.\r\n", ch);
     }   
   else if (!str_cmp(arg,"3") && GET_MANA(ch) >= GET_MAX_MANA(ch)+600){
   send_to_char("You're already passed that stage of kaioken.\r\n", ch);
     }
   else if (!str_cmp(arg,"3")){
   send_to_char("&10You begin over working your body by reaching kaioken level 3.&00\r\n", ch);
   act("&09$n overworks $s body by reaching kaioken level 3!&00", TRUE, ch, 0, 0, TO_ROOM);
   MANA = number(600, 600);
   HIT = number(600, 600);

   GET_MANA(ch) = GET_MANA(ch) + MANA;
   GET_HIT(ch) = GET_HIT(ch) - HIT; 
}
   if (!str_cmp(arg,"4") && GET_MANA(ch) < GET_MAX_MANA(ch)) {
    send_to_char("You don't have enough strength to do that.\r\n", ch);
     }   
   else if (!str_cmp(arg,"4") && GET_MANA(ch) >= GET_MAX_MANA(ch)+1000){
   send_to_char("You're already passed that stage of kaioken.\r\n", ch);
     }
   else if (!str_cmp(arg,"4")){
   send_to_char("&10You begin over working your body by reaching kaioken level 4.&00\r\n", ch);
   act("&09$n overworks $s body by reaching kaioken level 4!&00", TRUE, ch, 0, 0, TO_ROOM);
   MANA = number(1000, 1000);
   HIT = number(1000, 1000);

   GET_MANA(ch) = GET_MANA(ch) + MANA;
   GET_HIT(ch) = GET_HIT(ch) - HIT; 
}
   if (!str_cmp(arg,"5") && GET_MANA(ch) < GET_MAX_MANA(ch)) {
    send_to_char("You don't have enough strength to do that.\r\n", ch);
     }   
   else if (!str_cmp(arg,"5") && GET_MANA(ch) >= GET_MAX_MANA(ch)+1500){
   send_to_char("You're already passed that stage of kaioken.\r\n", ch);
     }
   else if (!str_cmp(arg,"5")){
   send_to_char("&10You begin over working your body by reaching kaioken level 5.&00\r\n", ch);
   act("&09$n overworks $s body by reaching kaioken level 5!&00", TRUE, ch, 0, 0, TO_ROOM);
   MANA = number(1500, 1500);
   HIT = number(1500, 1500);

   GET_MANA(ch) = GET_MANA(ch) + MANA;
   GET_HIT(ch) = GET_HIT(ch) - HIT; 
}
  if (!str_cmp(arg,"6") && GET_MANA(ch) < GET_MAX_MANA(ch)) {
    send_to_char("You don't have enough strength to do that.\r\n", ch);
     }   
   else if (!str_cmp(arg,"6") && GET_MANA(ch) >= GET_MAX_MANA(ch)+2100){
   send_to_char("You're already passed that stage of kaioken.\r\n", ch);
     }
   else if (!str_cmp(arg,"6")){
   send_to_char("&10You begin over working your body by reaching kaioken level 6.&00\r\n", ch);
   act("&09$n overworks $s body by reaching kaioken level 6!&00", TRUE, ch, 0, 0, TO_ROOM);
   MANA = number(2100, 2100);
   HIT = number(2100, 2100);

   GET_MANA(ch) = GET_MANA(ch) + MANA;
   GET_HIT(ch) = GET_HIT(ch) - HIT; 
}
   if (!str_cmp(arg,"7") && GET_MANA(ch) < GET_MAX_MANA(ch)) {
    send_to_char("You don't have enough strength to do that.\r\n", ch);
     }   
   else if (!str_cmp(arg,"7") && GET_MANA(ch) >= GET_MAX_MANA(ch)+2800){
   send_to_char("You're already passed that stage of kaioken.\r\n", ch);
     }
   else if (!str_cmp(arg,"7")){
   send_to_char("&10You begin over working your body by reaching kaioken level 7.&00\r\n", ch);
   act("&09$n overworks $s body by reaching kaioken level 7!&00", TRUE, ch, 0, 0, TO_ROOM);
   MANA = number(2800, 2800);
   HIT = number(2800, 2800);

   GET_MANA(ch) = GET_MANA(ch) + MANA;
   GET_HIT(ch) = GET_HIT(ch) - HIT; 
}
   if (!str_cmp(arg,"8") && GET_MANA(ch) < GET_MAX_MANA(ch)) {
    send_to_char("You don't have enough strength to do that.\r\n", ch);
     }   
   else if (!str_cmp(arg,"8") && GET_MANA(ch) >= GET_MAX_MANA(ch)+3600){
   send_to_char("You're already passed that stage of kaioken.\r\n", ch);
     }
   else if (!str_cmp(arg,"8")){
   send_to_char("&10You begin over working your body by reaching kaioken level 8.&00\r\n", ch);
   act("&09$n overworks $s body by reaching kaioken level 8!&00", TRUE, ch, 0, 0, TO_ROOM);
   MANA = number(3600, 3600);
   HIT = number(3600, 3600);

   GET_MANA(ch) = GET_MANA(ch) + MANA;
   GET_HIT(ch) = GET_HIT(ch) - HIT; 
}
   if (!str_cmp(arg,"9") && GET_MANA(ch) < GET_MAX_MANA(ch)) {
    send_to_char("You don't have enough strength to do that.\r\n", ch);
     }   
   else if (!str_cmp(arg,"9") && GET_MANA(ch) >= GET_MAX_MANA(ch)+4500){
   send_to_char("You're already passed that stage of kaioken.\r\n", ch);
     }
   else if (!str_cmp(arg,"9")){
   send_to_char("&10You begin over working your body by reaching kaioken level 9.&00\r\n", ch);
   act("&09$n overworks $s body by reaching kaioken level 9!&00", TRUE, ch, 0, 0, TO_ROOM);
   MANA = number(4500, 4500);
   HIT = number(4500, 4500);

   GET_MANA(ch) = GET_MANA(ch) + MANA;
   GET_HIT(ch) = GET_HIT(ch) - HIT; 
}
   if (!str_cmp(arg,"10") && GET_MANA(ch) < GET_MAX_MANA(ch)) {
    send_to_char("You don't have enough strength to do that.\r\n", ch);
     }   
   else if (!str_cmp(arg,"10") && GET_MANA(ch) >= GET_MAX_MANA(ch)+5500){
   send_to_char("You're already passed that stage of kaioken.\r\n", ch);
     }
   else if (!str_cmp(arg,"10")){
   send_to_char("&10You begin over working your body by reaching kaioken level 10.&00\r\n", ch);
   act("&09$n overworks $s body by reaching kaioken level 10!&00", TRUE, ch, 0, 0, TO_ROOM);
   MANA = number(5500, 5500);
   HIT = number(5500, 5500);

   GET_MANA(ch) = GET_MANA(ch) + MANA;
   GET_HIT(ch) = GET_HIT(ch) - HIT; 
}
   if (!str_cmp(arg,"11") && GET_MANA(ch) < GET_MAX_MANA(ch)) {
    send_to_char("You don't have enough strength to do that.\r\n", ch);
     }   
   else if (!str_cmp(arg,"11") && GET_MANA(ch) >= GET_MAX_MANA(ch)+6600){
   send_to_char("You're already passed that stage of kaioken.\r\n", ch);
     }
   else if (!str_cmp(arg,"11")){
   send_to_char("&10You begin over working your body by reaching kaioken level 11.&00\r\n", ch);
   act("&09$n overworks $s body by reaching kaioken level 11!&00", TRUE, ch, 0, 0, TO_ROOM);
   MANA = number(6600, 6600);
   HIT = number(6600, 6600);

   GET_MANA(ch) = GET_MANA(ch) + MANA;
   GET_HIT(ch) = GET_HIT(ch) - HIT; 
}
   if (!str_cmp(arg,"12") && GET_MANA(ch) < GET_MAX_MANA(ch)) {
    send_to_char("You don't have enough strength to do that.\r\n", ch);
     }   
   else if (!str_cmp(arg,"12") && GET_MANA(ch) >= GET_MAX_MANA(ch)+7800){
   send_to_char("You're already passed that stage of kaioken.\r\n", ch);
     }
   else if (!str_cmp(arg,"12")){
   send_to_char("&10You begin over working your body by reaching kaioken level 12.&00\r\n", ch);
   act("&09$n overworks $s body by reaching kaioken level 12!&00", TRUE, ch, 0, 0, TO_ROOM);
   MANA = number(7800, 7800);
   HIT = number(7800, 7800);

   GET_MANA(ch) = GET_MANA(ch) + MANA;
   GET_HIT(ch) = GET_HIT(ch) - HIT; 
}
   if (!str_cmp(arg,"13") && GET_MANA(ch) < GET_MAX_MANA(ch)) {
    send_to_char("You don't have enough strength to do that.\r\n", ch);
     }   
   else if (!str_cmp(arg,"13") && GET_MANA(ch) >= GET_MAX_MANA(ch)+9100){
   send_to_char("You're already passed that stage of kaioken.\r\n", ch);
     }
   else if (!str_cmp(arg,"13")){
   send_to_char("&10You begin over working your body by reaching kaioken level 13.&00\r\n", ch);
   act("&09$n overworks $s body by reaching kaioken level 13!&00", TRUE, ch, 0, 0, TO_ROOM);
   MANA = number(9100, 9100);
   HIT = number(9100, 9100);

   GET_MANA(ch) = GET_MANA(ch) + MANA;
   GET_HIT(ch) = GET_HIT(ch) - HIT; 
}
   if (!str_cmp(arg,"14") && GET_MANA(ch) < GET_MAX_MANA(ch)) {
    send_to_char("You don't have enough strength to do that.\r\n", ch);
     }   
   else if (!str_cmp(arg,"14") && GET_MANA(ch) >= GET_MAX_MANA(ch)+10500){
   send_to_char("You're already passed that stage of kaioken.\r\n", ch);
     }
   else if (!str_cmp(arg,"14")){
   send_to_char("&10You begin over working your body by reaching kaioken level 14.&00\r\n", ch);
   act("&09$n overworks $s body by reaching kaioken level 14!&00", TRUE, ch, 0, 0, TO_ROOM);
   MANA = number(10500, 10500);
   HIT = number(10500, 10500);

   GET_MANA(ch) = GET_MANA(ch) + MANA;
   GET_HIT(ch) = GET_HIT(ch) - HIT; 
}
   if (!str_cmp(arg,"15") && GET_MANA(ch) < GET_MAX_MANA(ch)) {
    send_to_char("You don't have enough strength to do that.\r\n", ch);
     }   
   else if (!str_cmp(arg,"15") && GET_MANA(ch) >= GET_MAX_MANA(ch)+12000){
   send_to_char("You're already passed that stage of kaioken.\r\n", ch);
     }
   else if (!str_cmp(arg,"15")){
   send_to_char("&10You begin over working your body by reaching kaioken level 15.&00\r\n", ch);
   act("&09$n overworks $s body by reaching kaioken level 15!&00", TRUE, ch, 0, 0, TO_ROOM);
   MANA = number(12000, 12000);
   HIT = number(12000, 12000);

   GET_MANA(ch) = GET_MANA(ch) + MANA;
   GET_HIT(ch) = GET_HIT(ch) - HIT; 
}
   if (!str_cmp(arg,"16") && GET_MANA(ch) < GET_MAX_MANA(ch)) {
    send_to_char("You don't have enough strength to do that.\r\n", ch);
     }   
   else if (!str_cmp(arg,"16") && GET_MANA(ch) >= GET_MAX_MANA(ch)+13600){
   send_to_char("You're already passed that stage of kaioken.\r\n", ch);
     }
   else if (!str_cmp(arg,"16")){
   send_to_char("&10You begin over working your body by reaching kaioken level 16.&00\r\n", ch);
   act("&09$n overworks $s body by reaching kaioken level 16!&00", TRUE, ch, 0, 0, TO_ROOM);
   MANA = number(13600, 13600);
   HIT = number(13600, 13600);

   GET_MANA(ch) = GET_MANA(ch) + MANA;
   GET_HIT(ch) = GET_HIT(ch) - HIT; 
}
   if (!str_cmp(arg,"17") && GET_MANA(ch) < GET_MAX_MANA(ch)) {
    send_to_char("You don't have enough strength to do that.\r\n", ch);
     }   
   else if (!str_cmp(arg,"17") && GET_MANA(ch) >= GET_MAX_MANA(ch)+15300){
   send_to_char("You're already passed that stage of kaioken.\r\n", ch);
     }
   else if (!str_cmp(arg,"17")){
   send_to_char("&10You begin over working your body by reaching kaioken level 17.&00\r\n", ch);
   act("&09$n overworks $s body by reaching kaioken level 17!&00", TRUE, ch, 0, 0, TO_ROOM);
   MANA = number(15300, 15300);
   HIT = number(15300, 15300);

   GET_MANA(ch) = GET_MANA(ch) + MANA;
   GET_HIT(ch) = GET_HIT(ch) - HIT; 
}
   if (!str_cmp(arg,"18") && GET_MANA(ch) < GET_MAX_MANA(ch)) {
    send_to_char("You don't have enough strength to do that.\r\n", ch);
     }   
   else if (!str_cmp(arg,"18") && GET_MANA(ch) >= GET_MAX_MANA(ch)+17100){
   send_to_char("You're already passed that stage of kaioken.\r\n", ch);
     }
   else if (!str_cmp(arg,"18")){
   send_to_char("&10You begin over working your body by reaching kaioken level 18.&00\r\n", ch);
   act("&09$n overworks $s body by reaching kaioken level 18!&00", TRUE, ch, 0, 0, TO_ROOM);
   MANA = number(17100, 17100);
   HIT = number(17100, 17100);

   GET_MANA(ch) = GET_MANA(ch) + MANA;
   GET_HIT(ch) = GET_HIT(ch) - HIT; 
}
   if (!str_cmp(arg,"19") && GET_MANA(ch) < GET_MAX_MANA(ch)) {
    send_to_char("You don't have enough strength to do that.\r\n", ch);
     }   
   else if (!str_cmp(arg,"19") && GET_MANA(ch) >= GET_MAX_MANA(ch)+19000){
   send_to_char("You're already passed that stage of kaioken.\r\n", ch);
     }
   else if (!str_cmp(arg,"19")){
   send_to_char("&10You begin over working your body by reaching kaioken level 19.&00\r\n", ch);
   act("&09$n overworks $s body by reaching kaioken level 19!&00", TRUE, ch, 0, 0, TO_ROOM);
   MANA = number(19000, 19000);
   HIT = number(19000, 19000);

   GET_MANA(ch) = GET_MANA(ch) + MANA;
   GET_HIT(ch) = GET_HIT(ch) - HIT; 
}
   if (!str_cmp(arg,"20") && GET_MANA(ch) < GET_MAX_MANA(ch)) {
    send_to_char("You don't have enough strength to do that.\r\n", ch);
     }   
   else if (!str_cmp(arg,"20") && GET_MANA(ch) >= GET_MAX_MANA(ch)+25000){
   send_to_char("You're already passed that stage of kaioken.\r\n", ch);
     }
   else if (!str_cmp(arg,"20")){
   send_to_char("&10You begin over working your body by reaching kaioken level 20.&00\r\n", ch);
   act("&09$n overworks $s body by reaching kaioken level 20!&00", TRUE, ch, 0, 0, TO_ROOM);
   MANA = number(25000, 25000);
   HIT = number(25000, 25000);

   GET_MANA(ch) = GET_MANA(ch) + MANA;
   GET_HIT(ch) = GET_HIT(ch) - HIT; 
}
  if (GET_HIT(ch) <= 0) {
  send_to_char("&09You overwork your body too much and explode.&00\r\n", ch);
  act("&10$n&09 tries to reach a kaioken level beyond thier limit and explodes!&00", TRUE, ch, 0, 0, TO_ROOM);
  char_from_room(ch);
  char_to_room(ch, r_death_start_room);
  GET_HIT(ch) = GET_MAX_HIT(ch)*0.1;
  GET_MANA(ch) = GET_MAX_MANA(ch)*0.1;
  GET_MOVE(ch) = GET_MAX_MOVE(ch)*0.1;
  GET_POS(ch) = POS_STANDING;
  look_at_room(ch, 0);
  }
}


ACMD(do_learn) {
	char buf[1024];
	int r = 1 << GET_CLASS(ch);
	int i = 0;
	
	argument = one_argument(argument, buf);

	if (buf[0] != '\0') {
		int skill = 0;
		while (spells[skill].name[0] != '\n') {
			if (!strncasecmp(buf, spells[skill].name, strlen(buf))) {
				if (!(spells[skill].races & r)) {
					send_to_char("You can't learn that.\r\n", ch);
					return;
				}
				else if (GET_PRACTICES(ch) < spells[skill].cost) {
					send_to_char("You don't have enough learning points to learn that.\r\n", ch);
					return;
				} else if (GET_SKILL(ch, skill) != 0) {
					send_to_char("You already know that technique.\r\n", ch);
					return;
				} else {
					sprintf(buf, "&15You expend &09%d&15 learning points to learn &10%s&00.\r\n", spells[skill].cost,
									spells[skill].name);
					send_to_char(buf, ch);
					GET_PRACTICES(ch) = GET_PRACTICES(ch) - spells[skill].cost;
					GET_SKILL(ch, skill) = 100;
					return;
				}
			} else {
				++skill;
			}
		}
		
		sprintf(buf, "%s is not a technique.\r\n", argument);
		send_to_char(buf, ch);
		return;
	}

	send_to_char("&15o&12---------------------------------------------------------&15o&00\r\n", ch);
	send_to_char("&15&12|&11Technique:          &14Cost:                                &12|&00\r\n", ch);
        send_to_char("&15o&12---------------------------------------------------------&15o&00\r\n", ch);
	while (spells[i].name[0] != '\n') {
		if ((spells[i].races & r) && (GET_SKILL(ch, i) == 0) &&  spells[i].type == SPELL_OFFENSIVE) {
			sprintf(buf, "&12|%s%-20s&02%3d&12%35s&09\r\n", spells[i].type ? "&09" : "&09", 
						spells[i].name, spells[i].cost, "|");
			send_to_char(buf, ch);
		}
		else if ((spells[i].races & r) && (GET_SKILL(ch, i) == 0) &&  spells[i].type == SPELL_DEFENSIVE) {
			sprintf(buf, "&12|%s%-20s&02%3d&12%35s&09\r\n", spells[i].type ? "&12" : "&12", 
						spells[i].name, spells[i].cost, "|");
			send_to_char(buf, ch);
		}
		else if ((spells[i].races & r) && (GET_SKILL(ch, i) == 0) &&  spells[i].type == SPELL_ENHANCE) {
			sprintf(buf, "&12|%s%-20s&02%3d&12%35s&09\r\n", spells[i].type ? "&10" : "&10", 
						spells[i].name, spells[i].cost, "|");
			send_to_char(buf, ch);
		}
		else if ((spells[i].races & r) && (GET_SKILL(ch, i) == 0) &&  spells[i].type == SPELL_OTHER) {
			sprintf(buf, "&12|%s%-20s&02%3d&12%35s&09\r\n", spells[i].type ? "&15" : "&15", 
						spells[i].name, spells[i].cost, "|");
			send_to_char(buf, ch);
		}
		else if ((spells[i].races & r) && (GET_SKILL(ch, i) == 0) &&  spells[i].type == SPELL_HEALSPELL) {
			sprintf(buf, "&12|%s%-20s&02%3d&12%35s&09\r\n", spells[i].type ? "&13" : "&13", 
						spells[i].name, spells[i].cost, "|");
			send_to_char(buf, ch);
		}
		++i;
	}

	send_to_char("&15o&12---------------------------------------------------------&15o&00\r\n", ch);
	sprintf(buf, "&15You have &09%d &15learning points.&00\r\n", GET_PRACTICES(ch));
	send_to_char(buf, ch);
}

ACMD(do_learned) {
	char buf[1024];
	int col = 0, pos = 0;
	buf[0] = '\0';
	send_to_char("&10You know the following techniques:&00.\r\n", ch);

	for (pos = 1; pos < MAX_SKILLS; ++pos) {
		int i = spell_sort_info[pos];
		if (GET_SKILL(ch, i) != 0 && spells[i].name[0] != '!' &&  spells[i].type == SPELL_OFFENSIVE) {
			char buf2[32];
			sprintf(buf2, "%s%-20s%s", spells[i].type ? "&09" : "&09",
							spells[i].name, "&00");
			strcat(buf, buf2);
			++col;
		}
		if (GET_SKILL(ch, i) != 0 && spells[i].name[0] != '!' &&  spells[i].type == SPELL_DEFENSIVE) {
			char buf2[32];
			sprintf(buf2, "%s%-20s%s", spells[i].type ? "&12" : "&12",
							spells[i].name, "&00");
			strcat(buf, buf2);
			++col;
		}
		if (GET_SKILL(ch, i) != 0 && spells[i].name[0] != '!' &&  spells[i].type == SPELL_ENHANCE) {
			char buf2[32];
			sprintf(buf2, "%s%-20s%s", spells[i].type ? "&10" : "&10",
							spells[i].name, "&00");
			strcat(buf, buf2);
			++col;
		}
		if (GET_SKILL(ch, i) != 0 && spells[i].name[0] != '!' &&  spells[i].type == SPELL_OTHER) {
			char buf2[32];
			sprintf(buf2, "%s%-20s%s", spells[i].type ? "&15" : "&15",
							spells[i].name, "&00");
			strcat(buf, buf2);
			++col;
		}
		if (GET_SKILL(ch, i) != 0 && spells[i].name[0] != '!' &&  spells[i].type == SPELL_HEALSPELL) {
			char buf2[32];
			sprintf(buf2, "%s%-20s%s", spells[i].type ? "&13" : "&13",
							spells[i].name, "&00");
			strcat(buf, buf2);
			++col;
		}
		if (col % 3 == 2) {
			send_to_char(buf, ch);
/*			send_to_char("\r\n", ch);	*/ /* Uncomment to do a newline after ever 3 */
			buf[0] = '\0';
		}
	}
}


ACMD(do_fly)	
{

 }

ACMD(do_powerup)	
{   
   int MANA = 0; 

    if (!GET_SKILL(ch, SKILL_POWERUP)) {
  send_to_char("You can't do that!\r\n", ch);
  return;
    }
    if (GET_MANA(ch) >= GET_MAX_MANA(ch))
    {
  	act("You are already fully powered up!", TRUE, ch, 0, 0, TO_CHAR); 
  return;
    }
    else if (GET_MANA(ch) < GET_MAX_MANA(ch))
    {  
  send_to_char("You concentrate and recharge your ki as you powerup.\r\n", ch);

  MANA = number(1, 200);
  GET_MANA(ch) = GET_MANA(ch) + MANA;
  return;
    }
}

ACMD(do_ingest)
{
	
   int MAX_HIT = 0, EXP = 0, MAX_MANA; 
   struct char_data * vict; 
   
   one_argument(argument, arg);
  
     if (!GET_SKILL(ch, SKILL_INGEST)) {
  send_to_char("You can't do that!\r\n", ch);
  return;
}

    if (!(vict = get_char_room_vis(ch, arg))) {
      send_to_char("Absorb who?\r\n", ch);
      return;
    }
    
        if (GET_MAX_MANA(ch) >= 5000) {
      act("&15Eating people will no longer benefit you!", FALSE, ch, 0, vict, TO_CHAR);
      return;
      }
    if (IS_NPC(vict) && GET_STR(ch)*2+GET_MANA(ch)/4*GET_LEVEL(ch)+GET_DAMROLL(ch)*2 >= GET_STR(vict)*2+GET_MANA(vict)/4*GET_LEVEL(vict)+GET_DAMROLL(vict))
  {
      act("&15You eat &09$N&15!", FALSE, ch, 0, vict, TO_CHAR);
      act("&09$n&15 eat &09$N&15!.", TRUE, ch, 0, vict, TO_NOTVICT);
      act("&09$n&15 eats you!&00", FALSE, ch, 0, vict, TO_VICT);
  
  MAX_HIT = number(GET_STR(vict)*2+GET_MANA(vict)/4*GET_LEVEL(vict)+GET_DAMROLL(vict)/10, GET_STR(vict)*2+GET_MANA(vict)/4*GET_LEVEL(vict)+GET_DAMROLL(vict)/10);
  MAX_MANA = number(GET_STR(vict)*2+GET_MANA(vict)/4*GET_LEVEL(vict)+GET_DAMROLL(vict)/10, GET_STR(vict)*2+GET_MANA(vict)/4*GET_LEVEL(vict)+GET_DAMROLL(vict)/10);
  EXP = number(GET_STR(vict)*2+GET_MANA(vict)/4*GET_LEVEL(vict)+GET_DAMROLL(vict), GET_STR(vict)*2+GET_MANA(vict)/4*GET_LEVEL(vict)+GET_DAMROLL(vict));

  GET_MAX_HIT(ch) = GET_MAX_HIT(ch) + MAX_HIT;
  GET_MAX_MANA(ch) = GET_MAX_MANA(ch) + MAX_MANA;
  GET_EXP(ch) = GET_EXP(ch) + EXP;
  }
          if (IS_NPC(vict)) {
  	    extract_char(vict);
  	    return;
  	    }

 if (IS_NPC(vict) && GET_STR(ch)*2+GET_MANA(ch)/4*GET_LEVEL(ch)+GET_DAMROLL(ch)*2 <= GET_STR(vict)*2+GET_MANA(vict)/4*GET_LEVEL(vict)+GET_DAMROLL(vict)) {
           act("&15You cannot over power them enough to eat them!", FALSE, ch, 0, vict, TO_CHAR);              
           return;
      }
   }       


ACMD(do_powerdown)	
{   
   int MANA = 0; 
  
    if (!GET_SKILL(ch, SKILL_POWERDOWN)) {
  send_to_char("You can't do that!\r\n", ch);
  return;
  }
    if (GET_MANA(ch) <= GET_MAX_MANA(ch)-GET_MAX_MANA(ch))
    {
  	act("You dropped your power level as low as you can already.", TRUE, ch, 0, 0, TO_CHAR); 
  return;
    }
    if (GET_MANA(ch) <= GET_MAX_MANA(ch)-1)
    {
  	act("You already used some energy theres no point.", TRUE, ch, 0, 0, TO_CHAR); 
  return;
    }
    else if (GET_MANA(ch) >= GET_MAX_MANA(ch))
    {  
  send_to_char("You concentrate and compress all your energy.\r\n", ch);

  MANA = number(GET_MAX_MANA(ch), GET_MAX_MANA(ch));
  GET_MANA(ch) = GET_MANA(ch) - MANA;
  return;
    }
}

ACMD(do_upgrade)	
{    
    one_argument(argument, arg);
   
   if (!IS_ANDROID(ch) && (GET_LEVEL(ch) >= 1)) {
    act("&15Only androids may aquire upgrades and upgrade information.&00", TRUE, ch, 0, 0, TO_CHAR);
    return;
     }
        
   if (!*argument && IS_ANDROID(ch)) {
    send_to_char("&10Upgrading commands:&00\r\n", ch);
    send_to_char("&09-------------------&00\r\n", ch);
    send_to_char("&15Upgrade info       &00\r\n", ch);
    send_to_char("&15Upgrade new        &00\r\n", ch);
    send_to_char("&15Upgrade latest     &00\r\n", ch);
    send_to_char("&15Upgrade minor      &00\r\n", ch);
    return;
     }

   if (!str_cmp(arg,"latest") && IS_ANDROID(ch)) {
    act("&15The most current robotic version is version &095.0&12a&15.&00", TRUE, ch, 0, 0, TO_CHAR);
   }
   
   if (!str_cmp(arg,"info") && IS_ANDROID(ch)) {
   act("&15Current Circuitry Version:    &090.01&12a&00", TRUE, ch, 0, 0, TO_CHAR);
   act("&15Mental Processing Speed:      &10Basic&00", TRUE, ch, 0, 0, TO_CHAR);
   act("&15Extra Damage Capacity Units:    &090&00", TRUE, ch, 0, 0, TO_CHAR);
   act("&15Extra Ki Units:                 &090&00", TRUE, ch, 0, 0, TO_CHAR);
   act("&15Internal Sensors:             &10Basic&00", TRUE, ch, 0, 0, TO_CHAR);
   }

   if (!str_cmp(arg,"minor") && IS_ANDROID(ch)) {
    act("&15Upgrade to 1.0b, 1.0c and so on, not done yet.&00", TRUE, ch, 0, 0, TO_CHAR);
   }
}

ACMD(do_absorb)	
{   
   int MAX_HIT = 0, EXP = 0, MAX_MANA; 
   struct char_data * vict; 
 
   one_argument(argument, arg);
  
     if (!GET_SKILL(ch, SKILL_ABSORB)) {
  send_to_char("You can't do that!\r\n", ch);
  return;
}

    if (!(vict = get_char_room_vis(ch, arg))) {
      send_to_char("Absorb who?\r\n", ch);
      return;
    }
    
        if (GET_MAX_MANA(ch) >= 5000) {
      act("&15Absorbing people will no longer benefit you!", FALSE, ch, 0, vict, TO_CHAR);
      return;
      }
    if (IS_NPC(vict) && GET_STR(ch)*2+GET_MANA(ch)/4*GET_LEVEL(ch)+GET_DAMROLL(ch)*2 >= GET_STR(vict)*2+GET_MANA(vict)/4*GET_LEVEL(vict)+GET_DAMROLL(vict))
  {
      act("&15You absorb &09$N&15 into your body!", FALSE, ch, 0, vict, TO_CHAR);
      act("&09$n&15 absorbs &09$N&15 into $s body!.", TRUE, ch, 0, vict, TO_NOTVICT);
      act("&09$n&15 absorbs you into $s body!&00", FALSE, ch, 0, vict, TO_VICT);
  
  MAX_HIT = number(GET_STR(vict)*2+GET_MANA(vict)/4*GET_LEVEL(vict)+GET_DAMROLL(vict)/10, GET_STR(vict)*2+GET_MANA(vict)/4*GET_LEVEL(vict)+GET_DAMROLL(vict)/10);
  MAX_MANA = number(GET_STR(vict)*2+GET_MANA(vict)/4*GET_LEVEL(vict)+GET_DAMROLL(vict)/10, GET_STR(vict)*2+GET_MANA(vict)/4*GET_LEVEL(vict)+GET_DAMROLL(vict)/10);
  EXP = number(GET_STR(vict)*2+GET_MANA(vict)/4*GET_LEVEL(vict)+GET_DAMROLL(vict), GET_STR(vict)*2+GET_MANA(vict)/4*GET_LEVEL(vict)+GET_DAMROLL(vict));

  GET_MAX_HIT(ch) = GET_MAX_HIT(ch) + MAX_HIT;
  GET_MAX_MANA(ch) = GET_MAX_MANA(ch) + MAX_MANA;
  GET_EXP(ch) = GET_EXP(ch) + EXP;
  }
          if (IS_NPC(vict)) {
  	    extract_char(vict);
  	    return;
  	    }

 if (IS_NPC(vict) && GET_STR(ch)*2+GET_MANA(ch)/4*GET_LEVEL(ch)+GET_DAMROLL(ch)*2 <= GET_STR(vict)*2+GET_MANA(vict)/4*GET_LEVEL(vict)+GET_DAMROLL(vict)) {
           act("&15You cannot over power them enough to absorb them!", FALSE, ch, 0, vict, TO_CHAR);              
           return;
      }
   }              
   
   
ACMD(do_selfdestruct)
{
	
struct char_data * vict;
 
one_argument(argument, arg);
  
  if (!GET_SKILL(ch, SKILL_DESTRUCT)) {
  send_to_char("You can't do that!\r\n", ch);
  return;
    }

  if (!(vict = get_char_room_vis(ch, arg))) {
      send_to_char("Self destruct on who?\r\n", ch);
      return;
    }  

  if (!IS_NPC(vict) && GET_STR(ch)*2+GET_MANA(ch)/4*GET_LEVEL(ch)+GET_DAMROLL(ch) >= GET_STR(vict)*2+GET_MANA(vict)/4*GET_LEVEL(vict)+GET_DAMROLL(vict))
  {
      act("&15You self detruct taking &09$N&15 with you!&00", FALSE, ch, 0, vict, TO_CHAR);
      act("&09$n &15self-destructs taking &09$N with $S&00.", TRUE, ch, 0, vict, TO_NOTVICT);
      act("&09$n&15 self-destructs killing you with the explosion!&00", FALSE, ch, 0, vict, TO_VICT);
  char_from_room(vict);
  char_to_room(vict, r_death_start_room);
  GET_HIT(vict) = GET_MAX_HIT(vict);
  GET_MANA(vict) = GET_MAX_MANA(vict);
  GET_MOVE(vict) = GET_MAX_MOVE(vict);
  GET_POS(vict) = POS_STANDING;
  look_at_room(vict, 0);
  char_from_room(ch);
  char_to_room(ch, r_death_start_room);
  GET_HIT(ch) = GET_MAX_HIT(ch);
  GET_MANA(ch) = GET_MAX_MANA(ch);
  GET_MOVE(ch) = GET_MAX_MOVE(ch);
  GET_POS(ch) = POS_STANDING;
  look_at_room(ch, 0);
  if (IS_NPC(vict))
  extract_char(vict);
  char_from_room(ch);
  char_to_room(ch, r_death_start_room);
  GET_HIT(ch) = GET_MAX_HIT(ch);
  GET_MANA(ch) = GET_MAX_MANA(ch);
  GET_MOVE(ch) = GET_MAX_MOVE(ch);
  GET_POS(ch) = POS_STANDING;
  look_at_room(ch, 0);
  } 
  
  else if (!IS_NPC(vict) && GET_STR(ch)*2+GET_MANA(ch)/4*GET_LEVEL(ch)+GET_DAMROLL(ch) <= GET_STR(vict)*2+GET_MANA(vict)/4*GET_LEVEL(vict)+GET_DAMROLL(vict)){
  act("&15You self detruct but &09$N&15 does not die!&00", FALSE, ch, 0, vict, TO_CHAR);
  act("&09$n &15self-destructs but fails to take &09$N with $S&00.", TRUE, ch, 0, vict, TO_NOTVICT);
  act("&09$n&15 self-destructs but fails to kill you!&00", FALSE, ch, 0, vict, TO_VICT);
  char_from_room(ch);
  char_to_room(ch, r_death_start_room);
  GET_HIT(ch) = GET_MAX_HIT(ch);
  GET_MANA(ch) = GET_MAX_MANA(ch);
  GET_MOVE(ch) = GET_MAX_MOVE(ch);
  GET_POS(ch) = POS_STANDING;
  look_at_room(ch, 0);
  }

}


ACMD(do_powersense)
{
	struct char_data * vict;
        one_argument(argument, arg);
 
 if (!GET_SKILL(ch, SKILL_POWERSENSE)) {
  send_to_char("You can't do that!\r\n", ch);
  return;
}


   if (!(vict = get_char_room_vis(ch, arg))) {
      send_to_char("Detect who's power?\r\n", ch);
      return;
    } 

   if (vict) {		/* victim */
  act("You pause for a moment as you stare at $N.", FALSE, ch, 0, vict, TO_CHAR);
  act("$n stares at $N momentarily..", TRUE, ch, 0, vict, TO_NOTVICT);
  act("$n stares at you momentarily.&00", FALSE, ch, 0, vict, TO_VICT);
    sprintf(buf, "%s has a power level of &10%Ld&15.&00\r\n",GET_NAME(vict), GET_STR(vict)*2+GET_MANA(vict)/4*GET_LEVEL(vict)+GET_DAMROLL(vict));
     send_to_char(buf, ch);
  }
}

ACMD(do_ssj)	
{    
	
  int MAX_MANA = 0, MAX_HIT = 0;
    
    one_argument(argument, arg);

    if ((!IS_saiyan(ch)) && (!IS_HALF_BREED(ch)))
    {
      act("Your not part saiyan!", TRUE, ch, 0, 0, TO_CHAR);
      return;
    } 
   else if (!*argument)
    { 
act("        &10o&12_&09-------------------------&12_&10o&00"
"         &09|   &11Super Saiyan Forms&00    &09|&00"
"        &10o&12_&09-------------------------&12_&10o&00"
"         &09|&10You can do the following:&09|&00"
"         &09|&09-------------------------&09|&00"
"         &09|&15Stage:  Power Level Req.:&09|&00 ", TRUE, ch, 0, 0, TO_CHAR);
act("         &09| &10First       &14800000&00      &09|&00", TRUE, ch, 0, 0, TO_CHAR);
act("         &09| &10Second      &145000000&00     &09|&00", TRUE, ch, 0, 0, TO_CHAR);
act("         &09| &10Third       &1410000000&00    &09|&00", TRUE, ch, 0, 0, TO_CHAR);
act("         &09| &10Fourth      &1425000000&00    &09|&00", TRUE, ch, 0, 0, TO_CHAR);
act("        &10o&12_&09-------------------------&12_&10o&00", TRUE, ch, 0, 0, TO_CHAR);
return;
}     

/*------------------        Oozaru checks, no SSj in oozaru           -----------------*/

if (!str_cmp(arg,"first") && PRF_FLAGGED(ch, PRF_OOZARU)) {
  act("&15You can't go super saiya-jin while in oozaru form!!&00", TRUE, ch, 0, 0, TO_CHAR);
  return;
  }

if (!str_cmp(arg,"second") && PRF_FLAGGED(ch, PRF_OOZARU)) {
  act("&15You can't go super saiya-jin while in oozaru form!!&00", TRUE, ch, 0, 0, TO_CHAR);
  return;
  }

if (!str_cmp(arg,"third") && PRF_FLAGGED(ch, PRF_OOZARU)) {
  act("&15You can't go super saiya-jin while in oozaru form!!&00", TRUE, ch, 0, 0, TO_CHAR);
  return;
  }
/*------------------  Checks to see if already in that stage if ssj   -----------------*/


if (!str_cmp(arg,"second") && !PRF_FLAGGED(ch, PRF_SSJ1)) {
  act("&15You can't go straight to that form!&00", TRUE, ch, 0, 0, TO_CHAR);
  return;
  }

if (!str_cmp(arg,"third") && !PRF_FLAGGED(ch, PRF_SSJ2)) {
  act("&15You can't go straight to that form!&00", TRUE, ch, 0, 0, TO_CHAR);
  return;
  }

/*-------------------------------------------------------------------------------------*/
/*----------------------------------  Reverting  --------------------------------------*/

 if (!str_cmp(arg,"revert") && PRF_FLAGGED(ch, PRF_SSJ3)) {
     REMOVE_BIT(PRF_FLAGS(ch), PRF_SSJ1);
     REMOVE_BIT(PRF_FLAGS(ch), PRF_SSJ2);
     REMOVE_BIT(PRF_FLAGS(ch), PRF_SSJ3);
    
  MAX_HIT = number(35000, 35000);
  MAX_MANA = number(35000, 35000);
  
  GET_MAX_HIT(ch) = GET_MAX_HIT(ch) - MAX_HIT;
  GET_MAX_MANA(ch) = GET_MAX_MANA(ch) - MAX_MANA;
  act("&11$n&15's &12hair&15 and &12eyes&15 turn back to normal as $s stops &09flaming&00 &11yellow&00.", TRUE, ch, 0, 0, TO_ROOM);
  act("&15Your &13rage&15 ebbs as your &12hair&15 and &12eyes&15 turn back to normal and you stop &09flaming&00 &11yellow.&00", TRUE, ch, 0, 0, TO_CHAR);
  return;
  }

else if (!str_cmp(arg,"revert") && PRF_FLAGGED(ch, PRF_SSJ2)) {
     REMOVE_BIT(PRF_FLAGS(ch), PRF_SSJ1);
     REMOVE_BIT(PRF_FLAGS(ch), PRF_SSJ2);
    
  MAX_HIT = number(15000, 15000);
  MAX_MANA = number(15000, 15000);
  
  GET_MAX_HIT(ch) = GET_MAX_HIT(ch) - MAX_HIT;
  GET_MAX_MANA(ch) = GET_MAX_MANA(ch) - MAX_MANA;
  act("&11$n&15's &12hair&15 and &12eyes&15 turn back to normal as $s stops &09flaming&00 &11yellow&00.", TRUE, ch, 0, 0, TO_ROOM);
  act("&15Your &13rage&15 ebbs as your &12hair&15 and &12eyes&15 turn back to normal and you stop &09flaming&00 &11yellow.&00", TRUE, ch, 0, 0, TO_CHAR);
  return;
}
else if (!str_cmp(arg,"revert") && PRF_FLAGGED(ch, PRF_SSJ1)) {
     REMOVE_BIT(PRF_FLAGS(ch), PRF_SSJ1);
    
  MAX_HIT = number(5000, 5000);
  MAX_MANA = number(5000, 5000);
  
  GET_MAX_HIT(ch) = GET_MAX_HIT(ch) - MAX_HIT;
  GET_MAX_MANA(ch) = GET_MAX_MANA(ch) - MAX_MANA;
  act("&11$n&15's &12hair&15 and &12eyes&15 turn back to normal as $s stops &09flaming&00 &11yellow&00.", TRUE, ch, 0, 0, TO_ROOM);
  act("&15Your &13rage&15 ebbs as your &12hair&15 and &12eyes&15 turn back to normal and you stop &09flaming&00 &11yellow.&00", TRUE, ch, 0, 0, TO_CHAR);
  return;
  }

/*-------------------------------------------------------------------------------------*/
/*------------------------------------ SSj 1 ----------------------------------------- */
/*-------------------------------------------------------------------------------------*/

if (!str_cmp(arg,"first") && PRF_FLAGGED(ch, PRF_SSJ1)) {
  act("&15Your already in that form of super saiya-jin!&00", TRUE, ch, 0, 0, TO_CHAR);
  return;
  }

if (!str_cmp(arg,"first") && GET_STR(ch)*2+GET_MAX_MANA(ch)*GET_LEVEL(ch)+GET_DAMROLL(ch)<= 800000) {
  act("&15You do not have the power to attain that form of super saiya-jin!&00", TRUE, ch, 0, 0, TO_CHAR);
  return;
  } 

 if (!str_cmp(arg,"first") && GET_STR(ch)*2+GET_MAX_MANA(ch)*GET_LEVEL(ch)+GET_DAMROLL(ch)>= 800000) {
     SET_BIT(PRF_FLAGS(ch), PRF_SSJ1);
     
  MAX_HIT = number(5000, 5000);
  MAX_MANA = number(5000, 5000);
  
  GET_MAX_HIT(ch) = GET_MAX_HIT(ch) + MAX_HIT;
  GET_MAX_MANA(ch) = GET_MAX_MANA(ch) + MAX_MANA;
  
  act("&11$n&15 begins growling as $s body starts &09flaming&00 &11yellow&15, $s &12hair&15 stands on end and begins to turn &11gold&15, and $s &12eyes&15 turn a &06light blue&15!&00", TRUE, ch, 0, 0, TO_ROOM);

  act("&15You begin &13growling&15 as your body starts &09glowing&00 &11yellow&15. your &10hair&15 stands on end and begins to turn &11gold&15. and your &12eyes&15 turn a &06light blue&15!&00", TRUE, ch, 0, 0, TO_CHAR);
return;
  }
/*-------------------------------------------------------------------------------------*/
/*------------------------------------ SSj 2 ----------------------------------------- */
/*-------------------------------------------------------------------------------------*/

if (!str_cmp(arg,"second") && PRF_FLAGGED(ch, PRF_SSJ2)) {
  act("&15Your already in that form of super saiya-jin!&00", TRUE, ch, 0, 0, TO_CHAR);
  return;
  }

if (!str_cmp(arg,"second") && GET_STR(ch)*2+GET_MAX_MANA(ch)*GET_LEVEL(ch)+GET_DAMROLL(ch)<= 5000000) {
  act("&15You do not have the power to attain that form of super saiya-jin!&00", TRUE, ch, 0, 0, TO_CHAR);
  return;
  } 

 if (!str_cmp(arg,"second") && GET_STR(ch)*2+GET_MAX_MANA(ch)*GET_LEVEL(ch)+GET_DAMROLL(ch)>= 5000000) {
     SET_BIT(PRF_FLAGS(ch), PRF_SSJ2);
     
  MAX_HIT = number(10000, 10000);
  MAX_MANA = number(10000, 10000);
  
  GET_MAX_HIT(ch) = GET_MAX_HIT(ch) + MAX_HIT;
  GET_MAX_MANA(ch) = GET_MAX_MANA(ch) + MAX_MANA;
  
  act("&11$n&15's hair stands on end moreso then before as they begin to crackle with &12electrical&15 energy!&00", TRUE, ch, 0, 0, TO_ROOM);

  act("&15You begin to crackle with &12electrical&15 energy and bolts surround you.&00", TRUE, ch, 0, 0, TO_CHAR);
return;
  }


/*------------------ What Half-breeds can't do ----------------------------------------*/
if (!str_cmp(arg,"third") && IS_HALF_BREED(ch)) {
  act("&15You can't go past super saiyan 2.&00", TRUE, ch, 0, 0, TO_CHAR);
  return;
  }

/*------------------------------------ SSj 3 ----------------------------------------- */
/*-------------------------------------------------------------------------------------*/

if (!str_cmp(arg,"third") && PRF_FLAGGED(ch, PRF_SSJ3)) {
  act("&15Your already in that form of super saiya-jin!&00", TRUE, ch, 0, 0, TO_CHAR);
  return;
  }

if (!str_cmp(arg,"third") && GET_STR(ch)*2+GET_MAX_MANA(ch)*GET_LEVEL(ch)+GET_DAMROLL(ch)<= 10000000) {
  act("&15You do not have the power to attain that form of super saiya-jin!&00", TRUE, ch, 0, 0, TO_CHAR);
  return;
  } 

 if (!str_cmp(arg,"third") && GET_STR(ch)*2+GET_MAX_MANA(ch)*GET_LEVEL(ch)+GET_DAMROLL(ch)>= 10000000) {
     SET_BIT(PRF_FLAGS(ch), PRF_SSJ3);
     
  MAX_HIT = number(20000, 20000);
  MAX_MANA = number(20000, 20000);
  
  GET_MAX_HIT(ch) = GET_MAX_HIT(ch) + MAX_HIT;
  GET_MAX_MANA(ch) = GET_MAX_MANA(ch) + MAX_MANA;
  
  act("&11$n&15's &11golden&15 hair grows down past their back, there eyes turn &09devilish&15 and they are covered in a &11glowing&15 aura!&00", TRUE, ch, 0, 0, TO_ROOM);

  act("&15Your &11golden&15 hair grows down past your back, and your eyes turn &09devilish&15 as you are covered in a &11glowing&15 aura!&00", TRUE, ch, 0, 0, TO_CHAR);
return;
  }
/*-------------------------------------------------------------------------------------*/



}



ACMD(do_stealth)
{
	
  struct affected_type af;
  if (!GET_SKILL(ch, SKILL_STEALTH)) {
  send_to_char("You can't do that!\r\n", ch);
  return;
  }
 else
  af.type = SKILL_SWIFTNESS;
  af.duration = GET_LEVEL(ch);
  af.modifier = 0;
  af.location = APPLY_NONE;
  af.bitvector = AFF_SWIFTNESS;
  affect_to_char(ch, &af);

  SET_BIT(AFF_FLAGS(ch), AFF_HIDE);
 act("&11$n&15's skin color flickers as they fade into the surroundings.", TRUE, ch, 0, 0, TO_ROOM);
  act("&15You pause for a moment and meld to your surroundings.&00", TRUE, ch, 0, 0, TO_CHAR);
 
}


ACMD(do_transform)	
{    
	
  int MAX_MANA = 0, MAX_HIT = 0;
    
    one_argument(argument, arg);
    if (!IS_icer(ch))
    {
      act("Your not an icer!", TRUE, ch, 0, 0, TO_CHAR);
      return;
    } 
   else if (!*argument && IS_icer(ch))
    { 
act("        &10o&12_&12-------------------------&12_&10o&00"
"         &12|   &12      Icer Forms&00      &12|&00"
"        &10o&12_&12-------------------------&12_&10o&00"
"         &12|&10You can do the following:&12|&00"
"         &12|&12-------------------------&12|&00"
"         &12|&15Stage:  Power Level Req.:&12|&00 ", TRUE, ch, 0, 0, TO_CHAR);
act("         &12| &10First       &14800000&00      &12|&00", TRUE, ch, 0, 0, TO_CHAR);
act("         &12| &10Second      &141600000&00      &12|&00", TRUE, ch, 0, 0, TO_CHAR);
act("         &12| &10Third       &143500000&00      &12|&00", TRUE, ch, 0, 0, TO_CHAR);
act("         &12| &10Fourth      &145000000&00     &12|&00", TRUE, ch, 0, 0, TO_CHAR);
act("        &10o&12_&12-------------------------&12_&10o&00", TRUE, ch, 0, 0, TO_CHAR);
return;
}     

/*------------------  Checks to see if already in that stage     -----------------*/

if (!str_cmp(arg,"second") && !PRF_FLAGGED(ch, PRF_TR1)) {
  act("&15You can't go straight to that form!&00", TRUE, ch, 0, 0, TO_CHAR);
  return;
  }

if (!str_cmp(arg,"third") && !PRF_FLAGGED(ch, PRF_TR2)) {
  act("&15You can't go straight to that form!&00", TRUE, ch, 0, 0, TO_CHAR);
  return;
  }

if (!str_cmp(arg,"fourth") && !PRF_FLAGGED(ch, PRF_TR3)) {
  act("&15You can't go straight to that form!&00", TRUE, ch, 0, 0, TO_CHAR);
  return;
  }
/*-------------------------------------------------------------------------------------*/
/*----------------------------------  Reverting  --------------------------------------*/

if (!str_cmp(arg,"revert") && PRF_FLAGGED(ch, PRF_TR4)) {
     REMOVE_BIT(PRF_FLAGS(ch), PRF_TR1);
     REMOVE_BIT(PRF_FLAGS(ch), PRF_TR2);
     REMOVE_BIT(PRF_FLAGS(ch), PRF_TR3);
     REMOVE_BIT(PRF_FLAGS(ch), PRF_TR4);
    
  MAX_HIT = number(25000, 25000);
  MAX_MANA = number(25000, 25000);
  
  GET_MAX_HIT(ch) = GET_MAX_HIT(ch) - MAX_HIT;
  GET_MAX_MANA(ch) = GET_MAX_MANA(ch) - MAX_MANA;
  act("&11$n&15's power drops as they revert to there normal form.&00.", TRUE, ch, 0, 0, TO_ROOM);
  act("&15You feel much weaker as you revert to normal form.&00", TRUE, ch, 0, 0, TO_CHAR);
  return;
  }


else if (!str_cmp(arg,"revert") && PRF_FLAGGED(ch, PRF_TR3)) {
     REMOVE_BIT(PRF_FLAGS(ch), PRF_TR1);
     REMOVE_BIT(PRF_FLAGS(ch), PRF_TR2);
     REMOVE_BIT(PRF_FLAGS(ch), PRF_TR3);
    
  MAX_HIT = number(15000, 15000);
  MAX_MANA = number(15000, 15000);
  
  GET_MAX_HIT(ch) = GET_MAX_HIT(ch) - MAX_HIT;
  GET_MAX_MANA(ch) = GET_MAX_MANA(ch) - MAX_MANA;
  act("&11$n&15's power drops as they revert to there normal form.&00.", TRUE, ch, 0, 0, TO_ROOM);
  act("&15You feel much weaker as you revert to normal form.&00", TRUE, ch, 0, 0, TO_CHAR);
  return;
  }

else if (!str_cmp(arg,"revert") && PRF_FLAGGED(ch, PRF_TR2)) {
     REMOVE_BIT(PRF_FLAGS(ch), PRF_TR1);
     REMOVE_BIT(PRF_FLAGS(ch), PRF_TR2);
    
  MAX_HIT = number(10000, 10000);
  MAX_MANA = number(10000, 10000);
  
  GET_MAX_HIT(ch) = GET_MAX_HIT(ch) - MAX_HIT;
  GET_MAX_MANA(ch) = GET_MAX_MANA(ch) - MAX_MANA;
  act("&11$n&15's power drops as they revert to there normal form.&00.", TRUE, ch, 0, 0, TO_ROOM);
  act("&15You feel much weaker as you revert to normal form.&00", TRUE, ch, 0, 0, TO_CHAR);
  return;
}
else if (!str_cmp(arg,"revert") && PRF_FLAGGED(ch, PRF_TR1)) {
     REMOVE_BIT(PRF_FLAGS(ch), PRF_TR1);
    
  MAX_HIT = number(5000, 5000);
  MAX_MANA = number(5000, 5000);
  
  GET_MAX_HIT(ch) = GET_MAX_HIT(ch) - MAX_HIT;
  GET_MAX_MANA(ch) = GET_MAX_MANA(ch) - MAX_MANA;
  act("&11$n&15's power drops as they revert to there normal form.&00.", TRUE, ch, 0, 0, TO_ROOM);
  act("&15You feel much weaker as you revert to normal form.&00", TRUE, ch, 0, 0, TO_CHAR);
  return;
  }

/*-------------------------------------------------------------------------------------*/
/*------------------------------------ TR 1 ----------------------------------------- */
/*-------------------------------------------------------------------------------------*/

if (!str_cmp(arg,"first") && PRF_FLAGGED(ch, PRF_TR1)) {
  act("&15Your already in that form!&00", TRUE, ch, 0, 0, TO_CHAR);
  return;
  }

if (!str_cmp(arg,"first") && GET_STR(ch)*2+GET_MANA(ch)*GET_LEVEL(ch)+GET_DAMROLL(ch)<= 800000) {
  act("&15You do not have the power to attain that form!&00", TRUE, ch, 0, 0, TO_CHAR);
  return;
  } 

 if (!str_cmp(arg,"first") && GET_STR(ch)*2+GET_MANA(ch)*GET_LEVEL(ch)+GET_DAMROLL(ch)>= 800000) {
     SET_BIT(PRF_FLAGS(ch), PRF_TR1);
     
  MAX_HIT = number(5000, 5000);
  MAX_MANA = number(5000, 5000);
  
  GET_MAX_HIT(ch) = GET_MAX_HIT(ch) + MAX_HIT;
  GET_MAX_MANA(ch) = GET_MAX_MANA(ch) + MAX_MANA;
  
  act("&11$n&14 kneels over as they grow in a mass of energy and &12horns&14 protrude from the top of $s skull!&00", TRUE, ch, 0, 0, TO_ROOM);

  act("&14You kneel over as you grow to a large mass!&00", TRUE, ch, 0, 0, TO_CHAR);
return;
  }
/*-------------------------------------------------------------------------------------*/
/*------------------------------------ TR 2 ----------------------------------------- */
/*-------------------------------------------------------------------------------------*/

if (!str_cmp(arg,"second") && PRF_FLAGGED(ch, PRF_TR2)) {
  act("&15Your already in that form!&00", TRUE, ch, 0, 0, TO_CHAR);
  return;
  }

if (!str_cmp(arg,"second") && GET_STR(ch)*2+GET_MANA(ch)*GET_LEVEL(ch)+GET_DAMROLL(ch)<= 1600000) {
  act("&15You do not have the power to attain that form!&00", TRUE, ch, 0, 0, TO_CHAR);
  return;
  } 

 if (!str_cmp(arg,"second") && GET_STR(ch)*2+GET_MANA(ch)*GET_LEVEL(ch)+GET_DAMROLL(ch)>= 1600000) {
     SET_BIT(PRF_FLAGS(ch), PRF_TR2);
     
  MAX_HIT = number(5000, 5000);
  MAX_MANA = number(5000, 5000);
  
  GET_MAX_HIT(ch) = GET_MAX_HIT(ch) + MAX_HIT;
  GET_MAX_MANA(ch) = GET_MAX_MANA(ch) + MAX_MANA;
  
  act("&11$n&14's head grows larger protruding many &12horns&14 and $s body tones down in size as they transform!&00", TRUE, ch, 0, 0, TO_ROOM);

  act("&14You begin to shrink slightly and your head begins to protrude many horns!.&00", TRUE, ch, 0, 0, TO_CHAR);
return;
  }

/*-------------------------------------------------------------------------------------*/

/*-------------------------------------------------------------------------------------*/
/*------------------------------------ TR 3 ----------------------------------------- */
/*-------------------------------------------------------------------------------------*/

if (!str_cmp(arg,"third") && PRF_FLAGGED(ch, PRF_TR3)) {
  act("&15Your already in that form!&00", TRUE, ch, 0, 0, TO_CHAR);
  return;
  }

if (!str_cmp(arg,"third") && GET_STR(ch)*2+GET_MANA(ch)*GET_LEVEL(ch)+GET_DAMROLL(ch)<= 3500000) {
  act("&14You do not have the power to attain that form!&00", TRUE, ch, 0, 0, TO_CHAR);
  return;
  } 

 if (!str_cmp(arg,"third") && GET_STR(ch)*2+GET_MANA(ch)*GET_LEVEL(ch)+GET_DAMROLL(ch)>= 3500000) {
     SET_BIT(PRF_FLAGS(ch), PRF_TR3);
     
  MAX_HIT = number(5000, 5000);
  MAX_MANA = number(5000, 5000);
  
  GET_MAX_HIT(ch) = GET_MAX_HIT(ch) + MAX_HIT;
  GET_MAX_MANA(ch) = GET_MAX_MANA(ch) + MAX_MANA;
  
  act("&11$n&14's body begins to shrink in a mass of energy to become more sleek powerful!&00", TRUE, ch, 0, 0, TO_ROOM);

  act("&14Your body begins to shrink in a mass of energy to become more sleek and powerful!&00", TRUE, ch, 0, 0, TO_CHAR);
return;
  }
/*-------------------------------------------------------------------------------------*/
/*------------------------------------ TR 4 ----------------------------------------- */
/*-------------------------------------------------------------------------------------*/

if (!str_cmp(arg,"fourth") && PRF_FLAGGED(ch, PRF_TR4)) {
  act("&15Your already in that form!&00", TRUE, ch, 0, 0, TO_CHAR);
  return;
  }

if (!str_cmp(arg,"fourth") && GET_STR(ch)*2+GET_MANA(ch)*GET_LEVEL(ch)+GET_DAMROLL(ch)<= 5000000) {
  act("&15You do not have the power to attain that form!&00", TRUE, ch, 0, 0, TO_CHAR);
  return;
  } 

 if (!str_cmp(arg,"fourth") && GET_STR(ch)*2+GET_MANA(ch)*GET_LEVEL(ch)+GET_DAMROLL(ch)>= 5000000) {
     SET_BIT(PRF_FLAGS(ch), PRF_TR4);
     
  MAX_HIT = number(10000, 10000);
  MAX_MANA = number(10000, 10000);
  
  GET_MAX_HIT(ch) = GET_MAX_HIT(ch) + MAX_HIT;
  GET_MAX_MANA(ch) = GET_MAX_MANA(ch) + MAX_MANA;
  
  act("&11$n&14's body begins ripple with muscles as they powerup to a new transformation level!&00", TRUE, ch, 0, 0, TO_ROOM);

  act("&14Your body begins to ripple with muscles as you reach a new transformation!&00", TRUE, ch, 0, 0, TO_CHAR);
return;
  }
/*-------------------------------------------------------------------------------------*/



}


ACMD(do_spar)
{
    one_argument(argument, arg);	
  
  if (PRF_FLAGGED(ch, PRF_CAMP)) {		
      send_to_char("You can't do this while camped!\r\n", ch);
      return;
    }  

  if (GET_LEVEL(ch) <=1) {
  send_to_char("You can't spar right away.\r\n", ch);
  return;
    }

else if (!*argument)
    { 
act("&09Sparing Commands&00", TRUE, ch, 0, 0, TO_CHAR);
act("&10----------------&00", TRUE, ch, 0, 0, TO_CHAR);
act("spar &09ready&00", TRUE, ch, 0, 0, TO_CHAR);
act("spar &09stop&00", TRUE, ch, 0, 0, TO_CHAR);
act("&09sparkick&00 (person)", TRUE, ch, 0, 0, TO_CHAR);
act("&09sparpunch&00 (person)", TRUE, ch, 0, 0, TO_CHAR);
act("&09sparelbow&00 (person)", TRUE, ch, 0, 0, TO_CHAR);
act("&09sparknee&00 (person)", TRUE, ch, 0, 0, TO_CHAR);
act("&09sparkiblast&00 (person)", TRUE, ch, 0, 0, TO_CHAR);
act("spar &09fly&00", TRUE, ch, 0, 0, TO_CHAR);
act("spar &09land&00", TRUE, ch, 0, 0, TO_CHAR);
act("spar &09block&00", TRUE, ch, 0, 0, TO_CHAR);
act("spar &09relax&00", TRUE, ch, 0, 0, TO_CHAR);
return;
} 
/*-----------------------------         Start       -----------------------------------*/
 if (!str_cmp(arg,"ready") && !AFF_FLAGGED(ch, AFF_SPAR)) {
  SET_BIT(AFF_FLAGS(ch), AFF_SPAR);
 act("$n moves into a sparing stance.", TRUE, ch, 0, 0, TO_ROOM);
  act("You move into a sparing stance.", TRUE, ch, 0, 0, TO_CHAR);
  return;
}
 else if (!str_cmp(arg,"ready") && AFF_FLAGGED(ch, AFF_SPAR)) {
  act("Your already in a sparing stance.", TRUE, ch, 0, 0, TO_CHAR);
  return;
}
/*-------------------------------------------------------------------------------------*/
  if (!str_cmp(arg,"ready") && !IS_SET(ROOM_FLAGS(ch->in_room), ROOM_DOJO)) {
      send_to_char("Your not in a dojo!\r\n", ch);
      return;
    }
    if (!str_cmp(arg,"land") && !IS_SET(ROOM_FLAGS(ch->in_room), ROOM_DOJO)) {
      send_to_char("Your not in a dojo!\r\n", ch);
      return;
    }
      if (!str_cmp(arg,"fly") && !IS_SET(ROOM_FLAGS(ch->in_room), ROOM_DOJO)) {
      send_to_char("Your not in a dojo!\r\n", ch);
      return;
    }
      if (!str_cmp(arg,"block") && !IS_SET(ROOM_FLAGS(ch->in_room), ROOM_DOJO)) {
      send_to_char("Your not in a dojo!\r\n", ch);
      return;
    }
/*-----------------------------------------Stop----------------------------------------*/
 if (!str_cmp(arg,"stop")) {
  REMOVE_BIT(AFF_FLAGS(ch), AFF_SPAR);
 act("$n moves out of their sparing stance.", TRUE, ch, 0, 0, TO_ROOM);
  act("You move out of your sparing stance.", TRUE, ch, 0, 0, TO_CHAR);
  return;
}
 if (!str_cmp(arg,"stop") && !AFF_FLAGGED(ch, AFF_SPAR)) {
  REMOVE_BIT(AFF_FLAGS(ch), AFF_SPAR);
  act("You aren't in a sparing stance!", TRUE, ch, 0, 0, TO_CHAR);
  return;
}
/*--------------------------------  Not sparing checks  --------------------------------*/
if (!str_cmp(arg,"block") && !AFF_FLAGGED(ch, AFF_SPAR)) {		
      send_to_char("Your not in a sparing stance!\r\n", ch);
      return;
    }
if (!str_cmp(arg,"land") && !AFF_FLAGGED(ch, AFF_SPAR)) {		
      send_to_char("Your not in a sparing stance!\r\n", ch);
      return;
    }
if (!str_cmp(arg,"fly") && !AFF_FLAGGED(ch, AFF_SPAR)) {		
      send_to_char("Your not in a sparing stance!\r\n", ch);
      return;
    }
/*--------------------------------------Flight-----------------------------------------*/
/*Fly*/
  if (!str_cmp(arg,"fly") && AFF_FLAGGED(ch, AFF_SPAR) && !AFF_FLAGGED(ch, AFF_SFLY)) {
  SET_BIT(AFF_FLAGS(ch), AFF_SFLY);
 act("$n flys up into the air.", TRUE, ch, 0, 0, TO_ROOM);
  act("You fly up into the air.", TRUE, ch, 0, 0, TO_CHAR);
  return;
}
 else if (!str_cmp(arg,"fly") && !AFF_FLAGGED(ch, AFF_SPAR)) {
  act("You can't do that if your not sparing.", TRUE, ch, 0, 0, TO_CHAR);
  return;
}
 else if (!str_cmp(arg,"fly") && AFF_FLAGGED(ch, AFF_SFLY)) {
  act("You are already flying!", TRUE, ch, 0, 0, TO_CHAR);
  return;
}
/*Land*/
 if (!str_cmp(arg,"land") && AFF_FLAGGED(ch, AFF_SPAR) && AFF_FLAGGED(ch, AFF_SFLY)) {
  REMOVE_BIT(AFF_FLAGS(ch), AFF_SFLY);
  act("$n flys down and lands on the ground.", TRUE, ch, 0, 0, TO_ROOM);
  act("You fly down and land on the ground.", TRUE, ch, 0, 0, TO_CHAR);
  return;
}
 else if (!str_cmp(arg,"land") && !AFF_FLAGGED(ch, AFF_SFLY)) {
  act("You aren't flying!", TRUE, ch, 0, 0, TO_CHAR);
  return;
}
 else if (!str_cmp(arg,"land") && !AFF_FLAGGED(ch, AFF_SPAR)) {
  act("You can't do that if your not sparing.", TRUE, ch, 0, 0, TO_CHAR);
  return;
}
/*-------------------------------------------------------------------------------------*/
/*Blocking*/
 if (!str_cmp(arg,"block") && AFF_FLAGGED(ch, AFF_SPAR) && !AFF_FLAGGED(ch, AFF_SBLOCK)) {
  SET_BIT(AFF_FLAGS(ch), AFF_SBLOCK);
  act("You prepare to block the next attack.", TRUE, ch, 0, 0, TO_CHAR);
  return;
}
 else if (!str_cmp(arg,"block") && AFF_FLAGGED(ch, AFF_SBLOCK)) {
  act("You are already preparing to block!", TRUE, ch, 0, 0, TO_CHAR);
  return;
}
 else if (!str_cmp(arg,"block") && !AFF_FLAGGED(ch, AFF_SPAR)) {
  act("You can't do that if your not sparing.", TRUE, ch, 0, 0, TO_CHAR);
  return;
}
 if (!str_cmp(arg,"relax") && AFF_FLAGGED(ch, AFF_SPAR) && AFF_FLAGGED(ch, AFF_SBLOCK)) {
  REMOVE_BIT(AFF_FLAGS(ch), AFF_SBLOCK);
  act("You lower your defense.", TRUE, ch, 0, 0, TO_CHAR);
  return;
}
 else if (!str_cmp(arg,"relax") && !AFF_FLAGGED(ch, AFF_SBLOCK)) {
  act("You are not preparing to block!", TRUE, ch, 0, 0, TO_CHAR);
  return;
}
 else if (!str_cmp(arg,"relax") && !AFF_FLAGGED(ch, AFF_SPAR)) {
  act("You can't do that if your not sparing.", TRUE, ch, 0, 0, TO_CHAR);
  return;
}

/*-------------------------------------------------------------------------------------*/
}

ACMD(do_sparkick)
{
	int is_altered = FALSE; 
        int num_levels = 0; 
        int MOVE = 0, EXP = 0;
	struct char_data * vict;
        one_argument(argument, arg);
        
   if (!AFF_FLAGGED(ch, AFF_SPAR)) {		
      send_to_char("Your not in a sparing stance!\r\n", ch);
      return;
    }
   if (!IS_SET(ROOM_FLAGS(ch->in_room), ROOM_DOJO)) {
      send_to_char("Your not in a dojo!\r\n", ch);
      return;
    }   	
   if (GET_MOVE(ch) <= 10) {
      send_to_char("Your too weak to spar anymore!\r\n", ch);
      return;
    } 
/*-------------------------------------------------------------------------------------*/
if (!IS_NPC(ch) && GET_LEVEL(ch) < LVL_IMMORT && GET_EXP(ch) >= GET_LEVEL(ch)*2000) {     
GET_LEVEL(ch) += 1;                                                             
GET_EXP(ch) = 1;                                                                
num_levels++;                                                                   advance_level(ch);                                                              
is_altered = TRUE;                                                            
send_to_char("You can feel your body strenghten as you continue sparing!\r\n", ch);
} 
/*--------------------------Spar-Kick "Failures"---------------------------------------*/
   if (!(vict = get_char_room_vis(ch, arg))) {
      send_to_char("Spar-Kick who?\r\n", ch);
      return;
    } 
   if (vict == ch) {
    send_to_char("Come on now, that's rather stupid!\r\n", ch);
    return;
    }
   if (vict && !AFF_FLAGGED(vict, AFF_SPAR)) {		
      send_to_char("They don't want to spar!\r\n", ch);
      return;
    }
   if (vict && AFF_FLAGGED(ch, AFF_SBLOCK)) {		
      send_to_char("Your too busy preparing to block thier attack!\r\n", ch);
      return;
    } 
   if (vict && AFF_FLAGGED(vict, AFF_SFLY) && !AFF_FLAGGED(ch, AFF_SFLY)) {		
      send_to_char("You can't hit them from down here!\r\n", ch);
      return;
    }
   if (vict && !AFF_FLAGGED(vict, AFF_SFLY) && AFF_FLAGGED(ch, AFF_SFLY)) {		
      send_to_char("You can't hit them from up here!\r\n", ch);
      return;
    }
   if (vict && AFF_FLAGGED(vict, AFF_SBLOCK)) {		
  EXP = number(GET_LEVEL(ch)*10, GET_LEVEL(ch)*10);
  MOVE = number(5, 10);
  GET_EXP(ch) = GET_EXP(ch) + EXP;
  GET_MOVE(ch) = GET_MOVE(ch) - MOVE;
  
  GET_EXP(vict) = GET_EXP(vict) + EXP;
  GET_MOVE(vict) = GET_MOVE(vict) - MOVE;
  
  act("You throw a kick at $N who easily blocks it.", FALSE, ch, 0, vict, TO_CHAR);
  act("$n throws a kick at $N who easily blocks it..", TRUE, ch, 0, vict, TO_NOTVICT);
  act("As $n rears back you put your arm up and block thier kick..&00", FALSE, ch, 0, vict, TO_VICT);  
  WAIT_STATE(ch, PULSE_VIOLENCE * 2);
      return;     
    }
  else if (vict) {		
  EXP = number(GET_LEVEL(ch)*30, GET_LEVEL(ch)*30);
  MOVE = number(5, 10);
  GET_EXP(ch) = GET_EXP(ch) + EXP;
  GET_MOVE(ch) = GET_MOVE(ch) - MOVE;
  
  act("You throw a kick at $N hitting directly!", FALSE, ch, 0, vict, TO_CHAR);
  act("$n throws a kick at hitting $N!", TRUE, ch, 0, vict, TO_NOTVICT);
  act("$n rears back and hits you dead on with a kick!&00", FALSE, ch, 0, vict, TO_VICT);  
  WAIT_STATE(ch, PULSE_VIOLENCE * 2);
      return;     
    } 
}
ACMD(do_sparpunch)
{
	int is_altered = FALSE; 
        int num_levels = 0; 
        int MOVE = 0, EXP = 0;
	struct char_data * vict;
        one_argument(argument, arg);
        
   if (!AFF_FLAGGED(ch, AFF_SPAR)) {		
      send_to_char("Your not in a sparing stance!\r\n", ch);
      return;
    }
   if (!IS_SET(ROOM_FLAGS(ch->in_room), ROOM_DOJO)) {
      send_to_char("Your not in a dojo!\r\n", ch);
      return;
    } 
   if (GET_MOVE(ch) <= 10) {
      send_to_char("Your too weak to spar anymore!\r\n", ch);
      return;
    } 
/*-------------------------------------------------------------------------------------*/
if (!IS_NPC(ch) && GET_LEVEL(ch) < LVL_IMMORT && GET_EXP(ch) >= GET_LEVEL(ch)*2000) {     
GET_LEVEL(ch) += 1;                                                             
GET_EXP(ch) = 1;                                                                
num_levels++;                                                                   advance_level(ch);                                                              
is_altered = TRUE;                                                            
send_to_char("You can feel your body strenghten as you continue sparing!\r\n", ch);
} 
/*--------------------------Spar-Kick "Failures"---------------------------------------*/
   if (!(vict = get_char_room_vis(ch, arg))) {
      send_to_char("Spar-Punch who?\r\n", ch);
      return;
    } 
    if (vict == ch) {
    send_to_char("Come on now, that's rather stupid!\r\n", ch);
    return;
    }
   if (vict && !AFF_FLAGGED(vict, AFF_SPAR)) {		
      send_to_char("They don't want to spar!\r\n", ch);
      return;
    }
   if (vict && AFF_FLAGGED(ch, AFF_SBLOCK)) {		
      send_to_char("Your too busy preparing to block thier attack!\r\n", ch);
      return;
    } 
   if (vict && AFF_FLAGGED(vict, AFF_SFLY) && !AFF_FLAGGED(ch, AFF_SFLY)) {		
      send_to_char("You can't hit them from down here!\r\n", ch);
      return;
    }
   if (vict && !AFF_FLAGGED(vict, AFF_SFLY) && AFF_FLAGGED(ch, AFF_SFLY)) {		
      send_to_char("You can't hit them from up here!\r\n", ch);
      return;
    }
   if (vict && AFF_FLAGGED(vict, AFF_SBLOCK)) {		
  EXP = number(GET_LEVEL(ch)*10, GET_LEVEL(ch)*10);
  MOVE = number(5, 10);
  GET_EXP(ch) = GET_EXP(ch) + EXP;
  GET_MOVE(ch) = GET_MOVE(ch) - MOVE;
  
  GET_EXP(vict) = GET_EXP(vict) + EXP;
  GET_MOVE(vict) = GET_MOVE(vict) - MOVE;
  
  act("You throw a punch at $N who easily blocks it.", FALSE, ch, 0, vict, TO_CHAR);
  act("$n throws a punch at $N who easily blocks it..", TRUE, ch, 0, vict, TO_NOTVICT);
  act("As $n rears back you put your arm up and block thier punch.&00", FALSE, ch, 0, vict, TO_VICT);  
  WAIT_STATE(ch, PULSE_VIOLENCE * 2);
      return;     
    }
  else if (vict) {		
  EXP = number(GET_LEVEL(ch)*30, GET_LEVEL(ch)*30);
  MOVE = number(5, 10);
  GET_EXP(ch) = GET_EXP(ch) + EXP;
  GET_MOVE(ch) = GET_MOVE(ch) - MOVE;
  
  act("You throw a punch at $N hitting directly!", FALSE, ch, 0, vict, TO_CHAR);
  act("$n throws a punch at hitting $N!", TRUE, ch, 0, vict, TO_NOTVICT);
  act("$n rears back and hits you dead on with a punch!&00", FALSE, ch, 0, vict, TO_VICT);  
  WAIT_STATE(ch, PULSE_VIOLENCE * 2);
      return;     
    } 

}

ACMD(do_sparknee)
{
	int is_altered = FALSE; 
        int num_levels = 0; 
        int MOVE = 0, EXP = 0;
	struct char_data * vict;
        one_argument(argument, arg);
        
   if (!AFF_FLAGGED(ch, AFF_SPAR)) {		
      send_to_char("Your not in a sparing stance!\r\n", ch);
      return;
    }
   if (!IS_SET(ROOM_FLAGS(ch->in_room), ROOM_DOJO)) {
      send_to_char("Your not in a dojo!\r\n", ch);
      return;
    } 
   if (GET_MOVE(ch) <= 10) {
      send_to_char("Your too weak to spar anymore!\r\n", ch);
      return;
    } 
/*-------------------------------------------------------------------------------------*/
if (!IS_NPC(ch) && GET_LEVEL(ch) < LVL_IMMORT && GET_EXP(ch) >= GET_LEVEL(ch)*2000) {     
GET_LEVEL(ch) += 1;                                                             
GET_EXP(ch) = 1;                                                                
num_levels++;                                                                   advance_level(ch);                                                              
is_altered = TRUE;                                                            
send_to_char("You can feel your body strenghten as you continue sparing!\r\n", ch);
} 
/*--------------------------Spar-Kick "Failures"---------------------------------------*/
   if (!(vict = get_char_room_vis(ch, arg))) {
      send_to_char("Spar-Knee who?\r\n", ch);
      return;
    } 
   if (vict == ch) {
    send_to_char("Come on now, that's rather stupid!\r\n", ch);
    return;
    }
   if (vict && !AFF_FLAGGED(vict, AFF_SPAR)) {		
      send_to_char("They don't want to spar!\r\n", ch);
      return;
    }
   if (vict && AFF_FLAGGED(ch, AFF_SBLOCK)) {		
      send_to_char("Your too busy preparing to block thier attack!\r\n", ch);
      return;
    } 
   if (vict && AFF_FLAGGED(vict, AFF_SFLY) && !AFF_FLAGGED(ch, AFF_SFLY)) {		
      send_to_char("You can't hit them from down here!\r\n", ch);
      return;
    }
   if (vict && !AFF_FLAGGED(vict, AFF_SFLY) && AFF_FLAGGED(ch, AFF_SFLY)) {		
      send_to_char("You can't hit them from up here!\r\n", ch);
      return;
    }
   if (vict && AFF_FLAGGED(vict, AFF_SBLOCK)) {		
      send_to_char("You can't hit them from up here!\r\n", ch);
  EXP = number(GET_LEVEL(ch)*10, GET_LEVEL(ch)*10);
  MOVE = number(5, 10);
  GET_EXP(ch) = GET_EXP(ch) + EXP;
  GET_MOVE(ch) = GET_MOVE(ch) - MOVE;
  
  GET_EXP(vict) = GET_EXP(vict) + EXP;
  GET_MOVE(vict) = GET_MOVE(vict) - MOVE;
  
  act("You thrust your knee at $N who easily blocks it.", FALSE, ch, 0, vict, TO_CHAR);
  act("$n slams thier knee into $N who easily blocks it..", TRUE, ch, 0, vict, TO_NOTVICT);
  act("As $n rears back you put your arm up and block thier knee.&00", FALSE, ch, 0, vict, TO_VICT);  
  WAIT_STATE(ch, PULSE_VIOLENCE * 2);
      return;     
    }
  else if (vict) {		
  EXP = number(GET_LEVEL(ch)*25, GET_LEVEL(ch)*25);
  MOVE = number(5, 10);
  GET_EXP(ch) = GET_EXP(ch) + EXP;
  GET_MOVE(ch) = GET_MOVE(ch) - MOVE;
  
  
  act("You slam your knee into $N!", FALSE, ch, 0, vict, TO_CHAR);
  act("$n slams thier knee into $N!", TRUE, ch, 0, vict, TO_NOTVICT);
  act("$n rears back and knees you in the stomach!&00", FALSE, ch, 0, vict, TO_VICT);  
  WAIT_STATE(ch, PULSE_VIOLENCE * 2);
      return;     
    } 

}

ACMD(do_sparelbow)
{
	int is_altered = FALSE; 
        int num_levels = 0; 
        int MOVE = 0, EXP = 0;
	struct char_data * vict;
        one_argument(argument, arg);
        
   if (!AFF_FLAGGED(ch, AFF_SPAR)) {		
      send_to_char("Your not in a sparing stance!\r\n", ch);
      return;
    }
   if (!IS_SET(ROOM_FLAGS(ch->in_room), ROOM_DOJO)) {
      send_to_char("Your not in a dojo!\r\n", ch);
      return;
    } 
   if (GET_MOVE(ch) <= 10) {
      send_to_char("Your too weak to spar anymore!\r\n", ch);
      return;
    } 
/*-------------------------------------------------------------------------------------*/
if (!IS_NPC(ch) && GET_LEVEL(ch) < LVL_IMMORT && GET_EXP(ch) >= GET_LEVEL(ch)*2000) {     
GET_LEVEL(ch) += 1;                                                             
GET_EXP(ch) = 1;                                                                
num_levels++;                                                                   advance_level(ch);                                                              
is_altered = TRUE;                                                            
send_to_char("You can feel your body strenghten as you continue sparing!\r\n", ch);
} 
/*--------------------------Spar-Kick "Failures"---------------------------------------*/
   if (!(vict = get_char_room_vis(ch, arg))) {
      send_to_char("Spar-Elbow who?\r\n", ch);
      return;
    } 
   if (vict == ch) {
    send_to_char("Come on now, that's rather stupid!\r\n", ch);
    return;
    }
   if (vict && !AFF_FLAGGED(vict, AFF_SPAR)) {		
      send_to_char("They don't want to spar!\r\n", ch);
      return;
    }
   if (vict && AFF_FLAGGED(ch, AFF_SBLOCK)) {		
      send_to_char("Your too busy preparing to block thier attack!\r\n", ch);
      return;
    } 
   if (vict && AFF_FLAGGED(vict, AFF_SFLY) && !AFF_FLAGGED(ch, AFF_SFLY)) {		
      send_to_char("You can't hit them from down here!\r\n", ch);
      return;
    }
   if (vict && !AFF_FLAGGED(vict, AFF_SFLY) && AFF_FLAGGED(ch, AFF_SFLY)) {		
      send_to_char("You can't hit them from up here!\r\n", ch);
      return;
    }
   if (vict && AFF_FLAGGED(vict, AFF_SBLOCK)) {		
  EXP = number(GET_LEVEL(ch)*10, GET_LEVEL(ch)*10);
  MOVE = number(5, 10);
  GET_EXP(ch) = GET_EXP(ch) + EXP;
  GET_MOVE(ch) = GET_MOVE(ch) - MOVE;
  
  GET_EXP(vict) = GET_EXP(vict) + EXP;
  GET_MOVE(vict) = GET_MOVE(vict) - MOVE;
  
  act("You slam your elbow into $N who easily blocks it.", FALSE, ch, 0, vict, TO_CHAR);
  act("$n slams thier elbow into $N who easily blocks it.", TRUE, ch, 0, vict, TO_NOTVICT);
  act("As $n rears back you put your arm up and block thier elbow.&00", FALSE, ch, 0, vict, TO_VICT);  
  WAIT_STATE(ch, PULSE_VIOLENCE * 2);
      return;     
    }
  else if (vict) {		
  EXP = number(GET_LEVEL(ch)*25, GET_LEVEL(ch)*25);
  MOVE = number(5, 10);
  GET_EXP(ch) = GET_EXP(ch) + EXP;
  GET_MOVE(ch) = GET_MOVE(ch) - MOVE;
  
  act("You slam your elbow into $N's ribs!", FALSE, ch, 0, vict, TO_CHAR);
  act("$n throws a kick at hitting $N!", TRUE, ch, 0, vict, TO_NOTVICT);
  act("$n slams thier elbow into your ribs!&00", FALSE, ch, 0, vict, TO_VICT);  
  WAIT_STATE(ch, PULSE_VIOLENCE * 2);
      return;     
    } 
}

ACMD(do_sparkiblast)
{
	int is_altered = FALSE; 
        int num_levels = 0; 
        int MANA = 0, EXP = 0;
	struct char_data * vict;
        one_argument(argument, arg);
        
   if (!AFF_FLAGGED(ch, AFF_SPAR)) {		
      send_to_char("Your not in a sparing stance!\r\n", ch);
      return;
    }
   if (!IS_SET(ROOM_FLAGS(ch->in_room), ROOM_DOJO)) {
      send_to_char("Your not in a dojo!\r\n", ch);
      return;
    }
   if (GET_MANA(ch) <= 100) {
      send_to_char("Your too weak to spar anymore!\r\n", ch);
      return;
    } 
/*-------------------------------------------------------------------------------------*/
if (!IS_NPC(ch) && GET_LEVEL(ch) < LVL_IMMORT && GET_EXP(ch) >= GET_LEVEL(ch)*2000) {     
GET_LEVEL(ch) += 1;                                                             
GET_EXP(ch) = 1;                                                                
num_levels++;                                                                   advance_level(ch);                                                              
is_altered = TRUE;                                                            
send_to_char("You can feel your body strenghten as you continue sparing!\r\n", ch);
} 
/*--------------------------Spar-Kick "Failures"---------------------------------------*/
   if (!(vict = get_char_room_vis(ch, arg))) {
      send_to_char("Spar-KiBlast who?\r\n", ch);
      return;
    }     
    if (vict == ch) {
    send_to_char("Come on now, that's rather stupid!\r\n", ch);
    return;
    }
   if (vict && !AFF_FLAGGED(vict, AFF_SPAR)) {		
      send_to_char("They don't want to spar!\r\n", ch);
      return;
    }
   if (vict && AFF_FLAGGED(ch, AFF_SBLOCK)) {		
      send_to_char("Your too busy preparing to block thier attack!\r\n", ch);
      return;
    } 
   if (vict && AFF_FLAGGED(vict, AFF_SBLOCK)) {		
  EXP = number(GET_LEVEL(ch)*10, GET_LEVEL(ch)*10);
  MANA = 20;
  GET_EXP(ch) = GET_EXP(ch) + EXP;
  GET_MANA(ch) = GET_MANA(ch) - MANA;
  
  GET_EXP(vict) = GET_EXP(vict) + EXP;
  GET_MANA(vict) = GET_MANA(vict) - MANA;
  
  act("You fire a small kiblast at $N who slaps it away.", FALSE, ch, 0, vict, TO_CHAR);
  act("$n fires a small kiblast at $N who slaps it away.", TRUE, ch, 0, vict, TO_NOTVICT);
  act("As $n fires a kiblast you slap it away with the back of your hand.&00", FALSE, ch, 0, vict, TO_VICT);  
  WAIT_STATE(ch, PULSE_VIOLENCE * 2);
      return;     
    }
  else if (vict) {		
  EXP = number(GET_LEVEL(ch)*50, GET_LEVEL(ch)*50);
  MANA = number(100, 100);
  GET_EXP(ch) = GET_EXP(ch) + EXP;
  GET_MANA(ch) = GET_MANA(ch) - MANA;
  
  act("You fire a kiblast hitting $N!", FALSE, ch, 0, vict, TO_CHAR);
  act("$n fires a kiblast, hitting $N!", TRUE, ch, 0, vict, TO_NOTVICT);
  act("$n fires a kiblast hitting you directly!&00", FALSE, ch, 0, vict, TO_VICT);  
  WAIT_STATE(ch, PULSE_VIOLENCE * 2);
      return;     
    } 

}

ACMD(do_jog)	
{    
    one_argument(argument, arg);
     
   if (!*argument) {
    send_to_char("&10Jogging commands:  &00\r\n", ch);
    send_to_char("&09-------------------&00\r\n", ch);
    send_to_char("&15Jog start          &00\r\n", ch);
    send_to_char("&15Jog stop           &00\r\n", ch);
    return;
     }

   if (!str_cmp(arg,"start")) {
    act("You start jogging.", TRUE, ch, 0, 0, TO_CHAR);
    SET_BIT(AFF_FLAGS(ch), AFF_JOG);
    return;
   }
  

   if (!str_cmp(arg,"stop")) {
    act("You stop jogging.", TRUE, ch, 0, 0, TO_CHAR);
    REMOVE_BIT(AFF_FLAGS(ch), AFF_JOG);
    return;
   }
}

ACMD(do_orevert)	
{    
if (PRF_FLAGGED(ch, PRF_OOZARU))              {
REMOVE_BIT(PRF_FLAGS(ch), PRF_OOZARU);
send_to_char("&12Your rage calms down and you begin to slowly shrink as the hair on your body disolves and you pass out on the ground.&00\n\r", ch);
GET_MAX_HIT(ch) -= 10000;
GET_MAX_MANA(ch) -= 10000;
return;
}
else if (!PRF_FLAGGED(ch, PRF_OOZARU)) {
send_to_char("&12Your not in oozaru form!&00\n\r", ch);	
}
}

ACMD(do_charge)	
{    
    one_argument(argument, arg);
     
   if (!*argument) {
    send_to_char("&10Charge - &00\r\n", ch);
    send_to_char("&15Low&00\r\n", ch);
    send_to_char("&15Medium&00\r\n", ch);
    send_to_char("&15High&00\r\n", ch);
    send_to_char("&15Invert&00\r\n", ch);
    return;
}
   if (AFF_FLAGGED(ch, AFF_HALTED))
   {
    send_to_char("You don't have enough time!\r\n", ch);   	
    return;
    }
/*------------------------------------------Invertion failure----------------------------------------*/
   if (!str_cmp(arg,"invert") && !AFF_FLAGGED(ch, AFF_CHARGEH) && !AFF_FLAGGED(ch, AFF_CHARGEM) && !AFF_FLAGGED(ch, AFF_CHARGEL)) {
    act("You are not storing any energy,", TRUE, ch, 0, 0, TO_CHAR);
    return;
   }
/*------------------------------------------Already charged/too High---------------------------------*/
/*Low*/
   if (!str_cmp(arg,"low") && AFF_FLAGGED(ch, AFF_CHARGEL)) {
    act("You've already charge that much energy.", TRUE, ch, 0, 0, TO_CHAR);
    return;
   }
   if (!str_cmp(arg,"medium") && AFF_FLAGGED(ch, AFF_CHARGEM)) {
    act("You've already charge that much energy.", TRUE, ch, 0, 0, TO_CHAR);
    return;
   }
  if (!str_cmp(arg,"low") && AFF_FLAGGED(ch, AFF_CHARGEM)) {
    act("You've already charged more then that much energy.", TRUE, ch, 0, 0, TO_CHAR);
    return;
   }
   if (!str_cmp(arg,"low") && AFF_FLAGGED(ch, AFF_CHARGEH)) {
    act("You've already charged more then that much energy.", TRUE, ch, 0, 0, TO_CHAR);
    return;
   }
   if (!str_cmp(arg,"medium") && AFF_FLAGGED(ch, AFF_CHARGEH)) {
    act("You've already charged more then that much energy.", TRUE, ch, 0, 0, TO_CHAR);
    return;
   }
   if (!str_cmp(arg,"high") && AFF_FLAGGED(ch, AFF_CHARGEH)) {
    act("You've already charge that much energy.", TRUE, ch, 0, 0, TO_CHAR);
    return;
   }
/*------------------------------------------Inverting------------------------------------------------*/
   if (!str_cmp(arg,"invert") && AFF_FLAGGED(ch, AFF_CHARGEH)) {
    act("You absorb the energy you created.", TRUE, ch, 0, 0, TO_CHAR);
    act("$n's energy suddenly dissapears as they absorb it!", TRUE, ch, 0, 0, TO_NOTVICT);
    REMOVE_BIT(AFF_FLAGS(ch), AFF_CHARGEH);
    GET_MANA(ch) +=GET_LEVEL(ch)*3;
    return;
   }
   else if (!str_cmp(arg,"invert") && AFF_FLAGGED(ch, AFF_CHARGEM)) {
    act("You absorb the energy you created.", TRUE, ch, 0, 0, TO_CHAR);
    act("$n's energy suddenly dissapears as they absorb it!", TRUE, ch, 0, 0, TO_NOTVICT);
    REMOVE_BIT(AFF_FLAGS(ch), AFF_CHARGEM);
    GET_MANA(ch) +=GET_LEVEL(ch)*2;
    return;
   }
   else if (!str_cmp(arg,"invert") && AFF_FLAGGED(ch, AFF_CHARGEL)) {
    act("You absorb the energy you created.", TRUE, ch, 0, 0, TO_CHAR);
    act("$n's energy suddenly dissapears as they absorb it!", TRUE, ch, 0, 0, TO_NOTVICT);
    REMOVE_BIT(AFF_FLAGS(ch), AFF_CHARGEL);
    GET_MANA(ch) +=GET_LEVEL(ch);
    return;
   }
/*------------------------------------------Success >:) ---------------------------------------------*/
   if (!str_cmp(arg,"low")) {
    act("You begin charging a little bit of energy into your hands.", TRUE, ch, 0, 0, TO_CHAR);
    act("$n begins flaming with power as they charge a little bit of energy into thier hands!", TRUE, ch, 0, 0, TO_NOTVICT);    
    SET_BIT(AFF_FLAGS(ch), AFF_CHARGEL);
    GET_MANA(ch) -=GET_LEVEL(ch);
    return;
   }
  
   if (!str_cmp(arg,"medium")) {
    act("You begin charging energy into your hands.", TRUE, ch, 0, 0, TO_CHAR);
    act("$n begins flaming with power as they charge some energy into thier hands!", TRUE, ch, 0, 0, TO_NOTVICT);
    SET_BIT(AFF_FLAGS(ch), AFF_CHARGEM);
    REMOVE_BIT(AFF_FLAGS(ch), AFF_CHARGEL);
    GET_MANA(ch) -=GET_LEVEL(ch)*2;
    return;
   }

   if (!str_cmp(arg,"high")) {
    act("You begin charging alot of energy into your hands.", TRUE, ch, 0, 0, TO_CHAR);
    act("$n begins flaming with power as they charge &09a-lot&00 energy into thier hands!", TRUE, ch, 0, 0, TO_NOTVICT);
    SET_BIT(AFF_FLAGS(ch), AFF_CHARGEH);
    REMOVE_BIT(AFF_FLAGS(ch), AFF_CHARGEM);
    GET_MANA(ch) -=GET_LEVEL(ch)*3;
    return;
   }

}

ACMD(do_halt)
{

        struct char_data *vict, *next_v;
    if (!FIGHTING(ch))
        {
    act("Your not fighting!", TRUE, ch, 0, 0, TO_CHAR);    
    return;
}

    act("You relax out of your fighting stance for a moment.", TRUE, ch, 0, 0, TO_CHAR);
    act("$n leans up from a fighting stance.", TRUE, ch, 0, 0, TO_NOTVICT);
    SET_BIT(AFF_FLAGS(ch), AFF_HALTED);
        for(vict=world[ch->in_room].people;vict;vict=next_v)
        {
                next_v=vict->next_in_room;
                if(!IS_NPC(vict)&&(FIGHTING(vict)))
                {
                if(FIGHTING(FIGHTING(vict))==vict)
                        stop_fighting(FIGHTING(vict));
                stop_fighting(vict);

                }
        }
}

ACMD(do_regenerate)
{
 if (!GET_SKILL(ch, SKILL_REGENERATE)) {
  send_to_char("You can't do that!\r\n", ch);
  return;
}
else {
    act("You regenrate your body restoring lost parts.", TRUE, ch, 0, 0, TO_CHAR);
    act("$n completely regenerates all thier body parts.", TRUE, ch, 0, 0, TO_NOTVICT);
  SET_BIT(PLR_FLAGS(ch), PLR_RARM);
  SET_BIT(PLR_FLAGS(ch), PLR_LARM);
  SET_BIT(PLR_FLAGS(ch), PLR_RLEG);
  SET_BIT(PLR_FLAGS(ch), PLR_LLEG);
 }
}


ACMD(do_status)
{
send_to_char("&15o&12-------------------------o-------------------------&15o&00\r\n", ch);
send_to_char("&12|&15         ___             &12| &10Appearance:             &12|\r\n", ch);
/* Eye Color */
if (GET_EYE(ch) == EYE_BLACK) {
send_to_char("&12|&15        /   \\            &12| &15Eye Color: Black        &12|\r\n", ch);
}
else if (GET_EYE(ch) == EYE_WHITE) {
send_to_char("&12|&15        /   \\            &12| &15Eye Color: White        &12|\r\n", ch);
}
else if (GET_EYE(ch) == EYE_BLUE) {
send_to_char("&12|&15        /   \\            &12| &15Eye Color: &12Blue         &12|\r\n", ch);
}
else if (GET_EYE(ch) == EYE_GREEN) {
send_to_char("&12|&15        /   \\            &12| &15Eye Color: &11Green        &12|\r\n", ch);
}
else if (GET_EYE(ch) == EYE_BROWN) {
send_to_char("&12|&15        /   \\            &12| &15Eye Color: &03Brown        &12|\r\n", ch);
}
else if (GET_EYE(ch) == EYE_PURPLE) {
send_to_char("&12|&15        /   \\            &12| &15Eye Color: &13Purple       &12|\r\n", ch);
}
else if (GET_EYE(ch) == EYE_RED) {
send_to_char("&12|&15        /   \\           &12| &15Eye Color: &09Red          &12|\r\n", ch);
}
else if (GET_EYE(ch) == EYE_YELLOW) {
send_to_char("&12|&15        /   \\            &12| &15Eye Color: &11Yellow       &12|\r\n", ch);
}
/* End Eye Color */
/* Hair Lenght */
if (GET_HAIRL(ch) == HAIRL_V_SHORT) {
send_to_char("&12|&15        |   |            &12| &15Hair Length: Very Short &12|\r\n", ch);
}
else if (GET_HAIRL(ch) == HAIRL_SHORT) {
send_to_char("&12|&15        |   |            &12| &15Hair Length: Short      &12|\r\n", ch);
}
else if (GET_HAIRL(ch) == HAIRL_MEDIUM) {
send_to_char("&12|&15        |   |            &12| &15Hair Length: Medium     &12|\r\n", ch);
}
else if (GET_HAIRL(ch) == HAIRL_LONG) {
send_to_char("&12|&15        |   |            &12| &15Hair Length: Long       &12|\r\n", ch);
}
else if (GET_HAIRL(ch) == HAIRL_V_LONG) {
send_to_char("&12|&15        |   |            &12| &15Hair Length: Very Long  &12|\r\n", ch);
}
/*End Hair Lenght*/
/*Hair Color */
if (GET_HAIRC(ch) == HAIRC_BLACK) {
send_to_char("&12|&15        \\___/            &12| &15Hair Color: Black       &12|\r\n", ch);
}
else if (GET_HAIRC(ch) == HAIRC_WHITE) {
send_to_char("&12|&15        \\___/            &12| &15Hair Color: White       &12|\r\n", ch);
}
else if (GET_HAIRC(ch) == HAIRC_BROWN) {
send_to_char("&12|&15        \\___/            &12| &15Hair Color: &03Brown       &12|\r\n", ch);
}
else if (GET_HAIRC(ch) == HAIRC_BLUE) {
send_to_char("&12|&15        \\___/            &12| &15Hair Color: &12Blue        &12|\r\n", ch);
}
else if (GET_HAIRC(ch) == HAIRC_YELLOW) {
send_to_char("&12|&15        \\___/            &12| &15Hair Color: &11Yellow      &12|\r\n", ch);
}
else if (GET_HAIRC(ch) == HAIRC_GREEN) {
send_to_char("&12|&15        \\___/            &12| &15Hair Color: &10Green       &12|\r\n", ch);
}
else if (GET_HAIRC(ch) == HAIRC_PURPLE) {
send_to_char("&12|&15        \\___/            &12| &15Hair Color: &13Purple      &12|\r\n", ch);
}
else if (GET_HAIRC(ch) == HAIRC_RED) {
send_to_char("&12|&15        \\___/            &12| &15Hair Color: &09Red         &12|\r\n", ch);
}
/* End of Hair Color */

send_to_char("&12|&15    __  /   \\  __        &12|                         &12|\r\n", ch);
send_to_char("&12|&15   (             )       &12| &10Body Condition:         &12|\r\n", ch);
send_to_char("&12|&15   |  |       |  |       &12| &15Head:       &11Perfect     &12|\r\n", ch);
send_to_char("&12|&15   (  )       (  )       &12| &15Torso:      &11Perfect     &12|\r\n", ch);
if (PLR_FLAGGED(ch, PLR_RARM)) {
send_to_char("&12|&15   |  }\\     /{  |       &12| &15Right Arm:  &11Perfect     &12|\r\n", ch);
}
else if (!PLR_FLAGGED(ch, PLR_RARM)) {
send_to_char("&12|&15   |  }\\     /{  |       &12| &15Right Arm:  &09Severed     &12|\r\n", ch);
}
if (PLR_FLAGGED(ch, PLR_LARM)) {
send_to_char("&12|&15   | / |     | \\ |       &12| &15Left Arm:   &11Perfect     &12|\r\n", ch);
}
else if (!PLR_FLAGGED(ch, PLR_LARM)) {
send_to_char("&12|&15   | / |     | \\ |       &12| &15Left Arm:   &09Severed     &12|\r\n", ch);
}
if (PLR_FLAGGED(ch, PLR_RLEG)) {
send_to_char("&12|&15   |_\\ /  __ \\ /_|       &12| &15Right Leg:  &11Perfect     &12|\r\n", ch);
}
else if (!PLR_FLAGGED(ch, PLR_RLEG)) {
send_to_char("&12|&15   |_\\ /  __ \\ /_|       &12| &15Right Leg:  &09Severed     &12|\r\n", ch);
}
if (PLR_FLAGGED(ch, PLR_LLEG)) {
send_to_char("&12|&15      /   ||  |          &12| &15Left Leg:   &11Perfect     &12|\r\n", ch);
}
else if (!PLR_FLAGGED(ch, PLR_LLEG)) {
send_to_char("&12|&15      /   ||  |          &12| &15Left Leg:   &09Severed     &12|\r\n", ch);
}
send_to_char("&12|&15     /   / |  |          &12|                         &12|\r\n", ch);
send_to_char("&12|&15    {   /  |  |          &12|                         &12|\r\n", ch);
send_to_char("&12|&15    |   |  |  |          &12|                         &12|\r\n", ch);
send_to_char("&12|&15   _|   |  |  |          &12|                         &12|\r\n", ch);
send_to_char("&12|&15  /_____}  (  \\          &12|                         &12|\r\n", ch);
send_to_char("&12|&15            \\  )         &12|                         &12|\r\n", ch);
send_to_char("&15o&12-------------------------&15o&12-------------------------&15o&00\r\n", ch);
send_to_char("&12| &10Affections:&00                                       &12|\r\n", ch);
if (PRF_FLAGGED(ch, PRF_SSJ1) && !PRF_FLAGGED(ch, PRF_SSJ2)) {
send_to_char("&12| &11You are in Super Saiya-Jin Form 1.                &12|\r\n", ch);
}
if (PRF_FLAGGED(ch, PRF_SSJ2) && !PRF_FLAGGED(ch, PRF_SSJ3)) {
send_to_char("&12| &11You are in Super Saiya-Jin Form 2.                &12|\r\n", ch);
}
if (PRF_FLAGGED(ch, PRF_SSJ3)) {
send_to_char("&12| &11You are in Super Saiya-Jin Form 3.                &12|\r\n", ch);
}
if (PRF_FLAGGED(ch, PRF_TR1) && !PRF_FLAGGED(ch, PRF_TR2)) {
send_to_char("&12| &14You are in Transformation Stage 1.                &12|\r\n", ch);
}
if (PRF_FLAGGED(ch, PRF_TR2) && !PRF_FLAGGED(ch, PRF_TR3)) {
send_to_char("&12| &14You are in Transformation Stage 2.                &12|\r\n", ch);
}
if (PRF_FLAGGED(ch, PRF_TR3) && !PRF_FLAGGED(ch, PRF_TR4)) {
send_to_char("&12| &14You are in Transformation Stage 3.                &12|\r\n", ch);
}
if (PRF_FLAGGED(ch, PRF_TR4)) {
send_to_char("&12| &14You are in Transformation Stage 4.                &12|\r\n", ch);
}
if (PRF_FLAGGED(ch, PRF_OOZARU)) {
send_to_char("&12| &12You are in Oozaru form.                           &12|\r\n", ch);
}
if (PRF_FLAGGED(ch, PRF_CAMP)) {
send_to_char("&12| &10You are camping.                                  &12|\r\n", ch);
}
if (AFF_FLAGGED(ch, AFF_SOLAR_FLARE)) {
send_to_char("&12| &09You are blind!                                    &12|\r\n", ch);
}
if (AFF_FLAGGED(ch, AFF_INVISIBLE)) {
send_to_char("&12| &13You are invisible                                 &12|\r\n", ch);
}
if (AFF_FLAGGED(ch, AFF_MAJIN)) {
send_to_char("&12| &13You are a Majin slave.                            &12|\r\n", ch);
}
if (AFF_FLAGGED(ch, AFF_INFRAVISION)) {
send_to_char("&12| &13You can see in the dark.                          &12|\r\n", ch);
}
if (AFF_FLAGGED(ch, AFF_SPAR)) {
send_to_char("&12| &10You are sparring.                                 &12|\r\n", ch);
}
if (AFF_FLAGGED(ch, AFF_JOG)) {
send_to_char("&12| &10You are jogging.                                  &12|\r\n", ch);
}
if (AFF_FLAGGED(ch, AFF_CHARGEL)) {
send_to_char("&12| &09You have a little bit of energy charged.          &12|\r\n", ch);
}
if (AFF_FLAGGED(ch, AFF_CHARGEM)) {
send_to_char("&12| &09You have a fair ammount of energy charged.        &12|\r\n", ch);
}
if (AFF_FLAGGED(ch, AFF_CHARGEH)) {
send_to_char("&12| &09You have a-lot of energy charged.                 &12|\r\n", ch);
}
send_to_char("&15o&12---------------------------------------------------&15o&00\r\n", ch);

 }