Instructions on adding in freeze tag gameplay:
 
 dustlos@hotmail.com

 This was done on CircleMUD bpl17 with ASCII Pfiles. This will
 also put in a send_to_world type function, you will see, its
 good to have.

 This is what this readme does not tell you to do: In a lot of 
 these files you will need to add some externs or prototypes for
 the functions, you should know how to do this...

 I'm sorry for the bad format of this readme, but bear with it, its
 short.

 How freezetag works:
     An immortal adds players to either red or blue team, when enough are
     in he/she starts the game. The players run around tagging eachother
     and they become frozen (a fellow teammate can unfreeze them). When
     everyone on one team is frozen or when the timer runs out, the game
     is over and your quest god can give rewards to the winning team or
     whatever. Every point_update the timer for the freeze match goes down,
     when its out the game ends.

 Begin:

 1) In structs.h go to struct player_special_data_saved and add in this:

        int tag_team;		/* Which team person is on        */

 2) Now, we need some useful defines in case we add teams later on or do
    weird things. Somewhere in the upper area of structs.h add in:

/* Some defines for the freeze tag */
#define TEAM_NONE	0
#define TEAM_RED	1
#define TEAM_BLUE	2
 
    and
 
/* Some defines for message world */
#define MSG_DARKNESS	0
#define MSG_FREEZE	1

 3) Open up act.comm.c and at the bottom of it add in:

void do_message_world(char *argument, int type)
{
  struct descriptor_data *pt;

  skip_spaces(&argument);
  delete_doubledollar(argument);

  switch (type) {
  case 0:
   sprintf(buf2, "&n[&DDarkness Falling&n]&n:&n &r%s&n\r\n", argument);
   break;
  case 1:
   sprintf(buf2, "&m[&MFreeze Tag&m]&n: &r%s&n\r\n", argument);
   break;
  }
  if (type == MSG_FREEZE) {
    for (pt = descriptor_list; pt; pt = pt->next) {
      if (STATE(pt) == CON_PLAYING && pt->character && GET_FREEZE_TEAM(pt->character)) {
          send_to_char(buf2, pt->character);
      }
    }
    return;
  }
    
  for (pt = descriptor_list; pt; pt = pt->next) {
    if (STATE(pt) == CON_PLAYING && pt->character) {
        send_to_char(buf2, pt->character);
    }
  }
}

 4) OK, we have in the useful message_world so that's good, we will be
    using it.  Now, put in freezetag.c into your src directory and add it
    to the Makefile.

 5) In utils.h add in this macro:

#define GET_FREEZE_TEAM(ch)	((ch)->player_specials->saved.tag_team)

 6) Well, you may think we are done but we aren't. Open up config.c and
    look around where pk_allowed is and add in these global variables.

/* our global variables */
int freeze_game_running = 0;
int freeze_game_timer = 0;
int freeze_game_red = 0;
int freeze_game_blue = 0;
int freeze_game_iblue = 0;
int freeze_game_ired = 0;

  7) Now open up comm.c and search for point_update and add this in near it:
if (freeze_game_running && freeze_game_timer) {
   freeze_game_timer--;
   if (!freeze_game_timer) {
      endgame();
    }
}

  8) Now we want to add in a new position, POS_FROZEN. Open up
     interpreter.c and look for
        send_to_char("All you can do right now is think about the stars!\r\n", ch);
        break;
     and below it add in:
case POS_FROZEN:
     send_to_char("You've been frozen by an opponent!\r\n", ch);
     break;

  9) Reopen up structs.h and add in POS_FROZEN in between STUNNED and
     SLEEPING and then renumber the positions accordingly.

 10) Now, open up interpreter.c and add in the commands for addteam,
     startgame, endgame, tag, and tsay.

 11) This should be all that is needed! Good luck and if you need help
     email me.

