/* 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);
}
}