Installing battle-field:
Add battle.field.c into Makefile
Change some files:
act.info.c:
  In function do_who:
    ...
    if (PRF_FLAGGED(tch, PRF_QUEST))
      strcat(buf, " (quest)");
  + if (PRF_FLAGGED(tch, PRF_BATTLE))
  +   strcat(buf, " (battle)");
    if (PLR_FLAGGED(tch, PLR_THIEF))
      strcat(buf, " (THIEF)");
    if (PLR_FLAGGED(tch, PLR_KILLER))
      strcat(buf, " (KILLER)");
  + if (PLR_FLAGGED(tch, PLR_IN_BATTLE))
  +   strcat(buf, " (IN BATTLE)");
act.offensive.c:
  In function do_flee (in the begin of this function):
  + if (PLR_FLAGGED(ch, PLR_IN_BATTLE)) return;
act.wizard.c:
  In function do_goto (in the begin of this function):
  + if (PLR_FLAGGED(ch, PLR_IN_BATTLE)) {
  +  send_to_char("Cannot use when in battle\r\n", ch);
  +  return;
  + }
  In function do_load: (in the begin of this function):
  + if (PLR_FLAGGED(ch, PLR_IN_BATTLE)) {
  +   send_to_char("You cannot load while in battle.\r\n", ch); return;
  + }
  In function do_purge:
    if ((vict = get_char_room_vis(ch, buf))) {
  *    if (!IS_NPC(vict) && ((GET_LEVEL(ch) <= GET_LEVEL(vict)) || PLR_FLAGGED(vict, PLR_IN_BATTLE))) {
  +      send_to_char("Fuuuuuuuuu!\r\n", ch);
	return;
      }
  In function do_restore:
	send_to_char("You cannot restore MONSTERS! \r\n",ch);
  + else if (PLR_FLAGGED(vict, PLR_IN_BATTLE))
  +   send_to_char("You cannot restore battle-fighter!\r\n", vict);
comm.c:
  Add prototype of function battle_activity:
    void mobile_activity(void);
  + void battle_activity(void);
    void string_add(struct descriptor_data * d, char *str);
  In function game_loop:
    if (!(pulse % PULSE_VIOLENCE))
      perform_violence();
  + if (!(pulse%PULSE_BATTLE))
  +   battle_activity();
config.c:
  Add battle-room-numbers:
    /* virtual number of room that frozen players should enter at */
    sh_int frozen_start_room = 1202;

  + /* virtual numbers for battle-field */
  + room_num battle_start_room = 31000;
  + room_num battle_recall_room = 31054;
  + room_num battle_min_room = 31022;
  + room_num battle_max_room = 31087;
constants.c:
  Add strings to player_bits:
    const char *player_bits[] = {
    ...
  + "IN_BATTLE",
  Add strings to *preference_bits[] = {
    const char *preference_bits[] = {
    ...
  + "BATTLE",
comm.c:
  Write function send_to_prf:
  + void send_to_prf(char *messg, struct char_data *nosend, int prf_flags) {
  +   register struct descriptor_data *i;
  +   register struct char_data *ch;
  + 
  +   for (i = descriptor_list; i; i = i->next)
  +     if (!i->connected &&
  +         (ch = (i->character ? i->character : i->original)) != nosend &&
  +         PRF_FLAGGED(ch, prf_flags) && SENDOK(ch))
  +       SEND_TO_Q(messg, i);
  + }
db.c:
  Declare real-nums of battle-rooms
    sh_int r_frozen_start_room;	/* rnum of frozen start room	 */
  + room_num r_battle_start_room;   /* rnum of battle start room     */
  + room_num r_battle_recall_room;  /* rnum of battle recall room    */
  + room_num r_battle_min_room;     /* rnum of battle min room       */
  + room_num r_battle_max_room;     /* rnum of battle max room       */
  In function boot_world:
    ...
  + extern void check_battle_rooms(void);
    ...
  + log("Checking battle rooms.");
  + check_battle_rooms();
  In function check_killer (at the begin of this function):
  +  if (PLR_FLAGGED(vict, PLR_IN_BATTLE)) return;
  In function skill_message:
      if (!IS_NPC(vict) &&
  *       (GET_LEVEL(vict) >= LVL_IMMORT && !PLR_FLAGGED(vict, PLR_IN_BATTLE))) {
	act(msg->god_msg.attacker_msg, FALSE, ch, weap, vict, TO_CHAR);
        ...
  In function damage:
    ...
    /* You can't damage an immortal! */
    if (!IS_NPC(victim) &&
  *     (GET_LEVEL(victim) >= LVL_IMMORT && !PLR_FLAGGED(victim, PLR_IN_BATTLE)))
      dam = 0;
    ...
    if (GET_POS(victim) == POS_DEAD) {
  +   if (!IS_NPC(victim) && PLR_FLAGGED(victim, PLR_IN_BATTLE)) {
  +     GET_POS(victim) = POS_STANDING;
  +     GET_EXP(ch) += MIN(GET_EXP(victim)/3, 5000); gain_exp(ch, 1);
  +     GET_HIT(victim) = 1;
  +     if (GET_CLASS(victim) != CLASS_ALCHEMIST) GET_MANA(victim) = 0;
  +     char_from_room(victim); char_to_room(victim, r_mortal_start_room);
  +     sprintf(buf, "%s has been killed by %s in battle...\r\n",
  +             GET_NAME(victim), GET_NAME(ch));
  +     send_to_prf(buf, victim, PRF_BATTLE);
  +     sprintf(buf, "You have been killed by %s\r\n", GET_NAME(ch));
  +     send_to_char(buf, victim);
  +     look_at_room(victim, 1);
  +     if (FIGHTING(victim)) {
  +       if (FIGHTING(FIGHTING(victim)) == victim) stop_fighting(FIGHTING(victim));
  +       stop_fighting(victim);
  +     }
  +     stop_fighting(ch);
  +     REMOVE_BIT(PLR_FLAGS(victim), PLR_IN_BATTLE);
  +     return;
  +   }
interpreter.c:
  Add command "battle":
  + ACMD(do_battle);
    ACMD(do_cast);
    ...
    { "bug"      , POS_DEAD    , do_gen_write, 0, SCMD_BUG },
  + { "battle"   , POS_STANDING, do_battle   , 0, 0 }, 
    { "cast"     , POS_SITTING , do_cast     , 1, 0 },
  In function nanny:
    case CON_MENU:		/* get selection from main menu	 */
      switch (*arg) {
      case '0':
        close_socket(d);
        break;
  
      case '1':
	if (PLR_FLAGGED(d->character, PLR_FROZEN))
	  load_room = r_frozen_start_room;
	else {
	  if (d->character->in_room == NOWHERE)
	    load_room = r_mortal_start_room;
	  else if ((load_room = real_room(d->character->in_room)) < 0)
	    load_room = r_mortal_start_room;
	}
  +     if (PLR_FLAGGED(d->character, PLR_IN_BATTLE)) {
  +       GET_HIT(d->character) = 1;
  +       if (GET_CLASS(d->character) != CLASS_ALCHEMIST)
  +         GET_MANA(d->character) = 1;
  +       REMOVE_BIT(PLR_FLAGS(d->character), PLR_IN_BATTLE);
  +     }
        char_to_room(d->character, load_room);
        ...
spell_parser.c:
  In function do_cast:
    ...
  + if (GET_LEVEL(ch) >= LVL_IMMORT && PLR_FLAGGED(ch, PLR_IN_BATTLE) &&
  +     SINFO.min_level[(int) GET_CLASS(ch)] >= LVL_IMMORT) {
  +   send_to_char("You can only cast spell that you have learned while mortal!\r\n", ch);
  +   return;
  + }
    if (GET_SKILL(ch, spellnum) == 0) {
      send_to_char("You are unfamiliar with that spell.\r\n", ch);
    ...
    mana = mag_manacost(ch, spellnum);
    if ((mana > 0) && (GET_MANA(ch) < mana) &&
  *     (GET_LEVEL(ch) < LVL_IMMORT || PLR_FLAGGED(ch, PLR_IN_BATTLE))) {
      send_to_char("You haven't the energy to cast that spell!\r\n", ch);
      return;
    }
  In function spell_recall:
  + extern room_num r_battle_recall_room;
    ...
    else {
  *   if (IS_NPC(victim) || (PLR_FLAGGED(victim, PLR_IN_BATTLE) && ch != victim))
        return;
    ...
  +   if (!IS_NPC(ch) && PLR_FLAGGED(ch, PLR_IN_BATTLE) && GET_POS(ch) == POS_FIGHTING) {
        send_to_char("You can't use it while in battle\r\n", ch); return;
      }
    ...
      char_from_room(victim);
  *   char_to_room(victim, (PLR_FLAGGED(victim, PLR_IN_BATTLE) ? r_battle_recall_room : r_mortal_start_room));
    ...

In function spell_summon:
  + if (!IS_NPC(victim) && PLR_FLAGGED(victim, PLR_IN_BATTLE)) {
  +   send_to_char("No. He is now fighting!\r\n", victim);
  +   return;
  + }
    if (MOB_FLAGGED(victim, MOB_NOCHARM) ||
    ...
structs.h:
  + #define PLR_IN_BATTLE   (1 << 18)  /* Player in battle */
    ...
  + #define PRF_BATTLE      (1 << 24) /* Can hear battle-messages            */
    ...
    #define PULSE_MOBILE    (10 RL_SEC)
  + #define PULSE_BATTLE	(10 RL_SEC)
    #define PULSE_VIOLENCE  (2 RL_SEC)
    ...
  + /* Constants for battle-field */
  + #define BATTLE_MIN_PLR 3
  + #define BATTLE_MIN_LEV 1
  + #define BATTLE_MAX_LEV LVL_IMPL
  + #define BATTLE_OPEN_LEV 10
  + #define BATTLE_CLOSE_LEV LVL_GOD
  + #define BATTLE_IMM_HIT 300
  + #define BATTLE_IMM_MANA 500
  + #define BATTLE_ERROR (-1)
  + #define BATTLE_NOTRUN 0
  + #define BATTLE_WAIT_MOBACT (60*PASSES_PER_SEC/PULSE_BATTLE)
  + #define BATTLE_WAITING 1
  + #define BATTLE_RUNNING (BATTLE_WAITING + BATTLE_WAIT_MOBACT)
    ...
    struct char_data {
    ...
      room_num in_room;                     /* Location (real room number)	  */
      room_num was_in_room;		 /* location for linkdead people  */
  +   room_num was_battle;			 /* location before battle-field  */
    ...
utils.h:
/* Can subject see character "obj"? */
  * #define CAN_SEE(sub, obj) (SELF(sub, obj) || PLR_FLAGGED(obj, PLR_IN_BATTLE) ||\
  *   ((GET_REAL_LEVEL(sub) >= GET_INVIS_LEV(obj)) && IMM_CAN_SEE(sub, obj)))
