/************************************************************** * FFTacticsMUD : map.cpp * ************************************************************** * (c) 2002 Damien Dailidenas (Trenton). All rights reserved. * **************************************************************/ #include "main.h" #include <strstream> #include "sectors.h" void CH::map_area(const short diameter, const bool quiet) { short x, y; BATTLE_ROOM *room=battle_room, *prev_room=NULL; ostrstream ost_map; bool beginning=true, was_color=false, colour=false, found=false; for(y = 1; y <= diameter / 2; ++y) room = room->get_adjacent_room(DIR_N); for(x = 1; x <= diameter / 2; ++x) room = room->get_adjacent_room(DIR_W); for(y = 1; y <= diameter; ++y) { for(x = 1; x <= diameter; ++x) { colour = false; found = false; if((((abs)(room->x - battle_room->x) > diameter/2+1 || (abs)(room->y - battle_room->y) > diameter/2+1))) { ost_map << " "; colour = true; } else if(this->battle_room == room) { if(temp_action.action && room != orig_room) { string str_sector = sector_table[room->sector].print; ost_map << (temp_action.action == do_act ? "{2" : "{^") << "{z" << str_sector.substr(2, 2) << "{0"; } else ost_map << "{^" << name.substr(0, 2) << "{0"; } else if(!room->occupied(this) && action.target && room == action.target) { string str_sector = sector_table[room->sector].print; ost_map << "{!{z" << str_sector.substr(2, 2) << "{0"; colour = true; } else if(orig_room && room == orig_room) { ost_map << "{0" << name.substr(0, 2); colour = true; } else if(!room->occupied(this) && temp_action.action && orig_room->distance(room) <= temp_action.range) { string str_sector = sector_table[room->sector].print; ost_map << (temp_action.action == do_act ? "{1" : "{b") << str_sector.substr(2, 2); colour = true; } else { found = was_color || beginning || prev_room->occupied(this) || room->sector != prev_room->sector || prev_room == this->battle_room; ost_map << print_sector(prev_room, room, found); } was_color = colour; prev_room = room; room = room->get_adjacent_room(DIR_E); beginning = false; } ost_map << CLEAR; if(y == 1) { ost_map << " Location: " << battle_room->area->name << " " << battle_room->location(); if(admin) ost_map << " [" << area->id << "][" << battle_room->id << "]"; } else if(y == 2) ost_map << " Weather: " << battle_room->area->str_weather(); ost_map << ENDL; room = room->get_adjacent_room(DIR_S); for(x = 1; x <= diameter; ++x) room = room->get_adjacent_room(DIR_W); beginning = true; } ost_map << CLEAR << ends; if(!quiet && !npc) printf(ost_map.str()); return; } void CH::print_map(const bool quiet) { map_area(MAX(battle_room->area->width, 21), quiet); if(!quiet) WAIT_STATE(this, 1); return; } string CH::print_sector(BATTLE_ROOM *prev_room, BATTLE_ROOM *room, const bool color) { CH *ch; if((ch = room->occupied(this)) && can_see(ch)) return (ch->group && group && ch->group == group ? "{B" : "{!") + ch->name.substr(0, 2); string str_sector = sector_table[room->sector].print; return (color ? str_sector : str_sector.substr(2, 2)); }