/*	File:			room_map.c
 *	Descrtiption:
 *		This file contains my function to
 *		create an asciimap of the room you are
 *		in. It shows all 6 standard exits on
 *		the map. The output looks something
 *		like:
 *
 *		.-----------------.
 *		|                 |
 *		| xxxxxxxxxxxxxxx | { ALL } Thri     The City of Vandagard
 *		| xxxxxxxxxxxxxxx | The Temple Altar
 *		| xxxx       xxxx |
 *		| xxxx            |
 *		| xxxx       xxxx |
 *		| xxxxxxxxxxxxxxx |
 *		| xxxxxxxxxxxxxxx |
 *		|                 |
 *		'-----------------'  [Room 113]
 *
 *		Each room sector is defined with two
 *		varabiles in the switch statement.
 *		sp = The sector pixel (defines what those xxx's show as)
 *		     the charaters should be about 20 across or so.
 *		co = The color of the room. (bright cyan for water,
 *		     grey for mountians etc)
 *
 * 	Known Bugs:	1. Sometimes the mapper will get confused, and
 *			and output complete crap or 1/2 a room.
 *			2. It would be too much of a pain to add
 *			   nw/sw/ne/nw exits for me ;) If you do,
 *			   send it to me, id love to have it.
 *			3. Doesnt support secret exits (they arent
 *			   really secret ;)
 *			4. The way it places the charaters is crappy,
 *			   the First charater HAS to be something, other wise
 *			   it looks really bad. Its a good idea to have no spaces.
 *
 *	How to use it:	Well Ihave both a wilderness map and this map,
 *				so in do_look, i did an if ROOM_IS_WILD
 *				do_wilderness, else do_room_map
 *
 *	Conditions of Use:	I request and require if you are going
 *				to use this in a mud that will have
 *				players, or in any sort of released
 *				code base, you email or AIM me telling
 *				where its going.
 *				I also request a helpfile under the topic
 *				_room_map (yes thats underscore_room_map)
 *				with my contact info, and this snips info.
 *				Also with this information below mine:
 *				Orginal Idea by Bela of Underworld Dreams.
 *				http://dreams.daestroke.com
 *
 *				Also you are required to Enjoy life. ;)
 *				Also i require you to follow all previous
 *				licences.
 *
 *	-Thri
 *	AIM: CalibanL
 *	ICQ: 5335308
 *	Email: cyhawk@comcast.net
 *
 *
 *
 */



void do_room_map (CHAR_DATA *ch, char *argument)
{
      EXIT_DATA *pexit_north;
      EXIT_DATA *pexit_south;
      EXIT_DATA *pexit_east;
      EXIT_DATA *pexit_west;
      EXIT_DATA *pexit_up;
      EXIT_DATA *pexit_down;

      pexit_north 	= ch->in_room->exit[DIR_NORTH];
      pexit_south 	= ch->in_room->exit[DIR_SOUTH];
      pexit_east 	= ch->in_room->exit[DIR_EAST];
      pexit_west 	= ch->in_room->exit[DIR_WEST];
      pexit_up 	= ch->in_room->exit[DIR_UP];
      pexit_down 	= ch->in_room->exit[DIR_DOWN];
      char buf[MSL];
      char buf2[MSL];
      char buf3[MSL];
      char buf4[MSL];
      char buf5[MSL];
      char buf6[MSL];
      char buf7[MSL];

      char sp[MSL];
      char co[MSL];

        switch (ch->in_room->sector_type)
	{
	default:
	case SECT_INSIDE:
	  sprintf (sp, "xxxxxxxxxxxxxxxxxx");
	  sprintf (co, "{g");
	  break;

	case SECT_CITY:
	  sprintf (sp, "xxxxxxxxxxxxxxxxxx");
	  sprintf (co, "{G");
	  break;

	case SECT_FIELD:
	  sprintf (sp, "i1Il1lII11i1l1ll1l");
	  sprintf (co, "{w");
	  break;

	case SECT_FOREST:
	  sprintf (sp, "oO*p*O*p*8*O*8p*8*O");
	  sprintf (co, "{g");
	  break;

	case SECT_HILLS:
	  sprintf (sp, "@mMm@MmM@MmM@mMM@Mm");
	  sprintf (co, "{w");
	  break;

	case SECT_MOUNTAIN:
	  sprintf (sp, "/\\/\\/\\/\\/\\/\\/\\/\\/\\/\\");
	  sprintf (co, "{D");
	  break;

	case SECT_WATER_SWIM:
	  sprintf (sp, "~oOo~oOo~oOo~oOo~oOo~oOo");
	  sprintf (co, "{C");
	  break;

	case SECT_WATER_NOSWIM:
	  sprintf (sp, "~oOo~oOo~oOo~oOo~oOo~oOo");
	  sprintf (co, "{B");
	  break;

	case SECT_AIR:
	  sprintf (sp, "()@()@()@()@()@()@()@()");
	  sprintf (co, "{D");
	  break;

	case SECT_DESERT:
	  sprintf (sp, "*_-_&_)-*_&)_*^*-)*-");
	  sprintf (co, "{Y");
	  break;

	}



	  stc (".-----------------.\n\r", ch);
	  stc ("|                 |\n\r", ch);

	  if ((ch->in_room->exit[DIR_NORTH] != NULL)
	      && (ch->in_room->exit[DIR_UP] == NULL)
	      && (IS_SET (pexit_north->exit_info, EX_CLOSED)))
	    {
	      sprintf (buf, "|%s %.6s   %.6s {x|{G {%s\n\r{x", co, sp, sp,
		       ch->in_room->area->credits);
	      sprintf (buf2, "|%s %.6s---%.6s {x|{C %s\n\r{x", co, sp, sp,
		       ch->in_room->name);
	      sprintf (buf3, "|%s %.4s       %.4s {x|     \n\r{x", co, sp,
		       sp);
	    }

	  else if ((ch->in_room->exit[DIR_NORTH] != NULL)
		   && (ch->in_room->exit[DIR_UP] != NULL)
		   && (IS_SET (pexit_north->exit_info, EX_CLOSED))
		   && (IS_SET (pexit_up->exit_info, EX_CLOSED)))
	    {
	      sprintf (buf, "|%s %.6s   %.2s   %.1s {x|{G {%s\n\r{x", co, sp,
		       sp, sp, ch->in_room->area->credits);
	      sprintf (buf2, "|%s %.6s---%.1s---%.2s {x|{C %s\n\r{x", co, sp,
		       sp, sp, ch->in_room->name);
	      sprintf (buf3, "|%s %.4s        %.3s {x|     \n\r{x", co, sp,
		       sp);
	    }

	  else if ((ch->in_room->exit[DIR_NORTH] != NULL)
		   && (ch->in_room->exit[DIR_UP] != NULL)
		   && (IS_SET (pexit_north->exit_info, EX_CLOSED)))
	    {
	      sprintf (buf, "|%s %.6s   %.2s   %.1s {x|{G {%s\n\r{x", co, sp,
		       sp, sp, ch->in_room->area->credits);
	      sprintf (buf2, "|%s %.6s---%.1s   %.2s {x|{C %s\n\r{x", co, sp,
		       sp, sp, ch->in_room->name);
	      sprintf (buf3, "|%s %.4s        %.3s {x|     \n\r{x", co, sp,
		       sp);
	    }


	  else if ((ch->in_room->exit[DIR_NORTH] != NULL)
		   && (ch->in_room->exit[DIR_UP] != NULL)
		   && (IS_SET (pexit_up->exit_info, EX_CLOSED)))
	    {
	      sprintf (buf, "|%s %.6s   %.2s   %.1s {x|{G {%s\n\r{x", co, sp,
		       sp, sp, ch->in_room->area->credits);
	      sprintf (buf2, "|%s %.6s   %.1s---%.2s {x|{C %s\n\r{x", co, sp,
		       sp, sp, ch->in_room->name);
	      sprintf (buf3, "|%s %.4s        %.3s {x|     \n\r{x", co, sp,
		       sp);
	    }

	  else if ((ch->in_room->exit[DIR_NORTH] != NULL)
		   && (ch->in_room->exit[DIR_UP] != NULL)
		   && (IS_SET (pexit_north->exit_info, EX_CLOSED))
		   && (IS_SET (pexit_up->exit_info, EX_CLOSED)))
	    {
	      sprintf (buf, "|%s %.6s   %.2s   %.1s {x|{G {%s\n\r{x", co, sp,
		       sp, sp, ch->in_room->area->credits);
	      sprintf (buf2, "|%s %.6s---%.1s---%.2s {x|{C %s\n\r{x", co, sp,
		       sp, sp, ch->in_room->name);
	      sprintf (buf3, "|%s %.4s        %.3s {x|     \n\r{x", co, sp,
		       sp);
	    }


	  else if ((ch->in_room->exit[DIR_NORTH] == NULL)
		   && (ch->in_room->exit[DIR_UP] != NULL)
		   && (IS_SET (pexit_up->exit_info, EX_CLOSED)))
	    {
	      sprintf (buf, "|%s %.11s   %.1s {x|{G {%s\n\r{x", co, sp, sp,
		       ch->in_room->area->credits);
	      sprintf (buf2, "|%s %.10s---%.2s {x|{C %s\n\r{x", co, sp, sp,
		       ch->in_room->name);
	      sprintf (buf3, "|%s %.4s        %.3s {x|     \n\r{x", co, sp,
		       sp);
	    }

	  else if ((ch->in_room->exit[DIR_NORTH] == NULL)
		   && (ch->in_room->exit[DIR_UP] != NULL))
	    {
	      sprintf (buf, "|%s %.11s   %.1s {x|{G {%s\n\r{x", co, sp, sp,
		       ch->in_room->area->credits);
	      sprintf (buf2, "|%s %.10s   %.2s {x|{C %s\n\r{x", co, sp, sp,
		       ch->in_room->name);
	      sprintf (buf3, "|%s %.4s        %.3s {x|     \n\r{x", co, sp,
		       sp);
	    }
	  else if ((ch->in_room->exit[DIR_NORTH] != NULL)
		   && (ch->in_room->exit[DIR_UP] == NULL))
	    {
	      sprintf (buf, "|%s %.6s   %.6s {x|{G {%s\n\r{x", co, sp, sp,
		       ch->in_room->area->credits);
	      sprintf (buf2, "|%s %.6s   %.6s {x|{C %s\n\r{x", co, sp, sp,
		       ch->in_room->name);
	      sprintf (buf3, "|%s %.4s       %.4s {x|     \n\r{x", co, sp,
		       sp);
	    }


	  else if ((ch->in_room->exit[DIR_NORTH] != NULL)
		   && (ch->in_room->exit[DIR_UP] != NULL))
	    {
	      sprintf (buf, "|%s %.6s   %.2s   %.1s {x|{G {%s\n\r{x", co, sp,
		       sp, sp, ch->in_room->area->credits);
	      sprintf (buf2, "|%s %.6s   %.1s   %.2s {x|{C %s\n\r{x", co, sp,
		       sp, sp, ch->in_room->name);
	      sprintf (buf3, "|%s %.4s        %.3s {x|     \n\r{x", co, sp,
		       sp);
	    }

	  else if ((ch->in_room->exit[DIR_NORTH] == NULL)
		   && (ch->in_room->exit[DIR_UP] == NULL))
	    {
	      sprintf (buf, "|%s %.15s {x|{G {%s\n\r{x", co, sp,
		       ch->in_room->area->credits);
	      sprintf (buf2, "|%s %.15s {x|{C %s\n\r{x", co, sp,
		       ch->in_room->name);
	      sprintf (buf3, "|%s %.4s       %.4s {x|     \n\r{x", co, sp,
		       sp);
	    }
	  else
	    {
	      sprintf (buf, "|%s xxxxxxxxxxxxxxx {x|     \n\r{x", co);
	      sprintf (buf2, "|%s xxxx Bugged xxx {x|     \n\r{x", co);
	      sprintf (buf3, "|%s xxxxx exit xxxx {x|     \n\r{x", co);
	    }




	  if ((ch->in_room->exit[DIR_EAST] != NULL)
	      && (ch->in_room->exit[DIR_WEST] != NULL)
	      && (IS_SET (pexit_east->exit_info, EX_CLOSED))
	      && (IS_SET (pexit_west->exit_info, EX_CLOSED)))
	    {
	      sprintf (buf4, "|%s   |         |   {x|\n\r", co);
	    }


	  else if ((ch->in_room->exit[DIR_EAST] != NULL)
		   && (ch->in_room->exit[DIR_WEST] != NULL)
		   && (IS_SET (pexit_east->exit_info, EX_CLOSED)))
	    {
	      sprintf (buf4, "|%s             |   {x|\n\r", co);
	    }

	  else if ((ch->in_room->exit[DIR_EAST] != NULL)
		   && (ch->in_room->exit[DIR_WEST] != NULL)
		   && (IS_SET (pexit_west->exit_info, EX_CLOSED)))
	    {
	      sprintf (buf4, "|%s   |             {x|\n\r", co);
	    }


	  else if ((ch->in_room->exit[DIR_EAST] == NULL)
		   && (ch->in_room->exit[DIR_WEST] != NULL)
		   && (IS_SET (pexit_west->exit_info, EX_CLOSED)))
	    {
	      sprintf (buf4, "|%s   |        %.4s {x|\n\r", co, sp);
	    }


	  else if ((ch->in_room->exit[DIR_EAST] != NULL)
		   && (ch->in_room->exit[DIR_WEST] == NULL)
		   && (IS_SET (pexit_east->exit_info, EX_CLOSED)))
	    {
	      sprintf (buf4, "|%s %.4s        |   {x|\n\r", co, sp);
	    }

	  else if ((ch->in_room->exit[DIR_EAST] != NULL)
		   && (ch->in_room->exit[DIR_WEST] == NULL))
	    {
	      sprintf (buf4, "|%s %.4s            {x|\n\r", co, sp);
	    }

	  else if ((ch->in_room->exit[DIR_EAST] == NULL)
		   && (ch->in_room->exit[DIR_WEST] != NULL))
	    {
	      sprintf (buf4, "|%s            %.4s {x|\n\r", co, sp);
	    }

	  else if ((ch->in_room->exit[DIR_EAST] != NULL)
		   && (ch->in_room->exit[DIR_WEST] != NULL))
	    {
	      sprintf (buf4, "|%s                 {x|\n\r", co);
	    }

	  else if ((ch->in_room->exit[DIR_EAST] == NULL)
		   && (ch->in_room->exit[DIR_WEST] == NULL))
	    {
	      sprintf (buf4, "|%s %.4s       %.4s {x|\n\r", co, sp, sp);
	    }

	  else
	    {
	      sprintf (buf4, "|%s x Bugged exit x {x|     \n\r{x", co);
	    }


	  if ((ch->in_room->exit[DIR_SOUTH] != NULL)
	      && (ch->in_room->exit[DIR_DOWN] == NULL)
	      && (IS_SET (pexit_south->exit_info, EX_CLOSED)))
	    {
	      sprintf (buf5, "|%s %.4s       %.4s {x|     \n\r{x", co, sp,
		       sp);
	      sprintf (buf6, "|%s %.6s---%.6s {x|     \n\r{x", co, sp, sp);
	      sprintf (buf7, "|%s %.6s   %.6s {x|     \n\r{x", co, sp, sp);
	    }

	  else if ((ch->in_room->exit[DIR_SOUTH] != NULL)
		   && (ch->in_room->exit[DIR_DOWN] != NULL)
		   && (IS_SET (pexit_south->exit_info, EX_CLOSED))
		   && (IS_SET (pexit_down->exit_info, EX_CLOSED)))
	    {
	      sprintf (buf5, "|%s %.3s        %.4s {x|     \n\r{x", co, sp,
		       sp);
	      sprintf (buf6, "|%s %.2s---%.1s---%.6s {x|     \n\r{x", co, sp,
		       sp, sp);
	      sprintf (buf7, "|%s %.1s   %.2s   %.6s {x|     \n\r{x", co, sp,
		       sp, sp);
	    }

	  else if ((ch->in_room->exit[DIR_SOUTH] != NULL)
		   && (ch->in_room->exit[DIR_DOWN] != NULL)
		   && (IS_SET (pexit_south->exit_info, EX_CLOSED)))
	    {
	      sprintf (buf5, "|%s %.3s        %.4s {x|     \n\r{x", co, sp,
		       sp);
	      sprintf (buf6, "|%s %.2s   %.1s---%.6s {x|     \n\r{x", co, sp,
		       sp, sp);
	      sprintf (buf7, "|%s %.1s   %.2s   %.6s {x|     \n\r{x", co, sp,
		       sp, sp);
	    }

	  else if ((ch->in_room->exit[DIR_SOUTH] == NULL)
		   && (ch->in_room->exit[DIR_DOWN] != NULL)
		   && (IS_SET (pexit_down->exit_info, EX_CLOSED)))
	    {
	      sprintf (buf5, "|%s %.3s        %.4s {x|     \n\r{x", co, sp,
		       sp);
	      sprintf (buf6, "|%s %.2s---%.10s {x|     \n\r{x", co, sp, sp);
	      sprintf (buf7, "|%s %.1s   %.11s {x|     \n\r{x", co, sp, sp);
	    }

	  else if ((ch->in_room->exit[DIR_SOUTH] != NULL)
		   && (ch->in_room->exit[DIR_DOWN] != NULL)
		   && (IS_SET (pexit_south->exit_info, EX_CLOSED))
		   && (IS_SET (pexit_down->exit_info, EX_CLOSED)))
	    {
	      sprintf (buf5, "|%s %.3s        %.4s {x|     \n\r{x", co, sp,
		       sp);
	      sprintf (buf6, "|%s %.2s---%.1s---%.6s {x|     \n\r{x", co, sp,
		       sp, sp);
	      sprintf (buf7, "|%s %.1s   %.2s   %.6s {x|     \n\r{x", co, sp,
		       sp, sp);
	    }


	  else if ((ch->in_room->exit[DIR_SOUTH] != NULL)
		   && (ch->in_room->exit[DIR_DOWN] != NULL)
		   && (IS_SET (pexit_down->exit_info, EX_CLOSED)))
	    {
	      sprintf (buf5, "|%s %.3s        %.4s {x|     \n\r{x", co, sp,
		       sp);
	      sprintf (buf6, "|%s %.2s---%.1s   %.6s {x|     \n\r{x", co, sp,
		       sp, sp);
	      sprintf (buf7, "|%s %.1s   %.2s   %.6s {x|     \n\r{x", co, sp,
		       sp, sp);
	    }

	  else if ((ch->in_room->exit[DIR_SOUTH] != NULL)
		   && (ch->in_room->exit[DIR_DOWN] != NULL))
	    {
	      sprintf (buf5, "|%s %.3s        %.4s {x|     \n\r{x", co, sp,
		       sp);
	      sprintf (buf6, "|%s %.2s   %.1s   %.6s {x|     \n\r{x", co, sp,
		       sp, sp);
	      sprintf (buf7, "|%s %.1s   %.2s   %.6s {x|     \n\r{x", co, sp,
		       sp, sp);
	    }

	  else if ((ch->in_room->exit[DIR_SOUTH] != NULL)
		   && (ch->in_room->exit[DIR_DOWN] == NULL))
	    {
	      sprintf (buf5, "|%s %.4s       %.4s {x|     \n\r{x", co, sp,
		       sp);
	      sprintf (buf6, "|%s %.6s   %.6s {x|     \n\r{x", co, sp, sp);
	      sprintf (buf7, "|%s %.6s   %.6s {x|     \n\r{x", co, sp, sp);
	    }


	  else if ((ch->in_room->exit[DIR_SOUTH] == NULL)
		   && (ch->in_room->exit[DIR_DOWN] != NULL))
	    {
	      sprintf (buf5, "|%s %.3s        %.4s {x|     \n\r{x", co, sp,
		       sp);
	      sprintf (buf6, "|%s %.2s   %.10s {x|     \n\r{x", co, sp, sp);
	      sprintf (buf7, "|%s %.1s   %.11s {x|     \n\r{x", co, sp, sp);
	    }

	  else if ((ch->in_room->exit[DIR_SOUTH] == NULL)
		   && (ch->in_room->exit[DIR_DOWN] == NULL))
	    {
	      sprintf (buf5, "|%s %.4s       %.4s {x|     \n\r{x", co, sp,
		       sp);
	      sprintf (buf6, "|%s %.15s {x|     \n\r{x", co, sp);
	      sprintf (buf7, "|%s %.15s {x|     \n\r{x", co, sp);
	    }

	  else
	    {
	      sprintf (buf5, "|%s xxxxxxxxxxxxxxx {x|     \n\r{x", co);
	      sprintf (buf6, "|%s xxxx Bugged xxx {x|     \n\r{x", co);
	      sprintf (buf7, "|%s xxxxx exit xxxx {x|     \n\r{x", co);
	    }


	  send_to_char (buf, ch);
	  send_to_char (buf2, ch);
	  send_to_char (buf3, ch);
	  send_to_char (buf4, ch);
	  send_to_char (buf5, ch);
	  send_to_char (buf6, ch);
	  send_to_char (buf7, ch);

	  stc ("|                 |\n\r", ch);
	  stc ("'-----------------' ", ch);
	  if ((IS_IMMORTAL (ch)
	       && (IS_NPC (ch) || IS_SET (ch->act, PLR_HOLYLIGHT)))
	      || IS_BUILDER (ch, ch->in_room->area))
	    {
	      sprintf (buf, "{r [{RRoom %d{r]{x\n\r", ch->in_room->vnum);
	      send_to_char (buf, ch);
	    }

}