Mud20/accounts/
Mud20/accounts/c/
Mud20/accounts/f/
Mud20/accounts/k/
Mud20/accounts/s/
Mud20/accounts/t/
Mud20/area_current/
Mud20/area_current/newareas/
Mud20/bin/
Mud20/clans/
Mud20/gods/
Mud20/old-sources/
Mud20/player/
Mud20/player/a/del/
Mud20/player/b/
Mud20/player/b/bak/
Mud20/player/b/del/
Mud20/player/f/
Mud20/player/f/bak/
Mud20/player/f/del/
Mud20/player/k/
Mud20/player/k/bak/
Mud20/player/k/del/
Mud20/player/k/dmp/
Mud20/player/m/
Mud20/player/m/bak/
Mud20/player/o/
Mud20/player/o/bak/
Mud20/player/p/
Mud20/player/s/
Mud20/player/s/bak/
Mud20/player/s/del/
Mud20/player/t/
Mud20/player/t/del/
Mud20/player/v/
Mud20/public_html/
Mud20/races/
Mud20/skilltables/
__MACOSX/Mud20/accounts/
__MACOSX/Mud20/accounts/c/
__MACOSX/Mud20/accounts/f/
__MACOSX/Mud20/accounts/k/
__MACOSX/Mud20/accounts/s/
__MACOSX/Mud20/area_current/
__MACOSX/Mud20/area_current/core_areas/
__MACOSX/Mud20/area_current/helps/
__MACOSX/Mud20/area_current/newareas/
__MACOSX/Mud20/backups/
__MACOSX/Mud20/bin/
__MACOSX/Mud20/clans/
__MACOSX/Mud20/gods/
__MACOSX/Mud20/log/
__MACOSX/Mud20/old-sources/
__MACOSX/Mud20/player/
__MACOSX/Mud20/player/a/del/
__MACOSX/Mud20/player/b/
__MACOSX/Mud20/player/b/bak/
__MACOSX/Mud20/player/f/
__MACOSX/Mud20/player/f/bak/
__MACOSX/Mud20/player/f/del/
__MACOSX/Mud20/player/k/
__MACOSX/Mud20/player/k/bak/
__MACOSX/Mud20/player/k/del/
__MACOSX/Mud20/player/k/dmp/
__MACOSX/Mud20/player/m/
__MACOSX/Mud20/player/m/bak/
__MACOSX/Mud20/player/o/
__MACOSX/Mud20/player/o/bak/
__MACOSX/Mud20/player/p/
__MACOSX/Mud20/player/s/
__MACOSX/Mud20/player/s/bak/
__MACOSX/Mud20/player/t/del/
__MACOSX/Mud20/player/v/
__MACOSX/Mud20/public_html/
__MACOSX/Mud20/races/
__MACOSX/Mud20/skilltables/
/***************************************************************************
 * Mud20 1.0 by Todd H. Johnson (Kregor) a derivative of the Open Gaming   *
 * License by Wizards of the Coast. All comments referring to D20, OGL,    *
 * and SRD refer to the System Reference Document for the Open Gaming      *
 * system. Any inclusion of these derivatives must include credit to the   *
 * Mud20 system, the full and complete Open Gaming LIcense, and credit to  *
 * the respective authors. See ../doc/srd.txt for more information.        *
 *                                                                         *
 * Emud  2.2 by Igor van den Hoven, Michiel Lange, and Martin Bethlehem.   *
 *                                                                         *
 * MrMud 1.4 by David Bills, Dug Michael and Martin Gallwey                *
 *                                                                         *
 * Merc  2.1 Diku Mud improvments copyright (C) 1992, 1993 by Michael      *
 * Chastain, Michael Quan, and Mitchell Tse.                               *
 *                                                                         *
 * Original Diku Mud copyright (C) 1990 1991 by Sebastian Hammer,          *
 * Michael Seifert, Hans Henrik St{rfeld, Tom Madsen, and Katje Nyboe.     *
 ***************************************************************************/

/*
	Deprecated from eMud in favor of mapper.c - Kregor
*/
#include "mud.h"


char *	draw_room		args ( ( CHAR_DATA *ch, int vnum ) );
void		draw_map		args ( ( CHAR_DATA *ch ) );

int					area_map_x = 0;
int					area_map_y = 0;
char				area_map_buf[11];
int					area_map[201][91];
int					valid_exit;

sh_int		area_map_color[]	= {0,1,0,1,1,0,0,0,0,1,1,0,0,0,1,0,0,1,0,1,0,1,
							   							 7,5,3,2,7,6,4,4,4,6,3,1,2,3,4,6,6,0,2,3,7,0};

sh_int		area_map_palet0[]	= { 42, 35, 35, 43, 35,124, 43, 43,
							    35, 43, 45, 43, 43, 43, 43, 43};

sh_int		area_map_palet1[]	= {126,247,247,109,247,120,108,116,
							   247,106,113,118,107,117,119,110};
							   
const char *sector_palette[] =
{
	"{108}#",
	"{078}+",
	"{128}f",
	"{028}F",
	"{038}^",
	"{178}^",
	"{068}~",
	"{148}~",
	"{048}~",
	"{168}~",
	"{138}:",
	"{118}~",
	"{108}~",
	"{108}~",
	"{058}~",
	"{108}+",
	"{108}+",
	"{078}+",
	"{078}~",
	"{078}:",
	"{178}+",
	"{078}.",	
};

typedef struct map_data		MAP_DATA;
typedef struct map_room		MAP_ROOM;

struct __attribute__((packed)) map_data
{
	char		id[4];
	short int	version;
	short int length;
	short int tileset;
	short int width;
	short int height;
	short int spare;
};

struct __attribute__((packed)) map_room
{
	short int	sector:6;
	short int exit:6;
	short int spare:4;
};

int valid_map_exit(CHAR_DATA *mob, int vnum, sh_int door)
{
	push_call("valid_map_exit");

	if (room_index[vnum]->exit[door] == NULL)
	{
		pop_call();
		return -1;
	}

	if (room_index[room_index[vnum]->exit[door]->to_room] == NULL)
	{
		pop_call();
		return -1;
	}

	if (IS_SET(room_index[room_index[vnum]->exit[door]->to_room]->room_flags, ROOM_CLANHALL))
	{
		pop_call();
		return -1;
	}

	if (IS_SET(room_index[vnum]->exit[door]->exit_info, EX_RIP))
	{
		pop_call();
		return -1;
	}
	pop_call();
	return room_index[vnum]->exit[door]->to_room;
}

void build_area_map(int vnum, CHAR_DATA *mob, sh_int x, sh_int y)
{
	bool door;
	sh_int xx = 0, yy = 0;

	area_map[x][y] = vnum;

	if (IS_SET(room_index[vnum]->room_flags, ROOM_MAZE))
	{
		return;
	}

	for (door = 0 ; door < 4 ; door++)
	{
		if ((valid_exit = valid_map_exit(mob, vnum, door)) != -1)
		{
			switch (door)
			{
				case 0: xx = x;	yy = y+1;	break;
				case 1: xx = x+1;	yy = y;	break;
				case 2: xx = x;	yy = y-1;	break;
				case 3: xx = x-1;	yy = y;	break;
			}
			if (xx < 0 || xx > area_map_x || yy < 0 || yy > area_map_y)
			{
				continue;
			}
			if (area_map[xx][yy])
			{
				continue;
			}
			build_area_map(valid_exit, mob, xx, yy);
		}
	}
}



void do_map( CHAR_DATA *ch, char *argument )
{
	char tmp[MAX_INPUT_LENGTH];
	char buf[MAX_STRING_LENGTH * 2];
	int x, y, size;

	push_call("do_map(%p,%p)",ch,argument);

	memset(area_map, 0, sizeof(area_map));
	memset(buf, 0, MAX_STRING_LENGTH);

	if (!str_prefix("mode", argument))
	{
		ch->pcdata->vt100_mode = atol(one_argument(argument, tmp));
		pop_call();
		return;
	}
	else if (*argument != '\0' && !is_number(argument))
	{
		send_to_char("Syntax: map [radius]\n\r", ch);
		pop_call();
		return;
	}
	else
	{
		size = atol(argument);
	}

	area_map_y = get_pager_breakpt(ch) -1;
	area_map_x = get_page_width(ch) -1;

	area_map_y = URANGE(10, size * 2, area_map_y);
	area_map_x = URANGE(10, size * 2, area_map_x);

	build_area_map(ch->in_room->vnum, ch, area_map_x/2, area_map_y/2);

	if (ch->pcdata->vt100_mode == 9 && IS_GOD(ch))
	{
		draw_map(ch);
		pop_call();
		return;
	}

	for (buf[0] = '\0', y = area_map_y ; y >= 0 ; y--)
	{
		for (tmp[0] = '\0', x = 0 ; x <= area_map_x ; x++)
		{
			strcat(tmp, draw_room(ch, area_map[x][y]));
		}
		if (strlen(tmp) > area_map_x + 1)
		{
			cat_sprintf(buf, "%s\n\r", tmp);
		}
	}

	/*
		Toggle vt100 graphics mapping to write output - Scandum 03-03-2003
	*/

	switch (ch->pcdata->vt100_mode)
	{
		case 0:
			ch_printf_color(ch, "%s", ansi_compress(ch, buf, COLOR_TEXT, VT102_DIM));
			break;
		default:
			ch_printf_color(ch, "\033(0%s\033(B", ansi_compress(ch, buf, COLOR_TEXT, VT102_DIM));
			break;
	}
	pop_call();
	return;
}


char *draw_room(CHAR_DATA *ch, int vnum)
{
	static char buf[11];
	sh_int door, exits;

	push_call("draw_room(%p,%p)",ch,vnum);

	if (vnum == 0)
	{
		pop_call();
		return " ";
	}

	if (IS_SET(room_index[vnum]->room_flags, ROOM_MAZE))
	{
		switch (ch->pcdata->vt100_mode)
		{
			case 0:
				sprintf(buf, "{118}?");
				break;
			case 1:
				sprintf(buf, "{118}%c", 247);
				break;
			default:
				sprintf(buf, "{118}?");
				break;
		}
		pop_call();
		return buf;
	}

	if (vnum == ch->in_room->vnum)
	{
		switch (ch->pcdata->vt100_mode)
		{
			case 0:
				sprintf(buf, "{118}X");
				break;
			case 1:
				sprintf(buf, "{118}%c", 247);
				break;
			default:
				sprintf(buf, "{118}X");
				break;
		}
		pop_call();
		return buf;
	}
	
	int sect = room_index[vnum]->sector_type;

	if (sect == SECT_ROAD || sect == SECT_CITY || sect == SECT_INSIDE)
	{
		sprintf(buf, "{%d%d8}", area_map_color[sect], area_map_color[SECT_MAX + sect]);
	
		for (exits = door = 0 ; door < 4 ; door++)
		{
			if (valid_map_exit(ch, room_index[vnum]->vnum, door) != -1)
			{
				SET_BIT(exits, 1 << door);
			}
		}
		switch (ch->pcdata->vt100_mode)
		{
			case 0:
				cat_sprintf(buf, "%c", area_map_palet0[exits]);
				break;
			default:
				cat_sprintf(buf, "%c", area_map_palet1[exits]);
				break;
		}
	}
	else
	{
		sprintf(buf, "%s", sector_palette[sect]);
	}
	
	pop_call();
	return buf;
}

void draw_map(CHAR_DATA *ch)
{
	pop_call();
	return;
}